summaryrefslogtreecommitdiff
authorkergoth <kergoth>2002-01-25 22:14:26 (UTC)
committer kergoth <kergoth>2002-01-25 22:14:26 (UTC)
commit15318cad33835e4e2dc620d033e43cd930676cdd (patch) (side-by-side diff)
treec2fa0399a2c47fda8e2cd0092c73a809d17f68eb
downloadopie-15318cad33835e4e2dc620d033e43cd930676cdd.zip
opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.gz
opie-15318cad33835e4e2dc620d033e43cd930676cdd.tar.bz2
Initial revision
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--.cvsignore2
-rw-r--r--Changes31
-rw-r--r--LICENSE.GPL350
-rw-r--r--Makefile59
-rw-r--r--README1
-rw-r--r--apps/.directory3
-rw-r--r--apps/.qde_menu.conf9
-rw-r--r--apps/.qpe_menu.conf9
-rw-r--r--apps/Applications/.directory37
-rw-r--r--apps/Applications/addressbook.desktop9
-rw-r--r--apps/Applications/calculator.desktop10
-rw-r--r--apps/Applications/citytime.desktop10
-rw-r--r--apps/Applications/clock.desktop10
-rw-r--r--apps/Applications/datebook.desktop9
-rw-r--r--apps/Applications/embeddedkonsole.desktop8
-rw-r--r--apps/Applications/filebrowser.desktop10
-rw-r--r--apps/Applications/helpbrowser.desktop9
-rw-r--r--apps/Applications/keypebble.desktop6
-rw-r--r--apps/Applications/mpegplayer.desktop12
-rw-r--r--apps/Applications/showimg.desktop9
-rw-r--r--apps/Applications/spreadsheet.desktop11
-rw-r--r--apps/Applications/sysinfo.desktop9
-rw-r--r--apps/Applications/tableviewer.desktop6
-rw-r--r--apps/Applications/textedit.desktop14
-rw-r--r--apps/Applications/todo.desktop9
-rw-r--r--apps/Games/.directory38
-rw-r--r--apps/Games/fifteen.desktop6
-rw-r--r--apps/Games/go.desktop6
-rw-r--r--apps/Games/mindbreaker.desktop6
-rw-r--r--apps/Games/minesweep.desktop10
-rw-r--r--apps/Games/parashoot.desktop9
-rw-r--r--apps/Games/patience.desktop10
-rw-r--r--apps/Games/qasteroids.desktop8
-rw-r--r--apps/Games/snake.desktop9
-rw-r--r--apps/Games/tetrix.desktop7
-rw-r--r--apps/Games/tux.desktop6
-rw-r--r--apps/Games/wordgame.desktop9
-rw-r--r--apps/Settings/.directory6
-rw-r--r--apps/Settings/Appearance.desktop8
-rw-r--r--apps/Settings/Calibrate.desktop8
-rw-r--r--apps/Settings/Language.desktop8
-rw-r--r--apps/Settings/Light.desktop8
-rw-r--r--apps/Settings/Rotation.desktop8
-rw-r--r--apps/Settings/Security.desktop6
-rw-r--r--apps/Settings/Sound.desktop5
-rw-r--r--apps/Settings/datetime.desktop9
-rw-r--r--apps/Settings/netsetup.desktop6
-rw-r--r--apps/Settings/qipkg.desktop8
-rw-r--r--apps/Settings/quit.desktop8
-rw-r--r--apps/__7separator.desktop2
-rw-r--r--apps/__9quit.desktop5
-rw-r--r--bin/.cvsignore2
-rw-r--r--bin/README1
-rwxr-xr-xconfigs/fix_linker9
-rw-r--r--configs/freebsd-g++-shared94
-rw-r--r--configs/freebsd-g++-shared-debug94
-rw-r--r--configs/freebsd-g++-static93
-rw-r--r--configs/freebsd-g++-static-debug93
-rw-r--r--configs/linux-arm-g++-shared94
-rw-r--r--configs/linux-arm-g++-shared-debug94
-rw-r--r--configs/linux-arm-g++-static93
-rw-r--r--configs/linux-arm-g++-static-debug93
-rw-r--r--configs/linux-cassiopeia-g++-shared94
-rw-r--r--configs/linux-cassiopeia-g++-shared-debug94
-rw-r--r--configs/linux-cassiopeia-g++-static93
-rw-r--r--configs/linux-cassiopeia-g++-static-debug93
-rw-r--r--configs/linux-generic-g++-shared94
-rw-r--r--configs/linux-generic-g++-shared-debug94
-rw-r--r--configs/linux-generic-g++-static93
-rw-r--r--configs/linux-generic-g++-static-debug93
-rw-r--r--configs/linux-ipaq-g++-shared94
-rw-r--r--configs/linux-ipaq-g++-shared-debug94
-rw-r--r--configs/linux-ipaq-g++-static93
-rw-r--r--configs/linux-ipaq-g++-static-debug93
-rw-r--r--configs/linux-mips-g++-shared94
-rw-r--r--configs/linux-mips-g++-shared-debug94
-rw-r--r--configs/linux-mips-g++-static93
-rw-r--r--configs/linux-mips-g++-static-debug93
-rw-r--r--configs/linux-sh3-g++-shared94
-rw-r--r--configs/linux-sh3-g++-shared-debug94
-rw-r--r--configs/linux-sh3-g++-static93
-rw-r--r--configs/linux-sh3-g++-static-debug93
-rw-r--r--configs/linux-x86-g++-shared94
-rw-r--r--configs/linux-x86-g++-shared-debug94
-rw-r--r--configs/linux-x86-g++-static93
-rw-r--r--configs/linux-x86-g++-static-debug93
-rwxr-xr-xconfigure270
-rw-r--r--core/.cvsignore13
-rw-r--r--core/applets/batteryapplet/.cvsignore3
-rw-r--r--core/applets/batteryapplet/Makefile.in122
-rw-r--r--core/applets/batteryapplet/battery.cpp152
-rw-r--r--core/applets/batteryapplet/battery.h55
-rw-r--r--core/applets/batteryapplet/batteryapplet.pro12
-rw-r--r--core/applets/batteryapplet/batteryappletimpl.cpp63
-rw-r--r--core/applets/batteryapplet/batteryappletimpl.h44
-rw-r--r--core/applets/batteryapplet/batterystatus.cpp140
-rw-r--r--core/applets/batteryapplet/batterystatus.h45
-rw-r--r--core/applets/batteryapplet/qpe-batteryapplet.control9
-rwxr-xr-xcore/applets/batteryapplet/qpe-batteryapplet.postinst2
-rwxr-xr-xcore/applets/batteryapplet/qpe-batteryapplet.postrm2
-rw-r--r--core/applets/clipboardapplet/Makefile.in115
-rw-r--r--core/applets/clipboardapplet/clipboard.cpp80
-rw-r--r--core/applets/clipboardapplet/clipboard.h47
-rw-r--r--core/applets/clipboardapplet/clipboardapplet.pro10
-rw-r--r--core/applets/clipboardapplet/clipboardappletimpl.cpp64
-rw-r--r--core/applets/clipboardapplet/clipboardappletimpl.h44
-rw-r--r--core/applets/clipboardapplet/qpe-clipboardapplet.control9
-rw-r--r--core/applets/clipboardapplet/qpe-clipboardapplet.postinst2
-rw-r--r--core/applets/clipboardapplet/qpe-clipboardapplet.postrm2
-rw-r--r--core/applets/clockapplet/.cvsignore3
-rw-r--r--core/applets/clockapplet/Makefile.in115
-rw-r--r--core/applets/clockapplet/clock.cpp97
-rw-r--r--core/applets/clockapplet/clock.h46
-rw-r--r--core/applets/clockapplet/clockapplet.pro12
-rw-r--r--core/applets/clockapplet/clockappletimpl.cpp65
-rw-r--r--core/applets/clockapplet/clockappletimpl.h46
-rw-r--r--core/applets/clockapplet/qpe-clockapplet.control9
-rwxr-xr-xcore/applets/clockapplet/qpe-clockapplet.postinst2
-rwxr-xr-xcore/applets/clockapplet/qpe-clockapplet.postrm2
-rw-r--r--core/applets/volumeapplet/.cvsignore3
-rw-r--r--core/applets/volumeapplet/Makefile.in115
-rw-r--r--core/applets/volumeapplet/qpe-volumeapplet.control9
-rwxr-xr-xcore/applets/volumeapplet/qpe-volumeapplet.postinst2
-rwxr-xr-xcore/applets/volumeapplet/qpe-volumeapplet.postrm2
-rw-r--r--core/applets/volumeapplet/volume.cpp199
-rw-r--r--core/applets/volumeapplet/volume.h75
-rw-r--r--core/applets/volumeapplet/volumeapplet.pro12
-rw-r--r--core/applets/volumeapplet/volumeappletimpl.cpp64
-rw-r--r--core/applets/volumeapplet/volumeappletimpl.h44
-rw-r--r--core/apps/calibrate/.cvsignore3
-rw-r--r--core/apps/calibrate/calibrate.cpp243
-rw-r--r--core/apps/calibrate/calibrate.h67
-rw-r--r--core/apps/calibrate/calibrate.pro1
-rw-r--r--core/apps/embeddedkonsole/.cvsignore2
-rw-r--r--core/apps/embeddedkonsole/Makefile.in285
-rw-r--r--core/apps/embeddedkonsole/MyPty.cpp279
-rw-r--r--core/apps/embeddedkonsole/MyPty.h88
-rw-r--r--core/apps/embeddedkonsole/TECommon.h114
-rw-r--r--core/apps/embeddedkonsole/TEHistory.cpp212
-rw-r--r--core/apps/embeddedkonsole/TEHistory.h75
-rw-r--r--core/apps/embeddedkonsole/TEScreen.cpp1197
-rw-r--r--core/apps/embeddedkonsole/TEScreen.h259
-rw-r--r--core/apps/embeddedkonsole/TEWidget.cpp1243
-rw-r--r--core/apps/embeddedkonsole/TEWidget.h202
-rw-r--r--core/apps/embeddedkonsole/TEmuVt102.cpp991
-rw-r--r--core/apps/embeddedkonsole/TEmuVt102.h135
-rw-r--r--core/apps/embeddedkonsole/TEmulation.cpp363
-rw-r--r--core/apps/embeddedkonsole/TEmulation.h117
-rw-r--r--core/apps/embeddedkonsole/default.keytab.h103
-rwxr-xr-xcore/apps/embeddedkonsole/embeddedkonsole.pro38
-rw-r--r--core/apps/embeddedkonsole/faded_bg.pngbin0 -> 1300 bytes
-rw-r--r--core/apps/embeddedkonsole/keytrans.cpp706
-rw-r--r--core/apps/embeddedkonsole/keytrans.h93
-rw-r--r--core/apps/embeddedkonsole/konsole.cpp512
-rw-r--r--core/apps/embeddedkonsole/konsole.h125
-rw-r--r--core/apps/embeddedkonsole/main.cpp60
-rw-r--r--core/apps/embeddedkonsole/qpe-embeddedkonsole.control9
-rw-r--r--core/apps/embeddedkonsole/session.cpp157
-rw-r--r--core/apps/embeddedkonsole/session.h93
-rw-r--r--core/apps/helpbrowser/.cvsignore2
-rw-r--r--core/apps/helpbrowser/Makefile.in119
-rw-r--r--core/apps/helpbrowser/helpbrowser.cpp227
-rw-r--r--core/apps/helpbrowser/helpbrowser.h69
-rw-r--r--core/apps/helpbrowser/helpbrowser.pro12
-rw-r--r--core/apps/helpbrowser/main.cpp34
-rw-r--r--core/apps/helpbrowser/qpe-helpbrowser.control10
-rw-r--r--core/apps/qcop/.cvsignore3
-rw-r--r--core/apps/qcop/Makefile.in102
-rw-r--r--core/apps/qcop/main.cpp85
-rw-r--r--core/apps/qcop/qcop.pro10
-rw-r--r--core/apps/qcop/qpe-qcop.control9
-rw-r--r--core/apps/textedit/.cvsignore3
-rw-r--r--core/apps/textedit/Makefile.in125
-rw-r--r--core/apps/textedit/inserttable.ui103
-rw-r--r--core/apps/textedit/main.cpp35
-rw-r--r--core/apps/textedit/qpe-textedit.control9
-rw-r--r--core/apps/textedit/qtextedit.h282
-rw-r--r--core/apps/textedit/textedit.cpp594
-rw-r--r--core/apps/textedit/textedit.h102
-rw-r--r--core/apps/textedit/textedit.po108
-rw-r--r--core/apps/textedit/textedit.pro16
-rw-r--r--core/launcher/.cvsignore7
-rw-r--r--core/launcher/Makefile.in867
-rw-r--r--core/launcher/appicons.cpp129
-rw-r--r--core/launcher/appicons.h51
-rw-r--r--core/launcher/apps.h83
-rw-r--r--core/launcher/background.cpp41
-rw-r--r--core/launcher/background.h40
-rw-r--r--core/launcher/desktop.cpp655
-rw-r--r--core/launcher/desktop.h129
-rw-r--r--core/launcher/info.cpp116
-rw-r--r--core/launcher/info.h55
-rw-r--r--core/launcher/inputmethods.cpp297
-rw-r--r--core/launcher/inputmethods.h76
-rw-r--r--core/launcher/irserver.cpp50
-rw-r--r--core/launcher/irserver.h20
-rw-r--r--core/launcher/launcher.cpp804
-rw-r--r--core/launcher/launcher.h136
-rw-r--r--core/launcher/launcher.pro110
-rw-r--r--core/launcher/launcherview.cpp596
-rw-r--r--core/launcher/launcherview.h81
-rw-r--r--core/launcher/main.cpp276
-rw-r--r--core/launcher/mrulist.cpp199
-rw-r--r--core/launcher/mrulist.h55
-rw-r--r--core/launcher/obexinterface.h40
-rw-r--r--core/launcher/packageslave.cpp97
-rw-r--r--core/launcher/packageslave.h52
-rw-r--r--core/launcher/qcopbridge.cpp416
-rw-r--r--core/launcher/qcopbridge.h95
-rw-r--r--core/launcher/qpe-taskbar.control9
-rw-r--r--core/launcher/quicklauncher.cpp49
-rw-r--r--core/launcher/quicklauncher.h40
-rw-r--r--core/launcher/shutdown.ui1323
-rw-r--r--core/launcher/shutdownimpl.cpp95
-rw-r--r--core/launcher/shutdownimpl.h50
-rw-r--r--core/launcher/sidething.cpp75
-rw-r--r--core/launcher/sidething.h43
-rw-r--r--core/launcher/stabmon.cpp92
-rw-r--r--core/launcher/stabmon.h34
-rw-r--r--core/launcher/startmenu.cpp171
-rw-r--r--core/launcher/startmenu.h76
-rw-r--r--core/launcher/syncdialog.ui228
-rw-r--r--core/launcher/systray.cpp107
-rw-r--r--core/launcher/systray.h58
-rw-r--r--core/launcher/taskbar.cpp314
-rw-r--r--core/launcher/taskbar.h86
-rw-r--r--core/launcher/transferserver.cpp1245
-rw-r--r--core/launcher/transferserver.h168
-rw-r--r--core/launcher/wait.cpp64
-rw-r--r--core/launcher/wait.h45
-rw-r--r--core/multimedia/opieplayer/.cvsignore2
-rw-r--r--core/multimedia/opieplayer/Makefile.in280
-rw-r--r--core/multimedia/opieplayer/audiodevice.cpp386
-rw-r--r--core/multimedia/opieplayer/audiodevice.h71
-rw-r--r--core/multimedia/opieplayer/audiowidget.cpp277
-rw-r--r--core/multimedia/opieplayer/audiowidget.h144
-rw-r--r--core/multimedia/opieplayer/libflash/Makefile.in644
-rw-r--r--core/multimedia/opieplayer/libflash/README191
-rw-r--r--core/multimedia/opieplayer/libflash/adpcm.cc235
-rw-r--r--core/multimedia/opieplayer/libflash/adpcm.h36
-rw-r--r--core/multimedia/opieplayer/libflash/bitmap.cc606
-rw-r--r--core/multimedia/opieplayer/libflash/bitmap.h72
-rw-r--r--core/multimedia/opieplayer/libflash/button.cc328
-rw-r--r--core/multimedia/opieplayer/libflash/button.h88
-rw-r--r--core/multimedia/opieplayer/libflash/character.cc233
-rw-r--r--core/multimedia/opieplayer/libflash/character.h90
-rw-r--r--core/multimedia/opieplayer/libflash/cxform.cc79
-rw-r--r--core/multimedia/opieplayer/libflash/cxform.h46
-rw-r--r--core/multimedia/opieplayer/libflash/displaylist.cc708
-rw-r--r--core/multimedia/opieplayer/libflash/displaylist.h80
-rw-r--r--core/multimedia/opieplayer/libflash/flash.cc275
-rw-r--r--core/multimedia/opieplayer/libflash/flash.h129
-rw-r--r--core/multimedia/opieplayer/libflash/font.cc105
-rw-r--r--core/multimedia/opieplayer/libflash/font.h56
-rw-r--r--core/multimedia/opieplayer/libflash/graphic.cc632
-rw-r--r--core/multimedia/opieplayer/libflash/graphic.h174
-rw-r--r--core/multimedia/opieplayer/libflash/graphic16.cc658
-rw-r--r--core/multimedia/opieplayer/libflash/graphic16.h39
-rw-r--r--core/multimedia/opieplayer/libflash/graphic24.cc648
-rw-r--r--core/multimedia/opieplayer/libflash/graphic24.h39
-rw-r--r--core/multimedia/opieplayer/libflash/graphic32.cc657
-rw-r--r--core/multimedia/opieplayer/libflash/graphic32.h39
-rw-r--r--core/multimedia/opieplayer/libflash/jconfig.h45
-rw-r--r--core/multimedia/opieplayer/libflash/jerror.h291
-rw-r--r--core/multimedia/opieplayer/libflash/jmorecfg.h363
-rw-r--r--core/multimedia/opieplayer/libflash/jpeglib.h1096
-rw-r--r--core/multimedia/opieplayer/libflash/libflash.pro15
-rw-r--r--core/multimedia/opieplayer/libflash/libflashplugin.cpp223
-rw-r--r--core/multimedia/opieplayer/libflash/libflashplugin.h96
-rw-r--r--core/multimedia/opieplayer/libflash/libflashpluginimpl.cpp70
-rw-r--r--core/multimedia/opieplayer/libflash/libflashpluginimpl.h53
-rw-r--r--core/multimedia/opieplayer/libflash/matrix.cc68
-rw-r--r--core/multimedia/opieplayer/libflash/matrix.h49
-rw-r--r--core/multimedia/opieplayer/libflash/movie.cc171
-rw-r--r--core/multimedia/opieplayer/libflash/movie.h68
-rw-r--r--core/multimedia/opieplayer/libflash/program.cc921
-rw-r--r--core/multimedia/opieplayer/libflash/program.h185
-rw-r--r--core/multimedia/opieplayer/libflash/rect.h55
-rw-r--r--core/multimedia/opieplayer/libflash/script.cc1988
-rw-r--r--core/multimedia/opieplayer/libflash/script.h144
-rw-r--r--core/multimedia/opieplayer/libflash/shape.cc1205
-rw-r--r--core/multimedia/opieplayer/libflash/shape.h181
-rw-r--r--core/multimedia/opieplayer/libflash/sound.cc439
-rw-r--r--core/multimedia/opieplayer/libflash/sound.h83
-rw-r--r--core/multimedia/opieplayer/libflash/sprite.cc91
-rw-r--r--core/multimedia/opieplayer/libflash/sprite.h38
-rw-r--r--core/multimedia/opieplayer/libflash/sqrt.cc4099
-rw-r--r--core/multimedia/opieplayer/libflash/swf.h229
-rw-r--r--core/multimedia/opieplayer/libflash/text.cc246
-rw-r--r--core/multimedia/opieplayer/libflash/text.h77
-rw-r--r--core/multimedia/opieplayer/libmad/.cvsignore2
-rw-r--r--core/multimedia/opieplayer/libmad/D.dat607
-rw-r--r--core/multimedia/opieplayer/libmad/Makefile.in226
-rw-r--r--core/multimedia/opieplayer/libmad/bit.c220
-rw-r--r--core/multimedia/opieplayer/libmad/bit.h47
-rw-r--r--core/multimedia/opieplayer/libmad/decoder.c554
-rw-r--r--core/multimedia/opieplayer/libmad/decoder.h87
-rwxr-xr-xcore/multimedia/opieplayer/libmad/fix_headers_problem25
-rw-r--r--core/multimedia/opieplayer/libmad/fixed.c37
-rw-r--r--core/multimedia/opieplayer/libmad/fixed.h413
-rw-r--r--core/multimedia/opieplayer/libmad/frame.c499
-rw-r--r--core/multimedia/opieplayer/libmad/frame.h115
-rw-r--r--core/multimedia/opieplayer/libmad/huffman.c3087
-rw-r--r--core/multimedia/opieplayer/libmad/huffman.h66
-rw-r--r--core/multimedia/opieplayer/libmad/imdct_l_arm.S1000
-rw-r--r--core/multimedia/opieplayer/libmad/imdct_s.dat62
-rw-r--r--core/multimedia/opieplayer/libmad/layer12.c496
-rw-r--r--core/multimedia/opieplayer/libmad/layer12.h31
-rw-r--r--core/multimedia/opieplayer/libmad/layer3.c2492
-rw-r--r--core/multimedia/opieplayer/libmad/layer3.h30
-rw-r--r--core/multimedia/opieplayer/libmad/libmad.pro12
-rw-r--r--core/multimedia/opieplayer/libmad/libmad_global.h45
-rw-r--r--core/multimedia/opieplayer/libmad/libmad_version.h47
-rw-r--r--core/multimedia/opieplayer/libmad/libmadplugin.cpp578
-rw-r--r--core/multimedia/opieplayer/libmad/libmadplugin.h101
-rw-r--r--core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp70
-rw-r--r--core/multimedia/opieplayer/libmad/libmadpluginimpl.h53
-rw-r--r--core/multimedia/opieplayer/libmad/mad.h830
-rw-r--r--core/multimedia/opieplayer/libmad/qc_table.dat77
-rw-r--r--core/multimedia/opieplayer/libmad/qpe-libmadplugin.control9
-rw-r--r--core/multimedia/opieplayer/libmad/rq_table.dat8747
-rw-r--r--core/multimedia/opieplayer/libmad/sf_table.dat100
-rw-r--r--core/multimedia/opieplayer/libmad/stream.c123
-rw-r--r--core/multimedia/opieplayer/libmad/stream.h102
-rw-r--r--core/multimedia/opieplayer/libmad/synth.c855
-rw-r--r--core/multimedia/opieplayer/libmad/synth.h50
-rw-r--r--core/multimedia/opieplayer/libmad/timer.c480
-rw-r--r--core/multimedia/opieplayer/libmad/timer.h100
-rw-r--r--core/multimedia/opieplayer/libmad/version.c91
-rw-r--r--core/multimedia/opieplayer/libmpeg3/.cvsignore5
-rw-r--r--core/multimedia/opieplayer/libmpeg3/COPYING340
-rw-r--r--core/multimedia/opieplayer/libmpeg3/Makefile.in774
-rw-r--r--core/multimedia/opieplayer/libmpeg3/README35
-rw-r--r--core/multimedia/opieplayer/libmpeg3/VERSION1
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/Makefile35
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/ac3.c691
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/ac3.h308
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/bit_allocation.c586
-rwxr-xr-xcore/multimedia/opieplayer/libmpeg3/audio/c_flags1
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/dct.c1135
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/exponents.c141
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/fptables.h1556
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/header.c163
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/huffman.h355
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/layer1.c6
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/layer2.c418
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/layer3.c1254
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/mantissa.c387
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.c536
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.h144
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/mpeg3real.h232
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/pcm.c51
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/synthesizers.c174
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/tables.c554
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/tables.h88
-rw-r--r--core/multimedia/opieplayer/libmpeg3/audio/uncouple.c135
-rw-r--r--core/multimedia/opieplayer/libmpeg3/bitstream.c167
-rw-r--r--core/multimedia/opieplayer/libmpeg3/bitstream.h207
-rwxr-xr-xcore/multimedia/opieplayer/libmpeg3/c_flags4
-rwxr-xr-xcore/multimedia/opieplayer/libmpeg3/configure102
-rw-r--r--core/multimedia/opieplayer/libmpeg3/docs/index.html306
-rw-r--r--core/multimedia/opieplayer/libmpeg3/dump.c79
-rw-r--r--core/multimedia/opieplayer/libmpeg3/libmpeg3.c672
-rw-r--r--core/multimedia/opieplayer/libmpeg3/libmpeg3.h175
-rw-r--r--core/multimedia/opieplayer/libmpeg3/libmpeg3.pro42
-rw-r--r--core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.cpp105
-rw-r--r--core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h113
-rw-r--r--core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.cpp70
-rw-r--r--core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h53
-rwxr-xr-xcore/multimedia/opieplayer/libmpeg3/make_package10
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3atrack.c36
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3atrack.h36
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3cat.c225
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3css.c32
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3css.h29
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.c19
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.h29
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3demux.c1849
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3demux.h118
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3io.c127
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3io.h74
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3private.h62
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3private.inc110
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3protos.h278
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3title.c63
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3title.h47
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3toc.c81
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.c33
-rw-r--r--core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.h39
-rw-r--r--core/multimedia/opieplayer/libmpeg3/ronin_narrow.toc26
-rw-r--r--core/multimedia/opieplayer/libmpeg3/ronin_wide.toc47
-rw-r--r--core/multimedia/opieplayer/libmpeg3/timecode.h31
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/Makefile32
-rwxr-xr-xcore/multimedia/opieplayer/libmpeg3/video/c_flags1
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/getpicture.c767
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/headers.c492
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/idct.c160
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/idct.h24
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/layerdata.h35
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/macroblocks.c338
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/mmxidct.S675
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/mmxtest.c35
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/motion.c230
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/mpeg3video.c597
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/mpeg3video.h180
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/mpeg3videoprotos.h26
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/output.c993
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/reconmmx.s301
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/reconstruct.c1290
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/seek.c233
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/slice.c702
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/slice.h194
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/vlc.c421
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/vlc.h164
-rw-r--r--core/multimedia/opieplayer/libmpeg3/video/worksheet.c30
-rw-r--r--core/multimedia/opieplayer/loopcontrol.cpp464
-rw-r--r--core/multimedia/opieplayer/loopcontrol.h88
-rw-r--r--core/multimedia/opieplayer/loopcontrol_threaded.cpp626
-rw-r--r--core/multimedia/opieplayer/loopcontrol_threaded.h89
-rw-r--r--core/multimedia/opieplayer/main.cpp57
-rw-r--r--core/multimedia/opieplayer/mediaplayer.cpp182
-rw-r--r--core/multimedia/opieplayer/mediaplayer.h59
-rw-r--r--core/multimedia/opieplayer/mediaplayerplugininterface.h113
-rw-r--r--core/multimedia/opieplayer/mediaplayerstate.cpp185
-rw-r--r--core/multimedia/opieplayer/mediaplayerstate.h117
-rw-r--r--core/multimedia/opieplayer/mpegplayer.pro21
-rw-r--r--core/multimedia/opieplayer/playlistselection.cpp179
-rw-r--r--core/multimedia/opieplayer/playlistselection.h62
-rw-r--r--core/multimedia/opieplayer/playlistwidget.cpp448
-rw-r--r--core/multimedia/opieplayer/playlistwidget.h68
-rw-r--r--core/multimedia/opieplayer/qpe-mpegplayer.control9
-rw-r--r--core/multimedia/opieplayer/videowidget.cpp423
-rw-r--r--core/multimedia/opieplayer/videowidget.h88
-rw-r--r--core/multimedia/opieplayer/wavplugin/.cvsignore2
-rw-r--r--core/multimedia/opieplayer/wavplugin/Makefile.in112
-rw-r--r--core/multimedia/opieplayer/wavplugin/qpe-wavplugin.control9
-rw-r--r--core/multimedia/opieplayer/wavplugin/wavplugin.cpp334
-rw-r--r--core/multimedia/opieplayer/wavplugin/wavplugin.h97
-rw-r--r--core/multimedia/opieplayer/wavplugin/wavplugin.pro10
-rw-r--r--core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp70
-rw-r--r--core/multimedia/opieplayer/wavplugin/wavpluginimpl.h53
-rw-r--r--core/opie-login/.cvsignore3
-rw-r--r--core/opie-login/README78
-rw-r--r--core/opie-login/qdm_config.h30
-rw-r--r--core/opie-login/qdmdialog.ui856
-rw-r--r--core/opie-login/qdmdialogimpl.cpp535
-rw-r--r--core/opie-login/qdmdialogimpl.h90
-rw-r--r--core/pim/addressbook/.cvsignore16
-rw-r--r--core/pim/addressbook/Makefile.in244
-rw-r--r--core/pim/addressbook/abeditor.cpp619
-rw-r--r--core/pim/addressbook/abeditor.h79
-rw-r--r--core/pim/addressbook/ablabel.cpp53
-rw-r--r--core/pim/addressbook/ablabel.h50
-rw-r--r--core/pim/addressbook/abtable.cpp1091
-rw-r--r--core/pim/addressbook/abtable.h140
-rw-r--r--core/pim/addressbook/addressbook.cpp829
-rw-r--r--core/pim/addressbook/addressbook.cw26
-rw-r--r--core/pim/addressbook/addressbook.h99
-rw-r--r--core/pim/addressbook/addressbook.pro22
-rw-r--r--core/pim/addressbook/addresspicker.cpp52
-rw-r--r--core/pim/addressbook/addresspicker.h39
-rw-r--r--core/pim/addressbook/addresssettings.cpp136
-rw-r--r--core/pim/addressbook/addresssettings.h47
-rw-r--r--core/pim/addressbook/addresssettingsbase.ui170
-rw-r--r--core/pim/addressbook/main.cpp41
-rw-r--r--core/pim/addressbook/qpe-addressbook.control9
-rw-r--r--core/pim/datebook/.cvsignore12
-rw-r--r--core/pim/datebook/Makefile.in385
-rw-r--r--core/pim/datebook/datebook.cpp854
-rw-r--r--core/pim/datebook/datebook.h111
-rw-r--r--core/pim/datebook/datebook.pro36
-rw-r--r--core/pim/datebook/datebookday.cpp553
-rw-r--r--core/pim/datebook/datebookday.h138
-rw-r--r--core/pim/datebook/datebookdayheader.ui424
-rw-r--r--core/pim/datebook/datebookdayheaderimpl.cpp181
-rw-r--r--core/pim/datebook/datebookdayheaderimpl.h57
-rw-r--r--core/pim/datebook/datebooksettings.cpp135
-rw-r--r--core/pim/datebook/datebooksettings.h48
-rw-r--r--core/pim/datebook/datebooksettingsbase.ui232
-rw-r--r--core/pim/datebook/datebookweek.cpp687
-rw-r--r--core/pim/datebook/datebookweek.h152
-rw-r--r--core/pim/datebook/datebookweekheader.ui167
-rw-r--r--core/pim/datebook/datebookweekheaderimpl.cpp126
-rw-r--r--core/pim/datebook/datebookweekheaderimpl.h62
-rw-r--r--core/pim/datebook/dateentry.ui1095
-rw-r--r--core/pim/datebook/dateentryimpl.cpp474
-rw-r--r--core/pim/datebook/dateentryimpl.h71
-rw-r--r--core/pim/datebook/main.cpp38
-rw-r--r--core/pim/datebook/qpe-datebook.control9
-rw-r--r--core/pim/datebook/repeatentry.cpp595
-rw-r--r--core/pim/datebook/repeatentry.h98
-rw-r--r--core/pim/datebook/repeatentrybase.ui713
-rw-r--r--core/pim/todo/.cvsignore4
-rw-r--r--core/pim/todo/Makefile.in201
-rw-r--r--core/pim/todo/main.cpp36
-rw-r--r--core/pim/todo/mainwindow.cpp466
-rw-r--r--core/pim/todo/mainwindow.h73
-rw-r--r--core/pim/todo/qpe-todo.control9
-rw-r--r--core/pim/todo/todo.pro19
-rw-r--r--core/pim/todo/todoentry.ui266
-rw-r--r--core/pim/todo/todoentryimpl.cpp142
-rw-r--r--core/pim/todo/todoentryimpl.h61
-rw-r--r--core/pim/todo/todotable.cpp859
-rw-r--r--core/pim/todo/todotable.h207
-rw-r--r--core/settings/citytime/.cvsignore5
-rw-r--r--core/settings/citytime/Makefile.in184
-rw-r--r--core/settings/citytime/citytime.cpp272
-rw-r--r--core/settings/citytime/citytime.h66
-rw-r--r--core/settings/citytime/citytime.pro13
-rw-r--r--core/settings/citytime/citytimebase.ui1199
-rwxr-xr-xcore/settings/citytime/findvalidzones38
-rw-r--r--core/settings/citytime/light.pngbin0 -> 223 bytes
-rw-r--r--core/settings/citytime/mag.pngbin0 -> 193 bytes
-rw-r--r--core/settings/citytime/main.cpp30
-rw-r--r--core/settings/citytime/qpe-citytime.control9
-rw-r--r--core/settings/citytime/stylusnormalizer.cpp98
-rw-r--r--core/settings/citytime/stylusnormalizer.h70
-rw-r--r--core/settings/citytime/sun.c323
-rw-r--r--core/settings/citytime/sun.h57
-rw-r--r--core/settings/citytime/zonemap.cpp670
-rw-r--r--core/settings/citytime/zonemap.cw21
-rw-r--r--core/settings/citytime/zonemap.h157
-rw-r--r--core/settings/light-and-power/.cvsignore4
-rw-r--r--core/settings/light-and-power/Makefile.in135
-rw-r--r--core/settings/light-and-power/light-and-power.pro12
-rw-r--r--core/settings/light-and-power/light-off.xpm23
-rw-r--r--core/settings/light-and-power/light-on.xpm24
-rw-r--r--core/settings/light-and-power/light.cpp133
-rw-r--r--core/settings/light-and-power/lightsettingsbase.ui471
-rw-r--r--core/settings/light-and-power/main.cpp38
-rw-r--r--core/settings/light-and-power/qpe-light-and-power.control9
-rw-r--r--core/settings/light-and-power/settings.h50
-rw-r--r--core/settings/security/.cvsignore5
-rw-r--r--core/settings/security/Makefile.in135
-rw-r--r--core/settings/security/main.cpp38
-rw-r--r--core/settings/security/qpe-security.control9
-rw-r--r--core/settings/security/security.cpp234
-rw-r--r--core/settings/security/security.h64
-rw-r--r--core/settings/security/security.pro12
-rw-r--r--core/settings/security/securitybase.ui200
-rw-r--r--docs/README2
-rw-r--r--docs/beauty.html10
-rw-r--r--docs/copying.html336
-rw-r--r--docs/customization.html7
-rw-r--r--docs/developing.html10
-rw-r--r--docs/features.html11
-rw-r--r--docs/i18n.html23
-rw-r--r--docs/index.html17
-rw-r--r--docs/indices.doc152
-rw-r--r--docs/logo32.pngbin0 -> 1857 bytes
-rw-r--r--docs/pointing.html9
-rw-r--r--docs/portability.html9
-rw-r--r--docs/qcop.doc179
-rw-r--r--docs/qt-embedded.html22
-rw-r--r--docs/size.html14
-rw-r--r--docs/source.html8
-rw-r--r--docs/start.doc191
-rw-r--r--docs/support.html9
-rw-r--r--docs/time.html11
-rw-r--r--docs/what.html7
-rw-r--r--docs/writing-handwriting.html7
-rw-r--r--docs/writing-keyboard.html6
-rw-r--r--docs/writing-opti.html4
-rw-r--r--docs/writing-pickboard.html11
-rw-r--r--docs/writing-unicode.html7
-rw-r--r--docs/writing.html13
-rw-r--r--etc/colors/Blues.scheme4
-rw-r--r--etc/colors/Bright.scheme5
-rw-r--r--etc/colors/Desert.scheme4
-rw-r--r--etc/colors/Gray.scheme4
-rw-r--r--etc/colors/Green.scheme4
-rw-r--r--etc/colors/Purple.scheme5
-rw-r--r--etc/colors/Yellow.scheme5
-rw-r--r--etc/dict/README9
-rw-r--r--etc/dict/dawgbin0 -> 189396 bytes
-rw-r--r--etc/dict/dawg.debin0 -> 371368 bytes
-rw-r--r--etc/dict/dawg.nobin0 -> 263376 bytes
-rw-r--r--etc/dict/local.dawgbin0 -> 180 bytes
-rw-r--r--etc/dict/words45407
-rw-r--r--etc/dict/words.de229027
-rw-r--r--etc/dict/words.hu68370
-rw-r--r--etc/dict/words.no104810
-rw-r--r--etc/filebrowserdb632
-rwxr-xr-xetc/init.d/qpe39
-rw-r--r--etc/ipkg.conf2
-rw-r--r--etc/keytabs/linux.keytab136
-rw-r--r--etc/keytabs/vt100.keytab136
-rw-r--r--etc/mime.types126
-rw-r--r--etc/network/DialUp.conf11
-rw-r--r--etc/network/LAN.conf10
-rw-r--r--etc/qimpen/asciilower.qptbin0 -> 8777 bytes
-rw-r--r--etc/qimpen/asciiupper.qptbin0 -> 11794 bytes
-rw-r--r--etc/qimpen/combining.qptbin0 -> 469 bytes
-rw-r--r--etc/qimpen/default.conf17
-rw-r--r--etc/qimpen/numeric.qptbin0 -> 6962 bytes
-rw-r--r--etc/unit_conversion.dat195
-rw-r--r--example/Example.pngbin0 -> 1262 bytes
-rw-r--r--example/README2
-rw-r--r--example/example.control11
-rw-r--r--example/example.cpp28
-rw-r--r--example/example.desktop6
-rw-r--r--example/example.h17
-rw-r--r--example/example.pro10
-rw-r--r--example/examplebase.ui55
-rw-r--r--example/main.cpp12
-rw-r--r--freetype/Makefile.in117
-rw-r--r--freetype/fontfactoryttf_qws.cpp238
-rw-r--r--freetype/fontfactoryttf_qws.h64
-rw-r--r--freetype/freetype.pro13
-rw-r--r--freetype/freetypefactoryimpl.cpp57
-rw-r--r--freetype/freetypefactoryimpl.h40
-rw-r--r--freetype/qfontdata_p.h94
-rw-r--r--i18n/de/.directory6
-rw-r--r--i18n/de/addressbook.qmbin0 -> 3461 bytes
-rw-r--r--i18n/de/appearance.qmbin0 -> 482 bytes
-rw-r--r--i18n/de/appearance.ts17
-rw-r--r--i18n/de/calculator.qmbin0 -> 1098 bytes
-rw-r--r--i18n/de/calculator.ts132
-rw-r--r--i18n/de/citytime.qmbin0 -> 2069 bytes
-rw-r--r--i18n/de/citytime.ts131
-rw-r--r--i18n/de/clock.qmbin0 -> 504 bytes
-rw-r--r--i18n/de/clock.ts25
-rw-r--r--i18n/de/datebook.qmbin0 -> 7961 bytes
-rw-r--r--i18n/de/datebook.ts959
-rw-r--r--i18n/de/filebrowser.qmbin0 -> 3332 bytes
-rw-r--r--i18n/de/filebrowser.ts164
-rw-r--r--i18n/de/go.qmbin0 -> 867 bytes
-rw-r--r--i18n/de/go.ts56
-rw-r--r--i18n/de/helpbrowser.qmbin0 -> 681 bytes
-rw-r--r--i18n/de/helpbrowser.ts53
-rw-r--r--i18n/de/language.qmbin0 -> 457 bytes
-rw-r--r--i18n/de/language.ts13
-rw-r--r--i18n/de/libbatteryapplet.qmbin0 -> 1025 bytes
-rw-r--r--i18n/de/libbatteryapplet.ts61
-rw-r--r--i18n/de/libcardmonapplet.qmbin0 -> 559 bytes
-rw-r--r--i18n/de/libcardmonapplet.ts21
-rw-r--r--i18n/de/libclockapplet.qmbin0 -> 337 bytes
-rw-r--r--i18n/de/libclockapplet.ts2
-rw-r--r--i18n/de/libdialup.qmbin0 -> 2435 bytes
-rw-r--r--i18n/de/libdialup.ts196
-rw-r--r--i18n/de/liblan.qmbin0 -> 1235 bytes
-rw-r--r--i18n/de/liblan.ts95
-rw-r--r--i18n/de/libnetmonapplet.qmbin0 -> 694 bytes
-rw-r--r--i18n/de/libnetmonapplet.ts36
-rw-r--r--i18n/de/libqhandwriting.qmbin0 -> 3242 bytes
-rw-r--r--i18n/de/libqhandwriting.ts143
-rw-r--r--i18n/de/libqkeyboard.qmbin0 -> 337 bytes
-rw-r--r--i18n/de/libqkeyboard.ts9
-rw-r--r--i18n/de/libqpe.qmbin0 -> 8624 bytes
-rw-r--r--i18n/de/libqpe.ts888
-rw-r--r--i18n/de/libqunikeyboard.qmbin0 -> 337 bytes
-rw-r--r--i18n/de/libqunikeyboard.ts9
-rw-r--r--i18n/de/libvolumeapplet.qmbin0 -> 382 bytes
-rw-r--r--i18n/de/libvolumeapplet.ts9
-rw-r--r--i18n/de/light-and-power.qmbin0 -> 945 bytes
-rw-r--r--i18n/de/light-and-power.ts49
-rw-r--r--i18n/de/mindbreaker.qmbin0 -> 814 bytes
-rw-r--r--i18n/de/mindbreaker.ts81
-rw-r--r--i18n/de/minesweep.qmbin0 -> 722 bytes
-rw-r--r--i18n/de/minesweep.ts62
-rw-r--r--i18n/de/mountmonapplet.ts9
-rw-r--r--i18n/de/mpegplayer.qmbin0 -> 3034 bytes
-rw-r--r--i18n/de/mpegplayer.ts224
-rw-r--r--i18n/de/netsetup.qmbin0 -> 1485 bytes
-rw-r--r--i18n/de/netsetup.ts77
-rw-r--r--i18n/de/parashoot.qmbin0 -> 679 bytes
-rw-r--r--i18n/de/parashoot.ts63
-rw-r--r--i18n/de/patience.qmbin0 -> 1011 bytes
-rw-r--r--i18n/de/patience.ts137
-rw-r--r--i18n/de/qasteroids.qmbin0 -> 813 bytes
-rw-r--r--i18n/de/qasteroids.ts41
-rw-r--r--i18n/de/qipkg.qmbin0 -> 1365 bytes
-rw-r--r--i18n/de/qipkg.ts130
-rw-r--r--i18n/de/security.qmbin0 -> 1303 bytes
-rw-r--r--i18n/de/security.ts58
-rw-r--r--i18n/de/showimg.qmbin0 -> 1189 bytes
-rw-r--r--i18n/de/showimg.ts69
-rw-r--r--i18n/de/snake.qmbin0 -> 1171 bytes
-rw-r--r--i18n/de/snake.ts68
-rw-r--r--i18n/de/solitaire.ts137
-rw-r--r--i18n/de/sysinfo.qmbin0 -> 1642 bytes
-rw-r--r--i18n/de/sysinfo.ts120
-rw-r--r--i18n/de/systemtime.qmbin0 -> 853 bytes
-rw-r--r--i18n/de/systemtime.ts84
-rw-r--r--i18n/de/tetrix.qmbin0 -> 394 bytes
-rw-r--r--i18n/de/tetrix.ts29
-rw-r--r--i18n/de/textedit.qmbin0 -> 1295 bytes
-rw-r--r--i18n/de/textedit.ts138
-rw-r--r--i18n/de/todolist.qmbin0 -> 2255 bytes
-rw-r--r--i18n/de/todolist.ts248
-rw-r--r--i18n/de/wordgame.qmbin0 -> 1610 bytes
-rw-r--r--i18n/de/wordgame.ts149
-rw-r--r--i18n/en/.directory6
-rw-r--r--i18n/en/README2
-rw-r--r--i18n/hu/.desktop4
-rw-r--r--i18n/hu/addressbook.po336
-rw-r--r--i18n/hu/addressbook.qmbin0 -> 4886 bytes
-rw-r--r--i18n/hu/calculator.po16
-rw-r--r--i18n/hu/calculator.qmbin0 -> 107 bytes
-rw-r--r--i18n/hu/citytime.po122
-rw-r--r--i18n/hu/citytime.qmbin0 -> 2646 bytes
-rw-r--r--i18n/hu/clock.po16
-rw-r--r--i18n/hu/clock.qmbin0 -> 79 bytes
-rw-r--r--i18n/hu/datebook.po424
-rw-r--r--i18n/hu/datebook.qmbin0 -> 6928 bytes
-rw-r--r--i18n/hu/filebrowser.po168
-rw-r--r--i18n/hu/filebrowser.qmbin0 -> 3184 bytes
-rw-r--r--i18n/hu/header3
-rw-r--r--i18n/hu/helpbrowser.po48
-rw-r--r--i18n/hu/helpbrowser.qmbin0 -> 695 bytes
-rw-r--r--i18n/hu/libqpe.po24
-rw-r--r--i18n/hu/libqpe.qmbin0 -> 321 bytes
-rw-r--r--i18n/hu/login_de.po76
-rw-r--r--i18n/hu/login_de.qmbin0 -> 1120 bytes
-rw-r--r--i18n/hu/minesweep.po65
-rw-r--r--i18n/hu/minesweep.qmbin0 -> 1085 bytes
-rw-r--r--i18n/hu/mpegplayer.po44
-rw-r--r--i18n/hu/mpegplayer.qmbin0 -> 600 bytes
-rw-r--r--i18n/hu/parashoot.po55
-rw-r--r--i18n/hu/parashoot.qmbin0 -> 1533 bytes
-rw-r--r--i18n/hu/qpe.po100
-rw-r--r--i18n/hu/qpe.qmbin0 -> 1775 bytes
-rw-r--r--i18n/hu/settings.po244
-rw-r--r--i18n/hu/settings.qmbin0 -> 7019 bytes
-rw-r--r--i18n/hu/snake.po69
-rw-r--r--i18n/hu/snake.qmbin0 -> 1813 bytes
-rw-r--r--i18n/hu/solitaire.po192
-rw-r--r--i18n/hu/solitaire.qmbin0 -> 5569 bytes
-rw-r--r--i18n/hu/spreadsheet.po48
-rw-r--r--i18n/hu/spreadsheet.qmbin0 -> 774 bytes
-rw-r--r--i18n/hu/tetrix.po36
-rw-r--r--i18n/hu/tetrix.qmbin0 -> 394 bytes
-rw-r--r--i18n/hu/textedit.po108
-rw-r--r--i18n/hu/textedit.qmbin0 -> 1557 bytes
-rw-r--r--i18n/hu/todo.po148
-rw-r--r--i18n/hu/todo.qmbin0 -> 2640 bytes
-rw-r--r--i18n/hu/wordgame.po88
-rw-r--r--i18n/hu/wordgame.qmbin0 -> 1351 bytes
-rw-r--r--i18n/ja/.directory6
-rw-r--r--i18n/ja/calculator.po16
-rw-r--r--i18n/ja/calculator.qmbin0 -> 91 bytes
-rw-r--r--i18n/ja/citytime.po123
-rw-r--r--i18n/ja/citytime.qmbin0 -> 2282 bytes
-rw-r--r--i18n/ja/clock.po16
-rw-r--r--i18n/ja/clock.qmbin0 -> 77 bytes
-rw-r--r--i18n/ja/helpbrowser.po48
-rw-r--r--i18n/ja/helpbrowser.qmbin0 -> 629 bytes
-rw-r--r--i18n/ja/libqpe.po24
-rw-r--r--i18n/ja/libqpe.qmbin0 -> 273 bytes
-rw-r--r--i18n/ja/login_ja.po76
-rw-r--r--i18n/ja/login_ja.qmbin0 -> 1077 bytes
-rw-r--r--i18n/ja/minesweep.po67
-rw-r--r--i18n/ja/minesweep.qmbin0 -> 915 bytes
-rw-r--r--i18n/ja/mpegplayer.po44
-rw-r--r--i18n/ja/mpegplayer.qmbin0 -> 512 bytes
-rw-r--r--i18n/ja/parashoot.po55
-rw-r--r--i18n/ja/parashoot.qmbin0 -> 1089 bytes
-rw-r--r--i18n/ja/qpe.po97
-rw-r--r--i18n/ja/qpe.qmbin0 -> 1391 bytes
-rw-r--r--i18n/ja/settings.po245
-rw-r--r--i18n/ja/settings.qmbin0 -> 5027 bytes
-rw-r--r--i18n/ja/snake.po74
-rw-r--r--i18n/ja/snake.qmbin0 -> 1313 bytes
-rw-r--r--i18n/ja/solitaire.po192
-rw-r--r--i18n/ja/solitaire.qmbin0 -> 5113 bytes
-rw-r--r--i18n/ja/spreadsheet.po48
-rw-r--r--i18n/ja/spreadsheet.qmbin0 -> 670 bytes
-rw-r--r--i18n/ja/tetrix.po36
-rw-r--r--i18n/ja/tetrix.qmbin0 -> 358 bytes
-rw-r--r--i18n/ja/textedit.po108
-rw-r--r--i18n/ja/textedit.qmbin0 -> 1430 bytes
-rw-r--r--i18n/ja/todo.po148
-rw-r--r--i18n/ja/todo.qmbin0 -> 2350 bytes
-rw-r--r--i18n/ja/wordgame.po89
-rw-r--r--i18n/ja/wordgame.qmbin0 -> 1199 bytes
-rw-r--r--i18n/ko/.directory7
-rw-r--r--i18n/ko/textedit.po108
-rw-r--r--i18n/ko/textedit.qmbin0 -> 767 bytes
-rw-r--r--i18n/no/.directory6
-rw-r--r--i18n/no/addressbook.po336
-rw-r--r--i18n/no/addressbook.qmbin0 -> 4688 bytes
-rw-r--r--i18n/no/calculator.po16
-rw-r--r--i18n/no/calculator.qmbin0 -> 107 bytes
-rw-r--r--i18n/no/citytime.po122
-rw-r--r--i18n/no/citytime.qmbin0 -> 2530 bytes
-rw-r--r--i18n/no/clock.po16
-rw-r--r--i18n/no/clock.qmbin0 -> 85 bytes
-rw-r--r--i18n/no/datebook.po424
-rw-r--r--i18n/no/datebook.qmbin0 -> 3310 bytes
-rw-r--r--i18n/no/filebrowser.po168
-rw-r--r--i18n/no/filebrowser.qmbin0 -> 2958 bytes
-rw-r--r--i18n/no/helpbrowser.po48
-rw-r--r--i18n/no/helpbrowser.qmbin0 -> 653 bytes
-rw-r--r--i18n/no/libqpe.po24
-rw-r--r--i18n/no/libqpe.qmbin0 -> 313 bytes
-rw-r--r--i18n/no/minesweep.po64
-rw-r--r--i18n/no/minesweep.qmbin0 -> 1025 bytes
-rw-r--r--i18n/no/mpegplayer.po44
-rw-r--r--i18n/no/mpegplayer.qmbin0 -> 546 bytes
-rw-r--r--i18n/no/parashoot.po54
-rw-r--r--i18n/no/parashoot.qmbin0 -> 1491 bytes
-rw-r--r--i18n/no/qpe.po96
-rw-r--r--i18n/no/qpe.qmbin0 -> 1703 bytes
-rw-r--r--i18n/no/settings.po244
-rw-r--r--i18n/no/settings.qmbin0 -> 3216 bytes
-rw-r--r--i18n/no/snake.po67
-rw-r--r--i18n/no/snake.qmbin0 -> 1689 bytes
-rw-r--r--i18n/no/solitaire.po157
-rw-r--r--i18n/no/solitaire.qmbin0 -> 2159 bytes
-rw-r--r--i18n/no/spreadsheet.po48
-rw-r--r--i18n/no/spreadsheet.qmbin0 -> 712 bytes
-rw-r--r--i18n/no/sysinfo.po44
-rw-r--r--i18n/no/sysinfo.qmbin0 -> 708 bytes
-rw-r--r--i18n/no/tetrix.po36
-rw-r--r--i18n/no/tetrix.qmbin0 -> 392 bytes
-rw-r--r--i18n/no/textedit.po108
-rw-r--r--i18n/no/textedit.qmbin0 -> 912 bytes
-rw-r--r--i18n/no/todo.po148
-rw-r--r--i18n/no/todo.qmbin0 -> 2560 bytes
-rw-r--r--i18n/no/wordgame.po88
-rw-r--r--i18n/no/wordgame.qmbin0 -> 1315 bytes
-rw-r--r--i18n/qpe-i18n-de.control9
-rw-r--r--i18n/qpe-i18n-en.control9
-rw-r--r--i18n/qpe-i18n-hu.control10
-rw-r--r--i18n/qpe-i18n-ja.control10
-rw-r--r--i18n/qpe-i18n-ko.control10
-rw-r--r--i18n/qpe-i18n-no.control10
-rw-r--r--i18n/qpe-i18n-zh-CN.control10
-rw-r--r--i18n/qpe-i18n-zh-TW.control10
-rw-r--r--i18n/zh_CN/.directory5
-rw-r--r--i18n/zh_CN/textedit.po108
-rw-r--r--i18n/zh_CN/textedit.qmbin0 -> 755 bytes
-rw-r--r--i18n/zh_TW/.directory6
-rw-r--r--i18n/zh_TW/textedit.po107
-rw-r--r--i18n/zh_TW/textedit.qmbin0 -> 755 bytes
-rw-r--r--inputmethods/.cvsignore1
-rw-r--r--inputmethods/handwriting/.cvsignore5
-rw-r--r--inputmethods/handwriting/Makefile.in281
-rw-r--r--inputmethods/handwriting/handwriting.pro33
-rw-r--r--inputmethods/handwriting/handwritingimpl.cpp113
-rw-r--r--inputmethods/handwriting/handwritingimpl.h51
-rw-r--r--inputmethods/handwriting/qimpenchar.cpp505
-rw-r--r--inputmethods/handwriting/qimpenchar.h157
-rw-r--r--inputmethods/handwriting/qimpencombining.cpp141
-rw-r--r--inputmethods/handwriting/qimpencombining.h41
-rw-r--r--inputmethods/handwriting/qimpenhelp.cpp410
-rw-r--r--inputmethods/handwriting/qimpenhelp.h85
-rw-r--r--inputmethods/handwriting/qimpeninput.cpp515
-rw-r--r--inputmethods/handwriting/qimpeninput.h94
-rw-r--r--inputmethods/handwriting/qimpenmatch.cpp365
-rw-r--r--inputmethods/handwriting/qimpenmatch.h107
-rw-r--r--inputmethods/handwriting/qimpenprefbase.ui185
-rw-r--r--inputmethods/handwriting/qimpenprofile.cpp245
-rw-r--r--inputmethods/handwriting/qimpenprofile.h70
-rw-r--r--inputmethods/handwriting/qimpensetup.cpp656
-rw-r--r--inputmethods/handwriting/qimpensetup.h124
-rw-r--r--inputmethods/handwriting/qimpenstroke.cpp646
-rw-r--r--inputmethods/handwriting/qimpenstroke.h91
-rw-r--r--inputmethods/handwriting/qimpenwidget.cpp446
-rw-r--r--inputmethods/handwriting/qimpenwidget.h88
-rw-r--r--inputmethods/handwriting/qimpenwordpick.cpp113
-rw-r--r--inputmethods/handwriting/qimpenwordpick.h49
-rw-r--r--inputmethods/handwriting/qpe-handwriting.control9
-rwxr-xr-xinputmethods/handwriting/qpe-handwriting.postinst2
-rwxr-xr-xinputmethods/handwriting/qpe-handwriting.postrm2
-rw-r--r--inputmethods/keyboard/.cvsignore3
-rw-r--r--inputmethods/keyboard/Makefile.in151
-rw-r--r--inputmethods/keyboard/keyboard.cpp794
-rw-r--r--inputmethods/keyboard/keyboard.h103
-rw-r--r--inputmethods/keyboard/keyboard.pro18
-rw-r--r--inputmethods/keyboard/keyboardimpl.cpp131
-rw-r--r--inputmethods/keyboard/keyboardimpl.h51
-rw-r--r--inputmethods/keyboard/qpe-keyboard.control9
-rwxr-xr-xinputmethods/keyboard/qpe-keyboard.postinst2
-rwxr-xr-xinputmethods/keyboard/qpe-keyboard.postrm2
-rw-r--r--inputmethods/pickboard/.cvsignore3
-rw-r--r--inputmethods/pickboard/Makefile.in147
-rw-r--r--inputmethods/pickboard/pickboard.cpp89
-rw-r--r--inputmethods/pickboard/pickboard.h43
-rw-r--r--inputmethods/pickboard/pickboard.pro12
-rw-r--r--inputmethods/pickboard/pickboardcfg.cpp731
-rw-r--r--inputmethods/pickboard/pickboardcfg.h213
-rw-r--r--inputmethods/pickboard/pickboardimpl.cpp101
-rw-r--r--inputmethods/pickboard/pickboardimpl.h51
-rw-r--r--inputmethods/pickboard/pickboardpicks.cpp418
-rw-r--r--inputmethods/pickboard/pickboardpicks.h66
-rw-r--r--inputmethods/pickboard/qpe-pickboard.control9
-rwxr-xr-xinputmethods/pickboard/qpe-pickboard.postinst2
-rwxr-xr-xinputmethods/pickboard/qpe-pickboard.postrm2
-rw-r--r--inputmethods/unikeyboard/.cvsignore3
-rw-r--r--inputmethods/unikeyboard/Makefile.in115
-rw-r--r--inputmethods/unikeyboard/qpe-unikeyboard.control9
-rwxr-xr-xinputmethods/unikeyboard/qpe-unikeyboard.postinst2
-rwxr-xr-xinputmethods/unikeyboard/qpe-unikeyboard.postrm2
-rw-r--r--inputmethods/unikeyboard/unikeyboard.cpp278
-rw-r--r--inputmethods/unikeyboard/unikeyboard.h77
-rw-r--r--inputmethods/unikeyboard/unikeyboard.pro12
-rw-r--r--inputmethods/unikeyboard/unikeyboardimpl.cpp105
-rw-r--r--inputmethods/unikeyboard/unikeyboardimpl.h49
-rw-r--r--library/.cvsignore13
-rw-r--r--library/Makefile.add4
-rw-r--r--library/Makefile.in905
-rw-r--r--library/alarmserver.cpp376
-rw-r--r--library/alarmserver.h35
-rw-r--r--library/applnk.cpp1093
-rw-r--r--library/applnk.h169
-rw-r--r--library/backend/.cvsignore2
-rw-r--r--library/backend/categories.cpp701
-rw-r--r--library/backend/categories.h232
-rw-r--r--library/backend/contact.cpp909
-rw-r--r--library/backend/contact.h217
-rw-r--r--library/backend/event.cpp830
-rw-r--r--library/backend/event.h229
-rw-r--r--library/backend/palmtoprecord.cpp127
-rw-r--r--library/backend/palmtoprecord.h94
-rw-r--r--library/backend/palmtopuidgen.h83
-rw-r--r--library/backend/qfiledirect_p.h36
-rw-r--r--library/backend/qpcglobal.h50
-rw-r--r--library/backend/recordfields.h135
-rw-r--r--library/backend/stringutil.cpp415
-rw-r--r--library/backend/stringutil.h57
-rw-r--r--library/backend/task.cpp271
-rw-r--r--library/backend/task.h77
-rw-r--r--library/backend/timeconversion.cpp237
-rw-r--r--library/backend/timeconversion.h45
-rw-r--r--library/backend/vcc.y1199
-rw-r--r--library/backend/vobject.cpp1210
-rw-r--r--library/backend/vobject_p.h401
-rw-r--r--library/calendar.cpp66
-rw-r--r--library/calendar.h47
-rw-r--r--library/categoryedit_p.cpp227
-rw-r--r--library/categoryedit_p.h60
-rw-r--r--library/categoryeditbase_p.ui223
-rw-r--r--library/categorymenu.cpp110
-rw-r--r--library/categorymenu.h64
-rw-r--r--library/categoryselect.cpp315
-rw-r--r--library/categoryselect.h105
-rw-r--r--library/categorywidget.cpp71
-rw-r--r--library/categorywidget.h50
-rw-r--r--library/config.cpp557
-rw-r--r--library/config.h102
-rw-r--r--library/custom-sharp.h127
-rw-r--r--library/datebookdb.cpp1121
-rw-r--r--library/datebookdb.h85
-rw-r--r--library/datebookmonth.cpp713
-rw-r--r--library/datebookmonth.h210
-rw-r--r--library/filemanager.cpp274
-rw-r--r--library/filemanager.h56
-rw-r--r--library/fileselector.cpp340
-rw-r--r--library/fileselector.h108
-rw-r--r--library/finddialog.cpp73
-rw-r--r--library/finddialog.h57
-rw-r--r--library/findwidget_p.cpp119
-rw-r--r--library/findwidget_p.h65
-rw-r--r--library/findwidgetbase_p.ui261
-rw-r--r--library/fontdatabase.cpp235
-rw-r--r--library/fontdatabase.h62
-rw-r--r--library/fontfactoryinterface.h41
-rw-r--r--library/fontmanager.cpp101
-rw-r--r--library/fontmanager.h36
-rw-r--r--library/global.cpp644
-rw-r--r--library/global.h85
-rw-r--r--library/imageedit.cpp97
-rw-r--r--library/imageedit.h52
-rw-r--r--library/inlinepics_p.h5586
-rw-r--r--library/inputmethodinterface.h49
-rw-r--r--library/ir.cpp79
-rw-r--r--library/ir.h31
-rw-r--r--library/library.pro132
-rw-r--r--library/lightstyle.cpp1284
-rw-r--r--library/lightstyle.h120
-rw-r--r--library/lnkproperties.cpp289
-rw-r--r--library/lnkproperties.h60
-rw-r--r--library/lnkpropertiesbase_p.ui399
-rw-r--r--library/menubutton.cpp187
-rw-r--r--library/menubutton.h63
-rw-r--r--library/mimetype.cpp204
-rw-r--r--library/mimetype.h64
-rwxr-xr-xlibrary/mkinlinepics3
-rw-r--r--library/network.cpp436
-rw-r--r--library/network.h52
-rw-r--r--library/networkinterface.cpp104
-rw-r--r--library/networkinterface.h54
-rw-r--r--library/password.cpp323
-rw-r--r--library/password.h32
-rw-r--r--library/passwordbase_p.ui590
-rw-r--r--library/power.cpp226
-rw-r--r--library/power.h85
-rw-r--r--library/process.cpp79
-rw-r--r--library/process.h94
-rw-r--r--library/process_unix.cpp502
-rw-r--r--library/proxies.cpp118
-rw-r--r--library/proxies.h45
-rw-r--r--library/proxiesbase_p.ui360
-rw-r--r--library/qcleanuphandler_p.h51
-rw-r--r--library/qcom.h83
-rw-r--r--library/qcopenvelope_qws.cpp162
-rw-r--r--library/qcopenvelope_qws.h39
-rw-r--r--library/qdawg.cpp510
-rw-r--r--library/qdawg.h70
-rw-r--r--library/qlibrary.cpp437
-rw-r--r--library/qlibrary.h77
-rw-r--r--library/qlibrary_p.h113
-rw-r--r--library/qlibrary_unix.cpp132
-rw-r--r--library/qmath.c157
-rw-r--r--library/qmath.h42
-rw-r--r--library/qpe-base.control10
-rw-r--r--library/qpeapplication.cpp1597
-rw-r--r--library/qpeapplication.h124
-rw-r--r--library/qpedebug.cpp51
-rw-r--r--library/qpedebug.h29
-rw-r--r--library/qpedecoration_qws.cpp639
-rw-r--r--library/qpedecoration_qws.h101
-rw-r--r--library/qpedialog.cpp45
-rw-r--r--library/qpedialog.h44
-rw-r--r--library/qpemenubar.cpp308
-rw-r--r--library/qpemenubar.h71
-rw-r--r--library/qpemessagebox.cpp13
-rw-r--r--library/qpemessagebox.h11
-rw-r--r--library/qpestyle.cpp1194
-rw-r--r--library/qpestyle.h102
-rw-r--r--library/qpetoolbar.cpp52
-rw-r--r--library/qpetoolbar.h39
-rw-r--r--library/qprocess.cpp654
-rw-r--r--library/qprocess.h174
-rw-r--r--library/qprocess_unix.cpp1157
-rw-r--r--library/quickexec.cpp41
-rw-r--r--library/quickexec_p.h17
-rw-r--r--library/quuid.cpp146
-rw-r--r--library/quuid.h142
-rw-r--r--library/resource.cpp136
-rw-r--r--library/resource.h80
-rw-r--r--library/sound.cpp173
-rw-r--r--library/sound.h43
-rw-r--r--library/storage.cpp188
-rw-r--r--library/storage.h80
-rw-r--r--library/task-qpe.control10
-rw-r--r--library/taskbarappletinterface.h41
-rw-r--r--library/timestring.cpp360
-rw-r--r--library/timestring.h131
-rw-r--r--library/tzselect.cpp228
-rw-r--r--library/tzselect.h79
-rw-r--r--library/version.h3
-rw-r--r--library/xmlreader.cpp137
-rw-r--r--library/xmlreader.h83
-rwxr-xr-xmkipks220
-rw-r--r--noncore/apps/dictionary/dictionary.pro14
-rw-r--r--noncore/apps/dictionary/dicttool.cpp59
-rw-r--r--noncore/apps/dictionary/dicttool.h46
-rw-r--r--noncore/apps/dictionary/dicttoolbase.ui412
-rw-r--r--noncore/apps/dictionary/main.cpp31
-rw-r--r--noncore/apps/tableviewer/.cvsignore5
-rw-r--r--noncore/apps/tableviewer/Makefile.in330
-rw-r--r--noncore/apps/tableviewer/README29
-rw-r--r--noncore/apps/tableviewer/browsekeyentry.cpp242
-rw-r--r--noncore/apps/tableviewer/db.xmlt6279
-rw-r--r--noncore/apps/tableviewer/db/.cvsignore3
-rw-r--r--noncore/apps/tableviewer/db/common.cpp1470
-rw-r--r--noncore/apps/tableviewer/db/common.h285
-rw-r--r--noncore/apps/tableviewer/db/csvsource.cpp207
-rw-r--r--noncore/apps/tableviewer/db/csvsource.h53
-rw-r--r--noncore/apps/tableviewer/db/datacache.cpp293
-rw-r--r--noncore/apps/tableviewer/db/datacache.h130
-rw-r--r--noncore/apps/tableviewer/db/xmlsource.cpp295
-rw-r--r--noncore/apps/tableviewer/db/xmlsource.h119
-rw-r--r--noncore/apps/tableviewer/keyentry.cw55
-rw-r--r--noncore/apps/tableviewer/main.cpp32
-rw-r--r--noncore/apps/tableviewer/qpe-tableviewer.control10
-rw-r--r--noncore/apps/tableviewer/tableviewer.cpp455
-rw-r--r--noncore/apps/tableviewer/tableviewer.h109
-rw-r--r--noncore/apps/tableviewer/tableviewer.pro36
-rw-r--r--noncore/apps/tableviewer/ui/.cvsignore8
-rw-r--r--noncore/apps/tableviewer/ui/browsekeyentry.cpp206
-rw-r--r--noncore/apps/tableviewer/ui/browsekeyentry.h75
-rw-r--r--noncore/apps/tableviewer/ui/commonwidgets.cpp209
-rw-r--r--noncore/apps/tableviewer/ui/commonwidgets.h98
-rw-r--r--noncore/apps/tableviewer/ui/filterkeyentry.cpp208
-rw-r--r--noncore/apps/tableviewer/ui/filterkeyentry.h96
-rw-r--r--noncore/apps/tableviewer/ui/tvbrowseview.cpp122
-rw-r--r--noncore/apps/tableviewer/ui/tvbrowseview.h55
-rw-r--r--noncore/apps/tableviewer/ui/tveditview.cpp235
-rw-r--r--noncore/apps/tableviewer/ui/tveditview.h62
-rw-r--r--noncore/apps/tableviewer/ui/tvfilterview.cpp304
-rw-r--r--noncore/apps/tableviewer/ui/tvfilterview.h88
-rw-r--r--noncore/apps/tableviewer/ui/tvkeyedit.cpp254
-rw-r--r--noncore/apps/tableviewer/ui/tvkeyedit.h56
-rw-r--r--noncore/apps/tableviewer/ui/tvkeyedit_gen.ui239
-rw-r--r--noncore/apps/tableviewer/ui/tvlistview.cpp315
-rw-r--r--noncore/apps/tableviewer/ui/tvlistview.h92
-rw-r--r--noncore/comm/keypebble/.cvsignore5
-rw-r--r--noncore/comm/keypebble/LICENSE.GPL286
-rw-r--r--noncore/comm/keypebble/Makefile.in286
-rw-r--r--noncore/comm/keypebble/README.html206
-rw-r--r--noncore/comm/keypebble/d3des.c439
-rw-r--r--noncore/comm/keypebble/d3des.h50
-rw-r--r--noncore/comm/keypebble/keypebble.pro38
-rw-r--r--noncore/comm/keypebble/krfbbuffer.cpp163
-rw-r--r--noncore/comm/keypebble/krfbbuffer.h62
-rw-r--r--noncore/comm/keypebble/krfbcanvas.cpp169
-rw-r--r--noncore/comm/keypebble/krfbcanvas.h54
-rw-r--r--noncore/comm/keypebble/krfbconnection.cpp242
-rw-r--r--noncore/comm/keypebble/krfbconnection.h152
-rw-r--r--noncore/comm/keypebble/krfbdecoder.cpp839
-rw-r--r--noncore/comm/keypebble/krfbdecoder.h134
-rw-r--r--noncore/comm/keypebble/krfblogin.cpp255
-rw-r--r--noncore/comm/keypebble/krfblogin.h62
-rw-r--r--noncore/comm/keypebble/krfboptions.cpp52
-rw-r--r--noncore/comm/keypebble/krfboptions.h31
-rw-r--r--noncore/comm/keypebble/krfbserverinfo.h42
-rw-r--r--noncore/comm/keypebble/kvnc.cpp191
-rw-r--r--noncore/comm/keypebble/kvnc.h56
-rw-r--r--noncore/comm/keypebble/kvncconnectdlg.cpp79
-rw-r--r--noncore/comm/keypebble/kvncconnectdlg.h39
-rw-r--r--noncore/comm/keypebble/kvncoptionsdlg.cpp53
-rw-r--r--noncore/comm/keypebble/kvncoptionsdlg.h30
-rw-r--r--noncore/comm/keypebble/main.cpp18
-rw-r--r--noncore/comm/keypebble/qpe-keypebble.control10
-rw-r--r--noncore/comm/keypebble/vncauth.c160
-rw-r--r--noncore/comm/keypebble/vncauth.h30
-rw-r--r--noncore/comm/keypebble/vncoptionsbase.ui270
-rw-r--r--noncore/games/chess/Makefile.in134
-rw-r--r--noncore/games/chess/boardview.cw23
-rw-r--r--noncore/games/chess/chess.cpp358
-rw-r--r--noncore/games/chess/chess.db2
-rw-r--r--noncore/games/chess/chess.h128
-rw-r--r--noncore/games/chess/chess.pro14
-rw-r--r--noncore/games/chess/main.cpp51
-rw-r--r--noncore/games/chess/mainwindow.ui220
-rw-r--r--noncore/games/chess/pieces.pngbin0 -> 5696 bytes
-rw-r--r--noncore/games/chess/qpe-chess.control9
-rw-r--r--noncore/games/chess/simple-l.pngbin0 -> 16143 bytes
-rw-r--r--noncore/games/fifteen/.cvsignore2
-rw-r--r--noncore/games/fifteen/Makefile.in118
-rw-r--r--noncore/games/fifteen/fifteen.cpp364
-rw-r--r--noncore/games/fifteen/fifteen.h83
-rw-r--r--noncore/games/fifteen/fifteen.pro10
-rw-r--r--noncore/games/fifteen/main.cpp33
-rw-r--r--noncore/games/fifteen/qpe-fifteen.control11
-rw-r--r--noncore/games/go/.cvsignore2
-rw-r--r--noncore/games/go/Makefile.in158
-rw-r--r--noncore/games/go/README3
-rw-r--r--noncore/games/go/README.AMIGO42
-rw-r--r--noncore/games/go/README.XAMIGO26
-rw-r--r--noncore/games/go/amigo.c656
-rw-r--r--noncore/games/go/amigo.h146
-rw-r--r--noncore/games/go/go.h81
-rw-r--r--noncore/games/go/go.pro19
-rw-r--r--noncore/games/go/goplayer.c1499
-rw-r--r--noncore/games/go/goplayutils.c1317
-rw-r--r--noncore/games/go/goplayutils.h85
-rw-r--r--noncore/games/go/gowidget.cpp449
-rw-r--r--noncore/games/go/gowidget.h111
-rw-r--r--noncore/games/go/killable.c373
-rw-r--r--noncore/games/go/main.cpp35
-rw-r--r--noncore/games/go/qpe-go.control9
-rw-r--r--noncore/games/mindbreaker/.cvsignore4
-rw-r--r--noncore/games/mindbreaker/Makefile.in117
-rw-r--r--noncore/games/mindbreaker/main.cpp35
-rw-r--r--noncore/games/mindbreaker/mindbreaker.cpp818
-rw-r--r--noncore/games/mindbreaker/mindbreaker.h122
-rw-r--r--noncore/games/mindbreaker/mindbreaker.pro12
-rw-r--r--noncore/games/mindbreaker/qpe-mindbreaker.control9
-rw-r--r--noncore/games/minesweep/.cvsignore2
-rw-r--r--noncore/games/minesweep/Makefile.in134
-rw-r--r--noncore/games/minesweep/main.cpp34
-rw-r--r--noncore/games/minesweep/minefield.cpp623
-rw-r--r--noncore/games/minesweep/minefield.h87
-rw-r--r--noncore/games/minesweep/minesweep.cpp390
-rw-r--r--noncore/games/minesweep/minesweep.h67
-rw-r--r--noncore/games/minesweep/minesweep.pro14
-rw-r--r--noncore/games/minesweep/qpe-minesweep.control9
-rw-r--r--noncore/games/parashoot/.cvsignore3
-rw-r--r--noncore/games/parashoot/Makefile.in203
-rw-r--r--noncore/games/parashoot/base.cpp71
-rw-r--r--noncore/games/parashoot/base.h38
-rw-r--r--noncore/games/parashoot/bullet.cpp142
-rw-r--r--noncore/games/parashoot/bullet.h51
-rw-r--r--noncore/games/parashoot/cannon.cpp140
-rw-r--r--noncore/games/parashoot/cannon.h58
-rw-r--r--noncore/games/parashoot/codes.h25
-rw-r--r--noncore/games/parashoot/helicopter.cpp114
-rw-r--r--noncore/games/parashoot/helicopter.h45
-rw-r--r--noncore/games/parashoot/interface.cpp247
-rw-r--r--noncore/games/parashoot/interface.h79
-rw-r--r--noncore/games/parashoot/main.cpp36
-rw-r--r--noncore/games/parashoot/man.cpp174
-rw-r--r--noncore/games/parashoot/man.h52
-rw-r--r--noncore/games/parashoot/parashoot.pro11
-rw-r--r--noncore/games/parashoot/qpe-parashoot.control9
-rw-r--r--noncore/games/qasteroids/.cvsignore2
-rw-r--r--noncore/games/qasteroids/Makefile.in155
-rw-r--r--noncore/games/qasteroids/ledmeter.cpp135
-rw-r--r--noncore/games/qasteroids/ledmeter.h72
-rw-r--r--noncore/games/qasteroids/main.cpp36
-rw-r--r--noncore/games/qasteroids/qasteroids.pro11
-rw-r--r--noncore/games/qasteroids/qpe-qasteroids.control9
-rw-r--r--noncore/games/qasteroids/sprites.h147
-rw-r--r--noncore/games/qasteroids/toplevel.cpp514
-rw-r--r--noncore/games/qasteroids/toplevel.h99
-rw-r--r--noncore/games/qasteroids/view.cpp884
-rw-r--r--noncore/games/qasteroids/view.h156
-rw-r--r--noncore/games/snake/.cvsignore3
-rw-r--r--noncore/games/snake/Makefile.in159
-rw-r--r--noncore/games/snake/codes.h20
-rw-r--r--noncore/games/snake/interface.cpp224
-rw-r--r--noncore/games/snake/interface.h69
-rw-r--r--noncore/games/snake/main.cpp35
-rw-r--r--noncore/games/snake/obstacle.cpp51
-rw-r--r--noncore/games/snake/obstacle.h30
-rw-r--r--noncore/games/snake/qpe-snake.control9
-rw-r--r--noncore/games/snake/snake.cpp246
-rw-r--r--noncore/games/snake/snake.h64
-rw-r--r--noncore/games/snake/snake.pro11
-rw-r--r--noncore/games/snake/target.cpp77
-rw-r--r--noncore/games/snake/target.h37
-rw-r--r--noncore/games/solitaire/.cvsignore3
-rw-r--r--noncore/games/solitaire/Makefile.in235
-rw-r--r--noncore/games/solitaire/canvascard.cpp282
-rw-r--r--noncore/games/solitaire/canvascard.h82
-rw-r--r--noncore/games/solitaire/canvascardgame.cpp380
-rw-r--r--noncore/games/solitaire/canvascardgame.h95
-rw-r--r--noncore/games/solitaire/canvascardwindow.cpp227
-rw-r--r--noncore/games/solitaire/canvascardwindow.h70
-rw-r--r--noncore/games/solitaire/canvasshapes.cpp92
-rw-r--r--noncore/games/solitaire/canvasshapes.h55
-rw-r--r--noncore/games/solitaire/card.cpp53
-rw-r--r--noncore/games/solitaire/card.h84
-rw-r--r--noncore/games/solitaire/carddeck.cpp81
-rw-r--r--noncore/games/solitaire/carddeck.h49
-rw-r--r--noncore/games/solitaire/cardgame.cpp35
-rw-r--r--noncore/games/solitaire/cardgame.h45
-rw-r--r--noncore/games/solitaire/cardgamelayout.cpp61
-rw-r--r--noncore/games/solitaire/cardgamelayout.h42
-rw-r--r--noncore/games/solitaire/cardpile.cpp114
-rw-r--r--noncore/games/solitaire/cardpile.h101
-rw-r--r--noncore/games/solitaire/freecellcardgame.cpp137
-rw-r--r--noncore/games/solitaire/freecellcardgame.h152
-rw-r--r--noncore/games/solitaire/main.cpp36
-rw-r--r--noncore/games/solitaire/patiencecardgame.cpp234
-rw-r--r--noncore/games/solitaire/patiencecardgame.h206
-rw-r--r--noncore/games/solitaire/qpe-solitaire.control9
-rwxr-xr-xnoncore/games/solitaire/solitaire.pro18
-rw-r--r--noncore/games/tetrix/.cvsignore3
-rw-r--r--noncore/games/tetrix/Makefile.in157
-rw-r--r--noncore/games/tetrix/gtetrix.cpp514
-rw-r--r--noncore/games/tetrix/gtetrix.h104
-rw-r--r--noncore/games/tetrix/main.cpp33
-rw-r--r--noncore/games/tetrix/qpe-tetrix.control10
-rw-r--r--noncore/games/tetrix/qtetrix.cpp170
-rw-r--r--noncore/games/tetrix/qtetrix.h78
-rw-r--r--noncore/games/tetrix/qtetrixb.cpp251
-rw-r--r--noncore/games/tetrix/qtetrixb.h80
-rw-r--r--noncore/games/tetrix/tetrix.pro17
-rw-r--r--noncore/games/tetrix/tpiece.cpp201
-rw-r--r--noncore/games/tetrix/tpiece.h62
-rw-r--r--noncore/games/wordgame/.cvsignore6
-rw-r--r--noncore/games/wordgame/Makefile.in168
-rwxr-xr-xnoncore/games/wordgame/calcdist27
-rw-r--r--noncore/games/wordgame/main.cpp34
-rw-r--r--noncore/games/wordgame/newgamebase.ui337
-rw-r--r--noncore/games/wordgame/qpe-wordgame.control10
-rw-r--r--noncore/games/wordgame/rulesbase.ui274
-rw-r--r--noncore/games/wordgame/wordgame.cpp1476
-rw-r--r--noncore/games/wordgame/wordgame.h376
-rw-r--r--noncore/games/wordgame/wordgame.pro13
-rw-r--r--noncore/multimedia/showimg/.cvsignore2
-rw-r--r--noncore/multimedia/showimg/Makefile.in119
-rw-r--r--noncore/multimedia/showimg/README14
-rw-r--r--noncore/multimedia/showimg/main.cpp33
-rw-r--r--noncore/multimedia/showimg/qpe-showimg.control10
-rw-r--r--noncore/multimedia/showimg/showimg.cpp557
-rw-r--r--noncore/multimedia/showimg/showimg.h143
-rw-r--r--noncore/multimedia/showimg/showimg.pro19
-rw-r--r--noncore/settings/.cvsignore13
-rw-r--r--noncore/settings/language/.cvsignore4
-rw-r--r--noncore/settings/language/Makefile.in135
-rw-r--r--noncore/settings/language/language.cpp150
-rw-r--r--noncore/settings/language/language.pro12
-rw-r--r--noncore/settings/language/languagesettingsbase.ui51
-rw-r--r--noncore/settings/language/main.cpp36
-rw-r--r--noncore/settings/language/qpe-language.control9
-rw-r--r--noncore/settings/language/settings.h58
-rw-r--r--noncore/settings/sound/.cvsignore5
-rw-r--r--noncore/settings/sound/Makefile.in135
-rw-r--r--noncore/settings/sound/main.cpp36
-rw-r--r--noncore/settings/sound/qpe-sound.control10
-rw-r--r--noncore/settings/sound/sound.pro10
-rw-r--r--noncore/settings/sound/soundsettings.cpp64
-rw-r--r--noncore/settings/sound/soundsettings.h44
-rw-r--r--noncore/settings/sound/soundsettingsbase.ui281
-rw-r--r--noncore/settings/sysinfo/.cvsignore3
-rw-r--r--noncore/settings/sysinfo/Makefile.in193
-rw-r--r--noncore/settings/sysinfo/graph.cpp183
-rw-r--r--noncore/settings/sysinfo/graph.h89
-rw-r--r--noncore/settings/sysinfo/load.cpp207
-rw-r--r--noncore/settings/sysinfo/load.h60
-rw-r--r--noncore/settings/sysinfo/main.cpp34
-rw-r--r--noncore/settings/sysinfo/memory.cpp94
-rw-r--r--noncore/settings/sysinfo/memory.h48
-rw-r--r--noncore/settings/sysinfo/qpe-sysinfo.control9
-rw-r--r--noncore/settings/sysinfo/storage.cpp220
-rw-r--r--noncore/settings/sysinfo/storage.h87
-rw-r--r--noncore/settings/sysinfo/sysinfo.cpp53
-rw-r--r--noncore/settings/sysinfo/sysinfo.h29
-rw-r--r--noncore/settings/sysinfo/sysinfo.pro25
-rw-r--r--noncore/settings/sysinfo/versioninfo.cpp109
-rw-r--r--noncore/settings/sysinfo/versioninfo.h34
-rw-r--r--noncore/tools/calc2/Makefile138
-rw-r--r--noncore/tools/calc2/binary/Makefile146
-rw-r--r--noncore/tools/calc2/binary/README1
-rw-r--r--noncore/tools/calc2/binary/binary.pro16
-rw-r--r--noncore/tools/calc2/binary/binary.ui177
-rw-r--r--noncore/tools/calc2/binary/binaryfactory.cpp51
-rw-r--r--noncore/tools/calc2/binary/binaryfactory.h46
-rw-r--r--noncore/tools/calc2/binary/binaryimpl.cpp110
-rw-r--r--noncore/tools/calc2/binary/binaryimpl.h50
-rw-r--r--noncore/tools/calc2/calc.cpp104
-rw-r--r--noncore/tools/calc2/calc.h69
-rw-r--r--noncore/tools/calc2/calc.pro11
-rw-r--r--noncore/tools/calc2/engine.cpp214
-rw-r--r--noncore/tools/calc2/engine.h111
-rw-r--r--noncore/tools/calc2/instruction.h69
-rw-r--r--noncore/tools/calc2/main.cpp34
-rw-r--r--noncore/tools/calc2/plugininterface.h45
-rw-r--r--noncore/tools/calc2/simple/README1
-rw-r--r--noncore/tools/calc2/simple/simple.pro14
-rw-r--r--noncore/tools/calc2/simple/simple.ui704
-rw-r--r--noncore/tools/calc2/simple/simplefactory.cpp51
-rw-r--r--noncore/tools/calc2/simple/simplefactory.h46
-rw-r--r--noncore/tools/calc2/simple/simpleimpl.cpp120
-rw-r--r--noncore/tools/calc2/simple/simpleimpl.h65
-rw-r--r--noncore/tools/calc2/stdinstructions.h125
-rw-r--r--noncore/tools/calculator/.cvsignore4
-rw-r--r--noncore/tools/calculator/Makefile.in139
-rw-r--r--noncore/tools/calculator/calculator.pro13
-rw-r--r--noncore/tools/calculator/calculator.ui1026
-rw-r--r--noncore/tools/calculator/calculatorimpl.cpp601
-rw-r--r--noncore/tools/calculator/calculatorimpl.h135
-rw-r--r--noncore/tools/calculator/main.cpp35
-rw-r--r--noncore/tools/calculator/qpe-calculator.control10
-rw-r--r--noncore/tools/clock/.cvsignore2
-rw-r--r--noncore/tools/clock/Makefile.in118
-rw-r--r--noncore/tools/clock/clock.cpp319
-rw-r--r--noncore/tools/clock/clock.h87
-rw-r--r--noncore/tools/clock/clock.pro13
-rw-r--r--noncore/tools/clock/main.cpp34
-rw-r--r--noncore/tools/clock/qpe-clock.control9
-rw-r--r--noncore/unsupported/filebrowser/.cvsignore2
-rw-r--r--noncore/unsupported/filebrowser/Makefile.in136
-rw-r--r--noncore/unsupported/filebrowser/filebrowser.cpp850
-rw-r--r--noncore/unsupported/filebrowser/filebrowser.h141
-rw-r--r--noncore/unsupported/filebrowser/filebrowser.pro12
-rw-r--r--noncore/unsupported/filebrowser/inlineedit.cpp30
-rw-r--r--noncore/unsupported/filebrowser/inlineedit.h39
-rw-r--r--noncore/unsupported/filebrowser/main.cpp41
-rw-r--r--noncore/unsupported/filebrowser/qpe-filebrowser.control9
-rw-r--r--noncore/unsupported/oipkg/.cvsignore10
-rw-r--r--noncore/unsupported/oipkg/Makefile.in203
-rw-r--r--noncore/unsupported/oipkg/ipkg/available2256
-rw-r--r--noncore/unsupported/oipkg/ipkg/status418
-rw-r--r--noncore/unsupported/oipkg/main.cpp33
-rw-r--r--noncore/unsupported/oipkg/packagemanager.cpp897
-rw-r--r--noncore/unsupported/oipkg/packagemanager.h94
-rw-r--r--noncore/unsupported/oipkg/packagemanagerbase.ui268
-rw-r--r--noncore/unsupported/oipkg/pkdesc.ui96
-rw-r--r--noncore/unsupported/oipkg/pkfind.ui51
-rw-r--r--noncore/unsupported/oipkg/pksettings.ui176
-rw-r--r--noncore/unsupported/oipkg/qipkg.pro13
-rw-r--r--noncore/unsupported/oipkg/qpe-qipkg.control9
-rw-r--r--pics/Asteroids.pngbin0 -> 2314 bytes
-rw-r--r--pics/Fifteen.pngbin0 -> 981 bytes
-rw-r--r--pics/LanConnect.pngbin0 -> 2746 bytes
-rw-r--r--pics/Network/dialup.pngbin0 -> 226 bytes
-rw-r--r--pics/Network/lan.pngbin0 -> 236 bytes
-rw-r--r--pics/Network/proxies.pngbin0 -> 582 bytes
-rw-r--r--pics/Security.pngbin0 -> 2849 bytes
-rw-r--r--pics/SoundPlayer.pngbin0 -> 1728 bytes
-rw-r--r--pics/UnknownDocument-14.pngbin0 -> 442 bytes
-rw-r--r--pics/UnknownDocument.pngbin0 -> 1262 bytes
-rw-r--r--pics/capslock.xpm10
-rw-r--r--pics/cardmon/pcmcia.pngbin0 -> 385 bytes
-rw-r--r--pics/cards/card_back.pngbin0 -> 1740 bytes
-rw-r--r--pics/cards/card_back0001.pngbin0 -> 761 bytes
-rw-r--r--pics/cards/card_back0002.pngbin0 -> 2014 bytes
-rw-r--r--pics/cards/card_back0003.pngbin0 -> 1740 bytes
-rw-r--r--pics/cards/card_back0004.pngbin0 -> 2139 bytes
-rw-r--r--pics/cards/card_back0005.pngbin0 -> 1182 bytes
-rw-r--r--pics/cards/card_chars.pngbin0 -> 297 bytes
-rw-r--r--pics/cards/card_face.pngbin0 -> 221 bytes
-rw-r--r--pics/cards/card_suits.pngbin0 -> 204 bytes
-rw-r--r--pics/chess.pngbin0 -> 914 bytes
-rw-r--r--pics/chess/simple-20.pngbin0 -> 7966 bytes
-rw-r--r--pics/chess/simple-28.pngbin0 -> 14658 bytes
-rw-r--r--pics/chess/simple-30.pngbin0 -> 16323 bytes
-rw-r--r--pics/chess/simple-40.pngbin0 -> 22762 bytes
-rw-r--r--pics/down.pngbin0 -> 407 bytes
-rw-r--r--pics/grass.pngbin0 -> 8200 bytes
-rwxr-xr-xpics/info.pngbin0 -> 4536 bytes
-rw-r--r--pics/inline/1to1.pngbin0 -> 553 bytes
-rw-r--r--pics/inline/AddressBook.pngbin0 -> 2041 bytes
-rw-r--r--pics/inline/Appearance.pngbin0 -> 2542 bytes
-rw-r--r--pics/inline/AppsIcon.pngbin0 -> 327 bytes
-rw-r--r--pics/inline/Calculator.pngbin0 -> 1684 bytes
-rw-r--r--pics/inline/Calibrate.pngbin0 -> 3176 bytes
-rw-r--r--pics/inline/CityTime.pngbin0 -> 2219 bytes
-rw-r--r--pics/inline/Clock.pngbin0 -> 2016 bytes
-rw-r--r--pics/inline/CloseButton.pngbin0 -> 725 bytes
-rw-r--r--pics/inline/DateBook.pngbin0 -> 2566 bytes
-rw-r--r--pics/inline/DateTime.pngbin0 -> 2425 bytes
-rw-r--r--pics/inline/DocsIcon.pngbin0 -> 419 bytes
-rw-r--r--pics/inline/DocumentTypeExcel.pngbin0 -> 2233 bytes
-rw-r--r--pics/inline/DocumentTypeNone.pngbin0 -> 2061 bytes
-rw-r--r--pics/inline/DocumentTypePowerPoint.pngbin0 -> 2190 bytes
-rw-r--r--pics/inline/DocumentTypeWord.pngbin0 -> 2201 bytes
-rw-r--r--pics/inline/FileBrowser.pngbin0 -> 2724 bytes
-rw-r--r--pics/inline/Games.pngbin0 -> 755 bytes
-rw-r--r--pics/inline/Go-black-highlight.pngbin0 -> 649 bytes
-rw-r--r--pics/inline/Go-black.pngbin0 -> 526 bytes
-rw-r--r--pics/inline/Go-white.pngbin0 -> 600 bytes
-rw-r--r--pics/inline/Go.pngbin0 -> 2124 bytes
-rw-r--r--pics/inline/HelpBrowser.pngbin0 -> 2666 bytes
-rw-r--r--pics/inline/HelpButton.pngbin0 -> 742 bytes
-rw-r--r--pics/inline/ImageViewer.pngbin0 -> 1592 bytes
-rw-r--r--pics/inline/Ipkg.pngbin0 -> 3036 bytes
-rw-r--r--pics/inline/Language.pngbin0 -> 2428 bytes
-rw-r--r--pics/inline/Light.pngbin0 -> 2507 bytes
-rw-r--r--pics/inline/MPEGPlayer.pngbin0 -> 2209 bytes
-rw-r--r--pics/inline/Mindbreaker.pngbin0 -> 2047 bytes
-rw-r--r--pics/inline/MineHunt.pngbin0 -> 2215 bytes
-rw-r--r--pics/inline/NetHack.pngbin0 -> 1577 bytes
-rw-r--r--pics/inline/OKButton.pngbin0 -> 1146 bytes
-rw-r--r--pics/inline/Opera.pngbin0 -> 1846 bytes
-rw-r--r--pics/inline/PPPConnect.pngbin0 -> 3961 bytes
-rw-r--r--pics/inline/ParaShoot.pngbin0 -> 2260 bytes
-rw-r--r--pics/inline/README2
-rw-r--r--pics/inline/Rotation.pngbin0 -> 2826 bytes
-rw-r--r--pics/inline/SettingsIcon.pngbin0 -> 795 bytes
-rw-r--r--pics/inline/Shutdown.pngbin0 -> 2780 bytes
-rw-r--r--pics/inline/Snake.pngbin0 -> 2091 bytes
-rw-r--r--pics/inline/Solitaire.pngbin0 -> 2342 bytes
-rw-r--r--pics/inline/Sound.pngbin0 -> 2654 bytes
-rw-r--r--pics/inline/SoundPlayer.pngbin0 -> 2356 bytes
-rw-r--r--pics/inline/Spreadsheet.pngbin0 -> 1775 bytes
-rw-r--r--pics/inline/SystemInfo.pngbin0 -> 2665 bytes
-rw-r--r--pics/inline/Terminal.pngbin0 -> 1288 bytes
-rw-r--r--pics/inline/Tetrix.pngbin0 -> 1321 bytes
-rw-r--r--pics/inline/TextEditor.pngbin0 -> 2096 bytes
-rw-r--r--pics/inline/TodoList.pngbin0 -> 1417 bytes
-rw-r--r--pics/inline/Tux.pngbin0 -> 1932 bytes
-rw-r--r--pics/inline/UtilsIcon.pngbin0 -> 793 bytes
-rw-r--r--pics/inline/WordGame.pngbin0 -> 1553 bytes
-rw-r--r--pics/inline/accessories.pngbin0 -> 279 bytes
-rw-r--r--pics/inline/appearance.pngbin0 -> 332 bytes
-rw-r--r--pics/inline/back.pngbin0 -> 456 bytes
-rw-r--r--pics/inline/back_inactive.pngbin0 -> 466 bytes
-rw-r--r--pics/inline/background.pngbin0 -> 1074 bytes
-rw-r--r--pics/inline/beam.pngbin0 -> 209 bytes
-rw-r--r--pics/inline/bell.pngbin0 -> 505 bytes
-rw-r--r--pics/inline/bg.xpm124
-rw-r--r--pics/inline/binary.pngbin0 -> 513 bytes
-rwxr-xr-xpics/inline/bold.pngbin0 -> 171 bytes
-rw-r--r--pics/inline/c_src.xpm60
-rw-r--r--pics/inline/calculator.pngbin0 -> 589 bytes
-rwxr-xr-xpics/inline/center.pngbin0 -> 168 bytes
-rw-r--r--pics/inline/citytime_icon.xpm33
-rw-r--r--pics/inline/close.pngbin0 -> 794 bytes
-rw-r--r--pics/inline/copy.pngbin0 -> 781 bytes
-rw-r--r--pics/inline/copy_inactive.pngbin0 -> 736 bytes
-rw-r--r--pics/inline/cut.pngbin0 -> 828 bytes
-rw-r--r--pics/inline/cut_inactive.pngbin0 -> 830 bytes
-rw-r--r--pics/inline/datebook_icon.pngbin0 -> 191 bytes
-rw-r--r--pics/inline/day.pngbin0 -> 434 bytes
-rw-r--r--pics/inline/done.pngbin0 -> 808 bytes
-rw-r--r--pics/inline/edit.pngbin0 -> 521 bytes
-rw-r--r--pics/inline/editdelete.pngbin0 -> 769 bytes
-rw-r--r--pics/inline/enter.pngbin0 -> 808 bytes
-rw-r--r--pics/inline/exec.xpm30
-rw-r--r--pics/inline/faded_bg.xpm75
-rw-r--r--pics/inline/fastback.pngbin0 -> 461 bytes
-rw-r--r--pics/inline/fastforward.pngbin0 -> 452 bytes
-rw-r--r--pics/inline/fileopen.pngbin0 -> 584 bytes
-rw-r--r--pics/inline/find.pngbin0 -> 795 bytes
-rw-r--r--pics/inline/finish.pngbin0 -> 452 bytes
-rw-r--r--pics/inline/folder.pngbin0 -> 840 bytes
-rw-r--r--pics/inline/folder_open.xpm33
-rw-r--r--pics/inline/forward.pngbin0 -> 453 bytes
-rw-r--r--pics/inline/forward_inactive.pngbin0 -> 486 bytes
-rw-r--r--pics/inline/fullscreen.pngbin0 -> 603 bytes
-rw-r--r--pics/inline/go.pngbin0 -> 827 bytes
-rw-r--r--pics/inline/h_src.xpm60
-rw-r--r--pics/inline/help_icon.pngbin0 -> 620 bytes
-rw-r--r--pics/inline/home.pngbin0 -> 693 bytes
-rw-r--r--pics/inline/install.pngbin0 -> 267 bytes
-rw-r--r--pics/inline/installed.pngbin0 -> 263 bytes
-rwxr-xr-xpics/inline/italic.pngbin0 -> 155 bytes
-rw-r--r--pics/inline/konsole.xpm26
-rw-r--r--pics/inline/language.pngbin0 -> 319 bytes
-rw-r--r--pics/inline/launching.pngbin0 -> 2495 bytes
-rwxr-xr-xpics/inline/left.pngbin0 -> 169 bytes
-rw-r--r--pics/inline/library.pngbin0 -> 488 bytes
-rw-r--r--pics/inline/locked.xpm27
-rw-r--r--pics/inline/lockedfolder.xpm29
-rw-r--r--pics/inline/mag.pngbin0 -> 191 bytes
-rw-r--r--pics/inline/month.pngbin0 -> 435 bytes
-rw-r--r--pics/inline/mute.pngbin0 -> 469 bytes
-rw-r--r--pics/inline/new.pngbin0 -> 511 bytes
-rw-r--r--pics/inline/newfolder.pngbin0 -> 532 bytes
-rw-r--r--pics/inline/next.pngbin0 -> 523 bytes
-rw-r--r--pics/inline/oneoverx.xpm20
-rw-r--r--pics/inline/pass.xpm20
-rw-r--r--pics/inline/paste.pngbin0 -> 745 bytes
-rw-r--r--pics/inline/paste_inactive.pngbin0 -> 677 bytes
-rw-r--r--pics/inline/pixmap.xpm41
-rw-r--r--pics/inline/play.pngbin0 -> 555 bytes
-rw-r--r--pics/inline/play2.pngbin0 -> 538 bytes
-rw-r--r--pics/inline/programs.pngbin0 -> 326 bytes
-rw-r--r--pics/inline/quit_icon.pngbin0 -> 735 bytes
-rw-r--r--pics/inline/repeat.pngbin0 -> 141 bytes
-rw-r--r--pics/inline/reset.xpm20
-rwxr-xr-xpics/inline/right.pngbin0 -> 166 bytes
-rw-r--r--pics/inline/rotate.pngbin0 -> 740 bytes
-rw-r--r--pics/inline/start.pngbin0 -> 461 bytes
-rw-r--r--pics/inline/stop.pngbin0 -> 405 bytes
-rw-r--r--pics/inline/style.pngbin0 -> 180 bytes
-rw-r--r--pics/inline/table_pattern.pngbin0 -> 643 bytes
-rw-r--r--pics/inline/tgz.xpm26
-rw-r--r--pics/inline/toys.pngbin0 -> 393 bytes
-rw-r--r--pics/inline/trash.xpm29
-rw-r--r--pics/inline/txt.xpm60
-rwxr-xr-xpics/inline/underline.pngbin0 -> 156 bytes
-rw-r--r--pics/inline/uninstall.pngbin0 -> 286 bytes
-rw-r--r--pics/inline/uninstalled.pngbin0 -> 230 bytes
-rw-r--r--pics/inline/up.pngbin0 -> 433 bytes
-rw-r--r--pics/inline/volume.pngbin0 -> 390 bytes
-rw-r--r--pics/inline/wait.pngbin0 -> 621 bytes
-rw-r--r--pics/inline/week.pngbin0 -> 436 bytes
-rw-r--r--pics/inline/wordgame.pngbin0 -> 328 bytes
-rw-r--r--pics/inline/wordgame_shapes.xpm28
-rw-r--r--pics/inline/xtopowerofy.xpm17
-rw-r--r--pics/inline/ythrootofx.xpm20
-rw-r--r--pics/inline/zoom.xpm30
-rw-r--r--pics/konsole/down.pngbin0 -> 382 bytes
-rw-r--r--pics/konsole/enter.pngbin0 -> 402 bytes
-rw-r--r--pics/konsole/space.pngbin0 -> 380 bytes
-rw-r--r--pics/konsole/tab.pngbin0 -> 385 bytes
-rw-r--r--pics/konsole/up.pngbin0 -> 382 bytes
-rw-r--r--pics/mindbreaker/mindbreaker.pngbin0 -> 19686 bytes
-rw-r--r--pics/mindbreaker/pegs.pngbin0 -> 6458 bytes
-rw-r--r--pics/mpegplayer/add.pngbin0 -> 647 bytes
-rw-r--r--pics/mpegplayer/add_to_playlist.pngbin0 -> 596 bytes
-rw-r--r--pics/mpegplayer/animatedButton.pngbin0 -> 3272 bytes
-rw-r--r--pics/mpegplayer/background.pngbin0 -> 3667 bytes
-rw-r--r--pics/mpegplayer/cut.pngbin0 -> 773 bytes
-rw-r--r--pics/mpegplayer/delete.pngbin0 -> 756 bytes
-rw-r--r--pics/mpegplayer/down.pngbin0 -> 430 bytes
-rw-r--r--pics/mpegplayer/loop.pngbin0 -> 312 bytes
-rw-r--r--pics/mpegplayer/mediaButton0a.pngbin0 -> 2077 bytes
-rw-r--r--pics/mpegplayer/mediaButton0b.pngbin0 -> 2056 bytes
-rw-r--r--pics/mpegplayer/mediaButtonsAll.pngbin0 -> 13035 bytes
-rw-r--r--pics/mpegplayer/mediaButtonsBig.pngbin0 -> 7156 bytes
-rw-r--r--pics/mpegplayer/mediaControls.pngbin0 -> 7474 bytes
-rw-r--r--pics/mpegplayer/mediaControls0.pngbin0 -> 2925 bytes
-rw-r--r--pics/mpegplayer/metalFinish.pngbin0 -> 8192 bytes
-rw-r--r--pics/mpegplayer/musicfile.pngbin0 -> 587 bytes
-rw-r--r--pics/mpegplayer/play.pngbin0 -> 486 bytes
-rw-r--r--pics/mpegplayer/remove_from_playlist.pngbin0 -> 620 bytes
-rw-r--r--pics/mpegplayer/scale.pngbin0 -> 319 bytes
-rw-r--r--pics/mpegplayer/shuffle.pngbin0 -> 282 bytes
-rw-r--r--pics/mpegplayer/up.pngbin0 -> 427 bytes
-rw-r--r--pics/mpegplayer/videofile.pngbin0 -> 619 bytes
-rw-r--r--pics/netmon/down.xpm49
-rw-r--r--pics/netmon/up.xpm52
-rw-r--r--pics/numlock.xpm10
-rw-r--r--pics/parashoot/b0000.pngbin0 -> 1101 bytes
-rw-r--r--pics/parashoot/b0001.pngbin0 -> 2349 bytes
-rw-r--r--pics/parashoot/b0002.pngbin0 -> 4142 bytes
-rw-r--r--pics/parashoot/b0003.pngbin0 -> 5887 bytes
-rw-r--r--pics/parashoot/bullet.xpm11
-rw-r--r--pics/parashoot/can0000.xpm170
-rw-r--r--pics/parashoot/can0001.xpm228
-rw-r--r--pics/parashoot/can0002.xpm239
-rw-r--r--pics/parashoot/can0003.xpm259
-rw-r--r--pics/parashoot/can0004.xpm265
-rw-r--r--pics/parashoot/can0005.xpm271
-rw-r--r--pics/parashoot/can0006.xpm265
-rw-r--r--pics/parashoot/can0007.xpm266
-rw-r--r--pics/parashoot/can0008.xpm262
-rw-r--r--pics/parashoot/can0009.xpm266
-rw-r--r--pics/parashoot/can0010.xpm265
-rw-r--r--pics/parashoot/can0011.xpm271
-rw-r--r--pics/parashoot/can0012.xpm265
-rw-r--r--pics/parashoot/can0013.xpm259
-rw-r--r--pics/parashoot/can0014.xpm239
-rw-r--r--pics/parashoot/can0015.xpm228
-rw-r--r--pics/parashoot/can0016.xpm170
-rw-r--r--pics/parashoot/helicopter.xpm26
-rw-r--r--pics/parashoot/helicopter0000.xpm26
-rw-r--r--pics/parashoot/helicopter0001.xpm26
-rw-r--r--pics/parashoot/helicopter0002.xpm26
-rw-r--r--pics/parashoot/man0000.xpm46
-rw-r--r--pics/parashoot/man0001.xpm45
-rw-r--r--pics/parashoot/man0002.xpm42
-rw-r--r--pics/parashoot/man0003.xpm41
-rw-r--r--pics/parashoot/man0004.xpm41
-rw-r--r--pics/parashoot/man0005.xpm67
-rw-r--r--pics/parashoot/man0006.xpm53
-rw-r--r--pics/parashoot/manicon.xpm23
-rw-r--r--pics/parashoot/sky.pngbin0 -> 35713 bytes
-rw-r--r--pics/pine.pngbin0 -> 2760 bytes
-rw-r--r--pics/qasteroids/bg.pngbin0 -> 7843 bytes
-rw-r--r--pics/qasteroids/bits/bits0000.pngbin0 -> 257 bytes
-rw-r--r--pics/qasteroids/bits/bits0001.pngbin0 -> 275 bytes
-rw-r--r--pics/qasteroids/bits/bits0002.pngbin0 -> 312 bytes
-rw-r--r--pics/qasteroids/bits/bits0003.pngbin0 -> 342 bytes
-rw-r--r--pics/qasteroids/bits/bits0004.pngbin0 -> 315 bytes
-rw-r--r--pics/qasteroids/bits/bits0005.pngbin0 -> 291 bytes
-rw-r--r--pics/qasteroids/bits/bits0006.pngbin0 -> 240 bytes
-rw-r--r--pics/qasteroids/bits/bits0007.pngbin0 -> 198 bytes
-rw-r--r--pics/qasteroids/bits/bits0008.pngbin0 -> 187 bytes
-rw-r--r--pics/qasteroids/bits/bits0009.pngbin0 -> 268 bytes
-rw-r--r--pics/qasteroids/bits/bits0010.pngbin0 -> 303 bytes
-rw-r--r--pics/qasteroids/bits/bits0011.pngbin0 -> 333 bytes
-rw-r--r--pics/qasteroids/bits/bits0012.pngbin0 -> 329 bytes
-rw-r--r--pics/qasteroids/bits/bits0013.pngbin0 -> 285 bytes
-rw-r--r--pics/qasteroids/bits/bits0014.pngbin0 -> 251 bytes
-rw-r--r--pics/qasteroids/bits/bits0015.pngbin0 -> 222 bytes
-rw-r--r--pics/qasteroids/exhaust/exhaust.pngbin0 -> 142 bytes
-rw-r--r--pics/qasteroids/missile/missile.pngbin0 -> 128 bytes
-rw-r--r--pics/qasteroids/powerups/brake.pngbin0 -> 249 bytes
-rw-r--r--pics/qasteroids/powerups/energy.pngbin0 -> 188 bytes
-rw-r--r--pics/qasteroids/powerups/shield.pngbin0 -> 222 bytes
-rw-r--r--pics/qasteroids/powerups/shoot.pngbin0 -> 345 bytes
-rw-r--r--pics/qasteroids/powerups/teleport.pngbin0 -> 214 bytes
-rw-r--r--pics/qasteroids/rock2/rock20000.pngbin0 -> 1553 bytes
-rw-r--r--pics/qasteroids/rock2/rock20001.pngbin0 -> 1599 bytes
-rw-r--r--pics/qasteroids/rock2/rock20002.pngbin0 -> 1599 bytes
-rw-r--r--pics/qasteroids/rock2/rock20003.pngbin0 -> 1656 bytes
-rw-r--r--pics/qasteroids/rock2/rock20004.pngbin0 -> 1636 bytes
-rw-r--r--pics/qasteroids/rock2/rock20005.pngbin0 -> 1665 bytes
-rw-r--r--pics/qasteroids/rock2/rock20006.pngbin0 -> 1632 bytes
-rw-r--r--pics/qasteroids/rock2/rock20007.pngbin0 -> 1626 bytes
-rw-r--r--pics/qasteroids/rock2/rock20008.pngbin0 -> 1570 bytes
-rw-r--r--pics/qasteroids/rock2/rock20009.pngbin0 -> 1561 bytes
-rw-r--r--pics/qasteroids/rock2/rock20010.pngbin0 -> 1541 bytes
-rw-r--r--pics/qasteroids/rock2/rock20011.pngbin0 -> 1550 bytes
-rw-r--r--pics/qasteroids/rock2/rock20012.pngbin0 -> 1576 bytes
-rw-r--r--pics/qasteroids/rock2/rock20013.pngbin0 -> 1585 bytes
-rw-r--r--pics/qasteroids/rock2/rock20014.pngbin0 -> 1611 bytes
-rw-r--r--pics/qasteroids/rock2/rock20015.pngbin0 -> 1625 bytes
-rw-r--r--pics/qasteroids/rock2/rock20016.pngbin0 -> 1615 bytes
-rw-r--r--pics/qasteroids/rock2/rock20017.pngbin0 -> 1627 bytes
-rw-r--r--pics/qasteroids/rock2/rock20018.pngbin0 -> 1589 bytes
-rw-r--r--pics/qasteroids/rock2/rock20019.pngbin0 -> 1587 bytes
-rw-r--r--pics/qasteroids/rock2/rock20020.pngbin0 -> 1606 bytes
-rw-r--r--pics/qasteroids/rock2/rock20021.pngbin0 -> 1675 bytes
-rw-r--r--pics/qasteroids/rock2/rock20022.pngbin0 -> 1670 bytes
-rw-r--r--pics/qasteroids/rock2/rock20023.pngbin0 -> 1663 bytes
-rw-r--r--pics/qasteroids/rock2/rock20024.pngbin0 -> 1690 bytes
-rw-r--r--pics/qasteroids/rock2/rock20025.pngbin0 -> 1685 bytes
-rw-r--r--pics/qasteroids/rock2/rock20026.pngbin0 -> 1606 bytes
-rw-r--r--pics/qasteroids/rock2/rock20027.pngbin0 -> 1583 bytes
-rw-r--r--pics/qasteroids/rock2/rock20028.pngbin0 -> 1600 bytes
-rw-r--r--pics/qasteroids/rock2/rock20029.pngbin0 -> 1608 bytes
-rw-r--r--pics/qasteroids/rock2/rock20030.pngbin0 -> 1568 bytes
-rw-r--r--pics/qasteroids/rock2/rock20031.pngbin0 -> 1553 bytes
-rw-r--r--pics/qasteroids/rock3/rock30000.pngbin0 -> 825 bytes
-rw-r--r--pics/qasteroids/rock3/rock30001.pngbin0 -> 828 bytes
-rw-r--r--pics/qasteroids/rock3/rock30002.pngbin0 -> 853 bytes
-rw-r--r--pics/qasteroids/rock3/rock30003.pngbin0 -> 870 bytes
-rw-r--r--pics/qasteroids/rock3/rock30004.pngbin0 -> 864 bytes
-rw-r--r--pics/qasteroids/rock3/rock30005.pngbin0 -> 846 bytes
-rw-r--r--pics/qasteroids/rock3/rock30006.pngbin0 -> 821 bytes
-rw-r--r--pics/qasteroids/rock3/rock30007.pngbin0 -> 829 bytes
-rw-r--r--pics/qasteroids/rock3/rock30008.pngbin0 -> 839 bytes
-rw-r--r--pics/qasteroids/rock3/rock30009.pngbin0 -> 830 bytes
-rw-r--r--pics/qasteroids/rock3/rock30010.pngbin0 -> 804 bytes
-rw-r--r--pics/qasteroids/rock3/rock30011.pngbin0 -> 828 bytes
-rw-r--r--pics/qasteroids/rock3/rock30012.pngbin0 -> 810 bytes
-rw-r--r--pics/qasteroids/rock3/rock30013.pngbin0 -> 832 bytes
-rw-r--r--pics/qasteroids/rock3/rock30014.pngbin0 -> 825 bytes
-rw-r--r--pics/qasteroids/rock3/rock30015.pngbin0 -> 839 bytes
-rw-r--r--pics/qasteroids/rock3/rock30016.pngbin0 -> 799 bytes
-rw-r--r--pics/qasteroids/rock3/rock30017.pngbin0 -> 817 bytes
-rw-r--r--pics/qasteroids/rock3/rock30018.pngbin0 -> 830 bytes
-rw-r--r--pics/qasteroids/rock3/rock30019.pngbin0 -> 837 bytes
-rw-r--r--pics/qasteroids/rock3/rock30020.pngbin0 -> 851 bytes
-rw-r--r--pics/qasteroids/rock3/rock30021.pngbin0 -> 835 bytes
-rw-r--r--pics/qasteroids/rock3/rock30022.pngbin0 -> 853 bytes
-rw-r--r--pics/qasteroids/rock3/rock30023.pngbin0 -> 829 bytes
-rw-r--r--pics/qasteroids/rock3/rock30024.pngbin0 -> 840 bytes
-rw-r--r--pics/qasteroids/rock3/rock30025.pngbin0 -> 827 bytes
-rw-r--r--pics/qasteroids/rock3/rock30026.pngbin0 -> 823 bytes
-rw-r--r--pics/qasteroids/rock3/rock30027.pngbin0 -> 827 bytes
-rw-r--r--pics/qasteroids/rock3/rock30028.pngbin0 -> 819 bytes
-rw-r--r--pics/qasteroids/rock3/rock30029.pngbin0 -> 816 bytes
-rw-r--r--pics/qasteroids/rock3/rock30030.pngbin0 -> 809 bytes
-rw-r--r--pics/qasteroids/rock3/rock30031.pngbin0 -> 819 bytes
-rw-r--r--pics/qasteroids/shield/shield0000.pngbin0 -> 1407 bytes
-rw-r--r--pics/qasteroids/shield/shield0001.pngbin0 -> 1349 bytes
-rw-r--r--pics/qasteroids/shield/shield0002.pngbin0 -> 1451 bytes
-rw-r--r--pics/qasteroids/shield/shield0003.pngbin0 -> 1511 bytes
-rw-r--r--pics/qasteroids/shield/shield0004.pngbin0 -> 1371 bytes
-rw-r--r--pics/qasteroids/shield/shield0005.pngbin0 -> 1518 bytes
-rw-r--r--pics/qasteroids/shield/shield0006.pngbin0 -> 1544 bytes
-rw-r--r--pics/qasteroids/ship/ship0000.pngbin0 -> 840 bytes
-rw-r--r--pics/qasteroids/ship/ship0001.pngbin0 -> 880 bytes
-rw-r--r--pics/qasteroids/ship/ship0002.pngbin0 -> 886 bytes
-rw-r--r--pics/qasteroids/ship/ship0003.pngbin0 -> 883 bytes
-rw-r--r--pics/qasteroids/ship/ship0004.pngbin0 -> 922 bytes
-rw-r--r--pics/qasteroids/ship/ship0005.pngbin0 -> 964 bytes
-rw-r--r--pics/qasteroids/ship/ship0006.pngbin0 -> 927 bytes
-rw-r--r--pics/qasteroids/ship/ship0007.pngbin0 -> 921 bytes
-rw-r--r--pics/qasteroids/ship/ship0008.pngbin0 -> 889 bytes
-rw-r--r--pics/qasteroids/ship/ship0009.pngbin0 -> 913 bytes
-rw-r--r--pics/qasteroids/ship/ship0010.pngbin0 -> 936 bytes
-rw-r--r--pics/qasteroids/ship/ship0011.pngbin0 -> 924 bytes
-rw-r--r--pics/qasteroids/ship/ship0012.pngbin0 -> 891 bytes
-rw-r--r--pics/qasteroids/ship/ship0013.pngbin0 -> 890 bytes
-rw-r--r--pics/qasteroids/ship/ship0014.pngbin0 -> 905 bytes
-rw-r--r--pics/qasteroids/ship/ship0015.pngbin0 -> 857 bytes
-rw-r--r--pics/qasteroids/ship/ship0016.pngbin0 -> 839 bytes
-rw-r--r--pics/qasteroids/ship/ship0017.pngbin0 -> 881 bytes
-rw-r--r--pics/qasteroids/ship/ship0018.pngbin0 -> 907 bytes
-rw-r--r--pics/qasteroids/ship/ship0019.pngbin0 -> 941 bytes
-rw-r--r--pics/qasteroids/ship/ship0020.pngbin0 -> 934 bytes
-rw-r--r--pics/qasteroids/ship/ship0021.pngbin0 -> 891 bytes
-rw-r--r--pics/qasteroids/ship/ship0022.pngbin0 -> 902 bytes
-rw-r--r--pics/qasteroids/ship/ship0023.pngbin0 -> 879 bytes
-rw-r--r--pics/qasteroids/ship/ship0024.pngbin0 -> 854 bytes
-rw-r--r--pics/qasteroids/ship/ship0025.pngbin0 -> 888 bytes
-rw-r--r--pics/qasteroids/ship/ship0026.pngbin0 -> 848 bytes
-rw-r--r--pics/qasteroids/ship/ship0027.pngbin0 -> 909 bytes
-rw-r--r--pics/qasteroids/ship/ship0028.pngbin0 -> 904 bytes
-rw-r--r--pics/qasteroids/ship/ship0029.pngbin0 -> 939 bytes
-rw-r--r--pics/qasteroids/ship/ship0030.pngbin0 -> 909 bytes
-rw-r--r--pics/qasteroids/ship/ship0031.pngbin0 -> 922 bytes
-rw-r--r--pics/qpe-logo.pngbin0 -> 24567 bytes
-rw-r--r--pics/qpe-pics.control8
-rwxr-xr-xpics/qtlogo.pngbin0 -> 3399 bytes
-rw-r--r--pics/rotate90.pngbin0 -> 212 bytes
-rw-r--r--pics/sidebar.pngbin0 -> 2907 bytes
-rw-r--r--pics/simple_grid_400.pngbin0 -> 4533 bytes
-rw-r--r--pics/snake/mouse.xpm23
-rw-r--r--pics/snake/s0000.xpm20
-rw-r--r--pics/snake/s0001.xpm28
-rw-r--r--pics/snake/s0002.xpm28
-rw-r--r--pics/snake/s0003.xpm29
-rw-r--r--pics/snake/s0004.xpm28
-rw-r--r--pics/snake/s0005.xpm29
-rw-r--r--pics/snake/s0006.xpm29
-rw-r--r--pics/snake/s0007.xpm29
-rw-r--r--pics/snake/s0008.xpm29
-rw-r--r--pics/snake/s0009.xpm29
-rw-r--r--pics/snake/s0010.xpm29
-rw-r--r--pics/snake/s0011.xpm28
-rw-r--r--pics/snake/s0012.xpm28
-rw-r--r--pics/snake/s0013.xpm28
-rw-r--r--pics/snake/s0014.xpm28
-rw-r--r--pics/snake/wall.pngbin0 -> 1197 bytes
-rw-r--r--pics/sound-off.xpm22
-rw-r--r--pics/sound-on.xpm22
-rw-r--r--pics/start_button.xpm29
-rw-r--r--pics/title.pngbin0 -> 549 bytes
-rw-r--r--pics/tux-logo.pngbin0 -> 2272 bytes
-rw-r--r--pics/tux.pngbin0 -> 10741 bytes
-rw-r--r--pics/vnc.pngbin0 -> 921 bytes
-rw-r--r--plugins/applets/.cvsignore1
-rw-r--r--plugins/applets/README1
-rw-r--r--plugins/codecs/.cvsignore2
-rw-r--r--plugins/codecs/README1
-rw-r--r--plugins/fontfactories/README1
-rw-r--r--plugins/inputmethods/.cvsignore1
-rw-r--r--plugins/inputmethods/README1
-rw-r--r--plugins/network/.cvsignore2
-rw-r--r--plugins/network/README1
-rw-r--r--qt/control/qpf-cyberbit-120-50-t10.control9
-rw-r--r--qt/qconfig-qpe-single.h41
-rw-r--r--qt/qconfig-qpe.h99
-rw-r--r--qt/qt-embedded-rotation.control10
-rw-r--r--qt/qt-embedded.control9
-rw-r--r--qt/qte231-for-qpe131.patch.gzbin0 -> 2884 bytes
-rw-r--r--qt/qte231-for-qpe140.patch.gzbin0 -> 66728 bytes
-rw-r--r--qt/tmake/propagate.t368
-rw-r--r--quickexec/Makefile.in101
-rw-r--r--quickexec/johns/README21
-rw-r--r--quickexec/johns/library.lst2
-rw-r--r--quickexec/johns/qinit_srv.c242
-rw-r--r--quickexec/johns/so_stub.c23
-rw-r--r--quickexec/qpe-quickexec.control11
-rw-r--r--quickexec/quickexec.cpp98
-rw-r--r--quickexec/quickexec.pro6
-rw-r--r--root/HOWTO-NewPPP149
-rw-r--r--root/README3
-rw-r--r--root/etc/hosts3
-rw-r--r--root/etc/inittab34
-rw-r--r--root/etc/ppp/options11
-rw-r--r--root/etc/ppp/scripts/winclient.chat3
-rwxr-xr-xroot/makeptydevs8
-rw-r--r--root/ptydevs.control9
-rw-r--r--root/qpe-ppp.control8
-rw-r--r--root/timezones.control9
-rw-r--r--root/usr/share/zoneinfo/Africa/Abidjanbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Accrabin0 -> 156 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Addis_Abababin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Algiersbin0 -> 287 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Asmerabin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Bamakobin0 -> 95 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Banguibin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Banjulbin0 -> 107 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Bissaubin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Blantyrebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Brazzavillebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Bujumburabin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Cairobin0 -> 955 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Casablancabin0 -> 188 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Ceutabin0 -> 748 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Conakrybin0 -> 95 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Dakarbin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Dar_es_Salaambin0 -> 97 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Djiboutibin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Doualabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/El_Aaiunbin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Freetownbin0 -> 259 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Gaboronebin0 -> 79 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Hararebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Johannesburgbin0 -> 98 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Kampalabin0 -> 115 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Khartoumbin0 -> 263 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Kigalibin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Kinshasabin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Lagosbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Librevillebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Lomebin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Luandabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Lubumbashibin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Lusakabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Malabobin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Maputobin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Maserubin0 -> 92 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Mbabanebin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Mogadishubin0 -> 79 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Monroviabin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Nairobibin0 -> 115 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Ndjamenabin0 -> 96 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Niameybin0 -> 103 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Nouakchottbin0 -> 95 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Ouagadougoubin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Porto-Novobin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Sao_Tomebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Timbuktubin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Tripolibin0 -> 238 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Tunisbin0 -> 222 bytes
-rw-r--r--root/usr/share/zoneinfo/Africa/Windhoekbin0 -> 571 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Adakbin0 -> 823 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Anchoragebin0 -> 826 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Anguillabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Antiguabin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Araguainabin0 -> 671 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Arubabin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Asuncionbin0 -> 729 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Barbadosbin0 -> 142 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Belembin0 -> 226 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Belizebin0 -> 368 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Boa_Vistabin0 -> 611 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Bogotabin0 -> 96 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Boisebin0 -> 849 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Buenos_Airesbin0 -> 427 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Cambridge_Baybin0 -> 725 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Cancunbin0 -> 534 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Caracasbin0 -> 86 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Catamarcabin0 -> 407 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Cayennebin0 -> 86 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Caymanbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Chicagobin0 -> 1262 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Chihuahuabin0 -> 554 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Cordobabin0 -> 397 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Costa_Ricabin0 -> 126 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Cuiababin0 -> 721 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Curacaobin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Dawsonbin0 -> 730 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Dawson_Creekbin0 -> 360 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Denverbin0 -> 860 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Detroitbin0 -> 794 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Dominicabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Edmontonbin0 -> 845 bytes
-rw-r--r--root/usr/share/zoneinfo/America/El_Salvadorbin0 -> 105 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Fortalezabin0 -> 631 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Glace_Baybin0 -> 775 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Godthabbin0 -> 682 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Goose_Baybin0 -> 1171 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Grand_Turkbin0 -> 675 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Grenadabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Guadeloupebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Guatemalabin0 -> 115 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Guayaquilbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Guyanabin0 -> 117 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Halifaxbin0 -> 1225 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Havanabin0 -> 891 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Hermosillobin0 -> 179 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Indiana/Knoxbin0 -> 532 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Indiana/Marengobin0 -> 289 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Indiana/Vevaybin0 -> 167 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Indianapolisbin0 -> 269 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Inuvikbin0 -> 730 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Iqaluitbin0 -> 725 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Jamaicabin0 -> 185 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Jujuybin0 -> 449 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Juneaubin0 -> 806 bytes
-rw-r--r--root/usr/share/zoneinfo/America/La_Pazbin0 -> 92 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Limabin0 -> 146 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Los_Angelesbin0 -> 1000 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Louisvillebin0 -> 984 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Maceiobin0 -> 641 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Managuabin0 -> 147 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Manausbin0 -> 236 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Martiniquebin0 -> 96 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Mazatlanbin0 -> 569 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Mendozabin0 -> 449 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Menomineebin0 -> 797 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Mexico_Citybin0 -> 582 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Miquelonbin0 -> 679 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Montevideobin0 -> 434 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Montrealbin0 -> 1218 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Montserratbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Nassaubin0 -> 825 bytes
-rw-r--r--root/usr/share/zoneinfo/America/New_Yorkbin0 -> 1250 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Nipigonbin0 -> 728 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Nomebin0 -> 823 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Noronhabin0 -> 246 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Panamabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Pangnirtungbin0 -> 749 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Paramaribobin0 -> 134 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Phoenixbin0 -> 130 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Port-au-Princebin0 -> 252 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Port_of_Spainbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Porto_Acrebin0 -> 226 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Porto_Velhobin0 -> 226 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Puerto_Ricobin0 -> 78 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Rainy_Riverbin0 -> 728 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Rankin_Inletbin0 -> 701 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Reginabin0 -> 362 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Rosariobin0 -> 407 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Santiagobin0 -> 852 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Santo_Domingobin0 -> 176 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Sao_Paulobin0 -> 721 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Scoresbysundbin0 -> 707 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Shiprockbin0 -> 860 bytes
-rw-r--r--root/usr/share/zoneinfo/America/St_Johnsbin0 -> 1312 bytes
-rw-r--r--root/usr/share/zoneinfo/America/St_Kittsbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/St_Luciabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/St_Thomasbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/St_Vincentbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Swift_Currentbin0 -> 202 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Tegucigalpabin0 -> 105 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Thulebin0 -> 535 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Thunder_Baybin0 -> 758 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Tijuanabin0 -> 817 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Tortolabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Vancouverbin0 -> 1008 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Whitehorsebin0 -> 730 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Winnipegbin0 -> 988 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Yakutatbin0 -> 806 bytes
-rw-r--r--root/usr/share/zoneinfo/America/Yellowknifebin0 -> 701 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/Caseybin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/Davisbin0 -> 84 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/DumontDUrvillebin0 -> 96 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/Mawsonbin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/McMurdobin0 -> 730 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/Palmerbin0 -> 777 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/South_Polebin0 -> 730 bytes
-rw-r--r--root/usr/share/zoneinfo/Antarctica/Syowabin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Arctic/Longyearbyenbin0 -> 806 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Adenbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Almatybin0 -> 708 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Ammanbin0 -> 692 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Anadyrbin0 -> 716 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Aqtaubin0 -> 759 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Aqtobebin0 -> 747 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Ashkhabadbin0 -> 273 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Baghdadbin0 -> 669 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Bahrainbin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Bakubin0 -> 758 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Bangkokbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Beirutbin0 -> 769 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Bishkekbin0 -> 720 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Bruneibin0 -> 86 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Calcuttabin0 -> 109 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Chungkingbin0 -> 163 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Colombobin0 -> 139 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Daccabin0 -> 131 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Damascusbin0 -> 836 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Dilibin0 -> 108 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Dubaibin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Dushanbebin0 -> 247 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Gazabin0 -> 829 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Harbinbin0 -> 186 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Hong_Kongbin0 -> 426 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Hovdbin0 -> 281 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Irkutskbin0 -> 708 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Jakartabin0 -> 140 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Jayapurabin0 -> 96 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Jerusalembin0 -> 803 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Kabulbin0 -> 69 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Kamchatkabin0 -> 708 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Karachibin0 -> 126 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Kashgarbin0 -> 176 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Katmandubin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Krasnoyarskbin0 -> 708 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Kuala_Lumpurbin0 -> 139 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Kuchingbin0 -> 211 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Kuwaitbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Macaobin0 -> 303 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Magadanbin0 -> 708 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Manilabin0 -> 121 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Muscatbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Nicosiabin0 -> 732 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Novosibirskbin0 -> 721 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Omskbin0 -> 708 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Phnom_Penhbin0 -> 108 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Pyongyangbin0 -> 97 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Qatarbin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Rangoonbin0 -> 108 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Riyadhbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Saigonbin0 -> 108 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Samarkandbin0 -> 323 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Seoulbin0 -> 152 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Shanghaibin0 -> 165 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Singaporebin0 -> 152 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Taipeibin0 -> 268 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Tashkentbin0 -> 296 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Tbilisibin0 -> 750 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Tehranbin0 -> 645 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Thimbubin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Tokyobin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Ujung_Pandangbin0 -> 113 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Ulaanbaatarbin0 -> 281 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Urumqibin0 -> 163 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Vientianebin0 -> 108 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Vladivostokbin0 -> 715 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Yakutskbin0 -> 708 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Yekaterinburgbin0 -> 751 bytes
-rw-r--r--root/usr/share/zoneinfo/Asia/Yerevanbin0 -> 760 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Azoresbin0 -> 1265 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Bermudabin0 -> 725 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Canarybin0 -> 700 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Cape_Verdebin0 -> 109 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Faeroebin0 -> 664 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Jan_Mayenbin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Madeirabin0 -> 1262 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Reykjavikbin0 -> 429 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/South_Georgiabin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/St_Helenabin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Atlantic/Stanleybin0 -> 712 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Adelaidebin0 -> 785 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Brisbanebin0 -> 160 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Broken_Hillbin0 -> 790 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Darwinbin0 -> 104 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Hobartbin0 -> 825 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Lindemanbin0 -> 185 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Lord_Howebin0 -> 663 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Melbournebin0 -> 785 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Perthbin0 -> 140 bytes
-rw-r--r--root/usr/share/zoneinfo/Australia/Sydneybin0 -> 785 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Amsterdambin0 -> 1058 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Andorrabin0 -> 624 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Athensbin0 -> 823 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Belfastbin0 -> 1347 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Belgradebin0 -> 696 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Berlinbin0 -> 837 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Bratislavabin0 -> 806 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Brusselsbin0 -> 1067 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Bucharestbin0 -> 798 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Budapestbin0 -> 866 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Chisinaubin0 -> 898 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Copenhagenbin0 -> 766 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Dublinbin0 -> 1285 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Gibraltarbin0 -> 1099 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Helsinkibin0 -> 682 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Istanbulbin0 -> 993 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Kaliningradbin0 -> 832 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Kievbin0 -> 765 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Lisbonbin0 -> 1264 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Ljubljanabin0 -> 696 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Londonbin0 -> 1323 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Luxembourgbin0 -> 1098 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Madridbin0 -> 946 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Maltabin0 -> 941 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Minskbin0 -> 767 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Monacobin0 -> 1071 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Moscowbin0 -> 815 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Oslobin0 -> 806 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Parisbin0 -> 1082 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Praguebin0 -> 806 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Rigabin0 -> 455 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Romebin0 -> 951 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Samarabin0 -> 767 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/San_Marinobin0 -> 951 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Sarajevobin0 -> 696 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Simferopolbin0 -> 785 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Skopjebin0 -> 696 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Sofiabin0 -> 751 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Stockholmbin0 -> 688 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Tallinnbin0 -> 454 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Tiranebin0 -> 762 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Tiraspolbin0 -> 882 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Uzhgorodbin0 -> 771 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Vaduzbin0 -> 647 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Vaticanbin0 -> 951 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Viennabin0 -> 786 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Vilniusbin0 -> 844 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Warsawbin0 -> 961 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Zagrebbin0 -> 696 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Zaporozhyebin0 -> 775 bytes
-rw-r--r--root/usr/share/zoneinfo/Europe/Zurichbin0 -> 685 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Antananarivobin0 -> 104 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Chagosbin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Christmasbin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Cocosbin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Comorobin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Kerguelenbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Mahebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Maldivesbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Mauritiusbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Mayottebin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Indian/Reunionbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Apiabin0 -> 91 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Aucklandbin0 -> 870 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Chathambin0 -> 547 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Easterbin0 -> 789 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Efatebin0 -> 186 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Enderburybin0 -> 83 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Fakaofobin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Fijibin0 -> 481 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Funafutibin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Galapagosbin0 -> 91 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Gambierbin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Guadalcanalbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Guambin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Honolulubin0 -> 113 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Johnstonbin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Kiritimatibin0 -> 83 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Kosraebin0 -> 75 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Kwajaleinbin0 -> 87 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Majurobin0 -> 69 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Marquesasbin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Midwaybin0 -> 90 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Naurubin0 -> 108 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Niuebin0 -> 82 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Norfolkbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Noumeabin0 -> 132 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Pago_Pagobin0 -> 125 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Palaubin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Pitcairnbin0 -> 73 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Ponapebin0 -> 57 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Port_Moresbybin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Rarotongabin0 -> 208 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Saipanbin0 -> 69 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Tahitibin0 -> 74 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Tarawabin0 -> 57 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Tongatapubin0 -> 475 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Trukbin0 -> 57 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Wakebin0 -> 57 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Wallisbin0 -> 56 bytes
-rw-r--r--root/usr/share/zoneinfo/Pacific/Yapbin0 -> 70 bytes
-rw-r--r--root/usr/share/zoneinfo/iso3166.tab261
-rw-r--r--root/usr/share/zoneinfo/zone.tab387
-rw-r--r--rsync/AUTHORS2
-rw-r--r--rsync/COPYING515
-rw-r--r--rsync/Makefile.in391
-rw-r--r--rsync/README62
-rw-r--r--rsync/THANKS21
-rw-r--r--rsync/acconfig.h55
-rw-r--r--rsync/base64.c101
-rw-r--r--rsync/buf.c214
-rw-r--r--rsync/buf.h31
-rw-r--r--rsync/checksum.c81
-rw-r--r--rsync/checksum.h30
-rw-r--r--rsync/command.c61
-rw-r--r--rsync/command.h58
-rw-r--r--rsync/config_linux.h115
-rw-r--r--rsync/config_rsync.h2
-rw-r--r--rsync/delta.c351
-rw-r--r--rsync/emit.c131
-rw-r--r--rsync/emit.h32
-rw-r--r--rsync/fileutil.c70
-rw-r--r--rsync/fileutil.h23
-rw-r--r--rsync/hex.c46
-rw-r--r--rsync/job.c251
-rw-r--r--rsync/job.h99
-rw-r--r--rsync/mdfour.c326
-rw-r--r--rsync/mksum.c155
-rw-r--r--rsync/msg.c75
-rw-r--r--rsync/netint.c185
-rw-r--r--rsync/netint.h32
-rw-r--r--rsync/patch.c317
-rw-r--r--rsync/protocol.h45
-rw-r--r--rsync/prototab.c277
-rw-r--r--rsync/prototab.h270
-rw-r--r--rsync/qrsync.cpp110
-rw-r--r--rsync/qrsync.h18
-rw-r--r--rsync/rdiff.c358
-rw-r--r--rsync/readsums.c214
-rw-r--r--rsync/rsync.h388
-rw-r--r--rsync/scoop.c271
-rw-r--r--rsync/search.c162
-rw-r--r--rsync/search.h29
-rw-r--r--rsync/snprintf.c822
-rw-r--r--rsync/stats.c114
-rw-r--r--rsync/stream.c155
-rw-r--r--rsync/stream.h46
-rw-r--r--rsync/sumset.c83
-rw-r--r--rsync/sumset.h67
-rw-r--r--rsync/trace.c225
-rw-r--r--rsync/trace.h122
-rw-r--r--rsync/tube.c264
-rw-r--r--rsync/types.h36
-rw-r--r--rsync/util.c70
-rw-r--r--rsync/util.h44
-rw-r--r--rsync/version.c33
-rw-r--r--rsync/whole.c180
-rw-r--r--rsync/whole.h24
-rw-r--r--scripts/README26
-rwxr-xr-xscripts/mkPackages24
-rwxr-xr-xscripts/mkconfigs9
-rwxr-xr-xscripts/mkmakefile23
-rwxr-xr-xscripts/pack58
-rwxr-xr-xscripts/q_add_application49
-rwxr-xr-xscripts/q_add_class36
-rwxr-xr-xscripts/q_add_function88
-rwxr-xr-xscripts/q_add_variable70
-rwxr-xr-xscripts/q_cvs_add17
-rwxr-xr-xscripts/q_cvs_edit17
-rwxr-xr-xscripts/q_cvs_submit17
-rwxr-xr-xscripts/q_functions232
-rwxr-xr-xscripts/updateipks29
-rwxr-xr-xsounds/aland01.wavbin0 -> 2524 bytes
-rw-r--r--sounds/alarm.wavbin0 -> 6722 bytes
-rw-r--r--sounds/bang.wavbin0 -> 3078 bytes
-rw-r--r--sounds/collide01.wavbin0 -> 10572 bytes
-rwxr-xr-xsounds/crmble01.wavbin0 -> 18254 bytes
-rw-r--r--sounds/doorclos.wavbin0 -> 5703 bytes
-rw-r--r--sounds/hit_target01.wavbin0 -> 32864 bytes
-rw-r--r--sounds/landmine.wavbin0 -> 12618 bytes
-rw-r--r--sounds/level_up.wavbin0 -> 35419 bytes
-rw-r--r--sounds/lose.wavbin0 -> 5964 bytes
-rw-r--r--sounds/ohdear.wavbin0 -> 9628 bytes
-rw-r--r--sounds/qpe-sounds.control8
2247 files changed, 698561 insertions, 0 deletions
diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000..48c5bae
--- a/dev/null
+++ b/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+include
diff --git a/Changes b/Changes
new file mode 100644
index 0000000..55c8352
--- a/dev/null
+++ b/Changes
@@ -0,0 +1,31 @@
+Version 1.4.0
+-------------
+
+General:
+- Input methods are plugins
+- Taskbar applets are plugins
+- Handwriting input improved
+- Alarm server wakes from deep sleep
+- User interface consistancy fixes for all applications
+- Nearly all applications save state when closed
+- Performance improvements in many applications
+- Make better use of buttons on device
+- Documentation for developers
+
+Launcher:
+- Documents can now be categorized
+- Document view allows easy filtering on type, category and name
+- .desktop files are not required - all files in ~/Documents/ are visible
+- Allow applications to be preloaded to ensure instant launch
+- Automatic shutdown of least recently used applications
+- Recently used application icons displayed in taskbar
+
+Applications:
+- Addressbook bug fixes and improvements
+- Datebook bug fixes and improvements
+- Todo items can be filtered by category
+- Calculator bug fixes and improvements
+- Media player audio playback and user interface improved. Add support for wav
+- Image viewer user interface improved
+- File manager can launch applications to view files based on MIME type
+- LAN setup utility
diff --git a/LICENSE.GPL b/LICENSE.GPL
new file mode 100644
index 0000000..69c16cf
--- a/dev/null
+++ b/LICENSE.GPL
@@ -0,0 +1,350 @@
+
+ The Qtopia Environment is Copyright (C) 2000-2001 Trolltech AS and
+ other authors as specified in the file headers.
+
+ You may use, distribute and copy the Qtopia Environment under the terms
+ of GNU General Public License version 2, which is displayed below.
+
+-------------------------------------------------------------------------
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+-------------------------------------------------------------------------
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..bad3cf5
--- a/dev/null
+++ b/Makefile
@@ -0,0 +1,59 @@
+default: dynamic
+
+LIBS=library
+
+COMPONENTS=$(LOCALCOMPONENTS) inputmethods/keyboard \
+ inputmethods/pickboard \
+ inputmethods/handwriting \
+ inputmethods/unikeyboard \
+ taskbar/batteryapplet \
+ taskbar/volumeapplet \
+ taskbar/clockapplet \
+ taskbar/netmonapplet \
+ netsetup/dialup \
+ netsetup/lan \
+ mpegplayer/libmpeg3 \
+ mpegplayer/libmad \
+ mpegplayer/wavplugin \
+ cardmon
+
+APPS=$(LOCALAPPS) addressbook calculator clock datebook \
+ filebrowser helpbrowser minesweep mpegplayer \
+ settings/light-and-power \
+ settings/language \
+ settings/rotation \
+ settings/appearance \
+ settings/security \
+ settings/sound \
+ settings/systemtime \
+ solitaire spreadsheet tetrix textedit \
+ todo tux wordgame embeddedkonsole taskbar sysinfo \
+ parashoot snake citytime showimg netsetup \
+ qipkg mindbreaker go qasteroids qcop fifteen keypebble
+
+single: mpegplayer/libmpeg3
+
+dynamic: $(APPS)
+
+$(COMPONENTS): $(LIBS)
+
+$(APPS): $(LIBS) $(COMPONENTS)
+
+$(LIBS) $(COMPONENTS) $(APPS) single:
+ $(MAKE) -C $@ -f Makefile
+
+showcomponents:
+ @echo $(LIBS) $(APPS) $(COMPONENTS) single
+
+clean:
+ $(MAKE) -C single -f Makefile $@
+ for dir in $(APPS) $(LIBS) $(COMPONENTS); do $(MAKE) -C $$dir -f Makefile $@ || exit 1; done
+
+lupdate:
+ for dir in $(APPS) $(LIBS) $(COMPONENTS); do $(MAKE) -C $$dir -f Makefile $@ || exit 1; done
+
+lrelease:
+ for dir in $(APPS) $(LIBS) $(COMPONENTS); do $(MAKE) -C $$dir -f Makefile $@ || exit 1; done
+
+
+.PHONY: default dynamic $(LIBS) $(APPS) $(COMPONENTS) single showcomponents clean
diff --git a/README b/README
new file mode 100644
index 0000000..b67abe5
--- a/dev/null
+++ b/README
@@ -0,0 +1 @@
+See http://qpe.souceforge.net or website/index.html for all docs.
diff --git a/apps/.directory b/apps/.directory
new file mode 100644
index 0000000..1d1216d
--- a/dev/null
+++ b/apps/.directory
@@ -0,0 +1,3 @@
+[Desktop Entry]
+Name=Programs
+Name[hu]=Programok
diff --git a/apps/.qde_menu.conf b/apps/.qde_menu.conf
new file mode 100644
index 0000000..f142763
--- a/dev/null
+++ b/apps/.qde_menu.conf
@@ -0,0 +1,9 @@
+# Start Menu Config File
+[ QDE Start Menu Configuration ]
+UseWidePopupMenu=TRUE
+PopupMenuSidePixmap=sidebar
+StartButtonIsFlat=FALSE
+StartButtonPixmap=start_button
+InputMethodsOverlapTaskBar=FALSE
+InputMethodsOverlapApps=FALSE
+UseMRUList=FALSE
diff --git a/apps/.qpe_menu.conf b/apps/.qpe_menu.conf
new file mode 100644
index 0000000..130d37d
--- a/dev/null
+++ b/apps/.qpe_menu.conf
@@ -0,0 +1,9 @@
+# Start Menu Config File
+[ QPE Start Menu Configuration ]
+UseWidePopupMenu=FALSE
+PopupMenuSidePixmap=sidebar
+StartButtonIsFlat=TRUE
+StartButtonPixmap=go
+InputMethodsOverlapTaskBar=TRUE
+InputMethodsOverlapApps=TRUE
+UseMRUList=TRUE
diff --git a/apps/Applications/.directory b/apps/Applications/.directory
new file mode 100644
index 0000000..4836186
--- a/dev/null
+++ b/apps/Applications/.directory
@@ -0,0 +1,37 @@
+[Desktop Entry]
+Name=Applications
+Name[bg]=Ïðîãðàìè
+Name[ca]=Aplicacions
+Name[cs]=Aplikace
+Name[da]=Anvendelser
+Name[de]=Anwendungen
+Name[el]=Εφαρμογές
+Name[eo]=Aplikaĵoj
+Name[es]=Aplicaciones
+Name[et]=Rakendused
+Name[fi]=Sovellukset
+Name[gl]=Aplicacións
+Name[he]=םימושיי
+Name[hr]=Programi
+Name[hu]=Alkalmazások
+Name[is]=Forrit
+Name[it]=Applicazioni
+Name[ja]=アプリケーション
+Name[lt]=Programos
+Name[mk]=Апликации
+Name[nl]=Programma's
+Name[no]=Applikasjoner
+Name[no_NY]=Program
+Name[pl]=Aplikacje
+Name[pt]=Aplicações
+Name[pt_BR]=Aplicativos
+Name[ro]=Aplicaţii
+Name[ru]=Приложения
+Name[sk]=Aplikácie
+Name[sl]=Uporabniški programi
+Name[sv]=Program
+Name[ta]=ÀÂýÀ¡Î¸û
+Name[tr]=Uygulamalar
+Name[uk]=Програми
+Name[zh_CN]=应用程序
+Icon=AppsIcon
diff --git a/apps/Applications/addressbook.desktop b/apps/Applications/addressbook.desktop
new file mode 100644
index 0000000..3743752
--- a/dev/null
+++ b/apps/Applications/addressbook.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=An Address Book Program
+Exec=addressbook
+Icon=AddressBook
+Type=Application
+Name=Contacts
+Name[no]=Adressebok
+Name[de]=Adressbuch
+Name[hu]=Címtár
diff --git a/apps/Applications/calculator.desktop b/apps/Applications/calculator.desktop
new file mode 100644
index 0000000..6d2988b
--- a/dev/null
+++ b/apps/Applications/calculator.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Comment=A Calculator Program
+Exec=calculator
+Icon=Calculator
+Type=Application
+Name=Calculator
+Name[no]=Kalkulator
+Name[de]=Taschen rechner
+Name[ja]=電卓
+Name[hu]=Számológép
diff --git a/apps/Applications/citytime.desktop b/apps/Applications/citytime.desktop
new file mode 100644
index 0000000..9699748
--- a/dev/null
+++ b/apps/Applications/citytime.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Comment=A World Clock and Time Zone Editor
+Exec=citytime
+Icon=CityTime
+Type=Application
+Name=City Time
+Name[no]=Verdensur
+Name[de]=Weltzeituhr
+Name[ja]=世界時計
+Name[hu]=Idõzóna
diff --git a/apps/Applications/clock.desktop b/apps/Applications/clock.desktop
new file mode 100644
index 0000000..401bdb1
--- a/dev/null
+++ b/apps/Applications/clock.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Comment=A Clock Program
+Exec=clock
+Icon=Clock
+Type=Application
+Name=Clock
+Name[no]=Klokke
+Name[de]=Uhr
+Name[ja]=時計
+Name[hu]=Óra
diff --git a/apps/Applications/datebook.desktop b/apps/Applications/datebook.desktop
new file mode 100644
index 0000000..ea7d8c1
--- a/dev/null
+++ b/apps/Applications/datebook.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=A Calendar and Scheduling Program
+Exec=datebook
+Icon=DateBook
+Type=Application
+Name=Calendar
+Name[no]=Avtalebok
+Name[de]=Termin kalender
+Name[hu]=Naptár
diff --git a/apps/Applications/embeddedkonsole.desktop b/apps/Applications/embeddedkonsole.desktop
new file mode 100644
index 0000000..193e9e1
--- a/dev/null
+++ b/apps/Applications/embeddedkonsole.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Comment=A Terminal Window
+Exec=embeddedkonsole
+Icon=Terminal
+Type=Application
+Name=Terminal
+Name[de]=Kommando zeile
+Name[hu]=Terminál
diff --git a/apps/Applications/filebrowser.desktop b/apps/Applications/filebrowser.desktop
new file mode 100644
index 0000000..6681546
--- a/dev/null
+++ b/apps/Applications/filebrowser.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Comment = A File Manager Program
+Exec = filebrowser
+File = ../apps/Applications/filebrowser
+Icon = FileBrowser
+Name = File Manager
+Name[de] = Datei Manager
+Name[no] = Filviser
+Type = Application
+Name[hu]=Intézõ
diff --git a/apps/Applications/helpbrowser.desktop b/apps/Applications/helpbrowser.desktop
new file mode 100644
index 0000000..86dfb56
--- a/dev/null
+++ b/apps/Applications/helpbrowser.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=A HTML Help Browser Program
+Exec=helpbrowser
+Icon=HelpBrowser
+Type=Application
+Name=Help Browser
+Name[no]=Hjelp
+Name[de]=Hilfe
+Name[hu]=Segítség
diff --git a/apps/Applications/keypebble.desktop b/apps/Applications/keypebble.desktop
new file mode 100644
index 0000000..ee1240d
--- a/dev/null
+++ b/apps/Applications/keypebble.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Comment=Virtual Network Computing (VNC) Viewer
+Exec=keypebble
+Icon=vnc
+Type=Application
+Name=VNC Viewer
diff --git a/apps/Applications/mpegplayer.desktop b/apps/Applications/mpegplayer.desktop
new file mode 100644
index 0000000..14b4cf2
--- a/dev/null
+++ b/apps/Applications/mpegplayer.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Comment=A Media Playback Program
+Exec=mpegplayer
+Icon=MPEGPlayer
+Type=Application
+MimeType=audio/mpeg;video/mpeg;audio/x-wav;application/x-shockwave-flash
+MimeTypeIcons=SoundPlayer;MPEGPlayer;Sound;Sound
+Name=Media Player
+Name[no]=MPEGspiller
+Name[de]=Medienwiedergabe
+Name[ja]=MPEGプレイヤー
+Name[hu]=MPEG lejátszó
diff --git a/apps/Applications/showimg.desktop b/apps/Applications/showimg.desktop
new file mode 100644
index 0000000..66f9a78
--- a/dev/null
+++ b/apps/Applications/showimg.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=An Image Viewer
+Exec=showimg
+MimeType=image/*
+Icon=ImageViewer
+Type=Application
+Name=Image Viewer
+Name[de]=Bildbetrachter
+Name[hu]=Nézõke
diff --git a/apps/Applications/spreadsheet.desktop b/apps/Applications/spreadsheet.desktop
new file mode 100644
index 0000000..24c3b20
--- a/dev/null
+++ b/apps/Applications/spreadsheet.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Comment=A Spread Sheet Program
+Exec=spreadsheet
+Icon=Spreadsheet
+Type=Application
+MimeType=application/x-qpe-ss
+Name=Spreadsheet
+Name[no]=Regneark
+Name[de]=Tabellenkalkulation
+Name[ja]=表計算
+Name[hu]=Táblakezelõ
diff --git a/apps/Applications/sysinfo.desktop b/apps/Applications/sysinfo.desktop
new file mode 100644
index 0000000..bb9abb2
--- a/dev/null
+++ b/apps/Applications/sysinfo.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=System Info
+Name[no]=Systeminfo
+Name[de]=System information
+Exec=sysinfo
+Type=Application
+Comment=System Information
+Icon=SystemInfo
+Name[hu]=Rendszerinfó
diff --git a/apps/Applications/tableviewer.desktop b/apps/Applications/tableviewer.desktop
new file mode 100644
index 0000000..40d6d45
--- a/dev/null
+++ b/apps/Applications/tableviewer.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Comment=A table/database viewer
+Exec=tableviewer
+Type=Application
+Name=Table Viewer
+Name[hu]=Adatbázis nézõ
diff --git a/apps/Applications/textedit.desktop b/apps/Applications/textedit.desktop
new file mode 100644
index 0000000..241231f
--- a/dev/null
+++ b/apps/Applications/textedit.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=A Text Editing Program
+Exec=textedit
+Icon=TextEditor
+Type=Application
+MimeType=text/*
+Name=Text Editor
+Name[no]=Teksteditor
+Name[de]=Texteditor
+Name[ja]=テキストエディタ
+Name[zh_CN]=文本编辑器
+Name[zh_TW]=文字編輯器
+Name[ko]=글월 편집기
+Name[hu]=Szöveg- szerkesztõ
diff --git a/apps/Applications/todo.desktop b/apps/Applications/todo.desktop
new file mode 100644
index 0000000..bc0462d
--- a/dev/null
+++ b/apps/Applications/todo.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=A Todo List Program
+Exec=todolist
+Icon=TodoList
+Type=Application
+Name=Todo List
+Name[no]=Oppgaveliste
+Name[de]=Aufgabenliste
+Name[hu]=Feladatok
diff --git a/apps/Games/.directory b/apps/Games/.directory
new file mode 100644
index 0000000..dde3bf9
--- a/dev/null
+++ b/apps/Games/.directory
@@ -0,0 +1,38 @@
+[Desktop Entry]
+Name=Games
+Name[bg]=Èãðè
+Name[ca]=Jocs
+Name[cs]=Hry
+Name[da]=Spil
+Name[de]=Spiele
+Name[el]=Παιχνίδια
+Name[eo]=Ludoj
+Name[es]=Juegos
+Name[et]=Mängud
+Name[fi]=Pelit
+Name[fr]=Jeux
+Name[gl]=Xogos
+Name[he]=םיקחשמ
+Name[hr]=Igre
+Name[hu]=Játékok
+Name[is]=Leikir
+Name[it]=Giochi
+Name[ja]=ゲーム
+Name[lt]=Žaidimai
+Name[mk]=Игри
+Name[nl]=Amusement
+Name[no]=Spill
+Name[no_NY]=Spel
+Name[pl]=Gry
+Name[pt]=Jogos
+Name[pt_BR]=Jogos
+Name[ro]=Jocuri
+Name[ru]=Игры
+Name[sk]=Hry
+Name[sl]=Igre
+Name[sv]=Spel
+Name[ta]=Å¢¨Ç¡ðÎì¸û
+Name[tr]=Oyunlar
+Name[uk]=Ігри
+Name[zh_CN]=游戏
+Icon=Games
diff --git a/apps/Games/fifteen.desktop b/apps/Games/fifteen.desktop
new file mode 100644
index 0000000..fd32f7e
--- a/dev/null
+++ b/apps/Games/fifteen.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Comment=Fifteen Pieces Strategy Game
+Exec=fifteen
+Icon=Fifteen
+Type=Application
+Name=Fifteen Pieces
diff --git a/apps/Games/go.desktop b/apps/Games/go.desktop
new file mode 100644
index 0000000..b76e28c
--- a/dev/null
+++ b/apps/Games/go.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Comment=A Board Strategy Game
+Exec=go
+Icon=Go
+Type=Application
+Name=Go
diff --git a/apps/Games/mindbreaker.desktop b/apps/Games/mindbreaker.desktop
new file mode 100644
index 0000000..4cd6778
--- a/dev/null
+++ b/apps/Games/mindbreaker.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Comment=A Code Breaking Game
+Exec=mindbreaker
+Icon=Mindbreaker
+Type=Application
+Name=Mindbreaker
diff --git a/apps/Games/minesweep.desktop b/apps/Games/minesweep.desktop
new file mode 100644
index 0000000..2b38456
--- a/dev/null
+++ b/apps/Games/minesweep.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Comment=Find the mines
+Exec=minesweep
+Icon=MineHunt
+Type=Application
+Name=Mine Hunt
+Name[no]=Minesøk
+Name[de]=Minenjagd
+Name[ja]=マインスィープ
+Name[hu]=Aknakeresõ
diff --git a/apps/Games/parashoot.desktop b/apps/Games/parashoot.desktop
new file mode 100644
index 0000000..ab81654
--- a/dev/null
+++ b/apps/Games/parashoot.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=A Parachute Attack Game
+Exec=parashoot
+Icon=ParaShoot
+Type=Application
+Name=ParaShoot
+Name[no]=Fallskjerm
+Name[de]=Fallschirmjäger
+Name[hu]=Védd a bázist
diff --git a/apps/Games/patience.desktop b/apps/Games/patience.desktop
new file mode 100644
index 0000000..4af08b0
--- a/dev/null
+++ b/apps/Games/patience.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Comment=A Game of Patience
+Exec=patience
+Icon=Solitaire
+Type=Application
+Name=Patience
+Name[no]=Kabal
+Name[de]=Patience
+Name[ja]=ソリティア
+Name[hu]=Passziánsz
diff --git a/apps/Games/qasteroids.desktop b/apps/Games/qasteroids.desktop
new file mode 100644
index 0000000..db2e113
--- a/dev/null
+++ b/apps/Games/qasteroids.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Comment=Shoot the rocks
+Exec=qasteroids
+Icon=Asteroids
+Type=Application
+Name=Asteroids
+Name[hu]=Asteroids
+Name[de]=Asteroiden
diff --git a/apps/Games/snake.desktop b/apps/Games/snake.desktop
new file mode 100644
index 0000000..5373a62
--- a/dev/null
+++ b/apps/Games/snake.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=A Snake Game
+Exec=snake
+Icon=Snake
+Type=Application
+Name=Snake
+Name[no]=Slange
+Name[de]=Schlange
+Name[hu]=Kígyó
diff --git a/apps/Games/tetrix.desktop b/apps/Games/tetrix.desktop
new file mode 100644
index 0000000..2256fa2
--- a/dev/null
+++ b/apps/Games/tetrix.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Comment=A Block Stacking Game
+Exec=tetrix
+Icon=Tetrix
+Type=Application
+Name=Tetrix
+Name[ja]=テトリックス
diff --git a/apps/Games/tux.desktop b/apps/Games/tux.desktop
new file mode 100644
index 0000000..5b5b3d8
--- a/dev/null
+++ b/apps/Games/tux.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Comment=A Simple Fluffy Plush Toy Simulation
+Exec=tux
+Icon=Tux
+Type=Application
+Name=Tux
diff --git a/apps/Games/wordgame.desktop b/apps/Games/wordgame.desktop
new file mode 100644
index 0000000..c48a70f
--- a/dev/null
+++ b/apps/Games/wordgame.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=A word arranging game
+Exec=wordgame
+Icon=WordGame
+Type=Application
+Name=Word Game
+Name[no]=Kryss-Ord
+Name[de]=Wortspiel
+Name[hu]=Szójáték
diff --git a/apps/Settings/.directory b/apps/Settings/.directory
new file mode 100644
index 0000000..c51f0d6
--- a/dev/null
+++ b/apps/Settings/.directory
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=Settings
+Name[no]=Innstillinger
+Name[de]=Einstellungen
+Icon=SettingsIcon
+Name[hu]=Beállítások
diff --git a/apps/Settings/Appearance.desktop b/apps/Settings/Appearance.desktop
new file mode 100644
index 0000000..3588d75
--- a/dev/null
+++ b/apps/Settings/Appearance.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Exec=appearance
+Icon=Appearance
+Name=Appearance
+Name[no]=Utseende
+Name[de]=Erscheinungsbild
+Name[hu]=Megjelenés
diff --git a/apps/Settings/Calibrate.desktop b/apps/Settings/Calibrate.desktop
new file mode 100644
index 0000000..bf1f36f
--- a/dev/null
+++ b/apps/Settings/Calibrate.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Exec=calibrate
+Icon=Calibrate
+Name=Recalibrate
+Name[de]=Kalibrieren
+Name[no]=Kalibrer
+Name[hu]=Kalibráció
diff --git a/apps/Settings/Language.desktop b/apps/Settings/Language.desktop
new file mode 100644
index 0000000..c84c157
--- a/dev/null
+++ b/apps/Settings/Language.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Exec=language
+Icon=Language
+Name=Language
+Name[no]=Språk
+Name[de]=Sprache
+Name[hu]=Nyelv
diff --git a/apps/Settings/Light.desktop b/apps/Settings/Light.desktop
new file mode 100644
index 0000000..b6e8231
--- a/dev/null
+++ b/apps/Settings/Light.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Exec=light-and-power
+Icon=Light
+Name=Light & Power
+Name[no]=Lys
+Name[de]=Helligkeit
+Name[hu]=Fényerõ
diff --git a/apps/Settings/Rotation.desktop b/apps/Settings/Rotation.desktop
new file mode 100644
index 0000000..f91b926
--- a/dev/null
+++ b/apps/Settings/Rotation.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Exec=rotation
+Icon=Rotation
+Name=Rotation
+Name[no]=Rotasjon
+Name[de]=Rotation
+Name[hu]=Forgatás
diff --git a/apps/Settings/Security.desktop b/apps/Settings/Security.desktop
new file mode 100644
index 0000000..213c073
--- a/dev/null
+++ b/apps/Settings/Security.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Exec=security
+Icon=Security
+Name=Security
+Name[de]=Sicherheits einstellungen \ No newline at end of file
diff --git a/apps/Settings/Sound.desktop b/apps/Settings/Sound.desktop
new file mode 100644
index 0000000..951f8d4
--- a/dev/null
+++ b/apps/Settings/Sound.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Exec=sound
+Icon=Sound
+Name=Sound
diff --git a/apps/Settings/datetime.desktop b/apps/Settings/datetime.desktop
new file mode 100644
index 0000000..8888f7f
--- a/dev/null
+++ b/apps/Settings/datetime.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Comment=Set date and time
+Exec=systemtime
+Icon=DateTime
+Type=Application
+Name=Date/Time
+Name[no]=Dato/Tid
+Name[de]=Datum/Zeit
+Name[hu]=Dátum/Idõ
diff --git a/apps/Settings/netsetup.desktop b/apps/Settings/netsetup.desktop
new file mode 100644
index 0000000..b622a15
--- a/dev/null
+++ b/apps/Settings/netsetup.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Exec=netsetup
+Icon=PPPConnect
+Type=Application
+Name=Network
+Name[de]=Netzwerk \ No newline at end of file
diff --git a/apps/Settings/qipkg.desktop b/apps/Settings/qipkg.desktop
new file mode 100644
index 0000000..6ef2202
--- a/dev/null
+++ b/apps/Settings/qipkg.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Exec=qipkg
+MimeType=application/ipkg
+Icon=Ipkg
+Name=Add/Remove Software
+Name[hu]=Csomag- kezelõ
+Name[de]=Software \ No newline at end of file
diff --git a/apps/Settings/quit.desktop b/apps/Settings/quit.desktop
new file mode 100644
index 0000000..dbc7220
--- a/dev/null
+++ b/apps/Settings/quit.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Exec=shutdown
+Icon=Shutdown
+Name=Shutdown
+Name[no]=Skru av
+Name[de]=Beenden
+Name[hu]=Leállítás
diff --git a/apps/__7separator.desktop b/apps/__7separator.desktop
new file mode 100644
index 0000000..091cc69
--- a/dev/null
+++ b/apps/__7separator.desktop
@@ -0,0 +1,2 @@
+[Desktop Entry]
+Type=Separator
diff --git a/apps/__9quit.desktop b/apps/__9quit.desktop
new file mode 100644
index 0000000..ed024b0
--- a/dev/null
+++ b/apps/__9quit.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Exec=suspend
+Icon=Shutdown
+Name=Suspend
diff --git a/bin/.cvsignore b/bin/.cvsignore
new file mode 100644
index 0000000..b8cbd0c
--- a/dev/null
+++ b/bin/.cvsignore
@@ -0,0 +1,2 @@
+[a-z]*
+.bookmarks
diff --git a/bin/README b/bin/README
new file mode 100644
index 0000000..f293b3e
--- a/dev/null
+++ b/bin/README
@@ -0,0 +1 @@
+Executables go here.
diff --git a/configs/fix_linker b/configs/fix_linker
new file mode 100755
index 0000000..645ef68
--- a/dev/null
+++ b/configs/fix_linker
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+
+for file in *g++*
+do
+ sed "/SYSCONF_LINK .*=/s/g++/gcc/" $file > $file.tmp
+ mv $file.tmp $file
+done
+
diff --git a/configs/freebsd-g++-shared b/configs/freebsd-g++-shared
new file mode 100644
index 0000000..f746927
--- a/dev/null
+++ b/configs/freebsd-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 = -I/usr/X11R6/include
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 = -Wl,-rpath,/usr/X11R6/lib
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 = -L/usr/X11R6/lib
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL = -lGLU -lGL -lXmu
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = g++
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_CXXFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_LFLAGS_THREAD = -pthread
+SYSCONF_LIBS_THREAD =
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = g++
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -fno-exceptions -DQWS -fno-rtti -fno-exceptions -DQT_NO_QWS_LINUXFB -DQT_NO_QWS_TRANSFORMED -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -fno-exceptions -O2 -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/freebsd-g++-shared-debug b/configs/freebsd-g++-shared-debug
new file mode 100644
index 0000000..53a5113
--- a/dev/null
+++ b/configs/freebsd-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 = -I/usr/X11R6/include
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 = -Wl,-rpath,/usr/X11R6/lib
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 = -L/usr/X11R6/lib
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL = -lGLU -lGL -lXmu
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = g++
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_CXXFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_LFLAGS_THREAD = -pthread
+SYSCONF_LIBS_THREAD =
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = g++
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -fno-exceptions -DQWS -fno-rtti -fno-exceptions -DQT_NO_QWS_LINUXFB -DQT_NO_QWS_TRANSFORMED -g -Wall -W
+SYSCONF_CFLAGS = -pipe -fno-exceptions -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/freebsd-g++-static b/configs/freebsd-g++-static
new file mode 100644
index 0000000..b4d9f94
--- a/dev/null
+++ b/configs/freebsd-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 = -I/usr/X11R6/include
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 = -Wl,-rpath,/usr/X11R6/lib
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 = -L/usr/X11R6/lib
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL = -lGLU -lGL -lXmu
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = g++
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_CXXFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_LFLAGS_THREAD = -pthread
+SYSCONF_LIBS_THREAD =
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = g++
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -fno-exceptions -DQWS -fno-rtti -fno-exceptions -DQT_NO_QWS_LINUXFB -DQT_NO_QWS_TRANSFORMED -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -fno-exceptions -O2 -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/freebsd-g++-static-debug b/configs/freebsd-g++-static-debug
new file mode 100644
index 0000000..febb4e5
--- a/dev/null
+++ b/configs/freebsd-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 = -I/usr/X11R6/include
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 = -Wl,-rpath,/usr/X11R6/lib
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 = -L/usr/X11R6/lib
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL = -lGLU -lGL -lXmu
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = g++
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_CXXFLAGS_THREAD = -pthread -D_THREAD_SAFE
+SYSCONF_LFLAGS_THREAD = -pthread
+SYSCONF_LIBS_THREAD =
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = g++
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -fno-exceptions -DQWS -fno-rtti -fno-exceptions -DQT_NO_QWS_LINUXFB -DQT_NO_QWS_TRANSFORMED -g -Wall -W
+SYSCONF_CFLAGS = -pipe -fno-exceptions -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-arm-g++-shared b/configs/linux-arm-g++-shared
new file mode 100644
index 0000000..bfa7612
--- a/dev/null
+++ b/configs/linux-arm-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-arm-g++-shared-debug b/configs/linux-arm-g++-shared-debug
new file mode 100644
index 0000000..aeb27f7
--- a/dev/null
+++ b/configs/linux-arm-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-arm-g++-static b/configs/linux-arm-g++-static
new file mode 100644
index 0000000..e2e43df
--- a/dev/null
+++ b/configs/linux-arm-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-arm-g++-static-debug b/configs/linux-arm-g++-static-debug
new file mode 100644
index 0000000..2b60ab1
--- a/dev/null
+++ b/configs/linux-arm-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-cassiopeia-g++-shared b/configs/linux-cassiopeia-g++-shared
new file mode 100644
index 0000000..6471d2f
--- a/dev/null
+++ b/configs/linux-cassiopeia-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_CASSIOPEIA -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-cassiopeia-g++-shared-debug b/configs/linux-cassiopeia-g++-shared-debug
new file mode 100644
index 0000000..4c6f96d
--- a/dev/null
+++ b/configs/linux-cassiopeia-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_CASSIOPEIA -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-cassiopeia-g++-static b/configs/linux-cassiopeia-g++-static
new file mode 100644
index 0000000..366b14a
--- a/dev/null
+++ b/configs/linux-cassiopeia-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_CASSIOPEIA -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-cassiopeia-g++-static-debug b/configs/linux-cassiopeia-g++-static-debug
new file mode 100644
index 0000000..42b2125
--- a/dev/null
+++ b/configs/linux-cassiopeia-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_CASSIOPEIA -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-generic-g++-shared b/configs/linux-generic-g++-shared
new file mode 100644
index 0000000..b0e62e7
--- a/dev/null
+++ b/configs/linux-generic-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-generic-g++-shared-debug b/configs/linux-generic-g++-shared-debug
new file mode 100644
index 0000000..1ec24c1
--- a/dev/null
+++ b/configs/linux-generic-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-generic-g++-static b/configs/linux-generic-g++-static
new file mode 100644
index 0000000..6f92524
--- a/dev/null
+++ b/configs/linux-generic-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-generic-g++-static-debug b/configs/linux-generic-g++-static-debug
new file mode 100644
index 0000000..0f3ec32
--- a/dev/null
+++ b/configs/linux-generic-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-ipaq-g++-shared b/configs/linux-ipaq-g++-shared
new file mode 100644
index 0000000..2900c59
--- a/dev/null
+++ b/configs/linux-ipaq-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-ipaq-g++-shared-debug b/configs/linux-ipaq-g++-shared-debug
new file mode 100644
index 0000000..c89db2f
--- a/dev/null
+++ b/configs/linux-ipaq-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-ipaq-g++-static b/configs/linux-ipaq-g++-static
new file mode 100644
index 0000000..fef81af
--- a/dev/null
+++ b/configs/linux-ipaq-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-ipaq-g++-static-debug b/configs/linux-ipaq-g++-static-debug
new file mode 100644
index 0000000..21642e0
--- a/dev/null
+++ b/configs/linux-ipaq-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = arm-linux-g++
+SYSCONF_CC = arm-linux-gcc
+DASHCROSS = -arm
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = arm-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = arm-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = arm-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_IPAQ -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-mips-g++-shared b/configs/linux-mips-g++-shared
new file mode 100644
index 0000000..fb3a8f3
--- a/dev/null
+++ b/configs/linux-mips-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-mips-g++-shared-debug b/configs/linux-mips-g++-shared-debug
new file mode 100644
index 0000000..027c9e3
--- a/dev/null
+++ b/configs/linux-mips-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-mips-g++-static b/configs/linux-mips-g++-static
new file mode 100644
index 0000000..970daa2
--- a/dev/null
+++ b/configs/linux-mips-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-mips-g++-static-debug b/configs/linux-mips-g++-static-debug
new file mode 100644
index 0000000..8982d97
--- a/dev/null
+++ b/configs/linux-mips-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = mipsel-linux-g++
+SYSCONF_CC = mipsel-linux-gcc
+DASHCROSS = -mips
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = mipsel-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = mipsel-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = mipsel-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-sh3-g++-shared b/configs/linux-sh3-g++-shared
new file mode 100644
index 0000000..8a8c2b2
--- a/dev/null
+++ b/configs/linux-sh3-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = sh3-linux-g++
+SYSCONF_CC = sh3-linux-gcc
+DASHCROSS = -sh
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = sh3-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = sh3-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = sh3-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_EBX -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-sh3-g++-shared-debug b/configs/linux-sh3-g++-shared-debug
new file mode 100644
index 0000000..2303cb6
--- a/dev/null
+++ b/configs/linux-sh3-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = sh3-linux-g++
+SYSCONF_CC = sh3-linux-gcc
+DASHCROSS = -sh
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = sh3-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = sh3-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = sh3-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_EBX -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-sh3-g++-static b/configs/linux-sh3-g++-static
new file mode 100644
index 0000000..6ddd710
--- a/dev/null
+++ b/configs/linux-sh3-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = sh3-linux-g++
+SYSCONF_CC = sh3-linux-gcc
+DASHCROSS = -sh
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = sh3-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = sh3-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = sh3-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_EBX -DQWS -fno-exceptions -fno-rtti -O2 -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-sh3-g++-static-debug b/configs/linux-sh3-g++-static-debug
new file mode 100644
index 0000000..cf24126
--- a/dev/null
+++ b/configs/linux-sh3-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = sh3-linux-g++
+SYSCONF_CC = sh3-linux-gcc
+DASHCROSS = -sh
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = sh3-linux-gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = sh3-linux-gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = sh3-linux-ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQT_QWS_EBX -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-x86-g++-shared b/configs/linux-x86-g++-shared
new file mode 100644
index 0000000..e76419e
--- a/dev/null
+++ b/configs/linux-x86-g++-shared
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -fno-default-inline -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -fno-default-inline -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-x86-g++-shared-debug b/configs/linux-x86-g++-shared-debug
new file mode 100644
index 0000000..1ec24c1
--- a/dev/null
+++ b/configs/linux-x86-g++-shared-debug
@@ -0,0 +1,94 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+# Default link type (static linking is still be used where required)
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_SHARED)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_SHARED)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB = -fPIC
+SYSCONF_CFLAGS_LIB = -fPIC
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_LFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP =
diff --git a/configs/linux-x86-g++-static b/configs/linux-x86-g++-static
new file mode 100644
index 0000000..e48f747
--- a/dev/null
+++ b/configs/linux-x86-g++-static
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -fno-default-inline -Wall -W
+SYSCONF_CFLAGS = -pipe -O2 -fno-default-inline -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configs/linux-x86-g++-static-debug b/configs/linux-x86-g++-static-debug
new file mode 100644
index 0000000..0f3ec32
--- a/dev/null
+++ b/configs/linux-x86-g++-static-debug
@@ -0,0 +1,93 @@
+# Compiling
+INTERFACE_DECL_PATH = .
+SYSCONF_CXX = g++
+SYSCONF_CC = gcc
+DASHCROSS =
+
+# Compiling with support libraries
+SYSCONF_CXXFLAGS_X11 =
+SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
+SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include
+
+# Compiling YACC output
+SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses
+
+# Linking with support libraries
+SYSCONF_RPATH_X11 =
+SYSCONF_RPATH_QT = -Wl,-rpath,$(QTDIR)/lib
+SYSCONF_RPATH_OPENGL = -Wl,-rpath,/usr/X11R6/lib
+
+# Linking with support libraries
+# X11
+SYSCONF_LFLAGS_X11 =
+SYSCONF_LIBS_X11 =
+# Qt, Qt+OpenGL
+SYSCONF_LFLAGS_QT = -L$(QTDIR)/lib
+SYSCONF_LIBS_QT = -lqte$(QT_THREAD_SUFFIX)
+SYSCONF_LIBS_QT_OPENGL =
+# OpenGL
+SYSCONF_LFLAGS_OPENGL = -L/usr/X11R6/lib
+SYSCONF_LIBS_OPENGL =
+# Yacc
+SYSCONF_LIBS_YACC =
+
+# Linking applications
+SYSCONF_LINK = gcc
+SYSCONF_LFLAGS =
+SYSCONF_LIBS =
+
+# Link flags for shared objects
+SYSCONF_LFLAGS_SHOBJ = -shared
+
+# Flags for threading
+SYSCONF_CFLAGS_THREAD = -D_REENTRANT
+SYSCONF_CXXFLAGS_THREAD = -D_REENTRANT
+SYSCONF_LFLAGS_THREAD =
+SYSCONF_LIBS_THREAD = -lpthread
+
+# Meta-object compiler
+SYSCONF_MOC = $(QTDIR)/bin/moc
+
+# UI compiler
+SYSCONF_UIC = $(QTDIR)/bin/uic
+
+# Linking shared libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).so.2.2.2
+# - Place target in $(DESTDIR) - which has a trailing /
+# - Usually needs to incorporate $(VER_MAJ), $(VER_MIN) and $(VER_PATCH)
+#
+SYSCONF_LINK_SHLIB = gcc
+SYSCONF_LINK_TARGET_SHARED = lib$(TARGET).so.$(VER_MAJ).$(VER_MIN).$(VER_PATCH)
+SYSCONF_LINK_LIB_SHARED = $(SYSCONF_LINK_SHLIB) -shared -Wl,-soname,lib$(TARGET).so.$(VER_MAJ) \
+ $(LFLAGS) -o $(SYSCONF_LINK_TARGET_SHARED) \
+ $(OBJECTS) $(OBJMOC) $(LIBS) && \
+ mv $(SYSCONF_LINK_TARGET_SHARED) $(DESTDIR); \
+ cd $(DESTDIR) && \
+ rm -f lib$(TARGET).so lib$(TARGET).so.$(VER_MAJ) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so; \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ); \
+ ln -s $(SYSCONF_LINK_TARGET_SHARED) lib$(TARGET).so.$(VER_MAJ).$(VER_MIN)
+
+# Linking static libraries
+# - Build the $(TARGET) library, eg. lib$(TARGET).a
+# - Place target in $(DESTDIR) - which has a trailing /
+#
+SYSCONF_AR = ar cqs
+SYSCONF_LINK_TARGET_STATIC = lib$(TARGET).a
+SYSCONF_LINK_LIB_STATIC = rm -f $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) ; \
+ $(SYSCONF_AR) $(DESTDIR)$(SYSCONF_LINK_TARGET_STATIC) $(OBJECTS) $(OBJMOC)
+# Compiling application source
+SYSCONF_CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -g -Wall -W
+SYSCONF_CFLAGS = -pipe -g -Wall -W
+SYSCONF_LINK_LIB = $(SYSCONF_LINK_LIB_STATIC)
+SYSCONF_LINK_TARGET = $(SYSCONF_LINK_TARGET_STATIC)
+# Compiling library source
+SYSCONF_CXXFLAGS_LIB =
+SYSCONF_CFLAGS_LIB =
+# Compiling shared-object source
+SYSCONF_CXXFLAGS_SHOBJ = -fPIC
+SYSCONF_CFLAGS_SHOBJ = -fPIC
+# Linking Qt
+SYSCONF_LIBS_QTLIB = $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT)
+# Linking Qt applications
+SYSCONF_LIBS_QTAPP = $(SYSCONF_LFLAGS_X11) $(SYSCONF_CXXFLAGS_X11) $(QT_LIBS_MT) $(QT_LIBS_OPT) $(SYSCONF_LIBS_X11)
diff --git a/configure b/configure
new file mode 100755
index 0000000..d36fd44
--- a/dev/null
+++ b/configure
@@ -0,0 +1,270 @@
+#!/bin/sh
+#
+# Configures to build the Qtopia Environment
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+PLATFORM=linux-generic-g++
+SHARING=shared
+DEBUG=
+QCONFIGARG=
+
+touch .test.qpe.
+if [ '!' -f ${QPEDIR}/.test.qpe. ];
+then
+ rm .test.qpe.
+ echo
+ echo
+ echo ' The environment variable $QPEDIR is not set correctly. It is currently'
+ echo ' set to "'$QPEDIR'", but it should be set to this directory,'
+ echo ' which is "'`pwd`'".'
+ echo
+ echo ' Please read the INSTALL file for instructions on how to set $QPEDIR'
+ echo ' correctly. If you have set $QPEDIR in your .profile or .login, you '
+ echo ' will need to log out and log in again to make the setting effective.'
+ echo
+ echo
+ exit 1
+fi
+rm .test.qpe.
+
+mkdir -p include/qpe
+( cd include/qpe && rm -f *.h; ln -s ../../library/*.h .; ln -s ../../library/backend/*.h .; rm -f *_p.h; )
+
+VERSION_MAJ=$(sed -n -e 's/.*QPE_VERSION "\([0-9]*\)\.[0-9]*\.[0-9]*.*".*/\1/p' <include/qpe/version.h)
+VERSION_MIN=$(sed -n -e 's/.*QPE_VERSION "[0-9]*\.\([0-9]\)\.[0-9]*.*".*/\1/p' <include/qpe/version.h)
+VERSION_PAT=$(sed -n -e 's/.*QPE_VERSION "[0-9]*\.[0-9]*\.\([0-9]*\).*".*/\1/p' <include/qpe/version.h)
+
+TOMAKE=
+
+if grep -q 'VERSION_STR.*"3' $QTDIR/include/qglobal.h
+then
+ QT3=yes
+else
+ QT3=no
+fi
+
+# Parse the arguments, setting things to "yes" or "no".
+
+while [ -n "$1" ]; do
+ case $1 in
+ -platform|-xplatform) # No difference since we don't need to build moc, etc.
+ shift; PLATFORM=$1
+ ;;
+ -release)
+ DEBUG=
+ ;;
+ -debug)
+ DEBUG=-debug
+ ;;
+ -shared)
+ SHARING=shared
+ ;;
+ -static)
+ SHARING=static
+ ;;
+ -qconfig)
+ # optional way to specify the qconfig-qpe.h is to pass -qconfig qpe
+ shift; QCONFIGARG=DEFINES+=QCONFIG='\"'$1'\"' # Don't quote me on that.
+ ;;
+ -make)
+ shift; TOMAKE="$TOMAKE $1"
+ ;;
+ -qt3)
+ QT3=yes
+ ;;
+ *)
+ HELP=yes;;
+ esac
+ shift
+done
+
+TARGET=configs/$PLATFORM-$SHARING$DEBUG
+
+if [ '!' -f $TARGET ]
+then
+ if [ -f configs/linux-$PLATFORM-g++-$SHARING$DEBUG ]
+ then
+ TARGET=configs/linux-$PLATFORM-g++-$SHARING$DEBUG
+ else
+ echo
+ echo ' The specified platform/compiler not supported: ' $TARGET
+ echo
+ exit 2
+ fi
+fi
+
+# Next, emit a usage message if something failed.
+
+if [ "$HELP" = "yes" ]; then
+ cat <<EOF
+Usage: $0 [-debug] [-release] [-shared] [-static] [-qt3] [-platform ...]
+
+The defaults (*) are usually acceptable. Here is a short explanation of
+each option:
+
+ * -release ........... Compile and link Qt with debugging turned off.
+ -debug ............. Compile and link Qt with debugging turned on.
+
+ * -shared ............ Create and use a shared Qt library (libqt.so)
+ -static ............ Create and use a static Qt library (libqt.a)
+
+ -qt3 ............... Configure for use with Qt 3.x
+
+ -platform target ... The platform you are building on ($PLATFORM)
+EOF
+ exit 0;
+fi
+
+
+echo Creating makefiles...
+
+sed -e 's/^\(VERSION.*= \).*/\1'$VERSION_MAJ.$VERSION_MIN.$VERSION_PAT/ <library/library.pro >library/library.pro-v
+mv library/library.pro-v library/library.pro
+
+if [ "$QT3" = yes ]
+then
+ VCONFIG="CONFIG+=qt3"
+else
+ VCONFIG="CONFIG+=qt2"
+fi
+
+if [ -f $TMAKEPATH/tmake.conf ]
+then
+ # You have tmake. We'll regenerate the file for you...
+ echo "Makefiles will be regenerated."
+fi
+
+H=`pwd`
+if [ -z "$TOMAKE" ]
+then
+ TOMAKE=`make showcomponents`
+fi
+
+for a in $TOMAKE ; do
+ N=$a/Makefile
+ M=$a/Makefile.in
+ O=$a/Makefile.add
+ f=`basename $a`
+
+ if [ -f $TMAKEPATH/tmake.conf -a -f $a/$f.pro ]
+ then
+ ( cd $a;
+ TMAKEPATH=$QTDIR/tmake:$TMAKEPATH \
+ tmake $QCONFIGARG CONFIG+=embedded $VCONFIG \
+ -t $H/qt/tmake/propagate.t $f.pro |
+ sed -e "s|$QTDIR|\$(QTDIR)|g" -e "s|$QPEDIR|\$(QPEDIR)|g" >Makefile.in;
+ )
+ echo -n "."
+ appname=`grep '^TARGET' $a/$f.pro | sed 's/^TARGET.*=//' | sed 's/ //g'`
+ translation=`grep '^TRANSLATION' $a/$f.pro | sed 's,^TRANSL.*=.*i18n\/.*\/,,' | sed 's/ //g' | sed 's,\.ts.*,,' | sed 's,^lib,,' `
+ if [ -n "$translation" -a -n "$appname" ]
+ then
+ if [ $appname != $translation ]
+ then
+ echo
+ echo "Warning: translation and appname disagree in $a/$f.pro"
+ fi
+ fi
+
+ fi
+
+ cat > $N <<EOF
+#############################################################################
+# Automatically generated from $M
+# Build options from $1
+#############################################################################
+
+EOF
+
+ SED=
+ PLATFORM_CFLAGS=
+
+ if [ "$f" = "embeddedkonsole" ]
+ then
+ case $PLATFORM in
+ *x86*|*generic*|*ipaq*)
+ SED="$SED /^LIBS.*=/s/\$/ -lutil/;"
+ PLATFORM_CFLAGS="-DHAVE_OPENPTY"
+ ;; *)
+ SED=
+ esac
+ elif [ "$f" = "libmpeg3" ]
+ then
+ # Patch our Makefile.in file with the platform specifics for the libmpeg3 library
+ # Use the C++ compiler to compile the .c files (because the fixed-point classes are C++ code)
+ SED='s/\$(CC)/\$(CXX)/;'
+ case $PLATFORM
+ in
+ # For x86 turn on using floating point, compile mmx and css code
+ *x86*)
+ # "-funroll-loops -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2 -march=i486"
+ PLATFORM_CFLAGS="-DHAVE_MMX -DHAVE_CSS"
+ SED="$SED /SOURCES.*=/s/=/= video\\/mmxidct.S video\\/reconmmx.s\ /;"
+ # For generic turn on using floating point
+ ;; *generic*)
+ PLATFORM_CFLAGS=""
+ # For the ipaq use fixed point maths, don't compile the mmx or css code
+ ;; *ipaq*)
+ PLATFORM_CFLAGS="-DUSE_FIXED_POINT"
+ ;; *)
+ # For 'other platforms', turn off optimizations and use fixed point
+ PLATFORM_CFLAGS="-O -DUSE_FIXED_POINT"
+ esac
+ elif [ "$f" = "libmad" ]
+ then
+ # Patch our Makefile.in file with the platform specifics for the libmad library
+ case $PLATFORM
+ in
+ # For x86 use intel optimizations
+ *x86*)
+ PLATFORM_CFLAGS="-DFPM_INTEL"
+ # For the ipaq use ARM asm optimizations
+ ;; *ipaq*)
+ PLATFORM_CFLAGS="-DFPM_ARM"
+ SED="$SED /SOURCES.*=/s/=/= idmt_arm.S /;"
+ # For generic platforms use the C 64-bit implementation
+ ;; *generic*)
+ PLATFORM_CFLAGS="-DFPM_64BIT"
+ # For 'other platforms' use the ARM code
+ ;; *)
+ PLATFORM_CFLAGS="-DFPM_ARM"
+ SED="$SED /SOURCES.*=/s/=/= idmt_arm.S /;"
+ esac
+ fi
+ if [ -n "$PLATFORM_CFLAGS" ]
+ then
+ # Append the addition c-flags we have defined
+ SED="$SED /CFLAGS.*=.*/s/\$/ $PLATFORM_CFLAGS/;"
+ SED="$SED /CXXFLAGS.*=.*/s/\$/ $PLATFORM_CFLAGS/;"
+ fi
+ cat $TARGET >> $N
+ if [ -n "$SED" ]
+ then
+ sed -e "$SED" $M >> $N
+ else
+ cat $M >> $N
+ fi
+
+ cat >> $N <<EOF
+
+lupdate:
+ lupdate $f.pro
+
+lrelease:
+ lrelease $f.pro
+
+EOF
+ if [ -f "$O" ]
+ then
+ cat >> $N $O
+ fi
+
+done
+
+MAKE=make
+echo
+echo "QPE is now configured for building. Just run $MAKE (or $MAKE single)."
+echo "To reconfigure, run $MAKE clean and configure."
+echo
diff --git a/core/.cvsignore b/core/.cvsignore
new file mode 100644
index 0000000..e3d8c4b
--- a/dev/null
+++ b/core/.cvsignore
@@ -0,0 +1,13 @@
+moc_*
+*.moc
+Makefile
+appearancesettingsbase.h
+soundsettingsbase.h
+lightsettingsbase.h
+languagesettingsbase.cpp
+rotationsettingsbase.cpp
+appearancesettingsbase.cpp
+lightsettingsbase.cpp
+languagesettingsbase.h
+rotationsettingsbase.h
+soundsettingsbase.cpp
diff --git a/core/applets/batteryapplet/.cvsignore b/core/applets/batteryapplet/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/applets/batteryapplet/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/applets/batteryapplet/Makefile.in b/core/applets/batteryapplet/Makefile.in
new file mode 100644
index 0000000..0493fd6
--- a/dev/null
+++ b/core/applets/batteryapplet/Makefile.in
@@ -0,0 +1,122 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/applets/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = batteryapplet
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = battery.h \
+ batterystatus.h \
+ batteryappletimpl.h
+SOURCES = battery.cpp \
+ batterystatus.cpp \
+ batteryappletimpl.cpp
+OBJECTS = battery.o \
+ batterystatus.o \
+ batteryappletimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_battery.cpp
+OBJMOC = moc_battery.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake batteryapplet.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+battery.o: battery.cpp \
+ battery.h \
+ batterystatus.h
+
+batterystatus.o: batterystatus.cpp \
+ batterystatus.h
+
+batteryappletimpl.o: batteryappletimpl.cpp \
+ battery.h \
+ batteryappletimpl.h
+
+moc_battery.o: moc_battery.cpp \
+ battery.h
+
+moc_battery.cpp: battery.h
+ $(MOC) battery.h -o moc_battery.cpp
+
+
diff --git a/core/applets/batteryapplet/battery.cpp b/core/applets/batteryapplet/battery.cpp
new file mode 100644
index 0000000..3d254fc
--- a/dev/null
+++ b/core/applets/batteryapplet/battery.cpp
@@ -0,0 +1,152 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "battery.h"
+#include "batterystatus.h"
+
+#include <qpe/power.h>
+
+#include <qpainter.h>
+#include <qtimer.h>
+
+
+BatteryMeter::BatteryMeter( QWidget *parent = 0 )
+ : QWidget( parent ), charging(false)
+{
+ ps = new PowerStatus;
+ startTimer( 10000 );
+ setFixedHeight(12);
+ chargeTimer = new QTimer( this );
+ connect( chargeTimer, SIGNAL(timeout()), this, SLOT(chargeTimeout()) );
+ timerEvent(0);
+}
+
+BatteryMeter::~BatteryMeter()
+{
+ delete ps;
+}
+
+QSize BatteryMeter::sizeHint() const
+{
+ return QSize(10,12);
+}
+
+void BatteryMeter::mouseReleaseEvent( QMouseEvent *)
+{
+ if ( batteryView && batteryView->isVisible() ) {
+ delete (QWidget *) batteryView;
+ } else {
+ if ( !batteryView )
+ batteryView = new BatteryStatus( ps );
+ batteryView->showMaximized();
+ batteryView->raise();
+ batteryView->show();
+ }
+}
+
+void BatteryMeter::timerEvent( QTimerEvent * )
+{
+ PowerStatus prev = *ps;
+
+ *ps = PowerStatusManager::readStatus();
+
+ if ( prev != *ps ) {
+ percent = ps->batteryPercentRemaining();
+ if ( !charging && ps->batteryStatus() == PowerStatus::Charging && percent < 0 ) {
+ percent = 0;
+ charging = true;
+ chargeTimer->start( 500 );
+ } else if ( charging && ps->batteryStatus() != PowerStatus::Charging ) {
+ charging = false;
+ chargeTimer->stop();
+ if ( batteryView )
+ batteryView->updatePercent( percent );
+ }
+ repaint(FALSE);
+ if ( batteryView )
+ batteryView->repaint();
+ }
+}
+
+void BatteryMeter::chargeTimeout()
+{
+ percent += 20;
+ if ( percent > 100 )
+ percent = 0;
+
+ repaint(FALSE);
+ if ( batteryView )
+ batteryView->updatePercent( percent );
+}
+
+void BatteryMeter::paintEvent( QPaintEvent* )
+{
+ QPainter p(this);
+
+ QColor c;
+ QColor darkc;
+ QColor lightc;
+ if ( ps->acStatus() == PowerStatus::Offline ) {
+ c = blue.light(120);
+ darkc = c.dark(120);
+ lightc = c.light(140);
+ } else if ( ps->acStatus() == PowerStatus::Online ) {
+ c = green.dark(130);
+ darkc = c.dark(120);
+ lightc = c.light(180);
+ } else {
+ c = red;
+ darkc = c.dark(120);
+ lightc = c.light(160);
+ }
+
+ int w = 6;
+ int h = height()-3;
+ int pix = (percent * h) / 100;
+ int y2 = height() - 2;
+ int y = y2 - pix;
+ int x1 = (width() - w) / 2;
+
+ p.setPen(QColor(80,80,80));
+ p.drawLine(x1+w/4,0,x1+w/4+w/2,0);
+ p.drawRect(x1,1,w,height()-1);
+ p.setBrush(c);
+
+ int extra = ((percent * h) % 100)/(100/4);
+
+#define Y(i) ((i<=extra)?y-1:y)
+#define DRAWUPPER(i) if ( Y(i) >= 2 ) p.drawLine(i+x1,2,i+x1,Y(i));
+ p.setPen( gray );
+ DRAWUPPER(1);
+ DRAWUPPER(3);
+ p.setPen( gray.light(130) );
+ DRAWUPPER(2);
+ p.setPen( gray.dark(120) );
+ DRAWUPPER(4);
+
+#define DRAW(i) { if ( Y(i) < y2 ) p.drawLine(i+x1,Y(i)+1,i+x1,y2); }
+ p.setPen( c );
+ DRAW(1);
+ DRAW(3);
+ p.setPen( lightc );
+ DRAW(2);
+ p.setPen(darkc);
+ DRAW(4);
+}
+
diff --git a/core/applets/batteryapplet/battery.h b/core/applets/batteryapplet/battery.h
new file mode 100644
index 0000000..d4807b0
--- a/dev/null
+++ b/core/applets/batteryapplet/battery.h
@@ -0,0 +1,55 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef BATTERY_H
+#define BATTERY_H
+
+#include <qwidget.h>
+#include <qguardedptr.h>
+
+class PowerStatus;
+class BatteryStatus;
+class QTimer;
+
+class BatteryMeter : public QWidget
+{
+ Q_OBJECT
+public:
+ BatteryMeter( QWidget *parent = 0 );
+ ~BatteryMeter();
+
+ QSize sizeHint() const;
+
+protected:
+ void timerEvent( QTimerEvent * );
+ void paintEvent( QPaintEvent* );
+ void mouseReleaseEvent( QMouseEvent * );
+
+protected slots:
+ void chargeTimeout();
+
+protected:
+ QGuardedPtr<BatteryStatus> batteryView;
+ PowerStatus *ps;
+ QTimer *chargeTimer;
+ int percent;
+ bool charging;
+};
+
+#endif
diff --git a/core/applets/batteryapplet/batteryapplet.pro b/core/applets/batteryapplet/batteryapplet.pro
new file mode 100644
index 0000000..fa0fca8
--- a/dev/null
+++ b/core/applets/batteryapplet/batteryapplet.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = battery.h batterystatus.h batteryappletimpl.h
+SOURCES = battery.cpp batterystatus.cpp batteryappletimpl.cpp
+TARGET = batteryapplet
+DESTDIR = ../../plugins/applets
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include ..
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libbatteryapplet.ts
diff --git a/core/applets/batteryapplet/batteryappletimpl.cpp b/core/applets/batteryapplet/batteryappletimpl.cpp
new file mode 100644
index 0000000..3f3079a
--- a/dev/null
+++ b/core/applets/batteryapplet/batteryappletimpl.cpp
@@ -0,0 +1,63 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "battery.h"
+#include "batteryappletimpl.h"
+
+
+BatteryAppletImpl::BatteryAppletImpl()
+ : battery(0), ref(0)
+{
+}
+
+BatteryAppletImpl::~BatteryAppletImpl()
+{
+ delete battery;
+}
+
+QWidget *BatteryAppletImpl::applet( QWidget *parent )
+{
+ if ( !battery )
+ battery = new BatteryMeter( parent );
+ return battery;
+}
+
+int BatteryAppletImpl::position() const
+{
+ return 8;
+}
+
+QRESULT BatteryAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_TaskbarApplet )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( BatteryAppletImpl )
+}
+
diff --git a/core/applets/batteryapplet/batteryappletimpl.h b/core/applets/batteryapplet/batteryappletimpl.h
new file mode 100644
index 0000000..94f49db
--- a/dev/null
+++ b/core/applets/batteryapplet/batteryappletimpl.h
@@ -0,0 +1,44 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef BATTERYAPPLETIMPL_H
+#define BATTERYAPPLETIMPL_H
+
+#include <qpe/taskbarappletinterface.h>
+
+class BatteryMeter;
+
+class BatteryAppletImpl : public TaskbarAppletInterface
+{
+public:
+ BatteryAppletImpl();
+ virtual ~BatteryAppletImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QWidget *applet( QWidget *parent );
+ virtual int position() const;
+
+private:
+ BatteryMeter *battery;
+ ulong ref;
+};
+
+#endif
diff --git a/core/applets/batteryapplet/batterystatus.cpp b/core/applets/batteryapplet/batterystatus.cpp
new file mode 100644
index 0000000..d18b6c9
--- a/dev/null
+++ b/core/applets/batteryapplet/batterystatus.cpp
@@ -0,0 +1,140 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "batterystatus.h"
+
+#include <qpe/power.h>
+
+#include <qpainter.h>
+#include <qpushbutton.h>
+#include <qdrawutil.h>
+
+
+BatteryStatus::BatteryStatus( const PowerStatus *p, QWidget *parent )
+ : QWidget( parent, 0, WDestructiveClose), ps(p)
+{
+ setCaption( tr("Battery Status") );
+ QPushButton *pb = new QPushButton( tr("Close"), this );
+ pb->move( 70, 220 );
+ pb->show();
+ connect( pb, SIGNAL( clicked() ), this, SLOT( close() ) );
+ percent = ps->batteryPercentRemaining();
+ show();
+}
+
+BatteryStatus::~BatteryStatus()
+{
+}
+
+void BatteryStatus::updatePercent( int pc )
+{
+ percent = pc;
+ repaint(FALSE);
+}
+
+void BatteryStatus::drawSegment( QPainter *p, const QRect &r, const QColor &topgrad, const QColor &botgrad, const QColor &highlight, int hightlight_height )
+{
+ int h1, h2, s1, s2, v1, v2, ng = r.height(), hy = ng*30/100, hh = hightlight_height;
+ topgrad.hsv( &h1, &s1, &v1 );
+ botgrad.hsv( &h2, &s2, &v2 );
+ for ( int j = 0; j < hy-2; j++ ) {
+ p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1),
+ v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) );
+ p->drawLine( r.x(), r.top()+hy-2-j, r.x()+r.width(), r.top()+hy-2-j );
+ }
+ for ( int j = 0; j < hh; j++ ) {
+ p->setPen( highlight );
+ p->drawLine( r.x(), r.top()+hy-2+j, r.x()+r.width(), r.top()+hy-2+j );
+ }
+ for ( int j = 0; j < ng-hy-hh; j++ ) {
+ p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1), s1 + ((s2-s1)*j)/(ng-1),
+ v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) );
+ p->drawLine( r.x(), r.top()+hy+hh-2+j, r.x()+r.width(), r.top()+hy+hh-2+j );
+ }
+}
+
+void BatteryStatus::paintEvent( QPaintEvent * )
+{
+ QPainter p(this);
+ QString text;
+ if ( ps->batteryStatus() == PowerStatus::Charging ) {
+ text = tr("Charging");
+ } else if ( ps->batteryPercentAccurate() ) {
+ text.sprintf( tr("Percentage battery remaining") + ": %i%%", percent );
+ } else {
+ text = tr("Battery status: ");
+ switch ( ps->batteryStatus() ) {
+ case PowerStatus::High:
+ text += tr("Good");
+ break;
+ case PowerStatus::Low:
+ text += tr("Low");
+ break;
+ case PowerStatus::VeryLow:
+ text += tr("Very Low");
+ break;
+ case PowerStatus::Critical:
+ text += tr("Critical");
+ break;
+ default: // NotPresent, etc.
+ text += tr("Unknown");
+ }
+ }
+ p.drawText( 10, 120, text );
+ if ( ps->acStatus() == PowerStatus::Backup )
+ p.drawText( 10, 150, tr("On backup power") );
+ else if ( ps->acStatus() == PowerStatus::Online )
+ p.drawText( 10, 150, tr("Power on-line") );
+ else if ( ps->acStatus() == PowerStatus::Offline )
+ p.drawText( 10, 150, tr("External power disconnected") );
+
+ if ( ps->batteryTimeRemaining() >= 0 ) {
+ text.sprintf( tr("Battery time remaining") + ": %im %02is",
+ ps->batteryTimeRemaining() / 60, ps->batteryTimeRemaining() % 60 );
+ p.drawText( 10, 180, text );
+ }
+
+ QColor c;
+ QColor darkc;
+ QColor lightc;
+ if ( ps->acStatus() == PowerStatus::Offline ) {
+ c = blue.light(120);
+ darkc = c.dark(280);
+ lightc = c.light(145);
+ } else if ( ps->acStatus() == PowerStatus::Online ) {
+ c = green.dark(130);
+ darkc = c.dark(200);
+ lightc = c.light(220);
+ } else {
+ c = red;
+ darkc = c.dark(280);
+ lightc = c.light(140);
+ }
+ if ( percent < 0 )
+ return;
+
+ int percent2 = percent * 2;
+ p.setPen( black );
+ qDrawShadePanel( &p, 9, 30, 204, 39, colorGroup(), TRUE, 1, NULL);
+ qDrawShadePanel( &p, 212, 37, 12, 24, colorGroup(), TRUE, 1, NULL);
+ drawSegment( &p, QRect( 10, 30, percent2, 40 ), lightc, darkc, lightc.light(115), 6 );
+ drawSegment( &p, QRect( 11 + percent2, 30, 200 - percent2, 40 ), white.light(80), black, white.light(90), 6 );
+ drawSegment( &p, QRect( 212, 37, 10, 25 ), white.light(80), black, white.light(90), 2 );
+}
+
diff --git a/core/applets/batteryapplet/batterystatus.h b/core/applets/batteryapplet/batterystatus.h
new file mode 100644
index 0000000..85b2c4d
--- a/dev/null
+++ b/core/applets/batteryapplet/batterystatus.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef BATTERY_STATUS_H
+#define BATTERY_STATUS_H
+
+#include <qwidget.h>
+
+class PowerStatus;
+
+class BatteryStatus : public QWidget
+{
+public:
+ BatteryStatus( const PowerStatus *s, QWidget *parent=0 );
+ ~BatteryStatus();
+
+ void updatePercent( int );
+
+protected:
+ void drawSegment( QPainter *p, const QRect &r, const QColor &topgrad, const QColor &botgrad, const QColor &highlight, int hightlight_height );
+ void paintEvent( QPaintEvent *pe );
+
+private:
+ const PowerStatus *ps;
+ int percent;
+};
+
+#endif
+
diff --git a/core/applets/batteryapplet/qpe-batteryapplet.control b/core/applets/batteryapplet/qpe-batteryapplet.control
new file mode 100644
index 0000000..83d0b8b
--- a/dev/null
+++ b/core/applets/batteryapplet/qpe-batteryapplet.control
@@ -0,0 +1,9 @@
+Files: plugins/applets/libbatteryapplet.so*
+Priority: optional
+Section: qpe/taskbar
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Battery Monitor applet
+ Battery Monitor applet for the Qtopia environment taskbar.
diff --git a/core/applets/batteryapplet/qpe-batteryapplet.postinst b/core/applets/batteryapplet/qpe-batteryapplet.postinst
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/batteryapplet/qpe-batteryapplet.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/batteryapplet/qpe-batteryapplet.postrm b/core/applets/batteryapplet/qpe-batteryapplet.postrm
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/batteryapplet/qpe-batteryapplet.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/clipboardapplet/Makefile.in b/core/applets/clipboardapplet/Makefile.in
new file mode 100644
index 0000000..2ddeb42
--- a/dev/null
+++ b/core/applets/clipboardapplet/Makefile.in
@@ -0,0 +1,115 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/applets/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = clipboardapplet
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = clipboard.h \
+ clipboardappletimpl.h
+SOURCES = clipboard.cpp \
+ clipboardappletimpl.cpp
+OBJECTS = clipboard.o \
+ clipboardappletimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_clipboard.cpp
+OBJMOC = moc_clipboard.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake clipboardapplet.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+clipboard.o: clipboard.cpp \
+ clipboard.h
+
+clipboardappletimpl.o: clipboardappletimpl.cpp \
+ clipboard.h \
+ clipboardappletimpl.h
+
+moc_clipboard.o: moc_clipboard.cpp \
+ clipboard.h
+
+moc_clipboard.cpp: clipboard.h
+ $(MOC) clipboard.h -o moc_clipboard.cpp
+
+
diff --git a/core/applets/clipboardapplet/clipboard.cpp b/core/applets/clipboardapplet/clipboard.cpp
new file mode 100644
index 0000000..57beffc
--- a/dev/null
+++ b/core/applets/clipboardapplet/clipboard.cpp
@@ -0,0 +1,80 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "clipboard.h"
+
+#include <qpe/resource.h>
+
+#include <qpainter.h>
+#include <qpopupmenu.h>
+#include <qwindowsystem_qws.h>
+
+
+//===========================================================================
+
+ClipboardApplet::ClipboardApplet( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ setFixedWidth( 14 );
+ clipboardPixmap = Resource::loadPixmap( "clipboard" );
+ menu = 0;
+}
+
+ClipboardApplet::~ClipboardApplet()
+{
+}
+
+void ClipboardApplet::mousePressEvent( QMouseEvent *)
+{
+ if ( !menu ) {
+ menu = new QPopupMenu(this);
+ menu->insertItem(tr("Cut"));
+ menu->insertItem(tr("Copy"));
+ menu->insertItem(tr("Paste"));
+ connect(menu, SIGNAL(selected(int)), this, SLOT(action(int)));
+ }
+ menu->popup(mapToGlobal(QPoint(0,0)));
+}
+
+void ClipboardApplet::action(int i)
+{
+ ushort unicode=0;
+ int scan=0;
+
+ if ( i == 0 )
+ { unicode='X'-'@'; scan=Key_X; } // Cut
+ else if ( i == 1 )
+ { unicode='C'-'@'; scan=Key_C; } // Copy
+ else if ( i == 2 )
+ { unicode='V'-'@'; scan=Key_V; } // Paste
+
+ if ( scan ) {
+ qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE );
+ qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE );
+ }
+}
+
+void ClipboardApplet::paintEvent( QPaintEvent* )
+{
+ QPainter p(this);
+ p.drawPixmap( 0, 1, clipboardPixmap );
+}
+
+
diff --git a/core/applets/clipboardapplet/clipboard.h b/core/applets/clipboardapplet/clipboard.h
new file mode 100644
index 0000000..9dd59ed
--- a/dev/null
+++ b/core/applets/clipboardapplet/clipboard.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __CLIPBOARD_APPLET_H__
+#define __CLIPBOARD_APPLET_H__
+
+#include <qwidget.h>
+#include <qpixmap.h>
+
+class ClipboardApplet : public QWidget
+{
+ Q_OBJECT
+public:
+ ClipboardApplet( QWidget *parent = 0, const char *name=0 );
+ ~ClipboardApplet();
+
+protected:
+ void mousePressEvent( QMouseEvent *);
+ void paintEvent( QPaintEvent* );
+
+private slots:
+ void action(int);
+
+private:
+ QPopupMenu* menu;
+ QPixmap clipboardPixmap;
+};
+
+
+#endif // __CLIPBOARD_APPLET_H__
+
diff --git a/core/applets/clipboardapplet/clipboardapplet.pro b/core/applets/clipboardapplet/clipboardapplet.pro
new file mode 100644
index 0000000..b0624ef
--- a/dev/null
+++ b/core/applets/clipboardapplet/clipboardapplet.pro
@@ -0,0 +1,10 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = clipboard.h clipboardappletimpl.h
+SOURCES = clipboard.cpp clipboardappletimpl.cpp
+TARGET = clipboardapplet
+DESTDIR = ../../plugins/applets
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include
+LIBS += -lqpe
+VERSION = 1.0.0
diff --git a/core/applets/clipboardapplet/clipboardappletimpl.cpp b/core/applets/clipboardapplet/clipboardappletimpl.cpp
new file mode 100644
index 0000000..8080690
--- a/dev/null
+++ b/core/applets/clipboardapplet/clipboardappletimpl.cpp
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "clipboard.h"
+#include "clipboardappletimpl.h"
+
+
+ClipboardAppletImpl::ClipboardAppletImpl()
+ : clipboard(0), ref(0)
+{
+}
+
+ClipboardAppletImpl::~ClipboardAppletImpl()
+{
+ delete clipboard;
+}
+
+QWidget *ClipboardAppletImpl::applet( QWidget *parent )
+{
+ if ( !clipboard )
+ clipboard = new ClipboardApplet( parent );
+ return clipboard;
+}
+
+int ClipboardAppletImpl::position() const
+{
+ return 6;
+}
+
+QRESULT ClipboardAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_TaskbarApplet )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( ClipboardAppletImpl )
+}
+
+
diff --git a/core/applets/clipboardapplet/clipboardappletimpl.h b/core/applets/clipboardapplet/clipboardappletimpl.h
new file mode 100644
index 0000000..0426109
--- a/dev/null
+++ b/core/applets/clipboardapplet/clipboardappletimpl.h
@@ -0,0 +1,44 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CLIPBOARDAPPLETIMPL_H
+#define CLIPBOARDAPPLETIMPL_H
+
+#include <qpe/taskbarappletinterface.h>
+
+class ClipboardApplet;
+
+class ClipboardAppletImpl : public TaskbarAppletInterface
+{
+public:
+ ClipboardAppletImpl();
+ virtual ~ClipboardAppletImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QWidget *applet( QWidget *parent );
+ virtual int position() const;
+
+private:
+ ClipboardApplet *clipboard;
+ ulong ref;
+};
+
+#endif
diff --git a/core/applets/clipboardapplet/qpe-clipboardapplet.control b/core/applets/clipboardapplet/qpe-clipboardapplet.control
new file mode 100644
index 0000000..26cbc55
--- a/dev/null
+++ b/core/applets/clipboardapplet/qpe-clipboardapplet.control
@@ -0,0 +1,9 @@
+Files: plugins/applets/libclipboardapplet.so*
+Priority: optional
+Section: qpe/taskbar
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Clipboard applet
+ Clipboard applet for the Qtopia environment taskbar.
diff --git a/core/applets/clipboardapplet/qpe-clipboardapplet.postinst b/core/applets/clipboardapplet/qpe-clipboardapplet.postinst
new file mode 100644
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/clipboardapplet/qpe-clipboardapplet.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/clipboardapplet/qpe-clipboardapplet.postrm b/core/applets/clipboardapplet/qpe-clipboardapplet.postrm
new file mode 100644
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/clipboardapplet/qpe-clipboardapplet.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/clockapplet/.cvsignore b/core/applets/clockapplet/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/applets/clockapplet/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/applets/clockapplet/Makefile.in b/core/applets/clockapplet/Makefile.in
new file mode 100644
index 0000000..fcf737e
--- a/dev/null
+++ b/core/applets/clockapplet/Makefile.in
@@ -0,0 +1,115 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/applets/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = clockapplet
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = clock.h \
+ clockappletimpl.h
+SOURCES = clock.cpp \
+ clockappletimpl.cpp
+OBJECTS = clock.o \
+ clockappletimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_clock.cpp
+OBJMOC = moc_clock.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake clockapplet.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+clock.o: clock.cpp \
+ clock.h
+
+clockappletimpl.o: clockappletimpl.cpp \
+ clock.h \
+ clockappletimpl.h
+
+moc_clock.o: moc_clock.cpp \
+ clock.h
+
+moc_clock.cpp: clock.h
+ $(MOC) clock.h -o moc_clock.cpp
+
+
diff --git a/core/applets/clockapplet/clock.cpp b/core/applets/clockapplet/clock.cpp
new file mode 100644
index 0000000..178dcbe
--- a/dev/null
+++ b/core/applets/clockapplet/clock.cpp
@@ -0,0 +1,97 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "clock.h"
+
+#include <qpe/global.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+
+#include <qmainwindow.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qdatetime.h>
+#include <qtimer.h>
+#include <qpopupmenu.h>
+#include <stdlib.h>
+
+
+LauncherClock::LauncherClock( QWidget *parent ) : QLabel( parent )
+{
+ // If you want a sunken border around the clock do this:
+ // setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ setFont( QFont( "Helvetica", 10, QFont::Normal ) );
+ connect( qApp, SIGNAL( timeChanged() ), this, SLOT( updateTime( ) ) );
+ connect( qApp, SIGNAL( clockChanged( bool ) ),
+ this, SLOT( slotClockChanged( bool ) ) );
+ Config config( "qpe" );
+ config.setGroup( "Time" );
+ ampmFormat = config.readBoolEntry( "AMPM", TRUE );
+ timerId = 0;
+ timerEvent( 0 );
+ show();
+}
+
+void LauncherClock::mouseReleaseEvent( QMouseEvent * )
+{
+ Global::execute( "systemtime" );
+}
+
+
+void LauncherClock::timerEvent( QTimerEvent *e )
+{
+ if ( !e || e->timerId() == timerId ) {
+ killTimer( timerId );
+ changeTime();
+ QTime t = QTime::currentTime();
+ int ms = (60 - t.second())*1000 - t.msec();
+ timerId = startTimer( ms );
+ } else {
+ QLabel::timerEvent( e );
+ }
+}
+
+void LauncherClock::updateTime( void )
+{
+ changeTime();
+}
+
+void LauncherClock::changeTime( void )
+{
+ QTime tm = QDateTime::currentDateTime().time();
+ QString s;
+ if( ampmFormat ) {
+ int hour = tm.hour();
+ if (hour == 0)
+ hour = 12;
+ if (hour > 12)
+ hour -= 12;
+ s.sprintf( "%2d%c%02d %s", hour, ':', tm.minute(), (tm.hour() >= 12) ? "PM" : "AM" );
+ } else
+ s.sprintf( "%2d%c%02d", tm.hour(), ':', tm.minute() );
+ setText( s );
+}
+
+void LauncherClock::slotClockChanged( bool pm )
+{
+ ampmFormat = pm;
+ updateTime();
+}
diff --git a/core/applets/clockapplet/clock.h b/core/applets/clockapplet/clock.h
new file mode 100644
index 0000000..9670d90
--- a/dev/null
+++ b/core/applets/clockapplet/clock.h
@@ -0,0 +1,46 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __LAUNCHER_CLOCK_H__
+#define __LAUNCHER_CLOCK_H__
+
+
+#include <qlabel.h>
+#include <qdatetime.h>
+
+class LauncherClock : public QLabel
+{
+ Q_OBJECT
+public:
+ LauncherClock( QWidget *parent );
+
+protected slots:
+ void updateTime( void );
+ void slotClockChanged( bool pm );
+
+protected:
+ void mouseReleaseEvent( QMouseEvent * );
+ void timerEvent( QTimerEvent * );
+ void changeTime( void );
+ bool ampmFormat;
+ int timerId;
+};
+
+
+#endif // __LAUNCHER_CLOCK_H__
diff --git a/core/applets/clockapplet/clockapplet.pro b/core/applets/clockapplet/clockapplet.pro
new file mode 100644
index 0000000..29a4e8b
--- a/dev/null
+++ b/core/applets/clockapplet/clockapplet.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = clock.h clockappletimpl.h
+SOURCES = clock.cpp clockappletimpl.cpp
+TARGET = clockapplet
+DESTDIR = ../../plugins/applets
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include ..
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libclockapplet.ts
diff --git a/core/applets/clockapplet/clockappletimpl.cpp b/core/applets/clockapplet/clockappletimpl.cpp
new file mode 100644
index 0000000..8bf1baf
--- a/dev/null
+++ b/core/applets/clockapplet/clockappletimpl.cpp
@@ -0,0 +1,65 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "clock.h"
+#include "clockappletimpl.h"
+
+
+ClockAppletImpl::ClockAppletImpl()
+ : clock(0), ref(0)
+{
+}
+
+ClockAppletImpl::~ClockAppletImpl()
+{
+ delete clock;
+}
+
+QWidget *ClockAppletImpl::applet( QWidget *parent )
+{
+ if ( !clock )
+ clock = new LauncherClock( parent );
+ return clock;
+}
+
+int ClockAppletImpl::position() const
+{
+ return 10;
+}
+
+#ifndef QT_NO_COMPONENT
+QRESULT ClockAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_TaskbarApplet )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( ClockAppletImpl )
+}
+#endif
+
diff --git a/core/applets/clockapplet/clockappletimpl.h b/core/applets/clockapplet/clockappletimpl.h
new file mode 100644
index 0000000..0c0912e
--- a/dev/null
+++ b/core/applets/clockapplet/clockappletimpl.h
@@ -0,0 +1,46 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CLOCKAPPLETIMPL_H
+#define CLOCKAPPLETIMPL_H
+
+#include <qpe/taskbarappletinterface.h>
+
+class LauncherClock;
+
+class ClockAppletImpl : public TaskbarAppletInterface
+{
+public:
+ ClockAppletImpl();
+ virtual ~ClockAppletImpl();
+
+#ifndef QT_NO_COMPONENT
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+#endif
+
+ virtual QWidget *applet( QWidget *parent );
+ virtual int position() const;
+
+private:
+ LauncherClock *clock;
+ ulong ref;
+};
+
+#endif
diff --git a/core/applets/clockapplet/qpe-clockapplet.control b/core/applets/clockapplet/qpe-clockapplet.control
new file mode 100644
index 0000000..9532ca8
--- a/dev/null
+++ b/core/applets/clockapplet/qpe-clockapplet.control
@@ -0,0 +1,9 @@
+Files: plugins/applets/libclockapplet.so*
+Priority: optional
+Section: qpe/taskbar
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Clock applet
+ Clock applet for the Qtopia environment taskbar.
diff --git a/core/applets/clockapplet/qpe-clockapplet.postinst b/core/applets/clockapplet/qpe-clockapplet.postinst
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/clockapplet/qpe-clockapplet.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/clockapplet/qpe-clockapplet.postrm b/core/applets/clockapplet/qpe-clockapplet.postrm
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/clockapplet/qpe-clockapplet.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/volumeapplet/.cvsignore b/core/applets/volumeapplet/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/applets/volumeapplet/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/applets/volumeapplet/Makefile.in b/core/applets/volumeapplet/Makefile.in
new file mode 100644
index 0000000..7020cb7
--- a/dev/null
+++ b/core/applets/volumeapplet/Makefile.in
@@ -0,0 +1,115 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/applets/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = volumeapplet
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = volume.h \
+ volumeappletimpl.h
+SOURCES = volume.cpp \
+ volumeappletimpl.cpp
+OBJECTS = volume.o \
+ volumeappletimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_volume.cpp
+OBJMOC = moc_volume.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake volumeapplet.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+volume.o: volume.cpp \
+ volume.h
+
+volumeappletimpl.o: volumeappletimpl.cpp \
+ volume.h \
+ volumeappletimpl.h
+
+moc_volume.o: moc_volume.cpp \
+ volume.h
+
+moc_volume.cpp: volume.h
+ $(MOC) volume.h -o moc_volume.cpp
+
+
diff --git a/core/applets/volumeapplet/qpe-volumeapplet.control b/core/applets/volumeapplet/qpe-volumeapplet.control
new file mode 100644
index 0000000..a80262a
--- a/dev/null
+++ b/core/applets/volumeapplet/qpe-volumeapplet.control
@@ -0,0 +1,9 @@
+Files: plugins/applets/libvolumeapplet.so*
+Priority: optional
+Section: qpe/taskbar
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Volume applet
+ Volume applet for the Qtopia environment taskbar.
diff --git a/core/applets/volumeapplet/qpe-volumeapplet.postinst b/core/applets/volumeapplet/qpe-volumeapplet.postinst
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/volumeapplet/qpe-volumeapplet.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/volumeapplet/qpe-volumeapplet.postrm b/core/applets/volumeapplet/qpe-volumeapplet.postrm
new file mode 100755
index 0000000..ba76ffa
--- a/dev/null
+++ b/core/applets/volumeapplet/qpe-volumeapplet.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadApplets()"
diff --git a/core/applets/volumeapplet/volume.cpp b/core/applets/volumeapplet/volume.cpp
new file mode 100644
index 0000000..35dbf22
--- a/dev/null
+++ b/core/applets/volumeapplet/volume.cpp
@@ -0,0 +1,199 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "volume.h"
+
+#include <qpe/resource.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+#include <qpe/qcopenvelope_qws.h>
+#endif
+
+#include <qpainter.h>
+#include <qcheckbox.h>
+#include <qslider.h>
+#include <qlayout.h>
+#include <qframe.h>
+#include <qpixmap.h>
+
+
+VolumeControl::VolumeControl( QWidget *parent, const char *name )
+ : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup )
+{
+ setFrameStyle( QFrame::PopupPanel | QFrame::Raised );
+
+ QVBoxLayout *vbox = new QVBoxLayout( this );
+ slider = new QSlider( this );
+ muteBox = new QCheckBox( tr("Mute"), this );
+ slider->setRange( 0, 100 );
+ slider->setTickmarks( QSlider::Both );
+ slider->setTickInterval( 20 );
+ slider->setFocusPolicy( QWidget::NoFocus );
+ muteBox->setFocusPolicy( QWidget::NoFocus );
+ vbox->setMargin( 6 );
+ vbox->setSpacing( 3 );
+ vbox->addWidget( slider, 0, Qt::AlignVCenter | Qt::AlignHCenter );
+ vbox->addWidget( muteBox );
+ setFixedHeight( 100 );
+ setFixedWidth( sizeHint().width() );
+ setFocusPolicy(QWidget::NoFocus);
+}
+
+void VolumeControl::keyPressEvent( QKeyEvent *e)
+{
+ switch(e->key()) {
+ case Key_Up:
+ slider->subtractStep();
+ break;
+ case Key_Down:
+ slider->addStep();
+ break;
+ case Key_Space:
+ muteBox->toggle();
+ break;
+ case Key_Escape:
+ close();
+ break;
+ }
+}
+
+//===========================================================================
+
+VolumeApplet::VolumeApplet( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ setFixedHeight( 18 );
+ setFixedWidth( 14 );
+ volumePixmap = Resource::loadPixmap( "volume" );
+ muted = FALSE; // ### read from pref
+ volumePercent = 50; // ### read from pref
+ connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) );
+ writeSystemVolume();
+}
+
+VolumeApplet::~VolumeApplet()
+{
+}
+
+void VolumeApplet::mousePressEvent( QMouseEvent *)
+{
+ // Create a small volume control window to adjust the volume with
+ VolumeControl *vc = new VolumeControl;
+ vc->slider->setValue( 100 - volumePercent );
+ vc->muteBox->setChecked( muted );
+ connect( vc->slider, SIGNAL( valueChanged( int ) ), this, SLOT( sliderMoved( int ) ) );
+ connect( vc->muteBox, SIGNAL( toggled( bool ) ), this, SLOT( mute( bool ) ) );
+ QPoint curPos = mapToGlobal( rect().topLeft() );
+ vc->move( curPos.x()-(vc->sizeHint().width()-width())/2, curPos.y() - 100 );
+ vc->show();
+}
+
+void VolumeApplet::volumeChanged( bool nowMuted )
+{
+ int previousVolume = volumePercent;
+
+ if ( !nowMuted )
+ readSystemVolume();
+
+ // Handle case where muting it toggled
+ if ( muted != nowMuted ) {
+ muted = nowMuted;
+ repaint( TRUE );
+ return;
+ }
+
+ // Avoid over repainting
+ if ( previousVolume != volumePercent )
+ repaint( 2, height() - 3, width() - 4, 2, FALSE );
+}
+
+
+void VolumeApplet::mute( bool toggled )
+{
+ muted = toggled;
+ // clear if removing mute
+ repaint( !toggled );
+ writeSystemVolume();
+}
+
+
+void VolumeApplet::sliderMoved( int percent )
+{
+ setVolume( 100 - percent );
+}
+
+
+void VolumeApplet::readSystemVolume()
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ volumePercent = cfg.readNumEntry("Volume");
+}
+
+
+void VolumeApplet::setVolume( int percent )
+{
+ // clamp volume percent to be between 0 and 100
+ volumePercent = (percent < 0) ? 0 : ((percent > 100) ? 100 : percent);
+ // repaint just the little volume rectangle
+ repaint( 2, height() - 3, width() - 4, 2, FALSE );
+ writeSystemVolume();
+}
+
+
+void VolumeApplet::writeSystemVolume()
+{
+ {
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ cfg.writeEntry("Volume",volumePercent);
+ }
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+ // Send notification that the volume has changed
+ QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << muted;
+#endif
+}
+
+
+void VolumeApplet::paintEvent( QPaintEvent* )
+{
+ QPainter p(this);
+
+ if (volumePixmap.isNull())
+ volumePixmap = Resource::loadPixmap( "volume" );
+ p.drawPixmap( 0, 1, volumePixmap );
+ p.setPen( darkGray );
+ p.drawRect( 1, height() - 4, width() - 2, 4 );
+
+ int pixelsWide = volumePercent * (width() - 4) / 100;
+ p.fillRect( 2, height() - 3, pixelsWide, 2, red );
+ p.fillRect( pixelsWide + 2, height() - 3, width() - 4 - pixelsWide, 2, lightGray );
+
+ if ( muted ) {
+ p.setPen( red );
+ p.drawLine( 1, 2, width() - 2, height() - 5 );
+ p.drawLine( 1, 3, width() - 2, height() - 4 );
+ p.drawLine( width() - 2, 2, 1, height() - 5 );
+ p.drawLine( width() - 2, 3, 1, height() - 4 );
+ }
+}
+
+
diff --git a/core/applets/volumeapplet/volume.h b/core/applets/volumeapplet/volume.h
new file mode 100644
index 0000000..5704cad
--- a/dev/null
+++ b/core/applets/volumeapplet/volume.h
@@ -0,0 +1,75 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __VOLUME_APPLET_H__
+#define __VOLUME_APPLET_H__
+
+
+#include <qwidget.h>
+#include <qframe.h>
+#include <qpixmap.h>
+#include <qguardedptr.h>
+
+class QSlider;
+class QCheckBox;
+
+class VolumeControl : public QFrame
+{
+ Q_OBJECT
+public:
+ VolumeControl( QWidget *parent=0, const char *name=0 );
+
+public:
+ QSlider *slider;
+ QCheckBox *muteBox;
+
+private:
+ void keyPressEvent( QKeyEvent * );
+};
+
+class VolumeApplet : public QWidget
+{
+ Q_OBJECT
+public:
+ VolumeApplet( QWidget *parent = 0, const char *name=0 );
+ ~VolumeApplet();
+ bool isMute( ) { return muted; }
+ int percent( ) { return volumePercent; }
+
+public slots:
+ void volumeChanged( bool muted );
+ void setVolume( int percent );
+ void sliderMoved( int percent );
+ void mute( bool );
+
+private:
+ void readSystemVolume();
+ void writeSystemVolume();
+ void mousePressEvent( QMouseEvent * );
+ void paintEvent( QPaintEvent* );
+
+private:
+ int volumePercent;
+ bool muted;
+ QPixmap volumePixmap;
+};
+
+
+#endif // __VOLUME_APPLET_H__
+
diff --git a/core/applets/volumeapplet/volumeapplet.pro b/core/applets/volumeapplet/volumeapplet.pro
new file mode 100644
index 0000000..a33cf81
--- a/dev/null
+++ b/core/applets/volumeapplet/volumeapplet.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = volume.h volumeappletimpl.h
+SOURCES = volume.cpp volumeappletimpl.cpp
+TARGET = volumeapplet
+DESTDIR = ../../plugins/applets
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libvolumeapplet.ts
diff --git a/core/applets/volumeapplet/volumeappletimpl.cpp b/core/applets/volumeapplet/volumeappletimpl.cpp
new file mode 100644
index 0000000..676ab61
--- a/dev/null
+++ b/core/applets/volumeapplet/volumeappletimpl.cpp
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "volume.h"
+#include "volumeappletimpl.h"
+
+
+VolumeAppletImpl::VolumeAppletImpl()
+ : volume(0), ref(0)
+{
+}
+
+VolumeAppletImpl::~VolumeAppletImpl()
+{
+ delete volume;
+}
+
+QWidget *VolumeAppletImpl::applet( QWidget *parent )
+{
+ if ( !volume )
+ volume = new VolumeApplet( parent );
+ return volume;
+}
+
+int VolumeAppletImpl::position() const
+{
+ return 6;
+}
+
+QRESULT VolumeAppletImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_TaskbarApplet )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( VolumeAppletImpl )
+}
+
+
diff --git a/core/applets/volumeapplet/volumeappletimpl.h b/core/applets/volumeapplet/volumeappletimpl.h
new file mode 100644
index 0000000..9b2952a
--- a/dev/null
+++ b/core/applets/volumeapplet/volumeappletimpl.h
@@ -0,0 +1,44 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef VOLUMEAPPLETIMPL_H
+#define VOLUMEAPPLETIMPL_H
+
+#include <qpe/taskbarappletinterface.h>
+
+class VolumeApplet;
+
+class VolumeAppletImpl : public TaskbarAppletInterface
+{
+public:
+ VolumeAppletImpl();
+ virtual ~VolumeAppletImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QWidget *applet( QWidget *parent );
+ virtual int position() const;
+
+private:
+ VolumeApplet *volume;
+ ulong ref;
+};
+
+#endif
diff --git a/core/apps/calibrate/.cvsignore b/core/apps/calibrate/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/apps/calibrate/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/apps/calibrate/calibrate.cpp b/core/apps/calibrate/calibrate.cpp
new file mode 100644
index 0000000..96cd1ca
--- a/dev/null
+++ b/core/apps/calibrate/calibrate.cpp
@@ -0,0 +1,243 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "calibrate.h"
+
+#include <qpe/resource.h>
+
+#include <qapplication.h>
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+
+#include <qpainter.h>
+#include <qtimer.h>
+#include <qwindowsystem_qws.h>
+#include <qgfx_qws.h>
+
+
+Calibrate::Calibrate(QWidget* parent, const char * name, WFlags wf) :
+ QDialog( parent, name, TRUE, wf | WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop )
+{
+ showCross = TRUE;
+ const int offset = 30;
+ QRect desk = qApp->desktop()->geometry();
+ setGeometry( 0, 0, desk.width(), desk.height() );
+ if ( desk.height() < 250 ) {
+ int w = desk.height()/3;
+ logo.convertFromImage(Resource::loadImage("qtlogo").smoothScale(w,w));
+ } else {
+ logo = Resource::loadPixmap( "qtlogo" );
+ }
+ cd.screenPoints[QWSPointerCalibrationData::TopLeft] = QPoint( offset, offset );
+ cd.screenPoints[QWSPointerCalibrationData::BottomLeft] = QPoint( offset, qt_screen->deviceHeight() - offset );
+ cd.screenPoints[QWSPointerCalibrationData::BottomRight] = QPoint( qt_screen->deviceWidth() - offset, qt_screen->deviceHeight() - offset );
+ cd.screenPoints[QWSPointerCalibrationData::TopRight] = QPoint( qt_screen->deviceWidth() - offset, offset );
+ cd.screenPoints[QWSPointerCalibrationData::Center] = QPoint( qt_screen->deviceWidth()/2, qt_screen->deviceHeight()/2 );
+ goodcd = cd;
+ reset();
+
+ timer = new QTimer( this );
+ connect( timer, SIGNAL(timeout()), this, SLOT(timeout()) );
+}
+
+Calibrate::~Calibrate()
+{
+ store();
+}
+
+void Calibrate::show()
+{
+ grabMouse();
+ QWSServer::mouseHandler()->getCalibration(&goodcd);
+ QWSServer::mouseHandler()->clearCalibration();
+ QDialog::show();
+}
+
+void Calibrate::store()
+{
+ QWSServer::mouseHandler()->calibrate( &goodcd );
+}
+
+void Calibrate::hide()
+{
+ if ( isVisible() )
+ store();
+ QDialog::hide();
+}
+
+void Calibrate::reset()
+{
+ penPos = QPoint();
+ location = QWSPointerCalibrationData::TopLeft;
+ crossPos = fromDevice( cd.screenPoints[location] );
+}
+
+QPoint Calibrate::fromDevice( const QPoint &p )
+{
+ return qt_screen->mapFromDevice( p,
+ QSize(qt_screen->deviceWidth(), qt_screen->deviceHeight()) );
+}
+
+bool Calibrate::sanityCheck()
+{
+ QPoint tl = cd.devPoints[QWSPointerCalibrationData::TopLeft];
+ QPoint tr = cd.devPoints[QWSPointerCalibrationData::TopRight];
+ QPoint bl = cd.devPoints[QWSPointerCalibrationData::BottomLeft];
+ QPoint br = cd.devPoints[QWSPointerCalibrationData::BottomRight];
+
+ int vl = QABS( tl.y() - bl.y() );
+ int vr = QABS( tr.y() - br.y() );
+ int diff = QABS( vl - vr );
+ int avg = ( vl + vr ) / 2;
+ if ( diff > avg / 20 ) // 5% leeway
+ return FALSE;
+
+ int ht = QABS( tl.x() - tr.x() );
+ int hb = QABS( br.x() - bl.x() );
+ diff = QABS( ht - hb );
+ avg = ( ht + hb ) / 2;
+ if ( diff > avg / 20 ) // 5% leeway
+ return FALSE;
+
+ return TRUE;
+}
+
+void Calibrate::moveCrosshair( QPoint pt )
+{
+/*
+ QPainter p( this );
+ p.drawPixmap( crossPos.x()-8, crossPos.y()-8, saveUnder );
+ saveUnder = QPixmap::grabWindow( winId(), pt.x()-8, pt.y()-8, 16, 16 );
+ p.drawRect( pt.x()-1, pt.y()-8, 2, 7 );
+ p.drawRect( pt.x()-1, pt.y()+1, 2, 7 );
+ p.drawRect( pt.x()-8, pt.y()-1, 7, 2 );
+ p.drawRect( pt.x()+1, pt.y()-1, 7, 2 );
+*/
+ showCross = FALSE;
+ repaint( crossPos.x()-8, crossPos.y()-8, 16, 16 );
+ showCross = TRUE;
+ crossPos = pt;
+ repaint( crossPos.x()-8, crossPos.y()-8, 16, 16 );
+}
+
+void Calibrate::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+
+ int y;
+
+ if ( !logo.isNull() ) {
+ y = height() / 2 - logo.height() - 15;
+ p.drawPixmap( (width() - logo.width())/2, y, logo );
+ }
+
+ y = height() / 2 + 15;
+
+ p.drawText( 0, y+height()/8, width(), height() - y, AlignHCenter,
+ tr("Touch the crosshairs firmly and\n"
+ "accurately to calibrate your screen.") );
+
+ QFont f = p.font(); f.setBold(TRUE);
+ p.setFont( f );
+ p.drawText( 0, y, width(), height() - y, AlignHCenter|WordBreak,
+ tr("Welcome to Qtopia") );
+
+/*
+ saveUnder = QPixmap::grabWindow( winId(), crossPos.x()-8, crossPos.y()-8,
+ 16, 16 );
+ moveCrosshair( crossPos );
+*/
+ if ( showCross ) {
+ p.drawRect( crossPos.x()-1, crossPos.y()-8, 2, 7 );
+ p.drawRect( crossPos.x()-1, crossPos.y()+1, 2, 7 );
+ p.drawRect( crossPos.x()-8, crossPos.y()-1, 7, 2 );
+ p.drawRect( crossPos.x()+1, crossPos.y()-1, 7, 2 );
+ }
+}
+
+void Calibrate::mousePressEvent( QMouseEvent *e )
+{
+ // map to device coordinates
+ QPoint devPos = qt_screen->mapToDevice( e->pos(),
+ QSize(qt_screen->width(), qt_screen->height()) );
+ if ( penPos.isNull() )
+ penPos = devPos;
+ else
+ penPos = QPoint( (penPos.x() + devPos.x())/2,
+ (penPos.y() + devPos.y())/2 );
+}
+
+void Calibrate::mouseReleaseEvent( QMouseEvent * )
+{
+ if ( timer->isActive() )
+ return;
+
+ bool doMove = TRUE;
+
+ cd.devPoints[location] = penPos;
+ if ( location < QWSPointerCalibrationData::LastLocation ) {
+ location = (QWSPointerCalibrationData::Location)((int)location + 1);
+ } else {
+ if ( sanityCheck() ) {
+ reset();
+ goodcd = cd;
+ hide();
+ emit accept();
+ doMove = FALSE;
+ } else {
+ location = QWSPointerCalibrationData::TopLeft;
+ }
+ }
+
+ if ( doMove ) {
+ QPoint target = fromDevice( cd.screenPoints[location] );
+ dx = (target.x() - crossPos.x())/10;
+ dy = (target.y() - crossPos.y())/10;
+ timer->start( 30 );
+ }
+}
+
+void Calibrate::timeout()
+{
+ QPoint target = fromDevice( cd.screenPoints[location] );
+
+ bool doneX = FALSE;
+ bool doneY = FALSE;
+ QPoint newPos( crossPos.x() + dx, crossPos.y() + dy );
+
+ if ( QABS(crossPos.x() - target.x()) <= QABS(dx) ) {
+ newPos.setX( target.x() );
+ doneX = TRUE;
+ }
+
+ if ( QABS(crossPos.y() - target.y()) <= QABS(dy) ) {
+ newPos.setY(target.y());
+ doneY = TRUE;
+ }
+
+ if ( doneX && doneY ) {
+ penPos = QPoint();
+ timer->stop();
+ }
+
+ moveCrosshair( newPos );
+}
+
+#endif // _WS_QWS_
diff --git a/core/apps/calibrate/calibrate.h b/core/apps/calibrate/calibrate.h
new file mode 100644
index 0000000..97108c9
--- a/dev/null
+++ b/core/apps/calibrate/calibrate.h
@@ -0,0 +1,67 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qwsmouse_qws.h>
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+
+#include <qdialog.h>
+#include <qpixmap.h>
+
+class QTimer;
+
+class Calibrate : public QDialog
+{
+ Q_OBJECT
+public:
+ Calibrate(QWidget* parent=0, const char * name=0, WFlags=0);
+ ~Calibrate();
+
+ void show();
+ void hide();
+
+private:
+ QPoint fromDevice( const QPoint &p );
+ bool sanityCheck();
+ void moveCrosshair( QPoint pt );
+ void paintEvent( QPaintEvent * );
+ void mousePressEvent( QMouseEvent * );
+ void mouseReleaseEvent( QMouseEvent * );
+
+private slots:
+ void timeout();
+
+private:
+ void store();
+ void reset();
+ QPixmap logo;
+ QWSPointerCalibrationData goodcd,cd;
+ QWSPointerCalibrationData::Location location;
+ QPoint crossPos;
+ QPoint penPos;
+ QPixmap saveUnder;
+ QTimer *timer;
+ int dx;
+ int dy;
+ bool showCross;
+};
+
+#endif // _WS_QWS_
+
diff --git a/core/apps/calibrate/calibrate.pro b/core/apps/calibrate/calibrate.pro
new file mode 100644
index 0000000..9769ea6
--- a/dev/null
+++ b/core/apps/calibrate/calibrate.pro
@@ -0,0 +1 @@
+# This is part of the taskbar
diff --git a/core/apps/embeddedkonsole/.cvsignore b/core/apps/embeddedkonsole/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/core/apps/embeddedkonsole/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/core/apps/embeddedkonsole/Makefile.in b/core/apps/embeddedkonsole/Makefile.in
new file mode 100644
index 0000000..b858cd4
--- a/dev/null
+++ b/core/apps/embeddedkonsole/Makefile.in
@@ -0,0 +1,285 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = embeddedkonsole
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = TEWidget.h \
+ TEScreen.h \
+ TECommon.h \
+ TEHistory.h \
+ TEmulation.h \
+ TEmuVt102.h \
+ session.h \
+ keytrans.h \
+ konsole.h \
+ MyPty.h
+SOURCES = TEScreen.cpp \
+ TEWidget.cpp \
+ TEHistory.cpp \
+ TEmulation.cpp \
+ TEmuVt102.cpp \
+ session.cpp \
+ keytrans.cpp \
+ konsole.cpp \
+ main.cpp \
+ MyPty.cpp
+OBJECTS = TEScreen.o \
+ TEWidget.o \
+ TEHistory.o \
+ TEmulation.o \
+ TEmuVt102.o \
+ session.o \
+ keytrans.o \
+ konsole.o \
+ main.o \
+ MyPty.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_TEWidget.cpp \
+ moc_TEmulation.cpp \
+ moc_TEmuVt102.cpp \
+ moc_session.cpp \
+ moc_konsole.cpp \
+ moc_MyPty.cpp
+OBJMOC = moc_TEWidget.o \
+ moc_TEmulation.o \
+ moc_TEmuVt102.o \
+ moc_session.o \
+ moc_konsole.o \
+ moc_MyPty.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake embeddedkonsole.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=embeddedkonsole
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+TEScreen.o: TEScreen.cpp \
+ TEScreen.h \
+ TECommon.h \
+ TEHistory.h
+
+TEWidget.o: TEWidget.cpp \
+ TEWidget.h \
+ TECommon.h \
+ session.h \
+ MyPty.h \
+ TEmuVt102.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h
+
+TEHistory.o: TEHistory.cpp \
+ TEHistory.h \
+ TECommon.h
+
+TEmulation.o: TEmulation.cpp \
+ TEmulation.h \
+ TEWidget.h \
+ TECommon.h \
+ TEScreen.h \
+ TEHistory.h \
+ keytrans.h
+
+TEmuVt102.o: TEmuVt102.cpp \
+ TEmuVt102.h \
+ TEWidget.h \
+ TECommon.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h
+
+session.o: session.cpp \
+ session.h \
+ MyPty.h \
+ TEWidget.h \
+ TECommon.h \
+ TEmuVt102.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h
+
+keytrans.o: keytrans.cpp \
+ keytrans.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ default.keytab.h
+
+konsole.o: konsole.cpp \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ konsole.h \
+ MyPty.h \
+ TEWidget.h \
+ TECommon.h \
+ TEmuVt102.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h \
+ session.h
+
+main.o: main.cpp \
+ konsole.h \
+ MyPty.h \
+ TEWidget.h \
+ TECommon.h \
+ TEmuVt102.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h \
+ session.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+MyPty.o: MyPty.cpp \
+ MyPty.h
+
+moc_TEWidget.o: moc_TEWidget.cpp \
+ TEWidget.h \
+ TECommon.h
+
+moc_TEmulation.o: moc_TEmulation.cpp \
+ TEmulation.h \
+ TEWidget.h \
+ TECommon.h \
+ TEScreen.h \
+ TEHistory.h \
+ keytrans.h
+
+moc_TEmuVt102.o: moc_TEmuVt102.cpp \
+ TEmuVt102.h \
+ TEWidget.h \
+ TECommon.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h
+
+moc_session.o: moc_session.cpp \
+ session.h \
+ MyPty.h \
+ TEWidget.h \
+ TECommon.h \
+ TEmuVt102.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h
+
+moc_konsole.o: moc_konsole.cpp \
+ konsole.h \
+ MyPty.h \
+ TEWidget.h \
+ TECommon.h \
+ TEmuVt102.h \
+ TEScreen.h \
+ TEHistory.h \
+ TEmulation.h \
+ keytrans.h \
+ session.h
+
+moc_MyPty.o: moc_MyPty.cpp \
+ MyPty.h
+
+moc_TEWidget.cpp: TEWidget.h
+ $(MOC) TEWidget.h -o moc_TEWidget.cpp
+
+moc_TEmulation.cpp: TEmulation.h
+ $(MOC) TEmulation.h -o moc_TEmulation.cpp
+
+moc_TEmuVt102.cpp: TEmuVt102.h
+ $(MOC) TEmuVt102.h -o moc_TEmuVt102.cpp
+
+moc_session.cpp: session.h
+ $(MOC) session.h -o moc_session.cpp
+
+moc_konsole.cpp: konsole.h
+ $(MOC) konsole.h -o moc_konsole.cpp
+
+moc_MyPty.cpp: MyPty.h
+ $(MOC) MyPty.h -o moc_MyPty.cpp
+
+
diff --git a/core/apps/embeddedkonsole/MyPty.cpp b/core/apps/embeddedkonsole/MyPty.cpp
new file mode 100644
index 0000000..3622d48
--- a/dev/null
+++ b/core/apps/embeddedkonsole/MyPty.cpp
@@ -0,0 +1,279 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [MyPty.C] Pseudo Terminal Device */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/* If you're compiling konsole on non-Linux platforms and find
+ problems that you can track down to this file, please have
+ a look into ../README.ports, too.
+*/
+
+/*! \file
+*/
+
+/*! \class TEPty
+
+ \brief Ptys provide a pseudo terminal connection to a program.
+
+ Although closely related to pipes, these pseudo terminal connections have
+ some ability, that makes it nessesary to uses them. Most importent, they
+ know about changing screen sizes and UNIX job control.
+
+ Within the terminal emulation framework, this class represents the
+ host side of the terminal together with the connecting serial line.
+
+ One can create many instances of this class within a program.
+ As a side effect of using this class, a signal(2) handler is
+ installed on SIGCHLD.
+
+ \par FIXME
+
+ [NOTE: much of the technical stuff below will be replaced by forkpty.]
+
+ publish the SIGCHLD signal if not related to an instance.
+
+ clearify TEPty::done vs. TEPty::~TEPty semantics.
+ check if pty is restartable via run after done.
+
+ \par Pseudo terminals
+
+ Pseudo terminals are a unique feature of UNIX, and always come in form of
+ pairs of devices (/dev/ptyXX and /dev/ttyXX), which are connected to each
+ other by the operating system. One may think of them as two serial devices
+ linked by a null-modem cable. Being based on devices the number of
+ simultanous instances of this class is (globally) limited by the number of
+ those device pairs, which is 256.
+
+ Another technic are UNIX 98 PTY's. These are supported also, and prefered
+ over the (obsolete) predecessor.
+
+ There's a sinister ioctl(2), signal(2) and job control stuff
+ nessesary to make everything work as it should.
+*/
+
+
+#include <qapplication.h>
+#include <qsocketnotifier.h>
+#include <qstring.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <termios.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/wait.h>
+
+#ifdef HAVE_OPENPTY
+#include <pty.h>
+#endif
+
+#include "MyPty.h"
+
+
+#undef VERBOSE_DEBUG
+
+
+/* -------------------------------------------------------------------------- */
+
+/*!
+ Informs the client program about the
+ actual size of the window.
+*/
+
+void MyPty::setSize(int lines, int columns)
+{
+ struct winsize wsize;
+ wsize.ws_row = (unsigned short)lines;
+ wsize.ws_col = (unsigned short)columns;
+ if(fd < 0) return;
+ ioctl(fd,TIOCSWINSZ,(char *)&wsize);
+}
+
+
+void MyPty::donePty()
+{
+ // This is code from the Qt DumbTerminal example
+ int status = 0;
+
+ ::close(fd);
+
+ if (cpid) {
+ kill(cpid, SIGHUP);
+ waitpid(cpid, &status, 0);
+ }
+
+ emit done(status);
+}
+
+
+const char* MyPty::deviceName()
+{
+ return ttynam;
+}
+
+
+void MyPty::error()
+{
+ // This is code from the Qt DumbTerminal example
+ donePty();
+}
+
+
+/*!
+ start the client program.
+*/
+int MyPty::run(const char* cmd, QStrList &, const char*, int)
+{
+ // This is code from the Qt DumbTerminal example
+ cpid = fork();
+
+ if ( !cpid ) {
+ // child - exec shell on tty
+ for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL);
+ int ttyfd = open(ttynam, O_RDWR);
+ dup2(ttyfd, STDIN_FILENO);
+ dup2(ttyfd, STDOUT_FILENO);
+ dup2(ttyfd, STDERR_FILENO);
+ // should be done with tty, so close it
+ close(ttyfd);
+ static struct termios ttmode;
+ if ( setsid() < 0 )
+ perror( "failed to set process group" );
+#if defined (TIOCSCTTY)
+ // grabbed from APUE by Stevens
+ ioctl(STDIN_FILENO, TIOCSCTTY, 0);
+#endif
+ tcgetattr( STDIN_FILENO, &ttmode );
+ ttmode.c_cc[VINTR] = 3;
+ ttmode.c_cc[VERASE] = 8;
+ tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
+ setenv("TERM","vt100",1);
+ setenv("COLORTERM","0",1);
+
+ if (getuid() == 0) {
+ char msg[] = "WARNING: You are running this shell as root!\n";
+ write(ttyfd, msg, sizeof(msg));
+ }
+ execl(cmd, cmd, 0);
+
+ donePty();
+ exit(-1);
+ }
+
+ // parent - continue as a widget
+ QSocketNotifier* sn_r = new QSocketNotifier(fd,QSocketNotifier::Read,this);
+ QSocketNotifier* sn_e = new QSocketNotifier(fd,QSocketNotifier::Exception,this);
+ connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty()));
+ connect(sn_e,SIGNAL(activated(int)),this,SLOT(error()));
+
+ return 0;
+}
+
+int MyPty::openPty()
+{
+ // This is code from the Qt DumbTerminal example
+ int ptyfd = -1;
+
+#ifdef HAVE_OPENPTY
+ int ttyfd;
+ if ( openpty(&ptyfd,&ttyfd,ttynam,0,0) )
+ ptyfd = -1;
+ else
+ close(ttyfd); // we open the ttynam ourselves.
+#else
+ for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) {
+ for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) {
+ sprintf(ptynam,"/dev/pty%c%c",*c0,*c1);
+ sprintf(ttynam,"/dev/tty%c%c",*c0,*c1);
+ if ((ptyfd = ::open(ptynam,O_RDWR)) >= 0) {
+ if (geteuid() != 0 && !access(ttynam,R_OK|W_OK) == 0) {
+ ::close(ptyfd);
+ ptyfd = -1;
+ }
+ }
+ }
+ }
+#endif
+
+ if ( ptyfd < 0 ) {
+ qApp->exit(1);
+ return -1;
+ }
+
+ return ptyfd;
+}
+
+/*!
+ Create an instance.
+*/
+MyPty::MyPty() : cpid(0)
+{
+ fd = openPty();
+}
+
+/*!
+ Destructor.
+ Note that the related client program is not killed
+ (yet) when a instance is deleted.
+*/
+MyPty::~MyPty()
+{
+ donePty();
+}
+
+
+/*! sends len bytes through the line */
+void MyPty::send_bytes(const char* s, int len)
+{
+
+#ifdef VERBOSE_DEBUG
+ // verbose debug
+ printf("sending bytes:\n");
+ for (int i = 0; i < len; i++)
+ printf("%c", s[i]);
+ printf("\n");
+#endif
+
+ ::write(fd, s, len);
+}
+
+/*! indicates that a block of data is received */
+void MyPty::readPty()
+{
+ char buf[4096];
+
+ int len = ::read( fd, buf, 4096 );
+
+ if (len == -1)
+ donePty();
+
+ if (len < 0)
+ return;
+
+ emit block_in(buf,len);
+
+#ifdef VERBOSE_DEBUG
+ // verbose debug
+ printf("read bytes:\n");
+ for (int i = 0; i < len; i++)
+ printf("%c", buf[i]);
+ printf("\n");
+#endif
+
+}
+
diff --git a/core/apps/embeddedkonsole/MyPty.h b/core/apps/embeddedkonsole/MyPty.h
new file mode 100644
index 0000000..b2a5b58
--- a/dev/null
+++ b/core/apps/embeddedkonsole/MyPty.h
@@ -0,0 +1,88 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [MyPty.h] Pseudo Terminal Device */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/*! \file
+*/
+
+#ifndef MY_PTY_H
+#define MY_PTY_H
+
+#include <qobject.h>
+#include <qstrlist.h>
+
+
+class MyPty : public QObject
+{
+Q_OBJECT
+
+ public:
+
+ MyPty();
+ ~MyPty();
+
+ /*!
+ having a `run' separate from the constructor allows to make
+ the necessary connections to the signals and slots of the
+ instance before starting the execution of the client.
+ */
+ int run(const char* pgm, QStrList & args, const char* term, int addutmp);
+
+ public slots:
+
+ void send_bytes(const char* s, int len);
+ void setSize(int lines, int columns);
+ void error();
+
+ signals:
+
+ /*!
+ emitted when the client program terminates.
+ \param status the wait(2) status code of the terminated client program.
+ */
+ void done(int status);
+
+ /*!
+ emitted when a new block of data comes in.
+ \param s - the data
+ \param len - the length of the block
+ */
+ void block_in(const char* s, int len);
+
+ public:
+
+ void send_byte(char s);
+// void send_string(const char* s);
+
+ const char* deviceName();
+
+ protected slots:
+ void readPty();
+ void donePty();
+
+ private:
+ int openPty();
+
+ private:
+
+ char ptynam[16]; // "/dev/ptyxx" | "/dev/ptmx"
+ char ttynam[16]; // "/dev/ttyxx" | "/dev/pts/########..."
+ int fd;
+ int cpid;
+};
+
+#endif
diff --git a/core/apps/embeddedkonsole/TECommon.h b/core/apps/embeddedkonsole/TECommon.h
new file mode 100644
index 0000000..261d51b
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TECommon.h
@@ -0,0 +1,114 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [TECommon.h] Common Definitions */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/*! \file TECommon.h
+ \brief Definitions shared between TEScreen and TEWidget.
+*/
+
+#ifndef TECOMMON_H
+#define TECOMMON_H
+
+#include <qcolor.h>
+
+#ifndef BOOL
+typedef int BOOL;
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef UINT8
+typedef unsigned char UINT8;
+#endif
+
+#ifndef UINT16
+typedef unsigned short UINT16;
+#endif
+
+// Attributed Character Representations ///////////////////////////////
+
+// Colors
+
+#define BASE_COLORS (2+8)
+#define INTENSITIES 2
+#define TABLE_COLORS (INTENSITIES*BASE_COLORS)
+
+#define DEFAULT_FORE_COLOR 0
+#define DEFAULT_BACK_COLOR 1
+
+#define DEFAULT_RENDITION 0
+#define RE_BOLD (1 << 0)
+#define RE_BLINK (1 << 1)
+#define RE_UNDERLINE (1 << 2)
+#define RE_REVERSE (1 << 3) // Screen only
+#define RE_INTENSIVE (1 << 3) // Widget only
+
+/*! \class ca
+ * \brief a character with rendition attributes.
+*/
+
+class ca
+{
+public:
+ inline ca(UINT16 _c = ' ',
+ UINT8 _f = DEFAULT_FORE_COLOR,
+ UINT8 _b = DEFAULT_BACK_COLOR,
+ UINT8 _r = DEFAULT_RENDITION)
+ : c(_c), f(_f), b(_b), r(_r) {}
+public:
+ UINT16 c; // character
+ UINT8 f; // foreground color
+ UINT8 b; // background color
+ UINT8 r; // rendition
+public:
+ friend BOOL operator == (ca a, ca b);
+ friend BOOL operator != (ca a, ca b);
+};
+
+inline BOOL operator == (ca a, ca b)
+{
+ return a.c == b.c && a.f == b.f && a.b == b.b && a.r == b.r;
+}
+
+inline BOOL operator != (ca a, ca b)
+{
+ return a.c != b.c || a.f != b.f || a.b != b.b || a.r != b.r;
+}
+
+/*!
+*/
+struct ColorEntry
+{
+ ColorEntry(QColor c, bool tr, bool b) : color(c), transparent(tr), bold(b) {}
+ ColorEntry() : transparent(false), bold(false) {} // default constructors
+ void operator=(const ColorEntry& rhs) {
+ color = rhs.color;
+ transparent = rhs.transparent;
+ bold = rhs.bold;
+ }
+ QColor color;
+ bool transparent; // if used on bg
+ bool bold; // if used on fg
+};
+
+#endif // TECOMMON_H
diff --git a/core/apps/embeddedkonsole/TEHistory.cpp b/core/apps/embeddedkonsole/TEHistory.cpp
new file mode 100644
index 0000000..317ce57
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEHistory.cpp
@@ -0,0 +1,212 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [TEHistory.C] History Buffer */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#include "TEHistory.h"
+#include <stdlib.h>
+#include <assert.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+
+#define HERE printf("%s(%d): here\n",__FILE__,__LINE__)
+
+/*
+ An arbitrary long scroll.
+
+ One can modify the scroll only by adding either cells
+ or newlines, but access it randomly.
+
+ The model is that of an arbitrary wide typewriter scroll
+ in that the scroll is a serie of lines and each line is
+ a serie of cells with no overwriting permitted.
+
+ The implementation provides arbitrary length and numbers
+ of cells and line/column indexed read access to the scroll
+ at constant costs.
+
+FIXME: some complain about the history buffer comsuming the
+ memory of their machines. This problem is critical
+ since the history does not behave gracefully in cases
+ where the memory is used up completely.
+
+ I put in a workaround that should handle it problem
+ now gracefully. I'm not satisfied with the solution.
+
+FIXME: Terminating the history is not properly indicated
+ in the menu. We should throw a signal.
+
+FIXME: There is noticable decrease in speed, also. Perhaps,
+ there whole feature needs to be revisited therefore.
+ Disadvantage of a more elaborated, say block-oriented
+ scheme with wrap around would be it's complexity.
+*/
+
+//FIXME: tempory replacement for tmpfile
+// this is here one for debugging purpose.
+
+//#define tmpfile xTmpFile
+
+FILE* xTmpFile()
+{
+ static int fid = 0;
+ char fname[80];
+ sprintf(fname,"TmpFile.%d",fid++);
+ return fopen(fname,"w");
+}
+
+
+// History Buffer ///////////////////////////////////////////
+
+/*
+ A Row(X) data type which allows adding elements to the end.
+*/
+
+HistoryBuffer::HistoryBuffer()
+{
+ ion = -1;
+ length = 0;
+}
+
+HistoryBuffer::~HistoryBuffer()
+{
+ setScroll(FALSE);
+}
+
+void HistoryBuffer::setScroll(bool on)
+{
+ if (on == hasScroll()) return;
+
+ if (on)
+ {
+ assert( ion < 0 );
+ assert( length == 0);
+ FILE* tmp = tmpfile(); if (!tmp) { perror("konsole: cannot open temp file.\n"); return; }
+ ion = dup(fileno(tmp)); if (ion<0) perror("konsole: cannot dup temp file.\n");
+ fclose(tmp);
+ }
+ else
+ {
+ assert( ion >= 0 );
+ close(ion);
+ ion = -1;
+ length = 0;
+ }
+}
+
+bool HistoryBuffer::hasScroll()
+{
+ return ion >= 0;
+}
+
+void HistoryBuffer::add(const unsigned char* bytes, int len)
+{ int rc;
+ assert(hasScroll());
+ rc = lseek(ion,length,SEEK_SET); if (rc < 0) { perror("HistoryBuffer::add.seek"); setScroll(FALSE); return; }
+ rc = write(ion,bytes,len); if (rc < 0) { perror("HistoryBuffer::add.write"); setScroll(FALSE); return; }
+ length += rc;
+}
+
+void HistoryBuffer::get(unsigned char* bytes, int len, int loc)
+{ int rc;
+ assert(hasScroll());
+ if (loc < 0 || len < 0 || loc + len > length)
+ fprintf(stderr,"getHist(...,%d,%d): invalid args.\n",len,loc);
+ rc = lseek(ion,loc,SEEK_SET); if (rc < 0) { perror("HistoryBuffer::get.seek"); setScroll(FALSE); return; }
+ rc = read(ion,bytes,len); if (rc < 0) { perror("HistoryBuffer::get.read"); setScroll(FALSE); return; }
+}
+
+int HistoryBuffer::len()
+{
+ return length;
+}
+
+// History Scroll //////////////////////////////////////
+
+/*
+ The history scroll makes a Row(Row(Cell)) from
+ two history buffers. The index buffer contains
+ start of line positions which refere to the cells
+ buffer.
+
+ Note that index[0] addresses the second line
+ (line #1), while the first line (line #0) starts
+ at 0 in cells.
+*/
+
+HistoryScroll::HistoryScroll()
+{
+}
+
+HistoryScroll::~HistoryScroll()
+{
+}
+
+void HistoryScroll::setScroll(bool on)
+{
+ index.setScroll(on);
+ cells.setScroll(on);
+}
+
+bool HistoryScroll::hasScroll()
+{
+ return index.hasScroll() && cells.hasScroll();
+}
+
+int HistoryScroll::getLines()
+{
+ if (!hasScroll()) return 0;
+ return index.len() / sizeof(int);
+}
+
+int HistoryScroll::getLineLen(int lineno)
+{
+ if (!hasScroll()) return 0;
+ return (startOfLine(lineno+1) - startOfLine(lineno)) / sizeof(ca);
+}
+
+int HistoryScroll::startOfLine(int lineno)
+{
+ if (lineno <= 0) return 0;
+ if (!hasScroll()) return 0;
+ if (lineno <= getLines())
+ { int res;
+ index.get((unsigned char*)&res,sizeof(int),(lineno-1)*sizeof(int));
+ return res;
+ }
+ return cells.len();
+}
+
+void HistoryScroll::getCells(int lineno, int colno, int count, ca res[])
+{
+ assert(hasScroll());
+ cells.get((unsigned char*)res,count*sizeof(ca),startOfLine(lineno)+colno*sizeof(ca));
+}
+
+void HistoryScroll::addCells(ca text[], int count)
+{
+ if (!hasScroll()) return;
+ cells.add((unsigned char*)text,count*sizeof(ca));
+}
+
+void HistoryScroll::addLine()
+{
+ if (!hasScroll()) return;
+ int locn = cells.len();
+ index.add((unsigned char*)&locn,sizeof(int));
+}
diff --git a/core/apps/embeddedkonsole/TEHistory.h b/core/apps/embeddedkonsole/TEHistory.h
new file mode 100644
index 0000000..8339ec6
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEHistory.h
@@ -0,0 +1,75 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [TEHistory.H] History Buffer */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef TEHISTORY_H
+#define TEHISTORY_H
+
+#include "TECommon.h"
+
+/*
+ An extendable tmpfile(1) based buffer.
+*/
+class HistoryBuffer
+{
+public:
+ HistoryBuffer();
+ ~HistoryBuffer();
+
+public:
+ void setScroll(bool on);
+ bool hasScroll();
+
+public:
+ void add(const unsigned char* bytes, int len);
+ void get(unsigned char* bytes, int len, int loc);
+ int len();
+
+private:
+ int ion;
+ int length;
+};
+
+class HistoryScroll
+{
+public:
+ HistoryScroll();
+ ~HistoryScroll();
+
+public:
+ void setScroll(bool on);
+ bool hasScroll();
+
+public: // access to history
+ int getLines();
+ int getLineLen(int lineno);
+ void getCells(int lineno, int colno, int count, ca res[]);
+
+public: // backward compatibility (obsolete)
+ ca getCell(int lineno, int colno) { ca res; getCells(lineno,colno,1,&res); return res; }
+
+public: // adding lines.
+ void addCells(ca a[], int count);
+ void addLine();
+
+private:
+ int startOfLine(int lineno);
+ HistoryBuffer index; // lines Row(int)
+ HistoryBuffer cells; // text Row(ca)
+};
+
+#endif // TEHISTORY_H
diff --git a/core/apps/embeddedkonsole/TEScreen.cpp b/core/apps/embeddedkonsole/TEScreen.cpp
new file mode 100644
index 0000000..a3d115d
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEScreen.cpp
@@ -0,0 +1,1197 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [TEScreen.C] Screen Data Type */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/*! \file
+*/
+
+/*! \class TEScreen
+
+ \brief The image manipulated by the emulation.
+
+ This class implements the operations of the terminal emulation framework.
+ It is a complete passive device, driven by the emulation decoder
+ (TEmuVT102). By this it forms in fact an ADT, that defines operations
+ on a rectangular image.
+
+ It does neither know how to display its image nor about escape sequences.
+ It is further independent of the underlying toolkit. By this, one can even
+ use this module for an ordinary text surface.
+
+ Since the operations are called by a specific emulation decoder, one may
+ collect their different operations here.
+
+ The state manipulated by the operations is mainly kept in `image', though
+ it is a little more complex bejond this. See the header file of the class.
+
+ \sa TEWidget \sa VT102Emulation
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+// #include <kdebug.h>
+
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "TEScreen.h"
+
+#define HERE printf("%s(%d): here\n",__FILE__,__LINE__)
+
+//FIXME: this is emulation specific. Use FALSE for xterm, TRUE for ANSI.
+//FIXME: see if we can get this from terminfo.
+#define BS_CLEARS FALSE
+
+#define loc(X,Y) ((Y)*columns+(X))
+
+/*! creates a `TEScreen' of `lines' lines and `columns' columns.
+*/
+
+TEScreen::TEScreen(int lines, int columns)
+{
+ this->lines = lines;
+ this->columns = columns;
+
+ image = (ca*) malloc(lines*columns*sizeof(ca));
+ tabstops = NULL; initTabStops();
+
+ histCursor = 0;
+
+ clearSelection();
+ reset();
+}
+
+/*! Destructor
+*/
+
+TEScreen::~TEScreen()
+{
+ free(image);
+ if (tabstops) free(tabstops);
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Normalized Screen Operations */
+/* */
+/* ------------------------------------------------------------------------- */
+
+// Cursor Setting --------------------------------------------------------------
+
+/*! \section Cursor
+
+ The `cursor' is a location within the screen that is implicitely used in
+ many operations. The operations within this section allow to manipulate
+ the cursor explicitly and to obtain it's value.
+
+ The position of the cursor is guarantied to be between (including) 0 and
+ `columns-1' and `lines-1'.
+*/
+
+/*!
+ Move the cursor up.
+
+ The cursor will not be moved beyond the top margin.
+*/
+
+void TEScreen::cursorUp(int n)
+//=CUU
+{
+ if (n == 0) n = 1; // Default
+ int stop = cuY < tmargin ? 0 : tmargin;
+ cuX = QMIN(columns-1,cuX); // nowrap!
+ cuY = QMAX(stop,cuY-n);
+}
+
+/*!
+ Move the cursor down.
+
+ The cursor will not be moved beyond the bottom margin.
+*/
+
+void TEScreen::cursorDown(int n)
+//=CUD
+{
+ if (n == 0) n = 1; // Default
+ int stop = cuY > bmargin ? lines-1 : bmargin;
+ cuX = QMIN(columns-1,cuX); // nowrap!
+ cuY = QMIN(stop,cuY+n);
+}
+
+/*!
+ Move the cursor left.
+
+ The cursor will not move beyond the first column.
+*/
+
+void TEScreen::cursorLeft(int n)
+//=CUB
+{
+ if (n == 0) n = 1; // Default
+ cuX = QMIN(columns-1,cuX); // nowrap!
+ cuX = QMAX(0,cuX-n);
+}
+
+/*!
+ Move the cursor left.
+
+ The cursor will not move beyond the rightmost column.
+*/
+
+void TEScreen::cursorRight(int n)
+//=CUF
+{
+ if (n == 0) n = 1; // Default
+ cuX = QMIN(columns-1,cuX+n);
+}
+
+/*!
+ Set top and bottom margin.
+*/
+
+void TEScreen::setMargins(int top, int bot)
+//=STBM
+{
+ if (top == 0) top = 1; // Default
+ if (bot == 0) bot = lines; // Default
+ top = top - 1; // Adjust to internal lineno
+ bot = bot - 1; // Adjust to internal lineno
+ if ( !( 0 <= top && top < bot && bot < lines ) )
+ { fprintf(stderr,"%s(%d) : setRegion(%d,%d) : bad range.\n",
+ __FILE__,__LINE__,top,bot);
+ return; // Default error action: ignore
+ }
+ tmargin = top;
+ bmargin = bot;
+ cuX = 0;
+ cuY = getMode(MODE_Origin) ? top : 0;
+}
+
+/*!
+ Move the cursor down one line.
+
+ If cursor is on bottom margin, the region between the
+ actual top and bottom margin is scrolled up instead.
+*/
+
+void TEScreen::index()
+//=IND
+{
+ if (cuY == bmargin)
+ {
+ if (tmargin == 0 && bmargin == lines-1) addHistLine(); // hist.history
+ scrollUp(tmargin,1);
+ }
+ else if (cuY < lines-1)
+ cuY += 1;
+}
+
+/*!
+ Move the cursor up one line.
+
+ If cursor is on the top margin, the region between the
+ actual top and bottom margin is scrolled down instead.
+*/
+
+void TEScreen::reverseIndex()
+//=RI
+{
+ if (cuY == tmargin)
+ scrollDown(tmargin,1);
+ else if (cuY > 0)
+ cuY -= 1;
+}
+
+/*!
+ Move the cursor to the begin of the next line.
+
+ If cursor is on bottom margin, the region between the
+ actual top and bottom margin is scrolled up.
+*/
+
+void TEScreen::NextLine()
+//=NEL
+{
+ Return(); index();
+}
+
+// Line Editing ----------------------------------------------------------------
+
+/*! \section inserting / deleting characters
+*/
+
+/*! erase `n' characters starting from (including) the cursor position.
+
+ The line is filled in from the right with spaces.
+*/
+
+void TEScreen::eraseChars(int n)
+{
+ if (n == 0) n = 1; // Default
+ int p = QMAX(0,QMIN(cuX+n-1,columns-1));
+ clearImage(loc(cuX,cuY),loc(p,cuY),' ');
+}
+
+/*! delete `n' characters starting from (including) the cursor position.
+
+ The line is filled in from the right with spaces.
+*/
+
+void TEScreen::deleteChars(int n)
+{
+ if (n == 0) n = 1; // Default
+ int p = QMAX(0,QMIN(cuX+n,columns-1));
+ moveImage(loc(cuX,cuY),loc(p,cuY),loc(columns-1,cuY));
+ clearImage(loc(columns-n,cuY),loc(columns-1,cuY),' ');
+}
+
+/*! insert `n' spaces at the cursor position.
+
+ The cursor is not moved by the operation.
+*/
+
+void TEScreen::insertChars(int n)
+{
+ if (n == 0) n = 1; // Default
+ int p = QMAX(0,QMIN(columns-1-n,columns-1));
+ int q = QMAX(0,QMIN(cuX+n,columns-1));
+ moveImage(loc(q,cuY),loc(cuX,cuY),loc(p,cuY));
+ clearImage(loc(cuX,cuY),loc(q-1,cuY),' ');
+}
+
+/*! delete `n' lines starting from (including) the cursor position.
+
+ The cursor is not moved by the operation.
+*/
+
+void TEScreen::deleteLines(int n)
+{
+ if (n == 0) n = 1; // Default
+ scrollUp(cuY,n);
+}
+
+/*! insert `n' lines at the cursor position.
+
+ The cursor is not moved by the operation.
+*/
+
+void TEScreen::insertLines(int n)
+{
+ if (n == 0) n = 1; // Default
+ scrollDown(cuY,n);
+}
+
+// Mode Operations -----------------------------------------------------------
+
+/*! Set a specific mode. */
+
+void TEScreen::setMode(int m)
+{
+ currParm.mode[m] = TRUE;
+ switch(m)
+ {
+ case MODE_Origin : cuX = 0; cuY = tmargin; break; //FIXME: home
+ }
+}
+
+/*! Reset a specific mode. */
+
+void TEScreen::resetMode(int m)
+{
+ currParm.mode[m] = FALSE;
+ switch(m)
+ {
+ case MODE_Origin : cuX = 0; cuY = 0; break; //FIXME: home
+ }
+}
+
+/*! Save a specific mode. */
+
+void TEScreen::saveMode(int m)
+{
+ saveParm.mode[m] = currParm.mode[m];
+}
+
+/*! Restore a specific mode. */
+
+void TEScreen::restoreMode(int m)
+{
+ currParm.mode[m] = saveParm.mode[m];
+}
+
+//NOTE: this is a helper function
+/*! Return the setting a specific mode. */
+BOOL TEScreen::getMode(int m)
+{
+ return currParm.mode[m];
+}
+
+/*! Save the cursor position and the rendition attribute settings. */
+
+void TEScreen::saveCursor()
+{
+ sa_cuX = cuX;
+ sa_cuY = cuY;
+ sa_cu_re = cu_re;
+ sa_cu_fg = cu_fg;
+ sa_cu_bg = cu_bg;
+}
+
+/*! Restore the cursor position and the rendition attribute settings. */
+
+void TEScreen::restoreCursor()
+{
+ cuX = QMIN(sa_cuX,columns-1);
+ cuY = QMIN(sa_cuY,lines-1);
+ cu_re = sa_cu_re;
+ cu_fg = sa_cu_fg;
+ cu_bg = sa_cu_bg;
+ effectiveRendition();
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Screen Operations */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*! Assing a new size to the screen.
+
+ The topmost left position is maintained, while lower lines
+ or right hand side columns might be removed or filled with
+ spaces to fit the new size.
+
+ The region setting is reset to the whole screen and the
+ tab positions reinitialized.
+*/
+
+void TEScreen::resizeImage(int new_lines, int new_columns)
+{
+
+ if (cuY > new_lines-1)
+ { // attempt to preserve focus and lines
+ bmargin = lines-1; //FIXME: margin lost
+ for (int i = 0; i < cuY-(new_lines-1); i++)
+ {
+ addHistLine(); scrollUp(0,1);
+ }
+ }
+
+ // make new image
+ ca* newimg = (ca*)malloc(new_lines*new_columns*sizeof(ca));
+
+ clearSelection();
+
+ // clear new image
+ for (int y = 0; y < new_lines; y++)
+ for (int x = 0; x < new_columns; x++)
+ {
+ newimg[y*new_columns+x].c = ' ';
+ newimg[y*new_columns+x].f = DEFAULT_FORE_COLOR;
+ newimg[y*new_columns+x].b = DEFAULT_BACK_COLOR;
+ newimg[y*new_columns+x].r = DEFAULT_RENDITION;
+ }
+ int cpy_lines = QMIN(new_lines, lines);
+ int cpy_columns = QMIN(new_columns,columns);
+ // copy to new image
+ for (int y = 0; y < cpy_lines; y++)
+ for (int x = 0; x < cpy_columns; x++)
+ {
+ newimg[y*new_columns+x].c = image[loc(x,y)].c;
+ newimg[y*new_columns+x].f = image[loc(x,y)].f;
+ newimg[y*new_columns+x].b = image[loc(x,y)].b;
+ newimg[y*new_columns+x].r = image[loc(x,y)].r;
+ }
+ free(image);
+ image = newimg;
+ lines = new_lines;
+ columns = new_columns;
+ cuX = QMIN(cuX,columns-1);
+ cuY = QMIN(cuY,lines-1);
+
+ // FIXME: try to keep values, evtl.
+ tmargin=0;
+ bmargin=lines-1;
+ initTabStops();
+ clearSelection();
+}
+
+/*
+ Clarifying rendition here and in TEWidget.
+
+ currently, TEWidget's color table is
+ 0 1 2 .. 9 10 .. 17
+ dft_fg, dft_bg, dim 0..7, intensive 0..7
+
+ cu_fg, cu_bg contain values 0..8;
+ - 0 = default color
+ - 1..8 = ansi specified color
+
+ re_fg, re_bg contain values 0..17
+ due to the TEWidget's color table
+
+ rendition attributes are
+
+ attr widget screen
+ -------------- ------ ------
+ RE_UNDERLINE XX XX affects foreground only
+ RE_BLINK XX XX affects foreground only
+ RE_BOLD XX XX affects foreground only
+ RE_REVERSE -- XX
+ RE_TRANSPARENT XX -- affects background only
+ RE_INTENSIVE XX -- affects foreground only
+
+ Note that RE_BOLD is used in both widget
+ and screen rendition. Since xterm/vt102
+ is to poor to distinguish between bold
+ (which is a font attribute) and intensive
+ (which is a color attribute), we translate
+ this and RE_BOLD in falls eventually appart
+ into RE_BOLD and RE_INTENSIVE.
+*/
+
+void TEScreen::reverseRendition(ca* p)
+{ UINT8 f = p->f; UINT8 b = p->b;
+ p->f = b; p->b = f; //p->r &= ~RE_TRANSPARENT;
+}
+
+void TEScreen::effectiveRendition()
+// calculate rendition
+{
+ ef_re = cu_re & (RE_UNDERLINE | RE_BLINK);
+ if (cu_re & RE_REVERSE)
+ {
+ ef_fg = cu_bg;
+ ef_bg = cu_fg;
+ }
+ else
+ {
+ ef_fg = cu_fg;
+ ef_bg = cu_bg;
+ }
+ if (cu_re & RE_BOLD)
+ {
+ if (ef_fg < BASE_COLORS)
+ ef_fg += BASE_COLORS;
+ else
+ ef_fg -= BASE_COLORS;
+ }
+}
+
+/*!
+ returns the image.
+
+ Get the size of the image by \sa getLines and \sa getColumns.
+
+ NOTE that the image returned by this function must later be
+ freed.
+
+*/
+
+ca* TEScreen::getCookedImage()
+{ int x,y;
+ ca* merged = (ca*)malloc(lines*columns*sizeof(ca));
+ ca dft(' ',DEFAULT_FORE_COLOR,DEFAULT_BACK_COLOR,DEFAULT_RENDITION);
+
+ for (y = 0; (y < lines) && (y < (hist.getLines()-histCursor)); y++)
+ {
+ int len = QMIN(columns,hist.getLineLen(y+histCursor));
+ int yp = y*columns;
+ int yq = (y+histCursor)*columns;
+
+ hist.getCells(y+histCursor,0,len,merged+yp);
+ for (x = len; x < columns; x++) merged[yp+x] = dft;
+ for (x = 0; x < columns; x++)
+ { int p=x + yp; int q=x + yq;
+ if ( ( q >= sel_TL ) && ( q <= sel_BR ) )
+ reverseRendition(&merged[p]); // for selection
+ }
+ }
+ if (lines >= hist.getLines()-histCursor)
+ {
+ for (y = (hist.getLines()-histCursor); y < lines ; y++)
+ {
+ int yp = y*columns;
+ int yq = (y+histCursor)*columns;
+ int yr = (y-hist.getLines()+histCursor)*columns;
+ for (x = 0; x < columns; x++)
+ { int p = x + yp; int q = x + yq; int r = x + yr;
+ merged[p] = image[r];
+ if ( q >= sel_TL && q <= sel_BR )
+ reverseRendition(&merged[p]); // for selection
+ }
+
+ }
+ }
+ // evtl. inverse display
+ if (getMode(MODE_Screen))
+ { int i,n = lines*columns;
+ for (i = 0; i < n; i++)
+ reverseRendition(&merged[i]); // for reverse display
+ }
+ if (getMode(MODE_Cursor) && (cuY+(hist.getLines()-histCursor) < lines)) // cursor visible
+ reverseRendition(&merged[loc(cuX,cuY+(hist.getLines()-histCursor))]);
+ return merged;
+}
+
+
+/*!
+*/
+
+void TEScreen::reset()
+{
+ setMode(MODE_Wrap ); saveMode(MODE_Wrap ); // wrap at end of margin
+ resetMode(MODE_Origin); saveMode(MODE_Origin); // position refere to [1,1]
+ resetMode(MODE_Insert); saveMode(MODE_Insert); // overstroke
+ setMode(MODE_Cursor); // cursor visible
+ resetMode(MODE_Screen); // screen not inverse
+ resetMode(MODE_NewLine);
+
+ tmargin=0;
+ bmargin=lines-1;
+
+ setDefaultRendition();
+ saveCursor();
+
+ clear();
+}
+
+/*! Clear the entire screen and home the cursor.
+*/
+
+void TEScreen::clear()
+{
+ clearEntireScreen();
+ home();
+}
+
+/*! Moves the cursor left one column.
+*/
+
+void TEScreen::BackSpace()
+{
+ cuX = QMAX(0,cuX-1);
+ if (BS_CLEARS) image[loc(cuX,cuY)].c = ' ';
+}
+
+/*!
+*/
+
+void TEScreen::Tabulate()
+{
+ // note that TAB is a format effector (does not write ' ');
+ cursorRight(1); while(cuX < columns-1 && !tabstops[cuX]) cursorRight(1);
+}
+
+void TEScreen::clearTabStops()
+{
+ for (int i = 0; i < columns; i++) tabstops[i-1] = FALSE;
+}
+
+void TEScreen::changeTabStop(bool set)
+{
+ if (cuX >= columns) return;
+ tabstops[cuX] = set;
+}
+
+void TEScreen::initTabStops()
+{
+ if (tabstops) free(tabstops);
+ tabstops = (bool*)malloc(columns*sizeof(bool));
+ // Arrg! The 1st tabstop has to be one longer than the other.
+ // i.e. the kids start counting from 0 instead of 1.
+ // Other programs might behave correctly. Be aware.
+ for (int i = 0; i < columns; i++) tabstops[i] = (i%8 == 0 && i != 0);
+}
+
+/*!
+ This behaves either as IND (Screen::Index) or as NEL (Screen::NextLine)
+ depending on the NewLine Mode (LNM). This mode also
+ affects the key sequence returned for newline ([CR]LF).
+*/
+
+void TEScreen::NewLine()
+{
+ if (getMode(MODE_NewLine)) Return();
+ index();
+}
+
+/*! put `c' literally onto the screen at the current cursor position.
+
+ VT100 uses the convention to produce an automatic newline (am)
+ with the *first* character that would fall onto the next line (xenl).
+*/
+
+void TEScreen::checkSelection(int from, int to)
+{
+ if (sel_begin == -1) return;
+ int scr_TL = loc(0, hist.getLines());
+ //Clear entire selection if it overlaps region [from, to]
+ if ( (sel_BR > (from+scr_TL) )&&(sel_TL < (to+scr_TL)) )
+ {
+ clearSelection();
+ }
+}
+
+void TEScreen::ShowCharacter(unsigned short c)
+{
+ // Note that VT100 does wrapping BEFORE putting the character.
+ // This has impact on the assumption of valid cursor positions.
+ // We indicate the fact that a newline has to be triggered by
+ // putting the cursor one right to the last column of the screen.
+
+ if (cuX >= columns)
+ {
+ if (getMode(MODE_Wrap)) NextLine(); else cuX = columns-1;
+ }
+
+ if (getMode(MODE_Insert)) insertChars(1);
+
+ int i = loc(cuX,cuY);
+
+ checkSelection(i, i); // check if selection is still valid.
+
+ image[i].c = c;
+ image[i].f = ef_fg;
+ image[i].b = ef_bg;
+ image[i].r = ef_re;
+
+ cuX += 1;
+}
+
+// Region commands -------------------------------------------------------------
+
+
+/*! scroll up `n' lines within current region.
+ The `n' new lines are cleared.
+ \sa setRegion \sa scrollDown
+*/
+
+void TEScreen::scrollUp(int from, int n)
+{
+ if (n <= 0 || from + n > bmargin) return;
+ //FIXME: make sure `tmargin', `bmargin', `from', `n' is in bounds.
+ moveImage(loc(0,from),loc(0,from+n),loc(columns-1,bmargin));
+ clearImage(loc(0,bmargin-n+1),loc(columns-1,bmargin),' ');
+}
+
+/*! scroll down `n' lines within current region.
+ The `n' new lines are cleared.
+ \sa setRegion \sa scrollUp
+*/
+
+void TEScreen::scrollDown(int from, int n)
+{
+//FIXME: make sure `tmargin', `bmargin', `from', `n' is in bounds.
+ if (n <= 0) return;
+ if (from > bmargin) return;
+ if (from + n > bmargin) n = bmargin - from;
+ moveImage(loc(0,from+n),loc(0,from),loc(columns-1,bmargin-n));
+ clearImage(loc(0,from),loc(columns-1,from+n-1),' ');
+}
+
+/*! position the cursor to a specific line and column. */
+void TEScreen::setCursorYX(int y, int x)
+{
+ setCursorY(y); setCursorX(x);
+}
+
+/*! Set the cursor to x-th line. */
+
+void TEScreen::setCursorX(int x)
+{
+ if (x == 0) x = 1; // Default
+ x -= 1; // Adjust
+ cuX = QMAX(0,QMIN(columns-1, x));
+}
+
+/*! Set the cursor to y-th line. */
+
+void TEScreen::setCursorY(int y)
+{
+ if (y == 0) y = 1; // Default
+ y -= 1; // Adjust
+ cuY = QMAX(0,QMIN(lines -1, y + (getMode(MODE_Origin) ? tmargin : 0) ));
+}
+
+/*! set cursor to the `left upper' corner of the screen (1,1).
+*/
+
+void TEScreen::home()
+{
+ cuX = 0;
+ cuY = 0;
+}
+
+/*! set cursor to the begin of the current line.
+*/
+
+void TEScreen::Return()
+{
+ cuX = 0;
+}
+
+/*! returns the current cursor columns.
+*/
+
+int TEScreen::getCursorX()
+{
+ return cuX;
+}
+
+/*! returns the current cursor line.
+*/
+
+int TEScreen::getCursorY()
+{
+ return cuY;
+}
+
+// Erasing ---------------------------------------------------------------------
+
+/*! \section Erasing
+
+ This group of operations erase parts of the screen contents by filling
+ it with spaces colored due to the current rendition settings.
+
+ Althought the cursor position is involved in most of these operations,
+ it is never modified by them.
+*/
+
+/*! fill screen between (including) `loca' and `loce' with spaces.
+
+ This is an internal helper functions. The parameter types are internal
+ addresses of within the screen image and make use of the way how the
+ screen matrix is mapped to the image vector.
+*/
+
+void TEScreen::clearImage(int loca, int loce, char c)
+{ int i;
+ int scr_TL=loc(0,hist.getLines());
+ //FIXME: check positions
+
+ //Clear entire selection if it overlaps region to be moved...
+ if ( (sel_BR > (loca+scr_TL) )&&(sel_TL < (loce+scr_TL)) )
+ {
+ clearSelection();
+ }
+ for (i = loca; i <= loce; i++)
+ {
+ image[i].c = c;
+ image[i].f = ef_fg; //DEFAULT_FORE_COLOR; //FIXME: xterm and linux/ansi
+ image[i].b = ef_bg; //DEFAULT_BACK_COLOR; // many have different
+ image[i].r = ef_re; //DEFAULT_RENDITION; // ideas here.
+ }
+}
+
+/*! move image between (including) `loca' and `loce' to 'dst'.
+
+ This is an internal helper functions. The parameter types are internal
+ addresses of within the screen image and make use of the way how the
+ screen matrix is mapped to the image vector.
+*/
+
+void TEScreen::moveImage(int dst, int loca, int loce)
+{
+//FIXME: check positions
+ if (loce < loca) {
+ // kdDebug() << "WARNING!!! call to TEScreen:moveImage with loce < loca!" << endl;
+ return;
+ }
+ memmove(&image[dst],&image[loca],(loce-loca+1)*sizeof(ca));
+}
+
+/*! clear from (including) current cursor position to end of screen.
+*/
+
+void TEScreen::clearToEndOfScreen()
+{
+ clearImage(loc(cuX,cuY),loc(columns-1,lines-1),' ');
+}
+
+/*! clear from begin of screen to (including) current cursor position.
+*/
+
+void TEScreen::clearToBeginOfScreen()
+{
+ clearImage(loc(0,0),loc(cuX,cuY),' ');
+}
+
+/*! clear the entire screen.
+*/
+
+void TEScreen::clearEntireScreen()
+{
+ clearImage(loc(0,0),loc(columns-1,lines-1),' ');
+}
+
+/*! fill screen with 'E'
+ This is to aid screen alignment
+*/
+
+void TEScreen::helpAlign()
+{
+ clearImage(loc(0,0),loc(columns-1,lines-1),'E');
+}
+
+/*! clear from (including) current cursor position to end of current cursor line.
+*/
+
+void TEScreen::clearToEndOfLine()
+{
+ clearImage(loc(cuX,cuY),loc(columns-1,cuY),' ');
+}
+
+/*! clear from begin of current cursor line to (including) current cursor position.
+*/
+
+void TEScreen::clearToBeginOfLine()
+{
+ clearImage(loc(0,cuY),loc(cuX,cuY),' ');
+}
+
+/*! clears entire current cursor line
+*/
+
+void TEScreen::clearEntireLine()
+{
+ clearImage(loc(0,cuY),loc(columns-1,cuY),' ');
+}
+
+// Rendition ------------------------------------------------------------------
+
+/*!
+ set rendition mode
+*/
+
+void TEScreen::setRendition(int re)
+{
+ cu_re |= re;
+ effectiveRendition();
+}
+
+/*!
+ reset rendition mode
+*/
+
+void TEScreen::resetRendition(int re)
+{
+ cu_re &= ~re;
+ effectiveRendition();
+}
+
+/*!
+*/
+
+void TEScreen::setDefaultRendition()
+{
+ setForeColorToDefault();
+ setBackColorToDefault();
+ cu_re = DEFAULT_RENDITION;
+ effectiveRendition();
+}
+
+/*!
+*/
+
+void TEScreen::setForeColor(int fgcolor)
+{
+ cu_fg = (fgcolor&7)+((fgcolor&8) ? 4+8 : 2);
+ effectiveRendition();
+}
+
+/*!
+*/
+
+void TEScreen::setBackColor(int bgcolor)
+{
+ cu_bg = (bgcolor&7)+((bgcolor&8) ? 4+8 : 2);
+ effectiveRendition();
+}
+
+/*!
+*/
+
+void TEScreen::setBackColorToDefault()
+{
+ cu_bg = DEFAULT_BACK_COLOR;
+ effectiveRendition();
+}
+
+/*!
+*/
+
+void TEScreen::setForeColorToDefault()
+{
+ cu_fg = DEFAULT_FORE_COLOR;
+ effectiveRendition();
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Marking & Selection */
+/* */
+/* ------------------------------------------------------------------------- */
+
+void TEScreen::clearSelection()
+{
+ sel_BR = -1;
+ sel_TL = -1;
+ sel_begin = -1;
+}
+
+void TEScreen::setSelBeginXY(const int x, const int y)
+{
+ sel_begin = loc(x,y+histCursor) ;
+ sel_BR = sel_begin;
+ sel_TL = sel_begin;
+}
+
+void TEScreen::setSelExtentXY(const int x, const int y)
+{
+ if (sel_begin == -1) return;
+ int l = loc(x,y + histCursor);
+
+ if (l < sel_begin)
+ {
+ sel_TL = l;
+ sel_BR = sel_begin;
+ }
+ else
+ {
+ /* FIXME, HACK to correct for x too far to the right... */
+ if (( x == columns )|| (x == 0)) l--;
+
+ sel_TL = sel_begin;
+ sel_BR = l;
+ }
+}
+
+QString TEScreen::getSelText(const BOOL preserve_line_breaks)
+{
+ if (sel_begin == -1)
+ return QString::null; // Selection got clear while selecting.
+
+ int *m; // buffer to fill.
+ int s, d; // source index, dest. index.
+ int hist_BR = loc(0, hist.getLines());
+ int hY = sel_TL / columns;
+ int hX = sel_TL % columns;
+ int eol; // end of line
+
+ s = sel_TL; // tracks copy in source.
+
+ // allocate buffer for maximum
+ // possible size...
+ d = (sel_BR - sel_TL) / columns + 1;
+ m = new int[d * (columns + 1) + 2];
+ d = 0;
+
+ while (s <= sel_BR)
+ {
+ if (s < hist_BR)
+ { // get lines from hist.history
+ // buffer.
+ eol = hist.getLineLen(hY);
+
+ if ((hY == (sel_BR / columns)) &&
+ (eol >= (sel_BR % columns)))
+ {
+ eol = sel_BR % columns + 1;
+ }
+
+ while (hX < eol)
+ {
+ m[d++] = hist.getCell(hY, hX++).c;
+ s++;
+ }
+
+ if (s <= sel_BR)
+ {
+ // The line break handling
+ // It's different from the screen
+ // image case!
+ if (eol % columns == 0)
+ {
+ // That's either a completely filled
+ // line or an empty line
+ if (eol == 0)
+ {
+ m[d++] = '\n';
+ }
+ else
+ {
+ // We have a full line.
+ // FIXME: How can we handle newlines
+ // at this position?!
+ }
+ }
+ else if ((eol + 1) % columns == 0)
+ {
+ // FIXME: We don't know if this was a
+ // space at the last position or a
+ // short line!!
+ m[d++] = ' ';
+ }
+ else
+ {
+ // We have a short line here. Put a
+ // newline or a space into the
+ // buffer.
+ m[d++] = preserve_line_breaks ? '\n' : ' ';
+ }
+ }
+
+ hY++;
+ hX = 0;
+ s = hY * columns;
+ }
+ else
+ { // or from screen image.
+ eol = (s / columns + 1) * columns - 1;
+
+ if (eol < sel_BR)
+ {
+ while ((eol > s) &&
+ isspace(image[eol - hist_BR].c))
+ {
+ eol--;
+ }
+ }
+ else
+ {
+ eol = sel_BR;
+ }
+
+ while (s <= eol)
+ {
+ m[d++] = image[s++ - hist_BR].c;
+ }
+
+ if (eol < sel_BR)
+ {
+ // eol processing see below ...
+ if ((eol + 1) % columns == 0)
+ {
+ if (image[eol - hist_BR].c == ' ')
+ {
+ m[d++] = ' ';
+ }
+ }
+ else
+ {
+ m[d++] = ((preserve_line_breaks ||
+ ((eol % columns) == 0)) ?
+ '\n' : ' ');
+ }
+ }
+
+ s = (eol / columns + 1) * columns;
+ }
+ }
+
+ QChar* qc = new QChar[d];
+
+ for (int i = 0; i < d; i++)
+ {
+ qc[i] = m[i];
+ }
+
+ QString res(qc, d);
+
+ delete m;
+ delete qc;
+
+ return res;
+}
+/* above ... end of line processing for selection -- psilva
+cases:
+
+1) (eol+1)%columns == 0 --> the whole line is filled.
+ If the last char is a space, insert (preserve) space. otherwise
+ leave the text alone, so that words that are broken by linewrap
+ are preserved.
+
+FIXME:
+ * this suppresses \n for command output that is
+ sized to the exact column width of the screen.
+
+2) eol%columns == 0 --> blank line.
+ insert a \n unconditionally.
+ Do it either you would because you are in preserve_line_break mode,
+ or because it's an ASCII paragraph delimiter, so even when
+ not preserving line_breaks, you want to preserve paragraph breaks.
+
+3) else --> partially filled line
+ insert a \n in preserve line break mode, else a space
+ The space prevents concatenation of the last word of one
+ line with the first of the next.
+
+*/
+
+void TEScreen::addHistLine()
+{
+ assert(hasScroll() || histCursor == 0);
+
+ // add to hist buffer
+ // we have to take care about scrolling, too...
+
+ if (hasScroll())
+ { ca dft;
+
+ int end = columns-1;
+ while (end >= 0 && image[end] == dft)
+ end -= 1;
+
+ hist.addCells(image,end+1);
+ hist.addLine();
+
+ // adjust history cursor
+ histCursor += (hist.getLines()-1 == histCursor);
+ }
+
+ if (!hasScroll()) histCursor = 0; //FIXME: a poor workaround
+}
+
+void TEScreen::setHistCursor(int cursor)
+{
+ histCursor = cursor; //FIXME:rangecheck
+}
+
+int TEScreen::getHistCursor()
+{
+ return histCursor;
+}
+
+int TEScreen::getHistLines()
+{
+ return hist.getLines();
+}
+
+void TEScreen::setScroll(bool on)
+{
+ histCursor = 0;
+ clearSelection();
+ hist.setScroll(on);
+}
+
+bool TEScreen::hasScroll()
+{
+ return hist.hasScroll();
+}
diff --git a/core/apps/embeddedkonsole/TEScreen.h b/core/apps/embeddedkonsole/TEScreen.h
new file mode 100644
index 0000000..ba47ee5
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEScreen.h
@@ -0,0 +1,259 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [te_screen.h] Screen Data Type */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef TESCREEN_H
+#define TESCREEN_H
+
+/*! \file
+*/
+
+#include "TECommon.h"
+#include "TEHistory.h"
+
+#define MODE_Origin 0
+#define MODE_Wrap 1
+#define MODE_Insert 2
+#define MODE_Screen 3
+#define MODE_Cursor 4
+#define MODE_NewLine 5
+#define MODES_SCREEN 6
+
+/*!
+*/
+struct ScreenParm
+{
+ int mode[MODES_SCREEN];
+};
+
+
+class TEScreen
+{
+public:
+ TEScreen(int lines, int columns);
+ ~TEScreen();
+
+public: // these are all `Screen' operations
+ //
+ // VT100/2 Operations ------------------
+ //
+ // Cursor Movement
+ //
+ void cursorUp (int n);
+ void cursorDown (int n);
+ void cursorLeft (int n);
+ void cursorRight (int n);
+ void setCursorY (int y);
+ void setCursorX (int x);
+ void setCursorYX (int y, int x);
+ void setMargins (int t, int b);
+ //
+ // Cursor Movement with Scrolling
+ //
+ void NewLine ();
+ void NextLine ();
+ void index ();
+ void reverseIndex();
+ //
+ void Return ();
+ void BackSpace ();
+ void Tabulate ();
+ //
+ // Editing
+ //
+ void eraseChars (int n);
+ void deleteChars (int n);
+ void insertChars (int n);
+ void deleteLines (int n);
+ void insertLines (int n);
+ //
+ // -------------------------------------
+ //
+ void clearTabStops();
+ void changeTabStop(bool set);
+ //
+ void resetMode (int n);
+ void setMode (int n);
+ void saveMode (int n);
+ void restoreMode (int n);
+ //
+ void saveCursor ();
+ void restoreCursor();
+ //
+ // -------------------------------------
+ //
+ void clearEntireScreen();
+ void clearToEndOfScreen();
+ void clearToBeginOfScreen();
+ //
+ void clearEntireLine();
+ void clearToEndOfLine();
+ void clearToBeginOfLine();
+ //
+ void helpAlign ();
+ //
+ // -------------------------------------
+ //
+ void setRendition (int rendition);
+ void resetRendition(int rendition);
+ void setForeColor (int fgcolor);
+ void setBackColor (int bgcolor);
+ //
+ void setDefaultRendition();
+ void setForeColorToDefault();
+ void setBackColorToDefault();
+ //
+ // -------------------------------------
+ //
+ BOOL getMode (int n);
+ //
+ // only for report cursor position
+ //
+ int getCursorX();
+ int getCursorY();
+ //
+ // -------------------------------------
+ //
+ void clear();
+ void home();
+ void reset();
+ //
+ void ShowCharacter(unsigned short c);
+ //
+ void resizeImage(int new_lines, int new_columns);
+ //
+ ca* getCookedImage();
+
+ /*! return the number of lines. */
+ int getLines() { return lines; }
+ /*! return the number of columns. */
+ int getColumns() { return columns; }
+
+ /*! set the position of the history cursor. */
+ void setHistCursor(int cursor);
+ /*! return the position of the history cursor. */
+ int getHistCursor();
+
+ int getHistLines ();
+ void setScroll(bool on);
+ bool hasScroll();
+
+ //
+ // Selection
+ //
+ void setSelBeginXY(const int x, const int y);
+ void setSelExtentXY(const int x, const int y);
+ void clearSelection();
+ QString getSelText(const BOOL preserve_line_breaks);
+
+ void checkSelection(int from, int to);
+
+private: // helper
+
+ void clearImage(int loca, int loce, char c);
+ void moveImage(int dst, int loca, int loce);
+
+ void scrollUp(int from, int i);
+ void scrollDown(int from, int i);
+
+ void addHistLine();
+
+ void initTabStops();
+
+ void effectiveRendition();
+ void reverseRendition(ca* p);
+
+private:
+
+ /*
+ The state of the screen is more complex as one would
+ expect first. The screem does really do part of the
+ emulation providing state informations in form of modes,
+ margins, tabulators, cursor etc.
+
+ Even more unexpected are variables to save and restore
+ parts of the state.
+ */
+
+ // screen image ----------------
+
+ int lines;
+ int columns;
+ ca *image; // [lines][columns]
+
+ // history buffer ---------------
+
+ int histCursor; // display position relative to start of the history buffer
+ HistoryScroll hist;
+
+ // cursor location
+
+ int cuX;
+ int cuY;
+
+ // cursor color and rendition info
+
+ UINT8 cu_fg; // foreground
+ UINT8 cu_bg; // background
+ UINT8 cu_re; // rendition
+
+ // margins ----------------
+
+ int tmargin; // top margin
+ int bmargin; // bottom margin
+
+ // states ----------------
+
+ ScreenParm currParm;
+
+ // ----------------------------
+
+ bool* tabstops;
+
+ // selection -------------------
+
+ int sel_begin; // The first location selected.
+ int sel_TL; // TopLeft Location.
+ int sel_BR; // Bottom Right Location.
+
+ // effective colors and rendition ------------
+
+ UINT8 ef_fg; // These are derived from
+ UINT8 ef_bg; // the cu_* variables above
+ UINT8 ef_re; // to speed up operation
+
+ //
+ // save cursor, rendition & states ------------
+ //
+
+ // cursor location
+
+ int sa_cuX;
+ int sa_cuY;
+
+ // rendition info
+
+ UINT8 sa_cu_re;
+ UINT8 sa_cu_fg;
+ UINT8 sa_cu_bg;
+
+ // modes
+
+ ScreenParm saveParm;
+};
+
+#endif // TESCREEN_H
diff --git a/core/apps/embeddedkonsole/TEWidget.cpp b/core/apps/embeddedkonsole/TEWidget.cpp
new file mode 100644
index 0000000..dc83998
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEWidget.cpp
@@ -0,0 +1,1243 @@
+/* ------------------------------------------------------------------------ */
+/* */
+/* [TEWidget.C] Terminal Emulation Widget */
+/* */
+/* ------------------------------------------------------------------------ */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* ------------------------------------------------------------------------ */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/*! \class TEWidget
+
+ \brief Visible screen contents
+
+ This class is responsible to map the `image' of a terminal emulation to the
+ display. All the dependency of the emulation to a specific GUI or toolkit is
+ localized here. Further, this widget has no knowledge about being part of an
+ emulation, it simply work within the terminal emulation framework by exposing
+ size and key events and by being ordered to show a new image.
+
+ <ul>
+ <li> The internal image has the size of the widget (evtl. rounded up)
+ <li> The external image used in setImage can have any size.
+ <li> (internally) the external image is simply copied to the internal
+ when a setImage happens. During a resizeEvent no painting is done
+ a paintEvent is expected to follow anyway.
+ </ul>
+
+ \sa TEScreen \sa Emulation
+*/
+
+/* FIXME:
+ - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent
+ - 'font_a' not used in mouse events
+ - add destructor
+*/
+
+/* TODO
+ - evtl. be sensitive to `paletteChange' while using default colors.
+ - set different 'rounding' styles? I.e. have a mode to show clipped chars?
+*/
+
+// #include "config.h"
+#include "TEWidget.h"
+#include "session.h"
+
+#include <qcursor.h>
+#include <qregexp.h>
+#include <qpainter.h>
+#include <qclipboard.h>
+#include <qstyle.h>
+#include <qfile.h>
+#include <qdragobject.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include <assert.h>
+
+// #include "TEWidget.moc"
+//#include <kapp.h>
+//#include <kcursor.h>
+//#include <kurl.h>
+//#include <kdebug.h>
+//#include <klocale.h>
+
+#define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__)
+#define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); }
+
+#define loc(X,Y) ((Y)*columns+(X))
+
+//FIXME: the rim should normally be 1, 0 only when running in full screen mode.
+#define rimX 0 // left/right rim width
+#define rimY 0 // top/bottom rim high
+
+#define SCRWIDTH 16 // width of the scrollbar
+
+#define yMouseScroll 1
+// scroll increment used when dragging selection at top/bottom of window.
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Colors */
+/* */
+/* ------------------------------------------------------------------------- */
+
+//FIXME: the default color table is in session.C now.
+// We need a way to get rid of this one, here.
+static const ColorEntry base_color_table[TABLE_COLORS] =
+// The following are almost IBM standard color codes, with some slight
+// gamma correction for the dim colors to compensate for bright X screens.
+// It contains the 8 ansiterm/xterm colors in 2 intensities.
+{
+ // Fixme: could add faint colors here, also.
+ // normal
+ ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback
+ ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red
+ ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow
+ ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta
+ ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White
+ // intensiv
+ ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ),
+ ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ),
+ ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ),
+ ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0xFF), 0, 0 ),
+ ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 )
+};
+
+/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb)
+
+ Code 0 1 2 3 4 5 6 7
+ ----------- ------- ------- ------- ------- ------- ------- ------- -------
+ ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White
+ IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White
+*/
+
+QColor TEWidget::getDefaultBackColor()
+{
+ return color_table[DEFAULT_BACK_COLOR].color;
+}
+
+const ColorEntry* TEWidget::getColorTable() const
+{
+ return color_table;
+}
+
+const QPixmap *TEWidget::backgroundPixmap()
+{
+ static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm");
+ const QPixmap *pm = bg;
+ return pm;
+}
+
+void TEWidget::setColorTable(const ColorEntry table[])
+{
+ for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i];
+
+ const QPixmap* pm = backgroundPixmap();
+ if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color);
+ update();
+}
+
+//FIXME: add backgroundPixmapChanged.
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Font */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*
+ The VT100 has 32 special graphical characters. The usual vt100 extended
+ xterm fonts have these at 0x00..0x1f.
+
+ QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals
+ come in here as proper unicode characters.
+
+ We treat non-iso10646 fonts as VT100 extended and do the requiered mapping
+ from unicode to 0x00..0x1f. The remaining translation is then left to the
+ QCodec.
+*/
+
+// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i.
+
+unsigned short vt100_graphics[32] =
+{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15
+ 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0,
+ 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c,
+ 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534,
+ 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7
+};
+
+static QChar vt100extended(QChar c)
+{
+ switch (c.unicode())
+ {
+ case 0x25c6 : return 1;
+ case 0x2592 : return 2;
+ case 0x2409 : return 3;
+ case 0x240c : return 4;
+ case 0x240d : return 5;
+ case 0x240a : return 6;
+ case 0x00b0 : return 7;
+ case 0x00b1 : return 8;
+ case 0x2424 : return 9;
+ case 0x240b : return 10;
+ case 0x2518 : return 11;
+ case 0x2510 : return 12;
+ case 0x250c : return 13;
+ case 0x2514 : return 14;
+ case 0x253c : return 15;
+ case 0xf800 : return 16;
+ case 0xf801 : return 17;
+ case 0x2500 : return 18;
+ case 0xf803 : return 19;
+ case 0xf804 : return 20;
+ case 0x251c : return 21;
+ case 0x2524 : return 22;
+ case 0x2534 : return 23;
+ case 0x252c : return 24;
+ case 0x2502 : return 25;
+ case 0x2264 : return 26;
+ case 0x2265 : return 27;
+ case 0x03c0 : return 28;
+ case 0x2260 : return 29;
+ case 0x00a3 : return 30;
+ case 0x00b7 : return 31;
+ }
+ return c;
+}
+
+static QChar identicalMap(QChar c)
+{
+ return c;
+}
+
+void TEWidget::fontChange(const QFont &)
+{
+ QFontMetrics fm(font());
+ font_h = fm.height();
+ font_w = fm.maxWidth();
+ font_a = fm.ascent();
+//printf("font_h: %d\n",font_h);
+//printf("font_w: %d\n",font_w);
+//printf("font_a: %d\n",font_a);
+//printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii());
+//printf("rawname: %s\n",font().rawName().ascii());
+ fontMap =
+#if QT_VERSION < 300
+ strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646")
+ ? vt100extended
+ :
+#endif
+ identicalMap;
+ propagateSize();
+ update();
+}
+
+void TEWidget::setVTFont(const QFont& f)
+{
+ QFrame::setFont(f);
+}
+
+QFont TEWidget::getVTFont()
+{
+ return font();
+}
+
+void TEWidget::setFont(const QFont &)
+{
+ // ignore font change request if not coming from konsole itself
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Constructor / Destructor */
+/* */
+/* ------------------------------------------------------------------------- */
+
+TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name)
+{
+#ifndef QT_NO_CLIPBOARD
+ cb = QApplication::clipboard();
+ QObject::connect( (QObject*)cb, SIGNAL(dataChanged()),
+ this, SLOT(onClearSelection()) );
+#endif
+
+ scrollbar = new QScrollBar(this);
+ scrollbar->setCursor( arrowCursor );
+ connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int)));
+ scrollLoc = SCRNONE;
+
+ blinkT = new QTimer(this);
+ connect(blinkT, SIGNAL(timeout()), this, SLOT(blinkEvent()));
+ // blinking = FALSE;
+ blinking = TRUE;
+
+ resizing = FALSE;
+ actSel = 0;
+ image = 0;
+ lines = 1;
+ columns = 1;
+ font_w = 1;
+ font_h = 1;
+ font_a = 1;
+ word_selection_mode = FALSE;
+
+ setMouseMarks(TRUE);
+ setVTFont( QFont("fixed") );
+ setColorTable(base_color_table); // init color table
+
+ qApp->installEventFilter( this ); //FIXME: see below
+// KCursor::setAutoHideCursor( this, true );
+
+ // Init DnD ////////////////////////////////////////////////////////////////
+ currentSession = NULL;
+// setAcceptDrops(true); // attempt
+// m_drop = new QPopupMenu(this);
+// m_drop->insertItem( QString("Paste"), 0);
+// m_drop->insertItem( QString("cd"), 1);
+// connect(m_drop, SIGNAL(activated(int)), SLOT(drop_menu_activated(int)));
+
+ // we need focus so that the auto-hide cursor feature works
+ setFocus();
+ setFocusPolicy( WheelFocus );
+}
+
+//FIXME: make proper destructor
+// Here's a start (David)
+TEWidget::~TEWidget()
+{
+ qApp->removeEventFilter( this );
+ if (image) free(image);
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Display Operations */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*!
+ attributed string draw primitive
+*/
+
+void TEWidget::drawAttrStr(QPainter &paint, QRect rect,
+ QString& str, ca attr, BOOL pm, BOOL clear)
+{
+ if (pm && color_table[attr.b].transparent)
+ {
+ paint.setBackgroundMode( TransparentMode );
+ if (clear) erase(rect);
+ }
+ else
+ {
+ if (blinking)
+ paint.fillRect(rect, color_table[attr.b].color);
+ else
+ {
+ paint.setBackgroundMode( OpaqueMode );
+ paint.setBackgroundColor( color_table[attr.b].color );
+ }
+ }
+
+ if (color_table[attr.f].bold)
+ paint.setPen(QColor( 0x8F, 0x00, 0x00 ));
+ else
+ paint.setPen(color_table[attr.f].color);
+
+ paint.drawText(rect.x(),rect.y()+font_a, str);
+
+ if (attr.r & RE_UNDERLINE)
+ paint.drawLine(rect.left(), rect.y()+font_a+1, rect.right(),rect.y()+font_a+1 );
+}
+
+/*!
+ The image can only be set completely.
+
+ The size of the new image may or may not match the size of the widget.
+*/
+
+void TEWidget::setImage(const ca* const newimg, int lines, int columns)
+{ int y,x,len;
+ const QPixmap* pm = backgroundPixmap();
+ QPainter paint;
+ setUpdatesEnabled(FALSE);
+ paint.begin( this );
+HCNT("setImage");
+
+ QPoint tL = contentsRect().topLeft();
+ int tLx = tL.x();
+ int tLy = tL.y();
+ hasBlinker = FALSE;
+
+ int cf = -1; // undefined
+ int cb = -1; // undefined
+ int cr = -1; // undefined
+
+ int lins = QMIN(this->lines, QMAX(0,lines ));
+ int cols = QMIN(this->columns,QMAX(0,columns));
+ QChar *disstrU = new QChar[cols];
+
+//{ static int cnt = 0; printf("setImage %d\n",cnt++); }
+ for (y = 0; y < lins; y++)
+ {
+ const ca* lcl = &image[y*this->columns];
+ const ca* const ext = &newimg[y*columns];
+ if (!resizing) // not while resizing, we're expecting a paintEvent
+ for (x = 0; x < cols; x++)
+ {
+ hasBlinker |= (ext[x].r & RE_BLINK);
+ if (ext[x] != lcl[x])
+ {
+ cr = ext[x].r;
+ cb = ext[x].b;
+ if (ext[x].f != cf) cf = ext[x].f;
+ int lln = cols - x;
+ disstrU[0] = fontMap(ext[x+0].c);
+ for (len = 1; len < lln; len++)
+ {
+ if (ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr ||
+ ext[x+len] == lcl[x+len] )
+ break;
+ disstrU[len] = fontMap(ext[x+len].c);
+ }
+ QString unistr(disstrU,len);
+ drawAttrStr(paint,
+ QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h),
+ unistr, ext[x], pm != NULL, true);
+ x += len - 1;
+ }
+ }
+ // finally, make `image' become `newimg'.
+ memcpy((void*)lcl,(const void*)ext,cols*sizeof(ca));
+ }
+ drawFrame( &paint );
+ paint.end();
+ setUpdatesEnabled(TRUE);
+ if ( hasBlinker && !blinkT->isActive()) blinkT->start(1000); // 1000 ms
+ if (!hasBlinker && blinkT->isActive()) { blinkT->stop(); blinking = FALSE; }
+ delete [] disstrU;
+}
+
+// paint Event ////////////////////////////////////////////////////
+
+/*!
+ The difference of this routine vs. the `setImage' is,
+ that the drawing does not include a difference analysis
+ between the old and the new image. Instead, the internal
+ image is used and the painting bound by the PaintEvent box.
+*/
+
+void TEWidget::paintEvent( QPaintEvent* pe )
+{
+
+//{ static int cnt = 0; printf("paint %d\n",cnt++); }
+ const QPixmap* pm = backgroundPixmap();
+ QPainter paint;
+ setUpdatesEnabled(FALSE);
+ paint.begin( this );
+ paint.setBackgroundMode( TransparentMode );
+HCNT("paintEvent");
+
+ // Note that the actual widget size can be slightly larger
+ // that the image (the size is truncated towards the smaller
+ // number of characters in `resizeEvent'. The paint rectangle
+ // can thus be larger than the image, but less then the size
+ // of one character.
+
+ QRect rect = pe->rect().intersect(contentsRect());
+
+ QPoint tL = contentsRect().topLeft();
+ int tLx = tL.x();
+ int tLy = tL.y();
+
+ int lux = QMIN(columns-1, QMAX(0,(rect.left() - tLx - blX ) / font_w));
+ int luy = QMIN(lines-1, QMAX(0,(rect.top() - tLy - bY ) / font_h));
+ int rlx = QMIN(columns-1, QMAX(0,(rect.right() - tLx - blX ) / font_w));
+ int rly = QMIN(lines-1, QMAX(0,(rect.bottom() - tLy - bY ) / font_h));
+
+ /*
+ printf("paintEvent: %d..%d, %d..%d (%d..%d, %d..%d)\n",lux,rlx,luy,rly,
+ rect.left(), rect.right(), rect.top(), rect.bottom());
+ */
+
+ // if (pm != NULL && color_table[image->b].transparent)
+ // erase(rect);
+ // BL: I have no idea why we need this, and it breaks the refresh.
+
+ QChar *disstrU = new QChar[columns];
+ for (int y = luy; y <= rly; y++)
+ for (int x = lux; x <= rlx; x++)
+ {
+ int len = 1;
+ disstrU[0] = fontMap(image[loc(x,y)].c);
+ int cf = image[loc(x,y)].f;
+ int cb = image[loc(x,y)].b;
+ int cr = image[loc(x,y)].r;
+ while (x+len <= rlx &&
+ image[loc(x+len,y)].f == cf &&
+ image[loc(x+len,y)].b == cb &&
+ image[loc(x+len,y)].r == cr )
+ {
+ disstrU[len] = fontMap(image[loc(x+len,y)].c);
+ len += 1;
+ }
+ QString unistr(disstrU,len);
+ drawAttrStr(paint,
+ QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h),
+ unistr, image[loc(x,y)], pm != NULL, false);
+ x += len - 1;
+ }
+ delete [] disstrU;
+ drawFrame( &paint );
+ paint.end();
+ setUpdatesEnabled(TRUE);
+}
+
+void TEWidget::blinkEvent()
+{
+ blinking = !blinking;
+ repaint(FALSE);
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Resizing */
+/* */
+/* ------------------------------------------------------------------------- */
+
+void TEWidget::resizeEvent(QResizeEvent* ev)
+{
+ //printf("resize: %d,%d\n",ev->size().width(),ev->size().height());
+ //printf("approx: %d,%d\n",ev->size().width()/font_w,ev->size().height()/font_h);
+ //printf("leaves: %d,%d\n",ev->size().width()%font_w,ev->size().height()%font_h);
+ //printf("curren: %d,%d\n",width(),height());
+HCNT("resizeEvent");
+
+ // see comment in `paintEvent' concerning the rounding.
+ //FIXME: could make a routine here; check width(),height()
+ assert(ev->size().width() == width());
+ assert(ev->size().height() == height());
+
+ propagateSize();
+}
+
+void TEWidget::propagateSize()
+{
+ ca* oldimg = image;
+ int oldlin = lines;
+ int oldcol = columns;
+ makeImage();
+ // we copy the old image to reduce flicker
+ int lins = QMIN(oldlin,lines);
+ int cols = QMIN(oldcol,columns);
+ if (oldimg)
+ {
+ for (int lin = 0; lin < lins; lin++)
+ memcpy((void*)&image[columns*lin],
+ (void*)&oldimg[oldcol*lin],cols*sizeof(ca));
+ free(oldimg); //FIXME: try new,delete
+ }
+ else
+ clearImage();
+
+ //NOTE: control flows from the back through the chest right into the eye.
+ // `emu' will call back via `setImage'.
+
+ resizing = TRUE;
+ emit changedImageSizeSignal(lines, columns); // expose resizeEvent
+ resizing = FALSE;
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Scrollbar */
+/* */
+/* ------------------------------------------------------------------------- */
+
+void TEWidget::scrollChanged(int)
+{
+ emit changedHistoryCursor(scrollbar->value()); //expose
+}
+
+void TEWidget::setScroll(int cursor, int slines)
+{
+ disconnect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int)));
+ scrollbar->setRange(0,slines);
+ scrollbar->setSteps(1,lines);
+ scrollbar->setValue(cursor);
+ connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int)));
+}
+
+void TEWidget::setScrollbarLocation(int loc)
+{
+ if (scrollLoc == loc) return; // quickly
+ scrollLoc = loc;
+ propagateSize();
+ update();
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Mouse */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*!
+ Three different operations can be performed using the mouse, and the
+ routines in this section serve all of them:
+
+ 1) The press/release events are exposed to the application
+ 2) Marking (press and move left button) and Pasting (press middle button)
+ 3) The right mouse button is used from the configuration menu
+
+ NOTE: During the marking process we attempt to keep the cursor within
+ the bounds of the text as being displayed by setting the mouse position
+ whenever the mouse has left the text area.
+
+ Two reasons to do so:
+ 1) QT does not allow the `grabMouse' to confine-to the TEWidget.
+ Thus a `XGrapPointer' would have to be used instead.
+ 2) Even if so, this would not help too much, since the text area
+ of the TEWidget is normally not identical with it's bounds.
+
+ The disadvantage of the current handling is, that the mouse can visibly
+ leave the bounds of the widget and is then moved back. Because of the
+ current construction, and the reasons mentioned above, we cannot do better
+ without changing the overall construction.
+*/
+
+/*!
+*/
+
+void TEWidget::mousePressEvent(QMouseEvent* ev)
+{
+//printf("press [%d,%d] %d\n",ev->x()/font_w,ev->y()/font_h,ev->button());
+ if ( !contentsRect().contains(ev->pos()) ) return;
+ QPoint tL = contentsRect().topLeft();
+ int tLx = tL.x();
+ int tLy = tL.y();
+
+ word_selection_mode = FALSE;
+
+//printf("press top left [%d,%d] by=%d\n",tLx,tLy, bY);
+ if ( ev->button() == LeftButton)
+ {
+ QPoint pos = QPoint((ev->x()-tLx-blX)/font_w,(ev->y()-tLy-bY)/font_h);
+
+ if ( ev->state() & ControlButton ) preserve_line_breaks = FALSE ;
+
+ if (mouse_marks || (ev->state() & ShiftButton))
+ {
+ emit clearSelectionSignal();
+ iPntSel = pntSel = pos;
+ actSel = 1; // left mouse button pressed but nothing selected yet.
+ grabMouse( /*crossCursor*/ ); // handle with care!
+ }
+ else
+ {
+ emit mouseSignal( 0, pos.x() + 1, pos.y() + 1 ); // left button
+ }
+ }
+ if ( ev->button() == MidButton )
+ {
+ emitSelection();
+ }
+ if ( ev->button() == RightButton ) // Configure
+ {
+ emit configureRequest( this, ev->state()&(ShiftButton|ControlButton), ev->x(), ev->y() );
+ }
+}
+
+void TEWidget::mouseMoveEvent(QMouseEvent* ev)
+{
+ // for auto-hiding the cursor, we need mouseTracking
+ if (ev->state() == NoButton ) return;
+
+ if (actSel == 0) return;
+
+ // don't extend selection while pasting
+ if (ev->state() & MidButton) return;
+
+ //if ( !contentsRect().contains(ev->pos()) ) return;
+ QPoint tL = contentsRect().topLeft();
+ int tLx = tL.x();
+ int tLy = tL.y();
+ int scroll = scrollbar->value();
+
+ // we're in the process of moving the mouse with the left button pressed
+ // the mouse cursor will kept catched within the bounds of the text in
+ // this widget.
+
+ // Adjust position within text area bounds. See FIXME above.
+ QPoint pos = ev->pos();
+ if ( pos.x() < tLx+blX ) pos.setX( tLx+blX );
+ if ( pos.x() > tLx+blX+columns*font_w-1 ) pos.setX( tLx+blX+columns*font_w );
+ if ( pos.y() < tLy+bY ) pos.setY( tLy+bY );
+ if ( pos.y() > tLy+bY+lines*font_h-1 ) pos.setY( tLy+bY+lines*font_h-1 );
+ // check if we produce a mouse move event by this
+ if ( pos != ev->pos() ) cursor().setPos(mapToGlobal(pos));
+
+ if ( pos.y() == tLy+bY+lines*font_h-1 )
+ {
+ scrollbar->setValue(scrollbar->value()+yMouseScroll); // scrollforward
+ }
+ if ( pos.y() == tLy+bY )
+ {
+ scrollbar->setValue(scrollbar->value()-yMouseScroll); // scrollback
+ }
+
+ QPoint here = QPoint((pos.x()-tLx-blX)/font_w,(pos.y()-tLy-bY)/font_h);
+ QPoint ohere;
+ bool swapping = FALSE;
+
+ if ( word_selection_mode )
+ {
+ // Extend to word boundaries
+ int i;
+ int selClass;
+
+ bool left_not_right = ( here.y() < iPntSel.y() ||
+ here.y() == iPntSel.y() && here.x() < iPntSel.x() );
+ bool old_left_not_right = ( pntSel.y() < iPntSel.y() ||
+ pntSel.y() == iPntSel.y() && pntSel.x() < iPntSel.x() );
+ swapping = left_not_right != old_left_not_right;
+
+ // Find left (left_not_right ? from here : from start)
+ QPoint left = left_not_right ? here : iPntSel;
+ i = loc(left.x(),left.y());
+ selClass = charClass(image[i].c);
+ while ( left.x() > 0 && charClass(image[i-1].c) == selClass )
+ { i--; left.rx()--; }
+
+ // Find left (left_not_right ? from start : from here)
+ QPoint right = left_not_right ? iPntSel : here;
+ i = loc(right.x(),right.y());
+ selClass = charClass(image[i].c);
+ while ( right.x() < columns-1 && charClass(image[i+1].c) == selClass )
+ { i++; right.rx()++; }
+
+ // Pick which is start (ohere) and which is extension (here)
+ if ( left_not_right )
+ {
+ here = left; ohere = right;
+ }
+ else
+ {
+ here = right; ohere = left;
+ }
+ }
+
+ if (here == pntSel && scroll == scrollbar->value()) return; // not moved
+
+ if ( word_selection_mode ) {
+ if ( actSel < 2 || swapping ) {
+ emit beginSelectionSignal( ohere.x(), ohere.y() );
+ }
+ } else if ( actSel < 2 ) {
+ emit beginSelectionSignal( pntSel.x(), pntSel.y() );
+ }
+
+ actSel = 2; // within selection
+ pntSel = here;
+ emit extendSelectionSignal( here.x(), here.y() );
+}
+
+void TEWidget::mouseReleaseEvent(QMouseEvent* ev)
+{
+//printf("release [%d,%d] %d\n",ev->x()/font_w,ev->y()/font_h,ev->button());
+ if ( ev->button() == LeftButton)
+ {
+ if ( actSel > 1 ) emit endSelectionSignal(preserve_line_breaks);
+ preserve_line_breaks = TRUE;
+ actSel = 0;
+
+ //FIXME: emits a release event even if the mouse is
+ // outside the range. The procedure used in `mouseMoveEvent'
+ // applies here, too.
+
+ QPoint tL = contentsRect().topLeft();
+ int tLx = tL.x();
+ int tLy = tL.y();
+
+ if (!mouse_marks && !(ev->state() & ShiftButton))
+ emit mouseSignal( 3, // release
+ (ev->x()-tLx-blX)/font_w + 1,
+ (ev->y()-tLy-bY)/font_h + 1 );
+ releaseMouse();
+ }
+}
+
+void TEWidget::mouseDoubleClickEvent(QMouseEvent* ev)
+{
+ if ( ev->button() != LeftButton) return;
+
+ QPoint tL = contentsRect().topLeft();
+ int tLx = tL.x();
+ int tLy = tL.y();
+ QPoint pos = QPoint((ev->x()-tLx-blX)/font_w,(ev->y()-tLy-bY)/font_h);
+
+ // pass on double click as two clicks.
+ if (!mouse_marks && !(ev->state() & ShiftButton))
+ {
+ emit mouseSignal( 0, pos.x()+1, pos.y()+1 ); // left button
+ emit mouseSignal( 3, pos.x()+1, pos.y()+1 ); // release
+ emit mouseSignal( 0, pos.x()+1, pos.y()+1 ); // left button
+ return;
+ }
+
+
+ emit clearSelectionSignal();
+ QPoint bgnSel = pos;
+ QPoint endSel = QPoint((ev->x()-tLx-blX)/font_w,(ev->y()-tLy-bY)/font_h);
+ int i = loc(bgnSel.x(),bgnSel.y());
+ iPntSel = bgnSel;
+
+ word_selection_mode = TRUE;
+
+ // find word boundaries...
+ int selClass = charClass(image[i].c);
+ {
+ // set the start...
+ int x = bgnSel.x();
+ while ( x > 0 && charClass(image[i-1].c) == selClass )
+ { i--; x--; }
+ bgnSel.setX(x);
+ emit beginSelectionSignal( bgnSel.x(), bgnSel.y() );
+
+ // set the end...
+ i = loc( endSel.x(), endSel.y() );
+ x = endSel.x();
+ while( x < columns-1 && charClass(image[i+1].c) == selClass )
+ { i++; x++ ; }
+ endSel.setX(x);
+ actSel = 2; // within selection
+ emit extendSelectionSignal( endSel.x(), endSel.y() );
+ emit endSelectionSignal(preserve_line_breaks);
+ preserve_line_breaks = TRUE;
+ }
+}
+
+void TEWidget::focusInEvent( QFocusEvent * )
+{
+ // do nothing, to prevent repainting
+}
+
+
+void TEWidget::focusOutEvent( QFocusEvent * )
+{
+ // do nothing, to prevent repainting
+}
+
+bool TEWidget::focusNextPrevChild( bool next )
+{
+ if (next)
+ return false; // This disables changing the active part in konqueror
+ // when pressing Tab
+ return QFrame::focusNextPrevChild( next );
+}
+
+
+int TEWidget::charClass(char ch) const
+{
+ // This might seem like overkill, but imagine if ch was a Unicode
+ // character (Qt 2.0 QChar) - it might then be sensible to separate
+ // the different language ranges, etc.
+
+ if ( isspace(ch) ) return ' ';
+
+ static const char *word_characters = ":@-./_~";
+ if ( isalnum(ch) || strchr(word_characters, ch) )
+ return 'a';
+
+ // Everything else is weird
+ return 1;
+}
+
+void TEWidget::setMouseMarks(bool on)
+{
+ mouse_marks = on;
+ setCursor( mouse_marks ? ibeamCursor : arrowCursor );
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Clipboard */
+/* */
+/* ------------------------------------------------------------------------- */
+
+#undef KeyPress
+
+void TEWidget::emitSelection()
+// Paste Clipboard by simulating keypress events
+{
+#ifndef QT_NO_CLIPBOARD
+ QString text = QApplication::clipboard()->text();
+ if ( ! text.isNull() )
+ {
+ text.replace(QRegExp("\n"), "\r");
+ QKeyEvent e(QEvent::KeyPress, 0, -1, 0, text);
+ emit keyPressedSignal(&e); // expose as a big fat keypress event
+ emit clearSelectionSignal();
+ }
+#endif
+}
+
+void TEWidget::emitText(QString text)
+{
+ QKeyEvent e(QEvent::KeyPress, 0, -1, 0, text);
+ emit keyPressedSignal(&e); // expose as a big fat keypress event
+}
+
+void TEWidget::pasteClipboard( )
+{
+ emitSelection();
+}
+
+void TEWidget::setSelection(const QString& t)
+{
+#ifndef QT_NO_CLIPBOARD
+ // Disconnect signal while WE set the clipboard
+ QObject *cb = QApplication::clipboard();
+ QObject::disconnect( cb, SIGNAL(dataChanged()),
+ this, SLOT(onClearSelection()) );
+
+ QApplication::clipboard()->setText(t);
+
+ QObject::connect( cb, SIGNAL(dataChanged()),
+ this, SLOT(onClearSelection()) );
+#endif
+}
+
+void TEWidget::onClearSelection()
+{
+ emit clearSelectionSignal();
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Keyboard */
+/* */
+/* ------------------------------------------------------------------------- */
+
+//FIXME: an `eventFilter' has been installed instead of a `keyPressEvent'
+// due to a bug in `QT' or the ignorance of the author to prevent
+// repaint events being emitted to the screen whenever one leaves
+// or reenters the screen to/from another application.
+//
+// Troll says one needs to change focusInEvent() and focusOutEvent(),
+// which would also let you have an in-focus cursor and an out-focus
+// cursor like xterm does.
+
+// for the auto-hide cursor feature, I added empty focusInEvent() and
+// focusOutEvent() so that update() isn't called.
+// For auto-hide, we need to get keypress-events, but we only get them when
+// we have focus.
+
+void TEWidget::doScroll(int lines)
+{
+ scrollbar->setValue(scrollbar->value()+lines);
+}
+
+bool TEWidget::eventFilter( QObject *obj, QEvent *e )
+{
+ if ( (e->type() == QEvent::Accel ||
+ e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this )
+ {
+ static_cast<QKeyEvent *>( e )->ignore();
+ return true;
+ }
+ if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ )
+ return FALSE; // not us
+ if ( e->type() == QEvent::Wheel)
+ {
+ QApplication::sendEvent(scrollbar, e);
+ }
+
+#ifdef FAKE_CTRL_AND_ALT
+ static bool control = FALSE;
+ static bool alt = FALSE;
+ // Has a keyboard with no CTRL and ALT keys, but we fake it:
+ bool dele=FALSE;
+ if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
+ QKeyEvent* ke = (QKeyEvent*)e;
+ bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat();
+ switch (ke->key()) {
+ case Key_F9: // let this be "Control"
+ control = keydown;
+ e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state());
+ dele=TRUE;
+ break;
+ case Key_F13: // let this be "Alt"
+ alt = keydown;
+ e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state());
+ dele=TRUE;
+ break;
+ default:
+ if ( control ) {
+ int a = toupper(ke->ascii())-64;
+ if ( a >= 0 && a < ' ' ) {
+ e = new QKeyEvent(e->type(), ke->key(),
+ a, ke->state()|ControlButton, QChar(a,0));
+ dele=TRUE;
+ }
+ }
+ if ( alt ) {
+ e = new QKeyEvent(e->type(), ke->key(),
+ ke->ascii(), ke->state()|AltButton, ke->text());
+ dele=TRUE;
+ }
+ }
+ }
+#endif
+
+ if ( e->type() == QEvent::KeyPress )
+ {
+ QKeyEvent* ke = (QKeyEvent*)e;
+
+ actSel=0; // Key stroke implies a screen update, so TEWidget won't
+ // know where the current selection is.
+
+ emit keyPressedSignal(ke); // expose
+ ke->accept();
+#ifdef FAKE_CTRL_AND_ALT
+ if ( dele ) delete e;
+#endif
+ return true; // stop the event
+ }
+ if ( e->type() == QEvent::Enter )
+ {
+ QObject::disconnect( (QObject*)cb, SIGNAL(dataChanged()),
+ this, SLOT(onClearSelection()) );
+ }
+ if ( e->type() == QEvent::Leave )
+ {
+ QObject::connect( (QObject*)cb, SIGNAL(dataChanged()),
+ this, SLOT(onClearSelection()) );
+ }
+ return QFrame::eventFilter( obj, e );
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Frame */
+/* */
+/* ------------------------------------------------------------------------- */
+
+void TEWidget::frameChanged()
+{
+ propagateSize();
+ update();
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Sound */
+/* */
+/* ------------------------------------------------------------------------- */
+
+void TEWidget::Bell()
+{
+ QApplication::beep();
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Auxiluary */
+/* */
+/* ------------------------------------------------------------------------- */
+
+void TEWidget::clearImage()
+// initialize the image
+// for internal use only
+{
+ for (int y = 0; y < lines; y++)
+ for (int x = 0; x < columns; x++)
+ {
+ image[loc(x,y)].c = 0xff; //' ';
+ image[loc(x,y)].f = 0xff; //DEFAULT_FORE_COLOR;
+ image[loc(x,y)].b = 0xff; //DEFAULT_BACK_COLOR;
+ image[loc(x,y)].r = 0xff; //DEFAULT_RENDITION;
+ }
+}
+
+// Create Image ///////////////////////////////////////////////////////
+
+void TEWidget::calcGeometry()
+{
+ //FIXME: set rimX == rimY == 0 when running in full screen mode.
+
+ scrollbar->resize(QApplication::style().scrollBarExtent().width(),
+ contentsRect().height());
+ switch(scrollLoc)
+ {
+ case SCRNONE :
+ columns = ( contentsRect().width() - 2 * rimX ) / font_w;
+ blX = (contentsRect().width() - (columns*font_w) ) / 2;
+ brX = blX;
+ scrollbar->hide();
+ break;
+ case SCRLEFT :
+ columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
+ brX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
+ blX = brX + scrollbar->width();
+ scrollbar->move(contentsRect().topLeft());
+ scrollbar->show();
+ break;
+ case SCRRIGHT:
+ columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
+ blX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
+ brX = blX;
+ scrollbar->move(contentsRect().topRight() - QPoint(scrollbar->width()-1,0));
+ scrollbar->show();
+ break;
+ }
+ //FIXME: support 'rounding' styles
+ lines = ( contentsRect().height() - 2 * rimY ) / font_h;
+ bY = (contentsRect().height() - (lines *font_h)) / 2;
+}
+
+void TEWidget::makeImage()
+//FIXME: rename 'calcGeometry?
+{
+ calcGeometry();
+ image = (ca*) malloc(lines*columns*sizeof(ca));
+ clearImage();
+}
+
+// calculate the needed size
+QSize TEWidget::calcSize(int cols, int lins) const
+{
+ int frw = width() - contentsRect().width();
+ int frh = height() - contentsRect().height();
+ int scw = (scrollLoc==SCRNONE?0:scrollbar->width());
+ return QSize( font_w*cols + 2*rimX + frw + scw, font_h*lins + 2*rimY + frh );
+}
+
+QSize TEWidget::sizeHint() const
+{
+ return size();
+}
+
+void TEWidget::styleChange(QStyle &)
+{
+ propagateSize();
+}
+
+#ifndef QT_NO_DRAGANDDROP
+
+/* --------------------------------------------------------------------- */
+/* */
+/* Drag & Drop */
+/* */
+/* --------------------------------------------------------------------- */
+
+
+void TEWidget::dragEnterEvent(QDragEnterEvent* e)
+{
+ e->accept(QTextDrag::canDecode(e) ||
+ QUriDrag::canDecode(e));
+}
+
+void TEWidget::dropEvent(QDropEvent* event)
+{
+ // The current behaviour when url(s) are dropped is
+ // * if there is only ONE url and if it's a LOCAL one, ask for paste or cd
+ // * in all other cases, just paste
+ // (for non-local ones, or for a list of URLs, 'cd' is nonsense)
+ QStrList strlist;
+ int file_count = 0;
+ dropText = "";
+ bool bPopup = true;
+
+ if(QUriDrag::decode(event, strlist)) {
+ if (strlist.count()) {
+ for(const char* p = strlist.first(); p; p = strlist.next()) {
+ if(file_count++ > 0) {
+ dropText += " ";
+ bPopup = false; // more than one file, don't popup
+ }
+
+/*
+ KURL url(p);
+ if (url.isLocalFile()) {
+ dropText += url.path(); // local URL : remove protocol
+ }
+ else {
+ dropText += url.prettyURL();
+ bPopup = false; // a non-local file, don't popup
+ }
+*/
+
+ }
+
+ if (bPopup)
+ // m_drop->popup(pos() + event->pos());
+ m_drop->popup(mapToGlobal(event->pos()));
+ else
+ {
+ if (currentSession) {
+ currentSession->getEmulation()->sendString(dropText.local8Bit());
+ }
+// kdDebug() << "Drop:" << dropText.local8Bit() << "\n";
+ }
+ }
+ }
+ else if(QTextDrag::decode(event, dropText)) {
+// kdDebug() << "Drop:" << dropText.local8Bit() << "\n";
+ if (currentSession) {
+ currentSession->getEmulation()->sendString(dropText.local8Bit());
+ }
+ // Paste it
+ }
+}
+#endif
+
+
+void TEWidget::drop_menu_activated(int item)
+{
+#ifndef QT_NO_DRAGANDDROP
+ switch (item)
+ {
+ case 0: // paste
+ currentSession->getEmulation()->sendString(dropText.local8Bit());
+// KWM::activate((Window)this->winId());
+ break;
+ case 1: // cd ...
+ currentSession->getEmulation()->sendString("cd ");
+ struct stat statbuf;
+ if ( ::stat( QFile::encodeName( dropText ), &statbuf ) == 0 )
+ {
+ if ( !S_ISDIR(statbuf.st_mode) )
+ {
+/*
+ KURL url;
+ url.setPath( dropText );
+ dropText = url.directory( true, false ); // remove filename
+*/
+ }
+ }
+ dropText.replace(QRegExp(" "), "\\ "); // escape spaces
+ currentSession->getEmulation()->sendString(dropText.local8Bit());
+ currentSession->getEmulation()->sendString("\n");
+// KWM::activate((Window)this->winId());
+ break;
+ }
+#endif
+}
+
diff --git a/core/apps/embeddedkonsole/TEWidget.h b/core/apps/embeddedkonsole/TEWidget.h
new file mode 100644
index 0000000..3f9f4ae
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEWidget.h
@@ -0,0 +1,202 @@
+/* ----------------------------------------------------------------------- */
+/* */
+/* [te_widget.h] Terminal Emulation Widget */
+/* */
+/* ----------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* ----------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef TE_WIDGET_H
+#define TE_WIDGET_H
+
+#include <qwidget.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qcolor.h>
+#include <qkeycode.h>
+#include <qscrollbar.h>
+
+#include <qpopupmenu.h>
+
+#include "TECommon.h"
+
+extern unsigned short vt100_graphics[32];
+
+class TESession;
+
+// class Konsole;
+
+class TEWidget : public QFrame
+// a widget representing attributed text
+{ Q_OBJECT
+
+// friend class Konsole;
+
+public:
+
+ TEWidget(QWidget *parent=0, const char *name=0);
+ virtual ~TEWidget();
+
+public:
+
+ QColor getDefaultBackColor();
+
+ const ColorEntry* getColorTable() const;
+ void setColorTable(const ColorEntry table[]);
+
+ void setScrollbarLocation(int loc);
+ enum { SCRNONE=0, SCRLEFT=1, SCRRIGHT=2 };
+
+ void setScroll(int cursor, int lines);
+ void doScroll(int lines);
+
+ void emitSelection();
+
+public:
+
+ void setImage(const ca* const newimg, int lines, int columns);
+
+ int Lines() { return lines; }
+ int Columns() { return columns; }
+
+ void calcGeometry();
+ void propagateSize();
+ QSize calcSize(int cols, int lins) const;
+
+ QSize sizeHint() const;
+
+public:
+
+ void Bell();
+ void emitText(QString text);
+ void pasteClipboard();
+
+signals:
+
+ void keyPressedSignal(QKeyEvent *e);
+ void mouseSignal(int cb, int cx, int cy);
+ void changedImageSizeSignal(int lines, int columns);
+ void changedHistoryCursor(int value);
+ void configureRequest( TEWidget*, int state, int x, int y );
+
+ void clearSelectionSignal();
+ void beginSelectionSignal( const int x, const int y );
+ void extendSelectionSignal( const int x, const int y );
+ void endSelectionSignal(const BOOL preserve_line_breaks);
+
+
+protected:
+
+ virtual void styleChange( QStyle& );
+
+ bool eventFilter( QObject *, QEvent * );
+
+ void drawAttrStr(QPainter &paint, QRect rect,
+ QString& str, ca attr, BOOL pm, BOOL clear);
+ void paintEvent( QPaintEvent * );
+
+ void resizeEvent(QResizeEvent*);
+
+ void fontChange(const QFont &font);
+ void frameChanged();
+
+ void mouseDoubleClickEvent(QMouseEvent* ev);
+ void mousePressEvent( QMouseEvent* );
+ void mouseReleaseEvent( QMouseEvent* );
+ void mouseMoveEvent( QMouseEvent* );
+
+ void focusInEvent( QFocusEvent * );
+ void focusOutEvent( QFocusEvent * );
+ bool focusNextPrevChild( bool next );
+
+#ifndef QT_NO_DRAGANDDROP
+ // Dnd
+ void dragEnterEvent(QDragEnterEvent* event);
+ void dropEvent(QDropEvent* event);
+#endif
+
+ virtual int charClass(char) const;
+
+ void clearImage();
+
+public:
+ const QPixmap *backgroundPixmap();
+
+ void setSelection(const QString &t);
+
+ virtual void setFont(const QFont &);
+ void setVTFont(const QFont &);
+ QFont getVTFont();
+
+ void setMouseMarks(bool on);
+
+public slots:
+
+ void onClearSelection();
+
+protected slots:
+
+ void scrollChanged(int value);
+ void blinkEvent();
+
+private:
+
+ QChar (*fontMap)(QChar); // possible vt100 font extention
+
+ bool fixed_font; // has fixed pitch
+ int font_h; // height
+ int font_w; // width
+ int font_a; // ascend
+
+ int blX; // actual offset (left)
+ int brX; // actual offset (right)
+ int bY; // actual offset
+
+ int lines;
+ int columns;
+ ca *image; // [lines][columns]
+
+ ColorEntry color_table[TABLE_COLORS];
+
+ BOOL resizing;
+ bool mouse_marks;
+
+ void makeImage();
+
+ QPoint iPntSel; // initial selection point
+ QPoint pntSel; // current selection point
+ int actSel; // selection state
+ BOOL word_selection_mode;
+ BOOL preserve_line_breaks;
+
+ QClipboard* cb;
+ QScrollBar* scrollbar;
+ int scrollLoc;
+
+//#define SCRNONE 0
+//#define SCRLEFT 1
+//#define SCRRIGHT 2
+
+ BOOL blinking; // hide text in paintEvent
+ BOOL hasBlinker; // has characters to blink
+ QTimer* blinkT; // active when hasBlinker
+ QPopupMenu* m_drop;
+ QString dropText;
+ public:
+ // current session in this widget
+ TESession *currentSession;
+private slots:
+ void drop_menu_activated(int item);
+};
+
+#endif // TE_WIDGET_H
diff --git a/core/apps/embeddedkonsole/TEmuVt102.cpp b/core/apps/embeddedkonsole/TEmuVt102.cpp
new file mode 100644
index 0000000..752c49f
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEmuVt102.cpp
@@ -0,0 +1,991 @@
+/* ------------------------------------------------------------------------- */
+/* */
+/* [TEmuVt102.C] VT102 Terminal Emulation */
+/* */
+/* ------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* ------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/*! \class TEmuVt102
+
+ \brief Actual Emulation for Konsole
+
+ \sa TEWidget \sa TEScreen
+*/
+
+#include "TEmuVt102.h"
+#include "TEWidget.h"
+#include "TEScreen.h"
+#include "keytrans.h"
+
+#include <stdio.h>
+#include <unistd.h>
+#include <qkeycode.h>
+#include <qtextcodec.h>
+
+
+/* VT102 Terminal Emulation
+
+ This class puts together the screens, the pty and the widget to a
+ complete terminal emulation. Beside combining it's componentes, it
+ handles the emulations's protocol.
+
+ This module consists of the following sections:
+
+ - Constructor/Destructor
+ - Incoming Bytes Event pipeline
+ - Outgoing Bytes
+ - Mouse Events
+ - Keyboard Events
+ - Modes and Charset State
+ - Diagnostics
+*/
+
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Constructor / Destructor */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*
+ Nothing really intesting happens here.
+*/
+
+/*!
+*/
+
+TEmuVt102::TEmuVt102(TEWidget* gui) : TEmulation(gui)
+{
+ QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)),
+ this,SLOT(onMouse(int,int,int)));
+ initTokenizer();
+ reset();
+}
+
+/*!
+*/
+
+TEmuVt102::~TEmuVt102()
+{
+}
+
+/*!
+*/
+
+void TEmuVt102::reset()
+{
+ resetToken();
+ resetModes();
+ resetCharset(0); screen[0]->reset();
+ resetCharset(1); screen[0]->reset();
+ setCodec(0);
+ setKeytrans("linux.keytab");
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Processing the incoming byte stream */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/* Incoming Bytes Event pipeline
+
+ This section deals with decoding the incoming character stream.
+ Decoding means here, that the stream is first seperated into `tokens'
+ which are then mapped to a `meaning' provided as operations by the
+ `TEScreen' class or by the emulation class itself.
+
+ The pipeline proceeds as follows:
+
+ - Tokenizing the ESC codes (onRcvChar)
+ - VT100 code page translation of plain characters (applyCharset)
+ - Interpretation of ESC codes (tau)
+
+ The escape codes and their meaning are described in the
+ technical reference of this program.
+*/
+
+// Tokens ------------------------------------------------------------------ --
+
+/*
+ Since the tokens are the central notion if this section, we've put them
+ in front. They provide the syntactical elements used to represent the
+ terminals operations as byte sequences.
+
+ They are encodes here into a single machine word, so that we can later
+ switch over them easily. Depending on the token itself, additional
+ argument variables are filled with parameter values.
+
+ The tokens are defined below:
+
+ - CHR - Printable characters (32..255 but DEL (=127))
+ - CTL - Control characters (0..31 but ESC (= 27), DEL)
+ - ESC - Escape codes of the form <ESC><CHR but `[]()+*#'>
+ - ESC_DE - Escape codes of the form <ESC><any of `()+*#%'> C
+ - CSI_PN - Escape codes of the form <ESC>'[' {Pn} ';' {Pn} C
+ - CSI_PS - Escape codes of the form <ESC>'[' {Pn} ';' ... C
+ - CSI_PR - Escape codes of the form <ESC>'[' '?' {Pn} ';' ... C
+ - VT52 - VT52 escape codes
+ - <ESC><Chr>
+ - <ESC>'Y'{Pc}{Pc}
+ - XTE_HA - Xterm hacks <ESC>`]' {Pn} `;' {Text} <BEL>
+ note that this is handled differently
+
+ The last two forms allow list of arguments. Since the elements of
+ the lists are treated individually the same way, they are passed
+ as individual tokens to the interpretation. Further, because the
+ meaning of the parameters are names (althought represented as numbers),
+ they are includes within the token ('N').
+
+*/
+
+#define TY_CONSTR(T,A,N) ( ((((int)N) & 0xffff) << 16) | ((((int)A) & 0xff) << 8) | (((int)T) & 0xff) )
+
+#define TY_CHR___( ) TY_CONSTR(0,0,0)
+#define TY_CTL___(A ) TY_CONSTR(1,A,0)
+#define TY_ESC___(A ) TY_CONSTR(2,A,0)
+#define TY_ESC_CS(A,B) TY_CONSTR(3,A,B)
+#define TY_ESC_DE(A ) TY_CONSTR(4,A,0)
+#define TY_CSI_PS(A,N) TY_CONSTR(5,A,N)
+#define TY_CSI_PN(A ) TY_CONSTR(6,A,0)
+#define TY_CSI_PR(A,N) TY_CONSTR(7,A,N)
+
+#define TY_VT52__(A ) TY_CONSTR(8,A,0)
+
+// Tokenizer --------------------------------------------------------------- --
+
+/* The tokenizers state
+
+ The state is represented by the buffer (pbuf, ppos),
+ and accompanied by decoded arguments kept in (argv,argc).
+ Note that they are kept internal in the tokenizer.
+*/
+
+void TEmuVt102::resetToken()
+{
+ ppos = 0; argc = 0; argv[0] = 0; argv[1] = 0;
+}
+
+void TEmuVt102::addDigit(int dig)
+{
+ argv[argc] = 10*argv[argc] + dig;
+}
+
+void TEmuVt102::addArgument()
+{
+ argc = QMIN(argc+1,MAXARGS-1);
+ argv[argc] = 0;
+}
+
+void TEmuVt102::pushToToken(int cc)
+{
+ pbuf[ppos] = cc;
+ ppos = QMIN(ppos+1,MAXPBUF-1);
+}
+
+// Character Classes used while decoding
+
+#define CTL 1
+#define CHR 2
+#define CPN 4
+#define DIG 8
+#define SCS 16
+#define GRP 32
+
+void TEmuVt102::initTokenizer()
+{ int i; UINT8* s;
+ for(i = 0; i < 256; i++) tbl[ i] = 0;
+ for(i = 0; i < 32; i++) tbl[ i] |= CTL;
+ for(i = 32; i < 256; i++) tbl[ i] |= CHR;
+ for(s = (UINT8*)"@ABCDGHLMPXcdfry"; *s; s++) tbl[*s] |= CPN;
+ for(s = (UINT8*)"0123456789" ; *s; s++) tbl[*s] |= DIG;
+ for(s = (UINT8*)"()+*%" ; *s; s++) tbl[*s] |= SCS;
+ for(s = (UINT8*)"()+*#[]%" ; *s; s++) tbl[*s] |= GRP;
+ resetToken();
+}
+
+/* Ok, here comes the nasty part of the decoder.
+
+ Instead of keeping an explicit state, we deduce it from the
+ token scanned so far. It is then immediately combined with
+ the current character to form a scanning decision.
+
+ This is done by the following defines.
+
+ - P is the length of the token scanned so far.
+ - L (often P-1) is the position on which contents we base a decision.
+ - C is a character or a group of characters (taken from 'tbl').
+
+ Note that they need to applied in proper order.
+*/
+
+#define lec(P,L,C) (p == (P) && s[(L)] == (C))
+#define lun( ) (p == 1 && cc >= 32 )
+#define les(P,L,C) (p == (P) && s[L] < 256 && (tbl[s[(L)]] & (C)) == (C))
+#define eec(C) (p >= 3 && cc == (C))
+#define ees(C) (p >= 3 && cc < 256 && (tbl[ cc ] & (C)) == (C))
+#define eps(C) (p >= 3 && s[2] != '?' && cc < 256 && (tbl[ cc ] & (C)) == (C))
+#define epp( ) (p >= 3 && s[2] == '?' )
+#define egt( ) (p == 3 && s[2] == '>' )
+#define Xpe (ppos>=2 && pbuf[1] == ']' )
+#define Xte (Xpe && cc == 7 )
+#define ces(C) ( cc < 256 && (tbl[ cc ] & (C)) == (C) && !Xte)
+
+#define ESC 27
+#define CNTL(c) ((c)-'@')
+
+// process an incoming unicode character
+
+void TEmuVt102::onRcvChar(int cc)
+{ int i;
+
+ if (cc == 127) return; //VT100: ignore.
+
+ if (ces( CTL))
+ { // DEC HACK ALERT! Control Characters are allowed *within* esc sequences in VT100
+ // This means, they do neither a resetToken nor a pushToToken. Some of them, do
+ // of course. Guess this originates from a weakly layered handling of the X-on
+ // X-off protocol, which comes really below this level.
+ if (cc == CNTL('X') || cc == CNTL('Z') || cc == ESC) resetToken(); //VT100: CAN or SUB
+ if (cc != ESC) { tau( TY_CTL___(cc+'@' ), 0, 0); return; }
+ }
+
+ pushToToken(cc); // advance the state
+
+ int* s = pbuf;
+ int p = ppos;
+
+ if (getMode(MODE_Ansi)) // decide on proper action
+ {
+ if (lec(1,0,ESC)) { return; }
+ if (les(2,1,GRP)) { return; }
+ if (Xte ) { XtermHack(); resetToken(); return; }
+ if (Xpe ) { return; }
+ if (lec(3,2,'?')) { return; }
+ if (lec(3,2,'>')) { return; }
+ if (lun( )) { tau( TY_CHR___(), applyCharset(cc), 0); resetToken(); return; }
+ if (lec(2,0,ESC)) { tau( TY_ESC___(s[1]), 0, 0); resetToken(); return; }
+ if (les(3,1,SCS)) { tau( TY_ESC_CS(s[1],s[2]), 0, 0); resetToken(); return; }
+ if (lec(3,1,'#')) { tau( TY_ESC_DE(s[2]), 0, 0); resetToken(); return; }
+// if (egt( )) { tau( TY_CSI_PG(cc ), '>', 0); resetToken(); return; }
+ if (eps( CPN)) { tau( TY_CSI_PN(cc), argv[0],argv[1]); resetToken(); return; }
+ if (ees( DIG)) { addDigit(cc-'0'); return; }
+ if (eec( ';')) { addArgument(); return; }
+ for (i=0;i<=argc;i++)
+ if (epp( )) tau( TY_CSI_PR(cc,argv[i]), 0, 0); else
+ tau( TY_CSI_PS(cc,argv[i]), 0, 0);
+ resetToken();
+ }
+ else // mode VT52
+ {
+ if (lec(1,0,ESC)) return;
+ if (les(1,0,CHR)) { tau( TY_CHR___( ), s[0], 0); resetToken(); return; }
+ if (lec(2,1,'Y')) return;
+ if (lec(3,1,'Y')) return;
+ if (p < 4) { tau( TY_VT52__(s[1] ), 0, 0); resetToken(); return; }
+ tau( TY_VT52__(s[1] ), s[2],s[3]); resetToken(); return;
+ }
+}
+
+void TEmuVt102::XtermHack()
+{ int i,arg = 0;
+ for (i = 2; i < ppos && '0'<=pbuf[i] && pbuf[i]<'9' ; i++)
+ arg = 10*arg + (pbuf[i]-'0');
+ if (pbuf[i] != ';') { ReportErrorToken(); return; }
+ QChar *str = new QChar[ppos-i-2];
+ for (int j = 0; j < ppos-i-2; j++) str[j] = pbuf[i+1+j];
+ QString unistr(str,ppos-i-2);
+ // arg == 1 doesn't change the title. In XTerm it only changes the icon name
+ // (btw: arg=0 changes title and icon, arg=1 only icon, arg=2 only title
+ if (arg == 0 || arg == 2) emit changeTitle(arg,unistr);
+ delete [] str;
+}
+
+// Interpreting Codes ---------------------------------------------------------
+
+/*
+ Now that the incoming character stream is properly tokenized,
+ meaning is assigned to them. These are either operations of
+ the current screen, or of the emulation class itself.
+
+ The token to be interpreteted comes in as a machine word
+ possibly accompanied by two parameters.
+
+ Likewise, the operations assigned to, come with up to two
+ arguments. One could consider to make up a proper table
+ from the function below.
+
+ The technical reference manual provides more informations
+ about this mapping.
+*/
+
+void TEmuVt102::tau( int token, int p, int q )
+{
+//scan_buffer_report();
+//if (token == TY_CHR___()) printf("%c",p); else
+//printf("tau(%d,%d,%d, %d,%d)\n",(token>>0)&0xff,(token>>8)&0xff,(token>>16)&0xffff,p,q);
+ switch (token)
+ {
+
+ case TY_CHR___( ) : scr->ShowCharacter (p ); break; //UTF16
+
+ // 127 DEL : ignored on input
+
+ case TY_CTL___('@' ) : /* NUL: ignored */ break;
+ case TY_CTL___('A' ) : /* SOH: ignored */ break;
+ case TY_CTL___('B' ) : /* STX: ignored */ break;
+ case TY_CTL___('C' ) : /* ETX: ignored */ break;
+ case TY_CTL___('D' ) : /* EOT: ignored */ break;
+ case TY_CTL___('E' ) : reportAnswerBack ( ); break; //VT100
+ case TY_CTL___('F' ) : /* ACK: ignored */ break;
+ case TY_CTL___('G' ) : gui->Bell ( ); break; //VT100
+ case TY_CTL___('H' ) : scr->BackSpace ( ); break; //VT100
+ case TY_CTL___('I' ) : scr->Tabulate ( ); break; //VT100
+ case TY_CTL___('J' ) : scr->NewLine ( ); break; //VT100
+ case TY_CTL___('K' ) : scr->NewLine ( ); break; //VT100
+ case TY_CTL___('L' ) : scr->NewLine ( ); break; //VT100
+ case TY_CTL___('M' ) : scr->Return ( ); break; //VT100
+
+ case TY_CTL___('N' ) : useCharset ( 1); break; //VT100
+ case TY_CTL___('O' ) : useCharset ( 0); break; //VT100
+
+ case TY_CTL___('P' ) : /* DLE: ignored */ break;
+ case TY_CTL___('Q' ) : /* DC1: XON continue */ break; //VT100
+ case TY_CTL___('R' ) : /* DC2: ignored */ break;
+ case TY_CTL___('S' ) : /* DC3: XOFF halt */ break; //VT100
+ case TY_CTL___('T' ) : /* DC4: ignored */ break;
+ case TY_CTL___('U' ) : /* NAK: ignored */ break;
+ case TY_CTL___('V' ) : /* SYN: ignored */ break;
+ case TY_CTL___('W' ) : /* ETB: ignored */ break;
+ case TY_CTL___('X' ) : scr->ShowCharacter ( 0x2592); break; //VT100
+ case TY_CTL___('Y' ) : /* EM : ignored */ break;
+ case TY_CTL___('Z' ) : scr->ShowCharacter ( 0x2592); break; //VT100
+ case TY_CTL___('[' ) : /* ESC: cannot be seen here. */ break;
+ case TY_CTL___('\\' ) : /* FS : ignored */ break;
+ case TY_CTL___(']' ) : /* GS : ignored */ break;
+ case TY_CTL___('^' ) : /* RS : ignored */ break;
+ case TY_CTL___('_' ) : /* US : ignored */ break;
+
+ case TY_ESC___('D' ) : scr->index ( ); break; //VT100
+ case TY_ESC___('E' ) : scr->NextLine ( ); break; //VT100
+ case TY_ESC___('H' ) : scr->changeTabStop (TRUE ); break; //VT100
+ case TY_ESC___('M' ) : scr->reverseIndex ( ); break; //VT100
+ case TY_ESC___('Z' ) : reportTerminalType ( ); break;
+ case TY_ESC___('c' ) : reset ( ); break;
+
+ case TY_ESC___('n' ) : useCharset ( 2); break;
+ case TY_ESC___('o' ) : useCharset ( 3); break;
+ case TY_ESC___('7' ) : saveCursor ( ); break;
+ case TY_ESC___('8' ) : restoreCursor ( ); break;
+
+ case TY_ESC___('=' ) : setMode (MODE_AppKeyPad); break;
+ case TY_ESC___('>' ) : resetMode (MODE_AppKeyPad); break;
+ case TY_ESC___('<' ) : setMode (MODE_Ansi ); break; //VT100
+
+ case TY_ESC_CS('(', '0') : setCharset (0, '0'); break; //VT100
+ case TY_ESC_CS('(', 'A') : setCharset (0, 'A'); break; //VT100
+ case TY_ESC_CS('(', 'B') : setCharset (0, 'B'); break; //VT100
+
+ case TY_ESC_CS(')', '0') : setCharset (1, '0'); break; //VT100
+ case TY_ESC_CS(')', 'A') : setCharset (1, 'A'); break; //VT100
+ case TY_ESC_CS(')', 'B') : setCharset (1, 'B'); break; //VT100
+
+ case TY_ESC_CS('*', '0') : setCharset (2, '0'); break; //VT100
+ case TY_ESC_CS('*', 'A') : setCharset (2, 'A'); break; //VT100
+ case TY_ESC_CS('*', 'B') : setCharset (2, 'B'); break; //VT100
+
+ case TY_ESC_CS('+', '0') : setCharset (3, '0'); break; //VT100
+ case TY_ESC_CS('+', 'A') : setCharset (3, 'A'); break; //VT100
+ case TY_ESC_CS('+', 'B') : setCharset (3, 'B'); break; //VT100
+
+ case TY_ESC_CS('%', 'G') : setCodec (1 ); break; //LINUX
+ case TY_ESC_CS('%', '@') : setCodec (0 ); break; //LINUX
+
+ case TY_ESC_DE('3' ) : /* IGNORED: double high, top half */ break;
+ case TY_ESC_DE('4' ) : /* IGNORED: double high, bottom half */ break;
+ case TY_ESC_DE('5' ) : /* IGNORED: single width, single high*/ break;
+ case TY_ESC_DE('6' ) : /* IGNORED: double width, single high*/ break;
+ case TY_ESC_DE('8' ) : scr->helpAlign ( ); break;
+
+ case TY_CSI_PS('K', 0) : scr->clearToEndOfLine ( ); break;
+ case TY_CSI_PS('K', 1) : scr->clearToBeginOfLine ( ); break;
+ case TY_CSI_PS('K', 2) : scr->clearEntireLine ( ); break;
+ case TY_CSI_PS('J', 0) : scr->clearToEndOfScreen ( ); break;
+ case TY_CSI_PS('J', 1) : scr->clearToBeginOfScreen ( ); break;
+ case TY_CSI_PS('J', 2) : scr->clearEntireScreen ( ); break;
+ case TY_CSI_PS('g', 0) : scr->changeTabStop (FALSE ); break; //VT100
+ case TY_CSI_PS('g', 3) : scr->clearTabStops ( ); break; //VT100
+ case TY_CSI_PS('h', 4) : scr-> setMode (MODE_Insert ); break;
+ case TY_CSI_PS('h', 20) : setMode (MODE_NewLine ); break;
+ case TY_CSI_PS('i', 0) : /* IGNORE: attached printer */ break; //VT100
+ case TY_CSI_PS('l', 4) : scr-> resetMode (MODE_Insert ); break;
+ case TY_CSI_PS('l', 20) : resetMode (MODE_NewLine ); break;
+
+ case TY_CSI_PS('m', 0) : scr->setDefaultRendition ( ); break;
+ case TY_CSI_PS('m', 1) : scr-> setRendition (RE_BOLD ); break; //VT100
+ case TY_CSI_PS('m', 4) : scr-> setRendition (RE_UNDERLINE); break; //VT100
+ case TY_CSI_PS('m', 5) : scr-> setRendition (RE_BLINK ); break; //VT100
+ case TY_CSI_PS('m', 7) : scr-> setRendition (RE_REVERSE ); break;
+ case TY_CSI_PS('m', 10) : /* IGNORED: mapping related */ break; //LINUX
+ case TY_CSI_PS('m', 11) : /* IGNORED: mapping related */ break; //LINUX
+ case TY_CSI_PS('m', 12) : /* IGNORED: mapping related */ break; //LINUX
+ case TY_CSI_PS('m', 22) : scr->resetRendition (RE_BOLD ); break;
+ case TY_CSI_PS('m', 24) : scr->resetRendition (RE_UNDERLINE); break;
+ case TY_CSI_PS('m', 25) : scr->resetRendition (RE_BLINK ); break;
+ case TY_CSI_PS('m', 27) : scr->resetRendition (RE_REVERSE ); break;
+
+ case TY_CSI_PS('m', 30) : scr->setForeColor ( 0); break;
+ case TY_CSI_PS('m', 31) : scr->setForeColor ( 1); break;
+ case TY_CSI_PS('m', 32) : scr->setForeColor ( 2); break;
+ case TY_CSI_PS('m', 33) : scr->setForeColor ( 3); break;
+ case TY_CSI_PS('m', 34) : scr->setForeColor ( 4); break;
+ case TY_CSI_PS('m', 35) : scr->setForeColor ( 5); break;
+ case TY_CSI_PS('m', 36) : scr->setForeColor ( 6); break;
+ case TY_CSI_PS('m', 37) : scr->setForeColor ( 7); break;
+ case TY_CSI_PS('m', 39) : scr->setForeColorToDefault( ); break;
+
+ case TY_CSI_PS('m', 40) : scr->setBackColor ( 0); break;
+ case TY_CSI_PS('m', 41) : scr->setBackColor ( 1); break;
+ case TY_CSI_PS('m', 42) : scr->setBackColor ( 2); break;
+ case TY_CSI_PS('m', 43) : scr->setBackColor ( 3); break;
+ case TY_CSI_PS('m', 44) : scr->setBackColor ( 4); break;
+ case TY_CSI_PS('m', 45) : scr->setBackColor ( 5); break;
+ case TY_CSI_PS('m', 46) : scr->setBackColor ( 6); break;
+ case TY_CSI_PS('m', 47) : scr->setBackColor ( 7); break;
+ case TY_CSI_PS('m', 49) : scr->setBackColorToDefault( ); break;
+
+ case TY_CSI_PS('m', 90) : scr->setForeColor ( 8); break;
+ case TY_CSI_PS('m', 91) : scr->setForeColor ( 9); break;
+ case TY_CSI_PS('m', 92) : scr->setForeColor ( 10); break;
+ case TY_CSI_PS('m', 93) : scr->setForeColor ( 11); break;
+ case TY_CSI_PS('m', 94) : scr->setForeColor ( 12); break;
+ case TY_CSI_PS('m', 95) : scr->setForeColor ( 13); break;
+ case TY_CSI_PS('m', 96) : scr->setForeColor ( 14); break;
+ case TY_CSI_PS('m', 97) : scr->setForeColor ( 15); break;
+
+ case TY_CSI_PS('m', 100) : scr->setBackColor ( 8); break;
+ case TY_CSI_PS('m', 101) : scr->setBackColor ( 9); break;
+ case TY_CSI_PS('m', 102) : scr->setBackColor ( 10); break;
+ case TY_CSI_PS('m', 103) : scr->setBackColor ( 11); break;
+ case TY_CSI_PS('m', 104) : scr->setBackColor ( 12); break;
+ case TY_CSI_PS('m', 105) : scr->setBackColor ( 13); break;
+ case TY_CSI_PS('m', 106) : scr->setBackColor ( 14); break;
+ case TY_CSI_PS('m', 107) : scr->setBackColor ( 15); break;
+
+ case TY_CSI_PS('n', 5) : reportStatus ( ); break;
+ case TY_CSI_PS('n', 6) : reportCursorPosition ( ); break;
+ case TY_CSI_PS('q', 0) : /* IGNORED: LEDs off */ break; //VT100
+ case TY_CSI_PS('q', 1) : /* IGNORED: LED1 on */ break; //VT100
+ case TY_CSI_PS('q', 2) : /* IGNORED: LED2 on */ break; //VT100
+ case TY_CSI_PS('q', 3) : /* IGNORED: LED3 on */ break; //VT100
+ case TY_CSI_PS('q', 4) : /* IGNORED: LED4 on */ break; //VT100
+ case TY_CSI_PS('x', 0) : reportTerminalParms ( 2); break; //VT100
+ case TY_CSI_PS('x', 1) : reportTerminalParms ( 3); break; //VT100
+
+ case TY_CSI_PN('@' ) : scr->insertChars (p ); break;
+ case TY_CSI_PN('A' ) : scr->cursorUp (p ); break; //VT100
+ case TY_CSI_PN('B' ) : scr->cursorDown (p ); break; //VT100
+ case TY_CSI_PN('C' ) : scr->cursorRight (p ); break; //VT100
+ case TY_CSI_PN('D' ) : scr->cursorLeft (p ); break; //VT100
+ case TY_CSI_PN('G' ) : scr->setCursorX (p ); break; //LINUX
+ case TY_CSI_PN('H' ) : scr->setCursorYX (p, q); break; //VT100
+ case TY_CSI_PN('L' ) : scr->insertLines (p ); break;
+ case TY_CSI_PN('M' ) : scr->deleteLines (p ); break;
+ case TY_CSI_PN('P' ) : scr->deleteChars (p ); break;
+ case TY_CSI_PN('X' ) : scr->eraseChars (p ); break;
+ case TY_CSI_PN('c' ) : reportTerminalType ( ); break; //VT100
+ case TY_CSI_PN('d' ) : scr->setCursorY (p ); break; //LINUX
+ case TY_CSI_PN('f' ) : scr->setCursorYX (p, q); break; //VT100
+ case TY_CSI_PN('r' ) : scr->setMargins (p, q); break; //VT100
+ case TY_CSI_PN('y' ) : /* IGNORED: Confidence test */ break; //VT100
+
+ case TY_CSI_PR('h', 1) : setMode (MODE_AppCuKeys); break; //VT100
+ case TY_CSI_PR('l', 1) : resetMode (MODE_AppCuKeys); break; //VT100
+ case TY_CSI_PR('s', 1) : saveMode (MODE_AppCuKeys); break; //FIXME
+ case TY_CSI_PR('r', 1) : restoreMode (MODE_AppCuKeys); break; //FIXME
+
+ case TY_CSI_PR('l', 2) : resetMode (MODE_Ansi ); break; //VT100
+
+ case TY_CSI_PR('h', 3) : setColumns ( 132); break; //VT100
+ case TY_CSI_PR('l', 3) : setColumns ( 80); break; //VT100
+
+ case TY_CSI_PR('h', 4) : /* IGNORED: soft scrolling */ break; //VT100
+ case TY_CSI_PR('l', 4) : /* IGNORED: soft scrolling */ break; //VT100
+
+ case TY_CSI_PR('h', 5) : scr-> setMode (MODE_Screen ); break; //VT100
+ case TY_CSI_PR('l', 5) : scr-> resetMode (MODE_Screen ); break; //VT100
+
+ case TY_CSI_PR('h', 6) : scr-> setMode (MODE_Origin ); break; //VT100
+ case TY_CSI_PR('l', 6) : scr-> resetMode (MODE_Origin ); break; //VT100
+ case TY_CSI_PR('s', 6) : scr-> saveMode (MODE_Origin ); break; //FIXME
+ case TY_CSI_PR('r', 6) : scr->restoreMode (MODE_Origin ); break; //FIXME
+
+ case TY_CSI_PR('h', 7) : scr-> setMode (MODE_Wrap ); break; //VT100
+ case TY_CSI_PR('l', 7) : scr-> resetMode (MODE_Wrap ); break; //VT100
+ case TY_CSI_PR('s', 7) : scr-> saveMode (MODE_Wrap ); break; //FIXME
+ case TY_CSI_PR('r', 7) : scr->restoreMode (MODE_Wrap ); break; //FIXME
+
+ case TY_CSI_PR('h', 8) : /* IGNORED: autorepeat on */ break; //VT100
+ case TY_CSI_PR('l', 8) : /* IGNORED: autorepeat off */ break; //VT100
+
+ case TY_CSI_PR('h', 9) : /* IGNORED: interlace */ break; //VT100
+ case TY_CSI_PR('l', 9) : /* IGNORED: interlace */ break; //VT100
+
+ case TY_CSI_PR('h', 25) : setMode (MODE_Cursor ); break; //VT100
+ case TY_CSI_PR('l', 25) : resetMode (MODE_Cursor ); break; //VT100
+
+ case TY_CSI_PR('h', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
+ case TY_CSI_PR('l', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
+ case TY_CSI_PR('s', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
+ case TY_CSI_PR('r', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
+
+ case TY_CSI_PR('h', 47) : setMode (MODE_AppScreen); break; //VT100
+ case TY_CSI_PR('l', 47) : resetMode (MODE_AppScreen); break; //VT100
+
+ case TY_CSI_PR('h', 1000) : setMode (MODE_Mouse1000); break; //XTERM
+ case TY_CSI_PR('l', 1000) : resetMode (MODE_Mouse1000); break; //XTERM
+ case TY_CSI_PR('s', 1000) : saveMode (MODE_Mouse1000); break; //XTERM
+ case TY_CSI_PR('r', 1000) : restoreMode (MODE_Mouse1000); break; //XTERM
+
+ case TY_CSI_PR('h', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
+ case TY_CSI_PR('l', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
+ case TY_CSI_PR('s', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
+ case TY_CSI_PR('r', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
+
+ case TY_CSI_PR('h', 1047) : setMode (MODE_AppScreen); break; //XTERM
+ case TY_CSI_PR('l', 1047) : resetMode (MODE_AppScreen); break; //XTERM
+
+ //FIXME: Unitoken: save translations
+ case TY_CSI_PR('h', 1048) : saveCursor ( ); break; //XTERM
+ case TY_CSI_PR('l', 1048) : restoreCursor ( ); break; //XTERM
+
+ //FIXME: every once new sequences like this pop up in xterm.
+ // Here's a guess of what they could mean.
+ case TY_CSI_PR('h', 1049) : setMode (MODE_AppScreen); break; //XTERM
+ case TY_CSI_PR('l', 1049) : resetMode (MODE_AppScreen); break; //XTERM
+
+ //FIXME: when changing between vt52 and ansi mode evtl do some resetting.
+ case TY_VT52__('A' ) : scr->cursorUp ( 1); break; //VT52
+ case TY_VT52__('B' ) : scr->cursorDown ( 1); break; //VT52
+ case TY_VT52__('C' ) : scr->cursorRight ( 1); break; //VT52
+ case TY_VT52__('D' ) : scr->cursorLeft ( 1); break; //VT52
+
+ case TY_VT52__('F' ) : setAndUseCharset (0, '0'); break; //VT52
+ case TY_VT52__('G' ) : setAndUseCharset (0, 'B'); break; //VT52
+
+ case TY_VT52__('H' ) : scr->setCursorYX (1,1 ); break; //VT52
+ case TY_VT52__('I' ) : scr->reverseIndex ( ); break; //VT52
+ case TY_VT52__('J' ) : scr->clearToEndOfScreen ( ); break; //VT52
+ case TY_VT52__('K' ) : scr->clearToEndOfLine ( ); break; //VT52
+ case TY_VT52__('Y' ) : scr->setCursorYX (p-31,q-31 ); break; //VT52
+ case TY_VT52__('Z' ) : reportTerminalType ( ); break; //VT52
+ case TY_VT52__('<' ) : setMode (MODE_Ansi ); break; //VT52
+ case TY_VT52__('=' ) : setMode (MODE_AppKeyPad); break; //VT52
+ case TY_VT52__('>' ) : resetMode (MODE_AppKeyPad); break; //VT52
+
+ default : ReportErrorToken(); break;
+ };
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Terminal to Host protocol */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*
+ Outgoing bytes originate from several sources:
+
+ - Replies to Enquieries.
+ - Mouse Events
+ - Keyboard Events
+*/
+
+/*!
+*/
+
+void TEmuVt102::sendString(const char* s)
+{
+ emit sndBlock(s,strlen(s));
+}
+
+// Replies ----------------------------------------------------------------- --
+
+// This section copes with replies send as response to an enquiery control code.
+
+/*!
+*/
+
+void TEmuVt102::reportCursorPosition()
+{ char tmp[20];
+ sprintf(tmp,"\033[%d;%dR",scr->getCursorY()+1,scr->getCursorX()+1);
+ sendString(tmp);
+}
+
+/*
+ What follows here is rather obsolete and faked stuff.
+ The correspondent enquieries are neverthenless issued.
+*/
+
+/*!
+*/
+
+void TEmuVt102::reportTerminalType()
+{
+//FIXME: should change?
+ if (getMode(MODE_Ansi))
+// sendString("\033[?1;2c"); // I'm a VT100 with AP0 //FIXME: send only in response to ^[[0c
+ sendString("\033[>0;115;0c"); // I'm a VT220 //FIXME: send only in response to ^[[>c
+ else
+ sendString("\033/Z"); // I'm a VT52
+}
+
+void TEmuVt102::reportTerminalParms(int p)
+// DECREPTPARM
+{ char tmp[100];
+ sprintf(tmp,"\033[%d;1;1;112;112;1;0x",p); // not really true.
+ sendString(tmp);
+}
+
+/*!
+*/
+
+void TEmuVt102::reportStatus()
+{
+ sendString("\033[0n"); //VT100. Device status report. 0 = Ready.
+}
+
+/*!
+*/
+
+#define ANSWER_BACK "" // This is really obsolete VT100 stuff.
+
+void TEmuVt102::reportAnswerBack()
+{
+ sendString(ANSWER_BACK);
+}
+
+// Mouse Handling ---------------------------------------------------------- --
+
+/*!
+ Mouse clicks are possibly reported to the client
+ application if it has issued interest in them.
+ They are normally consumed by the widget for copy
+ and paste, but may be propagated from the widget
+ when gui->setMouseMarks is set via setMode(MODE_Mouse1000).
+
+ `x',`y' are 1-based.
+ `ev' (event) indicates the button pressed (0-2)
+ or a general mouse release (3).
+*/
+
+void TEmuVt102::onMouse( int cb, int cx, int cy )
+{ char tmp[20];
+ if (!connected) return;
+ sprintf(tmp,"\033[M%c%c%c",cb+040,cx+040,cy+040);
+ sendString(tmp);
+}
+
+// Keyboard Handling ------------------------------------------------------- --
+
+#define encodeMode(M,B) BITS(B,getMode(M))
+#define encodeStat(M,B) BITS(B,((ev->state() & (M)) == (M)))
+
+/*
+ Keyboard event handling has been simplified somewhat by pushing
+ the complications towards a configuration file [see KeyTrans class].
+*/
+
+void TEmuVt102::onKeyPress( QKeyEvent* ev )
+{
+ if (!connected) return; // someone else gets the keys
+
+//printf("State/Key: 0x%04x 0x%04x (%d,%d)\n",ev->state(),ev->key(),ev->text().length(),ev->text().length()?ev->text().ascii()[0]:0);
+
+ // revert to non-history when typing
+ if (scr->getHistCursor() != scr->getHistLines());
+ scr->setHistCursor(scr->getHistLines());
+
+ // lookup in keyboard translation table ...
+ int cmd; const char* txt; int len;
+ if (keytrans->findEntry(ev->key(), encodeMode(MODE_NewLine , BITS_NewLine ) + // OLD,
+ encodeMode(MODE_Ansi , BITS_Ansi ) + // OBSOLETE,
+ encodeMode(MODE_AppCuKeys, BITS_AppCuKeys ) + // VT100 stuff
+ encodeStat(ControlButton , BITS_Control ) +
+ encodeStat(ShiftButton , BITS_Shift ) +
+ encodeStat(AltButton , BITS_Alt ),
+ &cmd, &txt, &len ))
+//printf("cmd: %d, %s, %d\n",cmd,txt,len);
+ switch(cmd) // ... and execute if found.
+ {
+ case CMD_emitSelection : gui->emitSelection(); return;
+ case CMD_scrollPageUp : gui->doScroll(-gui->Lines()/2); return;
+ case CMD_scrollPageDown : gui->doScroll(+gui->Lines()/2); return;
+ case CMD_scrollLineUp : gui->doScroll(-1 ); return;
+ case CMD_scrollLineDown : gui->doScroll(+1 ); return;
+ case CMD_send : emit sndBlock(txt,len); return;
+ case CMD_prevSession : emit prevSession(); return;
+ case CMD_nextSession : emit nextSession(); return;
+ }
+
+ // fall back handling
+ if (!ev->text().isEmpty())
+ {
+ if (ev->state() & AltButton) sendString("\033"); // ESC, this is the ALT prefix
+ QCString s = codec->fromUnicode(ev->text()); // encode for application
+ emit sndBlock(s.data(),s.length()); // we may well have s.length() > 1
+ return;
+ }
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* VT100 Charsets */
+/* */
+/* ------------------------------------------------------------------------- */
+
+// Character Set Conversion ------------------------------------------------ --
+
+/*
+ The processing contains a VT100 specific code translation layer.
+ It's still in use and mainly responsible for the line drawing graphics.
+
+ These and some other glyphs are assigned to codes (0x5f-0xfe)
+ normally occupied by the latin letters. Since this codes also
+ appear within control sequences, the extra code conversion
+ does not permute with the tokenizer and is placed behind it
+ in the pipeline. It only applies to tokens, which represent
+ plain characters.
+
+ This conversion it eventually continued in TEWidget.C, since
+ it might involve VT100 enhanced fonts, which have these
+ particular glyphs allocated in (0x00-0x1f) in their code page.
+*/
+
+#define CHARSET charset[scr==screen[1]]
+
+// Apply current character map.
+
+unsigned short TEmuVt102::applyCharset(unsigned short c)
+{
+ if (CHARSET.graphic && 0x5f <= c && c <= 0x7e) return vt100_graphics[c-0x5f];
+ if (CHARSET.pound && c == '#' ) return 0xa3; //This mode is obsolete
+ return c;
+}
+
+/*
+ "Charset" related part of the emulation state.
+ This configures the VT100 charset filter.
+
+ While most operation work on the current screen,
+ the following two are different.
+*/
+
+void TEmuVt102::resetCharset(int scrno)
+{
+ charset[scrno].cu_cs = 0;
+ strncpy(charset[scrno].charset,"BBBB",4);
+ charset[scrno].sa_graphic = FALSE;
+ charset[scrno].sa_pound = FALSE;
+ charset[scrno].graphic = FALSE;
+ charset[scrno].pound = FALSE;
+}
+
+/*!
+*/
+
+void TEmuVt102::setCharset(int n, int cs) // on both screens.
+{
+ charset[0].charset[n&3] = cs; useCharset(charset[0].cu_cs);
+ charset[1].charset[n&3] = cs; useCharset(charset[1].cu_cs);
+}
+
+/*!
+*/
+
+void TEmuVt102::setAndUseCharset(int n, int cs)
+{
+ CHARSET.charset[n&3] = cs;
+ useCharset(n&3);
+}
+
+/*!
+*/
+
+void TEmuVt102::useCharset(int n)
+{
+ CHARSET.cu_cs = n&3;
+ CHARSET.graphic = (CHARSET.charset[n&3] == '0');
+ CHARSET.pound = (CHARSET.charset[n&3] == 'A'); //This mode is obsolete
+}
+
+/*! Save the cursor position and the rendition attribute settings. */
+
+void TEmuVt102::saveCursor()
+{
+ CHARSET.sa_graphic = CHARSET.graphic;
+ CHARSET.sa_pound = CHARSET.pound; //This mode is obsolete
+ // we are not clear about these
+ //sa_charset = charsets[cScreen->charset];
+ //sa_charset_num = cScreen->charset;
+ scr->saveCursor();
+}
+
+/*! Restore the cursor position and the rendition attribute settings. */
+
+void TEmuVt102::restoreCursor()
+{
+ CHARSET.graphic = CHARSET.sa_graphic;
+ CHARSET.pound = CHARSET.sa_pound; //This mode is obsolete
+ scr->restoreCursor();
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Mode Operations */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*
+ Some of the emulations state is either added to the state of the screens.
+
+ This causes some scoping problems, since different emulations choose to
+ located the mode either to the current screen or to both.
+
+ For strange reasons, the extend of the rendition attributes ranges over
+ all screens and not over the actual screen.
+
+ We decided on the precise precise extend, somehow.
+*/
+
+// "Mode" related part of the state. These are all booleans.
+
+void TEmuVt102::resetModes()
+{
+ resetMode(MODE_Mouse1000); saveMode(MODE_Mouse1000);
+ resetMode(MODE_AppScreen); saveMode(MODE_AppScreen);
+ // here come obsolete modes
+ resetMode(MODE_AppCuKeys); saveMode(MODE_AppCuKeys);
+ resetMode(MODE_NewLine );
+ setMode(MODE_Ansi );
+}
+
+void TEmuVt102::setMode(int m)
+{
+ currParm.mode[m] = TRUE;
+ switch (m)
+ {
+ case MODE_Mouse1000 : gui->setMouseMarks(FALSE);
+ break;
+ case MODE_AppScreen : screen[1]->clearSelection();
+ screen[1]->clearEntireScreen();
+ setScreen(1);
+ break;
+ }
+ if (m < MODES_SCREEN || m == MODE_NewLine)
+ {
+ screen[0]->setMode(m);
+ screen[1]->setMode(m);
+ }
+}
+
+void TEmuVt102::resetMode(int m)
+{
+ currParm.mode[m] = FALSE;
+ switch (m)
+ {
+ case MODE_Mouse1000 : gui->setMouseMarks(TRUE);
+ break;
+ case MODE_AppScreen : screen[0]->clearSelection();
+ setScreen(0);
+ break;
+ }
+ if (m < MODES_SCREEN || m == MODE_NewLine)
+ {
+ screen[0]->resetMode(m);
+ screen[1]->resetMode(m);
+ }
+}
+
+void TEmuVt102::saveMode(int m)
+{
+ saveParm.mode[m] = currParm.mode[m];
+}
+
+void TEmuVt102::restoreMode(int m)
+{
+ if(saveParm.mode[m]) setMode(m); else resetMode(m);
+}
+
+BOOL TEmuVt102::getMode(int m)
+{
+ return currParm.mode[m];
+}
+
+void TEmuVt102::setConnect(bool c)
+{
+ TEmulation::setConnect(c);
+ if (c)
+ { // refresh mouse mode
+ if (getMode(MODE_Mouse1000))
+ setMode(MODE_Mouse1000);
+ else
+ resetMode(MODE_Mouse1000);
+ }
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Diagnostic */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*! shows the contents of the scan buffer.
+
+ This functions is used for diagnostics. It is called by \e ReportErrorToken
+ to inform about strings that cannot be decoded or handled by the emulation.
+
+ \sa ReportErrorToken
+*/
+
+/*!
+*/
+
+static void hexdump(int* s, int len)
+{ int i;
+ for (i = 0; i < len; i++)
+ {
+ if (s[i] == '\\')
+ printf("\\\\");
+ else
+ if ((s[i]) > 32 && s[i] < 127)
+ printf("%c",s[i]);
+ else
+ printf("\\%04x(hex)",s[i]);
+ }
+}
+
+void TEmuVt102::scan_buffer_report()
+{
+ if (ppos == 0 || ppos == 1 && (pbuf[0] & 0xff) >= 32) return;
+ printf("token: "); hexdump(pbuf,ppos); printf("\n");
+}
+
+/*!
+*/
+
+void TEmuVt102::ReportErrorToken()
+{
+ printf("undecodable "); scan_buffer_report();
+}
diff --git a/core/apps/embeddedkonsole/TEmuVt102.h b/core/apps/embeddedkonsole/TEmuVt102.h
new file mode 100644
index 0000000..a448a71
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEmuVt102.h
@@ -0,0 +1,135 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [TEmuVt102.h] X Terminal Emulation */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef VT102EMU_H
+#define VT102EMU_H
+
+#include "TEWidget.h"
+#include "TEScreen.h"
+#include "TEmulation.h"
+#include <qtimer.h>
+#include <stdio.h>
+
+//
+
+#define MODE_AppScreen (MODES_SCREEN+0)
+#define MODE_AppCuKeys (MODES_SCREEN+1)
+#define MODE_AppKeyPad (MODES_SCREEN+2)
+#define MODE_Mouse1000 (MODES_SCREEN+3)
+#define MODE_Ansi (MODES_SCREEN+4)
+#define MODE_total (MODES_SCREEN+5)
+
+struct DECpar
+{
+ BOOL mode[MODE_total];
+};
+
+struct CharCodes
+{
+ // coding info
+ char charset[4]; //
+ int cu_cs; // actual charset.
+ bool graphic; // Some VT100 tricks
+ bool pound ; // Some VT100 tricks
+ bool sa_graphic; // saved graphic
+ bool sa_pound; // saved pound
+};
+
+class TEmuVt102 : public TEmulation
+{ Q_OBJECT
+
+public:
+
+ TEmuVt102(TEWidget* gui);
+ ~TEmuVt102();
+
+public slots: // signals incoming from TEWidget
+
+ void onKeyPress(QKeyEvent*);
+ void onMouse(int cb, int cx, int cy);
+
+signals:
+
+ void changeTitle(int,const QString&);
+ void prevSession();
+ void nextSession();
+
+public:
+
+ void reset();
+
+ void onRcvChar(int cc);
+ void sendString(const char *);
+
+public:
+
+ BOOL getMode (int m);
+
+ void setMode (int m);
+ void resetMode (int m);
+ void saveMode (int m);
+ void restoreMode(int m);
+ void resetModes();
+
+ void setConnect(bool r);
+
+private:
+
+ void resetToken();
+#define MAXPBUF 80
+ void pushToToken(int cc);
+ int pbuf[MAXPBUF]; //FIXME: overflow?
+ int ppos;
+#define MAXARGS 15
+ void addDigit(int dig);
+ void addArgument();
+ int argv[MAXARGS];
+ int argc;
+ void initTokenizer();
+ int tbl[256];
+
+ void scan_buffer_report(); //FIXME: rename
+ void ReportErrorToken(); //FIXME: rename
+
+ void tau(int code, int p, int q);
+ void XtermHack();
+
+ //
+
+ void reportTerminalType();
+ void reportStatus();
+ void reportAnswerBack();
+ void reportCursorPosition();
+ void reportTerminalParms(int p);
+
+protected:
+
+ unsigned short applyCharset(unsigned short c);
+ void setCharset(int n, int cs);
+ void useCharset(int n);
+ void setAndUseCharset(int n, int cs);
+ void saveCursor();
+ void restoreCursor();
+ void resetCharset(int scrno);
+ CharCodes charset[2];
+
+ DECpar currParm;
+ DECpar saveParm;
+};
+
+#endif // ifndef ANSIEMU_H
diff --git a/core/apps/embeddedkonsole/TEmulation.cpp b/core/apps/embeddedkonsole/TEmulation.cpp
new file mode 100644
index 0000000..6f3ad32
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEmulation.cpp
@@ -0,0 +1,363 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [TEmulation.cpp] Terminal Emulation Decoder */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/*! \class TEmulation
+
+ \brief Mediator between TEWidget and TEScreen.
+
+ This class is responsible to scan the escapes sequences of the terminal
+ emulation and to map it to their corresponding semantic complements.
+ Thus this module knows mainly about decoding escapes sequences and
+ is a stateless device w.r.t. the semantics.
+
+ It is also responsible to refresh the TEWidget by certain rules.
+
+ \sa TEWidget \sa TEScreen
+
+ \par A note on refreshing
+
+ Although the modifications to the current screen image could immediately
+ be propagated via `TEWidget' to the graphical surface, we have chosen
+ another way here.
+
+ The reason for doing so is twofold.
+
+ First, experiments show that directly displaying the operation results
+ in slowing down the overall performance of emulations. Displaying
+ individual characters using X11 creates a lot of overhead.
+
+ Second, by using the following refreshing method, the screen operations
+ can be completely separated from the displaying. This greatly simplifies
+ the programmer's task of coding and maintaining the screen operations,
+ since one need not worry about differential modifications on the
+ display affecting the operation of concern.
+
+ We use a refreshing algorithm here that has been adoped from rxvt/kvt.
+
+ By this, refreshing is driven by a timer, which is (re)started whenever
+ a new bunch of data to be interpreted by the emulation arives at `onRcvBlock'.
+ As soon as no more data arrive for `BULK_TIMEOUT' milliseconds, we trigger
+ refresh. This rule suits both bulk display operation as done by curses as
+ well as individual characters typed.
+ (BULK_TIMEOUT < 1000 / max characters received from keyboard per second).
+
+ Additionally, we trigger refreshing by newlines comming in to make visual
+ snapshots of lists as produced by `cat', `ls' and likely programs, thereby
+ producing the illusion of a permanent and immediate display operation.
+
+ As a sort of catch-all needed for cases where none of the above
+ conditions catch, the screen refresh is also triggered by a count
+ of incoming bulks (`bulk_incnt').
+*/
+
+/* FIXME
+ - evtl. the bulk operations could be made more transparent.
+*/
+
+#include "TEmulation.h"
+#include "TEWidget.h"
+#include "TEScreen.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <qkeycode.h>
+
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* TEmulation */
+/* */
+/* ------------------------------------------------------------------------- */
+
+#define CNTL(c) ((c)-'@')
+
+/*!
+*/
+
+TEmulation::TEmulation(TEWidget* gui)
+: decoder((QTextDecoder*)NULL)
+{
+ this->gui = gui;
+
+ screen[0] = new TEScreen(gui->Lines(),gui->Columns());
+ screen[1] = new TEScreen(gui->Lines(),gui->Columns());
+ scr = screen[0];
+
+ bulk_nlcnt = 0; // reset bulk newline counter
+ bulk_incnt = 0; // reset bulk counter
+ connected = FALSE;
+
+ QObject::connect(&bulk_timer, SIGNAL(timeout()), this, SLOT(showBulk()) );
+ QObject::connect(gui,SIGNAL(changedImageSizeSignal(int,int)),
+ this,SLOT(onImageSizeChange(int,int)));
+ QObject::connect(gui,SIGNAL(changedHistoryCursor(int)),
+ this,SLOT(onHistoryCursorChange(int)));
+ QObject::connect(gui,SIGNAL(keyPressedSignal(QKeyEvent*)),
+ this,SLOT(onKeyPress(QKeyEvent*)));
+ QObject::connect(gui,SIGNAL(beginSelectionSignal(const int,const int)),
+ this,SLOT(onSelectionBegin(const int,const int)) );
+ QObject::connect(gui,SIGNAL(extendSelectionSignal(const int,const int)),
+ this,SLOT(onSelectionExtend(const int,const int)) );
+ QObject::connect(gui,SIGNAL(endSelectionSignal(const BOOL)),
+ this,SLOT(setSelection(const BOOL)) );
+ QObject::connect(gui,SIGNAL(clearSelectionSignal()),
+ this,SLOT(clearSelection()) );
+}
+
+/*!
+*/
+
+TEmulation::~TEmulation()
+{
+ delete screen[0];
+ delete screen[1];
+ bulk_timer.stop();
+}
+
+/*! change between primary and alternate screen
+*/
+
+void TEmulation::setScreen(int n)
+{
+ scr = screen[n&1];
+}
+
+void TEmulation::setHistory(bool on)
+{
+ screen[0]->setScroll(on);
+ if (!connected) return;
+ showBulk();
+}
+
+bool TEmulation::history()
+{
+ return screen[0]->hasScroll();
+}
+
+void TEmulation::setCodec(int c)
+{
+ //FIXME: check whether we have to free codec
+ codec = c ? QTextCodec::codecForName("utf8")
+ : QTextCodec::codecForLocale();
+ if (decoder) delete decoder;
+ decoder = codec->makeDecoder();
+}
+
+void TEmulation::setKeytrans(int no)
+{
+ keytrans = KeyTrans::find(no);
+}
+
+void TEmulation::setKeytrans(const char * no)
+{
+ keytrans = KeyTrans::find(no);
+}
+
+// Interpreting Codes ---------------------------------------------------------
+
+/*
+ This section deals with decoding the incoming character stream.
+ Decoding means here, that the stream is first seperated into `tokens'
+ which are then mapped to a `meaning' provided as operations by the
+ `Screen' class.
+*/
+
+/*!
+*/
+
+void TEmulation::onRcvChar(int c)
+// process application unicode input to terminal
+// this is a trivial scanner
+{
+ c &= 0xff;
+ switch (c)
+ {
+ case '\b' : scr->BackSpace(); break;
+ case '\t' : scr->Tabulate(); break;
+ case '\n' : scr->NewLine(); break;
+ case '\r' : scr->Return(); break;
+ case 0x07 : gui->Bell(); break;
+ default : scr->ShowCharacter(c); break;
+ };
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Keyboard Handling */
+/* */
+/* ------------------------------------------------------------------------- */
+
+/*!
+*/
+
+void TEmulation::onKeyPress( QKeyEvent* ev )
+{
+ if (!connected) return; // someone else gets the keys
+ if (scr->getHistCursor() != scr->getHistLines());
+ scr->setHistCursor(scr->getHistLines());
+ if (!ev->text().isEmpty())
+ { // A block of text
+ // Note that the text is proper unicode.
+ // We should do a conversion here, but since this
+ // routine will never be used, we simply emit plain ascii.
+ emit sndBlock(ev->text().ascii(),ev->text().length());
+ }
+ else if (ev->ascii()>0)
+ { unsigned char c[1];
+ c[0] = ev->ascii();
+ emit sndBlock((char*)c,1);
+ }
+}
+
+// Unblocking, Byte to Unicode translation --------------------------------- --
+
+/*
+ We are doing code conversion from locale to unicode first.
+*/
+
+void TEmulation::onRcvBlock(const char *s, int len)
+{
+ bulkStart();
+ bulk_incnt += 1;
+ for (int i = 0; i < len; i++)
+ {
+ QString result = decoder->toUnicode(&s[i],1);
+ int reslen = result.length();
+ for (int j = 0; j < reslen; j++)
+ onRcvChar(result[j].unicode());
+ if (s[i] == '\n') bulkNewline();
+ }
+ bulkEnd();
+}
+
+// Selection --------------------------------------------------------------- --
+
+void TEmulation::onSelectionBegin(const int x, const int y) {
+ if (!connected) return;
+ scr->setSelBeginXY(x,y);
+ showBulk();
+}
+
+void TEmulation::onSelectionExtend(const int x, const int y) {
+ if (!connected) return;
+ scr->setSelExtentXY(x,y);
+ showBulk();
+}
+
+void TEmulation::setSelection(const BOOL preserve_line_breaks) {
+ if (!connected) return;
+ QString t = scr->getSelText(preserve_line_breaks);
+ if (!t.isNull()) gui->setSelection(t);
+}
+
+void TEmulation::clearSelection() {
+ if (!connected) return;
+ scr->clearSelection();
+ showBulk();
+}
+
+// Refreshing -------------------------------------------------------------- --
+
+#define BULK_TIMEOUT 20
+
+/*!
+ called when \n comes in. Evtl. triggers showBulk at endBulk
+*/
+
+void TEmulation::bulkNewline()
+{
+ bulk_nlcnt += 1;
+ bulk_incnt = 0; // reset bulk counter since `nl' rule applies
+}
+
+/*!
+*/
+
+void TEmulation::showBulk()
+{
+ bulk_nlcnt = 0; // reset bulk newline counter
+ bulk_incnt = 0; // reset bulk counter
+ if (connected)
+ {
+ ca* image = scr->getCookedImage(); // get the image
+ gui->setImage(image,
+ scr->getLines(),
+ scr->getColumns()); // actual refresh
+ free(image);
+ //FIXME: check that we do not trigger other draw event here.
+ gui->setScroll(scr->getHistCursor(),scr->getHistLines());
+ }
+}
+
+void TEmulation::bulkStart()
+{
+ if (bulk_timer.isActive()) bulk_timer.stop();
+}
+
+void TEmulation::bulkEnd()
+{
+ if ( bulk_nlcnt > gui->Lines() || bulk_incnt > 20 )
+ showBulk(); // resets bulk_??cnt to 0, too.
+ else
+ bulk_timer.start(BULK_TIMEOUT,TRUE);
+}
+
+void TEmulation::setConnect(bool c)
+{
+ connected = c;
+ if ( connected)
+ {
+ onImageSizeChange(gui->Lines(), gui->Columns());
+ showBulk();
+ }
+ else
+ {
+ scr->clearSelection();
+ }
+}
+
+// ---------------------------------------------------------------------------
+
+/*! triggered by image size change of the TEWidget `gui'.
+
+ This event is simply propagated to the attached screens
+ and to the related serial line.
+*/
+
+void TEmulation::onImageSizeChange(int lines, int columns)
+{
+ if (!connected) return;
+ screen[0]->resizeImage(lines,columns);
+ screen[1]->resizeImage(lines,columns);
+ showBulk();
+ emit ImageSizeChanged(lines,columns); // propagate event to serial line
+}
+
+void TEmulation::onHistoryCursorChange(int cursor)
+{
+ if (!connected) return;
+ scr->setHistCursor(cursor);
+ showBulk();
+}
+
+void TEmulation::setColumns(int columns)
+{
+ //FIXME: this goes strange ways.
+ // Can we put this straight or explain it at least?
+ emit changeColumns(columns);
+}
diff --git a/core/apps/embeddedkonsole/TEmulation.h b/core/apps/embeddedkonsole/TEmulation.h
new file mode 100644
index 0000000..ec15e7a
--- a/dev/null
+++ b/core/apps/embeddedkonsole/TEmulation.h
@@ -0,0 +1,117 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [emulation.h] Fundamental Terminal Emulation */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef EMULATION_H
+#define EMULATION_H
+
+#include "TEWidget.h"
+#include "TEScreen.h"
+#include <qtimer.h>
+#include <stdio.h>
+#include <qtextcodec.h>
+#include "keytrans.h"
+
+class TEmulation : public QObject
+{ Q_OBJECT
+
+public:
+
+ TEmulation(TEWidget* gui);
+ ~TEmulation();
+
+public:
+ virtual void setHistory(bool on);
+ virtual bool history();
+
+public slots: // signals incoming from TEWidget
+
+ virtual void onImageSizeChange(int lines, int columns);
+ virtual void onHistoryCursorChange(int cursor);
+ virtual void onKeyPress(QKeyEvent*);
+
+ virtual void clearSelection();
+ virtual void onSelectionBegin(const int x, const int y);
+ virtual void onSelectionExtend(const int x, const int y);
+ virtual void setSelection(const BOOL preserve_line_breaks);
+
+public slots: // signals incoming from data source
+
+ void onRcvBlock(const char* txt,int len);
+
+signals:
+
+ void sndBlock(const char* txt,int len);
+ void ImageSizeChanged(int lines, int columns);
+ void changeColumns(int columns);
+ void changeTitle(int arg, const char* str);
+
+public:
+
+ virtual void onRcvChar(int);
+
+ virtual void setMode (int) = 0;
+ virtual void resetMode(int) = 0;
+
+ virtual void sendString(const char*) = 0;
+
+ virtual void setConnect(bool r);
+ void setColumns(int columns);
+
+ void setKeytrans(int no);
+ void setKeytrans(const char * no);
+
+protected:
+
+ TEWidget* gui;
+ TEScreen* scr; // referes to one `screen'
+ TEScreen* screen[2]; // 0 = primary, 1 = alternate
+ void setScreen(int n); // set `scr' to `screen[n]'
+
+ bool connected; // communicate with widget
+
+ void setCodec(int c); // codec number, 0 = locale, 1=utf8
+
+ QTextCodec* codec;
+ QTextCodec* localeCodec;
+ QTextDecoder* decoder;
+
+ KeyTrans* keytrans;
+
+// refreshing related material.
+// this is localized in the class.
+private slots: // triggered by timer
+
+ void showBulk();
+
+private:
+
+ void bulkNewline();
+ void bulkStart();
+ void bulkEnd();
+
+private:
+
+ QTimer bulk_timer;
+ int bulk_nlcnt; // bulk newline counter
+ char* SelectedText;
+ int bulk_incnt; // bulk counter
+
+
+};
+
+#endif // ifndef EMULATION_H
diff --git a/core/apps/embeddedkonsole/default.keytab.h b/core/apps/embeddedkonsole/default.keytab.h
new file mode 100644
index 0000000..503ea46
--- a/dev/null
+++ b/core/apps/embeddedkonsole/default.keytab.h
@@ -0,0 +1,103 @@
+ /* generated by '../tests/quote ../other/default.Keytab' */
+
+ "# [default.Keytab] Buildin Keyboard Table\n"
+ "\n"
+ "# --------------------------------------------------------------\n"
+ "#\n"
+ "# This file in included only for reference purposes. \n"
+ "#\n"
+ "# Modifying it does not have any effect (unless you\n"
+ "# derive the default.keytab.h and recompile konsole).\n"
+ "#\n"
+ "# To customize your keyboard, copy this file to something\n"
+ "# ending with .keytab and change it to meet you needs.\n"
+ "#\n"
+ "# --------------------------------------------------------------\n"
+ "\n"
+ "keyboard \"xterm (default)\"\n"
+ "\n"
+ "# --------------------------------------------------------------\n"
+ "#\n"
+ "# The syntax of each entry has the form\n"
+ "#\n"
+ "# \"key\" Keyname { (\"+\"|\"-\") Modename } \":\" (String|Operation)\n"
+ "#\n"
+ "# Keynames are those defined in <qnamespace.h>\n"
+ "# with the \"Qt::Key_\" prefix removed.\n"
+ "#\n"
+ "# Mode names are: Shift, Alt, Control.\n"
+ "#\n"
+ "# If the key is not found here, the text of the\n"
+ "# key event as provided by QT is emitted, possibly\n"
+ "# preceeded by ESC if the Alt key is pressed.\n"
+ "#\n"
+ "# --------------------------------------------------------------\n"
+ "#\n"
+ "# Note that this particular table is a \"risc\" version made to\n"
+ "# ease customization without bothering with obsolete details.\n"
+ "# See VT100.keytab for the more hairy stuff.\n"
+ "#\n"
+ "# --------------------------------------------------------------\n"
+ "\n"
+ "# common keys\n"
+ "\n"
+ "key Escape : \"\\E\"\n"
+ "key Tab : \"\\t\"\n"
+ "\n"
+ "key Return-Alt : \"\\r\"\n"
+ "key Return+Alt : \"\\E\\r\"\n"
+ "\n"
+ "# Backspace and Delete codes are preserving CTRL-H.\n"
+ "\n"
+ "key Backspace : \"\\x7f\"\n"
+ "\n"
+ "# cursor keys\n"
+ "\n"
+ "key Up -Shift : \"\\EOA\"\n"
+ "key Down -Shift : \"\\EOB\"\n"
+ "key Right -Shift : \"\\EOC\"\n"
+ "key Left -Shift : \"\\EOD\"\n"
+ "\n"
+ "# other grey PC keys\n"
+ "\n"
+ "key Enter : \"\\r\"\n"
+ "\n"
+ "key Home : \"\\E[1~\"\n"
+ "key Insert-Shift : \"\\E[2~\"\n"
+ "key Delete : \"\\E[3~\"\n"
+ "key End : \"\\E[4~\"\n"
+ "key Prior -Shift : \"\\E[5~\"\n"
+ "key Next -Shift : \"\\E[6~\"\n"
+ "\n"
+ "# function keys\n"
+ "\n"
+ "key F1 : \"\\E[11~\"\n"
+ "key F2 : \"\\E[12~\"\n"
+ "key F3 : \"\\E[13~\"\n"
+ "key F4 : \"\\E[14~\"\n"
+ "key F5 : \"\\E[15~\"\n"
+ "key F6 : \"\\E[17~\"\n"
+ "key F7 : \"\\E[18~\"\n"
+ "key F8 : \"\\E[19~\"\n"
+ "key F9 : \"\\E[20~\"\n"
+ "key F10 : \"\\E[21~\"\n"
+ "key F11 : \"\\E[23~\"\n"
+ "key F12 : \"\\E[24~\"\n"
+ "\n"
+ "# Work around dead keys\n"
+ "\n"
+ "key Space +Control : \"\\x00\"\n"
+ "\n"
+ "# Some keys are used by konsole to cause operations.\n"
+ "# The scroll* operations refer to the history buffer.\n"
+ "\n"
+ "key Left +Shift : prevSession\n"
+ "key Right +Shift : nextSession\n"
+ "key Up +Shift : scrollLineUp\n"
+ "key Prior +Shift : scrollPageUp\n"
+ "key Down +Shift : scrollLineDown\n"
+ "key Next +Shift : scrollPageDown\n"
+ "key Insert+Shift : emitSelection\n"
+ "\n"
+ "# keypad characters are not offered differently by Qt.\n"
+ ""
diff --git a/core/apps/embeddedkonsole/embeddedkonsole.pro b/core/apps/embeddedkonsole/embeddedkonsole.pro
new file mode 100755
index 0000000..b757ea5
--- a/dev/null
+++ b/core/apps/embeddedkonsole/embeddedkonsole.pro
@@ -0,0 +1,38 @@
+TEMPLATE = app
+
+CONFIG += qt warn_on release
+
+DESTDIR = $(QPEDIR)/bin
+
+HEADERS = TEWidget.h \
+ TEScreen.h \
+ TECommon.h \
+ TEHistory.h \
+ TEmulation.h \
+ TEmuVt102.h \
+ session.h \
+ keytrans.h \
+ konsole.h \
+ MyPty.h
+
+SOURCES = TEScreen.cpp \
+ TEWidget.cpp \
+ TEHistory.cpp \
+ TEmulation.cpp \
+ TEmuVt102.cpp \
+ session.cpp \
+ keytrans.cpp \
+ konsole.cpp \
+ main.cpp \
+ MyPty.cpp
+
+TARGET = embeddedkonsole
+
+INCLUDEPATH += $(QPEDIR)/include
+
+DEPENDPATH += $(QPEDIR)/include
+
+LIBS += -lqpe
+
+REQUIRES = embeddedkonsole
+
diff --git a/core/apps/embeddedkonsole/faded_bg.png b/core/apps/embeddedkonsole/faded_bg.png
new file mode 100644
index 0000000..7dbf6b4
--- a/dev/null
+++ b/core/apps/embeddedkonsole/faded_bg.png
Binary files differ
diff --git a/core/apps/embeddedkonsole/keytrans.cpp b/core/apps/embeddedkonsole/keytrans.cpp
new file mode 100644
index 0000000..d569ae0
--- a/dev/null
+++ b/core/apps/embeddedkonsole/keytrans.cpp
@@ -0,0 +1,706 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [keytrans.C] Keyboard Translation */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+/*
+ The keyboard translation table allows to configure konsoles behavior
+ on key strokes.
+
+ FIXME: some bug crept in, disallowing '\0' to be emitted.
+*/
+
+#include "keytrans.h"
+
+#include <qpe/qpeapplication.h>
+
+#include <qnamespace.h>
+#include <qbuffer.h>
+#include <qobject.h>
+#include <qdict.h>
+#include <qintdict.h>
+#include <qfile.h>
+#include <qglobal.h>
+#include <qdir.h>
+
+//#include <kstddirs.h>
+//nclude <klocale.h>
+
+#include <stdio.h>
+
+
+#undef USE_APPDATA_DIR
+
+
+#define HERE printf("%s(%d): here\n",__FILE__,__LINE__)
+
+/* KeyEntry
+
+ instances represent the individual assignments
+*/
+
+KeyTrans::KeyEntry::KeyEntry(int _ref, int _key, int _bits, int _mask, int _cmd, QString _txt)
+: ref(_ref), key(_key), bits(_bits), mask(_mask), cmd(_cmd), txt(_txt)
+{
+}
+
+KeyTrans::KeyEntry::~KeyEntry()
+{
+}
+
+bool KeyTrans::KeyEntry::matches(int _key, int _bits, int _mask)
+{ int m = mask & _mask;
+ return _key == key && (bits & m) == (_bits & m);
+}
+
+QString KeyTrans::KeyEntry::text()
+{
+ return txt;
+}
+
+/* KeyTrans
+
+ combines the individual assignments to a proper map
+ Takes part in a collection themself.
+*/
+
+KeyTrans::KeyTrans()
+{
+ path = "";
+ numb = 0;
+}
+
+KeyTrans::~KeyTrans()
+{
+}
+
+KeyTrans::KeyEntry* KeyTrans::addEntry(int ref, int key, int bits, int mask, int cmd, QString txt)
+// returns conflicting entry
+{
+ for (QListIterator<KeyEntry> it(table); it.current(); ++it)
+ {
+ if (it.current()->matches(key,bits,mask))
+ {
+ return it.current();
+ }
+ }
+ table.append(new KeyEntry(ref,key,bits,mask,cmd,txt));
+ return (KeyEntry*)NULL;
+}
+
+bool KeyTrans::findEntry(int key, int bits, int* cmd, const char** txt, int* len)
+{
+ for (QListIterator<KeyEntry> it(table); it.current(); ++it)
+ if (it.current()->matches(key,bits,0xffff))
+ {
+ *cmd = it.current()->cmd;
+ *txt = it.current()->txt.ascii();
+ *len = it.current()->txt.length();
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/* ------------------------------------------------------------------------- */
+/* */
+/* Scanner for keyboard configuration */
+/* */
+/* ------------------------------------------------------------------------- */
+
+// regular tokenizer
+/* Tokens
+ - Spaces
+ - Name (A-Za-z0-9)+
+ - String
+ - Opr on of +-:
+*/
+
+#define SYMName 0
+#define SYMString 1
+#define SYMEol 2
+#define SYMEof 3
+#define SYMOpr 4
+#define SYMError 5
+
+#define inRange(L,X,H) ((L <= X) && (X <= H))
+#define isNibble(X) (inRange('A',X,'F')||inRange('a',X,'f')||inRange('0',X,'9'))
+#define convNibble(X) (inRange('0',X,'9')?X-'0':X+10-(inRange('A',X,'F')?'A':'a'))
+
+class KeytabReader
+{
+public:
+ KeytabReader(QString p, QIODevice &d);
+public:
+ void getCc();
+ void getSymbol();
+ void parseTo(KeyTrans* kt);
+ void ReportError(const char* msg);
+ void ReportToken(); // diagnostic
+private:
+ int sym;
+ QString res;
+ int len;
+ int slinno;
+ int scolno;
+private:
+ int cc;
+ int linno;
+ int colno;
+ QIODevice* buf;
+ QString path;
+};
+
+
+KeytabReader::KeytabReader(QString p, QIODevice &d)
+{
+ path = p;
+ buf = &d;
+ cc = 0;
+}
+
+void KeytabReader::getCc()
+{
+ if (cc == '\n') { linno += 1; colno = 0; }
+ if (cc < 0) return;
+ cc = buf->getch();
+ colno += 1;
+}
+
+void KeytabReader::getSymbol()
+{
+ res = ""; len = 0; sym = SYMError;
+ while (cc == ' ') getCc(); // skip spaces
+ if (cc == '#') // skip comment
+ {
+ while (cc != '\n' && cc > 0) getCc();
+ }
+ slinno = linno;
+ scolno = colno;
+ if (cc <= 0)
+ {
+ sym = SYMEof; return; // eos
+ }
+ if (cc == '\n')
+ {
+ getCc();
+ sym = SYMEol; return; // eol
+ }
+ if (inRange('A',cc,'Z')||inRange('a',cc,'z')||inRange('0',cc,'9'))
+ {
+ while (inRange('A',cc,'Z') || inRange('a',cc,'z') || inRange('0',cc,'9'))
+ {
+ res = res + (char)cc;
+ getCc();
+ }
+ sym = SYMName;
+ return;
+ }
+ if (strchr("+-:",cc))
+ {
+ res = "";
+ res = res + (char)cc;
+ getCc();
+ sym = SYMOpr; return;
+ }
+ if (cc == '"')
+ {
+ getCc();
+ while (cc >= ' ' && cc != '"')
+ { int sc;
+ if (cc == '\\') // handle quotation
+ {
+ getCc();
+ switch (cc)
+ {
+ case 'E' : sc = 27; getCc(); break;
+ case 'b' : sc = 8; getCc(); break;
+ case 'f' : sc = 12; getCc(); break;
+ case 't' : sc = 9; getCc(); break;
+ case 'r' : sc = 13; getCc(); break;
+ case 'n' : sc = 10; getCc(); break;
+ case '\\' : // fall thru
+ case '"' : sc = cc; getCc(); break;
+ case 'x' : getCc();
+ sc = 0;
+ if (!isNibble(cc)) return; sc = 16*sc + convNibble(cc); getCc();
+ if (!isNibble(cc)) return; sc = 16*sc + convNibble(cc); getCc();
+ break;
+ default : return;
+ }
+ }
+ else
+ {
+ // regular char
+ sc = cc; getCc();
+ }
+ res = res + (char)sc;
+ len = len + 1;
+ }
+ if (cc != '"') return;
+ getCc();
+ sym = SYMString; return;
+ }
+}
+
+void KeytabReader::ReportToken() // diagnostic
+{
+ printf("sym(%d): ",slinno);
+ switch(sym)
+ {
+ case SYMEol : printf("End of line"); break;
+ case SYMEof : printf("End of file"); break;
+ case SYMName : printf("Name: %s",res.latin1()); break;
+ case SYMOpr : printf("Opr : %s",res.latin1()); break;
+ case SYMString : printf("String len %d,%d ",res.length(),len);
+ for (unsigned i = 0; i < res.length(); i++)
+ printf(" %02x(%c)",res.latin1()[i],res.latin1()[i]>=' '?res.latin1()[i]:'?');
+ break;
+ }
+ printf("\n");
+}
+
+void KeytabReader::ReportError(const char* msg) // diagnostic
+{
+ fprintf(stderr,"%s(%d,%d):error: %s.\n",path.ascii(),slinno,scolno,msg);
+}
+
+// local symbol tables ---------------------------------------------------------------------
+
+class KeyTransSymbols
+{
+public:
+ KeyTransSymbols();
+protected:
+ void defOprSyms();
+ void defModSyms();
+ void defKeySyms();
+ void defKeySym(const char* key, int val);
+ void defOprSym(const char* key, int val);
+ void defModSym(const char* key, int val);
+public:
+ QDict<QObject> keysyms;
+ QDict<QObject> modsyms;
+ QDict<QObject> oprsyms;
+};
+
+static KeyTransSymbols * syms = 0L;
+
+// parser ----------------------------------------------------------------------------------
+/* Syntax
+ - Line :: [KeyName { ("+" | "-") ModeName } ":" (String|CommandName)] "\n"
+ - Comment :: '#' (any but \n)*
+*/
+
+KeyTrans* KeyTrans::fromDevice(QString path, QIODevice &buf)
+{
+ KeyTrans* kt = new KeyTrans;
+ kt->path = path;
+ KeytabReader ktr(path,buf); ktr.parseTo(kt);
+ return kt;
+}
+
+
+#define assertSyntax(Cond,Message) if (!(Cond)) { ReportError(Message); goto ERROR; }
+
+void KeytabReader::parseTo(KeyTrans* kt)
+{
+ // Opening sequence
+
+ buf->open(IO_ReadOnly);
+ getCc();
+ linno = 1;
+ colno = 1;
+ getSymbol();
+
+Loop:
+ // syntax: ["key" KeyName { ("+" | "-") ModeName } ":" String/CommandName] ["#" Comment]
+ if (sym == SYMName && !strcmp(res.latin1(),"keyboard"))
+ {
+ getSymbol(); assertSyntax(sym == SYMString, "Header expected")
+ kt->hdr = res.latin1();
+ getSymbol(); assertSyntax(sym == SYMEol, "Text unexpected")
+ getSymbol(); // eoln
+ goto Loop;
+ }
+ if (sym == SYMName && !strcmp(res.latin1(),"key"))
+ {
+//printf("line %3d: ",startofsym);
+ getSymbol(); assertSyntax(sym == SYMName, "Name expected")
+ assertSyntax(syms->keysyms[res], "Unknown key name")
+ int key = (int)syms->keysyms[res]-1;
+//printf(" key %s (%04x)",res.latin1(),(int)syms->keysyms[res]-1);
+ getSymbol(); // + - :
+ int mode = 0;
+ int mask = 0;
+ while (sym == SYMOpr && (!strcmp(res.latin1(),"+") || !strcmp(res.latin1(),"-")))
+ {
+ bool on = !strcmp(res.latin1(),"+");
+ getSymbol();
+ // mode name
+ assertSyntax(sym == SYMName, "Name expected")
+ assertSyntax(syms->modsyms[res], "Unknown mode name")
+ int bits = (int)syms->modsyms[res]-1;
+ if (mask & (1 << bits))
+ {
+ fprintf(stderr,"%s(%d,%d): mode name used multible times.\n",path.ascii(),slinno,scolno);
+ }
+ else
+ {
+ mode |= (on << bits);
+ mask |= (1 << bits);
+ }
+//printf(", mode %s(%d) %s",res.latin1(),(int)syms->modsyms[res]-1,on?"on":"off");
+ getSymbol();
+ }
+ assertSyntax(sym == SYMOpr && !strcmp(res.latin1(),":"), "':' expected")
+ getSymbol();
+ // string or command
+ assertSyntax(sym == SYMName || sym == SYMString,"Command or string expected")
+ int cmd = 0;
+ if (sym == SYMName)
+ {
+ assertSyntax(syms->oprsyms[res], "Unknown operator name")
+ cmd = (int)syms->oprsyms[res]-1;
+//printf(": do %s(%d)",res.latin1(),(int)syms->oprsyms[res]-1);
+ }
+ if (sym == SYMString)
+ {
+ cmd = CMD_send;
+//printf(": send");
+//for (unsigned i = 0; i < res.length(); i++)
+//printf(" %02x(%c)",res.latin1()[i],res.latin1()[i]>=' '?res.latin1()[i]:'?');
+ }
+//printf(". summary %04x,%02x,%02x,%d\n",key,mode,mask,cmd);
+ KeyTrans::KeyEntry* ke = kt->addEntry(slinno,key,mode,mask,cmd,res);
+ if (ke)
+ {
+ fprintf(stderr,"%s(%d): keystroke already assigned in line %d.\n",path.ascii(),slinno,ke->ref);
+ }
+ getSymbol();
+ assertSyntax(sym == SYMEol, "Unexpected text")
+ goto Loop;
+ }
+ if (sym == SYMEol)
+ {
+ getSymbol();
+ goto Loop;
+ }
+
+ assertSyntax(sym == SYMEof, "Undecodable Line")
+
+ buf->close();
+ return;
+
+ERROR:
+ while (sym != SYMEol && sym != SYMEof) getSymbol(); // eoln
+ goto Loop;
+}
+
+
+KeyTrans* KeyTrans::defaultKeyTrans()
+{
+ QCString txt =
+#include "default.keytab.h"
+ ;
+ QBuffer buf(txt);
+ return fromDevice("[buildin]",buf);
+}
+
+KeyTrans* KeyTrans::fromFile(const char* path)
+{
+ QFile file(path);
+ return fromDevice(path,file);
+}
+
+// local symbol tables ---------------------------------------------------------------------
+// material needed for parsing the config file.
+// This is incomplete work.
+
+void KeyTransSymbols::defKeySym(const char* key, int val)
+{
+ keysyms.insert(key,(QObject*)(val+1));
+}
+
+void KeyTransSymbols::defOprSym(const char* key, int val)
+{
+ oprsyms.insert(key,(QObject*)(val+1));
+}
+
+void KeyTransSymbols::defModSym(const char* key, int val)
+{
+ modsyms.insert(key,(QObject*)(val+1));
+}
+
+void KeyTransSymbols::defOprSyms()
+{
+ // Modifier
+ defOprSym("scrollLineUp", CMD_scrollLineUp );
+ defOprSym("scrollLineDown",CMD_scrollLineDown);
+ defOprSym("scrollPageUp", CMD_scrollPageUp );
+ defOprSym("scrollPageDown",CMD_scrollPageDown);
+ defOprSym("emitSelection", CMD_emitSelection );
+ defOprSym("prevSession", CMD_prevSession );
+ defOprSym("nextSession", CMD_nextSession );
+}
+
+void KeyTransSymbols::defModSyms()
+{
+ // Modifier
+ defModSym("Shift", BITS_Shift );
+ defModSym("Control", BITS_Control );
+ defModSym("Alt", BITS_Alt );
+ // Modes
+ defModSym("BsHack", BITS_BsHack ); // deprecated
+ defModSym("Ansi", BITS_Ansi );
+ defModSym("NewLine", BITS_NewLine );
+ defModSym("AppCuKeys", BITS_AppCuKeys );
+}
+
+void KeyTransSymbols::defKeySyms()
+{
+ // Grey keys
+ defKeySym("Escape", Qt::Key_Escape );
+ defKeySym("Tab", Qt::Key_Tab );
+ defKeySym("Backtab", Qt::Key_Backtab );
+ defKeySym("Backspace", Qt::Key_Backspace );
+ defKeySym("Return", Qt::Key_Return );
+ defKeySym("Enter", Qt::Key_Enter );
+ defKeySym("Insert", Qt::Key_Insert );
+ defKeySym("Delete", Qt::Key_Delete );
+ defKeySym("Pause", Qt::Key_Pause );
+ defKeySym("Print", Qt::Key_Print );
+ defKeySym("SysReq", Qt::Key_SysReq );
+ defKeySym("Home", Qt::Key_Home );
+ defKeySym("End", Qt::Key_End );
+ defKeySym("Left", Qt::Key_Left );
+ defKeySym("Up", Qt::Key_Up );
+ defKeySym("Right", Qt::Key_Right );
+ defKeySym("Down", Qt::Key_Down );
+ defKeySym("Prior", Qt::Key_Prior );
+ defKeySym("Next", Qt::Key_Next );
+ defKeySym("Shift", Qt::Key_Shift );
+ defKeySym("Control", Qt::Key_Control );
+ defKeySym("Meta", Qt::Key_Meta );
+ defKeySym("Alt", Qt::Key_Alt );
+ defKeySym("CapsLock", Qt::Key_CapsLock );
+ defKeySym("NumLock", Qt::Key_NumLock );
+ defKeySym("ScrollLock", Qt::Key_ScrollLock );
+ defKeySym("F1", Qt::Key_F1 );
+ defKeySym("F2", Qt::Key_F2 );
+ defKeySym("F3", Qt::Key_F3 );
+ defKeySym("F4", Qt::Key_F4 );
+ defKeySym("F5", Qt::Key_F5 );
+ defKeySym("F6", Qt::Key_F6 );
+ defKeySym("F7", Qt::Key_F7 );
+ defKeySym("F8", Qt::Key_F8 );
+ defKeySym("F9", Qt::Key_F9 );
+ defKeySym("F10", Qt::Key_F10 );
+ defKeySym("F11", Qt::Key_F11 );
+ defKeySym("F12", Qt::Key_F12 );
+ defKeySym("F13", Qt::Key_F13 );
+ defKeySym("F14", Qt::Key_F14 );
+ defKeySym("F15", Qt::Key_F15 );
+ defKeySym("F16", Qt::Key_F16 );
+ defKeySym("F17", Qt::Key_F17 );
+ defKeySym("F18", Qt::Key_F18 );
+ defKeySym("F19", Qt::Key_F19 );
+ defKeySym("F20", Qt::Key_F20 );
+ defKeySym("F21", Qt::Key_F21 );
+ defKeySym("F22", Qt::Key_F22 );
+ defKeySym("F23", Qt::Key_F23 );
+ defKeySym("F24", Qt::Key_F24 );
+ defKeySym("F25", Qt::Key_F25 );
+ defKeySym("F26", Qt::Key_F26 );
+ defKeySym("F27", Qt::Key_F27 );
+ defKeySym("F28", Qt::Key_F28 );
+ defKeySym("F29", Qt::Key_F29 );
+ defKeySym("F30", Qt::Key_F30 );
+ defKeySym("F31", Qt::Key_F31 );
+ defKeySym("F32", Qt::Key_F32 );
+ defKeySym("F33", Qt::Key_F33 );
+ defKeySym("F34", Qt::Key_F34 );
+ defKeySym("F35", Qt::Key_F35 );
+ defKeySym("Super_L", Qt::Key_Super_L );
+ defKeySym("Super_R", Qt::Key_Super_R );
+ defKeySym("Menu", Qt::Key_Menu );
+ defKeySym("Hyper_L", Qt::Key_Hyper_L );
+ defKeySym("Hyper_R", Qt::Key_Hyper_R );
+
+ // Regular keys
+ defKeySym("Space", Qt::Key_Space );
+ defKeySym("Exclam", Qt::Key_Exclam );
+ defKeySym("QuoteDbl", Qt::Key_QuoteDbl );
+ defKeySym("NumberSign", Qt::Key_NumberSign );
+ defKeySym("Dollar", Qt::Key_Dollar );
+ defKeySym("Percent", Qt::Key_Percent );
+ defKeySym("Ampersand", Qt::Key_Ampersand );
+ defKeySym("Apostrophe", Qt::Key_Apostrophe );
+ defKeySym("ParenLeft", Qt::Key_ParenLeft );
+ defKeySym("ParenRight", Qt::Key_ParenRight );
+ defKeySym("Asterisk", Qt::Key_Asterisk );
+ defKeySym("Plus", Qt::Key_Plus );
+ defKeySym("Comma", Qt::Key_Comma );
+ defKeySym("Minus", Qt::Key_Minus );
+ defKeySym("Period", Qt::Key_Period );
+ defKeySym("Slash", Qt::Key_Slash );
+ defKeySym("0", Qt::Key_0 );
+ defKeySym("1", Qt::Key_1 );
+ defKeySym("2", Qt::Key_2 );
+ defKeySym("3", Qt::Key_3 );
+ defKeySym("4", Qt::Key_4 );
+ defKeySym("5", Qt::Key_5 );
+ defKeySym("6", Qt::Key_6 );
+ defKeySym("7", Qt::Key_7 );
+ defKeySym("8", Qt::Key_8 );
+ defKeySym("9", Qt::Key_9 );
+ defKeySym("Colon", Qt::Key_Colon );
+ defKeySym("Semicolon", Qt::Key_Semicolon );
+ defKeySym("Less", Qt::Key_Less );
+ defKeySym("Equal", Qt::Key_Equal );
+ defKeySym("Greater", Qt::Key_Greater );
+ defKeySym("Question", Qt::Key_Question );
+ defKeySym("At", Qt::Key_At );
+ defKeySym("A", Qt::Key_A );
+ defKeySym("B", Qt::Key_B );
+ defKeySym("C", Qt::Key_C );
+ defKeySym("D", Qt::Key_D );
+ defKeySym("E", Qt::Key_E );
+ defKeySym("F", Qt::Key_F );
+ defKeySym("G", Qt::Key_G );
+ defKeySym("H", Qt::Key_H );
+ defKeySym("I", Qt::Key_I );
+ defKeySym("J", Qt::Key_J );
+ defKeySym("K", Qt::Key_K );
+ defKeySym("L", Qt::Key_L );
+ defKeySym("M", Qt::Key_M );
+ defKeySym("N", Qt::Key_N );
+ defKeySym("O", Qt::Key_O );
+ defKeySym("P", Qt::Key_P );
+ defKeySym("Q", Qt::Key_Q );
+ defKeySym("R", Qt::Key_R );
+ defKeySym("S", Qt::Key_S );
+ defKeySym("T", Qt::Key_T );
+ defKeySym("U", Qt::Key_U );
+ defKeySym("V", Qt::Key_V );
+ defKeySym("W", Qt::Key_W );
+ defKeySym("X", Qt::Key_X );
+ defKeySym("Y", Qt::Key_Y );
+ defKeySym("Z", Qt::Key_Z );
+ defKeySym("BracketLeft", Qt::Key_BracketLeft );
+ defKeySym("Backslash", Qt::Key_Backslash );
+ defKeySym("BracketRight", Qt::Key_BracketRight);
+ defKeySym("AsciiCircum", Qt::Key_AsciiCircum );
+ defKeySym("Underscore", Qt::Key_Underscore );
+ defKeySym("QuoteLeft", Qt::Key_QuoteLeft );
+ defKeySym("BraceLeft", Qt::Key_BraceLeft );
+ defKeySym("Bar", Qt::Key_Bar );
+ defKeySym("BraceRight", Qt::Key_BraceRight );
+ defKeySym("AsciiTilde", Qt::Key_AsciiTilde );
+}
+
+KeyTransSymbols::KeyTransSymbols()
+{
+ defModSyms();
+ defOprSyms();
+ defKeySyms();
+}
+
+// Global material -----------------------------------------------------------
+
+static int keytab_serial = 0; //FIXME: remove,localize
+
+static QIntDict<KeyTrans> * numb2keymap = 0L;
+static QDict<KeyTrans> * path2keymap = 0L;
+
+KeyTrans* KeyTrans::find(int numb)
+{
+ KeyTrans* res = numb2keymap->find(numb);
+ return res ? res : numb2keymap->find(0);
+}
+
+KeyTrans* KeyTrans::find(const char* path)
+{
+ KeyTrans* res = path2keymap->find(path);
+ return res ? res : numb2keymap->find(0);
+}
+
+int KeyTrans::count()
+{
+ return numb2keymap->count();
+}
+
+void KeyTrans::addKeyTrans()
+{
+ this->numb = keytab_serial ++;
+ numb2keymap->insert(numb,this);
+ path2keymap->insert(path,this);
+}
+
+void KeyTrans::loadAll()
+{
+ if (!numb2keymap)
+ numb2keymap = new QIntDict<KeyTrans>;
+ if (!path2keymap)
+ path2keymap = new QDict<KeyTrans>;
+ if (!syms)
+ syms = new KeyTransSymbols;
+
+ defaultKeyTrans()->addKeyTrans();
+
+
+ QString path = QPEApplication::qpeDir() + "etc/keytabs";
+ QDir dir(path);
+ QStringList lst = dir.entryList("*.keytab");
+
+ for(QStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
+ QFile file(path + "/" + *it);
+ KeyTrans* sc = KeyTrans::fromDevice(*it, file);
+ if (sc) {
+ sc->addKeyTrans();
+ }
+ }
+
+}
+
+// Debugging material -----------------------------------------------------------
+/*
+void TestTokenizer(QBuffer &buf)
+{
+ // opening sequence
+
+ buf.open(IO_ReadOnly);
+ cc = buf.getch();
+ lineno = 1;
+
+ // Test tokenizer
+
+ while (getSymbol(buf)) ReportToken();
+
+ buf.close();
+}
+
+void test()
+{
+ // Opening sequence
+
+ QCString txt =
+#include "default.keytab.h"
+ ;
+ QBuffer buf(txt);
+ if (0) TestTokenizer(buf);
+ if (1) { KeyTrans kt; kt.scanTable(buf); }
+}
+*/
diff --git a/core/apps/embeddedkonsole/keytrans.h b/core/apps/embeddedkonsole/keytrans.h
new file mode 100644
index 0000000..ef6ed15
--- a/dev/null
+++ b/core/apps/embeddedkonsole/keytrans.h
@@ -0,0 +1,93 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [keytrans.h] X Terminal Emulation */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole - an X terminal for KDE */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef KEYTRANS_H
+#define KEYTRANS_H
+
+#include <qstring.h>
+#include <qlist.h>
+#include <qiodevice.h>
+
+#define BITS_NewLine 0
+#define BITS_BsHack 1
+#define BITS_Ansi 2
+#define BITS_AppCuKeys 3
+#define BITS_Control 4
+#define BITS_Shift 5
+#define BITS_Alt 6
+#define BITS_COUNT 7
+
+#define CMD_send 0
+#define CMD_emitSelection 1
+#define CMD_scrollPageUp 2
+#define CMD_scrollPageDown 3
+#define CMD_scrollLineUp 4
+#define CMD_scrollLineDown 5
+#define CMD_prevSession 6
+#define CMD_nextSession 7
+
+#define BITS(x,v) ((((v)!=0)<<(x)))
+
+
+class KeyTrans
+{
+public:
+ KeyTrans();
+ ~KeyTrans();
+ static KeyTrans* defaultKeyTrans();
+ static KeyTrans* fromFile(const char* path);
+ static KeyTrans* find(int numb);
+ static KeyTrans* find(const char* path);
+public:
+ static int count();
+ static void loadAll();
+public:
+ bool findEntry(int key, int bits, int* cmd, const char** txt, int* len);
+private:
+ void addKeyTrans();
+ static KeyTrans* fromDevice(QString path, QIODevice &buf);
+public:
+ class KeyEntry
+ {
+ public:
+ KeyEntry(int ref, int key, int bits, int mask, int cmd, QString txt);
+ ~KeyEntry();
+ public:
+ bool matches(int key, int bits, int mask);
+ QString text();
+ public:
+ int ref;
+ private:
+ int key;
+ int bits;
+ int mask;
+ public:
+ int cmd;
+ QString txt;
+ };
+public:
+ KeyEntry* addEntry(int ref, int key, int bits, int mask, int cmd, QString txt);
+private:
+ QList<KeyEntry> table;
+public: //FIXME: we'd do better
+ QString hdr;
+ int numb;
+ QString path;
+};
+
+#endif
diff --git a/core/apps/embeddedkonsole/konsole.cpp b/core/apps/embeddedkonsole/konsole.cpp
new file mode 100644
index 0000000..7253baf
--- a/dev/null
+++ b/core/apps/embeddedkonsole/konsole.cpp
@@ -0,0 +1,512 @@
+/* ---------------------------------------------------------------------- */
+/* */
+/* [main.C] Konsole */
+/* */
+/* ---------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole, an X terminal. */
+/* */
+/* The material contained in here more or less directly orginates from */
+/* kvt, which is copyright (c) 1996 by Matthias Ettrich <ettrich@kde.org> */
+/* */
+/* ---------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#include <qpe/resource.h>
+
+#include <qdir.h>
+#include <qevent.h>
+#include <qdragobject.h>
+#include <qobjectlist.h>
+#include <qtoolbutton.h>
+#include <qpe/qpetoolbar.h>
+#include <qpushbutton.h>
+#include <qfontdialog.h>
+#include <qglobal.h>
+#include <qpainter.h>
+#include <qpe/qpemenubar.h>
+#include <qmessagebox.h>
+#include <qaction.h>
+#include <qapplication.h>
+#include <qfontmetrics.h>
+#include <qcombobox.h>
+#include <qevent.h>
+#include <qtabwidget.h>
+#include <qtabbar.h>
+#include <qpe/config.h>
+
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "konsole.h"
+#include "keytrans.h"
+
+class EKNumTabBar : public QTabBar {
+public:
+ void numberTabs()
+ {
+ // Yes, it really is this messy. QTabWidget needs functions
+ // that provide acces to tabs in a sequential way.
+ int m=INT_MIN;
+ for (int i=0; i<count(); i++) {
+ QTab* left=0;
+ QListIterator<QTab> it(*tabList());
+ int x=INT_MAX;
+ for( QTab* t; (t=it.current()); ++it ) {
+ int tx = t->rect().x();
+ if ( tx<x && tx>m ) {
+ x = tx;
+ left = t;
+ }
+ }
+ if ( left ) {
+ left->setText(QString::number(i+1));
+ m = left->rect().x();
+ }
+ }
+ }
+};
+
+class EKNumTabWidget : public QTabWidget {
+public:
+ EKNumTabWidget(QWidget* parent) : QTabWidget(parent)
+ {
+ }
+
+ void addTab(QWidget* w)
+ {
+ QTab* t = new QTab(QString::number(tabBar()->count()+1));
+ QTabWidget::addTab(w,t);
+ }
+
+ void removeTab(QWidget* w)
+ {
+ removePage(w);
+ ((EKNumTabBar*)tabBar())->numberTabs();
+ }
+};
+
+// This could be configurable or dynamicly generated from the bash history
+// file of the user
+static const char *commonCmds[] =
+{
+ "ls ",
+ //"ls -la ",
+ "cd ",
+ "pwd",
+ //"cat",
+ //"less ",
+ //"vi ",
+ //"man ",
+ "echo ",
+ "set ",
+ //"ps",
+ "ps aux",
+ //"tar",
+ //"tar -zxf",
+ "grep ",
+ //"grep -i",
+ //"mkdir",
+ "cp ",
+ "mv ",
+ "rm ",
+ "rmdir ",
+ //"chmod",
+ //"su",
+// "top",
+ //"find",
+ //"make",
+ //"tail",
+ "cardctl eject",
+ "ifconfig ",
+// "iwconfig eth0 ",
+ "nc localhost 7777",
+ "nc localhost 7776",
+ //"mount /dev/hda1",
+
+/*
+ "gzip",
+ "gunzip",
+ "chgrp",
+ "chown",
+ "date",
+ "dd",
+ "df",
+ "dmesg",
+ "fuser",
+ "hostname",
+ "kill",
+ "killall",
+ "ln",
+ "ping",
+ "mount",
+ "more",
+ "sort",
+ "touch",
+ "umount",
+ "mknod",
+ "netstat",
+*/
+
+ "exit",
+ NULL
+};
+
+
+Konsole::Konsole(QWidget* parent, const char* name, WFlags fl) :
+ QMainWindow(parent, name, fl)
+{
+ QStrList args;
+ init("/bin/sh",args);
+}
+
+Konsole::Konsole(const char* name, const char* _pgm, QStrList & _args, int)
+ : QMainWindow(0, name)
+{
+ init(_pgm,_args);
+}
+
+void Konsole::init(const char* _pgm, QStrList & _args)
+{
+ b_scroll = TRUE; // histon;
+ n_keytab = 0;
+ n_render = 0;
+
+ setCaption( tr("Terminal") );
+ setIcon( Resource::loadPixmap( "konsole" ) );
+
+ Config cfg("Konsole");
+ cfg.setGroup("Konsole");
+
+ // initialize the list of allowed fonts ///////////////////////////////////
+ cfont = cfg.readNumEntry("FontID", 1);
+ QFont f = QFont("Micro", 4, QFont::Normal);
+ f.setFixedPitch(TRUE);
+ fonts.append(new VTFont(tr("Micro"), f));
+
+ f = QFont("Fixed", 7, QFont::Normal);
+ f.setFixedPitch(TRUE);
+ fonts.append(new VTFont(tr("Small Fixed"), f));
+
+ f = QFont("Fixed", 12, QFont::Normal);
+ f.setFixedPitch(TRUE);
+ fonts.append(new VTFont(tr("Medium Fixed"), f));
+
+ // create terminal emulation framework ////////////////////////////////////
+ nsessions = 0;
+ tab = new EKNumTabWidget(this);
+ tab->setTabPosition(QTabWidget::Bottom);
+ connect(tab, SIGNAL(currentChanged(QWidget*)), this, SLOT(switchSession(QWidget*)));
+
+ // create terminal toolbar ////////////////////////////////////////////////
+ setToolBarsMovable( FALSE );
+ QPEToolBar *menuToolBar = new QPEToolBar( this );
+ menuToolBar->setHorizontalStretchable( TRUE );
+
+ QPEMenuBar *menuBar = new QPEMenuBar( menuToolBar );
+
+ fontList = new QPopupMenu( this );
+ for(uint i = 0; i < fonts.count(); i++) {
+ VTFont *fnt = fonts.at(i);
+ fontList->insertItem(fnt->getName(), i);
+ }
+ fontChanged(cfont);
+
+ connect( fontList, SIGNAL( activated(int) ), this, SLOT( fontChanged(int) ));
+
+ menuBar->insertItem( tr("Font"), fontList );
+
+ QPEToolBar *toolbar = new QPEToolBar( this );
+
+ QAction *a;
+
+ // Button Commands
+ a = new QAction( tr("New"), Resource::loadPixmap( "konsole" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( newSession() ) ); a->addTo( toolbar );
+ a = new QAction( tr("Enter"), Resource::loadPixmap( "konsole/enter" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitEnter() ) ); a->addTo( toolbar );
+ a = new QAction( tr("Space"), Resource::loadPixmap( "konsole/space" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitSpace() ) ); a->addTo( toolbar );
+ a = new QAction( tr("Tab"), Resource::loadPixmap( "konsole/tab" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitTab() ) ); a->addTo( toolbar );
+ a = new QAction( tr("Up"), Resource::loadPixmap( "konsole/up" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolbar );
+ a = new QAction( tr("Down"), Resource::loadPixmap( "konsole/down" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar );
+ a = new QAction( tr("Paste"), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitPaste() ) ); a->addTo( toolbar );
+/*
+ a = new QAction( tr("Up"), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitUp() ) ); a->addTo( toolbar );
+ a = new QAction( tr("Down"), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( hitDown() ) ); a->addTo( toolbar );
+*/
+
+ QPEToolBar *secondToolBar = new QPEToolBar( this );
+ secondToolBar->setHorizontalStretchable( TRUE );
+
+ QComboBox *commonCombo = new QComboBox( secondToolBar );
+// commonCombo->setEditable( TRUE );
+ for (int i = 0; commonCmds[i] != NULL; i++)
+ commonCombo->insertItem( commonCmds[i], i );
+ connect( commonCombo, SIGNAL( activated(int) ), this, SLOT( enterCommand(int) ));
+
+ // create applications /////////////////////////////////////////////////////
+ setCentralWidget(tab);
+
+ // load keymaps ////////////////////////////////////////////////////////////
+ KeyTrans::loadAll();
+ for (int i = 0; i < KeyTrans::count(); i++)
+ { KeyTrans* s = KeyTrans::find(i);
+ assert( s );
+ }
+
+ se_pgm = _pgm;
+ se_args = _args;
+
+ // read and apply default values ///////////////////////////////////////////
+ resize(321, 321); // Dummy.
+ QSize currentSize = size();
+ if (currentSize != size())
+ defaultSize = size();
+}
+
+void Konsole::show()
+{
+ if ( !nsessions ) {
+ newSession();
+ }
+ QMainWindow::show();
+}
+
+void Konsole::initSession(const char*, QStrList &)
+{
+ QMainWindow::show();
+}
+
+Konsole::~Konsole()
+{
+ while (nsessions > 0) {
+ doneSession(getTe()->currentSession, 0);
+ }
+
+ Config cfg("Konsole");
+ cfg.setGroup("Konsole");
+ cfg.writeEntry("FontID", cfont);
+}
+
+void Konsole::fontChanged(int f)
+{
+ VTFont* font = fonts.at(f);
+ if (font != 0) {
+ for(uint i = 0; i < fonts.count(); i++) {
+ fontList->setItemChecked(i, (i == (uint) f) ? TRUE : FALSE);
+ }
+
+ cfont = f;
+
+ TEWidget* te = getTe();
+ if (te != 0) {
+ te->setVTFont(font->getFont());
+ }
+ }
+}
+
+void Konsole::enterCommand(int c)
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ QString text = commonCmds[c];
+ te->emitText(text);
+ }
+}
+
+void Konsole::hitEnter()
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ te->emitText(QString("\r"));
+ }
+}
+
+void Konsole::hitSpace()
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ te->emitText(QString(" "));
+ }
+}
+
+void Konsole::hitTab()
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ te->emitText(QString("\t"));
+ }
+}
+
+void Konsole::hitPaste()
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ te->pasteClipboard();
+ }
+}
+
+void Konsole::hitUp()
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Up, 0, 0);
+ QApplication::sendEvent( te, &ke );
+ }
+}
+
+void Konsole::hitDown()
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ QKeyEvent ke( QKeyEvent::KeyPress, Qt::Key_Down, 0, 0);
+ QApplication::sendEvent( te, &ke );
+ }
+}
+
+/**
+ This function calculates the size of the external widget
+ needed for the internal widget to be
+ */
+QSize Konsole::calcSize(int columns, int lines) {
+ TEWidget* te = getTe();
+ if (te != 0) {
+ QSize size = te->calcSize(columns, lines);
+ return size;
+ } else {
+ QSize size;
+ return size;
+ }
+}
+
+/**
+ sets application window to a size based on columns X lines of the te
+ guest widget. Call with (0,0) for setting default size.
+*/
+
+void Konsole::setColLin(int columns, int lines)
+{
+ if ((columns==0) || (lines==0))
+ {
+ if (defaultSize.isEmpty()) // not in config file : set default value
+ {
+ defaultSize = calcSize(80,24);
+ // notifySize(24,80); // set menu items (strange arg order !)
+ }
+ resize(defaultSize);
+ } else {
+ resize(calcSize(columns, lines));
+ // notifySize(lines,columns); // set menu items (strange arg order !)
+ }
+}
+
+/*
+void Konsole::setFont(int fontno)
+{
+ QFont f;
+ if (fontno == 0)
+ f = defaultFont = QFont( "Helvetica", 12 );
+ else
+ if (fonts[fontno][0] == '-')
+ f.setRawName( fonts[fontno] );
+ else
+ {
+ f.setFamily(fonts[fontno]);
+ f.setRawMode( TRUE );
+ }
+ if ( !f.exactMatch() && fontno != 0)
+ {
+ QString msg = i18n("Font `%1' not found.\nCheck README.linux.console for help.").arg(fonts[fontno]);
+ QMessageBox(this, msg);
+ return;
+ }
+ if (se) se->setFontNo(fontno);
+ te->setVTFont(f);
+ n_font = fontno;
+}
+*/
+
+// --| color selection |-------------------------------------------------------
+
+void Konsole::changeColumns(int columns)
+{
+ TEWidget* te = getTe();
+ if (te != 0) {
+ setColLin(columns,te->Lines());
+ te->update();
+ }
+}
+
+//FIXME: If a child dies during session swap,
+// this routine might be called before
+// session swap is completed.
+
+void Konsole::doneSession(TESession*, int )
+{
+ TEWidget *te = getTe();
+ if (te != 0) {
+ te->currentSession->setConnect(FALSE);
+ tab->removeTab(te);
+ delete te->currentSession;
+ delete te;
+ nsessions--;
+ }
+
+ if (nsessions == 0) {
+ close();
+ }
+}
+
+
+void Konsole::newSession() {
+ TEWidget* te = new TEWidget(tab);
+ te->setBackgroundMode(PaletteBase);
+ te->setVTFont(fonts.at(cfont)->getFont());
+ tab->addTab(te);
+ TESession* se = new TESession(this, te, se_pgm, se_args, "xterm");
+ te->currentSession = se;
+ connect( se, SIGNAL(done(TESession*,int)), this, SLOT(doneSession(TESession*,int)) );
+ se->run();
+ se->setConnect(TRUE);
+ se->setHistory(b_scroll);
+ tab->setCurrentPage(nsessions);
+ nsessions++;
+}
+
+TEWidget* Konsole::getTe() {
+ if (nsessions) {
+ return (TEWidget *) tab->currentPage();
+ } else {
+ return 0;
+ }
+ }
+
+void Konsole::switchSession(QWidget* w) {
+ TEWidget* te = (TEWidget *) w;
+
+ QFont teFnt = te->getVTFont();
+ for(uint i = 0; i < fonts.count(); i++) {
+ VTFont *fnt = fonts.at(i);
+ bool cf = fnt->getFont() == teFnt;
+ fontList->setItemChecked(i, cf);
+ if (cf) {
+ cfont = i;
+ }
+ }
+}
diff --git a/core/apps/embeddedkonsole/konsole.h b/core/apps/embeddedkonsole/konsole.h
new file mode 100644
index 0000000..819ea5d
--- a/dev/null
+++ b/core/apps/embeddedkonsole/konsole.h
@@ -0,0 +1,125 @@
+/* ----------------------------------------------------------------------- */
+/* */
+/* [konsole.h] Konsole */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole, an X terminal. */
+/* */
+/* The material contained in here more or less directly orginates from */
+/* kvt, which is copyright (c) 1996 by Matthias Ettrich <ettrich@kde.org> */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef KONSOLE_H
+#define KONSOLE_H
+
+
+#include <qmainwindow.h>
+#include <qaction.h>
+#include <qpopupmenu.h>
+#include <qstrlist.h>
+#include <qintdict.h>
+#include <qptrdict.h>
+#include <qtabwidget.h>
+
+#include "MyPty.h"
+#include "TEWidget.h"
+#include "TEmuVt102.h"
+#include "session.h"
+
+class EKNumTabWidget;
+
+class Konsole : public QMainWindow
+{
+Q_OBJECT
+
+public:
+
+ Konsole(QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
+ Konsole(const char * name, const char* pgm, QStrList & _args, int histon);
+ ~Konsole();
+ void setColLin(int columns, int lines);
+
+ void show();
+
+private slots:
+ void doneSession(TESession*,int);
+ void changeColumns(int);
+ void fontChanged(int);
+ void enterCommand(int);
+ void hitEnter();
+ void hitSpace();
+ void hitTab();
+ void hitPaste();
+ void hitUp();
+ void hitDown();
+ void switchSession(QWidget *);
+ void newSession();
+
+private:
+ void init(const char* _pgm, QStrList & _args);
+ void initSession(const char* _pgm, QStrList & _args);
+ void runSession(TESession* s);
+ void setColorPixmaps();
+ void setHistory(bool);
+ QSize calcSize(int columns, int lines);
+ TEWidget* getTe();
+
+private:
+ class VTFont
+ {
+ public:
+ VTFont(QString name, QFont& font)
+ {
+ this->name = name;
+ this->font = font;
+ }
+
+ QFont& getFont()
+ {
+ return font;
+ }
+
+ QString getName()
+ {
+ return name;
+ }
+
+ private:
+ QString name;
+ QFont font;
+ };
+
+ EKNumTabWidget* tab;
+ int nsessions;
+ QList<VTFont> fonts;
+ int cfont;
+ QCString se_pgm;
+ QStrList se_args;
+
+ QPopupMenu* fontList;
+
+ // history scrolling I think
+ bool b_scroll;
+
+ int n_keytab;
+ int n_scroll;
+ int n_render;
+ QString pmPath; // pixmap path
+ QString dropText;
+ QFont defaultFont;
+ QSize defaultSize;
+
+};
+
+#endif
+
diff --git a/core/apps/embeddedkonsole/main.cpp b/core/apps/embeddedkonsole/main.cpp
new file mode 100644
index 0000000..e3ba346
--- a/dev/null
+++ b/core/apps/embeddedkonsole/main.cpp
@@ -0,0 +1,60 @@
+/* ---------------------------------------------------------------------- */
+/* */
+/* [main.C] Konsole */
+/* */
+/* ---------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole, an X terminal. */
+/* */
+/* The material contained in here more or less directly orginates from */
+/* kvt, which is copyright (c) 1996 by Matthias Ettrich <ettrich@kde.org> */
+/* */
+/* ---------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#include "konsole.h"
+
+#include <qpe/qpeapplication.h>
+
+#include <qfile.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+
+/* --| main |------------------------------------------------------ */
+int main(int argc, char* argv[])
+{
+ setuid(getuid()); setgid(getgid()); // drop privileges
+
+ QPEApplication a( argc, argv );
+
+#ifdef FAKE_CTRL_AND_ALT
+ QPEApplication::grabKeyboard(); // for CTRL and ALT
+#endif
+
+ QStrList tmp;
+ const char* shell = getenv("SHELL");
+ if (shell == NULL || *shell == '\0')
+ shell = "/bin/sh";
+
+ // sh is completely broken on familiar. Let's try to get something better
+ if ( qstrcmp( shell, "/bin/shell" ) == 0 && QFile::exists( "/bin/bash" ) )
+ shell = "/bin/bash";
+
+ putenv((char*)"COLORTERM="); // to trigger mc's color detection
+
+ Konsole m( "test", shell, tmp, TRUE );
+ m.setCaption( Konsole::tr("Terminal") );
+ a.showMainWidget( &m );
+
+ return a.exec();
+}
diff --git a/core/apps/embeddedkonsole/qpe-embeddedkonsole.control b/core/apps/embeddedkonsole/qpe-embeddedkonsole.control
new file mode 100644
index 0000000..9b7c355
--- a/dev/null
+++ b/core/apps/embeddedkonsole/qpe-embeddedkonsole.control
@@ -0,0 +1,9 @@
+Files: bin/embeddedkonsole apps/Applications/embeddedkonsole.desktop pics/konsole etc/keytabs/*
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-4
+Depends: qpe-base ($QPE_VERSION), ptydevs
+Description: KDE's konsole (shell terminal)
+ Ported to the Qtopia environment.
diff --git a/core/apps/embeddedkonsole/session.cpp b/core/apps/embeddedkonsole/session.cpp
new file mode 100644
index 0000000..520af86
--- a/dev/null
+++ b/core/apps/embeddedkonsole/session.cpp
@@ -0,0 +1,157 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+#include "session.h"
+#include <qpushbutton.h>
+// #include <kdebug.h>
+
+#include <stdlib.h>
+
+#define HERE fprintf(stderr,"%s(%d): here\n",__FILE__,__LINE__)
+
+/*! \class TESession
+
+ Sessions are combinations of TEPTy and Emulations.
+
+ The stuff in here does not belong to the terminal emulation framework,
+ but to main.C. It serves it's duty by providing a single reference
+ to TEPTy/Emulation pairs. In fact, it is only there to demonstrate one
+ of the abilities of the framework - multible sessions.
+*/
+
+TESession::TESession(QMainWindow* main, TEWidget* te, const char* _pgm, QStrList & _args, const char *_term) : schema_no(0), font_no(3), pgm(_pgm), args(_args)
+{
+ // sh = new TEPty();
+ sh = new MyPty();
+ em = new TEmuVt102(te);
+
+ term = _term;
+
+ sh->setSize(te->Lines(),te->Columns()); // not absolutely nessesary
+ QObject::connect( sh,SIGNAL(block_in(const char*,int)),
+ em,SLOT(onRcvBlock(const char*,int)) );
+ QObject::connect( em,SIGNAL(ImageSizeChanged(int,int)),
+ sh,SLOT(setSize(int,int)));
+
+ // 'main' should do those connects itself, somehow.
+ // These aren't KTMW's slots, but konsole's.(David)
+
+/*
+ QObject::connect( em,SIGNAL(ImageSizeChanged(int,int)),
+ main,SLOT(notifySize(int,int)));
+*/
+ QObject::connect( em,SIGNAL(sndBlock(const char*,int)),
+ sh,SLOT(send_bytes(const char*,int)) );
+ QObject::connect( em,SIGNAL(changeColumns(int)),
+ main,SLOT(changeColumns(int)) );
+/*
+ QObject::connect( em,SIGNAL(changeTitle(int, const QString&)),
+ main,SLOT(changeTitle(int, const QString&)) );
+*/
+ QObject::connect( sh,SIGNAL(done(int)), this,SLOT(done(int)) );
+}
+
+
+
+void TESession::run()
+{
+ //kdDebug() << "Running the session!" << pgm << "\n";
+ sh->run(pgm,args,term.data(),FALSE);
+}
+
+void TESession::kill(int ) // signal)
+{
+// sh->kill(signal);
+}
+
+TESession::~TESession()
+{
+ QObject::disconnect( sh, SIGNAL( done( int ) ),
+ this, SLOT( done( int ) ) );
+ delete em;
+ delete sh;
+}
+
+void TESession::setConnect(bool c)
+{
+ em->setConnect(c);
+}
+
+void TESession::done(int status)
+{
+ emit done(this,status);
+}
+
+void TESession::terminate()
+{
+ delete this;
+}
+
+TEmulation* TESession::getEmulation()
+{
+ return em;
+}
+
+// following interfaces might be misplaced ///
+
+int TESession::schemaNo()
+{
+ return schema_no;
+}
+
+int TESession::keymap()
+{
+ return keymap_no;
+}
+
+int TESession::fontNo()
+{
+ return font_no;
+}
+
+const char* TESession::emuName()
+{
+ return term.data();
+}
+
+void TESession::setSchemaNo(int sn)
+{
+ schema_no = sn;
+}
+
+void TESession::setKeymapNo(int kn)
+{
+ keymap_no = kn;
+ em->setKeytrans(kn);
+}
+
+void TESession::setFontNo(int fn)
+{
+ font_no = fn;
+}
+
+void TESession::setTitle(const QString& title)
+{
+ this->title = title;
+}
+
+const QString& TESession::Title()
+{
+ return title;
+}
+
+void TESession::setHistory(bool on)
+{
+ em->setHistory( on );
+}
+
+bool TESession::history()
+{
+ return em->history();
+}
+
+// #include "session.moc"
diff --git a/core/apps/embeddedkonsole/session.h b/core/apps/embeddedkonsole/session.h
new file mode 100644
index 0000000..4a61569
--- a/dev/null
+++ b/core/apps/embeddedkonsole/session.h
@@ -0,0 +1,93 @@
+/* -------------------------------------------------------------------------- */
+/* */
+/* [session.h] Testbed for TE framework */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
+/* */
+/* This file is part of Konsole, an X terminal. */
+/* */
+/* -------------------------------------------------------------------------- */
+/* */
+/* Ported Konsole to Qt/Embedded */
+/* */
+/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
+/* */
+/* -------------------------------------------------------------------------- */
+
+#ifndef SESSION_H
+#define SESSION_H
+
+#include <qapplication.h>
+#include <qmainwindow.h>
+#include <qstrlist.h>
+
+#include "MyPty.h"
+#include "TEWidget.h"
+#include "TEmuVt102.h"
+
+class TESession : public QObject
+{ Q_OBJECT
+
+public:
+
+ TESession(QMainWindow* main, TEWidget* w,
+ const char* pgm, QStrList & _args,
+ const char* term);
+ ~TESession();
+
+public:
+
+ void setConnect(bool r);
+ TEmulation* getEmulation(); // to control emulation
+ bool isSecure();
+
+public:
+
+ int schemaNo();
+ int fontNo();
+ const char* emuName();
+ const QString& Title();
+ bool history();
+ int keymap();
+
+ void setHistory(bool on);
+ void setSchemaNo(int sn);
+ void setKeymapNo(int kn);
+ void setFontNo(int fn);
+ void setTitle(const QString& title);
+ void kill(int signal);
+
+public slots:
+
+ void run();
+ void done(int status);
+ void terminate();
+
+signals:
+
+ void done(TESession*, int);
+
+private:
+
+ // TEPty* sh;
+ MyPty* sh;
+ TEWidget* te;
+ TEmulation* em;
+
+ //FIXME: using the indices here
+ // is propably very bad. We should
+ // use a persistent reference instead.
+ int schema_no;
+ int font_no;
+ int keymap_no;
+ QString title;
+
+ const char* pgm;
+ QStrList args;
+
+ QCString term;
+};
+
+#endif
diff --git a/core/apps/helpbrowser/.cvsignore b/core/apps/helpbrowser/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/core/apps/helpbrowser/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/core/apps/helpbrowser/Makefile.in b/core/apps/helpbrowser/Makefile.in
new file mode 100644
index 0000000..8f0ce0e
--- a/dev/null
+++ b/core/apps/helpbrowser/Makefile.in
@@ -0,0 +1,119 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = helpbrowser
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = helpbrowser.h
+SOURCES = helpbrowser.cpp \
+ main.cpp
+OBJECTS = helpbrowser.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_helpbrowser.cpp
+OBJMOC = moc_helpbrowser.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake helpbrowser.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+helpbrowser.o: helpbrowser.cpp \
+ helpbrowser.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+main.o: main.cpp \
+ helpbrowser.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_helpbrowser.o: moc_helpbrowser.cpp \
+ helpbrowser.h
+
+moc_helpbrowser.cpp: helpbrowser.h
+ $(MOC) helpbrowser.h -o moc_helpbrowser.cpp
+
+
diff --git a/core/apps/helpbrowser/helpbrowser.cpp b/core/apps/helpbrowser/helpbrowser.cpp
new file mode 100644
index 0000000..d32fc0b
--- a/dev/null
+++ b/core/apps/helpbrowser/helpbrowser.cpp
@@ -0,0 +1,227 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "helpbrowser.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/resource.h>
+#include <qpe/global.h>
+
+#include <qstatusbar.h>
+#include <qdragobject.h>
+#include <qpixmap.h>
+#include <qpopupmenu.h>
+#include <qpe/qpemenubar.h>
+#include <qpe/qpetoolbar.h>
+#include <qtoolbutton.h>
+#include <qiconset.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qstylesheet.h>
+#include <qmessagebox.h>
+#include <qfiledialog.h>
+#include <qevent.h>
+#include <qlineedit.h>
+#include <qobjectlist.h>
+#include <qfileinfo.h>
+#include <qfile.h>
+#include <qdatastream.h>
+#include <qprinter.h>
+#include <qsimplerichtext.h>
+#include <qpaintdevicemetrics.h>
+#include <qaction.h>
+
+#include <ctype.h>
+
+
+HelpBrowser::HelpBrowser( QWidget* parent, const char *name, WFlags f )
+ : QMainWindow( parent, name, f ),
+ selectedURL()
+{
+ init( "index.html" );
+}
+
+void HelpBrowser::init( const QString& _home )
+{
+ setIcon( Resource::loadPixmap( "help_icon" ) );
+
+ browser = new QTextBrowser( this );
+ browser->setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ connect( browser, SIGNAL( textChanged() ),
+ this, SLOT( textChanged() ) );
+
+ setCentralWidget( browser );
+ setToolBarsMovable( FALSE );
+
+ if ( !_home.isEmpty() )
+ browser->setSource( _home );
+
+ QPEToolBar* toolbar = new QPEToolBar( this );
+ toolbar->setHorizontalStretchable( TRUE );
+ QPEMenuBar *menu = new QPEMenuBar( toolbar );
+
+ toolbar = new QPEToolBar( this );
+ // addToolBar( toolbar, "Toolbar");
+
+ //QPopupMenu* go = new QPopupMenu( this );
+ backAction = new QAction( tr( "Backward" ), Resource::loadIconSet( "back" ), QString::null, 0, this, 0 );
+ connect( backAction, SIGNAL( activated() ), browser, SLOT( backward() ) );
+ connect( browser, SIGNAL( backwardAvailable( bool ) ),
+ backAction, SLOT( setEnabled( bool ) ) );
+ //backAction->addTo( go );
+ backAction->addTo( toolbar );
+ backAction->setEnabled( FALSE );
+
+ forwardAction = new QAction( tr( "Forward" ), Resource::loadIconSet( "forward" ), QString::null, 0, this, 0 );
+ connect( forwardAction, SIGNAL( activated() ), browser, SLOT( forward() ) );
+ connect( browser, SIGNAL( forwardAvailable( bool ) ),
+ forwardAction, SLOT( setEnabled( bool ) ) );
+ //forwardAction->addTo( go );
+ forwardAction->addTo( toolbar );
+ forwardAction->setEnabled( FALSE );
+
+ QAction *a = new QAction( tr( "Home" ), Resource::loadPixmap( "home" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), browser, SLOT( home() ) );
+ //a->addTo( go );
+ a->addTo( toolbar );
+
+ bookm = new QPopupMenu( this );
+ bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) );
+ bookm->insertItem( tr( "Remove from Bookmarks" ), this, SLOT( removeBookmark() ) );
+ bookm->insertSeparator();
+ connect( bookm, SIGNAL( activated( int ) ),
+ this, SLOT( bookmChosen( int ) ) );
+
+ readBookmarks();
+
+ //menu->insertItem( tr("Go"), go );
+ menu->insertItem( tr( "Bookmarks" ), bookm );
+
+ resize( 240, 300 );
+ browser->setFocus();
+
+ connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)),
+ this, SLOT(appMessage(const QCString&, const QByteArray&)) );
+}
+
+void HelpBrowser::appMessage(const QCString& msg, const QByteArray& data)
+{
+ if ( msg == "showFile(QString)" ) {
+ QDataStream ds(data,IO_ReadOnly);
+ QString fn;
+ ds >> fn;
+ setDocument( fn );
+ }
+}
+
+void HelpBrowser::setDocument( const QString &doc )
+{
+ if ( !doc.isEmpty() )
+ browser->setSource( doc );
+ raise();
+}
+
+
+void HelpBrowser::textChanged()
+{
+ if ( browser->documentTitle().isNull() )
+ setCaption( tr("Help Browser") );
+ else
+ setCaption( browser->documentTitle() ) ;
+
+ selectedURL = caption();
+}
+
+HelpBrowser::~HelpBrowser()
+{
+ QStringList bookmarks;
+ QMap<int, Bookmark>::Iterator it2 = mBookmarks.begin();
+ for ( ; it2 != mBookmarks.end(); ++it2 )
+ bookmarks.append( (*it2).name + "=" + (*it2).file );
+
+ QFile f2( Global::applicationFileName("helpbrowser", "bookmarks") );
+ if ( f2.open( IO_WriteOnly ) ) {
+ QDataStream s2( &f2 );
+ s2 << bookmarks;
+ f2.close();
+ }
+}
+
+void HelpBrowser::pathSelected( const QString &_path )
+{
+ browser->setSource( _path );
+}
+
+void HelpBrowser::readBookmarks()
+{
+ QString file = Global::applicationFileName("helpbrowser", "bookmarks");
+ if ( QFile::exists( file ) ) {
+ QStringList bookmarks;
+ QFile f( file );
+ if ( f.open( IO_ReadOnly ) ) {
+ QDataStream s( &f );
+ s >> bookmarks;
+ f.close();
+ }
+ QStringList::Iterator it = bookmarks.begin();
+ for ( ; it != bookmarks.end(); ++it ) {
+ Bookmark b;
+ QString current = *it;
+ int equal = current.find( "=" );
+ if ( equal < 1 || equal == (int)current.length() - 1 )
+ continue;
+ b.name = current.left( equal );
+ b.file = current.mid( equal + 1 );
+ mBookmarks[ bookm->insertItem( b.name ) ] = b;
+ }
+ }
+}
+
+void HelpBrowser::bookmChosen( int i )
+{
+ if ( mBookmarks.contains( i ) )
+ browser->setSource( mBookmarks[ i ].file );
+}
+
+void HelpBrowser::addBookmark()
+{
+ Bookmark b;
+ b.name = browser->documentTitle();
+ b.file = browser->source();
+ if (b.name.isEmpty() ) {
+ b.name = b.file.left( b.file.length() - 5 ); // remove .html
+ }
+ QMap<int, Bookmark>::Iterator it;
+ for( it = mBookmarks.begin(); it != mBookmarks.end(); ++it )
+ if ( (*it).file == b.file ) return;
+ mBookmarks[ bookm->insertItem( b.name ) ] = b;
+}
+
+void HelpBrowser::removeBookmark()
+{
+ QString file = browser->source();
+ QMap<int, Bookmark>::Iterator it = mBookmarks.begin();
+ for( ; it != mBookmarks.end(); ++it )
+ if ( (*it).file == file ) {
+ bookm->removeItem( it.key() );
+ mBookmarks.remove( it );
+ break;
+ }
+}
diff --git a/core/apps/helpbrowser/helpbrowser.h b/core/apps/helpbrowser/helpbrowser.h
new file mode 100644
index 0000000..2f7153a
--- a/dev/null
+++ b/core/apps/helpbrowser/helpbrowser.h
@@ -0,0 +1,69 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef HELPWINDOW_H
+#define HELPWINDOW_H
+
+#include <qmainwindow.h>
+#include <qtextbrowser.h>
+#include <qstringlist.h>
+#include <qmap.h>
+
+class QPopupMenu;
+class QAction;
+
+class HelpBrowser : public QMainWindow
+{
+ Q_OBJECT
+public:
+ HelpBrowser( QWidget* parent = 0, const char *name=0, WFlags f=0 );
+ ~HelpBrowser();
+
+public slots:
+ void setDocument( const QString &doc );
+
+private slots:
+ void appMessage(const QCString& msg, const QByteArray& data);
+ void textChanged();
+
+ void pathSelected( const QString & );
+ void bookmChosen( int );
+ void addBookmark();
+ void removeBookmark();
+
+private:
+ void init( const QString & );
+ void readBookmarks();
+
+ QTextBrowser* browser;
+ QAction *backAction;
+ QAction *forwardAction;
+ QString selectedURL;
+ struct Bookmark {
+ QString name;
+ QString file;
+ };
+ QMap<int, Bookmark> mBookmarks;
+ QMenuBar *menu;
+ QPopupMenu *bookm;
+};
+
+#endif
+
diff --git a/core/apps/helpbrowser/helpbrowser.pro b/core/apps/helpbrowser/helpbrowser.pro
new file mode 100644
index 0000000..43230f1
--- a/dev/null
+++ b/core/apps/helpbrowser/helpbrowser.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = helpbrowser.h
+SOURCES = helpbrowser.cpp \
+ main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES =
+
+TRANSLATIONS = ../i18n/de/helpbrowser.ts
diff --git a/core/apps/helpbrowser/main.cpp b/core/apps/helpbrowser/main.cpp
new file mode 100644
index 0000000..1cb10b7
--- a/dev/null
+++ b/core/apps/helpbrowser/main.cpp
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "helpbrowser.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ HelpBrowser mw;
+ mw.setCaption( HelpBrowser::tr("HelpBrowser") );
+ a.showMainDocumentWidget( &mw );
+
+ return a.exec();
+}
diff --git a/core/apps/helpbrowser/qpe-helpbrowser.control b/core/apps/helpbrowser/qpe-helpbrowser.control
new file mode 100644
index 0000000..b6e3404
--- a/dev/null
+++ b/core/apps/helpbrowser/qpe-helpbrowser.control
@@ -0,0 +1,10 @@
+Files: bin/helpbrowser apps/Applications/helpbrowser.desktop docs
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Browse HTML help documents
+ The HTML help browser for the Qtopia environment.
diff --git a/core/apps/qcop/.cvsignore b/core/apps/qcop/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/apps/qcop/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/apps/qcop/Makefile.in b/core/apps/qcop/Makefile.in
new file mode 100644
index 0000000..0a12320
--- a/dev/null
+++ b/core/apps/qcop/Makefile.in
@@ -0,0 +1,102 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qcop
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS =
+SOURCES = main.cpp
+OBJECTS = main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake qcop.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+
diff --git a/core/apps/qcop/main.cpp b/core/apps/qcop/main.cpp
new file mode 100644
index 0000000..73db0f6
--- a/dev/null
+++ b/core/apps/qcop/main.cpp
@@ -0,0 +1,85 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qapplication.h>
+#include <qstringlist.h>
+#include <qdatastream.h>
+#include <qtimer.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+static void usage()
+{
+ fprintf( stderr, "Usage: qcop channel command [parameters]\n" );
+}
+
+static void syntax( const QString &where, const QString &what )
+{
+ fprintf( stderr, "Syntax error in %s: %s\n", where.latin1(), what.latin1() );
+ exit(1);
+}
+
+int main( int argc, char *argv[] )
+{
+ QApplication app( argc, argv );
+
+ if ( argc < 3 ) {
+ usage();
+ exit(1);
+ }
+
+ QString channel = argv[1];
+ QString command = argv[2];
+ command.stripWhiteSpace();
+
+ int paren = command.find( "(" );
+ if ( paren <= 0 )
+ syntax( "command", command );
+
+ QString params = command.mid( paren + 1 );
+ if ( params[params.length()-1] != ')' )
+ syntax( "command", command );
+
+ params.truncate( params.length()-1 );
+ QCopEnvelope env(channel.latin1(), command.latin1());
+
+ int argIdx = 3;
+
+ QStringList paramList = QStringList::split( ",", params );
+ QStringList::Iterator it;
+ for ( it = paramList.begin(); it != paramList.end(); ++it ) {
+ QString arg = argv[argIdx];
+ if ( *it == "QString" ) {
+ env << arg;
+ } else if ( *it == "int" ) {
+ env << arg.toInt();
+ } else {
+ syntax( "paramter type", *it );
+ }
+ argIdx++;
+ }
+
+ QTimer::singleShot( 0, &app, SLOT(quit()) );
+ return app.exec();
+}
+
diff --git a/core/apps/qcop/qcop.pro b/core/apps/qcop/qcop.pro
new file mode 100644
index 0000000..b52bfd8
--- a/dev/null
+++ b/core/apps/qcop/qcop.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = ../bin
+HEADERS =
+SOURCES = main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES =
+TARGET = qcop
diff --git a/core/apps/qcop/qpe-qcop.control b/core/apps/qcop/qpe-qcop.control
new file mode 100644
index 0000000..60107c4
--- a/dev/null
+++ b/core/apps/qcop/qpe-qcop.control
@@ -0,0 +1,9 @@
+Files: bin/qcop
+Priority: required
+Section: qpe/system
+Maintainer: Martin Jones <mjones@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qt-embedded (>=$QTE_VERSION)
+Description: Interprocess communication client
+ Interprocess communication client for the Qtopia environment.
diff --git a/core/apps/textedit/.cvsignore b/core/apps/textedit/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/apps/textedit/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/apps/textedit/Makefile.in b/core/apps/textedit/Makefile.in
new file mode 100644
index 0000000..84542bb
--- a/dev/null
+++ b/core/apps/textedit/Makefile.in
@@ -0,0 +1,125 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = textedit
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = textedit.h
+SOURCES = main.cpp \
+ textedit.cpp
+OBJECTS = main.o \
+ textedit.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_textedit.cpp
+OBJMOC = moc_textedit.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake textedit.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ textedit.h \
+ $(QPEDIR)/include/qpe/filemanager.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+textedit.o: textedit.cpp \
+ textedit.h \
+ $(QPEDIR)/include/qpe/filemanager.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/fileselector.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+moc_textedit.o: moc_textedit.cpp \
+ textedit.h \
+ $(QPEDIR)/include/qpe/filemanager.h
+
+moc_textedit.cpp: textedit.h
+ $(MOC) textedit.h -o moc_textedit.cpp
+
+
diff --git a/core/apps/textedit/inserttable.ui b/core/apps/textedit/inserttable.ui
new file mode 100644
index 0000000..09fe3c3
--- a/dev/null
+++ b/core/apps/textedit/inserttable.ui
@@ -0,0 +1,103 @@
+<!DOCTYPE UI><UI>
+<class>InsertTable</class><comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>InsertTable</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>165</width>
+ <height>79</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Insert Table</string>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Rows:</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinRows</cstring>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>1</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>1</number>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinColumns</cstring>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>1</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>1</number>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Columns:</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+</UI>
diff --git a/core/apps/textedit/main.cpp b/core/apps/textedit/main.cpp
new file mode 100644
index 0000000..d0d37d2
--- a/dev/null
+++ b/core/apps/textedit/main.cpp
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "textedit.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication a( argc, argv );
+
+ TextEdit e;
+ a.showMainDocumentWidget(&e);
+ if ( argc == 3 && argv[1] == QCString("-f") )
+ e.openFile(argv[2]);
+
+ a.exec();
+}
diff --git a/core/apps/textedit/qpe-textedit.control b/core/apps/textedit/qpe-textedit.control
new file mode 100644
index 0000000..b0dad7d
--- a/dev/null
+++ b/core/apps/textedit/qpe-textedit.control
@@ -0,0 +1,9 @@
+Files: bin/textedit apps/Applications/textedit.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Text Editor
+ The text editor for the Qtopia environment.
diff --git a/core/apps/textedit/qtextedit.h b/core/apps/textedit/qtextedit.h
new file mode 100644
index 0000000..b29a728
--- a/dev/null
+++ b/core/apps/textedit/qtextedit.h
@@ -0,0 +1,282 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QTEXTEDIT_H
+#define QTEXTEDIT_H
+
+#include <qscrollview.h>
+#include <qstylesheet.h>
+#include <qpainter.h>
+
+class QPainter;
+class QTextDocument;
+class QTextCursor;
+class QKeyEvent;
+class QResizeEvent;
+class QMouseEvent;
+class QTimer;
+class QTextString;
+class QVBox;
+class QListBox;
+class QTextCommand;
+class QTextParag;
+class QTextFormat;
+class QFont;
+class QColor;
+
+class QTextEdit : public QScrollView
+{
+ Q_OBJECT
+
+public:
+ QTextEdit( QWidget *parent, const QString &fn, bool tabify = FALSE );
+ QTextEdit( QWidget *parent = 0, const char *name = 0 );
+ virtual ~QTextEdit();
+
+#if defined(QTEXTEDIT_OPEN_API)
+ QTextDocument *document() const;
+ QTextCursor *textCursor() const;
+#endif
+
+ QString text() const;
+ QString text( int parag, bool formatted = FALSE ) const;
+ Qt::TextFormat textFormat() const;
+ QString fileName() const;
+
+ void cursorPosition( int &parag, int &index );
+ void selection( int &parag_from, int &index_from,
+ int &parag_to, int &index_to );
+ virtual bool find( const QString &expr, bool cs, bool wo, bool forward = TRUE,
+ int *parag = 0, int *index = 0 );
+ void insert( const QString &text, bool indent = FALSE, bool checkNewLine = FALSE );
+
+ int paragraphs() const;
+ int lines() const;
+ int linesOfParagraph( int parag ) const;
+ int lineOfChar( int parag, int chr );
+
+ bool isModified() const;
+
+ bool italic() const;
+ bool bold() const;
+ bool underline() const;
+ QString family() const;
+ int pointSize() const;
+ QColor color() const;
+ QFont font() const;
+ int alignment() const;
+ int maxLines() const;
+
+ const QStyleSheet* styleSheet() const;
+ void setStyleSheet( const QStyleSheet* styleSheet );
+
+ void setPaper( const QBrush& pap);
+ QBrush paper() const;
+
+ void setLinkColor( const QColor& );
+ QColor linkColor() const;
+
+ void setLinkUnderline( bool );
+ bool linkUnderline() const;
+
+ void setMimeSourceFactory( const QMimeSourceFactory* factory );
+ const QMimeSourceFactory* mimeSourceFactory() const;
+
+ int heightForWidth( int w ) const;
+
+ void append( const QString& text );
+
+ bool hasSelectedText() const;
+ QString selectedText() const;
+
+ QString context() const;
+
+ QString documentTitle() const;
+
+ void scrollToAnchor( const QString& name );
+ QString anchorAt(const QPoint& pos);
+
+public slots:
+ virtual void undo();
+ virtual void redo();
+
+ virtual void cut();
+ virtual void copy();
+ virtual void paste();
+
+ virtual void indent();
+
+ virtual void setItalic( bool b );
+ virtual void setBold( bool b );
+ virtual void setUnderline( bool b );
+ virtual void setFamily( const QString &f );
+ virtual void setPointSize( int s );
+ virtual void setColor( const QColor &c );
+ virtual void setFont( const QFont &f );
+
+ virtual void setAlignment( int );
+
+ virtual void setParagType( QStyleSheetItem::DisplayMode, int listStyle );
+
+ virtual void setTextFormat( Qt::TextFormat f );
+ virtual void setText( const QString &txt, const QString &context = QString::null ) { setText( txt, context, FALSE ); }
+ virtual void setText( const QString &txt, const QString &context, bool tabify );
+
+ virtual void load( const QString &fn ) { load( fn, FALSE ); }
+ virtual void load( const QString &fn, bool tabify );
+ virtual void save( bool untabify = FALSE ) { save( QString::null, untabify ); }
+ virtual void save( const QString &fn, bool untabify = FALSE );
+
+ virtual void setCursorPosition( int parag, int index );
+ virtual void setSelection( int parag_from, int index_from,
+ int parag_to, int index_to );
+
+ virtual void setModified( bool m );
+ virtual void selectAll( bool select );
+
+ virtual void setMaxLines( int l );
+ virtual void resetFormat();
+
+signals:
+ void currentFontChanged( const QFont &f );
+ void currentColorChanged( const QColor &c );
+ void currentAlignmentChanged( int );
+ void textChanged();
+ void highlighted( const QString& );
+ void linkClicked( const QString& );
+
+protected:
+ void setFormat( QTextFormat *f, int flags );
+ void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
+ void keyPressEvent( QKeyEvent *e );
+ void resizeEvent( QResizeEvent *e );
+ void contentsMousePressEvent( QMouseEvent *e );
+ void contentsMouseMoveEvent( QMouseEvent *e );
+ void contentsMouseReleaseEvent( QMouseEvent *e );
+ void contentsMouseDoubleClickEvent( QMouseEvent *e );
+#ifndef QT_NO_DRAGANDDROP
+ void contentsDragEnterEvent( QDragEnterEvent *e );
+ void contentsDragMoveEvent( QDragMoveEvent *e );
+ void contentsDragLeaveEvent( QDragLeaveEvent *e );
+ void contentsDropEvent( QDropEvent *e );
+#endif
+ bool eventFilter( QObject *o, QEvent *e );
+ bool focusNextPrevChild( bool next );
+#if !defined(QTEXTEDIT_OPEN_API)
+ QTextDocument *document() const;
+ QTextCursor *textCursor() const;
+#endif
+
+private slots:
+ void formatMore();
+ void doResize();
+ void doAutoScroll();
+ void doChangeInterval();
+ void blinkCursor();
+ void setModified();
+ void startDrag();
+
+private:
+ enum MoveDirection {
+ MoveLeft,
+ MoveRight,
+ MoveUp,
+ MoveDown,
+ MoveHome,
+ MoveEnd,
+ MovePgUp,
+ MovePgDown
+ };
+ enum KeyboardAction {
+ ActionBackspace,
+ ActionDelete,
+ ActionReturn
+ };
+
+ struct UndoRedoInfo {
+ enum Type { Invalid, Insert, Delete, Backspace, Return, RemoveSelected };
+ UndoRedoInfo( QTextDocument *d ) : type( Invalid ), doc( d )
+ { text = QString::null; id = -1; index = -1; }
+ void clear();
+ inline bool valid() const { return !text.isEmpty() && id >= 0&& index >= 0; }
+
+ QString text;
+ int id;
+ int index;
+ Type type;
+ QTextDocument *doc;
+ };
+
+private:
+ virtual bool isReadOnly() const { return FALSE; }
+ virtual bool linksEnabled() const { return TRUE; }
+ void init();
+ void ensureCursorVisible();
+ void drawCursor( bool visible );
+ void placeCursor( const QPoint &pos, QTextCursor *c = 0 );
+ void moveCursor( int direction, bool shift, bool control );
+ void moveCursor( int direction, bool control );
+ void removeSelectedText();
+ void doKeyboardAction( int action );
+ bool doCompletion();
+ void checkUndoRedoInfo( UndoRedoInfo::Type t );
+ void repaintChanged();
+ void updateCurrentFormat();
+ void handleReadOnlyKeyEvent( QKeyEvent *e );
+ void makeParagVisible( QTextParag *p );
+
+private:
+ QTextDocument *doc;
+ QTextCursor *cursor;
+ bool drawAll;
+ bool mousePressed;
+ QTimer *formatTimer, *scrollTimer, *changeIntervalTimer, *blinkTimer, *dragStartTimer, *resizeTimer;
+ QTextParag *lastFormatted;
+ int interval;
+ QVBox *completionPopup;
+ QListBox *completionListBox;
+ int completionOffset;
+ UndoRedoInfo undoRedoInfo;
+ QTextFormat *currentFormat;
+ QPainter painter;
+ int currentAlignment;
+ bool inDoubleClick;
+ QPoint oldMousePos, mousePos;
+ QPixmap *buf_pixmap;
+ bool cursorVisible, blinkCursorVisible;
+ bool readOnly, modified, mightStartDrag;
+ QPoint dragStartPos;
+ int mLines;
+ bool firstResize;
+ QString onLink;
+
+};
+
+inline QTextDocument *QTextEdit::document() const
+{
+ return doc;
+}
+
+inline QTextCursor *QTextEdit::textCursor() const
+{
+ return cursor;
+}
+
+#endif
diff --git a/core/apps/textedit/textedit.cpp b/core/apps/textedit/textedit.cpp
new file mode 100644
index 0000000..867625e
--- a/dev/null
+++ b/core/apps/textedit/textedit.cpp
@@ -0,0 +1,594 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "textedit.h"
+
+#include <qpe/global.h>
+#include <qpe/fileselector.h>
+#include <qpe/applnk.h>
+#include <qpe/resource.h>
+#include <qpe/config.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/qpemenubar.h>
+#include <qpe/qpetoolbar.h>
+//#include <qpe/finddialog.h>
+
+#include <qaction.h>
+#include <qcolordialog.h>
+#include <qfileinfo.h>
+#include <qlineedit.h>
+#include <qmessagebox.h>
+#include <qobjectlist.h>
+#include <qpopupmenu.h>
+#include <qspinbox.h>
+#include <qtoolbutton.h>
+#include <qwidgetstack.h>
+
+#include <stdlib.h> //getenv
+
+
+#if QT_VERSION < 300
+
+class QpeEditor : public QMultiLineEdit
+{
+ // Q_OBJECT
+public:
+ QpeEditor( QWidget *parent, const char * name = 0 )
+ : QMultiLineEdit( parent, name ) {}
+
+ //public slots:
+ void find( const QString &txt, bool caseSensitive,
+ bool backwards );
+ /*
+signals:
+ void notFound();
+ void searchWrapped();
+ */
+
+private:
+
+};
+
+
+void QpeEditor::find ( const QString &txt, bool caseSensitive,
+ bool backwards )
+{
+ static bool wrap = FALSE;
+ int line, col;
+ if ( wrap ) {
+ if ( !backwards )
+ line = col = 0;
+ wrap = FALSE;
+ // emit searchWrapped();
+ } else {
+ getCursorPosition( &line, &col );
+ }
+ //ignore backwards for now....
+ if ( !backwards ) {
+ for ( ; ; ) {
+ if ( line >= numLines() ) {
+ wrap = TRUE;
+ //emit notFound();
+ break;
+ }
+ int findCol = getString( line )->find( txt, col, caseSensitive );
+ if ( findCol >= 0 ) {
+ setCursorPosition( line, findCol, FALSE );
+ col = findCol + txt.length();
+ setCursorPosition( line, col, TRUE );
+
+ //found = TRUE;
+ break;
+ }
+ line++;
+ col = 0;
+ }
+
+ }
+
+}
+
+
+#else
+
+#error "Must make a QpeEditor that inherits QTextEdit"
+
+#endif
+
+
+
+
+static int u_id = 1;
+static int get_unique_id()
+{
+ return u_id++;
+}
+
+static const int nfontsizes = 6;
+static const int fontsize[nfontsizes] = {8,10,12,14,18,24};
+
+TextEdit::TextEdit( QWidget *parent, const char *name, WFlags f )
+ : QMainWindow( parent, name, f ), bFromDocView( FALSE )
+{
+ doc = 0;
+
+ QString lang = getenv( "LANG" );
+
+ setToolBarsMovable( FALSE );
+
+ setIcon( Resource::loadPixmap( "TextEditor" ) );
+
+ QPEToolBar *bar = new QPEToolBar( this );
+ bar->setHorizontalStretchable( TRUE );
+ menu = bar;
+
+ QPEMenuBar *mb = new QPEMenuBar( bar );
+ QPopupMenu *file = new QPopupMenu( this );
+ QPopupMenu *edit = new QPopupMenu( this );
+ QPopupMenu *font = new QPopupMenu( this );
+
+ bar = new QPEToolBar( this );
+ editBar = bar;
+
+ QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
+ a->addTo( bar );
+ a->addTo( file );
+
+ a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) );
+ a->addTo( bar );
+ a->addTo( file );
+
+ a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) );
+ a->addTo( editBar );
+ a->addTo( edit );
+
+ a = new QAction( tr( "Copy" ), Resource::loadPixmap( "copy" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) );
+ a->addTo( editBar );
+ a->addTo( edit );
+
+ a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) );
+ a->addTo( editBar );
+ a->addTo( edit );
+
+ a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) );
+ edit->insertSeparator();
+ a->addTo( bar );
+ a->addTo( edit );
+
+ int defsize;
+ bool defb, defi, wrap;
+ {
+ Config cfg("TextEdit");
+ cfg.setGroup("View");
+ defsize = cfg.readNumEntry("FontSize",10);
+ defb = cfg.readBoolEntry("Bold",FALSE);
+ defi = cfg.readBoolEntry("Italic",FALSE);
+ wrap = cfg.readBoolEntry("Wrap",TRUE);
+ }
+
+ zin = new QAction( tr("Zoom in"), QString::null, 0, this, 0 );
+ connect( zin, SIGNAL( activated() ), this, SLOT( zoomIn() ) );
+ zin->addTo( font );
+
+ zout = new QAction( tr("Zoom out"), QString::null, 0, this, 0 );
+ connect( zout, SIGNAL( activated() ), this, SLOT( zoomOut() ) );
+ zout->addTo( font );
+
+ font->insertSeparator();
+
+#if 0
+ QAction *ba = new QAction( tr("Bold"), QString::null, 0, this, 0 );
+ connect( ba, SIGNAL( toggled(bool) ), this, SLOT( setBold(bool) ) );
+ ba->setToggleAction(TRUE);
+ ba->addTo( font );
+
+ QAction *ia = new QAction( tr("Italic"), QString::null, 0, this, 0 );
+ connect( ia, SIGNAL( toggled(bool) ), this, SLOT( setItalic(bool) ) );
+ ia->setToggleAction(TRUE);
+ ia->addTo( font );
+
+ ba->setOn(defb);
+ ia->setOn(defi);
+
+ font->insertSeparator();
+#endif
+
+ QAction *wa = new QAction( tr("Wrap lines"), QString::null, 0, this, 0 );
+ connect( wa, SIGNAL( toggled(bool) ), this, SLOT( setWordWrap(bool) ) );
+ wa->setToggleAction(TRUE);
+ wa->addTo( font );
+
+ mb->insertItem( tr( "File" ), file );
+ mb->insertItem( tr( "Edit" ), edit );
+ mb->insertItem( tr( "View" ), font );
+
+ searchBar = new QPEToolBar(this);
+ addToolBar( searchBar, "Search", QMainWindow::Top, TRUE );
+
+ searchBar->setHorizontalStretchable( TRUE );
+
+ searchEdit = new QLineEdit( searchBar, "searchEdit" );
+ searchBar->setStretchableWidget( searchEdit );
+ connect( searchEdit, SIGNAL( textChanged( const QString & ) ),
+ this, SLOT( search() ) );
+
+ a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) );
+ a->addTo( searchBar );
+ a->addTo( edit );
+
+ a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) );
+ a->addTo( searchBar );
+
+ searchBar->hide();
+
+ editorStack = new QWidgetStack( this );
+ setCentralWidget( editorStack );
+
+ searchVisible = FALSE;
+
+ fileSelector = new FileSelector( "text/*", editorStack, "fileselector" ,
+ TRUE, FALSE );
+ fileSelector->setCategoriesVisible(TRUE);
+ connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( showEditTools() ) );
+ connect( fileSelector, SIGNAL( newSelected( const DocLnk &) ), this, SLOT( newFile( const DocLnk & ) ) );
+ connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( openFile( const DocLnk & ) ) );
+ fileOpen();
+
+ editor = new QpeEditor( editorStack );
+ editorStack->addWidget( editor, get_unique_id() );
+
+ resize( 200, 300 );
+
+ setFontSize(defsize,TRUE);
+ wa->setOn(wrap);
+}
+
+TextEdit::~TextEdit()
+{
+ save();
+
+ Config cfg("TextEdit");
+ cfg.setGroup("View");
+ QFont f = editor->font();
+ cfg.writeEntry("FontSize",f.pointSize());
+ cfg.writeEntry("Bold",f.bold());
+ cfg.writeEntry("Italic",f.italic());
+ cfg.writeEntry("Wrap",editor->wordWrap() == QMultiLineEdit::WidgetWidth);
+}
+
+void TextEdit::zoomIn()
+{
+ setFontSize(editor->font().pointSize()+1,FALSE);
+}
+
+void TextEdit::zoomOut()
+{
+ setFontSize(editor->font().pointSize()-1,TRUE);
+}
+
+
+void TextEdit::setFontSize(int sz, bool round_down_not_up)
+{
+ int s=10;
+ for (int i=0; i<nfontsizes; i++) {
+ if ( fontsize[i] == sz ) {
+ s = sz;
+ break;
+ } else if ( round_down_not_up ) {
+ if ( fontsize[i] < sz )
+ s = fontsize[i];
+ } else {
+ if ( fontsize[i] > sz ) {
+ s = fontsize[i];
+ break;
+ }
+ }
+ }
+
+ QFont f = editor->font();
+ f.setPointSize(s);
+ editor->setFont(f);
+
+ zin->setEnabled(s != fontsize[nfontsizes-1]);
+ zout->setEnabled(s != fontsize[0]);
+}
+
+void TextEdit::setBold(bool y)
+{
+ QFont f = editor->font();
+ f.setBold(y);
+ editor->setFont(f);
+}
+
+void TextEdit::setItalic(bool y)
+{
+ QFont f = editor->font();
+ f.setItalic(y);
+ editor->setFont(f);
+}
+
+void TextEdit::setWordWrap(bool y)
+{
+ editor->setWordWrap(y ? QMultiLineEdit::WidgetWidth : QMultiLineEdit::NoWrap );
+}
+
+void TextEdit::fileNew()
+{
+ save();
+ newFile(DocLnk());
+}
+
+void TextEdit::fileOpen()
+{
+ if ( !save() ) {
+ if ( QMessageBox::critical( this, tr( "Out of space" ),
+ tr( "Text Editor was unable to\n"
+ "save your changes.\n"
+ "Free some space and try again.\n"
+ "\nContinue anyway?" ),
+ QMessageBox::Yes|QMessageBox::Escape,
+ QMessageBox::No|QMessageBox::Default )
+ != QMessageBox::Yes )
+ return;
+ else {
+ delete doc;
+ doc = 0;
+ }
+ }
+ menu->hide();
+ editBar->hide();
+ searchBar->hide();
+ clearWState (WState_Reserved1 );
+ editorStack->raiseWidget( fileSelector );
+ fileSelector->reread();
+ updateCaption();
+}
+
+
+#if 0
+void TextEdit::slotFind()
+{
+ FindDialog frmFind( "Text Editor", this );
+ connect( &frmFind, SIGNAL(signalFindClicked(const QString &, bool, bool, int)),
+ editor, SLOT(slotDoFind( const QString&,bool,bool)));
+
+ //case sensitive, backwards, [category]
+
+
+ connect( editor, SIGNAL(notFound()),
+ &frmFind, SLOT(slotNotFound()) );
+ connect( editor, SIGNAL(searchWrapped()),
+ &frmFind, SLOT(slotWrapAround()) );
+
+ frmFind.exec();
+
+
+}
+#endif
+
+void TextEdit::fileRevert()
+{
+ clear();
+ fileOpen();
+}
+
+void TextEdit::editCut()
+{
+#ifndef QT_NO_CLIPBOARD
+ editor->cut();
+#endif
+}
+
+void TextEdit::editCopy()
+{
+#ifndef QT_NO_CLIPBOARD
+ editor->copy();
+#endif
+}
+
+void TextEdit::editPaste()
+{
+#ifndef QT_NO_CLIPBOARD
+ editor->paste();
+#endif
+}
+
+void TextEdit::editFind()
+{
+ searchBar->show();
+ searchVisible = TRUE;
+ searchEdit->setFocus();
+}
+
+void TextEdit::findNext()
+{
+ editor->find( searchEdit->text(), FALSE, FALSE );
+
+}
+
+void TextEdit::findClose()
+{
+ searchVisible = FALSE;
+ searchBar->hide();
+}
+
+void TextEdit::search()
+{
+ editor->find( searchEdit->text(), FALSE, FALSE );
+}
+
+void TextEdit::newFile( const DocLnk &f )
+{
+ DocLnk nf = f;
+ nf.setType("text/plain");
+ clear();
+ editorStack->raiseWidget( editor );
+ setWState (WState_Reserved1 );
+ editor->setFocus();
+ doc = new DocLnk(nf);
+ updateCaption();
+}
+
+void TextEdit::openFile( const QString &f )
+{
+ bFromDocView = TRUE;
+ DocLnk nf;
+ nf.setType("text/plain");
+ nf.setFile(f);
+ openFile(nf);
+ showEditTools();
+ // Show filename in caption
+ QString name = f;
+ int sep = name.findRev( '/' );
+ if ( sep > 0 )
+ name = name.mid( sep+1 );
+ updateCaption( name );
+}
+
+void TextEdit::openFile( const DocLnk &f )
+{
+ clear();
+ FileManager fm;
+ QString txt;
+ if ( !fm.loadFile( f, txt ) ) {
+ // ####### could be a new file
+ //qDebug( "Cannot open file" );
+ //return;
+ }
+ fileNew();
+ if ( doc )
+ delete doc;
+ doc = new DocLnk(f);
+ editor->setText(txt);
+ editor->setEdited(FALSE);
+ updateCaption();
+}
+
+void TextEdit::showEditTools()
+{
+ if ( !doc )
+ close();
+ fileSelector->hide();
+ menu->show();
+ editBar->show();
+ if ( searchVisible )
+ searchBar->show();
+ updateCaption();
+}
+
+bool TextEdit::save()
+{
+ // case of nothing to save...
+ if ( !doc )
+ return true;
+ if ( !editor->edited() ) {
+ delete doc;
+ doc = 0;
+ return true;
+ }
+
+ QString rt = editor->text();
+
+ if ( doc->name().isEmpty() ) {
+ QString pt = rt.simplifyWhiteSpace();
+ int i = pt.find( ' ' );
+ QString docname = pt;
+ if ( i > 0 )
+ docname = pt.left( i );
+ // remove "." at the beginning
+ while( docname.startsWith( "." ) )
+ docname = docname.mid( 1 );
+ docname.replace( QRegExp("/"), "_" );
+ // cut the length. filenames longer than that don't make sense and something goes wrong when they get too long.
+ if ( docname.length() > 40 )
+ docname = docname.left(40);
+ if ( docname.isEmpty() )
+ docname = "Empty Text";
+ doc->setName(docname);
+
+ // append .txt to the file name
+ if ( doc->file().find(".txt") == -1 ) {
+ QString file = doc->file() + ".txt";
+ doc->setFile( file );
+ }
+ }
+
+
+ FileManager fm;
+ if ( !fm.saveFile( *doc, rt ) ) {
+ return false;
+ }
+ delete doc;
+ doc = 0;
+ editor->setEdited( false );
+ return true;
+}
+
+void TextEdit::clear()
+{
+ delete doc;
+ doc = 0;
+ editor->clear();
+}
+
+void TextEdit::updateCaption( const QString &name )
+{
+ if ( !doc )
+ setCaption( tr("Text Editor") );
+ else {
+ QString s = name;
+ if ( s.isNull() )
+ s = doc->name();
+ if ( s.isEmpty() )
+ s = tr( "Unnamed" );
+ setCaption( s + " - " + tr("Text Editor") );
+ }
+}
+
+void TextEdit::setDocument(const QString& fileref)
+{
+ bFromDocView = TRUE;
+ openFile(DocLnk(fileref));
+ showEditTools();
+}
+
+void TextEdit::closeEvent( QCloseEvent *e )
+{
+ if ( editorStack->visibleWidget() == editor && !bFromDocView ) {
+ e->ignore();
+ fileRevert();
+ } else {
+ bFromDocView = FALSE;
+ e->accept();
+ }
+}
+
+void TextEdit::accept()
+{
+ fileOpen();
+}
diff --git a/core/apps/textedit/textedit.h b/core/apps/textedit/textedit.h
new file mode 100644
index 0000000..f7d1052
--- a/dev/null
+++ b/core/apps/textedit/textedit.h
@@ -0,0 +1,102 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef TEXTEDIT_H
+#define TEXTEDIT_H
+
+#define QTEXTEDIT_OPEN_API
+
+#include <qpe/filemanager.h>
+
+#include <qmainwindow.h>
+#include <qmultilineedit.h>
+#include <qlist.h>
+#include <qmap.h>
+
+class QWidgetStack;
+class QToolButton;
+class QPopupMenu;
+class QToolBar;
+class QLineEdit;
+class QAction;
+class FileSelector;
+class QpeEditor;
+
+class TextEdit : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ TextEdit( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~TextEdit();
+
+ void openFile( const QString & );
+
+protected:
+ void closeEvent( QCloseEvent *e );
+
+private slots:
+ void setDocument(const QString&);
+
+ void fileNew();
+ void fileRevert();
+ void fileOpen();
+
+ void editCut();
+ void editCopy();
+ void editPaste();
+ void editFind();
+
+ void findNext();
+ void findClose();
+
+ void search();
+ void accept();
+
+ void newFile( const DocLnk & );
+ void openFile( const DocLnk & );
+ void showEditTools();
+
+ void zoomIn();
+ void zoomOut();
+ void setBold(bool y);
+ void setItalic(bool y);
+ void setWordWrap(bool y);
+
+private:
+ void colorChanged( const QColor &c );
+ bool save();
+ void clear();
+ void updateCaption( const QString &name=QString::null );
+ void setFontSize(int sz, bool round_down_not_up);
+
+private:
+ QWidgetStack *editorStack;
+ FileSelector *fileSelector;
+ QpeEditor* editor;
+ QToolBar *menu, *editBar, *searchBar;
+ QLineEdit *searchEdit;
+ DocLnk *doc;
+ bool searchVisible;
+ bool bFromDocView;
+ QAction *zin, *zout;
+};
+
+#endif
diff --git a/core/apps/textedit/textedit.po b/core/apps/textedit/textedit.po
new file mode 100644
index 0000000..683a5e3
--- a/dev/null
+++ b/core/apps/textedit/textedit.po
@@ -0,0 +1,108 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-16 14:29:14 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: textedit.cpp:110
+msgid "TextEdit::&Edit"
+msgstr ""
+
+#: textedit.cpp:109
+msgid "TextEdit::&File"
+msgstr ""
+
+#: textedit.cpp:102
+msgid "TextEdit::&Insert"
+msgstr ""
+
+#: textedit.cpp:115
+msgid "TextEdit::Bold"
+msgstr ""
+
+#: textedit.cpp:191
+msgid "TextEdit::Bullet List"
+msgstr ""
+
+#: textedit.cpp:140
+msgid "TextEdit::Center"
+msgstr ""
+
+#: textedit.cpp:170
+msgid "TextEdit::Close Find"
+msgstr ""
+
+#: textedit.cpp:69
+msgid "TextEdit::Close"
+msgstr ""
+
+#: textedit.cpp:79
+msgid "TextEdit::Copy"
+msgstr ""
+
+#: textedit.cpp:74
+msgid "TextEdit::Cut"
+msgstr ""
+
+#: textedit.cpp:194
+msgid "TextEdit::Enumerated List"
+msgstr ""
+
+#: textedit.cpp:94
+msgid "TextEdit::Find Next"
+msgstr ""
+
+#: textedit.cpp:89
+msgid "TextEdit::Find..."
+msgstr ""
+
+#: textedit.cpp:120
+msgid "TextEdit::Italic"
+msgstr ""
+
+#: textedit.cpp:134
+msgid "TextEdit::Left"
+msgstr ""
+
+#: textedit.cpp:61
+msgid "TextEdit::New"
+msgstr ""
+
+#: textedit.cpp:65
+msgid "TextEdit::Open"
+msgstr ""
+
+#: textedit.cpp:84
+msgid "TextEdit::Paste"
+msgstr ""
+
+#: textedit.cpp:145
+msgid "TextEdit::Right"
+msgstr ""
+
+#: textedit.cpp:188
+msgid "TextEdit::Standard"
+msgstr ""
+
+#: textedit.cpp:104
+msgid "TextEdit::Table..."
+msgstr ""
+
+#: textedit.cpp:570
+msgid "TextEdit::Text Editor"
+msgstr ""
+
+#: textedit.cpp:125
+msgid "TextEdit::Underline"
+msgstr ""
+
+#: textedit.cpp:569
+msgid "TextEdit::Unnamed"
+msgstr ""
+
diff --git a/core/apps/textedit/textedit.pro b/core/apps/textedit/textedit.pro
new file mode 100644
index 0000000..3f5473e
--- a/dev/null
+++ b/core/apps/textedit/textedit.pro
@@ -0,0 +1,16 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+
+DESTDIR = $(QPEDIR)/bin
+
+HEADERS = textedit.h
+
+SOURCES = main.cpp textedit.cpp
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TARGET = textedit
+
+TRANSLATIONS = ../i18n/de/textedit.ts
diff --git a/core/launcher/.cvsignore b/core/launcher/.cvsignore
new file mode 100644
index 0000000..1924a2d
--- a/dev/null
+++ b/core/launcher/.cvsignore
@@ -0,0 +1,7 @@
+moc_*
+*.moc
+Makefile
+shutdown.cpp
+shutdown.h
+qimpenprefbase.h
+lnkpropertiesbase.h
diff --git a/core/launcher/Makefile.in b/core/launcher/Makefile.in
new file mode 100644
index 0000000..e129fca
--- a/dev/null
+++ b/core/launcher/Makefile.in
@@ -0,0 +1,867 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include -I$(QPEDIR)/calibrate -I$(QPEDIR)/rsync
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe -lcrypt $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qpe
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = background.h \
+ desktop.h \
+ info.h \
+ appicons.h \
+ taskbar.h \
+ sidething.h \
+ mrulist.h \
+ stabmon.h \
+ inputmethods.h \
+ systray.h \
+ wait.h \
+ shutdownimpl.h \
+ launcher.h \
+ launcherview.h \
+ ../calibrate/calibrate.h \
+ startmenu.h \
+ transferserver.h \
+ qcopbridge.h \
+ packageslave.h \
+ irserver.h \
+ $(QPEDIR)/rsync/buf.h \
+ $(QPEDIR)/rsync/checksum.h \
+ $(QPEDIR)/rsync/command.h \
+ $(QPEDIR)/rsync/emit.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/netint.h \
+ $(QPEDIR)/rsync/protocol.h \
+ $(QPEDIR)/rsync/prototab.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/search.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/types.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/whole.h \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/qrsync.h
+SOURCES = background.cpp \
+ desktop.cpp \
+ info.cpp \
+ appicons.cpp \
+ taskbar.cpp \
+ sidething.cpp \
+ mrulist.cpp \
+ stabmon.cpp \
+ inputmethods.cpp \
+ systray.cpp \
+ wait.cpp \
+ shutdownimpl.cpp \
+ launcher.cpp \
+ launcherview.cpp \
+ $(QPEDIR)/calibrate/calibrate.cpp \
+ transferserver.cpp \
+ packageslave.cpp \
+ irserver.cpp \
+ qcopbridge.cpp \
+ startmenu.cpp \
+ main.cpp \
+ $(QPEDIR)/rsync/base64.c \
+ $(QPEDIR)/rsync/buf.c \
+ $(QPEDIR)/rsync/checksum.c \
+ $(QPEDIR)/rsync/command.c \
+ $(QPEDIR)/rsync/delta.c \
+ $(QPEDIR)/rsync/emit.c \
+ $(QPEDIR)/rsync/hex.c \
+ $(QPEDIR)/rsync/job.c \
+ $(QPEDIR)/rsync/mdfour.c \
+ $(QPEDIR)/rsync/mksum.c \
+ $(QPEDIR)/rsync/msg.c \
+ $(QPEDIR)/rsync/netint.c \
+ $(QPEDIR)/rsync/patch.c \
+ $(QPEDIR)/rsync/prototab.c \
+ $(QPEDIR)/rsync/readsums.c \
+ $(QPEDIR)/rsync/scoop.c \
+ $(QPEDIR)/rsync/search.c \
+ $(QPEDIR)/rsync/stats.c \
+ $(QPEDIR)/rsync/stream.c \
+ $(QPEDIR)/rsync/sumset.c \
+ $(QPEDIR)/rsync/trace.c \
+ $(QPEDIR)/rsync/tube.c \
+ $(QPEDIR)/rsync/util.c \
+ $(QPEDIR)/rsync/version.c \
+ $(QPEDIR)/rsync/whole.c \
+ $(QPEDIR)/rsync/qrsync.cpp
+OBJECTS = background.o \
+ desktop.o \
+ info.o \
+ appicons.o \
+ taskbar.o \
+ sidething.o \
+ mrulist.o \
+ stabmon.o \
+ inputmethods.o \
+ systray.o \
+ wait.o \
+ shutdownimpl.o \
+ launcher.o \
+ launcherview.o \
+ $(QPEDIR)/calibrate/calibrate.o \
+ transferserver.o \
+ packageslave.o \
+ irserver.o \
+ qcopbridge.o \
+ startmenu.o \
+ main.o \
+ $(QPEDIR)/rsync/base64.o \
+ $(QPEDIR)/rsync/buf.o \
+ $(QPEDIR)/rsync/checksum.o \
+ $(QPEDIR)/rsync/command.o \
+ $(QPEDIR)/rsync/delta.o \
+ $(QPEDIR)/rsync/emit.o \
+ $(QPEDIR)/rsync/hex.o \
+ $(QPEDIR)/rsync/job.o \
+ $(QPEDIR)/rsync/mdfour.o \
+ $(QPEDIR)/rsync/mksum.o \
+ $(QPEDIR)/rsync/msg.o \
+ $(QPEDIR)/rsync/netint.o \
+ $(QPEDIR)/rsync/patch.o \
+ $(QPEDIR)/rsync/prototab.o \
+ $(QPEDIR)/rsync/readsums.o \
+ $(QPEDIR)/rsync/scoop.o \
+ $(QPEDIR)/rsync/search.o \
+ $(QPEDIR)/rsync/stats.o \
+ $(QPEDIR)/rsync/stream.o \
+ $(QPEDIR)/rsync/sumset.o \
+ $(QPEDIR)/rsync/trace.o \
+ $(QPEDIR)/rsync/tube.o \
+ $(QPEDIR)/rsync/util.o \
+ $(QPEDIR)/rsync/version.o \
+ $(QPEDIR)/rsync/whole.o \
+ $(QPEDIR)/rsync/qrsync.o \
+ shutdown.o \
+ syncdialog.o
+INTERFACES = shutdown.ui \
+ syncdialog.ui
+UICDECLS = shutdown.h \
+ syncdialog.h
+UICIMPLS = shutdown.cpp \
+ syncdialog.cpp
+SRCMOC = moc_background.cpp \
+ moc_desktop.cpp \
+ moc_info.cpp \
+ moc_appicons.cpp \
+ moc_taskbar.cpp \
+ moc_sidething.cpp \
+ moc_inputmethods.cpp \
+ moc_systray.cpp \
+ moc_shutdownimpl.cpp \
+ moc_launcher.cpp \
+ moc_launcherview.cpp \
+ ../calibrate/moc_calibrate.cpp \
+ moc_startmenu.cpp \
+ moc_transferserver.cpp \
+ moc_qcopbridge.cpp \
+ moc_packageslave.cpp \
+ moc_irserver.cpp \
+ appicons.moc \
+ moc_shutdown.cpp \
+ moc_syncdialog.cpp
+OBJMOC = moc_background.o \
+ moc_desktop.o \
+ moc_info.o \
+ moc_appicons.o \
+ moc_taskbar.o \
+ moc_sidething.o \
+ moc_inputmethods.o \
+ moc_systray.o \
+ moc_shutdownimpl.o \
+ moc_launcher.o \
+ moc_launcherview.o \
+ ../calibrate/moc_calibrate.o \
+ moc_startmenu.o \
+ moc_transferserver.o \
+ moc_qcopbridge.o \
+ moc_packageslave.o \
+ moc_irserver.o \
+ moc_shutdown.o \
+ moc_syncdialog.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake taskbar.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+background.o: background.cpp \
+ background.h \
+ desktop.h \
+ shutdownimpl.h \
+ shutdown.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+desktop.o: desktop.cpp \
+ desktop.h \
+ shutdownimpl.h \
+ shutdown.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ info.h \
+ background.h \
+ launcher.h \
+ launcherview.h \
+ $(QPEDIR)/include/qpe/storage.h \
+ mrulist.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ qcopbridge.h \
+ startmenu.h \
+ taskbar.h \
+ $(QPEDIR)/include/qpe/custom.h \
+ transferserver.h \
+ irserver.h \
+ packageslave.h \
+ $(QPEDIR)/include/qpe/mimetype.h \
+ $(QPEDIR)/include/qpe/password.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/power.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/global.h
+
+info.o: info.cpp \
+ info.h \
+ background.h \
+ desktop.h \
+ shutdownimpl.h \
+ shutdown.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/version.h
+
+appicons.o: appicons.cpp \
+ appicons.moc \
+ appicons.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+taskbar.o: taskbar.cpp \
+ startmenu.h \
+ inputmethods.h \
+ $(QPEDIR)/include/qpe/inputmethodinterface.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ mrulist.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ systray.h \
+ $(QPEDIR)/include/qpe/taskbarappletinterface.h \
+ $(QPEDIR)/calibrate/calibrate.h \
+ wait.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ appicons.h \
+ taskbar.h \
+ $(QPEDIR)/include/qpe/custom.h \
+ desktop.h \
+ shutdownimpl.h \
+ shutdown.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/global.h \
+ ../taskbar/apps.h \
+ ../addressbook/addressbook.h \
+ ../datebook/datebook.h \
+ $(QPEDIR)/include/qpe/datebookdb.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ ../helpbrowser/helpbrowser.h \
+ ../minesweep/minesweep.h \
+ ../textedit/textedit.h \
+ $(QPEDIR)/include/qpe/filemanager.h \
+ ../todo/mainwindow.h \
+ ../citytime/citytime.h \
+ ../clock/clock.h \
+ ../calculator/calculatorimpl.h \
+ ../sysinfo/sysinfo.h \
+ ../settings/appearance/settings.h \
+ ../settings/systemtime/settime.h \
+ $(QPEDIR)/include/qpe/timestring.h \
+ ../filebrowser/filebrowser.h \
+ ../solitaire/canvascardwindow.h \
+ ../snake/interface.h \
+ ../parashoot/interface.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ ../mpegplayer/mediaplayer.h \
+ $(QPEDIR)/include/qpe/qlibrary.h \
+ ../embeddedkonsole/konsole.h \
+ ../wordgame/wordgame.h \
+ $(QPEDIR)/include/qpe/qdawg.h
+
+sidething.o: sidething.cpp \
+ sidething.h \
+ startmenu.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+mrulist.o: mrulist.cpp \
+ mrulist.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+stabmon.o: stabmon.cpp \
+ stabmon.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+inputmethods.o: inputmethods.cpp \
+ inputmethods.h \
+ $(QPEDIR)/include/qpe/inputmethodinterface.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qlibrary.h
+
+systray.o: systray.cpp \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qlibrary.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ $(QPEDIR)/include/qpe/config.h \
+ quicklauncher.h \
+ systray.h \
+ $(QPEDIR)/include/qpe/taskbarappletinterface.h
+
+wait.o: wait.cpp \
+ wait.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+shutdownimpl.o: shutdownimpl.cpp \
+ shutdownimpl.h \
+ shutdown.h \
+ $(QPEDIR)/include/qpe/global.h
+
+launcher.o: launcher.cpp \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/mimetype.h \
+ $(QPEDIR)/include/qpe/storage.h \
+ launcherview.h \
+ launcher.h \
+ $(QPEDIR)/include/qpe/lnkproperties.h \
+ mrulist.h \
+ $(QPEDIR)/rsync/qrsync.h
+
+launcherview.o: launcherview.cpp \
+ launcherview.h \
+ $(QPEDIR)/include/qpe/storage.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/qpedebug.h \
+ $(QPEDIR)/include/qpe/categories.h \
+ $(QPEDIR)/include/qpe/categoryselect.h \
+ $(QPEDIR)/include/qpe/menubutton.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+$(QPEDIR)/calibrate/calibrate.o: $(QPEDIR)/calibrate/calibrate.cpp \
+ $(QPEDIR)/calibrate/calibrate.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+transferserver.o: transferserver.cpp \
+ $(QPEDIR)/include/qpe/qprocess.h \
+ $(QPEDIR)/include/qpe/process.h \
+ transferserver.h
+
+packageslave.o: packageslave.cpp \
+ packageslave.h \
+ $(QPEDIR)/include/qpe/process.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+irserver.o: irserver.cpp \
+ irserver.h \
+ $(QPEDIR)/include/qpe/qlibrary.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ obexinterface.h
+
+qcopbridge.o: qcopbridge.cpp \
+ qcopbridge.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+startmenu.o: startmenu.cpp \
+ startmenu.h \
+ sidething.h \
+ mrulist.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ info.h \
+ background.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+main.o: main.cpp \
+ desktop.h \
+ shutdownimpl.h \
+ shutdown.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ taskbar.h \
+ $(QPEDIR)/include/qpe/custom.h \
+ stabmon.h \
+ $(QPEDIR)/include/qpe/network.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/alarmserver.h \
+ ../calibrate/calibrate.h \
+ ../login/qdmdialogimpl.h \
+ $(QPEDIR)/include/qpe/global.h
+
+$(QPEDIR)/rsync/base64.o: $(QPEDIR)/rsync/base64.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h
+
+$(QPEDIR)/rsync/buf.o: $(QPEDIR)/rsync/buf.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/buf.h \
+ $(QPEDIR)/rsync/util.h
+
+$(QPEDIR)/rsync/checksum.o: $(QPEDIR)/rsync/checksum.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/checksum.h
+
+$(QPEDIR)/rsync/command.o: $(QPEDIR)/rsync/command.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/command.h
+
+$(QPEDIR)/rsync/delta.o: $(QPEDIR)/rsync/delta.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/emit.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/checksum.h \
+ $(QPEDIR)/rsync/search.h \
+ $(QPEDIR)/rsync/types.h
+
+$(QPEDIR)/rsync/emit.o: $(QPEDIR)/rsync/emit.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/command.h \
+ $(QPEDIR)/rsync/protocol.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/emit.h \
+ $(QPEDIR)/rsync/prototab.h \
+ $(QPEDIR)/rsync/netint.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/job.h
+
+$(QPEDIR)/rsync/hex.o: $(QPEDIR)/rsync/hex.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h
+
+$(QPEDIR)/rsync/job.o: $(QPEDIR)/rsync/job.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/trace.h
+
+$(QPEDIR)/rsync/mdfour.o: $(QPEDIR)/rsync/mdfour.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/types.h
+
+$(QPEDIR)/rsync/mksum.o: $(QPEDIR)/rsync/mksum.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/protocol.h \
+ $(QPEDIR)/rsync/netint.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/checksum.h
+
+$(QPEDIR)/rsync/msg.o: $(QPEDIR)/rsync/msg.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h
+
+$(QPEDIR)/rsync/netint.o: $(QPEDIR)/rsync/netint.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/netint.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/stream.h
+
+$(QPEDIR)/rsync/patch.o: $(QPEDIR)/rsync/patch.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/protocol.h \
+ $(QPEDIR)/rsync/netint.h \
+ $(QPEDIR)/rsync/command.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/prototab.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/job.h
+
+$(QPEDIR)/rsync/prototab.o: $(QPEDIR)/rsync/prototab.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/protocol.h \
+ $(QPEDIR)/rsync/command.h \
+ $(QPEDIR)/rsync/prototab.h
+
+$(QPEDIR)/rsync/readsums.o: $(QPEDIR)/rsync/readsums.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/netint.h \
+ $(QPEDIR)/rsync/protocol.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/stream.h
+
+$(QPEDIR)/rsync/scoop.o: $(QPEDIR)/rsync/scoop.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/util.h
+
+$(QPEDIR)/rsync/search.o: $(QPEDIR)/rsync/search.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/search.h \
+ $(QPEDIR)/rsync/checksum.h
+
+$(QPEDIR)/rsync/stats.o: $(QPEDIR)/rsync/stats.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/trace.h
+
+$(QPEDIR)/rsync/stream.o: $(QPEDIR)/rsync/stream.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/trace.h
+
+$(QPEDIR)/rsync/sumset.o: $(QPEDIR)/rsync/sumset.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/trace.h
+
+$(QPEDIR)/rsync/trace.o: $(QPEDIR)/rsync/trace.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/trace.h
+
+$(QPEDIR)/rsync/tube.o: $(QPEDIR)/rsync/tube.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/stream.h
+
+$(QPEDIR)/rsync/util.o: $(QPEDIR)/rsync/util.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/trace.h
+
+$(QPEDIR)/rsync/version.o: $(QPEDIR)/rsync/version.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h
+
+$(QPEDIR)/rsync/whole.o: $(QPEDIR)/rsync/whole.c \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/config_linux.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/fileutil.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/buf.h \
+ $(QPEDIR)/rsync/whole.h \
+ $(QPEDIR)/rsync/util.h
+
+$(QPEDIR)/rsync/qrsync.o: $(QPEDIR)/rsync/qrsync.cpp \
+ $(QPEDIR)/rsync/qrsync.h \
+ $(QPEDIR)/rsync/rsync.h
+
+shutdown.h: shutdown.ui
+ $(UIC) shutdown.ui -o $(INTERFACE_DECL_PATH)/shutdown.h
+
+shutdown.cpp: shutdown.ui
+ $(UIC) shutdown.ui -i shutdown.h -o shutdown.cpp
+
+syncdialog.h: syncdialog.ui
+ $(UIC) syncdialog.ui -o $(INTERFACE_DECL_PATH)/syncdialog.h
+
+syncdialog.cpp: syncdialog.ui
+ $(UIC) syncdialog.ui -i syncdialog.h -o syncdialog.cpp
+
+shutdown.o: shutdown.cpp \
+ shutdown.h
+
+syncdialog.o: syncdialog.cpp
+
+moc_background.o: moc_background.cpp \
+ background.h
+
+moc_desktop.o: moc_desktop.cpp \
+ desktop.h \
+ shutdownimpl.h \
+ shutdown.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_info.o: moc_info.cpp \
+ info.h \
+ background.h
+
+moc_appicons.o: moc_appicons.cpp \
+ appicons.h
+
+moc_taskbar.o: moc_taskbar.cpp \
+ taskbar.h \
+ $(QPEDIR)/include/qpe/custom.h
+
+moc_sidething.o: moc_sidething.cpp \
+ sidething.h \
+ startmenu.h
+
+moc_inputmethods.o: moc_inputmethods.cpp \
+ inputmethods.h \
+ $(QPEDIR)/include/qpe/inputmethodinterface.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h
+
+moc_systray.o: moc_systray.cpp \
+ systray.h \
+ $(QPEDIR)/include/qpe/taskbarappletinterface.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h
+
+moc_shutdownimpl.o: moc_shutdownimpl.cpp \
+ shutdownimpl.h \
+ shutdown.h
+
+moc_launcher.o: moc_launcher.cpp \
+ launcher.h \
+ launcherview.h \
+ $(QPEDIR)/include/qpe/storage.h
+
+moc_launcherview.o: moc_launcherview.cpp \
+ launcherview.h \
+ $(QPEDIR)/include/qpe/storage.h
+
+../calibrate/moc_calibrate.o: ../calibrate/moc_calibrate.cpp \
+ ../calibrate/calibrate.h
+
+moc_startmenu.o: moc_startmenu.cpp \
+ startmenu.h
+
+moc_transferserver.o: moc_transferserver.cpp \
+ transferserver.h
+
+moc_qcopbridge.o: moc_qcopbridge.cpp \
+ qcopbridge.h
+
+moc_packageslave.o: moc_packageslave.cpp \
+ packageslave.h
+
+moc_irserver.o: moc_irserver.cpp \
+ irserver.h
+
+moc_shutdown.o: appicons.moc \
+ appicons.cpp \
+ appicons.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+moc_syncdialog.o: moc_shutdown.cpp \
+ shutdown.h
+
+moc_background.cpp: background.h
+ $(MOC) background.h -o moc_background.cpp
+
+moc_desktop.cpp: desktop.h
+ $(MOC) desktop.h -o moc_desktop.cpp
+
+moc_info.cpp: info.h
+ $(MOC) info.h -o moc_info.cpp
+
+moc_appicons.cpp: appicons.h
+ $(MOC) appicons.h -o moc_appicons.cpp
+
+moc_taskbar.cpp: taskbar.h
+ $(MOC) taskbar.h -o moc_taskbar.cpp
+
+moc_sidething.cpp: sidething.h
+ $(MOC) sidething.h -o moc_sidething.cpp
+
+moc_inputmethods.cpp: inputmethods.h
+ $(MOC) inputmethods.h -o moc_inputmethods.cpp
+
+moc_systray.cpp: systray.h
+ $(MOC) systray.h -o moc_systray.cpp
+
+moc_shutdownimpl.cpp: shutdownimpl.h
+ $(MOC) shutdownimpl.h -o moc_shutdownimpl.cpp
+
+moc_launcher.cpp: launcher.h
+ $(MOC) launcher.h -o moc_launcher.cpp
+
+moc_launcherview.cpp: launcherview.h
+ $(MOC) launcherview.h -o moc_launcherview.cpp
+
+../calibrate/moc_calibrate.cpp: ../calibrate/calibrate.h
+ $(MOC) ../calibrate/calibrate.h -o ../calibrate/moc_calibrate.cpp
+
+moc_startmenu.cpp: startmenu.h
+ $(MOC) startmenu.h -o moc_startmenu.cpp
+
+moc_transferserver.cpp: transferserver.h
+ $(MOC) transferserver.h -o moc_transferserver.cpp
+
+moc_qcopbridge.cpp: qcopbridge.h
+ $(MOC) qcopbridge.h -o moc_qcopbridge.cpp
+
+moc_packageslave.cpp: packageslave.h
+ $(MOC) packageslave.h -o moc_packageslave.cpp
+
+moc_irserver.cpp: irserver.h
+ $(MOC) irserver.h -o moc_irserver.cpp
+
+appicons.moc: appicons.cpp
+ $(MOC) appicons.cpp -o appicons.moc
+
+moc_shutdown.cpp: shutdown.h
+ $(MOC) shutdown.h -o moc_shutdown.cpp
+
+moc_syncdialog.cpp: syncdialog.h
+ $(MOC) syncdialog.h -o moc_syncdialog.cpp
+
+
diff --git a/core/launcher/appicons.cpp b/core/launcher/appicons.cpp
new file mode 100644
index 0000000..c51ee5a
--- a/dev/null
+++ b/core/launcher/appicons.cpp
@@ -0,0 +1,129 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "appicons.h"
+
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qtooltip.h>
+#include <qpixmap.h>
+
+
+AppIcons::AppIcons( QWidget *parent ) :
+ QHBox(parent)
+{
+ buttons.setAutoDelete(TRUE);
+
+#ifndef QT_NO_COP
+ QCopChannel* channel = new QCopChannel("Qt/Tray", this);
+ connect(channel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(receive(const QCString&, const QByteArray&)));
+#endif
+}
+
+void AppIcons::setIcon(int id, const QPixmap& pm)
+{
+ button(id)->setPixmap(pm);
+}
+
+class FlatButton : public QLabel {
+ Q_OBJECT
+public:
+ FlatButton(QWidget* parent) : QLabel(parent) { }
+
+ void mouseDoubleClickEvent(QMouseEvent* e)
+ {
+ emit clicked(e->pos(),e->button(),TRUE);
+ }
+ void mouseReleaseEvent(QMouseEvent* e)
+ {
+ if ( rect().contains(e->pos()) )
+ emit clicked(e->pos(),e->button(),FALSE);
+ }
+
+signals:
+ void clicked(const QPoint&, int, bool);
+};
+
+QLabel* AppIcons::button(int id)
+{
+ QLabel* f = buttons.find(id);
+ if ( !f ) {
+ buttons.insert(id,f=new FlatButton(this));
+ connect(f,SIGNAL(clicked(const QPoint&, int, bool)),this,SLOT(clicked(const QPoint&, int, bool)));
+ f->show();
+ }
+ return f;
+}
+
+int AppIcons::findId(QLabel* b)
+{
+ QIntDictIterator<QLabel> it(buttons);
+ for ( ; ; ++it )
+ if ( it.current() == b ) return it.currentKey();
+}
+
+void AppIcons::clicked(const QPoint& relpos, int button, bool dbl)
+{
+#ifndef QT_NO_COP
+ QLabel* s = (QLabel*)sender();
+ if ( button == RightButton ) {
+ QCopEnvelope("Qt/Tray","popup(int,QPoint)")
+ << findId(s) << s->mapToGlobal(QPoint(0,0));
+ } else {
+ QCopEnvelope("Qt/Tray",
+ dbl ? "doubleClicked(int,QPoint)" : "clicked(int,QPoint)")
+ << findId(s) << relpos;
+ }
+#endif
+}
+
+void AppIcons::setToolTip(int id, const QString& tip)
+{
+ QToolTip::add(button(id),tip);
+}
+
+void AppIcons::remove(int id)
+{
+ buttons.remove(id);
+}
+
+void AppIcons::receive( const QCString &msg, const QByteArray &data )
+{
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "remove(int)" ) {
+ int id;
+ stream >> id;
+ remove(id);
+ } else if ( msg == "setIcon(int,QPixmap)" ) {
+ int id;
+ QPixmap pm;
+ stream >> id >> pm;
+ setIcon(id,pm);
+ } else if ( msg == "setToolTip(int,QString)" ) {
+ int id;
+ QString s;
+ stream >> id >> s;
+ setToolTip(id,s);
+ }
+}
+
+#include "appicons.moc"
diff --git a/core/launcher/appicons.h b/core/launcher/appicons.h
new file mode 100644
index 0000000..f53f4a7
--- a/dev/null
+++ b/core/launcher/appicons.h
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef APPICONS_H
+#define APPICONS_H
+
+
+#include <qhbox.h>
+#include <qintdict.h>
+#include <qlabel.h>
+
+
+class AppIcons : public QHBox
+{
+ Q_OBJECT
+
+public:
+ AppIcons( QWidget *parent );
+ void setIcon(int id, const QPixmap&);
+ void setToolTip(int id, const QString&);
+ void remove(int id);
+
+private slots:
+ void receive( const QCString &msg, const QByteArray &data );
+ void clicked(const QPoint& relpos, int button, bool dbl);
+
+private:
+ QIntDict<QLabel> buttons;
+ QLabel* button(int id);
+ int findId(QLabel*);
+};
+
+
+#endif
diff --git a/core/launcher/apps.h b/core/launcher/apps.h
new file mode 100644
index 0000000..6216941
--- a/dev/null
+++ b/core/launcher/apps.h
@@ -0,0 +1,83 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+// To add a new app, include appropriate files and add another APP().
+
+#ifndef APP_INCLUDES
+#define APP_INCLUDES
+
+#include "../addressbook/addressbook.h"
+#include "../datebook/datebook.h"
+#include "../helpbrowser/helpbrowser.h"
+#include "../minesweep/minesweep.h"
+#include "../textedit/textedit.h"
+#include "../todo/mainwindow.h"
+#include "../citytime/citytime.h"
+#include "../clock/clock.h"
+#include "../calculator/calculatorimpl.h"
+#include "../sysinfo/sysinfo.h"
+#include "../settings/appearance/settings.h"
+//#include "../settings/language/settings.h"
+//#include "../settings/light-and-power/settings.h"
+//#include "../settings/rotation/settings.h"
+#include "../settings/systemtime/settime.h"
+#if !defined(QT_QPE_SMALL_BUILD)
+#include "../filebrowser/filebrowser.h"
+#include "../solitaire/canvascardwindow.h"
+#include "../snake/interface.h"
+#include "../parashoot/interface.h"
+#include "../mpegplayer/mediaplayer.h"
+#endif
+#if !defined(QT_DEMO_SINGLE_FLOPPY) && !defined(QT_QPE_SMALL_BUILD)
+#include "../embeddedkonsole/konsole.h"
+#include "../wordgame/wordgame.h"
+#endif
+
+#endif
+
+// app-id class maximize? documentary?
+
+APP( "addressbook", AddressbookWindow, 1, 0 )
+APP( "datebook", DateBook, 1, 0 )
+APP( "helpbrowser", HelpBrowser, 1, 1 )
+APP( "textedit", TextEdit, 1, 1 )
+APP( "todo", TodoWindow, 1, 0 )
+APP( "calculator", CalculatorImpl, 1, 0 )
+APP( "citytime", CityTime, 1, 0 )
+APP( "clock", Clock, 1, 0 )
+APP( "minesweep", MineSweep, 1, 0 )
+APP( "sysinfo", SystemInfo, 1, 0 )
+APP( "appearance", AppearanceSettings, 1, 0 )
+APP( "systemtime", SetDateTime, 1, 0 )
+#if !defined(QT_QPE_SMALL_BUILD)
+//APP( "light-and-power", LightSettings, 1, 0 )
+//APP( "sound", SoundSettings, 1, 0 )
+APP( "filebrowser", FileBrowser, 1, 0 )
+APP( "solitaire", CanvasCardWindow, 1, 0 )
+APP( "snake", SnakeGame, 1, 0 )
+APP( "parashoot", ParaShoot, 1, 0 )
+APP( "mpegplayer", MediaPlayer, 1, 0 )
+#endif
+#if !defined(QT_DEMO_SINGLE_FLOPPY) && !defined(QT_QPE_SMALL_BUILD)
+APP( "embeddedkonsole", Konsole, 1, 0 )
+APP( "wordgame", WordGame, 1, 0 )
+#endif
+
diff --git a/core/launcher/background.cpp b/core/launcher/background.cpp
new file mode 100644
index 0000000..04ebc37
--- a/dev/null
+++ b/core/launcher/background.cpp
@@ -0,0 +1,41 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "background.h"
+#include "desktop.h"
+
+#include <qpe/resource.h>
+
+#include <qpainter.h>
+
+
+Background::Background( Desktop *d ) :
+ QWidget( d, 0, WStyle_Tool | WStyle_Customize )
+{
+/*
+ if ( QPixmap::defaultDepth() < 12 ) {
+ setBackgroundColor(QColor(0x20, 0xb0, 0x50));
+ } else {
+ setBackgroundPixmap( Resource::loadPixmap( "bg" ) );
+ }
+*/
+ setBackgroundMode( PaletteButton );
+}
+
diff --git a/core/launcher/background.h b/core/launcher/background.h
new file mode 100644
index 0000000..0885747
--- a/dev/null
+++ b/core/launcher/background.h
@@ -0,0 +1,40 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __BACKGROUND_H__
+#define __BACKGROUND_H__
+
+
+#include <qwidget.h>
+
+
+class Desktop;
+
+
+class Background : public QWidget {
+ Q_OBJECT
+public:
+ Background( Desktop *d );
+};
+
+
+#endif // __BACKGROUND_H__
+
+
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp
new file mode 100644
index 0000000..d39af25
--- a/dev/null
+++ b/core/launcher/desktop.cpp
@@ -0,0 +1,655 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "desktop.h"
+#include "info.h"
+#include "launcher.h"
+#include "mrulist.h"
+#include "qcopbridge.h"
+#include "shutdownimpl.h"
+#include "startmenu.h"
+#include "taskbar.h"
+#include "transferserver.h"
+#include "irserver.h"
+#include "packageslave.h"
+
+#include <qpe/applnk.h>
+#include <qpe/mimetype.h>
+#include <qpe/password.h>
+#include <qpe/config.h>
+#include <qpe/power.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/global.h>
+#ifdef QT_QWS_CUSTOM
+#include "qpe/custom.h"
+#endif
+
+#include <qgfx_qws.h>
+#include <qmainwindow.h>
+#include <qmessagebox.h>
+#include <qtimer.h>
+#include <qwindowsystem_qws.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+
+static Desktop* qpedesktop = 0;
+static int loggedin=0;
+static void login(bool at_poweron)
+{
+ if ( !loggedin ) {
+ Global::terminateBuiltin("calibrate");
+ Password::authenticate(at_poweron);
+ loggedin=1;
+ QCopEnvelope e( "QPE/Desktop", "unlocked()" );
+ }
+}
+
+bool Desktop::screenLocked()
+{
+ return loggedin == 0;
+}
+
+/*
+ Priority is number of alerts that are needed to pop up
+ alert.
+ */
+class DesktopPowerAlerter : public QMessageBox
+{
+public:
+ DesktopPowerAlerter( QWidget *parent, const char *name = 0 )
+ : QMessageBox( tr("Battery Status"), "Low Battery",
+ QMessageBox::Critical,
+ QMessageBox::Ok | QMessageBox::Default,
+ QMessageBox::NoButton, QMessageBox::NoButton,
+ parent, name, FALSE )
+ {
+ currentPriority = INT_MAX;
+ alertCount = 0;
+ }
+
+ void alert( const QString &text, int priority );
+ void hideEvent( QHideEvent * );
+private:
+ int currentPriority;
+ int alertCount;
+};
+
+void DesktopPowerAlerter::alert( const QString &text, int priority )
+{
+ alertCount++;
+ if ( alertCount < priority )
+ return;
+ if ( priority > currentPriority )
+ return;
+ currentPriority = priority;
+ setText( text );
+ show();
+}
+
+
+void DesktopPowerAlerter::hideEvent( QHideEvent *e )
+{
+ QMessageBox::hideEvent( e );
+ alertCount = 0;
+ currentPriority = INT_MAX;
+}
+
+
+
+DesktopApplication::DesktopApplication( int& argc, char **argv, Type t )
+ : QPEApplication( argc, argv, t )
+{
+
+ QTimer *t = new QTimer( this );
+ connect( t, SIGNAL(timeout()), this, SLOT(psTimeout()) );
+ t->start( 10000 );
+ ps = new PowerStatus;
+ pa = new DesktopPowerAlerter( 0 );
+}
+
+
+DesktopApplication::~DesktopApplication()
+{
+ delete ps;
+ delete pa;
+}
+
+
+enum MemState { Unknown, VeryLow, Low, Normal } memstate=Unknown;
+
+#ifdef Q_WS_QWS
+bool DesktopApplication::qwsEventFilter( QWSEvent *e )
+{
+ qpedesktop->checkMemory();
+
+ if ( e->type == QWSEvent::Key ) {
+ QWSKeyEvent *ke = (QWSKeyEvent *)e;
+ if ( !loggedin && ke->simpleData.keycode != Key_F34 )
+ return TRUE;
+ bool press = ke->simpleData.is_press;
+ if ( !keyboardGrabbed() ) {
+ if ( ke->simpleData.keycode == Key_F9 ) {
+ if ( press ) emit datebook();
+ return TRUE;
+ }
+ if ( ke->simpleData.keycode == Key_F10 ) {
+ if ( !press && cardSendTimer ) {
+ emit contacts();
+ delete cardSendTimer;
+ } else if ( press ) {
+ cardSendTimer = new QTimer();
+ cardSendTimer->start( 2000, TRUE );
+ connect( cardSendTimer, SIGNAL( timeout() ), this, SLOT( sendCard() ) );
+ }
+ return TRUE;
+ }
+ /* menu key now opens application menu/toolbar
+ if ( ke->simpleData.keycode == Key_F11 ) {
+ if ( press ) emit menu();
+ return TRUE;
+ }
+ */
+ if ( ke->simpleData.keycode == Key_F12 ) {
+ while( activePopupWidget() )
+ activePopupWidget()->close();
+ if ( press ) emit launch();
+ return TRUE;
+ }
+ if ( ke->simpleData.keycode == Key_F13 ) {
+ if ( press ) emit email();
+ return TRUE;
+ }
+ }
+ if ( ke->simpleData.keycode == Key_F34 ) {
+ if ( press ) emit power();
+ return TRUE;
+ }
+ if ( ke->simpleData.keycode == Key_F35 ) {
+ if ( press ) emit backlight();
+ return TRUE;
+ }
+ if ( ke->simpleData.keycode == Key_F32 ) {
+ if ( press ) QCopEnvelope e( "QPE/Desktop", "startSync()" );
+ return TRUE;
+ }
+ if ( ke->simpleData.keycode == Key_F31 && !ke->simpleData.modifiers ) {
+ if ( press ) emit symbol();
+ return TRUE;
+ }
+ if ( ke->simpleData.keycode == Key_NumLock ) {
+ if ( press ) emit numLockStateToggle();
+ }
+ if ( ke->simpleData.keycode == Key_CapsLock ) {
+ if ( press ) emit capsLockStateToggle();
+ }
+ if ( press )
+ qpedesktop->keyClick();
+ } else {
+ if ( e->type == QWSEvent::Mouse ) {
+ QWSMouseEvent *me = (QWSMouseEvent *)e;
+ static bool up = TRUE;
+ if ( me->simpleData.state&LeftButton ) {
+ if ( up ) {
+ up = FALSE;
+ qpedesktop->screenClick();
+ }
+ } else {
+ up = TRUE;
+ }
+ }
+ }
+
+ return QPEApplication::qwsEventFilter( e );
+}
+#endif
+
+void DesktopApplication::psTimeout()
+{
+ qpedesktop->checkMemory(); // in case no events are being generated
+
+ *ps = PowerStatusManager::readStatus();
+
+ if ( (ps->batteryStatus() == PowerStatus::VeryLow ) ) {
+ pa->alert( tr( "Battery is running very low." ), 6 );
+ }
+
+ if ( ps->batteryStatus() == PowerStatus::Critical ) {
+ pa->alert( tr( "Battery level is critical!\n"
+ "Keep power off until power restored!" ), 1 );
+ }
+
+ if ( ps->backupBatteryStatus() == PowerStatus::VeryLow ) {
+ pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 3 );
+ }
+}
+
+
+void DesktopApplication::sendCard()
+{
+ delete cardSendTimer;
+ cardSendTimer = 0;
+ QString card = getenv("HOME");
+ card += "/Applications/addressbook/businesscard.vcf";
+
+ if ( QFile::exists( card ) ) {
+ QCopEnvelope e("QPE/Obex", "send(QString,QString,QString)");
+ QString mimetype = "text/x-vCard";
+ e << tr("business card") << card << mimetype;
+ }
+}
+
+#if defined(QPE_HAVE_MEMALERTER)
+QPE_MEMALERTER_IMPL
+#endif
+
+#if defined(CUSTOM_SOUND_IMPL)
+CUSTOM_SOUND_IMPL
+#endif
+
+//===========================================================================
+
+Desktop::Desktop() :
+ QWidget( 0, 0, WStyle_Tool | WStyle_Customize ),
+ qcopBridge( 0 ),
+ transferServer( 0 ),
+ packageSlave( 0 )
+{
+#ifdef CUSTOM_SOUND_INIT
+ CUSTOM_SOUND_INIT;
+#endif
+
+ qpedesktop = this;
+
+// bg = new Info( this );
+ tb = new TaskBar;
+
+ launcher = new Launcher( 0, 0, WStyle_Customize | QWidget::WGroupLeader );
+
+ connect(launcher, SIGNAL(busy()), tb, SLOT(startWait()));
+ connect(launcher, SIGNAL(notBusy(const QString&)), tb, SLOT(stopWait(const QString&)));
+
+ int displayw = qApp->desktop()->width();
+ int displayh = qApp->desktop()->height();
+
+
+ QSize sz = tb->sizeHint();
+
+ setGeometry( 0, displayh-sz.height(), displayw, sz.height() );
+ tb->setGeometry( 0, displayh-sz.height(), displayw, sz.height() );
+
+ tb->show();
+ launcher->showMaximized();
+ launcher->show();
+ launcher->raise();
+#if defined(QPE_HAVE_MEMALERTER)
+ initMemalerter();
+#endif
+ // start services
+ startTransferServer();
+ (void) new IrServer( this );
+ rereadVolumes();
+
+ packageSlave = new PackageSlave( this );
+ connect(qApp, SIGNAL(volumeChanged(bool)), this, SLOT(rereadVolumes()));
+
+ qApp->installEventFilter( this );
+}
+
+void Desktop::show()
+{
+ login(TRUE);
+ QWidget::show();
+}
+
+Desktop::~Desktop()
+{
+ delete launcher;
+ delete tb;
+ delete qcopBridge;
+ delete transferServer;
+}
+
+bool Desktop::recoverMemory()
+{
+ return tb->recoverMemory();
+}
+
+void Desktop::checkMemory()
+{
+#if defined(QPE_HAVE_MEMALERTER)
+ static bool ignoreNormal=FALSE;
+ static bool existingMessage=FALSE;
+
+ if(existingMessage)
+ return; // don't show a second message while still on first
+
+ existingMessage = TRUE;
+ switch ( memstate ) {
+ case Unknown:
+ break;
+ case Low:
+ memstate = Unknown;
+ if ( recoverMemory() )
+ ignoreNormal = TRUE;
+ else
+ QMessageBox::warning( 0 , "Memory Status",
+ "The memory smacks of shortage. \n"
+ "Please save data. " );
+ break;
+ case Normal:
+ memstate = Unknown;
+ if ( ignoreNormal )
+ ignoreNormal = FALSE;
+ else
+ QMessageBox::information ( 0 , "Memory Status",
+ "There is enough memory again." );
+ break;
+ case VeryLow:
+ memstate = Unknown;
+ QMessageBox::critical( 0 , "Memory Status",
+ "The memory is very low. \n"
+ "Please end this application \n"
+ "immediately." );
+ recoverMemory();
+ }
+ existingMessage = FALSE;
+#endif
+}
+
+static bool isVisibleWindow(int wid)
+{
+ const QList<QWSWindow> &list = qwsServer->clientWindows();
+ QWSWindow* w;
+ for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
+ if ( w->winId() == wid )
+ return !w->isFullyObscured();
+ }
+ return FALSE;
+}
+
+static bool hasVisibleWindow(const QString& clientname)
+{
+ const QList<QWSWindow> &list = qwsServer->clientWindows();
+ QWSWindow* w;
+ for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
+ if ( w->client()->identity() == clientname && !w->isFullyObscured() )
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void Desktop::raiseLauncher()
+{
+ if ( isVisibleWindow(launcher->winId()) )
+ launcher->nextView();
+ else
+ launcher->raise();
+}
+
+void Desktop::executeOrModify(const QString& appLnkFile)
+{
+ AppLnk lnk(MimeType::appsFolderName() + "/" + appLnkFile);
+ if ( lnk.isValid() ) {
+ QCString app = lnk.exec().utf8();
+ Global::terminateBuiltin("calibrate");
+ if ( QCopChannel::isRegistered("QPE/Application/" + app) ) {
+ MRUList::addTask(&lnk);
+ if ( hasVisibleWindow(app) )
+ QCopChannel::send("QPE/Application/" + app, "nextView()");
+ else
+ QCopChannel::send("QPE/Application/" + app, "raise()");
+ } else {
+ lnk.execute();
+ }
+ }
+}
+
+void Desktop::raiseDatebook()
+{
+ executeOrModify("Applications/datebook.desktop");
+}
+
+void Desktop::raiseContacts()
+{
+ executeOrModify("Applications/addressbook.desktop");
+}
+
+void Desktop::raiseMenu()
+{
+ Global::terminateBuiltin("calibrate");
+ tb->startMenu()->launch();
+}
+
+void Desktop::raiseEmail()
+{
+ executeOrModify("Applications/qtmail.desktop");
+}
+
+#if defined(QPE_HAVE_TOGGLELIGHT)
+#include <qpe/config.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <linux/ioctl.h>
+#include <time.h>
+#endif
+
+static bool blanked=FALSE;
+
+static void blankScreen()
+{
+ if ( !qt_screen ) return;
+ /* Should use a big black window instead.
+ QGfx* g = qt_screen->screenGfx();
+ g->fillRect(0,0,qt_screen->width(),qt_screen->height());
+ delete g;
+ */
+ blanked = TRUE;
+}
+
+static void darkScreen()
+{
+ extern void qpe_setBacklight(int);
+ qpe_setBacklight(0); // force off
+}
+
+
+void Desktop::togglePower()
+{
+ bool wasloggedin = loggedin;
+ loggedin=0;
+ darkScreen();
+ if ( wasloggedin )
+ blankScreen();
+ system("apm --suspend");
+ QWSServer::screenSaverActivate( FALSE );
+ {
+ QCopEnvelope("QPE/Card", "mtabChanged()" ); // might have changed while asleep
+ QCopEnvelope e("QPE/System", "setBacklight(int)");
+ e << -3; // Force on
+ }
+ if ( wasloggedin )
+ login(TRUE);
+ //qcopBridge->closeOpenConnections();
+ //qDebug("called togglePower()!!!!!!");
+}
+
+void Desktop::toggleLight()
+{
+ QCopEnvelope e("QPE/System", "setBacklight(int)");
+ e << -2; // toggle
+}
+
+void Desktop::toggleSymbolInput()
+{
+ tb->toggleSymbolInput();
+}
+
+void Desktop::toggleNumLockState()
+{
+ tb->toggleNumLockState();
+}
+
+void Desktop::toggleCapsLockState()
+{
+ tb->toggleCapsLockState();
+}
+
+void Desktop::styleChange( QStyle &s )
+{
+ QWidget::styleChange( s );
+ int displayw = qApp->desktop()->width();
+ int displayh = qApp->desktop()->height();
+
+ QSize sz = tb->sizeHint();
+
+ tb->setGeometry( 0, displayh-sz.height(), displayw, sz.height() );
+}
+
+void DesktopApplication::shutdown()
+{
+ if ( type() != GuiServer )
+ return;
+ ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose );
+ connect( sd, SIGNAL(shutdown(ShutdownImpl::Type)),
+ this, SLOT(shutdown(ShutdownImpl::Type)) );
+ sd->showMaximized();
+}
+
+void DesktopApplication::shutdown( ShutdownImpl::Type t )
+{
+ switch ( t ) {
+ case ShutdownImpl::ShutdownSystem:
+ execlp("shutdown", "shutdown", "-h", "now", (void*)0);
+ break;
+ case ShutdownImpl::RebootSystem:
+ execlp("shutdown", "shutdown", "-r", "now", (void*)0);
+ break;
+ case ShutdownImpl::RestartDesktop:
+ restart();
+ break;
+ case ShutdownImpl::TerminateDesktop:
+ prepareForTermination(FALSE);
+ quit();
+ break;
+ }
+}
+
+void DesktopApplication::restart()
+{
+ prepareForTermination(TRUE);
+
+#ifdef Q_WS_QWS
+ for ( int fd = 3; fd < 100; fd++ )
+ close( fd );
+#if defined(QT_DEMO_SINGLE_FLOPPY)
+ execl( "/sbin/init", "qpe", 0 );
+#elif defined(QT_QWS_CASSIOPEIA)
+ execl( "/bin/sh", "sh", 0 );
+#else
+ execl( (qpeDir()+"/bin/qpe").latin1(), "qpe", 0 );
+#endif
+ exit(1);
+#endif
+}
+
+void Desktop::startTransferServer()
+{
+ // start qcop bridge server
+ qcopBridge = new QCopBridge( 4243 );
+ if ( !qcopBridge->ok() ) {
+ delete qcopBridge;
+ qcopBridge = 0;
+ }
+ // start transfer server
+ transferServer = new TransferServer( 4242 );
+ if ( !transferServer->ok() ) {
+ delete transferServer;
+ transferServer = 0;
+ }
+ if ( !transferServer || !qcopBridge )
+ startTimer( 2000 );
+}
+
+void Desktop::timerEvent( QTimerEvent *e )
+{
+ killTimer( e->timerId() );
+ startTransferServer();
+}
+
+void Desktop::terminateServers()
+{
+ delete transferServer;
+ delete qcopBridge;
+ transferServer = 0;
+ qcopBridge = 0;
+}
+
+void Desktop::rereadVolumes()
+{
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ touchclick = cfg.readBoolEntry("Touch");
+ keyclick = cfg.readBoolEntry("Key");
+}
+
+void Desktop::keyClick()
+{
+#ifdef CUSTOM_SOUND_KEYCLICK
+ if ( keyclick )
+ CUSTOM_SOUND_KEYCLICK;
+#endif
+}
+
+void Desktop::screenClick()
+{
+#ifdef CUSTOM_SOUND_TOUCH
+ if ( touchclick )
+ CUSTOM_SOUND_TOUCH;
+#endif
+}
+
+void Desktop::soundAlarm()
+{
+#ifdef CUSTOM_SOUND_ALARM
+ CUSTOM_SOUND_ALARM;
+#endif
+}
+
+bool Desktop::eventFilter( QObject *w, QEvent *ev )
+{
+ if ( ev->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent *)ev;
+ if ( ke->key() == Qt::Key_F11 ) { // menu key
+ QWidget *active = qApp->activeWindow();
+ if ( active && active->isPopup() ) {
+ active->close();
+ }
+ raiseMenu();
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
diff --git a/core/launcher/desktop.h b/core/launcher/desktop.h
new file mode 100644
index 0000000..dfdbeab
--- a/dev/null
+++ b/core/launcher/desktop.h
@@ -0,0 +1,129 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __DESKTOP_H__
+#define __DESKTOP_H__
+
+
+#include "shutdownimpl.h"
+
+#include <qpe/qpeapplication.h>
+
+#include <qwidget.h>
+
+class Background;
+class Launcher;
+class TaskBar;
+class PowerStatus;
+class QCopBridge;
+class TransferServer;
+class DesktopPowerAlerter;
+class PackageSlave;
+
+class DesktopApplication : public QPEApplication
+{
+ Q_OBJECT
+public:
+ DesktopApplication( int& argc, char **argv, Type t );
+ ~DesktopApplication();
+signals:
+ void home();
+ void datebook();
+ void contacts();
+ void launch();
+ void email();
+ void backlight();
+ void power();
+ void symbol();
+ void numLockStateToggle();
+ void capsLockStateToggle();
+ void prepareForRestart();
+
+protected:
+#ifdef Q_WS_QWS
+ bool qwsEventFilter( QWSEvent * );
+#endif
+ void shutdown();
+ void restart();
+
+protected slots:
+ void shutdown(ShutdownImpl::Type);
+ void psTimeout();
+ void sendCard();
+private:
+ DesktopPowerAlerter *pa;
+ PowerStatus *ps;
+ QTimer *cardSendTimer;
+};
+
+
+class Desktop : public QWidget {
+ Q_OBJECT
+public:
+ Desktop();
+ ~Desktop();
+
+ static bool screenLocked();
+
+ void show();
+ void checkMemory();
+
+ void keyClick();
+ void screenClick();
+ static void soundAlarm();
+
+public slots:
+ void raiseDatebook();
+ void raiseContacts();
+ void raiseMenu();
+ void raiseLauncher();
+ void raiseEmail();
+ void togglePower();
+ void toggleLight();
+ void toggleNumLockState();
+ void toggleCapsLockState();
+ void toggleSymbolInput();
+ void terminateServers();
+ void rereadVolumes();
+
+protected:
+ void executeOrModify(const QString& appLnkFile);
+ void styleChange( QStyle & );
+ void timerEvent( QTimerEvent *e );
+ bool eventFilter( QObject *, QEvent * );
+
+ QWidget *bg;
+ Launcher *launcher;
+ TaskBar *tb;
+
+private:
+ void startTransferServer();
+ bool recoverMemory();
+
+ QCopBridge *qcopBridge;
+ TransferServer *transferServer;
+ PackageSlave *packageSlave;
+
+ bool keyclick,touchclick;
+};
+
+
+#endif // __DESKTOP_H__
+
diff --git a/core/launcher/info.cpp b/core/launcher/info.cpp
new file mode 100644
index 0000000..609e9e2
--- a/dev/null
+++ b/core/launcher/info.cpp
@@ -0,0 +1,116 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "info.h"
+#include "desktop.h"
+
+#include <qpe/resource.h>
+#include <qpe/version.h>
+
+#include <qlayout.h>
+#include <qimage.h>
+#include <qpainter.h>
+#include <qsimplerichtext.h>
+
+
+Info *desktopInfo = NULL;
+
+
+Info::Info( Desktop *d ) : Background( d ), needsClear(FALSE), menuHasBeenClicked(FALSE)
+{
+ QString motd;
+ /* eg.
+ =
+ "<table width=100% cellspacing=0 cellpadding=2>"
+ "<tr><td bgcolor=#9090ff><h2>Today&nbsp;&nbsp;&nbsp;&nbsp;<small>June 15, 2001</small></h2></td>"
+ "<tr><td bgcolor=#c0c0ff><big><a href=datebook>Appointments</a></big>"
+ "<tr><td bgcolor=#e0e0ff>"
+ "<b>8:30am</b> Meeting with John<br>"
+ "<b>1:10pm</b> Lunch with Sharon"
+ "<tr><td bgcolor=#c0c0ff><big><a href=todo>Reminders</a></big>"
+ "<tr><td bgcolor=#e0e0ff>"
+ "<b>#1</b> Port XMAME to QPE<br>"
+ "<b>#2</b> Flowers for wife"
+ "<tr><td bgcolor=#c0c0ff><big><a href=channels>Net channels</a></big>"
+ "<tr><td bgcolor=#e0e0ff>"
+ "<b>LinuxDevices:</b><a href=http://www.linuxdevices.com> QPE announcement</a><br>"
+ "<b>Slashdot:</b><a href=http://www.slashdot.org> GPL Examined</a>"
+ "</table>";
+ */
+ info = new QSimpleRichText(motd, QFont("lucidux_sans",10));
+ desktopInfo = this;
+}
+
+
+void Info::mouseReleaseEvent( QMouseEvent * )
+{
+}
+
+
+void Info::menuClicked( )
+{
+ QPainter p(this);
+ if ( needsClear ) {
+ QColor col = colorGroup().color( QColorGroup::Button ).dark( 0 );
+ p.fillRect( 5, height() - 24, width() - 5, 20, col );
+ needsClear = FALSE;
+ menuHasBeenClicked = TRUE;
+ }
+}
+
+
+void Info::paintEvent( QPaintEvent *e )
+{
+ QPainter p(this);
+
+ BrushStyle styles[] = { Dense1Pattern, Dense2Pattern, Dense3Pattern,
+ Dense4Pattern, Dense5Pattern, Dense6Pattern };
+
+ QColor shade = colorGroup().color( QColorGroup::Button ).dark( 110 );
+ int blend = width() * 3 / 4;
+ int step = blend/6;
+ p.fillRect( 0, 0, width()-blend, 30, shade );
+ for ( int i = 0; i < 6; i++ ) {
+ QBrush brush( shade, styles[i] );
+ p.fillRect( width()-blend+i*step, 0, step, 30, brush );
+ }
+ p.setFont( QFont("Helvetica", 24, QFont::Bold) );
+ p.setPen( shade.dark( 140 ) );
+ p.drawText( 5, 24, "QPE" );
+ int pos = 5 + p.fontMetrics().width( "QPE" );
+ QFont f("Helvetica", 10, QFont::Bold);
+ p.setFont( f );
+ p.drawText( pos + 5, 24, QString( "Version " ) + QPE_VERSION );
+
+ if (!menuHasBeenClicked) {
+ p.drawText( 5, height()-10, QString( "Click on the " ) );
+ int pos = 5 + p.fontMetrics().width( "Click on the " );
+ p.drawPixmap( pos, height()-10-14, Resource::loadPixmap( "go" ) );
+ p.drawText( pos + 16, height()-10, QString( " logo to start." ) );
+ needsClear = TRUE;
+ }
+
+ if ( info ) {
+ info->setWidth(&p,width()-10);
+ info->draw(&p, 5, 35, e->region(), colorGroup());
+ }
+}
+
+
diff --git a/core/launcher/info.h b/core/launcher/info.h
new file mode 100644
index 0000000..317dec5
--- a/dev/null
+++ b/core/launcher/info.h
@@ -0,0 +1,55 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __INFO_H__
+#define __INFO_H__
+
+
+#include <qwidget.h>
+#include <qpainter.h>
+#include "background.h"
+
+class QSimpleRichText;
+
+class Info : public Background {
+ Q_OBJECT
+public:
+ Info( Desktop *d );
+ void menuClicked( );
+
+signals:
+ void giveInfo( );
+
+protected:
+ void mouseReleaseEvent( QMouseEvent *e );
+ void paintEvent( QPaintEvent *pe );
+
+private:
+ QSimpleRichText* info;
+ bool needsClear;
+ bool menuHasBeenClicked;
+};
+
+
+extern Info *desktopInfo;
+
+
+#endif // __INFO_H__
+
diff --git a/core/launcher/inputmethods.cpp b/core/launcher/inputmethods.cpp
new file mode 100644
index 0000000..003dc77
--- a/dev/null
+++ b/core/launcher/inputmethods.cpp
@@ -0,0 +1,297 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "inputmethods.h"
+
+#include <qpe/config.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/inputmethodinterface.h>
+#include <qpe/qlibrary.h>
+
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qtoolbutton.h>
+#include <qwidget.h>
+#include <qlayout.h>
+#include <qtimer.h>
+#include <qdir.h>
+#include <stdlib.h>
+#include <qtranslator.h>
+
+#ifdef Q_WS_QWS
+#include <qwindowsystem_qws.h>
+#include <qwsevent_qws.h>
+#endif
+
+#ifdef SINGLE_APP
+#include "handwritingimpl.h"
+#include "keyboardimpl.h"
+#include "pickboardimpl.h"
+#endif
+
+
+/* XPM */
+static const char * tri_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+".........",
+".........",
+"....a....",
+"...aaa...",
+"..aaaaa..",
+".aaaaaaa.",
+".........",
+"........."};
+
+static const int inputWidgetStyle = QWidget::WStyle_Customize |
+ QWidget::WStyle_Tool |
+ QWidget::WStyle_StaysOnTop |
+ QWidget::WGroupLeader;
+
+InputMethods::InputMethods( QWidget *parent ) :
+ QWidget( parent, "InputMethods", WStyle_Tool | WStyle_Customize )
+{
+ method = NULL;
+
+ QHBoxLayout *hbox = new QHBoxLayout( this );
+
+ kbdButton = new QToolButton( this );
+ kbdButton->setFocusPolicy(NoFocus);
+ kbdButton->setToggleButton( TRUE );
+ kbdButton->setFixedHeight( 17 );
+ kbdButton->setFixedWidth( 32 );
+ kbdButton->setAutoRaise( TRUE );
+ kbdButton->setUsesBigPixmap( TRUE );
+ hbox->addWidget( kbdButton );
+ connect( kbdButton, SIGNAL(toggled(bool)), this, SLOT(showKbd(bool)) );
+
+ kbdChoice = new QToolButton( this );
+ kbdChoice->setFocusPolicy(NoFocus);
+ kbdChoice->setPixmap( QPixmap( (const char **)tri_xpm ) );
+ kbdChoice->setFixedHeight( 17 );
+ kbdChoice->setFixedWidth( 12 );
+ kbdChoice->setAutoRaise( TRUE );
+ hbox->addWidget( kbdChoice );
+ connect( kbdChoice, SIGNAL(clicked()), this, SLOT(chooseKbd()) );
+
+ connect( (QPEApplication*)qApp, SIGNAL(clientMoused()),
+ this, SLOT(resetStates()) );
+
+ loadInputMethods();
+}
+
+InputMethods::~InputMethods()
+{
+#ifndef SINGLE_APP
+ QValueList<InputMethod>::Iterator mit;
+ for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) {
+ int i = (*mit).interface->release();
+ (*mit).library->unload();
+ delete (*mit).library;
+ }
+#endif
+}
+
+void InputMethods::hideInputMethod()
+{
+ kbdButton->setOn( FALSE );
+}
+
+void InputMethods::showInputMethod()
+{
+ kbdButton->setOn( TRUE );
+}
+
+void InputMethods::showInputMethod(const QString& name)
+{
+ int i = 0;
+ QValueList<InputMethod>::Iterator it;
+ InputMethod *im = 0;
+ for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) {
+ if ( (*it).interface->name() == name ) {
+ im = &(*it);
+ break;
+ }
+ }
+ if ( im )
+ chooseMethod(im);
+}
+
+void InputMethods::resetStates()
+{
+ if ( method )
+ method->interface->resetState();
+}
+
+QRect InputMethods::inputRect() const
+{
+ if ( !method || !method->widget->isVisible() )
+ return QRect();
+ else
+ return method->widget->geometry();
+}
+
+void InputMethods::loadInputMethods()
+{
+#ifndef SINGLE_APP
+ hideInputMethod();
+ method = 0;
+
+ QValueList<InputMethod>::Iterator mit;
+ for ( mit = inputMethodList.begin(); mit != inputMethodList.end(); ++mit ) {
+ (*mit).interface->release();
+ (*mit).library->unload();
+ delete (*mit).library;
+ }
+ inputMethodList.clear();
+
+ QString path = QPEApplication::qpeDir() + "/plugins/inputmethods";
+ QDir dir( path, "lib*.so" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ InputMethodInterface *iface = 0;
+ QLibrary *lib = new QLibrary( path + "/" + *it );
+ if ( lib->queryInterface( IID_InputMethod, (QUnknownInterface**)&iface ) == QS_OK ) {
+ InputMethod input;
+ input.library = lib;
+ input.interface = iface;
+ input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
+ input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
+ inputMethodList.append( input );
+ QString lang = getenv( "LANG" );
+ QTranslator * trans = new QTranslator(qApp);
+ QString type = (*it).left( (*it).find(".") );
+ QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm";
+ qDebug("tr for inputmethod: %s", tfn.latin1() );
+ if ( trans->load( tfn ))
+ qApp->installTranslator( trans );
+ else
+ delete trans;
+ } else {
+ delete lib;
+ }
+ }
+#else
+ InputMethod input;
+ input.interface = new HandwritingImpl();
+ input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
+ input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
+ inputMethodList.append( input );
+ input.interface = new KeyboardImpl();
+ input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
+ input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
+ inputMethodList.append( input );
+ input.interface = new PickboardImpl();
+ input.widget = input.interface->inputMethod( 0, inputWidgetStyle );
+ input.interface->onKeyPress( this, SLOT(sendKey(ushort,ushort,ushort,bool,bool)) );
+ inputMethodList.append( input );
+#endif
+ if ( !inputMethodList.isEmpty() ) {
+ method = &inputMethodList[0];
+ kbdButton->setPixmap( *method->interface->icon() );
+ }
+ if ( !inputMethodList.isEmpty() )
+ kbdButton->show();
+ else
+ kbdButton->hide();
+ if ( inputMethodList.count() > 1 )
+ kbdChoice->show();
+ else
+ kbdChoice->hide();
+}
+
+void InputMethods::chooseKbd()
+{
+ QPopupMenu pop( this );
+
+ int i = 0;
+ QValueList<InputMethod>::Iterator it;
+ for ( it = inputMethodList.begin(); it != inputMethodList.end(); ++it, i++ ) {
+ pop.insertItem( (*it).interface->name(), i );
+ if ( method == &(*it) )
+ pop.setItemChecked( i, TRUE );
+ }
+
+ QPoint pt = mapToGlobal(kbdChoice->geometry().topRight());
+ QSize s = pop.sizeHint();
+ pt.ry() -= s.height();
+ pt.rx() -= s.width();
+ i = pop.exec( pt );
+ if ( i == -1 )
+ return;
+ InputMethod *im = &inputMethodList[i];
+ chooseMethod(im);
+}
+
+void InputMethods::chooseMethod(InputMethod* im)
+{
+ if ( im != method ) {
+ if ( method && method->widget->isVisible() )
+ method->widget->hide();
+ method = im;
+ kbdButton->setPixmap( *method->interface->icon() );
+ }
+ if ( !kbdButton->isOn() )
+ kbdButton->setOn( TRUE );
+ else
+ showKbd( TRUE );
+}
+
+
+void InputMethods::showKbd( bool on )
+{
+ if ( !method )
+ return;
+
+ if ( on ) {
+ method->interface->resetState();
+ // HACK... Make the texteditor fit with all input methods
+ // Input methods should also never use more than about 40% of the screen
+ int height = QMIN( method->widget->sizeHint().height(), 134 );
+ method->widget->resize( qApp->desktop()->width(), height );
+ method->widget->move( 0, mapToGlobal( QPoint() ).y() - height );
+ method->widget->show();
+ } else {
+ method->widget->hide();
+ }
+
+ emit inputToggled( on );
+}
+
+bool InputMethods::shown() const
+{
+ return method && method->widget->isVisible();
+}
+
+QString InputMethods::currentShown() const
+{
+ return method && method->widget->isVisible()
+ ? method->interface->name() : QString::null;
+}
+
+void InputMethods::sendKey( ushort unicode, ushort scancode, ushort mod, bool press, bool repeat )
+{
+#if defined(Q_WS_QWS)
+ QWSServer::sendKeyEvent( unicode, scancode, mod, press, repeat );
+#endif
+}
diff --git a/core/launcher/inputmethods.h b/core/launcher/inputmethods.h
new file mode 100644
index 0000000..286a818
--- a/dev/null
+++ b/core/launcher/inputmethods.h
@@ -0,0 +1,76 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __INPUT_METHODS_H__
+#define __INPUT_METHODS_H__
+
+
+#include <qpe/inputmethodinterface.h>
+
+#include <qwidget.h>
+#include <qvaluelist.h>
+
+class QToolButton;
+class QLibrary;
+
+struct InputMethod
+{
+#ifndef QT_NO_COMPONENT
+ QLibrary *library;
+#endif
+ QWidget *widget;
+ InputMethodInterface *interface;
+};
+
+class InputMethods : public QWidget
+{
+ Q_OBJECT
+public:
+ InputMethods( QWidget * );
+ ~InputMethods();
+
+ QRect inputRect() const;
+ bool shown() const;
+ QString currentShown() const; // name of interface
+ void showInputMethod(const QString& id);
+ void showInputMethod();
+ void hideInputMethod();
+ void loadInputMethods();
+
+signals:
+ void inputToggled( bool on );
+
+private slots:
+ void chooseKbd();
+ void showKbd( bool );
+ void resetStates();
+ void sendKey( ushort unicode, ushort scancode, ushort modifiers, bool, bool );
+
+private:
+ void chooseMethod(InputMethod* im);
+ QToolButton *kbdButton;
+ QToolButton *kbdChoice;
+ InputMethod *method;
+ QValueList<InputMethod> inputMethodList;
+};
+
+
+#endif // __INPUT_METHODS_H__
+
diff --git a/core/launcher/irserver.cpp b/core/launcher/irserver.cpp
new file mode 100644
index 0000000..b22e064
--- a/dev/null
+++ b/core/launcher/irserver.cpp
@@ -0,0 +1,50 @@
+#include "irserver.h"
+
+#include <qpe/qlibrary.h>
+#include <qpe/qpeapplication.h>
+
+#include <qtranslator.h>
+#include <stdlib.h>
+
+#include "obexinterface.h"
+
+#include <qdir.h>
+
+IrServer::IrServer( QObject *parent, const char *name )
+ : QObject( parent, name )
+{
+ lib = 0;
+ QString path = QPEApplication::qpeDir() + "/plugins/obex/";
+ QDir dir( path, "lib*.so" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ ObexInterface *iface = 0;
+ QLibrary *trylib = new QLibrary( path + *it );
+ qDebug("trying lib %s", (path + (*it)).latin1() );
+ if ( trylib->queryInterface( IID_ObexInterface, (QUnknownInterface**)&iface ) == QS_OK ) {
+ lib = trylib;
+ qDebug("found obex lib" );
+ QString lang = getenv( "LANG" );
+ QTranslator * trans = new QTranslator(qApp);
+ QString type = (*it).left( (*it).find(".") );
+ QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm";
+ qDebug("tr fpr obex: %s", tfn.latin1() );
+ if ( trans->load( tfn ))
+ qApp->installTranslator( trans );
+ else
+ delete trans;
+
+ break;
+ } else {
+ delete lib;
+ }
+ }
+ if ( !lib )
+ qDebug("could not load IR plugin" );
+}
+
+IrServer::~IrServer()
+{
+ delete lib;
+}
diff --git a/core/launcher/irserver.h b/core/launcher/irserver.h
new file mode 100644
index 0000000..f9f682f
--- a/dev/null
+++ b/core/launcher/irserver.h
@@ -0,0 +1,20 @@
+#ifndef IRSERVER_H
+#define IRSERVER_H
+
+#include <qobject.h>
+
+class QCopChannel;
+class QLibrary;
+
+class IrServer : public QObject
+{
+ Q_OBJECT
+public:
+ IrServer( QObject *parent = 0, const char *name = 0 );
+ ~IrServer();
+
+private:
+ QLibrary *lib;
+};
+
+#endif
diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp
new file mode 100644
index 0000000..66a2ce5
--- a/dev/null
+++ b/core/launcher/launcher.cpp
@@ -0,0 +1,804 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/resource.h>
+#include <qpe/applnk.h>
+#include <qpe/config.h>
+#include <qpe/global.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/mimetype.h>
+#include <qpe/storage.h>
+#include <qpe/palmtoprecord.h>
+
+#include <qdir.h>
+#include <qwindowsystem_qws.h>
+#include <qtimer.h>
+#include <qcombobox.h>
+#include <qvbox.h>
+#include <qlayout.h>
+#include <qstyle.h>
+#include <qpushbutton.h>
+#include <qtabbar.h>
+#include <qwidgetstack.h>
+#include <qlayout.h>
+#include <qregexp.h>
+#include <qmessagebox.h>
+#include <qframe.h>
+#include <qpainter.h>
+#include <qlabel.h>
+#include <qtextstream.h>
+
+#include "launcherview.h"
+#include "launcher.h"
+#include "syncdialog.h"
+#include "desktop.h"
+#include <qpe/lnkproperties.h>
+#include "mrulist.h"
+#include "qrsync.h"
+#include <stdlib.h>
+#include <unistd.h>
+
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+#include <stdio.h>
+#include <sys/vfs.h>
+#include <mntent.h>
+#endif
+
+//#define SHOW_ALL
+
+CategoryTabWidget::CategoryTabWidget( QWidget* parent ) :
+ QVBox( parent )
+{
+ categoryBar = 0;
+ stack = 0;
+}
+
+void CategoryTabWidget::prevTab()
+{
+ if ( categoryBar ) {
+ int n = categoryBar->count();
+ int tab = categoryBar->currentTab();
+ if ( tab >= 0 )
+ categoryBar->setCurrentTab( (tab - 1 + n)%n );
+ }
+}
+
+void CategoryTabWidget::nextTab()
+{
+ if ( categoryBar ) {
+ int n = categoryBar->count();
+ int tab = categoryBar->currentTab();
+ categoryBar->setCurrentTab( (tab + 1)%n );
+ }
+}
+
+void CategoryTabWidget::addItem( const QString& linkfile )
+{
+ int i=0;
+ AppLnk *app = new AppLnk(linkfile);
+ if ( !app->isValid() ) {
+ delete app;
+ return;
+ }
+ if ( !app->file().isEmpty() ) {
+ // A document
+ delete app;
+ app = new DocLnk(linkfile);
+ ((LauncherView*)(stack->widget(ids.count()-1)))->addItem(app);
+ return;
+ }
+ for ( QStringList::Iterator it=ids.begin(); it!=ids.end(); ++it) {
+ if ( !(*it).isEmpty() ) {
+ QRegExp tf(*it,FALSE,TRUE);
+ if ( tf.match(app->type()) >= 0 ) {
+ ((LauncherView*)stack->widget(i))->addItem(app);
+ return;
+ }
+ i++;
+ }
+ }
+}
+
+void CategoryTabWidget::initializeCategories(AppLnkSet* rootFolder,
+ AppLnkSet* docFolder, const QList<FileSystem> &fs)
+{
+ delete categoryBar;
+ categoryBar = new CategoryTabBar( this );
+ QPalette pal = categoryBar->palette();
+ pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) );
+ pal.setColor( QColorGroup::Background, pal.active().background().light(110) );
+ categoryBar->setPalette( pal );
+
+ delete stack;
+ stack = new QWidgetStack(this);
+ tabs=0;
+
+ ids.clear();
+
+ QStringList types = rootFolder->types();
+ for ( QStringList::Iterator it=types.begin(); it!=types.end(); ++it) {
+ if ( !(*it).isEmpty() ) {
+ newView(*it,rootFolder->typePixmap(*it),rootFolder->typeName(*it));
+ }
+ }
+ QListIterator<AppLnk> it( rootFolder->children() );
+ AppLnk* l;
+ while ( (l=it.current()) ) {
+ if ( l->type() == "Separator" ) {
+ rootFolder->remove(l);
+ delete l;
+ } else {
+ int i=0;
+ for ( QStringList::Iterator it=types.begin(); it!=types.end(); ++it) {
+ if ( *it == l->type() )
+ ((LauncherView*)stack->widget(i))->addItem(l,FALSE);
+ i++;
+ }
+ }
+ ++it;
+ }
+ rootFolder->detachChildren();
+ for (int i=0; i<tabs; i++)
+ ((LauncherView*)stack->widget(i))->sort();
+
+ // all documents
+ docview = newView( QString::null, Resource::loadPixmap("DocsIcon"), tr("Documents"));
+ docview->populate( docFolder, QString::null );
+ docFolder->detachChildren();
+ docview->setFileSystems(fs);
+ docview->setToolsEnabled(TRUE);
+
+ connect( categoryBar, SIGNAL(selected(int)), stack, SLOT(raiseWidget(int)) );
+
+ ((LauncherView*)stack->widget(0))->setFocus();
+
+ categoryBar->show();
+ stack->show();
+}
+
+void CategoryTabWidget::updateDocs(AppLnkSet* docFolder, const QList<FileSystem> &fs)
+{
+ docview->populate( docFolder, QString::null );
+ docFolder->detachChildren();
+ docview->setFileSystems(fs);
+ docview->updateTools();
+}
+
+LauncherView* CategoryTabWidget::newView( const QString& id, const QPixmap& pm, const QString& label )
+{
+ LauncherView* view = new LauncherView( stack );
+ connect( view, SIGNAL(clicked(const AppLnk*)),
+ this, SIGNAL(clicked(const AppLnk*)));
+ connect( view, SIGNAL(rightPressed(AppLnk*)),
+ this, SIGNAL(rightPressed(AppLnk*)));
+ ids.append(id);
+ categoryBar->addTab( new QTab( pm, label ) );
+ stack->addWidget( view, tabs++ );
+ return view;
+}
+
+void CategoryTabWidget::updateLink(const QString& linkfile)
+{
+ int i=0;
+ LauncherView* view;
+ while ((view = (LauncherView*)stack->widget(i++))) {
+ if ( view->removeLink(linkfile) )
+ break;
+ }
+ addItem(linkfile);
+ docview->updateTools();
+}
+
+void CategoryTabWidget::paletteChange( const QPalette &p )
+{
+ QVBox::paletteChange( p );
+ QPalette pal = palette();
+ pal.setColor( QColorGroup::Light, pal.color(QPalette::Active,QColorGroup::Shadow) );
+ pal.setColor( QColorGroup::Background, pal.active().background().light(110) );
+ categoryBar->setPalette( pal );
+ categoryBar->update();
+}
+
+void CategoryTabWidget::setBusy(bool on)
+{
+ if ( on )
+ ((LauncherView*)stack->visibleWidget())->setBusy(TRUE);
+ else
+ for (int i=0; i<tabs; i++)
+ ((LauncherView*)stack->widget(i))->setBusy(FALSE);
+}
+
+
+CategoryTabBar::CategoryTabBar( QWidget *parent, const char *name )
+ : QTabBar( parent, name )
+{
+ setFocusPolicy( NoFocus );
+ connect( this, SIGNAL( selected(int) ), this, SLOT( layoutTabs() ) );
+}
+
+CategoryTabBar::~CategoryTabBar()
+{
+}
+
+void CategoryTabBar::layoutTabs()
+{
+ if ( !count() )
+ return;
+
+// int percentFalloffTable[] = { 100, 70, 40, 12, 6, 3, 1, 0 };
+ int hiddenTabWidth = -12;
+ int middleTab = currentTab();
+ int hframe, vframe, overlap;
+ style().tabbarMetrics( this, hframe, vframe, overlap );
+ QFontMetrics fm = fontMetrics();
+ int x = 0;
+ QRect r;
+ QTab *t;
+ int available = width()-1;
+ int required = 0;
+ for ( int i = 0; i < count(); i++ ) {
+ t = tab(i);
+ // if (( i < (middleTab - 1) ) || ( i > (middleTab + 1) )) {
+ if ( i != middleTab ) {
+ // required += hiddenTabWidth + hframe - overlap;
+ available -= hiddenTabWidth + hframe - overlap;
+ if ( t->iconSet() != 0 )
+ available -= t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width();
+ } else {
+ required += fm.width( t->text() ) + hframe - overlap;
+ if ( t->iconSet() != 0 )
+ required += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width();
+ }
+ }
+ for ( int i = 0; i < count(); i++ ) {
+ t = tab(i);
+ // if (( i < (middleTab - 1) ) || ( i > (middleTab + 1) )) {
+ if ( i != middleTab ) {
+ int w = hiddenTabWidth;
+ int ih = 0;
+ if ( t->iconSet() != 0 ) {
+ w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width();
+ ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height();
+ }
+ int h = QMAX( fm.height(), ih );
+ h = QMAX( h, QApplication::globalStrut().height() );
+
+ h += vframe;
+ w += hframe;
+
+ t->setRect( QRect(x, 0, w, h) );
+ x += t->rect().width() - overlap;
+ r = r.unite( t->rect() );
+ } else {
+ int w = fm.width( t->text() );
+ int ih = 0;
+ if ( t->iconSet() != 0 ) {
+ w += t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width();
+ ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height();
+ }
+ int h = QMAX( fm.height(), ih );
+ h = QMAX( h, QApplication::globalStrut().height() );
+
+ h += vframe;
+ w += hframe;
+
+ // t->setRect( QRect(x, 0, w * available/required, h) );
+ t->setRect( QRect(x, 0, available, h) );
+ x += t->rect().width() - overlap;
+ r = r.unite( t->rect() );
+ }
+ }
+
+ QRect rr = tab(count()-1)->rect();
+ rr.setRight(width()-1);
+ tab(count()-1)->setRect( rr );
+
+ for ( t = tabList()->first(); t; t = tabList()->next() ) {
+ QRect tr = t->rect();
+ tr.setHeight( r.height() );
+ t->setRect( tr );
+ }
+
+ update();
+}
+
+
+void CategoryTabBar::paint( QPainter * p, QTab * t, bool selected ) const
+{
+#if QT_VERSION >= 300
+ QStyle::SFlags flags = QStyle::Style_Default;
+ if ( selected )
+ flags |= QStyle::Style_Selected;
+ style().drawControl( QStyle::CE_TabBarTab, p, this, t->rect(),
+ colorGroup(), flags, QStyleOption(t) );
+#else
+ style().drawTab( p, this, t, selected );
+#endif
+
+ QRect r( t->rect() );
+ QFont f( font() );
+ if ( selected )
+ f.setBold( TRUE );
+ p->setFont( f );
+
+ int iw = 0;
+ int ih = 0;
+ if ( t->iconSet() != 0 ) {
+ iw = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 2;
+ ih = t->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height();
+ }
+ int w = iw + p->fontMetrics().width( t->text() ) + 4;
+ int h = QMAX(p->fontMetrics().height() + 4, ih );
+ paintLabel( p, QRect( r.left() + (r.width()-w)/2 - 3,
+ r.top() + (r.height()-h)/2, w, h ), t,
+#if QT_VERSION >= 300
+ t->identifier() == keyboardFocusTab()
+#else
+ t->identitifer() == keyboardFocusTab()
+#endif
+ );
+}
+
+
+void CategoryTabBar::paintLabel( QPainter* p, const QRect&,
+ QTab* t, bool has_focus ) const
+{
+ QRect r = t->rect();
+ // if ( t->id != currentTab() )
+ //r.moveBy( 1, 1 );
+ //
+ if ( t->iconSet() ) {
+ // the tab has an iconset, draw it in the right mode
+ QIconSet::Mode mode = (t->isEnabled() && isEnabled()) ? QIconSet::Normal : QIconSet::Disabled;
+ if ( mode == QIconSet::Normal && has_focus )
+ mode = QIconSet::Active;
+ QPixmap pixmap = t->iconSet()->pixmap( QIconSet::Small, mode );
+ int pixw = pixmap.width();
+ int pixh = pixmap.height();
+ p->drawPixmap( r.left() + 6, r.center().y() - pixh / 2 + 1, pixmap );
+ r.setLeft( r.left() + pixw + 5 );
+ }
+
+ QRect tr = r;
+
+ if ( r.width() < 20 )
+ return;
+
+ if ( t->isEnabled() && isEnabled() ) {
+#if defined(_WS_WIN32_)
+ if ( colorGroup().brush( QColorGroup::Button ) == colorGroup().brush( QColorGroup::Background ) )
+ p->setPen( colorGroup().buttonText() );
+ else
+ p->setPen( colorGroup().foreground() );
+#else
+ p->setPen( colorGroup().foreground() );
+#endif
+ p->drawText( tr, AlignCenter | AlignVCenter | ShowPrefix, t->text() );
+ } else {
+ p->setPen( palette().disabled().foreground() );
+ p->drawText( tr, AlignCenter | AlignVCenter | ShowPrefix, t->text() );
+ }
+}
+
+//---------------------------------------------------------------------------
+
+Launcher::Launcher( QWidget* parent, const char* name, WFlags fl )
+ : QMainWindow( parent, name, fl )
+{
+ setCaption( tr("Launcher") );
+
+ syncDialog = 0;
+
+ // we have a pretty good idea how big we'll be
+ setGeometry( 0, 0, qApp->desktop()->width(), qApp->desktop()->height() );
+
+ tabs = 0;
+ rootFolder = 0;
+ docsFolder = 0;
+
+ tabs = new CategoryTabWidget( this );
+ tabs->setMaximumWidth( qApp->desktop()->width() );
+ setCentralWidget( tabs );
+
+ connect( tabs, SIGNAL(selected(const QString&)),
+ this, SLOT(viewSelected(const QString&)) );
+ connect( tabs, SIGNAL(clicked(const AppLnk*)),
+ this, SLOT(select(const AppLnk*)));
+ connect( tabs, SIGNAL(rightPressed(AppLnk*)),
+ this, SLOT(properties(AppLnk*)));
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopChannel* sysChannel = new QCopChannel( "QPE/System", this );
+ connect( sysChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(systemMessage( const QCString &, const QByteArray &)) );
+#endif
+
+ storage = new StorageInfo( this );
+ connect( storage, SIGNAL( disksChanged() ), SLOT( storageChanged() ) );
+
+ updateTabs();
+
+ preloadApps();
+
+ in_lnk_props = FALSE;
+ got_lnk_change = FALSE;
+}
+
+Launcher::~Launcher()
+{
+}
+
+static bool isVisibleWindow(int wid)
+{
+ const QList<QWSWindow> &list = qwsServer->clientWindows();
+ QWSWindow* w;
+ for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
+ if ( w->winId() == wid )
+ return !w->isFullyObscured();
+ }
+ return FALSE;
+}
+
+void Launcher::showMaximized()
+{
+ if ( isVisibleWindow( winId() ) )
+ doMaximize();
+ else
+ QTimer::singleShot( 20, this, SLOT(doMaximize()) );
+}
+
+void Launcher::doMaximize()
+{
+ QMainWindow::showMaximized();
+}
+
+void Launcher::updateMimeTypes()
+{
+ MimeType::clear();
+ updateMimeTypes(rootFolder);
+}
+
+void Launcher::updateMimeTypes(AppLnkSet* folder)
+{
+ for ( QListIterator<AppLnk> it( folder->children() ); it.current(); ++it ) {
+ AppLnk *app = it.current();
+ if ( app->type() == "Folder" )
+ updateMimeTypes((AppLnkSet *)app);
+ else {
+ MimeType::registerApp(*app);
+ }
+ }
+}
+
+void Launcher::loadDocs()
+{
+ delete docsFolder;
+ docsFolder = new DocLnkSet;
+ Global::findDocuments(docsFolder);
+}
+
+void Launcher::updateTabs()
+{
+ MimeType::updateApplications(); // ### reads all applnks twice
+
+ delete rootFolder;
+ rootFolder = new AppLnkSet( MimeType::appsFolderName() );
+
+ loadDocs();
+
+ tabs->initializeCategories(rootFolder, docsFolder, storage->fileSystems());
+}
+
+void Launcher::updateDocs()
+{
+ loadDocs();
+ tabs->updateDocs(docsFolder,storage->fileSystems());
+}
+
+void Launcher::viewSelected(const QString& s)
+{
+ setCaption( s + tr(" - Launcher") );
+}
+
+void Launcher::nextView()
+{
+ tabs->nextTab();
+}
+
+
+void Launcher::select( const AppLnk *appLnk )
+{
+ if ( appLnk->type() == "Folder" ) {
+ // Not supported: flat is simpler for the user
+ } else {
+ if ( appLnk->exec().isNull() ) {
+ QMessageBox::information(this,tr("No application"),
+ tr("<p>No application is defined for this document."
+ "<p>Type is %1.").arg(appLnk->type()));
+ return;
+ }
+ tabs->setBusy(TRUE);
+ emit executing( appLnk );
+ appLnk->execute();
+ }
+}
+
+void Launcher::externalSelected(const AppLnk *appLnk)
+{
+ tabs->setBusy(TRUE);
+ emit executing( appLnk );
+}
+
+void Launcher::properties( AppLnk *appLnk )
+{
+ if ( appLnk->type() == "Folder" ) {
+ // Not supported: flat is simpler for the user
+ } else {
+ in_lnk_props = TRUE;
+ got_lnk_change = FALSE;
+ LnkProperties prop(appLnk);
+ connect(&prop, SIGNAL(select(const AppLnk *)), this, SLOT(externalSelected(const AppLnk *)));
+ prop.showMaximized();
+ prop.exec();
+ in_lnk_props = FALSE;
+ if ( got_lnk_change ) {
+ updateLink(lnk_change);
+ }
+ }
+}
+
+void Launcher::updateLink(const QString& link)
+{
+ if (link.isNull())
+ updateTabs();
+ else if (link.isEmpty())
+ updateDocs();
+ else
+ tabs->updateLink(link);
+}
+
+void Launcher::systemMessage( const QCString &msg, const QByteArray &data)
+{
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "linkChanged(QString)" ) {
+ QString link;
+ stream >> link;
+ if ( in_lnk_props ) {
+ got_lnk_change = TRUE;
+ lnk_change = link;
+ } else {
+ updateLink(link);
+ }
+ } else if ( msg == "busy()" ) {
+ emit busy();
+ } else if ( msg == "notBusy(QString)" ) {
+ QString app;
+ stream >> app;
+ tabs->setBusy(FALSE);
+ emit notBusy(app);
+ } else if ( msg == "mkdir(QString)" ) {
+ QString dir;
+ stream >> dir;
+ if ( !dir.isEmpty() )
+ mkdir( dir );
+ } else if ( msg == "rdiffGenSig(QString,QString)" ) {
+ QString baseFile, sigFile;
+ stream >> baseFile >> sigFile;
+ QRsync::generateSignature( baseFile, sigFile );
+ } else if ( msg == "rdiffGenDiff(QString,QString,QString)" ) {
+ QString baseFile, sigFile, deltaFile;
+ stream >> baseFile >> sigFile >> deltaFile;
+ QRsync::generateDiff( baseFile, sigFile, deltaFile );
+ } else if ( msg == "rdiffApplyPatch(QString,QString)" ) {
+ QString baseFile, deltaFile;
+ stream >> baseFile >> deltaFile;
+ if ( !QFile::exists( baseFile ) ) {
+ QFile f( baseFile );
+ f.open( IO_WriteOnly );
+ f.close();
+ }
+ QRsync::applyDiff( baseFile, deltaFile );
+ QCopEnvelope e( "QPE/Desktop", "patchApplied(QString)" );
+ e << baseFile;
+ } else if ( msg == "rdiffCleanup()" ) {
+ mkdir( "/tmp/rdiff" );
+ QDir dir;
+ dir.setPath( "/tmp/rdiff" );
+ QStringList entries = dir.entryList();
+ for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it )
+ dir.remove( *it );
+ } else if ( msg == "sendHandshakeInfo()" ) {
+ QString home = getenv( "HOME" );
+ QCopEnvelope e( "QPE/Desktop", "handshakeInfo(QString,bool)" );
+ e << home;
+ int locked = (int) Desktop::screenLocked();
+ e << locked;
+ } else if ( msg == "sendCardInfo()" ) {
+ QCopEnvelope e( "QPE/Desktop", "cardInfo(QString)" );
+ const QList<FileSystem> &fs = storage->fileSystems();
+ QListIterator<FileSystem> it ( fs );
+ QString s;
+ QString homeDir = getenv("HOME");
+ QString hardDiskHome;
+ for ( ; it.current(); ++it ) {
+ if ( (*it)->isRemovable() )
+ s += (*it)->name() + "=" + (*it)->path() + "/Documents "
+ + QString::number( (*it)->availBlocks() * (*it)->blockSize() )
+ + " " + (*it)->options() + ";";
+ else if ( (*it)->disk() == "/dev/mtdblock1" ||
+ (*it)->disk() == "/dev/mtdblock/1" )
+ s += (*it)->name() + "=" + homeDir + "/Documents "
+ + QString::number( (*it)->availBlocks() * (*it)->blockSize() )
+ + " " + (*it)->options() + ";";
+ else if ( (*it)->name().contains( "Hard Disk") &&
+ homeDir.contains( (*it)->path() ) &&
+ (*it)->path().length() > hardDiskHome.length() )
+ hardDiskHome =
+ (*it)->name() + "=" + homeDir + "/Documents "
+ + QString::number( (*it)->availBlocks() * (*it)->blockSize() )
+ + " " + (*it)->options() + ";";
+ }
+ if ( !hardDiskHome.isEmpty() )
+ s += hardDiskHome;
+
+ e << s;
+ } else if ( msg == "sendSyncDate(QString)" ) {
+ QString app;
+ stream >> app;
+ Config cfg( "qpe" );
+ cfg.setGroup("SyncDate");
+ QCopEnvelope e( "QPE/Desktop", "syncDate(QString,QString)" );
+ e << app << cfg.readEntry( app );
+ //qDebug("QPE/System sendSyncDate for %s: response %s", app.latin1(),
+ //cfg.readEntry( app ).latin1() );
+ } else if ( msg == "setSyncDate(QString,QString)" ) {
+ QString app, date;
+ stream >> app >> date;
+ Config cfg( "qpe" );
+ cfg.setGroup("SyncDate");
+ cfg.writeEntry( app, date );
+ //qDebug("setSyncDate(QString,QString) %s %s", app.latin1(), date.latin1());
+ } else if ( msg == "startSync(QString)" ) {
+ QString what;
+ stream >> what;
+ delete syncDialog; syncDialog = 0;
+ syncDialog = new SyncDialog( this, "syncProgress", FALSE,
+ WStyle_Tool | WStyle_Customize |
+ Qt::WStyle_StaysOnTop );
+ syncDialog->showMaximized();
+ syncDialog->whatLabel->setText( "<b>" + what + "</b>" );
+ connect( syncDialog->buttonCancel, SIGNAL( clicked() ),
+ SLOT( cancelSync() ) );
+ }
+ else if ( msg == "stopSync()") {
+ delete syncDialog; syncDialog = 0;
+ } else if ( msg == "getAllDocLinks()" ) {
+ loadDocs();
+
+ QString contents;
+
+ for ( QListIterator<DocLnk> it( docsFolder->children() ); it.current(); ++it ) {
+ DocLnk *doc = it.current();
+ QString lfn = doc->linkFile();
+ QFileInfo fi( doc->file() );
+ if ( !fi.exists() )
+ continue;
+
+
+
+ QFile f( lfn );
+ if ( f.open( IO_ReadOnly ) ) {
+ QTextStream ts( &f );
+ ts.setEncoding( QTextStream::UnicodeUTF8 );
+ contents += ts.read();
+ f.close();
+ } else {
+ contents += "[Desktop Entry]\n";
+ contents += "Categories = " + Qtopia::Record::idsToString( doc->categories() ) + "\n";
+ contents += "File = "+doc->file()+"\n";
+ contents += "Name = "+doc->name()+"\n";
+ contents += "Type = "+doc->type()+"\n";
+ }
+ contents += QString("Size = %1\n").arg( fi.size() );
+ }
+
+ //qDebug( "sending length %d", contents.length() );
+ QCopEnvelope e( "QPE/Desktop", "docLinks(QString)" );
+ e << contents;
+
+ //qDebug( "================ \n\n%s\n\n===============",
+ //contents.latin1() );
+
+ delete docsFolder;
+ docsFolder = 0;
+ }
+}
+
+void Launcher::cancelSync()
+{
+ QCopEnvelope e( "QPE/Desktop", "cancelSync()" );
+}
+
+void Launcher::storageChanged()
+{
+ if ( in_lnk_props ) {
+ got_lnk_change = TRUE;
+ lnk_change = "";
+ } else {
+ updateDocs();
+ }
+}
+
+
+bool Launcher::mkdir(const QString &localPath)
+{
+ QDir fullDir(localPath);
+ if (fullDir.exists())
+ return true;
+
+ // at this point the directory doesn't exist
+ // go through the directory tree and start creating the direcotories
+ // that don't exist; if we can't create the directories, return false
+
+ QString dirSeps = "/";
+ int dirIndex = localPath.find(dirSeps);
+ QString checkedPath;
+
+ // didn't find any seps; weird, use the cur dir instead
+ if (dirIndex == -1) {
+ //qDebug("No seperators found in path %s", localPath.latin1());
+ checkedPath = QDir::currentDirPath();
+ }
+
+ while (checkedPath != localPath) {
+ // no more seperators found, use the local path
+ if (dirIndex == -1)
+ checkedPath = localPath;
+ else {
+ // the next directory to check
+ checkedPath = localPath.left(dirIndex) + "/";
+ // advance the iterator; the next dir seperator
+ dirIndex = localPath.find(dirSeps, dirIndex+1);
+ }
+
+ QDir checkDir(checkedPath);
+ if (!checkDir.exists()) {
+ //qDebug("mkdir making dir %s", checkedPath.latin1());
+
+ if (!checkDir.mkdir(checkedPath)) {
+ qDebug("Unable to make directory %s", checkedPath.latin1());
+ return FALSE;
+ }
+ }
+
+ }
+ return TRUE;
+}
+
+void Launcher::preloadApps()
+{
+ Config cfg("Launcher");
+ cfg.setGroup("Preload");
+ QStringList apps = cfg.readListEntry("Apps",',');
+ for (QStringList::ConstIterator it=apps.begin(); it!=apps.end(); ++it) {
+ QCopEnvelope e("QPE/Application/"+(*it).local8Bit(), "enablePreload()");
+ }
+}
diff --git a/core/launcher/launcher.h b/core/launcher/launcher.h
new file mode 100644
index 0000000..00ae980
--- a/dev/null
+++ b/core/launcher/launcher.h
@@ -0,0 +1,136 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LAUNCHER_H
+#define LAUNCHER_H
+
+#include <qmainwindow.h>
+#include <qtabbar.h>
+#include <qstringlist.h>
+#include <qvbox.h>
+#include <qlist.h>
+#include "launcherview.h"
+
+class AppLnk;
+class AppLnkSet;
+class DocLnkSet;
+class QWidgetStack;
+class StorageInfo;
+class SyncDialog;
+
+class CategoryTabBar : public QTabBar
+{
+ Q_OBJECT
+public:
+ CategoryTabBar( QWidget *parent=0, const char *name=0 );
+ ~CategoryTabBar();
+
+protected slots:
+ virtual void layoutTabs();
+
+protected:
+ void paint ( QPainter *p, QTab *t, bool f ) const;
+ void paintLabel( QPainter* p, const QRect& br, QTab* t, bool has_focus ) const;
+};
+
+class CategoryTabWidget : public QVBox {
+ // can't use a QTabWidget, since it won't let us set the frame style.
+ Q_OBJECT
+public:
+ CategoryTabWidget( QWidget* parent );
+ void initializeCategories(AppLnkSet* rootFolder, AppLnkSet* docFolder,
+ const QList<FileSystem> &);
+ void updateDocs(AppLnkSet* docFolder, const QList<FileSystem> &fs);
+ void updateLink(const QString& linkfile);
+ void setBusy(bool on);
+
+signals:
+ void selected(const QString&);
+ void clicked(const AppLnk*);
+ void rightPressed(AppLnk*);
+
+public slots:
+ void nextTab();
+ void prevTab();
+
+protected:
+ void paletteChange( const QPalette &p );
+
+private:
+ CategoryTabBar* categoryBar;
+ QWidgetStack* stack;
+ LauncherView* docview;
+ QStringList ids;
+ int tabs;
+ LauncherView* newView( const QString&, const QPixmap& pm, const QString& label );
+ void addItem( const QString& );
+};
+
+class Launcher : public QMainWindow
+{
+ Q_OBJECT
+ friend class LauncherPrivate;
+public:
+ Launcher( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~Launcher();
+
+ static QString appsFolderName();
+
+ virtual void showMaximized();
+ static bool mkdir(const QString &path);
+
+public slots:
+ void viewSelected(const QString&);
+ void select( const AppLnk * );
+ void externalSelected( const AppLnk *);
+ void properties( AppLnk * );
+ void nextView();
+
+signals:
+ void executing( const AppLnk * );
+ void busy();
+ void notBusy(const QString&);
+
+private slots:
+ void doMaximize();
+ void systemMessage( const QCString &, const QByteArray &);
+ void storageChanged();
+ void cancelSync();
+
+private:
+ void updateApps();
+ void loadDocs();
+ void updateDocs();
+ void updateTabs();
+ void updateMimeTypes();
+ void updateMimeTypes(AppLnkSet*);
+ void preloadApps();
+ AppLnkSet *rootFolder;
+ DocLnkSet *docsFolder;
+ CategoryTabWidget *tabs;
+ StorageInfo *storage;
+ SyncDialog *syncDialog;
+
+ void updateLink(const QString& link);
+ bool in_lnk_props;
+ bool got_lnk_change;
+ QString lnk_change;
+};
+
+#endif // LAUNCHERVIEW_H
diff --git a/core/launcher/launcher.pro b/core/launcher/launcher.pro
new file mode 100644
index 0000000..7d7c9ac
--- a/dev/null
+++ b/core/launcher/launcher.pro
@@ -0,0 +1,110 @@
+TEMPLATE = app
+
+CONFIG = qt warn_on release
+
+DESTDIR = $(QPEDIR)/bin
+
+HEADERS = background.h \
+ desktop.h \
+ info.h \
+ appicons.h \
+ taskbar.h \
+ sidething.h \
+ mrulist.h \
+ stabmon.h \
+ inputmethods.h \
+ systray.h \
+ wait.h \
+ shutdownimpl.h \
+ launcher.h \
+ launcherview.h \
+ ../calibrate/calibrate.h \
+ startmenu.h \
+ transferserver.h \
+ qcopbridge.h \
+ packageslave.h \
+ irserver.h \
+ $(QPEDIR)/rsync/buf.h \
+ $(QPEDIR)/rsync/checksum.h \
+ $(QPEDIR)/rsync/command.h \
+ $(QPEDIR)/rsync/emit.h \
+ $(QPEDIR)/rsync/job.h \
+ $(QPEDIR)/rsync/netint.h \
+ $(QPEDIR)/rsync/protocol.h \
+ $(QPEDIR)/rsync/prototab.h \
+ $(QPEDIR)/rsync/rsync.h \
+ $(QPEDIR)/rsync/search.h \
+ $(QPEDIR)/rsync/stream.h \
+ $(QPEDIR)/rsync/sumset.h \
+ $(QPEDIR)/rsync/trace.h \
+ $(QPEDIR)/rsync/types.h \
+ $(QPEDIR)/rsync/util.h \
+ $(QPEDIR)/rsync/whole.h \
+ $(QPEDIR)/rsync/config_rsync.h \
+ $(QPEDIR)/rsync/qrsync.h
+# quicklauncher.h \
+
+SOURCES = background.cpp \
+ desktop.cpp \
+ info.cpp \
+ appicons.cpp \
+ taskbar.cpp \
+ sidething.cpp \
+ mrulist.cpp \
+ stabmon.cpp \
+ inputmethods.cpp \
+ systray.cpp \
+ wait.cpp \
+ shutdownimpl.cpp \
+ launcher.cpp \
+ launcherview.cpp \
+ $(QPEDIR)/calibrate/calibrate.cpp \
+ transferserver.cpp \
+ packageslave.cpp \
+ irserver.cpp \
+ qcopbridge.cpp \
+ startmenu.cpp \
+ main.cpp \
+ $(QPEDIR)/rsync/base64.c \
+ $(QPEDIR)/rsync/buf.c \
+ $(QPEDIR)/rsync/checksum.c \
+ $(QPEDIR)/rsync/command.c \
+ $(QPEDIR)/rsync/delta.c \
+ $(QPEDIR)/rsync/emit.c \
+ $(QPEDIR)/rsync/hex.c \
+ $(QPEDIR)/rsync/job.c \
+ $(QPEDIR)/rsync/mdfour.c \
+ $(QPEDIR)/rsync/mksum.c \
+ $(QPEDIR)/rsync/msg.c \
+ $(QPEDIR)/rsync/netint.c \
+ $(QPEDIR)/rsync/patch.c \
+ $(QPEDIR)/rsync/prototab.c \
+ $(QPEDIR)/rsync/readsums.c \
+ $(QPEDIR)/rsync/scoop.c \
+ $(QPEDIR)/rsync/search.c \
+ $(QPEDIR)/rsync/stats.c \
+ $(QPEDIR)/rsync/stream.c \
+ $(QPEDIR)/rsync/sumset.c \
+ $(QPEDIR)/rsync/trace.c \
+ $(QPEDIR)/rsync/tube.c \
+ $(QPEDIR)/rsync/util.c \
+ $(QPEDIR)/rsync/version.c \
+ $(QPEDIR)/rsync/whole.c \
+ $(QPEDIR)/rsync/qrsync.cpp
+
+INTERFACES = shutdown.ui syncdialog.ui
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include .
+
+INCLUDEPATH += $(QPEDIR)/calibrate
+DEPENDPATH += $(QPEDIR)/calibrate
+
+INCLUDEPATH += $(QPEDIR)/rsync
+DEPENDPATH += $(QPEDIR)/rsync
+
+TARGET = qpe
+
+LIBS += -lqpe -lcrypt
+
+TRANSLATIONS = ../i18n/de/qpe.ts
diff --git a/core/launcher/launcherview.cpp b/core/launcher/launcherview.cpp
new file mode 100644
index 0000000..68e3245
--- a/dev/null
+++ b/core/launcher/launcherview.cpp
@@ -0,0 +1,596 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "launcherview.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/applnk.h>
+#include <qpe/qpedebug.h>
+#include <qpe/categories.h>
+#include <qpe/categoryselect.h>
+#include <qpe/menubutton.h>
+#include <qpe/resource.h>
+#include <qpe/qpetoolbar.h>
+
+#include <qtimer.h>
+#include <qdict.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qhbox.h>
+#include <qiconview.h>
+#include <qpainter.h>
+#include <qregexp.h>
+#include <qtoolbutton.h>
+
+class LauncherIconView : public QIconView {
+public:
+ LauncherIconView( QWidget* parent, const char* name=0 ) :
+ QIconView(parent,name),
+ tf(""),
+ cf(0),
+ bsy(0)
+ {
+ sortmeth = Name;
+ hidden.setAutoDelete(TRUE);
+ ike = FALSE;
+ }
+
+ ~LauncherIconView()
+ {
+#if 0 // debuggery
+ QListIterator<AppLnk> it(hidden);
+ AppLnk* l;
+ while ((l=it.current())) {
+ ++it;
+ //qDebug("%p: hidden (should remove)",l);
+ }
+#endif
+ }
+
+ QIconViewItem* busyItem() const { return bsy; }
+
+ void updateCategoriesAndMimeTypes();
+
+ void doAutoScroll()
+ {
+ // We don't want rubberbanding (yet)
+ }
+
+ void setBusy(bool on)
+ {
+ QIconViewItem *c = on ? currentItem() : 0;
+ if ( bsy != c ) {
+ QIconViewItem* o = bsy;
+ bsy = c;
+ if ( o ) o->repaint();
+ if ( c ) c->repaint();
+ }
+ }
+
+ bool inKeyEvent() const { return ike; }
+ void keyPressEvent(QKeyEvent* e)
+ {
+ ike = TRUE;
+ if ( e->key() == Key_F33 ) {
+ // "OK" button
+ returnPressed(currentItem());
+ }
+ QIconView::keyPressEvent(e);
+ ike = FALSE;
+ }
+
+ void addItem(AppLnk* app, bool resort=TRUE);
+ bool removeLink(const QString& linkfile);
+
+ QStringList mimeTypes() const;
+ QStringList categories() const;
+
+ void clear()
+ {
+ mimes.clear();
+ cats.clear();
+ QIconView::clear();
+ hidden.clear();
+ }
+
+ void addCatsAndMimes(AppLnk* app)
+ {
+ // QStringList c = app->categories();
+ // for (QStringList::ConstIterator cit=c.begin(); cit!=c.end(); ++cit) {
+ // cats.replace(*cit,(void*)1);
+ // }
+ QString maj=app->type();
+ int sl=maj.find('/');
+ if (sl>=0) {
+ QString k = maj.left(sl);
+ mimes.replace(k,(void*)1);
+ }
+ }
+
+ void drawBackground( QPainter *p, const QRect &r )
+ {
+ // int backgroundMode = QPixmap::defaultDepth() >= 12 ? 1 : 0;
+ int backgroundMode = 2;
+
+ if ( backgroundMode == 1 ) {
+
+ // Double buffer the background
+ static QPixmap *bg = NULL;
+ static QColor bgColor;
+
+ if ( (bg == NULL) || (bgColor != colorGroup().button()) ) {
+ // Create a new background double buffer
+ if (bg == NULL)
+ bg = new QPixmap( width(), height() );
+ bgColor = colorGroup().button();
+ QPainter painter( bg );
+
+ painter.fillRect( QRect( 0, 0, width(), height() ), QBrush( white ) );
+
+ // Overlay the Qtopia logo in the center
+ QImage logo = Resource::loadImage( "qpe-logo" );
+ if ( !logo.isNull() )
+ painter.drawImage( (width() - logo.width()) / 2,
+ (height() - logo.height()) / 2, logo );
+ }
+
+ // Draw the double buffer to the widget (it is tiled for when the icon view is large)
+ p->drawTiledPixmap( r, *bg, QPoint( (r.x() + contentsX()) % bg->width(),
+ (r.y() + contentsY()) % bg->height() ) );
+ } else if ( backgroundMode == 2 ) {
+ static QPixmap *bg = 0;
+ static QColor bgColor;
+ if ( !bg || (bgColor != colorGroup().background()) ) {
+ bgColor = colorGroup().background();
+ bg = new QPixmap( width(), 9 );
+ QPainter painter( bg );
+ for ( int i = 0; i < 3; i++ ) {
+ painter.setPen( white );
+ painter.drawLine( 0, i*3, width()-1, i*3 );
+ painter.drawLine( 0, i*3+1, width()-1, i*3+1 );
+ painter.setPen( colorGroup().background().light(105) );
+ painter.drawLine( 0, i*3+2, width()-1, i*3+2 );
+ }
+ }
+ p->drawTiledPixmap( r, *bg, QPoint( (r.x() + contentsX()) % bg->width(),
+ (r.y() + contentsY()) % bg->height() ) );
+ } else {
+ p->fillRect( r, QBrush( white ) );
+ }
+ }
+
+ void hideOrShowItems(bool resort);
+
+ void setTypeFilter(const QString& typefilter, bool resort)
+ {
+ tf = QRegExp(typefilter,FALSE,TRUE);
+ hideOrShowItems(resort);
+ }
+
+ void setCategoryFilter( int catfilter, bool resort )
+ {
+ Categories cat;
+ cat.load( categoryFileName() );
+ QString str;
+ if ( catfilter == -2 )
+ cf = 0;
+ else
+ cf = catfilter;
+ hideOrShowItems(resort);
+ }
+
+ enum SortMethod { Name, Date, Type };
+
+ void setSortMethod( SortMethod m )
+ {
+ if ( sortmeth != m ) {
+ sortmeth = m;
+ sort();
+ }
+ }
+
+ int compare(const AppLnk* a, const AppLnk* b)
+ {
+ switch (sortmeth) {
+ case Name:
+ return a->name().compare(b->name());
+ case Date: {
+ QFileInfo fa(a->linkFile());
+ if ( !fa.exists() ) fa.setFile(a->file());
+ QFileInfo fb(b->linkFile());
+ if ( !fb.exists() ) fb.setFile(b->file());
+ return fa.lastModified().secsTo(fb.lastModified());
+ }
+ case Type:
+ return a->type().compare(b->type());
+ }
+ return 0;
+ }
+
+protected:
+
+ void styleChange( QStyle &old )
+ {
+ QIconView::styleChange( old );
+ //### duplicated code from LauncherView constructor
+ int dw = QApplication::desktop()->width();
+ setGridX( (dw-13-style().scrollBarExtent().width())/3 ); // tweaked for 8pt+dw=176 and 10pt+dw=240
+ }
+
+private:
+ QList<AppLnk> hidden;
+ QDict<void> mimes;
+ QDict<void> cats;
+ SortMethod sortmeth;
+ QRegExp tf;
+ int cf;
+ QIconViewItem* bsy;
+ bool ike;
+
+};
+
+
+bool LauncherView::bsy=FALSE;
+
+void LauncherView::setBusy(bool on)
+{
+ icons->setBusy(on);
+}
+
+class LauncherItem : public QIconViewItem
+{
+public:
+ LauncherItem( QIconView *parent, AppLnk* applnk );
+ ~LauncherItem()
+ {
+ LauncherIconView* liv = (LauncherIconView*)iconView();
+ if ( liv->busyItem() == this )
+ liv->setBusy(FALSE);
+ delete app;
+ }
+
+ AppLnk* appLnk() const { return app; }
+ AppLnk* takeAppLnk() { AppLnk* r=app; app=0; return r; }
+
+ virtual int compare ( QIconViewItem * i ) const;
+
+ void paintItem( QPainter *p, const QColorGroup &cg )
+ {
+ LauncherIconView* liv = (LauncherIconView*)iconView();
+ QBrush oldBrush( liv->itemTextBackground() );
+ QColorGroup mycg( cg );
+ if ( liv->currentItem() == this ) {
+ liv->setItemTextBackground( cg.brush( QColorGroup::Highlight ) );
+ mycg.setColor( QColorGroup::Text, cg.color( QColorGroup::HighlightedText ) );
+ }
+ QIconViewItem::paintItem(p,mycg);
+ if ( liv->currentItem() == this )
+ liv->setItemTextBackground( oldBrush );
+ if ( liv->busyItem() == this ) {
+ static QPixmap* busypm=0;
+ if ( !busypm )
+ busypm = new QPixmap(Resource::loadPixmap("launching"));
+ p->drawPixmap(x()+(width()-busypm->width())/2, y(),*busypm);
+ }
+ }
+
+protected:
+ AppLnk* app;
+};
+
+
+LauncherItem::LauncherItem( QIconView *parent, AppLnk *applnk )
+ : QIconViewItem( parent, applnk->name(), applnk->bigPixmap() ),
+ app(applnk) // Takes ownership
+{
+}
+
+int LauncherItem::compare ( QIconViewItem * i ) const
+{
+ LauncherIconView* view = (LauncherIconView*)iconView();
+ return view->compare(app,((LauncherItem *)i)->appLnk());
+}
+
+QStringList LauncherIconView::mimeTypes() const
+{
+ QStringList r;
+ QDictIterator<void> it(mimes);
+ while (it.current()) {
+ r.append(it.currentKey());
+ ++it;
+ }
+ r.sort();
+ return r;
+}
+
+void LauncherIconView::addItem(AppLnk* app, bool resort)
+{
+ addCatsAndMimes(app);
+
+ if ( (tf.isEmpty() || tf.match(app->type()) >= 0)
+ && (cf == 0 || app->categories().contains(cf)
+ || cf == -1 && app->categories().count() == 0 ) )
+ (void) new LauncherItem( this, app );
+ else
+ hidden.append(app);
+ if ( resort )
+ sort();
+}
+
+void LauncherIconView::updateCategoriesAndMimeTypes()
+{
+ mimes.clear();
+ cats.clear();
+ LauncherItem* item = (LauncherItem*)firstItem();
+ while (item) {
+ addCatsAndMimes(item->appLnk());
+ item = (LauncherItem*)item->nextItem();
+ }
+ QListIterator<AppLnk> it(hidden);
+ AppLnk* l;
+ while ((l=it.current())) {
+ addCatsAndMimes(l);
+ ++it;
+ }
+}
+
+void LauncherIconView::hideOrShowItems(bool resort)
+{
+ hidden.setAutoDelete(FALSE);
+ QList<AppLnk> links=hidden;
+ hidden.clear();
+ hidden.setAutoDelete(TRUE);
+ LauncherItem* item = (LauncherItem*)firstItem();
+ while (item) {
+ links.append(item->takeAppLnk());
+ item = (LauncherItem*)item->nextItem();
+ }
+ clear();
+ QListIterator<AppLnk> it(links);
+ AppLnk* l;
+ while ((l=it.current())) {
+ addItem(l,FALSE);
+ ++it;
+ }
+ if ( resort )
+ sort();
+}
+
+bool LauncherIconView::removeLink(const QString& linkfile)
+{
+ LauncherItem* item = (LauncherItem*)firstItem();
+ while (item) {
+ if ( item->appLnk()->linkFile() == linkfile ) {
+ delete item;
+ return TRUE;
+ }
+ item = (LauncherItem*)item->nextItem();
+ }
+ QListIterator<AppLnk> it(hidden);
+ AppLnk* l;
+ while ((l=it.current())) {
+ ++it;
+ if ( l->linkFile() == linkfile ) {
+ hidden.removeRef(l);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+LauncherView::LauncherView( QWidget* parent, const char* name, WFlags fl )
+ : QVBox( parent, name, fl )
+{
+ icons = new LauncherIconView( this );
+ setFocusProxy(icons);
+ QPEApplication::setStylusOperation( icons->viewport(), QPEApplication::RightOnHold );
+
+ int dw = QApplication::desktop()->width();
+ icons->setItemsMovable( FALSE );
+ icons->setAutoArrange( TRUE );
+ icons->setSorting( TRUE );
+ icons->setGridX( (dw-13-style().scrollBarExtent().width())/3 ); // tweaked for 8pt+dw=176 and 10pt+dw=240
+ icons->setGridY( fontMetrics().height()*2+24 );
+ icons->setFrameStyle( QFrame::NoFrame );
+ icons->setSpacing( 4 );
+ icons->setMargin( 0 );
+ icons->setSelectionMode( QIconView::Multi );
+ icons->setBackgroundMode( PaletteBase );
+
+ connect( icons, SIGNAL(mouseButtonClicked(int, QIconViewItem *, const QPoint&)),
+ SLOT(itemClicked(int, QIconViewItem *)) );
+ connect( icons, SIGNAL(selectionChanged()),
+ SLOT(selectionChanged()) );
+ connect( icons, SIGNAL(returnPressed(QIconViewItem *)),
+ SLOT(returnPressed(QIconViewItem *)) );
+ connect( icons, SIGNAL(mouseButtonPressed(int, QIconViewItem *, const QPoint&)),
+ SLOT(itemPressed(int, QIconViewItem *)) );
+
+ tools = 0;
+}
+
+LauncherView::~LauncherView()
+{
+}
+
+void LauncherView::setToolsEnabled(bool y)
+{
+ if ( !y != !tools ) {
+ if ( y ) {
+ tools = new QHBox(this);
+
+ // Type filter
+ typemb = new MenuButton(tools);
+ typemb->setLabel(tr("Type: %1"));
+
+ // Category filter
+ catmb = new CategorySelect(tools);
+
+ updateTools();
+ tools->show();
+ } else {
+ delete tools;
+ tools = 0;
+ }
+ }
+}
+
+void LauncherView::updateTools()
+{
+ disconnect( typemb, SIGNAL(selected(const QString&)),
+ this, SLOT(showType(const QString&)) );
+ disconnect( catmb, SIGNAL(signalSelected(int)),
+ this, SLOT(showCategory(int)) );
+
+ icons->updateCategoriesAndMimeTypes();
+
+ QString prev;
+
+ // Type filter
+ QStringList types;
+ types << tr("All");
+ types << "--";
+ types += icons->mimeTypes();
+ prev = typemb->currentText();
+ typemb->clear();
+ typemb->insertItems(types);
+ typemb->select(prev);
+
+ Categories cats( 0 );
+ cats.load( categoryFileName() );
+ QArray<int> vl( 0 );
+ catmb->setCategories( vl, "Document View", tr("Document View") );
+ catmb->setRemoveCategoryEdit( TRUE );
+ catmb->setAllCategories( TRUE );
+
+ connect(typemb, SIGNAL(selected(const QString&)), this, SLOT(showType(const QString&)));
+ connect(catmb, SIGNAL(signalSelected(int)), this, SLOT(showCategory(int)));
+}
+
+void LauncherView::sortBy(int s)
+{
+ icons->setSortMethod((LauncherIconView::SortMethod)s);
+}
+
+void LauncherView::showType(const QString& t)
+{
+ if ( t == tr("All") ) {
+ icons->setTypeFilter("",TRUE);
+ } else {
+ icons->setTypeFilter(t+"/*",TRUE);
+ }
+}
+
+void LauncherView::showCategory( int c )
+{
+ icons->setCategoryFilter( c, TRUE );
+}
+
+void LauncherView::resizeEvent(QResizeEvent *e)
+{
+ QVBox::resizeEvent( e );
+ if ( e->size().width() != e->oldSize().width() )
+ sort();
+}
+
+void LauncherView::populate( AppLnkSet *folder, const QString& typefilter )
+{
+ icons->clear();
+ internalPopulate( folder, typefilter );
+}
+
+void LauncherView::selectionChanged()
+{
+ QIconViewItem* item = icons->currentItem();
+ if ( item && item->isSelected() ) {
+ AppLnk *appLnk = ((LauncherItem *)item)->appLnk();
+ if ( icons->inKeyEvent() ) // not for mouse press
+ emit clicked( appLnk );
+ item->setSelected(FALSE);
+ }
+}
+
+void LauncherView::returnPressed( QIconViewItem *item )
+{
+ if ( item ) {
+ AppLnk *appLnk = ((LauncherItem *)item)->appLnk();
+ emit clicked( appLnk );
+ }
+}
+
+void LauncherView::itemClicked( int btn, QIconViewItem *item )
+{
+ if ( item ) {
+ AppLnk *appLnk = ((LauncherItem *)item)->appLnk();
+ if ( btn == LeftButton ) {
+ // Make sure it's the item we execute that gets highlighted
+ icons->setCurrentItem( item );
+ emit clicked( appLnk );
+ }
+ item->setSelected(FALSE);
+ }
+}
+
+void LauncherView::itemPressed( int btn, QIconViewItem *item )
+{
+ if ( item ) {
+ AppLnk *appLnk = ((LauncherItem *)item)->appLnk();
+ if ( btn == RightButton )
+ emit rightPressed( appLnk );
+/*
+ else if ( btn == LeftButton )
+ emit clicked( appLnk );
+*/
+ item->setSelected(FALSE);
+ }
+}
+
+void LauncherView::internalPopulate( AppLnkSet *folder, const QString& typefilter )
+{
+ QListIterator<AppLnk> it( folder->children() );
+ icons->setTypeFilter(typefilter,FALSE);
+
+ while ( it.current() ) {
+ icons->addItem(*it,FALSE);
+ ++it;
+ }
+
+ icons->sort();
+}
+
+bool LauncherView::removeLink(const QString& linkfile)
+{
+ return icons->removeLink(linkfile);
+}
+
+void LauncherView::sort()
+{
+ icons->sort();
+}
+
+void LauncherView::addItem(AppLnk* app, bool resort)
+{
+ icons->addItem(app,resort);
+}
+
+void LauncherView::setFileSystems(const QList<FileSystem> &)
+{
+ // ### does nothing now...
+}
diff --git a/core/launcher/launcherview.h b/core/launcher/launcherview.h
new file mode 100644
index 0000000..3aaef7e
--- a/dev/null
+++ b/core/launcher/launcherview.h
@@ -0,0 +1,81 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LAUNCHERVIEW_H
+#define LAUNCHERVIEW_H
+
+#include <qpe/storage.h>
+
+#include <qvbox.h>
+
+class AppLnk;
+class AppLnkSet;
+class CategorySelect;
+class LauncherIconView;
+class QIconView;
+class QIconViewItem;
+class MenuButton;
+
+class LauncherView : public QVBox
+{
+ Q_OBJECT
+
+public:
+ LauncherView( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~LauncherView();
+
+ bool removeLink(const QString& linkfile);
+ void addItem(AppLnk* app, bool resort=TRUE);
+ void sort();
+
+ void setFileSystems(const QList<FileSystem> &);
+ void setToolsEnabled(bool);
+ void updateTools();
+
+ void setBusy(bool);
+
+public slots:
+ void populate( AppLnkSet *folder, const QString& categoryfilter );
+
+signals:
+ void clicked( const AppLnk * );
+ void rightPressed( AppLnk * );
+
+protected slots:
+ void selectionChanged();
+ void returnPressed( QIconViewItem *item );
+ void itemClicked( int, QIconViewItem * );
+ void itemPressed( int, QIconViewItem * );
+ void sortBy(int);
+ void showType(const QString&);
+ void showCategory( int );
+ void resizeEvent(QResizeEvent *);
+
+protected:
+ void internalPopulate( AppLnkSet *, const QString& categoryfilter );
+
+private:
+ static bool bsy;
+ QWidget* tools;
+ LauncherIconView* icons;
+ MenuButton *typemb;
+ CategorySelect *catmb;
+};
+
+#endif // LAUNCHERVIEW_H
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp
new file mode 100644
index 0000000..024f9cc
--- a/dev/null
+++ b/core/launcher/main.cpp
@@ -0,0 +1,276 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "desktop.h"
+#include "taskbar.h"
+#include "stabmon.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/network.h>
+#include <qpe/config.h>
+#ifdef QT_QWS_CUSTOM
+#include <qpe/custom.h>
+#endif
+
+#include <qfile.h>
+#include <qwindowsystem_qws.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/alarmserver.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+
+#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
+#include "../calibrate/calibrate.h"
+#endif
+
+#ifdef QT_QWS_LOGIN
+#include "../login/qdmdialogimpl.h"
+#endif
+
+#ifdef QT_QWS_CASSIOPEIA
+static void ignoreMessage( QtMsgType, const char * )
+{
+}
+#include <sys/mount.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#include <qdatetime.h>
+
+void initCassiopeia()
+{
+ // MIPSEL-specific init - make sure /proc exists for shm
+/*
+ if ( mount("/dev/ram0", "/", "ext2", MS_REMOUNT | MS_MGC_VAL, 0 ) ) {
+ perror("Remounting - / read/write");
+ }
+*/
+ if ( mount("none", "/tmp", "ramfs", 0, 0 ) ) {
+ perror("mounting ramfs /tmp");
+ } else {
+ fprintf( stderr, "mounted /tmp\n" );
+ }
+ if ( mount("none", "/home", "ramfs", 0, 0 ) ) {
+ perror("mounting ramfs /home");
+ } else {
+ fprintf( stderr, "mounted /home\n" );
+ }
+ if ( mount("none","/proc","proc",0,0) ) {
+ perror("Mounting - /proc");
+ } else {
+ fprintf( stderr, "mounted /proc\n" );
+ }
+ if ( mount("none","/mnt","shm",0,0) ) {
+ perror("Mounting - shm");
+ }
+ setenv( "QTDIR", "/", 1 );
+ setenv( "QPEDIR", "/", 1 );
+ setenv( "HOME", "/home", 1 );
+ mkdir( "/home/Documents", 0755 );
+
+ // set a reasonable starting date
+ QDateTime dt( QDate( 2001, 3, 15 ) );
+ QDateTime now = QDateTime::currentDateTime();
+ int change = now.secsTo( dt );
+
+ time_t t = ::time(0);
+ t += change;
+ stime(&t);
+
+ qInstallMsgHandler(ignoreMessage);
+}
+#endif
+
+#ifdef QPE_OWNAPM
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <linux/ioctl.h>
+#include <qpe/global.h>
+
+static void disableAPM()
+{
+
+ int fd, cur_val, ret;
+ char *device = "/dev/apm_bios";
+
+ fd = open (device, O_WRONLY);
+
+ if (fd == -1) {
+ perror(device);
+ return;
+ }
+
+ cur_val = ioctl(fd, APM_IOCGEVTSRC, 0);
+ if (cur_val == -1) {
+ perror("ioctl");
+ exit(errno);
+ }
+
+ ret = ioctl(fd, APM_IOCSEVTSRC, cur_val & ~APM_EVT_POWER_BUTTON);
+ if (ret == -1) {
+ perror("ioctl");
+ return;
+ }
+ close(fd);
+}
+
+static void initAPM()
+{
+ // So that we have to do it ourself, but better.
+ disableAPM();
+}
+#endif
+
+#ifdef QT_DEMO_SINGLE_FLOPPY
+#include <sys/mount.h>
+
+void initFloppy()
+{
+ mount("none","/proc","proc",0,0);
+ setenv( "QTDIR", "/", 0 );
+ setenv( "HOME", "/root", 0 );
+ setenv( "QWS_SIZE", "240x320", 0 );
+}
+#endif
+
+
+void initEnvironment()
+{
+ Config config("locale");
+ config.setGroup( "Location" );
+ QString tz = config.readEntry( "Timezone", getenv("TZ") );
+
+ // if not timezone set, pick New York
+ if (tz.isNull())
+ tz = "America/New_York";
+
+ setenv( "TZ", tz, 1 );
+ config.writeEntry( "Timezone", tz);
+
+ config.setGroup( "Language" );
+ QString lang = config.readEntry( "Language", getenv("LANG") );
+ if ( !lang.isNull() )
+ setenv( "LANG", lang, 1 );
+}
+
+static void initBacklight()
+{
+ QCopEnvelope e("QPE/System", "setBacklight(int)" );
+ e << -3; // Forced on
+}
+
+
+
+int initApplication( int argc, char ** argv )
+{
+#ifdef QT_QWS_CASSIOPEIA
+ initCassiopeia();
+#endif
+
+#ifdef QPE_OWNAPM
+ initAPM();
+#endif
+
+#ifdef QT_DEMO_SINGLE_FLOPPY
+ initFloppy();
+#endif
+
+ initEnvironment();
+
+#if !defined(QT_QWS_CASSIOPEIA) && !defined(QT_QWS_IPAQ) && !defined(QT_QWS_EBX)
+ setenv( "QWS_SIZE", "240x320", 0 );
+#endif
+
+ //Don't flicker at startup:
+ QWSServer::setDesktopBackground( QImage() );
+ DesktopApplication a( argc, argv, QApplication::GuiServer );
+
+ initBacklight();
+
+ AlarmServer::initialize();
+
+#if defined(QT_QWS_LOGIN)
+ for( int i=0; i<a.argc(); i++ )
+ if( strcmp( a.argv()[i], "-login" ) == 0 ) {
+ QDMDialogImpl::login( );
+ return 0;
+ }
+#endif
+
+ Desktop *d = new Desktop();
+
+ QObject::connect( &a, SIGNAL(datebook()), d, SLOT(raiseDatebook()) );
+ QObject::connect( &a, SIGNAL(contacts()), d, SLOT(raiseContacts()) );
+ QObject::connect( &a, SIGNAL(launch()), d, SLOT(raiseLauncher()) );
+ QObject::connect( &a, SIGNAL(email()), d, SLOT(raiseEmail()) );
+ QObject::connect( &a, SIGNAL(power()), d, SLOT(togglePower()) );
+ QObject::connect( &a, SIGNAL(backlight()), d, SLOT(toggleLight()) );
+ QObject::connect( &a, SIGNAL(symbol()), d, SLOT(toggleSymbolInput()) );
+ QObject::connect( &a, SIGNAL(numLockStateToggle()), d, SLOT(toggleNumLockState()) );
+ QObject::connect( &a, SIGNAL(capsLockStateToggle()), d, SLOT(toggleCapsLockState()) );
+ QObject::connect( &a, SIGNAL(prepareForRestart()), d, SLOT(terminateServers()) );
+
+ (void)new SysFileMonitor(d);
+ Network::createServer(d);
+
+#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
+ if ( !QFile::exists( "/etc/pointercal" ) ) {
+ // Make sure calibration widget starts on top.
+ Calibrate *cal = new Calibrate;
+ cal->exec();
+ delete cal;
+ }
+#endif
+
+ d->show();
+
+ int rv = a.exec();
+
+ delete d;
+
+ return rv;
+}
+
+int main( int argc, char ** argv )
+{
+#ifndef SINGLE_APP
+ signal( SIGCHLD, SIG_IGN );
+#endif
+
+ int retVal = initApplication( argc, argv );
+
+#ifndef SINGLE_APP
+ // Kill them. Kill them all.
+ setpgid( getpid(), getppid() );
+ killpg( getpid(), SIGTERM );
+ sleep( 1 );
+ killpg( getpid(), SIGKILL );
+#endif
+
+ return retVal;
+}
+
diff --git a/core/launcher/mrulist.cpp b/core/launcher/mrulist.cpp
new file mode 100644
index 0000000..4daf7d2
--- a/dev/null
+++ b/core/launcher/mrulist.cpp
@@ -0,0 +1,199 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "mrulist.h"
+
+#include <qpe/global.h>
+#include <qpe/applnk.h>
+#include <qpe/resource.h>
+
+#include <qframe.h>
+#include <qpushbutton.h>
+#include <qtoolbutton.h>
+#include <qpopupmenu.h>
+#include <qpainter.h>
+#include <qwindowsystem_qws.h>
+
+
+QList<MRUList> *MRUList::MRUListWidgets = NULL;
+QList<AppLnk> *MRUList::task = NULL;
+
+
+MRUList::MRUList( QWidget *parent )
+ : QFrame( parent ), selected(-1), oldsel(-1)
+{
+ setBackgroundMode( PaletteButton );
+ if (!MRUListWidgets)
+ MRUListWidgets = new QList<MRUList>;
+ if (!task)
+ task = new QList<AppLnk>;
+ MRUListWidgets->append( this );
+}
+
+
+MRUList::~MRUList()
+{
+ if (MRUListWidgets)
+ MRUListWidgets->remove( this );
+ if (task)
+ task->setAutoDelete( TRUE );
+}
+
+
+QSize MRUList::sizeHint() const
+{
+ return QSize( frameWidth(), 16 );
+}
+
+
+void MRUList::addTask( const AppLnk *appLnk )
+{
+ if ( !appLnk )
+ return;
+ unsigned int i = 0;
+
+ if ( !task )
+ return;
+
+ for ( ; i < task->count(); i++ ) {
+ AppLnk *t = task->at(i);
+ if ( t->exec() == appLnk->exec() ) {
+ if (i != 0) {
+ task->remove();
+ task->prepend( t );
+ }
+ for (unsigned i = 0; i < MRUListWidgets->count(); i++ )
+ MRUListWidgets->at(i)->update();
+ return;
+ }
+ }
+
+ AppLnk *t = new AppLnk( *appLnk );
+ // DocLnks have an overloaded virtual function exec()
+ t->setExec( appLnk->exec() );
+ task->prepend( t );
+
+ if ( task->count() > 6 ) {
+ t = task->last();
+ task->remove();
+ Global::terminate(t);
+ delete t;
+ }
+
+ for (unsigned i = 0; i < MRUListWidgets->count(); i++ )
+ MRUListWidgets->at(i)->update();
+}
+
+bool MRUList::quitOldApps()
+{
+ QStringList appsstarted;
+ QStringList appsrunning;
+ for ( int i=task->count()-1; i>=0; --i ) {
+ AppLnk *t = task->at(i);
+ appsstarted.append(t->exec());
+ }
+
+ const QList<QWSWindow> &list = qwsServer->clientWindows();
+ QWSWindow* w;
+ for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
+ QString app = w->client()->identity();
+ if ( appsstarted.contains(app) && !appsrunning.contains(app) )
+ appsrunning.append(app);
+ }
+
+ if ( appsrunning.count() > 1 ) {
+ QStringList::ConstIterator it = appsrunning.begin();
+ ++it; // top stays running!
+ for (; it != appsrunning.end(); it++) {
+ for ( int i=task->count()-1; i>=0; --i ) {
+ AppLnk *t = task->at(i);
+ if ( t->exec() == *it )
+ Global::terminate(t);
+ }
+ }
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+
+void MRUList::mousePressEvent(QMouseEvent *e)
+{
+ selected = 0;
+ int x=0;
+ QListIterator<AppLnk> it( *task );
+ for ( ; it.current(); ++it,++selected,x+=15 ) {
+ if ( x + 15 <= width() ) {
+ if ( e->x() >= x && e->x() < x+15 ) {
+ if ( selected < (int)task->count() ) {
+ repaint(FALSE);
+ return;
+ }
+ }
+ } else {
+ break;
+ }
+ }
+ selected = -1;
+ repaint( FALSE );
+}
+
+
+void MRUList::mouseReleaseEvent(QMouseEvent *)
+{
+ if ( selected >= 0 ) {
+ if ( parentWidget() )
+ if ( parentWidget()->isA( "QPopupMenu" ) )
+ parentWidget()->hide();
+ Global::execute( task->at(selected)->exec() );
+ selected = -1;
+ oldsel = -1;
+ update();
+ }
+}
+
+
+void MRUList::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+ AppLnk *t;
+ int x = 0;
+ int y = (height() - 14) / 2;
+ int i = 0;
+
+ p.fillRect( 0, 0, width(), height(), colorGroup().background() );
+
+ if ( task ) {
+ QListIterator<AppLnk> it( *task );
+ for ( ; it.current(); i++, ++it ) {
+ if ( x + 15 <= width() ) {
+ t = it.current();
+ if ( (int)i == selected )
+ p.fillRect( x, y, 15, t->pixmap().height()+1, colorGroup().highlight() );
+ else if ( (int)i == oldsel )
+ p.eraseRect( x, y, 15, t->pixmap().height()+1 );
+ p.drawPixmap( x, y, t->pixmap() );
+ x += 15;
+ }
+ }
+ }
+}
+
diff --git a/core/launcher/mrulist.h b/core/launcher/mrulist.h
new file mode 100644
index 0000000..141a09b
--- a/dev/null
+++ b/core/launcher/mrulist.h
@@ -0,0 +1,55 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __MRU_LIST_H__
+#define __MRU_LIST_H__
+
+
+#include <qpe/applnk.h>
+
+#include <qframe.h>
+#include <qlist.h>
+#include <qpixmap.h>
+
+
+class MRUList : public QFrame
+{
+public:
+ MRUList( QWidget *parent );
+ ~MRUList();
+ virtual QSize sizeHint() const;
+ static void addTask( const AppLnk *appLnk );
+ bool quitOldApps();
+
+protected:
+ void mousePressEvent(QMouseEvent *e);
+ void mouseReleaseEvent(QMouseEvent *e);
+ void paintEvent( QPaintEvent *event );
+
+private:
+ static QList<MRUList> *MRUListWidgets;
+ static QList<AppLnk> *task;
+ int selected;
+ int oldsel;
+};
+
+
+#endif // __MRU_LIST_H__
+
diff --git a/core/launcher/obexinterface.h b/core/launcher/obexinterface.h
new file mode 100644
index 0000000..a73fde6
--- a/dev/null
+++ b/core/launcher/obexinterface.h
@@ -0,0 +1,40 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef OBEXINTERFACE_H
+#define OBEXINTERFACE_H
+
+#include <qpe/qcom.h>
+
+#ifndef QT_NO_COMPONENT
+// ### regenerate!!!!!!
+// {6CA35D0B-C637-4865-A667-7D4CD8A70407}
+# ifndef IID_ObexInterface
+# define IID_ObexInterface QUuid( 0x6ca35d0b, 0xc637, 0x4865, 0xa6, 0x67, 0x7d, 0x4c, 0xd8, 0xa7, 0x04, 0x07)
+# endif
+#endif
+
+class QObject;
+
+struct ObexInterface : public QUnknownInterface
+{
+};
+
+#endif
diff --git a/core/launcher/packageslave.cpp b/core/launcher/packageslave.cpp
new file mode 100644
index 0000000..4f149a5
--- a/dev/null
+++ b/core/launcher/packageslave.cpp
@@ -0,0 +1,97 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "packageslave.h"
+
+#include <qpe/process.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qdatastream.h>
+#include <qcopchannel_qws.h>
+
+#include <unistd.h>
+
+PackageSlave::PackageSlave( QObject *parent, char* name )
+ : QObject( parent, name ), packageChannel( 0 )
+{
+ // setup qcop channel
+ packageChannel = new QCopChannel( "QPE/Package", this );
+ connect( packageChannel, SIGNAL( received(const QCString &, const QByteArray &) ),
+ this, SLOT( qcopMessage( const QCString &, const QByteArray &) ) );
+}
+
+void PackageSlave::qcopMessage( const QCString &msg, const QByteArray &data )
+{
+ QDataStream stream( data, IO_ReadOnly );
+
+ if ( msg == "installPackage(QString)" ) {
+ QString file;
+ stream >> file;
+ installPackage( file );
+ }
+ else if ( msg == "removePackage(QString)" ) {
+ QString file;
+ stream >> file;
+ removePackage( file );
+ }
+}
+
+void PackageSlave::installPackage( const QString &package )
+{
+ Process proc( QStringList() << "ipkg" << "install" << package );
+
+ sendReply( "installStarted(QString)", package );
+
+ QString output;
+ if ( proc.exec( "", output ) ) {
+ sendReply( "installDone(QString)", package );
+ }
+ else {
+ sendReply( "installFailed(QString)", package );
+ }
+ QCopEnvelope e("QPE/System", "linkChanged(QString)");
+ QString lf = QString::null;
+ e << lf;
+ unlink( package );
+}
+
+void PackageSlave::removePackage( const QString &package )
+{
+ Process proc( QStringList() << "ipkg" << "remove" << package );
+
+ sendReply( "removeStarted(QString)", package );
+
+ QString output;
+ if ( proc.exec( "", output ) ) {
+ sendReply( "removeDone(QString)", package );
+ }
+ else {
+ sendReply( "removeFailed(QString)", package );
+ }
+ QCopEnvelope e("QPE/System", "linkChanged(QString)");
+ QString lf = QString::null;
+ e << lf;
+}
+
+void PackageSlave::sendReply( const QCString& msg, const QString& arg )
+{
+ QCopEnvelope e( "QPE/Desktop", msg );
+ e << arg;
+}
diff --git a/core/launcher/packageslave.h b/core/launcher/packageslave.h
new file mode 100644
index 0000000..036abed
--- a/dev/null
+++ b/core/launcher/packageslave.h
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __packageslave_h__
+#define __packageslave_h__
+
+#include <qobject.h>
+
+class QCopChannel;
+
+class PackageSlave : public QObject
+{
+ Q_OBJECT
+
+public:
+ PackageSlave( QObject *parent, char* name = 0 );
+
+protected:
+ void installPackage( const QString &package );
+ void removePackage( const QString &package );
+
+protected slots:
+ void qcopMessage( const QCString &msg, const QByteArray &data );
+
+private:
+ void sendReply( const QCString& msg, const QString& arg );
+
+private:
+ QCopChannel *packageChannel;
+};
+
+
+#endif // __QUICK_LAUNCHER_H__
+
+
diff --git a/core/launcher/qcopbridge.cpp b/core/launcher/qcopbridge.cpp
new file mode 100644
index 0000000..c78e827
--- a/dev/null
+++ b/core/launcher/qcopbridge.cpp
@@ -0,0 +1,416 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qcopbridge.h"
+#include "transferserver.h"
+
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/qpeapplication.h>
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qdatastream.h>
+#include <qstringlist.h>
+#include <qfileinfo.h>
+#include <qregexp.h>
+#include <qcopchannel_qws.h>
+
+#define _XOPEN_SOURCE
+#include <pwd.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#if defined(_OS_LINUX_)
+#include <shadow.h>
+#endif
+
+//#define INSECURE
+
+const int block_size = 51200;
+
+QCopBridge::QCopBridge( Q_UINT16 port, QObject *parent = 0,
+ const char* name = 0)
+ : QServerSocket( port, 1, parent, name ),
+ desktopChannel( 0 ),
+ cardChannel( 0 )
+{
+ if ( !ok() )
+ qWarning( "Failed to bind to port %d", port );
+ else {
+ desktopChannel = new QCopChannel( "QPE/Desktop", this );
+ connect( desktopChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(desktopMessage( const QCString &, const QByteArray &)) );
+ cardChannel = new QCopChannel( "QPE/Card", this );
+ connect( cardChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(desktopMessage( const QCString &, const QByteArray &)) );
+ }
+ sendSync = FALSE;
+}
+
+QCopBridge::~QCopBridge()
+{
+ delete desktopChannel;
+}
+
+void QCopBridge::newConnection( int socket )
+{
+ QCopBridgePI *pi = new QCopBridgePI( socket, this );
+ openConnections.append( pi );
+ connect ( pi, SIGNAL( connectionClosed( QCopBridgePI *) ), this, SLOT( connectionClosed( QCopBridgePI *) ) );
+ QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::DisableSuspend;
+
+ if ( sendSync ) {
+ pi ->startSync();
+ sendSync = FALSE;
+ }
+}
+
+void QCopBridge::connectionClosed( QCopBridgePI *pi )
+{
+ openConnections.remove( pi );
+ if ( openConnections.count() == 0 ) {
+ QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
+ }
+}
+
+void QCopBridge::closeOpenConnections()
+{
+ QCopBridgePI *pi;
+ for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() )
+ pi->close();
+}
+
+
+void QCopBridge::desktopMessage( const QCString &command, const QByteArray &args )
+{
+ command.stripWhiteSpace();
+
+ int paren = command.find( "(" );
+ if ( paren <= 0 ) {
+ qDebug("DesktopMessage: bad qcop syntax");
+ return;
+ }
+
+ QString params = command.mid( paren + 1 );
+ if ( params[params.length()-1] != ')' ) {
+ qDebug("DesktopMessage: bad qcop syntax");
+ return;
+ }
+
+ params.truncate( params.length()-1 );
+
+ QStringList paramList = QStringList::split( ",", params );
+ QString data;
+ if ( paramList.count() ) {
+ QDataStream stream( args, IO_ReadOnly );
+ for ( QStringList::Iterator it = paramList.begin(); it != paramList.end(); ++it ) {
+ QString str;
+ if ( *it == "QString" ) {
+ stream >> str;
+ } else if ( *it == "QCString" ) {
+ QCString cstr;
+ stream >> cstr;
+ str = QString::fromLocal8Bit( cstr );
+ } else if ( *it == "int" ) {
+ int i;
+ stream >> i;
+ str = QString::number( i );
+ } else if ( *it == "bool" ) {
+ int i;
+ stream >> i;
+ str = QString::number( i );
+ } else {
+ qDebug(" cannot route the argument type %s throught the qcop bridge", (*it).latin1() );
+ return;
+ }
+ str.replace( QRegExp("&"), "&amp;" );
+ str.replace( QRegExp(" "), "&0x20;" );
+ str.replace( QRegExp("\n"), "&0x0d;" );
+ str.replace( QRegExp("\r"), "&0x0a;" );
+ data += " " + str;
+ }
+ }
+ QString sendCommand = QString(command.data()) + data;
+ // send the command to all open connections
+ if ( command == "startSync()" ) {
+ // we need to buffer it a bit
+ sendSync = TRUE;
+ startTimer( 20000 );
+ }
+
+ QCopBridgePI *pi;
+ for ( pi = openConnections.first(); pi != 0; pi = openConnections.next() ) {
+ pi->sendDesktopMessage( sendCommand );
+ }
+}
+
+void QCopBridge::timerEvent( QTimerEvent * )
+{
+ sendSync = FALSE;
+ killTimers();
+}
+
+
+QCopBridgePI::QCopBridgePI( int socket, QObject *parent = 0, const char* name = 0 )
+ : QSocket( parent, name )
+{
+ setSocket( socket );
+
+ peerport = peerPort();
+ peeraddress = peerAddress();
+
+#ifndef INSECURE
+ if ( !accessAuthorized(peeraddress) ) {
+ state = Forbidden;
+ startTimer( 0 );
+ } else
+#endif
+ {
+ state = Connected;
+ sendSync = FALSE;
+ connect( this, SIGNAL( readyRead() ), SLOT( read() ) );
+ connect( this, SIGNAL( connectionClosed() ), SLOT( connectionClosed() ) );
+
+ send( "220 Qtopia QCop bridge ready!" );
+ state = Wait_USER;
+
+ // idle timer to close connections when not used anymore
+ startTimer( 60000 );
+ connected = TRUE;
+ }
+}
+
+
+QCopBridgePI::~QCopBridgePI()
+{
+
+}
+
+void QCopBridgePI::connectionClosed()
+{
+ emit connectionClosed( this );
+ // qDebug( "Debug: Connection closed" );
+ delete this;
+}
+
+void QCopBridgePI::sendDesktopMessage( const QString &msg )
+{
+ QString str = "CALL QPE/Desktop " + msg;
+ send ( str );
+}
+
+
+void QCopBridgePI::send( const QString& msg )
+{
+ QTextStream os( this );
+ os << msg << endl;
+ //qDebug( "sending qcop message: %s", msg.latin1() );
+}
+
+void QCopBridgePI::read()
+{
+ while ( canReadLine() )
+ process( readLine().stripWhiteSpace() );
+}
+
+bool QCopBridgePI::checkUser( const QString& user )
+{
+ if ( user.isEmpty() ) return FALSE;
+
+ struct passwd *pw;
+ pw = getpwuid( geteuid() );
+ QString euser = QString::fromLocal8Bit( pw->pw_name );
+ return user == euser;
+}
+
+bool QCopBridgePI::checkPassword( const QString& password )
+{
+ // ### HACK for testing on local host
+ return true;
+
+ /*
+ struct passwd *pw = 0;
+ struct spwd *spw = 0;
+
+ pw = getpwuid( geteuid() );
+ spw = getspnam( pw->pw_name );
+
+ QString cpwd = QString::fromLocal8Bit( pw->pw_passwd );
+ if ( cpwd == "x" && spw )
+ cpwd = QString::fromLocal8Bit( spw->sp_pwdp );
+
+ QString cpassword = QString::fromLocal8Bit( crypt( password.local8Bit(), cpwd.local8Bit() ) );
+ return cpwd == cpassword;
+*/
+}
+
+void QCopBridgePI::process( const QString& message )
+{
+ //qDebug( "Command: %s", message.latin1() );
+
+ // split message using "," as separator
+ QStringList msg = QStringList::split( " ", message );
+ if ( msg.isEmpty() ) return;
+
+ // command token
+ QString cmd = msg[0].upper();
+
+ // argument token
+ QString arg;
+ if ( msg.count() >= 2 )
+ arg = msg[1];
+
+ // we always respond to QUIT, regardless of state
+ if ( cmd == "QUIT" ) {
+ send( "211 Have a nice day!" );
+ delete this;
+ return;
+ }
+
+ // connected to client
+ if ( Connected == state )
+ return;
+
+ // waiting for user name
+ if ( Wait_USER == state ) {
+
+ if ( cmd != "USER" || msg.count() < 2 || !checkUser( arg ) ) {
+ send( "530 Please login with USER and PASS" );
+ return;
+ }
+ send( "331 User name ok, need password" );
+ state = Wait_PASS;
+ return;
+ }
+
+ // waiting for password
+ if ( Wait_PASS == state ) {
+
+ if ( cmd != "PASS" || !checkPassword( arg ) ) {
+ //if ( cmd != "PASS" || msg.count() < 2 || !checkPassword( arg ) ) {
+ send( "530 Please login with USER and PASS" );
+ return;
+ }
+ send( "230 User logged in, proceed" );
+ state = Ready;
+ if ( sendSync ) {
+ sendDesktopMessage( "startSync()" );
+ sendSync = FALSE;
+ }
+ return;
+ }
+
+ // noop (NOOP)
+ else if ( cmd == "NOOP" ) {
+ connected = TRUE;
+ send( "200 Command okay" );
+ }
+
+ // call (CALL)
+ else if ( cmd == "CALL" ) {
+
+ // example: call QPE/System execute(QString) addressbook
+
+ if ( msg.count() < 3 ) {
+ send( "500 Syntax error, command unrecognized" );
+ }
+ else {
+
+ QString channel = msg[1];
+ QString command = msg[2];
+
+ command.stripWhiteSpace();
+
+ int paren = command.find( "(" );
+ if ( paren <= 0 ) {
+ send( "500 Syntax error, command unrecognized" );
+ return;
+ }
+
+ QString params = command.mid( paren + 1 );
+ if ( params[params.length()-1] != ')' ) {
+ send( "500 Syntax error, command unrecognized" );
+ return;
+ }
+
+ params.truncate( params.length()-1 );
+ QByteArray buffer;
+ QDataStream ds( buffer, IO_WriteOnly );
+
+ int msgId = 3;
+
+ QStringList paramList = QStringList::split( ",", params );
+ if ( paramList.count() > msg.count() - 3 ) {
+ send( "500 Syntax error, command unrecognized" );
+ return;
+ }
+
+ for ( QStringList::Iterator it = paramList.begin(); it != paramList.end(); ++it ) {
+
+ QString arg = msg[msgId];
+ arg.replace( QRegExp("&0x20;"), " " );
+ arg.replace( QRegExp("&amp;"), "&" );
+ arg.replace( QRegExp("&0x0d;"), "\n" );
+ arg.replace( QRegExp("&0x0a;"), "\r" );
+ if ( *it == "QString" )
+ ds << arg;
+ else if ( *it == "QCString" )
+ ds << arg.local8Bit();
+ else if ( *it == "int" )
+ ds << arg.toInt();
+ else if ( *it == "bool" )
+ ds << arg.toInt();
+ else {
+ send( "500 Syntax error, command unrecognized" );
+ return;
+ }
+ msgId++;
+ }
+
+ if ( !QCopChannel::isRegistered( channel.latin1() ) ) {
+ // send message back about it
+ QString answer = "599 ChannelNotRegistered " + channel;
+ send( answer );
+ return;
+ }
+
+ if ( paramList.count() )
+ QCopChannel::send( channel.latin1(), command.latin1(), buffer );
+ else
+ QCopChannel::send( channel.latin1(), command.latin1() );
+
+ send( "200 Command okay" );
+ }
+ }
+ // not implemented
+ else
+ send( "502 Command not implemented" );
+}
+
+
+
+void QCopBridgePI::timerEvent( QTimerEvent * )
+{
+ if ( connected )
+ connected = FALSE;
+ else
+ connectionClosed();
+}
diff --git a/core/launcher/qcopbridge.h b/core/launcher/qcopbridge.h
new file mode 100644
index 0000000..114b3ee
--- a/dev/null
+++ b/core/launcher/qcopbridge.h
@@ -0,0 +1,95 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __qcopbridge_h__
+#define __qcopbridge_h__
+
+#include <qserversocket.h>
+#include <qsocket.h>
+#include <qdir.h>
+#include <qfile.h>
+#include <qbuffer.h>
+
+class QFileInfo;
+class QCopBridgePI;
+class QCopChannel;
+
+class QCopBridge : public QServerSocket
+{
+ Q_OBJECT
+
+public:
+ QCopBridge( Q_UINT16 port, QObject *parent = 0, const char* name = 0 );
+ virtual ~QCopBridge();
+
+ void newConnection( int socket );
+ void closeOpenConnections();
+
+public slots:
+ void connectionClosed( QCopBridgePI *pi );
+ void desktopMessage( const QCString &call, const QByteArray & );
+
+protected:
+ void timerEvent( QTimerEvent * );
+
+private:
+ QCopChannel *desktopChannel;
+ QCopChannel *cardChannel;
+ QList<QCopBridgePI> openConnections;
+ bool sendSync;
+};
+
+
+class QCopBridgePI : public QSocket
+{
+ Q_OBJECT
+
+ enum State { Connected, Wait_USER, Wait_PASS, Ready, Forbidden };
+
+public:
+ QCopBridgePI( int socket, QObject *parent = 0, const char* name = 0 );
+ virtual ~QCopBridgePI();
+
+ void sendDesktopMessage( const QString &msg );
+ void startSync() { sendSync = TRUE; }
+
+signals:
+ void connectionClosed( QCopBridgePI *);
+
+protected slots:
+ void read();
+ void send( const QString& msg );
+ void process( const QString& command );
+ void connectionClosed();
+
+protected:
+ bool checkUser( const QString& user );
+ bool checkPassword( const QString& pw );
+
+ void timerEvent( QTimerEvent *e );
+
+private:
+ State state;
+ Q_UINT16 peerport;
+ QHostAddress peeraddress;
+ bool connected;
+ bool sendSync;
+};
+
+#endif
diff --git a/core/launcher/qpe-taskbar.control b/core/launcher/qpe-taskbar.control
new file mode 100644
index 0000000..f78f136
--- a/dev/null
+++ b/core/launcher/qpe-taskbar.control
@@ -0,0 +1,9 @@
+Files: bin/qpe apps/Settings/Calibrate.desktop
+Priority: required
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qt-embedded (>=$QTE_VERSION)
+Description: Launcher for QPE
+ The "finder" or "explorer", or whatever you want to call it.
diff --git a/core/launcher/quicklauncher.cpp b/core/launcher/quicklauncher.cpp
new file mode 100644
index 0000000..925b3b5
--- a/dev/null
+++ b/core/launcher/quicklauncher.cpp
@@ -0,0 +1,49 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qapplication.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <applnk.h>
+#include <resource.h>
+#include "quicklauncher.h"
+
+
+void QuickLauncher::addLauncherButton( AppLnk *appLnk )
+{
+ QPushButton *pb = new QPushButton( this );
+ // It's no a QObject anymore
+ //pb->connect( pb, SIGNAL( clicked( ) ), appLnk, SLOT( execute() ) );
+ pb->setPixmap( appLnk->pixmap() );
+ pb->setFocusPolicy( QWidget::NoFocus );
+ pb->setFlat( TRUE );
+ pb->setFixedSize( 18, 18 );
+}
+
+
+QuickLauncher::QuickLauncher( QWidget *parent ) : QHBox( parent )
+{
+// Example usage to add icons to the quick launcher area
+// addLauncherButton( "filebrowser_icon", "filebrowser" );
+// addLauncherButton( "textedit_icon", "textedit" );
+// addLauncherButton( "help_icon", "helpbrowser" );
+}
+
+
diff --git a/core/launcher/quicklauncher.h b/core/launcher/quicklauncher.h
new file mode 100644
index 0000000..92c6c66
--- a/dev/null
+++ b/core/launcher/quicklauncher.h
@@ -0,0 +1,40 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __QUICK_LAUNCHER_H__
+#define __QUICK_LAUNCHER_H__
+
+
+#include <qhbox.h>
+
+class AppLnk;
+
+
+class QuickLauncher : public QHBox {
+ Q_OBJECT
+public:
+ QuickLauncher( QWidget *parent );
+ void addLauncherButton( AppLnk * );
+};
+
+
+#endif // __QUICK_LAUNCHER_H__
+
+
diff --git a/core/launcher/shutdown.ui b/core/launcher/shutdown.ui
new file mode 100644
index 0000000..0023427
--- a/dev/null
+++ b/core/launcher/shutdown.ui
@@ -0,0 +1,1323 @@
+<!DOCTYPE UI><UI>
+<class>Shutdown</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Form1</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>437</width>
+ <height>465</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Shut down...</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>6</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget>
+ <class>QButtonGroup</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ButtonGroup1</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Terminate</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>7</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget row="1" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>quit</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>236</green>
+ <blue>179</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>245</red>
+ <green>245</green>
+ <blue>217</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>118</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>157</green>
+ <blue>119</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>236</green>
+ <blue>179</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>209</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>118</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>157</green>
+ <blue>119</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>236</green>
+ <blue>179</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>209</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>118</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>157</green>
+ <blue>119</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Terminate Server</string>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>4</number>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>reboot</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>183</green>
+ <blue>181</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>245</red>
+ <green>219</green>
+ <blue>218</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>92</green>
+ <blue>91</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>122</green>
+ <blue>121</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>183</green>
+ <blue>181</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>213</green>
+ <blue>212</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>92</green>
+ <blue>91</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>122</green>
+ <blue>121</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>183</green>
+ <blue>181</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>213</green>
+ <blue>212</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>92</green>
+ <blue>91</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>122</green>
+ <blue>121</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Reboot</string>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>2</number>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>restart</cstring>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>236</green>
+ <blue>179</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>245</red>
+ <green>245</green>
+ <blue>217</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>118</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>157</green>
+ <blue>119</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>236</green>
+ <blue>179</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>209</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>118</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>157</green>
+ <blue>119</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>236</green>
+ <blue>179</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>209</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>118</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>157</green>
+ <blue>119</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Restart Server</string>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>3</number>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>shutdown</cstring>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>183</green>
+ <blue>181</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>245</red>
+ <green>219</green>
+ <blue>218</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>92</green>
+ <blue>91</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>122</green>
+ <blue>121</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>183</green>
+ <blue>181</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>213</green>
+ <blue>212</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>92</green>
+ <blue>91</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>122</green>
+ <blue>121</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>236</red>
+ <green>183</green>
+ <blue>181</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>213</green>
+ <blue>212</blue>
+ </color>
+ <color>
+ <red>118</red>
+ <green>92</green>
+ <blue>91</blue>
+ </color>
+ <color>
+ <red>157</red>
+ <green>122</green>
+ <blue>121</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>222</red>
+ <green>222</green>
+ <blue>222</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Shutdown</string>
+ </property>
+ <property stdset="1">
+ <name>buttonGroupId</name>
+ <number>1</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>info</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;p&gt;
+These termination options are provided primarily for use while developing and testing the Qtopia system. In a normal environment, these concepts are unnecessary.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QProgressBar</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>progressBar</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Panel</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>totalSteps</name>
+ <number>20</number>
+ </property>
+ <property stdset="1">
+ <name>indicatorFollowsStyle</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cancel</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>181</red>
+ <green>222</green>
+ <blue>178</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>218</red>
+ <green>238</green>
+ <blue>216</blue>
+ </color>
+ <color>
+ <red>90</red>
+ <green>111</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>120</red>
+ <green>148</green>
+ <blue>118</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>174</red>
+ <green>222</green>
+ <blue>158</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>181</red>
+ <green>222</green>
+ <blue>178</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>207</red>
+ <green>255</green>
+ <blue>204</blue>
+ </color>
+ <color>
+ <red>90</red>
+ <green>111</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>120</red>
+ <green>148</green>
+ <blue>118</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>174</red>
+ <green>222</green>
+ <blue>158</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>181</red>
+ <green>222</green>
+ <blue>178</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>207</red>
+ <green>255</green>
+ <blue>204</blue>
+ </color>
+ <color>
+ <red>90</red>
+ <green>111</green>
+ <blue>89</blue>
+ </color>
+ <color>
+ <red>120</red>
+ <green>148</green>
+ <blue>118</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>174</red>
+ <green>222</green>
+ <blue>158</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Cancel</string>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/core/launcher/shutdownimpl.cpp b/core/launcher/shutdownimpl.cpp
new file mode 100644
index 0000000..06ed756
--- a/dev/null
+++ b/core/launcher/shutdownimpl.cpp
@@ -0,0 +1,95 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "shutdownimpl.h"
+
+#include <qpe/global.h>
+
+#include <qtimer.h>
+#include <qprogressbar.h>
+#include <qpushbutton.h>
+#include <qbuttongroup.h>
+#include <qlabel.h>
+
+
+
+#include <stdio.h>
+ShutdownImpl::ShutdownImpl( QWidget* parent, const char *name, WFlags fl )
+ : Shutdown( parent, name, fl )
+{
+ timer = new QTimer( this );
+ connect( timer, SIGNAL(timeout()), this, SLOT(timeout()) );
+
+ connect( ButtonGroup1, SIGNAL(clicked(int)), this, SLOT(buttonClicked(int)) );
+ connect( cancel, SIGNAL(clicked()), this, SLOT(cancelClicked()) );
+
+ progressBar->hide();
+ Global::hideInputMethod();
+#ifdef QT_QWS_CUSTOM
+ QPushButton *sb = Shutdown::shutdown;
+ sb->hide();
+#endif
+}
+
+void ShutdownImpl::buttonClicked( int b )
+{
+ progress = 0;
+ switch ( b ) {
+ case 1:
+ operation = ShutdownSystem;
+ break;
+ case 2:
+ operation = RebootSystem;
+ break;
+ case 3:
+ operation = RestartDesktop;
+ break;
+ case 4:
+ operation = TerminateDesktop;
+ break;
+ }
+ info->hide();
+ progressBar->show();
+ timer->start( 300 );
+ timeout();
+}
+
+void ShutdownImpl::cancelClicked()
+{
+ progressBar->hide();
+ info->show();
+ if ( timer->isActive() )
+ timer->stop();
+ else
+ close();
+}
+
+void ShutdownImpl::timeout()
+{
+ if ( (progress+=2) > progressBar->totalSteps() ) {
+ progressBar->hide();
+ timer->stop();
+ emit shutdown( operation );
+ } else {
+ progressBar->setProgress( progress );
+ }
+}
+
+
diff --git a/core/launcher/shutdownimpl.h b/core/launcher/shutdownimpl.h
new file mode 100644
index 0000000..54668f3
--- a/dev/null
+++ b/core/launcher/shutdownimpl.h
@@ -0,0 +1,50 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef SHUTDOWNIMPL_H
+#define SHUTDOWNIMPL_H
+
+#include "shutdown.h"
+
+class QTimer;
+
+class ShutdownImpl : public Shutdown
+{
+ Q_OBJECT
+public:
+ ShutdownImpl( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+
+ enum Type { ShutdownSystem, RebootSystem, RestartDesktop, TerminateDesktop };
+
+signals:
+ void shutdown( ShutdownImpl::Type );
+
+private slots:
+ void buttonClicked( int );
+ void cancelClicked();
+ void timeout();
+
+private:
+ QTimer *timer;
+ int progress;
+ Type operation;
+};
+
+#endif
+
diff --git a/core/launcher/sidething.cpp b/core/launcher/sidething.cpp
new file mode 100644
index 0000000..821c9d5
--- a/dev/null
+++ b/core/launcher/sidething.cpp
@@ -0,0 +1,75 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "sidething.h"
+
+#include <qpe/resource.h>
+
+#include <qrect.h>
+#include <qpopupmenu.h>
+#include <qpainter.h>
+
+
+void PopupWithLaunchSideThing::setFrameRect( const QRect &r )
+{
+ fr = r;
+ QPopupMenu::setFrameRect( r );
+}
+
+
+void PopupWithLaunchSideThing::paintEvent( QPaintEvent *event )
+{
+ QPainter paint( this );
+
+ if ( !contentsRect().contains( event->rect() ) ) {
+
+ QPopupMenu::setFrameRect( fr );
+ int oldLW = lineWidth();
+ setUpdatesEnabled(FALSE);
+ setLineWidth(oldLW);
+ setUpdatesEnabled(TRUE);
+
+ paint.save();
+ paint.setClipRegion( event->region().intersect( frameRect() ) );
+ QPixmap pm( Resource::loadPixmap( sidePixmap ) );
+ paint.drawPixmap( 2, fr.height() - pm.height() - 2, pm );
+// Need to draw a filled rectangle that extends the colour from the
+// end of the pixmap up to the top of the popupmenu
+// paint.fillRect();
+ drawFrame( &paint );
+ paint.restore();
+
+ }
+ if ( event->rect().intersects( contentsRect() ) /* &&
+ (fstyle & MShape) != HLine && (fstyle & MShape) != VLine */ ) {
+
+ QPopupMenu::setFrameRect( QRect(fr.left() + 21, fr.top(), fr.width() - 21, fr.height()) );
+ int oldLW = lineWidth();
+ setUpdatesEnabled(FALSE);
+ setLineWidth(oldLW);
+ setUpdatesEnabled(TRUE);
+
+ paint.setClipRegion( event->region().intersect( contentsRect() ) );
+ drawContents( &paint );
+ }
+
+}
+
+
diff --git a/core/launcher/sidething.h b/core/launcher/sidething.h
new file mode 100644
index 0000000..666a59d
--- a/dev/null
+++ b/core/launcher/sidething.h
@@ -0,0 +1,43 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __SIDE_THING_H__
+#define __SIDE_THING_H__
+
+
+#include "startmenu.h"
+
+
+class PopupWithLaunchSideThing : public StartPopupMenu
+{
+Q_OBJECT
+public:
+ PopupWithLaunchSideThing( QWidget *parent, QString *pixmap ) : StartPopupMenu( parent ), sidePixmap(*pixmap) { }
+
+protected:
+ void setFrameRect( const QRect & );
+ void paintEvent( QPaintEvent *event );
+ QRect fr;
+ QString sidePixmap;
+};
+
+
+#endif // __SIDE_THING_H__
+
diff --git a/core/launcher/stabmon.cpp b/core/launcher/stabmon.cpp
new file mode 100644
index 0000000..2911a1c
--- a/dev/null
+++ b/core/launcher/stabmon.cpp
@@ -0,0 +1,92 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "stabmon.h"
+
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qfile.h>
+#include <qcstring.h>
+
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+SysFileMonitor::SysFileMonitor(QObject* parent) :
+ QObject(parent)
+{
+ startTimer(2000);
+}
+
+const char * stab0 = "/var/run/stab";
+const char * stab1 = "/var/state/pcmcia/stab";
+const char * stab2 = "/var/lib/pcmcia/stab";
+
+void SysFileMonitor::timerEvent(QTimerEvent*)
+{
+ struct stat s;
+
+ static const char * tab [] = {
+ stab0,
+ stab1,
+ stab2
+ };
+ static const int nstab = sizeof(tab)/sizeof(const char *);
+ static int last[nstab];
+
+ bool ch = FALSE;
+ for ( int i=0; i<nstab; i++ ) {
+ if ( ::stat(tab[i], &s)==0 && (long)s.st_mtime != last[i] ) {
+ last[i] = (long)s.st_mtime;
+ ch=TRUE;
+ }
+ if ( ch ) {
+ QCopEnvelope("QPE/Card", "stabChanged()" );
+ break;
+ }
+ }
+
+ // st_size is no use, it's 0 for /proc/mounts too. Read it all.
+ static int mtabSize = 0;
+ QFile f( "/etc/mtab" );
+ if ( f.open(IO_ReadOnly) ) {
+#if 0
+ // readAll does not work correctly on sequential devices (as eg. /proc files)
+ QByteArray ba = f.readAll();
+ if ( (int)ba.size() != mtabSize ) {
+ mtabSize = (int)ba.size();
+ QCopEnvelope("QPE/Card", "mtabChanged()" );
+ }
+#else
+ QString s;
+ while( !f.atEnd() ) {
+ QString tmp;
+ f.readLine( tmp, 1024 );
+ s += tmp;
+ }
+ if ( (int)s.length() != mtabSize ) {
+ mtabSize = (int)s.length();
+ QCopEnvelope("QPE/Card", "mtabChanged()" );
+ }
+#endif
+ }
+}
+
diff --git a/core/launcher/stabmon.h b/core/launcher/stabmon.h
new file mode 100644
index 0000000..10c79a3
--- a/dev/null
+++ b/core/launcher/stabmon.h
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef STABMON_H
+#define STABMON_H
+
+#include <qobject.h>
+
+class SysFileMonitor : public QObject {
+public:
+ SysFileMonitor(QObject* parent);
+protected:
+ void timerEvent(QTimerEvent*);
+};
+
+#endif
diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp
new file mode 100644
index 0000000..54bdfcc
--- a/dev/null
+++ b/core/launcher/startmenu.cpp
@@ -0,0 +1,171 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "startmenu.h"
+#include "sidething.h"
+#include "mrulist.h"
+#include "info.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include <qpe/applnk.h>
+#include <qpe/global.h>
+#include <qpe/resource.h>
+
+#include <qdict.h>
+
+#include <stdlib.h>
+
+
+// #define USE_CONFIG_FILE
+
+
+StartMenu::StartMenu(QWidget *parent) : QLabel( parent )
+{
+ loadOptions();
+
+ setPixmap( Resource::loadPixmap( startButtonPixmap ) );
+ setFocusPolicy( NoFocus );
+ //setFlat( startButtonIsFlat );
+
+ apps = new AppLnkSet( QPEApplication::qpeDir() + "apps" );
+
+ createMenu();
+}
+
+
+void StartMenu::mousePressEvent( QMouseEvent * )
+{
+ launch();
+ if (desktopInfo)
+ desktopInfo->menuClicked();
+}
+
+
+StartMenu::~StartMenu()
+{
+ delete apps;
+}
+
+
+void StartMenu::loadOptions()
+{
+#ifdef USE_CONFIG_FILE
+ // Read configuration file
+ Config config("StartMenu");
+ config.setGroup( "StartMenu" );
+ QString tmpBoolString1 = config.readEntry( "UseWidePopupMenu", "FALSE" );
+ useWidePopupMenu = ( tmpBoolString1 == "TRUE" ) ? TRUE : FALSE;
+ QString tmpBoolString2 = config.readEntry( "StartButtonIsFlat", "TRUE" );
+ startButtonIsFlat = ( tmpBoolString2 == "TRUE" ) ? TRUE : FALSE;
+ QString tmpBoolString3 = config.readEntry( "UseMRUList", "TRUE" );
+ popupMenuSidePixmap = config.readEntry( "PopupMenuSidePixmap", "sidebar" );
+ startButtonPixmap = config.readEntry( "StartButtonPixmap", "go" );
+#else
+ // Basically just #include the .qpe_menu.conf file settings
+ useWidePopupMenu = FALSE;
+ popupMenuSidePixmap = "sidebar";
+ startButtonIsFlat = TRUE;
+ startButtonPixmap = "go";
+#endif
+}
+
+
+void StartMenu::createMenu()
+{
+ if ( useWidePopupMenu )
+ launchMenu = new PopupWithLaunchSideThing( this, &popupMenuSidePixmap );
+ else
+ launchMenu = new StartPopupMenu( this );
+
+ loadMenu( apps, launchMenu );
+
+}
+
+void StartMenu::itemSelected( int id )
+{
+ const AppLnk *app = apps->find( id );
+ if ( app )
+ app->execute();
+}
+
+bool StartMenu::loadMenu( AppLnkSet *folder, QPopupMenu *menu )
+{
+ bool result = FALSE;
+
+ QStringList typs = folder->types();
+ QDict<QPopupMenu> typpop;
+ for (QStringList::Iterator tit=typs.begin(); tit!=typs.end(); ++tit) {
+ if ( !(*tit).isEmpty() ) {
+ QPopupMenu *new_menu = new StartPopupMenu( menu );
+ typpop.insert(*tit, new_menu);
+ connect( new_menu, SIGNAL(activated(int)), SLOT(itemSelected(int)) );
+ menu->insertItem( folder->typePixmap(*tit), *tit, new_menu );
+ }
+ }
+
+ QListIterator<AppLnk> it( folder->children() );
+ for ( ; it.current(); ++it ) {
+ AppLnk *app = it.current();
+ if ( app->type() == "Separator" ) {
+ menu->insertSeparator();
+ } else {
+ QString t = app->type();
+ QPopupMenu* pmenu = typpop.find(t);
+ if ( !pmenu )
+ pmenu = menu;
+ pmenu->insertItem( app->pixmap(), app->name(), app->id() );
+ result=TRUE;
+ }
+ }
+
+ if ( result )
+ connect( menu, SIGNAL(activated(int)), SLOT(itemSelected(int)) );
+
+ return result;
+}
+
+
+void StartMenu::launch()
+{
+ int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height();
+
+ if ( launchMenu->isVisible() )
+ launchMenu->hide();
+ else
+ launchMenu->popup( QPoint( 1, y ) );
+}
+
+const AppLnk* StartMenu::execToLink(const QString& appname)
+{
+ const AppLnk* a = apps->findExec( appname );
+ return a;
+}
+
+void StartPopupMenu::keyPressEvent( QKeyEvent *e )
+{
+ if ( e->key() == Key_F33 || e->key() == Key_Space ) {
+ // "OK" button, little hacky
+ QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0);
+ QPopupMenu::keyPressEvent( &ke );
+ } else {
+ QPopupMenu::keyPressEvent( e );
+ }
+}
diff --git a/core/launcher/startmenu.h b/core/launcher/startmenu.h
new file mode 100644
index 0000000..a02f39e
--- a/dev/null
+++ b/core/launcher/startmenu.h
@@ -0,0 +1,76 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __START_MENU_H__
+#define __START_MENU_H__
+
+#include <qstring.h>
+#include <qlist.h>
+#include <qlabel.h>
+#include <qpopupmenu.h>
+
+
+class AppLnkSet;
+class AppLnk;
+
+class StartPopupMenu : public QPopupMenu
+{
+public:
+ StartPopupMenu( QWidget *parent ) : QPopupMenu( parent ) {}
+protected:
+ void keyPressEvent( QKeyEvent *e );
+};
+
+class StartMenu : public QLabel {
+ Q_OBJECT
+public:
+ StartMenu( QWidget * );
+ ~StartMenu();
+
+ const AppLnk* execToLink(const QString& appname);
+
+public:
+ StartPopupMenu *launchMenu;
+
+public slots:
+ void launch( );
+ void loadOptions( );
+ void createMenu( );
+
+protected slots:
+ void itemSelected( int id );
+
+protected:
+ virtual void mousePressEvent( QMouseEvent * );
+
+private:
+ bool loadMenu( AppLnkSet *folder, QPopupMenu *menu );
+
+private:
+ bool useWidePopupMenu;
+ QString popupMenuSidePixmap;
+
+ bool startButtonIsFlat;
+ QString startButtonPixmap;
+
+ AppLnkSet *apps;
+};
+
+#endif // __START_MENU_H__
diff --git a/core/launcher/syncdialog.ui b/core/launcher/syncdialog.ui
new file mode 100644
index 0000000..141f123
--- a/dev/null
+++ b/core/launcher/syncdialog.ui
@@ -0,0 +1,228 @@
+<!DOCTYPE UI><UI>
+<class>SyncDialog</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>SyncDialog</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>210</width>
+ <height>244</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Syncing</string>
+ </property>
+ <property stdset="1">
+ <name>sizeGripEnabled</name>
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer10</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Syncing</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>whatLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;b&gt;Contacts&lt;/b&gt;</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer11</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer4</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Cancel</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer5</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer12</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>SyncDialog</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+</UI>
diff --git a/core/launcher/systray.cpp b/core/launcher/systray.cpp
new file mode 100644
index 0000000..ad1553f
--- a/dev/null
+++ b/core/launcher/systray.cpp
@@ -0,0 +1,107 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/qpeapplication.h>
+#include <qpe/qlibrary.h>
+#include <qpe/config.h>
+
+#include <qlayout.h>
+#include <qdir.h>
+#include <qtranslator.h>
+
+#include "quicklauncher.h"
+#include "systray.h"
+
+#include <stdlib.h>
+
+#ifdef SINGLE_APP
+#include "clockappletimpl.h"
+#endif
+
+SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0)
+{
+ //setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ loadApplets();
+}
+
+void SysTray::loadApplets()
+{
+#ifndef SINGLE_APP
+ QValueList<TaskbarApplet>::Iterator mit;
+ for ( mit = appletList.begin(); mit != appletList.end(); ++mit ) {
+ (*mit).iface->release();
+ (*mit).library->unload();
+ delete (*mit).library;
+ }
+ appletList.clear();
+ if ( layout )
+ delete layout;
+ layout = new QHBoxLayout( this );
+
+ QString path = QPEApplication::qpeDir() + "/plugins/applets";
+ QDir dir( path, "lib*.so" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ TaskbarAppletInterface *iface = 0;
+ QLibrary *lib = new QLibrary( path + "/" + *it );
+ if ( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) {
+ TaskbarApplet applet;
+ applet.library = lib;
+ applet.iface = iface;
+ applet.applet = applet.iface->applet( this );
+ positionApplet( applet );
+ QString lang = getenv( "LANG" );
+ QTranslator * trans = new QTranslator(qApp);
+ QString type = (*it).left( (*it).find(".") );
+ QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm";
+ qDebug("tr fpr sysapplet: %s", tfn.latin1() );
+ if ( trans->load( tfn ))
+ qApp->installTranslator( trans );
+ else
+ delete trans;
+ } else {
+ delete lib;
+ }
+ }
+#else
+ layout = new QHBoxLayout( this );
+ TaskbarApplet applet;
+ applet.iface = new ClockAppletImpl();
+ applet.applet = applet.iface->applet( this );
+ positionApplet( applet );
+#endif
+}
+
+void SysTray::positionApplet( const TaskbarApplet &a )
+{
+ int p = 0;
+ QValueList<TaskbarApplet>::Iterator it;
+ for ( it = appletList.begin(); it != appletList.end(); ++it ) {
+ if ( (*it).iface->position() > a.iface->position() )
+ break;
+ p += 2;
+ }
+
+ appletList.insert( it, a );
+ layout->insertWidget( p, a.applet );
+ layout->insertSpacing( p, 1 );
+}
+
diff --git a/core/launcher/systray.h b/core/launcher/systray.h
new file mode 100644
index 0000000..0aed348
--- a/dev/null
+++ b/core/launcher/systray.h
@@ -0,0 +1,58 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __SYSTRAY_H__
+#define __SYSTRAY_H__
+
+#include <qpe/taskbarappletinterface.h>
+
+#include <qframe.h>
+#include <qvaluelist.h>
+
+class QHBoxLayout;
+class QLibrary;
+
+struct TaskbarApplet
+{
+#ifndef QT_NO_COMPONENT
+ QLibrary *library;
+#endif
+ TaskbarAppletInterface *iface;
+ QWidget *applet;
+};
+
+class SysTray : public QFrame {
+ Q_OBJECT
+public:
+ SysTray( QWidget *parent );
+
+ void loadApplets();
+
+private:
+ void positionApplet( const TaskbarApplet &a );
+
+private:
+ QHBoxLayout *layout;
+ QValueList<TaskbarApplet> appletList;
+};
+
+
+#endif // __SYSTRAY_H__
+
diff --git a/core/launcher/taskbar.cpp b/core/launcher/taskbar.cpp
new file mode 100644
index 0000000..d7f36bd
--- a/dev/null
+++ b/core/launcher/taskbar.cpp
@@ -0,0 +1,314 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "startmenu.h"
+#include "inputmethods.h"
+#include "mrulist.h"
+#include "systray.h"
+#include "calibrate.h"
+#include "wait.h"
+#include "appicons.h"
+
+#include "taskbar.h"
+#include "desktop.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/global.h>
+#ifdef QT_QWS_CUSTOM
+#include <qpe/custom.h>
+#endif
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qtimer.h>
+#include <qwindowsystem_qws.h>
+#include <qwidgetstack.h>
+
+#if defined( Q_WS_QWS )
+#include <qwsdisplay_qws.h>
+#include <qgfx_qws.h>
+#endif
+
+
+#define FACTORY(T) \
+ static QWidget *new##T( bool maximized ) { \
+ QWidget *w = new T( 0, "test", QWidget::WDestructiveClose | QWidget::WGroupLeader ); \
+ if ( maximized ) { \
+ if ( qApp->desktop()->width() <= 350 ) { \
+ w->showMaximized(); \
+ } else { \
+ w->resize( QSize( 300, 300 ) ); \
+ } \
+ } \
+ w->show(); \
+ return w; \
+ }
+
+
+#ifdef SINGLE_APP
+#define APP(a,b,c,d) FACTORY(b)
+#include "../taskbar/apps.h"
+#undef APP
+#endif // SINGLE_APP
+
+static Global::Command builtins[] = {
+
+#ifdef SINGLE_APP
+#define APP(a,b,c,d) { a, new##b, c },
+#include "../taskbar/apps.h"
+#undef APP
+#endif
+
+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_EBX)
+ { "calibrate", TaskBar::calibrate, 1, 0 },
+#endif
+#if !defined(QT_QWS_CASSIOPEIA)
+ { "shutdown", Global::shutdown, 1, 0 },
+// { "run", run, 1, 0 },
+#endif
+
+ { 0, TaskBar::calibrate, 0, 0 },
+};
+
+static bool initNumLock()
+{
+#ifdef QPE_INITIAL_NUMLOCK_STATE
+ QPE_INITIAL_NUMLOCK_STATE
+#endif
+ return FALSE;
+}
+
+class LockKeyState : public QWidget
+{
+public:
+ LockKeyState( QWidget *parent ) :
+ QWidget(parent),
+ nl(initNumLock()), cl(FALSE)
+ {
+ nl_pm = Resource::loadPixmap("numlock");
+ cl_pm = Resource::loadPixmap("capslock");
+ }
+ QSize sizeHint() const
+ {
+ return QSize(nl_pm.width()+2,nl_pm.width()+nl_pm.height()+1);
+ }
+ void toggleNumLockState()
+ {
+ nl = !nl; repaint();
+ }
+ void toggleCapsLockState()
+ {
+ cl = !cl; repaint();
+ }
+ void paintEvent( QPaintEvent * )
+ {
+ int y = (height()-sizeHint().height())/2;
+ QPainter p(this);
+ if ( nl )
+ p.drawPixmap(1,y,nl_pm);
+ if ( cl )
+ p.drawPixmap(1,y+nl_pm.height()+1,cl_pm);
+ }
+private:
+ QPixmap nl_pm, cl_pm;
+ bool nl, cl;
+};
+
+TaskBar::~TaskBar()
+{
+}
+
+
+TaskBar::TaskBar() : QHBox(0, 0, WStyle_Customize | WStyle_Tool | WStyle_StaysOnTop | WGroupLeader)
+{
+ Global::setBuiltinCommands(builtins);
+
+ sm = new StartMenu( this );
+
+ inputMethods = new InputMethods( this );
+ connect( inputMethods, SIGNAL(inputToggled(bool)),
+ this, SLOT(calcMaxWindowRect()) );
+ //new QuickLauncher( this );
+
+ stack = new QWidgetStack( this );
+ stack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
+ label = new QLabel(stack);
+
+ mru = new MRUList( stack );
+ stack->raiseWidget( mru );
+
+ waitIcon = new Wait( this );
+ (void) new AppIcons( this );
+
+ sysTray = new SysTray( this );
+
+ // ## make customizable in some way?
+#ifdef QT_QWS_CUSTOM
+ lockState = new LockKeyState( this );
+#else
+ lockState = 0;
+#endif
+
+#if defined(Q_WS_QWS)
+#if !defined(QT_NO_COP)
+ QCopChannel *channel = new QCopChannel( "QPE/TaskBar", this );
+ connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(receive(const QCString&, const QByteArray&)) );
+#endif
+#endif
+ waitTimer = new QTimer( this );
+ connect( waitTimer, SIGNAL( timeout() ), this, SLOT( stopWait() ) );
+ clearer = new QTimer( this );
+ QObject::connect(clearer, SIGNAL(timeout()), SLOT(clearStatusBar()));
+ QObject::connect(clearer, SIGNAL(timeout()), sysTray, SLOT(show()));
+}
+
+void TaskBar::setStatusMessage( const QString &text )
+{
+ label->setText( text );
+ stack->raiseWidget( label );
+ if ( sysTray && ( label->fontMetrics().width( text ) > label->width() ) )
+ sysTray->hide();
+ clearer->start( 3000 );
+}
+
+void TaskBar::clearStatusBar()
+{
+ label->clear();
+ stack->raiseWidget( mru );
+}
+
+void TaskBar::startWait()
+{
+ waitIcon->setWaiting( true );
+ // a catchall stop after 10 seconds...
+ waitTimer->start( 10 * 1000, true );
+}
+
+void TaskBar::stopWait(const QString& app)
+{
+ waitTimer->stop();
+ mru->addTask(sm->execToLink(app));
+ waitIcon->setWaiting( false );
+}
+
+void TaskBar::stopWait()
+{
+ waitTimer->stop();
+ waitIcon->setWaiting( false );
+}
+
+void TaskBar::resizeEvent( QResizeEvent *e )
+{
+ QHBox::resizeEvent( e );
+ calcMaxWindowRect();
+}
+
+void TaskBar::styleChange( QStyle &s )
+{
+ QHBox::styleChange( s );
+ calcMaxWindowRect();
+}
+
+void TaskBar::calcMaxWindowRect()
+{
+#ifdef Q_WS_QWS
+ QRect wr;
+ int displayWidth = qApp->desktop()->width();
+ QRect ir = inputMethods->inputRect();
+ if ( ir.isValid() ) {
+ wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 );
+ } else {
+ wr.setCoords( 0, 0, displayWidth-1, y()-1 );
+ }
+
+#if QT_VERSION < 300
+ QWSServer::setMaxWindowRect( qt_screen->mapToDevice(wr,
+ QSize(qt_screen->width(),qt_screen->height()))
+ );
+#else
+ QWSServer::setMaxWindowRect( wr );
+#endif
+#endif
+}
+
+void TaskBar::receive( const QCString &msg, const QByteArray &data )
+{
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "message(QString)" ) {
+ QString text;
+ stream >> text;
+ setStatusMessage( text );
+ } else if ( msg == "hideInputMethod()" ) {
+ inputMethods->hideInputMethod();
+ } else if ( msg == "showInputMethod()" ) {
+ inputMethods->showInputMethod();
+ } else if ( msg == "reloadInputMethods()" ) {
+ inputMethods->loadInputMethods();
+ } else if ( msg == "reloadApplets()" ) {
+ sysTray->loadApplets();
+ } else if ( msg == "soundAlarm()" ) {
+ Desktop::soundAlarm();
+ }
+#ifdef CUSTOM_LEDS
+ else if ( msg == "setLed(int,bool)" ) {
+ int led, status;
+ stream >> led >> status;
+ CUSTOM_LEDS( led, status );
+ }
+#endif
+}
+
+QWidget *TaskBar::calibrate(bool)
+{
+#ifdef Q_WS_QWS
+ Calibrate *c = new Calibrate;
+ c->show();
+ return c;
+#else
+ return 0;
+#endif
+}
+
+void TaskBar::toggleNumLockState()
+{
+ if ( lockState ) lockState->toggleNumLockState();
+}
+
+void TaskBar::toggleCapsLockState()
+{
+ if ( lockState ) lockState->toggleCapsLockState();
+}
+
+void TaskBar::toggleSymbolInput()
+{
+ if ( inputMethods->currentShown() == "Unicode" ) {
+ inputMethods->hideInputMethod();
+ } else {
+ inputMethods->showInputMethod("Unicode");
+ }
+}
+
+bool TaskBar::recoverMemory()
+{
+ return mru->quitOldApps();
+}
+
diff --git a/core/launcher/taskbar.h b/core/launcher/taskbar.h
new file mode 100644
index 0000000..cdeb3c7
--- a/dev/null
+++ b/core/launcher/taskbar.h
@@ -0,0 +1,86 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __TASKBAR_H__
+#define __TASKBAR_H__
+
+#ifdef QT_QWS_CUSTOM
+#include <qpe/custom.h>
+#endif
+
+#include <qhbox.h>
+
+class QLabel;
+class QTimer;
+class InputMethods;
+class Wait;
+class SysTray;
+class MRUList;
+class QWidgetStack;
+class QTimer;
+class QLabel;
+class StartMenu;
+class LockKeyState;
+
+class TaskBar : public QHBox {
+ Q_OBJECT
+public:
+ TaskBar();
+ ~TaskBar();
+
+ static QWidget *calibrate( bool );
+
+ bool recoverMemory();
+
+ StartMenu *startMenu() const { return sm; }
+public slots:
+ void startWait();
+ void stopWait(const QString&);
+ void stopWait();
+ void clearStatusBar();
+ void toggleNumLockState();
+ void toggleCapsLockState();
+ void toggleSymbolInput();
+
+protected:
+ void resizeEvent( QResizeEvent * );
+ void styleChange( QStyle & );
+ void setStatusMessage( const QString &text );
+
+private slots:
+ void calcMaxWindowRect();
+ void receive( const QCString &msg, const QByteArray &data );
+
+private:
+
+ QTimer *waitTimer;
+ Wait *waitIcon;
+ InputMethods *inputMethods;
+ SysTray *sysTray;
+ MRUList *mru;
+ QWidgetStack *stack;
+ QTimer *clearer;
+ QLabel *label;
+ LockKeyState* lockState;
+ StartMenu *sm;
+};
+
+
+#endif // __TASKBAR_H__
diff --git a/core/launcher/transferserver.cpp b/core/launcher/transferserver.cpp
new file mode 100644
index 0000000..87a49eb
--- a/dev/null
+++ b/core/launcher/transferserver.cpp
@@ -0,0 +1,1245 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#define _XOPEN_SOURCE
+#include <pwd.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#if defined(_OS_LINUX_)
+#include <shadow.h>
+#endif
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qdatastream.h>
+#include <qmessagebox.h>
+#include <qstringlist.h>
+#include <qfileinfo.h>
+#include <qregexp.h>
+//#include <qpe/qcopchannel_qws.h>
+#include <qpe/qprocess.h>
+#include <qpe/process.h>
+#include <qpe/config.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include "transferserver.h"
+
+const int block_size = 51200;
+
+TransferServer::TransferServer( Q_UINT16 port, QObject *parent = 0,
+ const char* name = 0)
+ : QServerSocket( port, 1, parent, name )
+{
+ if ( !ok() )
+ qWarning( "Failed to bind to port %d", port );
+}
+
+TransferServer::~TransferServer()
+{
+
+}
+
+void TransferServer::newConnection( int socket )
+{
+ (void) new ServerPI( socket, this );
+}
+
+bool accessAuthorized(QHostAddress peeraddress)
+{
+ Config cfg("Security");
+ cfg.setGroup("Sync");
+ uint auth_peer = cfg.readNumEntry("auth_peer",0xc0a80100);
+ uint auth_peer_bits = cfg.readNumEntry("auth_peer_bits",24);
+ bool ok = (peeraddress.ip4Addr() & (((1<<auth_peer_bits)-1)<<(32-auth_peer_bits)))
+ == auth_peer;
+ /* Allows denial-of-service attack.
+ if ( !ok ) {
+ QMessageBox::warning(0,tr("Security"),
+ tr("<p>An attempt to access this device from %1 has been denied.")
+ .arg(peeraddress.toString()));
+ }
+ */
+ return ok;
+}
+
+ServerPI::ServerPI( int socket, QObject *parent = 0, const char* name = 0 )
+ : QSocket( parent, name ) , dtp( 0 ), serversocket( 0 ), waitsocket( 0 )
+{
+ state = Connected;
+
+ setSocket( socket );
+
+ peerport = peerPort();
+ peeraddress = peerAddress();
+
+#ifndef INSECURE
+ if ( !accessAuthorized(peeraddress) ) {
+ state = Forbidden;
+ startTimer( 0 );
+ } else
+#endif
+ {
+ connect( this, SIGNAL( readyRead() ), SLOT( read() ) );
+ connect( this, SIGNAL( connectionClosed() ), SLOT( connectionClosed() ) );
+
+ passiv = FALSE;
+ for( int i = 0; i < 4; i++ )
+ wait[i] = FALSE;
+
+ send( "220 Qtopia transfer service ready!" );
+ state = Wait_USER;
+
+ dtp = new ServerDTP( this );
+ connect( dtp, SIGNAL( completed() ), SLOT( dtpCompleted() ) );
+ connect( dtp, SIGNAL( failed() ), SLOT( dtpFailed() ) );
+ connect( dtp, SIGNAL( error( int ) ), SLOT( dtpError( int ) ) );
+
+
+ directory = QDir::currentDirPath();
+
+ static int p = 1024;
+
+ while ( !serversocket || !serversocket->ok() ) {
+ delete serversocket;
+ serversocket = new ServerSocket( ++p, this );
+ }
+ connect( serversocket, SIGNAL( newIncomming( int ) ),
+ SLOT( newConnection( int ) ) );
+ }
+}
+
+ServerPI::~ServerPI()
+{
+
+}
+
+void ServerPI::connectionClosed()
+{
+ // qDebug( "Debug: Connection closed" );
+ delete this;
+}
+
+void ServerPI::send( const QString& msg )
+{
+ QTextStream os( this );
+ os << msg << endl;
+ //qDebug( "Reply: %s", msg.latin1() );
+}
+
+void ServerPI::read()
+{
+ while ( canReadLine() )
+ process( readLine().stripWhiteSpace() );
+}
+
+bool ServerPI::checkUser( const QString& user )
+{
+ if ( user.isEmpty() ) return FALSE;
+
+ struct passwd *pw;
+ pw = getpwuid( geteuid() );
+ QString euser = QString::fromLocal8Bit( pw->pw_name );
+ return user == euser;
+}
+
+bool ServerPI::checkPassword( const QString& /* password */ )
+{
+ // ### HACK for testing on local host
+ return true;
+
+ /*
+ struct passwd *pw = 0;
+ struct spwd *spw = 0;
+
+ pw = getpwuid( geteuid() );
+ spw = getspnam( pw->pw_name );
+
+ QString cpwd = QString::fromLocal8Bit( pw->pw_passwd );
+ if ( cpwd == "x" && spw )
+ cpwd = QString::fromLocal8Bit( spw->sp_pwdp );
+
+ QString cpassword = QString::fromLocal8Bit( crypt( password.local8Bit(), cpwd.local8Bit() ) );
+ return cpwd == cpassword;
+*/
+}
+
+bool ServerPI::checkReadFile( const QString& file )
+{
+ QString filename;
+
+ if ( file[0] != "/" )
+ filename = directory.path() + "/" + file;
+ else
+ filename = file;
+
+ QFileInfo fi( filename );
+ return ( fi.exists() && fi.isReadable() );
+}
+
+bool ServerPI::checkWriteFile( const QString& file )
+{
+ QString filename;
+
+ if ( file[0] != "/" )
+ filename = directory.path() + "/" + file;
+ else
+ filename = file;
+
+ QFileInfo fi( filename );
+
+ if ( fi.exists() )
+ if ( !QFile( filename ).remove() )
+ return FALSE;
+ return TRUE;
+}
+
+void ServerPI::process( const QString& message )
+{
+ //qDebug( "Command: %s", message.latin1() );
+
+ // split message using "," as separator
+ QStringList msg = QStringList::split( " ", message );
+ if ( msg.isEmpty() ) return;
+
+ // command token
+ QString cmd = msg[0].upper();
+
+ // argument token
+ QString arg;
+ if ( msg.count() >= 2 )
+ arg = msg[1];
+
+ // full argument string
+ QString args;
+ if ( msg.count() >= 2 ) {
+ QStringList copy( msg );
+ // FIXME: for Qt3
+ // copy.pop_front()
+ copy.remove( copy.begin() );
+ args = copy.join( " " );
+ }
+
+ //qDebug( "args: %s", args.latin1() );
+
+ // we always respond to QUIT, regardless of state
+ if ( cmd == "QUIT" ) {
+ send( "211 Good bye!" );
+ delete this;
+ return;
+ }
+
+ // connected to client
+ if ( Connected == state )
+ return;
+
+ // waiting for user name
+ if ( Wait_USER == state ) {
+
+ if ( cmd != "USER" || msg.count() < 2 || !checkUser( arg ) ) {
+ send( "530 Please login with USER and PASS" );
+ return;
+ }
+ send( "331 User name ok, need password" );
+ state = Wait_PASS;
+ return;
+ }
+
+ // waiting for password
+ if ( Wait_PASS == state ) {
+
+ if ( cmd != "PASS" || !checkPassword( arg ) ) {
+ //if ( cmd != "PASS" || msg.count() < 2 || !checkPassword( arg ) ) {
+ send( "530 Please login with USER and PASS" );
+ return;
+ }
+ send( "230 User logged in, proceed" );
+ state = Ready;
+ return;
+ }
+
+ // ACCESS CONTROL COMMANDS
+
+
+ // account (ACCT)
+ if ( cmd == "ACCT" ) {
+ // even wu-ftp does not support it
+ send( "502 Command not implemented" );
+ }
+
+ // change working directory (CWD)
+ else if ( cmd == "CWD" ) {
+
+ if ( !args.isEmpty() ) {
+ if ( directory.cd( args, TRUE ) )
+ send( "250 Requested file action okay, completed" );
+ else
+ send( "550 Requested action not taken" );
+ }
+ else
+ send( "500 Syntax error, command unrecognized" );
+ }
+
+ // change to parent directory (CDUP)
+ else if ( cmd == "CDUP" ) {
+ if ( directory.cdUp() )
+ send( "250 Requested file action okay, completed" );
+ else
+ send( "550 Requested action not taken" );
+ }
+
+ // structure mount (SMNT)
+ else if ( cmd == "SMNT" ) {
+ // even wu-ftp does not support it
+ send( "502 Command not implemented" );
+ }
+
+ // reinitialize (REIN)
+ else if ( cmd == "REIN" ) {
+ // even wu-ftp does not support it
+ send( "502 Command not implemented" );
+ }
+
+
+ // TRANSFER PARAMETER COMMANDS
+
+
+ // data port (PORT)
+ else if ( cmd == "PORT" ) {
+ if ( parsePort( arg ) )
+ send( "200 Command okay" );
+ else
+ send( "500 Syntax error, command unrecognized" );
+ }
+
+ // passive (PASV)
+ else if ( cmd == "PASV" ) {
+ passiv = TRUE;
+ send( "227 Entering Passive Mode ("
+ + address().toString().replace( QRegExp( "\\." ), "," ) + ","
+ + QString::number( ( serversocket->port() ) >> 8 ) + ","
+ + QString::number( ( serversocket->port() ) & 0xFF ) +")" );
+ }
+
+ // representation type (TYPE)
+ else if ( cmd == "TYPE" ) {
+ if ( arg.upper() == "A" || arg.upper() == "I" )
+ send( "200 Command okay" );
+ else
+ send( "504 Command not implemented for that parameter" );
+ }
+
+ // file structure (STRU)
+ else if ( cmd == "STRU" ) {
+ if ( arg.upper() == "F" )
+ send( "200 Command okay" );
+ else
+ send( "504 Command not implemented for that parameter" );
+ }
+
+ // transfer mode (MODE)
+ else if ( cmd == "MODE" ) {
+ if ( arg.upper() == "S" )
+ send( "200 Command okay" );
+ else
+ send( "504 Command not implemented for that parameter" );
+ }
+
+
+ // FTP SERVICE COMMANDS
+
+
+ // retrieve (RETR)
+ else if ( cmd == "RETR" )
+ if ( !args.isEmpty() && checkReadFile( absFilePath( args ) )
+ || backupRestoreGzip( absFilePath( args ) ) ) {
+ send( "150 File status okay" );
+ sendFile( absFilePath( args ) );
+ }
+ else {
+ qDebug("550 Requested action not taken");
+ send( "550 Requested action not taken" );
+ }
+
+ // store (STOR)
+ else if ( cmd == "STOR" )
+ if ( !args.isEmpty() && checkWriteFile( absFilePath( args ) ) ) {
+ send( "150 File status okay" );
+ retrieveFile( absFilePath( args ) );
+ }
+ else
+ send( "550 Requested action not taken" );
+
+ // store unique (STOU)
+ else if ( cmd == "STOU" ) {
+ send( "502 Command not implemented" );
+ }
+
+ // append (APPE)
+ else if ( cmd == "APPE" ) {
+ send( "502 Command not implemented" );
+ }
+
+ // allocate (ALLO)
+ else if ( cmd == "ALLO" ) {
+ send( "200 Command okay" );
+ }
+
+ // restart (REST)
+ else if ( cmd == "REST" ) {
+ send( "502 Command not implemented" );
+ }
+
+ // rename from (RNFR)
+ else if ( cmd == "RNFR" ) {
+ renameFrom = QString::null;
+ if ( args.isEmpty() )
+ send( "500 Syntax error, command unrecognized" );
+ else {
+ QFile file( absFilePath( args ) );
+ if ( file.exists() ) {
+ send( "350 File exists, ready for destination name" );
+ renameFrom = absFilePath( args );
+ }
+ else
+ send( "550 Requested action not taken" );
+ }
+ }
+
+ // rename to (RNTO)
+ else if ( cmd == "RNTO" ) {
+ if ( lastCommand != "RNFR" )
+ send( "503 Bad sequence of commands" );
+ else if ( args.isEmpty() )
+ send( "500 Syntax error, command unrecognized" );
+ else {
+ QDir dir( absFilePath( args ) );
+ if ( dir.rename( renameFrom, absFilePath( args ), TRUE ) )
+ send( "250 Requested file action okay, completed." );
+ else
+ send( "550 Requested action not taken" );
+ }
+ }
+
+ // abort (ABOR)
+ else if ( cmd.contains( "ABOR" ) ) {
+ dtp->close();
+ if ( dtp->dtpMode() != ServerDTP::Idle )
+ send( "426 Connection closed; transfer aborted" );
+ else
+ send( "226 Closing data connection" );
+ }
+
+ // delete (DELE)
+ else if ( cmd == "DELE" ) {
+ if ( args.isEmpty() )
+ send( "500 Syntax error, command unrecognized" );
+ else {
+ QFile file( absFilePath( args ) ) ;
+ if ( file.remove() )
+ send( "250 Requested file action okay, completed" );
+ else
+ send( "550 Requested action not taken" );
+ }
+ }
+
+ // remove directory (RMD)
+ else if ( cmd == "RMD" ) {
+ if ( args.isEmpty() )
+ send( "500 Syntax error, command unrecognized" );
+ else {
+ QDir dir;
+ if ( dir.rmdir( absFilePath( args ), TRUE ) )
+ send( "250 Requested file action okay, completed" );
+ else
+ send( "550 Requested action not taken" );
+ }
+ }
+
+ // make directory (MKD)
+ else if ( cmd == "MKD" ) {
+ if ( args.isEmpty() ) {
+ qDebug(" Error: no arg");
+ send( "500 Syntax error, command unrecognized" );
+ }
+ else {
+ QDir dir;
+ if ( dir.mkdir( absFilePath( args ), TRUE ) )
+ send( "250 Requested file action okay, completed." );
+ else
+ send( "550 Requested action not taken" );
+ }
+ }
+
+ // print working directory (PWD)
+ else if ( cmd == "PWD" ) {
+ send( "257 \"" + directory.path() +"\"" );
+ }
+
+ // list (LIST)
+ else if ( cmd == "LIST" ) {
+ if ( sendList( absFilePath( args ) ) )
+ send( "150 File status okay" );
+ else
+ send( "500 Syntax error, command unrecognized" );
+ }
+
+ // size (SIZE)
+ else if ( cmd == "SIZE" ) {
+ QString filePath = absFilePath( args );
+ QFileInfo fi( filePath );
+ bool gzipfile = backupRestoreGzip( filePath );
+ if ( !fi.exists() && !gzipfile )
+ send( "500 Syntax error, command unrecognized" );
+ else {
+ if ( !gzipfile )
+ send( "213 " + QString::number( fi.size() ) );
+ else {
+ Process duproc( QString("du") );
+ duproc.addArgument("-s");
+ QString in, out;
+ if ( !duproc.exec(in, out) ) {
+ qDebug("du process failed; just sending back 1K");
+ send( "213 1024");
+ }
+ else {
+ QString size = out.left( out.find("\t") );
+ int guess = size.toInt()/5;
+ if ( filePath.contains("doc") )
+ guess *= 1000;
+ qDebug("sending back gzip guess of %d", guess);
+ send( "213 " + QString::number(guess) );
+ }
+ }
+ }
+ }
+ // name list (NLST)
+ else if ( cmd == "NLST" ) {
+ send( "502 Command not implemented" );
+ }
+
+ // site parameters (SITE)
+ else if ( cmd == "SITE" ) {
+ send( "502 Command not implemented" );
+ }
+
+ // system (SYST)
+ else if ( cmd == "SYST" ) {
+ send( "215 UNIX Type: L8" );
+ }
+
+ // status (STAT)
+ else if ( cmd == "STAT" ) {
+ send( "502 Command not implemented" );
+ }
+
+ // help (HELP )
+ else if ( cmd == "HELP" ) {
+ send( "502 Command not implemented" );
+ }
+
+ // noop (NOOP)
+ else if ( cmd == "NOOP" ) {
+ send( "200 Command okay" );
+ }
+
+ // not implemented
+ else
+ send( "502 Command not implemented" );
+
+ lastCommand = cmd;
+}
+
+bool ServerPI::backupRestoreGzip( const QString &file )
+{
+ return (file.find( "backup" ) != -1 &&
+ file.findRev( ".tgz" ) == (int)file.length()-4 );
+}
+
+bool ServerPI::backupRestoreGzip( const QString &file, QStringList &targets )
+{
+ if ( file.find( "backup" ) != -1 &&
+ file.findRev( ".tgz" ) == (int)file.length()-4 ) {
+ QFileInfo info( file );
+ targets = info.dirPath( TRUE );
+ qDebug("ServerPI::backupRestoreGzip for %s = %s", file.latin1(),
+ targets.join(" ").latin1() );
+ return true;
+ }
+ return false;
+}
+
+void ServerPI::sendFile( const QString& file )
+{
+ if ( passiv ) {
+ wait[SendFile] = TRUE;
+ waitfile = file;
+ if ( waitsocket )
+ newConnection( waitsocket );
+ }
+ else {
+ QStringList targets;
+ if ( backupRestoreGzip( file, targets ) )
+ dtp->sendGzipFile( file, targets, peeraddress, peerport );
+ else dtp->sendFile( file, peeraddress, peerport );
+ }
+}
+
+void ServerPI::retrieveFile( const QString& file )
+{
+ if ( passiv ) {
+ wait[RetrieveFile] = TRUE;
+ waitfile = file;
+ if ( waitsocket )
+ newConnection( waitsocket );
+ }
+ else {
+ QStringList targets;
+ if ( backupRestoreGzip( file, targets ) )
+ dtp->retrieveGzipFile( file, peeraddress, peerport );
+ else
+ dtp->retrieveFile( file, peeraddress, peerport );
+ }
+}
+
+bool ServerPI::parsePort( const QString& pp )
+{
+ QStringList p = QStringList::split( ",", pp );
+ if ( p.count() != 6 ) return FALSE;
+
+ // h1,h2,h3,h4,p1,p2
+ peeraddress = QHostAddress( ( p[0].toInt() << 24 ) + ( p[1].toInt() << 16 ) +
+ ( p[2].toInt() << 8 ) + p[3].toInt() );
+ peerport = ( p[4].toInt() << 8 ) + p[5].toInt();
+ return TRUE;
+}
+
+void ServerPI::dtpCompleted()
+{
+ dtp->close();
+ waitsocket = 0;
+ send( "226 Closing data connection, file transfer successful" );
+}
+
+void ServerPI::dtpFailed()
+{
+ dtp->close();
+ waitsocket = 0;
+ send( "451 Requested action aborted: local error in processing" );
+}
+
+void ServerPI::dtpError( int )
+{
+ dtp->close();
+ waitsocket = 0;
+ send( "451 Requested action aborted: local error in processing" );
+}
+
+bool ServerPI::sendList( const QString& arg )
+{
+ QByteArray listing;
+ QBuffer buffer( listing );
+
+ if ( !buffer.open( IO_WriteOnly ) )
+ return FALSE;
+
+ QTextStream ts( &buffer );
+ QString fn = arg;
+
+ if ( fn.isEmpty() )
+ fn = directory.path();
+
+ QFileInfo fi( fn );
+ if ( !fi.exists() ) return FALSE;
+
+ // return file listing
+ if ( fi.isFile() ) {
+ ts << fileListing( &fi ) << endl;
+ }
+
+ // return directory listing
+ else if ( fi.isDir() ) {
+ QDir dir( fn );
+ const QFileInfoList *list = dir.entryInfoList( QDir::All | QDir::Hidden );
+
+ QFileInfoListIterator it( *list );
+ QFileInfo *info;
+
+ unsigned long total = 0;
+ while ( ( info = it.current() ) ) {
+ if ( info->fileName() != "." && info->fileName() != ".." )
+ total += info->size();
+ ++it;
+ }
+
+ ts << "total " << QString::number( total / 1024 ) << endl;
+
+ it.toFirst();
+ while ( ( info = it.current() ) ) {
+ if ( info->fileName() == "." || info->fileName() == ".." ) {
+ ++it;
+ continue;
+ }
+ ts << fileListing( info ) << endl;
+ ++it;
+ }
+ }
+
+ if ( passiv ) {
+ waitarray = buffer.buffer();
+ wait[SendByteArray] = TRUE;
+ if ( waitsocket )
+ newConnection( waitsocket );
+ }
+ else
+ dtp->sendByteArray( buffer.buffer(), peeraddress, peerport );
+ return TRUE;
+}
+
+QString ServerPI::fileListing( QFileInfo *info )
+{
+ if ( !info ) return QString::null;
+ QString s;
+
+ // type char
+ if ( info->isDir() )
+ s += "d";
+ else if ( info->isSymLink() )
+ s += "l";
+ else
+ s += "-";
+
+ // permisson string
+ s += permissionString( info ) + " ";
+
+ // number of hardlinks
+ int subdirs = 1;
+
+ if ( info->isDir() )
+ subdirs = 2;
+ // FIXME : this is to slow
+ //if ( info->isDir() )
+ //subdirs = QDir( info->absFilePath() ).entryList( QDir::Dirs ).count();
+
+ s += QString::number( subdirs ).rightJustify( 3, ' ', TRUE ) + " ";
+
+ // owner
+ s += info->owner().leftJustify( 8, ' ', TRUE ) + " ";
+
+ // group
+ s += info->group().leftJustify( 8, ' ', TRUE ) + " ";
+
+ // file size in bytes
+ s += QString::number( info->size() ).rightJustify( 9, ' ', TRUE ) + " ";
+
+ // last modified date
+ QDate date = info->lastModified().date();
+ QTime time = info->lastModified().time();
+ s += date.monthName( date.month() ) + " "
+ + QString::number( date.day() ).rightJustify( 2, ' ', TRUE ) + " "
+ + QString::number( time.hour() ).rightJustify( 2, '0', TRUE ) + ":"
+ + QString::number( time.minute() ).rightJustify( 2,'0', TRUE ) + " ";
+
+ // file name
+ s += info->fileName();
+
+ return s;
+}
+
+QString ServerPI::permissionString( QFileInfo *info )
+{
+ if ( !info ) return QString( "---------" );
+ QString s;
+
+ // user
+ if ( info->permission( QFileInfo::ReadUser ) ) s += "r";
+ else s += "-";
+ if ( info->permission( QFileInfo::WriteUser ) ) s += "w";
+ else s += "-";
+ if ( info->permission( QFileInfo::ExeUser ) ) s += "x";
+ else s += "-";
+
+ // group
+ if ( info->permission( QFileInfo::ReadGroup ) ) s += "r";
+ else s += "-";
+ if ( info->permission( QFileInfo::WriteGroup ) )s += "w";
+ else s += "-";
+ if ( info->permission( QFileInfo::ExeGroup ) ) s += "x";
+ else s += "-";
+
+ // exec
+ if ( info->permission( QFileInfo::ReadOther ) ) s += "r";
+ else s += "-";
+ if ( info->permission( QFileInfo::WriteOther ) ) s += "w";
+ else s += "-";
+ if ( info->permission( QFileInfo::ExeOther ) ) s += "x";
+ else s += "-";
+
+ return s;
+}
+
+void ServerPI::newConnection( int socket )
+{
+ //qDebug( "New incomming connection" );
+
+ if ( !passiv ) return;
+
+ if ( wait[SendFile] ) {
+ QStringList targets;
+ if ( backupRestoreGzip( waitfile, targets ) )
+ dtp->sendGzipFile( waitfile, targets );
+ else
+ dtp->sendFile( waitfile );
+ dtp->setSocket( socket );
+ }
+ else if ( wait[RetrieveFile] ) {
+ qDebug("check retrieve file");
+ if ( backupRestoreGzip( waitfile ) )
+ dtp->retrieveGzipFile( waitfile );
+ else
+ dtp->retrieveFile( waitfile );
+ dtp->setSocket( socket );
+ }
+ else if ( wait[SendByteArray] ) {
+ dtp->sendByteArray( waitarray );
+ dtp->setSocket( socket );
+ }
+ else if ( wait[RetrieveByteArray] ) {
+ qDebug("retrieve byte array");
+ dtp->retrieveByteArray();
+ dtp->setSocket( socket );
+ }
+ else
+ waitsocket = socket;
+
+ for( int i = 0; i < 4; i++ )
+ wait[i] = FALSE;
+}
+
+QString ServerPI::absFilePath( const QString& file )
+{
+ if ( file.isEmpty() ) return file;
+
+ QString filepath( file );
+ if ( file[0] != "/" )
+ filepath = directory.path() + "/" + file;
+
+ return filepath;
+}
+
+
+void ServerPI::timerEvent( QTimerEvent * )
+{
+ connectionClosed();
+}
+
+
+ServerDTP::ServerDTP( QObject *parent = 0, const char* name = 0)
+ : QSocket( parent, name ), mode( Idle ), createTargzProc( 0 ),
+retrieveTargzProc( 0 ), gzipProc( 0 )
+{
+
+ connect( this, SIGNAL( connected() ), SLOT( connected() ) );
+ connect( this, SIGNAL( connectionClosed() ), SLOT( connectionClosed() ) );
+ connect( this, SIGNAL( bytesWritten( int ) ), SLOT( bytesWritten( int ) ) );
+ connect( this, SIGNAL( readyRead() ), SLOT( readyRead() ) );
+
+ gzipProc = new QProcess( this, "gzipProc" );
+ gzipProc->setCommunication( QProcess::Stdin | QProcess::Stdout );
+
+ createTargzProc = new QProcess( QString("tar"), this, "createTargzProc");
+ createTargzProc->setCommunication( QProcess::Stdout );
+ createTargzProc->setWorkingDirectory( QDir::rootDirPath() );
+ connect( createTargzProc, SIGNAL( processExited() ), SLOT( targzDone() ) );
+
+ QStringList args = "tar";
+ args += "-xv";
+ retrieveTargzProc = new QProcess( args, this, "retrieveTargzProc" );
+ retrieveTargzProc->setCommunication( QProcess::Stdin );
+ retrieveTargzProc->setWorkingDirectory( QDir::rootDirPath() );
+ connect( retrieveTargzProc, SIGNAL( processExited() ),
+ SIGNAL( completed() ) );
+ connect( retrieveTargzProc, SIGNAL( processExited() ),
+ SLOT( extractTarDone() ) );
+}
+
+ServerDTP::~ServerDTP()
+{
+ buf.close();
+ file.close();
+ createTargzProc->kill();
+}
+
+void ServerDTP::extractTarDone()
+{
+ qDebug("extract done");
+ QCopEnvelope e( "QPE/Desktop", "restoreDone(QString)" );
+ e << file.name();
+}
+
+void ServerDTP::connected()
+{
+ // send file mode
+ switch ( mode ) {
+ case SendFile :
+ if ( !file.exists() || !file.open( IO_ReadOnly) ) {
+ emit failed();
+ mode = Idle;
+ return;
+ }
+
+ //qDebug( "Debug: Sending file '%s'", file.name().latin1() );
+
+ bytes_written = 0;
+ if ( file.size() == 0 ) {
+ //make sure it doesn't hang on empty files
+ file.close();
+ emit completed();
+ mode = Idle;
+ } else {
+
+ if( !file.atEnd() ) {
+ QCString s;
+ s.resize( block_size );
+ int bytes = file.readBlock( s.data(), block_size );
+ writeBlock( s.data(), bytes );
+ }
+ }
+ break;
+ case SendGzipFile:
+ if ( createTargzProc->isRunning() ) {
+ // SHOULDN'T GET HERE, BUT DOING A SAFETY CHECK ANYWAY
+ qWarning("Previous tar --gzip process is still running; killing it...");
+ createTargzProc->kill();
+ }
+
+ bytes_written = 0;
+ qDebug("==>start send tar process");
+ if ( !createTargzProc->start() )
+ qWarning("Error starting %s or %s",
+ createTargzProc->arguments().join(" ").latin1(),
+ gzipProc->arguments().join(" ").latin1() );
+ break;
+ case SendBuffer:
+ if ( !buf.open( IO_ReadOnly) ) {
+ emit failed();
+ mode = Idle;
+ return;
+ }
+
+ // qDebug( "Debug: Sending byte array" );
+ bytes_written = 0;
+ while( !buf.atEnd() )
+ putch( buf.getch() );
+ buf.close();
+ break;
+ case RetrieveFile:
+ // retrieve file mode
+ if ( file.exists() && !file.remove() ) {
+ emit failed();
+ mode = Idle;
+ return;
+ }
+
+ if ( !file.open( IO_WriteOnly) ) {
+ emit failed();
+ mode = Idle;
+ return;
+ }
+ // qDebug( "Debug: Retrieving file %s", file.name().latin1() );
+ break;
+ case RetrieveGzipFile:
+ qDebug("=-> starting tar process to receive .tgz file");
+ break;
+ case RetrieveBuffer:
+ // retrieve buffer mode
+ if ( !buf.open( IO_WriteOnly) ) {
+ emit failed();
+ mode = Idle;
+ return;
+ }
+ // qDebug( "Debug: Retrieving byte array" );
+ break;
+ case Idle:
+ qDebug("connection established but mode set to Idle; BUG!");
+ break;
+ }
+}
+
+void ServerDTP::connectionClosed()
+{
+ //qDebug( "Debug: Data connection closed %ld bytes written", bytes_written );
+
+ // send file mode
+ if ( SendFile == mode ) {
+ if ( bytes_written == file.size() )
+ emit completed();
+ else
+ emit failed();
+ }
+
+ // send buffer mode
+ else if ( SendBuffer == mode ) {
+ if ( bytes_written == buf.size() )
+ emit completed();
+ else
+ emit failed();
+ }
+
+ // retrieve file mode
+ else if ( RetrieveFile == mode ) {
+ file.close();
+ emit completed();
+ }
+
+ else if ( RetrieveGzipFile == mode ) {
+ qDebug("Done writing ungzip file; closing input");
+ gzipProc->flushStdin();
+ gzipProc->closeStdin();
+ }
+
+ // retrieve buffer mode
+ else if ( RetrieveBuffer == mode ) {
+ buf.close();
+ emit completed();
+ }
+
+ mode = Idle;
+}
+
+void ServerDTP::bytesWritten( int bytes )
+{
+ bytes_written += bytes;
+
+ // send file mode
+ if ( SendFile == mode ) {
+
+ if ( bytes_written == file.size() ) {
+ // qDebug( "Debug: Sending complete: %d bytes", file.size() );
+ file.close();
+ emit completed();
+ mode = Idle;
+ }
+ else if( !file.atEnd() ) {
+ QCString s;
+ s.resize( block_size );
+ int bytes = file.readBlock( s.data(), block_size );
+ writeBlock( s.data(), bytes );
+ }
+ }
+
+ // send buffer mode
+ if ( SendBuffer == mode ) {
+
+ if ( bytes_written == buf.size() ) {
+ // qDebug( "Debug: Sending complete: %d bytes", buf.size() );
+ emit completed();
+ mode = Idle;
+ }
+ }
+}
+
+void ServerDTP::readyRead()
+{
+ // retrieve file mode
+ if ( RetrieveFile == mode ) {
+ QCString s;
+ s.resize( bytesAvailable() );
+ readBlock( s.data(), bytesAvailable() );
+ file.writeBlock( s.data(), s.size() );
+ }
+ else if ( RetrieveGzipFile == mode ) {
+ if ( !gzipProc->isRunning() )
+ gzipProc->start();
+
+ QByteArray s;
+ s.resize( bytesAvailable() );
+ readBlock( s.data(), bytesAvailable() );
+ gzipProc->writeToStdin( s );
+ qDebug("wrote %d bytes to ungzip ", s.size() );
+ }
+ // retrieve buffer mode
+ else if ( RetrieveBuffer == mode ) {
+ QCString s;
+ s.resize( bytesAvailable() );
+ readBlock( s.data(), bytesAvailable() );
+ buf.writeBlock( s.data(), s.size() );
+ }
+}
+
+void ServerDTP::writeTargzBlock()
+{
+ QByteArray block = gzipProc->readStdout();
+ writeBlock( block.data(), block.size() );
+ qDebug("writeTargzBlock %d", block.size());
+ if ( !createTargzProc->isRunning() ) {
+ qDebug("tar and gzip done");
+ emit completed();
+ mode = Idle;
+ disconnect( gzipProc, SIGNAL( readyReadStdout() ),
+ this, SLOT( writeTargzBlock() ) );
+ }
+}
+
+void ServerDTP::targzDone()
+{
+ //qDebug("targz done");
+ disconnect( createTargzProc, SIGNAL( readyReadStdout() ),
+ this, SLOT( gzipTarBlock() ) );
+ gzipProc->closeStdin();
+}
+
+void ServerDTP::gzipTarBlock()
+{
+ //qDebug("gzipTarBlock");
+ if ( !gzipProc->isRunning() ) {
+ //qDebug("auto start gzip proc");
+ gzipProc->start();
+ }
+ gzipProc->writeToStdin( createTargzProc->readStdout() );
+}
+
+void ServerDTP::sendFile( const QString fn, const QHostAddress& host, Q_UINT16 port )
+{
+ file.setName( fn );
+ mode = SendFile;
+ connectToHost( host.toString(), port );
+}
+
+void ServerDTP::sendFile( const QString fn )
+{
+ file.setName( fn );
+ mode = SendFile;
+}
+
+void ServerDTP::sendGzipFile( const QString &fn,
+ const QStringList &archiveTargets,
+ const QHostAddress& host, Q_UINT16 port )
+{
+ sendGzipFile( fn, archiveTargets );
+ connectToHost( host.toString(), port );
+}
+
+void ServerDTP::sendGzipFile( const QString &fn,
+ const QStringList &archiveTargets )
+{
+ mode = SendGzipFile;
+ file.setName( fn );
+
+ QStringList args = "tar";
+ args += "-cv";
+ args += archiveTargets;
+ qDebug("sendGzipFile %s", args.join(" ").latin1() );
+ createTargzProc->setArguments( args );
+ connect( createTargzProc,
+ SIGNAL( readyReadStdout() ), SLOT( gzipTarBlock() ) );
+
+ gzipProc->setArguments( "gzip" );
+ connect( gzipProc, SIGNAL( readyReadStdout() ),
+ SLOT( writeTargzBlock() ) );
+}
+
+void ServerDTP::gunzipDone()
+{
+ qDebug("gunzipDone");
+ disconnect( gzipProc, SIGNAL( processExited() ),
+ this, SLOT( gunzipDone() ) );
+ retrieveTargzProc->closeStdin();
+ disconnect( gzipProc, SIGNAL( readyReadStdout() ),
+ this, SLOT( tarExtractBlock() ) );
+}
+
+void ServerDTP::tarExtractBlock()
+{
+ qDebug("ungzipTarBlock");
+ if ( !retrieveTargzProc->isRunning() ) {
+ qDebug("auto start ungzip proc");
+ if ( !retrieveTargzProc->start() )
+ qWarning(" failed to start tar -x process");
+ }
+ retrieveTargzProc->writeToStdin( gzipProc->readStdout() );
+}
+
+
+void ServerDTP::retrieveFile( const QString fn, const QHostAddress& host, Q_UINT16 port )
+{
+ file.setName( fn );
+ mode = RetrieveFile;
+ connectToHost( host.toString(), port );
+}
+
+void ServerDTP::retrieveFile( const QString fn )
+{
+ file.setName( fn );
+ mode = RetrieveFile;
+}
+
+void ServerDTP::retrieveGzipFile( const QString &fn )
+{
+ qDebug("retrieveGzipFile %s", fn.latin1());
+ file.setName( fn );
+ mode = RetrieveGzipFile;
+
+ gzipProc->setArguments( "gunzip" );
+ connect( gzipProc, SIGNAL( readyReadStdout() ),
+ SLOT( tarExtractBlock() ) );
+ connect( gzipProc, SIGNAL( processExited() ),
+ SLOT( gunzipDone() ) );
+}
+
+void ServerDTP::retrieveGzipFile( const QString &fn, const QHostAddress& host, Q_UINT16 port )
+{
+ retrieveGzipFile( fn );
+ connectToHost( host.toString(), port );
+}
+
+void ServerDTP::sendByteArray( const QByteArray& array, const QHostAddress& host, Q_UINT16 port )
+{
+ buf.setBuffer( array );
+ mode = SendBuffer;
+ connectToHost( host.toString(), port );
+}
+
+void ServerDTP::sendByteArray( const QByteArray& array )
+{
+ buf.setBuffer( array );
+ mode = SendBuffer;
+}
+
+void ServerDTP::retrieveByteArray( const QHostAddress& host, Q_UINT16 port )
+{
+ buf.setBuffer( QByteArray() );
+ mode = RetrieveBuffer;
+ connectToHost( host.toString(), port );
+}
+
+void ServerDTP::retrieveByteArray()
+{
+ buf.setBuffer( QByteArray() );
+ mode = RetrieveBuffer;
+}
+
+void ServerDTP::setSocket( int socket )
+{
+ QSocket::setSocket( socket );
+ connected();
+}
+
diff --git a/core/launcher/transferserver.h b/core/launcher/transferserver.h
new file mode 100644
index 0000000..076e460
--- a/dev/null
+++ b/core/launcher/transferserver.h
@@ -0,0 +1,168 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qserversocket.h>
+#include <qsocket.h>
+#include <qdir.h>
+#include <qfile.h>
+#include <qbuffer.h>
+
+class QFileInfo;
+class QProcess;
+class TransferServer : public QServerSocket
+{
+ Q_OBJECT
+
+public:
+ TransferServer( Q_UINT16 port, QObject *parent = 0, const char* name = 0 );
+ virtual ~TransferServer();
+
+ void newConnection( int socket );
+};
+
+
+class ServerDTP : public QSocket
+{
+ Q_OBJECT
+
+public:
+ ServerDTP( QObject *parent = 0, const char* name = 0 );
+ ~ServerDTP();
+
+ enum Mode{ Idle = 0, SendFile, SendGzipFile, SendBuffer,
+ RetrieveFile, RetrieveGzipFile, RetrieveBuffer };
+
+ void sendFile( const QString fn );
+ void sendFile( const QString fn, const QHostAddress& host, Q_UINT16 port );
+ void sendGzipFile( const QString &fn, const QStringList &archiveTargets );
+ void sendGzipFile( const QString &fn, const QStringList &archiveTargets,
+ const QHostAddress& host, Q_UINT16 port );
+ void sendByteArray( const QByteArray& array );
+ void sendByteArray( const QByteArray& array, const QHostAddress& host, Q_UINT16 port );
+
+ void retrieveFile( const QString fn );
+ void retrieveFile( const QString fn, const QHostAddress& host, Q_UINT16 port );
+ void retrieveGzipFile( const QString &fn );
+ void retrieveGzipFile( const QString &fn, const QHostAddress& host, Q_UINT16 port );
+ void retrieveByteArray();
+ void retrieveByteArray( const QHostAddress& host, Q_UINT16 port );
+
+ Mode dtpMode() { return mode; }
+ QByteArray buffer() { return buf.buffer(); }
+
+ void setSocket( int socket );
+
+signals:
+ void completed();
+ void failed();
+
+private slots:
+ void connectionClosed();
+ void connected();
+ void bytesWritten( int bytes );
+ void readyRead();
+ void writeTargzBlock();
+ void targzDone();
+
+ void gzipTarBlock();
+ void tarExtractBlock();
+ void gunzipDone();
+ void extractTarDone();
+
+private:
+
+ unsigned long bytes_written;
+ Mode mode;
+ QFile file;
+ QBuffer buf;
+ QProcess *createTargzProc;
+ QProcess *retrieveTargzProc;
+ QProcess *gzipProc;
+};
+
+class ServerSocket : public QServerSocket
+{
+ Q_OBJECT
+
+public:
+ ServerSocket( Q_UINT16 port, QObject *parent = 0, const char* name = 0 )
+ : QServerSocket( port, 1, parent, name ) {}
+
+ void newConnection( int socket ) { emit newIncomming( socket ); }
+signals:
+ void newIncomming( int socket );
+};
+
+class ServerPI : public QSocket
+{
+ Q_OBJECT
+
+ enum State { Connected, Wait_USER, Wait_PASS, Ready, Forbidden };
+ enum Transfer { SendFile = 0, RetrieveFile = 1, SendByteArray = 2, RetrieveByteArray = 3 };
+
+public:
+ ServerPI( int socket, QObject *parent = 0, const char* name = 0 );
+ virtual ~ServerPI();
+
+protected slots:
+ void read();
+ void send( const QString& msg );
+ void process( const QString& command );
+ void connectionClosed();
+ void dtpCompleted();
+ void dtpFailed();
+ void dtpError( int );
+ void newConnection( int socket );
+
+protected:
+ bool checkUser( const QString& user );
+ bool checkPassword( const QString& pw );
+ bool checkReadFile( const QString& file );
+ bool checkWriteFile( const QString& file );
+ bool parsePort( const QString& pw );
+ bool backupRestoreGzip( const QString &file, QStringList &targets );
+ bool backupRestoreGzip( const QString &file );
+
+ bool sendList( const QString& arg );
+ void sendFile( const QString& file );
+ void retrieveFile( const QString& file );
+
+ QString permissionString( QFileInfo *info );
+ QString fileListing( QFileInfo *info );
+ QString absFilePath( const QString& file );
+
+ void timerEvent( QTimerEvent *e );
+
+private:
+ State state;
+ Q_UINT16 peerport;
+ QHostAddress peeraddress;
+ bool passiv;
+ bool wait[4];
+ ServerDTP *dtp;
+ ServerSocket *serversocket;
+ QString waitfile;
+ QDir directory;
+ QByteArray waitarray;
+ QString renameFrom;
+ QString lastCommand;
+ int waitsocket;
+};
+
+bool accessAuthorized(QHostAddress peeraddress);
diff --git a/core/launcher/wait.cpp b/core/launcher/wait.cpp
new file mode 100644
index 0000000..059e6f1
--- a/dev/null
+++ b/core/launcher/wait.cpp
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "wait.h"
+
+#include <qpe/resource.h>
+
+#include <qwidget.h>
+#include <qpixmap.h>
+#include <qpainter.h>
+
+
+Wait *lastWaitObject = NULL;
+
+
+Wait::Wait( QWidget *parent ) : QWidget( parent ),
+ pm( Resource::loadPixmap( "wait" ) ), waiting( FALSE )
+{
+ setFixedSize( pm.size() );
+ lastWaitObject = this;
+ hide();
+}
+
+
+Wait *Wait::getWaitObject()
+{
+ return lastWaitObject;
+}
+
+
+void Wait::setWaiting( bool w )
+{
+ waiting = w;
+ if ( w )
+ show();
+ else
+ hide();
+}
+
+
+void Wait::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+ p.drawPixmap( 0, 0, pm );
+}
+
+
diff --git a/core/launcher/wait.h b/core/launcher/wait.h
new file mode 100644
index 0000000..519b654
--- a/dev/null
+++ b/core/launcher/wait.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __WAIT_H__
+#define __WAIT_H__
+
+#include <qpe/resource.h>
+
+#include <qwidget.h>
+#include <qpixmap.h>
+#include <qpainter.h>
+
+
+class Wait : public QWidget
+{
+public:
+ Wait( QWidget *parent );
+ void setWaiting( bool w );
+ void paintEvent( QPaintEvent * );
+ static Wait *getWaitObject();
+private:
+ QPixmap pm;
+ bool waiting;
+};
+
+
+#endif // __WAIT_H__
+
diff --git a/core/multimedia/opieplayer/.cvsignore b/core/multimedia/opieplayer/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/core/multimedia/opieplayer/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/core/multimedia/opieplayer/Makefile.in b/core/multimedia/opieplayer/Makefile.in
new file mode 100644
index 0000000..5fca66e
--- a/dev/null
+++ b/core/multimedia/opieplayer/Makefile.in
@@ -0,0 +1,280 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) -DQCONFIG=\"qpe\"
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) -DQCONFIG=\"qpe\"
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe -lpthread $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = mpegplayer
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = loopcontrol.h \
+ mediaplayerplugininterface.h \
+ playlistselection.h \
+ mediaplayerstate.h \
+ videowidget.h \
+ audiowidget.h \
+ playlistwidget.h \
+ mediaplayer.h \
+ audiodevice.h
+SOURCES = main.cpp \
+ loopcontrol.cpp \
+ playlistselection.cpp \
+ mediaplayerstate.cpp \
+ videowidget.cpp \
+ audiowidget.cpp \
+ playlistwidget.cpp \
+ mediaplayer.cpp \
+ audiodevice.cpp
+OBJECTS = main.o \
+ loopcontrol.o \
+ playlistselection.o \
+ mediaplayerstate.o \
+ videowidget.o \
+ audiowidget.o \
+ playlistwidget.o \
+ mediaplayer.o \
+ audiodevice.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_loopcontrol.cpp \
+ moc_playlistselection.cpp \
+ moc_mediaplayerstate.cpp \
+ moc_videowidget.cpp \
+ moc_audiowidget.cpp \
+ moc_playlistwidget.cpp \
+ moc_mediaplayer.cpp \
+ moc_audiodevice.cpp
+OBJMOC = moc_loopcontrol.o \
+ moc_playlistselection.o \
+ moc_mediaplayerstate.o \
+ moc_videowidget.o \
+ moc_audiowidget.o \
+ moc_playlistwidget.o \
+ moc_mediaplayer.o \
+ moc_audiodevice.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake mpegplayer.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ mediaplayerstate.h \
+ playlistwidget.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ audiowidget.h \
+ videowidget.h \
+ loopcontrol.h \
+ mediaplayer.h \
+ $(QPEDIR)/include/qpe/qlibrary.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ mediaplayerplugininterface.h
+
+loopcontrol.o: loopcontrol.cpp \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ loopcontrol.h \
+ videowidget.h \
+ audiodevice.h \
+ mediaplayerplugininterface.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ mediaplayerstate.h
+
+playlistselection.o: playlistselection.cpp \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ playlistselection.h
+
+mediaplayerstate.o: mediaplayerstate.cpp \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qlibrary.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ $(QPEDIR)/include/qpe/config.h \
+ mediaplayerplugininterface.h \
+ mediaplayerstate.h \
+ libmad/libmadpluginimpl.h \
+ libmpeg3/libmpeg3pluginimpl.h \
+ wavplugin/wavpluginimpl.h
+
+videowidget.o: videowidget.cpp \
+ $(QPEDIR)/include/qpe/resource.h \
+ videowidget.h \
+ mediaplayerplugininterface.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ mediaplayerstate.h
+
+audiowidget.o: audiowidget.cpp \
+ $(QPEDIR)/include/qpe/resource.h \
+ audiowidget.h \
+ mediaplayerstate.h
+
+playlistwidget.o: playlistwidget.cpp \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/fileselector.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ playlistselection.h \
+ playlistwidget.h \
+ mediaplayerstate.h
+
+mediaplayer.o: mediaplayer.cpp \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qlibrary.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ mediaplayer.h \
+ mediaplayerplugininterface.h \
+ playlistwidget.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ audiowidget.h \
+ loopcontrol.h \
+ audiodevice.h \
+ mediaplayerstate.h
+
+audiodevice.o: audiodevice.cpp \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/config.h \
+ audiodevice.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+moc_loopcontrol.o: moc_loopcontrol.cpp \
+ loopcontrol.h
+
+moc_playlistselection.o: moc_playlistselection.cpp \
+ playlistselection.h \
+ $(QPEDIR)/include/qpe/applnk.h
+
+moc_mediaplayerstate.o: moc_mediaplayerstate.cpp \
+ mediaplayerstate.h
+
+moc_videowidget.o: moc_videowidget.cpp \
+ videowidget.h
+
+moc_audiowidget.o: moc_audiowidget.cpp \
+ audiowidget.h
+
+moc_playlistwidget.o: moc_playlistwidget.cpp \
+ playlistwidget.h \
+ $(QPEDIR)/include/qpe/applnk.h
+
+moc_mediaplayer.o: moc_mediaplayer.cpp \
+ mediaplayer.h \
+ $(QPEDIR)/include/qpe/qlibrary.h \
+ $(QPEDIR)/include/qpe/qcom.h \
+ $(QPEDIR)/include/qpe/quuid.h \
+ mediaplayerplugininterface.h
+
+moc_audiodevice.o: moc_audiodevice.cpp \
+ audiodevice.h
+
+moc_loopcontrol.cpp: loopcontrol.h
+ $(MOC) loopcontrol.h -o moc_loopcontrol.cpp
+
+moc_playlistselection.cpp: playlistselection.h
+ $(MOC) playlistselection.h -o moc_playlistselection.cpp
+
+moc_mediaplayerstate.cpp: mediaplayerstate.h
+ $(MOC) mediaplayerstate.h -o moc_mediaplayerstate.cpp
+
+moc_videowidget.cpp: videowidget.h
+ $(MOC) videowidget.h -o moc_videowidget.cpp
+
+moc_audiowidget.cpp: audiowidget.h
+ $(MOC) audiowidget.h -o moc_audiowidget.cpp
+
+moc_playlistwidget.cpp: playlistwidget.h
+ $(MOC) playlistwidget.h -o moc_playlistwidget.cpp
+
+moc_mediaplayer.cpp: mediaplayer.h
+ $(MOC) mediaplayer.h -o moc_mediaplayer.cpp
+
+moc_audiodevice.cpp: audiodevice.h
+ $(MOC) audiodevice.h -o moc_audiodevice.cpp
+
+
diff --git a/core/multimedia/opieplayer/audiodevice.cpp b/core/multimedia/opieplayer/audiodevice.cpp
new file mode 100644
index 0000000..8861015
--- a/dev/null
+++ b/core/multimedia/opieplayer/audiodevice.cpp
@@ -0,0 +1,386 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <stdlib.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include "audiodevice.h"
+
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+#include "qpe/qcopenvelope_qws.h"
+#endif
+
+#ifdef Q_WS_WIN
+#include <windows.h>
+#include <mmsystem.h>
+#include <mmreg.h>
+#endif
+
+#if defined(Q_WS_X11) || defined(Q_WS_QWS)
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/soundcard.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+
+#if defined(Q_OS_WIN32)
+static const int expectedBytesPerMilliSecond = 2 * 2 * 44000 / 1000;
+static const int timerResolutionMilliSeconds = 30;
+static const int sound_fragment_bytes = timerResolutionMilliSeconds * expectedBytesPerMilliSecond;
+#else
+# if defined(QT_QWS_IPAQ)
+static const int sound_fragment_shift = 14;
+# else
+static const int sound_fragment_shift = 16;
+# endif
+static const int sound_fragment_bytes = (1<<sound_fragment_shift);
+#endif
+
+
+class AudioDevicePrivate {
+public:
+ int handle;
+ unsigned int frequency;
+ unsigned int channels;
+ unsigned int bytesPerSample;
+ unsigned int bufferSize;
+#ifndef Q_OS_WIN32
+ bool can_GETOSPACE;
+ char* unwrittenBuffer;
+ unsigned int unwritten;
+#endif
+
+ static int dspFd;
+ static bool muted;
+ static unsigned int leftVolume;
+ static unsigned int rightVolume;
+};
+
+
+#ifdef Q_WS_QWS
+// This is for keeping the device open in-between playing files when
+// the device makes clicks and it starts to drive you insane! :)
+// Best to have the device not open when not using it though
+//#define KEEP_DEVICE_OPEN
+#endif
+
+
+int AudioDevicePrivate::dspFd = 0;
+bool AudioDevicePrivate::muted = FALSE;
+unsigned int AudioDevicePrivate::leftVolume = 0;
+unsigned int AudioDevicePrivate::rightVolume = 0;
+
+
+void AudioDevice::getVolume( unsigned int& leftVolume, unsigned int& rightVolume, bool &muted ) {
+ muted = AudioDevicePrivate::muted;
+ unsigned int volume;
+#ifdef Q_OS_WIN32
+ HWAVEOUT handle;
+ WAVEFORMATEX formatData;
+ formatData.cbSize = sizeof(WAVEFORMATEX);
+ formatData.wFormatTag = WAVE_FORMAT_PCM;
+ formatData.nAvgBytesPerSec = 4 * 44000;
+ formatData.nBlockAlign = 4;
+ formatData.nChannels = 2;
+ formatData.nSamplesPerSec = 44000;
+ formatData.wBitsPerSample = 16;
+ waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL);
+ if ( waveOutGetVolume( handle, (LPDWORD)&volume ) )
+ qDebug( "get volume of audio device failed" );
+ waveOutClose( handle );
+ leftVolume = volume & 0xFFFF;
+ rightVolume = volume >> 16;
+#else
+ int mixerHandle = open( "/dev/mixer", O_RDWR );
+ if ( mixerHandle >= 0 ) {
+ ioctl( mixerHandle, MIXER_READ(0), &volume );
+ close( mixerHandle );
+ } else
+ qDebug( "get volume of audio device failed" );
+ leftVolume = ((volume & 0x00FF) << 16) / 101;
+ rightVolume = ((volume & 0xFF00) << 8) / 101;
+#endif
+}
+
+
+void AudioDevice::setVolume( unsigned int leftVolume, unsigned int rightVolume, bool muted ) {
+ AudioDevicePrivate::muted = muted;
+ if ( muted ) {
+ AudioDevicePrivate::leftVolume = leftVolume;
+ AudioDevicePrivate::rightVolume = rightVolume;
+ leftVolume = 0;
+ rightVolume = 0;
+ } else {
+ leftVolume = ( (int) leftVolume < 0 ) ? 0 : (( leftVolume > 0xFFFF ) ? 0xFFFF : leftVolume );
+ rightVolume = ( (int)rightVolume < 0 ) ? 0 : (( rightVolume > 0xFFFF ) ? 0xFFFF : rightVolume );
+ }
+#ifdef Q_OS_WIN32
+ HWAVEOUT handle;
+ WAVEFORMATEX formatData;
+ formatData.cbSize = sizeof(WAVEFORMATEX);
+ formatData.wFormatTag = WAVE_FORMAT_PCM;
+ formatData.nAvgBytesPerSec = 4 * 44000;
+ formatData.nBlockAlign = 4;
+ formatData.nChannels = 2;
+ formatData.nSamplesPerSec = 44000;
+ formatData.wBitsPerSample = 16;
+ waveOutOpen(&handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL);
+ unsigned int volume = (rightVolume << 16) | leftVolume;
+ if ( waveOutSetVolume( handle, volume ) )
+ qDebug( "set volume of audio device failed" );
+ waveOutClose( handle );
+#else
+ // Volume can be from 0 to 100 which is 101 distinct values
+ unsigned int rV = (rightVolume * 101) >> 16;
+
+# if 0
+ unsigned int lV = (leftVolume * 101) >> 16;
+ unsigned int volume = ((rV << 8) & 0xFF00) | (lV & 0x00FF);
+ int mixerHandle = 0;
+ if ( ( mixerHandle = open( "/dev/mixer", O_RDWR ) ) >= 0 ) {
+ ioctl( mixerHandle, MIXER_WRITE(0), &volume );
+ close( mixerHandle );
+ } else
+ qDebug( "set volume of audio device failed" );
+# else
+ // This is the way this has to be done now I guess, doesn't allow for
+ // independant right and left channel setting, or setting for different outputs
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ cfg.writeEntry("Volume",(int)rV);
+# endif
+
+#endif
+// qDebug( "setting volume to: 0x%x", volume );
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+ // Send notification that the volume has changed
+ QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << muted;
+#endif
+}
+
+
+
+
+AudioDevice::AudioDevice( unsigned int f, unsigned int chs, unsigned int bps ) {
+ d = new AudioDevicePrivate;
+ d->frequency = f;
+ d->channels = chs;
+ d->bytesPerSample = bps;
+
+ connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( volumeChanged(bool) ) );
+
+#ifdef Q_OS_WIN32
+ UINT result;
+ WAVEFORMATEX formatData;
+ formatData.cbSize = sizeof(WAVEFORMATEX);
+/*
+ // Other possible formats windows supports
+ formatData.wFormatTag = WAVE_FORMAT_MPEG;
+ formatData.wFormatTag = WAVE_FORMAT_MPEGLAYER3;
+ formatData.wFormatTag = WAVE_FORMAT_ADPCM;
+*/
+ formatData.wFormatTag = WAVE_FORMAT_PCM;
+ formatData.nAvgBytesPerSec = bps * chs * f;
+ formatData.nBlockAlign = bps * chs;
+ formatData.nChannels = chs;
+ formatData.nSamplesPerSec = f;
+ formatData.wBitsPerSample = bps * 8;
+ // Open a waveform device for output
+ if (result = waveOutOpen((LPHWAVEOUT)&d->handle, WAVE_MAPPER, &formatData, 0L, 0L, CALLBACK_NULL)) {
+ QString errorMsg = "error opening audio device.\nReason: %i - ";
+ switch (result) {
+ case MMSYSERR_ALLOCATED: errorMsg += "Specified resource is already allocated."; break;
+ case MMSYSERR_BADDEVICEID: errorMsg += "Specified device identifier is out of range."; break;
+ case MMSYSERR_NODRIVER: errorMsg += "No device driver is present."; break;
+ case MMSYSERR_NOMEM: errorMsg += "Unable to allocate or lock memory."; break;
+ case WAVERR_BADFORMAT: errorMsg += "Attempted to open with an unsupported waveform-audio format."; break;
+ case WAVERR_SYNC: errorMsg += "The device is synchronous but waveOutOpen was called without using the WAVE_ALLOWSYNC flag."; break;
+ default: errorMsg += "Undefined error"; break;
+ }
+ qDebug( errorMsg, result );
+ }
+
+ d->bufferSize = sound_fragment_bytes;
+#else
+
+ int fragments = 0x10000 * 8 + sound_fragment_shift;
+ int format = AFMT_S16_LE;
+ int capabilities = 0;
+
+#ifdef KEEP_DEVICE_OPEN
+ if ( AudioDevicePrivate::dspFd == 0 ) {
+#endif
+ if ( ( d->handle = ::open( "/dev/dsp", O_WRONLY ) ) < 0 ) {
+ qDebug( "error opening audio device /dev/dsp, sending data to /dev/null instead" );
+ d->handle = ::open( "/dev/null", O_WRONLY );
+ }
+#ifdef KEEP_DEVICE_OPEN
+ AudioDevicePrivate::dspFd = d->handle;
+ } else {
+ d->handle = AudioDevicePrivate::dspFd;
+ }
+#endif
+
+ ioctl( d->handle, SNDCTL_DSP_GETCAPS, &capabilities );
+ ioctl( d->handle, SNDCTL_DSP_SETFRAGMENT, &fragments );
+ ioctl( d->handle, SNDCTL_DSP_SETFMT, &format );
+ ioctl( d->handle, SNDCTL_DSP_SPEED, &d->frequency );
+ if ( ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels ) == -1 ) {
+ d->channels = ( d->channels == 1 ) ? 2 : d->channels;
+ ioctl( d->handle, SNDCTL_DSP_CHANNELS, &d->channels );
+ }
+
+ d->bufferSize = sound_fragment_bytes;
+ d->unwrittenBuffer = new char[d->bufferSize];
+ d->unwritten = 0;
+ d->can_GETOSPACE = TRUE; // until we find otherwise
+
+ //if ( chs != d->channels ) qDebug( "Wanted %d, got %d channels", chs, d->channels );
+ //if ( f != d->frequency ) qDebug( "wanted %dHz, got %dHz", f, d->frequency );
+ //if ( capabilities & DSP_CAP_BATCH ) qDebug( "Sound card has local buffer" );
+ //if ( capabilities & DSP_CAP_REALTIME )qDebug( "Sound card has realtime sync" );
+ //if ( capabilities & DSP_CAP_TRIGGER ) qDebug( "Sound card has precise trigger" );
+ //if ( capabilities & DSP_CAP_MMAP ) qDebug( "Sound card can mmap" );
+#endif
+}
+
+
+AudioDevice::~AudioDevice() {
+#ifdef Q_OS_WIN32
+ waveOutClose( (HWAVEOUT)d->handle );
+#else
+# ifndef KEEP_DEVICE_OPEN
+ close( d->handle ); // Now it should be safe to shut the handle
+# endif
+ delete d->unwrittenBuffer;
+ delete d;
+#endif
+}
+
+
+void AudioDevice::volumeChanged( bool muted )
+{
+ AudioDevicePrivate::muted = muted;
+}
+
+
+void AudioDevice::write( char *buffer, unsigned int length )
+{
+#ifdef Q_OS_WIN32
+ // returns immediately and (to be implemented) emits completedIO() when finished writing
+ WAVEHDR *lpWaveHdr = (WAVEHDR *)malloc( sizeof(WAVEHDR) );
+ // maybe the buffer should be copied so that this fool proof, but its a performance hit
+ lpWaveHdr->lpData = buffer;
+ lpWaveHdr->dwBufferLength = length;
+ lpWaveHdr->dwFlags = 0L;
+ lpWaveHdr->dwLoops = 0L;
+ waveOutPrepareHeader( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) );
+ // waveOutWrite returns immediately. the data is sent in the background.
+ if ( waveOutWrite( (HWAVEOUT)d->handle, lpWaveHdr, sizeof(WAVEHDR) ) )
+ qDebug( "failed to write block to audio device" );
+ // emit completedIO();
+#else
+ int t = ::write( d->handle, buffer, length );
+ if ( t<0 ) t = 0;
+ if ( t != (int)length) {
+ qDebug("Ahhh!! memcpys 1");
+ memcpy(d->unwrittenBuffer,buffer+t,length-t);
+ d->unwritten = length-t;
+ }
+#endif
+}
+
+
+unsigned int AudioDevice::channels() const
+{
+ return d->channels;
+}
+
+
+unsigned int AudioDevice::frequency() const
+{
+ return d->frequency;
+}
+
+
+unsigned int AudioDevice::bytesPerSample() const
+{
+ return d->bytesPerSample;
+}
+
+
+unsigned int AudioDevice::bufferSize() const
+{
+ return d->bufferSize;
+}
+
+unsigned int AudioDevice::canWrite() const
+{
+#ifdef Q_OS_WIN32
+ return bufferSize(); // Any better?
+#else
+ audio_buf_info info;
+ if ( d->can_GETOSPACE && ioctl(d->handle,SNDCTL_DSP_GETOSPACE,&info) ) {
+ d->can_GETOSPACE = FALSE;
+ fcntl( d->handle, F_SETFL, O_NONBLOCK );
+ }
+ if ( d->can_GETOSPACE ) {
+ int t = info.fragments * sound_fragment_bytes;
+ return QMIN(t,(int)bufferSize());
+ } else {
+ if ( d->unwritten ) {
+ int t = ::write( d->handle, d->unwrittenBuffer, d->unwritten );
+ if ( t<0 ) t = 0;
+ if ( (unsigned)t!=d->unwritten ) {
+ memcpy(d->unwrittenBuffer,d->unwrittenBuffer+t,d->unwritten-t);
+ d->unwritten -= t;
+ } else {
+ d->unwritten = 0;
+ }
+ }
+ if ( d->unwritten )
+ return 0;
+ else
+ return d->bufferSize;
+ }
+#endif
+}
+
+
+int AudioDevice::bytesWritten() {
+#ifdef Q_OS_WIN32
+ MMTIME pmmt = { TIME_BYTES, 0 };
+ if ( ( waveOutGetPosition( (HWAVEOUT)d->handle, &pmmt, sizeof(MMTIME) ) != MMSYSERR_NOERROR ) || ( pmmt.wType != TIME_BYTES ) ) {
+ qDebug( "failed to get audio device position" );
+ return -1;
+ }
+ return pmmt.u.cb;
+#else
+ int buffered = 0;
+ if ( ioctl( d->handle, SNDCTL_DSP_GETODELAY, &buffered ) ) {
+ qDebug( "failed to get audio device position" );
+ return -1;
+ }
+ return buffered;
+#endif
+}
+
diff --git a/core/multimedia/opieplayer/audiodevice.h b/core/multimedia/opieplayer/audiodevice.h
new file mode 100644
index 0000000..928f134
--- a/dev/null
+++ b/core/multimedia/opieplayer/audiodevice.h
@@ -0,0 +1,71 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef AUDIODEVICE_H
+#define AUDIODEVICE_H
+
+
+#include <qobject.h>
+
+
+class AudioDevicePrivate;
+
+
+class AudioDevice : public QObject {
+ Q_OBJECT
+public:
+ AudioDevice( unsigned int freq = 44000, unsigned int channels = 2, unsigned int bytesPerSample = 2 );
+ ~AudioDevice();
+
+ unsigned int canWrite() const;
+ void write( char *buffer, unsigned int length );
+ int bytesWritten();
+
+ unsigned int channels() const;
+ unsigned int frequency() const;
+ unsigned int bytesPerSample() const;
+ unsigned int bufferSize() const;
+
+ // Each volume level is from 0 to 0xFFFF
+ static void getVolume( unsigned int& left, unsigned int& right, bool& muted );
+ static void setVolume( unsigned int left, unsigned int right, bool muted );
+
+ static unsigned int leftVolume() { bool muted; unsigned int l, r; getVolume( l, r, muted ); return l; }
+ static unsigned int rightVolume() { bool muted; unsigned int l, r; getVolume( l, r, muted ); return r; }
+ static bool isMuted() { bool muted; unsigned int l, r; getVolume( l, r, muted ); return muted; }
+
+ static void increaseVolume() { setVolume( leftVolume() + 1968, rightVolume() + 1968, isMuted() ); }
+ static void decreaseVolume() { setVolume( leftVolume() - 1966, rightVolume() - 1966, isMuted() ); }
+
+public slots:
+ // Convinence functions derived from above functions
+ void setVolume( unsigned int level ) { setVolume( level, level, isMuted() ); }
+ void mute() { setVolume( leftVolume(), rightVolume(), TRUE ); }
+ void volumeChanged( bool muted );
+
+signals:
+ void completedIO();
+
+private:
+ AudioDevicePrivate *d;
+};
+
+
+#endif // AUDIODEVICE_H
+
diff --git a/core/multimedia/opieplayer/audiowidget.cpp b/core/multimedia/opieplayer/audiowidget.cpp
new file mode 100644
index 0000000..243c58c
--- a/dev/null
+++ b/core/multimedia/opieplayer/audiowidget.cpp
@@ -0,0 +1,277 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qwidget.h>
+#include <qpixmap.h>
+#include <qbutton.h>
+#include <qpainter.h>
+#include <qframe.h>
+#include <qpe/resource.h>
+#include "audiowidget.h"
+#include "mediaplayerstate.h"
+
+
+extern MediaPlayerState *mediaPlayerState;
+
+
+static const int xo = -2; // movable x offset
+static const int yo = 22; // movable y offset
+
+
+struct MediaButton {
+ int xPos, yPos;
+ int color;
+ bool isToggle, isBig, isHeld, isDown;
+};
+
+
+// Layout information for the audioButtons (and if it is a toggle button or not)
+MediaButton audioButtons[] = {
+ { 3*30-15+xo, 3*30-13+yo, 0, TRUE, TRUE, FALSE, FALSE }, // play
+ { 1*30+xo, 5*30+yo, 2, FALSE, FALSE, FALSE, FALSE }, // stop
+ { 5*30+xo, 5*30+yo, 2, TRUE, FALSE, FALSE, FALSE }, // pause
+ { 6*30-5+xo, 3*30+yo, 1, FALSE, FALSE, FALSE, FALSE }, // next
+ { 0*30+5+xo, 3*30+yo, 1, FALSE, FALSE, FALSE, FALSE }, // previous
+ { 3*30+xo, 0*30+5+yo, 3, FALSE, FALSE, FALSE, FALSE }, // volume up
+ { 3*30+xo, 6*30-5+yo, 3, FALSE, FALSE, FALSE, FALSE }, // volume down
+ { 5*30+xo, 1*30+yo, 0, TRUE, FALSE, FALSE, FALSE }, // repeat/loop
+ { 1*30+xo, 1*30+yo, 0, FALSE, FALSE, FALSE, FALSE } // playlist
+};
+
+
+static const int numButtons = (sizeof(audioButtons)/sizeof(MediaButton));
+
+
+AudioWidget::AudioWidget(QWidget* parent, const char* name, WFlags f) :
+ QWidget( parent, name, f )
+{
+ setCaption( tr("MediaPlayer") );
+ setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) );
+ pixmaps[0] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButtonsAll" ) );
+ pixmaps[1] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButtonsBig" ) );
+ pixmaps[2] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaControls" ) );
+ pixmaps[3] = new QPixmap( Resource::loadPixmap( "mpegplayer/animatedButton" ) );
+
+ songInfo = new Ticker( this );
+ songInfo->setFocusPolicy( QWidget::NoFocus );
+ songInfo->setGeometry( QRect( 7, 3, 220, 20 ) );
+
+ slider = new QSlider( Qt::Horizontal, this );
+ slider->setFixedWidth( 220 );
+ slider->setFixedHeight( 20 );
+ slider->setMinValue( 0 );
+ slider->setMaxValue( 1 );
+ slider->setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) );
+ slider->setFocusPolicy( QWidget::NoFocus );
+ slider->setGeometry( QRect( 7, 262, 220, 20 ) );
+
+ connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
+ connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
+
+ connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) );
+ connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
+ connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
+ connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) );
+ connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) );
+ connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) );
+ connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) );
+
+ // Intialise state
+ setLength( mediaPlayerState->length() );
+ setPosition( mediaPlayerState->position() );
+ setLooping( mediaPlayerState->fullscreen() );
+ setPaused( mediaPlayerState->paused() );
+ setPlaying( mediaPlayerState->playing() );
+
+}
+
+
+AudioWidget::~AudioWidget() {
+ for ( int i = 0; i < 4; i++ )
+ delete pixmaps[i];
+}
+
+
+static bool audioSliderBeingMoved = FALSE;
+
+
+void AudioWidget::sliderPressed() {
+ audioSliderBeingMoved = TRUE;
+}
+
+
+void AudioWidget::sliderReleased() {
+ audioSliderBeingMoved = FALSE;
+ if ( slider->width() == 0 )
+ return;
+ long val = long((double)slider->value() * mediaPlayerState->length() / slider->width());
+ mediaPlayerState->setPosition( val );
+}
+
+
+void AudioWidget::setPosition( long i ) {
+ updateSlider( i, mediaPlayerState->length() );
+}
+
+
+void AudioWidget::setLength( long max ) {
+ updateSlider( mediaPlayerState->position(), max );
+}
+
+
+void AudioWidget::setView( char view ) {
+ if ( view == 'a' ) {
+ startTimer( 150 );
+ showMaximized();
+ } else {
+ killTimers();
+ hide();
+ }
+}
+
+
+void AudioWidget::updateSlider( long i, long max ) {
+ if ( max == 0 )
+ return;
+ // Will flicker too much if we don't do this
+ // Scale to something reasonable
+ int width = slider->width();
+ int val = int((double)i * width / max);
+ if ( !audioSliderBeingMoved ) {
+ if ( slider->value() != val )
+ slider->setValue( val );
+ if ( slider->maxValue() != width )
+ slider->setMaxValue( width );
+ }
+}
+
+
+void AudioWidget::setToggleButton( int i, bool down ) {
+ if ( down != audioButtons[i].isDown )
+ toggleButton( i );
+}
+
+
+void AudioWidget::toggleButton( int i ) {
+ audioButtons[i].isDown = !audioButtons[i].isDown;
+ QPainter p(this);
+ paintButton ( &p, i );
+}
+
+
+void AudioWidget::paintButton( QPainter *p, int i ) {
+ int x = audioButtons[i].xPos;
+ int y = audioButtons[i].yPos;
+ int offset = 22 + 14 * audioButtons[i].isBig + audioButtons[i].isDown;
+ int buttonSize = 64 + audioButtons[i].isBig * (90 - 64);
+ p->drawPixmap( x, y, *pixmaps[audioButtons[i].isBig], buttonSize * (audioButtons[i].isDown + 2 * audioButtons[i].color), 0, buttonSize, buttonSize );
+ p->drawPixmap( x + offset, y + offset, *pixmaps[2], 18 * i, 0, 18, 18 );
+}
+
+
+void AudioWidget::timerEvent( QTimerEvent * ) {
+ static int frame = 0;
+ if ( !mediaPlayerState->paused() && audioButtons[ AudioPlay ].isDown ) {
+ frame = frame >= 7 ? 0 : frame + 1;
+ int x = audioButtons[AudioPlay].xPos;
+ int y = audioButtons[AudioPlay].yPos;
+ QPainter p( this );
+ // Optimize to only draw the little bit of the changing images which is different
+ p.drawPixmap( x + 14, y + 8, *pixmaps[3], 32 * frame, 0, 32, 32 );
+ p.drawPixmap( x + 37, y + 37, *pixmaps[2], 18 * AudioPlay, 0, 6, 3 );
+ }
+}
+
+
+void AudioWidget::mouseMoveEvent( QMouseEvent *event ) {
+ for ( int i = 0; i < numButtons; i++ ) {
+ int size = audioButtons[i].isBig;
+ int x = audioButtons[i].xPos;
+ int y = audioButtons[i].yPos;
+ if ( event->state() == QMouseEvent::LeftButton ) {
+ // The test to see if the mouse click is inside the circular button or not
+ // (compared with the radius squared to avoid a square-root of our distance)
+ int radius = 32 + 13 * size;
+ QPoint center = QPoint( x + radius, y + radius );
+ QPoint dXY = center - event->pos();
+ int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y();
+ bool isOnButton = dist <= (radius * radius);
+// QRect r( x, y, 64 + 22*size, 64 + 22*size );
+// bool isOnButton = r.contains( event->pos() ); // Rectangular Button code
+ if ( isOnButton && !audioButtons[i].isHeld ) {
+ audioButtons[i].isHeld = TRUE;
+ toggleButton(i);
+ switch (i) {
+ case AudioVolumeUp: emit moreClicked(); return;
+ case AudioVolumeDown: emit lessClicked(); return;
+ }
+ } else if ( !isOnButton && audioButtons[i].isHeld ) {
+ audioButtons[i].isHeld = FALSE;
+ toggleButton(i);
+ }
+ } else {
+ if ( audioButtons[i].isHeld ) {
+ audioButtons[i].isHeld = FALSE;
+ if ( !audioButtons[i].isToggle )
+ setToggleButton( i, FALSE );
+ switch (i) {
+ case AudioPlay: mediaPlayerState->setPlaying(audioButtons[i].isDown); return;
+ case AudioStop: mediaPlayerState->setPlaying(FALSE); return;
+ case AudioPause: mediaPlayerState->setPaused(audioButtons[i].isDown); return;
+ case AudioNext: mediaPlayerState->setNext(); return;
+ case AudioPrevious: mediaPlayerState->setPrev(); return;
+ case AudioLoop: mediaPlayerState->setLooping(audioButtons[i].isDown); return;
+ case AudioVolumeUp: emit moreReleased(); return;
+ case AudioVolumeDown: emit lessReleased(); return;
+ case AudioPlayList: mediaPlayerState->setList(); return;
+ }
+ }
+ }
+ }
+}
+
+
+void AudioWidget::mousePressEvent( QMouseEvent *event ) {
+ mouseMoveEvent( event );
+}
+
+
+void AudioWidget::mouseReleaseEvent( QMouseEvent *event ) {
+ mouseMoveEvent( event );
+}
+
+
+void AudioWidget::showEvent( QShowEvent* ) {
+ QMouseEvent event( QEvent::MouseMove, QPoint( 0, 0 ), 0, 0 );
+ mouseMoveEvent( &event );
+}
+
+
+void AudioWidget::closeEvent( QCloseEvent* ) {
+ mediaPlayerState->setList();
+}
+
+
+void AudioWidget::paintEvent( QPaintEvent * ) {
+ QPainter p( this );
+ for ( int i = 0; i < numButtons; i++ )
+ paintButton( &p, i );
+}
+
+
diff --git a/core/multimedia/opieplayer/audiowidget.h b/core/multimedia/opieplayer/audiowidget.h
new file mode 100644
index 0000000..4b82a91
--- a/dev/null
+++ b/core/multimedia/opieplayer/audiowidget.h
@@ -0,0 +1,144 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef AUDIO_WIDGET_H
+#define AUDIO_WIDGET_H
+
+
+#include <qwidget.h>
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qpixmap.h>
+#include <qstring.h>
+#include <qslider.h>
+#include <qframe.h>
+
+
+class QPixmap;
+
+
+enum AudioButtons {
+ AudioPlay,
+ AudioStop,
+ AudioPause,
+ AudioNext,
+ AudioPrevious,
+ AudioVolumeUp,
+ AudioVolumeDown,
+ AudioLoop,
+ AudioPlayList
+};
+
+
+#define USE_DBLBUF
+
+
+class Ticker : public QFrame {
+ Q_OBJECT
+public:
+ Ticker( QWidget* parent=0 ) : QFrame( parent ) {
+ setFrameStyle( WinPanel | Sunken );
+ setText( "No Song" );
+ }
+ ~Ticker() { }
+ void setText( const QString& text ) {
+ pos = 0; // reset it everytime the text is changed
+ scrollText = text;
+ pixelLen = fontMetrics().width( scrollText );
+ killTimers();
+ if ( pixelLen > width() )
+ startTimer( 50 );
+ update();
+ }
+protected:
+ void timerEvent( QTimerEvent * ) {
+ pos = ( pos + 1 > pixelLen ) ? 0 : pos + 1;
+#ifndef USE_DBLBUF
+ scroll( -1, 0, contentsRect() );
+#else
+ repaint( FALSE );
+#endif
+ }
+ void drawContents( QPainter *p ) {
+#ifndef USE_DBLBUF
+ for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen )
+ p->drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText );
+#else
+ // Double buffering code.
+ // Looks like qvfb makes it look like it flickers but I don't think it really is
+ QPixmap pm( width(), height() );
+ pm.fill( colorGroup().base() );
+ QPainter pmp( &pm );
+ for ( int i = 0; i - pos < width() && (i < 1 || pixelLen > width()); i += pixelLen )
+ pmp.drawText( i - pos, 0, INT_MAX, height(), AlignVCenter, scrollText );
+ p->drawPixmap( 0, 0, pm );
+#endif
+ }
+private:
+ QString scrollText;
+ int pos, pixelLen;
+};
+
+
+class AudioWidget : public QWidget {
+ Q_OBJECT
+public:
+ AudioWidget( QWidget* parent=0, const char* name=0, WFlags f=0 );
+ ~AudioWidget();
+ void setTickerText( const QString &text ) { songInfo->setText( text ); }
+
+public slots:
+ void updateSlider( long, long );
+ void sliderPressed( );
+ void sliderReleased( );
+ void setPaused( bool b) { setToggleButton( AudioPause, b ); }
+ void setLooping( bool b) { setToggleButton( AudioLoop, b ); }
+ void setPlaying( bool b) { setToggleButton( AudioPlay, b ); }
+ void setPosition( long );
+ void setLength( long );
+ void setView( char );
+
+signals:
+ void moreClicked();
+ void lessClicked();
+ void moreReleased();
+ void lessReleased();
+ void sliderMoved(long);
+
+protected:
+ void paintEvent( QPaintEvent *pe );
+ void showEvent( QShowEvent *se );
+ void mouseMoveEvent( QMouseEvent *event );
+ void mousePressEvent( QMouseEvent *event );
+ void mouseReleaseEvent( QMouseEvent *event );
+ void timerEvent( QTimerEvent *event );
+ void closeEvent( QCloseEvent *event );
+
+private:
+ void toggleButton( int );
+ void setToggleButton( int, bool );
+ void paintButton( QPainter *p, int i );
+ QPixmap *pixmaps[4];
+ Ticker *songInfo;
+ QSlider *slider;
+};
+
+
+#endif // AUDIO_WIDGET_H
+
diff --git a/core/multimedia/opieplayer/libflash/Makefile.in b/core/multimedia/opieplayer/libflash/Makefile.in
new file mode 100644
index 0000000..52c8557
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/Makefile.in
@@ -0,0 +1,644 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/codecs/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = flashplugin
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = libflashplugin.h \
+ libflashpluginimpl.h
+SOURCES = libflashplugin.cpp \
+ libflashpluginimpl.cpp \
+ adpcm.cc \
+ character.cc \
+ flash.cc \
+ graphic16.cc \
+ matrix.cc \
+ script.cc \
+ sprite.cc \
+ bitmap.cc \
+ cxform.cc \
+ font.cc \
+ graphic24.cc \
+ movie.cc \
+ shape.cc \
+ sqrt.cc \
+ button.cc \
+ displaylist.cc \
+ graphic.cc \
+ graphic32.cc \
+ program.cc \
+ sound.cc \
+ text.cc
+OBJECTS = libflashplugin.o \
+ libflashpluginimpl.o \
+ adpcm.o \
+ character.o \
+ flash.o \
+ graphic16.o \
+ matrix.o \
+ script.o \
+ sprite.o \
+ bitmap.o \
+ cxform.o \
+ font.o \
+ graphic24.o \
+ movie.o \
+ shape.o \
+ sqrt.o \
+ button.o \
+ displaylist.o \
+ graphic.o \
+ graphic32.o \
+ program.o \
+ sound.o \
+ text.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake: Makefile.in
+
+Makefile.in: libflash.pro
+ tmake libflash.pro -o Makefile.in
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+libflashplugin.o: libflashplugin.cpp \
+ libflashplugin.h \
+ flash.h \
+ ../mediaplayerplugininterface.h
+
+libflashpluginimpl.o: libflashpluginimpl.cpp \
+ libflashplugin.h \
+ flash.h \
+ ../mediaplayerplugininterface.h \
+ libflashpluginimpl.h \
+ ../mediaplayerplugininterface.h
+
+adpcm.o: adpcm.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+character.o: character.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+flash.o: flash.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h \
+ graphic16.h \
+ graphic24.h \
+ graphic32.h
+
+graphic16.o: graphic16.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h \
+ graphic16.h
+
+matrix.o: matrix.cc \
+ matrix.h
+
+script.o: script.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+sprite.o: sprite.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+bitmap.o: bitmap.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+cxform.o: cxform.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+font.o: font.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+graphic24.o: graphic24.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h \
+ graphic24.h
+
+movie.o: movie.cc \
+ movie.h \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h
+
+shape.o: shape.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+sqrt.o: sqrt.cc
+
+button.o: button.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+displaylist.o: displaylist.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+graphic.o: graphic.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+graphic32.o: graphic32.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h \
+ graphic32.h
+
+program.o: program.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+sound.o: sound.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+text.o: text.cc \
+ swf.h \
+ flash.h \
+ matrix.h \
+ cxform.h \
+ rect.h \
+ jpeglib.h \
+ jconfig.h \
+ jmorecfg.h \
+ jerror.h \
+ graphic.h \
+ character.h \
+ bitmap.h \
+ shape.h \
+ displaylist.h \
+ sound.h \
+ button.h \
+ font.h \
+ text.h \
+ adpcm.h \
+ program.h \
+ sprite.h \
+ script.h \
+ movie.h
+
+
diff --git a/core/multimedia/opieplayer/libflash/README b/core/multimedia/opieplayer/libflash/README
new file mode 100644
index 0000000..9914a00
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/README
@@ -0,0 +1,191 @@
+
+MODIFICATIONS BY TROLLTECH
+--------------------------
+
+Oct. 2001
+
+Just the Lib directory of the flash library source archive
+has been copied in to the QPE CVS tree. For the full source code
+to create a KDE screensaver or stand alone player etc, download
+the orginal source tar ball from http://www.swift-tools.com/Flash
+The files libflashplugin* have been added to wrapper the library
+to produce a Qtopia Media Player plugin out of the code.
+
+John R.
+
+
+INTRODUCTION
+------------
+
+Jun. 12th 2000
+
+This the Version 0.4.10 of the Flash Library for Linux.
+
+Flash Plugin is under GPL, see COPYING file.
+
+Provides:
+- Lib contains the FlashLib sources.
+- Plugin contains plugin sources.
+- Player contains the standalone player sources.
+- Kflash a Flash KDE screen saver.
+
+New features:
+- Bug fixes.
+- 24 and 32 modes supported.
+- Flash Library as screen saver (for xcreensaver and KDE).
+
+To get some information on this library check out the following link :
+http://www.swift-tools.com/Flash
+
+Authors: Olivier Debon <odebon@club-internet.fr>
+ Fabrice Bellard <fabrice.bellard@netgem.com>
+
+FEATURES
+--------
+
+Limitations :
+ - The plugin and the player use XShm extensions, so remote display is not possible.
+ - No Flash 4 features (but no crash on Flash 4 files).
+
+Not functional :
+ - No Morphing.
+ - No vertical anti-aliasing.
+
+SOUND SUPPORT
+-------------
+
+Limitations :
+ - No streamed sound supported (interleaved data).
+ - No sound envelop. So no fading or balancing effect.
+
+But the main feature is here and sound can be enjoyed.
+
+I recommend OSS drivers, but it is not required at all
+(http://www.opensound.com)
+
+If you have troubles with sound put the -DNOSOUND option
+for compilation. Also do this for non-Linux Unix.
+
+THE PLAYER
+----------
+
+The standalone player can simply control movie by
+pressing Q to quit, P to pause, C to continue and
+R to replay.
+There is also the possibility to zoom in or out
+and scroll using Keypad +/- and cursor keys, but
+it is buggy on frozen images.
+
+THE SCREEN SAVERS
+-----------------
+
+The standalone player can be run though xscreensaver. Modify
+your .xscreensaver file to add swfplayer:
+programs: swfplayer -root /home/olivier/Flash/Test/test.swf
+(See xscreensaver doc for more details on Xscreensaver).
+
+For KDE, just install the kflash.kss file from the Kflash
+directory in /usr/bin (or where your KDE installation expects
+kss file to be).
+In your KDE start menu, select Settings->Desktop->Screensaver
+Choose 'Flash Movies' and click on SetUp button. You'll have
+to select a Flash file (take the test.swf file provided with
+this distribution). The fullscreen option will scale the movie
+to the entire screen (it can be very CPU intensive). The
+enable sound option will allow to play sounds, but as a screen
+saver mode this is not a good idea :)
+
+BUG REPORT
+----------
+
+If Netscape crashes when it started to play a Flash file, please
+report the complete url where you have found the file.
+Do not send the actual file !
+
+If you have rendering problem also report the url.
+
+If the plugin does not seem to show anything or does not do what it
+is supposed to do, please consider that the plugin does not support
+all Flash 2/4 features. Anyway it tries to play it but may fail then.
+
+COMPILATION
+-----------
+
+If you use Linux just type 'make'.
+
+Warning : the plugin compilation should not fail, but you may
+have problem with Netscape at startup. See INSTALLATION section
+for workarounds.
+
+For other Unices like FreeBSD or Solaris you may have to change
+some flags. See Plugin/Makefile for hints.
+
+INSTALLATION
+------------
+
+Once you have successfully compiled the plugin, put the file
+npflash.so (located in the Plugin directory) into your
+~/.netscape/plugins directory or into the system-wide
+/opt/netscape/plugins directory (depends on where you have installed
+Netscape).
+
+If Netscape already runs type 'javascript:navigator.plugins.refresh'
+in the Location field.
+
+ PROBLEMS
+ --------
+
+If you have problem to successfully install the plugin, please
+read the following hints. Otherwise, report the problem with full
+description of your configuration :
+- Distribution.
+- Compiler.
+- Libs (the output of ldconfig -p is useful).
+- The netscape version and the output of 'ldd netscape'.
+
+If some symbols like _rtti or _throw are unresolved, it seems
+that you have egcs. Just uncomment the proper line in the main
+Makefile.
+You may then still have some unresolved symbols like __sigsetjmp.
+This time, add -DC6R5 in the Plugin/Makefile at the PLUGIN_DEFINES
+line.
+
+ CHECKING
+ --------
+
+To verify that the plugin is installed properly, type "about:plugins"
+in Netscape's "Location:" or "Netsite:" field. The plugin should show
+up there, something like
+
+___________________________________________________________________________
+
+ Shockwave Flash
+
+ File name: /opt/netscape/plugins/npflash.so
+
+ Flash file player Version 0.4.10
+
+ Shockwave is a trademark of Macromedia
+
+ Author: Olivier Debon
+
+ ---------------------------------------------------------------------------------
+| Mime Type | Description | Suffixes | Enabled |
+|--------------------------------+-------------------+-------------+--------------|
+| application/futuresplash | Flash Plugin | spl | Yes |
+| application/x-shockwave-flash | | swf | Yes |
+ ---------------------------------------------------------------------------------
+
+___________________________________________________________________________
+
+
+If it shows up, but the "Enabled" column says "No", you need to
+configure the Flash plugin as a helper application. Go to
+Edit/Preferences/Navigator/Applications, and add it as follows:
+
+Description: Flash Plugin
+MIME Type: application/x-shockwave-flash
+Suffixes: swf
+Handled By: Plug In (select "Shockwave Flash")
+
+------
diff --git a/core/multimedia/opieplayer/libflash/adpcm.cc b/core/multimedia/opieplayer/libflash/adpcm.cc
new file mode 100644
index 0000000..a4bc435
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/adpcm.cc
@@ -0,0 +1,235 @@
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+// This file has been rearranged from the code posted
+// on news:forums.macromedia.com by Jonathan Gay.
+// Courtesy of Macromedia
+
+//
+// ADPCM tables
+//
+
+static const int indexTable2[2] = {
+ -1, 2,
+};
+
+// Is this ok?
+static const int indexTable3[4] = {
+ -1, -1, 2, 4,
+};
+
+static const int indexTable4[8] = {
+ -1, -1, -1, -1, 2, 4, 6, 8,
+};
+
+static const int indexTable5[16] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16,
+};
+
+static const int* indexTables[] = {
+ indexTable2,
+ indexTable3,
+ indexTable4,
+ indexTable5
+};
+
+static const int stepsizeTable[89] = {
+ 7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
+ 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
+ 50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
+ 130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
+ 337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
+ 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066,
+ 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
+ 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
+ 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
+};
+
+long
+Adpcm::GetBits(int n)
+{
+ if ( bitPos < n ) FillBuffer();
+
+ assert(bitPos >= n);
+
+ long v = ((unsigned long)bitBuf << (32-bitPos)) >> (32-n);
+ bitPos -= n;
+
+ return v;
+}
+
+long
+Adpcm::GetSBits(int n)
+{
+ if ( bitPos < n ) FillBuffer();
+
+ assert(bitPos >= n);
+
+ long v = ((long)bitBuf << (32-bitPos)) >> (32-n);
+ bitPos -= n;
+
+ return v;
+}
+
+//
+// The Decompressor
+//
+
+// Constructor
+Adpcm::Adpcm(unsigned char *buffer, long isStereo)
+{
+ stereo = isStereo;
+ src = buffer;
+
+ nBits = 0; // flag that it is not inited
+ nSamples = 0;
+
+ bitPos = 0;
+ bitBuf = 0;
+}
+
+void
+Adpcm::FillBuffer()
+{
+ while ( bitPos <= 24 /*&& srcSize > 0*/ ) {
+ bitBuf = (bitBuf<<8) | *src++;
+ bitPos += 8;
+ }
+}
+
+void
+Adpcm::Decompress(short *dst, long n)
+{
+ if ( nBits == 0 ) {
+ // Get the compression header
+ nBits = (int)GetBits(2)+2;
+ }
+
+ const int* indexTable = indexTables[nBits-2];
+ int k0 = 1 << (nBits-2);
+ int signmask = 1 << (nBits-1);
+
+ if ( !stereo ) {
+ // Optimize for mono
+ long vp = valpred[0]; // maybe these can get into registers...
+ int ind = index[0];
+ long ns = nSamples;
+
+ while ( n-- > 0 ) {
+ ns++;
+
+ if ( (ns & 0xFFF) == 1 ) {
+ // Get a new block header
+ *dst++ = (short)(vp = GetSBits(16));
+
+ ind = (int)GetBits(6); // The first sample in a block does not have a delta
+ } else {
+ // Process a delta value
+ int delta = (int)GetBits(nBits);
+
+ // Compute difference and new predicted value
+ // Computes 'vpdiff = (delta+0.5)*step/4'
+ int step = stepsizeTable[ind];
+ long vpdiff = 0;
+ int k = k0;
+
+ do {
+ if ( delta & k )
+ vpdiff += step;
+ step >>= 1;
+ k >>= 1;
+ } while ( k );
+
+ vpdiff += step; // add 0.5
+
+ if ( delta & signmask ) // the sign bit
+ vp -= vpdiff;
+ else
+ vp += vpdiff;
+
+ // Find new index value
+ ind += indexTable[delta&(~signmask)];
+
+ if ( ind < 0 )
+ ind = 0;
+ else if ( ind > 88 )
+ ind = 88;
+
+ // clamp output value
+ if ( vp != (short)vp )
+ vp = vp < 0 ? -32768 : 32767;
+
+ /* Step 7 - Output value */
+ *dst++ = (short)vp;
+ }
+ }
+
+ valpred[0] = vp;
+ index[0] = ind;
+ nSamples = ns;
+
+ } else {
+ int sn = stereo ? 2 : 1;
+
+ // Stereo
+ while ( n-- > 0 ) {
+
+ nSamples++;
+
+ if ( (nSamples & 0xFFF) == 1 ) {
+ // Get a new block header
+ for ( int i = 0; i < sn; i++ ) {
+
+ *dst++ = (short)(valpred[i] = GetSBits(16));
+
+ // The first sample in a block does not have a delta
+ index[i] = (int)GetBits(6);
+ }
+ } else {
+ // Process a delta value
+ for ( int i = 0; i < sn; i++ ) {
+ int delta = (int)GetBits(nBits);
+
+ // Compute difference and new predicted value
+ // Computes 'vpdiff = (delta+0.5)*step/4'
+
+ int step = stepsizeTable[index[i]];
+ long vpdiff = 0;
+ int k = k0;
+
+ do {
+ if ( delta & k ) vpdiff += step;
+ step >>= 1;
+ k >>= 1;
+ } while ( k );
+ vpdiff += step; // add 0.5
+
+
+ if ( delta & signmask ) // the sign bit
+ valpred[i] -= vpdiff;
+ else
+ valpred[i] += vpdiff;
+
+ // Find new index value
+ index[i] += indexTable[delta&(~signmask)];
+
+ if ( index[i] < 0 )
+ index[i] = 0;
+ else if ( index[i] > 88 )
+ index[i] = 88;
+
+ // clamp output value
+ if ( valpred[i] != (short)valpred[i] )
+ valpred[i] = valpred[i] < 0 ? -32768 : 32767;
+
+ /* Step 7 - Output value */
+ *dst++ = (short)valpred[i];
+ }
+ }
+ }
+ }
+}
diff --git a/core/multimedia/opieplayer/libflash/adpcm.h b/core/multimedia/opieplayer/libflash/adpcm.h
new file mode 100644
index 0000000..5714c0c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/adpcm.h
@@ -0,0 +1,36 @@
+#ifndef _ADPCM_H_
+#define _ADPCM_H_
+
+class Adpcm {
+
+ // Destination format - note we always decompress to 16 bit
+ long stereo;
+ int nBits; // number of bits in each sample
+
+ long valpred[2]; // Current state
+ int index[2];
+
+ long nSamples; // number of samples decompressed so far
+
+ // Parsing Info
+ unsigned char *src;
+ long bitBuf; // this should always contain at least 24 bits of data
+ int bitPos;
+
+ void FillBuffer();
+
+ long GetBits(int n);
+
+ long GetSBits(int n);
+
+public:
+ Adpcm(unsigned char *buffer, long isStereo);
+
+ void Decompress(short * dst, long n); // return number of good samples
+#ifdef DUMP
+ void dump(BitStream *bs);
+ void Compress(short *pcm, long n, int bits);
+#endif
+};
+
+#endif /* _ADPCM_H_ */
diff --git a/core/multimedia/opieplayer/libflash/bitmap.cc b/core/multimedia/opieplayer/libflash/bitmap.cc
new file mode 100644
index 0000000..03b4588
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/bitmap.cc
@@ -0,0 +1,606 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+static unsigned char *inputData;
+
+// Class variables
+
+int Bitmap::haveTables = 0;
+
+struct jpeg_decompress_struct Bitmap::jpegObject;
+
+struct jpeg_source_mgr Bitmap::jpegSourceManager;
+
+MyErrorHandler Bitmap::jpegErrorMgr;
+
+Bitmap::Bitmap(long id, int level) : Character(BitmapType, id )
+{
+ pixels = NULL;
+ alpha_buf = NULL;
+ colormap = NULL;
+ nbColors = 0;
+ defLevel = level;
+}
+
+Bitmap::~Bitmap()
+{
+ if (pixels) {
+ delete[] pixels;
+ }
+ if (alpha_buf) {
+ delete[] alpha_buf;
+ }
+ if (colormap)
+ {
+ delete colormap;
+ }
+ if (haveTables) {
+ jpeg_destroy_decompress(&jpegObject);
+ haveTables = 0;
+ }
+}
+
+static void errorExit(j_common_ptr info)
+{
+ (*info->err->output_message) (info);
+ longjmp(((MyErrorHandler *)info->err)->setjmp_buffer, 1);
+}
+
+// Methods for Source data manager
+static void initSource(struct jpeg_decompress_struct *cInfo)
+{
+ cInfo->src->bytes_in_buffer = 0;
+}
+
+static boolean fillInputBuffer(struct jpeg_decompress_struct *cInfo)
+{
+ cInfo->src->next_input_byte = inputData;
+ cInfo->src->bytes_in_buffer = 1;
+ inputData++;
+
+ return 1;
+}
+
+static void skipInputData(struct jpeg_decompress_struct *cInfo, long count)
+{
+ cInfo->src->bytes_in_buffer = 0;
+ inputData += count;
+}
+
+static boolean resyncToRestart(struct jpeg_decompress_struct *cInfo, int desired)
+{
+ return jpeg_resync_to_restart(cInfo, desired);
+}
+
+static void termSource(struct jpeg_decompress_struct *cInfo)
+{
+}
+
+long Bitmap::getWidth()
+{
+ return width;
+}
+
+long Bitmap::getHeight()
+{
+ return height;
+}
+
+Color *
+Bitmap::getColormap(long *n) {
+ if (n) *n = nbColors;
+ return colormap;
+}
+
+unsigned char *
+Bitmap::getPixels()
+{
+ return pixels;
+}
+
+// Read Tables and Compressed data to produce an image
+
+static int
+buildJpegAlpha(Bitmap *b, unsigned char *buffer)
+{
+ z_stream stream;
+ int status;
+ unsigned char *data;
+
+ data = new unsigned char[b->width*b->height];
+ if (data == NULL)
+ return -1;
+
+ stream.next_in = buffer;
+ stream.avail_in = 1;
+ stream.next_out = data;
+ stream.avail_out = b->width*b->height;
+ stream.zalloc = Z_NULL;
+ stream.zfree = Z_NULL;
+
+ status = inflateInit(&stream);
+
+ while (1) {
+ status = inflate(&stream, Z_SYNC_FLUSH) ;
+ if (status == Z_STREAM_END) {
+ break;
+ }
+ if (status != Z_OK) {
+ printf("Zlib data error : %s\n", stream.msg);
+ delete data;
+ return -1;
+ }
+ stream.avail_in = 1;
+ }
+
+ inflateEnd(&stream);
+
+ b->alpha_buf = data;
+
+ return 0;
+}
+
+int
+Bitmap::buildFromJpegInterchangeData(unsigned char *stream, int read_alpha, long offset)
+{
+ struct jpeg_decompress_struct cInfo;
+ struct jpeg_source_mgr mySrcMgr;
+ MyErrorHandler errorMgr;
+ JSAMPROW buffer[1];
+ unsigned char *ptrPix;
+ int stride;
+ long n;
+
+#if PRINT&1
+ printf("flash: loading jpeg (interchange)\n");
+#endif
+
+ // Kludge to correct some corrupted files
+ if (stream[1] == 0xd9 && stream[3] == 0xd8) {
+ stream[3] = 0xd9;
+ stream[1] = 0xd8;
+ }
+
+ // Setup error handler
+ cInfo.err = jpeg_std_error(&errorMgr.pub);
+ errorMgr.pub.error_exit = errorExit;
+
+ if (setjmp(errorMgr.setjmp_buffer)) {
+ // JPEG data Error
+ jpeg_destroy_decompress(&cInfo);
+ if (pixels) {
+ delete[] pixels;
+ pixels = NULL;
+ }
+ return -1;
+ }
+
+ // Set current stream pointer to stream
+ inputData = stream;
+
+ // Here it's Ok
+
+ jpeg_create_decompress(&cInfo);
+
+ // Setup source manager structure
+ mySrcMgr.init_source = initSource;
+ mySrcMgr.fill_input_buffer = fillInputBuffer;
+ mySrcMgr.skip_input_data = skipInputData;
+ mySrcMgr.resync_to_restart = resyncToRestart;
+ mySrcMgr.term_source = termSource;
+
+ // Set default source manager
+ cInfo.src = &mySrcMgr;
+
+ jpeg_read_header(&cInfo, FALSE);
+
+ jpeg_read_header(&cInfo, TRUE);
+ cInfo.quantize_colors = TRUE; // Create colormapped image
+ jpeg_start_decompress(&cInfo);
+
+ // Set objet dimensions
+ height = cInfo.output_height;
+ width = cInfo.output_width;
+ bpl = width;
+ pixels = new unsigned char [height*width];
+ if (pixels == NULL) {
+ jpeg_finish_decompress(&cInfo);
+ jpeg_destroy_decompress(&cInfo);
+ return -1;
+ }
+ ptrPix = pixels;
+
+ stride = cInfo.output_width * cInfo.output_components;
+
+ buffer[0] = (JSAMPROW)malloc(stride);
+
+ while (cInfo.output_scanline < cInfo.output_height) {
+
+ jpeg_read_scanlines(&cInfo, buffer, 1);
+
+ memcpy(ptrPix,buffer[0],stride);
+
+ ptrPix+= stride;
+ }
+
+ free(buffer[0]);
+
+ colormap = new Color[cInfo.actual_number_of_colors];
+ if (colormap == NULL) {
+ delete pixels;
+ jpeg_finish_decompress(&cInfo);
+ jpeg_destroy_decompress(&cInfo);
+ return -1;
+ }
+ nbColors = cInfo.actual_number_of_colors;
+
+ for(n=0; n < nbColors; n++)
+ {
+ colormap[n].red = cInfo.colormap[0][n];
+ colormap[n].green = cInfo.colormap[1][n];
+ colormap[n].blue = cInfo.colormap[2][n];
+ }
+
+ jpeg_finish_decompress(&cInfo);
+ jpeg_destroy_decompress(&cInfo);
+
+ if (read_alpha) {
+ if (buildJpegAlpha(this, stream + offset) < 0) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+// Read JPEG image using pre-loaded Tables
+
+int
+Bitmap::buildFromJpegAbbreviatedData(unsigned char *stream)
+{
+ JSAMPROW buffer[1];
+ unsigned char *ptrPix;
+ int stride;
+ long n;
+ int status;
+
+#if PRINT&1
+ printf("flash: loading jpeg (abbreviated)\n");
+#endif
+
+ // Set current stream pointer to stream
+ inputData = stream;
+
+ // Error handler
+ if (setjmp(jpegErrorMgr.setjmp_buffer)) {
+ // JPEG data Error
+ //jpeg_destroy_decompress(&jpegObject);
+ if (pixels) {
+ delete[] pixels;
+ pixels = NULL;
+ }
+ return -1;
+ }
+
+ // Here it's ok
+
+ jpeg_read_header(&jpegObject, TRUE);
+ jpegObject.quantize_colors = TRUE; // Create colormapped image
+ jpeg_start_decompress(&jpegObject);
+
+ // Set objet dimensions
+ height = jpegObject.output_height;
+ width = jpegObject.output_width;
+ bpl = width;
+ pixels = new unsigned char [height*width];
+ if (pixels == NULL) {
+ jpeg_finish_decompress(&jpegObject);
+ return -1;
+ }
+ ptrPix = pixels;
+
+ stride = jpegObject.output_width * jpegObject.output_components;
+
+ buffer[0] = (JSAMPROW)malloc(stride);
+
+ while (jpegObject.output_scanline < jpegObject.output_height) {
+
+ status = jpeg_read_scanlines(&jpegObject, buffer, 1);
+
+ memcpy(ptrPix,buffer[0],stride);
+
+ ptrPix+= stride;
+ }
+
+ free(buffer[0]);
+
+ colormap = new Color[jpegObject.actual_number_of_colors];
+ if (colormap == NULL) {
+ jpeg_finish_decompress(&jpegObject);
+ delete pixels;
+ return -1;
+ }
+ nbColors = jpegObject.actual_number_of_colors;
+
+ for(n=0; n < nbColors; n++)
+ {
+ colormap[n].red = jpegObject.colormap[0][n];
+ colormap[n].green = jpegObject.colormap[1][n];
+ colormap[n].blue = jpegObject.colormap[2][n];
+ }
+
+ status = jpeg_finish_decompress(&jpegObject);
+
+ return 0;
+}
+
+// Just init JPEG object and read JPEG Tables
+
+int
+Bitmap::readJpegTables(unsigned char *stream)
+{
+ if (haveTables) {
+ //Error, it has already been initialized
+ return -1;
+ }
+
+ // Setup error handler
+ jpegObject.err = jpeg_std_error(&jpegErrorMgr.pub);
+ jpegErrorMgr.pub.error_exit = errorExit;
+
+ if (setjmp(jpegErrorMgr.setjmp_buffer)) {
+ // JPEG data Error
+ jpeg_destroy_decompress(&jpegObject);
+ return -1;
+ }
+
+ // Set current stream pointer to stream
+ inputData = stream;
+
+ // Here it's Ok
+
+ jpeg_create_decompress(&jpegObject);
+
+ // Setup source manager structure
+ jpegSourceManager.init_source = initSource;
+ jpegSourceManager.fill_input_buffer = fillInputBuffer;
+ jpegSourceManager.skip_input_data = skipInputData;
+ jpegSourceManager.resync_to_restart = resyncToRestart;
+ jpegSourceManager.term_source = termSource;
+
+ // Set default source manager
+ jpegObject.src = &jpegSourceManager;
+
+ jpeg_read_header(&jpegObject, FALSE);
+
+ haveTables = 1;
+
+ return 0;
+}
+
+int
+Bitmap::buildFromZlibData(unsigned char *buffer, int width, int height, int format, int tableSize, int tableHasAlpha)
+{
+ z_stream stream;
+ int status;
+ unsigned char *data;
+ int elementSize;
+
+#if PRINT&1
+ printf("flash: loading with zlib\n");
+#endif
+
+ this->width = width;
+ this->height = height;
+ this->bpl = width;
+
+ if (tableHasAlpha) {
+ elementSize = 4; // Cmap is RGBA
+ } else {
+ elementSize = 3; // Cmap is RGB
+ }
+
+ stream.next_in = buffer;
+ stream.avail_in = 1;
+ stream.zalloc = Z_NULL;
+ stream.zfree = Z_NULL;
+
+ tableSize++;
+
+ // Uncompress Color Table
+ if (format == 3) {
+ unsigned char *colorTable;
+ long n;
+
+ // Ajust width for 32 bit padding
+ width = (width+3)/4*4;
+ this->width = width;
+ this->bpl = width;
+
+ depth = 1;
+ colorTable = new unsigned char[tableSize*elementSize];
+ if (colorTable == NULL) {
+ return -1;
+ }
+
+ stream.next_out = colorTable;
+ stream.avail_out = tableSize*elementSize;
+
+ inflateInit(&stream);
+
+ while (1) {
+ status = inflate(&stream, Z_SYNC_FLUSH);
+ if (status == Z_STREAM_END) {
+ break;
+ }
+ if (status != Z_OK) {
+ printf("Zlib cmap error : %s\n", stream.msg);
+ return -1;
+ }
+ stream.avail_in = 1;
+ // Colormap if full
+ if (stream.avail_out == 0) {
+ break;
+ }
+ }
+
+ nbColors = tableSize;
+
+ colormap = new Color[nbColors];
+ if (colormap == NULL) {
+ delete colorTable;
+ return -1;
+ }
+
+ for(n=0; n < nbColors; n++) {
+ colormap[n].red = colorTable[n*elementSize+0];
+ colormap[n].green = colorTable[n*elementSize+1];
+ colormap[n].blue = colorTable[n*elementSize+2];
+ if (tableHasAlpha) {
+ colormap[n].alpha = colorTable[n*elementSize+3];
+ }
+ }
+
+ delete colorTable;
+
+ } else if (format == 4) {
+ depth = 2;
+ width = (width+1)/2*2;
+ this->bpl = width;
+ } else if (format == 5) {
+ depth = 4;
+ }
+
+ data = new unsigned char[depth*width*height];
+ if (data == NULL) {
+ if (colormap) delete colormap;
+ return -1;
+ }
+
+ stream.next_out = data;
+ stream.avail_out = depth*width*height;
+
+ if (format != 3) {
+ status = inflateInit(&stream);
+ }
+
+ while (1) {
+ status = inflate(&stream, Z_SYNC_FLUSH) ;
+ if (status == Z_STREAM_END) {
+ break;
+ }
+ if (status != Z_OK) {
+ printf("Zlib data error : %s\n", stream.msg);
+ delete data;
+ return -1;
+ }
+ stream.avail_in = 1;
+ }
+
+ inflateEnd(&stream);
+
+ pixels = new unsigned char [height*width];
+ if (pixels == NULL) {
+ if (colormap) delete colormap;
+ delete data;
+ return -1;
+ }
+
+ if (format != 3) {
+ int n,c;
+ unsigned char r,g,b,a;
+ unsigned char *ptr;
+
+ r = g = b = a = 0; /* to supress warnings */
+
+ nbColors = 0;
+ colormap = new Color[256];
+ if (colormap == NULL) {
+ delete data;
+ delete pixels;
+ return -1;
+ }
+ memset(colormap, 0, 256 * sizeof(Color));
+ ptr = pixels;
+
+ for(n=0; n < width*height*depth; n+=depth,ptr++) {
+
+ switch (format) {
+ case 4:
+ a = 1;
+ r = (data[n] & 0x78)<<1;
+ g = ((data[n] & 0x03)<<6) | (data[n+1] & 0xc0)>>2;
+ b = (data[n+1] & 0x1e)<<3;
+ break;
+ case 5:
+ a = data[n];
+ // Reduce color dynamic range
+ r = data[n+1]&0xe0;
+ g = data[n+2]&0xe0;
+ b = data[n+3]&0xe0;
+ break;
+ }
+ for(c=0; c < nbColors; c++) {
+ if (r == colormap[c].red
+ && g == colormap[c].green
+ && b == colormap[c].blue) {
+ *ptr = c;
+ break;
+ }
+ }
+ if (c == nbColors) {
+ if (nbColors == 256) continue;
+ nbColors++;
+ if (nbColors == 256) {
+ //printf("Colormap entries exhausted. After %d scanned pixels\n", n/4);
+ }
+ colormap[c].alpha = a;
+ colormap[c].red = r;
+ colormap[c].green = g;
+ colormap[c].blue = b;
+ *ptr = c;
+ }
+ }
+ } else {
+ memcpy(pixels, data, width*height);
+ if (tableHasAlpha) {
+ int n;
+ unsigned char *ptr, *alpha;
+
+ alpha_buf = (unsigned char *)malloc(width*height);
+ ptr = data;
+ alpha = alpha_buf;
+ for(n=0; n < width*height; n++, ptr++, alpha++) {
+ *alpha = colormap[*ptr].alpha;
+ }
+ }
+ }
+
+ delete data;
+ return 0;
+}
+
diff --git a/core/multimedia/opieplayer/libflash/bitmap.h b/core/multimedia/opieplayer/libflash/bitmap.h
new file mode 100644
index 0000000..7925309
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/bitmap.h
@@ -0,0 +1,72 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _BITMAP_H_
+#define _BITMAP_H_
+
+struct MyErrorHandler {
+ struct jpeg_error_mgr pub;
+ jmp_buf setjmp_buffer;
+};
+
+class Bitmap : public Character {
+ public:
+ long width;
+ long height;
+ long bpl;
+ long depth;
+
+ unsigned char *pixels; // Array of Pixels
+ Color *colormap; // Array of color definitions
+ long nbColors;
+
+ unsigned char *alpha_buf; // Array of alpha values (no alpha if NULL)
+
+ int defLevel;
+
+// Class Variables
+
+ static int haveTables;
+ static struct jpeg_decompress_struct jpegObject;
+ static struct jpeg_source_mgr jpegSourceManager;
+ static MyErrorHandler jpegErrorMgr;
+
+public:
+ Bitmap(long id, int level = 1);
+ ~Bitmap();
+
+ // JPEG handling methods
+ int buildFromJpegInterchangeData(unsigned char *stream, int alpha, long offset); // Complete
+ int buildFromJpegAbbreviatedData(unsigned char *stream); // Abbreviated
+
+ // Class Method
+ static int readJpegTables(unsigned char *stream); // Tables Only
+
+ // ZLIB handling methods
+ int buildFromZlibData(unsigned char *buffer,
+ int width, int height,
+ int format, int tableSize, int tableHasAlpha);
+
+ long getWidth();
+ long getHeight();
+ Color *getColormap(long *n);
+ unsigned char *getPixels();
+};
+
+#endif /* _BITMAP_H_ */
diff --git a/core/multimedia/opieplayer/libflash/button.cc b/core/multimedia/opieplayer/libflash/button.cc
new file mode 100644
index 0000000..7d8369d
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/button.cc
@@ -0,0 +1,328 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+#define PRINT 0
+
+// Contructor
+
+Button::Button(long id, int level) : Character(ButtonType, id)
+{
+ defLevel = level;
+ actionRecords = 0;
+ buttonRecords = 0;
+ conditionList = 0;
+ reset();
+ isMenu = 0;
+ sound[0] = sound[1] = sound[2] = sound[3] = 0;
+}
+
+// Destructor
+
+Button::~Button()
+{
+ if (actionRecords) {
+ ActionRecord *ar,*del;
+ for(ar = actionRecords; ar;) {
+ del = ar;
+ ar = ar->next;
+ delete del;
+ }
+ }
+ if (buttonRecords) {
+ ButtonRecord *br,*del;
+ for(br = buttonRecords; br;) {
+ del = br;
+ br = br->next;
+ if (del->cxform)
+ delete del->cxform;
+ delete del;
+ }
+ }
+ if (conditionList) {
+ Condition *cond,*del;
+ for(cond = conditionList; cond;) {
+ ActionRecord *ar,*d;
+
+ for(ar = cond->actions; ar;) {
+ d = ar;
+ ar = ar->next;
+ delete d;
+ }
+
+ del = cond;
+ cond = cond->next;
+ delete del;
+ }
+ }
+}
+
+ButtonRecord *
+Button::getButtonRecords()
+{
+ return buttonRecords;
+}
+
+ActionRecord *
+Button::getActionRecords()
+{
+ return actionRecords;
+}
+
+Sound **
+Button::getSounds()
+{
+ return sound;
+}
+
+Condition *
+Button::getConditionList()
+{
+ return conditionList;
+}
+
+void
+Button::setButtonSound(Sound *s, int state)
+{
+ if (state >=0 && state < 4) {
+ sound[state] = s;
+ }
+}
+
+void
+Button::setButtonMenu(int menu)
+{
+ isMenu = menu;
+}
+
+void
+Button::addButtonRecord( ButtonRecord *br )
+{
+#if 0
+ /* SURTOUT PAS !!! */
+ ButtonRecord **l;
+
+ /* sort by layer */
+ l=&buttonRecords;
+ while (*l != NULL && (*l)->layer < br->layer) l = &(*l)->next;
+ br->next = *l;
+ *l = br;
+#else
+ br->next = 0;
+
+ if (buttonRecords == 0) {
+ buttonRecords = br;
+ } else {
+ ButtonRecord *current;
+
+ for(current = buttonRecords; current->next; current = current->next);
+
+ current->next = br;
+ }
+#endif
+}
+
+void
+Button::addCondition( long transition )
+{
+ Condition *condition;
+
+ condition = new Condition;
+ if (condition == NULL) return;
+
+ condition->transition = transition;
+ condition->next = conditionList;
+
+ // Move current actionRecords to this condition
+ condition->actions = actionRecords;
+ actionRecords = 0;
+
+ conditionList = condition;
+}
+
+void
+Button::addActionRecord( ActionRecord *ar )
+{
+ ar->next = 0;
+
+ if (actionRecords == 0) {
+ actionRecords = ar;
+ } else {
+ ActionRecord *current;
+
+ for(current = actionRecords; current->next; current = current->next);
+
+ current->next = ar;
+ }
+}
+
+void
+Button::getRegion(GraphicDevice *gd, Matrix *matrix, void *id, ScanLineFunc scan_line_func)
+{
+ ButtonRecord *br;
+
+ for (br = buttonRecords; br; br = br->next)
+ {
+ if ((br->state & stateHitTest) && br->character /* Temporaire */) {
+ Matrix mat;
+
+ mat = (*matrix) * br->buttonMatrix;
+ br->character->getRegion(gd, &mat, id, scan_line_func);
+ }
+ }
+}
+
+int
+Button::execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform, ButtonState renderState)
+{
+ ButtonRecord *br;
+ int sprite = 0;
+ Cxform *cxf = 0;
+
+#if PRINT==2
+ printf("Rendering Button %d for State(s) ", getTagId());
+#endif
+ for (br = buttonRecords; br; br = br->next)
+ {
+ if ((br->state & renderState) && br->character != NULL) {
+ Matrix mat;
+
+#if PRINT==2
+ printf("%d ", br->state);
+#endif
+ mat = (*matrix) * br->buttonMatrix;
+
+ if (cxform) {
+ cxf = cxform;
+ } else if (br->cxform) {
+ cxf = br->cxform;
+ }
+
+ if (br->character->execute(gd, &mat, cxf)) {
+ sprite = 1;
+ }
+ }
+ }
+#if PRINT==2
+ printf("\n");
+#endif
+ return sprite;
+}
+
+ActionRecord *
+Button::getActionFromTransition(ButtonState cur, ButtonState old)
+{
+ Condition *cond;
+ long mask;
+
+ if (old == cur) return NULL;
+
+ /* transitions */
+ mask = 0;
+ if (old == stateUp && cur == stateOver)
+ mask |= 0x001;
+ else if (old == stateOver && cur == stateUp)
+ mask |= 0x002;
+ else if (old == stateOver && cur == stateDown)
+ mask |= 0x004;
+ else if (old == stateDown && cur == stateOver)
+ mask |= 0x008;
+
+ if (!isMenu) {
+ /* push button transitions (XXX: not quite correct) */
+ if (old == stateDown && cur == stateUp)
+ mask = 0x010;
+ else if (old == stateUp && cur == stateDown)
+ mask = 0x020;
+ /* XXX: what is transition 0x040 ?? */
+ } else {
+ /* menu button transitions (XXX: not quite correct) */
+ if (old == stateUp && cur == stateDown)
+ mask = 0x080;
+ else if (old == stateDown && cur == stateUp)
+ mask = 0x100;
+ }
+
+ for (cond = conditionList; cond; cond = cond->next) {
+ if (cond->transition & mask) {
+ return cond->actions;
+ }
+ }
+ return 0;
+}
+
+void
+Button::getBoundingBox(Rect *bbox, DisplayListEntry *e)
+{
+ ButtonRecord *br;
+
+ bbox->reset();
+ for (br = buttonRecords; br; br = br->next)
+ {
+ if (br->state & e->renderState) {
+ if (br->character) {
+ Rect bb;
+
+ bb.reset();
+ br->character->getBoundingBox(&bb,e);
+ transformBoundingBox(bbox, &br->buttonMatrix, &bb, 0);
+ }
+ }
+ }
+}
+
+/* Get current render character, actually it should be a list of characters
+ so a DisplayList after all */
+Character *
+Button::getRenderCharacter(ButtonState state)
+{
+ ButtonRecord *br;
+
+ for (br = buttonRecords; br; br = br->next)
+ {
+ if (br->state & state) {
+ return br->character;
+ }
+ }
+ return 0;
+}
+
+void
+Button::updateButtonState(DisplayListEntry *e)
+{
+ ButtonRecord *br;
+
+ e->buttonCharacter = 0;
+ for (br = buttonRecords; br; br = br->next)
+ {
+ if (br->state & e->renderState) {
+ e->buttonCharacter = br->character;
+ e->buttonMatrix = br->buttonMatrix;
+ return;
+ }
+ }
+}
diff --git a/core/multimedia/opieplayer/libflash/button.h b/core/multimedia/opieplayer/libflash/button.h
new file mode 100644
index 0000000..75781b2
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/button.h
@@ -0,0 +1,88 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _BUTTON_H_
+#define _BUTTON_H_
+
+struct ButtonRecord {
+ ButtonState state;
+ Character *character;
+ long layer;
+ Matrix buttonMatrix;
+ Cxform *cxform;
+
+ struct ButtonRecord *next;
+};
+
+struct Condition {
+ long transition;
+ ActionRecord *actions;
+
+ Condition *next;
+};
+
+class Button : public Character {
+public:
+ long defLevel;
+
+ ButtonRecord *buttonRecords;
+ ActionRecord *actionRecords;
+ Condition *conditionList;
+
+ long isMenu;
+
+ Sound *sound[4];
+
+ Button(long id, int level = 1);
+ ~Button();
+ void addActionRecord( ActionRecord *ar );
+ void addButtonRecord( ButtonRecord *br );
+ void addCondition( long transition );
+ int execute(GraphicDevice *gd, Matrix *matrix,
+ Cxform *cxform, ButtonState renderState);
+ ActionRecord *getActionFromTransition(ButtonState currentState,
+ ButtonState old);
+ void getRegion(GraphicDevice *gd, Matrix *matrix,
+ void *id, ScanLineFunc scan_line_func);
+ ButtonRecord *getButtonRecords();
+ void setButtonSound(Sound *, int);
+ void setButtonMenu(int);
+
+ ActionRecord *getActionRecords();
+ Condition *getConditionList();
+ Sound **getSounds();
+
+ void getBoundingBox(Rect *bb, DisplayListEntry *);
+
+ void updateButtonState(DisplayListEntry *);
+ Character *getRenderCharacter(ButtonState state);
+
+ // Builtin
+ int isButton() {
+ return 1;
+ };
+
+#ifdef DUMP
+ void dump(BitStream *);
+ void dumpButtonRecords(BitStream *, int putCxform = 0);
+ void dumpButtonConditions(BitStream *);
+#endif
+};
+
+#endif /* _BUTTON_H_ */
diff --git a/core/multimedia/opieplayer/libflash/character.cc b/core/multimedia/opieplayer/libflash/character.cc
new file mode 100644
index 0000000..4b5ce36
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/character.cc
@@ -0,0 +1,233 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+///// Character member definitions
+
+Character::Character(ObjectType objectType, long tagid)
+{
+ type = objectType;
+ tagId = tagid;
+ name = NULL;
+}
+
+Character::~Character()
+{
+ delete name;
+}
+
+int
+Character::execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform)
+{
+ printf("Cannot be executed\n");
+ return 0;
+}
+
+ActionRecord *
+Character::eventHandler(GraphicDevice *gd, FlashEvent *ev)
+{
+ fprintf(stderr,"Unable to handle event !!!\n");
+ return 0;
+}
+
+int
+Character::isButton()
+{
+ return 0;
+}
+
+int
+Character::isSprite(void)
+{
+ return 0;
+}
+
+char *
+Character::getName()
+{
+ return name;
+}
+
+void
+Character::getBoundingBox(Rect *bb, DisplayListEntry *e)
+{
+ //fprintf(stderr,"Unable to handle getBoundingBox !!!\n");
+ bb->xmin = LONG_MAX;
+ bb->ymin = LONG_MAX;
+ bb->ymax = LONG_MIN;
+ bb->ymax = LONG_MIN;
+ return;
+}
+
+void
+Character::getRegion(GraphicDevice *gd, Matrix *matrix,
+ void *id, ScanLineFunc scan_line_func)
+{
+ fprintf(stderr,"Unable to handle getRegion !!!\n");
+ return;
+}
+
+long
+Character::getTagId()
+{
+ return tagId;
+}
+
+void
+Character::reset()
+{
+}
+
+ObjectType
+Character::getType()
+{
+ return type;
+}
+
+char *
+Character::getTypeString()
+{
+ switch (type) {
+ case BitmapType:
+ return "Bitmap";
+ case FontType:
+ return "Font";
+ case ButtonType:
+ return "Button";
+ case SpriteType:
+ return "Sprite";
+ case ShapeType:
+ return "Shape";
+ case SoundType:
+ return "Sound";
+ case TextType:
+ return "Text";
+ default:
+ return "Unknown";
+ }
+}
+
+void
+Character::setName(char* string)
+{
+ name = strdup(string);
+}
+
+///// Dict methods definitions
+
+Dict::Dict()
+{
+ head = 0;
+}
+
+Dict::~Dict()
+{
+ struct sCharCell *cell,*del;
+
+ for(cell = head; cell;)
+ {
+ del = cell;
+ cell = cell->next;
+ delete del->elt;
+ delete del;
+ }
+}
+
+void
+Dict::addCharacter(Character *character)
+{
+ struct sCharCell *cell;
+
+ cell = new sCharCell;
+ if (cell == NULL) {
+ delete character;
+ return;
+ }
+ cell->elt = character;
+ cell->next = head;
+
+ head = cell;
+}
+
+Character *
+Dict::getCharacter(long id)
+{
+ struct sCharCell *cell;
+
+ for(cell = head; cell; cell = cell->next)
+ {
+ if (id == cell->elt->getTagId()) return cell->elt;
+ }
+ return 0;
+}
+
+void
+Dict::dictRewind()
+{
+ currentCell = head;
+}
+
+Character *
+Dict::dictNextCharacter()
+{
+ if (currentCell) {
+ struct sCharCell *cell;
+
+ cell = currentCell;
+ currentCell = currentCell->next;
+ return cell->elt;
+ } else {
+ return 0;
+ }
+}
+
+void
+Dict::nameCharacter(long id, char *string)
+{
+ struct sCharCell *cell;
+
+ for(cell = head; cell; cell = cell->next)
+ {
+ if (cell->elt->getTagId() == id) {
+ cell->elt->setName(string);
+ break;
+ }
+ }
+}
+
+#ifdef DUMP
+void
+Dict::dictSetUnsaved()
+{
+ struct sCharCell *cell;
+
+ for(cell = head; cell; cell = cell->next)
+ {
+ cell->elt->saved = 0;
+ }
+}
+#endif
diff --git a/core/multimedia/opieplayer/libflash/character.h b/core/multimedia/opieplayer/libflash/character.h
new file mode 100644
index 0000000..583cb17
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/character.h
@@ -0,0 +1,90 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _CHARACTER_H_
+#define _CHARACTER_H_
+
+enum ObjectType {
+ ShapeType,
+ TextType,
+ FontType,
+ SoundType,
+ BitmapType,
+ SpriteType,
+ ButtonType
+};
+
+class DisplayListEntry;
+
+// Character definition
+
+class Character {
+ long tagId;
+ ObjectType type;
+ char *name;
+
+public:
+ Character(ObjectType type, long tagId);
+ virtual ~Character();
+
+ virtual int execute(GraphicDevice *, Matrix *, Cxform *); // Display, play or whatever
+ virtual int isButton(void); // True if Character is a button
+ virtual int isSprite(void);
+ virtual ActionRecord *eventHandler(GraphicDevice *, FlashEvent *);
+ virtual void getRegion(GraphicDevice *gd, Matrix *matrix, void *id, ScanLineFunc scan_line_func);
+ virtual void reset(); // Reset internal state of object
+ virtual void getBoundingBox(Rect *bb, DisplayListEntry *de);
+#ifdef DUMP
+ virtual void dump(BitStream *main);
+
+ int saved;
+#endif
+
+ long getTagId(); // Return tagId
+ ObjectType getType();
+ char *getTypeString();
+ char *getName();
+ void setName(char *);
+};
+
+struct sCharCell {
+ Character *elt;
+ struct sCharCell *next;
+};
+
+class Dict {
+ struct sCharCell *head;
+ struct sCharCell *currentCell; // Iteration variable for dictNextCharacter
+
+public:
+ Dict();
+ ~Dict();
+
+ void addCharacter(Character *character);
+ void nameCharacter(long id, char *string);
+ Character *getCharacter(long id);
+ void dictRewind();
+ Character *dictNextCharacter();
+
+#ifdef DUMP
+ void dictSetUnsaved();
+#endif
+};
+
+#endif /* _CHARACTER_H_ */
diff --git a/core/multimedia/opieplayer/libflash/cxform.cc b/core/multimedia/opieplayer/libflash/cxform.cc
new file mode 100644
index 0000000..b448f5d
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/cxform.cc
@@ -0,0 +1,79 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id";
+#endif
+
+long
+Cxform::getRed(long v) {
+ long val;
+
+ val = (long)(ra*v+rb);
+ if (val > 255) val = 255;
+ else if (val < 0) val = 0;
+ return val;
+}
+
+long
+Cxform::getGreen(long v) {
+ long val;
+
+ val = (long)(ga*v+gb);
+ if (val > 255) val = 255;
+ else if (val < 0) val = 0;
+ return val;
+}
+
+long
+Cxform::getBlue(long v) {
+ long val;
+
+ val = (long)(ba*v+bb);
+ if (val > 255) val = 255;
+ else if (val < 0) val = 0;
+ return val;
+}
+
+long
+Cxform::getAlpha(long v) {
+ long val;
+
+ val = (long)(aa*v+ab);
+ if (val > 255) val = 255;
+ else if (val < 0) val = 0;
+ return val;
+}
+
+Color
+Cxform::getColor(Color color) {
+ Color newColor;
+
+ newColor.red = getRed(color.red);
+ newColor.green = getGreen(color.green);
+ newColor.blue = getBlue(color.blue);
+ newColor.alpha = getAlpha(color.alpha);
+
+ return newColor;
+}
diff --git a/core/multimedia/opieplayer/libflash/cxform.h b/core/multimedia/opieplayer/libflash/cxform.h
new file mode 100644
index 0000000..14f7189
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/cxform.h
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _CXFORM_H_
+#define _CXFORM_H_
+
+struct Color {
+ unsigned char red,green,blue,alpha;
+ long pixel;
+};
+
+struct Cxform
+{
+ float aa; long ab; // a is multiply factor, b is addition factor
+ float ra; long rb;
+ float ga; long gb;
+ float ba; long bb;
+
+ long getRed(long v);
+ long getGreen(long v);
+ long getBlue(long v);
+ long getAlpha(long v);
+ Color getColor(Color color);
+
+#ifdef DUMP
+ void dump(BitStream *bs, int alpha = 0);
+#endif
+};
+
+#endif /* _CXFORM_H_ */
diff --git a/core/multimedia/opieplayer/libflash/displaylist.cc b/core/multimedia/opieplayer/libflash/displaylist.cc
new file mode 100644
index 0000000..d71cfb7
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/displaylist.cc
@@ -0,0 +1,708 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+#define PRINT 0
+
+void deleteButton(FlashMovie *movie, DisplayListEntry *e)
+{
+ /* save the focus */
+ if (movie->mouse_active == 0 && e->renderState == stateOver) {
+ movie->lost_over = (Button *)e->character;
+ movie->cur_focus = NULL;
+ }
+
+ if (e == movie->cur_focus) {
+ movie->cur_focus = NULL;
+ }
+}
+
+void addButton(FlashMovie *movie, DisplayListEntry *e)
+{
+ if (movie->mouse_active == 0 &&
+ movie->cur_focus == NULL &&
+ movie->lost_over == (Button *)e->character) {
+ /* restore the lost focus */
+ e->renderState = stateOver;
+ e->oldState = stateOver;
+ ((Button *)e->character)->updateButtonState(e);
+ movie->lost_over = NULL;
+ movie->cur_focus = e;
+ }
+}
+
+DisplayList::DisplayList(FlashMovie *movie)
+{
+ list = NULL;
+ this->movie = movie;
+ bbox.reset();
+ isSprite = 0;
+}
+
+DisplayList::~DisplayList()
+{
+ clearList();
+}
+
+void
+DisplayList::clearList()
+{
+ DisplayListEntry *del, *e;
+
+ for(e = list; e;)
+ {
+ updateBoundingBox(e);
+ if (e->character->isButton()) {
+ deleteButton(movie,e);
+ }
+ del = e;
+ e = e->next;
+ delete del;
+ }
+ list = 0;
+}
+
+DisplayListEntry *
+DisplayList::getList()
+{
+ return list;
+}
+
+static void bbox(Rect *rect, Matrix *m, long x1, long y1)
+{
+ long x,y;
+
+ x = m->getX(x1,y1);
+ y = m->getY(x1,y1);
+ if (x < rect->xmin) rect->xmin = x;
+ if (x > rect->xmax) rect->xmax = x;
+ if (y < rect->ymin) rect->ymin = y;
+ if (y > rect->ymax) rect->ymax = y;
+}
+
+// Update bb to include boundary, optional reset of bb
+void transformBoundingBox(Rect *bb, Matrix *matrix, Rect *boundary, int reset)
+{
+ if (reset) {
+ bb->reset();
+ }
+
+ if (boundary->xmin != LONG_MAX) {
+ bbox(bb, matrix, boundary->xmin, boundary->ymin);
+ bbox(bb, matrix, boundary->xmax, boundary->ymin);
+ bbox(bb, matrix, boundary->xmin, boundary->ymax);
+ bbox(bb, matrix, boundary->xmax, boundary->ymax);
+ }
+}
+
+void
+DisplayList::placeObject(GraphicDevice *gd,Character *character, long depth, Matrix *matrix, Cxform *cxform, char *name)
+{
+ DisplayListEntry *n,*e,*prev;
+
+ n = new DisplayListEntry;
+ if (n == NULL) return;
+
+ n->depth = depth;
+ n->matrix = matrix;
+ n->cxform = cxform;
+ n->character = character;
+ n->instanceName = name;
+ n->owner = this;
+
+#if 0
+ printf("Dl %lx: placeObject: depth=%d character=%d cxform=%p\n",
+ this, n->depth,n->character ? n->character->getTagId() : 0, cxform);
+#endif
+
+ if (character == 0 || matrix == 0 || cxform == 0) {
+ for (e = list; e; prev = e, e = e->next) {
+ if (e->depth == n->depth) {
+ if (character == 0) {
+ n->character = e->character;
+ }
+ if (matrix == 0) {
+ n->matrix = e->matrix;
+ }
+ if (cxform == 0) {
+ n->cxform = e->cxform;
+ }
+ break;
+ }
+ }
+ }
+
+ if (n->character == 0) {
+ // Not found !!! Should not happen
+ // printf("PlaceObject cannot find character at depth %ld\n", n->depth);
+ delete n;
+ return;
+ }
+
+ prev = 0;
+ for (e = list; e; prev = e, e = e->next)
+ {
+ if (e->depth == n->depth) {
+ if (e->character->isButton()) {
+ deleteButton(movie, e);
+ }
+
+ // Do update, object has moved or been resized
+ updateBoundingBox(e);
+
+ // Replace object
+ e->depth = n->depth;
+ e->matrix = n->matrix;
+ e->cxform = n->cxform;
+ e->character = n->character;
+ /* if it is a button, we must update its state */
+ if (e->character->isButton()) {
+ movie->buttons_updated = 1;
+ addButton(movie, e);
+ }
+
+ updateBoundingBox(e);
+
+ delete n;
+ return;
+ }
+ if (e->depth > n->depth) break;
+ }
+ /* new object */
+
+ /* button instantiation */
+ if (n->character->isButton()) {
+ n->renderState = stateUp;
+ n->oldState = stateUp;
+ ((Button *)n->character)->updateButtonState(n);
+ addButton(movie,n);
+ }
+
+ updateBoundingBox(n);
+
+ if (prev == 0) {
+ // Object comes at first place
+ n->next = list;
+ list = n;
+ } else {
+ // Insert object
+ n->next = prev->next;
+ prev->next = n;
+ }
+}
+
+
+Character *
+DisplayList::removeObject(GraphicDevice *gd,Character *character, long depth)
+{
+ DisplayListEntry *e,*prev;
+
+ // List should not be empty
+ if (list == 0) return 0;
+
+#if 0
+ printf("removeObject: depth=%d character=%d\n",
+ depth,character ? character->getTagId() : 0);
+#endif
+
+ prev = 0;
+ for (e = list; e; prev = e, e = e->next) {
+ if (e->depth == depth) {
+ if (prev) {
+ prev->next = e->next;
+ } else {
+ list = e->next;
+ }
+ if (character == 0) {
+ character = e->character;
+ }
+ if (e->character->isButton()) {
+ deleteButton(movie, e);
+ }
+ if (e->character->isSprite()) {
+ ((Sprite*)e->character)->reset();
+ }
+
+ updateBoundingBox(e);
+
+ delete e;
+ return character;
+ }
+ }
+ return 0; // Should not happen
+}
+
+void
+DisplayList::updateBoundingBox(DisplayListEntry *e)
+{
+ Rect rect;
+
+ //rect.reset();
+ e->character->getBoundingBox(&rect,e);
+ transformBoundingBox(&this->bbox, e->matrix, &rect, 0);
+}
+
+int
+DisplayList::updateSprites()
+{
+ Sprite *sprite;
+ DisplayListEntry *e;
+ int refresh = 0;
+
+ for (e = this->list; e != NULL; e = e->next) {
+ if (e->character->isButton() && e->buttonCharacter) {
+ if (e->buttonCharacter->isSprite()) {
+ Matrix mat;
+
+ sprite = (Sprite *)e->buttonCharacter;
+ refresh |= sprite->program->dl->updateSprites();
+ refresh |= sprite->program->nestedMovie(this->movie->gd,this->movie->sm, e->matrix, e->cxform);
+ mat = (*e->matrix) * e->buttonMatrix;
+ transformBoundingBox(&this->bbox, &mat,
+ &(sprite->program->dl->bbox),
+ 0);
+ }
+ }
+ if (e->character->isSprite()) {
+ sprite = (Sprite *)e->character;
+ refresh |= sprite->program->dl->updateSprites();
+ refresh |= sprite->program->nestedMovie(this->movie->gd,this->movie->sm, e->matrix, e->cxform);
+ transformBoundingBox(&this->bbox, e->matrix,
+ &(sprite->program->dl->bbox),
+ 0);
+ }
+ }
+ return refresh;
+}
+
+/* Function can return either 0,1 or 2
+ 0: Nothing match, continue
+ 1: Something matches, but continue searching
+ 2: Something matches, but stop searching
+*/
+
+static int exploreButtons1(Program *prg, void *opaque,
+ ExploreButtonFunc func)
+{
+ DisplayListEntry *e;
+ int ret, ret2 = 0;
+
+ for(e=prg->dl->list; e != NULL; e = e->next) {
+ if (e->character == NULL) continue;
+ if (e->character->isButton()) {
+ ret = func(opaque,prg,e);
+ if (ret == 2) return ret; // Func asks to return at once !!!
+ if (ret) ret2 = 1;
+ }
+ if (e->character->isSprite()) {
+ ret = exploreButtons1(((Sprite *)e->character)->program,
+ opaque,func);
+ if (ret == 2) return ret; // Func asks to return at once !!!
+ if (ret) ret2 = 1;
+ }
+ }
+ return ret2;
+}
+
+int exploreButtons(FlashMovie *movie, void *opaque, ExploreButtonFunc func)
+{
+ CInputScript *script;
+ int ret;
+
+ script = movie->main;
+ while (script != NULL) {
+ if (script->program) {
+ ret = exploreButtons1(script->program, opaque, func);
+ if (ret) return ret;
+ }
+ script = script->next;
+ }
+ return 0;
+}
+
+typedef struct {
+ long x,y;
+ int hit;
+ DisplayListEntry *bhit;
+} HitTable;
+
+static void button_hit_func(void *id, long y, long start, long end)
+{
+ HitTable *h = (HitTable *) id;
+ if ( y == h->y && (h->x >= start && h->x < end) )
+ h->hit = 1;
+}
+
+typedef struct {
+ FlashMovie *movie;
+ DisplayListEntry *bhit;
+} ButtonHit;
+
+static int button_hit(void *opaque, Program *prg, DisplayListEntry *e)
+{
+ ButtonHit *h = (ButtonHit *) opaque;
+ HitTable hit_table;
+ FlashMovie *movie = h->movie;
+ Rect bb,boundary;
+ Matrix mat;
+ ButtonState save;
+
+ hit_table.x = movie->mouse_x;
+ hit_table.y = movie->mouse_y / FRAC;
+ hit_table.hit = 0;
+
+ // Compute the bounding box in screen coordinates
+ save = e->renderState;
+ e->renderState = stateHitTest;
+ e->character->getBoundingBox(&boundary,e);
+ e->renderState = save;
+ mat = (*movie->gd->adjust) * e->renderMatrix;
+ transformBoundingBox(&bb, &mat, &boundary, 1);
+ // Check if mouse is within bb
+ if (movie->mouse_x < bb.xmin) return 0;
+ if (movie->mouse_x > bb.xmax) return 0;
+ if (movie->mouse_y < bb.ymin) return 0;
+ if (movie->mouse_y > bb.ymax) return 0;
+
+ e->character->getRegion(movie->gd, &e->renderMatrix,
+ &hit_table, button_hit_func);
+
+ if (hit_table.hit) {
+ h->bhit = e;
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+static int button_reset(void *opaque, Program *prg, DisplayListEntry *e)
+{
+ if (e->renderState != stateUp) {
+ e->owner->updateBoundingBox(e);
+ e->oldState = e->renderState;
+ e->renderState = stateUp;
+ ((Button *)e->character)->updateButtonState(e);
+ e->owner->updateBoundingBox(e);
+ }
+ return 0;
+}
+
+/* update the button states according to the current mouse state & return the list of actions */
+void
+DisplayList::updateButtons(FlashMovie *movie)
+{
+ DisplayListEntry *bhit;
+ ButtonHit h;
+
+ if (movie->mouse_active) {
+
+ h.bhit = NULL;
+ h.movie = movie;
+
+ exploreButtons(movie, &h, button_hit);
+
+ bhit = h.bhit;
+
+ /* set every button to not hit */
+ exploreButtons(movie, NULL, button_reset);
+
+ if (bhit) {
+ ButtonState state;
+
+ if (movie->button_pressed) {
+ state = stateDown;
+ } else {
+ state = stateOver;
+ }
+ if (state != bhit->renderState) {
+ bhit->owner->updateBoundingBox(bhit);
+ bhit->renderState = state;
+ ((Button *)bhit->character)->updateButtonState(bhit);
+ bhit->owner->updateBoundingBox(bhit);
+ movie->cur_focus = bhit;
+ if (movie->cursorOnOff)
+ movie->cursorOnOff(1,movie->cursorOnOffClientData);
+ }
+ } else {
+ if (movie->cursorOnOff)
+ movie->cursorOnOff(0,movie->cursorOnOffClientData);
+ }
+ }
+}
+
+typedef struct {
+ ActionRecord *action; // Action to do
+ Program *prg; // Context program
+} ButtonAction;
+
+static int button_action(void *opaque, Program *prg, DisplayListEntry *e)
+{
+ ButtonAction *h = (ButtonAction *)opaque;
+ static ActionRecord actionRefresh;
+ static ActionRecord soundFx;
+ Button *b;
+ ActionRecord **paction;
+ int n;
+
+ actionRefresh.action = ActionRefresh;
+ actionRefresh.next = 0;
+
+ soundFx.action = ActionPlaySound;
+ soundFx.next = &actionRefresh;
+
+ b = (Button *)e->character;
+
+ if (e->oldState != e->renderState) {
+
+ paction = &actionRefresh.next;
+
+ if (b->conditionList) {
+ *paction = b->getActionFromTransition(e->renderState, e->oldState);
+ } else if (e->renderState == stateDown) {
+ /* if the button is pressed and
+ no condition list is defined*/
+ *paction = b->actionRecords;
+ }
+
+ switch(e->renderState) {
+ case stateUp:
+ n = 0;
+ break;
+ case stateOver:
+ n = 1;
+ break;
+ default:
+ /* case stateDown: */
+ n = 2;
+ break;
+ }
+
+ if (b->sound[n]) {
+ soundFx.sound = b->sound[n];
+ h->action = &soundFx;
+ } else {
+ h->action = &actionRefresh;
+ }
+
+ e->oldState = e->renderState;
+
+ h->prg = prg;
+ return 2;
+ }
+ h->action = 0; // Nothing to do about this
+ return 0;
+}
+
+int computeActions(FlashMovie *movie, Program **prg, ActionRecord **ar)
+{
+ ButtonAction h;
+
+ h.action = NULL;
+ exploreButtons(movie, &h, button_action);
+ if (h.action) {
+ *prg = h.prg;
+ *ar = h.action;
+ return 1;
+ }
+ return 0;
+}
+
+#define FOCUS_ZOOM 1.5
+/* in pixels */
+#define FOCUS_SIZE_MIN 50
+#define FOCUS_TRANSLATE 15
+
+int
+DisplayList::render(GraphicDevice *gd, Matrix *render_matrix, Cxform *cxform)
+{
+ DisplayListEntry *e,*cur_focus;
+ int sprite = 0;
+ long n = 0;
+ Cxform cxf,*cxf1;
+ Rect bb,boundary;
+
+ cur_focus = NULL;
+
+ /*
+ if (isSprite == 0) {
+ if (this->bbox.xmin == LONG_MAX) return 0;
+ gd->updateClippingRegion(&this->bbox, render_matrix);
+ gd->clearCanvas();
+ }
+ */
+
+ for (e = list; e; e = e->next)
+ {
+#if PRINT
+ printf("Character %3d @ %3d\n", e->character ? e->character->getTagId() : 0, e->depth);
+#endif
+ if (e->character) {
+ Matrix mat;
+
+ if (render_matrix) {
+ mat = *render_matrix;
+ }
+
+ if (e->matrix) {
+ mat = mat * (*e->matrix);
+ }
+
+ /* fast clipping */
+ // If object boundaries are outside current clip region give up with rendering
+ e->character->getBoundingBox(&boundary,e);
+ if (boundary.xmin != LONG_MAX) {
+ Matrix tmat;
+
+ tmat = (*gd->adjust) * mat;
+ transformBoundingBox(&bb, &tmat, &boundary, 1);
+
+ bb.xmin = bb.xmin >> FRAC_BITS;
+ bb.ymin = bb.ymin >> FRAC_BITS;
+ bb.xmax = (bb.xmax + FRAC - 1) >> FRAC_BITS;
+ bb.ymax = (bb.ymax + FRAC - 1) >> FRAC_BITS;
+
+ if (bb.xmin >= gd->clip_rect.xmax ||
+ bb.xmax <= gd->clip_rect.xmin ||
+ bb.ymin >= gd->clip_rect.ymax ||
+ bb.ymax <= gd->clip_rect.ymin) {
+ continue;
+ }
+ }
+
+ if (cxform == NULL) {
+ cxf1 = e->cxform;
+ }
+ else if (e->cxform == NULL) {
+ cxf1 = cxform;
+ }
+ else {
+ cxf1 = &cxf;
+ cxf.ra = cxform->ra * e->cxform->ra;
+ cxf.ga = cxform->ga * e->cxform->ga;
+ cxf.ba = cxform->ba * e->cxform->ba;
+ cxf.aa = cxform->aa * e->cxform->aa;
+
+ cxf.rb = (long)(cxform->ra * e->cxform->rb + cxform->rb);
+ cxf.gb = (long)(cxform->ga * e->cxform->gb + cxform->gb);
+ cxf.bb = (long)(cxform->ba * e->cxform->bb + cxform->bb);
+ cxf.ab = (long)(cxform->aa * e->cxform->ab + cxform->ab);
+ }
+
+ if (e->character->isButton()) {
+ Button *b = (Button *) e->character;
+
+ e->renderMatrix = mat;
+
+ if (e->renderState != stateUp && movie->mouse_active == 0) {
+ cur_focus = e;
+ ((Button *)e->character)->updateButtonState(e);
+ }
+
+ if (b->execute(gd, &mat, cxf1, e->renderState)) {
+ sprite = 1;
+ }
+ } else {
+ if (e->character->execute(gd, &mat, cxf1)) {
+ sprite = 1;
+ }
+ }
+
+ n++;
+ }
+ }
+
+#if 0
+ {
+ /* display the bounding box (debug) */
+ Matrix tmat;
+ long x1,x2,y1,y2;
+ Color white;
+
+ white.red = 255;
+ white.green = white.blue = 0;
+ gd->setForegroundColor(white);
+
+ if (render_matrix) {
+ tmat = (*gd->adjust) * (*render_matrix);
+ } else {
+ tmat = *gd->adjust;
+ }
+ x1 = bbox.xmin;
+ y1 = bbox.ymin;
+ x2 = bbox.xmax;
+ y2 = bbox.ymax;
+ gd->drawLine(tmat.getX(x1,y1),tmat.getY(x1,y1),tmat.getX(x2,y1),tmat.getY(x2,y1),10*FRAC);
+ gd->drawLine(tmat.getX(x2,y1),tmat.getY(x2,y1),tmat.getX(x2,y2),tmat.getY(x2,y2),10*FRAC);
+ gd->drawLine(tmat.getX(x2,y2),tmat.getY(x2,y2),tmat.getX(x1,y2),tmat.getY(x1,y2),10*FRAC);
+ gd->drawLine(tmat.getX(x1,y2),tmat.getY(x1,y2),tmat.getX(x1,y1),tmat.getY(x1,y1),10*FRAC);
+ bbox.print();
+ }
+#endif
+
+ // Reset clipping zone
+ bbox.reset();
+
+ return sprite;
+}
+
+void
+DisplayList::getBoundary(Rect *bb)
+{
+ DisplayListEntry *e;
+ Rect boundary;
+
+ bb->reset();
+ for (e = list; e; e = e->next)
+ {
+ if (e->character) {
+ e->character->getBoundingBox(&boundary,e);
+ transformBoundingBox(bb, e->matrix, &boundary, 0);
+ }
+ }
+}
+
+extern "C" {
+
+void dump_buttons(FlashHandle flashHandle)
+{
+#if 0
+ Rect rect;
+ DisplayListEntry *e;
+ FlashMovie *movie;
+
+ movie = (FlashMovie *)flashHandle;
+
+ for (e = movie->first_button; e; e = e->next_button) {
+ computeBBox(movie,&rect,e);
+ printf("button: id=%d pos=%d %d %d %d\n",
+ e->character->getTagId(),
+ rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+ }
+#endif
+}
+
+}
diff --git a/core/multimedia/opieplayer/libflash/displaylist.h b/core/multimedia/opieplayer/libflash/displaylist.h
new file mode 100644
index 0000000..536f628
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/displaylist.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _DISPLAYLIST_H_
+#define _DISPLAYLIST_H_
+
+class Character;
+class Program;
+
+struct DisplayList;
+
+// Display List management
+struct DisplayListEntry {
+ Character *character;
+ long depth;
+ Matrix *matrix;
+ Cxform *cxform;
+ char *instanceName;
+
+ /* button state */
+ ButtonState renderState;
+ ButtonState oldState;
+ Character *buttonCharacter;
+ Matrix buttonMatrix;
+ Matrix renderMatrix; /* last render matrix */
+
+ DisplayListEntry *next;
+
+ DisplayList *owner; // Parent
+};
+
+struct DisplayList {
+ DisplayListEntry *list;
+ FlashMovie *movie;
+ Rect bbox; // Delta clipping region
+ int isSprite;
+public:
+ DisplayList(FlashMovie *movie);
+ ~DisplayList();
+ DisplayListEntry *getList();
+ void clearList();
+ void placeObject(GraphicDevice *gd,Character *character, long depth, Matrix *matrix = 0, Cxform *cxform = 0, char *name = 0);
+ Character *removeObject(GraphicDevice *gd, Character *character, long depth);
+
+ int render(GraphicDevice *gd, Matrix *m = 0, Cxform *cxform = 0);
+ void updateBoundingBox(DisplayListEntry *);
+ void updateButtons (FlashMovie *);
+ void getBoundary(Rect *bb); // Returns boundary of current displayed objects
+ int updateSprites(); // Update sprites in the display list
+};
+
+typedef void (*DisplayListFunc)(DisplayListEntry *e, void *opaque);
+
+void updateButtons(FlashMovie *m);
+int computeActions(FlashMovie *m, Program **prog, ActionRecord **ar);
+void renderFocus(FlashMovie *movie);
+
+typedef int (*ExploreButtonFunc)(void *opaque, Program *prg, DisplayListEntry *e);
+int exploreButtons(FlashMovie *movie, void *opaque, ExploreButtonFunc func);
+void updateBoundingBox(DisplayListEntry *e);
+void transformBoundingBox(Rect *bb, Matrix *matrix, Rect *boundary, int reset);
+void updateButtonState(DisplayListEntry *e, ButtonState state);
+
+#endif /* _DISPLAYLIST_H_ */
diff --git a/core/multimedia/opieplayer/libflash/flash.cc b/core/multimedia/opieplayer/libflash/flash.cc
new file mode 100644
index 0000000..75d351c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/flash.cc
@@ -0,0 +1,275 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+#include "graphic16.h"
+#include "graphic24.h"
+#include "graphic32.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+// Interface with standard C
+extern "C" {
+
+FlashHandle
+FlashNew()
+{
+ FlashMovie *fh;
+
+ fh = new FlashMovie;
+
+ fh->main = new CInputScript;
+
+ return (FlashHandle)fh;
+}
+
+int
+FlashParse(FlashHandle flashHandle, int level, char *data, long size)
+{
+ FlashMovie *fh;
+ CInputScript *script;
+ int status = FLASH_PARSE_ERROR;
+
+ fh = (FlashMovie *)flashHandle;
+
+ for(script = fh->main; script != NULL; script = script->next) {
+ if (script->level == level) {
+ status = script->ParseData(fh, data, size);
+
+ if (status & FLASH_PARSE_START) {
+ fh->msPerFrame = 1000/fh->main->frameRate;
+ script->program->rewindMovie();
+ }
+ break;
+ }
+ }
+
+ return status;
+}
+
+void
+FlashGetInfo(FlashHandle flashHandle, struct FlashInfo *fi)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fi->version = fh->main->m_fileVersion;
+ fi->frameRate = fh->main->frameRate;
+ fi->frameCount = fh->main->frameCount;
+ fi->frameWidth = fh->main->frameRect.xmax - fh->main->frameRect.xmin;
+ fi->frameHeight = fh->main->frameRect.ymax - fh->main->frameRect.ymin;
+}
+
+long FlashGraphicInit(FlashHandle flashHandle, FlashDisplay *fd)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ switch (fd->bpp) {
+ case 4:
+ fh->gd = new GraphicDevice32(fd);
+ break;
+ case 3:
+ fh->gd = new GraphicDevice24(fd);
+ break;
+ case 2:
+ fh->gd = new GraphicDevice16(fd);
+ break;
+ default:
+ fprintf(stderr, "Unsupported depth\n");
+ }
+
+ fh->gd->setMovieDimension(fh->main->frameRect.xmax - fh->main->frameRect.xmin,
+ fh->main->frameRect.ymax - fh->main->frameRect.ymin);
+
+ return 1; // Ok
+}
+
+void
+FlashSoundInit(FlashHandle flashHandle, char *device)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->sm = new SoundMixer(device);
+}
+
+void
+FlashZoom(FlashHandle flashHandle, int zoom)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->gd->setMovieZoom(zoom);
+}
+
+void
+FlashOffset(FlashHandle flashHandle, int x, int y)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->gd->setMovieOffset(x,y);
+}
+
+long
+FlashExec(FlashHandle flashHandle, long flag,
+ FlashEvent *fe, struct timeval *wakeDate)
+{
+ FlashMovie *fh;
+ long wakeUp = 0;
+
+ fh = (FlashMovie *)flashHandle;
+
+ if (fh->main == NULL) return 0; // Not ready
+ if (fh->main->program == NULL) return 0; // Not ready
+ if (fh->main->program->nbFrames == 0) return 0; // Still not ready
+ if (fh->gd == 0) return 0;
+
+ switch (flag & FLASH_CMD_MASK) {
+ case FLASH_STOP:
+ fh->main->program->pauseMovie();
+ wakeUp = 0;
+ break;
+ case FLASH_CONT:
+ fh->main->program->continueMovie();
+ wakeUp = FLASH_STATUS_WAKEUP;
+ break;
+ case FLASH_REWIND:
+ fh->main->program->rewindMovie();
+ wakeUp = 0;
+ break;
+ case FLASH_STEP:
+ fh->main->program->nextStepMovie();
+ wakeUp = 0;
+ break;
+ }
+
+ if (flag & FLASH_WAKEUP) {
+ // Compute next wakeup time
+ gettimeofday(wakeDate,0);
+ wakeDate->tv_usec += fh->msPerFrame*1000;
+ if (wakeDate->tv_usec > 1000000) {
+ wakeDate->tv_usec -= 1000000;
+ wakeDate->tv_sec++;
+ }
+
+ // Play frame
+ wakeUp = fh->processMovie(fh->gd, fh->sm);
+ }
+
+ if (checkFlashTimer(&fh->scheduledTime)) {
+ if (fh->handleEvent(fh->gd, fh->sm, &fh->scheduledEvent)) {
+ wakeUp = 1;
+ }
+
+ setFlashTimer(&fh->scheduledTime, -1);
+ }
+
+ if (flag & FLASH_EVENT) {
+ wakeUp = fh->handleEvent(fh->gd, fh->sm, fe);
+ if (wakeUp) {
+ /* Wake up at once, except for mouse move (40 ms after) */
+ gettimeofday(wakeDate,0);
+ if (fe->type == FeMouseMove) {
+ wakeDate->tv_usec += 40*1000;
+ if (wakeDate->tv_usec > 1000000) {
+ wakeDate->tv_usec -= 1000000;
+ wakeDate->tv_sec++;
+ }
+ }
+ }
+ }
+
+ return wakeUp || (fh->scheduledTime.tv_sec != -1);
+}
+
+void FlashSetGetSwfMethod(FlashHandle flashHandle, void (*getSwf)(char *url, int level, void *clientData), void *clientData)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->getSwf = getSwf;
+ fh->getSwfClientData = clientData;
+}
+
+
+void
+FlashSetCursorOnOffMethod(FlashHandle flashHandle, void (*cursorOnOff)(int , void *), void *clientData)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->cursorOnOff = cursorOnOff;
+ fh->cursorOnOffClientData = clientData;
+}
+
+void
+FlashSetGetUrlMethod(FlashHandle flashHandle, void (*getUrl)(char *, char *, void *), void *clientData)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->getUrl = getUrl;
+ fh->getUrlClientData = clientData;
+}
+
+void
+FlashClose(FlashHandle flashHandle)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ delete fh;
+}
+
+void
+FlashSettings(FlashHandle flashHandle, long settings)
+{
+ FlashMovie *fh;
+
+ fh = (FlashMovie *)flashHandle;
+
+ fh->main->program->modifySettings( settings );
+}
+
+int shape_size,shape_nb,shaperecord_size,shaperecord_nb,style_size,style_nb;
+
+void flash_dump(void)
+{
+ printf("flash: shape_size=%d (nb=%d)\n",shape_size,shape_nb);
+ printf("flash: shaperecord_size=%d (nb=%d)\n",shaperecord_size,shaperecord_nb);
+ printf("flash: style_size=%d (nb=%d)\n",style_size,style_nb);
+}
+
+}; /* end of extern C */
diff --git a/core/multimedia/opieplayer/libflash/flash.h b/core/multimedia/opieplayer/libflash/flash.h
new file mode 100644
index 0000000..9330713
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/flash.h
@@ -0,0 +1,129 @@
+/*///////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////// */
+#ifndef _FLASH_H_
+#define _FLASH_H_
+
+#define PLUGIN_NAME "Shockwave Flash"
+#define FLASH_VERSION_STRING "Version 0.4.10"
+
+/* Flags to pass to FlashExec */
+#define FLASH_WAKEUP 0x01
+#define FLASH_EVENT 0x02
+#define FLASH_CMD 0x04
+
+/* Mask to extract commands */
+#define FLASH_CMD_MASK 0xf0
+/* Commands */
+#define FLASH_STOP 0x10 /* Pause the movie */
+#define FLASH_CONT 0x20 /* Continue the movie after pause */
+#define FLASH_REWIND 0x30 /* Rewind the movie and pause */
+#define FLASH_STEP 0x40 /* Frame by frame operation */
+
+/* return codes of FlashExec */
+#define FLASH_STATUS_WAKEUP 0x01 /* FlashExec must be called again after a given time */
+
+struct FlashInfo {
+ long frameRate;
+ long frameCount;
+ long frameWidth;
+ long frameHeight;
+ long version;
+};
+
+/* Player settings */
+#define PLAYER_LOOP (1<<0)
+#define PLAYER_QUALITY (1<<1)
+#define PLAYER_MENU (1<<2)
+
+/* Parser status */
+#define FLASH_PARSE_ERROR 0
+#define FLASH_PARSE_START 1
+#define FLASH_PARSE_NEED_DATA 2
+#define FLASH_PARSE_EOM 4
+#define FLASH_PARSE_WAKEUP 8
+#define FLASH_PARSE_OOM 16 /* Out Of Memory */
+
+typedef void *FlashHandle;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+enum FlashEventType {
+ FeNone,
+ FeMouseMove,
+ FeButtonPress,
+ FeButtonRelease,
+ FeRefresh,
+ FeKeyPress,
+ /* internal events */
+ FeKeyRelease,
+};
+
+enum FlashKey {
+ FeKeyUp = 1,
+ FeKeyDown,
+ FeKeyLeft,
+ FeKeyRight,
+ FeKeyEnter,
+ FeKeyNext
+};
+
+
+
+typedef struct FlashEvent {
+ enum FlashEventType type;
+ int x,y; /* Mouse coordinates,
+ relative to upper-left window corner */
+ enum FlashKey key;
+} FlashEvent;
+
+typedef struct FlashDisplay {
+ void *pixels;
+ int bpl; /* bytes per line */
+ int width;
+ int height;
+ int depth;
+ int bpp;
+ int flash_refresh;
+ /* Clipping region */
+ int clip_x, clip_y;
+ int clip_width, clip_height;
+} FlashDisplay;
+
+extern FlashHandle FlashNew();
+extern void FlashGetInfo(FlashHandle fh, struct FlashInfo *fi);
+extern long FlashGraphicInit(FlashHandle fh, FlashDisplay *fd);
+extern void FlashSoundInit(FlashHandle fh, char *device);
+extern int FlashParse(FlashHandle fh, int level, char *data, long size);
+extern long FlashExec(FlashHandle fh, long flag, FlashEvent *fe, struct timeval *wakeDate);
+extern void FlashClose(FlashHandle fh);
+extern void FlashSetGetUrlMethod(FlashHandle flashHandle, void (*getUrl)(char *, char *, void *), void *);
+extern void FlashSetGetSwfMethod(FlashHandle flashHandle, void (*getSwf)(char *url, int level, void *clientData), void *clientData);
+extern void FlashSetCursorOnOffMethod(FlashHandle flashHandle, void (*cursorOnOff)(int , void *), void *clientData);
+extern void FlashZoom(FlashHandle fh, int zoom);
+extern void FlashOffset(FlashHandle fh, int x, int y);
+extern void FlashSettings(FlashHandle fh, long settings);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+};
+#endif
+
+#endif /* _FLASH_H_ */
diff --git a/core/multimedia/opieplayer/libflash/font.cc b/core/multimedia/opieplayer/libflash/font.cc
new file mode 100644
index 0000000..d937276
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/font.cc
@@ -0,0 +1,105 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+SwfFont::SwfFont(long id) : Character(FontType, id)
+{
+ glyphs = 0;
+ nbGlyphs = 0;
+ name = NULL;
+ setFontName("Unknown");
+ flags = (FontFlags)0;
+ lookUpTable = 0;
+}
+
+SwfFont::~SwfFont()
+{
+ if (lookUpTable) {
+ delete lookUpTable;
+ }
+ delete name;
+ delete [] glyphs;
+}
+
+void
+SwfFont::setFontFlags(FontFlags f)
+{
+ flags = f;
+}
+
+char *
+SwfFont::getName()
+{
+ return name;
+}
+
+FontFlags
+SwfFont::getFlags()
+{
+ return flags;
+}
+
+long
+SwfFont::getNbGlyphs()
+{
+ return nbGlyphs;
+}
+
+Shape *
+SwfFont::getGlyph(long index)
+{
+ if (index >= nbGlyphs) return 0;
+ return &glyphs[index];
+}
+
+long
+SwfFont::getGlyphCode(long index)
+{
+ if (lookUpTable == 0 || index >= nbGlyphs) return 0;
+ return lookUpTable[index];
+}
+
+void
+SwfFont::setFontName(char *str)
+{
+ delete name;
+ name = new char[strlen(str)+1];
+ strcpy(name,str);
+}
+
+void
+SwfFont::setFontLookUpTable(long *lut)
+{
+ lookUpTable = lut;
+}
+
+void
+SwfFont::setFontShapeTable(Shape *shapes, long n)
+{
+ glyphs = shapes;
+ nbGlyphs = n;
+}
diff --git a/core/multimedia/opieplayer/libflash/font.h b/core/multimedia/opieplayer/libflash/font.h
new file mode 100644
index 0000000..bc151ca
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/font.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _SWFFONT_H_
+#define _SWFFONT_H_
+
+class SwfFont : public Character {
+ Shape *glyphs; // Array
+ long nbGlyphs;
+ char *name;
+ FontFlags flags;
+ long *lookUpTable; // Array
+
+ // Font2
+ long ascent;
+ long descent;
+ long leading;
+
+public:
+ SwfFont(long id);
+ ~SwfFont();
+
+ void setFontShapeTable(Shape *shapes, long n);
+ void setFontName(char *str);
+ void setFontLookUpTable(long *lut);
+ void setFontFlags(FontFlags f);
+ long getGlyphCode(long index);
+ long getNbGlyphs();
+ Shape *getGlyph(long index);
+
+ char *getName();
+ FontFlags getFlags();
+
+#ifdef DUMP
+ void dump(BitStream *bs);
+ void dumpFontInfo(BitStream *bs);
+#endif
+};
+
+#endif /* _SWFFONT_H_ */
diff --git a/core/multimedia/opieplayer/libflash/graphic.cc b/core/multimedia/opieplayer/libflash/graphic.cc
new file mode 100644
index 0000000..f65011e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic.cc
@@ -0,0 +1,632 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+#define PRINT 0
+
+// Public
+
+GraphicDevice::GraphicDevice(FlashDisplay *fd)
+{
+ flashDisplay = fd;
+
+ bgInitialized = 0;
+
+ // Reset flash refresh flag
+ flashDisplay->flash_refresh = 0;
+
+ /* 16 bits, RGB565 */
+ redMask = 0xF800;
+ greenMask = 0x07E0;
+ blueMask = 0x001F;
+
+ /* should be the actual window size */
+ targetWidth = fd->width;
+ targetHeight = fd->height;
+ bpl = fd->bpl;
+
+#if PRINT
+ printf("Target Width = %d\n", targetWidth);
+ printf("Target Height = %d\n", targetHeight);
+#endif
+
+ zoom = FRAC;
+ movieWidth = targetWidth;
+ movieHeight = targetHeight;
+
+ viewPort.xmin = 0;
+ viewPort.xmax = targetWidth-1;
+ viewPort.ymin = 0;
+ viewPort.ymax = targetHeight-1;
+
+ canvasBuffer = (unsigned char *) fd->pixels;
+
+ adjust = new Matrix;
+ foregroundColor.red = 0;
+ foregroundColor.green = 0;
+ foregroundColor.blue = 0;
+ foregroundColor.alpha = ALPHA_OPAQUE;
+
+ backgroundColor.red = 0;
+ backgroundColor.green = 0;
+ backgroundColor.blue = 0;
+ backgroundColor.alpha = ALPHA_OPAQUE;
+
+ showMore = 0;
+
+ setClipping(0); // Reset
+ setClipping(1);
+
+ /* polygon rasterizer : handle memory errors ! */
+
+ height = targetHeight;
+ segs = (Segment **)malloc(height * sizeof(Segment *));
+ memset(segs, 0, height * sizeof(Segment *));
+ ymin = height;
+ ymax = -1;
+
+ seg_pool = (Segment *)malloc(NB_SEGMENT_MAX * sizeof(Segment));
+ seg_pool_cur = seg_pool;
+}
+
+GraphicDevice::~GraphicDevice()
+{
+ free(segs);
+ free(seg_pool);
+
+ if (adjust) {
+ delete adjust;
+ }
+}
+
+Color *
+GraphicDevice::getColormap(Color *old, long n, Cxform *cxform)
+{
+ Color *newCmp;
+
+ newCmp = new Color[n];
+ if (newCmp == NULL) return NULL;
+
+ if (cxform) {
+ for(long i = 0; i < n; i++)
+ {
+ newCmp[i] = cxform->getColor(old[i]);
+ newCmp[i].pixel = allocColor(newCmp[i]);
+ }
+ } else {
+ for(long i = 0; i < n; i++)
+ {
+ newCmp[i] = old[i];
+ newCmp[i].pixel = allocColor(old[i]);
+ }
+ }
+
+ return newCmp;
+}
+
+long
+GraphicDevice::getHeight()
+{
+ return targetHeight;
+}
+
+long
+GraphicDevice::getWidth()
+{
+ return targetWidth;
+}
+
+Color
+GraphicDevice::getForegroundColor()
+{
+ return foregroundColor;
+}
+
+void
+GraphicDevice::setForegroundColor(Color color)
+{
+ foregroundColor = color;
+}
+
+Color
+GraphicDevice::getBackgroundColor()
+{
+ return backgroundColor;
+}
+
+int
+GraphicDevice::setBackgroundColor(Color color)
+{
+ if (bgInitialized == 0) {
+ backgroundColor = color;
+ clearCanvas();
+ bgInitialized = 1;
+ return 1;
+ }
+ return 0;
+}
+
+void
+GraphicDevice::setMovieDimension(long width, long height)
+{
+ float xAdjust, yAdjust;
+
+ movieWidth = width;
+ movieHeight = height;
+
+ xAdjust = (float)targetWidth*zoom/(float)width;
+ yAdjust = (float)targetHeight*zoom/(float)height;
+
+ if (xAdjust < yAdjust) {
+ adjust->a = xAdjust;
+ adjust->d = xAdjust;
+ adjust->ty = ((targetHeight*zoom) - (long)(height * xAdjust))/2;
+ viewPort.ymin = adjust->ty/zoom;
+ viewPort.ymax = targetHeight-viewPort.ymin-1;
+ } else {
+ adjust->a = yAdjust;
+ adjust->d = yAdjust;
+ adjust->tx = ((targetWidth*zoom) - (long)(width * yAdjust))/2;
+ viewPort.xmin = adjust->tx/zoom;
+ viewPort.xmax = targetWidth-viewPort.xmin-1;
+ }
+
+ if (viewPort.xmin < 0) viewPort.xmin = 0;
+ if (viewPort.ymin < 0) viewPort.ymin = 0;
+ if (viewPort.xmax >= targetWidth) viewPort.xmax = targetWidth-1;
+ if (viewPort.ymax >= targetHeight) viewPort.ymax = targetHeight-1;
+}
+
+void
+GraphicDevice::setMovieZoom(int z)
+{
+ z *= FRAC;
+ if (z <= 0 || z > 100) return;
+ zoom = z;
+ setMovieDimension(movieWidth,movieHeight);
+}
+
+void
+GraphicDevice::setMovieOffset(long x, long y)
+{
+ adjust->tx = -zoom*x;
+ adjust->ty = -zoom*y;
+}
+
+long
+GraphicDevice::clip(long &y, long &start, long &end)
+{
+ long xmin,xend;
+
+ if (y < clip_rect.ymin ||
+ y >= clip_rect.ymax) return 1;
+ if (end <= start)
+ return 1;
+ xmin = clip_rect.xmin * FRAC;
+ xend = clip_rect.xmax * FRAC;
+
+ if (end <= xmin || start >= xend) return 1;
+
+ if (start < xmin) start = xmin;
+ if (end > xend) end = xend;
+
+ return 0;
+}
+
+void
+GraphicDevice::drawBox(long x1, long y1, long x2, long y2)
+{
+ int i;
+
+ for(i=0;i<FRAC*2;i++) {
+ drawLine(x1+i, y1+i, x2-i, y1+i, 0);
+ drawLine(x1+i, y2-i, x2-i, y2-i, 0);
+
+ drawLine(x1+i, y1+i+1, x1+i, y2-i-1, 0);
+ drawLine(x2-i, y1+i+1, x2-i, y2-i-1, 0);
+ }
+}
+
+/* polygon rasteriser */
+
+inline Segment *
+GraphicDevice::allocSeg()
+{
+ Segment *seg;
+
+ if ( (seg_pool_cur - seg_pool) >= NB_SEGMENT_MAX )
+ return NULL;
+ seg = seg_pool_cur++;
+
+ return seg;
+}
+
+/* add a segment to the current path */
+void
+GraphicDevice::addSegment(long x1, long y1, long x2, long y2,
+ FillStyleDef *f0,
+ FillStyleDef *f1,
+ int aa)
+{
+ Segment *seg,**segs;
+ long dX, X, Y, ymin, ymax, tmp;
+ FillStyleDef *ff;
+
+ if ( y1 == y2 ) {
+ return;
+ }
+
+ if (y1 < y2) {
+ ymin = y1;
+ ymax = y2;
+ ff = f0;
+ f0 = f1;
+ f1 = ff;
+ } else {
+ ymin = y2;
+ ymax = y1;
+ tmp = x1;
+ x1 = x2;
+ x2 = tmp;
+ }
+
+ if (ymax>>FRAC_BITS < clip_rect.ymin) {
+ return;
+ }
+ if (ymin>>FRAC_BITS > clip_rect.ymax) {
+ return;
+ }
+
+ X = x1 << SEGFRAC;
+ dX = ((x2 - x1)<<SEGFRAC)/(ymax-ymin);
+
+ if (ymin < 0) {
+ X += dX * (-ymin);
+ ymin = 0;
+ }
+
+ Y = (ymin + (FRAC-1)) & ~(FRAC-1);
+ if (Y > ymax) {
+ //printf("Elimine @ y = %d ymin = %d, ymax = %d\n", Y, ymin, seg->ymax);
+ return;
+ }
+ X += dX * (Y-ymin);
+
+ Y >>= FRAC_BITS;
+ if (Y >= clip_rect.ymax) {
+ return;
+ }
+
+ seg = allocSeg();
+ if (seg == NULL) {
+ return;
+ }
+
+ seg->next = 0;
+ seg->nextValid = 0;
+ seg->aa = aa;
+ seg->ymax = ymax;
+ seg->x1 = x1;
+ seg->x2 = x2;
+ seg->X = X;
+ seg->dX = dX;
+ seg->fs[0] = f0;
+ seg->fs[1] = f1;
+
+ if (Y < this->ymin) this->ymin = Y;
+ ymax = (seg->ymax + FRAC - 1) >> FRAC_BITS;
+ if (ymax >= this->height) ymax = this->height-1;
+ if (ymax > this->ymax) this->ymax = ymax;
+
+ segs = this->segs;
+
+ if (segs[Y] == 0) {
+ segs[Y] = seg;
+ } else {
+ Segment *s,*prev;
+
+ prev = 0;
+ for(s = segs[Y]; s; prev = s, s = s->next) {
+ if (s->X > seg->X) {
+ if (prev) {
+ prev->next = seg;
+ seg->next = s;
+ } else {
+ seg->next = segs[Y];
+ segs[Y] = seg;
+ }
+ break;
+ }
+ }
+ if (s == 0) {
+ prev->next = seg;
+ seg->next = s;
+ }
+ }
+}
+
+inline Segment *
+GraphicDevice::progressSegments(Segment * curSegs, long y)
+{
+ Segment *seg,*prev;
+
+ // Update current segments
+ seg = curSegs;
+ prev = 0;
+ while(seg)
+ {
+ if ((y*FRAC) > seg->ymax) {
+ // Remove this segment, no more valid
+ if (prev) {
+ prev->nextValid = seg->nextValid;
+ } else {
+ curSegs = seg->nextValid;
+ }
+ seg = seg->nextValid;
+ } else {
+ seg->X += seg->dX * FRAC;
+ prev = seg;
+ seg = seg->nextValid;
+ }
+ }
+ return curSegs;
+}
+
+inline Segment *
+GraphicDevice::newSegments(Segment *curSegs, Segment *newSegs)
+{
+ Segment *s,*seg,*prev;
+
+ s = curSegs;
+ prev = 0;
+
+ // Check for new segments
+ for (seg = newSegs; seg; seg=seg->next)
+ {
+ // Place it at the correct position according to X
+ if (curSegs == 0) {
+ curSegs = seg;
+ seg->nextValid = 0;
+ } else {
+ for(; s; prev = s, s = s->nextValid)
+ {
+ if ( s->X > seg->X ||
+ ( (s->X == seg->X) &&
+ ( (seg->x1 == s->x1 && seg->dX < s->dX) ||
+ (seg->x2 == s->x2 && seg->dX > s->dX)
+ ))) {
+ // Insert before s
+ if (prev) {
+ seg->nextValid = s;
+ prev->nextValid = seg;
+ } else {
+ seg->nextValid = curSegs;
+ curSegs = seg;
+ }
+ break;
+ }
+ }
+ // Append at the end
+ if (s == 0) {
+ prev->nextValid = seg;
+ seg->nextValid = 0;
+ }
+ }
+
+ s = seg;
+ }
+
+ return curSegs;
+}
+
+#if 0
+static void
+printSeg(Segment *seg)
+{
+ /*
+ printf("Seg %08x : X = %5d, Ft = %d, Cl = %2x/%2x/%2x, Cr = %2x/%2x/%2x, x1=%5d, x2=%5d, ymin=%5d, ymax=%5d\n", seg,
+ seg->X>>SEGFRAC,
+ seg->right ? seg->right->type: -1,
+ seg->left ? seg->left->color.red : -1,
+ seg->left ? seg->left->color.green : -1,
+ seg->left ? seg->left->color.blue : -1,
+ seg->right ? seg->right->color.red : -1,
+ seg->right ? seg->right->color.green : -1,
+ seg->right ? seg->right->color.blue : -1,
+ seg->x1, seg->x2, seg->ymin, seg->ymax);
+ */
+}
+#endif
+
+inline void
+GraphicDevice::renderScanLine(long y, Segment *curSegs)
+{
+ Segment *seg;
+ long width;
+ int fi = 1;
+ FillStyleDef *f;
+
+ width = targetWidth * FRAC;
+
+ if (curSegs && curSegs->fs[0] && curSegs->fs[1] == 0) {
+ fi = 0;
+ }
+ for(seg = curSegs; seg && seg->nextValid; seg = seg->nextValid)
+ {
+ if (seg->nextValid->X <0) continue;
+ if ((seg->X>>SEGFRAC) > width) break;
+ f = seg->fs[fi];
+ if (f) {
+ switch (f->type) {
+ case f_Solid:
+ if (seg->aa) {
+ fillLineAA(f, y, seg->X>>SEGFRAC, seg->nextValid->X>>SEGFRAC);
+ } else {
+ fillLine(f, y, seg->X>>SEGFRAC, seg->nextValid->X>>SEGFRAC);
+ }
+ break;
+ case f_TiledBitmap:
+ case f_clippedBitmap:
+ fillLineBitmap(f, y, seg->X>>SEGFRAC, seg->nextValid->X>>SEGFRAC);
+ break;
+ case f_LinearGradient:
+ fillLineLG(&f->gradient, y, seg->X>>SEGFRAC, seg->nextValid->X>>SEGFRAC);
+ break;
+ case f_RadialGradient:
+ fillLineRG(&f->gradient, y, seg->X>>SEGFRAC, seg->nextValid->X>>SEGFRAC);
+ break;
+ case f_None:
+ break;
+ }
+ }
+ }
+}
+
+/* draw the current path */
+void
+GraphicDevice::drawPolygon(void)
+{
+ long y;
+ Segment *curSegs,*seg;
+
+ // no segments ?
+ if (this->ymax == -1)
+ return;
+
+ // Foreach scanline
+ curSegs = 0;
+ for(y=this->ymin; y <= this->ymax; y++) {
+
+ // Make X values progess and remove unuseful segments
+ curSegs = progressSegments(curSegs, y);
+
+ // Add the new segment starting at the y position.
+ curSegs = newSegments(curSegs, this->segs[y]);
+
+ // Render the scanline
+ if (this->scan_line_func == NULL) {
+ renderScanLine(y, curSegs);
+ } else {
+ for(seg = curSegs; seg && seg->nextValid; seg = seg->nextValid) {
+ if (seg->nextValid->X >= seg->X) {
+ scan_line_func(this->scan_line_func_id, y, seg->X>>SEGFRAC, seg->nextValid->X>>SEGFRAC);
+ }
+ }
+ }
+ }
+
+ /* free the segments */
+ memset(this->segs + this->ymin, 0,
+ (this->ymax - this->ymin + 1) * sizeof(Segment *));
+
+ this->ymax = -1;
+ this->ymin = this->height;
+
+ this->seg_pool_cur = this->seg_pool;
+}
+
+void
+GraphicDevice::updateClippingRegion(Rect *rect)
+{
+ if (!clipping) return;
+
+ transformBoundingBox(&clip_rect, adjust, rect, 1);
+ clip_rect.xmin >>= FRAC_BITS;
+ clip_rect.xmax >>= FRAC_BITS;
+ clip_rect.ymin >>= FRAC_BITS;
+ clip_rect.ymax >>= FRAC_BITS;
+
+ clip_rect.xmin-=2;
+ clip_rect.ymin-=2;
+ clip_rect.xmax+=2;
+ clip_rect.ymax+=2;
+
+ if (clip_rect.xmin < viewPort.xmin) clip_rect.xmin = viewPort.xmin;
+ if (clip_rect.xmax < viewPort.xmin) clip_rect.xmax = viewPort.xmin;
+ if (clip_rect.ymin < viewPort.ymin) clip_rect.ymin = viewPort.ymin;
+ if (clip_rect.ymax < viewPort.ymin) clip_rect.ymax = viewPort.ymin;
+
+ if (clip_rect.xmax > viewPort.xmax) clip_rect.xmax = viewPort.xmax;
+ if (clip_rect.ymax > viewPort.ymax) clip_rect.ymax = viewPort.ymax;
+ if (clip_rect.xmin > viewPort.xmax) clip_rect.xmin = viewPort.xmax;
+ if (clip_rect.ymin > viewPort.ymax) clip_rect.ymin = viewPort.ymax;
+}
+
+void
+GraphicDevice::setClipping(int value)
+{
+ clipping = value;
+ if (clipping == 0) {
+ // Reset region
+ clip_rect.xmin = viewPort.xmin;
+ clip_rect.xmax = viewPort.xmax;
+ clip_rect.ymin = viewPort.ymin;
+ clip_rect.ymax = viewPort.ymax;
+ }
+}
+
+// Virtual
+void
+GraphicDevice::clearCanvas()
+{
+}
+
+long
+GraphicDevice::allocColor(Color color)
+{
+ return 0;
+}
+
+void
+GraphicDevice::fillLineBitmap(FillStyleDef *f, long y, long start, long end)
+{
+}
+
+void
+GraphicDevice::fillLineLG(Gradient *grad, long y, long start, long end)
+{
+}
+
+void
+GraphicDevice::fillLineRG(Gradient *grad, long y, long start, long end)
+{
+}
+
+void
+GraphicDevice::fillLine(FillStyleDef *f, long y, long start, long end)
+{
+}
+
+void
+GraphicDevice::fillLineAA(FillStyleDef *f, long y, long start, long end)
+{
+}
+
+void
+GraphicDevice::drawLine(long x1, long y1, long x2, long y2, long width)
+{
+}
diff --git a/core/multimedia/opieplayer/libflash/graphic.h b/core/multimedia/opieplayer/libflash/graphic.h
new file mode 100644
index 0000000..63ebd99
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic.h
@@ -0,0 +1,174 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _GRAPHIC_H_
+#define _GRAPHIC_H_
+
+#define ALPHA_OPAQUE 255
+
+enum FillType {
+ f_Solid = 0x00,
+ f_LinearGradient = 0x10,
+ f_RadialGradient = 0x12,
+ f_TiledBitmap = 0x40,
+ f_clippedBitmap = 0x41,
+ f_None = 0x80
+};
+
+struct Gradient {
+ int nbGradients;
+ unsigned char ratio[8];
+ Color color[8];
+ // For rendering
+ Color *ramp;
+ Matrix imat;
+ int has_alpha;
+};
+
+
+struct FillStyleDef {
+ FillType type; // See enum FillType
+
+ // Solid
+ Color color;
+
+ // Gradient
+ Gradient gradient;
+
+ // Bitmap
+ Bitmap *bitmap;
+ Matrix bitmap_matrix;
+ Color *cmap;
+ unsigned char *alpha_table;
+
+ // Gradient or Bitmap
+ Matrix matrix;
+
+ FillStyleDef() {
+ style_size += sizeof(FillStyleDef);
+ style_nb++;
+ }
+};
+
+struct Segment {
+ long x1,x2;
+ long ymax;
+ FillStyleDef *fs[2]; // 0 is left 1 is right
+ int aa;
+ long dX;
+ long X;
+
+ struct Segment *next;
+ struct Segment *nextValid;
+};
+
+/* fractional bits (we don't use twips here... too expensive) */
+#define FRAC_BITS 5
+#define FRAC (1 << FRAC_BITS)
+#define NB_SEGMENT_MAX (2048*4)
+#define SEGFRAC 8
+
+class GraphicDevice {
+ int targetWidth;
+ int targetHeight;
+ Rect viewPort;
+ int movieWidth;
+ int movieHeight;
+ int zoom;
+ unsigned long redMask;
+ unsigned long greenMask;
+ unsigned long blueMask;
+ int clipping;
+
+public:
+ FlashDisplay *flashDisplay;
+ int bgInitialized;
+ Color backgroundColor;
+ Color foregroundColor;
+
+public:
+ void *scan_line_func_id;
+ ScanLineFunc scan_line_func;
+ Rect clip_rect;
+
+private:
+ Segment **segs;
+ int ymin,ymax;
+ int height;
+ Segment *seg_pool;
+ Segment *seg_pool_cur;
+
+ Segment * allocSeg();
+ Segment * progressSegments(Segment * curSegs, long y);
+ Segment * newSegments(Segment *curSegs, Segment *newSegs);
+ void renderScanLine(long y, Segment *curSegs);
+
+protected:
+ long clip(long &y, long &start, long &end);
+
+public:
+ Matrix *adjust; // Matrix to fit window (shrink or expand)
+
+ long showMore; // Used for debugging
+
+ // For Direct Graphics
+ unsigned char *canvasBuffer; // A pointer to canvas'memory
+ long bpl; // Bytes per line
+ long bpp; // Bytes per pixel
+ long pad; // Scanline pad in byte
+
+ GraphicDevice(FlashDisplay *fd);
+ virtual ~GraphicDevice();
+
+ int setBackgroundColor(Color);
+ void setForegroundColor(Color);
+ Color getBackgroundColor();
+ Color getForegroundColor();
+ void setMovieDimension(long width, long height);
+ void setMovieZoom(int zoom);
+ void setMovieOffset(long x, long y);
+ long getWidth();
+ long getHeight();
+ Color *getColormap(Color *old, long n, Cxform *cxform);
+
+ void drawBox(long x1, long y1, long x2, long y2);
+
+ void addSegment(long x1, long y1, long x2, long y2,
+ FillStyleDef *f0,
+ FillStyleDef *f1,
+ int aa);
+
+ void drawPolygon(void);
+
+ void updateClippingRegion(Rect *);
+ void setClipping(int);
+
+ // Virtual functions
+ virtual void clearCanvas();
+ virtual long allocColor(Color color);
+ virtual void fillLineBitmap(FillStyleDef *f, long y, long start, long end);
+ virtual void fillLineLG(Gradient *grad, long y, long start, long end);
+ virtual void fillLineRG(Gradient *grad, long y, long start, long end);
+ virtual void fillLine(FillStyleDef *f, long y, long start, long end);
+ virtual void fillLineAA(FillStyleDef *f, long y, long start, long end);
+ virtual void drawLine(long x1, long y1, long x2, long y2, long width);
+
+};
+
+#endif /* _GRAPHIC_H_ */
diff --git a/core/multimedia/opieplayer/libflash/graphic16.cc b/core/multimedia/opieplayer/libflash/graphic16.cc
new file mode 100644
index 0000000..24d0c20
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic16.cc
@@ -0,0 +1,658 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#include "graphic16.h"
+
+extern unsigned char SQRT[];
+
+#define FULL_AA
+
+#define PRINT 0
+
+typedef unsigned short TYPE;
+
+GraphicDevice16::GraphicDevice16(FlashDisplay *fd) : GraphicDevice(fd)
+{
+}
+
+long
+GraphicDevice16::allocColor(Color color)
+{
+ return (color.red >> 3)<<11 | (color.green>>2)<<5 | (color.blue>>3);
+}
+
+void
+GraphicDevice16::clearCanvas()
+{
+ TYPE pixel;
+ TYPE *point,*p;
+ long h, w,n;
+
+ if (!bgInitialized) return;
+
+ pixel = allocColor(backgroundColor);
+
+ point = (TYPE *)(canvasBuffer + clip_rect.ymin * bpl) + clip_rect.xmin;
+ w = clip_rect.xmax - clip_rect.xmin;
+ h = clip_rect.ymax - clip_rect.ymin;
+
+ while (h--) {
+ p = point;
+ n = w;
+ while (n--) {
+ *p++ = pixel;
+ }
+
+ point = (TYPE *)((char *)point + bpl);
+ }
+
+ flashDisplay->flash_refresh = 1;
+ flashDisplay->clip_x = clip_rect.xmin;
+ flashDisplay->clip_y = clip_rect.ymin;
+ flashDisplay->clip_width = clip_rect.xmax-clip_rect.xmin;
+ flashDisplay->clip_height = clip_rect.ymax-clip_rect.ymin;
+}
+
+#define RED_MASK 0xF800
+#define GREEN_MASK 0x07E0
+#define BLUE_MASK 0x001F
+
+/* alpha = 0 : select c1, alpha = 255 select c2 */
+static inline unsigned long
+mix_alpha(unsigned long c1,
+ unsigned long c2, int alpha)
+{
+ long r1,r2,r;
+ long g1,g2,g;
+ long b1,b2,b;
+
+ r1 = c1 & RED_MASK;
+ r2 = c2 & RED_MASK;
+ r = (((r2-r1)*alpha + r1 * 256) >> 8) & RED_MASK;
+
+ g1 = c1 & GREEN_MASK;
+ g2 = c2 & GREEN_MASK;
+ g = (((g2-g1)*alpha + g1 * 256) >> 8) & GREEN_MASK;
+
+ b1 = c1 & BLUE_MASK;
+ b2 = c2 & BLUE_MASK;
+ b = (((b2-b1)*alpha + b1 * 256) >> 8) & BLUE_MASK;
+
+ return (r|g|b);
+}
+
+void
+GraphicDevice16::fillLineAA(FillStyleDef *f, long y, long start, long end)
+{
+ register long n;
+ TYPE *line;
+ TYPE *point,pixel;
+ unsigned int alpha, start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+
+ alpha = f->color.alpha;
+ pixel = f->color.pixel;
+
+ if (alpha == ALPHA_OPAQUE) {
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ point = &line[start];
+
+ if (start == end) {
+ *point = mix_alpha(*point, pixel, start_alpha + end_alpha - 255);
+ } else {
+ n = end-start;
+ if (start_alpha < 255) {
+ *point = mix_alpha(*point, pixel, start_alpha);
+ point++;
+ n--;
+ }
+ while (n > 0) {
+ *point = pixel;
+ point++;
+ n--;
+ }
+ if (end_alpha > 0) {
+ *point = mix_alpha(*point, pixel, end_alpha);
+ }
+ }
+ } else {
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ point = &line[start];
+
+ if (start == end) {
+ *point = mix_alpha(*point, pixel,
+ ((start_alpha + end_alpha - 255) * alpha) >> 8);
+ } else {
+ n = end-start;
+ if (start_alpha < 255) {
+ *point = mix_alpha(*point, pixel, (start_alpha * alpha) >> 8);
+ point++;
+ n--;
+ }
+ while (n > 0) {
+ *point = mix_alpha(*point, pixel, alpha);
+ point++;
+ n--;
+ }
+ if (end_alpha > 0) {
+ *point = mix_alpha(*point, pixel, (end_alpha * alpha) >> 8);
+ }
+ }
+ }
+}
+
+void
+GraphicDevice16::fillLine(FillStyleDef *f, long y, long start, long end)
+{
+ register long n;
+ TYPE *line,*point;
+ TYPE pixel;
+ unsigned int alpha;
+
+ if (clip(y,start,end)) return;
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start];
+ n = end-start;
+ pixel = f->color.pixel;
+ alpha = f->color.alpha;
+ if (alpha == ALPHA_OPAQUE) {
+ while (n--) {
+ *point = pixel;
+ point++;
+ }
+ } else {
+ while (n--) {
+ *point = mix_alpha(*point, pixel, alpha);
+ point++;
+ }
+ }
+}
+
+void
+GraphicDevice16::fillLineBitmap(FillStyleDef *f, long y, long start, long end)
+{
+ int n;
+ long x1,y1,dx,dy;
+ Matrix *m = &f->bitmap_matrix;
+ Bitmap *b = f->bitmap;
+ unsigned char *pixels;
+ TYPE *p;
+ Color *cmap;
+ long pixbpl;
+ TYPE pixel;
+ int offset;
+ unsigned char *alpha_table;
+
+ /* safety test) */
+ if (!b) return;
+
+ if (clip(y,start,end)) return;
+
+ start /= FRAC;
+ end /= FRAC;
+ n = end - start;
+ p = (TYPE *) (this->canvasBuffer + this->bpl*y + start * 2);
+
+ /* the coordinates in the image are normalized to 16 bits */
+ x1 = (long) (m->a * start + m->b * y + m->tx);
+ y1 = (long) (m->c * start + m->d * y + m->ty);
+ dx = (long) (m->a);
+ dy = (long) (m->c);
+
+ pixels = b->pixels;
+ pixbpl = b->bpl;
+ cmap = f->cmap;
+
+ if (b->alpha_buf == NULL) {
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ pixel = cmap[pixels[(y1 >> 16) * pixbpl + (x1 >> 16)]].pixel;
+ *p = pixel;
+ }
+ x1 += dx;
+ y1 += dy;
+ p++;
+ n--;
+ }
+ } else if (f->alpha_table) {
+ alpha_table = f->alpha_table;
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ offset = (y1 >> 16) * pixbpl + (x1 >> 16);
+ pixel = cmap[pixels[offset]].pixel;
+ *p = mix_alpha(*p, pixel, alpha_table[b->alpha_buf[offset]]);
+ }
+ x1 += dx;
+ y1 += dy;
+ p++;
+ n--;
+ }
+ } else {
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ offset = (y1 >> 16) * pixbpl + (x1 >> 16);
+ pixel = cmap[pixels[offset]].pixel;
+ *p = mix_alpha(*p, pixel, b->alpha_buf[offset]);
+ }
+ x1 += dx;
+ y1 += dy;
+ p++;
+ n--;
+ }
+ }
+}
+
+void
+GraphicDevice16::fillLineLG(Gradient *grad, long y, long start, long end)
+{
+ long dr,r,v,r2;
+ register long n;
+ TYPE *line;
+ TYPE *point;
+ Color *cp,*ramp;
+ Matrix *m = &grad->imat;
+ unsigned int start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start /= FRAC;
+ end /= FRAC;
+
+ n = end-start;
+
+ r = (long) (m->a * start + m->b * y + m->tx);
+ dr = (long) (m->a);
+
+ ramp = grad->ramp;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start];
+
+ r2 = r + n * dr;
+ if ( ((r | r2) & ~255) == 0 ) {
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start_alpha < 255) {
+ v = r>>16;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, start_alpha);
+ point++;
+ r += dr;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ v = r>>16;
+ *point = (TYPE)ramp[v].pixel;
+ point++;
+ r += dr;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ v = r>>16;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, end_alpha);
+ }
+#endif /* FULL_AA */
+ } else {
+ while (n--) {
+ v = r>>16;
+ cp = &ramp[v];
+ *point = mix_alpha(*point, cp->pixel, cp->alpha);
+ point++;
+ r += dr;
+ }
+ }
+ } else {
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start_alpha < 255) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, start_alpha);
+ point++;
+ r += dr;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ *point = (TYPE)ramp[v].pixel;
+ point++;
+ r += dr;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, end_alpha);
+ }
+#endif /* FULL_AA */
+ } else {
+ while (n--) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ cp = &ramp[v];
+ *point = mix_alpha(*point, cp->pixel, cp->alpha);
+ point++;
+ r += dr;
+ }
+ }
+ }
+}
+
+void
+GraphicDevice16::fillLineRG(Gradient *grad, long y, long start, long end)
+{
+ long X,dx,r,Y,dy;
+ long dist2;
+ register long n;
+ Color *cp,*ramp;
+ TYPE *line;
+ TYPE *point;
+ Matrix *m = &grad->imat;
+ unsigned int start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start /= FRAC;
+ end /= FRAC;
+
+ n = end-start;
+
+ X = (long) (m->a * start + m->b * y + m->tx);
+ Y = (long) (m->c * start + m->d * y + m->ty);
+ dx = (long) (m->a);
+ dy = (long) (m->c);
+
+ ramp = grad->ramp;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start];
+
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start == end) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r = SQRT[dist2];
+ }
+ *point = mix_alpha(*point, (TYPE)ramp[r].pixel, start_alpha + end_alpha - 255);
+ } else {
+ if (start_alpha < 255) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r = SQRT[dist2];
+ }
+ *point = mix_alpha(*point, (TYPE)ramp[r].pixel, start_alpha);
+ point++;
+ X += dx;
+ Y += dy;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ *point = (TYPE)ramp[r].pixel;
+ point++;
+ X += dx;
+ Y += dy;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ *point = mix_alpha(*point, (TYPE)ramp[r].pixel, end_alpha);
+ }
+ }
+#endif /* FULL_AA */
+
+ } else {
+ while (n--) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ cp = &ramp[r];
+ *point = mix_alpha(*point, cp->pixel, cp->alpha);
+ point++;
+ X += dx;
+ Y += dy;
+ }
+ }
+}
+
+void
+GraphicDevice16::drawLine(long x1, long y1, long x2, long y2, long width)
+{
+ int n,adr,dx,dy,sx,color;
+ register int a;
+ register TYPE *pp;
+ int alpha;
+
+ x1 = (x1) >> FRAC_BITS;
+ y1 = (y1) >> FRAC_BITS;
+ x2 = (x2) >> FRAC_BITS;
+ y2 = (y2) >> FRAC_BITS;
+
+ if (y1 > y2 || (y1 == y2 && x1 > x2)) {
+ long tmp;
+
+ tmp=x1;
+ x1=x2;
+ x2=tmp;
+
+ tmp=y1;
+ y1=y2;
+ y2=tmp;
+ }
+
+ if (y1 == y2 && (y1 < clip_rect.ymin || y1 > clip_rect.ymax)) return;
+ if (x1 == x2 && (x1 < clip_rect.xmin || x1 > clip_rect.xmax)) return;
+ if (x1 == x2 && y1 == y2) return; // Bad !!!
+
+ if (y1 < clip_rect.ymin && y1 != y2) {
+ x1 += (x2-x1)*(clip_rect.ymin-y1)/(y2-y1);
+ y1 = clip_rect.ymin;
+ }
+
+ if (y2 > clip_rect.ymax && y1 != y2) {
+ x2 -= (x2-x1)*(y2-clip_rect.ymax)/(y2-y1);
+ y2 = clip_rect.ymax;
+ }
+
+ if (x1 < x2) {
+ if (x1 < clip_rect.xmin && x1 != x2) {
+ y1 += (y2-y1)*(clip_rect.xmin-x1)/(x2-x1);
+ x1 = clip_rect.xmin;
+ }
+
+ if (x2 > clip_rect.xmax && x1 != x2) {
+ y2 -= (y2-y1)*(x2-clip_rect.xmax)/(x2-x1);
+ x2 = clip_rect.xmax;
+ }
+ }
+
+ if (x1 > x2) {
+ if (x2 < clip_rect.xmin && x2 != x1) {
+ y2 -= (y2-y1)*(clip_rect.xmin-x2)/(x1-x2);
+ x2 = clip_rect.xmin;
+ }
+
+ if (x1 > clip_rect.xmax && x2 != x1) {
+ y1 += (y2-y1)*(x1-clip_rect.xmax)/(x1-x2);
+ x1 = clip_rect.xmax;
+ }
+ }
+
+ // Check again
+ if (x1 == x2 && y1 == y2) return;
+ if (x1 < clip_rect.xmin || x2 < clip_rect.xmin) return;
+ if (y1 < clip_rect.ymin || y2 < clip_rect.ymin) return;
+ if (x1 > clip_rect.xmax || x2 > clip_rect.xmax) return;
+ if (y1 > clip_rect.ymax || y2 > clip_rect.ymax) return;
+
+ sx=bpl >> 1;
+ adr=(y1 * sx + x1);
+ pp = (TYPE *)canvasBuffer + adr;
+
+ dx = x2 - x1;
+ dy = y2 - y1;
+
+ color = allocColor(foregroundColor);
+ alpha = foregroundColor.alpha;
+
+ if (alpha == ALPHA_OPAQUE) {
+
+#define PUTPIXEL() \
+ { \
+ *pp=color; \
+ }
+
+#define DRAWLINE(dx,dy,inc_1,inc_2) \
+ n=dx;\
+ a=2*dy-dx;\
+ dy=2*dy;\
+ dx=2*dx-dy;\
+ do {\
+ PUTPIXEL();\
+ if (a>0) { pp+=(inc_1); a-=dx; }\
+ else { pp+=(inc_2); a+=dy; }\
+ } while (--n >= 0);
+
+/* fin macro */
+
+ if (dx == 0 && dy == 0) {
+ PUTPIXEL();
+ } else if (dx > 0) {
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx + 1, 1);
+ } else {
+ DRAWLINE(dy, dx, sx + 1, sx);
+ }
+ } else {
+ dx = -dx;
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx - 1, -1);
+ } else {
+ DRAWLINE(dy, dx, sx - 1, sx);
+ }
+ }
+
+
+#undef DRAWLINE
+#undef PUTPIXEL
+ } else {
+#define PUTPIXEL() \
+ { \
+ *pp=mix_alpha(*pp,color,alpha); \
+ }
+
+#define DRAWLINE(dx,dy,inc_1,inc_2) \
+ n=dx;\
+ a=2*dy-dx;\
+ dy=2*dy;\
+ dx=2*dx-dy;\
+ do {\
+ PUTPIXEL();\
+ if (a>0) { pp+=(inc_1); a-=dx; }\
+ else { pp+=(inc_2); a+=dy; }\
+ } while (--n >= 0);
+
+/* fin macro */
+
+ if (dx == 0 && dy == 0) {
+ PUTPIXEL();
+ } else if (dx > 0) {
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx + 1, 1);
+ } else {
+ DRAWLINE(dy, dx, sx + 1, sx);
+ }
+ } else {
+ dx = -dx;
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx - 1, -1);
+ } else {
+ DRAWLINE(dy, dx, sx - 1, sx);
+ }
+ }
+
+
+#undef DRAWLINE
+#undef PUTPIXEL
+ }
+}
diff --git a/core/multimedia/opieplayer/libflash/graphic16.h b/core/multimedia/opieplayer/libflash/graphic16.h
new file mode 100644
index 0000000..938d856
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic16.h
@@ -0,0 +1,39 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+class GraphicDevice16: public GraphicDevice {
+private:
+ long GraphicDevice16::allocColor(Color color);
+
+public:
+ GraphicDevice16(FlashDisplay *fd);
+
+ void clearCanvas();
+ void fillLineAA(FillStyleDef *f, long y, long start, long end);
+ void fillLine(FillStyleDef *f, long y, long start, long end);
+ void fillLineBitmap(FillStyleDef *f, long y, long start, long end);
+ void fillLineLG(Gradient *grad, long y, long start, long end);
+ void fillLineRG(Gradient *grad, long y, long start, long end);
+ void drawLine(long x1, long y1, long x2, long y2, long width);
+};
diff --git a/core/multimedia/opieplayer/libflash/graphic24.cc b/core/multimedia/opieplayer/libflash/graphic24.cc
new file mode 100644
index 0000000..6d15019
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic24.cc
@@ -0,0 +1,648 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#include "graphic24.h"
+
+extern unsigned char SQRT[];
+
+#define FULL_AA
+
+#define PRINT 0
+
+typedef unsigned char TYPE;
+#define BPP 3
+
+GraphicDevice24::GraphicDevice24(FlashDisplay *fd) : GraphicDevice(fd)
+{
+}
+
+long
+GraphicDevice24::allocColor(Color color)
+{
+ return 0;
+}
+
+void
+GraphicDevice24::clearCanvas()
+{
+ TYPE *point,*p;
+ long h, w,n;
+
+ if (!bgInitialized) return;
+
+ point = (TYPE *)(canvasBuffer + clip_rect.ymin * bpl) + clip_rect.xmin*BPP;
+ w = clip_rect.xmax - clip_rect.xmin;
+ h = clip_rect.ymax - clip_rect.ymin;
+
+ while (h--) {
+ p = point;
+ n = w;
+ while (n--) {
+ *p++ = backgroundColor.blue;
+ *p++ = backgroundColor.green;
+ *p++ = backgroundColor.red;
+ }
+
+ point = (TYPE *)((char *)point + bpl);
+ }
+
+ flashDisplay->flash_refresh = 1;
+ flashDisplay->clip_x = clip_rect.xmin;
+ flashDisplay->clip_y = clip_rect.ymin;
+ flashDisplay->clip_width = clip_rect.xmax-clip_rect.xmin;
+ flashDisplay->clip_height = clip_rect.ymax-clip_rect.ymin;
+}
+
+/* alpha = 0 : select c1, alpha = 255 select c2 */
+static inline void mix_alpha(TYPE *c1, Color c2, int alpha)
+{
+ *c1 = (((c2.blue- (*c1))*alpha + (*c1) * 256) >> 8);
+ c1++;
+ *c1 = (((c2.green- (*c1))*alpha + (*c1) * 256) >> 8);
+ c1++;
+ *c1 = (((c2.red- (*c1))*alpha + (*c1) * 256) >> 8);
+}
+
+void
+GraphicDevice24::fillLineAA(FillStyleDef *f, long y, long start, long end)
+{
+ register long n;
+ TYPE *line;
+ TYPE *point;
+ Color pixel;
+ unsigned int alpha, start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+
+ alpha = f->color.alpha;
+ pixel = f->color;
+
+ if (alpha == ALPHA_OPAQUE) {
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ point = &line[start*BPP];
+
+ if (start == end) {
+ mix_alpha(point, pixel, start_alpha + end_alpha - 255);
+ } else {
+ n = end-start;
+ if (start_alpha < 255) {
+ mix_alpha(point, pixel, start_alpha);
+ point += BPP;
+ n--;
+ }
+ while (n > 0) {
+ *point++ = pixel.blue;
+ *point++ = pixel.green;
+ *point++ = pixel.red;
+ n--;
+ }
+ if (end_alpha > 0) {
+ mix_alpha(point, pixel, end_alpha);
+ }
+ }
+ } else {
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ point = &line[start*BPP];
+
+ if (start == end) {
+ mix_alpha(point, pixel, ((start_alpha + end_alpha - 255) * alpha) >> 8);
+ } else {
+ n = end-start;
+ if (start_alpha < 255) {
+ mix_alpha(point, pixel, (start_alpha * alpha) >> 8);
+ point+=BPP;
+ n--;
+ }
+ while (n > 0) {
+ mix_alpha(point, pixel, alpha);
+ point+=BPP;
+ n--;
+ }
+ if (end_alpha > 0) {
+ mix_alpha(point, pixel, (end_alpha * alpha) >> 8);
+ }
+ }
+ }
+}
+
+void
+GraphicDevice24::fillLine(FillStyleDef *f, long y, long start, long end)
+{
+ register long n;
+ TYPE *line,*point;
+ Color pixel;
+ unsigned int alpha;
+
+ if (clip(y,start,end)) return;
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start*BPP];
+ n = end-start;
+ alpha = f->color.alpha;
+ pixel = f->color;
+ if (alpha == ALPHA_OPAQUE) {
+ while (n--) {
+ *point++ = pixel.blue;
+ *point++ = pixel.green;
+ *point++ = pixel.red;
+ }
+ } else {
+ while (n--) {
+ mix_alpha(point, pixel, alpha);
+ point+=BPP;
+ }
+ }
+}
+
+void
+GraphicDevice24::fillLineBitmap(FillStyleDef *f, long y, long start, long end)
+{
+ int n;
+ long x1,y1,dx,dy;
+ Matrix *m = &f->bitmap_matrix;
+ Bitmap *b = f->bitmap;
+ unsigned char *pixels;
+ TYPE *p;
+ Color *cmap;
+ long pixbpl;
+ Color pixel;
+ int offset;
+ unsigned char *alpha_table;
+
+ /* safety test) */
+ if (!b) return;
+
+ if (clip(y,start,end)) return;
+
+ start /= FRAC;
+ end /= FRAC;
+ n = end - start;
+ p = (TYPE *) (canvasBuffer + bpl*y + start*BPP);
+
+ x1 = (long) (m->a * start + m->b * y + m->tx);
+ y1 = (long) (m->c * start + m->d * y + m->ty);
+ dx = (long) (m->a);
+ dy = (long) (m->c);
+
+ pixels = b->pixels;
+ pixbpl = b->bpl;
+ cmap = f->cmap;
+
+ if (b->alpha_buf == NULL) {
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ pixel = cmap[pixels[(y1 >> 16) * pixbpl + (x1 >> 16)]];
+ *p++ = pixel.blue;
+ *p++ = pixel.green;
+ *p++ = pixel.red;
+ } else {
+ p+=BPP;
+ }
+ x1 += dx;
+ y1 += dy;
+ n--;
+ }
+ } else if (f->alpha_table) {
+ alpha_table = f->alpha_table;
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ offset = (y1 >> 16) * pixbpl + (x1 >> 16);
+ mix_alpha(p, cmap[pixels[offset]], alpha_table[b->alpha_buf[offset]]);
+ }
+ p+=BPP;
+ x1 += dx;
+ y1 += dy;
+ n--;
+ }
+ } else {
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ offset = (y1 >> 16) * pixbpl + (x1 >> 16);
+ mix_alpha(p, cmap[pixels[offset]], b->alpha_buf[offset]);
+ }
+ p+=BPP;
+ x1 += dx;
+ y1 += dy;
+ n--;
+ }
+ }
+}
+
+void
+GraphicDevice24::fillLineLG(Gradient *grad, long y, long start, long end)
+{
+ long dr,r,v,r2;
+ register long n;
+ TYPE *line;
+ TYPE *point;
+ Color *cp,*ramp;
+ Matrix *m = &grad->imat;
+ unsigned int start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start /= FRAC;
+ end /= FRAC;
+
+ n = end-start;
+
+ r = (long) (m->a * start + m->b * y + m->tx);
+ dr = (long) (m->a);
+
+ ramp = grad->ramp;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start*BPP];
+
+ r2 = r + n * dr;
+ if ( ((r | r2) & ~255) == 0 ) {
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start_alpha < 255) {
+ v = r>>16;
+ mix_alpha(point, ramp[v], start_alpha);
+ point+=BPP;
+ r += dr;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ v = r>>16;
+ *point++ = ramp[v].blue;
+ *point++ = ramp[v].green;
+ *point++ = ramp[v].red;
+ r += dr;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ v = r>>16;
+ mix_alpha(point, ramp[v], end_alpha);
+ }
+#endif /* FULL_AA */
+ } else {
+ while (n--) {
+ v = r>>16;
+ cp = &ramp[v];
+ mix_alpha(point, *cp, cp->alpha);
+ point+=BPP;
+ r += dr;
+ }
+ }
+ } else {
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start_alpha < 255) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ mix_alpha(point, ramp[v], start_alpha);
+ point+=BPP;
+ r += dr;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ *point++ = ramp[v].blue;
+ *point++ = ramp[v].green;
+ *point++ = ramp[v].red;
+ r += dr;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ mix_alpha(point, ramp[v], end_alpha);
+ }
+#endif /* FULL_AA */
+ } else {
+ while (n--) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ cp = &ramp[v];
+ mix_alpha(point, *cp, cp->alpha);
+ point+=BPP;
+ r += dr;
+ }
+ }
+ }
+}
+
+void
+GraphicDevice24::fillLineRG(Gradient *grad, long y, long start, long end)
+{
+ long X,dx,r,Y,dy;
+ long dist2;
+ register long n;
+ Color *cp,*ramp;
+ TYPE *line;
+ TYPE *point;
+ Matrix *m = &grad->imat;
+ unsigned int start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start /= FRAC;
+ end /= FRAC;
+
+ n = end-start;
+
+ X = (long) (m->a * start + m->b * y + m->tx);
+ Y = (long) (m->c * start + m->d * y + m->ty);
+ dx = (long) (m->a);
+ dy = (long) (m->c);
+
+ ramp = grad->ramp;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start*BPP];
+
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start == end) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ mix_alpha(point, ramp[r], start_alpha + end_alpha - 255);
+ } else {
+ if (start_alpha < 255) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ mix_alpha(point, ramp[r], start_alpha);
+ point+=BPP;
+ X += dx;
+ Y += dy;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ *point++ = ramp[r].blue;
+ *point++ = ramp[r].green;
+ *point++ = ramp[r].red;
+ X += dx;
+ Y += dy;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ mix_alpha(point, ramp[r], end_alpha);
+ }
+ }
+#endif /* FULL_AA */
+
+ } else {
+ while (n--) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ cp = &ramp[r];
+ mix_alpha(point, *cp, cp->alpha);
+ point+=BPP;
+ X += dx;
+ Y += dy;
+ }
+ }
+}
+
+void
+GraphicDevice24::drawLine(long x1, long y1, long x2, long y2, long width)
+{
+ int n,adr,dx,dy,sx;
+ Color color;
+ register int a;
+ register TYPE *pp;
+ int alpha;
+
+ x1 = (x1) >> FRAC_BITS;
+ y1 = (y1) >> FRAC_BITS;
+ x2 = (x2) >> FRAC_BITS;
+ y2 = (y2) >> FRAC_BITS;
+
+ if (y1 > y2 || (y1 == y2 && x1 > x2)) {
+ long tmp;
+
+ tmp=x1;
+ x1=x2;
+ x2=tmp;
+
+ tmp=y1;
+ y1=y2;
+ y2=tmp;
+ }
+
+ if (y1 == y2 && (y1 < clip_rect.ymin || y1 > clip_rect.ymax)) return;
+ if (x1 == x2 && (x1 < clip_rect.xmin || x1 > clip_rect.xmax)) return;
+ if (x1 == x2 && y1 == y2) return; // Bad !!!
+
+ if (y1 < clip_rect.ymin && y1 != y2) {
+ x1 += (x2-x1)*(clip_rect.ymin-y1)/(y2-y1);
+ y1 = clip_rect.ymin;
+ }
+
+ if (y2 > clip_rect.ymax && y1 != y2) {
+ x2 -= (x2-x1)*(y2-clip_rect.ymax)/(y2-y1);
+ y2 = clip_rect.ymax;
+ }
+
+ if (x1 < x2) {
+ if (x1 < clip_rect.xmin && x1 != x2) {
+ y1 += (y2-y1)*(clip_rect.xmin-x1)/(x2-x1);
+ x1 = clip_rect.xmin;
+ }
+
+ if (x2 > clip_rect.xmax && x1 != x2) {
+ y2 -= (y2-y1)*(x2-clip_rect.xmax)/(x2-x1);
+ x2 = clip_rect.xmax;
+ }
+ }
+
+ if (x1 > x2) {
+ if (x2 < clip_rect.xmin && x2 != x1) {
+ y2 -= (y2-y1)*(clip_rect.xmin-x2)/(x1-x2);
+ x2 = clip_rect.xmin;
+ }
+
+ if (x1 > clip_rect.xmax && x2 != x1) {
+ y1 += (y2-y1)*(x1-clip_rect.xmax)/(x1-x2);
+ x1 = clip_rect.xmax;
+ }
+ }
+
+ // Check again
+ if (x1 == x2 && y1 == y2) return;
+ if (x1 < clip_rect.xmin || x2 < clip_rect.xmin) return;
+ if (y1 < clip_rect.ymin || y2 < clip_rect.ymin) return;
+ if (x1 > clip_rect.xmax || x2 > clip_rect.xmax) return;
+ if (y1 > clip_rect.ymax || y2 > clip_rect.ymax) return;
+
+ sx=bpl >> 1;
+ adr=(y1 * sx + x1);
+ pp = (TYPE *)canvasBuffer + adr;
+
+ dx = x2 - x1;
+ dy = y2 - y1;
+
+ color = foregroundColor;
+ alpha = foregroundColor.alpha;
+
+ if (alpha == ALPHA_OPAQUE) {
+
+#define PUTPIXEL() \
+ { \
+ *pp++=color.red; \
+ *pp++=color.green; \
+ *pp++=color.blue; \
+ }
+
+#define DRAWLINE(dx,dy,inc_1,inc_2) \
+ n=dx;\
+ a=2*dy-dx;\
+ dy=2*dy;\
+ dx=2*dx-dy;\
+ do {\
+ PUTPIXEL();\
+ if (a>0) { pp+=(inc_1); a-=dx; }\
+ else { pp+=(inc_2); a+=dy; }\
+ } while (--n >= 0);
+
+/* fin macro */
+
+ if (dx == 0 && dy == 0) {
+ PUTPIXEL();
+ } else if (dx > 0) {
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx + 1, 1);
+ } else {
+ DRAWLINE(dy, dx, sx + 1, sx);
+ }
+ } else {
+ dx = -dx;
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx - 1, -1);
+ } else {
+ DRAWLINE(dy, dx, sx - 1, sx);
+ }
+ }
+
+
+#undef DRAWLINE
+#undef PUTPIXEL
+ } else {
+#define PUTPIXEL() \
+ { \
+ mix_alpha(pp,color,alpha); \
+ }
+
+#define DRAWLINE(dx,dy,inc_1,inc_2) \
+ n=dx;\
+ a=2*dy-dx;\
+ dy=2*dy;\
+ dx=2*dx-dy;\
+ do {\
+ PUTPIXEL();\
+ if (a>0) { pp+=(inc_1*BPP); a-=dx; }\
+ else { pp+=(inc_2*BPP); a+=dy; }\
+ } while (--n >= 0);
+
+/* fin macro */
+
+ if (dx == 0 && dy == 0) {
+ PUTPIXEL();
+ } else if (dx > 0) {
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx + 1, 1);
+ } else {
+ DRAWLINE(dy, dx, sx + 1, sx);
+ }
+ } else {
+ dx = -dx;
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx - 1, -1);
+ } else {
+ DRAWLINE(dy, dx, sx - 1, sx);
+ }
+ }
+
+
+#undef DRAWLINE
+#undef PUTPIXEL
+ }
+}
diff --git a/core/multimedia/opieplayer/libflash/graphic24.h b/core/multimedia/opieplayer/libflash/graphic24.h
new file mode 100644
index 0000000..4c10e49
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic24.h
@@ -0,0 +1,39 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+class GraphicDevice24: public GraphicDevice {
+private:
+ long GraphicDevice24::allocColor(Color color);
+
+public:
+ GraphicDevice24(FlashDisplay *fd);
+
+ void clearCanvas();
+ void fillLineAA(FillStyleDef *f, long y, long start, long end);
+ void fillLine(FillStyleDef *f, long y, long start, long end);
+ void fillLineBitmap(FillStyleDef *f, long y, long start, long end);
+ void fillLineLG(Gradient *grad, long y, long start, long end);
+ void fillLineRG(Gradient *grad, long y, long start, long end);
+ void drawLine(long x1, long y1, long x2, long y2, long width);
+};
diff --git a/core/multimedia/opieplayer/libflash/graphic32.cc b/core/multimedia/opieplayer/libflash/graphic32.cc
new file mode 100644
index 0000000..b9c2008
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic32.cc
@@ -0,0 +1,657 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#include "graphic32.h"
+
+extern unsigned char SQRT[];
+
+#define FULL_AA
+
+#define PRINT 0
+
+typedef unsigned long TYPE;
+
+GraphicDevice32::GraphicDevice32(FlashDisplay *fd) : GraphicDevice(fd)
+{
+}
+
+long
+GraphicDevice32::allocColor(Color color)
+{
+ return (color.red)<<16 | (color.green)<<8 | (color.blue);
+}
+
+void
+GraphicDevice32::clearCanvas()
+{
+ TYPE pixel;
+ TYPE *point,*p;
+ long h, w,n;
+
+ if (!bgInitialized) return;
+
+ pixel = allocColor(backgroundColor);
+
+ point = (TYPE *)(canvasBuffer + clip_rect.ymin * bpl) + clip_rect.xmin;
+ w = clip_rect.xmax - clip_rect.xmin;
+ h = clip_rect.ymax - clip_rect.ymin;
+
+ while (h--) {
+ p = point;
+ n = w;
+ while (n--) {
+ *p++ = pixel;
+ }
+
+ point = (TYPE *)((char *)point + bpl);
+ }
+
+ flashDisplay->flash_refresh = 1;
+ flashDisplay->clip_x = clip_rect.xmin;
+ flashDisplay->clip_y = clip_rect.ymin;
+ flashDisplay->clip_width = clip_rect.xmax-clip_rect.xmin;
+ flashDisplay->clip_height = clip_rect.ymax-clip_rect.ymin;
+}
+
+#define RED_MASK 0xFF0000
+#define GREEN_MASK 0x00FF00
+#define BLUE_MASK 0x0000FF
+
+/* alpha = 0 : select c1, alpha = 255 select c2 */
+static inline unsigned long
+mix_alpha(unsigned long c1, unsigned long c2, int alpha)
+{
+ long r1,r2,r;
+ long g1,g2,g;
+ long b1,b2,b;
+
+ r1 = c1 & RED_MASK;
+ r2 = c2 & RED_MASK;
+ r = (((r2-r1)*alpha + r1 * 256) >> 8) & RED_MASK;
+
+ g1 = c1 & GREEN_MASK;
+ g2 = c2 & GREEN_MASK;
+ g = (((g2-g1)*alpha + g1 * 256) >> 8) & GREEN_MASK;
+
+ b1 = c1 & BLUE_MASK;
+ b2 = c2 & BLUE_MASK;
+ b = (((b2-b1)*alpha + b1 * 256) >> 8) & BLUE_MASK;
+
+ return (r|g|b);
+}
+
+void
+GraphicDevice32::fillLineAA(FillStyleDef *f, long y, long start, long end)
+{
+ register long n;
+ TYPE *line;
+ TYPE *point,pixel;
+ unsigned int alpha, start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+
+ alpha = f->color.alpha;
+ pixel = f->color.pixel;
+
+ if (alpha == ALPHA_OPAQUE) {
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ point = &line[start];
+
+ if (start == end) {
+ *point = mix_alpha(*point, pixel, start_alpha + end_alpha - 255);
+ } else {
+ n = end-start;
+ if (start_alpha < 255) {
+ *point = mix_alpha(*point, pixel, start_alpha);
+ point++;
+ n--;
+ }
+ while (n > 0) {
+ *point = pixel;
+ point++;
+ n--;
+ }
+ if (end_alpha > 0) {
+ *point = mix_alpha(*point, pixel, end_alpha);
+ }
+ }
+ } else {
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ point = &line[start];
+
+ if (start == end) {
+ *point = mix_alpha(*point, pixel,
+ ((start_alpha + end_alpha - 255) * alpha) >> 8);
+ } else {
+ n = end-start;
+ if (start_alpha < 255) {
+ *point = mix_alpha(*point, pixel, (start_alpha * alpha) >> 8);
+ point++;
+ n--;
+ }
+ while (n > 0) {
+ *point = mix_alpha(*point, pixel, alpha);
+ point++;
+ n--;
+ }
+ if (end_alpha > 0) {
+ *point = mix_alpha(*point, pixel, (end_alpha * alpha) >> 8);
+ }
+ }
+ }
+}
+
+void
+GraphicDevice32::fillLine(FillStyleDef *f, long y, long start, long end)
+{
+ register long n;
+ TYPE *line,*point;
+ TYPE pixel;
+ unsigned int alpha;
+
+ if (clip(y,start,end)) return;
+
+ start >>= FRAC_BITS;
+ end >>= FRAC_BITS;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start];
+ n = end-start;
+ pixel = f->color.pixel;
+ alpha = f->color.alpha;
+ if (alpha == ALPHA_OPAQUE) {
+ while (n--) {
+ *point = pixel;
+ point++;
+ }
+ } else {
+ while (n--) {
+ *point = mix_alpha(*point, pixel, alpha);
+ point++;
+ }
+ }
+}
+
+void
+GraphicDevice32::fillLineBitmap(FillStyleDef *f, long y, long start, long end)
+{
+ int n;
+ long x1,y1,dx,dy;
+ Matrix *m = &f->bitmap_matrix;
+ Bitmap *b = f->bitmap;
+ unsigned char *pixels;
+ TYPE *p;
+ Color *cmap;
+ long pixbpl;
+ TYPE pixel;
+ int offset;
+ unsigned char *alpha_table;
+
+ /* safety test) */
+ if (!b) return;
+
+ if (clip(y,start,end)) return;
+
+ start /= FRAC;
+ end /= FRAC;
+ n = end - start;
+ p = (TYPE *) (this->canvasBuffer + this->bpl*y + start * sizeof(TYPE));
+
+ /* the coordinates in the image are normalized to 16 bits */
+ x1 = (long) (m->a * start + m->b * y + m->tx);
+ y1 = (long) (m->c * start + m->d * y + m->ty);
+ dx = (long) (m->a);
+ dy = (long) (m->c);
+
+ pixels = b->pixels;
+ pixbpl = b->bpl;
+ cmap = f->cmap;
+
+ if (b->alpha_buf == NULL) {
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ pixel = cmap[pixels[(y1 >> 16) * pixbpl + (x1 >> 16)]].pixel;
+ *p = pixel;
+ }
+ x1 += dx;
+ y1 += dy;
+ p++;
+ n--;
+ }
+ } else if (f->alpha_table) {
+ alpha_table = f->alpha_table;
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ offset = (y1 >> 16) * pixbpl + (x1 >> 16);
+ pixel = cmap[pixels[offset]].pixel;
+ *p = mix_alpha(*p, pixel, alpha_table[b->alpha_buf[offset]]);
+ }
+ x1 += dx;
+ y1 += dy;
+ p++;
+ n--;
+ }
+ } else {
+ while (n) {
+ if (x1 >= 0 && y1 >= 0 &&
+ (x1 >> 16) < b->width && (y1 >> 16) < b->height) {
+
+ offset = (y1 >> 16) * pixbpl + (x1 >> 16);
+ pixel = cmap[pixels[offset]].pixel;
+ *p = mix_alpha(*p, pixel, b->alpha_buf[offset]);
+ }
+ x1 += dx;
+ y1 += dy;
+ p++;
+ n--;
+ }
+ }
+}
+
+void
+GraphicDevice32::fillLineLG(Gradient *grad, long y, long start, long end)
+{
+ long dr,r,v,r2;
+ register long n;
+ TYPE *line;
+ TYPE *point;
+ Color *cp,*ramp;
+ Matrix *m = &grad->imat;
+ unsigned int start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start /= FRAC;
+ end /= FRAC;
+
+ n = end-start;
+
+ r = (long) (m->a * start + m->b * y + m->tx);
+ dr = (long) (m->a);
+
+ ramp = grad->ramp;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start];
+
+ r2 = r + n * dr;
+ if ( ((r | r2) & ~255) == 0 ) {
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start_alpha < 255) {
+ v = r>>16;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, start_alpha);
+ point++;
+ r += dr;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ v = r>>16;
+ *point = (TYPE)ramp[v].pixel;
+ point++;
+ r += dr;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ v = r>>16;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, end_alpha);
+ }
+#endif /* FULL_AA */
+ } else {
+ while (n--) {
+ v = r>>16;
+ cp = &ramp[v];
+ *point = mix_alpha(*point, cp->pixel, cp->alpha);
+ point++;
+ r += dr;
+ }
+ }
+ } else {
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start_alpha < 255) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, start_alpha);
+ point++;
+ r += dr;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ *point = (TYPE)ramp[v].pixel;
+ point++;
+ r += dr;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ *point = mix_alpha(*point, (TYPE)ramp[v].pixel, end_alpha);
+ }
+#endif /* FULL_AA */
+ } else {
+ while (n--) {
+ v = r>>16;
+ if (v < 0) v = 0;
+ else if (v > 255) v = 255;
+ cp = &ramp[v];
+ *point = mix_alpha(*point, cp->pixel, cp->alpha);
+ point++;
+ r += dr;
+ }
+ }
+ }
+}
+
+void
+GraphicDevice32::fillLineRG(Gradient *grad, long y, long start, long end)
+{
+ long X,dx,r,Y,dy;
+ long dist2;
+ register long n;
+ Color *cp,*ramp;
+ TYPE *line;
+ TYPE *point;
+ Matrix *m = &grad->imat;
+ unsigned int start_alpha,end_alpha;
+
+ if (clip(y,start,end)) return;
+
+ start_alpha = 255 - ((start & (FRAC-1)) << (8-FRAC_BITS));
+ end_alpha = (end & (FRAC-1)) << (8-FRAC_BITS);
+
+ start /= FRAC;
+ end /= FRAC;
+
+ n = end-start;
+
+ X = (long) (m->a * start + m->b * y + m->tx);
+ Y = (long) (m->c * start + m->d * y + m->ty);
+ dx = (long) (m->a);
+ dy = (long) (m->c);
+
+ ramp = grad->ramp;
+
+ line = (TYPE *)(canvasBuffer + bpl*y);
+ point = &line[start];
+
+ if (!grad->has_alpha) {
+#ifdef FULL_AA
+ if (start == end) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r = SQRT[dist2];
+ }
+ *point = mix_alpha(*point, (TYPE)ramp[r].pixel, start_alpha + end_alpha - 255);
+ } else {
+ if (start_alpha < 255) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r = SQRT[dist2];
+ }
+ *point = mix_alpha(*point, (TYPE)ramp[r].pixel, start_alpha);
+ point++;
+ X += dx;
+ Y += dy;
+ n--;
+ }
+#endif /* FULL_AA */
+ while (n>0) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ *point = (TYPE)ramp[r].pixel;
+ point++;
+ X += dx;
+ Y += dy;
+ n--;
+ }
+#ifdef FULL_AA
+ if (end_alpha > 0) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ *point = mix_alpha(*point, (TYPE)ramp[r].pixel, end_alpha);
+ }
+ }
+#endif /* FULL_AA */
+
+ } else {
+ while (n--) {
+ dist2 = ((X>>16)*(X>>16))+((Y>>16)*(Y>>16));
+ if ((unsigned long)dist2 >= 65536) {
+ r = 255;
+ } else {
+ r= SQRT[dist2];
+ }
+ cp = &ramp[r];
+ *point = mix_alpha(*point, cp->pixel, cp->alpha);
+ point++;
+ X += dx;
+ Y += dy;
+ }
+ }
+}
+
+void
+GraphicDevice32::drawLine(long x1, long y1, long x2, long y2, long width)
+{
+ int n,adr,dx,dy,sx,color;
+ register int a;
+ register TYPE *pp;
+ int alpha;
+
+ x1 = (x1) >> FRAC_BITS;
+ y1 = (y1) >> FRAC_BITS;
+ x2 = (x2) >> FRAC_BITS;
+ y2 = (y2) >> FRAC_BITS;
+
+ if (y1 > y2 || (y1 == y2 && x1 > x2)) {
+ long tmp;
+
+ tmp=x1;
+ x1=x2;
+ x2=tmp;
+
+ tmp=y1;
+ y1=y2;
+ y2=tmp;
+ }
+
+ if (y1 == y2 && (y1 < clip_rect.ymin || y1 > clip_rect.ymax)) return;
+ if (x1 == x2 && (x1 < clip_rect.xmin || x1 > clip_rect.xmax)) return;
+ if (x1 == x2 && y1 == y2) return; // Bad !!!
+
+ if (y1 < clip_rect.ymin && y1 != y2) {
+ x1 += (x2-x1)*(clip_rect.ymin-y1)/(y2-y1);
+ y1 = clip_rect.ymin;
+ }
+
+ if (y2 > clip_rect.ymax && y1 != y2) {
+ x2 -= (x2-x1)*(y2-clip_rect.ymax)/(y2-y1);
+ y2 = clip_rect.ymax;
+ }
+
+ if (x1 < x2) {
+ if (x1 < clip_rect.xmin && x1 != x2) {
+ y1 += (y2-y1)*(clip_rect.xmin-x1)/(x2-x1);
+ x1 = clip_rect.xmin;
+ }
+
+ if (x2 > clip_rect.xmax && x1 != x2) {
+ y2 -= (y2-y1)*(x2-clip_rect.xmax)/(x2-x1);
+ x2 = clip_rect.xmax;
+ }
+ }
+
+ if (x1 > x2) {
+ if (x2 < clip_rect.xmin && x2 != x1) {
+ y2 -= (y2-y1)*(clip_rect.xmin-x2)/(x1-x2);
+ x2 = clip_rect.xmin;
+ }
+
+ if (x1 > clip_rect.xmax && x2 != x1) {
+ y1 += (y2-y1)*(x1-clip_rect.xmax)/(x1-x2);
+ x1 = clip_rect.xmax;
+ }
+ }
+
+ // Check again
+ if (x1 == x2 && y1 == y2) return;
+ if (x1 < clip_rect.xmin || x2 < clip_rect.xmin) return;
+ if (y1 < clip_rect.ymin || y2 < clip_rect.ymin) return;
+ if (x1 > clip_rect.xmax || x2 > clip_rect.xmax) return;
+ if (y1 > clip_rect.ymax || y2 > clip_rect.ymax) return;
+
+ sx=bpl >> 1;
+ adr=(y1 * sx + x1);
+ pp = (TYPE *)canvasBuffer + adr;
+
+ dx = x2 - x1;
+ dy = y2 - y1;
+
+ color = allocColor(foregroundColor);
+ alpha = foregroundColor.alpha;
+
+ if (alpha == ALPHA_OPAQUE) {
+
+#define PUTPIXEL() \
+ { \
+ *pp=color; \
+ }
+
+#define DRAWLINE(dx,dy,inc_1,inc_2) \
+ n=dx;\
+ a=2*dy-dx;\
+ dy=2*dy;\
+ dx=2*dx-dy;\
+ do {\
+ PUTPIXEL();\
+ if (a>0) { pp+=(inc_1); a-=dx; }\
+ else { pp+=(inc_2); a+=dy; }\
+ } while (--n >= 0);
+
+/* fin macro */
+
+ if (dx == 0 && dy == 0) {
+ PUTPIXEL();
+ } else if (dx > 0) {
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx + 1, 1);
+ } else {
+ DRAWLINE(dy, dx, sx + 1, sx);
+ }
+ } else {
+ dx = -dx;
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx - 1, -1);
+ } else {
+ DRAWLINE(dy, dx, sx - 1, sx);
+ }
+ }
+
+
+#undef DRAWLINE
+#undef PUTPIXEL
+ } else {
+#define PUTPIXEL() \
+ { \
+ *pp=mix_alpha(*pp,color,alpha); \
+ }
+
+#define DRAWLINE(dx,dy,inc_1,inc_2) \
+ n=dx;\
+ a=2*dy-dx;\
+ dy=2*dy;\
+ dx=2*dx-dy;\
+ do {\
+ PUTPIXEL();\
+ if (a>0) { pp+=(inc_1); a-=dx; }\
+ else { pp+=(inc_2); a+=dy; }\
+ } while (--n >= 0);
+
+/* fin macro */
+
+ if (dx == 0 && dy == 0) {
+ PUTPIXEL();
+ } else if (dx > 0) {
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx + 1, 1);
+ } else {
+ DRAWLINE(dy, dx, sx + 1, sx);
+ }
+ } else {
+ dx = -dx;
+ if (dx >= dy) {
+ DRAWLINE(dx, dy, sx - 1, -1);
+ } else {
+ DRAWLINE(dy, dx, sx - 1, sx);
+ }
+ }
+
+
+#undef DRAWLINE
+#undef PUTPIXEL
+ }
+}
diff --git a/core/multimedia/opieplayer/libflash/graphic32.h b/core/multimedia/opieplayer/libflash/graphic32.h
new file mode 100644
index 0000000..3d75a4d
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/graphic32.h
@@ -0,0 +1,39 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+class GraphicDevice32: public GraphicDevice {
+private:
+ long GraphicDevice32::allocColor(Color color);
+
+public:
+ GraphicDevice32(FlashDisplay *fd);
+
+ void clearCanvas();
+ void fillLineAA(FillStyleDef *f, long y, long start, long end);
+ void fillLine(FillStyleDef *f, long y, long start, long end);
+ void fillLineBitmap(FillStyleDef *f, long y, long start, long end);
+ void fillLineLG(Gradient *grad, long y, long start, long end);
+ void fillLineRG(Gradient *grad, long y, long start, long end);
+ void drawLine(long x1, long y1, long x2, long y2, long width);
+};
diff --git a/core/multimedia/opieplayer/libflash/jconfig.h b/core/multimedia/opieplayer/libflash/jconfig.h
new file mode 100644
index 0000000..9594ec5
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/jconfig.h
@@ -0,0 +1,45 @@
+/* jconfig.h. Generated automatically by configure. */
+/* jconfig.cfg --- source file edited by configure script */
+/* see jconfig.doc for explanations */
+
+#define HAVE_PROTOTYPES
+#define HAVE_UNSIGNED_CHAR
+#define HAVE_UNSIGNED_SHORT
+#undef void
+#undef const
+#undef CHAR_IS_UNSIGNED
+#define HAVE_STDDEF_H
+#define HAVE_STDLIB_H
+#undef NEED_BSD_STRINGS
+#undef NEED_SYS_TYPES_H
+#undef NEED_FAR_POINTERS
+#undef NEED_SHORT_EXTERNAL_NAMES
+/* Define this if you get warnings about undefined structures. */
+#undef INCOMPLETE_TYPES_BROKEN
+
+#ifdef JPEG_INTERNALS
+
+#undef RIGHT_SHIFT_IS_UNSIGNED
+#define INLINE __inline__
+/* These are for configuring the JPEG memory manager. */
+#undef DEFAULT_MAX_MEM
+#undef NO_MKTEMP
+
+#endif /* JPEG_INTERNALS */
+
+#ifdef JPEG_CJPEG_DJPEG
+
+#define BMP_SUPPORTED /* BMP image file format */
+#define GIF_SUPPORTED /* GIF image file format */
+#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */
+#undef RLE_SUPPORTED /* Utah RLE image file format */
+#define TARGA_SUPPORTED /* Targa image file format */
+
+#undef TWO_FILE_COMMANDLINE
+#undef NEED_SIGNAL_CATCHER
+#undef DONT_USE_B_MODE
+
+/* Define this if you want percent-done progress reports from cjpeg/djpeg. */
+#undef PROGRESS_REPORT
+
+#endif /* JPEG_CJPEG_DJPEG */
diff --git a/core/multimedia/opieplayer/libflash/jerror.h b/core/multimedia/opieplayer/libflash/jerror.h
new file mode 100644
index 0000000..fc2fffe
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/jerror.h
@@ -0,0 +1,291 @@
+/*
+ * jerror.h
+ *
+ * Copyright (C) 1994-1997, Thomas G. Lane.
+ * This file is part of the Independent JPEG Group's software.
+ * For conditions of distribution and use, see the accompanying README file.
+ *
+ * This file defines the error and message codes for the JPEG library.
+ * Edit this file to add new codes, or to translate the message strings to
+ * some other language.
+ * A set of error-reporting macros are defined too. Some applications using
+ * the JPEG library may wish to include this file to get the error codes
+ * and/or the macros.
+ */
+
+/*
+ * To define the enum list of message codes, include this file without
+ * defining macro JMESSAGE. To create a message string table, include it
+ * again with a suitable JMESSAGE definition (see jerror.c for an example).
+ */
+#ifndef JMESSAGE
+#ifndef JERROR_H
+/* First time through, define the enum list */
+#define JMAKE_ENUM_LIST
+#else
+/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
+#define JMESSAGE(code,string)
+#endif /* JERROR_H */
+#endif /* JMESSAGE */
+
+#ifdef JMAKE_ENUM_LIST
+
+typedef enum {
+
+#define JMESSAGE(code,string) code ,
+
+#endif /* JMAKE_ENUM_LIST */
+
+JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */
+
+/* For maintenance convenience, list is alphabetical by message code name */
+JMESSAGE(JERR_ARITH_NOTIMPL,
+ "Sorry, there are legal restrictions on arithmetic coding")
+JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix")
+JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")
+JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")
+JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")
+JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range")
+JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported")
+JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")
+JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")
+JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")
+JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length")
+JMESSAGE(JERR_BAD_LIB_VERSION,
+ "Wrong JPEG library version: library is %d, caller expects %d")
+JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan")
+JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d")
+JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d")
+JMESSAGE(JERR_BAD_PROGRESSION,
+ "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d")
+JMESSAGE(JERR_BAD_PROG_SCRIPT,
+ "Invalid progressive parameters at scan script entry %d")
+JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors")
+JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d")
+JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d")
+JMESSAGE(JERR_BAD_STRUCT_SIZE,
+ "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u")
+JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access")
+JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small")
+JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here")
+JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet")
+JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d")
+JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request")
+JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")
+JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")
+JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")
+JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")
+JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")
+JMESSAGE(JERR_EMS_READ, "Read from EMS failed")
+JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")
+JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan")
+JMESSAGE(JERR_FILE_READ, "Input file read error")
+JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?")
+JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet")
+JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow")
+JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry")
+JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels")
+JMESSAGE(JERR_INPUT_EMPTY, "Empty input file")
+JMESSAGE(JERR_INPUT_EOF, "Premature end of input file")
+JMESSAGE(JERR_MISMATCHED_QUANT_TABLE,
+ "Cannot transcode due to multiple use of quantization table %d")
+JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data")
+JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change")
+JMESSAGE(JERR_NOTIMPL, "Not implemented yet")
+JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time")
+JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported")
+JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")
+JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image")
+JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
+JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x")
+JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)")
+JMESSAGE(JERR_QUANT_COMPONENTS,
+ "Cannot quantize more than %d color components")
+JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors")
+JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors")
+JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers")
+JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker")
+JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x")
+JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers")
+JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF")
+JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s")
+JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file")
+JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file")
+JMESSAGE(JERR_TFILE_WRITE,
+ "Write failed on temporary file --- out of disk space?")
+JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines")
+JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x")
+JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up")
+JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation")
+JMESSAGE(JERR_XMS_READ, "Read from XMS failed")
+JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed")
+JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT)
+JMESSAGE(JMSG_VERSION, JVERSION)
+JMESSAGE(JTRC_16BIT_TABLES,
+ "Caution: quantization tables are too coarse for baseline JPEG")
+JMESSAGE(JTRC_ADOBE,
+ "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d")
+JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u")
+JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u")
+JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x")
+JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x")
+JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d")
+JMESSAGE(JTRC_DRI, "Define Restart Interval %u")
+JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u")
+JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u")
+JMESSAGE(JTRC_EOI, "End Of Image")
+JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d")
+JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d %d")
+JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE,
+ "Warning: thumbnail image size does not match data length %u")
+JMESSAGE(JTRC_JFIF_EXTENSION,
+ "JFIF extension marker: type 0x%02x, length %u")
+JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image")
+JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u")
+JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x")
+JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u")
+JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors")
+JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors")
+JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization")
+JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d")
+JMESSAGE(JTRC_RST, "RST%d")
+JMESSAGE(JTRC_SMOOTH_NOTIMPL,
+ "Smoothing not supported with nonstandard sampling ratios")
+JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d")
+JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d")
+JMESSAGE(JTRC_SOI, "Start of Image")
+JMESSAGE(JTRC_SOS, "Start Of Scan: %d components")
+JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d")
+JMESSAGE(JTRC_SOS_PARAMS, " Ss=%d, Se=%d, Ah=%d, Al=%d")
+JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s")
+JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s")
+JMESSAGE(JTRC_THUMB_JPEG,
+ "JFIF extension marker: JPEG-compressed thumbnail image, length %u")
+JMESSAGE(JTRC_THUMB_PALETTE,
+ "JFIF extension marker: palette thumbnail image, length %u")
+JMESSAGE(JTRC_THUMB_RGB,
+ "JFIF extension marker: RGB thumbnail image, length %u")
+JMESSAGE(JTRC_UNKNOWN_IDS,
+ "Unrecognized component IDs %d %d %d, assuming YCbCr")
+JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u")
+JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u")
+JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d")
+JMESSAGE(JWRN_BOGUS_PROGRESSION,
+ "Inconsistent progression sequence for component %d coefficient %d")
+JMESSAGE(JWRN_EXTRANEOUS_DATA,
+ "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x")
+JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment")
+JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code")
+JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d")
+JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file")
+JMESSAGE(JWRN_MUST_RESYNC,
+ "Corrupt JPEG data: found marker 0x%02x instead of RST%d")
+JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG")
+JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines")
+
+#ifdef JMAKE_ENUM_LIST
+
+ JMSG_LASTMSGCODE
+} J_MESSAGE_CODE;
+
+#undef JMAKE_ENUM_LIST
+#endif /* JMAKE_ENUM_LIST */
+
+/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
+#undef JMESSAGE
+
+
+#ifndef JERROR_H
+#define JERROR_H
+
+/* Macros to simplify using the error and trace message stuff */
+/* The first parameter is either type of cinfo pointer */
+
+/* Fatal errors (print message and exit) */
+#define ERREXIT(cinfo,code) \
+ ((cinfo)->err->msg_code = (code), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT1(cinfo,code,p1) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT2(cinfo,code,p1,p2) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT3(cinfo,code,p1,p2,p3) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (cinfo)->err->msg_parm.i[2] = (p3), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (cinfo)->err->msg_parm.i[2] = (p3), \
+ (cinfo)->err->msg_parm.i[3] = (p4), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXITS(cinfo,code,str) \
+ ((cinfo)->err->msg_code = (code), \
+ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+
+#define MAKESTMT(stuff) do { stuff } while (0)
+
+/* Nonfatal errors (we can keep going, but the data is probably corrupt) */
+#define WARNMS(cinfo,code) \
+ ((cinfo)->err->msg_code = (code), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
+#define WARNMS1(cinfo,code,p1) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
+#define WARNMS2(cinfo,code,p1,p2) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
+
+/* Informational/debugging messages */
+#define TRACEMS(cinfo,lvl,code) \
+ ((cinfo)->err->msg_code = (code), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+#define TRACEMS1(cinfo,lvl,code,p1) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+#define TRACEMS2(cinfo,lvl,code,p1,p2) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \
+ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \
+ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5) \
+ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+ _mp[4] = (p5); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \
+ MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+ _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+ _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \
+ (cinfo)->err->msg_code = (code); \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMSS(cinfo,lvl,code,str) \
+ ((cinfo)->err->msg_code = (code), \
+ strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
+ (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+
+#endif /* JERROR_H */
diff --git a/core/multimedia/opieplayer/libflash/jmorecfg.h b/core/multimedia/opieplayer/libflash/jmorecfg.h
new file mode 100644
index 0000000..54a7d1c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/jmorecfg.h
@@ -0,0 +1,363 @@
+/*
+ * jmorecfg.h
+ *
+ * Copyright (C) 1991-1997, Thomas G. Lane.
+ * This file is part of the Independent JPEG Group's software.
+ * For conditions of distribution and use, see the accompanying README file.
+ *
+ * This file contains additional configuration options that customize the
+ * JPEG software for special applications or support machine-dependent
+ * optimizations. Most users will not need to touch this file.
+ */
+
+
+/*
+ * Define BITS_IN_JSAMPLE as either
+ * 8 for 8-bit sample values (the usual setting)
+ * 12 for 12-bit sample values
+ * Only 8 and 12 are legal data precisions for lossy JPEG according to the
+ * JPEG standard, and the IJG code does not support anything else!
+ * We do not support run-time selection of data precision, sorry.
+ */
+
+#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */
+
+
+/*
+ * Maximum number of components (color channels) allowed in JPEG image.
+ * To meet the letter of the JPEG spec, set this to 255. However, darn
+ * few applications need more than 4 channels (maybe 5 for CMYK + alpha
+ * mask). We recommend 10 as a reasonable compromise; use 4 if you are
+ * really short on memory. (Each allowed component costs a hundred or so
+ * bytes of storage, whether actually used in an image or not.)
+ */
+
+#define MAX_COMPONENTS 10 /* maximum number of image components */
+
+
+/*
+ * Basic data types.
+ * You may need to change these if you have a machine with unusual data
+ * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
+ * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits,
+ * but it had better be at least 16.
+ */
+
+/* Representation of a single sample (pixel element value).
+ * We frequently allocate large arrays of these, so it's important to keep
+ * them small. But if you have memory to burn and access to char or short
+ * arrays is very slow on your hardware, you might want to change these.
+ */
+
+#if BITS_IN_JSAMPLE == 8
+/* JSAMPLE should be the smallest type that will hold the values 0..255.
+ * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
+ */
+
+#ifdef HAVE_UNSIGNED_CHAR
+
+typedef unsigned char JSAMPLE;
+#define GETJSAMPLE(value) ((int) (value))
+
+#else /* not HAVE_UNSIGNED_CHAR */
+
+typedef char JSAMPLE;
+#ifdef CHAR_IS_UNSIGNED
+#define GETJSAMPLE(value) ((int) (value))
+#else
+#define GETJSAMPLE(value) ((int) (value) & 0xFF)
+#endif /* CHAR_IS_UNSIGNED */
+
+#endif /* HAVE_UNSIGNED_CHAR */
+
+#define MAXJSAMPLE 255
+#define CENTERJSAMPLE 128
+
+#endif /* BITS_IN_JSAMPLE == 8 */
+
+
+#if BITS_IN_JSAMPLE == 12
+/* JSAMPLE should be the smallest type that will hold the values 0..4095.
+ * On nearly all machines "short" will do nicely.
+ */
+
+typedef short JSAMPLE;
+#define GETJSAMPLE(value) ((int) (value))
+
+#define MAXJSAMPLE 4095
+#define CENTERJSAMPLE 2048
+
+#endif /* BITS_IN_JSAMPLE == 12 */
+
+
+/* Representation of a DCT frequency coefficient.
+ * This should be a signed value of at least 16 bits; "short" is usually OK.
+ * Again, we allocate large arrays of these, but you can change to int
+ * if you have memory to burn and "short" is really slow.
+ */
+
+typedef short JCOEF;
+
+
+/* Compressed datastreams are represented as arrays of JOCTET.
+ * These must be EXACTLY 8 bits wide, at least once they are written to
+ * external storage. Note that when using the stdio data source/destination
+ * managers, this is also the data type passed to fread/fwrite.
+ */
+
+#ifdef HAVE_UNSIGNED_CHAR
+
+typedef unsigned char JOCTET;
+#define GETJOCTET(value) (value)
+
+#else /* not HAVE_UNSIGNED_CHAR */
+
+typedef char JOCTET;
+#ifdef CHAR_IS_UNSIGNED
+#define GETJOCTET(value) (value)
+#else
+#define GETJOCTET(value) ((value) & 0xFF)
+#endif /* CHAR_IS_UNSIGNED */
+
+#endif /* HAVE_UNSIGNED_CHAR */
+
+
+/* These typedefs are used for various table entries and so forth.
+ * They must be at least as wide as specified; but making them too big
+ * won't cost a huge amount of memory, so we don't provide special
+ * extraction code like we did for JSAMPLE. (In other words, these
+ * typedefs live at a different point on the speed/space tradeoff curve.)
+ */
+
+/* UINT8 must hold at least the values 0..255. */
+
+#ifdef HAVE_UNSIGNED_CHAR
+typedef unsigned char UINT8;
+#else /* not HAVE_UNSIGNED_CHAR */
+#ifdef CHAR_IS_UNSIGNED
+typedef char UINT8;
+#else /* not CHAR_IS_UNSIGNED */
+typedef short UINT8;
+#endif /* CHAR_IS_UNSIGNED */
+#endif /* HAVE_UNSIGNED_CHAR */
+
+/* UINT16 must hold at least the values 0..65535. */
+
+#ifdef HAVE_UNSIGNED_SHORT
+typedef unsigned short UINT16;
+#else /* not HAVE_UNSIGNED_SHORT */
+typedef unsigned int UINT16;
+#endif /* HAVE_UNSIGNED_SHORT */
+
+/* INT16 must hold at least the values -32768..32767. */
+
+#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */
+typedef short INT16;
+#endif
+
+/* INT32 must hold at least signed 32-bit values. */
+
+#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
+typedef long INT32;
+#endif
+
+/* Datatype used for image dimensions. The JPEG standard only supports
+ * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore
+ * "unsigned int" is sufficient on all machines. However, if you need to
+ * handle larger images and you don't mind deviating from the spec, you
+ * can change this datatype.
+ */
+
+typedef unsigned int JDIMENSION;
+
+#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */
+
+
+/* These macros are used in all function definitions and extern declarations.
+ * You could modify them if you need to change function linkage conventions;
+ * in particular, you'll need to do that to make the library a Windows DLL.
+ * Another application is to make all functions global for use with debuggers
+ * or code profilers that require it.
+ */
+
+/* a function called through method pointers: */
+#define METHODDEF(type) static type
+/* a function used only in its module: */
+#define LOCAL(type) static type
+/* a function referenced thru EXTERNs: */
+#define GLOBAL(type) type
+/* a reference to a GLOBAL function: */
+#define EXTERN(type) extern type
+
+
+/* This macro is used to declare a "method", that is, a function pointer.
+ * We want to supply prototype parameters if the compiler can cope.
+ * Note that the arglist parameter must be parenthesized!
+ * Again, you can customize this if you need special linkage keywords.
+ */
+
+#ifdef HAVE_PROTOTYPES
+#define JMETHOD(type,methodname,arglist) type (*methodname) arglist
+#else
+#define JMETHOD(type,methodname,arglist) type (*methodname) ()
+#endif
+
+
+/* Here is the pseudo-keyword for declaring pointers that must be "far"
+ * on 80x86 machines. Most of the specialized coding for 80x86 is handled
+ * by just saying "FAR *" where such a pointer is needed. In a few places
+ * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
+ */
+
+#ifdef NEED_FAR_POINTERS
+#define FAR far
+#else
+#define FAR
+#endif
+
+
+/*
+ * On a few systems, type boolean and/or its values FALSE, TRUE may appear
+ * in standard header files. Or you may have conflicts with application-
+ * specific header files that you want to include together with these files.
+ * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
+ */
+
+#ifndef HAVE_BOOLEAN
+typedef int boolean;
+#endif
+#ifndef FALSE /* in case these macros already exist */
+#define FALSE 0 /* values of boolean */
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+
+/*
+ * The remaining options affect code selection within the JPEG library,
+ * but they don't need to be visible to most applications using the library.
+ * To minimize application namespace pollution, the symbols won't be
+ * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
+ */
+
+#ifdef JPEG_INTERNALS
+#define JPEG_INTERNAL_OPTIONS
+#endif
+
+#ifdef JPEG_INTERNAL_OPTIONS
+
+
+/*
+ * These defines indicate whether to include various optional functions.
+ * Undefining some of these symbols will produce a smaller but less capable
+ * library. Note that you can leave certain source files out of the
+ * compilation/linking process if you've #undef'd the corresponding symbols.
+ * (You may HAVE to do that if your compiler doesn't like null source files.)
+ */
+
+/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */
+
+/* Capability options common to encoder and decoder: */
+
+#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */
+#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */
+#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */
+
+/* Encoder capability options: */
+
+#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */
+#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define C_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/
+#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */
+/* Note: if you selected 12-bit data precision, it is dangerous to turn off
+ * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit
+ * precision, so jchuff.c normally uses entropy optimization to compute
+ * usable tables for higher precision. If you don't want to do optimization,
+ * you'll have to supply different default Huffman tables.
+ * The exact same statements apply for progressive JPEG: the default tables
+ * don't work for progressive mode. (This may get fixed, however.)
+ */
+#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */
+
+/* Decoder capability options: */
+
+#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */
+#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/
+#define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */
+#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */
+#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */
+#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */
+#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */
+#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */
+#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */
+
+/* more capability options later, no doubt */
+
+
+/*
+ * Ordering of RGB data in scanlines passed to or from the application.
+ * If your application wants to deal with data in the order B,G,R, just
+ * change these macros. You can also deal with formats such as R,G,B,X
+ * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing
+ * the offsets will also change the order in which colormap data is organized.
+ * RESTRICTIONS:
+ * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
+ * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not
+ * useful if you are using JPEG color spaces other than YCbCr or grayscale.
+ * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
+ * is not 3 (they don't understand about dummy color components!). So you
+ * can't use color quantization if you change that value.
+ */
+
+#define RGB_RED 0 /* Offset of Red in an RGB scanline element */
+#define RGB_GREEN 1 /* Offset of Green */
+#define RGB_BLUE 2 /* Offset of Blue */
+#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */
+
+
+/* Definitions for speed-related optimizations. */
+
+
+/* If your compiler supports inline functions, define INLINE
+ * as the inline keyword; otherwise define it as empty.
+ */
+
+#ifndef INLINE
+#ifdef __GNUC__ /* for instance, GNU C knows about inline */
+#define INLINE __inline__
+#endif
+#ifndef INLINE
+#define INLINE /* default is to define it as empty */
+#endif
+#endif
+
+
+/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
+ * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER
+ * as short on such a machine. MULTIPLIER must be at least 16 bits wide.
+ */
+
+#ifndef MULTIPLIER
+#define MULTIPLIER int /* type for fastest integer multiply */
+#endif
+
+
+/* FAST_FLOAT should be either float or double, whichever is done faster
+ * by your compiler. (Note that this type is only used in the floating point
+ * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
+ * Typically, float is faster in ANSI C compilers, while double is faster in
+ * pre-ANSI compilers (because they insist on converting to double anyway).
+ * The code below therefore chooses float if we have ANSI-style prototypes.
+ */
+
+#ifndef FAST_FLOAT
+#ifdef HAVE_PROTOTYPES
+#define FAST_FLOAT float
+#else
+#define FAST_FLOAT double
+#endif
+#endif
+
+#endif /* JPEG_INTERNAL_OPTIONS */
diff --git a/core/multimedia/opieplayer/libflash/jpeglib.h b/core/multimedia/opieplayer/libflash/jpeglib.h
new file mode 100644
index 0000000..d1be8dd
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/jpeglib.h
@@ -0,0 +1,1096 @@
+/*
+ * jpeglib.h
+ *
+ * Copyright (C) 1991-1998, Thomas G. Lane.
+ * This file is part of the Independent JPEG Group's software.
+ * For conditions of distribution and use, see the accompanying README file.
+ *
+ * This file defines the application interface for the JPEG library.
+ * Most applications using the library need only include this file,
+ * and perhaps jerror.h if they want to know the exact error codes.
+ */
+
+#ifndef JPEGLIB_H
+#define JPEGLIB_H
+
+/*
+ * First we include the configuration files that record how this
+ * installation of the JPEG library is set up. jconfig.h can be
+ * generated automatically for many systems. jmorecfg.h contains
+ * manual configuration options that most people need not worry about.
+ */
+
+#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */
+#include "jconfig.h" /* widely used configuration options */
+#endif
+#include "jmorecfg.h" /* seldom changed options */
+
+
+/* Version ID for the JPEG library.
+ * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60".
+ */
+
+#define JPEG_LIB_VERSION 62 /* Version 6b */
+
+
+/* Various constants determining the sizes of things.
+ * All of these are specified by the JPEG standard, so don't change them
+ * if you want to be compatible.
+ */
+
+#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */
+#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */
+#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */
+#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */
+#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */
+#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */
+#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */
+/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
+ * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
+ * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
+ * to handle it. We even let you do this from the jconfig.h file. However,
+ * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
+ * sometimes emits noncompliant files doesn't mean you should too.
+ */
+#define C_MAX_BLOCKS_IN_MCU 10 /* compressor's limit on blocks per MCU */
+#ifndef D_MAX_BLOCKS_IN_MCU
+#define D_MAX_BLOCKS_IN_MCU 10 /* decompressor's limit on blocks per MCU */
+#endif
+
+
+/* Data structures for images (arrays of samples and of DCT coefficients).
+ * On 80x86 machines, the image arrays are too big for near pointers,
+ * but the pointer arrays can fit in near memory.
+ */
+
+typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */
+typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */
+typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */
+
+typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */
+typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */
+typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */
+typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */
+
+typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */
+
+
+/* Types for JPEG compression parameters and working tables. */
+
+
+/* DCT coefficient quantization tables. */
+
+typedef struct {
+ /* This array gives the coefficient quantizers in natural array order
+ * (not the zigzag order in which they are stored in a JPEG DQT marker).
+ * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
+ */
+ UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */
+ /* This field is used only during compression. It's initialized FALSE when
+ * the table is created, and set TRUE when it's been output to the file.
+ * You could suppress output of a table by setting this to TRUE.
+ * (See jpeg_suppress_tables for an example.)
+ */
+ boolean sent_table; /* TRUE when table has been output */
+} JQUANT_TBL;
+
+
+/* Huffman coding tables. */
+
+typedef struct {
+ /* These two fields directly represent the contents of a JPEG DHT marker */
+ UINT8 bits[17]; /* bits[k] = # of symbols with codes of */
+ /* length k bits; bits[0] is unused */
+ UINT8 huffval[256]; /* The symbols, in order of incr code length */
+ /* This field is used only during compression. It's initialized FALSE when
+ * the table is created, and set TRUE when it's been output to the file.
+ * You could suppress output of a table by setting this to TRUE.
+ * (See jpeg_suppress_tables for an example.)
+ */
+ boolean sent_table; /* TRUE when table has been output */
+} JHUFF_TBL;
+
+
+/* Basic info about one component (color channel). */
+
+typedef struct {
+ /* These values are fixed over the whole image. */
+ /* For compression, they must be supplied by parameter setup; */
+ /* for decompression, they are read from the SOF marker. */
+ int component_id; /* identifier for this component (0..255) */
+ int component_index; /* its index in SOF or cinfo->comp_info[] */
+ int h_samp_factor; /* horizontal sampling factor (1..4) */
+ int v_samp_factor; /* vertical sampling factor (1..4) */
+ int quant_tbl_no; /* quantization table selector (0..3) */
+ /* These values may vary between scans. */
+ /* For compression, they must be supplied by parameter setup; */
+ /* for decompression, they are read from the SOS marker. */
+ /* The decompressor output side may not use these variables. */
+ int dc_tbl_no; /* DC entropy table selector (0..3) */
+ int ac_tbl_no; /* AC entropy table selector (0..3) */
+
+ /* Remaining fields should be treated as private by applications. */
+
+ /* These values are computed during compression or decompression startup: */
+ /* Component's size in DCT blocks.
+ * Any dummy blocks added to complete an MCU are not counted; therefore
+ * these values do not depend on whether a scan is interleaved or not.
+ */
+ JDIMENSION width_in_blocks;
+ JDIMENSION height_in_blocks;
+ /* Size of a DCT block in samples. Always DCTSIZE for compression.
+ * For decompression this is the size of the output from one DCT block,
+ * reflecting any scaling we choose to apply during the IDCT step.
+ * Values of 1,2,4,8 are likely to be supported. Note that different
+ * components may receive different IDCT scalings.
+ */
+ int DCT_scaled_size;
+ /* The downsampled dimensions are the component's actual, unpadded number
+ * of samples at the main buffer (preprocessing/compression interface), thus
+ * downsampled_width = ceil(image_width * Hi/Hmax)
+ * and similarly for height. For decompression, IDCT scaling is included, so
+ * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE)
+ */
+ JDIMENSION downsampled_width; /* actual width in samples */
+ JDIMENSION downsampled_height; /* actual height in samples */
+ /* This flag is used only for decompression. In cases where some of the
+ * components will be ignored (eg grayscale output from YCbCr image),
+ * we can skip most computations for the unused components.
+ */
+ boolean component_needed; /* do we need the value of this component? */
+
+ /* These values are computed before starting a scan of the component. */
+ /* The decompressor output side may not use these variables. */
+ int MCU_width; /* number of blocks per MCU, horizontally */
+ int MCU_height; /* number of blocks per MCU, vertically */
+ int MCU_blocks; /* MCU_width * MCU_height */
+ int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */
+ int last_col_width; /* # of non-dummy blocks across in last MCU */
+ int last_row_height; /* # of non-dummy blocks down in last MCU */
+
+ /* Saved quantization table for component; NULL if none yet saved.
+ * See jdinput.c comments about the need for this information.
+ * This field is currently used only for decompression.
+ */
+ JQUANT_TBL * quant_table;
+
+ /* Private per-component storage for DCT or IDCT subsystem. */
+ void * dct_table;
+} jpeg_component_info;
+
+
+/* The script for encoding a multiple-scan file is an array of these: */
+
+typedef struct {
+ int comps_in_scan; /* number of components encoded in this scan */
+ int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
+ int Ss, Se; /* progressive JPEG spectral selection parms */
+ int Ah, Al; /* progressive JPEG successive approx. parms */
+} jpeg_scan_info;
+
+/* The decompressor can save APPn and COM markers in a list of these: */
+
+typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
+
+struct jpeg_marker_struct {
+ jpeg_saved_marker_ptr next; /* next in list, or NULL */
+ UINT8 marker; /* marker code: JPEG_COM, or JPEG_APP0+n */
+ unsigned int original_length; /* # bytes of data in the file */
+ unsigned int data_length; /* # bytes of data saved at data[] */
+ JOCTET FAR * data; /* the data contained in the marker */
+ /* the marker length word is not counted in data_length or original_length */
+};
+
+/* Known color spaces. */
+
+typedef enum {
+ JCS_UNKNOWN, /* error/unspecified */
+ JCS_GRAYSCALE, /* monochrome */
+ JCS_RGB, /* red/green/blue */
+ JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */
+ JCS_CMYK, /* C/M/Y/K */
+ JCS_YCCK /* Y/Cb/Cr/K */
+} J_COLOR_SPACE;
+
+/* DCT/IDCT algorithm options. */
+
+typedef enum {
+ JDCT_ISLOW, /* slow but accurate integer algorithm */
+ JDCT_IFAST, /* faster, less accurate integer method */
+ JDCT_FLOAT /* floating-point: accurate, fast on fast HW */
+} J_DCT_METHOD;
+
+#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */
+#define JDCT_DEFAULT JDCT_ISLOW
+#endif
+#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */
+#define JDCT_FASTEST JDCT_IFAST
+#endif
+
+/* Dithering options for decompression. */
+
+typedef enum {
+ JDITHER_NONE, /* no dithering */
+ JDITHER_ORDERED, /* simple ordered dither */
+ JDITHER_FS /* Floyd-Steinberg error diffusion dither */
+} J_DITHER_MODE;
+
+
+/* Common fields between JPEG compression and decompression master structs. */
+
+#define jpeg_common_fields \
+ struct jpeg_error_mgr * err; /* Error handler module */\
+ struct jpeg_memory_mgr * mem; /* Memory manager module */\
+ struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
+ void * client_data; /* Available for use by application */\
+ boolean is_decompressor; /* So common code can tell which is which */\
+ int global_state /* For checking call sequence validity */
+
+/* Routines that are to be used by both halves of the library are declared
+ * to receive a pointer to this structure. There are no actual instances of
+ * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
+ */
+struct jpeg_common_struct {
+ jpeg_common_fields; /* Fields common to both master struct types */
+ /* Additional fields follow in an actual jpeg_compress_struct or
+ * jpeg_decompress_struct. All three structs must agree on these
+ * initial fields! (This would be a lot cleaner in C++.)
+ */
+};
+
+typedef struct jpeg_common_struct * j_common_ptr;
+typedef struct jpeg_compress_struct * j_compress_ptr;
+typedef struct jpeg_decompress_struct * j_decompress_ptr;
+
+
+/* Master record for a compression instance */
+
+struct jpeg_compress_struct {
+ jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */
+
+ /* Destination for compressed data */
+ struct jpeg_destination_mgr * dest;
+
+ /* Description of source image --- these fields must be filled in by
+ * outer application before starting compression. in_color_space must
+ * be correct before you can even call jpeg_set_defaults().
+ */
+
+ JDIMENSION image_width; /* input image width */
+ JDIMENSION image_height; /* input image height */
+ int input_components; /* # of color components in input image */
+ J_COLOR_SPACE in_color_space; /* colorspace of input image */
+
+ double input_gamma; /* image gamma of input image */
+
+ /* Compression parameters --- these fields must be set before calling
+ * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to
+ * initialize everything to reasonable defaults, then changing anything
+ * the application specifically wants to change. That way you won't get
+ * burnt when new parameters are added. Also note that there are several
+ * helper routines to simplify changing parameters.
+ */
+
+ int data_precision; /* bits of precision in image data */
+
+ int num_components; /* # of color components in JPEG image */
+ J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+ jpeg_component_info * comp_info;
+ /* comp_info[i] describes component that appears i'th in SOF */
+
+ JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
+ /* ptrs to coefficient quantization tables, or NULL if not defined */
+
+ JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ /* ptrs to Huffman coding tables, or NULL if not defined */
+
+ UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+ UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+ UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+ int num_scans; /* # of entries in scan_info array */
+ const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
+ /* The default value of scan_info is NULL, which causes a single-scan
+ * sequential JPEG file to be emitted. To create a multi-scan file,
+ * set num_scans and scan_info to point to an array of scan definitions.
+ */
+
+ boolean raw_data_in; /* TRUE=caller supplies downsampled data */
+ boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
+ boolean optimize_coding; /* TRUE=optimize entropy encoding parms */
+ boolean CCIR601_sampling; /* TRUE=first samples are cosited */
+ int smoothing_factor; /* 1..100, or 0 for no input smoothing */
+ J_DCT_METHOD dct_method; /* DCT algorithm selector */
+
+ /* The restart interval can be specified in absolute MCUs by setting
+ * restart_interval, or in MCU rows by setting restart_in_rows
+ * (in which case the correct restart_interval will be figured
+ * for each scan).
+ */
+ unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
+ int restart_in_rows; /* if > 0, MCU rows per restart interval */
+
+ /* Parameters controlling emission of special markers. */
+
+ boolean write_JFIF_header; /* should a JFIF marker be written? */
+ UINT8 JFIF_major_version; /* What to write for the JFIF version number */
+ UINT8 JFIF_minor_version;
+ /* These three values are not used by the JPEG code, merely copied */
+ /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */
+ /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */
+ /* ratio is defined by X_density/Y_density even when density_unit=0. */
+ UINT8 density_unit; /* JFIF code for pixel size units */
+ UINT16 X_density; /* Horizontal pixel density */
+ UINT16 Y_density; /* Vertical pixel density */
+ boolean write_Adobe_marker; /* should an Adobe marker be written? */
+
+ /* State variable: index of next scanline to be written to
+ * jpeg_write_scanlines(). Application may use this to control its
+ * processing loop, e.g., "while (next_scanline < image_height)".
+ */
+
+ JDIMENSION next_scanline; /* 0 .. image_height-1 */
+
+ /* Remaining fields are known throughout compressor, but generally
+ * should not be touched by a surrounding application.
+ */
+
+ /*
+ * These fields are computed during compression startup
+ */
+ boolean progressive_mode; /* TRUE if scan script uses progressive mode */
+ int max_h_samp_factor; /* largest h_samp_factor */
+ int max_v_samp_factor; /* largest v_samp_factor */
+
+ JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */
+ /* The coefficient controller receives data in units of MCU rows as defined
+ * for fully interleaved scans (whether the JPEG file is interleaved or not).
+ * There are v_samp_factor * DCTSIZE sample rows of each component in an
+ * "iMCU" (interleaved MCU) row.
+ */
+
+ /*
+ * These fields are valid during any one scan.
+ * They describe the components and MCUs actually appearing in the scan.
+ */
+ int comps_in_scan; /* # of JPEG components in this scan */
+ jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
+ /* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+ JDIMENSION MCUs_per_row; /* # of MCUs across the image */
+ JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */
+
+ int blocks_in_MCU; /* # of DCT blocks per MCU */
+ int MCU_membership[C_MAX_BLOCKS_IN_MCU];
+ /* MCU_membership[i] is index in cur_comp_info of component owning */
+ /* i'th block in an MCU */
+
+ int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */
+
+ /*
+ * Links to compression subobjects (methods and private variables of modules)
+ */
+ struct jpeg_comp_master * master;
+ struct jpeg_c_main_controller * main;
+ struct jpeg_c_prep_controller * prep;
+ struct jpeg_c_coef_controller * coef;
+ struct jpeg_marker_writer * marker;
+ struct jpeg_color_converter * cconvert;
+ struct jpeg_downsampler * downsample;
+ struct jpeg_forward_dct * fdct;
+ struct jpeg_entropy_encoder * entropy;
+ jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
+ int script_space_size;
+};
+
+
+/* Master record for a decompression instance */
+
+struct jpeg_decompress_struct {
+ jpeg_common_fields; /* Fields shared with jpeg_compress_struct */
+
+ /* Source of compressed data */
+ struct jpeg_source_mgr * src;
+
+ /* Basic description of image --- filled in by jpeg_read_header(). */
+ /* Application may inspect these values to decide how to process image. */
+
+ JDIMENSION image_width; /* nominal image width (from SOF marker) */
+ JDIMENSION image_height; /* nominal image height */
+ int num_components; /* # of color components in JPEG image */
+ J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+ /* Decompression processing parameters --- these fields must be set before
+ * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes
+ * them to default values.
+ */
+
+ J_COLOR_SPACE out_color_space; /* colorspace for output */
+
+ unsigned int scale_num, scale_denom; /* fraction by which to scale image */
+
+ double output_gamma; /* image gamma wanted in output */
+
+ boolean buffered_image; /* TRUE=multiple output passes */
+ boolean raw_data_out; /* TRUE=downsampled data wanted */
+
+ J_DCT_METHOD dct_method; /* IDCT algorithm selector */
+ boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */
+ boolean do_block_smoothing; /* TRUE=apply interblock smoothing */
+
+ boolean quantize_colors; /* TRUE=colormapped output wanted */
+ /* the following are ignored if not quantize_colors: */
+ J_DITHER_MODE dither_mode; /* type of color dithering to use */
+ boolean two_pass_quantize; /* TRUE=use two-pass color quantization */
+ int desired_number_of_colors; /* max # colors to use in created colormap */
+ /* these are significant only in buffered-image mode: */
+ boolean enable_1pass_quant; /* enable future use of 1-pass quantizer */
+ boolean enable_external_quant;/* enable future use of external colormap */
+ boolean enable_2pass_quant; /* enable future use of 2-pass quantizer */
+
+ /* Description of actual output image that will be returned to application.
+ * These fields are computed by jpeg_start_decompress().
+ * You can also use jpeg_calc_output_dimensions() to determine these values
+ * in advance of calling jpeg_start_decompress().
+ */
+
+ JDIMENSION output_width; /* scaled image width */
+ JDIMENSION output_height; /* scaled image height */
+ int out_color_components; /* # of color components in out_color_space */
+ int output_components; /* # of color components returned */
+ /* output_components is 1 (a colormap index) when quantizing colors;
+ * otherwise it equals out_color_components.
+ */
+ int rec_outbuf_height; /* min recommended height of scanline buffer */
+ /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
+ * high, space and time will be wasted due to unnecessary data copying.
+ * Usually rec_outbuf_height will be 1 or 2, at most 4.
+ */
+
+ /* When quantizing colors, the output colormap is described by these fields.
+ * The application can supply a colormap by setting colormap non-NULL before
+ * calling jpeg_start_decompress; otherwise a colormap is created during
+ * jpeg_start_decompress or jpeg_start_output.
+ * The map has out_color_components rows and actual_number_of_colors columns.
+ */
+ int actual_number_of_colors; /* number of entries in use */
+ JSAMPARRAY colormap; /* The color map as a 2-D pixel array */
+
+ /* State variables: these variables indicate the progress of decompression.
+ * The application may examine these but must not modify them.
+ */
+
+ /* Row index of next scanline to be read from jpeg_read_scanlines().
+ * Application may use this to control its processing loop, e.g.,
+ * "while (output_scanline < output_height)".
+ */
+ JDIMENSION output_scanline; /* 0 .. output_height-1 */
+
+ /* Current input scan number and number of iMCU rows completed in scan.
+ * These indicate the progress of the decompressor input side.
+ */
+ int input_scan_number; /* Number of SOS markers seen so far */
+ JDIMENSION input_iMCU_row; /* Number of iMCU rows completed */
+
+ /* The "output scan number" is the notional scan being displayed by the
+ * output side. The decompressor will not allow output scan/row number
+ * to get ahead of input scan/row, but it can fall arbitrarily far behind.
+ */
+ int output_scan_number; /* Nominal scan number being displayed */
+ JDIMENSION output_iMCU_row; /* Number of iMCU rows read */
+
+ /* Current progression status. coef_bits[c][i] indicates the precision
+ * with which component c's DCT coefficient i (in zigzag order) is known.
+ * It is -1 when no data has yet been received, otherwise it is the point
+ * transform (shift) value for the most recent scan of the coefficient
+ * (thus, 0 at completion of the progression).
+ * This pointer is NULL when reading a non-progressive file.
+ */
+ int (*coef_bits)[DCTSIZE2]; /* -1 or current Al value for each coef */
+
+ /* Internal JPEG parameters --- the application usually need not look at
+ * these fields. Note that the decompressor output side may not use
+ * any parameters that can change between scans.
+ */
+
+ /* Quantization and Huffman tables are carried forward across input
+ * datastreams when processing abbreviated JPEG datastreams.
+ */
+
+ JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
+ /* ptrs to coefficient quantization tables, or NULL if not defined */
+
+ JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+ /* ptrs to Huffman coding tables, or NULL if not defined */
+
+ /* These parameters are never carried across datastreams, since they
+ * are given in SOF/SOS markers or defined to be reset by SOI.
+ */
+
+ int data_precision; /* bits of precision in image data */
+
+ jpeg_component_info * comp_info;
+ /* comp_info[i] describes component that appears i'th in SOF */
+
+ boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */
+ boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */
+
+ UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+ UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+ UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+ unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
+
+ /* These fields record data obtained from optional markers recognized by
+ * the JPEG library.
+ */
+ boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */
+ /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
+ UINT8 JFIF_major_version; /* JFIF version number */
+ UINT8 JFIF_minor_version;
+ UINT8 density_unit; /* JFIF code for pixel size units */
+ UINT16 X_density; /* Horizontal pixel density */
+ UINT16 Y_density; /* Vertical pixel density */
+ boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */
+ UINT8 Adobe_transform; /* Color transform code from Adobe marker */
+
+ boolean CCIR601_sampling; /* TRUE=first samples are cosited */
+
+ /* Aside from the specific data retained from APPn markers known to the
+ * library, the uninterpreted contents of any or all APPn and COM markers
+ * can be saved in a list for examination by the application.
+ */
+ jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
+
+ /* Remaining fields are known throughout decompressor, but generally
+ * should not be touched by a surrounding application.
+ */
+
+ /*
+ * These fields are computed during decompression startup
+ */
+ int max_h_samp_factor; /* largest h_samp_factor */
+ int max_v_samp_factor; /* largest v_samp_factor */
+
+ int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */
+
+ JDIMENSION total_iMCU_rows; /* # of iMCU rows in image */
+ /* The coefficient controller's input and output progress is measured in
+ * units of "iMCU" (interleaved MCU) rows. These are the same as MCU rows
+ * in fully interleaved JPEG scans, but are used whether the scan is
+ * interleaved or not. We define an iMCU row as v_samp_factor DCT block
+ * rows of each component. Therefore, the IDCT output contains
+ * v_samp_factor*DCT_scaled_size sample rows of a component per iMCU row.
+ */
+
+ JSAMPLE * sample_range_limit; /* table for fast range-limiting */
+
+ /*
+ * These fields are valid during any one scan.
+ * They describe the components and MCUs actually appearing in the scan.
+ * Note that the decompressor output side must not use these fields.
+ */
+ int comps_in_scan; /* # of JPEG components in this scan */
+ jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
+ /* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+ JDIMENSION MCUs_per_row; /* # of MCUs across the image */
+ JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */
+
+ int blocks_in_MCU; /* # of DCT blocks per MCU */
+ int MCU_membership[D_MAX_BLOCKS_IN_MCU];
+ /* MCU_membership[i] is index in cur_comp_info of component owning */
+ /* i'th block in an MCU */
+
+ int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */
+
+ /* This field is shared between entropy decoder and marker parser.
+ * It is either zero or the code of a JPEG marker that has been
+ * read from the data source, but has not yet been processed.
+ */
+ int unread_marker;
+
+ /*
+ * Links to decompression subobjects (methods, private variables of modules)
+ */
+ struct jpeg_decomp_master * master;
+ struct jpeg_d_main_controller * main;
+ struct jpeg_d_coef_controller * coef;
+ struct jpeg_d_post_controller * post;
+ struct jpeg_input_controller * inputctl;
+ struct jpeg_marker_reader * marker;
+ struct jpeg_entropy_decoder * entropy;
+ struct jpeg_inverse_dct * idct;
+ struct jpeg_upsampler * upsample;
+ struct jpeg_color_deconverter * cconvert;
+ struct jpeg_color_quantizer * cquantize;
+};
+
+
+/* "Object" declarations for JPEG modules that may be supplied or called
+ * directly by the surrounding application.
+ * As with all objects in the JPEG library, these structs only define the
+ * publicly visible methods and state variables of a module. Additional
+ * private fields may exist after the public ones.
+ */
+
+
+/* Error handler object */
+
+struct jpeg_error_mgr {
+ /* Error exit handler: does not return to caller */
+ JMETHOD(void, error_exit, (j_common_ptr cinfo));
+ /* Conditionally emit a trace or warning message */
+ JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
+ /* Routine that actually outputs a trace or error message */
+ JMETHOD(void, output_message, (j_common_ptr cinfo));
+ /* Format a message string for the most recent JPEG error or message */
+ JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
+#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */
+ /* Reset error state variables at start of a new image */
+ JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
+
+ /* The message ID code and any parameters are saved here.
+ * A message can have one string parameter or up to 8 int parameters.
+ */
+ int msg_code;
+#define JMSG_STR_PARM_MAX 80
+ union {
+ int i[8];
+ char s[JMSG_STR_PARM_MAX];
+ } msg_parm;
+
+ /* Standard state variables for error facility */
+
+ int trace_level; /* max msg_level that will be displayed */
+
+ /* For recoverable corrupt-data errors, we emit a warning message,
+ * but keep going unless emit_message chooses to abort. emit_message
+ * should count warnings in num_warnings. The surrounding application
+ * can check for bad data by seeing if num_warnings is nonzero at the
+ * end of processing.
+ */
+ long num_warnings; /* number of corrupt-data warnings */
+
+ /* These fields point to the table(s) of error message strings.
+ * An application can change the table pointer to switch to a different
+ * message list (typically, to change the language in which errors are
+ * reported). Some applications may wish to add additional error codes
+ * that will be handled by the JPEG library error mechanism; the second
+ * table pointer is used for this purpose.
+ *
+ * First table includes all errors generated by JPEG library itself.
+ * Error code 0 is reserved for a "no such error string" message.
+ */
+ const char * const * jpeg_message_table; /* Library errors */
+ int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */
+ /* Second table can be added by application (see cjpeg/djpeg for example).
+ * It contains strings numbered first_addon_message..last_addon_message.
+ */
+ const char * const * addon_message_table; /* Non-library errors */
+ int first_addon_message; /* code for first string in addon table */
+ int last_addon_message; /* code for last string in addon table */
+};
+
+
+/* Progress monitor object */
+
+struct jpeg_progress_mgr {
+ JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
+
+ long pass_counter; /* work units completed in this pass */
+ long pass_limit; /* total number of work units in this pass */
+ int completed_passes; /* passes completed so far */
+ int total_passes; /* total number of passes expected */
+};
+
+
+/* Data destination object for compression */
+
+struct jpeg_destination_mgr {
+ JOCTET * next_output_byte; /* => next byte to write in buffer */
+ size_t free_in_buffer; /* # of byte spaces remaining in buffer */
+
+ JMETHOD(void, init_destination, (j_compress_ptr cinfo));
+ JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
+ JMETHOD(void, term_destination, (j_compress_ptr cinfo));
+};
+
+
+/* Data source object for decompression */
+
+struct jpeg_source_mgr {
+ const JOCTET * next_input_byte; /* => next byte to read from buffer */
+ size_t bytes_in_buffer; /* # of bytes remaining in buffer */
+
+ JMETHOD(void, init_source, (j_decompress_ptr cinfo));
+ JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
+ JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
+ JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
+ JMETHOD(void, term_source, (j_decompress_ptr cinfo));
+};
+
+
+/* Memory manager object.
+ * Allocates "small" objects (a few K total), "large" objects (tens of K),
+ * and "really big" objects (virtual arrays with backing store if needed).
+ * The memory manager does not allow individual objects to be freed; rather,
+ * each created object is assigned to a pool, and whole pools can be freed
+ * at once. This is faster and more convenient than remembering exactly what
+ * to free, especially where malloc()/free() are not too speedy.
+ * NB: alloc routines never return NULL. They exit to error_exit if not
+ * successful.
+ */
+
+#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */
+#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */
+#define JPOOL_NUMPOOLS 2
+
+typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
+typedef struct jvirt_barray_control * jvirt_barray_ptr;
+
+
+struct jpeg_memory_mgr {
+ /* Method pointers */
+ JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
+ size_t sizeofobject));
+ JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
+ size_t sizeofobject));
+ JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
+ JDIMENSION samplesperrow,
+ JDIMENSION numrows));
+ JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
+ JDIMENSION blocksperrow,
+ JDIMENSION numrows));
+ JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
+ int pool_id,
+ boolean pre_zero,
+ JDIMENSION samplesperrow,
+ JDIMENSION numrows,
+ JDIMENSION maxaccess));
+ JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
+ int pool_id,
+ boolean pre_zero,
+ JDIMENSION blocksperrow,
+ JDIMENSION numrows,
+ JDIMENSION maxaccess));
+ JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
+ JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
+ jvirt_sarray_ptr ptr,
+ JDIMENSION start_row,
+ JDIMENSION num_rows,
+ boolean writable));
+ JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
+ jvirt_barray_ptr ptr,
+ JDIMENSION start_row,
+ JDIMENSION num_rows,
+ boolean writable));
+ JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
+ JMETHOD(void, self_destruct, (j_common_ptr cinfo));
+
+ /* Limit on memory allocation for this JPEG object. (Note that this is
+ * merely advisory, not a guaranteed maximum; it only affects the space
+ * used for virtual-array buffers.) May be changed by outer application
+ * after creating the JPEG object.
+ */
+ long max_memory_to_use;
+
+ /* Maximum allocation request accepted by alloc_large. */
+ long max_alloc_chunk;
+};
+
+
+/* Routine signature for application-supplied marker processing methods.
+ * Need not pass marker code since it is stored in cinfo->unread_marker.
+ */
+typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
+
+
+/* Declarations for routines called by application.
+ * The JPP macro hides prototype parameters from compilers that can't cope.
+ * Note JPP requires double parentheses.
+ */
+
+#ifdef HAVE_PROTOTYPES
+#define JPP(arglist) arglist
+#else
+#define JPP(arglist) ()
+#endif
+
+
+/* Short forms of external names for systems with brain-damaged linkers.
+ * We shorten external names to be unique in the first six letters, which
+ * is good enough for all known systems.
+ * (If your compiler itself needs names to be unique in less than 15
+ * characters, you are out of luck. Get a better compiler.)
+ */
+
+#ifdef NEED_SHORT_EXTERNAL_NAMES
+#define jpeg_std_error jStdError
+#define jpeg_CreateCompress jCreaCompress
+#define jpeg_CreateDecompress jCreaDecompress
+#define jpeg_destroy_compress jDestCompress
+#define jpeg_destroy_decompress jDestDecompress
+#define jpeg_stdio_dest jStdDest
+#define jpeg_stdio_src jStdSrc
+#define jpeg_set_defaults jSetDefaults
+#define jpeg_set_colorspace jSetColorspace
+#define jpeg_default_colorspace jDefColorspace
+#define jpeg_set_quality jSetQuality
+#define jpeg_set_linear_quality jSetLQuality
+#define jpeg_add_quant_table jAddQuantTable
+#define jpeg_quality_scaling jQualityScaling
+#define jpeg_simple_progression jSimProgress
+#define jpeg_suppress_tables jSuppressTables
+#define jpeg_alloc_quant_table jAlcQTable
+#define jpeg_alloc_huff_table jAlcHTable
+#define jpeg_start_compress jStrtCompress
+#define jpeg_write_scanlines jWrtScanlines
+#define jpeg_finish_compress jFinCompress
+#define jpeg_write_raw_data jWrtRawData
+#define jpeg_write_marker jWrtMarker
+#define jpeg_write_m_header jWrtMHeader
+#define jpeg_write_m_byte jWrtMByte
+#define jpeg_write_tables jWrtTables
+#define jpeg_read_header jReadHeader
+#define jpeg_start_decompress jStrtDecompress
+#define jpeg_read_scanlines jReadScanlines
+#define jpeg_finish_decompress jFinDecompress
+#define jpeg_read_raw_data jReadRawData
+#define jpeg_has_multiple_scans jHasMultScn
+#define jpeg_start_output jStrtOutput
+#define jpeg_finish_output jFinOutput
+#define jpeg_input_complete jInComplete
+#define jpeg_new_colormap jNewCMap
+#define jpeg_consume_input jConsumeInput
+#define jpeg_calc_output_dimensions jCalcDimensions
+#define jpeg_save_markers jSaveMarkers
+#define jpeg_set_marker_processor jSetMarker
+#define jpeg_read_coefficients jReadCoefs
+#define jpeg_write_coefficients jWrtCoefs
+#define jpeg_copy_critical_parameters jCopyCrit
+#define jpeg_abort_compress jAbrtCompress
+#define jpeg_abort_decompress jAbrtDecompress
+#define jpeg_abort jAbort
+#define jpeg_destroy jDestroy
+#define jpeg_resync_to_restart jResyncRestart
+#endif /* NEED_SHORT_EXTERNAL_NAMES */
+
+
+/* Default error-management setup */
+EXTERN(struct jpeg_error_mgr *) jpeg_std_error
+ JPP((struct jpeg_error_mgr * err));
+
+/* Initialization of JPEG compression objects.
+ * jpeg_create_compress() and jpeg_create_decompress() are the exported
+ * names that applications should call. These expand to calls on
+ * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
+ * passed for version mismatch checking.
+ * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
+ */
+#define jpeg_create_compress(cinfo) \
+ jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
+ (size_t) sizeof(struct jpeg_compress_struct))
+#define jpeg_create_decompress(cinfo) \
+ jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
+ (size_t) sizeof(struct jpeg_decompress_struct))
+EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
+ int version, size_t structsize));
+EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
+ int version, size_t structsize));
+/* Destruction of JPEG compression objects */
+EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
+
+/* Standard data source and destination managers: stdio streams. */
+/* Caller is responsible for opening the file before and closing after. */
+EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
+EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
+
+/* Default parameter setup for compression */
+EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
+/* Compression parameter setup aids */
+EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
+ J_COLOR_SPACE colorspace));
+EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
+ boolean force_baseline));
+EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
+ int scale_factor,
+ boolean force_baseline));
+EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
+ const unsigned int *basic_table,
+ int scale_factor,
+ boolean force_baseline));
+EXTERN(int) jpeg_quality_scaling JPP((int quality));
+EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
+ boolean suppress));
+EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
+EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
+
+/* Main entry points for compression */
+EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
+ boolean write_all_tables));
+EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
+ JSAMPARRAY scanlines,
+ JDIMENSION num_lines));
+EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
+
+/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
+ JSAMPIMAGE data,
+ JDIMENSION num_lines));
+
+/* Write a special marker. See libjpeg.doc concerning safe usage. */
+EXTERN(void) jpeg_write_marker
+ JPP((j_compress_ptr cinfo, int marker,
+ const JOCTET * dataptr, unsigned int datalen));
+/* Same, but piecemeal. */
+EXTERN(void) jpeg_write_m_header
+ JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
+EXTERN(void) jpeg_write_m_byte
+ JPP((j_compress_ptr cinfo, int val));
+
+/* Alternate compression function: just write an abbreviated table file */
+EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
+
+/* Decompression startup: read start of JPEG datastream to see what's there */
+EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
+ boolean require_image));
+/* Return value is one of: */
+#define JPEG_SUSPENDED 0 /* Suspended due to lack of input data */
+#define JPEG_HEADER_OK 1 /* Found valid image datastream */
+#define JPEG_HEADER_TABLES_ONLY 2 /* Found valid table-specs-only datastream */
+/* If you pass require_image = TRUE (normal case), you need not check for
+ * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
+ * JPEG_SUSPENDED is only possible if you use a data source module that can
+ * give a suspension return (the stdio source module doesn't).
+ */
+
+/* Main entry points for decompression */
+EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
+EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
+ JSAMPARRAY scanlines,
+ JDIMENSION max_lines));
+EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
+
+/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
+ JSAMPIMAGE data,
+ JDIMENSION max_lines));
+
+/* Additional entry points for buffered-image mode. */
+EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
+EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
+ int scan_number));
+EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
+EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
+EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
+EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
+/* Return value is one of: */
+/* #define JPEG_SUSPENDED 0 Suspended due to lack of input data */
+#define JPEG_REACHED_SOS 1 /* Reached start of new scan */
+#define JPEG_REACHED_EOI 2 /* Reached end of image */
+#define JPEG_ROW_COMPLETED 3 /* Completed one iMCU row */
+#define JPEG_SCAN_COMPLETED 4 /* Completed last iMCU row of a scan */
+
+/* Precalculate output dimensions for current decompression parameters. */
+EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
+
+/* Control saving of COM and APPn markers into marker_list. */
+EXTERN(void) jpeg_save_markers
+ JPP((j_decompress_ptr cinfo, int marker_code,
+ unsigned int length_limit));
+
+/* Install a special processing method for COM or APPn markers. */
+EXTERN(void) jpeg_set_marker_processor
+ JPP((j_decompress_ptr cinfo, int marker_code,
+ jpeg_marker_parser_method routine));
+
+/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
+EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
+EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
+ jvirt_barray_ptr * coef_arrays));
+EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
+ j_compress_ptr dstinfo));
+
+/* If you choose to abort compression or decompression before completing
+ * jpeg_finish_(de)compress, then you need to clean up to release memory,
+ * temporary files, etc. You can just call jpeg_destroy_(de)compress
+ * if you're done with the JPEG object, but if you want to clean it up and
+ * reuse it, call this:
+ */
+EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
+
+/* Generic versions of jpeg_abort and jpeg_destroy that work on either
+ * flavor of JPEG object. These may be more convenient in some places.
+ */
+EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
+EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
+
+/* Default restart-marker-resync procedure for use by data source modules */
+EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
+ int desired));
+
+
+/* These marker codes are exported since applications and data source modules
+ * are likely to want to use them.
+ */
+
+#define JPEG_RST0 0xD0 /* RST0 marker code */
+#define JPEG_EOI 0xD9 /* EOI marker code */
+#define JPEG_APP0 0xE0 /* APP0 marker code */
+#define JPEG_COM 0xFE /* COM marker code */
+
+
+/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
+ * for structure definitions that are never filled in, keep it quiet by
+ * supplying dummy definitions for the various substructures.
+ */
+
+#ifdef INCOMPLETE_TYPES_BROKEN
+#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */
+struct jvirt_sarray_control { long dummy; };
+struct jvirt_barray_control { long dummy; };
+struct jpeg_comp_master { long dummy; };
+struct jpeg_c_main_controller { long dummy; };
+struct jpeg_c_prep_controller { long dummy; };
+struct jpeg_c_coef_controller { long dummy; };
+struct jpeg_marker_writer { long dummy; };
+struct jpeg_color_converter { long dummy; };
+struct jpeg_downsampler { long dummy; };
+struct jpeg_forward_dct { long dummy; };
+struct jpeg_entropy_encoder { long dummy; };
+struct jpeg_decomp_master { long dummy; };
+struct jpeg_d_main_controller { long dummy; };
+struct jpeg_d_coef_controller { long dummy; };
+struct jpeg_d_post_controller { long dummy; };
+struct jpeg_input_controller { long dummy; };
+struct jpeg_marker_reader { long dummy; };
+struct jpeg_entropy_decoder { long dummy; };
+struct jpeg_inverse_dct { long dummy; };
+struct jpeg_upsampler { long dummy; };
+struct jpeg_color_deconverter { long dummy; };
+struct jpeg_color_quantizer { long dummy; };
+#endif /* JPEG_INTERNALS */
+#endif /* INCOMPLETE_TYPES_BROKEN */
+
+
+/*
+ * The JPEG library modules define JPEG_INTERNALS before including this file.
+ * The internal structure declarations are read only when that is true.
+ * Applications using the library should not include jpegint.h, but may wish
+ * to include jerror.h.
+ */
+
+#ifdef JPEG_INTERNALS
+#include "jpegint.h" /* fetch private declarations */
+#include "jerror.h" /* fetch error codes too */
+#endif
+
+#endif /* JPEGLIB_H */
diff --git a/core/multimedia/opieplayer/libflash/libflash.pro b/core/multimedia/opieplayer/libflash/libflash.pro
new file mode 100644
index 0000000..d144f0b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/libflash.pro
@@ -0,0 +1,15 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = libflashplugin.h libflashpluginimpl.h
+SOURCES = libflashplugin.cpp libflashpluginimpl.cpp \
+ adpcm.cc character.cc flash.cc graphic16.cc matrix.cc script.cc \
+ sprite.cc bitmap.cc cxform.cc font.cc graphic24.cc movie.cc \
+ shape.cc sqrt.cc button.cc displaylist.cc graphic.cc graphic32.cc \
+ program.cc sound.cc text.cc
+TARGET = flashplugin
+DESTDIR = ../../plugins/codecs
+INCLUDEPATH += $(QPEDIR)/include ..
+DEPENDPATH += ../$(QPEDIR)/include ..
+LIBS += -lqpe
+VERSION = 1.0.0
+
diff --git a/core/multimedia/opieplayer/libflash/libflashplugin.cpp b/core/multimedia/opieplayer/libflash/libflashplugin.cpp
new file mode 100644
index 0000000..538c695
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/libflashplugin.cpp
@@ -0,0 +1,223 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "libflashplugin.h"
+
+#if 0
+
+bool LibFlashPlugin::audioReadSamples( short *output, int channel, long samples, int stream ) {
+}
+
+
+bool LibFlashPlugin::audioReReadSamples( short *output, int channel, long samples, int stream ) {
+}
+
+
+bool LibFlashPlugin::audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream ) {
+ samplesRead = samples;
+}
+
+
+bool LibFlashPlugin::audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream ) {
+}
+
+
+bool LibFlashPlugin::videoReadFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, ColorFormat color_model, int stream ) {
+}
+
+
+bool LibFlashPlugin::videoReadScaledFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, int out_w, int out_h, ColorFormat color_model, int stream ) {
+/*
+ int format = MPEG3_RGB565;
+ switch ( color_model ) {
+ case RGB565: format = MPEG3_RGB565; break;
+ case RGBA8888: format = MPEG3_RGBA8888; break;
+ case BGRA8888: format = MPEG3_BGRA8888; break;
+ }
+*/
+}
+
+
+bool LibFlashPlugin::videoReadYUVFrame( char *y_output, char *u_output, char *v_output, int in_x, int in_y, int in_w, int in_h, int stream ) {
+}
+
+
+FlashHandle file;
+FlashDisplay *fd;
+
+#endif
+
+
+LibFlashPlugin::LibFlashPlugin() {
+ file = NULL;
+ fd = 0;
+}
+#include <stdio.h>
+#include <stdlib.h>
+static int readFile(const char *filename, char **buffer, long *size)
+{
+ FILE *in;
+ char *buf;
+ long length;
+
+ printf("read files\n");
+
+ in = fopen(filename,"r");
+ if (in == 0) {
+ perror(filename);
+ return -1;
+ }
+ fseek(in,0,SEEK_END);
+ length = ftell(in);
+ rewind(in);
+ buf = (char *)malloc(length);
+ fread(buf,length,1,in);
+ fclose(in);
+
+ *size = length;
+ *buffer = buf;
+
+ return length;
+}
+
+static void showUrl(char *url, char * /*target*/, void * /*client_data*/) {
+ printf("get url\n");
+ printf("GetURL : %s\n", url);
+}
+
+static void getSwf(char *url, int level, void *client_data) {
+ FlashHandle flashHandle = (FlashHandle) client_data;
+ char *buffer;
+ long size;
+
+ printf("get swf\n");
+
+ printf("LoadMovie: %s @ %d\n", url, level);
+ if (readFile(url, &buffer, &size) > 0) {
+ FlashParse(flashHandle, level, buffer, size);
+ }
+}
+
+bool LibFlashPlugin::open( const QString& fileName ) {
+
+ printf("opening file\n");
+
+ delete fd;
+ fd = new FlashDisplay;
+ fd->pixels = new int[320*240*4];
+ fd->width = 200;
+ fd->bpl = 320*2;
+ fd->height = 300;
+ fd->depth = 16;
+ fd->bpp = 2;
+ fd->flash_refresh = 25;
+ fd->clip_x = 0;
+ fd->clip_y = 0;
+ fd->clip_width = 0;
+ fd->clip_height = 0;
+
+ char *buffer;
+ long size;
+ int status;
+ struct FlashInfo fi;
+
+ if (readFile(fileName.latin1(), &buffer, &size) < 0)
+ exit(2);
+
+ if (!(file = FlashNew()))
+ exit(1);
+
+ do
+ status = FlashParse(file, 0, buffer, size);
+ while (status & FLASH_PARSE_NEED_DATA);
+
+ free(buffer);
+ FlashGetInfo(file, &fi);
+ //FlashSettings(flashHandle, PLAYER_LOOP);
+ FlashGraphicInit(file, fd);
+ FlashSoundInit(file, "/dev/dsp");
+ FlashSetGetUrlMethod(file, showUrl, 0);
+ FlashSetGetSwfMethod(file, getSwf, (void*)file);
+
+ printf("opened file\n");
+}
+
+// If decoder doesn't support audio then return 0 here
+bool LibFlashPlugin::audioSetSample( long sample, int stream ) { return TRUE; }
+long LibFlashPlugin::audioGetSample( int stream ) { return 0; }
+//bool LibFlashPlugin::audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream ) { return TRUE; }
+//bool LibFlashPlugin::audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream ) { return FALSE; }
+bool LibFlashPlugin::audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream ) { return FALSE; }
+//bool LibFlashPlugin::audioReadSamples( short *output, int channel, long samples, int stream ) { return TRUE; }
+//bool LibFlashPlugin::audioReReadSamples( short *output, int channel, long samples, int stream ) { return TRUE; }
+
+// If decoder doesn't support video then return 0 here
+int LibFlashPlugin::videoStreams() { return 1; }
+int LibFlashPlugin::videoWidth( int stream ) { return 300; }
+int LibFlashPlugin::videoHeight( int stream ) { return 200; }
+double LibFlashPlugin::videoFrameRate( int stream ) { return 25.0; }
+int LibFlashPlugin::videoFrames( int stream ) { return 1000000; }
+bool LibFlashPlugin::videoSetFrame( long frame, int stream ) { return TRUE; }
+long LibFlashPlugin::videoGetFrame( int stream ) { return 0; }
+bool LibFlashPlugin::videoReadFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, ColorFormat color_model, int stream ) { return TRUE; }
+#include <time.h>
+bool LibFlashPlugin::videoReadScaledFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, int out_w, int out_h, ColorFormat color_model, int stream ) {
+ struct timeval wd;
+ FlashEvent fe;
+
+/*
+ delete fd;
+ fd = new FlashDisplay;
+ fd->pixels = output_rows[0];
+ fd->width = 300; // out_w;
+ fd->bpl = 640; // out_w*2;
+ fd->height = 200;//out_h;
+ fd->depth = 16;
+ fd->bpp = 2;
+ fd->flash_refresh = 50;
+ fd->clip_x = 0;//in_x;
+ fd->clip_y = 0;//in_y;
+ fd->clip_width = 300;//in_w;
+ fd->clip_height = 200;//in_h;
+ FlashGraphicInit(file, fd);
+*/
+
+ long cmd = FLASH_WAKEUP;
+ FlashExec(file, cmd, 0, &wd);
+
+ fe.type = FeRefresh;
+ cmd = FLASH_EVENT;
+ FlashExec(file, cmd, &fe, &wd);
+/*
+ for (int i = 0; i < out_h; i++)
+ memcpy( output_rows[i], (char*)fd->pixels + i*fd->bpl, QMIN( fd->width * fd->bpp, out_w * fd->bpp ) );
+*/
+ memcpy( output_rows[0], (char*)fd->pixels, out_w * out_h * 2 );
+}
+
+bool LibFlashPlugin::videoReadYUVFrame( char *y_output, char *u_output, char *v_output, int in_x, int in_y, int in_w, int in_h, int stream ) { return TRUE; }
+
+// Profiling
+double LibFlashPlugin::getTime() { return 0.0; }
+
+// Ignore if these aren't supported
+bool LibFlashPlugin::setSMP( int cpus ) { return TRUE; }
+bool LibFlashPlugin::setMMX( bool useMMX ) { return TRUE; }
+
+
diff --git a/core/multimedia/opieplayer/libflash/libflashplugin.h b/core/multimedia/opieplayer/libflash/libflashplugin.h
new file mode 100644
index 0000000..532bca2
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/libflashplugin.h
@@ -0,0 +1,96 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIBFLASH_PLUGIN_H
+#define LIBFLASH_PLUGIN_H
+
+
+#include <qstring.h>
+#include <qapplication.h>
+#include "flash.h"
+#include "mediaplayerplugininterface.h"
+
+
+class LibFlashPlugin : public MediaPlayerDecoder {
+
+public:
+ LibFlashPlugin();
+ ~LibFlashPlugin() { close(); }
+
+ const char *pluginName() { return "LibFlashPlugin: " PLUGIN_NAME " " FLASH_VERSION_STRING; }
+ const char *pluginComment() { return "This is the libflash library: " PLUGIN_NAME " " FLASH_VERSION_STRING; }
+ double pluginVersion() { return 1.0; }
+
+ bool isFileSupported( const QString& fileName ) { return fileName.right(4) == ".swf"; }
+ bool open( const QString& fileName );
+ bool close() { FlashClose( file ); file = NULL; return TRUE; }
+ bool isOpen() { return file != NULL; }
+ const QString &fileInfo() { return strInfo = qApp->translate( "MediaPlayer", "No Information Available", "media plugin text" ); }
+
+ // If decoder doesn't support audio then return 0 here
+ int audioStreams() { return 1; }
+ int audioChannels( int /*stream*/ ) { return 2; }
+ int audioFrequency( int /*stream*/ ) { return 44100; }
+ int audioSamples( int /*stream*/ ) { return 1000000; }
+ bool audioSetSample( long sample, int stream );
+ long audioGetSample( int stream );
+ //bool audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream );
+ //bool audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream );
+ bool audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream );
+ //bool audioReadSamples( short *output, int channel, long samples, int stream );
+ //bool audioReReadSamples( short *output, int channel, long samples, int stream );
+
+ // If decoder doesn't support video then return 0 here
+ int videoStreams();
+ int videoWidth( int stream );
+ int videoHeight( int stream );
+ double videoFrameRate( int stream );
+ int videoFrames( int stream );
+ bool videoSetFrame( long frame, int stream );
+ long videoGetFrame( int stream );
+ bool videoReadFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, ColorFormat color_model, int stream );
+ bool videoReadScaledFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, int out_w, int out_h, ColorFormat color_model, int stream );
+ bool videoReadYUVFrame( char *y_output, char *u_output, char *v_output, int in_x, int in_y, int in_w, int in_h, int stream );
+
+ // Profiling
+ double getTime();
+
+ // Ignore if these aren't supported
+ bool setSMP( int cpus );
+ bool setMMX( bool useMMX );
+
+ // Capabilities
+ bool supportsAudio() { return TRUE; }
+ bool supportsVideo() { return TRUE; }
+ bool supportsYUV() { return TRUE; }
+ bool supportsMMX() { return TRUE; }
+ bool supportsSMP() { return TRUE; }
+ bool supportsStereo() { return TRUE; }
+ bool supportsScaling() { return TRUE; }
+
+private:
+ FlashHandle file;
+ FlashDisplay *fd;
+ QString strInfo;
+
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libflash/libflashpluginimpl.cpp b/core/multimedia/opieplayer/libflash/libflashpluginimpl.cpp
new file mode 100644
index 0000000..af2c07e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/libflashpluginimpl.cpp
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "libflashplugin.h"
+#include "libflashpluginimpl.h"
+
+
+LibFlashPluginImpl::LibFlashPluginImpl()
+ : libflashplugin(0), ref(0)
+{
+}
+
+
+LibFlashPluginImpl::~LibFlashPluginImpl()
+{
+ if ( libflashplugin )
+ delete libflashplugin;
+}
+
+
+MediaPlayerDecoder *LibFlashPluginImpl::decoder()
+{
+ if ( !libflashplugin )
+ libflashplugin = new LibFlashPlugin;
+ return libflashplugin;
+}
+
+
+MediaPlayerEncoder *LibFlashPluginImpl::encoder()
+{
+ return NULL;
+}
+
+
+#ifndef QT_NO_COMPONENT
+
+
+QRESULT LibFlashPluginImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( ( uuid == IID_QUnknown ) || ( uuid == IID_MediaPlayerPlugin ) )
+ *iface = this, (*iface)->addRef();
+ return QS_OK;
+}
+
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( LibFlashPluginImpl )
+}
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libflash/libflashpluginimpl.h b/core/multimedia/opieplayer/libflash/libflashpluginimpl.h
new file mode 100644
index 0000000..b5cc869
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/libflashpluginimpl.h
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIBFLASH_PLUGIN_IMPL_H
+#define LIBFLASH_PLUGIN_IMPL_H
+
+
+#include "../mediaplayerplugininterface.h"
+
+
+class LibFlashPlugin;
+
+
+class LibFlashPluginImpl : public MediaPlayerPluginInterface
+{
+public:
+ LibFlashPluginImpl();
+ virtual ~LibFlashPluginImpl();
+
+#ifndef QT_NO_COMPONENT
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+#endif
+
+ virtual MediaPlayerDecoder *decoder();
+ virtual MediaPlayerEncoder *encoder();
+
+private:
+ LibFlashPlugin *libflashplugin;
+ ulong ref;
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libflash/matrix.cc b/core/multimedia/opieplayer/libflash/matrix.cc
new file mode 100644
index 0000000..0d8c82c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/matrix.cc
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "matrix.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+Matrix::Matrix()
+{
+ a = 1.0;
+ d = 1.0;
+ b = c = 0.0;
+ tx = ty = 0;
+}
+
+Matrix Matrix::operator*(Matrix m)
+{
+ Matrix mat;
+
+ mat.a = this->a * m.a + this->b * m.c;
+ mat.b = this->a * m.b + this->b * m.d;
+ mat.c = this->c * m.a + this->d * m.c;
+ mat.d = this->c * m.b + this->d * m.d;
+
+ mat.tx = this->getX(m.tx,m.ty);
+ mat.ty = this->getY(m.tx,m.ty);
+
+ return mat;
+}
+
+Matrix Matrix::invert()
+{
+ Matrix mat;
+ float det;
+
+ det = a*d-b*c;
+
+ mat.a = d/det;
+ mat.b = -b/det;
+ mat.c = -c/det;
+ mat.d = a/det;
+
+ mat.tx = - (long)(mat.a * tx + mat.b * ty);
+ mat.ty = - (long)(mat.c * tx + mat.d * ty);
+
+ return mat;
+}
diff --git a/core/multimedia/opieplayer/libflash/matrix.h b/core/multimedia/opieplayer/libflash/matrix.h
new file mode 100644
index 0000000..83b54c2
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/matrix.h
@@ -0,0 +1,49 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _MATRIX_H_
+#define _MATRIX_H_
+
+struct Matrix {
+ float a,b,c,d;
+ long tx,ty;
+public:
+ Matrix operator*(Matrix);
+ Matrix invert();
+ Matrix();
+
+#ifdef DUMP
+ void dump(BitStream *bs);
+#endif
+
+ inline
+ long Matrix::getX(long x, long y)
+ {
+ return (long) (x*a+y*b+tx);
+ };
+
+ inline
+ long Matrix::getY(long x, long y)
+ {
+ return (long) (x*c+y*d+ty);
+ };
+
+};
+
+#endif /* _MATRIX_H_ */
diff --git a/core/multimedia/opieplayer/libflash/movie.cc b/core/multimedia/opieplayer/libflash/movie.cc
new file mode 100644
index 0000000..349e43b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/movie.cc
@@ -0,0 +1,171 @@
+////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+#include "movie.h"
+
+FlashMovie::FlashMovie()
+{
+ gd = NULL;
+ sm = NULL;
+ getSwf = NULL;
+ getUrl = NULL;
+ cursorOnOff = NULL;
+ buttons_updated = 0;
+ scheduledTime.tv_sec = -1;
+ cur_focus = NULL;
+ lost_over = NULL;
+ msPerFrame = 0;
+
+ /* mouse handling */
+ mouse_active = 0;
+ mouse_x = -1;
+ mouse_y = -1;
+ button_pressed = 0;
+ refresh = 1;
+}
+
+FlashMovie::~FlashMovie()
+{
+ CInputScript *n;
+
+ while (main != NULL) {
+ n = main->next;
+ delete main;
+ main = n;
+ }
+
+ if (gd) delete gd;
+ if (sm) delete sm;
+}
+
+int
+FlashMovie::processMovie(GraphicDevice *gd, SoundMixer *sm)
+{
+ CInputScript *script;
+ int wakeUp = 0;
+
+ if (sm && sm->playSounds()) {
+ wakeUp = 1;
+ }
+ for (script = this->main; script != NULL; script = script->next) {
+ if (script->program == NULL) continue;
+ if (script->program->nbFrames == 0) continue;
+ if (script->program->processMovie(gd,sm)) {
+ wakeUp = 1;
+ }
+ }
+ renderMovie();
+ return wakeUp;
+}
+
+int
+FlashMovie::handleEvent(GraphicDevice *gd, SoundMixer *sm, FlashEvent *event)
+{
+ int wakeUp = 0;
+
+ if (sm && sm->playSounds()) {
+ wakeUp = 1;
+ }
+ if (this->main == 0) return 0;
+ if (this->main->program == 0) return 0;
+ if (this->main->program->handleEvent(gd, sm, event)) {
+ wakeUp = 1;
+ }
+ renderMovie();
+ return wakeUp;
+}
+
+/* current focus bigger and translated if needed */
+void
+FlashMovie::renderFocus()
+{
+ Rect rect,boundary;
+ Matrix mat;
+
+ if (mouse_active || !cur_focus) return;
+
+ /* rect is the bbox in screen coordinates */
+
+ // Compute the bounding box in screen coordinates
+ cur_focus->character->getBoundingBox(&boundary,cur_focus);
+ mat = (*gd->adjust) * cur_focus->renderMatrix;
+ transformBoundingBox(&rect, &mat, &boundary, 1);
+
+ gd->drawBox(rect.xmin, rect.ymin, rect.xmax, rect.ymax);
+}
+
+void
+FlashMovie::renderMovie()
+{
+ CInputScript *script,*prev,*next;
+ Rect clipping;
+ Matrix identity;
+
+ clipping.reset();
+
+ // First pass to update the clipping region
+ for (script = this->main; script != NULL; script = script->next) {
+ if (script->level == -1) {
+ clipping.xmin = -32768;
+ clipping.ymin = -32768;
+ clipping.xmax = 32767;
+ clipping.ymax = 32767;
+ continue;
+ }
+ if (script->program == NULL) continue;
+ if (script->program->dl->bbox.xmin == LONG_MAX) continue;
+ transformBoundingBox(&clipping, &identity, &script->program->dl->bbox, 0);
+ script->program->render = 0;
+ }
+
+ if (clipping.xmin == LONG_MAX) return;
+
+ // Update the clipping region
+ gd->updateClippingRegion(&clipping);
+ gd->clearCanvas();
+
+ // Second pass to render the movie
+ for (script = this->main; script != NULL; script = script->next) {
+ if (script->level == -1) continue;
+ if (script->program == NULL) continue;
+ script->program->dl->render(gd);
+ }
+ renderFocus();
+
+ // Final pass to delete some movies
+ script = this->main;
+ prev = 0;
+ while (script != NULL) {
+ if (script->level == -1) {
+ next = script->next;
+ if (prev == 0) {
+ this->main = next;
+ } else {
+ prev->next = next;
+ }
+ delete script;
+ script = next;
+ } else {
+ prev = script;
+ script = script->next;
+ }
+ }
+}
diff --git a/core/multimedia/opieplayer/libflash/movie.h b/core/multimedia/opieplayer/libflash/movie.h
new file mode 100644
index 0000000..d83ce79
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/movie.h
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _MOVIE_H_
+#define _MOVIE_H_
+
+#include "swf.h"
+
+struct FlashMovie {
+ /* true if a button has been moved */
+ int buttons_updated;
+
+ /* current keyboard focus */
+ DisplayListEntry *cur_focus;
+
+ /* mouse state */
+ long mouse_active;
+ long mouse_x;
+ long mouse_y;
+ int button_pressed;
+
+ Button *lost_over;
+
+ /* a button can return to a given state after some time */
+ FlashEvent scheduledEvent;
+ struct timeval scheduledTime;
+
+ int refresh;
+
+ CInputScript *main;
+ long msPerFrame;
+ GraphicDevice *gd;
+ SoundMixer *sm;
+
+ void (*getUrl)(char *,char *, void *);
+ void *getUrlClientData;
+
+ void (*getSwf)(char *url, int level, void *clientData);
+ void *getSwfClientData;
+
+ void (*cursorOnOff)(int , void *);
+ void *cursorOnOffClientData;
+
+ FlashMovie();
+ ~FlashMovie();
+ int processMovie(GraphicDevice *gd, SoundMixer *sm);
+ int handleEvent(GraphicDevice *gd, SoundMixer *sm, FlashEvent *event);
+ void renderMovie();
+ void renderFocus();
+};
+
+#endif /* _MOVIE_H_ */
diff --git a/core/multimedia/opieplayer/libflash/program.cc b/core/multimedia/opieplayer/libflash/program.cc
new file mode 100644
index 0000000..c6e8c0f
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/program.cc
@@ -0,0 +1,921 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#define NOTHING 0x0
+#define WAKEUP 0x1
+#define GOTO 0x2
+#define REFRESH 0x4
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+#define PRINT 0
+
+int debug = 0;
+
+Program::Program(FlashMovie *movie, long n)
+{
+ long f;
+
+ this->movie = movie;
+
+ totalFrames = 0;
+
+ dl = new DisplayList(movie);
+ if (dl == NULL) return;
+ frames = new Frame[n];
+ if (frames == NULL) {
+ delete dl;
+ return;
+ }
+
+ nbFrames = 0;
+ totalFrames = n;
+ currentFrame = 0;
+ loadingFrame = 0;
+ movieWait = 1;
+ nextFrame = currentFrame;
+ for(f = 0; f < n; f++)
+ {
+ frames[f].controls = 0;
+ frames[f].label = NULL;
+ }
+
+ movieStatus = MoviePlay;
+ settings = 0;
+}
+
+Program::~Program()
+{
+ int i;
+ Control *ctrl, *ctrl1;
+
+ delete dl;
+
+ if (frames != NULL) {
+ for(i=0;i<nbFrames;i++) {
+ ctrl = frames[i].controls;
+ if (frames[i].label) free(frames[i].label);
+ while (ctrl != NULL) {
+ ctrl1 = ctrl->next;
+ ctrl->next = NULL;
+ delete ctrl;
+ ctrl = ctrl1;
+ }
+ }
+
+ delete[] frames;
+ }
+}
+
+void
+Program::validateLoadingFrame()
+{
+ nbFrames = loadingFrame;
+ loadingFrame++;
+ movieWait = 0;
+}
+
+Frame *
+Program::getFrames()
+{
+ return frames;
+}
+
+long
+Program::getNbFrames()
+{
+ return nbFrames;
+}
+
+DisplayList *
+Program::getDisplayList()
+{
+ return dl;
+}
+
+long
+Program::getCurrentFrame()
+{
+ return currentFrame;
+}
+
+void
+Program::setCurrentFrame(long n)
+{
+ currentFrame = n;
+ nextFrame = n;
+ //refresh = 1;
+}
+
+void
+Program::gotoFrame(GraphicDevice *gd, long frame)
+{
+ long f;
+
+ //printf("GotoFrame %d (Current = %d)\n", frame, currentFrame);
+ dl->clearList();
+
+ for(f=0; f <= frame; f++) {
+ runFrame(gd, 0, f, 0);
+ }
+}
+
+long
+Program::runFrame(GraphicDevice *gd, SoundMixer *sm, long f, long action)
+{
+ Control *ctrl;
+ Character *character;
+ Matrix *matrix;
+ Cxform *cxform;
+ long status = NOTHING;
+ long update = 0;
+ char *name;
+
+#if PRINT&1
+ if (action) printf("Prog %x (dl=%x): Frame N %d/%d\n", this, this->dl, f, nbFrames-1);
+#endif
+ movie->buttons_updated = 0;
+
+ for(ctrl = frames[f].controls; ctrl; ctrl = ctrl->next)
+ {
+ switch (ctrl->type)
+ {
+ case ctrlPlaceObject:
+ case ctrlPlaceObject2:
+ character = 0;
+ matrix = 0;
+ cxform = 0;
+ name = "";
+ if (ctrl->flags & placeHasCharacter) {
+ character = ctrl->character;
+ }
+ if (ctrl->flags & placeHasMatrix) {
+ matrix = &ctrl->matrix;
+ }
+ if (ctrl->flags & placeHasColorXform) {
+ cxform = &ctrl->cxform;
+ }
+ if (ctrl->flags & placeHasName) {
+ name = ctrl->name;
+ }
+ if (!ctrl->clipDepth) { // Ignore
+ dl->placeObject(gd,character, ctrl->depth, matrix, cxform, name);
+ update = 1;
+ }
+ break;
+ case ctrlRemoveObject:
+ character = ctrl->character;
+
+ if (!character) break; // Should not happen
+
+ dl->removeObject(gd, character, ctrl->depth);
+ if (action) {
+ character->reset();
+ update = 1;
+ }
+ break;
+ case ctrlRemoveObject2:
+ character = dl->removeObject(gd,NULL, ctrl->depth);
+ if (character && action) {
+ character->reset();
+ update = 1;
+ }
+ break;
+ // Actions
+ case ctrlDoAction:
+ if (action) {
+ status = doAction(gd, ctrl->actionRecords, sm);
+ }
+ break;
+ case ctrlStartSound:
+ if (action && sm) {
+ sm->startSound( (Sound *)ctrl->character );
+ }
+ break;
+ case ctrlStopSound:
+ if (action && sm) {
+ sm->stopSounds();
+ }
+ break;
+ case ctrlBackgroundColor:
+ if (action) {
+ if (gd->setBackgroundColor(ctrl->color)) {
+ dl->bbox.xmin = -32768;
+ dl->bbox.ymin = -32768;
+ dl->bbox.xmax = 32768;
+ dl->bbox.ymax = 32768;
+ }
+ }
+ break;
+ }
+ }
+ if (movie->buttons_updated) {
+ dl->updateButtons(movie);
+ }
+
+ if (status & GOTO) {
+ if (nextFrame < nbFrames) {
+ gotoFrame(gd,nextFrame);
+ if (nextFrame != f)
+ if (movieStatus == MoviePaused) runFrame(gd,sm,nextFrame);
+ update = 1;
+ }
+ }
+
+#if PRINT&1
+ if (action) printf("Frame N %d ready\n", f);
+#endif
+ return update;
+}
+
+long
+Program::nestedMovie(GraphicDevice *gd, SoundMixer *sm, Matrix *mat, Cxform *cxform)
+{
+ if (movieStatus == MoviePlay) {
+ // Movie Beeing Played
+ advanceFrame();
+ if (currentFrame == 0) {
+ dl->clearList();
+ }
+ runFrame(gd, sm, currentFrame);
+ if (nbFrames == 1) {
+ pauseMovie();
+ }
+ }
+
+ return (movieStatus == MoviePlay);
+}
+
+long
+Program::processMovie(GraphicDevice *gd, SoundMixer *sm)
+{
+ int wakeUp = 0;
+
+#if PRINT&1
+ printf("Prog %x (dl=%x): Current = %d Next = %d Wait = %d Status = %d\n", this, this->dl, currentFrame, nextFrame, movieWait, movieStatus);
+#endif
+
+ if (movieStatus == MoviePlay && movieWait == 0) {
+ // Movie Beeing Played
+ advanceFrame();
+ if (currentFrame == 0) {
+ dl->clearList();
+ }
+ wakeUp |= runFrame(gd, sm, currentFrame);
+ wakeUp |= dl->updateSprites();
+ if (nextFrame == nbFrames) {
+ if (nbFrames != totalFrames) {
+ movieWait = 1;
+ } else if ((settings & PLAYER_LOOP) == 0) {
+ pauseMovie();
+ }
+ }
+ } else {
+ wakeUp |= dl->updateSprites();
+ }
+
+ if (wakeUp) {
+ render = 1;
+ }
+
+ return (wakeUp || movieStatus == MoviePlay);
+}
+
+/* timer (ms) -1 = delete timer */
+void setFlashTimer(struct timeval *tv, int time_ms)
+{
+ if (time_ms == -1) {
+ tv->tv_sec = -1;
+ } else {
+ gettimeofday(tv,0);
+
+ tv->tv_usec += time_ms*1000;
+ while (tv->tv_usec > 1000000) {
+ tv->tv_usec -= 1000000;
+ tv->tv_sec++;
+ }
+ }
+}
+
+int checkFlashTimer(struct timeval *tv)
+{
+ struct timeval now;
+
+ if (tv->tv_sec == -1) return 0;
+
+ gettimeofday(&now,0);
+ return (now.tv_sec > tv->tv_sec ||
+ (now.tv_sec == tv->tv_sec && now.tv_usec >= tv->tv_usec));
+}
+
+/* bbox */
+typedef struct {
+ long x1,y1,x2,y2;
+} ButtonBoundingBox;
+
+
+static void button_bbox_func(void *id, long y, long start, long end)
+{
+ ButtonBoundingBox *h = (ButtonBoundingBox *) id;
+
+ if (y < h->y1) h->y1 = y;
+ if (y > h->y2) h->y2 = y;
+ if (start < h->x1) h->x1 = start;
+ if (end > h->x2) h->x2 = end;
+}
+
+void computeBBox(FlashMovie *movie, Rect *rect, DisplayListEntry *e)
+{
+ ButtonBoundingBox bb;
+
+ bb.x1 = LONG_MAX;
+ bb.y1 = LONG_MAX;
+ bb.x2 = LONG_MIN;
+ bb.y2 = LONG_MIN;
+
+ e->character->getRegion(movie->gd,&e->renderMatrix,&bb,button_bbox_func);
+
+ rect->xmin = bb.x1 / FRAC;
+ rect->xmax = bb.x2 / FRAC;
+ rect->ymin = bb.y1;
+ rect->ymax = bb.y2;
+}
+
+void transform_coords(long *x_ptr,long *y_ptr, long cx, long cy, long dx, long dy)
+{
+ long x,y,x1,y1;
+ x = *x_ptr;
+ y = *y_ptr;
+
+ x -= cx;
+ y -= cy;
+
+ if (dx < 0) {
+ /* left */
+ x1 = - x;
+ y1 = y;
+ } else if (dy < 0) {
+ /* up */
+ y1 = x;
+ x1 = -y;
+ } else if (dy > 0) {
+ /* down */
+ y1 = x;
+ x1 = y;
+ } else {
+ /* right */
+ x1 = x;
+ y1 = y;
+ }
+
+ *x_ptr = x1;
+ *y_ptr = y1;
+}
+
+typedef struct {
+ FlashMovie *movie;
+ DisplayListEntry *emin,*cur_focus;
+ long dmin;
+ long w,cx,cy,dx,dy;
+} ButtonFocus;
+
+static int button_focus(void *opaque, Program *prg, DisplayListEntry *e)
+{
+ ButtonFocus *h=(ButtonFocus *)opaque;
+ Rect rect;
+ long d,x,y;
+
+ if (e != h->cur_focus) {
+ computeBBox(h->movie,&rect,e);
+ x = (rect.xmin + rect.xmax) / 2;
+ y = (rect.ymin + rect.ymax) / 2;
+
+ /* transform the coords so that the angular sector is directed to the right */
+ transform_coords(&x,&y,h->cx,h->cy,h->dx,h->dy);
+
+ /* inside it ? */
+ if ( x >= 0 &&
+ (y - x - h->w) <= 0 &&
+ (y + x + h->w) >= 0) {
+ d = x*x + y*y;
+
+ if (d < h->dmin) {
+ h->dmin = d;
+ h->emin = e;
+ }
+ }
+ }
+ return 0;
+}
+
+DisplayListEntry *moveFocus(FlashMovie *movie, long dx, long dy,
+ DisplayListEntry *cur_focus)
+{
+ Rect cur_rect;
+ ButtonFocus h;
+
+ h.movie = movie;
+ h.dx = dx;
+ h.dy = dy;
+
+ computeBBox(movie,&cur_rect,cur_focus);
+ /* center */
+ h.cx = (cur_rect.xmin + cur_rect.xmax) / 2;
+ h.cy = (cur_rect.ymin + cur_rect.ymax) / 2;
+
+ /* width/2 of the 45 degrees angular sector */
+ if (dy != 0) {
+ /* for vertical displacement, we have a larger width */
+ h.w = (cur_rect.xmax - cur_rect.xmin) / 2;
+ } else {
+ /* zero width for horizontal displacement */
+ h.w = 0;
+ }
+
+ /* now we select the nearest button in the angular sector */
+ h.dmin = LONG_MAX;
+ h.emin = NULL;
+ h.cur_focus = cur_focus;
+
+ exploreButtons(movie, &h, button_focus);
+
+ return h.emin;
+}
+
+static int button_newfocus(void *opaque, Program *prg, DisplayListEntry *e)
+{
+ * (DisplayListEntry **)opaque = e;
+ return 2;
+}
+
+static int button_nextfocus(void *opaque, Program *prg, DisplayListEntry *e)
+{
+ static int found = 0;
+ DisplayListEntry **focus;
+
+ focus = (DisplayListEntry **)opaque;
+ if (found) {
+ *focus = e;
+ found = 0;
+ return 2;
+ }
+ if (e == *focus) {
+ found = 1;
+ }
+ return 0;
+}
+
+
+/* XXX: should not be here (one level upper) */
+long
+Program::handleEvent(GraphicDevice *gd, SoundMixer *sm, FlashEvent *fe)
+{
+ ActionRecord *action;
+ Program *prog;
+ long status = 0;
+ DisplayListEntry *cur_focus, *new_focus;
+ long dx,dy;
+ int refresh;
+
+ refresh = 0;
+
+ switch(fe->type) {
+
+ case FeKeyRelease:
+ if (movie->mouse_active == 0) {
+
+ if (movie->cur_focus) {
+ movie->cur_focus->owner->updateBoundingBox(movie->cur_focus);
+ movie->cur_focus->renderState = stateOver;
+ movie->cur_focus->owner->updateBoundingBox(movie->cur_focus);
+ }
+ }
+ break;
+
+ case FeKeyPress:
+
+ movie->mouse_active = 0;
+
+ /* find the button which has the focus */
+ cur_focus = movie->cur_focus;
+
+ if (fe->key == FeKeyEnter) {
+ /* selection */
+ if (cur_focus) {
+ /* select the button */
+ cur_focus->owner->updateBoundingBox(cur_focus);
+ cur_focus->renderState = stateDown;
+ ((Button *)cur_focus->character)->updateButtonState(cur_focus);
+ cur_focus->owner->updateBoundingBox(cur_focus);
+
+ movie->scheduledEvent.type = FeKeyRelease;
+ movie->scheduledEvent.key = FeKeyEnter;
+
+ setFlashTimer(&movie->scheduledTime, 250); /* 250 ms down */
+ }
+ } else {
+ /* displacement */
+
+ if (cur_focus == NULL) {
+ /* no current focus : set one */
+ exploreButtons(movie, &cur_focus, button_newfocus);
+ if (cur_focus) {
+ cur_focus->renderState = stateOver;
+ ((Button *)cur_focus->character)->updateButtonState(cur_focus);
+ cur_focus->owner->updateBoundingBox(cur_focus);
+ }
+ movie->cur_focus = cur_focus;
+ } else {
+ /* move the focus (test) */
+ switch(fe->key) {
+ case FeKeyNext:
+ /* Next available */
+ cur_focus->owner->updateBoundingBox(cur_focus);
+ cur_focus->renderState = stateUp;
+ ((Button *)cur_focus->character)->updateButtonState(cur_focus);
+ cur_focus->owner->updateBoundingBox(cur_focus);
+ exploreButtons(movie, &cur_focus, button_nextfocus);
+ if (cur_focus) {
+ cur_focus->renderState = stateOver;
+ ((Button *)cur_focus->character)->updateButtonState(cur_focus);
+ cur_focus->owner->updateBoundingBox(cur_focus);
+ }
+ movie->cur_focus = cur_focus;
+ dx = 0;
+ dy = 0;
+ break;
+ case FeKeyUp:
+ dx = 0;
+ dy = -1;
+ break;
+ case FeKeyDown:
+ dx = 0;
+ dy = 1;
+ break;
+ case FeKeyLeft:
+ dx = -1;
+ dy = 0;
+ break;
+ case FeKeyRight:
+ dx = 1;
+ dy = 0;
+ break;
+ default:
+ /* should not happen */
+ dx = 0;
+ dy = 0;
+ break;
+ }
+
+ if (dx != 0 || dy != 0) {
+
+ new_focus = moveFocus(movie, dx, dy, cur_focus);
+ if (new_focus) {
+ cur_focus->owner->updateBoundingBox(cur_focus);
+ cur_focus->renderState = stateUp;
+ ((Button *)cur_focus->character)->updateButtonState(cur_focus);
+ cur_focus->owner->updateBoundingBox(cur_focus);
+
+ if (computeActions(movie, &prog, &action)) {
+ status |= prog->doAction(gd, action, sm);
+ }
+
+ new_focus->renderState = stateOver;
+ ((Button *)new_focus->character)->updateButtonState(new_focus);
+ movie->cur_focus = new_focus;
+ new_focus->owner->updateBoundingBox(new_focus);
+ } else {
+ return 0;
+ }
+ }
+ }
+ if (movie->cur_focus == NULL) return 0;
+ }
+ break;
+
+ case FeMouseMove:
+ movie->mouse_active = 1;
+ movie->mouse_x = fe->x * FRAC;
+ movie->mouse_y = fe->y * FRAC;
+ dl->updateButtons(movie);
+ break;
+
+ case FeButtonPress:
+ movie->mouse_active = 1;
+ movie->button_pressed = 1;
+ dl->updateButtons(movie);
+ break;
+
+ case FeButtonRelease:
+ movie->mouse_active = 1;
+ movie->button_pressed = 0;
+ dl->updateButtons(movie);
+ break;
+
+ default:
+ return 0;
+ }
+
+ if (computeActions(movie, &prog, &action)) {
+ status |= prog->doAction(gd, action, sm);
+ }
+
+ if (status & REFRESH) {
+ status |= WAKEUP;
+ refresh = 1;
+ }
+ if (status & GOTO) {
+ if (nextFrame < nbFrames) {
+ gotoFrame(gd, nextFrame);
+ if (movieStatus == MoviePaused) runFrame(gd,sm,nextFrame);
+ refresh = 1;
+ }
+ }
+
+ if (refresh) {
+ dl->updateSprites();
+ render = 1;
+ }
+ return (refresh || movieStatus == MoviePlay);
+}
+
+long
+Program::doAction(GraphicDevice *gd, ActionRecord *action, SoundMixer *sm)
+{
+ long status = NOTHING;
+ long f;
+ char *target = "";
+ long skip = 0;
+
+ while(action)
+ {
+ if (skip) skip--;
+ else
+ switch (action->action)
+ {
+ case ActionPlaySound:
+#if PRINT&2
+ printf("Prog %x : PlaySound\n", this);
+#endif
+ if (sm) {
+ sm->startSound(action->sound);
+ }
+ status |= WAKEUP;
+ break;
+ case ActionRefresh:
+#if PRINT&2
+ printf("Prog %x : Refresh\n", this);
+#endif
+ status |= REFRESH;
+ break;
+ case ActionGotoFrame:
+#if PRINT&2
+ printf("Prog %x : GotoFrame %d\n", this, action->frameIndex);
+#endif
+ if (target[0] == 0) {
+ if (action->frameIndex < nbFrames) {
+ currentFrame = action->frameIndex;
+ pauseMovie();
+ status |= WAKEUP|GOTO;
+ }
+ }
+ break;
+ case ActionGetURL:
+#if PRINT&2
+ printf("Prog %x : GetURL %s target = %s\n", this, action->url, action->target);
+#endif
+ {
+ int len,level;
+ len = strlen(action->target);
+
+ if (len > 6 && memcmp(action->target,"_level", 6) == 0) {
+ level = atoi(action->target + 6);
+ loadNewSwf(movie, action->url, level);
+ } else {
+ if (movie->getUrl) {
+ movie->getUrl(action->url, action->target, movie->getUrlClientData);
+ }
+ }
+ }
+ break;
+ case ActionNextFrame:
+ nextFrame = currentFrame+1;
+ movieStatus = MoviePlay;
+ status |= WAKEUP;
+ break;
+ case ActionPrevFrame:
+ nextFrame = currentFrame-1;
+ status |= WAKEUP|GOTO;
+ break;
+ case ActionPlay:
+#if PRINT&2
+ printf("Prog %x : Play\n", this);
+#endif
+ if (target[0] == 0) {
+ movieStatus = MoviePlay;
+ if ((status & GOTO) == 0) {
+ if (currentFrame == nextFrame) advanceFrame();
+ }
+ status |= WAKEUP;
+ }
+ break;
+ case ActionStop:
+#if PRINT&2
+ printf("Prog %x : Stop\n", this);
+#endif
+ if (target[0] == 0) {
+ movieStatus = MoviePaused;
+ nextFrame = currentFrame;
+ }
+ break;
+ case ActionToggleQuality:
+ break;
+ case ActionStopSounds:
+ if (sm) {
+ sm->stopSounds();
+ }
+ break;
+ case ActionWaitForFrame:
+ if (action->frameIndex >= nbFrames) {
+ skip = action->skipCount;
+ }
+ break;
+ case ActionSetTarget:
+#if PRINT&2
+ printf("Prog %x : SetTarget '%s'\n", this, action->target);
+#endif
+ target = action->target;
+ break;
+ case ActionGoToLabel:
+#if PRINT&2
+ printf("Prog %x : GotoFrame '%s'\n", this, action->frameLabel);
+#endif
+ f = searchFrame(gd, action->frameLabel, target);
+ if (f >= 0) {
+ currentFrame = f;
+ pauseMovie();
+ status |= WAKEUP|GOTO;
+ } else {
+ status |= REFRESH;
+ }
+ break;
+ }
+ action = action->next;
+ }
+ return status;
+}
+
+void
+Program::setCurrentFrameLabel(char *label)
+{
+ frames[loadingFrame].label = label;
+}
+
+void
+Program::rewindMovie()
+{
+ currentFrame = 0;
+ nextFrame = 0;
+}
+
+void
+Program::pauseMovie()
+{
+ movieStatus = MoviePaused;
+ nextFrame = currentFrame;
+}
+
+void
+Program::continueMovie()
+{
+ movieStatus = MoviePlay;
+}
+
+void
+Program::nextStepMovie()
+{
+ if (movieStatus == MoviePaused) {
+ advanceFrame();
+ }
+}
+
+void
+Program::advanceFrame()
+{
+ currentFrame = nextFrame;
+ nextFrame = currentFrame+1;
+ if (currentFrame == nbFrames) {
+ currentFrame = 0;
+ nextFrame = 0;
+ movieStatus = MoviePlay;
+ }
+}
+
+void
+Program::addControlInCurrentFrame(Control *ctrl)
+{
+ Control *c;
+
+ ctrl->next = 0;
+ if (frames[loadingFrame].controls == 0) {
+ frames[loadingFrame].controls = ctrl;
+ } else {
+ for(c = frames[loadingFrame].controls; c->next; c = c->next);
+ c->next = ctrl;
+ }
+}
+
+void
+Program::modifySettings(long flags)
+{
+ settings = flags;
+}
+
+long
+Program::searchFrame(GraphicDevice *gd, char *label, char *target)
+{
+ long f;
+ DisplayListEntry *e;
+ Program *prg;
+
+ // Current movie
+ if (target[0] == 0) {
+ for(f=0; f < nbFrames; f++)
+ {
+ if (frames[f].label && !strcmp(label,frames[f].label)) {
+ return f;
+ }
+ }
+ }
+
+ // Kludge !!!
+ for (e = dl->list; e; e = e->next) {
+ if (e->character->isSprite()) {
+ prg = ((Sprite *)e->character)->program;
+ f = prg->searchFrame(gd,label,"");
+ if (f >= 0 && f < prg->nbFrames) {
+ prg->dl->updateBoundingBox(e);
+ prg->gotoFrame(gd, f);
+ prg->nextFrame = f;
+ prg->dl->updateBoundingBox(e);
+ return -1;
+ }
+ }
+ }
+
+ return -1;
+}
+
+void loadNewSwf(FlashMovie *movie, char *url, int level)
+{
+ CInputScript *s,*prev,**l;
+
+ if (movie->getSwf == NULL) return;
+
+ for(s = movie->main, prev = 0; s != NULL; prev = s, s = s->next) {
+ if (s->level == level) {
+ // Mark movie to be deleted
+ s->level = -1;
+ break;
+ }
+ }
+
+ //printf("Unload movie @ %d\n", level);
+
+ if (*url == 0) return; // Just UnloadMovie
+
+ s = new CInputScript(level);
+ if (s == NULL) return;
+
+ /* insert it in the right order */
+ l = &movie->main;
+ while (*l != NULL && (*l)->level < level) l = &(*l)->next;
+ s->next = *l;
+ *l = s;
+
+ // Notify the external loader of a new movie to load
+ movie->getSwf(url, level, movie->getSwfClientData);
+}
diff --git a/core/multimedia/opieplayer/libflash/program.h b/core/multimedia/opieplayer/libflash/program.h
new file mode 100644
index 0000000..7672d88
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/program.h
@@ -0,0 +1,185 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _PROGRAM_H_
+#define _PROGRAM_H_
+
+enum ControlType {
+ ctrlPlaceObject,
+ ctrlPlaceObject2,
+ ctrlRemoveObject,
+ ctrlRemoveObject2,
+ ctrlDoAction,
+ ctrlStartSound,
+ ctrlStopSound,
+ ctrlBackgroundColor
+};
+
+enum PlaceFlags {
+ placeIsMove = 0x01,
+ placeHasCharacter = 0x02,
+ placeHasMatrix = 0x04,
+ placeHasColorXform = 0x08,
+ placeHasRatio = 0x10,
+ placeHasName = 0x20,
+ placeHasClip = 0x40
+};
+
+struct Control {
+ ControlType type;
+
+ // Place, Remove, Sound
+ Character *character;
+ long depth;
+
+ // Place 1&2
+ PlaceFlags flags;
+ Matrix matrix;
+ Cxform cxform;
+ long ratio;
+ long clipDepth;
+ char *name;
+
+ // BackgroundColor
+ Color color;
+
+ // DoAction
+ ActionRecord *actionRecords;
+
+ struct Control *next;
+
+
+ // Methods
+
+ void addActionRecord( ActionRecord *ar)
+ {
+ ar->next = 0;
+
+ if (actionRecords == 0) {
+ actionRecords = ar;
+ } else {
+ ActionRecord *current;
+
+ for(current = actionRecords; current->next; current = current->next);
+
+ current->next = ar;
+ }
+ };
+
+ Control()
+ {
+ actionRecords = 0;
+ cxform.aa = 1.0; cxform.ab = 0;
+ cxform.ra = 1.0; cxform.rb = 0;
+ cxform.ga = 1.0; cxform.gb = 0;
+ cxform.ba = 1.0; cxform.bb = 0;
+ ratio = 0;
+ clipDepth = 0;
+ name = 0;
+ };
+
+ ~Control()
+ {
+ ActionRecord *ar,*del;
+ for(ar = actionRecords; ar;)
+ {
+ del = ar;
+ ar = ar->next;
+ delete del;
+ }
+ if (name) {
+ free(name);
+ }
+ };
+};
+
+struct Frame {
+ char *label;
+ Control *controls; // Controls for this frame
+};
+
+enum MovieStatus {
+ MoviePaused,
+ MoviePlay
+};
+
+struct FlashMovie;
+
+struct Program {
+ DisplayList *dl;
+
+ Frame *frames; // Array
+ long nbFrames; // Number of valid frames
+ long currentFrame;
+ long loadingFrame;
+ long totalFrames; // Total expected number of frames
+ long nextFrame;
+ int movieWait; // If true freeze movie until next loaded frame
+ MovieStatus movieStatus;
+ Sound *currentSound;
+ long settings;
+ FlashMovie *movie;
+ long render; // True if needed to be rendered
+
+ Program(FlashMovie *movie,long n);
+ ~Program();
+
+ void rewindMovie();
+ void pauseMovie();
+ void continueMovie();
+ void nextStepMovie();
+ void gotoFrame(GraphicDevice *gd, long f);
+
+ long processMovie(GraphicDevice *, SoundMixer *);
+ long nestedMovie(GraphicDevice *, SoundMixer *, Matrix *, Cxform *);
+ long runFrame(GraphicDevice *, SoundMixer *, long f, long action=1);
+ long handleEvent(GraphicDevice *, SoundMixer *, FlashEvent *);
+ long doAction(GraphicDevice *gd, ActionRecord *action, SoundMixer *);
+ void setCurrentFrameLabel(char *label);
+ void advanceFrame();
+ void addControlInCurrentFrame(Control *ctrl);
+ void setGetUrlMethod( void (*)(char *, char *, void *), void *);
+ void modifySettings(long flags);
+ long searchFrame(GraphicDevice *gd, char *, char *);
+ void validateLoadingFrame();
+ long getCurrentFrame();
+ void setCurrentFrame(long);
+
+ Frame *getFrames();
+ long getNbFrames();
+
+ DisplayList *getDisplayList();
+
+#ifdef DUMP
+ void dump(BitStream *bs);
+static void dumpActions(BitStream *bs, ActionRecord *actions);
+#endif
+};
+
+DisplayListEntry *findFocus(DisplayList *dl);
+void setFlashTimer(struct timeval *tv, int time_ms);
+int checkFlashTimer(struct timeval *tv);
+
+void loadNewSwf(FlashMovie *movie, char *url, int level);
+
+void computeBBox(FlashMovie *movie, Rect *rect, DisplayListEntry *e);
+
+long processMovie(FlashMovie *movie);
+
+#endif /* _PROGRAM_H_ */
diff --git a/core/multimedia/opieplayer/libflash/rect.h b/core/multimedia/opieplayer/libflash/rect.h
new file mode 100644
index 0000000..cb84eb3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/rect.h
@@ -0,0 +1,55 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _RECT_H_
+#define _RECT_H_
+
+struct Rect
+{
+ long xmin;
+ long xmax;
+ long ymin;
+ long ymax;
+
+ long getWidth() {
+ return xmax-xmin;
+ };
+
+ long getHeight() {
+ return ymax-ymin;
+ };
+
+ void print() {
+ printf("Xmin = %d Xmax = %d Ymin = %d Ymax = %d\n",
+ (int)xmin,(int)xmax,(int)ymin,(int)ymax);
+ };
+
+ void reset() {
+ xmin = LONG_MAX;
+ ymin = LONG_MAX;
+ xmax = LONG_MIN;
+ ymax = LONG_MIN;
+ };
+
+#ifdef DUMP
+ void dump(BitStream *bs);
+#endif
+};
+
+#endif /* _RECT_H_ */
diff --git a/core/multimedia/opieplayer/libflash/script.cc b/core/multimedia/opieplayer/libflash/script.cc
new file mode 100644
index 0000000..db65819
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/script.cc
@@ -0,0 +1,1988 @@
+#include "swf.h"
+
+////////////////////////////////////////////////////////////
+// This file is derived from the 'buggy' SWF parser provided
+// by Macromedia.
+//
+// Modifications : Olivier Debon <odebon@club-internet.fr>
+//
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+#define printf(fmt,args...)
+
+//////////////////////////////////////////////////////////////////////
+// Inline input script object methods.
+//////////////////////////////////////////////////////////////////////
+
+//
+// Inlines to parse a Flash file.
+//
+inline U8 CInputScript::GetByte(void)
+{
+ return m_fileBuf[m_filePos++];
+}
+
+inline U16 CInputScript::GetWord(void)
+{
+ U8 * s = m_fileBuf + m_filePos;
+ m_filePos += 2;
+ return (U16) s[0] | ((U16) s[1] << 8);
+}
+
+inline U32 CInputScript::GetDWord(void)
+{
+ U8 * s = m_fileBuf + m_filePos;
+ m_filePos += 4;
+ return (U32) s[0] | ((U32) s[1] << 8) | ((U32) s[2] << 16) | ((U32) s [3] << 24);
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////
+// Input script object methods.
+//////////////////////////////////////////////////////////////////////
+
+CInputScript::CInputScript(int level)
+// Class constructor.
+{
+ this->level = level;
+
+ // Initialize the input pointer.
+ m_fileBuf = NULL;
+
+ // Initialize the file information.
+ m_filePos = 0;
+ m_fileSize = 0;
+ m_fileVersion = 0;
+
+ // Initialize the bit position and buffer.
+ m_bitPos = 0;
+ m_bitBuf = 0;
+
+ // Initialize the output file.
+ m_outputFile = NULL;
+
+ // Set to true if we wish to dump all contents long form
+ m_dumpAll = false;
+
+ // if set to true will dump image guts (i.e. jpeg, zlib, etc. data)
+ m_dumpGuts = false;
+
+ needHeader = 1;
+ program = 0;
+
+ outOfMemory = 0;
+
+ next = NULL;
+
+ return;
+}
+
+
+CInputScript::~CInputScript(void)
+// Class destructor.
+{
+ // Free the buffer if it is there.
+ if (m_fileBuf)
+ {
+ delete program;
+ m_fileBuf = NULL;
+ m_fileSize = 0;
+ }
+}
+
+
+U16 CInputScript::GetTag(void)
+{
+ // Save the start of the tag.
+ m_tagStart = m_filePos;
+
+ if (m_actualSize-m_filePos < 2) return notEnoughData;
+
+ // Get the combined code and length of the tag.
+ U16 code = GetWord();
+
+ // The length is encoded in the tag.
+ U32 len = code & 0x3f;
+
+ // Remove the length from the code.
+ code = code >> 6;
+
+ // Determine if another long word must be read to get the length.
+ if (len == 0x3f) {
+ if (m_actualSize-m_filePos < 4) return notEnoughData;
+ len = (U32) GetDWord();
+ }
+
+ // Determine the end position of the tag.
+ m_tagEnd = m_filePos + (U32) len;
+ m_tagLen = (U32) len;
+
+ return code;
+}
+
+
+void CInputScript::GetRect (Rect * r)
+{
+ InitBits();
+ int nBits = (int) GetBits(5);
+ r->xmin = GetSBits(nBits);
+ r->xmax = GetSBits(nBits);
+ r->ymin = GetSBits(nBits);
+ r->ymax = GetSBits(nBits);
+}
+
+void CInputScript::GetMatrix(Matrix* mat)
+{
+ InitBits();
+
+ // Scale terms
+ if (GetBits(1))
+ {
+ int nBits = (int) GetBits(5);
+ mat->a = (float)(GetSBits(nBits))/(float)0x10000;
+ mat->d = (float)(GetSBits(nBits))/(float)0x10000;
+ }
+ else
+ {
+ mat->a = mat->d = 1.0;
+ }
+
+ // Rotate/skew terms
+ if (GetBits(1))
+ {
+ int nBits = (int)GetBits(5);
+ mat->c = (float)(GetSBits(nBits))/(float)0x10000;
+ mat->b = (float)(GetSBits(nBits))/(float)0x10000;
+ }
+ else
+ {
+ mat->b = mat->c = 0.0;
+ }
+
+ // Translate terms
+ int nBits = (int) GetBits(5);
+ mat->tx = GetSBits(nBits);
+ mat->ty = GetSBits(nBits);
+}
+
+
+void CInputScript::GetCxform(Cxform* cx, BOOL hasAlpha)
+{
+ int flags;
+ int nBits;
+ float aa; long ab;
+ float ra; long rb;
+ float ga; long gb;
+ float ba; long bb;
+
+ InitBits();
+
+ flags = (int) GetBits(2);
+ nBits = (int) GetBits(4);
+ aa = 1.0; ab = 0;
+ if (flags & 1)
+ {
+ ra = (float) GetSBits(nBits)/256.0;
+ ga = (float) GetSBits(nBits)/256.0;
+ ba = (float) GetSBits(nBits)/256.0;
+ if (hasAlpha) aa = (float) GetSBits(nBits)/256.0;
+ }
+ else
+ {
+ ra = ga = ba = 1.0;
+ }
+ if (flags & 2)
+ {
+ rb = (S32) GetSBits(nBits);
+ gb = (S32) GetSBits(nBits);
+ bb = (S32) GetSBits(nBits);
+ if (hasAlpha) ab = (S32) GetSBits(nBits);
+ }
+ else
+ {
+ rb = gb = bb = 0;
+ }
+ if (cx) {
+ cx->aa = aa;
+ cx->ab = ab;
+ cx->ra = ra;
+ cx->rb = rb;
+ cx->ga = ga;
+ cx->gb = gb;
+ cx->ba = ba;
+ cx->bb = bb;
+ }
+}
+
+
+/* XXX: should allocate string */
+char *CInputScript::GetString(void)
+{
+ // Point to the string.
+ char *str = (char *) &m_fileBuf[m_filePos];
+
+ // Skip over the string.
+ while (GetByte());
+
+ return str;
+}
+
+void CInputScript::InitBits(void)
+{
+ // Reset the bit position and buffer.
+ m_bitPos = 0;
+ m_bitBuf = 0;
+}
+
+
+S32 CInputScript::GetSBits (S32 n)
+// Get n bits from the string with sign extension.
+{
+ // Get the number as an unsigned value.
+ S32 v = (S32) GetBits(n);
+
+ // Is the number negative?
+ if (v & (1L << (n - 1)))
+ {
+ // Yes. Extend the sign.
+ v |= -1L << n;
+ }
+
+ return v;
+}
+
+
+U32 CInputScript::GetBits (S32 n)
+// Get n bits from the stream.
+{
+ U32 v = 0;
+
+ for (;;)
+ {
+ S32 s = n - m_bitPos;
+ if (s > 0)
+ {
+ // Consume the entire buffer
+ v |= m_bitBuf << s;
+ n -= m_bitPos;
+
+ // Get the next buffer
+ m_bitBuf = GetByte();
+ m_bitPos = 8;
+ }
+ else
+ {
+ // Consume a portion of the buffer
+ v |= m_bitBuf >> -s;
+ m_bitPos -= n;
+ m_bitBuf &= 0xff >> (8 - m_bitPos); // mask off the consumed bits
+ return v;
+ }
+ }
+}
+
+void CInputScript::ParseFreeCharacter()
+{
+ U32 tagid = (U32) GetWord();
+
+ tagid = tagid;
+
+ printf("tagFreeCharacter \ttagid %-5u\n", tagid);
+}
+
+
+void CInputScript::ParsePlaceObject()
+{
+ Control *ctrl;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->type = ctrlPlaceObject;
+ ctrl->flags = (PlaceFlags)(placeHasMatrix | placeHasCharacter);
+
+ ctrl->character = getCharacter(GetWord());
+ ctrl->depth = GetWord();
+
+ GetMatrix(&(ctrl->matrix));
+
+ if ( m_filePos < m_tagEnd )
+ {
+ ctrl->flags = (PlaceFlags)(ctrl->flags | placeHasColorXform);
+
+ GetCxform(&ctrl->cxform, false);
+ }
+
+ program->addControlInCurrentFrame(ctrl);
+}
+
+
+void CInputScript::ParsePlaceObject2()
+{
+ Control *ctrl;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->type = ctrlPlaceObject2;
+
+ ctrl->flags = (PlaceFlags)GetByte();
+ ctrl->depth = GetWord();
+
+ // Get the tag if specified.
+ if (ctrl->flags & placeHasCharacter)
+ {
+ ctrl->character = getCharacter(GetWord());
+ }
+
+ // Get the matrix if specified.
+ if (ctrl->flags & placeHasMatrix)
+ {
+ GetMatrix(&(ctrl->matrix));
+ }
+
+ // Get the color transform if specified.
+ if (ctrl->flags & placeHasColorXform)
+ {
+ GetCxform(&ctrl->cxform, true);
+ }
+
+ // Get the ratio if specified.
+ if (ctrl->flags & placeHasRatio)
+ {
+ ctrl->ratio = GetWord();
+ }
+
+ // Get the ratio if specified.
+ if (ctrl->flags & placeHasName)
+ {
+ ctrl->name = strdup(GetString());
+ }
+
+ // Get the clipdepth if specified.
+ if (ctrl->flags & placeHasClip)
+ {
+ ctrl->clipDepth = GetWord();
+ }
+
+ program->addControlInCurrentFrame(ctrl);
+}
+
+
+void CInputScript::ParseRemoveObject()
+{
+ Control *ctrl;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->type = ctrlRemoveObject;
+ ctrl->character = getCharacter(GetWord());
+ ctrl->depth = GetWord();
+
+ program->addControlInCurrentFrame(ctrl);
+}
+
+
+void CInputScript::ParseRemoveObject2()
+{
+ Control *ctrl;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->type = ctrlRemoveObject2;
+ ctrl->depth = GetWord();
+
+ program->addControlInCurrentFrame(ctrl);
+}
+
+
+void CInputScript::ParseSetBackgroundColor()
+{
+ Control *ctrl;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->type = ctrlBackgroundColor;
+ ctrl->color.red = GetByte();
+ ctrl->color.green = GetByte();
+ ctrl->color.blue = GetByte();
+
+ program->addControlInCurrentFrame(ctrl);
+}
+
+
+void CInputScript::ParseDoAction()
+{
+ Control *ctrl;
+ ActionRecord *ar;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->type = ctrlDoAction;
+
+ do {
+ ar = ParseActionRecord();
+ if (ar) {
+ ctrl->addActionRecord( ar );
+ }
+ if (outOfMemory) {
+ return;
+ }
+ } while (ar);
+
+ program->addControlInCurrentFrame(ctrl);
+
+}
+
+
+void CInputScript::ParseStartSound()
+{
+ Control *ctrl;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->character = getCharacter(GetWord());
+ ctrl->type = ctrlStartSound;
+
+ program->addControlInCurrentFrame(ctrl);
+
+ if (!m_dumpAll)
+ return;
+
+ U32 code = GetByte();
+
+ printf("code %-3u", code);
+
+ if ( code & soundHasInPoint )
+ printf(" inpoint %u ", GetDWord());
+ if ( code & soundHasOutPoint )
+ printf(" oupoint %u", GetDWord());
+ if ( code & soundHasLoops )
+ printf(" loops %u", GetWord());
+
+ printf("\n");
+ if ( code & soundHasEnvelope )
+ {
+ int points = GetByte();
+
+ for ( int i = 0; i < points; i++ )
+ {
+ printf("\n");
+ printf("mark44 %u", GetDWord());
+ printf(" left chanel %u", GetWord());
+ printf(" right chanel %u", GetWord());
+ printf("\n");
+ }
+ }
+}
+
+
+void CInputScript::ParseStopSound()
+{
+ Control *ctrl;
+
+ ctrl = new Control;
+ if (ctrl == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ ctrl->type = ctrlStopSound;
+
+ program->addControlInCurrentFrame(ctrl);
+}
+
+
+void CInputScript::ParseShapeData(int getAlpha, int getStyles)
+{
+ int shapeRecord = 0;
+
+ if (getStyles) {
+ // ShapeWithStyle
+ ParseFillStyle(getAlpha);
+ ParseLineStyle(getAlpha);
+ }
+
+ InitBits();
+ m_nFillBits = (U16) GetBits(4);
+ m_nLineBits = (U16) GetBits(4);
+
+ do {
+ shapeRecord = ParseShapeRecord(getAlpha);
+ } while (shapeRecord);
+}
+
+int
+CInputScript::ParseShapeRecord(long getAlpha)
+{
+ // Determine if this is an edge.
+ BOOL isEdge = (BOOL) GetBits(1);
+
+ if (!isEdge)
+ {
+ // Handle a state change
+ U16 flags = (U16) GetBits(5);
+
+ // Are we at the end?
+ if (flags == 0)
+ {
+ // End of shape
+ return 0;
+ }
+
+ // Process a move to.
+ if (flags & flagsMoveTo)
+ {
+ U16 nBits = (U16) GetBits(5);
+ GetSBits(nBits);
+ GetSBits(nBits);
+ }
+
+ // Get new fill info.
+ if (flags & flagsFill0)
+ {
+ GetBits(m_nFillBits);
+ }
+ if (flags & flagsFill1)
+ {
+ GetBits(m_nFillBits);
+ }
+
+ // Get new line info
+ if (flags & flagsLine)
+ {
+ GetBits(m_nLineBits);
+ }
+
+ // Check to get a new set of styles for a new shape layer.
+ if (flags & flagsNewStyles)
+ {
+ // Parse the style.
+ ParseFillStyle(getAlpha);
+ ParseLineStyle(getAlpha);
+
+ InitBits(); // Bug !
+
+ // Reset.
+ m_nFillBits = (U16) GetBits(4);
+ m_nLineBits = (U16) GetBits(4);
+ }
+
+ return flags & flagsEndShape ? 0 : 1;
+ }
+ else
+ {
+ if (GetBits(1))
+ {
+ // Handle a line
+ U16 nBits = (U16) GetBits(4) + 2; // nBits is biased by 2
+
+ // Save the deltas
+ if (GetBits(1))
+ {
+ // Handle a general line.
+ GetSBits(nBits);
+ GetSBits(nBits);
+ }
+ else
+ {
+ // Handle a vert or horiz line.
+ GetBits(1);
+ GetSBits(nBits);
+ }
+ }
+ else
+ {
+ // Handle a curve
+ U16 nBits = (U16) GetBits(4) + 2; // nBits is biased by 2
+
+ // Get the control
+ GetSBits(nBits);
+ GetSBits(nBits);
+
+ // Get the anchor
+ GetSBits(nBits);
+ GetSBits(nBits);
+ }
+
+ return 1;
+ }
+}
+
+
+void CInputScript::ParseFillStyle(long getAlpha)
+ //
+{
+ U16 i = 0;
+ FillType type;
+ Matrix matrix;
+
+ // Get the number of fills.
+ U16 nFills = GetByte();
+
+ // Do we have a larger number?
+ if (nFills == 255)
+ {
+ // Get the larger number.
+ nFills = GetWord();
+ }
+
+ // Get each of the fill style.
+ for (i = 0; i < nFills; i++)
+ {
+ U16 fillStyle = GetByte();
+
+ type = (FillType) fillStyle;
+
+ printf("fillstyle: type=%d\n",defs[i].type);
+ if (fillStyle & 0x10)
+ {
+ U16 nbGradients;
+
+ type = (FillType) (fillStyle & 0x12);
+
+ // Get the gradient matrix.
+ GetMatrix(&matrix);
+
+ // Get the number of colors.
+ nbGradients = GetByte();
+
+ // Get each of the colors.
+ for (U16 j = 0; j < nbGradients; j++)
+ {
+ GetByte();
+ GetByte();
+ GetByte();
+ GetByte();
+ if (getAlpha) {
+ GetByte();
+ }
+ }
+ }
+ else if (fillStyle & 0x40)
+ {
+ type = (FillType) (fillStyle & 0x41);
+
+ // Get the bitmapId
+ GetWord();
+
+ // Get the bitmap matrix.
+ GetMatrix(&matrix);
+ }
+ else
+ {
+ type = (FillType) 0;
+
+ // A solid color
+ GetByte();
+ GetByte();
+ GetByte();
+ if (getAlpha) {
+ GetByte();
+ }
+
+ printf("fillstyle: %x %x %x %x\n",
+ defs[i].color.red,
+ defs[i].color.green,
+ defs[i].color.blue,
+ defs[i].color.alpha);
+ }
+ }
+}
+
+void CInputScript::ParseLineStyle(long getAlpha)
+{
+ long i;
+
+ // Get the number of lines.
+ U16 nLines = GetByte();
+
+ // Do we have a larger number?
+ if (nLines == 255)
+ {
+ // Get the larger number.
+ nLines = GetWord();
+ }
+
+ // Get each of the line styles.
+ for (i = 0; i < nLines; i++)
+ {
+ GetWord();
+ GetByte();
+ GetByte();
+ GetByte();
+ if (getAlpha) {
+ GetByte();
+ }
+ }
+}
+
+
+void CInputScript::ParseDefineShape(int level)
+{
+ Shape *shape;
+ Rect rect;
+ U32 tagid;
+
+ tagid = (U32) GetWord();
+ shape = new Shape(tagid,level);
+ if (shape == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ shape->dict = this;
+
+ // Get the frame information.
+ GetRect(&rect);
+
+ shape->setBoundingBox(rect);
+
+ shape->file_ptr = (unsigned char*)malloc(m_tagEnd-m_filePos);
+ if (shape->file_ptr == NULL) {
+ outOfMemory = 1;
+ delete shape;
+ return;
+ }
+ memcpy((void*)shape->file_ptr,(void*)&m_fileBuf[m_filePos], m_tagEnd-m_filePos);
+
+ shape->getStyles = 1;
+ shape->getAlpha = (level == 3);
+
+ ParseShapeData(level == 3, 1);
+
+ addCharacter(shape);
+}
+
+void CInputScript::S_DumpImageGuts()
+{
+#if 0
+ U32 lfCount = 0;
+ printf("----- dumping image details -----");
+ while (m_filePos < m_tagEnd)
+ {
+ if ((lfCount % 16) == 0)
+ {
+ fprintf(stdout, "\n");
+ }
+ lfCount += 1;
+ fprintf(stdout, "%02x ", GetByte());
+ }
+ fprintf(stdout, "\n");
+#endif
+}
+
+void CInputScript::ParseDefineBits()
+{
+ Bitmap *bitmap;
+ U32 tagid = (U32) GetWord();
+ int status;
+
+ bitmap = new Bitmap(tagid,1);
+ if (bitmap == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ status = bitmap->buildFromJpegAbbreviatedData(&m_fileBuf[m_filePos]);
+
+ if (status < 0) {
+ fprintf(stderr,"Unable to read JPEG data\n");
+ delete bitmap;
+ return;
+ }
+
+ addCharacter(bitmap);
+}
+
+
+void CInputScript::ParseDefineBitsJPEG2()
+{
+ Bitmap *bitmap;
+ U32 tagid = (U32) GetWord();
+ int status;
+
+ bitmap = new Bitmap(tagid,2);
+ if (bitmap == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ status = bitmap->buildFromJpegInterchangeData(&m_fileBuf[m_filePos], 0, 0);
+
+ if (status < 0) {
+ fprintf(stderr,"Unable to read JPEG data\n");
+ delete bitmap;
+ return;
+ }
+
+ addCharacter(bitmap);
+}
+
+void CInputScript::ParseDefineBitsJPEG3()
+{
+ Bitmap *bitmap;
+ U32 tagid = (U32) GetWord();
+ int status;
+ long offset;
+
+ printf("tagDefineBitsJPEG3 \ttagid %-5u\n", tagid);
+
+ bitmap = new Bitmap(tagid,3);
+ if (bitmap == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ offset = GetDWord(); // Not in the specs !!!!
+
+ status = bitmap->buildFromJpegInterchangeData(&m_fileBuf[m_filePos], 1, offset);
+ if (status < 0) {
+ fprintf(stderr,"Unable to read JPEG data\n");
+ delete bitmap;
+ return;
+ }
+
+ addCharacter(bitmap);
+}
+
+
+void CInputScript::ParseDefineBitsLossless(int level)
+{
+ Bitmap *bitmap;
+ U32 tagid = (U32) GetWord();
+ int status;
+ int tableSize;
+
+ bitmap = new Bitmap(tagid,0);
+ if (bitmap == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ int format = GetByte();
+ int width = GetWord();
+ int height = GetWord();
+
+ tableSize = 0;
+
+ if (format == 3) {
+ tableSize = GetByte();
+ }
+
+ status = bitmap->buildFromZlibData(&m_fileBuf[m_filePos], width, height, format, tableSize, level == 2);
+
+ if (status < 0) {
+ fprintf(stderr,"Unable to read ZLIB data\n");
+ delete bitmap;
+ return;
+ }
+
+ addCharacter(bitmap);
+}
+
+void CInputScript::ParseJPEGTables()
+{
+ Bitmap::readJpegTables(&m_fileBuf[m_filePos]);
+}
+
+
+ButtonRecord * CInputScript::ParseButtonRecord(long getCxform)
+{
+ U16 state;
+ ButtonRecord *br;
+ long tagid;
+ Matrix matrix;
+ long layer;
+ Cxform *cxform;
+
+ state = (U16) GetByte();
+
+ if (state == 0) return 0;
+
+ br = new ButtonRecord;
+ if (br == NULL) {
+ outOfMemory = 1;
+ return 0;
+ }
+
+ tagid = GetWord();
+ layer = GetWord();
+ GetMatrix(&matrix);
+
+ if (br) {
+ br->state = (ButtonState) state;
+ br->character = getCharacter(tagid);
+ br->layer = layer;
+ br->cxform = 0;
+ br->buttonMatrix = matrix;
+ }
+
+ if (getCxform) {
+ cxform = new Cxform;
+ GetCxform(cxform, true);
+ if (br) {
+ br->cxform = cxform;
+ if (cxform == NULL) {
+ outOfMemory = 1;
+ }
+ }
+ }
+
+ return br;
+}
+
+ActionRecord * CInputScript::ParseActionRecord()
+{
+ U8 action;
+ U16 length = 0;
+ char *url, *target, *label;
+ long frameIndex, skipCount;
+ ActionRecord *ar;
+
+ action = GetByte();
+ if (action == 0) return 0;
+
+ ar = new ActionRecord;
+ if (ar == NULL) {
+ outOfMemory = 1;
+ return 0;
+ }
+
+ ar->action = (Action)action;
+
+ if (action & 0x80) {
+ length = GetWord();
+ }
+
+ switch (action) {
+ case ActionGotoFrame:
+ frameIndex = GetWord();
+ if (ar) {
+ ar->frameIndex = frameIndex;
+ }
+ break;
+ case ActionGetURL:
+ url = GetString();
+ target = GetString();
+ if (ar) {
+ ar->url = strdup(url);
+ ar->target = strdup(target);
+ }
+ break;
+ case ActionWaitForFrame:
+ frameIndex = GetWord();
+ skipCount = GetByte();
+ if (ar) {
+ ar->frameIndex = frameIndex;
+ ar->skipCount = skipCount;
+ }
+ break;
+ case ActionSetTarget:
+ target = strdup(GetString());
+ if (ar) {
+ ar->target = target;
+ }
+ break;
+ case ActionGoToLabel:
+ label = GetString();
+ if (ar) {
+ ar->frameLabel = strdup(label);
+ }
+ break;
+ default:
+ while (length--) {
+ GetByte();
+ }
+ break;
+ }
+
+ return ar;
+}
+
+void CInputScript::ParseDefineButton()
+{
+ Button *button;
+ ButtonRecord *buttonRecord;
+ ActionRecord *actionRecord;
+
+ U32 tagid = (U32) GetWord();
+
+ button = new Button(tagid);
+ if (button == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ do {
+ buttonRecord = ParseButtonRecord();
+ if (buttonRecord) {
+ button->addButtonRecord( buttonRecord );
+ }
+ if (outOfMemory) {
+ return;
+ }
+ } while (buttonRecord);
+
+ do {
+ actionRecord = ParseActionRecord();
+ if (actionRecord) {
+ button->addActionRecord( actionRecord );
+ }
+ if (outOfMemory) {
+ return;
+ }
+ } while (actionRecord);
+
+ addCharacter(button);
+}
+
+
+void CInputScript::ParseDefineButton2()
+{
+ Button *button;
+ ButtonRecord *buttonRecord;
+ ActionRecord *actionRecord;
+ U16 transition;
+ U16 offset;
+ U8 menu;
+
+ U32 tagid = (U32) GetWord();
+
+ button = new Button(tagid);
+
+ if (button == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ menu = GetByte();
+
+ offset = GetWord();
+
+ do {
+ buttonRecord = ParseButtonRecord(true);
+ if (buttonRecord) {
+ button->addButtonRecord( buttonRecord );
+ }
+ if (outOfMemory) {
+ return;
+ }
+ } while (buttonRecord);
+
+ while (offset) {
+ offset = GetWord();
+
+ transition = GetWord();
+
+ do {
+ actionRecord = ParseActionRecord();
+ if (actionRecord) {
+ button->addActionRecord( actionRecord );
+ }
+ if (outOfMemory) {
+ return;
+ }
+ } while (actionRecord);
+
+ button->addCondition( transition );
+ }
+
+ addCharacter(button);
+}
+
+
+void CInputScript::ParseDefineFont()
+{
+ SwfFont *font = 0;
+ U32 tagid = (U32) GetWord();
+ long start;
+ long nb,n;
+ long offset;
+ long *offsetTable = 0;
+ Shape *shapes = 0;
+
+ font = new SwfFont(tagid);
+ if (font == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ start = m_filePos;
+
+ offset = GetWord();
+ nb = offset/2;
+ offsetTable = new long[nb];
+ if (offsetTable == NULL) {
+ goto memory_error;
+ }
+ offsetTable[0] = offset;
+
+ for(n=1; n<nb; n++)
+ {
+ offsetTable[n] = GetWord();
+ }
+
+ shapes = new Shape[nb];
+ if (shapes == NULL) {
+ goto memory_error;
+ }
+
+ for(n=0; n<nb; n++)
+ {
+ long here;
+
+ m_filePos = offsetTable[n]+start;
+
+ here = m_filePos;
+ ParseShapeData(0, 0);
+
+ // Keep data for later parsing
+ shapes[n].file_ptr = (unsigned char*)malloc(m_filePos-here);
+ if (shapes[n].file_ptr == NULL) {
+ goto memory_error;
+ }
+ memcpy((void*)shapes[n].file_ptr,(void*)&m_fileBuf[here],m_filePos-here);
+ }
+
+ font->setFontShapeTable(shapes,nb);
+
+ delete[] offsetTable;
+
+ addCharacter(font);
+ return;
+
+memory_error:
+ outOfMemory = 1;
+ if (offsetTable) delete offsetTable;
+ if (font) delete font;
+ if (shapes) delete[] shapes;
+}
+
+
+void CInputScript::ParseDefineMorphShape()
+{
+ U32 tagid = (U32) GetWord();
+
+ tagid = tagid;
+ printf("tagDefineMorphShape \ttagid %-5u\n", tagid);
+}
+
+void CInputScript::ParseDefineFontInfo()
+{
+ SwfFont *font;
+ U32 tagid = (U32) GetWord();
+ long nameLen;
+ char *name;
+ long n,nb;
+ FontFlags flags;
+ long *lut;
+
+ font = (SwfFont *)getCharacter(tagid);
+
+ if (font == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ nameLen = GetByte();
+ name = new char[nameLen+1];
+ if (name == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ for(n=0; n < nameLen; n++)
+ {
+ name[n] = GetByte();
+ }
+ name[n]=0;
+
+ font->setFontName(name);
+
+ delete name;
+
+ flags = (FontFlags)GetByte();
+
+ font->setFontFlags(flags);
+
+ nb = font->getNbGlyphs();
+
+ lut = new long[nb];
+ if (lut == NULL) {
+ outOfMemory = 1;
+ delete font;
+ return;
+ }
+
+ for(n=0; n < nb; n++)
+ {
+ if (flags & fontWideCodes) {
+ lut[n] = GetWord();
+ } else {
+ lut[n] = GetByte();
+ }
+ }
+
+ font->setFontLookUpTable(lut);
+}
+
+
+
+
+
+void CInputScript::ParseDefineFont2()
+{
+ int n;
+ U32 tagid = (U32) GetWord();
+ FontFlags flags;
+ char *name;
+ long nameLen;
+ long fontGlyphCount;
+ long *offsetTable = NULL;
+ Shape *shapes = NULL;
+ long start;
+ SwfFont *font;
+ long *lut = NULL;
+
+ font = new SwfFont(tagid);
+ if (font == NULL) {
+ goto memory_error;
+ }
+
+ flags = (FontFlags)GetWord();
+
+ font->setFontFlags(flags);
+
+ nameLen = GetByte();
+ name = new char[nameLen+1];
+ if (name == NULL) {
+ goto memory_error;
+ }
+ for(n=0; n < nameLen; n++)
+ {
+ name[n] = GetByte();
+ }
+ name[n]=0;
+
+ font->setFontName(name);
+
+ delete name;
+
+ fontGlyphCount = GetWord();
+
+ start = m_filePos;
+
+ offsetTable = new long[fontGlyphCount];
+ if (offsetTable == NULL) {
+ goto memory_error;
+ }
+ for (n=0; n<fontGlyphCount; n++) {
+ if (flags & 8) {
+ offsetTable[n] = GetDWord();
+ } else {
+ offsetTable[n] = GetWord();
+ }
+ }
+
+ shapes = new Shape[fontGlyphCount];
+ if (shapes == NULL) {
+ goto memory_error;
+ }
+
+ for (n=0; n<fontGlyphCount; n++) {
+ long here;
+
+ m_filePos = offsetTable[n]+start;
+
+ here = m_filePos;
+ ParseShapeData(0, 0);
+
+ // Keep data for later parsing
+ shapes[n].file_ptr = (unsigned char*)malloc(m_filePos-here);
+ if (shapes[n].file_ptr == NULL) {
+ goto memory_error;
+ }
+ memcpy((void*)shapes[n].file_ptr,(void*)&m_fileBuf[here],m_filePos-here);
+ }
+
+ font->setFontShapeTable(shapes,fontGlyphCount);
+
+ lut = new long[fontGlyphCount];
+ if (lut == NULL) {
+ goto memory_error;
+ }
+
+ for(n=0; n < fontGlyphCount; n++)
+ {
+ if (flags & 4) {
+ lut[n] = GetWord();
+ } else {
+ lut[n] = GetByte();
+ }
+ }
+
+ font->setFontLookUpTable(lut);
+
+ delete offsetTable;
+
+ addCharacter(font);
+
+ // This is an incomplete parsing
+ return;
+
+memory_error:
+ outOfMemory = 1;
+ if (font) delete font;
+ if (offsetTable) delete offsetTable;
+ if (lut) delete lut;
+ if (shapes) delete[] shapes;
+}
+
+TextRecord * CInputScript::ParseTextRecord(int hasAlpha)
+{
+ TextRecord *tr;
+ TextFlags flags;
+
+ flags = (TextFlags) GetByte();
+ if (flags == 0) return 0;
+
+ tr = new TextRecord;
+ if (tr == NULL) {
+ outOfMemory = 1;
+ return 0;
+ }
+
+ tr->flags = flags;
+
+ if (flags & isTextControl) {
+ if (flags & textHasFont) {
+ long fontId;
+
+ fontId = GetWord();
+ tr->font = (SwfFont *)getCharacter(fontId);
+ }
+ if (flags & textHasColor) {
+ tr->color.red = GetByte();
+ tr->color.green = GetByte();
+ tr->color.blue = GetByte();
+ if (hasAlpha) {
+ tr->color.alpha = GetByte();
+ } else {
+ tr->color.alpha = ALPHA_OPAQUE;
+ }
+ }
+ if (flags & textHasXOffset) {
+ tr->xOffset = GetWord();
+ }
+ if (flags & textHasYOffset) {
+ tr->yOffset = GetWord();
+ }
+ if (flags & textHasFont) {
+ tr->fontHeight = GetWord();
+ }
+ tr->nbGlyphs = GetByte();
+ } else {
+ tr->flags = (TextFlags)0;
+ tr->nbGlyphs = (long)flags;
+ }
+
+ tr->glyphs = new Glyph[ tr->nbGlyphs ];
+ if (tr->glyphs == NULL) {
+ outOfMemory = 1;
+ delete tr;
+ return 0;
+ }
+
+ InitBits();
+ for (int g = 0; g < tr->nbGlyphs; g++)
+ {
+ tr->glyphs[g].index = GetBits(m_nGlyphBits);
+ tr->glyphs[g].xAdvance = GetBits(m_nAdvanceBits);
+ }
+
+ return tr;
+}
+
+void CInputScript::ParseDefineText(int hasAlpha)
+{
+ Text *text;
+ TextRecord *textRecord;
+ Matrix m;
+ Rect rect;
+ U32 tagid = (U32) GetWord();
+
+ text = new Text(tagid);
+ if (text == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+
+ GetRect(&rect);
+ text->setTextBoundary(rect);
+
+ GetMatrix(&m);
+ text->setTextMatrix(m);
+
+ m_nGlyphBits = GetByte();
+ m_nAdvanceBits = GetByte();
+
+ do {
+ textRecord = ParseTextRecord(hasAlpha);
+ if (textRecord) {
+ text->addTextRecord( textRecord );
+ }
+ if (outOfMemory) {
+ delete text;
+ return;
+ }
+ if (m_filePos >= m_tagEnd) break;
+ } while (textRecord);
+
+ addCharacter(text);
+}
+
+
+void CInputScript::ParseDefineSound()
+{
+ Sound *sound;
+ U32 tagid = (U32) GetWord();
+ long nbSamples;
+ long flags;
+ char *buffer;
+
+ sound = new Sound(tagid);
+
+ flags = GetByte();
+ sound->setSoundFlags(flags);
+
+ nbSamples = GetDWord();
+ buffer = sound->setNbSamples(nbSamples);
+ if (buffer == NULL) {
+ outOfMemory = 1;
+ delete sound;
+ return;
+ }
+
+ if (flags & soundIsADPCMCompressed) {
+ Adpcm *adpcm;
+
+ adpcm = new Adpcm( &m_fileBuf[m_filePos] , flags & soundIsStereo );
+
+ adpcm->Decompress((short *)buffer, nbSamples);
+
+ delete adpcm;
+ } else {
+ memcpy(buffer, &m_fileBuf[m_filePos], m_tagLen-5);
+ }
+
+ addCharacter(sound);
+}
+
+
+void CInputScript::ParseDefineButtonSound()
+{
+ U32 tagid = (U32) GetWord();
+ Button *button;
+
+ tagid = tagid;
+
+ printf("tagDefineButtonSound \ttagid %-5u\n", tagid);
+
+ button = (Button *)getCharacter(tagid);
+
+ if (button == 0) {
+ printf(" Couldn't find Button id %d\n", tagid);
+ return;
+ }
+
+ // step through for button states
+ for (int i = 0; i < 4; i++)
+ {
+ Sound *sound;
+ U32 soundTag = GetWord();
+
+ sound = (Sound *)getCharacter(soundTag);
+
+ if (sound) {
+ button->setButtonSound(sound,i);
+ } else if (soundTag) {
+ printf(" Couldn't find Sound id %d\n", soundTag);
+ }
+
+ switch (i)
+ {
+ case 0:
+ printf("upState \ttagid %-5u\n", soundTag);
+ break;
+ case 1:
+ printf("overState \ttagid %-5u\n", soundTag);
+ break;
+ case 2:
+ printf("downState \ttagid %-5u\n", soundTag);
+ break;
+ }
+
+ if (soundTag)
+ {
+ U32 code = GetByte();
+ printf("sound code %u", code);
+
+ if ( code & soundHasInPoint )
+ printf(" inpoint %u", GetDWord());
+ if ( code & soundHasOutPoint )
+ printf(" outpoint %u", GetDWord());
+ if ( code & soundHasLoops )
+ printf(" loops %u", GetWord());
+
+ printf("\n");
+ if ( code & soundHasEnvelope )
+ {
+ int points = GetByte();
+
+ for ( int p = 0; p < points; p++ )
+ {
+ printf("\n");
+ printf("mark44 %u", GetDWord());
+ printf(" left chanel %u", GetWord());
+ printf(" right chanel %u", GetWord());
+ printf("\n");
+ }
+ }
+ }
+ if (m_filePos == m_tagEnd) break;
+ }
+}
+
+void CInputScript::ParseSoundStreamHead()
+{
+ int mixFormat = GetByte();
+
+ // The stream settings
+ int format = GetByte();
+ int nSamples = GetWord();
+
+ mixFormat = mixFormat;
+ format = format;
+ nSamples = nSamples;
+
+ printf("tagSoundStreamHead \tmixFrmt %-3u frmt %-3u nSamples %-5u\n", mixFormat, format, nSamples);
+}
+
+void CInputScript::ParseSoundStreamHead2()
+{
+ int mixFormat = GetByte();
+
+ // The stream settings
+ int format = GetByte();
+ int nSamples = GetWord();
+
+ mixFormat = mixFormat;
+ format = format;
+ nSamples = nSamples;
+
+ //printf("tagSoundStreamHead2 \tmixFormat %-3u format %-3u nSamples %-5u\n", mixFormat, format, nSamples);
+}
+
+void CInputScript::ParseSoundStreamBlock()
+{
+ printf("tagSoundStreamBlock\n");
+}
+
+void CInputScript::ParseDefineButtonCxform()
+{
+ ButtonRecord *br;
+ Button *button;
+ U32 tagid = (U32) GetWord();
+
+ button = (Button *)getCharacter(tagid);
+
+ for (br = button->getButtonRecords(); br; br = br->next)
+ {
+ br->cxform = new Cxform;
+ GetCxform(br->cxform, false);
+ }
+}
+
+void CInputScript::ParseNameCharacter()
+{
+ U32 tagid = (U32) GetWord();
+ char *label = strdup(GetString());
+
+ nameCharacter(tagid, label);
+}
+
+
+void CInputScript::ParseFrameLabel()
+{
+ char *label = strdup(GetString());
+ program->setCurrentFrameLabel(label);
+}
+
+
+void CInputScript::ParseDefineMouseTarget()
+{
+ printf("tagDefineMouseTarget\n");
+}
+
+
+void CInputScript::ParseDefineSprite()
+{
+ Sprite *sprite;
+ Program *prg;
+ int status;
+
+ U32 tagid = (U32) GetWord();
+ U32 frameCount = (U32) GetWord();
+
+ if (frameCount == 0) return;
+
+ printf("tagDefineSprite \ttagid %-5u \tframe count %-5u\n", tagid, frameCount);
+
+ sprite = new Sprite(program->movie, tagid, frameCount);
+ if (sprite == NULL) {
+ outOfMemory = 1;
+ return;
+ }
+ if (sprite->getProgram() == NULL) {
+ delete sprite;
+ outOfMemory = 1;
+ return;
+ }
+
+ prg = sprite->getProgram();
+
+ // Set current program
+ program = prg;
+
+ ParseTags(&status);
+
+ if (outOfMemory) {
+ delete sprite;
+ return;
+ }
+
+ addCharacter(sprite);
+}
+
+
+void CInputScript::ParseUnknown(long code, long len)
+{
+ printf("Unknown Tag : %d - Length = %d\n", code, len);
+}
+
+
+void
+CInputScript::ParseTags(int *status)
+ // Parses the tags within the file.
+{
+
+ // Initialize the end of frame flag.
+ BOOL atEnd = false;
+
+ // Loop through each tag.
+ while (!atEnd)
+ {
+ U32 here;
+
+ // Get the current tag.
+ U16 code = GetTag();
+
+ if (code == notEnoughData) {
+ m_filePos = m_tagStart;
+ *status |= FLASH_PARSE_NEED_DATA;
+ return;
+ }
+
+ //printf("Code %d, tagLen %8u \n", code, m_tagLen);
+
+ here = m_filePos;
+
+ // Get the tag ending position.
+ U32 tagEnd = m_tagEnd;
+
+ if (m_tagEnd > m_actualSize) {
+ m_filePos = m_tagStart;
+ *status |= FLASH_PARSE_NEED_DATA;
+ return;
+ }
+
+ switch (code)
+ {
+ case stagProtect:
+ break;
+
+ case stagEnd:
+
+ // We reached the end of the file.
+ atEnd = true;
+
+ printf("End of Movie\n");
+
+ break;
+
+ case stagShowFrame:
+
+ // Validate frame
+ program->validateLoadingFrame();
+ *status |= FLASH_PARSE_WAKEUP;
+
+ break;
+
+ case stagFreeCharacter:
+ ParseFreeCharacter();
+ break;
+
+ case stagPlaceObject:
+ ParsePlaceObject();
+ break;
+
+ case stagPlaceObject2:
+ ParsePlaceObject2();
+ break;
+
+ case stagRemoveObject:
+ ParseRemoveObject();
+ break;
+
+ case stagRemoveObject2:
+ ParseRemoveObject2();
+ break;
+
+ case stagSetBackgroundColor:
+ ParseSetBackgroundColor();
+ break;
+
+ case stagDoAction:
+ ParseDoAction();
+ break;
+
+ case stagStartSound:
+ ParseStartSound();
+ break;
+
+ case stagStopSound:
+ ParseStopSound();
+ break;
+
+ case stagDefineShape:
+ ParseDefineShape(1);
+ break;
+
+ case stagDefineShape2:
+ ParseDefineShape(2);
+ break;
+
+ case stagDefineShape3:
+ ParseDefineShape(3);
+ break;
+
+ case stagDefineBits:
+ ParseDefineBits();
+ break;
+
+ case stagDefineBitsJPEG2:
+ ParseDefineBitsJPEG2();
+ break;
+
+ case stagDefineBitsJPEG3:
+ ParseDefineBitsJPEG3();
+ break;
+
+ case stagDefineBitsLossless:
+ ParseDefineBitsLossless(1);
+ break;
+
+ case stagDefineBitsLossless2:
+ ParseDefineBitsLossless(2);
+ break;
+
+ case stagJPEGTables:
+ ParseJPEGTables();
+ break;
+
+ case stagDefineButton:
+ ParseDefineButton();
+ break;
+
+ case stagDefineButton2:
+ ParseDefineButton2();
+ break;
+
+ case stagDefineFont:
+ ParseDefineFont();
+ break;
+
+ case stagDefineMorphShape:
+ ParseDefineMorphShape();
+ break;
+
+ case stagDefineFontInfo:
+ ParseDefineFontInfo();
+ break;
+
+ case stagDefineText:
+ ParseDefineText(0);
+ break;
+
+ case stagDefineText2:
+ ParseDefineText(1);
+ break;
+
+ case stagDefineSound:
+ ParseDefineSound();
+ break;
+
+ case stagDefineButtonSound:
+ ParseDefineButtonSound();
+ break;
+
+ case stagSoundStreamHead:
+ ParseSoundStreamHead();
+ break;
+
+ case stagSoundStreamHead2:
+ ParseSoundStreamHead2();
+ break;
+
+ case stagSoundStreamBlock:
+ ParseSoundStreamBlock();
+ break;
+
+ case stagDefineButtonCxform:
+ ParseDefineButtonCxform();
+ break;
+
+ case stagDefineSprite:
+ Program *save;
+
+ save = program;
+ ParseDefineSprite();
+ program->rewindMovie();
+ program = save;
+ break;
+
+ case stagNameCharacter:
+ ParseNameCharacter();
+ break;
+
+ case stagFrameLabel:
+ ParseFrameLabel();
+ break;
+
+ case stagDefineFont2:
+ ParseDefineFont2();
+ break;
+
+ default:
+ ParseUnknown(code, m_tagLen);
+ break;
+ }
+
+ //printf("Bytes read = %d\n", m_filePos-here);
+
+ // Increment the past the tag.
+ m_filePos = tagEnd;
+
+ if (outOfMemory) {
+ fprintf(stderr,"Flash: Out of memory\n");
+ *status |= FLASH_PARSE_OOM;
+ return;
+ }
+ }
+
+ program->validateLoadingFrame();
+ *status |= FLASH_PARSE_EOM;
+}
+
+int
+CInputScript::ParseData(FlashMovie *movie, char * data, long size)
+{
+ int status = FLASH_PARSE_ERROR;
+
+ m_fileBuf = (unsigned char *)data;
+ m_actualSize = size;
+
+ if (needHeader) {
+
+ // Do we have sufficient data to read the header ?
+ if (size < 21) {
+ return FLASH_PARSE_NEED_DATA; // No, need more data
+ }
+
+ needHeader = 0; // Yes
+
+ U8 fileHdr[8];
+
+ memcpy(fileHdr,data,8);
+
+ // Verify the header and get the file size.
+ if (fileHdr[0] != 'F' || fileHdr[1] != 'W' || fileHdr[2] != 'S' )
+ {
+ //fprintf(stderr, "Not a Flash File.\n");
+ return FLASH_PARSE_ERROR; // Error
+ }
+ else
+ {
+ // Get the file version.
+ m_fileVersion = (U16) fileHdr[3];
+ }
+
+ // Get the file size.
+ m_fileSize = (U32) fileHdr[4]
+ | ((U32) fileHdr[5] << 8)
+ | ((U32) fileHdr[6] << 16)
+ | ((U32) fileHdr[7] << 24);
+
+ // Verify the minimum length of a Flash file.
+ if (m_fileSize < 21)
+ {
+ //printf("ERROR: File size is too short\n");
+ return FLASH_PARSE_ERROR; // Error
+ }
+
+ // Set the file position past the header and size information.
+ m_filePos = 8;
+
+ // Get the frame information.
+ GetRect(&frameRect);
+
+ frameRate = GetWord() >> 8;
+
+ frameCount = GetWord();
+
+ program = new Program(movie, frameCount);
+
+ if (program == NULL || program->totalFrames == 0) {
+ return FLASH_PARSE_ERROR;
+ }
+
+ status |= FLASH_PARSE_START;
+ }
+
+ ParseTags(&status);
+
+ return status;
+}
+
+
diff --git a/core/multimedia/opieplayer/libflash/script.h b/core/multimedia/opieplayer/libflash/script.h
new file mode 100644
index 0000000..a41c47e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/script.h
@@ -0,0 +1,144 @@
+#ifndef _SCRIPT_H_
+#define _SCRIPT_H_
+
+// SWF file parser.
+//
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// Input script object definition.
+//////////////////////////////////////////////////////////////////////
+
+// An input script object. This object represents a script created from
+// an external file that is meant to be inserted into an output script.
+struct CInputScript : public Dict
+{
+ int level;
+ struct CInputScript *next;
+
+ Program *program; // Current parsed program
+
+ // Memory fences
+ int outOfMemory;
+
+ //Flash info
+ long frameRate;
+ long frameCount;
+ Rect frameRect;
+
+ // Pointer to file contents buffer.
+ U8 *m_fileBuf;
+
+ // File state information.
+ U32 m_filePos;
+ U32 m_fileSize;
+ U32 m_actualSize;
+ U32 m_fileStart;
+ U16 m_fileVersion;
+
+ int needHeader;
+
+ // Bit Handling
+ S32 m_bitPos;
+ U32 m_bitBuf;
+
+ // Tag parsing information.
+ U32 m_tagStart;
+ U32 m_tagEnd;
+ U32 m_tagLen;
+
+ // Parsing information.
+ S32 m_nFillBits;
+ S32 m_nLineBits;
+ S32 m_nGlyphBits;
+ S32 m_nAdvanceBits;
+
+ // Set to true if we wish to dump all contents long form
+ U32 m_dumpAll;
+
+ // if set to true will dump image guts (i.e. jpeg, zlib, etc. data)
+ U32 m_dumpGuts;
+
+ // Handle to output file.
+ FILE *m_outputFile;
+
+ // Constructor/destructor.
+ CInputScript(int level = 0);
+ ~CInputScript();
+
+ // Tag scanning methods.
+ U16 GetTag(void);
+ U8 GetByte(void);
+ U16 GetWord(void);
+ U32 GetDWord(void);
+ void GetRect(Rect *r);
+ void GetMatrix(Matrix *matrix);
+
+ void GetCxform(Cxform *cxform, BOOL hasAlpha);
+ char *GetString(void);
+
+ // Routines for reading arbitrary sized bit fields from the stream.
+ // Always call start bits before gettings bits and do not intermix
+ // these calls with GetByte, etc...
+ void InitBits();
+ S32 GetSBits(S32 n);
+ U32 GetBits(S32 n);
+
+ // Tag subcomponent parsing methods
+ void ParseFillStyle(long getAlpha = 0);
+ void ParseLineStyle(long getAlpha = 0);
+ int ParseShapeRecord(long getAlpha = 0);
+ ButtonRecord * ParseButtonRecord(long getCxform = 0);
+ ActionRecord * ParseActionRecord();
+ TextRecord * ParseTextRecord(int hasAlpha = 0);
+ void ParseShapeData(int getAlpha, int getStyles);
+
+ // Parsing methods.
+ void ParseEnd(); // 00: stagEnd
+ void ParseShowFrame(U32 frame, U32 offset); // 01: stagShowFrame
+ void ParseDefineShape(int level); // 02: stagDefineShape
+ void ParseFreeCharacter(); // 03: stagFreeCharacter
+ void ParsePlaceObject(); // 04: stagPlaceObject
+ void ParseRemoveObject(); // 05: stagRemoveObject
+ void ParseDefineBits(); // 06: stagDefineBits
+ void ParseDefineButton(); //x 07: stagDefineButton
+ void ParseJPEGTables(); // 08: stagJPEGTables
+ void ParseSetBackgroundColor(); // 09: stagSetBackgroundColor
+ void ParseDefineFont(); //x 10: stagDefineFont
+ void ParseDefineText(int hasAplha); //x 11: stagDefineText 33: stagDefineText2
+ void ParseDoAction(); // 12: stagDoAction
+ void ParseDefineFontInfo(); //x 13: stagDefineFontInfo
+ void ParseDefineSound(); // 14: stagDefineSound
+ void ParseStartSound(); // 15: stagStartSound
+ void ParseStopSound(); // 16: stagStopSound
+ void ParseDefineButtonSound(); // 17: stagDefineButtonSound
+ void ParseSoundStreamHead(); // 18: stagSoundStreamHead
+ void ParseSoundStreamBlock(); // 19: stagSoundStreamBlock
+ void ParseDefineBitsLossless(int level); // 20: stagDefineBitsLossless 36: stagDefineBitsLossless2
+ void ParseDefineBitsJPEG2(); // 21: stagDefineBitsJPEG2
+ void ParseDefineButtonCxform(); // 23: stagDefineButtonCxform
+ void ParseProtect(); // 24: stagProtect
+ void ParsePlaceObject2(); // 26: stagPlaceObject2
+ void ParseRemoveObject2(); // 28: stagRemoveObject2
+ void ParseDefineButton2(); //x 34: stagDefineButton2
+ void ParseDefineBitsJPEG3(); // 35: stagDefineBitsJPEG3
+ void ParseDefineMouseTarget(); // 38: stagDefineMouseTarget
+ void ParseDefineSprite(); //x 39: stagDefineSprite
+ void ParseNameCharacter(); // 40: stagNameCharacter
+ void ParseFrameLabel(); // 43: stagFrameLabel
+ void ParseSoundStreamHead2(); // 45: stagSoundStreamHead2
+ void ParseDefineMorphShape(); //x 46: stagDefineMorphShape
+ void ParseDefineFont2(); //x 48: stagDefineFont2
+ void ParseUnknown(long,long);
+
+ void ParseTags(int *);
+ int ParseData(FlashMovie *movie, char * data, long size);
+ void S_DumpImageGuts();
+
+#ifdef DUMP
+ long save(char *filenam);
+#endif
+};
+
+
+#endif /* _SCRIPT_H_ */
diff --git a/core/multimedia/opieplayer/libflash/shape.cc b/core/multimedia/opieplayer/libflash/shape.cc
new file mode 100644
index 0000000..0d8df93
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/shape.cc
@@ -0,0 +1,1205 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+#define PRINT 0
+
+#define ABS(v) ((v) < 0 ? -(v) : (v))
+
+static void prepareStyles(GraphicDevice *gd, Matrix *matrix, Cxform *cxform, FillStyleDef *f, long n);
+
+static void clearStyles(GraphicDevice *gd, FillStyleDef *f, long n);
+
+static void drawShape(GraphicDevice *gd, Matrix *matrix1, Cxform *cxform, Shape *shape,
+ ShapeAction shapeAction, void *id,ScanLineFunc scan_line_func);
+
+// Constructor
+
+Shape::Shape(long id, int level) : Character(ShapeType, id)
+{
+ defLevel = level;
+
+ defaultFillStyle.type = f_Solid;
+ defaultFillStyle.color.red = 0;
+ defaultFillStyle.color.green = 0;
+ defaultFillStyle.color.blue = 0;
+ defaultFillStyle.color.alpha = ALPHA_OPAQUE;
+
+ defaultLineStyle.width = 0;
+
+ // This is to force a first update
+ lastMat.a = 0;
+ lastMat.d = 0;
+ shape_size += sizeof(Shape);
+ shape_nb ++;
+
+ file_ptr = NULL;
+ getStyles = 0;
+ getAlpha = 0;
+}
+
+Shape::~Shape()
+{
+ if (file_ptr) {
+ free(file_ptr);
+ }
+}
+
+void
+Shape::setBoundingBox(Rect rect)
+{
+ boundary = rect;
+}
+
+void
+Shape::getBoundingBox(Rect *bb, DisplayListEntry *e)
+{
+ *bb = boundary;
+}
+
+int
+Shape::execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform)
+{
+ //printf("TagId = %d\n", getTagId());
+ //if (getTagId() != 220) return 0;
+
+ if (cxform) {
+ defaultFillStyle.color = cxform->getColor(gd->getForegroundColor());
+ } else {
+ defaultFillStyle.color = gd->getForegroundColor();
+ }
+ defaultFillStyle.color.pixel = gd->allocColor(defaultFillStyle.color);
+
+ drawShape(gd, matrix, cxform, this, ShapeDraw, NULL, 0);
+ return 0;
+}
+
+void
+Shape::getRegion(GraphicDevice *gd, Matrix *matrix, void *id, ScanLineFunc scan_line_func)
+{
+ gd->setClipping(0);
+ drawShape(gd,matrix,0,this,ShapeGetRegion,id,scan_line_func);
+ gd->setClipping(1);
+}
+
+/************************************************************************/
+
+/* create a new path */
+
+static void newPath(ShapeParser *shape,
+ long x, long y)
+{
+ Path *p;
+ long x1,y1;
+
+ p=&shape->curPath;
+
+ x1 = shape->matrix->getX(x, y);
+ y1 = shape->matrix->getY(x, y);
+
+ p->lastX = x1;
+ p->lastY = y1;
+
+ p->nb_edges = 0;
+ p->nb_segments = 0;
+}
+
+
+static void addSegment1(ShapeParser *shape,
+ long x, long y,
+ FillStyleDef *f0,
+ FillStyleDef *f1,
+ LineStyleDef *l)
+{
+ Path *p;
+ p=&shape->curPath;
+
+ if (l) {
+ /* a line is defined ... it will be drawn later */
+ LineSegment *ls;
+
+ ls = new LineSegment;
+ if (ls != NULL) {
+ ls->l = l;
+ ls->x1 = p->lastX;
+ ls->y1 = p->lastY;
+ ls->x2 = x;
+ ls->y2 = y;
+ ls->first = (p->nb_segments == 0);
+ ls->next = NULL;
+ if (shape->last_line == NULL) {
+ shape->first_line = ls;
+ } else {
+ shape->last_line->next = ls;
+ }
+ shape->last_line = ls;
+ }
+ }
+
+ /* anti antialiasing not needed if line */
+ if (!shape->reverse) {
+ shape->gd->addSegment(p->lastX,p->lastY,x,y,f0,f1,l ? 0 : 1);
+ } else {
+ shape->gd->addSegment(p->lastX,p->lastY,x,y,f1,f0,l ? 0 : 1);
+ }
+
+ p->lastX = x;
+ p->lastY = y;
+
+ p->nb_segments++;
+}
+
+
+static void addLine(ShapeParser *shape, long x, long y,
+ FillStyleDef *f0,
+ FillStyleDef *f1,
+ LineStyleDef *l)
+{
+ long x1,y1;
+ Path *p;
+
+ p=&shape->curPath;
+
+ x1 = shape->matrix->getX(x, y);
+ y1 = shape->matrix->getY(x, y);
+
+ addSegment1(shape,x1,y1,f0,f1,l);
+
+ p->nb_edges++;
+}
+
+
+// This is based on Divide and Conquer algorithm.
+
+#define BFRAC_BITS 0
+#define BFRAC (1 << BFRAC_BITS)
+
+static void
+bezierBuildPoints (ShapeParser *s,
+ int subdivisions,
+ long a1X, long a1Y,
+ long cX, long cY,
+ long a2X, long a2Y)
+{
+ long c1X,c1Y;
+ long c2X,c2Y;
+ long X,Y;
+ long xmin,ymin,xmax,ymax;
+
+ if (subdivisions != 0) {
+
+ /* find the bounding box */
+
+ if (a1X < cX) {
+ xmin = a1X;
+ xmax = cX;
+ } else {
+ xmin = cX;
+ xmax = a1X;
+ }
+ if (a2X < xmin) xmin = a2X;
+ if (a2X > xmax) xmax = a2X;
+
+ if (a1Y < cY) {
+ ymin = a1Y;
+ ymax = cY;
+ } else {
+ ymin = cY;
+ ymax = a1Y;
+ }
+ if (a2Y < ymin) ymin = a2Y;
+ if (a2Y > ymax) ymax = a2Y;
+
+ if (((xmax - xmin) + (ymax - ymin)) >= (BFRAC*FRAC*2)) {
+ // Control point 1
+ c1X = (a1X+cX) >> 1;
+ c1Y = (a1Y+cY) >> 1;
+
+ // Control point 2
+ c2X = (a2X+cX) >> 1;
+ c2Y = (a2Y+cY) >> 1;
+
+ // New point
+ X = (c1X+c2X) >> 1;
+ Y = (c1Y+c2Y) >> 1;
+
+ subdivisions--;
+
+ bezierBuildPoints(s, subdivisions,
+ a1X, a1Y, c1X, c1Y, X, Y);
+ bezierBuildPoints(s, subdivisions,
+ X, Y, c2X, c2Y, a2X, a2Y);
+
+ return;
+ }
+ }
+
+ addSegment1(s, (a2X+(BFRAC/2)) >> BFRAC_BITS,
+ (a2Y+(BFRAC/2)) >> BFRAC_BITS, s->f0, s->f1, s->l);
+}
+
+/* this code is broken, but useful to get something */
+static void flushPaths(ShapeParser *s)
+{
+ LineSegment *ls;
+ LineStyleDef *l;
+ long nx,ny,nn,w;
+ GraphicDevice *gd = s->gd;
+
+ /* draw the filled polygon */
+ gd->drawPolygon();
+
+ /* draw the lines */
+ ls = s->first_line;
+ if (ls != NULL) {
+ do {
+ l = ls->l;
+
+#if 0
+ printf("line %d %d %d %d width=%d\n",
+ ls->x1, ls->y1, ls->x2, ls->y2, l->width);
+#endif
+
+ /* XXX: this width is false, but it is difficult (and expensive)
+ to have the correct one */
+ w = ABS((long)(s->matrix->a * l->width));
+
+ if (w <= ((3*FRAC)/2)) {
+ w = FRAC;
+ }
+#ifdef THIN_LINES
+ if (w <= ((3*FRAC)/2)) {
+ // draw the thin lines only in shapeAction == shapeDraw
+ if (gd->scan_line_func == NULL) {
+ gd->setForegroundColor(l->fillstyle.color);
+ gd->drawLine(ls->x1, ls->y1, ls->x2, ls->y2, w);
+ }
+ } else {
+#else
+ {
+#endif
+ /* compute the normal vector */
+
+ nx = -(ls->y2 - ls->y1);
+ ny = (ls->x2 - ls->x1);
+
+ /* normalize & width */
+ nn = 2 * (long) sqrt(nx * nx + ny * ny);
+
+#define UL ls->x1 + nx -ny, ls->y1 + ny +nx
+#define UR ls->x2 + nx +ny, ls->y2 + ny -nx
+#define LL ls->x1 - nx -ny, ls->y1 - ny +nx
+#define LR ls->x2 - nx +ny, ls->y2 - ny -nx
+
+ if (nn > 0) {
+ nx = (nx * w) / nn;
+ ny = (ny * w) / nn;
+
+ /* top segment */
+ gd->addSegment(UL, UR, NULL, &l->fillstyle, 1);
+
+ /* bottom segment */
+ gd->addSegment(LL, LR, &l->fillstyle, NULL, 1);
+
+ /* right segment */
+ gd->addSegment(UR, LR, &l->fillstyle, NULL, 1);
+
+ /* left segment */
+ gd->addSegment(UL, LL, NULL, &l->fillstyle, 1);
+
+ /* draw the line polygon */
+ gd->drawPolygon();
+ }
+ }
+
+ ls = ls->next;
+ } while (ls != NULL);
+
+ /* delete the line structures */
+
+ ls = s->first_line;
+ while (ls != NULL) {
+ LineSegment *ls1;
+ ls1 = ls->next;
+ delete ls;
+ ls = ls1;
+ }
+
+ /* reset the line pointers */
+ s->first_line = NULL;
+ s->last_line = NULL;
+ }
+}
+
+
+static void addBezier(ShapeParser *shape,
+ long ctrlX1, long ctrlY1,
+ long newX1, long newY1,
+ FillStyleDef *f0,
+ FillStyleDef *f1,
+ LineStyleDef *l)
+{
+ long newX,newY,ctrlX,ctrlY;
+ Path *p;
+
+ p=&shape->curPath;
+
+ /* note: we do the matrix multiplication before calculating the
+ bezier points (faster !) */
+
+ ctrlX = shape->matrix->getX(ctrlX1, ctrlY1);
+ ctrlY = shape->matrix->getY(ctrlX1, ctrlY1);
+ newX = shape->matrix->getX(newX1, newY1);
+ newY = shape->matrix->getY(newX1, newY1);
+
+ shape->f0 = f0;
+ shape->f1 = f1;
+ shape->l = l;
+
+ bezierBuildPoints(shape, 3,
+ p->lastX<<BFRAC_BITS,p->lastY<<BFRAC_BITS,
+ ctrlX<<BFRAC_BITS,ctrlY<<BFRAC_BITS,
+ newX<<BFRAC_BITS,newY<<BFRAC_BITS);
+
+ p->nb_edges++;
+}
+
+/***********************************************************************/
+
+
+/* bit parser */
+
+static void InitBitParser(struct BitParser *b,U8 *buf)
+{
+ b->ptr = buf;
+}
+
+static void InitBits(struct BitParser *b)
+{
+ // Reset the bit position and buffer.
+ b->m_bitPos = 0;
+ b->m_bitBuf = 0;
+}
+
+
+
+static inline U8 GetByte(struct BitParser *b)
+{
+ U8 v;
+ v = *b->ptr++;
+ return v;
+}
+
+static inline U16 GetWord(struct BitParser *b)
+{
+ U8 *s;
+ U16 v;
+ s = b->ptr;
+ v = s[0] | ((U16) s[1] << 8);
+ b->ptr = s + 2;
+ return v;
+}
+
+static inline U32 GetDWord(struct BitParser *b)
+{
+ U32 v;
+ U8 * s = b->ptr;
+ v = (U32) s[0] | ((U32) s[1] << 8) |
+ ((U32) s[2] << 16) | ((U32) s [3] << 24);
+ b->ptr = s + 4;
+ return v;
+}
+
+static inline U32 GetBit (struct BitParser *b)
+{
+ U32 v;
+ S32 m_bitPos = b->m_bitPos;
+ U32 m_bitBuf = b->m_bitBuf;
+
+ if (m_bitPos == 0) {
+ m_bitBuf = (U32)(*b->ptr++) << 24;
+ m_bitPos = 8;
+ }
+
+ v = (m_bitBuf >> 31);
+
+ m_bitPos--;
+ m_bitBuf <<= 1;
+
+ b->m_bitPos = m_bitPos;
+ b->m_bitBuf = m_bitBuf;
+
+ return v;
+}
+
+static inline U32 GetBits (struct BitParser *b, int n)
+{
+ U32 v;
+ S32 m_bitPos = b->m_bitPos;
+ U32 m_bitBuf = b->m_bitBuf;
+
+ if (n == 0)
+ return 0;
+
+ while (m_bitPos < n) {
+ m_bitBuf |= (U32)(*b->ptr++) << (24 - m_bitPos);
+ m_bitPos += 8;
+ }
+
+ v = m_bitBuf >> (32 - n);
+ m_bitBuf <<= n;
+ m_bitPos -= n;
+
+ b->m_bitPos = m_bitPos;
+ b->m_bitBuf = m_bitBuf;
+ return v;
+}
+
+// Get n bits from the string with sign extension.
+static inline S32 GetSBits (struct BitParser *b,S32 n)
+{
+ // Get the number as an unsigned value.
+ S32 v = (S32) GetBits(b,n);
+
+ // Is the number negative?
+ if (v & (1L << (n - 1)))
+ {
+ // Yes. Extend the sign.
+ v |= -1L << n;
+ }
+
+ return v;
+}
+
+
+
+/************************************************************************/
+
+static void GetMatrix(BitParser *b, Matrix* mat)
+{
+ InitBits(b);
+
+ // Scale terms
+ if (GetBit(b))
+ {
+ int nBits = (int) GetBits(b,5);
+ mat->a = (float)(GetSBits(b,nBits))/(float)0x10000;
+ mat->d = (float)(GetSBits(b,nBits))/(float)0x10000;
+ }
+ else
+ {
+ mat->a = mat->d = 1.0;
+ }
+
+ // Rotate/skew terms
+ if (GetBit(b))
+ {
+ int nBits = (int)GetBits(b,5);
+ mat->c = (float)(GetSBits(b,nBits))/(float)0x10000;
+ mat->b = (float)(GetSBits(b,nBits))/(float)0x10000;
+ }
+ else
+ {
+ mat->b = mat->c = 0.0;
+ }
+
+ // Translate terms
+ int nBits = (int) GetBits(b,5);
+ mat->tx = GetSBits(b,nBits);
+ mat->ty = GetSBits(b,nBits);
+}
+
+static FillStyleDef * ParseFillStyle(ShapeParser *shape, long *n, long getAlpha)
+{
+ BitParser *b = &shape->bit_parser;
+ FillStyleDef *defs;
+ U16 i = 0;
+
+ // Get the number of fills.
+ U16 nFills = GetByte(b);
+
+ // Do we have a larger number?
+ if (nFills == 255)
+ {
+ // Get the larger number.
+ nFills = GetWord(b);
+ }
+
+ *n = nFills;
+ defs = new FillStyleDef[ nFills ];
+ if (defs == NULL) return NULL;
+
+ // Get each of the fill style.
+ for (i = 0; i < nFills; i++)
+ {
+ U16 fillStyle = GetByte(b);
+
+ defs[i].type = (FillType) fillStyle;
+
+ if (fillStyle & 0x10)
+ {
+ defs[i].type = (FillType) (fillStyle & 0x12);
+
+ // Get the gradient matrix.
+ GetMatrix(b,&(defs[i].matrix));
+
+ // Get the number of colors.
+ defs[i].gradient.nbGradients = GetByte(b);
+
+ // Get each of the colors.
+ for (U16 j = 0; j < defs[i].gradient.nbGradients; j++)
+ {
+ defs[i].gradient.ratio[j] = GetByte(b);
+ defs[i].gradient.color[j].red = GetByte(b);
+ defs[i].gradient.color[j].green = GetByte(b);
+ defs[i].gradient.color[j].blue = GetByte(b);
+ if (getAlpha) {
+ defs[i].gradient.color[j].alpha = GetByte(b);
+ } else {
+ defs[i].gradient.color[j].alpha = ALPHA_OPAQUE;
+ }
+ }
+ }
+ else if (fillStyle & 0x40)
+ {
+ defs[i].type = (FillType) (fillStyle & 0x41);
+
+ // Get the bitmapId
+ defs[i].bitmap = (Bitmap *)shape->dict->getCharacter(GetWord(b));
+ // Get the bitmap matrix.
+ GetMatrix(b,&(defs[i].matrix));
+ }
+ else
+ {
+ defs[i].type = (FillType) 0;
+
+ // A solid color
+ defs[i].color.red = GetByte(b);
+ defs[i].color.green = GetByte(b);
+ defs[i].color.blue = GetByte(b);
+ if (getAlpha) {
+ defs[i].color.alpha = GetByte(b);
+ } else {
+ defs[i].color.alpha = ALPHA_OPAQUE;
+ }
+ }
+ }
+
+ return defs;
+}
+
+static LineStyleDef * ParseLineStyle(ShapeParser *shape, long *n, long getAlpha)
+{
+ BitParser *b = &shape->bit_parser;
+ LineStyleDef *defs,*def;
+ FillStyleDef *f;
+ long i;
+
+ // Get the number of lines.
+ U16 nLines = GetByte(b);
+
+ // Do we have a larger number?
+ if (nLines == 255)
+ {
+ // Get the larger number.
+ nLines = GetWord(b);
+ }
+
+ *n = nLines;
+ defs = new LineStyleDef[ nLines ];
+ if (defs == NULL) return NULL;
+
+ // Get each of the line styles.
+ for (i = 0; i < nLines; i++)
+ {
+ def=&defs[i];
+ def->width = GetWord(b);
+ def->color.red = GetByte(b);
+ def->color.green = GetByte(b);
+ def->color.blue = GetByte(b);
+ if (getAlpha) {
+ def->color.alpha = GetByte(b);
+ } else {
+ def->color.alpha = ALPHA_OPAQUE;
+ }
+
+ f=&def->fillstyle;
+ f->type = f_Solid;
+ f->color = def->color;
+ if (shape->cxform) {
+ f->color = shape->cxform->getColor(f->color);
+ }
+ f->color.pixel = shape->gd->allocColor(f->color);
+ }
+
+ return defs;
+}
+
+/* 0 = end of shape */
+static int ParseShapeRecord(ShapeParser *shape, ShapeRecord *sr, long getAlpha)
+{
+ BitParser *b = &shape->bit_parser;
+
+ // Determine if this is an edge.
+ BOOL isEdge = (BOOL) GetBit(b);
+
+ if (!isEdge)
+ {
+ // Handle a state change
+ U16 flags = (U16) GetBits(b,5);
+
+ // Are we at the end?
+ if (flags == 0)
+ {
+ // End of shape
+ return 0;
+ }
+
+ sr->type = shapeNonEdge;
+ sr->flags = (ShapeFlags)flags;
+
+ // Process a move to.
+ if (flags & flagsMoveTo)
+ {
+ U16 nBits = (U16) GetBits(b,5);
+ sr->x = GetSBits(b,nBits);
+ sr->y = GetSBits(b,nBits);
+ }
+
+ // Get new fill info.
+ if (flags & flagsFill0)
+ {
+ sr->fillStyle0 = GetBits(b,shape->m_nFillBits);
+ }
+ if (flags & flagsFill1)
+ {
+ sr->fillStyle1 = GetBits(b,shape->m_nFillBits);
+ }
+
+ // Get new line info
+ if (flags & flagsLine)
+ {
+ sr->lineStyle = GetBits(b,shape->m_nLineBits);
+ }
+
+ // Check to get a new set of styles for a new shape layer.
+ if (flags & flagsNewStyles)
+ {
+ FillStyleDef *fillDefs;
+ LineStyleDef *lineDefs;
+ long n;
+
+ // Parse the style.
+ fillDefs = ParseFillStyle(shape, &n, getAlpha);
+ if (fillDefs == NULL) return 0;
+
+ sr->newFillStyles = fillDefs;
+ sr->nbNewFillStyles = n;
+
+ lineDefs = ParseLineStyle(shape, &n, getAlpha);
+ if (lineDefs == NULL) return 0;
+
+ sr->newLineStyles = lineDefs;
+ sr->nbNewLineStyles = n;
+
+ InitBits(b); // Bug !
+
+ // Reset.
+ shape->m_nFillBits = (U16) GetBits(b,4);
+ shape->m_nLineBits = (U16) GetBits(b,4);
+ }
+
+ //if (flags & flagsEndShape)
+ //printf("\tEnd of shape.\n\n");
+
+ return flags & flagsEndShape ? 0 : 1;
+ }
+ else
+ {
+ if (GetBit(b))
+ {
+ sr->type = shapeLine;
+
+ // Handle a line
+ U16 nBits = (U16) GetBits(b,4) + 2; // nBits is biased by 2
+
+ // Save the deltas
+ if (GetBit(b))
+ {
+ // Handle a general line.
+ sr->dX = GetSBits(b,nBits);
+ sr->dY = GetSBits(b,nBits);
+ }
+ else
+ {
+ // Handle a vert or horiz line.
+ if (GetBit(b))
+ {
+ // Vertical line
+ sr->dY = GetSBits(b,nBits);
+ sr->dX = 0;
+ }
+ else
+ {
+ // Horizontal line
+ sr->dX = GetSBits(b,nBits);
+ sr->dY = 0;
+ }
+ }
+ }
+ else
+ {
+ sr->type = shapeCurve;
+
+ // Handle a curve
+ U16 nBits = (U16) GetBits(b,4) + 2; // nBits is biased by 2
+
+ // Get the control
+ sr->ctrlX = GetSBits(b,nBits);
+ sr->ctrlY = GetSBits(b,nBits);
+
+ // Get the anchor
+ sr->anchorX = GetSBits(b,nBits);
+ sr->anchorY = GetSBits(b,nBits);
+ }
+
+ return 1;
+ }
+}
+
+static void drawShape(GraphicDevice *gd, Matrix *matrix1, Cxform *cxform, Shape *shape,
+ ShapeAction shapeAction, void *id,ScanLineFunc scan_line_func)
+{
+ LineStyleDef *l;
+ FillStyleDef *f0;
+ FillStyleDef *f1;
+ ShapeRecord sr1,*sr = &sr1;
+ int firstPoint;
+ long lastX,lastY;
+ LineStyleDef *curLineStyle;
+ long curNbLineStyles;
+ FillStyleDef *curFillStyle;
+ long curNbFillStyles;
+ StyleList *sl;
+ ShapeParser sp1,*sp=&sp1;
+ BitParser *b;
+ Matrix mat,*matrix;
+
+ mat = (*gd->adjust) * (*matrix1);
+ matrix = &mat;
+
+ sp->reverse = (mat.a * mat.d) < 0;
+
+ curLineStyle = NULL;
+ curNbLineStyles = 0;
+ curFillStyle = NULL;
+ curNbFillStyles = 0;
+ sp->style_list = NULL;
+
+ sp->shape = shape;
+ sp->gd = gd;
+ sp->matrix = matrix;
+ sp->cxform = cxform;
+ sp->dict = shape->dict;
+
+ if (shapeAction == ShapeGetRegion) {
+ gd->scan_line_func = scan_line_func;
+ gd->scan_line_func_id = id;
+ } else {
+ gd->scan_line_func = NULL;
+ }
+
+ b = &sp->bit_parser;
+ InitBitParser(b,shape->file_ptr);
+
+ if (shape->getStyles) {
+ // ShapeWithStyle
+ curFillStyle = ParseFillStyle(sp, &curNbFillStyles, shape->getAlpha);
+ if (curFillStyle == NULL) return;
+
+ curLineStyle = ParseLineStyle(sp, &curNbLineStyles, shape->getAlpha);
+ if (curLineStyle == NULL) return;
+
+ sl = new StyleList;
+ if (sl == NULL) return;
+
+ sl->next = NULL;
+ sl->newFillStyles = curFillStyle;
+ sl->nbNewFillStyles = curNbFillStyles;
+ sl->newLineStyles = curLineStyle;
+ sl->nbNewLineStyles = curNbLineStyles;
+
+ sp->style_list = sl;
+
+ if (shapeAction == ShapeDraw) {
+ prepareStyles(gd, matrix, cxform, curFillStyle, curNbFillStyles);
+ }
+ }
+
+ InitBits(b);
+ sp->m_nFillBits = (U16) GetBits(b,4);
+ sp->m_nLineBits = (U16) GetBits(b,4);
+
+ l = 0;
+ f0 = 0;
+ f1 = 0;
+ firstPoint = 1;
+ lastX = 0;
+ lastY = 0;
+ sp->curPath.nb_edges = 0;
+ sp->first_line = NULL;
+ sp->last_line = NULL;
+
+ for(;;) {
+ if (ParseShapeRecord(sp, sr, shape->getAlpha) == 0) break;
+
+ switch (sr->type)
+ {
+ case shapeNonEdge:
+ if (sr->flags & flagsNewStyles) {
+
+ curFillStyle = sr->newFillStyles;
+ curNbFillStyles = sr->nbNewFillStyles;
+ curLineStyle = sr->newLineStyles;
+ curNbLineStyles = sr->nbNewLineStyles;
+
+ sl = new StyleList;
+ sl->next = sp->style_list;
+ sl->newFillStyles = sr->newFillStyles;
+ sl->nbNewFillStyles = sr->nbNewFillStyles;
+ sl->newLineStyles = sr->newLineStyles;
+ sl->nbNewLineStyles = sr->nbNewLineStyles;
+
+ sp->style_list = sl;
+
+ if (shapeAction == ShapeDraw) {
+ prepareStyles(gd, matrix, cxform, curFillStyle, curNbFillStyles);
+ }
+ }
+ if (sr->flags & flagsFill0) {
+ if (sr->fillStyle0) {
+ if (curFillStyle) {
+ f0 = &curFillStyle[sr->fillStyle0-1];
+ } else {
+ f0 = &shape->defaultFillStyle;
+ }
+ } else {
+ f0 = 0;
+ }
+ }
+ if (sr->flags & flagsFill1) {
+ if (sr->fillStyle1) {
+ if (curFillStyle) {
+ f1 = &curFillStyle[sr->fillStyle1-1];
+ } else {
+ f1 = &shape->defaultFillStyle;
+ }
+ } else {
+ f1 = 0;
+ }
+ }
+ if (sr->flags & flagsLine) {
+ if (sr->lineStyle) {
+ l = &curLineStyle[sr->lineStyle-1];
+ } else {
+ l = 0;
+ }
+ }
+ if (sr->flags & flagsMoveTo) {
+ if (sp->curPath.nb_edges == 0) {
+ /* if no edges, draw the polygon, then the lines */
+ flushPaths(sp);
+ }
+
+ newPath(sp, sr->x, sr->y);
+ firstPoint = 0;
+
+ lastX = sr->x;
+ lastY = sr->y;
+
+#if PRINT
+ printf("---------\nX,Y = %4d,%4d\n", sr->x/20, sr->y/20);
+#endif
+ }
+ break;
+ case shapeCurve:
+ // Handle Bezier Curves !!!
+ if (firstPoint) {
+ newPath(sp, 0, 0);
+ firstPoint = 0;
+ }
+ {
+ long newX,newY,ctrlX,ctrlY;
+
+ ctrlX = lastX+sr->ctrlX;
+ ctrlY = lastY+sr->ctrlY;
+ newX = ctrlX+sr->anchorX;
+ newY = ctrlY+sr->anchorY;
+
+#if 1
+ addBezier(sp, ctrlX, ctrlY, newX, newY, f0 , f1, l);
+#else
+ addLine(sp, newX, newY, f0, f1, l);
+#endif
+
+ lastX = newX;
+ lastY = newY;
+ }
+ break;
+ case shapeLine:
+ if (firstPoint) {
+ newPath(sp, 0, 0);
+ firstPoint = 0;
+ }
+
+ lastX += sr->dX;
+ lastY += sr->dY;
+
+ addLine(sp, lastX, lastY, f0, f1, l);
+#if PRINT
+ printf(" X, Y = %4d,%4d\n", lastX/20, lastY/20);
+#endif
+ break;
+ }
+ }
+
+ /* XXX: should test if there is something to draw */
+ flushPaths(sp);
+
+ /* free the styles */
+ while (sp->style_list) {
+ StyleList *sl;
+
+ sl=sp->style_list;
+ sp->style_list = sl->next;
+
+ if (shapeAction == ShapeDraw) {
+ clearStyles(gd, sl->newFillStyles, sl->nbNewFillStyles);
+ }
+
+ delete[] sl->newFillStyles;
+ delete[] sl->newLineStyles;
+
+ delete sl;
+ }
+}
+
+static void
+prepareStyles(GraphicDevice *gd, Matrix *matrix, Cxform *cxform,
+ FillStyleDef *ftab, long n)
+{
+ long fs;
+ FillStyleDef *f;
+
+ for(fs = 0; fs < n; fs++)
+ {
+ f = ftab + fs;
+ switch (f->type)
+ {
+ case f_None:
+ break;
+ case f_Solid:
+ if (cxform) {
+ f->color = cxform->getColor(f->color);
+ }
+ f->color.pixel = gd->allocColor(f->color);
+ break;
+ case f_LinearGradient:
+ case f_RadialGradient:
+ {
+ Matrix mat;
+ int n,r,l;
+ long red, green, blue, alpha;
+ long dRed, dGreen, dBlue, dAlpha;
+ long min,max;
+ Matrix *m;
+
+ mat = *(matrix) * f->matrix;
+ // Compute inverted matrix
+ f->gradient.imat = mat.invert();
+
+ /* renormalize the matrix */
+ m=&f->gradient.imat;
+ if (f->type == f_LinearGradient) {
+ m->a = m->a * FRAC * (1/128.0) * 65536.0;
+ m->b = m->b * FRAC * (1/128.0) * 65536.0;
+ m->tx = (long) ((m->tx + 16384) * (1/128.0) * 65536.0);
+ } else {
+ m->a = m->a * FRAC * (1/64.0) * 65536.0;
+ m->b = m->b * FRAC * (1/64.0) * 65536.0;
+ m->c = m->c * FRAC * (1/64.0) * 65536.0;
+ m->d = m->d * FRAC * (1/64.0) * 65536.0;
+ m->tx = (long) (m->tx * (1/64.0) * 65536.0);
+ m->ty = (long) (m->ty * (1/64.0) * 65536.0);
+ }
+
+ // Reset translation in inverted matrix
+ f->gradient.has_alpha = 0;
+
+ // Build a 256 color ramp
+ f->gradient.ramp = new Color[256];
+ if (f->gradient.ramp == NULL) {
+ // Invalidate fill style
+ f->type = f_None;
+ continue;
+ }
+
+ // Store min and max
+ min = f->gradient.ratio[0];
+ max = f->gradient.ratio[f->gradient.nbGradients-1];
+ for(r=0; r < f->gradient.nbGradients-1; r++)
+ {
+ Color start,end;
+
+ l = f->gradient.ratio[r+1]-f->gradient.ratio[r];
+ if (l == 0) continue;
+
+ if (cxform) {
+ start = cxform->getColor(f->gradient.color[r]);
+ end = cxform->getColor(f->gradient.color[r+1]);
+ } else {
+ start = f->gradient.color[r];
+ end = f->gradient.color[r+1];
+ }
+
+ if (start.alpha != ALPHA_OPAQUE ||
+ end.alpha != ALPHA_OPAQUE) {
+ f->gradient.has_alpha = 1;
+ }
+
+ dRed = end.red - start.red;
+ dGreen = end.green - start.green;
+ dBlue = end.blue - start.blue;
+ dAlpha = end.alpha - start.alpha;
+
+ dRed = (dRed<<16)/l;
+ dGreen = (dGreen<<16)/l;
+ dBlue = (dBlue<<16)/l;
+ dAlpha = (dAlpha<<16)/l;
+
+ red = start.red <<16;
+ green = start.green <<16;
+ blue = start.blue <<16;
+ alpha = start.alpha <<16;
+
+ for (n=f->gradient.ratio[r]; n<=f->gradient.ratio[r+1]; n++) {
+ f->gradient.ramp[n].red = red>>16;
+ f->gradient.ramp[n].green = green>>16;
+ f->gradient.ramp[n].blue = blue>>16;
+ f->gradient.ramp[n].alpha = alpha>>16;
+
+ f->gradient.ramp[n].pixel = gd->allocColor(f->gradient.ramp[n]);
+ red += dRed;
+ green += dGreen;
+ blue += dBlue;
+ alpha += dAlpha;
+ }
+ }
+ for(n=0; n<min; n++) {
+ f->gradient.ramp[n] = f->gradient.ramp[min];
+ }
+ for(n=max; n<256; n++) {
+ f->gradient.ramp[n] = f->gradient.ramp[max];
+ }
+ }
+ break;
+ case f_TiledBitmap:
+ case f_clippedBitmap:
+ if (f->bitmap) {
+ Matrix *m;
+
+ f->cmap = gd->getColormap(f->bitmap->colormap,
+ f->bitmap->nbColors, cxform);
+ if (f->cmap == NULL) {
+ /* Get the normal cmap anyway */
+ f->cmap = f->bitmap->colormap;
+ }
+
+ f->bitmap_matrix = *(matrix) * f->matrix;
+
+ f->bitmap_matrix = f->bitmap_matrix.invert();
+
+ m=&f->bitmap_matrix;
+ m->a = m->a * FRAC * 65536.0;
+ m->b = m->b * FRAC * 65536.0;
+ m->c = m->c * FRAC * 65536.0;
+ m->d = m->d * FRAC * 65536.0;
+ m->tx = (long) (m->tx * 65536.0);
+ m->ty = (long) (m->ty * 65536.0);
+
+ f->alpha_table = NULL;
+
+ if (f->bitmap->alpha_buf && cxform) {
+ unsigned char *alpha_table;
+ int i;
+
+ alpha_table = (unsigned char *)malloc (256);
+ if (alpha_table != NULL) {
+ for(i=0;i<256;i++) {
+ alpha_table[i] = cxform->getAlpha(i);
+ }
+ }
+ f->alpha_table = alpha_table;
+ }
+ }
+ break;
+ }
+ }
+}
+
+static void
+clearStyles(GraphicDevice *gd, FillStyleDef *ftab, long n)
+{
+ long fs;
+ FillStyleDef *f;
+
+ for(fs = 0; fs < n; fs++)
+ {
+ f = ftab + fs;
+ switch (f->type)
+ {
+ case f_Solid:
+ break;
+ case f_LinearGradient:
+ case f_RadialGradient:
+ if (f->gradient.ramp) {
+ delete f->gradient.ramp;
+ }
+ break;
+ case f_TiledBitmap:
+ case f_clippedBitmap:
+ if (f->bitmap) {
+ if (f->cmap && f->cmap != f->bitmap->colormap) delete f->cmap;
+ if (f->alpha_table) free(f->alpha_table);
+ }
+ break;
+ case f_None:
+ break;
+ }
+ }
+}
+
diff --git a/core/multimedia/opieplayer/libflash/shape.h b/core/multimedia/opieplayer/libflash/shape.h
new file mode 100644
index 0000000..120ec94
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/shape.h
@@ -0,0 +1,181 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _SHAPE_H_
+#define _SHAPE_H_
+
+struct LineStyleDef {
+ long width;
+ Color color;
+ FillStyleDef fillstyle;
+};
+
+enum ShapeRecordType {
+ shapeNonEdge,
+ shapeCurve,
+ shapeLine
+};
+
+enum ShapeFlags {
+ flagsMoveTo = 0x01,
+ flagsFill0 = 0x02,
+ flagsFill1 = 0x04,
+ flagsLine = 0x08,
+ flagsNewStyles = 0x10,
+ flagsEndShape = 0x80
+};
+
+struct ShapeRecord {
+ ShapeRecordType type;
+
+ // Non Edge
+ ShapeFlags flags;
+ long x,y; // Moveto
+ long fillStyle0;
+ long fillStyle1;
+ long lineStyle;
+ FillStyleDef *newFillStyles; // Array
+ long nbNewFillStyles;
+ LineStyleDef *newLineStyles; // Array
+ long nbNewLineStyles;
+
+ // Curve Edge
+ long ctrlX, ctrlY;
+ long anchorX, anchorY;
+
+ // Straight Line
+ long dX,dY;
+
+ struct ShapeRecord *next;
+
+ ShapeRecord() {
+ shaperecord_size += sizeof(ShapeRecord);
+ shaperecord_nb++;
+ }
+
+};
+
+enum ShapeAction {
+ ShapeDraw,
+ ShapeGetRegion
+};
+
+struct LineSegment {
+ long x1,y1,x2,y2;
+ char first;
+ LineStyleDef *l;
+ struct LineSegment *next;
+};
+
+struct Path {
+ long lastX,lastY;
+ int nb_edges;
+ int nb_segments;
+};
+
+struct StyleList {
+ FillStyleDef *newFillStyles; // Array
+ long nbNewFillStyles;
+ LineStyleDef *newLineStyles; // Array
+ long nbNewLineStyles;
+
+ StyleList *next;
+};
+
+
+/* fast bit parser */
+struct BitParser {
+ // Bit Handling
+ S32 m_bitPos;
+ U32 m_bitBuf;
+
+ U8 *ptr;
+};
+
+class Shape;
+
+/* state of the shape parser */
+struct ShapeParser {
+ Dict *dict; /* XXX: should be put elsewhere */
+
+ BitParser bit_parser;
+ S32 m_nFillBits;
+ S32 m_nLineBits;
+
+ StyleList *style_list;
+ Matrix *matrix;
+ Path curPath;
+ int reverse;
+
+ /* line rasteriser */
+ LineSegment *first_line,*last_line;
+ GraphicDevice *gd;
+ Cxform *cxform;
+ Shape *shape;
+
+ FillStyleDef *f0;
+ FillStyleDef *f1;
+ LineStyleDef *l;
+};
+
+class Shape : public Character {
+ public:
+ int defLevel; // 1,2 or 3
+
+
+ Rect boundary;
+ FillStyleDef defaultFillStyle;
+ LineStyleDef defaultLineStyle;
+
+ Matrix lastMat;
+ /* parsing for the rendering stage (saves a lot of memory &
+ may not reduce significantly the size). These variables
+ should be in another structure (no state need to be
+ maintained between two renderings) */
+ int getAlpha, getStyles;
+ unsigned char *file_ptr;
+ Dict *dict; /* XXX: should be put elsewhere */
+
+protected:
+ void drawLines(GraphicDevice *gd, Matrix *matrix, Cxform *cxform, long, long);
+ void buildSegmentList(Segment **segs, int height, long &n, Matrix *matrix, int update, int reverse);
+ Segment *progressSegments(Segment *, long);
+ Segment *newSegments(Segment *, Segment *);
+
+public:
+ Shape(long id = 0 , int level = 1);
+ ~Shape();
+
+ void setBoundingBox(Rect rect);
+ int execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform);
+ void getRegion(GraphicDevice *gd, Matrix *matrix,
+ void *id, ScanLineFunc scan_line_func);
+
+ void getBoundingBox(Rect *bb, DisplayListEntry *);
+
+#ifdef DUMP
+ void dump(BitStream *bs);
+ void dumpShapeRecords(BitStream *bs, int alpha);
+ void dumpFillStyles(BitStream *bs, FillStyleDef *defs, long n, int alpha);
+ void dumpLineStyles(BitStream *bs, LineStyleDef *defs, long n, int alpha);
+ void checkBitmaps(BitStream *bs);
+#endif
+};
+
+#endif /* _SHAPE_H_ */
diff --git a/core/multimedia/opieplayer/libflash/sound.cc b/core/multimedia/opieplayer/libflash/sound.cc
new file mode 100644
index 0000000..e93f9b5
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/sound.cc
@@ -0,0 +1,439 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#ifndef NOSOUND
+#include <linux/soundcard.h>
+#endif
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+#define PRINT 0
+
+//////////// SOUND
+
+Sound::Sound(long id) : Character(SoundType, id)
+{
+ samples = 0;
+ stereo = 0;
+ soundRate = 0;
+ sampleSize = 1;
+}
+
+Sound::~Sound()
+{
+ if (samples) {
+ delete samples;
+ }
+}
+
+void
+Sound::setSoundFlags(long f) {
+ switch (GET_SOUND_RATE_CODE(f)) {
+ case 0:
+ soundRate = 5500;
+ break;
+ case 1:
+ soundRate = 11000;
+ break;
+ case 2:
+ soundRate = 22000;
+ break;
+ case 3:
+ soundRate = 44000;
+ break;
+ }
+ if (f & soundIs16bit) {
+ sampleSize = 2;
+ }
+ if (f & soundIsStereo) {
+ stereo = 1;
+ }
+
+#if PRINT
+ printf("-----\nFlags = %2x\n", f);
+ printf("Rate = %d kHz ", soundRate);
+ printf("SampleSize = %d byte(s) ", sampleSize);
+ if (f & soundIsStereo) {
+ printf("Stereo ");
+ } else {
+ printf("Mono ");
+ }
+ if (f & soundIsADPCMCompressed) {
+ printf("ADPCM\n");
+ } else {
+ printf("Raw\n");
+ }
+#endif
+}
+
+char *
+Sound::setNbSamples(long n) {
+ long size;
+
+ nbSamples = n;
+
+ size = nbSamples * (stereo ? 2 : 1) * sampleSize;
+
+ samples = new char[ size ];
+
+ memset((char *)samples,0, size);
+
+ return samples;
+}
+
+long
+Sound::getRate() {
+ return soundRate;
+}
+
+long
+Sound::getChannel() {
+ return stereo ? 2 : 1;
+}
+
+long
+Sound::getNbSamples() {
+ return nbSamples;
+}
+
+long
+Sound::getSampleSize() {
+ return sampleSize;
+}
+
+char *
+Sound::getSamples() {
+ return samples;
+}
+
+//////////// SOUND MIXER
+
+long SoundMixer::dsp = -1; // Init of descriptor
+long SoundMixer::blockSize = 0; // Driver sound buffer size
+long SoundMixer::nbInst = 0; // Nb SoundMixer instances
+long SoundMixer::sampleSize = 0;
+long SoundMixer::stereo = 0;
+long SoundMixer::soundRate = 0;
+char *SoundMixer::buffer = 0;
+
+SoundMixer::SoundMixer(char *device)
+{
+#ifndef NOSOUND
+ int status;
+ long fmt;
+
+ list = 0; // No sound to play
+
+ if (nbInst++) {
+ // Device is already open
+ return;
+ }
+
+ dsp = open(device,O_WRONLY);
+ if (dsp < 0) {
+ perror("open dsp");
+ return;
+ }
+
+ // Reset device
+ status = ioctl(dsp, SNDCTL_DSP_RESET);
+ if (status < 0) perror("ioctl SNDCTL_DSP_RESET");
+
+ // Set sample size
+ fmt = AFMT_S16_LE;
+ sampleSize = 2;
+ status = ioctl(dsp, SNDCTL_DSP_SETFMT, &fmt);
+ if (status < 0) perror("ioctl SNDCTL_DSP_SETFMT");
+
+ if (status) {
+ fmt = AFMT_U8;
+ sampleSize = 1;
+ status = ioctl(dsp, SNDCTL_DSP_SETFMT, &fmt);
+ if (status < 0) perror("ioctl SNDCTL_DSP_SETFMT");
+ }
+
+ // Set stereo channel
+ stereo = 1;
+ status = ioctl(dsp, SNDCTL_DSP_STEREO, &stereo);
+
+ if (status) {
+ stereo = 0;
+ }
+
+ // Set sound rate in Hertz
+ soundRate = 11000;
+ status = ioctl(dsp, SNDCTL_DSP_SPEED, &soundRate);
+ if (status < 0) perror("ioctl SNDCTL_DSP_SPEED");
+
+ // Get device buffer size
+ status = ioctl(dsp, SNDCTL_DSP_GETBLKSIZE, &blockSize);
+ if (status < 0) perror("ioctl SNDCTL_DSP_GETBLKSIZE");
+ if (blockSize < 1024) {
+ blockSize = 32768;
+ }
+ blockSize *= 2;
+
+ buffer = (char *)malloc(blockSize);
+ if (buffer == 0) {
+ close(dsp);
+ dsp = -1;
+ }
+
+#if PRINT
+ int caps;
+
+ ioctl(dsp,SNDCTL_DSP_GETCAPS, &caps);
+ printf("Audio capabilities = %x\n", caps);
+ printf("Sound Rate = %d\n", soundRate);
+ printf("Stereo = %d\n", stereo);
+ printf("Sample Size = %d\n", sampleSize);
+ printf("Buffer Size = %d\n", blockSize);
+#endif /* PRINT */
+
+#endif /* NOSOUND */
+}
+
+SoundMixer::~SoundMixer()
+{
+ if (--nbInst == 0) {
+ if (dsp > 0) {
+ close(dsp);
+ free(buffer);
+ }
+ }
+}
+
+void
+SoundMixer::stopSounds()
+{
+#ifndef NOSOUND
+ SoundList *sl,*del;
+
+ for(sl = list; sl; ) {
+ del = sl;
+ sl = sl->next;
+ delete del;
+ }
+ list = 0;
+#endif
+}
+
+void
+SoundMixer::startSound(Sound *sound)
+{
+#ifndef NOSOUND
+ SoundList *sl;
+
+ if (sound) {
+ // Add sound in list
+ sl = new SoundList;
+ sl->rate = sound->getRate();
+ sl->stereo = (sound->getChannel() == 2);
+ sl->sampleSize = sound->getSampleSize();
+ sl->current = sound->getSamples();
+ sl->remaining = sound->getSampleSize()*sound->getNbSamples()*sound->getChannel();
+ sl->next = list;
+ list = sl;
+ }
+#endif
+}
+
+long
+SoundMixer::playSounds()
+{
+#ifndef NOSOUND
+ audio_buf_info bufInfo;
+ long nbBytes, n;
+ SoundList *sl,*prev;
+ int status;
+
+ // Init failed
+ if (dsp < 0) return 0;
+
+ // No sound to play
+ if (list == 0) return 0;
+
+ // Get free DMA buffer space
+ status = ioctl(dsp, SNDCTL_DSP_GETOSPACE, &bufInfo);
+
+ // Free space is not large enough to output data without blocking
+ // But there are still sounds to play. We must wait.
+ if (bufInfo.bytes < blockSize) return 1;
+
+ nbBytes = 0;
+
+ // Fill buffer with silence.
+ memset((void*)buffer, 0, blockSize);
+
+ prev = 0;
+ sl = list;
+ while(sl) {
+
+ // Ask sound to fill the buffer
+ // according to device capabilities
+ n = fillSoundBuffer(sl, buffer, blockSize);
+
+ // Remember the largest written size
+ if (n > nbBytes) {
+ nbBytes = n;
+ }
+
+ // No more samples for this sound
+ if (sl->remaining == 0) {
+ // Remove sound from list
+ if (prev) {
+ prev->next = sl->next;
+ delete sl;
+ sl = prev->next;
+ } else {
+ list = sl->next;
+ delete sl;
+ sl = list;
+ }
+ } else {
+ sl = sl->next;
+ }
+ }
+
+ if (nbBytes) {
+ // At last ! Play It !
+ write(dsp,buffer,nbBytes);
+ status = ioctl(dsp, SNDCTL_DSP_POST);
+ }
+
+ return nbBytes;
+#else
+ return 0;
+#endif
+}
+
+long
+SoundMixer::fillSoundBuffer(SoundList *sl, char *buff, long buffSize)
+{
+ long sampleLeft, sampleRight;
+ long skipOut, skipOutInit;
+ long skipIn, skipInInit;
+ long freqRatio;
+ long totalOut = 0;
+
+ sampleLeft = sampleRight = 0;
+ skipOutInit = skipInInit = 0;
+
+ freqRatio = sl->rate / soundRate;
+ if (freqRatio) {
+ skipOutInit = freqRatio - 1;
+ skipInInit = 0;
+ }
+
+ freqRatio = soundRate / sl->rate;
+ if (freqRatio) {
+ skipInInit = freqRatio - 1;
+ skipOutInit = 0;
+ }
+
+ skipOut = skipOutInit;
+ skipIn = skipInInit;
+ while (buffSize && sl->remaining) {
+ if (skipIn-- == 0) {
+ // Get sampleLeft
+ if (sl->sampleSize == 2) {
+ sampleLeft = (long)(*(short *)(sl->current));
+ if (sampleSize == 1) {
+ sampleLeft = (sampleLeft >> 8) &0xff;
+ }
+ } else {
+ sampleLeft = (long)*(sl->current);
+ if (sampleSize == 2) {
+ sampleLeft <<= 8;
+ }
+ }
+ sl->current += sl->sampleSize;
+ sl->remaining -= sl->sampleSize;
+
+ if (sl->stereo) {
+ // Get sampleRight
+ if (sl->sampleSize == 2) {
+ sampleRight = (long)(*(short *)(sl->current));
+ if (sampleSize == 1) {
+ sampleRight = (sampleRight >> 8) &0xff;
+ }
+ } else {
+ sampleRight = (long)*(sl->current);
+ if (sampleSize == 2) {
+ sampleRight <<= 8;
+ }
+ }
+ sl->current += sl->sampleSize;
+ sl->remaining -= sl->sampleSize;
+
+ } else {
+ sampleRight = sampleLeft;
+ }
+
+ skipIn = skipInInit;
+ }
+
+ if (skipOut-- == 0) {
+ // Output
+ if (stereo) {
+ if (sampleSize == 2) {
+ *((short *)buff) += sampleLeft/2;
+ buffSize -= sampleSize;
+ buff += sampleSize;
+ *((short *)buff) += sampleRight/2;
+ buffSize -= sampleSize;
+ buff += sampleSize;
+ } else {
+ *((char *)buff) += sampleLeft/2;
+ buffSize -= sampleSize;
+ buff += sampleSize;
+ *((char *)buff) += sampleRight/2;
+ buffSize -= sampleSize;
+ buff += sampleSize;
+ }
+ totalOut += 2*sampleSize;
+ } else {
+ if (sampleSize == 2) {
+ *((short *)buff) += (sampleLeft+sampleRight)>>2;
+ buffSize -= sampleSize;
+ buff += sampleSize;
+ } else {
+ *((char *)buff) += (sampleLeft+sampleRight)>>2;
+ buffSize -= sampleSize;
+ buff += sampleSize;
+ }
+ totalOut += sampleSize;
+ }
+
+ skipOut = skipOutInit;
+ }
+ }
+
+ return totalOut;
+}
diff --git a/core/multimedia/opieplayer/libflash/sound.h b/core/multimedia/opieplayer/libflash/sound.h
new file mode 100644
index 0000000..c53773d
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/sound.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _SOUND_H_
+#define _SOUND_H_
+
+#define GET_SOUND_RATE_CODE(f) (((f)&0x0c)>>2)
+
+class Sound : public Character {
+ long soundRate; // In hz
+ long stereo; // True if stereo sound
+ long sampleSize; // 1 or 2 bytes
+
+ char *samples; // Array of samples
+ long nbSamples;
+
+public:
+ Sound(long id);
+ ~Sound();
+ void setSoundFlags(long f);
+ char *setNbSamples(long n);
+
+ long getRate();
+ long getChannel();
+ long getNbSamples();
+ long getSampleSize();
+ char *getSamples();
+};
+
+struct SoundList {
+ long rate;
+ long stereo;
+ long sampleSize;
+ long nbSamples;
+ long remaining;
+ char *current;
+
+ SoundList *next;
+};
+
+class SoundMixer {
+
+ SoundList *list;
+
+// Class variables
+static long dsp; // Descriptor for /dev/dsp
+static char * buffer; // DMA buffer
+static long blockSize;
+static long nbInst; // Number of instances
+
+ // Sound Device Capabilities
+static long soundRate; // In hz
+static long stereo; // True if stereo sound
+static long sampleSize; // 1 or 2 bytes
+
+public:
+ SoundMixer(char*);
+ ~SoundMixer();
+
+ void startSound(Sound *sound); // Register a sound to be played
+ void stopSounds(); // Stop every current sounds in the instance
+
+ long playSounds(); // Actually play sounds of all instances
+ long fillSoundBuffer(SoundList *, char *buffer, long bufferSize); // Fill sound buffer
+};
+
+#endif /* _SOUND_H_ */
diff --git a/core/multimedia/opieplayer/libflash/sprite.cc b/core/multimedia/opieplayer/libflash/sprite.cc
new file mode 100644
index 0000000..de53095
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/sprite.cc
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+Sprite::Sprite(FlashMovie *movie, long id, long frameCount) : Character(SpriteType, id)
+{
+ program = new Program(movie, frameCount);
+ if (program == NULL) return;
+ if (program->totalFrames == 0) {
+ delete program;
+ program = NULL;
+ return;
+ }
+ program->dl->isSprite = 1;
+}
+
+Sprite::~Sprite()
+{
+ delete program;
+}
+
+void
+Sprite::reset()
+{
+ program->rewindMovie();
+}
+
+int
+Sprite::isSprite(void)
+{
+ return 1;
+}
+
+Program *
+Sprite::getProgram()
+{
+ return program;
+}
+
+int
+Sprite::execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform)
+{
+ return program->dl->render(gd,matrix,cxform);
+}
+
+ActionRecord *
+Sprite::eventHandler(GraphicDevice *gd, FlashEvent *event)
+{
+#if 0
+ DisplayList *dl;
+ ActionRecord *actions;
+
+ dl = program->getDisplayList();
+ actions = dl->processEvent(gd, event);
+ if (actions) {
+ program->doAction(actions,0);
+ }
+ return actions;
+#endif
+ return NULL;
+}
+
+void
+Sprite::getBoundingBox(Rect *bb, DisplayListEntry *e)
+{
+ program->dl->getBoundary(bb);
+}
diff --git a/core/multimedia/opieplayer/libflash/sprite.h b/core/multimedia/opieplayer/libflash/sprite.h
new file mode 100644
index 0000000..2ea64bc
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/sprite.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _SPRITE_H_
+#define _SPRITE_H_
+
+class Sprite : public Character {
+public:
+ Program *program;
+
+ Sprite(FlashMovie *movie, long id, long frameCount);
+ ~Sprite();
+ Program *getProgram();
+ int execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform);
+ int hasEventHandler();
+ void reset();
+ ActionRecord *eventHandler(GraphicDevice *, FlashEvent *);
+ int isSprite(void);
+ void getBoundingBox(Rect *bb, DisplayListEntry *de);
+};
+
+#endif /* _SPRITE_H_ */
diff --git a/core/multimedia/opieplayer/libflash/sqrt.cc b/core/multimedia/opieplayer/libflash/sqrt.cc
new file mode 100644
index 0000000..0d8295e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/sqrt.cc
@@ -0,0 +1,4099 @@
+unsigned char SQRT[] = {
+
+0,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,
+4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,
+5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,
+6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,
+10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,
+11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,
+13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,
+14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
+14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,
+18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,
+19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
+20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
+20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,
+21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
+21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
+21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,
+22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
+24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
+24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,
+24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
+25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
+25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,
+25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,
+26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
+26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
+26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,
+27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
+27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
+27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,
+28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
+28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
+28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,
+28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,
+29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
+29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
+29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
+29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
+30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,
+30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,
+33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,
+33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,
+33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,
+33,33,33,33,34,34,34,34,34,34,34,34,34,34,34,34,
+34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
+34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
+34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
+34,34,34,34,34,34,34,34,34,35,35,35,35,35,35,35,
+35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,
+35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,
+35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,
+35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,
+36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,
+36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,
+36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,
+36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,
+36,36,36,36,36,36,36,36,36,37,37,37,37,37,37,37,
+37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
+37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
+37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
+37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,
+37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,38,
+38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
+38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
+38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
+38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,
+38,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
+39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
+39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
+39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
+39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,
+40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,
+40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,
+40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,
+40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,
+40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,
+40,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
+41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
+41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
+41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
+41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,
+41,41,41,41,42,42,42,42,42,42,42,42,42,42,42,42,
+42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,
+42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,
+42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,
+42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,
+42,42,42,42,42,42,42,42,42,43,43,43,43,43,43,43,
+43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,
+43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,
+43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,
+43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,
+43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,
+44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,
+44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,
+44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,
+44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,
+44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,
+44,44,44,44,44,44,44,44,44,45,45,45,45,45,45,45,
+45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,
+45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,
+45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,
+45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,
+45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,
+45,45,45,45,46,46,46,46,46,46,46,46,46,46,46,46,
+46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
+46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
+46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
+46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
+46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,
+46,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,
+47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,
+47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,
+47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,
+47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,
+47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,
+48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
+48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
+48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
+48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
+48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
+48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,
+48,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,
+49,49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,
+50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,
+50,50,50,50,50,50,50,50,50,51,51,51,51,51,51,51,
+51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,
+51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,
+51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,
+51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,
+51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,
+51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,
+52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,
+52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,
+52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,
+52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,
+52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,
+52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,
+52,52,52,52,52,52,52,52,52,53,53,53,53,53,53,53,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,
+53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,
+53,53,53,53,54,54,54,54,54,54,54,54,54,54,54,54,
+54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,
+54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,
+54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,
+54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,
+54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,
+54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,
+54,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
+55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
+55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
+55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
+55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
+55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
+55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,
+56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,
+56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,
+56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,
+56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,
+56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,
+56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,
+56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,
+56,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
+57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
+57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
+57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
+57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
+57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
+57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,
+57,57,57,57,58,58,58,58,58,58,58,58,58,58,58,58,
+58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
+58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
+58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
+58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
+58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
+58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,
+58,58,58,58,58,58,58,58,58,59,59,59,59,59,59,59,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,
+60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
+60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
+60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
+60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
+60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
+60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
+60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,
+60,60,60,60,60,60,60,60,60,61,61,61,61,61,61,61,
+61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
+61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
+61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
+61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
+61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
+61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
+61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,
+61,61,61,61,62,62,62,62,62,62,62,62,62,62,62,62,
+62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,
+62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,
+62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,
+62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,
+62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,
+62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,
+62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,
+62,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
+64,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,
+65,65,65,65,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,
+66,66,66,66,66,66,66,66,66,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,
+68,68,68,68,68,68,68,68,68,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,
+69,69,69,69,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
+70,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,
+72,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,
+73,73,73,73,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,
+74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,
+76,76,76,76,76,76,76,76,76,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,
+77,77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,
+78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,
+80,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,
+81,81,81,81,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,
+82,82,82,82,82,82,82,82,82,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,
+84,84,84,84,84,84,84,84,84,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,
+85,85,85,85,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,
+86,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
+88,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,
+89,89,89,89,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,
+90,90,90,90,90,90,90,90,90,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,
+92,92,92,92,92,92,92,92,92,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,
+93,93,93,93,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,
+94,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,
+96,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,
+97,97,97,97,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,
+98,98,98,98,98,98,98,98,98,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,
+100,100,100,100,100,100,100,100,100,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
+101,101,101,101,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
+102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
+104,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,
+105,105,105,105,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
+106,106,106,106,106,106,106,106,106,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,
+108,108,108,108,108,108,108,108,108,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
+109,109,109,109,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,
+112,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,
+114,114,114,114,114,114,114,114,114,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
+116,116,116,116,116,116,116,116,116,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
+117,117,117,117,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,
+118,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
+121,121,121,121,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
+122,122,122,122,122,122,122,122,122,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
+124,124,124,124,124,124,124,124,124,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
+125,125,125,125,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,
+126,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+128,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,
+129,129,129,129,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,
+130,130,130,130,130,130,130,130,130,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,
+132,132,132,132,132,132,132,132,132,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
+133,133,133,133,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
+134,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
+136,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,
+137,137,137,137,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,
+138,138,138,138,138,138,138,138,138,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
+140,140,140,140,140,140,140,140,140,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
+141,141,141,141,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
+142,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,
+144,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,
+145,145,145,145,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,
+146,146,146,146,146,146,146,146,146,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
+148,148,148,148,148,148,148,148,148,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
+149,149,149,149,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
+150,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,
+152,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,
+153,153,153,153,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,
+154,154,154,154,154,154,154,154,154,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,
+156,156,156,156,156,156,156,156,156,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
+157,157,157,157,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
+158,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
+160,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
+161,161,161,161,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,
+162,162,162,162,162,162,162,162,162,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
+164,164,164,164,164,164,164,164,164,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,
+165,165,165,165,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,
+166,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
+168,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
+169,169,169,169,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
+170,170,170,170,170,170,170,170,170,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
+172,172,172,172,172,172,172,172,172,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
+173,173,173,173,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,
+174,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,
+176,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,
+177,177,177,177,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,
+178,178,178,178,178,178,178,178,178,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,
+180,180,180,180,180,180,180,180,180,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,
+181,181,181,181,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
+182,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
+184,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
+185,185,185,185,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
+186,186,186,186,186,186,186,186,186,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
+188,188,188,188,188,188,188,188,188,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
+189,189,189,189,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
+190,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
+192,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,
+193,193,193,193,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,
+194,194,194,194,194,194,194,194,194,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,
+196,196,196,196,196,196,196,196,196,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,
+197,197,197,197,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,
+198,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,
+200,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,
+201,201,201,201,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,
+202,202,202,202,202,202,202,202,202,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,
+204,204,204,204,204,204,204,204,204,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,
+205,205,205,205,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,
+206,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
+208,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,
+209,209,209,209,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,
+210,210,210,210,210,210,210,210,210,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,
+212,212,212,212,212,212,212,212,212,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,
+213,213,213,213,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,
+214,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,
+216,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,
+217,217,217,217,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,
+218,218,218,218,218,218,218,218,218,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,
+220,220,220,220,220,220,220,220,220,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+221,221,221,221,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
+222,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+224,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,
+226,226,226,226,226,226,226,226,226,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,
+228,228,228,228,228,228,228,228,228,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,
+229,229,229,229,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,
+230,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,
+232,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+233,233,233,233,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
+234,234,234,234,234,234,234,234,234,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,
+237,237,237,237,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
+238,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
+241,241,241,241,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
+242,242,242,242,242,242,242,242,242,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
+244,244,244,244,244,244,244,244,244,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
+246,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
+248,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
+250,250,250,250,250,250,250,250,250,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,
+254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+};
diff --git a/core/multimedia/opieplayer/libflash/swf.h b/core/multimedia/opieplayer/libflash/swf.h
new file mode 100644
index 0000000..5f5e4f7
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/swf.h
@@ -0,0 +1,229 @@
+#ifndef _SWF_H_
+#define _SWF_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <setjmp.h>
+#include <assert.h>
+#include <limits.h>
+
+#ifdef DUMP
+#include "bitstream.h"
+#endif
+
+#include "flash.h"
+
+extern int debug;
+
+// Global Types
+typedef unsigned long U32, *P_U32, **PP_U32;
+typedef signed long S32, *P_S32, **PP_S32;
+typedef unsigned short U16, *P_U16, **PP_U16;
+typedef signed short S16, *P_S16, **PP_S16;
+typedef unsigned char U8, *P_U8, **PP_U8;
+typedef signed char S8, *P_S8, **PP_S8;
+typedef signed long SFIXED, *P_SFIXED;
+typedef signed long SCOORD, *P_SCOORD;
+typedef unsigned long BOOL;
+
+#define ZOOM(v,f) ((v)/(f))
+
+#include "matrix.h"
+#include "cxform.h"
+#include "rect.h"
+
+#include <sys/time.h>
+#define ST struct timeval t1,t2;
+#define START gettimeofday(&t1,0)
+#define STOP(msg) gettimeofday(&t2,0); printf("%s Delta = %d ms\n", msg, (t2.tv_sec-t1.tv_sec)*1000+(t2.tv_usec-t1.tv_usec)/1000); fflush(stdout);
+
+// Start Sound Flags
+enum {
+ soundHasInPoint = 0x01,
+ soundHasOutPoint = 0x02,
+ soundHasLoops = 0x04,
+ soundHasEnvelope = 0x08
+
+ // the upper 4 bits are reserved for synchronization flags
+};
+
+// Flags for Sound Format
+enum SounfFlags {
+ soundIsStereo = 0x01,
+ soundIs16bit = 0x02,
+ soundIsADPCMCompressed = 0x10
+};
+
+// Flags for defining Button States
+enum ButtonState {
+ stateHitTest = 0x08,
+ stateDown = 0x04,
+ stateOver = 0x02,
+ stateUp = 0x01
+};
+
+// Actions
+enum Action {
+ // Internal actions
+ ActionRefresh = 0x00,
+ ActionPlaySound = 0x01,
+ // Normal actions
+ ActionGotoFrame = 0x81,
+ ActionGetURL = 0x83,
+ ActionNextFrame = 0x04,
+ ActionPrevFrame = 0x05,
+ ActionPlay = 0x06,
+ ActionStop = 0x07,
+ ActionToggleQuality = 0x08,
+ ActionStopSounds = 0x09,
+ ActionWaitForFrame = 0x8a,
+ ActionSetTarget = 0x8b,
+ ActionGoToLabel = 0x8c
+};
+
+class Sound;
+
+struct ActionRecord {
+ Action action;
+
+ // GotoFrame & WaitForFrame
+ long frameIndex;
+
+ // GetURL
+ char *url;
+ char *target;
+
+ // GotoLabel
+ char *frameLabel;
+
+ // WaitForFrame
+ long skipCount;
+
+ // Sound
+ Sound *sound;
+
+ struct ActionRecord *next;
+
+ ActionRecord() {
+ frameLabel = 0;
+ url = 0;
+ target = 0;
+ sound = 0;
+ };
+
+ ~ActionRecord() {
+ if (frameLabel) free(frameLabel);
+ if (url) free(url);
+ if (target) free(target);
+ };
+};
+
+enum FontFlags {
+ fontUnicode = 0x20,
+ fontShiftJIS = 0x10,
+ fontANSI = 0x08,
+ fontItalic = 0x04,
+ fontBold = 0x02,
+ fontWideCodes = 0x01
+};
+
+enum TextFlags {
+ isTextControl = 0x80,
+
+ textIsLarge = 0x70,
+ textHasFont = 0x08,
+ textHasColor = 0x04,
+ textHasYOffset= 0x02,
+ textHasXOffset= 0x01
+};
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+// Tag values that represent actions or data in a Flash script.
+enum
+{
+ stagEnd = 0,
+ stagShowFrame = 1,
+ stagDefineShape = 2,
+ stagFreeCharacter = 3,
+ stagPlaceObject = 4,
+ stagRemoveObject = 5,
+ stagDefineBits = 6,
+ stagDefineButton = 7,
+ stagJPEGTables = 8,
+ stagSetBackgroundColor = 9,
+ stagDefineFont = 10,
+ stagDefineText = 11,
+ stagDoAction = 12,
+ stagDefineFontInfo = 13,
+ stagDefineSound = 14, // Event sound tags.
+ stagStartSound = 15,
+ stagStopSound = 16,
+ stagDefineButtonSound = 17,
+ stagSoundStreamHead = 18,
+ stagSoundStreamBlock = 19,
+ stagDefineBitsLossless = 20, // A bitmap using lossless zlib compression.
+ stagDefineBitsJPEG2 = 21, // A bitmap using an internal JPEG compression table.
+ stagDefineShape2 = 22,
+ stagDefineButtonCxform = 23,
+ stagProtect = 24, // This file should not be importable for editing.
+
+ // These are the new tags for Flash 3.
+ stagPlaceObject2 = 26, // The new style place w/ alpha color transform and name.
+ stagRemoveObject2 = 28, // A more compact remove object that omits the character tag (just depth).
+ stagDefineShape3 = 32, // A shape V3 includes alpha values.
+ stagDefineText2 = 33, // A text V2 includes alpha values.
+ stagDefineButton2 = 34, // A button V2 includes color transform, alpha and multiple actions
+ stagDefineBitsJPEG3 = 35, // A JPEG bitmap with alpha info.
+ stagDefineBitsLossless2 = 36, // A lossless bitmap with alpha info.
+ stagDefineSprite = 39, // Define a sequence of tags that describe the behavior of a sprite.
+ stagNameCharacter = 40, // Name a character definition, character id and a string, (used for buttons, bitmaps, sprites and sounds).
+ stagFrameLabel = 43, // A string label for the current frame.
+ stagSoundStreamHead2 = 45, // For lossless streaming sound, should not have needed this...
+ stagDefineMorphShape = 46, // A morph shape definition
+ stagDefineFont2 = 48,
+
+ notEnoughData = 0xffff, // Special code
+};
+
+#ifndef false
+#define false 0
+#endif
+#ifndef true
+#define true 1
+#endif
+
+extern int shape_size,shape_nb,shaperecord_size,shaperecord_nb,style_size,style_nb;
+
+typedef void (*ScanLineFunc)(void *id, long y, long start, long end);
+
+class Bitmap;
+struct FlashMovie;
+
+extern "C" {
+#include "jpeglib.h"
+};
+extern "C" {
+//#include "zlib.h"
+#include "../src/3rdparty/zlib/zlib.h"
+};
+
+#include "graphic.h"
+#include "character.h"
+#include "bitmap.h"
+#include "shape.h"
+#include "displaylist.h"
+#include "sound.h"
+#include "button.h"
+#include "font.h"
+#include "text.h"
+#include "adpcm.h"
+#include "program.h"
+#include "sprite.h"
+#include "script.h"
+#include "movie.h"
+
+#endif /* _SWF_H_ */
diff --git a/core/multimedia/opieplayer/libflash/text.cc b/core/multimedia/opieplayer/libflash/text.cc
new file mode 100644
index 0000000..1b6cb5e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/text.cc
@@ -0,0 +1,246 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+// Author : Olivier Debon <odebon@club-internet.fr>
+//
+
+#include "swf.h"
+
+#ifdef RCSID
+static char *rcsid = "$Id$";
+#endif
+
+Text::Text(long id) : Character(TextType, id)
+{
+ textRecords = 0;
+}
+
+Text::~Text()
+{
+ TextRecord *cur,*del;
+
+ for(cur = textRecords; cur;)
+ {
+ del = cur;
+ cur = cur->next;
+ delete del;
+ }
+}
+
+void
+Text::setTextBoundary(Rect rect)
+{
+ boundary = rect;
+}
+
+void
+Text::setTextMatrix(Matrix m)
+{
+ textMatrix = m;
+}
+
+void
+Text::addTextRecord(TextRecord *tr)
+{
+ SwfFont *font = 0;
+ long n;
+
+ tr->next = 0;
+
+ if (textRecords == 0) {
+ textRecords = tr;
+ font = tr->font;
+ } else {
+ TextRecord *current;
+ long fontHeight = 0;
+
+ for(current = textRecords; current->next; current = current->next) {
+ if (current->flags & textHasFont) {
+ font = current->font;
+ fontHeight = current->fontHeight;
+ }
+ }
+
+ current->next = tr;
+ if (current->flags & textHasFont) {
+ font = current->font;
+ fontHeight = current->fontHeight;
+ }
+
+ if (tr->flags & textHasFont) {
+ font = tr->font;
+ } else {
+ tr->font = font;
+ tr->fontHeight = fontHeight;
+ }
+ }
+
+ if (tr->nbGlyphs) {
+ for(n=0; n < tr->nbGlyphs; n++) {
+ tr->glyphs[n].code = font->getGlyphCode(tr->glyphs[n].index);
+ }
+ }
+}
+
+int
+Text::execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform)
+{
+ return doText(gd, matrix, cxform, ShapeDraw, NULL, NULL);
+}
+
+void
+Text::getRegion(GraphicDevice *gd, Matrix *matrix,
+ void *id, ScanLineFunc scan_line_func)
+{
+ doText(gd, matrix, 0, ShapeGetRegion, id, scan_line_func);
+}
+
+void
+Text::getBoundingBox(Rect *bb, DisplayListEntry *e)
+{
+ *bb = boundary;
+}
+
+TextRecord *
+Text::getTextRecords()
+{
+ return textRecords;
+}
+
+int
+Text::doText(GraphicDevice *gd, Matrix *matrix, Cxform *cxform, ShapeAction action,
+ void *id, ScanLineFunc scan_line_func)
+{
+ TextRecord *tr;
+ long x,y; // Current position
+ SwfFont *font = 0; // Current font
+ long fontHeight;
+ Matrix tmat,fmat;
+ long g;
+
+ x = y = 0;
+ fontHeight = 0;
+
+ // Compute final text matrix
+ tmat = (*matrix) * textMatrix;
+
+ for(tr = textRecords; tr; tr = tr ->next)
+ {
+ if (tr->flags & isTextControl) {
+ if (tr->flags & textHasXOffset) {
+ x = tr->xOffset;
+ }
+ if (tr->flags & textHasYOffset) {
+ y = tr->yOffset;
+ }
+ if (tr->flags & textHasColor) {
+ if (action == ShapeDraw) {
+ if (cxform) {
+ gd->setForegroundColor(cxform->getColor(tr->color));
+ } else {
+ gd->setForegroundColor(tr->color);
+ }
+ }
+ }
+ }
+
+ font = tr->font;
+ fontHeight = tr->fontHeight;
+ // Update font matrix
+ fmat.a = fontHeight/1000.0;
+ fmat.d = fontHeight/1000.0;
+
+ assert(font != 0);
+ for (g = 0; g < tr->nbGlyphs; g++)
+ {
+ Shape *shape;
+ Matrix cmat;
+
+ shape = font->getGlyph( tr->glyphs[g].index );
+
+#ifdef PRINT
+ printf("%c", font->getGlyphCode(tr->glyphs[g].index));
+#endif
+
+ // Update font matrix
+ fmat.tx = x;
+ fmat.ty = y;
+
+ // Compute Character matrix
+ cmat = tmat * fmat;
+
+ if (action == ShapeDraw) {
+ shape->execute(gd, &cmat, cxform);
+ } else {
+ shape->getRegion(gd, &cmat, id, scan_line_func);
+ }
+
+ // Advance
+ x += tr->glyphs[g].xAdvance;
+ }
+#ifdef PRINT
+ printf("\n");
+#endif
+ }
+
+ if (gd->showMore) {
+ tmat = (*gd->adjust) * (*matrix);
+
+ long x1,x2,y1,y2;
+
+ x1 = boundary.xmin;
+ y1 = boundary.ymin;
+ x2 = boundary.xmax;
+ y2 = boundary.ymax;
+ gd->drawLine(tmat.getX(x1,y1),tmat.getY(x1,y1),tmat.getX(x2,y1),tmat.getY(x2,y1),FRAC);
+ gd->drawLine(tmat.getX(x2,y1),tmat.getY(x2,y1),tmat.getX(x2,y2),tmat.getY(x2,y2),FRAC);
+ gd->drawLine(tmat.getX(x2,y2),tmat.getY(x2,y2),tmat.getX(x1,y2),tmat.getY(x1,y2),FRAC);
+ gd->drawLine(tmat.getX(x1,y2),tmat.getY(x1,y2),tmat.getX(x1,y1),tmat.getY(x1,y1),FRAC);
+ }
+
+ return 0;
+}
+
+////////// TextRecord Methods
+TextRecord::TextRecord() {
+ flags = (TextFlags)0;
+ font = 0;
+ fontHeight = 0;
+ nbGlyphs = 0;
+ glyphs = 0;
+ xOffset = 0;
+ yOffset = 0;
+}
+
+TextRecord::~TextRecord() {
+ if (nbGlyphs) delete glyphs;
+}
+
+char *
+TextRecord::getText() {
+ static char text[256];
+ long g;
+
+ for(g=0; g < nbGlyphs; g++) {
+ text[g] = glyphs[g].code;
+ }
+ text[g] = 0;
+
+ return text;
+}
diff --git a/core/multimedia/opieplayer/libflash/text.h b/core/multimedia/opieplayer/libflash/text.h
new file mode 100644
index 0000000..1ba7b74
--- a/dev/null
+++ b/core/multimedia/opieplayer/libflash/text.h
@@ -0,0 +1,77 @@
+/////////////////////////////////////////////////////////////
+// Flash Plugin and Player
+// Copyright (C) 1998,1999 Olivier Debon
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////
+#ifndef _TEXT_H_
+#define _TEXT_H_
+
+struct Glyph {
+ long index;
+ long xAdvance;
+ long code; // Ascii code
+};
+
+struct TextRecord {
+
+ // Normal text record
+ Glyph *glyphs;
+ long nbGlyphs;
+
+ // Control text record
+ TextFlags flags;
+ SwfFont *font;
+ long fontHeight;
+ Color color;
+ long xOffset;
+ long yOffset;
+
+ TextRecord *next;
+
+ TextRecord();
+ ~TextRecord();
+
+ char *getText();
+};
+
+class Text : public Character {
+
+ Rect boundary;
+ Matrix textMatrix;
+ TextRecord *textRecords; // List
+
+public:
+ Text(long id);
+ ~Text();
+
+ void setTextBoundary(Rect rect);
+ void setTextMatrix(Matrix m);
+ void addTextRecord(TextRecord *tr);
+ int execute(GraphicDevice *gd, Matrix *matrix, Cxform *cxform);
+ void getRegion(GraphicDevice *gd, Matrix *matrix,
+ void *id, ScanLineFunc scan_line_func);
+ int doText(GraphicDevice *gd, Matrix *matrix, Cxform *cxform, ShapeAction action,
+ void *id, ScanLineFunc scan_line_func);
+ void getBoundingBox(Rect *bb, DisplayListEntry *e);
+ TextRecord *getTextRecords();
+
+#ifdef DUMP
+ void dump(BitStream *bs);
+#endif
+};
+
+#endif /* _TEXT_H_ */
diff --git a/core/multimedia/opieplayer/libmad/.cvsignore b/core/multimedia/opieplayer/libmad/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/core/multimedia/opieplayer/libmad/D.dat b/core/multimedia/opieplayer/libmad/D.dat
new file mode 100644
index 0000000..f33d30c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/D.dat
@@ -0,0 +1,607 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+/*
+ * These are the coefficients for the subband synthesis window. This is a
+ * reordered version of Table B.3 from ISO/IEC 11172-3.
+ *
+ * Every value is parameterized so that shift optimizations can be made at
+ * compile-time. For example, every value can be right-shifted 12 bits to
+ * minimize multiply instruction times without any loss of accuracy.
+ */
+
+ { PRESHIFT(0x00000000) /* 0.000000000 */, /* 0 */
+ -PRESHIFT(0x0001d000) /* -0.000442505 */,
+ PRESHIFT(0x000d5000) /* 0.003250122 */,
+ -PRESHIFT(0x001cb000) /* -0.007003784 */,
+ PRESHIFT(0x007f5000) /* 0.031082153 */,
+ -PRESHIFT(0x01421000) /* -0.078628540 */,
+ PRESHIFT(0x019ae000) /* 0.100311279 */,
+ -PRESHIFT(0x09271000) /* -0.572036743 */,
+ PRESHIFT(0x1251e000) /* 1.144989014 */,
+ PRESHIFT(0x09271000) /* 0.572036743 */,
+ PRESHIFT(0x019ae000) /* 0.100311279 */,
+ PRESHIFT(0x01421000) /* 0.078628540 */,
+ PRESHIFT(0x007f5000) /* 0.031082153 */,
+ PRESHIFT(0x001cb000) /* 0.007003784 */,
+ PRESHIFT(0x000d5000) /* 0.003250122 */,
+ PRESHIFT(0x0001d000) /* 0.000442505 */,
+
+ PRESHIFT(0x00000000) /* 0.000000000 */,
+ -PRESHIFT(0x0001d000) /* -0.000442505 */,
+ PRESHIFT(0x000d5000) /* 0.003250122 */,
+ -PRESHIFT(0x001cb000) /* -0.007003784 */,
+ PRESHIFT(0x007f5000) /* 0.031082153 */,
+ -PRESHIFT(0x01421000) /* -0.078628540 */,
+ PRESHIFT(0x019ae000) /* 0.100311279 */,
+ -PRESHIFT(0x09271000) /* -0.572036743 */,
+ PRESHIFT(0x1251e000) /* 1.144989014 */,
+ PRESHIFT(0x09271000) /* 0.572036743 */,
+ PRESHIFT(0x019ae000) /* 0.100311279 */,
+ PRESHIFT(0x01421000) /* 0.078628540 */,
+ PRESHIFT(0x007f5000) /* 0.031082153 */,
+ PRESHIFT(0x001cb000) /* 0.007003784 */,
+ PRESHIFT(0x000d5000) /* 0.003250122 */,
+ PRESHIFT(0x0001d000) /* 0.000442505 */ },
+
+ { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 1 */
+ -PRESHIFT(0x0001f000) /* -0.000473022 */,
+ PRESHIFT(0x000da000) /* 0.003326416 */,
+ -PRESHIFT(0x00207000) /* -0.007919312 */,
+ PRESHIFT(0x007d0000) /* 0.030517578 */,
+ -PRESHIFT(0x0158d000) /* -0.084182739 */,
+ PRESHIFT(0x01747000) /* 0.090927124 */,
+ -PRESHIFT(0x099a8000) /* -0.600219727 */,
+ PRESHIFT(0x124f0000) /* 1.144287109 */,
+ PRESHIFT(0x08b38000) /* 0.543823242 */,
+ PRESHIFT(0x01bde000) /* 0.108856201 */,
+ PRESHIFT(0x012b4000) /* 0.073059082 */,
+ PRESHIFT(0x0080f000) /* 0.031478882 */,
+ PRESHIFT(0x00191000) /* 0.006118774 */,
+ PRESHIFT(0x000d0000) /* 0.003173828 */,
+ PRESHIFT(0x0001a000) /* 0.000396729 */,
+
+ -PRESHIFT(0x00001000) /* -0.000015259 */,
+ -PRESHIFT(0x0001f000) /* -0.000473022 */,
+ PRESHIFT(0x000da000) /* 0.003326416 */,
+ -PRESHIFT(0x00207000) /* -0.007919312 */,
+ PRESHIFT(0x007d0000) /* 0.030517578 */,
+ -PRESHIFT(0x0158d000) /* -0.084182739 */,
+ PRESHIFT(0x01747000) /* 0.090927124 */,
+ -PRESHIFT(0x099a8000) /* -0.600219727 */,
+ PRESHIFT(0x124f0000) /* 1.144287109 */,
+ PRESHIFT(0x08b38000) /* 0.543823242 */,
+ PRESHIFT(0x01bde000) /* 0.108856201 */,
+ PRESHIFT(0x012b4000) /* 0.073059082 */,
+ PRESHIFT(0x0080f000) /* 0.031478882 */,
+ PRESHIFT(0x00191000) /* 0.006118774 */,
+ PRESHIFT(0x000d0000) /* 0.003173828 */,
+ PRESHIFT(0x0001a000) /* 0.000396729 */ },
+
+ { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 2 */
+ -PRESHIFT(0x00023000) /* -0.000534058 */,
+ PRESHIFT(0x000de000) /* 0.003387451 */,
+ -PRESHIFT(0x00245000) /* -0.008865356 */,
+ PRESHIFT(0x007a0000) /* 0.029785156 */,
+ -PRESHIFT(0x016f7000) /* -0.089706421 */,
+ PRESHIFT(0x014a8000) /* 0.080688477 */,
+ -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
+ PRESHIFT(0x12468000) /* 1.142211914 */,
+ PRESHIFT(0x083ff000) /* 0.515609741 */,
+ PRESHIFT(0x01dd8000) /* 0.116577148 */,
+ PRESHIFT(0x01149000) /* 0.067520142 */,
+ PRESHIFT(0x00820000) /* 0.031738281 */,
+ PRESHIFT(0x0015b000) /* 0.005294800 */,
+ PRESHIFT(0x000ca000) /* 0.003082275 */,
+ PRESHIFT(0x00018000) /* 0.000366211 */,
+
+ -PRESHIFT(0x00001000) /* -0.000015259 */,
+ -PRESHIFT(0x00023000) /* -0.000534058 */,
+ PRESHIFT(0x000de000) /* 0.003387451 */,
+ -PRESHIFT(0x00245000) /* -0.008865356 */,
+ PRESHIFT(0x007a0000) /* 0.029785156 */,
+ -PRESHIFT(0x016f7000) /* -0.089706421 */,
+ PRESHIFT(0x014a8000) /* 0.080688477 */,
+ -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
+ PRESHIFT(0x12468000) /* 1.142211914 */,
+ PRESHIFT(0x083ff000) /* 0.515609741 */,
+ PRESHIFT(0x01dd8000) /* 0.116577148 */,
+ PRESHIFT(0x01149000) /* 0.067520142 */,
+ PRESHIFT(0x00820000) /* 0.031738281 */,
+ PRESHIFT(0x0015b000) /* 0.005294800 */,
+ PRESHIFT(0x000ca000) /* 0.003082275 */,
+ PRESHIFT(0x00018000) /* 0.000366211 */ },
+
+ { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 3 */
+ -PRESHIFT(0x00026000) /* -0.000579834 */,
+ PRESHIFT(0x000e1000) /* 0.003433228 */,
+ -PRESHIFT(0x00285000) /* -0.009841919 */,
+ PRESHIFT(0x00765000) /* 0.028884888 */,
+ -PRESHIFT(0x0185d000) /* -0.095169067 */,
+ PRESHIFT(0x011d1000) /* 0.069595337 */,
+ -PRESHIFT(0x0a7fe000) /* -0.656219482 */,
+ PRESHIFT(0x12386000) /* 1.138763428 */,
+ PRESHIFT(0x07ccb000) /* 0.487472534 */,
+ PRESHIFT(0x01f9c000) /* 0.123474121 */,
+ PRESHIFT(0x00fdf000) /* 0.061996460 */,
+ PRESHIFT(0x00827000) /* 0.031845093 */,
+ PRESHIFT(0x00126000) /* 0.004486084 */,
+ PRESHIFT(0x000c4000) /* 0.002990723 */,
+ PRESHIFT(0x00015000) /* 0.000320435 */,
+
+ -PRESHIFT(0x00001000) /* -0.000015259 */,
+ -PRESHIFT(0x00026000) /* -0.000579834 */,
+ PRESHIFT(0x000e1000) /* 0.003433228 */,
+ -PRESHIFT(0x00285000) /* -0.009841919 */,
+ PRESHIFT(0x00765000) /* 0.028884888 */,
+ -PRESHIFT(0x0185d000) /* -0.095169067 */,
+ PRESHIFT(0x011d1000) /* 0.069595337 */,
+ -PRESHIFT(0x0a7fe000) /* -0.656219482 */,
+ PRESHIFT(0x12386000) /* 1.138763428 */,
+ PRESHIFT(0x07ccb000) /* 0.487472534 */,
+ PRESHIFT(0x01f9c000) /* 0.123474121 */,
+ PRESHIFT(0x00fdf000) /* 0.061996460 */,
+ PRESHIFT(0x00827000) /* 0.031845093 */,
+ PRESHIFT(0x00126000) /* 0.004486084 */,
+ PRESHIFT(0x000c4000) /* 0.002990723 */,
+ PRESHIFT(0x00015000) /* 0.000320435 */ },
+
+ { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 4 */
+ -PRESHIFT(0x00029000) /* -0.000625610 */,
+ PRESHIFT(0x000e3000) /* 0.003463745 */,
+ -PRESHIFT(0x002c7000) /* -0.010848999 */,
+ PRESHIFT(0x0071e000) /* 0.027801514 */,
+ -PRESHIFT(0x019bd000) /* -0.100540161 */,
+ PRESHIFT(0x00ec0000) /* 0.057617187 */,
+ -PRESHIFT(0x0af15000) /* -0.683914185 */,
+ PRESHIFT(0x12249000) /* 1.133926392 */,
+ PRESHIFT(0x075a0000) /* 0.459472656 */,
+ PRESHIFT(0x0212c000) /* 0.129577637 */,
+ PRESHIFT(0x00e79000) /* 0.056533813 */,
+ PRESHIFT(0x00825000) /* 0.031814575 */,
+ PRESHIFT(0x000f4000) /* 0.003723145 */,
+ PRESHIFT(0x000be000) /* 0.002899170 */,
+ PRESHIFT(0x00013000) /* 0.000289917 */,
+
+ -PRESHIFT(0x00001000) /* -0.000015259 */,
+ -PRESHIFT(0x00029000) /* -0.000625610 */,
+ PRESHIFT(0x000e3000) /* 0.003463745 */,
+ -PRESHIFT(0x002c7000) /* -0.010848999 */,
+ PRESHIFT(0x0071e000) /* 0.027801514 */,
+ -PRESHIFT(0x019bd000) /* -0.100540161 */,
+ PRESHIFT(0x00ec0000) /* 0.057617187 */,
+ -PRESHIFT(0x0af15000) /* -0.683914185 */,
+ PRESHIFT(0x12249000) /* 1.133926392 */,
+ PRESHIFT(0x075a0000) /* 0.459472656 */,
+ PRESHIFT(0x0212c000) /* 0.129577637 */,
+ PRESHIFT(0x00e79000) /* 0.056533813 */,
+ PRESHIFT(0x00825000) /* 0.031814575 */,
+ PRESHIFT(0x000f4000) /* 0.003723145 */,
+ PRESHIFT(0x000be000) /* 0.002899170 */,
+ PRESHIFT(0x00013000) /* 0.000289917 */ },
+
+ { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 5 */
+ -PRESHIFT(0x0002d000) /* -0.000686646 */,
+ PRESHIFT(0x000e4000) /* 0.003479004 */,
+ -PRESHIFT(0x0030b000) /* -0.011886597 */,
+ PRESHIFT(0x006cb000) /* 0.026535034 */,
+ -PRESHIFT(0x01b17000) /* -0.105819702 */,
+ PRESHIFT(0x00b77000) /* 0.044784546 */,
+ -PRESHIFT(0x0b619000) /* -0.711318970 */,
+ PRESHIFT(0x120b4000) /* 1.127746582 */,
+ PRESHIFT(0x06e81000) /* 0.431655884 */,
+ PRESHIFT(0x02288000) /* 0.134887695 */,
+ PRESHIFT(0x00d17000) /* 0.051132202 */,
+ PRESHIFT(0x0081b000) /* 0.031661987 */,
+ PRESHIFT(0x000c5000) /* 0.003005981 */,
+ PRESHIFT(0x000b7000) /* 0.002792358 */,
+ PRESHIFT(0x00011000) /* 0.000259399 */,
+
+ -PRESHIFT(0x00001000) /* -0.000015259 */,
+ -PRESHIFT(0x0002d000) /* -0.000686646 */,
+ PRESHIFT(0x000e4000) /* 0.003479004 */,
+ -PRESHIFT(0x0030b000) /* -0.011886597 */,
+ PRESHIFT(0x006cb000) /* 0.026535034 */,
+ -PRESHIFT(0x01b17000) /* -0.105819702 */,
+ PRESHIFT(0x00b77000) /* 0.044784546 */,
+ -PRESHIFT(0x0b619000) /* -0.711318970 */,
+ PRESHIFT(0x120b4000) /* 1.127746582 */,
+ PRESHIFT(0x06e81000) /* 0.431655884 */,
+ PRESHIFT(0x02288000) /* 0.134887695 */,
+ PRESHIFT(0x00d17000) /* 0.051132202 */,
+ PRESHIFT(0x0081b000) /* 0.031661987 */,
+ PRESHIFT(0x000c5000) /* 0.003005981 */,
+ PRESHIFT(0x000b7000) /* 0.002792358 */,
+ PRESHIFT(0x00011000) /* 0.000259399 */ },
+
+ { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 6 */
+ -PRESHIFT(0x00031000) /* -0.000747681 */,
+ PRESHIFT(0x000e4000) /* 0.003479004 */,
+ -PRESHIFT(0x00350000) /* -0.012939453 */,
+ PRESHIFT(0x0066c000) /* 0.025085449 */,
+ -PRESHIFT(0x01c67000) /* -0.110946655 */,
+ PRESHIFT(0x007f5000) /* 0.031082153 */,
+ -PRESHIFT(0x0bd06000) /* -0.738372803 */,
+ PRESHIFT(0x11ec7000) /* 1.120223999 */,
+ PRESHIFT(0x06772000) /* 0.404083252 */,
+ PRESHIFT(0x023b3000) /* 0.139450073 */,
+ PRESHIFT(0x00bbc000) /* 0.045837402 */,
+ PRESHIFT(0x00809000) /* 0.031387329 */,
+ PRESHIFT(0x00099000) /* 0.002334595 */,
+ PRESHIFT(0x000b0000) /* 0.002685547 */,
+ PRESHIFT(0x00010000) /* 0.000244141 */,
+
+ -PRESHIFT(0x00001000) /* -0.000015259 */,
+ -PRESHIFT(0x00031000) /* -0.000747681 */,
+ PRESHIFT(0x000e4000) /* 0.003479004 */,
+ -PRESHIFT(0x00350000) /* -0.012939453 */,
+ PRESHIFT(0x0066c000) /* 0.025085449 */,
+ -PRESHIFT(0x01c67000) /* -0.110946655 */,
+ PRESHIFT(0x007f5000) /* 0.031082153 */,
+ -PRESHIFT(0x0bd06000) /* -0.738372803 */,
+ PRESHIFT(0x11ec7000) /* 1.120223999 */,
+ PRESHIFT(0x06772000) /* 0.404083252 */,
+ PRESHIFT(0x023b3000) /* 0.139450073 */,
+ PRESHIFT(0x00bbc000) /* 0.045837402 */,
+ PRESHIFT(0x00809000) /* 0.031387329 */,
+ PRESHIFT(0x00099000) /* 0.002334595 */,
+ PRESHIFT(0x000b0000) /* 0.002685547 */,
+ PRESHIFT(0x00010000) /* 0.000244141 */ },
+
+ { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 7 */
+ -PRESHIFT(0x00035000) /* -0.000808716 */,
+ PRESHIFT(0x000e3000) /* 0.003463745 */,
+ -PRESHIFT(0x00397000) /* -0.014022827 */,
+ PRESHIFT(0x005ff000) /* 0.023422241 */,
+ -PRESHIFT(0x01dad000) /* -0.115921021 */,
+ PRESHIFT(0x0043a000) /* 0.016510010 */,
+ -PRESHIFT(0x0c3d9000) /* -0.765029907 */,
+ PRESHIFT(0x11c83000) /* 1.111373901 */,
+ PRESHIFT(0x06076000) /* 0.376800537 */,
+ PRESHIFT(0x024ad000) /* 0.143264771 */,
+ PRESHIFT(0x00a67000) /* 0.040634155 */,
+ PRESHIFT(0x007f0000) /* 0.031005859 */,
+ PRESHIFT(0x0006f000) /* 0.001693726 */,
+ PRESHIFT(0x000a9000) /* 0.002578735 */,
+ PRESHIFT(0x0000e000) /* 0.000213623 */,
+
+ -PRESHIFT(0x00002000) /* -0.000030518 */,
+ -PRESHIFT(0x00035000) /* -0.000808716 */,
+ PRESHIFT(0x000e3000) /* 0.003463745 */,
+ -PRESHIFT(0x00397000) /* -0.014022827 */,
+ PRESHIFT(0x005ff000) /* 0.023422241 */,
+ -PRESHIFT(0x01dad000) /* -0.115921021 */,
+ PRESHIFT(0x0043a000) /* 0.016510010 */,
+ -PRESHIFT(0x0c3d9000) /* -0.765029907 */,
+ PRESHIFT(0x11c83000) /* 1.111373901 */,
+ PRESHIFT(0x06076000) /* 0.376800537 */,
+ PRESHIFT(0x024ad000) /* 0.143264771 */,
+ PRESHIFT(0x00a67000) /* 0.040634155 */,
+ PRESHIFT(0x007f0000) /* 0.031005859 */,
+ PRESHIFT(0x0006f000) /* 0.001693726 */,
+ PRESHIFT(0x000a9000) /* 0.002578735 */,
+ PRESHIFT(0x0000e000) /* 0.000213623 */ },
+
+ { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 8 */
+ -PRESHIFT(0x0003a000) /* -0.000885010 */,
+ PRESHIFT(0x000e0000) /* 0.003417969 */,
+ -PRESHIFT(0x003df000) /* -0.015121460 */,
+ PRESHIFT(0x00586000) /* 0.021575928 */,
+ -PRESHIFT(0x01ee6000) /* -0.120697021 */,
+ PRESHIFT(0x00046000) /* 0.001068115 */,
+ -PRESHIFT(0x0ca8d000) /* -0.791213989 */,
+ PRESHIFT(0x119e9000) /* 1.101211548 */,
+ PRESHIFT(0x05991000) /* 0.349868774 */,
+ PRESHIFT(0x02578000) /* 0.146362305 */,
+ PRESHIFT(0x0091a000) /* 0.035552979 */,
+ PRESHIFT(0x007d1000) /* 0.030532837 */,
+ PRESHIFT(0x00048000) /* 0.001098633 */,
+ PRESHIFT(0x000a1000) /* 0.002456665 */,
+ PRESHIFT(0x0000d000) /* 0.000198364 */,
+
+ -PRESHIFT(0x00002000) /* -0.000030518 */,
+ -PRESHIFT(0x0003a000) /* -0.000885010 */,
+ PRESHIFT(0x000e0000) /* 0.003417969 */,
+ -PRESHIFT(0x003df000) /* -0.015121460 */,
+ PRESHIFT(0x00586000) /* 0.021575928 */,
+ -PRESHIFT(0x01ee6000) /* -0.120697021 */,
+ PRESHIFT(0x00046000) /* 0.001068115 */,
+ -PRESHIFT(0x0ca8d000) /* -0.791213989 */,
+ PRESHIFT(0x119e9000) /* 1.101211548 */,
+ PRESHIFT(0x05991000) /* 0.349868774 */,
+ PRESHIFT(0x02578000) /* 0.146362305 */,
+ PRESHIFT(0x0091a000) /* 0.035552979 */,
+ PRESHIFT(0x007d1000) /* 0.030532837 */,
+ PRESHIFT(0x00048000) /* 0.001098633 */,
+ PRESHIFT(0x000a1000) /* 0.002456665 */,
+ PRESHIFT(0x0000d000) /* 0.000198364 */ },
+
+ { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 9 */
+ -PRESHIFT(0x0003f000) /* -0.000961304 */,
+ PRESHIFT(0x000dd000) /* 0.003372192 */,
+ -PRESHIFT(0x00428000) /* -0.016235352 */,
+ PRESHIFT(0x00500000) /* 0.019531250 */,
+ -PRESHIFT(0x02011000) /* -0.125259399 */,
+ -PRESHIFT(0x003e6000) /* -0.015228271 */,
+ -PRESHIFT(0x0d11e000) /* -0.816864014 */,
+ PRESHIFT(0x116fc000) /* 1.089782715 */,
+ PRESHIFT(0x052c5000) /* 0.323318481 */,
+ PRESHIFT(0x02616000) /* 0.148773193 */,
+ PRESHIFT(0x007d6000) /* 0.030609131 */,
+ PRESHIFT(0x007aa000) /* 0.029937744 */,
+ PRESHIFT(0x00024000) /* 0.000549316 */,
+ PRESHIFT(0x0009a000) /* 0.002349854 */,
+ PRESHIFT(0x0000b000) /* 0.000167847 */,
+
+ -PRESHIFT(0x00002000) /* -0.000030518 */,
+ -PRESHIFT(0x0003f000) /* -0.000961304 */,
+ PRESHIFT(0x000dd000) /* 0.003372192 */,
+ -PRESHIFT(0x00428000) /* -0.016235352 */,
+ PRESHIFT(0x00500000) /* 0.019531250 */,
+ -PRESHIFT(0x02011000) /* -0.125259399 */,
+ -PRESHIFT(0x003e6000) /* -0.015228271 */,
+ -PRESHIFT(0x0d11e000) /* -0.816864014 */,
+ PRESHIFT(0x116fc000) /* 1.089782715 */,
+ PRESHIFT(0x052c5000) /* 0.323318481 */,
+ PRESHIFT(0x02616000) /* 0.148773193 */,
+ PRESHIFT(0x007d6000) /* 0.030609131 */,
+ PRESHIFT(0x007aa000) /* 0.029937744 */,
+ PRESHIFT(0x00024000) /* 0.000549316 */,
+ PRESHIFT(0x0009a000) /* 0.002349854 */,
+ PRESHIFT(0x0000b000) /* 0.000167847 */ },
+
+ { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 10 */
+ -PRESHIFT(0x00044000) /* -0.001037598 */,
+ PRESHIFT(0x000d7000) /* 0.003280640 */,
+ -PRESHIFT(0x00471000) /* -0.017349243 */,
+ PRESHIFT(0x0046b000) /* 0.017257690 */,
+ -PRESHIFT(0x0212b000) /* -0.129562378 */,
+ -PRESHIFT(0x0084a000) /* -0.032379150 */,
+ -PRESHIFT(0x0d78a000) /* -0.841949463 */,
+ PRESHIFT(0x113be000) /* 1.077117920 */,
+ PRESHIFT(0x04c16000) /* 0.297210693 */,
+ PRESHIFT(0x02687000) /* 0.150497437 */,
+ PRESHIFT(0x0069c000) /* 0.025817871 */,
+ PRESHIFT(0x0077f000) /* 0.029281616 */,
+ PRESHIFT(0x00002000) /* 0.000030518 */,
+ PRESHIFT(0x00093000) /* 0.002243042 */,
+ PRESHIFT(0x0000a000) /* 0.000152588 */,
+
+ -PRESHIFT(0x00002000) /* -0.000030518 */,
+ -PRESHIFT(0x00044000) /* -0.001037598 */,
+ PRESHIFT(0x000d7000) /* 0.003280640 */,
+ -PRESHIFT(0x00471000) /* -0.017349243 */,
+ PRESHIFT(0x0046b000) /* 0.017257690 */,
+ -PRESHIFT(0x0212b000) /* -0.129562378 */,
+ -PRESHIFT(0x0084a000) /* -0.032379150 */,
+ -PRESHIFT(0x0d78a000) /* -0.841949463 */,
+ PRESHIFT(0x113be000) /* 1.077117920 */,
+ PRESHIFT(0x04c16000) /* 0.297210693 */,
+ PRESHIFT(0x02687000) /* 0.150497437 */,
+ PRESHIFT(0x0069c000) /* 0.025817871 */,
+ PRESHIFT(0x0077f000) /* 0.029281616 */,
+ PRESHIFT(0x00002000) /* 0.000030518 */,
+ PRESHIFT(0x00093000) /* 0.002243042 */,
+ PRESHIFT(0x0000a000) /* 0.000152588 */ },
+
+ { -PRESHIFT(0x00003000) /* -0.000045776 */, /* 11 */
+ -PRESHIFT(0x00049000) /* -0.001113892 */,
+ PRESHIFT(0x000d0000) /* 0.003173828 */,
+ -PRESHIFT(0x004ba000) /* -0.018463135 */,
+ PRESHIFT(0x003ca000) /* 0.014801025 */,
+ -PRESHIFT(0x02233000) /* -0.133590698 */,
+ -PRESHIFT(0x00ce4000) /* -0.050354004 */,
+ -PRESHIFT(0x0ddca000) /* -0.866363525 */,
+ PRESHIFT(0x1102f000) /* 1.063217163 */,
+ PRESHIFT(0x04587000) /* 0.271591187 */,
+ PRESHIFT(0x026cf000) /* 0.151596069 */,
+ PRESHIFT(0x0056c000) /* 0.021179199 */,
+ PRESHIFT(0x0074e000) /* 0.028533936 */,
+ -PRESHIFT(0x0001d000) /* -0.000442505 */,
+ PRESHIFT(0x0008b000) /* 0.002120972 */,
+ PRESHIFT(0x00009000) /* 0.000137329 */,
+
+ -PRESHIFT(0x00003000) /* -0.000045776 */,
+ -PRESHIFT(0x00049000) /* -0.001113892 */,
+ PRESHIFT(0x000d0000) /* 0.003173828 */,
+ -PRESHIFT(0x004ba000) /* -0.018463135 */,
+ PRESHIFT(0x003ca000) /* 0.014801025 */,
+ -PRESHIFT(0x02233000) /* -0.133590698 */,
+ -PRESHIFT(0x00ce4000) /* -0.050354004 */,
+ -PRESHIFT(0x0ddca000) /* -0.866363525 */,
+ PRESHIFT(0x1102f000) /* 1.063217163 */,
+ PRESHIFT(0x04587000) /* 0.271591187 */,
+ PRESHIFT(0x026cf000) /* 0.151596069 */,
+ PRESHIFT(0x0056c000) /* 0.021179199 */,
+ PRESHIFT(0x0074e000) /* 0.028533936 */,
+ -PRESHIFT(0x0001d000) /* -0.000442505 */,
+ PRESHIFT(0x0008b000) /* 0.002120972 */,
+ PRESHIFT(0x00009000) /* 0.000137329 */ },
+
+ { -PRESHIFT(0x00003000) /* -0.000045776 */, /* 12 */
+ -PRESHIFT(0x0004f000) /* -0.001205444 */,
+ PRESHIFT(0x000c8000) /* 0.003051758 */,
+ -PRESHIFT(0x00503000) /* -0.019577026 */,
+ PRESHIFT(0x0031a000) /* 0.012115479 */,
+ -PRESHIFT(0x02326000) /* -0.137298584 */,
+ -PRESHIFT(0x011b5000) /* -0.069168091 */,
+ -PRESHIFT(0x0e3dd000) /* -0.890090942 */,
+ PRESHIFT(0x10c54000) /* 1.048156738 */,
+ PRESHIFT(0x03f1b000) /* 0.246505737 */,
+ PRESHIFT(0x026ee000) /* 0.152069092 */,
+ PRESHIFT(0x00447000) /* 0.016708374 */,
+ PRESHIFT(0x00719000) /* 0.027725220 */,
+ -PRESHIFT(0x00039000) /* -0.000869751 */,
+ PRESHIFT(0x00084000) /* 0.002014160 */,
+ PRESHIFT(0x00008000) /* 0.000122070 */,
+
+ -PRESHIFT(0x00003000) /* -0.000045776 */,
+ -PRESHIFT(0x0004f000) /* -0.001205444 */,
+ PRESHIFT(0x000c8000) /* 0.003051758 */,
+ -PRESHIFT(0x00503000) /* -0.019577026 */,
+ PRESHIFT(0x0031a000) /* 0.012115479 */,
+ -PRESHIFT(0x02326000) /* -0.137298584 */,
+ -PRESHIFT(0x011b5000) /* -0.069168091 */,
+ -PRESHIFT(0x0e3dd000) /* -0.890090942 */,
+ PRESHIFT(0x10c54000) /* 1.048156738 */,
+ PRESHIFT(0x03f1b000) /* 0.246505737 */,
+ PRESHIFT(0x026ee000) /* 0.152069092 */,
+ PRESHIFT(0x00447000) /* 0.016708374 */,
+ PRESHIFT(0x00719000) /* 0.027725220 */,
+ -PRESHIFT(0x00039000) /* -0.000869751 */,
+ PRESHIFT(0x00084000) /* 0.002014160 */,
+ PRESHIFT(0x00008000) /* 0.000122070 */ },
+
+ { -PRESHIFT(0x00004000) /* -0.000061035 */, /* 13 */
+ -PRESHIFT(0x00055000) /* -0.001296997 */,
+ PRESHIFT(0x000bd000) /* 0.002883911 */,
+ -PRESHIFT(0x0054c000) /* -0.020690918 */,
+ PRESHIFT(0x0025d000) /* 0.009231567 */,
+ -PRESHIFT(0x02403000) /* -0.140670776 */,
+ -PRESHIFT(0x016ba000) /* -0.088775635 */,
+ -PRESHIFT(0x0e9be000) /* -0.913055420 */,
+ PRESHIFT(0x1082d000) /* 1.031936646 */,
+ PRESHIFT(0x038d4000) /* 0.221984863 */,
+ PRESHIFT(0x026e7000) /* 0.151962280 */,
+ PRESHIFT(0x0032e000) /* 0.012420654 */,
+ PRESHIFT(0x006df000) /* 0.026840210 */,
+ -PRESHIFT(0x00053000) /* -0.001266479 */,
+ PRESHIFT(0x0007d000) /* 0.001907349 */,
+ PRESHIFT(0x00007000) /* 0.000106812 */,
+
+ -PRESHIFT(0x00004000) /* -0.000061035 */,
+ -PRESHIFT(0x00055000) /* -0.001296997 */,
+ PRESHIFT(0x000bd000) /* 0.002883911 */,
+ -PRESHIFT(0x0054c000) /* -0.020690918 */,
+ PRESHIFT(0x0025d000) /* 0.009231567 */,
+ -PRESHIFT(0x02403000) /* -0.140670776 */,
+ -PRESHIFT(0x016ba000) /* -0.088775635 */,
+ -PRESHIFT(0x0e9be000) /* -0.913055420 */,
+ PRESHIFT(0x1082d000) /* 1.031936646 */,
+ PRESHIFT(0x038d4000) /* 0.221984863 */,
+ PRESHIFT(0x026e7000) /* 0.151962280 */,
+ PRESHIFT(0x0032e000) /* 0.012420654 */,
+ PRESHIFT(0x006df000) /* 0.026840210 */,
+ -PRESHIFT(0x00053000) /* -0.001266479 */,
+ PRESHIFT(0x0007d000) /* 0.001907349 */,
+ PRESHIFT(0x00007000) /* 0.000106812 */ },
+
+ { -PRESHIFT(0x00004000) /* -0.000061035 */, /* 14 */
+ -PRESHIFT(0x0005b000) /* -0.001388550 */,
+ PRESHIFT(0x000b1000) /* 0.002700806 */,
+ -PRESHIFT(0x00594000) /* -0.021789551 */,
+ PRESHIFT(0x00192000) /* 0.006134033 */,
+ -PRESHIFT(0x024c8000) /* -0.143676758 */,
+ -PRESHIFT(0x01bf2000) /* -0.109161377 */,
+ -PRESHIFT(0x0ef69000) /* -0.935195923 */,
+ PRESHIFT(0x103be000) /* 1.014617920 */,
+ PRESHIFT(0x032b4000) /* 0.198059082 */,
+ PRESHIFT(0x026bc000) /* 0.151306152 */,
+ PRESHIFT(0x00221000) /* 0.008316040 */,
+ PRESHIFT(0x006a2000) /* 0.025909424 */,
+ -PRESHIFT(0x0006a000) /* -0.001617432 */,
+ PRESHIFT(0x00075000) /* 0.001785278 */,
+ PRESHIFT(0x00007000) /* 0.000106812 */,
+
+ -PRESHIFT(0x00004000) /* -0.000061035 */,
+ -PRESHIFT(0x0005b000) /* -0.001388550 */,
+ PRESHIFT(0x000b1000) /* 0.002700806 */,
+ -PRESHIFT(0x00594000) /* -0.021789551 */,
+ PRESHIFT(0x00192000) /* 0.006134033 */,
+ -PRESHIFT(0x024c8000) /* -0.143676758 */,
+ -PRESHIFT(0x01bf2000) /* -0.109161377 */,
+ -PRESHIFT(0x0ef69000) /* -0.935195923 */,
+ PRESHIFT(0x103be000) /* 1.014617920 */,
+ PRESHIFT(0x032b4000) /* 0.198059082 */,
+ PRESHIFT(0x026bc000) /* 0.151306152 */,
+ PRESHIFT(0x00221000) /* 0.008316040 */,
+ PRESHIFT(0x006a2000) /* 0.025909424 */,
+ -PRESHIFT(0x0006a000) /* -0.001617432 */,
+ PRESHIFT(0x00075000) /* 0.001785278 */,
+ PRESHIFT(0x00007000) /* 0.000106812 */ },
+
+ { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 15 */
+ -PRESHIFT(0x00061000) /* -0.001480103 */,
+ PRESHIFT(0x000a3000) /* 0.002487183 */,
+ -PRESHIFT(0x005da000) /* -0.022857666 */,
+ PRESHIFT(0x000b9000) /* 0.002822876 */,
+ -PRESHIFT(0x02571000) /* -0.146255493 */,
+ -PRESHIFT(0x0215c000) /* -0.130310059 */,
+ -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
+ PRESHIFT(0x0ff0a000) /* 0.996246338 */,
+ PRESHIFT(0x02cbf000) /* 0.174789429 */,
+ PRESHIFT(0x0266e000) /* 0.150115967 */,
+ PRESHIFT(0x00120000) /* 0.004394531 */,
+ PRESHIFT(0x00662000) /* 0.024932861 */,
+ -PRESHIFT(0x0007f000) /* -0.001937866 */,
+ PRESHIFT(0x0006f000) /* 0.001693726 */,
+ PRESHIFT(0x00006000) /* 0.000091553 */,
+
+ -PRESHIFT(0x00005000) /* -0.000076294 */,
+ -PRESHIFT(0x00061000) /* -0.001480103 */,
+ PRESHIFT(0x000a3000) /* 0.002487183 */,
+ -PRESHIFT(0x005da000) /* -0.022857666 */,
+ PRESHIFT(0x000b9000) /* 0.002822876 */,
+ -PRESHIFT(0x02571000) /* -0.146255493 */,
+ -PRESHIFT(0x0215c000) /* -0.130310059 */,
+ -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
+ PRESHIFT(0x0ff0a000) /* 0.996246338 */,
+ PRESHIFT(0x02cbf000) /* 0.174789429 */,
+ PRESHIFT(0x0266e000) /* 0.150115967 */,
+ PRESHIFT(0x00120000) /* 0.004394531 */,
+ PRESHIFT(0x00662000) /* 0.024932861 */,
+ -PRESHIFT(0x0007f000) /* -0.001937866 */,
+ PRESHIFT(0x0006f000) /* 0.001693726 */,
+ PRESHIFT(0x00006000) /* 0.000091553 */ },
+
+ { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 16 */
+ -PRESHIFT(0x00068000) /* -0.001586914 */,
+ PRESHIFT(0x00092000) /* 0.002227783 */,
+ -PRESHIFT(0x0061f000) /* -0.023910522 */,
+ -PRESHIFT(0x0002d000) /* -0.000686646 */,
+ -PRESHIFT(0x025ff000) /* -0.148422241 */,
+ -PRESHIFT(0x026f7000) /* -0.152206421 */,
+ -PRESHIFT(0x0fa13000) /* -0.976852417 */,
+ PRESHIFT(0x0fa13000) /* 0.976852417 */,
+ PRESHIFT(0x026f7000) /* 0.152206421 */,
+ PRESHIFT(0x025ff000) /* 0.148422241 */,
+ PRESHIFT(0x0002d000) /* 0.000686646 */,
+ PRESHIFT(0x0061f000) /* 0.023910522 */,
+ -PRESHIFT(0x00092000) /* -0.002227783 */,
+ PRESHIFT(0x00068000) /* 0.001586914 */,
+ PRESHIFT(0x00005000) /* 0.000076294 */,
+
+ -PRESHIFT(0x00005000) /* -0.000076294 */,
+ -PRESHIFT(0x00068000) /* -0.001586914 */,
+ PRESHIFT(0x00092000) /* 0.002227783 */,
+ -PRESHIFT(0x0061f000) /* -0.023910522 */,
+ -PRESHIFT(0x0002d000) /* -0.000686646 */,
+ -PRESHIFT(0x025ff000) /* -0.148422241 */,
+ -PRESHIFT(0x026f7000) /* -0.152206421 */,
+ -PRESHIFT(0x0fa13000) /* -0.976852417 */,
+ PRESHIFT(0x0fa13000) /* 0.976852417 */,
+ PRESHIFT(0x026f7000) /* 0.152206421 */,
+ PRESHIFT(0x025ff000) /* 0.148422241 */,
+ PRESHIFT(0x0002d000) /* 0.000686646 */,
+ PRESHIFT(0x0061f000) /* 0.023910522 */,
+ -PRESHIFT(0x00092000) /* -0.002227783 */,
+ PRESHIFT(0x00068000) /* 0.001586914 */,
+ PRESHIFT(0x00005000) /* 0.000076294 */ }
diff --git a/core/multimedia/opieplayer/libmad/Makefile.in b/core/multimedia/opieplayer/libmad/Makefile.in
new file mode 100644
index 0000000..9e17769
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/Makefile.in
@@ -0,0 +1,226 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB) -DQCONFIG=\"qpe\"
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB) -DQCONFIG=\"qpe\"
+INCPATH = -I$(QPEDIR)/include -I..
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe -lm $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/codecs/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = madplugin
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = libmad_version.h \
+ fixed.h \
+ bit.h \
+ timer.h \
+ stream.h \
+ frame.h \
+ synth.h \
+ decoder.h \
+ layer12.h \
+ layer3.h \
+ huffman.h \
+ libmad_global.h \
+ mad.h \
+ libmadplugin.h \
+ libmadpluginimpl.h
+SOURCES = version.c \
+ fixed.c \
+ bit.c \
+ timer.c \
+ stream.c \
+ frame.c \
+ synth.c \
+ decoder.c \
+ layer12.c \
+ layer3.c \
+ huffman.c \
+ libmadplugin.cpp \
+ libmadpluginimpl.cpp
+OBJECTS = version.o \
+ fixed.o \
+ bit.o \
+ timer.o \
+ stream.o \
+ frame.o \
+ synth.o \
+ decoder.o \
+ layer12.o \
+ layer3.o \
+ huffman.o \
+ libmadplugin.o \
+ libmadpluginimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake libmad.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+version.o: version.c \
+ libmad_global.h \
+ libmad_version.h
+
+fixed.o: fixed.c \
+ libmad_global.h \
+ fixed.h
+
+bit.o: bit.c \
+ libmad_global.h \
+ bit.h
+
+timer.o: timer.c \
+ libmad_global.h \
+ timer.h
+
+stream.o: stream.c \
+ libmad_global.h \
+ bit.h \
+ stream.h
+
+frame.o: frame.c \
+ libmad_global.h \
+ bit.h \
+ stream.h \
+ frame.h \
+ fixed.h \
+ timer.h \
+ layer12.h \
+ layer3.h
+
+synth.o: synth.c \
+ libmad_global.h \
+ fixed.h \
+ frame.h \
+ timer.h \
+ stream.h \
+ bit.h \
+ synth.h \
+ D.dat
+
+decoder.o: decoder.c \
+ libmad_global.h \
+ stream.h \
+ bit.h \
+ frame.h \
+ fixed.h \
+ timer.h \
+ synth.h \
+ decoder.h
+
+layer12.o: layer12.c \
+ libmad_global.h \
+ fixed.h \
+ bit.h \
+ stream.h \
+ frame.h \
+ timer.h \
+ layer12.h \
+ sf_table.dat \
+ qc_table.dat
+
+layer3.o: layer3.c \
+ libmad_global.h \
+ fixed.h \
+ bit.h \
+ stream.h \
+ frame.h \
+ timer.h \
+ huffman.h \
+ layer3.h \
+ rq_table.dat \
+ imdct_s.dat
+
+huffman.o: huffman.c \
+ libmad_global.h \
+ huffman.h
+
+libmadplugin.o: libmadplugin.cpp \
+ libmadplugin.h \
+ ../mediaplayerplugininterface.h \
+ mad.h
+
+libmadpluginimpl.o: libmadpluginimpl.cpp \
+ libmadplugin.h \
+ ../mediaplayerplugininterface.h \
+ libmadpluginimpl.h \
+ ../mediaplayerplugininterface.h
+
+
diff --git a/core/multimedia/opieplayer/libmad/bit.c b/core/multimedia/opieplayer/libmad/bit.c
new file mode 100644
index 0000000..2466c5f
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/bit.c
@@ -0,0 +1,220 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# ifdef HAVE_LIMITS_H
+# include <limits.h>
+# else
+# define CHAR_BIT 8
+# endif
+
+# include "bit.h"
+
+/*
+ * This is the lookup table for computing the CRC-check word.
+ * As described in section 2.4.3.1 and depicted in Figure A.9
+ * of ISO/IEC 11172-3, the generator polynomial is:
+ *
+ * G(X) = X^16 + X^15 + X^2 + 1
+ */
+static
+unsigned short const crc_table[256] = {
+ 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011,
+ 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022,
+ 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072,
+ 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041,
+ 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2,
+ 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1,
+ 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1,
+ 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082,
+
+ 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192,
+ 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1,
+ 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
+ 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2,
+ 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151,
+ 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162,
+ 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132,
+ 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101,
+
+ 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312,
+ 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321,
+ 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371,
+ 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342,
+ 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1,
+ 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
+ 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2,
+ 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381,
+
+ 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291,
+ 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2,
+ 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2,
+ 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1,
+ 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252,
+ 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261,
+ 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231,
+ 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202
+};
+
+# define CRC_POLY 0x8005
+
+/*
+ * NAME: bit->init()
+ * DESCRIPTION: initialize bit pointer struct
+ */
+void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
+{
+ bitptr->byte = byte;
+ bitptr->cache = 0;
+ bitptr->left = CHAR_BIT;
+}
+
+/*
+ * NAME: bit->length()
+ * DESCRIPTION: return number of bits between start and end points
+ */
+unsigned int mad_bit_length(struct mad_bitptr const *begin,
+ struct mad_bitptr const *end)
+{
+ return begin->left +
+ CHAR_BIT * (end->byte - (begin->byte + 1)) + (CHAR_BIT - end->left);
+}
+
+/*
+ * NAME: bit->nextbyte()
+ * DESCRIPTION: return pointer to next unprocessed byte
+ */
+unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr)
+{
+ return bitptr->left == CHAR_BIT ? bitptr->byte : bitptr->byte + 1;
+}
+
+/*
+ * NAME: bit->skip()
+ * DESCRIPTION: advance bit pointer
+ */
+void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
+{
+ bitptr->byte += len / CHAR_BIT;
+ bitptr->left -= len % CHAR_BIT;
+
+ if (bitptr->left > CHAR_BIT) {
+ bitptr->byte++;
+ bitptr->left += CHAR_BIT;
+ }
+
+ if (bitptr->left < CHAR_BIT)
+ bitptr->cache = *bitptr->byte;
+}
+
+/*
+ * NAME: bit->read()
+ * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value
+ */
+unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len)
+{
+ register unsigned long value;
+
+ if (bitptr->left == CHAR_BIT)
+ bitptr->cache = *bitptr->byte;
+
+ if (len < bitptr->left) {
+ value = (bitptr->cache & ((1 << bitptr->left) - 1)) >>
+ (bitptr->left - len);
+ bitptr->left -= len;
+
+ return value;
+ }
+
+ /* remaining bits in current byte */
+
+ value = bitptr->cache & ((1 << bitptr->left) - 1);
+ len -= bitptr->left;
+
+ bitptr->byte++;
+ bitptr->left = CHAR_BIT;
+
+ /* more bytes */
+
+ while (len >= CHAR_BIT) {
+ value = (value << CHAR_BIT) | *bitptr->byte++;
+ len -= CHAR_BIT;
+ }
+
+ if (len > 0) {
+ bitptr->cache = *bitptr->byte;
+
+ value = (value << len) | (bitptr->cache >> (CHAR_BIT - len));
+ bitptr->left -= len;
+ }
+
+ return value;
+}
+
+# if 0
+/*
+ * NAME: bit->write()
+ * DESCRIPTION: write an arbitrary number of bits
+ */
+void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len,
+ unsigned long value)
+{
+ unsigned char *ptr;
+
+ ptr = (unsigned char *) bitptr->byte;
+
+ /* ... */
+}
+# endif
+
+/*
+ * NAME: bit->crc()
+ * DESCRIPTION: compute CRC-check word
+ */
+unsigned short mad_bit_crc(struct mad_bitptr bitptr, unsigned int len,
+ unsigned short init)
+{
+ register unsigned int crc, data;
+
+# if CHAR_BIT == 8
+ for (crc = init; len >= 8; len -= 8) {
+ crc = (crc << 8) ^
+ crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
+ }
+# else
+ crc = init;
+# endif
+
+ while (len--) {
+ data = mad_bit_read(&bitptr, 1) ^ (crc >> 15);
+
+ crc <<= 1;
+ if (data & 1)
+ crc ^= CRC_POLY;
+ }
+
+ return crc & 0xffff;
+}
diff --git a/core/multimedia/opieplayer/libmad/bit.h b/core/multimedia/opieplayer/libmad/bit.h
new file mode 100644
index 0000000..f315bc9
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/bit.h
@@ -0,0 +1,47 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_BIT_H
+# define LIBMAD_BIT_H
+
+struct mad_bitptr {
+ unsigned char const *byte;
+ unsigned short cache;
+ unsigned short left;
+};
+
+void mad_bit_init(struct mad_bitptr *, unsigned char const *);
+
+# define mad_bit_finish(bitptr) /* nothing */
+
+unsigned int mad_bit_length(struct mad_bitptr const *,
+ struct mad_bitptr const *);
+
+# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
+unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
+
+void mad_bit_skip(struct mad_bitptr *, unsigned int);
+unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
+void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
+
+unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/decoder.c b/core/multimedia/opieplayer/libmad/decoder.c
new file mode 100644
index 0000000..dcf7cf3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/decoder.c
@@ -0,0 +1,554 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# else
+# ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
+# endif
+# ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+# endif
+# endif
+
+# include "libmad_global.h"
+
+# include <sys/types.h>
+
+# ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+# endif
+
+# ifdef HAVE_UNISTD_H
+# include <unistd.h>
+# endif
+
+# include <fcntl.h>
+# include <stdlib.h>
+# include <errno.h>
+
+# include "stream.h"
+# include "frame.h"
+# include "synth.h"
+# include "decoder.h"
+
+void mad_decoder_init(struct mad_decoder *decoder, void *data,
+ enum mad_flow (*input_func)(void *, struct mad_stream *),
+ enum mad_flow (*header_func)(void *,
+ struct mad_header const *),
+ enum mad_flow (*filter_func)(void *, struct mad_frame *),
+ enum mad_flow (*output_func)(void *,
+ struct mad_header const *,
+ struct mad_pcm *),
+ enum mad_flow (*error_func)(void *, struct mad_stream *,
+ struct mad_frame *),
+ enum mad_flow (*message_func)(void *,
+ void *, unsigned int *))
+{
+ decoder->mode = -1;
+
+ decoder->options = 0;
+
+ decoder->async.pid = 0;
+ decoder->async.in = -1;
+ decoder->async.out = -1;
+
+ decoder->sync = 0;
+
+ decoder->cb_data = data;
+
+ decoder->input_func = input_func;
+ decoder->header_func = header_func;
+ decoder->filter_func = filter_func;
+ decoder->output_func = output_func;
+ decoder->error_func = error_func;
+ decoder->message_func = message_func;
+}
+
+int mad_decoder_finish(struct mad_decoder *decoder)
+{
+ if (decoder->mode == MAD_DECODER_MODE_ASYNC && decoder->async.pid) {
+ pid_t pid;
+ int status;
+
+ close(decoder->async.in);
+
+ do {
+ pid = waitpid(decoder->async.pid, &status, 0);
+ }
+ while (pid == -1 && errno == EINTR);
+
+ decoder->mode = -1;
+
+ close(decoder->async.out);
+
+ decoder->async.pid = 0;
+ decoder->async.in = -1;
+ decoder->async.out = -1;
+
+ if (pid == -1)
+ return -1;
+
+ return (!WIFEXITED(status) || WEXITSTATUS(status)) ? -1 : 0;
+ }
+
+ return 0;
+}
+
+static
+enum mad_flow send_io(int fd, void const *data, size_t len)
+{
+ char const *ptr = data;
+ ssize_t count;
+
+ while (len) {
+ do {
+ count = write(fd, ptr, len);
+ }
+ while (count == -1 && errno == EINTR);
+
+ if (count == -1)
+ return MAD_FLOW_BREAK;
+
+ len -= count;
+ ptr += count;
+ }
+
+ return MAD_FLOW_CONTINUE;
+}
+
+static
+enum mad_flow receive_io(int fd, void *buffer, size_t len)
+{
+ char *ptr = buffer;
+ ssize_t count;
+
+ while (len) {
+ do {
+ count = read(fd, ptr, len);
+ }
+ while (count == -1 && errno == EINTR);
+
+ if (count == -1)
+ return (errno == EAGAIN) ? MAD_FLOW_IGNORE : MAD_FLOW_BREAK;
+ else if (count == 0)
+ return MAD_FLOW_STOP;
+
+ len -= count;
+ ptr += count;
+ }
+
+ return MAD_FLOW_CONTINUE;
+}
+
+static
+enum mad_flow receive_io_blocking(int fd, void *buffer, size_t len)
+{
+ int flags, blocking;
+ enum mad_flow result;
+
+ flags = fcntl(fd, F_GETFL);
+ if (flags == -1)
+ return MAD_FLOW_BREAK;
+
+ blocking = flags & ~O_NONBLOCK;
+
+ if (blocking != flags &&
+ fcntl(fd, F_SETFL, blocking) == -1)
+ return MAD_FLOW_BREAK;
+
+ result = receive_io(fd, buffer, len);
+
+ if (flags != blocking &&
+ fcntl(fd, F_SETFL, flags) == -1)
+ return MAD_FLOW_BREAK;
+
+ return result;
+}
+
+static
+enum mad_flow send(int fd, void const *message, unsigned int size)
+{
+ enum mad_flow result;
+
+ /* send size */
+
+ result = send_io(fd, &size, sizeof(size));
+
+ /* send message */
+
+ if (result == MAD_FLOW_CONTINUE)
+ result = send_io(fd, message, size);
+
+ return result;
+}
+
+static
+enum mad_flow receive(int fd, void **message, unsigned int *size)
+{
+ enum mad_flow result;
+ unsigned int actual;
+
+ if (*message == 0)
+ *size = 0;
+
+ /* receive size */
+
+ result = receive_io(fd, &actual, sizeof(actual));
+
+ /* receive message */
+
+ if (result == MAD_FLOW_CONTINUE) {
+ if (actual > *size)
+ actual -= *size;
+ else {
+ *size = actual;
+ actual = 0;
+ }
+
+ if (*size > 0) {
+ if (*message == 0) {
+ *message = malloc(*size);
+ if (*message == 0)
+ return MAD_FLOW_BREAK;
+ }
+
+ result = receive_io_blocking(fd, *message, *size);
+ }
+
+ /* throw away remainder of message */
+
+ while (actual && result == MAD_FLOW_CONTINUE) {
+ char sink[256];
+ unsigned int len;
+
+ len = actual > sizeof(sink) ? sizeof(sink) : actual;
+
+ result = receive_io_blocking(fd, sink, len);
+
+ actual -= len;
+ }
+ }
+
+ return result;
+}
+
+static
+enum mad_flow check_message(struct mad_decoder *decoder)
+{
+ enum mad_flow result;
+ void *message = 0;
+ unsigned int size;
+
+ result = receive(decoder->async.in, &message, &size);
+
+ if (result == MAD_FLOW_CONTINUE) {
+ if (decoder->message_func == 0)
+ size = 0;
+ else {
+ result = decoder->message_func(decoder->cb_data, message, &size);
+
+ if (result == MAD_FLOW_IGNORE ||
+ result == MAD_FLOW_BREAK)
+ size = 0;
+ }
+
+ if (send(decoder->async.out, message, size) != MAD_FLOW_CONTINUE)
+ result = MAD_FLOW_BREAK;
+ }
+
+ if (message)
+ free(message);
+
+ return result;
+}
+
+static
+enum mad_flow error_default(void *data, struct mad_stream *stream,
+ struct mad_frame *frame)
+{
+ int *bad_last_frame = data;
+
+ switch (stream->error) {
+ case MAD_ERROR_BADCRC:
+ if (*bad_last_frame)
+ mad_frame_mute(frame);
+ else
+ *bad_last_frame = 1;
+
+ return MAD_FLOW_IGNORE;
+
+ default:
+ return MAD_FLOW_CONTINUE;
+ }
+}
+
+static
+int run_sync(struct mad_decoder *decoder)
+{
+ enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
+ void *error_data;
+ int bad_last_frame = 0;
+ struct mad_stream *stream;
+ struct mad_frame *frame;
+ struct mad_synth *synth;
+ int result = 0;
+
+ if (decoder->input_func == 0)
+ return 0;
+
+ if (decoder->error_func) {
+ error_func = decoder->error_func;
+ error_data = decoder->cb_data;
+ }
+ else {
+ error_func = error_default;
+ error_data = &bad_last_frame;
+ }
+
+ stream = &decoder->sync->stream;
+ frame = &decoder->sync->frame;
+ synth = &decoder->sync->synth;
+
+ mad_stream_init(stream);
+ mad_frame_init(frame);
+ mad_synth_init(synth);
+
+ mad_stream_options(stream, decoder->options);
+
+ do {
+ switch (decoder->input_func(decoder->cb_data, stream)) {
+ case MAD_FLOW_STOP:
+ goto done;
+ case MAD_FLOW_BREAK:
+ goto fail;
+ case MAD_FLOW_IGNORE:
+ continue;
+ case MAD_FLOW_CONTINUE:
+ break;
+ }
+
+ while (1) {
+ if (decoder->mode == MAD_DECODER_MODE_ASYNC) {
+ switch (check_message(decoder)) {
+ case MAD_FLOW_IGNORE:
+ case MAD_FLOW_CONTINUE:
+ break;
+ case MAD_FLOW_BREAK:
+ goto fail;
+ case MAD_FLOW_STOP:
+ goto done;
+ }
+ }
+
+ if (decoder->header_func) {
+ if (mad_header_decode(&frame->header, stream) == -1) {
+ if (!MAD_RECOVERABLE(stream->error))
+ break;
+
+ switch (error_func(error_data, stream, frame)) {
+ case MAD_FLOW_STOP:
+ goto done;
+ case MAD_FLOW_BREAK:
+ goto fail;
+ case MAD_FLOW_IGNORE:
+ case MAD_FLOW_CONTINUE:
+ default:
+ continue;
+ }
+ }
+
+ switch (decoder->header_func(decoder->cb_data, &frame->header)) {
+ case MAD_FLOW_STOP:
+ goto done;
+ case MAD_FLOW_BREAK:
+ goto fail;
+ case MAD_FLOW_IGNORE:
+ continue;
+ case MAD_FLOW_CONTINUE:
+ break;
+ }
+ }
+
+ if (mad_frame_decode(frame, stream) == -1) {
+ if (!MAD_RECOVERABLE(stream->error))
+ break;
+
+ switch (error_func(error_data, stream, frame)) {
+ case MAD_FLOW_STOP:
+ goto done;
+ case MAD_FLOW_BREAK:
+ goto fail;
+ case MAD_FLOW_IGNORE:
+ break;
+ case MAD_FLOW_CONTINUE:
+ default:
+ continue;
+ }
+ }
+ else
+ bad_last_frame = 0;
+
+ if (decoder->filter_func) {
+ switch (decoder->filter_func(decoder->cb_data, frame)) {
+ case MAD_FLOW_STOP:
+ goto done;
+ case MAD_FLOW_BREAK:
+ goto fail;
+ case MAD_FLOW_IGNORE:
+ continue;
+ case MAD_FLOW_CONTINUE:
+ break;
+ }
+ }
+
+ mad_synth_frame(synth, frame);
+
+ if (decoder->output_func) {
+ switch (decoder->output_func(decoder->cb_data,
+ &frame->header, &synth->pcm)) {
+ case MAD_FLOW_STOP:
+ goto done;
+ case MAD_FLOW_BREAK:
+ goto fail;
+ case MAD_FLOW_IGNORE:
+ case MAD_FLOW_CONTINUE:
+ break;
+ }
+ }
+ }
+ }
+ while (stream->error == MAD_ERROR_BUFLEN);
+
+ fail:
+ result = -1;
+
+ done:
+ mad_synth_finish(synth);
+ mad_frame_finish(frame);
+ mad_stream_finish(stream);
+
+ return result;
+}
+
+static
+int run_async(struct mad_decoder *decoder)
+{
+ pid_t pid;
+ int ptoc[2], ctop[2], flags;
+
+ if (pipe(ptoc) == -1)
+ return -1;
+
+ if (pipe(ctop) == -1) {
+ close(ptoc[0]);
+ close(ptoc[1]);
+ return -1;
+ }
+
+ flags = fcntl(ptoc[0], F_GETFL);
+ if (flags == -1 ||
+ fcntl(ptoc[0], F_SETFL, flags | O_NONBLOCK) == -1) {
+ close(ctop[0]);
+ close(ctop[1]);
+ close(ptoc[0]);
+ close(ptoc[1]);
+ return -1;
+ }
+
+ pid = fork();
+ if (pid == -1) {
+ close(ctop[0]);
+ close(ctop[1]);
+ close(ptoc[0]);
+ close(ptoc[1]);
+ return -1;
+ }
+
+ decoder->async.pid = pid;
+
+ if (pid) {
+ /* parent */
+
+ close(ptoc[0]);
+ close(ctop[1]);
+
+ decoder->async.in = ctop[0];
+ decoder->async.out = ptoc[1];
+
+ return 0;
+ }
+
+ /* child */
+
+ close(ptoc[1]);
+ close(ctop[0]);
+
+ decoder->async.in = ptoc[0];
+ decoder->async.out = ctop[1];
+
+ _exit(run_sync(decoder));
+
+ /* not reached */
+ return -1;
+}
+
+int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode)
+{
+ int result;
+ int (*run)(struct mad_decoder *) = 0;
+
+ switch (decoder->mode = mode) {
+ case MAD_DECODER_MODE_SYNC:
+ run = run_sync;
+ break;
+
+ case MAD_DECODER_MODE_ASYNC:
+ run = run_async;
+ break;
+ }
+
+ if (run == 0)
+ return -1;
+
+ decoder->sync = malloc(sizeof(*decoder->sync));
+ if (decoder->sync == 0)
+ return -1;
+
+ result = run(decoder);
+
+ free(decoder->sync);
+ decoder->sync = 0;
+
+ return result;
+}
+
+int mad_decoder_message(struct mad_decoder *decoder,
+ void *message, unsigned int *len)
+{
+ if (decoder->mode != MAD_DECODER_MODE_ASYNC ||
+ send(decoder->async.out, message, *len) != MAD_FLOW_CONTINUE ||
+ receive(decoder->async.in, &message, len) != MAD_FLOW_CONTINUE)
+ return -1;
+
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmad/decoder.h b/core/multimedia/opieplayer/libmad/decoder.h
new file mode 100644
index 0000000..dbacc1a
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/decoder.h
@@ -0,0 +1,87 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_DECODER_H
+# define LIBMAD_DECODER_H
+
+# include "stream.h"
+# include "frame.h"
+# include "synth.h"
+
+enum mad_decoder_mode {
+ MAD_DECODER_MODE_SYNC = 0,
+ MAD_DECODER_MODE_ASYNC
+};
+
+enum mad_flow {
+ MAD_FLOW_CONTINUE = 0x0000,
+ MAD_FLOW_STOP = 0x0010,
+ MAD_FLOW_BREAK = 0x0011,
+ MAD_FLOW_IGNORE = 0x0020
+};
+
+struct mad_decoder {
+ enum mad_decoder_mode mode;
+
+ int options;
+
+ struct {
+ long pid;
+ int in;
+ int out;
+ } async;
+
+ struct {
+ struct mad_stream stream;
+ struct mad_frame frame;
+ struct mad_synth synth;
+ } *sync;
+
+ void *cb_data;
+
+ enum mad_flow (*input_func)(void *, struct mad_stream *);
+ enum mad_flow (*header_func)(void *, struct mad_header const *);
+ enum mad_flow (*filter_func)(void *, struct mad_frame *);
+ enum mad_flow (*output_func)(void *,
+ struct mad_header const *, struct mad_pcm *);
+ enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
+ enum mad_flow (*message_func)(void *, void *, unsigned int *);
+};
+
+void mad_decoder_init(struct mad_decoder *, void *,
+ enum mad_flow (*)(void *, struct mad_stream *),
+ enum mad_flow (*)(void *, struct mad_header const *),
+ enum mad_flow (*)(void *, struct mad_frame *),
+ enum mad_flow (*)(void *,
+ struct mad_header const *,
+ struct mad_pcm *),
+ enum mad_flow (*)(void *,
+ struct mad_stream *,
+ struct mad_frame *),
+ enum mad_flow (*)(void *, void *, unsigned int *));
+int mad_decoder_finish(struct mad_decoder *);
+
+# define mad_decoder_options(decoder, opts) ((decoder)->options = (opts))
+
+int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
+int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/fix_headers_problem b/core/multimedia/opieplayer/libmad/fix_headers_problem
new file mode 100755
index 0000000..6a5595c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/fix_headers_problem
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+#
+# This is needed to ensure the single build will work
+# The names of the header files clash with names of other headers in Qt/Palmtop
+#
+
+
+for file in *.c
+do
+
+ echo "fixing $file"
+ sed "s/global.h/libmad_global.h/" $file > $file.tmp
+ sed "s/version.h/libmad_version.h/" $file.tmp > $file
+ sed "s/config.h/libmad_config.h/" $file > $file.tmp
+ mv $file.tmp $file
+
+done
+
+
+mv global.h libmad_global.h
+mv version.h libmad_version.h
+mv config.h libmad_config.h
+
+
diff --git a/core/multimedia/opieplayer/libmad/fixed.c b/core/multimedia/opieplayer/libmad/fixed.c
new file mode 100644
index 0000000..be5c94e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/fixed.c
@@ -0,0 +1,37 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include "fixed.h"
+
+/*
+ * NAME: fixed->abs()
+ * DESCRIPTION: return absolute value of a fixed-point number
+ */
+mad_fixed_t mad_f_abs(mad_fixed_t x)
+{
+ return x < 0 ? -x : x;
+}
diff --git a/core/multimedia/opieplayer/libmad/fixed.h b/core/multimedia/opieplayer/libmad/fixed.h
new file mode 100644
index 0000000..00ade62
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/fixed.h
@@ -0,0 +1,413 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_FIXED_H
+# define LIBMAD_FIXED_H
+
+# if SIZEOF_INT >= 4
+typedef signed int mad_fixed_t;
+
+typedef signed int mad_fixed64hi_t;
+typedef unsigned int mad_fixed64lo_t;
+# else
+typedef signed long mad_fixed_t;
+
+typedef signed long mad_fixed64hi_t;
+typedef unsigned long mad_fixed64lo_t;
+# endif
+
+/*
+ * Fixed-point format: 0xABBBBBBB
+ * A == whole part (sign + 3 bits)
+ * B == fractional part (28 bits)
+ *
+ * Values are signed two's complement, so the effective range is:
+ * 0x80000000 to 0x7fffffff
+ * -8.0 to +7.9999999962747097015380859375
+ *
+ * The smallest representable value is:
+ * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
+ *
+ * 28 bits of fractional accuracy represent about
+ * 8.6 digits of decimal accuracy.
+ *
+ * Fixed-point numbers can be added or subtracted as normal
+ * integers, but multiplication requires shifting the 64-bit result
+ * from 56 fractional bits back to 28 (and rounding.)
+ *
+ * Changing the definition of MAD_F_FRACBITS is only partially
+ * supported, and must be done with care.
+ */
+
+# define MAD_F_FRACBITS 28
+
+# if MAD_F_FRACBITS == 28
+# define MAD_F(x) ((mad_fixed_t) (x##L))
+# else
+# if MAD_F_FRACBITS < 28
+# warning "MAD_F_FRACBITS < 28"
+# define MAD_F(x) ((mad_fixed_t) \
+ (((x##L) + \
+ (1L << (28 - MAD_F_FRACBITS - 1))) >> \
+ (28 - MAD_F_FRACBITS)))
+# elif MAD_F_FRACBITS > 28
+# error "MAD_F_FRACBITS > 28 not currently supported"
+# define MAD_F(x) ((mad_fixed_t) \
+ ((x##L) << (MAD_F_FRACBITS - 28)))
+# endif
+# endif
+
+# define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
+# define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
+
+# define MAD_F_ONE MAD_F(0x10000000)
+
+# define mad_f_tofixed(x) ((mad_fixed_t) \
+ ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
+# define mad_f_todouble(x) ((double) \
+ ((x) / (double) (1L << MAD_F_FRACBITS)))
+
+# define mad_f_intpart(x) ((x) >> MAD_F_FRACBITS)
+# define mad_f_fracpart(x) ((x) & ((1L << MAD_F_FRACBITS) - 1))
+ /* (x should be positive) */
+
+# define mad_f_fromint(x) ((x) << MAD_F_FRACBITS)
+
+# define mad_f_add(x, y) ((x) + (y))
+# define mad_f_sub(x, y) ((x) - (y))
+
+# if defined(FPM_64BIT)
+
+/*
+ * This version should be the most accurate if 64-bit (long long) types are
+ * supported by the compiler, although it may not be the most efficient.
+ */
+# if defined(OPT_ACCURACY)
+# define mad_f_mul(x, y) \
+ ((mad_fixed_t) \
+ ((((signed long long) (x) * (y)) + \
+ (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
+# else
+# define mad_f_mul(x, y) \
+ ((mad_fixed_t) (((signed long long) (x) * (y)) >> MAD_F_SCALEBITS))
+# endif
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- Intel --------------------------------------------------------------- */
+
+# elif defined(FPM_INTEL)
+
+/*
+ * This Intel version is fast and accurate; the disposition of the least
+ * significant bit depends on OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("imull %3" \
+ : "=a" (lo), "=d" (hi) \
+ : "%a" (x), "rm" (y) \
+ : "cc")
+
+# if defined(OPT_ACCURACY)
+/*
+ * This gives best accuracy but is not very fast.
+ */
+# define MAD_F_MLA(hi, lo, x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ MAD_F_MLX(__hi, __lo, (x), (y)); \
+ asm ("addl %2,%0\n\t" \
+ "adcl %3,%1" \
+ : "=rm" (lo), "=rm" (hi) \
+ : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi) \
+ : "cc"); \
+ })
+# endif /* OPT_ACCURACY */
+
+# if defined(OPT_ACCURACY)
+/*
+ * Surprisingly, this is faster than SHRD followed by ADC.
+ */
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed64hi_t __hi_; \
+ mad_fixed64lo_t __lo_; \
+ mad_fixed_t __result; \
+ asm ("addl %4,%2\n\t" \
+ "adcl %5,%3" \
+ : "=rm" (__lo_), "=rm" (__hi_) \
+ : "0" (lo), "1" (hi), \
+ "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0) \
+ : "cc"); \
+ asm ("shrdl %3,%2,%1" \
+ : "=rm" (__result) \
+ : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+# else
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ asm ("shrdl %3,%2,%1" \
+ : "=rm" (__result) \
+ : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+# endif /* OPT_ACCURACY */
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- ARM ----------------------------------------------------------------- */
+
+# elif defined(FPM_ARM)
+
+/*
+ * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
+ * least significant bit is properly rounded at no CPU cycle cost!
+ */
+# if 1
+/*
+ * There's a bug somewhere, possibly in the compiler, that sometimes makes
+ * this necessary instead of the default implementation via MAD_F_MLX and
+ * mad_f_scale64. It may be related to the use (or lack) of
+ * -finline-functions and/or -fstrength-reduce.
+ *
+ * This is also apparently faster than MAD_F_MLX/mad_f_scale64.
+ */
+# define mad_f_mul(x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ mad_fixed_t __result; \
+ asm ("smull %0, %1, %3, %4\n\t" \
+ "movs %0, %0, lsr %5\n\t" \
+ "adc %2, %0, %1, lsl %6" \
+ : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
+ : "%r" (x), "r" (y), \
+ "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+# endif
+
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("smull %0, %1, %2, %3" \
+ : "=&r" (lo), "=&r" (hi) \
+ : "%r" (x), "r" (y))
+
+# define MAD_F_MLA(hi, lo, x, y) \
+ asm ("smlal %0, %1, %2, %3" \
+ : "+r" (lo), "+r" (hi) \
+ : "%r" (x), "r" (y))
+
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ asm ("movs %0, %1, lsr %3\n\t" \
+ "adc %0, %0, %2, lsl %4" \
+ : "=r" (__result) \
+ : "r" (lo), "r" (hi), \
+ "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- MIPS ---------------------------------------------------------------- */
+
+# elif defined(FPM_MIPS)
+
+/*
+ * This MIPS version is fast and accurate; the disposition of the least
+ * significant bit depends on OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("mult %2,%3" \
+ : "=l" (lo), "=h" (hi) \
+ : "%r" (x), "r" (y))
+
+# if defined(HAVE_MADD_ASM)
+# define MAD_F_MLA(hi, lo, x, y) \
+ asm ("madd %2,%3" \
+ : "+l" (lo), "+h" (hi) \
+ : "%r" (x), "r" (y))
+# elif defined(HAVE_MADD16_ASM)
+/*
+ * This loses significant accuracy due to the 16-bit integer limit in the
+ * multiply/accumulate instruction.
+ */
+# define MAD_F_ML0(hi, lo, x, y) \
+ asm ("mult %2,%3" \
+ : "=l" (lo), "=h" (hi) \
+ : "%r" ((x) >> 12), "r" ((y) >> 16))
+# define MAD_F_MLA(hi, lo, x, y) \
+ asm ("madd16 %2,%3" \
+ : "+l" (lo), "+h" (hi) \
+ : "%r" ((x) >> 12), "r" ((y) >> 16))
+# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
+# endif
+
+# if defined(OPT_SPEED)
+# define mad_f_scale64(hi, lo) \
+ ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+# endif
+
+/* --- SPARC --------------------------------------------------------------- */
+
+# elif defined(FPM_SPARC)
+
+/*
+ * This SPARC V8 version is fast and accurate; the disposition of the least
+ * significant bit depends on OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("smul %2, %3, %0\n\t" \
+ "rd %%y, %1" \
+ : "=r" (lo), "=r" (hi) \
+ : "%r" (x), "rI" (y))
+
+/* --- PowerPC ------------------------------------------------------------- */
+
+# elif defined(FPM_PPC)
+
+/*
+ * This PowerPC version is tuned for the 4xx embedded processors. It is
+ * effectively a tuned version of FPM_64BIT. It is a little faster and just
+ * as accurate. The disposition of the least significant bit depends on
+ * OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("mulhw %1, %2, %3\n\t" \
+ "mullw %0, %2, %3" \
+ : "=&r" (lo), "=&r" (hi) \
+ : "%r" (x), "r" (y))
+
+# define MAD_F_MLA(hi, lo, x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ MAD_F_MLX(__hi, __lo, (x), (y)); \
+ asm ("addc %0, %2, %3\n\t" \
+ "adde %1, %4, %5" \
+ : "=r" (lo), "=r" (hi) \
+ : "%r" (__lo), "0" (lo), "%r" (__hi), "1" (hi)); \
+ })
+
+# if defined(OPT_ACCURACY)
+/*
+ * This is accurate and ~2 - 2.5 times slower than the unrounded version.
+ *
+ * The __volatile__ improves the generated code by another 5% (fewer spills
+ * to memory); eventually they should be removed.
+ */
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ mad_fixed64hi_t __hi_; \
+ mad_fixed64lo_t __lo_; \
+ asm __volatile__ ("addc %0, %2, %4\n\t" \
+ "addze %1, %3" \
+ : "=r" (__lo_), "=r" (__hi_) \
+ : "r" (lo), "r" (hi), "r" (1 << (MAD_F_SCALEBITS - 1))); \
+ asm __volatile__ ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
+ "rlwimi %0, %1,32-%3,%3,31" \
+ : "=&r" (__result) \
+ : "r" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)); \
+ __result; \
+ })
+# else
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ asm ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
+ "rlwimi %0, %1,32-%3,%3,31" \
+ : "=r" (__result) \
+ : "r" (lo), "r" (hi), "I" (MAD_F_SCALEBITS)); \
+ __result; \
+ })
+# endif /* OPT_ACCURACY */
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- Default ------------------------------------------------------------- */
+
+# elif defined(FPM_DEFAULT)
+
+/*
+ * This version is the most portable but it loses significant accuracy.
+ * Furthermore, accuracy is biased against the second argument, so care
+ * should be taken when ordering operands.
+ *
+ * The scale factors are constant as this is not used with SSO.
+ *
+ * Pre-rounding is required to stay within the limits of compliance.
+ */
+# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
+ (((y) + (1L << 15)) >> 16))
+
+/* ------------------------------------------------------------------------- */
+
+# else
+# error "no FPM selected"
+# endif
+
+/* default implementations */
+
+# if !defined(mad_f_mul)
+# define mad_f_mul(x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ MAD_F_MLX(__hi, __lo, (x), (y)); \
+ mad_f_scale64(__hi, __lo); \
+ })
+# endif
+
+# if !defined(MAD_F_MLA)
+# define MAD_F_ML0(hi, lo, x, y) ((lo) = mad_f_mul((x), (y)))
+# define MAD_F_MLA(hi, lo, x, y) ((lo) += mad_f_mul((x), (y)))
+# define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
+# endif
+
+# if !defined(MAD_F_ML0)
+# define MAD_F_ML0(hi, lo, x, y) MAD_F_MLX((hi), (lo), (x), (y))
+# endif
+
+# if !defined(MAD_F_MLZ)
+# define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
+# endif
+
+# if !defined(mad_f_scale64)
+# if defined(OPT_ACCURACY)
+# define mad_f_scale64(hi, lo) \
+ ((((mad_fixed_t) \
+ (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
+ ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
+# else
+# define mad_f_scale64(hi, lo) \
+ ((mad_fixed_t) \
+ (((hi) << (32 - MAD_F_SCALEBITS)) | \
+ ((lo) >> MAD_F_SCALEBITS)))
+# endif
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+# endif
+
+/* miscellaneous C routines */
+
+mad_fixed_t mad_f_abs(mad_fixed_t);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/frame.c b/core/multimedia/opieplayer/libmad/frame.c
new file mode 100644
index 0000000..4ebb80c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/frame.c
@@ -0,0 +1,499 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include <stdlib.h>
+
+# include "bit.h"
+# include "stream.h"
+# include "frame.h"
+# include "timer.h"
+# include "layer12.h"
+# include "layer3.h"
+
+static
+unsigned long const bitrate_table[5][15] = {
+ /* MPEG-1 */
+ { 0, 32000, 64000, 96000, 128000, 160000, 192000, 224000, /* Layer I */
+ 256000, 288000, 320000, 352000, 384000, 416000, 448000 },
+ { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer II */
+ 128000, 160000, 192000, 224000, 256000, 320000, 384000 },
+ { 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, /* Layer III */
+ 112000, 128000, 160000, 192000, 224000, 256000, 320000 },
+
+ /* MPEG-2 LSF */
+ { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer I */
+ 128000, 144000, 160000, 176000, 192000, 224000, 256000 },
+ { 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, /* Layers */
+ 64000, 80000, 96000, 112000, 128000, 144000, 160000 } /* II & III */
+};
+
+static
+unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };
+
+static
+int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
+ mad_layer_I,
+ mad_layer_II,
+ mad_layer_III
+};
+
+/*
+ * NAME: header->init()
+ * DESCRIPTION: initialize header struct
+ */
+void mad_header_init(struct mad_header *header)
+{
+ header->layer = 0;
+ header->mode = 0;
+ header->mode_extension = 0;
+ header->emphasis = 0;
+
+ header->bitrate = 0;
+ header->samplerate = 0;
+
+ header->crc_check = 0;
+ header->crc_target = 0;
+
+ header->flags = 0;
+ header->private_bits = 0;
+
+ header->duration = mad_timer_zero;
+}
+
+/*
+ * NAME: frame->init()
+ * DESCRIPTION: initialize frame struct
+ */
+void mad_frame_init(struct mad_frame *frame)
+{
+ mad_header_init(&frame->header);
+
+ frame->options = 0;
+
+ frame->overlap = 0;
+ mad_frame_mute(frame);
+}
+
+/*
+ * NAME: frame->finish()
+ * DESCRIPTION: deallocate any dynamic memory associated with frame
+ */
+void mad_frame_finish(struct mad_frame *frame)
+{
+ mad_header_finish(&frame->header);
+
+ if (frame->overlap) {
+ free(frame->overlap);
+ frame->overlap = 0;
+ }
+}
+
+/*
+ * NAME: decode_header()
+ * DESCRIPTION: read header data and following CRC word
+ */
+static
+int decode_header(struct mad_header *header, struct mad_stream *stream)
+{
+ unsigned int index;
+
+ header->flags = 0;
+ header->private_bits = 0;
+
+ /* header() */
+
+ /* syncword */
+ mad_bit_skip(&stream->ptr, 11);
+
+ /* MPEG 2.5 indicator (really part of syncword) */
+ if (mad_bit_read(&stream->ptr, 1) == 0)
+ header->flags |= MAD_FLAG_MPEG_2_5_EXT;
+
+ /* ID */
+ if (mad_bit_read(&stream->ptr, 1) == 0)
+ header->flags |= MAD_FLAG_LSF_EXT;
+ else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
+ stream->error = MAD_ERROR_LOSTSYNC;
+ return -1;
+ }
+
+ /* layer */
+ header->layer = 4 - mad_bit_read(&stream->ptr, 2);
+
+ if (header->layer == 4) {
+ stream->error = MAD_ERROR_BADLAYER;
+ return -1;
+ }
+
+ /* protection_bit */
+ if (mad_bit_read(&stream->ptr, 1) == 0) {
+ header->flags |= MAD_FLAG_PROTECTION;
+ header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
+ }
+
+ /* bitrate_index */
+ index = mad_bit_read(&stream->ptr, 4);
+
+ if (index == 15) {
+ stream->error = MAD_ERROR_BADBITRATE;
+ return -1;
+ }
+
+ if (header->flags & MAD_FLAG_LSF_EXT)
+ header->bitrate = bitrate_table[3 + (header->layer >> 1)][index];
+ else
+ header->bitrate = bitrate_table[header->layer - 1][index];
+
+ /* sampling_frequency */
+ index = mad_bit_read(&stream->ptr, 2);
+
+ if (index == 3) {
+ stream->error = MAD_ERROR_BADSAMPLERATE;
+ return -1;
+ }
+
+ header->samplerate = samplerate_table[index];
+
+ if (header->flags & MAD_FLAG_LSF_EXT) {
+ header->samplerate /= 2;
+
+ if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
+ header->samplerate /= 2;
+ }
+
+ /* padding_bit */
+ if (mad_bit_read(&stream->ptr, 1))
+ header->flags |= MAD_FLAG_PADDING;
+
+ /* private_bit */
+ if (mad_bit_read(&stream->ptr, 1))
+ header->private_bits |= MAD_PRIVATE_HEADER;
+
+ /* mode */
+ header->mode = 3 - mad_bit_read(&stream->ptr, 2);
+
+ /* mode_extension */
+ header->mode_extension = mad_bit_read(&stream->ptr, 2);
+
+ /* copyright */
+ if (mad_bit_read(&stream->ptr, 1))
+ header->flags |= MAD_FLAG_COPYRIGHT;
+
+ /* original/copy */
+ if (mad_bit_read(&stream->ptr, 1))
+ header->flags |= MAD_FLAG_ORIGINAL;
+
+ /* emphasis */
+ header->emphasis = mad_bit_read(&stream->ptr, 2);
+
+ if (header->emphasis == 2) {
+ stream->error = MAD_ERROR_BADEMPHASIS;
+ return -1;
+ }
+
+ /* error_check() */
+
+ /* crc_check */
+ if (header->flags & MAD_FLAG_PROTECTION)
+ header->crc_target = mad_bit_read(&stream->ptr, 16);
+
+ return 0;
+}
+
+/*
+ * NAME: free_bitrate()
+ * DESCRIPTION: attempt to discover the bitstream's free bitrate
+ */
+static
+int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
+{
+ struct mad_bitptr keep_ptr;
+ unsigned long rate = 0;
+ unsigned int pad_slot, slots_per_frame;
+ unsigned char const *ptr = 0;
+
+ keep_ptr = stream->ptr;
+
+ pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
+ slots_per_frame = (header->layer == MAD_LAYER_III &&
+ (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
+
+ while (mad_stream_sync(stream) == 0) {
+ struct mad_stream peek_stream;
+ struct mad_header peek_header;
+
+ peek_stream = *stream;
+ peek_header = *header;
+
+ if (decode_header(&peek_header, &peek_stream) == 0 &&
+ peek_header.layer == header->layer &&
+ peek_header.samplerate == header->samplerate) {
+ unsigned int N;
+
+ ptr = mad_bit_nextbyte(&stream->ptr);
+
+ N = ptr - stream->this_frame;
+
+ if (header->layer == MAD_LAYER_I) {
+ rate = (unsigned long) header->samplerate *
+ (N - 4 * pad_slot + 4) / 48 / 1000;
+ }
+ else {
+ rate = (unsigned long) header->samplerate *
+ (N - pad_slot + 1) / slots_per_frame / 1000;
+ }
+
+ if (rate >= 8)
+ break;
+ }
+
+ mad_bit_skip(&stream->ptr, 8);
+ }
+
+ stream->ptr = keep_ptr;
+
+ if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
+ stream->error = MAD_ERROR_LOSTSYNC;
+ return -1;
+ }
+
+ stream->freerate = rate * 1000;
+
+# if 0 && defined(DEBUG)
+ fprintf(stderr, "free bitrate == %lu\n", stream->freerate);
+# endif
+
+ return 0;
+}
+
+/*
+ * NAME: header->decode()
+ * DESCRIPTION: read the next frame header from the stream
+ */
+int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
+{
+ register unsigned char const *ptr, *end;
+ unsigned int pad_slot, N;
+
+ ptr = stream->next_frame;
+ end = stream->bufend;
+
+ if (ptr == 0) {
+ stream->error = MAD_ERROR_BUFPTR;
+ goto fail;
+ }
+
+ /* stream skip */
+ if (stream->skiplen) {
+ if (!stream->sync)
+ ptr = stream->this_frame;
+
+ if (end - ptr < stream->skiplen) {
+ stream->skiplen -= end - ptr;
+ stream->next_frame = end;
+
+ stream->error = MAD_ERROR_BUFLEN;
+ goto fail;
+ }
+
+ ptr += stream->skiplen;
+ stream->skiplen = 0;
+
+ stream->sync = 1;
+ }
+
+ sync:
+ /* synchronize */
+ if (stream->sync) {
+ if (end - ptr < MAD_BUFFER_GUARD) {
+ stream->next_frame = ptr;
+
+ stream->error = MAD_ERROR_BUFLEN;
+ goto fail;
+ }
+ else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
+ /* mark point where frame sync word was expected */
+ stream->this_frame = ptr;
+ stream->next_frame = ptr + 1;
+
+ stream->error = MAD_ERROR_LOSTSYNC;
+ goto fail;
+ }
+ }
+ else {
+ mad_bit_init(&stream->ptr, ptr);
+
+ if (mad_stream_sync(stream) == -1) {
+ if (end - stream->next_frame >= MAD_BUFFER_GUARD)
+ stream->next_frame = end - MAD_BUFFER_GUARD;
+
+ stream->error = MAD_ERROR_BUFLEN;
+ goto fail;
+ }
+
+ ptr = mad_bit_nextbyte(&stream->ptr);
+ }
+
+ /* begin processing */
+ stream->this_frame = ptr;
+ stream->next_frame = ptr + 1; /* possibly bogus sync word */
+
+ mad_bit_init(&stream->ptr, stream->this_frame);
+
+ if (decode_header(header, stream) == -1)
+ goto fail;
+
+ /* calculate frame duration */
+ mad_timer_set(&header->duration, 0,
+ 32 * MAD_NSBSAMPLES(header), header->samplerate);
+
+ /* calculate free bit rate */
+ if (header->bitrate == 0) {
+ if ((!stream->sync || !stream->freerate) &&
+ free_bitrate(stream, header) == -1)
+ goto fail;
+
+ header->bitrate = stream->freerate;
+ header->flags |= MAD_FLAG_FREEFORMAT;
+ }
+
+ /* calculate beginning of next frame */
+ pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
+
+ if (header->layer == MAD_LAYER_I)
+ N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
+ else {
+ unsigned int slots_per_frame;
+
+ slots_per_frame = (header->layer == MAD_LAYER_III &&
+ (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
+
+ N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
+ }
+
+ /* verify there is enough data left in buffer to decode this frame */
+ if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
+ stream->next_frame = stream->this_frame;
+
+ stream->error = MAD_ERROR_BUFLEN;
+ goto fail;
+ }
+
+ stream->next_frame = stream->this_frame + N;
+
+ if (!stream->sync) {
+ /* check that a valid frame header follows this frame */
+
+ ptr = stream->next_frame;
+ if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
+ ptr = stream->next_frame = stream->this_frame + 1;
+ goto sync;
+ }
+
+ stream->sync = 1;
+ }
+
+ header->flags |= MAD_FLAG_INCOMPLETE;
+
+ return 0;
+
+ fail:
+ stream->sync = 0;
+
+ return -1;
+}
+
+/*
+ * NAME: frame->decode()
+ * DESCRIPTION: decode a single frame from a bitstream
+ */
+int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
+{
+ frame->options = stream->options;
+
+ /* header() */
+ /* error_check() */
+
+ if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
+ mad_header_decode(&frame->header, stream) == -1)
+ goto fail;
+
+ /* audio_data() */
+
+ frame->header.flags &= ~MAD_FLAG_INCOMPLETE;
+
+ if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
+ if (!MAD_RECOVERABLE(stream->error))
+ stream->next_frame = stream->this_frame;
+
+ goto fail;
+ }
+
+ /* ancillary_data() */
+
+ if (frame->header.layer != MAD_LAYER_III) {
+ struct mad_bitptr next_frame;
+
+ mad_bit_init(&next_frame, stream->next_frame);
+
+ stream->anc_ptr = stream->ptr;
+ stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
+
+ mad_bit_finish(&next_frame);
+ }
+
+ return 0;
+
+ fail:
+ stream->anc_bitlen = 0;
+ return -1;
+}
+
+/*
+ * NAME: frame->mute()
+ * DESCRIPTION: zero all subband values so the frame becomes silent
+ */
+void mad_frame_mute(struct mad_frame *frame)
+{
+ unsigned int s, sb;
+
+ for (s = 0; s < 36; ++s) {
+ for (sb = 0; sb < 32; ++sb) {
+ frame->sbsample[0][s][sb] =
+ frame->sbsample[1][s][sb] = 0;
+ }
+ }
+
+ if (frame->overlap) {
+ for (s = 0; s < 18; ++s) {
+ for (sb = 0; sb < 32; ++sb) {
+ (*frame->overlap)[0][sb][s] =
+ (*frame->overlap)[1][sb][s] = 0;
+ }
+ }
+ }
+}
diff --git a/core/multimedia/opieplayer/libmad/frame.h b/core/multimedia/opieplayer/libmad/frame.h
new file mode 100644
index 0000000..e88d0c8
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/frame.h
@@ -0,0 +1,115 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_FRAME_H
+# define LIBMAD_FRAME_H
+
+# include "fixed.h"
+# include "timer.h"
+# include "stream.h"
+
+enum mad_layer {
+ MAD_LAYER_I = 1, /* Layer I */
+ MAD_LAYER_II = 2, /* Layer II */
+ MAD_LAYER_III = 3 /* Layer III */
+};
+
+enum mad_mode {
+ MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
+ MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
+ MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
+ MAD_MODE_STEREO = 3 /* normal LR stereo */
+};
+
+enum mad_emphasis {
+ MAD_EMPHASIS_NONE = 0, /* no emphasis */
+ MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
+ MAD_EMPHASIS_CCITT_J_17 = 3 /* CCITT J.17 emphasis */
+};
+
+struct mad_frame {
+ struct mad_header {
+ enum mad_layer layer; /* audio layer (1, 2, or 3) */
+ enum mad_mode mode; /* channel mode (see above) */
+ int mode_extension; /* additional mode info */
+ enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
+
+ unsigned long bitrate; /* stream bitrate (bps) */
+ unsigned int samplerate; /* sampling frequency (Hz) */
+
+ unsigned short crc_check; /* frame CRC accumulator */
+ unsigned short crc_target; /* final target CRC checksum */
+
+ int flags; /* flags (see below) */
+ int private_bits; /* private bits (see below) */
+
+ mad_timer_t duration; /* audio playing time of frame */
+ } header;
+
+ int options; /* decoding options (from stream) */
+
+ mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */
+ mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */
+};
+
+# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
+# define MAD_NSBSAMPLES(header) \
+ ((header)->layer == MAD_LAYER_I ? 12 : \
+ (((header)->layer == MAD_LAYER_III && \
+ ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
+
+enum {
+ MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */
+ MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */
+
+ MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */
+ MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */
+ MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */
+ MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */
+
+ MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */
+ MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */
+ MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */
+
+ MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */
+ MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */
+ MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */
+};
+
+enum {
+ MAD_PRIVATE_HEADER = 0x0100, /* header private bit */
+ MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */
+};
+
+void mad_header_init(struct mad_header *);
+
+# define mad_header_finish(header) /* nothing */
+
+int mad_header_decode(struct mad_header *, struct mad_stream *);
+
+void mad_frame_init(struct mad_frame *);
+void mad_frame_finish(struct mad_frame *);
+
+int mad_frame_decode(struct mad_frame *, struct mad_stream *);
+
+void mad_frame_mute(struct mad_frame *);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/huffman.c b/core/multimedia/opieplayer/libmad/huffman.c
new file mode 100644
index 0000000..8ec9499
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/huffman.c
@@ -0,0 +1,3087 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include "huffman.h"
+
+/*
+ * These are the Huffman code words for Layer III.
+ * The data for these tables are derived from Table B.7 of ISO/IEC 11172-3.
+ *
+ * These tables support decoding up to 4 Huffman code bits at a time.
+ */
+
+# define V(v, w, x, y, hlen) { { 1, hlen, v, w, x, y } }
+# define PTR(offs, bits) { ptr: { 0, bits, offs } }
+
+static
+union huffquad const hufftabA[] = {
+ /* 0000 */ PTR(16, 2),
+ /* 0001 */ PTR(20, 2),
+ /* 0010 */ PTR(24, 1),
+ /* 0011 */ PTR(26, 1),
+ /* 0100 */ V(0, 0, 1, 0, 4),
+ /* 0101 */ V(0, 0, 0, 1, 4),
+ /* 0110 */ V(0, 1, 0, 0, 4),
+ /* 0111 */ V(1, 0, 0, 0, 4),
+ /* 1000 */ V(0, 0, 0, 0, 1),
+ /* 1001 */ V(0, 0, 0, 0, 1),
+ /* 1010 */ V(0, 0, 0, 0, 1),
+ /* 1011 */ V(0, 0, 0, 0, 1),
+ /* 1100 */ V(0, 0, 0, 0, 1),
+ /* 1101 */ V(0, 0, 0, 0, 1),
+ /* 1110 */ V(0, 0, 0, 0, 1),
+ /* 1111 */ V(0, 0, 0, 0, 1),
+
+ /* 0000 ... */
+ /* 00 */ V(1, 0, 1, 1, 2), /* 16 */
+ /* 01 */ V(1, 1, 1, 1, 2),
+ /* 10 */ V(1, 1, 0, 1, 2),
+ /* 11 */ V(1, 1, 1, 0, 2),
+
+ /* 0001 ... */
+ /* 00 */ V(0, 1, 1, 1, 2), /* 20 */
+ /* 01 */ V(0, 1, 0, 1, 2),
+ /* 10 */ V(1, 0, 0, 1, 1),
+ /* 11 */ V(1, 0, 0, 1, 1),
+
+ /* 0010 ... */
+ /* 0 */ V(0, 1, 1, 0, 1), /* 24 */
+ /* 1 */ V(0, 0, 1, 1, 1),
+
+ /* 0011 ... */
+ /* 0 */ V(1, 0, 1, 0, 1), /* 26 */
+ /* 1 */ V(1, 1, 0, 0, 1)
+};
+
+static
+union huffquad const hufftabB[] = {
+ /* 0000 */ V(1, 1, 1, 1, 4),
+ /* 0001 */ V(1, 1, 1, 0, 4),
+ /* 0010 */ V(1, 1, 0, 1, 4),
+ /* 0011 */ V(1, 1, 0, 0, 4),
+ /* 0100 */ V(1, 0, 1, 1, 4),
+ /* 0101 */ V(1, 0, 1, 0, 4),
+ /* 0110 */ V(1, 0, 0, 1, 4),
+ /* 0111 */ V(1, 0, 0, 0, 4),
+ /* 1000 */ V(0, 1, 1, 1, 4),
+ /* 1001 */ V(0, 1, 1, 0, 4),
+ /* 1010 */ V(0, 1, 0, 1, 4),
+ /* 1011 */ V(0, 1, 0, 0, 4),
+ /* 1100 */ V(0, 0, 1, 1, 4),
+ /* 1101 */ V(0, 0, 1, 0, 4),
+ /* 1110 */ V(0, 0, 0, 1, 4),
+ /* 1111 */ V(0, 0, 0, 0, 4)
+};
+
+# undef V
+# undef PTR
+
+# define V(x, y, hlen) { { 1, hlen, x, y } }
+# define PTR(offs, bits) { ptr: { 0, bits, offs } }
+
+static
+union huffpair const hufftab0[] = {
+ /* */ V(0, 0, 0)
+};
+
+static
+union huffpair const hufftab1[] = {
+ /* 000 */ V(1, 1, 3),
+ /* 001 */ V(0, 1, 3),
+ /* 010 */ V(1, 0, 2),
+ /* 011 */ V(1, 0, 2),
+ /* 100 */ V(0, 0, 1),
+ /* 101 */ V(0, 0, 1),
+ /* 110 */ V(0, 0, 1),
+ /* 111 */ V(0, 0, 1)
+};
+
+static
+union huffpair const hufftab2[] = {
+ /* 000 */ PTR(8, 3),
+ /* 001 */ V(1, 1, 3),
+ /* 010 */ V(0, 1, 3),
+ /* 011 */ V(1, 0, 3),
+ /* 100 */ V(0, 0, 1),
+ /* 101 */ V(0, 0, 1),
+ /* 110 */ V(0, 0, 1),
+ /* 111 */ V(0, 0, 1),
+
+ /* 000 ... */
+ /* 000 */ V(2, 2, 3), /* 8 */
+ /* 001 */ V(0, 2, 3),
+ /* 010 */ V(1, 2, 2),
+ /* 011 */ V(1, 2, 2),
+ /* 100 */ V(2, 1, 2),
+ /* 101 */ V(2, 1, 2),
+ /* 110 */ V(2, 0, 2),
+ /* 111 */ V(2, 0, 2)
+};
+
+static
+union huffpair const hufftab3[] = {
+ /* 000 */ PTR(8, 3),
+ /* 001 */ V(1, 0, 3),
+ /* 010 */ V(1, 1, 2),
+ /* 011 */ V(1, 1, 2),
+ /* 100 */ V(0, 1, 2),
+ /* 101 */ V(0, 1, 2),
+ /* 110 */ V(0, 0, 2),
+ /* 111 */ V(0, 0, 2),
+
+ /* 000 ... */
+ /* 000 */ V(2, 2, 3), /* 8 */
+ /* 001 */ V(0, 2, 3),
+ /* 010 */ V(1, 2, 2),
+ /* 011 */ V(1, 2, 2),
+ /* 100 */ V(2, 1, 2),
+ /* 101 */ V(2, 1, 2),
+ /* 110 */ V(2, 0, 2),
+ /* 111 */ V(2, 0, 2)
+};
+
+static
+union huffpair const hufftab5[] = {
+ /* 000 */ PTR(8, 4),
+ /* 001 */ V(1, 1, 3),
+ /* 010 */ V(0, 1, 3),
+ /* 011 */ V(1, 0, 3),
+ /* 100 */ V(0, 0, 1),
+ /* 101 */ V(0, 0, 1),
+ /* 110 */ V(0, 0, 1),
+ /* 111 */ V(0, 0, 1),
+
+ /* 000 ... */
+ /* 0000 */ PTR(24, 1), /* 8 */
+ /* 0001 */ V(3, 2, 4),
+ /* 0010 */ V(3, 1, 3),
+ /* 0011 */ V(3, 1, 3),
+ /* 0100 */ V(1, 3, 4),
+ /* 0101 */ V(0, 3, 4),
+ /* 0110 */ V(3, 0, 4),
+ /* 0111 */ V(2, 2, 4),
+ /* 1000 */ V(1, 2, 3),
+ /* 1001 */ V(1, 2, 3),
+ /* 1010 */ V(2, 1, 3),
+ /* 1011 */ V(2, 1, 3),
+ /* 1100 */ V(0, 2, 3),
+ /* 1101 */ V(0, 2, 3),
+ /* 1110 */ V(2, 0, 3),
+ /* 1111 */ V(2, 0, 3),
+
+ /* 000 0000 ... */
+ /* 0 */ V(3, 3, 1), /* 24 */
+ /* 1 */ V(2, 3, 1)
+};
+
+static
+union huffpair const hufftab6[] = {
+ /* 0000 */ PTR(16, 3),
+ /* 0001 */ PTR(24, 1),
+ /* 0010 */ PTR(26, 1),
+ /* 0011 */ V(1, 2, 4),
+ /* 0100 */ V(2, 1, 4),
+ /* 0101 */ V(2, 0, 4),
+ /* 0110 */ V(0, 1, 3),
+ /* 0111 */ V(0, 1, 3),
+ /* 1000 */ V(1, 1, 2),
+ /* 1001 */ V(1, 1, 2),
+ /* 1010 */ V(1, 1, 2),
+ /* 1011 */ V(1, 1, 2),
+ /* 1100 */ V(1, 0, 3),
+ /* 1101 */ V(1, 0, 3),
+ /* 1110 */ V(0, 0, 3),
+ /* 1111 */ V(0, 0, 3),
+
+ /* 0000 ... */
+ /* 000 */ V(3, 3, 3), /* 16 */
+ /* 001 */ V(0, 3, 3),
+ /* 010 */ V(2, 3, 2),
+ /* 011 */ V(2, 3, 2),
+ /* 100 */ V(3, 2, 2),
+ /* 101 */ V(3, 2, 2),
+ /* 110 */ V(3, 0, 2),
+ /* 111 */ V(3, 0, 2),
+
+ /* 0001 ... */
+ /* 0 */ V(1, 3, 1), /* 24 */
+ /* 1 */ V(3, 1, 1),
+
+ /* 0010 ... */
+ /* 0 */ V(2, 2, 1), /* 26 */
+ /* 1 */ V(0, 2, 1)
+};
+
+static
+union huffpair const hufftab7[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 2),
+ /* 0011 */ V(1, 1, 4),
+ /* 0100 */ V(0, 1, 3),
+ /* 0101 */ V(0, 1, 3),
+ /* 0110 */ V(1, 0, 3),
+ /* 0111 */ V(1, 0, 3),
+ /* 1000 */ V(0, 0, 1),
+ /* 1001 */ V(0, 0, 1),
+ /* 1010 */ V(0, 0, 1),
+ /* 1011 */ V(0, 0, 1),
+ /* 1100 */ V(0, 0, 1),
+ /* 1101 */ V(0, 0, 1),
+ /* 1110 */ V(0, 0, 1),
+ /* 1111 */ V(0, 0, 1),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(52, 2), /* 16 */
+ /* 0001 */ PTR(56, 1),
+ /* 0010 */ PTR(58, 1),
+ /* 0011 */ V(1, 5, 4),
+ /* 0100 */ V(5, 1, 4),
+ /* 0101 */ PTR(60, 1),
+ /* 0110 */ V(5, 0, 4),
+ /* 0111 */ PTR(62, 1),
+ /* 1000 */ V(2, 4, 4),
+ /* 1001 */ V(4, 2, 4),
+ /* 1010 */ V(1, 4, 3),
+ /* 1011 */ V(1, 4, 3),
+ /* 1100 */ V(4, 1, 3),
+ /* 1101 */ V(4, 1, 3),
+ /* 1110 */ V(4, 0, 3),
+ /* 1111 */ V(4, 0, 3),
+
+ /* 0001 ... */
+ /* 0000 */ V(0, 4, 4), /* 32 */
+ /* 0001 */ V(2, 3, 4),
+ /* 0010 */ V(3, 2, 4),
+ /* 0011 */ V(0, 3, 4),
+ /* 0100 */ V(1, 3, 3),
+ /* 0101 */ V(1, 3, 3),
+ /* 0110 */ V(3, 1, 3),
+ /* 0111 */ V(3, 1, 3),
+ /* 1000 */ V(3, 0, 3),
+ /* 1001 */ V(3, 0, 3),
+ /* 1010 */ V(2, 2, 3),
+ /* 1011 */ V(2, 2, 3),
+ /* 1100 */ V(1, 2, 2),
+ /* 1101 */ V(1, 2, 2),
+ /* 1110 */ V(1, 2, 2),
+ /* 1111 */ V(1, 2, 2),
+
+ /* 0010 ... */
+ /* 00 */ V(2, 1, 1), /* 48 */
+ /* 01 */ V(2, 1, 1),
+ /* 10 */ V(0, 2, 2),
+ /* 11 */ V(2, 0, 2),
+
+ /* 0000 0000 ... */
+ /* 00 */ V(5, 5, 2), /* 52 */
+ /* 01 */ V(4, 5, 2),
+ /* 10 */ V(5, 4, 2),
+ /* 11 */ V(5, 3, 2),
+
+ /* 0000 0001 ... */
+ /* 0 */ V(3, 5, 1), /* 56 */
+ /* 1 */ V(4, 4, 1),
+
+ /* 0000 0010 ... */
+ /* 0 */ V(2, 5, 1), /* 58 */
+ /* 1 */ V(5, 2, 1),
+
+ /* 0000 0101 ... */
+ /* 0 */ V(0, 5, 1), /* 60 */
+ /* 1 */ V(3, 4, 1),
+
+ /* 0000 0111 ... */
+ /* 0 */ V(4, 3, 1), /* 62 */
+ /* 1 */ V(3, 3, 1)
+};
+
+# if 0
+/* this version saves 8 entries (16 bytes) at the expense of
+ an extra lookup in 4 out of 36 cases */
+static
+union huffpair const hufftab8[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 2),
+ /* 0010 */ V(1, 2, 4),
+ /* 0011 */ V(2, 1, 4),
+ /* 0100 */ V(1, 1, 2),
+ /* 0101 */ V(1, 1, 2),
+ /* 0110 */ V(1, 1, 2),
+ /* 0111 */ V(1, 1, 2),
+ /* 1000 */ V(0, 1, 3),
+ /* 1001 */ V(0, 1, 3),
+ /* 1010 */ V(1, 0, 3),
+ /* 1011 */ V(1, 0, 3),
+ /* 1100 */ V(0, 0, 2),
+ /* 1101 */ V(0, 0, 2),
+ /* 1110 */ V(0, 0, 2),
+ /* 1111 */ V(0, 0, 2),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(36, 3), /* 16 */
+ /* 0001 */ PTR(44, 2),
+ /* 0010 */ PTR(48, 1),
+ /* 0011 */ V(1, 5, 4),
+ /* 0100 */ V(5, 1, 4),
+ /* 0101 */ PTR(50, 1),
+ /* 0110 */ PTR(52, 1),
+ /* 0111 */ V(2, 4, 4),
+ /* 1000 */ V(4, 2, 4),
+ /* 1001 */ V(1, 4, 4),
+ /* 1010 */ V(4, 1, 3),
+ /* 1011 */ V(4, 1, 3),
+ /* 1100 */ V(0, 4, 4),
+ /* 1101 */ V(4, 0, 4),
+ /* 1110 */ V(2, 3, 4),
+ /* 1111 */ V(3, 2, 4),
+
+ /* 0001 ... */
+ /* 00 */ PTR(54, 2), /* 32 */
+ /* 01 */ V(2, 2, 2),
+ /* 10 */ V(0, 2, 2),
+ /* 11 */ V(2, 0, 2),
+
+ /* 0000 0000 ... */
+ /* 000 */ V(5, 5, 3), /* 36 */
+ /* 001 */ V(5, 4, 3),
+ /* 010 */ V(4, 5, 2),
+ /* 011 */ V(4, 5, 2),
+ /* 100 */ V(5, 3, 1),
+ /* 101 */ V(5, 3, 1),
+ /* 110 */ V(5, 3, 1),
+ /* 111 */ V(5, 3, 1),
+
+ /* 0000 0001 ... */
+ /* 00 */ V(3, 5, 2), /* 44 */
+ /* 01 */ V(4, 4, 2),
+ /* 10 */ V(2, 5, 1),
+ /* 11 */ V(2, 5, 1),
+
+ /* 0000 0010 ... */
+ /* 0 */ V(5, 2, 1), /* 48 */
+ /* 1 */ V(0, 5, 1),
+
+ /* 0000 0101 ... */
+ /* 0 */ V(3, 4, 1), /* 50 */
+ /* 1 */ V(4, 3, 1),
+
+ /* 0000 0110 ... */
+ /* 0 */ V(5, 0, 1), /* 52 */
+ /* 1 */ V(3, 3, 1),
+
+ /* 0001 00 ... */
+ /* 00 */ V(1, 3, 2), /* 54 */
+ /* 01 */ V(3, 1, 2),
+ /* 10 */ V(0, 3, 2),
+ /* 11 */ V(3, 0, 2),
+};
+# else
+static
+union huffpair const hufftab8[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ V(1, 2, 4),
+ /* 0011 */ V(2, 1, 4),
+ /* 0100 */ V(1, 1, 2),
+ /* 0101 */ V(1, 1, 2),
+ /* 0110 */ V(1, 1, 2),
+ /* 0111 */ V(1, 1, 2),
+ /* 1000 */ V(0, 1, 3),
+ /* 1001 */ V(0, 1, 3),
+ /* 1010 */ V(1, 0, 3),
+ /* 1011 */ V(1, 0, 3),
+ /* 1100 */ V(0, 0, 2),
+ /* 1101 */ V(0, 0, 2),
+ /* 1110 */ V(0, 0, 2),
+ /* 1111 */ V(0, 0, 2),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(48, 3), /* 16 */
+ /* 0001 */ PTR(56, 2),
+ /* 0010 */ PTR(60, 1),
+ /* 0011 */ V(1, 5, 4),
+ /* 0100 */ V(5, 1, 4),
+ /* 0101 */ PTR(62, 1),
+ /* 0110 */ PTR(64, 1),
+ /* 0111 */ V(2, 4, 4),
+ /* 1000 */ V(4, 2, 4),
+ /* 1001 */ V(1, 4, 4),
+ /* 1010 */ V(4, 1, 3),
+ /* 1011 */ V(4, 1, 3),
+ /* 1100 */ V(0, 4, 4),
+ /* 1101 */ V(4, 0, 4),
+ /* 1110 */ V(2, 3, 4),
+ /* 1111 */ V(3, 2, 4),
+
+ /* 0001 ... */
+ /* 0000 */ V(1, 3, 4), /* 32 */
+ /* 0001 */ V(3, 1, 4),
+ /* 0010 */ V(0, 3, 4),
+ /* 0011 */ V(3, 0, 4),
+ /* 0100 */ V(2, 2, 2),
+ /* 0101 */ V(2, 2, 2),
+ /* 0110 */ V(2, 2, 2),
+ /* 0111 */ V(2, 2, 2),
+ /* 1000 */ V(0, 2, 2),
+ /* 1001 */ V(0, 2, 2),
+ /* 1010 */ V(0, 2, 2),
+ /* 1011 */ V(0, 2, 2),
+ /* 1100 */ V(2, 0, 2),
+ /* 1101 */ V(2, 0, 2),
+ /* 1110 */ V(2, 0, 2),
+ /* 1111 */ V(2, 0, 2),
+
+ /* 0000 0000 ... */
+ /* 000 */ V(5, 5, 3), /* 48 */
+ /* 001 */ V(5, 4, 3),
+ /* 010 */ V(4, 5, 2),
+ /* 011 */ V(4, 5, 2),
+ /* 100 */ V(5, 3, 1),
+ /* 101 */ V(5, 3, 1),
+ /* 110 */ V(5, 3, 1),
+ /* 111 */ V(5, 3, 1),
+
+ /* 0000 0001 ... */
+ /* 00 */ V(3, 5, 2), /* 56 */
+ /* 01 */ V(4, 4, 2),
+ /* 10 */ V(2, 5, 1),
+ /* 11 */ V(2, 5, 1),
+
+ /* 0000 0010 ... */
+ /* 0 */ V(5, 2, 1), /* 60 */
+ /* 1 */ V(0, 5, 1),
+
+ /* 0000 0101 ... */
+ /* 0 */ V(3, 4, 1), /* 62 */
+ /* 1 */ V(4, 3, 1),
+
+ /* 0000 0110 ... */
+ /* 0 */ V(5, 0, 1), /* 64 */
+ /* 1 */ V(3, 3, 1)
+};
+# endif
+
+static
+union huffpair const hufftab9[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 3),
+ /* 0010 */ PTR(40, 2),
+ /* 0011 */ PTR(44, 2),
+ /* 0100 */ PTR(48, 1),
+ /* 0101 */ V(1, 2, 4),
+ /* 0110 */ V(2, 1, 4),
+ /* 0111 */ V(2, 0, 4),
+ /* 1000 */ V(1, 1, 3),
+ /* 1001 */ V(1, 1, 3),
+ /* 1010 */ V(0, 1, 3),
+ /* 1011 */ V(0, 1, 3),
+ /* 1100 */ V(1, 0, 3),
+ /* 1101 */ V(1, 0, 3),
+ /* 1110 */ V(0, 0, 3),
+ /* 1111 */ V(0, 0, 3),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(50, 1), /* 16 */
+ /* 0001 */ V(3, 5, 4),
+ /* 0010 */ V(5, 3, 4),
+ /* 0011 */ PTR(52, 1),
+ /* 0100 */ V(4, 4, 4),
+ /* 0101 */ V(2, 5, 4),
+ /* 0110 */ V(5, 2, 4),
+ /* 0111 */ V(1, 5, 4),
+ /* 1000 */ V(5, 1, 3),
+ /* 1001 */ V(5, 1, 3),
+ /* 1010 */ V(3, 4, 3),
+ /* 1011 */ V(3, 4, 3),
+ /* 1100 */ V(4, 3, 3),
+ /* 1101 */ V(4, 3, 3),
+ /* 1110 */ V(5, 0, 4),
+ /* 1111 */ V(0, 4, 4),
+
+ /* 0001 ... */
+ /* 000 */ V(2, 4, 3), /* 32 */
+ /* 001 */ V(4, 2, 3),
+ /* 010 */ V(3, 3, 3),
+ /* 011 */ V(4, 0, 3),
+ /* 100 */ V(1, 4, 2),
+ /* 101 */ V(1, 4, 2),
+ /* 110 */ V(4, 1, 2),
+ /* 111 */ V(4, 1, 2),
+
+ /* 0010 ... */
+ /* 00 */ V(2, 3, 2), /* 40 */
+ /* 01 */ V(3, 2, 2),
+ /* 10 */ V(1, 3, 1),
+ /* 11 */ V(1, 3, 1),
+
+ /* 0011 ... */
+ /* 00 */ V(3, 1, 1), /* 44 */
+ /* 01 */ V(3, 1, 1),
+ /* 10 */ V(0, 3, 2),
+ /* 11 */ V(3, 0, 2),
+
+ /* 0100 ... */
+ /* 0 */ V(2, 2, 1), /* 48 */
+ /* 1 */ V(0, 2, 1),
+
+ /* 0000 0000 ... */
+ /* 0 */ V(5, 5, 1), /* 50 */
+ /* 1 */ V(4, 5, 1),
+
+ /* 0000 0011 ... */
+ /* 0 */ V(5, 4, 1), /* 52 */
+ /* 1 */ V(0, 5, 1)
+};
+
+static
+union huffpair const hufftab10[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 2),
+ /* 0011 */ V(1, 1, 4),
+ /* 0100 */ V(0, 1, 3),
+ /* 0101 */ V(0, 1, 3),
+ /* 0110 */ V(1, 0, 3),
+ /* 0111 */ V(1, 0, 3),
+ /* 1000 */ V(0, 0, 1),
+ /* 1001 */ V(0, 0, 1),
+ /* 1010 */ V(0, 0, 1),
+ /* 1011 */ V(0, 0, 1),
+ /* 1100 */ V(0, 0, 1),
+ /* 1101 */ V(0, 0, 1),
+ /* 1110 */ V(0, 0, 1),
+ /* 1111 */ V(0, 0, 1),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(52, 3), /* 16 */
+ /* 0001 */ PTR(60, 2),
+ /* 0010 */ PTR(64, 3),
+ /* 0011 */ PTR(72, 1),
+ /* 0100 */ PTR(74, 2),
+ /* 0101 */ PTR(78, 2),
+ /* 0110 */ PTR(82, 2),
+ /* 0111 */ V(1, 7, 4),
+ /* 1000 */ V(7, 1, 4),
+ /* 1001 */ PTR(86, 1),
+ /* 1010 */ PTR(88, 2),
+ /* 1011 */ PTR(92, 2),
+ /* 1100 */ V(1, 6, 4),
+ /* 1101 */ V(6, 1, 4),
+ /* 1110 */ V(6, 0, 4),
+ /* 1111 */ PTR(96, 1),
+
+ /* 0001 ... */
+ /* 0000 */ PTR(98, 1), /* 32 */
+ /* 0001 */ PTR(100, 1),
+ /* 0010 */ V(1, 4, 4),
+ /* 0011 */ V(4, 1, 4),
+ /* 0100 */ V(4, 0, 4),
+ /* 0101 */ V(2, 3, 4),
+ /* 0110 */ V(3, 2, 4),
+ /* 0111 */ V(0, 3, 4),
+ /* 1000 */ V(1, 3, 3),
+ /* 1001 */ V(1, 3, 3),
+ /* 1010 */ V(3, 1, 3),
+ /* 1011 */ V(3, 1, 3),
+ /* 1100 */ V(3, 0, 3),
+ /* 1101 */ V(3, 0, 3),
+ /* 1110 */ V(2, 2, 3),
+ /* 1111 */ V(2, 2, 3),
+
+ /* 0010 ... */
+ /* 00 */ V(1, 2, 2), /* 48 */
+ /* 01 */ V(2, 1, 2),
+ /* 10 */ V(0, 2, 2),
+ /* 11 */ V(2, 0, 2),
+
+ /* 0000 0000 ... */
+ /* 000 */ V(7, 7, 3), /* 52 */
+ /* 001 */ V(6, 7, 3),
+ /* 010 */ V(7, 6, 3),
+ /* 011 */ V(5, 7, 3),
+ /* 100 */ V(7, 5, 3),
+ /* 101 */ V(6, 6, 3),
+ /* 110 */ V(4, 7, 2),
+ /* 111 */ V(4, 7, 2),
+
+ /* 0000 0001 ... */
+ /* 00 */ V(7, 4, 2), /* 60 */
+ /* 01 */ V(5, 6, 2),
+ /* 10 */ V(6, 5, 2),
+ /* 11 */ V(3, 7, 2),
+
+ /* 0000 0010 ... */
+ /* 000 */ V(7, 3, 2), /* 64 */
+ /* 001 */ V(7, 3, 2),
+ /* 010 */ V(4, 6, 2),
+ /* 011 */ V(4, 6, 2),
+ /* 100 */ V(5, 5, 3),
+ /* 101 */ V(5, 4, 3),
+ /* 110 */ V(6, 3, 2),
+ /* 111 */ V(6, 3, 2),
+
+ /* 0000 0011 ... */
+ /* 0 */ V(2, 7, 1), /* 72 */
+ /* 1 */ V(7, 2, 1),
+
+ /* 0000 0100 ... */
+ /* 00 */ V(6, 4, 2), /* 74 */
+ /* 01 */ V(0, 7, 2),
+ /* 10 */ V(7, 0, 1),
+ /* 11 */ V(7, 0, 1),
+
+ /* 0000 0101 ... */
+ /* 00 */ V(6, 2, 1), /* 78 */
+ /* 01 */ V(6, 2, 1),
+ /* 10 */ V(4, 5, 2),
+ /* 11 */ V(3, 5, 2),
+
+ /* 0000 0110 ... */
+ /* 00 */ V(0, 6, 1), /* 82 */
+ /* 01 */ V(0, 6, 1),
+ /* 10 */ V(5, 3, 2),
+ /* 11 */ V(4, 4, 2),
+
+ /* 0000 1001 ... */
+ /* 0 */ V(3, 6, 1), /* 86 */
+ /* 1 */ V(2, 6, 1),
+
+ /* 0000 1010 ... */
+ /* 00 */ V(2, 5, 2), /* 88 */
+ /* 01 */ V(5, 2, 2),
+ /* 10 */ V(1, 5, 1),
+ /* 11 */ V(1, 5, 1),
+
+ /* 0000 1011 ... */
+ /* 00 */ V(5, 1, 1), /* 92 */
+ /* 01 */ V(5, 1, 1),
+ /* 10 */ V(3, 4, 2),
+ /* 11 */ V(4, 3, 2),
+
+ /* 0000 1111 ... */
+ /* 0 */ V(0, 5, 1), /* 96 */
+ /* 1 */ V(5, 0, 1),
+
+ /* 0001 0000 ... */
+ /* 0 */ V(2, 4, 1), /* 98 */
+ /* 1 */ V(4, 2, 1),
+
+ /* 0001 0001 ... */
+ /* 0 */ V(3, 3, 1), /* 100 */
+ /* 1 */ V(0, 4, 1)
+};
+
+static
+union huffpair const hufftab11[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 4),
+ /* 0011 */ PTR(64, 3),
+ /* 0100 */ V(1, 2, 4),
+ /* 0101 */ PTR(72, 1),
+ /* 0110 */ V(1, 1, 3),
+ /* 0111 */ V(1, 1, 3),
+ /* 1000 */ V(0, 1, 3),
+ /* 1001 */ V(0, 1, 3),
+ /* 1010 */ V(1, 0, 3),
+ /* 1011 */ V(1, 0, 3),
+ /* 1100 */ V(0, 0, 2),
+ /* 1101 */ V(0, 0, 2),
+ /* 1110 */ V(0, 0, 2),
+ /* 1111 */ V(0, 0, 2),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(74, 2), /* 16 */
+ /* 0001 */ PTR(78, 3),
+ /* 0010 */ PTR(86, 2),
+ /* 0011 */ PTR(90, 1),
+ /* 0100 */ PTR(92, 2),
+ /* 0101 */ V(2, 7, 4),
+ /* 0110 */ V(7, 2, 4),
+ /* 0111 */ PTR(96, 1),
+ /* 1000 */ V(7, 1, 3),
+ /* 1001 */ V(7, 1, 3),
+ /* 1010 */ V(1, 7, 4),
+ /* 1011 */ V(7, 0, 4),
+ /* 1100 */ V(3, 6, 4),
+ /* 1101 */ V(6, 3, 4),
+ /* 1110 */ V(6, 0, 4),
+ /* 1111 */ PTR(98, 1),
+
+ /* 0001 ... */
+ /* 0000 */ PTR(100, 1), /* 32 */
+ /* 0001 */ V(1, 5, 4),
+ /* 0010 */ V(6, 2, 3),
+ /* 0011 */ V(6, 2, 3),
+ /* 0100 */ V(2, 6, 4),
+ /* 0101 */ V(0, 6, 4),
+ /* 0110 */ V(1, 6, 3),
+ /* 0111 */ V(1, 6, 3),
+ /* 1000 */ V(6, 1, 3),
+ /* 1001 */ V(6, 1, 3),
+ /* 1010 */ V(5, 1, 4),
+ /* 1011 */ V(3, 4, 4),
+ /* 1100 */ V(5, 0, 4),
+ /* 1101 */ PTR(102, 1),
+ /* 1110 */ V(2, 4, 4),
+ /* 1111 */ V(4, 2, 4),
+
+ /* 0010 ... */
+ /* 0000 */ V(1, 4, 4), /* 48 */
+ /* 0001 */ V(4, 1, 4),
+ /* 0010 */ V(0, 4, 4),
+ /* 0011 */ V(4, 0, 4),
+ /* 0100 */ V(2, 3, 3),
+ /* 0101 */ V(2, 3, 3),
+ /* 0110 */ V(3, 2, 3),
+ /* 0111 */ V(3, 2, 3),
+ /* 1000 */ V(1, 3, 2),
+ /* 1001 */ V(1, 3, 2),
+ /* 1010 */ V(1, 3, 2),
+ /* 1011 */ V(1, 3, 2),
+ /* 1100 */ V(3, 1, 2),
+ /* 1101 */ V(3, 1, 2),
+ /* 1110 */ V(3, 1, 2),
+ /* 1111 */ V(3, 1, 2),
+
+ /* 0011 ... */
+ /* 000 */ V(0, 3, 3), /* 64 */
+ /* 001 */ V(3, 0, 3),
+ /* 010 */ V(2, 2, 2),
+ /* 011 */ V(2, 2, 2),
+ /* 100 */ V(2, 1, 1),
+ /* 101 */ V(2, 1, 1),
+ /* 110 */ V(2, 1, 1),
+ /* 111 */ V(2, 1, 1),
+
+ /* 0101 ... */
+ /* 0 */ V(0, 2, 1), /* 72 */
+ /* 1 */ V(2, 0, 1),
+
+ /* 0000 0000 ... */
+ /* 00 */ V(7, 7, 2), /* 74 */
+ /* 01 */ V(6, 7, 2),
+ /* 10 */ V(7, 6, 2),
+ /* 11 */ V(7, 5, 2),
+
+ /* 0000 0001 ... */
+ /* 000 */ V(6, 6, 2), /* 78 */
+ /* 001 */ V(6, 6, 2),
+ /* 010 */ V(4, 7, 2),
+ /* 011 */ V(4, 7, 2),
+ /* 100 */ V(7, 4, 2),
+ /* 101 */ V(7, 4, 2),
+ /* 110 */ V(5, 7, 3),
+ /* 111 */ V(5, 5, 3),
+
+ /* 0000 0010 ... */
+ /* 00 */ V(5, 6, 2), /* 86 */
+ /* 01 */ V(6, 5, 2),
+ /* 10 */ V(3, 7, 1),
+ /* 11 */ V(3, 7, 1),
+
+ /* 0000 0011 ... */
+ /* 0 */ V(7, 3, 1), /* 90 */
+ /* 1 */ V(4, 6, 1),
+
+ /* 0000 0100 ... */
+ /* 00 */ V(4, 5, 2), /* 92 */
+ /* 01 */ V(5, 4, 2),
+ /* 10 */ V(3, 5, 2),
+ /* 11 */ V(5, 3, 2),
+
+ /* 0000 0111 ... */
+ /* 0 */ V(6, 4, 1), /* 96 */
+ /* 1 */ V(0, 7, 1),
+
+ /* 0000 1111 ... */
+ /* 0 */ V(4, 4, 1), /* 98 */
+ /* 1 */ V(2, 5, 1),
+
+ /* 0001 0000 ... */
+ /* 0 */ V(5, 2, 1), /* 100 */
+ /* 1 */ V(0, 5, 1),
+
+ /* 0001 1101 ... */
+ /* 0 */ V(4, 3, 1), /* 102 */
+ /* 1 */ V(3, 3, 1)
+};
+
+static
+union huffpair const hufftab12[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 4),
+ /* 0011 */ PTR(64, 2),
+ /* 0100 */ PTR(68, 3),
+ /* 0101 */ PTR(76, 1),
+ /* 0110 */ V(1, 2, 4),
+ /* 0111 */ V(2, 1, 4),
+ /* 1000 */ PTR(78, 1),
+ /* 1001 */ V(0, 0, 4),
+ /* 1010 */ V(1, 1, 3),
+ /* 1011 */ V(1, 1, 3),
+ /* 1100 */ V(0, 1, 3),
+ /* 1101 */ V(0, 1, 3),
+ /* 1110 */ V(1, 0, 3),
+ /* 1111 */ V(1, 0, 3),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(80, 2), /* 16 */
+ /* 0001 */ PTR(84, 1),
+ /* 0010 */ PTR(86, 1),
+ /* 0011 */ PTR(88, 1),
+ /* 0100 */ V(5, 6, 4),
+ /* 0101 */ V(3, 7, 4),
+ /* 0110 */ PTR(90, 1),
+ /* 0111 */ V(2, 7, 4),
+ /* 1000 */ V(7, 2, 4),
+ /* 1001 */ V(4, 6, 4),
+ /* 1010 */ V(6, 4, 4),
+ /* 1011 */ V(1, 7, 4),
+ /* 1100 */ V(7, 1, 4),
+ /* 1101 */ PTR(92, 1),
+ /* 1110 */ V(3, 6, 4),
+ /* 1111 */ V(6, 3, 4),
+
+ /* 0001 ... */
+ /* 0000 */ V(4, 5, 4), /* 32 */
+ /* 0001 */ V(5, 4, 4),
+ /* 0010 */ V(4, 4, 4),
+ /* 0011 */ PTR(94, 1),
+ /* 0100 */ V(2, 6, 3),
+ /* 0101 */ V(2, 6, 3),
+ /* 0110 */ V(6, 2, 3),
+ /* 0111 */ V(6, 2, 3),
+ /* 1000 */ V(6, 1, 3),
+ /* 1001 */ V(6, 1, 3),
+ /* 1010 */ V(1, 6, 4),
+ /* 1011 */ V(6, 0, 4),
+ /* 1100 */ V(3, 5, 4),
+ /* 1101 */ V(5, 3, 4),
+ /* 1110 */ V(2, 5, 4),
+ /* 1111 */ V(5, 2, 4),
+
+ /* 0010 ... */
+ /* 0000 */ V(1, 5, 3), /* 48 */
+ /* 0001 */ V(1, 5, 3),
+ /* 0010 */ V(5, 1, 3),
+ /* 0011 */ V(5, 1, 3),
+ /* 0100 */ V(3, 4, 3),
+ /* 0101 */ V(3, 4, 3),
+ /* 0110 */ V(4, 3, 3),
+ /* 0111 */ V(4, 3, 3),
+ /* 1000 */ V(5, 0, 4),
+ /* 1001 */ V(0, 4, 4),
+ /* 1010 */ V(2, 4, 3),
+ /* 1011 */ V(2, 4, 3),
+ /* 1100 */ V(4, 2, 3),
+ /* 1101 */ V(4, 2, 3),
+ /* 1110 */ V(1, 4, 3),
+ /* 1111 */ V(1, 4, 3),
+
+ /* 0011 ... */
+ /* 00 */ V(3, 3, 2), /* 64 */
+ /* 01 */ V(4, 1, 2),
+ /* 10 */ V(2, 3, 2),
+ /* 11 */ V(3, 2, 2),
+
+ /* 0100 ... */
+ /* 000 */ V(4, 0, 3), /* 68 */
+ /* 001 */ V(0, 3, 3),
+ /* 010 */ V(3, 0, 2),
+ /* 011 */ V(3, 0, 2),
+ /* 100 */ V(1, 3, 1),
+ /* 101 */ V(1, 3, 1),
+ /* 110 */ V(1, 3, 1),
+ /* 111 */ V(1, 3, 1),
+
+ /* 0101 ... */
+ /* 0 */ V(3, 1, 1), /* 76 */
+ /* 1 */ V(2, 2, 1),
+
+ /* 1000 ... */
+ /* 0 */ V(0, 2, 1), /* 78 */
+ /* 1 */ V(2, 0, 1),
+
+ /* 0000 0000 ... */
+ /* 00 */ V(7, 7, 2), /* 80 */
+ /* 01 */ V(6, 7, 2),
+ /* 10 */ V(7, 6, 1),
+ /* 11 */ V(7, 6, 1),
+
+ /* 0000 0001 ... */
+ /* 0 */ V(5, 7, 1), /* 84 */
+ /* 1 */ V(7, 5, 1),
+
+ /* 0000 0010 ... */
+ /* 0 */ V(6, 6, 1), /* 86 */
+ /* 1 */ V(4, 7, 1),
+
+ /* 0000 0011 ... */
+ /* 0 */ V(7, 4, 1), /* 88 */
+ /* 1 */ V(6, 5, 1),
+
+ /* 0000 0110 ... */
+ /* 0 */ V(7, 3, 1), /* 90 */
+ /* 1 */ V(5, 5, 1),
+
+ /* 0000 1101 ... */
+ /* 0 */ V(0, 7, 1), /* 92 */
+ /* 1 */ V(7, 0, 1),
+
+ /* 0001 0011 ... */
+ /* 0 */ V(0, 6, 1), /* 94 */
+ /* 1 */ V(0, 5, 1)
+};
+
+static
+union huffpair const hufftab13[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 4),
+ /* 0011 */ PTR(64, 2),
+ /* 0100 */ V(1, 1, 4),
+ /* 0101 */ V(0, 1, 4),
+ /* 0110 */ V(1, 0, 3),
+ /* 0111 */ V(1, 0, 3),
+ /* 1000 */ V(0, 0, 1),
+ /* 1001 */ V(0, 0, 1),
+ /* 1010 */ V(0, 0, 1),
+ /* 1011 */ V(0, 0, 1),
+ /* 1100 */ V(0, 0, 1),
+ /* 1101 */ V(0, 0, 1),
+ /* 1110 */ V(0, 0, 1),
+ /* 1111 */ V(0, 0, 1),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(68, 4), /* 16 */
+ /* 0001 */ PTR(84, 4),
+ /* 0010 */ PTR(100, 4),
+ /* 0011 */ PTR(116, 4),
+ /* 0100 */ PTR(132, 4),
+ /* 0101 */ PTR(148, 4),
+ /* 0110 */ PTR(164, 3),
+ /* 0111 */ PTR(172, 3),
+ /* 1000 */ PTR(180, 3),
+ /* 1001 */ PTR(188, 3),
+ /* 1010 */ PTR(196, 3),
+ /* 1011 */ PTR(204, 3),
+ /* 1100 */ PTR(212, 1),
+ /* 1101 */ PTR(214, 2),
+ /* 1110 */ PTR(218, 3),
+ /* 1111 */ PTR(226, 1),
+
+ /* 0001 ... */
+ /* 0000 */ PTR(228, 2), /* 32 */
+ /* 0001 */ PTR(232, 2),
+ /* 0010 */ PTR(236, 2),
+ /* 0011 */ PTR(240, 2),
+ /* 0100 */ V(8, 1, 4),
+ /* 0101 */ PTR(244, 1),
+ /* 0110 */ PTR(246, 1),
+ /* 0111 */ PTR(248, 1),
+ /* 1000 */ PTR(250, 2),
+ /* 1001 */ PTR(254, 1),
+ /* 1010 */ V(1, 5, 4),
+ /* 1011 */ V(5, 1, 4),
+ /* 1100 */ PTR(256, 1),
+ /* 1101 */ PTR(258, 1),
+ /* 1110 */ PTR(260, 1),
+ /* 1111 */ V(1, 4, 4),
+
+ /* 0010 ... */
+ /* 0000 */ V(4, 1, 3), /* 48 */
+ /* 0001 */ V(4, 1, 3),
+ /* 0010 */ V(0, 4, 4),
+ /* 0011 */ V(4, 0, 4),
+ /* 0100 */ V(2, 3, 4),
+ /* 0101 */ V(3, 2, 4),
+ /* 0110 */ V(1, 3, 3),
+ /* 0111 */ V(1, 3, 3),
+ /* 1000 */ V(3, 1, 3),
+ /* 1001 */ V(3, 1, 3),
+ /* 1010 */ V(0, 3, 3),
+ /* 1011 */ V(0, 3, 3),
+ /* 1100 */ V(3, 0, 3),
+ /* 1101 */ V(3, 0, 3),
+ /* 1110 */ V(2, 2, 3),
+ /* 1111 */ V(2, 2, 3),
+
+ /* 0011 ... */
+ /* 00 */ V(1, 2, 2), /* 64 */
+ /* 01 */ V(2, 1, 2),
+ /* 10 */ V(0, 2, 2),
+ /* 11 */ V(2, 0, 2),
+
+ /* 0000 0000 ... */
+ /* 0000 */ PTR(262, 4), /* 68 */
+ /* 0001 */ PTR(278, 4),
+ /* 0010 */ PTR(294, 4),
+ /* 0011 */ PTR(310, 3),
+ /* 0100 */ PTR(318, 2),
+ /* 0101 */ PTR(322, 2),
+ /* 0110 */ PTR(326, 3),
+ /* 0111 */ PTR(334, 2),
+ /* 1000 */ PTR(338, 1),
+ /* 1001 */ PTR(340, 2),
+ /* 1010 */ PTR(344, 2),
+ /* 1011 */ PTR(348, 2),
+ /* 1100 */ PTR(352, 2),
+ /* 1101 */ PTR(356, 2),
+ /* 1110 */ V(1, 15, 4),
+ /* 1111 */ V(15, 1, 4),
+
+ /* 0000 0001 ... */
+ /* 0000 */ V(15, 0, 4), /* 84 */
+ /* 0001 */ PTR(360, 1),
+ /* 0010 */ PTR(362, 1),
+ /* 0011 */ PTR(364, 1),
+ /* 0100 */ V(14, 2, 4),
+ /* 0101 */ PTR(366, 1),
+ /* 0110 */ V(1, 14, 4),
+ /* 0111 */ V(14, 1, 4),
+ /* 1000 */ PTR(368, 1),
+ /* 1001 */ PTR(370, 1),
+ /* 1010 */ PTR(372, 1),
+ /* 1011 */ PTR(374, 1),
+ /* 1100 */ PTR(376, 1),
+ /* 1101 */ PTR(378, 1),
+ /* 1110 */ V(12, 6, 4),
+ /* 1111 */ V(3, 13, 4),
+
+ /* 0000 0010 ... */
+ /* 0000 */ PTR(380, 1), /* 100 */
+ /* 0001 */ V(2, 13, 4),
+ /* 0010 */ V(13, 2, 4),
+ /* 0011 */ V(1, 13, 4),
+ /* 0100 */ V(11, 7, 4),
+ /* 0101 */ PTR(382, 1),
+ /* 0110 */ PTR(384, 1),
+ /* 0111 */ V(12, 3, 4),
+ /* 1000 */ PTR(386, 1),
+ /* 1001 */ V(4, 11, 4),
+ /* 1010 */ V(13, 1, 3),
+ /* 1011 */ V(13, 1, 3),
+ /* 1100 */ V(0, 13, 4),
+ /* 1101 */ V(13, 0, 4),
+ /* 1110 */ V(8, 10, 4),
+ /* 1111 */ V(10, 8, 4),
+
+ /* 0000 0011 ... */
+ /* 0000 */ V(4, 12, 4), /* 116 */
+ /* 0001 */ V(12, 4, 4),
+ /* 0010 */ V(6, 11, 4),
+ /* 0011 */ V(11, 6, 4),
+ /* 0100 */ V(3, 12, 3),
+ /* 0101 */ V(3, 12, 3),
+ /* 0110 */ V(2, 12, 3),
+ /* 0111 */ V(2, 12, 3),
+ /* 1000 */ V(12, 2, 3),
+ /* 1001 */ V(12, 2, 3),
+ /* 1010 */ V(5, 11, 3),
+ /* 1011 */ V(5, 11, 3),
+ /* 1100 */ V(11, 5, 4),
+ /* 1101 */ V(8, 9, 4),
+ /* 1110 */ V(1, 12, 3),
+ /* 1111 */ V(1, 12, 3),
+
+ /* 0000 0100 ... */
+ /* 0000 */ V(12, 1, 3), /* 132 */
+ /* 0001 */ V(12, 1, 3),
+ /* 0010 */ V(9, 8, 4),
+ /* 0011 */ V(0, 12, 4),
+ /* 0100 */ V(12, 0, 3),
+ /* 0101 */ V(12, 0, 3),
+ /* 0110 */ V(11, 4, 4),
+ /* 0111 */ V(6, 10, 4),
+ /* 1000 */ V(10, 6, 4),
+ /* 1001 */ V(7, 9, 4),
+ /* 1010 */ V(3, 11, 3),
+ /* 1011 */ V(3, 11, 3),
+ /* 1100 */ V(11, 3, 3),
+ /* 1101 */ V(11, 3, 3),
+ /* 1110 */ V(8, 8, 4),
+ /* 1111 */ V(5, 10, 4),
+
+ /* 0000 0101 ... */
+ /* 0000 */ V(2, 11, 3), /* 148 */
+ /* 0001 */ V(2, 11, 3),
+ /* 0010 */ V(10, 5, 4),
+ /* 0011 */ V(6, 9, 4),
+ /* 0100 */ V(10, 4, 3),
+ /* 0101 */ V(10, 4, 3),
+ /* 0110 */ V(7, 8, 4),
+ /* 0111 */ V(8, 7, 4),
+ /* 1000 */ V(9, 4, 3),
+ /* 1001 */ V(9, 4, 3),
+ /* 1010 */ V(7, 7, 4),
+ /* 1011 */ V(7, 6, 4),
+ /* 1100 */ V(11, 2, 2),
+ /* 1101 */ V(11, 2, 2),
+ /* 1110 */ V(11, 2, 2),
+ /* 1111 */ V(11, 2, 2),
+
+ /* 0000 0110 ... */
+ /* 000 */ V(1, 11, 2), /* 164 */
+ /* 001 */ V(1, 11, 2),
+ /* 010 */ V(11, 1, 2),
+ /* 011 */ V(11, 1, 2),
+ /* 100 */ V(0, 11, 3),
+ /* 101 */ V(11, 0, 3),
+ /* 110 */ V(9, 6, 3),
+ /* 111 */ V(4, 10, 3),
+
+ /* 0000 0111 ... */
+ /* 000 */ V(3, 10, 3), /* 172 */
+ /* 001 */ V(10, 3, 3),
+ /* 010 */ V(5, 9, 3),
+ /* 011 */ V(9, 5, 3),
+ /* 100 */ V(2, 10, 2),
+ /* 101 */ V(2, 10, 2),
+ /* 110 */ V(10, 2, 2),
+ /* 111 */ V(10, 2, 2),
+
+ /* 0000 1000 ... */
+ /* 000 */ V(1, 10, 2), /* 180 */
+ /* 001 */ V(1, 10, 2),
+ /* 010 */ V(10, 1, 2),
+ /* 011 */ V(10, 1, 2),
+ /* 100 */ V(0, 10, 3),
+ /* 101 */ V(6, 8, 3),
+ /* 110 */ V(10, 0, 2),
+ /* 111 */ V(10, 0, 2),
+
+ /* 0000 1001 ... */
+ /* 000 */ V(8, 6, 3), /* 188 */
+ /* 001 */ V(4, 9, 3),
+ /* 010 */ V(9, 3, 2),
+ /* 011 */ V(9, 3, 2),
+ /* 100 */ V(3, 9, 3),
+ /* 101 */ V(5, 8, 3),
+ /* 110 */ V(8, 5, 3),
+ /* 111 */ V(6, 7, 3),
+
+ /* 0000 1010 ... */
+ /* 000 */ V(2, 9, 2), /* 196 */
+ /* 001 */ V(2, 9, 2),
+ /* 010 */ V(9, 2, 2),
+ /* 011 */ V(9, 2, 2),
+ /* 100 */ V(5, 7, 3),
+ /* 101 */ V(7, 5, 3),
+ /* 110 */ V(3, 8, 2),
+ /* 111 */ V(3, 8, 2),
+
+ /* 0000 1011 ... */
+ /* 000 */ V(8, 3, 2), /* 204 */
+ /* 001 */ V(8, 3, 2),
+ /* 010 */ V(6, 6, 3),
+ /* 011 */ V(4, 7, 3),
+ /* 100 */ V(7, 4, 3),
+ /* 101 */ V(5, 6, 3),
+ /* 110 */ V(6, 5, 3),
+ /* 111 */ V(7, 3, 3),
+
+ /* 0000 1100 ... */
+ /* 0 */ V(1, 9, 1), /* 212 */
+ /* 1 */ V(9, 1, 1),
+
+ /* 0000 1101 ... */
+ /* 00 */ V(0, 9, 2), /* 214 */
+ /* 01 */ V(9, 0, 2),
+ /* 10 */ V(4, 8, 2),
+ /* 11 */ V(8, 4, 2),
+
+ /* 0000 1110 ... */
+ /* 000 */ V(7, 2, 2), /* 218 */
+ /* 001 */ V(7, 2, 2),
+ /* 010 */ V(4, 6, 3),
+ /* 011 */ V(6, 4, 3),
+ /* 100 */ V(2, 8, 1),
+ /* 101 */ V(2, 8, 1),
+ /* 110 */ V(2, 8, 1),
+ /* 111 */ V(2, 8, 1),
+
+ /* 0000 1111 ... */
+ /* 0 */ V(8, 2, 1), /* 226 */
+ /* 1 */ V(1, 8, 1),
+
+ /* 0001 0000 ... */
+ /* 00 */ V(3, 7, 2), /* 228 */
+ /* 01 */ V(2, 7, 2),
+ /* 10 */ V(1, 7, 1),
+ /* 11 */ V(1, 7, 1),
+
+ /* 0001 0001 ... */
+ /* 00 */ V(7, 1, 1), /* 232 */
+ /* 01 */ V(7, 1, 1),
+ /* 10 */ V(5, 5, 2),
+ /* 11 */ V(0, 7, 2),
+
+ /* 0001 0010 ... */
+ /* 00 */ V(7, 0, 2), /* 236 */
+ /* 01 */ V(3, 6, 2),
+ /* 10 */ V(6, 3, 2),
+ /* 11 */ V(4, 5, 2),
+
+ /* 0001 0011 ... */
+ /* 00 */ V(5, 4, 2), /* 240 */
+ /* 01 */ V(2, 6, 2),
+ /* 10 */ V(6, 2, 2),
+ /* 11 */ V(3, 5, 2),
+
+ /* 0001 0101 ... */
+ /* 0 */ V(0, 8, 1), /* 244 */
+ /* 1 */ V(8, 0, 1),
+
+ /* 0001 0110 ... */
+ /* 0 */ V(1, 6, 1), /* 246 */
+ /* 1 */ V(6, 1, 1),
+
+ /* 0001 0111 ... */
+ /* 0 */ V(0, 6, 1), /* 248 */
+ /* 1 */ V(6, 0, 1),
+
+ /* 0001 1000 ... */
+ /* 00 */ V(5, 3, 2), /* 250 */
+ /* 01 */ V(4, 4, 2),
+ /* 10 */ V(2, 5, 1),
+ /* 11 */ V(2, 5, 1),
+
+ /* 0001 1001 ... */
+ /* 0 */ V(5, 2, 1), /* 254 */
+ /* 1 */ V(0, 5, 1),
+
+ /* 0001 1100 ... */
+ /* 0 */ V(3, 4, 1), /* 256 */
+ /* 1 */ V(4, 3, 1),
+
+ /* 0001 1101 ... */
+ /* 0 */ V(5, 0, 1), /* 258 */
+ /* 1 */ V(2, 4, 1),
+
+ /* 0001 1110 ... */
+ /* 0 */ V(4, 2, 1), /* 260 */
+ /* 1 */ V(3, 3, 1),
+
+ /* 0000 0000 0000 ... */
+ /* 0000 */ PTR(388, 3), /* 262 */
+ /* 0001 */ V(15, 15, 4),
+ /* 0010 */ V(14, 15, 4),
+ /* 0011 */ V(13, 15, 4),
+ /* 0100 */ V(14, 14, 4),
+ /* 0101 */ V(12, 15, 4),
+ /* 0110 */ V(13, 14, 4),
+ /* 0111 */ V(11, 15, 4),
+ /* 1000 */ V(15, 11, 4),
+ /* 1001 */ V(12, 14, 4),
+ /* 1010 */ V(13, 12, 4),
+ /* 1011 */ PTR(396, 1),
+ /* 1100 */ V(14, 12, 3),
+ /* 1101 */ V(14, 12, 3),
+ /* 1110 */ V(13, 13, 3),
+ /* 1111 */ V(13, 13, 3),
+
+ /* 0000 0000 0001 ... */
+ /* 0000 */ V(15, 10, 4), /* 278 */
+ /* 0001 */ V(12, 13, 4),
+ /* 0010 */ V(11, 14, 3),
+ /* 0011 */ V(11, 14, 3),
+ /* 0100 */ V(14, 11, 3),
+ /* 0101 */ V(14, 11, 3),
+ /* 0110 */ V(9, 15, 3),
+ /* 0111 */ V(9, 15, 3),
+ /* 1000 */ V(15, 9, 3),
+ /* 1001 */ V(15, 9, 3),
+ /* 1010 */ V(14, 10, 3),
+ /* 1011 */ V(14, 10, 3),
+ /* 1100 */ V(11, 13, 3),
+ /* 1101 */ V(11, 13, 3),
+ /* 1110 */ V(13, 11, 3),
+ /* 1111 */ V(13, 11, 3),
+
+ /* 0000 0000 0010 ... */
+ /* 0000 */ V(8, 15, 3), /* 294 */
+ /* 0001 */ V(8, 15, 3),
+ /* 0010 */ V(15, 8, 3),
+ /* 0011 */ V(15, 8, 3),
+ /* 0100 */ V(12, 12, 3),
+ /* 0101 */ V(12, 12, 3),
+ /* 0110 */ V(10, 14, 4),
+ /* 0111 */ V(9, 14, 4),
+ /* 1000 */ V(8, 14, 3),
+ /* 1001 */ V(8, 14, 3),
+ /* 1010 */ V(7, 15, 4),
+ /* 1011 */ V(7, 14, 4),
+ /* 1100 */ V(15, 7, 2),
+ /* 1101 */ V(15, 7, 2),
+ /* 1110 */ V(15, 7, 2),
+ /* 1111 */ V(15, 7, 2),
+
+ /* 0000 0000 0011 ... */
+ /* 000 */ V(13, 10, 2), /* 310 */
+ /* 001 */ V(13, 10, 2),
+ /* 010 */ V(10, 13, 3),
+ /* 011 */ V(11, 12, 3),
+ /* 100 */ V(12, 11, 3),
+ /* 101 */ V(15, 6, 3),
+ /* 110 */ V(6, 15, 2),
+ /* 111 */ V(6, 15, 2),
+
+ /* 0000 0000 0100 ... */
+ /* 00 */ V(14, 8, 2), /* 318 */
+ /* 01 */ V(5, 15, 2),
+ /* 10 */ V(9, 13, 2),
+ /* 11 */ V(13, 9, 2),
+
+ /* 0000 0000 0101 ... */
+ /* 00 */ V(15, 5, 2), /* 322 */
+ /* 01 */ V(14, 7, 2),
+ /* 10 */ V(10, 12, 2),
+ /* 11 */ V(11, 11, 2),
+
+ /* 0000 0000 0110 ... */
+ /* 000 */ V(4, 15, 2), /* 326 */
+ /* 001 */ V(4, 15, 2),
+ /* 010 */ V(15, 4, 2),
+ /* 011 */ V(15, 4, 2),
+ /* 100 */ V(12, 10, 3),
+ /* 101 */ V(14, 6, 3),
+ /* 110 */ V(15, 3, 2),
+ /* 111 */ V(15, 3, 2),
+
+ /* 0000 0000 0111 ... */
+ /* 00 */ V(3, 15, 1), /* 334 */
+ /* 01 */ V(3, 15, 1),
+ /* 10 */ V(8, 13, 2),
+ /* 11 */ V(13, 8, 2),
+
+ /* 0000 0000 1000 ... */
+ /* 0 */ V(2, 15, 1), /* 338 */
+ /* 1 */ V(15, 2, 1),
+
+ /* 0000 0000 1001 ... */
+ /* 00 */ V(6, 14, 2), /* 340 */
+ /* 01 */ V(9, 12, 2),
+ /* 10 */ V(0, 15, 1),
+ /* 11 */ V(0, 15, 1),
+
+ /* 0000 0000 1010 ... */
+ /* 00 */ V(12, 9, 2), /* 344 */
+ /* 01 */ V(5, 14, 2),
+ /* 10 */ V(10, 11, 1),
+ /* 11 */ V(10, 11, 1),
+
+ /* 0000 0000 1011 ... */
+ /* 00 */ V(7, 13, 2), /* 348 */
+ /* 01 */ V(13, 7, 2),
+ /* 10 */ V(4, 14, 1),
+ /* 11 */ V(4, 14, 1),
+
+ /* 0000 0000 1100 ... */
+ /* 00 */ V(12, 8, 2), /* 352 */
+ /* 01 */ V(13, 6, 2),
+ /* 10 */ V(3, 14, 1),
+ /* 11 */ V(3, 14, 1),
+
+ /* 0000 0000 1101 ... */
+ /* 00 */ V(11, 9, 1), /* 356 */
+ /* 01 */ V(11, 9, 1),
+ /* 10 */ V(9, 11, 2),
+ /* 11 */ V(10, 10, 2),
+
+ /* 0000 0001 0001 ... */
+ /* 0 */ V(11, 10, 1), /* 360 */
+ /* 1 */ V(14, 5, 1),
+
+ /* 0000 0001 0010 ... */
+ /* 0 */ V(14, 4, 1), /* 362 */
+ /* 1 */ V(8, 12, 1),
+
+ /* 0000 0001 0011 ... */
+ /* 0 */ V(6, 13, 1), /* 364 */
+ /* 1 */ V(14, 3, 1),
+
+ /* 0000 0001 0101 ... */
+ /* 0 */ V(2, 14, 1), /* 366 */
+ /* 1 */ V(0, 14, 1),
+
+ /* 0000 0001 1000 ... */
+ /* 0 */ V(14, 0, 1), /* 368 */
+ /* 1 */ V(5, 13, 1),
+
+ /* 0000 0001 1001 ... */
+ /* 0 */ V(13, 5, 1), /* 370 */
+ /* 1 */ V(7, 12, 1),
+
+ /* 0000 0001 1010 ... */
+ /* 0 */ V(12, 7, 1), /* 372 */
+ /* 1 */ V(4, 13, 1),
+
+ /* 0000 0001 1011 ... */
+ /* 0 */ V(8, 11, 1), /* 374 */
+ /* 1 */ V(11, 8, 1),
+
+ /* 0000 0001 1100 ... */
+ /* 0 */ V(13, 4, 1), /* 376 */
+ /* 1 */ V(9, 10, 1),
+
+ /* 0000 0001 1101 ... */
+ /* 0 */ V(10, 9, 1), /* 378 */
+ /* 1 */ V(6, 12, 1),
+
+ /* 0000 0010 0000 ... */
+ /* 0 */ V(13, 3, 1), /* 380 */
+ /* 1 */ V(7, 11, 1),
+
+ /* 0000 0010 0101 ... */
+ /* 0 */ V(5, 12, 1), /* 382 */
+ /* 1 */ V(12, 5, 1),
+
+ /* 0000 0010 0110 ... */
+ /* 0 */ V(9, 9, 1), /* 384 */
+ /* 1 */ V(7, 10, 1),
+
+ /* 0000 0010 1000 ... */
+ /* 0 */ V(10, 7, 1), /* 386 */
+ /* 1 */ V(9, 7, 1),
+
+ /* 0000 0000 0000 0000 ... */
+ /* 000 */ V(15, 14, 3), /* 388 */
+ /* 001 */ V(15, 12, 3),
+ /* 010 */ V(15, 13, 2),
+ /* 011 */ V(15, 13, 2),
+ /* 100 */ V(14, 13, 1),
+ /* 101 */ V(14, 13, 1),
+ /* 110 */ V(14, 13, 1),
+ /* 111 */ V(14, 13, 1),
+
+ /* 0000 0000 0000 1011 ... */
+ /* 0 */ V(10, 15, 1), /* 396 */
+ /* 1 */ V(14, 9, 1)
+};
+
+static
+union huffpair const hufftab15[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 4),
+ /* 0011 */ PTR(64, 4),
+ /* 0100 */ PTR(80, 4),
+ /* 0101 */ PTR(96, 3),
+ /* 0110 */ PTR(104, 3),
+ /* 0111 */ PTR(112, 2),
+ /* 1000 */ PTR(116, 1),
+ /* 1001 */ PTR(118, 1),
+ /* 1010 */ V(1, 1, 3),
+ /* 1011 */ V(1, 1, 3),
+ /* 1100 */ V(0, 1, 4),
+ /* 1101 */ V(1, 0, 4),
+ /* 1110 */ V(0, 0, 3),
+ /* 1111 */ V(0, 0, 3),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(120, 4), /* 16 */
+ /* 0001 */ PTR(136, 4),
+ /* 0010 */ PTR(152, 4),
+ /* 0011 */ PTR(168, 4),
+ /* 0100 */ PTR(184, 4),
+ /* 0101 */ PTR(200, 3),
+ /* 0110 */ PTR(208, 3),
+ /* 0111 */ PTR(216, 4),
+ /* 1000 */ PTR(232, 3),
+ /* 1001 */ PTR(240, 3),
+ /* 1010 */ PTR(248, 3),
+ /* 1011 */ PTR(256, 3),
+ /* 1100 */ PTR(264, 2),
+ /* 1101 */ PTR(268, 3),
+ /* 1110 */ PTR(276, 3),
+ /* 1111 */ PTR(284, 2),
+
+ /* 0001 ... */
+ /* 0000 */ PTR(288, 2), /* 32 */
+ /* 0001 */ PTR(292, 2),
+ /* 0010 */ PTR(296, 2),
+ /* 0011 */ PTR(300, 2),
+ /* 0100 */ PTR(304, 2),
+ /* 0101 */ PTR(308, 2),
+ /* 0110 */ PTR(312, 2),
+ /* 0111 */ PTR(316, 2),
+ /* 1000 */ PTR(320, 1),
+ /* 1001 */ PTR(322, 1),
+ /* 1010 */ PTR(324, 1),
+ /* 1011 */ PTR(326, 2),
+ /* 1100 */ PTR(330, 1),
+ /* 1101 */ PTR(332, 1),
+ /* 1110 */ PTR(334, 2),
+ /* 1111 */ PTR(338, 1),
+
+ /* 0010 ... */
+ /* 0000 */ PTR(340, 1), /* 48 */
+ /* 0001 */ PTR(342, 1),
+ /* 0010 */ V(9, 1, 4),
+ /* 0011 */ PTR(344, 1),
+ /* 0100 */ PTR(346, 1),
+ /* 0101 */ PTR(348, 1),
+ /* 0110 */ PTR(350, 1),
+ /* 0111 */ PTR(352, 1),
+ /* 1000 */ V(2, 8, 4),
+ /* 1001 */ V(8, 2, 4),
+ /* 1010 */ V(1, 8, 4),
+ /* 1011 */ V(8, 1, 4),
+ /* 1100 */ PTR(354, 1),
+ /* 1101 */ PTR(356, 1),
+ /* 1110 */ PTR(358, 1),
+ /* 1111 */ PTR(360, 1),
+
+ /* 0011 ... */
+ /* 0000 */ V(2, 7, 4), /* 64 */
+ /* 0001 */ V(7, 2, 4),
+ /* 0010 */ V(6, 4, 4),
+ /* 0011 */ V(1, 7, 4),
+ /* 0100 */ V(5, 5, 4),
+ /* 0101 */ V(7, 1, 4),
+ /* 0110 */ PTR(362, 1),
+ /* 0111 */ V(3, 6, 4),
+ /* 1000 */ V(6, 3, 4),
+ /* 1001 */ V(4, 5, 4),
+ /* 1010 */ V(5, 4, 4),
+ /* 1011 */ V(2, 6, 4),
+ /* 1100 */ V(6, 2, 4),
+ /* 1101 */ V(1, 6, 4),
+ /* 1110 */ PTR(364, 1),
+ /* 1111 */ V(3, 5, 4),
+
+ /* 0100 ... */
+ /* 0000 */ V(6, 1, 3), /* 80 */
+ /* 0001 */ V(6, 1, 3),
+ /* 0010 */ V(5, 3, 4),
+ /* 0011 */ V(4, 4, 4),
+ /* 0100 */ V(2, 5, 3),
+ /* 0101 */ V(2, 5, 3),
+ /* 0110 */ V(5, 2, 3),
+ /* 0111 */ V(5, 2, 3),
+ /* 1000 */ V(1, 5, 3),
+ /* 1001 */ V(1, 5, 3),
+ /* 1010 */ V(5, 1, 3),
+ /* 1011 */ V(5, 1, 3),
+ /* 1100 */ V(0, 5, 4),
+ /* 1101 */ V(5, 0, 4),
+ /* 1110 */ V(3, 4, 3),
+ /* 1111 */ V(3, 4, 3),
+
+ /* 0101 ... */
+ /* 000 */ V(4, 3, 3), /* 96 */
+ /* 001 */ V(2, 4, 3),
+ /* 010 */ V(4, 2, 3),
+ /* 011 */ V(3, 3, 3),
+ /* 100 */ V(4, 1, 2),
+ /* 101 */ V(4, 1, 2),
+ /* 110 */ V(1, 4, 3),
+ /* 111 */ V(0, 4, 3),
+
+ /* 0110 ... */
+ /* 000 */ V(2, 3, 2), /* 104 */
+ /* 001 */ V(2, 3, 2),
+ /* 010 */ V(3, 2, 2),
+ /* 011 */ V(3, 2, 2),
+ /* 100 */ V(4, 0, 3),
+ /* 101 */ V(0, 3, 3),
+ /* 110 */ V(1, 3, 2),
+ /* 111 */ V(1, 3, 2),
+
+ /* 0111 ... */
+ /* 00 */ V(3, 1, 2), /* 112 */
+ /* 01 */ V(3, 0, 2),
+ /* 10 */ V(2, 2, 1),
+ /* 11 */ V(2, 2, 1),
+
+ /* 1000 ... */
+ /* 0 */ V(1, 2, 1), /* 116 */
+ /* 1 */ V(2, 1, 1),
+
+ /* 1001 ... */
+ /* 0 */ V(0, 2, 1), /* 118 */
+ /* 1 */ V(2, 0, 1),
+
+ /* 0000 0000 ... */
+ /* 0000 */ PTR(366, 1), /* 120 */
+ /* 0001 */ PTR(368, 1),
+ /* 0010 */ V(14, 14, 4),
+ /* 0011 */ PTR(370, 1),
+ /* 0100 */ PTR(372, 1),
+ /* 0101 */ PTR(374, 1),
+ /* 0110 */ V(15, 11, 4),
+ /* 0111 */ PTR(376, 1),
+ /* 1000 */ V(13, 13, 4),
+ /* 1001 */ V(10, 15, 4),
+ /* 1010 */ V(15, 10, 4),
+ /* 1011 */ V(11, 14, 4),
+ /* 1100 */ V(14, 11, 4),
+ /* 1101 */ V(12, 13, 4),
+ /* 1110 */ V(13, 12, 4),
+ /* 1111 */ V(9, 15, 4),
+
+ /* 0000 0001 ... */
+ /* 0000 */ V(15, 9, 4), /* 136 */
+ /* 0001 */ V(14, 10, 4),
+ /* 0010 */ V(11, 13, 4),
+ /* 0011 */ V(13, 11, 4),
+ /* 0100 */ V(8, 15, 4),
+ /* 0101 */ V(15, 8, 4),
+ /* 0110 */ V(12, 12, 4),
+ /* 0111 */ V(9, 14, 4),
+ /* 1000 */ V(14, 9, 4),
+ /* 1001 */ V(7, 15, 4),
+ /* 1010 */ V(15, 7, 4),
+ /* 1011 */ V(10, 13, 4),
+ /* 1100 */ V(13, 10, 4),
+ /* 1101 */ V(11, 12, 4),
+ /* 1110 */ V(6, 15, 4),
+ /* 1111 */ PTR(378, 1),
+
+ /* 0000 0010 ... */
+ /* 0000 */ V(12, 11, 3), /* 152 */
+ /* 0001 */ V(12, 11, 3),
+ /* 0010 */ V(15, 6, 3),
+ /* 0011 */ V(15, 6, 3),
+ /* 0100 */ V(8, 14, 4),
+ /* 0101 */ V(14, 8, 4),
+ /* 0110 */ V(5, 15, 4),
+ /* 0111 */ V(9, 13, 4),
+ /* 1000 */ V(15, 5, 3),
+ /* 1001 */ V(15, 5, 3),
+ /* 1010 */ V(7, 14, 3),
+ /* 1011 */ V(7, 14, 3),
+ /* 1100 */ V(14, 7, 3),
+ /* 1101 */ V(14, 7, 3),
+ /* 1110 */ V(10, 12, 3),
+ /* 1111 */ V(10, 12, 3),
+
+ /* 0000 0011 ... */
+ /* 0000 */ V(12, 10, 3), /* 168 */
+ /* 0001 */ V(12, 10, 3),
+ /* 0010 */ V(11, 11, 3),
+ /* 0011 */ V(11, 11, 3),
+ /* 0100 */ V(13, 9, 4),
+ /* 0101 */ V(8, 13, 4),
+ /* 0110 */ V(4, 15, 3),
+ /* 0111 */ V(4, 15, 3),
+ /* 1000 */ V(15, 4, 3),
+ /* 1001 */ V(15, 4, 3),
+ /* 1010 */ V(3, 15, 3),
+ /* 1011 */ V(3, 15, 3),
+ /* 1100 */ V(15, 3, 3),
+ /* 1101 */ V(15, 3, 3),
+ /* 1110 */ V(13, 8, 3),
+ /* 1111 */ V(13, 8, 3),
+
+ /* 0000 0100 ... */
+ /* 0000 */ V(14, 6, 3), /* 184 */
+ /* 0001 */ V(14, 6, 3),
+ /* 0010 */ V(2, 15, 3),
+ /* 0011 */ V(2, 15, 3),
+ /* 0100 */ V(15, 2, 3),
+ /* 0101 */ V(15, 2, 3),
+ /* 0110 */ V(6, 14, 4),
+ /* 0111 */ V(15, 0, 4),
+ /* 1000 */ V(1, 15, 3),
+ /* 1001 */ V(1, 15, 3),
+ /* 1010 */ V(15, 1, 3),
+ /* 1011 */ V(15, 1, 3),
+ /* 1100 */ V(9, 12, 3),
+ /* 1101 */ V(9, 12, 3),
+ /* 1110 */ V(12, 9, 3),
+ /* 1111 */ V(12, 9, 3),
+
+ /* 0000 0101 ... */
+ /* 000 */ V(5, 14, 3), /* 200 */
+ /* 001 */ V(10, 11, 3),
+ /* 010 */ V(11, 10, 3),
+ /* 011 */ V(14, 5, 3),
+ /* 100 */ V(7, 13, 3),
+ /* 101 */ V(13, 7, 3),
+ /* 110 */ V(4, 14, 3),
+ /* 111 */ V(14, 4, 3),
+
+ /* 0000 0110 ... */
+ /* 000 */ V(8, 12, 3), /* 208 */
+ /* 001 */ V(12, 8, 3),
+ /* 010 */ V(3, 14, 3),
+ /* 011 */ V(6, 13, 3),
+ /* 100 */ V(13, 6, 3),
+ /* 101 */ V(14, 3, 3),
+ /* 110 */ V(9, 11, 3),
+ /* 111 */ V(11, 9, 3),
+
+ /* 0000 0111 ... */
+ /* 0000 */ V(2, 14, 3), /* 216 */
+ /* 0001 */ V(2, 14, 3),
+ /* 0010 */ V(10, 10, 3),
+ /* 0011 */ V(10, 10, 3),
+ /* 0100 */ V(14, 2, 3),
+ /* 0101 */ V(14, 2, 3),
+ /* 0110 */ V(1, 14, 3),
+ /* 0111 */ V(1, 14, 3),
+ /* 1000 */ V(14, 1, 3),
+ /* 1001 */ V(14, 1, 3),
+ /* 1010 */ V(0, 14, 4),
+ /* 1011 */ V(14, 0, 4),
+ /* 1100 */ V(5, 13, 3),
+ /* 1101 */ V(5, 13, 3),
+ /* 1110 */ V(13, 5, 3),
+ /* 1111 */ V(13, 5, 3),
+
+ /* 0000 1000 ... */
+ /* 000 */ V(7, 12, 3), /* 232 */
+ /* 001 */ V(12, 7, 3),
+ /* 010 */ V(4, 13, 3),
+ /* 011 */ V(8, 11, 3),
+ /* 100 */ V(13, 4, 2),
+ /* 101 */ V(13, 4, 2),
+ /* 110 */ V(11, 8, 3),
+ /* 111 */ V(9, 10, 3),
+
+ /* 0000 1001 ... */
+ /* 000 */ V(10, 9, 3), /* 240 */
+ /* 001 */ V(6, 12, 3),
+ /* 010 */ V(12, 6, 3),
+ /* 011 */ V(3, 13, 3),
+ /* 100 */ V(13, 3, 2),
+ /* 101 */ V(13, 3, 2),
+ /* 110 */ V(13, 2, 2),
+ /* 111 */ V(13, 2, 2),
+
+ /* 0000 1010 ... */
+ /* 000 */ V(2, 13, 3), /* 248 */
+ /* 001 */ V(0, 13, 3),
+ /* 010 */ V(1, 13, 2),
+ /* 011 */ V(1, 13, 2),
+ /* 100 */ V(7, 11, 2),
+ /* 101 */ V(7, 11, 2),
+ /* 110 */ V(11, 7, 2),
+ /* 111 */ V(11, 7, 2),
+
+ /* 0000 1011 ... */
+ /* 000 */ V(13, 1, 2), /* 256 */
+ /* 001 */ V(13, 1, 2),
+ /* 010 */ V(5, 12, 3),
+ /* 011 */ V(13, 0, 3),
+ /* 100 */ V(12, 5, 2),
+ /* 101 */ V(12, 5, 2),
+ /* 110 */ V(8, 10, 2),
+ /* 111 */ V(8, 10, 2),
+
+ /* 0000 1100 ... */
+ /* 00 */ V(10, 8, 2), /* 264 */
+ /* 01 */ V(4, 12, 2),
+ /* 10 */ V(12, 4, 2),
+ /* 11 */ V(6, 11, 2),
+
+ /* 0000 1101 ... */
+ /* 000 */ V(11, 6, 2), /* 268 */
+ /* 001 */ V(11, 6, 2),
+ /* 010 */ V(9, 9, 3),
+ /* 011 */ V(0, 12, 3),
+ /* 100 */ V(3, 12, 2),
+ /* 101 */ V(3, 12, 2),
+ /* 110 */ V(12, 3, 2),
+ /* 111 */ V(12, 3, 2),
+
+ /* 0000 1110 ... */
+ /* 000 */ V(7, 10, 2), /* 276 */
+ /* 001 */ V(7, 10, 2),
+ /* 010 */ V(10, 7, 2),
+ /* 011 */ V(10, 7, 2),
+ /* 100 */ V(10, 6, 2),
+ /* 101 */ V(10, 6, 2),
+ /* 110 */ V(12, 0, 3),
+ /* 111 */ V(0, 11, 3),
+
+ /* 0000 1111 ... */
+ /* 00 */ V(12, 2, 1), /* 284 */
+ /* 01 */ V(12, 2, 1),
+ /* 10 */ V(2, 12, 2),
+ /* 11 */ V(5, 11, 2),
+
+ /* 0001 0000 ... */
+ /* 00 */ V(11, 5, 2), /* 288 */
+ /* 01 */ V(1, 12, 2),
+ /* 10 */ V(8, 9, 2),
+ /* 11 */ V(9, 8, 2),
+
+ /* 0001 0001 ... */
+ /* 00 */ V(12, 1, 2), /* 292 */
+ /* 01 */ V(4, 11, 2),
+ /* 10 */ V(11, 4, 2),
+ /* 11 */ V(6, 10, 2),
+
+ /* 0001 0010 ... */
+ /* 00 */ V(3, 11, 2), /* 296 */
+ /* 01 */ V(7, 9, 2),
+ /* 10 */ V(11, 3, 1),
+ /* 11 */ V(11, 3, 1),
+
+ /* 0001 0011 ... */
+ /* 00 */ V(9, 7, 2), /* 300 */
+ /* 01 */ V(8, 8, 2),
+ /* 10 */ V(2, 11, 2),
+ /* 11 */ V(5, 10, 2),
+
+ /* 0001 0100 ... */
+ /* 00 */ V(11, 2, 1), /* 304 */
+ /* 01 */ V(11, 2, 1),
+ /* 10 */ V(10, 5, 2),
+ /* 11 */ V(1, 11, 2),
+
+ /* 0001 0101 ... */
+ /* 00 */ V(11, 1, 1), /* 308 */
+ /* 01 */ V(11, 1, 1),
+ /* 10 */ V(11, 0, 2),
+ /* 11 */ V(6, 9, 2),
+
+ /* 0001 0110 ... */
+ /* 00 */ V(9, 6, 2), /* 312 */
+ /* 01 */ V(4, 10, 2),
+ /* 10 */ V(10, 4, 2),
+ /* 11 */ V(7, 8, 2),
+
+ /* 0001 0111 ... */
+ /* 00 */ V(8, 7, 2), /* 316 */
+ /* 01 */ V(3, 10, 2),
+ /* 10 */ V(10, 3, 1),
+ /* 11 */ V(10, 3, 1),
+
+ /* 0001 1000 ... */
+ /* 0 */ V(5, 9, 1), /* 320 */
+ /* 1 */ V(9, 5, 1),
+
+ /* 0001 1001 ... */
+ /* 0 */ V(2, 10, 1), /* 322 */
+ /* 1 */ V(10, 2, 1),
+
+ /* 0001 1010 ... */
+ /* 0 */ V(1, 10, 1), /* 324 */
+ /* 1 */ V(10, 1, 1),
+
+ /* 0001 1011 ... */
+ /* 00 */ V(0, 10, 2), /* 326 */
+ /* 01 */ V(10, 0, 2),
+ /* 10 */ V(6, 8, 1),
+ /* 11 */ V(6, 8, 1),
+
+ /* 0001 1100 ... */
+ /* 0 */ V(8, 6, 1), /* 330 */
+ /* 1 */ V(4, 9, 1),
+
+ /* 0001 1101 ... */
+ /* 0 */ V(9, 4, 1), /* 332 */
+ /* 1 */ V(3, 9, 1),
+
+ /* 0001 1110 ... */
+ /* 00 */ V(9, 3, 1), /* 334 */
+ /* 01 */ V(9, 3, 1),
+ /* 10 */ V(7, 7, 2),
+ /* 11 */ V(0, 9, 2),
+
+ /* 0001 1111 ... */
+ /* 0 */ V(5, 8, 1), /* 338 */
+ /* 1 */ V(8, 5, 1),
+
+ /* 0010 0000 ... */
+ /* 0 */ V(2, 9, 1), /* 340 */
+ /* 1 */ V(6, 7, 1),
+
+ /* 0010 0001 ... */
+ /* 0 */ V(7, 6, 1), /* 342 */
+ /* 1 */ V(9, 2, 1),
+
+ /* 0010 0011 ... */
+ /* 0 */ V(1, 9, 1), /* 344 */
+ /* 1 */ V(9, 0, 1),
+
+ /* 0010 0100 ... */
+ /* 0 */ V(4, 8, 1), /* 346 */
+ /* 1 */ V(8, 4, 1),
+
+ /* 0010 0101 ... */
+ /* 0 */ V(5, 7, 1), /* 348 */
+ /* 1 */ V(7, 5, 1),
+
+ /* 0010 0110 ... */
+ /* 0 */ V(3, 8, 1), /* 350 */
+ /* 1 */ V(8, 3, 1),
+
+ /* 0010 0111 ... */
+ /* 0 */ V(6, 6, 1), /* 352 */
+ /* 1 */ V(4, 7, 1),
+
+ /* 0010 1100 ... */
+ /* 0 */ V(7, 4, 1), /* 354 */
+ /* 1 */ V(0, 8, 1),
+
+ /* 0010 1101 ... */
+ /* 0 */ V(8, 0, 1), /* 356 */
+ /* 1 */ V(5, 6, 1),
+
+ /* 0010 1110 ... */
+ /* 0 */ V(6, 5, 1), /* 358 */
+ /* 1 */ V(3, 7, 1),
+
+ /* 0010 1111 ... */
+ /* 0 */ V(7, 3, 1), /* 360 */
+ /* 1 */ V(4, 6, 1),
+
+ /* 0011 0110 ... */
+ /* 0 */ V(0, 7, 1), /* 362 */
+ /* 1 */ V(7, 0, 1),
+
+ /* 0011 1110 ... */
+ /* 0 */ V(0, 6, 1), /* 364 */
+ /* 1 */ V(6, 0, 1),
+
+ /* 0000 0000 0000 ... */
+ /* 0 */ V(15, 15, 1), /* 366 */
+ /* 1 */ V(14, 15, 1),
+
+ /* 0000 0000 0001 ... */
+ /* 0 */ V(15, 14, 1), /* 368 */
+ /* 1 */ V(13, 15, 1),
+
+ /* 0000 0000 0011 ... */
+ /* 0 */ V(15, 13, 1), /* 370 */
+ /* 1 */ V(12, 15, 1),
+
+ /* 0000 0000 0100 ... */
+ /* 0 */ V(15, 12, 1), /* 372 */
+ /* 1 */ V(13, 14, 1),
+
+ /* 0000 0000 0101 ... */
+ /* 0 */ V(14, 13, 1), /* 374 */
+ /* 1 */ V(11, 15, 1),
+
+ /* 0000 0000 0111 ... */
+ /* 0 */ V(12, 14, 1), /* 376 */
+ /* 1 */ V(14, 12, 1),
+
+ /* 0000 0001 1111 ... */
+ /* 0 */ V(10, 14, 1), /* 378 */
+ /* 1 */ V(0, 15, 1)
+};
+
+static
+union huffpair const hufftab16[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 4),
+ /* 0011 */ PTR(64, 2),
+ /* 0100 */ V(1, 1, 4),
+ /* 0101 */ V(0, 1, 4),
+ /* 0110 */ V(1, 0, 3),
+ /* 0111 */ V(1, 0, 3),
+ /* 1000 */ V(0, 0, 1),
+ /* 1001 */ V(0, 0, 1),
+ /* 1010 */ V(0, 0, 1),
+ /* 1011 */ V(0, 0, 1),
+ /* 1100 */ V(0, 0, 1),
+ /* 1101 */ V(0, 0, 1),
+ /* 1110 */ V(0, 0, 1),
+ /* 1111 */ V(0, 0, 1),
+
+ /* 0000 ... */
+ /* 0000 */ PTR(68, 3), /* 16 */
+ /* 0001 */ PTR(76, 3),
+ /* 0010 */ PTR(84, 2),
+ /* 0011 */ V(15, 15, 4),
+ /* 0100 */ PTR(88, 2),
+ /* 0101 */ PTR(92, 1),
+ /* 0110 */ PTR(94, 4),
+ /* 0111 */ V(15, 2, 4),
+ /* 1000 */ PTR(110, 1),
+ /* 1001 */ V(1, 15, 4),
+ /* 1010 */ V(15, 1, 4),
+ /* 1011 */ PTR(112, 4),
+ /* 1100 */ PTR(128, 4),
+ /* 1101 */ PTR(144, 4),
+ /* 1110 */ PTR(160, 4),
+ /* 1111 */ PTR(176, 4),
+
+ /* 0001 ... */
+ /* 0000 */ PTR(192, 4), /* 32 */
+ /* 0001 */ PTR(208, 3),
+ /* 0010 */ PTR(216, 3),
+ /* 0011 */ PTR(224, 3),
+ /* 0100 */ PTR(232, 3),
+ /* 0101 */ PTR(240, 3),
+ /* 0110 */ PTR(248, 3),
+ /* 0111 */ PTR(256, 3),
+ /* 1000 */ PTR(264, 2),
+ /* 1001 */ PTR(268, 2),
+ /* 1010 */ PTR(272, 1),
+ /* 1011 */ PTR(274, 2),
+ /* 1100 */ PTR(278, 2),
+ /* 1101 */ PTR(282, 1),
+ /* 1110 */ V(5, 1, 4),
+ /* 1111 */ PTR(284, 1),
+
+ /* 0010 ... */
+ /* 0000 */ PTR(286, 1), /* 48 */
+ /* 0001 */ PTR(288, 1),
+ /* 0010 */ PTR(290, 1),
+ /* 0011 */ V(1, 4, 4),
+ /* 0100 */ V(4, 1, 4),
+ /* 0101 */ PTR(292, 1),
+ /* 0110 */ V(2, 3, 4),
+ /* 0111 */ V(3, 2, 4),
+ /* 1000 */ V(1, 3, 3),
+ /* 1001 */ V(1, 3, 3),
+ /* 1010 */ V(3, 1, 3),
+ /* 1011 */ V(3, 1, 3),
+ /* 1100 */ V(0, 3, 4),
+ /* 1101 */ V(3, 0, 4),
+ /* 1110 */ V(2, 2, 3),
+ /* 1111 */ V(2, 2, 3),
+
+ /* 0011 ... */
+ /* 00 */ V(1, 2, 2), /* 64 */
+ /* 01 */ V(2, 1, 2),
+ /* 10 */ V(0, 2, 2),
+ /* 11 */ V(2, 0, 2),
+
+ /* 0000 0000 ... */
+ /* 000 */ V(14, 15, 3), /* 68 */
+ /* 001 */ V(15, 14, 3),
+ /* 010 */ V(13, 15, 3),
+ /* 011 */ V(15, 13, 3),
+ /* 100 */ V(12, 15, 3),
+ /* 101 */ V(15, 12, 3),
+ /* 110 */ V(11, 15, 3),
+ /* 111 */ V(15, 11, 3),
+
+ /* 0000 0001 ... */
+ /* 000 */ V(10, 15, 2), /* 76 */
+ /* 001 */ V(10, 15, 2),
+ /* 010 */ V(15, 10, 3),
+ /* 011 */ V(9, 15, 3),
+ /* 100 */ V(15, 9, 3),
+ /* 101 */ V(15, 8, 3),
+ /* 110 */ V(8, 15, 2),
+ /* 111 */ V(8, 15, 2),
+
+ /* 0000 0010 ... */
+ /* 00 */ V(7, 15, 2), /* 84 */
+ /* 01 */ V(15, 7, 2),
+ /* 10 */ V(6, 15, 2),
+ /* 11 */ V(15, 6, 2),
+
+ /* 0000 0100 ... */
+ /* 00 */ V(5, 15, 2), /* 88 */
+ /* 01 */ V(15, 5, 2),
+ /* 10 */ V(4, 15, 1),
+ /* 11 */ V(4, 15, 1),
+
+ /* 0000 0101 ... */
+ /* 0 */ V(15, 4, 1), /* 92 */
+ /* 1 */ V(15, 3, 1),
+
+ /* 0000 0110 ... */
+ /* 0000 */ V(15, 0, 1), /* 94 */
+ /* 0001 */ V(15, 0, 1),
+ /* 0010 */ V(15, 0, 1),
+ /* 0011 */ V(15, 0, 1),
+ /* 0100 */ V(15, 0, 1),
+ /* 0101 */ V(15, 0, 1),
+ /* 0110 */ V(15, 0, 1),
+ /* 0111 */ V(15, 0, 1),
+ /* 1000 */ V(3, 15, 2),
+ /* 1001 */ V(3, 15, 2),
+ /* 1010 */ V(3, 15, 2),
+ /* 1011 */ V(3, 15, 2),
+ /* 1100 */ PTR(294, 4),
+ /* 1101 */ PTR(310, 3),
+ /* 1110 */ PTR(318, 3),
+ /* 1111 */ PTR(326, 3),
+
+ /* 0000 1000 ... */
+ /* 0 */ V(2, 15, 1), /* 110 */
+ /* 1 */ V(0, 15, 1),
+
+ /* 0000 1011 ... */
+ /* 0000 */ PTR(334, 2), /* 112 */
+ /* 0001 */ PTR(338, 2),
+ /* 0010 */ PTR(342, 2),
+ /* 0011 */ PTR(346, 1),
+ /* 0100 */ PTR(348, 2),
+ /* 0101 */ PTR(352, 2),
+ /* 0110 */ PTR(356, 1),
+ /* 0111 */ PTR(358, 2),
+ /* 1000 */ PTR(362, 2),
+ /* 1001 */ PTR(366, 2),
+ /* 1010 */ PTR(370, 2),
+ /* 1011 */ V(14, 3, 4),
+ /* 1100 */ PTR(374, 1),
+ /* 1101 */ PTR(376, 1),
+ /* 1110 */ PTR(378, 1),
+ /* 1111 */ PTR(380, 1),
+
+ /* 0000 1100 ... */
+ /* 0000 */ PTR(382, 1), /* 128 */
+ /* 0001 */ PTR(384, 1),
+ /* 0010 */ PTR(386, 1),
+ /* 0011 */ V(0, 13, 4),
+ /* 0100 */ PTR(388, 1),
+ /* 0101 */ PTR(390, 1),
+ /* 0110 */ PTR(392, 1),
+ /* 0111 */ V(3, 12, 4),
+ /* 1000 */ PTR(394, 1),
+ /* 1001 */ V(1, 12, 4),
+ /* 1010 */ V(12, 0, 4),
+ /* 1011 */ PTR(396, 1),
+ /* 1100 */ V(14, 2, 3),
+ /* 1101 */ V(14, 2, 3),
+ /* 1110 */ V(2, 14, 4),
+ /* 1111 */ V(1, 14, 4),
+
+ /* 0000 1101 ... */
+ /* 0000 */ V(13, 3, 4), /* 144 */
+ /* 0001 */ V(2, 13, 4),
+ /* 0010 */ V(13, 2, 4),
+ /* 0011 */ V(13, 1, 4),
+ /* 0100 */ V(3, 11, 4),
+ /* 0101 */ PTR(398, 1),
+ /* 0110 */ V(1, 13, 3),
+ /* 0111 */ V(1, 13, 3),
+ /* 1000 */ V(12, 4, 4),
+ /* 1001 */ V(6, 11, 4),
+ /* 1010 */ V(12, 3, 4),
+ /* 1011 */ V(10, 7, 4),
+ /* 1100 */ V(2, 12, 3),
+ /* 1101 */ V(2, 12, 3),
+ /* 1110 */ V(12, 2, 4),
+ /* 1111 */ V(11, 5, 4),
+
+ /* 0000 1110 ... */
+ /* 0000 */ V(12, 1, 4), /* 160 */
+ /* 0001 */ V(0, 12, 4),
+ /* 0010 */ V(4, 11, 4),
+ /* 0011 */ V(11, 4, 4),
+ /* 0100 */ V(6, 10, 4),
+ /* 0101 */ V(10, 6, 4),
+ /* 0110 */ V(11, 3, 3),
+ /* 0111 */ V(11, 3, 3),
+ /* 1000 */ V(5, 10, 4),
+ /* 1001 */ V(10, 5, 4),
+ /* 1010 */ V(2, 11, 3),
+ /* 1011 */ V(2, 11, 3),
+ /* 1100 */ V(11, 2, 3),
+ /* 1101 */ V(11, 2, 3),
+ /* 1110 */ V(1, 11, 3),
+ /* 1111 */ V(1, 11, 3),
+
+ /* 0000 1111 ... */
+ /* 0000 */ V(11, 1, 3), /* 176 */
+ /* 0001 */ V(11, 1, 3),
+ /* 0010 */ V(0, 11, 4),
+ /* 0011 */ V(11, 0, 4),
+ /* 0100 */ V(6, 9, 4),
+ /* 0101 */ V(9, 6, 4),
+ /* 0110 */ V(4, 10, 4),
+ /* 0111 */ V(10, 4, 4),
+ /* 1000 */ V(7, 8, 4),
+ /* 1001 */ V(8, 7, 4),
+ /* 1010 */ V(10, 3, 3),
+ /* 1011 */ V(10, 3, 3),
+ /* 1100 */ V(3, 10, 4),
+ /* 1101 */ V(5, 9, 4),
+ /* 1110 */ V(2, 10, 3),
+ /* 1111 */ V(2, 10, 3),
+
+ /* 0001 0000 ... */
+ /* 0000 */ V(9, 5, 4), /* 192 */
+ /* 0001 */ V(6, 8, 4),
+ /* 0010 */ V(10, 1, 3),
+ /* 0011 */ V(10, 1, 3),
+ /* 0100 */ V(8, 6, 4),
+ /* 0101 */ V(7, 7, 4),
+ /* 0110 */ V(9, 4, 3),
+ /* 0111 */ V(9, 4, 3),
+ /* 1000 */ V(4, 9, 4),
+ /* 1001 */ V(5, 7, 4),
+ /* 1010 */ V(6, 7, 3),
+ /* 1011 */ V(6, 7, 3),
+ /* 1100 */ V(10, 2, 2),
+ /* 1101 */ V(10, 2, 2),
+ /* 1110 */ V(10, 2, 2),
+ /* 1111 */ V(10, 2, 2),
+
+ /* 0001 0001 ... */
+ /* 000 */ V(1, 10, 2), /* 208 */
+ /* 001 */ V(1, 10, 2),
+ /* 010 */ V(0, 10, 3),
+ /* 011 */ V(10, 0, 3),
+ /* 100 */ V(3, 9, 3),
+ /* 101 */ V(9, 3, 3),
+ /* 110 */ V(5, 8, 3),
+ /* 111 */ V(8, 5, 3),
+
+ /* 0001 0010 ... */
+ /* 000 */ V(2, 9, 2), /* 216 */
+ /* 001 */ V(2, 9, 2),
+ /* 010 */ V(9, 2, 2),
+ /* 011 */ V(9, 2, 2),
+ /* 100 */ V(7, 6, 3),
+ /* 101 */ V(0, 9, 3),
+ /* 110 */ V(1, 9, 2),
+ /* 111 */ V(1, 9, 2),
+
+ /* 0001 0011 ... */
+ /* 000 */ V(9, 1, 2), /* 224 */
+ /* 001 */ V(9, 1, 2),
+ /* 010 */ V(9, 0, 3),
+ /* 011 */ V(4, 8, 3),
+ /* 100 */ V(8, 4, 3),
+ /* 101 */ V(7, 5, 3),
+ /* 110 */ V(3, 8, 3),
+ /* 111 */ V(8, 3, 3),
+
+ /* 0001 0100 ... */
+ /* 000 */ V(6, 6, 3), /* 232 */
+ /* 001 */ V(2, 8, 3),
+ /* 010 */ V(8, 2, 2),
+ /* 011 */ V(8, 2, 2),
+ /* 100 */ V(4, 7, 3),
+ /* 101 */ V(7, 4, 3),
+ /* 110 */ V(1, 8, 2),
+ /* 111 */ V(1, 8, 2),
+
+ /* 0001 0101 ... */
+ /* 000 */ V(8, 1, 2), /* 240 */
+ /* 001 */ V(8, 1, 2),
+ /* 010 */ V(8, 0, 2),
+ /* 011 */ V(8, 0, 2),
+ /* 100 */ V(0, 8, 3),
+ /* 101 */ V(5, 6, 3),
+ /* 110 */ V(3, 7, 2),
+ /* 111 */ V(3, 7, 2),
+
+ /* 0001 0110 ... */
+ /* 000 */ V(7, 3, 2), /* 248 */
+ /* 001 */ V(7, 3, 2),
+ /* 010 */ V(6, 5, 3),
+ /* 011 */ V(4, 6, 3),
+ /* 100 */ V(2, 7, 2),
+ /* 101 */ V(2, 7, 2),
+ /* 110 */ V(7, 2, 2),
+ /* 111 */ V(7, 2, 2),
+
+ /* 0001 0111 ... */
+ /* 000 */ V(6, 4, 3), /* 256 */
+ /* 001 */ V(5, 5, 3),
+ /* 010 */ V(0, 7, 2),
+ /* 011 */ V(0, 7, 2),
+ /* 100 */ V(1, 7, 1),
+ /* 101 */ V(1, 7, 1),
+ /* 110 */ V(1, 7, 1),
+ /* 111 */ V(1, 7, 1),
+
+ /* 0001 1000 ... */
+ /* 00 */ V(7, 1, 1), /* 264 */
+ /* 01 */ V(7, 1, 1),
+ /* 10 */ V(7, 0, 2),
+ /* 11 */ V(3, 6, 2),
+
+ /* 0001 1001 ... */
+ /* 00 */ V(6, 3, 2), /* 268 */
+ /* 01 */ V(4, 5, 2),
+ /* 10 */ V(5, 4, 2),
+ /* 11 */ V(2, 6, 2),
+
+ /* 0001 1010 ... */
+ /* 0 */ V(6, 2, 1), /* 272 */
+ /* 1 */ V(1, 6, 1),
+
+ /* 0001 1011 ... */
+ /* 00 */ V(6, 1, 1), /* 274 */
+ /* 01 */ V(6, 1, 1),
+ /* 10 */ V(0, 6, 2),
+ /* 11 */ V(6, 0, 2),
+
+ /* 0001 1100 ... */
+ /* 00 */ V(5, 3, 1), /* 278 */
+ /* 01 */ V(5, 3, 1),
+ /* 10 */ V(3, 5, 2),
+ /* 11 */ V(4, 4, 2),
+
+ /* 0001 1101 ... */
+ /* 0 */ V(2, 5, 1), /* 282 */
+ /* 1 */ V(5, 2, 1),
+
+ /* 0001 1111 ... */
+ /* 0 */ V(1, 5, 1), /* 284 */
+ /* 1 */ V(0, 5, 1),
+
+ /* 0010 0000 ... */
+ /* 0 */ V(3, 4, 1), /* 286 */
+ /* 1 */ V(4, 3, 1),
+
+ /* 0010 0001 ... */
+ /* 0 */ V(5, 0, 1), /* 288 */
+ /* 1 */ V(2, 4, 1),
+
+ /* 0010 0010 ... */
+ /* 0 */ V(4, 2, 1), /* 290 */
+ /* 1 */ V(3, 3, 1),
+
+ /* 0010 0101 ... */
+ /* 0 */ V(0, 4, 1), /* 292 */
+ /* 1 */ V(4, 0, 1),
+
+ /* 0000 0110 1100 ... */
+ /* 0000 */ V(12, 14, 4), /* 294 */
+ /* 0001 */ PTR(400, 1),
+ /* 0010 */ V(13, 14, 3),
+ /* 0011 */ V(13, 14, 3),
+ /* 0100 */ V(14, 9, 3),
+ /* 0101 */ V(14, 9, 3),
+ /* 0110 */ V(14, 10, 4),
+ /* 0111 */ V(13, 9, 4),
+ /* 1000 */ V(14, 14, 2),
+ /* 1001 */ V(14, 14, 2),
+ /* 1010 */ V(14, 14, 2),
+ /* 1011 */ V(14, 14, 2),
+ /* 1100 */ V(14, 13, 3),
+ /* 1101 */ V(14, 13, 3),
+ /* 1110 */ V(14, 11, 3),
+ /* 1111 */ V(14, 11, 3),
+
+ /* 0000 0110 1101 ... */
+ /* 000 */ V(11, 14, 2), /* 310 */
+ /* 001 */ V(11, 14, 2),
+ /* 010 */ V(12, 13, 2),
+ /* 011 */ V(12, 13, 2),
+ /* 100 */ V(13, 12, 3),
+ /* 101 */ V(13, 11, 3),
+ /* 110 */ V(10, 14, 2),
+ /* 111 */ V(10, 14, 2),
+
+ /* 0000 0110 1110 ... */
+ /* 000 */ V(12, 12, 2), /* 318 */
+ /* 001 */ V(12, 12, 2),
+ /* 010 */ V(10, 13, 3),
+ /* 011 */ V(13, 10, 3),
+ /* 100 */ V(7, 14, 3),
+ /* 101 */ V(10, 12, 3),
+ /* 110 */ V(12, 10, 2),
+ /* 111 */ V(12, 10, 2),
+
+ /* 0000 0110 1111 ... */
+ /* 000 */ V(12, 9, 3), /* 326 */
+ /* 001 */ V(7, 13, 3),
+ /* 010 */ V(5, 14, 2),
+ /* 011 */ V(5, 14, 2),
+ /* 100 */ V(11, 13, 1),
+ /* 101 */ V(11, 13, 1),
+ /* 110 */ V(11, 13, 1),
+ /* 111 */ V(11, 13, 1),
+
+ /* 0000 1011 0000 ... */
+ /* 00 */ V(9, 14, 1), /* 334 */
+ /* 01 */ V(9, 14, 1),
+ /* 10 */ V(11, 12, 2),
+ /* 11 */ V(12, 11, 2),
+
+ /* 0000 1011 0001 ... */
+ /* 00 */ V(8, 14, 2), /* 338 */
+ /* 01 */ V(14, 8, 2),
+ /* 10 */ V(9, 13, 2),
+ /* 11 */ V(14, 7, 2),
+
+ /* 0000 1011 0010 ... */
+ /* 00 */ V(11, 11, 2), /* 342 */
+ /* 01 */ V(8, 13, 2),
+ /* 10 */ V(13, 8, 2),
+ /* 11 */ V(6, 14, 2),
+
+ /* 0000 1011 0011 ... */
+ /* 0 */ V(14, 6, 1), /* 346 */
+ /* 1 */ V(9, 12, 1),
+
+ /* 0000 1011 0100 ... */
+ /* 00 */ V(10, 11, 2), /* 348 */
+ /* 01 */ V(11, 10, 2),
+ /* 10 */ V(14, 5, 2),
+ /* 11 */ V(13, 7, 2),
+
+ /* 0000 1011 0101 ... */
+ /* 00 */ V(4, 14, 1), /* 352 */
+ /* 01 */ V(4, 14, 1),
+ /* 10 */ V(14, 4, 2),
+ /* 11 */ V(8, 12, 2),
+
+ /* 0000 1011 0110 ... */
+ /* 0 */ V(12, 8, 1), /* 356 */
+ /* 1 */ V(3, 14, 1),
+
+ /* 0000 1011 0111 ... */
+ /* 00 */ V(6, 13, 1), /* 358 */
+ /* 01 */ V(6, 13, 1),
+ /* 10 */ V(13, 6, 2),
+ /* 11 */ V(9, 11, 2),
+
+ /* 0000 1011 1000 ... */
+ /* 00 */ V(11, 9, 2), /* 362 */
+ /* 01 */ V(10, 10, 2),
+ /* 10 */ V(14, 1, 1),
+ /* 11 */ V(14, 1, 1),
+
+ /* 0000 1011 1001 ... */
+ /* 00 */ V(13, 4, 1), /* 366 */
+ /* 01 */ V(13, 4, 1),
+ /* 10 */ V(11, 8, 2),
+ /* 11 */ V(10, 9, 2),
+
+ /* 0000 1011 1010 ... */
+ /* 00 */ V(7, 11, 1), /* 370 */
+ /* 01 */ V(7, 11, 1),
+ /* 10 */ V(11, 7, 2),
+ /* 11 */ V(13, 0, 2),
+
+ /* 0000 1011 1100 ... */
+ /* 0 */ V(0, 14, 1), /* 374 */
+ /* 1 */ V(14, 0, 1),
+
+ /* 0000 1011 1101 ... */
+ /* 0 */ V(5, 13, 1), /* 376 */
+ /* 1 */ V(13, 5, 1),
+
+ /* 0000 1011 1110 ... */
+ /* 0 */ V(7, 12, 1), /* 378 */
+ /* 1 */ V(12, 7, 1),
+
+ /* 0000 1011 1111 ... */
+ /* 0 */ V(4, 13, 1), /* 380 */
+ /* 1 */ V(8, 11, 1),
+
+ /* 0000 1100 0000 ... */
+ /* 0 */ V(9, 10, 1), /* 382 */
+ /* 1 */ V(6, 12, 1),
+
+ /* 0000 1100 0001 ... */
+ /* 0 */ V(12, 6, 1), /* 384 */
+ /* 1 */ V(3, 13, 1),
+
+ /* 0000 1100 0010 ... */
+ /* 0 */ V(5, 12, 1), /* 386 */
+ /* 1 */ V(12, 5, 1),
+
+ /* 0000 1100 0100 ... */
+ /* 0 */ V(8, 10, 1), /* 388 */
+ /* 1 */ V(10, 8, 1),
+
+ /* 0000 1100 0101 ... */
+ /* 0 */ V(9, 9, 1), /* 390 */
+ /* 1 */ V(4, 12, 1),
+
+ /* 0000 1100 0110 ... */
+ /* 0 */ V(11, 6, 1), /* 392 */
+ /* 1 */ V(7, 10, 1),
+
+ /* 0000 1100 1000 ... */
+ /* 0 */ V(5, 11, 1), /* 394 */
+ /* 1 */ V(8, 9, 1),
+
+ /* 0000 1100 1011 ... */
+ /* 0 */ V(9, 8, 1), /* 396 */
+ /* 1 */ V(7, 9, 1),
+
+ /* 0000 1101 0101 ... */
+ /* 0 */ V(9, 7, 1), /* 398 */
+ /* 1 */ V(8, 8, 1),
+
+ /* 0000 0110 1100 0001 ... */
+ /* 0 */ V(14, 12, 1), /* 400 */
+ /* 1 */ V(13, 13, 1)
+};
+
+static
+union huffpair const hufftab24[] = {
+ /* 0000 */ PTR(16, 4),
+ /* 0001 */ PTR(32, 4),
+ /* 0010 */ PTR(48, 4),
+ /* 0011 */ V(15, 15, 4),
+ /* 0100 */ PTR(64, 4),
+ /* 0101 */ PTR(80, 4),
+ /* 0110 */ PTR(96, 4),
+ /* 0111 */ PTR(112, 4),
+ /* 1000 */ PTR(128, 4),
+ /* 1001 */ PTR(144, 4),
+ /* 1010 */ PTR(160, 3),
+ /* 1011 */ PTR(168, 2),
+ /* 1100 */ V(1, 1, 4),
+ /* 1101 */ V(0, 1, 4),
+ /* 1110 */ V(1, 0, 4),
+ /* 1111 */ V(0, 0, 4),
+
+ /* 0000 ... */
+ /* 0000 */ V(14, 15, 4), /* 16 */
+ /* 0001 */ V(15, 14, 4),
+ /* 0010 */ V(13, 15, 4),
+ /* 0011 */ V(15, 13, 4),
+ /* 0100 */ V(12, 15, 4),
+ /* 0101 */ V(15, 12, 4),
+ /* 0110 */ V(11, 15, 4),
+ /* 0111 */ V(15, 11, 4),
+ /* 1000 */ V(15, 10, 3),
+ /* 1001 */ V(15, 10, 3),
+ /* 1010 */ V(10, 15, 4),
+ /* 1011 */ V(9, 15, 4),
+ /* 1100 */ V(15, 9, 3),
+ /* 1101 */ V(15, 9, 3),
+ /* 1110 */ V(15, 8, 3),
+ /* 1111 */ V(15, 8, 3),
+
+ /* 0001 ... */
+ /* 0000 */ V(8, 15, 4), /* 32 */
+ /* 0001 */ V(7, 15, 4),
+ /* 0010 */ V(15, 7, 3),
+ /* 0011 */ V(15, 7, 3),
+ /* 0100 */ V(6, 15, 3),
+ /* 0101 */ V(6, 15, 3),
+ /* 0110 */ V(15, 6, 3),
+ /* 0111 */ V(15, 6, 3),
+ /* 1000 */ V(5, 15, 3),
+ /* 1001 */ V(5, 15, 3),
+ /* 1010 */ V(15, 5, 3),
+ /* 1011 */ V(15, 5, 3),
+ /* 1100 */ V(4, 15, 3),
+ /* 1101 */ V(4, 15, 3),
+ /* 1110 */ V(15, 4, 3),
+ /* 1111 */ V(15, 4, 3),
+
+ /* 0010 ... */
+ /* 0000 */ V(3, 15, 3), /* 48 */
+ /* 0001 */ V(3, 15, 3),
+ /* 0010 */ V(15, 3, 3),
+ /* 0011 */ V(15, 3, 3),
+ /* 0100 */ V(2, 15, 3),
+ /* 0101 */ V(2, 15, 3),
+ /* 0110 */ V(15, 2, 3),
+ /* 0111 */ V(15, 2, 3),
+ /* 1000 */ V(15, 1, 3),
+ /* 1001 */ V(15, 1, 3),
+ /* 1010 */ V(1, 15, 4),
+ /* 1011 */ V(15, 0, 4),
+ /* 1100 */ PTR(172, 3),
+ /* 1101 */ PTR(180, 3),
+ /* 1110 */ PTR(188, 3),
+ /* 1111 */ PTR(196, 3),
+
+ /* 0100 ... */
+ /* 0000 */ PTR(204, 4), /* 64 */
+ /* 0001 */ PTR(220, 3),
+ /* 0010 */ PTR(228, 3),
+ /* 0011 */ PTR(236, 3),
+ /* 0100 */ PTR(244, 2),
+ /* 0101 */ PTR(248, 2),
+ /* 0110 */ PTR(252, 2),
+ /* 0111 */ PTR(256, 2),
+ /* 1000 */ PTR(260, 2),
+ /* 1001 */ PTR(264, 2),
+ /* 1010 */ PTR(268, 2),
+ /* 1011 */ PTR(272, 2),
+ /* 1100 */ PTR(276, 2),
+ /* 1101 */ PTR(280, 3),
+ /* 1110 */ PTR(288, 2),
+ /* 1111 */ PTR(292, 2),
+
+ /* 0101 ... */
+ /* 0000 */ PTR(296, 2), /* 80 */
+ /* 0001 */ PTR(300, 3),
+ /* 0010 */ PTR(308, 2),
+ /* 0011 */ PTR(312, 3),
+ /* 0100 */ PTR(320, 1),
+ /* 0101 */ PTR(322, 2),
+ /* 0110 */ PTR(326, 2),
+ /* 0111 */ PTR(330, 1),
+ /* 1000 */ PTR(332, 2),
+ /* 1001 */ PTR(336, 1),
+ /* 1010 */ PTR(338, 1),
+ /* 1011 */ PTR(340, 1),
+ /* 1100 */ PTR(342, 1),
+ /* 1101 */ PTR(344, 1),
+ /* 1110 */ PTR(346, 1),
+ /* 1111 */ PTR(348, 1),
+
+ /* 0110 ... */
+ /* 0000 */ PTR(350, 1), /* 96 */
+ /* 0001 */ PTR(352, 1),
+ /* 0010 */ PTR(354, 1),
+ /* 0011 */ PTR(356, 1),
+ /* 0100 */ PTR(358, 1),
+ /* 0101 */ PTR(360, 1),
+ /* 0110 */ PTR(362, 1),
+ /* 0111 */ PTR(364, 1),
+ /* 1000 */ PTR(366, 1),
+ /* 1001 */ PTR(368, 1),
+ /* 1010 */ PTR(370, 2),
+ /* 1011 */ PTR(374, 1),
+ /* 1100 */ PTR(376, 2),
+ /* 1101 */ V(7, 3, 4),
+ /* 1110 */ PTR(380, 1),
+ /* 1111 */ V(7, 2, 4),
+
+ /* 0111 ... */
+ /* 0000 */ V(4, 6, 4), /* 112 */
+ /* 0001 */ V(6, 4, 4),
+ /* 0010 */ V(5, 5, 4),
+ /* 0011 */ V(7, 1, 4),
+ /* 0100 */ V(3, 6, 4),
+ /* 0101 */ V(6, 3, 4),
+ /* 0110 */ V(4, 5, 4),
+ /* 0111 */ V(5, 4, 4),
+ /* 1000 */ V(2, 6, 4),
+ /* 1001 */ V(6, 2, 4),
+ /* 1010 */ V(1, 6, 4),
+ /* 1011 */ V(6, 1, 4),
+ /* 1100 */ PTR(382, 1),
+ /* 1101 */ V(3, 5, 4),
+ /* 1110 */ V(5, 3, 4),
+ /* 1111 */ V(4, 4, 4),
+
+ /* 1000 ... */
+ /* 0000 */ V(2, 5, 4), /* 128 */
+ /* 0001 */ V(5, 2, 4),
+ /* 0010 */ V(1, 5, 4),
+ /* 0011 */ PTR(384, 1),
+ /* 0100 */ V(5, 1, 3),
+ /* 0101 */ V(5, 1, 3),
+ /* 0110 */ V(3, 4, 4),
+ /* 0111 */ V(4, 3, 4),
+ /* 1000 */ V(2, 4, 3),
+ /* 1001 */ V(2, 4, 3),
+ /* 1010 */ V(4, 2, 3),
+ /* 1011 */ V(4, 2, 3),
+ /* 1100 */ V(3, 3, 3),
+ /* 1101 */ V(3, 3, 3),
+ /* 1110 */ V(1, 4, 3),
+ /* 1111 */ V(1, 4, 3),
+
+ /* 1001 ... */
+ /* 0000 */ V(4, 1, 3), /* 144 */
+ /* 0001 */ V(4, 1, 3),
+ /* 0010 */ V(0, 4, 4),
+ /* 0011 */ V(4, 0, 4),
+ /* 0100 */ V(2, 3, 3),
+ /* 0101 */ V(2, 3, 3),
+ /* 0110 */ V(3, 2, 3),
+ /* 0111 */ V(3, 2, 3),
+ /* 1000 */ V(1, 3, 2),
+ /* 1001 */ V(1, 3, 2),
+ /* 1010 */ V(1, 3, 2),
+ /* 1011 */ V(1, 3, 2),
+ /* 1100 */ V(3, 1, 2),
+ /* 1101 */ V(3, 1, 2),
+ /* 1110 */ V(3, 1, 2),
+ /* 1111 */ V(3, 1, 2),
+
+ /* 1010 ... */
+ /* 000 */ V(0, 3, 3), /* 160 */
+ /* 001 */ V(3, 0, 3),
+ /* 010 */ V(2, 2, 2),
+ /* 011 */ V(2, 2, 2),
+ /* 100 */ V(1, 2, 1),
+ /* 101 */ V(1, 2, 1),
+ /* 110 */ V(1, 2, 1),
+ /* 111 */ V(1, 2, 1),
+
+ /* 1011 ... */
+ /* 00 */ V(2, 1, 1), /* 168 */
+ /* 01 */ V(2, 1, 1),
+ /* 10 */ V(0, 2, 2),
+ /* 11 */ V(2, 0, 2),
+
+ /* 0010 1100 ... */
+ /* 000 */ V(0, 15, 1), /* 172 */
+ /* 001 */ V(0, 15, 1),
+ /* 010 */ V(0, 15, 1),
+ /* 011 */ V(0, 15, 1),
+ /* 100 */ V(14, 14, 3),
+ /* 101 */ V(13, 14, 3),
+ /* 110 */ V(14, 13, 3),
+ /* 111 */ V(12, 14, 3),
+
+ /* 0010 1101 ... */
+ /* 000 */ V(14, 12, 3), /* 180 */
+ /* 001 */ V(13, 13, 3),
+ /* 010 */ V(11, 14, 3),
+ /* 011 */ V(14, 11, 3),
+ /* 100 */ V(12, 13, 3),
+ /* 101 */ V(13, 12, 3),
+ /* 110 */ V(10, 14, 3),
+ /* 111 */ V(14, 10, 3),
+
+ /* 0010 1110 ... */
+ /* 000 */ V(11, 13, 3), /* 188 */
+ /* 001 */ V(13, 11, 3),
+ /* 010 */ V(12, 12, 3),
+ /* 011 */ V(9, 14, 3),
+ /* 100 */ V(14, 9, 3),
+ /* 101 */ V(10, 13, 3),
+ /* 110 */ V(13, 10, 3),
+ /* 111 */ V(11, 12, 3),
+
+ /* 0010 1111 ... */
+ /* 000 */ V(12, 11, 3), /* 196 */
+ /* 001 */ V(8, 14, 3),
+ /* 010 */ V(14, 8, 3),
+ /* 011 */ V(9, 13, 3),
+ /* 100 */ V(13, 9, 3),
+ /* 101 */ V(7, 14, 3),
+ /* 110 */ V(14, 7, 3),
+ /* 111 */ V(10, 12, 3),
+
+ /* 0100 0000 ... */
+ /* 0000 */ V(12, 10, 3), /* 204 */
+ /* 0001 */ V(12, 10, 3),
+ /* 0010 */ V(11, 11, 3),
+ /* 0011 */ V(11, 11, 3),
+ /* 0100 */ V(8, 13, 3),
+ /* 0101 */ V(8, 13, 3),
+ /* 0110 */ V(13, 8, 3),
+ /* 0111 */ V(13, 8, 3),
+ /* 1000 */ V(0, 14, 4),
+ /* 1001 */ V(14, 0, 4),
+ /* 1010 */ V(0, 13, 3),
+ /* 1011 */ V(0, 13, 3),
+ /* 1100 */ V(14, 6, 2),
+ /* 1101 */ V(14, 6, 2),
+ /* 1110 */ V(14, 6, 2),
+ /* 1111 */ V(14, 6, 2),
+
+ /* 0100 0001 ... */
+ /* 000 */ V(6, 14, 3), /* 220 */
+ /* 001 */ V(9, 12, 3),
+ /* 010 */ V(12, 9, 2),
+ /* 011 */ V(12, 9, 2),
+ /* 100 */ V(5, 14, 2),
+ /* 101 */ V(5, 14, 2),
+ /* 110 */ V(11, 10, 2),
+ /* 111 */ V(11, 10, 2),
+
+ /* 0100 0010 ... */
+ /* 000 */ V(14, 5, 2), /* 228 */
+ /* 001 */ V(14, 5, 2),
+ /* 010 */ V(10, 11, 3),
+ /* 011 */ V(7, 13, 3),
+ /* 100 */ V(13, 7, 2),
+ /* 101 */ V(13, 7, 2),
+ /* 110 */ V(14, 4, 2),
+ /* 111 */ V(14, 4, 2),
+
+ /* 0100 0011 ... */
+ /* 000 */ V(8, 12, 2), /* 236 */
+ /* 001 */ V(8, 12, 2),
+ /* 010 */ V(12, 8, 2),
+ /* 011 */ V(12, 8, 2),
+ /* 100 */ V(4, 14, 3),
+ /* 101 */ V(2, 14, 3),
+ /* 110 */ V(3, 14, 2),
+ /* 111 */ V(3, 14, 2),
+
+ /* 0100 0100 ... */
+ /* 00 */ V(6, 13, 2), /* 244 */
+ /* 01 */ V(13, 6, 2),
+ /* 10 */ V(14, 3, 2),
+ /* 11 */ V(9, 11, 2),
+
+ /* 0100 0101 ... */
+ /* 00 */ V(11, 9, 2), /* 248 */
+ /* 01 */ V(10, 10, 2),
+ /* 10 */ V(14, 2, 2),
+ /* 11 */ V(1, 14, 2),
+
+ /* 0100 0110 ... */
+ /* 00 */ V(14, 1, 2), /* 252 */
+ /* 01 */ V(5, 13, 2),
+ /* 10 */ V(13, 5, 2),
+ /* 11 */ V(7, 12, 2),
+
+ /* 0100 0111 ... */
+ /* 00 */ V(12, 7, 2), /* 256 */
+ /* 01 */ V(4, 13, 2),
+ /* 10 */ V(8, 11, 2),
+ /* 11 */ V(11, 8, 2),
+
+ /* 0100 1000 ... */
+ /* 00 */ V(13, 4, 2), /* 260 */
+ /* 01 */ V(9, 10, 2),
+ /* 10 */ V(10, 9, 2),
+ /* 11 */ V(6, 12, 2),
+
+ /* 0100 1001 ... */
+ /* 00 */ V(12, 6, 2), /* 264 */
+ /* 01 */ V(3, 13, 2),
+ /* 10 */ V(13, 3, 2),
+ /* 11 */ V(2, 13, 2),
+
+ /* 0100 1010 ... */
+ /* 00 */ V(13, 2, 2), /* 268 */
+ /* 01 */ V(1, 13, 2),
+ /* 10 */ V(7, 11, 2),
+ /* 11 */ V(11, 7, 2),
+
+ /* 0100 1011 ... */
+ /* 00 */ V(13, 1, 2), /* 272 */
+ /* 01 */ V(5, 12, 2),
+ /* 10 */ V(12, 5, 2),
+ /* 11 */ V(8, 10, 2),
+
+ /* 0100 1100 ... */
+ /* 00 */ V(10, 8, 2), /* 276 */
+ /* 01 */ V(9, 9, 2),
+ /* 10 */ V(4, 12, 2),
+ /* 11 */ V(12, 4, 2),
+
+ /* 0100 1101 ... */
+ /* 000 */ V(6, 11, 2), /* 280 */
+ /* 001 */ V(6, 11, 2),
+ /* 010 */ V(11, 6, 2),
+ /* 011 */ V(11, 6, 2),
+ /* 100 */ V(13, 0, 3),
+ /* 101 */ V(0, 12, 3),
+ /* 110 */ V(3, 12, 2),
+ /* 111 */ V(3, 12, 2),
+
+ /* 0100 1110 ... */
+ /* 00 */ V(12, 3, 2), /* 288 */
+ /* 01 */ V(7, 10, 2),
+ /* 10 */ V(10, 7, 2),
+ /* 11 */ V(2, 12, 2),
+
+ /* 0100 1111 ... */
+ /* 00 */ V(12, 2, 2), /* 292 */
+ /* 01 */ V(5, 11, 2),
+ /* 10 */ V(11, 5, 2),
+ /* 11 */ V(1, 12, 2),
+
+ /* 0101 0000 ... */
+ /* 00 */ V(8, 9, 2), /* 296 */
+ /* 01 */ V(9, 8, 2),
+ /* 10 */ V(12, 1, 2),
+ /* 11 */ V(4, 11, 2),
+
+ /* 0101 0001 ... */
+ /* 000 */ V(12, 0, 3), /* 300 */
+ /* 001 */ V(0, 11, 3),
+ /* 010 */ V(3, 11, 2),
+ /* 011 */ V(3, 11, 2),
+ /* 100 */ V(11, 0, 3),
+ /* 101 */ V(0, 10, 3),
+ /* 110 */ V(1, 10, 2),
+ /* 111 */ V(1, 10, 2),
+
+ /* 0101 0010 ... */
+ /* 00 */ V(11, 4, 1), /* 308 */
+ /* 01 */ V(11, 4, 1),
+ /* 10 */ V(6, 10, 2),
+ /* 11 */ V(10, 6, 2),
+
+ /* 0101 0011 ... */
+ /* 000 */ V(7, 9, 2), /* 312 */
+ /* 001 */ V(7, 9, 2),
+ /* 010 */ V(9, 7, 2),
+ /* 011 */ V(9, 7, 2),
+ /* 100 */ V(10, 0, 3),
+ /* 101 */ V(0, 9, 3),
+ /* 110 */ V(9, 0, 2),
+ /* 111 */ V(9, 0, 2),
+
+ /* 0101 0100 ... */
+ /* 0 */ V(11, 3, 1), /* 320 */
+ /* 1 */ V(8, 8, 1),
+
+ /* 0101 0101 ... */
+ /* 00 */ V(2, 11, 2), /* 322 */
+ /* 01 */ V(5, 10, 2),
+ /* 10 */ V(11, 2, 1),
+ /* 11 */ V(11, 2, 1),
+
+ /* 0101 0110 ... */
+ /* 00 */ V(10, 5, 2), /* 326 */
+ /* 01 */ V(1, 11, 2),
+ /* 10 */ V(11, 1, 2),
+ /* 11 */ V(6, 9, 2),
+
+ /* 0101 0111 ... */
+ /* 0 */ V(9, 6, 1), /* 330 */
+ /* 1 */ V(10, 4, 1),
+
+ /* 0101 1000 ... */
+ /* 00 */ V(4, 10, 2), /* 332 */
+ /* 01 */ V(7, 8, 2),
+ /* 10 */ V(8, 7, 1),
+ /* 11 */ V(8, 7, 1),
+
+ /* 0101 1001 ... */
+ /* 0 */ V(3, 10, 1), /* 336 */
+ /* 1 */ V(10, 3, 1),
+
+ /* 0101 1010 ... */
+ /* 0 */ V(5, 9, 1), /* 338 */
+ /* 1 */ V(9, 5, 1),
+
+ /* 0101 1011 ... */
+ /* 0 */ V(2, 10, 1), /* 340 */
+ /* 1 */ V(10, 2, 1),
+
+ /* 0101 1100 ... */
+ /* 0 */ V(10, 1, 1), /* 342 */
+ /* 1 */ V(6, 8, 1),
+
+ /* 0101 1101 ... */
+ /* 0 */ V(8, 6, 1), /* 344 */
+ /* 1 */ V(7, 7, 1),
+
+ /* 0101 1110 ... */
+ /* 0 */ V(4, 9, 1), /* 346 */
+ /* 1 */ V(9, 4, 1),
+
+ /* 0101 1111 ... */
+ /* 0 */ V(3, 9, 1), /* 348 */
+ /* 1 */ V(9, 3, 1),
+
+ /* 0110 0000 ... */
+ /* 0 */ V(5, 8, 1), /* 350 */
+ /* 1 */ V(8, 5, 1),
+
+ /* 0110 0001 ... */
+ /* 0 */ V(2, 9, 1), /* 352 */
+ /* 1 */ V(6, 7, 1),
+
+ /* 0110 0010 ... */
+ /* 0 */ V(7, 6, 1), /* 354 */
+ /* 1 */ V(9, 2, 1),
+
+ /* 0110 0011 ... */
+ /* 0 */ V(1, 9, 1), /* 356 */
+ /* 1 */ V(9, 1, 1),
+
+ /* 0110 0100 ... */
+ /* 0 */ V(4, 8, 1), /* 358 */
+ /* 1 */ V(8, 4, 1),
+
+ /* 0110 0101 ... */
+ /* 0 */ V(5, 7, 1), /* 360 */
+ /* 1 */ V(7, 5, 1),
+
+ /* 0110 0110 ... */
+ /* 0 */ V(3, 8, 1), /* 362 */
+ /* 1 */ V(8, 3, 1),
+
+ /* 0110 0111 ... */
+ /* 0 */ V(6, 6, 1), /* 364 */
+ /* 1 */ V(2, 8, 1),
+
+ /* 0110 1000 ... */
+ /* 0 */ V(8, 2, 1), /* 366 */
+ /* 1 */ V(1, 8, 1),
+
+ /* 0110 1001 ... */
+ /* 0 */ V(4, 7, 1), /* 368 */
+ /* 1 */ V(7, 4, 1),
+
+ /* 0110 1010 ... */
+ /* 00 */ V(8, 1, 1), /* 370 */
+ /* 01 */ V(8, 1, 1),
+ /* 10 */ V(0, 8, 2),
+ /* 11 */ V(8, 0, 2),
+
+ /* 0110 1011 ... */
+ /* 0 */ V(5, 6, 1), /* 374 */
+ /* 1 */ V(6, 5, 1),
+
+ /* 0110 1100 ... */
+ /* 00 */ V(1, 7, 1), /* 376 */
+ /* 01 */ V(1, 7, 1),
+ /* 10 */ V(0, 7, 2),
+ /* 11 */ V(7, 0, 2),
+
+ /* 0110 1110 ... */
+ /* 0 */ V(3, 7, 1), /* 380 */
+ /* 1 */ V(2, 7, 1),
+
+ /* 0111 1100 ... */
+ /* 0 */ V(0, 6, 1), /* 382 */
+ /* 1 */ V(6, 0, 1),
+
+ /* 1000 0011 ... */
+ /* 0 */ V(0, 5, 1), /* 384 */
+ /* 1 */ V(5, 0, 1)
+};
+
+# undef V
+# undef PTR
+
+/* external tables */
+
+union huffquad const *const mad_huff_quad_table[2] = { hufftabA, hufftabB };
+
+struct hufftable const mad_huff_pair_table[32] = {
+ /* 0 */ { hufftab0, 0, 0 },
+ /* 1 */ { hufftab1, 0, 3 },
+ /* 2 */ { hufftab2, 0, 3 },
+ /* 3 */ { hufftab3, 0, 3 },
+ /* 4 */ { 0 /* not used */ },
+ /* 5 */ { hufftab5, 0, 3 },
+ /* 6 */ { hufftab6, 0, 4 },
+ /* 7 */ { hufftab7, 0, 4 },
+ /* 8 */ { hufftab8, 0, 4 },
+ /* 9 */ { hufftab9, 0, 4 },
+ /* 10 */ { hufftab10, 0, 4 },
+ /* 11 */ { hufftab11, 0, 4 },
+ /* 12 */ { hufftab12, 0, 4 },
+ /* 13 */ { hufftab13, 0, 4 },
+ /* 14 */ { 0 /* not used */ },
+ /* 15 */ { hufftab15, 0, 4 },
+ /* 16 */ { hufftab16, 1, 4 },
+ /* 17 */ { hufftab16, 2, 4 },
+ /* 18 */ { hufftab16, 3, 4 },
+ /* 19 */ { hufftab16, 4, 4 },
+ /* 20 */ { hufftab16, 6, 4 },
+ /* 21 */ { hufftab16, 8, 4 },
+ /* 22 */ { hufftab16, 10, 4 },
+ /* 23 */ { hufftab16, 13, 4 },
+ /* 24 */ { hufftab24, 4, 4 },
+ /* 25 */ { hufftab24, 5, 4 },
+ /* 26 */ { hufftab24, 6, 4 },
+ /* 27 */ { hufftab24, 7, 4 },
+ /* 28 */ { hufftab24, 8, 4 },
+ /* 29 */ { hufftab24, 9, 4 },
+ /* 30 */ { hufftab24, 11, 4 },
+ /* 31 */ { hufftab24, 13, 4 }
+};
diff --git a/core/multimedia/opieplayer/libmad/huffman.h b/core/multimedia/opieplayer/libmad/huffman.h
new file mode 100644
index 0000000..1801210
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/huffman.h
@@ -0,0 +1,66 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_HUFFMAN_H
+# define LIBMAD_HUFFMAN_H
+
+union huffquad {
+ struct {
+ unsigned short final : 1;
+ unsigned short hlen : 3;
+ unsigned short v : 1;
+ unsigned short w : 1;
+ unsigned short x : 1;
+ unsigned short y : 1;
+ } value;
+ struct {
+ unsigned short final : 1;
+ unsigned short bits : 3;
+ unsigned short offset : 12;
+ } ptr;
+ unsigned short final : 1;
+};
+
+union huffpair {
+ struct {
+ unsigned short final : 1;
+ unsigned short hlen : 3;
+ unsigned short x : 4;
+ unsigned short y : 4;
+ } value;
+ struct {
+ unsigned short final : 1;
+ unsigned short bits : 3;
+ unsigned short offset : 12;
+ } ptr;
+ unsigned short final : 1;
+};
+
+struct hufftable {
+ union huffpair const *table;
+ unsigned short linbits;
+ unsigned short startbits;
+};
+
+extern union huffquad const *const mad_huff_quad_table[2];
+extern struct hufftable const mad_huff_pair_table[32];
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/imdct_l_arm.S b/core/multimedia/opieplayer/libmad/imdct_l_arm.S
new file mode 100644
index 0000000..b86ba11
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/imdct_l_arm.S
@@ -0,0 +1,1000 @@
+/*****************************************************************************
+* Copyright (C) 2000-2001 Andre McCurdy <armccurdy@yahoo.co.uk>
+*
+* This program is free software. you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation@ either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY, without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program@ if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*
+*****************************************************************************
+*
+* Notes:
+*
+*
+*****************************************************************************
+*
+* $Id$
+*
+* 2001/03/24: Andre McCurdy <armccurdy@yahoo.co.uk>
+* - Corrected PIC unsafe loading of address of 'imdct36_long_karray'
+*
+* 2000/09/20: Robert Leslie <rob@mars.org>
+* - Added a global symbol with leading underscore per suggestion of
+* Simon Burge to support linking with the a.out format.
+*
+* 2000/09/15: Robert Leslie <rob@mars.org>
+* - Fixed a small bug where flags were changed before a conditional branch.
+*
+* 2000/09/15: Andre McCurdy <armccurdy@yahoo.co.uk>
+* - Applied Nicolas Pitre's rounding optimisation in all remaining places.
+*
+* 2000/09/09: Nicolas Pitre <nico@cam.org>
+* - Optimized rounding + scaling operations.
+*
+* 2000/08/09: Andre McCurdy <armccurdy@yahoo.co.uk>
+* - Original created.
+*
+****************************************************************************/
+
+
+/*
+ On entry:
+
+ r0 = pointer to 18 element input array
+ r1 = pointer to 36 element output array
+ r2 = windowing block type
+
+
+ Stack frame created during execution of the function:
+
+ Initial Holds:
+ Stack
+ pointer
+ minus:
+
+ 0
+ 4 lr
+ 8 r11
+ 12 r10
+ 16 r9
+ 20 r8
+ 24 r7
+ 28 r6
+ 32 r5
+ 36 r4
+
+ 40 r2 : windowing block type
+
+ 44 ct00 high
+ 48 ct00 low
+ 52 ct01 high
+ 56 ct01 low
+ 60 ct04 high
+ 64 ct04 low
+ 68 ct06 high
+ 72 ct06 low
+ 76 ct05 high
+ 80 ct05 low
+ 84 ct03 high
+ 88 ct03 low
+ 92 -ct05 high
+ 96 -ct05 low
+ 100 -ct07 high
+ 104 -ct07 low
+ 108 ct07 high
+ 112 ct07 low
+ 116 ct02 high
+ 120 ct02 low
+*/
+
+#define BLOCK_MODE_NORMAL 0
+#define BLOCK_MODE_START 1
+#define BLOCK_MODE_STOP 3
+
+
+#define X0 0x00
+#define X1 0x04
+#define X2 0x08
+#define X3 0x0C
+#define X4 0x10
+#define X5 0x14
+#define X6 0x18
+#define X7 0x1c
+#define X8 0x20
+#define X9 0x24
+#define X10 0x28
+#define X11 0x2c
+#define X12 0x30
+#define X13 0x34
+#define X14 0x38
+#define X15 0x3c
+#define X16 0x40
+#define X17 0x44
+
+#define x0 0x00
+#define x1 0x04
+#define x2 0x08
+#define x3 0x0C
+#define x4 0x10
+#define x5 0x14
+#define x6 0x18
+#define x7 0x1c
+#define x8 0x20
+#define x9 0x24
+#define x10 0x28
+#define x11 0x2c
+#define x12 0x30
+#define x13 0x34
+#define x14 0x38
+#define x15 0x3c
+#define x16 0x40
+#define x17 0x44
+#define x18 0x48
+#define x19 0x4c
+#define x20 0x50
+#define x21 0x54
+#define x22 0x58
+#define x23 0x5c
+#define x24 0x60
+#define x25 0x64
+#define x26 0x68
+#define x27 0x6c
+#define x28 0x70
+#define x29 0x74
+#define x30 0x78
+#define x31 0x7c
+#define x32 0x80
+#define x33 0x84
+#define x34 0x88
+#define x35 0x8c
+
+#define K00 0x0ffc19fd
+#define K01 0x00b2aa3e
+#define K02 0x0fdcf549
+#define K03 0x0216a2a2
+#define K04 0x0f9ee890
+#define K05 0x03768962
+#define K06 0x0f426cb5
+#define K07 0x04cfb0e2
+#define K08 0x0ec835e8
+#define K09 0x061f78aa
+#define K10 0x0e313245
+#define K11 0x07635284
+#define K12 0x0d7e8807
+#define K13 0x0898c779
+#define K14 0x0cb19346
+#define K15 0x09bd7ca0
+#define K16 0x0bcbe352
+#define K17 0x0acf37ad
+
+#define minus_K02 0xf0230ab7
+
+#define WL0 0x00b2aa3e
+#define WL1 0x0216a2a2
+#define WL2 0x03768962
+#define WL3 0x04cfb0e2
+#define WL4 0x061f78aa
+#define WL5 0x07635284
+#define WL6 0x0898c779
+#define WL7 0x09bd7ca0
+#define WL8 0x0acf37ad
+#define WL9 0x0bcbe352
+#define WL10 0x0cb19346
+#define WL11 0x0d7e8807
+#define WL12 0x0e313245
+#define WL13 0x0ec835e8
+#define WL14 0x0f426cb5
+#define WL15 0x0f9ee890
+#define WL16 0x0fdcf549
+#define WL17 0x0ffc19fd
+
+
+@*****************************************************************************
+
+
+ .text
+ .align
+
+ .global III_imdct_l
+ .global _III_imdct_l
+
+III_imdct_l:
+_III_imdct_l:
+
+ stmdb sp!, { r2, r4 - r11, lr } @ all callee saved regs, plus arg3
+
+ ldr r4, =K08 @ r4 = K08
+ ldr r5, =K09 @ r5 = K09
+ ldr r8, [r0, #X4] @ r8 = X4
+ ldr r9, [r0, #X13] @ r9 = X13
+ rsb r6, r4, #0 @ r6 = -K08
+ rsb r7, r5, #0 @ r7 = -K09
+
+ smull r2, r3, r4, r8 @ r2..r3 = (X4 * K08)
+ smlal r2, r3, r5, r9 @ r2..r3 = (X4 * K08) + (X13 * K09) = ct01
+
+ smull r10, lr, r8, r5 @ r10..lr = (X4 * K09)
+ smlal r10, lr, r9, r6 @ r10..lr = (X4 * K09) + (X13 * -K08) = ct00
+
+ ldr r8, [r0, #X7] @ r8 = X7
+ ldr r9, [r0, #X16] @ r9 = X16
+
+ stmdb sp!, { r2, r3, r10, lr } @ stack ct00_h, ct00_l, ct01_h, ct01_l
+
+ add r8, r8, r9 @ r8 = (X7 + X16)
+ ldr r9, [r0, #X1] @ r9 = X1
+
+ smlal r2, r3, r6, r8 @ r2..r3 = ct01 + ((X7 + X16) * -K08)
+ smlal r2, r3, r7, r9 @ r2..r3 += (X1 * -K09)
+
+ ldr r7, [r0, #X10] @ r7 = X10
+
+ rsbs r10, r10, #0
+ rsc lr, lr, #0 @ r10..lr = -ct00
+
+ smlal r2, r3, r5, r7 @ r2..r3 += (X10 * K09) = ct06
+
+ smlal r10, lr, r9, r6 @ r10..lr = -ct00 + ( X1 * -K08)
+ smlal r10, lr, r8, r5 @ r10..lr += ((X7 + X16) * K09)
+ smlal r10, lr, r7, r4 @ r10..lr += ( X10 * K08) = ct04
+
+ stmdb sp!, { r2, r3, r10, lr } @ stack ct04_h, ct04_l, ct06_h, ct06_l
+
+ @----
+
+ ldr r7, [r0, #X0]
+ ldr r8, [r0, #X11]
+ ldr r9, [r0, #X12]
+ sub r7, r7, r8
+ sub r7, r7, r9 @ r7 = (X0 - X11 -X12) = ct14
+
+ ldr r9, [r0, #X3]
+ ldr r8, [r0, #X8]
+ ldr r11, [r0, #X15]
+ sub r8, r8, r9
+ add r8, r8, r11 @ r8 = (X8 - X3 + X15) = ct16
+
+ add r11, r7, r8 @ r11 = ct14 + ct16 = ct18
+
+ smlal r2, r3, r6, r11 @ r2..r3 = ct06 + ((X0 - X11 - X3 + X15 + X8 - X12) * -K08)
+
+ ldr r6, [r0, #X2]
+ ldr r9, [r0, #X9]
+ ldr r12, [r0, #X14]
+ sub r6, r6, r9
+ sub r6, r6, r12 @ r6 = (X2 - X9 - X14) = ct15
+
+ ldr r9, [r0, #X5]
+ ldr r12, [r0, #X6]
+ sub r9, r9, r12
+ ldr r12, [r0, #X17]
+ sub r9, r9, r12 @ r9 = (X5 - X6 - X17) = ct17
+
+ add r12, r9, r6 @ r12 = ct15 + ct17 = ct19
+
+ smlal r2, r3, r5, r12 @ r2..r3 += ((X2 - X9 + X5 - X6 - X17 - X14) * K09)
+
+ smlal r10, lr, r11, r5 @ r10..lr = ct04 + (ct18 * K09)
+ smlal r10, lr, r12, r4 @ r10..lr = ct04 + (ct18 * K09) + (ct19 * K08)
+
+ movs r2, r2, lsr #28
+ adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
+ str r2, [r1, #x22] @ store result x22
+
+ movs r10, r10, lsr #28
+ adc r10, r10, lr, lsl #4 @ r10 = bits[59..28] of r10..lr
+ str r10, [r1, #x4] @ store result x4
+
+ @----
+
+ ldmia sp, { r2, r3, r4, r5 } @ r2..r3 = ct06, r4..r5 = ct04 (dont update sp)
+
+ @ r2..r3 = ct06
+ @ r4..r5 = ct04
+ @ r6 = ct15
+ @ r7 = ct14
+ @ r8 = ct16
+ @ r9 = ct17
+ @ r10 = .
+ @ r11 = .
+ @ r12 = .
+ @ lr = .
+
+ ldr r10, =K03 @ r10 = K03
+ ldr lr, =K15 @ lr = K15
+
+ smlal r2, r3, r10, r7 @ r2..r3 = ct06 + (ct14 * K03)
+ smlal r4, r5, lr, r7 @ r4..r5 = ct04 + (ct14 * K15)
+
+ ldr r12, =K14 @ r12 = K14
+ rsb r10, r10, #0 @ r10 = -K03
+
+ smlal r2, r3, lr, r6 @ r2..r3 += (ct15 * K15)
+ smlal r4, r5, r10, r6 @ r4..r5 += (ct15 * -K03)
+ smlal r2, r3, r12, r8 @ r2..r3 += (ct16 * K14)
+
+ ldr r11, =minus_K02 @ r11 = -K02
+ rsb r12, r12, #0 @ r12 = -K14
+
+ smlal r4, r5, r12, r9 @ r4..r5 += (ct17 * -K14)
+ smlal r2, r3, r11, r9 @ r2..r3 += (ct17 * -K02)
+ smlal r4, r5, r11, r8 @ r4..r5 += (ct16 * -K02)
+
+ movs r2, r2, lsr #28
+ adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
+ str r2, [r1, #x7] @ store result x7
+
+ movs r4, r4, lsr #28
+ adc r4, r4, r5, lsl #4 @ r4 = bits[59..28] of r4..r5
+ str r4, [r1, #x1] @ store result x1
+
+ @----
+
+ ldmia sp, { r2, r3, r4, r5 } @ r2..r3 = ct06, r4..r5 = ct04 (dont update sp)
+
+ @ r2..r3 = ct06
+ @ r4..r5 = ct04
+ @ r6 = ct15
+ @ r7 = ct14
+ @ r8 = ct16
+ @ r9 = ct17
+ @ r10 = -K03
+ @ r11 = -K02
+ @ r12 = -K14
+ @ lr = K15
+
+ rsbs r2, r2, #0
+ rsc r3, r3, #0 @ r2..r3 = -ct06
+
+ smlal r2, r3, r12, r7 @ r2..r3 = -ct06 + (ct14 * -K14)
+ smlal r2, r3, r10, r8 @ r2..r3 += (ct16 * -K03)
+
+ smlal r4, r5, r12, r6 @ r4..r5 = ct04 + (ct15 * -K14)
+ smlal r4, r5, r10, r9 @ r4..r5 += (ct17 * -K03)
+ smlal r4, r5, lr, r8 @ r4..r5 += (ct16 * K15)
+ smlal r4, r5, r11, r7 @ r4..r5 += (ct14 * -K02)
+
+ rsb lr, lr, #0 @ lr = -K15
+ rsb r11, r11, #0 @ r11 = K02
+
+ smlal r2, r3, lr, r9 @ r2..r3 += (ct17 * -K15)
+ smlal r2, r3, r11, r6 @ r2..r3 += (ct15 * K02)
+
+ movs r4, r4, lsr #28
+ adc r4, r4, r5, lsl #4 @ r4 = bits[59..28] of r4..r5
+ str r4, [r1, #x25] @ store result x25
+
+ movs r2, r2, lsr #28
+ adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
+ str r2, [r1, #x19] @ store result x19
+
+ @----
+
+ ldr r2, [sp, #16] @ r2 = ct01_l
+ ldr r3, [sp, #20] @ r3 = ct01_h
+
+ ldr r6, [r0, #X1]
+ ldr r8, [r0, #X7]
+ ldr r9, [r0, #X10]
+ ldr r7, [r0, #X16]
+
+ rsbs r2, r2, #0
+ rsc r3, r3, #0 @ r2..r3 = -ct01
+
+ mov r4, r2
+ mov r5, r3 @ r4..r5 = -ct01
+
+ @ r2..r3 = -ct01
+ @ r4..r5 = -ct01
+ @ r6 = X1
+ @ r7 = X16
+ @ r8 = X7
+ @ r9 = X10
+ @ r10 = -K03
+ @ r11 = K02
+ @ r12 = -K14
+ @ lr = -K15
+
+ smlal r4, r5, r12, r7 @ r4..r5 = -ct01 + (X16 * -K14)
+ smlal r2, r3, lr, r9 @ r2..r3 = -ct01 + (X10 * -K15)
+
+ smlal r4, r5, r10, r8 @ r4..r5 += (X7 * -K03)
+ smlal r2, r3, r10, r7 @ r2..r3 += (X16 * -K03)
+
+ smlal r4, r5, r11, r9 @ r4..r5 += (X10 * K02)
+ smlal r2, r3, r12, r8 @ r2..r3 += (X7 * -K14)
+
+ rsb lr, lr, #0 @ lr = K15
+ rsb r11, r11, #0 @ r11 = -K02
+
+ smlal r4, r5, lr, r6 @ r4..r5 += (X1 * K15) = ct05
+ smlal r2, r3, r11, r6 @ r2..r3 += (X1 * -K02) = ct03
+
+ stmdb sp!, { r2, r3, r4, r5 } @ stack ct05_h, ct05_l, ct03_h, ct03_l
+
+ rsbs r4, r4, #0
+ rsc r5, r5, #0 @ r4..r5 = -ct05
+
+ stmdb sp!, { r4, r5 } @ stack -ct05_h, -ct05_l
+
+ ldr r2, [sp, #48] @ r2 = ct00_l
+ ldr r3, [sp, #52] @ r3 = ct00_h
+
+ rsb r10, r10, #0 @ r10 = K03
+
+ rsbs r4, r2, #0
+ rsc r5, r3, #0 @ r4..r5 = -ct00
+
+ @ r2..r3 = ct00
+ @ r4..r5 = -ct00
+ @ r6 = X1
+ @ r7 = X16
+ @ r8 = X7
+ @ r9 = X10
+ @ r10 = K03
+ @ r11 = -K02
+ @ r12 = -K14
+ @ lr = K15
+
+ smlal r4, r5, r10, r6 @ r4..r5 = -ct00 + (X1 * K03)
+ smlal r2, r3, r10, r9 @ r2..r3 = ct00 + (X10 * K03)
+
+ smlal r4, r5, r12, r9 @ r4..r5 += (X10 * -K14)
+ smlal r2, r3, r12, r6 @ r2..r3 += (X1 * -K14)
+
+ smlal r4, r5, r11, r7 @ r4..r5 += (X16 * -K02)
+ smlal r4, r5, lr, r8 @ r4..r5 += (X7 * K15) = ct07
+
+ rsb lr, lr, #0 @ lr = -K15
+ rsb r11, r11, #0 @ r11 = K02
+
+ smlal r2, r3, r11, r8 @ r2..r3 += (X7 * K02)
+ smlal r2, r3, lr, r7 @ r2..r3 += (X16 * -K15) = ct02
+
+ rsbs r6, r4, #0
+ rsc r7, r5, #0 @ r6..r7 = -ct07
+
+ stmdb sp!, { r2 - r7 } @ stack -ct07_h, -ct07_l, ct07_h, ct07_l, ct02_h, ct02_l
+
+
+ @----
+
+ add r2, pc, #(imdct36_long_karray-.-8) @ r2 = base address of Knn array (PIC safe ?)
+
+
+loop:
+ ldr r12, [r0, #X0]
+
+ ldmia r2!, { r5 - r11 } @ first 7 words from Karray element
+
+ smull r3, r4, r5, r12 @ sum = (Kxx * X0)
+ ldr r12, [r0, #X2]
+ ldr r5, [r0, #X3]
+ smlal r3, r4, r6, r12 @ sum += (Kxx * X2)
+ ldr r12, [r0, #X5]
+ ldr r6, [r0, #X6]
+ smlal r3, r4, r7, r5 @ sum += (Kxx * X3)
+ smlal r3, r4, r8, r12 @ sum += (Kxx * X5)
+ ldr r12, [r0, #X8]
+ ldr r5, [r0, #X9]
+ smlal r3, r4, r9, r6 @ sum += (Kxx * X6)
+ smlal r3, r4, r10, r12 @ sum += (Kxx * X8)
+ smlal r3, r4, r11, r5 @ sum += (Kxx * X9)
+
+ ldmia r2!, { r5 - r10 } @ final 6 words from Karray element
+
+ ldr r11, [r0, #X11]
+ ldr r12, [r0, #X12]
+ smlal r3, r4, r5, r11 @ sum += (Kxx * X11)
+ ldr r11, [r0, #X14]
+ ldr r5, [r0, #X15]
+ smlal r3, r4, r6, r12 @ sum += (Kxx * X12)
+ smlal r3, r4, r7, r11 @ sum += (Kxx * X14)
+ ldr r11, [r0, #X17]
+ smlal r3, r4, r8, r5 @ sum += (Kxx * X15)
+ smlal r3, r4, r9, r11 @ sum += (Kxx * X17)
+
+ add r5, sp, r10, lsr #16 @ create index back into stack for required ctxx
+
+ ldmia r5, { r6, r7 } @ r6..r7 = ctxx
+
+ mov r8, r10, lsl #16 @ push ctxx index off the top end
+
+ adds r3, r3, r6 @ add low words
+ adc r4, r4, r7 @ add high words, with carry
+ movs r3, r3, lsr #28
+ adc r3, r3, r4, lsl #4 @ r3 = bits[59..28] of r3..r4
+
+ str r3, [r1, r8, lsr #24] @ push completion flag off the bottom end
+
+ movs r8, r8, lsl #8 @ push result location index off the top end
+ beq loop @ loop back if completion flag not set
+ b imdct_l_windowing @ branch to windowing stage if looping finished
+
+imdct36_long_karray:
+
+ .word K17, -K13, K10, -K06, -K05, K01, -K00, K04, -K07, K11, K12, -K16, 0x00000000
+ .word K13, K07, K16, K01, K10, -K05, K04, -K11, K00, -K17, K06, -K12, 0x00200800
+ .word K11, K17, K05, K12, -K01, K06, -K07, K00, -K13, K04, -K16, K10, 0x00200c00
+ .word K07, K00, -K12, K05, -K16, -K10, K11, -K17, K04, K13, K01, K06, 0x00001400
+ .word K05, K10, -K00, -K17, K07, -K13, K12, K06, -K16, K01, -K11, -K04, 0x00181800
+ .word K01, K05, -K07, -K11, K13, K17, -K16, -K12, K10, K06, -K04, -K00, 0x00102000
+ .word -K16, K12, -K11, K07, K04, -K00, -K01, K05, -K06, K10, K13, -K17, 0x00284800
+ .word -K12, K06, K17, -K00, -K11, K04, K05, -K10, K01, K16, -K07, -K13, 0x00085000
+ .word -K10, K16, K04, -K13, -K00, K07, K06, -K01, -K12, -K05, K17, K11, 0x00105400
+ .word -K06, -K01, K13, K04, K17, -K11, -K10, -K16, -K05, K12, K00, K07, 0x00185c00
+ .word -K04, -K11, -K01, K16, K06, K12, K13, -K07, -K17, -K00, -K10, -K05, 0x00006000
+ .word -K00, -K04, -K06, -K10, -K12, -K16, -K17, -K13, -K11, -K07, -K05, -K01, 0x00206801
+
+
+ @----
+ @-------------------------------------------------------------------------
+ @----
+
+imdct_l_windowing:
+
+ ldr r11, [sp, #80] @ fetch function parameter 3 from out of the stack
+ ldmia r1!, { r0, r2 - r9 } @ load 9 words from x0, update pointer
+
+ @ r0 = x0
+ @ r1 = &x[9]
+ @ r2 = x1
+ @ r3 = x2
+ @ r4 = x3
+ @ r5 = x4
+ @ r6 = x5
+ @ r7 = x6
+ @ r8 = x7
+ @ r9 = x8
+ @ r10 = .
+ @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
+ @ r12 = .
+ @ lr = .
+
+ cmp r11, #BLOCK_MODE_STOP @ setup flags
+ rsb r10, r0, #0 @ r10 = -x0 (DONT change flags !!)
+ beq stop_block_x0_to_x17
+
+
+ @ start and normal blocks are treated the same for x[0]..x[17]
+
+normal_block_x0_to_x17:
+
+ ldr r12, =WL9 @ r12 = window_l[9]
+
+ rsb r0, r9, #0 @ r0 = -x8
+ rsb r9, r2, #0 @ r9 = -x1
+ rsb r2, r8, #0 @ r2 = -x7
+ rsb r8, r3, #0 @ r8 = -x2
+ rsb r3, r7, #0 @ r3 = -x6
+ rsb r7, r4, #0 @ r7 = -x3
+ rsb r4, r6, #0 @ r4 = -x5
+ rsb r6, r5, #0 @ r6 = -x4
+
+ @ r0 = -x8
+ @ r1 = &x[9]
+ @ r2 = -x7
+ @ r3 = -x6
+ @ r4 = -x5
+ @ r5 = .
+ @ r6 = -x4
+ @ r7 = -x3
+ @ r8 = -x2
+ @ r9 = -x1
+ @ r10 = -x0
+ @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
+ @ r12 = window_l[9]
+ @ lr = .
+
+ smull r5, lr, r12, r0 @ r5..lr = (window_l[9] * (x[9] == -x[8]))
+ ldr r12, =WL10 @ r12 = window_l[10]
+ movs r5, r5, lsr #28
+ adc r0, r5, lr, lsl #4 @ r0 = bits[59..28] of windowed x9
+
+ smull r5, lr, r12, r2 @ r5..lr = (window_l[10] * (x[10] == -x[7]))
+ ldr r12, =WL11 @ r12 = window_l[11]
+ movs r5, r5, lsr #28
+ adc r2, r5, lr, lsl #4 @ r2 = bits[59..28] of windowed x10
+
+ smull r5, lr, r12, r3 @ r5..lr = (window_l[11] * (x[11] == -x[6]))
+ ldr r12, =WL12 @ r12 = window_l[12]
+ movs r5, r5, lsr #28
+ adc r3, r5, lr, lsl #4 @ r3 = bits[59..28] of windowed x11
+
+ smull r5, lr, r12, r4 @ r5..lr = (window_l[12] * (x[12] == -x[5]))
+ ldr r12, =WL13 @ r12 = window_l[13]
+ movs r5, r5, lsr #28
+ adc r4, r5, lr, lsl #4 @ r4 = bits[59..28] of windowed x12
+
+ smull r5, lr, r12, r6 @ r5..lr = (window_l[13] * (x[13] == -x[4]))
+ ldr r12, =WL14 @ r12 = window_l[14]
+ movs r5, r5, lsr #28
+ adc r6, r5, lr, lsl #4 @ r6 = bits[59..28] of windowed x13
+
+ smull r5, lr, r12, r7 @ r5..lr = (window_l[14] * (x[14] == -x[3]))
+ ldr r12, =WL15 @ r12 = window_l[15]
+ movs r5, r5, lsr #28
+ adc r7, r5, lr, lsl #4 @ r7 = bits[59..28] of windowed x14
+
+ smull r5, lr, r12, r8 @ r5..lr = (window_l[15] * (x[15] == -x[2]))
+ ldr r12, =WL16 @ r12 = window_l[16]
+ movs r5, r5, lsr #28
+ adc r8, r5, lr, lsl #4 @ r8 = bits[59..28] of windowed x15
+
+ smull r5, lr, r12, r9 @ r5..lr = (window_l[16] * (x[16] == -x[1]))
+ ldr r12, =WL17 @ r12 = window_l[17]
+ movs r5, r5, lsr #28
+ adc r9, r5, lr, lsl #4 @ r9 = bits[59..28] of windowed x16
+
+ smull r5, lr, r12, r10 @ r5..lr = (window_l[17] * (x[17] == -x[0]))
+ ldr r12, =WL0 @ r12 = window_l[0]
+ movs r5, r5, lsr #28
+ adc r10, r5, lr, lsl #4 @ r10 = bits[59..28] of windowed x17
+
+
+ stmia r1, { r0, r2 - r4, r6 - r10 } @ store windowed x[9] .. x[17]
+ ldmdb r1!, { r0, r2 - r9 } @ load 9 words downto (and including) x0
+
+
+ smull r10, lr, r12, r0 @ r10..lr = (window_l[0] * x[0])
+ ldr r12, =WL1 @ r12 = window_l[1]
+ movs r10, r10, lsr #28
+ adc r0, r10, lr, lsl #4 @ r0 = bits[59..28] of windowed x0
+
+ smull r10, lr, r12, r2 @ r10..lr = (window_l[1] * x[1])
+ ldr r12, =WL2 @ r12 = window_l[2]
+ movs r10, r10, lsr #28
+ adc r2, r10, lr, lsl #4 @ r2 = bits[59..28] of windowed x1
+
+ smull r10, lr, r12, r3 @ r10..lr = (window_l[2] * x[2])
+ ldr r12, =WL3 @ r12 = window_l[3]
+ movs r10, r10, lsr #28
+ adc r3, r10, lr, lsl #4 @ r3 = bits[59..28] of windowed x2
+
+ smull r10, lr, r12, r4 @ r10..lr = (window_l[3] * x[3])
+ ldr r12, =WL4 @ r12 = window_l[4]
+ movs r10, r10, lsr #28
+ adc r4, r10, lr, lsl #4 @ r4 = bits[59..28] of windowed x3
+
+ smull r10, lr, r12, r5 @ r10..lr = (window_l[4] * x[4])
+ ldr r12, =WL5 @ r12 = window_l[5]
+ movs r10, r10, lsr #28
+ adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
+
+ smull r10, lr, r12, r6 @ r10..lr = (window_l[5] * x[5])
+ ldr r12, =WL6 @ r12 = window_l[6]
+ movs r10, r10, lsr #28
+ adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
+
+ smull r10, lr, r12, r7 @ r10..lr = (window_l[6] * x[6])
+ ldr r12, =WL7 @ r12 = window_l[7]
+ movs r10, r10, lsr #28
+ adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
+
+ smull r10, lr, r12, r8 @ r10..lr = (window_l[7] * x[7])
+ ldr r12, =WL8 @ r12 = window_l[8]
+ movs r10, r10, lsr #28
+ adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
+
+ smull r10, lr, r12, r9 @ r10..lr = (window_l[8] * x[8])
+ movs r10, r10, lsr #28
+ adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
+
+ stmia r1, { r0, r2 - r9 } @ store windowed x[0] .. x[8]
+
+ cmp r11, #BLOCK_MODE_START
+ beq start_block_x18_to_x35
+
+
+ @----
+
+
+normal_block_x18_to_x35:
+
+ ldr r11, =WL3 @ r11 = window_l[3]
+ ldr r12, =WL4 @ r12 = window_l[4]
+
+ add r1, r1, #(18*4) @ r1 = &x[18]
+
+ ldmia r1!, { r0, r2 - r4, r6 - r10 } @ load 9 words from x18, update pointer
+
+ @ r0 = x18
+ @ r1 = &x[27]
+ @ r2 = x19
+ @ r3 = x20
+ @ r4 = x21
+ @ r5 = .
+ @ r6 = x22
+ @ r7 = x23
+ @ r8 = x24
+ @ r9 = x25
+ @ r10 = x26
+ @ r11 = window_l[3]
+ @ r12 = window_l[4]
+ @ lr = .
+
+ smull r5, lr, r12, r6 @ r5..lr = (window_l[4] * (x[22] == x[31]))
+ movs r5, r5, lsr #28
+ adc r5, r5, lr, lsl #4 @ r5 = bits[59..28] of windowed x31
+
+ smull r6, lr, r11, r4 @ r5..lr = (window_l[3] * (x[21] == x[32]))
+ ldr r12, =WL5 @ r12 = window_l[5]
+ movs r6, r6, lsr #28
+ adc r6, r6, lr, lsl #4 @ r6 = bits[59..28] of windowed x32
+
+ smull r4, lr, r12, r7 @ r4..lr = (window_l[5] * (x[23] == x[30]))
+ ldr r11, =WL1 @ r11 = window_l[1]
+ ldr r12, =WL2 @ r12 = window_l[2]
+ movs r4, r4, lsr #28
+ adc r4, r4, lr, lsl #4 @ r4 = bits[59..28] of windowed x30
+
+ smull r7, lr, r12, r3 @ r7..lr = (window_l[2] * (x[20] == x[33]))
+ ldr r12, =WL6 @ r12 = window_l[6]
+ movs r7, r7, lsr #28
+ adc r7, r7, lr, lsl #4 @ r7 = bits[59..28] of windowed x33
+
+ smull r3, lr, r12, r8 @ r3..lr = (window_l[6] * (x[24] == x[29]))
+ movs r3, r3, lsr #28
+ adc r3, r3, lr, lsl #4 @ r3 = bits[59..28] of windowed x29
+
+ smull r8, lr, r11, r2 @ r7..lr = (window_l[1] * (x[19] == x[34]))
+ ldr r12, =WL7 @ r12 = window_l[7]
+ ldr r11, =WL8 @ r11 = window_l[8]
+ movs r8, r8, lsr #28
+ adc r8, r8, lr, lsl #4 @ r8 = bits[59..28] of windowed x34
+
+ smull r2, lr, r12, r9 @ r7..lr = (window_l[7] * (x[25] == x[28]))
+ ldr r12, =WL0 @ r12 = window_l[0]
+ movs r2, r2, lsr #28
+ adc r2, r2, lr, lsl #4 @ r2 = bits[59..28] of windowed x28
+
+ smull r9, lr, r12, r0 @ r3..lr = (window_l[0] * (x[18] == x[35]))
+ movs r9, r9, lsr #28
+ adc r9, r9, lr, lsl #4 @ r9 = bits[59..28] of windowed x35
+
+ smull r0, lr, r11, r10 @ r7..lr = (window_l[8] * (x[26] == x[27]))
+ ldr r11, =WL16 @ r11 = window_l[16]
+ ldr r12, =WL17 @ r12 = window_l[17]
+ movs r0, r0, lsr #28
+ adc r0, r0, lr, lsl #4 @ r0 = bits[59..28] of windowed x27
+
+
+ stmia r1, { r0, r2 - r9 } @ store windowed x[27] .. x[35]
+ ldmdb r1!, { r0, r2 - r9 } @ load 9 words downto (and including) x18
+
+
+ smull r10, lr, r12, r0 @ r10..lr = (window_l[17] * x[18])
+ movs r10, r10, lsr #28
+ adc r0, r10, lr, lsl #4 @ r0 = bits[59..28] of windowed x0
+
+ smull r10, lr, r11, r2 @ r10..lr = (window_l[16] * x[19])
+ ldr r11, =WL14 @ r11 = window_l[14]
+ ldr r12, =WL15 @ r12 = window_l[15]
+ movs r10, r10, lsr #28
+ adc r2, r10, lr, lsl #4 @ r2 = bits[59..28] of windowed x1
+
+ smull r10, lr, r12, r3 @ r10..lr = (window_l[15] * x[20])
+ movs r10, r10, lsr #28
+ adc r3, r10, lr, lsl #4 @ r3 = bits[59..28] of windowed x2
+
+ smull r10, lr, r11, r4 @ r10..lr = (window_l[14] * x[21])
+ ldr r11, =WL12 @ r11 = window_l[12]
+ ldr r12, =WL13 @ r12 = window_l[13]
+ movs r10, r10, lsr #28
+ adc r4, r10, lr, lsl #4 @ r4 = bits[59..28] of windowed x3
+
+ smull r10, lr, r12, r5 @ r10..lr = (window_l[13] * x[22])
+ movs r10, r10, lsr #28
+ adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
+
+ smull r10, lr, r11, r6 @ r10..lr = (window_l[12] * x[23])
+ ldr r11, =WL10 @ r12 = window_l[10]
+ ldr r12, =WL11 @ r12 = window_l[11]
+ movs r10, r10, lsr #28
+ adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
+
+ smull r10, lr, r12, r7 @ r10..lr = (window_l[11] * x[24])
+ movs r10, r10, lsr #28
+ adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
+
+ smull r10, lr, r11, r8 @ r10..lr = (window_l[10] * x[25])
+ ldr r12, =WL9 @ r12 = window_l[9]
+ movs r10, r10, lsr #28
+ adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
+
+ smull r10, lr, r12, r9 @ r10..lr = (window_l[9] * x[26])
+
+ movs r10, r10, lsr #28
+ adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
+
+ stmia r1, { r0, r2 - r9 } @ store windowed x[18] .. x[26]
+
+ @----
+ @ NB there are 2 possible exits from this function - this is only one of them
+ @----
+
+ add sp, sp, #(21*4) @ return stack frame
+ ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
+
+ @----
+
+
+stop_block_x0_to_x17:
+
+ @ r0 = x0
+ @ r1 = &x[9]
+ @ r2 = x1
+ @ r3 = x2
+ @ r4 = x3
+ @ r5 = x4
+ @ r6 = x5
+ @ r7 = x6
+ @ r8 = x7
+ @ r9 = x8
+ @ r10 = -x0
+ @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
+ @ r12 = .
+ @ lr = .
+
+ rsb r0, r6, #0 @ r0 = -x5
+ rsb r6, r2, #0 @ r6 = -x1
+ rsb r2, r5, #0 @ r2 = -x4
+ rsb r5, r3, #0 @ r5 = -x2
+ rsb r3, r4, #0 @ r3 = -x3
+
+ add r1, r1, #(3*4) @ r1 = &x[12]
+ stmia r1, { r0, r2, r3, r5, r6, r10 } @ store unchanged x[12] .. x[17]
+
+ ldr r0, =WL1 @ r0 = window_l[1] == window_s[0]
+
+ rsb r10, r9, #0 @ r10 = -x8
+ rsb r12, r8, #0 @ r12 = -x7
+ rsb lr, r7, #0 @ lr = -x6
+
+ @ r0 = WL1
+ @ r1 = &x[12]
+ @ r2 = .
+ @ r3 = .
+ @ r4 = .
+ @ r5 = .
+ @ r6 = .
+ @ r7 = x6
+ @ r8 = x7
+ @ r9 = x8
+ @ r10 = -x8
+ @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
+ @ r12 = -x7
+ @ lr = -x6
+
+ smull r5, r6, r0, r7 @ r5..r6 = (window_l[1] * x[6])
+ ldr r2, =WL4 @ r2 = window_l[4] == window_s[1]
+ movs r5, r5, lsr #28
+ adc r7, r5, r6, lsl #4 @ r7 = bits[59..28] of windowed x6
+
+ smull r5, r6, r2, r8 @ r5..r6 = (window_l[4] * x[7])
+ ldr r3, =WL7 @ r3 = window_l[7] == window_s[2]
+ movs r5, r5, lsr #28
+ adc r8, r5, r6, lsl #4 @ r8 = bits[59..28] of windowed x7
+
+ smull r5, r6, r3, r9 @ r5..r6 = (window_l[7] * x[8])
+ ldr r4, =WL10 @ r4 = window_l[10] == window_s[3]
+ movs r5, r5, lsr #28
+ adc r9, r5, r6, lsl #4 @ r9 = bits[59..28] of windowed x8
+
+ smull r5, r6, r4, r10 @ r5..r6 = (window_l[10] * (x[9] == -x[8]))
+ ldr r0, =WL13 @ r0 = window_l[13] == window_s[4]
+ movs r5, r5, lsr #28
+ adc r10, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
+
+ smull r5, r6, r0, r12 @ r5..r6 = (window_l[13] * (x[10] == -x[7]))
+ ldr r2, =WL16 @ r2 = window_l[16] == window_s[5]
+ movs r5, r5, lsr #28
+ adc r12, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
+
+ smull r5, r6, r2, lr @ r5..r6 = (window_l[16] * (x[11] == -x[6]))
+
+ ldr r0, =0x00
+
+ movs r5, r5, lsr #28
+ adc lr, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
+
+ stmdb r1!, { r7 - r10, r12, lr } @ store windowed x[6] .. x[11]
+
+ ldr r5, =0x00
+ ldr r6, =0x00
+ ldr r2, =0x00
+ ldr r3, =0x00
+ ldr r4, =0x00
+
+ stmdb r1!, { r0, r2 - r6 } @ store windowed x[0] .. x[5]
+
+ b normal_block_x18_to_x35
+
+
+ @----
+
+
+start_block_x18_to_x35:
+
+ ldr r4, =WL1 @ r0 = window_l[1] == window_s[0]
+
+ add r1, r1, #(24*4) @ r1 = &x[24]
+
+ ldmia r1, { r0, r2, r3 } @ load 3 words from x24, dont update pointer
+
+ @ r0 = x24
+ @ r1 = &x[24]
+ @ r2 = x25
+ @ r3 = x26
+ @ r4 = WL1
+ @ r5 = WL4
+ @ r6 = WL7
+ @ r7 = WL10
+ @ r8 = WL13
+ @ r9 = WL16
+ @ r10 = .
+ @ r11 = .
+ @ r12 = .
+ @ lr = .
+
+ ldr r5, =WL4 @ r5 = window_l[4] == window_s[1]
+
+ smull r10, r11, r4, r0 @ r10..r11 = (window_l[1] * (x[24] == x[29]))
+ ldr r6, =WL7 @ r6 = window_l[7] == window_s[2]
+ movs r10, r10, lsr #28
+ adc lr, r10, r11, lsl #4 @ lr = bits[59..28] of windowed x29
+
+ smull r10, r11, r5, r2 @ r10..r11 = (window_l[4] * (x[25] == x[28]))
+ ldr r7, =WL10 @ r7 = window_l[10] == window_s[3]
+ movs r10, r10, lsr #28
+ adc r12, r10, r11, lsl #4 @ r12 = bits[59..28] of windowed x28
+
+ smull r10, r11, r6, r3 @ r10..r11 = (window_l[7] * (x[26] == x[27]))
+ ldr r8, =WL13 @ r8 = window_l[13] == window_s[4]
+ movs r10, r10, lsr #28
+ adc r4, r10, r11, lsl #4 @ r4 = bits[59..28] of windowed x27
+
+ smull r10, r11, r7, r3 @ r10..r11 = (window_l[10] * x[26])
+ ldr r9, =WL16 @ r9 = window_l[16] == window_s[5]
+ movs r10, r10, lsr #28
+ adc r3, r10, r11, lsl #4 @ r3 = bits[59..28] of windowed x26
+
+ smull r10, r11, r8, r2 @ r10..r11 = (window_l[13] * x[25])
+ ldr r5, =0x00
+ movs r10, r10, lsr #28
+ adc r2, r10, r11, lsl #4 @ r2 = bits[59..28] of windowed x25
+
+ smull r10, r11, r9, r0 @ r10..r11 = (window_l[16] * x[24])
+ ldr r6, =0x00
+ movs r10, r10, lsr #28
+ adc r0, r10, r11, lsl #4 @ r0 = bits[59..28] of windowed x24
+
+ stmia r1!, { r0, r2, r3, r4, r12, lr } @ store windowed x[24] .. x[29]
+
+ ldr r7, =0x00
+ ldr r8, =0x00
+ ldr r9, =0x00
+ ldr r10, =0x00
+
+ stmia r1!, { r5 - r10 } @ store windowed x[30] .. x[35]
+
+ @----
+ @ NB there are 2 possible exits from this function - this is only one of them
+ @----
+
+ add sp, sp, #(21*4) @ return stack frame
+ ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
+
+ @----
+ @END
+ @----
+
diff --git a/core/multimedia/opieplayer/libmad/imdct_s.dat b/core/multimedia/opieplayer/libmad/imdct_s.dat
new file mode 100644
index 0000000..00d62eb
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/imdct_s.dat
@@ -0,0 +1,62 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+ /* 0 */ { MAD_F(0x09bd7ca0) /* 0.608761429 */,
+ -MAD_F(0x0ec835e8) /* -0.923879533 */,
+ -MAD_F(0x0216a2a2) /* -0.130526192 */,
+ MAD_F(0x0fdcf549) /* 0.991444861 */,
+ -MAD_F(0x061f78aa) /* -0.382683432 */,
+ -MAD_F(0x0cb19346) /* -0.793353340 */ },
+
+ /* 6 */ { -MAD_F(0x0cb19346) /* -0.793353340 */,
+ MAD_F(0x061f78aa) /* 0.382683432 */,
+ MAD_F(0x0fdcf549) /* 0.991444861 */,
+ MAD_F(0x0216a2a2) /* 0.130526192 */,
+ -MAD_F(0x0ec835e8) /* -0.923879533 */,
+ -MAD_F(0x09bd7ca0) /* -0.608761429 */ },
+
+ /* 1 */ { MAD_F(0x061f78aa) /* 0.382683432 */,
+ -MAD_F(0x0ec835e8) /* -0.923879533 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */,
+ -MAD_F(0x061f78aa) /* -0.382683432 */,
+ -MAD_F(0x061f78aa) /* -0.382683432 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */ },
+
+ /* 7 */ { -MAD_F(0x0ec835e8) /* -0.923879533 */,
+ -MAD_F(0x061f78aa) /* -0.382683432 */,
+ MAD_F(0x061f78aa) /* 0.382683432 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */,
+ MAD_F(0x061f78aa) /* 0.382683432 */ },
+
+ /* 2 */ { MAD_F(0x0216a2a2) /* 0.130526192 */,
+ -MAD_F(0x061f78aa) /* -0.382683432 */,
+ MAD_F(0x09bd7ca0) /* 0.608761429 */,
+ -MAD_F(0x0cb19346) /* -0.793353340 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */,
+ -MAD_F(0x0fdcf549) /* -0.991444861 */ },
+
+ /* 8 */ { -MAD_F(0x0fdcf549) /* -0.991444861 */,
+ -MAD_F(0x0ec835e8) /* -0.923879533 */,
+ -MAD_F(0x0cb19346) /* -0.793353340 */,
+ -MAD_F(0x09bd7ca0) /* -0.608761429 */,
+ -MAD_F(0x061f78aa) /* -0.382683432 */,
+ -MAD_F(0x0216a2a2) /* -0.130526192 */ }
diff --git a/core/multimedia/opieplayer/libmad/layer12.c b/core/multimedia/opieplayer/libmad/layer12.c
new file mode 100644
index 0000000..41b17ca
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer12.c
@@ -0,0 +1,496 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# ifdef HAVE_LIMITS_H
+# include <limits.h>
+# else
+# define CHAR_BIT 8
+# endif
+
+# include "fixed.h"
+# include "bit.h"
+# include "stream.h"
+# include "frame.h"
+# include "layer12.h"
+
+/*
+ * scalefactor table
+ * used in both Layer I and Layer II decoding
+ */
+static
+mad_fixed_t const sf_table[63] = {
+# include "sf_table.dat"
+};
+
+/* --- Layer I ------------------------------------------------------------- */
+
+/* linear scaling table */
+static
+mad_fixed_t const linear_table[14] = {
+ MAD_F(0x15555555), /* 2^2 / (2^2 - 1) == 1.33333333333333 */
+ MAD_F(0x12492492), /* 2^3 / (2^3 - 1) == 1.14285714285714 */
+ MAD_F(0x11111111), /* 2^4 / (2^4 - 1) == 1.06666666666667 */
+ MAD_F(0x10842108), /* 2^5 / (2^5 - 1) == 1.03225806451613 */
+ MAD_F(0x10410410), /* 2^6 / (2^6 - 1) == 1.01587301587302 */
+ MAD_F(0x10204081), /* 2^7 / (2^7 - 1) == 1.00787401574803 */
+ MAD_F(0x10101010), /* 2^8 / (2^8 - 1) == 1.00392156862745 */
+ MAD_F(0x10080402), /* 2^9 / (2^9 - 1) == 1.00195694716243 */
+ MAD_F(0x10040100), /* 2^10 / (2^10 - 1) == 1.00097751710655 */
+ MAD_F(0x10020040), /* 2^11 / (2^11 - 1) == 1.00048851978505 */
+ MAD_F(0x10010010), /* 2^12 / (2^12 - 1) == 1.00024420024420 */
+ MAD_F(0x10008004), /* 2^13 / (2^13 - 1) == 1.00012208521548 */
+ MAD_F(0x10004001), /* 2^14 / (2^14 - 1) == 1.00006103888177 */
+ MAD_F(0x10002000) /* 2^15 / (2^15 - 1) == 1.00003051850948 */
+};
+
+/*
+ * NAME: I_sample()
+ * DESCRIPTION: decode one requantized Layer I sample from a bitstream
+ */
+static
+mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
+{
+ mad_fixed_t sample;
+
+ sample = mad_bit_read(ptr, nb);
+
+ /* invert most significant bit, extend sign, then scale to fixed format */
+
+ sample ^= 1 << (nb - 1);
+ sample |= -(sample & (1 << (nb - 1)));
+
+ sample <<= MAD_F_FRACBITS - (nb - 1);
+
+ /* requantize the sample */
+
+ /* s'' = (2^nb / (2^nb - 1)) * (s''' + 2^(-nb + 1)) */
+
+ sample += MAD_F_ONE >> (nb - 1);
+
+ return mad_f_mul(sample, linear_table[nb - 2]);
+
+ /* s' = factor * s'' */
+ /* (to be performed by caller) */
+}
+
+/*
+ * NAME: layer->I()
+ * DESCRIPTION: decode a single Layer I frame
+ */
+int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
+{
+ struct mad_header *header = &frame->header;
+ unsigned int nch, bound, ch, s, sb, nb;
+ unsigned char allocation[2][32], scalefactor[2][32];
+
+ nch = MAD_NCHANNELS(header);
+
+ bound = 32;
+ if (header->mode == MAD_MODE_JOINT_STEREO) {
+ header->flags |= MAD_FLAG_I_STEREO;
+ bound = 4 + header->mode_extension * 4;
+ }
+
+ /* check CRC word */
+
+ if (header->flags & MAD_FLAG_PROTECTION) {
+ header->crc_check =
+ mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
+ header->crc_check);
+
+ if (header->crc_check != header->crc_target &&
+ !(frame->options & MAD_OPTION_IGNORECRC)) {
+ stream->error = MAD_ERROR_BADCRC;
+ return -1;
+ }
+ }
+
+ /* decode bit allocations */
+
+ for (sb = 0; sb < bound; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ nb = mad_bit_read(&stream->ptr, 4);
+
+ if (nb == 15) {
+ stream->error = MAD_ERROR_BADBITALLOC;
+ return -1;
+ }
+
+ allocation[ch][sb] = nb ? nb + 1 : 0;
+ }
+ }
+
+ for (sb = bound; sb < 32; ++sb) {
+ nb = mad_bit_read(&stream->ptr, 4);
+
+ if (nb == 15) {
+ stream->error = MAD_ERROR_BADBITALLOC;
+ return -1;
+ }
+
+ allocation[0][sb] =
+ allocation[1][sb] = nb ? nb + 1 : 0;
+ }
+
+ /* decode scalefactors */
+
+ for (sb = 0; sb < 32; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ if (allocation[ch][sb]) {
+ scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
+
+ if (scalefactor[ch][sb] == 63) {
+ stream->error = MAD_ERROR_BADSCALEFACTOR;
+ return -1;
+ }
+ }
+ }
+ }
+
+ /* decode samples */
+
+ for (s = 0; s < 12; ++s) {
+ for (sb = 0; sb < bound; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ nb = allocation[ch][sb];
+ frame->sbsample[ch][s][sb] = nb ?
+ mad_f_mul(I_sample(&stream->ptr, nb),
+ sf_table[scalefactor[ch][sb]]) : 0;
+ }
+ }
+
+ for (sb = bound; sb < 32; ++sb) {
+ if ((nb = allocation[0][sb])) {
+ mad_fixed_t sample;
+
+ sample = I_sample(&stream->ptr, nb);
+
+ for (ch = 0; ch < nch; ++ch) {
+ frame->sbsample[ch][s][sb] =
+ mad_f_mul(sample, sf_table[scalefactor[ch][sb]]);
+ }
+ }
+ else {
+ for (ch = 0; ch < nch; ++ch)
+ frame->sbsample[ch][s][sb] = 0;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/* --- Layer II ------------------------------------------------------------ */
+
+/* possible quantization per subband table */
+static
+struct {
+ unsigned int sblimit;
+ unsigned char const offsets[30];
+} const sbquant_table[5] = {
+ /* ISO/IEC 11172-3 Table B.2a */
+ { 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 0 */
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
+ /* ISO/IEC 11172-3 Table B.2b */
+ { 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, /* 1 */
+ 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
+ /* ISO/IEC 11172-3 Table B.2c */
+ { 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
+ /* ISO/IEC 11172-3 Table B.2d */
+ { 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
+ /* ISO/IEC 13818-3 Table B.1 */
+ { 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, /* 4 */
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
+};
+
+/* bit allocation table */
+static
+struct {
+ unsigned short nbal;
+ unsigned short offset;
+} const bitalloc_table[8] = {
+ { 2, 0 }, /* 0 */
+ { 2, 3 }, /* 1 */
+ { 3, 3 }, /* 2 */
+ { 3, 1 }, /* 3 */
+ { 4, 2 }, /* 4 */
+ { 4, 3 }, /* 5 */
+ { 4, 4 }, /* 6 */
+ { 4, 5 } /* 7 */
+};
+
+/* offsets into quantization class table */
+static
+unsigned char const offset_table[6][15] = {
+ { 0, 1, 16 }, /* 0 */
+ { 0, 1, 2, 3, 4, 5, 16 }, /* 1 */
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* 2 */
+ { 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* 3 */
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }, /* 4 */
+ { 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 } /* 5 */
+};
+
+/* quantization class table */
+static
+struct quantclass {
+ unsigned short nlevels;
+ unsigned char group;
+ unsigned char bits;
+ mad_fixed_t C;
+ mad_fixed_t D;
+} const qc_table[17] = {
+# include "qc_table.dat"
+};
+
+/*
+ * NAME: II_samples()
+ * DESCRIPTION: decode three requantized Layer II samples from a bitstream
+ */
+static
+void II_samples(struct mad_bitptr *ptr,
+ struct quantclass const *quantclass,
+ mad_fixed_t output[3])
+{
+ unsigned int nb, s, sample[3];
+
+ if ((nb = quantclass->group)) {
+ unsigned int c, nlevels;
+
+ /* degrouping */
+ c = mad_bit_read(ptr, quantclass->bits);
+ nlevels = quantclass->nlevels;
+
+ for (s = 0; s < 3; ++s) {
+ sample[s] = c % nlevels;
+ c /= nlevels;
+ }
+ }
+ else {
+ nb = quantclass->bits;
+
+ for (s = 0; s < 3; ++s)
+ sample[s] = mad_bit_read(ptr, nb);
+ }
+
+ for (s = 0; s < 3; ++s) {
+ mad_fixed_t requantized;
+
+ /* invert most significant bit, extend sign, then scale to fixed format */
+
+ requantized = sample[s] ^ (1 << (nb - 1));
+ requantized |= -(requantized & (1 << (nb - 1)));
+
+ requantized <<= MAD_F_FRACBITS - (nb - 1);
+
+ /* requantize the sample */
+
+ /* s'' = C * (s''' + D) */
+
+ output[s] = mad_f_mul(requantized + quantclass->D, quantclass->C);
+
+ /* s' = factor * s'' */
+ /* (to be performed by caller) */
+ }
+}
+
+/*
+ * NAME: layer->II()
+ * DESCRIPTION: decode a single Layer II frame
+ */
+int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
+{
+ struct mad_header *header = &frame->header;
+ struct mad_bitptr start;
+ unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
+ unsigned char const *offsets;
+ unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
+ mad_fixed_t samples[3];
+
+ nch = MAD_NCHANNELS(header);
+
+ if (header->flags & MAD_FLAG_LSF_EXT)
+ index = 4;
+ else {
+ switch (nch == 2 ? header->bitrate / 2 : header->bitrate) {
+ case 32000:
+ case 48000:
+ index = (header->samplerate == 32000) ? 3 : 2;
+ break;
+
+ case 56000:
+ case 64000:
+ case 80000:
+ index = 0;
+ break;
+
+ default:
+ index = (header->samplerate == 48000) ? 0 : 1;
+ }
+ }
+
+ sblimit = sbquant_table[index].sblimit;
+ offsets = sbquant_table[index].offsets;
+
+ bound = 32;
+ if (header->mode == MAD_MODE_JOINT_STEREO) {
+ header->flags |= MAD_FLAG_I_STEREO;
+ bound = 4 + header->mode_extension * 4;
+ }
+
+ if (bound > sblimit)
+ bound = sblimit;
+
+ start = stream->ptr;
+
+ /* decode bit allocations */
+
+ for (sb = 0; sb < bound; ++sb) {
+ nbal = bitalloc_table[offsets[sb]].nbal;
+
+ for (ch = 0; ch < nch; ++ch)
+ allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
+ }
+
+ for (sb = bound; sb < sblimit; ++sb) {
+ nbal = bitalloc_table[offsets[sb]].nbal;
+
+ allocation[0][sb] =
+ allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
+ }
+
+ /* decode scalefactor selection info */
+
+ for (sb = 0; sb < sblimit; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ if (allocation[ch][sb])
+ scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
+ }
+ }
+
+ /* check CRC word */
+
+ if (header->flags & MAD_FLAG_PROTECTION) {
+ header->crc_check =
+ mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
+ header->crc_check);
+
+ if (header->crc_check != header->crc_target &&
+ !(frame->options & MAD_OPTION_IGNORECRC)) {
+ stream->error = MAD_ERROR_BADCRC;
+ return -1;
+ }
+ }
+
+ /* decode scalefactors */
+
+ for (sb = 0; sb < sblimit; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ if (allocation[ch][sb]) {
+ scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
+
+ switch (scfsi[ch][sb]) {
+ case 2:
+ scalefactor[ch][sb][2] =
+ scalefactor[ch][sb][1] =
+ scalefactor[ch][sb][0];
+ break;
+
+ case 0:
+ scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
+ /* fall through */
+
+ case 1:
+ case 3:
+ scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
+ }
+
+ if (scfsi[ch][sb] & 1)
+ scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];
+
+ if (scalefactor[ch][sb][0] == 63 ||
+ scalefactor[ch][sb][1] == 63 ||
+ scalefactor[ch][sb][2] == 63) {
+ stream->error = MAD_ERROR_BADSCALEFACTOR;
+ return -1;
+ }
+ }
+ }
+ }
+
+ /* decode samples */
+
+ for (gr = 0; gr < 12; ++gr) {
+ for (sb = 0; sb < bound; ++sb) {
+ for (ch = 0; ch < nch; ++ch) {
+ if ((index = allocation[ch][sb])) {
+ index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
+
+ II_samples(&stream->ptr, &qc_table[index], samples);
+
+ for (s = 0; s < 3; ++s) {
+ frame->sbsample[ch][3 * gr + s][sb] =
+ mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
+ }
+ }
+ else {
+ for (s = 0; s < 3; ++s)
+ frame->sbsample[ch][3 * gr + s][sb] = 0;
+ }
+ }
+ }
+
+ for (sb = bound; sb < sblimit; ++sb) {
+ if ((index = allocation[0][sb])) {
+ index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
+
+ II_samples(&stream->ptr, &qc_table[index], samples);
+
+ for (ch = 0; ch < nch; ++ch) {
+ for (s = 0; s < 3; ++s) {
+ frame->sbsample[ch][3 * gr + s][sb] =
+ mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
+ }
+ }
+ }
+ else {
+ for (ch = 0; ch < nch; ++ch) {
+ for (s = 0; s < 3; ++s)
+ frame->sbsample[ch][3 * gr + s][sb] = 0;
+ }
+ }
+ }
+
+ for (ch = 0; ch < nch; ++ch) {
+ for (s = 0; s < 3; ++s) {
+ for (sb = sblimit; sb < 32; ++sb)
+ frame->sbsample[ch][3 * gr + s][sb] = 0;
+ }
+ }
+ }
+
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmad/layer12.h b/core/multimedia/opieplayer/libmad/layer12.h
new file mode 100644
index 0000000..d2c81ac
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer12.h
@@ -0,0 +1,31 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_LAYER12_H
+# define LIBMAD_LAYER12_H
+
+# include "stream.h"
+# include "frame.h"
+
+int mad_layer_I(struct mad_stream *, struct mad_frame *);
+int mad_layer_II(struct mad_stream *, struct mad_frame *);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/layer3.c b/core/multimedia/opieplayer/libmad/layer3.c
new file mode 100644
index 0000000..194fc7e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer3.c
@@ -0,0 +1,2492 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include <stdlib.h>
+# include <string.h>
+# include <assert.h>
+
+# ifdef HAVE_LIMITS_H
+# include <limits.h>
+# else
+# define CHAR_BIT 8
+# endif
+
+# include "fixed.h"
+# include "bit.h"
+# include "stream.h"
+# include "frame.h"
+# include "huffman.h"
+# include "layer3.h"
+
+/* --- Layer III ----------------------------------------------------------- */
+
+enum {
+ count1table_select = 0x01,
+ scalefac_scale = 0x02,
+ preflag = 0x04,
+ mixed_block_flag = 0x08
+};
+
+struct sideinfo {
+ unsigned int main_data_begin;
+ unsigned int private_bits;
+
+ unsigned char scfsi[2];
+
+ struct granule {
+ struct channel {
+ /* from side info */
+ unsigned short part2_3_length;
+ unsigned short big_values;
+ unsigned short global_gain;
+ unsigned short scalefac_compress;
+
+ unsigned char flags;
+ unsigned char block_type;
+ unsigned char table_select[3];
+ unsigned char subblock_gain[3];
+ unsigned char region0_count;
+ unsigned char region1_count;
+
+ /* from main_data */
+ unsigned char scalefac[39]; /* scalefac_l and/or scalefac_s */
+ } ch[2];
+ } gr[2];
+};
+
+/*
+ * scalefactor bit lengths
+ * derived from section 2.4.2.7 of ISO/IEC 11172-3
+ */
+static
+struct {
+ unsigned char slen1;
+ unsigned char slen2;
+} const sflen_table[16] = {
+ { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 },
+ { 3, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 },
+ { 2, 1 }, { 2, 2 }, { 2, 3 }, { 3, 1 },
+ { 3, 2 }, { 3, 3 }, { 4, 2 }, { 4, 3 }
+};
+
+/*
+ * number of LSF scalefactor band values
+ * derived from section 2.4.3.2 of ISO/IEC 13818-3
+ */
+static
+unsigned char const nsfb_table[6][3][4] = {
+ { { 6, 5, 5, 5 },
+ { 9, 9, 9, 9 },
+ { 6, 9, 9, 9 } },
+
+ { { 6, 5, 7, 3 },
+ { 9, 9, 12, 6 },
+ { 6, 9, 12, 6 } },
+
+ { { 11, 10, 0, 0 },
+ { 18, 18, 0, 0 },
+ { 15, 18, 0, 0 } },
+
+ { { 7, 7, 7, 0 },
+ { 12, 12, 12, 0 },
+ { 6, 15, 12, 0 } },
+
+ { { 6, 6, 6, 3 },
+ { 12, 9, 9, 6 },
+ { 6, 12, 9, 6 } },
+
+ { { 8, 8, 5, 0 },
+ { 15, 12, 9, 0 },
+ { 6, 18, 9, 0 } }
+};
+
+/*
+ * MPEG-1 scalefactor band widths
+ * derived from Table B.8 of ISO/IEC 11172-3
+ */
+static
+unsigned char const sfb_48000_long[] = {
+ 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
+ 12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192
+};
+
+static
+unsigned char const sfb_44100_long[] = {
+ 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
+ 12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158
+};
+
+static
+unsigned char const sfb_32000_long[] = {
+ 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
+ 16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26
+};
+
+static
+unsigned char const sfb_48000_short[] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 6, 6, 6, 6, 6, 10, 10, 10, 12, 12, 12, 14, 14,
+ 14, 16, 16, 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
+};
+
+static
+unsigned char const sfb_44100_short[] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 6, 6, 8, 8, 8, 10, 10, 10, 12, 12, 12, 14, 14,
+ 14, 18, 18, 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
+};
+
+static
+unsigned char const sfb_32000_short[] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
+ 6, 6, 8, 8, 8, 12, 12, 12, 16, 16, 16, 20, 20,
+ 20, 26, 26, 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
+};
+
+static
+unsigned char const sfb_48000_mixed[] = {
+ /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
+ /* short */ 4, 4, 4, 6, 6, 6, 6, 6, 6, 10,
+ 10, 10, 12, 12, 12, 14, 14, 14, 16, 16,
+ 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
+};
+
+static
+unsigned char const sfb_44100_mixed[] = {
+ /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
+ /* short */ 4, 4, 4, 6, 6, 6, 8, 8, 8, 10,
+ 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
+ 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
+};
+
+static
+unsigned char const sfb_32000_mixed[] = {
+ /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
+ /* short */ 4, 4, 4, 6, 6, 6, 8, 8, 8, 12,
+ 12, 12, 16, 16, 16, 20, 20, 20, 26, 26,
+ 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
+};
+
+/*
+ * MPEG-2 scalefactor band widths
+ * derived from Table B.2 of ISO/IEC 13818-3
+ */
+static
+unsigned char const sfb_24000_long[] = {
+ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
+ 18, 22, 26, 32, 38, 46, 54, 62, 70, 76, 36
+};
+
+static
+unsigned char const sfb_22050_long[] = {
+ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
+ 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54
+};
+
+# define sfb_16000_long sfb_22050_long
+
+static
+unsigned char const sfb_24000_short[] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8,
+ 8, 8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
+ 18, 24, 24, 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
+};
+
+static
+unsigned char const sfb_22050_short[] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6,
+ 6, 6, 8, 8, 8, 10, 10, 10, 14, 14, 14, 18, 18,
+ 18, 26, 26, 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
+};
+
+static
+unsigned char const sfb_16000_short[] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8,
+ 8, 8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
+ 18, 24, 24, 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
+};
+
+static
+unsigned char const sfb_24000_mixed[] = {
+ /* long */ 6, 6, 6, 6, 6, 6,
+ /* short */ 6, 6, 6, 8, 8, 8, 10, 10, 10, 12,
+ 12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
+ 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
+};
+
+static
+unsigned char const sfb_22050_mixed[] = {
+ /* long */ 6, 6, 6, 6, 6, 6,
+ /* short */ 6, 6, 6, 6, 6, 6, 8, 8, 8, 10,
+ 10, 10, 14, 14, 14, 18, 18, 18, 26, 26,
+ 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
+};
+
+static
+unsigned char const sfb_16000_mixed[] = {
+ /* long */ 6, 6, 6, 6, 6, 6,
+ /* short */ 6, 6, 6, 8, 8, 8, 10, 10, 10, 12,
+ 12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
+ 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
+};
+
+/*
+ * MPEG 2.5 scalefactor band widths
+ * derived from public sources
+ */
+# define sfb_12000_long sfb_16000_long
+# define sfb_11025_long sfb_12000_long
+
+static
+unsigned char const sfb_8000_long[] = {
+ 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
+ 40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2
+};
+
+# define sfb_12000_short sfb_16000_short
+# define sfb_11025_short sfb_12000_short
+
+static
+unsigned char const sfb_8000_short[] = {
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 12, 12, 12, 16,
+ 16, 16, 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36,
+ 36, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26
+};
+
+# define sfb_12000_mixed sfb_16000_mixed
+# define sfb_11025_mixed sfb_12000_mixed
+
+/* the 8000 Hz short block scalefactor bands do not break after the first 36
+ frequency lines, so this is probably wrong */
+static
+unsigned char const sfb_8000_mixed[] = {
+ /* long */ 12, 12, 12,
+ /* short */ 4, 4, 4, 8, 8, 8, 12, 12, 12, 16, 16, 16,
+ 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36, 36,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26
+};
+
+static
+struct {
+ unsigned char const *l;
+ unsigned char const *s;
+ unsigned char const *m;
+} const sfbwidth_table[9] = {
+ { sfb_48000_long, sfb_48000_short, sfb_48000_mixed },
+ { sfb_44100_long, sfb_44100_short, sfb_44100_mixed },
+ { sfb_32000_long, sfb_32000_short, sfb_32000_mixed },
+ { sfb_24000_long, sfb_24000_short, sfb_24000_mixed },
+ { sfb_22050_long, sfb_22050_short, sfb_22050_mixed },
+ { sfb_16000_long, sfb_16000_short, sfb_16000_mixed },
+ { sfb_12000_long, sfb_12000_short, sfb_12000_mixed },
+ { sfb_11025_long, sfb_11025_short, sfb_11025_mixed },
+ { sfb_8000_long, sfb_8000_short, sfb_8000_mixed }
+};
+
+/*
+ * scalefactor band preemphasis (used only when preflag is set)
+ * derived from Table B.6 of ISO/IEC 11172-3
+ */
+static
+unsigned char const pretab[22] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0
+};
+
+/*
+ * table for requantization
+ *
+ * rq_table[x].mantissa * 2^(rq_table[x].exponent) = x^(4/3)
+ */
+static
+struct fixedfloat {
+ unsigned long mantissa : 27;
+ unsigned short exponent : 5;
+} const rq_table[8207] = {
+# include "rq_table.dat"
+};
+
+/*
+ * fractional powers of two
+ * used for requantization and joint stereo decoding
+ *
+ * root_table[3 + x] = 2^(x/4)
+ */
+static
+mad_fixed_t const root_table[7] = {
+ MAD_F(0x09837f05) /* 2^(-3/4) == 0.59460355750136 */,
+ MAD_F(0x0b504f33) /* 2^(-2/4) == 0.70710678118655 */,
+ MAD_F(0x0d744fcd) /* 2^(-1/4) == 0.84089641525371 */,
+ MAD_F(0x10000000) /* 2^( 0/4) == 1.00000000000000 */,
+ MAD_F(0x1306fe0a) /* 2^(+1/4) == 1.18920711500272 */,
+ MAD_F(0x16a09e66) /* 2^(+2/4) == 1.41421356237310 */,
+ MAD_F(0x1ae89f99) /* 2^(+3/4) == 1.68179283050743 */
+};
+
+/*
+ * coefficients for aliasing reduction
+ * derived from Table B.9 of ISO/IEC 11172-3
+ *
+ * c[] = { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037 }
+ * cs[i] = 1 / sqrt(1 + c[i]^2)
+ * ca[i] = c[i] / sqrt(1 + c[i]^2)
+ */
+static
+mad_fixed_t const cs[8] = {
+ +MAD_F(0x0db84a81) /* +0.857492926 */, +MAD_F(0x0e1b9d7f) /* +0.881741997 */,
+ +MAD_F(0x0f31adcf) /* +0.949628649 */, +MAD_F(0x0fbba815) /* +0.983314592 */,
+ +MAD_F(0x0feda417) /* +0.995517816 */, +MAD_F(0x0ffc8fc8) /* +0.999160558 */,
+ +MAD_F(0x0fff964c) /* +0.999899195 */, +MAD_F(0x0ffff8d3) /* +0.999993155 */
+};
+
+static
+mad_fixed_t const ca[8] = {
+ -MAD_F(0x083b5fe7) /* -0.514495755 */, -MAD_F(0x078c36d2) /* -0.471731969 */,
+ -MAD_F(0x05039814) /* -0.313377454 */, -MAD_F(0x02e91dd1) /* -0.181913200 */,
+ -MAD_F(0x0183603a) /* -0.094574193 */, -MAD_F(0x00a7cb87) /* -0.040965583 */,
+ -MAD_F(0x003a2847) /* -0.014198569 */, -MAD_F(0x000f27b4) /* -0.003699975 */
+};
+
+/*
+ * IMDCT coefficients for short blocks
+ * derived from section 2.4.3.4.10.2 of ISO/IEC 11172-3
+ *
+ * imdct_s[i/even][k] = cos((PI / 24) * (2 * (i / 2) + 7) * (2 * k + 1))
+ * imdct_s[i /odd][k] = cos((PI / 24) * (2 * (6 + (i-1)/2) + 7) * (2 * k + 1))
+ */
+static
+mad_fixed_t const imdct_s[6][6] = {
+# include "imdct_s.dat"
+};
+
+# if !defined(ASO_IMDCT)
+/*
+ * windowing coefficients for long blocks
+ * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
+ *
+ * window_l[i] = sin((PI / 36) * (i + 1/2))
+ */
+static
+mad_fixed_t const window_l[36] = {
+ MAD_F(0x00b2aa3e) /* 0.043619387 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
+ MAD_F(0x03768962) /* 0.216439614 */, MAD_F(0x04cfb0e2) /* 0.300705800 */,
+ MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x07635284) /* 0.461748613 */,
+ MAD_F(0x0898c779) /* 0.537299608 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
+ MAD_F(0x0acf37ad) /* 0.675590208 */, MAD_F(0x0bcbe352) /* 0.737277337 */,
+ MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x0d7e8807) /* 0.843391446 */,
+
+ MAD_F(0x0e313245) /* 0.887010833 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
+ MAD_F(0x0f426cb5) /* 0.953716951 */, MAD_F(0x0f9ee890) /* 0.976296007 */,
+ MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ffc19fd) /* 0.999048222 */,
+ MAD_F(0x0ffc19fd) /* 0.999048222 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
+ MAD_F(0x0f9ee890) /* 0.976296007 */, MAD_F(0x0f426cb5) /* 0.953716951 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0e313245) /* 0.887010833 */,
+
+ MAD_F(0x0d7e8807) /* 0.843391446 */, MAD_F(0x0cb19346) /* 0.793353340 */,
+ MAD_F(0x0bcbe352) /* 0.737277337 */, MAD_F(0x0acf37ad) /* 0.675590208 */,
+ MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0898c779) /* 0.537299608 */,
+ MAD_F(0x07635284) /* 0.461748613 */, MAD_F(0x061f78aa) /* 0.382683432 */,
+ MAD_F(0x04cfb0e2) /* 0.300705800 */, MAD_F(0x03768962) /* 0.216439614 */,
+ MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x00b2aa3e) /* 0.043619387 */,
+};
+# endif /* ASO_IMDCT */
+
+/*
+ * windowing coefficients for short blocks
+ * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
+ *
+ * window_s[i] = sin((PI / 12) * (i + 1/2))
+ */
+static
+mad_fixed_t const window_s[12] = {
+ MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x061f78aa) /* 0.382683432 */,
+ MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0cb19346) /* 0.793353340 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
+ MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
+ MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
+ MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
+};
+
+/*
+ * coefficients for intensity stereo processing
+ * derived from section 2.4.3.4.9.3 of ISO/IEC 11172-3
+ *
+ * is_ratio[i] = tan(i * (PI / 12))
+ * is_table[i] = is_ratio[i] / (1 + is_ratio[i])
+ */
+static
+mad_fixed_t const is_table[7] = {
+ MAD_F(0x00000000) /* 0.000000000 */,
+ MAD_F(0x0361962f) /* 0.211324865 */,
+ MAD_F(0x05db3d74) /* 0.366025404 */,
+ MAD_F(0x08000000) /* 0.500000000 */,
+ MAD_F(0x0a24c28c) /* 0.633974596 */,
+ MAD_F(0x0c9e69d1) /* 0.788675135 */,
+ MAD_F(0x10000000) /* 1.000000000 */
+};
+
+/*
+ * coefficients for LSF intensity stereo processing
+ * derived from section 2.4.3.2 of ISO/IEC 13818-3
+ *
+ * is_lsf_table[0][i] = (1 / sqrt(sqrt(2)))^(i + 1)
+ * is_lsf_table[1][i] = (1 / sqrt(2))^(i + 1)
+ */
+static
+mad_fixed_t const is_lsf_table[2][15] = {
+ {
+ MAD_F(0x0d744fcd) /* 0.840896415 */,
+ MAD_F(0x0b504f33) /* 0.707106781 */,
+ MAD_F(0x09837f05) /* 0.594603558 */,
+ MAD_F(0x08000000) /* 0.500000000 */,
+ MAD_F(0x06ba27e6) /* 0.420448208 */,
+ MAD_F(0x05a8279a) /* 0.353553391 */,
+ MAD_F(0x04c1bf83) /* 0.297301779 */,
+ MAD_F(0x04000000) /* 0.250000000 */,
+ MAD_F(0x035d13f3) /* 0.210224104 */,
+ MAD_F(0x02d413cd) /* 0.176776695 */,
+ MAD_F(0x0260dfc1) /* 0.148650889 */,
+ MAD_F(0x02000000) /* 0.125000000 */,
+ MAD_F(0x01ae89fa) /* 0.105112052 */,
+ MAD_F(0x016a09e6) /* 0.088388348 */,
+ MAD_F(0x01306fe1) /* 0.074325445 */
+ }, {
+ MAD_F(0x0b504f33) /* 0.707106781 */,
+ MAD_F(0x08000000) /* 0.500000000 */,
+ MAD_F(0x05a8279a) /* 0.353553391 */,
+ MAD_F(0x04000000) /* 0.250000000 */,
+ MAD_F(0x02d413cd) /* 0.176776695 */,
+ MAD_F(0x02000000) /* 0.125000000 */,
+ MAD_F(0x016a09e6) /* 0.088388348 */,
+ MAD_F(0x01000000) /* 0.062500000 */,
+ MAD_F(0x00b504f3) /* 0.044194174 */,
+ MAD_F(0x00800000) /* 0.031250000 */,
+ MAD_F(0x005a827a) /* 0.022097087 */,
+ MAD_F(0x00400000) /* 0.015625000 */,
+ MAD_F(0x002d413d) /* 0.011048543 */,
+ MAD_F(0x00200000) /* 0.007812500 */,
+ MAD_F(0x0016a09e) /* 0.005524272 */
+ }
+};
+
+/*
+ * NAME: III_sideinfo()
+ * DESCRIPTION: decode frame side information from a bitstream
+ */
+static
+enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
+ int lsf, struct sideinfo *si,
+ unsigned int *data_bitlen,
+ unsigned int *priv_bitlen)
+{
+ unsigned int ngr, gr, ch, i;
+ enum mad_error result = 0;
+
+ *data_bitlen = 0;
+ *priv_bitlen = lsf ? ((nch == 1) ? 1 : 2) : ((nch == 1) ? 5 : 3);
+
+ si->main_data_begin = mad_bit_read(ptr, lsf ? 8 : 9);
+ si->private_bits = mad_bit_read(ptr, *priv_bitlen);
+
+ ngr = 1;
+ if (!lsf) {
+ ngr = 2;
+
+ for (ch = 0; ch < nch; ++ch)
+ si->scfsi[ch] = mad_bit_read(ptr, 4);
+ }
+
+ for (gr = 0; gr < ngr; ++gr) {
+ struct granule *granule = &si->gr[gr];
+
+ for (ch = 0; ch < nch; ++ch) {
+ struct channel *channel = &granule->ch[ch];
+
+ channel->part2_3_length = mad_bit_read(ptr, 12);
+ channel->big_values = mad_bit_read(ptr, 9);
+ channel->global_gain = mad_bit_read(ptr, 8);
+ channel->scalefac_compress = mad_bit_read(ptr, lsf ? 9 : 4);
+
+ *data_bitlen += channel->part2_3_length;
+
+ if (channel->big_values > 288 && result == 0)
+ result = MAD_ERROR_BADBIGVALUES;
+
+ channel->flags = 0;
+
+ /* window_switching_flag */
+ if (mad_bit_read(ptr, 1)) {
+ channel->block_type = mad_bit_read(ptr, 2);
+
+ if (channel->block_type == 0 && result == 0)
+ result = MAD_ERROR_BADBLOCKTYPE;
+
+ if (!lsf && channel->block_type == 2 && si->scfsi[ch] && result == 0)
+ result = MAD_ERROR_BADSCFSI;
+
+ channel->region0_count = 7;
+ channel->region1_count = 36;
+
+ if (mad_bit_read(ptr, 1))
+ channel->flags |= mixed_block_flag;
+ else if (channel->block_type == 2)
+ channel->region0_count = 8;
+
+ for (i = 0; i < 2; ++i)
+ channel->table_select[i] = mad_bit_read(ptr, 5);
+
+# if defined(DEBUG)
+ channel->table_select[2] = 4; /* not used */
+# endif
+
+ for (i = 0; i < 3; ++i)
+ channel->subblock_gain[i] = mad_bit_read(ptr, 3);
+ }
+ else {
+ channel->block_type = 0;
+
+ for (i = 0; i < 3; ++i)
+ channel->table_select[i] = mad_bit_read(ptr, 5);
+
+ channel->region0_count = mad_bit_read(ptr, 4);
+ channel->region1_count = mad_bit_read(ptr, 3);
+ }
+
+ /* [preflag,] scalefac_scale, count1table_select */
+ channel->flags |= mad_bit_read(ptr, lsf ? 2 : 3);
+ }
+ }
+
+ return result;
+}
+
+/*
+ * NAME: III_scalefactors_lsf()
+ * DESCRIPTION: decode channel scalefactors for LSF from a bitstream
+ */
+static
+unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
+ struct channel *channel,
+ struct channel *gr1ch, int mode_extension)
+{
+ struct mad_bitptr start;
+ unsigned int scalefac_compress, index, slen[4], part, n, i;
+ unsigned char const *nsfb;
+
+ start = *ptr;
+
+ scalefac_compress = channel->scalefac_compress;
+ index = (channel->block_type == 2) ?
+ ((channel->flags & mixed_block_flag) ? 2 : 1) : 0;
+
+ if (!((mode_extension & 0x1) && gr1ch)) {
+ if (scalefac_compress < 400) {
+ slen[0] = (scalefac_compress >> 4) / 5;
+ slen[1] = (scalefac_compress >> 4) % 5;
+ slen[2] = (scalefac_compress % 16) >> 2;
+ slen[3] = scalefac_compress % 4;
+
+ nsfb = nsfb_table[0][index];
+ }
+ else if (scalefac_compress < 500) {
+ scalefac_compress -= 400;
+
+ slen[0] = (scalefac_compress >> 2) / 5;
+ slen[1] = (scalefac_compress >> 2) % 5;
+ slen[2] = scalefac_compress % 4;
+ slen[3] = 0;
+
+ nsfb = nsfb_table[1][index];
+ }
+ else {
+ scalefac_compress -= 500;
+
+ slen[0] = scalefac_compress / 3;
+ slen[1] = scalefac_compress % 3;
+ slen[2] = 0;
+ slen[3] = 0;
+
+ channel->flags |= preflag;
+
+ nsfb = nsfb_table[2][index];
+ }
+
+ n = 0;
+ for (part = 0; part < 4; ++part) {
+ for (i = 0; i < nsfb[part]; ++i)
+ channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
+ }
+
+ while (n < 39)
+ channel->scalefac[n++] = 0;
+ }
+ else { /* (mode_extension & 0x1) && gr1ch (i.e. ch == 1) */
+ scalefac_compress >>= 1;
+
+ if (scalefac_compress < 180) {
+ slen[0] = scalefac_compress / 36;
+ slen[1] = (scalefac_compress % 36) / 6;
+ slen[2] = (scalefac_compress % 36) % 6;
+ slen[3] = 0;
+
+ nsfb = nsfb_table[3][index];
+ }
+ else if (scalefac_compress < 244) {
+ scalefac_compress -= 180;
+
+ slen[0] = (scalefac_compress % 64) >> 4;
+ slen[1] = (scalefac_compress % 16) >> 2;
+ slen[2] = scalefac_compress % 4;
+ slen[3] = 0;
+
+ nsfb = nsfb_table[4][index];
+ }
+ else {
+ scalefac_compress -= 244;
+
+ slen[0] = scalefac_compress / 3;
+ slen[1] = scalefac_compress % 3;
+ slen[2] = 0;
+ slen[3] = 0;
+
+ nsfb = nsfb_table[5][index];
+ }
+
+ n = 0;
+ for (part = 0; part < 4; ++part) {
+ unsigned int max, is_pos;
+
+ max = (1 << slen[part]) - 1;
+
+ for (i = 0; i < nsfb[part]; ++i) {
+ is_pos = mad_bit_read(ptr, slen[part]);
+
+ channel->scalefac[n] = is_pos;
+ gr1ch->scalefac[n++] = (is_pos == max);
+ }
+ }
+
+ while (n < 39) {
+ channel->scalefac[n] = 0;
+ gr1ch->scalefac[n++] = 0; /* apparently not illegal */
+ }
+ }
+
+ return mad_bit_length(&start, ptr);
+}
+
+/*
+ * NAME: III_scalefactors()
+ * DESCRIPTION: decode channel scalefactors of one granule from a bitstream
+ */
+static
+unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
+ struct channel const *gr0ch, unsigned int scfsi)
+{
+ struct mad_bitptr start;
+ unsigned int slen1, slen2, sfbi;
+
+ start = *ptr;
+
+ slen1 = sflen_table[channel->scalefac_compress].slen1;
+ slen2 = sflen_table[channel->scalefac_compress].slen2;
+
+ if (channel->block_type == 2) {
+ unsigned int nsfb;
+
+ sfbi = 0;
+
+ nsfb = (channel->flags & mixed_block_flag) ? 8 + 3 * 3 : 6 * 3;
+ while (nsfb--)
+ channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);
+
+ nsfb = 6 * 3;
+ while (nsfb--)
+ channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);
+
+ nsfb = 1 * 3;
+ while (nsfb--)
+ channel->scalefac[sfbi++] = 0;
+ }
+ else { /* channel->block_type != 2 */
+ if (scfsi & 0x8) {
+ for (sfbi = 0; sfbi < 6; ++sfbi)
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+ for (sfbi = 0; sfbi < 6; ++sfbi)
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
+ }
+
+ if (scfsi & 0x4) {
+ for (sfbi = 6; sfbi < 11; ++sfbi)
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+ for (sfbi = 6; sfbi < 11; ++sfbi)
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
+ }
+
+ if (scfsi & 0x2) {
+ for (sfbi = 11; sfbi < 16; ++sfbi)
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+ for (sfbi = 11; sfbi < 16; ++sfbi)
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
+ }
+
+ if (scfsi & 0x1) {
+ for (sfbi = 16; sfbi < 21; ++sfbi)
+ channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
+ }
+ else {
+ for (sfbi = 16; sfbi < 21; ++sfbi)
+ channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
+ }
+
+ channel->scalefac[21] = 0;
+ }
+
+ return mad_bit_length(&start, ptr);
+}
+
+/*
+ * NAME: III_exponents()
+ * DESCRIPTION: calculate scalefactor exponents
+ */
+static
+void III_exponents(struct channel const *channel,
+ unsigned char const *sfbwidth, signed int exponents[39])
+{
+ signed int gain;
+ unsigned int scalefac_multiplier, sfbi;
+
+ gain = (signed int) channel->global_gain - 210;
+ scalefac_multiplier = (channel->flags & scalefac_scale) ? 2 : 1;
+
+ if (channel->block_type == 2) {
+ unsigned int l;
+ signed int gain0, gain1, gain2;
+
+ sfbi = l = 0;
+
+ if (channel->flags & mixed_block_flag) {
+ unsigned int premask;
+
+ premask = (channel->flags & preflag) ? ~0 : 0;
+
+ /* long block subbands 0-1 */
+
+ while (l < 36) {
+ exponents[sfbi] = gain -
+ (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) <<
+ scalefac_multiplier);
+
+ l += sfbwidth[sfbi++];
+ }
+ }
+
+ /* this is probably wrong for 8000 Hz short/mixed blocks */
+
+ gain0 = gain - 8 * (signed int) channel->subblock_gain[0];
+ gain1 = gain - 8 * (signed int) channel->subblock_gain[1];
+ gain2 = gain - 8 * (signed int) channel->subblock_gain[2];
+
+ while (l < 576) {
+ exponents[sfbi + 0] = gain0 -
+ (signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier);
+ exponents[sfbi + 1] = gain1 -
+ (signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier);
+ exponents[sfbi + 2] = gain2 -
+ (signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier);
+
+ l += 3 * sfbwidth[sfbi];
+ sfbi += 3;
+ }
+ }
+ else { /* channel->block_type != 2 */
+ if (channel->flags & preflag) {
+ for (sfbi = 0; sfbi < 22; ++sfbi) {
+ exponents[sfbi] = gain -
+ (signed int) ((channel->scalefac[sfbi] + pretab[sfbi]) <<
+ scalefac_multiplier);
+ }
+ }
+ else {
+ for (sfbi = 0; sfbi < 22; ++sfbi) {
+ exponents[sfbi] = gain -
+ (signed int) (channel->scalefac[sfbi] << scalefac_multiplier);
+ }
+ }
+ }
+}
+
+/*
+ * NAME: III_requantize()
+ * DESCRIPTION: requantize one (positive) value
+ */
+static
+mad_fixed_t III_requantize(unsigned int value, signed int exp)
+{
+ mad_fixed_t requantized;
+ signed int frac;
+ struct fixedfloat const *power;
+
+ /*
+ * long blocks:
+ * xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
+ * 2^((1/4) * (global_gain - 210)) *
+ * 2^-(scalefac_multiplier *
+ * (scalefac_l[sfb] + preflag * pretab[sfb]))
+ *
+ * short blocks:
+ * xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
+ * 2^((1/4) * (global_gain - 210 - 8 * subblock_gain[w])) *
+ * 2^-(scalefac_multiplier * scalefac_s[sfb][w])
+ *
+ * where:
+ * scalefac_multiplier = (scalefac_scale + 1) / 2
+ */
+
+ frac = exp % 4;
+ exp /= 4;
+
+ power = &rq_table[value];
+ requantized = power->mantissa;
+ exp += power->exponent;
+
+ if (exp < 0) {
+ if (-exp >= sizeof(mad_fixed_t) * CHAR_BIT) {
+ /* underflow */
+ requantized = 0;
+ }
+ else
+ requantized >>= -exp;
+ }
+ else {
+ if (exp >= 5) {
+ /* overflow */
+# if defined(DEBUG)
+ fprintf(stderr, "requantize overflow (%f * 2^%d)\n",
+ mad_f_todouble(requantized), exp);
+# endif
+ requantized = MAD_F_MAX;
+ }
+ else
+ requantized <<= exp;
+ }
+
+ return frac ? mad_f_mul(requantized, root_table[3 + frac]) : requantized;
+}
+
+/* we must take care that sz >= bits and sz < sizeof(long) lest bits == 0 */
+# define MASK(cache, sz, bits) \
+ (((cache) >> ((sz) - (bits))) & ((1 << (bits)) - 1))
+# define MASK1BIT(cache, sz) \
+ ((cache) & (1 << ((sz) - 1)))
+
+/*
+ * NAME: III_huffdecode()
+ * DESCRIPTION: decode Huffman code words of one channel of one granule
+ */
+static
+enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
+ struct channel *channel,
+ unsigned char const *sfbwidth,
+ unsigned int part2_length)
+{
+ signed int exponents[39], exp;
+ signed int const *expptr;
+ struct mad_bitptr peek;
+ signed int bits_left, cachesz;
+ register mad_fixed_t *xrptr;
+ mad_fixed_t const *sfbound;
+ register unsigned long bitcache;
+
+ bits_left = (signed) channel->part2_3_length - (signed) part2_length;
+ if (bits_left < 0)
+ return MAD_ERROR_BADPART3LEN;
+
+ III_exponents(channel, sfbwidth, exponents);
+
+ peek = *ptr;
+ mad_bit_skip(ptr, bits_left);
+
+ /* align bit reads to byte boundaries */
+ cachesz = mad_bit_bitsleft(&peek);
+ cachesz += ((32 - 1 - 24) + (24 - cachesz)) & ~7;
+
+ bitcache = mad_bit_read(&peek, cachesz);
+ bits_left -= cachesz;
+
+ xrptr = &xr[0];
+
+ /* big_values */
+ {
+ unsigned int region, rcount;
+ struct hufftable const *entry;
+ union huffpair const *table;
+ unsigned int linbits, startbits, big_values, reqhits;
+ mad_fixed_t reqcache[16];
+
+ sfbound = xrptr + *sfbwidth++;
+ rcount = channel->region0_count + 1;
+
+ entry = &mad_huff_pair_table[channel->table_select[region = 0]];
+ table = entry->table;
+ linbits = entry->linbits;
+ startbits = entry->startbits;
+
+ if (table == 0)
+ return MAD_ERROR_BADHUFFTABLE;
+
+ expptr = &exponents[0];
+ exp = *expptr++;
+ reqhits = 0;
+
+ big_values = channel->big_values;
+
+ while (big_values-- && cachesz + bits_left > 0) {
+ union huffpair const *pair;
+ unsigned int clumpsz, value;
+ register mad_fixed_t requantized;
+
+ if (xrptr == sfbound) {
+ sfbound += *sfbwidth++;
+
+ /* change table if region boundary */
+
+ if (--rcount == 0) {
+ if (region == 0)
+ rcount = channel->region1_count + 1;
+ else
+ rcount = 0; /* all remaining */
+
+ entry = &mad_huff_pair_table[channel->table_select[++region]];
+ table = entry->table;
+ linbits = entry->linbits;
+ startbits = entry->startbits;
+
+ if (table == 0)
+ return MAD_ERROR_BADHUFFTABLE;
+ }
+
+ if (exp != *expptr) {
+ exp = *expptr;
+ reqhits = 0;
+ }
+
+ ++expptr;
+ }
+
+ if (cachesz < 21) {
+ unsigned int bits;
+
+ bits = ((32 - 1 - 21) + (21 - cachesz)) & ~7;
+ bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
+ cachesz += bits;
+ bits_left -= bits;
+ }
+
+ /* hcod (0..19) */
+
+ clumpsz = startbits;
+ pair = &table[MASK(bitcache, cachesz, clumpsz)];
+
+ while (!pair->final) {
+ cachesz -= clumpsz;
+
+ clumpsz = pair->ptr.bits;
+ pair = &table[pair->ptr.offset + MASK(bitcache, cachesz, clumpsz)];
+ }
+
+ cachesz -= pair->value.hlen;
+
+ if (linbits) {
+ /* x (0..14) */
+
+ value = pair->value.x;
+
+ switch (value) {
+ case 0:
+ xrptr[0] = 0;
+ break;
+
+ case 15:
+ if (cachesz < linbits + 2) {
+ bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
+ cachesz += 16;
+ bits_left -= 16;
+ }
+
+ value += MASK(bitcache, cachesz, linbits);
+ cachesz -= linbits;
+
+ requantized = III_requantize(value, exp);
+ goto x_final;
+
+ default:
+ if (reqhits & (1 << value))
+ requantized = reqcache[value];
+ else {
+ reqhits |= (1 << value);
+ requantized = reqcache[value] = III_requantize(value, exp);
+ }
+
+ x_final:
+ xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+
+ /* y (0..14) */
+
+ value = pair->value.y;
+
+ switch (value) {
+ case 0:
+ xrptr[1] = 0;
+ break;
+
+ case 15:
+ if (cachesz < linbits + 1) {
+ bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
+ cachesz += 16;
+ bits_left -= 16;
+ }
+
+ value += MASK(bitcache, cachesz, linbits);
+ cachesz -= linbits;
+
+ requantized = III_requantize(value, exp);
+ goto y_final;
+
+ default:
+ if (reqhits & (1 << value))
+ requantized = reqcache[value];
+ else {
+ reqhits |= (1 << value);
+ requantized = reqcache[value] = III_requantize(value, exp);
+ }
+
+ y_final:
+ xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+ }
+ else {
+ /* x (0..1) */
+
+ value = pair->value.x;
+
+ if (value == 0)
+ xrptr[0] = 0;
+ else {
+ if (reqhits & (1 << value))
+ requantized = reqcache[value];
+ else {
+ reqhits |= (1 << value);
+ requantized = reqcache[value] = III_requantize(value, exp);
+ }
+
+ xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+
+ /* y (0..1) */
+
+ value = pair->value.y;
+
+ if (value == 0)
+ xrptr[1] = 0;
+ else {
+ if (reqhits & (1 << value))
+ requantized = reqcache[value];
+ else {
+ reqhits |= (1 << value);
+ requantized = reqcache[value] = III_requantize(value, exp);
+ }
+
+ xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
+ -requantized : requantized;
+ }
+ }
+
+ xrptr += 2;
+ }
+ }
+
+ if (cachesz + bits_left < 0)
+ return MAD_ERROR_BADHUFFDATA; /* big_values overrun */
+
+ /* count1 */
+ {
+ union huffquad const *table;
+ register mad_fixed_t requantized;
+
+ table = mad_huff_quad_table[channel->flags & count1table_select];
+
+ requantized = III_requantize(1, exp);
+
+ while (cachesz + bits_left > 0 && xrptr <= &xr[572]) {
+ union huffquad const *quad;
+
+ /* hcod (1..6) */
+
+ if (cachesz < 10) {
+ bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
+ cachesz += 16;
+ bits_left -= 16;
+ }
+
+ quad = &table[MASK(bitcache, cachesz, 4)];
+
+ /* quad tables guaranteed to have at most one extra lookup */
+ if (!quad->final) {
+ cachesz -= 4;
+
+ quad = &table[quad->ptr.offset +
+ MASK(bitcache, cachesz, quad->ptr.bits)];
+ }
+
+ cachesz -= quad->value.hlen;
+
+ if (xrptr == sfbound) {
+ sfbound += *sfbwidth++;
+
+ if (exp != *expptr) {
+ exp = *expptr;
+ requantized = III_requantize(1, exp);
+ }
+
+ ++expptr;
+ }
+
+ /* v (0..1) */
+
+ xrptr[0] = quad->value.v ?
+ (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
+
+ /* w (0..1) */
+
+ xrptr[1] = quad->value.w ?
+ (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
+
+ xrptr += 2;
+
+ if (xrptr == sfbound) {
+ sfbound += *sfbwidth++;
+
+ if (exp != *expptr) {
+ exp = *expptr;
+ requantized = III_requantize(1, exp);
+ }
+
+ ++expptr;
+ }
+
+ /* x (0..1) */
+
+ xrptr[0] = quad->value.x ?
+ (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
+
+ /* y (0..1) */
+
+ xrptr[1] = quad->value.y ?
+ (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
+
+ xrptr += 2;
+ }
+
+ if (cachesz + bits_left < 0) {
+# if 0 && defined(DEBUG)
+ fprintf(stderr, "huffman count1 overrun (%d bits)\n",
+ -(cachesz + bits_left));
+# endif
+
+ /* technically the bitstream is misformatted, but apparently
+ some encoders are just a bit sloppy with stuffing bits */
+
+ xrptr -= 4;
+ }
+ }
+
+ assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);
+
+# if 0 && defined(DEBUG)
+ if (bits_left < 0)
+ fprintf(stderr, "read %d bits too many\n", -bits_left);
+ else if (cachesz + bits_left > 0)
+ fprintf(stderr, "%d stuffing bits\n", cachesz + bits_left);
+# endif
+
+ /* rzero */
+ while (xrptr < &xr[576]) {
+ xrptr[0] = 0;
+ xrptr[1] = 0;
+
+ xrptr += 2;
+ }
+
+ return 0;
+}
+
+# undef MASK
+# undef MASK1BIT
+
+/*
+ * NAME: III_reorder()
+ * DESCRIPTION: reorder frequency lines of a short block into subband order
+ */
+static
+void III_reorder(mad_fixed_t xr[576], struct channel const *channel,
+ unsigned char const sfbwidth[39])
+{
+ mad_fixed_t tmp[32][3][6];
+ unsigned int sb, l, sfbi, f, w, sbw[3], sw[3];
+
+ /* this is probably wrong for 8000 Hz mixed blocks */
+
+ if (channel->flags & mixed_block_flag)
+ sb = 2, sfbi = 3 * 3;
+ else
+ sb = 0, sfbi = 0;
+
+ for (w = 0; w < 3; ++w) {
+ sbw[w] = sb;
+ sw[w] = 0;
+ }
+
+ f = sfbwidth[sfbi];
+ w = 0;
+
+ for (l = 18 * sb; l < 576; ++l) {
+ tmp[sbw[w]][w][sw[w]++] = xr[l];
+
+ if (sw[w] == 6) {
+ sw[w] = 0;
+ ++sbw[w];
+ }
+
+ if (--f == 0) {
+ if (++w == 3)
+ w = 0;
+
+ f = sfbwidth[++sfbi];
+ }
+ }
+
+ memcpy(&xr[18 * sb], &tmp[sb], (576 - 18 * sb) * sizeof(mad_fixed_t));
+}
+
+/*
+ * NAME: III_stereo()
+ * DESCRIPTION: perform joint stereo processing on a granule
+ */
+static
+enum mad_error III_stereo(mad_fixed_t xr[2][576],
+ struct granule const *granule,
+ struct mad_header *header,
+ unsigned char const *sfbwidth)
+{
+ short modes[39];
+ unsigned int sfbi, l, n, i;
+
+ enum {
+ i_stereo = 0x1,
+ ms_stereo = 0x2
+ };
+
+ if (granule->ch[0].block_type !=
+ granule->ch[1].block_type ||
+ (granule->ch[0].flags & mixed_block_flag) !=
+ (granule->ch[1].flags & mixed_block_flag))
+ return MAD_ERROR_BADSTEREO;
+
+ for (i = 0; i < 39; ++i)
+ modes[i] = header->mode_extension;
+
+ /* intensity stereo */
+
+ if (header->mode_extension & i_stereo) {
+ struct channel const *right_ch = &granule->ch[1];
+ mad_fixed_t const *right_xr = xr[1];
+ unsigned int is_pos;
+
+ header->flags |= MAD_FLAG_I_STEREO;
+
+ /* first determine which scalefactor bands are to be processed */
+
+ if (right_ch->block_type == 2) {
+ unsigned int lower, start, max, bound[3], w;
+
+ lower = start = max = bound[0] = bound[1] = bound[2] = 0;
+
+ sfbi = l = 0;
+
+ if (right_ch->flags & mixed_block_flag) {
+ while (l < 36) {
+ n = sfbwidth[sfbi++];
+
+ for (i = 0; i < n; ++i) {
+ if (right_xr[i]) {
+ lower = sfbi;
+ break;
+ }
+ }
+
+ right_xr += n;
+ l += n;
+ }
+
+ start = sfbi;
+ }
+
+ w = 0;
+ while (l < 576) {
+ n = sfbwidth[sfbi++];
+
+ for (i = 0; i < n; ++i) {
+ if (right_xr[i]) {
+ max = bound[w] = sfbi;
+ break;
+ }
+ }
+
+ right_xr += n;
+ l += n;
+ w = (w + 1) % 3;
+ }
+
+ if (max)
+ lower = start;
+
+ /* long blocks */
+
+ for (i = 0; i < lower; ++i)
+ modes[i] = header->mode_extension & ~i_stereo;
+
+ /* short blocks */
+
+ w = 0;
+ for (i = start; i < max; ++i) {
+ if (i < bound[w])
+ modes[i] = header->mode_extension & ~i_stereo;
+
+ w = (w + 1) % 3;
+ }
+ }
+ else { /* right_ch->block_type != 2 */
+ unsigned int bound;
+
+ bound = 0;
+ for (sfbi = l = 0; l < 576; l += n) {
+ n = sfbwidth[sfbi++];
+
+ for (i = 0; i < n; ++i) {
+ if (right_xr[i]) {
+ bound = sfbi;
+ break;
+ }
+ }
+
+ right_xr += n;
+ }
+
+ for (i = 0; i < bound; ++i)
+ modes[i] = header->mode_extension & ~i_stereo;
+ }
+
+ /* now do the actual processing */
+
+ if (header->flags & MAD_FLAG_LSF_EXT) {
+ unsigned char const *illegal_pos = granule[1].ch[1].scalefac;
+ mad_fixed_t const *lsf_scale;
+
+ /* intensity_scale */
+ lsf_scale = is_lsf_table[right_ch->scalefac_compress & 0x1];
+
+ for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
+ n = sfbwidth[sfbi];
+
+ if (!(modes[sfbi] & i_stereo))
+ continue;
+
+ if (illegal_pos[sfbi]) {
+ modes[sfbi] &= ~i_stereo;
+ continue;
+ }
+
+ is_pos = right_ch->scalefac[sfbi];
+
+ for (i = 0; i < n; ++i) {
+ register mad_fixed_t left;
+
+ left = xr[0][l + i];
+
+ if (is_pos == 0)
+ xr[1][l + i] = left;
+ else {
+ register mad_fixed_t opposite;
+
+ opposite = mad_f_mul(left, lsf_scale[(is_pos - 1) / 2]);
+
+ if (is_pos & 1) {
+ xr[0][l + i] = opposite;
+ xr[1][l + i] = left;
+ }
+ else
+ xr[1][l + i] = opposite;
+ }
+ }
+ }
+ }
+ else { /* !(header->flags & MAD_FLAG_LSF_EXT) */
+ for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
+ n = sfbwidth[sfbi];
+
+ if (!(modes[sfbi] & i_stereo))
+ continue;
+
+ is_pos = right_ch->scalefac[sfbi];
+
+ if (is_pos >= 7) { /* illegal intensity position */
+ modes[sfbi] &= ~i_stereo;
+ continue;
+ }
+
+ for (i = 0; i < n; ++i) {
+ register mad_fixed_t left;
+
+ left = xr[0][l + i];
+
+ xr[0][l + i] = mad_f_mul(left, is_table[ is_pos]);
+ xr[1][l + i] = mad_f_mul(left, is_table[6 - is_pos]);
+ }
+ }
+ }
+ }
+
+ /* middle/side stereo */
+
+ if (header->mode_extension & ms_stereo) {
+ register mad_fixed_t invsqrt2;
+
+ header->flags |= MAD_FLAG_MS_STEREO;
+
+ invsqrt2 = root_table[3 + -2];
+
+ for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
+ n = sfbwidth[sfbi];
+
+ if (modes[sfbi] != ms_stereo)
+ continue;
+
+ for (i = 0; i < n; ++i) {
+ register mad_fixed_t m, s;
+
+ m = xr[0][l + i];
+ s = xr[1][l + i];
+
+ xr[0][l + i] = mad_f_mul(m + s, invsqrt2); /* l = (m + s) / sqrt(2) */
+ xr[1][l + i] = mad_f_mul(m - s, invsqrt2); /* r = (m - s) / sqrt(2) */
+ }
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * NAME: III_aliasreduce()
+ * DESCRIPTION: perform frequency line alias reduction
+ */
+static
+void III_aliasreduce(mad_fixed_t xr[576], int lines)
+{
+ mad_fixed_t const *bound;
+ int i;
+
+ bound = &xr[lines];
+ for (xr += 18; xr < bound; xr += 18) {
+ for (i = 0; i < 8; ++i) {
+ register mad_fixed_t *aptr, *bptr, a, b;
+ register mad_fixed64hi_t hi;
+ register mad_fixed64lo_t lo;
+
+ aptr = &xr[-1 - i];
+ bptr = &xr[ i];
+
+ a = *aptr;
+ b = *bptr;
+
+# if defined(ASO_ZEROCHECK)
+ if (a | b) {
+# endif
+ MAD_F_ML0(hi, lo, a, cs[i]);
+ MAD_F_MLA(hi, lo, -b, ca[i]);
+
+ *aptr = MAD_F_MLZ(hi, lo);
+
+ MAD_F_ML0(hi, lo, b, cs[i]);
+ MAD_F_MLA(hi, lo, a, ca[i]);
+
+ *bptr = MAD_F_MLZ(hi, lo);
+# if defined(ASO_ZEROCHECK)
+ }
+# endif
+ }
+ }
+}
+
+# if defined(ASO_IMDCT)
+void III_imdct_l(mad_fixed_t const [18], mad_fixed_t [36], unsigned int);
+# else
+/*
+ * NAME: imdct36
+ * DESCRIPTION: perform X[18]->x[36] IMDCT
+ */
+static inline
+void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36])
+{
+ mad_fixed_t t0, t1, t2, t3, t4, t5, t6, t7;
+ mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
+ register mad_fixed64hi_t hi;
+ register mad_fixed64lo_t lo;
+
+ MAD_F_ML0(hi, lo, X[4], MAD_F(0x0ec835e8));
+ MAD_F_MLA(hi, lo, X[13], MAD_F(0x061f78aa));
+
+ t6 = MAD_F_MLZ(hi, lo);
+
+ MAD_F_MLA(hi, lo, (t14 = X[1] - X[10]), -MAD_F(0x061f78aa));
+ MAD_F_MLA(hi, lo, (t15 = X[7] + X[16]), -MAD_F(0x0ec835e8));
+
+ t0 = MAD_F_MLZ(hi, lo);
+
+ MAD_F_MLA(hi, lo, (t8 = X[0] - X[11] - X[12]), MAD_F(0x0216a2a2));
+ MAD_F_MLA(hi, lo, (t9 = X[2] - X[9] - X[14]), MAD_F(0x09bd7ca0));
+ MAD_F_MLA(hi, lo, (t10 = X[3] - X[8] - X[15]), -MAD_F(0x0cb19346));
+ MAD_F_MLA(hi, lo, (t11 = X[5] - X[6] - X[17]), -MAD_F(0x0fdcf549));
+
+ x[7] = MAD_F_MLZ(hi, lo);
+ x[10] = -x[7];
+
+ MAD_F_ML0(hi, lo, t8, -MAD_F(0x0cb19346));
+ MAD_F_MLA(hi, lo, t9, MAD_F(0x0fdcf549));
+ MAD_F_MLA(hi, lo, t10, MAD_F(0x0216a2a2));
+ MAD_F_MLA(hi, lo, t11, -MAD_F(0x09bd7ca0));
+
+ x[19] = x[34] = MAD_F_MLZ(hi, lo) - t0;
+
+ t12 = X[0] - X[3] + X[8] - X[11] - X[12] + X[15];
+ t13 = X[2] + X[5] - X[6] - X[9] - X[14] - X[17];
+
+ MAD_F_ML0(hi, lo, t12, -MAD_F(0x0ec835e8));
+ MAD_F_MLA(hi, lo, t13, MAD_F(0x061f78aa));
+
+ x[22] = x[31] = MAD_F_MLZ(hi, lo) + t0;
+
+ MAD_F_ML0(hi, lo, X[1], -MAD_F(0x09bd7ca0));
+ MAD_F_MLA(hi, lo, X[7], MAD_F(0x0216a2a2));
+ MAD_F_MLA(hi, lo, X[10], -MAD_F(0x0fdcf549));
+ MAD_F_MLA(hi, lo, X[16], MAD_F(0x0cb19346));
+
+ t1 = MAD_F_MLZ(hi, lo) + t6;
+
+ MAD_F_ML0(hi, lo, X[0], MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[6], MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[9], MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[15], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0f9ee890));
+
+ x[6] = MAD_F_MLZ(hi, lo) + t1;
+ x[11] = -x[6];
+
+ MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[2], -MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[3], MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[5], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[6], MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[8], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[15], MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[17], MAD_F(0x04cfb0e2));
+
+ x[23] = x[30] = MAD_F_MLZ(hi, lo) + t1;
+
+ MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[3], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[5], MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[9], -MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[11], MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[15], MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0acf37ad));
+
+ x[18] = x[35] = MAD_F_MLZ(hi, lo) - t1;
+
+ MAD_F_ML0(hi, lo, X[4], MAD_F(0x061f78aa));
+ MAD_F_MLA(hi, lo, X[13], -MAD_F(0x0ec835e8));
+
+ t7 = MAD_F_MLZ(hi, lo);
+
+ MAD_F_MLA(hi, lo, X[1], -MAD_F(0x0cb19346));
+ MAD_F_MLA(hi, lo, X[7], MAD_F(0x0fdcf549));
+ MAD_F_MLA(hi, lo, X[10], MAD_F(0x0216a2a2));
+ MAD_F_MLA(hi, lo, X[16], -MAD_F(0x09bd7ca0));
+
+ t2 = MAD_F_MLZ(hi, lo);
+
+ MAD_F_MLA(hi, lo, X[0], MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[5], MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[9], MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[12], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[15], MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[17], MAD_F(0x0f426cb5));
+
+ x[5] = MAD_F_MLZ(hi, lo);
+ x[12] = -x[5];
+
+ MAD_F_ML0(hi, lo, X[0], MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[3], MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[6], -MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[8], MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[15], MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0bcbe352));
+
+ x[0] = MAD_F_MLZ(hi, lo) + t2;
+ x[17] = -x[0];
+
+ MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[2], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[3], -MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[5], MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[8], MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[9], MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x03768962));
+
+ x[24] = x[29] = MAD_F_MLZ(hi, lo) + t2;
+
+ MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0216a2a2));
+ MAD_F_MLA(hi, lo, X[7], -MAD_F(0x09bd7ca0));
+ MAD_F_MLA(hi, lo, X[10], MAD_F(0x0cb19346));
+ MAD_F_MLA(hi, lo, X[16], MAD_F(0x0fdcf549));
+
+ t3 = MAD_F_MLZ(hi, lo) + t7;
+
+ MAD_F_ML0(hi, lo, X[0], MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[3], -MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[5], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[6], MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[8], MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[12], MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0ffc19fd));
+
+ x[8] = MAD_F_MLZ(hi, lo) + t3;
+ x[9] = -x[8];
+
+ MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[3], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[8], MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[14], -MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[15], MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[17], MAD_F(0x07635284));
+
+ x[21] = x[32] = MAD_F_MLZ(hi, lo) + t3;
+
+ MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[3], MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[6], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[9], MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[12], MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[15], -MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0898c779));
+
+ x[20] = x[33] = MAD_F_MLZ(hi, lo) - t3;
+
+ MAD_F_ML0(hi, lo, t14, -MAD_F(0x0ec835e8));
+ MAD_F_MLA(hi, lo, t15, MAD_F(0x061f78aa));
+
+ t4 = MAD_F_MLZ(hi, lo) - t7;
+
+ MAD_F_ML0(hi, lo, t12, MAD_F(0x061f78aa));
+ MAD_F_MLA(hi, lo, t13, MAD_F(0x0ec835e8));
+
+ x[4] = MAD_F_MLZ(hi, lo) + t4;
+ x[13] = -x[4];
+
+ MAD_F_ML0(hi, lo, t8, MAD_F(0x09bd7ca0));
+ MAD_F_MLA(hi, lo, t9, -MAD_F(0x0216a2a2));
+ MAD_F_MLA(hi, lo, t10, MAD_F(0x0fdcf549));
+ MAD_F_MLA(hi, lo, t11, -MAD_F(0x0cb19346));
+
+ x[1] = MAD_F_MLZ(hi, lo) + t4;
+ x[16] = -x[1];
+
+ MAD_F_ML0(hi, lo, t8, -MAD_F(0x0fdcf549));
+ MAD_F_MLA(hi, lo, t9, -MAD_F(0x0cb19346));
+ MAD_F_MLA(hi, lo, t10, -MAD_F(0x09bd7ca0));
+ MAD_F_MLA(hi, lo, t11, -MAD_F(0x0216a2a2));
+
+ x[25] = x[28] = MAD_F_MLZ(hi, lo) + t4;
+
+ MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0fdcf549));
+ MAD_F_MLA(hi, lo, X[7], -MAD_F(0x0cb19346));
+ MAD_F_MLA(hi, lo, X[10], -MAD_F(0x09bd7ca0));
+ MAD_F_MLA(hi, lo, X[16], -MAD_F(0x0216a2a2));
+
+ t5 = MAD_F_MLZ(hi, lo) - t6;
+
+ MAD_F_ML0(hi, lo, X[0], MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[3], MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[5], MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[6], MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[8], -MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[12], MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[15], MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0d7e8807));
+
+ x[2] = MAD_F_MLZ(hi, lo) + t5;
+ x[15] = -x[2];
+
+ MAD_F_ML0(hi, lo, X[0], MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[2], MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[3], MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[5], MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[6], -MAD_F(0x00b2aa3e));
+ MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[9], -MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[11], MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[17], MAD_F(0x0e313245));
+
+ x[3] = MAD_F_MLZ(hi, lo) + t5;
+ x[14] = -x[3];
+
+ MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0ffc19fd));
+ MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0f9ee890));
+ MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0f426cb5));
+ MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0e313245));
+ MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0d7e8807));
+ MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0bcbe352));
+ MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0acf37ad));
+ MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0898c779));
+ MAD_F_MLA(hi, lo, X[12], -MAD_F(0x07635284));
+ MAD_F_MLA(hi, lo, X[14], -MAD_F(0x04cfb0e2));
+ MAD_F_MLA(hi, lo, X[15], -MAD_F(0x03768962));
+ MAD_F_MLA(hi, lo, X[17], -MAD_F(0x00b2aa3e));
+
+ x[26] = x[27] = MAD_F_MLZ(hi, lo) + t5;
+}
+
+/*
+ * NAME: III_imdct_l()
+ * DESCRIPTION: perform IMDCT and windowing for long blocks
+ */
+static
+void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
+ unsigned int block_type)
+{
+ unsigned int i;
+
+ /* IMDCT */
+
+ imdct36(X, z);
+
+ /* windowing */
+
+ switch (block_type) {
+ case 0: /* normal window */
+# if defined(ASO_INTERLEAVE1)
+ {
+ register mad_fixed_t tmp1, tmp2;
+
+ tmp1 = window_l[0];
+ tmp2 = window_l[1];
+
+ for (i = 0; i < 34; i += 2) {
+ z[i + 0] = mad_f_mul(z[i + 0], tmp1);
+ tmp1 = window_l[i + 2];
+ z[i + 1] = mad_f_mul(z[i + 1], tmp2);
+ tmp2 = window_l[i + 3];
+ }
+
+ z[34] = mad_f_mul(z[34], tmp1);
+ z[35] = mad_f_mul(z[35], tmp2);
+ }
+# elif defined(ASO_INTERLEAVE2)
+ {
+ register mad_fixed_t tmp1, tmp2;
+
+ tmp1 = z[0];
+ tmp2 = window_l[0];
+
+ for (i = 0; i < 35; ++i) {
+ z[i] = mad_f_mul(tmp1, tmp2);
+ tmp1 = z[i + 1];
+ tmp2 = window_l[i + 1];
+ }
+
+ z[35] = mad_f_mul(tmp1, tmp2);
+ }
+# elif 1
+ for (i = 0; i < 36; i += 4) {
+ z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
+ z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
+ z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
+ z[i + 3] = mad_f_mul(z[i + 3], window_l[i + 3]);
+ }
+# else
+ for (i = 0; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
+# endif
+ break;
+
+ case 1: /* start block */
+ for (i = 0; i < 18; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
+ /* (i = 18; i < 24; ++i) z[i] unchanged */
+ for (i = 24; i < 30; ++i) z[i] = mad_f_mul(z[i], window_s[i - 18]);
+ for (i = 30; i < 36; ++i) z[i] = 0;
+ break;
+
+ case 3: /* stop block */
+ for (i = 0; i < 6; ++i) z[i] = 0;
+ for (i = 6; i < 12; ++i) z[i] = mad_f_mul(z[i], window_s[i - 6]);
+ /* (i = 12; i < 18; ++i) z[i] unchanged */
+ for (i = 18; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
+ break;
+ }
+}
+# endif /* ASO_IMDCT */
+
+/*
+ * NAME: III_imdct_s()
+ * DESCRIPTION: perform IMDCT and windowing for short blocks
+ */
+static
+void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
+{
+ mad_fixed_t y[36], *yptr;
+ mad_fixed_t const *wptr;
+ int w, i;
+ register mad_fixed64hi_t hi;
+ register mad_fixed64lo_t lo;
+
+ /* IMDCT */
+
+ yptr = &y[0];
+
+ for (w = 0; w < 3; ++w) {
+ register mad_fixed_t const (*s)[6];
+
+ s = imdct_s;
+
+ for (i = 0; i < 3; ++i) {
+ MAD_F_ML0(hi, lo, X[0], (*s)[0]);
+ MAD_F_MLA(hi, lo, X[1], (*s)[1]);
+ MAD_F_MLA(hi, lo, X[2], (*s)[2]);
+ MAD_F_MLA(hi, lo, X[3], (*s)[3]);
+ MAD_F_MLA(hi, lo, X[4], (*s)[4]);
+ MAD_F_MLA(hi, lo, X[5], (*s)[5]);
+
+ yptr[i + 0] = MAD_F_MLZ(hi, lo);
+ yptr[5 - i] = -yptr[i + 0];
+
+ ++s;
+
+ MAD_F_ML0(hi, lo, X[0], (*s)[0]);
+ MAD_F_MLA(hi, lo, X[1], (*s)[1]);
+ MAD_F_MLA(hi, lo, X[2], (*s)[2]);
+ MAD_F_MLA(hi, lo, X[3], (*s)[3]);
+ MAD_F_MLA(hi, lo, X[4], (*s)[4]);
+ MAD_F_MLA(hi, lo, X[5], (*s)[5]);
+
+ yptr[ i + 6] = MAD_F_MLZ(hi, lo);
+ yptr[11 - i] = yptr[i + 6];
+
+ ++s;
+ }
+
+ yptr += 12;
+ X += 6;
+ }
+
+ /* windowing, overlapping and concatenation */
+
+ yptr = &y[0];
+ wptr = &window_s[0];
+
+ for (i = 0; i < 6; ++i) {
+ z[i + 0] = 0;
+ z[i + 6] = mad_f_mul(yptr[ 0 + 0], wptr[0]);
+
+ MAD_F_ML0(hi, lo, yptr[ 0 + 6], wptr[6]);
+ MAD_F_MLA(hi, lo, yptr[12 + 0], wptr[0]);
+
+ z[i + 12] = MAD_F_MLZ(hi, lo);
+
+ MAD_F_ML0(hi, lo, yptr[12 + 6], wptr[6]);
+ MAD_F_MLA(hi, lo, yptr[24 + 0], wptr[0]);
+
+ z[i + 18] = MAD_F_MLZ(hi, lo);
+
+ z[i + 24] = mad_f_mul(yptr[24 + 6], wptr[6]);
+ z[i + 30] = 0;
+
+ ++yptr;
+ ++wptr;
+ }
+}
+
+/*
+ * NAME: III_overlap()
+ * DESCRIPTION: perform overlap-add of windowed IMDCT outputs
+ */
+static
+void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
+ mad_fixed_t sample[18][32], unsigned int sb)
+{
+ unsigned int i;
+
+# if defined(ASO_INTERLEAVE2)
+ {
+ register mad_fixed_t tmp1, tmp2;
+
+ tmp1 = overlap[0];
+ tmp2 = overlap[1];
+
+ for (i = 0; i < 16; i += 2) {
+ sample[i + 0][sb] = output[i + 0] + tmp1;
+ overlap[i + 0] = output[i + 0 + 18];
+ tmp1 = overlap[i + 2];
+
+ sample[i + 1][sb] = output[i + 1] + tmp2;
+ overlap[i + 1] = output[i + 1 + 18];
+ tmp2 = overlap[i + 3];
+ }
+
+ sample[16][sb] = output[16] + tmp1;
+ overlap[16] = output[16 + 18];
+ sample[17][sb] = output[17] + tmp2;
+ overlap[17] = output[17 + 18];
+ }
+# elif 0
+ for (i = 0; i < 18; i += 2) {
+ sample[i + 0][sb] = output[i + 0] + overlap[i + 0];
+ overlap[i + 0] = output[i + 0 + 18];
+
+ sample[i + 1][sb] = output[i + 1] + overlap[i + 1];
+ overlap[i + 1] = output[i + 1 + 18];
+ }
+# else
+ for (i = 0; i < 18; ++i) {
+ sample[i][sb] = output[i] + overlap[i];
+ overlap[i] = output[i + 18];
+ }
+# endif
+}
+
+/*
+ * NAME: III_overlap_z()
+ * DESCRIPTION: perform "overlap-add" of zero IMDCT outputs
+ */
+static inline
+void III_overlap_z(mad_fixed_t overlap[18],
+ mad_fixed_t sample[18][32], unsigned int sb)
+{
+ unsigned int i;
+
+# if defined(ASO_INTERLEAVE2)
+ {
+ register mad_fixed_t tmp1, tmp2;
+
+ tmp1 = overlap[0];
+ tmp2 = overlap[1];
+
+ for (i = 0; i < 16; i += 2) {
+ sample[i + 0][sb] = tmp1;
+ overlap[i + 0] = 0;
+ tmp1 = overlap[i + 2];
+
+ sample[i + 1][sb] = tmp2;
+ overlap[i + 1] = 0;
+ tmp2 = overlap[i + 3];
+ }
+
+ sample[16][sb] = tmp1;
+ overlap[16] = 0;
+ sample[17][sb] = tmp2;
+ overlap[17] = 0;
+ }
+# else
+ for (i = 0; i < 18; ++i) {
+ sample[i][sb] = overlap[i];
+ overlap[i] = 0;
+ }
+# endif
+}
+
+/*
+ * NAME: III_freqinver()
+ * DESCRIPTION: perform subband frequency inversion for odd sample lines
+ */
+static
+void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
+{
+ unsigned int i;
+
+# if 1 || defined(ASO_INTERLEAVE1) || defined(ASO_INTERLEAVE2)
+ {
+ register mad_fixed_t tmp1, tmp2;
+
+ tmp1 = sample[1][sb];
+ tmp2 = sample[3][sb];
+
+ for (i = 1; i < 13; i += 4) {
+ sample[i + 0][sb] = -tmp1;
+ tmp1 = sample[i + 4][sb];
+ sample[i + 2][sb] = -tmp2;
+ tmp2 = sample[i + 6][sb];
+ }
+
+ sample[13][sb] = -tmp1;
+ tmp1 = sample[17][sb];
+ sample[15][sb] = -tmp2;
+ sample[17][sb] = -tmp1;
+ }
+# else
+ for (i = 1; i < 18; i += 2)
+ sample[i][sb] = -sample[i][sb];
+# endif
+}
+
+/*
+ * NAME: III_decode()
+ * DESCRIPTION: decode frame main_data
+ */
+static
+int III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
+ struct sideinfo *si, unsigned int nch)
+{
+ struct mad_header *header = &frame->header;
+ unsigned int sfreqi, ngr, gr;
+
+ {
+ unsigned int sfreq;
+
+ sfreq = header->samplerate;
+ if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
+ sfreq *= 2;
+
+ /* 48000 => 0, 44100 => 1, 32000 => 2,
+ 24000 => 3, 22050 => 4, 16000 => 5 */
+ sfreqi = ((sfreq >> 7) & 0x000f) +
+ ((sfreq >> 15) & 0x0001) - 8;
+
+ if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
+ sfreqi += 3;
+ }
+
+ /* scalefactors, Huffman decoding, requantization */
+
+ ngr = (header->flags & MAD_FLAG_LSF_EXT) ? 1 : 2;
+
+ for (gr = 0; gr < ngr; ++gr) {
+ struct granule *granule = &si->gr[gr];
+ unsigned char const *sfbwidth = 0;
+ mad_fixed_t xr[2][576];
+ unsigned int ch;
+ enum mad_error error;
+
+ for (ch = 0; ch < nch; ++ch) {
+ struct channel *channel = &granule->ch[ch];
+ unsigned int part2_length;
+
+ sfbwidth = sfbwidth_table[sfreqi].l;
+ if (channel->block_type == 2) {
+ sfbwidth = (channel->flags & mixed_block_flag) ?
+ sfbwidth_table[sfreqi].m : sfbwidth_table[sfreqi].s;
+ }
+
+ if (header->flags & MAD_FLAG_LSF_EXT) {
+ part2_length = III_scalefactors_lsf(ptr, channel,
+ ch == 0 ? 0 : &si->gr[1].ch[1],
+ header->mode_extension);
+ }
+ else {
+ part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
+ gr == 0 ? 0 : si->scfsi[ch]);
+ }
+
+ error = III_huffdecode(ptr, xr[ch], channel, sfbwidth, part2_length);
+ if (error)
+ return error;
+ }
+
+ /* joint stereo processing */
+
+ if (header->mode == MAD_MODE_JOINT_STEREO && header->mode_extension) {
+ error = III_stereo(xr, granule, header, sfbwidth);
+ if (error)
+ return error;
+ }
+
+ /* reordering, alias reduction, IMDCT, overlap-add, frequency inversion */
+
+ for (ch = 0; ch < nch; ++ch) {
+ struct channel const *channel = &granule->ch[ch];
+ mad_fixed_t (*sample)[32] = &frame->sbsample[ch][18 * gr];
+ unsigned int sb, l, i, sblimit;
+ mad_fixed_t output[36];
+
+ if (channel->block_type == 2) {
+ III_reorder(xr[ch], channel, sfbwidth_table[sfreqi].s);
+
+# if !defined(OPT_STRICT)
+ /*
+ * According to ISO/IEC 11172-3, "Alias reduction is not applied for
+ * granules with block_type == 2 (short block)." However, other
+ * sources suggest alias reduction should indeed be performed on the
+ * lower two subbands of mixed blocks. Most other implementations do
+ * this, so by default we will too.
+ */
+ if (channel->flags & mixed_block_flag)
+ III_aliasreduce(xr[ch], 36);
+# endif
+ }
+ else
+ III_aliasreduce(xr[ch], 576);
+
+ l = 0;
+
+ /* subbands 0-1 */
+
+ if (channel->block_type != 2 || (channel->flags & mixed_block_flag)) {
+ unsigned int block_type;
+
+ block_type = channel->block_type;
+ if (channel->flags & mixed_block_flag)
+ block_type = 0;
+
+ /* long blocks */
+ for (sb = 0; sb < 2; ++sb, l += 18) {
+ III_imdct_l(&xr[ch][l], output, block_type);
+ III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
+ }
+ }
+ else {
+ /* short blocks */
+ for (sb = 0; sb < 2; ++sb, l += 18) {
+ III_imdct_s(&xr[ch][l], output);
+ III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
+ }
+ }
+
+ III_freqinver(sample, 1);
+
+ /* (nonzero) subbands 2-31 */
+
+ i = 576;
+ while (i > 36 && xr[ch][i - 1] == 0)
+ --i;
+
+ sblimit = 32 - (576 - i) / 18;
+
+ if (channel->block_type != 2) {
+ /* long blocks */
+ for (sb = 2; sb < sblimit; ++sb, l += 18) {
+ III_imdct_l(&xr[ch][l], output, channel->block_type);
+ III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
+
+ if (sb & 1)
+ III_freqinver(sample, sb);
+ }
+ }
+ else {
+ /* short blocks */
+ for (sb = 2; sb < sblimit; ++sb, l += 18) {
+ III_imdct_s(&xr[ch][l], output);
+ III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
+
+ if (sb & 1)
+ III_freqinver(sample, sb);
+ }
+ }
+
+ /* remaining (zero) subbands */
+
+ for (sb = sblimit; sb < 32; ++sb) {
+ III_overlap_z((*frame->overlap)[ch][sb], sample, sb);
+
+ if (sb & 1)
+ III_freqinver(sample, sb);
+ }
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * NAME: layer->III()
+ * DESCRIPTION: decode a single Layer III frame
+ */
+int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
+{
+ struct mad_header *header = &frame->header;
+ unsigned int nch, priv_bitlen, next_md_begin = 0;
+ unsigned int si_len, data_bitlen, md_len;
+ unsigned int frame_space, frame_used, frame_free;
+ struct mad_bitptr ptr;
+ struct sideinfo si;
+ enum mad_error error;
+ int result = 0;
+
+ /* allocate Layer III dynamic structures */
+
+ if (stream->main_data == 0) {
+ stream->main_data = malloc(MAD_BUFFER_MDLEN);
+ if (stream->main_data == 0) {
+ stream->error = MAD_ERROR_NOMEM;
+ return -1;
+ }
+ }
+
+ if (frame->overlap == 0) {
+ frame->overlap = calloc(2 * 32 * 18, sizeof(mad_fixed_t));
+ if (frame->overlap == 0) {
+ stream->error = MAD_ERROR_NOMEM;
+ return -1;
+ }
+ }
+
+ nch = MAD_NCHANNELS(header);
+ si_len = (header->flags & MAD_FLAG_LSF_EXT) ?
+ (nch == 1 ? 9 : 17) : (nch == 1 ? 17 : 32);
+
+ /* check frame sanity */
+
+ if (stream->next_frame - mad_bit_nextbyte(&stream->ptr) <
+ (signed int) si_len) {
+ stream->error = MAD_ERROR_BADFRAMELEN;
+ stream->md_len = 0;
+ return -1;
+ }
+
+ /* check CRC word */
+
+ if (header->flags & MAD_FLAG_PROTECTION) {
+ header->crc_check =
+ mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check);
+
+ if (header->crc_check != header->crc_target &&
+ !(frame->options & MAD_OPTION_IGNORECRC)) {
+ stream->error = MAD_ERROR_BADCRC;
+ result = -1;
+ }
+ }
+
+ /* decode frame side information */
+
+ error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
+ &si, &data_bitlen, &priv_bitlen);
+ if (error && result == 0) {
+ stream->error = error;
+ result = -1;
+ }
+
+ header->flags |= priv_bitlen;
+ header->private_bits |= si.private_bits;
+
+ /* find main_data of next frame */
+
+ {
+ struct mad_bitptr peek;
+ unsigned long header;
+
+ mad_bit_init(&peek, stream->next_frame);
+
+ header = mad_bit_read(&peek, 32);
+ if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
+ if (!(header & 0x00010000L)) /* protection_bit */
+ mad_bit_skip(&peek, 16); /* crc_check */
+
+ next_md_begin =
+ mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
+ }
+
+ mad_bit_finish(&peek);
+ }
+
+ /* find main_data of this frame */
+
+ frame_space = stream->next_frame - mad_bit_nextbyte(&stream->ptr);
+
+ if (next_md_begin > si.main_data_begin + frame_space)
+ next_md_begin = 0;
+
+ md_len = si.main_data_begin + frame_space - next_md_begin;
+
+ frame_used = 0;
+
+ if (si.main_data_begin == 0) {
+ ptr = stream->ptr;
+ stream->md_len = 0;
+
+ frame_used = md_len;
+ }
+ else {
+ if (si.main_data_begin > stream->md_len) {
+ if (result == 0) {
+ stream->error = MAD_ERROR_BADDATAPTR;
+ result = -1;
+ }
+ }
+ else {
+ mad_bit_init(&ptr,
+ *stream->main_data + stream->md_len - si.main_data_begin);
+
+ if (md_len > si.main_data_begin) {
+ assert(stream->md_len + md_len -
+ si.main_data_begin <= MAD_BUFFER_MDLEN);
+
+ memcpy(*stream->main_data + stream->md_len,
+ mad_bit_nextbyte(&stream->ptr),
+ frame_used = md_len - si.main_data_begin);
+ stream->md_len += frame_used;
+ }
+ }
+ }
+
+ frame_free = frame_space - frame_used;
+
+ /* decode main_data */
+
+ if (result == 0) {
+ error = III_decode(&ptr, frame, &si, nch);
+ if (error) {
+ stream->error = error;
+ result = -1;
+ }
+ }
+
+ /* designate ancillary bits */
+
+ stream->anc_ptr = ptr;
+ stream->anc_bitlen = md_len * CHAR_BIT - data_bitlen;
+
+# if 0 && defined(DEBUG)
+ fprintf(stderr,
+ "main_data_begin:%u, md_len:%u, frame_free:%u, "
+ "data_bitlen:%u, anc_bitlen: %u\n",
+ si.main_data_begin, md_len, frame_free,
+ data_bitlen, stream->anc_bitlen);
+# endif
+
+ /* preload main_data buffer with up to 511 bytes for next frame(s) */
+
+ if (frame_free >= next_md_begin) {
+ memcpy(*stream->main_data,
+ stream->next_frame - next_md_begin, next_md_begin);
+ stream->md_len = next_md_begin;
+ }
+ else {
+ if (md_len < si.main_data_begin) {
+ unsigned int extra;
+
+ extra = si.main_data_begin - md_len;
+ if (extra + frame_free > next_md_begin)
+ extra = next_md_begin - frame_free;
+
+ if (extra < stream->md_len) {
+ memmove(*stream->main_data,
+ *stream->main_data + stream->md_len - extra, extra);
+ stream->md_len = extra;
+ }
+ }
+ else
+ stream->md_len = 0;
+
+ memcpy(*stream->main_data + stream->md_len,
+ stream->next_frame - frame_free, frame_free);
+ stream->md_len += frame_free;
+ }
+
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmad/layer3.h b/core/multimedia/opieplayer/libmad/layer3.h
new file mode 100644
index 0000000..1fd83e2
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer3.h
@@ -0,0 +1,30 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_LAYER3_H
+# define LIBMAD_LAYER3_H
+
+# include "stream.h"
+# include "frame.h"
+
+int mad_layer_III(struct mad_stream *, struct mad_frame *);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/libmad.pro b/core/multimedia/opieplayer/libmad/libmad.pro
new file mode 100644
index 0000000..e3f75b7
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmad.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = libmad_version.h fixed.h bit.h timer.h stream.h frame.h synth.h decoder.h \
+ layer12.h layer3.h huffman.h libmad_global.h mad.h libmadplugin.h libmadpluginimpl.h
+SOURCES = version.c fixed.c bit.c timer.c stream.c frame.c synth.c decoder.c \
+ layer12.c layer3.c huffman.c libmadplugin.cpp libmadpluginimpl.cpp
+TARGET = madplugin
+DESTDIR = ../../plugins/codecs
+INCLUDEPATH += $(QPEDIR)/include ..
+DEPENDPATH += ../$(QPEDIR)/include ..
+LIBS += -lqpe -lm
+VERSION = 1.0.0
diff --git a/core/multimedia/opieplayer/libmad/libmad_global.h b/core/multimedia/opieplayer/libmad/libmad_global.h
new file mode 100644
index 0000000..f2a2a71
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmad_global.h
@@ -0,0 +1,45 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_GLOBAL_H
+# define LIBMAD_GLOBAL_H
+
+/* conditional debugging */
+
+# if defined(DEBUG) && defined(NDEBUG)
+# error "cannot define both DEBUG and NDEBUG"
+# endif
+
+# if defined(DEBUG)
+# include <stdio.h>
+# endif
+
+/* conditional features */
+
+# if defined(OPT_SPEED) && defined(OPT_ACCURACY)
+# error "cannot optimize for both speed and accuracy"
+# endif
+
+# if defined(OPT_SPEED) && !defined(OPT_SSO)
+# define OPT_SSO 1
+# endif
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/libmad_version.h b/core/multimedia/opieplayer/libmad/libmad_version.h
new file mode 100644
index 0000000..f8ee1fa
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmad_version.h
@@ -0,0 +1,47 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_VERSION_H
+# define LIBMAD_VERSION_H
+
+# define MAD_VERSION_MAJOR 0
+# define MAD_VERSION_MINOR 13
+# define MAD_VERSION_PATCH 0
+# define MAD_VERSION_EXTRA " (beta)"
+
+# define MAD_VERSION_STRINGIZE(str) #str
+# define MAD_VERSION_STRING(num) MAD_VERSION_STRINGIZE(num)
+
+# define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
+ MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
+ MAD_VERSION_STRING(MAD_VERSION_PATCH) \
+ MAD_VERSION_EXTRA
+
+# define MAD_PUBLISHYEAR "2000-2001"
+# define MAD_AUTHOR "Robert Leslie"
+# define MAD_EMAIL "rob@mars.org"
+
+extern char const mad_version[];
+extern char const mad_copyright[];
+extern char const mad_author[];
+extern char const mad_build[];
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.cpp b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
new file mode 100644
index 0000000..b2b876f
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
@@ -0,0 +1,578 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <time.h>
+#include <locale.h>
+#include <math.h>
+#include <assert.h>
+#include <qapplication.h>
+
+//#define HAVE_MMAP
+
+#if defined(HAVE_MMAP)
+# include <sys/mman.h>
+#endif
+#include "libmadplugin.h"
+
+
+extern "C" {
+#include "mad.h"
+}
+
+
+#define MPEG_BUFFER_SIZE 65536
+//#define debugMsg(a) qDebug(a)
+#define debugMsg(a)
+
+
+class Input {
+public:
+ char const *path;
+ int fd;
+#if defined(HAVE_MMAP)
+ void *fdm;
+#endif
+ unsigned char *data;
+ unsigned long length;
+ int eof;
+};
+
+
+class Output {
+public:
+ mad_fixed_t attenuate;
+ struct filter *filters;
+ unsigned int channels_in;
+ unsigned int channels_out;
+ unsigned int speed_in;
+ unsigned int speed_out;
+ const char *path;
+};
+
+
+# if defined(HAVE_MMAP)
+static void *map_file(int fd, unsigned long *length)
+{
+ void *fdm;
+
+ *length += MAD_BUFFER_GUARD;
+
+ fdm = mmap(0, *length, PROT_READ, MAP_SHARED, fd, 0);
+ if (fdm == MAP_FAILED)
+ return 0;
+
+# if defined(HAVE_MADVISE)
+ madvise(fdm, *length, MADV_SEQUENTIAL);
+# endif
+
+ return fdm;
+}
+
+
+static int unmap_file(void *fdm, unsigned long length)
+{
+ if (munmap(fdm, length) == -1)
+ return -1;
+
+ return 0;
+}
+# endif
+
+
+static inline QString tr( const char *str ) {
+ // Apparently this is okay from a plugin as it runs in the process space of the owner of the plugin
+ return qApp->translate( "MediaPlayer", str, "libmad strings for mp3 file info" );
+}
+
+
+class LibMadPluginData {
+public:
+ Input input;
+ Output output;
+ int bad_last_frame;
+ struct mad_stream stream;
+ struct mad_frame frame;
+ struct mad_synth synth;
+ bool flush;
+};
+
+
+LibMadPlugin::LibMadPlugin() {
+ d = new LibMadPluginData;
+ d->input.fd = 0;
+#if defined(HAVE_MMAP)
+ d->input.fdm = 0;
+#endif
+ d->input.data = 0;
+ d->flush = TRUE;
+ info = tr( "No Song Open" );
+}
+
+
+LibMadPlugin::~LibMadPlugin() {
+ close();
+ delete d;
+}
+
+
+bool LibMadPlugin::isFileSupported( const QString& path ) {
+ debugMsg( "LibMadPlugin::isFileSupported" );
+
+ // Mpeg file extensions
+ // "mp2","mp3","m1v","m2v","m2s","mpg","vob","mpeg","ac3"
+ // Other media extensions
+ // "wav","mid","mod","s3m","ogg","avi","mov","sid"
+
+ char *ext = strrchr( path.latin1(), '.' );
+
+ // Test file extension
+ if ( ext ) {
+ if ( strncasecmp(ext, ".mp2", 4) == 0 )
+ return TRUE;
+ if ( strncasecmp(ext, ".mp3", 4) == 0 )
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+bool LibMadPlugin::open( const QString& path ) {
+ debugMsg( "LibMadPlugin::open" );
+
+ d->bad_last_frame = 0;
+ d->flush = TRUE;
+ info = QString( "" );
+
+ //qDebug( "Opening %s", path.latin1() );
+
+ d->input.path = path.latin1();
+ d->input.fd = ::open( d->input.path, O_RDONLY );
+ if (d->input.fd == -1) {
+ qDebug("error opening %s", d->input.path );
+ return FALSE;
+ }
+
+ printID3Tags();
+
+#if defined(HAVE_MMAP)
+ struct stat stat;
+ if (fstat(d->input.fd, &stat) == -1) {
+ qDebug("error calling fstat"); return FALSE;
+ }
+ if (S_ISREG(stat.st_mode) && stat.st_size > 0) {
+ d->input.length = stat.st_size;
+ d->input.fdm = map_file(d->input.fd, &d->input.length);
+ if (d->input.fdm == 0) {
+ qDebug("error mmapping file"); return FALSE;
+ }
+ d->input.data = (unsigned char *)d->input.fdm;
+ }
+#endif
+
+ if (d->input.data == 0) {
+ d->input.data = (unsigned char *)malloc(MPEG_BUFFER_SIZE);
+ if (d->input.data == 0) {
+ qDebug("error allocating input buffer");
+ return FALSE;
+ }
+ d->input.length = 0;
+ }
+
+ d->input.eof = 0;
+
+ mad_stream_init(&d->stream);
+ mad_frame_init(&d->frame);
+ mad_synth_init(&d->synth);
+
+ return TRUE;
+}
+
+
+bool LibMadPlugin::close() {
+ debugMsg( "LibMadPlugin::close" );
+
+ int result = TRUE;
+
+ mad_synth_finish(&d->synth);
+ mad_frame_finish(&d->frame);
+ mad_stream_finish(&d->stream);
+
+#if defined(HAVE_MMAP)
+ if (d->input.fdm) {
+ if (unmap_file(d->input.fdm, d->input.length) == -1) {
+ qDebug("error munmapping file");
+ result = FALSE;
+ }
+ d->input.fdm = 0;
+ d->input.data = 0;
+ }
+#endif
+
+ if (d->input.data) {
+ free(d->input.data);
+ d->input.data = 0;
+ }
+
+ if (::close(d->input.fd) == -1) {
+ qDebug("error closing file %s", d->input.path);
+ result = FALSE;
+ }
+
+ d->input.fd = 0;
+
+ return result;
+}
+
+
+bool LibMadPlugin::isOpen() {
+ debugMsg( "LibMadPlugin::isOpen" );
+ return ( d->input.fd != 0 );
+}
+
+
+int LibMadPlugin::audioStreams() {
+ debugMsg( "LibMadPlugin::audioStreams" );
+ return 1;
+}
+
+
+int LibMadPlugin::audioChannels( int ) {
+ debugMsg( "LibMadPlugin::audioChannels" );
+/*
+ long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
+ qDebug( "LibMadPlugin::audioChannels: %i", d->frame.header.mode > 0 ? 2 : 1 );
+ return d->frame.header.mode > 0 ? 2 : 1;
+*/
+ return 2;
+}
+
+
+int LibMadPlugin::audioFrequency( int ) {
+ debugMsg( "LibMadPlugin::audioFrequency" );
+ long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
+ qDebug( "LibMadPlugin::audioFrequency: %i", d->frame.header.samplerate );
+ return d->frame.header.samplerate;
+}
+
+
+int LibMadPlugin::audioSamples( int ) {
+ debugMsg( "LibMadPlugin::audioSamples" );
+/*
+ long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
+ mad_header_decode( (struct mad_header *)&d->frame.header, &d->stream );
+ qDebug( "LibMadPlugin::audioSamples: %i*%i", d->frame.header.duration.seconds, d->frame.header.samplerate );
+ return d->frame.header.duration.seconds * d->frame.header.samplerate;
+*/
+ return 10000000;
+}
+
+
+bool LibMadPlugin::audioSetSample( long, int ) {
+ debugMsg( "LibMadPlugin::audioSetSample" );
+ return FALSE;
+}
+
+
+long LibMadPlugin::audioGetSample( int ) {
+ debugMsg( "LibMadPlugin::audioGetSample" );
+ return 0;
+}
+
+/*
+bool LibMadPlugin::audioReadSamples( short *, int, long, int ) {
+ debugMsg( "LibMadPlugin::audioReadSamples" );
+ return FALSE;
+}
+
+
+bool LibMadPlugin::audioReReadSamples( short *, int, long, int ) {
+ debugMsg( "LibMadPlugin::audioReReadSamples" );
+ return FALSE;
+}
+*/
+
+bool LibMadPlugin::read() {
+ debugMsg( "LibMadPlugin::read" );
+ int len;
+
+ if (d->input.eof)
+ return FALSE;
+
+#if defined(HAVE_MMAP)
+ if (d->input.fdm) {
+ unsigned long skip = 0;
+
+ if (d->stream.next_frame) {
+ struct stat stat;
+
+ if (fstat(d->input.fd, &stat) == -1)
+ return FALSE;
+
+ if (stat.st_size + MAD_BUFFER_GUARD <= (signed)d->input.length)
+ return FALSE;
+
+ // file size changed; update memory map
+ skip = d->stream.next_frame - d->input.data;
+
+ if (unmap_file(d->input.fdm, d->input.length) == -1) {
+ d->input.fdm = 0;
+ d->input.data = 0;
+ return FALSE;
+ }
+
+ d->input.length = stat.st_size;
+
+ d->input.fdm = map_file(d->input.fd, &d->input.length);
+ if (d->input.fdm == 0) {
+ d->input.data = 0;
+ return FALSE;
+ }
+
+ d->input.data = (unsigned char *)d->input.fdm;
+ }
+
+ mad_stream_buffer(&d->stream, d->input.data + skip, d->input.length - skip);
+
+ } else
+#endif
+ {
+ if (d->stream.next_frame) {
+ memmove(d->input.data, d->stream.next_frame,
+ d->input.length = &d->input.data[d->input.length] - d->stream.next_frame);
+ }
+
+ do {
+ len = ::read(d->input.fd, d->input.data + d->input.length, MPEG_BUFFER_SIZE - d->input.length);
+ }
+ while (len == -1 && errno == EINTR);
+
+ if (len == -1) {
+ qDebug("error reading audio");
+ return FALSE;
+ }
+ else if (len == 0) {
+ d->input.eof = 1;
+
+ assert(MPEG_BUFFER_SIZE - d->input.length >= MAD_BUFFER_GUARD);
+
+ while (len < MAD_BUFFER_GUARD)
+ d->input.data[d->input.length + len++] = 0;
+ }
+
+ mad_stream_buffer(&d->stream, d->input.data, d->input.length += len);
+ }
+
+ return TRUE;
+}
+
+
+static mad_fixed_t left_err, right_err;
+static const int bits = 16;
+static const int shift = MAD_F_FRACBITS + 1 - bits;
+
+
+inline long audio_linear_dither( mad_fixed_t sample, mad_fixed_t& error )
+{
+ sample += error;
+ mad_fixed_t quantized = (sample >= MAD_F_ONE) ? MAD_F_ONE - 1 : ( (sample < -MAD_F_ONE) ? -MAD_F_ONE : sample );
+ quantized &= ~((1L << shift) - 1);
+ error = sample - quantized;
+ return quantized >> shift;
+}
+
+
+inline void audio_pcm( short *data, unsigned int nsamples, mad_fixed_t *left, mad_fixed_t *right )
+{
+ if ( right ) {
+ while (nsamples--) {
+ data[0] = audio_linear_dither( *left++, left_err );
+ data[1] = audio_linear_dither( *right++, right_err );
+ data += 2;
+ }
+ } else {
+ while (nsamples--) {
+ data[0] = data[1] = audio_linear_dither( *left++, left_err );
+ data += 2;
+ }
+ }
+}
+
+
+bool LibMadPlugin::decode( short *output, long samples, long& samplesMade ) {
+ debugMsg( "LibMadPlugin::decode" );
+
+ static int buffered = 0;
+ static mad_fixed_t buffer[2][65536 * 2];
+ int offset = buffered;
+ samplesMade = 0;
+
+ static int maxBuffered = 8000; // 65536;
+
+ if ( samples > maxBuffered )
+ samples = maxBuffered;
+
+ if ( d->flush ) {
+ buffered = 0;
+ offset = 0;
+ d->flush = FALSE;
+ }
+
+ while ( buffered < maxBuffered ) {
+
+ while (mad_frame_decode(&d->frame, &d->stream) == -1) {
+ if (!MAD_RECOVERABLE(d->stream.error)) {
+ debugMsg( "feed me" );
+ return FALSE; // Feed me
+ }
+ if ( d->stream.error == MAD_ERROR_BADCRC ) {
+ mad_frame_mute(&d->frame);
+ qDebug( "error decoding, bad crc" );
+ }
+ }
+
+ mad_synth_frame(&d->synth, &d->frame);
+ int decodedSamples = d->synth.pcm.length;
+ memcpy( &(buffer[0][offset]), d->synth.pcm.samples[0], decodedSamples * sizeof(mad_fixed_t) );
+ if ( d->synth.pcm.channels == 2 )
+ memcpy( &(buffer[1][offset]), d->synth.pcm.samples[1], decodedSamples * sizeof(mad_fixed_t) );
+ offset += decodedSamples;
+ buffered += decodedSamples;
+ }
+
+ audio_pcm( output, samples, buffer[0], (d->synth.pcm.channels == 2) ? buffer[1] : 0 );
+// audio_pcm( output, samples, buffer[1], buffer[0] );
+// audio_pcm( output, samples, buffer[0], buffer[1] );
+ samplesMade = samples;
+ memmove( buffer[0], &(buffer[0][samples]), (buffered - samples) * sizeof(mad_fixed_t) );
+ if ( d->synth.pcm.channels == 2 )
+ memmove( buffer[1], &(buffer[1][samples]), (buffered - samples) * sizeof(mad_fixed_t) );
+ buffered -= samples;
+
+ return TRUE;
+}
+
+/*
+bool LibMadPlugin::audioReadMonoSamples( short *, long, long&, int ) {
+ debugMsg( "LibMadPlugin::audioReadMonoSamples" );
+ return FALSE;
+}
+
+
+bool LibMadPlugin::audioReadStereoSamples( short *output, long samples, long& samplesMade, int ) {
+*/
+bool LibMadPlugin::audioReadSamples( short *output, int /*channels*/, long samples, long& samplesMade, int ) {
+ debugMsg( "LibMadPlugin::audioReadStereoSamples" );
+
+ static bool needInput = TRUE;
+
+ if ( samples == 0 )
+ return TRUE;
+
+ do {
+ if ( needInput )
+ if ( !read() ) {
+// if ( d->input.eof )
+// needInput = FALSE;
+// else
+ return TRUE;
+ }
+
+ needInput = FALSE;
+
+ if ( decode( output, samples, samplesMade ) )
+ return FALSE;
+ else
+ needInput = TRUE;
+ }
+ while ( ( samplesMade < samples ) && ( !d->input.eof ) );
+/*
+ static bool firstTimeThru = TRUE;
+
+ if ( firstTimeThru ) {
+ firstTimeThru = FALSE;
+ decode( output, samples, samplesMade );
+ return FALSE;
+ } else
+*/
+ return TRUE;
+}
+
+
+double LibMadPlugin::getTime() {
+ debugMsg( "LibMadPlugin::getTime" );
+ return 0.0;
+}
+
+
+void LibMadPlugin::printID3Tags() {
+ debugMsg( "LibMadPlugin::printID3Tags" );
+
+ char id3v1[128 + 1];
+
+ if ( ::lseek( d->input.fd, -128, SEEK_END ) == -1 ) {
+ qDebug( "error seeking to id3 tags" );
+ return;
+ }
+
+ if ( ::read( d->input.fd, id3v1, 128 ) != 128 ) {
+ qDebug( "error reading in id3 tags" );
+ return;
+ }
+
+ if ( ::strncmp( (const char *)id3v1, "TAG", 3 ) != 0 ) {
+ debugMsg( "sorry, no id3 tags" );
+ } else {
+ int len[5] = { 30, 30, 30, 4, 30 };
+ QString label[5] = { tr( "Title" ), tr( "Artist" ), tr( "Album" ), tr( "Year" ), tr( "Comment" ) };
+ char *ptr = id3v1 + 3, *ptr2 = ptr + len[0];
+ qDebug( "ID3 tags in file:" );
+ info = "";
+ for ( int i = 0; i < 5; ptr += len[i], i++, ptr2 += len[i] ) {
+ char push = *ptr2;
+ *ptr2 = '\0';
+ char *ptr3 = ptr2;
+ while ( ptr3-1 >= ptr && isspace(ptr3[-1]) ) ptr3--;
+ char push2 = *ptr3; *ptr3 = '\0';
+ if ( strcmp( ptr, "" ) )
+ info += ( i != 0 ? ", " : "" ) + label[i] + ": " + ptr;
+ //qDebug( info.latin1() );
+ *ptr3 = push2;
+ *ptr2 = push;
+ }
+ if (id3v1[126] == 0 && id3v1[127] != 0)
+ info += tr( ", Track: " ) + id3v1[127];
+ }
+
+ if ( ::lseek(d->input.fd, 0, SEEK_SET) == -1 ) {
+ qDebug( "error seeking back to beginning" );
+ return;
+ }
+}
+
diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.h b/core/multimedia/opieplayer/libmad/libmadplugin.h
new file mode 100644
index 0000000..88647ae
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadplugin.h
@@ -0,0 +1,101 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIBMAD_PLUGIN_H
+#define LIBMAD_PLUGIN_H
+
+
+#include <qstring.h>
+#include "mediaplayerplugininterface.h"
+
+
+class LibMadPluginData;
+
+
+class LibMadPlugin : public MediaPlayerDecoder {
+
+public:
+ LibMadPlugin();
+ ~LibMadPlugin();
+
+ const char *pluginName() { return "LibMadPlugin"; }
+ const char *pluginComment() { return "This is the libmad library that has been wrapped as a plugin"; }
+ double pluginVersion() { return 1.0; }
+
+ bool isFileSupported( const QString& );
+ bool open( const QString& );
+ bool close();
+ bool isOpen();
+ const QString &fileInfo() { return info; }
+
+ // If decoder doesn't support audio then return 0 here
+ int audioStreams();
+ int audioChannels( int stream );
+ int audioFrequency( int stream );
+ int audioSamples( int stream );
+ bool audioSetSample( long sample, int stream );
+ long audioGetSample( int stream );
+// bool audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream );
+// bool audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream );
+ bool audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream );
+// bool audioReadSamples( short *output, int channel, long samples, int stream );
+// bool audioReReadSamples( short *output, int channel, long samples, int stream );
+
+
+ bool read();
+ bool decode( short *output, long samples, long& samplesRead );
+ void printID3Tags();
+
+
+ // If decoder doesn't support video then return 0 here
+ int videoStreams() { return 0; }
+ int videoWidth( int ) { return 0; }
+ int videoHeight( int ) { return 0; }
+ double videoFrameRate( int ) { return 0.0; }
+ int videoFrames( int ) { return 0; }
+ bool videoSetFrame( long, int ) { return FALSE; }
+ long videoGetFrame( int ) { return 0; }
+ bool videoReadFrame( unsigned char **, int, int, int, int, ColorFormat, int ) { return FALSE; }
+ bool videoReadScaledFrame( unsigned char **, int, int, int, int, int, int, ColorFormat, int ) { return FALSE; }
+ bool videoReadYUVFrame( char *, char *, char *, int, int, int, int, int ) { return FALSE; }
+
+ // Profiling
+ double getTime();
+
+ // Ignore if these aren't supported
+ bool setSMP( int ) { return FALSE; }
+ bool setMMX( bool ) { return FALSE; }
+
+ // Capabilities
+ bool supportsAudio() { return TRUE; }
+ bool supportsVideo() { return FALSE; }
+ bool supportsYUV() { return FALSE; }
+ bool supportsMMX() { return TRUE; }
+ bool supportsSMP() { return FALSE; }
+ bool supportsStereo() { return TRUE; }
+ bool supportsScaling() { return FALSE; }
+
+private:
+ LibMadPluginData *d;
+ QString info;
+
+};
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp b/core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp
new file mode 100644
index 0000000..028c658
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "libmadplugin.h"
+#include "libmadpluginimpl.h"
+
+
+LibMadPluginImpl::LibMadPluginImpl()
+ : libmadplugin(0), ref(0)
+{
+}
+
+
+LibMadPluginImpl::~LibMadPluginImpl()
+{
+ if ( libmadplugin )
+ delete libmadplugin;
+}
+
+
+MediaPlayerDecoder *LibMadPluginImpl::decoder()
+{
+ if ( !libmadplugin )
+ libmadplugin = new LibMadPlugin;
+ return libmadplugin;
+}
+
+
+MediaPlayerEncoder *LibMadPluginImpl::encoder()
+{
+ return NULL;
+}
+
+
+#ifndef QT_NO_COMPONENT
+
+
+QRESULT LibMadPluginImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( ( uuid == IID_QUnknown ) || ( uuid == IID_MediaPlayerPlugin ) )
+ *iface = this, (*iface)->addRef();
+ return QS_OK;
+}
+
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( LibMadPluginImpl )
+}
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libmad/libmadpluginimpl.h b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h
new file mode 100644
index 0000000..a26b421
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIBMAD_PLUGIN_IMPL_H
+#define LIBMAD_PLUGIN_IMPL_H
+
+
+#include "../mediaplayerplugininterface.h"
+
+
+class LibMadPlugin;
+
+
+class LibMadPluginImpl : public MediaPlayerPluginInterface
+{
+public:
+ LibMadPluginImpl();
+ virtual ~LibMadPluginImpl();
+
+#ifndef QT_NO_COMPONENT
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+#endif
+
+ virtual MediaPlayerDecoder *decoder();
+ virtual MediaPlayerEncoder *encoder();
+
+private:
+ LibMadPlugin *libmadplugin;
+ ulong ref;
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libmad/mad.h b/core/multimedia/opieplayer/libmad/mad.h
new file mode 100644
index 0000000..9db9da3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/mad.h
@@ -0,0 +1,830 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * If you would like to negotiate alternate licensing terms, you may do
+ * so by contacting the author: Robert Leslie <rob@mars.org>
+ */
+
+# define SIZEOF_INT 4
+# define SIZEOF_LONG 4
+# define SIZEOF_LONG_LONG 8
+
+/* Id: version.h,v 1.16 2001/04/05 04:57:11 rob Exp */
+
+# ifndef LIBMAD_VERSION_H
+# define LIBMAD_VERSION_H
+
+# define MAD_VERSION_MAJOR 0
+# define MAD_VERSION_MINOR 13
+# define MAD_VERSION_PATCH 0
+# define MAD_VERSION_EXTRA " (beta)"
+
+# define MAD_VERSION_STRINGIZE(str) #str
+# define MAD_VERSION_STRING(num) MAD_VERSION_STRINGIZE(num)
+
+# define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
+ MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
+ MAD_VERSION_STRING(MAD_VERSION_PATCH) \
+ MAD_VERSION_EXTRA
+
+# define MAD_PUBLISHYEAR "2000-2001"
+# define MAD_AUTHOR "Robert Leslie"
+# define MAD_EMAIL "rob@mars.org"
+
+extern char const mad_version[];
+extern char const mad_copyright[];
+extern char const mad_author[];
+extern char const mad_build[];
+
+# endif
+
+/* Id: fixed.h,v 1.23 2001/04/05 04:57:11 rob Exp */
+
+# ifndef LIBMAD_FIXED_H
+# define LIBMAD_FIXED_H
+
+# if SIZEOF_INT >= 4
+typedef signed int mad_fixed_t;
+
+typedef signed int mad_fixed64hi_t;
+typedef unsigned int mad_fixed64lo_t;
+# else
+typedef signed long mad_fixed_t;
+
+typedef signed long mad_fixed64hi_t;
+typedef unsigned long mad_fixed64lo_t;
+# endif
+
+/*
+ * Fixed-point format: 0xABBBBBBB
+ * A == whole part (sign + 3 bits)
+ * B == fractional part (28 bits)
+ *
+ * Values are signed two's complement, so the effective range is:
+ * 0x80000000 to 0x7fffffff
+ * -8.0 to +7.9999999962747097015380859375
+ *
+ * The smallest representable value is:
+ * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
+ *
+ * 28 bits of fractional accuracy represent about
+ * 8.6 digits of decimal accuracy.
+ *
+ * Fixed-point numbers can be added or subtracted as normal
+ * integers, but multiplication requires shifting the 64-bit result
+ * from 56 fractional bits back to 28 (and rounding.)
+ *
+ * Changing the definition of MAD_F_FRACBITS is only partially
+ * supported, and must be done with care.
+ */
+
+# define MAD_F_FRACBITS 28
+
+# if MAD_F_FRACBITS == 28
+# define MAD_F(x) ((mad_fixed_t) (x##L))
+# else
+# if MAD_F_FRACBITS < 28
+# warning "MAD_F_FRACBITS < 28"
+# define MAD_F(x) ((mad_fixed_t) \
+ (((x##L) + \
+ (1L << (28 - MAD_F_FRACBITS - 1))) >> \
+ (28 - MAD_F_FRACBITS)))
+# elif MAD_F_FRACBITS > 28
+# error "MAD_F_FRACBITS > 28 not currently supported"
+# define MAD_F(x) ((mad_fixed_t) \
+ ((x##L) << (MAD_F_FRACBITS - 28)))
+# endif
+# endif
+
+# define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
+# define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
+
+# define MAD_F_ONE MAD_F(0x10000000)
+
+# define mad_f_tofixed(x) ((mad_fixed_t) \
+ ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
+# define mad_f_todouble(x) ((double) \
+ ((x) / (double) (1L << MAD_F_FRACBITS)))
+
+# define mad_f_intpart(x) ((x) >> MAD_F_FRACBITS)
+# define mad_f_fracpart(x) ((x) & ((1L << MAD_F_FRACBITS) - 1))
+ /* (x should be positive) */
+
+# define mad_f_fromint(x) ((x) << MAD_F_FRACBITS)
+
+# define mad_f_add(x, y) ((x) + (y))
+# define mad_f_sub(x, y) ((x) - (y))
+
+# if defined(FPM_64BIT)
+
+/*
+ * This version should be the most accurate if 64-bit (long long) types are
+ * supported by the compiler, although it may not be the most efficient.
+ */
+# if defined(OPT_ACCURACY)
+# define mad_f_mul(x, y) \
+ ((mad_fixed_t) \
+ ((((signed long long) (x) * (y)) + \
+ (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
+# else
+# define mad_f_mul(x, y) \
+ ((mad_fixed_t) (((signed long long) (x) * (y)) >> MAD_F_SCALEBITS))
+# endif
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- Intel --------------------------------------------------------------- */
+
+# elif defined(FPM_INTEL)
+
+/*
+ * This Intel version is fast and accurate; the disposition of the least
+ * significant bit depends on OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("imull %3" \
+ : "=a" (lo), "=d" (hi) \
+ : "%a" (x), "rm" (y) \
+ : "cc")
+
+# if defined(OPT_ACCURACY)
+/*
+ * This gives best accuracy but is not very fast.
+ */
+# define MAD_F_MLA(hi, lo, x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ MAD_F_MLX(__hi, __lo, (x), (y)); \
+ asm ("addl %2,%0\n\t" \
+ "adcl %3,%1" \
+ : "=rm" (lo), "=rm" (hi) \
+ : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi) \
+ : "cc"); \
+ })
+# endif /* OPT_ACCURACY */
+
+# if defined(OPT_ACCURACY)
+/*
+ * Surprisingly, this is faster than SHRD followed by ADC.
+ */
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed64hi_t __hi_; \
+ mad_fixed64lo_t __lo_; \
+ mad_fixed_t __result; \
+ asm ("addl %4,%2\n\t" \
+ "adcl %5,%3" \
+ : "=rm" (__lo_), "=rm" (__hi_) \
+ : "0" (lo), "1" (hi), \
+ "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0) \
+ : "cc"); \
+ asm ("shrdl %3,%2,%1" \
+ : "=rm" (__result) \
+ : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+# else
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ asm ("shrdl %3,%2,%1" \
+ : "=rm" (__result) \
+ : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+# endif /* OPT_ACCURACY */
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- ARM ----------------------------------------------------------------- */
+
+# elif defined(FPM_ARM)
+
+/*
+ * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
+ * least significant bit is properly rounded at no CPU cycle cost!
+ */
+# if 1
+/*
+ * There's a bug somewhere, possibly in the compiler, that sometimes makes
+ * this necessary instead of the default implementation via MAD_F_MLX and
+ * mad_f_scale64. It may be related to the use (or lack) of
+ * -finline-functions and/or -fstrength-reduce.
+ *
+ * This is also apparently faster than MAD_F_MLX/mad_f_scale64.
+ */
+# define mad_f_mul(x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ mad_fixed_t __result; \
+ asm ("smull %0, %1, %3, %4\n\t" \
+ "movs %0, %0, lsr %5\n\t" \
+ "adc %2, %0, %1, lsl %6" \
+ : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
+ : "%r" (x), "r" (y), \
+ "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+# endif
+
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("smull %0, %1, %2, %3" \
+ : "=&r" (lo), "=&r" (hi) \
+ : "%r" (x), "r" (y))
+
+# define MAD_F_MLA(hi, lo, x, y) \
+ asm ("smlal %0, %1, %2, %3" \
+ : "+r" (lo), "+r" (hi) \
+ : "%r" (x), "r" (y))
+
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ asm ("movs %0, %1, lsr %3\n\t" \
+ "adc %0, %0, %2, lsl %4" \
+ : "=r" (__result) \
+ : "r" (lo), "r" (hi), \
+ "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
+ : "cc"); \
+ __result; \
+ })
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- MIPS ---------------------------------------------------------------- */
+
+# elif defined(FPM_MIPS)
+
+/*
+ * This MIPS version is fast and accurate; the disposition of the least
+ * significant bit depends on OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("mult %2,%3" \
+ : "=l" (lo), "=h" (hi) \
+ : "%r" (x), "r" (y))
+
+# if defined(HAVE_MADD_ASM)
+# define MAD_F_MLA(hi, lo, x, y) \
+ asm ("madd %2,%3" \
+ : "+l" (lo), "+h" (hi) \
+ : "%r" (x), "r" (y))
+# elif defined(HAVE_MADD16_ASM)
+/*
+ * This loses significant accuracy due to the 16-bit integer limit in the
+ * multiply/accumulate instruction.
+ */
+# define MAD_F_ML0(hi, lo, x, y) \
+ asm ("mult %2,%3" \
+ : "=l" (lo), "=h" (hi) \
+ : "%r" ((x) >> 12), "r" ((y) >> 16))
+# define MAD_F_MLA(hi, lo, x, y) \
+ asm ("madd16 %2,%3" \
+ : "+l" (lo), "+h" (hi) \
+ : "%r" ((x) >> 12), "r" ((y) >> 16))
+# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
+# endif
+
+# if defined(OPT_SPEED)
+# define mad_f_scale64(hi, lo) \
+ ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+# endif
+
+/* --- SPARC --------------------------------------------------------------- */
+
+# elif defined(FPM_SPARC)
+
+/*
+ * This SPARC V8 version is fast and accurate; the disposition of the least
+ * significant bit depends on OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("smul %2, %3, %0\n\t" \
+ "rd %%y, %1" \
+ : "=r" (lo), "=r" (hi) \
+ : "%r" (x), "rI" (y))
+
+/* --- PowerPC ------------------------------------------------------------- */
+
+# elif defined(FPM_PPC)
+
+/*
+ * This PowerPC version is tuned for the 4xx embedded processors. It is
+ * effectively a tuned version of FPM_64BIT. It is a little faster and just
+ * as accurate. The disposition of the least significant bit depends on
+ * OPT_ACCURACY via mad_f_scale64().
+ */
+# define MAD_F_MLX(hi, lo, x, y) \
+ asm ("mulhw %1, %2, %3\n\t" \
+ "mullw %0, %2, %3" \
+ : "=&r" (lo), "=&r" (hi) \
+ : "%r" (x), "r" (y))
+
+# define MAD_F_MLA(hi, lo, x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ MAD_F_MLX(__hi, __lo, (x), (y)); \
+ asm ("addc %0, %2, %3\n\t" \
+ "adde %1, %4, %5" \
+ : "=r" (lo), "=r" (hi) \
+ : "%r" (__lo), "0" (lo), "%r" (__hi), "1" (hi)); \
+ })
+
+# if defined(OPT_ACCURACY)
+/*
+ * This is accurate and ~2 - 2.5 times slower than the unrounded version.
+ *
+ * The __volatile__ improves the generated code by another 5% (fewer spills
+ * to memory); eventually they should be removed.
+ */
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ mad_fixed64hi_t __hi_; \
+ mad_fixed64lo_t __lo_; \
+ asm __volatile__ ("addc %0, %2, %4\n\t" \
+ "addze %1, %3" \
+ : "=r" (__lo_), "=r" (__hi_) \
+ : "r" (lo), "r" (hi), "r" (1 << (MAD_F_SCALEBITS - 1))); \
+ asm __volatile__ ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
+ "rlwimi %0, %1,32-%3,%3,31" \
+ : "=&r" (__result) \
+ : "r" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)); \
+ __result; \
+ })
+# else
+# define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
+ asm ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
+ "rlwimi %0, %1,32-%3,%3,31" \
+ : "=r" (__result) \
+ : "r" (lo), "r" (hi), "I" (MAD_F_SCALEBITS)); \
+ __result; \
+ })
+# endif /* OPT_ACCURACY */
+
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+
+/* --- Default ------------------------------------------------------------- */
+
+# elif defined(FPM_DEFAULT)
+
+/*
+ * This version is the most portable but it loses significant accuracy.
+ * Furthermore, accuracy is biased against the second argument, so care
+ * should be taken when ordering operands.
+ *
+ * The scale factors are constant as this is not used with SSO.
+ *
+ * Pre-rounding is required to stay within the limits of compliance.
+ */
+# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
+ (((y) + (1L << 15)) >> 16))
+
+/* ------------------------------------------------------------------------- */
+
+# else
+# error "no FPM selected"
+# endif
+
+/* default implementations */
+
+# if !defined(mad_f_mul)
+# define mad_f_mul(x, y) \
+ ({ mad_fixed64hi_t __hi; \
+ mad_fixed64lo_t __lo; \
+ MAD_F_MLX(__hi, __lo, (x), (y)); \
+ mad_f_scale64(__hi, __lo); \
+ })
+# endif
+
+# if !defined(MAD_F_MLA)
+# define MAD_F_ML0(hi, lo, x, y) ((lo) = mad_f_mul((x), (y)))
+# define MAD_F_MLA(hi, lo, x, y) ((lo) += mad_f_mul((x), (y)))
+# define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
+# endif
+
+# if !defined(MAD_F_ML0)
+# define MAD_F_ML0(hi, lo, x, y) MAD_F_MLX((hi), (lo), (x), (y))
+# endif
+
+# if !defined(MAD_F_MLZ)
+# define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
+# endif
+
+# if !defined(mad_f_scale64)
+# if defined(OPT_ACCURACY)
+# define mad_f_scale64(hi, lo) \
+ ((((mad_fixed_t) \
+ (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
+ ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
+# else
+# define mad_f_scale64(hi, lo) \
+ ((mad_fixed_t) \
+ (((hi) << (32 - MAD_F_SCALEBITS)) | \
+ ((lo) >> MAD_F_SCALEBITS)))
+# endif
+# define MAD_F_SCALEBITS MAD_F_FRACBITS
+# endif
+
+/* miscellaneous C routines */
+
+mad_fixed_t mad_f_abs(mad_fixed_t);
+
+# endif
+
+/* Id: bit.h,v 1.7 2001/04/05 04:57:11 rob Exp */
+
+# ifndef LIBMAD_BIT_H
+# define LIBMAD_BIT_H
+
+struct mad_bitptr {
+ unsigned char const *byte;
+ unsigned short cache;
+ unsigned short left;
+};
+
+void mad_bit_init(struct mad_bitptr *, unsigned char const *);
+
+# define mad_bit_finish(bitptr) /* nothing */
+
+unsigned int mad_bit_length(struct mad_bitptr const *,
+ struct mad_bitptr const *);
+
+# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
+unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
+
+void mad_bit_skip(struct mad_bitptr *, unsigned int);
+unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
+void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
+
+unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
+
+# endif
+
+/* Id: timer.h,v 1.10 2001/04/05 04:57:11 rob Exp */
+
+# ifndef LIBMAD_TIMER_H
+# define LIBMAD_TIMER_H
+
+typedef struct {
+ signed long seconds; /* whole seconds */
+ unsigned long fraction; /* 1/MAD_TIMER_RESOLUTION seconds */
+} mad_timer_t;
+
+extern mad_timer_t const mad_timer_zero;
+
+# define MAD_TIMER_RESOLUTION 352800000UL
+
+enum mad_units {
+ MAD_UNITS_HOURS = -2,
+ MAD_UNITS_MINUTES = -1,
+ MAD_UNITS_SECONDS = 0,
+
+ /* metric units */
+
+ MAD_UNITS_DECISECONDS = 10,
+ MAD_UNITS_CENTISECONDS = 100,
+ MAD_UNITS_MILLISECONDS = 1000,
+
+ /* audio sample units */
+
+ MAD_UNITS_8000_HZ = 8000,
+ MAD_UNITS_11025_HZ = 11025,
+ MAD_UNITS_12000_HZ = 12000,
+
+ MAD_UNITS_16000_HZ = 16000,
+ MAD_UNITS_22050_HZ = 22050,
+ MAD_UNITS_24000_HZ = 24000,
+
+ MAD_UNITS_32000_HZ = 32000,
+ MAD_UNITS_44100_HZ = 44100,
+ MAD_UNITS_48000_HZ = 48000,
+
+ /* video frame/field units */
+
+ MAD_UNITS_24_FPS = 24,
+ MAD_UNITS_25_FPS = 25,
+ MAD_UNITS_30_FPS = 30,
+ MAD_UNITS_48_FPS = 48,
+ MAD_UNITS_50_FPS = 50,
+ MAD_UNITS_60_FPS = 60,
+
+ /* CD audio frames */
+
+ MAD_UNITS_75_FPS = 75,
+
+ /* video drop-frame units */
+
+ MAD_UNITS_23_976_FPS = -24,
+ MAD_UNITS_24_975_FPS = -25,
+ MAD_UNITS_29_97_FPS = -30,
+ MAD_UNITS_47_952_FPS = -48,
+ MAD_UNITS_49_95_FPS = -50,
+ MAD_UNITS_59_94_FPS = -60
+};
+
+# define mad_timer_reset(timer) (*(timer) = mad_timer_zero)
+
+int mad_timer_compare(mad_timer_t, mad_timer_t);
+
+# define mad_timer_sign(timer) mad_timer_compare((timer), mad_timer_zero)
+
+void mad_timer_negate(mad_timer_t *);
+mad_timer_t mad_timer_abs(mad_timer_t);
+
+void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
+void mad_timer_add(mad_timer_t *, mad_timer_t);
+void mad_timer_multiply(mad_timer_t *, signed long);
+
+signed long mad_timer_count(mad_timer_t, enum mad_units);
+unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
+void mad_timer_string(mad_timer_t, char *, char const *,
+ enum mad_units, enum mad_units, unsigned long);
+
+# endif
+
+/* Id: stream.h,v 1.12 2001/04/10 05:18:21 rob Exp */
+
+# ifndef LIBMAD_STREAM_H
+# define LIBMAD_STREAM_H
+
+# define MAD_BUFFER_GUARD 8
+# define MAD_BUFFER_MDLEN (511 + 2048 + MAD_BUFFER_GUARD)
+
+enum mad_error {
+ MAD_ERROR_BUFLEN = 0x0001, /* input buffer too small (or EOF) */
+ MAD_ERROR_BUFPTR = 0x0002, /* invalid (null) buffer pointer */
+
+ MAD_ERROR_NOMEM = 0x0031, /* not enough memory */
+
+ MAD_ERROR_LOSTSYNC = 0x0101, /* lost synchronization */
+ MAD_ERROR_BADLAYER = 0x0102, /* reserved header layer value */
+ MAD_ERROR_BADBITRATE = 0x0103, /* forbidden bitrate value */
+ MAD_ERROR_BADSAMPLERATE = 0x0104, /* reserved sample frequency value */
+ MAD_ERROR_BADEMPHASIS = 0x0105, /* reserved emphasis value */
+
+ MAD_ERROR_BADCRC = 0x0201, /* CRC check failed */
+ MAD_ERROR_BADBITALLOC = 0x0211, /* forbidden bit allocation value */
+ MAD_ERROR_BADSCALEFACTOR = 0x0221, /* bad scalefactor index */
+ MAD_ERROR_BADFRAMELEN = 0x0231, /* bad frame length */
+ MAD_ERROR_BADBIGVALUES = 0x0232, /* bad big_values count */
+ MAD_ERROR_BADBLOCKTYPE = 0x0233, /* reserved block_type */
+ MAD_ERROR_BADSCFSI = 0x0234, /* bad scalefactor selection info */
+ MAD_ERROR_BADDATAPTR = 0x0235, /* bad main_data_begin pointer */
+ MAD_ERROR_BADPART3LEN = 0x0236, /* bad audio data length */
+ MAD_ERROR_BADHUFFTABLE = 0x0237, /* bad Huffman table select */
+ MAD_ERROR_BADHUFFDATA = 0x0238, /* Huffman data overrun */
+ MAD_ERROR_BADSTEREO = 0x0239 /* incompatible block_type for JS */
+};
+
+# define MAD_RECOVERABLE(error) ((error) & 0xff00)
+
+struct mad_stream {
+ unsigned char const *buffer; /* input bitstream buffer */
+ unsigned char const *bufend; /* end of buffer */
+ unsigned long skiplen; /* bytes to skip before next frame */
+
+ int sync; /* stream sync found */
+ unsigned long freerate; /* free bitrate (fixed) */
+
+ unsigned char const *this_frame; /* start of current frame */
+ unsigned char const *next_frame; /* start of next frame */
+ struct mad_bitptr ptr; /* current processing bit pointer */
+
+ struct mad_bitptr anc_ptr; /* ancillary bits pointer */
+ unsigned int anc_bitlen; /* number of ancillary bits */
+
+ unsigned char (*main_data)[MAD_BUFFER_MDLEN];
+ /* Layer III main_data() */
+ unsigned int md_len; /* bytes in main_data */
+
+ int options; /* decoding options (see below) */
+ enum mad_error error; /* error code (see above) */
+};
+
+enum {
+ MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */
+ MAD_OPTION_HALFSAMPLERATE = 0x0002, /* generate PCM at 1/2 sample rate */
+# if 0 /* not yet implemented */
+ MAD_OPTION_LEFTCHANNEL = 0x0010, /* decode left channel only */
+ MAD_OPTION_RIGHTCHANNEL = 0x0020, /* decode right channel only */
+ MAD_OPTION_SINGLECHANNEL = 0x0030, /* combine channels */
+# endif
+};
+
+void mad_stream_init(struct mad_stream *);
+void mad_stream_finish(struct mad_stream *);
+
+# define mad_stream_options(stream, opts) ((stream)->options = (opts))
+
+void mad_stream_buffer(struct mad_stream *,
+ unsigned char const *, unsigned long);
+void mad_stream_skip(struct mad_stream *, unsigned long);
+
+int mad_stream_sync(struct mad_stream *);
+
+# endif
+
+/* Id: frame.h,v 1.13 2001/04/05 04:57:11 rob Exp */
+
+# ifndef LIBMAD_FRAME_H
+# define LIBMAD_FRAME_H
+
+enum mad_layer {
+ MAD_LAYER_I = 1, /* Layer I */
+ MAD_LAYER_II = 2, /* Layer II */
+ MAD_LAYER_III = 3 /* Layer III */
+};
+
+enum mad_mode {
+ MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
+ MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
+ MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
+ MAD_MODE_STEREO = 3 /* normal LR stereo */
+};
+
+enum mad_emphasis {
+ MAD_EMPHASIS_NONE = 0, /* no emphasis */
+ MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
+ MAD_EMPHASIS_CCITT_J_17 = 3 /* CCITT J.17 emphasis */
+};
+
+struct mad_frame {
+ struct mad_header {
+ enum mad_layer layer; /* audio layer (1, 2, or 3) */
+ enum mad_mode mode; /* channel mode (see above) */
+ int mode_extension; /* additional mode info */
+ enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
+
+ unsigned long bitrate; /* stream bitrate (bps) */
+ unsigned int samplerate; /* sampling frequency (Hz) */
+
+ unsigned short crc_check; /* frame CRC accumulator */
+ unsigned short crc_target; /* final target CRC checksum */
+
+ int flags; /* flags (see below) */
+ int private_bits; /* private bits (see below) */
+
+ mad_timer_t duration; /* audio playing time of frame */
+ } header;
+
+ int options; /* decoding options (from stream) */
+
+ mad_fixed_t sbsample[2][36][32]; /* synthesis subband filter samples */
+ mad_fixed_t (*overlap)[2][32][18]; /* Layer III block overlap data */
+};
+
+# define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
+# define MAD_NSBSAMPLES(header) \
+ ((header)->layer == MAD_LAYER_I ? 12 : \
+ (((header)->layer == MAD_LAYER_III && \
+ ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
+
+enum {
+ MAD_FLAG_NPRIVATE_III = 0x0007, /* number of Layer III private bits */
+ MAD_FLAG_INCOMPLETE = 0x0008, /* header but not data is decoded */
+
+ MAD_FLAG_PROTECTION = 0x0010, /* frame has CRC protection */
+ MAD_FLAG_COPYRIGHT = 0x0020, /* frame is copyright */
+ MAD_FLAG_ORIGINAL = 0x0040, /* frame is original (else copy) */
+ MAD_FLAG_PADDING = 0x0080, /* frame has additional slot */
+
+ MAD_FLAG_I_STEREO = 0x0100, /* uses intensity joint stereo */
+ MAD_FLAG_MS_STEREO = 0x0200, /* uses middle/side joint stereo */
+ MAD_FLAG_FREEFORMAT = 0x0400, /* uses free format bitrate */
+
+ MAD_FLAG_LSF_EXT = 0x1000, /* lower sampling freq. extension */
+ MAD_FLAG_MC_EXT = 0x2000, /* multichannel audio extension */
+ MAD_FLAG_MPEG_2_5_EXT = 0x4000 /* MPEG 2.5 (unofficial) extension */
+};
+
+enum {
+ MAD_PRIVATE_HEADER = 0x0100, /* header private bit */
+ MAD_PRIVATE_III = 0x001f /* Layer III private bits (up to 5) */
+};
+
+void mad_header_init(struct mad_header *);
+
+# define mad_header_finish(header) /* nothing */
+
+int mad_header_decode(struct mad_header *, struct mad_stream *);
+
+void mad_frame_init(struct mad_frame *);
+void mad_frame_finish(struct mad_frame *);
+
+int mad_frame_decode(struct mad_frame *, struct mad_stream *);
+
+void mad_frame_mute(struct mad_frame *);
+
+# endif
+
+/* Id: synth.h,v 1.8 2001/04/05 04:57:11 rob Exp */
+
+# ifndef LIBMAD_SYNTH_H
+# define LIBMAD_SYNTH_H
+
+struct mad_synth {
+ mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
+ /* [ch][eo][peo][s][v] */
+
+ unsigned int phase; /* current processing phase */
+
+ struct mad_pcm {
+ unsigned int samplerate; /* sampling frequency (Hz) */
+ unsigned short channels; /* number of channels */
+ unsigned short length; /* number of samples per channel */
+ mad_fixed_t samples[2][1152]; /* PCM output samples */
+ } pcm;
+};
+
+void mad_synth_init(struct mad_synth *);
+
+# define mad_synth_finish(synth) /* nothing */
+
+void mad_synth_mute(struct mad_synth *);
+
+void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
+
+# endif
+
+/* Id: decoder.h,v 1.9 2001/04/05 04:57:11 rob Exp */
+
+# ifndef LIBMAD_DECODER_H
+# define LIBMAD_DECODER_H
+
+enum mad_decoder_mode {
+ MAD_DECODER_MODE_SYNC = 0,
+ MAD_DECODER_MODE_ASYNC
+};
+
+enum mad_flow {
+ MAD_FLOW_CONTINUE = 0x0000,
+ MAD_FLOW_STOP = 0x0010,
+ MAD_FLOW_BREAK = 0x0011,
+ MAD_FLOW_IGNORE = 0x0020
+};
+
+struct mad_decoder {
+ enum mad_decoder_mode mode;
+
+ int options;
+
+ struct {
+ long pid;
+ int in;
+ int out;
+ } async;
+
+ struct {
+ struct mad_stream stream;
+ struct mad_frame frame;
+ struct mad_synth synth;
+ } *sync;
+
+ void *cb_data;
+
+ enum mad_flow (*input_func)(void *, struct mad_stream *);
+ enum mad_flow (*header_func)(void *, struct mad_header const *);
+ enum mad_flow (*filter_func)(void *, struct mad_frame *);
+ enum mad_flow (*output_func)(void *,
+ struct mad_header const *, struct mad_pcm *);
+ enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
+ enum mad_flow (*message_func)(void *, void *, unsigned int *);
+};
+
+void mad_decoder_init(struct mad_decoder *, void *,
+ enum mad_flow (*)(void *, struct mad_stream *),
+ enum mad_flow (*)(void *, struct mad_header const *),
+ enum mad_flow (*)(void *, struct mad_frame *),
+ enum mad_flow (*)(void *,
+ struct mad_header const *,
+ struct mad_pcm *),
+ enum mad_flow (*)(void *,
+ struct mad_stream *,
+ struct mad_frame *),
+ enum mad_flow (*)(void *, void *, unsigned int *));
+int mad_decoder_finish(struct mad_decoder *);
+
+# define mad_decoder_options(decoder, opts) ((decoder)->options = (opts))
+
+int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
+int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
+
+# endif
+
diff --git a/core/multimedia/opieplayer/libmad/qc_table.dat b/core/multimedia/opieplayer/libmad/qc_table.dat
new file mode 100644
index 0000000..92b7f38
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/qc_table.dat
@@ -0,0 +1,77 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+/*
+ * These are the Layer II classes of quantization.
+ * The table is derived from Table B.4 of ISO/IEC 11172-3.
+ */
+
+ { 3, 2, 5,
+ MAD_F(0x15555555) /* 1.33333333333 => 1.33333333209, e 0.00000000124 */,
+ MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
+ { 5, 3, 7,
+ MAD_F(0x1999999a) /* 1.60000000000 => 1.60000000149, e -0.00000000149 */,
+ MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
+ { 7, 0, 3,
+ MAD_F(0x12492492) /* 1.14285714286 => 1.14285714179, e 0.00000000107 */,
+ MAD_F(0x04000000) /* 0.25000000000 => 0.25000000000, e 0.00000000000 */ },
+ { 9, 4, 10,
+ MAD_F(0x1c71c71c) /* 1.77777777777 => 1.77777777612, e 0.00000000165 */,
+ MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
+ { 15, 0, 4,
+ MAD_F(0x11111111) /* 1.06666666666 => 1.06666666642, e 0.00000000024 */,
+ MAD_F(0x02000000) /* 0.12500000000 => 0.12500000000, e 0.00000000000 */ },
+ { 31, 0, 5,
+ MAD_F(0x10842108) /* 1.03225806452 => 1.03225806355, e 0.00000000097 */,
+ MAD_F(0x01000000) /* 0.06250000000 => 0.06250000000, e 0.00000000000 */ },
+ { 63, 0, 6,
+ MAD_F(0x10410410) /* 1.01587301587 => 1.01587301493, e 0.00000000094 */,
+ MAD_F(0x00800000) /* 0.03125000000 => 0.03125000000, e 0.00000000000 */ },
+ { 127, 0, 7,
+ MAD_F(0x10204081) /* 1.00787401575 => 1.00787401572, e 0.00000000003 */,
+ MAD_F(0x00400000) /* 0.01562500000 => 0.01562500000, e 0.00000000000 */ },
+ { 255, 0, 8,
+ MAD_F(0x10101010) /* 1.00392156863 => 1.00392156839, e 0.00000000024 */,
+ MAD_F(0x00200000) /* 0.00781250000 => 0.00781250000, e 0.00000000000 */ },
+ { 511, 0, 9,
+ MAD_F(0x10080402) /* 1.00195694716 => 1.00195694715, e 0.00000000001 */,
+ MAD_F(0x00100000) /* 0.00390625000 => 0.00390625000, e 0.00000000000 */ },
+ { 1023, 0, 10,
+ MAD_F(0x10040100) /* 1.00097751711 => 1.00097751617, e 0.00000000094 */,
+ MAD_F(0x00080000) /* 0.00195312500 => 0.00195312500, e 0.00000000000 */ },
+ { 2047, 0, 11,
+ MAD_F(0x10020040) /* 1.00048851979 => 1.00048851967, e 0.00000000012 */,
+ MAD_F(0x00040000) /* 0.00097656250 => 0.00097656250, e 0.00000000000 */ },
+ { 4095, 0, 12,
+ MAD_F(0x10010010) /* 1.00024420024 => 1.00024420023, e 0.00000000001 */,
+ MAD_F(0x00020000) /* 0.00048828125 => 0.00048828125, e 0.00000000000 */ },
+ { 8191, 0, 13,
+ MAD_F(0x10008004) /* 1.00012208522 => 1.00012208521, e 0.00000000001 */,
+ MAD_F(0x00010000) /* 0.00024414063 => 0.00024414062, e 0.00000000000 */ },
+ { 16383, 0, 14,
+ MAD_F(0x10004001) /* 1.00006103888 => 1.00006103888, e -0.00000000000 */,
+ MAD_F(0x00008000) /* 0.00012207031 => 0.00012207031, e -0.00000000000 */ },
+ { 32767, 0, 15,
+ MAD_F(0x10002000) /* 1.00003051851 => 1.00003051758, e 0.00000000093 */,
+ MAD_F(0x00004000) /* 0.00006103516 => 0.00006103516, e 0.00000000000 */ },
+ { 65535, 0, 16,
+ MAD_F(0x10001000) /* 1.00001525902 => 1.00001525879, e 0.00000000023 */,
+ MAD_F(0x00002000) /* 0.00003051758 => 0.00003051758, e 0.00000000000 */ }
diff --git a/core/multimedia/opieplayer/libmad/qpe-libmadplugin.control b/core/multimedia/opieplayer/libmad/qpe-libmadplugin.control
new file mode 100644
index 0000000..077350c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/qpe-libmadplugin.control
@@ -0,0 +1,9 @@
+Files: plugins/codecs/libmadplugin.so.1.0.0 plugins/codecs/libmadplugin.so.1.0 plugins/codecs/libmadplugin.so.1 plugins/codecs/libmadplugin.so
+Priority: optional
+Section: qpe/plugins
+Maintainer: John Ryland <jryland@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: MP3 file plugin using libmad
+ Plugin to play MP3 files with the mediaplayer in the Qtopia environment.
diff --git a/core/multimedia/opieplayer/libmad/rq_table.dat b/core/multimedia/opieplayer/libmad/rq_table.dat
new file mode 100644
index 0000000..b6d1634
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/rq_table.dat
@@ -0,0 +1,8747 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+/*
+ * This is the lookup table used to compute x^(4/3) for Layer III
+ * requantization. To maintain the best possible accuracy, the value is
+ * stored as a normalized mantissa with exponent. The requantization
+ * algorithm recombines these parts with appropriate scaling.
+ */
+
+ /* 0 */ { MAD_F(0x00000000) /* 0.000000000 */, 0 },
+ /* 1 */ { MAD_F(0x04000000) /* 0.250000000 */, 2 },
+ /* 2 */ { MAD_F(0x050a28be) /* 0.314980262 */, 3 },
+ /* 3 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 4 },
+ /* 4 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 4 },
+ /* 5 */ { MAD_F(0x04466275) /* 0.267183742 */, 5 },
+ /* 6 */ { MAD_F(0x05738c72) /* 0.340710111 */, 5 },
+ /* 7 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 5 },
+ /* 8 */ { MAD_F(0x04000000) /* 0.250000000 */, 6 },
+ /* 9 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 6 },
+ /* 10 */ { MAD_F(0x0562d694) /* 0.336630420 */, 6 },
+ /* 11 */ { MAD_F(0x061dae96) /* 0.382246578 */, 6 },
+ /* 12 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 6 },
+ /* 13 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 6 },
+ /* 14 */ { MAD_F(0x0437be65) /* 0.263609310 */, 7 },
+ /* 15 */ { MAD_F(0x049fc824) /* 0.289009227 */, 7 },
+
+ /* 16 */ { MAD_F(0x050a28be) /* 0.314980262 */, 7 },
+ /* 17 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 7 },
+ /* 18 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 7 },
+ /* 19 */ { MAD_F(0x06566361) /* 0.396090870 */, 7 },
+ /* 20 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 7 },
+ /* 21 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 7 },
+ /* 22 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 7 },
+ /* 23 */ { MAD_F(0x04168b05) /* 0.255503674 */, 8 },
+ /* 24 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 8 },
+ /* 25 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 8 },
+ /* 26 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 8 },
+ /* 27 */ { MAD_F(0x05100000) /* 0.316406250 */, 8 },
+ /* 28 */ { MAD_F(0x05506451) /* 0.332126919 */, 8 },
+ /* 29 */ { MAD_F(0x05918e15) /* 0.348035890 */, 8 },
+ /* 30 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 8 },
+ /* 31 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 8 },
+
+ /* 32 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 8 },
+ /* 33 */ { MAD_F(0x069d9400) /* 0.413471222 */, 8 },
+ /* 34 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 8 },
+ /* 35 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 8 },
+ /* 36 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 8 },
+ /* 37 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 8 },
+ /* 38 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 8 },
+ /* 39 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 9 },
+ /* 40 */ { MAD_F(0x04466275) /* 0.267183742 */, 9 },
+ /* 41 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 9 },
+ /* 42 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 9 },
+ /* 43 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 9 },
+ /* 44 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 9 },
+ /* 45 */ { MAD_F(0x05007b49) /* 0.312617576 */, 9 },
+ /* 46 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 9 },
+ /* 47 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 9 },
+
+ /* 48 */ { MAD_F(0x05738c72) /* 0.340710111 */, 9 },
+ /* 49 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 9 },
+ /* 50 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 9 },
+ /* 51 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 9 },
+ /* 52 */ { MAD_F(0x0610b982) /* 0.379083164 */, 9 },
+ /* 53 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 9 },
+ /* 54 */ { MAD_F(0x0660db91) /* 0.398646895 */, 9 },
+ /* 55 */ { MAD_F(0x06894c90) /* 0.408520284 */, 9 },
+ /* 56 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 9 },
+ /* 57 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 9 },
+ /* 58 */ { MAD_F(0x07041636) /* 0.438497744 */, 9 },
+ /* 59 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 9 },
+ /* 60 */ { MAD_F(0x075722ef) /* 0.458773552 */, 9 },
+ /* 61 */ { MAD_F(0x078102b8) /* 0.468996735 */, 9 },
+ /* 62 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 9 },
+ /* 63 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 9 },
+
+ /* 64 */ { MAD_F(0x04000000) /* 0.250000000 */, 10 },
+ /* 65 */ { MAD_F(0x04156381) /* 0.255221850 */, 10 },
+ /* 66 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 10 },
+ /* 67 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 10 },
+ /* 68 */ { MAD_F(0x045635cf) /* 0.271047409 */, 10 },
+ /* 69 */ { MAD_F(0x046c083e) /* 0.276375048 */, 10 },
+ /* 70 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 10 },
+ /* 71 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 10 },
+ /* 72 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 10 },
+ /* 73 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 10 },
+ /* 74 */ { MAD_F(0x04dab524) /* 0.303395408 */, 10 },
+ /* 75 */ { MAD_F(0x04f12624) /* 0.308874267 */, 10 },
+ /* 76 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 10 },
+ /* 77 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 10 },
+ /* 78 */ { MAD_F(0x053511cb) /* 0.325456423 */, 10 },
+ /* 79 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 10 },
+
+ /* 80 */ { MAD_F(0x0562d694) /* 0.336630420 */, 10 },
+ /* 81 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 10 },
+ /* 82 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 10 },
+ /* 83 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 10 },
+ /* 84 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 10 },
+ /* 85 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 10 },
+ /* 86 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 10 },
+ /* 87 */ { MAD_F(0x0606012b) /* 0.376465960 */, 10 },
+ /* 88 */ { MAD_F(0x061dae96) /* 0.382246578 */, 10 },
+ /* 89 */ { MAD_F(0x06357302) /* 0.388049134 */, 10 },
+ /* 90 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 10 },
+ /* 91 */ { MAD_F(0x0665402d) /* 0.399719406 */, 10 },
+ /* 92 */ { MAD_F(0x067d4896) /* 0.405586801 */, 10 },
+ /* 93 */ { MAD_F(0x06956753) /* 0.411475493 */, 10 },
+ /* 94 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 10 },
+ /* 95 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 10 },
+
+ /* 96 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 10 },
+ /* 97 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 10 },
+ /* 98 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 10 },
+ /* 99 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 10 },
+ /* 100 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 10 },
+ /* 101 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 10 },
+ /* 102 */ { MAD_F(0x07724f64) /* 0.465407744 */, 10 },
+ /* 103 */ { MAD_F(0x078b4514) /* 0.471501425 */, 10 },
+ /* 104 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 10 },
+ /* 105 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 10 },
+ /* 106 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 10 },
+ /* 107 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 10 },
+ /* 108 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 11 },
+ /* 109 */ { MAD_F(0x04115aca) /* 0.254236974 */, 11 },
+ /* 110 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 11 },
+ /* 111 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 11 },
+
+ /* 112 */ { MAD_F(0x0437be65) /* 0.263609310 */, 11 },
+ /* 113 */ { MAD_F(0x04449dee) /* 0.266752177 */, 11 },
+ /* 114 */ { MAD_F(0x04518733) /* 0.269904329 */, 11 },
+ /* 115 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 11 },
+ /* 116 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 11 },
+ /* 117 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 11 },
+ /* 118 */ { MAD_F(0x04858c83) /* 0.282604707 */, 11 },
+ /* 119 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 11 },
+ /* 120 */ { MAD_F(0x049fc824) /* 0.289009227 */, 11 },
+ /* 121 */ { MAD_F(0x04acf402) /* 0.292224893 */, 11 },
+ /* 122 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 11 },
+ /* 123 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 11 },
+ /* 124 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 11 },
+ /* 125 */ { MAD_F(0x04e20000) /* 0.305175781 */, 11 },
+ /* 126 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 11 },
+ /* 127 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 11 },
+
+ /* 128 */ { MAD_F(0x050a28be) /* 0.314980262 */, 11 },
+ /* 129 */ { MAD_F(0x05179da4) /* 0.318265572 */, 11 },
+ /* 130 */ { MAD_F(0x05251b73) /* 0.321559381 */, 11 },
+ /* 131 */ { MAD_F(0x0532a220) /* 0.324861647 */, 11 },
+ /* 132 */ { MAD_F(0x054031a0) /* 0.328172327 */, 11 },
+ /* 133 */ { MAD_F(0x054dc9e7) /* 0.331491377 */, 11 },
+ /* 134 */ { MAD_F(0x055b6ae9) /* 0.334818756 */, 11 },
+ /* 135 */ { MAD_F(0x0569149c) /* 0.338154423 */, 11 },
+ /* 136 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 11 },
+ /* 137 */ { MAD_F(0x058481e9) /* 0.344850455 */, 11 },
+ /* 138 */ { MAD_F(0x0592456d) /* 0.348210741 */, 11 },
+ /* 139 */ { MAD_F(0x05a01176) /* 0.351579152 */, 11 },
+ /* 140 */ { MAD_F(0x05ade5fa) /* 0.354955651 */, 11 },
+ /* 141 */ { MAD_F(0x05bbc2ef) /* 0.358340200 */, 11 },
+ /* 142 */ { MAD_F(0x05c9a84a) /* 0.361732758 */, 11 },
+ /* 143 */ { MAD_F(0x05d79601) /* 0.365133291 */, 11 },
+
+ /* 144 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 11 },
+ /* 145 */ { MAD_F(0x05f38a5d) /* 0.371958126 */, 11 },
+ /* 146 */ { MAD_F(0x060190ee) /* 0.375382356 */, 11 },
+ /* 147 */ { MAD_F(0x060f9fb3) /* 0.378814413 */, 11 },
+ /* 148 */ { MAD_F(0x061db6a5) /* 0.382254261 */, 11 },
+ /* 149 */ { MAD_F(0x062bd5b8) /* 0.385701865 */, 11 },
+ /* 150 */ { MAD_F(0x0639fce4) /* 0.389157191 */, 11 },
+ /* 151 */ { MAD_F(0x06482c1f) /* 0.392620204 */, 11 },
+ /* 152 */ { MAD_F(0x06566361) /* 0.396090870 */, 11 },
+ /* 153 */ { MAD_F(0x0664a2a0) /* 0.399569155 */, 11 },
+ /* 154 */ { MAD_F(0x0672e9d4) /* 0.403055027 */, 11 },
+ /* 155 */ { MAD_F(0x068138f3) /* 0.406548452 */, 11 },
+ /* 156 */ { MAD_F(0x068f8ff5) /* 0.410049398 */, 11 },
+ /* 157 */ { MAD_F(0x069deed1) /* 0.413557833 */, 11 },
+ /* 158 */ { MAD_F(0x06ac557f) /* 0.417073724 */, 11 },
+ /* 159 */ { MAD_F(0x06bac3f6) /* 0.420597041 */, 11 },
+
+ /* 160 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 11 },
+ /* 161 */ { MAD_F(0x06d7b81f) /* 0.427665827 */, 11 },
+ /* 162 */ { MAD_F(0x06e63dc0) /* 0.431211234 */, 11 },
+ /* 163 */ { MAD_F(0x06f4cb09) /* 0.434763944 */, 11 },
+ /* 164 */ { MAD_F(0x07035ff3) /* 0.438323927 */, 11 },
+ /* 165 */ { MAD_F(0x0711fc75) /* 0.441891153 */, 11 },
+ /* 166 */ { MAD_F(0x0720a087) /* 0.445465593 */, 11 },
+ /* 167 */ { MAD_F(0x072f4c22) /* 0.449047217 */, 11 },
+ /* 168 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 11 },
+ /* 169 */ { MAD_F(0x074cb9d3) /* 0.456231906 */, 11 },
+ /* 170 */ { MAD_F(0x075b7bdb) /* 0.459834914 */, 11 },
+ /* 171 */ { MAD_F(0x076a454c) /* 0.463444993 */, 11 },
+ /* 172 */ { MAD_F(0x07791620) /* 0.467062117 */, 11 },
+ /* 173 */ { MAD_F(0x0787ee50) /* 0.470686258 */, 11 },
+ /* 174 */ { MAD_F(0x0796cdd4) /* 0.474317388 */, 11 },
+ /* 175 */ { MAD_F(0x07a5b4a5) /* 0.477955481 */, 11 },
+
+ /* 176 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 11 },
+ /* 177 */ { MAD_F(0x07c39812) /* 0.485252449 */, 11 },
+ /* 178 */ { MAD_F(0x07d294a0) /* 0.488911273 */, 11 },
+ /* 179 */ { MAD_F(0x07e1985f) /* 0.492576954 */, 11 },
+ /* 180 */ { MAD_F(0x07f0a348) /* 0.496249468 */, 11 },
+ /* 181 */ { MAD_F(0x07ffb554) /* 0.499928790 */, 11 },
+ /* 182 */ { MAD_F(0x0407673f) /* 0.251807447 */, 12 },
+ /* 183 */ { MAD_F(0x040ef75e) /* 0.253653877 */, 12 },
+ /* 184 */ { MAD_F(0x04168b05) /* 0.255503674 */, 12 },
+ /* 185 */ { MAD_F(0x041e2230) /* 0.257356825 */, 12 },
+ /* 186 */ { MAD_F(0x0425bcdd) /* 0.259213318 */, 12 },
+ /* 187 */ { MAD_F(0x042d5b07) /* 0.261073141 */, 12 },
+ /* 188 */ { MAD_F(0x0434fcad) /* 0.262936282 */, 12 },
+ /* 189 */ { MAD_F(0x043ca1c9) /* 0.264802730 */, 12 },
+ /* 190 */ { MAD_F(0x04444a5a) /* 0.266672472 */, 12 },
+ /* 191 */ { MAD_F(0x044bf65d) /* 0.268545497 */, 12 },
+
+ /* 192 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 12 },
+ /* 193 */ { MAD_F(0x045b58a9) /* 0.272301352 */, 12 },
+ /* 194 */ { MAD_F(0x04630eed) /* 0.274184158 */, 12 },
+ /* 195 */ { MAD_F(0x046ac896) /* 0.276070203 */, 12 },
+ /* 196 */ { MAD_F(0x047285a2) /* 0.277959474 */, 12 },
+ /* 197 */ { MAD_F(0x047a460c) /* 0.279851960 */, 12 },
+ /* 198 */ { MAD_F(0x048209d3) /* 0.281747652 */, 12 },
+ /* 199 */ { MAD_F(0x0489d0f4) /* 0.283646538 */, 12 },
+ /* 200 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 12 },
+ /* 201 */ { MAD_F(0x04996935) /* 0.287453849 */, 12 },
+ /* 202 */ { MAD_F(0x04a13a50) /* 0.289362253 */, 12 },
+ /* 203 */ { MAD_F(0x04a90eba) /* 0.291273810 */, 12 },
+ /* 204 */ { MAD_F(0x04b0e66e) /* 0.293188507 */, 12 },
+ /* 205 */ { MAD_F(0x04b8c16c) /* 0.295106336 */, 12 },
+ /* 206 */ { MAD_F(0x04c09faf) /* 0.297027285 */, 12 },
+ /* 207 */ { MAD_F(0x04c88135) /* 0.298951346 */, 12 },
+
+ /* 208 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 12 },
+ /* 209 */ { MAD_F(0x04d84dff) /* 0.302808759 */, 12 },
+ /* 210 */ { MAD_F(0x04e0393e) /* 0.304742092 */, 12 },
+ /* 211 */ { MAD_F(0x04e827b6) /* 0.306678497 */, 12 },
+ /* 212 */ { MAD_F(0x04f01963) /* 0.308617963 */, 12 },
+ /* 213 */ { MAD_F(0x04f80e44) /* 0.310560480 */, 12 },
+ /* 214 */ { MAD_F(0x05000655) /* 0.312506041 */, 12 },
+ /* 215 */ { MAD_F(0x05080195) /* 0.314454634 */, 12 },
+ /* 216 */ { MAD_F(0x05100000) /* 0.316406250 */, 12 },
+ /* 217 */ { MAD_F(0x05180194) /* 0.318360880 */, 12 },
+ /* 218 */ { MAD_F(0x0520064f) /* 0.320318516 */, 12 },
+ /* 219 */ { MAD_F(0x05280e2d) /* 0.322279147 */, 12 },
+ /* 220 */ { MAD_F(0x0530192e) /* 0.324242764 */, 12 },
+ /* 221 */ { MAD_F(0x0538274e) /* 0.326209359 */, 12 },
+ /* 222 */ { MAD_F(0x0540388a) /* 0.328178922 */, 12 },
+ /* 223 */ { MAD_F(0x05484ce2) /* 0.330151445 */, 12 },
+
+ /* 224 */ { MAD_F(0x05506451) /* 0.332126919 */, 12 },
+ /* 225 */ { MAD_F(0x05587ed5) /* 0.334105334 */, 12 },
+ /* 226 */ { MAD_F(0x05609c6e) /* 0.336086683 */, 12 },
+ /* 227 */ { MAD_F(0x0568bd17) /* 0.338070956 */, 12 },
+ /* 228 */ { MAD_F(0x0570e0cf) /* 0.340058145 */, 12 },
+ /* 229 */ { MAD_F(0x05790793) /* 0.342048241 */, 12 },
+ /* 230 */ { MAD_F(0x05813162) /* 0.344041237 */, 12 },
+ /* 231 */ { MAD_F(0x05895e39) /* 0.346037122 */, 12 },
+ /* 232 */ { MAD_F(0x05918e15) /* 0.348035890 */, 12 },
+ /* 233 */ { MAD_F(0x0599c0f4) /* 0.350037532 */, 12 },
+ /* 234 */ { MAD_F(0x05a1f6d5) /* 0.352042040 */, 12 },
+ /* 235 */ { MAD_F(0x05aa2fb5) /* 0.354049405 */, 12 },
+ /* 236 */ { MAD_F(0x05b26b92) /* 0.356059619 */, 12 },
+ /* 237 */ { MAD_F(0x05baaa69) /* 0.358072674 */, 12 },
+ /* 238 */ { MAD_F(0x05c2ec39) /* 0.360088563 */, 12 },
+ /* 239 */ { MAD_F(0x05cb3100) /* 0.362107278 */, 12 },
+
+ /* 240 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 12 },
+ /* 241 */ { MAD_F(0x05dbc368) /* 0.366153151 */, 12 },
+ /* 242 */ { MAD_F(0x05e41105) /* 0.368180294 */, 12 },
+ /* 243 */ { MAD_F(0x05ec6190) /* 0.370210231 */, 12 },
+ /* 244 */ { MAD_F(0x05f4b507) /* 0.372242955 */, 12 },
+ /* 245 */ { MAD_F(0x05fd0b68) /* 0.374278458 */, 12 },
+ /* 246 */ { MAD_F(0x060564b1) /* 0.376316732 */, 12 },
+ /* 247 */ { MAD_F(0x060dc0e0) /* 0.378357769 */, 12 },
+ /* 248 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 12 },
+ /* 249 */ { MAD_F(0x061e81e8) /* 0.382448106 */, 12 },
+ /* 250 */ { MAD_F(0x0626e6bc) /* 0.384497391 */, 12 },
+ /* 251 */ { MAD_F(0x062f4e6f) /* 0.386549409 */, 12 },
+ /* 252 */ { MAD_F(0x0637b8fd) /* 0.388604155 */, 12 },
+ /* 253 */ { MAD_F(0x06402666) /* 0.390661620 */, 12 },
+ /* 254 */ { MAD_F(0x064896a7) /* 0.392721798 */, 12 },
+ /* 255 */ { MAD_F(0x065109be) /* 0.394784681 */, 12 },
+
+ /* 256 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 12 },
+ /* 257 */ { MAD_F(0x0661f867) /* 0.398918536 */, 12 },
+ /* 258 */ { MAD_F(0x066a73f5) /* 0.400989493 */, 12 },
+ /* 259 */ { MAD_F(0x0672f252) /* 0.403063128 */, 12 },
+ /* 260 */ { MAD_F(0x067b737c) /* 0.405139433 */, 12 },
+ /* 261 */ { MAD_F(0x0683f771) /* 0.407218402 */, 12 },
+ /* 262 */ { MAD_F(0x068c7e2f) /* 0.409300027 */, 12 },
+ /* 263 */ { MAD_F(0x069507b5) /* 0.411384303 */, 12 },
+ /* 264 */ { MAD_F(0x069d9400) /* 0.413471222 */, 12 },
+ /* 265 */ { MAD_F(0x06a6230f) /* 0.415560778 */, 12 },
+ /* 266 */ { MAD_F(0x06aeb4e0) /* 0.417652964 */, 12 },
+ /* 267 */ { MAD_F(0x06b74971) /* 0.419747773 */, 12 },
+ /* 268 */ { MAD_F(0x06bfe0c0) /* 0.421845199 */, 12 },
+ /* 269 */ { MAD_F(0x06c87acc) /* 0.423945235 */, 12 },
+ /* 270 */ { MAD_F(0x06d11794) /* 0.426047876 */, 12 },
+ /* 271 */ { MAD_F(0x06d9b714) /* 0.428153114 */, 12 },
+
+ /* 272 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 12 },
+ /* 273 */ { MAD_F(0x06eafe3a) /* 0.432371356 */, 12 },
+ /* 274 */ { MAD_F(0x06f3a5dc) /* 0.434484348 */, 12 },
+ /* 275 */ { MAD_F(0x06fc5030) /* 0.436599912 */, 12 },
+ /* 276 */ { MAD_F(0x0704fd35) /* 0.438718042 */, 12 },
+ /* 277 */ { MAD_F(0x070dacea) /* 0.440838732 */, 12 },
+ /* 278 */ { MAD_F(0x07165f4b) /* 0.442961975 */, 12 },
+ /* 279 */ { MAD_F(0x071f1459) /* 0.445087765 */, 12 },
+ /* 280 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 12 },
+ /* 281 */ { MAD_F(0x07308671) /* 0.449346964 */, 12 },
+ /* 282 */ { MAD_F(0x07394378) /* 0.451480360 */, 12 },
+ /* 283 */ { MAD_F(0x07420325) /* 0.453616280 */, 12 },
+ /* 284 */ { MAD_F(0x074ac575) /* 0.455754717 */, 12 },
+ /* 285 */ { MAD_F(0x07538a67) /* 0.457895665 */, 12 },
+ /* 286 */ { MAD_F(0x075c51fa) /* 0.460039119 */, 12 },
+ /* 287 */ { MAD_F(0x07651c2c) /* 0.462185072 */, 12 },
+
+ /* 288 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 12 },
+ /* 289 */ { MAD_F(0x0776b867) /* 0.466484455 */, 12 },
+ /* 290 */ { MAD_F(0x077f8a6d) /* 0.468637872 */, 12 },
+ /* 291 */ { MAD_F(0x07885f0b) /* 0.470793767 */, 12 },
+ /* 292 */ { MAD_F(0x07913641) /* 0.472952132 */, 12 },
+ /* 293 */ { MAD_F(0x079a100c) /* 0.475112962 */, 12 },
+ /* 294 */ { MAD_F(0x07a2ec6c) /* 0.477276252 */, 12 },
+ /* 295 */ { MAD_F(0x07abcb5f) /* 0.479441997 */, 12 },
+ /* 296 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 12 },
+ /* 297 */ { MAD_F(0x07bd90f6) /* 0.483780825 */, 12 },
+ /* 298 */ { MAD_F(0x07c67798) /* 0.485953899 */, 12 },
+ /* 299 */ { MAD_F(0x07cf60c7) /* 0.488129404 */, 12 },
+ /* 300 */ { MAD_F(0x07d84c81) /* 0.490307336 */, 12 },
+ /* 301 */ { MAD_F(0x07e13ac5) /* 0.492487690 */, 12 },
+ /* 302 */ { MAD_F(0x07ea2b92) /* 0.494670459 */, 12 },
+ /* 303 */ { MAD_F(0x07f31ee6) /* 0.496855639 */, 12 },
+
+ /* 304 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 12 },
+ /* 305 */ { MAD_F(0x0402868e) /* 0.250616605 */, 13 },
+ /* 306 */ { MAD_F(0x040703ff) /* 0.251712795 */, 13 },
+ /* 307 */ { MAD_F(0x040b82b0) /* 0.252810180 */, 13 },
+ /* 308 */ { MAD_F(0x041002a1) /* 0.253908756 */, 13 },
+ /* 309 */ { MAD_F(0x041483d1) /* 0.255008523 */, 13 },
+ /* 310 */ { MAD_F(0x04190640) /* 0.256109476 */, 13 },
+ /* 311 */ { MAD_F(0x041d89ed) /* 0.257211614 */, 13 },
+ /* 312 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 13 },
+ /* 313 */ { MAD_F(0x042694fe) /* 0.259419433 */, 13 },
+ /* 314 */ { MAD_F(0x042b1c60) /* 0.260525110 */, 13 },
+ /* 315 */ { MAD_F(0x042fa4fe) /* 0.261631960 */, 13 },
+ /* 316 */ { MAD_F(0x04342ed7) /* 0.262739982 */, 13 },
+ /* 317 */ { MAD_F(0x0438b9e9) /* 0.263849174 */, 13 },
+ /* 318 */ { MAD_F(0x043d4635) /* 0.264959533 */, 13 },
+ /* 319 */ { MAD_F(0x0441d3b9) /* 0.266071056 */, 13 },
+
+ /* 320 */ { MAD_F(0x04466275) /* 0.267183742 */, 13 },
+ /* 321 */ { MAD_F(0x044af269) /* 0.268297587 */, 13 },
+ /* 322 */ { MAD_F(0x044f8393) /* 0.269412589 */, 13 },
+ /* 323 */ { MAD_F(0x045415f3) /* 0.270528746 */, 13 },
+ /* 324 */ { MAD_F(0x0458a989) /* 0.271646056 */, 13 },
+ /* 325 */ { MAD_F(0x045d3e53) /* 0.272764515 */, 13 },
+ /* 326 */ { MAD_F(0x0461d451) /* 0.273884123 */, 13 },
+ /* 327 */ { MAD_F(0x04666b83) /* 0.275004875 */, 13 },
+ /* 328 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 13 },
+ /* 329 */ { MAD_F(0x046f9d7e) /* 0.277249808 */, 13 },
+ /* 330 */ { MAD_F(0x04743847) /* 0.278373983 */, 13 },
+ /* 331 */ { MAD_F(0x0478d440) /* 0.279499294 */, 13 },
+ /* 332 */ { MAD_F(0x047d716a) /* 0.280625739 */, 13 },
+ /* 333 */ { MAD_F(0x04820fc3) /* 0.281753315 */, 13 },
+ /* 334 */ { MAD_F(0x0486af4c) /* 0.282882021 */, 13 },
+ /* 335 */ { MAD_F(0x048b5003) /* 0.284011853 */, 13 },
+
+ /* 336 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 13 },
+ /* 337 */ { MAD_F(0x049494fb) /* 0.286274891 */, 13 },
+ /* 338 */ { MAD_F(0x0499393a) /* 0.287408091 */, 13 },
+ /* 339 */ { MAD_F(0x049ddea5) /* 0.288542409 */, 13 },
+ /* 340 */ { MAD_F(0x04a2853c) /* 0.289677844 */, 13 },
+ /* 341 */ { MAD_F(0x04a72cfe) /* 0.290814392 */, 13 },
+ /* 342 */ { MAD_F(0x04abd5ea) /* 0.291952051 */, 13 },
+ /* 343 */ { MAD_F(0x04b08000) /* 0.293090820 */, 13 },
+ /* 344 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 13 },
+ /* 345 */ { MAD_F(0x04b9d7a7) /* 0.295371678 */, 13 },
+ /* 346 */ { MAD_F(0x04be8537) /* 0.296513762 */, 13 },
+ /* 347 */ { MAD_F(0x04c333ee) /* 0.297656947 */, 13 },
+ /* 348 */ { MAD_F(0x04c7e3cc) /* 0.298801231 */, 13 },
+ /* 349 */ { MAD_F(0x04cc94d1) /* 0.299946611 */, 13 },
+ /* 350 */ { MAD_F(0x04d146fb) /* 0.301093085 */, 13 },
+ /* 351 */ { MAD_F(0x04d5fa4b) /* 0.302240653 */, 13 },
+
+ /* 352 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 13 },
+ /* 353 */ { MAD_F(0x04df6458) /* 0.304539056 */, 13 },
+ /* 354 */ { MAD_F(0x04e41b14) /* 0.305689888 */, 13 },
+ /* 355 */ { MAD_F(0x04e8d2f3) /* 0.306841804 */, 13 },
+ /* 356 */ { MAD_F(0x04ed8bf5) /* 0.307994802 */, 13 },
+ /* 357 */ { MAD_F(0x04f24618) /* 0.309148880 */, 13 },
+ /* 358 */ { MAD_F(0x04f7015d) /* 0.310304037 */, 13 },
+ /* 359 */ { MAD_F(0x04fbbdc3) /* 0.311460269 */, 13 },
+ /* 360 */ { MAD_F(0x05007b49) /* 0.312617576 */, 13 },
+ /* 361 */ { MAD_F(0x050539ef) /* 0.313775954 */, 13 },
+ /* 362 */ { MAD_F(0x0509f9b4) /* 0.314935403 */, 13 },
+ /* 363 */ { MAD_F(0x050eba98) /* 0.316095920 */, 13 },
+ /* 364 */ { MAD_F(0x05137c9a) /* 0.317257503 */, 13 },
+ /* 365 */ { MAD_F(0x05183fba) /* 0.318420150 */, 13 },
+ /* 366 */ { MAD_F(0x051d03f7) /* 0.319583859 */, 13 },
+ /* 367 */ { MAD_F(0x0521c950) /* 0.320748629 */, 13 },
+
+ /* 368 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 13 },
+ /* 369 */ { MAD_F(0x052b5757) /* 0.323081342 */, 13 },
+ /* 370 */ { MAD_F(0x05302003) /* 0.324249281 */, 13 },
+ /* 371 */ { MAD_F(0x0534e9ca) /* 0.325418273 */, 13 },
+ /* 372 */ { MAD_F(0x0539b4ab) /* 0.326588316 */, 13 },
+ /* 373 */ { MAD_F(0x053e80a6) /* 0.327759407 */, 13 },
+ /* 374 */ { MAD_F(0x05434db9) /* 0.328931546 */, 13 },
+ /* 375 */ { MAD_F(0x05481be5) /* 0.330104730 */, 13 },
+ /* 376 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 13 },
+ /* 377 */ { MAD_F(0x0551bb85) /* 0.332454225 */, 13 },
+ /* 378 */ { MAD_F(0x05568cf8) /* 0.333630533 */, 13 },
+ /* 379 */ { MAD_F(0x055b5f81) /* 0.334807879 */, 13 },
+ /* 380 */ { MAD_F(0x05603321) /* 0.335986261 */, 13 },
+ /* 381 */ { MAD_F(0x056507d6) /* 0.337165677 */, 13 },
+ /* 382 */ { MAD_F(0x0569dda0) /* 0.338346125 */, 13 },
+ /* 383 */ { MAD_F(0x056eb47f) /* 0.339527604 */, 13 },
+
+ /* 384 */ { MAD_F(0x05738c72) /* 0.340710111 */, 13 },
+ /* 385 */ { MAD_F(0x05786578) /* 0.341893646 */, 13 },
+ /* 386 */ { MAD_F(0x057d3f92) /* 0.343078205 */, 13 },
+ /* 387 */ { MAD_F(0x05821abf) /* 0.344263788 */, 13 },
+ /* 388 */ { MAD_F(0x0586f6fd) /* 0.345450393 */, 13 },
+ /* 389 */ { MAD_F(0x058bd44e) /* 0.346638017 */, 13 },
+ /* 390 */ { MAD_F(0x0590b2b0) /* 0.347826659 */, 13 },
+ /* 391 */ { MAD_F(0x05959222) /* 0.349016318 */, 13 },
+ /* 392 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 13 },
+ /* 393 */ { MAD_F(0x059f5438) /* 0.351398678 */, 13 },
+ /* 394 */ { MAD_F(0x05a436da) /* 0.352591376 */, 13 },
+ /* 395 */ { MAD_F(0x05a91a8c) /* 0.353785083 */, 13 },
+ /* 396 */ { MAD_F(0x05adff4c) /* 0.354979798 */, 13 },
+ /* 397 */ { MAD_F(0x05b2e51a) /* 0.356175519 */, 13 },
+ /* 398 */ { MAD_F(0x05b7cbf5) /* 0.357372244 */, 13 },
+ /* 399 */ { MAD_F(0x05bcb3de) /* 0.358569972 */, 13 },
+
+ /* 400 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 13 },
+ /* 401 */ { MAD_F(0x05c686d5) /* 0.360968429 */, 13 },
+ /* 402 */ { MAD_F(0x05cb71e2) /* 0.362169156 */, 13 },
+ /* 403 */ { MAD_F(0x05d05dfb) /* 0.363370878 */, 13 },
+ /* 404 */ { MAD_F(0x05d54b1f) /* 0.364573594 */, 13 },
+ /* 405 */ { MAD_F(0x05da394d) /* 0.365777304 */, 13 },
+ /* 406 */ { MAD_F(0x05df2885) /* 0.366982004 */, 13 },
+ /* 407 */ { MAD_F(0x05e418c7) /* 0.368187694 */, 13 },
+ /* 408 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 13 },
+ /* 409 */ { MAD_F(0x05edfc66) /* 0.370602036 */, 13 },
+ /* 410 */ { MAD_F(0x05f2efc2) /* 0.371810684 */, 13 },
+ /* 411 */ { MAD_F(0x05f7e426) /* 0.373020316 */, 13 },
+ /* 412 */ { MAD_F(0x05fcd992) /* 0.374230929 */, 13 },
+ /* 413 */ { MAD_F(0x0601d004) /* 0.375442522 */, 13 },
+ /* 414 */ { MAD_F(0x0606c77d) /* 0.376655093 */, 13 },
+ /* 415 */ { MAD_F(0x060bbffd) /* 0.377868641 */, 13 },
+
+ /* 416 */ { MAD_F(0x0610b982) /* 0.379083164 */, 13 },
+ /* 417 */ { MAD_F(0x0615b40c) /* 0.380298661 */, 13 },
+ /* 418 */ { MAD_F(0x061aaf9c) /* 0.381515130 */, 13 },
+ /* 419 */ { MAD_F(0x061fac2f) /* 0.382732569 */, 13 },
+ /* 420 */ { MAD_F(0x0624a9c7) /* 0.383950977 */, 13 },
+ /* 421 */ { MAD_F(0x0629a863) /* 0.385170352 */, 13 },
+ /* 422 */ { MAD_F(0x062ea802) /* 0.386390694 */, 13 },
+ /* 423 */ { MAD_F(0x0633a8a3) /* 0.387611999 */, 13 },
+ /* 424 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 13 },
+ /* 425 */ { MAD_F(0x063dacee) /* 0.390057497 */, 13 },
+ /* 426 */ { MAD_F(0x0642b096) /* 0.391281687 */, 13 },
+ /* 427 */ { MAD_F(0x0647b53f) /* 0.392506834 */, 13 },
+ /* 428 */ { MAD_F(0x064cbae9) /* 0.393732939 */, 13 },
+ /* 429 */ { MAD_F(0x0651c193) /* 0.394959999 */, 13 },
+ /* 430 */ { MAD_F(0x0656c93d) /* 0.396188012 */, 13 },
+ /* 431 */ { MAD_F(0x065bd1e7) /* 0.397416978 */, 13 },
+
+ /* 432 */ { MAD_F(0x0660db91) /* 0.398646895 */, 13 },
+ /* 433 */ { MAD_F(0x0665e639) /* 0.399877761 */, 13 },
+ /* 434 */ { MAD_F(0x066af1df) /* 0.401109575 */, 13 },
+ /* 435 */ { MAD_F(0x066ffe84) /* 0.402342335 */, 13 },
+ /* 436 */ { MAD_F(0x06750c26) /* 0.403576041 */, 13 },
+ /* 437 */ { MAD_F(0x067a1ac6) /* 0.404810690 */, 13 },
+ /* 438 */ { MAD_F(0x067f2a62) /* 0.406046281 */, 13 },
+ /* 439 */ { MAD_F(0x06843afb) /* 0.407282813 */, 13 },
+ /* 440 */ { MAD_F(0x06894c90) /* 0.408520284 */, 13 },
+ /* 441 */ { MAD_F(0x068e5f21) /* 0.409758693 */, 13 },
+ /* 442 */ { MAD_F(0x069372ae) /* 0.410998038 */, 13 },
+ /* 443 */ { MAD_F(0x06988735) /* 0.412238319 */, 13 },
+ /* 444 */ { MAD_F(0x069d9cb7) /* 0.413479532 */, 13 },
+ /* 445 */ { MAD_F(0x06a2b333) /* 0.414721679 */, 13 },
+ /* 446 */ { MAD_F(0x06a7caa9) /* 0.415964756 */, 13 },
+ /* 447 */ { MAD_F(0x06ace318) /* 0.417208762 */, 13 },
+
+ /* 448 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 13 },
+ /* 449 */ { MAD_F(0x06b716e2) /* 0.419699557 */, 13 },
+ /* 450 */ { MAD_F(0x06bc323b) /* 0.420946343 */, 13 },
+ /* 451 */ { MAD_F(0x06c14e8d) /* 0.422194054 */, 13 },
+ /* 452 */ { MAD_F(0x06c66bd6) /* 0.423442686 */, 13 },
+ /* 453 */ { MAD_F(0x06cb8a17) /* 0.424692240 */, 13 },
+ /* 454 */ { MAD_F(0x06d0a94e) /* 0.425942714 */, 13 },
+ /* 455 */ { MAD_F(0x06d5c97c) /* 0.427194106 */, 13 },
+ /* 456 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 13 },
+ /* 457 */ { MAD_F(0x06e00cbb) /* 0.429699640 */, 13 },
+ /* 458 */ { MAD_F(0x06e52fca) /* 0.430953779 */, 13 },
+ /* 459 */ { MAD_F(0x06ea53cf) /* 0.432208832 */, 13 },
+ /* 460 */ { MAD_F(0x06ef78c8) /* 0.433464796 */, 13 },
+ /* 461 */ { MAD_F(0x06f49eb6) /* 0.434721671 */, 13 },
+ /* 462 */ { MAD_F(0x06f9c597) /* 0.435979455 */, 13 },
+ /* 463 */ { MAD_F(0x06feed6d) /* 0.437238146 */, 13 },
+
+ /* 464 */ { MAD_F(0x07041636) /* 0.438497744 */, 13 },
+ /* 465 */ { MAD_F(0x07093ff2) /* 0.439758248 */, 13 },
+ /* 466 */ { MAD_F(0x070e6aa0) /* 0.441019655 */, 13 },
+ /* 467 */ { MAD_F(0x07139641) /* 0.442281965 */, 13 },
+ /* 468 */ { MAD_F(0x0718c2d3) /* 0.443545176 */, 13 },
+ /* 469 */ { MAD_F(0x071df058) /* 0.444809288 */, 13 },
+ /* 470 */ { MAD_F(0x07231ecd) /* 0.446074298 */, 13 },
+ /* 471 */ { MAD_F(0x07284e34) /* 0.447340205 */, 13 },
+ /* 472 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 13 },
+ /* 473 */ { MAD_F(0x0732afd2) /* 0.449874708 */, 13 },
+ /* 474 */ { MAD_F(0x0737e209) /* 0.451143300 */, 13 },
+ /* 475 */ { MAD_F(0x073d1530) /* 0.452412785 */, 13 },
+ /* 476 */ { MAD_F(0x07424946) /* 0.453683161 */, 13 },
+ /* 477 */ { MAD_F(0x07477e4b) /* 0.454954427 */, 13 },
+ /* 478 */ { MAD_F(0x074cb43e) /* 0.456226581 */, 13 },
+ /* 479 */ { MAD_F(0x0751eb20) /* 0.457499623 */, 13 },
+
+ /* 480 */ { MAD_F(0x075722ef) /* 0.458773552 */, 13 },
+ /* 481 */ { MAD_F(0x075c5bac) /* 0.460048365 */, 13 },
+ /* 482 */ { MAD_F(0x07619557) /* 0.461324062 */, 13 },
+ /* 483 */ { MAD_F(0x0766cfee) /* 0.462600642 */, 13 },
+ /* 484 */ { MAD_F(0x076c0b72) /* 0.463878102 */, 13 },
+ /* 485 */ { MAD_F(0x077147e2) /* 0.465156443 */, 13 },
+ /* 486 */ { MAD_F(0x0776853e) /* 0.466435663 */, 13 },
+ /* 487 */ { MAD_F(0x077bc385) /* 0.467715761 */, 13 },
+ /* 488 */ { MAD_F(0x078102b8) /* 0.468996735 */, 13 },
+ /* 489 */ { MAD_F(0x078642d6) /* 0.470278584 */, 13 },
+ /* 490 */ { MAD_F(0x078b83de) /* 0.471561307 */, 13 },
+ /* 491 */ { MAD_F(0x0790c5d1) /* 0.472844904 */, 13 },
+ /* 492 */ { MAD_F(0x079608ae) /* 0.474129372 */, 13 },
+ /* 493 */ { MAD_F(0x079b4c74) /* 0.475414710 */, 13 },
+ /* 494 */ { MAD_F(0x07a09124) /* 0.476700918 */, 13 },
+ /* 495 */ { MAD_F(0x07a5d6bd) /* 0.477987994 */, 13 },
+
+ /* 496 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 13 },
+ /* 497 */ { MAD_F(0x07b064a8) /* 0.480564746 */, 13 },
+ /* 498 */ { MAD_F(0x07b5acfb) /* 0.481854420 */, 13 },
+ /* 499 */ { MAD_F(0x07baf635) /* 0.483144957 */, 13 },
+ /* 500 */ { MAD_F(0x07c04056) /* 0.484436356 */, 13 },
+ /* 501 */ { MAD_F(0x07c58b5f) /* 0.485728617 */, 13 },
+ /* 502 */ { MAD_F(0x07cad74e) /* 0.487021738 */, 13 },
+ /* 503 */ { MAD_F(0x07d02424) /* 0.488315717 */, 13 },
+ /* 504 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 13 },
+ /* 505 */ { MAD_F(0x07dac083) /* 0.490906249 */, 13 },
+ /* 506 */ { MAD_F(0x07e0100a) /* 0.492202799 */, 13 },
+ /* 507 */ { MAD_F(0x07e56078) /* 0.493500203 */, 13 },
+ /* 508 */ { MAD_F(0x07eab1ca) /* 0.494798460 */, 13 },
+ /* 509 */ { MAD_F(0x07f00401) /* 0.496097570 */, 13 },
+ /* 510 */ { MAD_F(0x07f5571d) /* 0.497397530 */, 13 },
+ /* 511 */ { MAD_F(0x07faab1c) /* 0.498698341 */, 13 },
+
+ /* 512 */ { MAD_F(0x04000000) /* 0.250000000 */, 14 },
+ /* 513 */ { MAD_F(0x0402aae3) /* 0.250651254 */, 14 },
+ /* 514 */ { MAD_F(0x04055638) /* 0.251302930 */, 14 },
+ /* 515 */ { MAD_F(0x040801ff) /* 0.251955030 */, 14 },
+ /* 516 */ { MAD_F(0x040aae37) /* 0.252607552 */, 14 },
+ /* 517 */ { MAD_F(0x040d5ae0) /* 0.253260495 */, 14 },
+ /* 518 */ { MAD_F(0x041007fa) /* 0.253913860 */, 14 },
+ /* 519 */ { MAD_F(0x0412b586) /* 0.254567645 */, 14 },
+ /* 520 */ { MAD_F(0x04156381) /* 0.255221850 */, 14 },
+ /* 521 */ { MAD_F(0x041811ee) /* 0.255876475 */, 14 },
+ /* 522 */ { MAD_F(0x041ac0cb) /* 0.256531518 */, 14 },
+ /* 523 */ { MAD_F(0x041d7018) /* 0.257186980 */, 14 },
+ /* 524 */ { MAD_F(0x04201fd5) /* 0.257842860 */, 14 },
+ /* 525 */ { MAD_F(0x0422d003) /* 0.258499157 */, 14 },
+ /* 526 */ { MAD_F(0x042580a0) /* 0.259155872 */, 14 },
+ /* 527 */ { MAD_F(0x042831ad) /* 0.259813002 */, 14 },
+
+ /* 528 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 14 },
+ /* 529 */ { MAD_F(0x042d9516) /* 0.261128510 */, 14 },
+ /* 530 */ { MAD_F(0x04304772) /* 0.261786886 */, 14 },
+ /* 531 */ { MAD_F(0x0432fa3d) /* 0.262445676 */, 14 },
+ /* 532 */ { MAD_F(0x0435ad76) /* 0.263104880 */, 14 },
+ /* 533 */ { MAD_F(0x0438611f) /* 0.263764497 */, 14 },
+ /* 534 */ { MAD_F(0x043b1536) /* 0.264424527 */, 14 },
+ /* 535 */ { MAD_F(0x043dc9bc) /* 0.265084969 */, 14 },
+ /* 536 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 14 },
+ /* 537 */ { MAD_F(0x04433414) /* 0.266407088 */, 14 },
+ /* 538 */ { MAD_F(0x0445e9e5) /* 0.267068763 */, 14 },
+ /* 539 */ { MAD_F(0x0448a024) /* 0.267730848 */, 14 },
+ /* 540 */ { MAD_F(0x044b56d1) /* 0.268393343 */, 14 },
+ /* 541 */ { MAD_F(0x044e0dec) /* 0.269056248 */, 14 },
+ /* 542 */ { MAD_F(0x0450c575) /* 0.269719560 */, 14 },
+ /* 543 */ { MAD_F(0x04537d6b) /* 0.270383281 */, 14 },
+
+ /* 544 */ { MAD_F(0x045635cf) /* 0.271047409 */, 14 },
+ /* 545 */ { MAD_F(0x0458ee9f) /* 0.271711944 */, 14 },
+ /* 546 */ { MAD_F(0x045ba7dd) /* 0.272376886 */, 14 },
+ /* 547 */ { MAD_F(0x045e6188) /* 0.273042234 */, 14 },
+ /* 548 */ { MAD_F(0x04611ba0) /* 0.273707988 */, 14 },
+ /* 549 */ { MAD_F(0x0463d625) /* 0.274374147 */, 14 },
+ /* 550 */ { MAD_F(0x04669116) /* 0.275040710 */, 14 },
+ /* 551 */ { MAD_F(0x04694c74) /* 0.275707677 */, 14 },
+ /* 552 */ { MAD_F(0x046c083e) /* 0.276375048 */, 14 },
+ /* 553 */ { MAD_F(0x046ec474) /* 0.277042822 */, 14 },
+ /* 554 */ { MAD_F(0x04718116) /* 0.277710999 */, 14 },
+ /* 555 */ { MAD_F(0x04743e25) /* 0.278379578 */, 14 },
+ /* 556 */ { MAD_F(0x0476fb9f) /* 0.279048558 */, 14 },
+ /* 557 */ { MAD_F(0x0479b984) /* 0.279717940 */, 14 },
+ /* 558 */ { MAD_F(0x047c77d6) /* 0.280387722 */, 14 },
+ /* 559 */ { MAD_F(0x047f3693) /* 0.281057905 */, 14 },
+
+ /* 560 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 14 },
+ /* 561 */ { MAD_F(0x0484b54e) /* 0.282399469 */, 14 },
+ /* 562 */ { MAD_F(0x0487754c) /* 0.283070849 */, 14 },
+ /* 563 */ { MAD_F(0x048a35b6) /* 0.283742628 */, 14 },
+ /* 564 */ { MAD_F(0x048cf68a) /* 0.284414805 */, 14 },
+ /* 565 */ { MAD_F(0x048fb7c8) /* 0.285087379 */, 14 },
+ /* 566 */ { MAD_F(0x04927972) /* 0.285760350 */, 14 },
+ /* 567 */ { MAD_F(0x04953b85) /* 0.286433717 */, 14 },
+ /* 568 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 14 },
+ /* 569 */ { MAD_F(0x049ac0eb) /* 0.287781640 */, 14 },
+ /* 570 */ { MAD_F(0x049d843e) /* 0.288456194 */, 14 },
+ /* 571 */ { MAD_F(0x04a047fa) /* 0.289131142 */, 14 },
+ /* 572 */ { MAD_F(0x04a30c20) /* 0.289806485 */, 14 },
+ /* 573 */ { MAD_F(0x04a5d0af) /* 0.290482221 */, 14 },
+ /* 574 */ { MAD_F(0x04a895a8) /* 0.291158351 */, 14 },
+ /* 575 */ { MAD_F(0x04ab5b0b) /* 0.291834873 */, 14 },
+
+ /* 576 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 14 },
+ /* 577 */ { MAD_F(0x04b0e70c) /* 0.293189094 */, 14 },
+ /* 578 */ { MAD_F(0x04b3adaa) /* 0.293866792 */, 14 },
+ /* 579 */ { MAD_F(0x04b674b1) /* 0.294544881 */, 14 },
+ /* 580 */ { MAD_F(0x04b93c21) /* 0.295223360 */, 14 },
+ /* 581 */ { MAD_F(0x04bc03fa) /* 0.295902229 */, 14 },
+ /* 582 */ { MAD_F(0x04becc3b) /* 0.296581488 */, 14 },
+ /* 583 */ { MAD_F(0x04c194e4) /* 0.297261136 */, 14 },
+ /* 584 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 14 },
+ /* 585 */ { MAD_F(0x04c72771) /* 0.298621598 */, 14 },
+ /* 586 */ { MAD_F(0x04c9f153) /* 0.299302411 */, 14 },
+ /* 587 */ { MAD_F(0x04ccbb9d) /* 0.299983611 */, 14 },
+ /* 588 */ { MAD_F(0x04cf864f) /* 0.300665198 */, 14 },
+ /* 589 */ { MAD_F(0x04d25169) /* 0.301347172 */, 14 },
+ /* 590 */ { MAD_F(0x04d51ceb) /* 0.302029532 */, 14 },
+ /* 591 */ { MAD_F(0x04d7e8d4) /* 0.302712277 */, 14 },
+
+ /* 592 */ { MAD_F(0x04dab524) /* 0.303395408 */, 14 },
+ /* 593 */ { MAD_F(0x04dd81dc) /* 0.304078923 */, 14 },
+ /* 594 */ { MAD_F(0x04e04efb) /* 0.304762823 */, 14 },
+ /* 595 */ { MAD_F(0x04e31c81) /* 0.305447106 */, 14 },
+ /* 596 */ { MAD_F(0x04e5ea6e) /* 0.306131773 */, 14 },
+ /* 597 */ { MAD_F(0x04e8b8c2) /* 0.306816823 */, 14 },
+ /* 598 */ { MAD_F(0x04eb877c) /* 0.307502256 */, 14 },
+ /* 599 */ { MAD_F(0x04ee569d) /* 0.308188071 */, 14 },
+ /* 600 */ { MAD_F(0x04f12624) /* 0.308874267 */, 14 },
+ /* 601 */ { MAD_F(0x04f3f612) /* 0.309560845 */, 14 },
+ /* 602 */ { MAD_F(0x04f6c666) /* 0.310247804 */, 14 },
+ /* 603 */ { MAD_F(0x04f99721) /* 0.310935143 */, 14 },
+ /* 604 */ { MAD_F(0x04fc6841) /* 0.311622862 */, 14 },
+ /* 605 */ { MAD_F(0x04ff39c7) /* 0.312310961 */, 14 },
+ /* 606 */ { MAD_F(0x05020bb3) /* 0.312999439 */, 14 },
+ /* 607 */ { MAD_F(0x0504de05) /* 0.313688296 */, 14 },
+
+ /* 608 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 14 },
+ /* 609 */ { MAD_F(0x050a83d8) /* 0.315067145 */, 14 },
+ /* 610 */ { MAD_F(0x050d575b) /* 0.315757136 */, 14 },
+ /* 611 */ { MAD_F(0x05102b42) /* 0.316447504 */, 14 },
+ /* 612 */ { MAD_F(0x0512ff8e) /* 0.317138249 */, 14 },
+ /* 613 */ { MAD_F(0x0515d440) /* 0.317829370 */, 14 },
+ /* 614 */ { MAD_F(0x0518a956) /* 0.318520867 */, 14 },
+ /* 615 */ { MAD_F(0x051b7ed1) /* 0.319212739 */, 14 },
+ /* 616 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 14 },
+ /* 617 */ { MAD_F(0x05212af5) /* 0.320597609 */, 14 },
+ /* 618 */ { MAD_F(0x0524019e) /* 0.321290606 */, 14 },
+ /* 619 */ { MAD_F(0x0526d8ab) /* 0.321983976 */, 14 },
+ /* 620 */ { MAD_F(0x0529b01d) /* 0.322677720 */, 14 },
+ /* 621 */ { MAD_F(0x052c87f2) /* 0.323371837 */, 14 },
+ /* 622 */ { MAD_F(0x052f602c) /* 0.324066327 */, 14 },
+ /* 623 */ { MAD_F(0x053238ca) /* 0.324761189 */, 14 },
+
+ /* 624 */ { MAD_F(0x053511cb) /* 0.325456423 */, 14 },
+ /* 625 */ { MAD_F(0x0537eb30) /* 0.326152028 */, 14 },
+ /* 626 */ { MAD_F(0x053ac4f9) /* 0.326848005 */, 14 },
+ /* 627 */ { MAD_F(0x053d9f25) /* 0.327544352 */, 14 },
+ /* 628 */ { MAD_F(0x054079b5) /* 0.328241070 */, 14 },
+ /* 629 */ { MAD_F(0x054354a8) /* 0.328938157 */, 14 },
+ /* 630 */ { MAD_F(0x05462ffe) /* 0.329635614 */, 14 },
+ /* 631 */ { MAD_F(0x05490bb7) /* 0.330333440 */, 14 },
+ /* 632 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 14 },
+ /* 633 */ { MAD_F(0x054ec453) /* 0.331730198 */, 14 },
+ /* 634 */ { MAD_F(0x0551a134) /* 0.332429129 */, 14 },
+ /* 635 */ { MAD_F(0x05547e79) /* 0.333128427 */, 14 },
+ /* 636 */ { MAD_F(0x05575c20) /* 0.333828093 */, 14 },
+ /* 637 */ { MAD_F(0x055a3a2a) /* 0.334528126 */, 14 },
+ /* 638 */ { MAD_F(0x055d1896) /* 0.335228525 */, 14 },
+ /* 639 */ { MAD_F(0x055ff764) /* 0.335929290 */, 14 },
+
+ /* 640 */ { MAD_F(0x0562d694) /* 0.336630420 */, 14 },
+ /* 641 */ { MAD_F(0x0565b627) /* 0.337331916 */, 14 },
+ /* 642 */ { MAD_F(0x0568961b) /* 0.338033777 */, 14 },
+ /* 643 */ { MAD_F(0x056b7671) /* 0.338736002 */, 14 },
+ /* 644 */ { MAD_F(0x056e5729) /* 0.339438592 */, 14 },
+ /* 645 */ { MAD_F(0x05713843) /* 0.340141545 */, 14 },
+ /* 646 */ { MAD_F(0x057419be) /* 0.340844862 */, 14 },
+ /* 647 */ { MAD_F(0x0576fb9a) /* 0.341548541 */, 14 },
+ /* 648 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 14 },
+ /* 649 */ { MAD_F(0x057cc077) /* 0.342956988 */, 14 },
+ /* 650 */ { MAD_F(0x057fa378) /* 0.343661754 */, 14 },
+ /* 651 */ { MAD_F(0x058286d9) /* 0.344366882 */, 14 },
+ /* 652 */ { MAD_F(0x05856a9b) /* 0.345072371 */, 14 },
+ /* 653 */ { MAD_F(0x05884ebe) /* 0.345778221 */, 14 },
+ /* 654 */ { MAD_F(0x058b3342) /* 0.346484431 */, 14 },
+ /* 655 */ { MAD_F(0x058e1827) /* 0.347191002 */, 14 },
+
+ /* 656 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 14 },
+ /* 657 */ { MAD_F(0x0593e311) /* 0.348605221 */, 14 },
+ /* 658 */ { MAD_F(0x0596c917) /* 0.349312869 */, 14 },
+ /* 659 */ { MAD_F(0x0599af7d) /* 0.350020876 */, 14 },
+ /* 660 */ { MAD_F(0x059c9643) /* 0.350729240 */, 14 },
+ /* 661 */ { MAD_F(0x059f7d6a) /* 0.351437963 */, 14 },
+ /* 662 */ { MAD_F(0x05a264f0) /* 0.352147044 */, 14 },
+ /* 663 */ { MAD_F(0x05a54cd6) /* 0.352856481 */, 14 },
+ /* 664 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 14 },
+ /* 665 */ { MAD_F(0x05ab1dc2) /* 0.354276426 */, 14 },
+ /* 666 */ { MAD_F(0x05ae06c7) /* 0.354986932 */, 14 },
+ /* 667 */ { MAD_F(0x05b0f02b) /* 0.355697795 */, 14 },
+ /* 668 */ { MAD_F(0x05b3d9f0) /* 0.356409012 */, 14 },
+ /* 669 */ { MAD_F(0x05b6c413) /* 0.357120585 */, 14 },
+ /* 670 */ { MAD_F(0x05b9ae95) /* 0.357832512 */, 14 },
+ /* 671 */ { MAD_F(0x05bc9977) /* 0.358544794 */, 14 },
+
+ /* 672 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 14 },
+ /* 673 */ { MAD_F(0x05c27057) /* 0.359970419 */, 14 },
+ /* 674 */ { MAD_F(0x05c55c56) /* 0.360683761 */, 14 },
+ /* 675 */ { MAD_F(0x05c848b3) /* 0.361397456 */, 14 },
+ /* 676 */ { MAD_F(0x05cb356e) /* 0.362111504 */, 14 },
+ /* 677 */ { MAD_F(0x05ce2289) /* 0.362825904 */, 14 },
+ /* 678 */ { MAD_F(0x05d11001) /* 0.363540655 */, 14 },
+ /* 679 */ { MAD_F(0x05d3fdd8) /* 0.364255759 */, 14 },
+ /* 680 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 14 },
+ /* 681 */ { MAD_F(0x05d9daa1) /* 0.365687018 */, 14 },
+ /* 682 */ { MAD_F(0x05dcc993) /* 0.366403174 */, 14 },
+ /* 683 */ { MAD_F(0x05dfb8e2) /* 0.367119680 */, 14 },
+ /* 684 */ { MAD_F(0x05e2a890) /* 0.367836535 */, 14 },
+ /* 685 */ { MAD_F(0x05e5989b) /* 0.368553740 */, 14 },
+ /* 686 */ { MAD_F(0x05e88904) /* 0.369271294 */, 14 },
+ /* 687 */ { MAD_F(0x05eb79cb) /* 0.369989197 */, 14 },
+
+ /* 688 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 14 },
+ /* 689 */ { MAD_F(0x05f15c70) /* 0.371426047 */, 14 },
+ /* 690 */ { MAD_F(0x05f44e4f) /* 0.372144994 */, 14 },
+ /* 691 */ { MAD_F(0x05f7408b) /* 0.372864289 */, 14 },
+ /* 692 */ { MAD_F(0x05fa3324) /* 0.373583930 */, 14 },
+ /* 693 */ { MAD_F(0x05fd261b) /* 0.374303918 */, 14 },
+ /* 694 */ { MAD_F(0x0600196e) /* 0.375024253 */, 14 },
+ /* 695 */ { MAD_F(0x06030d1e) /* 0.375744934 */, 14 },
+ /* 696 */ { MAD_F(0x0606012b) /* 0.376465960 */, 14 },
+ /* 697 */ { MAD_F(0x0608f595) /* 0.377187332 */, 14 },
+ /* 698 */ { MAD_F(0x060bea5c) /* 0.377909049 */, 14 },
+ /* 699 */ { MAD_F(0x060edf7f) /* 0.378631110 */, 14 },
+ /* 700 */ { MAD_F(0x0611d4fe) /* 0.379353516 */, 14 },
+ /* 701 */ { MAD_F(0x0614cada) /* 0.380076266 */, 14 },
+ /* 702 */ { MAD_F(0x0617c112) /* 0.380799360 */, 14 },
+ /* 703 */ { MAD_F(0x061ab7a6) /* 0.381522798 */, 14 },
+
+ /* 704 */ { MAD_F(0x061dae96) /* 0.382246578 */, 14 },
+ /* 705 */ { MAD_F(0x0620a5e3) /* 0.382970701 */, 14 },
+ /* 706 */ { MAD_F(0x06239d8b) /* 0.383695167 */, 14 },
+ /* 707 */ { MAD_F(0x0626958f) /* 0.384419975 */, 14 },
+ /* 708 */ { MAD_F(0x06298def) /* 0.385145124 */, 14 },
+ /* 709 */ { MAD_F(0x062c86aa) /* 0.385870615 */, 14 },
+ /* 710 */ { MAD_F(0x062f7fc1) /* 0.386596448 */, 14 },
+ /* 711 */ { MAD_F(0x06327934) /* 0.387322621 */, 14 },
+ /* 712 */ { MAD_F(0x06357302) /* 0.388049134 */, 14 },
+ /* 713 */ { MAD_F(0x06386d2b) /* 0.388775988 */, 14 },
+ /* 714 */ { MAD_F(0x063b67b0) /* 0.389503182 */, 14 },
+ /* 715 */ { MAD_F(0x063e6290) /* 0.390230715 */, 14 },
+ /* 716 */ { MAD_F(0x06415dcb) /* 0.390958588 */, 14 },
+ /* 717 */ { MAD_F(0x06445960) /* 0.391686799 */, 14 },
+ /* 718 */ { MAD_F(0x06475551) /* 0.392415349 */, 14 },
+ /* 719 */ { MAD_F(0x064a519c) /* 0.393144238 */, 14 },
+
+ /* 720 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 14 },
+ /* 721 */ { MAD_F(0x06504b44) /* 0.394603028 */, 14 },
+ /* 722 */ { MAD_F(0x0653489f) /* 0.395332930 */, 14 },
+ /* 723 */ { MAD_F(0x06564655) /* 0.396063168 */, 14 },
+ /* 724 */ { MAD_F(0x06594465) /* 0.396793743 */, 14 },
+ /* 725 */ { MAD_F(0x065c42d0) /* 0.397524655 */, 14 },
+ /* 726 */ { MAD_F(0x065f4195) /* 0.398255903 */, 14 },
+ /* 727 */ { MAD_F(0x066240b4) /* 0.398987487 */, 14 },
+ /* 728 */ { MAD_F(0x0665402d) /* 0.399719406 */, 14 },
+ /* 729 */ { MAD_F(0x06684000) /* 0.400451660 */, 14 },
+ /* 730 */ { MAD_F(0x066b402d) /* 0.401184249 */, 14 },
+ /* 731 */ { MAD_F(0x066e40b3) /* 0.401917173 */, 14 },
+ /* 732 */ { MAD_F(0x06714194) /* 0.402650431 */, 14 },
+ /* 733 */ { MAD_F(0x067442ce) /* 0.403384024 */, 14 },
+ /* 734 */ { MAD_F(0x06774462) /* 0.404117949 */, 14 },
+ /* 735 */ { MAD_F(0x067a464f) /* 0.404852209 */, 14 },
+
+ /* 736 */ { MAD_F(0x067d4896) /* 0.405586801 */, 14 },
+ /* 737 */ { MAD_F(0x06804b36) /* 0.406321726 */, 14 },
+ /* 738 */ { MAD_F(0x06834e2f) /* 0.407056983 */, 14 },
+ /* 739 */ { MAD_F(0x06865181) /* 0.407792573 */, 14 },
+ /* 740 */ { MAD_F(0x0689552c) /* 0.408528495 */, 14 },
+ /* 741 */ { MAD_F(0x068c5931) /* 0.409264748 */, 14 },
+ /* 742 */ { MAD_F(0x068f5d8e) /* 0.410001332 */, 14 },
+ /* 743 */ { MAD_F(0x06926245) /* 0.410738247 */, 14 },
+ /* 744 */ { MAD_F(0x06956753) /* 0.411475493 */, 14 },
+ /* 745 */ { MAD_F(0x06986cbb) /* 0.412213070 */, 14 },
+ /* 746 */ { MAD_F(0x069b727b) /* 0.412950976 */, 14 },
+ /* 747 */ { MAD_F(0x069e7894) /* 0.413689213 */, 14 },
+ /* 748 */ { MAD_F(0x06a17f05) /* 0.414427779 */, 14 },
+ /* 749 */ { MAD_F(0x06a485cf) /* 0.415166674 */, 14 },
+ /* 750 */ { MAD_F(0x06a78cf1) /* 0.415905897 */, 14 },
+ /* 751 */ { MAD_F(0x06aa946b) /* 0.416645450 */, 14 },
+
+ /* 752 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 14 },
+ /* 753 */ { MAD_F(0x06b0a468) /* 0.418125540 */, 14 },
+ /* 754 */ { MAD_F(0x06b3acea) /* 0.418866076 */, 14 },
+ /* 755 */ { MAD_F(0x06b6b5c4) /* 0.419606940 */, 14 },
+ /* 756 */ { MAD_F(0x06b9bef6) /* 0.420348132 */, 14 },
+ /* 757 */ { MAD_F(0x06bcc880) /* 0.421089650 */, 14 },
+ /* 758 */ { MAD_F(0x06bfd261) /* 0.421831494 */, 14 },
+ /* 759 */ { MAD_F(0x06c2dc9a) /* 0.422573665 */, 14 },
+ /* 760 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 14 },
+ /* 761 */ { MAD_F(0x06c8f213) /* 0.424058985 */, 14 },
+ /* 762 */ { MAD_F(0x06cbfd52) /* 0.424802133 */, 14 },
+ /* 763 */ { MAD_F(0x06cf08e9) /* 0.425545607 */, 14 },
+ /* 764 */ { MAD_F(0x06d214d7) /* 0.426289405 */, 14 },
+ /* 765 */ { MAD_F(0x06d5211c) /* 0.427033528 */, 14 },
+ /* 766 */ { MAD_F(0x06d82db8) /* 0.427777975 */, 14 },
+ /* 767 */ { MAD_F(0x06db3aaa) /* 0.428522746 */, 14 },
+
+ /* 768 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 14 },
+ /* 769 */ { MAD_F(0x06e15595) /* 0.430013259 */, 14 },
+ /* 770 */ { MAD_F(0x06e4638d) /* 0.430759001 */, 14 },
+ /* 771 */ { MAD_F(0x06e771db) /* 0.431505065 */, 14 },
+ /* 772 */ { MAD_F(0x06ea807f) /* 0.432251452 */, 14 },
+ /* 773 */ { MAD_F(0x06ed8f7b) /* 0.432998162 */, 14 },
+ /* 774 */ { MAD_F(0x06f09ecc) /* 0.433745193 */, 14 },
+ /* 775 */ { MAD_F(0x06f3ae75) /* 0.434492546 */, 14 },
+ /* 776 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 14 },
+ /* 777 */ { MAD_F(0x06f9cec8) /* 0.435988217 */, 14 },
+ /* 778 */ { MAD_F(0x06fcdf72) /* 0.436736534 */, 14 },
+ /* 779 */ { MAD_F(0x06fff073) /* 0.437485172 */, 14 },
+ /* 780 */ { MAD_F(0x070301ca) /* 0.438234130 */, 14 },
+ /* 781 */ { MAD_F(0x07061377) /* 0.438983408 */, 14 },
+ /* 782 */ { MAD_F(0x0709257a) /* 0.439733006 */, 14 },
+ /* 783 */ { MAD_F(0x070c37d2) /* 0.440482924 */, 14 },
+
+ /* 784 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 14 },
+ /* 785 */ { MAD_F(0x07125d84) /* 0.441983717 */, 14 },
+ /* 786 */ { MAD_F(0x071570de) /* 0.442734592 */, 14 },
+ /* 787 */ { MAD_F(0x0718848d) /* 0.443485785 */, 14 },
+ /* 788 */ { MAD_F(0x071b9891) /* 0.444237296 */, 14 },
+ /* 789 */ { MAD_F(0x071eaceb) /* 0.444989126 */, 14 },
+ /* 790 */ { MAD_F(0x0721c19a) /* 0.445741273 */, 14 },
+ /* 791 */ { MAD_F(0x0724d69e) /* 0.446493738 */, 14 },
+ /* 792 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 14 },
+ /* 793 */ { MAD_F(0x072b01a6) /* 0.447999618 */, 14 },
+ /* 794 */ { MAD_F(0x072e17a9) /* 0.448753033 */, 14 },
+ /* 795 */ { MAD_F(0x07312e01) /* 0.449506765 */, 14 },
+ /* 796 */ { MAD_F(0x073444ae) /* 0.450260813 */, 14 },
+ /* 797 */ { MAD_F(0x07375bb0) /* 0.451015176 */, 14 },
+ /* 798 */ { MAD_F(0x073a7307) /* 0.451769856 */, 14 },
+ /* 799 */ { MAD_F(0x073d8ab2) /* 0.452524850 */, 14 },
+
+ /* 800 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 14 },
+ /* 801 */ { MAD_F(0x0743bb06) /* 0.454035784 */, 14 },
+ /* 802 */ { MAD_F(0x0746d3af) /* 0.454791723 */, 14 },
+ /* 803 */ { MAD_F(0x0749ecac) /* 0.455547976 */, 14 },
+ /* 804 */ { MAD_F(0x074d05fe) /* 0.456304543 */, 14 },
+ /* 805 */ { MAD_F(0x07501fa3) /* 0.457061423 */, 14 },
+ /* 806 */ { MAD_F(0x0753399d) /* 0.457818618 */, 14 },
+ /* 807 */ { MAD_F(0x075653eb) /* 0.458576125 */, 14 },
+ /* 808 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 14 },
+ /* 809 */ { MAD_F(0x075c8983) /* 0.460092079 */, 14 },
+ /* 810 */ { MAD_F(0x075fa4cc) /* 0.460850524 */, 14 },
+ /* 811 */ { MAD_F(0x0762c06a) /* 0.461609282 */, 14 },
+ /* 812 */ { MAD_F(0x0765dc5b) /* 0.462368352 */, 14 },
+ /* 813 */ { MAD_F(0x0768f8a0) /* 0.463127733 */, 14 },
+ /* 814 */ { MAD_F(0x076c1538) /* 0.463887426 */, 14 },
+ /* 815 */ { MAD_F(0x076f3224) /* 0.464647430 */, 14 },
+
+ /* 816 */ { MAD_F(0x07724f64) /* 0.465407744 */, 14 },
+ /* 817 */ { MAD_F(0x07756cf7) /* 0.466168370 */, 14 },
+ /* 818 */ { MAD_F(0x07788add) /* 0.466929306 */, 14 },
+ /* 819 */ { MAD_F(0x077ba916) /* 0.467690552 */, 14 },
+ /* 820 */ { MAD_F(0x077ec7a3) /* 0.468452108 */, 14 },
+ /* 821 */ { MAD_F(0x0781e683) /* 0.469213973 */, 14 },
+ /* 822 */ { MAD_F(0x078505b5) /* 0.469976148 */, 14 },
+ /* 823 */ { MAD_F(0x0788253b) /* 0.470738632 */, 14 },
+ /* 824 */ { MAD_F(0x078b4514) /* 0.471501425 */, 14 },
+ /* 825 */ { MAD_F(0x078e653f) /* 0.472264527 */, 14 },
+ /* 826 */ { MAD_F(0x079185be) /* 0.473027937 */, 14 },
+ /* 827 */ { MAD_F(0x0794a68f) /* 0.473791655 */, 14 },
+ /* 828 */ { MAD_F(0x0797c7b2) /* 0.474555681 */, 14 },
+ /* 829 */ { MAD_F(0x079ae929) /* 0.475320014 */, 14 },
+ /* 830 */ { MAD_F(0x079e0af1) /* 0.476084655 */, 14 },
+ /* 831 */ { MAD_F(0x07a12d0c) /* 0.476849603 */, 14 },
+
+ /* 832 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 14 },
+ /* 833 */ { MAD_F(0x07a7723a) /* 0.478380420 */, 14 },
+ /* 834 */ { MAD_F(0x07aa954c) /* 0.479146288 */, 14 },
+ /* 835 */ { MAD_F(0x07adb8b0) /* 0.479912463 */, 14 },
+ /* 836 */ { MAD_F(0x07b0dc67) /* 0.480678943 */, 14 },
+ /* 837 */ { MAD_F(0x07b4006f) /* 0.481445729 */, 14 },
+ /* 838 */ { MAD_F(0x07b724ca) /* 0.482212820 */, 14 },
+ /* 839 */ { MAD_F(0x07ba4976) /* 0.482980216 */, 14 },
+ /* 840 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 14 },
+ /* 841 */ { MAD_F(0x07c093c5) /* 0.484515924 */, 14 },
+ /* 842 */ { MAD_F(0x07c3b967) /* 0.485284235 */, 14 },
+ /* 843 */ { MAD_F(0x07c6df5a) /* 0.486052849 */, 14 },
+ /* 844 */ { MAD_F(0x07ca059f) /* 0.486821768 */, 14 },
+ /* 845 */ { MAD_F(0x07cd2c36) /* 0.487590991 */, 14 },
+ /* 846 */ { MAD_F(0x07d0531e) /* 0.488360517 */, 14 },
+ /* 847 */ { MAD_F(0x07d37a57) /* 0.489130346 */, 14 },
+
+ /* 848 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 14 },
+ /* 849 */ { MAD_F(0x07d9c9be) /* 0.490670914 */, 14 },
+ /* 850 */ { MAD_F(0x07dcf1ec) /* 0.491441651 */, 14 },
+ /* 851 */ { MAD_F(0x07e01a6a) /* 0.492212691 */, 14 },
+ /* 852 */ { MAD_F(0x07e3433a) /* 0.492984033 */, 14 },
+ /* 853 */ { MAD_F(0x07e66c5a) /* 0.493755677 */, 14 },
+ /* 854 */ { MAD_F(0x07e995cc) /* 0.494527623 */, 14 },
+ /* 855 */ { MAD_F(0x07ecbf8e) /* 0.495299870 */, 14 },
+ /* 856 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 14 },
+ /* 857 */ { MAD_F(0x07f31405) /* 0.496845266 */, 14 },
+ /* 858 */ { MAD_F(0x07f63eba) /* 0.497618416 */, 14 },
+ /* 859 */ { MAD_F(0x07f969c0) /* 0.498391866 */, 14 },
+ /* 860 */ { MAD_F(0x07fc9516) /* 0.499165616 */, 14 },
+ /* 861 */ { MAD_F(0x07ffc0bc) /* 0.499939666 */, 14 },
+ /* 862 */ { MAD_F(0x04017659) /* 0.250357008 */, 15 },
+ /* 863 */ { MAD_F(0x04030c7d) /* 0.250744333 */, 15 },
+
+ /* 864 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 15 },
+ /* 865 */ { MAD_F(0x0406393d) /* 0.251519431 */, 15 },
+ /* 866 */ { MAD_F(0x0407cfd9) /* 0.251907204 */, 15 },
+ /* 867 */ { MAD_F(0x0409669d) /* 0.252295127 */, 15 },
+ /* 868 */ { MAD_F(0x040afd89) /* 0.252683198 */, 15 },
+ /* 869 */ { MAD_F(0x040c949e) /* 0.253071419 */, 15 },
+ /* 870 */ { MAD_F(0x040e2bda) /* 0.253459789 */, 15 },
+ /* 871 */ { MAD_F(0x040fc33e) /* 0.253848307 */, 15 },
+ /* 872 */ { MAD_F(0x04115aca) /* 0.254236974 */, 15 },
+ /* 873 */ { MAD_F(0x0412f27e) /* 0.254625790 */, 15 },
+ /* 874 */ { MAD_F(0x04148a5a) /* 0.255014755 */, 15 },
+ /* 875 */ { MAD_F(0x0416225d) /* 0.255403867 */, 15 },
+ /* 876 */ { MAD_F(0x0417ba89) /* 0.255793128 */, 15 },
+ /* 877 */ { MAD_F(0x041952dc) /* 0.256182537 */, 15 },
+ /* 878 */ { MAD_F(0x041aeb57) /* 0.256572095 */, 15 },
+ /* 879 */ { MAD_F(0x041c83fa) /* 0.256961800 */, 15 },
+
+ /* 880 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 15 },
+ /* 881 */ { MAD_F(0x041fb5b6) /* 0.257741653 */, 15 },
+ /* 882 */ { MAD_F(0x04214ed0) /* 0.258131801 */, 15 },
+ /* 883 */ { MAD_F(0x0422e811) /* 0.258522097 */, 15 },
+ /* 884 */ { MAD_F(0x04248179) /* 0.258912540 */, 15 },
+ /* 885 */ { MAD_F(0x04261b0a) /* 0.259303130 */, 15 },
+ /* 886 */ { MAD_F(0x0427b4c2) /* 0.259693868 */, 15 },
+ /* 887 */ { MAD_F(0x04294ea1) /* 0.260084752 */, 15 },
+ /* 888 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 15 },
+ /* 889 */ { MAD_F(0x042c82d6) /* 0.260866961 */, 15 },
+ /* 890 */ { MAD_F(0x042e1d2b) /* 0.261258286 */, 15 },
+ /* 891 */ { MAD_F(0x042fb7a8) /* 0.261649758 */, 15 },
+ /* 892 */ { MAD_F(0x0431524c) /* 0.262041376 */, 15 },
+ /* 893 */ { MAD_F(0x0432ed17) /* 0.262433140 */, 15 },
+ /* 894 */ { MAD_F(0x0434880a) /* 0.262825051 */, 15 },
+ /* 895 */ { MAD_F(0x04362324) /* 0.263217107 */, 15 },
+
+ /* 896 */ { MAD_F(0x0437be65) /* 0.263609310 */, 15 },
+ /* 897 */ { MAD_F(0x043959cd) /* 0.264001659 */, 15 },
+ /* 898 */ { MAD_F(0x043af55d) /* 0.264394153 */, 15 },
+ /* 899 */ { MAD_F(0x043c9113) /* 0.264786794 */, 15 },
+ /* 900 */ { MAD_F(0x043e2cf1) /* 0.265179580 */, 15 },
+ /* 901 */ { MAD_F(0x043fc8f6) /* 0.265572511 */, 15 },
+ /* 902 */ { MAD_F(0x04416522) /* 0.265965588 */, 15 },
+ /* 903 */ { MAD_F(0x04430174) /* 0.266358810 */, 15 },
+ /* 904 */ { MAD_F(0x04449dee) /* 0.266752177 */, 15 },
+ /* 905 */ { MAD_F(0x04463a8f) /* 0.267145689 */, 15 },
+ /* 906 */ { MAD_F(0x0447d756) /* 0.267539347 */, 15 },
+ /* 907 */ { MAD_F(0x04497445) /* 0.267933149 */, 15 },
+ /* 908 */ { MAD_F(0x044b115a) /* 0.268327096 */, 15 },
+ /* 909 */ { MAD_F(0x044cae96) /* 0.268721187 */, 15 },
+ /* 910 */ { MAD_F(0x044e4bf9) /* 0.269115423 */, 15 },
+ /* 911 */ { MAD_F(0x044fe983) /* 0.269509804 */, 15 },
+
+ /* 912 */ { MAD_F(0x04518733) /* 0.269904329 */, 15 },
+ /* 913 */ { MAD_F(0x0453250a) /* 0.270298998 */, 15 },
+ /* 914 */ { MAD_F(0x0454c308) /* 0.270693811 */, 15 },
+ /* 915 */ { MAD_F(0x0456612d) /* 0.271088768 */, 15 },
+ /* 916 */ { MAD_F(0x0457ff78) /* 0.271483869 */, 15 },
+ /* 917 */ { MAD_F(0x04599dea) /* 0.271879114 */, 15 },
+ /* 918 */ { MAD_F(0x045b3c82) /* 0.272274503 */, 15 },
+ /* 919 */ { MAD_F(0x045cdb41) /* 0.272670035 */, 15 },
+ /* 920 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 15 },
+ /* 921 */ { MAD_F(0x04601932) /* 0.273461530 */, 15 },
+ /* 922 */ { MAD_F(0x0461b864) /* 0.273857492 */, 15 },
+ /* 923 */ { MAD_F(0x046357bd) /* 0.274253597 */, 15 },
+ /* 924 */ { MAD_F(0x0464f73c) /* 0.274649846 */, 15 },
+ /* 925 */ { MAD_F(0x046696e2) /* 0.275046238 */, 15 },
+ /* 926 */ { MAD_F(0x046836ae) /* 0.275442772 */, 15 },
+ /* 927 */ { MAD_F(0x0469d6a0) /* 0.275839449 */, 15 },
+
+ /* 928 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 15 },
+ /* 929 */ { MAD_F(0x046d16f7) /* 0.276633232 */, 15 },
+ /* 930 */ { MAD_F(0x046eb75c) /* 0.277030337 */, 15 },
+ /* 931 */ { MAD_F(0x047057e8) /* 0.277427584 */, 15 },
+ /* 932 */ { MAD_F(0x0471f899) /* 0.277824973 */, 15 },
+ /* 933 */ { MAD_F(0x04739971) /* 0.278222505 */, 15 },
+ /* 934 */ { MAD_F(0x04753a6f) /* 0.278620179 */, 15 },
+ /* 935 */ { MAD_F(0x0476db92) /* 0.279017995 */, 15 },
+ /* 936 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 15 },
+ /* 937 */ { MAD_F(0x047a1e4c) /* 0.279814051 */, 15 },
+ /* 938 */ { MAD_F(0x047bbfe2) /* 0.280212292 */, 15 },
+ /* 939 */ { MAD_F(0x047d619e) /* 0.280610675 */, 15 },
+ /* 940 */ { MAD_F(0x047f0380) /* 0.281009199 */, 15 },
+ /* 941 */ { MAD_F(0x0480a588) /* 0.281407864 */, 15 },
+ /* 942 */ { MAD_F(0x048247b6) /* 0.281806670 */, 15 },
+ /* 943 */ { MAD_F(0x0483ea0a) /* 0.282205618 */, 15 },
+
+ /* 944 */ { MAD_F(0x04858c83) /* 0.282604707 */, 15 },
+ /* 945 */ { MAD_F(0x04872f22) /* 0.283003936 */, 15 },
+ /* 946 */ { MAD_F(0x0488d1e8) /* 0.283403307 */, 15 },
+ /* 947 */ { MAD_F(0x048a74d3) /* 0.283802818 */, 15 },
+ /* 948 */ { MAD_F(0x048c17e3) /* 0.284202470 */, 15 },
+ /* 949 */ { MAD_F(0x048dbb1a) /* 0.284602263 */, 15 },
+ /* 950 */ { MAD_F(0x048f5e76) /* 0.285002195 */, 15 },
+ /* 951 */ { MAD_F(0x049101f8) /* 0.285402269 */, 15 },
+ /* 952 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 15 },
+ /* 953 */ { MAD_F(0x0494496c) /* 0.286202836 */, 15 },
+ /* 954 */ { MAD_F(0x0495ed5f) /* 0.286603329 */, 15 },
+ /* 955 */ { MAD_F(0x04979177) /* 0.287003963 */, 15 },
+ /* 956 */ { MAD_F(0x049935b5) /* 0.287404737 */, 15 },
+ /* 957 */ { MAD_F(0x049ada19) /* 0.287805650 */, 15 },
+ /* 958 */ { MAD_F(0x049c7ea1) /* 0.288206703 */, 15 },
+ /* 959 */ { MAD_F(0x049e2350) /* 0.288607895 */, 15 },
+
+ /* 960 */ { MAD_F(0x049fc824) /* 0.289009227 */, 15 },
+ /* 961 */ { MAD_F(0x04a16d1d) /* 0.289410699 */, 15 },
+ /* 962 */ { MAD_F(0x04a3123b) /* 0.289812309 */, 15 },
+ /* 963 */ { MAD_F(0x04a4b77f) /* 0.290214059 */, 15 },
+ /* 964 */ { MAD_F(0x04a65ce8) /* 0.290615948 */, 15 },
+ /* 965 */ { MAD_F(0x04a80277) /* 0.291017976 */, 15 },
+ /* 966 */ { MAD_F(0x04a9a82b) /* 0.291420143 */, 15 },
+ /* 967 */ { MAD_F(0x04ab4e04) /* 0.291822449 */, 15 },
+ /* 968 */ { MAD_F(0x04acf402) /* 0.292224893 */, 15 },
+ /* 969 */ { MAD_F(0x04ae9a26) /* 0.292627476 */, 15 },
+ /* 970 */ { MAD_F(0x04b0406e) /* 0.293030197 */, 15 },
+ /* 971 */ { MAD_F(0x04b1e6dc) /* 0.293433057 */, 15 },
+ /* 972 */ { MAD_F(0x04b38d6f) /* 0.293836055 */, 15 },
+ /* 973 */ { MAD_F(0x04b53427) /* 0.294239192 */, 15 },
+ /* 974 */ { MAD_F(0x04b6db05) /* 0.294642466 */, 15 },
+ /* 975 */ { MAD_F(0x04b88207) /* 0.295045879 */, 15 },
+
+ /* 976 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 15 },
+ /* 977 */ { MAD_F(0x04bbd07a) /* 0.295853118 */, 15 },
+ /* 978 */ { MAD_F(0x04bd77ec) /* 0.296256944 */, 15 },
+ /* 979 */ { MAD_F(0x04bf1f82) /* 0.296660907 */, 15 },
+ /* 980 */ { MAD_F(0x04c0c73d) /* 0.297065009 */, 15 },
+ /* 981 */ { MAD_F(0x04c26f1d) /* 0.297469248 */, 15 },
+ /* 982 */ { MAD_F(0x04c41722) /* 0.297873624 */, 15 },
+ /* 983 */ { MAD_F(0x04c5bf4c) /* 0.298278137 */, 15 },
+ /* 984 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 15 },
+ /* 985 */ { MAD_F(0x04c9100d) /* 0.299087576 */, 15 },
+ /* 986 */ { MAD_F(0x04cab8a6) /* 0.299492500 */, 15 },
+ /* 987 */ { MAD_F(0x04cc6163) /* 0.299897562 */, 15 },
+ /* 988 */ { MAD_F(0x04ce0a44) /* 0.300302761 */, 15 },
+ /* 989 */ { MAD_F(0x04cfb34b) /* 0.300708096 */, 15 },
+ /* 990 */ { MAD_F(0x04d15c76) /* 0.301113568 */, 15 },
+ /* 991 */ { MAD_F(0x04d305c5) /* 0.301519176 */, 15 },
+
+ /* 992 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 15 },
+ /* 993 */ { MAD_F(0x04d658d2) /* 0.302330802 */, 15 },
+ /* 994 */ { MAD_F(0x04d80290) /* 0.302736820 */, 15 },
+ /* 995 */ { MAD_F(0x04d9ac72) /* 0.303142973 */, 15 },
+ /* 996 */ { MAD_F(0x04db5679) /* 0.303549263 */, 15 },
+ /* 997 */ { MAD_F(0x04dd00a4) /* 0.303955689 */, 15 },
+ /* 998 */ { MAD_F(0x04deaaf3) /* 0.304362251 */, 15 },
+ /* 999 */ { MAD_F(0x04e05567) /* 0.304768948 */, 15 },
+ /* 1000 */ { MAD_F(0x04e20000) /* 0.305175781 */, 15 },
+ /* 1001 */ { MAD_F(0x04e3aabd) /* 0.305582750 */, 15 },
+ /* 1002 */ { MAD_F(0x04e5559e) /* 0.305989854 */, 15 },
+ /* 1003 */ { MAD_F(0x04e700a3) /* 0.306397094 */, 15 },
+ /* 1004 */ { MAD_F(0x04e8abcd) /* 0.306804470 */, 15 },
+ /* 1005 */ { MAD_F(0x04ea571c) /* 0.307211980 */, 15 },
+ /* 1006 */ { MAD_F(0x04ec028e) /* 0.307619626 */, 15 },
+ /* 1007 */ { MAD_F(0x04edae25) /* 0.308027406 */, 15 },
+
+ /* 1008 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 15 },
+ /* 1009 */ { MAD_F(0x04f105bf) /* 0.308843373 */, 15 },
+ /* 1010 */ { MAD_F(0x04f2b1c3) /* 0.309251558 */, 15 },
+ /* 1011 */ { MAD_F(0x04f45dea) /* 0.309659879 */, 15 },
+ /* 1012 */ { MAD_F(0x04f60a36) /* 0.310068333 */, 15 },
+ /* 1013 */ { MAD_F(0x04f7b6a6) /* 0.310476923 */, 15 },
+ /* 1014 */ { MAD_F(0x04f9633a) /* 0.310885647 */, 15 },
+ /* 1015 */ { MAD_F(0x04fb0ff2) /* 0.311294505 */, 15 },
+ /* 1016 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 15 },
+ /* 1017 */ { MAD_F(0x04fe69ce) /* 0.312112625 */, 15 },
+ /* 1018 */ { MAD_F(0x050016f3) /* 0.312521885 */, 15 },
+ /* 1019 */ { MAD_F(0x0501c43b) /* 0.312931280 */, 15 },
+ /* 1020 */ { MAD_F(0x050371a7) /* 0.313340809 */, 15 },
+ /* 1021 */ { MAD_F(0x05051f37) /* 0.313750472 */, 15 },
+ /* 1022 */ { MAD_F(0x0506cceb) /* 0.314160269 */, 15 },
+ /* 1023 */ { MAD_F(0x05087ac2) /* 0.314570199 */, 15 },
+
+ /* 1024 */ { MAD_F(0x050a28be) /* 0.314980262 */, 15 },
+ /* 1025 */ { MAD_F(0x050bd6de) /* 0.315390460 */, 15 },
+ /* 1026 */ { MAD_F(0x050d8521) /* 0.315800790 */, 15 },
+ /* 1027 */ { MAD_F(0x050f3388) /* 0.316211255 */, 15 },
+ /* 1028 */ { MAD_F(0x0510e213) /* 0.316621852 */, 15 },
+ /* 1029 */ { MAD_F(0x051290c2) /* 0.317032582 */, 15 },
+ /* 1030 */ { MAD_F(0x05143f94) /* 0.317443446 */, 15 },
+ /* 1031 */ { MAD_F(0x0515ee8a) /* 0.317854442 */, 15 },
+ /* 1032 */ { MAD_F(0x05179da4) /* 0.318265572 */, 15 },
+ /* 1033 */ { MAD_F(0x05194ce1) /* 0.318676834 */, 15 },
+ /* 1034 */ { MAD_F(0x051afc42) /* 0.319088229 */, 15 },
+ /* 1035 */ { MAD_F(0x051cabc7) /* 0.319499756 */, 15 },
+ /* 1036 */ { MAD_F(0x051e5b6f) /* 0.319911417 */, 15 },
+ /* 1037 */ { MAD_F(0x05200b3a) /* 0.320323209 */, 15 },
+ /* 1038 */ { MAD_F(0x0521bb2a) /* 0.320735134 */, 15 },
+ /* 1039 */ { MAD_F(0x05236b3d) /* 0.321147192 */, 15 },
+
+ /* 1040 */ { MAD_F(0x05251b73) /* 0.321559381 */, 15 },
+ /* 1041 */ { MAD_F(0x0526cbcd) /* 0.321971703 */, 15 },
+ /* 1042 */ { MAD_F(0x05287c4a) /* 0.322384156 */, 15 },
+ /* 1043 */ { MAD_F(0x052a2cea) /* 0.322796742 */, 15 },
+ /* 1044 */ { MAD_F(0x052bddae) /* 0.323209460 */, 15 },
+ /* 1045 */ { MAD_F(0x052d8e96) /* 0.323622309 */, 15 },
+ /* 1046 */ { MAD_F(0x052f3fa1) /* 0.324035290 */, 15 },
+ /* 1047 */ { MAD_F(0x0530f0cf) /* 0.324448403 */, 15 },
+ /* 1048 */ { MAD_F(0x0532a220) /* 0.324861647 */, 15 },
+ /* 1049 */ { MAD_F(0x05345395) /* 0.325275023 */, 15 },
+ /* 1050 */ { MAD_F(0x0536052d) /* 0.325688530 */, 15 },
+ /* 1051 */ { MAD_F(0x0537b6e8) /* 0.326102168 */, 15 },
+ /* 1052 */ { MAD_F(0x053968c6) /* 0.326515938 */, 15 },
+ /* 1053 */ { MAD_F(0x053b1ac8) /* 0.326929839 */, 15 },
+ /* 1054 */ { MAD_F(0x053ccced) /* 0.327343870 */, 15 },
+ /* 1055 */ { MAD_F(0x053e7f35) /* 0.327758033 */, 15 },
+
+ /* 1056 */ { MAD_F(0x054031a0) /* 0.328172327 */, 15 },
+ /* 1057 */ { MAD_F(0x0541e42e) /* 0.328586751 */, 15 },
+ /* 1058 */ { MAD_F(0x054396df) /* 0.329001306 */, 15 },
+ /* 1059 */ { MAD_F(0x054549b4) /* 0.329415992 */, 15 },
+ /* 1060 */ { MAD_F(0x0546fcab) /* 0.329830808 */, 15 },
+ /* 1061 */ { MAD_F(0x0548afc6) /* 0.330245755 */, 15 },
+ /* 1062 */ { MAD_F(0x054a6303) /* 0.330660832 */, 15 },
+ /* 1063 */ { MAD_F(0x054c1663) /* 0.331076039 */, 15 },
+ /* 1064 */ { MAD_F(0x054dc9e7) /* 0.331491377 */, 15 },
+ /* 1065 */ { MAD_F(0x054f7d8d) /* 0.331906845 */, 15 },
+ /* 1066 */ { MAD_F(0x05513156) /* 0.332322443 */, 15 },
+ /* 1067 */ { MAD_F(0x0552e542) /* 0.332738170 */, 15 },
+ /* 1068 */ { MAD_F(0x05549951) /* 0.333154028 */, 15 },
+ /* 1069 */ { MAD_F(0x05564d83) /* 0.333570016 */, 15 },
+ /* 1070 */ { MAD_F(0x055801d8) /* 0.333986133 */, 15 },
+ /* 1071 */ { MAD_F(0x0559b64f) /* 0.334402380 */, 15 },
+
+ /* 1072 */ { MAD_F(0x055b6ae9) /* 0.334818756 */, 15 },
+ /* 1073 */ { MAD_F(0x055d1fa6) /* 0.335235262 */, 15 },
+ /* 1074 */ { MAD_F(0x055ed486) /* 0.335651898 */, 15 },
+ /* 1075 */ { MAD_F(0x05608988) /* 0.336068662 */, 15 },
+ /* 1076 */ { MAD_F(0x05623ead) /* 0.336485556 */, 15 },
+ /* 1077 */ { MAD_F(0x0563f3f5) /* 0.336902579 */, 15 },
+ /* 1078 */ { MAD_F(0x0565a960) /* 0.337319732 */, 15 },
+ /* 1079 */ { MAD_F(0x05675eed) /* 0.337737013 */, 15 },
+ /* 1080 */ { MAD_F(0x0569149c) /* 0.338154423 */, 15 },
+ /* 1081 */ { MAD_F(0x056aca6f) /* 0.338571962 */, 15 },
+ /* 1082 */ { MAD_F(0x056c8064) /* 0.338989630 */, 15 },
+ /* 1083 */ { MAD_F(0x056e367b) /* 0.339407426 */, 15 },
+ /* 1084 */ { MAD_F(0x056fecb5) /* 0.339825351 */, 15 },
+ /* 1085 */ { MAD_F(0x0571a311) /* 0.340243405 */, 15 },
+ /* 1086 */ { MAD_F(0x05735990) /* 0.340661587 */, 15 },
+ /* 1087 */ { MAD_F(0x05751032) /* 0.341079898 */, 15 },
+
+ /* 1088 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 15 },
+ /* 1089 */ { MAD_F(0x05787ddc) /* 0.341916903 */, 15 },
+ /* 1090 */ { MAD_F(0x057a34e4) /* 0.342335598 */, 15 },
+ /* 1091 */ { MAD_F(0x057bec0f) /* 0.342754421 */, 15 },
+ /* 1092 */ { MAD_F(0x057da35d) /* 0.343173373 */, 15 },
+ /* 1093 */ { MAD_F(0x057f5acc) /* 0.343592452 */, 15 },
+ /* 1094 */ { MAD_F(0x0581125e) /* 0.344011659 */, 15 },
+ /* 1095 */ { MAD_F(0x0582ca12) /* 0.344430993 */, 15 },
+ /* 1096 */ { MAD_F(0x058481e9) /* 0.344850455 */, 15 },
+ /* 1097 */ { MAD_F(0x058639e2) /* 0.345270045 */, 15 },
+ /* 1098 */ { MAD_F(0x0587f1fd) /* 0.345689763 */, 15 },
+ /* 1099 */ { MAD_F(0x0589aa3a) /* 0.346109608 */, 15 },
+ /* 1100 */ { MAD_F(0x058b629a) /* 0.346529580 */, 15 },
+ /* 1101 */ { MAD_F(0x058d1b1b) /* 0.346949679 */, 15 },
+ /* 1102 */ { MAD_F(0x058ed3bf) /* 0.347369906 */, 15 },
+ /* 1103 */ { MAD_F(0x05908c85) /* 0.347790260 */, 15 },
+
+ /* 1104 */ { MAD_F(0x0592456d) /* 0.348210741 */, 15 },
+ /* 1105 */ { MAD_F(0x0593fe77) /* 0.348631348 */, 15 },
+ /* 1106 */ { MAD_F(0x0595b7a3) /* 0.349052083 */, 15 },
+ /* 1107 */ { MAD_F(0x059770f1) /* 0.349472945 */, 15 },
+ /* 1108 */ { MAD_F(0x05992a61) /* 0.349893933 */, 15 },
+ /* 1109 */ { MAD_F(0x059ae3f3) /* 0.350315048 */, 15 },
+ /* 1110 */ { MAD_F(0x059c9da8) /* 0.350736290 */, 15 },
+ /* 1111 */ { MAD_F(0x059e577e) /* 0.351157658 */, 15 },
+ /* 1112 */ { MAD_F(0x05a01176) /* 0.351579152 */, 15 },
+ /* 1113 */ { MAD_F(0x05a1cb90) /* 0.352000773 */, 15 },
+ /* 1114 */ { MAD_F(0x05a385cc) /* 0.352422520 */, 15 },
+ /* 1115 */ { MAD_F(0x05a5402a) /* 0.352844394 */, 15 },
+ /* 1116 */ { MAD_F(0x05a6faa9) /* 0.353266393 */, 15 },
+ /* 1117 */ { MAD_F(0x05a8b54b) /* 0.353688519 */, 15 },
+ /* 1118 */ { MAD_F(0x05aa700e) /* 0.354110771 */, 15 },
+ /* 1119 */ { MAD_F(0x05ac2af3) /* 0.354533148 */, 15 },
+
+ /* 1120 */ { MAD_F(0x05ade5fa) /* 0.354955651 */, 15 },
+ /* 1121 */ { MAD_F(0x05afa123) /* 0.355378281 */, 15 },
+ /* 1122 */ { MAD_F(0x05b15c6d) /* 0.355801035 */, 15 },
+ /* 1123 */ { MAD_F(0x05b317d9) /* 0.356223916 */, 15 },
+ /* 1124 */ { MAD_F(0x05b4d367) /* 0.356646922 */, 15 },
+ /* 1125 */ { MAD_F(0x05b68f16) /* 0.357070053 */, 15 },
+ /* 1126 */ { MAD_F(0x05b84ae7) /* 0.357493310 */, 15 },
+ /* 1127 */ { MAD_F(0x05ba06da) /* 0.357916692 */, 15 },
+ /* 1128 */ { MAD_F(0x05bbc2ef) /* 0.358340200 */, 15 },
+ /* 1129 */ { MAD_F(0x05bd7f25) /* 0.358763832 */, 15 },
+ /* 1130 */ { MAD_F(0x05bf3b7c) /* 0.359187590 */, 15 },
+ /* 1131 */ { MAD_F(0x05c0f7f5) /* 0.359611472 */, 15 },
+ /* 1132 */ { MAD_F(0x05c2b490) /* 0.360035480 */, 15 },
+ /* 1133 */ { MAD_F(0x05c4714c) /* 0.360459613 */, 15 },
+ /* 1134 */ { MAD_F(0x05c62e2a) /* 0.360883870 */, 15 },
+ /* 1135 */ { MAD_F(0x05c7eb29) /* 0.361308252 */, 15 },
+
+ /* 1136 */ { MAD_F(0x05c9a84a) /* 0.361732758 */, 15 },
+ /* 1137 */ { MAD_F(0x05cb658c) /* 0.362157390 */, 15 },
+ /* 1138 */ { MAD_F(0x05cd22ef) /* 0.362582145 */, 15 },
+ /* 1139 */ { MAD_F(0x05cee074) /* 0.363007026 */, 15 },
+ /* 1140 */ { MAD_F(0x05d09e1b) /* 0.363432030 */, 15 },
+ /* 1141 */ { MAD_F(0x05d25be2) /* 0.363857159 */, 15 },
+ /* 1142 */ { MAD_F(0x05d419cb) /* 0.364282412 */, 15 },
+ /* 1143 */ { MAD_F(0x05d5d7d5) /* 0.364707789 */, 15 },
+ /* 1144 */ { MAD_F(0x05d79601) /* 0.365133291 */, 15 },
+ /* 1145 */ { MAD_F(0x05d9544e) /* 0.365558916 */, 15 },
+ /* 1146 */ { MAD_F(0x05db12bc) /* 0.365984665 */, 15 },
+ /* 1147 */ { MAD_F(0x05dcd14c) /* 0.366410538 */, 15 },
+ /* 1148 */ { MAD_F(0x05de8ffc) /* 0.366836535 */, 15 },
+ /* 1149 */ { MAD_F(0x05e04ece) /* 0.367262655 */, 15 },
+ /* 1150 */ { MAD_F(0x05e20dc1) /* 0.367688900 */, 15 },
+ /* 1151 */ { MAD_F(0x05e3ccd5) /* 0.368115267 */, 15 },
+
+ /* 1152 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 15 },
+ /* 1153 */ { MAD_F(0x05e74b61) /* 0.368968373 */, 15 },
+ /* 1154 */ { MAD_F(0x05e90ad9) /* 0.369395111 */, 15 },
+ /* 1155 */ { MAD_F(0x05eaca72) /* 0.369821973 */, 15 },
+ /* 1156 */ { MAD_F(0x05ec8a2b) /* 0.370248957 */, 15 },
+ /* 1157 */ { MAD_F(0x05ee4a06) /* 0.370676065 */, 15 },
+ /* 1158 */ { MAD_F(0x05f00a02) /* 0.371103295 */, 15 },
+ /* 1159 */ { MAD_F(0x05f1ca1f) /* 0.371530649 */, 15 },
+ /* 1160 */ { MAD_F(0x05f38a5d) /* 0.371958126 */, 15 },
+ /* 1161 */ { MAD_F(0x05f54abc) /* 0.372385725 */, 15 },
+ /* 1162 */ { MAD_F(0x05f70b3c) /* 0.372813448 */, 15 },
+ /* 1163 */ { MAD_F(0x05f8cbdc) /* 0.373241292 */, 15 },
+ /* 1164 */ { MAD_F(0x05fa8c9e) /* 0.373669260 */, 15 },
+ /* 1165 */ { MAD_F(0x05fc4d81) /* 0.374097350 */, 15 },
+ /* 1166 */ { MAD_F(0x05fe0e84) /* 0.374525563 */, 15 },
+ /* 1167 */ { MAD_F(0x05ffcfa8) /* 0.374953898 */, 15 },
+
+ /* 1168 */ { MAD_F(0x060190ee) /* 0.375382356 */, 15 },
+ /* 1169 */ { MAD_F(0x06035254) /* 0.375810936 */, 15 },
+ /* 1170 */ { MAD_F(0x060513da) /* 0.376239638 */, 15 },
+ /* 1171 */ { MAD_F(0x0606d582) /* 0.376668462 */, 15 },
+ /* 1172 */ { MAD_F(0x0608974a) /* 0.377097408 */, 15 },
+ /* 1173 */ { MAD_F(0x060a5934) /* 0.377526476 */, 15 },
+ /* 1174 */ { MAD_F(0x060c1b3d) /* 0.377955667 */, 15 },
+ /* 1175 */ { MAD_F(0x060ddd68) /* 0.378384979 */, 15 },
+ /* 1176 */ { MAD_F(0x060f9fb3) /* 0.378814413 */, 15 },
+ /* 1177 */ { MAD_F(0x0611621f) /* 0.379243968 */, 15 },
+ /* 1178 */ { MAD_F(0x061324ac) /* 0.379673646 */, 15 },
+ /* 1179 */ { MAD_F(0x0614e759) /* 0.380103444 */, 15 },
+ /* 1180 */ { MAD_F(0x0616aa27) /* 0.380533365 */, 15 },
+ /* 1181 */ { MAD_F(0x06186d16) /* 0.380963407 */, 15 },
+ /* 1182 */ { MAD_F(0x061a3025) /* 0.381393570 */, 15 },
+ /* 1183 */ { MAD_F(0x061bf354) /* 0.381823855 */, 15 },
+
+ /* 1184 */ { MAD_F(0x061db6a5) /* 0.382254261 */, 15 },
+ /* 1185 */ { MAD_F(0x061f7a15) /* 0.382684788 */, 15 },
+ /* 1186 */ { MAD_F(0x06213da7) /* 0.383115436 */, 15 },
+ /* 1187 */ { MAD_F(0x06230158) /* 0.383546205 */, 15 },
+ /* 1188 */ { MAD_F(0x0624c52a) /* 0.383977096 */, 15 },
+ /* 1189 */ { MAD_F(0x0626891d) /* 0.384408107 */, 15 },
+ /* 1190 */ { MAD_F(0x06284d30) /* 0.384839239 */, 15 },
+ /* 1191 */ { MAD_F(0x062a1164) /* 0.385270492 */, 15 },
+ /* 1192 */ { MAD_F(0x062bd5b8) /* 0.385701865 */, 15 },
+ /* 1193 */ { MAD_F(0x062d9a2c) /* 0.386133359 */, 15 },
+ /* 1194 */ { MAD_F(0x062f5ec1) /* 0.386564974 */, 15 },
+ /* 1195 */ { MAD_F(0x06312376) /* 0.386996709 */, 15 },
+ /* 1196 */ { MAD_F(0x0632e84b) /* 0.387428565 */, 15 },
+ /* 1197 */ { MAD_F(0x0634ad41) /* 0.387860541 */, 15 },
+ /* 1198 */ { MAD_F(0x06367257) /* 0.388292637 */, 15 },
+ /* 1199 */ { MAD_F(0x0638378d) /* 0.388724854 */, 15 },
+
+ /* 1200 */ { MAD_F(0x0639fce4) /* 0.389157191 */, 15 },
+ /* 1201 */ { MAD_F(0x063bc25b) /* 0.389589648 */, 15 },
+ /* 1202 */ { MAD_F(0x063d87f2) /* 0.390022225 */, 15 },
+ /* 1203 */ { MAD_F(0x063f4da9) /* 0.390454922 */, 15 },
+ /* 1204 */ { MAD_F(0x06411380) /* 0.390887739 */, 15 },
+ /* 1205 */ { MAD_F(0x0642d978) /* 0.391320675 */, 15 },
+ /* 1206 */ { MAD_F(0x06449f8f) /* 0.391753732 */, 15 },
+ /* 1207 */ { MAD_F(0x064665c7) /* 0.392186908 */, 15 },
+ /* 1208 */ { MAD_F(0x06482c1f) /* 0.392620204 */, 15 },
+ /* 1209 */ { MAD_F(0x0649f297) /* 0.393053619 */, 15 },
+ /* 1210 */ { MAD_F(0x064bb92f) /* 0.393487154 */, 15 },
+ /* 1211 */ { MAD_F(0x064d7fe8) /* 0.393920808 */, 15 },
+ /* 1212 */ { MAD_F(0x064f46c0) /* 0.394354582 */, 15 },
+ /* 1213 */ { MAD_F(0x06510db8) /* 0.394788475 */, 15 },
+ /* 1214 */ { MAD_F(0x0652d4d0) /* 0.395222488 */, 15 },
+ /* 1215 */ { MAD_F(0x06549c09) /* 0.395656619 */, 15 },
+
+ /* 1216 */ { MAD_F(0x06566361) /* 0.396090870 */, 15 },
+ /* 1217 */ { MAD_F(0x06582ad9) /* 0.396525239 */, 15 },
+ /* 1218 */ { MAD_F(0x0659f271) /* 0.396959728 */, 15 },
+ /* 1219 */ { MAD_F(0x065bba29) /* 0.397394336 */, 15 },
+ /* 1220 */ { MAD_F(0x065d8201) /* 0.397829062 */, 15 },
+ /* 1221 */ { MAD_F(0x065f49f9) /* 0.398263907 */, 15 },
+ /* 1222 */ { MAD_F(0x06611211) /* 0.398698871 */, 15 },
+ /* 1223 */ { MAD_F(0x0662da49) /* 0.399133954 */, 15 },
+ /* 1224 */ { MAD_F(0x0664a2a0) /* 0.399569155 */, 15 },
+ /* 1225 */ { MAD_F(0x06666b17) /* 0.400004475 */, 15 },
+ /* 1226 */ { MAD_F(0x066833ae) /* 0.400439913 */, 15 },
+ /* 1227 */ { MAD_F(0x0669fc65) /* 0.400875470 */, 15 },
+ /* 1228 */ { MAD_F(0x066bc53c) /* 0.401311145 */, 15 },
+ /* 1229 */ { MAD_F(0x066d8e32) /* 0.401746938 */, 15 },
+ /* 1230 */ { MAD_F(0x066f5748) /* 0.402182850 */, 15 },
+ /* 1231 */ { MAD_F(0x0671207e) /* 0.402618879 */, 15 },
+
+ /* 1232 */ { MAD_F(0x0672e9d4) /* 0.403055027 */, 15 },
+ /* 1233 */ { MAD_F(0x0674b349) /* 0.403491293 */, 15 },
+ /* 1234 */ { MAD_F(0x06767cde) /* 0.403927676 */, 15 },
+ /* 1235 */ { MAD_F(0x06784692) /* 0.404364178 */, 15 },
+ /* 1236 */ { MAD_F(0x067a1066) /* 0.404800797 */, 15 },
+ /* 1237 */ { MAD_F(0x067bda5a) /* 0.405237535 */, 15 },
+ /* 1238 */ { MAD_F(0x067da46d) /* 0.405674390 */, 15 },
+ /* 1239 */ { MAD_F(0x067f6ea0) /* 0.406111362 */, 15 },
+ /* 1240 */ { MAD_F(0x068138f3) /* 0.406548452 */, 15 },
+ /* 1241 */ { MAD_F(0x06830365) /* 0.406985660 */, 15 },
+ /* 1242 */ { MAD_F(0x0684cdf6) /* 0.407422985 */, 15 },
+ /* 1243 */ { MAD_F(0x068698a8) /* 0.407860427 */, 15 },
+ /* 1244 */ { MAD_F(0x06886378) /* 0.408297987 */, 15 },
+ /* 1245 */ { MAD_F(0x068a2e68) /* 0.408735664 */, 15 },
+ /* 1246 */ { MAD_F(0x068bf978) /* 0.409173458 */, 15 },
+ /* 1247 */ { MAD_F(0x068dc4a7) /* 0.409611370 */, 15 },
+
+ /* 1248 */ { MAD_F(0x068f8ff5) /* 0.410049398 */, 15 },
+ /* 1249 */ { MAD_F(0x06915b63) /* 0.410487544 */, 15 },
+ /* 1250 */ { MAD_F(0x069326f0) /* 0.410925806 */, 15 },
+ /* 1251 */ { MAD_F(0x0694f29c) /* 0.411364185 */, 15 },
+ /* 1252 */ { MAD_F(0x0696be68) /* 0.411802681 */, 15 },
+ /* 1253 */ { MAD_F(0x06988a54) /* 0.412241294 */, 15 },
+ /* 1254 */ { MAD_F(0x069a565e) /* 0.412680024 */, 15 },
+ /* 1255 */ { MAD_F(0x069c2288) /* 0.413118870 */, 15 },
+ /* 1256 */ { MAD_F(0x069deed1) /* 0.413557833 */, 15 },
+ /* 1257 */ { MAD_F(0x069fbb3a) /* 0.413996912 */, 15 },
+ /* 1258 */ { MAD_F(0x06a187c1) /* 0.414436108 */, 15 },
+ /* 1259 */ { MAD_F(0x06a35468) /* 0.414875420 */, 15 },
+ /* 1260 */ { MAD_F(0x06a5212f) /* 0.415314849 */, 15 },
+ /* 1261 */ { MAD_F(0x06a6ee14) /* 0.415754393 */, 15 },
+ /* 1262 */ { MAD_F(0x06a8bb18) /* 0.416194054 */, 15 },
+ /* 1263 */ { MAD_F(0x06aa883c) /* 0.416633831 */, 15 },
+
+ /* 1264 */ { MAD_F(0x06ac557f) /* 0.417073724 */, 15 },
+ /* 1265 */ { MAD_F(0x06ae22e1) /* 0.417513734 */, 15 },
+ /* 1266 */ { MAD_F(0x06aff062) /* 0.417953859 */, 15 },
+ /* 1267 */ { MAD_F(0x06b1be03) /* 0.418394100 */, 15 },
+ /* 1268 */ { MAD_F(0x06b38bc2) /* 0.418834457 */, 15 },
+ /* 1269 */ { MAD_F(0x06b559a1) /* 0.419274929 */, 15 },
+ /* 1270 */ { MAD_F(0x06b7279e) /* 0.419715518 */, 15 },
+ /* 1271 */ { MAD_F(0x06b8f5bb) /* 0.420156222 */, 15 },
+ /* 1272 */ { MAD_F(0x06bac3f6) /* 0.420597041 */, 15 },
+ /* 1273 */ { MAD_F(0x06bc9251) /* 0.421037977 */, 15 },
+ /* 1274 */ { MAD_F(0x06be60cb) /* 0.421479027 */, 15 },
+ /* 1275 */ { MAD_F(0x06c02f63) /* 0.421920193 */, 15 },
+ /* 1276 */ { MAD_F(0x06c1fe1b) /* 0.422361475 */, 15 },
+ /* 1277 */ { MAD_F(0x06c3ccf1) /* 0.422802871 */, 15 },
+ /* 1278 */ { MAD_F(0x06c59be7) /* 0.423244383 */, 15 },
+ /* 1279 */ { MAD_F(0x06c76afb) /* 0.423686010 */, 15 },
+
+ /* 1280 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 15 },
+ /* 1281 */ { MAD_F(0x06cb0981) /* 0.424569610 */, 15 },
+ /* 1282 */ { MAD_F(0x06ccd8f2) /* 0.425011582 */, 15 },
+ /* 1283 */ { MAD_F(0x06cea881) /* 0.425453669 */, 15 },
+ /* 1284 */ { MAD_F(0x06d07830) /* 0.425895871 */, 15 },
+ /* 1285 */ { MAD_F(0x06d247fe) /* 0.426338188 */, 15 },
+ /* 1286 */ { MAD_F(0x06d417ea) /* 0.426780620 */, 15 },
+ /* 1287 */ { MAD_F(0x06d5e7f5) /* 0.427223166 */, 15 },
+ /* 1288 */ { MAD_F(0x06d7b81f) /* 0.427665827 */, 15 },
+ /* 1289 */ { MAD_F(0x06d98868) /* 0.428108603 */, 15 },
+ /* 1290 */ { MAD_F(0x06db58cf) /* 0.428551493 */, 15 },
+ /* 1291 */ { MAD_F(0x06dd2955) /* 0.428994497 */, 15 },
+ /* 1292 */ { MAD_F(0x06def9fa) /* 0.429437616 */, 15 },
+ /* 1293 */ { MAD_F(0x06e0cabe) /* 0.429880849 */, 15 },
+ /* 1294 */ { MAD_F(0x06e29ba0) /* 0.430324197 */, 15 },
+ /* 1295 */ { MAD_F(0x06e46ca1) /* 0.430767659 */, 15 },
+
+ /* 1296 */ { MAD_F(0x06e63dc0) /* 0.431211234 */, 15 },
+ /* 1297 */ { MAD_F(0x06e80efe) /* 0.431654924 */, 15 },
+ /* 1298 */ { MAD_F(0x06e9e05b) /* 0.432098728 */, 15 },
+ /* 1299 */ { MAD_F(0x06ebb1d6) /* 0.432542647 */, 15 },
+ /* 1300 */ { MAD_F(0x06ed8370) /* 0.432986678 */, 15 },
+ /* 1301 */ { MAD_F(0x06ef5529) /* 0.433430824 */, 15 },
+ /* 1302 */ { MAD_F(0x06f12700) /* 0.433875084 */, 15 },
+ /* 1303 */ { MAD_F(0x06f2f8f5) /* 0.434319457 */, 15 },
+ /* 1304 */ { MAD_F(0x06f4cb09) /* 0.434763944 */, 15 },
+ /* 1305 */ { MAD_F(0x06f69d3c) /* 0.435208545 */, 15 },
+ /* 1306 */ { MAD_F(0x06f86f8d) /* 0.435653259 */, 15 },
+ /* 1307 */ { MAD_F(0x06fa41fd) /* 0.436098087 */, 15 },
+ /* 1308 */ { MAD_F(0x06fc148b) /* 0.436543029 */, 15 },
+ /* 1309 */ { MAD_F(0x06fde737) /* 0.436988083 */, 15 },
+ /* 1310 */ { MAD_F(0x06ffba02) /* 0.437433251 */, 15 },
+ /* 1311 */ { MAD_F(0x07018ceb) /* 0.437878533 */, 15 },
+
+ /* 1312 */ { MAD_F(0x07035ff3) /* 0.438323927 */, 15 },
+ /* 1313 */ { MAD_F(0x07053319) /* 0.438769435 */, 15 },
+ /* 1314 */ { MAD_F(0x0707065d) /* 0.439215056 */, 15 },
+ /* 1315 */ { MAD_F(0x0708d9c0) /* 0.439660790 */, 15 },
+ /* 1316 */ { MAD_F(0x070aad41) /* 0.440106636 */, 15 },
+ /* 1317 */ { MAD_F(0x070c80e1) /* 0.440552596 */, 15 },
+ /* 1318 */ { MAD_F(0x070e549f) /* 0.440998669 */, 15 },
+ /* 1319 */ { MAD_F(0x0710287b) /* 0.441444855 */, 15 },
+ /* 1320 */ { MAD_F(0x0711fc75) /* 0.441891153 */, 15 },
+ /* 1321 */ { MAD_F(0x0713d08d) /* 0.442337564 */, 15 },
+ /* 1322 */ { MAD_F(0x0715a4c4) /* 0.442784088 */, 15 },
+ /* 1323 */ { MAD_F(0x07177919) /* 0.443230724 */, 15 },
+ /* 1324 */ { MAD_F(0x07194d8c) /* 0.443677473 */, 15 },
+ /* 1325 */ { MAD_F(0x071b221e) /* 0.444124334 */, 15 },
+ /* 1326 */ { MAD_F(0x071cf6ce) /* 0.444571308 */, 15 },
+ /* 1327 */ { MAD_F(0x071ecb9b) /* 0.445018394 */, 15 },
+
+ /* 1328 */ { MAD_F(0x0720a087) /* 0.445465593 */, 15 },
+ /* 1329 */ { MAD_F(0x07227591) /* 0.445912903 */, 15 },
+ /* 1330 */ { MAD_F(0x07244ab9) /* 0.446360326 */, 15 },
+ /* 1331 */ { MAD_F(0x07262000) /* 0.446807861 */, 15 },
+ /* 1332 */ { MAD_F(0x0727f564) /* 0.447255509 */, 15 },
+ /* 1333 */ { MAD_F(0x0729cae7) /* 0.447703268 */, 15 },
+ /* 1334 */ { MAD_F(0x072ba087) /* 0.448151139 */, 15 },
+ /* 1335 */ { MAD_F(0x072d7646) /* 0.448599122 */, 15 },
+ /* 1336 */ { MAD_F(0x072f4c22) /* 0.449047217 */, 15 },
+ /* 1337 */ { MAD_F(0x0731221d) /* 0.449495424 */, 15 },
+ /* 1338 */ { MAD_F(0x0732f835) /* 0.449943742 */, 15 },
+ /* 1339 */ { MAD_F(0x0734ce6c) /* 0.450392173 */, 15 },
+ /* 1340 */ { MAD_F(0x0736a4c1) /* 0.450840715 */, 15 },
+ /* 1341 */ { MAD_F(0x07387b33) /* 0.451289368 */, 15 },
+ /* 1342 */ { MAD_F(0x073a51c4) /* 0.451738133 */, 15 },
+ /* 1343 */ { MAD_F(0x073c2872) /* 0.452187010 */, 15 },
+
+ /* 1344 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 15 },
+ /* 1345 */ { MAD_F(0x073fd628) /* 0.453085097 */, 15 },
+ /* 1346 */ { MAD_F(0x0741ad30) /* 0.453534308 */, 15 },
+ /* 1347 */ { MAD_F(0x07438456) /* 0.453983630 */, 15 },
+ /* 1348 */ { MAD_F(0x07455b9a) /* 0.454433063 */, 15 },
+ /* 1349 */ { MAD_F(0x074732fc) /* 0.454882607 */, 15 },
+ /* 1350 */ { MAD_F(0x07490a7b) /* 0.455332262 */, 15 },
+ /* 1351 */ { MAD_F(0x074ae218) /* 0.455782029 */, 15 },
+ /* 1352 */ { MAD_F(0x074cb9d3) /* 0.456231906 */, 15 },
+ /* 1353 */ { MAD_F(0x074e91ac) /* 0.456681894 */, 15 },
+ /* 1354 */ { MAD_F(0x075069a3) /* 0.457131993 */, 15 },
+ /* 1355 */ { MAD_F(0x075241b7) /* 0.457582203 */, 15 },
+ /* 1356 */ { MAD_F(0x075419e9) /* 0.458032524 */, 15 },
+ /* 1357 */ { MAD_F(0x0755f239) /* 0.458482956 */, 15 },
+ /* 1358 */ { MAD_F(0x0757caa7) /* 0.458933498 */, 15 },
+ /* 1359 */ { MAD_F(0x0759a332) /* 0.459384151 */, 15 },
+
+ /* 1360 */ { MAD_F(0x075b7bdb) /* 0.459834914 */, 15 },
+ /* 1361 */ { MAD_F(0x075d54a1) /* 0.460285788 */, 15 },
+ /* 1362 */ { MAD_F(0x075f2d85) /* 0.460736772 */, 15 },
+ /* 1363 */ { MAD_F(0x07610687) /* 0.461187867 */, 15 },
+ /* 1364 */ { MAD_F(0x0762dfa6) /* 0.461639071 */, 15 },
+ /* 1365 */ { MAD_F(0x0764b8e3) /* 0.462090387 */, 15 },
+ /* 1366 */ { MAD_F(0x0766923e) /* 0.462541812 */, 15 },
+ /* 1367 */ { MAD_F(0x07686bb6) /* 0.462993348 */, 15 },
+ /* 1368 */ { MAD_F(0x076a454c) /* 0.463444993 */, 15 },
+ /* 1369 */ { MAD_F(0x076c1eff) /* 0.463896749 */, 15 },
+ /* 1370 */ { MAD_F(0x076df8d0) /* 0.464348615 */, 15 },
+ /* 1371 */ { MAD_F(0x076fd2be) /* 0.464800591 */, 15 },
+ /* 1372 */ { MAD_F(0x0771acca) /* 0.465252676 */, 15 },
+ /* 1373 */ { MAD_F(0x077386f3) /* 0.465704872 */, 15 },
+ /* 1374 */ { MAD_F(0x0775613a) /* 0.466157177 */, 15 },
+ /* 1375 */ { MAD_F(0x07773b9e) /* 0.466609592 */, 15 },
+
+ /* 1376 */ { MAD_F(0x07791620) /* 0.467062117 */, 15 },
+ /* 1377 */ { MAD_F(0x077af0bf) /* 0.467514751 */, 15 },
+ /* 1378 */ { MAD_F(0x077ccb7c) /* 0.467967495 */, 15 },
+ /* 1379 */ { MAD_F(0x077ea656) /* 0.468420349 */, 15 },
+ /* 1380 */ { MAD_F(0x0780814d) /* 0.468873312 */, 15 },
+ /* 1381 */ { MAD_F(0x07825c62) /* 0.469326384 */, 15 },
+ /* 1382 */ { MAD_F(0x07843794) /* 0.469779566 */, 15 },
+ /* 1383 */ { MAD_F(0x078612e3) /* 0.470232857 */, 15 },
+ /* 1384 */ { MAD_F(0x0787ee50) /* 0.470686258 */, 15 },
+ /* 1385 */ { MAD_F(0x0789c9da) /* 0.471139767 */, 15 },
+ /* 1386 */ { MAD_F(0x078ba581) /* 0.471593386 */, 15 },
+ /* 1387 */ { MAD_F(0x078d8146) /* 0.472047114 */, 15 },
+ /* 1388 */ { MAD_F(0x078f5d28) /* 0.472500951 */, 15 },
+ /* 1389 */ { MAD_F(0x07913927) /* 0.472954896 */, 15 },
+ /* 1390 */ { MAD_F(0x07931543) /* 0.473408951 */, 15 },
+ /* 1391 */ { MAD_F(0x0794f17d) /* 0.473863115 */, 15 },
+
+ /* 1392 */ { MAD_F(0x0796cdd4) /* 0.474317388 */, 15 },
+ /* 1393 */ { MAD_F(0x0798aa48) /* 0.474771769 */, 15 },
+ /* 1394 */ { MAD_F(0x079a86d9) /* 0.475226259 */, 15 },
+ /* 1395 */ { MAD_F(0x079c6388) /* 0.475680858 */, 15 },
+ /* 1396 */ { MAD_F(0x079e4053) /* 0.476135565 */, 15 },
+ /* 1397 */ { MAD_F(0x07a01d3c) /* 0.476590381 */, 15 },
+ /* 1398 */ { MAD_F(0x07a1fa42) /* 0.477045306 */, 15 },
+ /* 1399 */ { MAD_F(0x07a3d765) /* 0.477500339 */, 15 },
+ /* 1400 */ { MAD_F(0x07a5b4a5) /* 0.477955481 */, 15 },
+ /* 1401 */ { MAD_F(0x07a79202) /* 0.478410731 */, 15 },
+ /* 1402 */ { MAD_F(0x07a96f7d) /* 0.478866089 */, 15 },
+ /* 1403 */ { MAD_F(0x07ab4d14) /* 0.479321555 */, 15 },
+ /* 1404 */ { MAD_F(0x07ad2ac8) /* 0.479777130 */, 15 },
+ /* 1405 */ { MAD_F(0x07af089a) /* 0.480232813 */, 15 },
+ /* 1406 */ { MAD_F(0x07b0e688) /* 0.480688604 */, 15 },
+ /* 1407 */ { MAD_F(0x07b2c494) /* 0.481144503 */, 15 },
+
+ /* 1408 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 15 },
+ /* 1409 */ { MAD_F(0x07b68102) /* 0.482056625 */, 15 },
+ /* 1410 */ { MAD_F(0x07b85f64) /* 0.482512848 */, 15 },
+ /* 1411 */ { MAD_F(0x07ba3de4) /* 0.482969179 */, 15 },
+ /* 1412 */ { MAD_F(0x07bc1c80) /* 0.483425618 */, 15 },
+ /* 1413 */ { MAD_F(0x07bdfb39) /* 0.483882164 */, 15 },
+ /* 1414 */ { MAD_F(0x07bfda0f) /* 0.484338818 */, 15 },
+ /* 1415 */ { MAD_F(0x07c1b902) /* 0.484795580 */, 15 },
+ /* 1416 */ { MAD_F(0x07c39812) /* 0.485252449 */, 15 },
+ /* 1417 */ { MAD_F(0x07c5773f) /* 0.485709426 */, 15 },
+ /* 1418 */ { MAD_F(0x07c75689) /* 0.486166511 */, 15 },
+ /* 1419 */ { MAD_F(0x07c935ef) /* 0.486623703 */, 15 },
+ /* 1420 */ { MAD_F(0x07cb1573) /* 0.487081002 */, 15 },
+ /* 1421 */ { MAD_F(0x07ccf513) /* 0.487538409 */, 15 },
+ /* 1422 */ { MAD_F(0x07ced4d0) /* 0.487995923 */, 15 },
+ /* 1423 */ { MAD_F(0x07d0b4aa) /* 0.488453544 */, 15 },
+
+ /* 1424 */ { MAD_F(0x07d294a0) /* 0.488911273 */, 15 },
+ /* 1425 */ { MAD_F(0x07d474b3) /* 0.489369108 */, 15 },
+ /* 1426 */ { MAD_F(0x07d654e4) /* 0.489827051 */, 15 },
+ /* 1427 */ { MAD_F(0x07d83530) /* 0.490285101 */, 15 },
+ /* 1428 */ { MAD_F(0x07da159a) /* 0.490743258 */, 15 },
+ /* 1429 */ { MAD_F(0x07dbf620) /* 0.491201522 */, 15 },
+ /* 1430 */ { MAD_F(0x07ddd6c3) /* 0.491659892 */, 15 },
+ /* 1431 */ { MAD_F(0x07dfb783) /* 0.492118370 */, 15 },
+ /* 1432 */ { MAD_F(0x07e1985f) /* 0.492576954 */, 15 },
+ /* 1433 */ { MAD_F(0x07e37958) /* 0.493035645 */, 15 },
+ /* 1434 */ { MAD_F(0x07e55a6e) /* 0.493494443 */, 15 },
+ /* 1435 */ { MAD_F(0x07e73ba0) /* 0.493953348 */, 15 },
+ /* 1436 */ { MAD_F(0x07e91cef) /* 0.494412359 */, 15 },
+ /* 1437 */ { MAD_F(0x07eafe5a) /* 0.494871476 */, 15 },
+ /* 1438 */ { MAD_F(0x07ecdfe2) /* 0.495330701 */, 15 },
+ /* 1439 */ { MAD_F(0x07eec187) /* 0.495790031 */, 15 },
+
+ /* 1440 */ { MAD_F(0x07f0a348) /* 0.496249468 */, 15 },
+ /* 1441 */ { MAD_F(0x07f28526) /* 0.496709012 */, 15 },
+ /* 1442 */ { MAD_F(0x07f46720) /* 0.497168662 */, 15 },
+ /* 1443 */ { MAD_F(0x07f64937) /* 0.497628418 */, 15 },
+ /* 1444 */ { MAD_F(0x07f82b6a) /* 0.498088280 */, 15 },
+ /* 1445 */ { MAD_F(0x07fa0dba) /* 0.498548248 */, 15 },
+ /* 1446 */ { MAD_F(0x07fbf026) /* 0.499008323 */, 15 },
+ /* 1447 */ { MAD_F(0x07fdd2af) /* 0.499468503 */, 15 },
+ /* 1448 */ { MAD_F(0x07ffb554) /* 0.499928790 */, 15 },
+ /* 1449 */ { MAD_F(0x0400cc0b) /* 0.250194591 */, 16 },
+ /* 1450 */ { MAD_F(0x0401bd7a) /* 0.250424840 */, 16 },
+ /* 1451 */ { MAD_F(0x0402aef7) /* 0.250655143 */, 16 },
+ /* 1452 */ { MAD_F(0x0403a083) /* 0.250885498 */, 16 },
+ /* 1453 */ { MAD_F(0x0404921c) /* 0.251115906 */, 16 },
+ /* 1454 */ { MAD_F(0x040583c4) /* 0.251346367 */, 16 },
+ /* 1455 */ { MAD_F(0x0406757a) /* 0.251576880 */, 16 },
+
+ /* 1456 */ { MAD_F(0x0407673f) /* 0.251807447 */, 16 },
+ /* 1457 */ { MAD_F(0x04085911) /* 0.252038066 */, 16 },
+ /* 1458 */ { MAD_F(0x04094af1) /* 0.252268738 */, 16 },
+ /* 1459 */ { MAD_F(0x040a3ce0) /* 0.252499463 */, 16 },
+ /* 1460 */ { MAD_F(0x040b2edd) /* 0.252730240 */, 16 },
+ /* 1461 */ { MAD_F(0x040c20e8) /* 0.252961071 */, 16 },
+ /* 1462 */ { MAD_F(0x040d1301) /* 0.253191953 */, 16 },
+ /* 1463 */ { MAD_F(0x040e0529) /* 0.253422889 */, 16 },
+ /* 1464 */ { MAD_F(0x040ef75e) /* 0.253653877 */, 16 },
+ /* 1465 */ { MAD_F(0x040fe9a1) /* 0.253884918 */, 16 },
+ /* 1466 */ { MAD_F(0x0410dbf3) /* 0.254116011 */, 16 },
+ /* 1467 */ { MAD_F(0x0411ce53) /* 0.254347157 */, 16 },
+ /* 1468 */ { MAD_F(0x0412c0c1) /* 0.254578356 */, 16 },
+ /* 1469 */ { MAD_F(0x0413b33d) /* 0.254809606 */, 16 },
+ /* 1470 */ { MAD_F(0x0414a5c7) /* 0.255040910 */, 16 },
+ /* 1471 */ { MAD_F(0x0415985f) /* 0.255272266 */, 16 },
+
+ /* 1472 */ { MAD_F(0x04168b05) /* 0.255503674 */, 16 },
+ /* 1473 */ { MAD_F(0x04177db9) /* 0.255735135 */, 16 },
+ /* 1474 */ { MAD_F(0x0418707c) /* 0.255966648 */, 16 },
+ /* 1475 */ { MAD_F(0x0419634c) /* 0.256198213 */, 16 },
+ /* 1476 */ { MAD_F(0x041a562a) /* 0.256429831 */, 16 },
+ /* 1477 */ { MAD_F(0x041b4917) /* 0.256661501 */, 16 },
+ /* 1478 */ { MAD_F(0x041c3c11) /* 0.256893223 */, 16 },
+ /* 1479 */ { MAD_F(0x041d2f1a) /* 0.257124998 */, 16 },
+ /* 1480 */ { MAD_F(0x041e2230) /* 0.257356825 */, 16 },
+ /* 1481 */ { MAD_F(0x041f1555) /* 0.257588704 */, 16 },
+ /* 1482 */ { MAD_F(0x04200888) /* 0.257820635 */, 16 },
+ /* 1483 */ { MAD_F(0x0420fbc8) /* 0.258052619 */, 16 },
+ /* 1484 */ { MAD_F(0x0421ef17) /* 0.258284654 */, 16 },
+ /* 1485 */ { MAD_F(0x0422e273) /* 0.258516742 */, 16 },
+ /* 1486 */ { MAD_F(0x0423d5de) /* 0.258748882 */, 16 },
+ /* 1487 */ { MAD_F(0x0424c956) /* 0.258981074 */, 16 },
+
+ /* 1488 */ { MAD_F(0x0425bcdd) /* 0.259213318 */, 16 },
+ /* 1489 */ { MAD_F(0x0426b071) /* 0.259445614 */, 16 },
+ /* 1490 */ { MAD_F(0x0427a414) /* 0.259677962 */, 16 },
+ /* 1491 */ { MAD_F(0x042897c4) /* 0.259910362 */, 16 },
+ /* 1492 */ { MAD_F(0x04298b83) /* 0.260142814 */, 16 },
+ /* 1493 */ { MAD_F(0x042a7f4f) /* 0.260375318 */, 16 },
+ /* 1494 */ { MAD_F(0x042b7329) /* 0.260607874 */, 16 },
+ /* 1495 */ { MAD_F(0x042c6711) /* 0.260840481 */, 16 },
+ /* 1496 */ { MAD_F(0x042d5b07) /* 0.261073141 */, 16 },
+ /* 1497 */ { MAD_F(0x042e4f0b) /* 0.261305852 */, 16 },
+ /* 1498 */ { MAD_F(0x042f431d) /* 0.261538616 */, 16 },
+ /* 1499 */ { MAD_F(0x0430373d) /* 0.261771431 */, 16 },
+ /* 1500 */ { MAD_F(0x04312b6b) /* 0.262004297 */, 16 },
+ /* 1501 */ { MAD_F(0x04321fa6) /* 0.262237216 */, 16 },
+ /* 1502 */ { MAD_F(0x043313f0) /* 0.262470186 */, 16 },
+ /* 1503 */ { MAD_F(0x04340847) /* 0.262703208 */, 16 },
+
+ /* 1504 */ { MAD_F(0x0434fcad) /* 0.262936282 */, 16 },
+ /* 1505 */ { MAD_F(0x0435f120) /* 0.263169407 */, 16 },
+ /* 1506 */ { MAD_F(0x0436e5a1) /* 0.263402584 */, 16 },
+ /* 1507 */ { MAD_F(0x0437da2f) /* 0.263635813 */, 16 },
+ /* 1508 */ { MAD_F(0x0438cecc) /* 0.263869093 */, 16 },
+ /* 1509 */ { MAD_F(0x0439c377) /* 0.264102425 */, 16 },
+ /* 1510 */ { MAD_F(0x043ab82f) /* 0.264335808 */, 16 },
+ /* 1511 */ { MAD_F(0x043bacf5) /* 0.264569243 */, 16 },
+ /* 1512 */ { MAD_F(0x043ca1c9) /* 0.264802730 */, 16 },
+ /* 1513 */ { MAD_F(0x043d96ab) /* 0.265036267 */, 16 },
+ /* 1514 */ { MAD_F(0x043e8b9b) /* 0.265269857 */, 16 },
+ /* 1515 */ { MAD_F(0x043f8098) /* 0.265503498 */, 16 },
+ /* 1516 */ { MAD_F(0x044075a3) /* 0.265737190 */, 16 },
+ /* 1517 */ { MAD_F(0x04416abc) /* 0.265970933 */, 16 },
+ /* 1518 */ { MAD_F(0x04425fe3) /* 0.266204728 */, 16 },
+ /* 1519 */ { MAD_F(0x04435518) /* 0.266438574 */, 16 },
+
+ /* 1520 */ { MAD_F(0x04444a5a) /* 0.266672472 */, 16 },
+ /* 1521 */ { MAD_F(0x04453fab) /* 0.266906421 */, 16 },
+ /* 1522 */ { MAD_F(0x04463508) /* 0.267140421 */, 16 },
+ /* 1523 */ { MAD_F(0x04472a74) /* 0.267374472 */, 16 },
+ /* 1524 */ { MAD_F(0x04481fee) /* 0.267608575 */, 16 },
+ /* 1525 */ { MAD_F(0x04491575) /* 0.267842729 */, 16 },
+ /* 1526 */ { MAD_F(0x044a0b0a) /* 0.268076934 */, 16 },
+ /* 1527 */ { MAD_F(0x044b00ac) /* 0.268311190 */, 16 },
+ /* 1528 */ { MAD_F(0x044bf65d) /* 0.268545497 */, 16 },
+ /* 1529 */ { MAD_F(0x044cec1b) /* 0.268779856 */, 16 },
+ /* 1530 */ { MAD_F(0x044de1e7) /* 0.269014265 */, 16 },
+ /* 1531 */ { MAD_F(0x044ed7c0) /* 0.269248726 */, 16 },
+ /* 1532 */ { MAD_F(0x044fcda8) /* 0.269483238 */, 16 },
+ /* 1533 */ { MAD_F(0x0450c39c) /* 0.269717800 */, 16 },
+ /* 1534 */ { MAD_F(0x0451b99f) /* 0.269952414 */, 16 },
+ /* 1535 */ { MAD_F(0x0452afaf) /* 0.270187079 */, 16 },
+
+ /* 1536 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 16 },
+ /* 1537 */ { MAD_F(0x04549bf9) /* 0.270656561 */, 16 },
+ /* 1538 */ { MAD_F(0x04559232) /* 0.270891379 */, 16 },
+ /* 1539 */ { MAD_F(0x04568879) /* 0.271126247 */, 16 },
+ /* 1540 */ { MAD_F(0x04577ece) /* 0.271361166 */, 16 },
+ /* 1541 */ { MAD_F(0x04587530) /* 0.271596136 */, 16 },
+ /* 1542 */ { MAD_F(0x04596ba0) /* 0.271831157 */, 16 },
+ /* 1543 */ { MAD_F(0x045a621e) /* 0.272066229 */, 16 },
+ /* 1544 */ { MAD_F(0x045b58a9) /* 0.272301352 */, 16 },
+ /* 1545 */ { MAD_F(0x045c4f42) /* 0.272536525 */, 16 },
+ /* 1546 */ { MAD_F(0x045d45e9) /* 0.272771749 */, 16 },
+ /* 1547 */ { MAD_F(0x045e3c9d) /* 0.273007024 */, 16 },
+ /* 1548 */ { MAD_F(0x045f335e) /* 0.273242350 */, 16 },
+ /* 1549 */ { MAD_F(0x04602a2e) /* 0.273477726 */, 16 },
+ /* 1550 */ { MAD_F(0x0461210b) /* 0.273713153 */, 16 },
+ /* 1551 */ { MAD_F(0x046217f5) /* 0.273948630 */, 16 },
+
+ /* 1552 */ { MAD_F(0x04630eed) /* 0.274184158 */, 16 },
+ /* 1553 */ { MAD_F(0x046405f3) /* 0.274419737 */, 16 },
+ /* 1554 */ { MAD_F(0x0464fd06) /* 0.274655366 */, 16 },
+ /* 1555 */ { MAD_F(0x0465f427) /* 0.274891046 */, 16 },
+ /* 1556 */ { MAD_F(0x0466eb55) /* 0.275126776 */, 16 },
+ /* 1557 */ { MAD_F(0x0467e291) /* 0.275362557 */, 16 },
+ /* 1558 */ { MAD_F(0x0468d9db) /* 0.275598389 */, 16 },
+ /* 1559 */ { MAD_F(0x0469d132) /* 0.275834270 */, 16 },
+ /* 1560 */ { MAD_F(0x046ac896) /* 0.276070203 */, 16 },
+ /* 1561 */ { MAD_F(0x046bc009) /* 0.276306185 */, 16 },
+ /* 1562 */ { MAD_F(0x046cb788) /* 0.276542218 */, 16 },
+ /* 1563 */ { MAD_F(0x046daf15) /* 0.276778302 */, 16 },
+ /* 1564 */ { MAD_F(0x046ea6b0) /* 0.277014435 */, 16 },
+ /* 1565 */ { MAD_F(0x046f9e58) /* 0.277250619 */, 16 },
+ /* 1566 */ { MAD_F(0x0470960e) /* 0.277486854 */, 16 },
+ /* 1567 */ { MAD_F(0x04718dd1) /* 0.277723139 */, 16 },
+
+ /* 1568 */ { MAD_F(0x047285a2) /* 0.277959474 */, 16 },
+ /* 1569 */ { MAD_F(0x04737d80) /* 0.278195859 */, 16 },
+ /* 1570 */ { MAD_F(0x0474756c) /* 0.278432294 */, 16 },
+ /* 1571 */ { MAD_F(0x04756d65) /* 0.278668780 */, 16 },
+ /* 1572 */ { MAD_F(0x0476656b) /* 0.278905316 */, 16 },
+ /* 1573 */ { MAD_F(0x04775d7f) /* 0.279141902 */, 16 },
+ /* 1574 */ { MAD_F(0x047855a1) /* 0.279378538 */, 16 },
+ /* 1575 */ { MAD_F(0x04794dd0) /* 0.279615224 */, 16 },
+ /* 1576 */ { MAD_F(0x047a460c) /* 0.279851960 */, 16 },
+ /* 1577 */ { MAD_F(0x047b3e56) /* 0.280088747 */, 16 },
+ /* 1578 */ { MAD_F(0x047c36ae) /* 0.280325583 */, 16 },
+ /* 1579 */ { MAD_F(0x047d2f12) /* 0.280562470 */, 16 },
+ /* 1580 */ { MAD_F(0x047e2784) /* 0.280799406 */, 16 },
+ /* 1581 */ { MAD_F(0x047f2004) /* 0.281036393 */, 16 },
+ /* 1582 */ { MAD_F(0x04801891) /* 0.281273429 */, 16 },
+ /* 1583 */ { MAD_F(0x0481112b) /* 0.281510516 */, 16 },
+
+ /* 1584 */ { MAD_F(0x048209d3) /* 0.281747652 */, 16 },
+ /* 1585 */ { MAD_F(0x04830288) /* 0.281984838 */, 16 },
+ /* 1586 */ { MAD_F(0x0483fb4b) /* 0.282222075 */, 16 },
+ /* 1587 */ { MAD_F(0x0484f41b) /* 0.282459361 */, 16 },
+ /* 1588 */ { MAD_F(0x0485ecf8) /* 0.282696697 */, 16 },
+ /* 1589 */ { MAD_F(0x0486e5e3) /* 0.282934082 */, 16 },
+ /* 1590 */ { MAD_F(0x0487dedb) /* 0.283171518 */, 16 },
+ /* 1591 */ { MAD_F(0x0488d7e1) /* 0.283409003 */, 16 },
+ /* 1592 */ { MAD_F(0x0489d0f4) /* 0.283646538 */, 16 },
+ /* 1593 */ { MAD_F(0x048aca14) /* 0.283884123 */, 16 },
+ /* 1594 */ { MAD_F(0x048bc341) /* 0.284121757 */, 16 },
+ /* 1595 */ { MAD_F(0x048cbc7c) /* 0.284359441 */, 16 },
+ /* 1596 */ { MAD_F(0x048db5c4) /* 0.284597175 */, 16 },
+ /* 1597 */ { MAD_F(0x048eaf1a) /* 0.284834959 */, 16 },
+ /* 1598 */ { MAD_F(0x048fa87d) /* 0.285072792 */, 16 },
+ /* 1599 */ { MAD_F(0x0490a1ed) /* 0.285310675 */, 16 },
+
+ /* 1600 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 16 },
+ /* 1601 */ { MAD_F(0x049294f5) /* 0.285786589 */, 16 },
+ /* 1602 */ { MAD_F(0x04938e8d) /* 0.286024621 */, 16 },
+ /* 1603 */ { MAD_F(0x04948833) /* 0.286262702 */, 16 },
+ /* 1604 */ { MAD_F(0x049581e5) /* 0.286500832 */, 16 },
+ /* 1605 */ { MAD_F(0x04967ba5) /* 0.286739012 */, 16 },
+ /* 1606 */ { MAD_F(0x04977573) /* 0.286977242 */, 16 },
+ /* 1607 */ { MAD_F(0x04986f4d) /* 0.287215521 */, 16 },
+ /* 1608 */ { MAD_F(0x04996935) /* 0.287453849 */, 16 },
+ /* 1609 */ { MAD_F(0x049a632a) /* 0.287692227 */, 16 },
+ /* 1610 */ { MAD_F(0x049b5d2c) /* 0.287930654 */, 16 },
+ /* 1611 */ { MAD_F(0x049c573c) /* 0.288169131 */, 16 },
+ /* 1612 */ { MAD_F(0x049d5159) /* 0.288407657 */, 16 },
+ /* 1613 */ { MAD_F(0x049e4b83) /* 0.288646232 */, 16 },
+ /* 1614 */ { MAD_F(0x049f45ba) /* 0.288884857 */, 16 },
+ /* 1615 */ { MAD_F(0x04a03ffe) /* 0.289123530 */, 16 },
+
+ /* 1616 */ { MAD_F(0x04a13a50) /* 0.289362253 */, 16 },
+ /* 1617 */ { MAD_F(0x04a234af) /* 0.289601026 */, 16 },
+ /* 1618 */ { MAD_F(0x04a32f1b) /* 0.289839847 */, 16 },
+ /* 1619 */ { MAD_F(0x04a42995) /* 0.290078718 */, 16 },
+ /* 1620 */ { MAD_F(0x04a5241b) /* 0.290317638 */, 16 },
+ /* 1621 */ { MAD_F(0x04a61eaf) /* 0.290556607 */, 16 },
+ /* 1622 */ { MAD_F(0x04a71950) /* 0.290795626 */, 16 },
+ /* 1623 */ { MAD_F(0x04a813fe) /* 0.291034693 */, 16 },
+ /* 1624 */ { MAD_F(0x04a90eba) /* 0.291273810 */, 16 },
+ /* 1625 */ { MAD_F(0x04aa0982) /* 0.291512975 */, 16 },
+ /* 1626 */ { MAD_F(0x04ab0458) /* 0.291752190 */, 16 },
+ /* 1627 */ { MAD_F(0x04abff3b) /* 0.291991453 */, 16 },
+ /* 1628 */ { MAD_F(0x04acfa2b) /* 0.292230766 */, 16 },
+ /* 1629 */ { MAD_F(0x04adf528) /* 0.292470128 */, 16 },
+ /* 1630 */ { MAD_F(0x04aef032) /* 0.292709539 */, 16 },
+ /* 1631 */ { MAD_F(0x04afeb4a) /* 0.292948998 */, 16 },
+
+ /* 1632 */ { MAD_F(0x04b0e66e) /* 0.293188507 */, 16 },
+ /* 1633 */ { MAD_F(0x04b1e1a0) /* 0.293428065 */, 16 },
+ /* 1634 */ { MAD_F(0x04b2dcdf) /* 0.293667671 */, 16 },
+ /* 1635 */ { MAD_F(0x04b3d82b) /* 0.293907326 */, 16 },
+ /* 1636 */ { MAD_F(0x04b4d384) /* 0.294147031 */, 16 },
+ /* 1637 */ { MAD_F(0x04b5ceea) /* 0.294386784 */, 16 },
+ /* 1638 */ { MAD_F(0x04b6ca5e) /* 0.294626585 */, 16 },
+ /* 1639 */ { MAD_F(0x04b7c5de) /* 0.294866436 */, 16 },
+ /* 1640 */ { MAD_F(0x04b8c16c) /* 0.295106336 */, 16 },
+ /* 1641 */ { MAD_F(0x04b9bd06) /* 0.295346284 */, 16 },
+ /* 1642 */ { MAD_F(0x04bab8ae) /* 0.295586281 */, 16 },
+ /* 1643 */ { MAD_F(0x04bbb463) /* 0.295826327 */, 16 },
+ /* 1644 */ { MAD_F(0x04bcb024) /* 0.296066421 */, 16 },
+ /* 1645 */ { MAD_F(0x04bdabf3) /* 0.296306564 */, 16 },
+ /* 1646 */ { MAD_F(0x04bea7cf) /* 0.296546756 */, 16 },
+ /* 1647 */ { MAD_F(0x04bfa3b8) /* 0.296786996 */, 16 },
+
+ /* 1648 */ { MAD_F(0x04c09faf) /* 0.297027285 */, 16 },
+ /* 1649 */ { MAD_F(0x04c19bb2) /* 0.297267623 */, 16 },
+ /* 1650 */ { MAD_F(0x04c297c2) /* 0.297508009 */, 16 },
+ /* 1651 */ { MAD_F(0x04c393df) /* 0.297748444 */, 16 },
+ /* 1652 */ { MAD_F(0x04c49009) /* 0.297988927 */, 16 },
+ /* 1653 */ { MAD_F(0x04c58c41) /* 0.298229459 */, 16 },
+ /* 1654 */ { MAD_F(0x04c68885) /* 0.298470039 */, 16 },
+ /* 1655 */ { MAD_F(0x04c784d6) /* 0.298710668 */, 16 },
+ /* 1656 */ { MAD_F(0x04c88135) /* 0.298951346 */, 16 },
+ /* 1657 */ { MAD_F(0x04c97da0) /* 0.299192071 */, 16 },
+ /* 1658 */ { MAD_F(0x04ca7a18) /* 0.299432846 */, 16 },
+ /* 1659 */ { MAD_F(0x04cb769e) /* 0.299673668 */, 16 },
+ /* 1660 */ { MAD_F(0x04cc7330) /* 0.299914539 */, 16 },
+ /* 1661 */ { MAD_F(0x04cd6fcf) /* 0.300155459 */, 16 },
+ /* 1662 */ { MAD_F(0x04ce6c7b) /* 0.300396426 */, 16 },
+ /* 1663 */ { MAD_F(0x04cf6935) /* 0.300637443 */, 16 },
+
+ /* 1664 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 16 },
+ /* 1665 */ { MAD_F(0x04d162ce) /* 0.301119620 */, 16 },
+ /* 1666 */ { MAD_F(0x04d25fae) /* 0.301360781 */, 16 },
+ /* 1667 */ { MAD_F(0x04d35c9b) /* 0.301601990 */, 16 },
+ /* 1668 */ { MAD_F(0x04d45995) /* 0.301843247 */, 16 },
+ /* 1669 */ { MAD_F(0x04d5569c) /* 0.302084553 */, 16 },
+ /* 1670 */ { MAD_F(0x04d653b0) /* 0.302325907 */, 16 },
+ /* 1671 */ { MAD_F(0x04d750d1) /* 0.302567309 */, 16 },
+ /* 1672 */ { MAD_F(0x04d84dff) /* 0.302808759 */, 16 },
+ /* 1673 */ { MAD_F(0x04d94b3a) /* 0.303050257 */, 16 },
+ /* 1674 */ { MAD_F(0x04da4881) /* 0.303291804 */, 16 },
+ /* 1675 */ { MAD_F(0x04db45d6) /* 0.303533399 */, 16 },
+ /* 1676 */ { MAD_F(0x04dc4337) /* 0.303775041 */, 16 },
+ /* 1677 */ { MAD_F(0x04dd40a6) /* 0.304016732 */, 16 },
+ /* 1678 */ { MAD_F(0x04de3e21) /* 0.304258471 */, 16 },
+ /* 1679 */ { MAD_F(0x04df3ba9) /* 0.304500257 */, 16 },
+
+ /* 1680 */ { MAD_F(0x04e0393e) /* 0.304742092 */, 16 },
+ /* 1681 */ { MAD_F(0x04e136e0) /* 0.304983975 */, 16 },
+ /* 1682 */ { MAD_F(0x04e2348f) /* 0.305225906 */, 16 },
+ /* 1683 */ { MAD_F(0x04e3324b) /* 0.305467885 */, 16 },
+ /* 1684 */ { MAD_F(0x04e43013) /* 0.305709911 */, 16 },
+ /* 1685 */ { MAD_F(0x04e52de9) /* 0.305951986 */, 16 },
+ /* 1686 */ { MAD_F(0x04e62bcb) /* 0.306194108 */, 16 },
+ /* 1687 */ { MAD_F(0x04e729ba) /* 0.306436279 */, 16 },
+ /* 1688 */ { MAD_F(0x04e827b6) /* 0.306678497 */, 16 },
+ /* 1689 */ { MAD_F(0x04e925bf) /* 0.306920763 */, 16 },
+ /* 1690 */ { MAD_F(0x04ea23d4) /* 0.307163077 */, 16 },
+ /* 1691 */ { MAD_F(0x04eb21f7) /* 0.307405438 */, 16 },
+ /* 1692 */ { MAD_F(0x04ec2026) /* 0.307647848 */, 16 },
+ /* 1693 */ { MAD_F(0x04ed1e62) /* 0.307890305 */, 16 },
+ /* 1694 */ { MAD_F(0x04ee1cab) /* 0.308132810 */, 16 },
+ /* 1695 */ { MAD_F(0x04ef1b01) /* 0.308375362 */, 16 },
+
+ /* 1696 */ { MAD_F(0x04f01963) /* 0.308617963 */, 16 },
+ /* 1697 */ { MAD_F(0x04f117d3) /* 0.308860611 */, 16 },
+ /* 1698 */ { MAD_F(0x04f2164f) /* 0.309103306 */, 16 },
+ /* 1699 */ { MAD_F(0x04f314d8) /* 0.309346050 */, 16 },
+ /* 1700 */ { MAD_F(0x04f4136d) /* 0.309588841 */, 16 },
+ /* 1701 */ { MAD_F(0x04f51210) /* 0.309831679 */, 16 },
+ /* 1702 */ { MAD_F(0x04f610bf) /* 0.310074565 */, 16 },
+ /* 1703 */ { MAD_F(0x04f70f7b) /* 0.310317499 */, 16 },
+ /* 1704 */ { MAD_F(0x04f80e44) /* 0.310560480 */, 16 },
+ /* 1705 */ { MAD_F(0x04f90d19) /* 0.310803509 */, 16 },
+ /* 1706 */ { MAD_F(0x04fa0bfc) /* 0.311046586 */, 16 },
+ /* 1707 */ { MAD_F(0x04fb0aeb) /* 0.311289710 */, 16 },
+ /* 1708 */ { MAD_F(0x04fc09e7) /* 0.311532881 */, 16 },
+ /* 1709 */ { MAD_F(0x04fd08ef) /* 0.311776100 */, 16 },
+ /* 1710 */ { MAD_F(0x04fe0805) /* 0.312019366 */, 16 },
+ /* 1711 */ { MAD_F(0x04ff0727) /* 0.312262680 */, 16 },
+
+ /* 1712 */ { MAD_F(0x05000655) /* 0.312506041 */, 16 },
+ /* 1713 */ { MAD_F(0x05010591) /* 0.312749449 */, 16 },
+ /* 1714 */ { MAD_F(0x050204d9) /* 0.312992905 */, 16 },
+ /* 1715 */ { MAD_F(0x0503042e) /* 0.313236408 */, 16 },
+ /* 1716 */ { MAD_F(0x0504038f) /* 0.313479959 */, 16 },
+ /* 1717 */ { MAD_F(0x050502fe) /* 0.313723556 */, 16 },
+ /* 1718 */ { MAD_F(0x05060279) /* 0.313967202 */, 16 },
+ /* 1719 */ { MAD_F(0x05070200) /* 0.314210894 */, 16 },
+ /* 1720 */ { MAD_F(0x05080195) /* 0.314454634 */, 16 },
+ /* 1721 */ { MAD_F(0x05090136) /* 0.314698420 */, 16 },
+ /* 1722 */ { MAD_F(0x050a00e3) /* 0.314942255 */, 16 },
+ /* 1723 */ { MAD_F(0x050b009e) /* 0.315186136 */, 16 },
+ /* 1724 */ { MAD_F(0x050c0065) /* 0.315430064 */, 16 },
+ /* 1725 */ { MAD_F(0x050d0039) /* 0.315674040 */, 16 },
+ /* 1726 */ { MAD_F(0x050e0019) /* 0.315918063 */, 16 },
+ /* 1727 */ { MAD_F(0x050f0006) /* 0.316162133 */, 16 },
+
+ /* 1728 */ { MAD_F(0x05100000) /* 0.316406250 */, 16 },
+ /* 1729 */ { MAD_F(0x05110006) /* 0.316650414 */, 16 },
+ /* 1730 */ { MAD_F(0x05120019) /* 0.316894625 */, 16 },
+ /* 1731 */ { MAD_F(0x05130039) /* 0.317138884 */, 16 },
+ /* 1732 */ { MAD_F(0x05140065) /* 0.317383189 */, 16 },
+ /* 1733 */ { MAD_F(0x0515009e) /* 0.317627541 */, 16 },
+ /* 1734 */ { MAD_F(0x051600e3) /* 0.317871941 */, 16 },
+ /* 1735 */ { MAD_F(0x05170135) /* 0.318116387 */, 16 },
+ /* 1736 */ { MAD_F(0x05180194) /* 0.318360880 */, 16 },
+ /* 1737 */ { MAD_F(0x051901ff) /* 0.318605421 */, 16 },
+ /* 1738 */ { MAD_F(0x051a0277) /* 0.318850008 */, 16 },
+ /* 1739 */ { MAD_F(0x051b02fc) /* 0.319094642 */, 16 },
+ /* 1740 */ { MAD_F(0x051c038d) /* 0.319339323 */, 16 },
+ /* 1741 */ { MAD_F(0x051d042a) /* 0.319584051 */, 16 },
+ /* 1742 */ { MAD_F(0x051e04d4) /* 0.319828826 */, 16 },
+ /* 1743 */ { MAD_F(0x051f058b) /* 0.320073647 */, 16 },
+
+ /* 1744 */ { MAD_F(0x0520064f) /* 0.320318516 */, 16 },
+ /* 1745 */ { MAD_F(0x0521071f) /* 0.320563431 */, 16 },
+ /* 1746 */ { MAD_F(0x052207fb) /* 0.320808393 */, 16 },
+ /* 1747 */ { MAD_F(0x052308e4) /* 0.321053402 */, 16 },
+ /* 1748 */ { MAD_F(0x052409da) /* 0.321298457 */, 16 },
+ /* 1749 */ { MAD_F(0x05250adc) /* 0.321543560 */, 16 },
+ /* 1750 */ { MAD_F(0x05260bea) /* 0.321788709 */, 16 },
+ /* 1751 */ { MAD_F(0x05270d06) /* 0.322033904 */, 16 },
+ /* 1752 */ { MAD_F(0x05280e2d) /* 0.322279147 */, 16 },
+ /* 1753 */ { MAD_F(0x05290f62) /* 0.322524436 */, 16 },
+ /* 1754 */ { MAD_F(0x052a10a3) /* 0.322769771 */, 16 },
+ /* 1755 */ { MAD_F(0x052b11f0) /* 0.323015154 */, 16 },
+ /* 1756 */ { MAD_F(0x052c134a) /* 0.323260583 */, 16 },
+ /* 1757 */ { MAD_F(0x052d14b0) /* 0.323506058 */, 16 },
+ /* 1758 */ { MAD_F(0x052e1623) /* 0.323751580 */, 16 },
+ /* 1759 */ { MAD_F(0x052f17a2) /* 0.323997149 */, 16 },
+
+ /* 1760 */ { MAD_F(0x0530192e) /* 0.324242764 */, 16 },
+ /* 1761 */ { MAD_F(0x05311ac6) /* 0.324488426 */, 16 },
+ /* 1762 */ { MAD_F(0x05321c6b) /* 0.324734134 */, 16 },
+ /* 1763 */ { MAD_F(0x05331e1c) /* 0.324979889 */, 16 },
+ /* 1764 */ { MAD_F(0x05341fda) /* 0.325225690 */, 16 },
+ /* 1765 */ { MAD_F(0x053521a4) /* 0.325471538 */, 16 },
+ /* 1766 */ { MAD_F(0x0536237b) /* 0.325717432 */, 16 },
+ /* 1767 */ { MAD_F(0x0537255e) /* 0.325963372 */, 16 },
+ /* 1768 */ { MAD_F(0x0538274e) /* 0.326209359 */, 16 },
+ /* 1769 */ { MAD_F(0x0539294a) /* 0.326455392 */, 16 },
+ /* 1770 */ { MAD_F(0x053a2b52) /* 0.326701472 */, 16 },
+ /* 1771 */ { MAD_F(0x053b2d67) /* 0.326947598 */, 16 },
+ /* 1772 */ { MAD_F(0x053c2f89) /* 0.327193770 */, 16 },
+ /* 1773 */ { MAD_F(0x053d31b6) /* 0.327439989 */, 16 },
+ /* 1774 */ { MAD_F(0x053e33f1) /* 0.327686254 */, 16 },
+ /* 1775 */ { MAD_F(0x053f3637) /* 0.327932565 */, 16 },
+
+ /* 1776 */ { MAD_F(0x0540388a) /* 0.328178922 */, 16 },
+ /* 1777 */ { MAD_F(0x05413aea) /* 0.328425326 */, 16 },
+ /* 1778 */ { MAD_F(0x05423d56) /* 0.328671776 */, 16 },
+ /* 1779 */ { MAD_F(0x05433fce) /* 0.328918272 */, 16 },
+ /* 1780 */ { MAD_F(0x05444253) /* 0.329164814 */, 16 },
+ /* 1781 */ { MAD_F(0x054544e4) /* 0.329411403 */, 16 },
+ /* 1782 */ { MAD_F(0x05464781) /* 0.329658038 */, 16 },
+ /* 1783 */ { MAD_F(0x05474a2b) /* 0.329904718 */, 16 },
+ /* 1784 */ { MAD_F(0x05484ce2) /* 0.330151445 */, 16 },
+ /* 1785 */ { MAD_F(0x05494fa4) /* 0.330398218 */, 16 },
+ /* 1786 */ { MAD_F(0x054a5273) /* 0.330645037 */, 16 },
+ /* 1787 */ { MAD_F(0x054b554e) /* 0.330891903 */, 16 },
+ /* 1788 */ { MAD_F(0x054c5836) /* 0.331138814 */, 16 },
+ /* 1789 */ { MAD_F(0x054d5b2a) /* 0.331385771 */, 16 },
+ /* 1790 */ { MAD_F(0x054e5e2b) /* 0.331632774 */, 16 },
+ /* 1791 */ { MAD_F(0x054f6138) /* 0.331879824 */, 16 },
+
+ /* 1792 */ { MAD_F(0x05506451) /* 0.332126919 */, 16 },
+ /* 1793 */ { MAD_F(0x05516776) /* 0.332374060 */, 16 },
+ /* 1794 */ { MAD_F(0x05526aa8) /* 0.332621247 */, 16 },
+ /* 1795 */ { MAD_F(0x05536de6) /* 0.332868480 */, 16 },
+ /* 1796 */ { MAD_F(0x05547131) /* 0.333115759 */, 16 },
+ /* 1797 */ { MAD_F(0x05557487) /* 0.333363084 */, 16 },
+ /* 1798 */ { MAD_F(0x055677ea) /* 0.333610455 */, 16 },
+ /* 1799 */ { MAD_F(0x05577b5a) /* 0.333857872 */, 16 },
+ /* 1800 */ { MAD_F(0x05587ed5) /* 0.334105334 */, 16 },
+ /* 1801 */ { MAD_F(0x0559825e) /* 0.334352843 */, 16 },
+ /* 1802 */ { MAD_F(0x055a85f2) /* 0.334600397 */, 16 },
+ /* 1803 */ { MAD_F(0x055b8992) /* 0.334847997 */, 16 },
+ /* 1804 */ { MAD_F(0x055c8d3f) /* 0.335095642 */, 16 },
+ /* 1805 */ { MAD_F(0x055d90f9) /* 0.335343334 */, 16 },
+ /* 1806 */ { MAD_F(0x055e94be) /* 0.335591071 */, 16 },
+ /* 1807 */ { MAD_F(0x055f9890) /* 0.335838854 */, 16 },
+
+ /* 1808 */ { MAD_F(0x05609c6e) /* 0.336086683 */, 16 },
+ /* 1809 */ { MAD_F(0x0561a058) /* 0.336334557 */, 16 },
+ /* 1810 */ { MAD_F(0x0562a44f) /* 0.336582477 */, 16 },
+ /* 1811 */ { MAD_F(0x0563a851) /* 0.336830443 */, 16 },
+ /* 1812 */ { MAD_F(0x0564ac60) /* 0.337078454 */, 16 },
+ /* 1813 */ { MAD_F(0x0565b07c) /* 0.337326511 */, 16 },
+ /* 1814 */ { MAD_F(0x0566b4a3) /* 0.337574614 */, 16 },
+ /* 1815 */ { MAD_F(0x0567b8d7) /* 0.337822762 */, 16 },
+ /* 1816 */ { MAD_F(0x0568bd17) /* 0.338070956 */, 16 },
+ /* 1817 */ { MAD_F(0x0569c163) /* 0.338319195 */, 16 },
+ /* 1818 */ { MAD_F(0x056ac5bc) /* 0.338567480 */, 16 },
+ /* 1819 */ { MAD_F(0x056bca20) /* 0.338815811 */, 16 },
+ /* 1820 */ { MAD_F(0x056cce91) /* 0.339064186 */, 16 },
+ /* 1821 */ { MAD_F(0x056dd30e) /* 0.339312608 */, 16 },
+ /* 1822 */ { MAD_F(0x056ed798) /* 0.339561075 */, 16 },
+ /* 1823 */ { MAD_F(0x056fdc2d) /* 0.339809587 */, 16 },
+
+ /* 1824 */ { MAD_F(0x0570e0cf) /* 0.340058145 */, 16 },
+ /* 1825 */ { MAD_F(0x0571e57d) /* 0.340306748 */, 16 },
+ /* 1826 */ { MAD_F(0x0572ea37) /* 0.340555397 */, 16 },
+ /* 1827 */ { MAD_F(0x0573eefd) /* 0.340804091 */, 16 },
+ /* 1828 */ { MAD_F(0x0574f3d0) /* 0.341052830 */, 16 },
+ /* 1829 */ { MAD_F(0x0575f8ae) /* 0.341301615 */, 16 },
+ /* 1830 */ { MAD_F(0x0576fd99) /* 0.341550445 */, 16 },
+ /* 1831 */ { MAD_F(0x05780290) /* 0.341799321 */, 16 },
+ /* 1832 */ { MAD_F(0x05790793) /* 0.342048241 */, 16 },
+ /* 1833 */ { MAD_F(0x057a0ca3) /* 0.342297207 */, 16 },
+ /* 1834 */ { MAD_F(0x057b11be) /* 0.342546219 */, 16 },
+ /* 1835 */ { MAD_F(0x057c16e6) /* 0.342795275 */, 16 },
+ /* 1836 */ { MAD_F(0x057d1c1a) /* 0.343044377 */, 16 },
+ /* 1837 */ { MAD_F(0x057e2159) /* 0.343293524 */, 16 },
+ /* 1838 */ { MAD_F(0x057f26a6) /* 0.343542717 */, 16 },
+ /* 1839 */ { MAD_F(0x05802bfe) /* 0.343791954 */, 16 },
+
+ /* 1840 */ { MAD_F(0x05813162) /* 0.344041237 */, 16 },
+ /* 1841 */ { MAD_F(0x058236d2) /* 0.344290564 */, 16 },
+ /* 1842 */ { MAD_F(0x05833c4f) /* 0.344539937 */, 16 },
+ /* 1843 */ { MAD_F(0x058441d8) /* 0.344789356 */, 16 },
+ /* 1844 */ { MAD_F(0x0585476c) /* 0.345038819 */, 16 },
+ /* 1845 */ { MAD_F(0x05864d0d) /* 0.345288327 */, 16 },
+ /* 1846 */ { MAD_F(0x058752ba) /* 0.345537880 */, 16 },
+ /* 1847 */ { MAD_F(0x05885873) /* 0.345787479 */, 16 },
+ /* 1848 */ { MAD_F(0x05895e39) /* 0.346037122 */, 16 },
+ /* 1849 */ { MAD_F(0x058a640a) /* 0.346286811 */, 16 },
+ /* 1850 */ { MAD_F(0x058b69e7) /* 0.346536545 */, 16 },
+ /* 1851 */ { MAD_F(0x058c6fd1) /* 0.346786323 */, 16 },
+ /* 1852 */ { MAD_F(0x058d75c6) /* 0.347036147 */, 16 },
+ /* 1853 */ { MAD_F(0x058e7bc8) /* 0.347286015 */, 16 },
+ /* 1854 */ { MAD_F(0x058f81d5) /* 0.347535929 */, 16 },
+ /* 1855 */ { MAD_F(0x059087ef) /* 0.347785887 */, 16 },
+
+ /* 1856 */ { MAD_F(0x05918e15) /* 0.348035890 */, 16 },
+ /* 1857 */ { MAD_F(0x05929447) /* 0.348285939 */, 16 },
+ /* 1858 */ { MAD_F(0x05939a84) /* 0.348536032 */, 16 },
+ /* 1859 */ { MAD_F(0x0594a0ce) /* 0.348786170 */, 16 },
+ /* 1860 */ { MAD_F(0x0595a724) /* 0.349036353 */, 16 },
+ /* 1861 */ { MAD_F(0x0596ad86) /* 0.349286580 */, 16 },
+ /* 1862 */ { MAD_F(0x0597b3f4) /* 0.349536853 */, 16 },
+ /* 1863 */ { MAD_F(0x0598ba6e) /* 0.349787170 */, 16 },
+ /* 1864 */ { MAD_F(0x0599c0f4) /* 0.350037532 */, 16 },
+ /* 1865 */ { MAD_F(0x059ac786) /* 0.350287939 */, 16 },
+ /* 1866 */ { MAD_F(0x059bce25) /* 0.350538391 */, 16 },
+ /* 1867 */ { MAD_F(0x059cd4cf) /* 0.350788887 */, 16 },
+ /* 1868 */ { MAD_F(0x059ddb85) /* 0.351039428 */, 16 },
+ /* 1869 */ { MAD_F(0x059ee247) /* 0.351290014 */, 16 },
+ /* 1870 */ { MAD_F(0x059fe915) /* 0.351540645 */, 16 },
+ /* 1871 */ { MAD_F(0x05a0efef) /* 0.351791320 */, 16 },
+
+ /* 1872 */ { MAD_F(0x05a1f6d5) /* 0.352042040 */, 16 },
+ /* 1873 */ { MAD_F(0x05a2fdc7) /* 0.352292804 */, 16 },
+ /* 1874 */ { MAD_F(0x05a404c5) /* 0.352543613 */, 16 },
+ /* 1875 */ { MAD_F(0x05a50bcf) /* 0.352794467 */, 16 },
+ /* 1876 */ { MAD_F(0x05a612e5) /* 0.353045365 */, 16 },
+ /* 1877 */ { MAD_F(0x05a71a07) /* 0.353296308 */, 16 },
+ /* 1878 */ { MAD_F(0x05a82135) /* 0.353547296 */, 16 },
+ /* 1879 */ { MAD_F(0x05a9286f) /* 0.353798328 */, 16 },
+ /* 1880 */ { MAD_F(0x05aa2fb5) /* 0.354049405 */, 16 },
+ /* 1881 */ { MAD_F(0x05ab3707) /* 0.354300526 */, 16 },
+ /* 1882 */ { MAD_F(0x05ac3e65) /* 0.354551691 */, 16 },
+ /* 1883 */ { MAD_F(0x05ad45ce) /* 0.354802901 */, 16 },
+ /* 1884 */ { MAD_F(0x05ae4d44) /* 0.355054156 */, 16 },
+ /* 1885 */ { MAD_F(0x05af54c6) /* 0.355305455 */, 16 },
+ /* 1886 */ { MAD_F(0x05b05c53) /* 0.355556799 */, 16 },
+ /* 1887 */ { MAD_F(0x05b163ed) /* 0.355808187 */, 16 },
+
+ /* 1888 */ { MAD_F(0x05b26b92) /* 0.356059619 */, 16 },
+ /* 1889 */ { MAD_F(0x05b37343) /* 0.356311096 */, 16 },
+ /* 1890 */ { MAD_F(0x05b47b00) /* 0.356562617 */, 16 },
+ /* 1891 */ { MAD_F(0x05b582c9) /* 0.356814182 */, 16 },
+ /* 1892 */ { MAD_F(0x05b68a9e) /* 0.357065792 */, 16 },
+ /* 1893 */ { MAD_F(0x05b7927f) /* 0.357317446 */, 16 },
+ /* 1894 */ { MAD_F(0x05b89a6c) /* 0.357569145 */, 16 },
+ /* 1895 */ { MAD_F(0x05b9a265) /* 0.357820887 */, 16 },
+ /* 1896 */ { MAD_F(0x05baaa69) /* 0.358072674 */, 16 },
+ /* 1897 */ { MAD_F(0x05bbb27a) /* 0.358324506 */, 16 },
+ /* 1898 */ { MAD_F(0x05bcba96) /* 0.358576381 */, 16 },
+ /* 1899 */ { MAD_F(0x05bdc2be) /* 0.358828301 */, 16 },
+ /* 1900 */ { MAD_F(0x05becaf2) /* 0.359080265 */, 16 },
+ /* 1901 */ { MAD_F(0x05bfd332) /* 0.359332273 */, 16 },
+ /* 1902 */ { MAD_F(0x05c0db7e) /* 0.359584326 */, 16 },
+ /* 1903 */ { MAD_F(0x05c1e3d6) /* 0.359836423 */, 16 },
+
+ /* 1904 */ { MAD_F(0x05c2ec39) /* 0.360088563 */, 16 },
+ /* 1905 */ { MAD_F(0x05c3f4a9) /* 0.360340748 */, 16 },
+ /* 1906 */ { MAD_F(0x05c4fd24) /* 0.360592977 */, 16 },
+ /* 1907 */ { MAD_F(0x05c605ab) /* 0.360845251 */, 16 },
+ /* 1908 */ { MAD_F(0x05c70e3e) /* 0.361097568 */, 16 },
+ /* 1909 */ { MAD_F(0x05c816dd) /* 0.361349929 */, 16 },
+ /* 1910 */ { MAD_F(0x05c91f87) /* 0.361602335 */, 16 },
+ /* 1911 */ { MAD_F(0x05ca283e) /* 0.361854784 */, 16 },
+ /* 1912 */ { MAD_F(0x05cb3100) /* 0.362107278 */, 16 },
+ /* 1913 */ { MAD_F(0x05cc39ce) /* 0.362359815 */, 16 },
+ /* 1914 */ { MAD_F(0x05cd42a8) /* 0.362612397 */, 16 },
+ /* 1915 */ { MAD_F(0x05ce4b8d) /* 0.362865022 */, 16 },
+ /* 1916 */ { MAD_F(0x05cf547f) /* 0.363117692 */, 16 },
+ /* 1917 */ { MAD_F(0x05d05d7c) /* 0.363370405 */, 16 },
+ /* 1918 */ { MAD_F(0x05d16685) /* 0.363623163 */, 16 },
+ /* 1919 */ { MAD_F(0x05d26f9a) /* 0.363875964 */, 16 },
+
+ /* 1920 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 16 },
+ /* 1921 */ { MAD_F(0x05d481e7) /* 0.364381698 */, 16 },
+ /* 1922 */ { MAD_F(0x05d58b1f) /* 0.364634632 */, 16 },
+ /* 1923 */ { MAD_F(0x05d69463) /* 0.364887608 */, 16 },
+ /* 1924 */ { MAD_F(0x05d79db3) /* 0.365140629 */, 16 },
+ /* 1925 */ { MAD_F(0x05d8a70f) /* 0.365393694 */, 16 },
+ /* 1926 */ { MAD_F(0x05d9b076) /* 0.365646802 */, 16 },
+ /* 1927 */ { MAD_F(0x05dab9e9) /* 0.365899955 */, 16 },
+ /* 1928 */ { MAD_F(0x05dbc368) /* 0.366153151 */, 16 },
+ /* 1929 */ { MAD_F(0x05dcccf2) /* 0.366406390 */, 16 },
+ /* 1930 */ { MAD_F(0x05ddd689) /* 0.366659674 */, 16 },
+ /* 1931 */ { MAD_F(0x05dee02b) /* 0.366913001 */, 16 },
+ /* 1932 */ { MAD_F(0x05dfe9d8) /* 0.367166372 */, 16 },
+ /* 1933 */ { MAD_F(0x05e0f392) /* 0.367419787 */, 16 },
+ /* 1934 */ { MAD_F(0x05e1fd57) /* 0.367673246 */, 16 },
+ /* 1935 */ { MAD_F(0x05e30728) /* 0.367926748 */, 16 },
+
+ /* 1936 */ { MAD_F(0x05e41105) /* 0.368180294 */, 16 },
+ /* 1937 */ { MAD_F(0x05e51aed) /* 0.368433883 */, 16 },
+ /* 1938 */ { MAD_F(0x05e624e1) /* 0.368687517 */, 16 },
+ /* 1939 */ { MAD_F(0x05e72ee1) /* 0.368941193 */, 16 },
+ /* 1940 */ { MAD_F(0x05e838ed) /* 0.369194914 */, 16 },
+ /* 1941 */ { MAD_F(0x05e94304) /* 0.369448678 */, 16 },
+ /* 1942 */ { MAD_F(0x05ea4d27) /* 0.369702485 */, 16 },
+ /* 1943 */ { MAD_F(0x05eb5756) /* 0.369956336 */, 16 },
+ /* 1944 */ { MAD_F(0x05ec6190) /* 0.370210231 */, 16 },
+ /* 1945 */ { MAD_F(0x05ed6bd6) /* 0.370464169 */, 16 },
+ /* 1946 */ { MAD_F(0x05ee7628) /* 0.370718151 */, 16 },
+ /* 1947 */ { MAD_F(0x05ef8085) /* 0.370972177 */, 16 },
+ /* 1948 */ { MAD_F(0x05f08aee) /* 0.371226245 */, 16 },
+ /* 1949 */ { MAD_F(0x05f19563) /* 0.371480358 */, 16 },
+ /* 1950 */ { MAD_F(0x05f29fe3) /* 0.371734513 */, 16 },
+ /* 1951 */ { MAD_F(0x05f3aa6f) /* 0.371988712 */, 16 },
+
+ /* 1952 */ { MAD_F(0x05f4b507) /* 0.372242955 */, 16 },
+ /* 1953 */ { MAD_F(0x05f5bfab) /* 0.372497241 */, 16 },
+ /* 1954 */ { MAD_F(0x05f6ca5a) /* 0.372751570 */, 16 },
+ /* 1955 */ { MAD_F(0x05f7d514) /* 0.373005943 */, 16 },
+ /* 1956 */ { MAD_F(0x05f8dfdb) /* 0.373260359 */, 16 },
+ /* 1957 */ { MAD_F(0x05f9eaad) /* 0.373514819 */, 16 },
+ /* 1958 */ { MAD_F(0x05faf58a) /* 0.373769322 */, 16 },
+ /* 1959 */ { MAD_F(0x05fc0073) /* 0.374023868 */, 16 },
+ /* 1960 */ { MAD_F(0x05fd0b68) /* 0.374278458 */, 16 },
+ /* 1961 */ { MAD_F(0x05fe1669) /* 0.374533091 */, 16 },
+ /* 1962 */ { MAD_F(0x05ff2175) /* 0.374787767 */, 16 },
+ /* 1963 */ { MAD_F(0x06002c8d) /* 0.375042486 */, 16 },
+ /* 1964 */ { MAD_F(0x060137b0) /* 0.375297249 */, 16 },
+ /* 1965 */ { MAD_F(0x060242df) /* 0.375552055 */, 16 },
+ /* 1966 */ { MAD_F(0x06034e19) /* 0.375806904 */, 16 },
+ /* 1967 */ { MAD_F(0x0604595f) /* 0.376061796 */, 16 },
+
+ /* 1968 */ { MAD_F(0x060564b1) /* 0.376316732 */, 16 },
+ /* 1969 */ { MAD_F(0x0606700f) /* 0.376571710 */, 16 },
+ /* 1970 */ { MAD_F(0x06077b77) /* 0.376826732 */, 16 },
+ /* 1971 */ { MAD_F(0x060886ec) /* 0.377081797 */, 16 },
+ /* 1972 */ { MAD_F(0x0609926c) /* 0.377336905 */, 16 },
+ /* 1973 */ { MAD_F(0x060a9df8) /* 0.377592057 */, 16 },
+ /* 1974 */ { MAD_F(0x060ba98f) /* 0.377847251 */, 16 },
+ /* 1975 */ { MAD_F(0x060cb532) /* 0.378102489 */, 16 },
+ /* 1976 */ { MAD_F(0x060dc0e0) /* 0.378357769 */, 16 },
+ /* 1977 */ { MAD_F(0x060ecc9a) /* 0.378613093 */, 16 },
+ /* 1978 */ { MAD_F(0x060fd860) /* 0.378868460 */, 16 },
+ /* 1979 */ { MAD_F(0x0610e431) /* 0.379123870 */, 16 },
+ /* 1980 */ { MAD_F(0x0611f00d) /* 0.379379322 */, 16 },
+ /* 1981 */ { MAD_F(0x0612fbf5) /* 0.379634818 */, 16 },
+ /* 1982 */ { MAD_F(0x061407e9) /* 0.379890357 */, 16 },
+ /* 1983 */ { MAD_F(0x061513e8) /* 0.380145939 */, 16 },
+
+ /* 1984 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 16 },
+ /* 1985 */ { MAD_F(0x06172c09) /* 0.380657231 */, 16 },
+ /* 1986 */ { MAD_F(0x0618382b) /* 0.380912942 */, 16 },
+ /* 1987 */ { MAD_F(0x06194458) /* 0.381168695 */, 16 },
+ /* 1988 */ { MAD_F(0x061a5091) /* 0.381424492 */, 16 },
+ /* 1989 */ { MAD_F(0x061b5cd5) /* 0.381680331 */, 16 },
+ /* 1990 */ { MAD_F(0x061c6925) /* 0.381936213 */, 16 },
+ /* 1991 */ { MAD_F(0x061d7581) /* 0.382192138 */, 16 },
+ /* 1992 */ { MAD_F(0x061e81e8) /* 0.382448106 */, 16 },
+ /* 1993 */ { MAD_F(0x061f8e5a) /* 0.382704117 */, 16 },
+ /* 1994 */ { MAD_F(0x06209ad8) /* 0.382960171 */, 16 },
+ /* 1995 */ { MAD_F(0x0621a761) /* 0.383216267 */, 16 },
+ /* 1996 */ { MAD_F(0x0622b3f6) /* 0.383472406 */, 16 },
+ /* 1997 */ { MAD_F(0x0623c096) /* 0.383728588 */, 16 },
+ /* 1998 */ { MAD_F(0x0624cd42) /* 0.383984813 */, 16 },
+ /* 1999 */ { MAD_F(0x0625d9f9) /* 0.384241080 */, 16 },
+
+ /* 2000 */ { MAD_F(0x0626e6bc) /* 0.384497391 */, 16 },
+ /* 2001 */ { MAD_F(0x0627f38a) /* 0.384753744 */, 16 },
+ /* 2002 */ { MAD_F(0x06290064) /* 0.385010139 */, 16 },
+ /* 2003 */ { MAD_F(0x062a0d49) /* 0.385266578 */, 16 },
+ /* 2004 */ { MAD_F(0x062b1a3a) /* 0.385523059 */, 16 },
+ /* 2005 */ { MAD_F(0x062c2736) /* 0.385779582 */, 16 },
+ /* 2006 */ { MAD_F(0x062d343d) /* 0.386036149 */, 16 },
+ /* 2007 */ { MAD_F(0x062e4150) /* 0.386292758 */, 16 },
+ /* 2008 */ { MAD_F(0x062f4e6f) /* 0.386549409 */, 16 },
+ /* 2009 */ { MAD_F(0x06305b99) /* 0.386806104 */, 16 },
+ /* 2010 */ { MAD_F(0x063168ce) /* 0.387062840 */, 16 },
+ /* 2011 */ { MAD_F(0x0632760f) /* 0.387319620 */, 16 },
+ /* 2012 */ { MAD_F(0x0633835b) /* 0.387576442 */, 16 },
+ /* 2013 */ { MAD_F(0x063490b2) /* 0.387833306 */, 16 },
+ /* 2014 */ { MAD_F(0x06359e15) /* 0.388090213 */, 16 },
+ /* 2015 */ { MAD_F(0x0636ab83) /* 0.388347163 */, 16 },
+
+ /* 2016 */ { MAD_F(0x0637b8fd) /* 0.388604155 */, 16 },
+ /* 2017 */ { MAD_F(0x0638c682) /* 0.388861190 */, 16 },
+ /* 2018 */ { MAD_F(0x0639d413) /* 0.389118267 */, 16 },
+ /* 2019 */ { MAD_F(0x063ae1af) /* 0.389375386 */, 16 },
+ /* 2020 */ { MAD_F(0x063bef56) /* 0.389632548 */, 16 },
+ /* 2021 */ { MAD_F(0x063cfd09) /* 0.389889752 */, 16 },
+ /* 2022 */ { MAD_F(0x063e0ac7) /* 0.390146999 */, 16 },
+ /* 2023 */ { MAD_F(0x063f1891) /* 0.390404289 */, 16 },
+ /* 2024 */ { MAD_F(0x06402666) /* 0.390661620 */, 16 },
+ /* 2025 */ { MAD_F(0x06413446) /* 0.390918994 */, 16 },
+ /* 2026 */ { MAD_F(0x06424232) /* 0.391176411 */, 16 },
+ /* 2027 */ { MAD_F(0x06435029) /* 0.391433869 */, 16 },
+ /* 2028 */ { MAD_F(0x06445e2b) /* 0.391691371 */, 16 },
+ /* 2029 */ { MAD_F(0x06456c39) /* 0.391948914 */, 16 },
+ /* 2030 */ { MAD_F(0x06467a52) /* 0.392206500 */, 16 },
+ /* 2031 */ { MAD_F(0x06478877) /* 0.392464128 */, 16 },
+
+ /* 2032 */ { MAD_F(0x064896a7) /* 0.392721798 */, 16 },
+ /* 2033 */ { MAD_F(0x0649a4e2) /* 0.392979511 */, 16 },
+ /* 2034 */ { MAD_F(0x064ab328) /* 0.393237266 */, 16 },
+ /* 2035 */ { MAD_F(0x064bc17a) /* 0.393495063 */, 16 },
+ /* 2036 */ { MAD_F(0x064ccfd8) /* 0.393752902 */, 16 },
+ /* 2037 */ { MAD_F(0x064dde40) /* 0.394010784 */, 16 },
+ /* 2038 */ { MAD_F(0x064eecb4) /* 0.394268707 */, 16 },
+ /* 2039 */ { MAD_F(0x064ffb33) /* 0.394526673 */, 16 },
+ /* 2040 */ { MAD_F(0x065109be) /* 0.394784681 */, 16 },
+ /* 2041 */ { MAD_F(0x06521854) /* 0.395042732 */, 16 },
+ /* 2042 */ { MAD_F(0x065326f5) /* 0.395300824 */, 16 },
+ /* 2043 */ { MAD_F(0x065435a1) /* 0.395558959 */, 16 },
+ /* 2044 */ { MAD_F(0x06554459) /* 0.395817135 */, 16 },
+ /* 2045 */ { MAD_F(0x0656531c) /* 0.396075354 */, 16 },
+ /* 2046 */ { MAD_F(0x065761ea) /* 0.396333615 */, 16 },
+ /* 2047 */ { MAD_F(0x065870c4) /* 0.396591918 */, 16 },
+
+ /* 2048 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 16 },
+ /* 2049 */ { MAD_F(0x065a8e99) /* 0.397108650 */, 16 },
+ /* 2050 */ { MAD_F(0x065b9d95) /* 0.397367079 */, 16 },
+ /* 2051 */ { MAD_F(0x065cac9c) /* 0.397625550 */, 16 },
+ /* 2052 */ { MAD_F(0x065dbbae) /* 0.397884063 */, 16 },
+ /* 2053 */ { MAD_F(0x065ecacb) /* 0.398142619 */, 16 },
+ /* 2054 */ { MAD_F(0x065fd9f4) /* 0.398401216 */, 16 },
+ /* 2055 */ { MAD_F(0x0660e928) /* 0.398659855 */, 16 },
+ /* 2056 */ { MAD_F(0x0661f867) /* 0.398918536 */, 16 },
+ /* 2057 */ { MAD_F(0x066307b1) /* 0.399177259 */, 16 },
+ /* 2058 */ { MAD_F(0x06641707) /* 0.399436024 */, 16 },
+ /* 2059 */ { MAD_F(0x06652668) /* 0.399694831 */, 16 },
+ /* 2060 */ { MAD_F(0x066635d4) /* 0.399953679 */, 16 },
+ /* 2061 */ { MAD_F(0x0667454c) /* 0.400212570 */, 16 },
+ /* 2062 */ { MAD_F(0x066854ce) /* 0.400471503 */, 16 },
+ /* 2063 */ { MAD_F(0x0669645c) /* 0.400730477 */, 16 },
+
+ /* 2064 */ { MAD_F(0x066a73f5) /* 0.400989493 */, 16 },
+ /* 2065 */ { MAD_F(0x066b839a) /* 0.401248551 */, 16 },
+ /* 2066 */ { MAD_F(0x066c9349) /* 0.401507651 */, 16 },
+ /* 2067 */ { MAD_F(0x066da304) /* 0.401766793 */, 16 },
+ /* 2068 */ { MAD_F(0x066eb2ca) /* 0.402025976 */, 16 },
+ /* 2069 */ { MAD_F(0x066fc29b) /* 0.402285202 */, 16 },
+ /* 2070 */ { MAD_F(0x0670d278) /* 0.402544469 */, 16 },
+ /* 2071 */ { MAD_F(0x0671e25f) /* 0.402803777 */, 16 },
+ /* 2072 */ { MAD_F(0x0672f252) /* 0.403063128 */, 16 },
+ /* 2073 */ { MAD_F(0x06740250) /* 0.403322520 */, 16 },
+ /* 2074 */ { MAD_F(0x0675125a) /* 0.403581954 */, 16 },
+ /* 2075 */ { MAD_F(0x0676226e) /* 0.403841430 */, 16 },
+ /* 2076 */ { MAD_F(0x0677328e) /* 0.404100947 */, 16 },
+ /* 2077 */ { MAD_F(0x067842b9) /* 0.404360506 */, 16 },
+ /* 2078 */ { MAD_F(0x067952ef) /* 0.404620107 */, 16 },
+ /* 2079 */ { MAD_F(0x067a6330) /* 0.404879749 */, 16 },
+
+ /* 2080 */ { MAD_F(0x067b737c) /* 0.405139433 */, 16 },
+ /* 2081 */ { MAD_F(0x067c83d4) /* 0.405399159 */, 16 },
+ /* 2082 */ { MAD_F(0x067d9436) /* 0.405658926 */, 16 },
+ /* 2083 */ { MAD_F(0x067ea4a4) /* 0.405918735 */, 16 },
+ /* 2084 */ { MAD_F(0x067fb51d) /* 0.406178585 */, 16 },
+ /* 2085 */ { MAD_F(0x0680c5a2) /* 0.406438477 */, 16 },
+ /* 2086 */ { MAD_F(0x0681d631) /* 0.406698410 */, 16 },
+ /* 2087 */ { MAD_F(0x0682e6cb) /* 0.406958385 */, 16 },
+ /* 2088 */ { MAD_F(0x0683f771) /* 0.407218402 */, 16 },
+ /* 2089 */ { MAD_F(0x06850822) /* 0.407478460 */, 16 },
+ /* 2090 */ { MAD_F(0x068618de) /* 0.407738559 */, 16 },
+ /* 2091 */ { MAD_F(0x068729a5) /* 0.407998700 */, 16 },
+ /* 2092 */ { MAD_F(0x06883a77) /* 0.408258883 */, 16 },
+ /* 2093 */ { MAD_F(0x06894b55) /* 0.408519107 */, 16 },
+ /* 2094 */ { MAD_F(0x068a5c3d) /* 0.408779372 */, 16 },
+ /* 2095 */ { MAD_F(0x068b6d31) /* 0.409039679 */, 16 },
+
+ /* 2096 */ { MAD_F(0x068c7e2f) /* 0.409300027 */, 16 },
+ /* 2097 */ { MAD_F(0x068d8f39) /* 0.409560417 */, 16 },
+ /* 2098 */ { MAD_F(0x068ea04e) /* 0.409820848 */, 16 },
+ /* 2099 */ { MAD_F(0x068fb16e) /* 0.410081321 */, 16 },
+ /* 2100 */ { MAD_F(0x0690c299) /* 0.410341834 */, 16 },
+ /* 2101 */ { MAD_F(0x0691d3cf) /* 0.410602390 */, 16 },
+ /* 2102 */ { MAD_F(0x0692e511) /* 0.410862986 */, 16 },
+ /* 2103 */ { MAD_F(0x0693f65d) /* 0.411123624 */, 16 },
+ /* 2104 */ { MAD_F(0x069507b5) /* 0.411384303 */, 16 },
+ /* 2105 */ { MAD_F(0x06961917) /* 0.411645024 */, 16 },
+ /* 2106 */ { MAD_F(0x06972a85) /* 0.411905785 */, 16 },
+ /* 2107 */ { MAD_F(0x06983bfe) /* 0.412166588 */, 16 },
+ /* 2108 */ { MAD_F(0x06994d82) /* 0.412427433 */, 16 },
+ /* 2109 */ { MAD_F(0x069a5f11) /* 0.412688318 */, 16 },
+ /* 2110 */ { MAD_F(0x069b70ab) /* 0.412949245 */, 16 },
+ /* 2111 */ { MAD_F(0x069c8250) /* 0.413210213 */, 16 },
+
+ /* 2112 */ { MAD_F(0x069d9400) /* 0.413471222 */, 16 },
+ /* 2113 */ { MAD_F(0x069ea5bb) /* 0.413732273 */, 16 },
+ /* 2114 */ { MAD_F(0x069fb781) /* 0.413993364 */, 16 },
+ /* 2115 */ { MAD_F(0x06a0c953) /* 0.414254497 */, 16 },
+ /* 2116 */ { MAD_F(0x06a1db2f) /* 0.414515671 */, 16 },
+ /* 2117 */ { MAD_F(0x06a2ed16) /* 0.414776886 */, 16 },
+ /* 2118 */ { MAD_F(0x06a3ff09) /* 0.415038142 */, 16 },
+ /* 2119 */ { MAD_F(0x06a51106) /* 0.415299440 */, 16 },
+ /* 2120 */ { MAD_F(0x06a6230f) /* 0.415560778 */, 16 },
+ /* 2121 */ { MAD_F(0x06a73522) /* 0.415822157 */, 16 },
+ /* 2122 */ { MAD_F(0x06a84741) /* 0.416083578 */, 16 },
+ /* 2123 */ { MAD_F(0x06a9596a) /* 0.416345040 */, 16 },
+ /* 2124 */ { MAD_F(0x06aa6b9f) /* 0.416606542 */, 16 },
+ /* 2125 */ { MAD_F(0x06ab7ddf) /* 0.416868086 */, 16 },
+ /* 2126 */ { MAD_F(0x06ac9029) /* 0.417129671 */, 16 },
+ /* 2127 */ { MAD_F(0x06ada27f) /* 0.417391297 */, 16 },
+
+ /* 2128 */ { MAD_F(0x06aeb4e0) /* 0.417652964 */, 16 },
+ /* 2129 */ { MAD_F(0x06afc74b) /* 0.417914672 */, 16 },
+ /* 2130 */ { MAD_F(0x06b0d9c2) /* 0.418176420 */, 16 },
+ /* 2131 */ { MAD_F(0x06b1ec43) /* 0.418438210 */, 16 },
+ /* 2132 */ { MAD_F(0x06b2fed0) /* 0.418700041 */, 16 },
+ /* 2133 */ { MAD_F(0x06b41168) /* 0.418961912 */, 16 },
+ /* 2134 */ { MAD_F(0x06b5240a) /* 0.419223825 */, 16 },
+ /* 2135 */ { MAD_F(0x06b636b8) /* 0.419485778 */, 16 },
+ /* 2136 */ { MAD_F(0x06b74971) /* 0.419747773 */, 16 },
+ /* 2137 */ { MAD_F(0x06b85c34) /* 0.420009808 */, 16 },
+ /* 2138 */ { MAD_F(0x06b96f03) /* 0.420271884 */, 16 },
+ /* 2139 */ { MAD_F(0x06ba81dc) /* 0.420534001 */, 16 },
+ /* 2140 */ { MAD_F(0x06bb94c1) /* 0.420796159 */, 16 },
+ /* 2141 */ { MAD_F(0x06bca7b0) /* 0.421058358 */, 16 },
+ /* 2142 */ { MAD_F(0x06bdbaaa) /* 0.421320597 */, 16 },
+ /* 2143 */ { MAD_F(0x06becdb0) /* 0.421582878 */, 16 },
+
+ /* 2144 */ { MAD_F(0x06bfe0c0) /* 0.421845199 */, 16 },
+ /* 2145 */ { MAD_F(0x06c0f3db) /* 0.422107561 */, 16 },
+ /* 2146 */ { MAD_F(0x06c20702) /* 0.422369964 */, 16 },
+ /* 2147 */ { MAD_F(0x06c31a33) /* 0.422632407 */, 16 },
+ /* 2148 */ { MAD_F(0x06c42d6f) /* 0.422894891 */, 16 },
+ /* 2149 */ { MAD_F(0x06c540b6) /* 0.423157416 */, 16 },
+ /* 2150 */ { MAD_F(0x06c65408) /* 0.423419982 */, 16 },
+ /* 2151 */ { MAD_F(0x06c76765) /* 0.423682588 */, 16 },
+ /* 2152 */ { MAD_F(0x06c87acc) /* 0.423945235 */, 16 },
+ /* 2153 */ { MAD_F(0x06c98e3f) /* 0.424207923 */, 16 },
+ /* 2154 */ { MAD_F(0x06caa1bd) /* 0.424470652 */, 16 },
+ /* 2155 */ { MAD_F(0x06cbb545) /* 0.424733421 */, 16 },
+ /* 2156 */ { MAD_F(0x06ccc8d9) /* 0.424996230 */, 16 },
+ /* 2157 */ { MAD_F(0x06cddc77) /* 0.425259081 */, 16 },
+ /* 2158 */ { MAD_F(0x06cef020) /* 0.425521972 */, 16 },
+ /* 2159 */ { MAD_F(0x06d003d4) /* 0.425784903 */, 16 },
+
+ /* 2160 */ { MAD_F(0x06d11794) /* 0.426047876 */, 16 },
+ /* 2161 */ { MAD_F(0x06d22b5e) /* 0.426310889 */, 16 },
+ /* 2162 */ { MAD_F(0x06d33f32) /* 0.426573942 */, 16 },
+ /* 2163 */ { MAD_F(0x06d45312) /* 0.426837036 */, 16 },
+ /* 2164 */ { MAD_F(0x06d566fd) /* 0.427100170 */, 16 },
+ /* 2165 */ { MAD_F(0x06d67af2) /* 0.427363345 */, 16 },
+ /* 2166 */ { MAD_F(0x06d78ef3) /* 0.427626561 */, 16 },
+ /* 2167 */ { MAD_F(0x06d8a2fe) /* 0.427889817 */, 16 },
+ /* 2168 */ { MAD_F(0x06d9b714) /* 0.428153114 */, 16 },
+ /* 2169 */ { MAD_F(0x06dacb35) /* 0.428416451 */, 16 },
+ /* 2170 */ { MAD_F(0x06dbdf61) /* 0.428679828 */, 16 },
+ /* 2171 */ { MAD_F(0x06dcf398) /* 0.428943246 */, 16 },
+ /* 2172 */ { MAD_F(0x06de07d9) /* 0.429206704 */, 16 },
+ /* 2173 */ { MAD_F(0x06df1c26) /* 0.429470203 */, 16 },
+ /* 2174 */ { MAD_F(0x06e0307d) /* 0.429733743 */, 16 },
+ /* 2175 */ { MAD_F(0x06e144df) /* 0.429997322 */, 16 },
+
+ /* 2176 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 16 },
+ /* 2177 */ { MAD_F(0x06e36dc4) /* 0.430524603 */, 16 },
+ /* 2178 */ { MAD_F(0x06e48246) /* 0.430788304 */, 16 },
+ /* 2179 */ { MAD_F(0x06e596d4) /* 0.431052045 */, 16 },
+ /* 2180 */ { MAD_F(0x06e6ab6c) /* 0.431315826 */, 16 },
+ /* 2181 */ { MAD_F(0x06e7c00f) /* 0.431579648 */, 16 },
+ /* 2182 */ { MAD_F(0x06e8d4bd) /* 0.431843511 */, 16 },
+ /* 2183 */ { MAD_F(0x06e9e976) /* 0.432107413 */, 16 },
+ /* 2184 */ { MAD_F(0x06eafe3a) /* 0.432371356 */, 16 },
+ /* 2185 */ { MAD_F(0x06ec1308) /* 0.432635339 */, 16 },
+ /* 2186 */ { MAD_F(0x06ed27e2) /* 0.432899362 */, 16 },
+ /* 2187 */ { MAD_F(0x06ee3cc6) /* 0.433163426 */, 16 },
+ /* 2188 */ { MAD_F(0x06ef51b4) /* 0.433427530 */, 16 },
+ /* 2189 */ { MAD_F(0x06f066ae) /* 0.433691674 */, 16 },
+ /* 2190 */ { MAD_F(0x06f17bb3) /* 0.433955859 */, 16 },
+ /* 2191 */ { MAD_F(0x06f290c2) /* 0.434220083 */, 16 },
+
+ /* 2192 */ { MAD_F(0x06f3a5dc) /* 0.434484348 */, 16 },
+ /* 2193 */ { MAD_F(0x06f4bb01) /* 0.434748653 */, 16 },
+ /* 2194 */ { MAD_F(0x06f5d030) /* 0.435012998 */, 16 },
+ /* 2195 */ { MAD_F(0x06f6e56b) /* 0.435277383 */, 16 },
+ /* 2196 */ { MAD_F(0x06f7fab0) /* 0.435541809 */, 16 },
+ /* 2197 */ { MAD_F(0x06f91000) /* 0.435806274 */, 16 },
+ /* 2198 */ { MAD_F(0x06fa255a) /* 0.436070780 */, 16 },
+ /* 2199 */ { MAD_F(0x06fb3ac0) /* 0.436335326 */, 16 },
+ /* 2200 */ { MAD_F(0x06fc5030) /* 0.436599912 */, 16 },
+ /* 2201 */ { MAD_F(0x06fd65ab) /* 0.436864538 */, 16 },
+ /* 2202 */ { MAD_F(0x06fe7b31) /* 0.437129204 */, 16 },
+ /* 2203 */ { MAD_F(0x06ff90c2) /* 0.437393910 */, 16 },
+ /* 2204 */ { MAD_F(0x0700a65d) /* 0.437658657 */, 16 },
+ /* 2205 */ { MAD_F(0x0701bc03) /* 0.437923443 */, 16 },
+ /* 2206 */ { MAD_F(0x0702d1b4) /* 0.438188269 */, 16 },
+ /* 2207 */ { MAD_F(0x0703e76f) /* 0.438453136 */, 16 },
+
+ /* 2208 */ { MAD_F(0x0704fd35) /* 0.438718042 */, 16 },
+ /* 2209 */ { MAD_F(0x07061306) /* 0.438982988 */, 16 },
+ /* 2210 */ { MAD_F(0x070728e2) /* 0.439247975 */, 16 },
+ /* 2211 */ { MAD_F(0x07083ec9) /* 0.439513001 */, 16 },
+ /* 2212 */ { MAD_F(0x070954ba) /* 0.439778067 */, 16 },
+ /* 2213 */ { MAD_F(0x070a6ab6) /* 0.440043173 */, 16 },
+ /* 2214 */ { MAD_F(0x070b80bc) /* 0.440308320 */, 16 },
+ /* 2215 */ { MAD_F(0x070c96ce) /* 0.440573506 */, 16 },
+ /* 2216 */ { MAD_F(0x070dacea) /* 0.440838732 */, 16 },
+ /* 2217 */ { MAD_F(0x070ec310) /* 0.441103997 */, 16 },
+ /* 2218 */ { MAD_F(0x070fd942) /* 0.441369303 */, 16 },
+ /* 2219 */ { MAD_F(0x0710ef7e) /* 0.441634649 */, 16 },
+ /* 2220 */ { MAD_F(0x071205c5) /* 0.441900034 */, 16 },
+ /* 2221 */ { MAD_F(0x07131c17) /* 0.442165460 */, 16 },
+ /* 2222 */ { MAD_F(0x07143273) /* 0.442430925 */, 16 },
+ /* 2223 */ { MAD_F(0x071548da) /* 0.442696430 */, 16 },
+
+ /* 2224 */ { MAD_F(0x07165f4b) /* 0.442961975 */, 16 },
+ /* 2225 */ { MAD_F(0x071775c8) /* 0.443227559 */, 16 },
+ /* 2226 */ { MAD_F(0x07188c4f) /* 0.443493184 */, 16 },
+ /* 2227 */ { MAD_F(0x0719a2e0) /* 0.443758848 */, 16 },
+ /* 2228 */ { MAD_F(0x071ab97d) /* 0.444024552 */, 16 },
+ /* 2229 */ { MAD_F(0x071bd024) /* 0.444290296 */, 16 },
+ /* 2230 */ { MAD_F(0x071ce6d6) /* 0.444556079 */, 16 },
+ /* 2231 */ { MAD_F(0x071dfd92) /* 0.444821902 */, 16 },
+ /* 2232 */ { MAD_F(0x071f1459) /* 0.445087765 */, 16 },
+ /* 2233 */ { MAD_F(0x07202b2b) /* 0.445353668 */, 16 },
+ /* 2234 */ { MAD_F(0x07214207) /* 0.445619610 */, 16 },
+ /* 2235 */ { MAD_F(0x072258ee) /* 0.445885592 */, 16 },
+ /* 2236 */ { MAD_F(0x07236fe0) /* 0.446151614 */, 16 },
+ /* 2237 */ { MAD_F(0x072486dc) /* 0.446417675 */, 16 },
+ /* 2238 */ { MAD_F(0x07259de3) /* 0.446683776 */, 16 },
+ /* 2239 */ { MAD_F(0x0726b4f4) /* 0.446949917 */, 16 },
+
+ /* 2240 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 16 },
+ /* 2241 */ { MAD_F(0x0728e338) /* 0.447482317 */, 16 },
+ /* 2242 */ { MAD_F(0x0729fa69) /* 0.447748576 */, 16 },
+ /* 2243 */ { MAD_F(0x072b11a5) /* 0.448014875 */, 16 },
+ /* 2244 */ { MAD_F(0x072c28ec) /* 0.448281214 */, 16 },
+ /* 2245 */ { MAD_F(0x072d403d) /* 0.448547592 */, 16 },
+ /* 2246 */ { MAD_F(0x072e5799) /* 0.448814010 */, 16 },
+ /* 2247 */ { MAD_F(0x072f6f00) /* 0.449080467 */, 16 },
+ /* 2248 */ { MAD_F(0x07308671) /* 0.449346964 */, 16 },
+ /* 2249 */ { MAD_F(0x07319ded) /* 0.449613501 */, 16 },
+ /* 2250 */ { MAD_F(0x0732b573) /* 0.449880076 */, 16 },
+ /* 2251 */ { MAD_F(0x0733cd04) /* 0.450146692 */, 16 },
+ /* 2252 */ { MAD_F(0x0734e4a0) /* 0.450413347 */, 16 },
+ /* 2253 */ { MAD_F(0x0735fc46) /* 0.450680041 */, 16 },
+ /* 2254 */ { MAD_F(0x073713f7) /* 0.450946775 */, 16 },
+ /* 2255 */ { MAD_F(0x07382bb2) /* 0.451213548 */, 16 },
+
+ /* 2256 */ { MAD_F(0x07394378) /* 0.451480360 */, 16 },
+ /* 2257 */ { MAD_F(0x073a5b49) /* 0.451747213 */, 16 },
+ /* 2258 */ { MAD_F(0x073b7324) /* 0.452014104 */, 16 },
+ /* 2259 */ { MAD_F(0x073c8b0a) /* 0.452281035 */, 16 },
+ /* 2260 */ { MAD_F(0x073da2fa) /* 0.452548005 */, 16 },
+ /* 2261 */ { MAD_F(0x073ebaf5) /* 0.452815015 */, 16 },
+ /* 2262 */ { MAD_F(0x073fd2fa) /* 0.453082064 */, 16 },
+ /* 2263 */ { MAD_F(0x0740eb0a) /* 0.453349152 */, 16 },
+ /* 2264 */ { MAD_F(0x07420325) /* 0.453616280 */, 16 },
+ /* 2265 */ { MAD_F(0x07431b4a) /* 0.453883447 */, 16 },
+ /* 2266 */ { MAD_F(0x0744337a) /* 0.454150653 */, 16 },
+ /* 2267 */ { MAD_F(0x07454bb4) /* 0.454417899 */, 16 },
+ /* 2268 */ { MAD_F(0x074663f8) /* 0.454685184 */, 16 },
+ /* 2269 */ { MAD_F(0x07477c48) /* 0.454952508 */, 16 },
+ /* 2270 */ { MAD_F(0x074894a2) /* 0.455219872 */, 16 },
+ /* 2271 */ { MAD_F(0x0749ad06) /* 0.455487275 */, 16 },
+
+ /* 2272 */ { MAD_F(0x074ac575) /* 0.455754717 */, 16 },
+ /* 2273 */ { MAD_F(0x074bddee) /* 0.456022198 */, 16 },
+ /* 2274 */ { MAD_F(0x074cf672) /* 0.456289719 */, 16 },
+ /* 2275 */ { MAD_F(0x074e0f01) /* 0.456557278 */, 16 },
+ /* 2276 */ { MAD_F(0x074f279a) /* 0.456824877 */, 16 },
+ /* 2277 */ { MAD_F(0x0750403e) /* 0.457092516 */, 16 },
+ /* 2278 */ { MAD_F(0x075158ec) /* 0.457360193 */, 16 },
+ /* 2279 */ { MAD_F(0x075271a4) /* 0.457627909 */, 16 },
+ /* 2280 */ { MAD_F(0x07538a67) /* 0.457895665 */, 16 },
+ /* 2281 */ { MAD_F(0x0754a335) /* 0.458163460 */, 16 },
+ /* 2282 */ { MAD_F(0x0755bc0d) /* 0.458431294 */, 16 },
+ /* 2283 */ { MAD_F(0x0756d4f0) /* 0.458699167 */, 16 },
+ /* 2284 */ { MAD_F(0x0757eddd) /* 0.458967079 */, 16 },
+ /* 2285 */ { MAD_F(0x075906d5) /* 0.459235030 */, 16 },
+ /* 2286 */ { MAD_F(0x075a1fd7) /* 0.459503021 */, 16 },
+ /* 2287 */ { MAD_F(0x075b38e3) /* 0.459771050 */, 16 },
+
+ /* 2288 */ { MAD_F(0x075c51fa) /* 0.460039119 */, 16 },
+ /* 2289 */ { MAD_F(0x075d6b1c) /* 0.460307226 */, 16 },
+ /* 2290 */ { MAD_F(0x075e8448) /* 0.460575373 */, 16 },
+ /* 2291 */ { MAD_F(0x075f9d7f) /* 0.460843559 */, 16 },
+ /* 2292 */ { MAD_F(0x0760b6c0) /* 0.461111783 */, 16 },
+ /* 2293 */ { MAD_F(0x0761d00b) /* 0.461380047 */, 16 },
+ /* 2294 */ { MAD_F(0x0762e961) /* 0.461648350 */, 16 },
+ /* 2295 */ { MAD_F(0x076402c1) /* 0.461916691 */, 16 },
+ /* 2296 */ { MAD_F(0x07651c2c) /* 0.462185072 */, 16 },
+ /* 2297 */ { MAD_F(0x076635a2) /* 0.462453492 */, 16 },
+ /* 2298 */ { MAD_F(0x07674f22) /* 0.462721950 */, 16 },
+ /* 2299 */ { MAD_F(0x076868ac) /* 0.462990448 */, 16 },
+ /* 2300 */ { MAD_F(0x07698240) /* 0.463258984 */, 16 },
+ /* 2301 */ { MAD_F(0x076a9be0) /* 0.463527560 */, 16 },
+ /* 2302 */ { MAD_F(0x076bb589) /* 0.463796174 */, 16 },
+ /* 2303 */ { MAD_F(0x076ccf3d) /* 0.464064827 */, 16 },
+
+ /* 2304 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 16 },
+ /* 2305 */ { MAD_F(0x076f02c5) /* 0.464602250 */, 16 },
+ /* 2306 */ { MAD_F(0x07701c98) /* 0.464871020 */, 16 },
+ /* 2307 */ { MAD_F(0x07713676) /* 0.465139829 */, 16 },
+ /* 2308 */ { MAD_F(0x0772505e) /* 0.465408676 */, 16 },
+ /* 2309 */ { MAD_F(0x07736a51) /* 0.465677563 */, 16 },
+ /* 2310 */ { MAD_F(0x0774844e) /* 0.465946488 */, 16 },
+ /* 2311 */ { MAD_F(0x07759e55) /* 0.466215452 */, 16 },
+ /* 2312 */ { MAD_F(0x0776b867) /* 0.466484455 */, 16 },
+ /* 2313 */ { MAD_F(0x0777d283) /* 0.466753496 */, 16 },
+ /* 2314 */ { MAD_F(0x0778ecaa) /* 0.467022577 */, 16 },
+ /* 2315 */ { MAD_F(0x077a06db) /* 0.467291696 */, 16 },
+ /* 2316 */ { MAD_F(0x077b2117) /* 0.467560854 */, 16 },
+ /* 2317 */ { MAD_F(0x077c3b5d) /* 0.467830050 */, 16 },
+ /* 2318 */ { MAD_F(0x077d55ad) /* 0.468099285 */, 16 },
+ /* 2319 */ { MAD_F(0x077e7008) /* 0.468368560 */, 16 },
+
+ /* 2320 */ { MAD_F(0x077f8a6d) /* 0.468637872 */, 16 },
+ /* 2321 */ { MAD_F(0x0780a4dc) /* 0.468907224 */, 16 },
+ /* 2322 */ { MAD_F(0x0781bf56) /* 0.469176614 */, 16 },
+ /* 2323 */ { MAD_F(0x0782d9da) /* 0.469446043 */, 16 },
+ /* 2324 */ { MAD_F(0x0783f469) /* 0.469715510 */, 16 },
+ /* 2325 */ { MAD_F(0x07850f02) /* 0.469985016 */, 16 },
+ /* 2326 */ { MAD_F(0x078629a5) /* 0.470254561 */, 16 },
+ /* 2327 */ { MAD_F(0x07874453) /* 0.470524145 */, 16 },
+ /* 2328 */ { MAD_F(0x07885f0b) /* 0.470793767 */, 16 },
+ /* 2329 */ { MAD_F(0x078979ce) /* 0.471063427 */, 16 },
+ /* 2330 */ { MAD_F(0x078a949a) /* 0.471333126 */, 16 },
+ /* 2331 */ { MAD_F(0x078baf72) /* 0.471602864 */, 16 },
+ /* 2332 */ { MAD_F(0x078cca53) /* 0.471872641 */, 16 },
+ /* 2333 */ { MAD_F(0x078de53f) /* 0.472142456 */, 16 },
+ /* 2334 */ { MAD_F(0x078f0035) /* 0.472412309 */, 16 },
+ /* 2335 */ { MAD_F(0x07901b36) /* 0.472682201 */, 16 },
+
+ /* 2336 */ { MAD_F(0x07913641) /* 0.472952132 */, 16 },
+ /* 2337 */ { MAD_F(0x07925156) /* 0.473222101 */, 16 },
+ /* 2338 */ { MAD_F(0x07936c76) /* 0.473492108 */, 16 },
+ /* 2339 */ { MAD_F(0x079487a0) /* 0.473762155 */, 16 },
+ /* 2340 */ { MAD_F(0x0795a2d4) /* 0.474032239 */, 16 },
+ /* 2341 */ { MAD_F(0x0796be13) /* 0.474302362 */, 16 },
+ /* 2342 */ { MAD_F(0x0797d95c) /* 0.474572524 */, 16 },
+ /* 2343 */ { MAD_F(0x0798f4af) /* 0.474842724 */, 16 },
+ /* 2344 */ { MAD_F(0x079a100c) /* 0.475112962 */, 16 },
+ /* 2345 */ { MAD_F(0x079b2b74) /* 0.475383239 */, 16 },
+ /* 2346 */ { MAD_F(0x079c46e7) /* 0.475653554 */, 16 },
+ /* 2347 */ { MAD_F(0x079d6263) /* 0.475923908 */, 16 },
+ /* 2348 */ { MAD_F(0x079e7dea) /* 0.476194300 */, 16 },
+ /* 2349 */ { MAD_F(0x079f997b) /* 0.476464731 */, 16 },
+ /* 2350 */ { MAD_F(0x07a0b516) /* 0.476735200 */, 16 },
+ /* 2351 */ { MAD_F(0x07a1d0bc) /* 0.477005707 */, 16 },
+
+ /* 2352 */ { MAD_F(0x07a2ec6c) /* 0.477276252 */, 16 },
+ /* 2353 */ { MAD_F(0x07a40827) /* 0.477546836 */, 16 },
+ /* 2354 */ { MAD_F(0x07a523eb) /* 0.477817459 */, 16 },
+ /* 2355 */ { MAD_F(0x07a63fba) /* 0.478088119 */, 16 },
+ /* 2356 */ { MAD_F(0x07a75b93) /* 0.478358818 */, 16 },
+ /* 2357 */ { MAD_F(0x07a87777) /* 0.478629555 */, 16 },
+ /* 2358 */ { MAD_F(0x07a99364) /* 0.478900331 */, 16 },
+ /* 2359 */ { MAD_F(0x07aaaf5c) /* 0.479171145 */, 16 },
+ /* 2360 */ { MAD_F(0x07abcb5f) /* 0.479441997 */, 16 },
+ /* 2361 */ { MAD_F(0x07ace76b) /* 0.479712887 */, 16 },
+ /* 2362 */ { MAD_F(0x07ae0382) /* 0.479983816 */, 16 },
+ /* 2363 */ { MAD_F(0x07af1fa3) /* 0.480254782 */, 16 },
+ /* 2364 */ { MAD_F(0x07b03bcf) /* 0.480525787 */, 16 },
+ /* 2365 */ { MAD_F(0x07b15804) /* 0.480796831 */, 16 },
+ /* 2366 */ { MAD_F(0x07b27444) /* 0.481067912 */, 16 },
+ /* 2367 */ { MAD_F(0x07b3908e) /* 0.481339032 */, 16 },
+
+ /* 2368 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 16 },
+ /* 2369 */ { MAD_F(0x07b5c941) /* 0.481881385 */, 16 },
+ /* 2370 */ { MAD_F(0x07b6e5aa) /* 0.482152620 */, 16 },
+ /* 2371 */ { MAD_F(0x07b8021d) /* 0.482423892 */, 16 },
+ /* 2372 */ { MAD_F(0x07b91e9b) /* 0.482695202 */, 16 },
+ /* 2373 */ { MAD_F(0x07ba3b22) /* 0.482966551 */, 16 },
+ /* 2374 */ { MAD_F(0x07bb57b4) /* 0.483237938 */, 16 },
+ /* 2375 */ { MAD_F(0x07bc7450) /* 0.483509362 */, 16 },
+ /* 2376 */ { MAD_F(0x07bd90f6) /* 0.483780825 */, 16 },
+ /* 2377 */ { MAD_F(0x07beada7) /* 0.484052326 */, 16 },
+ /* 2378 */ { MAD_F(0x07bfca61) /* 0.484323865 */, 16 },
+ /* 2379 */ { MAD_F(0x07c0e726) /* 0.484595443 */, 16 },
+ /* 2380 */ { MAD_F(0x07c203f5) /* 0.484867058 */, 16 },
+ /* 2381 */ { MAD_F(0x07c320cf) /* 0.485138711 */, 16 },
+ /* 2382 */ { MAD_F(0x07c43db2) /* 0.485410402 */, 16 },
+ /* 2383 */ { MAD_F(0x07c55aa0) /* 0.485682131 */, 16 },
+
+ /* 2384 */ { MAD_F(0x07c67798) /* 0.485953899 */, 16 },
+ /* 2385 */ { MAD_F(0x07c7949a) /* 0.486225704 */, 16 },
+ /* 2386 */ { MAD_F(0x07c8b1a7) /* 0.486497547 */, 16 },
+ /* 2387 */ { MAD_F(0x07c9cebd) /* 0.486769429 */, 16 },
+ /* 2388 */ { MAD_F(0x07caebde) /* 0.487041348 */, 16 },
+ /* 2389 */ { MAD_F(0x07cc0909) /* 0.487313305 */, 16 },
+ /* 2390 */ { MAD_F(0x07cd263e) /* 0.487585300 */, 16 },
+ /* 2391 */ { MAD_F(0x07ce437d) /* 0.487857333 */, 16 },
+ /* 2392 */ { MAD_F(0x07cf60c7) /* 0.488129404 */, 16 },
+ /* 2393 */ { MAD_F(0x07d07e1b) /* 0.488401513 */, 16 },
+ /* 2394 */ { MAD_F(0x07d19b79) /* 0.488673660 */, 16 },
+ /* 2395 */ { MAD_F(0x07d2b8e1) /* 0.488945845 */, 16 },
+ /* 2396 */ { MAD_F(0x07d3d653) /* 0.489218067 */, 16 },
+ /* 2397 */ { MAD_F(0x07d4f3cf) /* 0.489490328 */, 16 },
+ /* 2398 */ { MAD_F(0x07d61156) /* 0.489762626 */, 16 },
+ /* 2399 */ { MAD_F(0x07d72ee6) /* 0.490034962 */, 16 },
+
+ /* 2400 */ { MAD_F(0x07d84c81) /* 0.490307336 */, 16 },
+ /* 2401 */ { MAD_F(0x07d96a26) /* 0.490579748 */, 16 },
+ /* 2402 */ { MAD_F(0x07da87d5) /* 0.490852198 */, 16 },
+ /* 2403 */ { MAD_F(0x07dba58f) /* 0.491124686 */, 16 },
+ /* 2404 */ { MAD_F(0x07dcc352) /* 0.491397211 */, 16 },
+ /* 2405 */ { MAD_F(0x07dde120) /* 0.491669774 */, 16 },
+ /* 2406 */ { MAD_F(0x07defef7) /* 0.491942375 */, 16 },
+ /* 2407 */ { MAD_F(0x07e01cd9) /* 0.492215014 */, 16 },
+ /* 2408 */ { MAD_F(0x07e13ac5) /* 0.492487690 */, 16 },
+ /* 2409 */ { MAD_F(0x07e258bc) /* 0.492760404 */, 16 },
+ /* 2410 */ { MAD_F(0x07e376bc) /* 0.493033156 */, 16 },
+ /* 2411 */ { MAD_F(0x07e494c6) /* 0.493305946 */, 16 },
+ /* 2412 */ { MAD_F(0x07e5b2db) /* 0.493578773 */, 16 },
+ /* 2413 */ { MAD_F(0x07e6d0f9) /* 0.493851638 */, 16 },
+ /* 2414 */ { MAD_F(0x07e7ef22) /* 0.494124541 */, 16 },
+ /* 2415 */ { MAD_F(0x07e90d55) /* 0.494397481 */, 16 },
+
+ /* 2416 */ { MAD_F(0x07ea2b92) /* 0.494670459 */, 16 },
+ /* 2417 */ { MAD_F(0x07eb49d9) /* 0.494943475 */, 16 },
+ /* 2418 */ { MAD_F(0x07ec682a) /* 0.495216529 */, 16 },
+ /* 2419 */ { MAD_F(0x07ed8686) /* 0.495489620 */, 16 },
+ /* 2420 */ { MAD_F(0x07eea4eb) /* 0.495762748 */, 16 },
+ /* 2421 */ { MAD_F(0x07efc35b) /* 0.496035915 */, 16 },
+ /* 2422 */ { MAD_F(0x07f0e1d4) /* 0.496309119 */, 16 },
+ /* 2423 */ { MAD_F(0x07f20058) /* 0.496582360 */, 16 },
+ /* 2424 */ { MAD_F(0x07f31ee6) /* 0.496855639 */, 16 },
+ /* 2425 */ { MAD_F(0x07f43d7e) /* 0.497128956 */, 16 },
+ /* 2426 */ { MAD_F(0x07f55c20) /* 0.497402310 */, 16 },
+ /* 2427 */ { MAD_F(0x07f67acc) /* 0.497675702 */, 16 },
+ /* 2428 */ { MAD_F(0x07f79982) /* 0.497949132 */, 16 },
+ /* 2429 */ { MAD_F(0x07f8b842) /* 0.498222598 */, 16 },
+ /* 2430 */ { MAD_F(0x07f9d70c) /* 0.498496103 */, 16 },
+ /* 2431 */ { MAD_F(0x07faf5e1) /* 0.498769645 */, 16 },
+
+ /* 2432 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 16 },
+ /* 2433 */ { MAD_F(0x07fd33a8) /* 0.499316841 */, 16 },
+ /* 2434 */ { MAD_F(0x07fe529a) /* 0.499590496 */, 16 },
+ /* 2435 */ { MAD_F(0x07ff7197) /* 0.499864188 */, 16 },
+ /* 2436 */ { MAD_F(0x0400484f) /* 0.250068959 */, 17 },
+ /* 2437 */ { MAD_F(0x0400d7d7) /* 0.250205842 */, 17 },
+ /* 2438 */ { MAD_F(0x04016764) /* 0.250342744 */, 17 },
+ /* 2439 */ { MAD_F(0x0401f6f7) /* 0.250479665 */, 17 },
+ /* 2440 */ { MAD_F(0x0402868e) /* 0.250616605 */, 17 },
+ /* 2441 */ { MAD_F(0x0403162b) /* 0.250753563 */, 17 },
+ /* 2442 */ { MAD_F(0x0403a5cc) /* 0.250890540 */, 17 },
+ /* 2443 */ { MAD_F(0x04043573) /* 0.251027536 */, 17 },
+ /* 2444 */ { MAD_F(0x0404c51e) /* 0.251164550 */, 17 },
+ /* 2445 */ { MAD_F(0x040554cf) /* 0.251301583 */, 17 },
+ /* 2446 */ { MAD_F(0x0405e484) /* 0.251438635 */, 17 },
+ /* 2447 */ { MAD_F(0x0406743f) /* 0.251575706 */, 17 },
+
+ /* 2448 */ { MAD_F(0x040703ff) /* 0.251712795 */, 17 },
+ /* 2449 */ { MAD_F(0x040793c3) /* 0.251849903 */, 17 },
+ /* 2450 */ { MAD_F(0x0408238d) /* 0.251987029 */, 17 },
+ /* 2451 */ { MAD_F(0x0408b35b) /* 0.252124174 */, 17 },
+ /* 2452 */ { MAD_F(0x0409432f) /* 0.252261338 */, 17 },
+ /* 2453 */ { MAD_F(0x0409d308) /* 0.252398520 */, 17 },
+ /* 2454 */ { MAD_F(0x040a62e5) /* 0.252535721 */, 17 },
+ /* 2455 */ { MAD_F(0x040af2c8) /* 0.252672941 */, 17 },
+ /* 2456 */ { MAD_F(0x040b82b0) /* 0.252810180 */, 17 },
+ /* 2457 */ { MAD_F(0x040c129c) /* 0.252947436 */, 17 },
+ /* 2458 */ { MAD_F(0x040ca28e) /* 0.253084712 */, 17 },
+ /* 2459 */ { MAD_F(0x040d3284) /* 0.253222006 */, 17 },
+ /* 2460 */ { MAD_F(0x040dc280) /* 0.253359319 */, 17 },
+ /* 2461 */ { MAD_F(0x040e5281) /* 0.253496651 */, 17 },
+ /* 2462 */ { MAD_F(0x040ee286) /* 0.253634001 */, 17 },
+ /* 2463 */ { MAD_F(0x040f7291) /* 0.253771369 */, 17 },
+
+ /* 2464 */ { MAD_F(0x041002a1) /* 0.253908756 */, 17 },
+ /* 2465 */ { MAD_F(0x041092b5) /* 0.254046162 */, 17 },
+ /* 2466 */ { MAD_F(0x041122cf) /* 0.254183587 */, 17 },
+ /* 2467 */ { MAD_F(0x0411b2ed) /* 0.254321030 */, 17 },
+ /* 2468 */ { MAD_F(0x04124311) /* 0.254458491 */, 17 },
+ /* 2469 */ { MAD_F(0x0412d339) /* 0.254595971 */, 17 },
+ /* 2470 */ { MAD_F(0x04136367) /* 0.254733470 */, 17 },
+ /* 2471 */ { MAD_F(0x0413f399) /* 0.254870987 */, 17 },
+ /* 2472 */ { MAD_F(0x041483d1) /* 0.255008523 */, 17 },
+ /* 2473 */ { MAD_F(0x0415140d) /* 0.255146077 */, 17 },
+ /* 2474 */ { MAD_F(0x0415a44f) /* 0.255283650 */, 17 },
+ /* 2475 */ { MAD_F(0x04163495) /* 0.255421241 */, 17 },
+ /* 2476 */ { MAD_F(0x0416c4e1) /* 0.255558851 */, 17 },
+ /* 2477 */ { MAD_F(0x04175531) /* 0.255696480 */, 17 },
+ /* 2478 */ { MAD_F(0x0417e586) /* 0.255834127 */, 17 },
+ /* 2479 */ { MAD_F(0x041875e1) /* 0.255971792 */, 17 },
+
+ /* 2480 */ { MAD_F(0x04190640) /* 0.256109476 */, 17 },
+ /* 2481 */ { MAD_F(0x041996a4) /* 0.256247179 */, 17 },
+ /* 2482 */ { MAD_F(0x041a270d) /* 0.256384900 */, 17 },
+ /* 2483 */ { MAD_F(0x041ab77b) /* 0.256522639 */, 17 },
+ /* 2484 */ { MAD_F(0x041b47ef) /* 0.256660397 */, 17 },
+ /* 2485 */ { MAD_F(0x041bd867) /* 0.256798174 */, 17 },
+ /* 2486 */ { MAD_F(0x041c68e4) /* 0.256935969 */, 17 },
+ /* 2487 */ { MAD_F(0x041cf966) /* 0.257073782 */, 17 },
+ /* 2488 */ { MAD_F(0x041d89ed) /* 0.257211614 */, 17 },
+ /* 2489 */ { MAD_F(0x041e1a79) /* 0.257349465 */, 17 },
+ /* 2490 */ { MAD_F(0x041eab0a) /* 0.257487334 */, 17 },
+ /* 2491 */ { MAD_F(0x041f3b9f) /* 0.257625221 */, 17 },
+ /* 2492 */ { MAD_F(0x041fcc3a) /* 0.257763127 */, 17 },
+ /* 2493 */ { MAD_F(0x04205cda) /* 0.257901051 */, 17 },
+ /* 2494 */ { MAD_F(0x0420ed7f) /* 0.258038994 */, 17 },
+ /* 2495 */ { MAD_F(0x04217e28) /* 0.258176955 */, 17 },
+
+ /* 2496 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 17 },
+ /* 2497 */ { MAD_F(0x04229f8a) /* 0.258452932 */, 17 },
+ /* 2498 */ { MAD_F(0x04233043) /* 0.258590948 */, 17 },
+ /* 2499 */ { MAD_F(0x0423c100) /* 0.258728983 */, 17 },
+ /* 2500 */ { MAD_F(0x042451c3) /* 0.258867036 */, 17 },
+ /* 2501 */ { MAD_F(0x0424e28a) /* 0.259005108 */, 17 },
+ /* 2502 */ { MAD_F(0x04257356) /* 0.259143198 */, 17 },
+ /* 2503 */ { MAD_F(0x04260428) /* 0.259281307 */, 17 },
+ /* 2504 */ { MAD_F(0x042694fe) /* 0.259419433 */, 17 },
+ /* 2505 */ { MAD_F(0x042725d9) /* 0.259557579 */, 17 },
+ /* 2506 */ { MAD_F(0x0427b6b9) /* 0.259695742 */, 17 },
+ /* 2507 */ { MAD_F(0x0428479e) /* 0.259833924 */, 17 },
+ /* 2508 */ { MAD_F(0x0428d888) /* 0.259972124 */, 17 },
+ /* 2509 */ { MAD_F(0x04296976) /* 0.260110343 */, 17 },
+ /* 2510 */ { MAD_F(0x0429fa6a) /* 0.260248580 */, 17 },
+ /* 2511 */ { MAD_F(0x042a8b63) /* 0.260386836 */, 17 },
+
+ /* 2512 */ { MAD_F(0x042b1c60) /* 0.260525110 */, 17 },
+ /* 2513 */ { MAD_F(0x042bad63) /* 0.260663402 */, 17 },
+ /* 2514 */ { MAD_F(0x042c3e6a) /* 0.260801712 */, 17 },
+ /* 2515 */ { MAD_F(0x042ccf77) /* 0.260940041 */, 17 },
+ /* 2516 */ { MAD_F(0x042d6088) /* 0.261078388 */, 17 },
+ /* 2517 */ { MAD_F(0x042df19e) /* 0.261216754 */, 17 },
+ /* 2518 */ { MAD_F(0x042e82b9) /* 0.261355137 */, 17 },
+ /* 2519 */ { MAD_F(0x042f13d9) /* 0.261493540 */, 17 },
+ /* 2520 */ { MAD_F(0x042fa4fe) /* 0.261631960 */, 17 },
+ /* 2521 */ { MAD_F(0x04303628) /* 0.261770399 */, 17 },
+ /* 2522 */ { MAD_F(0x0430c757) /* 0.261908856 */, 17 },
+ /* 2523 */ { MAD_F(0x0431588b) /* 0.262047331 */, 17 },
+ /* 2524 */ { MAD_F(0x0431e9c3) /* 0.262185825 */, 17 },
+ /* 2525 */ { MAD_F(0x04327b01) /* 0.262324337 */, 17 },
+ /* 2526 */ { MAD_F(0x04330c43) /* 0.262462867 */, 17 },
+ /* 2527 */ { MAD_F(0x04339d8a) /* 0.262601416 */, 17 },
+
+ /* 2528 */ { MAD_F(0x04342ed7) /* 0.262739982 */, 17 },
+ /* 2529 */ { MAD_F(0x0434c028) /* 0.262878568 */, 17 },
+ /* 2530 */ { MAD_F(0x0435517e) /* 0.263017171 */, 17 },
+ /* 2531 */ { MAD_F(0x0435e2d9) /* 0.263155792 */, 17 },
+ /* 2532 */ { MAD_F(0x04367439) /* 0.263294432 */, 17 },
+ /* 2533 */ { MAD_F(0x0437059e) /* 0.263433090 */, 17 },
+ /* 2534 */ { MAD_F(0x04379707) /* 0.263571767 */, 17 },
+ /* 2535 */ { MAD_F(0x04382876) /* 0.263710461 */, 17 },
+ /* 2536 */ { MAD_F(0x0438b9e9) /* 0.263849174 */, 17 },
+ /* 2537 */ { MAD_F(0x04394b61) /* 0.263987905 */, 17 },
+ /* 2538 */ { MAD_F(0x0439dcdf) /* 0.264126655 */, 17 },
+ /* 2539 */ { MAD_F(0x043a6e61) /* 0.264265422 */, 17 },
+ /* 2540 */ { MAD_F(0x043affe8) /* 0.264404208 */, 17 },
+ /* 2541 */ { MAD_F(0x043b9174) /* 0.264543012 */, 17 },
+ /* 2542 */ { MAD_F(0x043c2305) /* 0.264681834 */, 17 },
+ /* 2543 */ { MAD_F(0x043cb49a) /* 0.264820674 */, 17 },
+
+ /* 2544 */ { MAD_F(0x043d4635) /* 0.264959533 */, 17 },
+ /* 2545 */ { MAD_F(0x043dd7d4) /* 0.265098410 */, 17 },
+ /* 2546 */ { MAD_F(0x043e6979) /* 0.265237305 */, 17 },
+ /* 2547 */ { MAD_F(0x043efb22) /* 0.265376218 */, 17 },
+ /* 2548 */ { MAD_F(0x043f8cd0) /* 0.265515149 */, 17 },
+ /* 2549 */ { MAD_F(0x04401e83) /* 0.265654099 */, 17 },
+ /* 2550 */ { MAD_F(0x0440b03b) /* 0.265793066 */, 17 },
+ /* 2551 */ { MAD_F(0x044141f7) /* 0.265932052 */, 17 },
+ /* 2552 */ { MAD_F(0x0441d3b9) /* 0.266071056 */, 17 },
+ /* 2553 */ { MAD_F(0x04426580) /* 0.266210078 */, 17 },
+ /* 2554 */ { MAD_F(0x0442f74b) /* 0.266349119 */, 17 },
+ /* 2555 */ { MAD_F(0x0443891b) /* 0.266488177 */, 17 },
+ /* 2556 */ { MAD_F(0x04441af0) /* 0.266627254 */, 17 },
+ /* 2557 */ { MAD_F(0x0444acca) /* 0.266766349 */, 17 },
+ /* 2558 */ { MAD_F(0x04453ea9) /* 0.266905462 */, 17 },
+ /* 2559 */ { MAD_F(0x0445d08d) /* 0.267044593 */, 17 },
+
+ /* 2560 */ { MAD_F(0x04466275) /* 0.267183742 */, 17 },
+ /* 2561 */ { MAD_F(0x0446f463) /* 0.267322909 */, 17 },
+ /* 2562 */ { MAD_F(0x04478655) /* 0.267462094 */, 17 },
+ /* 2563 */ { MAD_F(0x0448184c) /* 0.267601298 */, 17 },
+ /* 2564 */ { MAD_F(0x0448aa48) /* 0.267740519 */, 17 },
+ /* 2565 */ { MAD_F(0x04493c49) /* 0.267879759 */, 17 },
+ /* 2566 */ { MAD_F(0x0449ce4f) /* 0.268019017 */, 17 },
+ /* 2567 */ { MAD_F(0x044a6059) /* 0.268158293 */, 17 },
+ /* 2568 */ { MAD_F(0x044af269) /* 0.268297587 */, 17 },
+ /* 2569 */ { MAD_F(0x044b847d) /* 0.268436899 */, 17 },
+ /* 2570 */ { MAD_F(0x044c1696) /* 0.268576229 */, 17 },
+ /* 2571 */ { MAD_F(0x044ca8b4) /* 0.268715577 */, 17 },
+ /* 2572 */ { MAD_F(0x044d3ad7) /* 0.268854943 */, 17 },
+ /* 2573 */ { MAD_F(0x044dccff) /* 0.268994328 */, 17 },
+ /* 2574 */ { MAD_F(0x044e5f2b) /* 0.269133730 */, 17 },
+ /* 2575 */ { MAD_F(0x044ef15d) /* 0.269273150 */, 17 },
+
+ /* 2576 */ { MAD_F(0x044f8393) /* 0.269412589 */, 17 },
+ /* 2577 */ { MAD_F(0x045015ce) /* 0.269552045 */, 17 },
+ /* 2578 */ { MAD_F(0x0450a80e) /* 0.269691520 */, 17 },
+ /* 2579 */ { MAD_F(0x04513a53) /* 0.269831013 */, 17 },
+ /* 2580 */ { MAD_F(0x0451cc9c) /* 0.269970523 */, 17 },
+ /* 2581 */ { MAD_F(0x04525eeb) /* 0.270110052 */, 17 },
+ /* 2582 */ { MAD_F(0x0452f13e) /* 0.270249599 */, 17 },
+ /* 2583 */ { MAD_F(0x04538396) /* 0.270389163 */, 17 },
+ /* 2584 */ { MAD_F(0x045415f3) /* 0.270528746 */, 17 },
+ /* 2585 */ { MAD_F(0x0454a855) /* 0.270668347 */, 17 },
+ /* 2586 */ { MAD_F(0x04553abb) /* 0.270807965 */, 17 },
+ /* 2587 */ { MAD_F(0x0455cd27) /* 0.270947602 */, 17 },
+ /* 2588 */ { MAD_F(0x04565f97) /* 0.271087257 */, 17 },
+ /* 2589 */ { MAD_F(0x0456f20c) /* 0.271226930 */, 17 },
+ /* 2590 */ { MAD_F(0x04578486) /* 0.271366620 */, 17 },
+ /* 2591 */ { MAD_F(0x04581705) /* 0.271506329 */, 17 },
+
+ /* 2592 */ { MAD_F(0x0458a989) /* 0.271646056 */, 17 },
+ /* 2593 */ { MAD_F(0x04593c11) /* 0.271785800 */, 17 },
+ /* 2594 */ { MAD_F(0x0459ce9e) /* 0.271925563 */, 17 },
+ /* 2595 */ { MAD_F(0x045a6130) /* 0.272065343 */, 17 },
+ /* 2596 */ { MAD_F(0x045af3c7) /* 0.272205142 */, 17 },
+ /* 2597 */ { MAD_F(0x045b8663) /* 0.272344958 */, 17 },
+ /* 2598 */ { MAD_F(0x045c1903) /* 0.272484793 */, 17 },
+ /* 2599 */ { MAD_F(0x045caba9) /* 0.272624645 */, 17 },
+ /* 2600 */ { MAD_F(0x045d3e53) /* 0.272764515 */, 17 },
+ /* 2601 */ { MAD_F(0x045dd102) /* 0.272904403 */, 17 },
+ /* 2602 */ { MAD_F(0x045e63b6) /* 0.273044310 */, 17 },
+ /* 2603 */ { MAD_F(0x045ef66e) /* 0.273184234 */, 17 },
+ /* 2604 */ { MAD_F(0x045f892b) /* 0.273324176 */, 17 },
+ /* 2605 */ { MAD_F(0x04601bee) /* 0.273464136 */, 17 },
+ /* 2606 */ { MAD_F(0x0460aeb5) /* 0.273604113 */, 17 },
+ /* 2607 */ { MAD_F(0x04614180) /* 0.273744109 */, 17 },
+
+ /* 2608 */ { MAD_F(0x0461d451) /* 0.273884123 */, 17 },
+ /* 2609 */ { MAD_F(0x04626727) /* 0.274024154 */, 17 },
+ /* 2610 */ { MAD_F(0x0462fa01) /* 0.274164204 */, 17 },
+ /* 2611 */ { MAD_F(0x04638ce0) /* 0.274304271 */, 17 },
+ /* 2612 */ { MAD_F(0x04641fc4) /* 0.274444356 */, 17 },
+ /* 2613 */ { MAD_F(0x0464b2ac) /* 0.274584459 */, 17 },
+ /* 2614 */ { MAD_F(0x0465459a) /* 0.274724580 */, 17 },
+ /* 2615 */ { MAD_F(0x0465d88c) /* 0.274864719 */, 17 },
+ /* 2616 */ { MAD_F(0x04666b83) /* 0.275004875 */, 17 },
+ /* 2617 */ { MAD_F(0x0466fe7f) /* 0.275145050 */, 17 },
+ /* 2618 */ { MAD_F(0x0467917f) /* 0.275285242 */, 17 },
+ /* 2619 */ { MAD_F(0x04682485) /* 0.275425452 */, 17 },
+ /* 2620 */ { MAD_F(0x0468b78f) /* 0.275565681 */, 17 },
+ /* 2621 */ { MAD_F(0x04694a9e) /* 0.275705926 */, 17 },
+ /* 2622 */ { MAD_F(0x0469ddb2) /* 0.275846190 */, 17 },
+ /* 2623 */ { MAD_F(0x046a70ca) /* 0.275986472 */, 17 },
+
+ /* 2624 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 17 },
+ /* 2625 */ { MAD_F(0x046b970a) /* 0.276267088 */, 17 },
+ /* 2626 */ { MAD_F(0x046c2a31) /* 0.276407423 */, 17 },
+ /* 2627 */ { MAD_F(0x046cbd5c) /* 0.276547776 */, 17 },
+ /* 2628 */ { MAD_F(0x046d508d) /* 0.276688147 */, 17 },
+ /* 2629 */ { MAD_F(0x046de3c2) /* 0.276828535 */, 17 },
+ /* 2630 */ { MAD_F(0x046e76fc) /* 0.276968942 */, 17 },
+ /* 2631 */ { MAD_F(0x046f0a3b) /* 0.277109366 */, 17 },
+ /* 2632 */ { MAD_F(0x046f9d7e) /* 0.277249808 */, 17 },
+ /* 2633 */ { MAD_F(0x047030c7) /* 0.277390267 */, 17 },
+ /* 2634 */ { MAD_F(0x0470c414) /* 0.277530745 */, 17 },
+ /* 2635 */ { MAD_F(0x04715766) /* 0.277671240 */, 17 },
+ /* 2636 */ { MAD_F(0x0471eabc) /* 0.277811753 */, 17 },
+ /* 2637 */ { MAD_F(0x04727e18) /* 0.277952284 */, 17 },
+ /* 2638 */ { MAD_F(0x04731178) /* 0.278092832 */, 17 },
+ /* 2639 */ { MAD_F(0x0473a4dd) /* 0.278233399 */, 17 },
+
+ /* 2640 */ { MAD_F(0x04743847) /* 0.278373983 */, 17 },
+ /* 2641 */ { MAD_F(0x0474cbb5) /* 0.278514584 */, 17 },
+ /* 2642 */ { MAD_F(0x04755f29) /* 0.278655204 */, 17 },
+ /* 2643 */ { MAD_F(0x0475f2a1) /* 0.278795841 */, 17 },
+ /* 2644 */ { MAD_F(0x0476861d) /* 0.278936496 */, 17 },
+ /* 2645 */ { MAD_F(0x0477199f) /* 0.279077169 */, 17 },
+ /* 2646 */ { MAD_F(0x0477ad25) /* 0.279217860 */, 17 },
+ /* 2647 */ { MAD_F(0x047840b0) /* 0.279358568 */, 17 },
+ /* 2648 */ { MAD_F(0x0478d440) /* 0.279499294 */, 17 },
+ /* 2649 */ { MAD_F(0x047967d5) /* 0.279640037 */, 17 },
+ /* 2650 */ { MAD_F(0x0479fb6e) /* 0.279780799 */, 17 },
+ /* 2651 */ { MAD_F(0x047a8f0c) /* 0.279921578 */, 17 },
+ /* 2652 */ { MAD_F(0x047b22af) /* 0.280062375 */, 17 },
+ /* 2653 */ { MAD_F(0x047bb657) /* 0.280203189 */, 17 },
+ /* 2654 */ { MAD_F(0x047c4a03) /* 0.280344021 */, 17 },
+ /* 2655 */ { MAD_F(0x047cddb4) /* 0.280484871 */, 17 },
+
+ /* 2656 */ { MAD_F(0x047d716a) /* 0.280625739 */, 17 },
+ /* 2657 */ { MAD_F(0x047e0524) /* 0.280766624 */, 17 },
+ /* 2658 */ { MAD_F(0x047e98e4) /* 0.280907527 */, 17 },
+ /* 2659 */ { MAD_F(0x047f2ca8) /* 0.281048447 */, 17 },
+ /* 2660 */ { MAD_F(0x047fc071) /* 0.281189385 */, 17 },
+ /* 2661 */ { MAD_F(0x0480543e) /* 0.281330341 */, 17 },
+ /* 2662 */ { MAD_F(0x0480e811) /* 0.281471315 */, 17 },
+ /* 2663 */ { MAD_F(0x04817be8) /* 0.281612306 */, 17 },
+ /* 2664 */ { MAD_F(0x04820fc3) /* 0.281753315 */, 17 },
+ /* 2665 */ { MAD_F(0x0482a3a4) /* 0.281894341 */, 17 },
+ /* 2666 */ { MAD_F(0x04833789) /* 0.282035386 */, 17 },
+ /* 2667 */ { MAD_F(0x0483cb73) /* 0.282176447 */, 17 },
+ /* 2668 */ { MAD_F(0x04845f62) /* 0.282317527 */, 17 },
+ /* 2669 */ { MAD_F(0x0484f355) /* 0.282458624 */, 17 },
+ /* 2670 */ { MAD_F(0x0485874d) /* 0.282599738 */, 17 },
+ /* 2671 */ { MAD_F(0x04861b4a) /* 0.282740871 */, 17 },
+
+ /* 2672 */ { MAD_F(0x0486af4c) /* 0.282882021 */, 17 },
+ /* 2673 */ { MAD_F(0x04874352) /* 0.283023188 */, 17 },
+ /* 2674 */ { MAD_F(0x0487d75d) /* 0.283164373 */, 17 },
+ /* 2675 */ { MAD_F(0x04886b6d) /* 0.283305576 */, 17 },
+ /* 2676 */ { MAD_F(0x0488ff82) /* 0.283446796 */, 17 },
+ /* 2677 */ { MAD_F(0x0489939b) /* 0.283588034 */, 17 },
+ /* 2678 */ { MAD_F(0x048a27b9) /* 0.283729290 */, 17 },
+ /* 2679 */ { MAD_F(0x048abbdc) /* 0.283870563 */, 17 },
+ /* 2680 */ { MAD_F(0x048b5003) /* 0.284011853 */, 17 },
+ /* 2681 */ { MAD_F(0x048be42f) /* 0.284153161 */, 17 },
+ /* 2682 */ { MAD_F(0x048c7860) /* 0.284294487 */, 17 },
+ /* 2683 */ { MAD_F(0x048d0c96) /* 0.284435831 */, 17 },
+ /* 2684 */ { MAD_F(0x048da0d0) /* 0.284577192 */, 17 },
+ /* 2685 */ { MAD_F(0x048e350f) /* 0.284718570 */, 17 },
+ /* 2686 */ { MAD_F(0x048ec953) /* 0.284859966 */, 17 },
+ /* 2687 */ { MAD_F(0x048f5d9b) /* 0.285001380 */, 17 },
+
+ /* 2688 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 17 },
+ /* 2689 */ { MAD_F(0x0490863a) /* 0.285284259 */, 17 },
+ /* 2690 */ { MAD_F(0x04911a91) /* 0.285425726 */, 17 },
+ /* 2691 */ { MAD_F(0x0491aeec) /* 0.285567209 */, 17 },
+ /* 2692 */ { MAD_F(0x0492434c) /* 0.285708711 */, 17 },
+ /* 2693 */ { MAD_F(0x0492d7b0) /* 0.285850229 */, 17 },
+ /* 2694 */ { MAD_F(0x04936c1a) /* 0.285991766 */, 17 },
+ /* 2695 */ { MAD_F(0x04940088) /* 0.286133319 */, 17 },
+ /* 2696 */ { MAD_F(0x049494fb) /* 0.286274891 */, 17 },
+ /* 2697 */ { MAD_F(0x04952972) /* 0.286416480 */, 17 },
+ /* 2698 */ { MAD_F(0x0495bdee) /* 0.286558086 */, 17 },
+ /* 2699 */ { MAD_F(0x0496526f) /* 0.286699710 */, 17 },
+ /* 2700 */ { MAD_F(0x0496e6f5) /* 0.286841351 */, 17 },
+ /* 2701 */ { MAD_F(0x04977b7f) /* 0.286983010 */, 17 },
+ /* 2702 */ { MAD_F(0x0498100e) /* 0.287124686 */, 17 },
+ /* 2703 */ { MAD_F(0x0498a4a1) /* 0.287266380 */, 17 },
+
+ /* 2704 */ { MAD_F(0x0499393a) /* 0.287408091 */, 17 },
+ /* 2705 */ { MAD_F(0x0499cdd7) /* 0.287549820 */, 17 },
+ /* 2706 */ { MAD_F(0x049a6278) /* 0.287691566 */, 17 },
+ /* 2707 */ { MAD_F(0x049af71f) /* 0.287833330 */, 17 },
+ /* 2708 */ { MAD_F(0x049b8bca) /* 0.287975111 */, 17 },
+ /* 2709 */ { MAD_F(0x049c207a) /* 0.288116909 */, 17 },
+ /* 2710 */ { MAD_F(0x049cb52e) /* 0.288258725 */, 17 },
+ /* 2711 */ { MAD_F(0x049d49e7) /* 0.288400559 */, 17 },
+ /* 2712 */ { MAD_F(0x049ddea5) /* 0.288542409 */, 17 },
+ /* 2713 */ { MAD_F(0x049e7367) /* 0.288684278 */, 17 },
+ /* 2714 */ { MAD_F(0x049f082f) /* 0.288826163 */, 17 },
+ /* 2715 */ { MAD_F(0x049f9cfa) /* 0.288968067 */, 17 },
+ /* 2716 */ { MAD_F(0x04a031cb) /* 0.289109987 */, 17 },
+ /* 2717 */ { MAD_F(0x04a0c6a0) /* 0.289251925 */, 17 },
+ /* 2718 */ { MAD_F(0x04a15b7a) /* 0.289393881 */, 17 },
+ /* 2719 */ { MAD_F(0x04a1f059) /* 0.289535854 */, 17 },
+
+ /* 2720 */ { MAD_F(0x04a2853c) /* 0.289677844 */, 17 },
+ /* 2721 */ { MAD_F(0x04a31a24) /* 0.289819851 */, 17 },
+ /* 2722 */ { MAD_F(0x04a3af10) /* 0.289961876 */, 17 },
+ /* 2723 */ { MAD_F(0x04a44401) /* 0.290103919 */, 17 },
+ /* 2724 */ { MAD_F(0x04a4d8f7) /* 0.290245979 */, 17 },
+ /* 2725 */ { MAD_F(0x04a56df2) /* 0.290388056 */, 17 },
+ /* 2726 */ { MAD_F(0x04a602f1) /* 0.290530150 */, 17 },
+ /* 2727 */ { MAD_F(0x04a697f5) /* 0.290672262 */, 17 },
+ /* 2728 */ { MAD_F(0x04a72cfe) /* 0.290814392 */, 17 },
+ /* 2729 */ { MAD_F(0x04a7c20b) /* 0.290956538 */, 17 },
+ /* 2730 */ { MAD_F(0x04a8571d) /* 0.291098703 */, 17 },
+ /* 2731 */ { MAD_F(0x04a8ec33) /* 0.291240884 */, 17 },
+ /* 2732 */ { MAD_F(0x04a9814e) /* 0.291383083 */, 17 },
+ /* 2733 */ { MAD_F(0x04aa166e) /* 0.291525299 */, 17 },
+ /* 2734 */ { MAD_F(0x04aaab93) /* 0.291667532 */, 17 },
+ /* 2735 */ { MAD_F(0x04ab40bc) /* 0.291809783 */, 17 },
+
+ /* 2736 */ { MAD_F(0x04abd5ea) /* 0.291952051 */, 17 },
+ /* 2737 */ { MAD_F(0x04ac6b1c) /* 0.292094337 */, 17 },
+ /* 2738 */ { MAD_F(0x04ad0053) /* 0.292236640 */, 17 },
+ /* 2739 */ { MAD_F(0x04ad958f) /* 0.292378960 */, 17 },
+ /* 2740 */ { MAD_F(0x04ae2ad0) /* 0.292521297 */, 17 },
+ /* 2741 */ { MAD_F(0x04aec015) /* 0.292663652 */, 17 },
+ /* 2742 */ { MAD_F(0x04af555e) /* 0.292806024 */, 17 },
+ /* 2743 */ { MAD_F(0x04afeaad) /* 0.292948414 */, 17 },
+ /* 2744 */ { MAD_F(0x04b08000) /* 0.293090820 */, 17 },
+ /* 2745 */ { MAD_F(0x04b11557) /* 0.293233244 */, 17 },
+ /* 2746 */ { MAD_F(0x04b1aab4) /* 0.293375686 */, 17 },
+ /* 2747 */ { MAD_F(0x04b24015) /* 0.293518144 */, 17 },
+ /* 2748 */ { MAD_F(0x04b2d57a) /* 0.293660620 */, 17 },
+ /* 2749 */ { MAD_F(0x04b36ae4) /* 0.293803113 */, 17 },
+ /* 2750 */ { MAD_F(0x04b40053) /* 0.293945624 */, 17 },
+ /* 2751 */ { MAD_F(0x04b495c7) /* 0.294088151 */, 17 },
+
+ /* 2752 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 17 },
+ /* 2753 */ { MAD_F(0x04b5c0bc) /* 0.294373259 */, 17 },
+ /* 2754 */ { MAD_F(0x04b6563d) /* 0.294515838 */, 17 },
+ /* 2755 */ { MAD_F(0x04b6ebc3) /* 0.294658435 */, 17 },
+ /* 2756 */ { MAD_F(0x04b7814e) /* 0.294801049 */, 17 },
+ /* 2757 */ { MAD_F(0x04b816dd) /* 0.294943680 */, 17 },
+ /* 2758 */ { MAD_F(0x04b8ac71) /* 0.295086329 */, 17 },
+ /* 2759 */ { MAD_F(0x04b9420a) /* 0.295228995 */, 17 },
+ /* 2760 */ { MAD_F(0x04b9d7a7) /* 0.295371678 */, 17 },
+ /* 2761 */ { MAD_F(0x04ba6d49) /* 0.295514378 */, 17 },
+ /* 2762 */ { MAD_F(0x04bb02ef) /* 0.295657095 */, 17 },
+ /* 2763 */ { MAD_F(0x04bb989a) /* 0.295799830 */, 17 },
+ /* 2764 */ { MAD_F(0x04bc2e4a) /* 0.295942582 */, 17 },
+ /* 2765 */ { MAD_F(0x04bcc3fe) /* 0.296085351 */, 17 },
+ /* 2766 */ { MAD_F(0x04bd59b7) /* 0.296228138 */, 17 },
+ /* 2767 */ { MAD_F(0x04bdef74) /* 0.296370941 */, 17 },
+
+ /* 2768 */ { MAD_F(0x04be8537) /* 0.296513762 */, 17 },
+ /* 2769 */ { MAD_F(0x04bf1afd) /* 0.296656600 */, 17 },
+ /* 2770 */ { MAD_F(0x04bfb0c9) /* 0.296799455 */, 17 },
+ /* 2771 */ { MAD_F(0x04c04699) /* 0.296942327 */, 17 },
+ /* 2772 */ { MAD_F(0x04c0dc6d) /* 0.297085217 */, 17 },
+ /* 2773 */ { MAD_F(0x04c17247) /* 0.297228124 */, 17 },
+ /* 2774 */ { MAD_F(0x04c20824) /* 0.297371048 */, 17 },
+ /* 2775 */ { MAD_F(0x04c29e07) /* 0.297513989 */, 17 },
+ /* 2776 */ { MAD_F(0x04c333ee) /* 0.297656947 */, 17 },
+ /* 2777 */ { MAD_F(0x04c3c9da) /* 0.297799922 */, 17 },
+ /* 2778 */ { MAD_F(0x04c45fca) /* 0.297942915 */, 17 },
+ /* 2779 */ { MAD_F(0x04c4f5bf) /* 0.298085925 */, 17 },
+ /* 2780 */ { MAD_F(0x04c58bb8) /* 0.298228951 */, 17 },
+ /* 2781 */ { MAD_F(0x04c621b6) /* 0.298371996 */, 17 },
+ /* 2782 */ { MAD_F(0x04c6b7b9) /* 0.298515057 */, 17 },
+ /* 2783 */ { MAD_F(0x04c74dc0) /* 0.298658135 */, 17 },
+
+ /* 2784 */ { MAD_F(0x04c7e3cc) /* 0.298801231 */, 17 },
+ /* 2785 */ { MAD_F(0x04c879dd) /* 0.298944343 */, 17 },
+ /* 2786 */ { MAD_F(0x04c90ff2) /* 0.299087473 */, 17 },
+ /* 2787 */ { MAD_F(0x04c9a60c) /* 0.299230620 */, 17 },
+ /* 2788 */ { MAD_F(0x04ca3c2a) /* 0.299373784 */, 17 },
+ /* 2789 */ { MAD_F(0x04cad24d) /* 0.299516965 */, 17 },
+ /* 2790 */ { MAD_F(0x04cb6874) /* 0.299660163 */, 17 },
+ /* 2791 */ { MAD_F(0x04cbfea0) /* 0.299803378 */, 17 },
+ /* 2792 */ { MAD_F(0x04cc94d1) /* 0.299946611 */, 17 },
+ /* 2793 */ { MAD_F(0x04cd2b06) /* 0.300089860 */, 17 },
+ /* 2794 */ { MAD_F(0x04cdc140) /* 0.300233127 */, 17 },
+ /* 2795 */ { MAD_F(0x04ce577f) /* 0.300376411 */, 17 },
+ /* 2796 */ { MAD_F(0x04ceedc2) /* 0.300519711 */, 17 },
+ /* 2797 */ { MAD_F(0x04cf8409) /* 0.300663029 */, 17 },
+ /* 2798 */ { MAD_F(0x04d01a55) /* 0.300806364 */, 17 },
+ /* 2799 */ { MAD_F(0x04d0b0a6) /* 0.300949716 */, 17 },
+
+ /* 2800 */ { MAD_F(0x04d146fb) /* 0.301093085 */, 17 },
+ /* 2801 */ { MAD_F(0x04d1dd55) /* 0.301236472 */, 17 },
+ /* 2802 */ { MAD_F(0x04d273b4) /* 0.301379875 */, 17 },
+ /* 2803 */ { MAD_F(0x04d30a17) /* 0.301523295 */, 17 },
+ /* 2804 */ { MAD_F(0x04d3a07f) /* 0.301666733 */, 17 },
+ /* 2805 */ { MAD_F(0x04d436eb) /* 0.301810187 */, 17 },
+ /* 2806 */ { MAD_F(0x04d4cd5c) /* 0.301953659 */, 17 },
+ /* 2807 */ { MAD_F(0x04d563d1) /* 0.302097147 */, 17 },
+ /* 2808 */ { MAD_F(0x04d5fa4b) /* 0.302240653 */, 17 },
+ /* 2809 */ { MAD_F(0x04d690ca) /* 0.302384175 */, 17 },
+ /* 2810 */ { MAD_F(0x04d7274d) /* 0.302527715 */, 17 },
+ /* 2811 */ { MAD_F(0x04d7bdd5) /* 0.302671271 */, 17 },
+ /* 2812 */ { MAD_F(0x04d85461) /* 0.302814845 */, 17 },
+ /* 2813 */ { MAD_F(0x04d8eaf2) /* 0.302958436 */, 17 },
+ /* 2814 */ { MAD_F(0x04d98187) /* 0.303102044 */, 17 },
+ /* 2815 */ { MAD_F(0x04da1821) /* 0.303245668 */, 17 },
+
+ /* 2816 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 17 },
+ /* 2817 */ { MAD_F(0x04db4563) /* 0.303532969 */, 17 },
+ /* 2818 */ { MAD_F(0x04dbdc0a) /* 0.303676645 */, 17 },
+ /* 2819 */ { MAD_F(0x04dc72b7) /* 0.303820337 */, 17 },
+ /* 2820 */ { MAD_F(0x04dd0967) /* 0.303964047 */, 17 },
+ /* 2821 */ { MAD_F(0x04dda01d) /* 0.304107774 */, 17 },
+ /* 2822 */ { MAD_F(0x04de36d7) /* 0.304251517 */, 17 },
+ /* 2823 */ { MAD_F(0x04decd95) /* 0.304395278 */, 17 },
+ /* 2824 */ { MAD_F(0x04df6458) /* 0.304539056 */, 17 },
+ /* 2825 */ { MAD_F(0x04dffb20) /* 0.304682850 */, 17 },
+ /* 2826 */ { MAD_F(0x04e091ec) /* 0.304826662 */, 17 },
+ /* 2827 */ { MAD_F(0x04e128bc) /* 0.304970491 */, 17 },
+ /* 2828 */ { MAD_F(0x04e1bf92) /* 0.305114336 */, 17 },
+ /* 2829 */ { MAD_F(0x04e2566b) /* 0.305258199 */, 17 },
+ /* 2830 */ { MAD_F(0x04e2ed4a) /* 0.305402078 */, 17 },
+ /* 2831 */ { MAD_F(0x04e3842d) /* 0.305545974 */, 17 },
+
+ /* 2832 */ { MAD_F(0x04e41b14) /* 0.305689888 */, 17 },
+ /* 2833 */ { MAD_F(0x04e4b200) /* 0.305833818 */, 17 },
+ /* 2834 */ { MAD_F(0x04e548f1) /* 0.305977765 */, 17 },
+ /* 2835 */ { MAD_F(0x04e5dfe6) /* 0.306121729 */, 17 },
+ /* 2836 */ { MAD_F(0x04e676df) /* 0.306265710 */, 17 },
+ /* 2837 */ { MAD_F(0x04e70dde) /* 0.306409708 */, 17 },
+ /* 2838 */ { MAD_F(0x04e7a4e0) /* 0.306553723 */, 17 },
+ /* 2839 */ { MAD_F(0x04e83be7) /* 0.306697755 */, 17 },
+ /* 2840 */ { MAD_F(0x04e8d2f3) /* 0.306841804 */, 17 },
+ /* 2841 */ { MAD_F(0x04e96a04) /* 0.306985869 */, 17 },
+ /* 2842 */ { MAD_F(0x04ea0118) /* 0.307129952 */, 17 },
+ /* 2843 */ { MAD_F(0x04ea9832) /* 0.307274051 */, 17 },
+ /* 2844 */ { MAD_F(0x04eb2f50) /* 0.307418168 */, 17 },
+ /* 2845 */ { MAD_F(0x04ebc672) /* 0.307562301 */, 17 },
+ /* 2846 */ { MAD_F(0x04ec5d99) /* 0.307706451 */, 17 },
+ /* 2847 */ { MAD_F(0x04ecf4c5) /* 0.307850618 */, 17 },
+
+ /* 2848 */ { MAD_F(0x04ed8bf5) /* 0.307994802 */, 17 },
+ /* 2849 */ { MAD_F(0x04ee2329) /* 0.308139003 */, 17 },
+ /* 2850 */ { MAD_F(0x04eeba63) /* 0.308283220 */, 17 },
+ /* 2851 */ { MAD_F(0x04ef51a0) /* 0.308427455 */, 17 },
+ /* 2852 */ { MAD_F(0x04efe8e2) /* 0.308571706 */, 17 },
+ /* 2853 */ { MAD_F(0x04f08029) /* 0.308715974 */, 17 },
+ /* 2854 */ { MAD_F(0x04f11774) /* 0.308860260 */, 17 },
+ /* 2855 */ { MAD_F(0x04f1aec4) /* 0.309004561 */, 17 },
+ /* 2856 */ { MAD_F(0x04f24618) /* 0.309148880 */, 17 },
+ /* 2857 */ { MAD_F(0x04f2dd71) /* 0.309293216 */, 17 },
+ /* 2858 */ { MAD_F(0x04f374cf) /* 0.309437568 */, 17 },
+ /* 2859 */ { MAD_F(0x04f40c30) /* 0.309581938 */, 17 },
+ /* 2860 */ { MAD_F(0x04f4a397) /* 0.309726324 */, 17 },
+ /* 2861 */ { MAD_F(0x04f53b02) /* 0.309870727 */, 17 },
+ /* 2862 */ { MAD_F(0x04f5d271) /* 0.310015147 */, 17 },
+ /* 2863 */ { MAD_F(0x04f669e5) /* 0.310159583 */, 17 },
+
+ /* 2864 */ { MAD_F(0x04f7015d) /* 0.310304037 */, 17 },
+ /* 2865 */ { MAD_F(0x04f798da) /* 0.310448507 */, 17 },
+ /* 2866 */ { MAD_F(0x04f8305c) /* 0.310592994 */, 17 },
+ /* 2867 */ { MAD_F(0x04f8c7e2) /* 0.310737498 */, 17 },
+ /* 2868 */ { MAD_F(0x04f95f6c) /* 0.310882018 */, 17 },
+ /* 2869 */ { MAD_F(0x04f9f6fb) /* 0.311026556 */, 17 },
+ /* 2870 */ { MAD_F(0x04fa8e8f) /* 0.311171110 */, 17 },
+ /* 2871 */ { MAD_F(0x04fb2627) /* 0.311315681 */, 17 },
+ /* 2872 */ { MAD_F(0x04fbbdc3) /* 0.311460269 */, 17 },
+ /* 2873 */ { MAD_F(0x04fc5564) /* 0.311604874 */, 17 },
+ /* 2874 */ { MAD_F(0x04fced0a) /* 0.311749495 */, 17 },
+ /* 2875 */ { MAD_F(0x04fd84b4) /* 0.311894133 */, 17 },
+ /* 2876 */ { MAD_F(0x04fe1c62) /* 0.312038788 */, 17 },
+ /* 2877 */ { MAD_F(0x04feb415) /* 0.312183460 */, 17 },
+ /* 2878 */ { MAD_F(0x04ff4bcd) /* 0.312328148 */, 17 },
+ /* 2879 */ { MAD_F(0x04ffe389) /* 0.312472854 */, 17 },
+
+ /* 2880 */ { MAD_F(0x05007b49) /* 0.312617576 */, 17 },
+ /* 2881 */ { MAD_F(0x0501130e) /* 0.312762314 */, 17 },
+ /* 2882 */ { MAD_F(0x0501aad8) /* 0.312907070 */, 17 },
+ /* 2883 */ { MAD_F(0x050242a6) /* 0.313051842 */, 17 },
+ /* 2884 */ { MAD_F(0x0502da78) /* 0.313196631 */, 17 },
+ /* 2885 */ { MAD_F(0x0503724f) /* 0.313341437 */, 17 },
+ /* 2886 */ { MAD_F(0x05040a2b) /* 0.313486259 */, 17 },
+ /* 2887 */ { MAD_F(0x0504a20b) /* 0.313631098 */, 17 },
+ /* 2888 */ { MAD_F(0x050539ef) /* 0.313775954 */, 17 },
+ /* 2889 */ { MAD_F(0x0505d1d8) /* 0.313920827 */, 17 },
+ /* 2890 */ { MAD_F(0x050669c5) /* 0.314065716 */, 17 },
+ /* 2891 */ { MAD_F(0x050701b7) /* 0.314210622 */, 17 },
+ /* 2892 */ { MAD_F(0x050799ae) /* 0.314355545 */, 17 },
+ /* 2893 */ { MAD_F(0x050831a9) /* 0.314500484 */, 17 },
+ /* 2894 */ { MAD_F(0x0508c9a8) /* 0.314645440 */, 17 },
+ /* 2895 */ { MAD_F(0x050961ac) /* 0.314790413 */, 17 },
+
+ /* 2896 */ { MAD_F(0x0509f9b4) /* 0.314935403 */, 17 },
+ /* 2897 */ { MAD_F(0x050a91c1) /* 0.315080409 */, 17 },
+ /* 2898 */ { MAD_F(0x050b29d2) /* 0.315225432 */, 17 },
+ /* 2899 */ { MAD_F(0x050bc1e8) /* 0.315370472 */, 17 },
+ /* 2900 */ { MAD_F(0x050c5a02) /* 0.315515528 */, 17 },
+ /* 2901 */ { MAD_F(0x050cf221) /* 0.315660601 */, 17 },
+ /* 2902 */ { MAD_F(0x050d8a44) /* 0.315805690 */, 17 },
+ /* 2903 */ { MAD_F(0x050e226c) /* 0.315950797 */, 17 },
+ /* 2904 */ { MAD_F(0x050eba98) /* 0.316095920 */, 17 },
+ /* 2905 */ { MAD_F(0x050f52c9) /* 0.316241059 */, 17 },
+ /* 2906 */ { MAD_F(0x050feafe) /* 0.316386216 */, 17 },
+ /* 2907 */ { MAD_F(0x05108337) /* 0.316531388 */, 17 },
+ /* 2908 */ { MAD_F(0x05111b75) /* 0.316676578 */, 17 },
+ /* 2909 */ { MAD_F(0x0511b3b8) /* 0.316821784 */, 17 },
+ /* 2910 */ { MAD_F(0x05124bff) /* 0.316967007 */, 17 },
+ /* 2911 */ { MAD_F(0x0512e44a) /* 0.317112247 */, 17 },
+
+ /* 2912 */ { MAD_F(0x05137c9a) /* 0.317257503 */, 17 },
+ /* 2913 */ { MAD_F(0x051414ee) /* 0.317402775 */, 17 },
+ /* 2914 */ { MAD_F(0x0514ad47) /* 0.317548065 */, 17 },
+ /* 2915 */ { MAD_F(0x051545a5) /* 0.317693371 */, 17 },
+ /* 2916 */ { MAD_F(0x0515de06) /* 0.317838693 */, 17 },
+ /* 2917 */ { MAD_F(0x0516766d) /* 0.317984033 */, 17 },
+ /* 2918 */ { MAD_F(0x05170ed7) /* 0.318129388 */, 17 },
+ /* 2919 */ { MAD_F(0x0517a746) /* 0.318274761 */, 17 },
+ /* 2920 */ { MAD_F(0x05183fba) /* 0.318420150 */, 17 },
+ /* 2921 */ { MAD_F(0x0518d832) /* 0.318565555 */, 17 },
+ /* 2922 */ { MAD_F(0x051970ae) /* 0.318710978 */, 17 },
+ /* 2923 */ { MAD_F(0x051a092f) /* 0.318856416 */, 17 },
+ /* 2924 */ { MAD_F(0x051aa1b5) /* 0.319001872 */, 17 },
+ /* 2925 */ { MAD_F(0x051b3a3f) /* 0.319147344 */, 17 },
+ /* 2926 */ { MAD_F(0x051bd2cd) /* 0.319292832 */, 17 },
+ /* 2927 */ { MAD_F(0x051c6b60) /* 0.319438338 */, 17 },
+
+ /* 2928 */ { MAD_F(0x051d03f7) /* 0.319583859 */, 17 },
+ /* 2929 */ { MAD_F(0x051d9c92) /* 0.319729398 */, 17 },
+ /* 2930 */ { MAD_F(0x051e3532) /* 0.319874952 */, 17 },
+ /* 2931 */ { MAD_F(0x051ecdd7) /* 0.320020524 */, 17 },
+ /* 2932 */ { MAD_F(0x051f6680) /* 0.320166112 */, 17 },
+ /* 2933 */ { MAD_F(0x051fff2d) /* 0.320311716 */, 17 },
+ /* 2934 */ { MAD_F(0x052097df) /* 0.320457337 */, 17 },
+ /* 2935 */ { MAD_F(0x05213095) /* 0.320602975 */, 17 },
+ /* 2936 */ { MAD_F(0x0521c950) /* 0.320748629 */, 17 },
+ /* 2937 */ { MAD_F(0x0522620f) /* 0.320894300 */, 17 },
+ /* 2938 */ { MAD_F(0x0522fad3) /* 0.321039987 */, 17 },
+ /* 2939 */ { MAD_F(0x0523939b) /* 0.321185691 */, 17 },
+ /* 2940 */ { MAD_F(0x05242c68) /* 0.321331411 */, 17 },
+ /* 2941 */ { MAD_F(0x0524c538) /* 0.321477148 */, 17 },
+ /* 2942 */ { MAD_F(0x05255e0e) /* 0.321622901 */, 17 },
+ /* 2943 */ { MAD_F(0x0525f6e8) /* 0.321768671 */, 17 },
+
+ /* 2944 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 17 },
+ /* 2945 */ { MAD_F(0x052728a9) /* 0.322060260 */, 17 },
+ /* 2946 */ { MAD_F(0x0527c190) /* 0.322206079 */, 17 },
+ /* 2947 */ { MAD_F(0x05285a7b) /* 0.322351915 */, 17 },
+ /* 2948 */ { MAD_F(0x0528f36b) /* 0.322497768 */, 17 },
+ /* 2949 */ { MAD_F(0x05298c5f) /* 0.322643636 */, 17 },
+ /* 2950 */ { MAD_F(0x052a2558) /* 0.322789522 */, 17 },
+ /* 2951 */ { MAD_F(0x052abe55) /* 0.322935424 */, 17 },
+ /* 2952 */ { MAD_F(0x052b5757) /* 0.323081342 */, 17 },
+ /* 2953 */ { MAD_F(0x052bf05d) /* 0.323227277 */, 17 },
+ /* 2954 */ { MAD_F(0x052c8968) /* 0.323373228 */, 17 },
+ /* 2955 */ { MAD_F(0x052d2277) /* 0.323519196 */, 17 },
+ /* 2956 */ { MAD_F(0x052dbb8a) /* 0.323665180 */, 17 },
+ /* 2957 */ { MAD_F(0x052e54a2) /* 0.323811180 */, 17 },
+ /* 2958 */ { MAD_F(0x052eedbe) /* 0.323957197 */, 17 },
+ /* 2959 */ { MAD_F(0x052f86de) /* 0.324103231 */, 17 },
+
+ /* 2960 */ { MAD_F(0x05302003) /* 0.324249281 */, 17 },
+ /* 2961 */ { MAD_F(0x0530b92d) /* 0.324395347 */, 17 },
+ /* 2962 */ { MAD_F(0x0531525b) /* 0.324541430 */, 17 },
+ /* 2963 */ { MAD_F(0x0531eb8d) /* 0.324687530 */, 17 },
+ /* 2964 */ { MAD_F(0x053284c4) /* 0.324833646 */, 17 },
+ /* 2965 */ { MAD_F(0x05331dff) /* 0.324979778 */, 17 },
+ /* 2966 */ { MAD_F(0x0533b73e) /* 0.325125926 */, 17 },
+ /* 2967 */ { MAD_F(0x05345082) /* 0.325272091 */, 17 },
+ /* 2968 */ { MAD_F(0x0534e9ca) /* 0.325418273 */, 17 },
+ /* 2969 */ { MAD_F(0x05358317) /* 0.325564471 */, 17 },
+ /* 2970 */ { MAD_F(0x05361c68) /* 0.325710685 */, 17 },
+ /* 2971 */ { MAD_F(0x0536b5be) /* 0.325856916 */, 17 },
+ /* 2972 */ { MAD_F(0x05374f17) /* 0.326003163 */, 17 },
+ /* 2973 */ { MAD_F(0x0537e876) /* 0.326149427 */, 17 },
+ /* 2974 */ { MAD_F(0x053881d9) /* 0.326295707 */, 17 },
+ /* 2975 */ { MAD_F(0x05391b40) /* 0.326442003 */, 17 },
+
+ /* 2976 */ { MAD_F(0x0539b4ab) /* 0.326588316 */, 17 },
+ /* 2977 */ { MAD_F(0x053a4e1b) /* 0.326734645 */, 17 },
+ /* 2978 */ { MAD_F(0x053ae78f) /* 0.326880990 */, 17 },
+ /* 2979 */ { MAD_F(0x053b8108) /* 0.327027352 */, 17 },
+ /* 2980 */ { MAD_F(0x053c1a85) /* 0.327173730 */, 17 },
+ /* 2981 */ { MAD_F(0x053cb407) /* 0.327320125 */, 17 },
+ /* 2982 */ { MAD_F(0x053d4d8d) /* 0.327466536 */, 17 },
+ /* 2983 */ { MAD_F(0x053de717) /* 0.327612963 */, 17 },
+ /* 2984 */ { MAD_F(0x053e80a6) /* 0.327759407 */, 17 },
+ /* 2985 */ { MAD_F(0x053f1a39) /* 0.327905867 */, 17 },
+ /* 2986 */ { MAD_F(0x053fb3d0) /* 0.328052344 */, 17 },
+ /* 2987 */ { MAD_F(0x05404d6c) /* 0.328198837 */, 17 },
+ /* 2988 */ { MAD_F(0x0540e70c) /* 0.328345346 */, 17 },
+ /* 2989 */ { MAD_F(0x054180b1) /* 0.328491871 */, 17 },
+ /* 2990 */ { MAD_F(0x05421a5a) /* 0.328638413 */, 17 },
+ /* 2991 */ { MAD_F(0x0542b407) /* 0.328784971 */, 17 },
+
+ /* 2992 */ { MAD_F(0x05434db9) /* 0.328931546 */, 17 },
+ /* 2993 */ { MAD_F(0x0543e76f) /* 0.329078137 */, 17 },
+ /* 2994 */ { MAD_F(0x0544812a) /* 0.329224744 */, 17 },
+ /* 2995 */ { MAD_F(0x05451ae9) /* 0.329371367 */, 17 },
+ /* 2996 */ { MAD_F(0x0545b4ac) /* 0.329518007 */, 17 },
+ /* 2997 */ { MAD_F(0x05464e74) /* 0.329664663 */, 17 },
+ /* 2998 */ { MAD_F(0x0546e840) /* 0.329811336 */, 17 },
+ /* 2999 */ { MAD_F(0x05478211) /* 0.329958024 */, 17 },
+ /* 3000 */ { MAD_F(0x05481be5) /* 0.330104730 */, 17 },
+ /* 3001 */ { MAD_F(0x0548b5bf) /* 0.330251451 */, 17 },
+ /* 3002 */ { MAD_F(0x05494f9c) /* 0.330398189 */, 17 },
+ /* 3003 */ { MAD_F(0x0549e97e) /* 0.330544943 */, 17 },
+ /* 3004 */ { MAD_F(0x054a8364) /* 0.330691713 */, 17 },
+ /* 3005 */ { MAD_F(0x054b1d4f) /* 0.330838499 */, 17 },
+ /* 3006 */ { MAD_F(0x054bb73e) /* 0.330985302 */, 17 },
+ /* 3007 */ { MAD_F(0x054c5132) /* 0.331132121 */, 17 },
+
+ /* 3008 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 17 },
+ /* 3009 */ { MAD_F(0x054d8526) /* 0.331425808 */, 17 },
+ /* 3010 */ { MAD_F(0x054e1f26) /* 0.331572676 */, 17 },
+ /* 3011 */ { MAD_F(0x054eb92b) /* 0.331719560 */, 17 },
+ /* 3012 */ { MAD_F(0x054f5334) /* 0.331866461 */, 17 },
+ /* 3013 */ { MAD_F(0x054fed42) /* 0.332013377 */, 17 },
+ /* 3014 */ { MAD_F(0x05508754) /* 0.332160310 */, 17 },
+ /* 3015 */ { MAD_F(0x0551216b) /* 0.332307260 */, 17 },
+ /* 3016 */ { MAD_F(0x0551bb85) /* 0.332454225 */, 17 },
+ /* 3017 */ { MAD_F(0x055255a4) /* 0.332601207 */, 17 },
+ /* 3018 */ { MAD_F(0x0552efc8) /* 0.332748205 */, 17 },
+ /* 3019 */ { MAD_F(0x055389f0) /* 0.332895219 */, 17 },
+ /* 3020 */ { MAD_F(0x0554241c) /* 0.333042249 */, 17 },
+ /* 3021 */ { MAD_F(0x0554be4c) /* 0.333189296 */, 17 },
+ /* 3022 */ { MAD_F(0x05555881) /* 0.333336359 */, 17 },
+ /* 3023 */ { MAD_F(0x0555f2ba) /* 0.333483438 */, 17 },
+
+ /* 3024 */ { MAD_F(0x05568cf8) /* 0.333630533 */, 17 },
+ /* 3025 */ { MAD_F(0x0557273a) /* 0.333777645 */, 17 },
+ /* 3026 */ { MAD_F(0x0557c180) /* 0.333924772 */, 17 },
+ /* 3027 */ { MAD_F(0x05585bcb) /* 0.334071916 */, 17 },
+ /* 3028 */ { MAD_F(0x0558f61a) /* 0.334219076 */, 17 },
+ /* 3029 */ { MAD_F(0x0559906d) /* 0.334366253 */, 17 },
+ /* 3030 */ { MAD_F(0x055a2ac5) /* 0.334513445 */, 17 },
+ /* 3031 */ { MAD_F(0x055ac521) /* 0.334660654 */, 17 },
+ /* 3032 */ { MAD_F(0x055b5f81) /* 0.334807879 */, 17 },
+ /* 3033 */ { MAD_F(0x055bf9e6) /* 0.334955120 */, 17 },
+ /* 3034 */ { MAD_F(0x055c944f) /* 0.335102377 */, 17 },
+ /* 3035 */ { MAD_F(0x055d2ebd) /* 0.335249651 */, 17 },
+ /* 3036 */ { MAD_F(0x055dc92e) /* 0.335396941 */, 17 },
+ /* 3037 */ { MAD_F(0x055e63a5) /* 0.335544246 */, 17 },
+ /* 3038 */ { MAD_F(0x055efe1f) /* 0.335691568 */, 17 },
+ /* 3039 */ { MAD_F(0x055f989e) /* 0.335838906 */, 17 },
+
+ /* 3040 */ { MAD_F(0x05603321) /* 0.335986261 */, 17 },
+ /* 3041 */ { MAD_F(0x0560cda8) /* 0.336133631 */, 17 },
+ /* 3042 */ { MAD_F(0x05616834) /* 0.336281018 */, 17 },
+ /* 3043 */ { MAD_F(0x056202c4) /* 0.336428421 */, 17 },
+ /* 3044 */ { MAD_F(0x05629d59) /* 0.336575840 */, 17 },
+ /* 3045 */ { MAD_F(0x056337f2) /* 0.336723275 */, 17 },
+ /* 3046 */ { MAD_F(0x0563d28f) /* 0.336870726 */, 17 },
+ /* 3047 */ { MAD_F(0x05646d30) /* 0.337018193 */, 17 },
+ /* 3048 */ { MAD_F(0x056507d6) /* 0.337165677 */, 17 },
+ /* 3049 */ { MAD_F(0x0565a280) /* 0.337313176 */, 17 },
+ /* 3050 */ { MAD_F(0x05663d2f) /* 0.337460692 */, 17 },
+ /* 3051 */ { MAD_F(0x0566d7e1) /* 0.337608224 */, 17 },
+ /* 3052 */ { MAD_F(0x05677298) /* 0.337755772 */, 17 },
+ /* 3053 */ { MAD_F(0x05680d54) /* 0.337903336 */, 17 },
+ /* 3054 */ { MAD_F(0x0568a814) /* 0.338050916 */, 17 },
+ /* 3055 */ { MAD_F(0x056942d8) /* 0.338198513 */, 17 },
+
+ /* 3056 */ { MAD_F(0x0569dda0) /* 0.338346125 */, 17 },
+ /* 3057 */ { MAD_F(0x056a786d) /* 0.338493753 */, 17 },
+ /* 3058 */ { MAD_F(0x056b133e) /* 0.338641398 */, 17 },
+ /* 3059 */ { MAD_F(0x056bae13) /* 0.338789059 */, 17 },
+ /* 3060 */ { MAD_F(0x056c48ed) /* 0.338936736 */, 17 },
+ /* 3061 */ { MAD_F(0x056ce3cb) /* 0.339084429 */, 17 },
+ /* 3062 */ { MAD_F(0x056d7ead) /* 0.339232138 */, 17 },
+ /* 3063 */ { MAD_F(0x056e1994) /* 0.339379863 */, 17 },
+ /* 3064 */ { MAD_F(0x056eb47f) /* 0.339527604 */, 17 },
+ /* 3065 */ { MAD_F(0x056f4f6e) /* 0.339675361 */, 17 },
+ /* 3066 */ { MAD_F(0x056fea62) /* 0.339823134 */, 17 },
+ /* 3067 */ { MAD_F(0x0570855a) /* 0.339970924 */, 17 },
+ /* 3068 */ { MAD_F(0x05712056) /* 0.340118729 */, 17 },
+ /* 3069 */ { MAD_F(0x0571bb56) /* 0.340266550 */, 17 },
+ /* 3070 */ { MAD_F(0x0572565b) /* 0.340414388 */, 17 },
+ /* 3071 */ { MAD_F(0x0572f164) /* 0.340562242 */, 17 },
+
+ /* 3072 */ { MAD_F(0x05738c72) /* 0.340710111 */, 17 },
+ /* 3073 */ { MAD_F(0x05742784) /* 0.340857997 */, 17 },
+ /* 3074 */ { MAD_F(0x0574c29a) /* 0.341005899 */, 17 },
+ /* 3075 */ { MAD_F(0x05755db4) /* 0.341153816 */, 17 },
+ /* 3076 */ { MAD_F(0x0575f8d3) /* 0.341301750 */, 17 },
+ /* 3077 */ { MAD_F(0x057693f6) /* 0.341449700 */, 17 },
+ /* 3078 */ { MAD_F(0x05772f1d) /* 0.341597666 */, 17 },
+ /* 3079 */ { MAD_F(0x0577ca49) /* 0.341745648 */, 17 },
+ /* 3080 */ { MAD_F(0x05786578) /* 0.341893646 */, 17 },
+ /* 3081 */ { MAD_F(0x057900ad) /* 0.342041659 */, 17 },
+ /* 3082 */ { MAD_F(0x05799be5) /* 0.342189689 */, 17 },
+ /* 3083 */ { MAD_F(0x057a3722) /* 0.342337735 */, 17 },
+ /* 3084 */ { MAD_F(0x057ad263) /* 0.342485797 */, 17 },
+ /* 3085 */ { MAD_F(0x057b6da8) /* 0.342633875 */, 17 },
+ /* 3086 */ { MAD_F(0x057c08f2) /* 0.342781969 */, 17 },
+ /* 3087 */ { MAD_F(0x057ca440) /* 0.342930079 */, 17 },
+
+ /* 3088 */ { MAD_F(0x057d3f92) /* 0.343078205 */, 17 },
+ /* 3089 */ { MAD_F(0x057ddae9) /* 0.343226347 */, 17 },
+ /* 3090 */ { MAD_F(0x057e7644) /* 0.343374505 */, 17 },
+ /* 3091 */ { MAD_F(0x057f11a3) /* 0.343522679 */, 17 },
+ /* 3092 */ { MAD_F(0x057fad06) /* 0.343670869 */, 17 },
+ /* 3093 */ { MAD_F(0x0580486e) /* 0.343819075 */, 17 },
+ /* 3094 */ { MAD_F(0x0580e3da) /* 0.343967296 */, 17 },
+ /* 3095 */ { MAD_F(0x05817f4a) /* 0.344115534 */, 17 },
+ /* 3096 */ { MAD_F(0x05821abf) /* 0.344263788 */, 17 },
+ /* 3097 */ { MAD_F(0x0582b638) /* 0.344412058 */, 17 },
+ /* 3098 */ { MAD_F(0x058351b5) /* 0.344560343 */, 17 },
+ /* 3099 */ { MAD_F(0x0583ed36) /* 0.344708645 */, 17 },
+ /* 3100 */ { MAD_F(0x058488bc) /* 0.344856963 */, 17 },
+ /* 3101 */ { MAD_F(0x05852446) /* 0.345005296 */, 17 },
+ /* 3102 */ { MAD_F(0x0585bfd4) /* 0.345153646 */, 17 },
+ /* 3103 */ { MAD_F(0x05865b67) /* 0.345302011 */, 17 },
+
+ /* 3104 */ { MAD_F(0x0586f6fd) /* 0.345450393 */, 17 },
+ /* 3105 */ { MAD_F(0x05879298) /* 0.345598790 */, 17 },
+ /* 3106 */ { MAD_F(0x05882e38) /* 0.345747203 */, 17 },
+ /* 3107 */ { MAD_F(0x0588c9dc) /* 0.345895632 */, 17 },
+ /* 3108 */ { MAD_F(0x05896583) /* 0.346044077 */, 17 },
+ /* 3109 */ { MAD_F(0x058a0130) /* 0.346192538 */, 17 },
+ /* 3110 */ { MAD_F(0x058a9ce0) /* 0.346341015 */, 17 },
+ /* 3111 */ { MAD_F(0x058b3895) /* 0.346489508 */, 17 },
+ /* 3112 */ { MAD_F(0x058bd44e) /* 0.346638017 */, 17 },
+ /* 3113 */ { MAD_F(0x058c700b) /* 0.346786542 */, 17 },
+ /* 3114 */ { MAD_F(0x058d0bcd) /* 0.346935082 */, 17 },
+ /* 3115 */ { MAD_F(0x058da793) /* 0.347083639 */, 17 },
+ /* 3116 */ { MAD_F(0x058e435d) /* 0.347232211 */, 17 },
+ /* 3117 */ { MAD_F(0x058edf2b) /* 0.347380799 */, 17 },
+ /* 3118 */ { MAD_F(0x058f7afe) /* 0.347529403 */, 17 },
+ /* 3119 */ { MAD_F(0x059016d5) /* 0.347678023 */, 17 },
+
+ /* 3120 */ { MAD_F(0x0590b2b0) /* 0.347826659 */, 17 },
+ /* 3121 */ { MAD_F(0x05914e8f) /* 0.347975311 */, 17 },
+ /* 3122 */ { MAD_F(0x0591ea73) /* 0.348123979 */, 17 },
+ /* 3123 */ { MAD_F(0x0592865b) /* 0.348272662 */, 17 },
+ /* 3124 */ { MAD_F(0x05932247) /* 0.348421362 */, 17 },
+ /* 3125 */ { MAD_F(0x0593be37) /* 0.348570077 */, 17 },
+ /* 3126 */ { MAD_F(0x05945a2c) /* 0.348718808 */, 17 },
+ /* 3127 */ { MAD_F(0x0594f625) /* 0.348867555 */, 17 },
+ /* 3128 */ { MAD_F(0x05959222) /* 0.349016318 */, 17 },
+ /* 3129 */ { MAD_F(0x05962e24) /* 0.349165097 */, 17 },
+ /* 3130 */ { MAD_F(0x0596ca2a) /* 0.349313892 */, 17 },
+ /* 3131 */ { MAD_F(0x05976634) /* 0.349462702 */, 17 },
+ /* 3132 */ { MAD_F(0x05980242) /* 0.349611528 */, 17 },
+ /* 3133 */ { MAD_F(0x05989e54) /* 0.349760370 */, 17 },
+ /* 3134 */ { MAD_F(0x05993a6b) /* 0.349909228 */, 17 },
+ /* 3135 */ { MAD_F(0x0599d686) /* 0.350058102 */, 17 },
+
+ /* 3136 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 17 },
+ /* 3137 */ { MAD_F(0x059b0ec9) /* 0.350355897 */, 17 },
+ /* 3138 */ { MAD_F(0x059baaf1) /* 0.350504818 */, 17 },
+ /* 3139 */ { MAD_F(0x059c471d) /* 0.350653756 */, 17 },
+ /* 3140 */ { MAD_F(0x059ce34d) /* 0.350802708 */, 17 },
+ /* 3141 */ { MAD_F(0x059d7f81) /* 0.350951677 */, 17 },
+ /* 3142 */ { MAD_F(0x059e1bba) /* 0.351100662 */, 17 },
+ /* 3143 */ { MAD_F(0x059eb7f7) /* 0.351249662 */, 17 },
+ /* 3144 */ { MAD_F(0x059f5438) /* 0.351398678 */, 17 },
+ /* 3145 */ { MAD_F(0x059ff07e) /* 0.351547710 */, 17 },
+ /* 3146 */ { MAD_F(0x05a08cc7) /* 0.351696758 */, 17 },
+ /* 3147 */ { MAD_F(0x05a12915) /* 0.351845821 */, 17 },
+ /* 3148 */ { MAD_F(0x05a1c567) /* 0.351994901 */, 17 },
+ /* 3149 */ { MAD_F(0x05a261be) /* 0.352143996 */, 17 },
+ /* 3150 */ { MAD_F(0x05a2fe18) /* 0.352293107 */, 17 },
+ /* 3151 */ { MAD_F(0x05a39a77) /* 0.352442233 */, 17 },
+
+ /* 3152 */ { MAD_F(0x05a436da) /* 0.352591376 */, 17 },
+ /* 3153 */ { MAD_F(0x05a4d342) /* 0.352740534 */, 17 },
+ /* 3154 */ { MAD_F(0x05a56fad) /* 0.352889708 */, 17 },
+ /* 3155 */ { MAD_F(0x05a60c1d) /* 0.353038898 */, 17 },
+ /* 3156 */ { MAD_F(0x05a6a891) /* 0.353188103 */, 17 },
+ /* 3157 */ { MAD_F(0x05a7450a) /* 0.353337325 */, 17 },
+ /* 3158 */ { MAD_F(0x05a7e186) /* 0.353486562 */, 17 },
+ /* 3159 */ { MAD_F(0x05a87e07) /* 0.353635814 */, 17 },
+ /* 3160 */ { MAD_F(0x05a91a8c) /* 0.353785083 */, 17 },
+ /* 3161 */ { MAD_F(0x05a9b715) /* 0.353934367 */, 17 },
+ /* 3162 */ { MAD_F(0x05aa53a2) /* 0.354083667 */, 17 },
+ /* 3163 */ { MAD_F(0x05aaf034) /* 0.354232983 */, 17 },
+ /* 3164 */ { MAD_F(0x05ab8cca) /* 0.354382314 */, 17 },
+ /* 3165 */ { MAD_F(0x05ac2964) /* 0.354531662 */, 17 },
+ /* 3166 */ { MAD_F(0x05acc602) /* 0.354681025 */, 17 },
+ /* 3167 */ { MAD_F(0x05ad62a5) /* 0.354830403 */, 17 },
+
+ /* 3168 */ { MAD_F(0x05adff4c) /* 0.354979798 */, 17 },
+ /* 3169 */ { MAD_F(0x05ae9bf7) /* 0.355129208 */, 17 },
+ /* 3170 */ { MAD_F(0x05af38a6) /* 0.355278634 */, 17 },
+ /* 3171 */ { MAD_F(0x05afd559) /* 0.355428075 */, 17 },
+ /* 3172 */ { MAD_F(0x05b07211) /* 0.355577533 */, 17 },
+ /* 3173 */ { MAD_F(0x05b10ecd) /* 0.355727006 */, 17 },
+ /* 3174 */ { MAD_F(0x05b1ab8d) /* 0.355876494 */, 17 },
+ /* 3175 */ { MAD_F(0x05b24851) /* 0.356025999 */, 17 },
+ /* 3176 */ { MAD_F(0x05b2e51a) /* 0.356175519 */, 17 },
+ /* 3177 */ { MAD_F(0x05b381e6) /* 0.356325054 */, 17 },
+ /* 3178 */ { MAD_F(0x05b41eb7) /* 0.356474606 */, 17 },
+ /* 3179 */ { MAD_F(0x05b4bb8c) /* 0.356624173 */, 17 },
+ /* 3180 */ { MAD_F(0x05b55866) /* 0.356773756 */, 17 },
+ /* 3181 */ { MAD_F(0x05b5f543) /* 0.356923354 */, 17 },
+ /* 3182 */ { MAD_F(0x05b69225) /* 0.357072969 */, 17 },
+ /* 3183 */ { MAD_F(0x05b72f0b) /* 0.357222598 */, 17 },
+
+ /* 3184 */ { MAD_F(0x05b7cbf5) /* 0.357372244 */, 17 },
+ /* 3185 */ { MAD_F(0x05b868e3) /* 0.357521905 */, 17 },
+ /* 3186 */ { MAD_F(0x05b905d6) /* 0.357671582 */, 17 },
+ /* 3187 */ { MAD_F(0x05b9a2cd) /* 0.357821275 */, 17 },
+ /* 3188 */ { MAD_F(0x05ba3fc8) /* 0.357970983 */, 17 },
+ /* 3189 */ { MAD_F(0x05badcc7) /* 0.358120707 */, 17 },
+ /* 3190 */ { MAD_F(0x05bb79ca) /* 0.358270446 */, 17 },
+ /* 3191 */ { MAD_F(0x05bc16d2) /* 0.358420201 */, 17 },
+ /* 3192 */ { MAD_F(0x05bcb3de) /* 0.358569972 */, 17 },
+ /* 3193 */ { MAD_F(0x05bd50ee) /* 0.358719758 */, 17 },
+ /* 3194 */ { MAD_F(0x05bdee02) /* 0.358869560 */, 17 },
+ /* 3195 */ { MAD_F(0x05be8b1a) /* 0.359019378 */, 17 },
+ /* 3196 */ { MAD_F(0x05bf2837) /* 0.359169211 */, 17 },
+ /* 3197 */ { MAD_F(0x05bfc558) /* 0.359319060 */, 17 },
+ /* 3198 */ { MAD_F(0x05c0627d) /* 0.359468925 */, 17 },
+ /* 3199 */ { MAD_F(0x05c0ffa6) /* 0.359618805 */, 17 },
+
+ /* 3200 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 17 },
+ /* 3201 */ { MAD_F(0x05c23a05) /* 0.359918612 */, 17 },
+ /* 3202 */ { MAD_F(0x05c2d73a) /* 0.360068540 */, 17 },
+ /* 3203 */ { MAD_F(0x05c37474) /* 0.360218482 */, 17 },
+ /* 3204 */ { MAD_F(0x05c411b2) /* 0.360368440 */, 17 },
+ /* 3205 */ { MAD_F(0x05c4aef5) /* 0.360518414 */, 17 },
+ /* 3206 */ { MAD_F(0x05c54c3b) /* 0.360668404 */, 17 },
+ /* 3207 */ { MAD_F(0x05c5e986) /* 0.360818409 */, 17 },
+ /* 3208 */ { MAD_F(0x05c686d5) /* 0.360968429 */, 17 },
+ /* 3209 */ { MAD_F(0x05c72428) /* 0.361118466 */, 17 },
+ /* 3210 */ { MAD_F(0x05c7c17f) /* 0.361268517 */, 17 },
+ /* 3211 */ { MAD_F(0x05c85eda) /* 0.361418585 */, 17 },
+ /* 3212 */ { MAD_F(0x05c8fc3a) /* 0.361568668 */, 17 },
+ /* 3213 */ { MAD_F(0x05c9999e) /* 0.361718766 */, 17 },
+ /* 3214 */ { MAD_F(0x05ca3706) /* 0.361868881 */, 17 },
+ /* 3215 */ { MAD_F(0x05cad472) /* 0.362019010 */, 17 },
+
+ /* 3216 */ { MAD_F(0x05cb71e2) /* 0.362169156 */, 17 },
+ /* 3217 */ { MAD_F(0x05cc0f57) /* 0.362319316 */, 17 },
+ /* 3218 */ { MAD_F(0x05ccaccf) /* 0.362469493 */, 17 },
+ /* 3219 */ { MAD_F(0x05cd4a4c) /* 0.362619685 */, 17 },
+ /* 3220 */ { MAD_F(0x05cde7cd) /* 0.362769892 */, 17 },
+ /* 3221 */ { MAD_F(0x05ce8552) /* 0.362920115 */, 17 },
+ /* 3222 */ { MAD_F(0x05cf22dc) /* 0.363070354 */, 17 },
+ /* 3223 */ { MAD_F(0x05cfc069) /* 0.363220608 */, 17 },
+ /* 3224 */ { MAD_F(0x05d05dfb) /* 0.363370878 */, 17 },
+ /* 3225 */ { MAD_F(0x05d0fb91) /* 0.363521163 */, 17 },
+ /* 3226 */ { MAD_F(0x05d1992b) /* 0.363671464 */, 17 },
+ /* 3227 */ { MAD_F(0x05d236c9) /* 0.363821780 */, 17 },
+ /* 3228 */ { MAD_F(0x05d2d46c) /* 0.363972112 */, 17 },
+ /* 3229 */ { MAD_F(0x05d37212) /* 0.364122459 */, 17 },
+ /* 3230 */ { MAD_F(0x05d40fbd) /* 0.364272822 */, 17 },
+ /* 3231 */ { MAD_F(0x05d4ad6c) /* 0.364423200 */, 17 },
+
+ /* 3232 */ { MAD_F(0x05d54b1f) /* 0.364573594 */, 17 },
+ /* 3233 */ { MAD_F(0x05d5e8d6) /* 0.364724004 */, 17 },
+ /* 3234 */ { MAD_F(0x05d68691) /* 0.364874429 */, 17 },
+ /* 3235 */ { MAD_F(0x05d72451) /* 0.365024869 */, 17 },
+ /* 3236 */ { MAD_F(0x05d7c215) /* 0.365175325 */, 17 },
+ /* 3237 */ { MAD_F(0x05d85fdc) /* 0.365325796 */, 17 },
+ /* 3238 */ { MAD_F(0x05d8fda8) /* 0.365476283 */, 17 },
+ /* 3239 */ { MAD_F(0x05d99b79) /* 0.365626786 */, 17 },
+ /* 3240 */ { MAD_F(0x05da394d) /* 0.365777304 */, 17 },
+ /* 3241 */ { MAD_F(0x05dad726) /* 0.365927837 */, 17 },
+ /* 3242 */ { MAD_F(0x05db7502) /* 0.366078386 */, 17 },
+ /* 3243 */ { MAD_F(0x05dc12e3) /* 0.366228950 */, 17 },
+ /* 3244 */ { MAD_F(0x05dcb0c8) /* 0.366379530 */, 17 },
+ /* 3245 */ { MAD_F(0x05dd4eb1) /* 0.366530125 */, 17 },
+ /* 3246 */ { MAD_F(0x05ddec9e) /* 0.366680736 */, 17 },
+ /* 3247 */ { MAD_F(0x05de8a90) /* 0.366831362 */, 17 },
+
+ /* 3248 */ { MAD_F(0x05df2885) /* 0.366982004 */, 17 },
+ /* 3249 */ { MAD_F(0x05dfc67f) /* 0.367132661 */, 17 },
+ /* 3250 */ { MAD_F(0x05e0647d) /* 0.367283334 */, 17 },
+ /* 3251 */ { MAD_F(0x05e1027f) /* 0.367434022 */, 17 },
+ /* 3252 */ { MAD_F(0x05e1a085) /* 0.367584725 */, 17 },
+ /* 3253 */ { MAD_F(0x05e23e8f) /* 0.367735444 */, 17 },
+ /* 3254 */ { MAD_F(0x05e2dc9e) /* 0.367886179 */, 17 },
+ /* 3255 */ { MAD_F(0x05e37ab0) /* 0.368036929 */, 17 },
+ /* 3256 */ { MAD_F(0x05e418c7) /* 0.368187694 */, 17 },
+ /* 3257 */ { MAD_F(0x05e4b6e2) /* 0.368338475 */, 17 },
+ /* 3258 */ { MAD_F(0x05e55501) /* 0.368489271 */, 17 },
+ /* 3259 */ { MAD_F(0x05e5f324) /* 0.368640082 */, 17 },
+ /* 3260 */ { MAD_F(0x05e6914c) /* 0.368790909 */, 17 },
+ /* 3261 */ { MAD_F(0x05e72f77) /* 0.368941752 */, 17 },
+ /* 3262 */ { MAD_F(0x05e7cda7) /* 0.369092610 */, 17 },
+ /* 3263 */ { MAD_F(0x05e86bda) /* 0.369243483 */, 17 },
+
+ /* 3264 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 17 },
+ /* 3265 */ { MAD_F(0x05e9a84e) /* 0.369545276 */, 17 },
+ /* 3266 */ { MAD_F(0x05ea468e) /* 0.369696195 */, 17 },
+ /* 3267 */ { MAD_F(0x05eae4d3) /* 0.369847130 */, 17 },
+ /* 3268 */ { MAD_F(0x05eb831b) /* 0.369998080 */, 17 },
+ /* 3269 */ { MAD_F(0x05ec2168) /* 0.370149046 */, 17 },
+ /* 3270 */ { MAD_F(0x05ecbfb8) /* 0.370300027 */, 17 },
+ /* 3271 */ { MAD_F(0x05ed5e0d) /* 0.370451024 */, 17 },
+ /* 3272 */ { MAD_F(0x05edfc66) /* 0.370602036 */, 17 },
+ /* 3273 */ { MAD_F(0x05ee9ac3) /* 0.370753063 */, 17 },
+ /* 3274 */ { MAD_F(0x05ef3924) /* 0.370904105 */, 17 },
+ /* 3275 */ { MAD_F(0x05efd78a) /* 0.371055163 */, 17 },
+ /* 3276 */ { MAD_F(0x05f075f3) /* 0.371206237 */, 17 },
+ /* 3277 */ { MAD_F(0x05f11461) /* 0.371357326 */, 17 },
+ /* 3278 */ { MAD_F(0x05f1b2d3) /* 0.371508430 */, 17 },
+ /* 3279 */ { MAD_F(0x05f25148) /* 0.371659549 */, 17 },
+
+ /* 3280 */ { MAD_F(0x05f2efc2) /* 0.371810684 */, 17 },
+ /* 3281 */ { MAD_F(0x05f38e40) /* 0.371961834 */, 17 },
+ /* 3282 */ { MAD_F(0x05f42cc3) /* 0.372113000 */, 17 },
+ /* 3283 */ { MAD_F(0x05f4cb49) /* 0.372264181 */, 17 },
+ /* 3284 */ { MAD_F(0x05f569d3) /* 0.372415377 */, 17 },
+ /* 3285 */ { MAD_F(0x05f60862) /* 0.372566589 */, 17 },
+ /* 3286 */ { MAD_F(0x05f6a6f5) /* 0.372717816 */, 17 },
+ /* 3287 */ { MAD_F(0x05f7458b) /* 0.372869058 */, 17 },
+ /* 3288 */ { MAD_F(0x05f7e426) /* 0.373020316 */, 17 },
+ /* 3289 */ { MAD_F(0x05f882c5) /* 0.373171589 */, 17 },
+ /* 3290 */ { MAD_F(0x05f92169) /* 0.373322877 */, 17 },
+ /* 3291 */ { MAD_F(0x05f9c010) /* 0.373474181 */, 17 },
+ /* 3292 */ { MAD_F(0x05fa5ebb) /* 0.373625500 */, 17 },
+ /* 3293 */ { MAD_F(0x05fafd6b) /* 0.373776834 */, 17 },
+ /* 3294 */ { MAD_F(0x05fb9c1e) /* 0.373928184 */, 17 },
+ /* 3295 */ { MAD_F(0x05fc3ad6) /* 0.374079549 */, 17 },
+
+ /* 3296 */ { MAD_F(0x05fcd992) /* 0.374230929 */, 17 },
+ /* 3297 */ { MAD_F(0x05fd7852) /* 0.374382325 */, 17 },
+ /* 3298 */ { MAD_F(0x05fe1716) /* 0.374533735 */, 17 },
+ /* 3299 */ { MAD_F(0x05feb5de) /* 0.374685162 */, 17 },
+ /* 3300 */ { MAD_F(0x05ff54aa) /* 0.374836603 */, 17 },
+ /* 3301 */ { MAD_F(0x05fff37b) /* 0.374988060 */, 17 },
+ /* 3302 */ { MAD_F(0x0600924f) /* 0.375139532 */, 17 },
+ /* 3303 */ { MAD_F(0x06013128) /* 0.375291019 */, 17 },
+ /* 3304 */ { MAD_F(0x0601d004) /* 0.375442522 */, 17 },
+ /* 3305 */ { MAD_F(0x06026ee5) /* 0.375594040 */, 17 },
+ /* 3306 */ { MAD_F(0x06030dca) /* 0.375745573 */, 17 },
+ /* 3307 */ { MAD_F(0x0603acb3) /* 0.375897122 */, 17 },
+ /* 3308 */ { MAD_F(0x06044ba0) /* 0.376048685 */, 17 },
+ /* 3309 */ { MAD_F(0x0604ea91) /* 0.376200265 */, 17 },
+ /* 3310 */ { MAD_F(0x06058987) /* 0.376351859 */, 17 },
+ /* 3311 */ { MAD_F(0x06062880) /* 0.376503468 */, 17 },
+
+ /* 3312 */ { MAD_F(0x0606c77d) /* 0.376655093 */, 17 },
+ /* 3313 */ { MAD_F(0x0607667f) /* 0.376806733 */, 17 },
+ /* 3314 */ { MAD_F(0x06080585) /* 0.376958389 */, 17 },
+ /* 3315 */ { MAD_F(0x0608a48f) /* 0.377110059 */, 17 },
+ /* 3316 */ { MAD_F(0x0609439c) /* 0.377261745 */, 17 },
+ /* 3317 */ { MAD_F(0x0609e2ae) /* 0.377413446 */, 17 },
+ /* 3318 */ { MAD_F(0x060a81c4) /* 0.377565163 */, 17 },
+ /* 3319 */ { MAD_F(0x060b20df) /* 0.377716894 */, 17 },
+ /* 3320 */ { MAD_F(0x060bbffd) /* 0.377868641 */, 17 },
+ /* 3321 */ { MAD_F(0x060c5f1f) /* 0.378020403 */, 17 },
+ /* 3322 */ { MAD_F(0x060cfe46) /* 0.378172181 */, 17 },
+ /* 3323 */ { MAD_F(0x060d9d70) /* 0.378323973 */, 17 },
+ /* 3324 */ { MAD_F(0x060e3c9f) /* 0.378475781 */, 17 },
+ /* 3325 */ { MAD_F(0x060edbd1) /* 0.378627604 */, 17 },
+ /* 3326 */ { MAD_F(0x060f7b08) /* 0.378779442 */, 17 },
+ /* 3327 */ { MAD_F(0x06101a43) /* 0.378931296 */, 17 },
+
+ /* 3328 */ { MAD_F(0x0610b982) /* 0.379083164 */, 17 },
+ /* 3329 */ { MAD_F(0x061158c5) /* 0.379235048 */, 17 },
+ /* 3330 */ { MAD_F(0x0611f80c) /* 0.379386947 */, 17 },
+ /* 3331 */ { MAD_F(0x06129757) /* 0.379538862 */, 17 },
+ /* 3332 */ { MAD_F(0x061336a6) /* 0.379690791 */, 17 },
+ /* 3333 */ { MAD_F(0x0613d5fa) /* 0.379842736 */, 17 },
+ /* 3334 */ { MAD_F(0x06147551) /* 0.379994696 */, 17 },
+ /* 3335 */ { MAD_F(0x061514ad) /* 0.380146671 */, 17 },
+ /* 3336 */ { MAD_F(0x0615b40c) /* 0.380298661 */, 17 },
+ /* 3337 */ { MAD_F(0x06165370) /* 0.380450666 */, 17 },
+ /* 3338 */ { MAD_F(0x0616f2d8) /* 0.380602687 */, 17 },
+ /* 3339 */ { MAD_F(0x06179243) /* 0.380754723 */, 17 },
+ /* 3340 */ { MAD_F(0x061831b3) /* 0.380906774 */, 17 },
+ /* 3341 */ { MAD_F(0x0618d127) /* 0.381058840 */, 17 },
+ /* 3342 */ { MAD_F(0x0619709f) /* 0.381210921 */, 17 },
+ /* 3343 */ { MAD_F(0x061a101b) /* 0.381363018 */, 17 },
+
+ /* 3344 */ { MAD_F(0x061aaf9c) /* 0.381515130 */, 17 },
+ /* 3345 */ { MAD_F(0x061b4f20) /* 0.381667257 */, 17 },
+ /* 3346 */ { MAD_F(0x061beea8) /* 0.381819399 */, 17 },
+ /* 3347 */ { MAD_F(0x061c8e34) /* 0.381971556 */, 17 },
+ /* 3348 */ { MAD_F(0x061d2dc5) /* 0.382123728 */, 17 },
+ /* 3349 */ { MAD_F(0x061dcd59) /* 0.382275916 */, 17 },
+ /* 3350 */ { MAD_F(0x061e6cf2) /* 0.382428118 */, 17 },
+ /* 3351 */ { MAD_F(0x061f0c8f) /* 0.382580336 */, 17 },
+ /* 3352 */ { MAD_F(0x061fac2f) /* 0.382732569 */, 17 },
+ /* 3353 */ { MAD_F(0x06204bd4) /* 0.382884817 */, 17 },
+ /* 3354 */ { MAD_F(0x0620eb7d) /* 0.383037080 */, 17 },
+ /* 3355 */ { MAD_F(0x06218b2a) /* 0.383189358 */, 17 },
+ /* 3356 */ { MAD_F(0x06222adb) /* 0.383341652 */, 17 },
+ /* 3357 */ { MAD_F(0x0622ca90) /* 0.383493960 */, 17 },
+ /* 3358 */ { MAD_F(0x06236a49) /* 0.383646284 */, 17 },
+ /* 3359 */ { MAD_F(0x06240a06) /* 0.383798623 */, 17 },
+
+ /* 3360 */ { MAD_F(0x0624a9c7) /* 0.383950977 */, 17 },
+ /* 3361 */ { MAD_F(0x0625498d) /* 0.384103346 */, 17 },
+ /* 3362 */ { MAD_F(0x0625e956) /* 0.384255730 */, 17 },
+ /* 3363 */ { MAD_F(0x06268923) /* 0.384408129 */, 17 },
+ /* 3364 */ { MAD_F(0x062728f5) /* 0.384560544 */, 17 },
+ /* 3365 */ { MAD_F(0x0627c8ca) /* 0.384712973 */, 17 },
+ /* 3366 */ { MAD_F(0x062868a4) /* 0.384865418 */, 17 },
+ /* 3367 */ { MAD_F(0x06290881) /* 0.385017878 */, 17 },
+ /* 3368 */ { MAD_F(0x0629a863) /* 0.385170352 */, 17 },
+ /* 3369 */ { MAD_F(0x062a4849) /* 0.385322842 */, 17 },
+ /* 3370 */ { MAD_F(0x062ae832) /* 0.385475347 */, 17 },
+ /* 3371 */ { MAD_F(0x062b8820) /* 0.385627867 */, 17 },
+ /* 3372 */ { MAD_F(0x062c2812) /* 0.385780402 */, 17 },
+ /* 3373 */ { MAD_F(0x062cc808) /* 0.385932953 */, 17 },
+ /* 3374 */ { MAD_F(0x062d6802) /* 0.386085518 */, 17 },
+ /* 3375 */ { MAD_F(0x062e0800) /* 0.386238098 */, 17 },
+
+ /* 3376 */ { MAD_F(0x062ea802) /* 0.386390694 */, 17 },
+ /* 3377 */ { MAD_F(0x062f4808) /* 0.386543304 */, 17 },
+ /* 3378 */ { MAD_F(0x062fe812) /* 0.386695930 */, 17 },
+ /* 3379 */ { MAD_F(0x06308820) /* 0.386848570 */, 17 },
+ /* 3380 */ { MAD_F(0x06312832) /* 0.387001226 */, 17 },
+ /* 3381 */ { MAD_F(0x0631c849) /* 0.387153897 */, 17 },
+ /* 3382 */ { MAD_F(0x06326863) /* 0.387306582 */, 17 },
+ /* 3383 */ { MAD_F(0x06330881) /* 0.387459283 */, 17 },
+ /* 3384 */ { MAD_F(0x0633a8a3) /* 0.387611999 */, 17 },
+ /* 3385 */ { MAD_F(0x063448ca) /* 0.387764730 */, 17 },
+ /* 3386 */ { MAD_F(0x0634e8f4) /* 0.387917476 */, 17 },
+ /* 3387 */ { MAD_F(0x06358923) /* 0.388070237 */, 17 },
+ /* 3388 */ { MAD_F(0x06362955) /* 0.388223013 */, 17 },
+ /* 3389 */ { MAD_F(0x0636c98c) /* 0.388375804 */, 17 },
+ /* 3390 */ { MAD_F(0x063769c6) /* 0.388528610 */, 17 },
+ /* 3391 */ { MAD_F(0x06380a05) /* 0.388681431 */, 17 },
+
+ /* 3392 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 17 },
+ /* 3393 */ { MAD_F(0x06394a8e) /* 0.388987119 */, 17 },
+ /* 3394 */ { MAD_F(0x0639ead9) /* 0.389139985 */, 17 },
+ /* 3395 */ { MAD_F(0x063a8b28) /* 0.389292866 */, 17 },
+ /* 3396 */ { MAD_F(0x063b2b7b) /* 0.389445762 */, 17 },
+ /* 3397 */ { MAD_F(0x063bcbd1) /* 0.389598674 */, 17 },
+ /* 3398 */ { MAD_F(0x063c6c2c) /* 0.389751600 */, 17 },
+ /* 3399 */ { MAD_F(0x063d0c8b) /* 0.389904541 */, 17 },
+ /* 3400 */ { MAD_F(0x063dacee) /* 0.390057497 */, 17 },
+ /* 3401 */ { MAD_F(0x063e4d55) /* 0.390210468 */, 17 },
+ /* 3402 */ { MAD_F(0x063eedc0) /* 0.390363455 */, 17 },
+ /* 3403 */ { MAD_F(0x063f8e2f) /* 0.390516456 */, 17 },
+ /* 3404 */ { MAD_F(0x06402ea2) /* 0.390669472 */, 17 },
+ /* 3405 */ { MAD_F(0x0640cf19) /* 0.390822503 */, 17 },
+ /* 3406 */ { MAD_F(0x06416f94) /* 0.390975549 */, 17 },
+ /* 3407 */ { MAD_F(0x06421013) /* 0.391128611 */, 17 },
+
+ /* 3408 */ { MAD_F(0x0642b096) /* 0.391281687 */, 17 },
+ /* 3409 */ { MAD_F(0x0643511d) /* 0.391434778 */, 17 },
+ /* 3410 */ { MAD_F(0x0643f1a8) /* 0.391587884 */, 17 },
+ /* 3411 */ { MAD_F(0x06449237) /* 0.391741005 */, 17 },
+ /* 3412 */ { MAD_F(0x064532ca) /* 0.391894141 */, 17 },
+ /* 3413 */ { MAD_F(0x0645d361) /* 0.392047292 */, 17 },
+ /* 3414 */ { MAD_F(0x064673fc) /* 0.392200458 */, 17 },
+ /* 3415 */ { MAD_F(0x0647149c) /* 0.392353638 */, 17 },
+ /* 3416 */ { MAD_F(0x0647b53f) /* 0.392506834 */, 17 },
+ /* 3417 */ { MAD_F(0x064855e6) /* 0.392660045 */, 17 },
+ /* 3418 */ { MAD_F(0x0648f691) /* 0.392813271 */, 17 },
+ /* 3419 */ { MAD_F(0x06499740) /* 0.392966511 */, 17 },
+ /* 3420 */ { MAD_F(0x064a37f4) /* 0.393119767 */, 17 },
+ /* 3421 */ { MAD_F(0x064ad8ab) /* 0.393273038 */, 17 },
+ /* 3422 */ { MAD_F(0x064b7966) /* 0.393426323 */, 17 },
+ /* 3423 */ { MAD_F(0x064c1a25) /* 0.393579623 */, 17 },
+
+ /* 3424 */ { MAD_F(0x064cbae9) /* 0.393732939 */, 17 },
+ /* 3425 */ { MAD_F(0x064d5bb0) /* 0.393886269 */, 17 },
+ /* 3426 */ { MAD_F(0x064dfc7b) /* 0.394039614 */, 17 },
+ /* 3427 */ { MAD_F(0x064e9d4b) /* 0.394192974 */, 17 },
+ /* 3428 */ { MAD_F(0x064f3e1e) /* 0.394346349 */, 17 },
+ /* 3429 */ { MAD_F(0x064fdef5) /* 0.394499739 */, 17 },
+ /* 3430 */ { MAD_F(0x06507fd0) /* 0.394653144 */, 17 },
+ /* 3431 */ { MAD_F(0x065120b0) /* 0.394806564 */, 17 },
+ /* 3432 */ { MAD_F(0x0651c193) /* 0.394959999 */, 17 },
+ /* 3433 */ { MAD_F(0x0652627a) /* 0.395113448 */, 17 },
+ /* 3434 */ { MAD_F(0x06530366) /* 0.395266913 */, 17 },
+ /* 3435 */ { MAD_F(0x0653a455) /* 0.395420392 */, 17 },
+ /* 3436 */ { MAD_F(0x06544548) /* 0.395573886 */, 17 },
+ /* 3437 */ { MAD_F(0x0654e640) /* 0.395727395 */, 17 },
+ /* 3438 */ { MAD_F(0x0655873b) /* 0.395880919 */, 17 },
+ /* 3439 */ { MAD_F(0x0656283a) /* 0.396034458 */, 17 },
+
+ /* 3440 */ { MAD_F(0x0656c93d) /* 0.396188012 */, 17 },
+ /* 3441 */ { MAD_F(0x06576a45) /* 0.396341581 */, 17 },
+ /* 3442 */ { MAD_F(0x06580b50) /* 0.396495164 */, 17 },
+ /* 3443 */ { MAD_F(0x0658ac5f) /* 0.396648763 */, 17 },
+ /* 3444 */ { MAD_F(0x06594d73) /* 0.396802376 */, 17 },
+ /* 3445 */ { MAD_F(0x0659ee8a) /* 0.396956004 */, 17 },
+ /* 3446 */ { MAD_F(0x065a8fa5) /* 0.397109647 */, 17 },
+ /* 3447 */ { MAD_F(0x065b30c4) /* 0.397263305 */, 17 },
+ /* 3448 */ { MAD_F(0x065bd1e7) /* 0.397416978 */, 17 },
+ /* 3449 */ { MAD_F(0x065c730f) /* 0.397570666 */, 17 },
+ /* 3450 */ { MAD_F(0x065d143a) /* 0.397724368 */, 17 },
+ /* 3451 */ { MAD_F(0x065db569) /* 0.397878085 */, 17 },
+ /* 3452 */ { MAD_F(0x065e569c) /* 0.398031818 */, 17 },
+ /* 3453 */ { MAD_F(0x065ef7d3) /* 0.398185565 */, 17 },
+ /* 3454 */ { MAD_F(0x065f990e) /* 0.398339326 */, 17 },
+ /* 3455 */ { MAD_F(0x06603a4e) /* 0.398493103 */, 17 },
+
+ /* 3456 */ { MAD_F(0x0660db91) /* 0.398646895 */, 17 },
+ /* 3457 */ { MAD_F(0x06617cd8) /* 0.398800701 */, 17 },
+ /* 3458 */ { MAD_F(0x06621e23) /* 0.398954522 */, 17 },
+ /* 3459 */ { MAD_F(0x0662bf72) /* 0.399108358 */, 17 },
+ /* 3460 */ { MAD_F(0x066360c5) /* 0.399262209 */, 17 },
+ /* 3461 */ { MAD_F(0x0664021c) /* 0.399416075 */, 17 },
+ /* 3462 */ { MAD_F(0x0664a377) /* 0.399569955 */, 17 },
+ /* 3463 */ { MAD_F(0x066544d6) /* 0.399723851 */, 17 },
+ /* 3464 */ { MAD_F(0x0665e639) /* 0.399877761 */, 17 },
+ /* 3465 */ { MAD_F(0x066687a0) /* 0.400031686 */, 17 },
+ /* 3466 */ { MAD_F(0x0667290b) /* 0.400185625 */, 17 },
+ /* 3467 */ { MAD_F(0x0667ca79) /* 0.400339580 */, 17 },
+ /* 3468 */ { MAD_F(0x06686bec) /* 0.400493549 */, 17 },
+ /* 3469 */ { MAD_F(0x06690d63) /* 0.400647534 */, 17 },
+ /* 3470 */ { MAD_F(0x0669aede) /* 0.400801533 */, 17 },
+ /* 3471 */ { MAD_F(0x066a505d) /* 0.400955546 */, 17 },
+
+ /* 3472 */ { MAD_F(0x066af1df) /* 0.401109575 */, 17 },
+ /* 3473 */ { MAD_F(0x066b9366) /* 0.401263618 */, 17 },
+ /* 3474 */ { MAD_F(0x066c34f1) /* 0.401417676 */, 17 },
+ /* 3475 */ { MAD_F(0x066cd67f) /* 0.401571749 */, 17 },
+ /* 3476 */ { MAD_F(0x066d7812) /* 0.401725837 */, 17 },
+ /* 3477 */ { MAD_F(0x066e19a9) /* 0.401879939 */, 17 },
+ /* 3478 */ { MAD_F(0x066ebb43) /* 0.402034056 */, 17 },
+ /* 3479 */ { MAD_F(0x066f5ce2) /* 0.402188188 */, 17 },
+ /* 3480 */ { MAD_F(0x066ffe84) /* 0.402342335 */, 17 },
+ /* 3481 */ { MAD_F(0x0670a02a) /* 0.402496497 */, 17 },
+ /* 3482 */ { MAD_F(0x067141d5) /* 0.402650673 */, 17 },
+ /* 3483 */ { MAD_F(0x0671e383) /* 0.402804864 */, 17 },
+ /* 3484 */ { MAD_F(0x06728535) /* 0.402959070 */, 17 },
+ /* 3485 */ { MAD_F(0x067326ec) /* 0.403113291 */, 17 },
+ /* 3486 */ { MAD_F(0x0673c8a6) /* 0.403267526 */, 17 },
+ /* 3487 */ { MAD_F(0x06746a64) /* 0.403421776 */, 17 },
+
+ /* 3488 */ { MAD_F(0x06750c26) /* 0.403576041 */, 17 },
+ /* 3489 */ { MAD_F(0x0675adec) /* 0.403730320 */, 17 },
+ /* 3490 */ { MAD_F(0x06764fb6) /* 0.403884615 */, 17 },
+ /* 3491 */ { MAD_F(0x0676f184) /* 0.404038924 */, 17 },
+ /* 3492 */ { MAD_F(0x06779356) /* 0.404193247 */, 17 },
+ /* 3493 */ { MAD_F(0x0678352c) /* 0.404347586 */, 17 },
+ /* 3494 */ { MAD_F(0x0678d706) /* 0.404501939 */, 17 },
+ /* 3495 */ { MAD_F(0x067978e4) /* 0.404656307 */, 17 },
+ /* 3496 */ { MAD_F(0x067a1ac6) /* 0.404810690 */, 17 },
+ /* 3497 */ { MAD_F(0x067abcac) /* 0.404965087 */, 17 },
+ /* 3498 */ { MAD_F(0x067b5e95) /* 0.405119499 */, 17 },
+ /* 3499 */ { MAD_F(0x067c0083) /* 0.405273926 */, 17 },
+ /* 3500 */ { MAD_F(0x067ca275) /* 0.405428368 */, 17 },
+ /* 3501 */ { MAD_F(0x067d446a) /* 0.405582824 */, 17 },
+ /* 3502 */ { MAD_F(0x067de664) /* 0.405737295 */, 17 },
+ /* 3503 */ { MAD_F(0x067e8861) /* 0.405891781 */, 17 },
+
+ /* 3504 */ { MAD_F(0x067f2a62) /* 0.406046281 */, 17 },
+ /* 3505 */ { MAD_F(0x067fcc68) /* 0.406200796 */, 17 },
+ /* 3506 */ { MAD_F(0x06806e71) /* 0.406355326 */, 17 },
+ /* 3507 */ { MAD_F(0x0681107e) /* 0.406509870 */, 17 },
+ /* 3508 */ { MAD_F(0x0681b28f) /* 0.406664429 */, 17 },
+ /* 3509 */ { MAD_F(0x068254a4) /* 0.406819003 */, 17 },
+ /* 3510 */ { MAD_F(0x0682f6bd) /* 0.406973592 */, 17 },
+ /* 3511 */ { MAD_F(0x068398da) /* 0.407128195 */, 17 },
+ /* 3512 */ { MAD_F(0x06843afb) /* 0.407282813 */, 17 },
+ /* 3513 */ { MAD_F(0x0684dd20) /* 0.407437445 */, 17 },
+ /* 3514 */ { MAD_F(0x06857f49) /* 0.407592093 */, 17 },
+ /* 3515 */ { MAD_F(0x06862176) /* 0.407746754 */, 17 },
+ /* 3516 */ { MAD_F(0x0686c3a6) /* 0.407901431 */, 17 },
+ /* 3517 */ { MAD_F(0x068765db) /* 0.408056122 */, 17 },
+ /* 3518 */ { MAD_F(0x06880814) /* 0.408210828 */, 17 },
+ /* 3519 */ { MAD_F(0x0688aa50) /* 0.408365549 */, 17 },
+
+ /* 3520 */ { MAD_F(0x06894c90) /* 0.408520284 */, 17 },
+ /* 3521 */ { MAD_F(0x0689eed5) /* 0.408675034 */, 17 },
+ /* 3522 */ { MAD_F(0x068a911d) /* 0.408829798 */, 17 },
+ /* 3523 */ { MAD_F(0x068b3369) /* 0.408984577 */, 17 },
+ /* 3524 */ { MAD_F(0x068bd5b9) /* 0.409139371 */, 17 },
+ /* 3525 */ { MAD_F(0x068c780e) /* 0.409294180 */, 17 },
+ /* 3526 */ { MAD_F(0x068d1a66) /* 0.409449003 */, 17 },
+ /* 3527 */ { MAD_F(0x068dbcc1) /* 0.409603840 */, 17 },
+ /* 3528 */ { MAD_F(0x068e5f21) /* 0.409758693 */, 17 },
+ /* 3529 */ { MAD_F(0x068f0185) /* 0.409913560 */, 17 },
+ /* 3530 */ { MAD_F(0x068fa3ed) /* 0.410068441 */, 17 },
+ /* 3531 */ { MAD_F(0x06904658) /* 0.410223338 */, 17 },
+ /* 3532 */ { MAD_F(0x0690e8c8) /* 0.410378249 */, 17 },
+ /* 3533 */ { MAD_F(0x06918b3c) /* 0.410533174 */, 17 },
+ /* 3534 */ { MAD_F(0x06922db3) /* 0.410688114 */, 17 },
+ /* 3535 */ { MAD_F(0x0692d02e) /* 0.410843069 */, 17 },
+
+ /* 3536 */ { MAD_F(0x069372ae) /* 0.410998038 */, 17 },
+ /* 3537 */ { MAD_F(0x06941531) /* 0.411153022 */, 17 },
+ /* 3538 */ { MAD_F(0x0694b7b8) /* 0.411308021 */, 17 },
+ /* 3539 */ { MAD_F(0x06955a43) /* 0.411463034 */, 17 },
+ /* 3540 */ { MAD_F(0x0695fcd2) /* 0.411618062 */, 17 },
+ /* 3541 */ { MAD_F(0x06969f65) /* 0.411773104 */, 17 },
+ /* 3542 */ { MAD_F(0x069741fb) /* 0.411928161 */, 17 },
+ /* 3543 */ { MAD_F(0x0697e496) /* 0.412083232 */, 17 },
+ /* 3544 */ { MAD_F(0x06988735) /* 0.412238319 */, 17 },
+ /* 3545 */ { MAD_F(0x069929d7) /* 0.412393419 */, 17 },
+ /* 3546 */ { MAD_F(0x0699cc7e) /* 0.412548535 */, 17 },
+ /* 3547 */ { MAD_F(0x069a6f28) /* 0.412703664 */, 17 },
+ /* 3548 */ { MAD_F(0x069b11d6) /* 0.412858809 */, 17 },
+ /* 3549 */ { MAD_F(0x069bb489) /* 0.413013968 */, 17 },
+ /* 3550 */ { MAD_F(0x069c573f) /* 0.413169142 */, 17 },
+ /* 3551 */ { MAD_F(0x069cf9f9) /* 0.413324330 */, 17 },
+
+ /* 3552 */ { MAD_F(0x069d9cb7) /* 0.413479532 */, 17 },
+ /* 3553 */ { MAD_F(0x069e3f78) /* 0.413634750 */, 17 },
+ /* 3554 */ { MAD_F(0x069ee23e) /* 0.413789982 */, 17 },
+ /* 3555 */ { MAD_F(0x069f8508) /* 0.413945228 */, 17 },
+ /* 3556 */ { MAD_F(0x06a027d5) /* 0.414100489 */, 17 },
+ /* 3557 */ { MAD_F(0x06a0caa7) /* 0.414255765 */, 17 },
+ /* 3558 */ { MAD_F(0x06a16d7c) /* 0.414411055 */, 17 },
+ /* 3559 */ { MAD_F(0x06a21055) /* 0.414566359 */, 17 },
+ /* 3560 */ { MAD_F(0x06a2b333) /* 0.414721679 */, 17 },
+ /* 3561 */ { MAD_F(0x06a35614) /* 0.414877012 */, 17 },
+ /* 3562 */ { MAD_F(0x06a3f8f9) /* 0.415032361 */, 17 },
+ /* 3563 */ { MAD_F(0x06a49be2) /* 0.415187723 */, 17 },
+ /* 3564 */ { MAD_F(0x06a53ece) /* 0.415343101 */, 17 },
+ /* 3565 */ { MAD_F(0x06a5e1bf) /* 0.415498493 */, 17 },
+ /* 3566 */ { MAD_F(0x06a684b4) /* 0.415653899 */, 17 },
+ /* 3567 */ { MAD_F(0x06a727ac) /* 0.415809320 */, 17 },
+
+ /* 3568 */ { MAD_F(0x06a7caa9) /* 0.415964756 */, 17 },
+ /* 3569 */ { MAD_F(0x06a86da9) /* 0.416120206 */, 17 },
+ /* 3570 */ { MAD_F(0x06a910ad) /* 0.416275670 */, 17 },
+ /* 3571 */ { MAD_F(0x06a9b3b5) /* 0.416431149 */, 17 },
+ /* 3572 */ { MAD_F(0x06aa56c1) /* 0.416586643 */, 17 },
+ /* 3573 */ { MAD_F(0x06aaf9d1) /* 0.416742151 */, 17 },
+ /* 3574 */ { MAD_F(0x06ab9ce5) /* 0.416897673 */, 17 },
+ /* 3575 */ { MAD_F(0x06ac3ffc) /* 0.417053210 */, 17 },
+ /* 3576 */ { MAD_F(0x06ace318) /* 0.417208762 */, 17 },
+ /* 3577 */ { MAD_F(0x06ad8637) /* 0.417364328 */, 17 },
+ /* 3578 */ { MAD_F(0x06ae295b) /* 0.417519909 */, 17 },
+ /* 3579 */ { MAD_F(0x06aecc82) /* 0.417675504 */, 17 },
+ /* 3580 */ { MAD_F(0x06af6fad) /* 0.417831113 */, 17 },
+ /* 3581 */ { MAD_F(0x06b012dc) /* 0.417986737 */, 17 },
+ /* 3582 */ { MAD_F(0x06b0b60f) /* 0.418142376 */, 17 },
+ /* 3583 */ { MAD_F(0x06b15946) /* 0.418298029 */, 17 },
+
+ /* 3584 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 17 },
+ /* 3585 */ { MAD_F(0x06b29fbf) /* 0.418609378 */, 17 },
+ /* 3586 */ { MAD_F(0x06b34302) /* 0.418765075 */, 17 },
+ /* 3587 */ { MAD_F(0x06b3e648) /* 0.418920786 */, 17 },
+ /* 3588 */ { MAD_F(0x06b48992) /* 0.419076511 */, 17 },
+ /* 3589 */ { MAD_F(0x06b52ce0) /* 0.419232251 */, 17 },
+ /* 3590 */ { MAD_F(0x06b5d032) /* 0.419388005 */, 17 },
+ /* 3591 */ { MAD_F(0x06b67388) /* 0.419543774 */, 17 },
+ /* 3592 */ { MAD_F(0x06b716e2) /* 0.419699557 */, 17 },
+ /* 3593 */ { MAD_F(0x06b7ba3f) /* 0.419855355 */, 17 },
+ /* 3594 */ { MAD_F(0x06b85da1) /* 0.420011167 */, 17 },
+ /* 3595 */ { MAD_F(0x06b90106) /* 0.420166994 */, 17 },
+ /* 3596 */ { MAD_F(0x06b9a470) /* 0.420322835 */, 17 },
+ /* 3597 */ { MAD_F(0x06ba47dd) /* 0.420478690 */, 17 },
+ /* 3598 */ { MAD_F(0x06baeb4e) /* 0.420634560 */, 17 },
+ /* 3599 */ { MAD_F(0x06bb8ec3) /* 0.420790445 */, 17 },
+
+ /* 3600 */ { MAD_F(0x06bc323b) /* 0.420946343 */, 17 },
+ /* 3601 */ { MAD_F(0x06bcd5b8) /* 0.421102257 */, 17 },
+ /* 3602 */ { MAD_F(0x06bd7939) /* 0.421258184 */, 17 },
+ /* 3603 */ { MAD_F(0x06be1cbd) /* 0.421414127 */, 17 },
+ /* 3604 */ { MAD_F(0x06bec045) /* 0.421570083 */, 17 },
+ /* 3605 */ { MAD_F(0x06bf63d1) /* 0.421726054 */, 17 },
+ /* 3606 */ { MAD_F(0x06c00761) /* 0.421882040 */, 17 },
+ /* 3607 */ { MAD_F(0x06c0aaf5) /* 0.422038039 */, 17 },
+ /* 3608 */ { MAD_F(0x06c14e8d) /* 0.422194054 */, 17 },
+ /* 3609 */ { MAD_F(0x06c1f229) /* 0.422350082 */, 17 },
+ /* 3610 */ { MAD_F(0x06c295c8) /* 0.422506125 */, 17 },
+ /* 3611 */ { MAD_F(0x06c3396c) /* 0.422662183 */, 17 },
+ /* 3612 */ { MAD_F(0x06c3dd13) /* 0.422818255 */, 17 },
+ /* 3613 */ { MAD_F(0x06c480be) /* 0.422974341 */, 17 },
+ /* 3614 */ { MAD_F(0x06c5246d) /* 0.423130442 */, 17 },
+ /* 3615 */ { MAD_F(0x06c5c820) /* 0.423286557 */, 17 },
+
+ /* 3616 */ { MAD_F(0x06c66bd6) /* 0.423442686 */, 17 },
+ /* 3617 */ { MAD_F(0x06c70f91) /* 0.423598830 */, 17 },
+ /* 3618 */ { MAD_F(0x06c7b34f) /* 0.423754988 */, 17 },
+ /* 3619 */ { MAD_F(0x06c85712) /* 0.423911161 */, 17 },
+ /* 3620 */ { MAD_F(0x06c8fad8) /* 0.424067348 */, 17 },
+ /* 3621 */ { MAD_F(0x06c99ea2) /* 0.424223550 */, 17 },
+ /* 3622 */ { MAD_F(0x06ca4270) /* 0.424379765 */, 17 },
+ /* 3623 */ { MAD_F(0x06cae641) /* 0.424535996 */, 17 },
+ /* 3624 */ { MAD_F(0x06cb8a17) /* 0.424692240 */, 17 },
+ /* 3625 */ { MAD_F(0x06cc2df0) /* 0.424848499 */, 17 },
+ /* 3626 */ { MAD_F(0x06ccd1ce) /* 0.425004772 */, 17 },
+ /* 3627 */ { MAD_F(0x06cd75af) /* 0.425161060 */, 17 },
+ /* 3628 */ { MAD_F(0x06ce1994) /* 0.425317362 */, 17 },
+ /* 3629 */ { MAD_F(0x06cebd7d) /* 0.425473678 */, 17 },
+ /* 3630 */ { MAD_F(0x06cf6169) /* 0.425630009 */, 17 },
+ /* 3631 */ { MAD_F(0x06d0055a) /* 0.425786354 */, 17 },
+
+ /* 3632 */ { MAD_F(0x06d0a94e) /* 0.425942714 */, 17 },
+ /* 3633 */ { MAD_F(0x06d14d47) /* 0.426099088 */, 17 },
+ /* 3634 */ { MAD_F(0x06d1f143) /* 0.426255476 */, 17 },
+ /* 3635 */ { MAD_F(0x06d29543) /* 0.426411878 */, 17 },
+ /* 3636 */ { MAD_F(0x06d33947) /* 0.426568295 */, 17 },
+ /* 3637 */ { MAD_F(0x06d3dd4e) /* 0.426724726 */, 17 },
+ /* 3638 */ { MAD_F(0x06d4815a) /* 0.426881172 */, 17 },
+ /* 3639 */ { MAD_F(0x06d52569) /* 0.427037632 */, 17 },
+ /* 3640 */ { MAD_F(0x06d5c97c) /* 0.427194106 */, 17 },
+ /* 3641 */ { MAD_F(0x06d66d93) /* 0.427350594 */, 17 },
+ /* 3642 */ { MAD_F(0x06d711ae) /* 0.427507097 */, 17 },
+ /* 3643 */ { MAD_F(0x06d7b5cd) /* 0.427663614 */, 17 },
+ /* 3644 */ { MAD_F(0x06d859f0) /* 0.427820146 */, 17 },
+ /* 3645 */ { MAD_F(0x06d8fe16) /* 0.427976692 */, 17 },
+ /* 3646 */ { MAD_F(0x06d9a240) /* 0.428133252 */, 17 },
+ /* 3647 */ { MAD_F(0x06da466f) /* 0.428289826 */, 17 },
+
+ /* 3648 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 17 },
+ /* 3649 */ { MAD_F(0x06db8ed6) /* 0.428603018 */, 17 },
+ /* 3650 */ { MAD_F(0x06dc3310) /* 0.428759635 */, 17 },
+ /* 3651 */ { MAD_F(0x06dcd74d) /* 0.428916267 */, 17 },
+ /* 3652 */ { MAD_F(0x06dd7b8f) /* 0.429072913 */, 17 },
+ /* 3653 */ { MAD_F(0x06de1fd4) /* 0.429229573 */, 17 },
+ /* 3654 */ { MAD_F(0x06dec41d) /* 0.429386248 */, 17 },
+ /* 3655 */ { MAD_F(0x06df686a) /* 0.429542937 */, 17 },
+ /* 3656 */ { MAD_F(0x06e00cbb) /* 0.429699640 */, 17 },
+ /* 3657 */ { MAD_F(0x06e0b10f) /* 0.429856357 */, 17 },
+ /* 3658 */ { MAD_F(0x06e15567) /* 0.430013089 */, 17 },
+ /* 3659 */ { MAD_F(0x06e1f9c4) /* 0.430169835 */, 17 },
+ /* 3660 */ { MAD_F(0x06e29e24) /* 0.430326595 */, 17 },
+ /* 3661 */ { MAD_F(0x06e34287) /* 0.430483370 */, 17 },
+ /* 3662 */ { MAD_F(0x06e3e6ef) /* 0.430640159 */, 17 },
+ /* 3663 */ { MAD_F(0x06e48b5b) /* 0.430796962 */, 17 },
+
+ /* 3664 */ { MAD_F(0x06e52fca) /* 0.430953779 */, 17 },
+ /* 3665 */ { MAD_F(0x06e5d43d) /* 0.431110611 */, 17 },
+ /* 3666 */ { MAD_F(0x06e678b4) /* 0.431267457 */, 17 },
+ /* 3667 */ { MAD_F(0x06e71d2f) /* 0.431424317 */, 17 },
+ /* 3668 */ { MAD_F(0x06e7c1ae) /* 0.431581192 */, 17 },
+ /* 3669 */ { MAD_F(0x06e86630) /* 0.431738080 */, 17 },
+ /* 3670 */ { MAD_F(0x06e90ab7) /* 0.431894983 */, 17 },
+ /* 3671 */ { MAD_F(0x06e9af41) /* 0.432051900 */, 17 },
+ /* 3672 */ { MAD_F(0x06ea53cf) /* 0.432208832 */, 17 },
+ /* 3673 */ { MAD_F(0x06eaf860) /* 0.432365778 */, 17 },
+ /* 3674 */ { MAD_F(0x06eb9cf6) /* 0.432522737 */, 17 },
+ /* 3675 */ { MAD_F(0x06ec418f) /* 0.432679712 */, 17 },
+ /* 3676 */ { MAD_F(0x06ece62d) /* 0.432836700 */, 17 },
+ /* 3677 */ { MAD_F(0x06ed8ace) /* 0.432993703 */, 17 },
+ /* 3678 */ { MAD_F(0x06ee2f73) /* 0.433150720 */, 17 },
+ /* 3679 */ { MAD_F(0x06eed41b) /* 0.433307751 */, 17 },
+
+ /* 3680 */ { MAD_F(0x06ef78c8) /* 0.433464796 */, 17 },
+ /* 3681 */ { MAD_F(0x06f01d78) /* 0.433621856 */, 17 },
+ /* 3682 */ { MAD_F(0x06f0c22c) /* 0.433778929 */, 17 },
+ /* 3683 */ { MAD_F(0x06f166e4) /* 0.433936017 */, 17 },
+ /* 3684 */ { MAD_F(0x06f20ba0) /* 0.434093120 */, 17 },
+ /* 3685 */ { MAD_F(0x06f2b060) /* 0.434250236 */, 17 },
+ /* 3686 */ { MAD_F(0x06f35523) /* 0.434407367 */, 17 },
+ /* 3687 */ { MAD_F(0x06f3f9eb) /* 0.434564512 */, 17 },
+ /* 3688 */ { MAD_F(0x06f49eb6) /* 0.434721671 */, 17 },
+ /* 3689 */ { MAD_F(0x06f54385) /* 0.434878844 */, 17 },
+ /* 3690 */ { MAD_F(0x06f5e857) /* 0.435036032 */, 17 },
+ /* 3691 */ { MAD_F(0x06f68d2e) /* 0.435193233 */, 17 },
+ /* 3692 */ { MAD_F(0x06f73208) /* 0.435350449 */, 17 },
+ /* 3693 */ { MAD_F(0x06f7d6e6) /* 0.435507679 */, 17 },
+ /* 3694 */ { MAD_F(0x06f87bc8) /* 0.435664924 */, 17 },
+ /* 3695 */ { MAD_F(0x06f920ae) /* 0.435822182 */, 17 },
+
+ /* 3696 */ { MAD_F(0x06f9c597) /* 0.435979455 */, 17 },
+ /* 3697 */ { MAD_F(0x06fa6a85) /* 0.436136741 */, 17 },
+ /* 3698 */ { MAD_F(0x06fb0f76) /* 0.436294042 */, 17 },
+ /* 3699 */ { MAD_F(0x06fbb46b) /* 0.436451358 */, 17 },
+ /* 3700 */ { MAD_F(0x06fc5964) /* 0.436608687 */, 17 },
+ /* 3701 */ { MAD_F(0x06fcfe60) /* 0.436766031 */, 17 },
+ /* 3702 */ { MAD_F(0x06fda361) /* 0.436923388 */, 17 },
+ /* 3703 */ { MAD_F(0x06fe4865) /* 0.437080760 */, 17 },
+ /* 3704 */ { MAD_F(0x06feed6d) /* 0.437238146 */, 17 },
+ /* 3705 */ { MAD_F(0x06ff9279) /* 0.437395547 */, 17 },
+ /* 3706 */ { MAD_F(0x07003788) /* 0.437552961 */, 17 },
+ /* 3707 */ { MAD_F(0x0700dc9c) /* 0.437710389 */, 17 },
+ /* 3708 */ { MAD_F(0x070181b3) /* 0.437867832 */, 17 },
+ /* 3709 */ { MAD_F(0x070226ce) /* 0.438025289 */, 17 },
+ /* 3710 */ { MAD_F(0x0702cbed) /* 0.438182760 */, 17 },
+ /* 3711 */ { MAD_F(0x0703710f) /* 0.438340245 */, 17 },
+
+ /* 3712 */ { MAD_F(0x07041636) /* 0.438497744 */, 17 },
+ /* 3713 */ { MAD_F(0x0704bb60) /* 0.438655258 */, 17 },
+ /* 3714 */ { MAD_F(0x0705608e) /* 0.438812785 */, 17 },
+ /* 3715 */ { MAD_F(0x070605c0) /* 0.438970327 */, 17 },
+ /* 3716 */ { MAD_F(0x0706aaf5) /* 0.439127883 */, 17 },
+ /* 3717 */ { MAD_F(0x0707502f) /* 0.439285453 */, 17 },
+ /* 3718 */ { MAD_F(0x0707f56c) /* 0.439443037 */, 17 },
+ /* 3719 */ { MAD_F(0x07089aad) /* 0.439600635 */, 17 },
+ /* 3720 */ { MAD_F(0x07093ff2) /* 0.439758248 */, 17 },
+ /* 3721 */ { MAD_F(0x0709e53a) /* 0.439915874 */, 17 },
+ /* 3722 */ { MAD_F(0x070a8a86) /* 0.440073515 */, 17 },
+ /* 3723 */ { MAD_F(0x070b2fd7) /* 0.440231170 */, 17 },
+ /* 3724 */ { MAD_F(0x070bd52a) /* 0.440388839 */, 17 },
+ /* 3725 */ { MAD_F(0x070c7a82) /* 0.440546522 */, 17 },
+ /* 3726 */ { MAD_F(0x070d1fde) /* 0.440704219 */, 17 },
+ /* 3727 */ { MAD_F(0x070dc53d) /* 0.440861930 */, 17 },
+
+ /* 3728 */ { MAD_F(0x070e6aa0) /* 0.441019655 */, 17 },
+ /* 3729 */ { MAD_F(0x070f1007) /* 0.441177395 */, 17 },
+ /* 3730 */ { MAD_F(0x070fb571) /* 0.441335148 */, 17 },
+ /* 3731 */ { MAD_F(0x07105ae0) /* 0.441492916 */, 17 },
+ /* 3732 */ { MAD_F(0x07110052) /* 0.441650697 */, 17 },
+ /* 3733 */ { MAD_F(0x0711a5c8) /* 0.441808493 */, 17 },
+ /* 3734 */ { MAD_F(0x07124b42) /* 0.441966303 */, 17 },
+ /* 3735 */ { MAD_F(0x0712f0bf) /* 0.442124127 */, 17 },
+ /* 3736 */ { MAD_F(0x07139641) /* 0.442281965 */, 17 },
+ /* 3737 */ { MAD_F(0x07143bc6) /* 0.442439817 */, 17 },
+ /* 3738 */ { MAD_F(0x0714e14f) /* 0.442597683 */, 17 },
+ /* 3739 */ { MAD_F(0x071586db) /* 0.442755564 */, 17 },
+ /* 3740 */ { MAD_F(0x07162c6c) /* 0.442913458 */, 17 },
+ /* 3741 */ { MAD_F(0x0716d200) /* 0.443071366 */, 17 },
+ /* 3742 */ { MAD_F(0x07177798) /* 0.443229289 */, 17 },
+ /* 3743 */ { MAD_F(0x07181d34) /* 0.443387226 */, 17 },
+
+ /* 3744 */ { MAD_F(0x0718c2d3) /* 0.443545176 */, 17 },
+ /* 3745 */ { MAD_F(0x07196877) /* 0.443703141 */, 17 },
+ /* 3746 */ { MAD_F(0x071a0e1e) /* 0.443861120 */, 17 },
+ /* 3747 */ { MAD_F(0x071ab3c9) /* 0.444019113 */, 17 },
+ /* 3748 */ { MAD_F(0x071b5977) /* 0.444177119 */, 17 },
+ /* 3749 */ { MAD_F(0x071bff2a) /* 0.444335140 */, 17 },
+ /* 3750 */ { MAD_F(0x071ca4e0) /* 0.444493175 */, 17 },
+ /* 3751 */ { MAD_F(0x071d4a9a) /* 0.444651224 */, 17 },
+ /* 3752 */ { MAD_F(0x071df058) /* 0.444809288 */, 17 },
+ /* 3753 */ { MAD_F(0x071e9619) /* 0.444967365 */, 17 },
+ /* 3754 */ { MAD_F(0x071f3bde) /* 0.445125456 */, 17 },
+ /* 3755 */ { MAD_F(0x071fe1a8) /* 0.445283561 */, 17 },
+ /* 3756 */ { MAD_F(0x07208774) /* 0.445441680 */, 17 },
+ /* 3757 */ { MAD_F(0x07212d45) /* 0.445599814 */, 17 },
+ /* 3758 */ { MAD_F(0x0721d319) /* 0.445757961 */, 17 },
+ /* 3759 */ { MAD_F(0x072278f1) /* 0.445916122 */, 17 },
+
+ /* 3760 */ { MAD_F(0x07231ecd) /* 0.446074298 */, 17 },
+ /* 3761 */ { MAD_F(0x0723c4ad) /* 0.446232487 */, 17 },
+ /* 3762 */ { MAD_F(0x07246a90) /* 0.446390690 */, 17 },
+ /* 3763 */ { MAD_F(0x07251077) /* 0.446548908 */, 17 },
+ /* 3764 */ { MAD_F(0x0725b662) /* 0.446707139 */, 17 },
+ /* 3765 */ { MAD_F(0x07265c51) /* 0.446865385 */, 17 },
+ /* 3766 */ { MAD_F(0x07270244) /* 0.447023644 */, 17 },
+ /* 3767 */ { MAD_F(0x0727a83a) /* 0.447181918 */, 17 },
+ /* 3768 */ { MAD_F(0x07284e34) /* 0.447340205 */, 17 },
+ /* 3769 */ { MAD_F(0x0728f431) /* 0.447498507 */, 17 },
+ /* 3770 */ { MAD_F(0x07299a33) /* 0.447656822 */, 17 },
+ /* 3771 */ { MAD_F(0x072a4038) /* 0.447815152 */, 17 },
+ /* 3772 */ { MAD_F(0x072ae641) /* 0.447973495 */, 17 },
+ /* 3773 */ { MAD_F(0x072b8c4e) /* 0.448131853 */, 17 },
+ /* 3774 */ { MAD_F(0x072c325e) /* 0.448290224 */, 17 },
+ /* 3775 */ { MAD_F(0x072cd873) /* 0.448448609 */, 17 },
+
+ /* 3776 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 17 },
+ /* 3777 */ { MAD_F(0x072e24a7) /* 0.448765422 */, 17 },
+ /* 3778 */ { MAD_F(0x072ecac6) /* 0.448923850 */, 17 },
+ /* 3779 */ { MAD_F(0x072f70e9) /* 0.449082291 */, 17 },
+ /* 3780 */ { MAD_F(0x07301710) /* 0.449240746 */, 17 },
+ /* 3781 */ { MAD_F(0x0730bd3b) /* 0.449399216 */, 17 },
+ /* 3782 */ { MAD_F(0x0731636a) /* 0.449557699 */, 17 },
+ /* 3783 */ { MAD_F(0x0732099c) /* 0.449716196 */, 17 },
+ /* 3784 */ { MAD_F(0x0732afd2) /* 0.449874708 */, 17 },
+ /* 3785 */ { MAD_F(0x0733560c) /* 0.450033233 */, 17 },
+ /* 3786 */ { MAD_F(0x0733fc49) /* 0.450191772 */, 17 },
+ /* 3787 */ { MAD_F(0x0734a28b) /* 0.450350325 */, 17 },
+ /* 3788 */ { MAD_F(0x073548d0) /* 0.450508892 */, 17 },
+ /* 3789 */ { MAD_F(0x0735ef18) /* 0.450667473 */, 17 },
+ /* 3790 */ { MAD_F(0x07369565) /* 0.450826068 */, 17 },
+ /* 3791 */ { MAD_F(0x07373bb5) /* 0.450984677 */, 17 },
+
+ /* 3792 */ { MAD_F(0x0737e209) /* 0.451143300 */, 17 },
+ /* 3793 */ { MAD_F(0x07388861) /* 0.451301937 */, 17 },
+ /* 3794 */ { MAD_F(0x07392ebc) /* 0.451460588 */, 17 },
+ /* 3795 */ { MAD_F(0x0739d51c) /* 0.451619252 */, 17 },
+ /* 3796 */ { MAD_F(0x073a7b7f) /* 0.451777931 */, 17 },
+ /* 3797 */ { MAD_F(0x073b21e5) /* 0.451936623 */, 17 },
+ /* 3798 */ { MAD_F(0x073bc850) /* 0.452095330 */, 17 },
+ /* 3799 */ { MAD_F(0x073c6ebe) /* 0.452254050 */, 17 },
+ /* 3800 */ { MAD_F(0x073d1530) /* 0.452412785 */, 17 },
+ /* 3801 */ { MAD_F(0x073dbba6) /* 0.452571533 */, 17 },
+ /* 3802 */ { MAD_F(0x073e621f) /* 0.452730295 */, 17 },
+ /* 3803 */ { MAD_F(0x073f089c) /* 0.452889071 */, 17 },
+ /* 3804 */ { MAD_F(0x073faf1d) /* 0.453047861 */, 17 },
+ /* 3805 */ { MAD_F(0x074055a2) /* 0.453206665 */, 17 },
+ /* 3806 */ { MAD_F(0x0740fc2a) /* 0.453365483 */, 17 },
+ /* 3807 */ { MAD_F(0x0741a2b6) /* 0.453524315 */, 17 },
+
+ /* 3808 */ { MAD_F(0x07424946) /* 0.453683161 */, 17 },
+ /* 3809 */ { MAD_F(0x0742efd9) /* 0.453842020 */, 17 },
+ /* 3810 */ { MAD_F(0x07439671) /* 0.454000894 */, 17 },
+ /* 3811 */ { MAD_F(0x07443d0c) /* 0.454159781 */, 17 },
+ /* 3812 */ { MAD_F(0x0744e3aa) /* 0.454318683 */, 17 },
+ /* 3813 */ { MAD_F(0x07458a4d) /* 0.454477598 */, 17 },
+ /* 3814 */ { MAD_F(0x074630f3) /* 0.454636527 */, 17 },
+ /* 3815 */ { MAD_F(0x0746d79d) /* 0.454795470 */, 17 },
+ /* 3816 */ { MAD_F(0x07477e4b) /* 0.454954427 */, 17 },
+ /* 3817 */ { MAD_F(0x074824fc) /* 0.455113397 */, 17 },
+ /* 3818 */ { MAD_F(0x0748cbb1) /* 0.455272382 */, 17 },
+ /* 3819 */ { MAD_F(0x0749726a) /* 0.455431381 */, 17 },
+ /* 3820 */ { MAD_F(0x074a1927) /* 0.455590393 */, 17 },
+ /* 3821 */ { MAD_F(0x074abfe7) /* 0.455749419 */, 17 },
+ /* 3822 */ { MAD_F(0x074b66ab) /* 0.455908459 */, 17 },
+ /* 3823 */ { MAD_F(0x074c0d73) /* 0.456067513 */, 17 },
+
+ /* 3824 */ { MAD_F(0x074cb43e) /* 0.456226581 */, 17 },
+ /* 3825 */ { MAD_F(0x074d5b0d) /* 0.456385663 */, 17 },
+ /* 3826 */ { MAD_F(0x074e01e0) /* 0.456544759 */, 17 },
+ /* 3827 */ { MAD_F(0x074ea8b7) /* 0.456703868 */, 17 },
+ /* 3828 */ { MAD_F(0x074f4f91) /* 0.456862992 */, 17 },
+ /* 3829 */ { MAD_F(0x074ff66f) /* 0.457022129 */, 17 },
+ /* 3830 */ { MAD_F(0x07509d51) /* 0.457181280 */, 17 },
+ /* 3831 */ { MAD_F(0x07514437) /* 0.457340445 */, 17 },
+ /* 3832 */ { MAD_F(0x0751eb20) /* 0.457499623 */, 17 },
+ /* 3833 */ { MAD_F(0x0752920d) /* 0.457658816 */, 17 },
+ /* 3834 */ { MAD_F(0x075338fd) /* 0.457818022 */, 17 },
+ /* 3835 */ { MAD_F(0x0753dff2) /* 0.457977243 */, 17 },
+ /* 3836 */ { MAD_F(0x075486ea) /* 0.458136477 */, 17 },
+ /* 3837 */ { MAD_F(0x07552de6) /* 0.458295725 */, 17 },
+ /* 3838 */ { MAD_F(0x0755d4e5) /* 0.458454987 */, 17 },
+ /* 3839 */ { MAD_F(0x07567be8) /* 0.458614262 */, 17 },
+
+ /* 3840 */ { MAD_F(0x075722ef) /* 0.458773552 */, 17 },
+ /* 3841 */ { MAD_F(0x0757c9fa) /* 0.458932855 */, 17 },
+ /* 3842 */ { MAD_F(0x07587108) /* 0.459092172 */, 17 },
+ /* 3843 */ { MAD_F(0x0759181a) /* 0.459251503 */, 17 },
+ /* 3844 */ { MAD_F(0x0759bf30) /* 0.459410848 */, 17 },
+ /* 3845 */ { MAD_F(0x075a664a) /* 0.459570206 */, 17 },
+ /* 3846 */ { MAD_F(0x075b0d67) /* 0.459729579 */, 17 },
+ /* 3847 */ { MAD_F(0x075bb488) /* 0.459888965 */, 17 },
+ /* 3848 */ { MAD_F(0x075c5bac) /* 0.460048365 */, 17 },
+ /* 3849 */ { MAD_F(0x075d02d5) /* 0.460207779 */, 17 },
+ /* 3850 */ { MAD_F(0x075daa01) /* 0.460367206 */, 17 },
+ /* 3851 */ { MAD_F(0x075e5130) /* 0.460526648 */, 17 },
+ /* 3852 */ { MAD_F(0x075ef864) /* 0.460686103 */, 17 },
+ /* 3853 */ { MAD_F(0x075f9f9b) /* 0.460845572 */, 17 },
+ /* 3854 */ { MAD_F(0x076046d6) /* 0.461005055 */, 17 },
+ /* 3855 */ { MAD_F(0x0760ee14) /* 0.461164552 */, 17 },
+
+ /* 3856 */ { MAD_F(0x07619557) /* 0.461324062 */, 17 },
+ /* 3857 */ { MAD_F(0x07623c9d) /* 0.461483586 */, 17 },
+ /* 3858 */ { MAD_F(0x0762e3e6) /* 0.461643124 */, 17 },
+ /* 3859 */ { MAD_F(0x07638b34) /* 0.461802676 */, 17 },
+ /* 3860 */ { MAD_F(0x07643285) /* 0.461962242 */, 17 },
+ /* 3861 */ { MAD_F(0x0764d9d9) /* 0.462121821 */, 17 },
+ /* 3862 */ { MAD_F(0x07658132) /* 0.462281414 */, 17 },
+ /* 3863 */ { MAD_F(0x0766288e) /* 0.462441021 */, 17 },
+ /* 3864 */ { MAD_F(0x0766cfee) /* 0.462600642 */, 17 },
+ /* 3865 */ { MAD_F(0x07677751) /* 0.462760276 */, 17 },
+ /* 3866 */ { MAD_F(0x07681eb9) /* 0.462919924 */, 17 },
+ /* 3867 */ { MAD_F(0x0768c624) /* 0.463079586 */, 17 },
+ /* 3868 */ { MAD_F(0x07696d92) /* 0.463239262 */, 17 },
+ /* 3869 */ { MAD_F(0x076a1505) /* 0.463398951 */, 17 },
+ /* 3870 */ { MAD_F(0x076abc7b) /* 0.463558655 */, 17 },
+ /* 3871 */ { MAD_F(0x076b63f4) /* 0.463718372 */, 17 },
+
+ /* 3872 */ { MAD_F(0x076c0b72) /* 0.463878102 */, 17 },
+ /* 3873 */ { MAD_F(0x076cb2f3) /* 0.464037847 */, 17 },
+ /* 3874 */ { MAD_F(0x076d5a78) /* 0.464197605 */, 17 },
+ /* 3875 */ { MAD_F(0x076e0200) /* 0.464357377 */, 17 },
+ /* 3876 */ { MAD_F(0x076ea98c) /* 0.464517163 */, 17 },
+ /* 3877 */ { MAD_F(0x076f511c) /* 0.464676962 */, 17 },
+ /* 3878 */ { MAD_F(0x076ff8b0) /* 0.464836776 */, 17 },
+ /* 3879 */ { MAD_F(0x0770a047) /* 0.464996603 */, 17 },
+ /* 3880 */ { MAD_F(0x077147e2) /* 0.465156443 */, 17 },
+ /* 3881 */ { MAD_F(0x0771ef80) /* 0.465316298 */, 17 },
+ /* 3882 */ { MAD_F(0x07729723) /* 0.465476166 */, 17 },
+ /* 3883 */ { MAD_F(0x07733ec9) /* 0.465636048 */, 17 },
+ /* 3884 */ { MAD_F(0x0773e672) /* 0.465795943 */, 17 },
+ /* 3885 */ { MAD_F(0x07748e20) /* 0.465955853 */, 17 },
+ /* 3886 */ { MAD_F(0x077535d1) /* 0.466115776 */, 17 },
+ /* 3887 */ { MAD_F(0x0775dd85) /* 0.466275713 */, 17 },
+
+ /* 3888 */ { MAD_F(0x0776853e) /* 0.466435663 */, 17 },
+ /* 3889 */ { MAD_F(0x07772cfa) /* 0.466595627 */, 17 },
+ /* 3890 */ { MAD_F(0x0777d4ba) /* 0.466755605 */, 17 },
+ /* 3891 */ { MAD_F(0x07787c7d) /* 0.466915597 */, 17 },
+ /* 3892 */ { MAD_F(0x07792444) /* 0.467075602 */, 17 },
+ /* 3893 */ { MAD_F(0x0779cc0f) /* 0.467235621 */, 17 },
+ /* 3894 */ { MAD_F(0x077a73dd) /* 0.467395654 */, 17 },
+ /* 3895 */ { MAD_F(0x077b1baf) /* 0.467555701 */, 17 },
+ /* 3896 */ { MAD_F(0x077bc385) /* 0.467715761 */, 17 },
+ /* 3897 */ { MAD_F(0x077c6b5f) /* 0.467875835 */, 17 },
+ /* 3898 */ { MAD_F(0x077d133c) /* 0.468035922 */, 17 },
+ /* 3899 */ { MAD_F(0x077dbb1d) /* 0.468196023 */, 17 },
+ /* 3900 */ { MAD_F(0x077e6301) /* 0.468356138 */, 17 },
+ /* 3901 */ { MAD_F(0x077f0ae9) /* 0.468516267 */, 17 },
+ /* 3902 */ { MAD_F(0x077fb2d5) /* 0.468676409 */, 17 },
+ /* 3903 */ { MAD_F(0x07805ac5) /* 0.468836565 */, 17 },
+
+ /* 3904 */ { MAD_F(0x078102b8) /* 0.468996735 */, 17 },
+ /* 3905 */ { MAD_F(0x0781aaaf) /* 0.469156918 */, 17 },
+ /* 3906 */ { MAD_F(0x078252aa) /* 0.469317115 */, 17 },
+ /* 3907 */ { MAD_F(0x0782faa8) /* 0.469477326 */, 17 },
+ /* 3908 */ { MAD_F(0x0783a2aa) /* 0.469637550 */, 17 },
+ /* 3909 */ { MAD_F(0x07844aaf) /* 0.469797788 */, 17 },
+ /* 3910 */ { MAD_F(0x0784f2b8) /* 0.469958040 */, 17 },
+ /* 3911 */ { MAD_F(0x07859ac5) /* 0.470118305 */, 17 },
+ /* 3912 */ { MAD_F(0x078642d6) /* 0.470278584 */, 17 },
+ /* 3913 */ { MAD_F(0x0786eaea) /* 0.470438877 */, 17 },
+ /* 3914 */ { MAD_F(0x07879302) /* 0.470599183 */, 17 },
+ /* 3915 */ { MAD_F(0x07883b1e) /* 0.470759503 */, 17 },
+ /* 3916 */ { MAD_F(0x0788e33d) /* 0.470919836 */, 17 },
+ /* 3917 */ { MAD_F(0x07898b60) /* 0.471080184 */, 17 },
+ /* 3918 */ { MAD_F(0x078a3386) /* 0.471240545 */, 17 },
+ /* 3919 */ { MAD_F(0x078adbb0) /* 0.471400919 */, 17 },
+
+ /* 3920 */ { MAD_F(0x078b83de) /* 0.471561307 */, 17 },
+ /* 3921 */ { MAD_F(0x078c2c10) /* 0.471721709 */, 17 },
+ /* 3922 */ { MAD_F(0x078cd445) /* 0.471882125 */, 17 },
+ /* 3923 */ { MAD_F(0x078d7c7e) /* 0.472042554 */, 17 },
+ /* 3924 */ { MAD_F(0x078e24ba) /* 0.472202996 */, 17 },
+ /* 3925 */ { MAD_F(0x078eccfb) /* 0.472363453 */, 17 },
+ /* 3926 */ { MAD_F(0x078f753e) /* 0.472523923 */, 17 },
+ /* 3927 */ { MAD_F(0x07901d86) /* 0.472684406 */, 17 },
+ /* 3928 */ { MAD_F(0x0790c5d1) /* 0.472844904 */, 17 },
+ /* 3929 */ { MAD_F(0x07916e20) /* 0.473005414 */, 17 },
+ /* 3930 */ { MAD_F(0x07921672) /* 0.473165939 */, 17 },
+ /* 3931 */ { MAD_F(0x0792bec8) /* 0.473326477 */, 17 },
+ /* 3932 */ { MAD_F(0x07936722) /* 0.473487029 */, 17 },
+ /* 3933 */ { MAD_F(0x07940f80) /* 0.473647594 */, 17 },
+ /* 3934 */ { MAD_F(0x0794b7e1) /* 0.473808173 */, 17 },
+ /* 3935 */ { MAD_F(0x07956045) /* 0.473968765 */, 17 },
+
+ /* 3936 */ { MAD_F(0x079608ae) /* 0.474129372 */, 17 },
+ /* 3937 */ { MAD_F(0x0796b11a) /* 0.474289991 */, 17 },
+ /* 3938 */ { MAD_F(0x0797598a) /* 0.474450625 */, 17 },
+ /* 3939 */ { MAD_F(0x079801fd) /* 0.474611272 */, 17 },
+ /* 3940 */ { MAD_F(0x0798aa74) /* 0.474771932 */, 17 },
+ /* 3941 */ { MAD_F(0x079952ee) /* 0.474932606 */, 17 },
+ /* 3942 */ { MAD_F(0x0799fb6d) /* 0.475093294 */, 17 },
+ /* 3943 */ { MAD_F(0x079aa3ef) /* 0.475253995 */, 17 },
+ /* 3944 */ { MAD_F(0x079b4c74) /* 0.475414710 */, 17 },
+ /* 3945 */ { MAD_F(0x079bf4fd) /* 0.475575439 */, 17 },
+ /* 3946 */ { MAD_F(0x079c9d8a) /* 0.475736181 */, 17 },
+ /* 3947 */ { MAD_F(0x079d461b) /* 0.475896936 */, 17 },
+ /* 3948 */ { MAD_F(0x079deeaf) /* 0.476057705 */, 17 },
+ /* 3949 */ { MAD_F(0x079e9747) /* 0.476218488 */, 17 },
+ /* 3950 */ { MAD_F(0x079f3fe2) /* 0.476379285 */, 17 },
+ /* 3951 */ { MAD_F(0x079fe881) /* 0.476540095 */, 17 },
+
+ /* 3952 */ { MAD_F(0x07a09124) /* 0.476700918 */, 17 },
+ /* 3953 */ { MAD_F(0x07a139ca) /* 0.476861755 */, 17 },
+ /* 3954 */ { MAD_F(0x07a1e274) /* 0.477022606 */, 17 },
+ /* 3955 */ { MAD_F(0x07a28b22) /* 0.477183470 */, 17 },
+ /* 3956 */ { MAD_F(0x07a333d3) /* 0.477344348 */, 17 },
+ /* 3957 */ { MAD_F(0x07a3dc88) /* 0.477505239 */, 17 },
+ /* 3958 */ { MAD_F(0x07a48541) /* 0.477666144 */, 17 },
+ /* 3959 */ { MAD_F(0x07a52dfd) /* 0.477827062 */, 17 },
+ /* 3960 */ { MAD_F(0x07a5d6bd) /* 0.477987994 */, 17 },
+ /* 3961 */ { MAD_F(0x07a67f80) /* 0.478148940 */, 17 },
+ /* 3962 */ { MAD_F(0x07a72847) /* 0.478309899 */, 17 },
+ /* 3963 */ { MAD_F(0x07a7d112) /* 0.478470871 */, 17 },
+ /* 3964 */ { MAD_F(0x07a879e1) /* 0.478631857 */, 17 },
+ /* 3965 */ { MAD_F(0x07a922b3) /* 0.478792857 */, 17 },
+ /* 3966 */ { MAD_F(0x07a9cb88) /* 0.478953870 */, 17 },
+ /* 3967 */ { MAD_F(0x07aa7462) /* 0.479114897 */, 17 },
+
+ /* 3968 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 17 },
+ /* 3969 */ { MAD_F(0x07abc61f) /* 0.479436991 */, 17 },
+ /* 3970 */ { MAD_F(0x07ac6f03) /* 0.479598058 */, 17 },
+ /* 3971 */ { MAD_F(0x07ad17eb) /* 0.479759139 */, 17 },
+ /* 3972 */ { MAD_F(0x07adc0d6) /* 0.479920233 */, 17 },
+ /* 3973 */ { MAD_F(0x07ae69c6) /* 0.480081341 */, 17 },
+ /* 3974 */ { MAD_F(0x07af12b8) /* 0.480242463 */, 17 },
+ /* 3975 */ { MAD_F(0x07afbbaf) /* 0.480403598 */, 17 },
+ /* 3976 */ { MAD_F(0x07b064a8) /* 0.480564746 */, 17 },
+ /* 3977 */ { MAD_F(0x07b10da6) /* 0.480725908 */, 17 },
+ /* 3978 */ { MAD_F(0x07b1b6a7) /* 0.480887083 */, 17 },
+ /* 3979 */ { MAD_F(0x07b25fac) /* 0.481048272 */, 17 },
+ /* 3980 */ { MAD_F(0x07b308b5) /* 0.481209475 */, 17 },
+ /* 3981 */ { MAD_F(0x07b3b1c1) /* 0.481370691 */, 17 },
+ /* 3982 */ { MAD_F(0x07b45ad0) /* 0.481531920 */, 17 },
+ /* 3983 */ { MAD_F(0x07b503e4) /* 0.481693163 */, 17 },
+
+ /* 3984 */ { MAD_F(0x07b5acfb) /* 0.481854420 */, 17 },
+ /* 3985 */ { MAD_F(0x07b65615) /* 0.482015690 */, 17 },
+ /* 3986 */ { MAD_F(0x07b6ff33) /* 0.482176973 */, 17 },
+ /* 3987 */ { MAD_F(0x07b7a855) /* 0.482338270 */, 17 },
+ /* 3988 */ { MAD_F(0x07b8517b) /* 0.482499580 */, 17 },
+ /* 3989 */ { MAD_F(0x07b8faa4) /* 0.482660904 */, 17 },
+ /* 3990 */ { MAD_F(0x07b9a3d0) /* 0.482822242 */, 17 },
+ /* 3991 */ { MAD_F(0x07ba4d01) /* 0.482983592 */, 17 },
+ /* 3992 */ { MAD_F(0x07baf635) /* 0.483144957 */, 17 },
+ /* 3993 */ { MAD_F(0x07bb9f6c) /* 0.483306335 */, 17 },
+ /* 3994 */ { MAD_F(0x07bc48a7) /* 0.483467726 */, 17 },
+ /* 3995 */ { MAD_F(0x07bcf1e6) /* 0.483629131 */, 17 },
+ /* 3996 */ { MAD_F(0x07bd9b28) /* 0.483790549 */, 17 },
+ /* 3997 */ { MAD_F(0x07be446e) /* 0.483951980 */, 17 },
+ /* 3998 */ { MAD_F(0x07beedb8) /* 0.484113426 */, 17 },
+ /* 3999 */ { MAD_F(0x07bf9705) /* 0.484274884 */, 17 },
+
+ /* 4000 */ { MAD_F(0x07c04056) /* 0.484436356 */, 17 },
+ /* 4001 */ { MAD_F(0x07c0e9aa) /* 0.484597842 */, 17 },
+ /* 4002 */ { MAD_F(0x07c19302) /* 0.484759341 */, 17 },
+ /* 4003 */ { MAD_F(0x07c23c5e) /* 0.484920853 */, 17 },
+ /* 4004 */ { MAD_F(0x07c2e5bd) /* 0.485082379 */, 17 },
+ /* 4005 */ { MAD_F(0x07c38f20) /* 0.485243918 */, 17 },
+ /* 4006 */ { MAD_F(0x07c43887) /* 0.485405471 */, 17 },
+ /* 4007 */ { MAD_F(0x07c4e1f1) /* 0.485567037 */, 17 },
+ /* 4008 */ { MAD_F(0x07c58b5f) /* 0.485728617 */, 17 },
+ /* 4009 */ { MAD_F(0x07c634d0) /* 0.485890210 */, 17 },
+ /* 4010 */ { MAD_F(0x07c6de45) /* 0.486051817 */, 17 },
+ /* 4011 */ { MAD_F(0x07c787bd) /* 0.486213436 */, 17 },
+ /* 4012 */ { MAD_F(0x07c83139) /* 0.486375070 */, 17 },
+ /* 4013 */ { MAD_F(0x07c8dab9) /* 0.486536717 */, 17 },
+ /* 4014 */ { MAD_F(0x07c9843c) /* 0.486698377 */, 17 },
+ /* 4015 */ { MAD_F(0x07ca2dc3) /* 0.486860051 */, 17 },
+
+ /* 4016 */ { MAD_F(0x07cad74e) /* 0.487021738 */, 17 },
+ /* 4017 */ { MAD_F(0x07cb80dc) /* 0.487183438 */, 17 },
+ /* 4018 */ { MAD_F(0x07cc2a6e) /* 0.487345152 */, 17 },
+ /* 4019 */ { MAD_F(0x07ccd403) /* 0.487506879 */, 17 },
+ /* 4020 */ { MAD_F(0x07cd7d9c) /* 0.487668620 */, 17 },
+ /* 4021 */ { MAD_F(0x07ce2739) /* 0.487830374 */, 17 },
+ /* 4022 */ { MAD_F(0x07ced0d9) /* 0.487992142 */, 17 },
+ /* 4023 */ { MAD_F(0x07cf7a7d) /* 0.488153923 */, 17 },
+ /* 4024 */ { MAD_F(0x07d02424) /* 0.488315717 */, 17 },
+ /* 4025 */ { MAD_F(0x07d0cdcf) /* 0.488477525 */, 17 },
+ /* 4026 */ { MAD_F(0x07d1777e) /* 0.488639346 */, 17 },
+ /* 4027 */ { MAD_F(0x07d22130) /* 0.488801181 */, 17 },
+ /* 4028 */ { MAD_F(0x07d2cae5) /* 0.488963029 */, 17 },
+ /* 4029 */ { MAD_F(0x07d3749f) /* 0.489124890 */, 17 },
+ /* 4030 */ { MAD_F(0x07d41e5c) /* 0.489286765 */, 17 },
+ /* 4031 */ { MAD_F(0x07d4c81c) /* 0.489448653 */, 17 },
+
+ /* 4032 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 17 },
+ /* 4033 */ { MAD_F(0x07d61ba8) /* 0.489772470 */, 17 },
+ /* 4034 */ { MAD_F(0x07d6c573) /* 0.489934398 */, 17 },
+ /* 4035 */ { MAD_F(0x07d76f42) /* 0.490096340 */, 17 },
+ /* 4036 */ { MAD_F(0x07d81915) /* 0.490258295 */, 17 },
+ /* 4037 */ { MAD_F(0x07d8c2eb) /* 0.490420263 */, 17 },
+ /* 4038 */ { MAD_F(0x07d96cc4) /* 0.490582245 */, 17 },
+ /* 4039 */ { MAD_F(0x07da16a2) /* 0.490744240 */, 17 },
+ /* 4040 */ { MAD_F(0x07dac083) /* 0.490906249 */, 17 },
+ /* 4041 */ { MAD_F(0x07db6a67) /* 0.491068271 */, 17 },
+ /* 4042 */ { MAD_F(0x07dc144f) /* 0.491230306 */, 17 },
+ /* 4043 */ { MAD_F(0x07dcbe3b) /* 0.491392355 */, 17 },
+ /* 4044 */ { MAD_F(0x07dd682a) /* 0.491554417 */, 17 },
+ /* 4045 */ { MAD_F(0x07de121d) /* 0.491716492 */, 17 },
+ /* 4046 */ { MAD_F(0x07debc13) /* 0.491878581 */, 17 },
+ /* 4047 */ { MAD_F(0x07df660d) /* 0.492040683 */, 17 },
+
+ /* 4048 */ { MAD_F(0x07e0100a) /* 0.492202799 */, 17 },
+ /* 4049 */ { MAD_F(0x07e0ba0c) /* 0.492364928 */, 17 },
+ /* 4050 */ { MAD_F(0x07e16410) /* 0.492527070 */, 17 },
+ /* 4051 */ { MAD_F(0x07e20e19) /* 0.492689225 */, 17 },
+ /* 4052 */ { MAD_F(0x07e2b824) /* 0.492851394 */, 17 },
+ /* 4053 */ { MAD_F(0x07e36234) /* 0.493013576 */, 17 },
+ /* 4054 */ { MAD_F(0x07e40c47) /* 0.493175772 */, 17 },
+ /* 4055 */ { MAD_F(0x07e4b65e) /* 0.493337981 */, 17 },
+ /* 4056 */ { MAD_F(0x07e56078) /* 0.493500203 */, 17 },
+ /* 4057 */ { MAD_F(0x07e60a95) /* 0.493662438 */, 17 },
+ /* 4058 */ { MAD_F(0x07e6b4b7) /* 0.493824687 */, 17 },
+ /* 4059 */ { MAD_F(0x07e75edc) /* 0.493986949 */, 17 },
+ /* 4060 */ { MAD_F(0x07e80904) /* 0.494149225 */, 17 },
+ /* 4061 */ { MAD_F(0x07e8b330) /* 0.494311514 */, 17 },
+ /* 4062 */ { MAD_F(0x07e95d60) /* 0.494473816 */, 17 },
+ /* 4063 */ { MAD_F(0x07ea0793) /* 0.494636131 */, 17 },
+
+ /* 4064 */ { MAD_F(0x07eab1ca) /* 0.494798460 */, 17 },
+ /* 4065 */ { MAD_F(0x07eb5c04) /* 0.494960802 */, 17 },
+ /* 4066 */ { MAD_F(0x07ec0642) /* 0.495123158 */, 17 },
+ /* 4067 */ { MAD_F(0x07ecb084) /* 0.495285526 */, 17 },
+ /* 4068 */ { MAD_F(0x07ed5ac9) /* 0.495447908 */, 17 },
+ /* 4069 */ { MAD_F(0x07ee0512) /* 0.495610304 */, 17 },
+ /* 4070 */ { MAD_F(0x07eeaf5e) /* 0.495772712 */, 17 },
+ /* 4071 */ { MAD_F(0x07ef59ae) /* 0.495935134 */, 17 },
+ /* 4072 */ { MAD_F(0x07f00401) /* 0.496097570 */, 17 },
+ /* 4073 */ { MAD_F(0x07f0ae58) /* 0.496260018 */, 17 },
+ /* 4074 */ { MAD_F(0x07f158b3) /* 0.496422480 */, 17 },
+ /* 4075 */ { MAD_F(0x07f20311) /* 0.496584955 */, 17 },
+ /* 4076 */ { MAD_F(0x07f2ad72) /* 0.496747444 */, 17 },
+ /* 4077 */ { MAD_F(0x07f357d8) /* 0.496909945 */, 17 },
+ /* 4078 */ { MAD_F(0x07f40240) /* 0.497072460 */, 17 },
+ /* 4079 */ { MAD_F(0x07f4acad) /* 0.497234989 */, 17 },
+
+ /* 4080 */ { MAD_F(0x07f5571d) /* 0.497397530 */, 17 },
+ /* 4081 */ { MAD_F(0x07f60190) /* 0.497560085 */, 17 },
+ /* 4082 */ { MAD_F(0x07f6ac07) /* 0.497722653 */, 17 },
+ /* 4083 */ { MAD_F(0x07f75682) /* 0.497885235 */, 17 },
+ /* 4084 */ { MAD_F(0x07f80100) /* 0.498047829 */, 17 },
+ /* 4085 */ { MAD_F(0x07f8ab82) /* 0.498210437 */, 17 },
+ /* 4086 */ { MAD_F(0x07f95607) /* 0.498373058 */, 17 },
+ /* 4087 */ { MAD_F(0x07fa0090) /* 0.498535693 */, 17 },
+ /* 4088 */ { MAD_F(0x07faab1c) /* 0.498698341 */, 17 },
+ /* 4089 */ { MAD_F(0x07fb55ac) /* 0.498861002 */, 17 },
+ /* 4090 */ { MAD_F(0x07fc0040) /* 0.499023676 */, 17 },
+ /* 4091 */ { MAD_F(0x07fcaad7) /* 0.499186364 */, 17 },
+ /* 4092 */ { MAD_F(0x07fd5572) /* 0.499349064 */, 17 },
+ /* 4093 */ { MAD_F(0x07fe0010) /* 0.499511778 */, 17 },
+ /* 4094 */ { MAD_F(0x07feaab2) /* 0.499674506 */, 17 },
+ /* 4095 */ { MAD_F(0x07ff5557) /* 0.499837246 */, 17 },
+
+ /* 4096 */ { MAD_F(0x04000000) /* 0.250000000 */, 18 },
+ /* 4097 */ { MAD_F(0x04005556) /* 0.250081384 */, 18 },
+ /* 4098 */ { MAD_F(0x0400aaae) /* 0.250162774 */, 18 },
+ /* 4099 */ { MAD_F(0x04010008) /* 0.250244170 */, 18 },
+ /* 4100 */ { MAD_F(0x04015563) /* 0.250325574 */, 18 },
+ /* 4101 */ { MAD_F(0x0401aac1) /* 0.250406984 */, 18 },
+ /* 4102 */ { MAD_F(0x04020020) /* 0.250488400 */, 18 },
+ /* 4103 */ { MAD_F(0x04025581) /* 0.250569824 */, 18 },
+ /* 4104 */ { MAD_F(0x0402aae3) /* 0.250651254 */, 18 },
+ /* 4105 */ { MAD_F(0x04030048) /* 0.250732690 */, 18 },
+ /* 4106 */ { MAD_F(0x040355ae) /* 0.250814133 */, 18 },
+ /* 4107 */ { MAD_F(0x0403ab16) /* 0.250895583 */, 18 },
+ /* 4108 */ { MAD_F(0x04040080) /* 0.250977039 */, 18 },
+ /* 4109 */ { MAD_F(0x040455eb) /* 0.251058502 */, 18 },
+ /* 4110 */ { MAD_F(0x0404ab59) /* 0.251139971 */, 18 },
+ /* 4111 */ { MAD_F(0x040500c8) /* 0.251221448 */, 18 },
+
+ /* 4112 */ { MAD_F(0x04055638) /* 0.251302930 */, 18 },
+ /* 4113 */ { MAD_F(0x0405abab) /* 0.251384420 */, 18 },
+ /* 4114 */ { MAD_F(0x0406011f) /* 0.251465916 */, 18 },
+ /* 4115 */ { MAD_F(0x04065696) /* 0.251547418 */, 18 },
+ /* 4116 */ { MAD_F(0x0406ac0e) /* 0.251628927 */, 18 },
+ /* 4117 */ { MAD_F(0x04070187) /* 0.251710443 */, 18 },
+ /* 4118 */ { MAD_F(0x04075703) /* 0.251791965 */, 18 },
+ /* 4119 */ { MAD_F(0x0407ac80) /* 0.251873494 */, 18 },
+ /* 4120 */ { MAD_F(0x040801ff) /* 0.251955030 */, 18 },
+ /* 4121 */ { MAD_F(0x04085780) /* 0.252036572 */, 18 },
+ /* 4122 */ { MAD_F(0x0408ad02) /* 0.252118121 */, 18 },
+ /* 4123 */ { MAD_F(0x04090287) /* 0.252199676 */, 18 },
+ /* 4124 */ { MAD_F(0x0409580d) /* 0.252281238 */, 18 },
+ /* 4125 */ { MAD_F(0x0409ad95) /* 0.252362807 */, 18 },
+ /* 4126 */ { MAD_F(0x040a031e) /* 0.252444382 */, 18 },
+ /* 4127 */ { MAD_F(0x040a58aa) /* 0.252525963 */, 18 },
+
+ /* 4128 */ { MAD_F(0x040aae37) /* 0.252607552 */, 18 },
+ /* 4129 */ { MAD_F(0x040b03c6) /* 0.252689147 */, 18 },
+ /* 4130 */ { MAD_F(0x040b5957) /* 0.252770748 */, 18 },
+ /* 4131 */ { MAD_F(0x040baee9) /* 0.252852356 */, 18 },
+ /* 4132 */ { MAD_F(0x040c047e) /* 0.252933971 */, 18 },
+ /* 4133 */ { MAD_F(0x040c5a14) /* 0.253015592 */, 18 },
+ /* 4134 */ { MAD_F(0x040cafab) /* 0.253097220 */, 18 },
+ /* 4135 */ { MAD_F(0x040d0545) /* 0.253178854 */, 18 },
+ /* 4136 */ { MAD_F(0x040d5ae0) /* 0.253260495 */, 18 },
+ /* 4137 */ { MAD_F(0x040db07d) /* 0.253342143 */, 18 },
+ /* 4138 */ { MAD_F(0x040e061c) /* 0.253423797 */, 18 },
+ /* 4139 */ { MAD_F(0x040e5bbd) /* 0.253505457 */, 18 },
+ /* 4140 */ { MAD_F(0x040eb15f) /* 0.253587125 */, 18 },
+ /* 4141 */ { MAD_F(0x040f0703) /* 0.253668799 */, 18 },
+ /* 4142 */ { MAD_F(0x040f5ca9) /* 0.253750479 */, 18 },
+ /* 4143 */ { MAD_F(0x040fb251) /* 0.253832166 */, 18 },
+
+ /* 4144 */ { MAD_F(0x041007fa) /* 0.253913860 */, 18 },
+ /* 4145 */ { MAD_F(0x04105da6) /* 0.253995560 */, 18 },
+ /* 4146 */ { MAD_F(0x0410b353) /* 0.254077266 */, 18 },
+ /* 4147 */ { MAD_F(0x04110901) /* 0.254158980 */, 18 },
+ /* 4148 */ { MAD_F(0x04115eb2) /* 0.254240700 */, 18 },
+ /* 4149 */ { MAD_F(0x0411b464) /* 0.254322426 */, 18 },
+ /* 4150 */ { MAD_F(0x04120a18) /* 0.254404159 */, 18 },
+ /* 4151 */ { MAD_F(0x04125fce) /* 0.254485899 */, 18 },
+ /* 4152 */ { MAD_F(0x0412b586) /* 0.254567645 */, 18 },
+ /* 4153 */ { MAD_F(0x04130b3f) /* 0.254649397 */, 18 },
+ /* 4154 */ { MAD_F(0x041360fa) /* 0.254731157 */, 18 },
+ /* 4155 */ { MAD_F(0x0413b6b7) /* 0.254812922 */, 18 },
+ /* 4156 */ { MAD_F(0x04140c75) /* 0.254894695 */, 18 },
+ /* 4157 */ { MAD_F(0x04146236) /* 0.254976474 */, 18 },
+ /* 4158 */ { MAD_F(0x0414b7f8) /* 0.255058259 */, 18 },
+ /* 4159 */ { MAD_F(0x04150dbc) /* 0.255140051 */, 18 },
+
+ /* 4160 */ { MAD_F(0x04156381) /* 0.255221850 */, 18 },
+ /* 4161 */ { MAD_F(0x0415b949) /* 0.255303655 */, 18 },
+ /* 4162 */ { MAD_F(0x04160f12) /* 0.255385467 */, 18 },
+ /* 4163 */ { MAD_F(0x041664dd) /* 0.255467285 */, 18 },
+ /* 4164 */ { MAD_F(0x0416baaa) /* 0.255549110 */, 18 },
+ /* 4165 */ { MAD_F(0x04171078) /* 0.255630941 */, 18 },
+ /* 4166 */ { MAD_F(0x04176648) /* 0.255712779 */, 18 },
+ /* 4167 */ { MAD_F(0x0417bc1a) /* 0.255794624 */, 18 },
+ /* 4168 */ { MAD_F(0x041811ee) /* 0.255876475 */, 18 },
+ /* 4169 */ { MAD_F(0x041867c3) /* 0.255958332 */, 18 },
+ /* 4170 */ { MAD_F(0x0418bd9b) /* 0.256040196 */, 18 },
+ /* 4171 */ { MAD_F(0x04191374) /* 0.256122067 */, 18 },
+ /* 4172 */ { MAD_F(0x0419694e) /* 0.256203944 */, 18 },
+ /* 4173 */ { MAD_F(0x0419bf2b) /* 0.256285828 */, 18 },
+ /* 4174 */ { MAD_F(0x041a1509) /* 0.256367718 */, 18 },
+ /* 4175 */ { MAD_F(0x041a6ae9) /* 0.256449615 */, 18 },
+
+ /* 4176 */ { MAD_F(0x041ac0cb) /* 0.256531518 */, 18 },
+ /* 4177 */ { MAD_F(0x041b16ae) /* 0.256613428 */, 18 },
+ /* 4178 */ { MAD_F(0x041b6c94) /* 0.256695344 */, 18 },
+ /* 4179 */ { MAD_F(0x041bc27b) /* 0.256777267 */, 18 },
+ /* 4180 */ { MAD_F(0x041c1863) /* 0.256859197 */, 18 },
+ /* 4181 */ { MAD_F(0x041c6e4e) /* 0.256941133 */, 18 },
+ /* 4182 */ { MAD_F(0x041cc43a) /* 0.257023076 */, 18 },
+ /* 4183 */ { MAD_F(0x041d1a28) /* 0.257105025 */, 18 },
+ /* 4184 */ { MAD_F(0x041d7018) /* 0.257186980 */, 18 },
+ /* 4185 */ { MAD_F(0x041dc60a) /* 0.257268942 */, 18 },
+ /* 4186 */ { MAD_F(0x041e1bfd) /* 0.257350911 */, 18 },
+ /* 4187 */ { MAD_F(0x041e71f2) /* 0.257432886 */, 18 },
+ /* 4188 */ { MAD_F(0x041ec7e9) /* 0.257514868 */, 18 },
+ /* 4189 */ { MAD_F(0x041f1de1) /* 0.257596856 */, 18 },
+ /* 4190 */ { MAD_F(0x041f73dc) /* 0.257678851 */, 18 },
+ /* 4191 */ { MAD_F(0x041fc9d8) /* 0.257760852 */, 18 },
+
+ /* 4192 */ { MAD_F(0x04201fd5) /* 0.257842860 */, 18 },
+ /* 4193 */ { MAD_F(0x042075d5) /* 0.257924875 */, 18 },
+ /* 4194 */ { MAD_F(0x0420cbd6) /* 0.258006895 */, 18 },
+ /* 4195 */ { MAD_F(0x042121d9) /* 0.258088923 */, 18 },
+ /* 4196 */ { MAD_F(0x042177de) /* 0.258170957 */, 18 },
+ /* 4197 */ { MAD_F(0x0421cde5) /* 0.258252997 */, 18 },
+ /* 4198 */ { MAD_F(0x042223ed) /* 0.258335044 */, 18 },
+ /* 4199 */ { MAD_F(0x042279f7) /* 0.258417097 */, 18 },
+ /* 4200 */ { MAD_F(0x0422d003) /* 0.258499157 */, 18 },
+ /* 4201 */ { MAD_F(0x04232611) /* 0.258581224 */, 18 },
+ /* 4202 */ { MAD_F(0x04237c20) /* 0.258663297 */, 18 },
+ /* 4203 */ { MAD_F(0x0423d231) /* 0.258745376 */, 18 },
+ /* 4204 */ { MAD_F(0x04242844) /* 0.258827462 */, 18 },
+ /* 4205 */ { MAD_F(0x04247e58) /* 0.258909555 */, 18 },
+ /* 4206 */ { MAD_F(0x0424d46e) /* 0.258991654 */, 18 },
+ /* 4207 */ { MAD_F(0x04252a87) /* 0.259073760 */, 18 },
+
+ /* 4208 */ { MAD_F(0x042580a0) /* 0.259155872 */, 18 },
+ /* 4209 */ { MAD_F(0x0425d6bc) /* 0.259237990 */, 18 },
+ /* 4210 */ { MAD_F(0x04262cd9) /* 0.259320115 */, 18 },
+ /* 4211 */ { MAD_F(0x042682f8) /* 0.259402247 */, 18 },
+ /* 4212 */ { MAD_F(0x0426d919) /* 0.259484385 */, 18 },
+ /* 4213 */ { MAD_F(0x04272f3b) /* 0.259566529 */, 18 },
+ /* 4214 */ { MAD_F(0x04278560) /* 0.259648680 */, 18 },
+ /* 4215 */ { MAD_F(0x0427db86) /* 0.259730838 */, 18 },
+ /* 4216 */ { MAD_F(0x042831ad) /* 0.259813002 */, 18 },
+ /* 4217 */ { MAD_F(0x042887d7) /* 0.259895173 */, 18 },
+ /* 4218 */ { MAD_F(0x0428de02) /* 0.259977350 */, 18 },
+ /* 4219 */ { MAD_F(0x0429342f) /* 0.260059533 */, 18 },
+ /* 4220 */ { MAD_F(0x04298a5e) /* 0.260141723 */, 18 },
+ /* 4221 */ { MAD_F(0x0429e08e) /* 0.260223920 */, 18 },
+ /* 4222 */ { MAD_F(0x042a36c0) /* 0.260306123 */, 18 },
+ /* 4223 */ { MAD_F(0x042a8cf4) /* 0.260388332 */, 18 },
+
+ /* 4224 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 18 },
+ /* 4225 */ { MAD_F(0x042b3962) /* 0.260552771 */, 18 },
+ /* 4226 */ { MAD_F(0x042b8f9b) /* 0.260635000 */, 18 },
+ /* 4227 */ { MAD_F(0x042be5d6) /* 0.260717235 */, 18 },
+ /* 4228 */ { MAD_F(0x042c3c12) /* 0.260799477 */, 18 },
+ /* 4229 */ { MAD_F(0x042c9251) /* 0.260881725 */, 18 },
+ /* 4230 */ { MAD_F(0x042ce891) /* 0.260963980 */, 18 },
+ /* 4231 */ { MAD_F(0x042d3ed3) /* 0.261046242 */, 18 },
+ /* 4232 */ { MAD_F(0x042d9516) /* 0.261128510 */, 18 },
+ /* 4233 */ { MAD_F(0x042deb5c) /* 0.261210784 */, 18 },
+ /* 4234 */ { MAD_F(0x042e41a3) /* 0.261293065 */, 18 },
+ /* 4235 */ { MAD_F(0x042e97ec) /* 0.261375352 */, 18 },
+ /* 4236 */ { MAD_F(0x042eee36) /* 0.261457646 */, 18 },
+ /* 4237 */ { MAD_F(0x042f4482) /* 0.261539946 */, 18 },
+ /* 4238 */ { MAD_F(0x042f9ad1) /* 0.261622253 */, 18 },
+ /* 4239 */ { MAD_F(0x042ff120) /* 0.261704566 */, 18 },
+
+ /* 4240 */ { MAD_F(0x04304772) /* 0.261786886 */, 18 },
+ /* 4241 */ { MAD_F(0x04309dc5) /* 0.261869212 */, 18 },
+ /* 4242 */ { MAD_F(0x0430f41a) /* 0.261951545 */, 18 },
+ /* 4243 */ { MAD_F(0x04314a71) /* 0.262033884 */, 18 },
+ /* 4244 */ { MAD_F(0x0431a0c9) /* 0.262116229 */, 18 },
+ /* 4245 */ { MAD_F(0x0431f723) /* 0.262198581 */, 18 },
+ /* 4246 */ { MAD_F(0x04324d7f) /* 0.262280940 */, 18 },
+ /* 4247 */ { MAD_F(0x0432a3dd) /* 0.262363305 */, 18 },
+ /* 4248 */ { MAD_F(0x0432fa3d) /* 0.262445676 */, 18 },
+ /* 4249 */ { MAD_F(0x0433509e) /* 0.262528054 */, 18 },
+ /* 4250 */ { MAD_F(0x0433a701) /* 0.262610438 */, 18 },
+ /* 4251 */ { MAD_F(0x0433fd65) /* 0.262692829 */, 18 },
+ /* 4252 */ { MAD_F(0x043453cc) /* 0.262775227 */, 18 },
+ /* 4253 */ { MAD_F(0x0434aa34) /* 0.262857630 */, 18 },
+ /* 4254 */ { MAD_F(0x0435009d) /* 0.262940040 */, 18 },
+ /* 4255 */ { MAD_F(0x04355709) /* 0.263022457 */, 18 },
+
+ /* 4256 */ { MAD_F(0x0435ad76) /* 0.263104880 */, 18 },
+ /* 4257 */ { MAD_F(0x043603e5) /* 0.263187310 */, 18 },
+ /* 4258 */ { MAD_F(0x04365a56) /* 0.263269746 */, 18 },
+ /* 4259 */ { MAD_F(0x0436b0c9) /* 0.263352188 */, 18 },
+ /* 4260 */ { MAD_F(0x0437073d) /* 0.263434637 */, 18 },
+ /* 4261 */ { MAD_F(0x04375db3) /* 0.263517093 */, 18 },
+ /* 4262 */ { MAD_F(0x0437b42a) /* 0.263599554 */, 18 },
+ /* 4263 */ { MAD_F(0x04380aa4) /* 0.263682023 */, 18 },
+ /* 4264 */ { MAD_F(0x0438611f) /* 0.263764497 */, 18 },
+ /* 4265 */ { MAD_F(0x0438b79c) /* 0.263846979 */, 18 },
+ /* 4266 */ { MAD_F(0x04390e1a) /* 0.263929466 */, 18 },
+ /* 4267 */ { MAD_F(0x0439649b) /* 0.264011960 */, 18 },
+ /* 4268 */ { MAD_F(0x0439bb1d) /* 0.264094461 */, 18 },
+ /* 4269 */ { MAD_F(0x043a11a1) /* 0.264176968 */, 18 },
+ /* 4270 */ { MAD_F(0x043a6826) /* 0.264259481 */, 18 },
+ /* 4271 */ { MAD_F(0x043abead) /* 0.264342001 */, 18 },
+
+ /* 4272 */ { MAD_F(0x043b1536) /* 0.264424527 */, 18 },
+ /* 4273 */ { MAD_F(0x043b6bc1) /* 0.264507060 */, 18 },
+ /* 4274 */ { MAD_F(0x043bc24d) /* 0.264589599 */, 18 },
+ /* 4275 */ { MAD_F(0x043c18dc) /* 0.264672145 */, 18 },
+ /* 4276 */ { MAD_F(0x043c6f6c) /* 0.264754697 */, 18 },
+ /* 4277 */ { MAD_F(0x043cc5fd) /* 0.264837255 */, 18 },
+ /* 4278 */ { MAD_F(0x043d1c91) /* 0.264919820 */, 18 },
+ /* 4279 */ { MAD_F(0x043d7326) /* 0.265002392 */, 18 },
+ /* 4280 */ { MAD_F(0x043dc9bc) /* 0.265084969 */, 18 },
+ /* 4281 */ { MAD_F(0x043e2055) /* 0.265167554 */, 18 },
+ /* 4282 */ { MAD_F(0x043e76ef) /* 0.265250144 */, 18 },
+ /* 4283 */ { MAD_F(0x043ecd8b) /* 0.265332741 */, 18 },
+ /* 4284 */ { MAD_F(0x043f2429) /* 0.265415345 */, 18 },
+ /* 4285 */ { MAD_F(0x043f7ac8) /* 0.265497955 */, 18 },
+ /* 4286 */ { MAD_F(0x043fd169) /* 0.265580571 */, 18 },
+ /* 4287 */ { MAD_F(0x0440280c) /* 0.265663194 */, 18 },
+
+ /* 4288 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 18 },
+ /* 4289 */ { MAD_F(0x0440d557) /* 0.265828459 */, 18 },
+ /* 4290 */ { MAD_F(0x04412bff) /* 0.265911101 */, 18 },
+ /* 4291 */ { MAD_F(0x044182a9) /* 0.265993749 */, 18 },
+ /* 4292 */ { MAD_F(0x0441d955) /* 0.266076404 */, 18 },
+ /* 4293 */ { MAD_F(0x04423002) /* 0.266159065 */, 18 },
+ /* 4294 */ { MAD_F(0x044286b1) /* 0.266241733 */, 18 },
+ /* 4295 */ { MAD_F(0x0442dd61) /* 0.266324407 */, 18 },
+ /* 4296 */ { MAD_F(0x04433414) /* 0.266407088 */, 18 },
+ /* 4297 */ { MAD_F(0x04438ac8) /* 0.266489775 */, 18 },
+ /* 4298 */ { MAD_F(0x0443e17e) /* 0.266572468 */, 18 },
+ /* 4299 */ { MAD_F(0x04443835) /* 0.266655168 */, 18 },
+ /* 4300 */ { MAD_F(0x04448eef) /* 0.266737874 */, 18 },
+ /* 4301 */ { MAD_F(0x0444e5aa) /* 0.266820587 */, 18 },
+ /* 4302 */ { MAD_F(0x04453c66) /* 0.266903306 */, 18 },
+ /* 4303 */ { MAD_F(0x04459325) /* 0.266986031 */, 18 },
+
+ /* 4304 */ { MAD_F(0x0445e9e5) /* 0.267068763 */, 18 },
+ /* 4305 */ { MAD_F(0x044640a7) /* 0.267151501 */, 18 },
+ /* 4306 */ { MAD_F(0x0446976a) /* 0.267234246 */, 18 },
+ /* 4307 */ { MAD_F(0x0446ee30) /* 0.267316997 */, 18 },
+ /* 4308 */ { MAD_F(0x044744f7) /* 0.267399755 */, 18 },
+ /* 4309 */ { MAD_F(0x04479bc0) /* 0.267482518 */, 18 },
+ /* 4310 */ { MAD_F(0x0447f28a) /* 0.267565289 */, 18 },
+ /* 4311 */ { MAD_F(0x04484956) /* 0.267648065 */, 18 },
+ /* 4312 */ { MAD_F(0x0448a024) /* 0.267730848 */, 18 },
+ /* 4313 */ { MAD_F(0x0448f6f4) /* 0.267813638 */, 18 },
+ /* 4314 */ { MAD_F(0x04494dc5) /* 0.267896434 */, 18 },
+ /* 4315 */ { MAD_F(0x0449a498) /* 0.267979236 */, 18 },
+ /* 4316 */ { MAD_F(0x0449fb6d) /* 0.268062045 */, 18 },
+ /* 4317 */ { MAD_F(0x044a5243) /* 0.268144860 */, 18 },
+ /* 4318 */ { MAD_F(0x044aa91c) /* 0.268227681 */, 18 },
+ /* 4319 */ { MAD_F(0x044afff6) /* 0.268310509 */, 18 },
+
+ /* 4320 */ { MAD_F(0x044b56d1) /* 0.268393343 */, 18 },
+ /* 4321 */ { MAD_F(0x044badaf) /* 0.268476184 */, 18 },
+ /* 4322 */ { MAD_F(0x044c048e) /* 0.268559031 */, 18 },
+ /* 4323 */ { MAD_F(0x044c5b6f) /* 0.268641885 */, 18 },
+ /* 4324 */ { MAD_F(0x044cb251) /* 0.268724744 */, 18 },
+ /* 4325 */ { MAD_F(0x044d0935) /* 0.268807611 */, 18 },
+ /* 4326 */ { MAD_F(0x044d601b) /* 0.268890483 */, 18 },
+ /* 4327 */ { MAD_F(0x044db703) /* 0.268973362 */, 18 },
+ /* 4328 */ { MAD_F(0x044e0dec) /* 0.269056248 */, 18 },
+ /* 4329 */ { MAD_F(0x044e64d7) /* 0.269139139 */, 18 },
+ /* 4330 */ { MAD_F(0x044ebbc4) /* 0.269222037 */, 18 },
+ /* 4331 */ { MAD_F(0x044f12b3) /* 0.269304942 */, 18 },
+ /* 4332 */ { MAD_F(0x044f69a3) /* 0.269387853 */, 18 },
+ /* 4333 */ { MAD_F(0x044fc095) /* 0.269470770 */, 18 },
+ /* 4334 */ { MAD_F(0x04501788) /* 0.269553694 */, 18 },
+ /* 4335 */ { MAD_F(0x04506e7e) /* 0.269636624 */, 18 },
+
+ /* 4336 */ { MAD_F(0x0450c575) /* 0.269719560 */, 18 },
+ /* 4337 */ { MAD_F(0x04511c6e) /* 0.269802503 */, 18 },
+ /* 4338 */ { MAD_F(0x04517368) /* 0.269885452 */, 18 },
+ /* 4339 */ { MAD_F(0x0451ca64) /* 0.269968408 */, 18 },
+ /* 4340 */ { MAD_F(0x04522162) /* 0.270051370 */, 18 },
+ /* 4341 */ { MAD_F(0x04527862) /* 0.270134338 */, 18 },
+ /* 4342 */ { MAD_F(0x0452cf63) /* 0.270217312 */, 18 },
+ /* 4343 */ { MAD_F(0x04532666) /* 0.270300293 */, 18 },
+ /* 4344 */ { MAD_F(0x04537d6b) /* 0.270383281 */, 18 },
+ /* 4345 */ { MAD_F(0x0453d472) /* 0.270466275 */, 18 },
+ /* 4346 */ { MAD_F(0x04542b7a) /* 0.270549275 */, 18 },
+ /* 4347 */ { MAD_F(0x04548284) /* 0.270632281 */, 18 },
+ /* 4348 */ { MAD_F(0x0454d98f) /* 0.270715294 */, 18 },
+ /* 4349 */ { MAD_F(0x0455309c) /* 0.270798313 */, 18 },
+ /* 4350 */ { MAD_F(0x045587ab) /* 0.270881339 */, 18 },
+ /* 4351 */ { MAD_F(0x0455debc) /* 0.270964371 */, 18 },
+
+ /* 4352 */ { MAD_F(0x045635cf) /* 0.271047409 */, 18 },
+ /* 4353 */ { MAD_F(0x04568ce3) /* 0.271130454 */, 18 },
+ /* 4354 */ { MAD_F(0x0456e3f9) /* 0.271213505 */, 18 },
+ /* 4355 */ { MAD_F(0x04573b10) /* 0.271296562 */, 18 },
+ /* 4356 */ { MAD_F(0x04579229) /* 0.271379626 */, 18 },
+ /* 4357 */ { MAD_F(0x0457e944) /* 0.271462696 */, 18 },
+ /* 4358 */ { MAD_F(0x04584061) /* 0.271545772 */, 18 },
+ /* 4359 */ { MAD_F(0x0458977f) /* 0.271628855 */, 18 },
+ /* 4360 */ { MAD_F(0x0458ee9f) /* 0.271711944 */, 18 },
+ /* 4361 */ { MAD_F(0x045945c1) /* 0.271795040 */, 18 },
+ /* 4362 */ { MAD_F(0x04599ce5) /* 0.271878142 */, 18 },
+ /* 4363 */ { MAD_F(0x0459f40a) /* 0.271961250 */, 18 },
+ /* 4364 */ { MAD_F(0x045a4b31) /* 0.272044365 */, 18 },
+ /* 4365 */ { MAD_F(0x045aa259) /* 0.272127486 */, 18 },
+ /* 4366 */ { MAD_F(0x045af984) /* 0.272210613 */, 18 },
+ /* 4367 */ { MAD_F(0x045b50b0) /* 0.272293746 */, 18 },
+
+ /* 4368 */ { MAD_F(0x045ba7dd) /* 0.272376886 */, 18 },
+ /* 4369 */ { MAD_F(0x045bff0d) /* 0.272460033 */, 18 },
+ /* 4370 */ { MAD_F(0x045c563e) /* 0.272543185 */, 18 },
+ /* 4371 */ { MAD_F(0x045cad71) /* 0.272626344 */, 18 },
+ /* 4372 */ { MAD_F(0x045d04a5) /* 0.272709510 */, 18 },
+ /* 4373 */ { MAD_F(0x045d5bdc) /* 0.272792681 */, 18 },
+ /* 4374 */ { MAD_F(0x045db313) /* 0.272875859 */, 18 },
+ /* 4375 */ { MAD_F(0x045e0a4d) /* 0.272959044 */, 18 },
+ /* 4376 */ { MAD_F(0x045e6188) /* 0.273042234 */, 18 },
+ /* 4377 */ { MAD_F(0x045eb8c5) /* 0.273125431 */, 18 },
+ /* 4378 */ { MAD_F(0x045f1004) /* 0.273208635 */, 18 },
+ /* 4379 */ { MAD_F(0x045f6745) /* 0.273291844 */, 18 },
+ /* 4380 */ { MAD_F(0x045fbe87) /* 0.273375060 */, 18 },
+ /* 4381 */ { MAD_F(0x046015cb) /* 0.273458283 */, 18 },
+ /* 4382 */ { MAD_F(0x04606d10) /* 0.273541511 */, 18 },
+ /* 4383 */ { MAD_F(0x0460c457) /* 0.273624747 */, 18 },
+
+ /* 4384 */ { MAD_F(0x04611ba0) /* 0.273707988 */, 18 },
+ /* 4385 */ { MAD_F(0x046172eb) /* 0.273791236 */, 18 },
+ /* 4386 */ { MAD_F(0x0461ca37) /* 0.273874490 */, 18 },
+ /* 4387 */ { MAD_F(0x04622185) /* 0.273957750 */, 18 },
+ /* 4388 */ { MAD_F(0x046278d5) /* 0.274041017 */, 18 },
+ /* 4389 */ { MAD_F(0x0462d026) /* 0.274124290 */, 18 },
+ /* 4390 */ { MAD_F(0x0463277a) /* 0.274207569 */, 18 },
+ /* 4391 */ { MAD_F(0x04637ece) /* 0.274290855 */, 18 },
+ /* 4392 */ { MAD_F(0x0463d625) /* 0.274374147 */, 18 },
+ /* 4393 */ { MAD_F(0x04642d7d) /* 0.274457445 */, 18 },
+ /* 4394 */ { MAD_F(0x046484d7) /* 0.274540749 */, 18 },
+ /* 4395 */ { MAD_F(0x0464dc33) /* 0.274624060 */, 18 },
+ /* 4396 */ { MAD_F(0x04653390) /* 0.274707378 */, 18 },
+ /* 4397 */ { MAD_F(0x04658aef) /* 0.274790701 */, 18 },
+ /* 4398 */ { MAD_F(0x0465e250) /* 0.274874031 */, 18 },
+ /* 4399 */ { MAD_F(0x046639b2) /* 0.274957367 */, 18 },
+
+ /* 4400 */ { MAD_F(0x04669116) /* 0.275040710 */, 18 },
+ /* 4401 */ { MAD_F(0x0466e87c) /* 0.275124059 */, 18 },
+ /* 4402 */ { MAD_F(0x04673fe3) /* 0.275207414 */, 18 },
+ /* 4403 */ { MAD_F(0x0467974d) /* 0.275290775 */, 18 },
+ /* 4404 */ { MAD_F(0x0467eeb7) /* 0.275374143 */, 18 },
+ /* 4405 */ { MAD_F(0x04684624) /* 0.275457517 */, 18 },
+ /* 4406 */ { MAD_F(0x04689d92) /* 0.275540897 */, 18 },
+ /* 4407 */ { MAD_F(0x0468f502) /* 0.275624284 */, 18 },
+ /* 4408 */ { MAD_F(0x04694c74) /* 0.275707677 */, 18 },
+ /* 4409 */ { MAD_F(0x0469a3e7) /* 0.275791076 */, 18 },
+ /* 4410 */ { MAD_F(0x0469fb5c) /* 0.275874482 */, 18 },
+ /* 4411 */ { MAD_F(0x046a52d3) /* 0.275957894 */, 18 },
+ /* 4412 */ { MAD_F(0x046aaa4b) /* 0.276041312 */, 18 },
+ /* 4413 */ { MAD_F(0x046b01c5) /* 0.276124737 */, 18 },
+ /* 4414 */ { MAD_F(0x046b5941) /* 0.276208167 */, 18 },
+ /* 4415 */ { MAD_F(0x046bb0bf) /* 0.276291605 */, 18 },
+
+ /* 4416 */ { MAD_F(0x046c083e) /* 0.276375048 */, 18 },
+ /* 4417 */ { MAD_F(0x046c5fbf) /* 0.276458498 */, 18 },
+ /* 4418 */ { MAD_F(0x046cb741) /* 0.276541954 */, 18 },
+ /* 4419 */ { MAD_F(0x046d0ec5) /* 0.276625416 */, 18 },
+ /* 4420 */ { MAD_F(0x046d664b) /* 0.276708885 */, 18 },
+ /* 4421 */ { MAD_F(0x046dbdd3) /* 0.276792360 */, 18 },
+ /* 4422 */ { MAD_F(0x046e155c) /* 0.276875841 */, 18 },
+ /* 4423 */ { MAD_F(0x046e6ce7) /* 0.276959328 */, 18 },
+ /* 4424 */ { MAD_F(0x046ec474) /* 0.277042822 */, 18 },
+ /* 4425 */ { MAD_F(0x046f1c02) /* 0.277126322 */, 18 },
+ /* 4426 */ { MAD_F(0x046f7392) /* 0.277209829 */, 18 },
+ /* 4427 */ { MAD_F(0x046fcb24) /* 0.277293341 */, 18 },
+ /* 4428 */ { MAD_F(0x047022b8) /* 0.277376860 */, 18 },
+ /* 4429 */ { MAD_F(0x04707a4d) /* 0.277460385 */, 18 },
+ /* 4430 */ { MAD_F(0x0470d1e4) /* 0.277543917 */, 18 },
+ /* 4431 */ { MAD_F(0x0471297c) /* 0.277627455 */, 18 },
+
+ /* 4432 */ { MAD_F(0x04718116) /* 0.277710999 */, 18 },
+ /* 4433 */ { MAD_F(0x0471d8b2) /* 0.277794549 */, 18 },
+ /* 4434 */ { MAD_F(0x04723050) /* 0.277878106 */, 18 },
+ /* 4435 */ { MAD_F(0x047287ef) /* 0.277961669 */, 18 },
+ /* 4436 */ { MAD_F(0x0472df90) /* 0.278045238 */, 18 },
+ /* 4437 */ { MAD_F(0x04733733) /* 0.278128813 */, 18 },
+ /* 4438 */ { MAD_F(0x04738ed7) /* 0.278212395 */, 18 },
+ /* 4439 */ { MAD_F(0x0473e67d) /* 0.278295983 */, 18 },
+ /* 4440 */ { MAD_F(0x04743e25) /* 0.278379578 */, 18 },
+ /* 4441 */ { MAD_F(0x047495ce) /* 0.278463178 */, 18 },
+ /* 4442 */ { MAD_F(0x0474ed79) /* 0.278546785 */, 18 },
+ /* 4443 */ { MAD_F(0x04754526) /* 0.278630398 */, 18 },
+ /* 4444 */ { MAD_F(0x04759cd4) /* 0.278714018 */, 18 },
+ /* 4445 */ { MAD_F(0x0475f484) /* 0.278797643 */, 18 },
+ /* 4446 */ { MAD_F(0x04764c36) /* 0.278881275 */, 18 },
+ /* 4447 */ { MAD_F(0x0476a3ea) /* 0.278964914 */, 18 },
+
+ /* 4448 */ { MAD_F(0x0476fb9f) /* 0.279048558 */, 18 },
+ /* 4449 */ { MAD_F(0x04775356) /* 0.279132209 */, 18 },
+ /* 4450 */ { MAD_F(0x0477ab0e) /* 0.279215866 */, 18 },
+ /* 4451 */ { MAD_F(0x047802c8) /* 0.279299529 */, 18 },
+ /* 4452 */ { MAD_F(0x04785a84) /* 0.279383199 */, 18 },
+ /* 4453 */ { MAD_F(0x0478b242) /* 0.279466875 */, 18 },
+ /* 4454 */ { MAD_F(0x04790a01) /* 0.279550557 */, 18 },
+ /* 4455 */ { MAD_F(0x047961c2) /* 0.279634245 */, 18 },
+ /* 4456 */ { MAD_F(0x0479b984) /* 0.279717940 */, 18 },
+ /* 4457 */ { MAD_F(0x047a1149) /* 0.279801641 */, 18 },
+ /* 4458 */ { MAD_F(0x047a690f) /* 0.279885348 */, 18 },
+ /* 4459 */ { MAD_F(0x047ac0d6) /* 0.279969061 */, 18 },
+ /* 4460 */ { MAD_F(0x047b18a0) /* 0.280052781 */, 18 },
+ /* 4461 */ { MAD_F(0x047b706b) /* 0.280136507 */, 18 },
+ /* 4462 */ { MAD_F(0x047bc837) /* 0.280220239 */, 18 },
+ /* 4463 */ { MAD_F(0x047c2006) /* 0.280303978 */, 18 },
+
+ /* 4464 */ { MAD_F(0x047c77d6) /* 0.280387722 */, 18 },
+ /* 4465 */ { MAD_F(0x047ccfa8) /* 0.280471473 */, 18 },
+ /* 4466 */ { MAD_F(0x047d277b) /* 0.280555230 */, 18 },
+ /* 4467 */ { MAD_F(0x047d7f50) /* 0.280638994 */, 18 },
+ /* 4468 */ { MAD_F(0x047dd727) /* 0.280722764 */, 18 },
+ /* 4469 */ { MAD_F(0x047e2eff) /* 0.280806540 */, 18 },
+ /* 4470 */ { MAD_F(0x047e86d9) /* 0.280890322 */, 18 },
+ /* 4471 */ { MAD_F(0x047edeb5) /* 0.280974110 */, 18 },
+ /* 4472 */ { MAD_F(0x047f3693) /* 0.281057905 */, 18 },
+ /* 4473 */ { MAD_F(0x047f8e72) /* 0.281141706 */, 18 },
+ /* 4474 */ { MAD_F(0x047fe653) /* 0.281225513 */, 18 },
+ /* 4475 */ { MAD_F(0x04803e35) /* 0.281309326 */, 18 },
+ /* 4476 */ { MAD_F(0x04809619) /* 0.281393146 */, 18 },
+ /* 4477 */ { MAD_F(0x0480edff) /* 0.281476972 */, 18 },
+ /* 4478 */ { MAD_F(0x048145e7) /* 0.281560804 */, 18 },
+ /* 4479 */ { MAD_F(0x04819dd0) /* 0.281644643 */, 18 },
+
+ /* 4480 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 18 },
+ /* 4481 */ { MAD_F(0x04824da7) /* 0.281812338 */, 18 },
+ /* 4482 */ { MAD_F(0x0482a595) /* 0.281896195 */, 18 },
+ /* 4483 */ { MAD_F(0x0482fd85) /* 0.281980059 */, 18 },
+ /* 4484 */ { MAD_F(0x04835577) /* 0.282063928 */, 18 },
+ /* 4485 */ { MAD_F(0x0483ad6a) /* 0.282147804 */, 18 },
+ /* 4486 */ { MAD_F(0x0484055f) /* 0.282231686 */, 18 },
+ /* 4487 */ { MAD_F(0x04845d56) /* 0.282315574 */, 18 },
+ /* 4488 */ { MAD_F(0x0484b54e) /* 0.282399469 */, 18 },
+ /* 4489 */ { MAD_F(0x04850d48) /* 0.282483370 */, 18 },
+ /* 4490 */ { MAD_F(0x04856544) /* 0.282567277 */, 18 },
+ /* 4491 */ { MAD_F(0x0485bd41) /* 0.282651190 */, 18 },
+ /* 4492 */ { MAD_F(0x04861540) /* 0.282735109 */, 18 },
+ /* 4493 */ { MAD_F(0x04866d40) /* 0.282819035 */, 18 },
+ /* 4494 */ { MAD_F(0x0486c543) /* 0.282902967 */, 18 },
+ /* 4495 */ { MAD_F(0x04871d47) /* 0.282986905 */, 18 },
+
+ /* 4496 */ { MAD_F(0x0487754c) /* 0.283070849 */, 18 },
+ /* 4497 */ { MAD_F(0x0487cd54) /* 0.283154800 */, 18 },
+ /* 4498 */ { MAD_F(0x0488255d) /* 0.283238757 */, 18 },
+ /* 4499 */ { MAD_F(0x04887d67) /* 0.283322720 */, 18 },
+ /* 4500 */ { MAD_F(0x0488d574) /* 0.283406689 */, 18 },
+ /* 4501 */ { MAD_F(0x04892d82) /* 0.283490665 */, 18 },
+ /* 4502 */ { MAD_F(0x04898591) /* 0.283574646 */, 18 },
+ /* 4503 */ { MAD_F(0x0489dda3) /* 0.283658634 */, 18 },
+ /* 4504 */ { MAD_F(0x048a35b6) /* 0.283742628 */, 18 },
+ /* 4505 */ { MAD_F(0x048a8dca) /* 0.283826629 */, 18 },
+ /* 4506 */ { MAD_F(0x048ae5e1) /* 0.283910635 */, 18 },
+ /* 4507 */ { MAD_F(0x048b3df9) /* 0.283994648 */, 18 },
+ /* 4508 */ { MAD_F(0x048b9612) /* 0.284078667 */, 18 },
+ /* 4509 */ { MAD_F(0x048bee2e) /* 0.284162692 */, 18 },
+ /* 4510 */ { MAD_F(0x048c464b) /* 0.284246723 */, 18 },
+ /* 4511 */ { MAD_F(0x048c9e69) /* 0.284330761 */, 18 },
+
+ /* 4512 */ { MAD_F(0x048cf68a) /* 0.284414805 */, 18 },
+ /* 4513 */ { MAD_F(0x048d4eac) /* 0.284498855 */, 18 },
+ /* 4514 */ { MAD_F(0x048da6cf) /* 0.284582911 */, 18 },
+ /* 4515 */ { MAD_F(0x048dfef5) /* 0.284666974 */, 18 },
+ /* 4516 */ { MAD_F(0x048e571c) /* 0.284751042 */, 18 },
+ /* 4517 */ { MAD_F(0x048eaf44) /* 0.284835117 */, 18 },
+ /* 4518 */ { MAD_F(0x048f076f) /* 0.284919198 */, 18 },
+ /* 4519 */ { MAD_F(0x048f5f9b) /* 0.285003285 */, 18 },
+ /* 4520 */ { MAD_F(0x048fb7c8) /* 0.285087379 */, 18 },
+ /* 4521 */ { MAD_F(0x04900ff8) /* 0.285171479 */, 18 },
+ /* 4522 */ { MAD_F(0x04906829) /* 0.285255584 */, 18 },
+ /* 4523 */ { MAD_F(0x0490c05b) /* 0.285339697 */, 18 },
+ /* 4524 */ { MAD_F(0x04911890) /* 0.285423815 */, 18 },
+ /* 4525 */ { MAD_F(0x049170c6) /* 0.285507939 */, 18 },
+ /* 4526 */ { MAD_F(0x0491c8fd) /* 0.285592070 */, 18 },
+ /* 4527 */ { MAD_F(0x04922137) /* 0.285676207 */, 18 },
+
+ /* 4528 */ { MAD_F(0x04927972) /* 0.285760350 */, 18 },
+ /* 4529 */ { MAD_F(0x0492d1ae) /* 0.285844499 */, 18 },
+ /* 4530 */ { MAD_F(0x049329ed) /* 0.285928655 */, 18 },
+ /* 4531 */ { MAD_F(0x0493822c) /* 0.286012816 */, 18 },
+ /* 4532 */ { MAD_F(0x0493da6e) /* 0.286096984 */, 18 },
+ /* 4533 */ { MAD_F(0x049432b1) /* 0.286181158 */, 18 },
+ /* 4534 */ { MAD_F(0x04948af6) /* 0.286265338 */, 18 },
+ /* 4535 */ { MAD_F(0x0494e33d) /* 0.286349525 */, 18 },
+ /* 4536 */ { MAD_F(0x04953b85) /* 0.286433717 */, 18 },
+ /* 4537 */ { MAD_F(0x049593cf) /* 0.286517916 */, 18 },
+ /* 4538 */ { MAD_F(0x0495ec1b) /* 0.286602121 */, 18 },
+ /* 4539 */ { MAD_F(0x04964468) /* 0.286686332 */, 18 },
+ /* 4540 */ { MAD_F(0x04969cb7) /* 0.286770550 */, 18 },
+ /* 4541 */ { MAD_F(0x0496f508) /* 0.286854773 */, 18 },
+ /* 4542 */ { MAD_F(0x04974d5a) /* 0.286939003 */, 18 },
+ /* 4543 */ { MAD_F(0x0497a5ae) /* 0.287023239 */, 18 },
+
+ /* 4544 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 18 },
+ /* 4545 */ { MAD_F(0x0498565a) /* 0.287191729 */, 18 },
+ /* 4546 */ { MAD_F(0x0498aeb3) /* 0.287275983 */, 18 },
+ /* 4547 */ { MAD_F(0x0499070e) /* 0.287360244 */, 18 },
+ /* 4548 */ { MAD_F(0x04995f6a) /* 0.287444511 */, 18 },
+ /* 4549 */ { MAD_F(0x0499b7c8) /* 0.287528784 */, 18 },
+ /* 4550 */ { MAD_F(0x049a1027) /* 0.287613063 */, 18 },
+ /* 4551 */ { MAD_F(0x049a6889) /* 0.287697348 */, 18 },
+ /* 4552 */ { MAD_F(0x049ac0eb) /* 0.287781640 */, 18 },
+ /* 4553 */ { MAD_F(0x049b1950) /* 0.287865937 */, 18 },
+ /* 4554 */ { MAD_F(0x049b71b6) /* 0.287950241 */, 18 },
+ /* 4555 */ { MAD_F(0x049bca1e) /* 0.288034551 */, 18 },
+ /* 4556 */ { MAD_F(0x049c2287) /* 0.288118867 */, 18 },
+ /* 4557 */ { MAD_F(0x049c7af2) /* 0.288203190 */, 18 },
+ /* 4558 */ { MAD_F(0x049cd35f) /* 0.288287518 */, 18 },
+ /* 4559 */ { MAD_F(0x049d2bce) /* 0.288371853 */, 18 },
+
+ /* 4560 */ { MAD_F(0x049d843e) /* 0.288456194 */, 18 },
+ /* 4561 */ { MAD_F(0x049ddcaf) /* 0.288540541 */, 18 },
+ /* 4562 */ { MAD_F(0x049e3523) /* 0.288624894 */, 18 },
+ /* 4563 */ { MAD_F(0x049e8d98) /* 0.288709253 */, 18 },
+ /* 4564 */ { MAD_F(0x049ee60e) /* 0.288793619 */, 18 },
+ /* 4565 */ { MAD_F(0x049f3e87) /* 0.288877990 */, 18 },
+ /* 4566 */ { MAD_F(0x049f9701) /* 0.288962368 */, 18 },
+ /* 4567 */ { MAD_F(0x049fef7c) /* 0.289046752 */, 18 },
+ /* 4568 */ { MAD_F(0x04a047fa) /* 0.289131142 */, 18 },
+ /* 4569 */ { MAD_F(0x04a0a079) /* 0.289215538 */, 18 },
+ /* 4570 */ { MAD_F(0x04a0f8f9) /* 0.289299941 */, 18 },
+ /* 4571 */ { MAD_F(0x04a1517c) /* 0.289384349 */, 18 },
+ /* 4572 */ { MAD_F(0x04a1a9ff) /* 0.289468764 */, 18 },
+ /* 4573 */ { MAD_F(0x04a20285) /* 0.289553185 */, 18 },
+ /* 4574 */ { MAD_F(0x04a25b0c) /* 0.289637612 */, 18 },
+ /* 4575 */ { MAD_F(0x04a2b395) /* 0.289722045 */, 18 },
+
+ /* 4576 */ { MAD_F(0x04a30c20) /* 0.289806485 */, 18 },
+ /* 4577 */ { MAD_F(0x04a364ac) /* 0.289890930 */, 18 },
+ /* 4578 */ { MAD_F(0x04a3bd3a) /* 0.289975382 */, 18 },
+ /* 4579 */ { MAD_F(0x04a415c9) /* 0.290059840 */, 18 },
+ /* 4580 */ { MAD_F(0x04a46e5a) /* 0.290144304 */, 18 },
+ /* 4581 */ { MAD_F(0x04a4c6ed) /* 0.290228774 */, 18 },
+ /* 4582 */ { MAD_F(0x04a51f81) /* 0.290313250 */, 18 },
+ /* 4583 */ { MAD_F(0x04a57818) /* 0.290397733 */, 18 },
+ /* 4584 */ { MAD_F(0x04a5d0af) /* 0.290482221 */, 18 },
+ /* 4585 */ { MAD_F(0x04a62949) /* 0.290566716 */, 18 },
+ /* 4586 */ { MAD_F(0x04a681e4) /* 0.290651217 */, 18 },
+ /* 4587 */ { MAD_F(0x04a6da80) /* 0.290735724 */, 18 },
+ /* 4588 */ { MAD_F(0x04a7331f) /* 0.290820237 */, 18 },
+ /* 4589 */ { MAD_F(0x04a78bbf) /* 0.290904756 */, 18 },
+ /* 4590 */ { MAD_F(0x04a7e460) /* 0.290989281 */, 18 },
+ /* 4591 */ { MAD_F(0x04a83d03) /* 0.291073813 */, 18 },
+
+ /* 4592 */ { MAD_F(0x04a895a8) /* 0.291158351 */, 18 },
+ /* 4593 */ { MAD_F(0x04a8ee4f) /* 0.291242894 */, 18 },
+ /* 4594 */ { MAD_F(0x04a946f7) /* 0.291327444 */, 18 },
+ /* 4595 */ { MAD_F(0x04a99fa1) /* 0.291412001 */, 18 },
+ /* 4596 */ { MAD_F(0x04a9f84c) /* 0.291496563 */, 18 },
+ /* 4597 */ { MAD_F(0x04aa50fa) /* 0.291581131 */, 18 },
+ /* 4598 */ { MAD_F(0x04aaa9a8) /* 0.291665706 */, 18 },
+ /* 4599 */ { MAD_F(0x04ab0259) /* 0.291750286 */, 18 },
+ /* 4600 */ { MAD_F(0x04ab5b0b) /* 0.291834873 */, 18 },
+ /* 4601 */ { MAD_F(0x04abb3bf) /* 0.291919466 */, 18 },
+ /* 4602 */ { MAD_F(0x04ac0c74) /* 0.292004065 */, 18 },
+ /* 4603 */ { MAD_F(0x04ac652b) /* 0.292088670 */, 18 },
+ /* 4604 */ { MAD_F(0x04acbde4) /* 0.292173281 */, 18 },
+ /* 4605 */ { MAD_F(0x04ad169e) /* 0.292257899 */, 18 },
+ /* 4606 */ { MAD_F(0x04ad6f5a) /* 0.292342522 */, 18 },
+ /* 4607 */ { MAD_F(0x04adc818) /* 0.292427152 */, 18 },
+
+ /* 4608 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 18 },
+ /* 4609 */ { MAD_F(0x04ae7998) /* 0.292596430 */, 18 },
+ /* 4610 */ { MAD_F(0x04aed25a) /* 0.292681078 */, 18 },
+ /* 4611 */ { MAD_F(0x04af2b1e) /* 0.292765732 */, 18 },
+ /* 4612 */ { MAD_F(0x04af83e4) /* 0.292850392 */, 18 },
+ /* 4613 */ { MAD_F(0x04afdcac) /* 0.292935058 */, 18 },
+ /* 4614 */ { MAD_F(0x04b03575) /* 0.293019731 */, 18 },
+ /* 4615 */ { MAD_F(0x04b08e40) /* 0.293104409 */, 18 },
+ /* 4616 */ { MAD_F(0x04b0e70c) /* 0.293189094 */, 18 },
+ /* 4617 */ { MAD_F(0x04b13fda) /* 0.293273785 */, 18 },
+ /* 4618 */ { MAD_F(0x04b198aa) /* 0.293358482 */, 18 },
+ /* 4619 */ { MAD_F(0x04b1f17b) /* 0.293443185 */, 18 },
+ /* 4620 */ { MAD_F(0x04b24a4e) /* 0.293527894 */, 18 },
+ /* 4621 */ { MAD_F(0x04b2a322) /* 0.293612609 */, 18 },
+ /* 4622 */ { MAD_F(0x04b2fbf9) /* 0.293697331 */, 18 },
+ /* 4623 */ { MAD_F(0x04b354d1) /* 0.293782058 */, 18 },
+
+ /* 4624 */ { MAD_F(0x04b3adaa) /* 0.293866792 */, 18 },
+ /* 4625 */ { MAD_F(0x04b40685) /* 0.293951532 */, 18 },
+ /* 4626 */ { MAD_F(0x04b45f62) /* 0.294036278 */, 18 },
+ /* 4627 */ { MAD_F(0x04b4b840) /* 0.294121029 */, 18 },
+ /* 4628 */ { MAD_F(0x04b51120) /* 0.294205788 */, 18 },
+ /* 4629 */ { MAD_F(0x04b56a02) /* 0.294290552 */, 18 },
+ /* 4630 */ { MAD_F(0x04b5c2e6) /* 0.294375322 */, 18 },
+ /* 4631 */ { MAD_F(0x04b61bcb) /* 0.294460098 */, 18 },
+ /* 4632 */ { MAD_F(0x04b674b1) /* 0.294544881 */, 18 },
+ /* 4633 */ { MAD_F(0x04b6cd99) /* 0.294629669 */, 18 },
+ /* 4634 */ { MAD_F(0x04b72683) /* 0.294714464 */, 18 },
+ /* 4635 */ { MAD_F(0x04b77f6f) /* 0.294799265 */, 18 },
+ /* 4636 */ { MAD_F(0x04b7d85c) /* 0.294884072 */, 18 },
+ /* 4637 */ { MAD_F(0x04b8314b) /* 0.294968885 */, 18 },
+ /* 4638 */ { MAD_F(0x04b88a3b) /* 0.295053704 */, 18 },
+ /* 4639 */ { MAD_F(0x04b8e32d) /* 0.295138529 */, 18 },
+
+ /* 4640 */ { MAD_F(0x04b93c21) /* 0.295223360 */, 18 },
+ /* 4641 */ { MAD_F(0x04b99516) /* 0.295308197 */, 18 },
+ /* 4642 */ { MAD_F(0x04b9ee0d) /* 0.295393041 */, 18 },
+ /* 4643 */ { MAD_F(0x04ba4706) /* 0.295477890 */, 18 },
+ /* 4644 */ { MAD_F(0x04baa000) /* 0.295562746 */, 18 },
+ /* 4645 */ { MAD_F(0x04baf8fc) /* 0.295647608 */, 18 },
+ /* 4646 */ { MAD_F(0x04bb51fa) /* 0.295732476 */, 18 },
+ /* 4647 */ { MAD_F(0x04bbaaf9) /* 0.295817349 */, 18 },
+ /* 4648 */ { MAD_F(0x04bc03fa) /* 0.295902229 */, 18 },
+ /* 4649 */ { MAD_F(0x04bc5cfc) /* 0.295987115 */, 18 },
+ /* 4650 */ { MAD_F(0x04bcb600) /* 0.296072008 */, 18 },
+ /* 4651 */ { MAD_F(0x04bd0f06) /* 0.296156906 */, 18 },
+ /* 4652 */ { MAD_F(0x04bd680d) /* 0.296241810 */, 18 },
+ /* 4653 */ { MAD_F(0x04bdc116) /* 0.296326721 */, 18 },
+ /* 4654 */ { MAD_F(0x04be1a21) /* 0.296411637 */, 18 },
+ /* 4655 */ { MAD_F(0x04be732d) /* 0.296496560 */, 18 },
+
+ /* 4656 */ { MAD_F(0x04becc3b) /* 0.296581488 */, 18 },
+ /* 4657 */ { MAD_F(0x04bf254a) /* 0.296666423 */, 18 },
+ /* 4658 */ { MAD_F(0x04bf7e5b) /* 0.296751364 */, 18 },
+ /* 4659 */ { MAD_F(0x04bfd76e) /* 0.296836311 */, 18 },
+ /* 4660 */ { MAD_F(0x04c03083) /* 0.296921264 */, 18 },
+ /* 4661 */ { MAD_F(0x04c08999) /* 0.297006223 */, 18 },
+ /* 4662 */ { MAD_F(0x04c0e2b0) /* 0.297091188 */, 18 },
+ /* 4663 */ { MAD_F(0x04c13bca) /* 0.297176159 */, 18 },
+ /* 4664 */ { MAD_F(0x04c194e4) /* 0.297261136 */, 18 },
+ /* 4665 */ { MAD_F(0x04c1ee01) /* 0.297346120 */, 18 },
+ /* 4666 */ { MAD_F(0x04c2471f) /* 0.297431109 */, 18 },
+ /* 4667 */ { MAD_F(0x04c2a03f) /* 0.297516105 */, 18 },
+ /* 4668 */ { MAD_F(0x04c2f960) /* 0.297601106 */, 18 },
+ /* 4669 */ { MAD_F(0x04c35283) /* 0.297686114 */, 18 },
+ /* 4670 */ { MAD_F(0x04c3aba8) /* 0.297771128 */, 18 },
+ /* 4671 */ { MAD_F(0x04c404ce) /* 0.297856147 */, 18 },
+
+ /* 4672 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 18 },
+ /* 4673 */ { MAD_F(0x04c4b720) /* 0.298026205 */, 18 },
+ /* 4674 */ { MAD_F(0x04c5104b) /* 0.298111243 */, 18 },
+ /* 4675 */ { MAD_F(0x04c56978) /* 0.298196287 */, 18 },
+ /* 4676 */ { MAD_F(0x04c5c2a7) /* 0.298281337 */, 18 },
+ /* 4677 */ { MAD_F(0x04c61bd7) /* 0.298366393 */, 18 },
+ /* 4678 */ { MAD_F(0x04c67508) /* 0.298451456 */, 18 },
+ /* 4679 */ { MAD_F(0x04c6ce3c) /* 0.298536524 */, 18 },
+ /* 4680 */ { MAD_F(0x04c72771) /* 0.298621598 */, 18 },
+ /* 4681 */ { MAD_F(0x04c780a7) /* 0.298706679 */, 18 },
+ /* 4682 */ { MAD_F(0x04c7d9df) /* 0.298791765 */, 18 },
+ /* 4683 */ { MAD_F(0x04c83319) /* 0.298876858 */, 18 },
+ /* 4684 */ { MAD_F(0x04c88c55) /* 0.298961956 */, 18 },
+ /* 4685 */ { MAD_F(0x04c8e592) /* 0.299047061 */, 18 },
+ /* 4686 */ { MAD_F(0x04c93ed1) /* 0.299132172 */, 18 },
+ /* 4687 */ { MAD_F(0x04c99811) /* 0.299217288 */, 18 },
+
+ /* 4688 */ { MAD_F(0x04c9f153) /* 0.299302411 */, 18 },
+ /* 4689 */ { MAD_F(0x04ca4a97) /* 0.299387540 */, 18 },
+ /* 4690 */ { MAD_F(0x04caa3dc) /* 0.299472675 */, 18 },
+ /* 4691 */ { MAD_F(0x04cafd23) /* 0.299557816 */, 18 },
+ /* 4692 */ { MAD_F(0x04cb566b) /* 0.299642963 */, 18 },
+ /* 4693 */ { MAD_F(0x04cbafb5) /* 0.299728116 */, 18 },
+ /* 4694 */ { MAD_F(0x04cc0901) /* 0.299813275 */, 18 },
+ /* 4695 */ { MAD_F(0x04cc624e) /* 0.299898440 */, 18 },
+ /* 4696 */ { MAD_F(0x04ccbb9d) /* 0.299983611 */, 18 },
+ /* 4697 */ { MAD_F(0x04cd14ee) /* 0.300068789 */, 18 },
+ /* 4698 */ { MAD_F(0x04cd6e40) /* 0.300153972 */, 18 },
+ /* 4699 */ { MAD_F(0x04cdc794) /* 0.300239161 */, 18 },
+ /* 4700 */ { MAD_F(0x04ce20e9) /* 0.300324357 */, 18 },
+ /* 4701 */ { MAD_F(0x04ce7a40) /* 0.300409558 */, 18 },
+ /* 4702 */ { MAD_F(0x04ced399) /* 0.300494765 */, 18 },
+ /* 4703 */ { MAD_F(0x04cf2cf3) /* 0.300579979 */, 18 },
+
+ /* 4704 */ { MAD_F(0x04cf864f) /* 0.300665198 */, 18 },
+ /* 4705 */ { MAD_F(0x04cfdfad) /* 0.300750424 */, 18 },
+ /* 4706 */ { MAD_F(0x04d0390c) /* 0.300835656 */, 18 },
+ /* 4707 */ { MAD_F(0x04d0926d) /* 0.300920893 */, 18 },
+ /* 4708 */ { MAD_F(0x04d0ebcf) /* 0.301006137 */, 18 },
+ /* 4709 */ { MAD_F(0x04d14533) /* 0.301091387 */, 18 },
+ /* 4710 */ { MAD_F(0x04d19e99) /* 0.301176643 */, 18 },
+ /* 4711 */ { MAD_F(0x04d1f800) /* 0.301261904 */, 18 },
+ /* 4712 */ { MAD_F(0x04d25169) /* 0.301347172 */, 18 },
+ /* 4713 */ { MAD_F(0x04d2aad4) /* 0.301432446 */, 18 },
+ /* 4714 */ { MAD_F(0x04d30440) /* 0.301517726 */, 18 },
+ /* 4715 */ { MAD_F(0x04d35dae) /* 0.301603012 */, 18 },
+ /* 4716 */ { MAD_F(0x04d3b71d) /* 0.301688304 */, 18 },
+ /* 4717 */ { MAD_F(0x04d4108e) /* 0.301773602 */, 18 },
+ /* 4718 */ { MAD_F(0x04d46a01) /* 0.301858906 */, 18 },
+ /* 4719 */ { MAD_F(0x04d4c375) /* 0.301944216 */, 18 },
+
+ /* 4720 */ { MAD_F(0x04d51ceb) /* 0.302029532 */, 18 },
+ /* 4721 */ { MAD_F(0x04d57662) /* 0.302114854 */, 18 },
+ /* 4722 */ { MAD_F(0x04d5cfdb) /* 0.302200182 */, 18 },
+ /* 4723 */ { MAD_F(0x04d62956) /* 0.302285516 */, 18 },
+ /* 4724 */ { MAD_F(0x04d682d2) /* 0.302370856 */, 18 },
+ /* 4725 */ { MAD_F(0x04d6dc50) /* 0.302456203 */, 18 },
+ /* 4726 */ { MAD_F(0x04d735d0) /* 0.302541555 */, 18 },
+ /* 4727 */ { MAD_F(0x04d78f51) /* 0.302626913 */, 18 },
+ /* 4728 */ { MAD_F(0x04d7e8d4) /* 0.302712277 */, 18 },
+ /* 4729 */ { MAD_F(0x04d84258) /* 0.302797648 */, 18 },
+ /* 4730 */ { MAD_F(0x04d89bde) /* 0.302883024 */, 18 },
+ /* 4731 */ { MAD_F(0x04d8f566) /* 0.302968406 */, 18 },
+ /* 4732 */ { MAD_F(0x04d94eef) /* 0.303053794 */, 18 },
+ /* 4733 */ { MAD_F(0x04d9a87a) /* 0.303139189 */, 18 },
+ /* 4734 */ { MAD_F(0x04da0207) /* 0.303224589 */, 18 },
+ /* 4735 */ { MAD_F(0x04da5b95) /* 0.303309995 */, 18 },
+
+ /* 4736 */ { MAD_F(0x04dab524) /* 0.303395408 */, 18 },
+ /* 4737 */ { MAD_F(0x04db0eb6) /* 0.303480826 */, 18 },
+ /* 4738 */ { MAD_F(0x04db6849) /* 0.303566251 */, 18 },
+ /* 4739 */ { MAD_F(0x04dbc1dd) /* 0.303651681 */, 18 },
+ /* 4740 */ { MAD_F(0x04dc1b73) /* 0.303737117 */, 18 },
+ /* 4741 */ { MAD_F(0x04dc750b) /* 0.303822560 */, 18 },
+ /* 4742 */ { MAD_F(0x04dccea5) /* 0.303908008 */, 18 },
+ /* 4743 */ { MAD_F(0x04dd2840) /* 0.303993463 */, 18 },
+ /* 4744 */ { MAD_F(0x04dd81dc) /* 0.304078923 */, 18 },
+ /* 4745 */ { MAD_F(0x04dddb7a) /* 0.304164390 */, 18 },
+ /* 4746 */ { MAD_F(0x04de351a) /* 0.304249862 */, 18 },
+ /* 4747 */ { MAD_F(0x04de8ebc) /* 0.304335340 */, 18 },
+ /* 4748 */ { MAD_F(0x04dee85f) /* 0.304420825 */, 18 },
+ /* 4749 */ { MAD_F(0x04df4203) /* 0.304506315 */, 18 },
+ /* 4750 */ { MAD_F(0x04df9baa) /* 0.304591812 */, 18 },
+ /* 4751 */ { MAD_F(0x04dff552) /* 0.304677314 */, 18 },
+
+ /* 4752 */ { MAD_F(0x04e04efb) /* 0.304762823 */, 18 },
+ /* 4753 */ { MAD_F(0x04e0a8a6) /* 0.304848337 */, 18 },
+ /* 4754 */ { MAD_F(0x04e10253) /* 0.304933858 */, 18 },
+ /* 4755 */ { MAD_F(0x04e15c01) /* 0.305019384 */, 18 },
+ /* 4756 */ { MAD_F(0x04e1b5b1) /* 0.305104917 */, 18 },
+ /* 4757 */ { MAD_F(0x04e20f63) /* 0.305190455 */, 18 },
+ /* 4758 */ { MAD_F(0x04e26916) /* 0.305275999 */, 18 },
+ /* 4759 */ { MAD_F(0x04e2c2cb) /* 0.305361550 */, 18 },
+ /* 4760 */ { MAD_F(0x04e31c81) /* 0.305447106 */, 18 },
+ /* 4761 */ { MAD_F(0x04e37639) /* 0.305532669 */, 18 },
+ /* 4762 */ { MAD_F(0x04e3cff3) /* 0.305618237 */, 18 },
+ /* 4763 */ { MAD_F(0x04e429ae) /* 0.305703811 */, 18 },
+ /* 4764 */ { MAD_F(0x04e4836b) /* 0.305789392 */, 18 },
+ /* 4765 */ { MAD_F(0x04e4dd29) /* 0.305874978 */, 18 },
+ /* 4766 */ { MAD_F(0x04e536e9) /* 0.305960571 */, 18 },
+ /* 4767 */ { MAD_F(0x04e590ab) /* 0.306046169 */, 18 },
+
+ /* 4768 */ { MAD_F(0x04e5ea6e) /* 0.306131773 */, 18 },
+ /* 4769 */ { MAD_F(0x04e64433) /* 0.306217383 */, 18 },
+ /* 4770 */ { MAD_F(0x04e69df9) /* 0.306303000 */, 18 },
+ /* 4771 */ { MAD_F(0x04e6f7c1) /* 0.306388622 */, 18 },
+ /* 4772 */ { MAD_F(0x04e7518b) /* 0.306474250 */, 18 },
+ /* 4773 */ { MAD_F(0x04e7ab56) /* 0.306559885 */, 18 },
+ /* 4774 */ { MAD_F(0x04e80523) /* 0.306645525 */, 18 },
+ /* 4775 */ { MAD_F(0x04e85ef2) /* 0.306731171 */, 18 },
+ /* 4776 */ { MAD_F(0x04e8b8c2) /* 0.306816823 */, 18 },
+ /* 4777 */ { MAD_F(0x04e91293) /* 0.306902481 */, 18 },
+ /* 4778 */ { MAD_F(0x04e96c67) /* 0.306988145 */, 18 },
+ /* 4779 */ { MAD_F(0x04e9c63b) /* 0.307073816 */, 18 },
+ /* 4780 */ { MAD_F(0x04ea2012) /* 0.307159492 */, 18 },
+ /* 4781 */ { MAD_F(0x04ea79ea) /* 0.307245174 */, 18 },
+ /* 4782 */ { MAD_F(0x04ead3c4) /* 0.307330862 */, 18 },
+ /* 4783 */ { MAD_F(0x04eb2d9f) /* 0.307416556 */, 18 },
+
+ /* 4784 */ { MAD_F(0x04eb877c) /* 0.307502256 */, 18 },
+ /* 4785 */ { MAD_F(0x04ebe15b) /* 0.307587962 */, 18 },
+ /* 4786 */ { MAD_F(0x04ec3b3b) /* 0.307673674 */, 18 },
+ /* 4787 */ { MAD_F(0x04ec951c) /* 0.307759392 */, 18 },
+ /* 4788 */ { MAD_F(0x04ecef00) /* 0.307845115 */, 18 },
+ /* 4789 */ { MAD_F(0x04ed48e5) /* 0.307930845 */, 18 },
+ /* 4790 */ { MAD_F(0x04eda2cb) /* 0.308016581 */, 18 },
+ /* 4791 */ { MAD_F(0x04edfcb3) /* 0.308102323 */, 18 },
+ /* 4792 */ { MAD_F(0x04ee569d) /* 0.308188071 */, 18 },
+ /* 4793 */ { MAD_F(0x04eeb088) /* 0.308273824 */, 18 },
+ /* 4794 */ { MAD_F(0x04ef0a75) /* 0.308359584 */, 18 },
+ /* 4795 */ { MAD_F(0x04ef6464) /* 0.308445350 */, 18 },
+ /* 4796 */ { MAD_F(0x04efbe54) /* 0.308531121 */, 18 },
+ /* 4797 */ { MAD_F(0x04f01846) /* 0.308616899 */, 18 },
+ /* 4798 */ { MAD_F(0x04f07239) /* 0.308702682 */, 18 },
+ /* 4799 */ { MAD_F(0x04f0cc2e) /* 0.308788472 */, 18 },
+
+ /* 4800 */ { MAD_F(0x04f12624) /* 0.308874267 */, 18 },
+ /* 4801 */ { MAD_F(0x04f1801d) /* 0.308960068 */, 18 },
+ /* 4802 */ { MAD_F(0x04f1da16) /* 0.309045876 */, 18 },
+ /* 4803 */ { MAD_F(0x04f23412) /* 0.309131689 */, 18 },
+ /* 4804 */ { MAD_F(0x04f28e0f) /* 0.309217508 */, 18 },
+ /* 4805 */ { MAD_F(0x04f2e80d) /* 0.309303334 */, 18 },
+ /* 4806 */ { MAD_F(0x04f3420d) /* 0.309389165 */, 18 },
+ /* 4807 */ { MAD_F(0x04f39c0f) /* 0.309475002 */, 18 },
+ /* 4808 */ { MAD_F(0x04f3f612) /* 0.309560845 */, 18 },
+ /* 4809 */ { MAD_F(0x04f45017) /* 0.309646694 */, 18 },
+ /* 4810 */ { MAD_F(0x04f4aa1e) /* 0.309732549 */, 18 },
+ /* 4811 */ { MAD_F(0x04f50426) /* 0.309818410 */, 18 },
+ /* 4812 */ { MAD_F(0x04f55e30) /* 0.309904277 */, 18 },
+ /* 4813 */ { MAD_F(0x04f5b83b) /* 0.309990150 */, 18 },
+ /* 4814 */ { MAD_F(0x04f61248) /* 0.310076028 */, 18 },
+ /* 4815 */ { MAD_F(0x04f66c56) /* 0.310161913 */, 18 },
+
+ /* 4816 */ { MAD_F(0x04f6c666) /* 0.310247804 */, 18 },
+ /* 4817 */ { MAD_F(0x04f72078) /* 0.310333700 */, 18 },
+ /* 4818 */ { MAD_F(0x04f77a8b) /* 0.310419603 */, 18 },
+ /* 4819 */ { MAD_F(0x04f7d4a0) /* 0.310505511 */, 18 },
+ /* 4820 */ { MAD_F(0x04f82eb7) /* 0.310591426 */, 18 },
+ /* 4821 */ { MAD_F(0x04f888cf) /* 0.310677346 */, 18 },
+ /* 4822 */ { MAD_F(0x04f8e2e9) /* 0.310763272 */, 18 },
+ /* 4823 */ { MAD_F(0x04f93d04) /* 0.310849205 */, 18 },
+ /* 4824 */ { MAD_F(0x04f99721) /* 0.310935143 */, 18 },
+ /* 4825 */ { MAD_F(0x04f9f13f) /* 0.311021087 */, 18 },
+ /* 4826 */ { MAD_F(0x04fa4b5f) /* 0.311107037 */, 18 },
+ /* 4827 */ { MAD_F(0x04faa581) /* 0.311192993 */, 18 },
+ /* 4828 */ { MAD_F(0x04faffa4) /* 0.311278955 */, 18 },
+ /* 4829 */ { MAD_F(0x04fb59c9) /* 0.311364923 */, 18 },
+ /* 4830 */ { MAD_F(0x04fbb3ef) /* 0.311450897 */, 18 },
+ /* 4831 */ { MAD_F(0x04fc0e17) /* 0.311536877 */, 18 },
+
+ /* 4832 */ { MAD_F(0x04fc6841) /* 0.311622862 */, 18 },
+ /* 4833 */ { MAD_F(0x04fcc26c) /* 0.311708854 */, 18 },
+ /* 4834 */ { MAD_F(0x04fd1c99) /* 0.311794851 */, 18 },
+ /* 4835 */ { MAD_F(0x04fd76c7) /* 0.311880855 */, 18 },
+ /* 4836 */ { MAD_F(0x04fdd0f7) /* 0.311966864 */, 18 },
+ /* 4837 */ { MAD_F(0x04fe2b29) /* 0.312052880 */, 18 },
+ /* 4838 */ { MAD_F(0x04fe855c) /* 0.312138901 */, 18 },
+ /* 4839 */ { MAD_F(0x04fedf91) /* 0.312224928 */, 18 },
+ /* 4840 */ { MAD_F(0x04ff39c7) /* 0.312310961 */, 18 },
+ /* 4841 */ { MAD_F(0x04ff93ff) /* 0.312397000 */, 18 },
+ /* 4842 */ { MAD_F(0x04ffee38) /* 0.312483045 */, 18 },
+ /* 4843 */ { MAD_F(0x05004874) /* 0.312569096 */, 18 },
+ /* 4844 */ { MAD_F(0x0500a2b0) /* 0.312655153 */, 18 },
+ /* 4845 */ { MAD_F(0x0500fcef) /* 0.312741216 */, 18 },
+ /* 4846 */ { MAD_F(0x0501572e) /* 0.312827284 */, 18 },
+ /* 4847 */ { MAD_F(0x0501b170) /* 0.312913359 */, 18 },
+
+ /* 4848 */ { MAD_F(0x05020bb3) /* 0.312999439 */, 18 },
+ /* 4849 */ { MAD_F(0x050265f8) /* 0.313085526 */, 18 },
+ /* 4850 */ { MAD_F(0x0502c03e) /* 0.313171618 */, 18 },
+ /* 4851 */ { MAD_F(0x05031a86) /* 0.313257716 */, 18 },
+ /* 4852 */ { MAD_F(0x050374cf) /* 0.313343820 */, 18 },
+ /* 4853 */ { MAD_F(0x0503cf1a) /* 0.313429931 */, 18 },
+ /* 4854 */ { MAD_F(0x05042967) /* 0.313516047 */, 18 },
+ /* 4855 */ { MAD_F(0x050483b5) /* 0.313602168 */, 18 },
+ /* 4856 */ { MAD_F(0x0504de05) /* 0.313688296 */, 18 },
+ /* 4857 */ { MAD_F(0x05053856) /* 0.313774430 */, 18 },
+ /* 4858 */ { MAD_F(0x050592a9) /* 0.313860570 */, 18 },
+ /* 4859 */ { MAD_F(0x0505ecfd) /* 0.313946715 */, 18 },
+ /* 4860 */ { MAD_F(0x05064754) /* 0.314032867 */, 18 },
+ /* 4861 */ { MAD_F(0x0506a1ab) /* 0.314119024 */, 18 },
+ /* 4862 */ { MAD_F(0x0506fc04) /* 0.314205187 */, 18 },
+ /* 4863 */ { MAD_F(0x0507565f) /* 0.314291357 */, 18 },
+
+ /* 4864 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 18 },
+ /* 4865 */ { MAD_F(0x05080b1a) /* 0.314463713 */, 18 },
+ /* 4866 */ { MAD_F(0x05086579) /* 0.314549900 */, 18 },
+ /* 4867 */ { MAD_F(0x0508bfdb) /* 0.314636092 */, 18 },
+ /* 4868 */ { MAD_F(0x05091a3d) /* 0.314722291 */, 18 },
+ /* 4869 */ { MAD_F(0x050974a2) /* 0.314808496 */, 18 },
+ /* 4870 */ { MAD_F(0x0509cf08) /* 0.314894706 */, 18 },
+ /* 4871 */ { MAD_F(0x050a296f) /* 0.314980923 */, 18 },
+ /* 4872 */ { MAD_F(0x050a83d8) /* 0.315067145 */, 18 },
+ /* 4873 */ { MAD_F(0x050ade43) /* 0.315153373 */, 18 },
+ /* 4874 */ { MAD_F(0x050b38af) /* 0.315239607 */, 18 },
+ /* 4875 */ { MAD_F(0x050b931d) /* 0.315325847 */, 18 },
+ /* 4876 */ { MAD_F(0x050bed8d) /* 0.315412093 */, 18 },
+ /* 4877 */ { MAD_F(0x050c47fe) /* 0.315498345 */, 18 },
+ /* 4878 */ { MAD_F(0x050ca271) /* 0.315584603 */, 18 },
+ /* 4879 */ { MAD_F(0x050cfce5) /* 0.315670866 */, 18 },
+
+ /* 4880 */ { MAD_F(0x050d575b) /* 0.315757136 */, 18 },
+ /* 4881 */ { MAD_F(0x050db1d2) /* 0.315843411 */, 18 },
+ /* 4882 */ { MAD_F(0x050e0c4b) /* 0.315929693 */, 18 },
+ /* 4883 */ { MAD_F(0x050e66c5) /* 0.316015980 */, 18 },
+ /* 4884 */ { MAD_F(0x050ec141) /* 0.316102273 */, 18 },
+ /* 4885 */ { MAD_F(0x050f1bbf) /* 0.316188572 */, 18 },
+ /* 4886 */ { MAD_F(0x050f763e) /* 0.316274877 */, 18 },
+ /* 4887 */ { MAD_F(0x050fd0bf) /* 0.316361187 */, 18 },
+ /* 4888 */ { MAD_F(0x05102b42) /* 0.316447504 */, 18 },
+ /* 4889 */ { MAD_F(0x051085c6) /* 0.316533826 */, 18 },
+ /* 4890 */ { MAD_F(0x0510e04b) /* 0.316620155 */, 18 },
+ /* 4891 */ { MAD_F(0x05113ad3) /* 0.316706489 */, 18 },
+ /* 4892 */ { MAD_F(0x0511955b) /* 0.316792829 */, 18 },
+ /* 4893 */ { MAD_F(0x0511efe6) /* 0.316879175 */, 18 },
+ /* 4894 */ { MAD_F(0x05124a72) /* 0.316965527 */, 18 },
+ /* 4895 */ { MAD_F(0x0512a4ff) /* 0.317051885 */, 18 },
+
+ /* 4896 */ { MAD_F(0x0512ff8e) /* 0.317138249 */, 18 },
+ /* 4897 */ { MAD_F(0x05135a1f) /* 0.317224618 */, 18 },
+ /* 4898 */ { MAD_F(0x0513b4b1) /* 0.317310994 */, 18 },
+ /* 4899 */ { MAD_F(0x05140f45) /* 0.317397375 */, 18 },
+ /* 4900 */ { MAD_F(0x051469da) /* 0.317483762 */, 18 },
+ /* 4901 */ { MAD_F(0x0514c471) /* 0.317570155 */, 18 },
+ /* 4902 */ { MAD_F(0x05151f0a) /* 0.317656554 */, 18 },
+ /* 4903 */ { MAD_F(0x051579a4) /* 0.317742959 */, 18 },
+ /* 4904 */ { MAD_F(0x0515d440) /* 0.317829370 */, 18 },
+ /* 4905 */ { MAD_F(0x05162edd) /* 0.317915786 */, 18 },
+ /* 4906 */ { MAD_F(0x0516897c) /* 0.318002209 */, 18 },
+ /* 4907 */ { MAD_F(0x0516e41c) /* 0.318088637 */, 18 },
+ /* 4908 */ { MAD_F(0x05173ebe) /* 0.318175071 */, 18 },
+ /* 4909 */ { MAD_F(0x05179962) /* 0.318261511 */, 18 },
+ /* 4910 */ { MAD_F(0x0517f407) /* 0.318347957 */, 18 },
+ /* 4911 */ { MAD_F(0x05184eae) /* 0.318434409 */, 18 },
+
+ /* 4912 */ { MAD_F(0x0518a956) /* 0.318520867 */, 18 },
+ /* 4913 */ { MAD_F(0x05190400) /* 0.318607330 */, 18 },
+ /* 4914 */ { MAD_F(0x05195eab) /* 0.318693800 */, 18 },
+ /* 4915 */ { MAD_F(0x0519b958) /* 0.318780275 */, 18 },
+ /* 4916 */ { MAD_F(0x051a1407) /* 0.318866756 */, 18 },
+ /* 4917 */ { MAD_F(0x051a6eb7) /* 0.318953243 */, 18 },
+ /* 4918 */ { MAD_F(0x051ac969) /* 0.319039736 */, 18 },
+ /* 4919 */ { MAD_F(0x051b241c) /* 0.319126235 */, 18 },
+ /* 4920 */ { MAD_F(0x051b7ed1) /* 0.319212739 */, 18 },
+ /* 4921 */ { MAD_F(0x051bd987) /* 0.319299250 */, 18 },
+ /* 4922 */ { MAD_F(0x051c3440) /* 0.319385766 */, 18 },
+ /* 4923 */ { MAD_F(0x051c8ef9) /* 0.319472288 */, 18 },
+ /* 4924 */ { MAD_F(0x051ce9b4) /* 0.319558816 */, 18 },
+ /* 4925 */ { MAD_F(0x051d4471) /* 0.319645350 */, 18 },
+ /* 4926 */ { MAD_F(0x051d9f2f) /* 0.319731890 */, 18 },
+ /* 4927 */ { MAD_F(0x051df9ef) /* 0.319818435 */, 18 },
+
+ /* 4928 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 18 },
+ /* 4929 */ { MAD_F(0x051eaf74) /* 0.319991544 */, 18 },
+ /* 4930 */ { MAD_F(0x051f0a38) /* 0.320078107 */, 18 },
+ /* 4931 */ { MAD_F(0x051f64ff) /* 0.320164676 */, 18 },
+ /* 4932 */ { MAD_F(0x051fbfc6) /* 0.320251251 */, 18 },
+ /* 4933 */ { MAD_F(0x05201a90) /* 0.320337832 */, 18 },
+ /* 4934 */ { MAD_F(0x0520755b) /* 0.320424419 */, 18 },
+ /* 4935 */ { MAD_F(0x0520d027) /* 0.320511011 */, 18 },
+ /* 4936 */ { MAD_F(0x05212af5) /* 0.320597609 */, 18 },
+ /* 4937 */ { MAD_F(0x052185c5) /* 0.320684213 */, 18 },
+ /* 4938 */ { MAD_F(0x0521e096) /* 0.320770823 */, 18 },
+ /* 4939 */ { MAD_F(0x05223b69) /* 0.320857439 */, 18 },
+ /* 4940 */ { MAD_F(0x0522963d) /* 0.320944061 */, 18 },
+ /* 4941 */ { MAD_F(0x0522f113) /* 0.321030688 */, 18 },
+ /* 4942 */ { MAD_F(0x05234bea) /* 0.321117322 */, 18 },
+ /* 4943 */ { MAD_F(0x0523a6c3) /* 0.321203961 */, 18 },
+
+ /* 4944 */ { MAD_F(0x0524019e) /* 0.321290606 */, 18 },
+ /* 4945 */ { MAD_F(0x05245c7a) /* 0.321377257 */, 18 },
+ /* 4946 */ { MAD_F(0x0524b758) /* 0.321463913 */, 18 },
+ /* 4947 */ { MAD_F(0x05251237) /* 0.321550576 */, 18 },
+ /* 4948 */ { MAD_F(0x05256d18) /* 0.321637244 */, 18 },
+ /* 4949 */ { MAD_F(0x0525c7fb) /* 0.321723919 */, 18 },
+ /* 4950 */ { MAD_F(0x052622df) /* 0.321810599 */, 18 },
+ /* 4951 */ { MAD_F(0x05267dc4) /* 0.321897285 */, 18 },
+ /* 4952 */ { MAD_F(0x0526d8ab) /* 0.321983976 */, 18 },
+ /* 4953 */ { MAD_F(0x05273394) /* 0.322070674 */, 18 },
+ /* 4954 */ { MAD_F(0x05278e7e) /* 0.322157377 */, 18 },
+ /* 4955 */ { MAD_F(0x0527e96a) /* 0.322244087 */, 18 },
+ /* 4956 */ { MAD_F(0x05284457) /* 0.322330802 */, 18 },
+ /* 4957 */ { MAD_F(0x05289f46) /* 0.322417523 */, 18 },
+ /* 4958 */ { MAD_F(0x0528fa37) /* 0.322504249 */, 18 },
+ /* 4959 */ { MAD_F(0x05295529) /* 0.322590982 */, 18 },
+
+ /* 4960 */ { MAD_F(0x0529b01d) /* 0.322677720 */, 18 },
+ /* 4961 */ { MAD_F(0x052a0b12) /* 0.322764465 */, 18 },
+ /* 4962 */ { MAD_F(0x052a6609) /* 0.322851215 */, 18 },
+ /* 4963 */ { MAD_F(0x052ac101) /* 0.322937971 */, 18 },
+ /* 4964 */ { MAD_F(0x052b1bfb) /* 0.323024732 */, 18 },
+ /* 4965 */ { MAD_F(0x052b76f7) /* 0.323111500 */, 18 },
+ /* 4966 */ { MAD_F(0x052bd1f4) /* 0.323198273 */, 18 },
+ /* 4967 */ { MAD_F(0x052c2cf2) /* 0.323285052 */, 18 },
+ /* 4968 */ { MAD_F(0x052c87f2) /* 0.323371837 */, 18 },
+ /* 4969 */ { MAD_F(0x052ce2f4) /* 0.323458628 */, 18 },
+ /* 4970 */ { MAD_F(0x052d3df7) /* 0.323545425 */, 18 },
+ /* 4971 */ { MAD_F(0x052d98fc) /* 0.323632227 */, 18 },
+ /* 4972 */ { MAD_F(0x052df403) /* 0.323719036 */, 18 },
+ /* 4973 */ { MAD_F(0x052e4f0b) /* 0.323805850 */, 18 },
+ /* 4974 */ { MAD_F(0x052eaa14) /* 0.323892670 */, 18 },
+ /* 4975 */ { MAD_F(0x052f051f) /* 0.323979496 */, 18 },
+
+ /* 4976 */ { MAD_F(0x052f602c) /* 0.324066327 */, 18 },
+ /* 4977 */ { MAD_F(0x052fbb3a) /* 0.324153165 */, 18 },
+ /* 4978 */ { MAD_F(0x0530164a) /* 0.324240008 */, 18 },
+ /* 4979 */ { MAD_F(0x0530715b) /* 0.324326857 */, 18 },
+ /* 4980 */ { MAD_F(0x0530cc6e) /* 0.324413712 */, 18 },
+ /* 4981 */ { MAD_F(0x05312783) /* 0.324500572 */, 18 },
+ /* 4982 */ { MAD_F(0x05318299) /* 0.324587439 */, 18 },
+ /* 4983 */ { MAD_F(0x0531ddb0) /* 0.324674311 */, 18 },
+ /* 4984 */ { MAD_F(0x053238ca) /* 0.324761189 */, 18 },
+ /* 4985 */ { MAD_F(0x053293e4) /* 0.324848073 */, 18 },
+ /* 4986 */ { MAD_F(0x0532ef01) /* 0.324934963 */, 18 },
+ /* 4987 */ { MAD_F(0x05334a1e) /* 0.325021858 */, 18 },
+ /* 4988 */ { MAD_F(0x0533a53e) /* 0.325108760 */, 18 },
+ /* 4989 */ { MAD_F(0x0534005f) /* 0.325195667 */, 18 },
+ /* 4990 */ { MAD_F(0x05345b81) /* 0.325282580 */, 18 },
+ /* 4991 */ { MAD_F(0x0534b6a5) /* 0.325369498 */, 18 },
+
+ /* 4992 */ { MAD_F(0x053511cb) /* 0.325456423 */, 18 },
+ /* 4993 */ { MAD_F(0x05356cf2) /* 0.325543353 */, 18 },
+ /* 4994 */ { MAD_F(0x0535c81b) /* 0.325630290 */, 18 },
+ /* 4995 */ { MAD_F(0x05362345) /* 0.325717232 */, 18 },
+ /* 4996 */ { MAD_F(0x05367e71) /* 0.325804179 */, 18 },
+ /* 4997 */ { MAD_F(0x0536d99f) /* 0.325891133 */, 18 },
+ /* 4998 */ { MAD_F(0x053734ce) /* 0.325978092 */, 18 },
+ /* 4999 */ { MAD_F(0x05378ffe) /* 0.326065057 */, 18 },
+ /* 5000 */ { MAD_F(0x0537eb30) /* 0.326152028 */, 18 },
+ /* 5001 */ { MAD_F(0x05384664) /* 0.326239005 */, 18 },
+ /* 5002 */ { MAD_F(0x0538a199) /* 0.326325988 */, 18 },
+ /* 5003 */ { MAD_F(0x0538fcd0) /* 0.326412976 */, 18 },
+ /* 5004 */ { MAD_F(0x05395808) /* 0.326499970 */, 18 },
+ /* 5005 */ { MAD_F(0x0539b342) /* 0.326586970 */, 18 },
+ /* 5006 */ { MAD_F(0x053a0e7d) /* 0.326673976 */, 18 },
+ /* 5007 */ { MAD_F(0x053a69ba) /* 0.326760988 */, 18 },
+
+ /* 5008 */ { MAD_F(0x053ac4f9) /* 0.326848005 */, 18 },
+ /* 5009 */ { MAD_F(0x053b2039) /* 0.326935028 */, 18 },
+ /* 5010 */ { MAD_F(0x053b7b7b) /* 0.327022057 */, 18 },
+ /* 5011 */ { MAD_F(0x053bd6be) /* 0.327109092 */, 18 },
+ /* 5012 */ { MAD_F(0x053c3203) /* 0.327196132 */, 18 },
+ /* 5013 */ { MAD_F(0x053c8d49) /* 0.327283178 */, 18 },
+ /* 5014 */ { MAD_F(0x053ce891) /* 0.327370231 */, 18 },
+ /* 5015 */ { MAD_F(0x053d43da) /* 0.327457288 */, 18 },
+ /* 5016 */ { MAD_F(0x053d9f25) /* 0.327544352 */, 18 },
+ /* 5017 */ { MAD_F(0x053dfa72) /* 0.327631421 */, 18 },
+ /* 5018 */ { MAD_F(0x053e55c0) /* 0.327718497 */, 18 },
+ /* 5019 */ { MAD_F(0x053eb10f) /* 0.327805578 */, 18 },
+ /* 5020 */ { MAD_F(0x053f0c61) /* 0.327892665 */, 18 },
+ /* 5021 */ { MAD_F(0x053f67b3) /* 0.327979757 */, 18 },
+ /* 5022 */ { MAD_F(0x053fc308) /* 0.328066855 */, 18 },
+ /* 5023 */ { MAD_F(0x05401e5e) /* 0.328153960 */, 18 },
+
+ /* 5024 */ { MAD_F(0x054079b5) /* 0.328241070 */, 18 },
+ /* 5025 */ { MAD_F(0x0540d50e) /* 0.328328185 */, 18 },
+ /* 5026 */ { MAD_F(0x05413068) /* 0.328415307 */, 18 },
+ /* 5027 */ { MAD_F(0x05418bc4) /* 0.328502434 */, 18 },
+ /* 5028 */ { MAD_F(0x0541e722) /* 0.328589567 */, 18 },
+ /* 5029 */ { MAD_F(0x05424281) /* 0.328676706 */, 18 },
+ /* 5030 */ { MAD_F(0x05429de2) /* 0.328763850 */, 18 },
+ /* 5031 */ { MAD_F(0x0542f944) /* 0.328851001 */, 18 },
+ /* 5032 */ { MAD_F(0x054354a8) /* 0.328938157 */, 18 },
+ /* 5033 */ { MAD_F(0x0543b00d) /* 0.329025319 */, 18 },
+ /* 5034 */ { MAD_F(0x05440b74) /* 0.329112486 */, 18 },
+ /* 5035 */ { MAD_F(0x054466dd) /* 0.329199660 */, 18 },
+ /* 5036 */ { MAD_F(0x0544c247) /* 0.329286839 */, 18 },
+ /* 5037 */ { MAD_F(0x05451db2) /* 0.329374024 */, 18 },
+ /* 5038 */ { MAD_F(0x0545791f) /* 0.329461215 */, 18 },
+ /* 5039 */ { MAD_F(0x0545d48e) /* 0.329548411 */, 18 },
+
+ /* 5040 */ { MAD_F(0x05462ffe) /* 0.329635614 */, 18 },
+ /* 5041 */ { MAD_F(0x05468b70) /* 0.329722822 */, 18 },
+ /* 5042 */ { MAD_F(0x0546e6e3) /* 0.329810036 */, 18 },
+ /* 5043 */ { MAD_F(0x05474258) /* 0.329897255 */, 18 },
+ /* 5044 */ { MAD_F(0x05479dce) /* 0.329984481 */, 18 },
+ /* 5045 */ { MAD_F(0x0547f946) /* 0.330071712 */, 18 },
+ /* 5046 */ { MAD_F(0x054854c0) /* 0.330158949 */, 18 },
+ /* 5047 */ { MAD_F(0x0548b03b) /* 0.330246191 */, 18 },
+ /* 5048 */ { MAD_F(0x05490bb7) /* 0.330333440 */, 18 },
+ /* 5049 */ { MAD_F(0x05496735) /* 0.330420694 */, 18 },
+ /* 5050 */ { MAD_F(0x0549c2b5) /* 0.330507954 */, 18 },
+ /* 5051 */ { MAD_F(0x054a1e36) /* 0.330595220 */, 18 },
+ /* 5052 */ { MAD_F(0x054a79b9) /* 0.330682491 */, 18 },
+ /* 5053 */ { MAD_F(0x054ad53d) /* 0.330769768 */, 18 },
+ /* 5054 */ { MAD_F(0x054b30c3) /* 0.330857051 */, 18 },
+ /* 5055 */ { MAD_F(0x054b8c4b) /* 0.330944340 */, 18 },
+
+ /* 5056 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 18 },
+ /* 5057 */ { MAD_F(0x054c435e) /* 0.331118935 */, 18 },
+ /* 5058 */ { MAD_F(0x054c9eea) /* 0.331206241 */, 18 },
+ /* 5059 */ { MAD_F(0x054cfa78) /* 0.331293553 */, 18 },
+ /* 5060 */ { MAD_F(0x054d5607) /* 0.331380870 */, 18 },
+ /* 5061 */ { MAD_F(0x054db197) /* 0.331468193 */, 18 },
+ /* 5062 */ { MAD_F(0x054e0d2a) /* 0.331555522 */, 18 },
+ /* 5063 */ { MAD_F(0x054e68bd) /* 0.331642857 */, 18 },
+ /* 5064 */ { MAD_F(0x054ec453) /* 0.331730198 */, 18 },
+ /* 5065 */ { MAD_F(0x054f1fe9) /* 0.331817544 */, 18 },
+ /* 5066 */ { MAD_F(0x054f7b82) /* 0.331904896 */, 18 },
+ /* 5067 */ { MAD_F(0x054fd71c) /* 0.331992254 */, 18 },
+ /* 5068 */ { MAD_F(0x055032b7) /* 0.332079617 */, 18 },
+ /* 5069 */ { MAD_F(0x05508e54) /* 0.332166986 */, 18 },
+ /* 5070 */ { MAD_F(0x0550e9f3) /* 0.332254361 */, 18 },
+ /* 5071 */ { MAD_F(0x05514593) /* 0.332341742 */, 18 },
+
+ /* 5072 */ { MAD_F(0x0551a134) /* 0.332429129 */, 18 },
+ /* 5073 */ { MAD_F(0x0551fcd8) /* 0.332516521 */, 18 },
+ /* 5074 */ { MAD_F(0x0552587c) /* 0.332603919 */, 18 },
+ /* 5075 */ { MAD_F(0x0552b423) /* 0.332691323 */, 18 },
+ /* 5076 */ { MAD_F(0x05530fca) /* 0.332778732 */, 18 },
+ /* 5077 */ { MAD_F(0x05536b74) /* 0.332866147 */, 18 },
+ /* 5078 */ { MAD_F(0x0553c71f) /* 0.332953568 */, 18 },
+ /* 5079 */ { MAD_F(0x055422cb) /* 0.333040995 */, 18 },
+ /* 5080 */ { MAD_F(0x05547e79) /* 0.333128427 */, 18 },
+ /* 5081 */ { MAD_F(0x0554da29) /* 0.333215865 */, 18 },
+ /* 5082 */ { MAD_F(0x055535da) /* 0.333303309 */, 18 },
+ /* 5083 */ { MAD_F(0x0555918c) /* 0.333390759 */, 18 },
+ /* 5084 */ { MAD_F(0x0555ed40) /* 0.333478214 */, 18 },
+ /* 5085 */ { MAD_F(0x055648f6) /* 0.333565675 */, 18 },
+ /* 5086 */ { MAD_F(0x0556a4ad) /* 0.333653142 */, 18 },
+ /* 5087 */ { MAD_F(0x05570066) /* 0.333740615 */, 18 },
+
+ /* 5088 */ { MAD_F(0x05575c20) /* 0.333828093 */, 18 },
+ /* 5089 */ { MAD_F(0x0557b7dc) /* 0.333915577 */, 18 },
+ /* 5090 */ { MAD_F(0x05581399) /* 0.334003067 */, 18 },
+ /* 5091 */ { MAD_F(0x05586f58) /* 0.334090562 */, 18 },
+ /* 5092 */ { MAD_F(0x0558cb19) /* 0.334178063 */, 18 },
+ /* 5093 */ { MAD_F(0x055926db) /* 0.334265570 */, 18 },
+ /* 5094 */ { MAD_F(0x0559829e) /* 0.334353083 */, 18 },
+ /* 5095 */ { MAD_F(0x0559de63) /* 0.334440601 */, 18 },
+ /* 5096 */ { MAD_F(0x055a3a2a) /* 0.334528126 */, 18 },
+ /* 5097 */ { MAD_F(0x055a95f2) /* 0.334615655 */, 18 },
+ /* 5098 */ { MAD_F(0x055af1bb) /* 0.334703191 */, 18 },
+ /* 5099 */ { MAD_F(0x055b4d87) /* 0.334790732 */, 18 },
+ /* 5100 */ { MAD_F(0x055ba953) /* 0.334878279 */, 18 },
+ /* 5101 */ { MAD_F(0x055c0522) /* 0.334965832 */, 18 },
+ /* 5102 */ { MAD_F(0x055c60f1) /* 0.335053391 */, 18 },
+ /* 5103 */ { MAD_F(0x055cbcc3) /* 0.335140955 */, 18 },
+
+ /* 5104 */ { MAD_F(0x055d1896) /* 0.335228525 */, 18 },
+ /* 5105 */ { MAD_F(0x055d746a) /* 0.335316100 */, 18 },
+ /* 5106 */ { MAD_F(0x055dd040) /* 0.335403682 */, 18 },
+ /* 5107 */ { MAD_F(0x055e2c17) /* 0.335491269 */, 18 },
+ /* 5108 */ { MAD_F(0x055e87f0) /* 0.335578861 */, 18 },
+ /* 5109 */ { MAD_F(0x055ee3cb) /* 0.335666460 */, 18 },
+ /* 5110 */ { MAD_F(0x055f3fa7) /* 0.335754064 */, 18 },
+ /* 5111 */ { MAD_F(0x055f9b85) /* 0.335841674 */, 18 },
+ /* 5112 */ { MAD_F(0x055ff764) /* 0.335929290 */, 18 },
+ /* 5113 */ { MAD_F(0x05605344) /* 0.336016911 */, 18 },
+ /* 5114 */ { MAD_F(0x0560af27) /* 0.336104538 */, 18 },
+ /* 5115 */ { MAD_F(0x05610b0a) /* 0.336192171 */, 18 },
+ /* 5116 */ { MAD_F(0x056166f0) /* 0.336279809 */, 18 },
+ /* 5117 */ { MAD_F(0x0561c2d7) /* 0.336367453 */, 18 },
+ /* 5118 */ { MAD_F(0x05621ebf) /* 0.336455103 */, 18 },
+ /* 5119 */ { MAD_F(0x05627aa9) /* 0.336542759 */, 18 },
+
+ /* 5120 */ { MAD_F(0x0562d694) /* 0.336630420 */, 18 },
+ /* 5121 */ { MAD_F(0x05633281) /* 0.336718087 */, 18 },
+ /* 5122 */ { MAD_F(0x05638e70) /* 0.336805760 */, 18 },
+ /* 5123 */ { MAD_F(0x0563ea60) /* 0.336893439 */, 18 },
+ /* 5124 */ { MAD_F(0x05644651) /* 0.336981123 */, 18 },
+ /* 5125 */ { MAD_F(0x0564a244) /* 0.337068813 */, 18 },
+ /* 5126 */ { MAD_F(0x0564fe39) /* 0.337156508 */, 18 },
+ /* 5127 */ { MAD_F(0x05655a2f) /* 0.337244209 */, 18 },
+ /* 5128 */ { MAD_F(0x0565b627) /* 0.337331916 */, 18 },
+ /* 5129 */ { MAD_F(0x05661220) /* 0.337419629 */, 18 },
+ /* 5130 */ { MAD_F(0x05666e1a) /* 0.337507347 */, 18 },
+ /* 5131 */ { MAD_F(0x0566ca17) /* 0.337595071 */, 18 },
+ /* 5132 */ { MAD_F(0x05672614) /* 0.337682801 */, 18 },
+ /* 5133 */ { MAD_F(0x05678214) /* 0.337770537 */, 18 },
+ /* 5134 */ { MAD_F(0x0567de15) /* 0.337858278 */, 18 },
+ /* 5135 */ { MAD_F(0x05683a17) /* 0.337946025 */, 18 },
+
+ /* 5136 */ { MAD_F(0x0568961b) /* 0.338033777 */, 18 },
+ /* 5137 */ { MAD_F(0x0568f220) /* 0.338121535 */, 18 },
+ /* 5138 */ { MAD_F(0x05694e27) /* 0.338209299 */, 18 },
+ /* 5139 */ { MAD_F(0x0569aa30) /* 0.338297069 */, 18 },
+ /* 5140 */ { MAD_F(0x056a063a) /* 0.338384844 */, 18 },
+ /* 5141 */ { MAD_F(0x056a6245) /* 0.338472625 */, 18 },
+ /* 5142 */ { MAD_F(0x056abe52) /* 0.338560412 */, 18 },
+ /* 5143 */ { MAD_F(0x056b1a61) /* 0.338648204 */, 18 },
+ /* 5144 */ { MAD_F(0x056b7671) /* 0.338736002 */, 18 },
+ /* 5145 */ { MAD_F(0x056bd283) /* 0.338823806 */, 18 },
+ /* 5146 */ { MAD_F(0x056c2e96) /* 0.338911616 */, 18 },
+ /* 5147 */ { MAD_F(0x056c8aab) /* 0.338999431 */, 18 },
+ /* 5148 */ { MAD_F(0x056ce6c1) /* 0.339087252 */, 18 },
+ /* 5149 */ { MAD_F(0x056d42d9) /* 0.339175078 */, 18 },
+ /* 5150 */ { MAD_F(0x056d9ef2) /* 0.339262910 */, 18 },
+ /* 5151 */ { MAD_F(0x056dfb0d) /* 0.339350748 */, 18 },
+
+ /* 5152 */ { MAD_F(0x056e5729) /* 0.339438592 */, 18 },
+ /* 5153 */ { MAD_F(0x056eb347) /* 0.339526441 */, 18 },
+ /* 5154 */ { MAD_F(0x056f0f66) /* 0.339614296 */, 18 },
+ /* 5155 */ { MAD_F(0x056f6b87) /* 0.339702157 */, 18 },
+ /* 5156 */ { MAD_F(0x056fc7aa) /* 0.339790023 */, 18 },
+ /* 5157 */ { MAD_F(0x057023cd) /* 0.339877895 */, 18 },
+ /* 5158 */ { MAD_F(0x05707ff3) /* 0.339965773 */, 18 },
+ /* 5159 */ { MAD_F(0x0570dc1a) /* 0.340053656 */, 18 },
+ /* 5160 */ { MAD_F(0x05713843) /* 0.340141545 */, 18 },
+ /* 5161 */ { MAD_F(0x0571946d) /* 0.340229440 */, 18 },
+ /* 5162 */ { MAD_F(0x0571f098) /* 0.340317340 */, 18 },
+ /* 5163 */ { MAD_F(0x05724cc5) /* 0.340405246 */, 18 },
+ /* 5164 */ { MAD_F(0x0572a8f4) /* 0.340493158 */, 18 },
+ /* 5165 */ { MAD_F(0x05730524) /* 0.340581075 */, 18 },
+ /* 5166 */ { MAD_F(0x05736156) /* 0.340668999 */, 18 },
+ /* 5167 */ { MAD_F(0x0573bd89) /* 0.340756927 */, 18 },
+
+ /* 5168 */ { MAD_F(0x057419be) /* 0.340844862 */, 18 },
+ /* 5169 */ { MAD_F(0x057475f4) /* 0.340932802 */, 18 },
+ /* 5170 */ { MAD_F(0x0574d22c) /* 0.341020748 */, 18 },
+ /* 5171 */ { MAD_F(0x05752e65) /* 0.341108699 */, 18 },
+ /* 5172 */ { MAD_F(0x05758aa0) /* 0.341196656 */, 18 },
+ /* 5173 */ { MAD_F(0x0575e6dc) /* 0.341284619 */, 18 },
+ /* 5174 */ { MAD_F(0x0576431a) /* 0.341372587 */, 18 },
+ /* 5175 */ { MAD_F(0x05769f59) /* 0.341460562 */, 18 },
+ /* 5176 */ { MAD_F(0x0576fb9a) /* 0.341548541 */, 18 },
+ /* 5177 */ { MAD_F(0x057757dd) /* 0.341636527 */, 18 },
+ /* 5178 */ { MAD_F(0x0577b421) /* 0.341724518 */, 18 },
+ /* 5179 */ { MAD_F(0x05781066) /* 0.341812515 */, 18 },
+ /* 5180 */ { MAD_F(0x05786cad) /* 0.341900517 */, 18 },
+ /* 5181 */ { MAD_F(0x0578c8f5) /* 0.341988525 */, 18 },
+ /* 5182 */ { MAD_F(0x0579253f) /* 0.342076539 */, 18 },
+ /* 5183 */ { MAD_F(0x0579818b) /* 0.342164558 */, 18 },
+
+ /* 5184 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 18 },
+ /* 5185 */ { MAD_F(0x057a3a27) /* 0.342340614 */, 18 },
+ /* 5186 */ { MAD_F(0x057a9677) /* 0.342428651 */, 18 },
+ /* 5187 */ { MAD_F(0x057af2c8) /* 0.342516693 */, 18 },
+ /* 5188 */ { MAD_F(0x057b4f1c) /* 0.342604741 */, 18 },
+ /* 5189 */ { MAD_F(0x057bab70) /* 0.342692794 */, 18 },
+ /* 5190 */ { MAD_F(0x057c07c6) /* 0.342780853 */, 18 },
+ /* 5191 */ { MAD_F(0x057c641e) /* 0.342868918 */, 18 },
+ /* 5192 */ { MAD_F(0x057cc077) /* 0.342956988 */, 18 },
+ /* 5193 */ { MAD_F(0x057d1cd2) /* 0.343045064 */, 18 },
+ /* 5194 */ { MAD_F(0x057d792e) /* 0.343133146 */, 18 },
+ /* 5195 */ { MAD_F(0x057dd58c) /* 0.343221233 */, 18 },
+ /* 5196 */ { MAD_F(0x057e31eb) /* 0.343309326 */, 18 },
+ /* 5197 */ { MAD_F(0x057e8e4c) /* 0.343397425 */, 18 },
+ /* 5198 */ { MAD_F(0x057eeaae) /* 0.343485529 */, 18 },
+ /* 5199 */ { MAD_F(0x057f4712) /* 0.343573639 */, 18 },
+
+ /* 5200 */ { MAD_F(0x057fa378) /* 0.343661754 */, 18 },
+ /* 5201 */ { MAD_F(0x057fffde) /* 0.343749876 */, 18 },
+ /* 5202 */ { MAD_F(0x05805c47) /* 0.343838003 */, 18 },
+ /* 5203 */ { MAD_F(0x0580b8b1) /* 0.343926135 */, 18 },
+ /* 5204 */ { MAD_F(0x0581151c) /* 0.344014273 */, 18 },
+ /* 5205 */ { MAD_F(0x05817189) /* 0.344102417 */, 18 },
+ /* 5206 */ { MAD_F(0x0581cdf7) /* 0.344190566 */, 18 },
+ /* 5207 */ { MAD_F(0x05822a67) /* 0.344278722 */, 18 },
+ /* 5208 */ { MAD_F(0x058286d9) /* 0.344366882 */, 18 },
+ /* 5209 */ { MAD_F(0x0582e34c) /* 0.344455049 */, 18 },
+ /* 5210 */ { MAD_F(0x05833fc0) /* 0.344543221 */, 18 },
+ /* 5211 */ { MAD_F(0x05839c36) /* 0.344631398 */, 18 },
+ /* 5212 */ { MAD_F(0x0583f8ae) /* 0.344719582 */, 18 },
+ /* 5213 */ { MAD_F(0x05845527) /* 0.344807771 */, 18 },
+ /* 5214 */ { MAD_F(0x0584b1a1) /* 0.344895965 */, 18 },
+ /* 5215 */ { MAD_F(0x05850e1e) /* 0.344984165 */, 18 },
+
+ /* 5216 */ { MAD_F(0x05856a9b) /* 0.345072371 */, 18 },
+ /* 5217 */ { MAD_F(0x0585c71a) /* 0.345160583 */, 18 },
+ /* 5218 */ { MAD_F(0x0586239b) /* 0.345248800 */, 18 },
+ /* 5219 */ { MAD_F(0x0586801d) /* 0.345337023 */, 18 },
+ /* 5220 */ { MAD_F(0x0586dca1) /* 0.345425251 */, 18 },
+ /* 5221 */ { MAD_F(0x05873926) /* 0.345513485 */, 18 },
+ /* 5222 */ { MAD_F(0x058795ac) /* 0.345601725 */, 18 },
+ /* 5223 */ { MAD_F(0x0587f235) /* 0.345689970 */, 18 },
+ /* 5224 */ { MAD_F(0x05884ebe) /* 0.345778221 */, 18 },
+ /* 5225 */ { MAD_F(0x0588ab49) /* 0.345866478 */, 18 },
+ /* 5226 */ { MAD_F(0x058907d6) /* 0.345954740 */, 18 },
+ /* 5227 */ { MAD_F(0x05896464) /* 0.346043008 */, 18 },
+ /* 5228 */ { MAD_F(0x0589c0f4) /* 0.346131281 */, 18 },
+ /* 5229 */ { MAD_F(0x058a1d85) /* 0.346219560 */, 18 },
+ /* 5230 */ { MAD_F(0x058a7a18) /* 0.346307845 */, 18 },
+ /* 5231 */ { MAD_F(0x058ad6ac) /* 0.346396135 */, 18 },
+
+ /* 5232 */ { MAD_F(0x058b3342) /* 0.346484431 */, 18 },
+ /* 5233 */ { MAD_F(0x058b8fd9) /* 0.346572733 */, 18 },
+ /* 5234 */ { MAD_F(0x058bec72) /* 0.346661040 */, 18 },
+ /* 5235 */ { MAD_F(0x058c490c) /* 0.346749353 */, 18 },
+ /* 5236 */ { MAD_F(0x058ca5a8) /* 0.346837671 */, 18 },
+ /* 5237 */ { MAD_F(0x058d0246) /* 0.346925996 */, 18 },
+ /* 5238 */ { MAD_F(0x058d5ee4) /* 0.347014325 */, 18 },
+ /* 5239 */ { MAD_F(0x058dbb85) /* 0.347102661 */, 18 },
+ /* 5240 */ { MAD_F(0x058e1827) /* 0.347191002 */, 18 },
+ /* 5241 */ { MAD_F(0x058e74ca) /* 0.347279348 */, 18 },
+ /* 5242 */ { MAD_F(0x058ed16f) /* 0.347367700 */, 18 },
+ /* 5243 */ { MAD_F(0x058f2e15) /* 0.347456058 */, 18 },
+ /* 5244 */ { MAD_F(0x058f8abd) /* 0.347544422 */, 18 },
+ /* 5245 */ { MAD_F(0x058fe766) /* 0.347632791 */, 18 },
+ /* 5246 */ { MAD_F(0x05904411) /* 0.347721165 */, 18 },
+ /* 5247 */ { MAD_F(0x0590a0be) /* 0.347809546 */, 18 },
+
+ /* 5248 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 18 },
+ /* 5249 */ { MAD_F(0x05915a1b) /* 0.347986323 */, 18 },
+ /* 5250 */ { MAD_F(0x0591b6cc) /* 0.348074720 */, 18 },
+ /* 5251 */ { MAD_F(0x0592137e) /* 0.348163123 */, 18 },
+ /* 5252 */ { MAD_F(0x05927032) /* 0.348251531 */, 18 },
+ /* 5253 */ { MAD_F(0x0592cce8) /* 0.348339945 */, 18 },
+ /* 5254 */ { MAD_F(0x0593299f) /* 0.348428365 */, 18 },
+ /* 5255 */ { MAD_F(0x05938657) /* 0.348516790 */, 18 },
+ /* 5256 */ { MAD_F(0x0593e311) /* 0.348605221 */, 18 },
+ /* 5257 */ { MAD_F(0x05943fcd) /* 0.348693657 */, 18 },
+ /* 5258 */ { MAD_F(0x05949c8a) /* 0.348782099 */, 18 },
+ /* 5259 */ { MAD_F(0x0594f948) /* 0.348870547 */, 18 },
+ /* 5260 */ { MAD_F(0x05955608) /* 0.348959000 */, 18 },
+ /* 5261 */ { MAD_F(0x0595b2ca) /* 0.349047459 */, 18 },
+ /* 5262 */ { MAD_F(0x05960f8c) /* 0.349135923 */, 18 },
+ /* 5263 */ { MAD_F(0x05966c51) /* 0.349224393 */, 18 },
+
+ /* 5264 */ { MAD_F(0x0596c917) /* 0.349312869 */, 18 },
+ /* 5265 */ { MAD_F(0x059725de) /* 0.349401350 */, 18 },
+ /* 5266 */ { MAD_F(0x059782a7) /* 0.349489837 */, 18 },
+ /* 5267 */ { MAD_F(0x0597df72) /* 0.349578329 */, 18 },
+ /* 5268 */ { MAD_F(0x05983c3e) /* 0.349666827 */, 18 },
+ /* 5269 */ { MAD_F(0x0598990c) /* 0.349755331 */, 18 },
+ /* 5270 */ { MAD_F(0x0598f5db) /* 0.349843840 */, 18 },
+ /* 5271 */ { MAD_F(0x059952ab) /* 0.349932355 */, 18 },
+ /* 5272 */ { MAD_F(0x0599af7d) /* 0.350020876 */, 18 },
+ /* 5273 */ { MAD_F(0x059a0c51) /* 0.350109402 */, 18 },
+ /* 5274 */ { MAD_F(0x059a6926) /* 0.350197933 */, 18 },
+ /* 5275 */ { MAD_F(0x059ac5fc) /* 0.350286470 */, 18 },
+ /* 5276 */ { MAD_F(0x059b22d4) /* 0.350375013 */, 18 },
+ /* 5277 */ { MAD_F(0x059b7fae) /* 0.350463562 */, 18 },
+ /* 5278 */ { MAD_F(0x059bdc89) /* 0.350552116 */, 18 },
+ /* 5279 */ { MAD_F(0x059c3965) /* 0.350640675 */, 18 },
+
+ /* 5280 */ { MAD_F(0x059c9643) /* 0.350729240 */, 18 },
+ /* 5281 */ { MAD_F(0x059cf323) /* 0.350817811 */, 18 },
+ /* 5282 */ { MAD_F(0x059d5004) /* 0.350906388 */, 18 },
+ /* 5283 */ { MAD_F(0x059dace6) /* 0.350994970 */, 18 },
+ /* 5284 */ { MAD_F(0x059e09cb) /* 0.351083557 */, 18 },
+ /* 5285 */ { MAD_F(0x059e66b0) /* 0.351172150 */, 18 },
+ /* 5286 */ { MAD_F(0x059ec397) /* 0.351260749 */, 18 },
+ /* 5287 */ { MAD_F(0x059f2080) /* 0.351349353 */, 18 },
+ /* 5288 */ { MAD_F(0x059f7d6a) /* 0.351437963 */, 18 },
+ /* 5289 */ { MAD_F(0x059fda55) /* 0.351526579 */, 18 },
+ /* 5290 */ { MAD_F(0x05a03742) /* 0.351615200 */, 18 },
+ /* 5291 */ { MAD_F(0x05a09431) /* 0.351703827 */, 18 },
+ /* 5292 */ { MAD_F(0x05a0f121) /* 0.351792459 */, 18 },
+ /* 5293 */ { MAD_F(0x05a14e12) /* 0.351881097 */, 18 },
+ /* 5294 */ { MAD_F(0x05a1ab05) /* 0.351969740 */, 18 },
+ /* 5295 */ { MAD_F(0x05a207fa) /* 0.352058389 */, 18 },
+
+ /* 5296 */ { MAD_F(0x05a264f0) /* 0.352147044 */, 18 },
+ /* 5297 */ { MAD_F(0x05a2c1e7) /* 0.352235704 */, 18 },
+ /* 5298 */ { MAD_F(0x05a31ee1) /* 0.352324369 */, 18 },
+ /* 5299 */ { MAD_F(0x05a37bdb) /* 0.352413041 */, 18 },
+ /* 5300 */ { MAD_F(0x05a3d8d7) /* 0.352501718 */, 18 },
+ /* 5301 */ { MAD_F(0x05a435d5) /* 0.352590400 */, 18 },
+ /* 5302 */ { MAD_F(0x05a492d4) /* 0.352679088 */, 18 },
+ /* 5303 */ { MAD_F(0x05a4efd4) /* 0.352767782 */, 18 },
+ /* 5304 */ { MAD_F(0x05a54cd6) /* 0.352856481 */, 18 },
+ /* 5305 */ { MAD_F(0x05a5a9da) /* 0.352945186 */, 18 },
+ /* 5306 */ { MAD_F(0x05a606df) /* 0.353033896 */, 18 },
+ /* 5307 */ { MAD_F(0x05a663e5) /* 0.353122612 */, 18 },
+ /* 5308 */ { MAD_F(0x05a6c0ed) /* 0.353211333 */, 18 },
+ /* 5309 */ { MAD_F(0x05a71df7) /* 0.353300061 */, 18 },
+ /* 5310 */ { MAD_F(0x05a77b02) /* 0.353388793 */, 18 },
+ /* 5311 */ { MAD_F(0x05a7d80e) /* 0.353477531 */, 18 },
+
+ /* 5312 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 18 },
+ /* 5313 */ { MAD_F(0x05a8922c) /* 0.353655024 */, 18 },
+ /* 5314 */ { MAD_F(0x05a8ef3c) /* 0.353743779 */, 18 },
+ /* 5315 */ { MAD_F(0x05a94c4f) /* 0.353832540 */, 18 },
+ /* 5316 */ { MAD_F(0x05a9a963) /* 0.353921306 */, 18 },
+ /* 5317 */ { MAD_F(0x05aa0678) /* 0.354010077 */, 18 },
+ /* 5318 */ { MAD_F(0x05aa638f) /* 0.354098855 */, 18 },
+ /* 5319 */ { MAD_F(0x05aac0a8) /* 0.354187637 */, 18 },
+ /* 5320 */ { MAD_F(0x05ab1dc2) /* 0.354276426 */, 18 },
+ /* 5321 */ { MAD_F(0x05ab7add) /* 0.354365220 */, 18 },
+ /* 5322 */ { MAD_F(0x05abd7fa) /* 0.354454019 */, 18 },
+ /* 5323 */ { MAD_F(0x05ac3518) /* 0.354542824 */, 18 },
+ /* 5324 */ { MAD_F(0x05ac9238) /* 0.354631635 */, 18 },
+ /* 5325 */ { MAD_F(0x05acef5a) /* 0.354720451 */, 18 },
+ /* 5326 */ { MAD_F(0x05ad4c7d) /* 0.354809272 */, 18 },
+ /* 5327 */ { MAD_F(0x05ada9a1) /* 0.354898100 */, 18 },
+
+ /* 5328 */ { MAD_F(0x05ae06c7) /* 0.354986932 */, 18 },
+ /* 5329 */ { MAD_F(0x05ae63ee) /* 0.355075771 */, 18 },
+ /* 5330 */ { MAD_F(0x05aec117) /* 0.355164615 */, 18 },
+ /* 5331 */ { MAD_F(0x05af1e41) /* 0.355253464 */, 18 },
+ /* 5332 */ { MAD_F(0x05af7b6d) /* 0.355342319 */, 18 },
+ /* 5333 */ { MAD_F(0x05afd89b) /* 0.355431180 */, 18 },
+ /* 5334 */ { MAD_F(0x05b035c9) /* 0.355520046 */, 18 },
+ /* 5335 */ { MAD_F(0x05b092fa) /* 0.355608917 */, 18 },
+ /* 5336 */ { MAD_F(0x05b0f02b) /* 0.355697795 */, 18 },
+ /* 5337 */ { MAD_F(0x05b14d5f) /* 0.355786677 */, 18 },
+ /* 5338 */ { MAD_F(0x05b1aa94) /* 0.355875566 */, 18 },
+ /* 5339 */ { MAD_F(0x05b207ca) /* 0.355964460 */, 18 },
+ /* 5340 */ { MAD_F(0x05b26502) /* 0.356053359 */, 18 },
+ /* 5341 */ { MAD_F(0x05b2c23b) /* 0.356142264 */, 18 },
+ /* 5342 */ { MAD_F(0x05b31f76) /* 0.356231175 */, 18 },
+ /* 5343 */ { MAD_F(0x05b37cb2) /* 0.356320091 */, 18 },
+
+ /* 5344 */ { MAD_F(0x05b3d9f0) /* 0.356409012 */, 18 },
+ /* 5345 */ { MAD_F(0x05b4372f) /* 0.356497940 */, 18 },
+ /* 5346 */ { MAD_F(0x05b4946f) /* 0.356586872 */, 18 },
+ /* 5347 */ { MAD_F(0x05b4f1b2) /* 0.356675811 */, 18 },
+ /* 5348 */ { MAD_F(0x05b54ef5) /* 0.356764754 */, 18 },
+ /* 5349 */ { MAD_F(0x05b5ac3a) /* 0.356853704 */, 18 },
+ /* 5350 */ { MAD_F(0x05b60981) /* 0.356942659 */, 18 },
+ /* 5351 */ { MAD_F(0x05b666c9) /* 0.357031619 */, 18 },
+ /* 5352 */ { MAD_F(0x05b6c413) /* 0.357120585 */, 18 },
+ /* 5353 */ { MAD_F(0x05b7215e) /* 0.357209557 */, 18 },
+ /* 5354 */ { MAD_F(0x05b77eab) /* 0.357298534 */, 18 },
+ /* 5355 */ { MAD_F(0x05b7dbf9) /* 0.357387516 */, 18 },
+ /* 5356 */ { MAD_F(0x05b83948) /* 0.357476504 */, 18 },
+ /* 5357 */ { MAD_F(0x05b89699) /* 0.357565498 */, 18 },
+ /* 5358 */ { MAD_F(0x05b8f3ec) /* 0.357654497 */, 18 },
+ /* 5359 */ { MAD_F(0x05b95140) /* 0.357743502 */, 18 },
+
+ /* 5360 */ { MAD_F(0x05b9ae95) /* 0.357832512 */, 18 },
+ /* 5361 */ { MAD_F(0x05ba0bec) /* 0.357921528 */, 18 },
+ /* 5362 */ { MAD_F(0x05ba6945) /* 0.358010550 */, 18 },
+ /* 5363 */ { MAD_F(0x05bac69f) /* 0.358099576 */, 18 },
+ /* 5364 */ { MAD_F(0x05bb23fa) /* 0.358188609 */, 18 },
+ /* 5365 */ { MAD_F(0x05bb8157) /* 0.358277647 */, 18 },
+ /* 5366 */ { MAD_F(0x05bbdeb6) /* 0.358366690 */, 18 },
+ /* 5367 */ { MAD_F(0x05bc3c16) /* 0.358455739 */, 18 },
+ /* 5368 */ { MAD_F(0x05bc9977) /* 0.358544794 */, 18 },
+ /* 5369 */ { MAD_F(0x05bcf6da) /* 0.358633854 */, 18 },
+ /* 5370 */ { MAD_F(0x05bd543e) /* 0.358722920 */, 18 },
+ /* 5371 */ { MAD_F(0x05bdb1a4) /* 0.358811991 */, 18 },
+ /* 5372 */ { MAD_F(0x05be0f0b) /* 0.358901067 */, 18 },
+ /* 5373 */ { MAD_F(0x05be6c74) /* 0.358990150 */, 18 },
+ /* 5374 */ { MAD_F(0x05bec9df) /* 0.359079237 */, 18 },
+ /* 5375 */ { MAD_F(0x05bf274a) /* 0.359168331 */, 18 },
+
+ /* 5376 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 18 },
+ /* 5377 */ { MAD_F(0x05bfe226) /* 0.359346534 */, 18 },
+ /* 5378 */ { MAD_F(0x05c03f97) /* 0.359435644 */, 18 },
+ /* 5379 */ { MAD_F(0x05c09d08) /* 0.359524759 */, 18 },
+ /* 5380 */ { MAD_F(0x05c0fa7c) /* 0.359613880 */, 18 },
+ /* 5381 */ { MAD_F(0x05c157f0) /* 0.359703006 */, 18 },
+ /* 5382 */ { MAD_F(0x05c1b566) /* 0.359792138 */, 18 },
+ /* 5383 */ { MAD_F(0x05c212de) /* 0.359881276 */, 18 },
+ /* 5384 */ { MAD_F(0x05c27057) /* 0.359970419 */, 18 },
+ /* 5385 */ { MAD_F(0x05c2cdd2) /* 0.360059567 */, 18 },
+ /* 5386 */ { MAD_F(0x05c32b4e) /* 0.360148721 */, 18 },
+ /* 5387 */ { MAD_F(0x05c388cb) /* 0.360237881 */, 18 },
+ /* 5388 */ { MAD_F(0x05c3e64b) /* 0.360327046 */, 18 },
+ /* 5389 */ { MAD_F(0x05c443cb) /* 0.360416216 */, 18 },
+ /* 5390 */ { MAD_F(0x05c4a14d) /* 0.360505392 */, 18 },
+ /* 5391 */ { MAD_F(0x05c4fed1) /* 0.360594574 */, 18 },
+
+ /* 5392 */ { MAD_F(0x05c55c56) /* 0.360683761 */, 18 },
+ /* 5393 */ { MAD_F(0x05c5b9dc) /* 0.360772953 */, 18 },
+ /* 5394 */ { MAD_F(0x05c61764) /* 0.360862152 */, 18 },
+ /* 5395 */ { MAD_F(0x05c674ed) /* 0.360951355 */, 18 },
+ /* 5396 */ { MAD_F(0x05c6d278) /* 0.361040564 */, 18 },
+ /* 5397 */ { MAD_F(0x05c73005) /* 0.361129779 */, 18 },
+ /* 5398 */ { MAD_F(0x05c78d93) /* 0.361218999 */, 18 },
+ /* 5399 */ { MAD_F(0x05c7eb22) /* 0.361308225 */, 18 },
+ /* 5400 */ { MAD_F(0x05c848b3) /* 0.361397456 */, 18 },
+ /* 5401 */ { MAD_F(0x05c8a645) /* 0.361486693 */, 18 },
+ /* 5402 */ { MAD_F(0x05c903d9) /* 0.361575935 */, 18 },
+ /* 5403 */ { MAD_F(0x05c9616e) /* 0.361665183 */, 18 },
+ /* 5404 */ { MAD_F(0x05c9bf05) /* 0.361754436 */, 18 },
+ /* 5405 */ { MAD_F(0x05ca1c9d) /* 0.361843695 */, 18 },
+ /* 5406 */ { MAD_F(0x05ca7a37) /* 0.361932959 */, 18 },
+ /* 5407 */ { MAD_F(0x05cad7d2) /* 0.362022229 */, 18 },
+
+ /* 5408 */ { MAD_F(0x05cb356e) /* 0.362111504 */, 18 },
+ /* 5409 */ { MAD_F(0x05cb930d) /* 0.362200785 */, 18 },
+ /* 5410 */ { MAD_F(0x05cbf0ac) /* 0.362290071 */, 18 },
+ /* 5411 */ { MAD_F(0x05cc4e4d) /* 0.362379362 */, 18 },
+ /* 5412 */ { MAD_F(0x05ccabf0) /* 0.362468660 */, 18 },
+ /* 5413 */ { MAD_F(0x05cd0994) /* 0.362557962 */, 18 },
+ /* 5414 */ { MAD_F(0x05cd6739) /* 0.362647271 */, 18 },
+ /* 5415 */ { MAD_F(0x05cdc4e0) /* 0.362736584 */, 18 },
+ /* 5416 */ { MAD_F(0x05ce2289) /* 0.362825904 */, 18 },
+ /* 5417 */ { MAD_F(0x05ce8033) /* 0.362915228 */, 18 },
+ /* 5418 */ { MAD_F(0x05ceddde) /* 0.363004559 */, 18 },
+ /* 5419 */ { MAD_F(0x05cf3b8b) /* 0.363093894 */, 18 },
+ /* 5420 */ { MAD_F(0x05cf9939) /* 0.363183236 */, 18 },
+ /* 5421 */ { MAD_F(0x05cff6e9) /* 0.363272582 */, 18 },
+ /* 5422 */ { MAD_F(0x05d0549a) /* 0.363361935 */, 18 },
+ /* 5423 */ { MAD_F(0x05d0b24d) /* 0.363451292 */, 18 },
+
+ /* 5424 */ { MAD_F(0x05d11001) /* 0.363540655 */, 18 },
+ /* 5425 */ { MAD_F(0x05d16db7) /* 0.363630024 */, 18 },
+ /* 5426 */ { MAD_F(0x05d1cb6e) /* 0.363719398 */, 18 },
+ /* 5427 */ { MAD_F(0x05d22927) /* 0.363808778 */, 18 },
+ /* 5428 */ { MAD_F(0x05d286e1) /* 0.363898163 */, 18 },
+ /* 5429 */ { MAD_F(0x05d2e49d) /* 0.363987554 */, 18 },
+ /* 5430 */ { MAD_F(0x05d3425a) /* 0.364076950 */, 18 },
+ /* 5431 */ { MAD_F(0x05d3a018) /* 0.364166352 */, 18 },
+ /* 5432 */ { MAD_F(0x05d3fdd8) /* 0.364255759 */, 18 },
+ /* 5433 */ { MAD_F(0x05d45b9a) /* 0.364345171 */, 18 },
+ /* 5434 */ { MAD_F(0x05d4b95d) /* 0.364434589 */, 18 },
+ /* 5435 */ { MAD_F(0x05d51721) /* 0.364524013 */, 18 },
+ /* 5436 */ { MAD_F(0x05d574e7) /* 0.364613442 */, 18 },
+ /* 5437 */ { MAD_F(0x05d5d2af) /* 0.364702877 */, 18 },
+ /* 5438 */ { MAD_F(0x05d63078) /* 0.364792317 */, 18 },
+ /* 5439 */ { MAD_F(0x05d68e42) /* 0.364881762 */, 18 },
+
+ /* 5440 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 18 },
+ /* 5441 */ { MAD_F(0x05d749db) /* 0.365060669 */, 18 },
+ /* 5442 */ { MAD_F(0x05d7a7aa) /* 0.365150131 */, 18 },
+ /* 5443 */ { MAD_F(0x05d8057a) /* 0.365239599 */, 18 },
+ /* 5444 */ { MAD_F(0x05d8634c) /* 0.365329072 */, 18 },
+ /* 5445 */ { MAD_F(0x05d8c11f) /* 0.365418550 */, 18 },
+ /* 5446 */ { MAD_F(0x05d91ef4) /* 0.365508034 */, 18 },
+ /* 5447 */ { MAD_F(0x05d97cca) /* 0.365597523 */, 18 },
+ /* 5448 */ { MAD_F(0x05d9daa1) /* 0.365687018 */, 18 },
+ /* 5449 */ { MAD_F(0x05da387a) /* 0.365776518 */, 18 },
+ /* 5450 */ { MAD_F(0x05da9655) /* 0.365866024 */, 18 },
+ /* 5451 */ { MAD_F(0x05daf431) /* 0.365955536 */, 18 },
+ /* 5452 */ { MAD_F(0x05db520e) /* 0.366045052 */, 18 },
+ /* 5453 */ { MAD_F(0x05dbafed) /* 0.366134574 */, 18 },
+ /* 5454 */ { MAD_F(0x05dc0dce) /* 0.366224102 */, 18 },
+ /* 5455 */ { MAD_F(0x05dc6baf) /* 0.366313635 */, 18 },
+
+ /* 5456 */ { MAD_F(0x05dcc993) /* 0.366403174 */, 18 },
+ /* 5457 */ { MAD_F(0x05dd2778) /* 0.366492718 */, 18 },
+ /* 5458 */ { MAD_F(0x05dd855e) /* 0.366582267 */, 18 },
+ /* 5459 */ { MAD_F(0x05dde346) /* 0.366671822 */, 18 },
+ /* 5460 */ { MAD_F(0x05de412f) /* 0.366761383 */, 18 },
+ /* 5461 */ { MAD_F(0x05de9f1a) /* 0.366850949 */, 18 },
+ /* 5462 */ { MAD_F(0x05defd06) /* 0.366940520 */, 18 },
+ /* 5463 */ { MAD_F(0x05df5af3) /* 0.367030097 */, 18 },
+ /* 5464 */ { MAD_F(0x05dfb8e2) /* 0.367119680 */, 18 },
+ /* 5465 */ { MAD_F(0x05e016d3) /* 0.367209267 */, 18 },
+ /* 5466 */ { MAD_F(0x05e074c5) /* 0.367298861 */, 18 },
+ /* 5467 */ { MAD_F(0x05e0d2b8) /* 0.367388459 */, 18 },
+ /* 5468 */ { MAD_F(0x05e130ad) /* 0.367478064 */, 18 },
+ /* 5469 */ { MAD_F(0x05e18ea4) /* 0.367567673 */, 18 },
+ /* 5470 */ { MAD_F(0x05e1ec9c) /* 0.367657288 */, 18 },
+ /* 5471 */ { MAD_F(0x05e24a95) /* 0.367746909 */, 18 },
+
+ /* 5472 */ { MAD_F(0x05e2a890) /* 0.367836535 */, 18 },
+ /* 5473 */ { MAD_F(0x05e3068c) /* 0.367926167 */, 18 },
+ /* 5474 */ { MAD_F(0x05e3648a) /* 0.368015804 */, 18 },
+ /* 5475 */ { MAD_F(0x05e3c289) /* 0.368105446 */, 18 },
+ /* 5476 */ { MAD_F(0x05e4208a) /* 0.368195094 */, 18 },
+ /* 5477 */ { MAD_F(0x05e47e8c) /* 0.368284747 */, 18 },
+ /* 5478 */ { MAD_F(0x05e4dc8f) /* 0.368374406 */, 18 },
+ /* 5479 */ { MAD_F(0x05e53a94) /* 0.368464070 */, 18 },
+ /* 5480 */ { MAD_F(0x05e5989b) /* 0.368553740 */, 18 },
+ /* 5481 */ { MAD_F(0x05e5f6a3) /* 0.368643415 */, 18 },
+ /* 5482 */ { MAD_F(0x05e654ac) /* 0.368733096 */, 18 },
+ /* 5483 */ { MAD_F(0x05e6b2b7) /* 0.368822782 */, 18 },
+ /* 5484 */ { MAD_F(0x05e710c4) /* 0.368912473 */, 18 },
+ /* 5485 */ { MAD_F(0x05e76ed2) /* 0.369002170 */, 18 },
+ /* 5486 */ { MAD_F(0x05e7cce1) /* 0.369091873 */, 18 },
+ /* 5487 */ { MAD_F(0x05e82af2) /* 0.369181581 */, 18 },
+
+ /* 5488 */ { MAD_F(0x05e88904) /* 0.369271294 */, 18 },
+ /* 5489 */ { MAD_F(0x05e8e718) /* 0.369361013 */, 18 },
+ /* 5490 */ { MAD_F(0x05e9452d) /* 0.369450737 */, 18 },
+ /* 5491 */ { MAD_F(0x05e9a343) /* 0.369540467 */, 18 },
+ /* 5492 */ { MAD_F(0x05ea015c) /* 0.369630202 */, 18 },
+ /* 5493 */ { MAD_F(0x05ea5f75) /* 0.369719942 */, 18 },
+ /* 5494 */ { MAD_F(0x05eabd90) /* 0.369809688 */, 18 },
+ /* 5495 */ { MAD_F(0x05eb1bad) /* 0.369899440 */, 18 },
+ /* 5496 */ { MAD_F(0x05eb79cb) /* 0.369989197 */, 18 },
+ /* 5497 */ { MAD_F(0x05ebd7ea) /* 0.370078959 */, 18 },
+ /* 5498 */ { MAD_F(0x05ec360b) /* 0.370168727 */, 18 },
+ /* 5499 */ { MAD_F(0x05ec942d) /* 0.370258500 */, 18 },
+ /* 5500 */ { MAD_F(0x05ecf251) /* 0.370348279 */, 18 },
+ /* 5501 */ { MAD_F(0x05ed5076) /* 0.370438063 */, 18 },
+ /* 5502 */ { MAD_F(0x05edae9d) /* 0.370527853 */, 18 },
+ /* 5503 */ { MAD_F(0x05ee0cc5) /* 0.370617648 */, 18 },
+
+ /* 5504 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 18 },
+ /* 5505 */ { MAD_F(0x05eec91a) /* 0.370797254 */, 18 },
+ /* 5506 */ { MAD_F(0x05ef2746) /* 0.370887065 */, 18 },
+ /* 5507 */ { MAD_F(0x05ef8574) /* 0.370976882 */, 18 },
+ /* 5508 */ { MAD_F(0x05efe3a4) /* 0.371066704 */, 18 },
+ /* 5509 */ { MAD_F(0x05f041d5) /* 0.371156532 */, 18 },
+ /* 5510 */ { MAD_F(0x05f0a007) /* 0.371246365 */, 18 },
+ /* 5511 */ { MAD_F(0x05f0fe3b) /* 0.371336203 */, 18 },
+ /* 5512 */ { MAD_F(0x05f15c70) /* 0.371426047 */, 18 },
+ /* 5513 */ { MAD_F(0x05f1baa7) /* 0.371515897 */, 18 },
+ /* 5514 */ { MAD_F(0x05f218df) /* 0.371605751 */, 18 },
+ /* 5515 */ { MAD_F(0x05f27719) /* 0.371695612 */, 18 },
+ /* 5516 */ { MAD_F(0x05f2d554) /* 0.371785477 */, 18 },
+ /* 5517 */ { MAD_F(0x05f33390) /* 0.371875348 */, 18 },
+ /* 5518 */ { MAD_F(0x05f391cf) /* 0.371965225 */, 18 },
+ /* 5519 */ { MAD_F(0x05f3f00e) /* 0.372055107 */, 18 },
+
+ /* 5520 */ { MAD_F(0x05f44e4f) /* 0.372144994 */, 18 },
+ /* 5521 */ { MAD_F(0x05f4ac91) /* 0.372234887 */, 18 },
+ /* 5522 */ { MAD_F(0x05f50ad5) /* 0.372324785 */, 18 },
+ /* 5523 */ { MAD_F(0x05f5691b) /* 0.372414689 */, 18 },
+ /* 5524 */ { MAD_F(0x05f5c761) /* 0.372504598 */, 18 },
+ /* 5525 */ { MAD_F(0x05f625aa) /* 0.372594513 */, 18 },
+ /* 5526 */ { MAD_F(0x05f683f3) /* 0.372684433 */, 18 },
+ /* 5527 */ { MAD_F(0x05f6e23f) /* 0.372774358 */, 18 },
+ /* 5528 */ { MAD_F(0x05f7408b) /* 0.372864289 */, 18 },
+ /* 5529 */ { MAD_F(0x05f79ed9) /* 0.372954225 */, 18 },
+ /* 5530 */ { MAD_F(0x05f7fd29) /* 0.373044167 */, 18 },
+ /* 5531 */ { MAD_F(0x05f85b7a) /* 0.373134114 */, 18 },
+ /* 5532 */ { MAD_F(0x05f8b9cc) /* 0.373224066 */, 18 },
+ /* 5533 */ { MAD_F(0x05f91820) /* 0.373314024 */, 18 },
+ /* 5534 */ { MAD_F(0x05f97675) /* 0.373403987 */, 18 },
+ /* 5535 */ { MAD_F(0x05f9d4cc) /* 0.373493956 */, 18 },
+
+ /* 5536 */ { MAD_F(0x05fa3324) /* 0.373583930 */, 18 },
+ /* 5537 */ { MAD_F(0x05fa917e) /* 0.373673910 */, 18 },
+ /* 5538 */ { MAD_F(0x05faefd9) /* 0.373763895 */, 18 },
+ /* 5539 */ { MAD_F(0x05fb4e36) /* 0.373853885 */, 18 },
+ /* 5540 */ { MAD_F(0x05fbac94) /* 0.373943881 */, 18 },
+ /* 5541 */ { MAD_F(0x05fc0af3) /* 0.374033882 */, 18 },
+ /* 5542 */ { MAD_F(0x05fc6954) /* 0.374123889 */, 18 },
+ /* 5543 */ { MAD_F(0x05fcc7b7) /* 0.374213901 */, 18 },
+ /* 5544 */ { MAD_F(0x05fd261b) /* 0.374303918 */, 18 },
+ /* 5545 */ { MAD_F(0x05fd8480) /* 0.374393941 */, 18 },
+ /* 5546 */ { MAD_F(0x05fde2e7) /* 0.374483970 */, 18 },
+ /* 5547 */ { MAD_F(0x05fe414f) /* 0.374574003 */, 18 },
+ /* 5548 */ { MAD_F(0x05fe9fb9) /* 0.374664042 */, 18 },
+ /* 5549 */ { MAD_F(0x05fefe24) /* 0.374754087 */, 18 },
+ /* 5550 */ { MAD_F(0x05ff5c91) /* 0.374844137 */, 18 },
+ /* 5551 */ { MAD_F(0x05ffbaff) /* 0.374934192 */, 18 },
+
+ /* 5552 */ { MAD_F(0x0600196e) /* 0.375024253 */, 18 },
+ /* 5553 */ { MAD_F(0x060077df) /* 0.375114319 */, 18 },
+ /* 5554 */ { MAD_F(0x0600d651) /* 0.375204391 */, 18 },
+ /* 5555 */ { MAD_F(0x060134c5) /* 0.375294468 */, 18 },
+ /* 5556 */ { MAD_F(0x0601933b) /* 0.375384550 */, 18 },
+ /* 5557 */ { MAD_F(0x0601f1b1) /* 0.375474638 */, 18 },
+ /* 5558 */ { MAD_F(0x0602502a) /* 0.375564731 */, 18 },
+ /* 5559 */ { MAD_F(0x0602aea3) /* 0.375654830 */, 18 },
+ /* 5560 */ { MAD_F(0x06030d1e) /* 0.375744934 */, 18 },
+ /* 5561 */ { MAD_F(0x06036b9b) /* 0.375835043 */, 18 },
+ /* 5562 */ { MAD_F(0x0603ca19) /* 0.375925158 */, 18 },
+ /* 5563 */ { MAD_F(0x06042898) /* 0.376015278 */, 18 },
+ /* 5564 */ { MAD_F(0x06048719) /* 0.376105404 */, 18 },
+ /* 5565 */ { MAD_F(0x0604e59c) /* 0.376195535 */, 18 },
+ /* 5566 */ { MAD_F(0x0605441f) /* 0.376285671 */, 18 },
+ /* 5567 */ { MAD_F(0x0605a2a5) /* 0.376375813 */, 18 },
+
+ /* 5568 */ { MAD_F(0x0606012b) /* 0.376465960 */, 18 },
+ /* 5569 */ { MAD_F(0x06065fb4) /* 0.376556113 */, 18 },
+ /* 5570 */ { MAD_F(0x0606be3d) /* 0.376646271 */, 18 },
+ /* 5571 */ { MAD_F(0x06071cc8) /* 0.376736434 */, 18 },
+ /* 5572 */ { MAD_F(0x06077b55) /* 0.376826603 */, 18 },
+ /* 5573 */ { MAD_F(0x0607d9e3) /* 0.376916777 */, 18 },
+ /* 5574 */ { MAD_F(0x06083872) /* 0.377006957 */, 18 },
+ /* 5575 */ { MAD_F(0x06089703) /* 0.377097141 */, 18 },
+ /* 5576 */ { MAD_F(0x0608f595) /* 0.377187332 */, 18 },
+ /* 5577 */ { MAD_F(0x06095429) /* 0.377277528 */, 18 },
+ /* 5578 */ { MAD_F(0x0609b2be) /* 0.377367729 */, 18 },
+ /* 5579 */ { MAD_F(0x060a1155) /* 0.377457935 */, 18 },
+ /* 5580 */ { MAD_F(0x060a6fed) /* 0.377548147 */, 18 },
+ /* 5581 */ { MAD_F(0x060ace86) /* 0.377638364 */, 18 },
+ /* 5582 */ { MAD_F(0x060b2d21) /* 0.377728587 */, 18 },
+ /* 5583 */ { MAD_F(0x060b8bbe) /* 0.377818815 */, 18 },
+
+ /* 5584 */ { MAD_F(0x060bea5c) /* 0.377909049 */, 18 },
+ /* 5585 */ { MAD_F(0x060c48fb) /* 0.377999288 */, 18 },
+ /* 5586 */ { MAD_F(0x060ca79c) /* 0.378089532 */, 18 },
+ /* 5587 */ { MAD_F(0x060d063e) /* 0.378179781 */, 18 },
+ /* 5588 */ { MAD_F(0x060d64e1) /* 0.378270036 */, 18 },
+ /* 5589 */ { MAD_F(0x060dc387) /* 0.378360297 */, 18 },
+ /* 5590 */ { MAD_F(0x060e222d) /* 0.378450563 */, 18 },
+ /* 5591 */ { MAD_F(0x060e80d5) /* 0.378540834 */, 18 },
+ /* 5592 */ { MAD_F(0x060edf7f) /* 0.378631110 */, 18 },
+ /* 5593 */ { MAD_F(0x060f3e29) /* 0.378721392 */, 18 },
+ /* 5594 */ { MAD_F(0x060f9cd6) /* 0.378811680 */, 18 },
+ /* 5595 */ { MAD_F(0x060ffb83) /* 0.378901972 */, 18 },
+ /* 5596 */ { MAD_F(0x06105a33) /* 0.378992270 */, 18 },
+ /* 5597 */ { MAD_F(0x0610b8e3) /* 0.379082574 */, 18 },
+ /* 5598 */ { MAD_F(0x06111795) /* 0.379172883 */, 18 },
+ /* 5599 */ { MAD_F(0x06117649) /* 0.379263197 */, 18 },
+
+ /* 5600 */ { MAD_F(0x0611d4fe) /* 0.379353516 */, 18 },
+ /* 5601 */ { MAD_F(0x061233b4) /* 0.379443841 */, 18 },
+ /* 5602 */ { MAD_F(0x0612926c) /* 0.379534172 */, 18 },
+ /* 5603 */ { MAD_F(0x0612f125) /* 0.379624507 */, 18 },
+ /* 5604 */ { MAD_F(0x06134fe0) /* 0.379714848 */, 18 },
+ /* 5605 */ { MAD_F(0x0613ae9c) /* 0.379805195 */, 18 },
+ /* 5606 */ { MAD_F(0x06140d5a) /* 0.379895547 */, 18 },
+ /* 5607 */ { MAD_F(0x06146c19) /* 0.379985904 */, 18 },
+ /* 5608 */ { MAD_F(0x0614cada) /* 0.380076266 */, 18 },
+ /* 5609 */ { MAD_F(0x0615299c) /* 0.380166634 */, 18 },
+ /* 5610 */ { MAD_F(0x0615885f) /* 0.380257008 */, 18 },
+ /* 5611 */ { MAD_F(0x0615e724) /* 0.380347386 */, 18 },
+ /* 5612 */ { MAD_F(0x061645ea) /* 0.380437770 */, 18 },
+ /* 5613 */ { MAD_F(0x0616a4b2) /* 0.380528160 */, 18 },
+ /* 5614 */ { MAD_F(0x0617037b) /* 0.380618555 */, 18 },
+ /* 5615 */ { MAD_F(0x06176246) /* 0.380708955 */, 18 },
+
+ /* 5616 */ { MAD_F(0x0617c112) /* 0.380799360 */, 18 },
+ /* 5617 */ { MAD_F(0x06181fdf) /* 0.380889771 */, 18 },
+ /* 5618 */ { MAD_F(0x06187eae) /* 0.380980187 */, 18 },
+ /* 5619 */ { MAD_F(0x0618dd7e) /* 0.381070609 */, 18 },
+ /* 5620 */ { MAD_F(0x06193c50) /* 0.381161036 */, 18 },
+ /* 5621 */ { MAD_F(0x06199b24) /* 0.381251468 */, 18 },
+ /* 5622 */ { MAD_F(0x0619f9f8) /* 0.381341906 */, 18 },
+ /* 5623 */ { MAD_F(0x061a58ce) /* 0.381432349 */, 18 },
+ /* 5624 */ { MAD_F(0x061ab7a6) /* 0.381522798 */, 18 },
+ /* 5625 */ { MAD_F(0x061b167f) /* 0.381613251 */, 18 },
+ /* 5626 */ { MAD_F(0x061b7559) /* 0.381703711 */, 18 },
+ /* 5627 */ { MAD_F(0x061bd435) /* 0.381794175 */, 18 },
+ /* 5628 */ { MAD_F(0x061c3313) /* 0.381884645 */, 18 },
+ /* 5629 */ { MAD_F(0x061c91f1) /* 0.381975120 */, 18 },
+ /* 5630 */ { MAD_F(0x061cf0d2) /* 0.382065601 */, 18 },
+ /* 5631 */ { MAD_F(0x061d4fb3) /* 0.382156087 */, 18 },
+
+ /* 5632 */ { MAD_F(0x061dae96) /* 0.382246578 */, 18 },
+ /* 5633 */ { MAD_F(0x061e0d7b) /* 0.382337075 */, 18 },
+ /* 5634 */ { MAD_F(0x061e6c61) /* 0.382427577 */, 18 },
+ /* 5635 */ { MAD_F(0x061ecb48) /* 0.382518084 */, 18 },
+ /* 5636 */ { MAD_F(0x061f2a31) /* 0.382608597 */, 18 },
+ /* 5637 */ { MAD_F(0x061f891b) /* 0.382699115 */, 18 },
+ /* 5638 */ { MAD_F(0x061fe807) /* 0.382789638 */, 18 },
+ /* 5639 */ { MAD_F(0x062046f4) /* 0.382880167 */, 18 },
+ /* 5640 */ { MAD_F(0x0620a5e3) /* 0.382970701 */, 18 },
+ /* 5641 */ { MAD_F(0x062104d3) /* 0.383061241 */, 18 },
+ /* 5642 */ { MAD_F(0x062163c4) /* 0.383151786 */, 18 },
+ /* 5643 */ { MAD_F(0x0621c2b7) /* 0.383242336 */, 18 },
+ /* 5644 */ { MAD_F(0x062221ab) /* 0.383332891 */, 18 },
+ /* 5645 */ { MAD_F(0x062280a1) /* 0.383423452 */, 18 },
+ /* 5646 */ { MAD_F(0x0622df98) /* 0.383514018 */, 18 },
+ /* 5647 */ { MAD_F(0x06233e91) /* 0.383604590 */, 18 },
+
+ /* 5648 */ { MAD_F(0x06239d8b) /* 0.383695167 */, 18 },
+ /* 5649 */ { MAD_F(0x0623fc86) /* 0.383785749 */, 18 },
+ /* 5650 */ { MAD_F(0x06245b83) /* 0.383876337 */, 18 },
+ /* 5651 */ { MAD_F(0x0624ba82) /* 0.383966930 */, 18 },
+ /* 5652 */ { MAD_F(0x06251981) /* 0.384057528 */, 18 },
+ /* 5653 */ { MAD_F(0x06257883) /* 0.384148132 */, 18 },
+ /* 5654 */ { MAD_F(0x0625d785) /* 0.384238741 */, 18 },
+ /* 5655 */ { MAD_F(0x06263689) /* 0.384329355 */, 18 },
+ /* 5656 */ { MAD_F(0x0626958f) /* 0.384419975 */, 18 },
+ /* 5657 */ { MAD_F(0x0626f496) /* 0.384510600 */, 18 },
+ /* 5658 */ { MAD_F(0x0627539e) /* 0.384601230 */, 18 },
+ /* 5659 */ { MAD_F(0x0627b2a8) /* 0.384691866 */, 18 },
+ /* 5660 */ { MAD_F(0x062811b3) /* 0.384782507 */, 18 },
+ /* 5661 */ { MAD_F(0x062870c0) /* 0.384873153 */, 18 },
+ /* 5662 */ { MAD_F(0x0628cfce) /* 0.384963805 */, 18 },
+ /* 5663 */ { MAD_F(0x06292ede) /* 0.385054462 */, 18 },
+
+ /* 5664 */ { MAD_F(0x06298def) /* 0.385145124 */, 18 },
+ /* 5665 */ { MAD_F(0x0629ed01) /* 0.385235792 */, 18 },
+ /* 5666 */ { MAD_F(0x062a4c15) /* 0.385326465 */, 18 },
+ /* 5667 */ { MAD_F(0x062aab2a) /* 0.385417143 */, 18 },
+ /* 5668 */ { MAD_F(0x062b0a41) /* 0.385507827 */, 18 },
+ /* 5669 */ { MAD_F(0x062b6959) /* 0.385598516 */, 18 },
+ /* 5670 */ { MAD_F(0x062bc873) /* 0.385689211 */, 18 },
+ /* 5671 */ { MAD_F(0x062c278e) /* 0.385779910 */, 18 },
+ /* 5672 */ { MAD_F(0x062c86aa) /* 0.385870615 */, 18 },
+ /* 5673 */ { MAD_F(0x062ce5c8) /* 0.385961326 */, 18 },
+ /* 5674 */ { MAD_F(0x062d44e8) /* 0.386052041 */, 18 },
+ /* 5675 */ { MAD_F(0x062da408) /* 0.386142762 */, 18 },
+ /* 5676 */ { MAD_F(0x062e032a) /* 0.386233489 */, 18 },
+ /* 5677 */ { MAD_F(0x062e624e) /* 0.386324221 */, 18 },
+ /* 5678 */ { MAD_F(0x062ec173) /* 0.386414958 */, 18 },
+ /* 5679 */ { MAD_F(0x062f209a) /* 0.386505700 */, 18 },
+
+ /* 5680 */ { MAD_F(0x062f7fc1) /* 0.386596448 */, 18 },
+ /* 5681 */ { MAD_F(0x062fdeeb) /* 0.386687201 */, 18 },
+ /* 5682 */ { MAD_F(0x06303e16) /* 0.386777959 */, 18 },
+ /* 5683 */ { MAD_F(0x06309d42) /* 0.386868723 */, 18 },
+ /* 5684 */ { MAD_F(0x0630fc6f) /* 0.386959492 */, 18 },
+ /* 5685 */ { MAD_F(0x06315b9e) /* 0.387050266 */, 18 },
+ /* 5686 */ { MAD_F(0x0631bacf) /* 0.387141045 */, 18 },
+ /* 5687 */ { MAD_F(0x06321a01) /* 0.387231830 */, 18 },
+ /* 5688 */ { MAD_F(0x06327934) /* 0.387322621 */, 18 },
+ /* 5689 */ { MAD_F(0x0632d869) /* 0.387413416 */, 18 },
+ /* 5690 */ { MAD_F(0x0633379f) /* 0.387504217 */, 18 },
+ /* 5691 */ { MAD_F(0x063396d7) /* 0.387595023 */, 18 },
+ /* 5692 */ { MAD_F(0x0633f610) /* 0.387685835 */, 18 },
+ /* 5693 */ { MAD_F(0x0634554a) /* 0.387776652 */, 18 },
+ /* 5694 */ { MAD_F(0x0634b486) /* 0.387867474 */, 18 },
+ /* 5695 */ { MAD_F(0x063513c3) /* 0.387958301 */, 18 },
+
+ /* 5696 */ { MAD_F(0x06357302) /* 0.388049134 */, 18 },
+ /* 5697 */ { MAD_F(0x0635d242) /* 0.388139972 */, 18 },
+ /* 5698 */ { MAD_F(0x06363184) /* 0.388230816 */, 18 },
+ /* 5699 */ { MAD_F(0x063690c7) /* 0.388321665 */, 18 },
+ /* 5700 */ { MAD_F(0x0636f00b) /* 0.388412519 */, 18 },
+ /* 5701 */ { MAD_F(0x06374f51) /* 0.388503378 */, 18 },
+ /* 5702 */ { MAD_F(0x0637ae99) /* 0.388594243 */, 18 },
+ /* 5703 */ { MAD_F(0x06380de1) /* 0.388685113 */, 18 },
+ /* 5704 */ { MAD_F(0x06386d2b) /* 0.388775988 */, 18 },
+ /* 5705 */ { MAD_F(0x0638cc77) /* 0.388866869 */, 18 },
+ /* 5706 */ { MAD_F(0x06392bc4) /* 0.388957755 */, 18 },
+ /* 5707 */ { MAD_F(0x06398b12) /* 0.389048646 */, 18 },
+ /* 5708 */ { MAD_F(0x0639ea62) /* 0.389139542 */, 18 },
+ /* 5709 */ { MAD_F(0x063a49b4) /* 0.389230444 */, 18 },
+ /* 5710 */ { MAD_F(0x063aa906) /* 0.389321352 */, 18 },
+ /* 5711 */ { MAD_F(0x063b085a) /* 0.389412264 */, 18 },
+
+ /* 5712 */ { MAD_F(0x063b67b0) /* 0.389503182 */, 18 },
+ /* 5713 */ { MAD_F(0x063bc707) /* 0.389594105 */, 18 },
+ /* 5714 */ { MAD_F(0x063c265f) /* 0.389685033 */, 18 },
+ /* 5715 */ { MAD_F(0x063c85b9) /* 0.389775967 */, 18 },
+ /* 5716 */ { MAD_F(0x063ce514) /* 0.389866906 */, 18 },
+ /* 5717 */ { MAD_F(0x063d4471) /* 0.389957850 */, 18 },
+ /* 5718 */ { MAD_F(0x063da3cf) /* 0.390048800 */, 18 },
+ /* 5719 */ { MAD_F(0x063e032f) /* 0.390139755 */, 18 },
+ /* 5720 */ { MAD_F(0x063e6290) /* 0.390230715 */, 18 },
+ /* 5721 */ { MAD_F(0x063ec1f2) /* 0.390321681 */, 18 },
+ /* 5722 */ { MAD_F(0x063f2156) /* 0.390412651 */, 18 },
+ /* 5723 */ { MAD_F(0x063f80bb) /* 0.390503628 */, 18 },
+ /* 5724 */ { MAD_F(0x063fe022) /* 0.390594609 */, 18 },
+ /* 5725 */ { MAD_F(0x06403f8a) /* 0.390685596 */, 18 },
+ /* 5726 */ { MAD_F(0x06409ef3) /* 0.390776588 */, 18 },
+ /* 5727 */ { MAD_F(0x0640fe5e) /* 0.390867585 */, 18 },
+
+ /* 5728 */ { MAD_F(0x06415dcb) /* 0.390958588 */, 18 },
+ /* 5729 */ { MAD_F(0x0641bd38) /* 0.391049596 */, 18 },
+ /* 5730 */ { MAD_F(0x06421ca7) /* 0.391140609 */, 18 },
+ /* 5731 */ { MAD_F(0x06427c18) /* 0.391231627 */, 18 },
+ /* 5732 */ { MAD_F(0x0642db8a) /* 0.391322651 */, 18 },
+ /* 5733 */ { MAD_F(0x06433afd) /* 0.391413680 */, 18 },
+ /* 5734 */ { MAD_F(0x06439a72) /* 0.391504714 */, 18 },
+ /* 5735 */ { MAD_F(0x0643f9e9) /* 0.391595754 */, 18 },
+ /* 5736 */ { MAD_F(0x06445960) /* 0.391686799 */, 18 },
+ /* 5737 */ { MAD_F(0x0644b8d9) /* 0.391777849 */, 18 },
+ /* 5738 */ { MAD_F(0x06451854) /* 0.391868905 */, 18 },
+ /* 5739 */ { MAD_F(0x064577d0) /* 0.391959966 */, 18 },
+ /* 5740 */ { MAD_F(0x0645d74d) /* 0.392051032 */, 18 },
+ /* 5741 */ { MAD_F(0x064636cc) /* 0.392142103 */, 18 },
+ /* 5742 */ { MAD_F(0x0646964c) /* 0.392233180 */, 18 },
+ /* 5743 */ { MAD_F(0x0646f5ce) /* 0.392324262 */, 18 },
+
+ /* 5744 */ { MAD_F(0x06475551) /* 0.392415349 */, 18 },
+ /* 5745 */ { MAD_F(0x0647b4d5) /* 0.392506442 */, 18 },
+ /* 5746 */ { MAD_F(0x0648145b) /* 0.392597540 */, 18 },
+ /* 5747 */ { MAD_F(0x064873e3) /* 0.392688643 */, 18 },
+ /* 5748 */ { MAD_F(0x0648d36b) /* 0.392779751 */, 18 },
+ /* 5749 */ { MAD_F(0x064932f6) /* 0.392870865 */, 18 },
+ /* 5750 */ { MAD_F(0x06499281) /* 0.392961984 */, 18 },
+ /* 5751 */ { MAD_F(0x0649f20e) /* 0.393053108 */, 18 },
+ /* 5752 */ { MAD_F(0x064a519c) /* 0.393144238 */, 18 },
+ /* 5753 */ { MAD_F(0x064ab12c) /* 0.393235372 */, 18 },
+ /* 5754 */ { MAD_F(0x064b10be) /* 0.393326513 */, 18 },
+ /* 5755 */ { MAD_F(0x064b7050) /* 0.393417658 */, 18 },
+ /* 5756 */ { MAD_F(0x064bcfe4) /* 0.393508809 */, 18 },
+ /* 5757 */ { MAD_F(0x064c2f7a) /* 0.393599965 */, 18 },
+ /* 5758 */ { MAD_F(0x064c8f11) /* 0.393691126 */, 18 },
+ /* 5759 */ { MAD_F(0x064ceea9) /* 0.393782292 */, 18 },
+
+ /* 5760 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 18 },
+ /* 5761 */ { MAD_F(0x064dadde) /* 0.393964641 */, 18 },
+ /* 5762 */ { MAD_F(0x064e0d7a) /* 0.394055823 */, 18 },
+ /* 5763 */ { MAD_F(0x064e6d18) /* 0.394147011 */, 18 },
+ /* 5764 */ { MAD_F(0x064eccb8) /* 0.394238204 */, 18 },
+ /* 5765 */ { MAD_F(0x064f2c59) /* 0.394329402 */, 18 },
+ /* 5766 */ { MAD_F(0x064f8bfb) /* 0.394420605 */, 18 },
+ /* 5767 */ { MAD_F(0x064feb9e) /* 0.394511814 */, 18 },
+ /* 5768 */ { MAD_F(0x06504b44) /* 0.394603028 */, 18 },
+ /* 5769 */ { MAD_F(0x0650aaea) /* 0.394694247 */, 18 },
+ /* 5770 */ { MAD_F(0x06510a92) /* 0.394785472 */, 18 },
+ /* 5771 */ { MAD_F(0x06516a3b) /* 0.394876702 */, 18 },
+ /* 5772 */ { MAD_F(0x0651c9e6) /* 0.394967937 */, 18 },
+ /* 5773 */ { MAD_F(0x06522992) /* 0.395059177 */, 18 },
+ /* 5774 */ { MAD_F(0x06528940) /* 0.395150423 */, 18 },
+ /* 5775 */ { MAD_F(0x0652e8ef) /* 0.395241673 */, 18 },
+
+ /* 5776 */ { MAD_F(0x0653489f) /* 0.395332930 */, 18 },
+ /* 5777 */ { MAD_F(0x0653a851) /* 0.395424191 */, 18 },
+ /* 5778 */ { MAD_F(0x06540804) /* 0.395515458 */, 18 },
+ /* 5779 */ { MAD_F(0x065467b9) /* 0.395606730 */, 18 },
+ /* 5780 */ { MAD_F(0x0654c76f) /* 0.395698007 */, 18 },
+ /* 5781 */ { MAD_F(0x06552726) /* 0.395789289 */, 18 },
+ /* 5782 */ { MAD_F(0x065586df) /* 0.395880577 */, 18 },
+ /* 5783 */ { MAD_F(0x0655e699) /* 0.395971870 */, 18 },
+ /* 5784 */ { MAD_F(0x06564655) /* 0.396063168 */, 18 },
+ /* 5785 */ { MAD_F(0x0656a612) /* 0.396154472 */, 18 },
+ /* 5786 */ { MAD_F(0x065705d0) /* 0.396245780 */, 18 },
+ /* 5787 */ { MAD_F(0x06576590) /* 0.396337094 */, 18 },
+ /* 5788 */ { MAD_F(0x0657c552) /* 0.396428414 */, 18 },
+ /* 5789 */ { MAD_F(0x06582514) /* 0.396519738 */, 18 },
+ /* 5790 */ { MAD_F(0x065884d9) /* 0.396611068 */, 18 },
+ /* 5791 */ { MAD_F(0x0658e49e) /* 0.396702403 */, 18 },
+
+ /* 5792 */ { MAD_F(0x06594465) /* 0.396793743 */, 18 },
+ /* 5793 */ { MAD_F(0x0659a42e) /* 0.396885089 */, 18 },
+ /* 5794 */ { MAD_F(0x065a03f7) /* 0.396976440 */, 18 },
+ /* 5795 */ { MAD_F(0x065a63c3) /* 0.397067796 */, 18 },
+ /* 5796 */ { MAD_F(0x065ac38f) /* 0.397159157 */, 18 },
+ /* 5797 */ { MAD_F(0x065b235d) /* 0.397250524 */, 18 },
+ /* 5798 */ { MAD_F(0x065b832d) /* 0.397341896 */, 18 },
+ /* 5799 */ { MAD_F(0x065be2fe) /* 0.397433273 */, 18 },
+ /* 5800 */ { MAD_F(0x065c42d0) /* 0.397524655 */, 18 },
+ /* 5801 */ { MAD_F(0x065ca2a3) /* 0.397616043 */, 18 },
+ /* 5802 */ { MAD_F(0x065d0279) /* 0.397707436 */, 18 },
+ /* 5803 */ { MAD_F(0x065d624f) /* 0.397798834 */, 18 },
+ /* 5804 */ { MAD_F(0x065dc227) /* 0.397890237 */, 18 },
+ /* 5805 */ { MAD_F(0x065e2200) /* 0.397981646 */, 18 },
+ /* 5806 */ { MAD_F(0x065e81db) /* 0.398073059 */, 18 },
+ /* 5807 */ { MAD_F(0x065ee1b7) /* 0.398164479 */, 18 },
+
+ /* 5808 */ { MAD_F(0x065f4195) /* 0.398255903 */, 18 },
+ /* 5809 */ { MAD_F(0x065fa174) /* 0.398347333 */, 18 },
+ /* 5810 */ { MAD_F(0x06600154) /* 0.398438767 */, 18 },
+ /* 5811 */ { MAD_F(0x06606136) /* 0.398530207 */, 18 },
+ /* 5812 */ { MAD_F(0x0660c119) /* 0.398621653 */, 18 },
+ /* 5813 */ { MAD_F(0x066120fd) /* 0.398713103 */, 18 },
+ /* 5814 */ { MAD_F(0x066180e3) /* 0.398804559 */, 18 },
+ /* 5815 */ { MAD_F(0x0661e0cb) /* 0.398896020 */, 18 },
+ /* 5816 */ { MAD_F(0x066240b4) /* 0.398987487 */, 18 },
+ /* 5817 */ { MAD_F(0x0662a09e) /* 0.399078958 */, 18 },
+ /* 5818 */ { MAD_F(0x06630089) /* 0.399170435 */, 18 },
+ /* 5819 */ { MAD_F(0x06636077) /* 0.399261917 */, 18 },
+ /* 5820 */ { MAD_F(0x0663c065) /* 0.399353404 */, 18 },
+ /* 5821 */ { MAD_F(0x06642055) /* 0.399444897 */, 18 },
+ /* 5822 */ { MAD_F(0x06648046) /* 0.399536395 */, 18 },
+ /* 5823 */ { MAD_F(0x0664e039) /* 0.399627898 */, 18 },
+
+ /* 5824 */ { MAD_F(0x0665402d) /* 0.399719406 */, 18 },
+ /* 5825 */ { MAD_F(0x0665a022) /* 0.399810919 */, 18 },
+ /* 5826 */ { MAD_F(0x06660019) /* 0.399902438 */, 18 },
+ /* 5827 */ { MAD_F(0x06666011) /* 0.399993962 */, 18 },
+ /* 5828 */ { MAD_F(0x0666c00b) /* 0.400085491 */, 18 },
+ /* 5829 */ { MAD_F(0x06672006) /* 0.400177026 */, 18 },
+ /* 5830 */ { MAD_F(0x06678003) /* 0.400268565 */, 18 },
+ /* 5831 */ { MAD_F(0x0667e000) /* 0.400360110 */, 18 },
+ /* 5832 */ { MAD_F(0x06684000) /* 0.400451660 */, 18 },
+ /* 5833 */ { MAD_F(0x0668a000) /* 0.400543216 */, 18 },
+ /* 5834 */ { MAD_F(0x06690003) /* 0.400634776 */, 18 },
+ /* 5835 */ { MAD_F(0x06696006) /* 0.400726342 */, 18 },
+ /* 5836 */ { MAD_F(0x0669c00b) /* 0.400817913 */, 18 },
+ /* 5837 */ { MAD_F(0x066a2011) /* 0.400909489 */, 18 },
+ /* 5838 */ { MAD_F(0x066a8019) /* 0.401001071 */, 18 },
+ /* 5839 */ { MAD_F(0x066ae022) /* 0.401092657 */, 18 },
+
+ /* 5840 */ { MAD_F(0x066b402d) /* 0.401184249 */, 18 },
+ /* 5841 */ { MAD_F(0x066ba039) /* 0.401275847 */, 18 },
+ /* 5842 */ { MAD_F(0x066c0046) /* 0.401367449 */, 18 },
+ /* 5843 */ { MAD_F(0x066c6055) /* 0.401459057 */, 18 },
+ /* 5844 */ { MAD_F(0x066cc065) /* 0.401550670 */, 18 },
+ /* 5845 */ { MAD_F(0x066d2076) /* 0.401642288 */, 18 },
+ /* 5846 */ { MAD_F(0x066d8089) /* 0.401733911 */, 18 },
+ /* 5847 */ { MAD_F(0x066de09e) /* 0.401825540 */, 18 },
+ /* 5848 */ { MAD_F(0x066e40b3) /* 0.401917173 */, 18 },
+ /* 5849 */ { MAD_F(0x066ea0cb) /* 0.402008812 */, 18 },
+ /* 5850 */ { MAD_F(0x066f00e3) /* 0.402100457 */, 18 },
+ /* 5851 */ { MAD_F(0x066f60fd) /* 0.402192106 */, 18 },
+ /* 5852 */ { MAD_F(0x066fc118) /* 0.402283761 */, 18 },
+ /* 5853 */ { MAD_F(0x06702135) /* 0.402375420 */, 18 },
+ /* 5854 */ { MAD_F(0x06708153) /* 0.402467086 */, 18 },
+ /* 5855 */ { MAD_F(0x0670e173) /* 0.402558756 */, 18 },
+
+ /* 5856 */ { MAD_F(0x06714194) /* 0.402650431 */, 18 },
+ /* 5857 */ { MAD_F(0x0671a1b6) /* 0.402742112 */, 18 },
+ /* 5858 */ { MAD_F(0x067201da) /* 0.402833798 */, 18 },
+ /* 5859 */ { MAD_F(0x067261ff) /* 0.402925489 */, 18 },
+ /* 5860 */ { MAD_F(0x0672c226) /* 0.403017186 */, 18 },
+ /* 5861 */ { MAD_F(0x0673224e) /* 0.403108887 */, 18 },
+ /* 5862 */ { MAD_F(0x06738277) /* 0.403200594 */, 18 },
+ /* 5863 */ { MAD_F(0x0673e2a2) /* 0.403292306 */, 18 },
+ /* 5864 */ { MAD_F(0x067442ce) /* 0.403384024 */, 18 },
+ /* 5865 */ { MAD_F(0x0674a2fc) /* 0.403475746 */, 18 },
+ /* 5866 */ { MAD_F(0x0675032b) /* 0.403567474 */, 18 },
+ /* 5867 */ { MAD_F(0x0675635b) /* 0.403659207 */, 18 },
+ /* 5868 */ { MAD_F(0x0675c38d) /* 0.403750945 */, 18 },
+ /* 5869 */ { MAD_F(0x067623c0) /* 0.403842688 */, 18 },
+ /* 5870 */ { MAD_F(0x067683f4) /* 0.403934437 */, 18 },
+ /* 5871 */ { MAD_F(0x0676e42a) /* 0.404026190 */, 18 },
+
+ /* 5872 */ { MAD_F(0x06774462) /* 0.404117949 */, 18 },
+ /* 5873 */ { MAD_F(0x0677a49b) /* 0.404209714 */, 18 },
+ /* 5874 */ { MAD_F(0x067804d5) /* 0.404301483 */, 18 },
+ /* 5875 */ { MAD_F(0x06786510) /* 0.404393258 */, 18 },
+ /* 5876 */ { MAD_F(0x0678c54d) /* 0.404485037 */, 18 },
+ /* 5877 */ { MAD_F(0x0679258c) /* 0.404576822 */, 18 },
+ /* 5878 */ { MAD_F(0x067985cb) /* 0.404668613 */, 18 },
+ /* 5879 */ { MAD_F(0x0679e60c) /* 0.404760408 */, 18 },
+ /* 5880 */ { MAD_F(0x067a464f) /* 0.404852209 */, 18 },
+ /* 5881 */ { MAD_F(0x067aa693) /* 0.404944014 */, 18 },
+ /* 5882 */ { MAD_F(0x067b06d8) /* 0.405035825 */, 18 },
+ /* 5883 */ { MAD_F(0x067b671f) /* 0.405127642 */, 18 },
+ /* 5884 */ { MAD_F(0x067bc767) /* 0.405219463 */, 18 },
+ /* 5885 */ { MAD_F(0x067c27b1) /* 0.405311290 */, 18 },
+ /* 5886 */ { MAD_F(0x067c87fc) /* 0.405403122 */, 18 },
+ /* 5887 */ { MAD_F(0x067ce848) /* 0.405494959 */, 18 },
+
+ /* 5888 */ { MAD_F(0x067d4896) /* 0.405586801 */, 18 },
+ /* 5889 */ { MAD_F(0x067da8e5) /* 0.405678648 */, 18 },
+ /* 5890 */ { MAD_F(0x067e0935) /* 0.405770501 */, 18 },
+ /* 5891 */ { MAD_F(0x067e6987) /* 0.405862359 */, 18 },
+ /* 5892 */ { MAD_F(0x067ec9da) /* 0.405954222 */, 18 },
+ /* 5893 */ { MAD_F(0x067f2a2f) /* 0.406046090 */, 18 },
+ /* 5894 */ { MAD_F(0x067f8a85) /* 0.406137963 */, 18 },
+ /* 5895 */ { MAD_F(0x067feadd) /* 0.406229842 */, 18 },
+ /* 5896 */ { MAD_F(0x06804b36) /* 0.406321726 */, 18 },
+ /* 5897 */ { MAD_F(0x0680ab90) /* 0.406413615 */, 18 },
+ /* 5898 */ { MAD_F(0x06810beb) /* 0.406505509 */, 18 },
+ /* 5899 */ { MAD_F(0x06816c49) /* 0.406597408 */, 18 },
+ /* 5900 */ { MAD_F(0x0681cca7) /* 0.406689313 */, 18 },
+ /* 5901 */ { MAD_F(0x06822d07) /* 0.406781223 */, 18 },
+ /* 5902 */ { MAD_F(0x06828d68) /* 0.406873138 */, 18 },
+ /* 5903 */ { MAD_F(0x0682edcb) /* 0.406965058 */, 18 },
+
+ /* 5904 */ { MAD_F(0x06834e2f) /* 0.407056983 */, 18 },
+ /* 5905 */ { MAD_F(0x0683ae94) /* 0.407148914 */, 18 },
+ /* 5906 */ { MAD_F(0x06840efb) /* 0.407240850 */, 18 },
+ /* 5907 */ { MAD_F(0x06846f63) /* 0.407332791 */, 18 },
+ /* 5908 */ { MAD_F(0x0684cfcd) /* 0.407424737 */, 18 },
+ /* 5909 */ { MAD_F(0x06853038) /* 0.407516688 */, 18 },
+ /* 5910 */ { MAD_F(0x068590a4) /* 0.407608645 */, 18 },
+ /* 5911 */ { MAD_F(0x0685f112) /* 0.407700606 */, 18 },
+ /* 5912 */ { MAD_F(0x06865181) /* 0.407792573 */, 18 },
+ /* 5913 */ { MAD_F(0x0686b1f2) /* 0.407884545 */, 18 },
+ /* 5914 */ { MAD_F(0x06871264) /* 0.407976522 */, 18 },
+ /* 5915 */ { MAD_F(0x068772d7) /* 0.408068505 */, 18 },
+ /* 5916 */ { MAD_F(0x0687d34c) /* 0.408160492 */, 18 },
+ /* 5917 */ { MAD_F(0x068833c2) /* 0.408252485 */, 18 },
+ /* 5918 */ { MAD_F(0x06889439) /* 0.408344483 */, 18 },
+ /* 5919 */ { MAD_F(0x0688f4b2) /* 0.408436486 */, 18 },
+
+ /* 5920 */ { MAD_F(0x0689552c) /* 0.408528495 */, 18 },
+ /* 5921 */ { MAD_F(0x0689b5a8) /* 0.408620508 */, 18 },
+ /* 5922 */ { MAD_F(0x068a1625) /* 0.408712527 */, 18 },
+ /* 5923 */ { MAD_F(0x068a76a4) /* 0.408804551 */, 18 },
+ /* 5924 */ { MAD_F(0x068ad724) /* 0.408896580 */, 18 },
+ /* 5925 */ { MAD_F(0x068b37a5) /* 0.408988614 */, 18 },
+ /* 5926 */ { MAD_F(0x068b9827) /* 0.409080653 */, 18 },
+ /* 5927 */ { MAD_F(0x068bf8ac) /* 0.409172698 */, 18 },
+ /* 5928 */ { MAD_F(0x068c5931) /* 0.409264748 */, 18 },
+ /* 5929 */ { MAD_F(0x068cb9b8) /* 0.409356803 */, 18 },
+ /* 5930 */ { MAD_F(0x068d1a40) /* 0.409448863 */, 18 },
+ /* 5931 */ { MAD_F(0x068d7aca) /* 0.409540928 */, 18 },
+ /* 5932 */ { MAD_F(0x068ddb54) /* 0.409632999 */, 18 },
+ /* 5933 */ { MAD_F(0x068e3be1) /* 0.409725074 */, 18 },
+ /* 5934 */ { MAD_F(0x068e9c6f) /* 0.409817155 */, 18 },
+ /* 5935 */ { MAD_F(0x068efcfe) /* 0.409909241 */, 18 },
+
+ /* 5936 */ { MAD_F(0x068f5d8e) /* 0.410001332 */, 18 },
+ /* 5937 */ { MAD_F(0x068fbe20) /* 0.410093428 */, 18 },
+ /* 5938 */ { MAD_F(0x06901eb4) /* 0.410185530 */, 18 },
+ /* 5939 */ { MAD_F(0x06907f48) /* 0.410277637 */, 18 },
+ /* 5940 */ { MAD_F(0x0690dfde) /* 0.410369748 */, 18 },
+ /* 5941 */ { MAD_F(0x06914076) /* 0.410461865 */, 18 },
+ /* 5942 */ { MAD_F(0x0691a10f) /* 0.410553988 */, 18 },
+ /* 5943 */ { MAD_F(0x069201a9) /* 0.410646115 */, 18 },
+ /* 5944 */ { MAD_F(0x06926245) /* 0.410738247 */, 18 },
+ /* 5945 */ { MAD_F(0x0692c2e2) /* 0.410830385 */, 18 },
+ /* 5946 */ { MAD_F(0x06932380) /* 0.410922528 */, 18 },
+ /* 5947 */ { MAD_F(0x06938420) /* 0.411014676 */, 18 },
+ /* 5948 */ { MAD_F(0x0693e4c1) /* 0.411106829 */, 18 },
+ /* 5949 */ { MAD_F(0x06944563) /* 0.411198987 */, 18 },
+ /* 5950 */ { MAD_F(0x0694a607) /* 0.411291151 */, 18 },
+ /* 5951 */ { MAD_F(0x069506ad) /* 0.411383320 */, 18 },
+
+ /* 5952 */ { MAD_F(0x06956753) /* 0.411475493 */, 18 },
+ /* 5953 */ { MAD_F(0x0695c7fc) /* 0.411567672 */, 18 },
+ /* 5954 */ { MAD_F(0x069628a5) /* 0.411659857 */, 18 },
+ /* 5955 */ { MAD_F(0x06968950) /* 0.411752046 */, 18 },
+ /* 5956 */ { MAD_F(0x0696e9fc) /* 0.411844240 */, 18 },
+ /* 5957 */ { MAD_F(0x06974aaa) /* 0.411936440 */, 18 },
+ /* 5958 */ { MAD_F(0x0697ab59) /* 0.412028645 */, 18 },
+ /* 5959 */ { MAD_F(0x06980c09) /* 0.412120855 */, 18 },
+ /* 5960 */ { MAD_F(0x06986cbb) /* 0.412213070 */, 18 },
+ /* 5961 */ { MAD_F(0x0698cd6e) /* 0.412305290 */, 18 },
+ /* 5962 */ { MAD_F(0x06992e23) /* 0.412397516 */, 18 },
+ /* 5963 */ { MAD_F(0x06998ed9) /* 0.412489746 */, 18 },
+ /* 5964 */ { MAD_F(0x0699ef90) /* 0.412581982 */, 18 },
+ /* 5965 */ { MAD_F(0x069a5049) /* 0.412674223 */, 18 },
+ /* 5966 */ { MAD_F(0x069ab103) /* 0.412766469 */, 18 },
+ /* 5967 */ { MAD_F(0x069b11bf) /* 0.412858720 */, 18 },
+
+ /* 5968 */ { MAD_F(0x069b727b) /* 0.412950976 */, 18 },
+ /* 5969 */ { MAD_F(0x069bd33a) /* 0.413043238 */, 18 },
+ /* 5970 */ { MAD_F(0x069c33f9) /* 0.413135505 */, 18 },
+ /* 5971 */ { MAD_F(0x069c94ba) /* 0.413227776 */, 18 },
+ /* 5972 */ { MAD_F(0x069cf57d) /* 0.413320053 */, 18 },
+ /* 5973 */ { MAD_F(0x069d5641) /* 0.413412335 */, 18 },
+ /* 5974 */ { MAD_F(0x069db706) /* 0.413504623 */, 18 },
+ /* 5975 */ { MAD_F(0x069e17cc) /* 0.413596915 */, 18 },
+ /* 5976 */ { MAD_F(0x069e7894) /* 0.413689213 */, 18 },
+ /* 5977 */ { MAD_F(0x069ed95e) /* 0.413781515 */, 18 },
+ /* 5978 */ { MAD_F(0x069f3a28) /* 0.413873823 */, 18 },
+ /* 5979 */ { MAD_F(0x069f9af4) /* 0.413966136 */, 18 },
+ /* 5980 */ { MAD_F(0x069ffbc2) /* 0.414058454 */, 18 },
+ /* 5981 */ { MAD_F(0x06a05c91) /* 0.414150778 */, 18 },
+ /* 5982 */ { MAD_F(0x06a0bd61) /* 0.414243106 */, 18 },
+ /* 5983 */ { MAD_F(0x06a11e32) /* 0.414335440 */, 18 },
+
+ /* 5984 */ { MAD_F(0x06a17f05) /* 0.414427779 */, 18 },
+ /* 5985 */ { MAD_F(0x06a1dfda) /* 0.414520122 */, 18 },
+ /* 5986 */ { MAD_F(0x06a240b0) /* 0.414612471 */, 18 },
+ /* 5987 */ { MAD_F(0x06a2a187) /* 0.414704826 */, 18 },
+ /* 5988 */ { MAD_F(0x06a3025f) /* 0.414797185 */, 18 },
+ /* 5989 */ { MAD_F(0x06a36339) /* 0.414889549 */, 18 },
+ /* 5990 */ { MAD_F(0x06a3c414) /* 0.414981919 */, 18 },
+ /* 5991 */ { MAD_F(0x06a424f1) /* 0.415074294 */, 18 },
+ /* 5992 */ { MAD_F(0x06a485cf) /* 0.415166674 */, 18 },
+ /* 5993 */ { MAD_F(0x06a4e6ae) /* 0.415259059 */, 18 },
+ /* 5994 */ { MAD_F(0x06a5478f) /* 0.415351449 */, 18 },
+ /* 5995 */ { MAD_F(0x06a5a871) /* 0.415443844 */, 18 },
+ /* 5996 */ { MAD_F(0x06a60955) /* 0.415536244 */, 18 },
+ /* 5997 */ { MAD_F(0x06a66a3a) /* 0.415628650 */, 18 },
+ /* 5998 */ { MAD_F(0x06a6cb20) /* 0.415721061 */, 18 },
+ /* 5999 */ { MAD_F(0x06a72c08) /* 0.415813476 */, 18 },
+
+ /* 6000 */ { MAD_F(0x06a78cf1) /* 0.415905897 */, 18 },
+ /* 6001 */ { MAD_F(0x06a7eddb) /* 0.415998324 */, 18 },
+ /* 6002 */ { MAD_F(0x06a84ec7) /* 0.416090755 */, 18 },
+ /* 6003 */ { MAD_F(0x06a8afb4) /* 0.416183191 */, 18 },
+ /* 6004 */ { MAD_F(0x06a910a3) /* 0.416275633 */, 18 },
+ /* 6005 */ { MAD_F(0x06a97193) /* 0.416368079 */, 18 },
+ /* 6006 */ { MAD_F(0x06a9d284) /* 0.416460531 */, 18 },
+ /* 6007 */ { MAD_F(0x06aa3377) /* 0.416552988 */, 18 },
+ /* 6008 */ { MAD_F(0x06aa946b) /* 0.416645450 */, 18 },
+ /* 6009 */ { MAD_F(0x06aaf561) /* 0.416737917 */, 18 },
+ /* 6010 */ { MAD_F(0x06ab5657) /* 0.416830389 */, 18 },
+ /* 6011 */ { MAD_F(0x06abb750) /* 0.416922867 */, 18 },
+ /* 6012 */ { MAD_F(0x06ac1849) /* 0.417015349 */, 18 },
+ /* 6013 */ { MAD_F(0x06ac7944) /* 0.417107837 */, 18 },
+ /* 6014 */ { MAD_F(0x06acda41) /* 0.417200330 */, 18 },
+ /* 6015 */ { MAD_F(0x06ad3b3e) /* 0.417292828 */, 18 },
+
+ /* 6016 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 18 },
+ /* 6017 */ { MAD_F(0x06adfd3e) /* 0.417477839 */, 18 },
+ /* 6018 */ { MAD_F(0x06ae5e40) /* 0.417570352 */, 18 },
+ /* 6019 */ { MAD_F(0x06aebf43) /* 0.417662871 */, 18 },
+ /* 6020 */ { MAD_F(0x06af2047) /* 0.417755394 */, 18 },
+ /* 6021 */ { MAD_F(0x06af814d) /* 0.417847923 */, 18 },
+ /* 6022 */ { MAD_F(0x06afe255) /* 0.417940457 */, 18 },
+ /* 6023 */ { MAD_F(0x06b0435e) /* 0.418032996 */, 18 },
+ /* 6024 */ { MAD_F(0x06b0a468) /* 0.418125540 */, 18 },
+ /* 6025 */ { MAD_F(0x06b10573) /* 0.418218089 */, 18 },
+ /* 6026 */ { MAD_F(0x06b16680) /* 0.418310643 */, 18 },
+ /* 6027 */ { MAD_F(0x06b1c78e) /* 0.418403203 */, 18 },
+ /* 6028 */ { MAD_F(0x06b2289e) /* 0.418495767 */, 18 },
+ /* 6029 */ { MAD_F(0x06b289af) /* 0.418588337 */, 18 },
+ /* 6030 */ { MAD_F(0x06b2eac1) /* 0.418680911 */, 18 },
+ /* 6031 */ { MAD_F(0x06b34bd5) /* 0.418773491 */, 18 },
+
+ /* 6032 */ { MAD_F(0x06b3acea) /* 0.418866076 */, 18 },
+ /* 6033 */ { MAD_F(0x06b40e00) /* 0.418958666 */, 18 },
+ /* 6034 */ { MAD_F(0x06b46f18) /* 0.419051262 */, 18 },
+ /* 6035 */ { MAD_F(0x06b4d031) /* 0.419143862 */, 18 },
+ /* 6036 */ { MAD_F(0x06b5314c) /* 0.419236467 */, 18 },
+ /* 6037 */ { MAD_F(0x06b59268) /* 0.419329078 */, 18 },
+ /* 6038 */ { MAD_F(0x06b5f385) /* 0.419421694 */, 18 },
+ /* 6039 */ { MAD_F(0x06b654a4) /* 0.419514314 */, 18 },
+ /* 6040 */ { MAD_F(0x06b6b5c4) /* 0.419606940 */, 18 },
+ /* 6041 */ { MAD_F(0x06b716e6) /* 0.419699571 */, 18 },
+ /* 6042 */ { MAD_F(0x06b77808) /* 0.419792208 */, 18 },
+ /* 6043 */ { MAD_F(0x06b7d92d) /* 0.419884849 */, 18 },
+ /* 6044 */ { MAD_F(0x06b83a52) /* 0.419977495 */, 18 },
+ /* 6045 */ { MAD_F(0x06b89b79) /* 0.420070147 */, 18 },
+ /* 6046 */ { MAD_F(0x06b8fca1) /* 0.420162803 */, 18 },
+ /* 6047 */ { MAD_F(0x06b95dcb) /* 0.420255465 */, 18 },
+
+ /* 6048 */ { MAD_F(0x06b9bef6) /* 0.420348132 */, 18 },
+ /* 6049 */ { MAD_F(0x06ba2023) /* 0.420440803 */, 18 },
+ /* 6050 */ { MAD_F(0x06ba8150) /* 0.420533481 */, 18 },
+ /* 6051 */ { MAD_F(0x06bae280) /* 0.420626163 */, 18 },
+ /* 6052 */ { MAD_F(0x06bb43b0) /* 0.420718850 */, 18 },
+ /* 6053 */ { MAD_F(0x06bba4e2) /* 0.420811542 */, 18 },
+ /* 6054 */ { MAD_F(0x06bc0615) /* 0.420904240 */, 18 },
+ /* 6055 */ { MAD_F(0x06bc674a) /* 0.420996942 */, 18 },
+ /* 6056 */ { MAD_F(0x06bcc880) /* 0.421089650 */, 18 },
+ /* 6057 */ { MAD_F(0x06bd29b7) /* 0.421182362 */, 18 },
+ /* 6058 */ { MAD_F(0x06bd8af0) /* 0.421275080 */, 18 },
+ /* 6059 */ { MAD_F(0x06bdec2a) /* 0.421367803 */, 18 },
+ /* 6060 */ { MAD_F(0x06be4d66) /* 0.421460531 */, 18 },
+ /* 6061 */ { MAD_F(0x06beaea3) /* 0.421553264 */, 18 },
+ /* 6062 */ { MAD_F(0x06bf0fe1) /* 0.421646003 */, 18 },
+ /* 6063 */ { MAD_F(0x06bf7120) /* 0.421738746 */, 18 },
+
+ /* 6064 */ { MAD_F(0x06bfd261) /* 0.421831494 */, 18 },
+ /* 6065 */ { MAD_F(0x06c033a4) /* 0.421924248 */, 18 },
+ /* 6066 */ { MAD_F(0x06c094e7) /* 0.422017007 */, 18 },
+ /* 6067 */ { MAD_F(0x06c0f62c) /* 0.422109770 */, 18 },
+ /* 6068 */ { MAD_F(0x06c15773) /* 0.422202539 */, 18 },
+ /* 6069 */ { MAD_F(0x06c1b8bb) /* 0.422295313 */, 18 },
+ /* 6070 */ { MAD_F(0x06c21a04) /* 0.422388092 */, 18 },
+ /* 6071 */ { MAD_F(0x06c27b4e) /* 0.422480876 */, 18 },
+ /* 6072 */ { MAD_F(0x06c2dc9a) /* 0.422573665 */, 18 },
+ /* 6073 */ { MAD_F(0x06c33de8) /* 0.422666460 */, 18 },
+ /* 6074 */ { MAD_F(0x06c39f36) /* 0.422759259 */, 18 },
+ /* 6075 */ { MAD_F(0x06c40086) /* 0.422852064 */, 18 },
+ /* 6076 */ { MAD_F(0x06c461d8) /* 0.422944873 */, 18 },
+ /* 6077 */ { MAD_F(0x06c4c32a) /* 0.423037688 */, 18 },
+ /* 6078 */ { MAD_F(0x06c5247f) /* 0.423130508 */, 18 },
+ /* 6079 */ { MAD_F(0x06c585d4) /* 0.423223333 */, 18 },
+
+ /* 6080 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 18 },
+ /* 6081 */ { MAD_F(0x06c64883) /* 0.423408997 */, 18 },
+ /* 6082 */ { MAD_F(0x06c6a9dd) /* 0.423501838 */, 18 },
+ /* 6083 */ { MAD_F(0x06c70b38) /* 0.423594683 */, 18 },
+ /* 6084 */ { MAD_F(0x06c76c94) /* 0.423687533 */, 18 },
+ /* 6085 */ { MAD_F(0x06c7cdf2) /* 0.423780389 */, 18 },
+ /* 6086 */ { MAD_F(0x06c82f51) /* 0.423873249 */, 18 },
+ /* 6087 */ { MAD_F(0x06c890b1) /* 0.423966115 */, 18 },
+ /* 6088 */ { MAD_F(0x06c8f213) /* 0.424058985 */, 18 },
+ /* 6089 */ { MAD_F(0x06c95376) /* 0.424151861 */, 18 },
+ /* 6090 */ { MAD_F(0x06c9b4da) /* 0.424244742 */, 18 },
+ /* 6091 */ { MAD_F(0x06ca1640) /* 0.424337628 */, 18 },
+ /* 6092 */ { MAD_F(0x06ca77a8) /* 0.424430519 */, 18 },
+ /* 6093 */ { MAD_F(0x06cad910) /* 0.424523415 */, 18 },
+ /* 6094 */ { MAD_F(0x06cb3a7a) /* 0.424616316 */, 18 },
+ /* 6095 */ { MAD_F(0x06cb9be5) /* 0.424709222 */, 18 },
+
+ /* 6096 */ { MAD_F(0x06cbfd52) /* 0.424802133 */, 18 },
+ /* 6097 */ { MAD_F(0x06cc5ec0) /* 0.424895050 */, 18 },
+ /* 6098 */ { MAD_F(0x06ccc030) /* 0.424987971 */, 18 },
+ /* 6099 */ { MAD_F(0x06cd21a0) /* 0.425080898 */, 18 },
+ /* 6100 */ { MAD_F(0x06cd8313) /* 0.425173829 */, 18 },
+ /* 6101 */ { MAD_F(0x06cde486) /* 0.425266766 */, 18 },
+ /* 6102 */ { MAD_F(0x06ce45fb) /* 0.425359708 */, 18 },
+ /* 6103 */ { MAD_F(0x06cea771) /* 0.425452655 */, 18 },
+ /* 6104 */ { MAD_F(0x06cf08e9) /* 0.425545607 */, 18 },
+ /* 6105 */ { MAD_F(0x06cf6a62) /* 0.425638564 */, 18 },
+ /* 6106 */ { MAD_F(0x06cfcbdc) /* 0.425731526 */, 18 },
+ /* 6107 */ { MAD_F(0x06d02d58) /* 0.425824493 */, 18 },
+ /* 6108 */ { MAD_F(0x06d08ed5) /* 0.425917465 */, 18 },
+ /* 6109 */ { MAD_F(0x06d0f053) /* 0.426010443 */, 18 },
+ /* 6110 */ { MAD_F(0x06d151d3) /* 0.426103425 */, 18 },
+ /* 6111 */ { MAD_F(0x06d1b354) /* 0.426196412 */, 18 },
+
+ /* 6112 */ { MAD_F(0x06d214d7) /* 0.426289405 */, 18 },
+ /* 6113 */ { MAD_F(0x06d2765a) /* 0.426382403 */, 18 },
+ /* 6114 */ { MAD_F(0x06d2d7e0) /* 0.426475405 */, 18 },
+ /* 6115 */ { MAD_F(0x06d33966) /* 0.426568413 */, 18 },
+ /* 6116 */ { MAD_F(0x06d39aee) /* 0.426661426 */, 18 },
+ /* 6117 */ { MAD_F(0x06d3fc77) /* 0.426754444 */, 18 },
+ /* 6118 */ { MAD_F(0x06d45e02) /* 0.426847467 */, 18 },
+ /* 6119 */ { MAD_F(0x06d4bf8e) /* 0.426940495 */, 18 },
+ /* 6120 */ { MAD_F(0x06d5211c) /* 0.427033528 */, 18 },
+ /* 6121 */ { MAD_F(0x06d582aa) /* 0.427126566 */, 18 },
+ /* 6122 */ { MAD_F(0x06d5e43a) /* 0.427219609 */, 18 },
+ /* 6123 */ { MAD_F(0x06d645cc) /* 0.427312657 */, 18 },
+ /* 6124 */ { MAD_F(0x06d6a75f) /* 0.427405711 */, 18 },
+ /* 6125 */ { MAD_F(0x06d708f3) /* 0.427498769 */, 18 },
+ /* 6126 */ { MAD_F(0x06d76a88) /* 0.427591833 */, 18 },
+ /* 6127 */ { MAD_F(0x06d7cc1f) /* 0.427684901 */, 18 },
+
+ /* 6128 */ { MAD_F(0x06d82db8) /* 0.427777975 */, 18 },
+ /* 6129 */ { MAD_F(0x06d88f51) /* 0.427871054 */, 18 },
+ /* 6130 */ { MAD_F(0x06d8f0ec) /* 0.427964137 */, 18 },
+ /* 6131 */ { MAD_F(0x06d95288) /* 0.428057226 */, 18 },
+ /* 6132 */ { MAD_F(0x06d9b426) /* 0.428150320 */, 18 },
+ /* 6133 */ { MAD_F(0x06da15c5) /* 0.428243419 */, 18 },
+ /* 6134 */ { MAD_F(0x06da7766) /* 0.428336523 */, 18 },
+ /* 6135 */ { MAD_F(0x06dad907) /* 0.428429632 */, 18 },
+ /* 6136 */ { MAD_F(0x06db3aaa) /* 0.428522746 */, 18 },
+ /* 6137 */ { MAD_F(0x06db9c4f) /* 0.428615865 */, 18 },
+ /* 6138 */ { MAD_F(0x06dbfdf5) /* 0.428708989 */, 18 },
+ /* 6139 */ { MAD_F(0x06dc5f9c) /* 0.428802119 */, 18 },
+ /* 6140 */ { MAD_F(0x06dcc145) /* 0.428895253 */, 18 },
+ /* 6141 */ { MAD_F(0x06dd22ee) /* 0.428988392 */, 18 },
+ /* 6142 */ { MAD_F(0x06dd849a) /* 0.429081537 */, 18 },
+ /* 6143 */ { MAD_F(0x06dde646) /* 0.429174686 */, 18 },
+
+ /* 6144 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 18 },
+ /* 6145 */ { MAD_F(0x06dea9a4) /* 0.429361001 */, 18 },
+ /* 6146 */ { MAD_F(0x06df0b54) /* 0.429454165 */, 18 },
+ /* 6147 */ { MAD_F(0x06df6d06) /* 0.429547335 */, 18 },
+ /* 6148 */ { MAD_F(0x06dfceba) /* 0.429640510 */, 18 },
+ /* 6149 */ { MAD_F(0x06e0306f) /* 0.429733690 */, 18 },
+ /* 6150 */ { MAD_F(0x06e09225) /* 0.429826874 */, 18 },
+ /* 6151 */ { MAD_F(0x06e0f3dc) /* 0.429920064 */, 18 },
+ /* 6152 */ { MAD_F(0x06e15595) /* 0.430013259 */, 18 },
+ /* 6153 */ { MAD_F(0x06e1b74f) /* 0.430106459 */, 18 },
+ /* 6154 */ { MAD_F(0x06e2190b) /* 0.430199664 */, 18 },
+ /* 6155 */ { MAD_F(0x06e27ac8) /* 0.430292875 */, 18 },
+ /* 6156 */ { MAD_F(0x06e2dc86) /* 0.430386090 */, 18 },
+ /* 6157 */ { MAD_F(0x06e33e46) /* 0.430479310 */, 18 },
+ /* 6158 */ { MAD_F(0x06e3a007) /* 0.430572535 */, 18 },
+ /* 6159 */ { MAD_F(0x06e401c9) /* 0.430665765 */, 18 },
+
+ /* 6160 */ { MAD_F(0x06e4638d) /* 0.430759001 */, 18 },
+ /* 6161 */ { MAD_F(0x06e4c552) /* 0.430852241 */, 18 },
+ /* 6162 */ { MAD_F(0x06e52718) /* 0.430945487 */, 18 },
+ /* 6163 */ { MAD_F(0x06e588e0) /* 0.431038737 */, 18 },
+ /* 6164 */ { MAD_F(0x06e5eaa9) /* 0.431131993 */, 18 },
+ /* 6165 */ { MAD_F(0x06e64c73) /* 0.431225253 */, 18 },
+ /* 6166 */ { MAD_F(0x06e6ae3f) /* 0.431318519 */, 18 },
+ /* 6167 */ { MAD_F(0x06e7100c) /* 0.431411790 */, 18 },
+ /* 6168 */ { MAD_F(0x06e771db) /* 0.431505065 */, 18 },
+ /* 6169 */ { MAD_F(0x06e7d3ab) /* 0.431598346 */, 18 },
+ /* 6170 */ { MAD_F(0x06e8357c) /* 0.431691632 */, 18 },
+ /* 6171 */ { MAD_F(0x06e8974e) /* 0.431784923 */, 18 },
+ /* 6172 */ { MAD_F(0x06e8f922) /* 0.431878218 */, 18 },
+ /* 6173 */ { MAD_F(0x06e95af8) /* 0.431971519 */, 18 },
+ /* 6174 */ { MAD_F(0x06e9bcce) /* 0.432064825 */, 18 },
+ /* 6175 */ { MAD_F(0x06ea1ea6) /* 0.432158136 */, 18 },
+
+ /* 6176 */ { MAD_F(0x06ea807f) /* 0.432251452 */, 18 },
+ /* 6177 */ { MAD_F(0x06eae25a) /* 0.432344773 */, 18 },
+ /* 6178 */ { MAD_F(0x06eb4436) /* 0.432438099 */, 18 },
+ /* 6179 */ { MAD_F(0x06eba614) /* 0.432531431 */, 18 },
+ /* 6180 */ { MAD_F(0x06ec07f2) /* 0.432624767 */, 18 },
+ /* 6181 */ { MAD_F(0x06ec69d2) /* 0.432718108 */, 18 },
+ /* 6182 */ { MAD_F(0x06eccbb4) /* 0.432811454 */, 18 },
+ /* 6183 */ { MAD_F(0x06ed2d97) /* 0.432904805 */, 18 },
+ /* 6184 */ { MAD_F(0x06ed8f7b) /* 0.432998162 */, 18 },
+ /* 6185 */ { MAD_F(0x06edf160) /* 0.433091523 */, 18 },
+ /* 6186 */ { MAD_F(0x06ee5347) /* 0.433184889 */, 18 },
+ /* 6187 */ { MAD_F(0x06eeb52f) /* 0.433278261 */, 18 },
+ /* 6188 */ { MAD_F(0x06ef1719) /* 0.433371637 */, 18 },
+ /* 6189 */ { MAD_F(0x06ef7904) /* 0.433465019 */, 18 },
+ /* 6190 */ { MAD_F(0x06efdaf0) /* 0.433558405 */, 18 },
+ /* 6191 */ { MAD_F(0x06f03cde) /* 0.433651797 */, 18 },
+
+ /* 6192 */ { MAD_F(0x06f09ecc) /* 0.433745193 */, 18 },
+ /* 6193 */ { MAD_F(0x06f100bd) /* 0.433838595 */, 18 },
+ /* 6194 */ { MAD_F(0x06f162ae) /* 0.433932001 */, 18 },
+ /* 6195 */ { MAD_F(0x06f1c4a1) /* 0.434025413 */, 18 },
+ /* 6196 */ { MAD_F(0x06f22696) /* 0.434118830 */, 18 },
+ /* 6197 */ { MAD_F(0x06f2888b) /* 0.434212251 */, 18 },
+ /* 6198 */ { MAD_F(0x06f2ea82) /* 0.434305678 */, 18 },
+ /* 6199 */ { MAD_F(0x06f34c7b) /* 0.434399110 */, 18 },
+ /* 6200 */ { MAD_F(0x06f3ae75) /* 0.434492546 */, 18 },
+ /* 6201 */ { MAD_F(0x06f41070) /* 0.434585988 */, 18 },
+ /* 6202 */ { MAD_F(0x06f4726c) /* 0.434679435 */, 18 },
+ /* 6203 */ { MAD_F(0x06f4d46a) /* 0.434772887 */, 18 },
+ /* 6204 */ { MAD_F(0x06f53669) /* 0.434866344 */, 18 },
+ /* 6205 */ { MAD_F(0x06f59869) /* 0.434959806 */, 18 },
+ /* 6206 */ { MAD_F(0x06f5fa6b) /* 0.435053272 */, 18 },
+ /* 6207 */ { MAD_F(0x06f65c6e) /* 0.435146744 */, 18 },
+
+ /* 6208 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 18 },
+ /* 6209 */ { MAD_F(0x06f72079) /* 0.435333703 */, 18 },
+ /* 6210 */ { MAD_F(0x06f78280) /* 0.435427190 */, 18 },
+ /* 6211 */ { MAD_F(0x06f7e489) /* 0.435520682 */, 18 },
+ /* 6212 */ { MAD_F(0x06f84693) /* 0.435614179 */, 18 },
+ /* 6213 */ { MAD_F(0x06f8a89e) /* 0.435707681 */, 18 },
+ /* 6214 */ { MAD_F(0x06f90aaa) /* 0.435801188 */, 18 },
+ /* 6215 */ { MAD_F(0x06f96cb8) /* 0.435894700 */, 18 },
+ /* 6216 */ { MAD_F(0x06f9cec8) /* 0.435988217 */, 18 },
+ /* 6217 */ { MAD_F(0x06fa30d8) /* 0.436081739 */, 18 },
+ /* 6218 */ { MAD_F(0x06fa92ea) /* 0.436175266 */, 18 },
+ /* 6219 */ { MAD_F(0x06faf4fe) /* 0.436268799 */, 18 },
+ /* 6220 */ { MAD_F(0x06fb5712) /* 0.436362336 */, 18 },
+ /* 6221 */ { MAD_F(0x06fbb928) /* 0.436455878 */, 18 },
+ /* 6222 */ { MAD_F(0x06fc1b40) /* 0.436549425 */, 18 },
+ /* 6223 */ { MAD_F(0x06fc7d58) /* 0.436642977 */, 18 },
+
+ /* 6224 */ { MAD_F(0x06fcdf72) /* 0.436736534 */, 18 },
+ /* 6225 */ { MAD_F(0x06fd418e) /* 0.436830096 */, 18 },
+ /* 6226 */ { MAD_F(0x06fda3ab) /* 0.436923664 */, 18 },
+ /* 6227 */ { MAD_F(0x06fe05c9) /* 0.437017236 */, 18 },
+ /* 6228 */ { MAD_F(0x06fe67e8) /* 0.437110813 */, 18 },
+ /* 6229 */ { MAD_F(0x06feca09) /* 0.437204395 */, 18 },
+ /* 6230 */ { MAD_F(0x06ff2c2b) /* 0.437297982 */, 18 },
+ /* 6231 */ { MAD_F(0x06ff8e4f) /* 0.437391575 */, 18 },
+ /* 6232 */ { MAD_F(0x06fff073) /* 0.437485172 */, 18 },
+ /* 6233 */ { MAD_F(0x0700529a) /* 0.437578774 */, 18 },
+ /* 6234 */ { MAD_F(0x0700b4c1) /* 0.437672381 */, 18 },
+ /* 6235 */ { MAD_F(0x070116ea) /* 0.437765994 */, 18 },
+ /* 6236 */ { MAD_F(0x07017914) /* 0.437859611 */, 18 },
+ /* 6237 */ { MAD_F(0x0701db40) /* 0.437953233 */, 18 },
+ /* 6238 */ { MAD_F(0x07023d6c) /* 0.438046860 */, 18 },
+ /* 6239 */ { MAD_F(0x07029f9b) /* 0.438140493 */, 18 },
+
+ /* 6240 */ { MAD_F(0x070301ca) /* 0.438234130 */, 18 },
+ /* 6241 */ { MAD_F(0x070363fb) /* 0.438327772 */, 18 },
+ /* 6242 */ { MAD_F(0x0703c62d) /* 0.438421419 */, 18 },
+ /* 6243 */ { MAD_F(0x07042861) /* 0.438515072 */, 18 },
+ /* 6244 */ { MAD_F(0x07048a96) /* 0.438608729 */, 18 },
+ /* 6245 */ { MAD_F(0x0704eccc) /* 0.438702391 */, 18 },
+ /* 6246 */ { MAD_F(0x07054f04) /* 0.438796059 */, 18 },
+ /* 6247 */ { MAD_F(0x0705b13d) /* 0.438889731 */, 18 },
+ /* 6248 */ { MAD_F(0x07061377) /* 0.438983408 */, 18 },
+ /* 6249 */ { MAD_F(0x070675b3) /* 0.439077090 */, 18 },
+ /* 6250 */ { MAD_F(0x0706d7f0) /* 0.439170778 */, 18 },
+ /* 6251 */ { MAD_F(0x07073a2e) /* 0.439264470 */, 18 },
+ /* 6252 */ { MAD_F(0x07079c6e) /* 0.439358167 */, 18 },
+ /* 6253 */ { MAD_F(0x0707feaf) /* 0.439451869 */, 18 },
+ /* 6254 */ { MAD_F(0x070860f1) /* 0.439545577 */, 18 },
+ /* 6255 */ { MAD_F(0x0708c335) /* 0.439639289 */, 18 },
+
+ /* 6256 */ { MAD_F(0x0709257a) /* 0.439733006 */, 18 },
+ /* 6257 */ { MAD_F(0x070987c0) /* 0.439826728 */, 18 },
+ /* 6258 */ { MAD_F(0x0709ea08) /* 0.439920456 */, 18 },
+ /* 6259 */ { MAD_F(0x070a4c51) /* 0.440014188 */, 18 },
+ /* 6260 */ { MAD_F(0x070aae9b) /* 0.440107925 */, 18 },
+ /* 6261 */ { MAD_F(0x070b10e7) /* 0.440201667 */, 18 },
+ /* 6262 */ { MAD_F(0x070b7334) /* 0.440295414 */, 18 },
+ /* 6263 */ { MAD_F(0x070bd583) /* 0.440389167 */, 18 },
+ /* 6264 */ { MAD_F(0x070c37d2) /* 0.440482924 */, 18 },
+ /* 6265 */ { MAD_F(0x070c9a23) /* 0.440576686 */, 18 },
+ /* 6266 */ { MAD_F(0x070cfc76) /* 0.440670453 */, 18 },
+ /* 6267 */ { MAD_F(0x070d5eca) /* 0.440764225 */, 18 },
+ /* 6268 */ { MAD_F(0x070dc11f) /* 0.440858002 */, 18 },
+ /* 6269 */ { MAD_F(0x070e2375) /* 0.440951784 */, 18 },
+ /* 6270 */ { MAD_F(0x070e85cd) /* 0.441045572 */, 18 },
+ /* 6271 */ { MAD_F(0x070ee826) /* 0.441139364 */, 18 },
+
+ /* 6272 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 18 },
+ /* 6273 */ { MAD_F(0x070facdc) /* 0.441326963 */, 18 },
+ /* 6274 */ { MAD_F(0x07100f39) /* 0.441420770 */, 18 },
+ /* 6275 */ { MAD_F(0x07107198) /* 0.441514582 */, 18 },
+ /* 6276 */ { MAD_F(0x0710d3f8) /* 0.441608399 */, 18 },
+ /* 6277 */ { MAD_F(0x07113659) /* 0.441702221 */, 18 },
+ /* 6278 */ { MAD_F(0x071198bb) /* 0.441796048 */, 18 },
+ /* 6279 */ { MAD_F(0x0711fb1f) /* 0.441889880 */, 18 },
+ /* 6280 */ { MAD_F(0x07125d84) /* 0.441983717 */, 18 },
+ /* 6281 */ { MAD_F(0x0712bfeb) /* 0.442077559 */, 18 },
+ /* 6282 */ { MAD_F(0x07132253) /* 0.442171406 */, 18 },
+ /* 6283 */ { MAD_F(0x071384bc) /* 0.442265257 */, 18 },
+ /* 6284 */ { MAD_F(0x0713e726) /* 0.442359114 */, 18 },
+ /* 6285 */ { MAD_F(0x07144992) /* 0.442452976 */, 18 },
+ /* 6286 */ { MAD_F(0x0714abff) /* 0.442546843 */, 18 },
+ /* 6287 */ { MAD_F(0x07150e6e) /* 0.442640715 */, 18 },
+
+ /* 6288 */ { MAD_F(0x071570de) /* 0.442734592 */, 18 },
+ /* 6289 */ { MAD_F(0x0715d34f) /* 0.442828473 */, 18 },
+ /* 6290 */ { MAD_F(0x071635c1) /* 0.442922360 */, 18 },
+ /* 6291 */ { MAD_F(0x07169835) /* 0.443016252 */, 18 },
+ /* 6292 */ { MAD_F(0x0716faaa) /* 0.443110148 */, 18 },
+ /* 6293 */ { MAD_F(0x07175d21) /* 0.443204050 */, 18 },
+ /* 6294 */ { MAD_F(0x0717bf99) /* 0.443297957 */, 18 },
+ /* 6295 */ { MAD_F(0x07182212) /* 0.443391868 */, 18 },
+ /* 6296 */ { MAD_F(0x0718848d) /* 0.443485785 */, 18 },
+ /* 6297 */ { MAD_F(0x0718e709) /* 0.443579706 */, 18 },
+ /* 6298 */ { MAD_F(0x07194986) /* 0.443673633 */, 18 },
+ /* 6299 */ { MAD_F(0x0719ac04) /* 0.443767564 */, 18 },
+ /* 6300 */ { MAD_F(0x071a0e84) /* 0.443861501 */, 18 },
+ /* 6301 */ { MAD_F(0x071a7105) /* 0.443955442 */, 18 },
+ /* 6302 */ { MAD_F(0x071ad388) /* 0.444049389 */, 18 },
+ /* 6303 */ { MAD_F(0x071b360c) /* 0.444143340 */, 18 },
+
+ /* 6304 */ { MAD_F(0x071b9891) /* 0.444237296 */, 18 },
+ /* 6305 */ { MAD_F(0x071bfb18) /* 0.444331258 */, 18 },
+ /* 6306 */ { MAD_F(0x071c5d9f) /* 0.444425224 */, 18 },
+ /* 6307 */ { MAD_F(0x071cc029) /* 0.444519195 */, 18 },
+ /* 6308 */ { MAD_F(0x071d22b3) /* 0.444613171 */, 18 },
+ /* 6309 */ { MAD_F(0x071d853f) /* 0.444707153 */, 18 },
+ /* 6310 */ { MAD_F(0x071de7cc) /* 0.444801139 */, 18 },
+ /* 6311 */ { MAD_F(0x071e4a5b) /* 0.444895130 */, 18 },
+ /* 6312 */ { MAD_F(0x071eaceb) /* 0.444989126 */, 18 },
+ /* 6313 */ { MAD_F(0x071f0f7c) /* 0.445083127 */, 18 },
+ /* 6314 */ { MAD_F(0x071f720e) /* 0.445177133 */, 18 },
+ /* 6315 */ { MAD_F(0x071fd4a2) /* 0.445271144 */, 18 },
+ /* 6316 */ { MAD_F(0x07203737) /* 0.445365160 */, 18 },
+ /* 6317 */ { MAD_F(0x072099ce) /* 0.445459181 */, 18 },
+ /* 6318 */ { MAD_F(0x0720fc66) /* 0.445553206 */, 18 },
+ /* 6319 */ { MAD_F(0x07215eff) /* 0.445647237 */, 18 },
+
+ /* 6320 */ { MAD_F(0x0721c19a) /* 0.445741273 */, 18 },
+ /* 6321 */ { MAD_F(0x07222436) /* 0.445835314 */, 18 },
+ /* 6322 */ { MAD_F(0x072286d3) /* 0.445929359 */, 18 },
+ /* 6323 */ { MAD_F(0x0722e971) /* 0.446023410 */, 18 },
+ /* 6324 */ { MAD_F(0x07234c11) /* 0.446117466 */, 18 },
+ /* 6325 */ { MAD_F(0x0723aeb2) /* 0.446211526 */, 18 },
+ /* 6326 */ { MAD_F(0x07241155) /* 0.446305592 */, 18 },
+ /* 6327 */ { MAD_F(0x072473f9) /* 0.446399662 */, 18 },
+ /* 6328 */ { MAD_F(0x0724d69e) /* 0.446493738 */, 18 },
+ /* 6329 */ { MAD_F(0x07253944) /* 0.446587818 */, 18 },
+ /* 6330 */ { MAD_F(0x07259bec) /* 0.446681903 */, 18 },
+ /* 6331 */ { MAD_F(0x0725fe95) /* 0.446775994 */, 18 },
+ /* 6332 */ { MAD_F(0x07266140) /* 0.446870089 */, 18 },
+ /* 6333 */ { MAD_F(0x0726c3ec) /* 0.446964189 */, 18 },
+ /* 6334 */ { MAD_F(0x07272699) /* 0.447058294 */, 18 },
+ /* 6335 */ { MAD_F(0x07278947) /* 0.447152404 */, 18 },
+
+ /* 6336 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 18 },
+ /* 6337 */ { MAD_F(0x07284ea8) /* 0.447340639 */, 18 },
+ /* 6338 */ { MAD_F(0x0728b15b) /* 0.447434764 */, 18 },
+ /* 6339 */ { MAD_F(0x0729140f) /* 0.447528894 */, 18 },
+ /* 6340 */ { MAD_F(0x072976c4) /* 0.447623029 */, 18 },
+ /* 6341 */ { MAD_F(0x0729d97a) /* 0.447717169 */, 18 },
+ /* 6342 */ { MAD_F(0x072a3c32) /* 0.447811314 */, 18 },
+ /* 6343 */ { MAD_F(0x072a9eeb) /* 0.447905463 */, 18 },
+ /* 6344 */ { MAD_F(0x072b01a6) /* 0.447999618 */, 18 },
+ /* 6345 */ { MAD_F(0x072b6461) /* 0.448093778 */, 18 },
+ /* 6346 */ { MAD_F(0x072bc71e) /* 0.448187942 */, 18 },
+ /* 6347 */ { MAD_F(0x072c29dd) /* 0.448282112 */, 18 },
+ /* 6348 */ { MAD_F(0x072c8c9d) /* 0.448376286 */, 18 },
+ /* 6349 */ { MAD_F(0x072cef5e) /* 0.448470466 */, 18 },
+ /* 6350 */ { MAD_F(0x072d5220) /* 0.448564650 */, 18 },
+ /* 6351 */ { MAD_F(0x072db4e4) /* 0.448658839 */, 18 },
+
+ /* 6352 */ { MAD_F(0x072e17a9) /* 0.448753033 */, 18 },
+ /* 6353 */ { MAD_F(0x072e7a6f) /* 0.448847233 */, 18 },
+ /* 6354 */ { MAD_F(0x072edd37) /* 0.448941437 */, 18 },
+ /* 6355 */ { MAD_F(0x072f4000) /* 0.449035646 */, 18 },
+ /* 6356 */ { MAD_F(0x072fa2ca) /* 0.449129860 */, 18 },
+ /* 6357 */ { MAD_F(0x07300596) /* 0.449224079 */, 18 },
+ /* 6358 */ { MAD_F(0x07306863) /* 0.449318303 */, 18 },
+ /* 6359 */ { MAD_F(0x0730cb32) /* 0.449412531 */, 18 },
+ /* 6360 */ { MAD_F(0x07312e01) /* 0.449506765 */, 18 },
+ /* 6361 */ { MAD_F(0x073190d2) /* 0.449601004 */, 18 },
+ /* 6362 */ { MAD_F(0x0731f3a5) /* 0.449695247 */, 18 },
+ /* 6363 */ { MAD_F(0x07325678) /* 0.449789496 */, 18 },
+ /* 6364 */ { MAD_F(0x0732b94d) /* 0.449883749 */, 18 },
+ /* 6365 */ { MAD_F(0x07331c23) /* 0.449978008 */, 18 },
+ /* 6366 */ { MAD_F(0x07337efb) /* 0.450072271 */, 18 },
+ /* 6367 */ { MAD_F(0x0733e1d4) /* 0.450166540 */, 18 },
+
+ /* 6368 */ { MAD_F(0x073444ae) /* 0.450260813 */, 18 },
+ /* 6369 */ { MAD_F(0x0734a78a) /* 0.450355091 */, 18 },
+ /* 6370 */ { MAD_F(0x07350a67) /* 0.450449374 */, 18 },
+ /* 6371 */ { MAD_F(0x07356d45) /* 0.450543662 */, 18 },
+ /* 6372 */ { MAD_F(0x0735d025) /* 0.450637955 */, 18 },
+ /* 6373 */ { MAD_F(0x07363306) /* 0.450732253 */, 18 },
+ /* 6374 */ { MAD_F(0x073695e8) /* 0.450826556 */, 18 },
+ /* 6375 */ { MAD_F(0x0736f8cb) /* 0.450920864 */, 18 },
+ /* 6376 */ { MAD_F(0x07375bb0) /* 0.451015176 */, 18 },
+ /* 6377 */ { MAD_F(0x0737be96) /* 0.451109494 */, 18 },
+ /* 6378 */ { MAD_F(0x0738217e) /* 0.451203817 */, 18 },
+ /* 6379 */ { MAD_F(0x07388467) /* 0.451298144 */, 18 },
+ /* 6380 */ { MAD_F(0x0738e751) /* 0.451392477 */, 18 },
+ /* 6381 */ { MAD_F(0x07394a3d) /* 0.451486814 */, 18 },
+ /* 6382 */ { MAD_F(0x0739ad29) /* 0.451581156 */, 18 },
+ /* 6383 */ { MAD_F(0x073a1017) /* 0.451675503 */, 18 },
+
+ /* 6384 */ { MAD_F(0x073a7307) /* 0.451769856 */, 18 },
+ /* 6385 */ { MAD_F(0x073ad5f8) /* 0.451864213 */, 18 },
+ /* 6386 */ { MAD_F(0x073b38ea) /* 0.451958575 */, 18 },
+ /* 6387 */ { MAD_F(0x073b9bdd) /* 0.452052942 */, 18 },
+ /* 6388 */ { MAD_F(0x073bfed2) /* 0.452147313 */, 18 },
+ /* 6389 */ { MAD_F(0x073c61c8) /* 0.452241690 */, 18 },
+ /* 6390 */ { MAD_F(0x073cc4bf) /* 0.452336072 */, 18 },
+ /* 6391 */ { MAD_F(0x073d27b8) /* 0.452430458 */, 18 },
+ /* 6392 */ { MAD_F(0x073d8ab2) /* 0.452524850 */, 18 },
+ /* 6393 */ { MAD_F(0x073dedae) /* 0.452619246 */, 18 },
+ /* 6394 */ { MAD_F(0x073e50aa) /* 0.452713648 */, 18 },
+ /* 6395 */ { MAD_F(0x073eb3a8) /* 0.452808054 */, 18 },
+ /* 6396 */ { MAD_F(0x073f16a8) /* 0.452902465 */, 18 },
+ /* 6397 */ { MAD_F(0x073f79a8) /* 0.452996882 */, 18 },
+ /* 6398 */ { MAD_F(0x073fdcaa) /* 0.453091303 */, 18 },
+ /* 6399 */ { MAD_F(0x07403fad) /* 0.453185729 */, 18 },
+
+ /* 6400 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 18 },
+ /* 6401 */ { MAD_F(0x074105b8) /* 0.453374595 */, 18 },
+ /* 6402 */ { MAD_F(0x074168bf) /* 0.453469036 */, 18 },
+ /* 6403 */ { MAD_F(0x0741cbc8) /* 0.453563482 */, 18 },
+ /* 6404 */ { MAD_F(0x07422ed2) /* 0.453657932 */, 18 },
+ /* 6405 */ { MAD_F(0x074291dd) /* 0.453752388 */, 18 },
+ /* 6406 */ { MAD_F(0x0742f4e9) /* 0.453846848 */, 18 },
+ /* 6407 */ { MAD_F(0x074357f7) /* 0.453941314 */, 18 },
+ /* 6408 */ { MAD_F(0x0743bb06) /* 0.454035784 */, 18 },
+ /* 6409 */ { MAD_F(0x07441e17) /* 0.454130259 */, 18 },
+ /* 6410 */ { MAD_F(0x07448129) /* 0.454224739 */, 18 },
+ /* 6411 */ { MAD_F(0x0744e43c) /* 0.454319224 */, 18 },
+ /* 6412 */ { MAD_F(0x07454750) /* 0.454413714 */, 18 },
+ /* 6413 */ { MAD_F(0x0745aa66) /* 0.454508209 */, 18 },
+ /* 6414 */ { MAD_F(0x07460d7d) /* 0.454602708 */, 18 },
+ /* 6415 */ { MAD_F(0x07467095) /* 0.454697213 */, 18 },
+
+ /* 6416 */ { MAD_F(0x0746d3af) /* 0.454791723 */, 18 },
+ /* 6417 */ { MAD_F(0x074736ca) /* 0.454886237 */, 18 },
+ /* 6418 */ { MAD_F(0x074799e7) /* 0.454980756 */, 18 },
+ /* 6419 */ { MAD_F(0x0747fd04) /* 0.455075281 */, 18 },
+ /* 6420 */ { MAD_F(0x07486023) /* 0.455169810 */, 18 },
+ /* 6421 */ { MAD_F(0x0748c344) /* 0.455264344 */, 18 },
+ /* 6422 */ { MAD_F(0x07492665) /* 0.455358883 */, 18 },
+ /* 6423 */ { MAD_F(0x07498988) /* 0.455453427 */, 18 },
+ /* 6424 */ { MAD_F(0x0749ecac) /* 0.455547976 */, 18 },
+ /* 6425 */ { MAD_F(0x074a4fd2) /* 0.455642529 */, 18 },
+ /* 6426 */ { MAD_F(0x074ab2f9) /* 0.455737088 */, 18 },
+ /* 6427 */ { MAD_F(0x074b1621) /* 0.455831652 */, 18 },
+ /* 6428 */ { MAD_F(0x074b794b) /* 0.455926220 */, 18 },
+ /* 6429 */ { MAD_F(0x074bdc75) /* 0.456020793 */, 18 },
+ /* 6430 */ { MAD_F(0x074c3fa1) /* 0.456115372 */, 18 },
+ /* 6431 */ { MAD_F(0x074ca2cf) /* 0.456209955 */, 18 },
+
+ /* 6432 */ { MAD_F(0x074d05fe) /* 0.456304543 */, 18 },
+ /* 6433 */ { MAD_F(0x074d692e) /* 0.456399136 */, 18 },
+ /* 6434 */ { MAD_F(0x074dcc5f) /* 0.456493733 */, 18 },
+ /* 6435 */ { MAD_F(0x074e2f92) /* 0.456588336 */, 18 },
+ /* 6436 */ { MAD_F(0x074e92c6) /* 0.456682944 */, 18 },
+ /* 6437 */ { MAD_F(0x074ef5fb) /* 0.456777556 */, 18 },
+ /* 6438 */ { MAD_F(0x074f5932) /* 0.456872174 */, 18 },
+ /* 6439 */ { MAD_F(0x074fbc6a) /* 0.456966796 */, 18 },
+ /* 6440 */ { MAD_F(0x07501fa3) /* 0.457061423 */, 18 },
+ /* 6441 */ { MAD_F(0x075082de) /* 0.457156056 */, 18 },
+ /* 6442 */ { MAD_F(0x0750e61a) /* 0.457250693 */, 18 },
+ /* 6443 */ { MAD_F(0x07514957) /* 0.457345335 */, 18 },
+ /* 6444 */ { MAD_F(0x0751ac96) /* 0.457439981 */, 18 },
+ /* 6445 */ { MAD_F(0x07520fd6) /* 0.457534633 */, 18 },
+ /* 6446 */ { MAD_F(0x07527317) /* 0.457629290 */, 18 },
+ /* 6447 */ { MAD_F(0x0752d659) /* 0.457723951 */, 18 },
+
+ /* 6448 */ { MAD_F(0x0753399d) /* 0.457818618 */, 18 },
+ /* 6449 */ { MAD_F(0x07539ce2) /* 0.457913289 */, 18 },
+ /* 6450 */ { MAD_F(0x07540029) /* 0.458007965 */, 18 },
+ /* 6451 */ { MAD_F(0x07546371) /* 0.458102646 */, 18 },
+ /* 6452 */ { MAD_F(0x0754c6ba) /* 0.458197332 */, 18 },
+ /* 6453 */ { MAD_F(0x07552a04) /* 0.458292023 */, 18 },
+ /* 6454 */ { MAD_F(0x07558d50) /* 0.458386719 */, 18 },
+ /* 6455 */ { MAD_F(0x0755f09d) /* 0.458481420 */, 18 },
+ /* 6456 */ { MAD_F(0x075653eb) /* 0.458576125 */, 18 },
+ /* 6457 */ { MAD_F(0x0756b73b) /* 0.458670836 */, 18 },
+ /* 6458 */ { MAD_F(0x07571a8c) /* 0.458765551 */, 18 },
+ /* 6459 */ { MAD_F(0x07577dde) /* 0.458860271 */, 18 },
+ /* 6460 */ { MAD_F(0x0757e131) /* 0.458954996 */, 18 },
+ /* 6461 */ { MAD_F(0x07584486) /* 0.459049726 */, 18 },
+ /* 6462 */ { MAD_F(0x0758a7dd) /* 0.459144461 */, 18 },
+ /* 6463 */ { MAD_F(0x07590b34) /* 0.459239201 */, 18 },
+
+ /* 6464 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 18 },
+ /* 6465 */ { MAD_F(0x0759d1e7) /* 0.459428695 */, 18 },
+ /* 6466 */ { MAD_F(0x075a3542) /* 0.459523450 */, 18 },
+ /* 6467 */ { MAD_F(0x075a989f) /* 0.459618209 */, 18 },
+ /* 6468 */ { MAD_F(0x075afbfd) /* 0.459712973 */, 18 },
+ /* 6469 */ { MAD_F(0x075b5f5d) /* 0.459807742 */, 18 },
+ /* 6470 */ { MAD_F(0x075bc2bd) /* 0.459902516 */, 18 },
+ /* 6471 */ { MAD_F(0x075c261f) /* 0.459997295 */, 18 },
+ /* 6472 */ { MAD_F(0x075c8983) /* 0.460092079 */, 18 },
+ /* 6473 */ { MAD_F(0x075cece7) /* 0.460186867 */, 18 },
+ /* 6474 */ { MAD_F(0x075d504d) /* 0.460281661 */, 18 },
+ /* 6475 */ { MAD_F(0x075db3b5) /* 0.460376459 */, 18 },
+ /* 6476 */ { MAD_F(0x075e171d) /* 0.460471262 */, 18 },
+ /* 6477 */ { MAD_F(0x075e7a87) /* 0.460566071 */, 18 },
+ /* 6478 */ { MAD_F(0x075eddf2) /* 0.460660884 */, 18 },
+ /* 6479 */ { MAD_F(0x075f415f) /* 0.460755701 */, 18 },
+
+ /* 6480 */ { MAD_F(0x075fa4cc) /* 0.460850524 */, 18 },
+ /* 6481 */ { MAD_F(0x0760083b) /* 0.460945352 */, 18 },
+ /* 6482 */ { MAD_F(0x07606bac) /* 0.461040184 */, 18 },
+ /* 6483 */ { MAD_F(0x0760cf1e) /* 0.461135022 */, 18 },
+ /* 6484 */ { MAD_F(0x07613291) /* 0.461229864 */, 18 },
+ /* 6485 */ { MAD_F(0x07619605) /* 0.461324711 */, 18 },
+ /* 6486 */ { MAD_F(0x0761f97b) /* 0.461419563 */, 18 },
+ /* 6487 */ { MAD_F(0x07625cf2) /* 0.461514420 */, 18 },
+ /* 6488 */ { MAD_F(0x0762c06a) /* 0.461609282 */, 18 },
+ /* 6489 */ { MAD_F(0x076323e3) /* 0.461704149 */, 18 },
+ /* 6490 */ { MAD_F(0x0763875e) /* 0.461799020 */, 18 },
+ /* 6491 */ { MAD_F(0x0763eadb) /* 0.461893897 */, 18 },
+ /* 6492 */ { MAD_F(0x07644e58) /* 0.461988778 */, 18 },
+ /* 6493 */ { MAD_F(0x0764b1d7) /* 0.462083664 */, 18 },
+ /* 6494 */ { MAD_F(0x07651557) /* 0.462178555 */, 18 },
+ /* 6495 */ { MAD_F(0x076578d8) /* 0.462273451 */, 18 },
+
+ /* 6496 */ { MAD_F(0x0765dc5b) /* 0.462368352 */, 18 },
+ /* 6497 */ { MAD_F(0x07663fdf) /* 0.462463257 */, 18 },
+ /* 6498 */ { MAD_F(0x0766a364) /* 0.462558168 */, 18 },
+ /* 6499 */ { MAD_F(0x076706eb) /* 0.462653083 */, 18 },
+ /* 6500 */ { MAD_F(0x07676a73) /* 0.462748003 */, 18 },
+ /* 6501 */ { MAD_F(0x0767cdfc) /* 0.462842928 */, 18 },
+ /* 6502 */ { MAD_F(0x07683187) /* 0.462937858 */, 18 },
+ /* 6503 */ { MAD_F(0x07689513) /* 0.463032793 */, 18 },
+ /* 6504 */ { MAD_F(0x0768f8a0) /* 0.463127733 */, 18 },
+ /* 6505 */ { MAD_F(0x07695c2e) /* 0.463222678 */, 18 },
+ /* 6506 */ { MAD_F(0x0769bfbe) /* 0.463317627 */, 18 },
+ /* 6507 */ { MAD_F(0x076a234f) /* 0.463412581 */, 18 },
+ /* 6508 */ { MAD_F(0x076a86e2) /* 0.463507540 */, 18 },
+ /* 6509 */ { MAD_F(0x076aea75) /* 0.463602504 */, 18 },
+ /* 6510 */ { MAD_F(0x076b4e0a) /* 0.463697473 */, 18 },
+ /* 6511 */ { MAD_F(0x076bb1a1) /* 0.463792447 */, 18 },
+
+ /* 6512 */ { MAD_F(0x076c1538) /* 0.463887426 */, 18 },
+ /* 6513 */ { MAD_F(0x076c78d1) /* 0.463982409 */, 18 },
+ /* 6514 */ { MAD_F(0x076cdc6c) /* 0.464077398 */, 18 },
+ /* 6515 */ { MAD_F(0x076d4007) /* 0.464172391 */, 18 },
+ /* 6516 */ { MAD_F(0x076da3a4) /* 0.464267389 */, 18 },
+ /* 6517 */ { MAD_F(0x076e0742) /* 0.464362392 */, 18 },
+ /* 6518 */ { MAD_F(0x076e6ae2) /* 0.464457399 */, 18 },
+ /* 6519 */ { MAD_F(0x076ece82) /* 0.464552412 */, 18 },
+ /* 6520 */ { MAD_F(0x076f3224) /* 0.464647430 */, 18 },
+ /* 6521 */ { MAD_F(0x076f95c8) /* 0.464742452 */, 18 },
+ /* 6522 */ { MAD_F(0x076ff96c) /* 0.464837479 */, 18 },
+ /* 6523 */ { MAD_F(0x07705d12) /* 0.464932511 */, 18 },
+ /* 6524 */ { MAD_F(0x0770c0ba) /* 0.465027548 */, 18 },
+ /* 6525 */ { MAD_F(0x07712462) /* 0.465122590 */, 18 },
+ /* 6526 */ { MAD_F(0x0771880c) /* 0.465217637 */, 18 },
+ /* 6527 */ { MAD_F(0x0771ebb7) /* 0.465312688 */, 18 },
+
+ /* 6528 */ { MAD_F(0x07724f64) /* 0.465407744 */, 18 },
+ /* 6529 */ { MAD_F(0x0772b312) /* 0.465502806 */, 18 },
+ /* 6530 */ { MAD_F(0x077316c1) /* 0.465597872 */, 18 },
+ /* 6531 */ { MAD_F(0x07737a71) /* 0.465692943 */, 18 },
+ /* 6532 */ { MAD_F(0x0773de23) /* 0.465788018 */, 18 },
+ /* 6533 */ { MAD_F(0x077441d6) /* 0.465883099 */, 18 },
+ /* 6534 */ { MAD_F(0x0774a58a) /* 0.465978184 */, 18 },
+ /* 6535 */ { MAD_F(0x07750940) /* 0.466073275 */, 18 },
+ /* 6536 */ { MAD_F(0x07756cf7) /* 0.466168370 */, 18 },
+ /* 6537 */ { MAD_F(0x0775d0af) /* 0.466263470 */, 18 },
+ /* 6538 */ { MAD_F(0x07763468) /* 0.466358575 */, 18 },
+ /* 6539 */ { MAD_F(0x07769823) /* 0.466453684 */, 18 },
+ /* 6540 */ { MAD_F(0x0776fbdf) /* 0.466548799 */, 18 },
+ /* 6541 */ { MAD_F(0x07775f9d) /* 0.466643918 */, 18 },
+ /* 6542 */ { MAD_F(0x0777c35c) /* 0.466739043 */, 18 },
+ /* 6543 */ { MAD_F(0x0778271c) /* 0.466834172 */, 18 },
+
+ /* 6544 */ { MAD_F(0x07788add) /* 0.466929306 */, 18 },
+ /* 6545 */ { MAD_F(0x0778ee9f) /* 0.467024445 */, 18 },
+ /* 6546 */ { MAD_F(0x07795263) /* 0.467119588 */, 18 },
+ /* 6547 */ { MAD_F(0x0779b629) /* 0.467214737 */, 18 },
+ /* 6548 */ { MAD_F(0x077a19ef) /* 0.467309890 */, 18 },
+ /* 6549 */ { MAD_F(0x077a7db7) /* 0.467405048 */, 18 },
+ /* 6550 */ { MAD_F(0x077ae180) /* 0.467500211 */, 18 },
+ /* 6551 */ { MAD_F(0x077b454b) /* 0.467595379 */, 18 },
+ /* 6552 */ { MAD_F(0x077ba916) /* 0.467690552 */, 18 },
+ /* 6553 */ { MAD_F(0x077c0ce3) /* 0.467785729 */, 18 },
+ /* 6554 */ { MAD_F(0x077c70b2) /* 0.467880912 */, 18 },
+ /* 6555 */ { MAD_F(0x077cd481) /* 0.467976099 */, 18 },
+ /* 6556 */ { MAD_F(0x077d3852) /* 0.468071291 */, 18 },
+ /* 6557 */ { MAD_F(0x077d9c24) /* 0.468166488 */, 18 },
+ /* 6558 */ { MAD_F(0x077dfff8) /* 0.468261690 */, 18 },
+ /* 6559 */ { MAD_F(0x077e63cd) /* 0.468356896 */, 18 },
+
+ /* 6560 */ { MAD_F(0x077ec7a3) /* 0.468452108 */, 18 },
+ /* 6561 */ { MAD_F(0x077f2b7a) /* 0.468547324 */, 18 },
+ /* 6562 */ { MAD_F(0x077f8f53) /* 0.468642545 */, 18 },
+ /* 6563 */ { MAD_F(0x077ff32d) /* 0.468737771 */, 18 },
+ /* 6564 */ { MAD_F(0x07805708) /* 0.468833002 */, 18 },
+ /* 6565 */ { MAD_F(0x0780bae5) /* 0.468928237 */, 18 },
+ /* 6566 */ { MAD_F(0x07811ec3) /* 0.469023478 */, 18 },
+ /* 6567 */ { MAD_F(0x078182a2) /* 0.469118723 */, 18 },
+ /* 6568 */ { MAD_F(0x0781e683) /* 0.469213973 */, 18 },
+ /* 6569 */ { MAD_F(0x07824a64) /* 0.469309228 */, 18 },
+ /* 6570 */ { MAD_F(0x0782ae47) /* 0.469404488 */, 18 },
+ /* 6571 */ { MAD_F(0x0783122c) /* 0.469499752 */, 18 },
+ /* 6572 */ { MAD_F(0x07837612) /* 0.469595022 */, 18 },
+ /* 6573 */ { MAD_F(0x0783d9f9) /* 0.469690296 */, 18 },
+ /* 6574 */ { MAD_F(0x07843de1) /* 0.469785575 */, 18 },
+ /* 6575 */ { MAD_F(0x0784a1ca) /* 0.469880859 */, 18 },
+
+ /* 6576 */ { MAD_F(0x078505b5) /* 0.469976148 */, 18 },
+ /* 6577 */ { MAD_F(0x078569a2) /* 0.470071442 */, 18 },
+ /* 6578 */ { MAD_F(0x0785cd8f) /* 0.470166740 */, 18 },
+ /* 6579 */ { MAD_F(0x0786317e) /* 0.470262043 */, 18 },
+ /* 6580 */ { MAD_F(0x0786956e) /* 0.470357351 */, 18 },
+ /* 6581 */ { MAD_F(0x0786f95f) /* 0.470452664 */, 18 },
+ /* 6582 */ { MAD_F(0x07875d52) /* 0.470547982 */, 18 },
+ /* 6583 */ { MAD_F(0x0787c146) /* 0.470643305 */, 18 },
+ /* 6584 */ { MAD_F(0x0788253b) /* 0.470738632 */, 18 },
+ /* 6585 */ { MAD_F(0x07888932) /* 0.470833964 */, 18 },
+ /* 6586 */ { MAD_F(0x0788ed2a) /* 0.470929301 */, 18 },
+ /* 6587 */ { MAD_F(0x07895123) /* 0.471024643 */, 18 },
+ /* 6588 */ { MAD_F(0x0789b51d) /* 0.471119990 */, 18 },
+ /* 6589 */ { MAD_F(0x078a1919) /* 0.471215341 */, 18 },
+ /* 6590 */ { MAD_F(0x078a7d16) /* 0.471310698 */, 18 },
+ /* 6591 */ { MAD_F(0x078ae114) /* 0.471406059 */, 18 },
+
+ /* 6592 */ { MAD_F(0x078b4514) /* 0.471501425 */, 18 },
+ /* 6593 */ { MAD_F(0x078ba915) /* 0.471596796 */, 18 },
+ /* 6594 */ { MAD_F(0x078c0d17) /* 0.471692171 */, 18 },
+ /* 6595 */ { MAD_F(0x078c711a) /* 0.471787552 */, 18 },
+ /* 6596 */ { MAD_F(0x078cd51f) /* 0.471882937 */, 18 },
+ /* 6597 */ { MAD_F(0x078d3925) /* 0.471978327 */, 18 },
+ /* 6598 */ { MAD_F(0x078d9d2d) /* 0.472073722 */, 18 },
+ /* 6599 */ { MAD_F(0x078e0135) /* 0.472169122 */, 18 },
+ /* 6600 */ { MAD_F(0x078e653f) /* 0.472264527 */, 18 },
+ /* 6601 */ { MAD_F(0x078ec94b) /* 0.472359936 */, 18 },
+ /* 6602 */ { MAD_F(0x078f2d57) /* 0.472455350 */, 18 },
+ /* 6603 */ { MAD_F(0x078f9165) /* 0.472550769 */, 18 },
+ /* 6604 */ { MAD_F(0x078ff574) /* 0.472646193 */, 18 },
+ /* 6605 */ { MAD_F(0x07905985) /* 0.472741622 */, 18 },
+ /* 6606 */ { MAD_F(0x0790bd96) /* 0.472837055 */, 18 },
+ /* 6607 */ { MAD_F(0x079121a9) /* 0.472932493 */, 18 },
+
+ /* 6608 */ { MAD_F(0x079185be) /* 0.473027937 */, 18 },
+ /* 6609 */ { MAD_F(0x0791e9d3) /* 0.473123384 */, 18 },
+ /* 6610 */ { MAD_F(0x07924dea) /* 0.473218837 */, 18 },
+ /* 6611 */ { MAD_F(0x0792b202) /* 0.473314295 */, 18 },
+ /* 6612 */ { MAD_F(0x0793161c) /* 0.473409757 */, 18 },
+ /* 6613 */ { MAD_F(0x07937a37) /* 0.473505224 */, 18 },
+ /* 6614 */ { MAD_F(0x0793de53) /* 0.473600696 */, 18 },
+ /* 6615 */ { MAD_F(0x07944270) /* 0.473696173 */, 18 },
+ /* 6616 */ { MAD_F(0x0794a68f) /* 0.473791655 */, 18 },
+ /* 6617 */ { MAD_F(0x07950aaf) /* 0.473887141 */, 18 },
+ /* 6618 */ { MAD_F(0x07956ed0) /* 0.473982632 */, 18 },
+ /* 6619 */ { MAD_F(0x0795d2f2) /* 0.474078128 */, 18 },
+ /* 6620 */ { MAD_F(0x07963716) /* 0.474173629 */, 18 },
+ /* 6621 */ { MAD_F(0x07969b3b) /* 0.474269135 */, 18 },
+ /* 6622 */ { MAD_F(0x0796ff62) /* 0.474364645 */, 18 },
+ /* 6623 */ { MAD_F(0x07976389) /* 0.474460161 */, 18 },
+
+ /* 6624 */ { MAD_F(0x0797c7b2) /* 0.474555681 */, 18 },
+ /* 6625 */ { MAD_F(0x07982bdd) /* 0.474651205 */, 18 },
+ /* 6626 */ { MAD_F(0x07989008) /* 0.474746735 */, 18 },
+ /* 6627 */ { MAD_F(0x0798f435) /* 0.474842270 */, 18 },
+ /* 6628 */ { MAD_F(0x07995863) /* 0.474937809 */, 18 },
+ /* 6629 */ { MAD_F(0x0799bc92) /* 0.475033353 */, 18 },
+ /* 6630 */ { MAD_F(0x079a20c3) /* 0.475128902 */, 18 },
+ /* 6631 */ { MAD_F(0x079a84f5) /* 0.475224456 */, 18 },
+ /* 6632 */ { MAD_F(0x079ae929) /* 0.475320014 */, 18 },
+ /* 6633 */ { MAD_F(0x079b4d5d) /* 0.475415578 */, 18 },
+ /* 6634 */ { MAD_F(0x079bb193) /* 0.475511146 */, 18 },
+ /* 6635 */ { MAD_F(0x079c15ca) /* 0.475606719 */, 18 },
+ /* 6636 */ { MAD_F(0x079c7a03) /* 0.475702296 */, 18 },
+ /* 6637 */ { MAD_F(0x079cde3c) /* 0.475797879 */, 18 },
+ /* 6638 */ { MAD_F(0x079d4277) /* 0.475893466 */, 18 },
+ /* 6639 */ { MAD_F(0x079da6b4) /* 0.475989058 */, 18 },
+
+ /* 6640 */ { MAD_F(0x079e0af1) /* 0.476084655 */, 18 },
+ /* 6641 */ { MAD_F(0x079e6f30) /* 0.476180257 */, 18 },
+ /* 6642 */ { MAD_F(0x079ed370) /* 0.476275863 */, 18 },
+ /* 6643 */ { MAD_F(0x079f37b2) /* 0.476371475 */, 18 },
+ /* 6644 */ { MAD_F(0x079f9bf5) /* 0.476467091 */, 18 },
+ /* 6645 */ { MAD_F(0x07a00039) /* 0.476562712 */, 18 },
+ /* 6646 */ { MAD_F(0x07a0647e) /* 0.476658338 */, 18 },
+ /* 6647 */ { MAD_F(0x07a0c8c5) /* 0.476753968 */, 18 },
+ /* 6648 */ { MAD_F(0x07a12d0c) /* 0.476849603 */, 18 },
+ /* 6649 */ { MAD_F(0x07a19156) /* 0.476945243 */, 18 },
+ /* 6650 */ { MAD_F(0x07a1f5a0) /* 0.477040888 */, 18 },
+ /* 6651 */ { MAD_F(0x07a259ec) /* 0.477136538 */, 18 },
+ /* 6652 */ { MAD_F(0x07a2be39) /* 0.477232193 */, 18 },
+ /* 6653 */ { MAD_F(0x07a32287) /* 0.477327852 */, 18 },
+ /* 6654 */ { MAD_F(0x07a386d7) /* 0.477423516 */, 18 },
+ /* 6655 */ { MAD_F(0x07a3eb28) /* 0.477519185 */, 18 },
+
+ /* 6656 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 18 },
+ /* 6657 */ { MAD_F(0x07a4b3ce) /* 0.477710537 */, 18 },
+ /* 6658 */ { MAD_F(0x07a51822) /* 0.477806220 */, 18 },
+ /* 6659 */ { MAD_F(0x07a57c78) /* 0.477901908 */, 18 },
+ /* 6660 */ { MAD_F(0x07a5e0d0) /* 0.477997601 */, 18 },
+ /* 6661 */ { MAD_F(0x07a64528) /* 0.478093299 */, 18 },
+ /* 6662 */ { MAD_F(0x07a6a982) /* 0.478189001 */, 18 },
+ /* 6663 */ { MAD_F(0x07a70ddd) /* 0.478284708 */, 18 },
+ /* 6664 */ { MAD_F(0x07a7723a) /* 0.478380420 */, 18 },
+ /* 6665 */ { MAD_F(0x07a7d698) /* 0.478476137 */, 18 },
+ /* 6666 */ { MAD_F(0x07a83af7) /* 0.478571858 */, 18 },
+ /* 6667 */ { MAD_F(0x07a89f57) /* 0.478667585 */, 18 },
+ /* 6668 */ { MAD_F(0x07a903b9) /* 0.478763316 */, 18 },
+ /* 6669 */ { MAD_F(0x07a9681c) /* 0.478859052 */, 18 },
+ /* 6670 */ { MAD_F(0x07a9cc80) /* 0.478954793 */, 18 },
+ /* 6671 */ { MAD_F(0x07aa30e5) /* 0.479050538 */, 18 },
+
+ /* 6672 */ { MAD_F(0x07aa954c) /* 0.479146288 */, 18 },
+ /* 6673 */ { MAD_F(0x07aaf9b4) /* 0.479242043 */, 18 },
+ /* 6674 */ { MAD_F(0x07ab5e1e) /* 0.479337803 */, 18 },
+ /* 6675 */ { MAD_F(0x07abc288) /* 0.479433568 */, 18 },
+ /* 6676 */ { MAD_F(0x07ac26f4) /* 0.479529337 */, 18 },
+ /* 6677 */ { MAD_F(0x07ac8b61) /* 0.479625111 */, 18 },
+ /* 6678 */ { MAD_F(0x07acefd0) /* 0.479720890 */, 18 },
+ /* 6679 */ { MAD_F(0x07ad543f) /* 0.479816674 */, 18 },
+ /* 6680 */ { MAD_F(0x07adb8b0) /* 0.479912463 */, 18 },
+ /* 6681 */ { MAD_F(0x07ae1d23) /* 0.480008256 */, 18 },
+ /* 6682 */ { MAD_F(0x07ae8196) /* 0.480104054 */, 18 },
+ /* 6683 */ { MAD_F(0x07aee60b) /* 0.480199857 */, 18 },
+ /* 6684 */ { MAD_F(0x07af4a81) /* 0.480295664 */, 18 },
+ /* 6685 */ { MAD_F(0x07afaef9) /* 0.480391477 */, 18 },
+ /* 6686 */ { MAD_F(0x07b01372) /* 0.480487294 */, 18 },
+ /* 6687 */ { MAD_F(0x07b077ec) /* 0.480583116 */, 18 },
+
+ /* 6688 */ { MAD_F(0x07b0dc67) /* 0.480678943 */, 18 },
+ /* 6689 */ { MAD_F(0x07b140e4) /* 0.480774774 */, 18 },
+ /* 6690 */ { MAD_F(0x07b1a561) /* 0.480870611 */, 18 },
+ /* 6691 */ { MAD_F(0x07b209e1) /* 0.480966452 */, 18 },
+ /* 6692 */ { MAD_F(0x07b26e61) /* 0.481062298 */, 18 },
+ /* 6693 */ { MAD_F(0x07b2d2e3) /* 0.481158148 */, 18 },
+ /* 6694 */ { MAD_F(0x07b33766) /* 0.481254004 */, 18 },
+ /* 6695 */ { MAD_F(0x07b39bea) /* 0.481349864 */, 18 },
+ /* 6696 */ { MAD_F(0x07b4006f) /* 0.481445729 */, 18 },
+ /* 6697 */ { MAD_F(0x07b464f6) /* 0.481541598 */, 18 },
+ /* 6698 */ { MAD_F(0x07b4c97e) /* 0.481637473 */, 18 },
+ /* 6699 */ { MAD_F(0x07b52e08) /* 0.481733352 */, 18 },
+ /* 6700 */ { MAD_F(0x07b59292) /* 0.481829236 */, 18 },
+ /* 6701 */ { MAD_F(0x07b5f71e) /* 0.481925125 */, 18 },
+ /* 6702 */ { MAD_F(0x07b65bac) /* 0.482021019 */, 18 },
+ /* 6703 */ { MAD_F(0x07b6c03a) /* 0.482116917 */, 18 },
+
+ /* 6704 */ { MAD_F(0x07b724ca) /* 0.482212820 */, 18 },
+ /* 6705 */ { MAD_F(0x07b7895b) /* 0.482308728 */, 18 },
+ /* 6706 */ { MAD_F(0x07b7eded) /* 0.482404640 */, 18 },
+ /* 6707 */ { MAD_F(0x07b85281) /* 0.482500558 */, 18 },
+ /* 6708 */ { MAD_F(0x07b8b716) /* 0.482596480 */, 18 },
+ /* 6709 */ { MAD_F(0x07b91bac) /* 0.482692407 */, 18 },
+ /* 6710 */ { MAD_F(0x07b98044) /* 0.482788339 */, 18 },
+ /* 6711 */ { MAD_F(0x07b9e4dc) /* 0.482884275 */, 18 },
+ /* 6712 */ { MAD_F(0x07ba4976) /* 0.482980216 */, 18 },
+ /* 6713 */ { MAD_F(0x07baae12) /* 0.483076162 */, 18 },
+ /* 6714 */ { MAD_F(0x07bb12ae) /* 0.483172113 */, 18 },
+ /* 6715 */ { MAD_F(0x07bb774c) /* 0.483268069 */, 18 },
+ /* 6716 */ { MAD_F(0x07bbdbeb) /* 0.483364029 */, 18 },
+ /* 6717 */ { MAD_F(0x07bc408c) /* 0.483459994 */, 18 },
+ /* 6718 */ { MAD_F(0x07bca52d) /* 0.483555964 */, 18 },
+ /* 6719 */ { MAD_F(0x07bd09d0) /* 0.483651939 */, 18 },
+
+ /* 6720 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 18 },
+ /* 6721 */ { MAD_F(0x07bdd31a) /* 0.483843902 */, 18 },
+ /* 6722 */ { MAD_F(0x07be37c1) /* 0.483939891 */, 18 },
+ /* 6723 */ { MAD_F(0x07be9c69) /* 0.484035885 */, 18 },
+ /* 6724 */ { MAD_F(0x07bf0113) /* 0.484131883 */, 18 },
+ /* 6725 */ { MAD_F(0x07bf65bd) /* 0.484227886 */, 18 },
+ /* 6726 */ { MAD_F(0x07bfca69) /* 0.484323894 */, 18 },
+ /* 6727 */ { MAD_F(0x07c02f16) /* 0.484419907 */, 18 },
+ /* 6728 */ { MAD_F(0x07c093c5) /* 0.484515924 */, 18 },
+ /* 6729 */ { MAD_F(0x07c0f875) /* 0.484611946 */, 18 },
+ /* 6730 */ { MAD_F(0x07c15d26) /* 0.484707973 */, 18 },
+ /* 6731 */ { MAD_F(0x07c1c1d8) /* 0.484804005 */, 18 },
+ /* 6732 */ { MAD_F(0x07c2268b) /* 0.484900041 */, 18 },
+ /* 6733 */ { MAD_F(0x07c28b40) /* 0.484996083 */, 18 },
+ /* 6734 */ { MAD_F(0x07c2eff6) /* 0.485092128 */, 18 },
+ /* 6735 */ { MAD_F(0x07c354ae) /* 0.485188179 */, 18 },
+
+ /* 6736 */ { MAD_F(0x07c3b967) /* 0.485284235 */, 18 },
+ /* 6737 */ { MAD_F(0x07c41e21) /* 0.485380295 */, 18 },
+ /* 6738 */ { MAD_F(0x07c482dc) /* 0.485476360 */, 18 },
+ /* 6739 */ { MAD_F(0x07c4e798) /* 0.485572430 */, 18 },
+ /* 6740 */ { MAD_F(0x07c54c56) /* 0.485668504 */, 18 },
+ /* 6741 */ { MAD_F(0x07c5b115) /* 0.485764583 */, 18 },
+ /* 6742 */ { MAD_F(0x07c615d6) /* 0.485860667 */, 18 },
+ /* 6743 */ { MAD_F(0x07c67a97) /* 0.485956756 */, 18 },
+ /* 6744 */ { MAD_F(0x07c6df5a) /* 0.486052849 */, 18 },
+ /* 6745 */ { MAD_F(0x07c7441e) /* 0.486148948 */, 18 },
+ /* 6746 */ { MAD_F(0x07c7a8e4) /* 0.486245051 */, 18 },
+ /* 6747 */ { MAD_F(0x07c80daa) /* 0.486341158 */, 18 },
+ /* 6748 */ { MAD_F(0x07c87272) /* 0.486437271 */, 18 },
+ /* 6749 */ { MAD_F(0x07c8d73c) /* 0.486533388 */, 18 },
+ /* 6750 */ { MAD_F(0x07c93c06) /* 0.486629510 */, 18 },
+ /* 6751 */ { MAD_F(0x07c9a0d2) /* 0.486725637 */, 18 },
+
+ /* 6752 */ { MAD_F(0x07ca059f) /* 0.486821768 */, 18 },
+ /* 6753 */ { MAD_F(0x07ca6a6d) /* 0.486917905 */, 18 },
+ /* 6754 */ { MAD_F(0x07cacf3d) /* 0.487014045 */, 18 },
+ /* 6755 */ { MAD_F(0x07cb340e) /* 0.487110191 */, 18 },
+ /* 6756 */ { MAD_F(0x07cb98e0) /* 0.487206342 */, 18 },
+ /* 6757 */ { MAD_F(0x07cbfdb4) /* 0.487302497 */, 18 },
+ /* 6758 */ { MAD_F(0x07cc6288) /* 0.487398657 */, 18 },
+ /* 6759 */ { MAD_F(0x07ccc75e) /* 0.487494821 */, 18 },
+ /* 6760 */ { MAD_F(0x07cd2c36) /* 0.487590991 */, 18 },
+ /* 6761 */ { MAD_F(0x07cd910e) /* 0.487687165 */, 18 },
+ /* 6762 */ { MAD_F(0x07cdf5e8) /* 0.487783344 */, 18 },
+ /* 6763 */ { MAD_F(0x07ce5ac3) /* 0.487879528 */, 18 },
+ /* 6764 */ { MAD_F(0x07cebfa0) /* 0.487975716 */, 18 },
+ /* 6765 */ { MAD_F(0x07cf247d) /* 0.488071909 */, 18 },
+ /* 6766 */ { MAD_F(0x07cf895c) /* 0.488168107 */, 18 },
+ /* 6767 */ { MAD_F(0x07cfee3c) /* 0.488264310 */, 18 },
+
+ /* 6768 */ { MAD_F(0x07d0531e) /* 0.488360517 */, 18 },
+ /* 6769 */ { MAD_F(0x07d0b801) /* 0.488456729 */, 18 },
+ /* 6770 */ { MAD_F(0x07d11ce5) /* 0.488552946 */, 18 },
+ /* 6771 */ { MAD_F(0x07d181ca) /* 0.488649167 */, 18 },
+ /* 6772 */ { MAD_F(0x07d1e6b0) /* 0.488745394 */, 18 },
+ /* 6773 */ { MAD_F(0x07d24b98) /* 0.488841625 */, 18 },
+ /* 6774 */ { MAD_F(0x07d2b081) /* 0.488937860 */, 18 },
+ /* 6775 */ { MAD_F(0x07d3156c) /* 0.489034101 */, 18 },
+ /* 6776 */ { MAD_F(0x07d37a57) /* 0.489130346 */, 18 },
+ /* 6777 */ { MAD_F(0x07d3df44) /* 0.489226596 */, 18 },
+ /* 6778 */ { MAD_F(0x07d44432) /* 0.489322851 */, 18 },
+ /* 6779 */ { MAD_F(0x07d4a922) /* 0.489419110 */, 18 },
+ /* 6780 */ { MAD_F(0x07d50e13) /* 0.489515375 */, 18 },
+ /* 6781 */ { MAD_F(0x07d57305) /* 0.489611643 */, 18 },
+ /* 6782 */ { MAD_F(0x07d5d7f8) /* 0.489707917 */, 18 },
+ /* 6783 */ { MAD_F(0x07d63cec) /* 0.489804195 */, 18 },
+
+ /* 6784 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 18 },
+ /* 6785 */ { MAD_F(0x07d706d9) /* 0.489996766 */, 18 },
+ /* 6786 */ { MAD_F(0x07d76bd2) /* 0.490093059 */, 18 },
+ /* 6787 */ { MAD_F(0x07d7d0cb) /* 0.490189356 */, 18 },
+ /* 6788 */ { MAD_F(0x07d835c6) /* 0.490285658 */, 18 },
+ /* 6789 */ { MAD_F(0x07d89ac2) /* 0.490381965 */, 18 },
+ /* 6790 */ { MAD_F(0x07d8ffc0) /* 0.490478277 */, 18 },
+ /* 6791 */ { MAD_F(0x07d964be) /* 0.490574593 */, 18 },
+ /* 6792 */ { MAD_F(0x07d9c9be) /* 0.490670914 */, 18 },
+ /* 6793 */ { MAD_F(0x07da2ebf) /* 0.490767239 */, 18 },
+ /* 6794 */ { MAD_F(0x07da93c2) /* 0.490863570 */, 18 },
+ /* 6795 */ { MAD_F(0x07daf8c6) /* 0.490959905 */, 18 },
+ /* 6796 */ { MAD_F(0x07db5dcb) /* 0.491056245 */, 18 },
+ /* 6797 */ { MAD_F(0x07dbc2d1) /* 0.491152589 */, 18 },
+ /* 6798 */ { MAD_F(0x07dc27d9) /* 0.491248939 */, 18 },
+ /* 6799 */ { MAD_F(0x07dc8ce1) /* 0.491345293 */, 18 },
+
+ /* 6800 */ { MAD_F(0x07dcf1ec) /* 0.491441651 */, 18 },
+ /* 6801 */ { MAD_F(0x07dd56f7) /* 0.491538015 */, 18 },
+ /* 6802 */ { MAD_F(0x07ddbc04) /* 0.491634383 */, 18 },
+ /* 6803 */ { MAD_F(0x07de2111) /* 0.491730756 */, 18 },
+ /* 6804 */ { MAD_F(0x07de8621) /* 0.491827134 */, 18 },
+ /* 6805 */ { MAD_F(0x07deeb31) /* 0.491923516 */, 18 },
+ /* 6806 */ { MAD_F(0x07df5043) /* 0.492019903 */, 18 },
+ /* 6807 */ { MAD_F(0x07dfb556) /* 0.492116295 */, 18 },
+ /* 6808 */ { MAD_F(0x07e01a6a) /* 0.492212691 */, 18 },
+ /* 6809 */ { MAD_F(0x07e07f80) /* 0.492309093 */, 18 },
+ /* 6810 */ { MAD_F(0x07e0e496) /* 0.492405499 */, 18 },
+ /* 6811 */ { MAD_F(0x07e149ae) /* 0.492501909 */, 18 },
+ /* 6812 */ { MAD_F(0x07e1aec8) /* 0.492598325 */, 18 },
+ /* 6813 */ { MAD_F(0x07e213e2) /* 0.492694745 */, 18 },
+ /* 6814 */ { MAD_F(0x07e278fe) /* 0.492791170 */, 18 },
+ /* 6815 */ { MAD_F(0x07e2de1b) /* 0.492887599 */, 18 },
+
+ /* 6816 */ { MAD_F(0x07e3433a) /* 0.492984033 */, 18 },
+ /* 6817 */ { MAD_F(0x07e3a859) /* 0.493080472 */, 18 },
+ /* 6818 */ { MAD_F(0x07e40d7a) /* 0.493176916 */, 18 },
+ /* 6819 */ { MAD_F(0x07e4729c) /* 0.493273365 */, 18 },
+ /* 6820 */ { MAD_F(0x07e4d7c0) /* 0.493369818 */, 18 },
+ /* 6821 */ { MAD_F(0x07e53ce4) /* 0.493466275 */, 18 },
+ /* 6822 */ { MAD_F(0x07e5a20a) /* 0.493562738 */, 18 },
+ /* 6823 */ { MAD_F(0x07e60732) /* 0.493659205 */, 18 },
+ /* 6824 */ { MAD_F(0x07e66c5a) /* 0.493755677 */, 18 },
+ /* 6825 */ { MAD_F(0x07e6d184) /* 0.493852154 */, 18 },
+ /* 6826 */ { MAD_F(0x07e736af) /* 0.493948635 */, 18 },
+ /* 6827 */ { MAD_F(0x07e79bdb) /* 0.494045122 */, 18 },
+ /* 6828 */ { MAD_F(0x07e80109) /* 0.494141612 */, 18 },
+ /* 6829 */ { MAD_F(0x07e86638) /* 0.494238108 */, 18 },
+ /* 6830 */ { MAD_F(0x07e8cb68) /* 0.494334608 */, 18 },
+ /* 6831 */ { MAD_F(0x07e93099) /* 0.494431113 */, 18 },
+
+ /* 6832 */ { MAD_F(0x07e995cc) /* 0.494527623 */, 18 },
+ /* 6833 */ { MAD_F(0x07e9fb00) /* 0.494624137 */, 18 },
+ /* 6834 */ { MAD_F(0x07ea6035) /* 0.494720656 */, 18 },
+ /* 6835 */ { MAD_F(0x07eac56b) /* 0.494817180 */, 18 },
+ /* 6836 */ { MAD_F(0x07eb2aa3) /* 0.494913709 */, 18 },
+ /* 6837 */ { MAD_F(0x07eb8fdc) /* 0.495010242 */, 18 },
+ /* 6838 */ { MAD_F(0x07ebf516) /* 0.495106780 */, 18 },
+ /* 6839 */ { MAD_F(0x07ec5a51) /* 0.495203322 */, 18 },
+ /* 6840 */ { MAD_F(0x07ecbf8e) /* 0.495299870 */, 18 },
+ /* 6841 */ { MAD_F(0x07ed24cc) /* 0.495396422 */, 18 },
+ /* 6842 */ { MAD_F(0x07ed8a0b) /* 0.495492978 */, 18 },
+ /* 6843 */ { MAD_F(0x07edef4c) /* 0.495589540 */, 18 },
+ /* 6844 */ { MAD_F(0x07ee548e) /* 0.495686106 */, 18 },
+ /* 6845 */ { MAD_F(0x07eeb9d1) /* 0.495782677 */, 18 },
+ /* 6846 */ { MAD_F(0x07ef1f15) /* 0.495879252 */, 18 },
+ /* 6847 */ { MAD_F(0x07ef845b) /* 0.495975833 */, 18 },
+
+ /* 6848 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 18 },
+ /* 6849 */ { MAD_F(0x07f04ee9) /* 0.496169007 */, 18 },
+ /* 6850 */ { MAD_F(0x07f0b433) /* 0.496265602 */, 18 },
+ /* 6851 */ { MAD_F(0x07f1197d) /* 0.496362201 */, 18 },
+ /* 6852 */ { MAD_F(0x07f17ec9) /* 0.496458804 */, 18 },
+ /* 6853 */ { MAD_F(0x07f1e416) /* 0.496555413 */, 18 },
+ /* 6854 */ { MAD_F(0x07f24965) /* 0.496652026 */, 18 },
+ /* 6855 */ { MAD_F(0x07f2aeb5) /* 0.496748644 */, 18 },
+ /* 6856 */ { MAD_F(0x07f31405) /* 0.496845266 */, 18 },
+ /* 6857 */ { MAD_F(0x07f37958) /* 0.496941894 */, 18 },
+ /* 6858 */ { MAD_F(0x07f3deab) /* 0.497038526 */, 18 },
+ /* 6859 */ { MAD_F(0x07f44400) /* 0.497135162 */, 18 },
+ /* 6860 */ { MAD_F(0x07f4a956) /* 0.497231804 */, 18 },
+ /* 6861 */ { MAD_F(0x07f50ead) /* 0.497328450 */, 18 },
+ /* 6862 */ { MAD_F(0x07f57405) /* 0.497425100 */, 18 },
+ /* 6863 */ { MAD_F(0x07f5d95f) /* 0.497521756 */, 18 },
+
+ /* 6864 */ { MAD_F(0x07f63eba) /* 0.497618416 */, 18 },
+ /* 6865 */ { MAD_F(0x07f6a416) /* 0.497715081 */, 18 },
+ /* 6866 */ { MAD_F(0x07f70974) /* 0.497811750 */, 18 },
+ /* 6867 */ { MAD_F(0x07f76ed3) /* 0.497908425 */, 18 },
+ /* 6868 */ { MAD_F(0x07f7d433) /* 0.498005103 */, 18 },
+ /* 6869 */ { MAD_F(0x07f83994) /* 0.498101787 */, 18 },
+ /* 6870 */ { MAD_F(0x07f89ef7) /* 0.498198475 */, 18 },
+ /* 6871 */ { MAD_F(0x07f9045a) /* 0.498295168 */, 18 },
+ /* 6872 */ { MAD_F(0x07f969c0) /* 0.498391866 */, 18 },
+ /* 6873 */ { MAD_F(0x07f9cf26) /* 0.498488568 */, 18 },
+ /* 6874 */ { MAD_F(0x07fa348e) /* 0.498585275 */, 18 },
+ /* 6875 */ { MAD_F(0x07fa99f6) /* 0.498681987 */, 18 },
+ /* 6876 */ { MAD_F(0x07faff60) /* 0.498778704 */, 18 },
+ /* 6877 */ { MAD_F(0x07fb64cc) /* 0.498875425 */, 18 },
+ /* 6878 */ { MAD_F(0x07fbca38) /* 0.498972150 */, 18 },
+ /* 6879 */ { MAD_F(0x07fc2fa6) /* 0.499068881 */, 18 },
+
+ /* 6880 */ { MAD_F(0x07fc9516) /* 0.499165616 */, 18 },
+ /* 6881 */ { MAD_F(0x07fcfa86) /* 0.499262356 */, 18 },
+ /* 6882 */ { MAD_F(0x07fd5ff8) /* 0.499359101 */, 18 },
+ /* 6883 */ { MAD_F(0x07fdc56b) /* 0.499455850 */, 18 },
+ /* 6884 */ { MAD_F(0x07fe2adf) /* 0.499552604 */, 18 },
+ /* 6885 */ { MAD_F(0x07fe9054) /* 0.499649362 */, 18 },
+ /* 6886 */ { MAD_F(0x07fef5cb) /* 0.499746126 */, 18 },
+ /* 6887 */ { MAD_F(0x07ff5b43) /* 0.499842894 */, 18 },
+ /* 6888 */ { MAD_F(0x07ffc0bc) /* 0.499939666 */, 18 },
+ /* 6889 */ { MAD_F(0x0400131b) /* 0.250018222 */, 19 },
+ /* 6890 */ { MAD_F(0x040045d9) /* 0.250066613 */, 19 },
+ /* 6891 */ { MAD_F(0x04007897) /* 0.250115006 */, 19 },
+ /* 6892 */ { MAD_F(0x0400ab57) /* 0.250163402 */, 19 },
+ /* 6893 */ { MAD_F(0x0400de16) /* 0.250211800 */, 19 },
+ /* 6894 */ { MAD_F(0x040110d7) /* 0.250260200 */, 19 },
+ /* 6895 */ { MAD_F(0x04014398) /* 0.250308603 */, 19 },
+
+ /* 6896 */ { MAD_F(0x04017659) /* 0.250357008 */, 19 },
+ /* 6897 */ { MAD_F(0x0401a91c) /* 0.250405415 */, 19 },
+ /* 6898 */ { MAD_F(0x0401dbdf) /* 0.250453825 */, 19 },
+ /* 6899 */ { MAD_F(0x04020ea2) /* 0.250502237 */, 19 },
+ /* 6900 */ { MAD_F(0x04024166) /* 0.250550652 */, 19 },
+ /* 6901 */ { MAD_F(0x0402742b) /* 0.250599068 */, 19 },
+ /* 6902 */ { MAD_F(0x0402a6f0) /* 0.250647488 */, 19 },
+ /* 6903 */ { MAD_F(0x0402d9b6) /* 0.250695909 */, 19 },
+ /* 6904 */ { MAD_F(0x04030c7d) /* 0.250744333 */, 19 },
+ /* 6905 */ { MAD_F(0x04033f44) /* 0.250792759 */, 19 },
+ /* 6906 */ { MAD_F(0x0403720c) /* 0.250841187 */, 19 },
+ /* 6907 */ { MAD_F(0x0403a4d5) /* 0.250889618 */, 19 },
+ /* 6908 */ { MAD_F(0x0403d79e) /* 0.250938051 */, 19 },
+ /* 6909 */ { MAD_F(0x04040a68) /* 0.250986487 */, 19 },
+ /* 6910 */ { MAD_F(0x04043d32) /* 0.251034924 */, 19 },
+ /* 6911 */ { MAD_F(0x04046ffd) /* 0.251083365 */, 19 },
+
+ /* 6912 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 19 },
+ /* 6913 */ { MAD_F(0x0404d595) /* 0.251180252 */, 19 },
+ /* 6914 */ { MAD_F(0x04050862) /* 0.251228699 */, 19 },
+ /* 6915 */ { MAD_F(0x04053b30) /* 0.251277148 */, 19 },
+ /* 6916 */ { MAD_F(0x04056dfe) /* 0.251325600 */, 19 },
+ /* 6917 */ { MAD_F(0x0405a0cd) /* 0.251374054 */, 19 },
+ /* 6918 */ { MAD_F(0x0405d39c) /* 0.251422511 */, 19 },
+ /* 6919 */ { MAD_F(0x0406066c) /* 0.251470970 */, 19 },
+ /* 6920 */ { MAD_F(0x0406393d) /* 0.251519431 */, 19 },
+ /* 6921 */ { MAD_F(0x04066c0e) /* 0.251567894 */, 19 },
+ /* 6922 */ { MAD_F(0x04069ee0) /* 0.251616360 */, 19 },
+ /* 6923 */ { MAD_F(0x0406d1b3) /* 0.251664828 */, 19 },
+ /* 6924 */ { MAD_F(0x04070486) /* 0.251713299 */, 19 },
+ /* 6925 */ { MAD_F(0x0407375a) /* 0.251761772 */, 19 },
+ /* 6926 */ { MAD_F(0x04076a2e) /* 0.251810247 */, 19 },
+ /* 6927 */ { MAD_F(0x04079d03) /* 0.251858724 */, 19 },
+
+ /* 6928 */ { MAD_F(0x0407cfd9) /* 0.251907204 */, 19 },
+ /* 6929 */ { MAD_F(0x040802af) /* 0.251955686 */, 19 },
+ /* 6930 */ { MAD_F(0x04083586) /* 0.252004171 */, 19 },
+ /* 6931 */ { MAD_F(0x0408685e) /* 0.252052658 */, 19 },
+ /* 6932 */ { MAD_F(0x04089b36) /* 0.252101147 */, 19 },
+ /* 6933 */ { MAD_F(0x0408ce0f) /* 0.252149638 */, 19 },
+ /* 6934 */ { MAD_F(0x040900e8) /* 0.252198132 */, 19 },
+ /* 6935 */ { MAD_F(0x040933c2) /* 0.252246628 */, 19 },
+ /* 6936 */ { MAD_F(0x0409669d) /* 0.252295127 */, 19 },
+ /* 6937 */ { MAD_F(0x04099978) /* 0.252343627 */, 19 },
+ /* 6938 */ { MAD_F(0x0409cc54) /* 0.252392131 */, 19 },
+ /* 6939 */ { MAD_F(0x0409ff31) /* 0.252440636 */, 19 },
+ /* 6940 */ { MAD_F(0x040a320e) /* 0.252489144 */, 19 },
+ /* 6941 */ { MAD_F(0x040a64ec) /* 0.252537654 */, 19 },
+ /* 6942 */ { MAD_F(0x040a97cb) /* 0.252586166 */, 19 },
+ /* 6943 */ { MAD_F(0x040acaaa) /* 0.252634681 */, 19 },
+
+ /* 6944 */ { MAD_F(0x040afd89) /* 0.252683198 */, 19 },
+ /* 6945 */ { MAD_F(0x040b306a) /* 0.252731718 */, 19 },
+ /* 6946 */ { MAD_F(0x040b634b) /* 0.252780240 */, 19 },
+ /* 6947 */ { MAD_F(0x040b962c) /* 0.252828764 */, 19 },
+ /* 6948 */ { MAD_F(0x040bc90e) /* 0.252877290 */, 19 },
+ /* 6949 */ { MAD_F(0x040bfbf1) /* 0.252925819 */, 19 },
+ /* 6950 */ { MAD_F(0x040c2ed5) /* 0.252974350 */, 19 },
+ /* 6951 */ { MAD_F(0x040c61b9) /* 0.253022883 */, 19 },
+ /* 6952 */ { MAD_F(0x040c949e) /* 0.253071419 */, 19 },
+ /* 6953 */ { MAD_F(0x040cc783) /* 0.253119957 */, 19 },
+ /* 6954 */ { MAD_F(0x040cfa69) /* 0.253168498 */, 19 },
+ /* 6955 */ { MAD_F(0x040d2d4f) /* 0.253217040 */, 19 },
+ /* 6956 */ { MAD_F(0x040d6037) /* 0.253265585 */, 19 },
+ /* 6957 */ { MAD_F(0x040d931e) /* 0.253314133 */, 19 },
+ /* 6958 */ { MAD_F(0x040dc607) /* 0.253362682 */, 19 },
+ /* 6959 */ { MAD_F(0x040df8f0) /* 0.253411234 */, 19 },
+
+ /* 6960 */ { MAD_F(0x040e2bda) /* 0.253459789 */, 19 },
+ /* 6961 */ { MAD_F(0x040e5ec4) /* 0.253508345 */, 19 },
+ /* 6962 */ { MAD_F(0x040e91af) /* 0.253556904 */, 19 },
+ /* 6963 */ { MAD_F(0x040ec49b) /* 0.253605466 */, 19 },
+ /* 6964 */ { MAD_F(0x040ef787) /* 0.253654029 */, 19 },
+ /* 6965 */ { MAD_F(0x040f2a74) /* 0.253702595 */, 19 },
+ /* 6966 */ { MAD_F(0x040f5d61) /* 0.253751164 */, 19 },
+ /* 6967 */ { MAD_F(0x040f904f) /* 0.253799734 */, 19 },
+ /* 6968 */ { MAD_F(0x040fc33e) /* 0.253848307 */, 19 },
+ /* 6969 */ { MAD_F(0x040ff62d) /* 0.253896883 */, 19 },
+ /* 6970 */ { MAD_F(0x0410291d) /* 0.253945460 */, 19 },
+ /* 6971 */ { MAD_F(0x04105c0e) /* 0.253994040 */, 19 },
+ /* 6972 */ { MAD_F(0x04108eff) /* 0.254042622 */, 19 },
+ /* 6973 */ { MAD_F(0x0410c1f1) /* 0.254091207 */, 19 },
+ /* 6974 */ { MAD_F(0x0410f4e3) /* 0.254139794 */, 19 },
+ /* 6975 */ { MAD_F(0x041127d6) /* 0.254188383 */, 19 },
+
+ /* 6976 */ { MAD_F(0x04115aca) /* 0.254236974 */, 19 },
+ /* 6977 */ { MAD_F(0x04118dbe) /* 0.254285568 */, 19 },
+ /* 6978 */ { MAD_F(0x0411c0b3) /* 0.254334165 */, 19 },
+ /* 6979 */ { MAD_F(0x0411f3a9) /* 0.254382763 */, 19 },
+ /* 6980 */ { MAD_F(0x0412269f) /* 0.254431364 */, 19 },
+ /* 6981 */ { MAD_F(0x04125996) /* 0.254479967 */, 19 },
+ /* 6982 */ { MAD_F(0x04128c8d) /* 0.254528572 */, 19 },
+ /* 6983 */ { MAD_F(0x0412bf85) /* 0.254577180 */, 19 },
+ /* 6984 */ { MAD_F(0x0412f27e) /* 0.254625790 */, 19 },
+ /* 6985 */ { MAD_F(0x04132577) /* 0.254674403 */, 19 },
+ /* 6986 */ { MAD_F(0x04135871) /* 0.254723017 */, 19 },
+ /* 6987 */ { MAD_F(0x04138b6c) /* 0.254771635 */, 19 },
+ /* 6988 */ { MAD_F(0x0413be67) /* 0.254820254 */, 19 },
+ /* 6989 */ { MAD_F(0x0413f163) /* 0.254868876 */, 19 },
+ /* 6990 */ { MAD_F(0x0414245f) /* 0.254917500 */, 19 },
+ /* 6991 */ { MAD_F(0x0414575c) /* 0.254966126 */, 19 },
+
+ /* 6992 */ { MAD_F(0x04148a5a) /* 0.255014755 */, 19 },
+ /* 6993 */ { MAD_F(0x0414bd58) /* 0.255063386 */, 19 },
+ /* 6994 */ { MAD_F(0x0414f057) /* 0.255112019 */, 19 },
+ /* 6995 */ { MAD_F(0x04152356) /* 0.255160655 */, 19 },
+ /* 6996 */ { MAD_F(0x04155657) /* 0.255209292 */, 19 },
+ /* 6997 */ { MAD_F(0x04158957) /* 0.255257933 */, 19 },
+ /* 6998 */ { MAD_F(0x0415bc59) /* 0.255306575 */, 19 },
+ /* 6999 */ { MAD_F(0x0415ef5b) /* 0.255355220 */, 19 },
+ /* 7000 */ { MAD_F(0x0416225d) /* 0.255403867 */, 19 },
+ /* 7001 */ { MAD_F(0x04165561) /* 0.255452517 */, 19 },
+ /* 7002 */ { MAD_F(0x04168864) /* 0.255501169 */, 19 },
+ /* 7003 */ { MAD_F(0x0416bb69) /* 0.255549823 */, 19 },
+ /* 7004 */ { MAD_F(0x0416ee6e) /* 0.255598479 */, 19 },
+ /* 7005 */ { MAD_F(0x04172174) /* 0.255647138 */, 19 },
+ /* 7006 */ { MAD_F(0x0417547a) /* 0.255695799 */, 19 },
+ /* 7007 */ { MAD_F(0x04178781) /* 0.255744463 */, 19 },
+
+ /* 7008 */ { MAD_F(0x0417ba89) /* 0.255793128 */, 19 },
+ /* 7009 */ { MAD_F(0x0417ed91) /* 0.255841796 */, 19 },
+ /* 7010 */ { MAD_F(0x0418209a) /* 0.255890467 */, 19 },
+ /* 7011 */ { MAD_F(0x041853a3) /* 0.255939139 */, 19 },
+ /* 7012 */ { MAD_F(0x041886ad) /* 0.255987814 */, 19 },
+ /* 7013 */ { MAD_F(0x0418b9b8) /* 0.256036492 */, 19 },
+ /* 7014 */ { MAD_F(0x0418ecc3) /* 0.256085171 */, 19 },
+ /* 7015 */ { MAD_F(0x04191fcf) /* 0.256133853 */, 19 },
+ /* 7016 */ { MAD_F(0x041952dc) /* 0.256182537 */, 19 },
+ /* 7017 */ { MAD_F(0x041985e9) /* 0.256231224 */, 19 },
+ /* 7018 */ { MAD_F(0x0419b8f7) /* 0.256279913 */, 19 },
+ /* 7019 */ { MAD_F(0x0419ec05) /* 0.256328604 */, 19 },
+ /* 7020 */ { MAD_F(0x041a1f15) /* 0.256377297 */, 19 },
+ /* 7021 */ { MAD_F(0x041a5224) /* 0.256425993 */, 19 },
+ /* 7022 */ { MAD_F(0x041a8534) /* 0.256474691 */, 19 },
+ /* 7023 */ { MAD_F(0x041ab845) /* 0.256523392 */, 19 },
+
+ /* 7024 */ { MAD_F(0x041aeb57) /* 0.256572095 */, 19 },
+ /* 7025 */ { MAD_F(0x041b1e69) /* 0.256620800 */, 19 },
+ /* 7026 */ { MAD_F(0x041b517c) /* 0.256669507 */, 19 },
+ /* 7027 */ { MAD_F(0x041b848f) /* 0.256718217 */, 19 },
+ /* 7028 */ { MAD_F(0x041bb7a3) /* 0.256766929 */, 19 },
+ /* 7029 */ { MAD_F(0x041beab8) /* 0.256815643 */, 19 },
+ /* 7030 */ { MAD_F(0x041c1dcd) /* 0.256864359 */, 19 },
+ /* 7031 */ { MAD_F(0x041c50e3) /* 0.256913078 */, 19 },
+ /* 7032 */ { MAD_F(0x041c83fa) /* 0.256961800 */, 19 },
+ /* 7033 */ { MAD_F(0x041cb711) /* 0.257010523 */, 19 },
+ /* 7034 */ { MAD_F(0x041cea28) /* 0.257059249 */, 19 },
+ /* 7035 */ { MAD_F(0x041d1d41) /* 0.257107977 */, 19 },
+ /* 7036 */ { MAD_F(0x041d505a) /* 0.257156708 */, 19 },
+ /* 7037 */ { MAD_F(0x041d8373) /* 0.257205440 */, 19 },
+ /* 7038 */ { MAD_F(0x041db68e) /* 0.257254175 */, 19 },
+ /* 7039 */ { MAD_F(0x041de9a8) /* 0.257302913 */, 19 },
+
+ /* 7040 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 19 },
+ /* 7041 */ { MAD_F(0x041e4fe0) /* 0.257400394 */, 19 },
+ /* 7042 */ { MAD_F(0x041e82fd) /* 0.257449139 */, 19 },
+ /* 7043 */ { MAD_F(0x041eb61a) /* 0.257497885 */, 19 },
+ /* 7044 */ { MAD_F(0x041ee938) /* 0.257546634 */, 19 },
+ /* 7045 */ { MAD_F(0x041f1c57) /* 0.257595386 */, 19 },
+ /* 7046 */ { MAD_F(0x041f4f76) /* 0.257644139 */, 19 },
+ /* 7047 */ { MAD_F(0x041f8296) /* 0.257692895 */, 19 },
+ /* 7048 */ { MAD_F(0x041fb5b6) /* 0.257741653 */, 19 },
+ /* 7049 */ { MAD_F(0x041fe8d7) /* 0.257790414 */, 19 },
+ /* 7050 */ { MAD_F(0x04201bf9) /* 0.257839176 */, 19 },
+ /* 7051 */ { MAD_F(0x04204f1b) /* 0.257887941 */, 19 },
+ /* 7052 */ { MAD_F(0x0420823e) /* 0.257936709 */, 19 },
+ /* 7053 */ { MAD_F(0x0420b561) /* 0.257985478 */, 19 },
+ /* 7054 */ { MAD_F(0x0420e885) /* 0.258034250 */, 19 },
+ /* 7055 */ { MAD_F(0x04211baa) /* 0.258083025 */, 19 },
+
+ /* 7056 */ { MAD_F(0x04214ed0) /* 0.258131801 */, 19 },
+ /* 7057 */ { MAD_F(0x042181f6) /* 0.258180580 */, 19 },
+ /* 7058 */ { MAD_F(0x0421b51c) /* 0.258229361 */, 19 },
+ /* 7059 */ { MAD_F(0x0421e843) /* 0.258278145 */, 19 },
+ /* 7060 */ { MAD_F(0x04221b6b) /* 0.258326931 */, 19 },
+ /* 7061 */ { MAD_F(0x04224e94) /* 0.258375719 */, 19 },
+ /* 7062 */ { MAD_F(0x042281bd) /* 0.258424509 */, 19 },
+ /* 7063 */ { MAD_F(0x0422b4e6) /* 0.258473302 */, 19 },
+ /* 7064 */ { MAD_F(0x0422e811) /* 0.258522097 */, 19 },
+ /* 7065 */ { MAD_F(0x04231b3c) /* 0.258570894 */, 19 },
+ /* 7066 */ { MAD_F(0x04234e67) /* 0.258619694 */, 19 },
+ /* 7067 */ { MAD_F(0x04238193) /* 0.258668496 */, 19 },
+ /* 7068 */ { MAD_F(0x0423b4c0) /* 0.258717300 */, 19 },
+ /* 7069 */ { MAD_F(0x0423e7ee) /* 0.258766106 */, 19 },
+ /* 7070 */ { MAD_F(0x04241b1c) /* 0.258814915 */, 19 },
+ /* 7071 */ { MAD_F(0x04244e4a) /* 0.258863726 */, 19 },
+
+ /* 7072 */ { MAD_F(0x04248179) /* 0.258912540 */, 19 },
+ /* 7073 */ { MAD_F(0x0424b4a9) /* 0.258961356 */, 19 },
+ /* 7074 */ { MAD_F(0x0424e7da) /* 0.259010174 */, 19 },
+ /* 7075 */ { MAD_F(0x04251b0b) /* 0.259058994 */, 19 },
+ /* 7076 */ { MAD_F(0x04254e3d) /* 0.259107817 */, 19 },
+ /* 7077 */ { MAD_F(0x0425816f) /* 0.259156642 */, 19 },
+ /* 7078 */ { MAD_F(0x0425b4a2) /* 0.259205469 */, 19 },
+ /* 7079 */ { MAD_F(0x0425e7d6) /* 0.259254298 */, 19 },
+ /* 7080 */ { MAD_F(0x04261b0a) /* 0.259303130 */, 19 },
+ /* 7081 */ { MAD_F(0x04264e3f) /* 0.259351964 */, 19 },
+ /* 7082 */ { MAD_F(0x04268174) /* 0.259400801 */, 19 },
+ /* 7083 */ { MAD_F(0x0426b4aa) /* 0.259449639 */, 19 },
+ /* 7084 */ { MAD_F(0x0426e7e1) /* 0.259498480 */, 19 },
+ /* 7085 */ { MAD_F(0x04271b18) /* 0.259547324 */, 19 },
+ /* 7086 */ { MAD_F(0x04274e50) /* 0.259596169 */, 19 },
+ /* 7087 */ { MAD_F(0x04278188) /* 0.259645017 */, 19 },
+
+ /* 7088 */ { MAD_F(0x0427b4c2) /* 0.259693868 */, 19 },
+ /* 7089 */ { MAD_F(0x0427e7fb) /* 0.259742720 */, 19 },
+ /* 7090 */ { MAD_F(0x04281b36) /* 0.259791575 */, 19 },
+ /* 7091 */ { MAD_F(0x04284e71) /* 0.259840432 */, 19 },
+ /* 7092 */ { MAD_F(0x042881ac) /* 0.259889291 */, 19 },
+ /* 7093 */ { MAD_F(0x0428b4e8) /* 0.259938153 */, 19 },
+ /* 7094 */ { MAD_F(0x0428e825) /* 0.259987017 */, 19 },
+ /* 7095 */ { MAD_F(0x04291b63) /* 0.260035883 */, 19 },
+ /* 7096 */ { MAD_F(0x04294ea1) /* 0.260084752 */, 19 },
+ /* 7097 */ { MAD_F(0x042981df) /* 0.260133623 */, 19 },
+ /* 7098 */ { MAD_F(0x0429b51f) /* 0.260182496 */, 19 },
+ /* 7099 */ { MAD_F(0x0429e85f) /* 0.260231372 */, 19 },
+ /* 7100 */ { MAD_F(0x042a1b9f) /* 0.260280249 */, 19 },
+ /* 7101 */ { MAD_F(0x042a4ee0) /* 0.260329129 */, 19 },
+ /* 7102 */ { MAD_F(0x042a8222) /* 0.260378012 */, 19 },
+ /* 7103 */ { MAD_F(0x042ab564) /* 0.260426896 */, 19 },
+
+ /* 7104 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 19 },
+ /* 7105 */ { MAD_F(0x042b1beb) /* 0.260524673 */, 19 },
+ /* 7106 */ { MAD_F(0x042b4f2f) /* 0.260573564 */, 19 },
+ /* 7107 */ { MAD_F(0x042b8274) /* 0.260622458 */, 19 },
+ /* 7108 */ { MAD_F(0x042bb5ba) /* 0.260671354 */, 19 },
+ /* 7109 */ { MAD_F(0x042be900) /* 0.260720252 */, 19 },
+ /* 7110 */ { MAD_F(0x042c1c46) /* 0.260769153 */, 19 },
+ /* 7111 */ { MAD_F(0x042c4f8e) /* 0.260818056 */, 19 },
+ /* 7112 */ { MAD_F(0x042c82d6) /* 0.260866961 */, 19 },
+ /* 7113 */ { MAD_F(0x042cb61e) /* 0.260915869 */, 19 },
+ /* 7114 */ { MAD_F(0x042ce967) /* 0.260964779 */, 19 },
+ /* 7115 */ { MAD_F(0x042d1cb1) /* 0.261013691 */, 19 },
+ /* 7116 */ { MAD_F(0x042d4ffb) /* 0.261062606 */, 19 },
+ /* 7117 */ { MAD_F(0x042d8346) /* 0.261111522 */, 19 },
+ /* 7118 */ { MAD_F(0x042db692) /* 0.261160441 */, 19 },
+ /* 7119 */ { MAD_F(0x042de9de) /* 0.261209363 */, 19 },
+
+ /* 7120 */ { MAD_F(0x042e1d2b) /* 0.261258286 */, 19 },
+ /* 7121 */ { MAD_F(0x042e5078) /* 0.261307212 */, 19 },
+ /* 7122 */ { MAD_F(0x042e83c6) /* 0.261356140 */, 19 },
+ /* 7123 */ { MAD_F(0x042eb715) /* 0.261405071 */, 19 },
+ /* 7124 */ { MAD_F(0x042eea64) /* 0.261454004 */, 19 },
+ /* 7125 */ { MAD_F(0x042f1db4) /* 0.261502939 */, 19 },
+ /* 7126 */ { MAD_F(0x042f5105) /* 0.261551876 */, 19 },
+ /* 7127 */ { MAD_F(0x042f8456) /* 0.261600816 */, 19 },
+ /* 7128 */ { MAD_F(0x042fb7a8) /* 0.261649758 */, 19 },
+ /* 7129 */ { MAD_F(0x042feafa) /* 0.261698702 */, 19 },
+ /* 7130 */ { MAD_F(0x04301e4d) /* 0.261747649 */, 19 },
+ /* 7131 */ { MAD_F(0x043051a1) /* 0.261796597 */, 19 },
+ /* 7132 */ { MAD_F(0x043084f5) /* 0.261845548 */, 19 },
+ /* 7133 */ { MAD_F(0x0430b84a) /* 0.261894502 */, 19 },
+ /* 7134 */ { MAD_F(0x0430eb9f) /* 0.261943458 */, 19 },
+ /* 7135 */ { MAD_F(0x04311ef5) /* 0.261992416 */, 19 },
+
+ /* 7136 */ { MAD_F(0x0431524c) /* 0.262041376 */, 19 },
+ /* 7137 */ { MAD_F(0x043185a3) /* 0.262090338 */, 19 },
+ /* 7138 */ { MAD_F(0x0431b8fb) /* 0.262139303 */, 19 },
+ /* 7139 */ { MAD_F(0x0431ec54) /* 0.262188270 */, 19 },
+ /* 7140 */ { MAD_F(0x04321fad) /* 0.262237240 */, 19 },
+ /* 7141 */ { MAD_F(0x04325306) /* 0.262286211 */, 19 },
+ /* 7142 */ { MAD_F(0x04328661) /* 0.262335185 */, 19 },
+ /* 7143 */ { MAD_F(0x0432b9bc) /* 0.262384162 */, 19 },
+ /* 7144 */ { MAD_F(0x0432ed17) /* 0.262433140 */, 19 },
+ /* 7145 */ { MAD_F(0x04332074) /* 0.262482121 */, 19 },
+ /* 7146 */ { MAD_F(0x043353d0) /* 0.262531104 */, 19 },
+ /* 7147 */ { MAD_F(0x0433872e) /* 0.262580089 */, 19 },
+ /* 7148 */ { MAD_F(0x0433ba8c) /* 0.262629077 */, 19 },
+ /* 7149 */ { MAD_F(0x0433edea) /* 0.262678067 */, 19 },
+ /* 7150 */ { MAD_F(0x0434214a) /* 0.262727059 */, 19 },
+ /* 7151 */ { MAD_F(0x043454aa) /* 0.262776054 */, 19 },
+
+ /* 7152 */ { MAD_F(0x0434880a) /* 0.262825051 */, 19 },
+ /* 7153 */ { MAD_F(0x0434bb6b) /* 0.262874050 */, 19 },
+ /* 7154 */ { MAD_F(0x0434eecd) /* 0.262923051 */, 19 },
+ /* 7155 */ { MAD_F(0x0435222f) /* 0.262972055 */, 19 },
+ /* 7156 */ { MAD_F(0x04355592) /* 0.263021061 */, 19 },
+ /* 7157 */ { MAD_F(0x043588f6) /* 0.263070069 */, 19 },
+ /* 7158 */ { MAD_F(0x0435bc5a) /* 0.263119079 */, 19 },
+ /* 7159 */ { MAD_F(0x0435efbf) /* 0.263168092 */, 19 },
+ /* 7160 */ { MAD_F(0x04362324) /* 0.263217107 */, 19 },
+ /* 7161 */ { MAD_F(0x0436568a) /* 0.263266125 */, 19 },
+ /* 7162 */ { MAD_F(0x043689f1) /* 0.263315144 */, 19 },
+ /* 7163 */ { MAD_F(0x0436bd58) /* 0.263364166 */, 19 },
+ /* 7164 */ { MAD_F(0x0436f0c0) /* 0.263413191 */, 19 },
+ /* 7165 */ { MAD_F(0x04372428) /* 0.263462217 */, 19 },
+ /* 7166 */ { MAD_F(0x04375791) /* 0.263511246 */, 19 },
+ /* 7167 */ { MAD_F(0x04378afb) /* 0.263560277 */, 19 },
+
+ /* 7168 */ { MAD_F(0x0437be65) /* 0.263609310 */, 19 },
+ /* 7169 */ { MAD_F(0x0437f1d0) /* 0.263658346 */, 19 },
+ /* 7170 */ { MAD_F(0x0438253c) /* 0.263707384 */, 19 },
+ /* 7171 */ { MAD_F(0x043858a8) /* 0.263756424 */, 19 },
+ /* 7172 */ { MAD_F(0x04388c14) /* 0.263805466 */, 19 },
+ /* 7173 */ { MAD_F(0x0438bf82) /* 0.263854511 */, 19 },
+ /* 7174 */ { MAD_F(0x0438f2f0) /* 0.263903558 */, 19 },
+ /* 7175 */ { MAD_F(0x0439265e) /* 0.263952607 */, 19 },
+ /* 7176 */ { MAD_F(0x043959cd) /* 0.264001659 */, 19 },
+ /* 7177 */ { MAD_F(0x04398d3d) /* 0.264050713 */, 19 },
+ /* 7178 */ { MAD_F(0x0439c0ae) /* 0.264099769 */, 19 },
+ /* 7179 */ { MAD_F(0x0439f41f) /* 0.264148827 */, 19 },
+ /* 7180 */ { MAD_F(0x043a2790) /* 0.264197888 */, 19 },
+ /* 7181 */ { MAD_F(0x043a5b02) /* 0.264246951 */, 19 },
+ /* 7182 */ { MAD_F(0x043a8e75) /* 0.264296016 */, 19 },
+ /* 7183 */ { MAD_F(0x043ac1e9) /* 0.264345084 */, 19 },
+
+ /* 7184 */ { MAD_F(0x043af55d) /* 0.264394153 */, 19 },
+ /* 7185 */ { MAD_F(0x043b28d2) /* 0.264443225 */, 19 },
+ /* 7186 */ { MAD_F(0x043b5c47) /* 0.264492300 */, 19 },
+ /* 7187 */ { MAD_F(0x043b8fbd) /* 0.264541376 */, 19 },
+ /* 7188 */ { MAD_F(0x043bc333) /* 0.264590455 */, 19 },
+ /* 7189 */ { MAD_F(0x043bf6aa) /* 0.264639536 */, 19 },
+ /* 7190 */ { MAD_F(0x043c2a22) /* 0.264688620 */, 19 },
+ /* 7191 */ { MAD_F(0x043c5d9a) /* 0.264737706 */, 19 },
+ /* 7192 */ { MAD_F(0x043c9113) /* 0.264786794 */, 19 },
+ /* 7193 */ { MAD_F(0x043cc48d) /* 0.264835884 */, 19 },
+ /* 7194 */ { MAD_F(0x043cf807) /* 0.264884976 */, 19 },
+ /* 7195 */ { MAD_F(0x043d2b82) /* 0.264934071 */, 19 },
+ /* 7196 */ { MAD_F(0x043d5efd) /* 0.264983168 */, 19 },
+ /* 7197 */ { MAD_F(0x043d9279) /* 0.265032268 */, 19 },
+ /* 7198 */ { MAD_F(0x043dc5f6) /* 0.265081369 */, 19 },
+ /* 7199 */ { MAD_F(0x043df973) /* 0.265130473 */, 19 },
+
+ /* 7200 */ { MAD_F(0x043e2cf1) /* 0.265179580 */, 19 },
+ /* 7201 */ { MAD_F(0x043e6070) /* 0.265228688 */, 19 },
+ /* 7202 */ { MAD_F(0x043e93ef) /* 0.265277799 */, 19 },
+ /* 7203 */ { MAD_F(0x043ec76e) /* 0.265326912 */, 19 },
+ /* 7204 */ { MAD_F(0x043efaef) /* 0.265376027 */, 19 },
+ /* 7205 */ { MAD_F(0x043f2e6f) /* 0.265425145 */, 19 },
+ /* 7206 */ { MAD_F(0x043f61f1) /* 0.265474264 */, 19 },
+ /* 7207 */ { MAD_F(0x043f9573) /* 0.265523387 */, 19 },
+ /* 7208 */ { MAD_F(0x043fc8f6) /* 0.265572511 */, 19 },
+ /* 7209 */ { MAD_F(0x043ffc79) /* 0.265621638 */, 19 },
+ /* 7210 */ { MAD_F(0x04402ffd) /* 0.265670766 */, 19 },
+ /* 7211 */ { MAD_F(0x04406382) /* 0.265719898 */, 19 },
+ /* 7212 */ { MAD_F(0x04409707) /* 0.265769031 */, 19 },
+ /* 7213 */ { MAD_F(0x0440ca8d) /* 0.265818167 */, 19 },
+ /* 7214 */ { MAD_F(0x0440fe13) /* 0.265867305 */, 19 },
+ /* 7215 */ { MAD_F(0x0441319a) /* 0.265916445 */, 19 },
+
+ /* 7216 */ { MAD_F(0x04416522) /* 0.265965588 */, 19 },
+ /* 7217 */ { MAD_F(0x044198aa) /* 0.266014732 */, 19 },
+ /* 7218 */ { MAD_F(0x0441cc33) /* 0.266063880 */, 19 },
+ /* 7219 */ { MAD_F(0x0441ffbc) /* 0.266113029 */, 19 },
+ /* 7220 */ { MAD_F(0x04423346) /* 0.266162181 */, 19 },
+ /* 7221 */ { MAD_F(0x044266d1) /* 0.266211334 */, 19 },
+ /* 7222 */ { MAD_F(0x04429a5c) /* 0.266260491 */, 19 },
+ /* 7223 */ { MAD_F(0x0442cde8) /* 0.266309649 */, 19 },
+ /* 7224 */ { MAD_F(0x04430174) /* 0.266358810 */, 19 },
+ /* 7225 */ { MAD_F(0x04433501) /* 0.266407973 */, 19 },
+ /* 7226 */ { MAD_F(0x0443688f) /* 0.266457138 */, 19 },
+ /* 7227 */ { MAD_F(0x04439c1d) /* 0.266506305 */, 19 },
+ /* 7228 */ { MAD_F(0x0443cfac) /* 0.266555475 */, 19 },
+ /* 7229 */ { MAD_F(0x0444033c) /* 0.266604647 */, 19 },
+ /* 7230 */ { MAD_F(0x044436cc) /* 0.266653822 */, 19 },
+ /* 7231 */ { MAD_F(0x04446a5d) /* 0.266702998 */, 19 },
+
+ /* 7232 */ { MAD_F(0x04449dee) /* 0.266752177 */, 19 },
+ /* 7233 */ { MAD_F(0x0444d180) /* 0.266801358 */, 19 },
+ /* 7234 */ { MAD_F(0x04450513) /* 0.266850541 */, 19 },
+ /* 7235 */ { MAD_F(0x044538a6) /* 0.266899727 */, 19 },
+ /* 7236 */ { MAD_F(0x04456c39) /* 0.266948915 */, 19 },
+ /* 7237 */ { MAD_F(0x04459fce) /* 0.266998105 */, 19 },
+ /* 7238 */ { MAD_F(0x0445d363) /* 0.267047298 */, 19 },
+ /* 7239 */ { MAD_F(0x044606f8) /* 0.267096492 */, 19 },
+ /* 7240 */ { MAD_F(0x04463a8f) /* 0.267145689 */, 19 },
+ /* 7241 */ { MAD_F(0x04466e25) /* 0.267194888 */, 19 },
+ /* 7242 */ { MAD_F(0x0446a1bd) /* 0.267244090 */, 19 },
+ /* 7243 */ { MAD_F(0x0446d555) /* 0.267293294 */, 19 },
+ /* 7244 */ { MAD_F(0x044708ee) /* 0.267342500 */, 19 },
+ /* 7245 */ { MAD_F(0x04473c87) /* 0.267391708 */, 19 },
+ /* 7246 */ { MAD_F(0x04477021) /* 0.267440919 */, 19 },
+ /* 7247 */ { MAD_F(0x0447a3bb) /* 0.267490131 */, 19 },
+
+ /* 7248 */ { MAD_F(0x0447d756) /* 0.267539347 */, 19 },
+ /* 7249 */ { MAD_F(0x04480af2) /* 0.267588564 */, 19 },
+ /* 7250 */ { MAD_F(0x04483e8e) /* 0.267637783 */, 19 },
+ /* 7251 */ { MAD_F(0x0448722b) /* 0.267687005 */, 19 },
+ /* 7252 */ { MAD_F(0x0448a5c9) /* 0.267736229 */, 19 },
+ /* 7253 */ { MAD_F(0x0448d967) /* 0.267785456 */, 19 },
+ /* 7254 */ { MAD_F(0x04490d05) /* 0.267834685 */, 19 },
+ /* 7255 */ { MAD_F(0x044940a5) /* 0.267883915 */, 19 },
+ /* 7256 */ { MAD_F(0x04497445) /* 0.267933149 */, 19 },
+ /* 7257 */ { MAD_F(0x0449a7e5) /* 0.267982384 */, 19 },
+ /* 7258 */ { MAD_F(0x0449db86) /* 0.268031622 */, 19 },
+ /* 7259 */ { MAD_F(0x044a0f28) /* 0.268080862 */, 19 },
+ /* 7260 */ { MAD_F(0x044a42ca) /* 0.268130104 */, 19 },
+ /* 7261 */ { MAD_F(0x044a766d) /* 0.268179349 */, 19 },
+ /* 7262 */ { MAD_F(0x044aaa11) /* 0.268228595 */, 19 },
+ /* 7263 */ { MAD_F(0x044addb5) /* 0.268277844 */, 19 },
+
+ /* 7264 */ { MAD_F(0x044b115a) /* 0.268327096 */, 19 },
+ /* 7265 */ { MAD_F(0x044b44ff) /* 0.268376349 */, 19 },
+ /* 7266 */ { MAD_F(0x044b78a5) /* 0.268425605 */, 19 },
+ /* 7267 */ { MAD_F(0x044bac4c) /* 0.268474863 */, 19 },
+ /* 7268 */ { MAD_F(0x044bdff3) /* 0.268524123 */, 19 },
+ /* 7269 */ { MAD_F(0x044c139b) /* 0.268573386 */, 19 },
+ /* 7270 */ { MAD_F(0x044c4743) /* 0.268622651 */, 19 },
+ /* 7271 */ { MAD_F(0x044c7aec) /* 0.268671918 */, 19 },
+ /* 7272 */ { MAD_F(0x044cae96) /* 0.268721187 */, 19 },
+ /* 7273 */ { MAD_F(0x044ce240) /* 0.268770459 */, 19 },
+ /* 7274 */ { MAD_F(0x044d15eb) /* 0.268819733 */, 19 },
+ /* 7275 */ { MAD_F(0x044d4997) /* 0.268869009 */, 19 },
+ /* 7276 */ { MAD_F(0x044d7d43) /* 0.268918287 */, 19 },
+ /* 7277 */ { MAD_F(0x044db0ef) /* 0.268967568 */, 19 },
+ /* 7278 */ { MAD_F(0x044de49d) /* 0.269016851 */, 19 },
+ /* 7279 */ { MAD_F(0x044e184b) /* 0.269066136 */, 19 },
+
+ /* 7280 */ { MAD_F(0x044e4bf9) /* 0.269115423 */, 19 },
+ /* 7281 */ { MAD_F(0x044e7fa8) /* 0.269164713 */, 19 },
+ /* 7282 */ { MAD_F(0x044eb358) /* 0.269214005 */, 19 },
+ /* 7283 */ { MAD_F(0x044ee708) /* 0.269263299 */, 19 },
+ /* 7284 */ { MAD_F(0x044f1ab9) /* 0.269312595 */, 19 },
+ /* 7285 */ { MAD_F(0x044f4e6b) /* 0.269361894 */, 19 },
+ /* 7286 */ { MAD_F(0x044f821d) /* 0.269411195 */, 19 },
+ /* 7287 */ { MAD_F(0x044fb5cf) /* 0.269460498 */, 19 },
+ /* 7288 */ { MAD_F(0x044fe983) /* 0.269509804 */, 19 },
+ /* 7289 */ { MAD_F(0x04501d37) /* 0.269559111 */, 19 },
+ /* 7290 */ { MAD_F(0x045050eb) /* 0.269608421 */, 19 },
+ /* 7291 */ { MAD_F(0x045084a0) /* 0.269657734 */, 19 },
+ /* 7292 */ { MAD_F(0x0450b856) /* 0.269707048 */, 19 },
+ /* 7293 */ { MAD_F(0x0450ec0d) /* 0.269756365 */, 19 },
+ /* 7294 */ { MAD_F(0x04511fc4) /* 0.269805684 */, 19 },
+ /* 7295 */ { MAD_F(0x0451537b) /* 0.269855005 */, 19 },
+
+ /* 7296 */ { MAD_F(0x04518733) /* 0.269904329 */, 19 },
+ /* 7297 */ { MAD_F(0x0451baec) /* 0.269953654 */, 19 },
+ /* 7298 */ { MAD_F(0x0451eea5) /* 0.270002982 */, 19 },
+ /* 7299 */ { MAD_F(0x0452225f) /* 0.270052313 */, 19 },
+ /* 7300 */ { MAD_F(0x0452561a) /* 0.270101645 */, 19 },
+ /* 7301 */ { MAD_F(0x045289d5) /* 0.270150980 */, 19 },
+ /* 7302 */ { MAD_F(0x0452bd91) /* 0.270200317 */, 19 },
+ /* 7303 */ { MAD_F(0x0452f14d) /* 0.270249656 */, 19 },
+ /* 7304 */ { MAD_F(0x0453250a) /* 0.270298998 */, 19 },
+ /* 7305 */ { MAD_F(0x045358c8) /* 0.270348341 */, 19 },
+ /* 7306 */ { MAD_F(0x04538c86) /* 0.270397687 */, 19 },
+ /* 7307 */ { MAD_F(0x0453c045) /* 0.270447036 */, 19 },
+ /* 7308 */ { MAD_F(0x0453f405) /* 0.270496386 */, 19 },
+ /* 7309 */ { MAD_F(0x045427c5) /* 0.270545739 */, 19 },
+ /* 7310 */ { MAD_F(0x04545b85) /* 0.270595094 */, 19 },
+ /* 7311 */ { MAD_F(0x04548f46) /* 0.270644451 */, 19 },
+
+ /* 7312 */ { MAD_F(0x0454c308) /* 0.270693811 */, 19 },
+ /* 7313 */ { MAD_F(0x0454f6cb) /* 0.270743173 */, 19 },
+ /* 7314 */ { MAD_F(0x04552a8e) /* 0.270792537 */, 19 },
+ /* 7315 */ { MAD_F(0x04555e51) /* 0.270841903 */, 19 },
+ /* 7316 */ { MAD_F(0x04559216) /* 0.270891271 */, 19 },
+ /* 7317 */ { MAD_F(0x0455c5db) /* 0.270940642 */, 19 },
+ /* 7318 */ { MAD_F(0x0455f9a0) /* 0.270990015 */, 19 },
+ /* 7319 */ { MAD_F(0x04562d66) /* 0.271039390 */, 19 },
+ /* 7320 */ { MAD_F(0x0456612d) /* 0.271088768 */, 19 },
+ /* 7321 */ { MAD_F(0x045694f4) /* 0.271138148 */, 19 },
+ /* 7322 */ { MAD_F(0x0456c8bc) /* 0.271187530 */, 19 },
+ /* 7323 */ { MAD_F(0x0456fc84) /* 0.271236914 */, 19 },
+ /* 7324 */ { MAD_F(0x0457304e) /* 0.271286301 */, 19 },
+ /* 7325 */ { MAD_F(0x04576417) /* 0.271335689 */, 19 },
+ /* 7326 */ { MAD_F(0x045797e2) /* 0.271385080 */, 19 },
+ /* 7327 */ { MAD_F(0x0457cbac) /* 0.271434474 */, 19 },
+
+ /* 7328 */ { MAD_F(0x0457ff78) /* 0.271483869 */, 19 },
+ /* 7329 */ { MAD_F(0x04583344) /* 0.271533267 */, 19 },
+ /* 7330 */ { MAD_F(0x04586711) /* 0.271582667 */, 19 },
+ /* 7331 */ { MAD_F(0x04589ade) /* 0.271632069 */, 19 },
+ /* 7332 */ { MAD_F(0x0458ceac) /* 0.271681474 */, 19 },
+ /* 7333 */ { MAD_F(0x0459027b) /* 0.271730880 */, 19 },
+ /* 7334 */ { MAD_F(0x0459364a) /* 0.271780289 */, 19 },
+ /* 7335 */ { MAD_F(0x04596a19) /* 0.271829701 */, 19 },
+ /* 7336 */ { MAD_F(0x04599dea) /* 0.271879114 */, 19 },
+ /* 7337 */ { MAD_F(0x0459d1bb) /* 0.271928530 */, 19 },
+ /* 7338 */ { MAD_F(0x045a058c) /* 0.271977948 */, 19 },
+ /* 7339 */ { MAD_F(0x045a395e) /* 0.272027368 */, 19 },
+ /* 7340 */ { MAD_F(0x045a6d31) /* 0.272076790 */, 19 },
+ /* 7341 */ { MAD_F(0x045aa104) /* 0.272126215 */, 19 },
+ /* 7342 */ { MAD_F(0x045ad4d8) /* 0.272175642 */, 19 },
+ /* 7343 */ { MAD_F(0x045b08ad) /* 0.272225071 */, 19 },
+
+ /* 7344 */ { MAD_F(0x045b3c82) /* 0.272274503 */, 19 },
+ /* 7345 */ { MAD_F(0x045b7058) /* 0.272323936 */, 19 },
+ /* 7346 */ { MAD_F(0x045ba42e) /* 0.272373372 */, 19 },
+ /* 7347 */ { MAD_F(0x045bd805) /* 0.272422810 */, 19 },
+ /* 7348 */ { MAD_F(0x045c0bdd) /* 0.272472251 */, 19 },
+ /* 7349 */ { MAD_F(0x045c3fb5) /* 0.272521693 */, 19 },
+ /* 7350 */ { MAD_F(0x045c738e) /* 0.272571138 */, 19 },
+ /* 7351 */ { MAD_F(0x045ca767) /* 0.272620585 */, 19 },
+ /* 7352 */ { MAD_F(0x045cdb41) /* 0.272670035 */, 19 },
+ /* 7353 */ { MAD_F(0x045d0f1b) /* 0.272719486 */, 19 },
+ /* 7354 */ { MAD_F(0x045d42f7) /* 0.272768940 */, 19 },
+ /* 7355 */ { MAD_F(0x045d76d2) /* 0.272818396 */, 19 },
+ /* 7356 */ { MAD_F(0x045daaaf) /* 0.272867855 */, 19 },
+ /* 7357 */ { MAD_F(0x045dde8c) /* 0.272917315 */, 19 },
+ /* 7358 */ { MAD_F(0x045e1269) /* 0.272966778 */, 19 },
+ /* 7359 */ { MAD_F(0x045e4647) /* 0.273016243 */, 19 },
+
+ /* 7360 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 19 },
+ /* 7361 */ { MAD_F(0x045eae06) /* 0.273115180 */, 19 },
+ /* 7362 */ { MAD_F(0x045ee1e6) /* 0.273164652 */, 19 },
+ /* 7363 */ { MAD_F(0x045f15c6) /* 0.273214126 */, 19 },
+ /* 7364 */ { MAD_F(0x045f49a7) /* 0.273263602 */, 19 },
+ /* 7365 */ { MAD_F(0x045f7d89) /* 0.273313081 */, 19 },
+ /* 7366 */ { MAD_F(0x045fb16c) /* 0.273362561 */, 19 },
+ /* 7367 */ { MAD_F(0x045fe54f) /* 0.273412044 */, 19 },
+ /* 7368 */ { MAD_F(0x04601932) /* 0.273461530 */, 19 },
+ /* 7369 */ { MAD_F(0x04604d16) /* 0.273511017 */, 19 },
+ /* 7370 */ { MAD_F(0x046080fb) /* 0.273560507 */, 19 },
+ /* 7371 */ { MAD_F(0x0460b4e1) /* 0.273609999 */, 19 },
+ /* 7372 */ { MAD_F(0x0460e8c7) /* 0.273659493 */, 19 },
+ /* 7373 */ { MAD_F(0x04611cad) /* 0.273708989 */, 19 },
+ /* 7374 */ { MAD_F(0x04615094) /* 0.273758488 */, 19 },
+ /* 7375 */ { MAD_F(0x0461847c) /* 0.273807989 */, 19 },
+
+ /* 7376 */ { MAD_F(0x0461b864) /* 0.273857492 */, 19 },
+ /* 7377 */ { MAD_F(0x0461ec4d) /* 0.273906997 */, 19 },
+ /* 7378 */ { MAD_F(0x04622037) /* 0.273956505 */, 19 },
+ /* 7379 */ { MAD_F(0x04625421) /* 0.274006015 */, 19 },
+ /* 7380 */ { MAD_F(0x0462880c) /* 0.274055527 */, 19 },
+ /* 7381 */ { MAD_F(0x0462bbf7) /* 0.274105041 */, 19 },
+ /* 7382 */ { MAD_F(0x0462efe3) /* 0.274154558 */, 19 },
+ /* 7383 */ { MAD_F(0x046323d0) /* 0.274204076 */, 19 },
+ /* 7384 */ { MAD_F(0x046357bd) /* 0.274253597 */, 19 },
+ /* 7385 */ { MAD_F(0x04638bab) /* 0.274303121 */, 19 },
+ /* 7386 */ { MAD_F(0x0463bf99) /* 0.274352646 */, 19 },
+ /* 7387 */ { MAD_F(0x0463f388) /* 0.274402174 */, 19 },
+ /* 7388 */ { MAD_F(0x04642778) /* 0.274451704 */, 19 },
+ /* 7389 */ { MAD_F(0x04645b68) /* 0.274501236 */, 19 },
+ /* 7390 */ { MAD_F(0x04648f59) /* 0.274550771 */, 19 },
+ /* 7391 */ { MAD_F(0x0464c34a) /* 0.274600307 */, 19 },
+
+ /* 7392 */ { MAD_F(0x0464f73c) /* 0.274649846 */, 19 },
+ /* 7393 */ { MAD_F(0x04652b2f) /* 0.274699387 */, 19 },
+ /* 7394 */ { MAD_F(0x04655f22) /* 0.274748931 */, 19 },
+ /* 7395 */ { MAD_F(0x04659316) /* 0.274798476 */, 19 },
+ /* 7396 */ { MAD_F(0x0465c70a) /* 0.274848024 */, 19 },
+ /* 7397 */ { MAD_F(0x0465faff) /* 0.274897574 */, 19 },
+ /* 7398 */ { MAD_F(0x04662ef5) /* 0.274947126 */, 19 },
+ /* 7399 */ { MAD_F(0x046662eb) /* 0.274996681 */, 19 },
+ /* 7400 */ { MAD_F(0x046696e2) /* 0.275046238 */, 19 },
+ /* 7401 */ { MAD_F(0x0466cad9) /* 0.275095797 */, 19 },
+ /* 7402 */ { MAD_F(0x0466fed1) /* 0.275145358 */, 19 },
+ /* 7403 */ { MAD_F(0x046732ca) /* 0.275194921 */, 19 },
+ /* 7404 */ { MAD_F(0x046766c3) /* 0.275244487 */, 19 },
+ /* 7405 */ { MAD_F(0x04679abd) /* 0.275294055 */, 19 },
+ /* 7406 */ { MAD_F(0x0467ceb7) /* 0.275343625 */, 19 },
+ /* 7407 */ { MAD_F(0x046802b2) /* 0.275393198 */, 19 },
+
+ /* 7408 */ { MAD_F(0x046836ae) /* 0.275442772 */, 19 },
+ /* 7409 */ { MAD_F(0x04686aaa) /* 0.275492349 */, 19 },
+ /* 7410 */ { MAD_F(0x04689ea7) /* 0.275541928 */, 19 },
+ /* 7411 */ { MAD_F(0x0468d2a4) /* 0.275591509 */, 19 },
+ /* 7412 */ { MAD_F(0x046906a2) /* 0.275641093 */, 19 },
+ /* 7413 */ { MAD_F(0x04693aa1) /* 0.275690679 */, 19 },
+ /* 7414 */ { MAD_F(0x04696ea0) /* 0.275740267 */, 19 },
+ /* 7415 */ { MAD_F(0x0469a2a0) /* 0.275789857 */, 19 },
+ /* 7416 */ { MAD_F(0x0469d6a0) /* 0.275839449 */, 19 },
+ /* 7417 */ { MAD_F(0x046a0aa1) /* 0.275889044 */, 19 },
+ /* 7418 */ { MAD_F(0x046a3ea3) /* 0.275938641 */, 19 },
+ /* 7419 */ { MAD_F(0x046a72a5) /* 0.275988240 */, 19 },
+ /* 7420 */ { MAD_F(0x046aa6a8) /* 0.276037842 */, 19 },
+ /* 7421 */ { MAD_F(0x046adaab) /* 0.276087445 */, 19 },
+ /* 7422 */ { MAD_F(0x046b0eaf) /* 0.276137051 */, 19 },
+ /* 7423 */ { MAD_F(0x046b42b3) /* 0.276186659 */, 19 },
+
+ /* 7424 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 19 },
+ /* 7425 */ { MAD_F(0x046baabe) /* 0.276285882 */, 19 },
+ /* 7426 */ { MAD_F(0x046bdec5) /* 0.276335497 */, 19 },
+ /* 7427 */ { MAD_F(0x046c12cc) /* 0.276385113 */, 19 },
+ /* 7428 */ { MAD_F(0x046c46d3) /* 0.276434733 */, 19 },
+ /* 7429 */ { MAD_F(0x046c7adb) /* 0.276484354 */, 19 },
+ /* 7430 */ { MAD_F(0x046caee4) /* 0.276533978 */, 19 },
+ /* 7431 */ { MAD_F(0x046ce2ee) /* 0.276583604 */, 19 },
+ /* 7432 */ { MAD_F(0x046d16f7) /* 0.276633232 */, 19 },
+ /* 7433 */ { MAD_F(0x046d4b02) /* 0.276682862 */, 19 },
+ /* 7434 */ { MAD_F(0x046d7f0d) /* 0.276732495 */, 19 },
+ /* 7435 */ { MAD_F(0x046db319) /* 0.276782129 */, 19 },
+ /* 7436 */ { MAD_F(0x046de725) /* 0.276831766 */, 19 },
+ /* 7437 */ { MAD_F(0x046e1b32) /* 0.276881406 */, 19 },
+ /* 7438 */ { MAD_F(0x046e4f40) /* 0.276931047 */, 19 },
+ /* 7439 */ { MAD_F(0x046e834e) /* 0.276980691 */, 19 },
+
+ /* 7440 */ { MAD_F(0x046eb75c) /* 0.277030337 */, 19 },
+ /* 7441 */ { MAD_F(0x046eeb6c) /* 0.277079985 */, 19 },
+ /* 7442 */ { MAD_F(0x046f1f7c) /* 0.277129635 */, 19 },
+ /* 7443 */ { MAD_F(0x046f538c) /* 0.277179288 */, 19 },
+ /* 7444 */ { MAD_F(0x046f879d) /* 0.277228942 */, 19 },
+ /* 7445 */ { MAD_F(0x046fbbaf) /* 0.277278600 */, 19 },
+ /* 7446 */ { MAD_F(0x046fefc1) /* 0.277328259 */, 19 },
+ /* 7447 */ { MAD_F(0x047023d4) /* 0.277377920 */, 19 },
+ /* 7448 */ { MAD_F(0x047057e8) /* 0.277427584 */, 19 },
+ /* 7449 */ { MAD_F(0x04708bfc) /* 0.277477250 */, 19 },
+ /* 7450 */ { MAD_F(0x0470c011) /* 0.277526918 */, 19 },
+ /* 7451 */ { MAD_F(0x0470f426) /* 0.277576588 */, 19 },
+ /* 7452 */ { MAD_F(0x0471283c) /* 0.277626261 */, 19 },
+ /* 7453 */ { MAD_F(0x04715c52) /* 0.277675936 */, 19 },
+ /* 7454 */ { MAD_F(0x04719069) /* 0.277725613 */, 19 },
+ /* 7455 */ { MAD_F(0x0471c481) /* 0.277775292 */, 19 },
+
+ /* 7456 */ { MAD_F(0x0471f899) /* 0.277824973 */, 19 },
+ /* 7457 */ { MAD_F(0x04722cb2) /* 0.277874657 */, 19 },
+ /* 7458 */ { MAD_F(0x047260cc) /* 0.277924343 */, 19 },
+ /* 7459 */ { MAD_F(0x047294e6) /* 0.277974031 */, 19 },
+ /* 7460 */ { MAD_F(0x0472c900) /* 0.278023722 */, 19 },
+ /* 7461 */ { MAD_F(0x0472fd1b) /* 0.278073414 */, 19 },
+ /* 7462 */ { MAD_F(0x04733137) /* 0.278123109 */, 19 },
+ /* 7463 */ { MAD_F(0x04736554) /* 0.278172806 */, 19 },
+ /* 7464 */ { MAD_F(0x04739971) /* 0.278222505 */, 19 },
+ /* 7465 */ { MAD_F(0x0473cd8e) /* 0.278272207 */, 19 },
+ /* 7466 */ { MAD_F(0x047401ad) /* 0.278321910 */, 19 },
+ /* 7467 */ { MAD_F(0x047435cb) /* 0.278371616 */, 19 },
+ /* 7468 */ { MAD_F(0x047469eb) /* 0.278421324 */, 19 },
+ /* 7469 */ { MAD_F(0x04749e0b) /* 0.278471035 */, 19 },
+ /* 7470 */ { MAD_F(0x0474d22c) /* 0.278520747 */, 19 },
+ /* 7471 */ { MAD_F(0x0475064d) /* 0.278570462 */, 19 },
+
+ /* 7472 */ { MAD_F(0x04753a6f) /* 0.278620179 */, 19 },
+ /* 7473 */ { MAD_F(0x04756e91) /* 0.278669898 */, 19 },
+ /* 7474 */ { MAD_F(0x0475a2b4) /* 0.278719619 */, 19 },
+ /* 7475 */ { MAD_F(0x0475d6d7) /* 0.278769343 */, 19 },
+ /* 7476 */ { MAD_F(0x04760afc) /* 0.278819069 */, 19 },
+ /* 7477 */ { MAD_F(0x04763f20) /* 0.278868797 */, 19 },
+ /* 7478 */ { MAD_F(0x04767346) /* 0.278918527 */, 19 },
+ /* 7479 */ { MAD_F(0x0476a76c) /* 0.278968260 */, 19 },
+ /* 7480 */ { MAD_F(0x0476db92) /* 0.279017995 */, 19 },
+ /* 7481 */ { MAD_F(0x04770fba) /* 0.279067731 */, 19 },
+ /* 7482 */ { MAD_F(0x047743e1) /* 0.279117471 */, 19 },
+ /* 7483 */ { MAD_F(0x0477780a) /* 0.279167212 */, 19 },
+ /* 7484 */ { MAD_F(0x0477ac33) /* 0.279216956 */, 19 },
+ /* 7485 */ { MAD_F(0x0477e05c) /* 0.279266701 */, 19 },
+ /* 7486 */ { MAD_F(0x04781486) /* 0.279316449 */, 19 },
+ /* 7487 */ { MAD_F(0x047848b1) /* 0.279366200 */, 19 },
+
+ /* 7488 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 19 },
+ /* 7489 */ { MAD_F(0x0478b108) /* 0.279465707 */, 19 },
+ /* 7490 */ { MAD_F(0x0478e535) /* 0.279515464 */, 19 },
+ /* 7491 */ { MAD_F(0x04791962) /* 0.279565223 */, 19 },
+ /* 7492 */ { MAD_F(0x04794d8f) /* 0.279614984 */, 19 },
+ /* 7493 */ { MAD_F(0x047981be) /* 0.279664748 */, 19 },
+ /* 7494 */ { MAD_F(0x0479b5ed) /* 0.279714513 */, 19 },
+ /* 7495 */ { MAD_F(0x0479ea1c) /* 0.279764281 */, 19 },
+ /* 7496 */ { MAD_F(0x047a1e4c) /* 0.279814051 */, 19 },
+ /* 7497 */ { MAD_F(0x047a527d) /* 0.279863824 */, 19 },
+ /* 7498 */ { MAD_F(0x047a86ae) /* 0.279913598 */, 19 },
+ /* 7499 */ { MAD_F(0x047abae0) /* 0.279963375 */, 19 },
+ /* 7500 */ { MAD_F(0x047aef12) /* 0.280013154 */, 19 },
+ /* 7501 */ { MAD_F(0x047b2346) /* 0.280062935 */, 19 },
+ /* 7502 */ { MAD_F(0x047b5779) /* 0.280112719 */, 19 },
+ /* 7503 */ { MAD_F(0x047b8bad) /* 0.280162504 */, 19 },
+
+ /* 7504 */ { MAD_F(0x047bbfe2) /* 0.280212292 */, 19 },
+ /* 7505 */ { MAD_F(0x047bf418) /* 0.280262082 */, 19 },
+ /* 7506 */ { MAD_F(0x047c284e) /* 0.280311875 */, 19 },
+ /* 7507 */ { MAD_F(0x047c5c84) /* 0.280361669 */, 19 },
+ /* 7508 */ { MAD_F(0x047c90bb) /* 0.280411466 */, 19 },
+ /* 7509 */ { MAD_F(0x047cc4f3) /* 0.280461265 */, 19 },
+ /* 7510 */ { MAD_F(0x047cf92c) /* 0.280511066 */, 19 },
+ /* 7511 */ { MAD_F(0x047d2d65) /* 0.280560869 */, 19 },
+ /* 7512 */ { MAD_F(0x047d619e) /* 0.280610675 */, 19 },
+ /* 7513 */ { MAD_F(0x047d95d8) /* 0.280660483 */, 19 },
+ /* 7514 */ { MAD_F(0x047dca13) /* 0.280710292 */, 19 },
+ /* 7515 */ { MAD_F(0x047dfe4e) /* 0.280760105 */, 19 },
+ /* 7516 */ { MAD_F(0x047e328a) /* 0.280809919 */, 19 },
+ /* 7517 */ { MAD_F(0x047e66c7) /* 0.280859736 */, 19 },
+ /* 7518 */ { MAD_F(0x047e9b04) /* 0.280909554 */, 19 },
+ /* 7519 */ { MAD_F(0x047ecf42) /* 0.280959375 */, 19 },
+
+ /* 7520 */ { MAD_F(0x047f0380) /* 0.281009199 */, 19 },
+ /* 7521 */ { MAD_F(0x047f37bf) /* 0.281059024 */, 19 },
+ /* 7522 */ { MAD_F(0x047f6bff) /* 0.281108852 */, 19 },
+ /* 7523 */ { MAD_F(0x047fa03f) /* 0.281158682 */, 19 },
+ /* 7524 */ { MAD_F(0x047fd47f) /* 0.281208514 */, 19 },
+ /* 7525 */ { MAD_F(0x048008c1) /* 0.281258348 */, 19 },
+ /* 7526 */ { MAD_F(0x04803d02) /* 0.281308184 */, 19 },
+ /* 7527 */ { MAD_F(0x04807145) /* 0.281358023 */, 19 },
+ /* 7528 */ { MAD_F(0x0480a588) /* 0.281407864 */, 19 },
+ /* 7529 */ { MAD_F(0x0480d9cc) /* 0.281457707 */, 19 },
+ /* 7530 */ { MAD_F(0x04810e10) /* 0.281507552 */, 19 },
+ /* 7531 */ { MAD_F(0x04814255) /* 0.281557400 */, 19 },
+ /* 7532 */ { MAD_F(0x0481769a) /* 0.281607250 */, 19 },
+ /* 7533 */ { MAD_F(0x0481aae0) /* 0.281657101 */, 19 },
+ /* 7534 */ { MAD_F(0x0481df27) /* 0.281706956 */, 19 },
+ /* 7535 */ { MAD_F(0x0482136e) /* 0.281756812 */, 19 },
+
+ /* 7536 */ { MAD_F(0x048247b6) /* 0.281806670 */, 19 },
+ /* 7537 */ { MAD_F(0x04827bfe) /* 0.281856531 */, 19 },
+ /* 7538 */ { MAD_F(0x0482b047) /* 0.281906394 */, 19 },
+ /* 7539 */ { MAD_F(0x0482e491) /* 0.281956259 */, 19 },
+ /* 7540 */ { MAD_F(0x048318db) /* 0.282006127 */, 19 },
+ /* 7541 */ { MAD_F(0x04834d26) /* 0.282055996 */, 19 },
+ /* 7542 */ { MAD_F(0x04838171) /* 0.282105868 */, 19 },
+ /* 7543 */ { MAD_F(0x0483b5bd) /* 0.282155742 */, 19 },
+ /* 7544 */ { MAD_F(0x0483ea0a) /* 0.282205618 */, 19 },
+ /* 7545 */ { MAD_F(0x04841e57) /* 0.282255496 */, 19 },
+ /* 7546 */ { MAD_F(0x048452a4) /* 0.282305377 */, 19 },
+ /* 7547 */ { MAD_F(0x048486f3) /* 0.282355260 */, 19 },
+ /* 7548 */ { MAD_F(0x0484bb42) /* 0.282405145 */, 19 },
+ /* 7549 */ { MAD_F(0x0484ef91) /* 0.282455032 */, 19 },
+ /* 7550 */ { MAD_F(0x048523e1) /* 0.282504921 */, 19 },
+ /* 7551 */ { MAD_F(0x04855832) /* 0.282554813 */, 19 },
+
+ /* 7552 */ { MAD_F(0x04858c83) /* 0.282604707 */, 19 },
+ /* 7553 */ { MAD_F(0x0485c0d5) /* 0.282654603 */, 19 },
+ /* 7554 */ { MAD_F(0x0485f527) /* 0.282704501 */, 19 },
+ /* 7555 */ { MAD_F(0x0486297a) /* 0.282754401 */, 19 },
+ /* 7556 */ { MAD_F(0x04865dce) /* 0.282804304 */, 19 },
+ /* 7557 */ { MAD_F(0x04869222) /* 0.282854209 */, 19 },
+ /* 7558 */ { MAD_F(0x0486c677) /* 0.282904116 */, 19 },
+ /* 7559 */ { MAD_F(0x0486facc) /* 0.282954025 */, 19 },
+ /* 7560 */ { MAD_F(0x04872f22) /* 0.283003936 */, 19 },
+ /* 7561 */ { MAD_F(0x04876379) /* 0.283053850 */, 19 },
+ /* 7562 */ { MAD_F(0x048797d0) /* 0.283103766 */, 19 },
+ /* 7563 */ { MAD_F(0x0487cc28) /* 0.283153684 */, 19 },
+ /* 7564 */ { MAD_F(0x04880080) /* 0.283203604 */, 19 },
+ /* 7565 */ { MAD_F(0x048834d9) /* 0.283253527 */, 19 },
+ /* 7566 */ { MAD_F(0x04886933) /* 0.283303451 */, 19 },
+ /* 7567 */ { MAD_F(0x04889d8d) /* 0.283353378 */, 19 },
+
+ /* 7568 */ { MAD_F(0x0488d1e8) /* 0.283403307 */, 19 },
+ /* 7569 */ { MAD_F(0x04890643) /* 0.283453238 */, 19 },
+ /* 7570 */ { MAD_F(0x04893a9f) /* 0.283503172 */, 19 },
+ /* 7571 */ { MAD_F(0x04896efb) /* 0.283553107 */, 19 },
+ /* 7572 */ { MAD_F(0x0489a358) /* 0.283603045 */, 19 },
+ /* 7573 */ { MAD_F(0x0489d7b6) /* 0.283652985 */, 19 },
+ /* 7574 */ { MAD_F(0x048a0c14) /* 0.283702927 */, 19 },
+ /* 7575 */ { MAD_F(0x048a4073) /* 0.283752872 */, 19 },
+ /* 7576 */ { MAD_F(0x048a74d3) /* 0.283802818 */, 19 },
+ /* 7577 */ { MAD_F(0x048aa933) /* 0.283852767 */, 19 },
+ /* 7578 */ { MAD_F(0x048add93) /* 0.283902718 */, 19 },
+ /* 7579 */ { MAD_F(0x048b11f5) /* 0.283952671 */, 19 },
+ /* 7580 */ { MAD_F(0x048b4656) /* 0.284002627 */, 19 },
+ /* 7581 */ { MAD_F(0x048b7ab9) /* 0.284052584 */, 19 },
+ /* 7582 */ { MAD_F(0x048baf1c) /* 0.284102544 */, 19 },
+ /* 7583 */ { MAD_F(0x048be37f) /* 0.284152506 */, 19 },
+
+ /* 7584 */ { MAD_F(0x048c17e3) /* 0.284202470 */, 19 },
+ /* 7585 */ { MAD_F(0x048c4c48) /* 0.284252436 */, 19 },
+ /* 7586 */ { MAD_F(0x048c80ad) /* 0.284302405 */, 19 },
+ /* 7587 */ { MAD_F(0x048cb513) /* 0.284352376 */, 19 },
+ /* 7588 */ { MAD_F(0x048ce97a) /* 0.284402349 */, 19 },
+ /* 7589 */ { MAD_F(0x048d1de1) /* 0.284452324 */, 19 },
+ /* 7590 */ { MAD_F(0x048d5249) /* 0.284502301 */, 19 },
+ /* 7591 */ { MAD_F(0x048d86b1) /* 0.284552281 */, 19 },
+ /* 7592 */ { MAD_F(0x048dbb1a) /* 0.284602263 */, 19 },
+ /* 7593 */ { MAD_F(0x048def83) /* 0.284652246 */, 19 },
+ /* 7594 */ { MAD_F(0x048e23ed) /* 0.284702233 */, 19 },
+ /* 7595 */ { MAD_F(0x048e5858) /* 0.284752221 */, 19 },
+ /* 7596 */ { MAD_F(0x048e8cc3) /* 0.284802211 */, 19 },
+ /* 7597 */ { MAD_F(0x048ec12f) /* 0.284852204 */, 19 },
+ /* 7598 */ { MAD_F(0x048ef59b) /* 0.284902199 */, 19 },
+ /* 7599 */ { MAD_F(0x048f2a08) /* 0.284952196 */, 19 },
+
+ /* 7600 */ { MAD_F(0x048f5e76) /* 0.285002195 */, 19 },
+ /* 7601 */ { MAD_F(0x048f92e4) /* 0.285052197 */, 19 },
+ /* 7602 */ { MAD_F(0x048fc753) /* 0.285102201 */, 19 },
+ /* 7603 */ { MAD_F(0x048ffbc2) /* 0.285152206 */, 19 },
+ /* 7604 */ { MAD_F(0x04903032) /* 0.285202214 */, 19 },
+ /* 7605 */ { MAD_F(0x049064a3) /* 0.285252225 */, 19 },
+ /* 7606 */ { MAD_F(0x04909914) /* 0.285302237 */, 19 },
+ /* 7607 */ { MAD_F(0x0490cd86) /* 0.285352252 */, 19 },
+ /* 7608 */ { MAD_F(0x049101f8) /* 0.285402269 */, 19 },
+ /* 7609 */ { MAD_F(0x0491366b) /* 0.285452288 */, 19 },
+ /* 7610 */ { MAD_F(0x04916ade) /* 0.285502309 */, 19 },
+ /* 7611 */ { MAD_F(0x04919f52) /* 0.285552332 */, 19 },
+ /* 7612 */ { MAD_F(0x0491d3c7) /* 0.285602358 */, 19 },
+ /* 7613 */ { MAD_F(0x0492083c) /* 0.285652386 */, 19 },
+ /* 7614 */ { MAD_F(0x04923cb2) /* 0.285702416 */, 19 },
+ /* 7615 */ { MAD_F(0x04927128) /* 0.285752448 */, 19 },
+
+ /* 7616 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 19 },
+ /* 7617 */ { MAD_F(0x0492da17) /* 0.285852519 */, 19 },
+ /* 7618 */ { MAD_F(0x04930e8f) /* 0.285902557 */, 19 },
+ /* 7619 */ { MAD_F(0x04934308) /* 0.285952598 */, 19 },
+ /* 7620 */ { MAD_F(0x04937781) /* 0.286002641 */, 19 },
+ /* 7621 */ { MAD_F(0x0493abfb) /* 0.286052687 */, 19 },
+ /* 7622 */ { MAD_F(0x0493e076) /* 0.286102734 */, 19 },
+ /* 7623 */ { MAD_F(0x049414f1) /* 0.286152784 */, 19 },
+ /* 7624 */ { MAD_F(0x0494496c) /* 0.286202836 */, 19 },
+ /* 7625 */ { MAD_F(0x04947de9) /* 0.286252890 */, 19 },
+ /* 7626 */ { MAD_F(0x0494b266) /* 0.286302946 */, 19 },
+ /* 7627 */ { MAD_F(0x0494e6e3) /* 0.286353005 */, 19 },
+ /* 7628 */ { MAD_F(0x04951b61) /* 0.286403065 */, 19 },
+ /* 7629 */ { MAD_F(0x04954fe0) /* 0.286453128 */, 19 },
+ /* 7630 */ { MAD_F(0x0495845f) /* 0.286503193 */, 19 },
+ /* 7631 */ { MAD_F(0x0495b8df) /* 0.286553260 */, 19 },
+
+ /* 7632 */ { MAD_F(0x0495ed5f) /* 0.286603329 */, 19 },
+ /* 7633 */ { MAD_F(0x049621e0) /* 0.286653401 */, 19 },
+ /* 7634 */ { MAD_F(0x04965662) /* 0.286703475 */, 19 },
+ /* 7635 */ { MAD_F(0x04968ae4) /* 0.286753551 */, 19 },
+ /* 7636 */ { MAD_F(0x0496bf67) /* 0.286803629 */, 19 },
+ /* 7637 */ { MAD_F(0x0496f3ea) /* 0.286853709 */, 19 },
+ /* 7638 */ { MAD_F(0x0497286e) /* 0.286903792 */, 19 },
+ /* 7639 */ { MAD_F(0x04975cf2) /* 0.286953876 */, 19 },
+ /* 7640 */ { MAD_F(0x04979177) /* 0.287003963 */, 19 },
+ /* 7641 */ { MAD_F(0x0497c5fd) /* 0.287054052 */, 19 },
+ /* 7642 */ { MAD_F(0x0497fa83) /* 0.287104143 */, 19 },
+ /* 7643 */ { MAD_F(0x04982f0a) /* 0.287154237 */, 19 },
+ /* 7644 */ { MAD_F(0x04986392) /* 0.287204332 */, 19 },
+ /* 7645 */ { MAD_F(0x0498981a) /* 0.287254430 */, 19 },
+ /* 7646 */ { MAD_F(0x0498cca2) /* 0.287304530 */, 19 },
+ /* 7647 */ { MAD_F(0x0499012c) /* 0.287354632 */, 19 },
+
+ /* 7648 */ { MAD_F(0x049935b5) /* 0.287404737 */, 19 },
+ /* 7649 */ { MAD_F(0x04996a40) /* 0.287454843 */, 19 },
+ /* 7650 */ { MAD_F(0x04999ecb) /* 0.287504952 */, 19 },
+ /* 7651 */ { MAD_F(0x0499d356) /* 0.287555063 */, 19 },
+ /* 7652 */ { MAD_F(0x049a07e2) /* 0.287605176 */, 19 },
+ /* 7653 */ { MAD_F(0x049a3c6f) /* 0.287655291 */, 19 },
+ /* 7654 */ { MAD_F(0x049a70fc) /* 0.287705409 */, 19 },
+ /* 7655 */ { MAD_F(0x049aa58a) /* 0.287755528 */, 19 },
+ /* 7656 */ { MAD_F(0x049ada19) /* 0.287805650 */, 19 },
+ /* 7657 */ { MAD_F(0x049b0ea8) /* 0.287855774 */, 19 },
+ /* 7658 */ { MAD_F(0x049b4337) /* 0.287905900 */, 19 },
+ /* 7659 */ { MAD_F(0x049b77c8) /* 0.287956028 */, 19 },
+ /* 7660 */ { MAD_F(0x049bac58) /* 0.288006159 */, 19 },
+ /* 7661 */ { MAD_F(0x049be0ea) /* 0.288056292 */, 19 },
+ /* 7662 */ { MAD_F(0x049c157c) /* 0.288106427 */, 19 },
+ /* 7663 */ { MAD_F(0x049c4a0e) /* 0.288156564 */, 19 },
+
+ /* 7664 */ { MAD_F(0x049c7ea1) /* 0.288206703 */, 19 },
+ /* 7665 */ { MAD_F(0x049cb335) /* 0.288256844 */, 19 },
+ /* 7666 */ { MAD_F(0x049ce7ca) /* 0.288306988 */, 19 },
+ /* 7667 */ { MAD_F(0x049d1c5e) /* 0.288357134 */, 19 },
+ /* 7668 */ { MAD_F(0x049d50f4) /* 0.288407282 */, 19 },
+ /* 7669 */ { MAD_F(0x049d858a) /* 0.288457432 */, 19 },
+ /* 7670 */ { MAD_F(0x049dba21) /* 0.288507584 */, 19 },
+ /* 7671 */ { MAD_F(0x049deeb8) /* 0.288557739 */, 19 },
+ /* 7672 */ { MAD_F(0x049e2350) /* 0.288607895 */, 19 },
+ /* 7673 */ { MAD_F(0x049e57e8) /* 0.288658054 */, 19 },
+ /* 7674 */ { MAD_F(0x049e8c81) /* 0.288708215 */, 19 },
+ /* 7675 */ { MAD_F(0x049ec11b) /* 0.288758379 */, 19 },
+ /* 7676 */ { MAD_F(0x049ef5b5) /* 0.288808544 */, 19 },
+ /* 7677 */ { MAD_F(0x049f2a50) /* 0.288858712 */, 19 },
+ /* 7678 */ { MAD_F(0x049f5eeb) /* 0.288908881 */, 19 },
+ /* 7679 */ { MAD_F(0x049f9387) /* 0.288959053 */, 19 },
+
+ /* 7680 */ { MAD_F(0x049fc824) /* 0.289009227 */, 19 },
+ /* 7681 */ { MAD_F(0x049ffcc1) /* 0.289059404 */, 19 },
+ /* 7682 */ { MAD_F(0x04a0315e) /* 0.289109582 */, 19 },
+ /* 7683 */ { MAD_F(0x04a065fd) /* 0.289159763 */, 19 },
+ /* 7684 */ { MAD_F(0x04a09a9b) /* 0.289209946 */, 19 },
+ /* 7685 */ { MAD_F(0x04a0cf3b) /* 0.289260131 */, 19 },
+ /* 7686 */ { MAD_F(0x04a103db) /* 0.289310318 */, 19 },
+ /* 7687 */ { MAD_F(0x04a1387b) /* 0.289360507 */, 19 },
+ /* 7688 */ { MAD_F(0x04a16d1d) /* 0.289410699 */, 19 },
+ /* 7689 */ { MAD_F(0x04a1a1be) /* 0.289460893 */, 19 },
+ /* 7690 */ { MAD_F(0x04a1d661) /* 0.289511088 */, 19 },
+ /* 7691 */ { MAD_F(0x04a20b04) /* 0.289561287 */, 19 },
+ /* 7692 */ { MAD_F(0x04a23fa7) /* 0.289611487 */, 19 },
+ /* 7693 */ { MAD_F(0x04a2744b) /* 0.289661689 */, 19 },
+ /* 7694 */ { MAD_F(0x04a2a8f0) /* 0.289711894 */, 19 },
+ /* 7695 */ { MAD_F(0x04a2dd95) /* 0.289762101 */, 19 },
+
+ /* 7696 */ { MAD_F(0x04a3123b) /* 0.289812309 */, 19 },
+ /* 7697 */ { MAD_F(0x04a346e2) /* 0.289862521 */, 19 },
+ /* 7698 */ { MAD_F(0x04a37b89) /* 0.289912734 */, 19 },
+ /* 7699 */ { MAD_F(0x04a3b030) /* 0.289962949 */, 19 },
+ /* 7700 */ { MAD_F(0x04a3e4d8) /* 0.290013167 */, 19 },
+ /* 7701 */ { MAD_F(0x04a41981) /* 0.290063387 */, 19 },
+ /* 7702 */ { MAD_F(0x04a44e2b) /* 0.290113609 */, 19 },
+ /* 7703 */ { MAD_F(0x04a482d5) /* 0.290163833 */, 19 },
+ /* 7704 */ { MAD_F(0x04a4b77f) /* 0.290214059 */, 19 },
+ /* 7705 */ { MAD_F(0x04a4ec2a) /* 0.290264288 */, 19 },
+ /* 7706 */ { MAD_F(0x04a520d6) /* 0.290314519 */, 19 },
+ /* 7707 */ { MAD_F(0x04a55582) /* 0.290364751 */, 19 },
+ /* 7708 */ { MAD_F(0x04a58a2f) /* 0.290414986 */, 19 },
+ /* 7709 */ { MAD_F(0x04a5bedd) /* 0.290465224 */, 19 },
+ /* 7710 */ { MAD_F(0x04a5f38b) /* 0.290515463 */, 19 },
+ /* 7711 */ { MAD_F(0x04a62839) /* 0.290565705 */, 19 },
+
+ /* 7712 */ { MAD_F(0x04a65ce8) /* 0.290615948 */, 19 },
+ /* 7713 */ { MAD_F(0x04a69198) /* 0.290666194 */, 19 },
+ /* 7714 */ { MAD_F(0x04a6c648) /* 0.290716442 */, 19 },
+ /* 7715 */ { MAD_F(0x04a6faf9) /* 0.290766692 */, 19 },
+ /* 7716 */ { MAD_F(0x04a72fab) /* 0.290816945 */, 19 },
+ /* 7717 */ { MAD_F(0x04a7645d) /* 0.290867199 */, 19 },
+ /* 7718 */ { MAD_F(0x04a79910) /* 0.290917456 */, 19 },
+ /* 7719 */ { MAD_F(0x04a7cdc3) /* 0.290967715 */, 19 },
+ /* 7720 */ { MAD_F(0x04a80277) /* 0.291017976 */, 19 },
+ /* 7721 */ { MAD_F(0x04a8372b) /* 0.291068239 */, 19 },
+ /* 7722 */ { MAD_F(0x04a86be0) /* 0.291118505 */, 19 },
+ /* 7723 */ { MAD_F(0x04a8a096) /* 0.291168772 */, 19 },
+ /* 7724 */ { MAD_F(0x04a8d54c) /* 0.291219042 */, 19 },
+ /* 7725 */ { MAD_F(0x04a90a03) /* 0.291269314 */, 19 },
+ /* 7726 */ { MAD_F(0x04a93eba) /* 0.291319588 */, 19 },
+ /* 7727 */ { MAD_F(0x04a97372) /* 0.291369865 */, 19 },
+
+ /* 7728 */ { MAD_F(0x04a9a82b) /* 0.291420143 */, 19 },
+ /* 7729 */ { MAD_F(0x04a9dce4) /* 0.291470424 */, 19 },
+ /* 7730 */ { MAD_F(0x04aa119d) /* 0.291520706 */, 19 },
+ /* 7731 */ { MAD_F(0x04aa4658) /* 0.291570991 */, 19 },
+ /* 7732 */ { MAD_F(0x04aa7b13) /* 0.291621278 */, 19 },
+ /* 7733 */ { MAD_F(0x04aaafce) /* 0.291671568 */, 19 },
+ /* 7734 */ { MAD_F(0x04aae48a) /* 0.291721859 */, 19 },
+ /* 7735 */ { MAD_F(0x04ab1947) /* 0.291772153 */, 19 },
+ /* 7736 */ { MAD_F(0x04ab4e04) /* 0.291822449 */, 19 },
+ /* 7737 */ { MAD_F(0x04ab82c2) /* 0.291872747 */, 19 },
+ /* 7738 */ { MAD_F(0x04abb780) /* 0.291923047 */, 19 },
+ /* 7739 */ { MAD_F(0x04abec3f) /* 0.291973349 */, 19 },
+ /* 7740 */ { MAD_F(0x04ac20fe) /* 0.292023653 */, 19 },
+ /* 7741 */ { MAD_F(0x04ac55be) /* 0.292073960 */, 19 },
+ /* 7742 */ { MAD_F(0x04ac8a7f) /* 0.292124269 */, 19 },
+ /* 7743 */ { MAD_F(0x04acbf40) /* 0.292174580 */, 19 },
+
+ /* 7744 */ { MAD_F(0x04acf402) /* 0.292224893 */, 19 },
+ /* 7745 */ { MAD_F(0x04ad28c5) /* 0.292275208 */, 19 },
+ /* 7746 */ { MAD_F(0x04ad5d88) /* 0.292325526 */, 19 },
+ /* 7747 */ { MAD_F(0x04ad924b) /* 0.292375845 */, 19 },
+ /* 7748 */ { MAD_F(0x04adc70f) /* 0.292426167 */, 19 },
+ /* 7749 */ { MAD_F(0x04adfbd4) /* 0.292476491 */, 19 },
+ /* 7750 */ { MAD_F(0x04ae3099) /* 0.292526817 */, 19 },
+ /* 7751 */ { MAD_F(0x04ae655f) /* 0.292577145 */, 19 },
+ /* 7752 */ { MAD_F(0x04ae9a26) /* 0.292627476 */, 19 },
+ /* 7753 */ { MAD_F(0x04aeceed) /* 0.292677808 */, 19 },
+ /* 7754 */ { MAD_F(0x04af03b4) /* 0.292728143 */, 19 },
+ /* 7755 */ { MAD_F(0x04af387d) /* 0.292778480 */, 19 },
+ /* 7756 */ { MAD_F(0x04af6d45) /* 0.292828819 */, 19 },
+ /* 7757 */ { MAD_F(0x04afa20f) /* 0.292879160 */, 19 },
+ /* 7758 */ { MAD_F(0x04afd6d9) /* 0.292929504 */, 19 },
+ /* 7759 */ { MAD_F(0x04b00ba3) /* 0.292979849 */, 19 },
+
+ /* 7760 */ { MAD_F(0x04b0406e) /* 0.293030197 */, 19 },
+ /* 7761 */ { MAD_F(0x04b0753a) /* 0.293080547 */, 19 },
+ /* 7762 */ { MAD_F(0x04b0aa06) /* 0.293130899 */, 19 },
+ /* 7763 */ { MAD_F(0x04b0ded3) /* 0.293181253 */, 19 },
+ /* 7764 */ { MAD_F(0x04b113a1) /* 0.293231610 */, 19 },
+ /* 7765 */ { MAD_F(0x04b1486f) /* 0.293281968 */, 19 },
+ /* 7766 */ { MAD_F(0x04b17d3d) /* 0.293332329 */, 19 },
+ /* 7767 */ { MAD_F(0x04b1b20c) /* 0.293382692 */, 19 },
+ /* 7768 */ { MAD_F(0x04b1e6dc) /* 0.293433057 */, 19 },
+ /* 7769 */ { MAD_F(0x04b21bad) /* 0.293483424 */, 19 },
+ /* 7770 */ { MAD_F(0x04b2507d) /* 0.293533794 */, 19 },
+ /* 7771 */ { MAD_F(0x04b2854f) /* 0.293584165 */, 19 },
+ /* 7772 */ { MAD_F(0x04b2ba21) /* 0.293634539 */, 19 },
+ /* 7773 */ { MAD_F(0x04b2eef4) /* 0.293684915 */, 19 },
+ /* 7774 */ { MAD_F(0x04b323c7) /* 0.293735293 */, 19 },
+ /* 7775 */ { MAD_F(0x04b3589b) /* 0.293785673 */, 19 },
+
+ /* 7776 */ { MAD_F(0x04b38d6f) /* 0.293836055 */, 19 },
+ /* 7777 */ { MAD_F(0x04b3c244) /* 0.293886440 */, 19 },
+ /* 7778 */ { MAD_F(0x04b3f71a) /* 0.293936826 */, 19 },
+ /* 7779 */ { MAD_F(0x04b42bf0) /* 0.293987215 */, 19 },
+ /* 7780 */ { MAD_F(0x04b460c7) /* 0.294037606 */, 19 },
+ /* 7781 */ { MAD_F(0x04b4959e) /* 0.294087999 */, 19 },
+ /* 7782 */ { MAD_F(0x04b4ca76) /* 0.294138395 */, 19 },
+ /* 7783 */ { MAD_F(0x04b4ff4e) /* 0.294188792 */, 19 },
+ /* 7784 */ { MAD_F(0x04b53427) /* 0.294239192 */, 19 },
+ /* 7785 */ { MAD_F(0x04b56901) /* 0.294289593 */, 19 },
+ /* 7786 */ { MAD_F(0x04b59ddb) /* 0.294339997 */, 19 },
+ /* 7787 */ { MAD_F(0x04b5d2b6) /* 0.294390403 */, 19 },
+ /* 7788 */ { MAD_F(0x04b60791) /* 0.294440812 */, 19 },
+ /* 7789 */ { MAD_F(0x04b63c6d) /* 0.294491222 */, 19 },
+ /* 7790 */ { MAD_F(0x04b6714a) /* 0.294541635 */, 19 },
+ /* 7791 */ { MAD_F(0x04b6a627) /* 0.294592049 */, 19 },
+
+ /* 7792 */ { MAD_F(0x04b6db05) /* 0.294642466 */, 19 },
+ /* 7793 */ { MAD_F(0x04b70fe3) /* 0.294692885 */, 19 },
+ /* 7794 */ { MAD_F(0x04b744c2) /* 0.294743306 */, 19 },
+ /* 7795 */ { MAD_F(0x04b779a1) /* 0.294793730 */, 19 },
+ /* 7796 */ { MAD_F(0x04b7ae81) /* 0.294844155 */, 19 },
+ /* 7797 */ { MAD_F(0x04b7e362) /* 0.294894583 */, 19 },
+ /* 7798 */ { MAD_F(0x04b81843) /* 0.294945013 */, 19 },
+ /* 7799 */ { MAD_F(0x04b84d24) /* 0.294995445 */, 19 },
+ /* 7800 */ { MAD_F(0x04b88207) /* 0.295045879 */, 19 },
+ /* 7801 */ { MAD_F(0x04b8b6ea) /* 0.295096315 */, 19 },
+ /* 7802 */ { MAD_F(0x04b8ebcd) /* 0.295146753 */, 19 },
+ /* 7803 */ { MAD_F(0x04b920b1) /* 0.295197194 */, 19 },
+ /* 7804 */ { MAD_F(0x04b95596) /* 0.295247637 */, 19 },
+ /* 7805 */ { MAD_F(0x04b98a7b) /* 0.295298082 */, 19 },
+ /* 7806 */ { MAD_F(0x04b9bf61) /* 0.295348529 */, 19 },
+ /* 7807 */ { MAD_F(0x04b9f447) /* 0.295398978 */, 19 },
+
+ /* 7808 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 19 },
+ /* 7809 */ { MAD_F(0x04ba5e16) /* 0.295499883 */, 19 },
+ /* 7810 */ { MAD_F(0x04ba92fe) /* 0.295550338 */, 19 },
+ /* 7811 */ { MAD_F(0x04bac7e6) /* 0.295600796 */, 19 },
+ /* 7812 */ { MAD_F(0x04bafcd0) /* 0.295651256 */, 19 },
+ /* 7813 */ { MAD_F(0x04bb31b9) /* 0.295701718 */, 19 },
+ /* 7814 */ { MAD_F(0x04bb66a4) /* 0.295752183 */, 19 },
+ /* 7815 */ { MAD_F(0x04bb9b8f) /* 0.295802649 */, 19 },
+ /* 7816 */ { MAD_F(0x04bbd07a) /* 0.295853118 */, 19 },
+ /* 7817 */ { MAD_F(0x04bc0566) /* 0.295903588 */, 19 },
+ /* 7818 */ { MAD_F(0x04bc3a53) /* 0.295954061 */, 19 },
+ /* 7819 */ { MAD_F(0x04bc6f40) /* 0.296004536 */, 19 },
+ /* 7820 */ { MAD_F(0x04bca42e) /* 0.296055013 */, 19 },
+ /* 7821 */ { MAD_F(0x04bcd91d) /* 0.296105493 */, 19 },
+ /* 7822 */ { MAD_F(0x04bd0e0c) /* 0.296155974 */, 19 },
+ /* 7823 */ { MAD_F(0x04bd42fb) /* 0.296206458 */, 19 },
+
+ /* 7824 */ { MAD_F(0x04bd77ec) /* 0.296256944 */, 19 },
+ /* 7825 */ { MAD_F(0x04bdacdc) /* 0.296307432 */, 19 },
+ /* 7826 */ { MAD_F(0x04bde1ce) /* 0.296357922 */, 19 },
+ /* 7827 */ { MAD_F(0x04be16c0) /* 0.296408414 */, 19 },
+ /* 7828 */ { MAD_F(0x04be4bb2) /* 0.296458908 */, 19 },
+ /* 7829 */ { MAD_F(0x04be80a5) /* 0.296509405 */, 19 },
+ /* 7830 */ { MAD_F(0x04beb599) /* 0.296559904 */, 19 },
+ /* 7831 */ { MAD_F(0x04beea8d) /* 0.296610404 */, 19 },
+ /* 7832 */ { MAD_F(0x04bf1f82) /* 0.296660907 */, 19 },
+ /* 7833 */ { MAD_F(0x04bf5477) /* 0.296711413 */, 19 },
+ /* 7834 */ { MAD_F(0x04bf896d) /* 0.296761920 */, 19 },
+ /* 7835 */ { MAD_F(0x04bfbe64) /* 0.296812429 */, 19 },
+ /* 7836 */ { MAD_F(0x04bff35b) /* 0.296862941 */, 19 },
+ /* 7837 */ { MAD_F(0x04c02852) /* 0.296913455 */, 19 },
+ /* 7838 */ { MAD_F(0x04c05d4b) /* 0.296963971 */, 19 },
+ /* 7839 */ { MAD_F(0x04c09243) /* 0.297014489 */, 19 },
+
+ /* 7840 */ { MAD_F(0x04c0c73d) /* 0.297065009 */, 19 },
+ /* 7841 */ { MAD_F(0x04c0fc37) /* 0.297115531 */, 19 },
+ /* 7842 */ { MAD_F(0x04c13131) /* 0.297166056 */, 19 },
+ /* 7843 */ { MAD_F(0x04c1662d) /* 0.297216582 */, 19 },
+ /* 7844 */ { MAD_F(0x04c19b28) /* 0.297267111 */, 19 },
+ /* 7845 */ { MAD_F(0x04c1d025) /* 0.297317642 */, 19 },
+ /* 7846 */ { MAD_F(0x04c20521) /* 0.297368175 */, 19 },
+ /* 7847 */ { MAD_F(0x04c23a1f) /* 0.297418710 */, 19 },
+ /* 7848 */ { MAD_F(0x04c26f1d) /* 0.297469248 */, 19 },
+ /* 7849 */ { MAD_F(0x04c2a41b) /* 0.297519787 */, 19 },
+ /* 7850 */ { MAD_F(0x04c2d91b) /* 0.297570329 */, 19 },
+ /* 7851 */ { MAD_F(0x04c30e1a) /* 0.297620873 */, 19 },
+ /* 7852 */ { MAD_F(0x04c3431b) /* 0.297671418 */, 19 },
+ /* 7853 */ { MAD_F(0x04c3781c) /* 0.297721967 */, 19 },
+ /* 7854 */ { MAD_F(0x04c3ad1d) /* 0.297772517 */, 19 },
+ /* 7855 */ { MAD_F(0x04c3e21f) /* 0.297823069 */, 19 },
+
+ /* 7856 */ { MAD_F(0x04c41722) /* 0.297873624 */, 19 },
+ /* 7857 */ { MAD_F(0x04c44c25) /* 0.297924180 */, 19 },
+ /* 7858 */ { MAD_F(0x04c48129) /* 0.297974739 */, 19 },
+ /* 7859 */ { MAD_F(0x04c4b62d) /* 0.298025300 */, 19 },
+ /* 7860 */ { MAD_F(0x04c4eb32) /* 0.298075863 */, 19 },
+ /* 7861 */ { MAD_F(0x04c52038) /* 0.298126429 */, 19 },
+ /* 7862 */ { MAD_F(0x04c5553e) /* 0.298176996 */, 19 },
+ /* 7863 */ { MAD_F(0x04c58a44) /* 0.298227565 */, 19 },
+ /* 7864 */ { MAD_F(0x04c5bf4c) /* 0.298278137 */, 19 },
+ /* 7865 */ { MAD_F(0x04c5f453) /* 0.298328711 */, 19 },
+ /* 7866 */ { MAD_F(0x04c6295c) /* 0.298379287 */, 19 },
+ /* 7867 */ { MAD_F(0x04c65e65) /* 0.298429865 */, 19 },
+ /* 7868 */ { MAD_F(0x04c6936e) /* 0.298480445 */, 19 },
+ /* 7869 */ { MAD_F(0x04c6c878) /* 0.298531028 */, 19 },
+ /* 7870 */ { MAD_F(0x04c6fd83) /* 0.298581612 */, 19 },
+ /* 7871 */ { MAD_F(0x04c7328e) /* 0.298632199 */, 19 },
+
+ /* 7872 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 19 },
+ /* 7873 */ { MAD_F(0x04c79ca7) /* 0.298733379 */, 19 },
+ /* 7874 */ { MAD_F(0x04c7d1b4) /* 0.298783972 */, 19 },
+ /* 7875 */ { MAD_F(0x04c806c1) /* 0.298834567 */, 19 },
+ /* 7876 */ { MAD_F(0x04c83bcf) /* 0.298885165 */, 19 },
+ /* 7877 */ { MAD_F(0x04c870de) /* 0.298935764 */, 19 },
+ /* 7878 */ { MAD_F(0x04c8a5ed) /* 0.298986366 */, 19 },
+ /* 7879 */ { MAD_F(0x04c8dafd) /* 0.299036970 */, 19 },
+ /* 7880 */ { MAD_F(0x04c9100d) /* 0.299087576 */, 19 },
+ /* 7881 */ { MAD_F(0x04c9451e) /* 0.299138184 */, 19 },
+ /* 7882 */ { MAD_F(0x04c97a30) /* 0.299188794 */, 19 },
+ /* 7883 */ { MAD_F(0x04c9af42) /* 0.299239406 */, 19 },
+ /* 7884 */ { MAD_F(0x04c9e455) /* 0.299290021 */, 19 },
+ /* 7885 */ { MAD_F(0x04ca1968) /* 0.299340638 */, 19 },
+ /* 7886 */ { MAD_F(0x04ca4e7c) /* 0.299391256 */, 19 },
+ /* 7887 */ { MAD_F(0x04ca8391) /* 0.299441877 */, 19 },
+
+ /* 7888 */ { MAD_F(0x04cab8a6) /* 0.299492500 */, 19 },
+ /* 7889 */ { MAD_F(0x04caedbb) /* 0.299543126 */, 19 },
+ /* 7890 */ { MAD_F(0x04cb22d1) /* 0.299593753 */, 19 },
+ /* 7891 */ { MAD_F(0x04cb57e8) /* 0.299644382 */, 19 },
+ /* 7892 */ { MAD_F(0x04cb8d00) /* 0.299695014 */, 19 },
+ /* 7893 */ { MAD_F(0x04cbc217) /* 0.299745648 */, 19 },
+ /* 7894 */ { MAD_F(0x04cbf730) /* 0.299796284 */, 19 },
+ /* 7895 */ { MAD_F(0x04cc2c49) /* 0.299846922 */, 19 },
+ /* 7896 */ { MAD_F(0x04cc6163) /* 0.299897562 */, 19 },
+ /* 7897 */ { MAD_F(0x04cc967d) /* 0.299948204 */, 19 },
+ /* 7898 */ { MAD_F(0x04cccb98) /* 0.299998849 */, 19 },
+ /* 7899 */ { MAD_F(0x04cd00b3) /* 0.300049495 */, 19 },
+ /* 7900 */ { MAD_F(0x04cd35cf) /* 0.300100144 */, 19 },
+ /* 7901 */ { MAD_F(0x04cd6aeb) /* 0.300150795 */, 19 },
+ /* 7902 */ { MAD_F(0x04cda008) /* 0.300201448 */, 19 },
+ /* 7903 */ { MAD_F(0x04cdd526) /* 0.300252103 */, 19 },
+
+ /* 7904 */ { MAD_F(0x04ce0a44) /* 0.300302761 */, 19 },
+ /* 7905 */ { MAD_F(0x04ce3f63) /* 0.300353420 */, 19 },
+ /* 7906 */ { MAD_F(0x04ce7482) /* 0.300404082 */, 19 },
+ /* 7907 */ { MAD_F(0x04cea9a2) /* 0.300454745 */, 19 },
+ /* 7908 */ { MAD_F(0x04cedec3) /* 0.300505411 */, 19 },
+ /* 7909 */ { MAD_F(0x04cf13e4) /* 0.300556079 */, 19 },
+ /* 7910 */ { MAD_F(0x04cf4906) /* 0.300606749 */, 19 },
+ /* 7911 */ { MAD_F(0x04cf7e28) /* 0.300657421 */, 19 },
+ /* 7912 */ { MAD_F(0x04cfb34b) /* 0.300708096 */, 19 },
+ /* 7913 */ { MAD_F(0x04cfe86e) /* 0.300758772 */, 19 },
+ /* 7914 */ { MAD_F(0x04d01d92) /* 0.300809451 */, 19 },
+ /* 7915 */ { MAD_F(0x04d052b6) /* 0.300860132 */, 19 },
+ /* 7916 */ { MAD_F(0x04d087db) /* 0.300910815 */, 19 },
+ /* 7917 */ { MAD_F(0x04d0bd01) /* 0.300961500 */, 19 },
+ /* 7918 */ { MAD_F(0x04d0f227) /* 0.301012187 */, 19 },
+ /* 7919 */ { MAD_F(0x04d1274e) /* 0.301062876 */, 19 },
+
+ /* 7920 */ { MAD_F(0x04d15c76) /* 0.301113568 */, 19 },
+ /* 7921 */ { MAD_F(0x04d1919e) /* 0.301164261 */, 19 },
+ /* 7922 */ { MAD_F(0x04d1c6c6) /* 0.301214957 */, 19 },
+ /* 7923 */ { MAD_F(0x04d1fbef) /* 0.301265655 */, 19 },
+ /* 7924 */ { MAD_F(0x04d23119) /* 0.301316355 */, 19 },
+ /* 7925 */ { MAD_F(0x04d26643) /* 0.301367057 */, 19 },
+ /* 7926 */ { MAD_F(0x04d29b6e) /* 0.301417761 */, 19 },
+ /* 7927 */ { MAD_F(0x04d2d099) /* 0.301468468 */, 19 },
+ /* 7928 */ { MAD_F(0x04d305c5) /* 0.301519176 */, 19 },
+ /* 7929 */ { MAD_F(0x04d33af2) /* 0.301569887 */, 19 },
+ /* 7930 */ { MAD_F(0x04d3701f) /* 0.301620599 */, 19 },
+ /* 7931 */ { MAD_F(0x04d3a54d) /* 0.301671314 */, 19 },
+ /* 7932 */ { MAD_F(0x04d3da7b) /* 0.301722031 */, 19 },
+ /* 7933 */ { MAD_F(0x04d40faa) /* 0.301772751 */, 19 },
+ /* 7934 */ { MAD_F(0x04d444d9) /* 0.301823472 */, 19 },
+ /* 7935 */ { MAD_F(0x04d47a09) /* 0.301874195 */, 19 },
+
+ /* 7936 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 19 },
+ /* 7937 */ { MAD_F(0x04d4e46b) /* 0.301975649 */, 19 },
+ /* 7938 */ { MAD_F(0x04d5199c) /* 0.302026378 */, 19 },
+ /* 7939 */ { MAD_F(0x04d54ecf) /* 0.302077110 */, 19 },
+ /* 7940 */ { MAD_F(0x04d58401) /* 0.302127845 */, 19 },
+ /* 7941 */ { MAD_F(0x04d5b935) /* 0.302178581 */, 19 },
+ /* 7942 */ { MAD_F(0x04d5ee69) /* 0.302229319 */, 19 },
+ /* 7943 */ { MAD_F(0x04d6239d) /* 0.302280060 */, 19 },
+ /* 7944 */ { MAD_F(0x04d658d2) /* 0.302330802 */, 19 },
+ /* 7945 */ { MAD_F(0x04d68e08) /* 0.302381547 */, 19 },
+ /* 7946 */ { MAD_F(0x04d6c33e) /* 0.302432294 */, 19 },
+ /* 7947 */ { MAD_F(0x04d6f875) /* 0.302483043 */, 19 },
+ /* 7948 */ { MAD_F(0x04d72dad) /* 0.302533794 */, 19 },
+ /* 7949 */ { MAD_F(0x04d762e5) /* 0.302584547 */, 19 },
+ /* 7950 */ { MAD_F(0x04d7981d) /* 0.302635303 */, 19 },
+ /* 7951 */ { MAD_F(0x04d7cd56) /* 0.302686060 */, 19 },
+
+ /* 7952 */ { MAD_F(0x04d80290) /* 0.302736820 */, 19 },
+ /* 7953 */ { MAD_F(0x04d837ca) /* 0.302787581 */, 19 },
+ /* 7954 */ { MAD_F(0x04d86d05) /* 0.302838345 */, 19 },
+ /* 7955 */ { MAD_F(0x04d8a240) /* 0.302889111 */, 19 },
+ /* 7956 */ { MAD_F(0x04d8d77c) /* 0.302939879 */, 19 },
+ /* 7957 */ { MAD_F(0x04d90cb9) /* 0.302990650 */, 19 },
+ /* 7958 */ { MAD_F(0x04d941f6) /* 0.303041422 */, 19 },
+ /* 7959 */ { MAD_F(0x04d97734) /* 0.303092197 */, 19 },
+ /* 7960 */ { MAD_F(0x04d9ac72) /* 0.303142973 */, 19 },
+ /* 7961 */ { MAD_F(0x04d9e1b1) /* 0.303193752 */, 19 },
+ /* 7962 */ { MAD_F(0x04da16f0) /* 0.303244533 */, 19 },
+ /* 7963 */ { MAD_F(0x04da4c30) /* 0.303295316 */, 19 },
+ /* 7964 */ { MAD_F(0x04da8171) /* 0.303346101 */, 19 },
+ /* 7965 */ { MAD_F(0x04dab6b2) /* 0.303396889 */, 19 },
+ /* 7966 */ { MAD_F(0x04daebf4) /* 0.303447678 */, 19 },
+ /* 7967 */ { MAD_F(0x04db2136) /* 0.303498469 */, 19 },
+
+ /* 7968 */ { MAD_F(0x04db5679) /* 0.303549263 */, 19 },
+ /* 7969 */ { MAD_F(0x04db8bbc) /* 0.303600059 */, 19 },
+ /* 7970 */ { MAD_F(0x04dbc100) /* 0.303650857 */, 19 },
+ /* 7971 */ { MAD_F(0x04dbf644) /* 0.303701657 */, 19 },
+ /* 7972 */ { MAD_F(0x04dc2b8a) /* 0.303752459 */, 19 },
+ /* 7973 */ { MAD_F(0x04dc60cf) /* 0.303803263 */, 19 },
+ /* 7974 */ { MAD_F(0x04dc9616) /* 0.303854070 */, 19 },
+ /* 7975 */ { MAD_F(0x04dccb5c) /* 0.303904878 */, 19 },
+ /* 7976 */ { MAD_F(0x04dd00a4) /* 0.303955689 */, 19 },
+ /* 7977 */ { MAD_F(0x04dd35ec) /* 0.304006502 */, 19 },
+ /* 7978 */ { MAD_F(0x04dd6b34) /* 0.304057317 */, 19 },
+ /* 7979 */ { MAD_F(0x04dda07d) /* 0.304108134 */, 19 },
+ /* 7980 */ { MAD_F(0x04ddd5c7) /* 0.304158953 */, 19 },
+ /* 7981 */ { MAD_F(0x04de0b11) /* 0.304209774 */, 19 },
+ /* 7982 */ { MAD_F(0x04de405c) /* 0.304260597 */, 19 },
+ /* 7983 */ { MAD_F(0x04de75a7) /* 0.304311423 */, 19 },
+
+ /* 7984 */ { MAD_F(0x04deaaf3) /* 0.304362251 */, 19 },
+ /* 7985 */ { MAD_F(0x04dee040) /* 0.304413080 */, 19 },
+ /* 7986 */ { MAD_F(0x04df158d) /* 0.304463912 */, 19 },
+ /* 7987 */ { MAD_F(0x04df4adb) /* 0.304514746 */, 19 },
+ /* 7988 */ { MAD_F(0x04df8029) /* 0.304565582 */, 19 },
+ /* 7989 */ { MAD_F(0x04dfb578) /* 0.304616421 */, 19 },
+ /* 7990 */ { MAD_F(0x04dfeac7) /* 0.304667261 */, 19 },
+ /* 7991 */ { MAD_F(0x04e02017) /* 0.304718103 */, 19 },
+ /* 7992 */ { MAD_F(0x04e05567) /* 0.304768948 */, 19 },
+ /* 7993 */ { MAD_F(0x04e08ab8) /* 0.304819795 */, 19 },
+ /* 7994 */ { MAD_F(0x04e0c00a) /* 0.304870644 */, 19 },
+ /* 7995 */ { MAD_F(0x04e0f55c) /* 0.304921495 */, 19 },
+ /* 7996 */ { MAD_F(0x04e12aaf) /* 0.304972348 */, 19 },
+ /* 7997 */ { MAD_F(0x04e16002) /* 0.305023203 */, 19 },
+ /* 7998 */ { MAD_F(0x04e19556) /* 0.305074060 */, 19 },
+ /* 7999 */ { MAD_F(0x04e1caab) /* 0.305124920 */, 19 },
+
+ /* 8000 */ { MAD_F(0x04e20000) /* 0.305175781 */, 19 },
+ /* 8001 */ { MAD_F(0x04e23555) /* 0.305226645 */, 19 },
+ /* 8002 */ { MAD_F(0x04e26aac) /* 0.305277511 */, 19 },
+ /* 8003 */ { MAD_F(0x04e2a002) /* 0.305328379 */, 19 },
+ /* 8004 */ { MAD_F(0x04e2d55a) /* 0.305379249 */, 19 },
+ /* 8005 */ { MAD_F(0x04e30ab2) /* 0.305430121 */, 19 },
+ /* 8006 */ { MAD_F(0x04e3400a) /* 0.305480995 */, 19 },
+ /* 8007 */ { MAD_F(0x04e37563) /* 0.305531872 */, 19 },
+ /* 8008 */ { MAD_F(0x04e3aabd) /* 0.305582750 */, 19 },
+ /* 8009 */ { MAD_F(0x04e3e017) /* 0.305633631 */, 19 },
+ /* 8010 */ { MAD_F(0x04e41572) /* 0.305684513 */, 19 },
+ /* 8011 */ { MAD_F(0x04e44acd) /* 0.305735398 */, 19 },
+ /* 8012 */ { MAD_F(0x04e48029) /* 0.305786285 */, 19 },
+ /* 8013 */ { MAD_F(0x04e4b585) /* 0.305837174 */, 19 },
+ /* 8014 */ { MAD_F(0x04e4eae2) /* 0.305888066 */, 19 },
+ /* 8015 */ { MAD_F(0x04e52040) /* 0.305938959 */, 19 },
+
+ /* 8016 */ { MAD_F(0x04e5559e) /* 0.305989854 */, 19 },
+ /* 8017 */ { MAD_F(0x04e58afd) /* 0.306040752 */, 19 },
+ /* 8018 */ { MAD_F(0x04e5c05c) /* 0.306091652 */, 19 },
+ /* 8019 */ { MAD_F(0x04e5f5bc) /* 0.306142554 */, 19 },
+ /* 8020 */ { MAD_F(0x04e62b1c) /* 0.306193457 */, 19 },
+ /* 8021 */ { MAD_F(0x04e6607d) /* 0.306244364 */, 19 },
+ /* 8022 */ { MAD_F(0x04e695df) /* 0.306295272 */, 19 },
+ /* 8023 */ { MAD_F(0x04e6cb41) /* 0.306346182 */, 19 },
+ /* 8024 */ { MAD_F(0x04e700a3) /* 0.306397094 */, 19 },
+ /* 8025 */ { MAD_F(0x04e73607) /* 0.306448009 */, 19 },
+ /* 8026 */ { MAD_F(0x04e76b6b) /* 0.306498925 */, 19 },
+ /* 8027 */ { MAD_F(0x04e7a0cf) /* 0.306549844 */, 19 },
+ /* 8028 */ { MAD_F(0x04e7d634) /* 0.306600765 */, 19 },
+ /* 8029 */ { MAD_F(0x04e80b99) /* 0.306651688 */, 19 },
+ /* 8030 */ { MAD_F(0x04e84100) /* 0.306702613 */, 19 },
+ /* 8031 */ { MAD_F(0x04e87666) /* 0.306753540 */, 19 },
+
+ /* 8032 */ { MAD_F(0x04e8abcd) /* 0.306804470 */, 19 },
+ /* 8033 */ { MAD_F(0x04e8e135) /* 0.306855401 */, 19 },
+ /* 8034 */ { MAD_F(0x04e9169e) /* 0.306906334 */, 19 },
+ /* 8035 */ { MAD_F(0x04e94c07) /* 0.306957270 */, 19 },
+ /* 8036 */ { MAD_F(0x04e98170) /* 0.307008208 */, 19 },
+ /* 8037 */ { MAD_F(0x04e9b6da) /* 0.307059148 */, 19 },
+ /* 8038 */ { MAD_F(0x04e9ec45) /* 0.307110090 */, 19 },
+ /* 8039 */ { MAD_F(0x04ea21b0) /* 0.307161034 */, 19 },
+ /* 8040 */ { MAD_F(0x04ea571c) /* 0.307211980 */, 19 },
+ /* 8041 */ { MAD_F(0x04ea8c88) /* 0.307262928 */, 19 },
+ /* 8042 */ { MAD_F(0x04eac1f5) /* 0.307313879 */, 19 },
+ /* 8043 */ { MAD_F(0x04eaf762) /* 0.307364831 */, 19 },
+ /* 8044 */ { MAD_F(0x04eb2cd0) /* 0.307415786 */, 19 },
+ /* 8045 */ { MAD_F(0x04eb623f) /* 0.307466743 */, 19 },
+ /* 8046 */ { MAD_F(0x04eb97ae) /* 0.307517702 */, 19 },
+ /* 8047 */ { MAD_F(0x04ebcd1e) /* 0.307568663 */, 19 },
+
+ /* 8048 */ { MAD_F(0x04ec028e) /* 0.307619626 */, 19 },
+ /* 8049 */ { MAD_F(0x04ec37ff) /* 0.307670591 */, 19 },
+ /* 8050 */ { MAD_F(0x04ec6d71) /* 0.307721558 */, 19 },
+ /* 8051 */ { MAD_F(0x04eca2e3) /* 0.307772528 */, 19 },
+ /* 8052 */ { MAD_F(0x04ecd855) /* 0.307823499 */, 19 },
+ /* 8053 */ { MAD_F(0x04ed0dc8) /* 0.307874473 */, 19 },
+ /* 8054 */ { MAD_F(0x04ed433c) /* 0.307925449 */, 19 },
+ /* 8055 */ { MAD_F(0x04ed78b0) /* 0.307976426 */, 19 },
+ /* 8056 */ { MAD_F(0x04edae25) /* 0.308027406 */, 19 },
+ /* 8057 */ { MAD_F(0x04ede39a) /* 0.308078389 */, 19 },
+ /* 8058 */ { MAD_F(0x04ee1910) /* 0.308129373 */, 19 },
+ /* 8059 */ { MAD_F(0x04ee4e87) /* 0.308180359 */, 19 },
+ /* 8060 */ { MAD_F(0x04ee83fe) /* 0.308231347 */, 19 },
+ /* 8061 */ { MAD_F(0x04eeb976) /* 0.308282338 */, 19 },
+ /* 8062 */ { MAD_F(0x04eeeeee) /* 0.308333331 */, 19 },
+ /* 8063 */ { MAD_F(0x04ef2467) /* 0.308384325 */, 19 },
+
+ /* 8064 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 19 },
+ /* 8065 */ { MAD_F(0x04ef8f5a) /* 0.308486321 */, 19 },
+ /* 8066 */ { MAD_F(0x04efc4d5) /* 0.308537322 */, 19 },
+ /* 8067 */ { MAD_F(0x04effa50) /* 0.308588325 */, 19 },
+ /* 8068 */ { MAD_F(0x04f02fcb) /* 0.308639331 */, 19 },
+ /* 8069 */ { MAD_F(0x04f06547) /* 0.308690338 */, 19 },
+ /* 8070 */ { MAD_F(0x04f09ac4) /* 0.308741348 */, 19 },
+ /* 8071 */ { MAD_F(0x04f0d041) /* 0.308792359 */, 19 },
+ /* 8072 */ { MAD_F(0x04f105bf) /* 0.308843373 */, 19 },
+ /* 8073 */ { MAD_F(0x04f13b3e) /* 0.308894389 */, 19 },
+ /* 8074 */ { MAD_F(0x04f170bd) /* 0.308945407 */, 19 },
+ /* 8075 */ { MAD_F(0x04f1a63c) /* 0.308996427 */, 19 },
+ /* 8076 */ { MAD_F(0x04f1dbbd) /* 0.309047449 */, 19 },
+ /* 8077 */ { MAD_F(0x04f2113d) /* 0.309098473 */, 19 },
+ /* 8078 */ { MAD_F(0x04f246bf) /* 0.309149499 */, 19 },
+ /* 8079 */ { MAD_F(0x04f27c40) /* 0.309200528 */, 19 },
+
+ /* 8080 */ { MAD_F(0x04f2b1c3) /* 0.309251558 */, 19 },
+ /* 8081 */ { MAD_F(0x04f2e746) /* 0.309302591 */, 19 },
+ /* 8082 */ { MAD_F(0x04f31cc9) /* 0.309353626 */, 19 },
+ /* 8083 */ { MAD_F(0x04f3524d) /* 0.309404663 */, 19 },
+ /* 8084 */ { MAD_F(0x04f387d2) /* 0.309455702 */, 19 },
+ /* 8085 */ { MAD_F(0x04f3bd57) /* 0.309506743 */, 19 },
+ /* 8086 */ { MAD_F(0x04f3f2dd) /* 0.309557786 */, 19 },
+ /* 8087 */ { MAD_F(0x04f42864) /* 0.309608831 */, 19 },
+ /* 8088 */ { MAD_F(0x04f45dea) /* 0.309659879 */, 19 },
+ /* 8089 */ { MAD_F(0x04f49372) /* 0.309710928 */, 19 },
+ /* 8090 */ { MAD_F(0x04f4c8fa) /* 0.309761980 */, 19 },
+ /* 8091 */ { MAD_F(0x04f4fe83) /* 0.309813033 */, 19 },
+ /* 8092 */ { MAD_F(0x04f5340c) /* 0.309864089 */, 19 },
+ /* 8093 */ { MAD_F(0x04f56996) /* 0.309915147 */, 19 },
+ /* 8094 */ { MAD_F(0x04f59f20) /* 0.309966207 */, 19 },
+ /* 8095 */ { MAD_F(0x04f5d4ab) /* 0.310017269 */, 19 },
+
+ /* 8096 */ { MAD_F(0x04f60a36) /* 0.310068333 */, 19 },
+ /* 8097 */ { MAD_F(0x04f63fc2) /* 0.310119400 */, 19 },
+ /* 8098 */ { MAD_F(0x04f6754f) /* 0.310170468 */, 19 },
+ /* 8099 */ { MAD_F(0x04f6aadc) /* 0.310221539 */, 19 },
+ /* 8100 */ { MAD_F(0x04f6e06a) /* 0.310272611 */, 19 },
+ /* 8101 */ { MAD_F(0x04f715f8) /* 0.310323686 */, 19 },
+ /* 8102 */ { MAD_F(0x04f74b87) /* 0.310374763 */, 19 },
+ /* 8103 */ { MAD_F(0x04f78116) /* 0.310425842 */, 19 },
+ /* 8104 */ { MAD_F(0x04f7b6a6) /* 0.310476923 */, 19 },
+ /* 8105 */ { MAD_F(0x04f7ec37) /* 0.310528006 */, 19 },
+ /* 8106 */ { MAD_F(0x04f821c8) /* 0.310579091 */, 19 },
+ /* 8107 */ { MAD_F(0x04f85759) /* 0.310630179 */, 19 },
+ /* 8108 */ { MAD_F(0x04f88cec) /* 0.310681268 */, 19 },
+ /* 8109 */ { MAD_F(0x04f8c27e) /* 0.310732360 */, 19 },
+ /* 8110 */ { MAD_F(0x04f8f812) /* 0.310783453 */, 19 },
+ /* 8111 */ { MAD_F(0x04f92da6) /* 0.310834549 */, 19 },
+
+ /* 8112 */ { MAD_F(0x04f9633a) /* 0.310885647 */, 19 },
+ /* 8113 */ { MAD_F(0x04f998cf) /* 0.310936747 */, 19 },
+ /* 8114 */ { MAD_F(0x04f9ce65) /* 0.310987849 */, 19 },
+ /* 8115 */ { MAD_F(0x04fa03fb) /* 0.311038953 */, 19 },
+ /* 8116 */ { MAD_F(0x04fa3992) /* 0.311090059 */, 19 },
+ /* 8117 */ { MAD_F(0x04fa6f29) /* 0.311141168 */, 19 },
+ /* 8118 */ { MAD_F(0x04faa4c1) /* 0.311192278 */, 19 },
+ /* 8119 */ { MAD_F(0x04fada59) /* 0.311243390 */, 19 },
+ /* 8120 */ { MAD_F(0x04fb0ff2) /* 0.311294505 */, 19 },
+ /* 8121 */ { MAD_F(0x04fb458c) /* 0.311345622 */, 19 },
+ /* 8122 */ { MAD_F(0x04fb7b26) /* 0.311396741 */, 19 },
+ /* 8123 */ { MAD_F(0x04fbb0c1) /* 0.311447862 */, 19 },
+ /* 8124 */ { MAD_F(0x04fbe65c) /* 0.311498985 */, 19 },
+ /* 8125 */ { MAD_F(0x04fc1bf8) /* 0.311550110 */, 19 },
+ /* 8126 */ { MAD_F(0x04fc5194) /* 0.311601237 */, 19 },
+ /* 8127 */ { MAD_F(0x04fc8731) /* 0.311652366 */, 19 },
+
+ /* 8128 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 19 },
+ /* 8129 */ { MAD_F(0x04fcf26c) /* 0.311754631 */, 19 },
+ /* 8130 */ { MAD_F(0x04fd280b) /* 0.311805767 */, 19 },
+ /* 8131 */ { MAD_F(0x04fd5daa) /* 0.311856905 */, 19 },
+ /* 8132 */ { MAD_F(0x04fd934a) /* 0.311908044 */, 19 },
+ /* 8133 */ { MAD_F(0x04fdc8ea) /* 0.311959186 */, 19 },
+ /* 8134 */ { MAD_F(0x04fdfe8b) /* 0.312010330 */, 19 },
+ /* 8135 */ { MAD_F(0x04fe342c) /* 0.312061476 */, 19 },
+ /* 8136 */ { MAD_F(0x04fe69ce) /* 0.312112625 */, 19 },
+ /* 8137 */ { MAD_F(0x04fe9f71) /* 0.312163775 */, 19 },
+ /* 8138 */ { MAD_F(0x04fed514) /* 0.312214927 */, 19 },
+ /* 8139 */ { MAD_F(0x04ff0ab8) /* 0.312266082 */, 19 },
+ /* 8140 */ { MAD_F(0x04ff405c) /* 0.312317238 */, 19 },
+ /* 8141 */ { MAD_F(0x04ff7601) /* 0.312368397 */, 19 },
+ /* 8142 */ { MAD_F(0x04ffaba6) /* 0.312419558 */, 19 },
+ /* 8143 */ { MAD_F(0x04ffe14c) /* 0.312470720 */, 19 },
+
+ /* 8144 */ { MAD_F(0x050016f3) /* 0.312521885 */, 19 },
+ /* 8145 */ { MAD_F(0x05004c9a) /* 0.312573052 */, 19 },
+ /* 8146 */ { MAD_F(0x05008241) /* 0.312624222 */, 19 },
+ /* 8147 */ { MAD_F(0x0500b7e9) /* 0.312675393 */, 19 },
+ /* 8148 */ { MAD_F(0x0500ed92) /* 0.312726566 */, 19 },
+ /* 8149 */ { MAD_F(0x0501233b) /* 0.312777742 */, 19 },
+ /* 8150 */ { MAD_F(0x050158e5) /* 0.312828919 */, 19 },
+ /* 8151 */ { MAD_F(0x05018e90) /* 0.312880099 */, 19 },
+ /* 8152 */ { MAD_F(0x0501c43b) /* 0.312931280 */, 19 },
+ /* 8153 */ { MAD_F(0x0501f9e6) /* 0.312982464 */, 19 },
+ /* 8154 */ { MAD_F(0x05022f92) /* 0.313033650 */, 19 },
+ /* 8155 */ { MAD_F(0x0502653f) /* 0.313084838 */, 19 },
+ /* 8156 */ { MAD_F(0x05029aec) /* 0.313136028 */, 19 },
+ /* 8157 */ { MAD_F(0x0502d09a) /* 0.313187220 */, 19 },
+ /* 8158 */ { MAD_F(0x05030648) /* 0.313238414 */, 19 },
+ /* 8159 */ { MAD_F(0x05033bf7) /* 0.313289611 */, 19 },
+
+ /* 8160 */ { MAD_F(0x050371a7) /* 0.313340809 */, 19 },
+ /* 8161 */ { MAD_F(0x0503a757) /* 0.313392010 */, 19 },
+ /* 8162 */ { MAD_F(0x0503dd07) /* 0.313443212 */, 19 },
+ /* 8163 */ { MAD_F(0x050412b9) /* 0.313494417 */, 19 },
+ /* 8164 */ { MAD_F(0x0504486a) /* 0.313545624 */, 19 },
+ /* 8165 */ { MAD_F(0x05047e1d) /* 0.313596833 */, 19 },
+ /* 8166 */ { MAD_F(0x0504b3cf) /* 0.313648044 */, 19 },
+ /* 8167 */ { MAD_F(0x0504e983) /* 0.313699257 */, 19 },
+ /* 8168 */ { MAD_F(0x05051f37) /* 0.313750472 */, 19 },
+ /* 8169 */ { MAD_F(0x050554eb) /* 0.313801689 */, 19 },
+ /* 8170 */ { MAD_F(0x05058aa0) /* 0.313852909 */, 19 },
+ /* 8171 */ { MAD_F(0x0505c056) /* 0.313904130 */, 19 },
+ /* 8172 */ { MAD_F(0x0505f60c) /* 0.313955354 */, 19 },
+ /* 8173 */ { MAD_F(0x05062bc3) /* 0.314006579 */, 19 },
+ /* 8174 */ { MAD_F(0x0506617a) /* 0.314057807 */, 19 },
+ /* 8175 */ { MAD_F(0x05069732) /* 0.314109037 */, 19 },
+
+ /* 8176 */ { MAD_F(0x0506cceb) /* 0.314160269 */, 19 },
+ /* 8177 */ { MAD_F(0x050702a4) /* 0.314211502 */, 19 },
+ /* 8178 */ { MAD_F(0x0507385d) /* 0.314262739 */, 19 },
+ /* 8179 */ { MAD_F(0x05076e17) /* 0.314313977 */, 19 },
+ /* 8180 */ { MAD_F(0x0507a3d2) /* 0.314365217 */, 19 },
+ /* 8181 */ { MAD_F(0x0507d98d) /* 0.314416459 */, 19 },
+ /* 8182 */ { MAD_F(0x05080f49) /* 0.314467704 */, 19 },
+ /* 8183 */ { MAD_F(0x05084506) /* 0.314518950 */, 19 },
+ /* 8184 */ { MAD_F(0x05087ac2) /* 0.314570199 */, 19 },
+ /* 8185 */ { MAD_F(0x0508b080) /* 0.314621449 */, 19 },
+ /* 8186 */ { MAD_F(0x0508e63e) /* 0.314672702 */, 19 },
+ /* 8187 */ { MAD_F(0x05091bfd) /* 0.314723957 */, 19 },
+ /* 8188 */ { MAD_F(0x050951bc) /* 0.314775214 */, 19 },
+ /* 8189 */ { MAD_F(0x0509877c) /* 0.314826473 */, 19 },
+ /* 8190 */ { MAD_F(0x0509bd3c) /* 0.314877734 */, 19 },
+ /* 8191 */ { MAD_F(0x0509f2fd) /* 0.314928997 */, 19 },
+
+ /* 8192 */ { MAD_F(0x050a28be) /* 0.314980262 */, 19 },
+ /* 8193 */ { MAD_F(0x050a5e80) /* 0.315031530 */, 19 },
+ /* 8194 */ { MAD_F(0x050a9443) /* 0.315082799 */, 19 },
+ /* 8195 */ { MAD_F(0x050aca06) /* 0.315134071 */, 19 },
+ /* 8196 */ { MAD_F(0x050affc9) /* 0.315185344 */, 19 },
+ /* 8197 */ { MAD_F(0x050b358e) /* 0.315236620 */, 19 },
+ /* 8198 */ { MAD_F(0x050b6b52) /* 0.315287898 */, 19 },
+ /* 8199 */ { MAD_F(0x050ba118) /* 0.315339178 */, 19 },
+ /* 8200 */ { MAD_F(0x050bd6de) /* 0.315390460 */, 19 },
+ /* 8201 */ { MAD_F(0x050c0ca4) /* 0.315441744 */, 19 },
+ /* 8202 */ { MAD_F(0x050c426b) /* 0.315493030 */, 19 },
+ /* 8203 */ { MAD_F(0x050c7833) /* 0.315544318 */, 19 },
+ /* 8204 */ { MAD_F(0x050cadfb) /* 0.315595608 */, 19 },
+ /* 8205 */ { MAD_F(0x050ce3c4) /* 0.315646901 */, 19 },
+ /* 8206 */ { MAD_F(0x050d198d) /* 0.315698195 */, 19 }
diff --git a/core/multimedia/opieplayer/libmad/sf_table.dat b/core/multimedia/opieplayer/libmad/sf_table.dat
new file mode 100644
index 0000000..18e6202
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/sf_table.dat
@@ -0,0 +1,100 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+/*
+ * These are the scalefactor values for Layer I and Layer II.
+ * The values are from Table B.1 of ISO/IEC 11172-3.
+ *
+ * There is some error introduced by the 32-bit fixed-point representation;
+ * the amount of error is shown. For 16-bit PCM output, this shouldn't be
+ * too much of a problem.
+ */
+
+ MAD_F(0x20000000), /* 2.000000000000 => 2.000000000000, e 0.000000000000 */
+ MAD_F(0x1965fea5), /* 1.587401051968 => 1.587401051074, e 0.000000000894 */
+ MAD_F(0x1428a2fa), /* 1.259921049895 => 1.259921051562, e -0.000000001667 */
+ MAD_F(0x10000000), /* 1.000000000000 => 1.000000000000, e 0.000000000000 */
+ MAD_F(0x0cb2ff53), /* 0.793700525984 => 0.793700527400, e -0.000000001416 */
+ MAD_F(0x0a14517d), /* 0.629960524947 => 0.629960525781, e -0.000000000833 */
+ MAD_F(0x08000000), /* 0.500000000000 => 0.500000000000, e 0.000000000000 */
+ MAD_F(0x06597fa9), /* 0.396850262992 => 0.396850261837, e 0.000000001155 */
+
+ MAD_F(0x050a28be), /* 0.314980262474 => 0.314980261028, e 0.000000001446 */
+ MAD_F(0x04000000), /* 0.250000000000 => 0.250000000000, e 0.000000000000 */
+ MAD_F(0x032cbfd5), /* 0.198425131496 => 0.198425132781, e -0.000000001285 */
+ MAD_F(0x0285145f), /* 0.157490131237 => 0.157490130514, e 0.000000000723 */
+ MAD_F(0x02000000), /* 0.125000000000 => 0.125000000000, e 0.000000000000 */
+ MAD_F(0x01965fea), /* 0.099212565748 => 0.099212564528, e 0.000000001220 */
+ MAD_F(0x01428a30), /* 0.078745065618 => 0.078745067120, e -0.000000001501 */
+ MAD_F(0x01000000), /* 0.062500000000 => 0.062500000000, e 0.000000000000 */
+
+ MAD_F(0x00cb2ff5), /* 0.049606282874 => 0.049606282264, e 0.000000000610 */
+ MAD_F(0x00a14518), /* 0.039372532809 => 0.039372533560, e -0.000000000751 */
+ MAD_F(0x00800000), /* 0.031250000000 => 0.031250000000, e 0.000000000000 */
+ MAD_F(0x006597fb), /* 0.024803141437 => 0.024803142995, e -0.000000001558 */
+ MAD_F(0x0050a28c), /* 0.019686266405 => 0.019686266780, e -0.000000000375 */
+ MAD_F(0x00400000), /* 0.015625000000 => 0.015625000000, e 0.000000000000 */
+ MAD_F(0x0032cbfd), /* 0.012401570719 => 0.012401569635, e 0.000000001084 */
+ MAD_F(0x00285146), /* 0.009843133202 => 0.009843133390, e -0.000000000188 */
+
+ MAD_F(0x00200000), /* 0.007812500000 => 0.007812500000, e 0.000000000000 */
+ MAD_F(0x001965ff), /* 0.006200785359 => 0.006200786680, e -0.000000001321 */
+ MAD_F(0x001428a3), /* 0.004921566601 => 0.004921566695, e -0.000000000094 */
+ MAD_F(0x00100000), /* 0.003906250000 => 0.003906250000, e 0.000000000000 */
+ MAD_F(0x000cb2ff), /* 0.003100392680 => 0.003100391477, e 0.000000001202 */
+ MAD_F(0x000a1451), /* 0.002460783301 => 0.002460781485, e 0.000000001816 */
+ MAD_F(0x00080000), /* 0.001953125000 => 0.001953125000, e 0.000000000000 */
+ MAD_F(0x00065980), /* 0.001550196340 => 0.001550197601, e -0.000000001262 */
+
+ MAD_F(0x00050a29), /* 0.001230391650 => 0.001230392605, e -0.000000000955 */
+ MAD_F(0x00040000), /* 0.000976562500 => 0.000976562500, e 0.000000000000 */
+ MAD_F(0x00032cc0), /* 0.000775098170 => 0.000775098801, e -0.000000000631 */
+ MAD_F(0x00028514), /* 0.000615195825 => 0.000615194440, e 0.000000001385 */
+ MAD_F(0x00020000), /* 0.000488281250 => 0.000488281250, e 0.000000000000 */
+ MAD_F(0x00019660), /* 0.000387549085 => 0.000387549400, e -0.000000000315 */
+ MAD_F(0x0001428a), /* 0.000307597913 => 0.000307597220, e 0.000000000693 */
+ MAD_F(0x00010000), /* 0.000244140625 => 0.000244140625, e 0.000000000000 */
+
+ MAD_F(0x0000cb30), /* 0.000193774542 => 0.000193774700, e -0.000000000158 */
+ MAD_F(0x0000a145), /* 0.000153798956 => 0.000153798610, e 0.000000000346 */
+ MAD_F(0x00008000), /* 0.000122070313 => 0.000122070313, e 0.000000000000 */
+ MAD_F(0x00006598), /* 0.000096887271 => 0.000096887350, e -0.000000000079 */
+ MAD_F(0x000050a3), /* 0.000076899478 => 0.000076901168, e -0.000000001689 */
+ MAD_F(0x00004000), /* 0.000061035156 => 0.000061035156, e 0.000000000000 */
+ MAD_F(0x000032cc), /* 0.000048443636 => 0.000048443675, e -0.000000000039 */
+ MAD_F(0x00002851), /* 0.000038449739 => 0.000038448721, e 0.000000001018 */
+
+ MAD_F(0x00002000), /* 0.000030517578 => 0.000030517578, e 0.000000000000 */
+ MAD_F(0x00001966), /* 0.000024221818 => 0.000024221838, e -0.000000000020 */
+ MAD_F(0x00001429), /* 0.000019224870 => 0.000019226223, e -0.000000001354 */
+ MAD_F(0x00001000), /* 0.000015258789 => 0.000015258789, e -0.000000000000 */
+ MAD_F(0x00000cb3), /* 0.000012110909 => 0.000012110919, e -0.000000000010 */
+ MAD_F(0x00000a14), /* 0.000009612435 => 0.000009611249, e 0.000000001186 */
+ MAD_F(0x00000800), /* 0.000007629395 => 0.000007629395, e -0.000000000000 */
+ MAD_F(0x00000659), /* 0.000006055454 => 0.000006053597, e 0.000000001858 */
+
+ MAD_F(0x0000050a), /* 0.000004806217 => 0.000004805624, e 0.000000000593 */
+ MAD_F(0x00000400), /* 0.000003814697 => 0.000003814697, e 0.000000000000 */
+ MAD_F(0x0000032d), /* 0.000003027727 => 0.000003028661, e -0.000000000934 */
+ MAD_F(0x00000285), /* 0.000002403109 => 0.000002402812, e 0.000000000296 */
+ MAD_F(0x00000200), /* 0.000001907349 => 0.000001907349, e -0.000000000000 */
+ MAD_F(0x00000196), /* 0.000001513864 => 0.000001512468, e 0.000000001396 */
+ MAD_F(0x00000143) /* 0.000001201554 => 0.000001203269, e -0.000000001714 */
diff --git a/core/multimedia/opieplayer/libmad/stream.c b/core/multimedia/opieplayer/libmad/stream.c
new file mode 100644
index 0000000..dea7b8e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/stream.c
@@ -0,0 +1,123 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include <stdlib.h>
+
+# include "bit.h"
+# include "stream.h"
+
+/*
+ * NAME: stream->init()
+ * DESCRIPTION: initialize stream struct
+ */
+void mad_stream_init(struct mad_stream *stream)
+{
+ stream->buffer = 0;
+ stream->bufend = 0;
+ stream->skiplen = 0;
+
+ stream->sync = 0;
+ stream->freerate = 0;
+
+ stream->this_frame = 0;
+ stream->next_frame = 0;
+ mad_bit_init(&stream->ptr, 0);
+
+ mad_bit_init(&stream->anc_ptr, 0);
+ stream->anc_bitlen = 0;
+
+ stream->main_data = 0;
+ stream->md_len = 0;
+
+ stream->options = 0;
+ stream->error = 0;
+}
+
+/*
+ * NAME: stream->finish()
+ * DESCRIPTION: deallocate any dynamic memory associated with stream
+ */
+void mad_stream_finish(struct mad_stream *stream)
+{
+ if (stream->main_data) {
+ free(stream->main_data);
+ stream->main_data = 0;
+ }
+
+ mad_bit_finish(&stream->anc_ptr);
+ mad_bit_finish(&stream->ptr);
+}
+
+/*
+ * NAME: stream->buffer()
+ * DESCRIPTION: set stream buffer pointers
+ */
+void mad_stream_buffer(struct mad_stream *stream,
+ unsigned char const *buffer, unsigned long length)
+{
+ stream->buffer = buffer;
+ stream->bufend = buffer + length;
+
+ stream->this_frame = buffer;
+ stream->next_frame = buffer;
+
+ stream->sync = 1;
+
+ mad_bit_init(&stream->ptr, buffer);
+}
+
+/*
+ * NAME: stream->skip()
+ * DESCRIPTION: arrange to skip bytes before the next frame
+ */
+void mad_stream_skip(struct mad_stream *stream, unsigned long length)
+{
+ stream->skiplen += length;
+}
+
+/*
+ * NAME: stream->sync()
+ * DESCRIPTION: locate the next stream sync word
+ */
+int mad_stream_sync(struct mad_stream *stream)
+{
+ register unsigned char const *ptr, *end;
+
+ ptr = mad_bit_nextbyte(&stream->ptr);
+ end = stream->bufend;
+
+ while (ptr < end - 1 &&
+ !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0))
+ ++ptr;
+
+ if (end - ptr < MAD_BUFFER_GUARD)
+ return -1;
+
+ mad_bit_init(&stream->ptr, ptr);
+
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmad/stream.h b/core/multimedia/opieplayer/libmad/stream.h
new file mode 100644
index 0000000..cf3280e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/stream.h
@@ -0,0 +1,102 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_STREAM_H
+# define LIBMAD_STREAM_H
+
+# include "bit.h"
+
+# define MAD_BUFFER_GUARD 8
+# define MAD_BUFFER_MDLEN (511 + 2048 + MAD_BUFFER_GUARD)
+
+enum mad_error {
+ MAD_ERROR_BUFLEN = 0x0001, /* input buffer too small (or EOF) */
+ MAD_ERROR_BUFPTR = 0x0002, /* invalid (null) buffer pointer */
+
+ MAD_ERROR_NOMEM = 0x0031, /* not enough memory */
+
+ MAD_ERROR_LOSTSYNC = 0x0101, /* lost synchronization */
+ MAD_ERROR_BADLAYER = 0x0102, /* reserved header layer value */
+ MAD_ERROR_BADBITRATE = 0x0103, /* forbidden bitrate value */
+ MAD_ERROR_BADSAMPLERATE = 0x0104, /* reserved sample frequency value */
+ MAD_ERROR_BADEMPHASIS = 0x0105, /* reserved emphasis value */
+
+ MAD_ERROR_BADCRC = 0x0201, /* CRC check failed */
+ MAD_ERROR_BADBITALLOC = 0x0211, /* forbidden bit allocation value */
+ MAD_ERROR_BADSCALEFACTOR = 0x0221, /* bad scalefactor index */
+ MAD_ERROR_BADFRAMELEN = 0x0231, /* bad frame length */
+ MAD_ERROR_BADBIGVALUES = 0x0232, /* bad big_values count */
+ MAD_ERROR_BADBLOCKTYPE = 0x0233, /* reserved block_type */
+ MAD_ERROR_BADSCFSI = 0x0234, /* bad scalefactor selection info */
+ MAD_ERROR_BADDATAPTR = 0x0235, /* bad main_data_begin pointer */
+ MAD_ERROR_BADPART3LEN = 0x0236, /* bad audio data length */
+ MAD_ERROR_BADHUFFTABLE = 0x0237, /* bad Huffman table select */
+ MAD_ERROR_BADHUFFDATA = 0x0238, /* Huffman data overrun */
+ MAD_ERROR_BADSTEREO = 0x0239 /* incompatible block_type for JS */
+};
+
+# define MAD_RECOVERABLE(error) ((error) & 0xff00)
+
+struct mad_stream {
+ unsigned char const *buffer; /* input bitstream buffer */
+ unsigned char const *bufend; /* end of buffer */
+ unsigned long skiplen; /* bytes to skip before next frame */
+
+ int sync; /* stream sync found */
+ unsigned long freerate; /* free bitrate (fixed) */
+
+ unsigned char const *this_frame; /* start of current frame */
+ unsigned char const *next_frame; /* start of next frame */
+ struct mad_bitptr ptr; /* current processing bit pointer */
+
+ struct mad_bitptr anc_ptr; /* ancillary bits pointer */
+ unsigned int anc_bitlen; /* number of ancillary bits */
+
+ unsigned char (*main_data)[MAD_BUFFER_MDLEN];
+ /* Layer III main_data() */
+ unsigned int md_len; /* bytes in main_data */
+
+ int options; /* decoding options (see below) */
+ enum mad_error error; /* error code (see above) */
+};
+
+enum {
+ MAD_OPTION_IGNORECRC = 0x0001, /* ignore CRC errors */
+ MAD_OPTION_HALFSAMPLERATE = 0x0002, /* generate PCM at 1/2 sample rate */
+# if 0 /* not yet implemented */
+ MAD_OPTION_LEFTCHANNEL = 0x0010, /* decode left channel only */
+ MAD_OPTION_RIGHTCHANNEL = 0x0020, /* decode right channel only */
+ MAD_OPTION_SINGLECHANNEL = 0x0030, /* combine channels */
+# endif
+};
+
+void mad_stream_init(struct mad_stream *);
+void mad_stream_finish(struct mad_stream *);
+
+# define mad_stream_options(stream, opts) ((stream)->options = (opts))
+
+void mad_stream_buffer(struct mad_stream *,
+ unsigned char const *, unsigned long);
+void mad_stream_skip(struct mad_stream *, unsigned long);
+
+int mad_stream_sync(struct mad_stream *);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/synth.c b/core/multimedia/opieplayer/libmad/synth.c
new file mode 100644
index 0000000..e1914c9
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/synth.c
@@ -0,0 +1,855 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include "fixed.h"
+# include "frame.h"
+# include "synth.h"
+
+/*
+ * NAME: synth->init()
+ * DESCRIPTION: initialize synth struct
+ */
+void mad_synth_init(struct mad_synth *synth)
+{
+ mad_synth_mute(synth);
+
+ synth->phase = 0;
+
+ synth->pcm.samplerate = 0;
+ synth->pcm.channels = 0;
+ synth->pcm.length = 0;
+}
+
+/*
+ * NAME: synth->mute()
+ * DESCRIPTION: zero all polyphase filterbank values, resetting synthesis
+ */
+void mad_synth_mute(struct mad_synth *synth)
+{
+ unsigned int ch, s, v;
+
+ for (ch = 0; ch < 2; ++ch) {
+ for (s = 0; s < 16; ++s) {
+ for (v = 0; v < 8; ++v) {
+ synth->filter[ch][0][0][s][v] = synth->filter[ch][0][1][s][v] =
+ synth->filter[ch][1][0][s][v] = synth->filter[ch][1][1][s][v] = 0;
+ }
+ }
+ }
+}
+
+/*
+ * An optional optimization called here the Subband Synthesis Optimization
+ * (SSO) improves the performance of subband synthesis at the expense of
+ * accuracy.
+ *
+ * The idea is to simplify 32x32->64-bit multiplication to 32x32->32 such
+ * that extra scaling and rounding are not necessary. This often allows the
+ * compiler to use faster 32-bit multiply-accumulate instructions instead of
+ * explicit 64-bit multiply, shift, and add instructions.
+ *
+ * SSO works like this: a full 32x32->64-bit multiply of two mad_fixed_t
+ * values requires the result to be right-shifted 28 bits to be properly
+ * scaled to the same fixed-point format. Right shifts can be applied at any
+ * time to either operand or to the result, so the optimization involves
+ * careful placement of these shifts to minimize the loss of accuracy.
+ *
+ * First, a 14-bit shift is applied with rounding at compile-time to the D[]
+ * table of coefficients for the subband synthesis window. This only loses 2
+ * bits of accuracy because the lower 12 bits are always zero. A second
+ * 12-bit shift occurs after the DCT calculation. This loses 12 bits of
+ * accuracy. Finally, a third 2-bit shift occurs just before the sample is
+ * saved in the PCM buffer. 14 + 12 + 2 == 28 bits.
+ */
+
+/* FPM_DEFAULT without OPT_SSO will actually lose accuracy and performance */
+
+# if defined(FPM_DEFAULT) && !defined(OPT_SSO)
+# define OPT_SSO
+# endif
+
+/* second SSO shift, with rounding */
+
+# if defined(OPT_SSO)
+# define SHIFT(x) (((x) + (1L << 11)) >> 12)
+# else
+# define SHIFT(x) (x)
+# endif
+
+/* possible DCT speed optimization */
+
+# if defined(OPT_SPEED) && defined(MAD_F_MLX)
+# define OPT_DCTO
+# define MUL(x, y) \
+ ({ mad_fixed64hi_t hi; \
+ mad_fixed64lo_t lo; \
+ MAD_F_MLX(hi, lo, (x), (y)); \
+ hi << (32 - MAD_F_SCALEBITS - 3); \
+ })
+# else
+# undef OPT_DCTO
+# define MUL(x, y) mad_f_mul((x), (y))
+# endif
+
+/*
+ * NAME: dct32()
+ * DESCRIPTION: perform fast in[32]->out[32] DCT
+ */
+static
+void dct32(mad_fixed_t const in[32], unsigned int slot,
+ mad_fixed_t lo[16][8], mad_fixed_t hi[16][8])
+{
+ mad_fixed_t t0, t1, t2, t3, t4, t5, t6, t7;
+ mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
+ mad_fixed_t t16, t17, t18, t19, t20, t21, t22, t23;
+ mad_fixed_t t24, t25, t26, t27, t28, t29, t30, t31;
+ mad_fixed_t t32, t33, t34, t35, t36, t37, t38, t39;
+ mad_fixed_t t40, t41, t42, t43, t44, t45, t46, t47;
+ mad_fixed_t t48, t49, t50, t51, t52, t53, t54, t55;
+ mad_fixed_t t56, t57, t58, t59, t60, t61, t62, t63;
+ mad_fixed_t t64, t65, t66, t67, t68, t69, t70, t71;
+ mad_fixed_t t72, t73, t74, t75, t76, t77, t78, t79;
+ mad_fixed_t t80, t81, t82, t83, t84, t85, t86, t87;
+ mad_fixed_t t88, t89, t90, t91, t92, t93, t94, t95;
+ mad_fixed_t t96, t97, t98, t99, t100, t101, t102, t103;
+ mad_fixed_t t104, t105, t106, t107, t108, t109, t110, t111;
+ mad_fixed_t t112, t113, t114, t115, t116, t117, t118, t119;
+ mad_fixed_t t120, t121, t122, t123, t124, t125, t126, t127;
+ mad_fixed_t t128, t129, t130, t131, t132, t133, t134, t135;
+ mad_fixed_t t136, t137, t138, t139, t140, t141, t142, t143;
+ mad_fixed_t t144, t145, t146, t147, t148, t149, t150, t151;
+ mad_fixed_t t152, t153, t154, t155, t156, t157, t158, t159;
+ mad_fixed_t t160, t161, t162, t163, t164, t165, t166, t167;
+ mad_fixed_t t168, t169, t170, t171, t172, t173, t174, t175;
+ mad_fixed_t t176;
+
+ /* costab[i] = cos(PI / (2 * 32) * i) */
+
+# if defined(OPT_DCTO)
+ enum {
+ costab1 = MAD_F(0x7fd8878e),
+ costab2 = MAD_F(0x7f62368f),
+ costab3 = MAD_F(0x7e9d55fc),
+ costab4 = MAD_F(0x7d8a5f40),
+ costab5 = MAD_F(0x7c29fbee),
+ costab6 = MAD_F(0x7a7d055b),
+ costab7 = MAD_F(0x78848414),
+ costab8 = MAD_F(0x7641af3d),
+ costab9 = MAD_F(0x73b5ebd1),
+ costab10 = MAD_F(0x70e2cbc6),
+ costab11 = MAD_F(0x6dca0d14),
+ costab12 = MAD_F(0x6a6d98a4),
+ costab13 = MAD_F(0x66cf8120),
+ costab14 = MAD_F(0x62f201ac),
+ costab15 = MAD_F(0x5ed77c8a),
+ costab16 = MAD_F(0x5a82799a),
+ costab17 = MAD_F(0x55f5a4d2),
+ costab18 = MAD_F(0x5133cc94),
+ costab19 = MAD_F(0x4c3fdff4),
+ costab20 = MAD_F(0x471cece7),
+ costab21 = MAD_F(0x41ce1e65),
+ costab22 = MAD_F(0x3c56ba70),
+ costab23 = MAD_F(0x36ba2014),
+ costab24 = MAD_F(0x30fbc54d),
+ costab25 = MAD_F(0x2b1f34eb),
+ costab26 = MAD_F(0x25280c5e),
+ costab27 = MAD_F(0x1f19f97b),
+ costab28 = MAD_F(0x18f8b83c),
+ costab29 = MAD_F(0x12c8106f),
+ costab30 = MAD_F(0x0c8bd35e),
+ costab31 = MAD_F(0x0647d97c)
+ };
+# else
+ enum {
+ costab1 = MAD_F(0x0ffb10f2), /* 0.998795456 */
+ costab2 = MAD_F(0x0fec46d2), /* 0.995184727 */
+ costab3 = MAD_F(0x0fd3aac0), /* 0.989176510 */
+ costab4 = MAD_F(0x0fb14be8), /* 0.980785280 */
+ costab5 = MAD_F(0x0f853f7e), /* 0.970031253 */
+ costab6 = MAD_F(0x0f4fa0ab), /* 0.956940336 */
+ costab7 = MAD_F(0x0f109082), /* 0.941544065 */
+ costab8 = MAD_F(0x0ec835e8), /* 0.923879533 */
+ costab9 = MAD_F(0x0e76bd7a), /* 0.903989293 */
+ costab10 = MAD_F(0x0e1c5979), /* 0.881921264 */
+ costab11 = MAD_F(0x0db941a3), /* 0.857728610 */
+ costab12 = MAD_F(0x0d4db315), /* 0.831469612 */
+ costab13 = MAD_F(0x0cd9f024), /* 0.803207531 */
+ costab14 = MAD_F(0x0c5e4036), /* 0.773010453 */
+ costab15 = MAD_F(0x0bdaef91), /* 0.740951125 */
+ costab16 = MAD_F(0x0b504f33), /* 0.707106781 */
+ costab17 = MAD_F(0x0abeb49a), /* 0.671558955 */
+ costab18 = MAD_F(0x0a267993), /* 0.634393284 */
+ costab19 = MAD_F(0x0987fbfe), /* 0.595699304 */
+ costab20 = MAD_F(0x08e39d9d), /* 0.555570233 */
+ costab21 = MAD_F(0x0839c3cd), /* 0.514102744 */
+ costab22 = MAD_F(0x078ad74e), /* 0.471396737 */
+ costab23 = MAD_F(0x06d74402), /* 0.427555093 */
+ costab24 = MAD_F(0x061f78aa), /* 0.382683432 */
+ costab25 = MAD_F(0x0563e69d), /* 0.336889853 */
+ costab26 = MAD_F(0x04a5018c), /* 0.290284677 */
+ costab27 = MAD_F(0x03e33f2f), /* 0.242980180 */
+ costab28 = MAD_F(0x031f1708), /* 0.195090322 */
+ costab29 = MAD_F(0x0259020e), /* 0.146730474 */
+ costab30 = MAD_F(0x01917a6c), /* 0.098017140 */
+ costab31 = MAD_F(0x00c8fb30) /* 0.049067674 */
+ };
+# endif
+
+ t0 = in[0] + in[31]; t16 = MUL(in[0] - in[31], costab1);
+ t1 = in[15] + in[16]; t17 = MUL(in[15] - in[16], costab31);
+
+ t41 = t16 + t17;
+ t59 = MUL(t16 - t17, costab2);
+ t33 = t0 + t1;
+ t50 = MUL(t0 - t1, costab2);
+
+ t2 = in[7] + in[24]; t18 = MUL(in[7] - in[24], costab15);
+ t3 = in[8] + in[23]; t19 = MUL(in[8] - in[23], costab17);
+
+ t42 = t18 + t19;
+ t60 = MUL(t18 - t19, costab30);
+ t34 = t2 + t3;
+ t51 = MUL(t2 - t3, costab30);
+
+ t4 = in[3] + in[28]; t20 = MUL(in[3] - in[28], costab7);
+ t5 = in[12] + in[19]; t21 = MUL(in[12] - in[19], costab25);
+
+ t43 = t20 + t21;
+ t61 = MUL(t20 - t21, costab14);
+ t35 = t4 + t5;
+ t52 = MUL(t4 - t5, costab14);
+
+ t6 = in[4] + in[27]; t22 = MUL(in[4] - in[27], costab9);
+ t7 = in[11] + in[20]; t23 = MUL(in[11] - in[20], costab23);
+
+ t44 = t22 + t23;
+ t62 = MUL(t22 - t23, costab18);
+ t36 = t6 + t7;
+ t53 = MUL(t6 - t7, costab18);
+
+ t8 = in[1] + in[30]; t24 = MUL(in[1] - in[30], costab3);
+ t9 = in[14] + in[17]; t25 = MUL(in[14] - in[17], costab29);
+
+ t45 = t24 + t25;
+ t63 = MUL(t24 - t25, costab6);
+ t37 = t8 + t9;
+ t54 = MUL(t8 - t9, costab6);
+
+ t10 = in[6] + in[25]; t26 = MUL(in[6] - in[25], costab13);
+ t11 = in[9] + in[22]; t27 = MUL(in[9] - in[22], costab19);
+
+ t46 = t26 + t27;
+ t64 = MUL(t26 - t27, costab26);
+ t38 = t10 + t11;
+ t55 = MUL(t10 - t11, costab26);
+
+ t12 = in[2] + in[29]; t28 = MUL(in[2] - in[29], costab5);
+ t13 = in[13] + in[18]; t29 = MUL(in[13] - in[18], costab27);
+
+ t47 = t28 + t29;
+ t65 = MUL(t28 - t29, costab10);
+ t39 = t12 + t13;
+ t56 = MUL(t12 - t13, costab10);
+
+ t14 = in[5] + in[26]; t30 = MUL(in[5] - in[26], costab11);
+ t15 = in[10] + in[21]; t31 = MUL(in[10] - in[21], costab21);
+
+ t48 = t30 + t31;
+ t66 = MUL(t30 - t31, costab22);
+ t40 = t14 + t15;
+ t57 = MUL(t14 - t15, costab22);
+
+ t69 = t33 + t34; t89 = MUL(t33 - t34, costab4);
+ t70 = t35 + t36; t90 = MUL(t35 - t36, costab28);
+ t71 = t37 + t38; t91 = MUL(t37 - t38, costab12);
+ t72 = t39 + t40; t92 = MUL(t39 - t40, costab20);
+ t73 = t41 + t42; t94 = MUL(t41 - t42, costab4);
+ t74 = t43 + t44; t95 = MUL(t43 - t44, costab28);
+ t75 = t45 + t46; t96 = MUL(t45 - t46, costab12);
+ t76 = t47 + t48; t97 = MUL(t47 - t48, costab20);
+
+ t78 = t50 + t51; t100 = MUL(t50 - t51, costab4);
+ t79 = t52 + t53; t101 = MUL(t52 - t53, costab28);
+ t80 = t54 + t55; t102 = MUL(t54 - t55, costab12);
+ t81 = t56 + t57; t103 = MUL(t56 - t57, costab20);
+
+ t83 = t59 + t60; t106 = MUL(t59 - t60, costab4);
+ t84 = t61 + t62; t107 = MUL(t61 - t62, costab28);
+ t85 = t63 + t64; t108 = MUL(t63 - t64, costab12);
+ t86 = t65 + t66; t109 = MUL(t65 - t66, costab20);
+
+ t113 = t69 + t70;
+ t114 = t71 + t72;
+
+ /* 0 */ hi[15][slot] = SHIFT(t113 + t114);
+ /* 16 */ lo[ 0][slot] = SHIFT(MUL(t113 - t114, costab16));
+
+ t115 = t73 + t74;
+ t116 = t75 + t76;
+
+ t32 = t115 + t116;
+
+ /* 1 */ hi[14][slot] = SHIFT(t32);
+
+ t118 = t78 + t79;
+ t119 = t80 + t81;
+
+ t58 = t118 + t119;
+
+ /* 2 */ hi[13][slot] = SHIFT(t58);
+
+ t121 = t83 + t84;
+ t122 = t85 + t86;
+
+ t67 = t121 + t122;
+
+ t49 = (t67 << 1) - t32;
+
+ /* 3 */ hi[12][slot] = SHIFT(t49);
+
+ t125 = t89 + t90;
+ t126 = t91 + t92;
+
+ t93 = t125 + t126;
+
+ /* 4 */ hi[11][slot] = SHIFT(t93);
+
+ t128 = t94 + t95;
+ t129 = t96 + t97;
+
+ t98 = t128 + t129;
+
+ t68 = (t98 << 1) - t49;
+
+ /* 5 */ hi[10][slot] = SHIFT(t68);
+
+ t132 = t100 + t101;
+ t133 = t102 + t103;
+
+ t104 = t132 + t133;
+
+ t82 = (t104 << 1) - t58;
+
+ /* 6 */ hi[ 9][slot] = SHIFT(t82);
+
+ t136 = t106 + t107;
+ t137 = t108 + t109;
+
+ t110 = t136 + t137;
+
+ t87 = (t110 << 1) - t67;
+
+ t77 = (t87 << 1) - t68;
+
+ /* 7 */ hi[ 8][slot] = SHIFT(t77);
+
+ t141 = MUL(t69 - t70, costab8);
+ t142 = MUL(t71 - t72, costab24);
+ t143 = t141 + t142;
+
+ /* 8 */ hi[ 7][slot] = SHIFT(t143);
+ /* 24 */ lo[ 8][slot] =
+ SHIFT((MUL(t141 - t142, costab16) << 1) - t143);
+
+ t144 = MUL(t73 - t74, costab8);
+ t145 = MUL(t75 - t76, costab24);
+ t146 = t144 + t145;
+
+ t88 = (t146 << 1) - t77;
+
+ /* 9 */ hi[ 6][slot] = SHIFT(t88);
+
+ t148 = MUL(t78 - t79, costab8);
+ t149 = MUL(t80 - t81, costab24);
+ t150 = t148 + t149;
+
+ t105 = (t150 << 1) - t82;
+
+ /* 10 */ hi[ 5][slot] = SHIFT(t105);
+
+ t152 = MUL(t83 - t84, costab8);
+ t153 = MUL(t85 - t86, costab24);
+ t154 = t152 + t153;
+
+ t111 = (t154 << 1) - t87;
+
+ t99 = (t111 << 1) - t88;
+
+ /* 11 */ hi[ 4][slot] = SHIFT(t99);
+
+ t157 = MUL(t89 - t90, costab8);
+ t158 = MUL(t91 - t92, costab24);
+ t159 = t157 + t158;
+
+ t127 = (t159 << 1) - t93;
+
+ /* 12 */ hi[ 3][slot] = SHIFT(t127);
+
+ t160 = (MUL(t125 - t126, costab16) << 1) - t127;
+
+ /* 20 */ lo[ 4][slot] = SHIFT(t160);
+ /* 28 */ lo[12][slot] =
+ SHIFT((((MUL(t157 - t158, costab16) << 1) - t159) << 1) - t160);
+
+ t161 = MUL(t94 - t95, costab8);
+ t162 = MUL(t96 - t97, costab24);
+ t163 = t161 + t162;
+
+ t130 = (t163 << 1) - t98;
+
+ t112 = (t130 << 1) - t99;
+
+ /* 13 */ hi[ 2][slot] = SHIFT(t112);
+
+ t164 = (MUL(t128 - t129, costab16) << 1) - t130;
+
+ t166 = MUL(t100 - t101, costab8);
+ t167 = MUL(t102 - t103, costab24);
+ t168 = t166 + t167;
+
+ t134 = (t168 << 1) - t104;
+
+ t120 = (t134 << 1) - t105;
+
+ /* 14 */ hi[ 1][slot] = SHIFT(t120);
+
+ t135 = (MUL(t118 - t119, costab16) << 1) - t120;
+
+ /* 18 */ lo[ 2][slot] = SHIFT(t135);
+
+ t169 = (MUL(t132 - t133, costab16) << 1) - t134;
+
+ t151 = (t169 << 1) - t135;
+
+ /* 22 */ lo[ 6][slot] = SHIFT(t151);
+
+ t170 = (((MUL(t148 - t149, costab16) << 1) - t150) << 1) - t151;
+
+ /* 26 */ lo[10][slot] = SHIFT(t170);
+ /* 30 */ lo[14][slot] =
+ SHIFT((((((MUL(t166 - t167, costab16) << 1) -
+ t168) << 1) - t169) << 1) - t170);
+
+ t171 = MUL(t106 - t107, costab8);
+ t172 = MUL(t108 - t109, costab24);
+ t173 = t171 + t172;
+
+ t138 = (t173 << 1) - t110;
+
+ t123 = (t138 << 1) - t111;
+
+ t139 = (MUL(t121 - t122, costab16) << 1) - t123;
+
+ t117 = (t123 << 1) - t112;
+
+ /* 15 */ hi[ 0][slot] = SHIFT(t117);
+
+ t124 = (MUL(t115 - t116, costab16) << 1) - t117;
+
+ /* 17 */ lo[ 1][slot] = SHIFT(t124);
+
+ t131 = (t139 << 1) - t124;
+
+ /* 19 */ lo[ 3][slot] = SHIFT(t131);
+
+ t140 = (t164 << 1) - t131;
+
+ /* 21 */ lo[ 5][slot] = SHIFT(t140);
+
+ t174 = (MUL(t136 - t137, costab16) << 1) - t138;
+
+ t155 = (t174 << 1) - t139;
+
+ t147 = (t155 << 1) - t140;
+
+ /* 23 */ lo[ 7][slot] = SHIFT(t147);
+
+ t156 = (((MUL(t144 - t145, costab16) << 1) - t146) << 1) - t147;
+
+ /* 25 */ lo[ 9][slot] = SHIFT(t156);
+
+ t175 = (((MUL(t152 - t153, costab16) << 1) - t154) << 1) - t155;
+
+ t165 = (t175 << 1) - t156;
+
+ /* 27 */ lo[11][slot] = SHIFT(t165);
+
+ t176 = (((((MUL(t161 - t162, costab16) << 1) -
+ t163) << 1) - t164) << 1) - t165;
+
+ /* 29 */ lo[13][slot] = SHIFT(t176);
+ /* 31 */ lo[15][slot] =
+ SHIFT((((((((MUL(t171 - t172, costab16) << 1) -
+ t173) << 1) - t174) << 1) - t175) << 1) - t176);
+
+ /*
+ * Totals:
+ * 80 multiplies
+ * 80 additions
+ * 119 subtractions
+ * 49 shifts (not counting SSO)
+ */
+}
+
+# undef MUL
+# undef SHIFT
+
+/* third SSO shift and/or D[] optimization preshift */
+
+# if defined(OPT_SSO)
+# if MAD_F_FRACBITS != 28
+# error "MAD_F_FRACBITS must be 28 to use OPT_SSO"
+# endif
+# define ML0(hi, lo, x, y) ((lo) = (x) * (y))
+# define MLA(hi, lo, x, y) ((lo) += (x) * (y))
+# define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
+# define SHIFT(x) ((x) >> 2)
+# define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 14)
+# else
+# define ML0(hi, lo, x, y) MAD_F_ML0((hi), (lo), (x), (y))
+# define MLA(hi, lo, x, y) MAD_F_MLA((hi), (lo), (x), (y))
+# define MLZ(hi, lo) MAD_F_MLZ((hi), (lo))
+# define SHIFT(x) (x)
+# if defined(MAD_F_SCALEBITS)
+# undef MAD_F_SCALEBITS
+# define MAD_F_SCALEBITS (MAD_F_FRACBITS - 12)
+# define PRESHIFT(x) (MAD_F(x) >> 12)
+# else
+# define PRESHIFT(x) MAD_F(x)
+# endif
+# endif
+
+static
+mad_fixed_t const D[17][32] = {
+# include "D.dat"
+};
+
+# if defined(ASO_SYNTH)
+void synth_full(struct mad_synth *, struct mad_frame const *,
+ unsigned int, unsigned int);
+# else
+/*
+ * NAME: synth->full()
+ * DESCRIPTION: perform full frequency PCM synthesis
+ */
+static
+void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
+ unsigned int nch, unsigned int ns)
+{
+ unsigned int phase, ch, s, sb, pe, po;
+ mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8];
+ mad_fixed_t const (*sbsample)[36][32];
+ register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8];
+ register mad_fixed_t const (*Dptr)[32], *ptr;
+ register mad_fixed64hi_t hi;
+ register mad_fixed64lo_t lo;
+
+ for (ch = 0; ch < nch; ++ch) {
+ sbsample = &frame->sbsample[ch];
+ filter = &synth->filter[ch];
+ phase = synth->phase;
+ pcm1 = synth->pcm.samples[ch];
+
+ for (s = 0; s < ns; ++s) {
+ dct32((*sbsample)[s], phase >> 1,
+ (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
+
+ pe = phase & ~1;
+ po = ((phase - 1) & 0xf) | 1;
+
+ /* calculate 32 samples */
+
+ fe = &(*filter)[0][ phase & 1][0];
+ fx = &(*filter)[0][~phase & 1][0];
+ fo = &(*filter)[1][~phase & 1][0];
+
+ Dptr = &D[0];
+
+ ptr = *Dptr + pe;
+ ML0(hi, lo, (*fe)[0], ptr[ 0]);
+ MLA(hi, lo, (*fe)[1], ptr[14]);
+ MLA(hi, lo, (*fe)[2], ptr[12]);
+ MLA(hi, lo, (*fe)[3], ptr[10]);
+ MLA(hi, lo, (*fe)[4], ptr[ 8]);
+ MLA(hi, lo, (*fe)[5], ptr[ 6]);
+ MLA(hi, lo, (*fe)[6], ptr[ 4]);
+ MLA(hi, lo, (*fe)[7], ptr[ 2]);
+
+ ptr = *Dptr + po;
+ MLA(hi, lo, (*fx)[0], -ptr[ 0]);
+ MLA(hi, lo, (*fx)[1], -ptr[14]);
+ MLA(hi, lo, (*fx)[2], -ptr[12]);
+ MLA(hi, lo, (*fx)[3], -ptr[10]);
+ MLA(hi, lo, (*fx)[4], -ptr[ 8]);
+ MLA(hi, lo, (*fx)[5], -ptr[ 6]);
+ MLA(hi, lo, (*fx)[6], -ptr[ 4]);
+ MLA(hi, lo, (*fx)[7], -ptr[ 2]);
+
+ *pcm1++ = SHIFT(MLZ(hi, lo));
+
+ pcm2 = pcm1 + 30;
+
+ for (sb = 1; sb < 16; ++sb) {
+ ++fe;
+ ++Dptr;
+
+ /* D[32 - sb][i] == -D[sb][31 - i] */
+
+ ptr = *Dptr + pe;
+ ML0(hi, lo, (*fe)[7], ptr[ 2]);
+ MLA(hi, lo, (*fe)[6], ptr[ 4]);
+ MLA(hi, lo, (*fe)[5], ptr[ 6]);
+ MLA(hi, lo, (*fe)[4], ptr[ 8]);
+ MLA(hi, lo, (*fe)[3], ptr[10]);
+ MLA(hi, lo, (*fe)[2], ptr[12]);
+ MLA(hi, lo, (*fe)[1], ptr[14]);
+ MLA(hi, lo, (*fe)[0], ptr[ 0]);
+
+ ptr = *Dptr + po;
+ MLA(hi, lo, (*fo)[0], -ptr[ 0]);
+ MLA(hi, lo, (*fo)[1], -ptr[14]);
+ MLA(hi, lo, (*fo)[2], -ptr[12]);
+ MLA(hi, lo, (*fo)[3], -ptr[10]);
+ MLA(hi, lo, (*fo)[4], -ptr[ 8]);
+ MLA(hi, lo, (*fo)[5], -ptr[ 6]);
+ MLA(hi, lo, (*fo)[6], -ptr[ 4]);
+ MLA(hi, lo, (*fo)[7], -ptr[ 2]);
+
+ *pcm1++ = SHIFT(MLZ(hi, lo));
+
+ ptr = *Dptr - po;
+ ML0(hi, lo, (*fo)[7], ptr[31 - 2]);
+ MLA(hi, lo, (*fo)[6], ptr[31 - 4]);
+ MLA(hi, lo, (*fo)[5], ptr[31 - 6]);
+ MLA(hi, lo, (*fo)[4], ptr[31 - 8]);
+ MLA(hi, lo, (*fo)[3], ptr[31 - 10]);
+ MLA(hi, lo, (*fo)[2], ptr[31 - 12]);
+ MLA(hi, lo, (*fo)[1], ptr[31 - 14]);
+ MLA(hi, lo, (*fo)[0], ptr[31 - 16]);
+
+ ptr = *Dptr - pe;
+ MLA(hi, lo, (*fe)[0], ptr[31 - 16]);
+ MLA(hi, lo, (*fe)[1], ptr[31 - 14]);
+ MLA(hi, lo, (*fe)[2], ptr[31 - 12]);
+ MLA(hi, lo, (*fe)[3], ptr[31 - 10]);
+ MLA(hi, lo, (*fe)[4], ptr[31 - 8]);
+ MLA(hi, lo, (*fe)[5], ptr[31 - 6]);
+ MLA(hi, lo, (*fe)[6], ptr[31 - 4]);
+ MLA(hi, lo, (*fe)[7], ptr[31 - 2]);
+
+ *pcm2-- = SHIFT(MLZ(hi, lo));
+
+ ++fo;
+ }
+
+ ++Dptr;
+
+ ptr = *Dptr + po;
+ ML0(hi, lo, (*fo)[0], ptr[ 0]);
+ MLA(hi, lo, (*fo)[1], ptr[14]);
+ MLA(hi, lo, (*fo)[2], ptr[12]);
+ MLA(hi, lo, (*fo)[3], ptr[10]);
+ MLA(hi, lo, (*fo)[4], ptr[ 8]);
+ MLA(hi, lo, (*fo)[5], ptr[ 6]);
+ MLA(hi, lo, (*fo)[6], ptr[ 4]);
+ MLA(hi, lo, (*fo)[7], ptr[ 2]);
+
+ *pcm1 = SHIFT(-MLZ(hi, lo));
+ pcm1 += 16;
+
+ phase = (phase + 1) % 16;
+ }
+ }
+}
+# endif
+
+/*
+ * NAME: synth->half()
+ * DESCRIPTION: perform half frequency PCM synthesis
+ */
+static
+void synth_half(struct mad_synth *synth, struct mad_frame const *frame,
+ unsigned int nch, unsigned int ns)
+{
+ unsigned int phase, ch, s, sb, pe, po;
+ mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8];
+ mad_fixed_t const (*sbsample)[36][32];
+ register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8];
+ register mad_fixed_t const (*Dptr)[32], *ptr;
+ register mad_fixed64hi_t hi;
+ register mad_fixed64lo_t lo;
+
+ for (ch = 0; ch < nch; ++ch) {
+ sbsample = &frame->sbsample[ch];
+ filter = &synth->filter[ch];
+ phase = synth->phase;
+ pcm1 = synth->pcm.samples[ch];
+
+ for (s = 0; s < ns; ++s) {
+ dct32((*sbsample)[s], phase >> 1,
+ (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
+
+ pe = phase & ~1;
+ po = ((phase - 1) & 0xf) | 1;
+
+ /* calculate 16 samples */
+
+ fe = &(*filter)[0][ phase & 1][0];
+ fx = &(*filter)[0][~phase & 1][0];
+ fo = &(*filter)[1][~phase & 1][0];
+
+ Dptr = &D[0];
+
+ ptr = *Dptr + pe;
+ ML0(hi, lo, (*fe)[0], ptr[ 0]);
+ MLA(hi, lo, (*fe)[1], ptr[14]);
+ MLA(hi, lo, (*fe)[2], ptr[12]);
+ MLA(hi, lo, (*fe)[3], ptr[10]);
+ MLA(hi, lo, (*fe)[4], ptr[ 8]);
+ MLA(hi, lo, (*fe)[5], ptr[ 6]);
+ MLA(hi, lo, (*fe)[6], ptr[ 4]);
+ MLA(hi, lo, (*fe)[7], ptr[ 2]);
+
+ ptr = *Dptr + po;
+ MLA(hi, lo, (*fx)[0], -ptr[ 0]);
+ MLA(hi, lo, (*fx)[1], -ptr[14]);
+ MLA(hi, lo, (*fx)[2], -ptr[12]);
+ MLA(hi, lo, (*fx)[3], -ptr[10]);
+ MLA(hi, lo, (*fx)[4], -ptr[ 8]);
+ MLA(hi, lo, (*fx)[5], -ptr[ 6]);
+ MLA(hi, lo, (*fx)[6], -ptr[ 4]);
+ MLA(hi, lo, (*fx)[7], -ptr[ 2]);
+
+ *pcm1++ = SHIFT(MLZ(hi, lo));
+
+ pcm2 = pcm1 + 14;
+
+ for (sb = 1; sb < 16; ++sb) {
+ ++fe;
+ ++Dptr;
+
+ /* D[32 - sb][i] == -D[sb][31 - i] */
+
+ if (!(sb & 1)) {
+ ptr = *Dptr + pe;
+ ML0(hi, lo, (*fe)[7], ptr[ 2]);
+ MLA(hi, lo, (*fe)[6], ptr[ 4]);
+ MLA(hi, lo, (*fe)[5], ptr[ 6]);
+ MLA(hi, lo, (*fe)[4], ptr[ 8]);
+ MLA(hi, lo, (*fe)[3], ptr[10]);
+ MLA(hi, lo, (*fe)[2], ptr[12]);
+ MLA(hi, lo, (*fe)[1], ptr[14]);
+ MLA(hi, lo, (*fe)[0], ptr[ 0]);
+
+ ptr = *Dptr + po;
+ MLA(hi, lo, (*fo)[0], -ptr[ 0]);
+ MLA(hi, lo, (*fo)[1], -ptr[14]);
+ MLA(hi, lo, (*fo)[2], -ptr[12]);
+ MLA(hi, lo, (*fo)[3], -ptr[10]);
+ MLA(hi, lo, (*fo)[4], -ptr[ 8]);
+ MLA(hi, lo, (*fo)[5], -ptr[ 6]);
+ MLA(hi, lo, (*fo)[6], -ptr[ 4]);
+ MLA(hi, lo, (*fo)[7], -ptr[ 2]);
+
+ *pcm1++ = SHIFT(MLZ(hi, lo));
+
+ ptr = *Dptr - po;
+ ML0(hi, lo, (*fo)[7], ptr[31 - 2]);
+ MLA(hi, lo, (*fo)[6], ptr[31 - 4]);
+ MLA(hi, lo, (*fo)[5], ptr[31 - 6]);
+ MLA(hi, lo, (*fo)[4], ptr[31 - 8]);
+ MLA(hi, lo, (*fo)[3], ptr[31 - 10]);
+ MLA(hi, lo, (*fo)[2], ptr[31 - 12]);
+ MLA(hi, lo, (*fo)[1], ptr[31 - 14]);
+ MLA(hi, lo, (*fo)[0], ptr[31 - 16]);
+
+ ptr = *Dptr - pe;
+ MLA(hi, lo, (*fe)[0], ptr[31 - 16]);
+ MLA(hi, lo, (*fe)[1], ptr[31 - 14]);
+ MLA(hi, lo, (*fe)[2], ptr[31 - 12]);
+ MLA(hi, lo, (*fe)[3], ptr[31 - 10]);
+ MLA(hi, lo, (*fe)[4], ptr[31 - 8]);
+ MLA(hi, lo, (*fe)[5], ptr[31 - 6]);
+ MLA(hi, lo, (*fe)[6], ptr[31 - 4]);
+ MLA(hi, lo, (*fe)[7], ptr[31 - 2]);
+
+ *pcm2-- = SHIFT(MLZ(hi, lo));
+ }
+
+ ++fo;
+ }
+
+ ++Dptr;
+
+ ptr = *Dptr + po;
+ ML0(hi, lo, (*fo)[0], ptr[ 0]);
+ MLA(hi, lo, (*fo)[1], ptr[14]);
+ MLA(hi, lo, (*fo)[2], ptr[12]);
+ MLA(hi, lo, (*fo)[3], ptr[10]);
+ MLA(hi, lo, (*fo)[4], ptr[ 8]);
+ MLA(hi, lo, (*fo)[5], ptr[ 6]);
+ MLA(hi, lo, (*fo)[6], ptr[ 4]);
+ MLA(hi, lo, (*fo)[7], ptr[ 2]);
+
+ *pcm1 = SHIFT(-MLZ(hi, lo));
+ pcm1 += 8;
+
+ phase = (phase + 1) % 16;
+ }
+ }
+}
+
+/*
+ * NAME: synth->frame()
+ * DESCRIPTION: perform PCM synthesis of frame subband samples
+ */
+void mad_synth_frame(struct mad_synth *synth, struct mad_frame const *frame)
+{
+ unsigned int nch, ns;
+ void (*synth_frame)(struct mad_synth *, struct mad_frame const *,
+ unsigned int, unsigned int);
+
+ nch = MAD_NCHANNELS(&frame->header);
+ ns = MAD_NSBSAMPLES(&frame->header);
+
+ synth->pcm.samplerate = frame->header.samplerate;
+ synth->pcm.channels = nch;
+ synth->pcm.length = 32 * ns;
+
+ synth_frame = synth_full;
+
+ if (frame->options & MAD_OPTION_HALFSAMPLERATE) {
+ synth->pcm.samplerate /= 2;
+ synth->pcm.length /= 2;
+
+ synth_frame = synth_half;
+ }
+
+ synth_frame(synth, frame, nch, ns);
+
+ synth->phase = (synth->phase + ns) % 16;
+}
diff --git a/core/multimedia/opieplayer/libmad/synth.h b/core/multimedia/opieplayer/libmad/synth.h
new file mode 100644
index 0000000..64f6a86
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/synth.h
@@ -0,0 +1,50 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_SYNTH_H
+# define LIBMAD_SYNTH_H
+
+# include "fixed.h"
+# include "frame.h"
+
+struct mad_synth {
+ mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
+ /* [ch][eo][peo][s][v] */
+
+ unsigned int phase; /* current processing phase */
+
+ struct mad_pcm {
+ unsigned int samplerate; /* sampling frequency (Hz) */
+ unsigned short channels; /* number of channels */
+ unsigned short length; /* number of samples per channel */
+ mad_fixed_t samples[2][1152]; /* PCM output samples */
+ } pcm;
+};
+
+void mad_synth_init(struct mad_synth *);
+
+# define mad_synth_finish(synth) /* nothing */
+
+void mad_synth_mute(struct mad_synth *);
+
+void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/timer.c b/core/multimedia/opieplayer/libmad/timer.c
new file mode 100644
index 0000000..b30680c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/timer.c
@@ -0,0 +1,480 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include <stdio.h>
+# include <assert.h>
+
+# include "timer.h"
+
+mad_timer_t const mad_timer_zero = { 0, 0 };
+
+/*
+ * NAME: timer->compare()
+ * DESCRIPTION: indicate relative order of two timers
+ */
+int mad_timer_compare(mad_timer_t timer1, mad_timer_t timer2)
+{
+ signed long diff;
+
+ diff = timer1.seconds - timer2.seconds;
+ if (diff < 0)
+ return -1;
+ else if (diff > 0)
+ return +1;
+
+ diff = timer1.fraction - timer2.fraction;
+ if (diff < 0)
+ return -1;
+ else if (diff > 0)
+ return +1;
+
+ return 0;
+}
+
+/*
+ * NAME: timer->negate()
+ * DESCRIPTION: invert the sign of a timer
+ */
+void mad_timer_negate(mad_timer_t *timer)
+{
+ timer->seconds = -timer->seconds;
+
+ if (timer->fraction) {
+ timer->seconds -= 1;
+ timer->fraction = MAD_TIMER_RESOLUTION - timer->fraction;
+ }
+}
+
+/*
+ * NAME: timer->abs()
+ * DESCRIPTION: return the absolute value of a timer
+ */
+mad_timer_t mad_timer_abs(mad_timer_t timer)
+{
+ if (mad_timer_sign(timer) < 0)
+ mad_timer_negate(&timer);
+
+ return timer;
+}
+
+/*
+ * NAME: reduce_timer()
+ * DESCRIPTION: carry timer fraction into seconds
+ */
+static
+void reduce_timer(mad_timer_t *timer)
+{
+ timer->seconds += timer->fraction / MAD_TIMER_RESOLUTION;
+ timer->fraction %= MAD_TIMER_RESOLUTION;
+}
+
+/*
+ * NAME: gcd()
+ * DESCRIPTION: compute greatest common denominator
+ */
+static
+unsigned long gcd(unsigned long num1, unsigned long num2)
+{
+ unsigned long tmp;
+
+ while (num2) {
+ tmp = num2;
+ num2 = num1 % num2;
+ num1 = tmp;
+ }
+
+ return num1;
+}
+
+/*
+ * NAME: reduce_rational()
+ * DESCRIPTION: convert rational expression to lowest terms
+ */
+static
+void reduce_rational(unsigned long *numer, unsigned long *denom)
+{
+ unsigned long factor;
+
+ factor = gcd(*numer, *denom);
+
+ assert(factor != 0);
+
+ *numer /= factor;
+ *denom /= factor;
+}
+
+/*
+ * NAME: scale_rational()
+ * DESCRIPTION: solve numer/denom == ?/scale avoiding overflowing
+ */
+static
+unsigned long scale_rational(unsigned long numer, unsigned long denom,
+ unsigned long scale)
+{
+ reduce_rational(&numer, &denom);
+ reduce_rational(&scale, &denom);
+
+ assert(denom != 0);
+
+ if (denom < scale)
+ return numer * (scale / denom) + numer * (scale % denom) / denom;
+ if (denom < numer)
+ return scale * (numer / denom) + scale * (numer % denom) / denom;
+
+ return numer * scale / denom;
+}
+
+/*
+ * NAME: timer->set()
+ * DESCRIPTION: set timer to specific value
+ */
+void mad_timer_set(mad_timer_t *timer, unsigned long seconds,
+ unsigned long fraction, unsigned long fracparts)
+{
+ timer->seconds = seconds;
+
+ if (fraction == 0)
+ fracparts = 0;
+ else if (fracparts == 0) {
+ fracparts = fraction;
+ fraction = 1;
+ }
+
+ switch (fracparts) {
+ case 0:
+ timer->fraction = 0;
+ break;
+
+ case MAD_TIMER_RESOLUTION:
+ timer->fraction = fraction;
+ break;
+
+ case 8000:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 8000);
+ break;
+
+ case 11025:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 11025);
+ break;
+
+ case 12000:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 12000);
+ break;
+
+ case 16000:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 16000);
+ break;
+
+ case 22050:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 22050);
+ break;
+
+ case 24000:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 24000);
+ break;
+
+ case 32000:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 32000);
+ break;
+
+ case 44100:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 44100);
+ break;
+
+ case 48000:
+ timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 48000);
+ break;
+
+ default:
+ timer->fraction =
+ scale_rational(fraction, fracparts, MAD_TIMER_RESOLUTION);
+ break;
+ }
+
+ if (timer->fraction >= MAD_TIMER_RESOLUTION)
+ reduce_timer(timer);
+}
+
+/*
+ * NAME: timer->add()
+ * DESCRIPTION: add one timer to another
+ */
+void mad_timer_add(mad_timer_t *timer, mad_timer_t incr)
+{
+ timer->seconds += incr.seconds;
+ timer->fraction += incr.fraction;
+
+ if (timer->fraction >= MAD_TIMER_RESOLUTION)
+ reduce_timer(timer);
+}
+
+/*
+ * NAME: timer->multiply()
+ * DESCRIPTION: multiply a timer by a scalar value
+ */
+void mad_timer_multiply(mad_timer_t *timer, signed long scalar)
+{
+ mad_timer_t addend;
+ unsigned long factor;
+
+ factor = scalar;
+ if (scalar < 0) {
+ mad_timer_negate(timer);
+ factor = -scalar;
+ }
+
+ addend = *timer;
+ *timer = mad_timer_zero;
+
+ while (factor) {
+ if (factor & 1)
+ mad_timer_add(timer, addend);
+
+ mad_timer_add(&addend, addend);
+ factor >>= 1;
+ }
+}
+
+/*
+ * NAME: timer->count()
+ * DESCRIPTION: return timer value in selected units
+ */
+signed long mad_timer_count(mad_timer_t timer, enum mad_units units)
+{
+ switch (units) {
+ case MAD_UNITS_HOURS:
+ return timer.seconds / 60 / 60;
+
+ case MAD_UNITS_MINUTES:
+ return timer.seconds / 60;
+
+ case MAD_UNITS_SECONDS:
+ return timer.seconds;
+
+ case MAD_UNITS_DECISECONDS:
+ case MAD_UNITS_CENTISECONDS:
+ case MAD_UNITS_MILLISECONDS:
+
+ case MAD_UNITS_8000_HZ:
+ case MAD_UNITS_11025_HZ:
+ case MAD_UNITS_12000_HZ:
+ case MAD_UNITS_16000_HZ:
+ case MAD_UNITS_22050_HZ:
+ case MAD_UNITS_24000_HZ:
+ case MAD_UNITS_32000_HZ:
+ case MAD_UNITS_44100_HZ:
+ case MAD_UNITS_48000_HZ:
+
+ case MAD_UNITS_24_FPS:
+ case MAD_UNITS_25_FPS:
+ case MAD_UNITS_30_FPS:
+ case MAD_UNITS_48_FPS:
+ case MAD_UNITS_50_FPS:
+ case MAD_UNITS_60_FPS:
+ case MAD_UNITS_75_FPS:
+ return timer.seconds * (signed long) units +
+ (signed long) scale_rational(timer.fraction, MAD_TIMER_RESOLUTION,
+ units);
+
+ case MAD_UNITS_23_976_FPS:
+ case MAD_UNITS_24_975_FPS:
+ case MAD_UNITS_29_97_FPS:
+ case MAD_UNITS_47_952_FPS:
+ case MAD_UNITS_49_95_FPS:
+ case MAD_UNITS_59_94_FPS:
+ return (mad_timer_count(timer, -units) + 1) * 1000 / 1001;
+ }
+
+ /* unsupported units */
+ return 0;
+}
+
+/*
+ * NAME: timer->fraction()
+ * DESCRIPTION: return fractional part of timer in arbitrary terms
+ */
+unsigned long mad_timer_fraction(mad_timer_t timer, unsigned long fracparts)
+{
+ timer = mad_timer_abs(timer);
+
+ switch (fracparts) {
+ case 0:
+ return MAD_TIMER_RESOLUTION / timer.fraction;
+
+ case MAD_TIMER_RESOLUTION:
+ return timer.fraction;
+
+ default:
+ return scale_rational(timer.fraction, MAD_TIMER_RESOLUTION, fracparts);
+ }
+}
+
+/*
+ * NAME: timer->string()
+ * DESCRIPTION: write a string representation of a timer using a template
+ */
+void mad_timer_string(mad_timer_t timer,
+ char *dest, char const *format, enum mad_units units,
+ enum mad_units fracunits, unsigned long subparts)
+{
+ unsigned long hours, minutes, seconds, sub;
+ unsigned int frac;
+
+ timer = mad_timer_abs(timer);
+
+ seconds = timer.seconds;
+ frac = sub = 0;
+
+ switch (fracunits) {
+ case MAD_UNITS_HOURS:
+ case MAD_UNITS_MINUTES:
+ case MAD_UNITS_SECONDS:
+ break;
+
+ case MAD_UNITS_DECISECONDS:
+ case MAD_UNITS_CENTISECONDS:
+ case MAD_UNITS_MILLISECONDS:
+
+ case MAD_UNITS_8000_HZ:
+ case MAD_UNITS_11025_HZ:
+ case MAD_UNITS_12000_HZ:
+ case MAD_UNITS_16000_HZ:
+ case MAD_UNITS_22050_HZ:
+ case MAD_UNITS_24000_HZ:
+ case MAD_UNITS_32000_HZ:
+ case MAD_UNITS_44100_HZ:
+ case MAD_UNITS_48000_HZ:
+
+ case MAD_UNITS_24_FPS:
+ case MAD_UNITS_25_FPS:
+ case MAD_UNITS_30_FPS:
+ case MAD_UNITS_48_FPS:
+ case MAD_UNITS_50_FPS:
+ case MAD_UNITS_60_FPS:
+ case MAD_UNITS_75_FPS:
+ {
+ unsigned long fracparts;
+
+ fracparts = MAD_TIMER_RESOLUTION / fracunits;
+
+ frac = timer.fraction / fracparts;
+ sub = scale_rational(timer.fraction % fracparts, fracparts, subparts);
+ }
+ break;
+
+ case MAD_UNITS_23_976_FPS:
+ case MAD_UNITS_24_975_FPS:
+ case MAD_UNITS_29_97_FPS:
+ case MAD_UNITS_47_952_FPS:
+ case MAD_UNITS_49_95_FPS:
+ case MAD_UNITS_59_94_FPS:
+ /* drop-frame encoding */
+ /* N.B. this is only well-defined for MAD_UNITS_29_97_FPS */
+ {
+ unsigned long frame, cycle, d, m;
+
+ frame = mad_timer_count(timer, fracunits);
+
+ cycle = -fracunits * 60 * 10 - (10 - 1) * 2;
+
+ d = frame / cycle;
+ m = frame % cycle;
+ frame += (10 - 1) * 2 * d;
+ if (m > 2)
+ frame += 2 * ((m - 2) / (cycle / 10));
+
+ frac = frame % -fracunits;
+ seconds = frame / -fracunits;
+ }
+ break;
+ }
+
+ switch (units) {
+ case MAD_UNITS_HOURS:
+ minutes = seconds / 60;
+ hours = minutes / 60;
+
+ sprintf(dest, format,
+ hours,
+ (unsigned int) (minutes % 60),
+ (unsigned int) (seconds % 60),
+ frac, sub);
+ break;
+
+ case MAD_UNITS_MINUTES:
+ minutes = seconds / 60;
+
+ sprintf(dest, format,
+ minutes,
+ (unsigned int) (seconds % 60),
+ frac, sub);
+ break;
+
+ case MAD_UNITS_SECONDS:
+ sprintf(dest, format,
+ seconds,
+ frac, sub);
+ break;
+
+ case MAD_UNITS_23_976_FPS:
+ case MAD_UNITS_24_975_FPS:
+ case MAD_UNITS_29_97_FPS:
+ case MAD_UNITS_47_952_FPS:
+ case MAD_UNITS_49_95_FPS:
+ case MAD_UNITS_59_94_FPS:
+ if (fracunits < 0) {
+ /* not yet implemented */
+ sub = 0;
+ }
+
+ /* fall through */
+
+ case MAD_UNITS_DECISECONDS:
+ case MAD_UNITS_CENTISECONDS:
+ case MAD_UNITS_MILLISECONDS:
+
+ case MAD_UNITS_8000_HZ:
+ case MAD_UNITS_11025_HZ:
+ case MAD_UNITS_12000_HZ:
+ case MAD_UNITS_16000_HZ:
+ case MAD_UNITS_22050_HZ:
+ case MAD_UNITS_24000_HZ:
+ case MAD_UNITS_32000_HZ:
+ case MAD_UNITS_44100_HZ:
+ case MAD_UNITS_48000_HZ:
+
+ case MAD_UNITS_24_FPS:
+ case MAD_UNITS_25_FPS:
+ case MAD_UNITS_30_FPS:
+ case MAD_UNITS_48_FPS:
+ case MAD_UNITS_50_FPS:
+ case MAD_UNITS_60_FPS:
+ case MAD_UNITS_75_FPS:
+ sprintf(dest, format, mad_timer_count(timer, units), sub);
+ break;
+ }
+}
diff --git a/core/multimedia/opieplayer/libmad/timer.h b/core/multimedia/opieplayer/libmad/timer.h
new file mode 100644
index 0000000..67fe16a
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/timer.h
@@ -0,0 +1,100 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifndef LIBMAD_TIMER_H
+# define LIBMAD_TIMER_H
+
+typedef struct {
+ signed long seconds; /* whole seconds */
+ unsigned long fraction; /* 1/MAD_TIMER_RESOLUTION seconds */
+} mad_timer_t;
+
+extern mad_timer_t const mad_timer_zero;
+
+# define MAD_TIMER_RESOLUTION 352800000UL
+
+enum mad_units {
+ MAD_UNITS_HOURS = -2,
+ MAD_UNITS_MINUTES = -1,
+ MAD_UNITS_SECONDS = 0,
+
+ /* metric units */
+
+ MAD_UNITS_DECISECONDS = 10,
+ MAD_UNITS_CENTISECONDS = 100,
+ MAD_UNITS_MILLISECONDS = 1000,
+
+ /* audio sample units */
+
+ MAD_UNITS_8000_HZ = 8000,
+ MAD_UNITS_11025_HZ = 11025,
+ MAD_UNITS_12000_HZ = 12000,
+
+ MAD_UNITS_16000_HZ = 16000,
+ MAD_UNITS_22050_HZ = 22050,
+ MAD_UNITS_24000_HZ = 24000,
+
+ MAD_UNITS_32000_HZ = 32000,
+ MAD_UNITS_44100_HZ = 44100,
+ MAD_UNITS_48000_HZ = 48000,
+
+ /* video frame/field units */
+
+ MAD_UNITS_24_FPS = 24,
+ MAD_UNITS_25_FPS = 25,
+ MAD_UNITS_30_FPS = 30,
+ MAD_UNITS_48_FPS = 48,
+ MAD_UNITS_50_FPS = 50,
+ MAD_UNITS_60_FPS = 60,
+
+ /* CD audio frames */
+
+ MAD_UNITS_75_FPS = 75,
+
+ /* video drop-frame units */
+
+ MAD_UNITS_23_976_FPS = -24,
+ MAD_UNITS_24_975_FPS = -25,
+ MAD_UNITS_29_97_FPS = -30,
+ MAD_UNITS_47_952_FPS = -48,
+ MAD_UNITS_49_95_FPS = -50,
+ MAD_UNITS_59_94_FPS = -60
+};
+
+# define mad_timer_reset(timer) (*(timer) = mad_timer_zero)
+
+int mad_timer_compare(mad_timer_t, mad_timer_t);
+
+# define mad_timer_sign(timer) mad_timer_compare((timer), mad_timer_zero)
+
+void mad_timer_negate(mad_timer_t *);
+mad_timer_t mad_timer_abs(mad_timer_t);
+
+void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
+void mad_timer_add(mad_timer_t *, mad_timer_t);
+void mad_timer_multiply(mad_timer_t *, signed long);
+
+signed long mad_timer_count(mad_timer_t, enum mad_units);
+unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
+void mad_timer_string(mad_timer_t, char *, char const *,
+ enum mad_units, enum mad_units, unsigned long);
+
+# endif
diff --git a/core/multimedia/opieplayer/libmad/version.c b/core/multimedia/opieplayer/libmad/version.c
new file mode 100644
index 0000000..413d54b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/version.c
@@ -0,0 +1,91 @@
+/*
+ * mad - MPEG audio decoder
+ * Copyright (C) 2000-2001 Robert Leslie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * $Id$
+ */
+
+# ifdef HAVE_CONFIG_H
+# include "libmad_config.h"
+# endif
+
+# include "libmad_global.h"
+
+# include "libmad_version.h"
+
+char const mad_version[] = "MPEG Audio Decoder version " MAD_VERSION;
+char const mad_copyright[] = "Copyright (C) " MAD_PUBLISHYEAR " " MAD_AUTHOR;
+char const mad_author[] = MAD_AUTHOR " <" MAD_EMAIL ">";
+
+char const mad_build[] =
+# if defined(FPM_64BIT)
+ "FPM_64BIT "
+# elif defined(FPM_INTEL)
+ "FPM_INTEL "
+# elif defined(FPM_ARM)
+ "FPM_ARM "
+# elif defined(FPM_MIPS)
+ "FPM_MIPS "
+# elif defined(FPM_SPARC)
+ "FPM_SPARC "
+# elif defined(FPM_PPC)
+ "FPM_PPC "
+# elif defined(FPM_DEFAULT)
+ "FPM_DEFAULT "
+# endif
+
+# if defined(ASO_IMDCT)
+ "ASO_IMDCT "
+# endif
+# if defined(ASO_INTERLEAVE1)
+ "ASO_INTERLEAVE1 "
+# endif
+# if defined(ASO_INTERLEAVE2)
+ "ASO_INTERLEAVE2 "
+# endif
+# if defined(ASO_ZEROCHECK)
+ "ASO_ZEROCHECK "
+# endif
+
+# if defined(OPT_SPEED)
+ "OPT_SPEED "
+# elif defined(OPT_ACCURACY)
+ "OPT_ACCURACY "
+# endif
+
+# if defined(OPT_SSO)
+ "OPT_SSO "
+# endif
+
+# if defined(OPT_DCTO) /* never defined here */
+ "OPT_DCTO "
+# endif
+
+# if defined(OPT_STRICT)
+ "OPT_STRICT "
+# endif
+
+# if defined(EXPERIMENTAL)
+ "EXPERIMENTAL "
+# endif
+
+# if defined(DEBUG)
+ "DEBUG "
+# elif defined(NDEBUG)
+ "NDEBUG "
+# endif
+;
diff --git a/core/multimedia/opieplayer/libmpeg3/.cvsignore b/core/multimedia/opieplayer/libmpeg3/.cvsignore
new file mode 100644
index 0000000..d7bb3c1
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/.cvsignore
@@ -0,0 +1,5 @@
+global_config
+dump
+mpeg3toc
+mpeg3cat
+Makefile
diff --git a/core/multimedia/opieplayer/libmpeg3/COPYING b/core/multimedia/opieplayer/libmpeg3/COPYING
new file mode 100644
index 0000000..60549be
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/core/multimedia/opieplayer/libmpeg3/Makefile.in b/core/multimedia/opieplayer/libmpeg3/Makefile.in
new file mode 100644
index 0000000..1817902
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/Makefile.in
@@ -0,0 +1,774 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB) -DQCONFIG=\"qpe\"
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB) -DQCONFIG=\"qpe\"
+INCPATH = -I$(QPEDIR)/include -I..
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe -lpthread -lm $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/codecs/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = mpeg3plugin
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = libmpeg3plugin.h \
+ libmpeg3pluginimpl.h
+SOURCES = libmpeg3plugin.cpp \
+ libmpeg3pluginimpl.cpp \
+ bitstream.c \
+ libmpeg3.c \
+ mpeg3atrack.c \
+ mpeg3css.c \
+ mpeg3demux.c \
+ mpeg3io.c \
+ mpeg3title.c \
+ mpeg3vtrack.c \
+ audio/ac3.c \
+ audio/bit_allocation.c \
+ audio/dct.c \
+ audio/exponents.c \
+ audio/header.c \
+ audio/layer2.c \
+ audio/layer3.c \
+ audio/mantissa.c \
+ audio/mpeg3audio.c \
+ audio/pcm.c \
+ audio/synthesizers.c \
+ audio/tables.c \
+ video/getpicture.c \
+ video/headers.c \
+ video/idct.c \
+ video/macroblocks.c \
+ video/mmxtest.c \
+ video/motion.c \
+ video/mpeg3video.c \
+ video/output.c \
+ video/reconstruct.c \
+ video/seek.c \
+ video/slice.c \
+ video/vlc.c
+OBJECTS = libmpeg3plugin.o \
+ libmpeg3pluginimpl.o \
+ bitstream.o \
+ libmpeg3.o \
+ mpeg3atrack.o \
+ mpeg3css.o \
+ mpeg3demux.o \
+ mpeg3io.o \
+ mpeg3title.o \
+ mpeg3vtrack.o \
+ audio/ac3.o \
+ audio/bit_allocation.o \
+ audio/dct.o \
+ audio/exponents.o \
+ audio/header.o \
+ audio/layer2.o \
+ audio/layer3.o \
+ audio/mantissa.o \
+ audio/mpeg3audio.o \
+ audio/pcm.o \
+ audio/synthesizers.o \
+ audio/tables.o \
+ video/getpicture.o \
+ video/headers.o \
+ video/idct.o \
+ video/macroblocks.o \
+ video/mmxtest.o \
+ video/motion.o \
+ video/mpeg3video.o \
+ video/output.o \
+ video/reconstruct.o \
+ video/seek.o \
+ video/slice.o \
+ video/vlc.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake libmpeg3.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+libmpeg3plugin.o: libmpeg3plugin.cpp \
+ libmpeg3plugin.h \
+ libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h \
+ ../mediaplayerplugininterface.h
+
+libmpeg3pluginimpl.o: libmpeg3pluginimpl.cpp \
+ libmpeg3plugin.h \
+ libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h \
+ ../mediaplayerplugininterface.h \
+ libmpeg3pluginimpl.h \
+ ../mediaplayerplugininterface.h
+
+bitstream.o: bitstream.c \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h
+
+libmpeg3.o: libmpeg3.c \
+ libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h
+
+mpeg3atrack.o: mpeg3atrack.c \
+ libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h
+
+mpeg3css.o: mpeg3css.c \
+ mpeg3css.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h
+
+mpeg3demux.o: mpeg3demux.c \
+ libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h
+
+mpeg3io.o: mpeg3io.c \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h
+
+mpeg3title.o: mpeg3title.c \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h
+
+mpeg3vtrack.o: mpeg3vtrack.c \
+ libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ mpeg3protos.h
+
+audio/ac3.o: audio/ac3.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h
+
+audio/bit_allocation.o: audio/bit_allocation.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h
+
+audio/dct.o: audio/dct.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h \
+ audio/tables.h \
+ audio/fptables.h
+
+audio/exponents.o: audio/exponents.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h
+
+audio/header.o: audio/header.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/tables.h \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h
+
+audio/layer2.o: audio/layer2.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h \
+ audio/tables.h
+
+audio/layer3.o: audio/layer3.c \
+ audio/huffman.h \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h \
+ audio/tables.h
+
+audio/mantissa.o: audio/mantissa.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h
+
+audio/mpeg3audio.o: audio/mpeg3audio.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h \
+ audio/mpeg3audio.h \
+ audio/tables.h
+
+audio/pcm.o: audio/pcm.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h
+
+audio/synthesizers.o: audio/synthesizers.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h \
+ audio/tables.h
+
+audio/tables.o: audio/tables.c \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ audio/../mpeg3protos.h \
+ audio/tables.h \
+ audio/fptables.h
+
+video/getpicture.o: video/getpicture.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h \
+ video/vlc.h
+
+video/headers.o: video/headers.c \
+ video/../mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h
+
+video/idct.o: video/idct.c \
+ video/idct.h
+
+video/macroblocks.o: video/macroblocks.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h \
+ video/vlc.h
+
+video/mmxtest.o: video/mmxtest.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h
+
+video/motion.o: video/motion.c \
+ video/mpeg3video.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3protos.h \
+ video/vlc.h
+
+video/mpeg3video.o: video/mpeg3video.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h \
+ video/mpeg3videoprotos.h
+
+video/output.o: video/output.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h
+
+video/reconstruct.o: video/reconstruct.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h
+
+video/seek.o: video/seek.c \
+ video/../mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h
+
+video/slice.o: video/slice.c \
+ audio/../libmpeg3.h \
+ mpeg3private.h \
+ mpeg3atrack.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ audio/mpeg3audio.h \
+ audio/ac3.h \
+ audio/mpeg3real.h \
+ audio/../bitstream.h \
+ mpeg3vtrack.h \
+ video/mpeg3video.h \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/../mpeg3protos.h \
+ video/mpeg3video.h \
+ video/mpeg3videoprotos.h
+
+video/vlc.o: video/vlc.c \
+ video/mpeg3video.h \
+ audio/../bitstream.h \
+ mpeg3demux.h \
+ mpeg3title.h \
+ mpeg3io.h \
+ mpeg3css.h \
+ mpeg3private.inc \
+ video/../mpeg3private.inc \
+ video/idct.h \
+ video/slice.h \
+ video/../timecode.h \
+ video/vlc.h
+
+
diff --git a/core/multimedia/opieplayer/libmpeg3/README b/core/multimedia/opieplayer/libmpeg3/README
new file mode 100644
index 0000000..7a2a061
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/README
@@ -0,0 +1,35 @@
+/********************************************************
+ * LibMPEG3
+ * Author: Adam Williams <broadcast@earthling.net>
+ * Page: heroine.linuxbox.com
+ *
+ * libmpeg3 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * libmpeg3 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *******************************************************/
+
+
+/**********************************************************
+ * Credits:
+ *********************************************************/
+
+AC3 decoder:
+
+ Written by Aaron Holtzman (aholtzma@engr.uvic.ca)
+
+
+
+Problems:
+
+ Streams where the multiplexing packet size changes at random.
diff --git a/core/multimedia/opieplayer/libmpeg3/VERSION b/core/multimedia/opieplayer/libmpeg3/VERSION
new file mode 100644
index 0000000..55772e2
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/VERSION
@@ -0,0 +1 @@
+libmpeg3-1.2.1
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/Makefile b/core/multimedia/opieplayer/libmpeg3/audio/Makefile
new file mode 100644
index 0000000..eaa0e0b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/Makefile
@@ -0,0 +1,35 @@
+include ../global_config
+export CFLAGS
+export CFLAGS_lessopt
+
+OBJS = \
+ ac3.o \
+ bit_allocation.o \
+ dct.o \
+ exponents.o \
+ header.o \
+ layer2.o \
+ layer3.o \
+ mantissa.o \
+ mpeg3audio.o \
+ pcm.o \
+ synthesizers.o \
+ tables.o
+
+all: $(OBJS)
+
+dct.o: dct.c
+ $(CC) -c `./c_flags dct.c` -o $@ $<
+
+synthesizers.o: synthesizers.c
+ $(CC) -c `./c_flags synthesizers.c` -o $@ $<
+
+
+.c.o:
+ $(CC) -c `./c_flags` -o $@ $<
+
+.s.o:
+ $(CC) -f elf $*.s
+
+clean:
+ rm -f *.o
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/ac3.c b/core/multimedia/opieplayer/libmpeg3/audio/ac3.c
new file mode 100644
index 0000000..7a3b664
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/ac3.c
@@ -0,0 +1,691 @@
+/*
+ *
+ * ac3.c Copyright (C) Aaron Holtzman - May 1999
+ *
+ *
+ * This file is part of libmpeg3
+ *
+ * libmpeg3 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * libmpeg3 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#define MPEG3AC3_MAGIC_NUMBER 0xdeadbeef
+
+
+int mpeg3_ac3_samplerates[] = { 48000, 44100, 32000 };
+
+struct mpeg3_framesize_s
+{
+ unsigned short bit_rate;
+ unsigned short frm_size[3];
+};
+
+struct mpeg3_framesize_s framesize_codes[] =
+{
+ { 32 ,{64 ,69 ,96 } },
+ { 32 ,{64 ,70 ,96 } },
+ { 40 ,{80 ,87 ,120 } },
+ { 40 ,{80 ,88 ,120 } },
+ { 48 ,{96 ,104 ,144 } },
+ { 48 ,{96 ,105 ,144 } },
+ { 56 ,{112 ,121 ,168 } },
+ { 56 ,{112 ,122 ,168 } },
+ { 64 ,{128 ,139 ,192 } },
+ { 64 ,{128 ,140 ,192 } },
+ { 80 ,{160 ,174 ,240 } },
+ { 80 ,{160 ,175 ,240 } },
+ { 96 ,{192 ,208 ,288 } },
+ { 96 ,{192 ,209 ,288 } },
+ { 112 ,{224 ,243 ,336 } },
+ { 112 ,{224 ,244 ,336 } },
+ { 128 ,{256 ,278 ,384 } },
+ { 128 ,{256 ,279 ,384 } },
+ { 160 ,{320 ,348 ,480 } },
+ { 160 ,{320 ,349 ,480 } },
+ { 192 ,{384 ,417 ,576 } },
+ { 192 ,{384 ,418 ,576 } },
+ { 224 ,{448 ,487 ,672 } },
+ { 224 ,{448 ,488 ,672 } },
+ { 256 ,{512 ,557 ,768 } },
+ { 256 ,{512 ,558 ,768 } },
+ { 320 ,{640 ,696 ,960 } },
+ { 320 ,{640 ,697 ,960 } },
+ { 384 ,{768 ,835 ,1152 } },
+ { 384 ,{768 ,836 ,1152 } },
+ { 448 ,{896 ,975 ,1344 } },
+ { 448 ,{896 ,976 ,1344 } },
+ { 512 ,{1024 ,1114 ,1536 } },
+ { 512 ,{1024 ,1115 ,1536 } },
+ { 576 ,{1152 ,1253 ,1728 } },
+ { 576 ,{1152 ,1254 ,1728 } },
+ { 640 ,{1280 ,1393 ,1920 } },
+ { 640 ,{1280 ,1394 ,1920 } }
+};
+
+/* Audio channel modes */
+short mpeg3_ac3_acmodes[] = {2, 1, 2, 3, 3, 4, 4, 5};
+
+/* Rematrix tables */
+struct rematrix_band_s
+{
+ int start;
+ int end;
+};
+
+struct rematrix_band_s mpeg3_rematrix_band[] =
+{
+ {13, 24},
+ {25, 36},
+ {37, 60},
+ {61, 252}
+};
+
+int mpeg3_min(int x, int y)
+{
+ return (x < y) ? x : y;
+}
+
+int mpeg3_max(int x, int y)
+{
+ return (x > y) ? x : y;
+}
+
+int mpeg3audio_read_ac3_header(mpeg3audio_t *audio)
+{
+ unsigned int code, crc;
+ unsigned int i;
+ mpeg3_ac3bsi_t *bsi = &(audio->ac3_bsi);
+
+/* Get the sync code */
+ code = mpeg3bits_getbits(audio->astream, 16);
+ while(!mpeg3bits_eof(audio->astream) && code != MPEG3_AC3_START_CODE)
+ {
+ code <<= 8;
+ code &= 0xffff;
+ code |= mpeg3bits_getbits(audio->astream, 8);
+ }
+
+ if(mpeg3bits_eof(audio->astream)) return 1;
+
+/* Get crc1 - we don't actually use this data though */
+/* The crc can be the same as the sync code or come after a sync code repeated twice */
+ crc = mpeg3bits_getbits(audio->astream, 16);
+
+/* Got the sync code. Read the entire frame into a buffer if possible. */
+ if(audio->avg_framesize > 0)
+ {
+ if(mpeg3bits_read_buffer(audio->astream, audio->ac3_buffer, audio->framesize - 4))
+ return 1;
+ mpeg3bits_use_ptr(audio->astream, audio->ac3_buffer);
+ }
+
+/* Get the sampling rate code */
+ audio->sampling_frequency_code = mpeg3bits_getbits(audio->astream, 2);
+
+/* Get the frame size code */
+ audio->ac3_framesize_code = mpeg3bits_getbits(audio->astream, 6);
+
+ audio->bitrate = framesize_codes[audio->ac3_framesize_code].bit_rate;
+ audio->avg_framesize = audio->framesize = 2 * framesize_codes[audio->ac3_framesize_code].frm_size[audio->sampling_frequency_code];
+
+/* Check the AC-3 version number */
+ bsi->bsid = mpeg3bits_getbits(audio->astream, 5);
+
+/* Get the audio service provided by the steram */
+ bsi->bsmod = mpeg3bits_getbits(audio->astream, 3);
+
+/* Get the audio coding mode (ie how many channels)*/
+ bsi->acmod = mpeg3bits_getbits(audio->astream, 3);
+
+/* Predecode the number of full bandwidth channels as we use this
+ * number a lot */
+ bsi->nfchans = mpeg3_ac3_acmodes[bsi->acmod];
+ audio->channels = bsi->nfchans;
+
+/* If it is in use, get the centre channel mix level */
+ if((bsi->acmod & 0x1) && (bsi->acmod != 0x1))
+ bsi->cmixlev = mpeg3bits_getbits(audio->astream, 2);
+
+/* If it is in use, get the surround channel mix level */
+ if(bsi->acmod & 0x4)
+ bsi->surmixlev = mpeg3bits_getbits(audio->astream, 2);
+
+/* Get the dolby surround mode if in 2/0 mode */
+ if(bsi->acmod == 0x2)
+ bsi->dsurmod= mpeg3bits_getbits(audio->astream, 2);
+
+/* Is the low frequency effects channel on? */
+ bsi->lfeon = mpeg3bits_getbits(audio->astream, 1);
+
+/* Get the dialogue normalization level */
+ bsi->dialnorm = mpeg3bits_getbits(audio->astream, 5);
+
+/* Does compression gain exist? */
+ bsi->compre = mpeg3bits_getbits(audio->astream, 1);
+ if (bsi->compre)
+ {
+/* Get compression gain */
+ bsi->compr = mpeg3bits_getbits(audio->astream, 8);
+ }
+
+/* Does language code exist? */
+ bsi->langcode = mpeg3bits_getbits(audio->astream, 1);
+ if (bsi->langcode)
+ {
+/* Get langauge code */
+ bsi->langcod = mpeg3bits_getbits(audio->astream, 8);
+ }
+
+/* Does audio production info exist? */
+ bsi->audprodie = mpeg3bits_getbits(audio->astream, 1);
+ if (bsi->audprodie)
+ {
+/* Get mix level */
+ bsi->mixlevel = mpeg3bits_getbits(audio->astream, 5);
+
+/* Get room type */
+ bsi->roomtyp = mpeg3bits_getbits(audio->astream, 2);
+ }
+
+/* If we're in dual mono mode then get some extra info */
+ if (bsi->acmod == 0)
+ {
+/* Get the dialogue normalization level two */
+ bsi->dialnorm2 = mpeg3bits_getbits(audio->astream, 5);
+
+/* Does compression gain two exist? */
+ bsi->compr2e = mpeg3bits_getbits(audio->astream, 1);
+ if (bsi->compr2e)
+ {
+/* Get compression gain two */
+ bsi->compr2 = mpeg3bits_getbits(audio->astream, 8);
+ }
+
+/* Does language code two exist? */
+ bsi->langcod2e = mpeg3bits_getbits(audio->astream, 1);
+ if (bsi->langcod2e)
+ {
+/* Get langauge code two */
+ bsi->langcod2 = mpeg3bits_getbits(audio->astream, 8);
+ }
+
+/* Does audio production info two exist? */
+ bsi->audprodi2e = mpeg3bits_getbits(audio->astream, 1);
+ if (bsi->audprodi2e)
+ {
+/* Get mix level two */
+ bsi->mixlevel2 = mpeg3bits_getbits(audio->astream, 5);
+
+/* Get room type two */
+ bsi->roomtyp2 = mpeg3bits_getbits(audio->astream, 2);
+ }
+ }
+
+/* Get the copyright bit */
+ bsi->copyrightb = mpeg3bits_getbits(audio->astream, 1);
+
+/* Get the original bit */
+ bsi->origbs = mpeg3bits_getbits(audio->astream, 1);
+
+/* Does timecode one exist? */
+ bsi->timecod1e = mpeg3bits_getbits(audio->astream, 1);
+
+ if(bsi->timecod1e)
+ bsi->timecod1 = mpeg3bits_getbits(audio->astream, 14);
+
+/* Does timecode two exist? */
+ bsi->timecod2e = mpeg3bits_getbits(audio->astream, 1);
+
+ if(bsi->timecod2e)
+ bsi->timecod2 = mpeg3bits_getbits(audio->astream, 14);
+
+/* Does addition info exist? */
+ bsi->addbsie = mpeg3bits_getbits(audio->astream, 1);
+
+ if(bsi->addbsie)
+ {
+/* Get how much info is there */
+ bsi->addbsil = mpeg3bits_getbits(audio->astream, 6);
+
+/* Get the additional info */
+ for(i = 0; i < (bsi->addbsil + 1); i++)
+ bsi->addbsi[i] = mpeg3bits_getbits(audio->astream, 8);
+ }
+
+ if(mpeg3bits_eof(audio->astream))
+ {
+ mpeg3bits_use_demuxer(audio->astream);
+ return 1;
+ }
+// return mpeg3bits_error(audio->astream);
+}
+
+int mpeg3audio_read_ac3_audblk(mpeg3audio_t *audio)
+{
+ int i, j;
+ mpeg3_ac3bsi_t *bsi = &(audio->ac3_bsi);
+ mpeg3_ac3audblk_t *audblk = &(audio->ac3_audblk);
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+/* Is this channel an interleaved 256 + 256 block ? */
+ audblk->blksw[i] = mpeg3bits_getbits(audio->astream, 1);
+ }
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+/* Should we dither this channel? */
+ audblk->dithflag[i] = mpeg3bits_getbits(audio->astream, 1);
+ }
+
+/* Does dynamic range control exist? */
+ audblk->dynrnge = mpeg3bits_getbits(audio->astream, 1);
+ if(audblk->dynrnge)
+ {
+/* Get dynamic range info */
+ audblk->dynrng = mpeg3bits_getbits(audio->astream, 8);
+ }
+
+/* If we're in dual mono mode then get the second channel DR info */
+ if(bsi->acmod == 0)
+ {
+/* Does dynamic range control two exist? */
+ audblk->dynrng2e = mpeg3bits_getbits(audio->astream, 1);
+ if (audblk->dynrng2e)
+ {
+/* Get dynamic range info */
+ audblk->dynrng2 = mpeg3bits_getbits(audio->astream, 8);
+ }
+ }
+
+/* Does coupling strategy exist? */
+ audblk->cplstre = mpeg3bits_getbits(audio->astream, 1);
+ if(audblk->cplstre)
+ {
+/* Is coupling turned on? */
+ audblk->cplinu = mpeg3bits_getbits(audio->astream, 1);
+ if(audblk->cplinu)
+ {
+ for(i = 0; i < bsi->nfchans; i++)
+ audblk->chincpl[i] = mpeg3bits_getbits(audio->astream, 1);
+
+ if(bsi->acmod == 0x2)
+ audblk->phsflginu = mpeg3bits_getbits(audio->astream, 1);
+
+ audblk->cplbegf = mpeg3bits_getbits(audio->astream, 4);
+ audblk->cplendf = mpeg3bits_getbits(audio->astream, 4);
+ audblk->ncplsubnd = (audblk->cplendf + 2) - audblk->cplbegf + 1;
+
+/* Calculate the start and end bins of the coupling channel */
+ audblk->cplstrtmant = (audblk->cplbegf * 12) + 37 ;
+ audblk->cplendmant = ((audblk->cplendf + 3) * 12) + 37;
+
+/* The number of combined subbands is ncplsubnd minus each combined band */
+ audblk->ncplbnd = audblk->ncplsubnd;
+
+ for(i = 1; i < audblk->ncplsubnd; i++)
+ {
+ audblk->cplbndstrc[i] = mpeg3bits_getbits(audio->astream, 1);
+ audblk->ncplbnd -= audblk->cplbndstrc[i];
+ }
+ }
+ }
+
+ if(audblk->cplinu)
+ {
+/* Loop through all the channels and get their coupling co-ords */
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ if(!audblk->chincpl[i])
+ continue;
+
+/* Is there new coupling co-ordinate info? */
+ audblk->cplcoe[i] = mpeg3bits_getbits(audio->astream, 1);
+
+ if(audblk->cplcoe[i])
+ {
+ audblk->mstrcplco[i] = mpeg3bits_getbits(audio->astream, 2);
+ for(j = 0; j < audblk->ncplbnd; j++)
+ {
+ audblk->cplcoexp[i][j] = mpeg3bits_getbits(audio->astream, 4);
+ audblk->cplcomant[i][j] = mpeg3bits_getbits(audio->astream, 4);
+ }
+ }
+ }
+
+/* If we're in dual mono mode, there's going to be some phase info */
+ if((bsi->acmod == 0x2) && audblk->phsflginu &&
+ (audblk->cplcoe[0] || audblk->cplcoe[1]))
+ {
+ for(j = 0; j < audblk->ncplbnd; j++)
+ {
+ audblk->phsflg[j] = mpeg3bits_getbits(audio->astream, 1);
+ }
+ }
+ }
+
+/* If we're in dual mono mode, there may be a rematrix strategy */
+ if(bsi->acmod == 0x2)
+ {
+ audblk->rematstr = mpeg3bits_getbits(audio->astream, 1);
+ if(audblk->rematstr)
+ {
+ if (audblk->cplinu == 0)
+ {
+ for(i = 0; i < 4; i++)
+ audblk->rematflg[i] = mpeg3bits_getbits(audio->astream, 1);
+ }
+ if((audblk->cplbegf > 2) && audblk->cplinu)
+ {
+ for(i = 0; i < 4; i++)
+ audblk->rematflg[i] = mpeg3bits_getbits(audio->astream, 1);
+ }
+ if((audblk->cplbegf <= 2) && audblk->cplinu)
+ {
+ for(i = 0; i < 3; i++)
+ audblk->rematflg[i] = mpeg3bits_getbits(audio->astream, 1);
+ }
+ if((audblk->cplbegf == 0) && audblk->cplinu)
+ for(i = 0; i < 2; i++)
+ audblk->rematflg[i] = mpeg3bits_getbits(audio->astream, 1);
+
+ }
+ }
+
+ if (audblk->cplinu)
+ {
+/* Get the coupling channel exponent strategy */
+ audblk->cplexpstr = mpeg3bits_getbits(audio->astream, 2);
+
+ if(audblk->cplexpstr == 0)
+ audblk->ncplgrps = 0;
+ else
+ audblk->ncplgrps = (audblk->cplendmant - audblk->cplstrtmant) /
+ (3 << (audblk->cplexpstr - 1));
+
+ }
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ audblk->chexpstr[i] = mpeg3bits_getbits(audio->astream, 2);
+ }
+
+/* Get the exponent strategy for lfe channel */
+ if(bsi->lfeon)
+ audblk->lfeexpstr = mpeg3bits_getbits(audio->astream, 1);
+
+/* Determine the bandwidths of all the fbw channels */
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ unsigned short grp_size;
+
+ if(audblk->chexpstr[i] != MPEG3_EXP_REUSE)
+ {
+ if (audblk->cplinu && audblk->chincpl[i])
+ {
+ audblk->endmant[i] = audblk->cplstrtmant;
+ }
+ else
+ {
+ audblk->chbwcod[i] = mpeg3bits_getbits(audio->astream, 6);
+ audblk->endmant[i] = ((audblk->chbwcod[i] + 12) * 3) + 37;
+ }
+
+/* Calculate the number of exponent groups to fetch */
+ grp_size = 3 * (1 << (audblk->chexpstr[i] - 1));
+ audblk->nchgrps[i] = (audblk->endmant[i] - 1 + (grp_size - 3)) / grp_size;
+ }
+ }
+
+/* Get the coupling exponents if they exist */
+ if(audblk->cplinu && (audblk->cplexpstr != MPEG3_EXP_REUSE))
+ {
+ audblk->cplabsexp = mpeg3bits_getbits(audio->astream, 4);
+ for(i = 0; i< audblk->ncplgrps; i++)
+ audblk->cplexps[i] = mpeg3bits_getbits(audio->astream, 7);
+ }
+
+/* Get the fwb channel exponents */
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ if(audblk->chexpstr[i] != MPEG3_EXP_REUSE)
+ {
+ audblk->exps[i][0] = mpeg3bits_getbits(audio->astream, 4);
+ for(j = 1; j <= audblk->nchgrps[i]; j++)
+ audblk->exps[i][j] = mpeg3bits_getbits(audio->astream, 7);
+ audblk->gainrng[i] = mpeg3bits_getbits(audio->astream, 2);
+ }
+ }
+
+/* Get the lfe channel exponents */
+ if(bsi->lfeon && (audblk->lfeexpstr != MPEG3_EXP_REUSE))
+ {
+ audblk->lfeexps[0] = mpeg3bits_getbits(audio->astream, 4);
+ audblk->lfeexps[1] = mpeg3bits_getbits(audio->astream, 7);
+ audblk->lfeexps[2] = mpeg3bits_getbits(audio->astream, 7);
+ }
+
+/* Get the parametric bit allocation parameters */
+ audblk->baie = mpeg3bits_getbits(audio->astream, 1);
+
+ if(audblk->baie)
+ {
+ audblk->sdcycod = mpeg3bits_getbits(audio->astream, 2);
+ audblk->fdcycod = mpeg3bits_getbits(audio->astream, 2);
+ audblk->sgaincod = mpeg3bits_getbits(audio->astream, 2);
+ audblk->dbpbcod = mpeg3bits_getbits(audio->astream, 2);
+ audblk->floorcod = mpeg3bits_getbits(audio->astream, 3);
+ }
+
+
+/* Get the SNR off set info if it exists */
+ audblk->snroffste = mpeg3bits_getbits(audio->astream, 1);
+
+ if(audblk->snroffste)
+ {
+ audblk->csnroffst = mpeg3bits_getbits(audio->astream, 6);
+
+ if(audblk->cplinu)
+ {
+ audblk->cplfsnroffst = mpeg3bits_getbits(audio->astream, 4);
+ audblk->cplfgaincod = mpeg3bits_getbits(audio->astream, 3);
+ }
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ audblk->fsnroffst[i] = mpeg3bits_getbits(audio->astream, 4);
+ audblk->fgaincod[i] = mpeg3bits_getbits(audio->astream, 3);
+ }
+ if(bsi->lfeon)
+ {
+
+ audblk->lfefsnroffst = mpeg3bits_getbits(audio->astream, 4);
+ audblk->lfefgaincod = mpeg3bits_getbits(audio->astream, 3);
+ }
+ }
+
+/* Get coupling leakage info if it exists */
+ if(audblk->cplinu)
+ {
+ audblk->cplleake = mpeg3bits_getbits(audio->astream, 1);
+
+ if(audblk->cplleake)
+ {
+ audblk->cplfleak = mpeg3bits_getbits(audio->astream, 3);
+ audblk->cplsleak = mpeg3bits_getbits(audio->astream, 3);
+ }
+ }
+
+/* Get the delta bit alloaction info */
+ audblk->deltbaie = mpeg3bits_getbits(audio->astream, 1);
+
+ if(audblk->deltbaie)
+ {
+ if(audblk->cplinu)
+ audblk->cpldeltbae = mpeg3bits_getbits(audio->astream, 2);
+
+ for(i = 0; i < bsi->nfchans; i++)
+ audblk->deltbae[i] = mpeg3bits_getbits(audio->astream, 2);
+
+ if (audblk->cplinu && (audblk->cpldeltbae == DELTA_BIT_NEW))
+ {
+ audblk->cpldeltnseg = mpeg3bits_getbits(audio->astream, 3);
+ for(i = 0; i < audblk->cpldeltnseg + 1; i++)
+ {
+ audblk->cpldeltoffst[i] = mpeg3bits_getbits(audio->astream, 5);
+ audblk->cpldeltlen[i] = mpeg3bits_getbits(audio->astream, 4);
+ audblk->cpldeltba[i] = mpeg3bits_getbits(audio->astream, 3);
+ }
+ }
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ if (audblk->deltbae[i] == DELTA_BIT_NEW)
+ {
+ audblk->deltnseg[i] = mpeg3bits_getbits(audio->astream, 3);
+ for(j = 0; j < audblk->deltnseg[i] + 1; j++)
+ {
+ audblk->deltoffst[i][j] = mpeg3bits_getbits(audio->astream, 5);
+ audblk->deltlen[i][j] = mpeg3bits_getbits(audio->astream, 4);
+ audblk->deltba[i][j] = mpeg3bits_getbits(audio->astream, 3);
+ }
+ }
+ }
+ }
+
+/* Check to see if there's any dummy info to get */
+ if((audblk->skiple = mpeg3bits_getbits(audio->astream, 1)))
+ {
+ unsigned int skip_data;
+ audblk->skipl = mpeg3bits_getbits(audio->astream, 9);
+ for(i = 0; i < audblk->skipl ; i++)
+ {
+ skip_data = mpeg3bits_getbits(audio->astream, 8);
+ }
+ }
+
+ return mpeg3bits_error(audio->astream);
+}
+
+
+/* This routine simply does stereo rematrixing for the 2 channel
+ * stereo mode */
+int mpeg3audio_ac3_rematrix(mpeg3_ac3audblk_t *audblk,
+ mpeg3ac3_stream_samples_t samples)
+{
+ int num_bands;
+ int start;
+ int end;
+ int i, j;
+ mpeg3_real_t left, right;
+
+ if(audblk->cplinu || audblk->cplbegf > 2)
+ num_bands = 4;
+ else if (audblk->cplbegf > 0)
+ num_bands = 3;
+ else
+ num_bands = 2;
+
+ for(i = 0; i < num_bands; i++)
+ {
+ if(!audblk->rematflg[i])
+ continue;
+
+ start = mpeg3_rematrix_band[i].start;
+ end = mpeg3_min(mpeg3_rematrix_band[i].end, 12 * audblk->cplbegf + 36);
+
+ for(j = start; j < end; j++)
+ {
+ left = samples[0][j] + samples[1][j];
+ right = samples[0][j] - samples[1][j];
+ samples[0][j] = left;
+ samples[1][j] = right;
+ }
+ }
+ return 0;
+}
+
+
+int mpeg3audio_ac3_reset_frame(mpeg3audio_t *audio)
+{
+ memset(&audio->ac3_bit_allocation, 0, sizeof(mpeg3_ac3_bitallocation_t));
+ memset(&audio->ac3_mantissa, 0, sizeof(mpeg3_ac3_mantissa_t));
+ memset(&audio->ac3_audblk, 0, sizeof(mpeg3_ac3audblk_t));
+
+ return 0;
+}
+
+int mpeg3audio_do_ac3(mpeg3audio_t *audio)
+{
+ int result = 0, i;
+
+/* Reset the coefficients and exponents */
+ mpeg3audio_ac3_reset_frame(audio);
+
+ for(i = 0; i < 6 && !result; i++)
+ {
+ memset(audio->ac3_samples, 0, sizeof(mpeg3_real_t) * 256 * (audio->ac3_bsi.nfchans + audio->ac3_bsi.lfeon));
+/* Extract most of the audblk info from the bitstream
+ * (minus the mantissas */
+ result |= mpeg3audio_read_ac3_audblk(audio);
+
+/* Take the differential exponent data and turn it into
+ * absolute exponents */
+ if(!result) result |= mpeg3audio_ac3_exponent_unpack(audio,
+ &(audio->ac3_bsi),
+ &(audio->ac3_audblk));
+
+/* Figure out how many bits per mantissa */
+ if(!result) result |= mpeg3audio_ac3_bit_allocate(audio,
+ audio->sampling_frequency_code,
+ &(audio->ac3_bsi),
+ &(audio->ac3_audblk));
+
+/* Extract the mantissas from the data stream */
+ if(!result) result |= mpeg3audio_ac3_coeff_unpack(audio,
+ &(audio->ac3_bsi),
+ &(audio->ac3_audblk),
+ audio->ac3_samples);
+
+ if(audio->ac3_bsi.acmod == 0x2)
+ if(!result) result |= mpeg3audio_ac3_rematrix(&(audio->ac3_audblk),
+ audio->ac3_samples);
+
+/* Convert the frequency data into time samples */
+ if(!result) result |= mpeg3audio_ac3_imdct(audio,
+ &(audio->ac3_bsi),
+ &(audio->ac3_audblk),
+ audio->ac3_samples);
+
+ if(audio->pcm_point / audio->channels >= audio->pcm_allocated - MPEG3AUDIO_PADDING * audio->channels)
+ {
+/* Need more room */
+ mpeg3audio_replace_buffer(audio, audio->pcm_allocated + MPEG3AUDIO_PADDING * audio->channels);
+ }
+ }
+
+ mpeg3bits_use_demuxer(audio->astream);
+
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/ac3.h b/core/multimedia/opieplayer/libmpeg3/audio/ac3.h
new file mode 100644
index 0000000..9161c36
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/ac3.h
@@ -0,0 +1,308 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef AC3_H
+#define AC3_H
+
+#include "mpeg3real.h"
+
+#define MAX_AC3_FRAMESIZE 1920 * 2 + 512
+
+extern int mpeg3_ac3_samplerates[3];
+
+/* Exponent strategy constants */
+#define MPEG3_EXP_REUSE (0)
+#define MPEG3_EXP_D15 (1)
+#define MPEG3_EXP_D25 (2)
+#define MPEG3_EXP_D45 (3)
+
+/* Delta bit allocation constants */
+#define DELTA_BIT_REUSE (0)
+#define DELTA_BIT_NEW (1)
+#define DELTA_BIT_NONE (2)
+#define DELTA_BIT_RESERVED (3)
+
+
+typedef mpeg3_real_t mpeg3ac3_stream_samples_t[6][256];
+
+typedef struct
+{
+/* Bit stream identification == 0x8 */
+ int bsid;
+/* Bit stream mode */
+ int bsmod;
+/* Audio coding mode */
+ int acmod;
+/* If we're using the centre channel then */
+/* centre mix level */
+ int cmixlev;
+/* If we're using the surround channel then */
+/* surround mix level */
+ int surmixlev;
+/* If we're in 2/0 mode then */
+/* Dolby surround mix level - NOT USED - */
+ int dsurmod;
+/* Low frequency effects on */
+ int lfeon;
+/* Dialogue Normalization level */
+ int dialnorm;
+/* Compression exists */
+ int compre;
+/* Compression level */
+ int compr;
+/* Language code exists */
+ int langcode;
+/* Language code */
+ int langcod;
+/* Audio production info exists*/
+ unsigned int audprodie;
+ int mixlevel;
+ int roomtyp;
+/* If we're in dual mono mode (acmod == 0) then extra stuff */
+ int dialnorm2;
+ int compr2e;
+ int compr2;
+ int langcod2e;
+ int langcod2;
+ int audprodi2e;
+ int mixlevel2;
+ int roomtyp2;
+/* Copyright bit */
+ int copyrightb;
+/* Original bit */
+ int origbs;
+/* Timecode 1 exists */
+ int timecod1e;
+/* Timecode 1 */
+ unsigned int timecod1;
+/* Timecode 2 exists */
+ int timecod2e;
+/* Timecode 2 */
+ unsigned int timecod2;
+/* Additional bit stream info exists */
+ int addbsie;
+/* Additional bit stream length - 1 (in bytes) */
+ int addbsil;
+/* Additional bit stream information (max 64 bytes) */
+ unsigned char addbsi[64];
+
+/* Information not in the AC-3 bitstream, but derived */
+/* Number of channels (excluding LFE)
+ * Derived from acmod */
+ int nfchans;
+} mpeg3_ac3bsi_t;
+
+typedef struct
+{
+/* block switch bit indexed by channel num */
+ unsigned short blksw[5];
+/* dither enable bit indexed by channel num */
+ unsigned short dithflag[5];
+/* dynamic range gain exists */
+ int dynrnge;
+/* dynamic range gain */
+ int dynrng;
+/* if acmod==0 then */
+/* dynamic range 2 gain exists */
+ int dynrng2e;
+/* dynamic range 2 gain */
+ int dynrng2;
+/* coupling strategy exists */
+ int cplstre;
+/* coupling in use */
+ int cplinu;
+/* channel coupled */
+ unsigned short chincpl[5];
+/* if acmod==2 then */
+/* Phase flags in use */
+ int phsflginu;
+/* coupling begin frequency code */
+ int cplbegf;
+/* coupling end frequency code */
+ int cplendf;
+/* coupling band structure bits */
+ unsigned short cplbndstrc[18];
+/* Do coupling co-ords exist for this channel? */
+ unsigned short cplcoe[5];
+/* Master coupling co-ordinate */
+ unsigned short mstrcplco[5];
+/* Per coupling band coupling co-ordinates */
+ unsigned short cplcoexp[5][18];
+ unsigned short cplcomant[5][18];
+/* Phase flags for dual mono */
+ unsigned short phsflg[18];
+/* Is there a rematrixing strategy */
+ unsigned int rematstr;
+/* Rematrixing bits */
+ unsigned short rematflg[4];
+/* Coupling exponent strategy */
+ int cplexpstr;
+/* Exponent strategy for full bandwidth channels */
+ unsigned short chexpstr[5];
+/* Exponent strategy for lfe channel */
+ int lfeexpstr;
+/* Channel bandwidth for independent channels */
+ unsigned short chbwcod[5];
+/* The absolute coupling exponent */
+ int cplabsexp;
+/* Coupling channel exponents (D15 mode gives 18 * 12 /3 encoded exponents */
+ unsigned short cplexps[18 * 12 / 3];
+/* fbw channel exponents */
+ unsigned short exps[5][252 / 3];
+/* channel gain range */
+ unsigned short gainrng[5];
+/* low frequency exponents */
+ unsigned short lfeexps[3];
+
+/* Bit allocation info */
+ int baie;
+/* Slow decay code */
+ int sdcycod;
+/* Fast decay code */
+ int fdcycod;
+/* Slow gain code */
+ int sgaincod;
+/* dB per bit code */
+ int dbpbcod;
+/* masking floor code */
+ int floorcod;
+
+/* SNR offset info */
+ int snroffste;
+/* coarse SNR offset */
+ int csnroffst;
+/* coupling fine SNR offset */
+ int cplfsnroffst;
+/* coupling fast gain code */
+ int cplfgaincod;
+/* fbw fine SNR offset */
+ unsigned short fsnroffst[5];
+/* fbw fast gain code */
+ unsigned short fgaincod[5];
+/* lfe fine SNR offset */
+ int lfefsnroffst;
+/* lfe fast gain code */
+ int lfefgaincod;
+
+/* Coupling leak info */
+ int cplleake;
+/* coupling fast leak initialization */
+ int cplfleak;
+/* coupling slow leak initialization */
+ int cplsleak;
+
+/* delta bit allocation info */
+ int deltbaie;
+/* coupling delta bit allocation exists */
+ int cpldeltbae;
+/* fbw delta bit allocation exists */
+ unsigned short deltbae[5];
+/* number of cpl delta bit segments */
+ int cpldeltnseg;
+/* coupling delta bit allocation offset */
+ short cpldeltoffst[8];
+/* coupling delta bit allocation length */
+ short cpldeltlen[8];
+/* coupling delta bit allocation length */
+ short cpldeltba[8];
+/* number of delta bit segments */
+ unsigned short deltnseg[5];
+/* fbw delta bit allocation offset */
+ short deltoffst[5][8];
+/* fbw delta bit allocation length */
+ short deltlen[5][8];
+/* fbw delta bit allocation length */
+ short deltba[5][8];
+
+/* skip length exists */
+ int skiple;
+/* skip length */
+ int skipl;
+
+/* channel mantissas */
+ short chmant[5][256];
+
+/* coupling mantissas */
+ unsigned short cplmant[256];
+
+/* coupling mantissas */
+ unsigned short lfemant[7];
+
+/* -- Information not in the bitstream, but derived thereof -- */
+
+/* Number of coupling sub-bands */
+ int ncplsubnd;
+
+/* Number of combined coupling sub-bands
+ * Derived from ncplsubnd and cplbndstrc */
+ int ncplbnd;
+
+/* Number of exponent groups by channel
+ * Derived from strmant, endmant */
+ int nchgrps[5];
+
+/* Number of coupling exponent groups
+ * Derived from cplbegf, cplendf, cplexpstr */
+ int ncplgrps;
+
+/* End mantissa numbers of fbw channels */
+ unsigned short endmant[5];
+
+/* Start and end mantissa numbers for the coupling channel */
+ int cplstrtmant;
+ int cplendmant;
+
+/* Decoded exponent info */
+ unsigned short fbw_exp[5][256];
+ unsigned short cpl_exp[256];
+ unsigned short lfe_exp[7];
+
+/* Bit allocation pointer results */
+ short fbw_bap[5][256];
+/*FIXME figure out exactly how many entries there should be (253-37?) */
+ short cpl_bap[256];
+ short lfe_bap[7];
+} mpeg3_ac3audblk_t;
+
+/* Bit allocation data */
+typedef struct
+{
+ int sdecay;
+ int fdecay;
+ int sgain;
+ int dbknee;
+ int floor;
+ short psd[256];
+ short bndpsd[256];
+ short excite[256];
+ short mask[256];
+} mpeg3_ac3_bitallocation_t;
+
+/* Mantissa data */
+typedef struct
+{
+ unsigned short m_1[3];
+ unsigned short m_2[3];
+ unsigned short m_4[2];
+ unsigned short m_1_pointer;
+ unsigned short m_2_pointer;
+ unsigned short m_4_pointer;
+} mpeg3_ac3_mantissa_t;
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/bit_allocation.c b/core/multimedia/opieplayer/libmpeg3/audio/bit_allocation.c
new file mode 100644
index 0000000..29df7d7
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/bit_allocation.c
@@ -0,0 +1,586 @@
+/*
+ *
+ * Copyright (C) Aaron Holtzman - May 1999
+ *
+ *
+ * This file is part of libmpeg3
+ *
+ * libmpeg3 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * libmpeg3 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include <string.h>
+#include <stdlib.h>
+
+/* Bit allocation tables */
+
+static short mpeg3_slowdec[] = { 0x0f, 0x11, 0x13, 0x15 };
+static short mpeg3_fastdec[] = { 0x3f, 0x53, 0x67, 0x7b };
+static short mpeg3_slowgain[] = { 0x540, 0x4d8, 0x478, 0x410 };
+static short mpeg3_dbpbtab[] = { 0x000, 0x700, 0x900, 0xb00 };
+
+static unsigned short mpeg3_floortab[] = { 0x2f0, 0x2b0, 0x270, 0x230, 0x1f0, 0x170, 0x0f0, 0xf800 };
+static short mpeg3_fastgain[] = { 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x400 };
+
+
+static short mpeg3_bndtab[] =
+{
+ 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, 31,
+ 34, 37, 40, 43, 46, 49, 55, 61, 67, 73,
+ 79, 85, 97, 109, 121, 133, 157, 181, 205, 229
+};
+
+static short mpeg3_bndsz[] =
+{
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
+ 3, 3, 3, 3, 3, 6, 6, 6, 6, 6,
+ 6, 12, 12, 12, 12, 24, 24, 24, 24, 24
+};
+
+static short mpeg3_masktab[] =
+{
+ 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, 28, 28, 29,
+ 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34,
+ 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 37, 37, 37,
+ 37, 37, 37, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 40,
+ 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
+ 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46,
+ 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47,
+ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0
+};
+
+
+static short mpeg3_latab[] =
+{
+ 0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003b, 0x003a, 0x0039,
+ 0x0038, 0x0037, 0x0036, 0x0035, 0x0034, 0x0034, 0x0033, 0x0032,
+ 0x0031, 0x0030, 0x002f, 0x002f, 0x002e, 0x002d, 0x002c, 0x002c,
+ 0x002b, 0x002a, 0x0029, 0x0029, 0x0028, 0x0027, 0x0026, 0x0026,
+ 0x0025, 0x0024, 0x0024, 0x0023, 0x0023, 0x0022, 0x0021, 0x0021,
+ 0x0020, 0x0020, 0x001f, 0x001e, 0x001e, 0x001d, 0x001d, 0x001c,
+ 0x001c, 0x001b, 0x001b, 0x001a, 0x001a, 0x0019, 0x0019, 0x0018,
+ 0x0018, 0x0017, 0x0017, 0x0016, 0x0016, 0x0015, 0x0015, 0x0015,
+ 0x0014, 0x0014, 0x0013, 0x0013, 0x0013, 0x0012, 0x0012, 0x0012,
+ 0x0011, 0x0011, 0x0011, 0x0010, 0x0010, 0x0010, 0x000f, 0x000f,
+ 0x000f, 0x000e, 0x000e, 0x000e, 0x000d, 0x000d, 0x000d, 0x000d,
+ 0x000c, 0x000c, 0x000c, 0x000c, 0x000b, 0x000b, 0x000b, 0x000b,
+ 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0009, 0x0009, 0x0009,
+ 0x0009, 0x0009, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0006, 0x0006,
+ 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0005, 0x0005,
+ 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0004, 0x0004,
+ 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
+ 0x0004, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000
+};
+
+static short mpeg3_hth[][50] =
+{
+ {
+ 0x04d0, 0x04d0, 0x0440, 0x0400, 0x03e0, 0x03c0, 0x03b0, 0x03b0,
+ 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, 0x0390,
+ 0x0380, 0x0380, 0x0370, 0x0370, 0x0360, 0x0360, 0x0350, 0x0350,
+ 0x0340, 0x0340, 0x0330, 0x0320, 0x0310, 0x0300, 0x02f0, 0x02f0,
+ 0x02f0, 0x02f0, 0x0300, 0x0310, 0x0340, 0x0390, 0x03e0, 0x0420,
+ 0x0460, 0x0490, 0x04a0, 0x0460, 0x0440, 0x0440, 0x0520, 0x0800,
+ 0x0840, 0x0840
+ },
+
+ {
+ 0x04f0, 0x04f0, 0x0460, 0x0410, 0x03e0, 0x03d0, 0x03c0, 0x03b0,
+ 0x03b0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390,
+ 0x0390, 0x0380, 0x0380, 0x0380, 0x0370, 0x0370, 0x0360, 0x0360,
+ 0x0350, 0x0350, 0x0340, 0x0340, 0x0320, 0x0310, 0x0300, 0x02f0,
+ 0x02f0, 0x02f0, 0x02f0, 0x0300, 0x0320, 0x0350, 0x0390, 0x03e0,
+ 0x0420, 0x0450, 0x04a0, 0x0490, 0x0460, 0x0440, 0x0480, 0x0630,
+ 0x0840, 0x0840
+ },
+
+ {
+ 0x0580, 0x0580, 0x04b0, 0x0450, 0x0420, 0x03f0, 0x03e0, 0x03d0,
+ 0x03c0, 0x03b0, 0x03b0, 0x03b0, 0x03a0, 0x03a0, 0x03a0, 0x03a0,
+ 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x0390, 0x0390, 0x0390, 0x0390,
+ 0x0380, 0x0380, 0x0380, 0x0370, 0x0360, 0x0350, 0x0340, 0x0330,
+ 0x0320, 0x0310, 0x0300, 0x02f0, 0x02f0, 0x02f0, 0x0300, 0x0310,
+ 0x0330, 0x0350, 0x03c0, 0x0410, 0x0470, 0x04a0, 0x0460, 0x0440,
+ 0x0450, 0x04e0
+ }
+};
+
+
+static short mpeg3_baptab[] =
+{
+ 0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6,
+ 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10,
+ 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14,
+ 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15
+};
+
+
+inline int logadd(int a, int b)
+{
+ int c;
+ int address;
+
+ c = a - b;
+ address = mpeg3_min((abs(c) >> 1), 255);
+
+ if(c >= 0)
+ return(a + mpeg3_latab[address]);
+ else
+ return(b + mpeg3_latab[address]);
+}
+
+
+int mpeg3audio_ac3_calc_lowcomp(int a, int b0, int b1, int bin)
+{
+ if(bin < 7)
+ {
+ if((b0 + 256) == b1)
+ a = 384;
+ else
+ if(b0 > b1)
+ a = mpeg3_max(0, a - 64);
+ }
+ else if(bin < 20)
+ {
+ if((b0 + 256) == b1)
+ a = 320;
+ else if(b0 > b1)
+ a = mpeg3_max(0, a - 64) ;
+ }
+ else
+ a = mpeg3_max(0, a - 128);
+
+ return(a);
+}
+
+void mpeg3audio_ac3_ba_compute_psd(int start,
+ int end,
+ unsigned short exps[],
+ short psd[],
+ short bndpsd[])
+{
+ int bin,i,j,k;
+ int lastbin = 0;
+
+/* Map the exponents into dBs */
+ for (bin = start; bin < end; bin++)
+ {
+ psd[bin] = (3072 - (exps[bin] << 7));
+ }
+
+/* Integrate the psd function over each bit allocation band */
+ j = start;
+ k = mpeg3_masktab[start];
+
+ do
+ {
+ lastbin = mpeg3_min(mpeg3_bndtab[k] + mpeg3_bndsz[k], end);
+ bndpsd[k] = psd[j];
+ j++;
+
+ for(i = j; i < lastbin; i++)
+ {
+ bndpsd[k] = logadd(bndpsd[k], psd[j]);
+ j++;
+ }
+
+ k++;
+ }while(end > lastbin);
+}
+
+void mpeg3audio_ac3_ba_compute_excitation(mpeg3audio_t *audio,
+ int start,
+ int end,
+ int fgain,
+ int fastleak,
+ int slowleak,
+ int is_lfe,
+ short bndpsd[],
+ short excite[])
+{
+ int bin;
+ int bndstrt;
+ int bndend;
+ int lowcomp = 0;
+ int begin = 0;
+
+/* Compute excitation function */
+ bndstrt = mpeg3_masktab[start];
+ bndend = mpeg3_masktab[end - 1] + 1;
+
+ if(bndstrt == 0) /* For fbw and lfe channels */
+ {
+ lowcomp = mpeg3audio_ac3_calc_lowcomp(lowcomp, bndpsd[0], bndpsd[1], 0);
+ excite[0] = bndpsd[0] - fgain - lowcomp;
+ lowcomp = mpeg3audio_ac3_calc_lowcomp(lowcomp, bndpsd[1], bndpsd[2], 1);
+ excite[1] = bndpsd[1] - fgain - lowcomp;
+ begin = 7 ;
+
+/* Note: Do not call mpeg3audio_ac3_calc_lowcomp() for the last band of the lfe channel, (bin = 6) */
+ for (bin = 2; bin < 7; bin++)
+ {
+ if(!(is_lfe && (bin == 6)))
+ lowcomp = mpeg3audio_ac3_calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin);
+ fastleak = bndpsd[bin] - fgain;
+ slowleak = bndpsd[bin] - audio->ac3_bit_allocation.sgain;
+ excite[bin] = fastleak - lowcomp;
+
+ if(!(is_lfe && (bin == 6)))
+ {
+ if(bndpsd[bin] <= bndpsd[bin+1])
+ {
+ begin = bin + 1 ;
+ break;
+ }
+ }
+ }
+
+ for (bin = begin; bin < mpeg3_min(bndend, 22); bin++)
+ {
+ if (!(is_lfe && (bin == 6)))
+ lowcomp = mpeg3audio_ac3_calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin);
+ fastleak -= audio->ac3_bit_allocation.fdecay;
+ fastleak = mpeg3_max(fastleak, bndpsd[bin] - fgain);
+ slowleak -= audio->ac3_bit_allocation.sdecay;
+ slowleak = mpeg3_max(slowleak, bndpsd[bin] - audio->ac3_bit_allocation.sgain);
+ excite[bin] = mpeg3_max(fastleak - lowcomp, slowleak);
+ }
+ begin = 22;
+ }
+ else /* For coupling channel */
+ {
+ begin = bndstrt;
+ }
+
+ for (bin = begin; bin < bndend; bin++)
+ {
+ fastleak -= audio->ac3_bit_allocation.fdecay;
+ fastleak = mpeg3_max(fastleak, bndpsd[bin] - fgain);
+ slowleak -= audio->ac3_bit_allocation.sdecay;
+ slowleak = mpeg3_max(slowleak, bndpsd[bin] - audio->ac3_bit_allocation.sgain);
+ excite[bin] = mpeg3_max(fastleak, slowleak) ;
+ }
+}
+
+void mpeg3audio_ac3_ba_compute_mask(mpeg3audio_t *audio,
+ int start,
+ int end,
+ int fscod,
+ int deltbae,
+ int deltnseg,
+ short deltoffst[],
+ short deltba[],
+ short deltlen[],
+ short excite[],
+ short mask[])
+{
+ int bin, k;
+ int bndstrt;
+ int bndend;
+ int delta;
+
+ bndstrt = mpeg3_masktab[start];
+ bndend = mpeg3_masktab[end - 1] + 1;
+
+/* Compute the masking curve */
+
+ for (bin = bndstrt; bin < bndend; bin++)
+ {
+ if (audio->ac3_bit_allocation.bndpsd[bin] < audio->ac3_bit_allocation.dbknee)
+ {
+ excite[bin] += ((audio->ac3_bit_allocation.dbknee - audio->ac3_bit_allocation.bndpsd[bin]) >> 2);
+ }
+ mask[bin] = mpeg3_max(excite[bin], mpeg3_hth[fscod][bin]);
+ }
+
+/* Perform delta bit modulation if necessary */
+ if ((deltbae == DELTA_BIT_REUSE) || (deltbae == DELTA_BIT_NEW))
+ {
+ int band = 0;
+ int seg = 0;
+
+ for (seg = 0; seg < deltnseg + 1; seg++)
+ {
+ band += deltoffst[seg];
+ if (deltba[seg] >= 4)
+ {
+ delta = (deltba[seg] - 3) << 7;
+ }
+ else
+ {
+ delta = (deltba[seg] - 4) << 7;
+ }
+
+ for (k = 0; k < deltlen[seg]; k++)
+ {
+ mask[band] += delta;
+ band++;
+ }
+ }
+ }
+}
+
+void mpeg3audio_ac3_ba_compute_bap(mpeg3audio_t *audio,
+ int start,
+ int end,
+ int snroffset,
+ short psd[],
+ short mask[],
+ short bap[])
+{
+ int i, j, k;
+ short lastbin = 0;
+ short address = 0;
+
+/* Compute the bit allocation pointer for each bin */
+ i = start;
+ j = mpeg3_masktab[start];
+
+ do
+ {
+ lastbin = mpeg3_min(mpeg3_bndtab[j] + mpeg3_bndsz[j], end);
+ mask[j] -= snroffset;
+ mask[j] -= audio->ac3_bit_allocation.floor;
+
+ if(mask[j] < 0)
+ mask[j] = 0;
+
+ mask[j] &= 0x1fe0;
+ mask[j] += audio->ac3_bit_allocation.floor;
+ for(k = i; k < lastbin; k++)
+ {
+ address = (psd[i] - mask[j]) >> 5;
+ address = mpeg3_min(63, mpeg3_max(0, address));
+ bap[i] = mpeg3_baptab[address];
+ i++;
+ }
+ j++;
+ }while (end > lastbin);
+}
+
+int mpeg3audio_ac3_bit_allocate(mpeg3audio_t *audio,
+ unsigned int fscod,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk)
+{
+ int result = 0;
+ int i;
+ int fgain;
+ int snroffset;
+ int start;
+ int end;
+ int fastleak;
+ int slowleak;
+
+/*printf("mpeg3audio_ac3_bit_allocate %d %d %d %d %d\n", audblk->sdcycod, audblk->fdcycod, audblk->sgaincod, audblk->dbpbcod, audblk->floorcod); */
+/* Only perform bit_allocation if the exponents have changed or we
+ * have new sideband information */
+ if(audblk->chexpstr[0] == 0 && audblk->chexpstr[1] == 0 &&
+ audblk->chexpstr[2] == 0 && audblk->chexpstr[3] == 0 &&
+ audblk->chexpstr[4] == 0 && audblk->cplexpstr == 0 &&
+ audblk->lfeexpstr == 0 && audblk->baie == 0 &&
+ audblk->snroffste == 0 && audblk->deltbaie == 0)
+ return 0;
+
+/* Do some setup before we do the bit alloc */
+ audio->ac3_bit_allocation.sdecay = mpeg3_slowdec[audblk->sdcycod];
+ audio->ac3_bit_allocation.fdecay = mpeg3_fastdec[audblk->fdcycod];
+ audio->ac3_bit_allocation.sgain = mpeg3_slowgain[audblk->sgaincod];
+ audio->ac3_bit_allocation.dbknee = mpeg3_dbpbtab[audblk->dbpbcod];
+ audio->ac3_bit_allocation.floor = mpeg3_floortab[audblk->floorcod];
+
+/* if all the SNR offset constants are zero then the whole block is zero */
+ if(!audblk->csnroffst && !audblk->fsnroffst[0] &&
+ !audblk->fsnroffst[1] && !audblk->fsnroffst[2] &&
+ !audblk->fsnroffst[3] && !audblk->fsnroffst[4] &&
+ !audblk->cplfsnroffst && !audblk->lfefsnroffst)
+ {
+ memset(audblk->fbw_bap, 0, sizeof(short) * 256 * 5);
+ memset(audblk->cpl_bap, 0, sizeof(short) * 256);
+ memset(audblk->lfe_bap, 0, sizeof(short) * 7);
+ return 0;
+ }
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ start = 0;
+ end = audblk->endmant[i];
+ fgain = mpeg3_fastgain[audblk->fgaincod[i]];
+ snroffset = (((audblk->csnroffst - 15) << 4) + audblk->fsnroffst[i]) << 2 ;
+ fastleak = 0;
+ slowleak = 0;
+
+ mpeg3audio_ac3_ba_compute_psd(start,
+ end,
+ audblk->fbw_exp[i],
+ audio->ac3_bit_allocation.psd,
+ audio->ac3_bit_allocation.bndpsd);
+
+ mpeg3audio_ac3_ba_compute_excitation(audio,
+ start,
+ end ,
+ fgain,
+ fastleak,
+ slowleak,
+ 0,
+ audio->ac3_bit_allocation.bndpsd,
+ audio->ac3_bit_allocation.excite);
+
+ mpeg3audio_ac3_ba_compute_mask(audio,
+ start,
+ end,
+ fscod,
+ audblk->deltbae[i],
+ audblk->deltnseg[i],
+ audblk->deltoffst[i],
+ audblk->deltba[i],
+ audblk->deltlen[i],
+ audio->ac3_bit_allocation.excite,
+ audio->ac3_bit_allocation.mask);
+
+ mpeg3audio_ac3_ba_compute_bap(audio,
+ start,
+ end,
+ snroffset,
+ audio->ac3_bit_allocation.psd,
+ audio->ac3_bit_allocation.mask,
+ audblk->fbw_bap[i]);
+ }
+
+ if(audblk->cplinu)
+ {
+ start = audblk->cplstrtmant;
+ end = audblk->cplendmant;
+ fgain = mpeg3_fastgain[audblk->cplfgaincod];
+ snroffset = (((audblk->csnroffst - 15) << 4) + audblk->cplfsnroffst) << 2 ;
+ fastleak = (audblk->cplfleak << 8) + 768;
+ slowleak = (audblk->cplsleak << 8) + 768;
+
+ mpeg3audio_ac3_ba_compute_psd(start,
+ end,
+ audblk->cpl_exp,
+ audio->ac3_bit_allocation.psd,
+ audio->ac3_bit_allocation.bndpsd);
+
+ mpeg3audio_ac3_ba_compute_excitation(audio,
+ start,
+ end ,
+ fgain,
+ fastleak,
+ slowleak,
+ 0,
+ audio->ac3_bit_allocation.bndpsd,
+ audio->ac3_bit_allocation.excite);
+
+ mpeg3audio_ac3_ba_compute_mask(audio,
+ start,
+ end,
+ fscod,
+ audblk->cpldeltbae,
+ audblk->cpldeltnseg,
+ audblk->cpldeltoffst,
+ audblk->cpldeltba,
+ audblk->cpldeltlen,
+ audio->ac3_bit_allocation.excite,
+ audio->ac3_bit_allocation.mask);
+
+ mpeg3audio_ac3_ba_compute_bap(audio,
+ start,
+ end,
+ snroffset,
+ audio->ac3_bit_allocation.psd,
+ audio->ac3_bit_allocation.mask,
+ audblk->cpl_bap);
+ }
+
+ if(bsi->lfeon)
+ {
+ start = 0;
+ end = 7;
+ fgain = mpeg3_fastgain[audblk->lfefgaincod];
+ snroffset = (((audblk->csnroffst - 15) << 4) + audblk->lfefsnroffst) << 2 ;
+ fastleak = 0;
+ slowleak = 0;
+
+ mpeg3audio_ac3_ba_compute_psd(start,
+ end,
+ audblk->lfe_exp,
+ audio->ac3_bit_allocation.psd,
+ audio->ac3_bit_allocation.bndpsd);
+
+ mpeg3audio_ac3_ba_compute_excitation(audio,
+ start,
+ end ,
+ fgain,
+ fastleak,
+ slowleak,
+ 1,
+ audio->ac3_bit_allocation.bndpsd,
+ audio->ac3_bit_allocation.excite);
+
+/* Perform no delta bit allocation for lfe */
+ mpeg3audio_ac3_ba_compute_mask(audio,
+ start,
+ end,
+ fscod,
+ 2,
+ 0,
+ 0,
+ 0,
+ 0,
+ audio->ac3_bit_allocation.excite,
+ audio->ac3_bit_allocation.mask);
+
+ mpeg3audio_ac3_ba_compute_bap(audio,
+ start,
+ end,
+ snroffset,
+ audio->ac3_bit_allocation.psd,
+ audio->ac3_bit_allocation.mask,
+ audblk->lfe_bap);
+ }
+
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/c_flags b/core/multimedia/opieplayer/libmpeg3/audio/c_flags
new file mode 100755
index 0000000..d7943d0
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/c_flags
@@ -0,0 +1 @@
+echo $CFLAGS
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/dct.c b/core/multimedia/opieplayer/libmpeg3/audio/dct.c
new file mode 100644
index 0000000..1fd52ce
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/dct.c
@@ -0,0 +1,1135 @@
+/*
+ *
+ * This file is part of libmpeg3
+ *
+ * libmpeg3 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * libmpeg3 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/*
+ * Discrete Cosine Tansform (DCT) for subband synthesis
+ * optimized for machines with no auto-increment.
+ * The performance is highly compiler dependend. Maybe
+ * the dct64.c version for 'normal' processor may be faster
+ * even for Intel processors.
+ */
+
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "tables.h"
+
+#include <math.h>
+
+int mpeg3audio_dct64_1(mpeg3_real_t *out0, mpeg3_real_t *out1, mpeg3_real_t *b1, mpeg3_real_t *b2, mpeg3_real_t *samples)
+{
+ register mpeg3_real_t *costab = mpeg3_pnts[0];
+
+ b1[0x00] = samples[0x00] + samples[0x1F];
+ b1[0x01] = samples[0x01] + samples[0x1E];
+ b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0];
+ b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1];
+
+ b1[0x02] = samples[0x02] + samples[0x1D];
+ b1[0x03] = samples[0x03] + samples[0x1C];
+ b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2];
+ b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3];
+
+ b1[0x04] = samples[0x04] + samples[0x1B];
+ b1[0x05] = samples[0x05] + samples[0x1A];
+ b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4];
+ b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5];
+
+ b1[0x06] = samples[0x06] + samples[0x19];
+ b1[0x07] = samples[0x07] + samples[0x18];
+ b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6];
+ b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7];
+
+ b1[0x08] = samples[0x08] + samples[0x17];
+ b1[0x09] = samples[0x09] + samples[0x16];
+ b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8];
+ b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9];
+
+ b1[0x0A] = samples[0x0A] + samples[0x15];
+ b1[0x0B] = samples[0x0B] + samples[0x14];
+ b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA];
+ b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB];
+
+ b1[0x0C] = samples[0x0C] + samples[0x13];
+ b1[0x0D] = samples[0x0D] + samples[0x12];
+ b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC];
+ b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD];
+
+ b1[0x0E] = samples[0x0E] + samples[0x11];
+ b1[0x0F] = samples[0x0F] + samples[0x10];
+ b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE];
+ b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF];
+
+ costab = mpeg3_pnts[1];
+
+ b2[0x00] = b1[0x00] + b1[0x0F];
+ b2[0x01] = b1[0x01] + b1[0x0E];
+ b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0];
+ b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1];
+
+ b2[0x02] = b1[0x02] + b1[0x0D];
+ b2[0x03] = b1[0x03] + b1[0x0C];
+ b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2];
+ b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3];
+
+ b2[0x04] = b1[0x04] + b1[0x0B];
+ b2[0x05] = b1[0x05] + b1[0x0A];
+ b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4];
+ b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5];
+
+ b2[0x06] = b1[0x06] + b1[0x09];
+ b2[0x07] = b1[0x07] + b1[0x08];
+ b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6];
+ b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7];
+
+ /* */
+
+ b2[0x10] = b1[0x10] + b1[0x1F];
+ b2[0x11] = b1[0x11] + b1[0x1E];
+ b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0];
+ b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1];
+
+ b2[0x12] = b1[0x12] + b1[0x1D];
+ b2[0x13] = b1[0x13] + b1[0x1C];
+ b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2];
+ b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3];
+
+ b2[0x14] = b1[0x14] + b1[0x1B];
+ b2[0x15] = b1[0x15] + b1[0x1A];
+ b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4];
+ b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5];
+
+ b2[0x16] = b1[0x16] + b1[0x19];
+ b2[0x17] = b1[0x17] + b1[0x18];
+ b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6];
+ b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7];
+
+ costab = mpeg3_pnts[2];
+
+ b1[0x00] = b2[0x00] + b2[0x07];
+ b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0];
+ b1[0x01] = b2[0x01] + b2[0x06];
+ b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1];
+ b1[0x02] = b2[0x02] + b2[0x05];
+ b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2];
+ b1[0x03] = b2[0x03] + b2[0x04];
+ b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3];
+
+ b1[0x08] = b2[0x08] + b2[0x0F];
+ b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0];
+ b1[0x09] = b2[0x09] + b2[0x0E];
+ b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1];
+ b1[0x0A] = b2[0x0A] + b2[0x0D];
+ b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2];
+ b1[0x0B] = b2[0x0B] + b2[0x0C];
+ b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3];
+
+ b1[0x10] = b2[0x10] + b2[0x17];
+ b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0];
+ b1[0x11] = b2[0x11] + b2[0x16];
+ b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1];
+ b1[0x12] = b2[0x12] + b2[0x15];
+ b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2];
+ b1[0x13] = b2[0x13] + b2[0x14];
+ b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3];
+
+ b1[0x18] = b2[0x18] + b2[0x1F];
+ b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0];
+ b1[0x19] = b2[0x19] + b2[0x1E];
+ b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1];
+ b1[0x1A] = b2[0x1A] + b2[0x1D];
+ b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2];
+ b1[0x1B] = b2[0x1B] + b2[0x1C];
+ b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3];
+
+ {
+ register mpeg3_real_t const cos0 = mpeg3_pnts[3][0];
+ register mpeg3_real_t const cos1 = mpeg3_pnts[3][1];
+
+ b2[0x00] = b1[0x00] + b1[0x03];
+ b2[0x03] = (b1[0x00] - b1[0x03]) * cos0;
+ b2[0x01] = b1[0x01] + b1[0x02];
+ b2[0x02] = (b1[0x01] - b1[0x02]) * cos1;
+
+ b2[0x04] = b1[0x04] + b1[0x07];
+ b2[0x07] = (b1[0x07] - b1[0x04]) * cos0;
+ b2[0x05] = b1[0x05] + b1[0x06];
+ b2[0x06] = (b1[0x06] - b1[0x05]) * cos1;
+
+ b2[0x08] = b1[0x08] + b1[0x0B];
+ b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0;
+ b2[0x09] = b1[0x09] + b1[0x0A];
+ b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1;
+
+ b2[0x0C] = b1[0x0C] + b1[0x0F];
+ b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0;
+ b2[0x0D] = b1[0x0D] + b1[0x0E];
+ b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1;
+
+ b2[0x10] = b1[0x10] + b1[0x13];
+ b2[0x13] = (b1[0x10] - b1[0x13]) * cos0;
+ b2[0x11] = b1[0x11] + b1[0x12];
+ b2[0x12] = (b1[0x11] - b1[0x12]) * cos1;
+
+ b2[0x14] = b1[0x14] + b1[0x17];
+ b2[0x17] = (b1[0x17] - b1[0x14]) * cos0;
+ b2[0x15] = b1[0x15] + b1[0x16];
+ b2[0x16] = (b1[0x16] - b1[0x15]) * cos1;
+
+ b2[0x18] = b1[0x18] + b1[0x1B];
+ b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0;
+ b2[0x19] = b1[0x19] + b1[0x1A];
+ b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1;
+
+ b2[0x1C] = b1[0x1C] + b1[0x1F];
+ b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0;
+ b2[0x1D] = b1[0x1D] + b1[0x1E];
+ b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1;
+ }
+
+ {
+ register mpeg3_real_t const cos0 = mpeg3_pnts[4][0];
+
+ b1[0x00] = b2[0x00] + b2[0x01];
+ b1[0x01] = (b2[0x00] - b2[0x01]) * cos0;
+ b1[0x02] = b2[0x02] + b2[0x03];
+ b1[0x03] = (b2[0x03] - b2[0x02]) * cos0;
+ b1[0x02] += b1[0x03];
+
+ b1[0x04] = b2[0x04] + b2[0x05];
+ b1[0x05] = (b2[0x04] - b2[0x05]) * cos0;
+ b1[0x06] = b2[0x06] + b2[0x07];
+ b1[0x07] = (b2[0x07] - b2[0x06]) * cos0;
+ b1[0x06] += b1[0x07];
+ b1[0x04] += b1[0x06];
+ b1[0x06] += b1[0x05];
+ b1[0x05] += b1[0x07];
+
+ b1[0x08] = b2[0x08] + b2[0x09];
+ b1[0x09] = (b2[0x08] - b2[0x09]) * cos0;
+ b1[0x0A] = b2[0x0A] + b2[0x0B];
+ b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0;
+ b1[0x0A] += b1[0x0B];
+
+ b1[0x0C] = b2[0x0C] + b2[0x0D];
+ b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0;
+ b1[0x0E] = b2[0x0E] + b2[0x0F];
+ b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0;
+ b1[0x0E] += b1[0x0F];
+ b1[0x0C] += b1[0x0E];
+ b1[0x0E] += b1[0x0D];
+ b1[0x0D] += b1[0x0F];
+
+ b1[0x10] = b2[0x10] + b2[0x11];
+ b1[0x11] = (b2[0x10] - b2[0x11]) * cos0;
+ b1[0x12] = b2[0x12] + b2[0x13];
+ b1[0x13] = (b2[0x13] - b2[0x12]) * cos0;
+ b1[0x12] += b1[0x13];
+
+ b1[0x14] = b2[0x14] + b2[0x15];
+ b1[0x15] = (b2[0x14] - b2[0x15]) * cos0;
+ b1[0x16] = b2[0x16] + b2[0x17];
+ b1[0x17] = (b2[0x17] - b2[0x16]) * cos0;
+ b1[0x16] += b1[0x17];
+ b1[0x14] += b1[0x16];
+ b1[0x16] += b1[0x15];
+ b1[0x15] += b1[0x17];
+
+ b1[0x18] = b2[0x18] + b2[0x19];
+ b1[0x19] = (b2[0x18] - b2[0x19]) * cos0;
+ b1[0x1A] = b2[0x1A] + b2[0x1B];
+ b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0;
+ b1[0x1A] += b1[0x1B];
+
+ b1[0x1C] = b2[0x1C] + b2[0x1D];
+ b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0;
+ b1[0x1E] = b2[0x1E] + b2[0x1F];
+ b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0;
+ b1[0x1E] += b1[0x1F];
+ b1[0x1C] += b1[0x1E];
+ b1[0x1E] += b1[0x1D];
+ b1[0x1D] += b1[0x1F];
+ }
+
+ out0[0x10*16] = b1[0x00];
+ out0[0x10*12] = b1[0x04];
+ out0[0x10* 8] = b1[0x02];
+ out0[0x10* 4] = b1[0x06];
+ out0[0x10* 0] = b1[0x01];
+ out1[0x10* 0] = b1[0x01];
+ out1[0x10* 4] = b1[0x05];
+ out1[0x10* 8] = b1[0x03];
+ out1[0x10*12] = b1[0x07];
+
+ out0[0x10*14] = b1[0x08] + b1[0x0C];
+ out0[0x10*10] = b1[0x0C] + b1[0x0a];
+ out0[0x10* 6] = b1[0x0A] + b1[0x0E];
+ out0[0x10* 2] = b1[0x0E] + b1[0x09];
+ out1[0x10* 2] = b1[0x09] + b1[0x0D];
+ out1[0x10* 6] = b1[0x0D] + b1[0x0B];
+ out1[0x10*10] = b1[0x0B] + b1[0x0F];
+ out1[0x10*14] = b1[0x0F];
+
+ {
+ register mpeg3_real_t tmp;
+ tmp = b1[0x18] + b1[0x1C];
+ out0[0x10*15] = tmp + b1[0x10];
+ out0[0x10*13] = tmp + b1[0x14];
+ tmp = b1[0x1C] + b1[0x1A];
+ out0[0x10*11] = tmp + b1[0x14];
+ out0[0x10* 9] = tmp + b1[0x12];
+ tmp = b1[0x1A] + b1[0x1E];
+ out0[0x10* 7] = tmp + b1[0x12];
+ out0[0x10* 5] = tmp + b1[0x16];
+ tmp = b1[0x1E] + b1[0x19];
+ out0[0x10* 3] = tmp + b1[0x16];
+ out0[0x10* 1] = tmp + b1[0x11];
+ tmp = b1[0x19] + b1[0x1D];
+ out1[0x10* 1] = tmp + b1[0x11];
+ out1[0x10* 3] = tmp + b1[0x15];
+ tmp = b1[0x1D] + b1[0x1B];
+ out1[0x10* 5] = tmp + b1[0x15];
+ out1[0x10* 7] = tmp + b1[0x13];
+ tmp = b1[0x1B] + b1[0x1F];
+ out1[0x10* 9] = tmp + b1[0x13];
+ out1[0x10*11] = tmp + b1[0x17];
+ out1[0x10*13] = b1[0x17] + b1[0x1F];
+ out1[0x10*15] = b1[0x1F];
+ }
+ return 0;
+}
+
+/*
+ * the call via dct64 is a trick to force GCC to use
+ * (new) registers for the b1,b2 pointer to the bufs[xx] field
+ */
+int mpeg3audio_dct64(mpeg3_real_t *a, mpeg3_real_t *b, mpeg3_real_t *c)
+{
+ mpeg3_real_t bufs[0x40];
+ return mpeg3audio_dct64_1(a, b, bufs, bufs + 0x20, c);
+}
+
+/*//////////////////////////////////////////////////////////////// */
+/* */
+/* 9 Point Inverse Discrete Cosine Transform */
+/* */
+/* This piece of code is Copyright 1997 Mikko Tommila and is freely usable */
+/* by anybody. The algorithm itself is of course in the public domain. */
+/* */
+/* Again derived heuristically from the 9-point WFTA. */
+/* */
+/* The algorithm is optimized (?) for speed, not for small rounding errors or */
+/* good readability. */
+/* */
+/* 36 additions, 11 multiplications */
+/* */
+/* Again this is very likely sub-optimal. */
+/* */
+/* The code is optimized to use a minimum number of temporary variables, */
+/* so it should compile quite well even on 8-register Intel x86 processors. */
+/* This makes the code quite obfuscated and very difficult to understand. */
+/* */
+/* References: */
+/* [1] S. Winograd: "On Computing the Discrete Fourier Transform", */
+/* Mathematics of Computation, Volume 32, Number 141, January 1978, */
+/* Pages 175-199 */
+
+
+/*------------------------------------------------------------------*/
+/* */
+/* Function: Calculation of the inverse MDCT */
+/* */
+/*------------------------------------------------------------------*/
+
+int mpeg3audio_dct36(mpeg3_real_t *inbuf, mpeg3_real_t *o1, mpeg3_real_t *o2, mpeg3_real_t *wintab, mpeg3_real_t *tsbuf)
+{
+ mpeg3_real_t tmp[18];
+
+ {
+ register mpeg3_real_t *in = inbuf;
+
+ in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
+ in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
+ in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8];
+ in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5];
+ in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2];
+ in[2] +=in[1]; in[1] +=in[0];
+
+ in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
+ in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1];
+
+
+ {
+ mpeg3_real_t t3;
+ {
+ mpeg3_real_t t0, t1, t2;
+
+ t0 = mpeg3_COS6_2 * (in[8] + in[16] - in[4]);
+ t1 = mpeg3_COS6_2 * in[12];
+
+ t3 = in[0];
+ t2 = t3 - t1 - t1;
+ tmp[1] = tmp[7] = t2 - t0;
+ tmp[4] = t2 + t0 + t0;
+ t3 += t1;
+
+ t2 = mpeg3_COS6_1 * (in[10] + in[14] - in[2]);
+ tmp[1] -= t2;
+ tmp[7] += t2;
+ }
+ {
+ mpeg3_real_t t0, t1, t2;
+
+ t0 = mpeg3_cos9[0] * (in[4] + in[8] );
+ t1 = mpeg3_cos9[1] * (in[8] - in[16]);
+ t2 = mpeg3_cos9[2] * (in[4] + in[16]);
+
+ tmp[2] = tmp[6] = t3 - t0 - t2;
+ tmp[0] = tmp[8] = t3 + t0 + t1;
+ tmp[3] = tmp[5] = t3 - t1 + t2;
+ }
+ }
+ {
+ mpeg3_real_t t1, t2, t3;
+
+ t1 = mpeg3_cos18[0] * (in[2] + in[10]);
+ t2 = mpeg3_cos18[1] * (in[10] - in[14]);
+ t3 = mpeg3_COS6_1 * in[6];
+
+ {
+ mpeg3_real_t t0 = t1 + t2 + t3;
+ tmp[0] += t0;
+ tmp[8] -= t0;
+ }
+
+ t2 -= t3;
+ t1 -= t3;
+
+ t3 = mpeg3_cos18[2] * (in[2] + in[14]);
+
+ t1 += t3;
+ tmp[3] += t1;
+ tmp[5] -= t1;
+
+ t2 -= t3;
+ tmp[2] += t2;
+ tmp[6] -= t2;
+ }
+
+
+ {
+ mpeg3_real_t t0, t1, t2, t3, t4, t5, t6, t7;
+
+ t1 = mpeg3_COS6_2 * in[13];
+ t2 = mpeg3_COS6_2 * (in[9] + in[17] - in[5]);
+
+ t3 = in[1] + t1;
+ t4 = in[1] - t1 - t1;
+ t5 = t4 - t2;
+
+ t0 = mpeg3_cos9[0] * (in[5] + in[9]);
+ t1 = mpeg3_cos9[1] * (in[9] - in[17]);
+
+ tmp[13] = (t4 + t2 + t2) * mpeg3_tfcos36[17-13];
+ t2 = mpeg3_cos9[2] * (in[5] + in[17]);
+
+ t6 = t3 - t0 - t2;
+ t0 += t3 + t1;
+ t3 += t2 - t1;
+
+ t2 = mpeg3_cos18[0] * (in[3] + in[11]);
+ t4 = mpeg3_cos18[1] * (in[11] - in[15]);
+ t7 = mpeg3_COS6_1 * in[7];
+
+ t1 = t2 + t4 + t7;
+ tmp[17] = (t0 + t1) * mpeg3_tfcos36[17-17];
+ tmp[9] = (t0 - t1) * mpeg3_tfcos36[17-9];
+ t1 = mpeg3_cos18[2] * (in[3] + in[15]);
+ t2 += t1 - t7;
+
+ tmp[14] = (t3 + t2) * mpeg3_tfcos36[17-14];
+ t0 = mpeg3_COS6_1 * (in[11] + in[15] - in[3]);
+ tmp[12] = (t3 - t2) * mpeg3_tfcos36[17-12];
+
+ t4 -= t1 + t7;
+
+ tmp[16] = (t5 - t0) * mpeg3_tfcos36[17-16];
+ tmp[10] = (t5 + t0) * mpeg3_tfcos36[17-10];
+ tmp[15] = (t6 + t4) * mpeg3_tfcos36[17-15];
+ tmp[11] = (t6 - t4) * mpeg3_tfcos36[17-11];
+ }
+
+#define MACRO(v) \
+ { \
+ mpeg3_real_t tmpval; \
+ tmpval = tmp[(v)] + tmp[17-(v)]; \
+ out2[9+(v)] = tmpval * w[27+(v)]; \
+ out2[8-(v)] = tmpval * w[26-(v)]; \
+ tmpval = tmp[(v)] - tmp[17-(v)]; \
+ ts[SBLIMIT*(8-(v))] = out1[8-(v)] + tmpval * w[8-(v)]; \
+ ts[SBLIMIT*(9+(v))] = out1[9+(v)] + tmpval * w[9+(v)]; \
+ }
+
+ {
+ register mpeg3_real_t *out2 = o2;
+ register mpeg3_real_t *w = wintab;
+ register mpeg3_real_t *out1 = o1;
+ register mpeg3_real_t *ts = tsbuf;
+
+ MACRO(0);
+ MACRO(1);
+ MACRO(2);
+ MACRO(3);
+ MACRO(4);
+ MACRO(5);
+ MACRO(6);
+ MACRO(7);
+ MACRO(8);
+ }
+ }
+ return 0;
+}
+
+/*
+ * new DCT12
+ */
+int mpeg3audio_dct12(mpeg3_real_t *in,mpeg3_real_t *rawout1,mpeg3_real_t *rawout2,register mpeg3_real_t *wi,register mpeg3_real_t *ts)
+{
+#define DCT12_PART1 \
+ in5 = in[5*3]; \
+ in5 += (in4 = in[4*3]); \
+ in4 += (in3 = in[3*3]); \
+ in3 += (in2 = in[2*3]); \
+ in2 += (in1 = in[1*3]); \
+ in1 += (in0 = in[0*3]); \
+ \
+ in5 += in3; in3 += in1; \
+ \
+ in2 *= mpeg3_COS6_1; \
+ in3 *= mpeg3_COS6_1; \
+
+#define DCT12_PART2 \
+ in0 += in4 * mpeg3_COS6_2; \
+ \
+ in4 = in0 + in2; \
+ in0 -= in2; \
+ \
+ in1 += in5 * mpeg3_COS6_2; \
+ \
+ in5 = (in1 + in3) * mpeg3_tfcos12[0]; \
+ in1 = (in1 - in3) * mpeg3_tfcos12[2]; \
+ \
+ in3 = in4 + in5; \
+ in4 -= in5; \
+ \
+ in2 = in0 + in1; \
+ in0 -= in1;
+
+
+ {
+ mpeg3_real_t in0,in1,in2,in3,in4,in5;
+ register mpeg3_real_t *out1 = rawout1;
+ ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
+ ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
+
+ DCT12_PART1
+
+ {
+ mpeg3_real_t tmp0,tmp1 = (in0 - in4);
+ {
+ mpeg3_real_t tmp2 = (in1 - in5) * mpeg3_tfcos12[1];
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1];
+ ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1];
+ ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1];
+ ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1];
+ }
+
+ DCT12_PART2
+
+ ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0];
+ ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0];
+ ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2];
+ ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2];
+
+ ts[(6+0)*SBLIMIT] = out1[6+0] + in0 * wi[0];
+ ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0];
+ ts[(6+2)*SBLIMIT] = out1[6+2] + in4 * wi[2];
+ ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2];
+ }
+
+ in++;
+
+ {
+ mpeg3_real_t in0,in1,in2,in3,in4,in5;
+ register mpeg3_real_t *out2 = rawout2;
+
+ DCT12_PART1
+
+ {
+ mpeg3_real_t tmp0,tmp1 = (in0 - in4);
+ {
+ mpeg3_real_t tmp2 = (in1 - in5) * mpeg3_tfcos12[1];
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ out2[5-1] = tmp0 * wi[11-1];
+ out2[0+1] = tmp0 * wi[6+1];
+ ts[(12+1)*SBLIMIT] += tmp1 * wi[1];
+ ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1];
+ }
+
+ DCT12_PART2
+
+ out2[5-0] = in2 * wi[11-0];
+ out2[0+0] = in2 * wi[6+0];
+ out2[0+2] = in3 * wi[6+2];
+ out2[5-2] = in3 * wi[11-2];
+
+ ts[(12+0)*SBLIMIT] += in0 * wi[0];
+ ts[(17-0)*SBLIMIT] += in0 * wi[5-0];
+ ts[(12+2)*SBLIMIT] += in4 * wi[2];
+ ts[(17-2)*SBLIMIT] += in4 * wi[5-2];
+ }
+
+ in++;
+
+ {
+ mpeg3_real_t in0,in1,in2,in3,in4,in5;
+ register mpeg3_real_t *out2 = rawout2;
+ out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
+
+ DCT12_PART1
+
+ {
+ mpeg3_real_t tmp0,tmp1 = (in0 - in4);
+ {
+ mpeg3_real_t tmp2 = (in1 - in5) * mpeg3_tfcos12[1];
+ tmp0 = tmp1 + tmp2;
+ tmp1 -= tmp2;
+ }
+ out2[11-1] = tmp0 * wi[11-1];
+ out2[6 +1] = tmp0 * wi[6+1];
+ out2[0+1] += tmp1 * wi[1];
+ out2[5-1] += tmp1 * wi[5-1];
+ }
+
+ DCT12_PART2
+
+ out2[11-0] = in2 * wi[11-0];
+ out2[6 +0] = in2 * wi[6+0];
+ out2[6 +2] = in3 * wi[6+2];
+ out2[11-2] = in3 * wi[11-2];
+
+ out2[0+0] += in0 * wi[0];
+ out2[5-0] += in0 * wi[5-0];
+ out2[0+2] += in4 * wi[2];
+ out2[5-2] += in4 * wi[5-2];
+ }
+ return 0;
+}
+
+/* AC3 IMDCT tables */
+
+/* Twiddle factors for IMDCT */
+#if !defined(USE_FIXED_POINT) || defined(PRINT_FIXED_POINT_TABLES)
+static mpeg3_real_t mpeg3_xcos1[AC3_N / 4];
+static mpeg3_real_t mpeg3_xsin1[AC3_N / 4];
+static mpeg3_real_t mpeg3_xcos2[AC3_N / 8];
+static mpeg3_real_t mpeg3_xsin2[AC3_N / 8];
+#else
+#define USE_FP_TABLES
+#include "fptables.h"
+#endif
+
+/* 128 point bit-reverse LUT */
+static unsigned char mpeg3_bit_reverse_512[] =
+{
+ 0x00, 0x40, 0x20, 0x60, 0x10, 0x50, 0x30, 0x70,
+ 0x08, 0x48, 0x28, 0x68, 0x18, 0x58, 0x38, 0x78,
+ 0x04, 0x44, 0x24, 0x64, 0x14, 0x54, 0x34, 0x74,
+ 0x0c, 0x4c, 0x2c, 0x6c, 0x1c, 0x5c, 0x3c, 0x7c,
+ 0x02, 0x42, 0x22, 0x62, 0x12, 0x52, 0x32, 0x72,
+ 0x0a, 0x4a, 0x2a, 0x6a, 0x1a, 0x5a, 0x3a, 0x7a,
+ 0x06, 0x46, 0x26, 0x66, 0x16, 0x56, 0x36, 0x76,
+ 0x0e, 0x4e, 0x2e, 0x6e, 0x1e, 0x5e, 0x3e, 0x7e,
+ 0x01, 0x41, 0x21, 0x61, 0x11, 0x51, 0x31, 0x71,
+ 0x09, 0x49, 0x29, 0x69, 0x19, 0x59, 0x39, 0x79,
+ 0x05, 0x45, 0x25, 0x65, 0x15, 0x55, 0x35, 0x75,
+ 0x0d, 0x4d, 0x2d, 0x6d, 0x1d, 0x5d, 0x3d, 0x7d,
+ 0x03, 0x43, 0x23, 0x63, 0x13, 0x53, 0x33, 0x73,
+ 0x0b, 0x4b, 0x2b, 0x6b, 0x1b, 0x5b, 0x3b, 0x7b,
+ 0x07, 0x47, 0x27, 0x67, 0x17, 0x57, 0x37, 0x77,
+ 0x0f, 0x4f, 0x2f, 0x6f, 0x1f, 0x5f, 0x3f, 0x7f
+};
+
+static unsigned char mpeg3_bit_reverse_256[] =
+{
+ 0x00, 0x20, 0x10, 0x30, 0x08, 0x28, 0x18, 0x38,
+ 0x04, 0x24, 0x14, 0x34, 0x0c, 0x2c, 0x1c, 0x3c,
+ 0x02, 0x22, 0x12, 0x32, 0x0a, 0x2a, 0x1a, 0x3a,
+ 0x06, 0x26, 0x16, 0x36, 0x0e, 0x2e, 0x1e, 0x3e,
+ 0x01, 0x21, 0x11, 0x31, 0x09, 0x29, 0x19, 0x39,
+ 0x05, 0x25, 0x15, 0x35, 0x0d, 0x2d, 0x1d, 0x3d,
+ 0x03, 0x23, 0x13, 0x33, 0x0b, 0x2b, 0x1b, 0x3b,
+ 0x07, 0x27, 0x17, 0x37, 0x0f, 0x2f, 0x1f, 0x3f
+};
+
+/* Windowing function for Modified DCT - Thank you acroread */
+static mpeg3_real_t mpeg3_window[] =
+{
+ 0.00014, 0.00024, 0.00037, 0.00051, 0.00067, 0.00086, 0.00107, 0.00130,
+ 0.00157, 0.00187, 0.00220, 0.00256, 0.00297, 0.00341, 0.00390, 0.00443,
+ 0.00501, 0.00564, 0.00632, 0.00706, 0.00785, 0.00871, 0.00962, 0.01061,
+ 0.01166, 0.01279, 0.01399, 0.01526, 0.01662, 0.01806, 0.01959, 0.02121,
+ 0.02292, 0.02472, 0.02662, 0.02863, 0.03073, 0.03294, 0.03527, 0.03770,
+ 0.04025, 0.04292, 0.04571, 0.04862, 0.05165, 0.05481, 0.05810, 0.06153,
+ 0.06508, 0.06878, 0.07261, 0.07658, 0.08069, 0.08495, 0.08935, 0.09389,
+ 0.09859, 0.10343, 0.10842, 0.11356, 0.11885, 0.12429, 0.12988, 0.13563,
+ 0.14152, 0.14757, 0.15376, 0.16011, 0.16661, 0.17325, 0.18005, 0.18699,
+ 0.19407, 0.20130, 0.20867, 0.21618, 0.22382, 0.23161, 0.23952, 0.24757,
+ 0.25574, 0.26404, 0.27246, 0.28100, 0.28965, 0.29841, 0.30729, 0.31626,
+ 0.32533, 0.33450, 0.34376, 0.35311, 0.36253, 0.37204, 0.38161, 0.39126,
+ 0.40096, 0.41072, 0.42054, 0.43040, 0.44030, 0.45023, 0.46020, 0.47019,
+ 0.48020, 0.49022, 0.50025, 0.51028, 0.52031, 0.53033, 0.54033, 0.55031,
+ 0.56026, 0.57019, 0.58007, 0.58991, 0.59970, 0.60944, 0.61912, 0.62873,
+ 0.63827, 0.64774, 0.65713, 0.66643, 0.67564, 0.68476, 0.69377, 0.70269,
+ 0.71150, 0.72019, 0.72877, 0.73723, 0.74557, 0.75378, 0.76186, 0.76981,
+ 0.77762, 0.78530, 0.79283, 0.80022, 0.80747, 0.81457, 0.82151, 0.82831,
+ 0.83496, 0.84145, 0.84779, 0.85398, 0.86001, 0.86588, 0.87160, 0.87716,
+ 0.88257, 0.88782, 0.89291, 0.89785, 0.90264, 0.90728, 0.91176, 0.91610,
+ 0.92028, 0.92432, 0.92822, 0.93197, 0.93558, 0.93906, 0.94240, 0.94560,
+ 0.94867, 0.95162, 0.95444, 0.95713, 0.95971, 0.96217, 0.96451, 0.96674,
+ 0.96887, 0.97089, 0.97281, 0.97463, 0.97635, 0.97799, 0.97953, 0.98099,
+ 0.98236, 0.98366, 0.98488, 0.98602, 0.98710, 0.98811, 0.98905, 0.98994,
+ 0.99076, 0.99153, 0.99225, 0.99291, 0.99353, 0.99411, 0.99464, 0.99513,
+ 0.99558, 0.99600, 0.99639, 0.99674, 0.99706, 0.99736, 0.99763, 0.99788,
+ 0.99811, 0.99831, 0.99850, 0.99867, 0.99882, 0.99895, 0.99908, 0.99919,
+ 0.99929, 0.99938, 0.99946, 0.99953, 0.99959, 0.99965, 0.99969, 0.99974,
+ 0.99978, 0.99981, 0.99984, 0.99986, 0.99988, 0.99990, 0.99992, 0.99993,
+ 0.99994, 0.99995, 0.99996, 0.99997, 0.99998, 0.99998, 0.99998, 0.99999,
+ 0.99999, 0.99999, 0.99999, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000,
+ 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000, 1.00000
+};
+
+mpeg3_complex_t cmplx_mult(mpeg3_complex_t a, mpeg3_complex_t b)
+{
+ mpeg3_complex_t ret;
+
+ ret.real = a.real * b.real - a.imag * b.imag;
+ ret.imag = a.real * b.imag + a.imag * b.real;
+
+ return ret;
+}
+
+int mpeg3audio_imdct_init(mpeg3audio_t *audio)
+{
+ int i, k;
+ mpeg3_complex_t angle_step;
+ mpeg3_complex_t current_angle;
+
+/* Twiddle factors to turn IFFT into IMDCT */
+ for(i = 0; i < AC3_N / 4; i++)
+ {
+ mpeg3_xcos1[i] = -cos(2.0f * M_PI * (8 * i + 1 ) / ( 8 * AC3_N));
+ mpeg3_xsin1[i] = -sin(2.0f * M_PI * (8 * i + 1 ) / ( 8 * AC3_N));
+ }
+
+/* More twiddle factors to turn IFFT into IMDCT */
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ mpeg3_xcos2[i] = -cos(2.0f * M_PI * (8 * i + 1 ) / ( 4 * AC3_N));
+ mpeg3_xsin2[i] = -sin(2.0f * M_PI * (8 * i + 1 ) / ( 4 * AC3_N));
+ }
+
+/* Canonical twiddle factors for FFT */
+#if defined(USE_FIXED_POINT) && !defined(PRINT_FIXED_POINT_TABLES)
+ for(i = 0; i < 7; i++)
+ {
+ audio->ac3_w[i] = (mpeg3_complex_t*)ac3_w_fixedpoints[i];
+ }
+#else
+ audio->ac3_w[0] = audio->ac3_w_1;
+ audio->ac3_w[1] = audio->ac3_w_2;
+ audio->ac3_w[2] = audio->ac3_w_4;
+ audio->ac3_w[3] = audio->ac3_w_8;
+ audio->ac3_w[4] = audio->ac3_w_16;
+ audio->ac3_w[5] = audio->ac3_w_32;
+ audio->ac3_w[6] = audio->ac3_w_64;
+
+ for(i = 0; i < 7; i++)
+ {
+ angle_step.real = cos(-2.0f * M_PI / (1 << (i + 1)));
+ angle_step.imag = sin(-2.0f * M_PI / (1 << (i + 1)));
+
+ current_angle.real = 1.0f;
+ current_angle.imag = 0.0f;
+
+ for (k = 0; k < 1 << i; k++)
+ {
+ audio->ac3_w[i][k] = current_angle;
+ current_angle = cmplx_mult(current_angle, angle_step);
+ }
+ }
+
+#ifdef PRINT_FIXED_POINT_TABLES
+ printf("#ifdef USE_FP_TABLES\n");
+ printf("static long mpeg3_xcos1_fixedpoints[] = {");
+ for(i = 0; i < AC3_N / 4; i++) {
+ printf("%c0x%08x,", i%8?' ':'\n', mpeg3_xcos1[i].fixedPoint());
+ }
+ printf("\n};\nstatic mpeg3_real_t *mpeg3_xcos1 = \n"
+ "(mpeg3_real_t*)mpeg3_xcos1_fixedpoints;\n");
+
+ printf("static long mpeg3_xsin1_fixedpoints[] = {");
+ for(i = 0; i < AC3_N / 4; i++) {
+ printf("%c0x%08x,", i%8?' ':'\n', mpeg3_xsin1[i].fixedPoint());
+ }
+ printf("\n};\nstatic mpeg3_real_t *mpeg3_xsin1 = \n"
+ "(mpeg3_real_t*)mpeg3_xsin1_fixedpoints;\n");
+
+
+ printf("static long mpeg3_xcos2_fixedpoints[] = {");
+ for(i = 0; i < AC3_N / 4; i++) {
+ printf("%c0x%08x,", i%8?' ':'\n', mpeg3_xcos2[i].fixedPoint());
+ }
+ printf("\n};\nstatic mpeg3_real_t *mpeg3_xcos2 = \n"
+ "(mpeg3_real_t*)mpeg3_xcos2_fixedpoints;\n");
+
+ printf("static long mpeg3_xsin2_fixedpoints[] = {");
+ for(i = 0; i < AC3_N / 4; i++) {
+ printf("%c0x%08x,", i%8?' ':'\n', mpeg3_xsin2[i].fixedPoint());
+ }
+ printf("\n};\nstatic mpeg3_real_t *mpeg3_xsin2 = \n"
+ "(mpeg3_real_t*)mpeg3_xsin2_fixedpoints;\n");
+
+
+ printf("typedef struct { long r, i; } fixed_cmplx;\n");
+ for(i = 0; i < 7; i++)
+ {
+ printf("fixed_cmplx ac3_w_d%d[] = { ", 1<<i);
+ for (k = 0; k < 1 << i; k++)
+ {
+ printf("%s{ 0x%08x, 0x%08x },", k%4?" ":"\n ",
+ audio->ac3_w[i][k].real.fixedPoint(),
+ audio->ac3_w[i][k].imag.fixedPoint());
+ }
+ printf("};\n");
+ }
+
+ printf("fixed_cmplx *ac3_w_fixedpoints[] = {\n");
+ for(i = 0; i < 7; i++)
+ {
+ printf("ac3_w_d%d, ", 1<<i);
+ }
+ printf("};\n");
+ printf("#endif\n");
+#endif
+#endif
+
+ return 0;
+}
+
+
+inline void swap_cmplx(mpeg3_complex_t *a, mpeg3_complex_t *b)
+{
+ mpeg3_complex_t tmp;
+
+ tmp = *a;
+ *a = *b;
+ *b = tmp;
+}
+
+void mpeg3audio_ac3_imdct_do_512(mpeg3audio_t *audio,
+ mpeg3_real_t data[],
+ mpeg3_real_t *y,
+ int step,
+ mpeg3_real_t *delay)
+{
+ int i, k;
+ int p, q;
+ int m;
+ int two_m;
+ int two_m_plus_one;
+
+ mpeg3_real_t tmp_a_i;
+ mpeg3_real_t tmp_a_r;
+ mpeg3_real_t tmp_b_i;
+ mpeg3_real_t tmp_b_r;
+
+ mpeg3_real_t *y_ptr;
+ mpeg3_real_t *delay_ptr;
+ mpeg3_real_t *window_ptr;
+ mpeg3_complex_t *buf = audio->ac3_imdct_buf;
+
+/* Pre IFFT complex multiply plus IFFT cmplx conjugate */
+ for(i = 0; i < AC3_N / 4; i++)
+ {
+ buf[i].real = (data[AC3_N / 2 - 2 * i - 1] * mpeg3_xcos1[i]) - (data[2 * i] * mpeg3_xsin1[i]);
+ buf[i].imag = -((data[2 * i] * mpeg3_xcos1[i]) + (data[AC3_N / 2 - 2 * i - 1] * mpeg3_xsin1[i]));
+ }
+
+/* Bit reversed shuffling */
+ for(i = 0; i < AC3_N / 4; i++)
+ {
+ k = mpeg3_bit_reverse_512[i];
+ if(k < i)
+ swap_cmplx(&buf[i], &buf[k]);
+ }
+
+/* FFT Merge */
+ for(m = 0; m < 7; m++)
+ {
+ if(m)
+ two_m = (1 << m);
+ else
+ two_m = 1;
+
+ two_m_plus_one = (1 << (m + 1));
+
+ for(k = 0; k < two_m; k++)
+ {
+ for(i = 0; i < AC3_N / 4; i += two_m_plus_one)
+ {
+ p = k + i;
+ q = p + two_m;
+ tmp_a_r = buf[p].real;
+ tmp_a_i = buf[p].imag;
+ tmp_b_r = buf[q].real * audio->ac3_w[m][k].real - buf[q].imag * audio->ac3_w[m][k].imag;
+ tmp_b_i = buf[q].imag * audio->ac3_w[m][k].real + buf[q].real * audio->ac3_w[m][k].imag;
+ buf[p].real = tmp_a_r + tmp_b_r;
+ buf[p].imag = tmp_a_i + tmp_b_i;
+ buf[q].real = tmp_a_r - tmp_b_r;
+ buf[q].imag = tmp_a_i - tmp_b_i;
+ }
+ }
+ }
+
+/* Post IFFT complex multiply plus IFFT complex conjugate*/
+ for(i = 0; i < AC3_N / 4; i++)
+ {
+ tmp_a_r = buf[i].real;
+ tmp_a_i = -buf[i].imag;
+ buf[i].real = (tmp_a_r * mpeg3_xcos1[i]) - (tmp_a_i * mpeg3_xsin1[i]);
+ buf[i].imag = (tmp_a_r * mpeg3_xsin1[i]) + (tmp_a_i * mpeg3_xcos1[i]);
+ }
+
+ y_ptr = y;
+ delay_ptr = delay;
+ window_ptr = mpeg3_window;
+
+/* Window and convert to real valued signal */
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *y_ptr = -buf[AC3_N / 8 + i].imag * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ *y_ptr = buf[AC3_N / 8 - i - 1].real * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ }
+
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *y_ptr = -buf[i].real * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ *y_ptr = buf[AC3_N / 4 - i - 1].imag * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ }
+
+/* The trailing edge of the window goes into the delay line */
+ delay_ptr = delay;
+
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *delay_ptr++ = -buf[AC3_N / 8 + i].real * *--window_ptr;
+ *delay_ptr++ = buf[AC3_N / 8 - i - 1].imag * *--window_ptr;
+ }
+
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *delay_ptr++ = buf[i].imag * *--window_ptr;
+ *delay_ptr++ = -buf[AC3_N / 4 - i - 1].real * *--window_ptr;
+ }
+}
+
+void mpeg3audio_ac3_imdct_do_256(mpeg3audio_t *audio,
+ mpeg3_real_t data[],
+ mpeg3_real_t *y,
+ int step,
+ mpeg3_real_t *delay)
+{
+ int i, k;
+ int p, q;
+ int m;
+ int two_m;
+ int two_m_plus_one;
+ mpeg3_complex_t *buf = audio->ac3_imdct_buf;
+ mpeg3_real_t *y_ptr;
+ mpeg3_real_t *delay_ptr;
+ mpeg3_real_t *window_ptr;
+
+ mpeg3_real_t tmp_a_i;
+ mpeg3_real_t tmp_a_r;
+ mpeg3_real_t tmp_b_i;
+ mpeg3_real_t tmp_b_r;
+
+ mpeg3_complex_t *buf_1, *buf_2;
+
+ buf_1 = &buf[0];
+ buf_2 = &buf[64];
+
+/* Pre IFFT complex multiply plus IFFT cmplx conjugate */
+ for(k = 0; k < AC3_N / 8; k++)
+ {
+ p = 2 * (AC3_N / 4 - 2 * k - 1);
+ q = 2 * (2 * k);
+
+ buf_1[k].real = data[p] * mpeg3_xcos2[k] - data[q] * mpeg3_xsin2[k];
+ buf_1[k].imag = - (data[q] * mpeg3_xcos2[k] + data[p] * mpeg3_xsin2[k]);
+ buf_2[k].real = data[p + 1] * mpeg3_xcos2[k] - data[q + 1] * mpeg3_xsin2[k];
+ buf_2[k].imag = - (data[q + 1] * mpeg3_xcos2[k] + data[p + 1] * mpeg3_xsin2[k]);
+ }
+
+/* IFFT Bit reversed shuffling */
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ k = mpeg3_bit_reverse_256[i];
+ if(k < i)
+ {
+ swap_cmplx(&buf_1[i], &buf_1[k]);
+ swap_cmplx(&buf_2[i], &buf_2[k]);
+ }
+ }
+
+/* FFT Merge */
+ for(m = 0; m < 6; m++)
+ {
+ if(m)
+ two_m = (1 << m);
+ else
+ two_m = 1;
+
+ two_m_plus_one = (1 << (m + 1));
+
+ for(k = 0; k < two_m; k++)
+ {
+ for(i = 0; i < AC3_N / 8; i += two_m_plus_one)
+ {
+ p = k + i;
+ q = p + two_m;
+/* Do block 1 */
+ tmp_a_r = buf_1[p].real;
+ tmp_a_i = buf_1[p].imag;
+ tmp_b_r = buf_1[q].real * audio->ac3_w[m][k].real - buf_1[q].imag * audio->ac3_w[m][k].imag;
+ tmp_b_i = buf_1[q].imag * audio->ac3_w[m][k].real + buf_1[q].real * audio->ac3_w[m][k].imag;
+ buf_1[p].real = tmp_a_r + tmp_b_r;
+ buf_1[p].imag = tmp_a_i + tmp_b_i;
+ buf_1[q].real = tmp_a_r - tmp_b_r;
+ buf_1[q].imag = tmp_a_i - tmp_b_i;
+
+/* Do block 2 */
+ tmp_a_r = buf_2[p].real;
+ tmp_a_i = buf_2[p].imag;
+ tmp_b_r = buf_2[q].real * audio->ac3_w[m][k].real - buf_2[q].imag * audio->ac3_w[m][k].imag;
+ tmp_b_i = buf_2[q].imag * audio->ac3_w[m][k].real + buf_2[q].real * audio->ac3_w[m][k].imag;
+ buf_2[p].real = tmp_a_r + tmp_b_r;
+ buf_2[p].imag = tmp_a_i + tmp_b_i;
+ buf_2[q].real = tmp_a_r - tmp_b_r;
+ buf_2[q].imag = tmp_a_i - tmp_b_i;
+ }
+ }
+ }
+
+/* Post IFFT complex multiply */
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ tmp_a_r = buf_1[i].real;
+ tmp_a_i = -buf_1[i].imag;
+ buf_1[i].real = (tmp_a_r * mpeg3_xcos2[i]) - (tmp_a_i * mpeg3_xsin2[i]);
+ buf_1[i].imag = (tmp_a_r * mpeg3_xsin2[i]) + (tmp_a_i * mpeg3_xcos2[i]);
+ tmp_a_r = buf_2[i].real;
+ tmp_a_i = -buf_2[i].imag;
+ buf_2[i].real = (tmp_a_r * mpeg3_xcos2[i]) - (tmp_a_i * mpeg3_xsin2[i]);
+ buf_2[i].imag = (tmp_a_r * mpeg3_xsin2[i]) + (tmp_a_i * mpeg3_xcos2[i]);
+ }
+
+/* Window and convert to real valued signal */
+ y_ptr = y;
+ delay_ptr = delay;
+ window_ptr = mpeg3_window;
+
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *y_ptr = -buf[AC3_N / 8 + i].imag * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ *y_ptr = buf[AC3_N / 8 - i - 1].real * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ }
+
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *y_ptr = -buf[i].real * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ *y_ptr = buf[AC3_N / 4 - i - 1].imag * *window_ptr++ + *delay_ptr++;
+ y_ptr += step;
+ }
+
+/* The trailing edge of the window goes into the delay line */
+ delay_ptr = delay;
+
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *delay_ptr++ = -buf[AC3_N / 8 + i].real * *--window_ptr;
+ *delay_ptr++ = buf[AC3_N / 8 - i - 1].imag * *--window_ptr;
+ }
+
+ for(i = 0; i < AC3_N / 8; i++)
+ {
+ *delay_ptr++ = buf[i].imag * *--window_ptr;
+ *delay_ptr++ = -buf[AC3_N / 4 - i - 1].real * *--window_ptr;
+ }
+}
+
+int mpeg3audio_ac3_imdct(mpeg3audio_t *audio,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk,
+ mpeg3ac3_stream_samples_t samples)
+{
+ int i;
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ if(audblk->blksw[i])
+ mpeg3audio_ac3_imdct_do_256(audio,
+ samples[i],
+ audio->pcm_sample + audio->pcm_point + i,
+ bsi->nfchans,
+ audio->ac3_delay[i]);
+ else
+ mpeg3audio_ac3_imdct_do_512(audio,
+ samples[i],
+ audio->pcm_sample + audio->pcm_point + i,
+ bsi->nfchans,
+ audio->ac3_delay[i]);
+ }
+ audio->pcm_point += AC3_N / 2 * bsi->nfchans;
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/exponents.c b/core/multimedia/opieplayer/libmpeg3/audio/exponents.c
new file mode 100644
index 0000000..deda9b9
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/exponents.c
@@ -0,0 +1,141 @@
+/*
+ *
+ * exponents.c Copyright (C) Aaron Holtzman - May 1999
+ *
+ * This file is part of libmpeg3
+ *
+ * libmpeg3 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * libmpeg3 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include <stdio.h>
+
+/* Exponent defines */
+#define UNPACK_FBW 1
+#define UNPACK_CPL 2
+#define UNPACK_LFE 4
+
+static inline int mpeg3audio_ac3_exp_unpack_ch(unsigned int type,
+ unsigned int expstr,
+ unsigned int ngrps,
+ unsigned int initial_exp,
+ unsigned short exps[],
+ unsigned short *dest)
+{
+ int i, j;
+ int exp_acc;
+ int exp_1, exp_2, exp_3;
+
+ if(expstr == MPEG3_EXP_REUSE)
+ return 0;
+
+/* Handle the initial absolute exponent */
+ exp_acc = initial_exp;
+ j = 0;
+
+/* In the case of a fbw channel then the initial absolute value is
+ * also an exponent */
+ if(type != UNPACK_CPL)
+ dest[j++] = exp_acc;
+
+/* Loop through the groups and fill the dest array appropriately */
+ for(i = 0; i < ngrps; i++)
+ {
+ if(exps[i] > 124)
+ {
+ fprintf(stderr, "mpeg3audio_ac3_exp_unpack_ch: Invalid exponent %d\n", exps[i]);
+ return 1;
+ }
+
+ exp_1 = exps[i] / 25;
+ exp_2 = (exps[i] % 25) / 5;
+ exp_3 = (exps[i] % 25) % 5;
+
+ exp_acc += (exp_1 - 2);
+
+ switch(expstr)
+ {
+ case MPEG3_EXP_D45:
+ dest[j++] = exp_acc;
+ dest[j++] = exp_acc;
+ case MPEG3_EXP_D25:
+ dest[j++] = exp_acc;
+ case MPEG3_EXP_D15:
+ dest[j++] = exp_acc;
+ }
+
+ exp_acc += (exp_2 - 2);
+
+ switch(expstr)
+ {
+ case MPEG3_EXP_D45:
+ dest[j++] = exp_acc;
+ dest[j++] = exp_acc;
+ case MPEG3_EXP_D25:
+ dest[j++] = exp_acc;
+ case MPEG3_EXP_D15:
+ dest[j++] = exp_acc;
+ }
+
+ exp_acc += (exp_3 - 2);
+
+ switch(expstr)
+ {
+ case MPEG3_EXP_D45:
+ dest[j++] = exp_acc;
+ dest[j++] = exp_acc;
+ case MPEG3_EXP_D25:
+ dest[j++] = exp_acc;
+ case MPEG3_EXP_D15:
+ dest[j++] = exp_acc;
+ }
+ }
+ return 0;
+}
+
+int mpeg3audio_ac3_exponent_unpack(mpeg3audio_t *audio,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk)
+{
+ int i, result = 0;
+
+ for(i = 0; i < bsi->nfchans; i++)
+ result |= mpeg3audio_ac3_exp_unpack_ch(UNPACK_FBW,
+ audblk->chexpstr[i],
+ audblk->nchgrps[i],
+ audblk->exps[i][0],
+ &audblk->exps[i][1],
+ audblk->fbw_exp[i]);
+
+ if(audblk->cplinu && !result)
+ result |= mpeg3audio_ac3_exp_unpack_ch(UNPACK_CPL,
+ audblk->cplexpstr,
+ audblk->ncplgrps,
+ audblk->cplabsexp << 1,
+ audblk->cplexps,
+ &audblk->cpl_exp[audblk->cplstrtmant]);
+
+ if(bsi->lfeon && !result)
+ result |= mpeg3audio_ac3_exp_unpack_ch(UNPACK_LFE,
+ audblk->lfeexpstr,
+ 2,
+ audblk->lfeexps[0],
+ &audblk->lfeexps[1],
+ audblk->lfe_exp);
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/fptables.h b/core/multimedia/opieplayer/libmpeg3/audio/fptables.h
new file mode 100644
index 0000000..2836984
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/fptables.h
@@ -0,0 +1,1556 @@
+#ifdef USE_FP_TABLES
+static long mpeg3_xcos1_fixedpoints[] = {
+0xffff8001, 0xffff8004, 0xffff800c, 0xffff8019, 0xffff802a, 0xffff8041, 0xffff805d, 0xffff807e,
+0xffff80a3, 0xffff80ce, 0xffff80fd, 0xffff8131, 0xffff816b, 0xffff81a9, 0xffff81ec, 0xffff8233,
+0xffff8280, 0xffff82d1, 0xffff8328, 0xffff8383, 0xffff83e3, 0xffff8447, 0xffff84b1, 0xffff851f,
+0xffff8592, 0xffff860a, 0xffff8686, 0xffff8707, 0xffff878d, 0xffff8817, 0xffff88a6, 0xffff893a,
+0xffff89d2, 0xffff8a6f, 0xffff8b10, 0xffff8bb6, 0xffff8c60, 0xffff8d0f, 0xffff8dc2, 0xffff8e7a,
+0xffff8f35, 0xffff8ff6, 0xffff90ba, 0xffff9183, 0xffff9250, 0xffff9322, 0xffff93f7, 0xffff94d1,
+0xffff95af, 0xffff9691, 0xffff9777, 0xffff9861, 0xffff994f, 0xffff9a41, 0xffff9b37, 0xffff9c31,
+0xffff9d2e, 0xffff9e30, 0xffff9f35, 0xffffa03e, 0xffffa14b, 0xffffa25b, 0xffffa36f, 0xffffa487,
+0xffffa5a2, 0xffffa6c0, 0xffffa7e2, 0xffffa907, 0xffffaa30, 0xffffab5c, 0xffffac8b, 0xffffadbe,
+0xffffaef4, 0xffffb02c, 0xffffb168, 0xffffb2a7, 0xffffb3e9, 0xffffb52e, 0xffffb676, 0xffffb7c0,
+0xffffb90d, 0xffffba5d, 0xffffbbb0, 0xffffbd06, 0xffffbe5e, 0xffffbfb8, 0xffffc115, 0xffffc274,
+0xffffc3d6, 0xffffc53a, 0xffffc6a1, 0xffffc809, 0xffffc974, 0xffffcae1, 0xffffcc50, 0xffffcdc0,
+0xffffcf33, 0xffffd0a8, 0xffffd21e, 0xffffd397, 0xffffd511, 0xffffd68c, 0xffffd80a, 0xffffd988,
+0xffffdb09, 0xffffdc8a, 0xffffde0d, 0xffffdf92, 0xffffe117, 0xffffe29e, 0xffffe426, 0xffffe5af,
+0xffffe739, 0xffffe8c4, 0xffffea50, 0xffffebdd, 0xffffed6a, 0xffffeef8, 0xfffff087, 0xfffff217,
+0xfffff3a7, 0xfffff537, 0xfffff6c8, 0xfffff859, 0xfffff9eb, 0xfffffb7d, 0xfffffd0f, 0xfffffea1,
+};
+static mpeg3_real_t *mpeg3_xcos1 =
+(mpeg3_real_t*)mpeg3_xcos1_fixedpoints;
+static long mpeg3_xsin1_fixedpoints[] = {
+0xffffffce, 0xfffffe3c, 0xfffffcaa, 0xfffffb18, 0xfffff986, 0xfffff7f5, 0xfffff664, 0xfffff4d3,
+0xfffff343, 0xfffff1b3, 0xfffff023, 0xffffee95, 0xffffed07, 0xffffeb79, 0xffffe9ed, 0xffffe861,
+0xffffe6d6, 0xffffe54d, 0xffffe3c4, 0xffffe23c, 0xffffe0b6, 0xffffdf30, 0xffffddac, 0xffffdc2a,
+0xffffdaa8, 0xffffd928, 0xffffd7aa, 0xffffd62d, 0xffffd4b2, 0xffffd338, 0xffffd1c1, 0xffffd04b,
+0xffffced6, 0xffffcd64, 0xffffcbf4, 0xffffca85, 0xffffc919, 0xffffc7af, 0xffffc647, 0xffffc4e1,
+0xffffc37d, 0xffffc21c, 0xffffc0bd, 0xffffbf61, 0xffffbe07, 0xffffbcb0, 0xffffbb5b, 0xffffba09,
+0xffffb8ba, 0xffffb76d, 0xffffb623, 0xffffb4dc, 0xffffb398, 0xffffb257, 0xffffb119, 0xffffafde,
+0xffffaea6, 0xffffad71, 0xffffac3f, 0xffffab11, 0xffffa9e6, 0xffffa8be, 0xffffa799, 0xffffa678,
+0xffffa55b, 0xffffa440, 0xffffa32a, 0xffffa217, 0xffffa107, 0xffff9ffc, 0xffff9ef3, 0xffff9def,
+0xffff9cef, 0xffff9bf2, 0xffff9af9, 0xffff9a04, 0xffff9913, 0xffff9826, 0xffff973d, 0xffff9658,
+0xffff9577, 0xffff949a, 0xffff93c1, 0xffff92ed, 0xffff921d, 0xffff9151, 0xffff9089, 0xffff8fc5,
+0xffff8f06, 0xffff8e4b, 0xffff8d95, 0xffff8ce3, 0xffff8c35, 0xffff8b8c, 0xffff8ae7, 0xffff8a47,
+0xffff89ac, 0xffff8915, 0xffff8882, 0xffff87f4, 0xffff876b, 0xffff86e7, 0xffff8667, 0xffff85eb,
+0xffff8575, 0xffff8503, 0xffff8496, 0xffff842e, 0xffff83ca, 0xffff836c, 0xffff8312, 0xffff82bd,
+0xffff826c, 0xffff8221, 0xffff81da, 0xffff8199, 0xffff815c, 0xffff8124, 0xffff80f1, 0xffff80c3,
+0xffff8099, 0xffff8075, 0xffff8056, 0xffff803b, 0xffff8026, 0xffff8015, 0xffff8009, 0xffff8002,
+};
+static mpeg3_real_t *mpeg3_xsin1 =
+(mpeg3_real_t*)mpeg3_xsin1_fixedpoints;
+static long mpeg3_xcos2_fixedpoints[] = {
+0xffff8001, 0xffff800d, 0xffff802d, 0xffff8061, 0xffff80a8, 0xffff8103, 0xffff8172, 0xffff81f4,
+0xffff828a, 0xffff8333, 0xffff83ef, 0xffff84be, 0xffff85a1, 0xffff8696, 0xffff879e, 0xffff88b9,
+0xffff89e5, 0xffff8b25, 0xffff8c76, 0xffff8dd9, 0xffff8f4d, 0xffff90d3, 0xffff926a, 0xffff9412,
+0xffff95cb, 0xffff9794, 0xffff996d, 0xffff9b56, 0xffff9d4e, 0xffff9f56, 0xffffa16d, 0xffffa392,
+0xffffa5c5, 0xffffa807, 0xffffaa55, 0xffffacb2, 0xffffaf1b, 0xffffb190, 0xffffb411, 0xffffb69f,
+0xffffb937, 0xffffbbdb, 0xffffbe89, 0xffffc141, 0xffffc403, 0xffffc6ce, 0xffffc9a1, 0xffffcc7e,
+0xffffcf62, 0xffffd24d, 0xffffd540, 0xffffd839, 0xffffdb39, 0xffffde3e, 0xffffe148, 0xffffe457,
+0xffffe76a, 0xffffea81, 0xffffed9c, 0xfffff0b9, 0xfffff3d9, 0xfffff6fa, 0xfffffa1d, 0xfffffd41,
+0xffffff9c, 0xfffffc78, 0xfffff954, 0xfffff632, 0xfffff311, 0xffffeff2, 0xffffecd5, 0xffffe9bb,
+0xffffe6a5, 0xffffe393, 0xffffe085, 0xffffdd7c, 0xffffda78, 0xffffd77a, 0xffffd483, 0xffffd192,
+0xffffcea8, 0xffffcbc6, 0xffffc8ec, 0xffffc61a, 0xffffc351, 0xffffc092, 0xffffbddc, 0xffffbb31,
+0xffffb890, 0xffffb5fa, 0xffffb370, 0xffffb0f1, 0xffffae7f, 0xffffac19, 0xffffa9c0, 0xffffa775,
+0xffffa537, 0xffffa307, 0xffffa0e6, 0xffff9ed3, 0xffff9ccf, 0xffff9ada, 0xffff98f5, 0xffff9720,
+0xffff955b, 0xffff93a7, 0xffff9203, 0xffff9070, 0xffff8eee, 0xffff8d7e, 0xffff8c20, 0xffff8ad3,
+0xffff8998, 0xffff8870, 0xffff875a, 0xffff8657, 0xffff8566, 0xffff8489, 0xffff83be, 0xffff8307,
+0xffff8263, 0xffff81d2, 0xffff8155, 0xffff80eb, 0xffff8095, 0xffff8052, 0xffff8023, 0xffff8008,
+};
+static mpeg3_real_t *mpeg3_xcos2 =
+(mpeg3_real_t*)mpeg3_xcos2_fixedpoints;
+static long mpeg3_xsin2_fixedpoints[] = {
+0xffffff9c, 0xfffffc78, 0xfffff954, 0xfffff632, 0xfffff311, 0xffffeff2, 0xffffecd5, 0xffffe9bb,
+0xffffe6a5, 0xffffe393, 0xffffe085, 0xffffdd7c, 0xffffda78, 0xffffd77a, 0xffffd483, 0xffffd192,
+0xffffcea8, 0xffffcbc6, 0xffffc8ec, 0xffffc61a, 0xffffc351, 0xffffc092, 0xffffbddc, 0xffffbb31,
+0xffffb890, 0xffffb5fa, 0xffffb370, 0xffffb0f1, 0xffffae7f, 0xffffac19, 0xffffa9c0, 0xffffa775,
+0xffffa537, 0xffffa307, 0xffffa0e6, 0xffff9ed3, 0xffff9ccf, 0xffff9ada, 0xffff98f5, 0xffff9720,
+0xffff955b, 0xffff93a7, 0xffff9203, 0xffff9070, 0xffff8eee, 0xffff8d7e, 0xffff8c20, 0xffff8ad3,
+0xffff8998, 0xffff8870, 0xffff875a, 0xffff8657, 0xffff8566, 0xffff8489, 0xffff83be, 0xffff8307,
+0xffff8263, 0xffff81d2, 0xffff8155, 0xffff80eb, 0xffff8095, 0xffff8052, 0xffff8023, 0xffff8008,
+0x00000004, 0x00000007, 0x0000000c, 0x00000010, 0x00000015, 0x0000001c, 0x00000023, 0x0000002a,
+0x00000033, 0x0000003d, 0x00000048, 0x00000053, 0x00000061, 0x0000006f, 0x0000007f, 0x00000091,
+0x000000a4, 0x000000b8, 0x000000cf, 0x000000e7, 0x00000101, 0x0000011d, 0x0000013b, 0x0000015b,
+0x0000017e, 0x000001a3, 0x000001ca, 0x000001f4, 0x00000220, 0x0000024f, 0x00000281, 0x000002b7,
+0x000002ef, 0x0000032a, 0x00000368, 0x000003aa, 0x000003ee, 0x00000437, 0x00000483, 0x000004d3,
+0x00000526, 0x0000057e, 0x000005d9, 0x00000639, 0x0000069c, 0x00000704, 0x0000076f, 0x000007e0,
+0x00000854, 0x000008cd, 0x0000094b, 0x000009cd, 0x00000a54, 0x00000adf, 0x00000b6f, 0x00000c04,
+0x00000c9e, 0x00000d3d, 0x00000de0, 0x00000e89, 0x00000f36, 0x00000fe8, 0x0000109f, 0x0000115c,
+};
+static mpeg3_real_t *mpeg3_xsin2 =
+(mpeg3_real_t*)mpeg3_xsin2_fixedpoints;
+typedef struct { long r, i; } fixed_cmplx;
+fixed_cmplx ac3_w_d1[] = {
+ { 0x00008000, 0x00000000 },};
+fixed_cmplx ac3_w_d2[] = {
+ { 0x00008000, 0x00000000 }, { 0x00000000, 0xffff8000 },};
+fixed_cmplx ac3_w_d4[] = {
+ { 0x00008000, 0x00000000 }, { 0x00005a82, 0xffffa57e }, { 0x00000000, 0xffff8002 }, { 0xffffa580, 0xffffa580 },};
+fixed_cmplx ac3_w_d8[] = {
+ { 0x00008000, 0x00000000 }, { 0x00007641, 0xffffcf05 }, { 0x00005a81, 0xffffa580 }, { 0x000030fb, 0xffff89c4 },
+ { 0x00000002, 0xffff8007 }, { 0xffffcf09, 0xffff89c6 }, { 0xffffa587, 0xffffa583 }, { 0xffff89cb, 0xffffcf05 },};
+fixed_cmplx ac3_w_d16[] = {
+ { 0x00008000, 0x00000000 }, { 0x00007d8a, 0xffffe708 }, { 0x00007642, 0xffffcf06 }, { 0x00006a6e, 0xffffb8e7 },
+ { 0x00005a84, 0xffffa583 }, { 0x00004720, 0xffff9599 }, { 0x00003100, 0xffff89c6 }, { 0x000018ff, 0xffff827e },
+ { 0x00000008, 0xffff8008 }, { 0xffffe711, 0xffff827d }, { 0xffffcf11, 0xffff89c4 }, { 0xffffb8f2, 0xffff9595 },
+ { 0xffffa58e, 0xffffa57d }, { 0xffff95a5, 0xffffb8df }, { 0xffff89d2, 0xffffcefd }, { 0xffff8289, 0xffffe6fc },};
+fixed_cmplx ac3_w_d32[] = {
+ { 0x00008000, 0x00000000 }, { 0x00007f62, 0xfffff375 }, { 0x00007d8a, 0xffffe70a }, { 0x00007a7d, 0xffffdadc },
+ { 0x00007642, 0xffffcf0a }, { 0x000070e4, 0xffffc3b1 }, { 0x00006a70, 0xffffb8ed }, { 0x000062f6, 0xffffaed7 },
+ { 0x00005a88, 0xffffa58a }, { 0x0000513b, 0xffff9d1b }, { 0x00004726, 0xffff95a1 }, { 0x00003c62, 0xffff8f2d },
+ { 0x00003109, 0xffff89cf }, { 0x00002538, 0xffff8593 }, { 0x0000190b, 0xffff8286 }, { 0x00000ca1, 0xffff80ad },
+ { 0x00000017, 0xffff800f }, { 0xfffff38d, 0xffff80ab }, { 0xffffe723, 0xffff8281 }, { 0xffffdaf6, 0xffff858b },
+ { 0xffffcf25, 0xffff89c4 }, { 0xffffc3cc, 0xffff8f1f }, { 0xffffb908, 0xffff9591 }, { 0xffffaef3, 0xffff9d09 },
+ { 0xffffa5a6, 0xffffa575 }, { 0xffff9d37, 0xffffaebf }, { 0xffff95bb, 0xffffb8d2 }, { 0xffff8f46, 0xffffc393 },
+ { 0xffff89e7, 0xffffcee9 }, { 0xffff85aa, 0xffffdab8 }, { 0xffff829b, 0xffffe6e3 }, { 0xffff80c1, 0xfffff34b },};
+fixed_cmplx ac3_w_d64[] = {
+ { 0x00008000, 0x00000000 }, { 0x00007fd8, 0xfffff9b9 }, { 0x00007f62, 0xfffff376 }, { 0x00007e9d, 0xffffed3b },
+ { 0x00007d8a, 0xffffe70c }, { 0x00007c29, 0xffffe0ec }, { 0x00007a7c, 0xffffdae0 }, { 0x00007883, 0xffffd4eb },
+ { 0x00007641, 0xffffcf11 }, { 0x000073b6, 0xffffc955 }, { 0x000070e3, 0xffffc3bb }, { 0x00006dcb, 0xffffbe45 },
+ { 0x00006a6f, 0xffffb8f8 }, { 0x000066d2, 0xffffb3d7 }, { 0x000062f5, 0xffffaee5 }, { 0x00005edc, 0xffffaa25 },
+ { 0x00005a89, 0xffffa59a }, { 0x000055fe, 0xffffa147 }, { 0x0000513e, 0xffff9d2e }, { 0x00004c4c, 0xffff9952 },
+ { 0x0000472b, 0xffff95b6 }, { 0x000041de, 0xffff925b }, { 0x00003c69, 0xffff8f44 }, { 0x000036cf, 0xffff8c72 },
+ { 0x00003113, 0xffff89e7 }, { 0x00002b39, 0xffff87a4 }, { 0x00002544, 0xffff85ac }, { 0x00001f39, 0xffff8400 },
+ { 0x0000191b, 0xffff82a0 }, { 0x000012ed, 0xffff818d }, { 0x00000cb4, 0xffff80c8 }, { 0x00000673, 0xffff8051 },
+ { 0x0000002d, 0xffff8029 }, { 0xfffff9e8, 0xffff804f }, { 0xfffff3a7, 0xffff80c3 }, { 0xffffed6e, 0xffff8186 },
+ { 0xffffe741, 0xffff8297 }, { 0xffffe123, 0xffff83f5 }, { 0xffffdb18, 0xffff859f }, { 0xffffd524, 0xffff8795 },
+ { 0xffffcf4b, 0xffff89d5 }, { 0xffffc990, 0xffff8c5d }, { 0xffffc3f7, 0xffff8f2d }, { 0xffffbe82, 0xffff9242 },
+ { 0xffffb936, 0xffff959b }, { 0xffffb416, 0xffff9935 }, { 0xffffaf24, 0xffff9d0f }, { 0xffffaa64, 0xffffa125 },
+ { 0xffffa5d9, 0xffffa575 }, { 0xffffa186, 0xffffa9fd }, { 0xffff9d6d, 0xffffaeba }, { 0xffff9990, 0xffffb3a9 },
+ { 0xffff95f3, 0xffffb8c7 }, { 0xffff9297, 0xffffbe11 }, { 0xffff8f7f, 0xffffc383 }, { 0xffff8cac, 0xffffc91a },
+ { 0xffff8a20, 0xffffced3 }, { 0xffff87dc, 0xffffd4aa }, { 0xffff85e2, 0xffffda9c }, { 0xffff8434, 0xffffe0a5 },
+ { 0xffff82d2, 0xffffe6c1 }, { 0xffff81be, 0xffffecec }, { 0xffff80f7, 0xfffff323 }, { 0xffff807e, 0xfffff962 },};
+fixed_cmplx *ac3_w_fixedpoints[] = {
+ac3_w_d1, ac3_w_d2, ac3_w_d4, ac3_w_d8, ac3_w_d16, ac3_w_d32, ac3_w_d64, };
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_muls_data[] = {
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0xffff5556, 0xffff788b, 0xffff947d, 0xffffaaab, 0xffffbc46, 0xffffca3f, 0xffffd556, 0xffffde23,
+0xffffe520, 0xffffeaab, 0xffffef12, 0xfffff290, 0xfffff556, 0xfffff789, 0xfffff948, 0xfffffaab,
+0xfffffbc5, 0xfffffca4, 0xfffffd56, 0xfffffde3, 0xfffffe52, 0xfffffeab, 0xfffffef2, 0xffffff29,
+0xffffff56, 0xffffff79, 0xffffff95, 0xffffffab, 0xffffffbd, 0xffffffcb, 0xffffffd6, 0xffffffdf,
+0xffffffe6, 0xffffffeb, 0xfffffff0, 0xfffffff3, 0xfffffff6, 0xfffffff8, 0xfffffffa, 0xfffffffb,
+0xfffffffc, 0xfffffffd, 0xfffffffe, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x0000aaaa, 0x00008775, 0x00006b83, 0x00005555, 0x000043ba, 0x000035c1, 0x00002aaa, 0x000021dd,
+0x00001ae0, 0x00001555, 0x000010ee, 0x00000d70, 0x00000aaa, 0x00000877, 0x000006b8, 0x00000555,
+0x0000043b, 0x0000035c, 0x000002aa, 0x0000021d, 0x000001ae, 0x00000155, 0x0000010e, 0x000000d7,
+0x000000aa, 0x00000087, 0x0000006b, 0x00000055, 0x00000043, 0x00000035, 0x0000002a, 0x00000021,
+0x0000001a, 0x00000015, 0x00000010, 0x0000000d, 0x0000000a, 0x00000008, 0x00000006, 0x00000005,
+0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00004924, 0x00003a0d, 0x00002e13, 0x00002492, 0x00001d06, 0x00001709, 0x00001249, 0x00000e83,
+0x00000b84, 0x00000924, 0x00000741, 0x000005c2, 0x00000492, 0x000003a0, 0x000002e1, 0x00000249,
+0x000001d0, 0x00000170, 0x00000124, 0x000000e8, 0x000000b8, 0x00000092, 0x00000074, 0x0000005c,
+0x00000049, 0x0000003a, 0x0000002e, 0x00000024, 0x0000001d, 0x00000017, 0x00000012, 0x0000000e,
+0x0000000b, 0x00000009, 0x00000007, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002,
+0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00002222, 0x00001b17, 0x00001580, 0x00001111, 0x00000d8b, 0x00000ac0, 0x00000888, 0x000006c5,
+0x00000560, 0x00000444, 0x00000362, 0x000002b0, 0x00000222, 0x000001b1, 0x00000158, 0x00000111,
+0x000000d8, 0x000000ac, 0x00000088, 0x0000006c, 0x00000056, 0x00000044, 0x00000036, 0x0000002b,
+0x00000022, 0x0000001b, 0x00000015, 0x00000011, 0x0000000d, 0x0000000a, 0x00000008, 0x00000006,
+0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00001084, 0x00000d1b, 0x00000a67, 0x00000842, 0x0000068d, 0x00000533, 0x00000421, 0x00000346,
+0x00000299, 0x00000210, 0x000001a3, 0x0000014c, 0x00000108, 0x000000d1, 0x000000a6, 0x00000084,
+0x00000068, 0x00000053, 0x00000042, 0x00000034, 0x00000029, 0x00000021, 0x0000001a, 0x00000014,
+0x00000010, 0x0000000d, 0x0000000a, 0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000003,
+0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000820, 0x00000673, 0x0000051e, 0x00000410, 0x00000339, 0x0000028f, 0x00000208, 0x0000019c,
+0x00000147, 0x00000104, 0x000000ce, 0x000000a3, 0x00000082, 0x00000067, 0x00000051, 0x00000041,
+0x00000033, 0x00000028, 0x00000020, 0x00000019, 0x00000014, 0x00000010, 0x0000000c, 0x0000000a,
+0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001,
+0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000408, 0x00000333, 0x0000028a, 0x00000204, 0x00000199, 0x00000145, 0x00000102, 0x000000cc,
+0x000000a2, 0x00000081, 0x00000066, 0x00000051, 0x00000040, 0x00000033, 0x00000028, 0x00000020,
+0x00000019, 0x00000014, 0x00000010, 0x0000000c, 0x0000000a, 0x00000008, 0x00000006, 0x00000005,
+0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000202, 0x00000197, 0x00000143, 0x00000101, 0x000000cb, 0x000000a1, 0x00000080, 0x00000065,
+0x00000050, 0x00000040, 0x00000032, 0x00000028, 0x00000020, 0x00000019, 0x00000014, 0x00000010,
+0x0000000c, 0x0000000a, 0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000002,
+0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000100, 0x000000cb, 0x000000a1, 0x00000080, 0x00000065, 0x00000050, 0x00000040, 0x00000032,
+0x00000028, 0x00000020, 0x00000019, 0x00000014, 0x00000010, 0x0000000c, 0x0000000a, 0x00000008,
+0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001,
+0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000080, 0x00000065, 0x00000050, 0x00000040, 0x00000032, 0x00000028, 0x00000020, 0x00000019,
+0x00000014, 0x00000010, 0x0000000c, 0x0000000a, 0x00000008, 0x00000006, 0x00000005, 0x00000004,
+0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000040, 0x00000032, 0x00000028, 0x00000020, 0x00000019, 0x00000014, 0x00000010, 0x0000000c,
+0x0000000a, 0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002,
+0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000020, 0x00000019, 0x00000014, 0x00000010, 0x0000000c, 0x0000000a, 0x00000008, 0x00000006,
+0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000010, 0x0000000c, 0x0000000a, 0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000003,
+0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001,
+0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0xffff3334, 0xffff5d74, 0xffff7efc, 0xffff999a, 0xffffaeba, 0xffffbf7e, 0xffffcccd, 0xffffd75d,
+0xffffdfbf, 0xffffe667, 0xffffebaf, 0xffffefe0, 0xfffff334, 0xfffff5d8, 0xfffff7f0, 0xfffff99a,
+0xfffffaec, 0xfffffbf8, 0xfffffccd, 0xfffffd76, 0xfffffdfc, 0xfffffe67, 0xfffffebb, 0xfffffefe,
+0xffffff34, 0xffffff5e, 0xffffff7f, 0xffffff9a, 0xffffffaf, 0xffffffc0, 0xffffffcd, 0xffffffd8,
+0xffffffe0, 0xffffffe7, 0xffffffec, 0xfffffff0, 0xfffffff4, 0xfffffff6, 0xfffffff8, 0xfffffffa,
+0xfffffffb, 0xfffffffc, 0xfffffffd, 0xfffffffe, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0xffff999a, 0xffffaeba, 0xffffbf7e, 0xffffcccd, 0xffffd75d, 0xffffdfbf, 0xffffe667, 0xffffebaf,
+0xffffefe0, 0xfffff334, 0xfffff5d8, 0xfffff7f0, 0xfffff99a, 0xfffffaec, 0xfffffbf8, 0xfffffccd,
+0xfffffd76, 0xfffffdfc, 0xfffffe67, 0xfffffebb, 0xfffffefe, 0xffffff34, 0xffffff5e, 0xffffff7f,
+0xffffff9a, 0xffffffaf, 0xffffffc0, 0xffffffcd, 0xffffffd8, 0xffffffe0, 0xffffffe7, 0xffffffec,
+0xfffffff0, 0xfffffff4, 0xfffffff6, 0xfffffff8, 0xfffffffa, 0xfffffffb, 0xfffffffc, 0xfffffffd,
+0xfffffffe, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00006666, 0x00005146, 0x00004082, 0x00003333, 0x000028a3, 0x00002041, 0x00001999, 0x00001451,
+0x00001020, 0x00000ccc, 0x00000a28, 0x00000810, 0x00000666, 0x00000514, 0x00000408, 0x00000333,
+0x0000028a, 0x00000204, 0x00000199, 0x00000145, 0x00000102, 0x000000cc, 0x000000a2, 0x00000081,
+0x00000066, 0x00000051, 0x00000040, 0x00000033, 0x00000028, 0x00000020, 0x00000019, 0x00000014,
+0x00000010, 0x0000000c, 0x0000000a, 0x00000008, 0x00000006, 0x00000005, 0x00000004, 0x00000003,
+0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x0000cccc, 0x0000a28c, 0x00008104, 0x00006666, 0x00005146, 0x00004082, 0x00003333, 0x000028a3,
+0x00002041, 0x00001999, 0x00001451, 0x00001020, 0x00000ccc, 0x00000a28, 0x00000810, 0x00000666,
+0x00000514, 0x00000408, 0x00000333, 0x0000028a, 0x00000204, 0x00000199, 0x00000145, 0x00000102,
+0x000000cc, 0x000000a2, 0x00000081, 0x00000066, 0x00000051, 0x00000040, 0x00000033, 0x00000028,
+0x00000020, 0x00000019, 0x00000014, 0x00000010, 0x0000000c, 0x0000000a, 0x00000008, 0x00000006,
+0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0xffff1c72, 0xffff4b64, 0xffff70a7, 0xffff8e39, 0xffffa5b2, 0xffffb854, 0xffffc71d, 0xffffd2d9,
+0xffffdc2a, 0xffffe38f, 0xffffe96d, 0xffffee15, 0xfffff1c8, 0xfffff4b7, 0xfffff70b, 0xfffff8e4,
+0xfffffa5c, 0xfffffb86, 0xfffffc72, 0xfffffd2e, 0xfffffdc3, 0xfffffe39, 0xfffffe97, 0xfffffee2,
+0xffffff1d, 0xffffff4c, 0xffffff71, 0xffffff8f, 0xffffffa6, 0xffffffb9, 0xffffffc8, 0xffffffd3,
+0xffffffdd, 0xffffffe4, 0xffffffea, 0xffffffef, 0xfffffff2, 0xfffffff5, 0xfffffff8, 0xfffffff9,
+0xfffffffb, 0xfffffffc, 0xfffffffd, 0xfffffffe, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0xffff8e39, 0xffffa5b2, 0xffffb854, 0xffffc71d, 0xffffd2d9, 0xffffdc2a, 0xffffe38f, 0xffffe96d,
+0xffffee15, 0xfffff1c8, 0xfffff4b7, 0xfffff70b, 0xfffff8e4, 0xfffffa5c, 0xfffffb86, 0xfffffc72,
+0xfffffd2e, 0xfffffdc3, 0xfffffe39, 0xfffffe97, 0xfffffee2, 0xffffff1d, 0xffffff4c, 0xffffff71,
+0xffffff8f, 0xffffffa6, 0xffffffb9, 0xffffffc8, 0xffffffd3, 0xffffffdd, 0xffffffe4, 0xffffffea,
+0xffffffef, 0xfffffff2, 0xfffffff5, 0xfffffff8, 0xfffffff9, 0xfffffffb, 0xfffffffc, 0xfffffffd,
+0xfffffffe, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0xffffc71d, 0xffffd2d9, 0xffffdc2a, 0xffffe38f, 0xffffe96d, 0xffffee15, 0xfffff1c8, 0xfffff4b7,
+0xfffff70b, 0xfffff8e4, 0xfffffa5c, 0xfffffb86, 0xfffffc72, 0xfffffd2e, 0xfffffdc3, 0xfffffe39,
+0xfffffe97, 0xfffffee2, 0xffffff1d, 0xffffff4c, 0xffffff71, 0xffffff8f, 0xffffffa6, 0xffffffb9,
+0xffffffc8, 0xffffffd3, 0xffffffdd, 0xffffffe4, 0xffffffea, 0xffffffef, 0xfffffff2, 0xfffffff5,
+0xfffffff8, 0xfffffff9, 0xfffffffb, 0xfffffffc, 0xfffffffd, 0xfffffffe, 0xfffffffe, 0xffffffff,
+0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x000038e3, 0x00002d27, 0x000023d6, 0x00001c71, 0x00001693, 0x000011eb, 0x00000e38, 0x00000b49,
+0x000008f5, 0x0000071c, 0x000005a4, 0x0000047a, 0x0000038e, 0x000002d2, 0x0000023d, 0x000001c7,
+0x00000169, 0x0000011e, 0x000000e3, 0x000000b4, 0x0000008f, 0x00000071, 0x0000005a, 0x00000047,
+0x00000038, 0x0000002d, 0x00000023, 0x0000001c, 0x00000016, 0x00000011, 0x0000000e, 0x0000000b,
+0x00000008, 0x00000007, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001,
+0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x000071c7, 0x00005a4e, 0x000047ac, 0x000038e3, 0x00002d27, 0x000023d6, 0x00001c71, 0x00001693,
+0x000011eb, 0x00000e38, 0x00000b49, 0x000008f5, 0x0000071c, 0x000005a4, 0x0000047a, 0x0000038e,
+0x000002d2, 0x0000023d, 0x000001c7, 0x00000169, 0x0000011e, 0x000000e3, 0x000000b4, 0x0000008f,
+0x00000071, 0x0000005a, 0x00000047, 0x00000038, 0x0000002d, 0x00000023, 0x0000001c, 0x00000016,
+0x00000011, 0x0000000e, 0x0000000b, 0x00000008, 0x00000007, 0x00000005, 0x00000004, 0x00000003,
+0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x0000e38e, 0x0000b49c, 0x00008f59, 0x000071c7, 0x00005a4e, 0x000047ac, 0x000038e3, 0x00002d27,
+0x000023d6, 0x00001c71, 0x00001693, 0x000011eb, 0x00000e38, 0x00000b49, 0x000008f5, 0x0000071c,
+0x000005a4, 0x0000047a, 0x0000038e, 0x000002d2, 0x0000023d, 0x000001c7, 0x00000169, 0x0000011e,
+0x000000e3, 0x000000b4, 0x0000008f, 0x00000071, 0x0000005a, 0x00000047, 0x00000038, 0x0000002d,
+0x00000023, 0x0000001c, 0x00000016, 0x00000011, 0x0000000e, 0x0000000b, 0x00000008, 0x00000007,
+0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000001, 0x00000001, 0x00000001,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_gainpow2_data[] = {
+0x05a82799, 0x04c1bf82, 0x04000000, 0x035d13f3, 0x02d413cc, 0x0260dfc1, 0x02000000, 0x01ae89f9,
+0x016a09e6, 0x01306fe0, 0x01000000, 0x00d744fc, 0x00b504f3, 0x009837f0, 0x00800000, 0x006ba27e,
+0x005a8279, 0x004c1bf8, 0x00400000, 0x0035d13f, 0x002d413c, 0x00260dfc, 0x00200000, 0x001ae89f,
+0x0016a09e, 0x001306fe, 0x00100000, 0x000d744f, 0x000b504f, 0x0009837f, 0x00080000, 0x0006ba27,
+0x0005a827, 0x0004c1bf, 0x00040000, 0x00035d13, 0x0002d413, 0x000260df, 0x00020000, 0x0001ae89,
+0x00016a09, 0x0001306f, 0x00010000, 0x0000d744, 0x0000b504, 0x00009837, 0x00008000, 0x00006ba2,
+0x00005a82, 0x00004c1b, 0x00004000, 0x000035d1, 0x00002d41, 0x0000260d, 0x00002000, 0x00001ae8,
+0x000016a0, 0x00001306, 0x00001000, 0x00000d74, 0x00000b50, 0x00000983, 0x00000800, 0x000006ba,
+0x000005a8, 0x000004c1, 0x00000400, 0x0000035d, 0x000002d4, 0x00000260, 0x00000200, 0x000001ae,
+0x0000016a, 0x00000130, 0x00000100, 0x000000d7, 0x000000b5, 0x00000098, 0x00000080, 0x0000006b,
+0x0000005a, 0x0000004c, 0x00000040, 0x00000035, 0x0000002d, 0x00000026, 0x00000020, 0x0000001a,
+0x00000016, 0x00000013, 0x00000010, 0x0000000d, 0x0000000b, 0x00000009, 0x00000008, 0x00000006,
+0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000002, 0x00000001,
+0x00000001, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_ispow_data[] = {
+0x00000000, 0x00008000, 0x0001428a, 0x000229d2, 0x00032cbf, 0x00044662, 0x0005738c, 0x0006b1fc,
+0x0007ffff, 0x00095c41, 0x000ac5ad, 0x000c3b5d, 0x000dbc8f, 0x000f489e, 0x0010def9, 0x00127f20,
+0x001428a2, 0x0015db1b, 0x00179630, 0x0019598d, 0x001b24e8, 0x001cf7fc, 0x001ed28a, 0x0020b458,
+0x00229d2e, 0x00248cdb, 0x0026832f, 0x00287fff, 0x002a8322, 0x002c8c70, 0x002e9bc5, 0x0030b0ff,
+0x0032cbfd, 0x0034eca0, 0x003712ca, 0x00393e60, 0x003b6f47, 0x003da567, 0x003fe0a5, 0x004220ed,
+0x00446627, 0x0046b03e, 0x0048ff1e, 0x004b52b3, 0x004daaeb, 0x005007b4, 0x005268fc, 0x0054ceb2,
+0x005738c7, 0x0059a72a, 0x005c19cd, 0x005e90a1, 0x00610b98, 0x00638aa4, 0x00660db9, 0x006894c9,
+0x006b1fc8, 0x006daeaa, 0x00704163, 0x0072d7e8, 0x0075722e, 0x0078102b, 0x007ab1d3, 0x007d571e,
+0x007fffff, 0x0082ac70, 0x00855c65, 0x00880fd6, 0x008ac6b9, 0x008d8107, 0x00903eb7, 0x0092ffc0,
+0x0095c41a, 0x00988bbe, 0x009b56a4, 0x009e24c4, 0x00a0f617, 0x00a3ca96, 0x00a6a239, 0x00a97cfa,
+0x00ac5ad2, 0x00af3bbb, 0x00b21fad, 0x00b506a3, 0x00b7f096, 0x00badd81, 0x00bdcd5d, 0x00c0c025,
+0x00c3b5d2, 0x00c6ae60, 0x00c9a9c8, 0x00cca805, 0x00cfa912, 0x00d2acea, 0x00d5b387, 0x00d8bce5,
+0x00dbc8fe, 0x00ded7ce, 0x00e1e950, 0x00e4fd7e, 0x00e81456, 0x00eb2dd1, 0x00ee49ec, 0x00f168a2,
+0x00f489ef, 0x00f7adce, 0x00fad43c, 0x00fdfd34, 0x010128b2, 0x010456b2, 0x01078731, 0x010aba29,
+0x010def99, 0x0111277b, 0x011461cc, 0x01179e89, 0x011addae, 0x011e1f37, 0x01216320, 0x0124a967,
+0x0127f208, 0x012b3d00, 0x012e8a4b, 0x0131d9e6, 0x01352bce, 0x01387fff, 0x013bd678, 0x013f2f33,
+0x01428a2f, 0x0145e768, 0x014946dc, 0x014ca888, 0x01500c68, 0x01537279, 0x0156daba, 0x015a4527,
+0x015db1bd, 0x0161207a, 0x0164915b, 0x0168045d, 0x016b797e, 0x016ef0bb, 0x01726a12, 0x0175e580,
+0x01796302, 0x017ce297, 0x0180643b, 0x0183e7ec, 0x01876da9, 0x018af56e, 0x018e7f38, 0x01920b07,
+0x019598d8, 0x019928a8, 0x019cba74, 0x01a04e3c, 0x01a3e3fd, 0x01a77bb4, 0x01ab155f, 0x01aeb0fd,
+0x01b24e8b, 0x01b5ee07, 0x01b98f70, 0x01bd32c2, 0x01c0d7fc, 0x01c47f1d, 0x01c82821, 0x01cbd308,
+0x01cf7fcf, 0x01d32e74, 0x01d6def6, 0x01da9153, 0x01de4588, 0x01e1fb94, 0x01e5b375, 0x01e96d29,
+0x01ed28af, 0x01f0e604, 0x01f4a528, 0x01f86617, 0x01fc28d2, 0x01ffed55, 0x0203b39f, 0x02077baf,
+0x020b4582, 0x020f1118, 0x0212de6e, 0x0216ad83, 0x021a7e56, 0x021e50e4, 0x0222252d, 0x0225fb2e,
+0x0229d2e6, 0x022dac54, 0x02318776, 0x0235644b, 0x023942d1, 0x023d2306, 0x024104e9, 0x0244e879,
+0x0248cdb5, 0x024cb49a, 0x02509d28, 0x0254875c, 0x02587337, 0x025c60b5, 0x02604fd7, 0x0264409a,
+0x026832fd, 0x026c26ff, 0x02701c9f, 0x027413db, 0x02780cb1, 0x027c0722, 0x0280032a, 0x028400ca,
+0x0287ffff, 0x028c00ca, 0x02900327, 0x02940716, 0x02980c97, 0x029c13a7, 0x02a01c45, 0x02a42670,
+0x02a83228, 0x02ac3f6a, 0x02b04e36, 0x02b45e8b, 0x02b87067, 0x02bc83c9, 0x02c098b1, 0x02c4af1c,
+0x02c8c70a, 0x02cce07a, 0x02d0fb6a, 0x02d517da, 0x02d935c9, 0x02dd5534, 0x02e1761c, 0x02e59880,
+0x02e9bc5d, 0x02ede1b3, 0x02f20882, 0x02f630c8, 0x02fa5a83, 0x02fe85b4, 0x0302b258, 0x0306e070,
+0x030b0ff9, 0x030f40f3, 0x0313735e, 0x0317a737, 0x031bdc7e, 0x03201333, 0x03244b53, 0x032884de,
+0x032cbfd4, 0x0330fc33, 0x033539fa, 0x03397929, 0x033db9be, 0x0341fbb8, 0x03463f17, 0x034a83da,
+0x034eca00, 0x03531187, 0x03575a6f, 0x035ba4b8, 0x035ff060, 0x03643d66, 0x03688bc9, 0x036cdb8a,
+0x03712ca6, 0x03757f1d, 0x0379d2ee, 0x037e2818, 0x03827e9a, 0x0386d674, 0x038b2fa5, 0x038f8a2c,
+0x0393e608, 0x03984338, 0x039ca1bc, 0x03a10192, 0x03a562ba, 0x03a9c533, 0x03ae28fd, 0x03b28e16,
+0x03b6f47e, 0x03bb5c33, 0x03bfc536, 0x03c42f85, 0x03c89b20, 0x03cd0806, 0x03d17636, 0x03d5e5af,
+0x03da5671, 0x03dec87b, 0x03e33bcc, 0x03e7b063, 0x03ec2640, 0x03f09d62, 0x03f515c9, 0x03f98f73,
+0x03fe0a5f, 0x0402868e, 0x040703fe, 0x040b82af, 0x041002a0, 0x041483d1, 0x04190640, 0x041d89ec,
+0x04220ed7, 0x042694fd, 0x042b1c60, 0x042fa4fe, 0x04342ed6, 0x0438b9e9, 0x043d4635, 0x0441d3b9,
+0x04466275, 0x044af269, 0x044f8393, 0x045415f3, 0x0458a988, 0x045d3e53, 0x0461d451, 0x04666b83,
+0x046b03e7, 0x046f9d7e, 0x04743846, 0x0478d440, 0x047d716a, 0x04820fc3, 0x0486af4c, 0x048b5003,
+0x048ff1e8, 0x049494fa, 0x04993939, 0x049ddea5, 0x04a2853c, 0x04a72cfd, 0x04abd5ea, 0x04b07fff,
+0x04b52b3f, 0x04b9d7a6, 0x04be8536, 0x04c333ee, 0x04c7e3cc, 0x04cc94d1, 0x04d146fb, 0x04d5fa4b,
+0x04daaebf, 0x04df6458, 0x04e41b14, 0x04e8d2f3, 0x04ed8bf5, 0x04f24618, 0x04f7015d, 0x04fbbdc3,
+0x05007b49, 0x050539ef, 0x0509f9b4, 0x050eba98, 0x05137c9a, 0x05183fba, 0x051d03f6, 0x0521c950,
+0x05268fc6, 0x052b5757, 0x05302003, 0x0534e9ca, 0x0539b4ab, 0x053e80a5, 0x05434db9, 0x05481be5,
+0x054ceb29, 0x0551bb85, 0x05568cf8, 0x055b5f81, 0x05603321, 0x056507d6, 0x0569dda0, 0x056eb47f,
+0x05738c72, 0x05786578, 0x057d3f92, 0x05821abe, 0x0586f6fd, 0x058bd44e, 0x0590b2af, 0x05959222,
+0x059a72a5, 0x059f5438, 0x05a436da, 0x05a91a8c, 0x05adff4b, 0x05b2e519, 0x05b7cbf5, 0x05bcb3dd,
+0x05c19cd3, 0x05c686d4, 0x05cb71e2, 0x05d05dfb, 0x05d54b1f, 0x05da394d, 0x05df2885, 0x05e418c7,
+0x05e90a12, 0x05edfc66, 0x05f2efc2, 0x05f7e426, 0x05fcd992, 0x0601d004, 0x0606c77d, 0x060bbffd,
+0x0610b982, 0x0615b40c, 0x061aaf9b, 0x061fac2f, 0x0624a9c7, 0x0629a863, 0x062ea802, 0x0633a8a3,
+0x0638aa47, 0x063dacee, 0x0642b095, 0x0647b53f, 0x064cbae8, 0x0651c193, 0x0656c93d, 0x065bd1e7,
+0x0660db90, 0x0665e639, 0x066af1df, 0x066ffe84, 0x06750c26, 0x067a1ac6, 0x067f2a62, 0x06843afb,
+0x06894c90, 0x068e5f21, 0x069372ad, 0x06988735, 0x069d9cb6, 0x06a2b332, 0x06a7caa8, 0x06ace318,
+0x06b1fc80, 0x06b716e2, 0x06bc323b, 0x06c14e8d, 0x06c66bd6, 0x06cb8a17, 0x06d0a94e, 0x06d5c97c,
+0x06daeaa0, 0x06e00cba, 0x06e52fca, 0x06ea53ce, 0x06ef78c8, 0x06f49eb5, 0x06f9c597, 0x06feed6d,
+0x07041635, 0x07093ff1, 0x070e6aa0, 0x07139640, 0x0718c2d3, 0x071df057, 0x07231ecd, 0x07284e33,
+0x072d7e8a, 0x0732afd2, 0x0737e209, 0x073d1530, 0x07424946, 0x07477e4a, 0x074cb43e, 0x0751eb20,
+0x075722ef, 0x075c5bac, 0x07619556, 0x0766cfee, 0x076c0b71, 0x077147e1, 0x0776853d, 0x077bc385,
+0x078102b8, 0x078642d6, 0x078b83de, 0x0790c5d1, 0x079608ae, 0x079b4c74, 0x07a09124, 0x07a5d6bd,
+0x07ab1d3e, 0x07b064a8, 0x07b5acfa, 0x07baf634, 0x07c04056, 0x07c58b5e, 0x07cad74e, 0x07d02424,
+0x07d571e0, 0x07dac082, 0x07e0100a, 0x07e56077, 0x07eab1ca, 0x07f00401, 0x07f5571c, 0x07faab1c,
+0x07ffffff, 0x080555c7, 0x080aac71, 0x081003fe, 0x08155c6e, 0x081ab5c0, 0x08200ff5, 0x08256b0b,
+0x082ac703, 0x083023dc, 0x08358196, 0x083ae030, 0x08403fab, 0x0845a006, 0x084b0141, 0x0850635b,
+0x0855c654, 0x085b2a2d, 0x08608ee4, 0x0865f479, 0x086b5aed, 0x0870c23e, 0x08762a6d, 0x087b9379,
+0x0880fd62, 0x08866828, 0x088bd3ca, 0x08914048, 0x0896ada3, 0x089c1bd8, 0x08a18aea, 0x08a6fad6,
+0x08ac6b9d, 0x08b1dd3f, 0x08b74fbb, 0x08bcc311, 0x08c23741, 0x08c7ac4a, 0x08cd222c, 0x08d298e8,
+0x08d8107c, 0x08dd88e8, 0x08e3022d, 0x08e87c49, 0x08edf73d, 0x08f37309, 0x08f8efac, 0x08fe6d25,
+0x0903eb75, 0x09096a9c, 0x090eea99, 0x09146b6b, 0x0919ed13, 0x091f6f91, 0x0924f2e3, 0x092a770b,
+0x092ffc06, 0x093581d7, 0x093b087b, 0x09408ff3, 0x0946183f, 0x094ba15e, 0x09512b51, 0x0956b616,
+0x095c41ae, 0x0961ce18, 0x09675b54, 0x096ce962, 0x09727842, 0x097807f3, 0x097d9876, 0x098329c9,
+0x0988bbed, 0x098e4ee1, 0x0993e2a6, 0x0999773a, 0x099f0c9f, 0x09a4a2d3, 0x09aa39d6, 0x09afd1a8,
+0x09b56a49, 0x09bb03b8, 0x09c09df6, 0x09c63902, 0x09cbd4dc, 0x09d17183, 0x09d70ef8, 0x09dcad3a,
+0x09e24c49, 0x09e7ec25, 0x09ed8ccd, 0x09f32e41, 0x09f8d082, 0x09fe738e, 0x0a041766, 0x0a09bc09,
+0x0a0f6178, 0x0a1507b1, 0x0a1aaeb5, 0x0a205684, 0x0a25ff1c, 0x0a2ba87f, 0x0a3152ac, 0x0a36fda2,
+0x0a3ca962, 0x0a4255ea, 0x0a48033c, 0x0a4db157, 0x0a536039, 0x0a590fe5, 0x0a5ec058, 0x0a647193,
+0x0a6a2396, 0x0a6fd660, 0x0a7589f2, 0x0a7b3e4b, 0x0a80f36a, 0x0a86a950, 0x0a8c5ffc, 0x0a92176f,
+0x0a97cfa7, 0x0a9d88a5, 0x0aa34269, 0x0aa8fcf2, 0x0aaeb840, 0x0ab47453, 0x0aba312b, 0x0abfeec8,
+0x0ac5ad28, 0x0acb6c4d, 0x0ad12c36, 0x0ad6ece2, 0x0adcae52, 0x0ae27085, 0x0ae8337b, 0x0aedf734,
+0x0af3bbb0, 0x0af980ee, 0x0aff46ef, 0x0b050db2, 0x0b0ad536, 0x0b109d7c, 0x0b166684, 0x0b1c304d,
+0x0b21fad7, 0x0b27c622, 0x0b2d922e, 0x0b335efa, 0x0b392c87, 0x0b3efad3, 0x0b44c9e0, 0x0b4a99ac,
+0x0b506a38, 0x0b563b83, 0x0b5c0d8e, 0x0b61e057, 0x0b67b3df, 0x0b6d8826, 0x0b735d2b, 0x0b7932ee,
+0x0b7f096f, 0x0b84e0ae, 0x0b8ab8ab, 0x0b909165, 0x0b966add, 0x0b9c4511, 0x0ba22003, 0x0ba7fbb1,
+0x0badd81b, 0x0bb3b542, 0x0bb99326, 0x0bbf71c5, 0x0bc55120, 0x0bcb3136, 0x0bd11208, 0x0bd6f395,
+0x0bdcd5dd, 0x0be2b8e0, 0x0be89c9e, 0x0bee8116, 0x0bf46649, 0x0bfa4c36, 0x0c0032dc, 0x0c061a3d,
+0x0c0c0257, 0x0c11eb2a, 0x0c17d4b7, 0x0c1dbefd, 0x0c23a9fc, 0x0c2995b3, 0x0c2f8223, 0x0c356f4c,
+0x0c3b5d2c, 0x0c414bc5, 0x0c473b16, 0x0c4d2b1e, 0x0c531bde, 0x0c590d55, 0x0c5eff83, 0x0c64f268,
+0x0c6ae604, 0x0c70da57, 0x0c76cf60, 0x0c7cc51f, 0x0c82bb95, 0x0c88b2c1, 0x0c8eaaa2, 0x0c94a339,
+0x0c9a9c85, 0x0ca09687, 0x0ca6913e, 0x0cac8caa, 0x0cb288ca, 0x0cb885a0, 0x0cbe8329, 0x0cc48167,
+0x0cca8059, 0x0cd07fff, 0x0cd68059, 0x0cdc8167, 0x0ce28328, 0x0ce8859c, 0x0cee88c4, 0x0cf48c9e,
+0x0cfa912b, 0x0d00966b, 0x0d069c5d, 0x0d0ca302, 0x0d12aa59, 0x0d18b262, 0x0d1ebb1d, 0x0d24c489,
+0x0d2acea7, 0x0d30d976, 0x0d36e4f7, 0x0d3cf128, 0x0d42fe0b, 0x0d490b9e, 0x0d4f19e2, 0x0d5528d6,
+0x0d5b387b, 0x0d6148cf, 0x0d6759d4, 0x0d6d6b88, 0x0d737dec, 0x0d799100, 0x0d7fa4c3, 0x0d85b935,
+0x0d8bce56, 0x0d91e426, 0x0d97faa4, 0x0d9e11d1, 0x0da429ad, 0x0daa4237, 0x0db05b6f, 0x0db67555,
+0x0dbc8fe9, 0x0dc2ab2a, 0x0dc8c719, 0x0dcee3b5, 0x0dd500ff, 0x0ddb1ef5, 0x0de13d99, 0x0de75ce9,
+0x0ded7ce6, 0x0df39d8f, 0x0df9bee5, 0x0dffe0e7, 0x0e060394, 0x0e0c26ee, 0x0e124af4, 0x0e186fa5,
+0x0e1e9501, 0x0e24bb09, 0x0e2ae1bb, 0x0e310919, 0x0e373122, 0x0e3d59d5, 0x0e438333, 0x0e49ad3c,
+0x0e4fd7ee, 0x0e56034b, 0x0e5c2f52, 0x0e625c02, 0x0e68895d, 0x0e6eb761, 0x0e74e60e, 0x0e7b1564,
+0x0e814564, 0x0e87760d, 0x0e8da75e, 0x0e93d959, 0x0e9a0bfb, 0x0ea03f47, 0x0ea6733a, 0x0eaca7d6,
+0x0eb2dd1a, 0x0eb91305, 0x0ebf4999, 0x0ec580d4, 0x0ecbb8b6, 0x0ed1f140, 0x0ed82a71, 0x0ede6449,
+0x0ee49ec8, 0x0eead9ed, 0x0ef115ba, 0x0ef7522d, 0x0efd8f46, 0x0f03cd05, 0x0f0a0b6b, 0x0f104a76,
+0x0f168a28, 0x0f1cca7f, 0x0f230b7b, 0x0f294d1d, 0x0f2f8f65, 0x0f35d251, 0x0f3c15e3, 0x0f425a19,
+0x0f489ef4, 0x0f4ee474, 0x0f552a98, 0x0f5b7161, 0x0f61b8ce, 0x0f6800df, 0x0f6e4994, 0x0f7492ed,
+0x0f7adce9, 0x0f81278a, 0x0f8772cd, 0x0f8dbeb4, 0x0f940b3e, 0x0f9a586b, 0x0fa0a63c, 0x0fa6f4af,
+0x0fad43c4, 0x0fb3937c, 0x0fb9e3d7, 0x0fc034d4, 0x0fc68673, 0x0fccd8b4, 0x0fd32b97, 0x0fd97f1c,
+0x0fdfd343, 0x0fe6280b, 0x0fec7d74, 0x0ff2d37f, 0x0ff92a2b, 0x0fff8178, 0x1005d966, 0x100c31f5,
+0x10128b24, 0x1018e4f4, 0x101f3f64, 0x10259a75, 0x102bf626, 0x10325277, 0x1038af67, 0x103f0cf8,
+0x10456b28, 0x104bc9f8, 0x10522967, 0x10588976, 0x105eea24, 0x10654b70, 0x106bad5c, 0x10720fe7,
+0x10787310, 0x107ed6d8, 0x10853b3f, 0x108ba043, 0x109205e6, 0x10986c27, 0x109ed307, 0x10a53a83,
+0x10aba29e, 0x10b20b57, 0x10b874ac, 0x10bedea0, 0x10c54930, 0x10cbb45e, 0x10d22029, 0x10d88c90,
+0x10def995, 0x10e56736, 0x10ebd574, 0x10f2444e, 0x10f8b3c5, 0x10ff23d8, 0x11059487, 0x110c05d2,
+0x111277b9, 0x1118ea3b, 0x111f5d59, 0x1125d113, 0x112c4568, 0x1132ba59, 0x11392fe5, 0x113fa60c,
+0x11461ccd, 0x114c942a, 0x11530c22, 0x115984b4, 0x115ffde0, 0x116677a7, 0x116cf209, 0x11736d04,
+0x1179e89a, 0x118064c9, 0x1186e192, 0x118d5ef5, 0x1193dcf2, 0x119a5b88, 0x11a0dab8, 0x11a75a81,
+0x11addae3, 0x11b45bde, 0x11badd72, 0x11c15f9f, 0x11c7e265, 0x11ce65c4, 0x11d4e9bb, 0x11db6e4a,
+0x11e1f372, 0x11e87931, 0x11eeff89, 0x11f58679, 0x11fc0e01, 0x12029621, 0x12091ed8, 0x120fa827,
+0x1216320d, 0x121cbc8a, 0x1223479f, 0x1229d34b, 0x12305f8e, 0x1236ec68, 0x123d79d9, 0x124407e0,
+0x124a967e, 0x125125b2, 0x1257b57d, 0x125e45de, 0x1264d6d6, 0x126b6863, 0x1271fa86, 0x12788d40,
+0x127f208f, 0x1285b473, 0x128c48ed, 0x1292ddfd, 0x129973a2, 0x12a009dc, 0x12a6a0ab, 0x12ad3810,
+0x12b3d009, 0x12ba6897, 0x12c101ba, 0x12c79b71, 0x12ce35bd, 0x12d4d09e, 0x12db6c13, 0x12e2081b,
+0x12e8a4b9, 0x12ef41ea, 0x12f5dfaf, 0x12fc7e07, 0x13031cf4, 0x1309bc74, 0x13105c88, 0x1316fd2f,
+0x131d9e69, 0x13244036, 0x132ae297, 0x1331858b, 0x13382911, 0x133ecd2b, 0x134571d7, 0x134c1716,
+0x1352bce7, 0x1359634a, 0x13600a40, 0x1366b1c9, 0x136d59e3, 0x1374028f, 0x137aabce, 0x1381559e,
+0x1387ffff, 0x138eaaf3, 0x13955678, 0x139c028e, 0x13a2af36, 0x13a95c6f, 0x13b00a39, 0x13b6b895,
+0x13bd6781, 0x13c416fe, 0x13cac70c, 0x13d177aa, 0x13d828d9, 0x13deda99, 0x13e58ce9, 0x13ec3fc9,
+0x13f2f33a, 0x13f9a73a, 0x14005bcb, 0x140710eb, 0x140dc69c, 0x14147cdc, 0x141b33ab, 0x1421eb0a,
+0x1428a2f9, 0x142f5b77, 0x14361484, 0x143cce21, 0x1443884c, 0x144a4307, 0x1450fe50, 0x1457ba28,
+0x145e768f, 0x14653384, 0x146bf108, 0x1472af1b, 0x14796dbb, 0x14802cea, 0x1486eca8, 0x148dacf3,
+0x14946dcc, 0x149b2f33, 0x14a1f128, 0x14a8b3aa, 0x14af76ba, 0x14b63a58, 0x14bcfe83, 0x14c3c33b,
+0x14ca8881, 0x14d14e54, 0x14d814b4, 0x14dedba0, 0x14e5a31a, 0x14ec6b21, 0x14f333b4, 0x14f9fcd4,
+0x1500c680, 0x150790b9, 0x150e5b7e, 0x151526cf, 0x151bf2ad, 0x1522bf17, 0x15298c0c, 0x1530598e,
+0x1537279b, 0x153df634, 0x1544c559, 0x154b950a, 0x15526545, 0x1559360d, 0x1560075f, 0x1566d93d,
+0x156daba6, 0x15747e99, 0x157b5218, 0x15822622, 0x1588fab6, 0x158fcfd6, 0x1596a57f, 0x159d7bb4,
+0x15a45272, 0x15ab29bc, 0x15b2018f, 0x15b8d9ed, 0x15bfb2d4, 0x15c68c46, 0x15cd6641, 0x15d440c7,
+0x15db1bd6, 0x15e1f76f, 0x15e8d391, 0x15efb03d, 0x15f68d73, 0x15fd6b31, 0x16044979, 0x160b284a,
+0x161207a5, 0x1618e788, 0x161fc7f4, 0x1626a8e9, 0x162d8a67, 0x16346c6d, 0x163b4efc, 0x16423213,
+0x164915b3, 0x164ff9dc, 0x1656de8c, 0x165dc3c5, 0x1664a985, 0x166b8fce, 0x1672769f, 0x16795df7,
+0x168045d8, 0x16872e40, 0x168e172f, 0x169500a7, 0x169beaa5, 0x16a2d52b, 0x16a9c038, 0x16b0abcd,
+0x16b797e8, 0x16be848b, 0x16c571b4, 0x16cc5f65, 0x16d34d9c, 0x16da3c5a, 0x16e12b9e, 0x16e81b69,
+0x16ef0bbb, 0x16f5fc93, 0x16fcedf1, 0x1703dfd6, 0x170ad241, 0x1711c531, 0x1718b8a8, 0x171faca5,
+0x1726a127, 0x172d9630, 0x17348bbe, 0x173b81d1, 0x1742786b, 0x17496f89, 0x1750672d, 0x17575f56,
+0x175e5805, 0x17655139, 0x176c4af1, 0x1773452f, 0x177a3ff2, 0x17813b39, 0x17883705, 0x178f3356,
+0x1796302c, 0x179d2d86, 0x17a42b64, 0x17ab29c7, 0x17b228ae, 0x17b92819, 0x17c02809, 0x17c7287c,
+0x17ce2974, 0x17d52aef, 0x17dc2cef, 0x17e32f72, 0x17ea3278, 0x17f13603, 0x17f83a11, 0x17ff3ea2,
+0x180643b7, 0x180d494f, 0x18144f6a, 0x181b5609, 0x18225d2a, 0x182964cf, 0x18306cf6, 0x183775a1,
+0x183e7ece, 0x1845887e, 0x184c92b0, 0x18539d65, 0x185aa89d, 0x1861b457, 0x1868c093, 0x186fcd52,
+0x1876da93, 0x187de856, 0x1884f69b, 0x188c0562, 0x189314aa, 0x189a2475, 0x18a134c2, 0x18a84590,
+0x18af56e0, 0x18b668b1, 0x18bd7b04, 0x18c48dd8, 0x18cba12d, 0x18d2b504, 0x18d9c95c, 0x18e0de35,
+0x18e7f38f, 0x18ef096b, 0x18f61fc7, 0x18fd36a3, 0x19044e01, 0x190b65df, 0x19127e3e, 0x1919971d,
+0x1920b07d, 0x1927ca5d, 0x192ee4be, 0x1935ff9f, 0x193d1b00, 0x194436e1, 0x194b5342, 0x19527023,
+0x19598d84, 0x1960ab65, 0x1967c9c6, 0x196ee8a6, 0x19760806, 0x197d27e6, 0x19844845, 0x198b6923,
+0x19928a81, 0x1999ac5e, 0x19a0ceba, 0x19a7f196, 0x19af14f0, 0x19b638ca, 0x19bd5d22, 0x19c481f9,
+0x19cba74f, 0x19d2cd24, 0x19d9f378, 0x19e11a4a, 0x19e8419a, 0x19ef6969, 0x19f691b6, 0x19fdba82,
+0x1a04e3cc, 0x1a0c0d94, 0x1a1337da, 0x1a1a629f, 0x1a218de1, 0x1a28b9a1, 0x1a2fe5df, 0x1a37129b,
+0x1a3e3fd4, 0x1a456d8b, 0x1a4c9bc0, 0x1a53ca72, 0x1a5af9a2, 0x1a62294f, 0x1a695979, 0x1a708a21,
+0x1a77bb45, 0x1a7eece7, 0x1a861f06, 0x1a8d51a2, 0x1a9484bb, 0x1a9bb850, 0x1aa2ec62, 0x1aaa20f1,
+0x1ab155fd, 0x1ab88b85, 0x1abfc18a, 0x1ac6f80b, 0x1ace2f09, 0x1ad56683, 0x1adc9e79, 0x1ae3d6eb,
+0x1aeb0fda, 0x1af24944, 0x1af9832b, 0x1b00bd8d, 0x1b07f86c, 0x1b0f33c6, 0x1b166f9c, 0x1b1dabed,
+0x1b24e8ba, 0x1b2c2603, 0x1b3363c7, 0x1b3aa206, 0x1b41e0c1, 0x1b491ff7, 0x1b505fa9, 0x1b579fd5,
+0x1b5ee07d, 0x1b66219f, 0x1b6d633d, 0x1b74a555, 0x1b7be7e9, 0x1b832af7, 0x1b8a6e7f, 0x1b91b283,
+0x1b98f701, 0x1ba03bf9, 0x1ba7816c, 0x1baec75a, 0x1bb60dc1, 0x1bbd54a3, 0x1bc49bff, 0x1bcbe3d6,
+0x1bd32c26, 0x1bda74f1, 0x1be1be35, 0x1be907f3, 0x1bf0522b, 0x1bf79cdd, 0x1bfee809, 0x1c0633ae,
+0x1c0d7fcc, 0x1c14cc65, 0x1c1c1976, 0x1c236702, 0x1c2ab506, 0x1c320384, 0x1c39527b, 0x1c40a1eb,
+0x1c47f1d4, 0x1c4f4236, 0x1c569311, 0x1c5de466, 0x1c653632, 0x1c6c8878, 0x1c73db37, 0x1c7b2e6e,
+0x1c82821d, 0x1c89d646, 0x1c912ae6, 0x1c987fff, 0x1c9fd591, 0x1ca72b9b, 0x1cae821d, 0x1cb5d917,
+0x1cbd3089, 0x1cc48874, 0x1ccbe0d6, 0x1cd339b1, 0x1cda9303, 0x1ce1eccd, 0x1ce9470f, 0x1cf0a1c8,
+0x1cf7fcf9, 0x1cff58a2, 0x1d06b4c2, 0x1d0e115a, 0x1d156e69, 0x1d1ccbf0, 0x1d2429ed, 0x1d2b8862,
+0x1d32e74e, 0x1d3a46b2, 0x1d41a68c, 0x1d4906dd, 0x1d5067a6, 0x1d57c8e5, 0x1d5f2a9b, 0x1d668cc7,
+0x1d6def6b, 0x1d755285, 0x1d7cb615, 0x1d841a1c, 0x1d8b7e9a, 0x1d92e38e, 0x1d9a48f9, 0x1da1aed9,
+0x1da91530, 0x1db07bfd, 0x1db7e340, 0x1dbf4afa, 0x1dc6b329, 0x1dce1bce, 0x1dd584e9, 0x1ddcee7a,
+0x1de45881, 0x1debc2fe, 0x1df32df0, 0x1dfa9957, 0x1e020535, 0x1e097187, 0x1e10de50, 0x1e184b8d,
+0x1e1fb940, 0x1e272768, 0x1e2e9606, 0x1e360518, 0x1e3d74a0, 0x1e44e49d, 0x1e4c550e, 0x1e53c5f5,
+0x1e5b3750, 0x1e62a921, 0x1e6a1b66, 0x1e718e20, 0x1e79014e, 0x1e8074f1, 0x1e87e909, 0x1e8f5d95,
+0x1e96d295, 0x1e9e480a, 0x1ea5bdf3, 0x1ead3450, 0x1eb4ab22, 0x1ebc2268, 0x1ec39a22, 0x1ecb1250,
+0x1ed28af1, 0x1eda0407, 0x1ee17d91, 0x1ee8f78f, 0x1ef07200, 0x1ef7ece5, 0x1eff683d, 0x1f06e40a,
+0x1f0e604a, 0x1f15dcfd, 0x1f1d5a24, 0x1f24d7be, 0x1f2c55cb, 0x1f33d44c, 0x1f3b5340, 0x1f42d2a7,
+0x1f4a5281, 0x1f51d2ce, 0x1f59538f, 0x1f60d4c2, 0x1f685668, 0x1f6fd881, 0x1f775b0d, 0x1f7ede0c,
+0x1f86617d, 0x1f8de561, 0x1f9569b7, 0x1f9cee80, 0x1fa473bb, 0x1fabf969, 0x1fb37f8a, 0x1fbb061c,
+0x1fc28d21, 0x1fca1498, 0x1fd19c81, 0x1fd924dc, 0x1fe0ada9, 0x1fe836e9, 0x1fefc09a, 0x1ff74abd,
+0x1ffed552, 0x20066059, 0x200debd1, 0x201577bc, 0x201d0417, 0x202490e5, 0x202c1e24, 0x2033abd4,
+0x203b39f6, 0x2042c889, 0x204a578d, 0x2051e703, 0x205976ea, 0x20610742, 0x2068980b, 0x20702946,
+0x2077baf1, 0x207f4d0d, 0x2086df9a, 0x208e7298, 0x20960607, 0x209d99e7, 0x20a52e37, 0x20acc2f8,
+0x20b45829, 0x20bbedcb, 0x20c383de, 0x20cb1a61, 0x20d2b154, 0x20da48b8, 0x20e1e08c, 0x20e978d0,
+0x20f11185, 0x20f8aaa9, 0x2100443e, 0x2107de43, 0x210f78b7, 0x2117139c, 0x211eaef0, 0x21264ab5,
+0x212de6e9, 0x2135838d, 0x213d20a0, 0x2144be24, 0x214c5c16, 0x2153fa79, 0x215b994b, 0x2163388c,
+0x216ad83d, 0x2172785d, 0x217a18ec, 0x2181b9ea, 0x21895b58, 0x2190fd35, 0x21989f81, 0x21a0423c,
+0x21a7e566, 0x21af88ff, 0x21b72d06, 0x21bed17d, 0x21c67663, 0x21ce1bb7, 0x21d5c17a, 0x21dd67ab,
+0x21e50e4b, 0x21ecb55a, 0x21f45cd7, 0x21fc04c3, 0x2203ad1d, 0x220b55e5, 0x2212ff1c, 0x221aa8c1,
+0x222252d4, 0x2229fd56, 0x2231a845, 0x223953a3, 0x2240ff6e, 0x2248aba8, 0x2250584f, 0x22580565,
+0x225fb2e8, 0x226760d9, 0x226f0f37, 0x2276be04, 0x227e6d3e, 0x22861ce5, 0x228dccfa, 0x22957d7d,
+0x229d2e6d, 0x22a4dfcb, 0x22ac9195, 0x22b443cd, 0x22bbf673, 0x22c3a985, 0x22cb5d05, 0x22d310f2,
+0x22dac54c, 0x22e27a13, 0x22ea2f47, 0x22f1e4e8, 0x22f99af5, 0x23015170, 0x23090857, 0x2310bfab,
+0x2318776c, 0x23202f99, 0x2327e833, 0x232fa13a, 0x23375aad, 0x233f148c, 0x2346ced8, 0x234e8991,
+0x235644b5, 0x235e0046, 0x2365bc43, 0x236d78ac, 0x23753582, 0x237cf2c3, 0x2384b071, 0x238c6e8a,
+0x23942d10, 0x239bec01, 0x23a3ab5e, 0x23ab6b28, 0x23b32b5c, 0x23baebfd, 0x23c2ad09, 0x23ca6e81,
+0x23d23064, 0x23d9f2b3, 0x23e1b56e, 0x23e97894, 0x23f13c25, 0x23f90022, 0x2400c48a, 0x2408895d,
+0x24104e9b, 0x24181445, 0x241fda5a, 0x2427a0da, 0x242f67c5, 0x24372f1a, 0x243ef6db, 0x2446bf07,
+0x244e879e, 0x2456509f, 0x245e1a0b, 0x2465e3e2, 0x246dae24, 0x247578d0, 0x247d43e7, 0x24850f68,
+0x248cdb54, 0x2494a7ab, 0x249c746b, 0x24a44197, 0x24ac0f2c, 0x24b3dd2c, 0x24bbab96, 0x24c37a6a,
+0x24cb49a8, 0x24d31951, 0x24dae963, 0x24e2b9e0, 0x24ea8ac6, 0x24f25c17, 0x24fa2dd1, 0x2501fff5,
+0x2509d283, 0x2511a57b, 0x251978dc, 0x25214ca7, 0x252920dc, 0x2530f57b, 0x2538ca82, 0x25409ff4,
+0x254875cf, 0x25504c13, 0x255822c0, 0x255ff9d7, 0x2567d157, 0x256fa941, 0x25778193, 0x257f5a4f,
+0x25873374, 0x258f0d02, 0x2596e6f9, 0x259ec159, 0x25a69c22, 0x25ae7753, 0x25b652ee, 0x25be2ef1,
+0x25c60b5e, 0x25cde833, 0x25d5c570, 0x25dda316, 0x25e58125, 0x25ed5f9d, 0x25f53e7c, 0x25fd1dc5,
+0x2604fd76, 0x260cdd8f, 0x2614be10, 0x261c9efa, 0x2624804c, 0x262c6206, 0x26344429, 0x263c26b3,
+0x264409a6, 0x264bed01, 0x2653d0c3, 0x265bb4ee, 0x26639980, 0x266b7e7b, 0x267363dd, 0x267b49a7,
+0x26832fd9, 0x268b1673, 0x2692fd74, 0x269ae4dd, 0x26a2ccad, 0x26aab4e5, 0x26b29d85, 0x26ba868c,
+0x26c26ffa, 0x26ca59d0, 0x26d2440d, 0x26da2eb1, 0x26e219bd, 0x26ea0530, 0x26f1f10a, 0x26f9dd4b,
+0x2701c9f4, 0x2709b703, 0x2711a479, 0x27199257, 0x2721809b, 0x27296f46, 0x27315e58, 0x27394dd1,
+0x27413db0, 0x27492df7, 0x27511ea4, 0x27590fb7, 0x27610132, 0x2768f312, 0x2770e55a, 0x2778d808,
+0x2780cb1c, 0x2788be96, 0x2790b277, 0x2798a6bf, 0x27a09b6c, 0x27a89080, 0x27b085fa, 0x27b87bdb,
+0x27c07221, 0x27c868cd, 0x27d05fe0, 0x27d85758, 0x27e04f37, 0x27e8477b, 0x27f04026, 0x27f83936,
+0x280032ac, 0x28082c87, 0x281026c9, 0x28182170, 0x28201c7d, 0x282817ef, 0x283013c7, 0x28381004,
+0x28400ca7, 0x284809b0, 0x2850071d, 0x285804f1, 0x28600329, 0x286801c7, 0x287000ca, 0x28780032,
+0x287fffff, 0x28880032, 0x289000ca, 0x289801c6, 0x28a00328, 0x28a804ef, 0x28b0071b, 0x28b809ab,
+0x28c00ca1, 0x28c80ffb, 0x28d013ba, 0x28d817de, 0x28e01c66, 0x28e82153, 0x28f026a5, 0x28f82c5b,
+0x29003276, 0x290838f6, 0x29103fda, 0x29184722, 0x29204ecf, 0x292856e0, 0x29305f55, 0x2938682f,
+0x2940716d, 0x29487b0f, 0x29508516, 0x29588f80, 0x29609a4f, 0x2968a582, 0x2970b118, 0x2978bd13,
+0x2980c972, 0x2988d634, 0x2990e35a, 0x2998f0e5, 0x29a0fed3, 0x29a90d24, 0x29b11bda, 0x29b92af3,
+0x29c13a70, 0x29c94a50, 0x29d15a94, 0x29d96b3c, 0x29e17c47, 0x29e98db5, 0x29f19f87, 0x29f9b1bc,
+0x2a01c455, 0x2a09d751, 0x2a11eab0, 0x2a19fe72, 0x2a221298, 0x2a2a2721, 0x2a323c0d, 0x2a3a515c,
+0x2a42670e, 0x2a4a7d23, 0x2a52939b, 0x2a5aaa75, 0x2a62c1b3, 0x2a6ad954, 0x2a72f157, 0x2a7b09be,
+0x2a832287, 0x2a8b3bb2, 0x2a935541, 0x2a9b6f32, 0x2aa38986, 0x2aaba43c, 0x2ab3bf55, 0x2abbdad0,
+0x2ac3f6ad, 0x2acc12ee, 0x2ad42f90, 0x2adc4c95, 0x2ae469fc, 0x2aec87c6, 0x2af4a5f1, 0x2afcc47f,
+0x2b04e36f, 0x2b0d02c1, 0x2b152276, 0x2b1d428c, 0x2b256304, 0x2b2d83df, 0x2b35a51b, 0x2b3dc6b9,
+0x2b45e8b9, 0x2b4e0b1b, 0x2b562ddf, 0x2b5e5104, 0x2b66748c, 0x2b6e9875, 0x2b76bcbf, 0x2b7ee16b,
+0x2b870679, 0x2b8f2be9, 0x2b9751b9, 0x2b9f77ec, 0x2ba79e80, 0x2bafc575, 0x2bb7eccb, 0x2bc01483,
+0x2bc83c9d, 0x2bd06517, 0x2bd88df3, 0x2be0b730, 0x2be8e0ce, 0x2bf10acd, 0x2bf9352e, 0x2c015fef,
+0x2c098b11, 0x2c11b695, 0x2c19e279, 0x2c220ebf, 0x2c2a3b65, 0x2c32686c, 0x2c3a95d4, 0x2c42c39c,
+0x2c4af1c6, 0x2c532050, 0x2c5b4f3a, 0x2c637e86, 0x2c6bae32, 0x2c73de3e, 0x2c7c0eab, 0x2c843f79,
+0x2c8c70a7, 0x2c94a236, 0x2c9cd424, 0x2ca50674, 0x2cad3923, 0x2cb56c33, 0x2cbd9fa3, 0x2cc5d374,
+0x2cce07a4, 0x2cd63c35, 0x2cde7126, 0x2ce6a677, 0x2ceedc28, 0x2cf71238, 0x2cff48a9, 0x2d077f7a,
+0x2d0fb6ab, 0x2d17ee3c, 0x2d20262c, 0x2d285e7d, 0x2d30972d, 0x2d38d03d, 0x2d4109ac, 0x2d49437c,
+0x2d517daa, 0x2d59b839, 0x2d61f327, 0x2d6a2e75, 0x2d726a22, 0x2d7aa62e, 0x2d82e29b, 0x2d8b1f66,
+0x2d935c91, 0x2d9b9a1b, 0x2da3d804, 0x2dac164d, 0x2db454f5, 0x2dbc93fc, 0x2dc4d363, 0x2dcd1328,
+0x2dd5534d, 0x2ddd93d0, 0x2de5d4b3, 0x2dee15f5, 0x2df65795, 0x2dfe9995, 0x2e06dbf4, 0x2e0f1eb1,
+0x2e1761cd, 0x2e1fa548, 0x2e27e922, 0x2e302d5a, 0x2e3871f2, 0x2e40b6e8, 0x2e48fc3c, 0x2e5141ef,
+0x2e598801, 0x2e61ce71, 0x2e6a1540, 0x2e725c6d, 0x2e7aa3f9, 0x2e82ebe3, 0x2e8b342b, 0x2e937cd2,
+0x2e9bc5d7, 0x2ea40f3b, 0x2eac58fc, 0x2eb4a31c, 0x2ebced9a, 0x2ec53876, 0x2ecd83b0, 0x2ed5cf49,
+0x2ede1b3f, 0x2ee66794, 0x2eeeb446, 0x2ef70156, 0x2eff4ec5, 0x2f079c91, 0x2f0feabb, 0x2f183942,
+0x2f208828, 0x2f28d76b, 0x2f31270c, 0x2f39770b, 0x2f41c768, 0x2f4a1822, 0x2f526939, 0x2f5abaaf,
+0x2f630c81, 0x2f6b5eb2, 0x2f73b13f, 0x2f7c042a, 0x2f845773, 0x2f8cab19, 0x2f94ff1c, 0x2f9d537d,
+0x2fa5a83a, 0x2fadfd56, 0x2fb652ce, 0x2fbea8a3, 0x2fc6fed6, 0x2fcf5566, 0x2fd7ac52, 0x2fe0039c,
+0x2fe85b43, 0x2ff0b347, 0x2ff90ba8, 0x30016466, 0x3009bd80, 0x301216f8, 0x301a70cc, 0x3022cafd,
+0x302b258b, 0x30338076, 0x303bdbbd, 0x30443761, 0x304c9362, 0x3054efbf, 0x305d4c79, 0x3065a98f,
+0x306e0702, 0x307664d2, 0x307ec2fe, 0x30872186, 0x308f806b, 0x3097dfac, 0x30a03f49, 0x30a89f43,
+0x30b0ff99, 0x30b9604b, 0x30c1c159, 0x30ca22c4, 0x30d2848a, 0x30dae6ad, 0x30e3492c, 0x30ebac07,
+0x30f40f3e, 0x30fc72d1, 0x3104d6c0, 0x310d3b0b, 0x31159fb1, 0x311e04b4, 0x31266a12, 0x312ecfcd,
+0x313735e3, 0x313f9c55, 0x31480322, 0x31506a4b, 0x3158d1d0, 0x316139b0, 0x3169a1ed, 0x31720a84,
+0x317a7377, 0x3182dcc6, 0x318b4670, 0x3193b076, 0x319c1ad6, 0x31a48593, 0x31acf0aa, 0x31b55c1d,
+0x31bdc7ec, 0x31c63415, 0x31cea09a, 0x31d70d7a, 0x31df7ab5, 0x31e7e84b, 0x31f0563d, 0x31f8c489,
+0x32013331, 0x3209a233, 0x32121191, 0x321a8149, 0x3222f15d, 0x322b61cb, 0x3233d294, 0x323c43b8,
+0x3244b537, 0x324d2711, 0x32559945, 0x325e0bd4, 0x32667ebe, 0x326ef202, 0x327765a1, 0x327fd99b,
+0x32884def, 0x3290c29e, 0x329937a7, 0x32a1ad0b, 0x32aa22c9, 0x32b298e2, 0x32bb0f55, 0x32c38622,
+0x32cbfd4a, 0x32d474cc, 0x32dceca8, 0x32e564df, 0x32eddd70, 0x32f6565b, 0x32fecfa0, 0x3307493f,
+0x330fc338, 0x33183d8c, 0x3320b839, 0x33293341, 0x3331aea2, 0x333a2a5e, 0x3342a673, 0x334b22e2,
+0x33539fab, 0x335c1cce, 0x33649a4b, 0x336d1821, 0x33759652, 0x337e14dc, 0x338693bf, 0x338f12fd,
+0x33979294, 0x33a01284, 0x33a892cf, 0x33b11372, 0x33b9946f, 0x33c215c6, 0x33ca9776, 0x33d31980,
+0x33db9be3, 0x33e41ea0, 0x33eca1b5, 0x33f52524, 0x33fda8ed, 0x34062d0e, 0x340eb189, 0x3417365d,
+0x341fbb8b, 0x34284111, 0x3430c6f1, 0x34394d29, 0x3441d3bb, 0x344a5aa6, 0x3452e1e9, 0x345b6986,
+0x3463f17c, 0x346c79ca, 0x34750272, 0x347d8b72, 0x348614cb, 0x348e9e7d, 0x34972888, 0x349fb2eb,
+0x34a83da8, 0x34b0c8bd, 0x34b9542a, 0x34c1dff0, 0x34ca6c0f, 0x34d2f887, 0x34db8557, 0x34e4127f,
+0x34eca000, 0x34f52dda, 0x34fdbc0c, 0x35064a96, 0x350ed979, 0x351768b4, 0x351ff847, 0x35288833,
+0x35311877, 0x3539a913, 0x35423a08, 0x354acb54, 0x35535cf9, 0x355beef6, 0x3564814b, 0x356d13f8,
+0x3575a6fe, 0x357e3a5b, 0x3586ce10, 0x358f621d, 0x3597f682, 0x35a08b40, 0x35a92055, 0x35b1b5c1,
+0x35ba4b86, 0x35c2e1a3, 0x35cb7817, 0x35d40ee3, 0x35dca607, 0x35e53d82, 0x35edd555, 0x35f66d80,
+0x35ff0602, 0x36079edc, 0x3610380e, 0x3618d197, 0x36216b77, 0x362a05af, 0x3632a03f, 0x363b3b26,
+0x3643d664, 0x364c71fa, 0x36550de7, 0x365daa2b, 0x366646c7, 0x366ee3ba, 0x36778104, 0x36801ea5,
+0x3688bc9e, 0x36915aee, 0x3699f994, 0x36a29892, 0x36ab37e7, 0x36b3d793, 0x36bc7796, 0x36c517f1,
+0x36cdb8a2, 0x36d659aa, 0x36defb08, 0x36e79cbe, 0x36f03ecb, 0x36f8e12e, 0x370183e9, 0x370a26fa,
+0x3712ca62, 0x371b6e20, 0x37241235, 0x372cb6a1, 0x37355b64, 0x373e007d, 0x3746a5ed, 0x374f4bb3,
+0x3757f1d0, 0x37609844, 0x37693f0e, 0x3771e62e, 0x377a8da5, 0x37833572, 0x378bdd96, 0x37948610,
+0x379d2ee0, 0x37a5d807, 0x37ae8183, 0x37b72b57, 0x37bfd580, 0x37c87fff, 0x37d12ad5, 0x37d9d601,
+0x37e28183, 0x37eb2d5b, 0x37f3d989, 0x37fc860e, 0x380532e8, 0x380de018, 0x38168d9e, 0x381f3b7b,
+0x3827e9ad, 0x38309835, 0x38394712, 0x3841f646, 0x384aa5d0, 0x385355af, 0x385c05e4, 0x3864b66f,
+0x386d674f, 0x38761885, 0x387eca11, 0x38877bf2, 0x38902e29, 0x3898e0b6, 0x38a19398, 0x38aa46d0,
+0x38b2fa5d, 0x38bbae40, 0x38c46278, 0x38cd1705, 0x38d5cbe8, 0x38de8120, 0x38e736ae, 0x38efec91,
+0x38f8a2c9, 0x39015957, 0x390a103a, 0x3912c772, 0x391b7eff, 0x392436e1, 0x392cef19, 0x3935a7a5,
+0x393e6087, 0x394719be, 0x394fd34a, 0x39588d2b, 0x39614760, 0x396a01eb, 0x3972bccb, 0x397b7800,
+0x39843389, 0x398cef68, 0x3995ab9b, 0x399e6823, 0x39a72500, 0x39afe232, 0x39b89fb8, 0x39c15d93,
+0x39ca1bc3, 0x39d2da47, 0x39db9921, 0x39e4584e, 0x39ed17d1, 0x39f5d7a8, 0x39fe97d3, 0x3a075853,
+0x3a101927, 0x3a18da50, 0x3a219bce, 0x3a2a5d9f, 0x3a331fc5, 0x3a3be240, 0x3a44a50f, 0x3a4d6832,
+0x3a562ba9, 0x3a5eef75, 0x3a67b395, 0x3a707809, 0x3a793cd2, 0x3a8201ee, 0x3a8ac75f, 0x3a938d24,
+0x3a9c533d, 0x3aa519aa, 0x3aade06b, 0x3ab6a780, 0x3abf6ee9, 0x3ac836a6, 0x3ad0feb7, 0x3ad9c71c,
+0x3ae28fd5, 0x3aeb58e1, 0x3af42242, 0x3afcebf6, 0x3b05b5fe, 0x3b0e805a, 0x3b174b0a, 0x3b20160d,
+0x3b28e164, 0x3b31ad0f, 0x3b3a790e, 0x3b434560, 0x3b4c1205, 0x3b54deff, 0x3b5dac4b, 0x3b6679ec,
+0x3b6f47e0, 0x3b781627, 0x3b80e4c2, 0x3b89b3b0, 0x3b9282f2, 0x3b9b5287, 0x3ba4226f, 0x3bacf2ab,
+0x3bb5c33a, 0x3bbe941c, 0x3bc76552, 0x3bd036db, 0x3bd908b7, 0x3be1dae6, 0x3beaad69, 0x3bf3803e,
+0x3bfc5367, 0x3c0526e3, 0x3c0dfab2, 0x3c16ced4, 0x3c1fa349, 0x3c287811, 0x3c314d2c, 0x3c3a229a,
+0x3c42f85b, 0x3c4bce6f, 0x3c54a4d5, 0x3c5d7b8f, 0x3c66529b, 0x3c6f29fa, 0x3c7801ac, 0x3c80d9b1,
+0x3c89b209, 0x3c928ab3, 0x3c9b63b0, 0x3ca43cff, 0x3cad16a2, 0x3cb5f097, 0x3cbecade, 0x3cc7a578,
+0x3cd08065, 0x3cd95ba4, 0x3ce23736, 0x3ceb131a, 0x3cf3ef50, 0x3cfccbd9, 0x3d05a8b5, 0x3d0e85e3,
+0x3d176363, 0x3d204136, 0x3d291f5b, 0x3d31fdd2, 0x3d3adc9b, 0x3d43bbb7, 0x3d4c9b25, 0x3d557ae5,
+0x3d5e5af7, 0x3d673b5c, 0x3d701c13, 0x3d78fd1b, 0x3d81de76, 0x3d8ac023, 0x3d93a222, 0x3d9c8473,
+0x3da56716, 0x3dae4a0b, 0x3db72d52, 0x3dc010eb, 0x3dc8f4d6, 0x3dd1d912, 0x3ddabda1, 0x3de3a281,
+0x3dec87b3, 0x3df56d37, 0x3dfe530d, 0x3e073934, 0x3e101fad, 0x3e190678, 0x3e21ed95, 0x3e2ad503,
+0x3e33bcc3, 0x3e3ca4d4, 0x3e458d37, 0x3e4e75ec, 0x3e575ef2, 0x3e60484a, 0x3e6931f3, 0x3e721bed,
+0x3e7b0639, 0x3e83f0d7, 0x3e8cdbc6, 0x3e95c706, 0x3e9eb298, 0x3ea79e7a, 0x3eb08aaf, 0x3eb97734,
+0x3ec2640b, 0x3ecb5133, 0x3ed43eac, 0x3edd2c77, 0x3ee61a93, 0x3eef08ff, 0x3ef7f7bd, 0x3f00e6cc,
+0x3f09d62c, 0x3f12c5de, 0x3f1bb5e0, 0x3f24a633, 0x3f2d96d7, 0x3f3687cd, 0x3f3f7913, 0x3f486aaa,
+0x3f515c92, 0x3f5a4ecb, 0x3f634155, 0x3f6c342f, 0x3f75275b, 0x3f7e1ad7, 0x3f870ea4, 0x3f9002c2,
+0x3f98f730, 0x3fa1ebef, 0x3faae0ff, 0x3fb3d660, 0x3fbccc11, 0x3fc5c213, 0x3fceb865, 0x3fd7af08,
+0x3fe0a5fc, 0x3fe99d40, 0x3ff294d4, 0x3ffb8cb9, 0x400484ef, 0x400d7d75, 0x4016764b, 0x401f6f72,
+0x402868e9, 0x403162b1, 0x403a5cc8, 0x40435730, 0x404c51e9, 0x40554cf2, 0x405e484b, 0x406743f4,
+0x40703fed, 0x40793c37, 0x408238d0, 0x408b35ba, 0x409432f4, 0x409d307e, 0x40a62e58, 0x40af2c82,
+0x40b82afd, 0x40c129c7, 0x40ca28e1, 0x40d3284b, 0x40dc2805, 0x40e5280f, 0x40ee2869, 0x40f72913,
+0x41002a0c, 0x41092b56, 0x41122cef, 0x411b2ed8, 0x41243111, 0x412d3399, 0x41363672, 0x413f399a,
+0x41483d11, 0x415140d9, 0x415a44f0, 0x41634956, 0x416c4e0c, 0x41755312, 0x417e5867, 0x41875e0c,
+0x41906401, 0x41996a44, 0x41a270d8, 0x41ab77ba, 0x41b47eed, 0x41bd866e, 0x41c68e3f, 0x41cf965f,
+0x41d89ecf, 0x41e1a78e, 0x41eab09c, 0x41f3b9fa, 0x41fcc3a6, 0x4205cda2, 0x420ed7ee, 0x4217e288,
+0x4220ed72, 0x4229f8aa, 0x42330432, 0x423c1009, 0x42451c2f, 0x424e28a4, 0x42573569, 0x4260427c,
+0x42694fde, 0x42725d8f, 0x427b6b8f, 0x428479de, 0x428d887c, 0x42969769, 0x429fa6a5, 0x42a8b62f,
+0x42b1c609, 0x42bad631, 0x42c3e6a8, 0x42ccf76e, 0x42d60882, 0x42df19e5, 0x42e82b97, 0x42f13d98,
+0x42fa4fe7, 0x43036285, 0x430c7572, 0x431588ad, 0x431e9c37, 0x4327b00f, 0x4330c436, 0x4339d8ab,
+0x4342ed6f, 0x434c0282, 0x435517e3, 0x435e2d92, 0x4367438f, 0x437059dc, 0x43797076, 0x4382875f,
+0x438b9e96, 0x4394b61b, 0x439dcdef, 0x43a6e611, 0x43affe81, 0x43b91740, 0x43c2304d, 0x43cb49a8,
+0x43d46351, 0x43dd7d48, 0x43e6978d, 0x43efb221, 0x43f8cd02, 0x4401e832, 0x440b03af, 0x44141f7b,
+0x441d3b95, 0x442657fc, 0x442f74b2, 0x443891b6, 0x4441af07, 0x444acca7, 0x4453ea94, 0x445d08cf,
+0x44662758, 0x446f462f, 0x44786553, 0x448184c6, 0x448aa486, 0x4493c494, 0x449ce4f0, 0x44a60599,
+0x44af2690, 0x44b847d5, 0x44c16967, 0x44ca8b47, 0x44d3ad74, 0x44dccfef, 0x44e5f2b8, 0x44ef15ce,
+0x44f83932, 0x45015ce3, 0x450a80e2, 0x4513a52e, 0x451cc9c8, 0x4525eeaf, 0x452f13e3, 0x45383965,
+0x45415f34, 0x454a8551, 0x4553abbb, 0x455cd272, 0x4565f976, 0x456f20c8, 0x45784867, 0x45817053,
+0x458a988c, 0x4593c113, 0x459ce9e7, 0x45a61307, 0x45af3c75, 0x45b86630, 0x45c19039, 0x45caba8e,
+0x45d3e530, 0x45dd101f, 0x45e63b5c, 0x45ef66e5, 0x45f892bb, 0x4601bede, 0x460aeb4e, 0x4614180b,
+0x461d4515, 0x4626726c, 0x462fa00f, 0x4638ce00, 0x4641fc3d, 0x464b2ac7, 0x4654599e, 0x465d88c1,
+0x4666b832, 0x466fe7ef, 0x467917f8, 0x4682484e, 0x468b78f1, 0x4694a9e1, 0x469ddb1d, 0x46a70ca6,
+0x46b03e7b, 0x46b9709d, 0x46c2a30c, 0x46cbd5c7, 0x46d508ce, 0x46de3c22, 0x46e76fc2, 0x46f0a3af,
+0x46f9d7e9, 0x47030c6e, 0x470c4140, 0x4715765f, 0x471eabc9, 0x4727e180, 0x47311784, 0x473a4dd3,
+0x4743846f, 0x474cbb57, 0x4755f28c, 0x475f2a0c, 0x476861d9, 0x477199f2, 0x477ad257, 0x47840b08,
+0x478d4405, 0x47967d4f, 0x479fb6e4, 0x47a8f0c5, 0x47b22af3, 0x47bb656c, 0x47c4a032, 0x47cddb43,
+0x47d716a1, 0x47e0524a, 0x47e98e40, 0x47f2ca81, 0x47fc070e, 0x480543e7, 0x480e810c, 0x4817be7c,
+0x4820fc39, 0x482a3a41, 0x48337895, 0x483cb735, 0x4845f620, 0x484f3557, 0x485874da, 0x4861b4a8,
+0x486af4c3, 0x48743528, 0x487d75da, 0x4886b6d7, 0x488ff81f, 0x489939b3, 0x48a27b93, 0x48abbdbe,
+0x48b50035, 0x48be42f7, 0x48c78605, 0x48d0c95e, 0x48da0d02, 0x48e350f2, 0x48ec952e, 0x48f5d9b4,
+0x48ff1e86, 0x490863a4, 0x4911a90c, 0x491aeec0, 0x492434bf, 0x492d7b0a, 0x4936c1a0, 0x49400881,
+0x49494fad, 0x49529724, 0x495bdee7, 0x496526f4, 0x496e6f4d, 0x4977b7f1, 0x498100e0, 0x498a4a1a,
+0x4993939f, 0x499cdd6f, 0x49a6278a, 0x49af71f0, 0x49b8bca2, 0x49c2079e, 0x49cb52e5, 0x49d49e77,
+0x49ddea53, 0x49e7367b, 0x49f082ee, 0x49f9cfab, 0x4a031cb4, 0x4a0c6a07, 0x4a15b7a5, 0x4a1f058d,
+0x4a2853c1, 0x4a31a23f, 0x4a3af108, 0x4a44401b, 0x4a4d8f7a, 0x4a56df23, 0x4a602f16, 0x4a697f55,
+0x4a72cfdd, 0x4a7c20b1, 0x4a8571cf, 0x4a8ec337, 0x4a9814eb, 0x4aa166e8, 0x4aaab930, 0x4ab40bc3,
+0x4abd5ea0, 0x4ac6b1c8, 0x4ad0053a, 0x4ad958f6, 0x4ae2acfd, 0x4aec014e, 0x4af555e9, 0x4afeaacf,
+0x4b07ffff, 0x4b11557a, 0x4b1aab3f, 0x4b24014e, 0x4b2d57a7, 0x4b36ae4b, 0x4b400538, 0x4b495c70,
+0x4b52b3f2, 0x4b5c0bbf, 0x4b6563d5, 0x4b6ebc36, 0x4b7814e0, 0x4b816dd5, 0x4b8ac714, 0x4b94209d,
+0x4b9d7a6f, 0x4ba6d48c, 0x4bb02ef3, 0x4bb989a4, 0x4bc2e49f, 0x4bcc3fe4, 0x4bd59b72, 0x4bdef74b,
+0x4be8536e, 0x4bf1afda, 0x4bfb0c90, 0x4c046990, 0x4c0dc6da, 0x4c17246e, 0x4c20824b, 0x4c29e073,
+0x4c333ee4, 0x4c3c9d9e, 0x4c45fca3, 0x4c4f5bf1, 0x4c58bb89, 0x4c621b6a, 0x4c6b7b95, 0x4c74dc0a,
+0x4c7e3cc9, 0x4c879dd0, 0x4c90ff22, 0x4c9a60bd, 0x4ca3c2a2, 0x4cad24d0, 0x4cb68747, 0x4cbfea09,
+0x4cc94d13, 0x4cd2b067, 0x4cdc1405, 0x4ce577ec, 0x4ceedc1c, 0x4cf84096, 0x4d01a559, 0x4d0b0a65,
+0x4d146fbb, 0x4d1dd55a, 0x4d273b42, 0x4d30a174, 0x4d3a07ee, 0x4d436eb2, 0x4d4cd5c0, 0x4d563d16,
+0x4d5fa4b6, 0x4d690c9f, 0x4d7274d1, 0x4d7bdd4c, 0x4d854610, 0x4d8eaf1e, 0x4d981874, 0x4da18214,
+0x4daaebfc, 0x4db4562e, 0x4dbdc0a8, 0x4dc72b6c, 0x4dd09679, 0x4dda01ce, 0x4de36d6d, 0x4decd954,
+0x4df64584, 0x4dffb1fe, 0x4e091ec0, 0x4e128bcb, 0x4e1bf91f, 0x4e2566bb, 0x4e2ed4a1, 0x4e3842cf,
+0x4e41b146, 0x4e4b2006, 0x4e548f0e, 0x4e5dfe5f, 0x4e676df9, 0x4e70dddc, 0x4e7a4e07, 0x4e83be7b,
+0x4e8d2f38, 0x4e96a03d, 0x4ea0118b, 0x4ea98321, 0x4eb2f500, 0x4ebc6728, 0x4ec5d998, 0x4ecf4c50,
+0x4ed8bf51, 0x4ee2329b, 0x4eeba62d, 0x4ef51a07, 0x4efe8e2a, 0x4f080296, 0x4f117749, 0x4f1aec45,
+0x4f24618a, 0x4f2dd717, 0x4f374cec, 0x4f40c309, 0x4f4a396f, 0x4f53b01d, 0x4f5d2713, 0x4f669e52,
+0x4f7015d9, 0x4f798da8, 0x4f8305bf, 0x4f8c7e1e, 0x4f95f6c6, 0x4f9f6fb5, 0x4fa8e8ed, 0x4fb2626d,
+0x4fbbdc35, 0x4fc55645, 0x4fced09d, 0x4fd84b3e, 0x4fe1c626, 0x4feb4156, 0x4ff4bcce, 0x4ffe388f,
+0x5007b497, 0x501130e7, 0x501aad7f, 0x50242a5f, 0x502da787, 0x503724f7, 0x5040a2ae, 0x504a20ae,
+0x50539ef5, 0x505d1d84, 0x50669c5b, 0x50701b7a, 0x50799ae0, 0x50831a8e, 0x508c9a84, 0x50961ac2,
+0x509f9b47, 0x50a91c14, 0x50b29d29, 0x50bc1e85, 0x50c5a029, 0x50cf2215, 0x50d8a448, 0x50e226c2,
+0x50eba985, 0x50f52c8f, 0x50feafe0, 0x51083379, 0x5111b759, 0x511b3b81, 0x5124bff1, 0x512e44a7,
+0x5137c9a6, 0x51414eeb, 0x514ad478, 0x51545a4d, 0x515de069, 0x516766cc, 0x5170ed76, 0x517a7468,
+0x5183fba1, 0x518d8322, 0x51970ae9, 0x51a092f8, 0x51aa1b4e, 0x51b3a3ec, 0x51bd2cd0, 0x51c6b5fc,
+0x51d03f6f, 0x51d9c929, 0x51e3532b, 0x51ecdd73, 0x51f66802, 0x51fff2d9, 0x52097df7, 0x5213095b,
+0x521c9507, 0x522620fa, 0x522fad34, 0x523939b5, 0x5242c67c, 0x524c538b, 0x5255e0e1, 0x525f6e7e,
+0x5268fc61, 0x52728a8c, 0x527c18fd, 0x5285a7b5, 0x528f36b4, 0x5298c5fa, 0x52a25587, 0x52abe55a,
+0x52b57575, 0x52bf05d6, 0x52c8967d, 0x52d2276c, 0x52dbb8a1, 0x52e54a1d, 0x52eedbe0, 0x52f86de9,
+0x53020039, 0x530b92d0, 0x531525ad, 0x531eb8d1, 0x53284c3c, 0x5331dfed, 0x533b73e4, 0x53450823,
+0x534e9ca7, 0x53583173, 0x5361c684, 0x536b5bdc, 0x5374f17b, 0x537e8760, 0x53881d8c, 0x5391b3fe,
+0x539b4ab6, 0x53a4e1b5, 0x53ae78fa, 0x53b81086, 0x53c1a858, 0x53cb4070, 0x53d4d8ce, 0x53de7173,
+0x53e80a5e, 0x53f1a390, 0x53fb3d07, 0x5404d6c5, 0x540e70c9, 0x54180b13, 0x5421a5a4, 0x542b407a,
+0x5434db97, 0x543e76fa, 0x544812a3, 0x5451ae92, 0x545b4ac8, 0x5464e743, 0x546e8404, 0x5478210c,
+0x5481be59, 0x548b5bed, 0x5494f9c6, 0x549e97e5, 0x54a8364b, 0x54b1d4f6, 0x54bb73e8, 0x54c5131f,
+0x54ceb29c, 0x54d8525f, 0x54e1f268, 0x54eb92b6, 0x54f5334b, 0x54fed425, 0x55087546, 0x551216ac,
+0x551bb858, 0x55255a49, 0x552efc80, 0x55389efe, 0x554241c0, 0x554be4c9, 0x55558817, 0x555f2bab,
+0x5568cf84, 0x557273a3, 0x557c1808, 0x5585bcb3, 0x558f61a3, 0x559906d8, 0x55a2ac53, 0x55ac5214,
+0x55b5f81a, 0x55bf9e66, 0x55c944f7, 0x55d2ebce, 0x55dc92ea, 0x55e63a4c, 0x55efe1f3, 0x55f989e0,
+0x56033212, 0x560cda89, 0x56168346, 0x56202c48, 0x5629d58f, 0x56337f1c, 0x563d28ee, 0x5646d306,
+0x56507d62, 0x565a2804, 0x5663d2ec, 0x566d7e18, 0x5677298a, 0x5680d541, 0x568a813d, 0x56942d7e,
+0x569dda05, 0x56a786d1, 0x56b133e1, 0x56bae137, 0x56c48ed2, 0x56ce3cb3, 0x56d7ead8, 0x56e19942,
+0x56eb47f1, 0x56f4f6e6, 0x56fea61f, 0x5708559e, 0x57120561, 0x571bb569, 0x572565b7, 0x572f1649,
+0x5738c720, 0x5742783c, 0x574c299e, 0x5755db43, 0x575f8d2e, 0x57693f5e, 0x5772f1d2, 0x577ca48c,
+0x5786578a, 0x57900acd, 0x5799be54, 0x57a37221, 0x57ad2632, 0x57b6da88, 0x57c08f23, 0x57ca4402,
+0x57d3f926, 0x57ddae8f, 0x57e7643c, 0x57f11a2f, 0x57fad065, 0x580486e1, 0x580e3da1, 0x5817f4a5,
+0x5821abee, 0x582b637c, 0x58351b4e, 0x583ed365, 0x58488bc0, 0x58524460, 0x585bfd44, 0x5865b66d,
+0x586f6fda, 0x5879298b, 0x5882e381, 0x588c9dbc, 0x5896583b, 0x58a012fe, 0x58a9ce05, 0x58b38951,
+0x58bd44e2, 0x58c700b6, 0x58d0bccf, 0x58da792c, 0x58e435ce, 0x58edf2b4, 0x58f7afde, 0x59016d4c,
+0x590b2afe, 0x5914e8f5, 0x591ea730, 0x592865af, 0x59322472, 0x593be379, 0x5945a2c5, 0x594f6255,
+0x59592228, 0x5962e240, 0x596ca29c, 0x5976633c, 0x59802420, 0x5989e548, 0x5993a6b4, 0x599d6864,
+0x59a72a58, 0x59b0ec90, 0x59baaf0c, 0x59c471cc, 0x59ce34d0, 0x59d7f818, 0x59e1bba3, 0x59eb7f73,
+0x59f54386, 0x59ff07dd, 0x5a08cc79, 0x5a129158, 0x5a1c567a, 0x5a261be1, 0x5a2fe18b, 0x5a39a779,
+0x5a436dab, 0x5a4d3421, 0x5a56fada, 0x5a60c1d8, 0x5a6a8918, 0x5a74509d, 0x5a7e1865, 0x5a87e071,
+0x5a91a8c0, 0x5a9b7153, 0x5aa53a2a, 0x5aaf0344, 0x5ab8cca2, 0x5ac29644, 0x5acc6029, 0x5ad62a51,
+0x5adff4bd, 0x5ae9bf6d, 0x5af38a60, 0x5afd5597, 0x5b072111, 0x5b10ecce, 0x5b1ab8cf, 0x5b248514,
+0x5b2e519c, 0x5b381e67, 0x5b41eb76, 0x5b4bb8c8, 0x5b55865d, 0x5b5f5436, 0x5b692252, 0x5b72f0b1,
+0x5b7cbf54, 0x5b868e3a, 0x5b905d63, 0x5b9a2cd0, 0x5ba3fc7f, 0x5badcc72, 0x5bb79ca9, 0x5bc16d22,
+0x5bcb3ddf, 0x5bd50ede, 0x5bdee021, 0x5be8b1a7, 0x5bf28371, 0x5bfc557d, 0x5c0627cc, 0x5c0ffa5f,
+0x5c19cd35, 0x5c23a04d, 0x5c2d73a9, 0x5c374748, 0x5c411b2a, 0x5c4aef4e, 0x5c54c3b6, 0x5c5e9861,
+0x5c686d4f, 0x5c724280, 0x5c7c17f3, 0x5c85edaa, 0x5c8fc3a3, 0x5c9999e0, 0x5ca3705f, 0x5cad4721,
+0x5cb71e26, 0x5cc0f56e, 0x5ccaccf9, 0x5cd4a4c6, 0x5cde7cd7, 0x5ce8552a, 0x5cf22dbf, 0x5cfc0698,
+0x5d05dfb3, 0x5d0fb912, 0x5d1992b2, 0x5d236c96, 0x5d2d46bc, 0x5d372125, 0x5d40fbd1, 0x5d4ad6bf,
+0x5d54b1f0, 0x5d5e8d63, 0x5d686919, 0x5d724512, 0x5d7c214d, 0x5d85fdcb, 0x5d8fda8b, 0x5d99b78e,
+0x5da394d4, 0x5dad725c, 0x5db75026, 0x5dc12e33, 0x5dcb0c82, 0x5dd4eb14, 0x5ddec9e9, 0x5de8a8ff,
+0x5df28858, 0x5dfc67f4, 0x5e0647d2, 0x5e1027f2, 0x5e1a0855, 0x5e23e8fa, 0x5e2dc9e1, 0x5e37ab0b,
+0x5e418c77, 0x5e4b6e25, 0x5e555016, 0x5e5f3249, 0x5e6914be, 0x5e72f775, 0x5e7cda6f, 0x5e86bdab,
+0x5e90a129, 0x5e9a84e9, 0x5ea468eb, 0x5eae4d30, 0x5eb831b6, 0x5ec2167f, 0x5ecbfb8a, 0x5ed5e0d7,
+0x5edfc666, 0x5ee9ac37, 0x5ef3924a, 0x5efd78a0, 0x5f075f37, 0x5f114610, 0x5f1b2d2c, 0x5f251489,
+0x5f2efc28, 0x5f38e40a, 0x5f42cc2d, 0x5f4cb492, 0x5f569d39, 0x5f608622, 0x5f6a6f4d, 0x5f7458ba,
+0x5f7e4269, 0x5f882c5a, 0x5f92168c, 0x5f9c0100, 0x5fa5ebb6, 0x5fafd6ae, 0x5fb9c1e8, 0x5fc3ad64,
+0x5fcd9921, 0x5fd78520, 0x5fe17161, 0x5feb5de3, 0x5ff54aa7, 0x5fff37ad, 0x600924f5, 0x6013127e,
+0x601d0049, 0x6026ee56, 0x6030dca4, 0x603acb34, 0x6044ba05, 0x604ea918, 0x6058986d, 0x60628803,
+0x606c77db, 0x607667f4, 0x6080584f, 0x608a48ec, 0x609439ca, 0x609e2ae9, 0x60a81c4a, 0x60b20dec,
+0x60bbffd0, 0x60c5f1f5, 0x60cfe45c, 0x60d9d704, 0x60e3c9ed, 0x60edbd18, 0x60f7b084, 0x6101a432,
+0x610b9821, 0x61158c51, 0x611f80c3, 0x61297576, 0x61336a6a, 0x613d5f9f, 0x61475516, 0x61514ace,
+0x615b40c7, 0x61653702, 0x616f2d7e, 0x6179243a, 0x61831b38, 0x618d1278, 0x619709f8, 0x61a101ba,
+0x61aaf9bd, 0x61b4f200, 0x61beea85, 0x61c8e34b, 0x61d2dc53, 0x61dcd59b, 0x61e6cf24, 0x61f0c8ee,
+0x61fac2fa, 0x6204bd46, 0x620eb7d4, 0x6218b2a2, 0x6222adb1, 0x622ca902, 0x6236a493, 0x6240a065,
+0x624a9c78, 0x625498cd, 0x625e9562, 0x62689238, 0x62728f4e, 0x627c8ca6, 0x62868a3e, 0x62908818,
+0x629a8632, 0x62a4848d, 0x62ae8329, 0x62b88205, 0x62c28123, 0x62cc8081, 0x62d68020, 0x62e07fff,
+0x62ea8020, 0x62f48081, 0x62fe8123, 0x63088205, 0x63128328, 0x631c848c, 0x63268631, 0x63308816,
+0x633a8a3b, 0x63448ca2, 0x634e8f49, 0x63589230, 0x63629558, 0x636c98c1, 0x63769c6a, 0x6380a054,
+0x638aa47e, 0x6394a8e9, 0x639ead94, 0x63a8b280, 0x63b2b7ac, 0x63bcbd19, 0x63c6c2c6, 0x63d0c8b3,
+0x63dacee1, 0x63e4d550, 0x63eedbff, 0x63f8e2ee, 0x6402ea1d, 0x640cf18d, 0x6416f93e, 0x6421012e,
+0x642b095f, 0x643511d0, 0x643f1a82, 0x64492374, 0x64532ca6, 0x645d3618, 0x64673fcb, 0x647149bd,
+0x647b53f0, 0x64855e64, 0x648f6917, 0x6499740b, 0x64a37f3e, 0x64ad8ab2, 0x64b79666, 0x64c1a25b,
+0x64cbae8f, 0x64d5bb03, 0x64dfc7b8, 0x64e9d4ad, 0x64f3e1e1, 0x64fdef56, 0x6507fd0b, 0x65120b00,
+0x651c1934, 0x652627a9, 0x6530365e, 0x653a4553, 0x65445488, 0x654e63fd, 0x655873b1, 0x656283a6,
+0x656c93db, 0x6576a44f, 0x6580b503, 0x658ac5f8, 0x6594d72c, 0x659ee8a0, 0x65a8fa54, 0x65b30c47,
+0x65bd1e7b, 0x65c730ee, 0x65d143a1, 0x65db5694, 0x65e569c7, 0x65ef7d39, 0x65f990eb, 0x6603a4dd,
+0x660db90f, 0x6617cd80, 0x6621e231, 0x662bf722, 0x66360c52, 0x664021c2, 0x664a3772, 0x66544d62,
+0x665e6390, 0x666879ff, 0x667290ad, 0x667ca79b, 0x6686bec8, 0x6690d635, 0x669aede2, 0x66a505ce,
+0x66af1df9, 0x66b93664, 0x66c34f0f, 0x66cd67f9, 0x66d78123, 0x66e19a8c, 0x66ebb434, 0x66f5ce1c,
+0x66ffe843, 0x670a02aa, 0x67141d50, 0x671e3836, 0x6728535b, 0x67326ebf, 0x673c8a63, 0x6746a646,
+0x6750c268, 0x675adeca, 0x6764fb6b, 0x676f184b, 0x6779356a, 0x678352c9, 0x678d7067, 0x67978e45,
+0x67a1ac61, 0x67abcabd, 0x67b5e958, 0x67c00832, 0x67ca274c, 0x67d446a4, 0x67de663c, 0x67e88613,
+0x67f2a629, 0x67fcc67e, 0x6806e712, 0x681107e6, 0x681b28f8, 0x68254a4a, 0x682f6bda, 0x68398daa,
+0x6843afb9, 0x684dd206, 0x6857f493, 0x6862175f, 0x686c3a6a, 0x68765db3, 0x6880813c, 0x688aa504,
+0x6894c90a, 0x689eed50, 0x68a911d5, 0x68b33698, 0x68bd5b9a, 0x68c780dc, 0x68d1a65c, 0x68dbcc1b,
+0x68e5f218, 0x68f01855, 0x68fa3ed0, 0x6904658b, 0x690e8c84, 0x6918b3bc, 0x6922db32, 0x692d02e8,
+0x69372adc, 0x6941530f, 0x694b7b81, 0x6955a431, 0x695fcd20, 0x6969f64e, 0x69741fbb, 0x697e4966,
+0x69887350, 0x69929d78, 0x699cc7df, 0x69a6f285, 0x69b11d69, 0x69bb488c, 0x69c573ee, 0x69cf9f8e,
+0x69d9cb6d, 0x69e3f78a, 0x69ee23e6, 0x69f85080, 0x6a027d59, 0x6a0caa71, 0x6a16d7c7, 0x6a21055b,
+0x6a2b332e, 0x6a35613f, 0x6a3f8f8f, 0x6a49be1d, 0x6a53ecea, 0x6a5e1bf5, 0x6a684b3f, 0x6a727ac7,
+0x6a7caa8d, 0x6a86da91, 0x6a910ad4, 0x6a9b3b56, 0x6aa56c15, 0x6aaf9d13, 0x6ab9ce50, 0x6ac3ffca,
+0x6ace3183, 0x6ad8637b, 0x6ae295b0, 0x6aecc824, 0x6af6fad6, 0x6b012dc6, 0x6b0b60f4, 0x6b159461,
+0x6b1fc80c, 0x6b29fbf5, 0x6b34301c, 0x6b3e6481, 0x6b489925, 0x6b52ce06, 0x6b5d0326, 0x6b673884,
+0x6b716e20, 0x6b7ba3fa, 0x6b85da12, 0x6b901068, 0x6b9a46fd, 0x6ba47dcf, 0x6baeb4df, 0x6bb8ec2e,
+0x6bc323ba, 0x6bcd5b85, 0x6bd7938d, 0x6be1cbd3, 0x6bec0458, 0x6bf63d1a, 0x6c00761a, 0x6c0aaf58,
+0x6c14e8d4, 0x6c1f228e, 0x6c295c86, 0x6c3396bc, 0x6c3dd130, 0x6c480be1, 0x6c5246d1, 0x6c5c81fe,
+0x6c66bd69, 0x6c70f912, 0x6c7b34f8, 0x6c85711d, 0x6c8fad7f, 0x6c99ea1f, 0x6ca426fd, 0x6cae6418,
+0x6cb8a172, 0x6cc2df09, 0x6ccd1cdd, 0x6cd75af0, 0x6ce19940, 0x6cebd7ce, 0x6cf61699, 0x6d0055a2,
+0x6d0a94e9, 0x6d14d46d, 0x6d1f142f, 0x6d29542f, 0x6d33946c, 0x6d3dd4e7, 0x6d4815a0, 0x6d525695,
+0x6d5c97c9, 0x6d66d93a, 0x6d711ae9, 0x6d7b5cd5, 0x6d859eff, 0x6d8fe166, 0x6d9a240a, 0x6da466ec,
+0x6daeaa0c, 0x6db8ed69, 0x6dc33104, 0x6dcd74db, 0x6dd7b8f1, 0x6de1fd44, 0x6dec41d4, 0x6df686a1,
+0x6e00cbac, 0x6e0b10f5, 0x6e15567a, 0x6e1f9c3d, 0x6e29e23d, 0x6e34287b, 0x6e3e6ef6, 0x6e48b5ae,
+0x6e52fca4, 0x6e5d43d7, 0x6e678b47, 0x6e71d2f4, 0x6e7c1adf, 0x6e866307, 0x6e90ab6c, 0x6e9af40e,
+0x6ea53ced, 0x6eaf860a, 0x6eb9cf64, 0x6ec418fb, 0x6ece62cf, 0x6ed8ace0, 0x6ee2f72e, 0x6eed41ba,
+0x6ef78c83, 0x6f01d788, 0x6f0c22cb, 0x6f166e4b, 0x6f20ba08, 0x6f2b0602, 0x6f355239, 0x6f3f9ead,
+0x6f49eb5e, 0x6f54384d, 0x6f5e8578, 0x6f68d2e0, 0x6f732085, 0x6f7d6e67, 0x6f87bc86, 0x6f920ae2,
+0x6f9c597b, 0x6fa6a851, 0x6fb0f763, 0x6fbb46b3, 0x6fc59640, 0x6fcfe609, 0x6fda360f, 0x6fe48652,
+0x6feed6d2, 0x6ff9278f, 0x70037889, 0x700dc9bf, 0x70181b32, 0x70226ce3, 0x702cbecf, 0x703710f9,
+0x7041635f, 0x704bb602, 0x705608e2, 0x70605bff, 0x706aaf58, 0x707502ee, 0x707f56c1, 0x7089aad0,
+0x7093ff1c, 0x709e53a5, 0x70a8a86a, 0x70b2fd6c, 0x70bd52ab, 0x70c7a826, 0x70d1fdde, 0x70dc53d2,
+0x70e6aa03, 0x70f10071, 0x70fb571b, 0x7105ae02, 0x71100525, 0x711a5c85, 0x7124b421, 0x712f0bfa,
+0x7139640f, 0x7143bc61, 0x714e14ef, 0x71586dba, 0x7162c6c1, 0x716d2004, 0x71777984, 0x7181d341,
+0x718c2d3a, 0x7196876f, 0x71a0e1e1, 0x71ab3c8f, 0x71b59779, 0x71bff2a0, 0x71ca4e03, 0x71d4a9a3,
+0x71df057e, 0x71e96197, 0x71f3bdeb, 0x71fe1a7c, 0x72087749, 0x7212d452, 0x721d3197, 0x72278f19,
+0x7231ecd7, 0x723c4ad1, 0x7246a908, 0x7251077b, 0x725b6629, 0x7265c514, 0x7270243c, 0x727a839f,
+0x7284e33f, 0x728f431a, 0x7299a332, 0x72a40386, 0x72ae6416, 0x72b8c4e2, 0x72c325eb, 0x72cd872f,
+0x72d7e8af, 0x72e24a6c, 0x72ecac64, 0x72f70e99, 0x73017109, 0x730bd3b6, 0x7316369f, 0x732099c3,
+0x732afd24, 0x733560c0, 0x733fc499, 0x734a28ad, 0x73548cfe, 0x735ef18a, 0x73695652, 0x7373bb57,
+0x737e2097, 0x73888613, 0x7392ebca, 0x739d51be, 0x73a7b7ee, 0x73b21e59, 0x73bc8500, 0x73c6ebe4,
+0x73d15302, 0x73dbba5d, 0x73e621f4, 0x73f089c6, 0x73faf1d4, 0x74055a1e, 0x740fc2a3, 0x741a2b65,
+0x74249462, 0x742efd9b, 0x7439670f, 0x7443d0bf, 0x744e3aab, 0x7458a4d3, 0x74630f36, 0x746d79d5,
+0x7477e4af, 0x74824fc6, 0x748cbb17, 0x749726a5, 0x74a1926e, 0x74abfe73, 0x74b66ab3, 0x74c0d72f,
+0x74cb43e6, 0x74d5b0d9, 0x74e01e07, 0x74ea8b71, 0x74f4f917, 0x74ff66f8, 0x7509d514, 0x7514436c,
+0x751eb200, 0x752920cf, 0x75338fd9, 0x753dff1f, 0x75486ea1, 0x7552de5d, 0x755d4e56, 0x7567be89,
+0x75722ef8, 0x757c9fa3, 0x75871089, 0x759181aa, 0x759bf306, 0x75a6649e, 0x75b0d671, 0x75bb4880,
+0x75c5baca, 0x75d02d4f, 0x75daa00f, 0x75e5130b, 0x75ef8642, 0x75f9f9b4, 0x76046d62, 0x760ee14b,
+0x7619556f, 0x7623c9ce, 0x762e3e68, 0x7638b33e, 0x7643284f, 0x764d9d9b, 0x76581322, 0x766288e4,
+0x766cfee2, 0x7677751b, 0x7681eb8e, 0x768c623d, 0x7696d927, 0x76a1504d, 0x76abc7ad, 0x76b63f48,
+0x76c0b71f, 0x76cb2f30, 0x76d5a77d, 0x76e02004, 0x76ea98c7, 0x76f511c4, 0x76ff8afd, 0x770a0471,
+0x77147e1f, 0x771ef809, 0x7729722d, 0x7733ec8d, 0x773e6727, 0x7748e1fd, 0x77535d0d, 0x775dd858,
+0x776853df, 0x7772cfa0, 0x777d4b9c, 0x7787c7d2, 0x77924444, 0x779cc0f1, 0x77a73dd8, 0x77b1bafa,
+0x77bc3858, 0x77c6b5ef, 0x77d133c2, 0x77dbb1d0, 0x77e63018, 0x77f0ae9b, 0x77fb2d59, 0x7805ac52,
+0x78102b85, 0x781aaaf3, 0x78252a9c, 0x782faa80, 0x783a2a9e, 0x7844aaf7, 0x784f2b8a, 0x7859ac59,
+0x78642d62, 0x786eaea5, 0x78793024, 0x7883b1dd, 0x788e33d0, 0x7898b5fe, 0x78a33867, 0x78adbb0b,
+0x78b83de9, 0x78c2c101, 0x78cd4454, 0x78d7c7e2, 0x78e24baa, 0x78eccfad, 0x78f753ea, 0x7901d862,
+0x790c5d15, 0x7916e202, 0x79216729, 0x792bec8b, 0x79367227, 0x7940f7fe, 0x794b7e0f, 0x7956045b,
+0x79608ae1, 0x796b11a1, 0x7975989c, 0x79801fd1, 0x798aa741, 0x79952eeb, 0x799fb6d0, 0x79aa3eee,
+0x79b4c748, 0x79bf4fdb, 0x79c9d8a9, 0x79d461b1, 0x79deeaf4, 0x79e97470, 0x79f3fe27, 0x79fe8819,
+0x7a091244, 0x7a139caa, 0x7a1e274a, 0x7a28b225, 0x7a333d39, 0x7a3dc888, 0x7a485411, 0x7a52dfd4,
+0x7a5d6bd2, 0x7a67f809, 0x7a72847b, 0x7a7d1127, 0x7a879e0d, 0x7a922b2e, 0x7a9cb888, 0x7aa7461d,
+0x7ab1d3eb, 0x7abc61f4, 0x7ac6f037, 0x7ad17eb4, 0x7adc0d6b, 0x7ae69c5c, 0x7af12b87, 0x7afbbaec,
+0x7b064a8b, 0x7b10da64, 0x7b1b6a78, 0x7b25fac5, 0x7b308b4c, 0x7b3b1c0e, 0x7b45ad09, 0x7b503e3e,
+0x7b5acfad, 0x7b656156, 0x7b6ff339, 0x7b7a8556, 0x7b8517ad, 0x7b8faa3e, 0x7b9a3d09, 0x7ba4d00d,
+0x7baf634c, 0x7bb9f6c4, 0x7bc48a76, 0x7bcf1e62, 0x7bd9b288, 0x7be446e8, 0x7beedb82, 0x7bf97055,
+0x7c040562, 0x7c0e9aa9, 0x7c19302a, 0x7c23c5e5, 0x7c2e5bd9, 0x7c38f207, 0x7c43886f, 0x7c4e1f10,
+0x7c58b5ec, 0x7c634d01, 0x7c6de450, 0x7c787bd8, 0x7c83139a, 0x7c8dab96, 0x7c9843cb, 0x7ca2dc3a,
+0x7cad74e3, 0x7cb80dc6, 0x7cc2a6e2, 0x7ccd4037, 0x7cd7d9c7, 0x7ce27390, 0x7ced0d92, 0x7cf7a7ce,
+0x7d024244, 0x7d0cdcf3, 0x7d1777dc, 0x7d2212fe, 0x7d2cae5a, 0x7d3749ef, 0x7d41e5be, 0x7d4c81c7,
+0x7d571e08, 0x7d61ba84, 0x7d6c5739, 0x7d76f427, 0x7d81914f, 0x7d8c2eb0, 0x7d96cc4b, 0x7da16a1f,
+0x7dac082d, 0x7db6a673, 0x7dc144f4, 0x7dcbe3ae, 0x7dd682a1, 0x7de121cd, 0x7debc133, 0x7df660d2,
+0x7e0100ab, 0x7e0ba0bd, 0x7e164108, 0x7e20e18d, 0x7e2b824b, 0x7e362342, 0x7e40c472, 0x7e4b65dc,
+0x7e56077f, 0x7e60a95b, 0x7e6b4b71, 0x7e75edc0, 0x7e809048, 0x7e8b3309, 0x7e95d603, 0x7ea07937,
+0x7eab1ca4, 0x7eb5c04a, 0x7ec06429, 0x7ecb0842, 0x7ed5ac93, 0x7ee0511e, 0x7eeaf5e2, 0x7ef59adf,
+0x7f004015, 0x7f0ae584, 0x7f158b2c, 0x7f20310e, 0x7f2ad728, 0x7f357d7c, 0x7f402409, 0x7f4acace,
+0x7f5571cd, 0x7f601905, 0x7f6ac076, 0x7f75681f, 0x7f801002, 0x7f8ab81e, 0x7f956073, 0x7fa00901,
+0x7faab1c7, 0x7fb55ac7, 0x7fc00400, 0x7fcaad71, 0x7fd5571c, 0x7fe00100, 0x7feaab1c, 0x7ff55571,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,
+0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_aa_cs_data[] = {
+0x00006dc2, 0x000070dc, 0x0000798d, 0x00007ddd, 0x00007f6d, 0x00007fe4, 0x00007ffc, 0x00007fff,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_aa_ca_data[] = {
+0xffffbe26, 0xffffc39f, 0xffffd7e4, 0xffffe8b8, 0xfffff3e5, 0xfffffac2, 0xfffffe2f, 0xffffff87,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_win_data[] = {
+0x00000421, 0x00000db8, 0x000019c7, 0x000029ad, 0x00003fff, 0x00006246, 0x00009ee0, 0x00012a7d,
+0x0003df40, 0xfffbc63e, 0xfffe7b01, 0xffff069e, 0xffff4338, 0xffff657e, 0xffff7bd0, 0xffff8bb6,
+0xffff97c5, 0xffffa15c, 0xffffa947, 0xffffb006, 0xffffb5eb, 0xffffbb30, 0xffffc000, 0xffffc47a,
+0xffffc8b7, 0xffffccca, 0xffffd0c5, 0xffffd4b9, 0xffffd8b4, 0xffffdcc8, 0xffffe104, 0xffffe57e,
+0xffffea4e, 0xffffef94, 0xfffff579, 0xfffffc37, 0x00000421, 0x00000db8, 0x000019c7, 0x000029ad,
+0x00003fff, 0x00006246, 0x00009ee0, 0x00012a7d, 0x0003df40, 0xfffbc63e, 0xfffe7b01, 0xffff069e,
+0xffff4338, 0xffff657e, 0xffff7bd0, 0xffff8bb6, 0xffff97c5, 0xffffa15c, 0xffffa932, 0xffffaf55,
+0xffffb41e, 0xffffb7d9, 0xffffbabb, 0xffffbce5, 0xffffbf02, 0xffffc45d, 0xffffcd2e, 0xffffd901,
+0xffffe74d, 0xfffff772, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000db8, 0x00003fff, 0x00012a7d, 0xfffe7b01, 0xffff657e, 0xffff97c5, 0xffffb006, 0xffffc000,
+0xffffccca, 0xffffd8b4, 0xffffe57e, 0xfffff579, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00002698, 0x0000bba3, 0x00037d32, 0xfffb73f7, 0xfffe3b01, 0xfffedad6,
+0xffff2b2b, 0xffff58c3, 0xffff7566, 0xffff88e3, 0xffff96df, 0xffffa145, 0xffffa947, 0xffffb006,
+0xffffb5eb, 0xffffbb30, 0xffffc000, 0xffffc47a, 0xffffc8b7, 0xffffccca, 0xffffd0c5, 0xffffd4b9,
+0xffffd8b4, 0xffffdcc8, 0xffffe104, 0xffffe57e, 0xffffea4e, 0xffffef94, 0xfffff579, 0xfffffc37,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_COS9_data[] = {
+0x00008000, 0x00007e0e, 0x00007847, 0x00006ed9, 0x0000620d, 0x00005246, 0x00004000, 0x00002bc7,
+0x0000163a,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_tfcos36_data[] = {
+0x0000403e, 0x00004241, 0x0000469d, 0x00004e21, 0x00005a82, 0x00006f94, 0x0000976f, 0x0000f746,
+0x0002de51,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_tfcos12_data[] = {
+0x00004241, 0x00005a82, 0x0000f746,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_cos9_data[] = {
+0x00007847, 0xffffe9c6, 0xffff9df3,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_cos18_data[] = {
+0x00007e0e, 0xffffd439, 0xffffadba,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_COS1_data[] = {
+0x00004deb, 0xffff89bf, 0xffffef4b, 0x00007ee7, 0xffffcf05, 0xffff9a74, 0x000030fb, 0xffff89bf,
+0x00007641, 0xffffcf05, 0xffffcf05, 0x00007641, 0x000010b5, 0xffffcf05, 0x00004deb, 0xffff9a74,
+0x00007641, 0xffff8119, 0xffffef4b, 0x000030fb, 0xffffb215, 0x0000658c, 0xffff89bf, 0x00007ee7,
+0xffffcf05, 0x00007641, 0xffff89bf, 0x000030fb, 0x000030fb, 0xffff89bf, 0xffffb215, 0x00007641,
+0x000010b5, 0xffff8119, 0x000030fb, 0x0000658c, 0xffff9a74, 0x000030fb, 0x00007ee7, 0x000010b5,
+0xffff89bf, 0xffffb215, 0xffff89bf, 0xffffcf05, 0x000030fb, 0x00007641, 0x00007641, 0x000030fb,
+0xffff8119, 0xffff89bf, 0xffff9a74, 0xffffb215, 0xffffcf05, 0xffffef4b, 0xffff8119, 0xffff89bf,
+0xffff9a74, 0xffffb215, 0xffffcf05, 0xffffef4b, 0xffff89bf, 0xffffcf05, 0x000030fb, 0x00007641,
+0x00007641, 0x000030fb, 0xffff9a74, 0x000030fb, 0x00007ee7, 0x000010b5, 0xffff89bf, 0xffffb215,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_win1_data[] = {
+0x00000421, 0xfffff248, 0x000019c7, 0xffffd653, 0x00003fff, 0xffff9dba, 0x00009ee0, 0xfffed583,
+0x0003df40, 0x000439c2, 0xfffe7b01, 0x0000f962, 0xffff4338, 0x00009a82, 0xffff7bd0, 0x0000744a,
+0xffff97c5, 0x00005ea4, 0xffffa947, 0x00004ffa, 0xffffb5eb, 0x000044d0, 0xffffc000, 0x00003b86,
+0xffffc8b7, 0x00003336, 0xffffd0c5, 0x00002b47, 0xffffd8b4, 0x00002338, 0xffffe104, 0x00001a82,
+0xffffea4e, 0x0000106c, 0xfffff579, 0x000003c9, 0x00000421, 0xfffff248, 0x000019c7, 0xffffd653,
+0x00003fff, 0xffff9dba, 0x00009ee0, 0xfffed583, 0x0003df40, 0x000439c2, 0xfffe7b01, 0x0000f962,
+0xffff4338, 0x00009a82, 0xffff7bd0, 0x0000744a, 0xffff97c5, 0x00005ea4, 0xffffa932, 0x000050ab,
+0xffffb41e, 0x00004827, 0xffffbabb, 0x0000431b, 0xffffbf02, 0x00003ba3, 0xffffcd2e, 0x000026ff,
+0xffffe74d, 0x0000088e, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000db8, 0xffffc001, 0x00012a7d, 0x000184ff, 0xffff657e, 0x0000683b, 0xffffb006, 0x00004000,
+0xffffccca, 0x0000274c, 0xffffe57e, 0x00000a87, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+0x00000000, 0x00000000, 0x00002698, 0xffff445d, 0x00037d32, 0x00048c09, 0xfffe3b01, 0x0001252a,
+0xffff2b2b, 0x0000a73d, 0xffff7566, 0x0000771d, 0xffff96df, 0x00005ebb, 0xffffa947, 0x00004ffa,
+0xffffb5eb, 0x000044d0, 0xffffc000, 0x00003b86, 0xffffc8b7, 0x00003336, 0xffffd0c5, 0x00002b47,
+0xffffd8b4, 0x00002338, 0xffffe104, 0x00001a82, 0xffffea4e, 0x0000106c, 0xfffff579, 0x000003c9,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_tan1_1_data[] = {
+0x00000000, 0x00001b0c, 0x00002ed9, 0x00003fff, 0x00005126, 0x000064f3, 0x00007fff, 0x0000aed9,
+0x00012ed9, 0x7fffffff, 0xffff5127, 0xffffd127, 0x00000000, 0x00001b0c, 0x00002ed9, 0x00003fff,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_tan2_1_data[] = {
+0x00008000, 0x000064f3, 0x00005126, 0x00004000, 0x00002ed9, 0x00001b0c, 0x00000000, 0xffffd127,
+0xffff5127, 0x80000000, 0x00012ed9, 0x0000aed9, 0x00008000, 0x000064f3, 0x00005126, 0x00004000,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_tan1_2_data[] = {
+0x00000000, 0x00002640, 0x00004241, 0x00005a82, 0x000072c2, 0x00008ec3, 0x0000b504, 0x0000f746,
+0x0001ac4b, 0x7fffffff, 0xffff08ba, 0xffffbdbf, 0x00000000, 0x00002640, 0x00004241, 0x00005a82,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_tan2_2_data[] = {
+0x0000b504, 0x00008ec3, 0x000072c2, 0x00005a82, 0x00004241, 0x00002640, 0x00000000, 0xffffbdbf,
+0xffff08ba, 0x80000000, 0x0001ac4b, 0x0000f746, 0x0000b504, 0x00008ec3, 0x000072c2, 0x00005a82,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_pow1_1_data[] = {
+0x00008000, 0x00006ba2, 0x00008000, 0x00005a82, 0x00008000, 0x00004c1b, 0x00008000, 0x00004000,
+0x00008000, 0x000035d1, 0x00008000, 0x00002d41, 0x00008000, 0x0000260d, 0x00008000, 0x00002000,
+0x00008000, 0x00005a82, 0x00008000, 0x00003fff, 0x00008000, 0x00002d41, 0x00008000, 0x00001fff,
+0x00008000, 0x000016a0, 0x00008000, 0x00000fff, 0x00008000, 0x00000b50, 0x00008000, 0x000007ff,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_pow2_1_data[] = {
+0x00008000, 0x00008000, 0x00006ba2, 0x00008000, 0x00005a82, 0x00008000, 0x00004c1b, 0x00008000,
+0x00004000, 0x00008000, 0x000035d1, 0x00008000, 0x00002d41, 0x00008000, 0x0000260d, 0x00008000,
+0x00008000, 0x00008000, 0x00005a82, 0x00008000, 0x00003fff, 0x00008000, 0x00002d41, 0x00008000,
+0x00001fff, 0x00008000, 0x000016a0, 0x00008000, 0x00000fff, 0x00008000, 0x00000b50, 0x00008000,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_pow1_2_data[] = {
+0x0000b504, 0x00009837, 0x0000b504, 0x00008000, 0x0000b504, 0x00006ba2, 0x0000b504, 0x00005a82,
+0x0000b504, 0x00004c1b, 0x0000b504, 0x00004000, 0x0000b504, 0x000035d1, 0x0000b504, 0x00002d41,
+0x0000b504, 0x00008000, 0x0000b504, 0x00005a82, 0x0000b504, 0x00003fff, 0x0000b504, 0x00002d41,
+0x0000b504, 0x00001fff, 0x0000b504, 0x000016a0, 0x0000b504, 0x00000fff, 0x0000b504, 0x00000b50,};
+#endif
+#ifdef USE_DATA_TABLES
+static long mpeg3_pow2_2_data[] = {
+0x0000b504, 0x0000b504, 0x00009837, 0x0000b504, 0x00008000, 0x0000b504, 0x00006ba2, 0x0000b504,
+0x00005a82, 0x0000b504, 0x00004c1b, 0x0000b504, 0x00004000, 0x0000b504, 0x000035d1, 0x0000b504,
+0x0000b504, 0x0000b504, 0x00008000, 0x0000b504, 0x00005a82, 0x0000b504, 0x00003fff, 0x0000b504,
+0x00002d41, 0x0000b504, 0x00001fff, 0x0000b504, 0x000016a0, 0x0000b504, 0x00000fff, 0x0000b504,};
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/header.c b/core/multimedia/opieplayer/libmpeg3/audio/header.c
new file mode 100644
index 0000000..02b5e7c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/header.c
@@ -0,0 +1,163 @@
+#include "mpeg3audio.h"
+#include "tables.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+
+#include <stdio.h>
+
+/* Return 1 if the head check doesn't find a header. */
+int mpeg3audio_head_check(unsigned long head)
+{
+ if((head & 0xffe00000) != 0xffe00000) return 1;
+ if(!((head >> 17) & 3)) return 1;
+ if(((head >> 12) & 0xf) == 0xf) return 1;
+ if(!((head >> 12) & 0xf)) return 1;
+ if(((head >> 10) & 0x3) == 0x3 ) return 1;
+ if(((head >> 19) & 1) == 1 && ((head >> 17) & 3) == 3 && ((head >> 16) & 1) == 1)
+ return 1;
+ if((head & 0xffff0000) == 0xfffe0000) return 1;
+
+ return 0;
+}
+
+int mpeg3audio_decode_header(mpeg3audio_t *audio)
+{
+ if(audio->newhead & (1 << 20))
+ {
+ audio->lsf = (audio->newhead & (1 << 19)) ? 0x0 : 0x1;
+ audio->mpeg35 = 0;
+ }
+ else
+ {
+ audio->lsf = 1;
+ audio->mpeg35 = 1;
+ }
+
+ audio->layer = 4 - ((audio->newhead >> 17) & 3);
+ if(audio->mpeg35)
+ audio->sampling_frequency_code = 6 + ((audio->newhead >> 10) & 0x3);
+ else
+ audio->sampling_frequency_code = ((audio->newhead >> 10) & 0x3) + (audio->lsf * 3);
+
+ audio->error_protection = ((audio->newhead >> 16) & 0x1) ^ 0x1;
+
+ audio->bitrate_index = ((audio->newhead >> 12) & 0xf);
+ audio->padding = ((audio->newhead >> 9) & 0x1);
+ audio->extension = ((audio->newhead >> 8) & 0x1);
+ audio->mode = ((audio->newhead >> 6) & 0x3);
+ audio->mode_ext = ((audio->newhead >> 4) & 0x3);
+ audio->copyright = ((audio->newhead >> 3) & 0x1);
+ audio->original = ((audio->newhead >> 2) & 0x1);
+ audio->emphasis = audio->newhead & 0x3;
+ audio->channels = (audio->mode == MPG_MD_MONO) ? 1 : 2;
+ if(audio->channels > 1)
+ audio->single = -1;
+ else
+ audio->single = 3;
+
+ audio->prev_framesize = audio->framesize;
+
+ if(!audio->bitrate_index) return 1;
+ audio->bitrate = 1000 * mpeg3_tabsel_123[audio->lsf][audio->layer - 1][audio->bitrate_index];
+
+ switch(audio->layer)
+ {
+ case 1:
+ audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][0][audio->bitrate_index] * 12000;
+ audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code];
+ audio->framesize = ((audio->framesize + audio->padding) << 2) - 4;
+ break;
+ case 2:
+ audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][1][audio->bitrate_index] * 144000;
+ audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code];
+ audio->framesize += audio->padding - 4;
+ break;
+ case 3:
+ if(audio->lsf)
+ audio->ssize = (audio->channels == 1) ? 9 : 17;
+ else
+ audio->ssize = (audio->channels == 1) ? 17 : 32;
+ if(audio->error_protection)
+ audio->ssize += 2;
+ audio->framesize = (long)mpeg3_tabsel_123[audio->lsf][2][audio->bitrate_index] * 144000;
+ audio->framesize /= mpeg3_freqs[audio->sampling_frequency_code] << (audio->lsf);
+ audio->framesize = audio->framesize + audio->padding - 4;
+ break;
+ default:
+ return 1;
+ }
+
+ if(audio->framesize > MAXFRAMESIZE) return 1;
+
+ return 0;
+}
+
+int mpeg3audio_read_frame_body(mpeg3audio_t *audio)
+{
+ int i;
+ for(i = 0; i < audio->framesize; i++)
+ {
+ audio->bsbuf[i] = mpeg3bits_getbits(audio->astream, 8);
+ }
+ return 0;
+}
+
+/* Seek to the start of the previous header */
+int mpeg3audio_prev_header(mpeg3audio_t *audio)
+{
+ int result = 0, i, len = (int)audio->avg_framesize;
+
+ for(i = 0; i < len && !result; i++)
+ {
+ mpeg3bits_getbits_reverse(audio->astream, 8);
+ }
+/* Get reading in the forward direction again. */
+ result |= mpeg3bits_refill(audio->astream);
+ return result;
+}
+
+/* Read the next header */
+int mpeg3audio_read_header(mpeg3audio_t *audio)
+{
+ unsigned int code;
+ int i;
+ int attempt = 0;
+ int result = 0;
+
+ switch(audio->format)
+ {
+ case AUDIO_AC3:
+ result = mpeg3audio_read_ac3_header(audio);
+ break;
+
+ case AUDIO_MPEG:
+/* Layer 1 not supported */
+ if(audio->layer == 1)
+ {
+ fprintf(stderr, "mpeg3audio_new: layer 1 not supported\n");
+ result = 1;
+ }
+ audio->newhead = mpeg3bits_showbits(audio->astream, 32);
+ if(!mpeg3bits_eof(audio->astream) &&
+ (mpeg3audio_head_check(audio->newhead) || mpeg3audio_decode_header(audio)))
+ {
+ do
+ {
+ attempt++;
+ mpeg3bits_getbyte_noptr(audio->astream);
+ audio->newhead = mpeg3bits_showbits(audio->astream, 32);
+ }while(!mpeg3bits_eof(audio->astream) &&
+ attempt < 65536 &&
+ (mpeg3audio_head_check(audio->newhead) || mpeg3audio_decode_header(audio)));
+ }
+
+/* Skip the 4 bytes containing the header */
+ mpeg3bits_getbits(audio->astream, 32);
+ break;
+
+ case AUDIO_PCM:
+ mpeg3audio_read_pcm_header(audio);
+ break;
+ }
+ return mpeg3bits_eof(audio->astream);
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/huffman.h b/core/multimedia/opieplayer/libmpeg3/audio/huffman.h
new file mode 100644
index 0000000..a9c8fff
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/huffman.h
@@ -0,0 +1,355 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef HUFFMAN_H
+#define HUFFMAN_H
+
+/*
+ * huffman tables ... recalcualted to work with my optimzed
+ * decoder scheme (MH)
+ *
+ * probably we could save a few bytes of memory, because the
+ * smaller tables are often the part of a bigger table
+ */
+
+struct newhuff
+{
+ unsigned int linbits;
+ short *table;
+};
+
+static short mpeg3_tab0[] =
+{
+ 0
+};
+
+static short mpeg3_tab1[] =
+{
+ -5, -3, -1, 17, 1, 16, 0
+};
+
+static short mpeg3_tab2[] =
+{
+ -15, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 17, -1, 1,
+ 16, 0
+};
+
+static short mpeg3_tab3[] =
+{
+ -13, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 16, 17, -1,
+ 1, 0
+};
+
+static short mpeg3_tab5[] =
+{
+ -29, -25, -23, -15, -7, -5, -3, -1, 51, 35, 50, 49, -3, -1, 19,
+ 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16,
+ 0
+};
+
+static short mpeg3_tab6[] =
+{
+ -25, -19, -13, -9, -5, -3, -1, 51, 3, 35, -1, 50, 48, -1, 19,
+ 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, -1, 17, -1, 16,
+ 0
+};
+
+static short mpeg3_tab7[] =
+{
+ -69, -65, -57, -39, -29, -17, -11, -7, -3, -1, 85, 69, -1, 84, 83,
+ -1, 53, 68, -3, -1, 37, 82, 21, -5, -1, 81, -1, 5, 52, -1,
+ 80, -1, 67, 51, -5, -3, -1, 36, 66, 20, -1, 65, 64, -11, -7,
+ -3, -1, 4, 35, -1, 50, 3, -1, 19, 49, -3, -1, 48, 34, 18,
+ -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0
+};
+
+static short mpeg3_tab8[] =
+{
+ -65, -63, -59, -45, -31, -19, -13, -7, -5, -3, -1, 85, 84, 69, 83,
+ -3, -1, 53, 68, 37, -3, -1, 82, 5, 21, -5, -1, 81, -1, 52,
+ 67, -3, -1, 80, 51, 36, -5, -3, -1, 66, 20, 65, -3, -1, 4,
+ 64, -1, 35, 50, -9, -7, -3, -1, 19, 49, -1, 3, 48, 34, -1,
+ 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0
+};
+
+static short mpeg3_tab9[] =
+{
+ -63, -53, -41, -29, -19, -11, -5, -3, -1, 85, 69, 53, -1, 83, -1,
+ 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, -1, 81, 52, -1, 67,
+ -1, 80, 4, -7, -3, -1, 36, 66, -1, 51, 64, -1, 20, 65, -5,
+ -3, -1, 35, 50, 19, -1, 49, -1, 3, 48, -5, -3, -1, 34, 2,
+ 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0
+};
+
+static short mpeg3_tab10[] =
+{
+-125,-121,-111, -83, -55, -35, -21, -13, -7, -3, -1, 119, 103, -1, 118,
+ 87, -3, -1, 117, 102, 71, -3, -1, 116, 86, -1, 101, 55, -9, -3,
+ -1, 115, 70, -3, -1, 85, 84, 99, -1, 39, 114, -11, -5, -3, -1,
+ 100, 7, 112, -1, 98, -1, 69, 53, -5, -1, 6, -1, 83, 68, 23,
+ -17, -5, -1, 113, -1, 54, 38, -5, -3, -1, 37, 82, 21, -1, 81,
+ -1, 52, 67, -3, -1, 22, 97, -1, 96, -1, 5, 80, -19, -11, -7,
+ -3, -1, 36, 66, -1, 51, 4, -1, 20, 65, -3, -1, 64, 35, -1,
+ 50, 3, -3, -1, 19, 49, -1, 48, 34, -7, -3, -1, 18, 33, -1,
+ 2, 32, 17, -1, 1, 16, 0
+};
+
+static short mpeg3_tab11[] =
+{
+-121,-113, -89, -59, -43, -27, -17, -7, -3, -1, 119, 103, -1, 118, 117,
+ -3, -1, 102, 71, -1, 116, -1, 87, 85, -5, -3, -1, 86, 101, 55,
+ -1, 115, 70, -9, -7, -3, -1, 69, 84, -1, 53, 83, 39, -1, 114,
+ -1, 100, 7, -5, -1, 113, -1, 23, 112, -3, -1, 54, 99, -1, 96,
+ -1, 68, 37, -13, -7, -5, -3, -1, 82, 5, 21, 98, -3, -1, 38,
+ 6, 22, -5, -1, 97, -1, 81, 52, -5, -1, 80, -1, 67, 51, -1,
+ 36, 66, -15, -11, -7, -3, -1, 20, 65, -1, 4, 64, -1, 35, 50,
+ -1, 19, 49, -5, -3, -1, 3, 48, 34, 33, -5, -1, 18, -1, 2,
+ 32, 17, -3, -1, 1, 16, 0
+};
+
+static short mpeg3_tab12[] =
+{
+-115, -99, -73, -45, -27, -17, -9, -5, -3, -1, 119, 103, 118, -1, 87,
+ 117, -3, -1, 102, 71, -1, 116, 101, -3, -1, 86, 55, -3, -1, 115,
+ 85, 39, -7, -3, -1, 114, 70, -1, 100, 23, -5, -1, 113, -1, 7,
+ 112, -1, 54, 99, -13, -9, -3, -1, 69, 84, -1, 68, -1, 6, 5,
+ -1, 38, 98, -5, -1, 97, -1, 22, 96, -3, -1, 53, 83, -1, 37,
+ 82, -17, -7, -3, -1, 21, 81, -1, 52, 67, -5, -3, -1, 80, 4,
+ 36, -1, 66, 20, -3, -1, 51, 65, -1, 35, 50, -11, -7, -5, -3,
+ -1, 64, 3, 48, 19, -1, 49, 34, -1, 18, 33, -7, -5, -3, -1,
+ 2, 32, 0, 17, -1, 1, 16
+};
+
+static short mpeg3_tab13[] =
+{
+-509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13, -9,
+ -7, -5, -3, -1, 254, 252, 253, 237, 255, -1, 239, 223, -3, -1, 238,
+ 207, -1, 222, 191, -9, -3, -1, 251, 206, -1, 220, -1, 175, 233, -1,
+ 236, 221, -9, -5, -3, -1, 250, 205, 190, -1, 235, 159, -3, -1, 249,
+ 234, -1, 189, 219, -17, -9, -3, -1, 143, 248, -1, 204, -1, 174, 158,
+ -5, -1, 142, -1, 127, 126, 247, -5, -1, 218, -1, 173, 188, -3, -1,
+ 203, 246, 111, -15, -7, -3, -1, 232, 95, -1, 157, 217, -3, -1, 245,
+ 231, -1, 172, 187, -9, -3, -1, 79, 244, -3, -1, 202, 230, 243, -1,
+ 63, -1, 141, 216, -21, -9, -3, -1, 47, 242, -3, -1, 110, 156, 15,
+ -5, -3, -1, 201, 94, 171, -3, -1, 125, 215, 78, -11, -5, -3, -1,
+ 200, 214, 62, -1, 185, -1, 155, 170, -1, 31, 241, -23, -13, -5, -1,
+ 240, -1, 186, 229, -3, -1, 228, 140, -1, 109, 227, -5, -1, 226, -1,
+ 46, 14, -1, 30, 225, -15, -7, -3, -1, 224, 93, -1, 213, 124, -3,
+ -1, 199, 77, -1, 139, 184, -7, -3, -1, 212, 154, -1, 169, 108, -1,
+ 198, 61, -37, -21, -9, -5, -3, -1, 211, 123, 45, -1, 210, 29, -5,
+ -1, 183, -1, 92, 197, -3, -1, 153, 122, 195, -7, -5, -3, -1, 167,
+ 151, 75, 209, -3, -1, 13, 208, -1, 138, 168, -11, -7, -3, -1, 76,
+ 196, -1, 107, 182, -1, 60, 44, -3, -1, 194, 91, -3, -1, 181, 137,
+ 28, -43, -23, -11, -5, -1, 193, -1, 152, 12, -1, 192, -1, 180, 106,
+ -5, -3, -1, 166, 121, 59, -1, 179, -1, 136, 90, -11, -5, -1, 43,
+ -1, 165, 105, -1, 164, -1, 120, 135, -5, -1, 148, -1, 119, 118, 178,
+ -11, -3, -1, 27, 177, -3, -1, 11, 176, -1, 150, 74, -7, -3, -1,
+ 58, 163, -1, 89, 149, -1, 42, 162, -47, -23, -9, -3, -1, 26, 161,
+ -3, -1, 10, 104, 160, -5, -3, -1, 134, 73, 147, -3, -1, 57, 88,
+ -1, 133, 103, -9, -3, -1, 41, 146, -3, -1, 87, 117, 56, -5, -1,
+ 131, -1, 102, 71, -3, -1, 116, 86, -1, 101, 115, -11, -3, -1, 25,
+ 145, -3, -1, 9, 144, -1, 72, 132, -7, -5, -1, 114, -1, 70, 100,
+ 40, -1, 130, 24, -41, -27, -11, -5, -3, -1, 55, 39, 23, -1, 113,
+ -1, 85, 7, -7, -3, -1, 112, 54, -1, 99, 69, -3, -1, 84, 38,
+ -1, 98, 53, -5, -1, 129, -1, 8, 128, -3, -1, 22, 97, -1, 6,
+ 96, -13, -9, -5, -3, -1, 83, 68, 37, -1, 82, 5, -1, 21, 81,
+ -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, -19, -11,
+ -5, -1, 65, -1, 4, 64, -3, -1, 35, 50, 19, -3, -1, 49, 3,
+ -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
+ 0
+};
+
+static short mpeg3_tab15[] =
+{
+-495,-445,-355,-263,-183,-115, -77, -43, -27, -13, -7, -3, -1, 255, 239,
+ -1, 254, 223, -1, 238, -1, 253, 207, -7, -3, -1, 252, 222, -1, 237,
+ 191, -1, 251, -1, 206, 236, -7, -3, -1, 221, 175, -1, 250, 190, -3,
+ -1, 235, 205, -1, 220, 159, -15, -7, -3, -1, 249, 234, -1, 189, 219,
+ -3, -1, 143, 248, -1, 204, 158, -7, -3, -1, 233, 127, -1, 247, 173,
+ -3, -1, 218, 188, -1, 111, -1, 174, 15, -19, -11, -3, -1, 203, 246,
+ -3, -1, 142, 232, -1, 95, 157, -3, -1, 245, 126, -1, 231, 172, -9,
+ -3, -1, 202, 187, -3, -1, 217, 141, 79, -3, -1, 244, 63, -1, 243,
+ 216, -33, -17, -9, -3, -1, 230, 47, -1, 242, -1, 110, 240, -3, -1,
+ 31, 241, -1, 156, 201, -7, -3, -1, 94, 171, -1, 186, 229, -3, -1,
+ 125, 215, -1, 78, 228, -15, -7, -3, -1, 140, 200, -1, 62, 109, -3,
+ -1, 214, 227, -1, 155, 185, -7, -3, -1, 46, 170, -1, 226, 30, -5,
+ -1, 225, -1, 14, 224, -1, 93, 213, -45, -25, -13, -7, -3, -1, 124,
+ 199, -1, 77, 139, -1, 212, -1, 184, 154, -7, -3, -1, 169, 108, -1,
+ 198, 61, -1, 211, 210, -9, -5, -3, -1, 45, 13, 29, -1, 123, 183,
+ -5, -1, 209, -1, 92, 208, -1, 197, 138, -17, -7, -3, -1, 168, 76,
+ -1, 196, 107, -5, -1, 182, -1, 153, 12, -1, 60, 195, -9, -3, -1,
+ 122, 167, -1, 166, -1, 192, 11, -1, 194, -1, 44, 91, -55, -29, -15,
+ -7, -3, -1, 181, 28, -1, 137, 152, -3, -1, 193, 75, -1, 180, 106,
+ -5, -3, -1, 59, 121, 179, -3, -1, 151, 136, -1, 43, 90, -11, -5,
+ -1, 178, -1, 165, 27, -1, 177, -1, 176, 105, -7, -3, -1, 150, 74,
+ -1, 164, 120, -3, -1, 135, 58, 163, -17, -7, -3, -1, 89, 149, -1,
+ 42, 162, -3, -1, 26, 161, -3, -1, 10, 160, 104, -7, -3, -1, 134,
+ 73, -1, 148, 57, -5, -1, 147, -1, 119, 9, -1, 88, 133, -53, -29,
+ -13, -7, -3, -1, 41, 103, -1, 118, 146, -1, 145, -1, 25, 144, -7,
+ -3, -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 71, -7,
+ -3, -1, 40, 130, -1, 24, 129, -7, -3, -1, 116, 8, -1, 128, 86,
+ -3, -1, 101, 55, -1, 115, 70, -17, -7, -3, -1, 39, 114, -1, 100,
+ 23, -3, -1, 85, 113, -3, -1, 7, 112, 54, -7, -3, -1, 99, 69,
+ -1, 84, 38, -3, -1, 98, 22, -3, -1, 6, 96, 53, -33, -19, -9,
+ -5, -1, 97, -1, 83, 68, -1, 37, 82, -3, -1, 21, 81, -3, -1,
+ 5, 80, 52, -7, -3, -1, 67, 36, -1, 66, 51, -1, 65, -1, 20,
+ 4, -9, -3, -1, 35, 50, -3, -1, 64, 3, 19, -3, -1, 49, 48,
+ 34, -9, -7, -3, -1, 18, 33, -1, 2, 32, 17, -3, -1, 1, 16,
+ 0
+};
+
+static short mpeg3_tab16[] =
+{
+-509,-503,-461,-323,-103, -37, -27, -15, -7, -3, -1, 239, 254, -1, 223,
+ 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 175, -1, 250, 159, -3,
+ -1, 249, 248, 143, -7, -3, -1, 127, 247, -1, 111, 246, 255, -9, -5,
+ -3, -1, 95, 245, 79, -1, 244, 243, -53, -1, 240, -1, 63, -29, -19,
+ -13, -7, -5, -1, 206, -1, 236, 221, 222, -1, 233, -1, 234, 217, -1,
+ 238, -1, 237, 235, -3, -1, 190, 205, -3, -1, 220, 219, 174, -11, -5,
+ -1, 204, -1, 173, 218, -3, -1, 126, 172, 202, -5, -3, -1, 201, 125,
+ 94, 189, 242, -93, -5, -3, -1, 47, 15, 31, -1, 241, -49, -25, -13,
+ -5, -1, 158, -1, 188, 203, -3, -1, 142, 232, -1, 157, 231, -7, -3,
+ -1, 187, 141, -1, 216, 110, -1, 230, 156, -13, -7, -3, -1, 171, 186,
+ -1, 229, 215, -1, 78, -1, 228, 140, -3, -1, 200, 62, -1, 109, -1,
+ 214, 155, -19, -11, -5, -3, -1, 185, 170, 225, -1, 212, -1, 184, 169,
+ -5, -1, 123, -1, 183, 208, 227, -7, -3, -1, 14, 224, -1, 93, 213,
+ -3, -1, 124, 199, -1, 77, 139, -75, -45, -27, -13, -7, -3, -1, 154,
+ 108, -1, 198, 61, -3, -1, 92, 197, 13, -7, -3, -1, 138, 168, -1,
+ 153, 76, -3, -1, 182, 122, 60, -11, -5, -3, -1, 91, 137, 28, -1,
+ 192, -1, 152, 121, -1, 226, -1, 46, 30, -15, -7, -3, -1, 211, 45,
+ -1, 210, 209, -5, -1, 59, -1, 151, 136, 29, -7, -3, -1, 196, 107,
+ -1, 195, 167, -1, 44, -1, 194, 181, -23, -13, -7, -3, -1, 193, 12,
+ -1, 75, 180, -3, -1, 106, 166, 179, -5, -3, -1, 90, 165, 43, -1,
+ 178, 27, -13, -5, -1, 177, -1, 11, 176, -3, -1, 105, 150, -1, 74,
+ 164, -5, -3, -1, 120, 135, 163, -3, -1, 58, 89, 42, -97, -57, -33,
+ -19, -11, -5, -3, -1, 149, 104, 161, -3, -1, 134, 119, 148, -5, -3,
+ -1, 73, 87, 103, 162, -5, -1, 26, -1, 10, 160, -3, -1, 57, 147,
+ -1, 88, 133, -9, -3, -1, 41, 146, -3, -1, 118, 9, 25, -5, -1,
+ 145, -1, 144, 72, -3, -1, 132, 117, -1, 56, 131, -21, -11, -5, -3,
+ -1, 102, 40, 130, -3, -1, 71, 116, 24, -3, -1, 129, 128, -3, -1,
+ 8, 86, 55, -9, -5, -1, 115, -1, 101, 70, -1, 39, 114, -5, -3,
+ -1, 100, 85, 7, 23, -23, -13, -5, -1, 113, -1, 112, 54, -3, -1,
+ 99, 69, -1, 84, 38, -3, -1, 98, 22, -1, 97, -1, 6, 96, -9,
+ -5, -1, 83, -1, 53, 68, -1, 37, 82, -1, 81, -1, 21, 5, -33,
+ -23, -13, -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20,
+ -5, -1, 65, -1, 4, 64, -1, 35, 50, -3, -1, 19, 49, -3, -1,
+ 3, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16,
+ 0
+};
+
+static short mpeg3_tab24[] =
+{
+-451,-117, -43, -25, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1,
+ 207, 252, -1, 191, 251, -5, -1, 250, -1, 175, 159, -1, 249, 248, -9,
+ -5, -3, -1, 143, 127, 247, -1, 111, 246, -3, -1, 95, 245, -1, 79,
+ 244, -71, -7, -3, -1, 63, 243, -1, 47, 242, -5, -1, 241, -1, 31,
+ 240, -25, -9, -1, 15, -3, -1, 238, 222, -1, 237, 206, -7, -3, -1,
+ 236, 221, -1, 190, 235, -3, -1, 205, 220, -1, 174, 234, -15, -7, -3,
+ -1, 189, 219, -1, 204, 158, -3, -1, 233, 173, -1, 218, 188, -7, -3,
+ -1, 203, 142, -1, 232, 157, -3, -1, 217, 126, -1, 231, 172, 255,-235,
+-143, -77, -45, -25, -15, -7, -3, -1, 202, 187, -1, 141, 216, -5, -3,
+ -1, 14, 224, 13, 230, -5, -3, -1, 110, 156, 201, -1, 94, 186, -9,
+ -5, -1, 229, -1, 171, 125, -1, 215, 228, -3, -1, 140, 200, -3, -1,
+ 78, 46, 62, -15, -7, -3, -1, 109, 214, -1, 227, 155, -3, -1, 185,
+ 170, -1, 226, 30, -7, -3, -1, 225, 93, -1, 213, 124, -3, -1, 199,
+ 77, -1, 139, 184, -31, -15, -7, -3, -1, 212, 154, -1, 169, 108, -3,
+ -1, 198, 61, -1, 211, 45, -7, -3, -1, 210, 29, -1, 123, 183, -3,
+ -1, 209, 92, -1, 197, 138, -17, -7, -3, -1, 168, 153, -1, 76, 196,
+ -3, -1, 107, 182, -3, -1, 208, 12, 60, -7, -3, -1, 195, 122, -1,
+ 167, 44, -3, -1, 194, 91, -1, 181, 28, -57, -35, -19, -7, -3, -1,
+ 137, 152, -1, 193, 75, -5, -3, -1, 192, 11, 59, -3, -1, 176, 10,
+ 26, -5, -1, 180, -1, 106, 166, -3, -1, 121, 151, -3, -1, 160, 9,
+ 144, -9, -3, -1, 179, 136, -3, -1, 43, 90, 178, -7, -3, -1, 165,
+ 27, -1, 177, 105, -1, 150, 164, -17, -9, -5, -3, -1, 74, 120, 135,
+ -1, 58, 163, -3, -1, 89, 149, -1, 42, 162, -7, -3, -1, 161, 104,
+ -1, 134, 119, -3, -1, 73, 148, -1, 57, 147, -63, -31, -15, -7, -3,
+ -1, 88, 133, -1, 41, 103, -3, -1, 118, 146, -1, 25, 145, -7, -3,
+ -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 40, -17, -7,
+ -3, -1, 130, 24, -1, 71, 116, -5, -1, 129, -1, 8, 128, -1, 86,
+ 101, -7, -5, -1, 23, -1, 7, 112, 115, -3, -1, 55, 39, 114, -15,
+ -7, -3, -1, 70, 100, -1, 85, 113, -3, -1, 54, 99, -1, 69, 84,
+ -7, -3, -1, 38, 98, -1, 22, 97, -5, -3, -1, 6, 96, 53, -1,
+ 83, 68, -51, -37, -23, -15, -9, -3, -1, 37, 82, -1, 21, -1, 5,
+ 80, -1, 81, -1, 52, 67, -3, -1, 36, 66, -1, 51, 20, -9, -5,
+ -1, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -7, -5, -3, -1,
+ 3, 48, 34, 18, -1, 33, -1, 2, 32, -3, -1, 17, 1, -1, 16,
+ 0
+};
+
+static short mpeg3_tab_c0[] =
+{
+ -29, -21, -13, -7, -3, -1, 11, 15, -1, 13, 14, -3, -1, 7, 5,
+ 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, 1, -1, 4, 8,
+ 0
+};
+
+static short mpeg3_tab_c1[] =
+{
+ -15, -7, -3, -1, 15, 14, -1, 13, 12, -3, -1, 11, 10, -1, 9,
+ 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, 3, 2, -1, 1,
+ 0
+};
+
+
+
+static struct newhuff mpeg3_ht[] =
+{
+ { /* 0 */ 0 , mpeg3_tab0 } ,
+ { /* 2 */ 0 , mpeg3_tab1 } ,
+ { /* 3 */ 0 , mpeg3_tab2 } ,
+ { /* 3 */ 0 , mpeg3_tab3 } ,
+ { /* 0 */ 0 , mpeg3_tab0 } ,
+ { /* 4 */ 0 , mpeg3_tab5 } ,
+ { /* 4 */ 0 , mpeg3_tab6 } ,
+ { /* 6 */ 0 , mpeg3_tab7 } ,
+ { /* 6 */ 0 , mpeg3_tab8 } ,
+ { /* 6 */ 0 , mpeg3_tab9 } ,
+ { /* 8 */ 0 , mpeg3_tab10 } ,
+ { /* 8 */ 0 , mpeg3_tab11 } ,
+ { /* 8 */ 0 , mpeg3_tab12 } ,
+ { /* 16 */ 0 , mpeg3_tab13 } ,
+ { /* 0 */ 0 , mpeg3_tab0 } ,
+ { /* 16 */ 0 , mpeg3_tab15 } ,
+
+ { /* 16 */ 1 , mpeg3_tab16 } ,
+ { /* 16 */ 2 , mpeg3_tab16 } ,
+ { /* 16 */ 3 , mpeg3_tab16 } ,
+ { /* 16 */ 4 , mpeg3_tab16 } ,
+ { /* 16 */ 6 , mpeg3_tab16 } ,
+ { /* 16 */ 8 , mpeg3_tab16 } ,
+ { /* 16 */ 10, mpeg3_tab16 } ,
+ { /* 16 */ 13, mpeg3_tab16 } ,
+ { /* 16 */ 4 , mpeg3_tab24 } ,
+ { /* 16 */ 5 , mpeg3_tab24 } ,
+ { /* 16 */ 6 , mpeg3_tab24 } ,
+ { /* 16 */ 7 , mpeg3_tab24 } ,
+ { /* 16 */ 8 , mpeg3_tab24 } ,
+ { /* 16 */ 9 , mpeg3_tab24 } ,
+ { /* 16 */ 11, mpeg3_tab24 } ,
+ { /* 16 */ 13, mpeg3_tab24 }
+};
+
+static struct newhuff mpeg3_htc[] =
+{
+ { /* 1 , 1 , */ 0 , mpeg3_tab_c0 } ,
+ { /* 1 , 1 , */ 0 , mpeg3_tab_c1 }
+};
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/layer1.c b/core/multimedia/opieplayer/libmpeg3/audio/layer1.c
new file mode 100644
index 0000000..0c355f3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/layer1.c
@@ -0,0 +1,6 @@
+#include "mpeg3audio.h"
+
+int mpeg3audio_dolayer1(mpeg3audio_t *audio)
+{
+ ;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/layer2.c b/core/multimedia/opieplayer/libmpeg3/audio/layer2.c
new file mode 100644
index 0000000..01582fe
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/layer2.c
@@ -0,0 +1,418 @@
+/*
+ * most other tables are calculated on program start (which is (of course)
+ * not ISO-conform) ..
+ * Layer-3 huffman table is in huffman.h
+ */
+
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "tables.h"
+
+struct al_table alloc_0[] = {
+ {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
+ {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
+ {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
+ {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
+ {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
+ {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767} };
+
+struct al_table alloc_1[] = {
+ {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
+ {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
+ {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
+ {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
+ {4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
+ {11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767},
+ {2,0},{5,3},{7,5},{16,-32767} };
+
+struct al_table alloc_2[] = {
+ {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
+ {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
+ {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
+ {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
+
+struct al_table alloc_3[] = {
+ {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
+ {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
+ {4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
+ {10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
+
+struct al_table alloc_4[] = {
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
+ {4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
+ {9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9},
+ {2,0},{5,3},{7,5},{10,9} };
+
+
+int mpeg3audio_II_select_table(mpeg3audio_t *audio)
+{
+ static int translate[3][2][16] =
+ {{{ 0,2,2,2,2,2,2,0,0,0,1,1,1,1,1,0},
+ { 0,2,2,0,0,0,1,1,1,1,1,1,1,1,1,0}},
+ {{ 0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0},
+ { 0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0}},
+ {{ 0,3,3,3,3,3,3,0,0,0,1,1,1,1,1,0},
+ { 0,3,3,0,0,0,1,1,1,1,1,1,1,1,1,0}}};
+ int table, sblim;
+ static struct al_table *tables[5] =
+ {alloc_0, alloc_1, alloc_2, alloc_3, alloc_4};
+ static int sblims[5] = {27, 30, 8, 12, 30};
+
+ if(audio->lsf)
+ table = 4;
+ else
+ table = translate[audio->sampling_frequency_code][2 - audio->channels][audio->bitrate_index];
+ sblim = sblims[table];
+
+ audio->alloc = tables[table];
+ audio->II_sblimit = sblim;
+ return 0;
+}
+
+int mpeg3audio_II_step_one(mpeg3audio_t *audio, unsigned int *bit_alloc, int *scale)
+{
+ int stereo = audio->channels - 1;
+ int sblimit = audio->II_sblimit;
+ int jsbound = audio->jsbound;
+ int sblimit2 = audio->II_sblimit << stereo;
+ struct al_table *alloc1 = audio->alloc;
+ int i, result = 0;
+ unsigned int *scfsi_buf = audio->layer2_scfsi_buf;
+ unsigned int *scfsi, *bita;
+ int sc, step;
+
+ bita = bit_alloc;
+ if(stereo)
+ {
+/* Stereo */
+ for(i = jsbound;i ; i--, alloc1 += (1 << step))
+ {
+ *bita++ = (char)mpeg3bits_getbits(audio->astream, step = alloc1->bits);
+ *bita++ = (char)mpeg3bits_getbits(audio->astream, step);
+ }
+ for(i = sblimit-jsbound; i; i--, alloc1 += (1 << step))
+ {
+ bita[0] = (char)mpeg3bits_getbits(audio->astream, step = alloc1->bits);
+ bita[1] = bita[0];
+ bita += 2;
+ }
+ bita = bit_alloc;
+ scfsi = scfsi_buf;
+ for(i = sblimit2; i; i--)
+ if(*bita++) *scfsi++ = (char)mpeg3bits_getbits(audio->astream, 2);
+ }
+ else
+ {
+/* mono */
+ for(i = sblimit; i; i--, alloc1 += (1 << step))
+ *bita++ = (char)mpeg3bits_getbits(audio->astream, step = alloc1->bits);
+ bita = bit_alloc;
+ scfsi = scfsi_buf;
+ for(i = sblimit; i; i--) if (*bita++) *scfsi++ = (char)mpeg3bits_getbits(audio->astream, 2);
+ }
+
+ bita = bit_alloc;
+ scfsi = scfsi_buf;
+ for(i = sblimit2; i; i--)
+ {
+ if(*bita++)
+ switch(*scfsi++)
+ {
+ case 0:
+ *scale++ = mpeg3bits_getbits(audio->astream, 6);
+ *scale++ = mpeg3bits_getbits(audio->astream, 6);
+ *scale++ = mpeg3bits_getbits(audio->astream, 6);
+ break;
+ case 1 :
+ *scale++ = sc = mpeg3bits_getbits(audio->astream, 6);
+ *scale++ = sc;
+ *scale++ = mpeg3bits_getbits(audio->astream, 6);
+ break;
+ case 2:
+ *scale++ = sc = mpeg3bits_getbits(audio->astream, 6);
+ *scale++ = sc;
+ *scale++ = sc;
+ break;
+ default: /* case 3 */
+ *scale++ = mpeg3bits_getbits(audio->astream, 6);
+ *scale++ = sc = mpeg3bits_getbits(audio->astream, 6);
+ *scale++ = sc;
+ break;
+ }
+ }
+ return result | mpeg3bits_error(audio->astream);
+}
+
+int mpeg3audio_II_step_two(mpeg3audio_t *audio, unsigned int *bit_alloc, mpeg3_real_t fraction[2][4][SBLIMIT], int *scale, int x1)
+{
+ int i, j, k, ba, result = 0;
+ int channels = audio->channels;
+ int sblimit = audio->II_sblimit;
+ int jsbound = audio->jsbound;
+ struct al_table *alloc2, *alloc1 = audio->alloc;
+ unsigned int *bita = bit_alloc;
+ int d1, step, test;
+
+ for(i = 0; i < jsbound; i++, alloc1 += (1 << step))
+ {
+ step = alloc1->bits;
+ for(j = 0; j < channels; j++)
+ {
+ if(ba = *bita++)
+ {
+ k = (alloc2 = alloc1 + ba)->bits;
+ if((d1 = alloc2->d) < 0)
+ {
+ mpeg3_real_t cm = mpeg3_muls[k][scale[x1]];
+
+ fraction[j][0][i] = ((mpeg3_real_t)((int)mpeg3bits_getbits(audio->astream, k) + d1)) * cm;
+ fraction[j][1][i] = ((mpeg3_real_t)((int)mpeg3bits_getbits(audio->astream, k) + d1)) * cm;
+ fraction[j][2][i] = ((mpeg3_real_t)((int)mpeg3bits_getbits(audio->astream, k) + d1)) * cm;
+ }
+ else
+ {
+ static int *table[] =
+ {0, 0, 0, mpeg3_grp_3tab, 0, mpeg3_grp_5tab, 0, 0, 0, mpeg3_grp_9tab};
+ unsigned int idx, *tab, m = scale[x1];
+
+ idx = (unsigned int)mpeg3bits_getbits(audio->astream, k);
+ tab = (unsigned int*)(table[d1] + idx + idx + idx);
+ fraction[j][0][i] = mpeg3_muls[*tab++][m];
+ fraction[j][1][i] = mpeg3_muls[*tab++][m];
+ fraction[j][2][i] = mpeg3_muls[*tab][m];
+ }
+ scale += 3;
+ }
+ else
+ fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0;
+ }
+ }
+
+ for(i = jsbound; i < sblimit; i++, alloc1 += (1 << step))
+ {
+ step = alloc1->bits;
+/* channel 1 and channel 2 bitalloc are the same */
+ bita++;
+ if((ba = *bita++))
+ {
+ k=(alloc2 = alloc1+ba)->bits;
+ if((d1 = alloc2->d) < 0)
+ {
+ mpeg3_real_t cm;
+
+ cm = mpeg3_muls[k][scale[x1 + 3]];
+ fraction[1][0][i] = (fraction[0][0][i] = (mpeg3_real_t)((int)mpeg3bits_getbits(audio->astream, k) + d1)) * cm;
+ fraction[1][1][i] = (fraction[0][1][i] = (mpeg3_real_t)((int)mpeg3bits_getbits(audio->astream, k) + d1)) * cm;
+ fraction[1][2][i] = (fraction[0][2][i] = (mpeg3_real_t)((int)mpeg3bits_getbits(audio->astream, k) + d1)) * cm;
+ cm = mpeg3_muls[k][scale[x1]];
+ fraction[0][0][i] *= cm;
+ fraction[0][1][i] *= cm;
+ fraction[0][2][i] *= cm;
+ }
+ else
+ {
+ static int *table[] = {0, 0, 0, mpeg3_grp_3tab, 0, mpeg3_grp_5tab, 0, 0, 0, mpeg3_grp_9tab};
+ unsigned int idx, *tab, m1, m2;
+
+ m1 = scale[x1];
+ m2 = scale[x1+3];
+ idx = (unsigned int)mpeg3bits_getbits(audio->astream, k);
+ tab = (unsigned int*)(table[d1] + idx + idx + idx);
+ fraction[0][0][i] = mpeg3_muls[*tab][m1];
+ fraction[1][0][i] = mpeg3_muls[*tab++][m2];
+ fraction[0][1][i] = mpeg3_muls[*tab][m1];
+ fraction[1][1][i] = mpeg3_muls[*tab++][m2];
+ fraction[0][2][i] = mpeg3_muls[*tab][m1];
+ fraction[1][2][i] = mpeg3_muls[*tab][m2];
+ }
+ scale += 6;
+ }
+ else
+ {
+ fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] =
+ fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = 0.0;
+ }
+/*
+ should we use individual scalefac for channel 2 or
+ is the current way the right one , where we just copy channel 1 to
+ channel 2 ??
+ The current 'strange' thing is, that we throw away the scalefac
+ values for the second channel ...!!
+-> changed .. now we use the scalefac values of channel one !!
+*/
+ }
+
+ if(sblimit > SBLIMIT) sblimit = SBLIMIT;
+
+ for(i = sblimit; i < SBLIMIT; i++)
+ for(j = 0; j < channels; j++)
+ fraction[j][0][i] = fraction[j][1][i] = fraction[j][2][i] = 0.0;
+
+ return result | mpeg3bits_error(audio->astream);
+}
+
+int mpeg3audio_dolayer2(mpeg3audio_t *audio)
+{
+ int i, j, result = 0;
+ int channels = audio->channels;
+ mpeg3_real_t fraction[2][4][SBLIMIT]; /* pick_table clears unused subbands */
+ unsigned int bit_alloc[64];
+ int scale[192];
+ int single = audio->single;
+
+ if(audio->error_protection)
+ mpeg3bits_getbits(audio->astream, 16);
+
+ mpeg3audio_II_select_table(audio);
+
+ audio->jsbound = (audio->mode == MPG_MD_JOINT_STEREO) ?
+ (audio->mode_ext << 2) + 4 : audio->II_sblimit;
+
+ if(channels == 1 || single == 3)
+ single = 0;
+
+ result |= mpeg3audio_II_step_one(audio, bit_alloc, scale);
+
+ for(i = 0; i < SCALE_BLOCK && !result; i++)
+ {
+ result |= mpeg3audio_II_step_two(audio, bit_alloc, fraction, scale, i >> 2);
+
+ for(j = 0; j < 3; j++)
+ {
+ if(single >= 0)
+ {
+/* Monaural */
+ mpeg3audio_synth_mono(audio, fraction[single][j], audio->pcm_sample, &(audio->pcm_point));
+ }
+ else
+ {
+/* Stereo */
+ int p1 = audio->pcm_point;
+ mpeg3audio_synth_stereo(audio, fraction[0][j], 0, audio->pcm_sample, &p1);
+ mpeg3audio_synth_stereo(audio, fraction[1][j], 1, audio->pcm_sample, &(audio->pcm_point));
+ }
+
+ if(audio->pcm_point / audio->channels >= audio->pcm_allocated - MPEG3AUDIO_PADDING * audio->channels)
+ {
+/* Need more room */
+ mpeg3audio_replace_buffer(audio, audio->pcm_allocated + MPEG3AUDIO_PADDING * audio->channels);
+ }
+ }
+ }
+
+
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/layer3.c b/core/multimedia/opieplayer/libmpeg3/audio/layer3.c
new file mode 100644
index 0000000..b8a5f06
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/layer3.c
@@ -0,0 +1,1254 @@
+#include "huffman.h"
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "tables.h"
+
+#include <stdio.h>
+#include <string.h>
+
+struct gr_info_s {
+ int scfsi;
+ unsigned part2_3_length;
+ unsigned big_values;
+ unsigned scalefac_compress;
+ unsigned block_type;
+ unsigned mixed_block_flag;
+ unsigned table_select[3];
+ unsigned subblock_gain[3];
+ unsigned maxband[3];
+ unsigned maxbandl;
+ unsigned maxb;
+ unsigned region1start;
+ unsigned region2start;
+ unsigned preflag;
+ unsigned scalefac_scale;
+ unsigned count1table_select;
+ mpeg3_real_t *full_gain[3];
+ mpeg3_real_t *pow2gain;
+};
+
+struct mpeg3_III_sideinfo
+{
+ unsigned main_data_begin;
+ unsigned private_bits;
+ struct
+ {
+ struct gr_info_s gr[2];
+ } ch[2];
+};
+
+int mpeg3audio_III_get_scale_factors_1(mpeg3audio_t *audio,
+ int *scf,
+ struct gr_info_s *gr_info,
+ int ch,
+ int gr)
+{
+ static unsigned char slen[2][16] =
+ {{0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
+ {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}};
+ int numbits;
+ int num0 = slen[0][gr_info->scalefac_compress];
+ int num1 = slen[1][gr_info->scalefac_compress];
+
+ if (gr_info->block_type == 2)
+ {
+ int i = 18;
+ numbits = (num0 + num1) * 18;
+
+ if (gr_info->mixed_block_flag)
+ {
+ for(i = 8; i; i--)
+ *scf++ = mpeg3bits_getbits(audio->astream, num0);
+ i = 9;
+/* num0 * 17 + num1 * 18 */
+ numbits -= num0;
+ }
+
+ for( ; i; i--)
+ *scf++ = mpeg3bits_getbits(audio->astream, num0);
+ for(i = 18; i; i--)
+ *scf++ = mpeg3bits_getbits(audio->astream, num1);
+/* short[13][0..2] = 0 */
+ *scf++ = 0;
+ *scf++ = 0;
+ *scf++ = 0;
+ }
+ else
+ {
+ int i;
+ int scfsi = gr_info->scfsi;
+
+ if(scfsi < 0)
+ {
+/* scfsi < 0 => granule == 0 */
+ for(i = 11; i; i--)
+ {
+ *scf++ = mpeg3bits_getbits(audio->astream, num0);
+ }
+ for(i = 10; i; i--)
+ *scf++ = mpeg3bits_getbits(audio->astream, num1);
+ numbits = (num0 + num1) * 10 + num0;
+ *scf++ = 0;
+ }
+ else
+ {
+ numbits = 0;
+ if(!(scfsi & 0x8))
+ {
+ for(i = 0; i < 6; i++)
+ {
+ *scf++ = mpeg3bits_getbits(audio->astream, num0);
+ }
+ numbits += num0 * 6;
+ }
+ else
+ {
+ scf += 6;
+ }
+
+ if(!(scfsi & 0x4))
+ {
+ for(i = 0; i < 5; i++)
+ *scf++ = mpeg3bits_getbits(audio->astream, num0);
+ numbits += num0 * 5;
+ }
+ else
+ {
+ scf += 5;
+ }
+
+ if(!(scfsi & 0x2))
+ {
+ for(i = 0; i < 5; i++)
+ *scf++ = mpeg3bits_getbits(audio->astream, num1);
+ numbits += num1 * 5;
+ }
+ else
+ {
+ scf += 5;
+ }
+
+ if(!(scfsi & 0x1))
+ {
+ for(i = 0; i < 5; i++)
+ *scf++ = mpeg3bits_getbits(audio->astream, num1);
+ numbits += num1 * 5;
+ }
+ else
+ {
+ scf += 5;
+ }
+ *scf++ = 0; /* no l[21] in original sources */
+ }
+ }
+ return numbits;
+}
+
+int mpeg3audio_III_get_scale_factors_2(mpeg3audio_t *audio,
+ int *scf,
+ struct gr_info_s *gr_info,
+ int i_stereo)
+{
+ unsigned char *pnt;
+ int i, j, n = 0, numbits = 0;
+ unsigned int slen;
+ static unsigned char stab[3][6][4] =
+ {{{ 6, 5, 5,5 }, { 6, 5, 7,3 }, { 11,10,0,0},
+ { 7, 7, 7,0 }, { 6, 6, 6,3 }, { 8, 8,5,0}},
+ {{ 9, 9, 9,9 }, { 9, 9,12,6 }, { 18,18,0,0},
+ {12,12,12,0 }, {12, 9, 9,6 }, { 15,12,9,0}},
+ {{ 6, 9, 9,9 }, { 6, 9,12,6 }, { 15,18,0,0},
+ { 6,15,12,0 }, { 6,12, 9,6 }, { 6,18,9,0}}};
+
+/* i_stereo AND second channel -> do_layer3() checks this */
+ if(i_stereo)
+ slen = mpeg3_i_slen2[gr_info->scalefac_compress >> 1];
+ else
+ slen = mpeg3_n_slen2[gr_info->scalefac_compress];
+
+ gr_info->preflag = (slen >> 15) & 0x1;
+
+ n = 0;
+ if(gr_info->block_type == 2 )
+ {
+ n++;
+ if(gr_info->mixed_block_flag)
+ n++;
+ }
+
+ pnt = stab[n][(slen >> 12) & 0x7];
+
+ for(i = 0; i < 4; i++)
+ {
+ int num = slen & 0x7;
+ slen >>= 3;
+ if(num)
+ {
+ for(j = 0; j < (int)(pnt[i]); j++)
+ *scf++ = mpeg3bits_getbits(audio->astream, num);
+ numbits += pnt[i] * num;
+ }
+ else
+ {
+ for(j = 0; j < (int)(pnt[i]); j++)
+ *scf++ = 0;
+ }
+ }
+
+ n = (n << 1) + 1;
+ for(i = 0; i < n; i++)
+ *scf++ = 0;
+
+ return numbits;
+}
+
+static int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
+static int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+/*
+ * Dequantize samples (includes huffman decoding)
+ *
+ * 24 is enough because tab13 has max. a 19 bit huffvector
+ */
+
+#define BITSHIFT ((sizeof(long) - 1) * 8)
+#define REFRESH_MASK \
+ while(num < BITSHIFT) \
+ { \
+ mask |= mpeg3bits_getbits(audio->astream, 8) << (BITSHIFT - num); \
+ num += 8; \
+ part2remain -= 8; \
+ }
+
+int mpeg3audio_III_dequantize_sample(mpeg3audio_t *audio,
+ mpeg3_real_t xr[SBLIMIT][SSLIMIT],
+ int *scf,
+ struct gr_info_s *gr_info,
+ int sfreq,
+ int part2bits)
+{
+ int shift = 1 + gr_info->scalefac_scale;
+ mpeg3_real_t *xrpnt = (mpeg3_real_t*)xr;
+ int l[3],l3;
+ int part2remain = gr_info->part2_3_length - part2bits;
+ int *me;
+ int num = mpeg3bits_getbitoffset(audio->astream);
+ long mask = mpeg3bits_getbits(audio->astream, num);
+//printf("III_dequantize_sample 1 %08x %d\n", mask, num);
+ mask = mask << (BITSHIFT + 8 - num);
+ part2remain -= num;
+
+ {
+ int bv = gr_info->big_values;
+ int region1 = gr_info->region1start;
+ int region2 = gr_info->region2start;
+
+ l3 = ((576 >> 1) - bv) >> 1;
+
+/*
+ * we may lose the 'odd' bit here !!
+ * check this later again
+ */
+
+ if(bv <= region1)
+ {
+ l[0] = bv;
+ l[1] = 0;
+ l[2] = 0;
+ }
+ else
+ {
+ l[0] = region1;
+ if(bv <= region2)
+ {
+ l[1] = bv - l[0]; l[2] = 0;
+ }
+ else
+ {
+ l[1] = region2 - l[0];
+ l[2] = bv - region2;
+ }
+ }
+ }
+
+ if(gr_info->block_type == 2)
+ {
+/*
+ * decoding with short or mixed mode BandIndex table
+ */
+ int i, max[4];
+ int step = 0, lwin = 3, cb = 0;
+ register mpeg3_real_t v = 0.0;
+ register int *m, mc;
+
+ if(gr_info->mixed_block_flag)
+ {
+ max[3] = -1;
+ max[0] = max[1] = max[2] = 2;
+ m = mpeg3_map[sfreq][0];
+ me = mpeg3_mapend[sfreq][0];
+ }
+ else
+ {
+ max[0] = max[1] = max[2] = max[3] = -1;
+/* max[3] not floatly needed in this case */
+ m = mpeg3_map[sfreq][1];
+ me = mpeg3_mapend[sfreq][1];
+ }
+
+ mc = 0;
+ for(i = 0; i < 2; i++)
+ {
+ int lp = l[i];
+ struct newhuff *h = mpeg3_ht + gr_info->table_select[i];
+ for( ; lp; lp--, mc--)
+ {
+ register int x,y;
+ if(!mc)
+ {
+ mc = *m++;
+ xrpnt = ((mpeg3_real_t*)xr) + (*m++);
+ lwin = *m++;
+ cb = *m++;
+ if(lwin == 3)
+ {
+ v = gr_info->pow2gain[(*scf++) << shift];
+ step = 1;
+ }
+ else
+ {
+ v = gr_info->full_gain[lwin][(*scf++) << shift];
+ step = 3;
+ }
+ }
+
+ {
+ register short *val = h->table;
+ REFRESH_MASK;
+ while((y = *val++) < 0)
+ {
+ if (mask < 0)
+ val -= y;
+ num--;
+ mask <<= 1;
+ }
+ x = y >> 4;
+ y &= 0xf;
+ }
+
+ if(x == 15 && h->linbits)
+ {
+ max[lwin] = cb;
+ REFRESH_MASK;
+ x += ((unsigned long)mask) >> (BITSHIFT + 8 - h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if(mask < 0)
+ *xrpnt = -mpeg3_ispow[x] * v;
+ else
+ *xrpnt = mpeg3_ispow[x] * v;
+ mask <<= 1;
+ }
+ else
+ if(x)
+ {
+ max[lwin] = cb;
+ if(mask < 0)
+ *xrpnt = -mpeg3_ispow[x] * v;
+ else
+ *xrpnt = mpeg3_ispow[x] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt = 0.0;
+
+ xrpnt += step;
+ if(y == 15 && h->linbits)
+ {
+ max[lwin] = cb;
+ REFRESH_MASK;
+ y += ((unsigned long) mask) >> (BITSHIFT + 8 - h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if(mask < 0)
+ *xrpnt = -mpeg3_ispow[y] * v;
+ else
+ *xrpnt = mpeg3_ispow[y] * v;
+ mask <<= 1;
+ }
+ else
+ if(y)
+ {
+ max[lwin] = cb;
+ if(mask < 0)
+ *xrpnt = -mpeg3_ispow[y] * v;
+ else
+ *xrpnt = mpeg3_ispow[y] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ }
+ }
+
+ for( ;l3 && (part2remain + num > 0); l3--)
+ {
+ struct newhuff *h = mpeg3_htc + gr_info->count1table_select;
+ register short *val = h->table, a;
+
+ REFRESH_MASK;
+ while((a = *val++) < 0)
+ {
+ if (mask < 0)
+ val -= a;
+ num--;
+ mask <<= 1;
+ }
+ if(part2remain + num <= 0)
+ {
+ num -= part2remain + num;
+ break;
+ }
+
+ for(i = 0; i < 4; i++)
+ {
+ if(!(i & 1))
+ {
+ if(!mc)
+ {
+ mc = *m++;
+ xrpnt = ((mpeg3_real_t*)xr) + (*m++);
+ lwin = *m++;
+ cb = *m++;
+ if(lwin == 3)
+ {
+ v = gr_info->pow2gain[(*scf++) << shift];
+ step = 1;
+ }
+ else
+ {
+ v = gr_info->full_gain[lwin][(*scf++) << shift];
+ step = 3;
+ }
+ }
+ mc--;
+ }
+ if((a & (0x8 >> i)))
+ {
+ max[lwin] = cb;
+ if(part2remain + num <= 0)
+ {
+ break;
+ }
+ if(mask < 0)
+ *xrpnt = -v;
+ else
+ *xrpnt = v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt = 0.0;
+ xrpnt += step;
+ }
+ }
+
+ if(lwin < 3)
+ {
+/* short band? */
+ while(1)
+ {
+ for( ;mc > 0; mc--)
+ {
+/* short band -> step=3 */
+ *xrpnt = 0.0;
+ xrpnt += 3;
+ *xrpnt = 0.0;
+ xrpnt += 3;
+ }
+ if(m >= me)
+ break;
+ mc = *m++;
+ xrpnt = ((mpeg3_real_t*)xr) + *m++;
+/* optimize: field will be set to zero at the end of the function */
+ if(*m++ == 0)
+ break;
+/* cb */
+ m++;
+ }
+ }
+
+ gr_info->maxband[0] = max[0] + 1;
+ gr_info->maxband[1] = max[1] + 1;
+ gr_info->maxband[2] = max[2] + 1;
+ gr_info->maxbandl = max[3] + 1;
+
+ {
+ int rmax = max[0] > max[1] ? max[0] : max[1];
+ rmax = (rmax > max[2] ? rmax : max[2]) + 1;
+ gr_info->maxb = rmax ? mpeg3_shortLimit[sfreq][rmax] : mpeg3_longLimit[sfreq][max[3] + 1];
+ }
+
+ }
+ else
+ {
+/*
+ * decoding with 'long' BandIndex table (block_type != 2)
+ */
+ int *pretab = gr_info->preflag ? pretab1 : pretab2;
+ int i, max = -1;
+ int cb = 0;
+ int *m = mpeg3_map[sfreq][2];
+ register mpeg3_real_t v = 0.0;
+ int mc = 0;
+
+/*
+ * long hash table values
+ */
+ for(i = 0; i < 3; i++)
+ {
+ int lp = l[i];
+ struct newhuff *h = mpeg3_ht + gr_info->table_select[i];
+
+ for(; lp; lp--, mc--)
+ {
+ int x, y;
+
+ if(!mc)
+ {
+ mc = *m++;
+ cb = *m++;
+ if(cb == 21)
+ v = 0.0;
+ else
+ v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
+ }
+ {
+ register short *val = h->table;
+ REFRESH_MASK;
+ while((y = *val++) < 0)
+ {
+ if(mask < 0)
+ val -= y;
+ num--;
+ mask <<= 1;
+ }
+ x = y >> 4;
+ y &= 0xf;
+ }
+
+ if(x == 15 && h->linbits)
+ {
+ max = cb;
+ REFRESH_MASK;
+ x += ((unsigned long) mask) >> (BITSHIFT + 8 - h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if(mask < 0)
+ *xrpnt++ = -mpeg3_ispow[x] * v;
+ else
+ *xrpnt++ = mpeg3_ispow[x] * v;
+ mask <<= 1;
+ }
+ else
+ if(x)
+ {
+ max = cb;
+ if(mask < 0)
+ *xrpnt++ = -mpeg3_ispow[x] * v;
+ else
+ *xrpnt++ = mpeg3_ispow[x] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt++ = 0.0;
+
+ if(y == 15 && h->linbits)
+ {
+ max = cb;
+ REFRESH_MASK;
+ y += ((unsigned long) mask) >> (BITSHIFT + 8 - h->linbits);
+ num -= h->linbits + 1;
+ mask <<= h->linbits;
+ if(mask < 0)
+ *xrpnt++ = -mpeg3_ispow[y] * v;
+ else
+ *xrpnt++ = mpeg3_ispow[y] * v;
+ mask <<= 1;
+ }
+ else
+ if(y)
+ {
+ max = cb;
+ if(mask < 0)
+ *xrpnt++ = -mpeg3_ispow[y] * v;
+ else
+ *xrpnt++ = mpeg3_ispow[y] * v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt++ = 0.0;
+ }
+ }
+
+/*
+ * short (count1table) values
+ */
+ for( ; l3 && (part2remain + num > 0); l3--)
+ {
+ struct newhuff *h = mpeg3_htc + gr_info->count1table_select;
+ register short *val = h->table, a;
+
+ REFRESH_MASK;
+ while((a = *val++) < 0)
+ {
+ if(mask < 0)
+ val -= a;
+ num--;
+ mask <<= 1;
+ }
+ if(part2remain + num <= 0)
+ {
+ num -= part2remain + num;
+ break;
+ }
+
+ for(i = 0; i < 4; i++)
+ {
+ if(!(i & 1))
+ {
+ if(!mc)
+ {
+ mc = *m++;
+ cb = *m++;
+ if(cb == 21)
+ v = 0.0;
+ else
+ v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
+ }
+ mc--;
+ }
+ if((a & (0x8 >> i)))
+ {
+ max = cb;
+ if(part2remain + num <= 0)
+ {
+ break;
+ }
+ if(mask < 0)
+ *xrpnt++ = -v;
+ else
+ *xrpnt++ = v;
+ num--;
+ mask <<= 1;
+ }
+ else
+ *xrpnt++ = 0.0;
+ }
+ }
+
+ gr_info->maxbandl = max + 1;
+ gr_info->maxb = mpeg3_longLimit[sfreq][gr_info->maxbandl];
+ }
+
+ part2remain += num;
+
+//printf("III_dequantize_sample 2 %d %04x\n", num, mpeg3bits_showbits(audio->astream, 16));
+ mpeg3bits_start_reverse(audio->astream);
+ mpeg3bits_getbits_reverse(audio->astream, num);
+ mpeg3bits_start_forward(audio->astream);
+//printf("III_dequantize_sample 3 %d %04x\n", audio->astream->bit_number, mpeg3bits_showbits(audio->astream, 16));
+ num = 0;
+
+ while(xrpnt < &xr[SBLIMIT][0])
+ *xrpnt++ = 0.0;
+
+ while(part2remain > 16)
+ {
+ mpeg3bits_getbits(audio->astream, 16); /* Dismiss stuffing Bits */
+ part2remain -= 16;
+ }
+ if(part2remain > 0)
+ {
+ mpeg3bits_getbits(audio->astream, part2remain);
+ }
+ else
+ if(part2remain < 0)
+ {
+ fprintf(stderr,"mpeg3audio_III_dequantize_sample: Can't rewind stream %d bits!\n", -part2remain);
+ return 1; /* -> error */
+ }
+ return 0;
+}
+
+int mpeg3audio_III_get_side_info(mpeg3audio_t *audio,
+ struct mpeg3_III_sideinfo *si,
+ int channels,
+ int ms_stereo,
+ long sfreq,
+ int single,
+ int lsf)
+{
+ int ch, gr;
+ int powdiff = (single == 3) ? 4 : 0;
+ static const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } };
+ const int *tab = tabs[lsf];
+
+ si->main_data_begin = mpeg3bits_getbits(audio->astream, tab[1]);
+ if(channels == 1)
+ si->private_bits = mpeg3bits_getbits(audio->astream, tab[2]);
+ else
+ si->private_bits = mpeg3bits_getbits(audio->astream, tab[3]);
+ if(!lsf)
+ {
+ for(ch = 0; ch < channels; ch++)
+ {
+ si->ch[ch].gr[0].scfsi = -1;
+ si->ch[ch].gr[1].scfsi = mpeg3bits_getbits(audio->astream, 4);
+ }
+ }
+
+ for(gr = 0; gr < tab[0]; gr++)
+ {
+ for(ch = 0; ch < channels; ch++)
+ {
+ register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
+
+ gr_info->part2_3_length = mpeg3bits_getbits(audio->astream, 12);
+ gr_info->big_values = mpeg3bits_getbits(audio->astream, 9);
+ if(gr_info->big_values > 288)
+ {
+ fprintf(stderr,"mpeg3_III_get_side_info: big_values too large!\n");
+ gr_info->big_values = 288;
+ }
+ gr_info->pow2gain = mpeg3_gainpow2 + 256 - mpeg3bits_getbits(audio->astream, 8) + powdiff;
+ if(ms_stereo)
+ gr_info->pow2gain += 2;
+ gr_info->scalefac_compress = mpeg3bits_getbits(audio->astream, tab[4]);
+
+ if(mpeg3bits_getbits(audio->astream, 1))
+ {
+/* window switch flag */
+ int i;
+ gr_info->block_type = mpeg3bits_getbits(audio->astream, 2);
+ gr_info->mixed_block_flag = mpeg3bits_getbits(audio->astream, 1);
+ gr_info->table_select[0] = mpeg3bits_getbits(audio->astream, 5);
+ gr_info->table_select[1] = mpeg3bits_getbits(audio->astream, 5);
+/*
+ * table_select[2] not needed, because there is no region2,
+ * but to satisfy some verifications tools we set it either.
+ */
+ gr_info->table_select[2] = 0;
+ for(i = 0; i < 3; i++)
+ gr_info->full_gain[i] = gr_info->pow2gain + (mpeg3bits_getbits(audio->astream, 3) << 3);
+
+ if(gr_info->block_type == 0)
+ {
+ fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n");
+ return 1;
+ }
+
+/* region_count/start parameters are implicit in this case. */
+ if(!lsf || gr_info->block_type == 2)
+ gr_info->region1start = 36 >> 1;
+ else
+ {
+/* check this again for 2.5 and sfreq=8 */
+ if(sfreq == 8)
+ gr_info->region1start = 108 >> 1;
+ else
+ gr_info->region1start = 54 >> 1;
+ }
+ gr_info->region2start = 576 >> 1;
+ }
+ else
+ {
+ int i, r0c, r1c;
+ for(i = 0; i < 3; i++)
+ gr_info->table_select[i] = mpeg3bits_getbits(audio->astream, 5);
+
+ r0c = mpeg3bits_getbits(audio->astream, 4);
+ r1c = mpeg3bits_getbits(audio->astream, 3);
+ gr_info->region1start = mpeg3_bandInfo[sfreq].longIdx[r0c + 1] >> 1 ;
+ gr_info->region2start = mpeg3_bandInfo[sfreq].longIdx[r0c + 1 + r1c + 1] >> 1;
+ gr_info->block_type = 0;
+ gr_info->mixed_block_flag = 0;
+ }
+ if(!lsf) gr_info->preflag = mpeg3bits_getbits(audio->astream, 1);
+ gr_info->scalefac_scale = mpeg3bits_getbits(audio->astream, 1);
+ gr_info->count1table_select = mpeg3bits_getbits(audio->astream, 1);
+ }
+ }
+ return 0;
+}
+
+int mpeg3audio_III_hybrid(mpeg3audio_t *audio,
+ mpeg3_real_t fsIn[SBLIMIT][SSLIMIT],
+ mpeg3_real_t tsOut[SSLIMIT][SBLIMIT],
+ int ch,
+ struct gr_info_s *gr_info)
+{
+ mpeg3_real_t *tspnt = (mpeg3_real_t *) tsOut;
+ mpeg3_real_t *rawout1,*rawout2;
+ int bt, sb = 0;
+
+
+ {
+ int b = audio->mp3_blc[ch];
+ rawout1 = audio->mp3_block[b][ch];
+ b = -b + 1;
+ rawout2 = audio->mp3_block[b][ch];
+ audio->mp3_blc[ch] = b;
+ }
+
+ if(gr_info->mixed_block_flag)
+ {
+ sb = 2;
+ mpeg3audio_dct36(fsIn[0], rawout1, rawout2, mpeg3_win[0], tspnt);
+ mpeg3audio_dct36(fsIn[1], rawout1 + 18, rawout2 + 18, mpeg3_win1[0], tspnt + 1);
+ rawout1 += 36;
+ rawout2 += 36;
+ tspnt += 2;
+ }
+
+ bt = gr_info->block_type;
+ if(bt == 2)
+ {
+ for( ; sb < gr_info->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36)
+ {
+ mpeg3audio_dct12(fsIn[sb] ,rawout1 ,rawout2 ,mpeg3_win[2] ,tspnt);
+ mpeg3audio_dct12(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, mpeg3_win1[2], tspnt + 1);
+ }
+ }
+ else
+ {
+ for( ; sb < gr_info->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36)
+ {
+ mpeg3audio_dct36(fsIn[sb], rawout1, rawout2, mpeg3_win[bt], tspnt);
+ mpeg3audio_dct36(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, mpeg3_win1[bt], tspnt + 1);
+ }
+ }
+
+ for( ; sb < SBLIMIT; sb++, tspnt++)
+ {
+ int i;
+ for(i = 0; i < SSLIMIT; i++)
+ {
+ tspnt[i * SBLIMIT] = *rawout1++;
+ *rawout2++ = 0.0;
+ }
+ }
+ return 0;
+}
+
+int mpeg3audio_III_antialias(mpeg3audio_t *audio,
+ mpeg3_real_t xr[SBLIMIT][SSLIMIT],
+ struct gr_info_s *gr_info)
+{
+ int sblim;
+
+ if(gr_info->block_type == 2)
+ {
+ if(!gr_info->mixed_block_flag)
+ return 0;
+ sblim = 1;
+ }
+ else
+ {
+ sblim = gr_info->maxb-1;
+ }
+
+/* 31 alias-reduction operations between each pair of sub-bands */
+/* with 8 butterflies between each pair */
+
+ {
+ int sb;
+ mpeg3_real_t *xr1 = (mpeg3_real_t*)xr[1];
+
+ for(sb = sblim; sb; sb--, xr1 += 10)
+ {
+ int ss;
+ mpeg3_real_t *cs, *ca;
+ mpeg3_real_t *xr2;
+ cs = mpeg3_aa_cs;
+ ca = mpeg3_aa_ca;
+ xr2 = xr1;
+
+ for(ss = 7; ss >= 0; ss--)
+ {
+/* upper and lower butterfly inputs */
+ register mpeg3_real_t bu, bd;
+ bu = *--xr2;
+ bd = *xr1;
+ *xr2 = (bu * (*cs) ) - (bd * (*ca) );
+ *xr1++ = (bd * (*cs++) ) + (bu * (*ca++) );
+ }
+ }
+ }
+ return 0;
+}
+
+/*
+ * III_stereo: calculate mpeg3_real_t channel values for Joint-I-Stereo-mode
+ */
+int mpeg3audio_III_i_stereo(mpeg3audio_t *audio,
+ mpeg3_real_t xr_buf[2][SBLIMIT][SSLIMIT],
+ int *scalefac,
+ struct gr_info_s *gr_info,
+ int sfreq,
+ int ms_stereo,
+ int lsf)
+{
+ mpeg3_real_t (*xr)[SBLIMIT*SSLIMIT] = (mpeg3_real_t (*)[SBLIMIT*SSLIMIT] ) xr_buf;
+ struct mpeg3_bandInfoStruct *bi = &mpeg3_bandInfo[sfreq];
+ const mpeg3_real_t *tab1, *tab2;
+
+ int tab;
+/* TODO: optimize as static */
+ static const mpeg3_real_t *tabs[3][2][2] =
+ {
+ { { mpeg3_tan1_1, mpeg3_tan2_1 } , { mpeg3_tan1_2, mpeg3_tan2_2 } },
+ { { mpeg3_pow1_1[0], mpeg3_pow2_1[0] } , { mpeg3_pow1_2[0], mpeg3_pow2_2[0] } } ,
+ { { mpeg3_pow1_1[1], mpeg3_pow2_1[1] } , { mpeg3_pow1_2[1], mpeg3_pow2_2[1] } }
+ };
+
+ tab = lsf + (gr_info->scalefac_compress & lsf);
+ tab1 = tabs[tab][ms_stereo][0];
+ tab2 = tabs[tab][ms_stereo][1];
+
+ if(gr_info->block_type == 2)
+ {
+ int lwin,do_l = 0;
+ if(gr_info->mixed_block_flag)
+ do_l = 1;
+
+ for(lwin = 0; lwin < 3; lwin++)
+ {
+/* process each window */
+/* get first band with zero values */
+/* sfb is minimal 3 for mixed mode */
+ int is_p, sb, idx, sfb = gr_info->maxband[lwin];
+ if(sfb > 3) do_l = 0;
+
+ for( ; sfb < 12 ; sfb++)
+ {
+/* scale: 0-15 */
+ is_p = scalefac[sfb * 3 + lwin - gr_info->mixed_block_flag];
+ if(is_p != 7)
+ {
+ mpeg3_real_t t1, t2;
+ sb = bi->shortDiff[sfb];
+ idx = bi->shortIdx[sfb] + lwin;
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for( ; sb > 0; sb--, idx += 3)
+ {
+ mpeg3_real_t v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ }
+
+/* in the original: copy 10 to 11 , here: copy 11 to 12
+maybe still wrong??? (copy 12 to 13?) */
+/* scale: 0-15 */
+ is_p = scalefac[11 * 3 + lwin - gr_info->mixed_block_flag];
+ sb = bi->shortDiff[12];
+ idx = bi->shortIdx[12] + lwin;
+ if(is_p != 7)
+ {
+ mpeg3_real_t t1, t2;
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for( ; sb > 0; sb--, idx += 3)
+ {
+ mpeg3_real_t v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ } /* end for(lwin; .. ; . ) */
+
+/* also check l-part, if ALL bands in the three windows are 'empty'
+* and mode = mixed_mode
+*/
+ if(do_l)
+ {
+ int sfb = gr_info->maxbandl;
+ int idx = bi->longIdx[sfb];
+
+ for ( ; sfb < 8; sfb++)
+ {
+ int sb = bi->longDiff[sfb];
+/* scale: 0-15 */
+ int is_p = scalefac[sfb];
+ if(is_p != 7)
+ {
+ mpeg3_real_t t1, t2;
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for( ; sb > 0; sb--, idx++)
+ {
+ mpeg3_real_t v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ else
+ idx += sb;
+ }
+ }
+ }
+ else
+ {
+/* ((gr_info->block_type != 2)) */
+ int sfb = gr_info->maxbandl;
+ int is_p, idx = bi->longIdx[sfb];
+ for( ; sfb < 21; sfb++)
+ {
+ int sb = bi->longDiff[sfb];
+/* scale: 0-15 */
+ is_p = scalefac[sfb];
+ if(is_p != 7)
+ {
+ mpeg3_real_t t1, t2;
+ t1 = tab1[is_p];
+ t2 = tab2[is_p];
+ for( ; sb > 0; sb--, idx++)
+ {
+ mpeg3_real_t v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ else
+ idx += sb;
+ }
+
+ is_p = scalefac[20];
+ if(is_p != 7)
+ {
+/* copy l-band 20 to l-band 21 */
+ int sb;
+ mpeg3_real_t t1 = tab1[is_p], t2 = tab2[is_p];
+
+ for(sb = bi->longDiff[21]; sb > 0; sb--, idx++)
+ {
+ mpeg3_real_t v = xr[0][idx];
+ xr[0][idx] = v * t1;
+ xr[1][idx] = v * t2;
+ }
+ }
+ } /* ... */
+}
+
+/* Read just the frame after a seek. */
+int mpeg3audio_read_layer3_frame(mpeg3audio_t *audio)
+{
+ int result = 0;
+
+ result = mpeg3audio_read_header(audio);
+ if(!result)
+ {
+ audio->bsbufold = audio->bsbuf;
+ audio->bsbuf = audio->bsspace[audio->bsnum] + 512;
+ audio->bsnum ^= 1;
+ result = mpeg3bits_read_buffer(audio->astream, audio->bsbuf, audio->framesize);
+ }
+
+ return result;
+}
+
+int mpeg3audio_dolayer3(mpeg3audio_t *audio)
+{
+ int gr, ch, ss;
+ int scalefacs[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
+ struct mpeg3_III_sideinfo sideinfo;
+ int channels = audio->channels;
+ int single = audio->single;
+ int ms_stereo, i_stereo;
+ int sfreq = audio->sampling_frequency_code;
+ int stereo1, granules;
+ int i;
+
+/* flip/init buffer */
+ audio->bsbufold = audio->bsbuf;
+ audio->bsbuf = audio->bsspace[audio->bsnum] + 512;
+ audio->bsnum ^= 1;
+
+/* read main data into memory */
+ if(mpeg3bits_read_buffer(audio->astream, audio->bsbuf, audio->framesize))
+ return 1;
+ mpeg3bits_use_ptr(audio->astream, audio->bsbuf);
+
+/* CRC must be skipped here for proper alignment with the backstep */
+ if(audio->error_protection)
+ mpeg3bits_getbits(audio->astream, 16);
+
+ if(channels == 1)
+ {
+/* stream is mono */
+ stereo1 = 1;
+ single = 0;
+ }
+ else
+ {
+/* Stereo */
+ stereo1 = 2;
+ }
+
+ if(audio->mode == MPG_MD_JOINT_STEREO)
+ {
+ ms_stereo = (audio->mode_ext & 0x2) >> 1;
+ i_stereo = audio->mode_ext & 0x1;
+ }
+ else
+ ms_stereo = i_stereo = 0;
+
+ if(audio->lsf)
+ {
+ granules = 1;
+ }
+ else
+ {
+ granules = 2;
+ }
+
+ if(mpeg3audio_III_get_side_info(audio, &sideinfo, channels, ms_stereo, sfreq, single, audio->lsf))
+ return 1;
+
+/* Step back */
+ if(sideinfo.main_data_begin >= 512)
+ return 1;
+
+ if(sideinfo.main_data_begin)
+ {
+ memcpy(audio->bsbuf + audio->ssize - sideinfo.main_data_begin,
+ audio->bsbufold + audio->prev_framesize - sideinfo.main_data_begin,
+ sideinfo.main_data_begin);
+ mpeg3bits_use_ptr(audio->astream, audio->bsbuf + audio->ssize - sideinfo.main_data_begin);
+ }
+
+ for(gr = 0; gr < granules; gr++)
+ {
+ mpeg3_real_t hybridIn [2][SBLIMIT][SSLIMIT];
+ mpeg3_real_t hybridOut[2][SSLIMIT][SBLIMIT];
+
+ {
+ struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
+ long part2bits;
+ if(audio->lsf)
+ part2bits = mpeg3audio_III_get_scale_factors_2(audio, scalefacs[0], gr_info, 0);
+ else
+ part2bits = mpeg3audio_III_get_scale_factors_1(audio, scalefacs[0], gr_info, 0, gr);
+//printf("dolayer3 4 %04x\n", mpeg3bits_showbits(audio->astream, 16));
+
+ if(mpeg3audio_III_dequantize_sample(audio, hybridIn[0], scalefacs[0], gr_info, sfreq, part2bits))
+ {
+ mpeg3bits_use_demuxer(audio->astream);
+ return 1;
+ }
+//printf("dolayer3 5 %04x\n", mpeg3bits_showbits(audio->astream, 16));
+ }
+
+ if(channels == 2)
+ {
+ struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
+ long part2bits;
+ if(audio->lsf)
+ part2bits = mpeg3audio_III_get_scale_factors_2(audio, scalefacs[1], gr_info, i_stereo);
+ else
+ part2bits = mpeg3audio_III_get_scale_factors_1(audio, scalefacs[1], gr_info, 1, gr);
+
+ if(mpeg3audio_III_dequantize_sample(audio, hybridIn[1], scalefacs[1], gr_info, sfreq, part2bits))
+ {
+ mpeg3bits_use_demuxer(audio->astream);
+ return 1;
+ }
+
+ if(ms_stereo)
+ {
+ int i;
+ int maxb = sideinfo.ch[0].gr[gr].maxb;
+ if(sideinfo.ch[1].gr[gr].maxb > maxb)
+ maxb = sideinfo.ch[1].gr[gr].maxb;
+ for(i = 0; i < SSLIMIT * maxb; i++)
+ {
+ mpeg3_real_t tmp0 = ((mpeg3_real_t*)hybridIn[0])[i];
+ mpeg3_real_t tmp1 = ((mpeg3_real_t*)hybridIn[1])[i];
+ ((mpeg3_real_t*)hybridIn[0])[i] = tmp0 + tmp1;
+ ((mpeg3_real_t*)hybridIn[1])[i] = tmp0 - tmp1;
+ }
+ }
+
+ if(i_stereo)
+ mpeg3audio_III_i_stereo(audio, hybridIn, scalefacs[1], gr_info, sfreq, ms_stereo, audio->lsf);
+
+ if(ms_stereo || i_stereo || (single == 3))
+ {
+ if(gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
+ sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
+ else
+ gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
+ }
+
+ switch(single)
+ {
+ case 3:
+ {
+ register int i;
+ register mpeg3_real_t *in0 = (mpeg3_real_t*)hybridIn[0], *in1 = (mpeg3_real_t*)hybridIn[1];
+/* *0.5 done by pow-scale */
+ for(i = 0; i < SSLIMIT * gr_info->maxb; i++, in0++)
+ *in0 = (*in0 + *in1++);
+ }
+ break;
+ case 1:
+ {
+ register int i;
+ register mpeg3_real_t *in0 = (mpeg3_real_t*)hybridIn[0], *in1 = (mpeg3_real_t*)hybridIn[1];
+ for(i = 0; i < SSLIMIT * gr_info->maxb; i++)
+ *in0++ = *in1++;
+ }
+ break;
+ }
+ }
+
+ for(ch = 0; ch < stereo1; ch++)
+ {
+ struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
+ mpeg3audio_III_antialias(audio, hybridIn[ch], gr_info);
+ mpeg3audio_III_hybrid(audio, hybridIn[ch], hybridOut[ch], ch, gr_info);
+ }
+
+ for(ss = 0; ss < SSLIMIT; ss++)
+ {
+ if(single >= 0)
+ {
+ mpeg3audio_synth_mono(audio, hybridOut[0][ss], audio->pcm_sample, &(audio->pcm_point));
+ }
+ else
+ {
+ int p1 = audio->pcm_point;
+ mpeg3audio_synth_stereo(audio, hybridOut[0][ss], 0, audio->pcm_sample, &p1);
+ mpeg3audio_synth_stereo(audio, hybridOut[1][ss], 1, audio->pcm_sample, &(audio->pcm_point));
+ }
+
+ if(audio->pcm_point / audio->channels >= audio->pcm_allocated - MPEG3AUDIO_PADDING * audio->channels)
+ {
+/* Need more room */
+ mpeg3audio_replace_buffer(audio, audio->pcm_allocated + MPEG3AUDIO_PADDING * audio->channels);
+ }
+ }
+ }
+
+ mpeg3bits_use_demuxer(audio->astream);
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/mantissa.c b/core/multimedia/opieplayer/libmpeg3/audio/mantissa.c
new file mode 100644
index 0000000..05fe251
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/mantissa.c
@@ -0,0 +1,387 @@
+/*
+ *
+ * mantissa.c Copyright (C) Aaron Holtzman - May 1999
+ *
+ *
+ * This file is part of libmpeg3
+ *
+ * libmpeg3 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * libmpeg3 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+
+
+/* Lookup tables of 0.16 two's complement quantization values */
+static short mpeg3_q_1[3] =
+{
+ (-2 << 15) / 3,
+ 0,
+ (2 << 15) / 3
+};
+
+static short mpeg3_q_2[5] =
+{
+ (-4 << 15) / 5,
+ ((-2 << 15) / 5) << 1,
+ 0,
+ (2 << 15) / 5,
+ ((4 << 15) / 5) << 1
+};
+
+static short mpeg3_q_3[7] =
+{
+ (-6 << 15) / 7,
+ (-4 << 15) / 7,
+ (-2 << 15) / 7,
+ 0,
+ (2 << 15) / 7,
+ (4 << 15) / 7,
+ (6 << 15) / 7
+};
+
+static short mpeg3_q_4[11] =
+{
+ (-10 << 15) / 11,
+ (-8 << 15) / 11,
+ (-6 << 15) / 11,
+ (-4 << 15) / 11,
+ (-2 << 15) / 11,
+ 0,
+ ( 2 << 15) / 11,
+ ( 4 << 15) / 11,
+ ( 6 << 15) / 11,
+ ( 8 << 15) / 11,
+ (10 << 15) / 11
+};
+
+static short mpeg3_q_5[15] =
+{
+ (-14 << 15) / 15,
+ (-12 << 15) / 15,
+ (-10 << 15) / 15,
+ (-8 << 15) / 15,
+ (-6 << 15) / 15,
+ (-4 << 15) / 15,
+ (-2 << 15) / 15,
+ 0,
+ ( 2 << 15) / 15,
+ ( 4 << 15) / 15,
+ ( 6 << 15) / 15,
+ ( 8 << 15) / 15,
+ (10 << 15) / 15,
+ (12 << 15) / 15,
+ (14 << 15) / 15
+};
+
+static short mpeg3_qnttztab[16] = {0, 0, 0, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16};
+
+
+/* */
+/* Scale factors for tofloat */
+/* */
+
+static const unsigned MPEG3_INT32 mpeg3_scale_factors[25] =
+{
+ 0x38000000, /*2 ^ -(0 + 15) */
+ 0x37800000, /*2 ^ -(1 + 15) */
+ 0x37000000, /*2 ^ -(2 + 15) */
+ 0x36800000, /*2 ^ -(3 + 15) */
+ 0x36000000, /*2 ^ -(4 + 15) */
+ 0x35800000, /*2 ^ -(5 + 15) */
+ 0x35000000, /*2 ^ -(6 + 15) */
+ 0x34800000, /*2 ^ -(7 + 15) */
+ 0x34000000, /*2 ^ -(8 + 15) */
+ 0x33800000, /*2 ^ -(9 + 15) */
+ 0x33000000, /*2 ^ -(10 + 15) */
+ 0x32800000, /*2 ^ -(11 + 15) */
+ 0x32000000, /*2 ^ -(12 + 15) */
+ 0x31800000, /*2 ^ -(13 + 15) */
+ 0x31000000, /*2 ^ -(14 + 15) */
+ 0x30800000, /*2 ^ -(15 + 15) */
+ 0x30000000, /*2 ^ -(16 + 15) */
+ 0x2f800000, /*2 ^ -(17 + 15) */
+ 0x2f000000, /*2 ^ -(18 + 15) */
+ 0x2e800000, /*2 ^ -(19 + 15) */
+ 0x2e000000, /*2 ^ -(20 + 15) */
+ 0x2d800000, /*2 ^ -(21 + 15) */
+ 0x2d000000, /*2 ^ -(22 + 15) */
+ 0x2c800000, /*2 ^ -(23 + 15) */
+ 0x2c000000 /*2 ^ -(24 + 15) */
+};
+
+static MPEG3_FLOAT32 *mpeg3_scale_factor = (MPEG3_FLOAT32*)mpeg3_scale_factors;
+
+static inline mpeg3_real_t mpeg3audio_ac3_tofloat(unsigned short exponent, int mantissa)
+{
+ mpeg3_real_t x;
+ x = mantissa * mpeg3_scale_factor[exponent];
+ return x;
+}
+
+static inline void mpeg3audio_ac3_mantissa_reset(mpeg3_ac3_mantissa_t *mantissa)
+{
+ mantissa->m_1[2] = mantissa->m_1[1] = mantissa->m_1[0] = 0;
+ mantissa->m_2[2] = mantissa->m_2[1] = mantissa->m_2[0] = 0;
+ mantissa->m_4[1] = mantissa->m_4[0] = 0;
+/* Force new groups to be loaded */
+ mantissa->m_1_pointer = mantissa->m_2_pointer = mantissa->m_4_pointer = 3;
+}
+
+/*
+ * Generate eight bits of pseudo-entropy using a 16 bit linear
+ * feedback shift register (LFSR). The primitive polynomial used
+ * is 1 + x^4 + x^14 + x^16.
+ *
+ * The distribution is uniform, over the range [-0.707,0.707]
+ *
+ */
+inline unsigned int mpeg3audio_ac3_dither_gen(mpeg3audio_t *audio)
+{
+ int i;
+ unsigned int state;
+
+/* explicitly bring the state into a local var as gcc > 3.0? */
+/* doesn't know how to optimize out the stores */
+ state = audio->ac3_lfsr_state;
+
+/* Generate eight pseudo random bits */
+ for(i = 0; i < 8; i++)
+ {
+ state <<= 1;
+
+ if(state & 0x10000)
+ state ^= 0xa011;
+ }
+
+ audio->ac3_lfsr_state = state;
+ return (((((int)state << 8) >> 8) * (int)(0.707106f * 256.0f)) >> 16);
+}
+
+
+/* Fetch an unpacked, left justified, and properly biased/dithered mantissa value */
+static inline unsigned short mpeg3audio_ac3_mantissa_get(mpeg3audio_t *audio,
+ unsigned short bap,
+ unsigned short dithflag)
+{
+ unsigned short mantissa;
+ unsigned int group_code;
+ mpeg3_ac3_mantissa_t *mantissa_struct = &(audio->ac3_mantissa);
+
+/* If the bap is 0-5 then we have special cases to take care of */
+ switch(bap)
+ {
+ case 0:
+ if(dithflag)
+ mantissa = mpeg3audio_ac3_dither_gen(audio);
+ else
+ mantissa = 0;
+ break;
+
+ case 1:
+ if(mantissa_struct->m_1_pointer > 2)
+ {
+ group_code = mpeg3bits_getbits(audio->astream, 5);
+
+ if(group_code > 26)
+ {
+/* FIXME do proper block error handling */
+ fprintf(stderr, "mpeg3audio_ac3_mantissa_get: Invalid mantissa 1 %d\n", group_code);
+ return 0;
+ }
+
+ mantissa_struct->m_1[0] = group_code / 9;
+ mantissa_struct->m_1[1] = (group_code % 9) / 3;
+ mantissa_struct->m_1[2] = (group_code % 9) % 3;
+ mantissa_struct->m_1_pointer = 0;
+ }
+ mantissa = mantissa_struct->m_1[mantissa_struct->m_1_pointer++];
+ mantissa = mpeg3_q_1[mantissa];
+ break;
+
+ case 2:
+ if(mantissa_struct->m_2_pointer > 2)
+ {
+ group_code = mpeg3bits_getbits(audio->astream, 7);
+
+ if(group_code > 124)
+ {
+ fprintf(stderr, "mpeg3audio_ac3_mantissa_get: Invalid mantissa 2 %d\n", group_code);
+ return 0;
+ }
+
+ mantissa_struct->m_2[0] = group_code / 25;
+ mantissa_struct->m_2[1] = (group_code % 25) / 5;
+ mantissa_struct->m_2[2] = (group_code % 25) % 5;
+ mantissa_struct->m_2_pointer = 0;
+ }
+ mantissa = mantissa_struct->m_2[mantissa_struct->m_2_pointer++];
+ mantissa = mpeg3_q_2[mantissa];
+ break;
+
+ case 3:
+ mantissa = mpeg3bits_getbits(audio->astream, 3);
+
+ if(mantissa > 6)
+ {
+ fprintf(stderr, "mpeg3audio_ac3_mantissa_get: Invalid mantissa 3 %d\n", mantissa);
+ return 0;
+ }
+
+ mantissa = mpeg3_q_3[mantissa];
+ break;
+
+ case 4:
+ if(mantissa_struct->m_4_pointer > 1)
+ {
+ group_code = mpeg3bits_getbits(audio->astream, 7);
+
+ if(group_code > 120)
+ {
+ fprintf(stderr, "mpeg3audio_ac3_mantissa_get: Invalid mantissa 4 %d\n", group_code);
+ return 0;
+ }
+
+ mantissa_struct->m_4[0] = group_code / 11;
+ mantissa_struct->m_4[1] = group_code % 11;
+ mantissa_struct->m_4_pointer = 0;
+ }
+ mantissa = mantissa_struct->m_4[mantissa_struct->m_4_pointer++];
+ mantissa = mpeg3_q_4[mantissa];
+ break;
+
+ case 5:
+ mantissa = mpeg3bits_getbits(audio->astream, 4);
+
+ if(mantissa > 14)
+ {
+/* FIXME do proper block error handling */
+ fprintf(stderr, "mpeg3audio_ac3_mantissa_get: Invalid mantissa 5 %d\n", mantissa);
+ return 0;
+ }
+
+ mantissa = mpeg3_q_5[mantissa];
+ break;
+
+ default:
+ mantissa = mpeg3bits_getbits(audio->astream, mpeg3_qnttztab[bap]);
+ mantissa <<= 16 - mpeg3_qnttztab[bap];
+ }
+ return mantissa;
+}
+
+void mpeg3audio_ac3_uncouple_channel(mpeg3audio_t *audio,
+ mpeg3_real_t samples[],
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk,
+ unsigned int ch)
+{
+ unsigned int bnd = 0;
+ unsigned int sub_bnd = 0;
+ unsigned int i, j;
+ MPEG3_FLOAT32 cpl_coord = 1.0;
+ unsigned int cpl_exp_tmp;
+ unsigned int cpl_mant_tmp;
+ short mantissa;
+
+ for(i = audblk->cplstrtmant; i < audblk->cplendmant; )
+ {
+ if(!audblk->cplbndstrc[sub_bnd++])
+ {
+ cpl_exp_tmp = audblk->cplcoexp[ch][bnd] + 3 * audblk->mstrcplco[ch];
+ if(audblk->cplcoexp[ch][bnd] == 15)
+ cpl_mant_tmp = (audblk->cplcomant[ch][bnd]) << 11;
+ else
+ cpl_mant_tmp = ((0x10) | audblk->cplcomant[ch][bnd]) << 10;
+
+ cpl_coord = mpeg3audio_ac3_tofloat(cpl_exp_tmp, cpl_mant_tmp) * 8.0f;
+
+/*Invert the phase for the right channel if necessary */
+ if(bsi->acmod == 0x2 && audblk->phsflginu && ch == 1 && audblk->phsflg[bnd])
+ cpl_coord *= -1;
+
+ bnd++;
+ }
+
+ for(j = 0; j < 12; j++)
+ {
+/* Get new dither values for each channel if necessary, so */
+/* the channels are uncorrelated */
+ if(audblk->dithflag[ch] && audblk->cpl_bap[i] == 0)
+ mantissa = mpeg3audio_ac3_dither_gen(audio);
+ else
+ mantissa = audblk->cplmant[i];
+
+ samples[i] = cpl_coord * mpeg3audio_ac3_tofloat(audblk->cpl_exp[i], mantissa);;
+
+ i++;
+ }
+ }
+ return;
+}
+
+int mpeg3audio_ac3_coeff_unpack(mpeg3audio_t *audio,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk,
+ mpeg3ac3_stream_samples_t samples)
+{
+ int i, j;
+ int done_cpl = 0;
+ short mantissa;
+
+ mpeg3audio_ac3_mantissa_reset(&(audio->ac3_mantissa));
+
+ for(i = 0; i < bsi->nfchans && !mpeg3bits_error(audio->astream); i++)
+ {
+ for(j = 0; j < audblk->endmant[i] && !mpeg3bits_error(audio->astream); j++)
+ {
+ mantissa = mpeg3audio_ac3_mantissa_get(audio, audblk->fbw_bap[i][j], audblk->dithflag[i]);
+ samples[i][j] = mpeg3audio_ac3_tofloat(audblk->fbw_exp[i][j], mantissa);
+ }
+
+ if(audblk->cplinu && audblk->chincpl[i] && !(done_cpl) && !mpeg3bits_error(audio->astream))
+ {
+/* ncplmant is equal to 12 * ncplsubnd */
+/* Don't dither coupling channel until channel separation so that
+ * interchannel noise is uncorrelated */
+ for(j = audblk->cplstrtmant;
+ j < audblk->cplendmant && !mpeg3bits_error(audio->astream);
+ j++)
+ {
+ audblk->cplmant[j] = mpeg3audio_ac3_mantissa_get(audio, audblk->cpl_bap[j], 0);
+ }
+ done_cpl = 1;
+ }
+ }
+
+/* Uncouple the channel */
+ if(audblk->cplinu)
+ {
+ if(audblk->chincpl[i])
+ mpeg3audio_ac3_uncouple_channel(audio, samples[i], bsi, audblk, i);
+ }
+
+ if(bsi->lfeon && !mpeg3bits_error(audio->astream))
+ {
+/* There are always 7 mantissas for lfe, no dither for lfe */
+ for(j = 0; j < 7 && !mpeg3bits_error(audio->astream); j++)
+ mantissa = mpeg3audio_ac3_mantissa_get(audio, audblk->lfe_bap[j], 0);
+ samples[5][j] = mpeg3audio_ac3_tofloat(audblk->lfe_exp[j], mantissa);
+ }
+
+ return mpeg3bits_error(audio->astream);
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.c b/core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.c
new file mode 100644
index 0000000..e2d3912
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.c
@@ -0,0 +1,536 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3audio.h"
+#include "tables.h"
+
+#include <math.h>
+#include <stdlib.h>
+
+mpeg3audio_t* mpeg3audio_allocate_struct(mpeg3_t *file, mpeg3_atrack_t *track)
+{
+ mpeg3audio_t *audio = (mpeg3audio_t*)calloc(1, sizeof(mpeg3audio_t));
+ audio->file = file;
+ audio->track = track;
+ audio->astream = mpeg3bits_new_stream(file, track->demuxer);
+ audio->outscale = 1;
+ audio->bsbuf = audio->bsspace[1];
+ audio->init = 1;
+ audio->bo = 1;
+ audio->channels = 1;
+ return audio;
+}
+
+
+int mpeg3audio_delete_struct(mpeg3audio_t *audio)
+{
+ mpeg3bits_delete_stream(audio->astream);
+ if(audio->pcm_sample) free(audio->pcm_sample);
+ free(audio);
+ return 0;
+}
+
+int mpeg3audio_replace_buffer(mpeg3audio_t *audio, long new_allocation)
+{
+ long i;
+
+ audio->pcm_sample = (mpeg3_real_t*)realloc( audio->pcm_sample, sizeof(mpeg3_real_t) * new_allocation * audio->channels );
+ audio->pcm_allocated = new_allocation;
+/*
+ // Isn't this exactly the same as what the ANSI C function call realloc does,
+ // or did I miss C Programming 101 ?
+
+ if(!audio->pcm_sample)
+ {
+ audio->pcm_sample = (mpeg3_real_t*)malloc(sizeof(mpeg3_real_t) * new_allocation * audio->channels);
+ audio->pcm_allocated = new_allocation;
+ }
+ else
+ {
+ mpeg3_real_t *new_samples = (mpeg3_real_t*)malloc(sizeof(mpeg3_real_t) * new_allocation * audio->channels);
+ for(i = 0; i < audio->pcm_allocated * audio->channels; i++)
+ {
+ new_samples[i] = audio->pcm_sample[i];
+ }
+ free(audio->pcm_sample);
+ audio->pcm_sample = new_samples;
+ audio->pcm_allocated = new_allocation;
+ }
+*/
+ return 0;
+}
+
+int mpeg3audio_read_frame(mpeg3audio_t *audio)
+{
+ int result = 0;
+ result = mpeg3audio_read_header(audio);
+
+ if(!result)
+ {
+ switch(audio->format)
+ {
+ case AUDIO_AC3:
+ result = mpeg3audio_do_ac3(audio);
+ break;
+
+ case AUDIO_MPEG:
+ switch(audio->layer)
+ {
+ case 1:
+ break;
+
+ case 2:
+ result = mpeg3audio_dolayer2(audio);
+ break;
+
+ case 3:
+ result = mpeg3audio_dolayer3(audio);
+ break;
+
+ default:
+ result = 1;
+ break;
+ }
+ break;
+
+ case AUDIO_PCM:
+ result = mpeg3audio_do_pcm(audio);
+ break;
+ }
+ }
+
+ if(!result)
+ {
+/* Byte align the stream */
+ mpeg3bits_byte_align(audio->astream);
+ }
+ return result;
+}
+
+/* Get the length but also initialize the frame sizes. */
+int mpeg3audio_get_length(mpeg3audio_t *audio, mpeg3_atrack_t *track)
+{
+ long result = 0;
+ long framesize1 = 0, total1 = 0;
+ long framesize2 = 0, total2 = 0;
+ long total_framesize = 0, total_frames = 0;
+ long byte_limit = 131072; /* Total bytes to gather information from */
+ long total_bytes = 0;
+ long major_framesize; /* Bigger framesize + header */
+ long minor_framesize; /* Smaller framesize + header */
+ long major_total;
+ long minor_total;
+ mpeg3_t *file = audio->file;
+
+/* Get the frame sizes */
+ mpeg3bits_seek_start(audio->astream);
+ audio->pcm_point = 0;
+ result = mpeg3audio_read_frame(audio); /* Stores the framesize */
+ audio->samples_per_frame = audio->pcm_point / audio->channels;
+
+ switch(audio->format)
+ {
+ case AUDIO_AC3:
+ audio->avg_framesize = audio->framesize;
+ break;
+
+ case AUDIO_MPEG:
+ framesize1 = audio->framesize;
+ total_bytes += audio->framesize;
+ total1 = 1;
+
+ while(!result && total_bytes < byte_limit)
+ {
+ audio->pcm_point = 0;
+ result = mpeg3audio_read_frame(audio);
+ total_bytes += audio->framesize;
+ if(audio->framesize != framesize1)
+ {
+ framesize2 = audio->framesize;
+ total2 = 1;
+ break;
+ }
+ else
+ {
+ total1++;
+ }
+ }
+
+ while(!result && total_bytes < byte_limit)
+ {
+ audio->pcm_point = 0;
+ result = mpeg3audio_read_frame(audio);
+ total_bytes += audio->framesize;
+ if(audio->framesize != framesize2)
+ {
+ break;
+ }
+ else
+ {
+ total2++;
+ }
+ }
+
+ audio->pcm_point = 0;
+ result = mpeg3audio_read_frame(audio);
+ if(audio->framesize != framesize1 && audio->framesize != framesize2)
+ {
+/* Variable bit rate. Get the average frame size. */
+ while(!result && total_bytes < byte_limit)
+ {
+ audio->pcm_point = 0;
+ result = mpeg3audio_read_frame(audio);
+ total_bytes += audio->framesize;
+ if(!result)
+ {
+ total_framesize += audio->framesize;
+ total_frames++;
+ }
+ }
+ audio->avg_framesize = 4 + (total_framesize + framesize1 + framesize2) / (total_frames + total1 + total2);
+ }
+ else
+ {
+ major_framesize = framesize2 > framesize1 ? framesize2 : framesize1;
+ major_total = framesize2 > framesize1 ? total2 : total1;
+ minor_framesize = framesize2 > framesize1 ? framesize1 : framesize2;
+ minor_total = framesize2 > framesize1 ? total1 : total2;
+/* Add the headers to the framesizes */
+ audio->avg_framesize = 4 + (major_framesize * major_total + minor_framesize * minor_total) / (major_total + minor_total);
+ }
+ break;
+
+ case AUDIO_PCM:
+ break;
+ }
+
+/* Estimate the total samples */
+ if(file->is_audio_stream)
+ {
+/* From the raw file */
+ result = (long)((float)mpeg3demuxer_total_bytes(audio->astream->demuxer) / audio->avg_framesize * audio->samples_per_frame);
+ }
+ else
+ {
+/* Gross approximation from a multiplexed file. */
+ result = (long)(mpeg3demux_length(audio->astream->demuxer) * track->sample_rate);
+/* result = (long)((mpeg3_real_t)mpeg3_video_frames(file, 0) / mpeg3_frame_rate(file, 0) * track->sample_rate); */
+/* We would scan the multiplexed packets here for the right timecode if only */
+/* they had meaningful timecode. */
+ }
+
+ audio->pcm_point = 0;
+ mpeg3bits_seek_start(audio->astream);
+ mpeg3audio_reset_synths(audio);
+ return result;
+}
+
+int mpeg3audio_seek(mpeg3audio_t *audio, long position)
+{
+ int result = 0;
+ mpeg3_t *file = audio->file;
+ mpeg3_atrack_t *track = audio->track;
+ long frame_number;
+ long byte_position;
+ double time_position;
+
+/* Sample seek wasn't requested */
+ if(audio->sample_seek < 0)
+ {
+ audio->pcm_position = position;
+ audio->pcm_size = 0;
+ return 0;
+ }
+
+/* Can't slide buffer. Seek instead. */
+ if(!file->is_audio_stream)
+ {
+/* Seek in a multiplexed stream using the multiplexer. */
+ time_position = (double)position / track->sample_rate;
+ result |= mpeg3bits_seek_time(audio->astream, time_position);
+ audio->pcm_position = (long)mpeg3bits_packet_time(audio->astream) * track->sample_rate;
+/*printf("wanted %f got %f\n", time_position, mpeg3bits_packet_time(audio->astream)); */
+ }
+ else
+ {
+/* Seek in an elemental stream. This algorithm achieves sample accuracy on fixed bitrates. */
+/* Forget about variable bitrates or program streams. */
+ frame_number = position / audio->samples_per_frame;
+ byte_position = (long)(audio->avg_framesize * frame_number);
+ audio->pcm_position = frame_number * audio->samples_per_frame;
+
+ if(byte_position < audio->avg_framesize * 2)
+ {
+ result |= mpeg3bits_seek_start(audio->astream);
+ audio->pcm_position = 0;
+ }
+ else
+ {
+ result |= mpeg3bits_seek_byte(audio->astream, byte_position);
+ }
+ }
+
+/* Arm the backstep buffer for layer 3 if not at the beginning already. */
+ if(byte_position >= audio->avg_framesize * 2 && audio->layer == 3 && !result)
+ {
+ result |= mpeg3audio_prev_header(audio);
+ result |= mpeg3audio_read_layer3_frame(audio);
+ }
+
+/* Reset the tables. */
+ mpeg3audio_reset_synths(audio);
+ audio->pcm_size = 0;
+ audio->pcm_point = 0;
+ return result;
+}
+
+/* ================================================================ */
+/* ENTRY POINTS */
+/* ================================================================ */
+
+
+
+
+mpeg3audio_t* mpeg3audio_new(mpeg3_t *file, mpeg3_atrack_t *track, int format)
+{
+ mpeg3audio_t *audio = mpeg3audio_allocate_struct(file, track);
+ int result = 0;
+
+/* Init tables */
+ mpeg3audio_new_decode_tables(audio);
+ audio->percentage_seek = -1;
+ audio->sample_seek = -1;
+ audio->format = format;
+
+/* Determine the format of the stream */
+ if(format == AUDIO_UNKNOWN)
+ {
+ if(((mpeg3bits_showbits(audio->astream, 32) & 0xffff0000) >> 16) == MPEG3_AC3_START_CODE)
+ audio->format = AUDIO_AC3;
+ else
+ audio->format = AUDIO_MPEG;
+ }
+
+/* get channel count */
+ result = mpeg3audio_read_header(audio);
+
+/* Set up the sample buffer */
+ mpeg3audio_replace_buffer(audio, 262144);
+
+/* Copy information to the mpeg struct */
+ if(!result)
+ {
+ track->channels = audio->channels;
+
+ switch(audio->format)
+ {
+ case AUDIO_AC3:
+ track->sample_rate = mpeg3_ac3_samplerates[audio->sampling_frequency_code];
+ break;
+
+ case AUDIO_MPEG:
+ track->sample_rate = mpeg3_freqs[audio->sampling_frequency_code];
+ break;
+
+ case AUDIO_PCM:
+ track->sample_rate = 48000;
+ break;
+ }
+
+ track->total_samples = mpeg3audio_get_length(audio, track);
+ result |= mpeg3bits_seek_start(audio->astream);
+ }
+ else
+ {
+ mpeg3audio_delete_struct(audio);
+ audio = 0;
+ }
+
+ return audio;
+}
+
+int mpeg3audio_delete(mpeg3audio_t *audio)
+{
+ mpeg3audio_delete_struct(audio);
+ return 0;
+}
+
+int mpeg3audio_seek_percentage(mpeg3audio_t *audio, double percentage)
+{
+ audio->percentage_seek = percentage;
+ return 0;
+}
+
+int mpeg3audio_seek_sample(mpeg3audio_t *audio, long sample)
+{
+ audio->sample_seek = sample;
+ return 0;
+}
+
+/* Read raw frames for concatenation purposes */
+int mpeg3audio_read_raw(mpeg3audio_t *audio, unsigned char *output, long *size, long max_size)
+{
+ int result = 0;
+ int i;
+ *size = 0;
+
+ switch(audio->format)
+ {
+ case AUDIO_AC3:
+/* Just write the AC3 stream */
+ if(mpeg3bits_read_buffer(audio->astream, output, audio->framesize))
+ return 1;
+ *size = audio->framesize;
+ break;
+
+ case AUDIO_MPEG:
+/* Fix the mpeg stream */
+ result = mpeg3audio_read_header(audio);
+ if(!result)
+ {
+ if(max_size < 4) return 1;
+ *output++ = (audio->newhead & 0xff000000) >> 24;
+ *output++ = (audio->newhead & 0xff0000) >> 16;
+ *output++ = (audio->newhead & 0xff00) >> 8;
+ *output++ = (audio->newhead & 0xff);
+ *size += 4;
+
+ if(max_size < 4 + audio->framesize) return 1;
+ if(mpeg3bits_read_buffer(audio->astream, output, audio->framesize))
+ return 1;
+
+ *size += audio->framesize;
+ }
+ break;
+
+ case AUDIO_PCM:
+ if(mpeg3bits_read_buffer(audio->astream, output, audio->framesize))
+ return 1;
+ *size = audio->framesize;
+ break;
+ }
+ return result;
+}
+
+/* Channel is 0 to channels - 1 */
+int mpeg3audio_decode_audio(mpeg3audio_t *audio,
+ mpeg3_real_t *output_f,
+ short *output_i, int sampleSpacing,
+ int channel,
+ long start_position,
+ long len)
+{
+ long allocation_needed = len + MPEG3AUDIO_PADDING;
+ long i, j, result = 0;
+ mpeg3_t *file = audio->file;
+ mpeg3_atrack_t *atrack = audio->track;
+ long attempts;
+
+/* Create new buffer */
+ if(audio->pcm_allocated < allocation_needed)
+ {
+ mpeg3audio_replace_buffer(audio, allocation_needed);
+ }
+
+/* There was a percentage seek */
+ if(audio->percentage_seek >= 0)
+ {
+ mpeg3bits_seek_percentage(audio->astream, audio->percentage_seek);
+/* Force the pcm buffer to be reread. */
+ audio->pcm_position = start_position;
+ audio->pcm_size = 0;
+ audio->percentage_seek = -1;
+ }
+ else
+ {
+/* Entire output is in buffer so don't do anything. */
+ if(start_position >= audio->pcm_position && start_position < audio->pcm_position + audio->pcm_size &&
+ start_position + len <= audio->pcm_size)
+ {
+ ;
+ }
+ else
+/* Output starts in buffer but ends later so slide it back. */
+ if(start_position <= audio->pcm_position + audio->pcm_size &&
+ start_position >= audio->pcm_position)
+ {
+ for(i = 0, j = (start_position - audio->pcm_position) * audio->channels;
+ j < audio->pcm_size * audio->channels;
+ i++, j++)
+ {
+ audio->pcm_sample[i] = audio->pcm_sample[j];
+ }
+
+ audio->pcm_point = i;
+ audio->pcm_size -= start_position - audio->pcm_position;
+ audio->pcm_position = start_position;
+ }
+ else
+ {
+/* Output is outside buffer completely. */
+ result = mpeg3audio_seek(audio, start_position);
+ audio->sample_seek = -1;
+/* Check sanity */
+ if(start_position < audio->pcm_position) audio->pcm_position = start_position;
+ }
+ audio->sample_seek = -1;
+ }
+
+/* Read packets until the buffer is full. */
+ if(!result)
+ {
+ attempts = 0;
+ result = 1;
+ while(attempts < 6 &&
+ !mpeg3bits_eof(audio->astream) &&
+ audio->pcm_size + audio->pcm_position < start_position + len)
+ {
+ result = mpeg3audio_read_frame(audio);
+ if(result) attempts++;
+ audio->pcm_size = audio->pcm_point / audio->channels;
+ }
+ }
+
+
+
+/* Copy the buffer to the output */
+ if(output_f)
+ {
+ for(i = 0, j = (start_position - audio->pcm_position) * audio->channels + channel;
+ i < len && j < audio->pcm_size * audio->channels;
+ i++, j += audio->channels)
+ {
+ output_f[i] = audio->pcm_sample[j];
+ }
+ for( ; i < len; i++)
+ {
+ output_f[i] = 0;
+ }
+ }
+ else
+ if(output_i)
+ {
+ int sample;
+ for(i = 0, j = (start_position - audio->pcm_position) * audio->channels + channel;
+ i < (len*(sampleSpacing+1)) && j < audio->pcm_size * audio->channels;
+ i++, j += audio->channels)
+ {
+ sample = (int)(audio->pcm_sample[j] * 32767);
+ if(sample > 32767) sample = 32767;
+ else
+ if(sample < -32768) sample = -32768;
+
+ output_i[i] = sample;
+ i += sampleSpacing;
+ }
+ for( ; i < (len*(sampleSpacing+1)); i++)
+ {
+ output_i[i] = 0;
+ i += sampleSpacing;
+ }
+ }
+
+ if(audio->pcm_point > 0)
+ return 0;
+ else
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.h b/core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.h
new file mode 100644
index 0000000..2117be7
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/mpeg3audio.h
@@ -0,0 +1,144 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3AUDIO_H
+#define MPEG3AUDIO_H
+
+#include "ac3.h"
+#include "../bitstream.h"
+typedef struct mpeg3_atrack_rec mpeg3_atrack_t;
+
+#define MAXFRAMESIZE 1792
+#define HDRCMPMASK 0xfffffd00
+#define SBLIMIT 32
+#define SSLIMIT 18
+#define SCALE_BLOCK 12
+#define MPEG3AUDIO_PADDING 1024
+
+/* Values for mode */
+#define MPG_MD_STEREO 0
+#define MPG_MD_JOINT_STEREO 1
+#define MPG_MD_DUAL_CHANNEL 2
+#define MPG_MD_MONO 3
+
+/* IMDCT variables */
+typedef struct
+{
+ mpeg3_real_t real;
+ mpeg3_real_t imag;
+} mpeg3_complex_t;
+
+#define AC3_N 512
+
+struct al_table
+{
+ short bits;
+ short d;
+};
+
+typedef struct
+{
+ struct mpeg3_rec* file;
+ mpeg3_atrack_t* track;
+ mpeg3_bits_t *astream;
+
+/* In order of importance */
+ int format; /* format of audio */
+ int layer; /* layer if mpeg */
+ int channels;
+ long outscale;
+ long framenum;
+ long prev_framesize;
+ long framesize; /* For mp3 current framesize without header. For AC3 current framesize with header. */
+ int avg_framesize; /* Includes the 4 byte header */
+ mpeg3_real_t *pcm_sample; /* Interlaced output from synthesizer in floats */
+ int pcm_point; /* Float offset in pcm_sample to write to */
+ long pcm_position; /* Sample start of pcm_samples in file */
+ long pcm_size; /* Number of pcm samples in the buffer */
+ long pcm_allocated; /* Allocated number of samples in pcm_samples */
+ int sample_seek;
+ double percentage_seek;
+ unsigned long oldhead;
+ unsigned long newhead;
+ unsigned long firsthead;
+ int bsnum;
+ int lsf;
+ int mpeg35;
+ int sampling_frequency_code;
+ int bitrate_index;
+ int bitrate;
+ int samples_per_frame;
+ int padding;
+ int extension;
+ int mode;
+ int mode_ext;
+ int copyright;
+ int original;
+ int emphasis;
+ int error_protection;
+
+/* Back step buffers for mp3 */
+ unsigned char bsspace[2][MAXFRAMESIZE + 512]; /* MAXFRAMESIZE */
+ unsigned char *bsbuf, *bsbufold;
+ long ssize;
+ int init;
+ int single;
+ struct al_table *alloc;
+ int II_sblimit;
+ int jsbound;
+ int bo; /* Static variable in synthesizer */
+
+/* MP3 Static arrays here */
+ mpeg3_real_t synth_stereo_buffs[2][2][0x110];
+ mpeg3_real_t synth_mono_buff[64];
+ unsigned int layer2_scfsi_buf[64];
+
+ mpeg3_real_t mp3_block[2][2][SBLIMIT * SSLIMIT];
+ int mp3_blc[2];
+
+/* AC3 specific stuff. AC3 also shares objects with MPEG */
+ unsigned int ac3_framesize_code;
+ mpeg3_ac3bsi_t ac3_bsi;
+ mpeg3_ac3audblk_t ac3_audblk;
+ mpeg3_ac3_bitallocation_t ac3_bit_allocation;
+ mpeg3_ac3_mantissa_t ac3_mantissa;
+ mpeg3_complex_t ac3_imdct_buf[AC3_N / 4];
+
+/* Delay buffer for DCT interleaving */
+ mpeg3_real_t ac3_delay[6][AC3_N / 2];
+/* Twiddle factor LUT */
+ mpeg3_complex_t *ac3_w[7];
+#if !defined(USE_FIXED_POINT) || defined(PRINT_FIXED_POINT_TABLES)
+ /* Just for allocated memory */
+ mpeg3_complex_t ac3_w_1[1];
+ mpeg3_complex_t ac3_w_2[2];
+ mpeg3_complex_t ac3_w_4[4];
+ mpeg3_complex_t ac3_w_8[8];
+ mpeg3_complex_t ac3_w_16[16];
+ mpeg3_complex_t ac3_w_32[32];
+ mpeg3_complex_t ac3_w_64[64];
+#endif
+ int ac3_lfsr_state;
+ unsigned char ac3_buffer[MAX_AC3_FRAMESIZE];
+ mpeg3ac3_stream_samples_t ac3_samples;
+} mpeg3audio_t;
+
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/mpeg3real.h b/core/multimedia/opieplayer/libmpeg3/audio/mpeg3real.h
new file mode 100644
index 0000000..cdcac3d
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/mpeg3real.h
@@ -0,0 +1,232 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3REAL_H
+#define MPEG3REAL_H
+
+#ifdef USE_FIXED_POINT
+
+#include <limits.h>
+#include <stdio.h>
+
+#ifndef LONGLONG
+#define LONGLONG long long
+#endif
+
+//#define SC (1<<16)
+#define SC (1<<15)
+
+class mpeg3_real_t {
+ long v;
+public:
+ mpeg3_real_t() { } // Uninitialized, just like a float
+ mpeg3_real_t(double d) { v=long(d*SC); }
+ mpeg3_real_t(float f) { v=long(f*SC); }
+ mpeg3_real_t(int i) { v=long(i*SC); }
+ long fixedPoint() const { return v; }
+ operator float() const { return ((float)v)/SC; }
+ operator int() const { return (int)(v/SC); }
+ mpeg3_real_t operator+() const;
+ mpeg3_real_t operator-() const;
+ mpeg3_real_t& operator= (const mpeg3_real_t&);
+ mpeg3_real_t& operator+= (const mpeg3_real_t&);
+ mpeg3_real_t& operator-= (const mpeg3_real_t&);
+ mpeg3_real_t& operator*= (const mpeg3_real_t&);
+ mpeg3_real_t& operator/= (const mpeg3_real_t&);
+ friend mpeg3_real_t operator+ (const mpeg3_real_t&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator- (const mpeg3_real_t&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator* (const mpeg3_real_t&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator/ (const mpeg3_real_t&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator+ (const mpeg3_real_t&, const float&);
+ friend mpeg3_real_t operator- (const mpeg3_real_t&, const float&);
+ friend mpeg3_real_t operator* (const mpeg3_real_t&, const float&);
+ friend mpeg3_real_t operator/ (const mpeg3_real_t&, const float&);
+ friend mpeg3_real_t operator+ (const float&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator- (const float&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator* (const float&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator/ (const float&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator+ (const mpeg3_real_t&, const int&);
+ friend mpeg3_real_t operator- (const mpeg3_real_t&, const int&);
+ friend mpeg3_real_t operator* (const mpeg3_real_t&, const int&);
+ friend mpeg3_real_t operator/ (const mpeg3_real_t&, const int&);
+ friend mpeg3_real_t operator+ (const int&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator- (const int&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator* (const int&, const mpeg3_real_t&);
+ friend mpeg3_real_t operator/ (const int&, const mpeg3_real_t&);
+};
+
+inline mpeg3_real_t mpeg3_real_t::operator+() const
+{
+ return *this;
+}
+
+inline mpeg3_real_t mpeg3_real_t::operator-() const
+{
+ mpeg3_real_t r;
+ r.v=-v;
+ return r;
+}
+
+inline mpeg3_real_t& mpeg3_real_t::operator= (const mpeg3_real_t& o)
+{
+ v=o.v;
+ return *this;
+}
+
+inline mpeg3_real_t& mpeg3_real_t::operator+= (const mpeg3_real_t& o)
+{
+ v += o.v;
+ return *this;
+}
+
+inline mpeg3_real_t& mpeg3_real_t::operator-= (const mpeg3_real_t& o)
+{
+ v -= o.v;
+ return *this;
+}
+
+inline mpeg3_real_t& mpeg3_real_t::operator*= (const mpeg3_real_t& o)
+{
+ *this = *this * o;
+ return *this;
+}
+
+inline mpeg3_real_t& mpeg3_real_t::operator/= (const mpeg3_real_t& o)
+{
+ *this = *this / o;
+ return *this;
+}
+
+
+inline mpeg3_real_t operator+ (const mpeg3_real_t&a, const mpeg3_real_t&b)
+{
+ mpeg3_real_t r;
+ r.v=a.v+b.v;
+ return r;
+}
+
+inline mpeg3_real_t operator- (const mpeg3_real_t&a, const mpeg3_real_t&b)
+{
+ mpeg3_real_t r;
+ r.v=a.v-b.v;
+ return r;
+}
+
+inline mpeg3_real_t operator* (const mpeg3_real_t&a, const mpeg3_real_t&b)
+{
+ mpeg3_real_t r;
+ r.v = (LONGLONG)a.v * b.v / SC;
+ return r;
+}
+
+inline mpeg3_real_t operator/ (const mpeg3_real_t&a, const mpeg3_real_t&b)
+{
+ mpeg3_real_t r;
+ r.v = (LONGLONG)a.v * SC / b.v;
+ return r;
+}
+
+inline mpeg3_real_t operator+ (const mpeg3_real_t&a, const float&b)
+{
+ return a+mpeg3_real_t(b);
+}
+
+inline mpeg3_real_t operator- (const mpeg3_real_t&a, const float&b)
+{
+ return a-mpeg3_real_t(b);
+}
+
+inline mpeg3_real_t operator* (const mpeg3_real_t&a, const float&b)
+{
+ return a*mpeg3_real_t(b);
+}
+
+inline mpeg3_real_t operator/ (const mpeg3_real_t&a, const float&b)
+{
+ return a/mpeg3_real_t(b);
+}
+
+
+inline mpeg3_real_t operator+ (const float&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)+b;
+}
+
+inline mpeg3_real_t operator- (const float&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)-b;
+}
+
+inline mpeg3_real_t operator* (const float&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)*b;
+}
+
+inline mpeg3_real_t operator/ (const float&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)/b;
+}
+
+
+inline mpeg3_real_t operator+ (const mpeg3_real_t&a, const int&b)
+{
+ return a+mpeg3_real_t(b);
+}
+
+inline mpeg3_real_t operator- (const mpeg3_real_t&a, const int&b)
+{
+ return a-mpeg3_real_t(b);
+}
+
+inline mpeg3_real_t operator* (const mpeg3_real_t&a, const int&b)
+{
+ return a*mpeg3_real_t(b);
+}
+
+inline mpeg3_real_t operator/ (const mpeg3_real_t&a, const int&b)
+{
+ return a/mpeg3_real_t(b);
+}
+
+
+inline mpeg3_real_t operator+ (const int&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)+b;
+}
+
+inline mpeg3_real_t operator- (const int&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)-b;
+}
+
+inline mpeg3_real_t operator* (const int&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)*b;
+}
+
+inline mpeg3_real_t operator/ (const int&a, const mpeg3_real_t&b)
+{
+ return mpeg3_real_t(a)/b;
+}
+
+#else
+typedef float mpeg3_real_t;
+#endif
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/pcm.c b/core/multimedia/opieplayer/libmpeg3/audio/pcm.c
new file mode 100644
index 0000000..8fa0d25
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/pcm.c
@@ -0,0 +1,51 @@
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+
+int mpeg3audio_read_pcm_header(mpeg3audio_t *audio)
+{
+ unsigned int code;
+
+ code = mpeg3bits_getbits(audio->astream, 16);
+ while(!mpeg3bits_eof(audio->astream) && code != MPEG3_PCM_START_CODE)
+ {
+ code <<= 8;
+ code &= 0xffff;
+ code |= mpeg3bits_getbits(audio->astream, 8);
+ }
+
+ audio->avg_framesize = audio->framesize = 0x7db;
+ audio->channels = 2;
+
+ return mpeg3bits_eof(audio->astream);
+}
+
+int mpeg3audio_do_pcm(mpeg3audio_t *audio)
+{
+ int i, j, k;
+ MPEG3_INT16 sample;
+ int frame_samples = (audio->framesize - 3) / audio->channels / 2;
+
+ if(mpeg3bits_read_buffer(audio->astream, audio->ac3_buffer, frame_samples * audio->channels * 2))
+ return 1;
+
+/* Need more room */
+ if(audio->pcm_point / audio->channels >= audio->pcm_allocated - MPEG3AUDIO_PADDING * audio->channels)
+ {
+ mpeg3audio_replace_buffer(audio, audio->pcm_allocated + MPEG3AUDIO_PADDING * audio->channels);
+ }
+
+ k = 0;
+ for(i = 0; i < frame_samples; i++)
+ {
+ for(j = 0; j < audio->channels; j++)
+ {
+ sample = ((MPEG3_INT16)(audio->ac3_buffer[k++])) << 8;
+ sample |= audio->ac3_buffer[k++];
+ audio->pcm_sample[audio->pcm_point + i * audio->channels + j] =
+ (mpeg3_real_t)sample / 32767;
+ }
+ }
+ audio->pcm_point += frame_samples * audio->channels;
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/synthesizers.c b/core/multimedia/opieplayer/libmpeg3/audio/synthesizers.c
new file mode 100644
index 0000000..71a74b3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/synthesizers.c
@@ -0,0 +1,174 @@
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "tables.h"
+
+#define WRITE_SAMPLE(samples, sum) \
+{ \
+ (*samples) = (sum); \
+}
+
+int mpeg3audio_synth_stereo(mpeg3audio_t *audio, mpeg3_real_t *bandPtr, int channel, mpeg3_real_t *out, int *pnt)
+{
+ const int step = 2;
+ mpeg3_real_t *samples = out + *pnt;
+ register mpeg3_real_t sum;
+ mpeg3_real_t *b0, (*buf)[0x110];
+ int bo1;
+
+ if(!channel)
+ {
+ audio->bo--;
+ audio->bo &= 0xf;
+ buf = audio->synth_stereo_buffs[0];
+ }
+ else
+ {
+ samples++;
+ buf = audio->synth_stereo_buffs[1];
+ }
+
+ if(audio->bo & 0x1)
+ {
+ b0 = buf[0];
+ bo1 = audio->bo;
+ mpeg3audio_dct64(buf[1] + ((audio->bo + 1) & 0xf), buf[0] + audio->bo, bandPtr);
+ }
+ else
+ {
+ b0 = buf[1];
+ bo1 = audio->bo + 1;
+ mpeg3audio_dct64(buf[0] + audio->bo, buf[1] + audio->bo + 1, bandPtr);
+ }
+
+/*printf("%f %f %f\n", buf[0][0], buf[1][0], bandPtr[0]); */
+
+ {
+ register int j;
+ mpeg3_real_t *window = mpeg3_decwin + 16 - bo1;
+
+ for(j = 16; j; j--, b0 += 0x10, window += 0x20, samples += step)
+ {
+ sum = window[0x0] * b0[0x0];
+ sum -= window[0x1] * b0[0x1];
+ sum += window[0x2] * b0[0x2];
+ sum -= window[0x3] * b0[0x3];
+ sum += window[0x4] * b0[0x4];
+ sum -= window[0x5] * b0[0x5];
+ sum += window[0x6] * b0[0x6];
+ sum -= window[0x7] * b0[0x7];
+ sum += window[0x8] * b0[0x8];
+ sum -= window[0x9] * b0[0x9];
+ sum += window[0xA] * b0[0xA];
+ sum -= window[0xB] * b0[0xB];
+ sum += window[0xC] * b0[0xC];
+ sum -= window[0xD] * b0[0xD];
+ sum += window[0xE] * b0[0xE];
+ sum -= window[0xF] * b0[0xF];
+
+ WRITE_SAMPLE(samples, sum);
+ }
+
+ sum = window[0x0] * b0[0x0];
+ sum += window[0x2] * b0[0x2];
+ sum += window[0x4] * b0[0x4];
+ sum += window[0x6] * b0[0x6];
+ sum += window[0x8] * b0[0x8];
+ sum += window[0xA] * b0[0xA];
+ sum += window[0xC] * b0[0xC];
+ sum += window[0xE] * b0[0xE];
+ WRITE_SAMPLE(samples, sum);
+ b0 -= 0x10;
+ window -= 0x20;
+ samples += step;
+ window += bo1 << 1;
+
+ for(j = 15; j; j--, b0 -= 0x10, window -= 0x20, samples += step)
+ {
+ sum = -window[-0x1] * b0[0x0];
+ sum -= window[-0x2] * b0[0x1];
+ sum -= window[-0x3] * b0[0x2];
+ sum -= window[-0x4] * b0[0x3];
+ sum -= window[-0x5] * b0[0x4];
+ sum -= window[-0x6] * b0[0x5];
+ sum -= window[-0x7] * b0[0x6];
+ sum -= window[-0x8] * b0[0x7];
+ sum -= window[-0x9] * b0[0x8];
+ sum -= window[-0xA] * b0[0x9];
+ sum -= window[-0xB] * b0[0xA];
+ sum -= window[-0xC] * b0[0xB];
+ sum -= window[-0xD] * b0[0xC];
+ sum -= window[-0xE] * b0[0xD];
+ sum -= window[-0xF] * b0[0xE];
+ sum -= window[-0x0] * b0[0xF];
+
+ WRITE_SAMPLE(samples, sum);
+ }
+ }
+ *pnt += 64;
+
+ return 0;
+}
+
+int mpeg3audio_synth_mono(mpeg3audio_t *audio, mpeg3_real_t *bandPtr, mpeg3_real_t *samples, int *pnt)
+{
+ mpeg3_real_t *samples_tmp = audio->synth_mono_buff;
+ mpeg3_real_t *tmp1 = samples_tmp;
+ int i, ret;
+ int pnt1 = 0;
+
+ ret = mpeg3audio_synth_stereo(audio, bandPtr, 0, samples_tmp, &pnt1);
+ samples += *pnt;
+
+ for(i = 0; i < 32; i++)
+ {
+ *samples = *tmp1;
+ samples++;
+ tmp1 += 2;
+ }
+ *pnt += 32;
+
+ return ret;
+}
+
+
+/* Call this after every seek to reset the buffers */
+int mpeg3audio_reset_synths(mpeg3audio_t *audio)
+{
+ int i, j, k;
+ for(i = 0; i < 2; i++)
+ {
+ for(j = 0; j < 2; j++)
+ {
+ for(k = 0; k < 0x110; k++)
+ {
+ audio->synth_stereo_buffs[i][j][k] = 0;
+ }
+ }
+ }
+ for(i = 0; i < 64; i++)
+ {
+ audio->synth_mono_buff[i] = 0;
+ audio->layer2_scfsi_buf[i] = 0;
+ }
+ for(i = 0; i < 2; i++)
+ {
+ for(j = 0; j < 2; j++)
+ {
+ for(k = 0; k < SBLIMIT * SSLIMIT; k++)
+ {
+ audio->mp3_block[i][j][k] = 0;
+ }
+ }
+ }
+ audio->mp3_blc[0] = 0;
+ audio->mp3_blc[1] = 0;
+ for(i = 0; i < audio->channels; i++)
+ {
+ for(j = 0; j < AC3_N / 2; j++)
+ {
+ audio->ac3_delay[i][j] = 0;
+ }
+ }
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/tables.c b/core/multimedia/opieplayer/libmpeg3/audio/tables.c
new file mode 100644
index 0000000..aeab335
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/tables.c
@@ -0,0 +1,554 @@
+#include "mpeg3audio.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "tables.h"
+
+#include <math.h>
+
+/* Bitrate indexes */
+int mpeg3_tabsel_123[2][3][16] = {
+ { {0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,},
+ {0,32,48,56, 64, 80, 96,112,128,160,192,224,256,320,384,},
+ {0,32,40,48, 56, 64, 80, 96,112,128,160,192,224,256,320,} },
+
+ { {0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,},
+ {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,},
+ {0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,} }
+};
+
+long mpeg3_freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000 , 11025 , 12000 , 8000 };
+
+#ifdef USE_3DNOW
+mpeg3_real_t mpeg3_decwin[2 * (512 + 32)];
+mpeg3_real_t mpeg3_cos64[32], mpeg3_cos32[16], mpeg3_cos16[8], mpeg3_cos8[4], mpeg3_cos4[2];
+#else
+mpeg3_real_t mpeg3_decwin[512 + 32];
+mpeg3_real_t mpeg3_cos64[16], mpeg3_cos32[8], mpeg3_cos16[4], mpeg3_cos8[2], mpeg3_cos4[1];
+#endif
+
+mpeg3_real_t *mpeg3_pnts[] = { mpeg3_cos64, mpeg3_cos32, mpeg3_cos16, mpeg3_cos8, mpeg3_cos4 };
+
+int mpeg3_grp_3tab[32 * 3] = { 0, }; /* used: 27 */
+int mpeg3_grp_5tab[128 * 3] = { 0, }; /* used: 125 */
+int mpeg3_grp_9tab[1024 * 3] = { 0, }; /* used: 729 */
+
+REAL_MATRIX(mpeg3_muls, [27], [64]); /* also used by layer 1 */
+REAL_MATRIX(mpeg3_gainpow2, [256 + 118 + 4], );
+REAL_MATRIX(mpeg3_ispow, [8207], );
+REAL_MATRIX(mpeg3_aa_ca, [8], );
+REAL_MATRIX(mpeg3_aa_cs, [8], );
+REAL_MATRIX(mpeg3_win, [4], [36]);
+REAL_MATRIX(mpeg3_win1, [4], [36]);
+REAL_MATRIX(mpeg3_COS1, [12], [6]);
+REAL_MATRIX(mpeg3_COS9, [9], );
+REAL_MATRIX(mpeg3_tfcos36, [9], );
+REAL_MATRIX(mpeg3_tfcos12, [3], );
+REAL_MATRIX(mpeg3_cos9, [3], );
+REAL_MATRIX(mpeg3_cos18, [3], );
+REAL_MATRIX(mpeg3_tan1_1, [16], );
+REAL_MATRIX(mpeg3_tan2_1, [16], );
+REAL_MATRIX(mpeg3_tan1_2, [16], );
+REAL_MATRIX(mpeg3_tan2_2, [16], );
+REAL_MATRIX(mpeg3_pow1_1, [2], [16]);
+REAL_MATRIX(mpeg3_pow2_1, [2], [16]);
+REAL_MATRIX(mpeg3_pow1_2, [2], [16]);
+REAL_MATRIX(mpeg3_pow2_2, [2], [16]);
+
+mpeg3_real_t mpeg3_COS6_1, mpeg3_COS6_2;
+
+#ifdef PRINT_FIXED_POINT_TABLES
+static void print_table(const char* var, mpeg3_real_t* data, int count)
+{
+ int i;
+ printf("#ifdef USE_DATA_TABLES\n");
+ printf("static long %s_data[] = {",var);
+ for(i = 0; i < count; i++) {
+ printf("%c0x%08x,", i%8?' ':'\n', data[i].fixedPoint());
+ }
+ printf("};\n");
+ printf("#endif\n");
+}
+#endif
+
+#ifdef PRINT_FIXED_POINT_TABLES
+# define DO_TABLE(T) print_table(#T, T, sizeof(T)/sizeof(mpeg3_real_t))
+# define DO_TABLE2(T,DIM) print_table(#T, (mpeg3_real_t*)T, sizeof(T)/sizeof(mpeg3_real_t))
+#elif USE_FIXED_POINT
+# define DO_TABLE(T) T = (mpeg3_real_t*)T##_data
+ // multidimensional
+# define DO_TABLE2(T,DIM) T = (mpeg3_real_t(*)DIM)T##_data
+#else
+# define DO_TABLE(T)
+# define DO_TABLE2(T,DIM)
+#endif
+
+#if defined(USE_FIXED_POINT) && !defined(PRINT_FIXED_POINT_TABLES)
+#define USE_DATA_TABLES
+#include "fptables.h"
+#endif
+
+long mpeg3_intwinbase[] = {
+ 0, -1, -1, -1, -1, -1, -1, -2, -2, -2,
+ -2, -3, -3, -4, -4, -5, -5, -6, -7, -7,
+ -8, -9, -10, -11, -13, -14, -16, -17, -19, -21,
+ -24, -26, -29, -31, -35, -38, -41, -45, -49, -53,
+ -58, -63, -68, -73, -79, -85, -91, -97, -104, -111,
+ -117, -125, -132, -139, -147, -154, -161, -169, -176, -183,
+ -190, -196, -202, -208, -213, -218, -222, -225, -227, -228,
+ -228, -227, -224, -221, -215, -208, -200, -189, -177, -163,
+ -146, -127, -106, -83, -57, -29, 2, 36, 72, 111,
+ 153, 197, 244, 294, 347, 401, 459, 519, 581, 645,
+ 711, 779, 848, 919, 991, 1064, 1137, 1210, 1283, 1356,
+ 1428, 1498, 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962,
+ 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, 2037, 2000,
+ 1952, 1893, 1822, 1739, 1644, 1535, 1414, 1280, 1131, 970,
+ 794, 605, 402, 185, -45, -288, -545, -814, -1095, -1388,
+ -1692, -2006, -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
+ -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, -7910, -8209,
+ -8491, -8755, -8998, -9219, -9416, -9585, -9727, -9838, -9916, -9959,
+ -9966, -9935, -9863, -9750, -9592, -9389, -9139, -8840, -8492, -8092,
+ -7640, -7134, -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
+ -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, 9975, 11455,
+ 12980, 14548, 16155, 17799, 19478, 21189, 22929, 24694, 26482, 28289,
+ 30112, 31947, 33791, 35640, 37489, 39336, 41176, 43006, 44821, 46617,
+ 48390, 50137, 51853, 53534, 55178, 56778, 58333, 59838, 61289, 62684,
+ 64019, 65290, 66494, 67629, 68692, 69679, 70590, 71420, 72169, 72835,
+ 73415, 73908, 74313, 74630, 74856, 74992, 75038 };
+
+int mpeg3_longLimit[9][23];
+int mpeg3_shortLimit[9][14];
+
+struct mpeg3_bandInfoStruct mpeg3_bandInfo[9] =
+{
+
+/* MPEG 1.0 */
+ { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
+ {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
+ {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
+ {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
+
+ { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
+ {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
+ {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
+ {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
+
+ { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
+ {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
+ {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} ,
+ {4,4,4,4,6,8,12,16,20,26,34,42,12} } ,
+
+/* MPEG 2.0 */
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
+ {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
+ {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
+
+ { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
+ {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
+ {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} ,
+ {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
+
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
+ {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
+ {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
+/* MPEG 2.5 */
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
+ {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
+ {4,4,4,6,8,10,12,14,18,24,30,40,18} },
+ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
+ {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
+ {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
+ {4,4,4,6,8,10,12,14,18,24,30,40,18} },
+ { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
+ {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
+ {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
+ {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
+};
+
+int mpeg3_mapbuf0[9][152];
+int mpeg3_mapbuf1[9][156];
+int mpeg3_mapbuf2[9][44];
+int *mpeg3_map[9][3];
+int *mpeg3_mapend[9][3];
+
+unsigned int mpeg3_n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
+unsigned int mpeg3_i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
+
+int mpeg3audio_init_layer3(mpeg3audio_t *audio);
+
+int mpeg3audio_init_layer2(mpeg3audio_t *audio)
+{
+ static double mulmul[27] =
+ {
+ 0.0 , -2.0/3.0 , 2.0/3.0 ,
+ 2.0/7.0 , 2.0/15.0 , 2.0/31.0, 2.0/63.0 , 2.0/127.0 , 2.0/255.0 ,
+ 2.0/511.0 , 2.0/1023.0 , 2.0/2047.0 , 2.0/4095.0 , 2.0/8191.0 ,
+ 2.0/16383.0 , 2.0/32767.0 , 2.0/65535.0 ,
+ -4.0/5.0 , -2.0/5.0 , 2.0/5.0, 4.0/5.0 ,
+ -8.0/9.0 , -4.0/9.0 , -2.0/9.0 , 2.0/9.0 , 4.0/9.0 , 8.0/9.0
+ };
+ static int base[3][9] =
+ {
+ { 1 , 0, 2 , } ,
+ { 17, 18, 0 , 19, 20 , } ,
+ { 21, 1, 22, 23, 0, 24, 25, 2, 26 }
+ };
+ static int tablen[3] = { 3, 5, 9 };
+ static int *itable, *tables[3] = {mpeg3_grp_3tab, mpeg3_grp_5tab, mpeg3_grp_9tab};
+ int i, j, k, l, len;
+ mpeg3_real_t *table;
+
+ for(i = 0; i < 3; i++)
+ {
+ itable = tables[i];
+ len = tablen[i];
+ for(j = 0; j < len; j++)
+ for(k = 0; k < len; k++)
+ for(l = 0; l < len; l++)
+ {
+ *itable++ = base[i][l];
+ *itable++ = base[i][k];
+ *itable++ = base[i][j];
+ }
+ }
+
+#if !defined(USE_FIXED_POINT) || defined(PRINT_FIXED_POINT_TABLES)
+#if defined(PRINT_FIXED_POINT_TABLES)
+ //mpeg3audio_init_layer3(audio); // we depend on mpeg3_muls table
+#endif
+ for(k = 0; k < 27; k++)
+ {
+ double m = mulmul[k];
+ table = mpeg3_muls[k];
+ for(j = 3, i = 0; i < 63; i++, j--)
+ *table++ = m * pow(2.0, (double)j / 3.0);
+ *table++ = 0.0;
+ }
+#endif
+ DO_TABLE2(mpeg3_muls,[64]);
+ return 0;
+}
+
+int mpeg3audio_init_layer3(mpeg3audio_t *audio)
+{
+ int i, j, k, l;
+ int down_sample_sblimit = 32;
+
+ audio->mp3_block[0][0][0] = 0;
+ audio->mp3_blc[0] = 0;
+ audio->mp3_blc[1] = 0;
+
+#if !defined(USE_FIXED_POINT) || defined(PRINT_FIXED_POINT_TABLES)
+ for(i = -256; i < 118 + 4; i++)
+ mpeg3_gainpow2[i + 256] = pow((double)2.0, -0.25 * (double)(i + 210));
+
+ for(i = 0; i < 8207; i++)
+ mpeg3_ispow[i] = pow((double)i, (double)4.0 / 3.0);
+
+ for(i = 0; i < 8; i++)
+ {
+ static double Ci[8] = {-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
+ double sq = sqrt(1.0+Ci[i]*Ci[i]);
+ mpeg3_aa_cs[i] = 1.0/sq;
+ mpeg3_aa_ca[i] = Ci[i]/sq;
+ }
+
+ for(i = 0; i < 18; i++)
+ {
+ mpeg3_win[0][i] = mpeg3_win[1][i] = 0.5 * sin( M_PI / 72.0 * (double)(2 * (i + 0) + 1) ) / cos (M_PI * (double)(2 * (i + 0) + 19) / 72.0);
+ mpeg3_win[0][i+18] = mpeg3_win[3][i+18] = 0.5 * sin( M_PI / 72.0 * (double)(2 * (i + 18) + 1) ) / cos (M_PI * (double)(2 * (i + 18) + 19) / 72.0);
+ }
+ for(i = 0; i < 6; i++)
+ {
+ mpeg3_win[1][i + 18] = 0.5 / cos ( M_PI * (double) (2*(i+18)+19) / 72.0 );
+ mpeg3_win[3][i + 12] = 0.5 / cos ( M_PI * (double) (2*(i+12)+19) / 72.0 );
+ mpeg3_win[1][i + 24] = 0.5 * sin( M_PI / 24.0 * (double)(2 * i + 13) ) / cos (M_PI * (double)(2 * (i + 24)+ 19) / 72.0 );
+ mpeg3_win[1][i + 30] = mpeg3_win[3][i] = 0.0;
+ mpeg3_win[3][i + 6 ] = 0.5 * sin( M_PI / 24.0 * (double)(2 * i + 1) ) / cos (M_PI * (double)(2 * (i + 6 )+ 19) / 72.0 );
+ }
+
+ for(i = 0; i < 9; i++)
+ mpeg3_COS9[i] = cos(M_PI / 18.0 * (double)i);
+
+ for(i = 0; i < 9; i++)
+ mpeg3_tfcos36[i] = 0.5 / cos (M_PI * (double) (i*2+1) / 36.0);
+ for(i = 0; i < 3; i++)
+ mpeg3_tfcos12[i] = 0.5 / cos (M_PI * (double) (i*2+1) / 12.0);
+
+ mpeg3_cos9[0] = cos(1.0 * M_PI / 9.0);
+ mpeg3_cos9[1] = cos(5.0 * M_PI / 9.0);
+ mpeg3_cos9[2] = cos(7.0 * M_PI / 9.0);
+ mpeg3_cos18[0] = cos(1.0 * M_PI / 18.0);
+ mpeg3_cos18[1] = cos(11.0 * M_PI / 18.0);
+ mpeg3_cos18[2] = cos(13.0 * M_PI / 18.0);
+
+ for(i = 0; i < 12; i++)
+ {
+ mpeg3_win[2][i] = 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI * (double)(2 * i + 7) / 24.0);
+ for(j = 0; j < 6; j++)
+ mpeg3_COS1[i][j] = cos(M_PI / 24.0 * (double) ((2 * i + 7) * (2 * j + 1)));
+ }
+
+ for(j = 0; j < 4; j++)
+ {
+ static int len[4] = {36, 36, 12, 36};
+ for(i = 0; i < len[j]; i += 2)
+ mpeg3_win1[j][i] = + mpeg3_win[j][i];
+ for(i = 1; i < len[j]; i += 2)
+ mpeg3_win1[j][i] = - mpeg3_win[j][i];
+ }
+
+ for(i = 0; i < 16; i++)
+ {
+ double t = tan( (double) i * M_PI / 12.0 );
+ mpeg3_tan1_1[i] = t / (1.0 + t);
+ mpeg3_tan2_1[i] = 1.0 / (1.0 + t);
+ mpeg3_tan1_2[i] = M_SQRT2 * t / (1.0 + t);
+ mpeg3_tan2_2[i] = M_SQRT2 / (1.0 + t);
+
+ for(j = 0; j < 2; j++)
+ {
+ double base = pow(2.0, -0.25 * (j + 1.0));
+ double p1 = 1.0,p2 = 1.0;
+ if(i > 0)
+ {
+ if( i & 1 )
+ p1 = pow(base, (i + 1.0) * 0.5);
+ else
+ p2 = pow(base, i * 0.5);
+ }
+ mpeg3_pow1_1[j][i] = p1;
+ mpeg3_pow2_1[j][i] = p2;
+ mpeg3_pow1_2[j][i] = M_SQRT2 * p1;
+ mpeg3_pow2_2[j][i] = M_SQRT2 * p2;
+ }
+ }
+
+#endif
+
+ DO_TABLE(mpeg3_gainpow2);
+ DO_TABLE(mpeg3_ispow);
+ DO_TABLE(mpeg3_aa_cs);
+ DO_TABLE(mpeg3_aa_ca);
+ DO_TABLE2(mpeg3_win,[36]);
+ DO_TABLE(mpeg3_COS9);
+ DO_TABLE(mpeg3_tfcos36);
+ DO_TABLE(mpeg3_tfcos12);
+ DO_TABLE(mpeg3_cos9);
+ DO_TABLE(mpeg3_cos18);
+ DO_TABLE2(mpeg3_COS1,[6]);
+ DO_TABLE2(mpeg3_win1,[36]);
+ DO_TABLE(mpeg3_tan1_1);
+ DO_TABLE(mpeg3_tan2_1);
+ DO_TABLE(mpeg3_tan1_2);
+ DO_TABLE(mpeg3_tan2_2);
+ DO_TABLE2(mpeg3_pow1_1,[16]);
+ DO_TABLE2(mpeg3_pow2_1,[16]);
+ DO_TABLE2(mpeg3_pow1_2,[16]);
+ DO_TABLE2(mpeg3_pow2_2,[16]);
+
+ mpeg3_COS6_1 = cos( M_PI / 6.0 * (double) 1);
+ mpeg3_COS6_2 = cos( M_PI / 6.0 * (double) 2);
+
+ for(j = 0; j < 9; j++)
+ {
+ struct mpeg3_bandInfoStruct *bi = &mpeg3_bandInfo[j];
+ int *mp;
+ int cb,lwin;
+ int *bdf;
+
+ mp = mpeg3_map[j][0] = mpeg3_mapbuf0[j];
+ bdf = bi->longDiff;
+ for(i = 0, cb = 0; cb < 8; cb++, i += *bdf++)
+ {
+ *mp++ = (*bdf) >> 1;
+ *mp++ = i;
+ *mp++ = 3;
+ *mp++ = cb;
+ }
+ bdf = bi->shortDiff + 3;
+ for(cb = 3; cb < 13; cb++)
+ {
+ int l = (*bdf++) >> 1;
+ for(lwin = 0; lwin < 3; lwin++)
+ {
+ *mp++ = l;
+ *mp++ = i + lwin;
+ *mp++ = lwin;
+ *mp++ = cb;
+ }
+ i += 6 * l;
+ }
+ mpeg3_mapend[j][0] = mp;
+
+ mp = mpeg3_map[j][1] = mpeg3_mapbuf1[j];
+ bdf = bi->shortDiff+0;
+ for(i = 0,cb = 0; cb < 13; cb++)
+ {
+ int l = (*bdf++) >> 1;
+ for(lwin = 0; lwin < 3; lwin++)
+ {
+ *mp++ = l;
+ *mp++ = i + lwin;
+ *mp++ = lwin;
+ *mp++ = cb;
+ }
+ i += 6 * l;
+ }
+ mpeg3_mapend[j][1] = mp;
+
+ mp = mpeg3_map[j][2] = mpeg3_mapbuf2[j];
+ bdf = bi->longDiff;
+ for(cb = 0; cb < 22 ; cb++)
+ {
+ *mp++ = (*bdf++) >> 1;
+ *mp++ = cb;
+ }
+ mpeg3_mapend[j][2] = mp;
+ }
+
+ for(j = 0; j < 9; j++)
+ {
+ for(i = 0; i < 23; i++)
+ {
+ mpeg3_longLimit[j][i] = (mpeg3_bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
+ if(mpeg3_longLimit[j][i] > (down_sample_sblimit))
+ mpeg3_longLimit[j][i] = down_sample_sblimit;
+ }
+ for(i = 0; i < 14; i++)
+ {
+ mpeg3_shortLimit[j][i] = (mpeg3_bandInfo[j].shortIdx[i] - 1) / 18 + 1;
+ if(mpeg3_shortLimit[j][i] > (down_sample_sblimit) )
+ mpeg3_shortLimit[j][i] = down_sample_sblimit;
+ }
+ }
+
+ for(i = 0; i < 5; i++)
+ {
+ for(j = 0; j < 6; j++)
+ {
+ for(k = 0; k < 6; k++)
+ {
+ int n = k + j * 6 + i * 36;
+ mpeg3_i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12);
+ }
+ }
+ }
+ for(i = 0; i < 4; i++)
+ {
+ for(j = 0; j < 4; j++)
+ {
+ for(k = 0; k < 4; k++)
+ {
+ int n = k + j * 4 + i * 16;
+ mpeg3_i_slen2[n+180] = i | (j << 3) | (k << 6) | (4 << 12);
+ }
+ }
+ }
+ for(i = 0; i < 4; i++)
+ {
+ for(j = 0; j < 3; j++)
+ {
+ int n = j + i * 3;
+ mpeg3_i_slen2[n + 244] = i | (j << 3) | (5 << 12);
+ mpeg3_n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15);
+ }
+ }
+
+ for(i = 0; i < 5; i++)
+ {
+ for(j = 0; j < 5; j++)
+ {
+ for(k = 0; k < 4; k++)
+ {
+ for(l = 0; l < 4; l++)
+ {
+ int n = l + k * 4 + j * 16 + i * 80;
+ mpeg3_n_slen2[n] = i | (j << 3) | ( k << 6) | (l << 9) | (0 << 12);
+ }
+ }
+ }
+ }
+ for(i = 0; i < 5; i++)
+ {
+ for(j = 0; j < 5; j++)
+ {
+ for(k = 0; k < 4; k++)
+ {
+ int n = k + j * 4 + i * 20;
+ mpeg3_n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12);
+ }
+ }
+ }
+
+ return 0;
+}
+
+int mpeg3audio_new_decode_tables(mpeg3audio_t *audio)
+{
+ int i, j, k, kr, divv;
+ mpeg3_real_t *costab;
+ int idx;
+ long scaleval = audio->outscale;
+
+
+ for(i = 0; i < 5; i++)
+ {
+ kr = 0x10 >> i;
+ divv = 0x40 >> i;
+ costab = mpeg3_pnts[i];
+ for(k = 0; k < kr; k++)
+ costab[k] = 1.0 / (2.0 * cos(M_PI * ((double)k * 2.0 + 1.0) / (double)divv));
+
+#ifdef USE_3DNOW
+ for(k = 0; k < kr; k++)
+ costab[k + kr] = -costab[k];
+#endif
+
+ }
+
+ idx = 0;
+ scaleval = -scaleval;
+ for(i = 0, j = 0; i < 256; i++, j++,idx += 32)
+ {
+ if(idx < 512 + 16)
+ mpeg3_decwin[idx+16] = mpeg3_decwin[idx] = (double)mpeg3_intwinbase[j] / 65536.0 * (double)scaleval;
+
+ if(i % 32 == 31)
+ idx -= 1023;
+ if(i % 64 == 63)
+ scaleval = -scaleval;
+ }
+
+ for( ; i < 512; i++, j--, idx += 32)
+ {
+ if(idx < 512 + 16)
+ mpeg3_decwin[idx + 16] = mpeg3_decwin[idx] = (double)mpeg3_intwinbase[j] / 65536.0 * (double)scaleval;
+
+ if(i % 32 == 31)
+ idx -= 1023;
+ if(i % 64 == 63)
+ scaleval = -scaleval;
+ }
+
+#ifdef USE_3DNOW
+ if(!param.down_sample)
+ {
+ for(i = 0; i < 512 + 32; i++)
+ {
+ mpeg3_decwin[512 + 31 - i] *= 65536.0; /* allows faster clipping in 3dnow code */
+ mpeg3_decwin[512 + 32 + i] = mpeg3_decwin[512 + 31 - i];
+ }
+ }
+#endif
+
+/* Initialize AC3 */
+ audio->ac3_lfsr_state = 1;
+ mpeg3audio_imdct_init(audio);
+/* Initialize MPEG */
+ mpeg3audio_init_layer2(audio); /* inits also shared tables with layer1 */
+ mpeg3audio_init_layer3(audio);
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/tables.h b/core/multimedia/opieplayer/libmpeg3/audio/tables.h
new file mode 100644
index 0000000..7b14de1
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/tables.h
@@ -0,0 +1,88 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef TABLES_H
+#define TABLES_H
+
+extern int mpeg3_tabsel_123[2][3][16];
+
+extern long mpeg3_freqs[9];
+
+struct mpeg3_bandInfoStruct
+{
+ int longIdx[23];
+ int longDiff[22];
+ int shortIdx[14];
+ int shortDiff[13];
+};
+
+
+extern mpeg3_real_t mpeg3_decwin[512 + 32];
+extern mpeg3_real_t mpeg3_cos64[16], mpeg3_cos32[8], mpeg3_cos16[4], mpeg3_cos8[2], mpeg3_cos4[1];
+
+extern mpeg3_real_t *mpeg3_pnts[5];
+
+extern int mpeg3_grp_3tab[32 * 3]; /* used: 27 */
+extern int mpeg3_grp_5tab[128 * 3]; /* used: 125 */
+extern int mpeg3_grp_9tab[1024 * 3]; /* used: 729 */
+extern long mpeg3_intwinbase[257];
+extern mpeg3_real_t mpeg3_COS6_1, mpeg3_COS6_2;
+
+#if defined(USE_FIXED_POINT) && !defined(PRINT_FIXED_POINT_TABLES)
+# define REAL_MATRIX(var,dim1,dimn) mpeg3_real_t (*var)dimn
+#else
+# define REAL_MATRIX(var,dim1,dimn) mpeg3_real_t var dim1 dimn
+#endif
+extern REAL_MATRIX(mpeg3_muls, [27], [64]); /* also used by layer 1 */
+extern REAL_MATRIX(mpeg3_gainpow2, [256 + 118 + 4], );
+extern REAL_MATRIX(mpeg3_ispow, [8207], );
+extern REAL_MATRIX(mpeg3_aa_ca, [8], );
+extern REAL_MATRIX(mpeg3_aa_cs, [8], );
+extern REAL_MATRIX(mpeg3_win, [4], [36]);
+extern REAL_MATRIX(mpeg3_win1, [4], [36]);
+extern REAL_MATRIX(mpeg3_COS1, [12], [6]);
+extern REAL_MATRIX(mpeg3_COS9, [9], );
+extern REAL_MATRIX(mpeg3_tfcos36, [9], );
+extern REAL_MATRIX(mpeg3_tfcos12, [3], );
+extern REAL_MATRIX(mpeg3_cos9, [3], );
+extern REAL_MATRIX(mpeg3_cos18, [3], );
+extern REAL_MATRIX(mpeg3_tan1_1, [16], );
+extern REAL_MATRIX(mpeg3_tan2_1, [16], );
+extern REAL_MATRIX(mpeg3_tan1_2, [16], );
+extern REAL_MATRIX(mpeg3_tan2_2, [16], );
+extern REAL_MATRIX(mpeg3_pow1_1, [2], [16]);
+extern REAL_MATRIX(mpeg3_pow2_1, [2], [16]);
+extern REAL_MATRIX(mpeg3_pow1_2, [2], [16]);
+extern REAL_MATRIX(mpeg3_pow2_2, [2], [16]);
+
+extern int mpeg3_longLimit[9][23];
+extern int mpeg3_shortLimit[9][14];
+
+extern struct mpeg3_bandInfoStruct mpeg3_bandInfo[9];
+
+extern int mpeg3_mapbuf0[9][152];
+extern int mpeg3_mapbuf1[9][156];
+extern int mpeg3_mapbuf2[9][44];
+extern int *mpeg3_map[9][3];
+extern int *mpeg3_mapend[9][3];
+
+extern unsigned int mpeg3_n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
+extern unsigned int mpeg3_i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/audio/uncouple.c b/core/multimedia/opieplayer/libmpeg3/audio/uncouple.c
new file mode 100644
index 0000000..d87a078
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/audio/uncouple.c
@@ -0,0 +1,135 @@
+/*
+ *
+ * uncouple.c Copyright (C) Aaron Holtzman - May 1999
+ *
+ * This file is part of libmpeg3
+ *
+ * libmpeg3 is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * libmpeg3 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "../bitstream.h"
+#include "mpeg3audio.h"
+
+static unsigned char mpeg3_first_bit_lut[256] =
+{
+ 0, 8, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+/* Converts an unsigned exponent in the range of 0-24 and a 16 bit mantissa
+ * to an IEEE single precision floating point value */
+static inline void mpeg3audio_ac3_convert_to_float(unsigned short exp,
+ unsigned short mantissa,
+ unsigned MPEG3_INT32 *dest)
+{
+ int num;
+ short exponent;
+ int i;
+
+/* If the mantissa is zero we can simply return zero */
+ if(mantissa == 0)
+ {
+ *dest = 0;
+ return;
+ }
+
+/* Exponent is offset by 127 in IEEE format minus the shift to
+ * align the mantissa to 1.f (subtracted in the final result) */
+ exponent = 127 - exp;
+
+/* Take care of the one asymmetric negative number */
+ if(mantissa == 0x8000)
+ mantissa++;
+
+/* Extract the sign bit, invert the mantissa if it's negative, and
+ shift out the sign bit */
+ if(mantissa & 0x8000)
+ {
+ mantissa *= -1;
+ num = 0x80000000 + (exponent << 23);
+ }
+ else
+ {
+ mantissa *= 1;
+ num = exponent << 23;
+ }
+
+/* Find the index of the most significant one bit */
+ i = mpeg3_first_bit_lut[mantissa >> 8];
+
+ if(i == 0)
+ i = mpeg3_first_bit_lut[mantissa & 0xff] + 8;
+
+ *dest = num - (i << 23) + (mantissa << (7 + i));
+ return;
+}
+
+
+int mpeg3audio_ac3_uncouple(mpeg3audio_t *audio,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk,
+ mpeg3_stream_coeffs_t *coeffs)
+{
+ int i, j;
+
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ for(j = 0; j < audblk->endmant[i]; j++)
+ mpeg3audio_ac3_convert_to_float(audblk->fbw_exp[i][j],
+ audblk->chmant[i][j],
+ (unsigned MPEG3_INT32*)&coeffs->fbw[i][j]);
+ }
+
+ if(audblk->cplinu)
+ {
+ for(i = 0; i < bsi->nfchans; i++)
+ {
+ if(audblk->chincpl[i])
+ {
+ mpeg3audio_ac3_uncouple_channel(audio,
+ coeffs,
+ audblk,
+ i);
+ }
+ }
+
+ }
+
+ if(bsi->lfeon)
+ {
+/* There are always 7 mantissas for lfe */
+ for(j = 0; j < 7 ; j++)
+ mpeg3audio_ac3_convert_to_float(audblk->lfe_exp[j],
+ audblk->lfemant[j],
+ (unsigned MPEG3_INT32*)&coeffs->lfe[j]);
+
+ }
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/bitstream.c b/core/multimedia/opieplayer/libmpeg3/bitstream.c
new file mode 100644
index 0000000..b4f46e3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/bitstream.c
@@ -0,0 +1,167 @@
+#include "mpeg3private.h"
+#include "mpeg3protos.h"
+
+#include <stdlib.h>
+
+mpeg3_bits_t* mpeg3bits_new_stream(mpeg3_t *file, mpeg3_demuxer_t *demuxer)
+{
+ mpeg3_bits_t *stream = (mpeg3_bits_t*)malloc(sizeof(mpeg3_bits_t));
+ stream->bfr = 0;
+ stream->bfr_size = 0;
+ stream->bit_number = 0;
+ stream->file = file;
+ stream->demuxer = demuxer;
+ stream->input_ptr = 0;
+ return stream;
+}
+
+int mpeg3bits_delete_stream(mpeg3_bits_t* stream)
+{
+ free(stream);
+ return 0;
+}
+
+
+/* Fill a buffer. Only works if bit_number is on an 8 bit boundary */
+int mpeg3bits_read_buffer(mpeg3_bits_t* stream, unsigned char *buffer, int bytes)
+{
+ int result, i = 0;
+ while(stream->bit_number > 0)
+ {
+ stream->bit_number -= 8;
+ mpeg3demux_read_prev_char(stream->demuxer);
+ }
+
+ stream->bit_number = 0;
+ stream->bfr_size = 0;
+ stream->bfr = 0;
+ result = mpeg3demux_read_data(stream->demuxer, buffer, bytes);
+ return result;
+}
+
+/* For mp3 decompression use a pointer in a buffer for getbits. */
+int mpeg3bits_use_ptr(mpeg3_bits_t* stream, unsigned char *buffer)
+{
+ stream->bfr_size = stream->bit_number = 0;
+ stream->bfr = 0;
+ stream->input_ptr = buffer;
+ return 0;
+}
+
+/* Go back to using the demuxer for getbits in mp3. */
+int mpeg3bits_use_demuxer(mpeg3_bits_t* stream)
+{
+ if(stream->input_ptr)
+ {
+ stream->bfr_size = stream->bit_number = 0;
+ stream->input_ptr = 0;
+ stream->bfr = 0;
+ }
+
+ return 0;
+}
+
+/* Reconfigure for reverse operation */
+/* Default is forward operation */
+void mpeg3bits_start_reverse(mpeg3_bits_t* stream)
+{
+ int i;
+ for(i = 0; i < stream->bfr_size; i += 8)
+ if(stream->input_ptr)
+ stream->input_ptr--;
+ else
+ mpeg3demux_read_prev_char(stream->demuxer);
+}
+
+/* Reconfigure for forward operation */
+void mpeg3bits_start_forward(mpeg3_bits_t* stream)
+{
+ int i;
+ for(i = 0; i < stream->bfr_size; i += 8)
+ if(stream->input_ptr)
+ stream->input_ptr++;
+ else
+ mpeg3demux_read_char(stream->demuxer);
+}
+
+/* Erase the buffer with the next 4 bytes in the file. */
+int mpeg3bits_refill(mpeg3_bits_t* stream)
+{
+ stream->bit_number = 32;
+ stream->bfr_size = 32;
+
+ if(stream->input_ptr)
+ {
+ stream->bfr = (unsigned int)(*stream->input_ptr++) << 24;
+ stream->bfr |= (unsigned int)(*stream->input_ptr++) << 16;
+ stream->bfr |= (unsigned int)(*stream->input_ptr++) << 8;
+ stream->bfr |= *stream->input_ptr++;
+ }
+ else
+ {
+ stream->bfr = mpeg3demux_read_char(stream->demuxer) << 24;
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer) << 16;
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer) << 8;
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer);
+ }
+ return mpeg3demux_eof(stream->demuxer);
+}
+
+/* Erase the buffer with the previous 4 bytes in the file. */
+int mpeg3bits_refill_backwards(mpeg3_bits_t* stream)
+{
+ stream->bit_number = 0;
+ stream->bfr_size = 32;
+ stream->bfr = mpeg3demux_read_prev_char(stream->demuxer);
+ stream->bfr |= (unsigned int)mpeg3demux_read_prev_char(stream->demuxer) << 8;
+ stream->bfr |= (unsigned int)mpeg3demux_read_prev_char(stream->demuxer) << 16;
+ stream->bfr |= (unsigned int)mpeg3demux_read_prev_char(stream->demuxer) << 24;
+ return mpeg3demux_eof(stream->demuxer);
+}
+
+int mpeg3bits_byte_align(mpeg3_bits_t *stream)
+{
+ stream->bit_number = (stream->bit_number + 7) & 0xf8;
+ return 0;
+}
+
+int mpeg3bits_seek_end(mpeg3_bits_t* stream)
+{
+ stream->bfr_size = stream->bit_number = 0;
+ return mpeg3demux_seek_byte(stream->demuxer, mpeg3demuxer_total_bytes(stream->demuxer));
+}
+
+int mpeg3bits_seek_start(mpeg3_bits_t* stream)
+{
+ stream->bfr_size = stream->bit_number = 0;
+ return mpeg3demux_seek_byte(stream->demuxer, 0);
+}
+
+int mpeg3bits_seek_time(mpeg3_bits_t* stream, double time_position)
+{
+ stream->bfr_size = stream->bit_number = 0;
+ return mpeg3demux_seek_time(stream->demuxer, time_position);
+}
+
+int mpeg3bits_seek_byte(mpeg3_bits_t* stream, long position)
+{
+ stream->bfr_size = stream->bit_number = 0;
+ return mpeg3demux_seek_byte(stream->demuxer, position);
+}
+
+int mpeg3bits_seek_percentage(mpeg3_bits_t* stream, double percentage)
+{
+ stream->bfr_size = stream->bit_number = 0;
+ return mpeg3demux_seek_percentage(stream->demuxer, percentage);
+}
+
+int mpeg3bits_tell(mpeg3_bits_t* stream)
+{
+ return mpeg3demux_tell(stream->demuxer);
+}
+
+int mpeg3bits_getbitoffset(mpeg3_bits_t *stream)
+{
+ return stream->bit_number & 7;
+}
+
diff --git a/core/multimedia/opieplayer/libmpeg3/bitstream.h b/core/multimedia/opieplayer/libmpeg3/bitstream.h
new file mode 100644
index 0000000..2f6dcf9
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/bitstream.h
@@ -0,0 +1,207 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef BITSTREAM_H
+#define BITSTREAM_H
+
+#include "mpeg3demux.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+// next bit in forward direction
+// next bit in reverse direction |
+// v v
+// | | | | | | | | | | | | | | | | | | | | | | | | | | |1|1|1|1|1|1| */
+// ^ ^
+// | bit_number = 1
+// bfr_size = 6
+
+typedef struct
+{
+ unsigned MPEG3_INT32 bfr; /* bfr = buffer for bits */
+ int bit_number; /* position of pointer in bfr */
+ int bfr_size; /* number of bits in bfr. Should always be a multiple of 8 */
+ struct mpeg3_rec *file; /* Mpeg2 file */
+ mpeg3_demuxer_t *demuxer; /* Mpeg2 demuxer */
+/* If the input ptr is true, data is read from it instead of the demuxer. */
+ unsigned char *input_ptr;
+} mpeg3_bits_t;
+
+LIBMPEG_EXPORT unsigned int mpeg3demux_read_char_packet(mpeg3_demuxer_t *demuxer);
+LIBMPEG_EXPORT unsigned int mpeg3demux_read_prev_char_packet(mpeg3_demuxer_t *demuxer);
+
+/* ======================================================================== */
+/* Entry Points */
+/* ======================================================================== */
+
+#define mpeg3bits_tell_percentage(stream) mpeg3demux_tell_percentage((stream)->demuxer)
+
+#define mpeg3bits_packet_time(stream) mpeg3demux_current_time((stream)->demuxer)
+
+#define mpeg3bits_time_offset(stream) mepg2demux_time_offset((stream)->demuxer)
+
+#define mpeg3bits_error(stream) mpeg3demux_error((stream)->demuxer)
+
+#define mpeg3bits_eof(stream) mpeg3demux_eof((stream)->demuxer)
+
+#define mpeg3bits_bof(stream) mpeg3demux_bof((stream)->demuxer)
+
+/* Read bytes backward from the file until the reverse_bits is full. */
+static inline void mpeg3bits_fill_reverse_bits(mpeg3_bits_t* stream, int bits)
+{
+// Right justify
+ while(stream->bit_number > 7)
+ {
+ stream->bfr >>= 8;
+ stream->bfr_size -= 8;
+ stream->bit_number -= 8;
+ }
+
+// Insert bytes before bfr_size
+ while(stream->bfr_size - stream->bit_number < bits)
+ {
+ if(stream->input_ptr)
+ stream->bfr |= (unsigned int)(*--stream->input_ptr) << stream->bfr_size;
+ else
+ stream->bfr |= (unsigned int)mpeg3demux_read_prev_char(stream->demuxer) << stream->bfr_size;
+ stream->bfr_size += 8;
+ }
+}
+
+/* Read bytes forward from the file until the forward_bits is full. */
+extern inline void mpeg3bits_fill_bits(mpeg3_bits_t* stream, int bits)
+{
+ while(stream->bit_number < bits)
+ {
+ stream->bfr <<= 8;
+ if(stream->input_ptr)
+ {
+ stream->bfr |= *stream->input_ptr++;
+ }
+ else
+ {
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer);
+ }
+ stream->bit_number += 8;
+ stream->bfr_size += 8;
+ if(stream->bfr_size > 32) stream->bfr_size = 32;
+ }
+}
+
+/* Return 8 bits, advancing the file position. */
+extern inline unsigned int mpeg3bits_getbyte_noptr(mpeg3_bits_t* stream)
+{
+ if(stream->bit_number < 8)
+ {
+ stream->bfr <<= 8;
+ if(stream->input_ptr)
+ stream->bfr |= *stream->input_ptr++;
+ else
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer);
+
+ stream->bfr_size += 8;
+ if(stream->bfr_size > 32) stream->bfr_size = 32;
+
+ return (stream->bfr >> stream->bit_number) & 0xff;
+ }
+ return (stream->bfr >> (stream->bit_number -= 8)) & 0xff;
+}
+
+extern inline unsigned int mpeg3bits_getbit_noptr(mpeg3_bits_t* stream)
+{
+ if(!stream->bit_number)
+ {
+ stream->bfr <<= 8;
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer);
+
+ stream->bfr_size += 8;
+ if(stream->bfr_size > 32) stream->bfr_size = 32;
+
+ stream->bit_number = 7;
+
+ return (stream->bfr >> 7) & 0x1;
+ }
+ return (stream->bfr >> (--stream->bit_number)) & (0x1);
+}
+
+/* Return n number of bits, advancing the file position. */
+/* Use in place of flushbits */
+extern inline unsigned int mpeg3bits_getbits(mpeg3_bits_t* stream, int bits)
+{
+ if(bits <= 0) return 0;
+ mpeg3bits_fill_bits(stream, bits);
+ return (stream->bfr >> (stream->bit_number -= bits)) & (0xffffffff >> (32 - bits));
+}
+
+extern inline unsigned int mpeg3bits_showbits24_noptr(mpeg3_bits_t* stream)
+{
+ while(stream->bit_number < 24)
+ {
+ stream->bfr <<= 8;
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer);
+ stream->bit_number += 8;
+ stream->bfr_size += 8;
+ if(stream->bfr_size > 32) stream->bfr_size = 32;
+ }
+ return (stream->bfr >> (stream->bit_number - 24)) & 0xffffff;
+}
+
+extern inline unsigned int mpeg3bits_showbits32_noptr(mpeg3_bits_t* stream)
+{
+ while(stream->bit_number < 32)
+ {
+ stream->bfr <<= 8;
+ stream->bfr |= mpeg3demux_read_char(stream->demuxer);
+ stream->bit_number += 8;
+ stream->bfr_size += 8;
+ if(stream->bfr_size > 32) stream->bfr_size = 32;
+ }
+ return stream->bfr;
+}
+
+extern inline unsigned int mpeg3bits_showbits(mpeg3_bits_t* stream, int bits)
+{
+ mpeg3bits_fill_bits(stream, bits);
+ return (stream->bfr >> (stream->bit_number - bits)) & (0xffffffff >> (32 - bits));
+}
+
+extern inline unsigned int mpeg3bits_getbits_reverse(mpeg3_bits_t* stream, int bits)
+{
+ unsigned int result;
+ mpeg3bits_fill_reverse_bits(stream, bits);
+ result = (stream->bfr >> stream->bit_number) & (0xffffffff >> (32 - bits));
+ stream->bit_number += bits;
+ return result;
+}
+
+extern inline unsigned int mpeg3bits_showbits_reverse(mpeg3_bits_t* stream, int bits)
+{
+ unsigned int result;
+ mpeg3bits_fill_reverse_bits(stream, bits);
+ result = (stream->bfr >> stream->bit_number) & (0xffffffff >> (32 - bits));
+ return result;
+}
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/c_flags b/core/multimedia/opieplayer/libmpeg3/c_flags
new file mode 100755
index 0000000..0c8a75d
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/c_flags
@@ -0,0 +1,4 @@
+case "$1" in
+ *.c) echo $CFLAGS_lessopt
+;; *) echo $CFLAGS
+esac
diff --git a/core/multimedia/opieplayer/libmpeg3/configure b/core/multimedia/opieplayer/libmpeg3/configure
new file mode 100755
index 0000000..e75af76
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/configure
@@ -0,0 +1,102 @@
+#!/bin/sh
+
+USE_MMX=1
+USE_CSS=1
+LESS_OPT=
+PLATFORM_CFLAGS="-malign-loops=2 -malign-jumps=2 -malign-functions=2 -march=i486"
+DEBUG=
+OPTIMIZE=-O2
+OPTIMIZE_less=-O
+DEFINES=
+CC=gcc
+
+for ac_option
+do
+case "$ac_option" in
+ --fixed-point)
+ CC=g++
+ DEFINES="$DEFINES -DUSE_FIXED_POINT"
+ ;;
+
+ --lessopt)
+ LESS_OPT=1
+ ;;
+
+ --no-mmx)
+ USE_MMX=0
+ ;;
+
+ --no-css)
+ USE_CSS=0
+ ;;
+
+ --debug)
+ DEBUG=-g
+ ;;
+
+ --gcc-prefix=*)
+ CROSS=${ac_option#--gcc-prefix=}
+ PLATFORM_CFLAGS=""
+ ;;
+ -h | --help | -help)
+ cat << EOF
+Options:
+ --no-mmx Compile libmpeg3 with no MMX support.
+ --no-css Compile libmpeg3 with no CSS support.
+ --fixed-point Compile libmpeg3 to use integers instead of floats.
+ --debug Compile libmpeg3 with debug support.
+EOF
+ exit 0
+ ;;
+
+ *)
+ ;;
+esac
+done
+
+
+echo "Configuring libmpeg3"
+
+cat > global_config << EOF
+# DO NOT EDIT. EDIT ./configure INSTEAD AND RERUN IT.
+EOF
+
+
+if test -z "$CFLAGS"; then
+ CF="$DEFINES $DEBUG -funroll-loops -fomit-frame-pointer $PLATFORM_CFLAGS"
+ echo >> global_config "CFLAGS = $CF $OPTIMIZE"
+ if test -z "$LESS_OPT"; then
+ echo >> global_config "CFLAGS_lessopt = $CF $OPTIMIZE_less"
+ else
+ echo >> global_config "CFLAGS_lessopt = $CF $OPTIMIZE_less"
+ fi
+fi
+
+cat >> global_config << EOF
+CC = ${CROSS}$CC
+AR = ${CROSS}ar
+NASM = nasm
+EOF
+
+if [ ${USE_CSS} = 1 ]; then
+cat >> global_config << EOF
+CFLAGS += -DHAVE_CSS
+EOF
+fi
+
+if [ ${USE_MMX} = 1 ]; then
+cat >> global_config << EOF
+CFLAGS += -DHAVE_MMX
+MMXOBJS = \
+ video/mmxidct.o \
+ video/reconmmx.o
+MMXOBJS2 = \
+ mmxidct.o \
+ reconmmx.o
+EOF
+fi
+
+
+
+
+echo "done"
diff --git a/core/multimedia/opieplayer/libmpeg3/docs/index.html b/core/multimedia/opieplayer/libmpeg3/docs/index.html
new file mode 100644
index 0000000..2d79978
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/docs/index.html
@@ -0,0 +1,306 @@
+<TITLE>LibMPEG3</TITLE>
+
+<CENTER>
+<FONT FACE=HELVETICA SIZE=+4><B>Using LibMPEG3 to make your own MPEG applications</B></FONT><P>
+
+<TABLE>
+<TR>
+<TD>
+<CODE>
+Author: Adam Williams broadcast@earthling.net<BR>
+Homepage: heroinewarrior.com<BR>
+</CODE>
+</TD>
+</TR>
+</TABLE>
+</CENTER>
+
+<P>
+
+
+LibMPEG3 decodes the many many derivatives of MPEG standards into
+uncompressed data suitable for editing and playback.<P>
+
+libmpeg3 currently decodes:<P>
+
+<BLOCKQUOTE>MPEG-2 video<BR>
+MPEG-1 video<BR>
+mp3 audio<BR>
+mp2 audio<BR>
+ac3 audio<BR>
+MPEG-2 system streams<BR>
+MPEG-1 system streams
+</BLOCKQUOTE><P>
+
+The video output can be in many different color models and frame
+sizes. The audio output can be in twos compliment or floating
+point.<P>
+
+
+
+
+
+
+
+
+
+<FONT FACE=HELVETICA SIZE=+4><B>STEP 1: Verifying file compatibility</B></FONT><P>
+
+Programs using libmpeg3 must <CODE>#include "libmpeg3.h"</CODE>.<P>
+
+Call <CODE>mpeg3_check_sig</CODE> to verify if the file can be read by
+libmpeg3. This returns a 1 if it is compatible and 0 if it isn't.<P>
+
+
+
+
+
+
+
+
+
+
+
+<FONT FACE=HELVETICA SIZE=+4><B>STEP 2: Open the file</B></FONT><P>
+
+You need an <CODE>mpeg3_t*</CODE> file descriptor:<P>
+<CODE>
+mpeg3_t* file;
+</CODE>
+<P>
+
+Then you need to open the file:<P>
+
+<CODE>file = mpeg3_open(char *path);</CODE><P>
+
+<CODE>mpeg3_open</CODE> returns a NULL if the file couldn't be opened
+for some reason. Be sure to check this. Everything you do with
+libmpeg3 requires passing the <CODE>file</CODE> pointer.<P>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<FONT FACE=HELVETICA SIZE=+4><B>STEP 3: How many CPUs do you want to use?</B></FONT><P>
+
+Call <CODE>mpeg3_set_cpus(mpeg3_t *file, int cpus)</CODE> to set how
+many CPUs should be devoted to video decompression. LibMPEG3 can use
+any number. If you don't call this right after opening the file, the
+CPU number defaults to 1.<P>
+
+
+
+
+
+
+
+<FONT FACE=HELVETICA SIZE=+4><B>STEP 4: Get some information about the file.</B></FONT><P>
+
+There are a number of queries for the audio components of the stream:<P>
+
+<CODE><PRE>
+int mpeg3_has_audio(mpeg3_t *file);
+int mpeg3_total_astreams(mpeg3_t *file); // Number of multiplexed audio streams
+int mpeg3_audio_channels(mpeg3_t *file, int stream);
+int mpeg3_sample_rate(mpeg3_t *file, int stream);
+long mpeg3_audio_samples(mpeg3_t *file, int stream); // Total length
+</PRE></CODE>
+
+The audio is presented as a number of <B>streams</B> starting at 0 and
+including <CODE>mpeg3_total_astreams</CODE> - 1. Each stream contains a
+certain number of <B>channels</B> starting at 0 and including
+<CODE>mpeg3_audio_channels</CODE> - 1.
+
+The methodology is first determine if the file has audio, then get
+the number of streams in the file, then for each stream get the number
+of channels, sample rate, and length.<P>
+
+There are also queries for the video components:<P>
+
+<CODE><PRE>
+int mpeg3_has_video(mpeg3_t *file);
+int mpeg3_total_vstreams(mpeg3_t *file); // Number of multiplexed video streams
+int mpeg3_video_width(mpeg3_t *file, int stream);
+int mpeg3_video_height(mpeg3_t *file, int stream);
+float mpeg3_frame_rate(mpeg3_t *file, int stream); // Frames/sec
+long mpeg3_video_frames(mpeg3_t *file, int stream); // Total length
+</PRE></CODE>
+
+The video behavior is the same as with audio, except that video has no
+subdivision under <B>streams</B>. Frame rate is a floating point
+number of frames per second.<P>
+
+
+
+
+
+
+
+<FONT FACE=HELVETICA SIZE=+4><B>STEP 5: Seeking to a point in the file</B></FONT><P>
+
+Each audio stream and each video stream has a position in the file
+independant of each other stream. A variety of methods are available
+for specifying the position of a stream: percentage, frame, sample.
+Which method you use depends on whether you're seeking audio or video
+and whether you're seeking all tracks to a percentage of the file.<P>
+
+The preferred seeking method if you're writing a player is:<P>
+
+<CODE><PRE>
+int mpeg3_seek_percentage(mpeg3_t *file, double percentage);
+double mpeg3_tell_percentage(mpeg3_t *file);
+</PRE></CODE>
+
+This seeks all tracks to a percentage of the file length. The
+percentage is from 0 to 1.<P>
+
+The alternative is absolute seeking. The audio seeking is handled
+by:<P>
+
+<CODE><PRE>
+int mpeg3_set_sample(mpeg3_t *file, long sample, int stream); // Seek
+long mpeg3_get_sample(mpeg3_t *file, int stream); // Tell current position
+</PRE></CODE>
+
+and the video seeking is handled by:<P>
+
+<CODE><PRE>
+int mpeg3_set_frame(mpeg3_t *file, long frame, int stream); // Seek
+long mpeg3_get_frame(mpeg3_t *file, int stream); // Tell current position
+</PRE></CODE>
+
+
+You can either perform percentage seeking or absolute seeking but not
+both on the same file handle. Once you perform either method, the file
+becomes configured for that method.<P>
+
+If you're in percentage seeking mode and you want the current time
+stamp in the file you can't use mpeg3_tell_percentage because you don't
+know how many seconds the total length is. The
+<CODE>mpeg3_audio_samples</CODE> and <CODE>mpeg3_video_frames</CODE>
+commands don't work in percentage seeking. Instead use
+
+<CODE><PRE>
+double mpeg3_get_time(mpeg3_t *file);
+</PRE></CODE>
+
+which gives you the last timecode read in seconds. The MPEG standard
+specifies timecodes being placed in the streams.<P>
+
+
+
+
+
+
+
+
+
+
+
+<FONT FACE=HELVETICA SIZE=+4><B>STEP 6: Read the data</B></FONT><P>
+
+To read <B>audio</B> data use:<P>
+
+<CODE><PRE>
+int mpeg3_read_audio(mpeg3_t *file,
+ float *output_f, // Pointer to pre-allocated buffer of floats
+ short *output_i, // Pointer to pre-allocated buffer if int16's
+ int channel, // Channel to decode
+ long samples, // Number of samples to decode
+ int stream); // Stream containing the channel
+</PRE></CODE>
+
+This decodes a buffer of sequential floats or int16's for a single
+channel, depending on which *output... parameter has a nonzero
+argument. To get a floating point buffer pass a pre-allocated buffer
+to <CODE>output_f</CODE> and NULL to <CODE>output_i</CODE>. To get an
+int16 buffer pass NULL to <CODE>output_f</CODE> and a pre-allocated
+buffer to <CODE>output_i</CODE>.<P>
+
+After reading an audio buffer, the current position in the one stream
+is advanced. How then, do you read more than one channel of audio
+data? Use
+
+<CODE><PRE>
+mpeg3_reread_audio(mpeg3_t *file,
+ float *output_f, /* Pointer to pre-allocated buffer of floats */
+ short *output_i, /* Pointer to pre-allocated buffer of int16's */
+ int channel, /* Channel to decode */
+ long samples, /* Number of samples to decode */
+ int stream);
+</PRE></CODE>
+
+to read each remaining channel after the first channel.<P>
+
+To read <B>video</B> data there are two methods. RGB frames or YUV
+frames. To get an RGB frame use:<BR>
+
+<CODE><PRE>
+int mpeg3_read_frame(mpeg3_t *file,
+ unsigned char **output_rows, // Array of pointers to the start of each output row
+ int in_x, // Location in input frame to take picture
+ int in_y,
+ int in_w,
+ int in_h,
+ int out_w, // Dimensions of output_rows
+ int out_h,
+ int color_model, // One of the color model #defines given above.
+ int stream);
+</PRE></CODE>
+
+The video decoding works like a camcorder taking copy of a movie
+screen. The decoder "sees" a region of the movie screen defined by
+<CODE>in_x, in_y, in_w, in_h</CODE> and transfers it to the frame
+buffer defined by <CODE>**output_rows</CODE>. The input values must be
+within the boundaries given by <CODE>mpeg3_video_width</CODE> and
+<CODE>mpeg3_video_height</CODE>. The size of the frame buffer is
+defined by <CODE>out_w, out_h</CODE>. Although the input dimensions
+are constrained, the frame buffer can be any size.<P>
+
+<CODE>color_model</CODE> defines which RGB color model the picture
+should be decoded to and the possible values are given in
+<B>libmpeg3.h</B>. The frame buffer pointed to by
+<CODE>output_rows</CODE> must have enough memory allocated to store the
+color model you select.<P>
+
+<B>You must allocate 4 extra bytes in the last output_row.</B> This is
+scratch area for the MMX routines.<P>
+
+<CODE>mpeg3_read_frame</CODE> advances the position in the one stream by 1 frame.<P>
+
+The alternative is YUV frames:<BR>
+
+<CODE><PRE>
+int mpeg3_read_yuvframe(mpeg3_t *file,
+ char *y_output,
+ char *u_output,
+ char *v_output,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h,
+ int stream);
+</PRE></CODE>
+
+The behavior of in_x, in_y, in_w, in_h is identical to mpeg3_read_frame
+except here you have no control over the output frame size. <B>You
+must allocate in_w * in_h for the y_output, and in_w * in_h / 4 for the
+chroma outputs.</B><P>
+
+
+
+
+
+<FONT FACE=HELVETICA SIZE=+4><B>STEP 7: Close the file</B></FONT><P>
+
+Be sure to close the file with <CODE>mpeg3_close(mpeg3_t *file)</CODE>
+when you're done with it.
diff --git a/core/multimedia/opieplayer/libmpeg3/dump.c b/core/multimedia/opieplayer/libmpeg3/dump.c
new file mode 100644
index 0000000..7158712
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/dump.c
@@ -0,0 +1,79 @@
+#include "libmpeg3.h"
+#include <stdlib.h>
+
+#define BUFSIZE 4096
+
+int main(int argc, char *argv[])
+{
+ mpeg3_t *file;
+ int i, result = 0;
+ unsigned char *output, **output_rows;
+ float *audio_output_f;
+ short *audio_output_i;
+ long total_samples = 0;
+
+ if(argc < 2)
+ {
+ printf("Need an MPEG stream.\n");
+ exit(1);
+ }
+
+ file = mpeg3_open(argv[1]);
+ if(file)
+ {
+ fprintf(stderr, "MMX supported %d\n", file->have_mmx);
+ fprintf(stderr, "Audio streams: %d\n", mpeg3_total_astreams(file));
+ for(i = 0; i < mpeg3_total_astreams(file); i++)
+ {
+ fprintf(stderr, " Stream %d: channels %d sample rate %d total samples %ld\n",
+ i,
+ mpeg3_audio_channels(file, i),
+ mpeg3_sample_rate(file, i),
+ mpeg3_audio_samples(file, i));
+ }
+ fprintf(stderr, "Video streams: %d\n", mpeg3_total_vstreams(file));
+ for(i = 0; i < mpeg3_total_vstreams(file); i++)
+ {
+ fprintf(stderr, " Stream %d: width %d height %d frame rate %0.3f total frames %ld\n",
+ i,
+ mpeg3_video_width(file, i),
+ mpeg3_video_height(file, i),
+ mpeg3_frame_rate(file, i),
+ mpeg3_video_frames(file, i));
+ }
+fprintf(stderr,"S");
+
+ mpeg3_set_cpus(file, 1);
+fprintf(stderr,"s");
+/* audio_output_f = malloc(BUFSIZE * sizeof(float)); */
+ audio_output_i = (short*)malloc(BUFSIZE * 2 * sizeof(short));
+fprintf(stderr,"x");
+/* mpeg3_set_sample(file, 11229518, 0); */
+ /*result = mpeg3_read_audio(file, audio_output_f, 0, 0, BUFSIZE, 0);*/
+ for (i=0; i<100; i++) {
+fprintf(stderr,"c");
+ result = mpeg3_read_audio(file, 0, audio_output_i, 0, BUFSIZE, 0);
+fprintf(stderr,"read\n");
+ }
+ //fwrite(audio_output_i, BUFSIZE, 1, stdout);
+
+ output = (unsigned char*)malloc(mpeg3_video_width(file, 0) * mpeg3_video_height(file, 0) * 3 + 4);
+ output_rows = (unsigned char**)malloc(sizeof(unsigned char*) * mpeg3_video_height(file, 0));
+ for(i = 0; i < mpeg3_video_height(file, 0); i++)
+ output_rows[i] = &output[i * mpeg3_video_width(file, 0) * 3];
+// mpeg3_set_frame(file, 1000, 0);
+ result = mpeg3_read_frame(file,
+ output_rows,
+ 0,
+ 0,
+ mpeg3_video_width(file, 0),
+ mpeg3_video_height(file, 0),
+ mpeg3_video_width(file, 0),
+ mpeg3_video_height(file, 0),
+ MPEG3_RGB888,
+ 0);
+
+ mpeg3_close(file);
+ }
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3.c b/core/multimedia/opieplayer/libmpeg3/libmpeg3.c
new file mode 100644
index 0000000..c0fc570
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3.c
@@ -0,0 +1,672 @@
+#include "libmpeg3.h"
+#include "mpeg3protos.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+mpeg3_t* mpeg3_new(char *path)
+{
+ int i;
+ mpeg3_t *file = (mpeg3_t*)calloc(1, sizeof(mpeg3_t));
+ file->cpus = 1;
+ file->fs = mpeg3_new_fs(path);
+ file->have_mmx = mpeg3_mmx_test();
+ file->demuxer = mpeg3_new_demuxer(file, 0, 0, -1);
+ return file;
+}
+
+int mpeg3_delete(mpeg3_t *file)
+{
+ int i;
+
+ for(i = 0; i < file->total_vstreams; i++)
+ mpeg3_delete_vtrack(file, file->vtrack[i]);
+
+ for(i = 0; i < file->total_astreams; i++)
+ mpeg3_delete_atrack(file, file->atrack[i]);
+
+ mpeg3_delete_fs(file->fs);
+ mpeg3_delete_demuxer(file->demuxer);
+ free(file);
+}
+
+int mpeg3_check_sig(char *path)
+{
+ mpeg3_fs_t *fs;
+ unsigned int bits;
+ char *ext;
+ int result = 0;
+
+ fs = mpeg3_new_fs(path);
+ if(mpeg3io_open_file(fs))
+ {
+/* File not found */
+ return 0;
+ }
+
+ bits = mpeg3io_read_int32(fs);
+/* Test header */
+ if(bits == MPEG3_TOC_PREFIX || bits == MPEG3_TOC_PREFIXLOWER)
+ {
+ result = 1;
+ }
+ else
+ if((((bits >> 24) & 0xff) == MPEG3_SYNC_BYTE) ||
+ (bits == MPEG3_PACK_START_CODE) ||
+ ((bits & 0xfff00000) == 0xfff00000) ||
+ (bits == MPEG3_SEQUENCE_START_CODE) ||
+ (bits == MPEG3_PICTURE_START_CODE) ||
+ (((bits & 0xffff0000) >> 16) == MPEG3_AC3_START_CODE) ||
+ ((bits >> 8) == MPEG3_ID3_PREFIX) ||
+ (bits == MPEG3_RIFF_CODE))
+ {
+ result = 1;
+
+ ext = strrchr(path, '.');
+ if(ext)
+ {
+/* Test file extension. */
+ if(strncasecmp(ext, ".mp2", 4) &&
+ strncasecmp(ext, ".mp3", 4) &&
+ strncasecmp(ext, ".m1v", 4) &&
+ strncasecmp(ext, ".m2v", 4) &&
+ strncasecmp(ext, ".m2s", 4) &&
+ strncasecmp(ext, ".mpg", 4) &&
+ strncasecmp(ext, ".vob", 4) &&
+ strncasecmp(ext, ".mpeg", 4) &&
+ strncasecmp(ext, ".ac3", 4))
+ result = 0;
+ }
+ }
+
+ mpeg3io_close_file(fs);
+ mpeg3_delete_fs(fs);
+ return result;
+}
+
+mpeg3_t* mpeg3_open_copy(char *path, mpeg3_t *old_file)
+{
+ mpeg3_t *file = 0;
+ unsigned int bits;
+ int i, done;
+
+/* Initialize the file structure */
+ file = mpeg3_new(path);
+
+/* Need to perform authentication before reading a single byte. */
+ if(mpeg3io_open_file(file->fs))
+ {
+ mpeg3_delete(file);
+ return 0;
+ }
+
+/* =============================== Create the title objects ========================= */
+ bits = mpeg3io_read_int32(file->fs);
+
+ if(bits == MPEG3_TOC_PREFIX || bits == MPEG3_TOC_PREFIXLOWER) /* TOCV */
+ {
+/* Table of contents for another file */
+ if(mpeg3_read_toc(file))
+ {
+ mpeg3_delete(file);
+ return 0;
+ }
+ mpeg3io_close_file(file->fs);
+ }
+ else
+ if(((bits >> 24) & 0xff) == MPEG3_SYNC_BYTE)
+ {
+/* Transport stream */
+ file->packet_size = MPEG3_TS_PACKET_SIZE;
+ file->is_transport_stream = 1;
+ }
+ else
+ if(bits == MPEG3_PACK_START_CODE)
+ {
+/* Program stream */
+ file->packet_size = MPEG3_DVD_PACKET_SIZE;
+ file->is_program_stream = 1;
+ }
+ else
+ if((bits & 0xfff00000) == 0xfff00000 ||
+ ((bits >> 8) == MPEG3_ID3_PREFIX) ||
+ (bits == MPEG3_RIFF_CODE))
+ {
+/* MPEG Audio only */
+ file->packet_size = MPEG3_DVD_PACKET_SIZE;
+ file->has_audio = 1;
+ file->is_audio_stream = 1;
+ }
+ else
+ if(bits == MPEG3_SEQUENCE_START_CODE ||
+ bits == MPEG3_PICTURE_START_CODE)
+ {
+/* Video only */
+ file->packet_size = MPEG3_DVD_PACKET_SIZE;
+ file->is_video_stream = 1;
+ }
+ else
+ if(((bits & 0xffff0000) >> 16) == MPEG3_AC3_START_CODE)
+ {
+/* AC3 Audio only */
+ file->packet_size = MPEG3_DVD_PACKET_SIZE;
+ file->has_audio = 1;
+ file->is_audio_stream = 1;
+ }
+ else
+ {
+/* file->packet_size = MPEG3_DVD_PACKET_SIZE; */
+/* file->is_audio_stream = 1; */
+ mpeg3_delete(file);
+ fprintf(stderr, "mpeg3_open: not an MPEG 2 stream\n");
+ return 0;
+ }
+
+/* Create title */
+/* Copy timecodes from an old demuxer */
+ if(old_file && mpeg3_get_demuxer(old_file))
+ {
+ mpeg3demux_copy_titles(file->demuxer, mpeg3_get_demuxer(old_file));
+ }
+ else
+/* Start from scratch */
+ if(!file->demuxer->total_titles)
+ {
+ mpeg3demux_create_title(file->demuxer, 0, 0);
+ }
+
+/* =============================== Get title information ========================= */
+ if(file->is_transport_stream || file->is_program_stream)
+ {
+/* Create video tracks */
+/* Video must be created before audio because audio uses the video timecode */
+/* to get its length. */
+ for(i = 0; i < MPEG3_MAX_STREAMS; i++)
+ {
+ if(file->demuxer->vstream_table[i])
+ {
+ file->vtrack[file->total_vstreams] = mpeg3_new_vtrack(file, i, file->demuxer);
+ if(file->vtrack[file->total_vstreams]) file->total_vstreams++;
+ }
+ }
+
+/* Create audio tracks */
+ for(i = 0; i < MPEG3_MAX_STREAMS; i++)
+ {
+ if(file->demuxer->astream_table[i])
+ {
+ file->atrack[file->total_astreams] = mpeg3_new_atrack(file,
+ i,
+ file->demuxer->astream_table[i],
+ file->demuxer);
+ if(file->atrack[file->total_astreams]) file->total_astreams++;
+ }
+ }
+ }
+ else
+ if(file->is_video_stream)
+ {
+/* Create video tracks */
+ file->vtrack[0] = mpeg3_new_vtrack(file, -1, file->demuxer);
+ if(file->vtrack[0]) file->total_vstreams++;
+ }
+ else
+ if(file->is_audio_stream)
+ {
+/* Create audio tracks */
+ file->atrack[0] = mpeg3_new_atrack(file, -1, AUDIO_UNKNOWN, file->demuxer);
+ if(file->atrack[0]) file->total_astreams++;
+ }
+
+ if(file->total_vstreams) file->has_video = 1;
+ if(file->total_astreams) file->has_audio = 1;
+
+ mpeg3io_close_file(file->fs);
+ return file;
+}
+
+mpeg3_t* mpeg3_open(char *path)
+{
+ return mpeg3_open_copy(path, 0);
+}
+
+int mpeg3_close(mpeg3_t *file)
+{
+/* File is closed in the same procedure it is opened in. */
+ mpeg3_delete(file);
+ return 0;
+}
+
+int mpeg3_set_cpus(mpeg3_t *file, int cpus)
+{
+ int i;
+ file->cpus = cpus;
+ for(i = 0; i < file->total_vstreams; i++)
+ mpeg3video_set_cpus(file->vtrack[i]->video, cpus);
+ return 0;
+}
+
+int mpeg3_set_mmx(mpeg3_t *file, int use_mmx)
+{
+ int i;
+ file->have_mmx = use_mmx;
+ for(i = 0; i < file->total_vstreams; i++)
+ mpeg3video_set_mmx(file->vtrack[i]->video, use_mmx);
+ return 0;
+}
+
+int mpeg3_generate_toc(FILE *output, char *path, int timecode_search, int print_streams)
+{
+ mpeg3_t *file = mpeg3_open(path);
+ mpeg3_demuxer_t *demuxer;
+ int i;
+
+ if(file)
+ {
+ fprintf(output, "TOCVERSION 2\n"
+ "PATH: %s\n", path);
+ demuxer = mpeg3_new_demuxer(file, 0, 0, -1);
+ mpeg3demux_create_title(demuxer, timecode_search, output);
+/* Just print the first title's streams */
+ if(print_streams) mpeg3demux_print_streams(demuxer, output);
+
+ fprintf(output, "SIZE: %ld\n", demuxer->titles[demuxer->current_title]->total_bytes);
+ fprintf(output, "PACKETSIZE: %ld\n", demuxer->packet_size);
+
+ mpeg3demux_print_timecodes(demuxer->titles[demuxer->current_title], output);
+
+ mpeg3_delete_demuxer(demuxer);
+ mpeg3_close(file);
+ return 0;
+ }
+ return 1;
+}
+
+int mpeg3_read_toc(mpeg3_t *file)
+{
+ char string[MPEG3_STRLEN];
+ int number1;
+
+/* Test version number */
+ file->is_program_stream = 1;
+ mpeg3io_seek(file->fs, 0);
+ fscanf(file->fs->fd, "%s %d", string, &number1);
+ if(number1 > 2 || number1 < 2) return 1;
+
+/* Read titles */
+ mpeg3demux_read_titles(file->demuxer);
+ return 0;
+}
+
+int mpeg3_has_audio(mpeg3_t *file)
+{
+ return file->has_audio;
+}
+
+int mpeg3_total_astreams(mpeg3_t *file)
+{
+ return file->total_astreams;
+}
+
+int mpeg3_audio_channels(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_audio)
+ return file->atrack[stream]->channels;
+ return -1;
+}
+
+int mpeg3_sample_rate(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_audio)
+ return file->atrack[stream]->sample_rate;
+ return -1;
+}
+
+long mpeg3_get_sample(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_audio)
+ return file->atrack[stream]->current_position;
+ return -1;
+}
+
+int mpeg3_set_sample(mpeg3_t *file,
+ long sample,
+ int stream)
+{
+ if(file->has_audio)
+ {
+ file->atrack[stream]->current_position = sample;
+ mpeg3audio_seek_sample(file->atrack[stream]->audio, sample);
+ return 0;
+ }
+ return -1;
+}
+
+long mpeg3_audio_samples(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_audio)
+ return file->atrack[stream]->total_samples;
+ return -1;
+}
+
+int mpeg3_has_video(mpeg3_t *file)
+{
+ return file->has_video;
+}
+
+int mpeg3_total_vstreams(mpeg3_t *file)
+{
+ return file->total_vstreams;
+}
+
+int mpeg3_video_width(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_video)
+ return file->vtrack[stream]->width;
+ return -1;
+}
+
+int mpeg3_video_height(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_video)
+ return file->vtrack[stream]->height;
+ return -1;
+}
+
+float mpeg3_frame_rate(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_video)
+ return file->vtrack[stream]->frame_rate;
+ return -1;
+}
+
+long mpeg3_video_frames(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_video)
+ return file->vtrack[stream]->total_frames;
+ return -1;
+}
+
+long mpeg3_get_frame(mpeg3_t *file,
+ int stream)
+{
+ if(file->has_video)
+ return file->vtrack[stream]->current_position;
+ return -1;
+}
+
+int mpeg3_set_frame(mpeg3_t *file,
+ long frame,
+ int stream)
+{
+ if(file->has_video)
+ {
+ file->vtrack[stream]->current_position = frame;
+ mpeg3video_seek_frame(file->vtrack[stream]->video, frame);
+ return 0;
+ }
+ return -1;
+}
+
+int mpeg3_seek_percentage(mpeg3_t *file, double percentage)
+{
+ int i;
+ for(i = 0; i < file->total_astreams; i++)
+ {
+ mpeg3audio_seek_percentage(file->atrack[i]->audio, percentage);
+ }
+
+ for(i = 0; i < file->total_vstreams; i++)
+ {
+ mpeg3video_seek_percentage(file->vtrack[i]->video, percentage);
+ }
+ return 0;
+}
+
+int mpeg3_previous_frame(mpeg3_t *file, int stream)
+{
+ file->last_type_read = 2;
+ file->last_stream_read = stream;
+
+ if(file->has_video)
+ return mpeg3video_previous_frame(file->vtrack[stream]->video);
+}
+
+double mpeg3_tell_percentage(mpeg3_t *file)
+{
+ double percent = 0;
+ if(file->last_type_read == 1)
+ {
+ percent = mpeg3demux_tell_percentage(file->atrack[file->last_stream_read]->demuxer);
+ }
+
+ if(file->last_type_read == 2)
+ {
+ percent = mpeg3demux_tell_percentage(file->vtrack[file->last_stream_read]->demuxer);
+ }
+ return percent;
+}
+
+double mpeg3_get_time(mpeg3_t *file)
+{
+ double atime = 0, vtime = 0;
+
+ if(file->is_transport_stream || file->is_program_stream)
+ {
+/* Timecode only available in transport stream */
+ if(file->last_type_read == 1)
+ {
+ atime = mpeg3demux_get_time(file->atrack[file->last_stream_read]->demuxer);
+ }
+ else
+ if(file->last_type_read == 2)
+ {
+ vtime = mpeg3demux_get_time(file->vtrack[file->last_stream_read]->demuxer);
+ }
+ }
+ else
+ {
+/* Use percentage and total time */
+ if(file->has_audio)
+ {
+ atime = mpeg3demux_tell_percentage(file->atrack[0]->demuxer) *
+ mpeg3_audio_samples(file, 0) / mpeg3_sample_rate(file, 0);
+ }
+
+ if(file->has_video)
+ {
+ vtime = mpeg3demux_tell_percentage(file->vtrack[0]->demuxer) *
+ mpeg3_video_frames(file, 0) / mpeg3_frame_rate(file, 0);
+ }
+ }
+
+ return MAX(atime, vtime);
+}
+
+int mpeg3_end_of_audio(mpeg3_t *file, int stream)
+{
+ int result = 0;
+ result = mpeg3demux_eof(file->atrack[stream]->demuxer);
+ return result;
+}
+
+int mpeg3_end_of_video(mpeg3_t *file, int stream)
+{
+ int result = 0;
+ result = mpeg3demux_eof(file->vtrack[stream]->demuxer);
+ return result;
+}
+
+
+int mpeg3_read_frame(mpeg3_t *file,
+ unsigned char **output_rows,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h,
+ int out_w,
+ int out_h,
+ int color_model,
+ int stream)
+{
+ int result = -1;
+
+ if(file->has_video)
+ {
+ result = mpeg3video_read_frame(file->vtrack[stream]->video,
+ file->vtrack[stream]->current_position,
+ output_rows,
+ in_x,
+ in_y,
+ in_w,
+ in_h,
+ out_w,
+ out_h,
+ color_model);
+ file->last_type_read = 2;
+ file->last_stream_read = stream;
+ file->vtrack[stream]->current_position++;
+ }
+ return result;
+}
+
+int mpeg3_drop_frames(mpeg3_t *file, long frames, int stream)
+{
+ int result = -1;
+
+ if(file->has_video)
+ {
+ result = mpeg3video_drop_frames(file->vtrack[stream]->video,
+ frames);
+ if(frames > 0) file->vtrack[stream]->current_position += frames;
+ file->last_type_read = 2;
+ file->last_stream_read = stream;
+ }
+ return result;
+}
+
+int mpeg3_read_yuvframe(mpeg3_t *file,
+ char *y_output,
+ char *u_output,
+ char *v_output,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h,
+ int stream)
+{
+ int result = -1;
+
+//printf("mpeg3_read_yuvframe 1 %d %d\n", mpeg3demux_tell(file->vtrack[stream]->demuxer), mpeg3demuxer_total_bytes(file->vtrack[stream]->demuxer));
+ if(file->has_video)
+ {
+ result = mpeg3video_read_yuvframe(file->vtrack[stream]->video,
+ file->vtrack[stream]->current_position,
+ y_output,
+ u_output,
+ v_output,
+ in_x,
+ in_y,
+ in_w,
+ in_h);
+ file->last_type_read = 2;
+ file->last_stream_read = stream;
+ file->vtrack[stream]->current_position++;
+ }
+//printf("mpeg3_read_yuvframe 2 %d %d\n", mpeg3demux_tell(file->vtrack[stream]->demuxer), mpeg3demuxer_total_bytes(file->vtrack[stream]->demuxer));
+ return result;
+}
+
+
+int mpeg3_read_audio(mpeg3_t *file,
+ mpeg3_real_t *output_f,
+ short *output_i, int sampleSpacing,
+ int channel,
+ long samples,
+ int stream)
+{
+ int result = -1;
+
+//printf("mpeg3_read_audio 1 %d %d\n", mpeg3demux_tell(file->atrack[stream]->demuxer), mpeg3demuxer_total_bytes(file->atrack[stream]->demuxer));
+ if(file->has_audio)
+ {
+ result = mpeg3audio_decode_audio(file->atrack[stream]->audio,
+ output_f,
+ output_i, sampleSpacing,
+ channel,
+ file->atrack[stream]->current_position,
+ samples);
+ file->last_type_read = 1;
+ file->last_stream_read = stream;
+ file->atrack[stream]->current_position += samples;
+ }
+//printf("mpeg3_read_audio 2 %d %d\n", mpeg3demux_tell(file->atrack[stream]->demuxer), mpeg3demuxer_total_bytes(file->atrack[stream]->demuxer));
+
+ return result;
+}
+
+int mpeg3_reread_audio(mpeg3_t *file,
+ mpeg3_real_t *output_f,
+ short *output_i, int sampleSpacing,
+ int channel,
+ long samples,
+ int stream)
+{
+ if(file->has_audio)
+ {
+ mpeg3_set_sample(file,
+ file->atrack[stream]->current_position - samples,
+ stream);
+ file->last_type_read = 1;
+ file->last_stream_read = stream;
+ return mpeg3_read_audio(file,
+ output_f,
+ output_i, sampleSpacing,
+ channel,
+ samples,
+ stream);
+ }
+ return -1;
+}
+
+int mpeg3_read_audio_chunk(mpeg3_t *file,
+ unsigned char *output,
+ long *size,
+ long max_size,
+ int stream)
+{
+ int result = 0;
+ if(file->has_audio)
+ {
+ result = mpeg3audio_read_raw(file->atrack[stream]->audio, output, size, max_size);
+ file->last_type_read = 1;
+ file->last_stream_read = stream;
+ }
+ return result;
+}
+
+int mpeg3_read_video_chunk(mpeg3_t *file,
+ unsigned char *output,
+ long *size,
+ long max_size,
+ int stream)
+{
+ int result = 0;
+ if(file->has_video)
+ {
+ result = mpeg3video_read_raw(file->vtrack[stream]->video, output, size, max_size);
+ file->last_type_read = 2;
+ file->last_stream_read = stream;
+ }
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3.h b/core/multimedia/opieplayer/libmpeg3/libmpeg3.h
new file mode 100644
index 0000000..f4eced4
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3.h
@@ -0,0 +1,175 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIBMPEG3_H
+#define LIBMPEG3_H
+
+#include "mpeg3private.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/* Supported color models for mpeg3_read_frame */
+#define MPEG3_RGB565 2
+#define MPEG3_BGR888 0
+#define MPEG3_BGRA8888 1
+#define MPEG3_RGB888 3
+#define MPEG3_RGBA8888 4
+#define MPEG3_RGBA16161616 5
+
+/* Color models for the 601 to RGB conversion */
+/* 601 not implemented for scalar code */
+#define MPEG3_601_RGB565 11
+#define MPEG3_601_BGR888 7
+#define MPEG3_601_BGRA8888 8
+#define MPEG3_601_RGB888 9
+#define MPEG3_601_RGBA8888 10
+
+/* Check for file compatibility. Return 1 if compatible. */
+LIBMPEG_EXPORT int mpeg3_check_sig(char *path);
+
+/* Open the MPEG3 stream. */
+LIBMPEG_EXPORT mpeg3_t* mpeg3_open(char *path);
+
+/* Open the MPEG3 stream and copy the tables from an already open stream. */
+/* Eliminates the initial timecode search. */
+LIBMPEG_EXPORT mpeg3_t* mpeg3_open_copy(char *path, mpeg3_t *old_file);
+LIBMPEG_EXPORT int mpeg3_close(mpeg3_t *file);
+
+/* Performance */
+LIBMPEG_EXPORT int mpeg3_set_cpus(mpeg3_t *file, int cpus);
+LIBMPEG_EXPORT int mpeg3_set_mmx(mpeg3_t *file, int use_mmx);
+
+/* Query the MPEG3 stream about audio. */
+LIBMPEG_EXPORT int mpeg3_has_audio(mpeg3_t *file);
+LIBMPEG_EXPORT int mpeg3_total_astreams(mpeg3_t *file); /* Number of multiplexed audio streams */
+LIBMPEG_EXPORT int mpeg3_audio_channels(mpeg3_t *file, int stream);
+LIBMPEG_EXPORT int mpeg3_sample_rate(mpeg3_t *file, int stream);
+
+/* Total length obtained from the timecode. */
+/* For DVD files, this is unreliable. */
+LIBMPEG_EXPORT long mpeg3_audio_samples(mpeg3_t *file, int stream);
+LIBMPEG_EXPORT int mpeg3_set_sample(mpeg3_t *file, long sample, int stream); /* Seek to a sample */
+LIBMPEG_EXPORT long mpeg3_get_sample(mpeg3_t *file, int stream); /* Tell current position */
+
+/* Read a PCM buffer of audio from 1 channel and advance the position. */
+/* Return a 1 if error. */
+/* Stream defines the number of the multiplexed stream to read. */
+LIBMPEG_EXPORT int mpeg3_read_audio(mpeg3_t *file,
+ mpeg3_real_t *output_f, /* Pointer to pre-allocated buffer of floats */
+ short *output_i, /* Pointer to pre-allocated buffer of int16's */
+ int sampleSpacing, // how many bytes to skip over inbetween samples
+ int channel, /* Channel to decode */
+ long samples, /* Number of samples to decode */
+ int stream); /* Stream containing the channel */
+
+/* Reread the last PCM buffer from a different channel and advance the position */
+LIBMPEG_EXPORT int mpeg3_reread_audio(mpeg3_t *file,
+ mpeg3_real_t *output_f, /* Pointer to pre-allocated buffer of floats */
+ short *output_i, /* Pointer to pre-allocated buffer of int16's */
+ int sampleSpacing, // how many bytes to skip over inbetween samples
+ int channel, /* Channel to decode */
+ long samples, /* Number of samples to decode */
+ int stream); /* Stream containing the channel */
+
+/* Read the next compressed audio chunk. Store the size in size and return a */
+/* 1 if error. */
+/* Stream defines the number of the multiplexed stream to read. */
+LIBMPEG_EXPORT int mpeg3_read_audio_chunk(mpeg3_t *file,
+ unsigned char *output,
+ long *size,
+ long max_size,
+ int stream);
+
+/* Query the stream about video. */
+LIBMPEG_EXPORT int mpeg3_has_video(mpeg3_t *file);
+LIBMPEG_EXPORT int mpeg3_total_vstreams(mpeg3_t *file); /* Number of multiplexed video streams */
+LIBMPEG_EXPORT int mpeg3_video_width(mpeg3_t *file, int stream);
+LIBMPEG_EXPORT int mpeg3_video_height(mpeg3_t *file, int stream);
+LIBMPEG_EXPORT float mpeg3_frame_rate(mpeg3_t *file, int stream); /* Frames/sec */
+
+/* Total length. */
+/* For DVD files, this is 1 indicating only percentage seeking is available. */
+LIBMPEG_EXPORT long mpeg3_video_frames(mpeg3_t *file, int stream);
+LIBMPEG_EXPORT int mpeg3_set_frame(mpeg3_t *file, long frame, int stream); /* Seek to a frame */
+LIBMPEG_EXPORT int mpeg3_skip_frames();
+LIBMPEG_EXPORT long mpeg3_get_frame(mpeg3_t *file, int stream); /* Tell current position */
+
+/* Seek all the tracks based on a percentage of the total bytes in the */
+/* file or the total */
+/* time in a toc if one exists. Percentage is a 0 to 1 double. */
+/* This eliminates the need for tocs and 64 bit longs but doesn't */
+/* give frame accuracy. */
+LIBMPEG_EXPORT int mpeg3_seek_percentage(mpeg3_t *file, double percentage);
+LIBMPEG_EXPORT double mpeg3_tell_percentage(mpeg3_t *file);
+LIBMPEG_EXPORT int mpeg3_previous_frame(mpeg3_t *file, int stream);
+LIBMPEG_EXPORT int mpeg3_end_of_audio(mpeg3_t *file, int stream);
+LIBMPEG_EXPORT int mpeg3_end_of_video(mpeg3_t *file, int stream);
+
+/* Give the seconds time in the last packet read */
+LIBMPEG_EXPORT double mpeg3_get_time(mpeg3_t *file);
+
+/* Read a frame. The dimensions of the input area and output frame must be supplied. */
+/* The frame is taken from the input area and scaled to fit the output frame in 1 step. */
+/* Stream defines the number of the multiplexed stream to read. */
+/* The last row of **output_rows must contain 4 extra bytes for scratch work. */
+LIBMPEG_EXPORT int mpeg3_read_frame(mpeg3_t *file,
+ unsigned char **output_rows, /* Array of pointers to the start of each output row */
+ int in_x, /* Location in input frame to take picture */
+ int in_y,
+ int in_w,
+ int in_h,
+ int out_w, /* Dimensions of output_rows */
+ int out_h,
+ int color_model, /* One of the color model #defines */
+ int stream);
+
+/* Read a YUV frame. The 3 planes are copied into the y, u, and v buffers provided. */
+/* The input is cropped to the dimensions given but not scaled. */
+LIBMPEG_EXPORT int mpeg3_read_yuvframe(mpeg3_t *file,
+ char *y_output,
+ char *u_output,
+ char *v_output,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h,
+ int stream);
+
+LIBMPEG_EXPORT int mpeg3_drop_frames(mpeg3_t *file, long frames, int stream);
+
+/* Read the next compressed frame including headers. */
+/* Store the size in size and return a 1 if error. */
+/* Stream defines the number of the multiplexed stream to read. */
+LIBMPEG_EXPORT int mpeg3_read_video_chunk(mpeg3_t *file,
+ unsigned char *output,
+ long *size,
+ long max_size,
+ int stream);
+
+/* Master control */
+LIBMPEG_EXPORT int mpeg3_total_programs();
+LIBMPEG_EXPORT int mpeg3_set_program(int program);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3.pro b/core/multimedia/opieplayer/libmpeg3/libmpeg3.pro
new file mode 100644
index 0000000..e2c35d3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3.pro
@@ -0,0 +1,42 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = libmpeg3plugin.h libmpeg3pluginimpl.h
+SOURCES = libmpeg3plugin.cpp libmpeg3pluginimpl.cpp \
+ bitstream.c \
+ libmpeg3.c \
+ mpeg3atrack.c \
+ mpeg3css.c \
+ mpeg3demux.c \
+ mpeg3io.c \
+ mpeg3title.c \
+ mpeg3vtrack.c \
+ audio/ac3.c \
+ audio/bit_allocation.c \
+ audio/dct.c \
+ audio/exponents.c \
+ audio/header.c \
+ audio/layer2.c \
+ audio/layer3.c \
+ audio/mantissa.c \
+ audio/mpeg3audio.c \
+ audio/pcm.c \
+ audio/synthesizers.c \
+ audio/tables.c \
+ video/getpicture.c \
+ video/headers.c \
+ video/idct.c \
+ video/macroblocks.c \
+ video/mmxtest.c \
+ video/motion.c \
+ video/mpeg3video.c \
+ video/output.c \
+ video/reconstruct.c \
+ video/seek.c \
+ video/slice.c \
+ video/vlc.c
+TARGET = mpeg3plugin
+DESTDIR = ../../plugins/codecs
+INCLUDEPATH += $(QPEDIR)/include ..
+DEPENDPATH += ../$(QPEDIR)/include ..
+LIBS += -lqpe -lpthread -lm
+VERSION = 1.0.0
diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.cpp b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.cpp
new file mode 100644
index 0000000..044cb4a
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.cpp
@@ -0,0 +1,105 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "libmpeg3plugin.h"
+
+/*
+bool LibMpeg3Plugin::audioReadSamples( short *output, int channel, long samples, int stream ) {
+ return file ? mpeg3_read_audio( file, 0, output, 0, channel, samples, stream ) == 1 : FALSE;
+}
+
+
+bool LibMpeg3Plugin::audioReReadSamples( short *output, int channel, long samples, int stream ) {
+ return file ? mpeg3_reread_audio( file, 0, output, 0, channel, samples, stream ) == 1 : FALSE;
+}
+
+
+bool LibMpeg3Plugin::audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream ) {
+ samplesRead = samples;
+ return file ? mpeg3_read_audio( file, 0, output, 0, 0, samples, stream ) == 1 : FALSE;
+}
+
+
+bool LibMpeg3Plugin::audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream ) {
+ bool err = FALSE;
+ if ( file ) {
+#if 1
+ err = mpeg3_read_audio ( file, 0, output, 1, 0, samples, stream ) == 1;
+ if ( err == FALSE ) {
+ err = mpeg3_reread_audio( file, 0, output + 1, 1, 1, samples, stream ) == 1;
+#else
+ short left[samples];
+ short right[samples];
+ err = mpeg3_read_audio ( file, 0, left, 0, samples, stream ) == 1;
+ if ( !err )
+ err = mpeg3_reread_audio( file, 0, right, 1, samples, stream ) == 1;
+ for ( int j = 0; j < samples; j++ ) {
+ output[j*2+0] = left[j];
+ output[j*2+1] = right[j];
+#endif
+ }
+ }
+ samplesRead = samples;
+ return err;
+}
+*/
+
+bool LibMpeg3Plugin::audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream ) {
+ samplesRead = samples;
+ switch ( channels ) {
+ case 1:
+ return file ? mpeg3_read_audio( file, 0, output, 0, 0, samples, stream ) == 1 : FALSE;
+ case 2:
+ if ( ( file ) && ( mpeg3_read_audio( file, 0, output, 1, 0, samples, stream ) != 1 ) &&
+ ( mpeg3_reread_audio( file, 0, output + 1, 1, 1, samples, stream ) != 1 ) )
+ return TRUE;
+ return FALSE;
+ }
+ return FALSE;
+}
+
+bool LibMpeg3Plugin::videoReadFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, ColorFormat color_model, int stream ) {
+ int format = MPEG3_RGB565;
+ switch ( color_model ) {
+ case RGB565: format = MPEG3_RGB565; break;
+ case BGR565: /*format = MPEG3_BGR565;*/ break;
+ case RGBA8888: format = MPEG3_RGBA8888; break;
+ case BGRA8888: format = MPEG3_BGRA8888; break;
+ }
+ return file ? mpeg3_read_frame( file, output_rows, in_x, in_y, in_w, in_h, in_w, in_h, format, stream ) == 1 : FALSE;
+}
+
+
+bool LibMpeg3Plugin::videoReadScaledFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, int out_w, int out_h, ColorFormat color_model, int stream ) {
+ int format = MPEG3_RGB565;
+ switch ( color_model ) {
+ case RGB565: format = MPEG3_RGB565; break;
+ case BGR565: /*format = MPEG3_BGR565;*/ break;
+ case RGBA8888: format = MPEG3_RGBA8888; break;
+ case BGRA8888: format = MPEG3_BGRA8888; break;
+ }
+ return file ? mpeg3_read_frame( file, output_rows, in_x, in_y, in_w, in_h, out_w, out_h, format, stream ) == 1 : FALSE;
+}
+
+
+bool LibMpeg3Plugin::videoReadYUVFrame( char *y_output, char *u_output, char *v_output, int in_x, int in_y, int in_w, int in_h, int stream ) {
+ return file ? mpeg3_read_yuvframe( file, y_output, u_output, v_output, in_x, in_y, in_w, in_h, stream ) == 1 : FALSE;
+}
+
+
diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h
new file mode 100644
index 0000000..0a06264
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3plugin.h
@@ -0,0 +1,113 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIBMPEG3_PLUGIN_H
+#define LIBMPEG3_PLUGIN_H
+
+
+#include <qstring.h>
+#include <qapplication.h>
+#include "libmpeg3.h"
+#include "mpeg3protos.h"
+#include "mediaplayerplugininterface.h"
+
+
+class LibMpeg3Plugin : public MediaPlayerDecoder {
+
+public:
+ LibMpeg3Plugin() { file = NULL; }
+ ~LibMpeg3Plugin() { close(); }
+
+ const char *pluginName() { return "LibMpeg3Plugin"; }
+ const char *pluginComment() { return "This is the libmpeg3 library writen by ... which has been modified by trolltech to use fixed point maths"; }
+ double pluginVersion() { return 1.0; }
+
+ bool isFileSupported( const QString& fileName ) { return mpeg3_check_sig( (char *)fileName.latin1() ) == 1; }
+ bool open( const QString& fileName ) { file = mpeg3_open( (char *)fileName.latin1() ); return file != NULL; }
+ bool close() { if ( file ) { int r = mpeg3_close( file ); file = NULL; return r == 1; } return FALSE; }
+ bool isOpen() { return file != NULL; }
+ const QString &fileInfo() { return strInfo = QString( "" ); }
+
+ // If decoder doesn't support audio then return 0 here
+ int audioStreams() { return file ? mpeg3_total_astreams( file ) : 0; }
+ int audioChannels( int stream ) { return file ? mpeg3_audio_channels( file, stream ) : 0; }
+ int audioFrequency( int stream ) { return file ? mpeg3_sample_rate( file, stream ) : 0; }
+ int audioSamples( int stream ) { return file ? mpeg3_audio_samples( file, stream ) : 0; }
+ bool audioSetSample( long sample, int stream ) { return file ? mpeg3_set_sample( file, sample, stream) == 1 : FALSE; }
+ long audioGetSample( int stream ) { return file ? mpeg3_get_sample( file, stream ) : 0; }
+// bool audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream );
+// bool audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream );
+ bool audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream );
+// bool audioReadSamples( short *output, int channel, long samples, int stream );
+// bool audioReReadSamples( short *output, int channel, long samples, int stream );
+
+ // If decoder doesn't support video then return 0 here
+ int videoStreams() { return file ? mpeg3_total_vstreams( file ) : 0; }
+ int videoWidth( int stream ) { return file ? mpeg3_video_width( file, stream ) : 0; }
+ int videoHeight( int stream ) { return file ? mpeg3_video_height( file, stream ) : 0; }
+ double videoFrameRate( int stream ) { return file ? mpeg3_frame_rate( file, stream ) : 0.0; }
+ int videoFrames( int stream )
+{ return file ? mpeg3_video_frames( file, stream ) : 0; }
+/*
+{
+ if ( file ) {
+ int frames = mpeg3_video_frames( file, stream );
+ if ( frames == 1 ) {
+ int res = mpeg3_seek_percentage( file, 0.99 );
+ printf("res: %i\n", res );
+ mpeg3video_seek( file->vtrack[stream]->video );
+ frames = mpeg3_get_frame( file, stream );
+ mpeg3_seek_percentage( file, 0.0 );
+ }
+ return frames;
+ }
+ return 0;
+}
+*/
+ bool videoSetFrame( long frame, int stream ) { return file ? mpeg3_set_frame( file, frame, stream) == 1 : FALSE; }
+ long videoGetFrame( int stream ) { return file ? mpeg3_get_frame( file, stream ) : 0; }
+ bool videoReadFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, ColorFormat color_model, int stream );
+ bool videoReadScaledFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, int out_w, int out_h, ColorFormat color_model, int stream );
+ bool videoReadYUVFrame( char *y_output, char *u_output, char *v_output, int in_x, int in_y, int in_w, int in_h, int stream );
+
+ // Profiling
+ double getTime() { return file ? mpeg3_get_time( file ) : 0.0; }
+
+ // Ignore if these aren't supported
+ bool setSMP( int cpus ) { return file ? mpeg3_set_cpus( file, cpus ) == 1 : FALSE; }
+ bool setMMX( bool useMMX ) { return file ? mpeg3_set_mmx( file, useMMX ) == 1 : FALSE; }
+
+ // Capabilities
+ bool supportsAudio() { return TRUE; }
+ bool supportsVideo() { return TRUE; }
+ bool supportsYUV() { return TRUE; }
+ bool supportsMMX() { return TRUE; }
+ bool supportsSMP() { return TRUE; }
+ bool supportsStereo() { return TRUE; }
+ bool supportsScaling() { return TRUE; }
+
+private:
+ mpeg3_t *file;
+ QString strInfo;
+
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.cpp b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.cpp
new file mode 100644
index 0000000..e7216af
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.cpp
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "libmpeg3plugin.h"
+#include "libmpeg3pluginimpl.h"
+
+
+LibMpeg3PluginImpl::LibMpeg3PluginImpl()
+ : libmpeg3plugin(0), ref(0)
+{
+}
+
+
+LibMpeg3PluginImpl::~LibMpeg3PluginImpl()
+{
+ if ( libmpeg3plugin )
+ delete libmpeg3plugin;
+}
+
+
+MediaPlayerDecoder *LibMpeg3PluginImpl::decoder()
+{
+ if ( !libmpeg3plugin )
+ libmpeg3plugin = new LibMpeg3Plugin;
+ return libmpeg3plugin;
+}
+
+
+MediaPlayerEncoder *LibMpeg3PluginImpl::encoder()
+{
+ return NULL;
+}
+
+
+#ifndef QT_NO_COMPONENT
+
+
+QRESULT LibMpeg3PluginImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( ( uuid == IID_QUnknown ) || ( uuid == IID_MediaPlayerPlugin ) )
+ *iface = this, (*iface)->addRef();
+ return QS_OK;
+}
+
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( LibMpeg3PluginImpl )
+}
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h
new file mode 100644
index 0000000..29ec6ba
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/libmpeg3pluginimpl.h
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIBMPEG3_PLUGIN_IMPL_H
+#define LIBMPEG3_PLUGIN_IMPL_H
+
+
+#include "../mediaplayerplugininterface.h"
+
+
+class LibMpeg3Plugin;
+
+
+class LibMpeg3PluginImpl : public MediaPlayerPluginInterface
+{
+public:
+ LibMpeg3PluginImpl();
+ virtual ~LibMpeg3PluginImpl();
+
+#ifndef QT_NO_COMPONENT
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+#endif
+
+ virtual MediaPlayerDecoder *decoder();
+ virtual MediaPlayerEncoder *encoder();
+
+private:
+ LibMpeg3Plugin *libmpeg3plugin;
+ ulong ref;
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/libmpeg3/make_package b/core/multimedia/opieplayer/libmpeg3/make_package
new file mode 100755
index 0000000..4be86da
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/make_package
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+VERSION=1.2.1
+
+rm -r /tmp/libmpeg3-$VERSION
+mkdir -p /tmp/libmpeg3-$VERSION
+make clean
+cp -rd * /tmp/libmpeg3-$VERSION
+cd /tmp
+tar zcf libmpeg3-$VERSION.tar.gz libmpeg3-$VERSION
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3atrack.c b/core/multimedia/opieplayer/libmpeg3/mpeg3atrack.c
new file mode 100644
index 0000000..e1a900b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3atrack.c
@@ -0,0 +1,36 @@
+#include "libmpeg3.h"
+#include "mpeg3protos.h"
+
+#include <stdlib.h>
+
+mpeg3_atrack_t* mpeg3_new_atrack(mpeg3_t *file, int stream_id, int format, mpeg3_demuxer_t *demuxer)
+{
+ mpeg3_atrack_t *new_atrack;
+
+ new_atrack = (mpeg3_atrack_t*)calloc(1, sizeof(mpeg3_atrack_t));
+ new_atrack->channels = 0;
+ new_atrack->sample_rate = 0;
+ new_atrack->total_samples = 0;
+ new_atrack->current_position = 0;
+ new_atrack->demuxer = mpeg3_new_demuxer(file, 1, 0, stream_id);
+ if(demuxer) mpeg3demux_copy_titles(new_atrack->demuxer, demuxer);
+ new_atrack->audio = mpeg3audio_new(file, new_atrack, format);
+
+ if(!new_atrack->audio)
+ {
+/* Failed */
+ mpeg3_delete_atrack(file, new_atrack);
+ new_atrack = 0;
+ }
+ return new_atrack;
+}
+
+int mpeg3_delete_atrack(mpeg3_t *file, mpeg3_atrack_t *atrack)
+{
+ if(atrack->audio)
+ mpeg3audio_delete(atrack->audio);
+ if(atrack->demuxer)
+ mpeg3_delete_demuxer(atrack->demuxer);
+ free(atrack);
+}
+
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3atrack.h b/core/multimedia/opieplayer/libmpeg3/mpeg3atrack.h
new file mode 100644
index 0000000..9d70640
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3atrack.h
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3ATRACK_H
+#define MPEG3ATRACK_H
+
+#include "mpeg3demux.h"
+#include "audio/mpeg3audio.h"
+
+struct mpeg3_atrack_rec
+{
+ int channels;
+ int sample_rate;
+ mpeg3_demuxer_t *demuxer;
+ mpeg3audio_t *audio;
+ long current_position;
+ long total_samples;
+};
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3cat.c b/core/multimedia/opieplayer/libmpeg3/mpeg3cat.c
new file mode 100644
index 0000000..20f7660
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3cat.c
@@ -0,0 +1,225 @@
+/* Concatenate elementary streams */
+
+#include "libmpeg3.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MPEG3_SEQUENCE_START_CODE 0x000001b3
+#define BUFFER_SIZE 1000000
+
+int main(int argc, char *argv[])
+{
+ char inpath[1024];
+ mpeg3_t *in;
+ int current_file, current_output_file = 0, i;
+ unsigned int bits;
+ unsigned char *buffer;
+ long output_size;
+ int result = 0;
+ long total_frames = 0;
+ int do_audio = 0, do_video = 0;
+ int stream = 0;
+
+ if(argc < 2)
+ {
+ fprintf(stderr, "Concatenate elementary streams or demultiplex a program stream.\n"
+ "Usage: mpeg3cat -[av0123456789] <infile> [infile...] > <outfile>\n\n"
+ "Example: Concatenate 2 video files: mpeg3cat xena1.m2v xena2.m2v > xena.m2v\n"
+ " Extract audio stream 0: mpeg3cat -a0 xena.vob > war_cry.ac3\n");
+ exit(1);
+ }
+
+ for(i = 1; i < argc; i++)
+ {
+ if(argv[i][0] == '-')
+ {
+ if(argv[i][1] != 'a' && argv[i][1] != 'v')
+ {
+ fprintf(stderr, "invalid option %s\n", argv[i]);
+ }
+ else
+ {
+ if(argv[i][1] == 'a') do_audio = 1;
+ else
+ if(argv[i][1] == 'v') do_video = 1;
+
+ if(argv[i][2] != 0)
+ {
+ stream = argv[i][2] - 48;
+ }
+ }
+ }
+ }
+
+ buffer = (unsigned char*)malloc(BUFFER_SIZE);
+
+ for(current_file = 1; current_file < argc; current_file++)
+ {
+ if(argv[current_file][0] == '-') continue;
+
+ strcpy(inpath, argv[current_file]);
+ if(!(in = mpeg3_open(inpath)))
+ {
+ fprintf(stderr, "Skipping %s\n", inpath);
+ continue;
+ }
+
+ if((mpeg3_has_audio(in) && in->is_audio_stream) ||
+ (do_audio && !in->is_audio_stream && !in->is_video_stream))
+ {
+ do_audio = 1;
+/* Add audio stream to end */
+ while(!mpeg3_read_audio_chunk(in, buffer,
+ &output_size,
+ BUFFER_SIZE,
+ stream))
+ {
+ result = !fwrite(buffer, output_size, 1, stdout);
+ if(result)
+ {
+ perror("fwrite audio chunk");
+ break;
+ }
+ }
+ }
+ else
+ if((mpeg3_has_video(in) && in->is_video_stream) ||
+ (do_video && !in->is_video_stream && !in->is_audio_stream))
+ {
+/* Add video stream to end */
+ int hour, minute, second, frame;
+ long gop_frame;
+ unsigned long code;
+ float carry;
+ int i, offset;
+
+ do_video = 1;
+ while(!mpeg3_read_video_chunk(in,
+ buffer,
+ &output_size,
+ BUFFER_SIZE,
+ stream) &&
+ output_size >= 4)
+ {
+ code = (unsigned long)buffer[output_size - 4] << 24;
+ code |= (unsigned long)buffer[output_size - 3] << 16;
+ code |= (unsigned long)buffer[output_size - 2] << 8;
+ code |= (unsigned long)buffer[output_size - 1];
+
+/* Got a frame at the end of this buffer. */
+ if(code == MPEG3_PICTURE_START_CODE)
+ {
+ total_frames++;
+ }
+ else
+ if(code == MPEG3_SEQUENCE_END_CODE)
+ {
+/* Got a sequence end code at the end of this buffer. */
+ output_size -= 4;
+ }
+
+ code = (unsigned long)buffer[0] << 24;
+ code |= (unsigned long)buffer[1] << 16;
+ code |= (unsigned long)buffer[2] << 8;
+ code |= buffer[3];
+
+ i = 0;
+ offset = 0;
+ if(code == MPEG3_SEQUENCE_START_CODE && current_output_file > 0)
+ {
+/* Skip the sequence start code */
+ i += 4;
+ while(i < output_size &&
+ code != MPEG3_GOP_START_CODE)
+ {
+ code <<= 8;
+ code |= buffer[i++];
+ }
+ i -= 4;
+ offset = i;
+ }
+
+/* Search for GOP header to fix */
+ code = (unsigned long)buffer[i++] << 24;
+ code |= (unsigned long)buffer[i++] << 16;
+ code |= (unsigned long)buffer[i++] << 8;
+ code |= buffer[i++];
+ while(i < output_size &&
+ code != MPEG3_GOP_START_CODE)
+ {
+ code <<= 8;
+ code |= buffer[i++];
+ }
+
+ if(code == MPEG3_GOP_START_CODE)
+ {
+/* Get the time code */
+ code = (unsigned long)buffer[i] << 24;
+ code |= (unsigned long)buffer[i + 1] << 16;
+ code |= (unsigned long)buffer[i + 2] << 8;
+ code |= (unsigned long)buffer[i + 3];
+
+ hour = code >> 26 & 0x1f;
+ minute = code >> 20 & 0x3f;
+ second = code >> 13 & 0x3f;
+ frame = code >> 7 & 0x3f;
+
+ gop_frame = (long)(hour * 3600 * mpeg3_frame_rate(in, stream) +
+ minute * 60 * mpeg3_frame_rate(in, stream) +
+ second * mpeg3_frame_rate(in, stream) +
+ frame);
+/* fprintf(stderr, "old: %02d:%02d:%02d:%02d ", hour, minute, second, frame); */
+/* Write a new time code */
+ hour = (long)((float)(total_frames - 1) / mpeg3_frame_rate(in, stream) / 3600);
+ carry = hour * 3600 * mpeg3_frame_rate(in, stream);
+ minute = (long)((float)(total_frames - 1 - carry) / mpeg3_frame_rate(in, stream) / 60);
+ carry += minute * 60 * mpeg3_frame_rate(in, stream);
+ second = (long)((float)(total_frames - 1 - carry) / mpeg3_frame_rate(in, stream));
+ carry += second * mpeg3_frame_rate(in, stream);
+ frame = (int)(total_frames - 1 - carry);
+
+ buffer[i] = ((code >> 24) & 0x80) | (hour << 2) | (minute >> 4);
+ buffer[i + 1] = ((code >> 16) & 0x08) | ((minute & 0xf) << 4) | (second >> 3);
+ buffer[i + 2] = ((second & 0x7) << 5) | (frame >> 1);
+ buffer[i + 3] = (code & 0x7f) | ((frame & 0x1) << 7);
+/* fprintf(stderr, "new: %02d:%02d:%02d:%02d\n", hour, minute, second, frame); */
+ }
+
+/* Write the frame */
+ result = !fwrite(buffer + offset, output_size - offset, 1, stdout);
+ if(result)
+ {
+ perror("fwrite video chunk");
+ break;
+ }
+ }
+ }
+ else
+ {
+ fprintf(stderr, "Unsupported stream type.\n");
+ mpeg3_close(in);
+ in = 0;
+ continue;
+ }
+
+ mpeg3_close(in);
+ in = 0;
+ current_output_file++;
+ }
+
+/* Terminate output */
+ if(current_output_file > 0 && do_video)
+ {
+/*fprintf(stderr, "\n"); */
+/* Write new end of sequence */
+ buffer[0] = MPEG3_SEQUENCE_END_CODE >> 24;
+ buffer[1] = (MPEG3_SEQUENCE_END_CODE >> 16) & 0xff;
+ buffer[2] = (MPEG3_SEQUENCE_END_CODE >> 8) & 0xff;
+ buffer[3] = MPEG3_SEQUENCE_END_CODE & 0xff;
+ result = !fwrite(buffer, 4, 1, stdout);
+ }
+
+ exit(0);
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3css.c b/core/multimedia/opieplayer/libmpeg3/mpeg3css.c
new file mode 100644
index 0000000..7f9ad8c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3css.c
@@ -0,0 +1,32 @@
+#include "mpeg3css.h"
+#include "mpeg3private.h"
+
+extern "C" {
+
+int mpeg3_init_css(mpeg3_t *file, mpeg3_css_t *css)
+{
+ return 0;
+}
+
+int mpeg3_get_keys(mpeg3_css_t *css, char *path)
+{
+ return 1;
+}
+
+int mpeg3_decrypt_packet(mpeg3_css_t *css, unsigned char *sector)
+{
+ return 1;
+}
+
+mpeg3_css_t* mpeg3_new_css()
+{
+ return 0;
+}
+
+int mpeg3_delete_css(mpeg3_css_t *css)
+{
+ return 0;
+}
+
+};
+
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3css.h b/core/multimedia/opieplayer/libmpeg3/mpeg3css.h
new file mode 100644
index 0000000..1272574
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3css.h
@@ -0,0 +1,29 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3CSS_H
+#define MPEG3CSS_H
+
+/* Stubs for deCSS which can't be distributed legally */
+
+typedef struct
+{
+} mpeg3_css_t;
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.c b/core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.c
new file mode 100644
index 0000000..0901195
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.c
@@ -0,0 +1,19 @@
+/* Stubs for deCSS which can't be distributed in source form */
+
+#include "mpeg3css.h"
+#include "mpeg3private.h"
+
+int mpeg3_init_css(mpeg3_t *file, mpeg3_css_t *css)
+{
+ return 0;
+}
+
+int mpeg3_get_keys(mpeg3_css_t *css, char *path)
+{
+ return 1;
+}
+
+int mpeg3_decrypt_packet(mpeg3_css_t *css, unsigned char *sector)
+{
+ return 1;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.h b/core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.h
new file mode 100644
index 0000000..1272574
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3css_fake.h
@@ -0,0 +1,29 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3CSS_H
+#define MPEG3CSS_H
+
+/* Stubs for deCSS which can't be distributed legally */
+
+typedef struct
+{
+} mpeg3_css_t;
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3demux.c b/core/multimedia/opieplayer/libmpeg3/mpeg3demux.c
new file mode 100644
index 0000000..cccc820
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3demux.c
@@ -0,0 +1,1849 @@
+#include "libmpeg3.h"
+#include "mpeg3io.h"
+#include "mpeg3protos.h"
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define ABS(x) ((x) >= 0 ? (x) : -(x))
+
+/* Don't advance pointer */
+static inline unsigned char mpeg3packet_next_char(mpeg3_demuxer_t *demuxer)
+{
+ return demuxer->raw_data[demuxer->raw_offset];
+}
+
+unsigned char mpeg3packet_read_char(mpeg3_demuxer_t *demuxer)
+{
+ unsigned char result = demuxer->raw_data[demuxer->raw_offset++];
+ return result;
+}
+
+static inline unsigned int mpeg3packet_read_int16(mpeg3_demuxer_t *demuxer)
+{
+ unsigned int a, b, result;
+ a = demuxer->raw_data[demuxer->raw_offset++];
+ b = demuxer->raw_data[demuxer->raw_offset++];
+ result = (a << 8) | b;
+
+ return result;
+}
+
+static inline unsigned int mpeg3packet_next_int24(mpeg3_demuxer_t *demuxer)
+{
+ unsigned int a, b, c, result;
+ a = demuxer->raw_data[demuxer->raw_offset];
+ b = demuxer->raw_data[demuxer->raw_offset + 1];
+ c = demuxer->raw_data[demuxer->raw_offset + 2];
+ result = (a << 16) | (b << 8) | c;
+
+ return result;
+}
+
+static inline unsigned int mpeg3packet_read_int24(mpeg3_demuxer_t *demuxer)
+{
+ unsigned int a, b, c, result;
+ a = demuxer->raw_data[demuxer->raw_offset++];
+ b = demuxer->raw_data[demuxer->raw_offset++];
+ c = demuxer->raw_data[demuxer->raw_offset++];
+ result = (a << 16) | (b << 8) | c;
+
+ return result;
+}
+
+static inline unsigned int mpeg3packet_read_int32(mpeg3_demuxer_t *demuxer)
+{
+ unsigned int a, b, c, d, result;
+ a = demuxer->raw_data[demuxer->raw_offset++];
+ b = demuxer->raw_data[demuxer->raw_offset++];
+ c = demuxer->raw_data[demuxer->raw_offset++];
+ d = demuxer->raw_data[demuxer->raw_offset++];
+ result = (a << 24) | (b << 16) | (c << 8) | d;
+
+ return result;
+}
+
+static inline unsigned int mpeg3packet_skip(mpeg3_demuxer_t *demuxer, long length)
+{
+ demuxer->raw_offset += length;
+ return 0;
+}
+
+int mpeg3_get_adaptation_field(mpeg3_demuxer_t *demuxer)
+{
+ long length;
+ int pcr_flag;
+
+ demuxer->adaptation_fields++;
+/* get adaptation field length */
+ length = mpeg3packet_read_char(demuxer);
+/* get first byte */
+ pcr_flag = (mpeg3packet_read_char(demuxer) >> 4) & 1;
+
+ if(pcr_flag)
+ {
+ unsigned long clk_ref_base = mpeg3packet_read_int32(demuxer);
+ unsigned int clk_ref_ext = mpeg3packet_read_int16(demuxer);
+
+ if (clk_ref_base > 0x7fffffff)
+ { /* correct for invalid numbers */
+ clk_ref_base = 0; /* ie. longer than 32 bits when multiplied by 2 */
+ clk_ref_ext = 0; /* multiplied by 2 corresponds to shift left 1 (<<=1) */
+ }
+ else
+ {
+ clk_ref_base <<= 1; /* Create space for bit */
+ clk_ref_base |= (clk_ref_ext >> 15); /* Take bit */
+ clk_ref_ext &= 0x01ff; /* Only lower 9 bits */
+ }
+ demuxer->time = clk_ref_base + clk_ref_ext / 300;
+ if(length) mpeg3packet_skip(demuxer, length - 7);
+ }
+ else
+ mpeg3packet_skip(demuxer, length - 1);
+
+ return 0;
+}
+
+int mpeg3_get_program_association_table(mpeg3_demuxer_t *demuxer)
+{
+ demuxer->program_association_tables++;
+ demuxer->table_id = mpeg3packet_read_char(demuxer);
+ demuxer->section_length = mpeg3packet_read_int16(demuxer) & 0xfff;
+ demuxer->transport_stream_id = mpeg3packet_read_int16(demuxer);
+ mpeg3packet_skip(demuxer, demuxer->raw_size - demuxer->raw_offset);
+ return 0;
+}
+
+int mpeg3packet_get_data_buffer(mpeg3_demuxer_t *demuxer)
+{
+ while(demuxer->raw_offset < demuxer->raw_size && demuxer->data_size < demuxer->data_allocated)
+ {
+ demuxer->data_buffer[demuxer->data_size++] = demuxer->raw_data[demuxer->raw_offset++];
+ }
+ return 0;
+}
+
+int mpeg3_get_pes_packet_header(mpeg3_demuxer_t *demuxer, unsigned long *pts, unsigned long *dts)
+{
+ unsigned int pes_header_bytes = 0;
+ unsigned int pts_dts_flags;
+ int pes_header_data_length;
+
+/* drop first 8 bits */
+ mpeg3packet_read_char(demuxer);
+ pts_dts_flags = (mpeg3packet_read_char(demuxer) >> 6) & 0x3;
+ pes_header_data_length = mpeg3packet_read_char(demuxer);
+
+/* Get Presentation Time stamps and Decoding Time Stamps */
+ if(pts_dts_flags == 2)
+ {
+ *pts = (mpeg3packet_read_char(demuxer) >> 1) & 7; /* Only low 4 bits (7==1111) */
+ *pts <<= 15;
+ *pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ *pts <<= 15;
+ *pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ pes_header_bytes += 5;
+ }
+ else if(pts_dts_flags == 3)
+ {
+ *pts = (mpeg3packet_read_char(demuxer) >> 1) & 7; /* Only low 4 bits (7==1111) */
+ *pts <<= 15;
+ *pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ *pts <<= 15;
+ *pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ *dts = (mpeg3packet_read_char(demuxer) >> 1) & 7; /* Only low 4 bits (7==1111) */
+ *dts <<= 15;
+ *dts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ *dts <<= 15;
+ *dts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ pes_header_bytes += 10;
+ }
+/* extract other stuff here! */
+
+ mpeg3packet_skip(demuxer, pes_header_data_length - pes_header_bytes);
+ return 0;
+}
+
+int get_unknown_data(mpeg3_demuxer_t *demuxer)
+{
+ mpeg3packet_skip(demuxer, demuxer->raw_size - demuxer->raw_offset);
+ return 0;
+}
+
+int mpeg3_get_pes_packet_data(mpeg3_demuxer_t *demuxer, unsigned int stream_id)
+{
+ unsigned long pts = 0, dts = 0;
+
+ if((stream_id >> 4) == 12 || (stream_id >> 4) == 13)
+ {
+/* Just pick the first available stream if no ID is set */
+ if(demuxer->astream == -1)
+ demuxer->astream = (stream_id & 0x0f);
+
+ if((stream_id & 0x0f) == demuxer->astream && demuxer->do_audio)
+ {
+ mpeg3_get_pes_packet_header(demuxer, &pts, &dts);
+ demuxer->pes_audio_time = pts;
+ demuxer->audio_pid = demuxer->pid;
+ return mpeg3packet_get_data_buffer(demuxer);
+ }
+ }
+ else
+ if((stream_id >> 4)==14)
+ {
+/* Just pick the first available stream if no ID is set */
+ if(demuxer->vstream == -1)
+ demuxer->vstream = (stream_id & 0x0f);
+
+ if((stream_id & 0x0f) == demuxer->vstream && demuxer->do_video)
+ {
+ mpeg3_get_pes_packet_header(demuxer, &pts, &dts);
+ demuxer->pes_video_time = pts;
+ demuxer->video_pid = demuxer->pid;
+ return mpeg3packet_get_data_buffer(demuxer);
+ }
+ }
+ else
+ {
+ return get_unknown_data(demuxer);
+ }
+
+ mpeg3packet_skip(demuxer, demuxer->raw_size - demuxer->raw_offset);
+
+ return 0;
+}
+
+int mpeg3_get_pes_packet(mpeg3_demuxer_t *demuxer)
+{
+ unsigned int stream_id;
+
+ demuxer->pes_packets++;
+ stream_id = mpeg3packet_read_char(demuxer);
+/* Skip startcode */
+ mpeg3packet_read_int24(demuxer);
+/* Skip pes packet length */
+ mpeg3packet_read_int16(demuxer);
+
+ if(stream_id != MPEG3_PRIVATE_STREAM_2 && stream_id != MPEG3_PADDING_STREAM)
+ {
+ return mpeg3_get_pes_packet_data(demuxer, stream_id);
+ }
+ else
+ if(stream_id == MPEG3_PRIVATE_STREAM_2)
+ {
+/* Dump private data! */
+ fprintf(stderr, "stream_id == MPEG3_PRIVATE_STREAM_2\n");
+ mpeg3packet_skip(demuxer, demuxer->raw_size - demuxer->raw_offset);
+ return 0;
+ }
+ else
+ if(stream_id == MPEG3_PADDING_STREAM)
+ {
+ mpeg3packet_skip(demuxer, demuxer->raw_size - demuxer->raw_offset);
+ return 0;
+ }
+ else
+ {
+ fprintf(stderr, "unknown stream_id in pes packet");
+ return 1;
+ }
+ return 0;
+}
+
+int mpeg3_get_payload(mpeg3_demuxer_t *demuxer)
+{
+ if(demuxer->payload_unit_start_indicator)
+ {
+ if(demuxer->pid==0) mpeg3_get_program_association_table(demuxer);
+ else
+ if(mpeg3packet_next_int24(demuxer) == MPEG3_PACKET_START_CODE_PREFIX) mpeg3_get_pes_packet(demuxer);
+ else
+ mpeg3packet_skip(demuxer, demuxer->raw_size - demuxer->raw_offset);
+ }
+ else
+ {
+ if(demuxer->pid == demuxer->audio_pid && demuxer->do_audio)
+ {
+ mpeg3packet_get_data_buffer(demuxer);
+ }
+ else
+ if(demuxer->pid == demuxer->video_pid && demuxer->do_video)
+ {
+ mpeg3packet_get_data_buffer(demuxer);
+ }
+ else
+ mpeg3packet_skip(demuxer, demuxer->raw_size - demuxer->raw_offset);
+ }
+ return 0;
+}
+
+/* Read a transport packet */
+int mpeg3_read_transport(mpeg3_demuxer_t *demuxer)
+{
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+ int result = mpeg3io_read_data(demuxer->raw_data, demuxer->packet_size, title->fs);
+ unsigned int bits;
+ int table_entry;
+
+ demuxer->raw_size = demuxer->packet_size;
+ demuxer->raw_offset = 0;
+ if(result)
+ {
+ perror("mpeg3_read_transport");
+ return 1;
+ }
+
+/* Sync byte */
+ if(mpeg3packet_read_char(demuxer) != MPEG3_SYNC_BYTE)
+ {
+ fprintf(stderr, "mpeg3packet_read_char(demuxer) != MPEG3_SYNC_BYTE\n");
+ return 1;
+ }
+
+/* bits = mpeg3packet_read_int24(demuxer) & 0x0000ffff; */
+/* demuxer->transport_error_indicator = bits >> 15; */
+/* demuxer->payload_unit_start_indicator = (bits >> 14) & 1; */
+/* demuxer->pid = bits & 0x00001fff; */
+/* demuxer->transport_scrambling_control = (mpeg3packet_next_char(demuxer) >> 6) & 0x3; */
+/* demuxer->adaptation_field_control = (mpeg3packet_next_char(demuxer) >> 4) & 0x3; */
+/* demuxer->continuity_counter = (mpeg3packet_read_char(demuxer) & 0xf); */
+
+ bits = mpeg3packet_read_int24(demuxer) & 0x00ffffff;
+ demuxer->transport_error_indicator = (bits >> 23) & 0x1;
+ demuxer->payload_unit_start_indicator = (bits >> 22) & 0x1;
+ demuxer->pid = (bits >> 8) & 0x00001fff;
+ demuxer->transport_scrambling_control = (bits >> 6) & 0x3;
+ demuxer->adaptation_field_control = (bits >> 4) & 0x3;
+ demuxer->continuity_counter = bits & 0xf;
+
+ if(demuxer->transport_error_indicator)
+ {
+ fprintf(stderr, "demuxer->transport_error_indicator\n");
+ return 1;
+ }
+
+ if (demuxer->pid == 0x1fff)
+ {
+ demuxer->is_padding = 1; /* padding; just go to next */
+ return 0;
+ }
+ else
+ {
+ demuxer->is_padding = 0;
+ }
+
+/* Get pid */
+ for(table_entry = 0, result = 0; table_entry < demuxer->total_pids; table_entry++)
+ {
+ if(demuxer->pid == demuxer->pid_table[table_entry])
+ {
+ result = 1;
+ break;
+ }
+ }
+
+/* Not in pid table */
+ if(!result)
+ {
+ demuxer->pid_table[table_entry] = demuxer->pid;
+ demuxer->continuity_counters[table_entry] = demuxer->continuity_counter; /* init */
+ demuxer->total_pids++;
+ }
+ result = 0;
+
+/* Check counters */
+ if(demuxer->pid != MPEG3_PROGRAM_ASSOCIATION_TABLE &&
+ demuxer->pid != MPEG3_CONDITIONAL_ACCESS_TABLE &&
+ (demuxer->adaptation_field_control == 1 || demuxer->adaptation_field_control == 3))
+ {
+ if(demuxer->continuity_counters[table_entry] != demuxer->continuity_counter)
+ {
+ fprintf(stderr, "demuxer->continuity_counters[table_entry] != demuxer->continuity_counter\n");
+/* Reset it */
+ demuxer->continuity_counters[table_entry] = demuxer->continuity_counter;
+ }
+ if(++(demuxer->continuity_counters[table_entry]) > 15) demuxer->continuity_counters[table_entry] = 0;
+ }
+
+ if(demuxer->adaptation_field_control == 2 || demuxer->adaptation_field_control == 3)
+ result = mpeg3_get_adaptation_field(demuxer);
+
+ if(demuxer->adaptation_field_control == 1 || demuxer->adaptation_field_control == 3)
+ result = mpeg3_get_payload(demuxer);
+
+ return result;
+}
+
+int mpeg3_get_system_header(mpeg3_demuxer_t *demuxer)
+{
+ int length = mpeg3packet_read_int16(demuxer);
+ mpeg3packet_skip(demuxer, length);
+ return 0;
+}
+
+unsigned long mpeg3_get_timestamp(mpeg3_demuxer_t *demuxer)
+{
+ unsigned long timestamp;
+/* Only low 4 bits (7==1111) */
+ timestamp = (mpeg3packet_read_char(demuxer) >> 1) & 7;
+ timestamp <<= 15;
+ timestamp |= (mpeg3packet_read_int16(demuxer) >> 1);
+ timestamp <<= 15;
+ timestamp |= (mpeg3packet_read_int16(demuxer) >> 1);
+ return timestamp;
+}
+
+int mpeg3_get_pack_header(mpeg3_demuxer_t *demuxer, unsigned int *header)
+{
+ unsigned long i, j;
+ unsigned long clock_ref, clock_ref_ext;
+
+/* Get the time code */
+ if((mpeg3packet_next_char(demuxer) >> 4) == 2)
+ {
+/* MPEG-1 */
+ demuxer->time = (double)mpeg3_get_timestamp(demuxer) / 90000;
+/* Skip 3 bytes */
+ mpeg3packet_read_int24(demuxer);
+ }
+ else
+ if(mpeg3packet_next_char(demuxer) & 0x40)
+ {
+ i = mpeg3packet_read_int32(demuxer);
+ j = mpeg3packet_read_int16(demuxer);
+ if(i & 0x40000000 || (i >> 28) == 2)
+ {
+ clock_ref = ((i & 0x31000000) << 3);
+ clock_ref |= ((i & 0x03fff800) << 4);
+ clock_ref |= ((i & 0x000003ff) << 5);
+ clock_ref |= ((j & 0xf800) >> 11);
+ clock_ref_ext = (j >> 1) & 0x1ff;
+
+ demuxer->time = (double)(clock_ref + clock_ref_ext / 300) / 90000;
+/* Skip 3 bytes */
+ mpeg3packet_read_int24(demuxer);
+ i = mpeg3packet_read_char(demuxer) & 0x7;
+
+/* stuffing */
+ mpeg3packet_skip(demuxer, i);
+ }
+ }
+ else
+ {
+ mpeg3packet_skip(demuxer, 2);
+ }
+
+ *header = mpeg3packet_read_int32(demuxer);
+ if(*header == MPEG3_SYSTEM_START_CODE)
+ {
+ mpeg3_get_system_header(demuxer);
+ *header = mpeg3packet_read_int32(demuxer);
+ }
+ return 0;
+}
+
+/* Program packet reading core */
+int mpeg3_get_ps_pes_packet(mpeg3_demuxer_t *demuxer, unsigned int *header)
+{
+ unsigned long pts = 0, dts = 0;
+ int stream_id;
+ int pes_packet_length;
+ int pes_packet_start;
+ int i;
+ mpeg3_t *file = demuxer->file;
+
+ stream_id = *header & 0xff;
+ pes_packet_length = mpeg3packet_read_int16(demuxer);
+ pes_packet_start = demuxer->raw_offset;
+
+ if(stream_id != MPEG3_PRIVATE_STREAM_2 &&
+ stream_id != MPEG3_PADDING_STREAM)
+ {
+ if((mpeg3packet_next_char(demuxer) >> 6) == 0x02)
+ {
+/* Get MPEG-2 packet */
+ int pes_header_bytes = 0;
+ int scrambling = (mpeg3packet_read_char(demuxer) >> 4) & 0x3;
+ int pts_dts_flags = (mpeg3packet_read_char(demuxer) >> 6) & 0x3;
+ int pes_header_data_length = mpeg3packet_read_char(demuxer);
+
+ if(scrambling && (demuxer->do_audio || demuxer->do_video))
+ {
+/* Decrypt it */
+ if(mpeg3_decrypt_packet(demuxer->titles[demuxer->current_title]->fs->css,
+ demuxer->raw_data))
+ {
+ fprintf(stderr, "mpeg3_get_ps_pes_packet: Decryption not available\n");
+ return 1;
+ }
+ }
+
+/* Get Presentation and Decoding Time Stamps */
+ if(pts_dts_flags == 2)
+ {
+ pts = (mpeg3packet_read_char(demuxer) >> 1) & 7; /* Only low 4 bits (7==1111) */
+ pts <<= 15;
+ pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ pts <<= 15;
+ pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ pes_header_bytes += 5;
+ }
+ else
+ if(pts_dts_flags == 3)
+ {
+ pts = (mpeg3packet_read_char(demuxer) >> 1) & 7; /* Only low 4 bits (7==1111) */
+ pts <<= 15;
+ pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ pts <<= 15;
+ pts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ dts = (mpeg3packet_read_char(demuxer) >> 1) & 7; /* Only low 4 bits (7==1111) */
+ dts <<= 15;
+ dts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ dts <<= 15;
+ dts |= (mpeg3packet_read_int16(demuxer) >> 1);
+ pes_header_bytes += 10;
+ }
+
+/* Skip unknown */
+ mpeg3packet_skip(demuxer, pes_header_data_length - pes_header_bytes);
+ }
+ else
+ {
+ int pts_dts_flags;
+/* Get MPEG-1 packet */
+ while(mpeg3packet_next_char(demuxer) == 0xff)
+ {
+ mpeg3packet_read_char(demuxer);
+ }
+
+/* Skip STD buffer scale */
+ if((mpeg3packet_next_char(demuxer) & 0x40) == 0x40)
+ {
+ mpeg3packet_skip(demuxer, 2);
+ }
+
+/* Decide which timestamps are available */
+ pts_dts_flags = mpeg3packet_next_char(demuxer);
+
+ if(pts_dts_flags >= 0x30)
+ {
+/* Get the presentation and decoding time stamp */
+ pts = mpeg3_get_timestamp(demuxer);
+ dts = mpeg3_get_timestamp(demuxer);
+ }
+ else
+ if(pts_dts_flags >= 0x20)
+ {
+/* Get just the presentation time stamp */
+ pts = mpeg3_get_timestamp(demuxer);
+ }
+ else
+ if(pts_dts_flags == 0x0f)
+ {
+/* End of timestamps */
+ mpeg3packet_read_char(demuxer);
+ }
+ else
+ {
+ return 1; /* Error */
+ }
+ }
+
+/* Now extract the payload. */
+ if((stream_id >> 4) == 0xc || (stream_id >> 4) == 0xd)
+ {
+/* Audio data */
+/* Take first stream ID if -1 */
+ pes_packet_length -= demuxer->raw_offset - pes_packet_start;
+ if(!demuxer->do_audio && !demuxer->do_video)
+ demuxer->astream_table[stream_id & 0x0f] = AUDIO_MPEG;
+ else
+ if(demuxer->astream == -1)
+ demuxer->astream = stream_id & 0x0f;
+
+ if((stream_id & 0x0f) == demuxer->astream && demuxer->do_audio)
+ {
+ if(pts) demuxer->pes_audio_time = pts;
+
+ memcpy(&demuxer->data_buffer[demuxer->data_size],
+ &demuxer->raw_data[demuxer->raw_offset],
+ pes_packet_length);
+ demuxer->data_size += pes_packet_length;
+ demuxer->raw_offset += pes_packet_length;
+ }
+ else
+ {
+ mpeg3packet_skip(demuxer, pes_packet_length);
+ }
+ }
+ else
+ if((stream_id >> 4) == 0xe)
+ {
+/* Video data */
+/* Take first stream ID if -1 */
+ if(!demuxer->do_audio && !demuxer->do_video)
+ demuxer->vstream_table[stream_id & 0x0f] = 1;
+ else
+ if(demuxer->vstream == -1)
+ demuxer->vstream = stream_id & 0x0f;
+
+ pes_packet_length -= demuxer->raw_offset - pes_packet_start;
+ if((stream_id & 0x0f) == demuxer->vstream && demuxer->do_video)
+ {
+ if(pts) demuxer->pes_video_time = pts;
+
+ memcpy(&demuxer->data_buffer[demuxer->data_size],
+ &demuxer->raw_data[demuxer->raw_offset],
+ pes_packet_length);
+ demuxer->data_size += pes_packet_length;
+ demuxer->raw_offset += pes_packet_length;
+ }
+ else
+ {
+ mpeg3packet_skip(demuxer, pes_packet_length);
+ }
+ }
+ else
+ if(stream_id == 0xbd && demuxer->raw_data[demuxer->raw_offset] != 0xff)
+ {
+/* DVD audio data */
+/* Get the audio format */
+ int format;
+ if((demuxer->raw_data[demuxer->raw_offset] & 0xf0) == 0xa0)
+ format = AUDIO_PCM;
+ else
+ format = AUDIO_AC3;
+
+ stream_id = demuxer->raw_data[demuxer->raw_offset] - 0x80;
+
+/* Take first stream ID if not building TOC. */
+ if(!demuxer->do_audio && !demuxer->do_video)
+ demuxer->astream_table[stream_id] = format;
+ else
+ if(demuxer->astream == -1)
+ demuxer->astream = stream_id;
+
+ if(stream_id == demuxer->astream && demuxer->do_audio)
+ {
+ demuxer->aformat = format;
+ if(pts) demuxer->pes_audio_time = pts;
+ mpeg3packet_read_int32(demuxer);
+ pes_packet_length -= demuxer->raw_offset - pes_packet_start;
+
+ memcpy(&demuxer->data_buffer[demuxer->data_size],
+ &demuxer->raw_data[demuxer->raw_offset],
+ pes_packet_length);
+ demuxer->data_size += pes_packet_length;
+ demuxer->raw_offset += pes_packet_length;
+ }
+ else
+ {
+ pes_packet_length -= demuxer->raw_offset - pes_packet_start;
+ mpeg3packet_skip(demuxer, pes_packet_length);
+ }
+ }
+ else
+ if(stream_id == 0xbc || 1)
+ {
+ pes_packet_length -= demuxer->raw_offset - pes_packet_start;
+ mpeg3packet_skip(demuxer, pes_packet_length);
+ }
+ }
+ else
+ if(stream_id == MPEG3_PRIVATE_STREAM_2 || stream_id == MPEG3_PADDING_STREAM)
+ {
+ pes_packet_length -= demuxer->raw_offset - pes_packet_start;
+ mpeg3packet_skip(demuxer, pes_packet_length);
+ }
+
+ while(demuxer->raw_offset + 4 < demuxer->raw_size)
+ {
+ *header = mpeg3packet_read_int32(demuxer);
+ if((*header >> 8) != MPEG3_PACKET_START_CODE_PREFIX)
+ demuxer->raw_offset -= 3;
+ else
+ break;
+ }
+
+ return 0;
+}
+
+int mpeg3_read_program(mpeg3_demuxer_t *demuxer)
+{
+ int result = 0, count = 0;
+ mpeg3_t *file = demuxer->file;
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+ unsigned int header;
+ demuxer->raw_size = demuxer->packet_size;
+ demuxer->raw_offset = 0;
+ demuxer->data_size = 0;
+
+/* Search backward for it. */
+ header = mpeg3io_read_int32(title->fs);
+ result = mpeg3io_eof(title->fs);
+
+ if(!result) result = mpeg3io_seek_relative(title->fs, -4);
+
+// Search backwards for header
+ while(header != MPEG3_PACK_START_CODE && !result && count < demuxer->packet_size)
+ {
+ result = mpeg3io_seek_relative(title->fs, -1);
+ if(!result)
+ {
+ header >>= 8;
+ header |= mpeg3io_read_char(title->fs) << 24;
+ result = mpeg3io_seek_relative(title->fs, -1);
+ }
+ count++;
+ }
+
+ if(result)
+ {
+// couldn't find MPEG3_PACK_START_CODE
+ return 1;
+ }
+
+ result = mpeg3io_read_data(demuxer->raw_data, demuxer->packet_size, title->fs);
+
+ if(result)
+ {
+ perror("mpeg3_read_program");
+ return 1;
+ }
+
+ header = mpeg3packet_read_int32(demuxer);
+ while(demuxer->raw_offset + 4 < demuxer->raw_size && !result)
+ {
+ if(header == MPEG3_PACK_START_CODE)
+ {
+ result = mpeg3_get_pack_header(demuxer, &header);
+ }
+ else
+ if((header >> 8) == MPEG3_PACKET_START_CODE_PREFIX)
+ {
+ result = mpeg3_get_ps_pes_packet(demuxer, &header);
+ }
+ }
+ return result;
+}
+
+double mpeg3_lookup_time_offset(mpeg3_demuxer_t *demuxer, long byte)
+{
+ int i;
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+
+ if(!title->timecode_table_size) return 0;
+
+ for(i = title->timecode_table_size - 1;
+ i >= 0 && title->timecode_table[i].start_byte > byte;
+ i--)
+ ;
+ if(i < 0) i = 0;
+ return title->timecode_table[i].absolute_start_time - title->timecode_table[i].start_time;
+}
+
+int mpeg3_advance_timecode(mpeg3_demuxer_t *demuxer, int reverse)
+{
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+ int result = 0;
+ int do_seek = 0;
+
+/* Skip timecode advancing when constructing timecode table */
+ if(!title->timecode_table ||
+ !title->timecode_table_size ||
+ demuxer->generating_timecode) return 0;
+
+ if(!reverse)
+ {
+/* Get inside the current timecode */
+ if(mpeg3io_tell(title->fs) < title->timecode_table[demuxer->current_timecode].start_byte)
+ {
+ mpeg3io_seek(title->fs, title->timecode_table[demuxer->current_timecode].start_byte);
+ }
+
+/* Get the next timecode */
+ while(!result &&
+ (mpeg3io_tell(title->fs) >= title->timecode_table[demuxer->current_timecode].end_byte ||
+ demuxer->current_program != title->timecode_table[demuxer->current_timecode].program))
+ {
+
+/*
+ * printf("mpeg3_advance_timecode %d %d %d %d\n", mpeg3io_tell(title->fs), title->timecode_table[demuxer->current_timecode].end_byte,
+ * demuxer->current_program, title->timecode_table[demuxer->current_timecode].program);
+ */
+
+ demuxer->current_timecode++;
+ if(demuxer->current_timecode >= title->timecode_table_size)
+ {
+ demuxer->current_timecode = 0;
+ if(demuxer->current_title + 1 < demuxer->total_titles)
+ {
+ mpeg3demux_open_title(demuxer, demuxer->current_title + 1);
+ do_seek = 1;
+ }
+ else
+ {
+ mpeg3io_seek(title->fs, mpeg3io_total_bytes(title->fs));
+ result = 1;
+ }
+ }
+ title = demuxer->titles[demuxer->current_title];
+ }
+
+ if(!result && do_seek)
+ {
+ mpeg3io_seek(title->fs, title->timecode_table[demuxer->current_timecode].start_byte);
+ }
+ }
+ else
+ {
+/* Get the previous timecode */
+ while(!result &&
+ (mpeg3io_tell(title->fs) < title->timecode_table[demuxer->current_timecode].start_byte ||
+ demuxer->current_program != title->timecode_table[demuxer->current_timecode].program))
+ {
+/*
+ * if(demuxer->do_audio) printf("mpeg3_reverse_timecode %d %d %d %d\n", mpeg3io_tell(title->fs), title->timecode_table[demuxer->current_timecode].end_byte,
+ * demuxer->current_program, title->timecode_table[demuxer->current_timecode].program);
+ */
+ demuxer->current_timecode--;
+ if(demuxer->current_timecode < 0)
+ {
+ if(demuxer->current_title > 0)
+ {
+ mpeg3demux_open_title(demuxer, demuxer->current_title - 1);
+ title = demuxer->titles[demuxer->current_title];
+ demuxer->current_timecode = title->timecode_table_size - 1;
+ do_seek = 1;
+ }
+ else
+ {
+ mpeg3io_seek(title->fs, 0);
+ demuxer->current_timecode = 0;
+ result = 1;
+ }
+ }
+ }
+
+ if(!result && do_seek)
+ mpeg3io_seek(title->fs, title->timecode_table[demuxer->current_timecode].start_byte);
+ }
+
+ return result;
+}
+
+/* Read packet in the forward direction */
+int mpeg3_read_next_packet(mpeg3_demuxer_t *demuxer)
+{
+ int result = 0;
+ long current_position;
+ mpeg3_t *file = demuxer->file;
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+ demuxer->data_size = 0;
+ demuxer->data_position = 0;
+
+/* Flip the file descriptor back to the end of the packet for forward */
+/* reading. */
+ if(demuxer->reverse)
+ {
+ result = mpeg3io_seek_relative(title->fs, demuxer->packet_size);
+ demuxer->reverse = 0;
+ }
+
+/* Read packets until the output buffer is full */
+ if(!result)
+ {
+ do
+ {
+ result = mpeg3_advance_timecode(demuxer, 0);
+
+ if(!result)
+ {
+ demuxer->time_offset = mpeg3_lookup_time_offset(demuxer, mpeg3io_tell(title->fs));
+
+ if(file->is_transport_stream)
+ {
+ result = mpeg3_read_transport(demuxer);
+ }
+ else
+ if(file->is_program_stream)
+ {
+ result = mpeg3_read_program(demuxer);
+ }
+ else
+ {
+/* Read elementary stream. */
+ result = mpeg3io_read_data(demuxer->data_buffer, demuxer->packet_size, title->fs);
+ if(!result) demuxer->data_size = demuxer->packet_size;
+ }
+ }
+ }while(!result && demuxer->data_size == 0 && (demuxer->do_audio || demuxer->do_video));
+ }
+
+ return result;
+}
+
+/* Read the packet right before the packet we're currently on. */
+int mpeg3_read_prev_packet(mpeg3_demuxer_t *demuxer)
+{
+ int result = 0;
+ mpeg3_t *file = demuxer->file;
+ long current_position;
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+
+ demuxer->data_size = 0;
+ demuxer->data_position = 0;
+
+ do
+ {
+/* Rewind to the start of the packet to be read. */
+ result = mpeg3io_seek_relative(title->fs, -demuxer->packet_size);
+
+ if(!result) result = mpeg3_advance_timecode(demuxer, 1);
+ if(!result) demuxer->time_offset = mpeg3_lookup_time_offset(demuxer, mpeg3io_tell(title->fs));
+
+ if(file->is_transport_stream && !result)
+ {
+ result = mpeg3_read_transport(demuxer);
+ if(!mpeg3io_bof(title->fs))
+ /* if(!result) */result = mpeg3io_seek_relative(title->fs, -demuxer->packet_size);
+ }
+ else
+ if(file->is_program_stream && !result)
+ {
+
+ result = mpeg3_read_program(demuxer);
+ if(!mpeg3io_bof(title->fs))
+ /* if(!result) */result = mpeg3io_seek_relative(title->fs, -demuxer->packet_size);
+ }
+ else
+ if(!result)
+ {
+/* Elementary stream */
+/* Read the packet forwards and seek back to the start */
+ result = mpeg3io_read_data(demuxer->data_buffer, demuxer->packet_size, title->fs);
+ if(!result)
+ {
+ demuxer->data_size = demuxer->packet_size;
+ result = mpeg3io_seek_relative(title->fs, -demuxer->packet_size);
+ }
+ }
+ }while(!result && demuxer->data_size == 0 && (demuxer->do_audio || demuxer->do_video));
+
+/* Remember that the file descriptor is at the beginning of the packet just read. */
+ demuxer->reverse = 1;
+ demuxer->error_flag = result;
+ return result;
+}
+
+
+/* Used for audio */
+int mpeg3demux_read_data(mpeg3_demuxer_t *demuxer,
+ unsigned char *output,
+ long size)
+{
+ long i;
+ int result = 0;
+ mpeg3_t *file = demuxer->file;
+ demuxer->error_flag = 0;
+
+ if(demuxer->data_position >= 0)
+ {
+/* Read forwards */
+ for(i = 0; i < size && !result; )
+ {
+ int fragment_size = size - i;
+ if(fragment_size > demuxer->data_size - demuxer->data_position)
+ fragment_size = demuxer->data_size - demuxer->data_position;
+ memcpy(output + i, demuxer->data_buffer + demuxer->data_position, fragment_size);
+ demuxer->data_position += fragment_size;
+ i += fragment_size;
+
+ if(i < size)
+ {
+ result = mpeg3_read_next_packet(demuxer);
+ }
+ }
+ }
+ else
+ {
+/* Read backwards a full packet. */
+/* Only good for reading less than the size of a full packet, but */
+/* this routine should only be used for searching for previous markers. */
+ long current_position = demuxer->data_position;
+ result = mpeg3_read_prev_packet(demuxer);
+ if(!result) demuxer->data_position = demuxer->data_size + current_position;
+ memcpy(output, demuxer->data_buffer + demuxer->data_position, size);
+ demuxer->data_position += size;
+ }
+
+ demuxer->error_flag = result;
+ return result;
+}
+
+unsigned int mpeg3demux_read_char_packet(mpeg3_demuxer_t *demuxer)
+{
+ demuxer->error_flag = 0;
+ if(demuxer->data_position >= demuxer->data_size)
+ demuxer->error_flag = mpeg3_read_next_packet(demuxer);
+ demuxer->next_char = demuxer->data_buffer[demuxer->data_position++];
+ return demuxer->next_char;
+}
+
+unsigned int mpeg3demux_read_prev_char_packet(mpeg3_demuxer_t *demuxer)
+{
+ demuxer->error_flag = 0;
+ demuxer->data_position--;
+ if(demuxer->data_position < 0)
+ {
+ demuxer->error_flag = mpeg3_read_prev_packet(demuxer);
+ if(!demuxer->error_flag) demuxer->data_position = demuxer->data_size - 1;
+ }
+ demuxer->next_char = demuxer->data_buffer[demuxer->data_position];
+ return demuxer->next_char;
+}
+
+mpeg3demux_timecode_t* mpeg3_append_timecode(mpeg3_demuxer_t *demuxer,
+ mpeg3_title_t *title,
+ long prev_byte,
+ double prev_time,
+ long next_byte,
+ double next_time,
+ int dont_store)
+{
+ mpeg3demux_timecode_t *new_table;
+ mpeg3demux_timecode_t *new_timecode, *old_timecode;
+ long i;
+
+ if(!title->timecode_table ||
+ title->timecode_table_allocation <= title->timecode_table_size)
+ {
+ if(title->timecode_table_allocation == 0)
+ title->timecode_table_allocation = 1;
+ else
+ title->timecode_table_allocation *= 2;
+
+ new_table = (mpeg3demux_timecode_t*)calloc(1, sizeof(mpeg3demux_timecode_t) * title->timecode_table_allocation);
+ if(title->timecode_table)
+ {
+ for(i = 0; i < title->timecode_table_size; i++)
+ {
+ new_table[i] = title->timecode_table[i];
+ }
+
+ free(title->timecode_table);
+ }
+ title->timecode_table = new_table;
+ }
+
+ if(!dont_store)
+ {
+ new_timecode = &title->timecode_table[title->timecode_table_size];
+ new_timecode->start_byte = next_byte;
+ new_timecode->start_time = next_time;
+ new_timecode->absolute_start_time = 0;
+
+ if(title->timecode_table_size > 0)
+ {
+ old_timecode = &title->timecode_table[title->timecode_table_size - 1];
+ old_timecode->end_byte = prev_byte;
+ old_timecode->end_time = prev_time;
+ new_timecode->absolute_start_time =
+ prev_time -
+ old_timecode->start_time +
+ old_timecode->absolute_start_time;
+ new_timecode->absolute_end_time = next_time;
+ }
+ }
+
+ title->timecode_table_size++;
+ return new_timecode;
+}
+
+mpeg3demux_timecode_t* mpeg3demux_next_timecode(mpeg3_demuxer_t *demuxer,
+ int *current_title,
+ int *current_timecode,
+ int current_program)
+{
+ int done = 0;
+ while(!done)
+ {
+/* Increase timecode number */
+ if(*current_timecode < demuxer->titles[*current_title]->timecode_table_size - 1)
+ {
+ (*current_timecode)++;
+ if(demuxer->titles[*current_title]->timecode_table[*current_timecode].program == current_program)
+ return &(demuxer->titles[*current_title]->timecode_table[*current_timecode]);
+ }
+ else
+/* Increase title number */
+ if(*current_title < demuxer->total_titles - 1)
+ {
+ (*current_title)++;
+ (*current_timecode) = 0;
+ if(demuxer->titles[*current_title]->timecode_table[*current_timecode].program == current_program)
+ return &(demuxer->titles[*current_title]->timecode_table[*current_timecode]);
+ }
+ else
+/* End of disk */
+ done = 1;
+ }
+ return 0;
+}
+
+mpeg3demux_timecode_t* mpeg3demux_prev_timecode(mpeg3_demuxer_t *demuxer,
+ int *current_title,
+ int *current_timecode,
+ int current_program)
+{
+ int done = 0;
+ while(!done)
+ {
+/* Increase timecode number */
+ if(*current_timecode > 0)
+ {
+ (*current_timecode)--;
+ if(demuxer->titles[*current_title]->timecode_table[*current_timecode].program == current_program)
+ return &(demuxer->titles[*current_title]->timecode_table[*current_timecode]);
+ }
+ else
+/* Increase title number */
+ if(*current_title > 0)
+ {
+ (*current_title)--;
+ (*current_timecode) = demuxer->titles[*current_title]->timecode_table_size - 1;
+ if(demuxer->titles[*current_title]->timecode_table[*current_timecode].program == current_program)
+ return &(demuxer->titles[*current_title]->timecode_table[*current_timecode]);
+ }
+ else
+/* End of disk */
+ done = 1;
+
+ }
+ return 0;
+}
+
+int mpeg3demux_open_title(mpeg3_demuxer_t *demuxer, int title_number)
+{
+ mpeg3_title_t *title;
+
+ if(title_number < demuxer->total_titles)
+ {
+ if(demuxer->current_title >= 0)
+ {
+ mpeg3io_close_file(demuxer->titles[demuxer->current_title]->fs);
+ demuxer->current_title = -1;
+ }
+
+ title = demuxer->titles[title_number];
+ if(mpeg3io_open_file(title->fs))
+ {
+ demuxer->error_flag = 1;
+ perror("mpeg3demux_open_title");
+ }
+ else
+ {
+ demuxer->current_title = title_number;
+ }
+ }
+
+ demuxer->current_timecode = 0;
+
+ return demuxer->error_flag;
+}
+
+/* Assign program numbers to interleaved programs */
+int mpeg3demux_assign_programs(mpeg3_demuxer_t *demuxer)
+{
+ int current_program = 0;
+ int current_title = 0, previous_title;
+ int current_timecode = 0, previous_timecode;
+ double current_time, current_length;
+ int done = 0;
+ int interleaved = 0;
+ mpeg3demux_timecode_t *timecode1, *timecode2;
+ double program_times[MPEG3_MAX_STREAMS];
+ int total_programs = 1;
+ int i, j;
+ int program_exists, last_program_assigned = 0;
+ int total_timecodes;
+ mpeg3_title_t **titles = demuxer->titles;
+
+ for(i = 0, total_timecodes = 0; i < demuxer->total_titles; i++)
+ total_timecodes += demuxer->titles[i]->timecode_table_size;
+
+// if(total_timecodes < 3) return 0;
+
+/*
+ * // Assign programs based on length of contiguous timecode
+ * timecode1 = demuxer->titles[current_title]->timecode_table;
+ * while(!done)
+ * {
+ * if(!timecode1) done = 1;
+ * else
+ * if(timecode1->end_time - timecode1->start_time < MPEG3_PROGRAM_THRESHOLD)
+ * {
+ * // Got interleaved section
+ * interleaved = 1;
+ * program_times[0] = timecode1->end_time;
+ *
+ * while(interleaved && !done)
+ * {
+ * timecode2 = mpeg3demux_next_timecode(demuxer,
+ * &current_title,
+ * &current_timecode,
+ * 0);
+ *
+ * if(!timecode2) done = 1;
+ * else
+ * {
+ * // Another segment of interleaved data
+ * if(timecode2->end_time - timecode2->start_time < MPEG3_PROGRAM_THRESHOLD)
+ * {
+ * // Search program times for where the previous instance of the program left off
+ * for(program_exists = 0, i = 0;
+ * i < total_programs && !program_exists;
+ * i++)
+ * {
+ * // Got a previous instance of the program
+ * if(program_times[i] + 0.5 > timecode2->start_time &&
+ * program_times[i] - 0.5 < timecode2->start_time)
+ * {
+ * program_times[i] = timecode2->end_time;
+ * timecode2->program = i;
+ * program_exists = 1;
+ *
+ * // Programs must always start at 0 for an interleaved section
+ * if(i < last_program_assigned && i != 0)
+ * {
+ * // Shift programs in the interleaved section down until they start at 0
+ * for(j = 0; j < total_programs - 1; j++)
+ * program_times[j] = program_times[j + 1];
+ *
+ * for(previous_title = current_title, previous_timecode = current_timecode;
+ * titles[previous_title]->timecode_table[previous_timecode].program > 0 &&
+ * (previous_title >= 0 || previous_timecode >= 0); )
+ * {
+ * titles[previous_title]->timecode_table[previous_timecode].program--;
+ * previous_timecode--;
+ * if(previous_timecode < 0 && previous_title > 0)
+ * {
+ * previous_title--;
+ * previous_timecode = titles[previous_title]->timecode_table_size - 1;
+ * }
+ * }
+ * }
+ * }
+ * }
+ *
+ * // Didn't get one
+ * if(!program_exists)
+ * {
+ * program_times[total_programs] = timecode2->end_time;
+ * timecode2->program = total_programs++;
+ * }
+ * last_program_assigned = timecode2->program;
+ * }
+ * // No more interleaved section
+ * else
+ * {
+ * interleaved = 0;
+ * // Restart program table from the beginning
+ * total_programs = 1;
+ * last_program_assigned = 0;
+ * timecode1 = mpeg3demux_next_timecode(demuxer,
+ * &current_title,
+ * &current_timecode,
+ * 0);
+ * }
+ * }
+ * }
+ * }
+ * else
+ * // Get next timecode
+ * timecode1 = mpeg3demux_next_timecode(demuxer,
+ * &current_title,
+ * &current_timecode,
+ * 0);
+ * }
+ *
+ * demuxer->total_programs = total_programs;
+ */
+
+/* Assign absolute timecodes in each program. */
+ for(current_program = 0;
+ current_program < total_programs;
+ current_program++)
+ {
+ current_time = 0;
+ current_title = 0;
+ current_timecode = -1;
+ while(timecode1 = mpeg3demux_next_timecode(demuxer,
+ &current_title,
+ &current_timecode,
+ current_program))
+ {
+ timecode1->absolute_start_time = current_time;
+ current_time += timecode1->end_time - timecode1->start_time;
+ timecode1->absolute_end_time = current_time;
+ }
+ }
+//for(i = 0; i < demuxer->total_titles; i++) mpeg3_dump_title(demuxer->titles[i]);
+ demuxer->current_program = 0;
+ return 0;
+}
+
+/* ==================================================================== */
+/* Entry points */
+/* ==================================================================== */
+
+mpeg3_demuxer_t* mpeg3_new_demuxer(mpeg3_t *file, int do_audio, int do_video, int stream_id)
+{
+ mpeg3_demuxer_t *demuxer = (mpeg3_demuxer_t*)calloc(1, sizeof(mpeg3_demuxer_t));
+ int i;
+
+/* The demuxer will change the default packet size for its own use. */
+ demuxer->file = file;
+ demuxer->packet_size = file->packet_size;
+ demuxer->do_audio = do_audio;
+ demuxer->do_video = do_video;
+
+/* Allocate buffer + padding */
+ demuxer->raw_data = (unsigned char*)calloc(1, MPEG3_MAX_PACKSIZE);
+ demuxer->data_buffer = (unsigned char*)calloc(1, MPEG3_MAX_PACKSIZE);
+ demuxer->data_allocated = MPEG3_MAX_PACKSIZE;
+/* System specific variables */
+ demuxer->audio_pid = stream_id;
+ demuxer->video_pid = stream_id;
+ demuxer->astream = stream_id;
+ demuxer->vstream = stream_id;
+ demuxer->current_title = -1;
+ return demuxer;
+}
+
+int mpeg3_delete_demuxer(mpeg3_demuxer_t *demuxer)
+{
+ int i;
+
+ if(demuxer->current_title >= 0)
+ {
+ mpeg3io_close_file(demuxer->titles[demuxer->current_title]->fs);
+ }
+
+ for(i = 0; i < demuxer->total_titles; i++)
+ {
+ mpeg3_delete_title(demuxer->titles[i]);
+ }
+
+ if(demuxer->data_buffer) free(demuxer->data_buffer);
+ free(demuxer->raw_data);
+ free(demuxer);
+}
+
+/* Create a title. */
+/* Build a table of timecodes contained in the program stream. */
+/* If toc is 0 just read the first and last timecode. */
+int mpeg3demux_create_title(mpeg3_demuxer_t *demuxer, int timecode_search, FILE *toc)
+{
+ int result = 0, done = 0, counter_start, counter;
+ mpeg3_t *file = demuxer->file;
+ long next_byte, prev_byte;
+ double next_time, prev_time, absolute_time;
+ long i;
+ mpeg3_title_t *title;
+ unsigned long test_header = 0;
+ mpeg3demux_timecode_t *timecode = 0;
+
+ demuxer->error_flag = 0;
+ demuxer->generating_timecode = 1;
+
+/* Create a single title */
+ if(!demuxer->total_titles)
+ {
+ demuxer->titles[0] = mpeg3_new_title(file, file->fs->path);
+ demuxer->total_titles = 1;
+ mpeg3demux_open_title(demuxer, 0);
+ }
+ title = demuxer->titles[0];
+ title->total_bytes = mpeg3io_total_bytes(title->fs);
+
+
+/* Get the packet size from the file */
+ if(file->is_program_stream)
+ {
+ mpeg3io_seek(title->fs, 4);
+ for(i = 0; i < MPEG3_MAX_PACKSIZE &&
+ test_header != MPEG3_PACK_START_CODE; i++)
+ {
+ test_header <<= 8;
+ test_header |= mpeg3io_read_char(title->fs);
+ }
+ if(i < MPEG3_MAX_PACKSIZE) demuxer->packet_size = i;
+ mpeg3io_seek(title->fs, 0);
+ }
+ else
+ demuxer->packet_size = file->packet_size;
+
+/* Get timecodes for the title */
+ if(file->is_transport_stream || file->is_program_stream)
+ {
+ mpeg3io_seek(title->fs, 0);
+ while(!done && !result && !mpeg3io_eof(title->fs))
+ {
+ next_byte = mpeg3io_tell(title->fs);
+ result = mpeg3_read_next_packet(demuxer);
+
+ if(!result)
+ {
+ next_time = demuxer->time;
+//printf("%f %f\n", next_time, prev_time);
+ if(next_time < prev_time ||
+ next_time - prev_time > MPEG3_CONTIGUOUS_THRESHOLD ||
+ !title->timecode_table_size)
+ {
+/* Discontinuous */
+ timecode = mpeg3_append_timecode(demuxer,
+ title,
+ prev_byte,
+ prev_time,
+ next_byte,
+ next_time,
+ 0);
+/*
+ * printf("timecode: %ld %ld %f %f\n",
+ * timecode->start_byte,
+ * timecode->end_byte,
+ * timecode->start_time,
+ * timecode->end_time);
+ */
+
+ counter_start = (int)next_time;
+ }
+ prev_time = next_time;
+ prev_byte = next_byte;
+ counter = (int)next_time;
+ }
+
+/* Just get the first bytes if not building a toc to get the stream ID's. */
+ if(next_byte > 0x100000 &&
+ (!timecode_search || !toc)) done = 1;
+ }
+
+/* Get the last timecode */
+ if(!toc || !timecode_search)
+ {
+ result = mpeg3io_seek(title->fs, title->total_bytes);
+ if(!result) result = mpeg3_read_prev_packet(demuxer);
+ }
+
+ if(title->timecode_table && timecode)
+ {
+ timecode->end_byte = title->total_bytes;
+// timecode->end_byte = mpeg3io_tell(title->fs)/* + demuxer->packet_size */;
+ timecode->end_time = demuxer->time;
+ timecode->absolute_end_time = timecode->end_time - timecode->start_time;
+ }
+ }
+
+ mpeg3io_seek(title->fs, 0);
+ demuxer->generating_timecode = 0;
+ return 0;
+}
+
+int mpeg3demux_print_timecodes(mpeg3_title_t *title, FILE *output)
+{
+ mpeg3demux_timecode_t *timecode;
+ int i;
+
+ if(title->timecode_table)
+ {
+ for(i = 0; i < title->timecode_table_size; i++)
+ {
+ timecode = &title->timecode_table[i];
+
+ fprintf(output, "REGION: %ld %ld %f %f\n",
+ timecode->start_byte,
+ timecode->end_byte,
+ timecode->start_time,
+ timecode->end_time);
+ }
+ }
+ return 0;
+}
+
+/* Read the title information from a toc */
+int mpeg3demux_read_titles(mpeg3_demuxer_t *demuxer)
+{
+ char string1[MPEG3_STRLEN], string2[MPEG3_STRLEN];
+ long start_byte, end_byte;
+ float start_time, end_time;
+ mpeg3_title_t *title = 0;
+ mpeg3_t *file = demuxer->file;
+
+// Eventually use IFO file to generate titles
+ while(!feof(file->fs->fd))
+ {
+ fscanf(file->fs->fd, "%s %s %ld %f %f %f",
+ string1,
+ string2,
+ &end_byte,
+ &start_time,
+ &end_time);
+
+ if(!strncasecmp(string1, "PATH:", 5))
+ {
+ title = demuxer->titles[demuxer->total_titles++] = mpeg3_new_title(file, string2);
+
+ if(demuxer->current_title < 0)
+ mpeg3demux_open_title(demuxer, 0);
+ }
+ else
+ if(title)
+ {
+ start_byte = atol(string2);
+ if(!strcasecmp(string1, "REGION:"))
+ {
+ mpeg3_append_timecode(demuxer,
+ title,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1);
+ title->timecode_table[title->timecode_table_size - 1].start_byte = start_byte;
+ title->timecode_table[title->timecode_table_size - 1].end_byte = end_byte;
+ title->timecode_table[title->timecode_table_size - 1].start_time = start_time;
+ title->timecode_table[title->timecode_table_size - 1].end_time = end_time;
+ }
+ else
+ if(!strcasecmp(string1, "ASTREAM:"))
+ demuxer->astream_table[start_byte] = end_byte;
+ else
+ if(!strcasecmp(string1, "VSTREAM:"))
+ demuxer->vstream_table[start_byte] = end_byte;
+ else
+ if(!strcasecmp(string1, "SIZE:"))
+ title->total_bytes = start_byte;
+ else
+ if(!strcasecmp(string1, "PACKETSIZE:"))
+ demuxer->packet_size = start_byte;
+ }
+ }
+
+ mpeg3demux_assign_programs(demuxer);
+ return 0;
+}
+
+int mpeg3demux_copy_titles(mpeg3_demuxer_t *dst, mpeg3_demuxer_t *src)
+{
+ long i;
+ mpeg3_t *file = dst->file;
+ mpeg3_title_t *dst_title, *src_title;
+
+ dst->packet_size = src->packet_size;
+ dst->total_titles = src->total_titles;
+ dst->total_programs = src->total_programs;
+ for(i = 0; i < MPEG3_MAX_STREAMS; i++)
+ {
+ dst->astream_table[i] = src->astream_table[i];
+ dst->vstream_table[i] = src->vstream_table[i];
+ }
+ for(i = 0; i < src->total_titles; i++)
+ {
+ src_title = src->titles[i];
+ dst_title = dst->titles[i] = mpeg3_new_title(file, src->titles[i]->fs->path);
+ mpeg3_copy_title(dst_title, src_title);
+ }
+
+ mpeg3demux_open_title(dst, src->current_title);
+ return 0;
+}
+
+int mpeg3demux_print_streams(mpeg3_demuxer_t *demuxer, FILE *toc)
+{
+ int i;
+/* Print the stream information */
+ for(i = 0; i < MPEG3_MAX_STREAMS; i++)
+ {
+ if(demuxer->astream_table[i])
+ fprintf(toc, "ASTREAM: %d %d\n", i, demuxer->astream_table[i]);
+
+ if(demuxer->vstream_table[i])
+ fprintf(toc, "VSTREAM: %d %d\n", i, demuxer->vstream_table[i]);
+ }
+ return 0;
+}
+
+/* Need a timecode table to do this */
+double mpeg3demux_length(mpeg3_demuxer_t *demuxer)
+{
+ mpeg3_title_t *title;
+ int i, j;
+ double length;
+
+ for(i = demuxer->total_titles - 1; i >= 0; i--)
+ {
+ title = demuxer->titles[i];
+ for(j = title->timecode_table_size - 1; j >= 0; j--)
+ {
+ if(title->timecode_table[j].program == demuxer->current_program)
+ {
+ return title->timecode_table[j].end_time -
+ title->timecode_table[j].start_time +
+ title->timecode_table[j].absolute_start_time;
+ }
+ }
+ }
+
+ return 1;
+}
+
+int mpeg3demux_eof(mpeg3_demuxer_t *demuxer)
+{
+ if(demuxer->current_title >= 0)
+ {
+ if(mpeg3io_eof(demuxer->titles[demuxer->current_title]->fs) &&
+ demuxer->current_title >= demuxer->total_titles - 1)
+ return 1;
+ }
+
+ return 0;
+}
+
+int mpeg3demux_bof(mpeg3_demuxer_t *demuxer)
+{
+ if(demuxer->current_title >= 0)
+ {
+ if(mpeg3io_bof(demuxer->titles[demuxer->current_title]->fs) &&
+ demuxer->current_title <= 0)
+ return 1;
+ }
+ return 0;
+}
+
+
+/* For elemental streams seek to a byte */
+int mpeg3demux_seek_byte(mpeg3_demuxer_t *demuxer, long byte)
+{
+ long current_position;
+ mpeg3_t *file = demuxer->file;
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+
+ demuxer->data_position = 0;
+ demuxer->data_size = 0;
+
+ demuxer->error_flag = mpeg3io_seek(title->fs, byte);
+
+ if(!demuxer->error_flag && (file->is_transport_stream || file->is_program_stream))
+ {
+/* Get on a packet boundary only for system streams. */
+ current_position = mpeg3io_tell(title->fs);
+ if(byte % demuxer->packet_size)
+ {
+ demuxer->error_flag |= mpeg3io_seek(title->fs, current_position - (current_position % demuxer->packet_size));
+ }
+ }
+ return demuxer->error_flag;
+}
+
+/* For programs streams and toc seek to a time */
+int mpeg3demux_seek_time(mpeg3_demuxer_t *demuxer, double new_time)
+{
+ int i, j, done = 0, result = 0;
+ double byte_offset, new_byte_offset;
+ double guess = 0, minimum = 65535;
+ mpeg3_title_t *title;
+ mpeg3demux_timecode_t *timecode;
+
+ demuxer->error_flag = 0;
+
+ i = 0;
+ j = 0;
+ title = demuxer->titles[i];
+ timecode = &title->timecode_table[j];
+
+/* Get the title and timecode of the new position */
+ while(!demuxer->error_flag &&
+ !(timecode->absolute_start_time <= new_time &&
+ timecode->absolute_end_time > new_time &&
+ timecode->program == demuxer->current_program))
+ {
+/* Next timecode */
+ j++;
+ if(j >= title->timecode_table_size)
+ {
+ i++;
+ j = 0;
+ if(i >= demuxer->total_titles)
+ {
+ demuxer->error_flag = 1;
+ return 1;
+ }
+ else
+ {
+ mpeg3demux_open_title(demuxer, i);
+ }
+ }
+
+ title = demuxer->titles[i];
+ timecode = &title->timecode_table[j];
+ }
+
+/* Guess the new byte position */
+ demuxer->current_timecode = j;
+
+ byte_offset = ((new_time - timecode->absolute_start_time) /
+ (timecode->absolute_end_time - timecode->absolute_start_time) *
+ (timecode->end_byte - timecode->start_byte) +
+ timecode->start_byte);
+//printf("mpeg3demux_seek_time %f %f\n", new_time, byte_offset);
+
+ while(!done && !result && byte_offset >= 0)
+ {
+ result = mpeg3demux_seek_byte(demuxer, (long)byte_offset);
+//printf("seek_time 0 byte %.0f want %f result %d\n", byte_offset, new_time, result);
+
+ if(!result)
+ {
+ result = mpeg3_read_next_packet(demuxer);
+// printf("seek_time 1 guess %f want %f\n", guess, new_time);
+ guess = demuxer->time + demuxer->time_offset;
+
+ if(fabs(new_time - guess) >= fabs(minimum)) done = 1;
+ else
+ {
+ minimum = guess - new_time;
+ new_byte_offset = byte_offset + ((new_time - guess) /
+ (timecode->end_time - timecode->start_time) *
+ (timecode->end_byte - timecode->start_byte));
+ if(labs((long)new_byte_offset - (long)byte_offset) < demuxer->packet_size) done = 1;
+ byte_offset = new_byte_offset;
+ }
+ }
+ }
+
+/* Get one packet before the packet just read */
+ if(!result && byte_offset > demuxer->packet_size && minimum > 0)
+ {
+ mpeg3_read_prev_packet(demuxer);
+ mpeg3_read_prev_packet(demuxer);
+ }
+//printf("seek_time %d %d %d\n", demuxer->current_title, demuxer->current_timecode, mpeg3demux_tell(demuxer));
+ demuxer->error_flag = result;
+ return result;
+}
+
+int mpeg3demux_seek_percentage(mpeg3_demuxer_t *demuxer, double percentage)
+{
+ double total_bytes = 0;
+ double absolute_position;
+ long relative_position;
+ int i, new_title;
+ mpeg3_title_t *title;
+
+ demuxer->error_flag = 0;
+
+/* Get the absolute byte position; */
+ for(i = 0; i < demuxer->total_titles; i++)
+ total_bytes += demuxer->titles[i]->total_bytes;
+
+ absolute_position = percentage * total_bytes;
+
+/* Get the title the byte is inside */
+ for(new_title = 0, total_bytes = 0; new_title < demuxer->total_titles; new_title++)
+ {
+ total_bytes += demuxer->titles[new_title]->total_bytes;
+ if(absolute_position < total_bytes) break;
+ }
+
+ if(new_title >= demuxer->total_titles)
+ {
+ new_title = demuxer->total_titles - 1;
+ }
+
+/* Got a title */
+ title = demuxer->titles[new_title];
+ total_bytes -= title->total_bytes;
+ relative_position = (long)(absolute_position - total_bytes);
+
+/* Get the timecode the byte is inside */
+ for(demuxer->current_timecode = 0;
+ demuxer->current_timecode < title->timecode_table_size;
+ demuxer->current_timecode++)
+ {
+ if(title->timecode_table[demuxer->current_timecode].start_byte <= relative_position &&
+ title->timecode_table[demuxer->current_timecode].end_byte > relative_position)
+ {
+ break;
+ }
+ }
+
+ if(demuxer->current_timecode >= title->timecode_table_size)
+ demuxer->current_timecode = title->timecode_table_size - 1;
+
+/* Get the nearest timecode in the same program */
+ while(demuxer->current_timecode < title->timecode_table_size - 1 &&
+ title->timecode_table[demuxer->current_timecode].program != demuxer->current_program)
+ {
+ demuxer->current_timecode++;
+ }
+
+/* Open the new title and seek to the correct byte */
+ if(new_title != demuxer->current_title)
+ {
+ demuxer->error_flag = mpeg3demux_open_title(demuxer, new_title);
+ }
+
+ if(!demuxer->error_flag)
+ demuxer->error_flag = mpeg3io_seek(title->fs, relative_position);
+
+ return demuxer->error_flag;
+}
+
+double mpeg3demux_tell_percentage(mpeg3_demuxer_t *demuxer)
+{
+ double total_bytes = 0;
+ double position = 0;
+ int i;
+
+ demuxer->error_flag = 0;
+ position = mpeg3io_tell(demuxer->titles[demuxer->current_title]->fs);
+ for(i = 0; i < demuxer->total_titles; i++)
+ {
+ if(i == demuxer->current_title)
+ {
+ position += total_bytes;
+ }
+ total_bytes += demuxer->titles[i]->total_bytes;
+ }
+ return position / total_bytes;
+}
+
+double mpeg3demux_get_time(mpeg3_demuxer_t *demuxer)
+{
+ return demuxer->time;
+}
+
+long mpeg3demux_tell(mpeg3_demuxer_t *demuxer)
+{
+ return mpeg3io_tell(demuxer->titles[demuxer->current_title]->fs);
+}
+
+long mpeg3demuxer_total_bytes(mpeg3_demuxer_t *demuxer)
+{
+ mpeg3_title_t *title = demuxer->titles[demuxer->current_title];
+ return title->total_bytes;
+}
+
+mpeg3_demuxer_t* mpeg3_get_demuxer(mpeg3_t *file)
+{
+ if(file->is_program_stream || file->is_transport_stream)
+ {
+ if(file->has_audio) return file->atrack[0]->demuxer;
+ else
+ if(file->has_video) return file->vtrack[0]->demuxer;
+ }
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3demux.h b/core/multimedia/opieplayer/libmpeg3/mpeg3demux.h
new file mode 100644
index 0000000..9dfd182
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3demux.h
@@ -0,0 +1,118 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3DEMUX_H
+#define MPEG3DEMUX_H
+
+#include "mpeg3title.h"
+#include <stdio.h>
+
+typedef struct
+{
+ struct mpeg3_rec* file;
+/* Data consisting of the multiplexed packet */
+ unsigned char *raw_data;
+ long raw_offset;
+ int raw_size;
+ long packet_size;
+/* Only one is on depending on which track owns the demultiplexer. */
+ int do_audio;
+ int do_video;
+/* Data consisting of the elementary stream */
+ unsigned char *data_buffer;
+ long data_size;
+ long data_position;
+ long data_allocated;
+/* Remember when the file descriptor is at the beginning of the packet just read. */
+ int reverse;
+/* Set to 1 when eof or attempt to read before beginning */
+ int error_flag;
+/* Temp variables for returning */
+ unsigned char next_char;
+/* Correction factor for time discontinuity */
+ double time_offset;
+ int generating_timecode;
+
+/* Titles */
+ mpeg3_title_t *titles[MPEG3_MAX_STREAMS];
+ int total_titles;
+ int current_title;
+
+/* Tables of every stream ID encountered */
+ int astream_table[MPEG3_MAX_STREAMS]; /* macro of audio format if audio */
+ int vstream_table[MPEG3_MAX_STREAMS]; /* 1 if video */
+
+/* Programs */
+ int total_programs;
+ int current_program;
+
+/* Timecode in the current title */
+ int current_timecode;
+
+/* Byte position in the current title */
+ long current_byte;
+
+ int transport_error_indicator;
+ int payload_unit_start_indicator;
+ int pid;
+ int transport_scrambling_control;
+ int adaptation_field_control;
+ int continuity_counter;
+ int is_padding;
+ int pid_table[MPEG3_PIDMAX];
+ int continuity_counters[MPEG3_PIDMAX];
+ int total_pids;
+ int adaptation_fields;
+ double time; /* Time in seconds */
+ int audio_pid;
+ int video_pid;
+ int astream; /* Video stream ID being decoded. -1 = select first ID in stream */
+ int vstream; /* Audio stream ID being decoded. -1 = select first ID in stream */
+ int aformat; /* format of the audio derived from multiplexing codes */
+ long program_association_tables;
+ int table_id;
+ int section_length;
+ int transport_stream_id;
+ long pes_packets;
+ double pes_audio_time; /* Presentation Time stamps */
+ double pes_video_time; /* Presentation Time stamps */
+} mpeg3_demuxer_t;
+
+/* ========================================================================= */
+/* Entry points */
+/* ========================================================================= */
+
+#define mpeg3demux_error(demuxer) (((mpeg3_demuxer_t *)(demuxer))->error_flag)
+
+#define mpeg3demux_time_offset(demuxer) (((mpeg3_demuxer_t *)(demuxer))->time_offset)
+
+#define mpeg3demux_current_time(demuxer) (((mpeg3_demuxer_t *)(demuxer))->time + ((mpeg3_demuxer_t *)(demuxer))->time_offset)
+
+#define mpeg3demux_read_char(demuxer) \
+ ((((mpeg3_demuxer_t *)(demuxer))->data_position < ((mpeg3_demuxer_t *)(demuxer))->data_size) ? \
+ ((mpeg3_demuxer_t *)(demuxer))->data_buffer[((mpeg3_demuxer_t *)(demuxer))->data_position++] : \
+ mpeg3demux_read_char_packet(demuxer))
+
+#define mpeg3demux_read_prev_char(demuxer) \
+ ((((mpeg3_demuxer_t *)(demuxer))->data_position != 0) ? \
+ ((mpeg3_demuxer_t *)(demuxer))->data_buffer[((mpeg3_demuxer_t *)(demuxer))->data_position--] : \
+ mpeg3demux_read_prev_char_packet(demuxer))
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3io.c b/core/multimedia/opieplayer/libmpeg3/mpeg3io.c
new file mode 100644
index 0000000..c5807a7
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3io.c
@@ -0,0 +1,127 @@
+#include "mpeg3private.h"
+#include "mpeg3protos.h"
+
+#ifndef _WIN32
+#include <mntent.h>
+#else
+
+#endif
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <string.h>
+
+mpeg3_fs_t* mpeg3_new_fs(char *path)
+{
+ mpeg3_fs_t *fs = (mpeg3_fs_t*)calloc(1, sizeof(mpeg3_fs_t));
+ fs->css = mpeg3_new_css();
+ strcpy(fs->path, path);
+ return fs;
+}
+
+int mpeg3_delete_fs(mpeg3_fs_t *fs)
+{
+ mpeg3_delete_css(fs->css);
+ free(fs);
+ return 0;
+}
+
+int mpeg3_copy_fs(mpeg3_fs_t *dst, mpeg3_fs_t *src)
+{
+ strcpy(dst->path, src->path);
+ dst->current_byte = 0;
+ return 0;
+}
+
+long mpeg3io_get_total_bytes(mpeg3_fs_t *fs)
+{
+/*
+ * struct stat st;
+ * if(stat(fs->path, &st) < 0) return 0;
+ * return (long)st.st_size;
+ */
+
+ fseek(fs->fd, 0, SEEK_END);
+ fs->total_bytes = ftell(fs->fd);
+ fseek(fs->fd, 0, SEEK_SET);
+ return fs->total_bytes;
+}
+
+int mpeg3io_open_file(mpeg3_fs_t *fs)
+{
+/* Need to perform authentication before reading a single byte. */
+ mpeg3_get_keys(fs->css, fs->path);
+
+ if(!(fs->fd = fopen(fs->path, "rb")))
+ {
+ perror("mpeg3io_open_file");
+ return 1;
+ }
+
+ fs->total_bytes = mpeg3io_get_total_bytes(fs);
+
+ if(!fs->total_bytes)
+ {
+ fclose(fs->fd);
+ return 1;
+ }
+ fs->current_byte = 0;
+ return 0;
+}
+
+int mpeg3io_close_file(mpeg3_fs_t *fs)
+{
+ if(fs->fd) fclose(fs->fd);
+ fs->fd = 0;
+ return 0;
+}
+
+int mpeg3io_read_data(unsigned char *buffer, long bytes, mpeg3_fs_t *fs)
+{
+ int result = 0;
+//printf("read %d bytes\n",bytes);
+ result = !fread(buffer, 1, bytes, fs->fd);
+ fs->current_byte += bytes;
+ return (result && bytes);
+}
+
+int mpeg3io_device(char *path, char *device)
+{
+ struct stat file_st, device_st;
+ struct mntent *mnt;
+ FILE *fp;
+
+ if(stat(path, &file_st) < 0)
+ {
+ perror("mpeg3io_device");
+ return 1;
+ }
+
+#ifndef _WIN32
+ fp = setmntent(MOUNTED, "r");
+ while(fp && (mnt = getmntent(fp)))
+ {
+ if(stat(mnt->mnt_fsname, &device_st) < 0) continue;
+ if(device_st.st_rdev == file_st.st_dev)
+ {
+ strncpy(device, mnt->mnt_fsname, MPEG3_STRLEN);
+ break;
+ }
+ }
+ endmntent(fp);
+#endif
+
+ return 0;
+}
+
+int mpeg3io_seek(mpeg3_fs_t *fs, long byte)
+{
+ fs->current_byte = byte;
+ return fseek(fs->fd, byte, SEEK_SET);
+}
+
+int mpeg3io_seek_relative(mpeg3_fs_t *fs, long bytes)
+{
+ fs->current_byte += bytes;
+ return fseek(fs->fd, fs->current_byte, SEEK_SET);
+}
+
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3io.h b/core/multimedia/opieplayer/libmpeg3/mpeg3io.h
new file mode 100644
index 0000000..092e411
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3io.h
@@ -0,0 +1,74 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3IO_H
+#define MPEG3IO_H
+
+
+#include <stdio.h>
+#include "mpeg3css.h"
+#include "mpeg3private.inc"
+
+/* Filesystem structure */
+
+typedef struct
+{
+ FILE *fd;
+ mpeg3_css_t *css; /* Encryption object */
+ char path[MPEG3_STRLEN];
+/* Hypothetical position of file pointer */
+ long current_byte;
+ long total_bytes;
+} mpeg3_fs_t;
+
+#define mpeg3io_tell(fs) (((mpeg3_fs_t *)(fs))->current_byte)
+
+// End of file
+#define mpeg3io_eof(fs) (((mpeg3_fs_t *)(fs))->current_byte >= ((mpeg3_fs_t *)(fs))->total_bytes)
+
+// Beginning of file
+#define mpeg3io_bof(fs) (((mpeg3_fs_t *)(fs))->current_byte < 0)
+
+
+#define mpeg3io_total_bytes(fs) (((mpeg3_fs_t *)(fs))->total_bytes)
+
+extern inline unsigned int mpeg3io_read_int32(mpeg3_fs_t *fs)
+{
+ int a, b, c, d;
+ unsigned int result;
+/* Do not fread. This breaks byte ordering. */
+ a = (unsigned char)fgetc(fs->fd);
+ b = (unsigned char)fgetc(fs->fd);
+ c = (unsigned char)fgetc(fs->fd);
+ d = (unsigned char)fgetc(fs->fd);
+ result = ((int)a << 24) |
+ ((int)b << 16) |
+ ((int)c << 8) |
+ ((int)d);
+ fs->current_byte += 4;
+ return result;
+}
+
+extern inline unsigned int mpeg3io_read_char(mpeg3_fs_t *fs)
+{
+ fs->current_byte++;
+ return fgetc(fs->fd);
+}
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3private.h b/core/multimedia/opieplayer/libmpeg3/mpeg3private.h
new file mode 100644
index 0000000..f0e11aa
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3private.h
@@ -0,0 +1,62 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3PRIVATE_H
+#define MPEG3PRIVATE_H
+
+#include "mpeg3atrack.h"
+#include "mpeg3css.h"
+#include "mpeg3io.h"
+#include "mpeg3private.inc"
+#include "mpeg3title.h"
+#include "mpeg3vtrack.h"
+
+struct mpeg3_rec
+{
+ mpeg3_fs_t *fs; /* Store entry path here */
+ mpeg3_demuxer_t *demuxer; /* Master tables */
+
+/* Media specific */
+ int has_audio;
+ int has_video;
+ int total_astreams;
+ int total_vstreams;
+ mpeg3_atrack_t *atrack[MPEG3_MAX_STREAMS];
+ mpeg3_vtrack_t *vtrack[MPEG3_MAX_STREAMS];
+
+/* Only one of these is set to 1 to specify what kind of stream we have. */
+ int is_transport_stream;
+ int is_program_stream;
+ int is_audio_stream; /* Elemental stream */
+ int is_video_stream; /* Elemental stream */
+ long packet_size;
+/* Type and stream for getting current percentage */
+ int last_type_read; /* 1 - audio 2 - video */
+ int last_stream_read;
+
+ int program; /* Number of program to play */
+ int cpus;
+ int have_mmx;
+};
+
+typedef struct mpeg3_rec mpeg3_t;
+
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3private.inc b/core/multimedia/opieplayer/libmpeg3/mpeg3private.inc
new file mode 100644
index 0000000..7e56e7f
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3private.inc
@@ -0,0 +1,110 @@
+#ifndef LIBMPEG3_INC
+#define LIBMPEG3_INC
+
+#ifdef _WIN32
+
+// Disable some compiler warnings that happen a lot but don't matter
+#pragma warning( disable : 4003 ) // not enough parameters for macro
+#pragma warning( disable : 4305 ) // truncation frm double to float
+#pragma warning( disable : 4715 ) // not all control paths return a value
+#pragma warning( disable : 4716 ) // must return a value
+
+#ifdef LIBMPEG_EXPORTS
+#define LIBMPEG_EXPORT __declspec( dllexport )
+#else
+#define LIBMPEG_EXPORT __declspec( dllimport )
+#endif
+
+#ifdef ERROR
+#undef ERROR
+#include <windows.h>
+#undef ERROR
+#define ERROR (-1)
+#else
+#include <windows.h>
+#undef ERROR
+#endif
+
+#define inline __inline
+#define M_PI 3.14159265358979323846
+#define M_SQRT2 1.41421356237309504880
+
+#define pthread_mutexattr_t int
+#define pthread_mutexattr_init(a) // Nothing
+#define pthread_mutex_t CRITICAL_SECTION
+#define pthread_mutex_init(a,b) InitializeCriticalSection(a)
+#define pthread_mutex_lock(a) EnterCriticalSection(a)
+#define pthread_mutex_unlock(a) LeaveCriticalSection(a)
+#define pthread_mutex_destroy(a) //DeleteCriticalSection(a)
+
+#define pthread_attr_t int
+#define pthread_attr_init(a) // Nothing
+#define pthread_t unsigned long
+#define pthread_create(a,b,c,d) *(a) = _beginthread(c,0,d)
+//#define pthread_join(a,b) _endthread(b)
+//#define pthread_join(a,b) _cwait(NULL,b,NULL)
+#define pthread_join(a,b)
+
+#define strncasecmp(a,b,c) _strnicmp(a,b,c)
+#define strcasecmp(a,b) _stricmp(a,b)
+#define bzero(a,b) memset(a,0,b)
+
+#else
+
+#define LONGLONG long long
+#define ULONGLONG unsigned long long
+
+#endif
+
+#ifndef LIBMPEG_EXPORT
+#define LIBMPEG_EXPORT
+#endif
+
+#define MPEG3_FLOAT32 mpeg3_real_t
+#define MPEG3_INT16 short int
+#define MPEG3_INT32 int
+#define MPEG3_INT64 long
+
+#define MPEG3_TOC_PREFIX 0x544f4356
+#define MPEG3_TOC_PREFIXLOWER 0x746f6376
+#define MPEG3_ID3_PREFIX 0x494433
+#define MPEG3_RIFF_CODE 0x52494646
+#define MPEG3_PROC_CPUINFO "/proc/cpuinfo"
+#define MPEG3_TS_PACKET_SIZE 188
+#define MPEG3_DVD_PACKET_SIZE 0x800
+#define MPEG3_SYNC_BYTE 0x47
+#define MPEG3_PACK_START_CODE 0x000001ba
+#define MPEG3_SEQUENCE_START_CODE 0x000001b3
+#define MPEG3_SEQUENCE_END_CODE 0x000001b7
+#define MPEG3_SYSTEM_START_CODE 0x000001bb
+#define MPEG3_STRLEN 1024
+#define MPEG3_PIDMAX 20 /* Maximum number of PIDs in one stream */
+#define MPEG3_PROGRAM_ASSOCIATION_TABLE 0x00
+#define MPEG3_CONDITIONAL_ACCESS_TABLE 0x01
+#define MPEG3_PACKET_START_CODE_PREFIX 0x000001
+#define MPEG3_PRIVATE_STREAM_2 0xbf
+#define MPEG3_PADDING_STREAM 0xbe
+#define MPEG3_GOP_START_CODE 0x000001b8
+#define MPEG3_PICTURE_START_CODE 0x00000100
+#define MPEG3_EXT_START_CODE 0x000001b5
+#define MPEG3_USER_START_CODE 0x000001b2
+#define MPEG3_SLICE_MIN_START 0x00000101
+#define MPEG3_SLICE_MAX_START 0x000001af
+#define MPEG3_AC3_START_CODE 0x0b77
+#define MPEG3_PCM_START_CODE 0x0180
+#define MPEG3_MAX_CPUS 256
+#define MPEG3_MAX_STREAMS 256
+#define MPEG3_MAX_PACKSIZE 262144
+#define MPEG3_CONTIGUOUS_THRESHOLD 10 /* Positive difference before declaring timecodes discontinuous */
+#define MPEG3_PROGRAM_THRESHOLD 5 /* Minimum number of seconds before interleaving programs */
+#define MPEG3_SEEK_THRESHOLD 16 /* Number of frames difference before absolute seeking */
+
+/* Values for audio format */
+#define AUDIO_UNKNOWN 0
+#define AUDIO_MPEG 1
+#define AUDIO_AC3 2
+#define AUDIO_PCM 3
+#define AUDIO_AAC 4
+#define AUDIO_JESUS 5
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3protos.h b/core/multimedia/opieplayer/libmpeg3/mpeg3protos.h
new file mode 100644
index 0000000..631336b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3protos.h
@@ -0,0 +1,278 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3PROTOS_H
+#define MPEG3PROTOS_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/* CSS */
+
+mpeg3_css_t* mpeg3_new_css();
+
+/* DEMUX */
+
+mpeg3_demuxer_t* mpeg3_new_demuxer(mpeg3_t *file, int do_audio, int do_video, int stream_id);
+int mpeg3_delete_demuxer(mpeg3_demuxer_t *demuxer);
+int mpeg3demux_read_data(mpeg3_demuxer_t *demuxer, unsigned char *output, long size);
+unsigned int mpeg3demux_read_int32(mpeg3_demuxer_t *demuxer);
+unsigned int mpeg3demux_read_int24(mpeg3_demuxer_t *demuxer);
+unsigned int mpeg3demux_read_int16(mpeg3_demuxer_t *demuxer);
+double mpeg3demux_length(mpeg3_demuxer_t *demuxer);
+mpeg3_demuxer_t* mpeg3_get_demuxer(mpeg3_t *file);
+long mpeg3demux_tell(mpeg3_demuxer_t *demuxer);
+double mpeg3demux_tell_percentage(mpeg3_demuxer_t *demuxer);
+double mpeg3demux_get_time(mpeg3_demuxer_t *demuxer);
+int mpeg3demux_eof(mpeg3_demuxer_t *demuxer);
+int mpeg3demux_bof(mpeg3_demuxer_t *demuxer);
+int mpeg3demux_copy_titles(mpeg3_demuxer_t *dst, mpeg3_demuxer_t *src);
+int mpeg3demux_create_title(mpeg3_demuxer_t *demuxer, int timecode_search, FILE *toc);
+long mpeg3demuxer_total_bytes(mpeg3_demuxer_t *demuxer);
+int mpeg3demux_seek_byte(mpeg3_demuxer_t *demuxer, long byte);
+int mpeg3demux_seek_time(mpeg3_demuxer_t *demuxer, double new_time);
+int mpeg3demux_seek_percentage(mpeg3_demuxer_t *demuxer, double percentage);
+int mpeg3demux_print_streams(mpeg3_demuxer_t *demuxer, FILE *toc);
+int mpeg3demux_print_timecodes(mpeg3_title_t *title, FILE *output);
+int mpeg3demux_read_titles(mpeg3_demuxer_t *demuxer);
+int mpeg3demux_open_title(mpeg3_demuxer_t *demuxer, int title_number);
+
+/* TITLE */
+
+mpeg3_title_t* mpeg3_new_title(mpeg3_t *file, char *path);
+int mpeg3_delete_title(mpeg3_title_t *title);
+int mpeg3_copy_title(mpeg3_title_t *dst, mpeg3_title_t *src);
+
+
+/* ATRACK */
+
+mpeg3_atrack_t* mpeg3_new_atrack(mpeg3_t *file, int stream_id, int is_ac3, mpeg3_demuxer_t *demuxer);
+int mpeg3_delete_atrack(mpeg3_t *file, mpeg3_atrack_t *atrack);
+
+/* VTRACK */
+
+mpeg3_vtrack_t* mpeg3_new_vtrack(mpeg3_t *file, int stream_id, mpeg3_demuxer_t *demuxer);
+int mpeg3_delete_vtrack(mpeg3_t *file, mpeg3_vtrack_t *vtrack);
+
+/* AUDIO */
+mpeg3audio_t* mpeg3audio_new(mpeg3_t *file, mpeg3_atrack_t *track, int is_ac3);
+int mpeg3audio_delete(mpeg3audio_t *audio);
+int mpeg3audio_seek_sample(mpeg3audio_t *audio, long sample);
+int mpeg3audio_seek_percentage(mpeg3audio_t *audio, double percentage);
+int mpeg3audio_decode_audio(mpeg3audio_t *audio,
+ mpeg3_real_t *output_f,
+ short *output_i, int sampleSpacing,
+ int channel,
+ long start_position,
+ long len);
+int mpeg3audio_read_raw(mpeg3audio_t *audio, unsigned char *output, long *size, long max_size);
+int mpeg3audio_read_ac3_header(mpeg3audio_t *audio);
+int mpeg3audio_read_pcm_header(mpeg3audio_t *audio);
+int mpeg3audio_synth_mono(mpeg3audio_t *audio, mpeg3_real_t *bandPtr, mpeg3_real_t *samples, int *pnt);
+int mpeg3audio_synth_stereo(mpeg3audio_t *audio, mpeg3_real_t *bandPtr, int channel, mpeg3_real_t *out, int *pnt);
+int mpeg3audio_replace_buffer(mpeg3audio_t *audio, long new_allocation);
+int mpeg3audio_ac3_exponent_unpack(mpeg3audio_t *audio,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk);
+int mpeg3audio_ac3_bit_allocate(mpeg3audio_t *audio,
+ unsigned int fscod,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk);
+int mpeg3audio_ac3_coeff_unpack(mpeg3audio_t *audio,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk,
+ mpeg3ac3_stream_samples_t samples);
+int mpeg3audio_ac3_imdct(mpeg3audio_t *audio,
+ mpeg3_ac3bsi_t *bsi,
+ mpeg3_ac3audblk_t *audblk,
+ mpeg3ac3_stream_samples_t samples);
+int mpeg3audio_replace_buffer(mpeg3audio_t *audio, long new_allocation);
+int mpeg3audio_dct36(mpeg3_real_t *inbuf, mpeg3_real_t *o1, mpeg3_real_t *o2, mpeg3_real_t *wintab, mpeg3_real_t *tsbuf);
+int mpeg3audio_dct12(mpeg3_real_t *in,mpeg3_real_t *rawout1,mpeg3_real_t *rawout2,register mpeg3_real_t *wi,register mpeg3_real_t *ts);
+int mpeg3audio_read_header(mpeg3audio_t *audio);
+int mpeg3audio_do_ac3(mpeg3audio_t *audio);
+int mpeg3audio_dolayer2(mpeg3audio_t *audio);
+int mpeg3audio_dolayer3(mpeg3audio_t *audio);
+int mpeg3audio_do_pcm(mpeg3audio_t *audio);
+int mpeg3audio_dct64(mpeg3_real_t *a, mpeg3_real_t *b, mpeg3_real_t *c);
+int mpeg3audio_reset_synths(mpeg3audio_t *audio);
+int mpeg3audio_prev_header(mpeg3audio_t *audio);
+int mpeg3audio_read_layer3_frame(mpeg3audio_t *audio);
+int mpeg3audio_new_decode_tables(mpeg3audio_t *audio);
+int mpeg3audio_imdct_init(mpeg3audio_t *audio);
+
+
+/* VIDEO */
+mpeg3video_t* mpeg3video_new(mpeg3_t *file, mpeg3_vtrack_t *track);
+int mpeg3video_delete(mpeg3video_t *video);
+int mpeg3video_read_frame(mpeg3video_t *video,
+ long frame_number,
+ unsigned char **output_rows,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h,
+ int out_w,
+ int out_h,
+ int color_model);
+int mpeg3video_set_cpus(mpeg3video_t *video, int cpus);
+int mpeg3video_set_mmx(mpeg3video_t *video, int use_mmx);
+int mpeg3video_seek(mpeg3video_t *video);
+int mpeg3video_seek_frame(mpeg3video_t *video, long frame);
+int mpeg3video_seek_percentage(mpeg3video_t *video, double percentage);
+int mpeg3video_previous_frame(mpeg3video_t *video);
+int mpeg3video_drop_frames(mpeg3video_t *video, long frames);
+int mpeg3video_read_yuvframe(mpeg3video_t *video,
+ long frame_number,
+ char *y_output,
+ char *u_output,
+ char *v_output,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h);
+int mpeg3video_read_raw(mpeg3video_t *video, unsigned char *output, long *size, long max_size);
+int mpeg3video_display_second_field(mpeg3video_t *video);
+int mpeg3video_init_output();
+int mpeg3video_get_header(mpeg3video_t *video, int dont_repeat);
+int mpeg3video_getpicture(mpeg3video_t *video, int framenum);
+int mpeg3video_match_refframes(mpeg3video_t *video);
+int mpeg3video_next_code(mpeg3_bits_t* stream, unsigned int code);
+int mpeg3video_prev_code(mpeg3_bits_t* stream, unsigned int code);
+int mpeg3video_getgophdr(mpeg3video_t *video);
+int mpeg3video_present_frame(mpeg3video_t *video);
+int mpeg3video_read_frame_backend(mpeg3video_t *video, int skip_bframes);
+int mpeg3video_getslicehdr(mpeg3_slice_t *slice, mpeg3video_t *video);
+int mpeg3video_get_macroblock_address(mpeg3_slice_t *slice);
+int mpeg3video_macroblock_modes(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int *pmb_type,
+ int *pstwtype,
+ int *pstwclass,
+ int *pmotion_type,
+ int *pmv_count,
+ int *pmv_format,
+ int *pdmv,
+ int *pmvscale,
+ int *pdct_type);
+int mpeg3video_motion_vectors(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int PMV[2][2][2],
+ int dmvector[2],
+ int mv_field_sel[2][2],
+ int s,
+ int mv_count,
+ int mv_format,
+ int h_r_size,
+ int v_r_size,
+ int dmv,
+ int mvscale);
+void mpeg3video_motion_vector(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int *PMV,
+ int *dmvector,
+ int h_r_size,
+ int v_r_size,
+ int dmv,
+ int mvscale,
+ int full_pel_vector);
+int mpeg3video_get_cbp(mpeg3_slice_t *slice);
+int mpeg3video_clearblock(mpeg3_slice_t *slice, int comp, int size);
+int mpeg3video_getmpg2intrablock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp,
+ int dc_dct_pred[]);
+int mpeg3video_getintrablock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp,
+ int dc_dct_pred[]);
+int mpeg3video_getmpg2interblock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp);
+int mpeg3video_getinterblock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp);
+int mpeg3video_reconstruct(mpeg3video_t *video,
+ int bx,
+ int by,
+ int mb_type,
+ int motion_type,
+ int PMV[2][2][2],
+ int mv_field_sel[2][2],
+ int dmvector[2],
+ int stwtype);
+void mpeg3video_calc_dmv(mpeg3video_t *video,
+ int DMV[][2],
+ int *dmvector,
+ int mvx,
+ int mvy);
+
+
+/* FILESYSTEM */
+
+mpeg3_fs_t* mpeg3_new_fs(char *path);
+int mpeg3_delete_fs(mpeg3_fs_t *fs);
+int mpeg3io_open_file(mpeg3_fs_t *fs);
+int mpeg3io_close_file(mpeg3_fs_t *fs);
+int mpeg3io_read_data(unsigned char *buffer, long bytes, mpeg3_fs_t *fs);
+
+/* BITSTREAM */
+mpeg3_bits_t* mpeg3bits_new_stream(mpeg3_t *file, mpeg3_demuxer_t *demuxer);
+unsigned int mpeg3bits_getbits(mpeg3_bits_t* stream, int n);
+int mpeg3bits_read_buffer(mpeg3_bits_t* stream, unsigned char *buffer, int bytes);
+int mpeg3bits_use_ptr(mpeg3_bits_t* stream, unsigned char *buffer);
+int mpeg3bits_use_demuxer(mpeg3_bits_t* stream);
+int mpeg3bits_refill(mpeg3_bits_t* stream);
+int mpeg3bits_getbitoffset(mpeg3_bits_t *stream);
+void mpeg3bits_start_reverse(mpeg3_bits_t* stream);
+void mpeg3bits_start_forward(mpeg3_bits_t* stream);
+int mpeg3bits_delete_stream(mpeg3_bits_t* stream);
+int mpeg3bits_byte_align(mpeg3_bits_t *stream);
+int mpeg3bits_seek_start(mpeg3_bits_t* stream);
+int mpeg3bits_seek_time(mpeg3_bits_t* stream, double time_position);
+int mpeg3bits_seek_byte(mpeg3_bits_t* stream, long position);
+int mpeg3bits_seek_percentage(mpeg3_bits_t* stream, double percentage);
+unsigned int mpeg3bits_next_startcode(mpeg3_bits_t* stream);
+int mpeg3bits_seek_end(mpeg3_bits_t* stream);
+
+/* MISC */
+int mpeg3_read_toc(mpeg3_t *file);
+int mpeg3_generate_toc(FILE *output, char *path, int timecode_search, int print_streams);
+int mpeg3_mmx_test();
+int mpeg3io_seek(mpeg3_fs_t *fs, long byte);
+int mpeg3io_seek_relative(mpeg3_fs_t *fs, long bytes);
+int mpeg3io_device(char *path, char *device);
+int mpeg3_decrypt_packet(mpeg3_css_t *css, unsigned char *sector);
+int mpeg3_delete_css(mpeg3_css_t *css);
+int mpeg3_get_keys(mpeg3_css_t *css, char *path);
+int mpeg3_copy_fs(mpeg3_fs_t *dst, mpeg3_fs_t *src);
+int mpeg3_min(int x, int y);
+int mpeg3_max(int x, int y);
+int mpeg3_new_slice_buffer(mpeg3_slice_buffer_t *slice_buffer);
+int mpeg3_expand_slice_buffer(mpeg3_slice_buffer_t *slice_buffer);
+int mpeg3_delete_slice_decoder(mpeg3_slice_t *slice);
+int mpeg3_new_slice_decoder(mpeg3video_t *video, mpeg3_slice_t *slice);
+int mpeg3_delete_slice_buffer(mpeg3_slice_buffer_t *slice_buffer);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3title.c b/core/multimedia/opieplayer/libmpeg3/mpeg3title.c
new file mode 100644
index 0000000..0c93363
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3title.c
@@ -0,0 +1,63 @@
+#include "mpeg3private.h"
+#include "mpeg3protos.h"
+#include "mpeg3title.h"
+
+
+#include <stdlib.h>
+
+
+mpeg3_title_t* mpeg3_new_title(mpeg3_t *file, char *path)
+{
+ mpeg3_title_t *title = (mpeg3_title_t*)calloc(1, sizeof(mpeg3_title_t));
+ title->fs = mpeg3_new_fs(path);
+ title->file = file;
+ return title;
+}
+
+int mpeg3_delete_title(mpeg3_title_t *title)
+{
+ mpeg3_delete_fs(title->fs);
+ if(title->timecode_table_size)
+ {
+ free(title->timecode_table);
+ }
+ free(title);
+ return 0;
+}
+
+
+int mpeg3_copy_title(mpeg3_title_t *dst, mpeg3_title_t *src)
+{
+ int i;
+
+ mpeg3_copy_fs(dst->fs, src->fs);
+ dst->total_bytes = src->total_bytes;
+
+ if(src->timecode_table_size)
+ {
+ dst->timecode_table_allocation = src->timecode_table_allocation;
+ dst->timecode_table_size = src->timecode_table_size;
+ dst->timecode_table = (mpeg3demux_timecode_t*)calloc(1, sizeof(mpeg3demux_timecode_t) * dst->timecode_table_allocation);
+
+ for(i = 0; i < dst->timecode_table_size; i++)
+ {
+ dst->timecode_table[i] = src->timecode_table[i];
+ }
+ }
+}
+
+int mpeg3_dump_title(mpeg3_title_t *title)
+{
+ int i;
+
+ for(i = 0; i < title->timecode_table_size; i++)
+ {
+ printf("%f: %d - %d %f %f %d\n",
+ title->timecode_table[i].absolute_start_time,
+ title->timecode_table[i].start_byte,
+ title->timecode_table[i].end_byte,
+ title->timecode_table[i].start_time,
+ title->timecode_table[i].end_time,
+ title->timecode_table[i].program);
+ }
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3title.h b/core/multimedia/opieplayer/libmpeg3/mpeg3title.h
new file mode 100644
index 0000000..a853217
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3title.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3TITLE_H
+#define MPEG3TITLE_H
+
+#include "mpeg3io.h"
+
+typedef struct
+{
+ long start_byte;
+ double start_time;
+ double absolute_start_time;
+ double absolute_end_time;
+ long end_byte;
+ double end_time;
+ int program;
+} mpeg3demux_timecode_t;
+
+typedef struct
+{
+ struct mpeg3_rec *file;
+ mpeg3_fs_t *fs;
+ long total_bytes; /* Total bytes in file. Critical for seeking and length. */
+/* Timecode table */
+ mpeg3demux_timecode_t *timecode_table;
+ long timecode_table_size; /* Number of entries */
+ long timecode_table_allocation; /* Number of available slots */
+} mpeg3_title_t;
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3toc.c b/core/multimedia/opieplayer/libmpeg3/mpeg3toc.c
new file mode 100644
index 0000000..84b31cb
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3toc.c
@@ -0,0 +1,81 @@
+#include "libmpeg3.h"
+#include "mpeg3protos.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+int main(int argc, char *argv[])
+{
+ int i;
+/* FILE *output; */
+ char new_path[1024], *ext;
+ struct stat st;
+ long size;
+ int timecode_search = 0;
+
+ if(argc < 2)
+ {
+ fprintf(stderr, "Create a table of contents for a DVD.\n"
+ " Usage: mpeg3toc [-t] <filename>...\n"
+ " -t Perform timecode search.\n"
+ "\n"
+ " The filenames should be absolute paths unless you plan\n"
+ " to always run your movie player from the same directory\n"
+ " as the filename. Alternatively you can edit the toc by\n"
+ " hand.\n"
+ " The timecode search allows XMovie to play the Matrix.\n"
+ "Example: mpeg3toc /cd2/video_ts/vts_01_*.vob > titanic.toc\n");
+ exit(1);
+ }
+
+ for(i = 1; i < argc; i++)
+ {
+ if(!strcmp(argv[i], "-t"))
+ {
+ timecode_search = 1;
+ }
+ else
+ {
+/* Get just name */
+ ext = strrchr(argv[i], '/');
+ if(ext)
+ {
+ ext++;
+ strcpy(new_path, ext);
+ }
+ else
+ strcpy(new_path, argv[i]);
+
+
+/* Replace suffix */
+ ext = strrchr(new_path, '.');
+ if(ext)
+ {
+ sprintf(ext, ".toc");
+ }
+ else
+ strcat(new_path, ".toc");
+
+/* fprintf(stderr, "Creating %s\n", new_path); */
+
+ stat(argv[i], &st);
+ size = (long)st.st_size;
+
+ if(!size)
+ {
+ fprintf(stderr, "%s is 0 length. Skipping\n", new_path);
+ }
+ else
+ {
+/* Just want the first title's streams */
+ if(mpeg3_generate_toc(stdout, argv[i], timecode_search, i == argc - 1))
+ {
+ fprintf(stderr, "Skipping %s\n", argv[i]);
+ }
+ }
+ }
+ }
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.c b/core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.c
new file mode 100644
index 0000000..dffe9d0
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.c
@@ -0,0 +1,33 @@
+#include "libmpeg3.h"
+#include "mpeg3protos.h"
+
+#include <stdlib.h>
+
+mpeg3_vtrack_t* mpeg3_new_vtrack(mpeg3_t *file, int stream_id, mpeg3_demuxer_t *demuxer)
+{
+ int result = 0;
+ mpeg3_vtrack_t *new_vtrack;
+ new_vtrack = (mpeg3_vtrack_t*)calloc(1, sizeof(mpeg3_vtrack_t));
+ new_vtrack->demuxer = mpeg3_new_demuxer(file, 0, 1, stream_id);
+ if(demuxer) mpeg3demux_copy_titles(new_vtrack->demuxer, demuxer);
+ new_vtrack->current_position = 0;
+
+/* Get information about the track here. */
+ new_vtrack->video = mpeg3video_new(file, new_vtrack);
+ if(!new_vtrack->video)
+ {
+/* Failed */
+ mpeg3_delete_vtrack(file, new_vtrack);
+ new_vtrack = 0;
+ }
+ return new_vtrack;
+}
+
+int mpeg3_delete_vtrack(mpeg3_t *file, mpeg3_vtrack_t *vtrack)
+{
+ if(vtrack->video)
+ mpeg3video_delete(vtrack->video);
+ if(vtrack->demuxer)
+ mpeg3_delete_demuxer(vtrack->demuxer);
+ free(vtrack);
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.h b/core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.h
new file mode 100644
index 0000000..9a3c13d
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/mpeg3vtrack.h
@@ -0,0 +1,39 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3_VTRACK_H
+#define MPEG3_VTRACK_H
+
+#include "mpeg3demux.h"
+#include "video/mpeg3video.h"
+
+struct mpeg3_vtrack_rec
+{
+ int width;
+ int height;
+ float frame_rate;
+ mpeg3_demuxer_t *demuxer;
+ mpeg3video_t *video;
+ long current_position; /* Number of next frame to be played */
+ long total_frames; /* Total frames in the file */
+};
+
+typedef struct mpeg3_vtrack_rec mpeg3_vtrack_t;
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/ronin_narrow.toc b/core/multimedia/opieplayer/libmpeg3/ronin_narrow.toc
new file mode 100644
index 0000000..07cbbf8
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/ronin_narrow.toc
@@ -0,0 +1,26 @@
+TOCVERSION 2
+PATH: /cdrom/video_ts/vts_01_1.vob
+ASTREAM: 0 2
+VSTREAM: 0 1
+ASTREAM: 1 2
+ASTREAM: 2 2
+SIZE: 1073709056
+PACKETSIZE: 2048
+REGION: 0 35557376 0.000000 51.643256
+REGION: 35559424 307005440 0.000000 440.561122
+REGION: 307007488 556705792 0.000000 423.698289
+REGION: 556707840 792827904 0.000000 423.877622
+REGION: 792829952 967956480 0.000000 292.754122
+REGION: 967958528 1073709056 0.000000 191.720711
+TOCVERSION 2
+PATH: /cdrom/video_ts/vts_01_2.vob
+ASTREAM: 0 2
+VSTREAM: 0 1
+ASTREAM: 1 2
+ASTREAM: 2 2
+SIZE: 1073709056
+PACKETSIZE: 2048
+REGION: 0 268423168 191.722344 632.760000
+REGION: 268425216 539189248 0.000000 448.729167
+REGION: 539191296 823230464 0.000000 374.061122
+REGION: 823232512 1073709056 0.000000 421.215667
diff --git a/core/multimedia/opieplayer/libmpeg3/ronin_wide.toc b/core/multimedia/opieplayer/libmpeg3/ronin_wide.toc
new file mode 100644
index 0000000..a638304
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/ronin_wide.toc
@@ -0,0 +1,47 @@
+TOCVERSION 2
+PATH: /cdrom/video_ts/vts_01_1.vob
+SIZE: 1073709056
+PACKETSIZE: 2048
+REGION: 0 33830912 0.000000 51.643256
+REGION: 33832960 321945600 0.000000 440.561122
+REGION: 321947648 566126592 0.000000 423.698289
+REGION: 566128640 804149248 0.000000 423.877622
+REGION: 804151296 979050496 0.000000 292.754122
+REGION: 979052544 1073709056 0.000000 170.331700
+TOCVERSION 2
+PATH: /cdrom/video_ts/vts_01_2.vob
+SIZE: 1073709056
+PACKETSIZE: 2048
+REGION: 0 274845696 170.333322 632.760000
+REGION: 274847744 539138048 0.000000 448.729167
+REGION: 539140096 818880512 0.000000 374.061122
+REGION: 818882560 1073709056 0.000000 431.104722
+TOCVERSION 2
+PATH: /cdrom/video_ts/vts_01_3.vob
+SIZE: 1073709056
+PACKETSIZE: 2048
+REGION: 0 3602432 431.122100 437.362056
+REGION: 3604480 316528640 0.000000 508.150422
+REGION: 316530688 562409472 0.000000 446.758722
+REGION: 562411520 728014848 0.000000 317.737689
+REGION: 728016896 943480832 0.000000 401.809556
+REGION: 943482880 1073709056 0.000000 177.871922
+TOCVERSION 2
+PATH: /cdrom/video_ts/vts_01_4.vob
+SIZE: 1073709056
+PACKETSIZE: 2048
+REGION: 0 224798720 177.873544 496.357422
+REGION: 224800768 469219328 0.000000 431.833522
+REGION: 469221376 718004224 0.000000 426.048756
+REGION: 718006272 978356224 0.000000 411.668422
+REGION: 978358272 1073709056 0.000000 154.534211
+TOCVERSION 2
+PATH: /cdrom/video_ts/vts_01_5.vob
+ASTREAM: 0 2
+VSTREAM: 0 1
+ASTREAM: 1 2
+ASTREAM: 2 2
+SIZE: 78041088
+PACKETSIZE: 2048
+REGION: 0 78028800 154.545878 312.853122
+REGION: 78030848 78041088 0.000000 0.006500
diff --git a/core/multimedia/opieplayer/libmpeg3/timecode.h b/core/multimedia/opieplayer/libmpeg3/timecode.h
new file mode 100644
index 0000000..21e51e5
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/timecode.h
@@ -0,0 +1,31 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef TIMECODE_H
+#define TIMECODE_H
+
+typedef struct
+{
+ long hour;
+ long minute;
+ long second;
+ long frame;
+} mpeg3_timecode_t;
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/video/Makefile b/core/multimedia/opieplayer/libmpeg3/video/Makefile
new file mode 100644
index 0000000..46d8407
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/Makefile
@@ -0,0 +1,32 @@
+include ../global_config
+export CFLAGS
+export CFLAGS_lessopt
+
+OBJS = \
+ getpicture.o \
+ headers.o \
+ idct.o \
+ macroblocks.o \
+ mmxtest.o \
+ motion.o \
+ mpeg3video.o \
+ output.o \
+ reconstruct.o \
+ seek.o \
+ slice.o \
+ vlc.o
+
+
+all: $(OBJS) $(MMXOBJS2)
+
+.c.o:
+ $(CC) -c `./c_flags` -o $@ $<
+
+.s.o:
+ $(NASM) -f elf $*.s
+
+.S.o:
+ $(CC) -S `./c_flags` $*.S
+
+clean:
+ rm -f *.o
diff --git a/core/multimedia/opieplayer/libmpeg3/video/c_flags b/core/multimedia/opieplayer/libmpeg3/video/c_flags
new file mode 100755
index 0000000..d7943d0
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/c_flags
@@ -0,0 +1 @@
+echo $CFLAGS
diff --git a/core/multimedia/opieplayer/libmpeg3/video/getpicture.c b/core/multimedia/opieplayer/libmpeg3/video/getpicture.c
new file mode 100644
index 0000000..4f67484
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/getpicture.c
@@ -0,0 +1,767 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+#include "vlc.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int mpeg3video_get_cbp(mpeg3_slice_t *slice)
+{
+ int code;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+ if((code = mpeg3slice_showbits9(slice_buffer)) >= 128)
+ {
+ code >>= 4;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_CBPtab0[code].len);
+ return mpeg3_CBPtab0[code].val;
+ }
+
+ if(code >= 8)
+ {
+ code >>= 1;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_CBPtab1[code].len);
+ return mpeg3_CBPtab1[code].val;
+ }
+
+ if(code < 1)
+ {
+/* fprintf(stderr,"mpeg3video_get_cbp: invalid coded_block_pattern code\n"); */
+ slice->fault = 1;
+ return 0;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, mpeg3_CBPtab2[code].len);
+ return mpeg3_CBPtab2[code].val;
+}
+
+
+/* set block to zero */
+int mpeg3video_clearblock(mpeg3_slice_t *slice, int comp, int size)
+{
+ slice->sparse[comp] = 1;
+
+/* Compiler error */
+/*
+ * for(i = 0; i < size; i++)
+ * {
+ * bzero(slice->block[comp] + sizeof(short) * 64 * i, sizeof(short) * 64);
+ * }
+ */
+
+ if(size == 6)
+ {
+ bzero(slice->block[comp], sizeof(short) * 64 * 6);
+ }
+ else
+ {
+printf("mpeg3video_clearblock size = %d\n", size);
+ memset(slice->block[comp], 0, sizeof(short) * 64 * size);
+ }
+ return 0;
+}
+
+static inline int mpeg3video_getdclum(mpeg3_slice_buffer_t *slice_buffer)
+{
+ int code, size, val;
+/* decode length */
+ code = mpeg3slice_showbits5(slice_buffer);
+
+ if(code < 31)
+ {
+ size = mpeg3_DClumtab0[code].val;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_DClumtab0[code].len);
+ }
+ else
+ {
+ code = mpeg3slice_showbits9(slice_buffer) - 0x1f0;
+ size = mpeg3_DClumtab1[code].val;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_DClumtab1[code].len);
+ }
+
+ if(size == 0) val = 0;
+ else
+ {
+ val = mpeg3slice_getbits(slice_buffer, size);
+ if((val & (1 << (size - 1))) == 0) val -= (1 << size) - 1;
+ }
+
+ return val;
+}
+
+
+int mpeg3video_getdcchrom(mpeg3_slice_buffer_t *slice_buffer)
+{
+ int code, size, val;
+
+/* decode length */
+ code = mpeg3slice_showbits5(slice_buffer);
+
+ if(code < 31)
+ {
+ size = mpeg3_DCchromtab0[code].val;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_DCchromtab0[code].len);
+ }
+ else
+ {
+ code = mpeg3slice_showbits(slice_buffer, 10) - 0x3e0;
+ size = mpeg3_DCchromtab1[code].val;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_DCchromtab1[code].len);
+ }
+
+ if(size == 0) val = 0;
+ else
+ {
+ val = mpeg3slice_getbits(slice_buffer, size);
+ if((val & (1 << (size - 1))) == 0) val -= (1 << size) - 1;
+ }
+
+ return val;
+}
+
+
+/* decode one intra coded MPEG-1 block */
+
+int mpeg3video_getintrablock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp,
+ int dc_dct_pred[])
+{
+ int val, i, j, sign;
+ unsigned int code;
+ mpeg3_DCTtab_t *tab = 0;
+ short *bp = slice->block[comp];
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+/* decode DC coefficients */
+ if(comp < 4)
+ bp[0] = (dc_dct_pred[0] += mpeg3video_getdclum(slice_buffer)) << 3;
+ else
+ if(comp == 4)
+ bp[0] = (dc_dct_pred[1] += mpeg3video_getdcchrom(slice_buffer)) << 3;
+ else
+ bp[0] = (dc_dct_pred[2] += mpeg3video_getdcchrom(slice_buffer)) << 3;
+
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ bp[0] <<= 4;
+#endif
+
+ if(slice->fault) return 1;
+
+/* decode AC coefficients */
+ for(i = 1; ; i++)
+ {
+ code = mpeg3slice_showbits16(slice_buffer);
+ if(code >= 16384)
+ tab = &mpeg3_DCTtabnext[(code >> 12) - 4];
+ else
+ if(code >= 1024) tab = &mpeg3_DCTtab0[(code >> 8) - 4];
+ else
+ if(code >= 512) tab = &mpeg3_DCTtab1[(code >> 6) - 8];
+ else
+ if(code >= 256) tab = &mpeg3_DCTtab2[(code >> 4) - 16];
+ else
+ if(code >= 128) tab = &mpeg3_DCTtab3[(code >> 3) - 16];
+ else
+ if(code >= 64) tab = &mpeg3_DCTtab4[(code >> 2) - 16];
+ else
+ if(code >= 32) tab = &mpeg3_DCTtab5[(code >> 1) - 16];
+ else
+ if(code >= 16) tab = &mpeg3_DCTtab6[code - 16];
+ else
+ {
+/* fprintf(stderr, "mpeg3video_getintrablock: invalid Huffman code\n"); */
+ slice->fault = 1;
+ return 1;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, tab->len);
+
+ if(tab->run == 64) break; /* end_of_block */
+
+ if(tab->run == 65)
+ {
+/* escape */
+ i += mpeg3slice_getbits(slice_buffer, 6);
+
+ if((val = mpeg3slice_getbits(slice_buffer, 8)) == 0)
+ val = mpeg3slice_getbits(slice_buffer, 8);
+ else
+ if(val == 128)
+ val = mpeg3slice_getbits(slice_buffer, 8) - 256;
+ else
+ if(val > 128)
+ val -= 256;
+
+ if((sign = (val < 0)) != 0) val= -val;
+ }
+ else
+ {
+ i += tab->run;
+ val = tab->level;
+ sign = mpeg3slice_getbit(slice_buffer);
+ }
+
+ if(i < 64)
+ j = video->mpeg3_zigzag_scan_table[i];
+ else
+ {
+ slice->fault = 1;
+ return 1;
+ }
+
+
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ {
+ val = (val * slice->quant_scale * video->intra_quantizer_matrix[j]) << 1;
+ val = (val - 16) | 16;
+ }
+ else
+#endif
+ {
+ val = (val * slice->quant_scale * video->intra_quantizer_matrix[j]) >> 3;
+ val = (val - 1) | 1;
+ }
+
+ bp[j] = sign ? -val : val;
+ }
+
+ if(j != 0)
+ {
+/* not a sparse matrix ! */
+ slice->sparse[comp] = 0;
+ }
+ return 0;
+}
+
+
+/* decode one non-intra coded MPEG-1 block */
+
+int mpeg3video_getinterblock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp)
+{
+ int val, i, j, sign;
+ unsigned int code;
+ mpeg3_DCTtab_t *tab;
+ short *bp = slice->block[comp];
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+/* decode AC coefficients */
+ for(i = 0; ; i++)
+ {
+ code = mpeg3slice_showbits16(slice_buffer);
+ if(code >= 16384)
+ {
+ if(i == 0)
+ tab = &mpeg3_DCTtabfirst[(code >> 12) - 4];
+ else
+ tab = &mpeg3_DCTtabnext[(code >> 12) - 4];
+ }
+ else
+ if(code >= 1024) tab = &mpeg3_DCTtab0[(code >> 8) - 4];
+ else
+ if(code >= 512) tab = &mpeg3_DCTtab1[(code >> 6) - 8];
+ else
+ if(code >= 256) tab = &mpeg3_DCTtab2[(code >> 4) - 16];
+ else
+ if(code >= 128) tab = &mpeg3_DCTtab3[(code >> 3) - 16];
+ else
+ if(code >= 64) tab = &mpeg3_DCTtab4[(code >> 2) - 16];
+ else
+ if(code >= 32) tab = &mpeg3_DCTtab5[(code >> 1) - 16];
+ else
+ if(code >= 16) tab = &mpeg3_DCTtab6[code - 16];
+ else
+ {
+// invalid Huffman code
+ slice->fault = 1;
+ return 1;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, tab->len);
+
+/* end of block */
+ if(tab->run == 64)
+ break;
+
+ if(tab->run == 65)
+ {
+/* escape */
+ i += mpeg3slice_getbits(slice_buffer, 6);
+ if((val = mpeg3slice_getbits(slice_buffer, 8)) == 0)
+ val = mpeg3slice_getbits(slice_buffer, 8);
+ else
+ if(val == 128)
+ val = mpeg3slice_getbits(slice_buffer, 8) - 256;
+ else
+ if(val > 128)
+ val -= 256;
+
+ if((sign = (val < 0)) != 0) val = -val;
+ }
+ else
+ {
+ i += tab->run;
+ val = tab->level;
+ sign = mpeg3slice_getbit(slice_buffer);
+ }
+
+ j = video->mpeg3_zigzag_scan_table[i];
+
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ {
+ val = (((val << 1)+1) * slice->quant_scale * video->non_intra_quantizer_matrix[j]);
+ val = (val - 16) | 16;
+ }
+ else
+#endif
+ {
+ val = (((val << 1)+1) * slice->quant_scale * video->non_intra_quantizer_matrix[j]) >> 4;
+ val = (val - 1) | 1;
+ }
+
+ bp[j] = sign ? -val : val;
+ }
+
+ if(j != 0)
+ {
+/* not a sparse matrix ! */
+ slice->sparse[comp] = 0;
+ }
+ return 0;
+}
+
+
+/* decode one intra coded MPEG-2 block */
+int mpeg3video_getmpg2intrablock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp,
+ int dc_dct_pred[])
+{
+ int val, i, j, sign, nc;
+ unsigned int code;
+ mpeg3_DCTtab_t *tab;
+ short *bp;
+ int *qmat;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+/* with data partitioning, data always goes to base layer */
+ bp = slice->block[comp];
+
+ qmat = (comp < 4 || video->chroma_format == CHROMA420)
+ ? video->intra_quantizer_matrix
+ : video->chroma_intra_quantizer_matrix;
+
+/* decode DC coefficients */
+ if(comp < 4)
+ val = (dc_dct_pred[0] += mpeg3video_getdclum(slice_buffer));
+ else
+ if((comp & 1) == 0)
+ val = (dc_dct_pred[1] += mpeg3video_getdcchrom(slice_buffer));
+ else
+ val = (dc_dct_pred[2] += mpeg3video_getdcchrom(slice_buffer));
+
+ if(slice->fault) return 1;
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ bp[0] = val << (7 - video->dc_prec);
+ else
+#endif
+ bp[0] = val << (3 - video->dc_prec);
+
+ nc = 0;
+
+/* decode AC coefficients */
+ for(i = 1; ; i++)
+ {
+ code = mpeg3slice_showbits16(slice_buffer);
+
+ if(code >= 16384 && !video->intravlc)
+ tab = &mpeg3_DCTtabnext[(code >> 12) - 4];
+ else
+ if(code >= 1024)
+ {
+ if(video->intravlc)
+ tab = &mpeg3_DCTtab0a[(code >> 8) - 4];
+ else
+ tab = &mpeg3_DCTtab0[(code >> 8) - 4];
+ }
+ else
+ if(code >= 512)
+ {
+ if(video->intravlc)
+ tab = &mpeg3_DCTtab1a[(code >> 6) - 8];
+ else
+ tab = &mpeg3_DCTtab1[(code >> 6) - 8];
+ }
+ else
+ if(code >= 256) tab = &mpeg3_DCTtab2[(code >> 4) - 16];
+ else
+ if(code >= 128) tab = &mpeg3_DCTtab3[(code >> 3) - 16];
+ else
+ if(code >= 64) tab = &mpeg3_DCTtab4[(code >> 2) - 16];
+ else
+ if(code >= 32) tab = &mpeg3_DCTtab5[(code >> 1) - 16];
+ else
+ if(code >= 16) tab = &mpeg3_DCTtab6[code - 16];
+ else
+ {
+/* fprintf(stderr,"mpeg3video_getmpg2intrablock: invalid Huffman code\n"); */
+ slice->fault = 1;
+ return 1;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, tab->len);
+
+/* end_of_block */
+ if(tab->run == 64)
+ break;
+
+ if(tab->run == 65)
+ {
+/* escape */
+ i += mpeg3slice_getbits(slice_buffer, 6);
+
+ val = mpeg3slice_getbits(slice_buffer, 12);
+ if((val & 2047) == 0)
+ {
+// invalid signed_level (escape)
+ slice->fault = 1;
+ return 1;
+ }
+ if((sign = (val >= 2048)) != 0) val = 4096 - val;
+ }
+ else
+ {
+ i += tab->run;
+ val = tab->level;
+ sign = mpeg3slice_getbit(slice_buffer);
+ }
+
+ j = (video->altscan ? video->mpeg3_alternate_scan_table : video->mpeg3_zigzag_scan_table)[i];
+
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ val = (val * slice->quant_scale * qmat[j]);
+ else
+#endif
+ val = (val * slice->quant_scale * qmat[j]) >> 4;
+
+ bp[j] = sign ? -val : val;
+ nc++;
+ }
+
+ if(j != 0)
+ {
+/* not a sparse matrix ! */
+ slice->sparse[comp] = 0;
+ }
+ return 1;
+}
+
+
+/* decode one non-intra coded MPEG-2 block */
+
+int mpeg3video_getmpg2interblock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp)
+{
+ int val, i, j, sign, nc;
+ unsigned int code;
+ mpeg3_DCTtab_t *tab;
+ short *bp;
+ int *qmat;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+/* with data partitioning, data always goes to base layer */
+ bp = slice->block[comp];
+
+ qmat = (comp < 4 || video->chroma_format == CHROMA420)
+ ? video->non_intra_quantizer_matrix
+ : video->chroma_non_intra_quantizer_matrix;
+
+ nc = 0;
+
+/* decode AC coefficients */
+ for(i = 0; ; i++)
+ {
+ code = mpeg3slice_showbits16(slice_buffer);
+ if(code >= 16384)
+ {
+ if(i == 0) tab = &mpeg3_DCTtabfirst[(code >> 12) - 4];
+ else tab = &mpeg3_DCTtabnext[(code >> 12) - 4];
+ }
+ else
+ if(code >= 1024) tab = &mpeg3_DCTtab0[(code >> 8) - 4];
+ else
+ if(code >= 512) tab = &mpeg3_DCTtab1[(code >> 6) - 8];
+ else
+ if(code >= 256) tab = &mpeg3_DCTtab2[(code >> 4) - 16];
+ else
+ if(code >= 128) tab = &mpeg3_DCTtab3[(code >> 3) - 16];
+ else
+ if(code >= 64) tab = &mpeg3_DCTtab4[(code >> 2) - 16];
+ else
+ if(code >= 32) tab = &mpeg3_DCTtab5[(code >> 1) - 16];
+ else
+ if(code >= 16) tab = &mpeg3_DCTtab6[code - 16];
+ else
+ {
+// invalid Huffman code
+ slice->fault = 1;
+ return 1;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, tab->len);
+
+/* end_of_block */
+ if(tab->run == 64)
+ break;
+
+ if(tab->run == 65)
+ {
+/* escape */
+ i += mpeg3slice_getbits(slice_buffer, 6);
+ val = mpeg3slice_getbits(slice_buffer, 12);
+ if((val & 2047) == 0)
+ {
+/* fprintf(stderr, "mpeg3video_getmpg2interblock: invalid signed_level (escape)\n"); */
+ slice->fault = 1;
+ return 1;
+ }
+ if((sign = (val >= 2048)) != 0) val = 4096 - val;
+ }
+ else
+ {
+ i += tab->run;
+ val = tab->level;
+ sign = mpeg3slice_getbit(slice_buffer);
+ }
+
+ j = (video->altscan ? video->mpeg3_alternate_scan_table : video->mpeg3_zigzag_scan_table)[i];
+
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ val = (((val << 1)+1) * slice->quant_scale * qmat[j]) >> 1;
+ else
+#endif
+ val = (((val << 1)+1) * slice->quant_scale * qmat[j]) >> 5;
+
+ bp[j] = sign ? (-val) : val ;
+ nc++;
+ }
+
+ if(j != 0)
+ {
+ slice->sparse[comp] = 0;
+ }
+ return 0;
+}
+
+
+/* decode all macroblocks of the current picture */
+int mpeg3video_get_macroblocks(mpeg3video_t *video, int framenum)
+{
+ unsigned int code;
+ mpeg3_slice_buffer_t *slice_buffer; /* Buffer being loaded */
+ int i;
+ int current_buffer;
+ mpeg3_bits_t *vstream = video->vstream;
+
+/* Load every slice into a buffer array */
+ video->total_slice_buffers = 0;
+ current_buffer = 0;
+ while(!mpeg3bits_eof(vstream) &&
+ mpeg3bits_showbits32_noptr(vstream) >= MPEG3_SLICE_MIN_START &&
+ mpeg3bits_showbits32_noptr(vstream) <= MPEG3_SLICE_MAX_START)
+ {
+/* Initialize the buffer */
+ if(current_buffer >= video->slice_buffers_initialized)
+ mpeg3_new_slice_buffer(&(video->slice_buffers[video->slice_buffers_initialized++]));
+ slice_buffer = &(video->slice_buffers[current_buffer]);
+ slice_buffer->buffer_size = 0;
+ slice_buffer->current_position = 0;
+ slice_buffer->bits_size = 0;
+ slice_buffer->done = 0;
+
+/* Read the slice into the buffer including the slice start code */
+ do
+ {
+/* Expand buffer */
+ if(slice_buffer->buffer_allocation <= slice_buffer->buffer_size)
+ mpeg3_expand_slice_buffer(slice_buffer);
+
+/* Load 1 char into buffer */
+ slice_buffer->data[slice_buffer->buffer_size++] = mpeg3bits_getbyte_noptr(vstream);
+ }while(!mpeg3bits_eof(vstream) &&
+ mpeg3bits_showbits24_noptr(vstream) != MPEG3_PACKET_START_CODE_PREFIX);
+
+/* Pad the buffer to get the last macroblock */
+ if(slice_buffer->buffer_allocation <= slice_buffer->buffer_size + 4)
+ mpeg3_expand_slice_buffer(slice_buffer);
+
+ slice_buffer->data[slice_buffer->buffer_size++] = 0;
+ slice_buffer->data[slice_buffer->buffer_size++] = 0;
+ slice_buffer->data[slice_buffer->buffer_size++] = 1;
+ slice_buffer->data[slice_buffer->buffer_size++] = 0;
+ slice_buffer->bits_size = 0;
+
+ pthread_mutex_lock(&(slice_buffer->completion_lock)); fflush(stdout);
+ current_buffer++;
+ video->total_slice_buffers++;
+ }
+
+/* Run the slice decoders */
+ if(video->total_slice_buffers > 0)
+ {
+ for(i = 0; i < video->total_slice_decoders; i++)
+ {
+ if(i == 0 && video->total_slice_decoders > 1)
+ {
+ video->slice_decoders[i].current_buffer = 0;
+ video->slice_decoders[i].buffer_step = 1;
+ video->slice_decoders[i].last_buffer = (video->total_slice_buffers - 1);
+ }
+ else
+ if(i == 1)
+ {
+ video->slice_decoders[i].current_buffer = video->total_slice_buffers - 1;
+ video->slice_decoders[i].buffer_step = -1;
+ video->slice_decoders[i].last_buffer = 0;
+ }
+ else
+ {
+ video->slice_decoders[i].current_buffer = i;
+ video->slice_decoders[i].buffer_step = 1;
+ video->slice_decoders[i].last_buffer = video->total_slice_buffers - 1;
+ }
+ pthread_mutex_unlock(&(video->slice_decoders[i].input_lock));
+ }
+ }
+
+/* Wait for the slice decoders to finish */
+ if(video->total_slice_buffers > 0)
+ {
+ for(i = 0; i < video->total_slice_buffers; i++)
+ {
+ pthread_mutex_lock(&(video->slice_buffers[i].completion_lock));
+ pthread_mutex_unlock(&(video->slice_buffers[i].completion_lock));
+ }
+ }
+ return 0;
+}
+
+int mpeg3video_allocate_decoders(mpeg3video_t *video, int decoder_count)
+{
+ int i;
+ mpeg3_t *file = video->file;
+/* Get the slice decoders */
+ if(video->total_slice_decoders != file->cpus)
+ {
+ for(i = 0; i < video->total_slice_decoders; i++)
+ {
+ mpeg3_delete_slice_decoder(&video->slice_decoders[i]);
+ }
+
+ for(i = 0; i < file->cpus && i < MPEG3_MAX_CPUS; i++)
+ {
+ mpeg3_new_slice_decoder(video, &(video->slice_decoders[i]));
+ video->slice_decoders[i].thread_number = i;
+ }
+
+ video->total_slice_decoders = file->cpus;
+ }
+ return 0;
+}
+
+/* decode one frame or field picture */
+
+int mpeg3video_getpicture(mpeg3video_t *video, int framenum)
+{
+ int i, result = 0;
+ mpeg3_t *file = video->file;
+
+ if(video->pict_struct == FRAME_PICTURE && video->secondfield)
+ {
+/* recover from illegal number of field pictures */
+ video->secondfield = 0;
+ }
+
+ if(!video->mpeg2)
+ {
+ video->current_repeat = video->repeat_count = 0;
+ }
+
+ mpeg3video_allocate_decoders(video, file->cpus);
+
+ for(i = 0; i < 3; i++)
+ {
+ if(video->pict_type == B_TYPE)
+ {
+ video->newframe[i] = video->auxframe[i];
+ }
+ else
+ {
+ if(!video->secondfield && !video->current_repeat)
+ {
+/* Swap refframes for I frames */
+ unsigned char* tmp = video->oldrefframe[i];
+ video->oldrefframe[i] = video->refframe[i];
+ video->refframe[i] = tmp;
+ }
+
+ video->newframe[i] = video->refframe[i];
+ }
+
+ if(video->pict_struct == BOTTOM_FIELD)
+ {
+/* Only used if fields are in different pictures */
+ video->newframe[i] += (i == 0) ? video->coded_picture_width : video->chrom_width;
+ }
+ }
+
+/* The problem is when a B frame lands on the first repeat and is skipped, */
+/* the second repeat goes for the same bitmap as the skipped repeat, */
+/* so it picks up a frame from 3 frames back. */
+/* The first repeat must consititutively read a B frame if its B frame is going to be */
+/* used in a later repeat. */
+ if(!video->current_repeat)
+ if(!(video->skip_bframes && video->pict_type == B_TYPE) ||
+ (video->repeat_count >= 100 + 100 * video->skip_bframes))
+ result = mpeg3video_get_macroblocks(video, framenum);
+
+/* Set the frame to display */
+ video->output_src = 0;
+ if(framenum > -1 && !result)
+ {
+ if(video->pict_struct == FRAME_PICTURE || video->secondfield)
+ {
+ if(video->pict_type == B_TYPE)
+ {
+ video->output_src = video->auxframe;
+ }
+ else
+ {
+ video->output_src = video->oldrefframe;
+ }
+ }
+ else
+ {
+ mpeg3video_display_second_field(video);
+ }
+ }
+
+ if(video->mpeg2)
+ {
+ video->current_repeat += 100;
+ }
+
+ if(video->pict_struct != FRAME_PICTURE) video->secondfield = !video->secondfield;
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/headers.c b/core/multimedia/opieplayer/libmpeg3/video/headers.c
new file mode 100644
index 0000000..5274530
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/headers.c
@@ -0,0 +1,492 @@
+#include "../mpeg3demux.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int mpeg3video_getseqhdr(mpeg3video_t *video)
+{
+ int i;
+ mpeg3_t *file = video->file;
+
+ int aspect_ratio, picture_rate, vbv_buffer_size;
+ int constrained_parameters_flag;
+ int load_intra_quantizer_matrix, load_non_intra_quantizer_matrix;
+
+ video->horizontal_size = mpeg3bits_getbits(video->vstream, 12);
+ video->vertical_size = mpeg3bits_getbits(video->vstream, 12);
+ aspect_ratio = mpeg3bits_getbits(video->vstream, 4);
+ video->framerate_code = mpeg3bits_getbits(video->vstream, 4);
+ video->bitrate = mpeg3bits_getbits(video->vstream, 18);
+ mpeg3bits_getbit_noptr(video->vstream); /* marker bit (=1) */
+ vbv_buffer_size = mpeg3bits_getbits(video->vstream, 10);
+ constrained_parameters_flag = mpeg3bits_getbit_noptr(video->vstream);
+ video->frame_rate = mpeg3_frame_rate_table[video->framerate_code];
+
+ load_intra_quantizer_matrix = mpeg3bits_getbit_noptr(video->vstream);
+ if(load_intra_quantizer_matrix)
+ {
+ for(i = 0; i < 64; i++)
+ video->intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]] = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+ else
+ {
+ for(i = 0; i < 64; i++)
+ video->intra_quantizer_matrix[i] = mpeg3_default_intra_quantizer_matrix[i];
+ }
+
+ load_non_intra_quantizer_matrix = mpeg3bits_getbit_noptr(video->vstream);
+ if(load_non_intra_quantizer_matrix)
+ {
+ for(i = 0; i < 64; i++)
+ video->non_intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]] = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+ else
+ {
+ for(i = 0; i < 64; i++)
+ video->non_intra_quantizer_matrix[i] = 16;
+ }
+
+/* copy luminance to chrominance matrices */
+ for(i = 0; i < 64; i++)
+ {
+ video->chroma_intra_quantizer_matrix[i] = video->intra_quantizer_matrix[i];
+ video->chroma_non_intra_quantizer_matrix[i] = video->non_intra_quantizer_matrix[i];
+ }
+
+ return 0;
+}
+
+
+/* decode sequence extension */
+
+int mpeg3video_sequence_extension(mpeg3video_t *video)
+{
+ int prof_lev;
+ int horizontal_size_extension, vertical_size_extension;
+ int bit_rate_extension, vbv_buffer_size_extension, low_delay;
+ int frame_rate_extension_n, frame_rate_extension_d;
+ int pos = 0;
+
+ video->mpeg2 = 1;
+ video->scalable_mode = SC_NONE; /* unless overwritten by seq. scal. ext. */
+ prof_lev = mpeg3bits_getbyte_noptr(video->vstream);
+ video->prog_seq = mpeg3bits_getbit_noptr(video->vstream);
+ video->chroma_format = mpeg3bits_getbits(video->vstream, 2);
+ horizontal_size_extension = mpeg3bits_getbits(video->vstream, 2);
+ vertical_size_extension = mpeg3bits_getbits(video->vstream, 2);
+ bit_rate_extension = mpeg3bits_getbits(video->vstream, 12);
+ mpeg3bits_getbit_noptr(video->vstream);
+ vbv_buffer_size_extension = mpeg3bits_getbyte_noptr(video->vstream);
+ low_delay = mpeg3bits_getbit_noptr(video->vstream);
+ frame_rate_extension_n = mpeg3bits_getbits(video->vstream, 2);
+ frame_rate_extension_d = mpeg3bits_getbits(video->vstream, 5);
+ video->horizontal_size = (horizontal_size_extension << 12) | (video->horizontal_size & 0x0fff);
+ video->vertical_size = (vertical_size_extension << 12) | (video->vertical_size & 0x0fff);
+}
+
+
+/* decode sequence display extension */
+
+int mpeg3video_sequence_display_extension(mpeg3video_t *video)
+{
+ int colour_primaries = 0, transfer_characteristics = 0;
+ int display_horizontal_size, display_vertical_size;
+ int pos = 0;
+ int video_format = mpeg3bits_getbits(video->vstream, 3);
+ int colour_description = mpeg3bits_getbit_noptr(video->vstream);
+
+ if(colour_description)
+ {
+ colour_primaries = mpeg3bits_getbyte_noptr(video->vstream);
+ transfer_characteristics = mpeg3bits_getbyte_noptr(video->vstream);
+ video->matrix_coefficients = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+
+ display_horizontal_size = mpeg3bits_getbits(video->vstream, 14);
+ mpeg3bits_getbit_noptr(video->vstream);
+ display_vertical_size = mpeg3bits_getbits(video->vstream, 14);
+}
+
+
+/* decode quant matrix entension */
+
+int mpeg3video_quant_matrix_extension(mpeg3video_t *video)
+{
+ int i;
+ int load_intra_quantiser_matrix, load_non_intra_quantiser_matrix;
+ int load_chroma_intra_quantiser_matrix;
+ int load_chroma_non_intra_quantiser_matrix;
+ int pos = 0;
+
+ if((load_intra_quantiser_matrix = mpeg3bits_getbit_noptr(video->vstream)) != 0)
+ {
+ for(i = 0; i < 64; i++)
+ {
+ video->chroma_intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]]
+ = video->intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]]
+ = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+ }
+
+ if((load_non_intra_quantiser_matrix = mpeg3bits_getbit_noptr(video->vstream)) != 0)
+ {
+ for (i = 0; i < 64; i++)
+ {
+ video->chroma_non_intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]]
+ = video->non_intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]]
+ = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+ }
+
+ if((load_chroma_intra_quantiser_matrix = mpeg3bits_getbit_noptr(video->vstream)) != 0)
+ {
+ for(i = 0; i < 64; i++)
+ video->chroma_intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]] = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+
+ if((load_chroma_non_intra_quantiser_matrix = mpeg3bits_getbit_noptr(video->vstream)) != 0)
+ {
+ for(i = 0; i < 64; i++)
+ video->chroma_non_intra_quantizer_matrix[video->mpeg3_zigzag_scan_table[i]] = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+}
+
+
+/* decode sequence scalable extension */
+
+int mpeg3video_sequence_scalable_extension(mpeg3video_t *video)
+{
+ int layer_id;
+
+ video->scalable_mode = mpeg3bits_getbits(video->vstream, 2) + 1; /* add 1 to make SC_DP != SC_NONE */
+ layer_id = mpeg3bits_getbits(video->vstream, 4);
+
+ if(video->scalable_mode == SC_SPAT)
+ {
+ video->llw = mpeg3bits_getbits(video->vstream, 14); /* lower_layer_prediction_horizontal_size */
+ mpeg3bits_getbit_noptr(video->vstream);
+ video->llh = mpeg3bits_getbits(video->vstream, 14); /* lower_layer_prediction_vertical_size */
+ video->hm = mpeg3bits_getbits(video->vstream, 5);
+ video->hn = mpeg3bits_getbits(video->vstream, 5);
+ video->vm = mpeg3bits_getbits(video->vstream, 5);
+ video->vn = mpeg3bits_getbits(video->vstream, 5);
+ }
+
+ if(video->scalable_mode == SC_TEMP)
+ fprintf(stderr, "mpeg3video_sequence_scalable_extension: temporal scalability not implemented\n");
+}
+
+
+/* decode picture display extension */
+
+int mpeg3video_picture_display_extension(mpeg3video_t *video)
+{
+ int n, i;
+ short frame_centre_horizontal_offset[3];
+ short frame_centre_vertical_offset[3];
+
+ if(video->prog_seq || video->pict_struct != FRAME_PICTURE)
+ n = 1;
+ else
+ n = video->repeatfirst ? 3 : 2;
+
+ for(i = 0; i < n; i++)
+ {
+ frame_centre_horizontal_offset[i] = (short)mpeg3bits_getbits(video->vstream, 16);
+ mpeg3bits_getbit_noptr(video->vstream);
+ frame_centre_vertical_offset[i] = (short)mpeg3bits_getbits(video->vstream, 16);
+ mpeg3bits_getbit_noptr(video->vstream);
+ }
+}
+
+
+/* decode picture coding extension */
+
+int mpeg3video_picture_coding_extension(mpeg3video_t *video)
+{
+ int chroma_420_type, composite_display_flag;
+ int v_axis = 0, field_sequence = 0, sub_carrier = 0, burst_amplitude = 0, sub_carrier_phase = 0;
+
+ video->h_forw_r_size = mpeg3bits_getbits(video->vstream, 4) - 1;
+ video->v_forw_r_size = mpeg3bits_getbits(video->vstream, 4) - 1;
+ video->h_back_r_size = mpeg3bits_getbits(video->vstream, 4) - 1;
+ video->v_back_r_size = mpeg3bits_getbits(video->vstream, 4) - 1;
+ video->dc_prec = mpeg3bits_getbits(video->vstream, 2);
+ video->pict_struct = mpeg3bits_getbits(video->vstream, 2);
+ video->topfirst = mpeg3bits_getbit_noptr(video->vstream);
+ video->frame_pred_dct = mpeg3bits_getbit_noptr(video->vstream);
+ video->conceal_mv = mpeg3bits_getbit_noptr(video->vstream);
+ video->qscale_type = mpeg3bits_getbit_noptr(video->vstream);
+ video->intravlc = mpeg3bits_getbit_noptr(video->vstream);
+ video->altscan = mpeg3bits_getbit_noptr(video->vstream);
+ video->repeatfirst = mpeg3bits_getbit_noptr(video->vstream);
+ chroma_420_type = mpeg3bits_getbit_noptr(video->vstream);
+ video->prog_frame = mpeg3bits_getbit_noptr(video->vstream);
+
+ if(video->repeat_count > 100)
+ video->repeat_count = 0;
+ video->repeat_count += 100;
+
+ video->current_repeat = 0;
+
+ if(video->prog_seq)
+ {
+ if(video->repeatfirst)
+ {
+ if(video->topfirst)
+ video->repeat_count += 200;
+ else
+ video->repeat_count += 100;
+ }
+ }
+ else
+ if(video->prog_frame)
+ {
+ if(video->repeatfirst)
+ {
+ video->repeat_count += 50;
+ }
+ }
+
+/*printf("mpeg3video_picture_coding_extension %d\n", video->repeat_count); */
+ composite_display_flag = mpeg3bits_getbit_noptr(video->vstream);
+
+ if(composite_display_flag)
+ {
+ v_axis = mpeg3bits_getbit_noptr(video->vstream);
+ field_sequence = mpeg3bits_getbits(video->vstream, 3);
+ sub_carrier = mpeg3bits_getbit_noptr(video->vstream);
+ burst_amplitude = mpeg3bits_getbits(video->vstream, 7);
+ sub_carrier_phase = mpeg3bits_getbyte_noptr(video->vstream);
+ }
+}
+
+
+/* decode picture spatial scalable extension */
+
+int mpeg3video_picture_spatial_scalable_extension(mpeg3video_t *video)
+{
+ video->pict_scal = 1; /* use spatial scalability in this picture */
+
+ video->lltempref = mpeg3bits_getbits(video->vstream, 10);
+ mpeg3bits_getbit_noptr(video->vstream);
+ video->llx0 = mpeg3bits_getbits(video->vstream, 15);
+ if(video->llx0 >= 16384) video->llx0 -= 32768;
+ mpeg3bits_getbit_noptr(video->vstream);
+ video->lly0 = mpeg3bits_getbits(video->vstream, 15);
+ if(video->lly0 >= 16384) video->lly0 -= 32768;
+ video->stwc_table_index = mpeg3bits_getbits(video->vstream, 2);
+ video->llprog_frame = mpeg3bits_getbit_noptr(video->vstream);
+ video->llfieldsel = mpeg3bits_getbit_noptr(video->vstream);
+}
+
+
+/* decode picture temporal scalable extension
+ *
+ * not implemented
+ *
+ */
+
+int mpeg3video_picture_temporal_scalable_extension(mpeg3video_t *video)
+{
+ fprintf(stderr, "mpeg3video_picture_temporal_scalable_extension: temporal scalability not supported\n");
+}
+
+
+/* decode extension and user data */
+
+int mpeg3video_ext_user_data(mpeg3video_t *video)
+{
+ int code = mpeg3bits_next_startcode(video->vstream);
+
+
+ while(code == MPEG3_EXT_START_CODE || code == MPEG3_USER_START_CODE &&
+ !mpeg3bits_eof(video->vstream))
+ {
+ mpeg3bits_refill(video->vstream);
+
+ if(code == MPEG3_EXT_START_CODE)
+ {
+ int ext_id = mpeg3bits_getbits(video->vstream, 4);
+ switch(ext_id)
+ {
+ case SEQ_ID:
+ mpeg3video_sequence_extension(video);
+ break;
+ case DISP_ID:
+ mpeg3video_sequence_display_extension(video);
+ break;
+ case QUANT_ID:
+ mpeg3video_quant_matrix_extension(video);
+ break;
+ case SEQSCAL_ID:
+ mpeg3video_sequence_scalable_extension(video);
+ break;
+ case PANSCAN_ID:
+ mpeg3video_picture_display_extension(video);
+ break;
+ case CODING_ID:
+ mpeg3video_picture_coding_extension(video);
+ break;
+ case SPATSCAL_ID:
+ mpeg3video_picture_spatial_scalable_extension(video);
+ break;
+ case TEMPSCAL_ID:
+ mpeg3video_picture_temporal_scalable_extension(video);
+ break;
+ default:
+ fprintf(stderr,"mpeg3video_ext_user_data: reserved extension start code ID %d\n", ext_id);
+ break;
+ }
+ }
+ code = mpeg3bits_next_startcode(video->vstream);
+ }
+}
+
+
+/* decode group of pictures header */
+
+int mpeg3video_getgophdr(mpeg3video_t *video)
+{
+ int drop_flag, closed_gop, broken_link;
+
+ drop_flag = mpeg3bits_getbit_noptr(video->vstream);
+ video->gop_timecode.hour = mpeg3bits_getbits(video->vstream, 5);
+ video->gop_timecode.minute = mpeg3bits_getbits(video->vstream, 6);
+ mpeg3bits_getbit_noptr(video->vstream);
+ video->gop_timecode.second = mpeg3bits_getbits(video->vstream, 6);
+ video->gop_timecode.frame = mpeg3bits_getbits(video->vstream, 6);
+ closed_gop = mpeg3bits_getbit_noptr(video->vstream);
+ broken_link = mpeg3bits_getbit_noptr(video->vstream);
+
+/*
+ * printf("%d:%d:%d:%d %d %d %d\n", video->gop_timecode.hour, video->gop_timecode.minute, video->gop_timecode.second, video->gop_timecode.frame,
+ * drop_flag, closed_gop, broken_link);
+ */
+ return mpeg3bits_error(video->vstream);
+}
+
+/* decode picture header */
+
+int mpeg3video_getpicturehdr(mpeg3video_t *video)
+{
+ int temp_ref, vbv_delay;
+
+ video->pict_scal = 0; /* unless overwritten by pict. spat. scal. ext. */
+
+ temp_ref = mpeg3bits_getbits(video->vstream, 10);
+ video->pict_type = mpeg3bits_getbits(video->vstream, 3);
+ vbv_delay = mpeg3bits_getbits(video->vstream, 16);
+
+ if(video->pict_type == P_TYPE || video->pict_type == B_TYPE)
+ {
+ video->full_forw = mpeg3bits_getbit_noptr(video->vstream);
+ video->forw_r_size = mpeg3bits_getbits(video->vstream, 3) - 1;
+ }
+
+ if(video->pict_type == B_TYPE)
+ {
+ video->full_back = mpeg3bits_getbit_noptr(video->vstream);
+ video->back_r_size = mpeg3bits_getbits(video->vstream, 3) - 1;
+ }
+
+/* get extra bit picture */
+ while(mpeg3bits_getbit_noptr(video->vstream) &&
+ !mpeg3bits_eof(video->vstream)) mpeg3bits_getbyte_noptr(video->vstream);
+ return 0;
+}
+
+
+int mpeg3video_get_header(mpeg3video_t *video, int dont_repeat)
+{
+ unsigned int code;
+
+/* a sequence header should be found before returning from `getheader' the */
+/* first time (this is to set horizontal/vertical size properly) */
+
+/* Repeat the frame until it's less than 1 count from repeat_count */
+ if(video->repeat_count - video->current_repeat >= 100 && !dont_repeat)
+ {
+ return 0;
+ }
+
+ if(dont_repeat)
+ {
+ video->repeat_count = 0;
+ video->current_repeat = 0;
+ }
+ else
+ video->repeat_count -= video->current_repeat;
+
+ while(1)
+ {
+/* look for startcode */
+ code = mpeg3bits_next_startcode(video->vstream);
+ if(mpeg3bits_eof(video->vstream)) return 1;
+ if(code != MPEG3_SEQUENCE_END_CODE) mpeg3bits_refill(video->vstream);
+
+ switch(code)
+ {
+ case MPEG3_SEQUENCE_START_CODE:
+ video->found_seqhdr = 1;
+ mpeg3video_getseqhdr(video);
+ mpeg3video_ext_user_data(video);
+ break;
+
+ case MPEG3_GOP_START_CODE:
+ mpeg3video_getgophdr(video);
+ mpeg3video_ext_user_data(video);
+ break;
+
+ case MPEG3_PICTURE_START_CODE:
+ mpeg3video_getpicturehdr(video);
+ mpeg3video_ext_user_data(video);
+ if(video->found_seqhdr) return 0; /* Exit here */
+ break;
+
+ case MPEG3_SEQUENCE_END_CODE:
+// Continue until the end
+ mpeg3bits_refill(video->vstream);
+ break;
+
+ default:
+ break;
+ }
+ }
+ return 1; /* Shouldn't be reached. */
+}
+
+int mpeg3video_ext_bit_info(mpeg3_slice_buffer_t *slice_buffer)
+{
+ while(mpeg3slice_getbit(slice_buffer)) mpeg3slice_getbyte(slice_buffer);
+ return 0;
+}
+
+/* decode slice header */
+int mpeg3video_getslicehdr(mpeg3_slice_t *slice, mpeg3video_t *video)
+{
+ int slice_vertical_position_extension, intra_slice;
+ int qs;
+
+ slice_vertical_position_extension = (video->mpeg2 && video->vertical_size > 2800) ?
+ mpeg3slice_getbits(slice->slice_buffer, 3) : 0;
+
+ if(video->scalable_mode == SC_DP) slice->pri_brk = mpeg3slice_getbits(slice->slice_buffer, 7);
+
+ qs = mpeg3slice_getbits(slice->slice_buffer, 5);
+ slice->quant_scale = video->mpeg2 ? (video->qscale_type ? mpeg3_non_linear_mquant_table[qs] : (qs << 1)) : qs;
+
+ if(mpeg3slice_getbit(slice->slice_buffer))
+ {
+ intra_slice = mpeg3slice_getbit(slice->slice_buffer);
+ mpeg3slice_getbits(slice->slice_buffer, 7);
+ mpeg3video_ext_bit_info(slice->slice_buffer);
+ }
+ else
+ intra_slice = 0;
+
+ return slice_vertical_position_extension;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/idct.c b/core/multimedia/opieplayer/libmpeg3/video/idct.c
new file mode 100644
index 0000000..c79f90a
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/idct.c
@@ -0,0 +1,160 @@
+#include "idct.h"
+#include <stdlib.h>
+
+/**********************************************************/
+/* inverse two dimensional DCT, Chen-Wang algorithm */
+/* (cf. IEEE ASSP-32, pp. 803-816, Aug. 1984) */
+/* 32-bit integer arithmetic (8 bit coefficients) */
+/* 11 mults, 29 adds per DCT */
+/* sE, 18.8.91 */
+/**********************************************************/
+/* coefficients extended to 12 bit for IEEE1180-1990 */
+/* compliance sE, 2.1.94 */
+/**********************************************************/
+
+/* this code assumes >> to be a two's-complement arithmetic */
+/* right shift: (-2)>>1 == -1 , (-3)>>1 == -2 */
+
+#define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */
+#define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */
+#define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */
+#define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */
+#define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */
+#define W7 565 /* 2048*sqrt(2)*cos(7*pi/16) */
+
+/* row (horizontal) IDCT
+ *
+ * 7 pi 1
+ * dst[k] = sum c[l] * src[l] * cos( -- * ( k + - ) * l )
+ * l=0 8 2
+ *
+ * where: c[0] = 128
+ * c[1..7] = 128*sqrt(2)
+ */
+
+int mpeg3video_idctrow(short *blk)
+{
+ int x0, x1, x2, x3, x4, x5, x6, x7, x8;
+
+ /* shortcut */
+ if (!((x1 = blk[4]<<11) | (x2 = blk[6]) | (x3 = blk[2]) |
+ (x4 = blk[1]) | (x5 = blk[7]) | (x6 = blk[5]) | (x7 = blk[3])))
+ {
+ blk[0]=blk[1]=blk[2]=blk[3]=blk[4]=blk[5]=blk[6]=blk[7]=blk[0]<<3;
+ return 0;
+ }
+
+ x0 = (blk[0]<<11) + 128; /* for proper rounding in the fourth stage */
+
+ /* first stage */
+ x8 = W7*(x4+x5);
+ x4 = x8 + (W1-W7)*x4;
+ x5 = x8 - (W1+W7)*x5;
+ x8 = W3*(x6+x7);
+ x6 = x8 - (W3-W5)*x6;
+ x7 = x8 - (W3+W5)*x7;
+
+ /* second stage */
+ x8 = x0 + x1;
+ x0 -= x1;
+ x1 = W6*(x3+x2);
+ x2 = x1 - (W2+W6)*x2;
+ x3 = x1 + (W2-W6)*x3;
+ x1 = x4 + x6;
+ x4 -= x6;
+ x6 = x5 + x7;
+ x5 -= x7;
+
+ /* third stage */
+ x7 = x8 + x3;
+ x8 -= x3;
+ x3 = x0 + x2;
+ x0 -= x2;
+ x2 = (181*(x4+x5)+128)>>8;
+ x4 = (181*(x4-x5)+128)>>8;
+
+ /* fourth stage */
+ blk[0] = (x7+x1)>>8;
+ blk[1] = (x3+x2)>>8;
+ blk[2] = (x0+x4)>>8;
+ blk[3] = (x8+x6)>>8;
+ blk[4] = (x8-x6)>>8;
+ blk[5] = (x0-x4)>>8;
+ blk[6] = (x3-x2)>>8;
+ blk[7] = (x7-x1)>>8;
+
+ return 1;
+}
+
+/* column (vertical) IDCT
+ *
+ * 7 pi 1
+ * dst[8*k] = sum c[l] * src[8*l] * cos( -- * ( k + - ) * l )
+ * l=0 8 2
+ *
+ * where: c[0] = 1/1024
+ * c[1..7] = (1/1024)*sqrt(2)
+ */
+
+int mpeg3video_idctcol(short *blk)
+{
+ int x0, x1, x2, x3, x4, x5, x6, x7, x8;
+
+ /* shortcut */
+ if (!((x1 = (blk[8 * 4]<<8)) | (x2 = blk[8 * 6]) | (x3 = blk[8 * 2]) |
+ (x4 = blk[8*1]) | (x5 = blk[8 * 7]) | (x6 = blk[8 * 5]) | (x7 = blk[8 * 3]))){
+ blk[8*0]=blk[8*1]=blk[8 * 2]=blk[8 * 3]=blk[8 * 4]=blk[8 * 5]=blk[8 * 6]=blk[8 * 7]=
+ (blk[8*0]+32)>>6;
+ return 0;
+ }
+
+ x0 = (blk[8*0]<<8) + 8192;
+
+ /* first stage */
+ x8 = W7*(x4+x5) + 4;
+ x4 = (x8+(W1-W7)*x4)>>3;
+ x5 = (x8-(W1+W7)*x5)>>3;
+ x8 = W3*(x6+x7) + 4;
+ x6 = (x8-(W3-W5)*x6)>>3;
+ x7 = (x8-(W3+W5)*x7)>>3;
+
+ /* second stage */
+ x8 = x0 + x1;
+ x0 -= x1;
+ x1 = W6*(x3+x2) + 4;
+ x2 = (x1-(W2+W6)*x2)>>3;
+ x3 = (x1+(W2-W6)*x3)>>3;
+ x1 = x4 + x6;
+ x4 -= x6;
+ x6 = x5 + x7;
+ x5 -= x7;
+
+ /* third stage */
+ x7 = x8 + x3;
+ x8 -= x3;
+ x3 = x0 + x2;
+ x0 -= x2;
+ x2 = (181 * (x4 + x5) + 128) >> 8;
+ x4 = (181 * (x4 - x5) + 128) >> 8;
+
+ /* fourth stage */
+ blk[8 * 0] = (x7 + x1) >> 14;
+ blk[8 * 1] = (x3 + x2) >> 14;
+ blk[8 * 2] = (x0 + x4) >> 14;
+ blk[8 * 3] = (x8 + x6) >> 14;
+ blk[8 * 4] = (x8 - x6) >> 14;
+ blk[8 * 5] = (x0 - x4) >> 14;
+ blk[8 * 6] = (x3 - x2) >> 14;
+ blk[8 * 7] = (x7 - x1) >> 14;
+
+ return 1;
+}
+
+
+/* two dimensional inverse discrete cosine transform */
+void mpeg3video_idct_conversion(short* block)
+{
+ int i;
+ for(i = 0; i < 8; i++) mpeg3video_idctrow(block + 8 * i);
+ for(i = 0; i < 8; i++) mpeg3video_idctcol(block + i);
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/idct.h b/core/multimedia/opieplayer/libmpeg3/video/idct.h
new file mode 100644
index 0000000..f0aa1d8
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/idct.h
@@ -0,0 +1,24 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef IDCT_H
+#define IDCT_H
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/video/layerdata.h b/core/multimedia/opieplayer/libmpeg3/video/layerdata.h
new file mode 100644
index 0000000..3ef0f90
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/layerdata.h
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LAYERDATA_H
+#define LAYERDATA_H
+
+typedef struct
+{
+/* sequence header */
+ int intra_quantizer_matrix[64], non_intra_quantizer_matrix[64];
+ int chroma_intra_quantizer_matrix[64], chroma_non_intra_quantizer_matrix[64];
+ int mpeg2;
+ int qscale_type, altscan; /* picture coding extension */
+ int pict_scal; /* picture spatial scalable extension */
+ int scalable_mode; /* sequence scalable extension */
+} mpeg3_layerdata_t;
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/video/macroblocks.c b/core/multimedia/opieplayer/libmpeg3/video/macroblocks.c
new file mode 100644
index 0000000..11e17c1
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/macroblocks.c
@@ -0,0 +1,338 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+#include "slice.h"
+#include "vlc.h"
+
+#include <stdio.h>
+
+int mpeg3video_get_macroblock_address(mpeg3_slice_t *slice)
+{
+ int code, val = 0;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+ while((code = mpeg3slice_showbits(slice_buffer, 11)) < 24)
+ {
+/* Is not macroblock_stuffing */
+ if(code != 15)
+ {
+/* Is macroblock_escape */
+ if(code == 8)
+ {
+ val += 33;
+ }
+ else
+ {
+/* fprintf(stderr, "mpeg3video_get_macroblock_address: invalid macroblock_address_increment code\n"); */
+ slice->fault = 1;
+ return 1;
+ }
+ }
+
+ mpeg3slice_flushbits(slice_buffer, 11);
+ }
+
+ if(code >= 1024)
+ {
+ mpeg3slice_flushbit(slice_buffer);
+ return val + 1;
+ }
+
+ if(code >= 128)
+ {
+ code >>= 6;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_MBAtab1[code].len);
+ return val + mpeg3_MBAtab1[code].val;
+ }
+
+ code -= 24;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_MBAtab2[code].len);
+
+ return val + mpeg3_MBAtab2[code].val;
+}
+
+/* macroblock_type for pictures with spatial scalability */
+
+static inline int mpeg3video_getsp_imb_type(mpeg3_slice_t *slice)
+{
+// ### This looks wrong.
+// slice_buffer is used without being initialised and slice is not used
+// mpeg3_slice_buffer_t *slice_buffer = slice_buffer;
+// I think this would make more sense and might be what is intended
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ unsigned int code = mpeg3slice_showbits(slice_buffer, 4);
+ if(!code)
+ {
+/* fprintf(stderr,"mpeg3video_getsp_imb_type: invalid macroblock_type code\n"); */
+ slice->fault = 1;
+ return 0;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, mpeg3_spIMBtab[code].len);
+ return mpeg3_spIMBtab[code].val;
+}
+
+static inline int mpeg3video_getsp_pmb_type(mpeg3_slice_t *slice)
+{
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ int code = mpeg3slice_showbits(slice_buffer, 7);
+ if(code < 2)
+ {
+/* fprintf(stderr,"mpeg3video_getsp_pmb_type: invalid macroblock_type code\n"); */
+ slice->fault = 1;
+ return 0;
+ }
+
+ if(code >= 16)
+ {
+ code >>= 3;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_spPMBtab0[code].len);
+
+ return mpeg3_spPMBtab0[code].val;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, mpeg3_spPMBtab1[code].len);
+ return mpeg3_spPMBtab1[code].val;
+}
+
+static inline int mpeg3video_getsp_bmb_type(mpeg3_slice_t *slice)
+{
+ mpeg3_VLCtab_t *p;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ int code = mpeg3slice_showbits9(slice_buffer);
+
+ if(code >= 64)
+ p = &mpeg3_spBMBtab0[(code >> 5) - 2];
+ else
+ if(code >= 16)
+ p = &mpeg3_spBMBtab1[(code >> 2) - 4];
+ else
+ if(code >= 8)
+ p = &mpeg3_spBMBtab2[code - 8];
+ else
+ {
+/* fprintf(stderr,"mpeg3video_getsp_bmb_type: invalid macroblock_type code\n"); */
+ slice->fault = 1;
+ return 0;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, p->len);
+ return p->val;
+}
+
+static inline int mpeg3video_get_imb_type(mpeg3_slice_t *slice)
+{
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ if(mpeg3slice_getbit(slice_buffer))
+ {
+ return 1;
+ }
+
+ if(!mpeg3slice_getbit(slice_buffer))
+ {
+/* fprintf(stderr,"mpeg3video_get_imb_type: invalid macroblock_type code\n"); */
+ slice->fault = 1;
+ }
+
+ return 17;
+}
+
+static inline int mpeg3video_get_pmb_type(mpeg3_slice_t *slice)
+{
+ int code;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+ if((code = mpeg3slice_showbits(slice_buffer, 6)) >= 8)
+ {
+ code >>= 3;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_PMBtab0[code].len);
+ return mpeg3_PMBtab0[code].val;
+ }
+
+ if(code == 0)
+ {
+/* fprintf(stderr,"mpeg3video_get_pmb_type: invalid macroblock_type code\n"); */
+ slice->fault = 1;
+ return 0;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, mpeg3_PMBtab1[code].len);
+ return mpeg3_PMBtab1[code].val;
+}
+
+static inline int mpeg3video_get_bmb_type(mpeg3_slice_t *slice)
+{
+ int code;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+ if((code = mpeg3slice_showbits(slice_buffer, 6)) >= 8)
+ {
+ code >>= 2;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_BMBtab0[code].len);
+ return mpeg3_BMBtab0[code].val;
+ }
+
+ if(code == 0)
+ {
+/* fprintf(stderr,"mpeg3video_get_bmb_type: invalid macroblock_type code\n"); */
+ slice->fault = 1;
+ return 0;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, mpeg3_BMBtab1[code].len);
+
+ return mpeg3_BMBtab1[code].val;
+}
+
+static inline int mpeg3video_get_dmb_type(mpeg3_slice_t *slice)
+{
+ if(!mpeg3slice_getbit(slice->slice_buffer))
+ {
+/* fprintf(stderr,"mpeg3video_get_dmb_type: invalid macroblock_type code\n"); */
+ slice->fault=1;
+ }
+
+ return 1;
+}
+
+
+static inline int mpeg3video_get_snrmb_type(mpeg3_slice_t *slice)
+{
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ int code = mpeg3slice_showbits(slice_buffer, 3);
+
+ if(code == 0)
+ {
+/* fprintf(stderr,"mpeg3video_get_snrmb_type: invalid macroblock_type code\n"); */
+ slice->fault = 1;
+ return 0;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, mpeg3_SNRMBtab[code].len);
+ return mpeg3_SNRMBtab[code].val;
+}
+
+int mpeg3video_get_mb_type(mpeg3_slice_t *slice, mpeg3video_t *video)
+{
+ if(video->scalable_mode == SC_SNR)
+ {
+ return mpeg3video_get_snrmb_type(slice);
+ }
+ else
+ {
+ switch(video->pict_type)
+ {
+ case I_TYPE: return video->pict_scal ? mpeg3video_getsp_imb_type(slice) : mpeg3video_get_imb_type(slice);
+ case P_TYPE: return video->pict_scal ? mpeg3video_getsp_pmb_type(slice) : mpeg3video_get_pmb_type(slice);
+ case B_TYPE: return video->pict_scal ? mpeg3video_getsp_bmb_type(slice) : mpeg3video_get_bmb_type(slice);
+ case D_TYPE: return mpeg3video_get_dmb_type(slice);
+ default:
+ /*fprintf(stderr, "mpeg3video_getmbtype: unknown coding type\n"); */
+ break;
+/* MPEG-1 only, not implemented */
+ }
+ }
+
+ return 0;
+}
+
+int mpeg3video_macroblock_modes(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int *pmb_type,
+ int *pstwtype,
+ int *pstwclass,
+ int *pmotion_type,
+ int *pmv_count,
+ int *pmv_format,
+ int *pdmv,
+ int *pmvscale,
+ int *pdct_type)
+{
+ int mb_type;
+ int stwtype, stwcode, stwclass;
+ int motion_type = 0, mv_count, mv_format, dmv, mvscale;
+ int dct_type;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ static unsigned char stwc_table[3][4]
+ = { {6,3,7,4}, {2,1,5,4}, {2,5,7,4} };
+ static unsigned char stwclass_table[9]
+ = {0, 1, 2, 1, 1, 2, 3, 3, 4};
+
+/* get macroblock_type */
+ mb_type = mpeg3video_get_mb_type(slice, video);
+
+ if(slice->fault) return 1;
+
+/* get spatial_temporal_weight_code */
+ if(mb_type & MB_WEIGHT)
+ {
+ if(video->stwc_table_index == 0)
+ stwtype = 4;
+ else
+ {
+ stwcode = mpeg3slice_getbits2(slice_buffer);
+ stwtype = stwc_table[video->stwc_table_index - 1][stwcode];
+ }
+ }
+ else
+ stwtype = (mb_type & MB_CLASS4) ? 8 : 0;
+
+/* derive spatial_temporal_weight_class (Table 7-18) */
+ stwclass = stwclass_table[stwtype];
+
+/* get frame/field motion type */
+ if(mb_type & (MB_FORWARD | MB_BACKWARD))
+ {
+ if(video->pict_struct == FRAME_PICTURE)
+ {
+/* frame_motion_type */
+ motion_type = video->frame_pred_dct ? MC_FRAME : mpeg3slice_getbits2(slice_buffer);
+ }
+ else
+ {
+/* field_motion_type */
+ motion_type = mpeg3slice_getbits2(slice_buffer);
+ }
+ }
+ else
+ if((mb_type & MB_INTRA) && video->conceal_mv)
+ {
+/* concealment motion vectors */
+ motion_type = (video->pict_struct == FRAME_PICTURE) ? MC_FRAME : MC_FIELD;
+ }
+
+/* derive mv_count, mv_format and dmv, (table 6-17, 6-18) */
+ if(video->pict_struct == FRAME_PICTURE)
+ {
+ mv_count = (motion_type == MC_FIELD && stwclass < 2) ? 2 : 1;
+ mv_format = (motion_type == MC_FRAME) ? MV_FRAME : MV_FIELD;
+ }
+ else
+ {
+ mv_count = (motion_type == MC_16X8) ? 2 : 1;
+ mv_format = MV_FIELD;
+ }
+
+ dmv = (motion_type == MC_DMV); /* dual prime */
+
+/* field mv predictions in frame pictures have to be scaled */
+ mvscale = ((mv_format == MV_FIELD) && (video->pict_struct == FRAME_PICTURE));
+
+/* get dct_type (frame DCT / field DCT) */
+ dct_type = (video->pict_struct == FRAME_PICTURE) &&
+ (!video->frame_pred_dct) &&
+ (mb_type & (MB_PATTERN | MB_INTRA)) ?
+ mpeg3slice_getbit(slice_buffer) : 0;
+
+/* return values */
+ *pmb_type = mb_type;
+ *pstwtype = stwtype;
+ *pstwclass = stwclass;
+ *pmotion_type = motion_type;
+ *pmv_count = mv_count;
+ *pmv_format = mv_format;
+ *pdmv = dmv;
+ *pmvscale = mvscale;
+ *pdct_type = dct_type;
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/mmxidct.S b/core/multimedia/opieplayer/libmpeg3/video/mmxidct.S
new file mode 100644
index 0000000..9c3bebe
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/mmxidct.S
@@ -0,0 +1,675 @@
+/*
+ * the input data is tranposed and each 16 bit element in the 8x8 matrix
+ * is left aligned:
+ * for example in 11...1110000 format
+ * If the iDCT is of I macroblock then 0.5 needs to be added to the;DC Component
+ * (element[0][0] of the matrix)
+ */
+
+/* extrn re_matrix */
+
+/* constants */
+
+.data
+ .align 16
+ .type preSC, @object
+preSC: .short 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520
+ .short 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270
+ .short 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906
+ .short 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315
+ .short 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520
+ .short 12873, 17855, 16819, 15137, 25746, 20228, 13933, 7103
+ .short 17734, 24598, 23170, 20853, 17734, 13933, 9597, 4892
+ .short 18081, 25080, 23624, 21261, 18081, 14206, 9785, 4988
+ .size preSC, 128
+ .align 8
+ .type x0005000200010001, @object
+ .size x0005000200010001, 8
+x0005000200010001:
+ .long 0x00010001, 0x00050002
+ .align 8
+ .type x0040000000000000, @object
+ .size x0040000000000000, 8
+x0040000000000000:
+ .long 0, 0x00400000
+ .align 8
+ .type x5a825a825a825a82, @object
+ .size x5a825a825a825a82, 8
+x5a825a825a825a82:
+ .long 0x5a825a82, 0x5a825a82
+ .align 8
+ .type x539f539f539f539f, @object
+ .size x539f539f539f539f, 8
+x539f539f539f539f:
+ .long 0x539f539f, 0x539f539f
+ .align 8
+ .type x4546454645464546, @object
+ .size x4546454645464546, 8
+x4546454645464546:
+ .long 0x45464546, 0x45464546
+ .align 8
+ .type x61f861f861f861f8, @object
+ .size x61f861f861f861f8, 8
+x61f861f861f861f8:
+ .long 0x61f861f8, 0x61f861f8
+/* Static variables */
+ .align 8
+ .type x0, @object
+ .size x0, 8
+x0:
+ .long 0, 0
+/* Procedure */
+
+
+ .align 8
+.text
+ .align 4
+.globl IDCT_mmx
+ .type IDCT_mmx, @function
+IDCT_mmx:
+ pushl %ebp
+ movl %esp, %ebp
+ pushl %ebx
+ pushl %ecx
+ pushl %edx
+ pushl %esi
+ pushl %edi
+
+ pushl $0 /* allocate the temp variables */
+ pushl $0
+ pushl $0
+ pushl $0
+ pushl $0
+ pushl $0
+ pushl $0
+ pushl $0
+
+ movl 8(%ebp), %esi /* source matrix */
+ leal preSC, %ecx
+/* column 0: even part
+ * use V4, V12, V0, V8 to produce V22..V25
+ */
+ movq 8*12(%ecx), %mm0 /* maybe the first mul can be done together */
+ /* with the dequantization in iHuff module */
+ pmulhw 8*12(%esi), %mm0 /* V12 */
+ movq 8*4(%ecx), %mm1
+ pmulhw 8*4(%esi), %mm1 /* V4 */
+ movq (%ecx), %mm3
+ psraw $1, %mm0 /* t64=t66 */
+ pmulhw (%esi), %mm3 /* V0 */
+ movq 8*8(%ecx), %mm5 /* duplicate V4 */
+ movq %mm1, %mm2 /* added 11/1/96 */
+ pmulhw 8*8(%esi),%mm5 /* V8 */
+ psubsw %mm0, %mm1 /* V16 */
+ pmulhw x5a825a825a825a82, %mm1 /* 23170 ->V18 */
+ paddsw %mm0, %mm2 /* V17 */
+ movq %mm2, %mm0 /* duplicate V17 */
+ psraw $1, %mm2 /* t75=t82 */
+ psraw $2, %mm0 /* t72 */
+ movq %mm3, %mm4 /* duplicate V0 */
+ paddsw %mm5, %mm3 /* V19 */
+ psubsw %mm5, %mm4 /* V20 ;mm5 free */
+/* moved from the block below */
+ movq 8*10(%ecx), %mm7
+ psraw $1, %mm3 /* t74=t81 */
+ movq %mm3, %mm6 /* duplicate t74=t81 */
+ psraw $2, %mm4 /* t77=t79 */
+ psubsw %mm0, %mm1 /* V21 ; mm0 free */
+ paddsw %mm2, %mm3 /* V22 */
+ movq %mm1, %mm5 /* duplicate V21 */
+ paddsw %mm4, %mm1 /* V23 */
+ movq %mm3, 8*4(%esi) /* V22 */
+ psubsw %mm5, %mm4 /* V24; mm5 free */
+ movq %mm1, 8*12(%esi) /* V23 */
+ psubsw %mm2, %mm6 /* V25; mm2 free */
+ movq %mm4, (%esi) /* V24 */
+/* keep mm6 alive all along the next block */
+ /* movq %mm6, 8*8(%esi) V25 */
+/* column 0: odd part
+ * use V2, V6, V10, V14 to produce V31, V39, V40, V41
+ */
+/* moved above: movq 8*10(%ecx), %mm7 */
+
+ pmulhw 8*10(%esi), %mm7 /* V10 */
+ movq 8*6(%ecx), %mm0
+ pmulhw 8*6(%esi), %mm0 /* V6 */
+ movq 8*2(%ecx), %mm5
+ movq %mm7, %mm3 /* duplicate V10 */
+ pmulhw 8*2(%esi), %mm5 /* V2 */
+ movq 8*14(%ecx), %mm4
+ psubsw %mm0, %mm7 /* V26 */
+ pmulhw 8*14(%esi), %mm4 /* V14 */
+ paddsw %mm0, %mm3 /* V29 ; free mm0 */
+ movq %mm7, %mm1 /* duplicate V26 */
+ psraw $1, %mm3 /* t91=t94 */
+ pmulhw x539f539f539f539f,%mm7 /* V33 */
+ psraw $1, %mm1 /* t96 */
+ movq %mm5, %mm0 /* duplicate V2 */
+ psraw $2, %mm4 /* t85=t87 */
+ paddsw %mm4,%mm5 /* V27 */
+ psubsw %mm4, %mm0 /* V28 ; free mm4 */
+ movq %mm0, %mm2 /* duplicate V28 */
+ psraw $1, %mm5 /* t90=t93 */
+ pmulhw x4546454645464546,%mm0 /* V35 */
+ psraw $1, %mm2 /* t97 */
+ movq %mm5, %mm4 /* duplicate t90=t93 */
+ psubsw %mm2, %mm1 /* V32 ; free mm2 */
+ pmulhw x61f861f861f861f8,%mm1 /* V36 */
+ psllw $1, %mm7 /* t107 */
+ paddsw %mm3, %mm5 /* V31 */
+ psubsw %mm3, %mm4 /* V30 ; free mm3 */
+ pmulhw x5a825a825a825a82,%mm4 /* V34 */
+ nop
+ psubsw %mm1, %mm0 /* V38 */
+ psubsw %mm7, %mm1 /* V37 ; free mm7 */
+ psllw $1, %mm1 /* t114 */
+/* move from the next block */
+ movq %mm6, %mm3 /* duplicate V25 */
+/* move from the next block */
+ movq 8*4(%esi), %mm7 /* V22 */
+ psllw $1, %mm0 /* t110 */
+ psubsw %mm5, %mm0 /* V39 (mm5 needed for next block) */
+ psllw $2, %mm4 /* t112 */
+/* moved from the next block */
+ movq 8*12(%esi), %mm2 /* V23 */
+ psubsw %mm0, %mm4 /* V40 */
+ paddsw %mm4, %mm1 /* V41; free mm0 */
+/* moved from the next block */
+ psllw $1, %mm2 /* t117=t125 */
+/* column 0: output butterfly */
+/* moved above:
+ * movq %mm6, %mm3 duplicate V25
+ * movq 8*4(%esi), %mm7 V22
+ * movq 8*12(%esi), %mm2 V23
+ * psllw $1, %mm2 t117=t125
+ */
+ psubsw %mm1, %mm6 /* tm6 */
+ paddsw %mm1, %mm3 /* tm8; free mm1 */
+ movq %mm7, %mm1 /* duplicate V22 */
+ paddsw %mm5, %mm7 /* tm0 */
+ movq %mm3, 8*8(%esi) /* tm8; free mm3 */
+ psubsw %mm5, %mm1 /* tm14; free mm5 */
+ movq %mm6, 8*6(%esi) /* tm6; free mm6 */
+ movq %mm2, %mm3 /* duplicate t117=t125 */
+ movq (%esi), %mm6 /* V24 */
+ paddsw %mm0, %mm2 /* tm2 */
+ movq %mm7, (%esi) /* tm0; free mm7 */
+ psubsw %mm0, %mm3 /* tm12; free mm0 */
+ movq %mm1, 8*14(%esi) /* tm14; free mm1 */
+ psllw $1, %mm6 /* t119=t123 */
+ movq %mm2, 8*2(%esi) /* tm2; free mm2 */
+ movq %mm6, %mm0 /* duplicate t119=t123 */
+ movq %mm3, 8*12(%esi) /* tm12; free mm3 */
+ paddsw %mm4, %mm6 /* tm4 */
+/* moved from next block */
+ movq 8*5(%ecx), %mm1
+ psubsw %mm4, %mm0 /* tm10; free mm4 */
+/* moved from next block */
+ pmulhw 8*5(%esi), %mm1 /* V5 */
+ movq %mm6, 8*4(%esi) /* tm4; free mm6 */
+ movq %mm0, 8*10(%esi) /* tm10; free mm0 */
+/* column 1: even part
+ * use V5, V13, V1, V9 to produce V56..V59
+ */
+/* moved to prev block:
+ * movq 8*5(%ecx), %mm1
+ * pmulhw 8*5(%esi), %mm1 V5
+ */
+ movq 8*13(%ecx), %mm7
+ psllw $1, %mm1 /* t128=t130 */
+ pmulhw 8*13(%esi), %mm7 /* V13 */
+ movq %mm1, %mm2 /* duplicate t128=t130 */
+ movq 8(%ecx), %mm3
+ pmulhw 8(%esi), %mm3 /* V1 */
+ movq 8*9(%ecx), %mm5
+ psubsw %mm7, %mm1 /* V50 */
+ pmulhw 8*9(%esi), %mm5 /* V9 */
+ paddsw %mm7, %mm2 /* V51 */
+ pmulhw x5a825a825a825a82, %mm1 /* 23170 ->V52 */
+ movq %mm2, %mm6 /* duplicate V51 */
+ psraw $1, %mm2 /* t138=t144 */
+ movq %mm3, %mm4 /* duplicate V1 */
+ psraw $2, %mm6 /* t136 */
+ paddsw %mm5, %mm3 /* V53 */
+ psubsw %mm5, %mm4 /* V54 ;mm5 free */
+ movq %mm3, %mm7 /* duplicate V53 */
+/* moved from next block */
+ movq 8*11(%ecx), %mm0
+ psraw $1, %mm4 /* t140=t142 */
+ psubsw %mm6, %mm1 /* V55 ; mm6 free */
+ paddsw %mm2, %mm3 /* V56 */
+ movq %mm4, %mm5 /* duplicate t140=t142 */
+ paddsw %mm1, %mm4 /* V57 */
+ movq %mm3, 8*5(%esi) /* V56 */
+ psubsw %mm1, %mm5 /* V58; mm1 free */
+ movq %mm4, 8*13(%esi) /* V57 */
+ psubsw %mm2, %mm7 /* V59; mm2 free */
+ movq %mm5, 8*9(%esi) /* V58 */
+/* keep mm7 alive all along the next block
+ * movq %mm7, 8(%esi) V59
+ * moved above
+ * movq 8*11(%ecx), %mm0
+ */
+ pmulhw 8*11(%esi), %mm0 /* V11 */
+ movq 8*7(%ecx), %mm6
+ pmulhw 8*7(%esi), %mm6 /* V7 */
+ movq 8*15(%ecx), %mm4
+ movq %mm0, %mm3 /* duplicate V11 */
+ pmulhw 8*15(%esi), %mm4 /* V15 */
+ movq 8*3(%ecx), %mm5
+ psllw $1, %mm6 /* t146=t152 */
+ pmulhw 8*3(%esi), %mm5 /* V3 */
+ paddsw %mm6, %mm0 /* V63 */
+/* note that V15 computation has a correction step:
+ * this is a 'magic' constant that rebiases the results to be closer to the
+ * expected result. this magic constant can be refined to reduce the error
+ * even more by doing the correction step in a later stage when the number
+ * is actually multiplied by 16
+ */
+ paddw x0005000200010001, %mm4
+ psubsw %mm6, %mm3 /* V60 ; free mm6 */
+ psraw $1, %mm0 /* t154=t156 */
+ movq %mm3, %mm1 /* duplicate V60 */
+ pmulhw x539f539f539f539f, %mm1 /* V67 */
+ movq %mm5, %mm6 /* duplicate V3 */
+ psraw $2, %mm4 /* t148=t150 */
+ paddsw %mm4, %mm5 /* V61 */
+ psubsw %mm4, %mm6 /* V62 ; free mm4 */
+ movq %mm5, %mm4 /* duplicate V61 */
+ psllw $1, %mm1 /* t169 */
+ paddsw %mm0, %mm5 /* V65 -> result */
+ psubsw %mm0, %mm4 /* V64 ; free mm0 */
+ pmulhw x5a825a825a825a82, %mm4 /* V68 */
+ psraw $1, %mm3 /* t158 */
+ psubsw %mm6, %mm3 /* V66 */
+ movq %mm5, %mm2 /* duplicate V65 */
+ pmulhw x61f861f861f861f8, %mm3 /* V70 */
+ psllw $1, %mm6 /* t165 */
+ pmulhw x4546454645464546, %mm6 /* V69 */
+ psraw $1, %mm2 /* t172 */
+/* moved from next block */
+ movq 8*5(%esi), %mm0 /* V56 */
+ psllw $1, %mm4 /* t174 */
+/* moved from next block */
+ psraw $1, %mm0 /* t177=t188 */
+ nop
+ psubsw %mm3, %mm6 /* V72 */
+ psubsw %mm1, %mm3 /* V71 ; free mm1 */
+ psubsw %mm2, %mm6 /* V73 ; free mm2 */
+/* moved from next block */
+ psraw $1, %mm5 /* t178=t189 */
+ psubsw %mm6, %mm4 /* V74 */
+/* moved from next block */
+ movq %mm0, %mm1 /* duplicate t177=t188 */
+ paddsw %mm4, %mm3 /* V75 */
+/* moved from next block */
+ paddsw %mm5, %mm0 /* tm1 */
+/* location
+ * 5 - V56
+ * 13 - V57
+ * 9 - V58
+ * X - V59, mm7
+ * X - V65, mm5
+ * X - V73, mm6
+ * X - V74, mm4
+ * X - V75, mm3
+ * free mm0, mm1 & mm2
+ * moved above
+ * movq 8*5(%esi), %mm0 V56
+ * psllw $1, %mm0 t177=t188 ! new !!
+ * psllw $1, %mm5 t178=t189 ! new !!
+ * movq %mm0, %mm1 duplicate t177=t188
+ * paddsw %mm5, %mm0 tm1
+ */
+ movq 8*13(%esi), %mm2 /* V57 */
+ psubsw %mm5, %mm1 /* tm15; free mm5 */
+ movq %mm0, 8(%esi) /* tm1; free mm0 */
+ psraw $1, %mm7 /* t182=t184 ! new !! */
+/* save the store as used directly in the transpose
+ * movq %mm1, 120(%esi) tm15; free mm1
+ */
+ movq %mm7, %mm5 /* duplicate t182=t184 */
+ psubsw %mm3, %mm7 /* tm7 */
+ paddsw %mm3, %mm5 /* tm9; free mm3 */
+ movq 8*9(%esi), %mm0 /* V58 */
+ movq %mm2, %mm3 /* duplicate V57 */
+ movq %mm7, 8*7(%esi) /* tm7; free mm7 */
+ psubsw %mm6, %mm3 /* tm13 */
+ paddsw %mm6, %mm2 /* tm3 ; free mm6 */
+/* moved up from the transpose */
+ movq %mm3, %mm7
+/* moved up from the transpose */
+ punpcklwd %mm1, %mm3
+ movq %mm0, %mm6 /* duplicate V58 */
+ movq %mm2, 8*3(%esi) /* tm3; free mm2 */
+ paddsw %mm4, %mm0 /* tm5 */
+ psubsw %mm4, %mm6 /* tm11; free mm4 */
+/* moved up from the transpose */
+ punpckhwd %mm1, %mm7
+ movq %mm0, 8*5(%esi) /* tm5; free mm0 */
+/* moved up from the transpose */
+ movq %mm5, %mm2
+/* transpose - M4 part
+ * --------- ---------
+ * | M1 | M2 | | M1'| M3'|
+ * --------- --> ---------
+ * | M3 | M4 | | M2'| M4'|
+ * --------- ---------
+ * Two alternatives: use full mmword approach so the following code can be
+ * scheduled before the transpose is done without stores, or use the faster
+ * half mmword stores (when possible)
+ */
+ movd %mm3, 8*9+4(%esi) /* MS part of tmt9 */
+ punpcklwd %mm6, %mm5
+ movd %mm7, 8*13+4(%esi) /* MS part of tmt13 */
+ punpckhwd %mm6, %mm2
+ movd %mm5, 8*9(%esi) /* LS part of tmt9 */
+ punpckhdq %mm3, %mm5 /* free mm3 */
+ movd %mm2, 8*13(%esi) /* LS part of tmt13 */
+ punpckhdq %mm7, %mm2 /* free mm7 */
+/* moved up from the M3 transpose */
+ movq 8*8(%esi), %mm0
+/* moved up from the M3 transpose */
+ movq 8*10(%esi), %mm1
+/* moved up from the M3 transpose */
+ movq %mm0, %mm3
+/* shuffle the rest of the data, and write it with 2 mmword writes */
+ movq %mm5, 8*11(%esi) /* tmt11 */
+/* moved up from the M3 transpose */
+ punpcklwd %mm1, %mm0
+ movq %mm2, 8*15(%esi) /* tmt15 */
+/* moved up from the M3 transpose */
+ punpckhwd %mm1, %mm3
+/* transpose - M3 part
+ * moved up to previous code section
+ * movq 8*8(%esi), %mm0
+ * movq 8*10(%esi), %mm1
+ * movq %mm0, %mm3
+ * punpcklwd %mm1, %mm0
+ * punpckhwd %mm1, %mm3
+ */
+ movq 8*12(%esi), %mm6
+ movq 8*14(%esi), %mm4
+ movq %mm6, %mm2
+/* shuffle the data and write the lower parts of the transposed in 4 dwords */
+ punpcklwd %mm4, %mm6
+ movq %mm0, %mm1
+ punpckhdq %mm6, %mm1
+ movq %mm3, %mm7
+ punpckhwd %mm4, %mm2 /* free mm4 */
+ punpckldq %mm6, %mm0 /* free mm6 */
+/* moved from next block */
+ movq 8*13(%esi), %mm4 /* tmt13 */
+ punpckldq %mm2, %mm3
+ punpckhdq %mm2, %mm7 /* free mm2 */
+/* moved from next block */
+ movq %mm3, %mm5 /* duplicate tmt5 */
+/* column 1: even part (after transpose)
+* moved above
+* movq %mm3, %mm5 duplicate tmt5
+* movq 8*13(%esi), %mm4 tmt13
+*/
+ psubsw %mm4, %mm3 /* V134 */
+ pmulhw x5a825a825a825a82, %mm3 /* 23170 ->V136 */
+ movq 8*9(%esi), %mm6 /* tmt9 */
+ paddsw %mm4, %mm5 /* V135 ; mm4 free */
+ movq %mm0, %mm4 /* duplicate tmt1 */
+ paddsw %mm6, %mm0 /* V137 */
+ psubsw %mm6, %mm4 /* V138 ; mm6 free */
+ psllw $2, %mm3 /* t290 */
+ psubsw %mm5, %mm3 /* V139 */
+ movq %mm0, %mm6 /* duplicate V137 */
+ paddsw %mm5, %mm0 /* V140 */
+ movq %mm4, %mm2 /* duplicate V138 */
+ paddsw %mm3, %mm2 /* V141 */
+ psubsw %mm3, %mm4 /* V142 ; mm3 free */
+ movq %mm0, 8*9(%esi) /* V140 */
+ psubsw %mm5, %mm6 /* V143 ; mm5 free */
+/* moved from next block */
+ movq 8*11(%esi), %mm0 /* tmt11 */
+ movq %mm2, 8*13(%esi) /* V141 */
+/* moved from next block */
+ movq %mm0, %mm2 /* duplicate tmt11 */
+/* column 1: odd part (after transpose) */
+/* moved up to the prev block
+ * movq 8*11(%esi), %mm0 tmt11
+ * movq %mm0, %mm2 duplicate tmt11
+ */
+ movq 8*15(%esi), %mm5 /* tmt15 */
+ psubsw %mm7, %mm0 /* V144 */
+ movq %mm0, %mm3 /* duplicate V144 */
+ paddsw %mm7, %mm2 /* V147 ; free mm7 */
+ pmulhw x539f539f539f539f, %mm0 /* 21407-> V151 */
+ movq %mm1, %mm7 /* duplicate tmt3 */
+ paddsw %mm5, %mm7 /* V145 */
+ psubsw %mm5, %mm1 /* V146 ; free mm5 */
+ psubsw %mm1, %mm3 /* V150 */
+ movq %mm7, %mm5 /* duplicate V145 */
+ pmulhw x4546454645464546, %mm1 /* 17734-> V153 */
+ psubsw %mm2, %mm5 /* V148 */
+ pmulhw x61f861f861f861f8, %mm3 /* 25080-> V154 */
+ psllw $2, %mm0 /* t311 */
+ pmulhw x5a825a825a825a82, %mm5 /* 23170-> V152 */
+ paddsw %mm2, %mm7 /* V149 ; free mm2 */
+ psllw $1, %mm1 /* t313 */
+ nop /* without the nop - freeze here for one clock */
+ movq %mm3, %mm2 /* duplicate V154 */
+ psubsw %mm0, %mm3 /* V155 ; free mm0 */
+ psubsw %mm2, %mm1 /* V156 ; free mm2 */
+/* moved from the next block */
+ movq %mm6, %mm2 /* duplicate V143 */
+/* moved from the next block */
+ movq 8*13(%esi), %mm0 /* V141 */
+ psllw $1, %mm1 /* t315 */
+ psubsw %mm7, %mm1 /* V157 (keep V149) */
+ psllw $2, %mm5 /* t317 */
+ psubsw %mm1, %mm5 /* V158 */
+ psllw $1, %mm3 /* t319 */
+ paddsw %mm5, %mm3 /* V159 */
+/* column 1: output butterfly (after transform)
+ * moved to the prev block
+ * movq %mm6, %mm2 duplicate V143
+ * movq 8*13(%esi), %mm0 V141
+ */
+ psubsw %mm3, %mm2 /* V163 */
+ paddsw %mm3, %mm6 /* V164 ; free mm3 */
+ movq %mm4, %mm3 /* duplicate V142 */
+ psubsw %mm5, %mm4 /* V165 ; free mm5 */
+ movq %mm2, (%esp) /* out7 */
+ psraw $4, %mm6
+ psraw $4, %mm4
+ paddsw %mm5, %mm3 /* V162 */
+ movq 8*9(%esi), %mm2 /* V140 */
+ movq %mm0, %mm5 /* duplicate V141 */
+/* in order not to perculate this line up,
+ * we read 72(%esi) very near to this location
+ */
+ movq %mm6, 8*9(%esi) /* out9 */
+ paddsw %mm1, %mm0 /* V161 */
+ movq %mm3, 8(%esp) /* out5 */
+ psubsw %mm1, %mm5 /* V166 ; free mm1 */
+ movq %mm4, 8*11(%esi) /* out11 */
+ psraw $4, %mm5
+ movq %mm0, 16(%esp) /* out3 */
+ movq %mm2, %mm4 /* duplicate V140 */
+ movq %mm5, 8*13(%esi) /* out13 */
+ paddsw %mm7, %mm2 /* V160 */
+/* moved from the next block */
+ movq 8(%esi), %mm0
+ psubsw %mm7, %mm4 /* V167 ; free mm7 */
+/* moved from the next block */
+ movq 8*3(%esi), %mm7
+ psraw $4, %mm4
+ movq %mm2, 24(%esp) /* out1 */
+/* moved from the next block */
+ movq %mm0, %mm1
+ movq %mm4, 8*15(%esi) /* out15 */
+/* moved from the next block */
+ punpcklwd %mm7, %mm0
+/* transpose - M2 parts
+ * moved up to the prev block
+ * movq 8(%esi), %mm0
+ * movq 8*3(%esi), %mm7
+ * movq %mm0, %mm1
+ * punpcklwd %mm7, %mm0
+ */
+ movq 8*5(%esi), %mm5
+ punpckhwd %mm7, %mm1
+ movq 8*7(%esi), %mm4
+ movq %mm5, %mm3
+/* shuffle the data and write the lower parts of the trasposed in 4 dwords */
+ movd %mm0, 8*8(%esi) /* LS part of tmt8 */
+ punpcklwd %mm4, %mm5
+ movd %mm1, 8*12(%esi) /* LS part of tmt12 */
+ punpckhwd %mm4, %mm3
+ movd %mm5, 8*8+4(%esi) /* MS part of tmt8 */
+ punpckhdq %mm5, %mm0 /* tmt10 */
+ movd %mm3, 8*12+4(%esi) /* MS part of tmt12 */
+ punpckhdq %mm3, %mm1 /* tmt14 */
+/* transpose - M1 parts */
+ movq (%esi), %mm7
+ movq 8*2(%esi), %mm2
+ movq %mm7, %mm6
+ movq 8*4(%esi), %mm5
+ punpcklwd %mm2, %mm7
+ movq 8*6(%esi), %mm4
+ punpckhwd %mm2, %mm6 /* free mm2 */
+ movq %mm5, %mm3
+ punpcklwd %mm4, %mm5
+ punpckhwd %mm4, %mm3 /* free mm4 */
+ movq %mm7, %mm2
+ movq %mm6, %mm4
+ punpckldq %mm5, %mm7 /* tmt0 */
+ punpckhdq %mm5, %mm2 /* tmt2 ; free mm5 */
+/* shuffle the rest of the data, and write it with 2 mmword writes */
+ punpckldq %mm3, %mm6 /* tmt4 */
+/* moved from next block */
+ movq %mm2, %mm5 /* duplicate tmt2 */
+ punpckhdq %mm3, %mm4 /* tmt6 ; free mm3 */
+/* moved from next block */
+ movq %mm0, %mm3 /* duplicate tmt10 */
+/* column 0: odd part (after transpose)
+ *moved up to prev block
+ * movq %mm0, %mm3 duplicate tmt10
+ * movq %mm2, %mm5 duplicate tmt2
+ */
+ psubsw %mm4, %mm0 /* V110 */
+ paddsw %mm4, %mm3 /* V113 ; free mm4 */
+ movq %mm0, %mm4 /* duplicate V110 */
+ paddsw %mm1, %mm2 /* V111 */
+ pmulhw x539f539f539f539f, %mm0 /* 21407-> V117 */
+ psubsw %mm1, %mm5 /* V112 ; free mm1 */
+ psubsw %mm5, %mm4 /* V116 */
+ movq %mm2, %mm1 /* duplicate V111 */
+ pmulhw x4546454645464546, %mm5 /* 17734-> V119 */
+ psubsw %mm3, %mm2 /* V114 */
+ pmulhw x61f861f861f861f8, %mm4 /* 25080-> V120 */
+ paddsw %mm3, %mm1 /* V115 ; free mm3 */
+ pmulhw x5a825a825a825a82, %mm2 /* 23170-> V118 */
+ psllw $2, %mm0 /* t266 */
+ movq %mm1, (%esi) /* save V115 */
+ psllw $1, %mm5 /* t268 */
+ psubsw %mm4, %mm5 /* V122 */
+ psubsw %mm0, %mm4 /* V121 ; free mm0 */
+ psllw $1, %mm5 /* t270 */
+ psubsw %mm1, %mm5 /* V123 ; free mm1 */
+ psllw $2, %mm2 /* t272 */
+ psubsw %mm5, %mm2 /* V124 (keep V123) */
+ psllw $1, %mm4 /* t274 */
+ movq %mm5, 8*2(%esi) /* save V123 ; free mm5 */
+ paddsw %mm2, %mm4 /* V125 (keep V124) */
+/* column 0: even part (after transpose) */
+ movq 8*12(%esi), %mm0 /* tmt12 */
+ movq %mm6, %mm3 /* duplicate tmt4 */
+ psubsw %mm0, %mm6 /* V100 */
+ paddsw %mm0, %mm3 /* V101 ; free mm0 */
+ pmulhw x5a825a825a825a82, %mm6 /* 23170 ->V102 */
+ movq %mm7, %mm5 /* duplicate tmt0 */
+ movq 8*8(%esi), %mm1 /* tmt8 */
+ paddsw %mm1, %mm7 /* V103 */
+ psubsw %mm1, %mm5 /* V104 ; free mm1 */
+ movq %mm7, %mm0 /* duplicate V103 */
+ psllw $2, %mm6 /* t245 */
+ paddsw %mm3, %mm7 /* V106 */
+ movq %mm5, %mm1 /* duplicate V104 */
+ psubsw %mm3, %mm6 /* V105 */
+ psubsw %mm3, %mm0 /* V109; free mm3 */
+ paddsw %mm6, %mm5 /* V107 */
+ psubsw %mm6, %mm1 /* V108 ; free mm6 */
+/* column 0: output butterfly (after transform) */
+ movq %mm1, %mm3 /* duplicate V108 */
+ paddsw %mm2, %mm1 /* out4 */
+ psraw $4, %mm1
+ psubsw %mm2, %mm3 /* out10 ; free mm2 */
+ psraw $4, %mm3
+ movq %mm0, %mm6 /* duplicate V109 */
+ movq %mm1, 8*4(%esi) /* out4 ; free mm1 */
+ psubsw %mm4, %mm0 /* out6 */
+ movq %mm3, 8*10(%esi) /* out10 ; free mm3 */
+ psraw $4, %mm0
+ paddsw %mm4, %mm6 /* out8 ; free mm4 */
+ movq %mm7, %mm1 /* duplicate V106 */
+ movq %mm0, 8*6(%esi) /* out6 ; free mm0 */
+ psraw $4, %mm6
+ movq (%esi), %mm4 /* V115 */
+ movq %mm6, 8*8(%esi) /* out8 ; free mm6 */
+ movq %mm5, %mm2 /* duplicate V107 */
+ movq 8*2(%esi), %mm3 /* V123 */
+ paddsw %mm4, %mm7 /* out0 */
+/* moved up from next block */
+ movq 16(%esp), %mm0
+ psraw $4, %mm7
+/* moved up from next block */
+ movq 8(%esp), %mm6
+ psubsw %mm4, %mm1 /* out14 ; free mm4 */
+ paddsw %mm3, %mm5 /* out2 */
+ psraw $4, %mm1
+ movq %mm7, (%esi) /* out0 ; free mm7 */
+ psraw $4, %mm5
+ movq %mm1, 8*14(%esi) /* out14 ; free mm1 */
+ psubsw %mm3, %mm2 /* out12 ; free mm3 */
+ movq %mm5, 8*2(%esi) /* out2 ; free mm5 */
+ psraw $4, %mm2
+/* moved up to the prev block */
+ movq (%esp), %mm4
+/* moved up to the prev block */
+ psraw $4, %mm0
+ movq %mm2, 8*12(%esi) /* out12 ; free mm2 */
+/* moved up to the prev block */
+ psraw $4, %mm6
+/* move back the data to its correct place
+* moved up to the prev block
+ * movq 16(%esp), %mm0
+ * movq 8(%esp), %mm6
+ * movq (%esp), %mm4
+ * psraw $4, %mm0
+ * psraw $4, %mm6
+*/
+ movq 24(%esp), %mm1
+ psraw $4, %mm4
+ movq %mm0, 8*3(%esi) /* out3 */
+ psraw $4, %mm1
+ movq %mm6, 8*5(%esi) /* out5 */
+ movq %mm4, 8*7(%esi) /* out7 */
+ movq %mm1, 8(%esi) /* out1 */
+
+ popl %edi /* Pop off the temp variables */
+ popl %edi
+ popl %edi
+ popl %edi
+ popl %edi
+ popl %edi
+ popl %edi
+ popl %edi
+
+ popl %edi /* Pop off the old variables */
+ popl %esi
+ popl %edx
+ popl %ecx
+ popl %ebx
+ movl %ebp, %esp
+ popl %ebp
+
+ ret
+.Lfe1:
+ .size IDCT_mmx,.Lfe1-IDCT_mmx
diff --git a/core/multimedia/opieplayer/libmpeg3/video/mmxtest.c b/core/multimedia/opieplayer/libmpeg3/video/mmxtest.c
new file mode 100644
index 0000000..567f139
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/mmxtest.c
@@ -0,0 +1,35 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+
+#include <stdio.h>
+#include <string.h>
+
+int mpeg3_mmx_test()
+{
+ int result = 0;
+ FILE *proc;
+ char string[MPEG3_STRLEN];
+
+
+#ifdef HAVE_MMX
+ if(!(proc = fopen(MPEG3_PROC_CPUINFO, "r")))
+ {
+ return 0;
+ }
+
+ while(!feof(proc))
+ {
+ fgets(string, MPEG3_STRLEN, proc);
+/* Got the flags line */
+ if(!strncmp(string, "flags", 5))
+ {
+ char *needle;
+ needle = strstr(string, "mmx");
+ if(!needle) return 0;
+ if(!strncmp(needle, "mmx", 3)) return 1;
+ }
+ }
+#endif
+
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/motion.c b/core/multimedia/opieplayer/libmpeg3/video/motion.c
new file mode 100644
index 0000000..4d2f681
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/motion.c
@@ -0,0 +1,230 @@
+#include "mpeg3video.h"
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "vlc.h"
+
+#include <stdio.h>
+
+
+/* calculate motion vector component */
+
+static inline void mpeg3video_calc_mv(int *pred, int r_size, int motion_code, int motion_r, int full_pel_vector)
+{
+ int lim = 16 << r_size;
+ int vec = full_pel_vector ? (*pred >> 1) : (*pred);
+
+ if(motion_code > 0)
+ {
+ vec += ((motion_code - 1) << r_size) + motion_r + 1;
+ if(vec >= lim) vec -= lim + lim;
+ }
+ else
+ if(motion_code < 0)
+ {
+ vec -= ((-motion_code - 1) << r_size) + motion_r + 1;
+ if(vec < -lim) vec += lim + lim;
+ }
+ *pred = full_pel_vector ? (vec << 1) : vec;
+}
+
+
+/*
+int *dmvector, * differential motion vector *
+int mvx, int mvy * decoded mv components (always in field format) *
+*/
+void mpeg3video_calc_dmv(mpeg3video_t *video,
+ int DMV[][2],
+ int *dmvector,
+ int mvx,
+ int mvy)
+{
+ if(video->pict_struct == FRAME_PICTURE)
+ {
+ if(video->topfirst)
+ {
+/* vector for prediction of top field from bottom field */
+ DMV[0][0] = ((mvx + (mvx>0)) >> 1) + dmvector[0];
+ DMV[0][1] = ((mvy + (mvy>0)) >> 1) + dmvector[1] - 1;
+
+/* vector for prediction of bottom field from top field */
+ DMV[1][0] = ((3 * mvx + (mvx > 0)) >> 1) + dmvector[0];
+ DMV[1][1] = ((3 * mvy + (mvy > 0)) >> 1) + dmvector[1] + 1;
+ }
+ else
+ {
+/* vector for prediction of top field from bottom field */
+ DMV[0][0] = ((3 * mvx + (mvx>0)) >> 1) + dmvector[0];
+ DMV[0][1] = ((3 * mvy + (mvy>0)) >> 1) + dmvector[1] - 1;
+
+/* vector for prediction of bottom field from top field */
+ DMV[1][0] = ((mvx + (mvx>0)) >> 1) + dmvector[0];
+ DMV[1][1] = ((mvy + (mvy>0)) >> 1) + dmvector[1] + 1;
+ }
+ }
+ else
+ {
+/* vector for prediction from field of opposite 'parity' */
+ DMV[0][0] = ((mvx + (mvx > 0)) >> 1) + dmvector[0];
+ DMV[0][1] = ((mvy + (mvy > 0)) >> 1) + dmvector[1];
+
+/* correct for vertical field shift */
+ if(video->pict_struct == TOP_FIELD)
+ DMV[0][1]--;
+ else
+ DMV[0][1]++;
+ }
+}
+
+static inline int mpeg3video_get_mv(mpeg3_slice_t *slice)
+{
+ int code;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+ if(mpeg3slice_getbit(slice_buffer))
+ {
+ return 0;
+ }
+
+ if((code = mpeg3slice_showbits9(slice_buffer)) >= 64)
+ {
+ code >>= 6;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_MVtab0[code].len);
+ return mpeg3slice_getbit(slice_buffer) ? -mpeg3_MVtab0[code].val : mpeg3_MVtab0[code].val;
+ }
+
+ if(code >= 24)
+ {
+ code >>= 3;
+ mpeg3slice_flushbits(slice_buffer, mpeg3_MVtab1[code].len);
+ return mpeg3slice_getbit(slice_buffer) ? -mpeg3_MVtab1[code].val : mpeg3_MVtab1[code].val;
+ }
+
+ if((code -= 12) < 0)
+ {
+/* fprintf(stdout,"mpeg3video_get_mv: invalid motion_vector code\n"); */
+ slice->fault = 1;
+ return 1;
+ }
+
+ mpeg3slice_flushbits(slice_buffer, mpeg3_MVtab2[code].len);
+ return mpeg3slice_getbit(slice_buffer) ? -mpeg3_MVtab2[code].val : mpeg3_MVtab2[code].val;
+}
+
+/* get differential motion vector (for dual prime prediction) */
+
+static inline int mpeg3video_get_dmv(mpeg3_slice_t *slice)
+{
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ if(mpeg3slice_getbit(slice_buffer))
+ {
+ return mpeg3slice_getbit(slice_buffer) ? -1 : 1;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+
+
+/* get and decode motion vector and differential motion vector */
+
+void mpeg3video_motion_vector(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int *PMV,
+ int *dmvector,
+ int h_r_size,
+ int v_r_size,
+ int dmv,
+ int mvscale,
+ int full_pel_vector)
+{
+ int motion_r;
+ int motion_code = mpeg3video_get_mv(slice);
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+ if(slice->fault) return;
+ motion_r = (h_r_size != 0 && motion_code != 0) ? mpeg3slice_getbits(slice_buffer, h_r_size) : 0;
+
+ mpeg3video_calc_mv(&PMV[0], h_r_size, motion_code, motion_r, full_pel_vector);
+
+ if(dmv) dmvector[0] = mpeg3video_get_dmv(slice);
+
+ motion_code = mpeg3video_get_mv(slice);
+ if(slice->fault) return;
+ motion_r = (v_r_size != 0 && motion_code != 0) ? mpeg3slice_getbits(slice_buffer, v_r_size) : 0;
+
+/* DIV 2 */
+ if(mvscale) PMV[1] >>= 1;
+
+ mpeg3video_calc_mv(&PMV[1], v_r_size, motion_code, motion_r, full_pel_vector);
+
+ if(mvscale) PMV[1] <<= 1;
+ if(dmv) dmvector[1] = mpeg3video_get_dmv(slice);
+}
+
+int mpeg3video_motion_vectors(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int PMV[2][2][2],
+ int dmvector[2],
+ int mv_field_sel[2][2],
+ int s,
+ int mv_count,
+ int mv_format,
+ int h_r_size,
+ int v_r_size,
+ int dmv,
+ int mvscale)
+{
+ int result = 0;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+ if(mv_count == 1)
+ {
+ if(mv_format == MV_FIELD && !dmv)
+ {
+ mv_field_sel[1][s] = mv_field_sel[0][s] = mpeg3slice_getbit(slice_buffer);
+ }
+
+ mpeg3video_motion_vector(slice,
+ video,
+ PMV[0][s],
+ dmvector,
+ h_r_size,
+ v_r_size,
+ dmv,
+ mvscale,
+ 0);
+ if(slice->fault) return 1;
+
+/* update other motion vector predictors */
+ PMV[1][s][0] = PMV[0][s][0];
+ PMV[1][s][1] = PMV[0][s][1];
+ }
+ else
+ {
+ mv_field_sel[0][s] = mpeg3slice_getbit(slice_buffer);
+ mpeg3video_motion_vector(slice,
+ video,
+ PMV[0][s],
+ dmvector,
+ h_r_size,
+ v_r_size,
+ dmv,
+ mvscale,
+ 0);
+ if(slice->fault) return 1;
+
+ mv_field_sel[1][s] = mpeg3slice_getbit(slice_buffer);
+ mpeg3video_motion_vector(slice,
+ video,
+ PMV[1][s],
+ dmvector,
+ h_r_size,
+ v_r_size,
+ dmv,
+ mvscale,
+ 0);
+ if(slice->fault) return 1;
+ }
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/mpeg3video.c b/core/multimedia/opieplayer/libmpeg3/video/mpeg3video.c
new file mode 100644
index 0000000..a9f113e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/mpeg3video.c
@@ -0,0 +1,597 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+#include "mpeg3videoprotos.h"
+#include <stdlib.h>
+
+unsigned char mpeg3_zig_zag_scan_mmx[64] =
+{
+ 0*8+0 /* 0*/, 1*8+0 /* 1*/, 0*8+1 /* 8*/, 0*8+2 /*16*/, 1*8+1 /* 9*/, 2*8+0 /* 2*/, 3*8+0 /* 3*/, 2*8+1 /*10*/,
+ 1*8+2 /*17*/, 0*8+3 /*24*/, 0*8+4 /*32*/, 1*8+3 /*25*/, 2*8+2 /*18*/, 3*8+1 /*11*/, 4*8+0 /* 4*/, 5*8+0 /* 5*/,
+ 4*8+1 /*12*/, 5*8+2 /*19*/, 2*8+3 /*26*/, 1*8+4 /*33*/, 0*8+5 /*40*/, 0*8+6 /*48*/, 1*8+5 /*41*/, 2*8+4 /*34*/,
+ 3*8+3 /*27*/, 4*8+2 /*20*/, 5*8+1 /*13*/, 6*8+0 /* 6*/, 7*8+0 /* 7*/, 6*8+1 /*14*/, 5*8+2 /*21*/, 4*8+3 /*28*/,
+ 3*8+4 /*35*/, 2*8+5 /*42*/, 1*8+6 /*49*/, 0*8+7 /*56*/, 1*8+7 /*57*/, 2*8+6 /*50*/, 3*8+5 /*43*/, 4*8+4 /*36*/,
+ 5*8+3 /*29*/, 6*8+2 /*22*/, 7*8+1 /*15*/, 7*8+2 /*23*/, 6*8+3 /*30*/, 5*8+4 /*37*/, 4*8+5 /*44*/, 3*8+6 /*51*/,
+ 2*8+7 /*58*/, 3*8+7 /*59*/, 4*8+6 /*52*/, 5*8+5 /*45*/, 6*8+4 /*38*/, 7*8+3 /*31*/, 7*8+4 /*39*/, 6*8+5 /*46*/,
+ 7*8+6 /*53*/, 4*8+7 /*60*/, 5*8+7 /*61*/, 6*8+6 /*54*/, 7*8+5 /*47*/, 7*8+6 /*55*/, 6*8+7 /*62*/, 7*8+7 /*63*/
+};
+
+/* alternate scan */
+unsigned char mpeg3_alternate_scan_mmx[64] =
+{
+ 0*8+0 /*0 */, 0*8+1 /* 8*/, 0*8+2 /*16*/, 0*8+3 /*24*/, 1*8+0 /* 1*/, 1*8+1 /* 9*/, 2*8+0 /* 2*/, 2*8+1 /*10*/,
+ 1*8+2 /*17*/, 1*8+3 /*25*/, 0*8+4 /*32*/, 0*8+5 /*40*/, 0*8+6 /*48*/, 0*8+7 /*56*/, 1*8+7 /*57*/, 1*8+6 /*49*/,
+ 1*8+5 /*41*/, 1*8+4 /*33*/, 2*8+3 /*26*/, 2*8+2 /*18*/, 3*8+0 /* 3*/, 3*8+1 /*11*/, 4*8+0 /* 4*/, 4*8+1 /*12*/,
+ 3*8+2 /*19*/, 3*8+3 /*27*/, 2*8+4 /*34*/, 2*8+5 /*42*/, 2*8+6 /*50*/, 2*8+7 /*58*/, 3*8+4 /*35*/, 3*8+5 /*43*/,
+ 3*8+6 /*51*/, 3*8+7 /*59*/, 4*8+2 /*20*/, 4*8+3 /*28*/, 5*8+0 /* 5*/, 5*8+1 /*13*/, 6*8+0 /* 6*/, 6*8+1 /*14*/,
+ 5*8+2 /*21*/, 5*8+3 /*29*/, 4*8+4 /*36*/, 4*8+5 /*44*/, 4*8+6 /*52*/, 4*8+7 /*60*/, 5*8+4 /*37*/, 5*8+5 /*45*/,
+ 5*8+6 /*53*/, 5*8+7 /*61*/, 6*8+2 /*22*/, 6*8+3 /*30*/, 7*8+0 /* 7*/, 7*8+1 /*15*/, 7*8+2 /*23*/, 7*8+3 /*31*/,
+ 6*8+4 /*38*/, 6*8+5 /*46*/, 6*8+6 /*54*/, 6*8+7 /*62*/, 7*8+4 /*39*/, 7*8+5 /*47*/, 7*8+6 /*55*/, 7*8+6 /*63*/
+};
+
+
+
+/* zig-zag scan */
+unsigned char mpeg3_zig_zag_scan_nommx[64] =
+{
+ 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5,
+ 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28,
+ 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
+ 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63
+};
+
+/* alternate scan */
+unsigned char mpeg3_alternate_scan_nommx[64] =
+{
+ 0, 8, 16, 24, 1, 9, 2, 10, 17, 25, 32, 40, 48, 56, 57, 49,
+ 41, 33, 26, 18, 3, 11, 4, 12, 19, 27, 34, 42, 50, 58, 35, 43,
+ 51, 59, 20, 28, 5, 13, 6, 14, 21, 29, 36, 44, 52, 60, 37, 45,
+ 53, 61, 22, 30, 7, 15, 23, 31, 38, 46, 54, 62, 39, 47, 55, 63
+};
+
+/* default intra quantization matrix */
+unsigned char mpeg3_default_intra_quantizer_matrix[64] =
+{
+ 8, 16, 19, 22, 26, 27, 29, 34,
+ 16, 16, 22, 24, 27, 29, 34, 37,
+ 19, 22, 26, 27, 29, 34, 34, 38,
+ 22, 22, 26, 27, 29, 34, 37, 40,
+ 22, 26, 27, 29, 32, 35, 40, 48,
+ 26, 27, 29, 32, 35, 40, 48, 58,
+ 26, 27, 29, 34, 38, 46, 56, 69,
+ 27, 29, 35, 38, 46, 56, 69, 83
+};
+
+unsigned char mpeg3_non_linear_mquant_table[32] =
+{
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 10, 12, 14, 16, 18, 20, 22,
+ 24, 28, 32, 36, 40, 44, 48, 52,
+ 56, 64, 72, 80, 88, 96, 104, 112
+};
+
+double mpeg3_frame_rate_table[16] =
+{
+ 0.0, /* Pad */
+ 24000.0/1001.0, /* Official frame rates */
+ 24.0,
+ 25.0,
+ 30000.0/1001.0,
+ 30.0,
+ 50.0,
+ ((60.0*1000.0)/1001.0),
+ 60.0,
+
+ 1, /* Unofficial economy rates */
+ 5,
+ 10,
+ 12,
+ 15,
+ 0,
+ 0,
+};
+
+int mpeg3video_initdecoder(mpeg3video_t *video)
+{
+ int blk_cnt_tab[3] = {6, 8, 12};
+ int cc;
+ int i;
+ long size[4], padding[2]; /* Size of Y, U, and V buffers */
+
+ if(!video->mpeg2)
+ {
+/* force MPEG-1 parameters */
+ video->prog_seq = 1;
+ video->prog_frame = 1;
+ video->pict_struct = FRAME_PICTURE;
+ video->frame_pred_dct = 1;
+ video->chroma_format = CHROMA420;
+ video->matrix_coefficients = 5;
+ }
+
+/* Get dimensions rounded to nearest multiple of coded macroblocks */
+ video->mb_width = (video->horizontal_size + 15) / 16;
+ video->mb_height = (video->mpeg2 && !video->prog_seq) ?
+ (2 * ((video->vertical_size + 31) / 32)) :
+ ((video->vertical_size + 15) / 16);
+ video->coded_picture_width = 16 * video->mb_width;
+ video->coded_picture_height = 16 * video->mb_height;
+ video->chrom_width = (video->chroma_format == CHROMA444) ?
+ video->coded_picture_width :
+ (video->coded_picture_width >> 1);
+ video->chrom_height = (video->chroma_format != CHROMA420) ?
+ video->coded_picture_height :
+ (video->coded_picture_height >> 1);
+ video->blk_cnt = blk_cnt_tab[video->chroma_format - 1];
+
+/* Get sizes of YUV buffers */
+ padding[0] = 16 * video->coded_picture_width;
+ size[0] = video->coded_picture_width * video->coded_picture_height + padding[0] * 2;
+
+ padding[1] = 16 * video->chrom_width;
+ size[1] = video->chrom_width * video->chrom_height + 2 * padding[1];
+
+ size[2] = (video->llw * video->llh);
+ size[3] = (video->llw * video->llh) / 4;
+
+/* Allocate contiguous fragments for YUV buffers for hardware YUV decoding */
+ video->yuv_buffer[0] = (unsigned char*)calloc(1, (size[0] + padding[0]) + 2 * (size[1] + padding[1]));
+ video->yuv_buffer[1] = (unsigned char*)calloc(1, (size[0] + padding[0]) + 2 * (size[1] + padding[1]));
+ video->yuv_buffer[2] = (unsigned char*)calloc(1, (size[0] + padding[0]) + 2 * (size[1] + padding[1]));
+
+ if(video->scalable_mode == SC_SPAT)
+ {
+ video->yuv_buffer[3] = (unsigned char*)calloc(1, size[2] + 2 * size[3]);
+ video->yuv_buffer[4] = (unsigned char*)calloc(1, size[2] + 2 * size[3]);
+ }
+
+/* Direct pointers to areas of contiguous fragments in YVU order per Microsoft */
+ for(cc = 0; cc < 3; cc++)
+ {
+ video->llframe0[cc] = 0;
+ video->llframe1[cc] = 0;
+ video->newframe[cc] = 0;
+ }
+
+ video->refframe[0] = video->yuv_buffer[0];
+ video->oldrefframe[0] = video->yuv_buffer[1];
+ video->auxframe[0] = video->yuv_buffer[2];
+ video->refframe[2] = video->yuv_buffer[0] + size[0] + padding[0];
+ video->oldrefframe[2] = video->yuv_buffer[1] + size[0] + padding[0];
+ video->auxframe[2] = video->yuv_buffer[2] + size[0] + padding[0];
+ video->refframe[1] = video->yuv_buffer[0] + size[0] + padding[0] + size[1] + padding[1];
+ video->oldrefframe[1] = video->yuv_buffer[1] + size[0] + padding[0] + size[1] + padding[1];
+ video->auxframe[1] = video->yuv_buffer[2] + size[0] + padding[0] + size[1] + padding[1];
+
+ if(video->scalable_mode == SC_SPAT)
+ {
+/* this assumes lower layer is 4:2:0 */
+ video->llframe0[0] = video->yuv_buffer[3] + padding[0] ;
+ video->llframe1[0] = video->yuv_buffer[4] + padding[0] ;
+ video->llframe0[2] = video->yuv_buffer[3] + padding[1] + size[2] ;
+ video->llframe1[2] = video->yuv_buffer[4] + padding[1] + size[2] ;
+ video->llframe0[1] = video->yuv_buffer[3] + padding[1] + size[2] + size[3];
+ video->llframe1[1] = video->yuv_buffer[4] + padding[1] + size[2] + size[3];
+ }
+
+/* Initialize the YUV tables for software YUV decoding */
+ video->cr_to_r = (long*)malloc(sizeof(long) * 256);
+ video->cr_to_g = (long*)malloc(sizeof(long) * 256);
+ video->cb_to_g = (long*)malloc(sizeof(long) * 256);
+ video->cb_to_b = (long*)malloc(sizeof(long) * 256);
+ video->cr_to_r_ptr = video->cr_to_r + 128;
+ video->cr_to_g_ptr = video->cr_to_g + 128;
+ video->cb_to_g_ptr = video->cb_to_g + 128;
+ video->cb_to_b_ptr = video->cb_to_b + 128;
+
+ for(i = -128; i < 128; i++)
+ {
+ video->cr_to_r_ptr[i] = (long)( 1.371 * 65536 * i);
+ video->cr_to_g_ptr[i] = (long)(-0.698 * 65536 * i);
+ video->cb_to_g_ptr[i] = (long)(-0.336 * 65536 * i);
+ video->cb_to_b_ptr[i] = (long)( 1.732 * 65536 * i);
+ }
+
+ return 0;
+}
+
+int mpeg3video_deletedecoder(mpeg3video_t *video)
+{
+ int i, padding;
+
+ free(video->yuv_buffer[0]);
+ free(video->yuv_buffer[1]);
+ free(video->yuv_buffer[2]);
+
+ if(video->llframe0[0])
+ {
+ free(video->yuv_buffer[3]);
+ free(video->yuv_buffer[4]);
+ }
+
+ free(video->cr_to_r);
+ free(video->cr_to_g);
+ free(video->cb_to_g);
+ free(video->cb_to_b);
+ return 0;
+}
+
+void mpeg3video_init_scantables(mpeg3video_t *video)
+{
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ {
+ video->mpeg3_zigzag_scan_table = mpeg3_zig_zag_scan_mmx;
+ video->mpeg3_alternate_scan_table = mpeg3_alternate_scan_mmx;
+ }
+ else
+#endif
+ {
+ video->mpeg3_zigzag_scan_table = mpeg3_zig_zag_scan_nommx;
+ video->mpeg3_alternate_scan_table = mpeg3_alternate_scan_nommx;
+ }
+}
+
+mpeg3video_t* mpeg3video_allocate_struct(mpeg3_t *file, mpeg3_vtrack_t *track)
+{
+ int i;
+ mpeg3video_t *video = (mpeg3video_t*)calloc(1, sizeof(mpeg3video_t));
+ pthread_mutexattr_t mutex_attr;
+
+ video->file = file;
+ video->track = track;
+ video->vstream = mpeg3bits_new_stream(file, track->demuxer);
+ video->last_number = -1;
+
+/* First frame is all green */
+ video->framenum = -1;
+ video->have_mmx = file->have_mmx;
+
+ video->percentage_seek = -1;
+ video->frame_seek = -1;
+
+ mpeg3video_init_scantables(video);
+ mpeg3video_init_output();
+
+ pthread_mutexattr_init(&mutex_attr);
+ pthread_mutex_init(&(video->test_lock), &mutex_attr);
+ pthread_mutex_init(&(video->slice_lock), &mutex_attr);
+ return video;
+}
+
+int mpeg3video_delete_struct(mpeg3video_t *video)
+{
+ int i;
+ mpeg3bits_delete_stream(video->vstream);
+ pthread_mutex_destroy(&(video->test_lock));
+ pthread_mutex_destroy(&(video->slice_lock));
+ if(video->x_table)
+ {
+ free(video->x_table);
+ free(video->y_table);
+ }
+ if(video->total_slice_decoders)
+ {
+ for(i = 0; i < video->total_slice_decoders; i++)
+ mpeg3_delete_slice_decoder(&video->slice_decoders[i]);
+ }
+ for(i = 0; i < video->slice_buffers_initialized; i++)
+ mpeg3_delete_slice_buffer(&(video->slice_buffers[i]));
+
+ free(video);
+}
+
+
+int mpeg3video_read_frame_backend(mpeg3video_t *video, int skip_bframes)
+{
+ int result = 0;
+
+ if(mpeg3bits_eof(video->vstream)) result = 1;
+
+ if(!result) result = mpeg3video_get_header(video, 0);
+
+//printf("frame type %d\n", video->pict_type);
+/* skip_bframes is the number of bframes we can skip successfully. */
+/* This is in case a skipped B-frame is repeated and the second repeat happens */
+/* to be a B frame we need. */
+ video->skip_bframes = skip_bframes;
+
+ if(!result)
+ result = mpeg3video_getpicture(video, video->framenum);
+
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ __asm__ __volatile__ ("emms");
+#endif
+
+ if(!result)
+ {
+ video->last_number = video->framenum;
+ video->framenum++;
+ }
+ return result;
+}
+
+int* mpeg3video_get_scaletable(int input_w, int output_w)
+{
+ int *result = (int*)malloc(sizeof(int) * output_w);
+ float i;
+ float scale = (float)input_w / output_w;
+ for(i = 0; i < output_w; i++)
+ {
+ result[(int)i] = (int)(scale * i);
+ }
+ return result;
+}
+
+/* Get the first frame read. */
+int mpeg3video_get_firstframe(mpeg3video_t *video)
+{
+ int result = 0;
+ if(video->framenum < 0)
+ {
+ video->repeat_count = video->current_repeat = 0;
+ result = mpeg3video_read_frame_backend(video, 0);
+ mpeg3bits_seek_byte(video->vstream, 0);
+ mpeg3video_match_refframes(video);
+ }
+ return result;
+}
+
+
+/* ======================================================================= */
+/* ENTRY POINTS */
+/* ======================================================================= */
+
+
+
+mpeg3video_t* mpeg3video_new(mpeg3_t *file, mpeg3_vtrack_t *track)
+{
+ mpeg3video_t *video;
+ int result = 0;
+
+ video = mpeg3video_allocate_struct(file, track);
+ result = mpeg3video_get_header(video, 1);
+
+ if(!result)
+ {
+ int hour, minute, second, frame;
+ int gop_found;
+
+ mpeg3video_initdecoder(video);
+ video->decoder_initted = 1;
+ track->width = video->horizontal_size;
+ track->height = video->vertical_size;
+ track->frame_rate = video->frame_rate;
+
+/* Get the length of the file from an elementary stream */
+ if(file->is_video_stream)
+ {
+/* Load the first GOP */
+ mpeg3bits_seek_start(video->vstream);
+ result = mpeg3video_next_code(video->vstream, MPEG3_GOP_START_CODE);
+ if(!result) mpeg3bits_getbits(video->vstream, 32);
+ if(!result) result = mpeg3video_getgophdr(video);
+
+ hour = video->gop_timecode.hour;
+ minute = video->gop_timecode.minute;
+ second = video->gop_timecode.second;
+ frame = video->gop_timecode.frame;
+ video->first_frame = (long)(hour * 3600 * video->frame_rate +
+ minute * 60 * video->frame_rate +
+ second * video->frame_rate +
+ frame);
+
+/* GOPs always have 16 frames */
+ video->frames_per_gop = 16;
+
+/* Read the last GOP in the file by seeking backward. */
+ mpeg3bits_seek_end(video->vstream);
+ mpeg3bits_start_reverse(video->vstream);
+ result = mpeg3video_prev_code(video->vstream, MPEG3_GOP_START_CODE);
+ mpeg3bits_start_forward(video->vstream);
+ mpeg3bits_getbits(video->vstream, 8);
+ if(!result) result = mpeg3video_getgophdr(video);
+
+ hour = video->gop_timecode.hour;
+ minute = video->gop_timecode.minute;
+ second = video->gop_timecode.second;
+ frame = video->gop_timecode.frame;
+
+ video->last_frame = (long)(hour * 3600 * video->frame_rate +
+ minute * 60 * video->frame_rate +
+ second * video->frame_rate +
+ frame);
+
+/* Count number of frames to end */
+ while(!result)
+ {
+ result = mpeg3video_next_code(video->vstream, MPEG3_PICTURE_START_CODE);
+ if(!result)
+ {
+ mpeg3bits_getbyte_noptr(video->vstream);
+ video->last_frame++;
+ }
+ }
+
+ track->total_frames = video->last_frame - video->first_frame + 1;
+ mpeg3bits_seek_start(video->vstream);
+ }
+ else
+ {
+/* Gross approximation from a multiplexed file. */
+ video->first_frame = 0;
+ track->total_frames = video->last_frame =
+ (long)(mpeg3demux_length(video->vstream->demuxer) *
+ video->frame_rate);
+ video->first_frame = 0;
+ }
+
+ video->maxframe = track->total_frames;
+ mpeg3bits_seek_start(video->vstream);
+ }
+ else
+ {
+ mpeg3video_delete(video);
+ video = 0;
+ }
+
+ return video;
+}
+
+int mpeg3video_delete(mpeg3video_t *video)
+{
+ if(video->decoder_initted)
+ {
+ mpeg3video_deletedecoder(video);
+ }
+ mpeg3video_delete_struct(video);
+ return 0;
+}
+
+int mpeg3video_set_cpus(mpeg3video_t *video, int cpus)
+{
+ return 0;
+}
+
+int mpeg3video_set_mmx(mpeg3video_t *video, int use_mmx)
+{
+ video->have_mmx = use_mmx;
+ mpeg3video_init_scantables(video);
+ return 0;
+}
+
+int mpeg3video_seek_percentage(mpeg3video_t *video, double percentage)
+{
+ video->percentage_seek = percentage;
+ return 0;
+}
+
+int mpeg3video_previous_frame(mpeg3video_t *video)
+{
+ if(mpeg3bits_tell_percentage(video->vstream) <= 0) return 1;
+ mpeg3bits_start_reverse(video->vstream);
+ mpeg3video_prev_code(video->vstream, MPEG3_PICTURE_START_CODE);
+ mpeg3bits_getbits_reverse(video->vstream, 32);
+
+ if(mpeg3bits_bof(video->vstream)) mpeg3bits_seek_percentage(video->vstream, 0);
+ mpeg3bits_start_forward(video->vstream);
+ video->repeat_count = 0;
+ return 0;
+}
+
+int mpeg3video_seek_frame(mpeg3video_t *video, long frame)
+{
+ video->frame_seek = frame;
+ return 0;
+}
+
+/* Read all the way up to and including the next picture start code */
+int mpeg3video_read_raw(mpeg3video_t *video, unsigned char *output, long *size, long max_size)
+{
+ unsigned MPEG3_INT32 code = 0;
+ mpeg3_bits_t *vstream = video->vstream;
+
+ *size = 0;
+ while(code != MPEG3_PICTURE_START_CODE &&
+ code != MPEG3_SEQUENCE_END_CODE &&
+ *size < max_size &&
+ !mpeg3bits_eof(vstream))
+ {
+ code <<= 8;
+ *output = mpeg3bits_getbyte_noptr(vstream);
+ code |= *output++;
+ (*size)++;
+ }
+ return mpeg3bits_eof(vstream);
+}
+
+int mpeg3video_read_frame(mpeg3video_t *video,
+ long frame_number,
+ unsigned char **output_rows,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h,
+ int out_w,
+ int out_h,
+ int color_model)
+{
+ int result = 0;
+
+ video->want_yvu = 0;
+ video->output_rows = output_rows;
+ video->color_model = color_model;
+
+/* Get scaling tables */
+ if(video->out_w != out_w || video->out_h != out_h ||
+ video->in_w != in_w || video->in_h != in_h ||
+ video->in_x != in_x || video->in_y != in_y)
+ {
+ if(video->x_table)
+ {
+ free(video->x_table);
+ free(video->y_table);
+ video->x_table = 0;
+ video->y_table = 0;
+ }
+ }
+
+ video->out_w = out_w;
+ video->out_h = out_h;
+ video->in_w = in_w;
+ video->in_h = in_h;
+ video->in_x = in_x;
+ video->in_y = in_y;
+
+ if(!video->x_table)
+ {
+ video->x_table = mpeg3video_get_scaletable(video->in_w, video->out_w);
+ video->y_table = mpeg3video_get_scaletable(video->in_h, video->out_h);
+ }
+
+ mpeg3video_get_firstframe(video);
+
+ if(!result) result = mpeg3video_seek(video);
+
+ if(!result) result = mpeg3video_read_frame_backend(video, 0);
+
+ if(video->output_src) mpeg3video_present_frame(video);
+
+ video->percentage_seek = -1;
+ return result;
+}
+
+int mpeg3video_read_yuvframe(mpeg3video_t *video,
+ long frame_number,
+ char *y_output,
+ char *u_output,
+ char *v_output,
+ int in_x,
+ int in_y,
+ int in_w,
+ int in_h)
+{
+ int result = 0;
+
+ video->want_yvu = 1;
+ video->y_output = y_output;
+ video->u_output = u_output;
+ video->v_output = v_output;
+ video->in_x = in_x;
+ video->in_y = in_y;
+ video->in_w = in_w;
+ video->in_h = in_h;
+
+ mpeg3video_get_firstframe(video);
+
+ if(!result) result = mpeg3video_seek(video);
+
+ if(!result) result = mpeg3video_read_frame_backend(video, 0);
+
+ if(video->output_src) mpeg3video_present_frame(video);
+
+ video->want_yvu = 0;
+ video->percentage_seek = -1;
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/mpeg3video.h b/core/multimedia/opieplayer/libmpeg3/video/mpeg3video.h
new file mode 100644
index 0000000..2db62b0
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/mpeg3video.h
@@ -0,0 +1,180 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEGVIDEO_H
+#define MPEGVIDEO_H
+
+#include "../bitstream.h"
+#include "../mpeg3private.inc"
+#include "idct.h"
+#include "slice.h"
+#include "../timecode.h"
+
+/* zig-zag scan */
+extern unsigned char mpeg3_zig_zag_scan_nommx[64];
+extern unsigned char mpeg3_zig_zag_scan_mmx[64];
+
+/* alternate scan */
+extern unsigned char mpeg3_alternate_scan_nommx[64];
+extern unsigned char mpeg3_alternate_scan_mmx[64];
+
+/* default intra quantization matrix */
+extern unsigned char mpeg3_default_intra_quantizer_matrix[64];
+
+/* Frame rate table must agree with the one in the encoder */
+extern double mpeg3_frame_rate_table[16];
+
+/* non-linear quantization coefficient table */
+extern unsigned char mpeg3_non_linear_mquant_table[32];
+
+#define CHROMA420 1 /* chroma_format */
+#define CHROMA422 2
+#define CHROMA444 3
+
+#define TOP_FIELD 1 /* picture structure */
+#define BOTTOM_FIELD 2
+#define FRAME_PICTURE 3
+
+#define SEQ_ID 1 /* extension start code IDs */
+#define DISP_ID 2
+#define QUANT_ID 3
+#define SEQSCAL_ID 5
+#define PANSCAN_ID 7
+#define CODING_ID 8
+#define SPATSCAL_ID 9
+#define TEMPSCAL_ID 10
+
+#define ERROR (-1)
+
+#define SC_NONE 0 /* scalable_mode */
+#define SC_DP 1
+#define SC_SPAT 2
+#define SC_SNR 3
+#define SC_TEMP 4
+
+#define I_TYPE 1 /* picture coding type */
+#define P_TYPE 2
+#define B_TYPE 3
+#define D_TYPE 4
+
+#define MB_INTRA 1 /* macroblock type */
+#define MB_PATTERN 2
+#define MB_BACKWARD 4
+#define MB_FORWARD 8
+#define MB_QUANT 16
+#define MB_WEIGHT 32
+#define MB_CLASS4 64
+
+#define MC_FIELD 1 /* motion_type */
+#define MC_FRAME 2
+#define MC_16X8 2
+#define MC_DMV 3
+
+#define MV_FIELD 0 /* mv_format */
+#define MV_FRAME 1
+
+#define CLIP(x) ((x) >= 0 ? ((x) < 255 ? (x) : 255) : 0)
+
+/* Statically allocate as little as possible so a fake video struct */
+/* can be used for reading the GOP headers. */
+
+struct mpeg3video_rec
+{
+ struct mpeg3_rec* file;
+ struct mpeg3_vtrack_rec* track;
+
+/* ================================= Seeking variables ========================= */
+ mpeg3_bits_t *vstream;
+ int decoder_initted;
+ unsigned char **output_rows; /* Output frame buffer supplied by user */
+ int in_x, in_y, in_w, in_h, out_w, out_h; /* Output dimensions */
+ int *x_table, *y_table; /* Location of every output pixel in the input */
+ int color_model;
+ int want_yvu; /* Want to return a YUV frame */
+ char *y_output, *u_output, *v_output; /* Output pointers for a YUV frame */
+
+ mpeg3_slice_t slice_decoders[MPEG3_MAX_CPUS]; /* One slice decoder for every CPU */
+ int total_slice_decoders; /* Total slice decoders in use */
+ mpeg3_slice_buffer_t slice_buffers[MPEG3_MAX_CPUS]; /* Buffers for holding the slice data */
+ int total_slice_buffers; /* Total buffers in the array to be decompressed */
+ int slice_buffers_initialized; /* Total buffers initialized in the array */
+ pthread_mutex_t slice_lock; /* Lock slice array while getting the next buffer */
+ pthread_mutex_t test_lock;
+
+ int blockreadsize;
+ long maxframe; /* Max value of frame num to read */
+ double percentage_seek; /* Perform a percentage seek before the next frame is read */
+ int frame_seek; /* Perform a frame seek before the next frame is read */
+ long framenum; /* Number of the next frame to be decoded */
+ long last_number; /* Last framenum rendered */
+ int found_seqhdr;
+ long bitrate;
+ mpeg3_timecode_t gop_timecode; /* Timecode for the last GOP header read. */
+
+/* These are only available from elementary streams. */
+ long frames_per_gop; /* Frames per GOP after the first GOP. */
+ long first_gop_frames; /* Frames in the first GOP. */
+ long first_frame; /* Number of first frame stored in timecode */
+ long last_frame; /* Last frame in file */
+
+/* ================================= Compression variables ===================== */
+/* Malloced frame buffers. 2 refframes are swapped in and out. */
+/* while only 1 auxframe is used. */
+ unsigned char *yuv_buffer[5]; /* Make YVU buffers contiguous for all frames */
+ unsigned char *oldrefframe[3], *refframe[3], *auxframe[3];
+ unsigned char *llframe0[3], *llframe1[3];
+ unsigned char *mpeg3_zigzag_scan_table;
+ unsigned char *mpeg3_alternate_scan_table;
+// Source for the next frame presentation
+ unsigned char **output_src;
+/* Pointers to frame buffers. */
+ unsigned char *newframe[3];
+ int horizontal_size, vertical_size, mb_width, mb_height;
+ int coded_picture_width, coded_picture_height;
+ int chroma_format, chrom_width, chrom_height, blk_cnt;
+ int pict_type;
+ int forw_r_size, back_r_size, full_forw, full_back;
+ int prog_seq, prog_frame;
+ int h_forw_r_size, v_forw_r_size, h_back_r_size, v_back_r_size;
+ int dc_prec, pict_struct, topfirst, frame_pred_dct, conceal_mv;
+ int intravlc;
+ int repeatfirst;
+ int repeat_count; /* Number of times to repeat the current frame * 100 since floating point is impossible in MMX */
+ int current_repeat; /* Number of times the current frame has been repeated * 100 */
+ int secondfield;
+ int skip_bframes;
+ int stwc_table_index, llw, llh, hm, hn, vm, vn;
+ int lltempref, llx0, lly0, llprog_frame, llfieldsel;
+ int matrix_coefficients;
+ int framerate_code;
+ float frame_rate;
+ long *cr_to_r, *cr_to_g, *cb_to_g, *cb_to_b;
+ long *cr_to_r_ptr, *cr_to_g_ptr, *cb_to_g_ptr, *cb_to_b_ptr;
+ int have_mmx;
+ int intra_quantizer_matrix[64], non_intra_quantizer_matrix[64];
+ int chroma_intra_quantizer_matrix[64], chroma_non_intra_quantizer_matrix[64];
+ int mpeg2;
+ int qscale_type, altscan; /* picture coding extension */
+ int pict_scal; /* picture spatial scalable extension */
+ int scalable_mode; /* sequence scalable extension */
+};
+
+typedef struct mpeg3video_rec mpeg3video_t;
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/video/mpeg3videoprotos.h b/core/multimedia/opieplayer/libmpeg3/video/mpeg3videoprotos.h
new file mode 100644
index 0000000..e48d6cd
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/mpeg3videoprotos.h
@@ -0,0 +1,26 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEG3VIDEOPROTOS_H
+#define MPEG3VIDEOPROTOS_H
+
+void mpeg3video_idct_conversion(short* block);
+unsigned int mpeg3slice_showbits(mpeg3_slice_buffer_t *slice_buffer, int bits);
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/video/output.c b/core/multimedia/opieplayer/libmpeg3/video/output.c
new file mode 100644
index 0000000..919a0ff
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/output.c
@@ -0,0 +1,993 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+#include <string.h>
+
+static LONGLONG mpeg3_MMX_0 = 0L;
+static unsigned long mpeg3_MMX_10w[] = {0x00100010, 0x00100010}; /*dd 00010 0010h, 000100010h */
+static unsigned long mpeg3_MMX_80w[] = {0x00800080, 0x00800080}; /*dd 00080 0080h, 000800080h */
+
+static unsigned long mpeg3_MMX_00FFw[] = {0x00ff00ff, 0x00ff00ff}; /*dd 000FF 00FFh, 000FF00FFh */
+
+static unsigned short mpeg3_MMX_Ublucoeff[] = {0x81, 0x81, 0x81, 0x81}; /*dd 00081 0081h, 000810081h */
+static unsigned short mpeg3_MMX_Vredcoeff[] = {0x66, 0x66, 0x66, 0x66}; /*dd 00066 0066h, 000660066h */
+
+static unsigned short mpeg3_MMX_Ugrncoeff[] = {0xffe8, 0xffe8, 0xffe8, 0xffe8}; /*dd 0FFE7 FFE7h, 0FFE7FFE7h */
+static unsigned short mpeg3_MMX_Vgrncoeff[] = {0xffcd, 0xffcd, 0xffcd, 0xffcd}; /*dd 0FFCC FFCCh, 0FFCCFFCCh */
+
+static unsigned short mpeg3_MMX_Ycoeff[] = {0x4a, 0x4a, 0x4a, 0x4a}; /*dd 0004A 004Ah, 0004A004Ah */
+
+static unsigned short mpeg3_MMX_redmask[] = {0xf800, 0xf800, 0xf800, 0xf800}; /*dd 07c00 7c00h, 07c007c00h */
+
+static unsigned short mpeg3_MMX_grnmask[] = {0x7e0, 0x7e0, 0x7e0, 0x7e0}; /*dd 003e0 03e0h, 003e003e0h */
+
+static unsigned char mpeg3_601_to_rgb[256];
+
+/* Algorithm */
+/* r = (int)(*y + 1.371 * (*cr - 128)); */
+/* g = (int)(*y - 0.698 * (*cr - 128) - 0.336 * (*cb - 128)); */
+/* b = (int)(*y + 1.732 * (*cb - 128)); */
+
+#ifdef HAVE_MMX
+inline void mpeg3video_rgb16_mmx(unsigned char *lum,
+ unsigned char *cr,
+ unsigned char *cb,
+ unsigned char *out,
+ int rows,
+ int cols,
+ int mod)
+{
+ unsigned short *row1;
+ int x;
+ unsigned char *y;
+ int col1;
+
+ row1 = (unsigned short *)out;
+ col1 = cols + mod;
+ mod += cols + mod;
+ mod *= 2;
+ y = lum + cols * rows;
+ x = 0;
+
+ __asm__ __volatile__(
+ ".align 8\n"
+ "1:\n"
+ "movd (%1), %%mm0\n" /* 4 Cb 0 0 0 0 u3 u2 u1 u0 */
+ "pxor %%mm7, %%mm7\n"
+ "movd (%0), %%mm1\n" /* 4 Cr 0 0 0 0 v3 v2 v1 v0 */
+ "punpcklbw %%mm7, %%mm0\n" /* 4 W cb 0 u3 0 u2 0 u1 0 u0 */
+ "punpcklbw %%mm7, %%mm1\n" /* 4 W cr 0 v3 0 v2 0 v1 0 v0 */
+
+ "psubw mpeg3_MMX_80w, %%mm0\n"
+ "psubw mpeg3_MMX_80w, %%mm1\n"
+ "movq %%mm0, %%mm2\n" /* Cb 0 u3 0 u2 0 u1 0 u0 */
+ "movq %%mm1, %%mm3\n" /* Cr */
+ "pmullw mpeg3_MMX_Ugrncoeff, %%mm2\n" /* Cb2green 0 R3 0 R2 0 R1 0 R0 */
+ "movq (%2), %%mm6\n" /* L1 l7 L6 L5 L4 L3 L2 L1 L0 */
+ "pmullw mpeg3_MMX_Ublucoeff, %%mm0\n" /* Cb2blue */
+ "pand mpeg3_MMX_00FFw, %%mm6\n" /* L1 00 L6 00 L4 00 L2 00 L0 */
+ "pmullw mpeg3_MMX_Vgrncoeff, %%mm3\n" /* Cr2green */
+ "movq (%2), %%mm7\n" /* L2 */
+ "pmullw mpeg3_MMX_Vredcoeff, %%mm1\n" /* Cr2red */
+ "psrlw $8, %%mm7\n" /* L2 00 L7 00 L5 00 L3 00 L1 */
+ "pmullw mpeg3_MMX_Ycoeff, %%mm6\n" /* lum1 */
+ "paddw %%mm3, %%mm2\n" /* Cb2green + Cr2green == green */
+ "pmullw mpeg3_MMX_Ycoeff, %%mm7\n" /* lum2 */
+
+ "movq %%mm6, %%mm4\n" /* lum1 */
+ "paddw %%mm0, %%mm6\n" /* lum1 +blue 00 B6 00 B4 00 B2 00 B0 */
+ "movq %%mm4, %%mm5\n" /* lum1 */
+ "paddw %%mm1, %%mm4\n" /* lum1 +red 00 R6 00 R4 00 R2 00 R0 */
+ "paddw %%mm2, %%mm5\n" /* lum1 +green 00 G6 00 G4 00 G2 00 G0 */
+ "psraw $6, %%mm4\n" /* R1 0 .. 64 */
+ "movq %%mm7, %%mm3\n" /* lum2 00 L7 00 L5 00 L3 00 L1 */
+ "psraw $6, %%mm5\n" /* G1 - .. + */
+ "paddw %%mm0, %%mm7\n" /* Lum2 +blue 00 B7 00 B5 00 B3 00 B1 */
+ "psraw $6, %%mm6\n" /* B1 0 .. 64 */
+ "packuswb %%mm4, %%mm4\n" /* R1 R1 */
+ "packuswb %%mm5, %%mm5\n" /* G1 G1 */
+ "packuswb %%mm6, %%mm6\n" /* B1 B1 */
+ "punpcklbw %%mm4, %%mm4\n"
+ "punpcklbw %%mm5, %%mm5\n"
+
+ "pand mpeg3_MMX_redmask, %%mm4\n"
+ "psllw $3, %%mm5\n" /* GREEN 1 */
+ "punpcklbw %%mm6, %%mm6\n"
+ "pand mpeg3_MMX_grnmask, %%mm5\n"
+ "pand mpeg3_MMX_redmask, %%mm6\n"
+ "por %%mm5, %%mm4\n" /* */
+ "psrlw $11, %%mm6\n" /* BLUE 1 */
+ "movq %%mm3, %%mm5\n" /* lum2 */
+ "paddw %%mm1, %%mm3\n" /* lum2 +red 00 R7 00 R5 00 R3 00 R1 */
+ "paddw %%mm2, %%mm5\n" /* lum2 +green 00 G7 00 G5 00 G3 00 G1 */
+ "psraw $6, %%mm3\n" /* R2 */
+ "por %%mm6, %%mm4\n" /* MM4 */
+ "psraw $6, %%mm5\n" /* G2 */
+ "movq (%2, %3), %%mm6\n" /* L3 */
+ "psraw $6, %%mm7\n"
+ "packuswb %%mm3, %%mm3\n"
+ "packuswb %%mm5, %%mm5\n"
+ "packuswb %%mm7, %%mm7\n"
+ "pand mpeg3_MMX_00FFw, %%mm6\n" /* L3 */
+ "punpcklbw %%mm3, %%mm3\n"
+ "punpcklbw %%mm5, %%mm5\n"
+ "pmullw mpeg3_MMX_Ycoeff, %%mm6\n" /* lum3 */
+ "punpcklbw %%mm7, %%mm7\n"
+ "psllw $3, %%mm5\n" /* GREEN 2 */
+ "pand mpeg3_MMX_redmask, %%mm7\n"
+ "pand mpeg3_MMX_redmask, %%mm3\n"
+ "psrlw $11, %%mm7\n" /* BLUE 2 */
+ "pand mpeg3_MMX_grnmask, %%mm5\n"
+ "por %%mm7, %%mm3\n"
+ "movq (%2,%3), %%mm7\n" /* L4 */
+ "por %%mm5, %%mm3\n" /* */
+ "psrlw $8, %%mm7\n" /* L4 */
+ "movq %%mm4, %%mm5\n"
+ "punpcklwd %%mm3, %%mm4\n"
+ "pmullw mpeg3_MMX_Ycoeff, %%mm7\n" /* lum4 */
+ "punpckhwd %%mm3, %%mm5\n"
+
+ "movq %%mm4, (%4)\n"
+ "movq %%mm5, 8(%4)\n"
+
+ "movq %%mm6, %%mm4\n" /* Lum3 */
+ "paddw %%mm0, %%mm6\n" /* Lum3 +blue */
+
+ "movq %%mm4, %%mm5\n" /* Lum3 */
+ "paddw %%mm1, %%mm4\n" /* Lum3 +red */
+ "paddw %%mm2, %%mm5\n" /* Lum3 +green */
+ "psraw $6, %%mm4\n"
+ "movq %%mm7, %%mm3\n" /* Lum4 */
+ "psraw $6, %%mm5\n"
+ "paddw %%mm0, %%mm7\n" /* Lum4 +blue */
+ "psraw $6, %%mm6\n" /* Lum3 +blue */
+ "movq %%mm3, %%mm0\n" /* Lum4 */
+ "packuswb %%mm4, %%mm4\n"
+ "paddw %%mm1, %%mm3\n" /* Lum4 +red */
+ "packuswb %%mm5, %%mm5\n"
+ "paddw %%mm2, %%mm0\n" /* Lum4 +green */
+ "packuswb %%mm6, %%mm6\n"
+ "punpcklbw %%mm4, %%mm4\n"
+ "punpcklbw %%mm5, %%mm5\n"
+ "punpcklbw %%mm6, %%mm6\n"
+ "psllw $3, %%mm5\n" /* GREEN 3 */
+ "pand mpeg3_MMX_redmask, %%mm4\n"
+ "psraw $6, %%mm3\n" /* psr 6 */
+ "psraw $6, %%mm0\n"
+ "pand mpeg3_MMX_redmask, %%mm6\n" /* BLUE */
+ "pand mpeg3_MMX_grnmask, %%mm5\n"
+ "psrlw $11, %%mm6\n" /* BLUE 3 */
+ "por %%mm5, %%mm4\n"
+ "psraw $6, %%mm7\n"
+ "por %%mm6, %%mm4\n"
+ "packuswb %%mm3, %%mm3\n"
+ "packuswb %%mm0, %%mm0\n"
+ "packuswb %%mm7, %%mm7\n"
+ "punpcklbw %%mm3, %%mm3\n"
+ "punpcklbw %%mm0, %%mm0\n"
+ "punpcklbw %%mm7, %%mm7\n"
+ "pand mpeg3_MMX_redmask, %%mm3\n"
+ "pand mpeg3_MMX_redmask, %%mm7\n" /* BLUE */
+ "psllw $3, %%mm0\n" /* GREEN 4 */
+ "psrlw $11, %%mm7\n"
+ "pand mpeg3_MMX_grnmask, %%mm0\n"
+ "por %%mm7, %%mm3\n"
+ "addl $8, %6\n"
+ "por %%mm0, %%mm3\n"
+
+ "movq %%mm4, %%mm5\n"
+
+ "punpcklwd %%mm3, %%mm4\n"
+ "punpckhwd %%mm3, %%mm5\n"
+
+ "movq %%mm4, (%4,%5,2)\n"
+ "movq %%mm5, 8(%4,%5,2)\n"
+
+ "addl $8, %2\n"
+ "addl $4, %0\n"
+ "addl $4, %1\n"
+ "cmpl %3, %6\n"
+ "leal 16(%4), %4\n"
+ "jl 1b\n"
+ "addl %3, %2\n" /* lum += cols */
+ "addl %7, %4\n" /* row1 += mod */
+ "movl $0, %6\n"
+ "cmpl %8, %2\n"
+ "jl 1b\n"
+ : : "r" (cr),
+ "r" (cb),
+ "r" (lum),
+ "r" (cols),
+ "r" (row1) ,
+ "r" (col1),
+ "m" (x),
+ "m" (mod),
+ "m" (y)
+ );
+}
+
+static unsigned LONGLONG mpeg3_MMX_U_80 = 0x0000008000800000LL;
+static unsigned LONGLONG mpeg3_MMX_V_80 = 0x0000000000800080LL;
+static LONGLONG mpeg3_MMX_U_COEF = 0x00000058ffd30000LL;
+static LONGLONG mpeg3_MMX_V_COEF = 0x00000000ffea006fLL;
+static LONGLONG mpeg3_MMX_601_Y_COEF = 0x0000004800480048LL;
+static LONGLONG mpeg3_MMX_601_Y_DIFF = 0x0000000000000010LL;
+
+inline void mpeg3_bgra32_mmx(unsigned long y,
+ unsigned long u,
+ unsigned long v,
+ unsigned long *output)
+{
+asm("
+/* Output will be 0x00rrggbb with the 00 trailing so this can also be used */
+/* for bgr24. */
+ movd (%0), %%mm0; /* Load y 0x00000000000000yy */
+ movd (%1), %%mm1; /* Load u 0x00000000000000cr */
+ movq %%mm0, %%mm3; /* Copy y to temp */
+ psllq $16, %%mm1; /* Shift u 0x0000000000cr0000 */
+ movd (%2), %%mm2; /* Load v 0x00000000000000cb */
+ psllq $16, %%mm3; /* Shift y */
+ movq %%mm1, %%mm4; /* Copy u to temp */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x0000000000yy00yy */
+ psllq $16, %%mm4; /* Shift u */
+ movq %%mm2, %%mm5; /* Copy v to temp */
+ psllq $16, %%mm3; /* Shift y */
+ por %%mm4, %%mm1; /* Overlay new u byte 0x000000cr00cr0000 */
+ psllq $16, %%mm5; /* Shift v */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x000000yy00yy00yy */
+ por %%mm5, %%mm2; /* Overlay new v byte 0x0000000000cb00cb */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x000000uu00uu0000 mm2: 0x0000000000vv00vv */
+ psubw mpeg3_MMX_U_80, %%mm1; /* Subtract 128 from u 0x000000uu00uu0000 */
+ pmullw mpeg3_MMX_U_COEF, %%mm1; /* Multiply u coeffs 0x0000uuuuuuuu0000 */
+ psllw $6, %%mm0; /* Shift y coeffs 0x0000yyy0yyy0yyy0 */
+ psubw mpeg3_MMX_V_80, %%mm2; /* Subtract 128 from v 0x0000000000cb00cb */
+ pmullw mpeg3_MMX_V_COEF, %%mm2; /* Multiply v coeffs 0x0000crcrcrcrcrcr */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x0000uuuuuuuu0000 mm2: 0x00000000vvvvvvvv */
+ paddsw %%mm1, %%mm0; /* Add u to result */
+ paddsw %%mm2, %%mm0; /* Add v to result 0x0000rrrrggggbbbb */
+ psraw $6, %%mm0; /* Demote precision */
+ packuswb %%mm0, %%mm0; /* Pack into ARGB 0x0000000000rrggbb */
+ movd %%mm0, (%3); /* Store output */
+ "
+:
+: "r" (&y), "r" (&u), "r" (&v), "r" (output));
+}
+
+inline void mpeg3_601_bgra32_mmx(unsigned long y,
+ unsigned long u,
+ unsigned long v,
+ unsigned long *output)
+{
+asm("
+/* Output will be 0x00rrggbb with the 00 trailing so this can also be used */
+/* for bgr24. */
+ movd (%0), %%mm0; /* Load y 0x00000000000000yy */
+ psubsw mpeg3_MMX_601_Y_DIFF, %%mm0; /* Subtract 16 from y */
+ movd (%1), %%mm1; /* Load u 0x00000000000000cr */
+ movq %%mm0, %%mm3; /* Copy y to temp */
+ psllq $16, %%mm1; /* Shift u 0x0000000000cr0000 */
+ movd (%2), %%mm2; /* Load v 0x00000000000000cb */
+ psllq $16, %%mm3; /* Shift y */
+ movq %%mm1, %%mm4; /* Copy u to temp */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x0000000000yy00yy */
+ psllq $16, %%mm4; /* Shift u */
+ movq %%mm2, %%mm5; /* Copy v to temp */
+ psllq $16, %%mm3; /* Shift y */
+ por %%mm4, %%mm1; /* Overlay new u byte 0x000000cr00cr0000 */
+ psllq $16, %%mm5; /* Shift v */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x000000yy00yy00yy */
+ por %%mm5, %%mm2; /* Overlay new v byte 0x0000000000cb00cb */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x000000uu00uu0000 mm2: 0x0000000000vv00vv */
+ pmullw mpeg3_MMX_601_Y_COEF, %%mm0; /* Scale and shift y coeffs */
+ psubw mpeg3_MMX_U_80, %%mm1; /* Subtract 128 from u 0x000000uu00uu0000 */
+ pmullw mpeg3_MMX_U_COEF, %%mm1; /* Multiply u coeffs 0x0000uuuuuuuu0000 */
+ psubw mpeg3_MMX_V_80, %%mm2; /* Subtract 128 from v 0x0000000000cb00cb */
+ pmullw mpeg3_MMX_V_COEF, %%mm2; /* Multiply v coeffs 0x0000crcrcrcrcrcr */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x0000uuuuuuuu0000 mm2: 0x00000000vvvvvvvv */
+ paddsw %%mm1, %%mm0; /* Add u to result */
+ paddsw %%mm2, %%mm0; /* Add v to result 0x0000rrrrggggbbbb */
+ psraw $6, %%mm0; /* Demote precision */
+ packuswb %%mm0, %%mm0; /* Pack into ARGB 0x0000000000rrggbb */
+ movd %%mm0, (%3); /* Store output */
+ "
+:
+: "r" (&y), "r" (&u), "r" (&v), "r" (output));
+}
+
+static unsigned LONGLONG mpeg3_MMX_U_80_RGB = 0x0000000000800080LL;
+static unsigned LONGLONG mpeg3_MMX_V_80_RGB = 0x0000008000800000LL;
+static LONGLONG mpeg3_MMX_U_COEF_RGB = 0x00000000ffd30058LL;
+static LONGLONG mpeg3_MMX_V_COEF_RGB = 0x0000006fffea0000LL;
+
+inline void mpeg3_rgba32_mmx(unsigned long y,
+ unsigned long u,
+ unsigned long v,
+ unsigned long *output)
+{
+asm("
+/* Output will be 0x00bbggrr with the 00 trailing so this can also be used */
+/* for rgb24. */
+ movd (%0), %%mm0; /* Load y 0x00000000000000yy */
+ movd (%1), %%mm1; /* Load v 0x00000000000000vv */
+ movq %%mm0, %%mm3; /* Copy y to temp */
+ psllq $16, %%mm1; /* Shift v 0x0000000000vv0000 */
+ movd (%2), %%mm2; /* Load u 0x00000000000000uu */
+ psllq $16, %%mm3; /* Shift y */
+ movq %%mm1, %%mm4; /* Copy v to temp */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x0000000000yy00yy */
+ psllq $16, %%mm4; /* Shift v */
+ movq %%mm2, %%mm5; /* Copy u to temp */
+ psllq $16, %%mm3; /* Shift y */
+ por %%mm4, %%mm1; /* Overlay new v byte 0x000000vv00vv0000 */
+ psllq $16, %%mm5; /* Shift u */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x000000yy00yy00yy */
+ por %%mm5, %%mm2; /* Overlay new u byte 0x0000000000uu00uu */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x000000vv00vv0000 mm2: 0x0000000000uu00uu */
+ psubw mpeg3_MMX_V_80_RGB, %%mm1; /* Subtract 128 from v 0x000000vv00vv0000 */
+ pmullw mpeg3_MMX_V_COEF_RGB, %%mm1; /* Multiply v coeffs 0x0000vvvvvvvv0000 */
+ psllw $6, %%mm0; /* Shift y coeffs 0x0000yyy0yyy0yyy0 */
+ psubw mpeg3_MMX_U_80_RGB, %%mm2; /* Subtract 128 from u 0x0000000000uu00uu */
+ pmullw mpeg3_MMX_U_COEF_RGB, %%mm2; /* Multiply u coeffs 0x0000uuuuuuuuuuuu */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x0000vvvvvvvv0000 mm2: 0x00000000uuuuuuuu */
+ paddsw %%mm1, %%mm0; /* Add v to result */
+ paddsw %%mm2, %%mm0; /* Add u to result 0x0000bbbbggggrrrr */
+ psraw $6, %%mm0; /* Demote precision */
+ packuswb %%mm0, %%mm0; /* Pack into RGBA 0x0000000000bbggrr */
+ movd %%mm0, (%3); /* Store output */
+ "
+:
+: "r" (&y), "r" (&v), "r" (&u), "r" (output));
+}
+
+inline void mpeg3_601_rgba32_mmx(unsigned long y,
+ unsigned long u,
+ unsigned long v,
+ unsigned long *output)
+{
+asm("
+/* Output will be 0x00bbggrr with the 00 trailing so this can also be used */
+/* for rgb24. */
+ movd (%0), %%mm0; /* Load y 0x00000000000000yy */
+ psubsw mpeg3_MMX_601_Y_DIFF, %%mm0; /* Subtract 16 from y */
+ movd (%1), %%mm1; /* Load v 0x00000000000000vv */
+ movq %%mm0, %%mm3; /* Copy y to temp */
+ psllq $16, %%mm1; /* Shift v 0x0000000000vv0000 */
+ movd (%2), %%mm2; /* Load u 0x00000000000000uu */
+ psllq $16, %%mm3; /* Shift y */
+ movq %%mm1, %%mm4; /* Copy v to temp */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x0000000000yy00yy */
+ psllq $16, %%mm4; /* Shift v */
+ movq %%mm2, %%mm5; /* Copy u to temp */
+ psllq $16, %%mm3; /* Shift y */
+ por %%mm4, %%mm1; /* Overlay new v byte 0x000000vv00vv0000 */
+ psllq $16, %%mm5; /* Shift u */
+ por %%mm3, %%mm0; /* Overlay new y byte 0x000000yy00yy00yy */
+ por %%mm5, %%mm2; /* Overlay new u byte 0x0000000000uu00uu */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x000000vv00vv0000 mm2: 0x0000000000uu00uu */
+ pmullw mpeg3_MMX_601_Y_COEF, %%mm0; /* Scale y coeffs */
+ psubw mpeg3_MMX_V_80_RGB, %%mm1; /* Subtract 128 from v 0x000000vv00vv0000 */
+ pmullw mpeg3_MMX_V_COEF_RGB, %%mm1; /* Multiply v coeffs 0x0000vvvvvvvv0000 */
+ psubw mpeg3_MMX_U_80_RGB, %%mm2; /* Subtract 128 from u 0x0000000000uu00uu */
+ pmullw mpeg3_MMX_U_COEF_RGB, %%mm2; /* Multiply u coeffs 0x0000uuuuuuuuuuuu */
+
+/* mm0: 0x000000yy00yy00yy mm1: 0x0000vvvvvvvv0000 mm2: 0x00000000uuuuuuuu */
+ paddsw %%mm1, %%mm0; /* Add v to result */
+ paddsw %%mm2, %%mm0; /* Add u to result 0x0000bbbbggggrrrr */
+ psraw $6, %%mm0; /* Demote precision */
+ packuswb %%mm0, %%mm0; /* Pack into RGBA 0x0000000000bbggrr */
+ movd %%mm0, (%3); /* Store output */
+ "
+:
+: "r" (&y), "r" (&v), "r" (&u), "r" (output));
+}
+
+#endif
+
+#define DITHER_ROW_HEAD \
+ for(h = 0; h < video->out_h; h++) \
+ { \
+ y_in = &src[0][(video->y_table[h] + video->in_y) * video->coded_picture_width] + video->in_x; \
+ cb_in = &src[1][((video->y_table[h] + video->in_y) >> 1) * video->chrom_width] + (video->in_x >> 2); \
+ cr_in = &src[2][((video->y_table[h] + video->in_y) >> 1) * video->chrom_width] + (video->in_x >> 1); \
+ data = output_rows[h];
+
+#define DITHER_ROW_TAIL \
+ }
+
+#define DITHER_SCALE_HEAD \
+ for(w = 0; w < video->out_w; w++) \
+ { \
+ uv_subscript = video->x_table[w] / 2; \
+ y_l = y_in[video->x_table[w]]; \
+ y_l <<= 16; \
+ r_l = (y_l + video->cr_to_r[cr_in[uv_subscript]]) >> 16; \
+ g_l = (y_l + video->cr_to_g[cr_in[uv_subscript]] + video->cb_to_g[cb_in[uv_subscript]]) >> 16; \
+ b_l = (y_l + video->cb_to_b[cb_in[uv_subscript]]) >> 16;
+
+#define DITHER_SCALE_601_HEAD \
+ for(w = 0; w < video->out_w; w++) \
+ { \
+ uv_subscript = video->x_table[w] / 2; \
+ y_l = mpeg3_601_to_rgb[y_in[video->x_table[w]]]; \
+ y_l <<= 16; \
+ r_l = (y_l + video->cr_to_r[cr_in[uv_subscript]]) >> 16; \
+ g_l = (y_l + video->cr_to_g[cr_in[uv_subscript]] + video->cb_to_g[cb_in[uv_subscript]]) >> 16; \
+ b_l = (y_l + video->cb_to_b[cb_in[uv_subscript]]) >> 16;
+
+#define DITHER_SCALE_TAIL \
+ }
+
+#define DITHER_MMX_SCALE_HEAD \
+ for(w = 0; w < video->out_w; w++) \
+ { \
+ uv_subscript = video->x_table[w] / 2;
+
+#define DITHER_MMX_SCALE_TAIL \
+ data += step; \
+ }
+
+#define DITHER_MMX_HEAD \
+ for(w = 0; w < video->out_w; w += 2) \
+ {
+
+#define DITHER_MMX_TAIL \
+ data += step; \
+ cr_in++; \
+ cb_in++; \
+ }
+
+#define DITHER_HEAD \
+ for(w = 0; w < video->horizontal_size; w++) \
+ { \
+ y_l = *y_in++; \
+ y_l <<= 16; \
+ r_l = (y_l + video->cr_to_r[*cr_in]) >> 16; \
+ g_l = (y_l + video->cr_to_g[*cr_in] + video->cb_to_g[*cb_in]) >> 16; \
+ b_l = (y_l + video->cb_to_b[*cb_in]) >> 16;
+
+#define DITHER_601_HEAD \
+ for(w = 0; w < video->horizontal_size; w++) \
+ { \
+ y_l = mpeg3_601_to_rgb[*y_in++]; \
+ y_l <<= 16; \
+ r_l = (y_l + video->cr_to_r[*cr_in]) >> 16; \
+ g_l = (y_l + video->cr_to_g[*cr_in] + video->cb_to_g[*cb_in]) >> 16; \
+ b_l = (y_l + video->cb_to_b[*cb_in]) >> 16;
+
+#define DITHER_TAIL \
+ if(w & 1) \
+ { \
+ cr_in++; \
+ cb_in++; \
+ } \
+ }
+
+
+#define STORE_PIXEL_BGR888 \
+ *data++ = CLIP(b_l); \
+ *data++ = CLIP(g_l); \
+ *data++ = CLIP(r_l);
+
+#define STORE_PIXEL_BGRA8888 \
+ *data++ = CLIP(b_l); \
+ *data++ = CLIP(g_l); \
+ *data++ = CLIP(r_l); \
+ *data++ = 0;
+
+#define STORE_PIXEL_RGB565 \
+ *((unsigned short*)data)++ = \
+ ((CLIP(r_l) & 0xf8) << 8) | \
+ ((CLIP(g_l) & 0xfc) << 3) | \
+ ((CLIP(b_l) & 0xf8) >> 3);
+
+#define STORE_PIXEL_RGB888 \
+ *data++ = CLIP(r_l); \
+ *data++ = CLIP(g_l); \
+ *data++ = CLIP(b_l);
+
+#define STORE_PIXEL_RGBA8888 \
+ *data++ = CLIP(r_l); \
+ *data++ = CLIP(g_l); \
+ *data++ = CLIP(b_l); \
+ *data++ = 0;
+
+#define STORE_PIXEL_RGBA16161616 \
+ *data_s++ = CLIP(r_l); \
+ *data_s++ = CLIP(g_l); \
+ *data_s++ = CLIP(b_l); \
+ *data_s++ = 0;
+
+
+
+/* Only good for YUV 4:2:0 */
+int mpeg3video_ditherframe(mpeg3video_t *video, unsigned char **src, unsigned char **output_rows)
+{
+ int h = 0;
+ register unsigned char *y_in, *cb_in, *cr_in;
+ long y_l, r_l, b_l, g_l;
+ register unsigned char *data;
+ register int uv_subscript, step, w = -1;
+
+#ifdef HAVE_MMX
+/* =================================== MMX ===================================== */
+ if(video->have_mmx &&
+ video->out_w == video->horizontal_size &&
+ video->out_h == video->vertical_size &&
+ video->in_w == video->out_w &&
+ video->in_h == video->out_h &&
+ video->in_x == 0 &&
+ video->in_y == 0 &&
+ (video->color_model == MPEG3_RGB565 || video->color_model == MPEG3_601_RGB565))
+ {
+/* Unscaled 16 bit */
+ mpeg3video_rgb16_mmx(src[0],
+ src[2],
+ src[1],
+ output_rows[0],
+ video->out_h,
+ video->out_w,
+ (output_rows[1] - output_rows[0]) / 2 - video->out_w);
+ }
+ else
+ if(video->have_mmx &&
+ (video->color_model == MPEG3_BGRA8888 ||
+ video->color_model == MPEG3_BGR888 ||
+/* video->color_model == MPEG3_RGB888 || */
+ video->color_model == MPEG3_RGBA8888 ||
+ video->color_model == MPEG3_601_BGR888 ||
+ video->color_model == MPEG3_601_BGRA8888 ||
+ video->color_model == MPEG3_601_RGB888 ||
+ video->color_model == MPEG3_601_RGBA8888))
+ {
+/* Original MMX */
+ if(video->color_model == MPEG3_BGRA8888 ||
+ video->color_model == MPEG3_RGBA8888 ||
+ video->color_model == MPEG3_601_BGRA8888 ||
+ video->color_model == MPEG3_601_RGBA8888) step = 4;
+ else
+ if(video->color_model == MPEG3_BGR888 ||
+ video->color_model == MPEG3_RGB888 ||
+ video->color_model == MPEG3_601_BGR888 ||
+ video->color_model == MPEG3_601_RGB888) step = 3;
+
+ DITHER_ROW_HEAD
+/* Transfer row with scaling */
+ if(video->out_w != video->horizontal_size)
+ {
+ switch(video->color_model)
+ {
+ case MPEG3_BGRA8888:
+ case MPEG3_BGR888:
+ DITHER_MMX_SCALE_HEAD
+ mpeg3_bgra32_mmx(y_in[video->x_table[w]],
+ cr_in[uv_subscript],
+ cb_in[uv_subscript],
+ (unsigned long*)data);
+ DITHER_MMX_SCALE_TAIL
+ break;
+
+ case MPEG3_601_BGRA8888:
+ case MPEG3_601_BGR888:
+ DITHER_MMX_SCALE_HEAD
+ mpeg3_601_bgra32_mmx(y_in[video->x_table[w]],
+ cr_in[uv_subscript],
+ cb_in[uv_subscript],
+ (unsigned long*)data);
+ DITHER_MMX_SCALE_TAIL
+ break;
+
+ case MPEG3_RGBA8888:
+ case MPEG3_RGB888:
+ DITHER_MMX_SCALE_HEAD
+ mpeg3_rgba32_mmx(y_in[video->x_table[w]],
+ cr_in[uv_subscript],
+ cb_in[uv_subscript],
+ (unsigned long*)data);
+ DITHER_MMX_SCALE_TAIL
+ break;
+
+ case MPEG3_601_RGBA8888:
+ case MPEG3_601_RGB888:
+ DITHER_MMX_SCALE_HEAD
+ mpeg3_601_rgba32_mmx(y_in[video->x_table[w]],
+ cr_in[uv_subscript],
+ cb_in[uv_subscript],
+ (unsigned long*)data);
+ DITHER_MMX_SCALE_TAIL
+ break;
+ }
+ }
+ else
+/* Transfer row unscaled */
+ {
+ switch(video->color_model)
+ {
+/* MMX byte swap 24 and 32 bit */
+ case MPEG3_BGRA8888:
+ case MPEG3_BGR888:
+ DITHER_MMX_HEAD
+ mpeg3_bgra32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ data += step;
+ mpeg3_bgra32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ DITHER_MMX_TAIL
+ break;
+
+/* MMX 601 byte swap 24 and 32 bit */
+ case MPEG3_601_BGRA8888:
+ case MPEG3_601_BGR888:
+ DITHER_MMX_HEAD
+ mpeg3_601_bgra32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ data += step;
+ mpeg3_601_bgra32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ DITHER_MMX_TAIL
+ break;
+
+/* MMX 24 and 32 bit no byte swap */
+ case MPEG3_RGBA8888:
+ case MPEG3_RGB888:
+ DITHER_MMX_HEAD
+ mpeg3_rgba32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ data += step;
+ mpeg3_rgba32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ DITHER_MMX_TAIL
+ break;
+
+/* MMX 601 24 and 32 bit no byte swap */
+ case MPEG3_601_RGBA8888:
+ case MPEG3_601_RGB888:
+ DITHER_MMX_HEAD
+ mpeg3_601_rgba32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ data += step;
+ mpeg3_601_rgba32_mmx(*y_in++,
+ *cr_in,
+ *cb_in,
+ (unsigned long*)data);
+ DITHER_MMX_TAIL
+ break;
+ }
+ }
+ DITHER_ROW_TAIL
+ }
+ else
+#endif
+/* ================================== NO MMX ==================================== */
+ {
+ DITHER_ROW_HEAD
+/* Transfer row with scaling */
+ if(video->out_w != video->horizontal_size)
+ {
+ switch(video->color_model)
+ {
+ case MPEG3_BGR888:
+ DITHER_SCALE_HEAD
+ STORE_PIXEL_BGR888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_BGRA8888:
+ DITHER_SCALE_HEAD
+ STORE_PIXEL_BGRA8888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_RGB565:
+ DITHER_SCALE_HEAD
+ STORE_PIXEL_RGB565
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_RGB888:
+ DITHER_SCALE_HEAD
+ STORE_PIXEL_RGB888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_RGBA8888:
+ DITHER_SCALE_HEAD
+ STORE_PIXEL_RGBA8888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_601_BGR888:
+ DITHER_SCALE_601_HEAD
+ STORE_PIXEL_BGR888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_601_BGRA8888:
+ DITHER_SCALE_601_HEAD
+ STORE_PIXEL_BGRA8888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_601_RGB565:
+ DITHER_SCALE_601_HEAD
+ STORE_PIXEL_RGB565
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_601_RGB888:
+ DITHER_SCALE_601_HEAD
+ STORE_PIXEL_RGB888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_601_RGBA8888:
+ DITHER_SCALE_601_HEAD
+ STORE_PIXEL_RGBA8888
+ DITHER_SCALE_TAIL
+ break;
+ case MPEG3_RGBA16161616:
+ {
+ register unsigned short *data_s = (unsigned short*)data;
+ DITHER_SCALE_HEAD
+ STORE_PIXEL_RGBA16161616
+ DITHER_SCALE_TAIL
+ }
+ break;
+ }
+ }
+ else
+ {
+/* Transfer row unscaled */
+ switch(video->color_model)
+ {
+ case MPEG3_BGR888:
+ DITHER_HEAD
+ STORE_PIXEL_BGR888
+ DITHER_TAIL
+ break;
+ case MPEG3_BGRA8888:
+ DITHER_HEAD
+ STORE_PIXEL_BGRA8888
+ DITHER_TAIL
+ break;
+ case MPEG3_RGB565:
+ DITHER_HEAD
+ STORE_PIXEL_RGB565
+ DITHER_TAIL
+ break;
+ case MPEG3_RGB888:
+ DITHER_HEAD
+ STORE_PIXEL_RGB888
+ DITHER_TAIL
+ break;
+ case MPEG3_RGBA8888:
+ DITHER_HEAD
+ STORE_PIXEL_RGBA8888
+ DITHER_TAIL
+ break;
+ case MPEG3_601_BGR888:
+ DITHER_601_HEAD
+ STORE_PIXEL_BGR888
+ DITHER_TAIL
+ break;
+ case MPEG3_601_BGRA8888:
+ DITHER_601_HEAD
+ STORE_PIXEL_RGB565
+ DITHER_TAIL
+ break;
+ case MPEG3_601_RGB565:
+ DITHER_601_HEAD
+ STORE_PIXEL_RGB565
+ DITHER_TAIL
+ break;
+ case MPEG3_601_RGB888:
+ DITHER_601_HEAD
+ STORE_PIXEL_RGB888
+ DITHER_TAIL
+ break;
+ case MPEG3_601_RGBA8888:
+ DITHER_601_HEAD
+ STORE_PIXEL_RGBA8888
+ DITHER_TAIL
+ break;
+ case MPEG3_RGBA16161616:
+ {
+ register unsigned short *data_s = (unsigned short*)data;
+ DITHER_HEAD
+ STORE_PIXEL_RGBA16161616
+ DITHER_TAIL
+ }
+ break;
+ }
+ }
+ DITHER_ROW_TAIL
+ } /* End of non-MMX */
+
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ __asm__ __volatile__ ("emms");
+#endif
+ return 0;
+}
+
+int mpeg3video_ditherframe444(mpeg3video_t *video, unsigned char *src[])
+{
+ return 0;
+}
+
+int mpeg3video_dithertop(mpeg3video_t *video, unsigned char *src[])
+{
+ return mpeg3video_ditherframe(video, src, video->output_rows);
+}
+
+int mpeg3video_dithertop444(mpeg3video_t *video, unsigned char *src[])
+{
+ return 0;
+}
+
+int mpeg3video_ditherbot(mpeg3video_t *video, unsigned char *src[])
+{
+ return 0;
+}
+
+int mpeg3video_ditherbot444(mpeg3video_t *video, unsigned char *src[])
+{
+ return 0;
+}
+
+void memcpy_fast(unsigned char *output, unsigned char *input, long len)
+{
+ int i, len2;
+/* 8 byte alignment */
+/*
+ * if(!((long)input & 0x7))
+ * {
+ * len2 = len >> 4;
+ * for(i = 0; i < len2; )
+ * {
+ * ((MPEG3_INT64*)output)[i] = ((MPEG3_INT64*)input)[i];
+ * i++;
+ * ((MPEG3_INT64*)output)[i] = ((MPEG3_INT64*)input)[i];
+ * i++;
+ * }
+ *
+ * for(i *= 16; i < len; i++)
+ * {
+ * output[i] = input[i];
+ * }
+ * }
+ * else
+ */
+ memcpy(output, input, len);
+}
+
+int mpeg3video_init_output()
+{
+ int i, value;
+ for(i = 0; i < 256; i++)
+ {
+ value = (int)(1.1644 * i - 255 * 0.0627 + 0.5);
+ if(value < 0) value = 0;
+ else
+ if(value > 255) value = 255;
+ mpeg3_601_to_rgb[i] = value;
+ }
+ return 0;
+}
+
+int mpeg3video_present_frame(mpeg3video_t *video)
+{
+ int i, j, k, l;
+ unsigned char **src = video->output_src;
+
+/* Copy YUV buffers */
+ if(video->want_yvu)
+ {
+ long size[2];
+ long offset[2];
+
+/* Drop a frame */
+ if(!video->y_output) return 0;
+
+/* Copy a frame */
+ if(video->in_x == 0 &&
+ video->in_w >= video->coded_picture_width)
+ {
+ size[0] = video->coded_picture_width * video->in_h;
+ size[1] = video->chrom_width * (int)((float)video->in_h / 2 + 0.5);
+ offset[0] = video->coded_picture_width * video->in_y;
+ offset[1] = video->chrom_width * (int)((float)video->in_y / 2 + 0.5);
+
+/*
+ * if(video->in_y > 0)
+ * {
+ * offset[1] += video->chrom_width / 2;
+ * size[1] += video->chrom_width / 2;
+ * }
+ */
+
+ memcpy(video->y_output, src[0] + offset[0], size[0]);
+ memcpy(video->u_output, src[1] + offset[1], size[1]);
+ memcpy(video->v_output, src[2] + offset[1], size[1]);
+ }
+ else
+ {
+ for(i = 0, j = video->in_y; i < video->in_h; i++, j++)
+ {
+ memcpy(video->y_output + i * video->in_w,
+ src[0] + j * video->coded_picture_width + video->in_x,
+ video->in_w);
+ memcpy(video->u_output + i * video->in_w / 4,
+ src[1] + j * video->chrom_width / 2 + video->in_x / 4,
+ video->in_w / 4);
+ memcpy(video->v_output + i * video->in_w / 4,
+ src[2] + j * video->chrom_width / 2 + video->in_x / 4,
+ video->in_w / 4);
+ }
+ }
+
+ return 0;
+ }
+
+/* Want RGB buffer */
+/* Copy the frame to the output with YUV to RGB conversion */
+ if(video->prog_seq)
+ {
+ if(video->chroma_format != CHROMA444)
+ {
+ mpeg3video_ditherframe(video, src, video->output_rows);
+ }
+ else
+ mpeg3video_ditherframe444(video, src);
+ }
+ else
+ {
+ if((video->pict_struct == FRAME_PICTURE && video->topfirst) ||
+ video->pict_struct == BOTTOM_FIELD)
+ {
+/* top field first */
+ if(video->chroma_format != CHROMA444)
+ {
+ mpeg3video_dithertop(video, src);
+ mpeg3video_ditherbot(video, src);
+ }
+ else
+ {
+ mpeg3video_dithertop444(video, src);
+ mpeg3video_ditherbot444(video, src);
+ }
+ }
+ else
+ {
+/* bottom field first */
+ if(video->chroma_format != CHROMA444)
+ {
+ mpeg3video_ditherbot(video, src);
+ mpeg3video_dithertop(video, src);
+ }
+ else
+ {
+ mpeg3video_ditherbot444(video, src);
+ mpeg3video_dithertop444(video, src);
+ }
+ }
+ }
+ return 0;
+}
+
+int mpeg3video_display_second_field(mpeg3video_t *video)
+{
+/* Not used */
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/reconmmx.s b/core/multimedia/opieplayer/libmpeg3/video/reconmmx.s
new file mode 100644
index 0000000..1bb98ef
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/reconmmx.s
@@ -0,0 +1,301 @@
+ADD_1: dd 01010101h, 01010101h
+MASK_AND: dd 7f7f7f7fh, 7f7f7f7fh
+PLUS_384: dd 01800180h, 01800180h
+PLUS_128: dd 00800080h, 00800080h
+
+%assign LocalFrameSize 0
+%assign RegisterStorageSize 16
+
+; Arguments:
+%assign source LocalFrameSize + RegisterStorageSize + 4
+%assign dest LocalFrameSize + RegisterStorageSize + 8
+%assign lx2 LocalFrameSize + RegisterStorageSize + 12
+%assign h LocalFrameSize + RegisterStorageSize + 16
+
+; Locals (on local stack frame)
+
+
+; extern void C rec_mmx (
+; unsigned char *source,
+; unsigned char *dest,
+; int lx2,
+; int h
+;
+; The local variables are on the stack,
+;
+
+global recva_mmx
+global recvac_mmx
+global rech_mmx
+global rechc_mmx
+global add_block_mmx
+global set_block_mmx
+
+
+ align 16
+rech_mmx:
+ push esi
+ push edi
+ push ecx
+ push ebx
+ mov esi, [esp+source]
+ mov edi, [esp+dest]
+ mov ecx, [esp+h]
+ mov ebx, [esp+lx2]
+ movq mm5, [MASK_AND]
+ movq mm6, [ADD_1]
+.rech1:
+ movq mm0,[esi]
+ movq mm1,[esi+1]
+ movq mm2,[esi+8]
+ movq mm3,[esi+9]
+ psrlw mm0,1
+ psrlw mm1,1
+ psrlw mm2,1
+ psrlw mm3,1
+ pand mm0,mm5
+ pand mm1,mm5
+ pand mm2,mm5
+ pand mm3,mm5
+ paddusb mm0,mm1
+ paddusb mm2,mm3
+ paddusb mm0,mm6
+ paddusb mm2,mm6
+ movq [edi],mm0
+ add esi,ebx
+ movq [edi+8],mm2
+ add edi,ebx
+ dec ecx
+ jnz .rech1
+ emms
+ pop ebx
+ pop ecx
+ pop edi
+ pop esi
+ ret
+
+ align 16
+rechc_mmx:
+ push esi
+ push edi
+ push ecx
+ push ebx
+; sub esp, LocalFrameSize
+ mov esi, [esp+source]
+ mov edi, [esp+dest]
+ mov ecx, [esp+h]
+ mov ebx, [esp+lx2]
+ movq mm5, [MASK_AND]
+ movq mm6, [ADD_1]
+.rechc1:
+ movq mm0,[esi]
+ movq mm1,[esi+1]
+ psrlw mm0,1
+ psrlw mm1,1
+ pand mm0,mm5
+ pand mm1,mm5
+ paddusb mm0,mm1
+ paddusb mm0,mm6
+ movq [edi],mm0
+ add edi,ebx
+ add esi,ebx
+ dec ecx
+ jnz .rechc1
+ emms
+; add esp, LocalFrameSize
+ pop ebx
+ pop ecx
+ pop edi
+ pop esi
+ ret
+
+
+
+%assign RegisterStorageSize 20
+%assign source LocalFrameSize + RegisterStorageSize + 4
+%assign dest LocalFrameSize + RegisterStorageSize + 8
+%assign lx LocalFrameSize + RegisterStorageSize + 12
+%assign lx2 LocalFrameSize + RegisterStorageSize + 16
+%assign h LocalFrameSize + RegisterStorageSize + 20
+
+ align 16
+recva_mmx:
+ push esi
+ push edi
+ push ecx
+ push ebx
+ push edx
+ mov esi, [esp+source]
+ mov edi, [esp+dest]
+ mov ecx, [esp+h]
+ mov ebx, [esp+lx2]
+ mov edx, [esp+lx]
+ movq mm7, [MASK_AND]
+ movq mm6, [ADD_1]
+.recva1:
+ movq mm0,[esi]
+ movq mm1,[esi+edx]
+ movq mm2,[esi+8]
+ movq mm3,[esi+edx+8]
+ movq mm4,[edi]
+ movq mm5,[edi+8]
+ psrlw mm0,1
+ psrlw mm1,1
+ psrlw mm2,1
+ psrlw mm3,1
+ psrlw mm4,1
+ psrlw mm5,1
+ pand mm0,mm7
+ pand mm1,mm7
+ pand mm2,mm7
+ pand mm3,mm7
+ pand mm4,mm7
+ pand mm5,mm7
+ paddusb mm0,mm1
+ paddusb mm2,mm3
+ paddusb mm0,mm6
+ paddusb mm2,mm6
+ psrlw mm0,1
+ psrlw mm2,1
+ pand mm0,mm7
+ pand mm2,mm7
+ paddusb mm4,mm0
+ paddusb mm5,mm2
+ paddusb mm4,mm6
+ paddusb mm5,mm6
+ movq [edi],mm4
+ movq [edi+8],mm5
+ add edi,ebx
+ add esi,ebx
+ dec ecx
+ jnz near .recva1
+ emms
+ pop edx
+ pop ebx
+ pop ecx
+ pop edi
+ pop esi
+ ret
+
+ align 16
+recvac_mmx:
+ push esi
+ push edi
+ push ecx
+ push ebx
+ push edx
+ mov esi, [esp+source]
+ mov edi, [esp+dest]
+ mov ecx, [esp+h]
+ mov ebx, [esp+lx2]
+ mov edx, [esp+lx]
+ movq mm5, [MASK_AND]
+ movq mm6, [ADD_1]
+.recvac1:
+ movq mm0,[esi]
+ movq mm1,[esi+edx]
+ movq mm4,[edi]
+ psrlw mm0,1
+ psrlw mm1,1
+ psrlw mm4,1
+ pand mm0,mm5
+ pand mm1,mm5
+ pand mm4,mm5
+ paddusb mm0,mm1
+ paddusb mm0,mm6
+ psrlw mm0,1
+ pand mm0,mm5
+ paddusb mm4,mm0
+ paddusb mm4,mm6
+ movq [edi],mm4
+ add edi,ebx
+ add esi,ebx
+ dec ecx
+ jnz .recvac1
+ emms
+ pop edx
+ pop ebx
+ pop ecx
+ pop edi
+ pop esi
+ ret
+
+%assign RegisterStorageSize 20
+%assign rfp LocalFrameSize + RegisterStorageSize + 4
+%assign bp LocalFrameSize + RegisterStorageSize + 8
+%assign iincr LocalFrameSize + RegisterStorageSize + 12
+
+; FIXME clipping needs to be done
+
+ align 16
+add_block_mmx:
+ push esi
+ push edi
+ push ecx
+ push ebx
+ push edx
+ mov esi, [esp+bp]
+ mov edi, [esp+rfp]
+ mov ebx, [esp+iincr]
+; movq mm7, [PLUS_384]
+ mov ecx,8
+ pxor mm2,mm2 ; clear
+%rep 8
+ movq mm0, [edi] ; get dest
+ movq mm1,mm0
+ punpcklbw mm0,mm2
+ punpckhbw mm1,mm2
+ paddsw mm0, [esi]
+ paddsw mm1, [esi+8]
+; paddsw mm0, mm7
+; paddsw mm1, mm7
+ packuswb mm0,mm1
+ movq [edi], mm0
+ add edi,ebx
+ add esi,16
+%endrep
+ emms
+ pop edx
+ pop ebx
+ pop ecx
+ pop edi
+ pop esi
+ ret
+
+ align 16
+set_block_mmx:
+ push esi
+ push edi
+ push ecx
+ push ebx
+ push edx
+ mov esi, [esp+bp]
+ mov edi, [esp+rfp]
+ mov ebx, [esp+iincr]
+ movq mm7, [PLUS_128]
+%rep 4
+ movq mm0, [esi]
+ movq mm1, [esi+8]
+ paddsw mm0, mm7
+ movq mm2, [esi+16]
+ paddsw mm1, mm7
+ movq mm3, [esi+24]
+ paddsw mm2, mm7
+ packuswb mm0, mm1
+ paddsw mm3, mm7
+ movq [edi], mm0
+ packuswb mm2, mm3
+ add edi, ebx
+ add esi, 32
+ movq [edi], mm2
+ add edi, ebx
+%endrep
+ emms
+ pop edx
+ pop ebx
+ pop ecx
+ pop edi
+ pop esi
+ ret
+
+
diff --git a/core/multimedia/opieplayer/libmpeg3/video/reconstruct.c b/core/multimedia/opieplayer/libmpeg3/video/reconstruct.c
new file mode 100644
index 0000000..531f9c0
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/reconstruct.c
@@ -0,0 +1,1290 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+#include <stdio.h>
+
+#ifdef HAVE_MMX
+
+#ifdef HAVE_3Dnow
+static inline void recva_mmx(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ __asm__(
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 8(%1), %%mm1\n" /* 8 s */
+ "movq (%4), %%mm2\n" /* 8 s +lx */
+ "movq 8(%4), %%mm3\n" /* 8 s +lx **/
+
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %1\n"
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq (%2), %%mm2\n" /* 8 d */
+ "movq 8(%2), %%mm3\n" /* 8 d */
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %4\n"
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq %%mm0, (%2)\n"
+ "movq %%mm1, 8(%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+}
+
+static inline void recvac_mmx(unsigned char *s, unsigned char *d, int lx,int lx2, int h)
+{
+ __asm__(
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq (%4), %%mm2\n" /* 8 s +lx */
+ "addl %3, %1\n"
+ "pavgusb %%mm2, %%mm0\n"
+ "movq (%2), %%mm3\n" /* 8 d */
+ "addl %3, %4\n"
+ "pavgusb %%mm3, %%mm0\n"
+ "movq %%mm0, (%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+}
+
+static inline void rech_mmx(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ __asm__ (
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 8(%1), %%mm1\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s */
+ "movq 9(%1), %%mm3\n" /* 8 s */
+
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %1\n"
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq %%mm0, (%2)\n"
+ "movq %%mm1, 8(%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+}
+
+static inline void rechc_mmx(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ __asm__ (
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s +1 */
+ "addl %3, %1\n"
+ "pavgusb %%mm2, %%mm0\n"
+ "movq %%mm0, (%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+}
+
+static inline void recha_mmx(unsigned char *s, unsigned char *d,int lx2, int h)
+{
+ __asm__ (
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 8(%1), %%mm1\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s */
+ "movq 9(%1), %%mm3\n" /* 8 s */
+
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %1\n"
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq (%2), %%mm2\n" /* 8 d */
+ "movq 8(%2), %%mm3\n" /* 8 d */
+ "pavgusb %%mm2, %%mm0\n"
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq %%mm0, (%2)\n"
+ "movq %%mm1, 8(%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+}
+
+static inline void rechac_mmx(unsigned char *s,unsigned char *d, int lx2, int h)
+{
+ __asm__ (
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s */
+
+ "addl %3, %1\n"
+ "pavgusb %%mm2, %%mm0\n"
+
+ "movq (%2), %%mm1\n" /* 8 d */
+ "pavgusb %%mm1, %%mm0\n"
+
+ "movq %%mm0, (%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+}
+
+static inline void rec4_mmx(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ __asm__ __volatile__(
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 8(%1), %%mm1\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s +1*/
+ "movq 9(%1), %%mm3\n" /* 8 s +1*/
+ ".align 8\n"
+ "1:"
+ "movq (%4), %%mm4\n" /* 8 s+lx */
+ "pavgusb %%mm2, %%mm0\n"
+ "movq 8(%4), %%mm5\n" /* 8 s+lx */
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq 1(%4), %%mm6\n" /* 8 s+lx +1*/
+ "pavgusb %%mm4, %%mm0\n"
+ "movq 9(%4), %%mm7\n" /* 8 s+lx +1*/
+ "pavgusb %%mm5, %%mm1\n"
+
+ "pavgusb %%mm6, %%mm0\n"
+ "addl %3, %4\n"
+ "pavgusb %%mm7, %%mm1\n"
+ "movq %%mm0, (%2)\n"
+ "movq %%mm6, %%mm2\n"
+ "movq %%mm7, %%mm3\n"
+ "movq %%mm1, 8(%2)\n"
+ "movq %%mm4, %%mm0\n"
+ "movq %%mm5, %%mm1\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+}
+
+static inline void rec4c_mmx(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ __asm__ __volatile__(
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s +1*/
+ ".align 8\n"
+ "1:"
+ "movq (%4), %%mm4\n" /* 8 s+lx */
+ "pavgusb %%mm2, %%mm0\n"
+
+ "movq 1(%4), %%mm6\n" /* 8 s+lx +1*/
+ "pavgusb %%mm4, %%mm0\n"
+
+ "addl %3, %4\n"
+ "pavgusb %%mm6, %%mm0\n"
+ "movq %%mm0, (%2)\n"
+ "movq %%mm6, %%mm2\n"
+ "movq %%mm4, %%mm0\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+}
+
+static inline void rec4a_mmx(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ __asm__ __volatile__(
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 8(%1), %%mm1\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s +1*/
+ "movq 9(%1), %%mm3\n" /* 8 s +1*/
+ ".align 8\n"
+ "1:"
+ "movq (%4), %%mm4\n" /* 8 s+lx */
+ "pavgusb %%mm2, %%mm0\n"
+ "movq 8(%4), %%mm5\n" /* 8 s+lx */
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq 1(%4), %%mm6\n" /* 8 s+lx +1*/
+ "pavgusb %%mm4, %%mm0\n"
+ "movq 9(%4), %%mm7\n" /* 8 s+lx +1*/
+ "pavgusb %%mm5, %%mm1\n"
+ "movq (%2), %%mm2\n"
+ "pavgusb %%mm6, %%mm0\n"
+ "movq 8(%2), %%mm3\n"
+
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %4\n"
+ "pavgusb %%mm3, %%mm1\n"
+ "movq %%mm0, (%2)\n"
+
+ "pavgusb %%mm7, %%mm1\n"
+ "movq %%mm6, %%mm2\n"
+ "movq %%mm7, %%mm3\n"
+ "movq %%mm1, 8(%2)\n"
+ "movq %%mm4, %%mm0\n"
+ "movq %%mm5, %%mm1\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+}
+
+static inline void rec4ac_mmx(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ __asm__ __volatile__(
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq 1(%1), %%mm2\n" /* 8 s +1*/
+ ".align 8\n"
+ "1:"
+ "movq (%4), %%mm4\n" /* 8 s+lx */
+ "pavgusb %%mm2, %%mm0\n"
+
+ "movq 1(%4), %%mm6\n" /* 8 s+lx +1*/
+ "pavgusb %%mm4, %%mm0\n"
+ "movq (%2), %%mm1\n" /* 8 d */
+ "pavgusb %%mm6, %%mm0\n"
+ "addl %3, %4\n"
+ "pavgusb %%mm1, %%mm0\n"
+ "movq %%mm6, %%mm2\n"
+ "movq %%mm0, (%2)\n"
+ "movq %%mm4, %%mm0\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+}
+
+#else // HAVE_3DNOW
+ static LONGLONG ADD_1 = 0x0101010101010101LL;
+ static LONGLONG MASK_AND = 0x7f7f7f7f7f7f7f7fLL;
+#endif
+
+static inline void rec_mmx(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ __asm__ __volatile__(
+ ".align 8\n"
+ "1:\t"
+ "movq ( %1 ), %%mm0\n" /* 8 s */
+ "movq 8( %1 ), %%mm2\n" /* 16 s */
+ "movq %%mm0, ( %2 )\n"
+ "addl %3, %1\n"
+ "movq %%mm2, 8( %2 )\n"
+ "decl %0\n"
+ "leal (%2, %3), %2\n"
+ "jnz 1b"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+}
+
+
+static inline void recc_mmx(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ __asm__ __volatile__(
+ ".align 8\n"
+ "1:\t"
+ "movq ( %1 ), %%mm0\n"
+ "addl %3, %1\n"
+ "movq %%mm0, ( %2 )\n"
+ "decl %0\n"
+ "leal (%2, %3), %2\n"
+ "jnz 1b"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+}
+
+
+static inline void reca_mmx(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+#ifdef HAVE_3Dnow
+ __asm__ (
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq (%2), %%mm2\n" /* 8 d */
+ "movq 8(%1), %%mm1\n" /* 8 s */
+ "movq 8(%2), %%mm3\n" /* 8 d */
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %1\n"
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq %%mm0, (%2)\n"
+ "movq %%mm1, 8(%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+#else /* No 3dnow */
+ __asm__ (
+ "movq MASK_AND, %%mm5\n"
+ "movq ADD_1, %%mm6\n"
+ "1:\t"
+ "movq (%1),%%mm0\n" /* Load 16 pixels from each row */
+ "movq (%2),%%mm1\n"
+ "movq 8(%1),%%mm2\n"
+ "movq 8(%2),%%mm3\n"
+ "psrlw $1,%%mm0\n" /* Shift pixels down */
+ "psrlw $1,%%mm1\n"
+ "pand %%mm5,%%mm0\n" /* Zero out significant bit */
+ "psrlw $1,%%mm2\n"
+ "pand %%mm5,%%mm1\n"
+ "psrlw $1,%%mm3\n"
+ "pand %%mm5,%%mm2\n"
+ "paddusb %%mm1,%%mm0\n" /* Add pixels */
+ "pand %%mm5,%%mm3\n"
+ "paddusb %%mm3,%%mm2\n"
+ "paddusb %%mm6,%%mm0\n" /* Add 1 to results */
+ "paddusb %%mm6,%%mm2\n"
+ "movq %%mm0,(%2)\n"
+ "addl %3,%1\n"
+ "movq %%mm2, 8(%2)\n"
+ "decl %0\n"
+ "leal (%2, %3), %2\n"
+ "jnz 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+#endif
+}
+
+
+static inline void recac_mmx(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+#ifdef HAVE_3Dnow
+ __asm__ (
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq (%2), %%mm2\n" /* 8 d */
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %1\n"
+ "movq %%mm0, (%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+#else /* No 3dnow */
+ __asm__ (
+ "movq MASK_AND, %%mm5\n"
+ "movq ADD_1, %%mm6\n"
+ "1:\t"
+ "movq (%1),%%mm0\n"
+ "movq (%2),%%mm1\n"
+ "psrlw $1,%%mm0\n"
+ "psrlw $1,%%mm1\n"
+ "pand %%mm5,%%mm0\n"
+ "pand %%mm5,%%mm1\n"
+ "paddusb %%mm1,%%mm0\n"
+ "paddusb %%mm6,%%mm0\n"
+ "addl %3,%1\n"
+ "movq %%mm0,(%2)\n"
+ "decl %0\n"
+ "leal (%2, %3), %2\n"
+ "jnz 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2)
+ );
+#endif
+}
+
+
+static inline void recv_mmx(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+#ifdef HAVE_3Dnow
+ __asm__(
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq (%4), %%mm2\n" /* 8 s +lx */
+ "movq 8(%1), %%mm1\n" /* 8 s */
+ "movq 8(%4), %%mm3\n" /* 8 s +lx **/
+
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %1\n"
+ "pavgusb %%mm3, %%mm1\n"
+
+ "movq %%mm0, (%2)\n"
+ "addl %3, %4\n"
+ "movq %%mm1, 8(%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+#else
+ __asm__ (
+ "movq MASK_AND, %%mm5\n"
+ "movq ADD_1, %%mm6\n"
+ "1:\t"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq (%4), %%mm1\n" /* 8 s +lx */
+ "movq 8(%1), %%mm2\n" /* 8 s */
+ "movq 8(%4), %%mm3\n" /* 8 s +lx **/
+ "psrlw $1,%%mm0\n"
+ "psrlw $1,%%mm1\n"
+ "pand %%mm5,%%mm0\n"
+ "psrlw $1,%%mm2\n"
+ "pand %%mm5,%%mm1\n"
+ "psrlw $1,%%mm3\n"
+ "pand %%mm5,%%mm2\n"
+ "paddusb %%mm1,%%mm0\n"
+ "pand %%mm5,%%mm3\n"
+ "paddusb %%mm3,%%mm2\n"
+ "paddusb %%mm6,%%mm0\n"
+ "paddusb %%mm6,%%mm2\n"
+ "movq %%mm0,(%2)\n"
+ "addl %3,%1\n"
+ "movq %%mm2, 8(%2)\n"
+ "addl %3,%4\n"
+ "decl %0\n"
+ "leal (%2, %3), %2\n"
+ "jnz 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+#endif
+}
+
+
+static inline void recvc_mmx(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+#ifdef HAVE_3Dnow
+ __asm__(
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq (%4), %%mm2\n" /* 8 s +lx */
+ "addl %3, %1\n"
+ "pavgusb %%mm2, %%mm0\n"
+ "addl %3, %4\n"
+ "movq %%mm0, (%2)\n"
+ "addl %3, %2\n"
+ "loop 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+#else
+ __asm__ (
+ "movq MASK_AND, %%mm5\n"
+ "movq ADD_1, %%mm6\n"
+ "1:\t"
+ "movq (%1), %%mm0\n" /* 8 s */
+ "movq (%4), %%mm1\n" /* 8 s +lx */
+ "psrlw $1,%%mm0\n"
+ "psrlw $1,%%mm1\n"
+ "pand %%mm5,%%mm0\n"
+ "pand %%mm5,%%mm1\n"
+ "paddusb %%mm1,%%mm0\n"
+ "addl %3,%1\n"
+ "paddusb %%mm6,%%mm0\n"
+ "addl %3,%4\n"
+ "movq %%mm0,(%2)\n"
+ "decl %0\n"
+ "leal (%2, %3), %2\n"
+ "jnz 1b\n"
+ :
+ : "c" (h), "r" (s), "r" (d), "r" (lx2), "r" (s +lx)
+ );
+#endif
+}
+
+#endif // HAVE_MMX
+
+static inline void rec(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ int j;
+ for(j = 0; j < h; j++, s += lx2, d += lx2)
+ {
+ d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; d[3] = s[3];
+ d[4] = s[4]; d[5] = s[5]; d[6] = s[6]; d[7] = s[7];
+ d[8] = s[8]; d[9] = s[9]; d[10] = s[10]; d[11] = s[11];
+ d[12] = s[12]; d[13] = s[13]; d[14] = s[14]; d[15] = s[15];
+ }
+}
+
+
+
+static inline void recc(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ int j;
+ for(j = 0; j < h; j++, s += lx2, d += lx2)
+ {
+ d[0] = s[0]; d[1] = s[1]; d[2] = s[2]; d[3] = s[3];
+ d[4] = s[4]; d[5] = s[5]; d[6] = s[6]; d[7] = s[7];
+ }
+}
+
+static inline void reca(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ int j;
+ for(j = 0; j < h; j++, s +=lx2, d +=lx2)
+ {
+ d[0] = (unsigned int)(d[0] + s[0] + 1) >> 1;
+ d[1] = (unsigned int)(d[1] + s[1] + 1) >> 1;
+ d[2] = (unsigned int)(d[2] + s[2] + 1) >> 1;
+ d[3] = (unsigned int)(d[3] + s[3] + 1) >> 1;
+ d[4] = (unsigned int)(d[4] + s[4] + 1) >> 1;
+ d[5] = (unsigned int)(d[5] + s[5] + 1) >> 1;
+ d[6] = (unsigned int)(d[6] + s[6] + 1) >> 1;
+ d[7] = (unsigned int)(d[7] + s[7] + 1) >> 1;
+ d[8] = (unsigned int)(d[8] + s[8] + 1) >> 1;
+ d[9] = (unsigned int)(d[9] + s[9] + 1) >> 1;
+ d[10] = (unsigned int)(d[10] + s[10] + 1) >> 1;
+ d[11] = (unsigned int)(d[11] + s[11] + 1) >> 1;
+ d[12] = (unsigned int)(d[12] + s[12] + 1) >> 1;
+ d[13] = (unsigned int)(d[13] + s[13] + 1) >> 1;
+ d[14] = (unsigned int)(d[14] + s[14] + 1) >> 1;
+ d[15] = (unsigned int)(d[15] + s[15] + 1) >> 1;
+ }
+}
+
+static inline void recac(unsigned char *s, unsigned char *d, int lx2, int h)
+{
+ int j;
+ for(j = 0; j < h; j++, s += lx2, d += lx2)
+ {
+ d[0] = (unsigned int)(d[0] + s[0] + 1)>>1;
+ d[1] = (unsigned int)(d[1] + s[1] + 1)>>1;
+ d[2] = (unsigned int)(d[2] + s[2] + 1)>>1;
+ d[3] = (unsigned int)(d[3] + s[3] + 1)>>1;
+ d[4] = (unsigned int)(d[4] + s[4] + 1)>>1;
+ d[5] = (unsigned int)(d[5] + s[5] + 1)>>1;
+ d[6] = (unsigned int)(d[6] + s[6] + 1)>>1;
+ d[7] = (unsigned int)(d[7] + s[7] + 1)>>1;
+ }
+}
+
+static inline void recv_(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ unsigned char *dp,*sp,*sp2;
+ int j;
+ sp = s;
+ sp2 = s + lx;
+ dp = d;
+ for(j = 0; j < h; j++)
+ {
+ dp[0] = (unsigned int)(sp[0] + sp2[0] + 1) >> 1;
+ dp[1] = (unsigned int)(sp[1] + sp2[1] + 1) >> 1;
+ dp[2] = (unsigned int)(sp[2] + sp2[2] + 1) >> 1;
+ dp[3] = (unsigned int)(sp[3] + sp2[3] + 1) >> 1;
+ dp[4] = (unsigned int)(sp[4] + sp2[4] + 1) >> 1;
+ dp[5] = (unsigned int)(sp[5] + sp2[5] + 1) >> 1;
+ dp[6] = (unsigned int)(sp[6] + sp2[6] + 1) >> 1;
+ dp[7] = (unsigned int)(sp[7] + sp2[7] + 1) >> 1;
+ dp[8] = (unsigned int)(sp[8] + sp2[8] + 1) >> 1;
+ dp[9] = (unsigned int)(sp[9] + sp2[9] + 1) >> 1;
+ dp[10] = (unsigned int)(sp[10] + sp2[10] + 1) >> 1;
+ dp[11] = (unsigned int)(sp[11] + sp2[11] + 1) >> 1;
+ dp[12] = (unsigned int)(sp[12] + sp2[12] + 1) >> 1;
+ dp[13] = (unsigned int)(sp[13] + sp2[13] + 1) >> 1;
+ dp[14] = (unsigned int)(sp[14] + sp2[14] + 1) >> 1;
+ dp[15] = (unsigned int)(sp[15] + sp2[15] + 1) >> 1;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+static inline void recvc(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ unsigned char *dp,*sp,*sp2;
+ int j;
+
+ sp = s;
+ sp2 = s+lx;
+ dp = d;
+ for(j = 0; j < h; j++)
+ {
+ dp[0] = (unsigned int)(sp[0]+sp2[0]+1)>>1;
+ dp[1] = (unsigned int)(sp[1]+sp2[1]+1)>>1;
+ dp[2] = (unsigned int)(sp[2]+sp2[2]+1)>>1;
+ dp[3] = (unsigned int)(sp[3]+sp2[3]+1)>>1;
+ dp[4] = (unsigned int)(sp[4]+sp2[4]+1)>>1;
+ dp[5] = (unsigned int)(sp[5]+sp2[5]+1)>>1;
+ dp[6] = (unsigned int)(sp[6]+sp2[6]+1)>>1;
+ dp[7] = (unsigned int)(sp[7]+sp2[7]+1)>>1;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+
+static inline void recva(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ unsigned char *dp,*sp,*sp2;
+ int j;
+
+ sp = s;
+ sp2 = s+lx;
+ dp = d;
+ for (j=0; j<h; j++){
+ dp[0] = (dp[0] + ((unsigned int)(sp[0]+sp2[0]+1)>>1) + 1)>>1;
+ dp[1] = (dp[1] + ((unsigned int)(sp[1]+sp2[1]+1)>>1) + 1)>>1;
+ dp[2] = (dp[2] + ((unsigned int)(sp[2]+sp2[2]+1)>>1) + 1)>>1;
+ dp[3] = (dp[3] + ((unsigned int)(sp[3]+sp2[3]+1)>>1) + 1)>>1;
+ dp[4] = (dp[4] + ((unsigned int)(sp[4]+sp2[4]+1)>>1) + 1)>>1;
+ dp[5] = (dp[5] + ((unsigned int)(sp[5]+sp2[5]+1)>>1) + 1)>>1;
+ dp[6] = (dp[6] + ((unsigned int)(sp[6]+sp2[6]+1)>>1) + 1)>>1;
+ dp[7] = (dp[7] + ((unsigned int)(sp[7]+sp2[7]+1)>>1) + 1)>>1;
+ dp[8] = (dp[8] + ((unsigned int)(sp[8]+sp2[8]+1)>>1) + 1)>>1;
+ dp[9] = (dp[9] + ((unsigned int)(sp[9]+sp2[9]+1)>>1) + 1)>>1;
+ dp[10] = (dp[10] + ((unsigned int)(sp[10]+sp2[10]+1)>>1) + 1)>>1;
+ dp[11] = (dp[11] + ((unsigned int)(sp[11]+sp2[11]+1)>>1) + 1)>>1;
+ dp[12] = (dp[12] + ((unsigned int)(sp[12]+sp2[12]+1)>>1) + 1)>>1;
+ dp[13] = (dp[13] + ((unsigned int)(sp[13]+sp2[13]+1)>>1) + 1)>>1;
+ dp[14] = (dp[14] + ((unsigned int)(sp[14]+sp2[14]+1)>>1) + 1)>>1;
+ dp[15] = (dp[15] + ((unsigned int)(sp[15]+sp2[15]+1)>>1) + 1)>>1;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+
+static inline void recvac(unsigned char *s, unsigned char *d, int lx,int lx2, int h){
+ unsigned char *dp,*sp,*sp2;
+ int j;
+
+ sp = s;
+ sp2 = s+lx;
+ dp = d;
+ for (j=0; j<h; j++){
+ dp[0] = (dp[0] + ((unsigned int)(sp[0]+sp2[0]+1)>>1) + 1)>>1;
+ dp[1] = (dp[1] + ((unsigned int)(sp[1]+sp2[1]+1)>>1) + 1)>>1;
+ dp[2] = (dp[2] + ((unsigned int)(sp[2]+sp2[2]+1)>>1) + 1)>>1;
+ dp[3] = (dp[3] + ((unsigned int)(sp[3]+sp2[3]+1)>>1) + 1)>>1;
+ dp[4] = (dp[4] + ((unsigned int)(sp[4]+sp2[4]+1)>>1) + 1)>>1;
+ dp[5] = (dp[5] + ((unsigned int)(sp[5]+sp2[5]+1)>>1) + 1)>>1;
+ dp[6] = (dp[6] + ((unsigned int)(sp[6]+sp2[6]+1)>>1) + 1)>>1;
+ dp[7] = (dp[7] + ((unsigned int)(sp[7]+sp2[7]+1)>>1) + 1)>>1;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+
+static inline void rech(unsigned char *s, unsigned char *d, int lx2, int h){
+ unsigned char *dp,*sp;
+ unsigned int s1,s2;
+ int j;
+
+ sp = s;
+ dp = d;
+ for (j=0; j<h; j++){
+ s1=sp[0];
+ dp[0] = (unsigned int)(s1+(s2=sp[1])+1)>>1;
+ dp[1] = (unsigned int)(s2+(s1=sp[2])+1)>>1;
+ dp[2] = (unsigned int)(s1+(s2=sp[3])+1)>>1;
+ dp[3] = (unsigned int)(s2+(s1=sp[4])+1)>>1;
+ dp[4] = (unsigned int)(s1+(s2=sp[5])+1)>>1;
+ dp[5] = (unsigned int)(s2+(s1=sp[6])+1)>>1;
+ dp[6] = (unsigned int)(s1+(s2=sp[7])+1)>>1;
+ dp[7] = (unsigned int)(s2+(s1=sp[8])+1)>>1;
+ dp[8] = (unsigned int)(s1+(s2=sp[9])+1)>>1;
+ dp[9] = (unsigned int)(s2+(s1=sp[10])+1)>>1;
+ dp[10] = (unsigned int)(s1+(s2=sp[11])+1)>>1;
+ dp[11] = (unsigned int)(s2+(s1=sp[12])+1)>>1;
+ dp[12] = (unsigned int)(s1+(s2=sp[13])+1)>>1;
+ dp[13] = (unsigned int)(s2+(s1=sp[14])+1)>>1;
+ dp[14] = (unsigned int)(s1+(s2=sp[15])+1)>>1;
+ dp[15] = (unsigned int)(s2+sp[16]+1)>>1;
+ sp+= lx2;
+ dp+= lx2;
+ }
+}
+
+
+static inline void rechc(unsigned char *s,unsigned char *d, int lx2, int h){
+ unsigned char *dp,*sp;
+ unsigned int s1,s2;
+ int j;
+
+ sp = s;
+ dp = d;
+ for (j=0; j<h; j++){
+ s1=sp[0];
+ dp[0] = (unsigned int)(s1+(s2=sp[1])+1)>>1;
+ dp[1] = (unsigned int)(s2+(s1=sp[2])+1)>>1;
+ dp[2] = (unsigned int)(s1+(s2=sp[3])+1)>>1;
+ dp[3] = (unsigned int)(s2+(s1=sp[4])+1)>>1;
+ dp[4] = (unsigned int)(s1+(s2=sp[5])+1)>>1;
+ dp[5] = (unsigned int)(s2+(s1=sp[6])+1)>>1;
+ dp[6] = (unsigned int)(s1+(s2=sp[7])+1)>>1;
+ dp[7] = (unsigned int)(s2+sp[8]+1)>>1;
+ sp+= lx2;
+ dp+= lx2;
+ }
+}
+
+static inline void recha(unsigned char *s, unsigned char *d,int lx2, int h)
+{
+ unsigned char *dp,*sp;
+ unsigned int s1,s2;
+ int j;
+
+ sp = s;
+ dp = d;
+ for (j = 0; j < h; j++)
+ {
+ s1 = sp[0];
+ dp[0] = (dp[0] + ((unsigned int)(s1 + (s2 = sp[1]) + 1) >> 1) + 1) >> 1;
+ dp[1] = (dp[1] + ((unsigned int)(s2 + (s1 = sp[2]) + 1) >> 1) + 1) >> 1;
+ dp[2] = (dp[2] + ((unsigned int)(s1 + (s2 = sp[3]) + 1) >> 1) + 1) >> 1;
+ dp[3] = (dp[3] + ((unsigned int)(s2 + (s1 = sp[4]) + 1) >> 1) + 1) >> 1;
+ dp[4] = (dp[4] + ((unsigned int)(s1 + (s2 = sp[5]) + 1) >> 1) + 1) >> 1;
+ dp[5] = (dp[5] + ((unsigned int)(s2 + (s1 = sp[6]) + 1) >> 1) + 1) >> 1;
+ dp[6] = (dp[6] + ((unsigned int)(s1 + (s2 = sp[7]) + 1) >> 1) + 1) >> 1;
+ dp[7] = (dp[7] + ((unsigned int)(s2 + (s1 = sp[8]) + 1) >> 1) + 1) >> 1;
+ dp[8] = (dp[8] + ((unsigned int)(s1 + (s2 = sp[9]) + 1) >> 1) + 1) >> 1;
+ dp[9] = (dp[9] + ((unsigned int)(s2 + (s1 = sp[10]) + 1) >> 1) + 1) >> 1;
+ dp[10] = (dp[10] + ((unsigned int)(s1 + (s2 = sp[11]) + 1) >> 1) + 1) >> 1;
+ dp[11] = (dp[11] + ((unsigned int)(s2 + (s1 = sp[12]) + 1) >> 1) + 1) >> 1;
+ dp[12] = (dp[12] + ((unsigned int)(s1 + (s2 = sp[13]) + 1) >> 1) + 1) >> 1;
+ dp[13] = (dp[13] + ((unsigned int)(s2 + (s1 = sp[14]) + 1) >> 1) + 1) >> 1;
+ dp[14] = (dp[14] + ((unsigned int)(s1 + (s2 = sp[15]) + 1) >> 1) + 1) >> 1;
+ dp[15] = (dp[15] + ((unsigned int)(s2 + sp[16] + 1) >> 1) + 1) >> 1;
+ sp += lx2;
+ dp += lx2;
+ }
+}
+
+
+static inline void rechac(unsigned char *s,unsigned char *d, int lx2, int h)
+{
+ unsigned char *dp,*sp;
+ unsigned int s1,s2;
+ int j;
+
+ sp = s;
+ dp = d;
+ for(j = 0; j < h; j++)
+ {
+ s1 = sp[0];
+ dp[0] = (dp[0] + ((unsigned int)(s1 + (s2 = sp[1]) + 1) >> 1) + 1) >> 1;
+ dp[1] = (dp[1] + ((unsigned int)(s2 + (s1 = sp[2]) + 1) >> 1) + 1) >> 1;
+ dp[2] = (dp[2] + ((unsigned int)(s1 + (s2 = sp[3]) + 1) >> 1) + 1) >> 1;
+ dp[3] = (dp[3] + ((unsigned int)(s2 + (s1 = sp[4]) + 1) >> 1) + 1) >> 1;
+ dp[4] = (dp[4] + ((unsigned int)(s1 + (s2 = sp[5]) + 1) >> 1) + 1) >> 1;
+ dp[5] = (dp[5] + ((unsigned int)(s2 + (s1 = sp[6]) + 1) >> 1) + 1) >> 1;
+ dp[6] = (dp[6] + ((unsigned int)(s1 + (s2 = sp[7]) + 1) >> 1) + 1) >> 1;
+ dp[7] = (dp[7] + ((unsigned int)(s2 + sp[8] + 1) >> 1) + 1) >> 1;
+ sp += lx2;
+ dp += lx2;
+ }
+}
+
+
+static inline void rec4(unsigned char *s, unsigned char *d, int lx, int lx2, int h)
+{
+ unsigned char *dp,*sp,*sp2;
+ unsigned int s1,s2,s3,s4;
+ int j;
+
+ sp = s;
+ sp2 = s+lx;
+ dp = d;
+ for (j=0; j<h; j++){
+ s1=sp[0]; s3=sp2[0];
+ dp[0] = (unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2;
+ dp[1] = (unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2;
+ dp[2] = (unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2;
+ dp[3] = (unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2;
+ dp[4] = (unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2;
+ dp[5] = (unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2;
+ dp[6] = (unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2;
+ dp[7] = (unsigned int)(s2+(s1=sp[8])+s4+(s3=sp2[8])+2)>>2;
+ dp[8] = (unsigned int)(s1+(s2=sp[9])+s3+(s4=sp2[9])+2)>>2;
+ dp[9] = (unsigned int)(s2+(s1=sp[10])+s4+(s3=sp2[10])+2)>>2;
+ dp[10] = (unsigned int)(s1+(s2=sp[11])+s3+(s4=sp2[11])+2)>>2;
+ dp[11] = (unsigned int)(s2+(s1=sp[12])+s4+(s3=sp2[12])+2)>>2;
+ dp[12] = (unsigned int)(s1+(s2=sp[13])+s3+(s4=sp2[13])+2)>>2;
+ dp[13] = (unsigned int)(s2+(s1=sp[14])+s4+(s3=sp2[14])+2)>>2;
+ dp[14] = (unsigned int)(s1+(s2=sp[15])+s3+(s4=sp2[15])+2)>>2;
+ dp[15] = (unsigned int)(s2+sp[16]+s4+sp2[16]+2)>>2;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+
+static inline void rec4c(unsigned char *s,unsigned char *d, int lx, int lx2, int h)
+{
+ unsigned char *dp,*sp,*sp2;
+ unsigned int s1,s2,s3,s4;
+ int j;
+
+ sp = s;
+ sp2 = s+lx;
+ dp = d;
+ for (j=0; j<h; j++){
+ s1=sp[0]; s3=sp2[0];
+ dp[0] = (unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2;
+ dp[1] = (unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2;
+ dp[2] = (unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2;
+ dp[3] = (unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2;
+ dp[4] = (unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2;
+ dp[5] = (unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2;
+ dp[6] = (unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2;
+ dp[7] = (unsigned int)(s2+sp[8]+s4+sp2[8]+2)>>2;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+
+static inline void rec4a(unsigned char *s,unsigned char *d, int lx, int lx2, int h)
+{
+ unsigned char *dp=d, *sp=s, *sp2=s+lx;
+ unsigned int s1, s2, s3, s4;
+ int j;
+
+/*
+ sp = s;
+ sp2 = s+lx;
+ dp = d;
+*/
+ for (j=0; j<h; j++){
+ s1=sp[0]; s3=sp2[0];
+ dp[0] = (dp[0] + ((unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2) + 1)>>1;
+ dp[1] = (dp[1] + ((unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2) + 1)>>1;
+ dp[2] = (dp[2] + ((unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2) + 1)>>1;
+ dp[3] = (dp[3] + ((unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2) + 1)>>1;
+ dp[4] = (dp[4] + ((unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2) + 1)>>1;
+ dp[5] = (dp[5] + ((unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2) + 1)>>1;
+ dp[6] = (dp[6] + ((unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2) + 1)>>1;
+ dp[7] = (dp[7] + ((unsigned int)(s2+(s1=sp[8])+s4+(s3=sp2[8])+2)>>2) + 1)>>1;
+ dp[8] = (dp[8] + ((unsigned int)(s1+(s2=sp[9])+s3+(s4=sp2[9])+2)>>2) + 1)>>1;
+ dp[9] = (dp[9] + ((unsigned int)(s2+(s1=sp[10])+s4+(s3=sp2[10])+2)>>2) + 1)>>1;
+ dp[10] = (dp[10] + ((unsigned int)(s1+(s2=sp[11])+s3+(s4=sp2[11])+2)>>2) + 1)>>1;
+ dp[11] = (dp[11] + ((unsigned int)(s2+(s1=sp[12])+s4+(s3=sp2[12])+2)>>2) + 1)>>1;
+ dp[12] = (dp[12] + ((unsigned int)(s1+(s2=sp[13])+s3+(s4=sp2[13])+2)>>2) + 1)>>1;
+ dp[13] = (dp[13] + ((unsigned int)(s2+(s1=sp[14])+s4+(s3=sp2[14])+2)>>2) + 1)>>1;
+ dp[14] = (dp[14] + ((unsigned int)(s1+(s2=sp[15])+s3+(s4=sp2[15])+2)>>2) + 1)>>1;
+ dp[15] = (dp[15] + ((unsigned int)(s2+sp[16]+s4+sp2[16]+2)>>2) + 1)>>1;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+
+static inline void rec4ac(unsigned char *s,unsigned char *d, int lx, int lx2, int h)
+{
+ unsigned char *dp=d, *sp=s, *sp2=s+lx;
+ unsigned int s1,s2,s3,s4;
+ int j;
+
+/*
+ sp = s;
+ sp2 = s+lx;
+ dp = d;
+*/
+ for (j=0; j<h; j++)
+ {
+ s1=sp[0]; s3=sp2[0];
+ dp[0] = (dp[0] + ((unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2) + 1)>>1;
+ dp[1] = (dp[1] + ((unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2) + 1)>>1;
+ dp[2] = (dp[2] + ((unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2) + 1)>>1;
+ dp[3] = (dp[3] + ((unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2) + 1)>>1;
+ dp[4] = (dp[4] + ((unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2) + 1)>>1;
+ dp[5] = (dp[5] + ((unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2) + 1)>>1;
+ dp[6] = (dp[6] + ((unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2) + 1)>>1;
+ dp[7] = (dp[7] + ((unsigned int)(s2+sp[8]+s4+sp2[8]+2)>>2) + 1)>>1;
+ sp+= lx2;
+ sp2+= lx2;
+ dp+= lx2;
+ }
+}
+
+static inline
+void recon_comp(mpeg3video_t *video,
+ unsigned char *src,
+ unsigned char *dst,
+ int lx,
+ int lx2,
+ int w,
+ int h,
+ int x,
+ int y,
+ int dx,
+ int dy,
+ int addflag)
+{
+ int switcher;
+ unsigned char *s, *d;
+
+/* half pel scaling */
+ switcher = (dx & 1) << 3 | (dy & 1) << 2 | w;
+ if(addflag) switcher |= 2;
+/* origins */
+ s = src + lx * (y + (dy >> 1)) + x + (dx >> 1);
+ d = dst + lx * y + x;
+
+// Accelerated functions
+#ifdef HAVE_3Dnow
+ if(video->have_mmx)
+ {
+ switch(switcher)
+ {
+ case 0x3: reca_mmx(s, d, lx2, h); break;
+ case 0x2: recac_mmx(s, d, lx2, h); break;
+ case 0x1: rec_mmx(s, d, lx2, h); break;
+ case 0x0: recc_mmx(s, d, lx2, h); break;
+ case 0x7: recva_mmx(s, d, lx, lx2, h); break;
+ case 0x6: recvac_mmx(s, d, lx, lx2, h); break;
+ case 0x5: recv_mmx(s, d, lx, lx2, h); break;
+ case 0x4: recvc_mmx(s, d, lx, lx2, h); break;
+ case 0x9: rech_mmx(s, d, lx2, h); break;
+ case 0x8: rechc_mmx(s, d, lx2, h); break;
+ }
+ }
+ else
+#endif
+ {
+ switch(switcher)
+ {
+ case 0x3: reca(s, d, lx2, h); break;
+ case 0x2: recac(s, d, lx2, h); break;
+ case 0x1: rec(s, d, lx2, h); break;
+ case 0x0: recc(s, d, lx2, h); break;
+ case 0x7: recva(s, d, lx, lx2, h); break;
+ case 0x6: recvac(s, d, lx, lx2, h); break;
+ case 0x5: recv_(s, d, lx, lx2, h); break;
+ case 0x4: recvc(s, d, lx, lx2, h); break;
+ case 0x9: rech(s, d, lx2, h); break;
+ case 0x8: rechc(s, d, lx2, h); break;
+ }
+ }
+
+// Unaccelerated functions
+ switch(switcher)
+ {
+ case 0xb: recha(s, d, lx2, h); break;
+ case 0xa: rechac(s, d, lx2, h); break;
+ case 0xf: rec4a(s, d, lx, lx2, h); break;
+ case 0xe: rec4ac(s, d, lx, lx2, h); break;
+ case 0xd: rec4(s, d, lx, lx2, h); break;
+ case 0xc: rec4c(s, d, lx, lx2, h); break;
+ }
+}
+
+/*
+ unsigned char *src[]; * prediction source buffer *
+ int sfield; * prediction source field number (0 or 1) *
+ unsigned char *dst[]; * prediction destination buffer *
+ int dfield; * prediction destination field number (0 or 1)*
+ int lx,lx2; * horizontal offsets *
+ int w,h; * prediction block/sub-block width, height *
+ int x,y; * pixel co-ordinates of top-left sample in current MB *
+ int dx,dy; * horizontal, vertical motion vector *
+ int addflag; * add prediction error to prediction ? *
+*/
+static void recon(mpeg3video_t *video,
+ unsigned char *src[],
+ int sfield,
+ unsigned char *dst[],
+ int dfield,
+ int lx,
+ int lx2,
+ int w,
+ int h,
+ int x,
+ int y,
+ int dx,
+ int dy,
+ int addflag)
+{
+
+/* Y */
+ recon_comp(video, (src[0] + (sfield ? (lx2 >> 1) : 0)),
+ dst[0] + (dfield ? (lx2 >> 1) : 0),
+ lx, lx2, w, h, x, y, dx, dy, addflag);
+
+ if(video->chroma_format != CHROMA444)
+ {
+ lx >>= 1;
+ dx /= 2;
+ lx2 >>= 1;
+ w = 0;
+ x >>= 1;
+ }
+
+ if(video->chroma_format == CHROMA420)
+ {
+ h >>= 1;
+ dy /= 2;
+ y >>= 1;
+ }
+
+/* Cb */
+ recon_comp(video, (src[1] + (sfield ? (lx2 >> 1) : 0)),
+ dst[1] + (dfield ? (lx2 >> 1) : 0),
+ lx, lx2, w, h, x, y, dx, dy, addflag);
+
+/* Cr */
+ recon_comp(video, (src[2] + (sfield ? (lx2 >> 1) : 0)),
+ dst[2] + (dfield ? (lx2 >> 1) : 0),
+ lx, lx2, w, h, x, y, dx, dy, addflag);
+}
+
+#define WIDTH 1
+
+int mpeg3video_reconstruct(mpeg3video_t *video,
+ int bx,
+ int by,
+ int mb_type,
+ int motion_type,
+ int PMV[2][2][2],
+ int mv_field_sel[2][2],
+ int dmvector[2],
+ int stwtype)
+{
+ int currentfield;
+ unsigned char **predframe;
+ int DMV[2][2];
+ int stwtop, stwbot;
+
+ stwtop = stwtype % 3; /* 0:temporal, 1 : (spat+temp) / 2, 2 : spatial */
+ stwbot = stwtype / 3;
+
+ if((mb_type & MB_FORWARD) || (video->pict_type == P_TYPE))
+ {
+ if(video->pict_struct == FRAME_PICTURE)
+ {
+ if((motion_type == MC_FRAME) || !(mb_type & MB_FORWARD))
+ {
+/* frame-based prediction */
+ {
+ if(stwtop < 2)
+ recon(video, video->oldrefframe, 0, video->newframe, 0,
+ video->coded_picture_width, video->coded_picture_width << 1, WIDTH, 8, bx, by,
+ PMV[0][0][0], PMV[0][0][1], stwtop);
+
+ if(stwbot < 2)
+ recon(video, video->oldrefframe, 1, video->newframe, 1,
+ video->coded_picture_width, video->coded_picture_width << 1, WIDTH, 8, bx, by,
+ PMV[0][0][0], PMV[0][0][1], stwbot);
+ }
+ }
+ else if(motion_type == MC_FIELD) /* field-based prediction */
+ {
+/* top field prediction */
+ if(stwtop < 2)
+ recon(video, video->oldrefframe, mv_field_sel[0][0], video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by >> 1,
+ PMV[0][0][0], PMV[0][0][1] >> 1, stwtop);
+
+/* bottom field prediction */
+ if(stwbot < 2)
+ recon(video, video->oldrefframe, mv_field_sel[1][0], video->newframe, 1,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by >> 1,
+ PMV[1][0][0], PMV[1][0][1] >> 1, stwbot);
+ }
+ else if(motion_type == MC_DMV)
+ {
+/* dual prime prediction */
+/* calculate derived motion vectors */
+ mpeg3video_calc_dmv(video,
+ DMV,
+ dmvector,
+ PMV[0][0][0],
+ PMV[0][0][1] >> 1);
+
+ if(stwtop < 2)
+ {
+/* predict top field from top field */
+ recon(video, video->oldrefframe, 0, video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by>>1,
+ PMV[0][0][0], PMV[0][0][1] >> 1, 0);
+
+/* predict and add to top field from bottom field */
+ recon(video, video->oldrefframe, 1, video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by>>1,
+ DMV[0][0], DMV[0][1], 1);
+ }
+
+ if(stwbot < 2)
+ {
+/* predict bottom field from bottom field */
+ recon(video, video->oldrefframe, 1, video->newframe, 1,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by>>1,
+ PMV[0][0][0], PMV[0][0][1]>>1, 0);
+
+/* predict and add to bottom field from top field */
+ recon(video, video->oldrefframe, 0, video->newframe, 1,
+ video->coded_picture_width << 1, video->coded_picture_width<<1, WIDTH, 8, bx, by>>1,
+ DMV[1][0], DMV[1][1], 1);
+ }
+ }
+ else
+/* invalid motion_type */
+/* fprintf(stderr, "reconstruct: invalid motion_type\n"); */
+ ;
+ }
+ else
+ {
+/* TOP_FIELD or BOTTOM_FIELD */
+/* field picture */
+ currentfield = (video->pict_struct == BOTTOM_FIELD);
+
+/* determine which frame to use for prediction */
+ if((video->pict_type == P_TYPE) && video->secondfield
+ && (currentfield != mv_field_sel[0][0]))
+ predframe = video->refframe; /* same frame */
+ else
+ predframe = video->oldrefframe; /* previous frame */
+
+ if((motion_type == MC_FIELD) || !(mb_type & MB_FORWARD))
+ {
+/* field-based prediction */
+ if(stwtop < 2)
+ recon(video, predframe,mv_field_sel[0][0],video->newframe,0,
+ video->coded_picture_width << 1,video->coded_picture_width << 1,WIDTH,16,bx,by,
+ PMV[0][0][0],PMV[0][0][1],stwtop);
+ }
+ else
+ if(motion_type == MC_16X8)
+ {
+ if(stwtop < 2)
+ {
+ recon(video, predframe, mv_field_sel[0][0], video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by,
+ PMV[0][0][0], PMV[0][0][1], stwtop);
+
+ /* determine which frame to use for lower half prediction */
+ if((video->pict_type==P_TYPE) && video->secondfield
+ && (currentfield!=mv_field_sel[1][0]))
+ predframe = video->refframe; /* same frame */
+ else
+ predframe = video->oldrefframe; /* previous frame */
+
+ recon(video, predframe, mv_field_sel[1][0], video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by+8,
+ PMV[1][0][0], PMV[1][0][1], stwtop);
+ }
+ }
+ else
+ if(motion_type == MC_DMV) /* dual prime prediction */
+ {
+ if(video->secondfield)
+ predframe = video->refframe; /* same frame */
+ else
+ predframe = video->oldrefframe; /* previous frame */
+
+/* calculate derived motion vectors */
+ mpeg3video_calc_dmv(video,
+ DMV,
+ dmvector,
+ PMV[0][0][0],
+ PMV[0][0][1]);
+
+/* predict from field of same parity */
+ recon(video, video->oldrefframe, currentfield, video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 16, bx, by,
+ PMV[0][0][0], PMV[0][0][1], 0);
+
+/* predict from field of opposite parity */
+ recon(video, predframe, !currentfield, video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 16, bx, by,
+ DMV[0][0], DMV[0][1], 1);
+ }
+ else
+/* invalid motion_type */
+/* fprintf(stderr, "reconstruct: invalid motion_type\n"); */
+ ;
+ }
+ stwtop = stwbot = 1;
+ }
+
+ if(mb_type & MB_BACKWARD)
+ {
+ if(video->pict_struct == FRAME_PICTURE)
+ {
+ if(motion_type == MC_FRAME)
+ {
+/* frame-based prediction */
+ if(stwtop < 2)
+ recon(video, video->refframe, 0, video->newframe, 0,
+ video->coded_picture_width, video->coded_picture_width << 1, WIDTH, 8, bx, by,
+ PMV[0][1][0], PMV[0][1][1], stwtop);
+
+ if(stwbot < 2)
+ recon(video, video->refframe, 1, video->newframe, 1,
+ video->coded_picture_width, video->coded_picture_width << 1, WIDTH, 8, bx, by,
+ PMV[0][1][0], PMV[0][1][1], stwbot);
+ }
+ else
+ {
+/* field-based prediction */
+/* top field prediction */
+ if(stwtop < 2)
+ {
+ recon(video, video->refframe, mv_field_sel[0][1], video->newframe, 0,
+ (video->coded_picture_width << 1), (video->coded_picture_width<<1), WIDTH, 8, bx, (by >> 1),
+ PMV[0][1][0], (PMV[0][1][1] >> 1), stwtop);
+ }
+
+/* bottom field prediction */
+ if(stwbot < 2)
+ {
+ recon(video, video->refframe, mv_field_sel[1][1], video->newframe, 1, (video->coded_picture_width << 1),
+ (video->coded_picture_width << 1), WIDTH, 8, bx, (by>>1),
+ PMV[1][1][0], (PMV[1][1][1]>>1), stwbot);
+ }
+ }
+ }
+ else
+ {
+/* TOP_FIELD or BOTTOM_FIELD */
+/* field picture */
+ if(motion_type == MC_FIELD)
+ {
+/* field-based prediction */
+ recon(video, video->refframe, mv_field_sel[0][1], video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 16, bx, by,
+ PMV[0][1][0], PMV[0][1][1], stwtop);
+ }
+ else if(motion_type==MC_16X8)
+ {
+ recon(video, video->refframe, mv_field_sel[0][1], video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by,
+ PMV[0][1][0], PMV[0][1][1], stwtop);
+
+ recon(video, video->refframe, mv_field_sel[1][1], video->newframe, 0,
+ video->coded_picture_width << 1, video->coded_picture_width << 1, WIDTH, 8, bx, by+8,
+ PMV[1][1][0], PMV[1][1][1], stwtop);
+ }
+ else
+/* invalid motion_type */
+/* fprintf(stderr, "reconstruct: invalid motion_type\n"); */
+ ;
+ }
+ } /* mb_type & MB_BACKWARD */
+ return 0;
+}
+
+
diff --git a/core/multimedia/opieplayer/libmpeg3/video/seek.c b/core/multimedia/opieplayer/libmpeg3/video/seek.c
new file mode 100644
index 0000000..04faba4
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/seek.c
@@ -0,0 +1,233 @@
+#include "../mpeg3private.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+#include <stdlib.h>
+#include <string.h>
+
+unsigned int mpeg3bits_next_startcode(mpeg3_bits_t* stream)
+{
+/* Perform forwards search */
+ mpeg3bits_byte_align(stream);
+
+/* Perform search */
+ while((mpeg3bits_showbits32_noptr(stream) >> 8) != MPEG3_PACKET_START_CODE_PREFIX &&
+ !mpeg3bits_eof(stream))
+ {
+ mpeg3bits_getbyte_noptr(stream);
+ }
+ return mpeg3bits_showbits32_noptr(stream);
+}
+
+/* Line up on the beginning of the next code. */
+int mpeg3video_next_code(mpeg3_bits_t* stream, unsigned int code)
+{
+ while(!mpeg3bits_eof(stream) &&
+ mpeg3bits_showbits32_noptr(stream) != code)
+ {
+ mpeg3bits_getbyte_noptr(stream);
+ }
+ return mpeg3bits_eof(stream);
+}
+
+/* Line up on the beginning of the previous code. */
+int mpeg3video_prev_code(mpeg3_bits_t* stream, unsigned int code)
+{
+ while(!mpeg3bits_bof(stream) &&
+ mpeg3bits_showbits_reverse(stream, 32) != code)
+ {
+ mpeg3bits_getbits_reverse(stream, 8);
+ }
+ return mpeg3bits_bof(stream);
+}
+
+long mpeg3video_goptimecode_to_frame(mpeg3video_t *video)
+{
+/* printf("mpeg3video_goptimecode_to_frame %d %d %d %d %f\n", */
+/* video->gop_timecode.hour, video->gop_timecode.minute, video->gop_timecode.second, video->gop_timecode.frame, video->frame_rate); */
+ return (long)(video->gop_timecode.hour * 3600 * video->frame_rate +
+ video->gop_timecode.minute * 60 * video->frame_rate +
+ video->gop_timecode.second * video->frame_rate +
+ video->gop_timecode.frame) - 1 - video->first_frame;
+}
+
+int mpeg3video_match_refframes(mpeg3video_t *video)
+{
+ unsigned char *dst, *src;
+ int i, j, size;
+
+ for(i = 0; i < 3; i++)
+ {
+ if(video->newframe[i])
+ {
+ if(video->newframe[i] == video->refframe[i])
+ {
+ src = video->refframe[i];
+ dst = video->oldrefframe[i];
+ }
+ else
+ {
+ src = video->oldrefframe[i];
+ dst = video->refframe[i];
+ }
+
+ if(i == 0)
+ size = video->coded_picture_width * video->coded_picture_height + 32 * video->coded_picture_width;
+ else
+ size = video->chrom_width * video->chrom_height + 32 * video->chrom_width;
+
+ memcpy(dst, src, size);
+ }
+ }
+ return 0;
+}
+
+int mpeg3video_seek(mpeg3video_t *video)
+{
+ long this_gop_start;
+ int result = 0;
+ int back_step;
+ int attempts;
+ mpeg3_t *file = video->file;
+ mpeg3_bits_t *vstream = video->vstream;
+ double percentage;
+ long frame_number;
+ int match_refframes = 1;
+
+/* Seek to a percentage */
+ if(video->percentage_seek >= 0)
+ {
+ percentage = video->percentage_seek;
+ video->percentage_seek = -1;
+ mpeg3bits_seek_percentage(vstream, percentage);
+// Go to previous I-frame
+ mpeg3bits_start_reverse(vstream);
+ result = mpeg3video_prev_code(vstream, MPEG3_GOP_START_CODE);
+ if(!result) mpeg3bits_getbits_reverse(vstream, 32);
+ mpeg3bits_start_forward(vstream);
+
+ if(mpeg3bits_tell_percentage(vstream) < 0) mpeg3bits_seek_percentage(vstream, 0);
+
+// Read up to the correct percentage
+ result = 0;
+ while(!result && mpeg3bits_tell_percentage(vstream) < percentage)
+ {
+ result = mpeg3video_read_frame_backend(video, 0);
+ if(match_refframes)
+ mpeg3video_match_refframes(video);
+ match_refframes = 0;
+ }
+ }
+ else
+/* Seek to a frame */
+ if(video->frame_seek >= 0)
+ {
+ frame_number = video->frame_seek;
+ video->frame_seek = -1;
+ if(frame_number < 0) frame_number = 0;
+ if(frame_number > video->maxframe) frame_number = video->maxframe;
+
+/* Seek to start of file */
+ if(frame_number < 16)
+ {
+ video->repeat_count = video->current_repeat = 0;
+ mpeg3bits_seek_start(vstream);
+ video->framenum = 0;
+ result = mpeg3video_drop_frames(video, frame_number - video->framenum);
+ }
+ else
+ {
+/* Seek to an I frame. */
+ if((frame_number < video->framenum || frame_number - video->framenum > MPEG3_SEEK_THRESHOLD))
+ {
+/* Elementary stream */
+ if(file->is_video_stream)
+ {
+ mpeg3_t *file = video->file;
+ mpeg3_vtrack_t *track = video->track;
+ long byte = (long)((float)(mpeg3demuxer_total_bytes(vstream->demuxer) /
+ track->total_frames) *
+ frame_number);
+ long minimum = 65535;
+ int done = 0;
+
+//printf("seek elementary %d\n", frame_number);
+/* Get GOP just before frame */
+ do
+ {
+ result = mpeg3bits_seek_byte(vstream, byte);
+ mpeg3bits_start_reverse(vstream);
+ if(!result) result = mpeg3video_prev_code(vstream, MPEG3_GOP_START_CODE);
+ mpeg3bits_start_forward(vstream);
+ mpeg3bits_getbits(vstream, 8);
+ if(!result) result = mpeg3video_getgophdr(video);
+ this_gop_start = mpeg3video_goptimecode_to_frame(video);
+
+//printf("wanted %ld guessed %ld byte %ld result %d\n", frame_number, this_gop_start, byte, result);
+ if(labs(this_gop_start - frame_number) >= labs(minimum))
+ done = 1;
+ else
+ {
+ minimum = this_gop_start - frame_number;
+ byte += (long)((float)(frame_number - this_gop_start) *
+ (float)(mpeg3demuxer_total_bytes(vstream->demuxer) /
+ track->total_frames));
+ if(byte < 0) byte = 0;
+ }
+ }while(!result && !done);
+
+//printf("wanted %d guessed %d\n", frame_number, this_gop_start);
+ if(!result)
+ {
+ video->framenum = this_gop_start;
+ result = mpeg3video_drop_frames(video, frame_number - video->framenum);
+ }
+ }
+ else
+/* System stream */
+ {
+ mpeg3bits_seek_time(vstream, (double)frame_number / video->frame_rate);
+ percentage = mpeg3bits_tell_percentage(vstream);
+//printf("seek frame %ld percentage %f byte %ld\n", frame_number, percentage, mpeg3bits_tell(vstream));
+ mpeg3bits_start_reverse(vstream);
+ mpeg3video_prev_code(vstream, MPEG3_GOP_START_CODE);
+ mpeg3bits_getbits_reverse(vstream, 32);
+ mpeg3bits_start_forward(vstream);
+//printf("seek system 1 %f\n", (double)frame_number / video->frame_rate);
+
+ while(!result && mpeg3bits_tell_percentage(vstream) < percentage)
+ {
+ result = mpeg3video_read_frame_backend(video, 0);
+ if(match_refframes)
+ mpeg3video_match_refframes(video);
+
+//printf("seek system 2 %f %f\n", mpeg3bits_tell_percentage(vstream) / percentage);
+ match_refframes = 0;
+ }
+//printf("seek system 3 %f\n", (double)frame_number / video->frame_rate);
+ }
+
+ video->framenum = frame_number;
+ }
+ else
+// Drop frames
+ {
+ mpeg3video_drop_frames(video, frame_number - video->framenum);
+ }
+ }
+ }
+
+ return result;
+}
+
+int mpeg3video_drop_frames(mpeg3video_t *video, long frames)
+{
+ int result = 0;
+ long frame_number = video->framenum + frames;
+
+/* Read the selected number of frames and skip b-frames */
+ while(!result && frame_number > video->framenum)
+ {
+ result = mpeg3video_read_frame_backend(video, frame_number - video->framenum);
+ }
+ return result;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/slice.c b/core/multimedia/opieplayer/libmpeg3/video/slice.c
new file mode 100644
index 0000000..90891b0
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/slice.c
@@ -0,0 +1,702 @@
+#include "../libmpeg3.h"
+#include "../mpeg3protos.h"
+#include "mpeg3video.h"
+#include "mpeg3videoprotos.h"
+#include "slice.h"
+
+#include <stdlib.h>
+
+static ULONGLONG MMX_128 = 0x80008000800080LL;
+
+int mpeg3_new_slice_buffer(mpeg3_slice_buffer_t *slice_buffer)
+{
+ pthread_mutexattr_t mutex_attr;
+ slice_buffer->data = (unsigned char*)malloc(1024);
+ slice_buffer->buffer_size = 0;
+ slice_buffer->buffer_allocation = 1024;
+ slice_buffer->current_position = 0;
+ slice_buffer->bits_size = 0;
+ slice_buffer->bits = 0;
+ slice_buffer->done = 0;
+ pthread_mutexattr_init(&mutex_attr);
+ pthread_mutex_init(&(slice_buffer->completion_lock), &mutex_attr);
+ return 0;
+}
+
+int mpeg3_delete_slice_buffer(mpeg3_slice_buffer_t *slice_buffer)
+{
+ free(slice_buffer->data);
+ pthread_mutex_destroy(&(slice_buffer->completion_lock));
+ return 0;
+}
+
+int mpeg3_expand_slice_buffer(mpeg3_slice_buffer_t *slice_buffer)
+{
+ int i;
+ unsigned char *new_buffer =
+ (unsigned char*)malloc(slice_buffer->buffer_allocation * 2);
+ for(i = 0; i < slice_buffer->buffer_size; i++)
+ new_buffer[i] = slice_buffer->data[i];
+ free(slice_buffer->data);
+ slice_buffer->data = new_buffer;
+ slice_buffer->buffer_allocation *= 2;
+ return 0;
+}
+
+/* limit coefficients to -2048..2047 */
+
+/* move/add 8x8-Block from block[comp] to refframe */
+
+static inline int mpeg3video_addblock(mpeg3_slice_t *slice,
+ mpeg3video_t *video,
+ int comp,
+ int bx,
+ int by,
+ int dct_type,
+ int addflag)
+{
+ int cc, i, iincr;
+ unsigned char *rfp;
+ short *bp;
+ int spar = slice->sparse[comp];
+/* color component index */
+ cc = (comp < 4) ? 0 : (comp & 1) + 1;
+
+ if(cc == 0)
+ {
+/* luminance */
+ if(video->pict_struct == FRAME_PICTURE)
+ {
+ if(dct_type)
+ {
+/* field DCT coding */
+ rfp = video->newframe[0] +
+ video->coded_picture_width * (by + ((comp & 2) >> 1)) + bx + ((comp & 1) << 3);
+ iincr = (video->coded_picture_width << 1);
+ }
+ else
+ {
+/* frame DCT coding */
+ rfp = video->newframe[0] +
+ video->coded_picture_width * (by + ((comp & 2) << 2)) + bx + ((comp & 1) << 3);
+ iincr = video->coded_picture_width;
+ }
+ }
+ else
+ {
+/* field picture */
+ rfp = video->newframe[0] +
+ (video->coded_picture_width << 1) * (by + ((comp & 2) << 2)) + bx + ((comp & 1) << 3);
+ iincr = (video->coded_picture_width << 1);
+ }
+ }
+ else
+ {
+/* chrominance */
+
+/* scale coordinates */
+ if(video->chroma_format != CHROMA444) bx >>= 1;
+ if(video->chroma_format == CHROMA420) by >>= 1;
+ if(video->pict_struct == FRAME_PICTURE)
+ {
+ if(dct_type && (video->chroma_format != CHROMA420))
+ {
+/* field DCT coding */
+ rfp = video->newframe[cc]
+ + video->chrom_width * (by + ((comp & 2) >> 1)) + bx + (comp & 8);
+ iincr = (video->chrom_width << 1);
+ }
+ else
+ {
+/* frame DCT coding */
+ rfp = video->newframe[cc]
+ + video->chrom_width * (by + ((comp & 2) << 2)) + bx + (comp & 8);
+ iincr = video->chrom_width;
+ }
+ }
+ else
+ {
+/* field picture */
+ rfp = video->newframe[cc]
+ + (video->chrom_width << 1) * (by + ((comp & 2) << 2)) + bx + (comp & 8);
+ iincr = (video->chrom_width << 1);
+ }
+ }
+
+ bp = slice->block[comp];
+
+ if(addflag)
+ {
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ {
+ if(spar)
+ {
+ __asm__ __volatile__(
+ "movq (%2), %%mm6\n" /* 4 blockvals */
+ "pxor %%mm4, %%mm4\n"
+ "punpcklwd %%mm6, %%mm6\n"
+ "punpcklwd %%mm6, %%mm6\n"
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n" /* 8 rindex1 */
+ "movq %%mm0, %%mm2\n"
+ "punpcklbw %%mm4, %%mm0\n"
+ "punpckhbw %%mm4, %%mm2\n"
+ "paddw %%mm6, %%mm0\n"
+ "paddw %%mm6, %%mm2\n"
+
+ "packuswb %%mm2, %%mm0\n"
+ "movq %%mm0, (%1)\n"
+
+ "leal (%1, %3), %1\n"
+ "loop 1b\n"
+ : /* scr dest */
+ : "c" (8),"r" (rfp), "r" (bp), "r" (iincr)
+ );
+ }
+ else
+ {
+ __asm__ __volatile__(
+ "pxor %%mm4, %%mm4\n"
+
+ ".align 8\n"
+ "1:"
+ "movq (%2), %%mm0\n" /* 8 rfp 0 1 2 3 4 5 6 7*/
+ "movq (%1), %%mm6\n" /* 4 blockvals 0 1 2 3 */
+
+ "movq %%mm0, %%mm2\n"
+ "movq 8(%1), %%mm5\n" /* 4 blockvals 0 1 2 3 */
+ "punpcklbw %%mm4, %%mm0\n" /* 0 2 4 6 */
+ "punpckhbw %%mm4, %%mm2\n" /* 1 3 5 7 */
+
+ "paddw %%mm6, %%mm0\n"
+ "paddw %%mm5, %%mm2\n"
+ "packuswb %%mm2, %%mm0\n"
+
+ "addl $16, %1\n"
+ "movq %%mm0, (%2)\n"
+
+ "leal (%2,%3), %2\n"
+ "loop 1b\n"
+ : /* scr dest */
+ : "c" (8),"r" (bp), "r" (rfp), "r" (iincr)
+ );
+ }
+ }
+ else
+#endif
+ for(i = 0; i < 8; i++)
+ {
+ rfp[0] = CLIP(bp[0] + rfp[0]);
+ rfp[1] = CLIP(bp[1] + rfp[1]);
+ rfp[2] = CLIP(bp[2] + rfp[2]);
+ rfp[3] = CLIP(bp[3] + rfp[3]);
+ rfp[4] = CLIP(bp[4] + rfp[4]);
+ rfp[5] = CLIP(bp[5] + rfp[5]);
+ rfp[6] = CLIP(bp[6] + rfp[6]);
+ rfp[7] = CLIP(bp[7] + rfp[7]);
+ rfp += iincr;
+ bp += 8;
+ }
+ }
+ else
+ {
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ {
+ if(spar)
+ {
+ __asm__ __volatile__(
+ "movd (%2), %%mm0\n" /* " 0 0 0 v1" */
+ "punpcklwd %%mm0, %%mm0\n" /* " 0 0 v1 v1" */
+ "punpcklwd %%mm0, %%mm0\n"
+ "paddw MMX_128, %%mm0\n"
+ "packuswb %%mm0, %%mm0\n"
+ "leal (%0,%1,2), %%eax\n"
+
+ "movq %%mm0, (%0, %1)\n"
+ "movq %%mm0, (%%eax)\n"
+ "leal (%%eax,%1,2), %0\n"
+ "movq %%mm0, (%%eax, %1)\n"
+
+ "movq %%mm0, (%0)\n"
+ "leal (%0,%1,2), %%eax\n"
+ "movq %%mm0, (%0, %1)\n"
+
+ "movq %%mm0, (%%eax)\n"
+ "movq %%mm0, (%%eax, %1)\n"
+ :
+ : "D" (rfp), "c" (iincr), "b" (bp)
+ : "eax");
+ }
+ else
+ {
+ __asm__ __volatile__(
+ "movq MMX_128,%%mm4\n"
+ ".align 8\n"
+ "1:"
+ "movq (%1), %%mm0\n"
+ "movq 8(%1), %%mm1\n"
+ "paddw %%mm4, %%mm0\n"
+
+ "movq 16(%1), %%mm2\n"
+ "paddw %%mm4, %%mm1\n"
+
+ "movq 24(%1), %%mm3\n"
+ "paddw %%mm4, %%mm2\n"
+
+ "packuswb %%mm1, %%mm0\n"
+ "paddw %%mm4, %%mm3\n"
+
+ "addl $32, %1\n"
+ "packuswb %%mm3, %%mm2\n"
+
+ "movq %%mm0, (%2)\n"
+
+ "movq %%mm2, (%2,%3)\n"
+
+ "leal (%2,%3,2), %2\n"
+ "loop 1b\n"
+ :
+ : "c" (4), "r" (bp), "r" (rfp), "r" (iincr)
+ );
+ }
+ }
+ else
+#endif
+ for(i = 0; i < 8; i++)
+ {
+ rfp[0] = CLIP(bp[0] + 128);
+ rfp[1] = CLIP(bp[1] + 128);
+ rfp[2] = CLIP(bp[2] + 128);
+ rfp[3] = CLIP(bp[3] + 128);
+ rfp[4] = CLIP(bp[4] + 128);
+ rfp[5] = CLIP(bp[5] + 128);
+ rfp[6] = CLIP(bp[6] + 128);
+ rfp[7] = CLIP(bp[7] + 128);
+ rfp+= iincr;
+ bp += 8;
+ }
+ }
+ return 0;
+}
+
+int mpeg3_decode_slice(mpeg3_slice_t *slice)
+{
+ mpeg3video_t *video = slice->video;
+ int comp;
+ int mb_type, cbp, motion_type = 0, dct_type;
+ int macroblock_address, mba_inc, mba_max;
+ int slice_vert_pos_ext;
+ unsigned int code;
+ int bx, by;
+ int dc_dct_pred[3];
+ int mv_count, mv_format, mvscale;
+ int pmv[2][2][2], mv_field_sel[2][2];
+ int dmv, dmvector[2];
+ int qs;
+ int stwtype, stwclass;
+ int snr_cbp;
+ int i;
+ mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer;
+
+/* number of macroblocks per picture */
+ mba_max = video->mb_width * video->mb_height;
+
+/* field picture has half as many macroblocks as frame */
+ if(video->pict_struct != FRAME_PICTURE)
+ mba_max >>= 1;
+
+/* macroblock address */
+ macroblock_address = 0;
+/* first macroblock in slice is not skipped */
+ mba_inc = 0;
+ slice->fault = 0;
+
+ code = mpeg3slice_getbits(slice_buffer, 32);
+/* decode slice header (may change quant_scale) */
+ slice_vert_pos_ext = mpeg3video_getslicehdr(slice, video);
+
+/* reset all DC coefficient and motion vector predictors */
+ dc_dct_pred[0] = dc_dct_pred[1] = dc_dct_pred[2] = 0;
+ pmv[0][0][0] = pmv[0][0][1] = pmv[1][0][0] = pmv[1][0][1] = 0;
+ pmv[0][1][0] = pmv[0][1][1] = pmv[1][1][0] = pmv[1][1][1] = 0;
+
+ for(i = 0;
+ slice_buffer->current_position < slice_buffer->buffer_size;
+ i++)
+ {
+ if(mba_inc == 0)
+ {
+/* Done */
+ if(!mpeg3slice_showbits(slice_buffer, 23)) return 0;
+/* decode macroblock address increment */
+ mba_inc = mpeg3video_get_macroblock_address(slice);
+
+ if(slice->fault) return 1;
+
+ if(i == 0)
+ {
+/* Get the macroblock_address */
+ macroblock_address = ((slice_vert_pos_ext << 7) + (code & 255) - 1) * video->mb_width + mba_inc - 1;
+/* first macroblock in slice: not skipped */
+ mba_inc = 1;
+ }
+ }
+
+ if(slice->fault) return 1;
+
+ if(macroblock_address >= mba_max)
+ {
+/* mba_inc points beyond picture dimensions */
+ /*fprintf(stderr, "mpeg3_decode_slice: too many macroblocks in picture\n"); */
+ return 1;
+ }
+
+/* not skipped */
+ if(mba_inc == 1)
+ {
+ mpeg3video_macroblock_modes(slice,
+ video,
+ &mb_type,
+ &stwtype,
+ &stwclass,
+ &motion_type,
+ &mv_count,
+ &mv_format,
+ &dmv,
+ &mvscale,
+ &dct_type);
+
+ if(slice->fault) return 1;
+
+ if(mb_type & MB_QUANT)
+ {
+ qs = mpeg3slice_getbits(slice_buffer, 5);
+
+ if(video->mpeg2)
+ slice->quant_scale = video->qscale_type ? mpeg3_non_linear_mquant_table[qs] : (qs << 1);
+ else
+ slice->quant_scale = qs;
+
+ if(video->scalable_mode == SC_DP)
+/* make sure quant_scale is valid */
+ slice->quant_scale = slice->quant_scale;
+ }
+
+/* motion vectors */
+
+
+/* decode forward motion vectors */
+ if((mb_type & MB_FORWARD) || ((mb_type & MB_INTRA) && video->conceal_mv))
+ {
+ if(video->mpeg2)
+ mpeg3video_motion_vectors(slice,
+ video,
+ pmv,
+ dmvector,
+ mv_field_sel,
+ 0,
+ mv_count,
+ mv_format,
+ video->h_forw_r_size,
+ video->v_forw_r_size,
+ dmv,
+ mvscale);
+ else
+ mpeg3video_motion_vector(slice,
+ video,
+ pmv[0][0],
+ dmvector,
+ video->forw_r_size,
+ video->forw_r_size,
+ 0,
+ 0,
+ video->full_forw);
+ }
+ if(slice->fault) return 1;
+
+/* decode backward motion vectors */
+ if(mb_type & MB_BACKWARD)
+ {
+ if(video->mpeg2)
+ mpeg3video_motion_vectors(slice,
+ video,
+ pmv,
+ dmvector,
+ mv_field_sel,
+ 1,
+ mv_count,
+ mv_format,
+ video->h_back_r_size,
+ video->v_back_r_size,
+ 0,
+ mvscale);
+ else
+ mpeg3video_motion_vector(slice,
+ video,
+ pmv[0][1],
+ dmvector,
+ video->back_r_size,
+ video->back_r_size,
+ 0,
+ 0,
+ video->full_back);
+ }
+
+ if(slice->fault) return 1;
+
+/* remove marker_bit */
+ if((mb_type & MB_INTRA) && video->conceal_mv)
+ mpeg3slice_flushbit(slice_buffer);
+
+/* macroblock_pattern */
+ if(mb_type & MB_PATTERN)
+ {
+ cbp = mpeg3video_get_cbp(slice);
+ if(video->chroma_format == CHROMA422)
+ {
+/* coded_block_pattern_1 */
+ cbp = (cbp << 2) | mpeg3slice_getbits2(slice_buffer);
+ }
+ else
+ if(video->chroma_format == CHROMA444)
+ {
+/* coded_block_pattern_2 */
+ cbp = (cbp << 6) | mpeg3slice_getbits(slice_buffer, 6);
+ }
+ }
+ else
+ cbp = (mb_type & MB_INTRA) ? ((1 << video->blk_cnt) - 1) : 0;
+
+ if(slice->fault) return 1;
+/* decode blocks */
+ mpeg3video_clearblock(slice, 0, video->blk_cnt);
+ for(comp = 0; comp < video->blk_cnt; comp++)
+ {
+ if(cbp & (1 << (video->blk_cnt - comp - 1)))
+ {
+ if(mb_type & MB_INTRA)
+ {
+ if(video->mpeg2)
+ mpeg3video_getmpg2intrablock(slice, video, comp, dc_dct_pred);
+ else
+ mpeg3video_getintrablock(slice, video, comp, dc_dct_pred);
+ }
+ else
+ {
+ if(video->mpeg2)
+ mpeg3video_getmpg2interblock(slice, video, comp);
+ else
+ mpeg3video_getinterblock(slice, video, comp);
+ }
+ if(slice->fault) return 1;
+ }
+ }
+
+/* reset intra_dc predictors */
+ if(!(mb_type & MB_INTRA))
+ dc_dct_pred[0] = dc_dct_pred[1] = dc_dct_pred[2] = 0;
+
+/* reset motion vector predictors */
+ if((mb_type & MB_INTRA) && !video->conceal_mv)
+ {
+/* intra mb without concealment motion vectors */
+ pmv[0][0][0] = pmv[0][0][1] = pmv[1][0][0] = pmv[1][0][1] = 0;
+ pmv[0][1][0] = pmv[0][1][1] = pmv[1][1][0] = pmv[1][1][1] = 0;
+ }
+
+ if((video->pict_type == P_TYPE) && !(mb_type & (MB_FORWARD | MB_INTRA)))
+ {
+/* non-intra mb without forward mv in a P picture */
+ pmv[0][0][0] = pmv[0][0][1] = pmv[1][0][0] = pmv[1][0][1] = 0;
+
+/* derive motion_type */
+ if(video->pict_struct == FRAME_PICTURE)
+ motion_type = MC_FRAME;
+ else
+ {
+ motion_type = MC_FIELD;
+/* predict from field of same parity */
+ mv_field_sel[0][0] = (video->pict_struct == BOTTOM_FIELD);
+ }
+ }
+
+ if(stwclass == 4)
+ {
+/* purely spatially predicted macroblock */
+ pmv[0][0][0] = pmv[0][0][1] = pmv[1][0][0] = pmv[1][0][1] = 0;
+ pmv[0][1][0] = pmv[0][1][1] = pmv[1][1][0] = pmv[1][1][1] = 0;
+ }
+ }
+ else
+ {
+/* mba_inc!=1: skipped macroblock */
+ mpeg3video_clearblock(slice, 0, video->blk_cnt);
+
+/* reset intra_dc predictors */
+ dc_dct_pred[0] = dc_dct_pred[1] = dc_dct_pred[2] = 0;
+
+/* reset motion vector predictors */
+ if(video->pict_type == P_TYPE)
+ pmv[0][0][0] = pmv[0][0][1] = pmv[1][0][0] = pmv[1][0][1] = 0;
+
+/* derive motion_type */
+ if(video->pict_struct == FRAME_PICTURE)
+ motion_type = MC_FRAME;
+ else
+ {
+ motion_type = MC_FIELD;
+/* predict from field of same parity */
+ mv_field_sel[0][0] = mv_field_sel[0][1] = (video->pict_struct == BOTTOM_FIELD);
+ }
+
+/* skipped I are spatial-only predicted, */
+/* skipped P and B are temporal-only predicted */
+ stwtype = (video->pict_type == I_TYPE) ? 8 : 0;
+
+/* clear MB_INTRA */
+ mb_type &= ~MB_INTRA;
+
+/* no block data */
+ cbp = 0;
+ }
+
+ snr_cbp = 0;
+
+/* pixel coordinates of top left corner of current macroblock */
+ bx = 16 * (macroblock_address % video->mb_width);
+ by = 16 * (macroblock_address / video->mb_width);
+
+/* motion compensation */
+ if(!(mb_type & MB_INTRA))
+ mpeg3video_reconstruct(video,
+ bx,
+ by,
+ mb_type,
+ motion_type,
+ pmv,
+ mv_field_sel,
+ dmvector,
+ stwtype);
+
+/* copy or add block data into picture */
+ for(comp = 0; comp < video->blk_cnt; comp++)
+ {
+ if((cbp | snr_cbp) & (1 << (video->blk_cnt - 1 - comp)))
+ {
+#ifdef HAVE_MMX
+ if(video->have_mmx)
+ IDCT_mmx(slice->block[comp]);
+ else
+#endif
+ mpeg3video_idct_conversion(slice->block[comp]);
+
+ mpeg3video_addblock(slice,
+ video,
+ comp,
+ bx,
+ by,
+ dct_type,
+ (mb_type & MB_INTRA) == 0);
+ }
+ }
+
+/* advance to next macroblock */
+ macroblock_address++;
+ mba_inc--;
+ }
+
+ return 0;
+}
+
+void mpeg3_slice_loop(mpeg3_slice_t *slice)
+{
+ mpeg3video_t *video = slice->video;
+ int result = 1;
+
+ while(!slice->done)
+ {
+ pthread_mutex_lock(&(slice->input_lock));
+
+ if(!slice->done)
+ {
+/* Get a buffer to decode */
+ result = 1;
+ pthread_mutex_lock(&(video->slice_lock));
+ if(slice->buffer_step > 0)
+ {
+ while(slice->current_buffer <= slice->last_buffer)
+ {
+ if(!video->slice_buffers[slice->current_buffer].done &&
+ slice->current_buffer <= slice->last_buffer)
+ {
+ result = 0;
+ break;
+ }
+ slice->current_buffer += slice->buffer_step;
+ }
+ }
+ else
+ {
+ while(slice->current_buffer >= slice->last_buffer)
+ {
+ if(!video->slice_buffers[slice->current_buffer].done &&
+ slice->current_buffer >= slice->last_buffer)
+ {
+ result = 0;
+ break;
+ }
+ slice->current_buffer += slice->buffer_step;
+ }
+ }
+
+/* Got one */
+ if(!result && slice->current_buffer >= 0 && slice->current_buffer < video->total_slice_buffers)
+ {
+ slice->slice_buffer = &(video->slice_buffers[slice->current_buffer]);
+ slice->slice_buffer->done = 1;
+ pthread_mutex_unlock(&(video->slice_lock));
+ pthread_mutex_unlock(&(slice->input_lock));
+ mpeg3_decode_slice(slice);
+ pthread_mutex_unlock(&(slice->slice_buffer->completion_lock));
+ }
+ else
+ pthread_mutex_unlock(&(video->slice_lock));
+ }
+
+ pthread_mutex_unlock(&(slice->output_lock));
+ }
+}
+
+int mpeg3_new_slice_decoder(mpeg3video_t *video, mpeg3_slice_t *slice)
+{
+ pthread_attr_t attr;
+ //struct sched_param param;
+ pthread_mutexattr_t mutex_attr;
+
+ slice->video = video;
+ slice->done = 0;
+ pthread_mutexattr_init(&mutex_attr);
+ pthread_mutex_init(&(slice->input_lock), &mutex_attr);
+ pthread_mutex_lock(&(slice->input_lock));
+ pthread_mutex_init(&(slice->output_lock), &mutex_attr);
+ pthread_mutex_lock(&(slice->output_lock));
+
+ pthread_attr_init(&attr);
+ pthread_create(&(slice->tid), &attr,
+ (void * (*)(void *))mpeg3_slice_loop, slice);
+
+ return 0;
+}
+
+int mpeg3_delete_slice_decoder(mpeg3_slice_t *slice)
+{
+ slice->done = 1;
+ pthread_mutex_unlock(&(slice->input_lock));
+ pthread_join(slice->tid, 0);
+ pthread_mutex_destroy(&(slice->input_lock));
+ pthread_mutex_destroy(&(slice->output_lock));
+ return 0;
+}
diff --git a/core/multimedia/opieplayer/libmpeg3/video/slice.h b/core/multimedia/opieplayer/libmpeg3/video/slice.h
new file mode 100644
index 0000000..e36ffef
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/slice.h
@@ -0,0 +1,194 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef SLICE_H
+#define SLICE_H
+
+#ifndef _WIN32
+#include <pthread.h>
+#endif
+
+/* Array of these feeds the slice decoders */
+typedef struct
+{
+ unsigned char *data; /* Buffer for holding the slice data */
+ int buffer_size; /* Size of buffer */
+ int buffer_allocation; /* Space allocated for buffer */
+ int current_position; /* Position in buffer */
+ unsigned MPEG3_INT32 bits;
+ int bits_size;
+ pthread_mutex_t completion_lock; /* Lock slice until completion */
+ int done; /* Signal for slice decoder to skip */
+} mpeg3_slice_buffer_t;
+
+/* Each slice decoder */
+typedef struct
+{
+ struct mpeg3video_rec *video;
+ mpeg3_slice_buffer_t *slice_buffer;
+
+ int thread_number; /* Number of this thread */
+ int current_buffer; /* Buffer this slice decoder is on */
+ int buffer_step; /* Number of buffers to skip */
+ int last_buffer; /* Last buffer this decoder should process */
+ int fault;
+ int done;
+ int quant_scale;
+ int pri_brk; /* slice/macroblock */
+ short block[12][64];
+ int sparse[12];
+ pthread_t tid; /* ID of thread */
+ pthread_mutex_t input_lock, output_lock;
+} mpeg3_slice_t;
+
+#define mpeg3slice_fillbits(buffer, nbits) \
+ while(((mpeg3_slice_buffer_t*)(buffer))->bits_size < (nbits)) \
+ { \
+ if(((mpeg3_slice_buffer_t*)(buffer))->current_position < ((mpeg3_slice_buffer_t*)(buffer))->buffer_size) \
+ { \
+ ((mpeg3_slice_buffer_t*)(buffer))->bits <<= 8; \
+ ((mpeg3_slice_buffer_t*)(buffer))->bits |= ((mpeg3_slice_buffer_t*)(buffer))->data[((mpeg3_slice_buffer_t*)(buffer))->current_position++]; \
+ } \
+ ((mpeg3_slice_buffer_t*)(buffer))->bits_size += 8; \
+ }
+
+#define mpeg3slice_flushbits(buffer, nbits) \
+ { \
+ mpeg3slice_fillbits((buffer), (nbits)); \
+ ((mpeg3_slice_buffer_t*)(buffer))->bits_size -= (nbits); \
+ }
+
+#define mpeg3slice_flushbit(buffer) \
+{ \
+ if(((mpeg3_slice_buffer_t*)(buffer))->bits_size) \
+ ((mpeg3_slice_buffer_t*)(buffer))->bits_size--; \
+ else \
+ if(((mpeg3_slice_buffer_t*)(buffer))->current_position < ((mpeg3_slice_buffer_t*)(buffer))->buffer_size) \
+ { \
+ ((mpeg3_slice_buffer_t*)(buffer))->bits = \
+ ((mpeg3_slice_buffer_t*)(buffer))->data[((mpeg3_slice_buffer_t*)(buffer))->current_position++]; \
+ ((mpeg3_slice_buffer_t*)(buffer))->bits_size = 7; \
+ } \
+}
+
+extern inline unsigned int mpeg3slice_getbit(mpeg3_slice_buffer_t *buffer)
+{
+ if(buffer->bits_size)
+ return (buffer->bits >> (--buffer->bits_size)) & 0x1;
+ else
+ if(buffer->current_position < buffer->buffer_size)
+ {
+ buffer->bits = buffer->data[buffer->current_position++];
+ buffer->bits_size = 7;
+ return (buffer->bits >> 7) & 0x1;
+ }
+ return 0; // WWA - stop warn
+}
+
+extern inline unsigned int mpeg3slice_getbits2(mpeg3_slice_buffer_t *buffer)
+{
+ if(buffer->bits_size >= 2)
+ return (buffer->bits >> (buffer->bits_size -= 2)) & 0x3;
+ else
+ if(buffer->current_position < buffer->buffer_size)
+ {
+ buffer->bits <<= 8;
+ buffer->bits |= buffer->data[buffer->current_position++];
+ buffer->bits_size += 6;
+ return (buffer->bits >> buffer->bits_size) & 0x3;
+ }
+ return 0; // WWA - stop warn
+}
+
+extern inline unsigned int mpeg3slice_getbyte(mpeg3_slice_buffer_t *buffer)
+{
+ if(buffer->bits_size >= 8)
+ return (buffer->bits >> (buffer->bits_size -= 8)) & 0xff;
+ else
+ if(buffer->current_position < buffer->buffer_size)
+ {
+ buffer->bits <<= 8;
+ buffer->bits |= buffer->data[buffer->current_position++];
+ return (buffer->bits >> buffer->bits_size) & 0xff;
+ }
+ return 0; // WWA - stop warn
+}
+
+
+extern inline unsigned int mpeg3slice_getbits(mpeg3_slice_buffer_t *slice_buffer, int bits)
+{
+ if(bits == 1) return mpeg3slice_getbit(slice_buffer);
+ mpeg3slice_fillbits(slice_buffer, bits);
+ return (slice_buffer->bits >> (slice_buffer->bits_size -= bits)) & (0xffffffff >> (32 - bits));
+}
+
+extern inline unsigned int mpeg3slice_showbits16(mpeg3_slice_buffer_t *buffer)
+{
+ if(buffer->bits_size >= 16)
+ return (buffer->bits >> (buffer->bits_size - 16)) & 0xffff;
+ else
+ if(buffer->current_position < buffer->buffer_size)
+ {
+ buffer->bits <<= 16;
+ buffer->bits_size += 16;
+ buffer->bits |= (unsigned int)buffer->data[buffer->current_position++] << 8;
+ buffer->bits |= buffer->data[buffer->current_position++];
+ return (buffer->bits >> (buffer->bits_size - 16)) & 0xffff;
+ }
+ return 0; // WWA - stop warn
+}
+
+extern inline unsigned int mpeg3slice_showbits9(mpeg3_slice_buffer_t *buffer)
+{
+ if(buffer->bits_size >= 9)
+ return (buffer->bits >> (buffer->bits_size - 9)) & 0x1ff;
+ else
+ if(buffer->current_position < buffer->buffer_size)
+ {
+ buffer->bits <<= 16;
+ buffer->bits_size += 16;
+ buffer->bits |= (unsigned int)buffer->data[buffer->current_position++] << 8;
+ buffer->bits |= buffer->data[buffer->current_position++];
+ return (buffer->bits >> (buffer->bits_size - 9)) & 0x1ff;
+ }
+ return 0; // WWA - stop warn
+}
+
+extern inline unsigned int mpeg3slice_showbits5(mpeg3_slice_buffer_t *buffer)
+{
+ if(buffer->bits_size >= 5)
+ return (buffer->bits >> (buffer->bits_size - 5)) & 0x1f;
+ else
+ if(buffer->current_position < buffer->buffer_size)
+ {
+ buffer->bits <<= 8;
+ buffer->bits_size += 8;
+ buffer->bits |= buffer->data[buffer->current_position++];
+ return (buffer->bits >> (buffer->bits_size - 5)) & 0x1f;
+ }
+ return 0; // WWA - stop warn
+}
+
+extern inline unsigned int mpeg3slice_showbits(mpeg3_slice_buffer_t *slice_buffer, int bits)
+{
+ mpeg3slice_fillbits(slice_buffer, bits);
+ return (slice_buffer->bits >> (slice_buffer->bits_size - bits)) & (0xffffffff >> (32 - bits));
+}
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/video/vlc.c b/core/multimedia/opieplayer/libmpeg3/video/vlc.c
new file mode 100644
index 0000000..4328d8a
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/vlc.c
@@ -0,0 +1,421 @@
+#include "mpeg3video.h"
+#include "vlc.h"
+
+/* variable length code tables */
+
+/* Table B-3, mb_type in P-pictures, codes 001..1xx */
+mpeg3_VLCtab_t mpeg3_PMBtab0[8] = {
+ {ERROR,0},
+ {MB_FORWARD,3},
+ {MB_PATTERN,2}, {MB_PATTERN,2},
+ {MB_FORWARD|MB_PATTERN,1}, {MB_FORWARD|MB_PATTERN,1},
+ {MB_FORWARD|MB_PATTERN,1}, {MB_FORWARD|MB_PATTERN,1}
+};
+
+/* Table B-3, mb_type in P-pictures, codes 000001..00011x */
+mpeg3_VLCtab_t mpeg3_PMBtab1[8] = {
+ {ERROR,0},
+ {MB_QUANT|MB_INTRA,6},
+ {MB_QUANT|MB_PATTERN,5}, {MB_QUANT|MB_PATTERN,5},
+ {MB_QUANT|MB_FORWARD|MB_PATTERN,5}, {MB_QUANT|MB_FORWARD|MB_PATTERN,5},
+ {MB_INTRA,5}, {MB_INTRA,5}
+};
+
+/* Table B-4, mb_type in B-pictures, codes 0010..11xx */
+mpeg3_VLCtab_t mpeg3_BMBtab0[16] = {
+ {ERROR,0}, {ERROR,0},
+ {MB_FORWARD,4},
+ {MB_FORWARD|MB_PATTERN,4},
+ {MB_BACKWARD,3}, {MB_BACKWARD,3},
+ {MB_BACKWARD|MB_PATTERN,3}, {MB_BACKWARD|MB_PATTERN,3},
+ {MB_FORWARD|MB_BACKWARD,2}, {MB_FORWARD|MB_BACKWARD,2},
+ {MB_FORWARD|MB_BACKWARD,2}, {MB_FORWARD|MB_BACKWARD,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2}
+};
+
+/* Table B-4, mb_type in B-pictures, codes 000001..00011x */
+mpeg3_VLCtab_t mpeg3_BMBtab1[8] = {
+ {ERROR,0},
+ {MB_QUANT|MB_INTRA,6},
+ {MB_QUANT|MB_BACKWARD|MB_PATTERN,6},
+ {MB_QUANT|MB_FORWARD|MB_PATTERN,6},
+ {MB_QUANT|MB_FORWARD|MB_BACKWARD|MB_PATTERN,5},
+ {MB_QUANT|MB_FORWARD|MB_BACKWARD|MB_PATTERN,5},
+ {MB_INTRA,5}, {MB_INTRA,5}
+};
+
+/* Table B-5, mb_type in spat. scal. I-pictures, codes 0001..1xxx */
+mpeg3_VLCtab_t mpeg3_spIMBtab[16] = {
+ {ERROR,0},
+ {MB_CLASS4,4},
+ {MB_QUANT|MB_INTRA,4},
+ {MB_INTRA,4},
+ {MB_CLASS4|MB_QUANT|MB_PATTERN,2}, {MB_CLASS4|MB_QUANT|MB_PATTERN,2},
+ {MB_CLASS4|MB_QUANT|MB_PATTERN,2}, {MB_CLASS4|MB_QUANT|MB_PATTERN,2},
+ {MB_CLASS4|MB_PATTERN,1}, {MB_CLASS4|MB_PATTERN,1},
+ {MB_CLASS4|MB_PATTERN,1}, {MB_CLASS4|MB_PATTERN,1},
+ {MB_CLASS4|MB_PATTERN,1}, {MB_CLASS4|MB_PATTERN,1},
+ {MB_CLASS4|MB_PATTERN,1}, {MB_CLASS4|MB_PATTERN,1}
+};
+
+/* Table B-6, mb_type in spat. scal. P-pictures, codes 0010..11xx */
+mpeg3_VLCtab_t mpeg3_spPMBtab0[16] =
+{
+ {ERROR,0},{ERROR,0},
+ {MB_FORWARD,4},
+ {MB_WEIGHT|MB_FORWARD,4},
+ {MB_QUANT|MB_FORWARD|MB_PATTERN,3}, {MB_QUANT|MB_FORWARD|MB_PATTERN,3},
+ {MB_WEIGHT|MB_FORWARD|MB_PATTERN,3}, {MB_WEIGHT|MB_FORWARD|MB_PATTERN,3},
+ {MB_FORWARD|MB_PATTERN,2}, {MB_FORWARD|MB_PATTERN,2},
+ {MB_FORWARD|MB_PATTERN,2}, {MB_FORWARD|MB_PATTERN,2},
+ {MB_WEIGHT|MB_QUANT|MB_FORWARD|MB_PATTERN,2},
+ {MB_WEIGHT|MB_QUANT|MB_FORWARD|MB_PATTERN,2},
+ {MB_WEIGHT|MB_QUANT|MB_FORWARD|MB_PATTERN,2},
+ {MB_WEIGHT|MB_QUANT|MB_FORWARD|MB_PATTERN,2}
+};
+
+/* Table B-6, mb_type in spat. scal. P-pictures, codes 0000010..000111x */
+mpeg3_VLCtab_t mpeg3_spPMBtab1[16] = {
+ {ERROR,0},{ERROR,0},
+ {MB_CLASS4|MB_QUANT|MB_PATTERN,7},
+ {MB_CLASS4,7},
+ {MB_PATTERN,7},
+ {MB_CLASS4|MB_PATTERN,7},
+ {MB_QUANT|MB_INTRA,7},
+ {MB_INTRA,7},
+ {MB_QUANT|MB_PATTERN,6}, {MB_QUANT|MB_PATTERN,6},
+ {MB_WEIGHT|MB_QUANT|MB_PATTERN,6}, {MB_WEIGHT|MB_QUANT|MB_PATTERN,6},
+ {MB_WEIGHT,6}, {MB_WEIGHT,6},
+ {MB_WEIGHT|MB_PATTERN,6}, {MB_WEIGHT|MB_PATTERN,6}
+};
+
+/* Table B-7, mb_type in spat. scal. B-pictures, codes 0010..11xx */
+mpeg3_VLCtab_t mpeg3_spBMBtab0[14] = {
+ {MB_FORWARD,4},
+ {MB_FORWARD|MB_PATTERN,4},
+ {MB_BACKWARD,3}, {MB_BACKWARD,3},
+ {MB_BACKWARD|MB_PATTERN,3}, {MB_BACKWARD|MB_PATTERN,3},
+ {MB_FORWARD|MB_BACKWARD,2}, {MB_FORWARD|MB_BACKWARD,2},
+ {MB_FORWARD|MB_BACKWARD,2}, {MB_FORWARD|MB_BACKWARD,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2},
+ {MB_FORWARD|MB_BACKWARD|MB_PATTERN,2}
+};
+
+/* Table B-7, mb_type in spat. scal. B-pictures, codes 0000100..000111x */
+mpeg3_VLCtab_t mpeg3_spBMBtab1[12] = {
+ {MB_QUANT|MB_FORWARD|MB_PATTERN,7},
+ {MB_QUANT|MB_BACKWARD|MB_PATTERN,7},
+ {MB_INTRA,7},
+ {MB_QUANT|MB_FORWARD|MB_BACKWARD|MB_PATTERN,7},
+ {MB_WEIGHT|MB_FORWARD,6}, {MB_WEIGHT|MB_FORWARD,6},
+ {MB_WEIGHT|MB_FORWARD|MB_PATTERN,6}, {MB_WEIGHT|MB_FORWARD|MB_PATTERN,6},
+ {MB_WEIGHT|MB_BACKWARD,6}, {MB_WEIGHT|MB_BACKWARD,6},
+ {MB_WEIGHT|MB_BACKWARD|MB_PATTERN,6}, {MB_WEIGHT|MB_BACKWARD|MB_PATTERN,6}
+};
+
+/* Table B-7, mb_type in spat. scal. B-pictures, codes 00000100x..000001111 */
+mpeg3_VLCtab_t mpeg3_spBMBtab2[8] = {
+ {MB_QUANT|MB_INTRA,8}, {MB_QUANT|MB_INTRA,8},
+ {MB_WEIGHT|MB_QUANT|MB_FORWARD|MB_PATTERN,8},
+ {MB_WEIGHT|MB_QUANT|MB_FORWARD|MB_PATTERN,8},
+ {MB_WEIGHT|MB_QUANT|MB_BACKWARD|MB_PATTERN,9},
+ {MB_CLASS4|MB_QUANT|MB_PATTERN,9},
+ {MB_CLASS4,9},
+ {MB_CLASS4|MB_PATTERN,9}
+};
+
+/* Table B-8, mb_type in spat. scal. B-pictures, codes 001..1xx */
+mpeg3_VLCtab_t mpeg3_SNRMBtab[8] = {
+ {ERROR,0},
+ {0,3},
+ {MB_QUANT|MB_PATTERN,2}, {MB_QUANT|MB_PATTERN,2},
+ {MB_PATTERN,1}, {MB_PATTERN,1}, {MB_PATTERN,1}, {MB_PATTERN,1}
+};
+
+/* Table B-10, motion_code, codes 0001 ... 01xx */
+mpeg3_VLCtab_t mpeg3_MVtab0[8] =
+{ {ERROR,0}, {3,3}, {2,2}, {2,2}, {1,1}, {1,1}, {1,1}, {1,1}
+};
+
+/* Table B-10, motion_code, codes 0000011 ... 000011x */
+mpeg3_VLCtab_t mpeg3_MVtab1[8] =
+{ {ERROR,0}, {ERROR,0}, {ERROR,0}, {7,6}, {6,6}, {5,6}, {4,5}, {4,5}
+};
+
+/* Table B-10, motion_code, codes 0000001100 ... 000001011x */
+mpeg3_VLCtab_t mpeg3_MVtab2[12] =
+{ {16,9}, {15,9}, {14,9}, {13,9},
+ {12,9}, {11,9}, {10,8}, {10,8},
+ {9,8}, {9,8}, {8,8}, {8,8}
+};
+
+/* Table B-9, coded_block_pattern, codes 01000 ... 111xx */
+mpeg3_VLCtab_t mpeg3_CBPtab0[32] =
+{ {ERROR,0}, {ERROR,0}, {ERROR,0}, {ERROR,0},
+ {ERROR,0}, {ERROR,0}, {ERROR,0}, {ERROR,0},
+ {62,5}, {2,5}, {61,5}, {1,5}, {56,5}, {52,5}, {44,5}, {28,5},
+ {40,5}, {20,5}, {48,5}, {12,5}, {32,4}, {32,4}, {16,4}, {16,4},
+ {8,4}, {8,4}, {4,4}, {4,4}, {60,3}, {60,3}, {60,3}, {60,3}
+};
+
+/* Table B-9, coded_block_pattern, codes 00000100 ... 001111xx */
+mpeg3_VLCtab_t mpeg3_CBPtab1[64] =
+{ {ERROR,0}, {ERROR,0}, {ERROR,0}, {ERROR,0},
+ {58,8}, {54,8}, {46,8}, {30,8},
+ {57,8}, {53,8}, {45,8}, {29,8}, {38,8}, {26,8}, {37,8}, {25,8},
+ {43,8}, {23,8}, {51,8}, {15,8}, {42,8}, {22,8}, {50,8}, {14,8},
+ {41,8}, {21,8}, {49,8}, {13,8}, {35,8}, {19,8}, {11,8}, {7,8},
+ {34,7}, {34,7}, {18,7}, {18,7}, {10,7}, {10,7}, {6,7}, {6,7},
+ {33,7}, {33,7}, {17,7}, {17,7}, {9,7}, {9,7}, {5,7}, {5,7},
+ {63,6}, {63,6}, {63,6}, {63,6}, {3,6}, {3,6}, {3,6}, {3,6},
+ {36,6}, {36,6}, {36,6}, {36,6}, {24,6}, {24,6}, {24,6}, {24,6}
+};
+
+/* Table B-9, coded_block_pattern, codes 000000001 ... 000000111 */
+mpeg3_VLCtab_t mpeg3_CBPtab2[8] =
+{ {ERROR,0}, {0,9}, {39,9}, {27,9}, {59,9}, {55,9}, {47,9}, {31,9}
+};
+
+/* Table B-1, macroblock_address_increment, codes 00010 ... 011xx */
+mpeg3_VLCtab_t mpeg3_MBAtab1[16] =
+{ {ERROR,0}, {ERROR,0}, {7,5}, {6,5}, {5,4}, {5,4}, {4,4}, {4,4},
+ {3,3}, {3,3}, {3,3}, {3,3}, {2,3}, {2,3}, {2,3}, {2,3}
+};
+
+/* Table B-1, macroblock_address_increment, codes 00000011000 ... 0000111xxxx */
+mpeg3_VLCtab_t mpeg3_MBAtab2[104] =
+{
+ {33,11}, {32,11}, {31,11}, {30,11}, {29,11}, {28,11}, {27,11}, {26,11},
+ {25,11}, {24,11}, {23,11}, {22,11}, {21,10}, {21,10}, {20,10}, {20,10},
+ {19,10}, {19,10}, {18,10}, {18,10}, {17,10}, {17,10}, {16,10}, {16,10},
+ {15,8}, {15,8}, {15,8}, {15,8}, {15,8}, {15,8}, {15,8}, {15,8},
+ {14,8}, {14,8}, {14,8}, {14,8}, {14,8}, {14,8}, {14,8}, {14,8},
+ {13,8}, {13,8}, {13,8}, {13,8}, {13,8}, {13,8}, {13,8}, {13,8},
+ {12,8}, {12,8}, {12,8}, {12,8}, {12,8}, {12,8}, {12,8}, {12,8},
+ {11,8}, {11,8}, {11,8}, {11,8}, {11,8}, {11,8}, {11,8}, {11,8},
+ {10,8}, {10,8}, {10,8}, {10,8}, {10,8}, {10,8}, {10,8}, {10,8},
+ {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7},
+ {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7}, {9,7},
+ {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7},
+ {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}, {8,7}
+};
+
+/* Table B-12, dct_dc_size_luminance, codes 00xxx ... 11110 */
+mpeg3_VLCtab_t mpeg3_DClumtab0[32] =
+{ {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
+ {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
+ {0, 3}, {0, 3}, {0, 3}, {0, 3}, {3, 3}, {3, 3}, {3, 3}, {3, 3},
+ {4, 3}, {4, 3}, {4, 3}, {4, 3}, {5, 4}, {5, 4}, {6, 5}, {ERROR, 0}
+};
+
+/* Table B-12, dct_dc_size_luminance, codes 111110xxx ... 111111111 */
+mpeg3_VLCtab_t mpeg3_DClumtab1[16] =
+{ {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6}, {7, 6},
+ {8, 7}, {8, 7}, {8, 7}, {8, 7}, {9, 8}, {9, 8}, {10,9}, {11,9}
+};
+
+/* Table B-13, dct_dc_size_chrominance, codes 00xxx ... 11110 */
+mpeg3_VLCtab_t mpeg3_DCchromtab0[32] =
+{ {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2}, {0, 2},
+ {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2},
+ {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2}, {2, 2},
+ {3, 3}, {3, 3}, {3, 3}, {3, 3}, {4, 4}, {4, 4}, {5, 5}, {ERROR, 0}
+};
+
+/* Table B-13, dct_dc_size_chrominance, codes 111110xxxx ... 1111111111 */
+mpeg3_VLCtab_t mpeg3_DCchromtab1[32] =
+{ {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6},
+ {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6}, {6, 6},
+ {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7}, {7, 7},
+ {8, 8}, {8, 8}, {8, 8}, {8, 8}, {9, 9}, {9, 9}, {10,10}, {11,10}
+};
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 0100 ... 1xxx (used for first (DC) coefficient)
+ */
+mpeg3_DCTtab_t mpeg3_DCTtabfirst[12] =
+{
+ {0,2,4}, {2,1,4}, {1,1,3}, {1,1,3},
+ {0,1,1}, {0,1,1}, {0,1,1}, {0,1,1},
+ {0,1,1}, {0,1,1}, {0,1,1}, {0,1,1}
+};
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 0100 ... 1xxx (used for all other coefficients)
+ */
+mpeg3_DCTtab_t mpeg3_DCTtabnext[12] =
+{
+ {0,2,4}, {2,1,4}, {1,1,3}, {1,1,3},
+ {64,0,2}, {64,0,2}, {64,0,2}, {64,0,2}, /* EOB */
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2}
+};
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 000001xx ... 00111xxx
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab0[60] =
+{
+ {65,0,6}, {65,0,6}, {65,0,6}, {65,0,6}, /* Escape */
+ {2,2,7}, {2,2,7}, {9,1,7}, {9,1,7},
+ {0,4,7}, {0,4,7}, {8,1,7}, {8,1,7},
+ {7,1,6}, {7,1,6}, {7,1,6}, {7,1,6},
+ {6,1,6}, {6,1,6}, {6,1,6}, {6,1,6},
+ {1,2,6}, {1,2,6}, {1,2,6}, {1,2,6},
+ {5,1,6}, {5,1,6}, {5,1,6}, {5,1,6},
+ {13,1,8}, {0,6,8}, {12,1,8}, {11,1,8},
+ {3,2,8}, {1,3,8}, {0,5,8}, {10,1,8},
+ {0,3,5}, {0,3,5}, {0,3,5}, {0,3,5},
+ {0,3,5}, {0,3,5}, {0,3,5}, {0,3,5},
+ {4,1,5}, {4,1,5}, {4,1,5}, {4,1,5},
+ {4,1,5}, {4,1,5}, {4,1,5}, {4,1,5},
+ {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
+ {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5}
+};
+
+/* Table B-15, DCT coefficients table one,
+ * codes 000001xx ... 11111111
+*/
+mpeg3_DCTtab_t mpeg3_DCTtab0a[252] =
+{
+ {65,0,6}, {65,0,6}, {65,0,6}, {65,0,6}, /* Escape */
+ {7,1,7}, {7,1,7}, {8,1,7}, {8,1,7},
+ {6,1,7}, {6,1,7}, {2,2,7}, {2,2,7},
+ {0,7,6}, {0,7,6}, {0,7,6}, {0,7,6},
+ {0,6,6}, {0,6,6}, {0,6,6}, {0,6,6},
+ {4,1,6}, {4,1,6}, {4,1,6}, {4,1,6},
+ {5,1,6}, {5,1,6}, {5,1,6}, {5,1,6},
+ {1,5,8}, {11,1,8}, {0,11,8}, {0,10,8},
+ {13,1,8}, {12,1,8}, {3,2,8}, {1,4,8},
+ {2,1,5}, {2,1,5}, {2,1,5}, {2,1,5},
+ {2,1,5}, {2,1,5}, {2,1,5}, {2,1,5},
+ {1,2,5}, {1,2,5}, {1,2,5}, {1,2,5},
+ {1,2,5}, {1,2,5}, {1,2,5}, {1,2,5},
+ {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
+ {3,1,5}, {3,1,5}, {3,1,5}, {3,1,5},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {1,1,3}, {1,1,3}, {1,1,3}, {1,1,3},
+ {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4}, /* EOB */
+ {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
+ {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
+ {64,0,4}, {64,0,4}, {64,0,4}, {64,0,4},
+ {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
+ {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
+ {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
+ {0,3,4}, {0,3,4}, {0,3,4}, {0,3,4},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,2,3}, {0,2,3}, {0,2,3}, {0,2,3},
+ {0,4,5}, {0,4,5}, {0,4,5}, {0,4,5},
+ {0,4,5}, {0,4,5}, {0,4,5}, {0,4,5},
+ {0,5,5}, {0,5,5}, {0,5,5}, {0,5,5},
+ {0,5,5}, {0,5,5}, {0,5,5}, {0,5,5},
+ {9,1,7}, {9,1,7}, {1,3,7}, {1,3,7},
+ {10,1,7}, {10,1,7}, {0,8,7}, {0,8,7},
+ {0,9,7}, {0,9,7}, {0,12,8}, {0,13,8},
+ {2,3,8}, {4,2,8}, {0,14,8}, {0,15,8}
+};
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 0000001000 ... 0000001111
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab1[8] =
+{
+ {16,1,10}, {5,2,10}, {0,7,10}, {2,3,10},
+ {1,4,10}, {15,1,10}, {14,1,10}, {4,2,10}
+};
+
+/* Table B-15, DCT coefficients table one,
+ * codes 000000100x ... 000000111x
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab1a[8] =
+{
+ {5,2,9}, {5,2,9}, {14,1,9}, {14,1,9},
+ {2,4,10}, {16,1,10}, {15,1,9}, {15,1,9}
+};
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 000000010000 ... 000000011111
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab2[16] =
+{
+ {0,11,12}, {8,2,12}, {4,3,12}, {0,10,12},
+ {2,4,12}, {7,2,12}, {21,1,12}, {20,1,12},
+ {0,9,12}, {19,1,12}, {18,1,12}, {1,5,12},
+ {3,3,12}, {0,8,12}, {6,2,12}, {17,1,12}
+};
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 0000000010000 ... 0000000011111
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab3[16] =
+{
+ {10,2,13}, {9,2,13}, {5,3,13}, {3,4,13},
+ {2,5,13}, {1,7,13}, {1,6,13}, {0,15,13},
+ {0,14,13}, {0,13,13}, {0,12,13}, {26,1,13},
+ {25,1,13}, {24,1,13}, {23,1,13}, {22,1,13}
+};
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 00000000010000 ... 00000000011111
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab4[16] =
+{
+ {0,31,14}, {0,30,14}, {0,29,14}, {0,28,14},
+ {0,27,14}, {0,26,14}, {0,25,14}, {0,24,14},
+ {0,23,14}, {0,22,14}, {0,21,14}, {0,20,14},
+ {0,19,14}, {0,18,14}, {0,17,14}, {0,16,14}
+};
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 000000000010000 ... 000000000011111
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab5[16] =
+{
+ {0,40,15}, {0,39,15}, {0,38,15}, {0,37,15},
+ {0,36,15}, {0,35,15}, {0,34,15}, {0,33,15},
+ {0,32,15}, {1,14,15}, {1,13,15}, {1,12,15},
+ {1,11,15}, {1,10,15}, {1,9,15}, {1,8,15}
+};
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 0000000000010000 ... 0000000000011111
+ */
+mpeg3_DCTtab_t mpeg3_DCTtab6[16] =
+{
+ {1,18,16}, {1,17,16}, {1,16,16}, {1,15,16},
+ {6,3,16}, {16,2,16}, {15,2,16}, {14,2,16},
+ {13,2,16}, {12,2,16}, {11,2,16}, {31,1,16},
+ {30,1,16}, {29,1,16}, {28,1,16}, {27,1,16}
+};
diff --git a/core/multimedia/opieplayer/libmpeg3/video/vlc.h b/core/multimedia/opieplayer/libmpeg3/video/vlc.h
new file mode 100644
index 0000000..727040b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/vlc.h
@@ -0,0 +1,164 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef VLC_H
+#define VLC_H
+
+/* variable length code tables */
+
+typedef struct {
+ char val, len;
+} mpeg3_VLCtab_t;
+
+typedef struct {
+ char run, level, len;
+} mpeg3_DCTtab_t;
+
+/* Added 03/38/96 by Alex de Jong : avoid IRIX GNU warning */
+#ifdef ERROR
+#undef ERROR
+#define ERROR 99
+#endif
+
+/* Table B-3, mb_type in P-pictures, codes 001..1xx */
+extern mpeg3_VLCtab_t mpeg3_PMBtab0[8];
+
+/* Table B-3, mb_type in P-pictures, codes 000001..00011x */
+extern mpeg3_VLCtab_t mpeg3_PMBtab1[8];
+
+/* Table B-4, mb_type in B-pictures, codes 0010..11xx */
+extern mpeg3_VLCtab_t mpeg3_BMBtab0[16];
+
+/* Table B-4, mb_type in B-pictures, codes 000001..00011x */
+extern mpeg3_VLCtab_t mpeg3_BMBtab1[8];
+
+/* Table B-5, mb_type in spat. scal. I-pictures, codes 0001..1xxx */
+extern mpeg3_VLCtab_t mpeg3_spIMBtab[16];
+
+/* Table B-6, mb_type in spat. scal. P-pictures, codes 0010..11xx */
+extern mpeg3_VLCtab_t mpeg3_spPMBtab0[16];
+
+/* Table B-6, mb_type in spat. scal. P-pictures, codes 0000010..000111x */
+extern mpeg3_VLCtab_t mpeg3_spPMBtab1[16];
+
+/* Table B-7, mb_type in spat. scal. B-pictures, codes 0010..11xx */
+extern mpeg3_VLCtab_t mpeg3_spBMBtab0[14];
+
+/* Table B-7, mb_type in spat. scal. B-pictures, codes 0000100..000111x */
+extern mpeg3_VLCtab_t mpeg3_spBMBtab1[12];
+
+/* Table B-7, mb_type in spat. scal. B-pictures, codes 00000100x..000001111 */
+extern mpeg3_VLCtab_t mpeg3_spBMBtab2[8];
+
+/* Table B-8, mb_type in spat. scal. B-pictures, codes 001..1xx */
+extern mpeg3_VLCtab_t mpeg3_SNRMBtab[8];
+
+/* Table B-10, motion_code, codes 0001 ... 01xx */
+extern mpeg3_VLCtab_t mpeg3_MVtab0[8];
+
+/* Table B-10, motion_code, codes 0000011 ... 000011x */
+extern mpeg3_VLCtab_t mpeg3_MVtab1[8];
+
+/* Table B-10, motion_code, codes 0000001100 ... 000001011x */
+extern mpeg3_VLCtab_t mpeg3_MVtab2[12];
+
+/* Table B-9, coded_block_pattern, codes 01000 ... 111xx */
+extern mpeg3_VLCtab_t mpeg3_CBPtab0[32];
+
+/* Table B-9, coded_block_pattern, codes 00000100 ... 001111xx */
+extern mpeg3_VLCtab_t mpeg3_CBPtab1[64];
+
+/* Table B-9, coded_block_pattern, codes 000000001 ... 000000111 */
+extern mpeg3_VLCtab_t mpeg3_CBPtab2[8];
+
+/* Table B-1, macroblock_address_increment, codes 00010 ... 011xx */
+extern mpeg3_VLCtab_t mpeg3_MBAtab1[16];
+
+/* Table B-1, macroblock_address_increment, codes 00000011000 ... 0000111xxxx */
+extern mpeg3_VLCtab_t mpeg3_MBAtab2[104];
+
+/* Table B-12, dct_dc_size_luminance, codes 00xxx ... 11110 */
+extern mpeg3_VLCtab_t mpeg3_DClumtab0[32];
+
+/* Table B-12, dct_dc_size_luminance, codes 111110xxx ... 111111111 */
+extern mpeg3_VLCtab_t mpeg3_DClumtab1[16];
+
+/* Table B-13, dct_dc_size_chrominance, codes 00xxx ... 11110 */
+extern mpeg3_VLCtab_t mpeg3_DCchromtab0[32];
+
+/* Table B-13, dct_dc_size_chrominance, codes 111110xxxx ... 1111111111 */
+extern mpeg3_VLCtab_t mpeg3_DCchromtab1[32];
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 0100 ... 1xxx (used for first (DC) coefficient)
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtabfirst[12];
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 0100 ... 1xxx (used for all other coefficients)
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtabnext[12];
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 000001xx ... 00111xxx
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab0[60];
+
+/* Table B-15, DCT coefficients table one,
+ * codes 000001xx ... 11111111
+*/
+extern mpeg3_DCTtab_t mpeg3_DCTtab0a[252];
+
+/* Table B-14, DCT coefficients table zero,
+ * codes 0000001000 ... 0000001111
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab1[8];
+
+/* Table B-15, DCT coefficients table one,
+ * codes 000000100x ... 000000111x
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab1a[8];
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 000000010000 ... 000000011111
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab2[16];
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 0000000010000 ... 0000000011111
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab3[16];
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 00000000010000 ... 00000000011111
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab4[16];
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 000000000010000 ... 000000000011111
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab5[16];
+
+/* Table B-14/15, DCT coefficients table zero / one,
+ * codes 0000000000010000 ... 0000000000011111
+ */
+extern mpeg3_DCTtab_t mpeg3_DCTtab6[16];
+
+
+#endif
diff --git a/core/multimedia/opieplayer/libmpeg3/video/worksheet.c b/core/multimedia/opieplayer/libmpeg3/video/worksheet.c
new file mode 100644
index 0000000..c5a0553
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmpeg3/video/worksheet.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+
+static LONGLONG mpeg3_MMX_601_Y_COEF = 0x0000004000400040;
+
+inline void mpeg3_601_mmx(unsigned long y,
+ unsigned long *output)
+{
+asm("
+/* Output will be 0x00rrggbb */
+ movd (%0), %%mm0; /* Load y 0x00000000000000yy */
+/* pmullw mpeg3_MMX_601_Y_COEF, %%mm0; // Scale y 0x00000000000000yy */
+ psllw $6, %%mm0; /* Shift y coeffs 0x0000yyy0yyy0yyy0 */
+ movd %%mm0, (%1); /* Store output */
+ "
+:
+: "r" (&y), "r" (output));
+}
+
+
+int main(int argc, char *argv[])
+{
+ unsigned char output[1024];
+
+ memset(output, 0, 1024);
+ mpeg3_601_mmx(1, (unsigned long*)output);
+ printf("%02x%02x\n", *(unsigned char*)&output[1], *(unsigned char*)&output[0]);
+}
diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp
new file mode 100644
index 0000000..93a6e3f
--- a/dev/null
+++ b/core/multimedia/opieplayer/loopcontrol.cpp
@@ -0,0 +1,464 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/qpeapplication.h>
+#ifdef Q_WS_QWS
+#include <qpe/qcopenvelope_qws.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+#include <errno.h>
+#include <unistd.h>
+#include "loopcontrol.h"
+#include "videowidget.h"
+#include "audiodevice.h"
+#include "mediaplayerplugininterface.h"
+#include "mediaplayerstate.h"
+
+
+extern VideoWidget *videoUI; // now only needed to tell it to play a frame
+extern MediaPlayerState *mediaPlayerState;
+
+
+//#define DecodeLoopDebug(x) qDebug x
+#define DecodeLoopDebug(x)
+
+
+static char *audioBuffer = NULL;
+static AudioDevice *audioDevice = NULL;
+static bool disabledSuspendScreenSaver = FALSE;
+static bool previousSuspendMode = FALSE;
+
+
+pthread_t audio_tid;
+pthread_attr_t audio_attr;
+bool threadOkToGo = FALSE;
+
+
+class Mutex {
+public:
+ Mutex() {
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init( &attr );
+ pthread_mutex_init( &mutex, &attr );
+ pthread_mutexattr_destroy( &attr );
+ }
+
+ ~Mutex() {
+ pthread_mutex_destroy( &mutex );
+ }
+
+ void lock() {
+ pthread_mutex_lock( &mutex );
+ }
+
+ void unlock() {
+ pthread_mutex_unlock( &mutex );
+ }
+private:
+ pthread_mutex_t mutex;
+};
+
+
+void *startAudioThread( void *ptr ) {
+ LoopControl *mpegView = (LoopControl *)ptr;
+ while ( TRUE ) {
+ if ( threadOkToGo && mpegView->moreAudio )
+ mpegView->startAudio();
+ else
+ usleep( 10000 ); // Semi-buzy-wait till we are playing again
+ }
+ return 0;
+}
+
+
+Mutex *audioMutex;
+
+
+LoopControl::LoopControl( QObject *parent, const char *name )
+ : QObject( parent, name ) {
+ isMuted = FALSE;
+ connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( setMute(bool) ) );
+
+ audioMutex = new Mutex;
+
+ pthread_attr_init(&audio_attr);
+#define USE_REALTIME_AUDIO_THREAD
+#ifdef USE_REALTIME_AUDIO_THREAD
+ // Attempt to set it to real-time round robin
+ if ( pthread_attr_setschedpolicy( &audio_attr, SCHED_RR ) == 0 ) {
+ sched_param params;
+ params.sched_priority = 50;
+ pthread_attr_setschedparam(&audio_attr,&params);
+ } else {
+ qDebug( "Error setting up a realtime thread, reverting to using a normal thread." );
+ pthread_attr_destroy(&audio_attr);
+ pthread_attr_init(&audio_attr);
+ }
+#endif
+ pthread_create(&audio_tid, &audio_attr, (void * (*)(void *))startAudioThread, this);
+}
+
+
+LoopControl::~LoopControl() {
+ stop();
+}
+
+
+static long prev_frame = 0;
+static int currentSample = 0;
+
+
+void LoopControl::timerEvent( QTimerEvent *te ) {
+
+ if ( te->timerId() == videoId )
+ startVideo();
+
+ if ( te->timerId() == sliderId ) {
+ if ( hasAudioChannel && !hasVideoChannel && moreAudio ) {
+ mediaPlayerState->updatePosition( audioSampleCounter );
+ } else if ( hasVideoChannel && moreVideo ) {
+ mediaPlayerState->updatePosition( current_frame );
+ }
+ }
+
+ if ( !moreVideo && !moreAudio ) {
+ mediaPlayerState->setPlaying( FALSE );
+ mediaPlayerState->setNext();
+ }
+}
+
+
+void LoopControl::setPosition( long pos ) {
+ audioMutex->lock();
+
+ if ( hasVideoChannel && hasAudioChannel ) {
+ playtime.restart();
+ playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) );
+ current_frame = pos + 1;
+ mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
+ prev_frame = current_frame - 1;
+ currentSample = (int)( (double)current_frame * freq / framerate );
+ mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream );
+ audioSampleCounter = currentSample - 1;
+ } else if ( hasVideoChannel ) {
+ playtime.restart();
+ playtime = playtime.addMSecs( long((double)-pos * 1000.0 / framerate) );
+ current_frame = pos + 1;
+ mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
+ prev_frame = current_frame - 1;
+ } else if ( hasAudioChannel ) {
+ playtime.restart();
+ playtime = playtime.addMSecs( long((double)-pos * 1000.0 / freq) );
+ currentSample = pos + 1;
+ mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream );
+ audioSampleCounter = currentSample - 1;
+ }
+
+ audioMutex->unlock();
+}
+
+
+void LoopControl::startVideo() {
+
+ if ( moreVideo ) {
+
+ if ( mediaPlayerState->curDecoder() ) {
+
+ if ( hasAudioChannel && !isMuted ) {
+
+ current_frame = long( playtime.elapsed() * framerate / 1000 );
+
+ if ( prev_frame != -1 && current_frame <= prev_frame )
+ return;
+
+ } else {
+ // Don't skip
+ current_frame++;
+ }
+
+ if ( prev_frame == -1 || current_frame > prev_frame ) {
+ if ( current_frame > prev_frame + 1 ) {
+ mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
+ }
+ moreVideo = videoUI->playVideo();
+ prev_frame = current_frame;
+ }
+
+ } else {
+
+ moreVideo = FALSE;
+ killTimer( videoId );
+
+ }
+
+ }
+}
+
+
+void LoopControl::startAudio() {
+
+ audioMutex->lock();
+
+ if ( moreAudio ) {
+
+ if ( !isMuted && mediaPlayerState->curDecoder() ) {
+
+ currentSample = audioSampleCounter + 1;
+
+ if ( currentSample != audioSampleCounter + 1 )
+ qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter);
+
+ long samplesRead = 0;
+ mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, 1024, samplesRead, stream );
+ long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000;
+ long sampleWaitTime = currentSample - sampleWeShouldBeAt;
+
+ if ( ( sampleWaitTime > 2000 ) && ( sampleWaitTime < 20000 ) ) {
+ usleep( (long)((double)sampleWaitTime * 1000000.0 / freq) );
+ } else if ( sampleWaitTime <= -5000 ) {
+ qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt );
+ //mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream );
+ currentSample = sampleWeShouldBeAt;
+ }
+
+ audioDevice->write( audioBuffer, samplesRead * 2 * channels );
+ audioSampleCounter = currentSample + samplesRead - 1;
+
+ moreAudio = audioSampleCounter <= total_audio_samples;
+
+ } else {
+
+ moreAudio = FALSE;
+
+ }
+
+ }
+
+ audioMutex->unlock();
+}
+
+
+void LoopControl::killTimers() {
+
+ audioMutex->lock();
+
+ if ( hasVideoChannel )
+ killTimer( videoId );
+ killTimer( sliderId );
+ threadOkToGo = FALSE;
+
+ audioMutex->unlock();
+}
+
+
+void LoopControl::startTimers() {
+
+ audioMutex->lock();
+
+ moreVideo = FALSE;
+ moreAudio = FALSE;
+
+ if ( hasVideoChannel ) {
+ moreVideo = TRUE;
+ int mSecsBetweenFrames = (int)(100 / framerate); // 10% of the real value
+ videoId = startTimer( mSecsBetweenFrames );
+ }
+
+ if ( hasAudioChannel ) {
+ moreAudio = TRUE;
+ threadOkToGo = TRUE;
+ }
+
+ sliderId = startTimer( 300 ); // update slider every 1/3 second
+
+ audioMutex->unlock();
+}
+
+
+void LoopControl::setPaused( bool pause ) {
+
+ if ( !mediaPlayerState->curDecoder() || !mediaPlayerState->curDecoder()->isOpen() )
+ return;
+
+ if ( pause ) {
+ killTimers();
+ } else {
+ // Force an update of the position
+ mediaPlayerState->setPosition( mediaPlayerState->position() + 1 );
+ mediaPlayerState->setPosition( mediaPlayerState->position() - 1 );
+ // Just like we never stopped
+ startTimers();
+ }
+}
+
+
+void LoopControl::stop( bool willPlayAgainShortly ) {
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ if ( !willPlayAgainShortly && disabledSuspendScreenSaver ) {
+ disabledSuspendScreenSaver = FALSE;
+ // Re-enable the suspend mode
+ QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
+ }
+#endif
+
+ if ( mediaPlayerState->curDecoder() && mediaPlayerState->curDecoder()->isOpen() ) {
+
+ killTimers();
+
+ audioMutex->lock();
+
+ mediaPlayerState->curDecoder()->close();
+
+ if ( audioDevice ) {
+ delete audioDevice;
+ delete audioBuffer;
+ audioDevice = 0;
+ audioBuffer = 0;
+ }
+
+ audioMutex->unlock();
+
+ }
+}
+
+
+bool LoopControl::init( const QString& filename ) {
+ stop();
+
+ audioMutex->lock();
+
+ fileName = filename;
+ stream = 0; // only play stream 0 for now
+ current_frame = total_video_frames = total_audio_samples = 0;
+
+ qDebug( "Using the %s decoder", mediaPlayerState->curDecoder()->pluginName() );
+
+ // ### Hack to use libmpeg3plugin to get the number of audio samples if we are using the libmad plugin
+ if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibMadPlugin") ) {
+ if ( mediaPlayerState->libMpeg3Decoder() && mediaPlayerState->libMpeg3Decoder()->open( filename ) ) {
+ total_audio_samples = mediaPlayerState->libMpeg3Decoder()->audioSamples( 0 );
+ mediaPlayerState->libMpeg3Decoder()->close();
+ }
+ }
+
+ if ( !mediaPlayerState->curDecoder()|| !mediaPlayerState->curDecoder()->open( filename ) ) {
+ audioMutex->unlock();
+ return FALSE;
+ }
+
+ hasAudioChannel = mediaPlayerState->curDecoder()->audioStreams() > 0;
+ hasVideoChannel = mediaPlayerState->curDecoder()->videoStreams() > 0;
+
+ if ( hasAudioChannel ) {
+ int astream = 0;
+
+ channels = mediaPlayerState->curDecoder()->audioChannels( astream );
+ DecodeLoopDebug(( "channels = %d\n", channels ));
+
+ if ( !total_audio_samples )
+ total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream );
+
+ total_audio_samples += 1000;
+
+ mediaPlayerState->setLength( total_audio_samples );
+
+ freq = mediaPlayerState->curDecoder()->audioFrequency( astream );
+ DecodeLoopDebug(( "frequency = %d\n", freq ));
+
+ audioSampleCounter = 0;
+
+ static const int bytes_per_sample = 2; //16 bit
+
+ audioDevice = new AudioDevice( freq, channels, bytes_per_sample );
+ audioBuffer = new char[ audioDevice->bufferSize() ];
+ channels = audioDevice->channels();
+
+ //### must check which frequency is actually used.
+ static const int size = 1;
+ short int buf[size];
+ long samplesRead = 0;
+ mediaPlayerState->curDecoder()->audioReadSamples( buf, channels, size, samplesRead, stream );
+ }
+
+ if ( hasVideoChannel ) {
+ total_video_frames = mediaPlayerState->curDecoder()->videoFrames( stream );
+
+ mediaPlayerState->setLength( total_video_frames );
+
+ framerate = mediaPlayerState->curDecoder()->videoFrameRate( stream );
+ DecodeLoopDebug(( "Frame rate %g total %ld", framerate, total_video_frames ));
+
+ if ( framerate <= 1.0 ) {
+ DecodeLoopDebug(( "Crazy frame rate, resetting to sensible" ));
+ framerate = 25;
+ }
+
+ if ( total_video_frames == 1 ) {
+ DecodeLoopDebug(( "Cannot seek to frame" ));
+ }
+
+ }
+
+ current_frame = 0;
+ prev_frame = -1;
+
+ connect( mediaPlayerState, SIGNAL( positionChanged( long ) ), this, SLOT( setPosition( long ) ) );
+ connect( mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( setPaused( bool ) ) );
+
+ audioMutex->unlock();
+
+ return TRUE;
+}
+
+
+void LoopControl::play() {
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ if ( !disabledSuspendScreenSaver || previousSuspendMode != hasVideoChannel ) {
+ disabledSuspendScreenSaver = TRUE;
+ previousSuspendMode = hasVideoChannel;
+ // Stop the screen from blanking and power saving state
+ QCopEnvelope("QPE/System", "setScreenSaverMode(int)" )
+ << ( hasVideoChannel ? QPEApplication::Disable : QPEApplication::DisableSuspend );
+ }
+#endif
+
+ playtime.start();
+ startTimers();
+}
+
+
+void LoopControl::setMute( bool on ) {
+ if ( on != isMuted ) {
+ isMuted = on;
+ if ( !on ) {
+ // Force an update of the position
+ mediaPlayerState->setPosition( mediaPlayerState->position() + 1 );
+ mediaPlayerState->setPosition( mediaPlayerState->position() - 1 );
+ // Resume playing audio
+ moreAudio = TRUE;
+ }
+ }
+}
+
+
diff --git a/core/multimedia/opieplayer/loopcontrol.h b/core/multimedia/opieplayer/loopcontrol.h
new file mode 100644
index 0000000..967ee25
--- a/dev/null
+++ b/core/multimedia/opieplayer/loopcontrol.h
@@ -0,0 +1,88 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEGVIEW_H
+#define MPEGVIEW_H
+
+
+#include <qwidget.h>
+#include <qdatetime.h>
+
+
+class LoopControl : public QObject {
+ Q_OBJECT
+public:
+ LoopControl( QObject *parent, const char *name );
+ ~LoopControl();
+
+ bool init( const QString& filename );
+
+ bool hasVideo() const { return hasVideoChannel; }
+ bool hasAudio() const { return hasAudioChannel; }
+
+ long totalPlaytime() { return (long)(hasVideoChannel ? total_video_frames / framerate : total_audio_samples / freq); }
+
+ // These are public to run them from global functions needed to start threads
+ // Otherwise they would be private
+ void startAudio();
+ void startVideo();
+ bool moreAudio;
+ bool moreVideo;
+public slots:
+ void play();
+ void stop( bool willPlayAgainShortly = FALSE );
+
+ void setMute( bool );
+ void setPaused( bool );
+ void setPosition( long );
+
+signals:
+ void positionChanged( long, long );
+
+protected:
+ void timerEvent(QTimerEvent*);
+
+private:
+ void startTimers();
+ void killTimers();
+
+ QTime playtime;
+ int videoId;
+ int sliderId;
+
+ int audioSampleCounter;
+ long current_frame;
+ long total_video_frames;
+ long total_audio_samples;
+
+ float framerate;
+ int freq;
+ int stream;
+ int framecount;
+ int channels;
+
+ bool hasVideoChannel;
+ bool hasAudioChannel;
+ bool isMuted;
+ QString fileName;
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/loopcontrol_threaded.cpp b/core/multimedia/opieplayer/loopcontrol_threaded.cpp
new file mode 100644
index 0000000..2ec4a48
--- a/dev/null
+++ b/core/multimedia/opieplayer/loopcontrol_threaded.cpp
@@ -0,0 +1,626 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#define _REENTRANT
+
+#include <qpe/qpeapplication.h>
+#include <qimage.h>
+#include <qpainter.h>
+#ifdef Q_WS_QWS
+#include <qpe/qcopenvelope_qws.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <pthread.h>
+#include "loopcontrol.h"
+#include "audiodevice.h"
+#include "videowidget.h"
+#include "audiowidget.h"
+#include "mediaplayerplugininterface.h"
+#include "mediaplayerstate.h"
+
+
+#if defined(QT_QWS_CUSTOM) || defined(QT_QWS_IPAQ)
+#define USE_REALTIME_AUDIO_THREAD
+#endif
+
+
+extern VideoWidget *videoUI; // now only needed to tell it to play a frame
+extern MediaPlayerState *mediaPlayerState;
+
+
+#define DecodeLoopDebug(x) qDebug x
+//#define DecodeLoopDebug(x)
+
+
+static char *audioBuffer = NULL;
+static AudioDevice *audioDevice = NULL;
+static bool disabledSuspendScreenSaver = FALSE;
+
+
+pthread_t video_tid;
+pthread_attr_t video_attr;
+pthread_t audio_tid;
+pthread_attr_t audio_attr;
+
+
+bool emitPlayFinished = FALSE;
+bool emitChangePos = FALSE;
+
+
+class Mutex {
+public:
+ Mutex() {
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init( &attr );
+ pthread_mutex_init( &mutex, &attr );
+ pthread_mutexattr_destroy( &attr );
+ }
+
+ ~Mutex() {
+ pthread_mutex_destroy( &mutex );
+ }
+
+ void lock() {
+ pthread_mutex_lock( &mutex );
+ }
+
+ void unlock() {
+ pthread_mutex_unlock( &mutex );
+ }
+/*
+ bool locked() {
+ switch ( pthread_mutex_trylock( &mutex ) ) {
+ case EBUSY:
+ return TRUE;
+ case 0:
+ pthread_mutex_unlock( &mutex );
+ default:
+ return FALSE;
+ }
+ }
+*/
+private:
+ pthread_mutex_t mutex;
+};
+
+
+class currentFrameObj {
+public:
+ currentFrameObj() : value( 0 ) { }
+ void set( long f ) {
+ mutex.lock();
+ value = f;
+ mediaPlayerState->curDecoder()->videoSetFrame( f, 0 );
+ mutex.unlock();
+ }
+ long get() {
+ return value;
+ }
+private:
+ long value;
+ Mutex mutex;
+};
+
+
+Mutex *videoMutex;
+Mutex *audioMutex;
+Mutex *globalMutex;
+
+
+clock_t begin;
+
+
+LoopControl::LoopControl( QObject *parent, const char *name )
+ : QObject( parent, name ) {
+ isMuted = FALSE;
+ connect( qApp, SIGNAL( volumeChanged(bool) ), this, SLOT( setMute(bool) ) );
+ timerid = startTimer( 200 );
+ videoMutex = new Mutex;
+ audioMutex = new Mutex;
+ globalMutex = new Mutex;
+ //begin = clock();
+}
+
+
+LoopControl::~LoopControl() {
+ stop();
+ killTimer( timerid );
+}
+
+
+static bool sendingNewPos = FALSE;
+static long prev_frame = 0;
+static int currentSample = 0;
+
+
+void LoopControl::timerEvent( QTimerEvent* ) {
+ // We need to emit playFinished from the main thread, not one of the
+ // decoding threads else we'll have all kinds of yucky things happen (reentrance).
+ // playFinished will eventually call stop() which stops these threads.
+ if ( emitPlayFinished ) {
+ emitPlayFinished = FALSE;
+ mediaPlayerState->setPlaying( FALSE );
+ }
+
+ if ( emitChangePos ) {
+
+ emitChangePos = FALSE;
+
+ if ( hasVideoChannel && hasAudioChannel ) {
+ sendingNewPos = TRUE;
+ mediaPlayerState->setPosition( current_frame );
+ } else if ( hasVideoChannel ) {
+ sendingNewPos = TRUE;
+ mediaPlayerState->setPosition( current_frame );
+ } else if ( hasAudioChannel ) {
+ sendingNewPos = TRUE;
+ mediaPlayerState->setPosition( audioSampleCounter );
+ }
+
+ }
+}
+
+
+
+
+void LoopControl::setPosition( long pos ) {
+ if ( sendingNewPos ) {
+ sendingNewPos = FALSE;
+ return;
+ }
+
+ if ( hasVideoChannel && hasAudioChannel ) {
+ videoMutex->lock();
+ audioMutex->lock();
+qDebug("setting position");
+ playtime.restart();
+ playtime = playtime.addMSecs( -pos * 1000 / framerate );
+ //begin = clock() - (double)pos * CLOCKS_PER_SEC / framerate;
+ current_frame = pos + 1;
+ mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
+ prev_frame = current_frame - 1;
+ currentSample = (int)( current_frame * freq / framerate );
+ mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream );
+ audioSampleCounter = currentSample - 1;
+ audioMutex->unlock();
+ videoMutex->unlock();
+ } else if ( hasVideoChannel ) {
+ videoMutex->lock();
+ playtime.restart();
+ playtime = playtime.addMSecs( -pos * 1000 / framerate );
+ //begin = clock() - (double)pos * CLOCKS_PER_SEC / framerate;
+ current_frame = pos + 1;
+ mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
+ videoMutex->unlock();
+ prev_frame = current_frame - 1;
+ } else if ( hasAudioChannel ) {
+ audioMutex->lock();
+ playtime.restart();
+ playtime = playtime.addMSecs( -pos * 1000 / freq );
+ //begin = clock() - (double)pos * CLOCKS_PER_SEC / freq;
+ currentSample = pos + 1; // (int)( current_frame * freq / framerate );
+ mediaPlayerState->curDecoder()->audioSetSample( currentSample, stream );
+ audioSampleCounter = currentSample - 1;
+ audioMutex->unlock();
+ }
+}
+
+
+void *startVideoThread( void *ptr ) {
+ LoopControl *mpegView = (LoopControl *)ptr;
+ mpegView->startVideo();
+ return 0;
+}
+
+void *startAudioThread( void *ptr ) {
+ LoopControl *mpegView = (LoopControl *)ptr;
+ mpegView->startAudio();
+ return 0;
+}
+
+void LoopControl::startVideo() {
+ moreVideo = TRUE;
+
+ while ( moreVideo ) {
+
+ if ( mediaPlayerState->curDecoder() && hasVideoChannel ) {
+
+ if ( hasAudioChannel && !isMuted ) {
+
+ bool done = FALSE;
+
+ do {
+
+
+/*
+ videoMutex->lock();
+ current_frame = int( (double)playtime.elapsed() * (double)framerate / 1000.0 );
+ //current_frame = ( clock() - begin ) * (double)framerate / CLOCKS_PER_SEC;
+
+ // Sync to Audio
+// current_frame = (long)((double)(audioSampleCounter - 1000) * framerate / (double)freq);
+
+ long mSecsToNextFrame = 0;
+
+ if ( current_frame == prev_frame ) {
+ int nf = current_frame + 1;
+ if ( nf > 0 && nf != total_video_frames )
+ // mSecsToNextFrame = long(double(nf * CLOCKS_PER_SEC) / framerate) - ( clock() - begin );
+ mSecsToNextFrame = long(double(nf * 1000) / framerate) - ( playtime.elapsed() );
+ }
+ videoMutex->unlock();
+
+ if ( mSecsToNextFrame ) {
+ usleep( mSecsToNextFrame ); // wait a bit
+
+ videoMutex->lock();
+ // This should now be the next frame
+ current_frame = int( (double)playtime.elapsed() * (double)framerate / 1000.0 );
+ //current_frame = ( clock() - begin ) * (double)framerate / CLOCKS_PER_SEC;
+ videoMutex->unlock();
+ }
+
+ videoMutex->lock();
+ done = current_frame >= prev_frame;
+ videoMutex->unlock();
+*/
+ videoMutex->lock();
+ current_frame = int( (double)playtime.elapsed() * (double)framerate / 1000.0 );
+ done = current_frame >= prev_frame;
+ videoMutex->unlock();
+ if ( !done )
+ usleep( 1000 ); // wait a bit
+
+ } while ( !done );
+
+// qDebug("elapsed: %i %i (%f)", int( playtime.elapsed() ), current_frame, framerate );
+
+ } else {
+ videoMutex->lock();
+ current_frame++;
+ videoMutex->unlock();
+ }
+
+ videoMutex->lock();
+ bool check = current_frame && current_frame > prev_frame;
+ videoMutex->unlock();
+
+ if ( check ) {
+ videoMutex->lock();
+ if ( current_frame > prev_frame + 1 ) {
+ qDebug("skipped a frame");
+ mediaPlayerState->curDecoder()->videoSetFrame( current_frame, stream );
+ }
+ prev_frame = current_frame;
+ if ( moreVideo = videoUI->playVideo() )
+ emitChangePos = TRUE;
+ videoMutex->unlock();
+ }
+
+ } else
+ moreVideo = FALSE;
+
+ }
+
+ if ( !moreVideo && !moreAudio )
+ emitPlayFinished = TRUE;
+
+ pthread_exit(NULL);
+}
+
+void LoopControl::startAudio() {
+ moreAudio = TRUE;
+
+ while ( moreAudio ) {
+
+ if ( !isMuted && mediaPlayerState->curDecoder() && hasAudioChannel ) {
+
+ audioMutex->lock();
+ currentSample = mediaPlayerState->curDecoder()->audioGetSample( stream );
+
+ if ( currentSample == 0 )
+ currentSample = audioSampleCounter + 1;
+
+ if ( currentSample != audioSampleCounter + 1 )
+ qDebug("out of sync with decoder %i %i", currentSample, audioSampleCounter);
+ audioMutex->unlock();
+
+/*
+ int sampleWeShouldBeAt = int( playtime.elapsed() ) * freq / 1000;
+
+ if ( sampleWeShouldBeAt - currentSample > 20000 ) {
+ mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream );
+ currentSample = sampleWeShouldBeAt;
+ }
+*/
+ long samplesRead = 0;
+
+ const long samples = 1024;
+
+ moreAudio = !mediaPlayerState->curDecoder()->audioReadSamples( (short*)audioBuffer, channels, samples, samplesRead, stream );
+
+ audioMutex->lock();
+ long sampleWeShouldBeAt = long( playtime.elapsed() ) * freq / 1000;
+ //long sampleWeShouldBeAt = long( clock() - begin ) * (double) freq / CLOCKS_PER_SEC;
+ long sampleWaitTime = currentSample - sampleWeShouldBeAt;
+ audioMutex->unlock();
+
+ if ( sampleWaitTime >= 0 && sampleWaitTime <= 2000 ) {
+ //qDebug("sampleWaitTime: %i", sampleWaitTime);
+ usleep( ( sampleWaitTime * 1000000 ) / ( freq ) );
+ } else {
+ audioMutex->lock();
+ if ( sampleWaitTime <= -2000 ) {
+ qDebug("need to catch up by: %li (%i,%li)", -sampleWaitTime, currentSample, sampleWeShouldBeAt );
+ mediaPlayerState->curDecoder()->audioSetSample( sampleWeShouldBeAt, stream );
+ currentSample = sampleWeShouldBeAt;
+ }
+ audioMutex->unlock();
+ }
+
+ audioDevice->write( audioBuffer, samplesRead * 2 * channels );
+
+ audioMutex->lock();
+// audioSampleCounter += samplesRead;
+ audioSampleCounter = currentSample + samplesRead - 1;
+ audioMutex->unlock();
+
+ if ( !hasVideoChannel )
+ emitChangePos = TRUE;
+
+ //qDebug("currentSample: %i audioSampleCounter: %i total_audio_samples: %i", currentSample, audioSampleCounter, total_audio_samples);
+// qDebug("current: %i counter: %i total: %i", currentSample, audioSampleCounter, (int)total_audio_samples);
+ moreAudio = audioSampleCounter <= total_audio_samples;
+
+ } else {
+
+ if ( mediaPlayerState->curDecoder() && hasAudioChannel )
+ usleep( 100000 ); // Check every 1/10 sec to see if mute is off
+ else
+ moreAudio = FALSE;
+
+ }
+ }
+
+ qDebug( "End of file" );
+
+ if ( !moreVideo && !moreAudio )
+ emitPlayFinished = TRUE;
+
+ pthread_exit(NULL);
+}
+
+void LoopControl::killTimers() {
+ if ( hasVideoChannel ) {
+ if ( pthread_self() != video_tid ) {
+ if ( pthread_cancel(video_tid) == 0 ) {
+ void *thread_result = 0;
+ if ( pthread_join(video_tid,&thread_result) != 0 )
+ qDebug("thread join error 1");
+ pthread_attr_destroy(&video_attr);
+ }
+ }
+ }
+ if ( hasAudioChannel ) {
+ if ( pthread_self() != audio_tid ) {
+ if ( pthread_cancel(audio_tid) == 0 ) {
+ void *thread_result = 0;
+ if ( pthread_join(audio_tid,&thread_result) != 0 )
+ qDebug("thread join error 2");
+ pthread_attr_destroy(&audio_attr);
+ }
+ }
+ }
+}
+
+void LoopControl::startTimers() {
+ moreVideo = FALSE;
+ moreAudio = FALSE;
+
+ if ( hasVideoChannel ) {
+ moreVideo = TRUE;
+ pthread_attr_init(&video_attr);
+ pthread_create(&video_tid, &video_attr, (void * (*)(void *))startVideoThread, this);
+ }
+
+ if ( hasAudioChannel ) {
+ moreAudio = TRUE;
+ pthread_attr_init(&audio_attr);
+#ifdef USE_REALTIME_AUDIO_THREAD
+ pthread_attr_setschedpolicy(&audio_attr,SCHED_RR); // Real-time round robin
+ //qDebug("min: %i, max: %i", sched_get_priority_min( SCHED_RR ), sched_get_priority_max( SCHED_RR ) );
+ sched_param params;
+ params.sched_priority = 50;
+ pthread_attr_setschedparam(&audio_attr,&params);
+#endif
+ pthread_create(&audio_tid, &audio_attr, (void * (*)(void *))startAudioThread, this);
+ }
+}
+
+
+
+
+void LoopControl::setPaused( bool pause ) {
+ static int whenPaused = 0;
+
+ if ( !mediaPlayerState->curDecoder() || !mediaPlayerState->curDecoder()->isOpen() )
+ return;
+
+ if ( pause ) {
+ // Remember where we are
+ whenPaused = playtime.elapsed();
+ killTimers();
+ } else {
+ // Just like we never stopped
+ playtime.restart();
+ playtime = playtime.addMSecs( -whenPaused );
+ whenPaused = 0;
+ startTimers();
+ }
+}
+
+
+void LoopControl::stop( bool willPlayAgainShortly ) {
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ if ( !willPlayAgainShortly && disabledSuspendScreenSaver ) {
+ disabledSuspendScreenSaver = FALSE;
+ // Re-enable the suspend mode
+ QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
+ }
+#endif
+
+ if ( mediaPlayerState->curDecoder() && mediaPlayerState->curDecoder()->isOpen() ) {
+
+ killTimers();
+
+ mediaPlayerState->curDecoder()->close();
+
+ if ( audioDevice ) {
+ delete audioDevice;
+ delete audioBuffer;
+ audioDevice = 0;
+ audioBuffer = 0;
+ }
+
+ }
+}
+
+
+bool LoopControl::init( const QString& filename ) {
+ stop();
+ fileName = filename;
+ stream = 0; // only play stream 0 for now
+ current_frame = total_video_frames = total_audio_samples = 0;
+
+ qDebug( "Using the %s decoder", mediaPlayerState->curDecoder()->pluginName() );
+
+ // ### Hack to use libmpeg3plugin to get the number of audio samples if we are using the libmad plugin
+ if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibMadPlugin") ) {
+ if ( mediaPlayerState->libMpeg3Decoder() && mediaPlayerState->libMpeg3Decoder()->open( filename ) ) {
+ total_audio_samples = mediaPlayerState->libMpeg3Decoder()->audioSamples( 0 );
+ mediaPlayerState->libMpeg3Decoder()->close();
+ }
+ }
+
+ if ( !mediaPlayerState->curDecoder()|| !mediaPlayerState->curDecoder()->open( filename ) )
+ return FALSE;
+
+ hasAudioChannel = mediaPlayerState->curDecoder()->audioStreams() > 0;
+ hasVideoChannel = mediaPlayerState->curDecoder()->videoStreams() > 0;
+
+ if ( hasAudioChannel ) {
+ int astream = 0;
+
+ channels = mediaPlayerState->curDecoder()->audioChannels( astream );
+ DecodeLoopDebug(( "channels = %d\n", channels ));
+
+ if ( !total_audio_samples )
+ total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream );
+
+ mediaPlayerState->setLength( total_audio_samples );
+
+ freq = mediaPlayerState->curDecoder()->audioFrequency( astream );
+ DecodeLoopDebug(( "frequency = %d\n", freq ));
+
+ audioSampleCounter = 0;
+
+ static const int bytes_per_sample = 2; //16 bit
+
+ audioDevice = new AudioDevice( freq, channels, bytes_per_sample );
+ audioBuffer = new char[ audioDevice->bufferSize() ];
+ channels = audioDevice->channels();
+
+ //### must check which frequency is actually used.
+ static const int size = 1;
+ short int buf[size];
+ long samplesRead = 0;
+ mediaPlayerState->curDecoder()->audioReadSamples( buf, channels, size, samplesRead, stream );
+ }
+
+ if ( hasVideoChannel ) {
+ total_video_frames = mediaPlayerState->curDecoder()->videoFrames( stream );
+
+ mediaPlayerState->setLength( total_video_frames );
+
+ framerate = mediaPlayerState->curDecoder()->videoFrameRate( stream );
+ DecodeLoopDebug(( "Frame rate %g total %ld", framerate, total_video_frames ));
+
+ if ( framerate <= 1.0 ) {
+ DecodeLoopDebug(( "Crazy frame rate, resetting to sensible" ));
+ framerate = 25;
+ }
+
+ if ( total_video_frames == 1 ) {
+ DecodeLoopDebug(( "Cannot seek to frame" ));
+ }
+
+ }
+
+ videoMutex->lock();
+ current_frame = 0;
+ prev_frame = -1;
+ videoMutex->unlock();
+
+ connect( mediaPlayerState, SIGNAL( positionChanged( long ) ), this, SLOT( setPosition( long ) ) );
+ connect( mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( setPaused( bool ) ) );
+
+ //setBackgroundColor( black );
+ return TRUE;
+}
+
+
+void LoopControl::play() {
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ if ( !disabledSuspendScreenSaver ) {
+ disabledSuspendScreenSaver = TRUE;
+ // Stop the screen from blanking and power saving state
+ QCopEnvelope("QPE/System", "setScreenSaverMode(int)" )
+ << ( hasVideoChannel ? QPEApplication::Disable : QPEApplication::DisableSuspend );
+ }
+#endif
+
+ //begin = clock();
+ playtime.start();
+ startTimers();
+ //updateGeometry();
+}
+
+
+void LoopControl::setMute( bool on ) {
+ if ( isMuted != on ) {
+ isMuted = on;
+ if ( isMuted ) {
+ } else {
+ int frame = current_frame; // mediaPlayerState->curDecoder()->videoGetFrame( stream );
+ playtime.restart();
+ playtime = playtime.addMSecs( -frame * 1000 / framerate );
+ //begin = clock() - (double)frame * CLOCKS_PER_SEC / framerate;
+ mediaPlayerState->curDecoder()->audioSetSample( frame*freq/framerate, stream );
+ }
+ }
+}
+
+
diff --git a/core/multimedia/opieplayer/loopcontrol_threaded.h b/core/multimedia/opieplayer/loopcontrol_threaded.h
new file mode 100644
index 0000000..9a009d1
--- a/dev/null
+++ b/core/multimedia/opieplayer/loopcontrol_threaded.h
@@ -0,0 +1,89 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MPEGVIEW_H
+#define MPEGVIEW_H
+
+
+#include <qwidget.h>
+#include <qdatetime.h>
+
+
+class LoopControl : public QObject {
+ Q_OBJECT
+public:
+ LoopControl( QObject *parent, const char *name );
+ ~LoopControl();
+
+ bool init( const QString& filename );
+
+ bool hasVideo() const { return hasVideoChannel; }
+ bool hasAudio() const { return hasAudioChannel; }
+
+ long totalPlaytime() { return (long)(hasVideoChannel ? total_video_frames / framerate : total_audio_samples / freq); }
+
+ // These are public to run them from global functions needed to start threads
+ // Otherwise they would be private
+ void startAudio();
+ void startVideo();
+public slots:
+ void play();
+ void stop( bool willPlayAgainShortly = FALSE );
+
+ void setMute( bool );
+ void setPaused( bool );
+ void setPosition( long );
+
+signals:
+ void positionChanged( long, long );
+ void playFinished();
+
+protected:
+ void timerEvent(QTimerEvent*);
+
+private:
+ void startTimers();
+ void killTimers();
+
+
+ QTime playtime;
+ int timerid;
+ int audioSampleCounter;
+ long current_frame;
+ long total_video_frames;
+ long total_audio_samples;
+
+ float framerate;
+ int freq;
+ int stream;
+ int framecount;
+ int channels;
+
+ bool moreAudio;
+ bool moreVideo;
+
+ bool hasVideoChannel;
+ bool hasAudioChannel;
+ bool isMuted;
+ QString fileName;
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/main.cpp b/core/multimedia/opieplayer/main.cpp
new file mode 100644
index 0000000..5246e40
--- a/dev/null
+++ b/core/multimedia/opieplayer/main.cpp
@@ -0,0 +1,57 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/qpeapplication.h>
+#include "mediaplayerstate.h"
+#include "playlistwidget.h"
+#include "audiowidget.h"
+#include "videowidget.h"
+#include "loopcontrol.h"
+#include "mediaplayer.h"
+
+
+MediaPlayerState *mediaPlayerState;
+PlayListWidget *playList;
+AudioWidget *audioUI;
+VideoWidget *videoUI;
+LoopControl *loopControl;
+
+
+int main(int argc, char **argv) {
+ QPEApplication a(argc,argv);
+
+ MediaPlayerState st( 0, "mediaPlayerState" );
+ mediaPlayerState = &st;
+ PlayListWidget pl( 0, "playList" );
+ playList = &pl;
+ AudioWidget aw( 0, "audioUI" );
+ audioUI = &aw;
+ VideoWidget vw( 0, "videoUI" );
+ videoUI = &vw;
+ LoopControl lc( 0, "loopControl" );
+ loopControl = &lc;
+ MediaPlayer mp( 0, "mediaPlayer" );
+
+ pl.setCaption( MediaPlayer::tr("Media Player") );
+ a.showMainDocumentWidget(&pl);
+
+ return a.exec();
+}
+
+
diff --git a/core/multimedia/opieplayer/mediaplayer.cpp b/core/multimedia/opieplayer/mediaplayer.cpp
new file mode 100644
index 0000000..3d8f76c
--- a/dev/null
+++ b/core/multimedia/opieplayer/mediaplayer.cpp
@@ -0,0 +1,182 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/qpeapplication.h>
+#include <qpe/qlibrary.h>
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qmainwindow.h>
+#include <qmessagebox.h>
+#include <qwidgetstack.h>
+#include <qfile.h>
+
+#include "mediaplayer.h"
+#include "playlistwidget.h"
+#include "audiowidget.h"
+#include "loopcontrol.h"
+#include "audiodevice.h"
+
+#include "mediaplayerstate.h"
+
+
+extern AudioWidget *audioUI;
+extern PlayListWidget *playList;
+extern LoopControl *loopControl;
+extern MediaPlayerState *mediaPlayerState;
+
+
+MediaPlayer::MediaPlayer( QObject *parent, const char *name )
+ : QObject( parent, name ), volumeDirection( 0 ), currentFile( NULL ) {
+
+ connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), this, SLOT( setPlaying( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( pauseCheck( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( next() ), this, SLOT( next() ) );
+ connect( mediaPlayerState, SIGNAL( prev() ), this, SLOT( prev() ) );
+
+ connect( audioUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) );
+ connect( audioUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) );
+ connect( audioUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) );
+ connect( audioUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) );
+}
+
+
+MediaPlayer::~MediaPlayer() {
+}
+
+
+void MediaPlayer::pauseCheck( bool b ) {
+ // Only pause if playing
+ if ( b && !mediaPlayerState->playing() )
+ mediaPlayerState->setPaused( FALSE );
+}
+
+
+void MediaPlayer::play() {
+ mediaPlayerState->setPlaying( FALSE );
+ mediaPlayerState->setPlaying( TRUE );
+}
+
+
+void MediaPlayer::setPlaying( bool play ) {
+
+ if ( !play ) {
+ mediaPlayerState->setPaused( FALSE );
+ loopControl->stop( FALSE );
+ return;
+ }
+
+ if ( mediaPlayerState->paused() ) {
+ mediaPlayerState->setPaused( FALSE );
+ return;
+ }
+
+ const DocLnk *playListCurrent = playList->current();
+
+ if ( playListCurrent != NULL ) {
+ loopControl->stop( TRUE );
+ currentFile = playListCurrent;
+ }
+
+ if ( currentFile == NULL ) {
+ QMessageBox::critical( 0, tr( "No file"), tr( "Error: There is no file selected" ) );
+ mediaPlayerState->setPlaying( FALSE );
+ return;
+ }
+
+ if ( !QFile::exists( currentFile->file() ) ) {
+ QMessageBox::critical( 0, tr( "File not found"), tr( "The following file was not found: <i>" ) + currentFile->file() + "</i>" );
+ mediaPlayerState->setPlaying( FALSE );
+ return;
+ }
+
+ if ( !mediaPlayerState->newDecoder( currentFile->file() ) ) {
+ QMessageBox::critical( 0, tr( "No decoder found"), tr( "Sorry, no appropriate decoders found for this file: <i>" ) + currentFile->file() + "</i>" );
+ mediaPlayerState->setPlaying( FALSE );
+ return;
+ }
+
+ if ( !loopControl->init( currentFile->file() ) ) {
+ QMessageBox::critical( 0, tr( "Error opening file"), tr( "Sorry, an error occured trying to play the file: <i>" ) + currentFile->file() + "</i>" );
+ mediaPlayerState->setPlaying( FALSE );
+ return;
+ }
+
+ long seconds = loopControl->totalPlaytime();
+ QString time; time.sprintf("%li:%02i", seconds/60, (int)seconds%60 );
+ QString tickerText = tr( " File: " ) + currentFile->name() + tr(", Length: ") + time;
+ QString fileInfo = mediaPlayerState->curDecoder()->fileInfo();
+ if ( !fileInfo.isEmpty() )
+ tickerText += ", " + fileInfo;
+ audioUI->setTickerText( tickerText + "." );
+
+ loopControl->play();
+
+ mediaPlayerState->setView( loopControl->hasVideo() ? 'v' : 'a' );
+}
+
+
+void MediaPlayer::prev() {
+ if ( playList->prev() )
+ play();
+ else if ( mediaPlayerState->looping() ) {
+ if ( playList->last() )
+ play();
+ } else
+ mediaPlayerState->setList();
+}
+
+
+void MediaPlayer::next() {
+ if ( playList->next() )
+ play();
+ else if ( mediaPlayerState->looping() ) {
+ if ( playList->first() )
+ play();
+ } else
+ mediaPlayerState->setList();
+}
+
+
+void MediaPlayer::startDecreasingVolume() {
+ volumeDirection = -1;
+ startTimer( 100 );
+ AudioDevice::decreaseVolume();
+}
+
+
+void MediaPlayer::startIncreasingVolume() {
+ volumeDirection = +1;
+ startTimer( 100 );
+ AudioDevice::increaseVolume();
+}
+
+
+void MediaPlayer::stopChangingVolume() {
+ killTimers();
+}
+
+
+void MediaPlayer::timerEvent( QTimerEvent * ) {
+ if ( volumeDirection == +1 )
+ AudioDevice::increaseVolume();
+ else if ( volumeDirection == -1 )
+ AudioDevice::decreaseVolume();
+}
+
diff --git a/core/multimedia/opieplayer/mediaplayer.h b/core/multimedia/opieplayer/mediaplayer.h
new file mode 100644
index 0000000..379d95c
--- a/dev/null
+++ b/core/multimedia/opieplayer/mediaplayer.h
@@ -0,0 +1,59 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MEDIA_PLAYER_H
+#define MEDIA_PLAYER_H
+
+
+#include <qmainwindow.h>
+#include <qframe.h>
+#include <qpe/qlibrary.h>
+#include "mediaplayerplugininterface.h"
+
+
+class DocLnk;
+
+
+class MediaPlayer : public QObject {
+ Q_OBJECT
+public:
+ MediaPlayer( QObject *parent, const char *name );
+ ~MediaPlayer();
+
+private slots:
+ void setPlaying( bool );
+ void pauseCheck( bool );
+ void play();
+ void next();
+ void prev();
+ void startIncreasingVolume();
+ void startDecreasingVolume();
+ void stopChangingVolume();
+
+protected:
+ void timerEvent( QTimerEvent *e );
+
+private:
+ int volumeDirection;
+ const DocLnk *currentFile;
+};
+
+
+#endif // MEDIA_PLAYER_H
+
diff --git a/core/multimedia/opieplayer/mediaplayerplugininterface.h b/core/multimedia/opieplayer/mediaplayerplugininterface.h
new file mode 100644
index 0000000..24d5a80
--- a/dev/null
+++ b/core/multimedia/opieplayer/mediaplayerplugininterface.h
@@ -0,0 +1,113 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MEDIA_PLAYER_PLUGIN_INTERFACE_H
+#define MEDIA_PLAYER_PLUGIN_INTERFACE_H
+
+#include <qpe/qcom.h>
+
+#ifndef QT_NO_COMPONENT
+// {c0093632-b44c-4cf7-a279-d82fe8a8890c}
+# ifndef IID_MediaPlayerPlugin
+# define IID_MediaPlayerPlugin QUuid( 0xc0093632, 0xb44c, 0x4cf7, 0xa2, 0x79, 0xd8, 0x2f, 0xe8, 0xa8, 0x89, 0x0c )
+# endif
+#endif
+
+
+enum ColorFormat {
+ RGB565,
+ BGR565,
+ RGBA8888,
+ BGRA8888
+};
+
+
+class MediaPlayerDecoder {
+
+public:
+ virtual ~MediaPlayerDecoder() { };
+
+ // About Plugin
+ virtual const char *pluginName() = 0;
+ virtual const char *pluginComment() = 0;
+ virtual double pluginVersion() = 0;
+
+ virtual bool isFileSupported( const QString& file ) = 0;
+ virtual bool open( const QString& file ) = 0;
+ virtual bool close() = 0;
+ virtual bool isOpen() = 0;
+ virtual const QString &fileInfo() = 0;
+
+ // If decoder doesn't support audio then return 0 here
+ virtual int audioStreams() = 0;
+ virtual int audioChannels( int stream ) = 0;
+ virtual int audioFrequency( int stream ) = 0;
+ virtual int audioSamples( int stream ) = 0;
+ virtual bool audioSetSample( long sample, int stream ) = 0;
+ virtual long audioGetSample( int stream ) = 0;
+// virtual bool audioReadMonoSamples( short *samples, long samples, long& samplesRead, int stream ) = 0;
+// virtual bool audioReadStereoSamples( short *samples, long samples, long& samplesRead, int stream ) = 0;
+ virtual bool audioReadSamples( short *samples, int channels, long samples, long& samplesRead, int stream ) = 0;
+ // Libmpeg3 functions, perhaps good for reading an audio file with 5 channels or something!
+// virtual bool audioReadSamples( short *samples, int channel, long samples, int stream ) = 0;
+// virtual bool audioReReadSamples( short *samples, int channel, long samples, int stream ) = 0;
+
+ // If decoder doesn't support video then return 0 here
+ virtual int videoStreams() = 0;
+ virtual int videoWidth( int stream ) = 0;
+ virtual int videoHeight( int stream ) = 0;
+ virtual double videoFrameRate( int stream ) = 0; // frames per second (this may change to frames/1000secs)
+ virtual int videoFrames( int stream ) = 0;
+ virtual bool videoSetFrame( long sample, int stream ) = 0;
+ virtual long videoGetFrame( int stream ) = 0;
+ virtual bool videoReadFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, ColorFormat color_model, int stream ) = 0;
+ virtual bool videoReadScaledFrame( unsigned char **output_rows, int in_x, int in_y, int in_w, int in_h, int out_w, int out_h, ColorFormat color_model, int stream ) = 0;
+ virtual bool videoReadYUVFrame( char *y_output, char *u_output, char *v_output, int in_x, int in_y, int in_w, int in_h, int stream ) = 0;
+
+ // Profiling
+ virtual double getTime() = 0;
+
+ // Ignore if these aren't supported
+ virtual bool setSMP( int cpus ) = 0;
+ virtual bool setMMX( bool useMMX ) = 0;
+
+ // Capabilities
+ virtual bool supportsAudio() = 0;
+ virtual bool supportsVideo() = 0;
+ virtual bool supportsYUV() = 0;
+ virtual bool supportsMMX() = 0;
+ virtual bool supportsSMP() = 0;
+ virtual bool supportsStereo() = 0;
+ virtual bool supportsScaling() = 0;
+
+};
+
+
+class MediaPlayerEncoder;
+
+
+struct MediaPlayerPluginInterface : public QUnknownInterface
+{
+ virtual MediaPlayerDecoder *decoder() = 0;
+ virtual MediaPlayerEncoder *encoder() = 0;
+};
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/mediaplayerstate.cpp b/core/multimedia/opieplayer/mediaplayerstate.cpp
new file mode 100644
index 0000000..9b9d133
--- a/dev/null
+++ b/core/multimedia/opieplayer/mediaplayerstate.cpp
@@ -0,0 +1,185 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/qpeapplication.h>
+#include <qpe/qlibrary.h>
+#include <qpe/config.h>
+#include <qvaluelist.h>
+#include <qobject.h>
+#include <qdir.h>
+#include "mediaplayerplugininterface.h"
+#include "mediaplayerstate.h"
+
+#ifdef QT_NO_COMPONENT
+// Plugins which are compiled in when no plugin architecture available
+#include "libmad/libmadpluginimpl.h"
+#include "libmpeg3/libmpeg3pluginimpl.h"
+#include "wavplugin/wavpluginimpl.h"
+#endif
+
+
+//#define MediaPlayerDebug(x) qDebug x
+#define MediaPlayerDebug(x)
+
+
+MediaPlayerState::MediaPlayerState( QObject *parent, const char *name )
+ : QObject( parent, name ), decoder( NULL ), libmpeg3decoder( NULL ) {
+ Config cfg( "MediaPlayer" );
+ readConfig( cfg );
+ loadPlugins();
+}
+
+
+MediaPlayerState::~MediaPlayerState() {
+ Config cfg( "MediaPlayer" );
+ writeConfig( cfg );
+}
+
+
+void MediaPlayerState::readConfig( Config& cfg ) {
+ cfg.setGroup("Options");
+ isFullscreen = cfg.readBoolEntry( "FullScreen" );
+ isScaled = cfg.readBoolEntry( "Scaling" );
+ isLooping = cfg.readBoolEntry( "Looping" );
+ isShuffled = cfg.readBoolEntry( "Shuffle" );
+ usePlaylist = cfg.readBoolEntry( "UsePlayList" );
+ isPlaying = FALSE;
+ isPaused = FALSE;
+ curPosition = 0;
+ curLength = 0;
+ curView = 'l';
+}
+
+
+void MediaPlayerState::writeConfig( Config& cfg ) const {
+ cfg.setGroup("Options");
+ cfg.writeEntry("FullScreen", isFullscreen );
+ cfg.writeEntry("Scaling", isScaled );
+ cfg.writeEntry("Looping", isLooping );
+ cfg.writeEntry("Shuffle", isShuffled );
+ cfg.writeEntry("UsePlayList", usePlaylist );
+}
+
+
+struct MediaPlayerPlugin {
+#ifndef QT_NO_COMPONENT
+ QLibrary *library;
+#endif
+ MediaPlayerPluginInterface *iface;
+ MediaPlayerDecoder *decoder;
+ MediaPlayerEncoder *encoder;
+};
+
+
+static QValueList<MediaPlayerPlugin> pluginList;
+
+
+// Find the first decoder which supports this type of file
+MediaPlayerDecoder *MediaPlayerState::newDecoder( const QString& file ) {
+ MediaPlayerDecoder *tmpDecoder = NULL;
+ QValueList<MediaPlayerPlugin>::Iterator it;
+ for ( it = pluginList.begin(); it != pluginList.end(); ++it ) {
+ if ( (*it).decoder->isFileSupported( file ) ) {
+ tmpDecoder = (*it).decoder;
+ break;
+ }
+ }
+ return decoder = tmpDecoder;
+}
+
+
+MediaPlayerDecoder *MediaPlayerState::curDecoder() {
+ return decoder;
+}
+
+
+// ### hack to get true sample count
+MediaPlayerDecoder *MediaPlayerState::libMpeg3Decoder() {
+ return libmpeg3decoder;
+}
+
+
+void MediaPlayerState::loadPlugins() {
+
+#ifndef QT_NO_COMPONENT
+ QValueList<MediaPlayerPlugin>::Iterator mit;
+ for ( mit = pluginList.begin(); mit != pluginList.end(); ++mit ) {
+ (*mit).iface->release();
+ (*mit).library->unload();
+ delete (*mit).library;
+ }
+ pluginList.clear();
+
+ QString path = QPEApplication::qpeDir() + "/plugins/codecs";
+ QDir dir( path, "lib*.so" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ MediaPlayerPluginInterface *iface = 0;
+ QLibrary *lib = new QLibrary( path + "/" + *it );
+
+ MediaPlayerDebug(( "querying: %s", QString( path + "/" + *it ).latin1() ));
+
+ if ( lib->queryInterface( IID_MediaPlayerPlugin, (QUnknownInterface**)&iface ) == QS_OK ) {
+
+ MediaPlayerDebug(( "loading: %s", QString( path + "/" + *it ).latin1() ));
+
+ MediaPlayerPlugin plugin;
+ plugin.library = lib;
+ plugin.iface = iface;
+ plugin.decoder = plugin.iface->decoder();
+ plugin.encoder = plugin.iface->encoder();
+ pluginList.append( plugin );
+
+ // ### hack to get true sample count
+ if ( plugin.decoder->pluginName() == QString("LibMpeg3Plugin") )
+ libmpeg3decoder = plugin.decoder;
+
+ } else {
+ delete lib;
+ }
+ }
+#else
+ pluginList.clear();
+
+ MediaPlayerPlugin plugin0;
+ plugin0.iface = new LibMpeg3PluginImpl;
+ plugin0.decoder = plugin0.iface->decoder();
+ plugin0.encoder = plugin0.iface->encoder();
+ pluginList.append( plugin0 );
+
+ MediaPlayerPlugin plugin1;
+ plugin1.iface = new LibMadPluginImpl;
+ plugin1.decoder = plugin1.iface->decoder();
+ plugin1.encoder = plugin1.iface->encoder();
+ pluginList.append( plugin1 );
+
+ MediaPlayerPlugin plugin2;
+ plugin2.iface = new WavPluginImpl;
+ plugin2.decoder = plugin2.iface->decoder();
+ plugin2.encoder = plugin2.iface->encoder();
+ pluginList.append( plugin2 );
+#endif
+
+ if ( pluginList.count() )
+ MediaPlayerDebug(( "%i decoders found", pluginList.count() ));
+ else
+ MediaPlayerDebug(( "No decoders found" ));
+}
+
diff --git a/core/multimedia/opieplayer/mediaplayerstate.h b/core/multimedia/opieplayer/mediaplayerstate.h
new file mode 100644
index 0000000..5d95b92
--- a/dev/null
+++ b/core/multimedia/opieplayer/mediaplayerstate.h
@@ -0,0 +1,117 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MEDIA_PLAYER_STATE_H
+#define MEDIA_PLAYER_STATE_H
+
+
+#include <qobject.h>
+
+
+class MediaPlayerDecoder;
+class Config;
+
+
+class MediaPlayerState : public QObject {
+Q_OBJECT
+public:
+ MediaPlayerState( QObject *parent, const char *name );
+ ~MediaPlayerState();
+
+ bool fullscreen() { return isFullscreen; }
+ bool scaled() { return isScaled; }
+ bool looping() { return isLooping; }
+ bool shuffled() { return isShuffled; }
+ bool playlist() { return usePlaylist; }
+ bool paused() { return isPaused; }
+ bool playing() { return isPlaying; }
+ long position() { return curPosition; }
+ long length() { return curLength; }
+ char view() { return curView; }
+
+ MediaPlayerDecoder *newDecoder( const QString& file );
+ MediaPlayerDecoder *curDecoder();
+ MediaPlayerDecoder *libMpeg3Decoder(); // ### Yucky hack needed to use libmpeg3plugin to get the
+ // number of audio samples if we are using the libmad plugin
+public slots:
+ void setFullscreen( bool b ) { if ( isFullscreen == b ) return; isFullscreen = b; emit fullscreenToggled(b); }
+ void setScaled( bool b ) { if ( isScaled == b ) return; isScaled = b; emit scaledToggled(b); }
+ void setLooping( bool b ) { if ( isLooping == b ) return; isLooping = b; emit loopingToggled(b); }
+ void setShuffled( bool b ) { if ( isShuffled == b ) return; isShuffled = b; emit shuffledToggled(b); }
+ void setPlaylist( bool b ) { if ( usePlaylist == b ) return; usePlaylist = b; emit playlistToggled(b); }
+ void setPaused( bool b ) { if ( isPaused == b ) return; isPaused = b; emit pausedToggled(b); }
+ void setPlaying( bool b ) { if ( isPlaying == b ) return; isPlaying = b; emit playingToggled(b); }
+ void setPosition( long p ) { if ( curPosition == p ) return; curPosition = p; emit positionChanged(p); }
+ void updatePosition( long p ){ if ( curPosition == p ) return; curPosition = p; emit positionUpdated(p); }
+ void setLength( long l ) { if ( curLength == l ) return; curLength = l; emit lengthChanged(l); }
+ void setView( char v ) { if ( curView == v ) return; curView = v; emit viewChanged(v); }
+
+ void setPrev() { emit prev(); }
+ void setNext() { emit next(); }
+ void setList() { setPlaying( FALSE ); setView('l'); }
+ void setVideo() { setView('v'); }
+ void setAudio() { setView('a'); }
+
+ void toggleFullscreen() { setFullscreen( !isFullscreen ); }
+ void toggleScaled() { setScaled( !isScaled); }
+ void toggleLooping() { setLooping( !isLooping); }
+ void toggleShuffled() { setShuffled( !isShuffled); }
+ void togglePlaylist() { setPlaylist( !usePlaylist); }
+ void togglePaused() { setPaused( !isPaused); }
+ void togglePlaying() { setPlaying( !isPlaying); }
+
+signals:
+ void fullscreenToggled( bool );
+ void scaledToggled( bool );
+ void loopingToggled( bool );
+ void shuffledToggled( bool );
+ void playlistToggled( bool );
+ void pausedToggled( bool );
+ void playingToggled( bool );
+ void positionChanged( long ); // When the slider is moved
+ void positionUpdated( long ); // When the media file progresses
+ void lengthChanged( long );
+ void viewChanged( char );
+
+ void prev();
+ void next();
+
+private:
+ bool isFullscreen;
+ bool isScaled;
+ bool isLooping;
+ bool isShuffled;
+ bool usePlaylist;
+ bool isPaused;
+ bool isPlaying;
+ long curPosition;
+ long curLength;
+ char curView;
+
+ MediaPlayerDecoder *decoder;
+ MediaPlayerDecoder *libmpeg3decoder;
+
+ void loadPlugins();
+ void readConfig( Config& cfg );
+ void writeConfig( Config& cfg ) const;
+};
+
+
+#endif // MEDIA_PLAYER_STATE_H
+
diff --git a/core/multimedia/opieplayer/mpegplayer.pro b/core/multimedia/opieplayer/mpegplayer.pro
new file mode 100644
index 0000000..d6952f8
--- a/dev/null
+++ b/core/multimedia/opieplayer/mpegplayer.pro
@@ -0,0 +1,21 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = loopcontrol.h mediaplayerplugininterface.h playlistselection.h mediaplayerstate.h \
+ videowidget.h audiowidget.h playlistwidget.h mediaplayer.h audiodevice.h
+SOURCES = main.cpp \
+ loopcontrol.cpp playlistselection.cpp mediaplayerstate.cpp \
+ videowidget.cpp audiowidget.cpp playlistwidget.cpp mediaplayer.cpp audiodevice.cpp
+TARGET = mpegplayer
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe -lpthread
+
+# INTERFACES =
+# INCLUDEPATH += $(QPEDIR)/include
+# CONFIG+=static
+# TMAKE_CXXFLAGS += -DQPIM_STANDALONE
+# LIBS += libmpeg3/libmpeg3.a -lpthread
+# LIBS += $(QPEDIR)/plugins/codecs/liblibmadplugin.so
+
+TRANSLATIONS = ../i18n/de/mpegplayer.ts
diff --git a/core/multimedia/opieplayer/playlistselection.cpp b/core/multimedia/opieplayer/playlistselection.cpp
new file mode 100644
index 0000000..fbfb946
--- a/dev/null
+++ b/core/multimedia/opieplayer/playlistselection.cpp
@@ -0,0 +1,179 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/applnk.h>
+#include <qpe/resource.h>
+#include <qpainter.h>
+#include <qimage.h>
+#include <qheader.h>
+#include <qlistview.h>
+#include <qlist.h>
+#include <qpixmap.h>
+
+#include "playlistselection.h"
+
+#include <stdlib.h>
+
+
+class PlayListSelectionItem : public QListViewItem {
+public:
+ PlayListSelectionItem( QListView *parent, const DocLnk *f ) : QListViewItem( parent ), fl( f ) {
+ setText( 0, f->name() );
+ setPixmap( 0, f->pixmap() );
+ }
+
+ ~PlayListSelectionItem() {
+ };
+
+ const DocLnk *file() const { return fl; }
+
+private:
+ const DocLnk *fl;
+};
+
+
+PlayListSelection::PlayListSelection( QWidget *parent, const char *name )
+ : QListView( parent, name )
+{
+#ifdef USE_PLAYLIST_BACKGROUND
+ setStaticBackground( TRUE );
+ setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/background" ) );
+#endif
+ setAllColumnsShowFocus( TRUE );
+ addColumn( tr( "Playlist Selection" ) );
+ header()->hide();
+ setSorting( -1, FALSE );
+}
+
+
+PlayListSelection::~PlayListSelection() {
+}
+
+
+#ifdef USE_PLAYLIST_BACKGROUND
+void PlayListSelection::drawBackground( QPainter *p, const QRect &r ) {
+ p->fillRect( r, QBrush( white ) );
+ QImage logo = Resource::loadImage( "mpegplayer/background" );
+ if ( !logo.isNull() )
+ p->drawImage( (width() - logo.width()) / 2, (height() - logo.height()) / 2, logo );
+}
+#endif
+
+
+void PlayListSelection::contentsMouseMoveEvent( QMouseEvent *event ) {
+ if ( event->state() == QMouseEvent::LeftButton ) {
+ QListViewItem *currentItem = selectedItem();
+ QListViewItem *itemUnder = itemAt( QPoint( event->pos().x(), event->pos().y() - contentsY() ) );
+ if ( currentItem && currentItem->itemAbove() == itemUnder )
+ moveSelectedUp();
+ else if ( currentItem && currentItem->itemBelow() == itemUnder )
+ moveSelectedDown();
+ }
+}
+
+
+const DocLnk *PlayListSelection::current() {
+ PlayListSelectionItem *item = (PlayListSelectionItem *)selectedItem();
+ if ( item )
+ return item->file();
+ return NULL;
+}
+
+
+void PlayListSelection::addToSelection( const DocLnk &lnk ) {
+ PlayListSelectionItem *item = new PlayListSelectionItem( this, new DocLnk( lnk ) );
+ QListViewItem *current = selectedItem();
+ if ( current )
+ item->moveItem( current );
+ setSelected( item, TRUE );
+ ensureItemVisible( selectedItem() );
+}
+
+
+void PlayListSelection::removeSelected() {
+ QListViewItem *item = selectedItem();
+ if ( item )
+ delete item;
+ setSelected( currentItem(), TRUE );
+ ensureItemVisible( selectedItem() );
+}
+
+
+void PlayListSelection::moveSelectedUp() {
+ QListViewItem *item = selectedItem();
+ if ( item && item->itemAbove() )
+ item->itemAbove()->moveItem( item );
+ ensureItemVisible( selectedItem() );
+}
+
+
+void PlayListSelection::moveSelectedDown() {
+ QListViewItem *item = selectedItem();
+ if ( item && item->itemBelow() )
+ item->moveItem( item->itemBelow() );
+ ensureItemVisible( selectedItem() );
+}
+
+
+bool PlayListSelection::prev() {
+ QListViewItem *item = selectedItem();
+ if ( item && item->itemAbove() )
+ setSelected( item->itemAbove(), TRUE );
+ else
+ return FALSE;
+ ensureItemVisible( selectedItem() );
+ return TRUE;
+}
+
+
+bool PlayListSelection::next() {
+ QListViewItem *item = selectedItem();
+ if ( item && item->itemBelow() )
+ setSelected( item->itemBelow(), TRUE );
+ else
+ return FALSE;
+ ensureItemVisible( selectedItem() );
+ return TRUE;
+}
+
+
+bool PlayListSelection::first() {
+ QListViewItem *item = firstChild();
+ if ( item )
+ setSelected( item, TRUE );
+ else
+ return FALSE;
+ ensureItemVisible( selectedItem() );
+ return TRUE;
+}
+
+
+bool PlayListSelection::last() {
+ QListViewItem *prevItem = NULL;
+ QListViewItem *item = firstChild();
+ while ( ( item = item->nextSibling() ) )
+ prevItem = item;
+ if ( prevItem )
+ setSelected( prevItem, TRUE );
+ else
+ return FALSE;
+ ensureItemVisible( selectedItem() );
+ return TRUE;
+}
+
diff --git a/core/multimedia/opieplayer/playlistselection.h b/core/multimedia/opieplayer/playlistselection.h
new file mode 100644
index 0000000..6ce6bdc
--- a/dev/null
+++ b/core/multimedia/opieplayer/playlistselection.h
@@ -0,0 +1,62 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PLAY_LIST_SELECTION_H
+#define PLAY_LIST_SELECTION_H
+
+
+#include <qlist.h>
+#include <qlistview.h>
+#include <qpe/applnk.h>
+
+
+class PlayListSelection : public QListView {
+ Q_OBJECT
+public:
+ PlayListSelection( QWidget *parent, const char *name=0 );
+ ~PlayListSelection();
+
+ const DocLnk *current(); // retrieve the current playlist entry (media file link)
+
+public slots:
+ void addToSelection( const DocLnk & ); // Add a media file to the playlist
+ void removeSelected(); // Remove a media file from the playlist
+ void moveSelectedUp(); // Move the media file up the playlist so it is played earlier
+ void moveSelectedDown(); // Move the media file down the playlist so it is played later
+ bool prev();
+ bool next();
+ bool first();
+ bool last();
+
+protected:
+ virtual void contentsMouseMoveEvent(QMouseEvent *);
+#ifdef USE_PLAYLIST_BACKGROUND
+ virtual void drawBackground( QPainter *p, const QRect &r );
+ virtual void paintEmptyArea( QPainter *p, const QRect &r ) { drawBackground( p, r ); };
+#endif
+
+private:
+ QList<DocLnk> selectedList;
+ const DocLnk *lnk;
+};
+
+
+#endif // PLAY_LIST_SELECTION_H
+
+
diff --git a/core/multimedia/opieplayer/playlistwidget.cpp b/core/multimedia/opieplayer/playlistwidget.cpp
new file mode 100644
index 0000000..969fc4b
--- a/dev/null
+++ b/core/multimedia/opieplayer/playlistwidget.cpp
@@ -0,0 +1,448 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/qpemenubar.h>
+#include <qpe/qpetoolbar.h>
+#include <qpe/fileselector.h>
+#include <qpe/applnk.h>
+#include <qpe/config.h>
+#include <qpe/global.h>
+#include <qpe/resource.h>
+#include <qaction.h>
+#include <qimage.h>
+#include <qfile.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qlist.h>
+#include <qlistbox.h>
+#include <qmainwindow.h>
+#include <qmessagebox.h>
+#include <qtoolbutton.h>
+
+#include "playlistselection.h"
+#include "playlistwidget.h"
+#include "mediaplayerstate.h"
+
+#include <stdlib.h>
+
+
+extern MediaPlayerState *mediaPlayerState;
+
+
+class PlayListWidgetPrivate {
+public:
+ QToolButton *tbPlay;
+ QToolButton *tbFull;
+ QToolButton *tbLoop;
+ QToolButton *tbScale;
+ QToolButton *tbShuffle;
+
+ QFrame *playListFrame;
+ FileSelector *files;
+ PlayListSelection *selectedFiles;
+ bool setDocumentUsed;
+ DocLnk *current;
+};
+
+
+class ToolButton : public QToolButton {
+public:
+ ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE )
+ : QToolButton( parent, name ) {
+ setTextLabel( name );
+ setPixmap( Resource::loadPixmap( icon ) );
+ setAutoRaise( TRUE );
+ setFocusPolicy( QWidget::NoFocus );
+ setToggleButton( t );
+ connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot );
+ QPEMenuToolFocusManager::manager()->addWidget( this );
+ }
+};
+
+
+class MenuItem : public QAction {
+public:
+ MenuItem( QWidget *parent, const QString& text, QObject *handler, const QString& slot )
+ : QAction( text, QString::null, 0, 0 ) {
+ connect( this, SIGNAL( activated() ), handler, slot );
+ addTo( parent );
+ }
+};
+
+
+PlayListWidget::PlayListWidget( QWidget* parent, const char* name, WFlags fl )
+ : QMainWindow( parent, name, fl ) {
+
+ d = new PlayListWidgetPrivate;
+ d->setDocumentUsed = FALSE;
+ d->current = NULL;
+
+ setBackgroundMode( PaletteButton );
+
+ setCaption( tr("MediaPlayer") );
+ setIcon( Resource::loadPixmap( "MPEGPlayer" ) );
+
+ setToolBarsMovable( FALSE );
+
+ // Create Toolbar
+ QPEToolBar *toolbar = new QPEToolBar( this );
+ toolbar->setHorizontalStretchable( TRUE );
+
+ // Create Menubar
+ QPEMenuBar *menu = new QPEMenuBar( toolbar );
+ menu->setMargin( 0 );
+
+ QPEToolBar *bar = new QPEToolBar( this );
+ bar->setLabel( tr( "Play Operations" ) );
+#ifdef BUTTONS_ON_TOOLBAR
+ d->tbPlay = new ToolButton( bar, tr( "Play" ), "mpegplayer/play", mediaPlayerState, SLOT(setPlaying(bool)), TRUE );
+ d->tbShuffle = new ToolButton( bar, tr( "Randomize" ), "mpegplayer/shuffle", mediaPlayerState, SLOT(setShuffled(bool)), TRUE );
+#endif
+ d->tbLoop = new ToolButton( bar, tr( "Loop" ), "mpegplayer/loop", mediaPlayerState, SLOT(setLooping(bool)), TRUE );
+ d->tbFull = new ToolButton( bar, tr( "Fullscreen" ), "fullscreen", mediaPlayerState, SLOT(setFullscreen(bool)), TRUE );
+ d->tbScale = new ToolButton( bar, tr( "Scale" ), "mpegplayer/scale", mediaPlayerState, SLOT(setScaled(bool)), TRUE );
+
+ QPopupMenu *pmPlayList = new QPopupMenu( this );
+ menu->insertItem( tr( "PlayList" ), pmPlayList );
+ new MenuItem( pmPlayList, tr( "Toggle PlayList" ), mediaPlayerState, SLOT( togglePlaylist() ) );
+ new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) );
+ new MenuItem( pmPlayList, tr( "Add all music files" ), this, SLOT( addAllMusicToList() ) );
+ new MenuItem( pmPlayList, tr( "Add all video files" ), this, SLOT( addAllVideoToList() ) );
+ new MenuItem( pmPlayList, tr( "Add all files" ), this, SLOT( addAllToList() ) );
+#ifdef CAN_SAVE_LOAD_PLAYLISTS
+ new MenuItem( pmPlayList, tr( "Save PlayList" ), this, SLOT( saveList() ) );
+ new MenuItem( pmPlayList, tr( "Load PlayList" ), this, SLOT( loadList() ) );
+#endif
+
+ QVBox *vbox5 = new QVBox( this ); vbox5->setBackgroundMode( PaletteButton );
+
+ // Add the playlist area
+ QVBox *vbox3 = new QVBox( vbox5 ); vbox3->setBackgroundMode( PaletteButton );
+ d->playListFrame = vbox3;
+
+ QLabel *plString = new QLabel( tr(" PlayList"), vbox3 );
+ plString->setBackgroundMode( QButton::PaletteButton );
+ plString->setFont( QFont( "Helvetica", 8, QFont::Bold ) );
+
+ QHBox *hbox2 = new QHBox( vbox3 ); hbox2->setBackgroundMode( PaletteButton );
+ d->selectedFiles = new PlayListSelection( hbox2 );
+ QVBox *vbox1 = new QVBox( hbox2 ); vbox1->setBackgroundMode( PaletteButton );
+
+#ifndef BUTTONS_ON_TOOLBAR
+ d->tbPlay = new ToolButton( vbox1, tr( "Play" ), "mpegplayer/play", mediaPlayerState, SLOT(setPlaying(bool)), TRUE );
+ QVBox *stretch1 = new QVBox( vbox1 ); stretch1->setBackgroundMode( PaletteButton ); // add stretch
+#endif
+ new ToolButton( vbox1, tr( "Move Up" ), "mpegplayer/up", d->selectedFiles, SLOT(moveSelectedUp()) );
+ new ToolButton( vbox1, tr( "Remove" ), "mpegplayer/cut", d->selectedFiles, SLOT(removeSelected()) );
+ new ToolButton( vbox1, tr( "Move Down" ), "mpegplayer/down", d->selectedFiles, SLOT(moveSelectedDown()) );
+ QVBox *stretch2 = new QVBox( vbox1 ); stretch2->setBackgroundMode( PaletteButton ); // add stretch
+#ifndef BUTTONS_ON_TOOLBAR
+ d->tbShuffle = new ToolButton( vbox1, tr( "Randomize" ), "mpegplayer/shuffle", mediaPlayerState, SLOT(setShuffled(bool)), TRUE );
+#endif
+
+ // add the library area
+ QVBox *vbox4 = new QVBox( vbox5 ); vbox4->setBackgroundMode( PaletteButton );
+
+ QLabel *libString = new QLabel( tr(" Media Library"), vbox4 );
+ libString->setBackgroundMode( QButton::PaletteButton );
+ libString->setFont( QFont( "Helvetica", 8, QFont::Bold ) );
+
+ QHBox *hbox6 = new QHBox( vbox4 ); hbox6->setBackgroundMode( PaletteButton );
+ d->files = new FileSelector( "video/*;audio/*", hbox6, "Find Media Files", FALSE, FALSE );
+ d->files->setBackgroundMode( PaletteButton );
+ QVBox *vbox7 = new QVBox( hbox6 ); vbox7->setBackgroundMode( PaletteButton );
+
+#ifdef SIDE_BUTTONS
+ new ToolButton( vbox7, tr( "Add to Playlist" ), "mpegplayer/add_to_playlist", d->selectedFiles, SLOT(addSelected()) );
+ new ToolButton( vbox7, tr( "Remove from Playlist" ), "mpegplayer/remove_from_playlist", d->selectedFiles, SLOT(removeSelected()) );
+ QVBox *stretch3 = new QVBox( vbox1 ); stretch3->setBackgroundMode( PaletteButton ); // add stretch
+#endif
+
+ connect( d->files, SIGNAL( fileSelected( const DocLnk & ) ), this, SLOT( addToSelection( const DocLnk & ) ) );
+ connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), d->tbPlay, SLOT( setOn( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( loopingToggled( bool ) ), d->tbLoop, SLOT( setOn( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), d->tbShuffle, SLOT( setOn( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), d->tbFull, SLOT( setOn( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( scaledToggled( bool ) ), d->tbScale, SLOT( setOn( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), d->tbScale, SLOT( setEnabled( bool ) ) );
+ connect( mediaPlayerState, SIGNAL( playlistToggled( bool ) ), this, SLOT( setPlaylist( bool ) ) );
+
+ setCentralWidget( vbox5 );
+
+ Config cfg( "MediaPlayer" );
+ readConfig( cfg );
+
+ initializeStates();
+}
+
+
+PlayListWidget::~PlayListWidget() {
+ Config cfg( "MediaPlayer" );
+ writeConfig( cfg );
+
+ if ( d->current )
+ delete d->current;
+ delete d;
+}
+
+
+void PlayListWidget::initializeStates() {
+ d->tbPlay->setOn( mediaPlayerState->playing() );
+ d->tbLoop->setOn( mediaPlayerState->looping() );
+ d->tbShuffle->setOn( mediaPlayerState->shuffled() );
+ d->tbFull->setOn( mediaPlayerState->fullscreen() );
+ d->tbScale->setOn( mediaPlayerState->scaled() );
+ d->tbScale->setEnabled( mediaPlayerState->fullscreen() );
+ setPlaylist( mediaPlayerState->playlist() );
+}
+
+
+void PlayListWidget::readConfig( Config& cfg ) {
+ cfg.setGroup("PlayList");
+
+ int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 );
+
+ for ( int i = 0; i < noOfFiles; i++ ) {
+ QString entryName;
+ entryName.sprintf( "File%i", i + 1 );
+ QString linkFile = cfg.readEntry( entryName );
+ DocLnk lnk( linkFile );
+ if ( lnk.isValid() )
+ d->selectedFiles->addToSelection( lnk );
+
+ }
+}
+
+
+void PlayListWidget::writeConfig( Config& cfg ) const {
+ cfg.setGroup("PlayList");
+
+ int noOfFiles = 0;
+
+ d->selectedFiles->first();
+ do {
+ const DocLnk *lnk = d->selectedFiles->current();
+ if ( lnk ) {
+ QString entryName;
+ entryName.sprintf( "File%i", noOfFiles + 1 );
+ cfg.writeEntry( entryName, lnk->linkFile() );
+ // if this link does exist, add it so we have the file
+ // next time...
+ if ( !QFile::exists( lnk->linkFile() ) ) {
+ // the way writing lnks doesn't really check for out
+ // of disk space, but check it anyway.
+ if ( !lnk->writeLink() ) {
+ QMessageBox::critical( 0, tr("Out of space"),
+ tr( "There was a problem saving "
+ "the playlist.\n"
+ "Your playlist "
+ "may be missing some entries\n"
+ "the next time you start it." )
+ );
+ }
+ }
+ noOfFiles++;
+ }
+ } while ( d->selectedFiles->next() );
+
+ cfg.writeEntry("NumberOfFiles", noOfFiles );
+}
+
+
+void PlayListWidget::addToSelection( const DocLnk& lnk ) {
+ d->setDocumentUsed = FALSE;
+ if ( mediaPlayerState->playlist() )
+ d->selectedFiles->addToSelection( lnk );
+ else
+ mediaPlayerState->setPlaying( TRUE );
+}
+
+
+void PlayListWidget::clearList() {
+ while ( first() )
+ d->selectedFiles->removeSelected();
+}
+
+
+void PlayListWidget::addAllToList() {
+ DocLnkSet files;
+ Global::findDocuments(&files, "video/*;audio/*");
+ QListIterator<DocLnk> dit( files.children() );
+ for ( ; dit.current(); ++dit )
+ d->selectedFiles->addToSelection( **dit );
+}
+
+
+void PlayListWidget::addAllMusicToList() {
+ DocLnkSet files;
+ Global::findDocuments(&files, "audio/*");
+ QListIterator<DocLnk> dit( files.children() );
+ for ( ; dit.current(); ++dit )
+ d->selectedFiles->addToSelection( **dit );
+}
+
+
+void PlayListWidget::addAllVideoToList() {
+ DocLnkSet files;
+ Global::findDocuments(&files, "video/*");
+ QListIterator<DocLnk> dit( files.children() );
+ for ( ; dit.current(); ++dit )
+ d->selectedFiles->addToSelection( **dit );
+}
+
+
+void PlayListWidget::setDocument(const QString& fileref) {
+ if ( fileref.isNull() ) {
+ QMessageBox::critical( 0, tr( "Invalid File" ), tr( "There was a problem in getting the file." ) );
+ return;
+ }
+ if ( mediaPlayerState->playlist() )
+ addToSelection( DocLnk( fileref ) );
+ else {
+ d->setDocumentUsed = TRUE;
+ if ( d->current )
+ delete d->current;
+ d->current = new DocLnk( fileref );
+ }
+ mediaPlayerState->setPlaying( FALSE );
+ mediaPlayerState->setPlaying( TRUE );
+}
+
+
+void PlayListWidget::setActiveWindow() {
+ // When we get raised we need to ensure that it switches views
+ char origView = mediaPlayerState->view();
+ mediaPlayerState->setView( 'l' ); // invalidate
+ mediaPlayerState->setView( origView ); // now switch back
+}
+
+
+void PlayListWidget::useSelectedDocument() {
+ d->setDocumentUsed = FALSE;
+}
+
+
+const DocLnk *PlayListWidget::current() {
+ if ( mediaPlayerState->playlist() )
+ return d->selectedFiles->current();
+ else if ( d->setDocumentUsed && d->current ) {
+ return d->current;
+ } else
+ return d->files->selected();
+}
+
+
+bool PlayListWidget::prev() {
+ if ( mediaPlayerState->playlist() ) {
+ if ( mediaPlayerState->shuffled() ) {
+ const DocLnk *cur = current();
+ int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0));
+ for ( int i = 0; i < j; i++ ) {
+ if ( !d->selectedFiles->next() )
+ d->selectedFiles->first();
+ }
+ if ( cur == current() )
+ if ( !d->selectedFiles->next() )
+ d->selectedFiles->first();
+ return TRUE;
+ } else {
+ if ( !d->selectedFiles->prev() ) {
+ if ( mediaPlayerState->looping() ) {
+ return d->selectedFiles->last();
+ } else {
+ return FALSE;
+ }
+ }
+ return TRUE;
+ }
+ } else {
+ return mediaPlayerState->looping();
+ }
+}
+
+
+bool PlayListWidget::next() {
+ if ( mediaPlayerState->playlist() ) {
+ if ( mediaPlayerState->shuffled() ) {
+ return prev();
+ } else {
+ if ( !d->selectedFiles->next() ) {
+ if ( mediaPlayerState->looping() ) {
+ return d->selectedFiles->first();
+ } else {
+ return FALSE;
+ }
+ }
+ return TRUE;
+ }
+ } else {
+ return mediaPlayerState->looping();
+ }
+}
+
+
+bool PlayListWidget::first() {
+ if ( mediaPlayerState->playlist() )
+ return d->selectedFiles->first();
+ else
+ return mediaPlayerState->looping();
+}
+
+
+bool PlayListWidget::last() {
+ if ( mediaPlayerState->playlist() )
+ return d->selectedFiles->last();
+ else
+ return mediaPlayerState->looping();
+}
+
+
+void PlayListWidget::saveList() {
+ QString filename;
+// pseudo code
+// filename = QLineEdit->getText();
+ Config cfg( filename + ".playlist" );
+ writeConfig( cfg );
+}
+
+
+void PlayListWidget::loadList() {
+ QString filename;
+// pseudo code
+// filename = FileSelector->openFile( "*.playlist" );
+ Config cfg( filename + ".playlist" );
+ readConfig( cfg );
+}
+
+
+void PlayListWidget::setPlaylist( bool shown ) {
+ if ( shown )
+ d->playListFrame->show();
+ else
+ d->playListFrame->hide();
+}
+
+
+void PlayListWidget::setView( char view ) {
+ if ( view == 'l' )
+ showMaximized();
+ else
+ hide();
+}
+
diff --git a/core/multimedia/opieplayer/playlistwidget.h b/core/multimedia/opieplayer/playlistwidget.h
new file mode 100644
index 0000000..6976641
--- a/dev/null
+++ b/core/multimedia/opieplayer/playlistwidget.h
@@ -0,0 +1,68 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PLAY_LIST_WIDGET_H
+#define PLAY_LIST_WIDGET_H
+
+
+#include <qmainwindow.h>
+#include <qpe/applnk.h>
+
+
+class PlayListWidgetPrivate;
+class Config;
+
+
+class PlayListWidget : public QMainWindow {
+ Q_OBJECT
+public:
+ PlayListWidget( QWidget* parent=0, const char* name=0, WFlags fl=0 );
+ ~PlayListWidget();
+
+ // retrieve the current playlist entry (media file link)
+ const DocLnk *current();
+ void useSelectedDocument();
+
+public slots:
+ void setDocument( const QString& fileref );
+ void addToSelection( const DocLnk& ); // Add a media file to the playlist
+ void setActiveWindow(); // need to handle this to show the right view
+ void setPlaylist( bool ); // Show/Hide the playlist
+ void setView( char );
+ void clearList();
+ void addAllToList();
+ void addAllMusicToList();
+ void addAllVideoToList();
+ void saveList(); // Save the playlist
+ void loadList(); // Load a playlist
+ bool first();
+ bool last();
+ bool next();
+ bool prev();
+
+private:
+ void initializeStates();
+ void readConfig( Config& cfg );
+ void writeConfig( Config& cfg ) const;
+ PlayListWidgetPrivate *d; // Private implementation data
+};
+
+
+#endif // PLAY_LIST_WIDGET_H
+
diff --git a/core/multimedia/opieplayer/qpe-mpegplayer.control b/core/multimedia/opieplayer/qpe-mpegplayer.control
new file mode 100644
index 0000000..2cad8ab
--- a/dev/null
+++ b/core/multimedia/opieplayer/qpe-mpegplayer.control
@@ -0,0 +1,9 @@
+Files: bin/mpegplayer pics/mpegplayer/* apps/Applications/mpegplayer.desktop plugins/codecs/libmpeg3plugin.so plugins/codecs/libmpeg3plugin.so.1 plugins/codecs/libmpeg3plugin.so.1.0 plugins/codecs/libmpeg3plugin.so.1.0.0
+Priority: optional
+Section: qpe/applications
+Maintainer: John Ryland <jryland@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: MPEG video/audio player
+ The mpegplayer for the Qtopia environment.
diff --git a/core/multimedia/opieplayer/videowidget.cpp b/core/multimedia/opieplayer/videowidget.cpp
new file mode 100644
index 0000000..f3974a0
--- a/dev/null
+++ b/core/multimedia/opieplayer/videowidget.cpp
@@ -0,0 +1,423 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/resource.h>
+#include <qwidget.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qslider.h>
+#include <qdrawutil.h>
+#include "videowidget.h"
+#include "mediaplayerplugininterface.h"
+#include "mediaplayerstate.h"
+
+
+#ifdef Q_WS_QWS
+# define USE_DIRECT_PAINTER
+# include <qdirectpainter_qws.h>
+# include <qgfxraster_qws.h>
+#endif
+
+
+extern MediaPlayerState *mediaPlayerState;
+
+
+static const int xo = 2; // movable x offset
+static const int yo = 0; // movable y offset
+
+
+struct MediaButton {
+ int xPos, yPos;
+ bool isToggle, isHeld, isDown;
+ int controlType;
+};
+
+
+// Layout information for the videoButtons (and if it is a toggle button or not)
+MediaButton videoButtons[] = {
+ { 5+0*32+xo, 200+yo, FALSE, FALSE, FALSE, 4 }, // previous
+ { 5+1*32+xo, 200+yo, FALSE, FALSE, FALSE, 1 }, // stop
+ { 5+2*32+xo, 200+yo, TRUE, FALSE, FALSE, 0 }, // play
+ { 5+3*32+xo, 200+yo, TRUE, FALSE, FALSE, 2 }, // pause
+ { 5+4*32+xo, 200+yo, FALSE, FALSE, FALSE, 3 }, // next
+ { 5+5*32+xo, 200+yo, FALSE, FALSE, FALSE, 8 }, // playlist
+ { 5+6*32+xo, 200+yo, TRUE, FALSE, FALSE, 9 } // fullscreen
+};
+
+
+static const int numButtons = (sizeof(videoButtons)/sizeof(MediaButton));
+
+
+VideoWidget::VideoWidget(QWidget* parent, const char* name, WFlags f) :
+ QWidget( parent, name, f ), scaledWidth( 0 ), scaledHeight( 0 ) {
+ setCaption( tr("MediaPlayer") );
+ setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) );
+ pixmaps[0] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButton0a" ) );
+ pixmaps[1] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaButton0b" ) );
+ pixmaps[2] = new QPixmap( Resource::loadPixmap( "mpegplayer/mediaControls0" ) );
+ currentFrame = new QImage( 220 + 2, 160, (QPixmap::defaultDepth() == 16) ? 16 : 32 );
+
+ slider = new QSlider( Qt::Horizontal, this );
+ slider->setMinValue( 0 );
+ slider->setMaxValue( 1 );
+ slider->setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) );
+ slider->setFocusPolicy( QWidget::NoFocus );
+ slider->setGeometry( QRect( 7, 250, 220, 20 ) );
+
+ connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
+ connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
+
+ connect( mediaPlayerState, SIGNAL( lengthChanged(long) ), this, SLOT( setLength(long) ) );
+ connect( mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) );
+ connect( mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) );
+ connect( mediaPlayerState, SIGNAL( viewChanged(char) ), this, SLOT( setView(char) ) );
+ connect( mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( setPaused(bool) ) );
+ connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) );
+
+ // Intialise state
+ setLength( mediaPlayerState->length() );
+ setPosition( mediaPlayerState->position() );
+ setFullscreen( mediaPlayerState->fullscreen() );
+ setPaused( mediaPlayerState->paused() );
+ setPlaying( mediaPlayerState->playing() );
+}
+
+
+VideoWidget::~VideoWidget() {
+ for ( int i = 0; i < 3; i++ )
+ delete pixmaps[i];
+ delete currentFrame;
+}
+
+
+static bool videoSliderBeingMoved = FALSE;
+
+
+void VideoWidget::sliderPressed() {
+ videoSliderBeingMoved = TRUE;
+}
+
+
+void VideoWidget::sliderReleased() {
+ videoSliderBeingMoved = FALSE;
+ if ( slider->width() == 0 )
+ return;
+ long val = long((double)slider->value() * mediaPlayerState->length() / slider->width());
+ mediaPlayerState->setPosition( val );
+}
+
+
+void VideoWidget::setPosition( long i ) {
+ updateSlider( i, mediaPlayerState->length() );
+}
+
+
+void VideoWidget::setLength( long max ) {
+ updateSlider( mediaPlayerState->position(), max );
+}
+
+
+void VideoWidget::setView( char view ) {
+ if ( view == 'v' ) {
+ makeVisible();
+ } else {
+ // Effectively blank the view next time we show it so it looks nicer
+ scaledWidth = 0;
+ scaledHeight = 0;
+ hide();
+ }
+}
+
+
+void VideoWidget::updateSlider( long i, long max ) {
+ // Will flicker too much if we don't do this
+ if ( max == 0 )
+ return;
+ int width = slider->width();
+ int val = int((double)i * width / max);
+ if ( !mediaPlayerState->fullscreen() && !videoSliderBeingMoved ) {
+ if ( slider->value() != val )
+ slider->setValue( val );
+ if ( slider->maxValue() != width )
+ slider->setMaxValue( width );
+ }
+}
+
+
+void VideoWidget::setToggleButton( int i, bool down ) {
+ if ( down != videoButtons[i].isDown )
+ toggleButton( i );
+}
+
+
+void VideoWidget::toggleButton( int i ) {
+ videoButtons[i].isDown = !videoButtons[i].isDown;
+ QPainter p(this);
+ paintButton ( &p, i );
+}
+
+
+void VideoWidget::paintButton( QPainter *p, int i ) {
+ int x = videoButtons[i].xPos;
+ int y = videoButtons[i].yPos;
+ int offset = 10 + videoButtons[i].isDown;
+ p->drawPixmap( x, y, *pixmaps[videoButtons[i].isDown] );
+ p->drawPixmap( x + 1 + offset, y + offset, *pixmaps[2], 9 * videoButtons[i].controlType, 0, 9, 9 );
+}
+
+
+void VideoWidget::mouseMoveEvent( QMouseEvent *event ) {
+ for ( int i = 0; i < numButtons; i++ ) {
+ int x = videoButtons[i].xPos;
+ int y = videoButtons[i].yPos;
+ if ( event->state() == QMouseEvent::LeftButton ) {
+ // The test to see if the mouse click is inside the circular button or not
+ // (compared with the radius squared to avoid a square-root of our distance)
+ int radius = 16;
+ QPoint center = QPoint( x + radius, y + radius );
+ QPoint dXY = center - event->pos();
+ int dist = dXY.x() * dXY.x() + dXY.y() * dXY.y();
+ bool isOnButton = dist <= (radius * radius);
+ if ( isOnButton != videoButtons[i].isHeld ) {
+ videoButtons[i].isHeld = isOnButton;
+ toggleButton(i);
+ }
+ } else {
+ if ( videoButtons[i].isHeld ) {
+ videoButtons[i].isHeld = FALSE;
+ if ( !videoButtons[i].isToggle )
+ setToggleButton( i, FALSE );
+ switch (i) {
+ case VideoPlay: mediaPlayerState->setPlaying(videoButtons[i].isDown); return;
+ case VideoStop: mediaPlayerState->setPlaying(FALSE); return;
+ case VideoPause: mediaPlayerState->setPaused(videoButtons[i].isDown); return;
+ case VideoNext: mediaPlayerState->setNext(); return;
+ case VideoPrevious: mediaPlayerState->setPrev(); return;
+ case VideoPlayList: mediaPlayerState->setList(); return;
+ case VideoFullscreen: mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return;
+ }
+ }
+ }
+ }
+}
+
+
+void VideoWidget::mousePressEvent( QMouseEvent *event ) {
+ mouseMoveEvent( event );
+}
+
+
+void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) {
+ if ( mediaPlayerState->fullscreen() ) {
+ mediaPlayerState->setFullscreen( FALSE );
+ makeVisible();
+ } else {
+ mouseMoveEvent( event );
+ }
+}
+
+
+void VideoWidget::makeVisible() {
+ if ( mediaPlayerState->fullscreen() ) {
+ setBackgroundMode( QWidget::NoBackground );
+ showFullScreen();
+ resize( qApp->desktop()->size() );
+ slider->hide();
+ } else {
+ setBackgroundPixmap( Resource::loadPixmap( "mpegplayer/metalFinish" ) );
+ showNormal();
+ showMaximized();
+ slider->show();
+ }
+}
+
+
+void VideoWidget::paintEvent( QPaintEvent * ) {
+ QPainter p( this );
+
+ if ( mediaPlayerState->fullscreen() ) {
+ // Clear the background
+ p.setBrush( QBrush( Qt::black ) );
+ p.drawRect( rect() );
+
+ // Draw the current frame
+ //p.drawImage( ); // If using directpainter we won't have a copy except whats on the screen
+ } else {
+ // draw border
+ qDrawShadePanel( &p, 4, 15, 230, 170, colorGroup(), TRUE, 5, NULL );
+
+ // Clear the movie screen first
+ p.setBrush( QBrush( Qt::black ) );
+ p.drawRect( 9, 20, 220, 160 );
+
+ // draw current frame (centrally positioned from scaling to maintain aspect ratio)
+ p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight );
+
+ // draw the buttons
+ for ( int i = 0; i < numButtons; i++ )
+ paintButton( &p, i );
+
+ // draw the slider
+ slider->repaint( TRUE );
+ }
+}
+
+
+void VideoWidget::closeEvent( QCloseEvent* ) {
+ mediaPlayerState->setList();
+}
+
+
+bool VideoWidget::playVideo() {
+ bool result = FALSE;
+
+ int stream = 0;
+
+ int sw = mediaPlayerState->curDecoder()->videoWidth( stream );
+ int sh = mediaPlayerState->curDecoder()->videoHeight( stream );
+ int dd = QPixmap::defaultDepth();
+ int w = height();
+ int h = width();
+
+ ColorFormat format = (dd == 16) ? RGB565 : BGRA8888;
+
+ if ( mediaPlayerState->fullscreen() ) {
+#ifdef USE_DIRECT_PAINTER
+ QDirectPainter p(this);
+
+ if ( ( qt_screen->transformOrientation() == 3 ) &&
+ ( ( dd == 16 ) || ( dd == 32 ) ) && ( p.numRects() == 1 ) ) {
+
+ w = 320;
+ h = 240;
+
+ if ( mediaPlayerState->scaled() ) {
+ // maintain aspect ratio
+ if ( w * sh > sw * h )
+ w = sw * h / sh;
+ else
+ h = sh * w / sw;
+ } else {
+ w = sw;
+ h = sh;
+ }
+
+ w--; // we can't allow libmpeg to overwrite.
+ QPoint roff = qt_screen->mapToDevice( p.offset(), QSize( qt_screen->width(), qt_screen->height() ) );
+
+ int ox = roff.x() - height() + 2 + (height() - w) / 2;
+ int oy = roff.y() + (width() - h) / 2;
+ int sx = 0, sy = 0;
+
+ uchar* fp = p.frameBuffer() + p.lineStep() * oy;
+ fp += dd * ox / 8;
+ uchar **jt = new uchar*[h];
+ for ( int i = h; i; i-- ) {
+ jt[h - i] = fp;
+ fp += p.lineStep();
+ }
+
+ result = mediaPlayerState->curDecoder()->videoReadScaledFrame( jt, sx, sy, sw, sh, w, h, format, 0) == 0;
+
+ delete [] jt;
+ } else {
+#endif
+ QPainter p(this);
+
+ w = 320;
+ h = 240;
+
+ if ( mediaPlayerState->scaled() ) {
+ // maintain aspect ratio
+ if ( w * sh > sw * h )
+ w = sw * h / sh;
+ else
+ h = sh * w / sw;
+ } else {
+ w = sw;
+ h = sh;
+ }
+
+ int bytes = ( dd == 16 ) ? 2 : 4;
+ QImage tempFrame( w, h, bytes << 3 );
+ result = mediaPlayerState->curDecoder()->videoReadScaledFrame( tempFrame.jumpTable(),
+ 0, 0, sw, sh, w, h, format, 0) == 0;
+ if ( result && mediaPlayerState->fullscreen() ) {
+
+ int rw = h, rh = w;
+ QImage rotatedFrame( rw, rh, bytes << 3 );
+
+ ushort* in = (ushort*)tempFrame.bits();
+ ushort* out = (ushort*)rotatedFrame.bits();
+ int spl = rotatedFrame.bytesPerLine() / bytes;
+ for (int x=0; x<h; x++) {
+ if ( bytes == 2 ) {
+ ushort* lout = out++ + (w - 1)*spl;
+ for (int y=0; y<w; y++) {
+ *lout=*in++;
+ lout-=spl;
+ }
+ } else {
+ ulong* lout = ((ulong *)out)++ + (w - 1)*spl;
+ for (int y=0; y<w; y++) {
+ *lout=*((ulong*)in)++;
+ lout-=spl;
+ }
+ }
+ }
+
+ p.drawImage( (240 - rw) / 2, (320 - rh) / 2, rotatedFrame, 0, 0, rw, rh );
+ }
+#ifdef USE_DIRECT_PAINTER
+ }
+#endif
+ } else {
+
+ w = 220;
+ h = 160;
+
+ // maintain aspect ratio
+ if ( w * sh > sw * h )
+ w = sw * h / sh;
+ else
+ h = sh * w / sw;
+
+ result = mediaPlayerState->curDecoder()->videoReadScaledFrame( currentFrame->jumpTable(), 0, 0, sw, sh, w, h, format, 0) == 0;
+
+ QPainter p( this );
+
+ // Image changed size, therefore need to blank the possibly unpainted regions first
+ if ( scaledWidth != w || scaledHeight != h ) {
+ p.setBrush( QBrush( Qt::black ) );
+ p.drawRect( 9, 20, 220, 160 );
+ }
+
+ scaledWidth = w;
+ scaledHeight = h;
+
+ if ( result ) {
+ p.drawImage( 9 + (220 - scaledWidth) / 2, 20 + (160 - scaledHeight) / 2, *currentFrame, 0, 0, scaledWidth, scaledHeight );
+ }
+
+ }
+
+ return result;
+}
+
+
diff --git a/core/multimedia/opieplayer/videowidget.h b/core/multimedia/opieplayer/videowidget.h
new file mode 100644
index 0000000..8b49091
--- a/dev/null
+++ b/core/multimedia/opieplayer/videowidget.h
@@ -0,0 +1,88 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef VIDEO_WIDGET_H
+#define VIDEO_WIDGET_H
+
+
+#include <qwidget.h>
+
+
+class QPixmap;
+class QSlider;
+
+
+enum VideoButtons {
+ VideoPrevious,
+ VideoStop,
+ VideoPlay,
+ VideoPause,
+ VideoNext,
+ VideoPlayList,
+ VideoFullscreen
+};
+
+
+class VideoWidget : public QWidget {
+ Q_OBJECT
+public:
+ VideoWidget( QWidget* parent=0, const char* name=0, WFlags f=0 );
+ ~VideoWidget();
+
+ bool playVideo();
+
+public slots:
+ void updateSlider( long, long );
+ void sliderPressed( );
+ void sliderReleased( );
+ void setPaused( bool b) { setToggleButton( VideoPause, b ); }
+ void setPlaying( bool b) { setToggleButton( VideoPlay, b ); }
+ void setFullscreen( bool b ) { setToggleButton( VideoFullscreen, b ); }
+ void makeVisible();
+ void setPosition( long );
+ void setLength( long );
+ void setView( char );
+
+signals:
+ void sliderMoved( long );
+
+protected:
+ void paintEvent( QPaintEvent *pe );
+ void mouseMoveEvent( QMouseEvent *event );
+ void mousePressEvent( QMouseEvent *event );
+ void mouseReleaseEvent( QMouseEvent *event );
+ void closeEvent( QCloseEvent *event );
+
+private:
+ void paintButton( QPainter *p, int i );
+ void toggleButton( int );
+ void setToggleButton( int, bool );
+
+ QSlider *slider;
+ QPixmap *pixmaps[3];
+ QImage *currentFrame;
+ int scaledWidth;
+ int scaledHeight;
+};
+
+
+#endif // VIDEO_WIDGET_H
+
+
+
diff --git a/core/multimedia/opieplayer/wavplugin/.cvsignore b/core/multimedia/opieplayer/wavplugin/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/core/multimedia/opieplayer/wavplugin/Makefile.in b/core/multimedia/opieplayer/wavplugin/Makefile.in
new file mode 100644
index 0000000..c9203f8
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/Makefile.in
@@ -0,0 +1,112 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB) -DQCONFIG=\"qpe\"
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB) -DQCONFIG=\"qpe\"
+INCPATH = -I$(QPEDIR)/include -I..
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/codecs/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = wavplugin
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = wavplugin.h \
+ wavpluginimpl.h
+SOURCES = wavplugin.cpp \
+ wavpluginimpl.cpp
+OBJECTS = wavplugin.o \
+ wavpluginimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake wavplugin.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+wavplugin.o: wavplugin.cpp \
+ wavplugin.h \
+ ../mediaplayerplugininterface.h
+
+wavpluginimpl.o: wavpluginimpl.cpp \
+ wavplugin.h \
+ ../mediaplayerplugininterface.h \
+ wavpluginimpl.h \
+ ../mediaplayerplugininterface.h
+
+
diff --git a/core/multimedia/opieplayer/wavplugin/qpe-wavplugin.control b/core/multimedia/opieplayer/wavplugin/qpe-wavplugin.control
new file mode 100644
index 0000000..8e7eedb
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/qpe-wavplugin.control
@@ -0,0 +1,9 @@
+Files: plugins/codecs/libwavplugin.so.1.0.0 plugins/codecs/libwavplugin.so.1.0 plugins/codecs/libwavplugin.so.1 plugins/codecs/libwavplugin.so
+Priority: optional
+Section: qpe/plugins
+Maintainer: John Ryland <jryland@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: WAV file plugin
+ Plugin to play WAV files with the mediaplayer in the Qtopia environment.
diff --git a/core/multimedia/opieplayer/wavplugin/wavplugin.cpp b/core/multimedia/opieplayer/wavplugin/wavplugin.cpp
new file mode 100644
index 0000000..60a0024
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/wavplugin.cpp
@@ -0,0 +1,334 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <qfile.h>
+#include "wavplugin.h"
+
+
+//#define debugMsg(a) qDebug(a)
+#define debugMsg(a)
+
+
+struct RiffChunk {
+ char id[4];
+ Q_UINT32 size;
+ char data[4];
+};
+
+
+struct ChunkData {
+ Q_INT16 formatTag;
+ Q_INT16 channels;
+ Q_INT32 samplesPerSec;
+ Q_INT32 avgBytesPerSec;
+ Q_INT16 blockAlign;
+ Q_INT16 wBitsPerSample;
+};
+
+
+const int sound_buffer_size = 4096;
+
+
+class WavPluginData {
+public:
+ QFile *input;
+
+ int wavedata_remaining;
+ ChunkData chunkdata;
+ RiffChunk chunk;
+ uchar data[sound_buffer_size+32]; // +32 to handle badly aligned input data
+ int out,max;
+ int samples_due;
+ int samples;
+
+ WavPluginData() {
+ max = out = sound_buffer_size;
+ wavedata_remaining = 0;
+ samples_due = 0;
+ samples = -1;
+ }
+
+ // expands out samples to the frequency of 44kHz
+ bool add( short *output, long count, long& done, bool stereo )
+ {
+ done = 0;
+
+ if ( input == 0 ) {
+ qDebug("no input");
+ return FALSE;
+ }
+
+ while ( count ) {
+ int l,r;
+ if ( getSample(l, r) == FALSE ) {
+ qDebug("didn't get sample");
+ return FALSE;
+ }
+ samples_due += 44100;
+ while ( count && (samples_due > chunkdata.samplesPerSec) ) {
+ *output++ = l;
+ if ( stereo )
+ *output++ = r;
+ samples_due -= chunkdata.samplesPerSec;
+ count--;
+ done++;
+ }
+ }
+
+ return TRUE;
+ }
+
+ bool initialise() {
+ if ( input == 0 )
+ return FALSE;
+
+ wavedata_remaining = -1;
+
+ while ( wavedata_remaining == -1 ) {
+ // Keep reading chunks...
+ const int n = sizeof(chunk) - sizeof(chunk.data);
+ int t = input->readBlock( (char*)&chunk, n );
+ if ( t != n ) {
+ if ( t == -1 )
+ return FALSE;
+ return TRUE;
+ }
+ if ( qstrncmp(chunk.id,"data",4) == 0 ) {
+ samples = wavedata_remaining = chunk.size;
+ } else if ( qstrncmp(chunk.id,"RIFF",4) == 0 ) {
+ char d[4];
+ if ( input->readBlock(d,4) != 4 ) {
+ return FALSE;
+ }
+ if ( qstrncmp(d,"WAVE",4) != 0 ) {
+ // skip
+ if ( chunk.size > 1000000000 || !input->at(input->at()+chunk.size-4) ) {
+ return FALSE;
+ }
+ }
+ } else if ( qstrncmp(chunk.id,"fmt ",4) == 0 ) {
+ if ( input->readBlock((char*)&chunkdata,sizeof(chunkdata)) != sizeof(chunkdata) ) {
+ return FALSE;
+ }
+#define WAVE_FORMAT_PCM 1
+ if ( chunkdata.formatTag != WAVE_FORMAT_PCM ) {
+ qDebug("WAV file: UNSUPPORTED FORMAT %d",chunkdata.formatTag);
+ return FALSE;
+ }
+ } else {
+ // ignored chunk
+ if ( chunk.size > 1000000000 || !input->at(input->at()+chunk.size) ) {
+ return FALSE;
+ }
+ }
+ } // while
+
+ return TRUE;
+ }
+
+
+ // gets a sample from the file
+ bool getSample(int& l, int& r)
+ {
+ l = r = 0;
+
+ if ( input == 0 )
+ return FALSE;
+
+ if ( (wavedata_remaining < 0) || !max )
+ return FALSE;
+
+ if ( out >= max ) {
+ max = input->readBlock( (char*)data, (uint)QMIN(sound_buffer_size,wavedata_remaining) );
+
+ wavedata_remaining -= max;
+
+ out = 0;
+ if ( max <= 0 ) {
+ max = 0;
+ return TRUE;
+ }
+ }
+ if ( chunkdata.wBitsPerSample == 8 ) {
+ l = (data[out++] - 128) * 128;
+ } else {
+ l = ((short*)data)[out/2];
+ out += 2;
+ }
+ if ( chunkdata.channels == 1 ) {
+ r = l;
+ } else {
+ if ( chunkdata.wBitsPerSample == 8 ) {
+ r = (data[out++] - 128) * 128;
+ } else {
+ r = ((short*)data)[out/2];
+ out += 2;
+ }
+ }
+ return TRUE;
+ } // getSample
+
+};
+
+
+WavPlugin::WavPlugin() {
+ d = new WavPluginData;
+ d->input = 0;
+}
+
+
+WavPlugin::~WavPlugin() {
+ close();
+ delete d;
+}
+
+
+bool WavPlugin::isFileSupported( const QString& path ) {
+ debugMsg( "WavPlugin::isFileSupported" );
+
+ char *ext = strrchr( path.latin1(), '.' );
+
+ // Test file extension
+ if ( ext ) {
+ if ( strncasecmp(ext, ".raw", 4) == 0 )
+ return TRUE;
+ if ( strncasecmp(ext, ".wav", 4) == 0 )
+ return TRUE;
+ if ( strncasecmp(ext, ".wave", 4) == 0 )
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+bool WavPlugin::open( const QString& path ) {
+ debugMsg( "WavPlugin::open" );
+
+ d->max = d->out = sound_buffer_size;
+ d->wavedata_remaining = 0;
+ d->samples_due = 0;
+
+ d->input = new QFile( path );
+ if ( d->input->open(IO_ReadOnly) == FALSE ) {
+ qDebug("couldn't open file");
+ delete d->input;
+ d->input = 0;
+ return FALSE;
+ }
+
+ d->initialise();
+
+ return TRUE;
+}
+
+
+bool WavPlugin::close() {
+ debugMsg( "WavPlugin::close" );
+
+ d->input->close();
+ delete d->input;
+ d->input = 0;
+ return TRUE;
+}
+
+
+bool WavPlugin::isOpen() {
+ debugMsg( "WavPlugin::isOpen" );
+ return ( d->input != 0 );
+}
+
+
+int WavPlugin::audioStreams() {
+ debugMsg( "WavPlugin::audioStreams" );
+ return 1;
+}
+
+
+int WavPlugin::audioChannels( int ) {
+ debugMsg( "WavPlugin::audioChannels" );
+ return 2; // ### Always scale audio to stereo samples
+}
+
+
+int WavPlugin::audioFrequency( int ) {
+ debugMsg( "WavPlugin::audioFrequency" );
+ return 44100; // ### Always scale to frequency of 44100
+}
+
+
+int WavPlugin::audioSamples( int ) {
+ debugMsg( "WavPlugin::audioSamples" );
+ return d->samples * 2 / d->chunkdata.channels; // ### Scaled samples will be made stereo,
+ // Therefore if source is mono we will double the number of samples
+}
+
+
+bool WavPlugin::audioSetSample( long, int ) {
+ debugMsg( "WavPlugin::audioSetSample" );
+ return FALSE;
+}
+
+
+long WavPlugin::audioGetSample( int ) {
+ debugMsg( "WavPlugin::audioGetSample" );
+ return 0;
+}
+
+/*
+bool WavPlugin::audioReadSamples( short *, int, long, int ) {
+ debugMsg( "WavPlugin::audioReadSamples" );
+ return FALSE;
+}
+
+
+bool WavPlugin::audioReReadSamples( short *, int, long, int ) {
+ debugMsg( "WavPlugin::audioReReadSamples" );
+ return FALSE;
+}
+
+
+bool WavPlugin::audioReadMonoSamples( short *output, long samples, long& samplesMade, int ) {
+ debugMsg( "WavPlugin::audioReadMonoSamples" );
+ return !d->add( output, samples, samplesMade, FALSE );
+}
+
+
+bool WavPlugin::audioReadStereoSamples( short *output, long samples, long& samplesMade, int ) {
+ debugMsg( "WavPlugin::audioReadStereoSamples" );
+ return !d->add( output, samples, samplesMade, TRUE );
+}
+*/
+
+bool WavPlugin::audioReadSamples( short *output, int channels, long samples, long& samplesMade, int ) {
+ debugMsg( "WavPlugin::audioReadSamples" );
+ return !d->add( output, samples, samplesMade, channels != 1 );
+}
+
+double WavPlugin::getTime() {
+ debugMsg( "WavPlugin::getTime" );
+ return 0.0;
+}
+
+
diff --git a/core/multimedia/opieplayer/wavplugin/wavplugin.h b/core/multimedia/opieplayer/wavplugin/wavplugin.h
new file mode 100644
index 0000000..64635ca
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/wavplugin.h
@@ -0,0 +1,97 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef WAV_PLUGIN_H
+#define WAV_PLUGIN_H
+
+
+#include <qstring.h>
+#include <qapplication.h>
+#include "mediaplayerplugininterface.h"
+
+
+class WavPluginData;
+
+
+class WavPlugin : public MediaPlayerDecoder {
+
+public:
+ WavPlugin();
+ ~WavPlugin();
+
+ const char *pluginName() { return "WavPlugin"; }
+ const char *pluginComment() { return "This is a simple plugin for playing wav files"; }
+ double pluginVersion() { return 1.0; }
+
+ bool isFileSupported( const QString& );
+ bool open( const QString& );
+ bool close();
+ bool isOpen();
+ //const QString &fileInfo() { return strInfo = qApp->translate( "MediaPlayer", "No Information Available", "media plugin text" ); }
+ const QString &fileInfo() { return strInfo = QString(""); }
+
+ // If decoder doesn't support audio then return 0 here
+ int audioStreams();
+ int audioChannels( int stream );
+ int audioFrequency( int stream );
+ int audioSamples( int stream );
+ bool audioSetSample( long sample, int stream );
+ long audioGetSample( int stream );
+ //bool audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream );
+ //bool audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream );
+ bool audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream );
+ //bool audioReadSamples( short *output, int channel, long samples, int stream );
+ //bool audioReReadSamples( short *output, int channel, long samples, int stream );
+
+ // If decoder doesn't support video then return 0 here
+ int videoStreams() { return 0; }
+ int videoWidth( int ) { return 0; }
+ int videoHeight( int ) { return 0; }
+ double videoFrameRate( int ) { return 0.0; }
+ int videoFrames( int ) { return 0; }
+ bool videoSetFrame( long, int ) { return FALSE; }
+ long videoGetFrame( int ) { return 0; }
+ bool videoReadFrame( unsigned char **, int, int, int, int, ColorFormat, int ) { return FALSE; }
+ bool videoReadScaledFrame( unsigned char **, int, int, int, int, int, int, ColorFormat, int ) { return FALSE; }
+ bool videoReadYUVFrame( char *, char *, char *, int, int, int, int, int ) { return FALSE; }
+
+ // Profiling
+ double getTime();
+
+ // Ignore if these aren't supported
+ bool setSMP( int ) { return FALSE; }
+ bool setMMX( bool ) { return FALSE; }
+
+ // Capabilities
+ bool supportsAudio() { return TRUE; }
+ bool supportsVideo() { return FALSE; }
+ bool supportsYUV() { return FALSE; }
+ bool supportsMMX() { return TRUE; }
+ bool supportsSMP() { return FALSE; }
+ bool supportsStereo() { return TRUE; }
+ bool supportsScaling() { return FALSE; }
+
+private:
+ WavPluginData *d;
+ QString strInfo;
+
+};
+
+
+#endif
diff --git a/core/multimedia/opieplayer/wavplugin/wavplugin.pro b/core/multimedia/opieplayer/wavplugin/wavplugin.pro
new file mode 100644
index 0000000..4663813
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/wavplugin.pro
@@ -0,0 +1,10 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = wavplugin.h wavpluginimpl.h
+SOURCES = wavplugin.cpp wavpluginimpl.cpp
+TARGET = wavplugin
+DESTDIR = ../../plugins/codecs
+INCLUDEPATH += $(QPEDIR)/include ..
+DEPENDPATH += ../$(QPEDIR)/include ..
+LIBS += -lqpe
+VERSION = 1.0.0
diff --git a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp
new file mode 100644
index 0000000..1f7b85b
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.cpp
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "wavplugin.h"
+#include "wavpluginimpl.h"
+
+
+WavPluginImpl::WavPluginImpl()
+ : libmadplugin(0), ref(0)
+{
+}
+
+
+WavPluginImpl::~WavPluginImpl()
+{
+ if ( libmadplugin )
+ delete libmadplugin;
+}
+
+
+MediaPlayerDecoder *WavPluginImpl::decoder()
+{
+ if ( !libmadplugin )
+ libmadplugin = new WavPlugin;
+ return libmadplugin;
+}
+
+
+MediaPlayerEncoder *WavPluginImpl::encoder()
+{
+ return NULL;
+}
+
+
+#ifndef QT_NO_COMPONENT
+
+
+QRESULT WavPluginImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( ( uuid == IID_QUnknown ) || ( uuid == IID_MediaPlayerPlugin ) )
+ *iface = this, (*iface)->addRef();
+ return QS_OK;
+}
+
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( WavPluginImpl )
+}
+
+
+#endif
+
diff --git a/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h
new file mode 100644
index 0000000..ee32f54
--- a/dev/null
+++ b/core/multimedia/opieplayer/wavplugin/wavpluginimpl.h
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef WAV_PLUGIN_IMPL_H
+#define WAV_PLUGIN_IMPL_H
+
+
+#include "../mediaplayerplugininterface.h"
+
+
+class WavPlugin;
+
+
+class WavPluginImpl : public MediaPlayerPluginInterface
+{
+public:
+ WavPluginImpl();
+ virtual ~WavPluginImpl();
+
+#ifndef QT_NO_COMPONENT
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+#endif
+
+ virtual MediaPlayerDecoder *decoder();
+ virtual MediaPlayerEncoder *encoder();
+
+private:
+ WavPlugin *libmadplugin;
+ ulong ref;
+};
+
+
+#endif
+
diff --git a/core/opie-login/.cvsignore b/core/opie-login/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/core/opie-login/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/core/opie-login/README b/core/opie-login/README
new file mode 100644
index 0000000..ad3b298
--- a/dev/null
+++ b/core/opie-login/README
@@ -0,0 +1,78 @@
+
+Welcome to LISA System's
+
+ QDM - the Login-Dialog for QPE
+
+
+WHAT'S THIS:
+
+This small add-on for the Qtopia Environment (QPE - see
+http://qpe.sourceforge.net for further details) allows You to use your
+handheld computer running QPE and Linux with the typical Un*x user
+handling, i.e. just log in on a graphical environment, as e.g. KDM or
+XDM. This way your personal data can be easily protected against
+unwanted access from others in case you loose your machine.
+
+
+STATUS:
+
+Still in development, but should be useable.
+
+
+REQUIREMENTS:
+
+- QDM needs Linux-PAM (Pluggable Authentication Modules for Linux) for
+ proper user validation.
+
+- the /dev/fb0 device has to writeable to everyone ;-(
+
+
+INSTALLATION:
+
+Per default this little add-on is not enabled. You have to do so
+yourself for now, by setting a compile option variable called
+QT_QWS_LOGIN . Furthermore there have to be made some changes in
+taskbar/taskbar.pro :
+
+At the section HEADERS insert a line:
+ ../login/qdmdialogimpl.h \
+
+At the section SOURCES insert a line:
+ ../login/qdmdialogimpl.cpp \
+
+furthermore serte these lines:
+
+INCLUDEPATH += ../login
+DEPENDPATH += ../login
+
+INTERFACES = ../login/qdmdialog.ui
+
+For unix-login make folloing changes to a line:
+LIBS = -lqpe -lcrypt
+
+For PAM use the following:
+LIBS = -lqpe -ldl -lpam
+
+
+
+CONFIGURATION:
+
+Configuration of the 'Look' of QDM is done via Qt Designer. Just open
+the .ui file and edit the look of the dialog as you like. You can, for
+instance, change the logo pixmap. QDM should also be ready for i18n so
+far.
+
+Other configuration stuff, eg welcome string in the upper right, and
+user list can be changed in the qdm_config.h file.
+
+
+USAGE:
+
+The QDM comes up, when the QPE is started, and if the QPE is started
+as 'root'. Being started as any other user, the uid couldn't be
+changed and the login dialog wouldn't be ofg much use.
+
+
+CONTACT:
+
+http://www.lisa.de
diff --git a/core/opie-login/qdm_config.h b/core/opie-login/qdm_config.h
new file mode 100644
index 0000000..bf5b5a4
--- a/dev/null
+++ b/core/opie-login/qdm_config.h
@@ -0,0 +1,30 @@
+//-- -*- c++ -*-
+
+#ifndef _QDM_CONFIG_H
+#define _QDM_CONFIG_H
+
+/*
+ * Config file for QDM
+ */
+
+
+/** define this to enable the qdm login dialog for qpe */
+#define QT_QWS_LOGIN
+
+/** define this to let qdm use Linux-PAM */
+//define QT_QWS_LOGIN_USEPAM
+
+/** this is the list of users shown in the input-list */
+#define QDM_SHOWNUSERS static char *Shown_Users[] = { "guest", "root", "lisa", 0 };
+
+/** which command to execute when going to sleep mode */
+#define QDM_CMD_SLEEP "/sbin/shutdow","-z","now"
+
+/** which command to execute when shutting down */
+#define QDM_CMD_SHUTDOWN "/sbin/shutdow","-z","now"
+
+/** Welcome string on dialog */
+#define QDM_WELCOME_STRING "Welcome to\nmLinux [iPAQ]"
+
+
+#endif //-- _QDM_CONFIG_H
diff --git a/core/opie-login/qdmdialog.ui b/core/opie-login/qdmdialog.ui
new file mode 100644
index 0000000..c9faf6f
--- a/dev/null
+++ b/core/opie-login/qdmdialog.ui
@@ -0,0 +1,856 @@
+<!DOCTYPE UI><UI>
+<class>QDMDialog</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>QDMDialog</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>7</y>
+ <width>240</width>
+ <height>320</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>minimumSize</name>
+ <size>
+ <width>240</width>
+ <height>240</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>240</width>
+ <height>320</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>78</red>
+ <green>78</green>
+ <blue>78</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>10</red>
+ <green>95</green>
+ <blue>137</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>78</red>
+ <green>78</green>
+ <blue>78</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>78</red>
+ <green>78</green>
+ <blue>78</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>10</red>
+ <green>95</green>
+ <blue>137</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>QDM</string>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label_logo</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>100</width>
+ <height>33</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>237</red>
+ <green>237</green>
+ <blue>237</blue>
+ </color>
+ <color>
+ <red>110</red>
+ <green>110</green>
+ <blue>110</blue>
+ </color>
+ <color>
+ <red>146</red>
+ <green>146</green>
+ <blue>146</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>84</red>
+ <green>112</green>
+ <blue>152</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>253</red>
+ <green>253</green>
+ <blue>253</blue>
+ </color>
+ <color>
+ <red>110</red>
+ <green>110</green>
+ <blue>110</blue>
+ </color>
+ <color>
+ <red>146</red>
+ <green>146</green>
+ <blue>146</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>84</red>
+ <green>112</green>
+ <blue>152</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>253</red>
+ <green>253</green>
+ <blue>253</blue>
+ </color>
+ <color>
+ <red>110</red>
+ <green>110</green>
+ <blue>110</blue>
+ </color>
+ <color>
+ <red>146</red>
+ <green>146</green>
+ <blue>146</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>84</red>
+ <green>112</green>
+ <blue>152</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Panel</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>margin</name>
+ <number>2</number>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image0</pixmap>
+ </property>
+ <property stdset="1">
+ <name>scaledContents</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label_welcome</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>120</x>
+ <y>10</y>
+ <width>110</width>
+ <height>40</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>14</pointsize>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Welcome to
+mLinux [iPAQ]</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label_time</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>180</x>
+ <y>50</y>
+ <width>50</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>12:30:88</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label_date</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>70</x>
+ <y>50</y>
+ <width>100</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Wed Feb 12 2001</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel5</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>20</x>
+ <y>50</y>
+ <width>50</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Today:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>10</x>
+ <y>80</y>
+ <width>220</width>
+ <height>120</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>backgroundOrigin</name>
+ <enum>WidgetOrigin</enum>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Login</string>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton3</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>160</x>
+ <y>60</y>
+ <width>50</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Clear</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>input_password</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>80</x>
+ <y>60</y>
+ <width>70</width>
+ <height>22</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>echoMode</name>
+ <enum>Password</enum>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>input_user</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>80</x>
+ <y>30</y>
+ <width>120</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label_user</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>60</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>User</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>label_password</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>10</x>
+ <y>60</y>
+ <width>60</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Password</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_shutdown</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>150</x>
+ <y>90</y>
+ <width>61</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Shutdown</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_login</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>10</x>
+ <y>90</y>
+ <width>60</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Login</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_sleep</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>90</x>
+ <y>90</y>
+ <width>60</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Sleep</string>
+ </property>
+ </widget>
+ </widget>
+</widget>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="4080">789ced97db72e2461086effd149475e74a69413258d4d65ef880c7c022cbd8eb35a472a123c8465a09640ebb9577cffc3d033a986c2a38a9ca45bacb653ecd34bf7aba67843e9cd49eac41ede4c3d122b3b3d0adb9537b5e3bf15ea368f3eb6f9f7e1c1db78d9adea8358d5ae3f897a3e3b8e6d6943a19302234e04005d8a8c3811ea10107da40ad01073e123a70e01d502703ce086d38f00bf0b401075e13da70e03760b30e070e086d38d001b6c8804be059130e4c091d3850071aa770a04fe8c2817d609b0ca801e92e68b24be8c18109d0d1e1c021a10f07f6806e130e3409c98016d03b8303c784011c3802fa677020230ce0c00c180486236a3495e8d7697228b0ad891a2d24b6448d3a126d8d4637123d8d6227026d4dd7806b894d51a3ae44e39462eb12bd535ad82b8981a8d1ad40476b52facf129b4d4abf21d168d1d27d97e8b668f446627046a35f05ba4d83bef95262dba01a9d4b740c2aca834457543010e8e96d2aca85c49628e8ab44dba6d1cf123d87eef945a0df10057d92d87269ade612db2e15e55ea2e7d13aaf24061e65a40a84112ab6eda87bcdb56dcf7f7335984c4361cf2f7bc3669ee7450526152f8ebfed5749f8505ab9369f2cb29d2d16af7bee4d89e3385abe4765b5ceb2e9e6fbf9457079d509b3cefc6dd435d788638fbd43e5669a65dd95848bcd9e25eb7971348b62a5ff0e950d5fa6cffb674b1bc4b16df2c0d92e99bfafd2c9b2f0fc6722a68d1887af9a7bb8ca33af79e7767f6fed52b154247377b8ca4af4d6e6ea72bf125219f0ff335effe1c12aeafd3adc7671f781bd097178dd4d84f276fe72b88aaabedc4c3a62cf848b6a428c7ff98c3e3cc6b1d27b870ab7d5ebd76e678a849eca0383288eae53d82c4fe6501552bac1d2754bd746d8f6b945e377abf0038dcb2c56c52bbe1247b9c5b1f30fa8acaa2aa3bb387eb4c6c212de6ddef8309555a110975c655d4d253fc3f9ce11c96c55664369bdbf529984f5877bfa346ff0460b8ba70df555dedc431efd382ea8283bb37eae82c332ec7436ddee063db6b9280e6acab612c2f8ce8cd2ad4ab12f9471316ca8545556b761b87db84c17f5f2b9cf0b1115ef52930f0052d1d3dcfaa530b65c2e476ac59ece9fd793ce66520f569591beae27a5707e41dfe6f2afdbff2aff61959ee627f96e1ca2977b79439baeef0e775b2d11b64546c472a4e042a3b1c4d7127ab970993ada3da35553676a2f3f26923e53597e245896e5f0bf1d02ac9d8a95a64c1debf9ce64a9a53293de6892f2132fe98fd3fc8ad6af3e0f8bbbbbaae2f3347d96cf182db7270c73fda55f3cbfb4e24ee4292ffdd25e2bab9456ccf2d5d44d8a33cc7e2a5e4048332d9c2c56f5a731f387052aab9426f2486bc9d4caaf6eaa8b6f614159696e6eaec9573a35ff54a5b262951963de378c5e01ccc42f97861597cfc268f9a02e4eadf458af32830d355feb1dfffef1e80f6ca1ac19</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>button_shutdown</sender>
+ <signal>clicked()</signal>
+ <receiver>QDMDialog</receiver>
+ <slot>slot_shutdown()</slot>
+ </connection>
+ <connection>
+ <sender>button_login</sender>
+ <signal>clicked()</signal>
+ <receiver>QDMDialog</receiver>
+ <slot>slot_login()</slot>
+ </connection>
+ <connection>
+ <sender>input_password</sender>
+ <signal>returnPressed()</signal>
+ <receiver>button_login</receiver>
+ <slot>setFocus()</slot>
+ </connection>
+ <connection>
+ <sender>input_user</sender>
+ <signal>highlighted(const QString&amp;)</signal>
+ <receiver>input_password</receiver>
+ <slot>setFocus()</slot>
+ </connection>
+ <connection>
+ <sender>PushButton3</sender>
+ <signal>clicked()</signal>
+ <receiver>input_password</receiver>
+ <slot>clear()</slot>
+ </connection>
+ <connection>
+ <sender>button_sleep</sender>
+ <signal>clicked()</signal>
+ <receiver>QDMDialog</receiver>
+ <slot>slot_sleepmode()</slot>
+ </connection>
+ <slot access="public">slot_sleepmode()</slot>
+ <slot access="public">slot_login()</slot>
+ <slot access="public">slot_shutdown()</slot>
+</connections>
+<tabstops>
+ <tabstop>input_user</tabstop>
+ <tabstop>input_password</tabstop>
+ <tabstop>button_login</tabstop>
+ <tabstop>PushButton3</tabstop>
+ <tabstop>button_sleep</tabstop>
+ <tabstop>button_shutdown</tabstop>
+</tabstops>
+</UI>
diff --git a/core/opie-login/qdmdialogimpl.cpp b/core/opie-login/qdmdialogimpl.cpp
new file mode 100644
index 0000000..bb1b453
--- a/dev/null
+++ b/core/opie-login/qdmdialogimpl.cpp
@@ -0,0 +1,535 @@
+/**********************************************************************
+** Copyright (C) 2001 LISA Systems
+**
+** This file is an additional part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** For further information contact info@lisa.de
+**
+**********************************************************************/
+
+/*
+ * AUTHOR: Christian Rahn
+ * EMAIL: cdr@lisa.de
+ *
+ * $Id$
+ */
+
+#include "qdm_config.h"
+
+#ifdef QT_QWS_LOGIN
+
+#include <pwd.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <iostream.h>
+#include <assert.h>
+
+#include <qlabel.h>
+#include <qregexp.h>
+#include <qdatetime.h>
+#include <qmessagebox.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qtranslator.h>
+#include <qpeapplication.h>
+
+#include <qwsdisplay_qws.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/sem.h>
+#include <sys/shm.h>
+#include <sys/ipc.h>
+
+#include <global.h>
+
+#if defined(QT_QWS_LOGIN_USEPAM)
+extern "C" {
+#include <security/pam_appl.h>
+}
+#else
+#define _XOPEN_SOURCE
+#include <unistd.h>
+#include <crypt.h>
+#endif
+
+
+#include "qdmdialogimpl.h"
+#include "../taskbar/inputmethods.h"
+
+
+//----------------------------------------------------------------------------
+
+//-- taken from semctl man page
+#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
+//-- union semun is defined by including <sys/sem.h>
+#else
+//-- according to X/OPEN we have to define it ourselves
+union semun {
+ int val; // value for SETVAL
+ struct semid_ds *buf; // buffer for IPC_STAT, IPC_SET
+ unsigned short int *array; // array for GETALL, SETALL
+ struct seminfo *__buf; // buffer for IPC_INFO
+};
+#endif
+
+//----------------------------------------------------------------------------
+
+static const int ShowClockFreq = 1;
+
+QDM_SHOWNUSERS;
+
+#ifdef QT_QWS_LOGIN_USEPAM
+
+static const char *_PAM_SERVICE = "xdm";
+static const char *PAM_password;
+
+typedef const struct pam_message pam_message_type;
+
+static int PAM_conv( int, pam_message_type **, struct pam_response **, void * );
+
+static struct pam_conv PAM_conversation = {
+ &PAM_conv,
+ NULL
+};
+
+//----------------------------------------------------------------------------
+
+static char *COPY_STRING( const char * s ) {
+ return (s) ? strdup(s) : (char *)NULL;
+}
+
+#define GET_MEM if (reply) realloc(reply, size);\
+ else reply = (struct pam_response *)malloc(size); \
+ if (!reply) return PAM_CONV_ERR; \
+ size += sizeof(struct pam_response)
+
+
+static int PAM_conv( int num_msg, pam_message_type **msg,
+ struct pam_response **resp, void *)
+{
+ int count = 0, replies = 0;
+ struct pam_response *reply = NULL;
+ int size = sizeof(struct pam_response);
+
+ for( count = 0; count < num_msg; count++ ) {
+ switch (msg[count]->msg_style) {
+ case PAM_PROMPT_ECHO_ON:
+ /* user name given to PAM already */
+ return PAM_CONV_ERR;
+
+ case PAM_PROMPT_ECHO_OFF:
+ /* wants password */
+ GET_MEM;
+ reply[replies].resp_retcode = PAM_SUCCESS;
+ reply[replies].resp = COPY_STRING(PAM_password);
+ replies++;
+ /* PAM frees resp */
+ break;
+ case PAM_TEXT_INFO:
+ break;
+ default:
+ /* unknown or PAM_ERROR_MSG */
+ if (reply) free (reply);
+ return PAM_CONV_ERR;
+ }
+ }
+ if (reply) *resp = reply;
+ return PAM_SUCCESS;
+}
+
+#endif
+
+
+//----------------------------------------------------------------------------
+
+QDMDialogImpl::QDMDialogImpl( QWidget* parent, const char* name, bool modal, WFlags f )
+ : QDMDialog( parent, name, modal, f )
+{
+ showTime();
+ clockTimer = startTimer( ShowClockFreq * 1000 ); //-- call timer evry min.
+ setActiveWindow();
+ setFocus();
+
+ input = new InputMethods( this );
+ input->resize( input->sizeHint() );
+ input->move( 0, height() - input->height() );
+
+ for( int i=0; Shown_Users[i]; ++i ) {
+ input_user->insertItem( Shown_Users[i] );
+ }
+ input_user->clearEdit();
+
+ label_welcome->setText( QDM_WELCOME_STRING );
+
+};
+
+
+
+QDMDialogImpl::~QDMDialogImpl()
+{
+ input->lower();
+ input->close( false );
+ input->hide();
+ delete input;
+ input = 0;
+ if( parent() ) {
+ ((QWidget*)parent())->repaint(true);
+ }
+};
+
+
+void QDMDialogImpl::accept () { };
+void QDMDialogImpl::reject () { };
+
+
+void QDMDialogImpl::showTime( void )
+{
+ label_date->setText( QDate::currentDate().toString() );
+ label_time->setText( QTime::currentTime().toString() );
+}
+
+
+void QDMDialogImpl::timerEvent( QTimerEvent * e )
+{
+ if( e->timerId() == clockTimer )
+ showTime();
+}
+
+
+//----------------------------------------------------------------------------
+
+void QDMDialogImpl::slot_sleepmode()
+{
+ const int button = QMessageBox::warning( this, "Shutdown", tr( "Do you really want to go\nto sleep mode now?" ),
+ QString::null, tr( "Cancel" ), QString::null,0,1 );
+ switch( button ) {
+ case 0:
+ done( Rejected );
+ // Global::execute( cmd_shutdown );
+ if( vfork() == 0 ) {
+ execl( QDM_CMD_SLEEP, 0 );
+ cerr << "Sleepmode: " << strerror( errno ) << endl;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+//----------------------------------------------------------------------------
+
+void QDMDialogImpl::slot_shutdown()
+{
+ const int button = QMessageBox::warning( this, "Shutdown", tr("Do you really want to shut\nthe system down now?"),
+ QString::null, tr("Cancel"), QString::null,0,1 );
+ switch( button ) {
+ case 0:
+ done( Rejected );
+ // Global::execute( cmd_shutdown );
+ if( vfork() == 0 ) {
+ execl( QDM_CMD_SHUTDOWN, 0 );
+ cerr << "Shutdown: " << strerror( errno ) << endl;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+
+
+//----------------------------------------------------------------------------
+
+void QDMDialogImpl::informBadPassword()
+{
+ QMessageBox::warning( this, tr("Password wrong"),
+ tr("The given password is incorrect") );
+}
+
+
+//----------------------------------------------------------------------------
+
+#if defined(QT_QWS_LOGIN_USEPAM)
+
+static bool pwcheck_PAM( const char *user, const char *password )
+{
+ bool pw_correct = false;
+ int pam_error;
+ int pam_return = 0;
+ pam_handle_t *pamh = 0;
+ PAM_password = password.latin1();
+
+ pam_error = pam_start( _PAM_SERVICE, user, &PAM_conversation, &pamh );
+ if( pam_error == PAM_SUCCESS ) {
+ pam_error = pam_authenticate( pamh, 0 );
+ if( pam_error == PAM_SUCCESS ) {
+ //-- password correct
+ pw_correct = true;
+ pam_return = PAM_SUCCESS;
+ } else {
+ pam_return = pam_error;
+ }
+ } else {
+ // cerr << "PAM error: " << pam_strerror( pamh, pam_error ) << endl;
+ }
+ pam_end( pamh, pam_return );
+ return pw_correct;
+}
+
+#else
+
+//----------------------------------------------------------------------------
+
+static bool pwcheck_Unix( const char *user, const char *password )
+{
+ struct passwd * pword = getpwnam( user );
+ if( pword ) {
+ if( strcmp( crypt(password, password), pword->pw_passwd) == 0 ) {
+ return true;
+ }
+ }
+ return false;
+}
+
+#endif
+
+
+
+//----------------------------------------------------------------------------
+
+void QDMDialogImpl::slot_login()
+{
+ bool pw_correct = false;
+ const char *username = input_user->currentText().latin1();
+ const char *password = input_password->text().latin1();
+
+ assert( username );
+
+#if defined(QT_QWS_LOGIN_USEPAM)
+ pw_correct = pwcheck_PAM( username, password );
+#else
+ pw_correct = pwcheck_Unix( username, password );
+#endif
+
+ if( pw_correct ) {
+ if( changePersona( username ) ) {
+ // cerr << "Password correct" << endl;
+ done( Accepted );
+ return;
+ }
+ } else {
+ // cerr << "Password incorrect" << endl;
+ }
+ informBadPassword();
+}
+
+
+//----------------------------------------------------------------------------
+
+bool QDMDialogImpl::changePersona( const char *username )
+{
+ int err;
+
+ //-- get some info on user <username>
+ struct passwd * pword;
+ pword = getpwnam( username );
+
+ if( pword == 0 )
+ return false;
+
+ gid_t gid = pword->pw_gid;
+ uid_t uid = pword->pw_uid;
+
+ //-- some very dirty hacks following
+ // extern int qws_display_id;
+ extern QString qws_qtePipeFilename();
+ extern QString qws_dataDir();
+
+
+ const QString QTEdataDir = qws_dataDir();
+ QString QTEdataDirNew = QTEdataDir;
+ QTEdataDirNew.replace( QRegExp("root"), username );
+
+ const char *qws_display_str = getenv("QWS_DISPLAY");
+
+ //-- get name of semaphore and lock
+ QString pipe = qws_qtePipeFilename();
+
+ //-- change owner of semaphore
+ key_t semkey = ftok( pipe.latin1(), 'd' );
+ int semid = semget( semkey, 0, 0 );
+ if( semid < 0 )
+ cerr << "error: semget, " << strerror( errno ) << endl;
+
+ struct shmid_ds shminfo;
+ semun arg;
+ semid_ds semidds;
+ arg.buf = & semidds;
+
+ if( semctl( semid, 0, IPC_STAT, arg ) < 0 )
+ cerr << "error: semctl stat, " << strerror( errno ) << endl;
+
+ arg.buf->sem_perm.uid = uid;
+ arg.buf->sem_perm.gid = gid;
+
+ if( semctl( semid, 0, IPC_SET, arg ) < 0 )
+ cerr << "error: semctl set, " << strerror( errno ) << endl;
+
+ //-- change owner of shared memory
+ key_t memkey = ftok( pipe.latin1(), 'm' );
+ int ramid = shmget( memkey, 0, 0 );
+ if( ramid < 0 ) cerr << "error: shmget, " << strerror( errno ) << endl;
+
+ if( shmctl( ramid, IPC_STAT, &shminfo ) < 0 )
+ cerr << "error: shmctl stat, " << strerror( errno ) << endl;
+
+ shminfo.shm_perm.uid = uid;
+ shminfo.shm_perm.gid = gid;
+
+ if( shmctl( ramid, IPC_SET, &shminfo ) < 0 )
+ cerr << "error: shmctl set, " << strerror( errno ) << endl;
+
+ //-- change owner of region manager
+ memkey = ftok( pipe.latin1(), 'r' );
+ int regionid = shmget( memkey, 0, 0 );
+ if( regionid < 0 )
+ cerr << "error: shmget, " << strerror( errno ) << endl;
+
+ if( shmctl( regionid, IPC_STAT, &shminfo ) < 0 )
+ cerr << "error: shmctl stat, " << strerror( errno ) << endl;
+
+ shminfo.shm_perm.uid = uid;
+ shminfo.shm_perm.gid = gid;
+
+ if( shmctl( regionid, IPC_SET, &shminfo ) < 0 )
+ cerr << "error: shmctl set, " << strerror( errno ) << endl;
+
+ // cerr << "ungrabbing qws display: " << qws_display_id << " on lock " << pipe << endl;
+ // QWSDisplay::ungrab();
+
+ //-- presenting socket-file to new user
+ chown( pipe.latin1(), uid, gid );
+ chown( QTEdataDir.latin1(), uid, gid );
+
+
+ //-- another dirty hack - force framebuffer to be writeable...
+ struct stat devstat;
+ if( ! stat( "/dev/fb0", &devstat ) ) {
+ if( chmod( "/dev/fb0", devstat.st_mode |S_IWOTH |S_IWUSR |S_IWGRP ) ) {
+ cerr << "chmod error: " << strerror( errno ) << endl;
+ }
+ }
+
+ err = rename( QTEdataDir, QTEdataDirNew ) ;
+ if( err < 0 ) cerr << "error: rename " << strerror(errno)
+ << " , " << QTEdataDir << " -> " << QTEdataDirNew << endl;
+
+ //
+ //-- actually change uid and gid
+ //
+ // cerr << "changing persona, uid: " << uid << " gid: " << gid << endl;
+
+ err = setgid( gid );
+ if( err != 0 ) cerr << "error: gid changePersona " << err << endl;
+
+ err = setuid( uid );
+ if( err != 0 ) cerr << "error: uid changePersona " << err << endl;
+
+
+ //-- set some environment
+ setenv( "QWS_DISPLAY", qws_display_str, true );
+ setenv( "LOGNAME", username, true );
+ setenv( "USER", username, true );
+ setenv( "HOME", pword->pw_dir, true );
+
+ // cout << "QTE data dir: " << qws_dataDir() << endl;
+
+ //-- I am reborn
+
+ return true;
+}
+
+
+
+//----------------------------------------------------------------------------
+
+bool QDMDialogImpl::login( QWidget *parent )
+{
+ //-- only when called as 'root' do login-box
+ if( getuid() != 0 )
+ return true;
+
+
+ //-- are we coming from a 'restart' ?
+ if( getenv("QDM_STARTED") )
+ return true;
+ else
+ unsetenv("QDM_STARTED");
+
+
+#ifndef QT_NO_TRANSLATION
+ QString lang = getenv( "LANG" );
+
+ QTranslator * trans = new QTranslator(qApp);
+ QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/login.qm";
+ if ( trans->load( tfn ))
+ qApp->installTranslator( trans );
+ else {
+ delete trans;
+ trans = 0;
+ }
+#endif
+
+ if( parent ) parent->erase();
+
+ QDMDialog *dialog = new QDMDialogImpl( parent, "Login", true //);
+ ,WStyle_NoBorder | WStyle_Customize );
+
+#if QT_VERSION >= 300
+ Q_CHECK_PTR( dialog );
+#else
+ CHECK_PTR( dialog );
+#endif
+ int result = dialog->exec();
+ delete dialog;
+
+ if( parent ) parent->erase();
+
+#ifndef QT_NO_TRANSLATION
+ if( trans ) {
+ qApp->removeTranslator( trans );
+ delete trans;
+ trans = 0;
+ }
+#endif
+
+ setenv( "QDM_STARTED", "", true );
+
+ // if( parent ) parent->erase();
+
+ //-- get all configs going
+ Global::restart();
+
+ return result;
+}
+
+
+#endif //-- QT_QWS_LOGIN
diff --git a/core/opie-login/qdmdialogimpl.h b/core/opie-login/qdmdialogimpl.h
new file mode 100644
index 0000000..d62695b
--- a/dev/null
+++ b/core/opie-login/qdmdialogimpl.h
@@ -0,0 +1,90 @@
+//-- -*- c++ -*-
+/**********************************************************************
+** Copyright (C) 2001 LISA Systems
+**
+** This file is an additional part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** For further information contact info@lisa.de
+**
+**********************************************************************/
+
+/*
+ * AUTHOR: Christian Rahn
+ * EMAIL: cdr@lisa.de
+ *
+ * $Id$
+ */
+
+#ifndef _QDM_IMPL_H
+#define _QDM_IMPL_H
+
+#include "qdm_config.h"
+
+#if defined(QT_QWS_LOGIN)
+
+#include "qdmdialog.h"
+
+class InputMethods;
+
+class QDMDialogImpl : public QDMDialog
+{
+ Q_OBJECT
+
+ public:
+ /** Pop up login dialog and do all stuff */
+ static bool login( QWidget * parent = 0 );
+
+ protected:
+ /** a protected constructor */
+ QDMDialogImpl( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags f = 0 );
+ ~QDMDialogImpl();
+
+ /** Timer for clock display */
+ void timerEvent( QTimerEvent * );
+
+ /** The Timer for the clock */
+ int clockTimer;
+
+ /** Conersation function for PAM */
+ // int PAM_conv (int num_msg, pam_message_type **msg, struct pam_response **resp, void *);
+
+ /** Just become (i.e. log in as) user <name> */
+ bool changePersona( const char *name );
+
+ /** Inform about an incorrect given password */
+ void informBadPassword();
+
+private:
+ InputMethods *input;
+
+ protected slots:
+ /** These got to be overridden so that the login dialog can't be circumvented */
+ virtual void accept ();
+ virtual void reject ();
+
+public slots:
+ /** Display the atual time and date */
+ void showTime( void );
+
+ /** login button pressed */
+ virtual void slot_login();
+
+ /** Shutdown button pressed */
+ virtual void slot_shutdown();
+
+ /** Sleep button pressed */
+ virtual void slot_sleepmode();
+};
+
+#endif //-- QT_QWS_LOGIN
+
+#endif //-- _QDM_IMPL_H
+
diff --git a/core/pim/addressbook/.cvsignore b/core/pim/addressbook/.cvsignore
new file mode 100644
index 0000000..28d87f2
--- a/dev/null
+++ b/core/pim/addressbook/.cvsignore
@@ -0,0 +1,16 @@
+moc_*
+Makefile
+abeditorbase.h
+abaddress.h
+abcompanybase.h
+abnamebase.h
+abeditorbase.cpp
+abaddress.cpp
+abcompanybase.cpp
+abnamebase.cpp
+abeditorpage2base.ui
+abeditorpage2base.h
+abeditorpage2base.cpp
+addresssettingsbase.h
+addresssettingsbase.cpp
+
diff --git a/core/pim/addressbook/Makefile.in b/core/pim/addressbook/Makefile.in
new file mode 100644
index 0000000..93c73c3
--- a/dev/null
+++ b/core/pim/addressbook/Makefile.in
@@ -0,0 +1,244 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = addressbook
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = addressbook.h \
+ abeditor.h \
+ ablabel.h \
+ abtable.h \
+ addresssettings.h
+SOURCES = main.cpp \
+ addressbook.cpp \
+ abeditor.cpp \
+ ablabel.cpp \
+ abtable.cpp \
+ addresssettings.cpp
+OBJECTS = main.o \
+ addressbook.o \
+ abeditor.o \
+ ablabel.o \
+ abtable.o \
+ addresssettings.o \
+ addresssettingsbase.o
+INTERFACES = addresssettingsbase.ui
+UICDECLS = addresssettingsbase.h
+UICIMPLS = addresssettingsbase.cpp
+SRCMOC = moc_addressbook.cpp \
+ moc_abeditor.cpp \
+ moc_ablabel.cpp \
+ moc_abtable.cpp \
+ moc_addresssettings.cpp \
+ moc_addresssettingsbase.cpp
+OBJMOC = moc_addressbook.o \
+ moc_abeditor.o \
+ moc_ablabel.o \
+ moc_abtable.o \
+ moc_addresssettings.o \
+ moc_addresssettingsbase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake p4addressbook.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ addressbook.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+addressbook.o: addressbook.cpp \
+ abeditor.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h \
+ ablabel.h \
+ abtable.h \
+ $(QPEDIR)/include/qpe/categories.h \
+ addresssettings.h \
+ addresssettingsbase.h \
+ addressbook.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/finddialog.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/ir.h \
+ $(QPEDIR)/include/qpe/qpemessagebox.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+abeditor.o: abeditor.cpp \
+ abeditor.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h \
+ addresspicker.h \
+ $(QPEDIR)/include/qpe/categoryselect.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qpedialog.h
+
+ablabel.o: ablabel.cpp \
+ ablabel.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h \
+ $(QPEDIR)/include/qpe/stringutil.h
+
+abtable.o: abtable.cpp \
+ $(QPEDIR)/include/qpe/categoryselect.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/stringutil.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ abtable.h \
+ $(QPEDIR)/include/qpe/categories.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h
+
+addresssettings.o: addresssettings.cpp \
+ addresssettings.h \
+ addresssettingsbase.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h
+
+addresssettingsbase.h: addresssettingsbase.ui
+ $(UIC) addresssettingsbase.ui -o $(INTERFACE_DECL_PATH)/addresssettingsbase.h
+
+addresssettingsbase.cpp: addresssettingsbase.ui
+ $(UIC) addresssettingsbase.ui -i addresssettingsbase.h -o addresssettingsbase.cpp
+
+addresssettingsbase.o: addresssettingsbase.cpp \
+ addresssettingsbase.h \
+ addresssettingsbase.ui
+
+moc_addressbook.o: moc_addressbook.cpp \
+ addressbook.h
+
+moc_abeditor.o: moc_abeditor.cpp \
+ abeditor.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h
+
+moc_ablabel.o: moc_ablabel.cpp \
+ ablabel.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h
+
+moc_abtable.o: moc_abtable.cpp \
+ abtable.h \
+ $(QPEDIR)/include/qpe/categories.h \
+ $(QPEDIR)/include/qpe/contact.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/recordfields.h
+
+moc_addresssettings.o: moc_addresssettings.cpp \
+ addresssettings.h \
+ addresssettingsbase.h
+
+moc_addresssettingsbase.o: moc_addresssettingsbase.cpp \
+ addresssettingsbase.h
+
+moc_addressbook.cpp: addressbook.h
+ $(MOC) addressbook.h -o moc_addressbook.cpp
+
+moc_abeditor.cpp: abeditor.h
+ $(MOC) abeditor.h -o moc_abeditor.cpp
+
+moc_ablabel.cpp: ablabel.h
+ $(MOC) ablabel.h -o moc_ablabel.cpp
+
+moc_abtable.cpp: abtable.h
+ $(MOC) abtable.h -o moc_abtable.cpp
+
+moc_addresssettings.cpp: addresssettings.h
+ $(MOC) addresssettings.h -o moc_addresssettings.cpp
+
+moc_addresssettingsbase.cpp: addresssettingsbase.h
+ $(MOC) addresssettingsbase.h -o moc_addresssettingsbase.cpp
+
+
diff --git a/core/pim/addressbook/abeditor.cpp b/core/pim/addressbook/abeditor.cpp
new file mode 100644
index 0000000..6354db9
--- a/dev/null
+++ b/core/pim/addressbook/abeditor.cpp
@@ -0,0 +1,619 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "abeditor.h"
+#include "addresspicker.h"
+
+#include <qpe/categoryselect.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/qpedialog.h>
+
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qmultilineedit.h>
+#include <qscrollview.h>
+#include <qtoolbutton.h>
+#include <qpushbutton.h>
+#include <qmainwindow.h>
+
+
+static inline bool containsAlphaNum( const QString &str );
+static inline bool constainsWhiteSpace( const QString &str );
+
+
+// helper functions, convert our comma delimited list to proper
+// file format...
+void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
+ QString &strAll );
+
+// helper convert from file format to comma delimited...
+void parseEmailTo( const QString &strDefaultEmail,
+ const QString &strOtherEmail, QString &strBack );
+
+
+
+AbEditor::AbEditor( const Contact &entry, const QValueList<int> *newOrdered,
+ QStringList *slNewOrdered,
+ QWidget *parent = 0, const char *name = 0, WFlags fl = 0 )
+ : QDialog( parent, name, TRUE, fl ),
+ orderedValues( newOrdered ),
+ slOrdered( slNewOrdered )
+{
+ init();
+ initMap();
+ setEntry( entry );
+}
+
+AbEditor::~AbEditor()
+{
+}
+
+void AbEditor::init()
+{
+ middleEdit = 0;
+ QVBoxLayout *vb = new QVBoxLayout( this );
+ svPage = new QScrollView( this );
+ svPage->setHScrollBarMode( QScrollView::AlwaysOff );
+ vb->addWidget( svPage );
+ svPage->setResizePolicy( QScrollView::AutoOneFit );
+ svPage->setFrameStyle( QFrame::NoFrame );
+
+ QWidget *container = new QWidget( svPage->viewport() );
+ svPage->addChild( container );
+
+ QGridLayout *gl = new QGridLayout( container, 20, 2, 4, 2 );
+
+ QLabel *l = new QLabel( tr("First Name"), container );
+ gl->addWidget( l, 0, 0 );
+ firstEdit = new QLineEdit( container );
+ gl->addWidget( firstEdit, 0, 1 );
+
+ l = new QLabel( tr("Last Name"), container );
+ gl->addWidget( l, 1, 0 );
+ lastEdit = new QLineEdit( container );
+ gl->addWidget( lastEdit, 1, 1 );
+
+ l = new QLabel( tr("Categories"), container );
+ gl->addWidget( l, 2, 0 );
+
+ cmbCat = new CategorySelect( container );
+ gl->addWidget( cmbCat, 2, 1 );
+
+ int i;
+ bool foundGender,
+ foundNotes;
+ foundGender = foundNotes = false;
+ QStringList::ConstIterator it = slOrdered->begin();
+ for ( i = 0; it != slOrdered->end(); i++, ++it ) {
+ if ( !foundGender && *it == tr("Gender") ) {
+ foundGender = true;
+ } else if ( !foundNotes && *it == tr("Notes") ) {
+ foundNotes = true;
+ } else {
+ l = new QLabel( *it, container );
+ listName.append( l );
+ gl->addWidget( l, i + 3, 0 );
+ QLineEdit *e = new QLineEdit( container );
+ listValue.append( e );
+ gl->addWidget( e, i + 3, 1 );
+ if ( *it == tr( "Middle Name" ) )
+ middleEdit = e;
+ }
+ }
+ l = new QLabel( tr("Gender"), container );
+ gl->addWidget( l, slOrdered->count() + 3, 0 );
+ genderCombo = new QComboBox( container );
+ genderCombo->insertItem( "", 0 );
+ genderCombo->insertItem( tr( "Male" ), 1 );
+ genderCombo->insertItem( tr( "Female" ), 2 );
+ gl->addWidget( genderCombo, slOrdered->count() + 3, 1 );
+
+ dlgNote = new QDialog( this, "Note Dialog", TRUE );
+ dlgNote->setCaption( tr("Enter Note") );
+ QVBoxLayout *vbNote = new QVBoxLayout( dlgNote );
+ // lblNote = new QLabel( dlgNote );
+ // lblNote->setMinimumSize( lblNote->sizeHint() + QSize( 0, 4 ) );
+ // vbNote->addWidget( lblNote );
+ txtNote = new QMultiLineEdit( dlgNote );
+ vbNote->addWidget( txtNote );
+
+ QHBoxLayout *hb = new QHBoxLayout( vb );
+ hb->addStretch( 2 );
+ QPushButton *pb = new QPushButton( tr("Notes..."), this );
+ hb->addWidget( pb );
+ connect( pb, SIGNAL(clicked()), this, SLOT(slotNote()) );
+
+ new QPEDialogListener(this);
+}
+
+void AbEditor::initMap()
+{
+ /*
+ // since the fields and the XML fields exist, create a map
+ // between them...
+ Config cfg1( "AddressBook" );
+ Config cfg2( "AddressBook" );
+ QString strCfg1,
+ strCfg2;
+ int i;
+
+ // This stuff better exist...
+ cfg1.setGroup( "AddressFields" );
+ cfg2.setGroup( "XMLFields" );
+ i = 0;
+ strCfg1 = cfg1.readEntry( "Field" + QString::number(i), QString::null );
+ strCfg2 = cfg2.readEntry( "XMLField" + QString::number(i++),
+ QString::null );
+ while ( !strCfg1.isNull() && !strCfg2.isNull() ) {
+ mapField.insert( strCfg1, strCfg2 );
+ strCfg1 = cfg1.readEntry( "Field" + QString::number(i),
+ QString::null );
+ strCfg2 = cfg2.readEntry( "XMLField" + QString::number(i++),
+ QString::null );
+ }
+ */
+}
+
+void AbEditor::loadFields()
+{
+ QStringList::ConstIterator it;
+ QListIterator<QLabel> lit( listName );
+ for ( it = slOrdered->begin(); *lit; ++lit, ++it ) {
+ (*lit)->setText( *it );
+ }
+}
+
+void AbEditor::setEntry( const Contact &entry )
+{
+ ent = entry;
+ QListIterator<QLineEdit> it( listValue );
+ firstEdit->setText( ent.firstName() );
+ lastEdit->setText( ent.lastName() );
+ cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") );
+
+ // ### Fix...
+ QValueList<int>::ConstIterator itVl;
+ for ( itVl = orderedValues->begin(); *it && itVl != orderedValues->end();
+ ++itVl, ++it ) {
+ switch( *itVl ) {
+ case Qtopia::Title:
+ (*it)->setText(ent.title());
+ break;
+ case Qtopia::MiddleName:
+ (*it)->setText( ent.middleName() );
+ break;
+ case Qtopia::Suffix:
+ (*it)->setText( ent.suffix() );
+ break;
+
+ // email
+ case Qtopia::DefaultEmail:
+ case Qtopia::Emails:
+ {
+ QString strDefEmail = ent.defaultEmail();
+ QString strAllEmail = ent.emails();
+ QString strFinal;
+ parseEmailTo( strDefEmail, strAllEmail, strFinal );
+ (*it)->setText( strFinal );
+ // make sure we see the "default"
+ (*it)->home( false );
+ break;
+ }
+
+ // home
+ case Qtopia::HomeStreet:
+ (*it)->setText(ent.homeStreet() );
+ break;
+ case Qtopia::HomeCity:
+ (*it)->setText( ent.homeCity() );
+ break;
+ case Qtopia::HomeState:
+ (*it)->setText( ent.homeState() );
+ break;
+ case Qtopia::HomeZip:
+ (*it)->setText( ent.homeZip() );
+ break;
+ case Qtopia::HomeCountry:
+ (*it)->setText( ent.homeCountry() );
+ break;
+ case Qtopia::HomePhone:
+ (*it)->setText( ent.homePhone() );
+ break;
+ case Qtopia::HomeFax:
+ (*it)->setText( ent.homeFax() );
+ break;
+ case Qtopia::HomeMobile:
+ (*it)->setText( ent.homeMobile() );
+ break;
+ case Qtopia::HomeWebPage:
+ (*it)->setText( ent.homeWebpage() );
+ break;
+
+ // business
+ case Qtopia::Company:
+ (*it)->setText( ent.company() );
+ break;
+ case Qtopia::BusinessStreet:
+ (*it)->setText( ent.businessStreet() );
+ break;
+ case Qtopia::BusinessCity:
+ (*it)->setText( ent.businessCity() );
+ break;
+ case Qtopia::BusinessState:
+ (*it)->setText( ent.businessState() );
+ break;
+ case Qtopia::BusinessZip:
+ (*it)->setText( ent.businessZip() );
+ break;
+ case Qtopia::BusinessCountry:
+ (*it)->setText( ent.businessCountry() );
+ break;
+ case Qtopia::BusinessWebPage:
+ (*it)->setText( ent.businessWebpage() );
+ break;
+ case Qtopia::JobTitle:
+ (*it)->setText( ent.jobTitle() );
+ break;
+ case Qtopia::Department:
+ (*it)->setText( ent.department() );
+ break;
+ case Qtopia::Office:
+ (*it)->setText( ent.office() );
+ break;
+ case Qtopia::BusinessPhone:
+ (*it)->setText( ent.businessPhone() );
+ break;
+ case Qtopia::BusinessFax:
+ (*it)->setText( ent.businessFax() );
+ break;
+ case Qtopia::BusinessMobile:
+ (*it)->setText( ent.businessMobile() );
+ break;
+ case Qtopia::BusinessPager:
+ (*it)->setText( ent.businessPager() );
+ break;
+ case Qtopia::Profession:
+ (*it)->setText( ent.profession() );
+ break;
+ case Qtopia::Assistant:
+ (*it)->setText( ent.assistant() );
+ break;
+ case Qtopia::Manager:
+ (*it)->setText( ent.manager() );
+ break;
+
+ // personal
+ case Qtopia::Spouse:
+ (*it)->setText( ent.spouse() );
+ break;
+ case Qtopia::Children:
+ (*it)->setText( ent.children() );
+ break;
+ case Qtopia::Birthday:
+ (*it)->setText( ent.birthday() );
+ break;
+ case Qtopia::Anniversary:
+ (*it)->setText( ent.anniversary() );
+ break;
+ case Qtopia::Nickname:
+ (*it)->setText( ent.nickname() );
+ break;
+
+ }
+ }
+
+ QString gender = ent.gender();
+ genderCombo->setCurrentItem( gender.toInt() );
+
+ txtNote->setText( ent.notes() );
+}
+
+void AbEditor::accept()
+{
+ if ( isEmpty() )
+ reject();
+ else {
+ saveEntry();
+ QDialog::accept();
+ }
+}
+
+bool AbEditor::isEmpty()
+{
+ // analyze all the fields and make sure there is _something_ there
+ // that warrants saving...
+ QString t = firstEdit->text();
+ if ( !t.isEmpty() && containsAlphaNum( t ) )
+ return false;
+
+ t = lastEdit->text();
+ if ( !t.isEmpty() && containsAlphaNum( t ) )
+ return false;
+
+ QListIterator<QLineEdit> it( listValue );
+ for ( ; it.current(); ++it ) {
+ t = it.current()->text();
+ if ( !t.isEmpty() && containsAlphaNum( t ) )
+ return false;
+ }
+
+ t = txtNote->text();
+ if ( !t.isEmpty() && containsAlphaNum( t ) )
+ return false;
+
+ return true;
+}
+
+void AbEditor::saveEntry()
+{
+ QString strDefaultEmail, strOtherEmail;
+
+ // determine if there has been a change in names
+ if ( ent.firstName() != firstEdit->text() ||
+ ent.lastName() != lastEdit->text()
+ || (middleEdit && ent.middleName() != middleEdit->text()) ) {
+ // set the names
+ ent.setFirstName( firstEdit->text() );
+ ent.setLastName( lastEdit->text() );
+ if ( middleEdit )
+ ent.setMiddleName( middleEdit->text() );
+ ent.setFileAs();
+ }
+
+ ent.setCategories( cmbCat->currentCategories() );
+
+ QListIterator<QLineEdit> it( listValue );
+ int i;
+ QValueList<int>::ConstIterator<int> vlIt;
+ for ( i = 0, vlIt = orderedValues->begin();
+ it.current(); ++it, ++vlIt, i++ ) {
+ switch( *vlIt ) {
+ case Qtopia::Title:
+ ent.setTitle( it.current()->text() );
+ break;
+ case Qtopia::MiddleName:
+ ent.setMiddleName( it.current()->text() );
+ break;
+ case Qtopia::Suffix:
+ ent.setSuffix( it.current()->text() );
+ break;
+// case Qtopia::Category:
+// {
+// // QStringList slCat = QStringList::split( ";", value );
+// // QValueList<int> cat;
+// // for ( QStringList::ConstIterator it = slCat.begin();
+// // it != slCat.end(); ++it )
+// // cat.append( (*it).toInt() );
+// // ent.setCategories( cat );
+// }
+// break;
+
+ // email
+ case Qtopia::DefaultEmail:
+ case Qtopia::Emails:
+ parseEmailFrom( it.current()->text(), strDefaultEmail,
+ strOtherEmail );
+ ent.setDefaultEmail( strDefaultEmail );
+ ent.setEmails( strOtherEmail );
+ break;
+
+ // home
+ case Qtopia::HomeStreet:
+ ent.setHomeStreet( it.current()->text() );
+ break;
+ case Qtopia::HomeCity:
+ ent.setHomeCity( it.current()->text() );
+ break;
+ case Qtopia::HomeState:
+ ent.setHomeState( it.current()->text() );
+ break;
+ case Qtopia::HomeZip:
+ ent.setHomeZip( it.current()->text() );
+ break;
+ case Qtopia::HomeCountry:
+ ent.setHomeCountry( it.current()->text() );
+ break;
+ case Qtopia::HomePhone:
+ ent.setHomePhone( it.current()->text() );
+ break;
+ case Qtopia::HomeFax:
+ ent.setHomeFax( it.current()->text() );
+ break;
+ case Qtopia::HomeMobile:
+ ent.setHomeMobile( it.current()->text() );
+ break;
+ case Qtopia::HomeWebPage:
+ ent.setHomeWebpage( it.current()->text() );
+ break;
+
+ // business
+ case Qtopia::Company:
+ ent.setCompany( it.current()->text() );
+ break;
+ case Qtopia::BusinessStreet:
+ ent.setBusinessStreet( it.current()->text() );
+ break;
+ case Qtopia::BusinessCity:
+ ent.setBusinessCity( it.current()->text() );
+ break;
+ case Qtopia::BusinessState:
+ ent.setBusinessState( it.current()->text() );
+ break;
+ case Qtopia::BusinessZip:
+ ent.setBusinessZip( it.current()->text() );
+ break;
+ case Qtopia::BusinessCountry:
+ ent.setBusinessCountry( it.current()->text() );
+ break;
+ case Qtopia::BusinessWebPage:
+ ent.setBusinessWebpage( it.current()->text() );
+ break;
+ case Qtopia::JobTitle:
+ ent.setJobTitle( it.current()->text() );
+ break;
+ case Qtopia::Department:
+ ent.setDepartment( it.current()->text() );
+ break;
+ case Qtopia::Office:
+ ent.setOffice( it.current()->text() );
+ break;
+ case Qtopia::BusinessPhone:
+ ent.setBusinessPhone( it.current()->text() );
+ break;
+ case Qtopia::BusinessFax:
+ ent.setBusinessFax( it.current()->text() );
+ break;
+ case Qtopia::BusinessMobile:
+ ent.setBusinessMobile( it.current()->text() );
+ break;
+ case Qtopia::BusinessPager:
+ ent.setBusinessPager( it.current()->text() );
+ break;
+ case Qtopia::Profession:
+ ent.setProfession( it.current()->text() );
+ break;
+ case Qtopia::Assistant:
+ ent.setAssistant( it.current()->text() );
+ break;
+ case Qtopia::Manager:
+ ent.setManager( it.current()->text() );
+ break;
+
+ // personal
+ case Qtopia::Spouse:
+ ent.setSpouse( it.current()->text() );
+ break;
+ case Qtopia::Children:
+ ent.setChildren( it.current()->text() );
+ break;
+ case Qtopia::Birthday:
+ ent.setBirthday( it.current()->text() );
+ break;
+ case Qtopia::Anniversary:
+ ent.setAnniversary( it.current()->text() );
+ break;
+ case Qtopia::Nickname:
+ ent.setNickname( it.current()->text() );
+ break;
+ default:
+ break;
+
+ }
+ }
+
+ int gender = genderCombo->currentItem();
+ ent.setGender( QString::number( gender ) );
+
+ QString str = txtNote->text();
+ if ( !str.isNull() )
+ ent.setNotes( str );
+}
+
+void AbEditor::slotNote()
+{
+ dlgNote->showMaximized();
+ if ( !dlgNote->exec() ) {
+ // reset the note...
+ txtNote->setText( ent.notes() );
+ }
+}
+
+void AbEditor::setNameFocus()
+{
+ firstEdit->setFocus();
+}
+
+void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
+ QString &strAll )
+{
+ int where,
+ start;
+ if ( txt.isEmpty() )
+ return;
+ // find the first
+ where = txt.find( ',' );
+ if ( where < 0 ) {
+ strDefaultEmail = txt;
+ strAll = txt;
+ } else {
+ strDefaultEmail = txt.left( where ).stripWhiteSpace();
+ strAll = strDefaultEmail;
+ while ( where > -1 ) {
+ strAll.append(" ");
+ start = where;
+ where = txt.find( ',', where + 1 );
+ if ( where > - 1 )
+ strAll.append( txt.mid(start + 1, where - start - 1).stripWhiteSpace() );
+ else // grab until the end...
+ strAll.append( txt.right(txt.length() - start - 1).stripWhiteSpace() );
+ }
+ }
+}
+
+void parseEmailTo( const QString &strDefaultEmail,
+ const QString &strOtherEmail, QString &strBack )
+{
+ // create a comma dilimeted set of emails...
+ // use the power of short circuiting...
+ bool foundDefault = false;
+ QString strTmp;
+ int start = 0;
+ int where;
+ // start at the beginng.
+ strBack = strDefaultEmail;
+ where = 0;
+ while ( where > -1 ) {
+ start = where;
+ where = strOtherEmail.find( ' ', where + 1 );
+ if ( where > 0 ) {
+ strTmp = strOtherEmail.mid( start, where - start ).stripWhiteSpace();
+ } else
+ strTmp = strOtherEmail.right( strOtherEmail.length() - start ).stripWhiteSpace();
+ if ( foundDefault || strTmp != strDefaultEmail ) {
+ strBack.append( ", " );
+ strBack.append( strTmp );
+ } else
+ foundDefault = true;
+ }
+}
+
+
+static inline bool containsAlphaNum( const QString &str )
+{
+ int i,
+ count = str.length();
+ for ( i = 0; i < count; i++ )
+ if ( !str[i].isSpace() )
+ return TRUE;
+ return FALSE;
+}
+
+static inline bool constainsWhiteSpace( const QString &str )
+{
+ int i,
+ count = str.length();
+ for (i = 0; i < count; i++ )
+ if ( str[i].isSpace() )
+ return TRUE;
+ return FALSE;
+}
+
diff --git a/core/pim/addressbook/abeditor.h b/core/pim/addressbook/abeditor.h
new file mode 100644
index 0000000..9ce6704
--- a/dev/null
+++ b/core/pim/addressbook/abeditor.h
@@ -0,0 +1,79 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef ABEDITOR_H
+#define ABEDITOR_H
+
+#include <qpe/contact.h>
+
+#include <qdialog.h>
+#include <qlist.h>
+#include <qmap.h>
+#include <qstringlist.h>
+
+class QScrollView;
+class QMultiLineEdit;
+class QLineEdit;
+class QLabel;
+class QComboBox;
+class CategorySelect;
+
+class AbEditor : public QDialog
+{
+ Q_OBJECT
+public:
+ AbEditor( const Contact &entry, const QValueList<int> *newOrdedValues,
+ QStringList *slNewOrdered,
+ QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~AbEditor();
+ void loadFields();
+ void setNameFocus();
+ Contact entry() const { return ent; }
+
+public slots:
+ void slotNote();
+ void setEntry( const Contact &entry );
+
+protected slots:
+ void accept();
+
+private:
+ void init();
+ void initMap();
+ void saveEntry();
+ bool isEmpty();
+
+private:
+ QDialog *dlgNote;
+ QLabel *lblNote;
+ QMultiLineEdit *txtNote;
+ Contact ent;
+ QScrollView *svPage;
+ QLineEdit *firstEdit;
+ QLineEdit *lastEdit;
+ QLineEdit *middleEdit;
+ QComboBox *genderCombo;
+ QList<QLineEdit> listValue;
+ QList<QLabel> listName;
+ const QValueList<int> *orderedValues;
+ QStringList *slOrdered;
+ CategorySelect *cmbCat;
+};
+
+#endif
diff --git a/core/pim/addressbook/ablabel.cpp b/core/pim/addressbook/ablabel.cpp
new file mode 100644
index 0000000..3bf3e12
--- a/dev/null
+++ b/core/pim/addressbook/ablabel.cpp
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "ablabel.h"
+
+#include <qpe/stringutil.h>
+
+#include <qregexp.h>
+#include <qstylesheet.h>
+
+AbLabel::AbLabel( QWidget *parent, const char *name )
+ : QTextView( parent, name )
+{
+}
+
+AbLabel::~AbLabel()
+{
+}
+
+void AbLabel::init( const Contact &entry )
+{
+ ent = entry;
+}
+
+void AbLabel::sync()
+{
+ QString text = ent.toRichText();
+ setText( text );
+}
+
+void AbLabel::keyPressEvent( QKeyEvent *e )
+{
+ if ( e->key() == Qt::Key_F33 ) {
+ emit okPressed();
+ }
+}
diff --git a/core/pim/addressbook/ablabel.h b/core/pim/addressbook/ablabel.h
new file mode 100644
index 0000000..cfbd999
--- a/dev/null
+++ b/core/pim/addressbook/ablabel.h
@@ -0,0 +1,50 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef ABLABEL_H
+#define ABLABEL_H
+
+#include <qpe/contact.h>
+#include <qtextview.h>
+
+class AbLabel : public QTextView
+{
+ Q_OBJECT
+
+public:
+ AbLabel( QWidget *parent, const char *name = 0 );
+ ~AbLabel();
+
+public slots:
+ void init( const Contact &entry );
+ void sync();
+
+signals:
+ void okPressed();
+
+protected:
+ void keyPressEvent( QKeyEvent * );
+
+private:
+ Contact ent;
+
+};
+
+#endif // ABLABEL_H
+
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
new file mode 100644
index 0000000..0911edf
--- a/dev/null
+++ b/core/pim/addressbook/abtable.cpp
@@ -0,0 +1,1091 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/categoryselect.h>
+#include <qpe/config.h>
+#include <qpe/stringutil.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qasciidict.h>
+#include <qdatetime.h>
+#include <qfile.h>
+
+#include "abtable.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <ctype.h> //toupper() for key hack
+
+static bool contactCompare( const Contact &cnt, const QRegExp &r, int category );
+
+//### qtmail/addresslist.cpp hardcodes this filename as well
+static QString journalFileName()
+{
+ QString str = getenv("HOME");
+ str +="/.abjournal";
+ return str;
+}
+
+
+
+/*!
+ \class AbTableItem abtable.h
+
+ \brief QTableItem based class for showing a field of an entry
+*/
+
+AbTableItem::AbTableItem( QTable *t, EditType et, const QString &s,
+ const QString &secondSortKey)
+ : QTableItem( t, et, s )
+{
+ // sortKey = s.lower() + QChar( '\0' ) + secondSortKey.lower();
+ sortKey = Qtopia::buildSortKey( s, secondSortKey );
+}
+
+int AbTableItem::alignment() const
+{
+ return AlignLeft|AlignVCenter;
+}
+
+QString AbTableItem::key() const
+{
+ return sortKey;
+}
+
+// A way to reset the item, without out doing a delete or a new...
+void AbTableItem::setItem( const QString &txt, const QString &secondKey )
+{
+ setText( txt );
+ sortKey = Qtopia::buildSortKey( txt, secondKey );
+
+ // sortKey = txt.lower() + QChar( '\0' ) + secondKey.lower();
+}
+
+/*!
+ \class AbPickItem abtable.h
+
+ \brief QTableItem based class for showing slection of an entry
+*/
+
+AbPickItem::AbPickItem( QTable *t ) :
+ QTableItem(t, WhenCurrent, "?")
+{
+}
+
+QWidget *AbPickItem::createEditor() const
+{
+ QComboBox* combo = new QComboBox( table()->viewport() );
+ ( (AbPickItem*)this )->cb = combo;
+ AbTable* t = static_cast<AbTable*>(table());
+ QStringList c = t->choiceNames();
+ int cur = 0;
+ for (QStringList::ConstIterator it = c.begin(); it!=c.end(); ++it) {
+ if ( *it == text() )
+ cur = combo->count();
+ combo->insertItem(*it);
+ }
+ combo->setCurrentItem(cur);
+ return combo;
+}
+
+void AbPickItem::setContentFromEditor( QWidget *w )
+{
+ if ( w->inherits("QComboBox") )
+ setText( ( (QComboBox*)w )->currentText() );
+ else
+ QTableItem::setContentFromEditor( w );
+}
+
+/*!
+ \class AbTable abtable.h
+
+ \brief QTable based class for showing a list of entries
+*/
+
+AbTable::AbTable( const QValueList<int> *order, QWidget *parent, const char *name )
+// #ifdef QT_QTABLE_NOHEADER_CONSTRUCTOR
+// : QTable( 0, 0, parent, name, TRUE ),
+// #else
+ : QTable( parent, name ),
+// #endif
+ lastSortCol( -1 ),
+ asc( TRUE ),
+ intFields( order ),
+ currFindRow( -2 ),
+ mCat( 0 )
+{
+ mCat.load( categoryFileName() );
+ setSelectionMode( NoSelection );
+ init();
+ setSorting( TRUE );
+ connect( this, SIGNAL(clicked(int,int,int,const QPoint &)),
+ this, SLOT(itemClicked(int,int)) );
+}
+
+AbTable::~AbTable()
+{
+}
+
+void AbTable::init()
+{
+ setNumRows( 0 );
+ setNumCols( 2 );
+
+ horizontalHeader()->setLabel( 0, tr( "Full Name" ));
+ horizontalHeader()->setLabel( 1, tr( "Contact" ));
+ setLeftMargin( 0 );
+ verticalHeader()->hide();
+}
+
+void AbTable::columnClicked( int col )
+{
+ if ( !sorting() )
+ return;
+
+ if ( lastSortCol == -1 )
+ lastSortCol = col;
+
+ if ( col == lastSortCol ) {
+ asc = !asc;
+ } else {
+ lastSortCol = col;
+ asc = TRUE;
+ }
+ resort();
+}
+
+void AbTable::resort()
+{
+ if ( sorting() ) {
+ if ( lastSortCol == -1 )
+ lastSortCol = 0;
+ sortColumn( lastSortCol, asc, TRUE );
+ updateVisible();
+ }
+}
+
+Contact AbTable::currentEntry()
+{
+ Contact cnt;
+ AbTableItem *abItem;
+ abItem = static_cast<AbTableItem*>(item( currentRow(), 0 ));
+ if ( abItem ) {
+ cnt = contactList[abItem];
+ }
+ return cnt;
+}
+
+void AbTable::replaceCurrentEntry( const Contact &newContact )
+{
+ int row = currentRow();
+ updateJournal( newContact, Contact::ACTION_REPLACE, row );
+ updateVisible();
+
+ journalFreeReplace( newContact, row );
+}
+
+void AbTable::deleteCurrentEntry()
+{
+ int row = currentRow();
+ AbTableItem *abItem;
+ abItem = static_cast<AbTableItem*>(item( row, 0 ));
+ Contact oldContact;
+ oldContact = contactList[abItem];
+ updateJournal( oldContact, Contact::ACTION_REMOVE, row );
+
+ // a little wasteful, but it ensure's there is only one place
+ // where we delete.
+ journalFreeRemove( row );
+ updateVisible();
+
+ if ( numRows() == 0 )
+ emit empty( TRUE );
+}
+
+void AbTable::clear()
+{
+ contactList.clear();
+ for ( int r = 0; r < numRows(); ++r ) {
+ for ( int c = 0; c < numCols(); ++c ) {
+ if ( cellWidget( r, c ) )
+ clearCellWidget( r, c );
+ clearCell( r, c );
+ }
+ }
+ setNumRows( 0 );
+}
+
+void AbTable::refresh()
+{
+ int rows = numRows();
+ QString value;
+ AbTableItem *abi;
+ for ( int r = 0; r < rows; ++r ) {
+ abi = static_cast<AbTableItem*>( item(r, 0) );
+ value = findContactContact( contactList[abi] );
+ static_cast<AbTableItem*>( item(r, 1) )->setItem( value, abi->text() );
+ }
+ resort();
+}
+
+void AbTable::keyPressEvent( QKeyEvent *e )
+{
+ char key = toupper( e->ascii() );
+
+ if ( key >= 'A' && key <= 'Z' )
+ moveTo( key );
+
+ switch( e->key() ) {
+ case Qt::Key_Space:
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ emit details();
+ break;
+ default:
+ QTable::keyPressEvent( e );
+ }
+}
+
+void AbTable::moveTo( char c )
+{
+
+ int rows = numRows();
+ QString value;
+ AbTableItem *abi;
+ int r;
+ if ( asc ) {
+ r = 0;
+ while ( r < rows-1) {
+ abi = static_cast<AbTableItem*>( item(r, 0) );
+ QChar first = abi->key()[0];
+ //### is there a bug in QChar to char comparison???
+ if ( first.row() || first.cell() >= c )
+ break;
+ r++;
+ }
+ } else {
+ //### should probably disable reverse sorting instead
+ r = rows - 1;
+ while ( r > 0 ) {
+ abi = static_cast<AbTableItem*>( item(r, 0) );
+ QChar first = abi->key()[0];
+ //### is there a bug in QChar to char comparison???
+ if ( first.row() || first.cell() >= c )
+ break;
+ r--;
+ }
+ }
+ setCurrentCell( r, currentColumn() );
+}
+
+
+QString AbTable::findContactName( const Contact &entry )
+{
+ // We use the fileAs, then company, defaultEmail
+ QString str;
+ str = entry.fileAs();
+ if ( str.isEmpty() ) {
+ str = entry.company();
+ if ( str.isEmpty() ) {
+ str = entry.defaultEmail();
+ }
+ }
+ return str;
+}
+
+QString AbTable::findContactContact( const Contact &entry )
+{
+ QString value;
+ value = "";
+ for ( QValueList<int>::ConstIterator it = intFields->begin();
+ it != intFields->end(); ++it ) {
+ switch ( *it ) {
+ default:
+ break;
+ case Qtopia::Title:
+ value = entry.title();
+ break;
+ case Qtopia::Suffix:
+ value = entry.suffix();
+ break;
+ case Qtopia::FileAs:
+ value = entry.fileAs();
+ break;
+ case Qtopia::DefaultEmail:
+ value = entry.defaultEmail();
+ case Qtopia::Emails:
+ value = entry.emails();
+ break;
+ case Qtopia::HomeStreet:
+ value = entry.homeStreet();
+ break;
+ case Qtopia::HomeCity:
+ value = entry.homeCity();
+ break;
+ case Qtopia::HomeState:
+ value = entry.homeState();
+ break;
+ case Qtopia::HomeZip:
+ value = entry.homeZip();
+ break;
+ case Qtopia::HomeCountry:
+ value = entry.homeCountry();
+ break;
+ case Qtopia::HomePhone:
+ value = entry.homePhone();
+ break;
+ case Qtopia::HomeFax:
+ value = entry.homeFax();
+ break;
+ case Qtopia::HomeMobile:
+ value = entry.homeMobile();
+ break;
+ case Qtopia::HomeWebPage:
+ value = entry.homeWebpage();
+ break;
+ case Qtopia::Company:
+ value = entry.company();
+ break;
+ case Qtopia::BusinessCity:
+ value = entry.businessCity();
+ break;
+ case Qtopia::BusinessStreet:
+ value = entry.businessStreet();
+ break;
+ case Qtopia::BusinessZip:
+ value = entry.businessZip();
+ break;
+ case Qtopia::BusinessCountry:
+ value = entry.businessCountry();
+ break;
+ case Qtopia::BusinessWebPage:
+ value = entry.businessWebpage();
+ break;
+ case Qtopia::JobTitle:
+ value = entry.jobTitle();
+ break;
+ case Qtopia::Department:
+ value = entry.department();
+ break;
+ case Qtopia::Office:
+ value = entry.office();
+ break;
+ case Qtopia::BusinessPhone:
+ value = entry.businessPhone();
+ break;
+ case Qtopia::BusinessFax:
+ value = entry.businessFax();
+ break;
+ case Qtopia::BusinessMobile:
+ value = entry.businessMobile();
+ break;
+ case Qtopia::BusinessPager:
+ value = entry.businessPager();
+ break;
+ case Qtopia::Profession:
+ value = entry.profession();
+ break;
+ case Qtopia::Assistant:
+ value = entry.assistant();
+ break;
+ case Qtopia::Manager:
+ value = entry.manager();
+ break;
+ case Qtopia::Spouse:
+ value = entry.spouse();
+ break;
+ case Qtopia::Gender:
+ value = entry.gender();
+ break;
+ case Qtopia::Birthday:
+ value = entry.birthday();
+ break;
+ case Qtopia::Anniversary:
+ value = entry.anniversary();
+ break;
+ case Qtopia::Nickname:
+ value = entry.nickname();
+ break;
+ case Qtopia::Children:
+ value = entry.children();
+ break;
+ case Qtopia::Notes:
+ value = entry.notes();
+ break;
+ }
+ if ( !value.isEmpty() )
+ break;
+ }
+ return value;
+}
+
+void AbTable::addEntry( const Contact &newCnt )
+{
+ int row = numRows();
+ setNumRows( row + 1 );
+ updateJournal( newCnt, Contact::ACTION_ADD );
+ insertIntoTable( newCnt, row );
+ setCurrentCell( row, 0 );
+ updateVisible();
+}
+
+void AbTable::updateJournal( const Contact &cnt,
+ Contact::journal_action action, int row )
+{
+ QFile f( journalFileName() );
+ if ( !f.open(IO_WriteOnly|IO_Append) )
+ return;
+ QString buf;
+ QCString str;
+ buf = "<Contact ";
+ cnt.save( buf );
+ buf += " action=\"" + QString::number( (int)action ) + "\" ";
+ if ( action == Contact::ACTION_REMOVE || action == Contact::ACTION_REPLACE)
+ buf += " actionrow=\"" + QString::number(row) + "\" ";
+ buf += "/>\n";
+ QCString cstr = buf.utf8();
+ f.writeBlock( cstr.data(), cstr.length() );
+ QCopEnvelope( "QPE/PIM", "addressbookUpdated()" );
+}
+
+bool AbTable::save( const QString &fn )
+{
+// QTime t;
+// t.start();
+
+ QString strNewFile = fn + ".new";
+ QFile f( strNewFile );
+ if ( !f.open( IO_WriteOnly|IO_Raw ) )
+ return false;
+
+ int total_written;
+ QString out;
+ out = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>\n"
+ " <Groups>\n"
+ " </Groups>\n"
+ " <Contacts>\n";
+ QMapIterator<AbTableItem*, Contact> it;
+ for ( it = contactList.begin(); it != contactList.end(); ++it ) {
+ out += "<Contact ";
+ it.data().save( out );
+ out += "/>\n";
+ QCString cstr = out.utf8();
+ total_written = f.writeBlock( cstr.data(), cstr.length() );
+ if ( total_written != int(cstr.length()) ) {
+ f.close();
+ QFile::remove( strNewFile );
+ return false;
+ }
+ out = "";
+ }
+ out += " </Contacts>\n</AddressBook>\n";
+
+ QCString cstr = out.utf8();
+ total_written = f.writeBlock( cstr.data(), cstr.length() );
+ if ( total_written != int(cstr.length()) ) {
+ f.close();
+ QFile::remove( strNewFile );
+ return false;
+ }
+ f.close();
+
+// qDebug("saving: %d", t.elapsed() );
+
+ // move the file over, I'm just going to use the system call
+ // because, I don't feel like using QDir.
+ if ( ::rename( strNewFile.latin1(), fn.latin1() ) < 0 ) {
+ qWarning( "problem renaming file %s to %s, errno: %d",
+ strNewFile.latin1(), fn.latin1(), errno );
+ // remove the tmp file...
+ QFile::remove( strNewFile );
+ }
+ // remove the journal...
+ QFile::remove( journalFileName() );
+ return true;
+}
+
+void AbTable::load( const QString &fn )
+{
+ setSorting( false );
+ loadFile( fn, false );
+ // merge in the journal
+ if ( QFile::exists( journalFileName() ) ) {
+ loadFile( journalFileName(), true );
+ save( fn );
+ }
+ setSorting( true );
+ resort();
+}
+
+void AbTable::loadFile( const QString &strFile, bool journalFile )
+{
+// QTime t;
+// t.start();
+ QFile f( strFile );
+ if ( !f.open(IO_ReadOnly) )
+ return;
+ QList<Contact> list;
+ list.setAutoDelete( TRUE );
+ QByteArray ba = f.readAll();
+ f.close();
+ char *uc = ba.data();//(QChar *)data.unicode();
+ int len = ba.size();//data.length();
+ bool foundAction = false;
+ Contact::journal_action action;
+ bool foundKey = false;
+ int journalKey = 0;
+
+ const int JOURNALACTION = Qtopia::Notes + 1;
+ const int JOURNALROW = JOURNALACTION + 1;
+
+ // **********************************
+ // CHANGE THE SIZE OF THE DICT IF YOU ADD ANY MORE FIELDS!!!!
+ // **********************************
+ QAsciiDict<int> dict( 47 );
+ dict.setAutoDelete( TRUE );
+ dict.insert( "Uid", new int(Qtopia::AddressUid) );
+ dict.insert( "Title", new int(Qtopia::Title) );
+ dict.insert( "FirstName", new int(Qtopia::FirstName) );
+ dict.insert( "MiddleName", new int(Qtopia::MiddleName) );
+ dict.insert( "LastName", new int(Qtopia::LastName) );
+ dict.insert( "Suffix", new int(Qtopia::Suffix) );
+ dict.insert( "FileAs", new int(Qtopia::FileAs) );
+ dict.insert( "Categories", new int(Qtopia::AddressCategory) );
+ dict.insert( "DefaultEmail", new int(Qtopia::DefaultEmail) );
+ dict.insert( "Emails", new int(Qtopia::Emails) );
+ dict.insert( "HomeStreet", new int(Qtopia::HomeStreet) );
+ dict.insert( "HomeCity", new int(Qtopia::HomeCity) );
+ dict.insert( "HomeState", new int(Qtopia::HomeState) );
+ dict.insert( "HomeZip", new int(Qtopia::HomeZip) );
+ dict.insert( "HomeCountry", new int(Qtopia::HomeCountry) );
+ dict.insert( "HomePhone", new int(Qtopia::HomePhone) );
+ dict.insert( "HomeFax", new int(Qtopia::HomeFax) );
+ dict.insert( "HomeMobile", new int(Qtopia::HomeMobile) );
+ dict.insert( "HomeWebPage", new int(Qtopia::HomeWebPage) );
+ dict.insert( "Company", new int(Qtopia::Company) );
+ dict.insert( "BusinessStreet", new int(Qtopia::BusinessStreet) );
+ dict.insert( "BusinessCity", new int(Qtopia::BusinessCity) );
+ dict.insert( "BusinessState", new int(Qtopia::BusinessState) );
+ dict.insert( "BusinessZip", new int(Qtopia::BusinessZip) );
+ dict.insert( "BusinessCountry", new int(Qtopia::BusinessCountry) );
+ dict.insert( "BusinessWebPage", new int(Qtopia::BusinessWebPage) );
+ dict.insert( "JobTitle", new int(Qtopia::JobTitle) );
+ dict.insert( "Department", new int(Qtopia::Department) );
+ dict.insert( "Office", new int(Qtopia::Office) );
+ dict.insert( "BusinessPhone", new int(Qtopia::BusinessPhone) );
+ dict.insert( "BusinessFax", new int(Qtopia::BusinessFax) );
+ dict.insert( "BusinessMobile", new int(Qtopia::BusinessMobile) );
+ dict.insert( "BusinessPager", new int(Qtopia::BusinessPager) );
+ dict.insert( "Profession", new int(Qtopia::Profession) );
+ dict.insert( "Assistant", new int(Qtopia::Assistant) );
+ dict.insert( "Manager", new int(Qtopia::Manager) );
+ dict.insert( "Spouse", new int(Qtopia::Spouse) );
+ dict.insert( "Children", new int(Qtopia::Children) );
+ dict.insert( "Gender", new int(Qtopia::Gender) );
+ dict.insert( "Birthday", new int(Qtopia::Birthday) );
+ dict.insert( "Anniversary", new int(Qtopia::Anniversary) );
+ dict.insert( "Nickname", new int(Qtopia::Nickname) );
+ dict.insert( "Notes", new int(Qtopia::Notes) );
+ dict.insert( "action", new int(JOURNALACTION) );
+ dict.insert( "actionrow", new int(JOURNALROW) );
+
+ int i = 0;
+ int num = 0;
+ char *point;
+ while ( (point = strstr( uc+i, "<Contact " ) ) != NULL ) {
+ i = point - uc;
+ // if we are reading the standard file, we just need to
+ // insert info, so just say we'll do an insert...
+ action = Contact::ACTION_ADD;
+ // new Contact
+ Contact *cnt = new Contact;
+ i += 9;
+ while ( 1 ) {
+ while ( i < len && (uc[i] == ' ' || uc[i] == '\n' || uc[i] == '\r') )
+ i++;
+ if ( i >= len-2 || (uc[i] == '/' && uc[i+1] == '>') )
+ break;
+ // we have another attribute read it.
+ int j = i;
+ while ( j < len && uc[j] != '=' )
+ j++;
+ char *attr = uc+i;
+ uc[j] = '\0';
+ //qDebug("attr=%s", attr.latin1() );
+ i = ++j; // skip =
+ while ( i < len && uc[i] != '"' )
+ i++;
+ j = ++i;
+ bool haveEnt = FALSE;
+ bool haveUtf = FALSE;
+ while ( j < len && uc[j] != '"' ) {
+ if ( uc[j] == '&' )
+ haveEnt = TRUE;
+ if ( ((unsigned char)uc[j]) > 0x7f )
+ haveUtf = TRUE;
+ j++;
+ }
+
+ if ( j == i ) {
+ // empty value
+ i = j + 1;
+ continue;
+ }
+
+ QString value = haveUtf ? QString::fromUtf8( uc+i, j-i )
+ : QString::fromLatin1( uc+i, j-i );
+ if ( haveEnt )
+ value = Qtopia::plainString( value );
+ i = j + 1;
+
+ int *find = dict[ attr ];
+ if ( !find ) {
+ cnt->setCustomField(attr, value);
+ continue;
+ }
+#if 1
+ switch( *find ) {
+ case Qtopia::AddressUid:
+ cnt->setUid( value.toInt() );
+ break;
+ case Qtopia::AddressCategory:
+ cnt->setCategories( Qtopia::Record::idsFromString( value ));
+ break;
+ case JOURNALACTION:
+ action = Contact::journal_action(value.toInt());
+ break;
+ case JOURNALROW:
+ journalKey = value.toInt();
+ break;
+
+ default:
+ cnt->insert( *find, value );
+ break;
+ }
+#endif
+ }
+
+ // sadly we can't delay adding of items from the journal to get
+ // the proper effect, but then, the journal should _never_ be
+ // that huge, and recovering from a crash is not necessarily
+ // a *fast* thing.
+ switch ( action ) {
+ case Contact::ACTION_ADD:
+ if ( journalFile ) {
+ int myrows = numRows();
+ setNumRows( myrows + 1 );
+ insertIntoTable( *cnt, myrows );
+ delete cnt;
+ }
+ else
+ list.append( cnt );
+ break;
+ case Contact::ACTION_REMOVE:
+ // yup, we don't use the entry to remove the object...
+ journalFreeRemove( journalKey );
+ delete cnt;
+ break;
+ case Contact::ACTION_REPLACE:
+ journalFreeReplace( *cnt, journalKey );
+ delete cnt;
+ break;
+ default:
+ break;
+ }
+ num++;
+ foundAction = false;
+ foundKey = false;
+// if ( num % 100 == 0 ) {
+// qDebug("loading file, num=%d, t=%d", num, t.elapsed() );
+// }
+ }
+ if ( list.count() > 0 ) {
+ internalAddEntries( list );
+ }
+// qDebug("done loading %d, t=%d", num, t.elapsed() );
+
+}
+
+void AbTable::realignTable( int row )
+{
+ QTableItem *ti1,
+ *ti2;
+ int totalRows = numRows();
+ for ( int curr = row; curr < totalRows - 1; curr++ ) {
+ // the same info from the todo list still applies, but I
+ // don't think it is _too_ bad.
+ ti1 = item( curr + 1, 0 );
+ ti2 = item( curr + 1, 1 );
+ takeItem( ti1 );
+ takeItem( ti2 );
+ setItem( curr, 0, ti1 );
+ setItem( curr, 1, ti2 );
+ }
+ setNumRows( totalRows - 1 );
+ resort();
+}
+
+void AbTable::insertIntoTable( const Contact &cnt, int row )
+{
+ QString strName,
+ strContact;
+
+ strName = findContactName( cnt );
+ strContact = findContactContact( cnt );
+
+ AbTableItem *ati;
+ ati = new AbTableItem( this, QTableItem::Never, strName, strContact);
+ contactList.insert( ati, cnt );
+ setItem( row, 0, ati );
+ ati = new AbTableItem( this, QTableItem::Never, strContact, strName);
+ setItem( row, 1, ati );
+
+ //### cannot do this; table only has two columns at this point
+ // setItem( row, 2, new AbPickItem( this ) );
+
+ // resort at some point?
+}
+
+void AbTable::internalAddEntries( QList<Contact> &list )
+{
+ setUpdatesEnabled( FALSE );
+ setNumRows( list.count() );
+ int row = 0;
+ Contact *it;
+ for ( it = list.first(); it; it = list.next() )
+ insertIntoTable( *it, row++ );
+ resort();
+ setUpdatesEnabled( TRUE );
+}
+
+
+void AbTable::journalFreeReplace( const Contact &cnt, int row )
+{
+ QString strName,
+ strContact;
+ AbTableItem *ati;
+
+ strName = findContactName( cnt );
+ strContact = findContactContact( cnt );
+ ati = static_cast<AbTableItem*>(item(row, 0));
+ contactList.remove( ati );
+ ati->setItem( strName, strContact );
+ contactList.insert( ati, cnt );
+
+ ati = static_cast<AbTableItem*>(item(row, 1));
+ ati->setItem( strContact, strName );
+}
+
+void AbTable::journalFreeRemove( int row )
+{
+ AbTableItem *ati;
+ ati = static_cast<AbTableItem*>(item(row, 0));
+ if ( !ati )
+ return;
+ contactList.remove( ati );
+ realignTable( row );
+}
+
+#if QT_VERSION <= 230
+#ifndef SINGLE_APP
+void QTable::paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ // Region of the rect we should draw
+ QRegion reg( QRect( cx, cy, cw, ch ) );
+ // Subtract the table from it
+ reg = reg.subtract( QRect( QPoint( 0, 0 ), tableSize() ) );
+ // And draw the rectangles (transformed as needed)
+ QArray<QRect> r = reg.rects();
+ for (unsigned int i=0; i<r.count(); i++)
+ p->fillRect( r[i], colorGroup().brush( QColorGroup::Base ) );
+}
+#endif
+#endif
+
+
+// int AbTable::rowHeight( int ) const
+// {
+// return 18;
+// }
+
+// int AbTable::rowPos( int row ) const
+// {
+// return 18*row;
+// }
+
+// int AbTable::rowAt( int pos ) const
+// {
+// return QMIN( pos/18, numRows()-1 );
+// }
+
+void AbTable::slotDoFind( const QString &findString, bool caseSensitive,
+ bool backwards, int category )
+{
+ if ( currFindRow < -1 )
+ currFindRow = currentRow() - 1;
+ clearSelection( TRUE );
+ int rows,
+ row;
+ AbTableItem *ati;
+ QRegExp r( findString );
+ r.setCaseSensitive( caseSensitive );
+ rows = numRows();
+ static bool wrapAround = true;
+
+ if ( !backwards ) {
+ for ( row = currFindRow + 1; row < rows; row++ ) {
+ ati = static_cast<AbTableItem*>( item(row, 0) );
+ if ( contactCompare( contactList[ati], r, category ) )
+ break;
+
+ }
+ } else {
+ for ( row = currFindRow - 1; row > -1; row-- ) {
+ ati = static_cast<AbTableItem*>( item(row, 0) );
+ if ( contactCompare( contactList[ati], r, category ) )
+ break;
+ }
+ }
+ if ( row >= rows || row < 0 ) {
+ if ( row < 0 )
+ currFindRow = rows;
+ else
+ currFindRow = -1;
+
+ if ( wrapAround )
+ emit signalWrapAround();
+ else
+ emit signalNotFound();
+
+ wrapAround = !wrapAround;
+ } else {
+ currFindRow = row;
+ QTableSelection foundSelection;
+ foundSelection.init( currFindRow, 0 );
+ foundSelection.expandTo( currFindRow, numCols() - 1 );
+ addSelection( foundSelection );
+ setCurrentCell( currFindRow, numCols() - 1 );
+ wrapAround = true;
+ }
+}
+
+static bool contactCompare( const Contact &cnt, const QRegExp &r, int category )
+{
+ bool returnMe;
+ QArray<int> cats;
+ cats = cnt.categories();
+
+ returnMe = false;
+ if ( (category == -1 && cats.count() == 0) || category == -2 )
+ returnMe = cnt.match( r );
+ else {
+ int i;
+ for ( i = 0; i < int(cats.count()); i++ ) {
+ if ( cats[i] == category ) {
+ returnMe = cnt.match( r );
+ break;
+ }
+ }
+ }
+ return returnMe;
+}
+
+void AbTable::fitColumns()
+{
+ int contentsWidth = visibleWidth();
+ int n = numCols();
+ int pw = n == 3 ? columnWidth(2) : 0;
+ setColumnWidth( 0, contentsWidth - contentsWidth / 2 );
+ setColumnWidth( 1, contentsWidth / 2 - pw );
+}
+
+void AbTable::show()
+{
+ fitColumns();
+ QTable::show();
+}
+
+void AbTable::setChoiceNames( const QStringList& list)
+{
+ choicenames = list;
+ if ( choicenames.isEmpty() ) {
+ // hide pick column
+ setNumCols( 2 );
+ } else {
+ // show pick column
+ setNumCols( 3 );
+ setColumnWidth( 2, fontMetrics().width(tr( "Pick" ))+8 );
+ horizontalHeader()->setLabel( 2, tr( "Pick" ));
+ }
+ fitColumns();
+}
+
+void AbTable::itemClicked(int,int col)
+{
+ if ( col == 2 ) {
+ return;
+ } else {
+ emit details();
+ }
+}
+
+QStringList AbTable::choiceNames() const
+{
+ return choicenames;
+}
+
+void AbTable::setChoiceSelection(int /*index*/, const QStringList& /*list*/)
+{
+ /* ######
+
+ QString selname = choicenames.at(index);
+ for (each row) {
+ Contact *c = contactForRow(row);
+ if ( list.contains(c->email) ) {
+ list.remove(c->email);
+ setText(row, 2, selname);
+ }
+ }
+ for (remaining list items) {
+ Contact *c = new contact(item);
+ setText(newrow, 2, selname);
+ }
+
+ */
+}
+
+QStringList AbTable::choiceSelection(int /*index*/) const
+{
+ QStringList r;
+ /* ######
+
+ QString selname = choicenames.at(index);
+ for (each row) {
+ Contact *c = contactForRow(row);
+ if ( text(row,2) == selname ) {
+ r.append(c->email);
+ }
+ }
+
+ */
+ return r;
+}
+
+void AbTable::setShowCategory( const QString &c )
+{
+ showCat = c;
+ updateVisible();
+}
+
+QString AbTable::showCategory() const
+{
+ return showCat;
+}
+
+
+QStringList AbTable::categories()
+{
+ mCat.load( categoryFileName() );
+ QStringList categoryList = mCat.labels( "Contacts" );
+ return categoryList;
+}
+
+void AbTable::updateVisible()
+{
+ int visible,
+ totalRows,
+ id,
+ totalCats,
+ it,
+ row;
+ bool hide;
+ AbTableItem *ati;
+ Contact *cnt;
+ visible = 0;
+
+ setPaintingEnabled( FALSE );
+
+ totalRows = numRows();
+ id = mCat.id( "Contacts", showCat );
+ QArray<int> cats;
+ for ( row = 0; row < totalRows; row++ ) {
+ ati = static_cast<AbTableItem*>( item(row, 0) );
+ cnt = &contactList[ati];
+ cats = cnt->categories();
+ hide = false;
+ if ( !showCat.isEmpty() ) {
+ if ( showCat == tr( "Unfiled" ) ) {
+ if ( cats.count() > 0 )
+ hide = true;
+ } else {
+ // do some comparing
+ if ( !hide ) {
+ hide = true;
+ totalCats = int(cats.count());
+ for ( it = 0; it < totalCats; it++ ) {
+ if ( cats[it] == id ) {
+ hide = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if ( hide ) {
+ if ( currentRow() == row )
+ setCurrentCell( -1, 0 );
+ if ( rowHeight(row) > 0 )
+ hideRow( row );
+ } else {
+ if ( rowHeight(row) == 0 ) {
+ showRow( row );
+ adjustRow( row );
+ }
+ visible++;
+ }
+ }
+ if ( !visible )
+ setCurrentCell( -1, 0 );
+
+ setPaintingEnabled( TRUE );
+}
+
+
+void AbTable::setPaintingEnabled( bool e )
+{
+ if ( e != enablePainting ) {
+ if ( !enablePainting ) {
+ enablePainting = true;
+ rowHeightChanged( 0 );
+ viewport()->update();
+ } else {
+ enablePainting = false;
+ }
+ }
+}
+
+void AbTable::rowHeightChanged( int row )
+{
+ if ( enablePainting )
+ QTable::rowHeightChanged( row );
+}
diff --git a/core/pim/addressbook/abtable.h b/core/pim/addressbook/abtable.h
new file mode 100644
index 0000000..9b96997
--- a/dev/null
+++ b/core/pim/addressbook/abtable.h
@@ -0,0 +1,140 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ABTABLE_H
+#define ABTABLE_H
+
+#include <qpe/categories.h>
+#include <qpe/contact.h>
+
+#include <qmap.h>
+#include <qtable.h>
+#include <qstringlist.h>
+#include <qcombobox.h>
+
+class AbTableItem : public QTableItem
+{
+public:
+ AbTableItem( QTable *t, EditType et, const QString &s,
+ const QString &secondSortKey);
+ QString entryKey() const;
+ void setEntryKey( const QString & k );
+ virtual int alignment() const;
+ virtual QString key() const;
+ void setItem( const QString &txt, const QString &secondKey );
+
+private:
+ QString sortKey;
+};
+
+class AbPickItem : public QTableItem
+{
+public:
+ AbPickItem( QTable *t );
+
+ QWidget *createEditor() const;
+ void setContentFromEditor( QWidget *w );
+
+private:
+ QGuardedPtr<QComboBox> cb;
+};
+
+class AbTable : public QTable
+{
+ Q_OBJECT
+
+public:
+ AbTable( const QValueList<int> *ordered, QWidget *parent, const char *name=0 );
+ ~AbTable();
+ // NEW
+ void addEntry( const Contact &newContact );
+ Contact currentEntry();
+ void replaceCurrentEntry( const Contact &newContact );
+
+ void init();
+
+ void deleteCurrentEntry();
+ void clear();
+ void clearFindRow() { currFindRow = -2; }
+ void loadFields();
+ void refresh();
+ bool save( const QString &fn );
+ void load( const QString &fn );
+
+ // addresspicker mode
+ void setChoiceNames( const QStringList& list);
+ QStringList choiceNames() const;
+ void setChoiceSelection(int index, const QStringList& list);
+ QStringList choiceSelection(int index) const;
+ void setShowCategory( const QString &c );
+ QString showCategory() const;
+ QStringList categories();
+
+ void show();
+ void setPaintingEnabled( bool e );
+
+public slots:
+ void slotDoFind( const QString &str, bool caseSensitive, bool backwards,
+ int category );
+signals:
+ void empty( bool );
+ void details();
+ void signalNotFound();
+ void signalWrapAround();
+
+protected:
+ virtual void keyPressEvent( QKeyEvent *e );
+
+// int rowHeight( int ) const;
+// int rowPos( int row ) const;
+// virtual int rowAt( int pos ) const;
+
+
+protected slots:
+ void moveTo( char );
+ virtual void columnClicked( int col );
+ void itemClicked(int,int col);
+ void rowHeightChanged( int row );
+
+private:
+ void loadFile( const QString &strFile, bool journalFile );
+ void fitColumns();
+ void resort();
+ void updateJournal( const Contact &contact, Contact::journal_action action,
+ int row = -1 );
+ void insertIntoTable( const Contact &contact, int row );
+ void internalAddEntries( QList<Contact> &list );
+ QString findContactName( const Contact &entry );
+ QString findContactContact( const Contact &entry );
+ void journalFreeReplace( const Contact &cnt, int row );
+ void journalFreeRemove( int row );
+ void realignTable( int );
+ void updateVisible();
+ int lastSortCol;
+ bool asc;
+ QMap<AbTableItem*, Contact> contactList;
+ const QValueList<int> *intFields;
+ int currFindRow;
+ QString showCat;
+ QStringList choicenames;
+ bool enablePainting;
+ Categories mCat;
+};
+#endif // ABTABLE_H
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
new file mode 100644
index 0000000..b694e4f
--- a/dev/null
+++ b/core/pim/addressbook/addressbook.cpp
@@ -0,0 +1,829 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "abeditor.h"
+#include "ablabel.h"
+#include "abtable.h"
+#include "addresssettings.h"
+#include "addressbook.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include <qpe/contact.h>
+#include <qpe/finddialog.h>
+#include <qpe/global.h>
+#include <qpe/resource.h>
+#include <qpe/ir.h>
+#include <qpe/qpemessagebox.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qaction.h>
+#include <qdialog.h>
+#include <qdir.h>
+#include <qfile.h>
+#include <qimage.h>
+#include <qlayout.h>
+#include <qpe/qpemenubar.h>
+#include <qmessagebox.h>
+#include <qpixmap.h>
+#include <qpopupmenu.h>
+#include <qpe/qpetoolbar.h>
+#include <qstringlist.h>
+#include <qtoolbutton.h>
+#include <qwhatsthis.h>
+
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <qdatetime.h>
+
+static QString addressbookOldXMLFilename()
+{
+ QString filename = QPEApplication::documentDir() + "addressbook.xml";
+ return filename;
+}
+
+static QString addressbookXMLFilename()
+{
+ QString filename = Global::applicationFileName("addressbook",
+ "addressbook.xml");
+ return filename;
+}
+
+static QString addressbookPersonalVCardName()
+{
+ QString filename = Global::applicationFileName("addressbook",
+ "businesscard.vcf");
+ return filename;
+}
+
+
+AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
+ WFlags f )
+ : QMainWindow( parent, name, f ),
+ abEditor(0),
+ bAbEditFirstTime(TRUE),
+ syncing(FALSE)
+{
+ initFields();
+
+ setCaption( tr("Contacts") );
+ setIcon( Resource::loadPixmap( "AddressBook" ) );
+
+ setToolBarsMovable( FALSE );
+
+ // Create Toolbars
+
+ QPEToolBar *bar = new QPEToolBar( this );
+ bar->setHorizontalStretchable( TRUE );
+
+ QPEMenuBar *mbList = new QPEMenuBar( bar );
+ mbList->setMargin( 0 );
+
+ QPopupMenu *edit = new QPopupMenu( this );
+ mbList->insertItem( tr( "Contact" ), edit );
+
+ listTools = new QPEToolBar( this, "list operations" );
+
+
+ QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null,
+ 0, this, 0 );
+ actionNew = a;
+ connect( a, SIGNAL( activated() ), this, SLOT( slotListNew() ) );
+ a->addTo( edit );
+ a->addTo( listTools );
+
+ a = new QAction( tr( "Edit" ), Resource::loadPixmap( "edit" ), QString::null,
+ 0, this, 0 );
+ actionEdit = a;
+ connect( a, SIGNAL( activated() ), this, SLOT( slotViewEdit() ) );
+ a->addTo( edit );
+ a->addTo( listTools );
+
+ a = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null,
+ 0, this, 0 );
+ actionTrash = a;
+ connect( a, SIGNAL( activated() ), this, SLOT( slotListDelete() ) );
+ a->addTo( edit );
+ a->addTo( listTools );
+
+ a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ),
+ QString::null, 0, this, 0 );
+ actionFind = a;
+ connect( a, SIGNAL(activated()), this, SLOT(slotFind()) );
+ a->addTo( edit );
+ a->addTo( listTools );
+
+
+ a = new QAction( tr( "Write Mail To" ), Resource::loadPixmap( "qtmail/reply" ),
+ QString::null, 0, this, 0 );
+ a->setEnabled( FALSE );
+ actionMail = a;
+ connect( a, SIGNAL( activated() ), this, SLOT( writeMail() ) );
+ a->addTo( edit );
+ a->addTo( listTools );
+
+
+
+ if ( Ir::supported() ) {
+ a = new QAction( tr ("Beam Entry" ), Resource::loadPixmap( "beam" ), QString::null,
+ 0, this, 0 );
+ actionBeam = a;
+ connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) );
+ a->addTo( edit );
+ a->addTo( listTools );
+ }
+
+ edit->insertSeparator();
+
+ a = new QAction( tr("My Personal Details"), QString::null, 0, 0, 0, TRUE );
+ actionPersonal = a;
+ connect( a, SIGNAL( activated() ), this, SLOT( slotPersonalView() ) );
+ a->addTo( edit );
+
+
+ a = new QAction( tr( "Arrange Edit Fields"), QString::null, 0, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
+ a->addTo( edit );
+
+ // Create Views
+
+ // This is safe to call without checking to see if it exists...
+ // not to mention it also does the necessary stuff for the
+ // journaling...
+ QString str = addressbookXMLFilename();
+ if ( str.isNull() ) {
+ QMessageBox::warning( this, tr("Out of Space"),
+ tr("There is not enough space to create\n"
+ "neccessary startup files.\n"
+ "\nFree up some space before\nentering data!")
+ );
+ }
+
+ abList = new AbTable( &orderedFields, this, "table" );
+ abList->setHScrollBarMode( QScrollView::AlwaysOff );
+ connect( abList, SIGNAL( empty( bool ) ),
+ this, SLOT( listIsEmpty( bool ) ) );
+ connect( abList, SIGNAL( details() ),
+ this, SLOT( slotListView() ) );
+ connect( abList, SIGNAL(currentChanged(int,int)),
+ this, SLOT(slotUpdateToolbar()) );
+
+ mView = 0;
+
+ abList->load( addressbookXMLFilename() );
+ if ( QFile::exists(addressbookOldXMLFilename()) ) {
+ abList->load( addressbookOldXMLFilename() );
+ QFile::remove(addressbookOldXMLFilename());
+ }
+
+ catMenu = new QPopupMenu( this );
+ catMenu->setCheckable( TRUE );
+ connect( catMenu, SIGNAL(activated(int)), this, SLOT(slotSetCategory(int)) );
+ populateCategories();
+
+ mbList->insertItem( tr("View"), catMenu );
+ setCentralWidget( abList );
+
+ // qDebug("adressbook contrsuction: t=%d", t.elapsed() );
+}
+
+void AddressbookWindow::setDocument( const QString &filename )
+{
+ if ( filename.find(".vcf") != int(filename.length()) - 4 ) return;
+
+ QValueList<Contact> cl = Contact::readVCard( filename );
+ for( QValueList<Contact>::Iterator it = cl.begin(); it != cl.end(); ++it ) {
+// QString msg = tr("You received a vCard for\n%1.\nDo You want to add it to your\naddressbook?")
+// .arg( (*it).fullName() );
+// if ( QMessageBox::information( this, tr("received contact"), msg, QMessageBox::Ok, QMessageBox::Cancel ) ==
+// QMessageBox::Ok ) {
+ abList->addEntry( *it );
+// }
+ }
+
+}
+
+void AddressbookWindow::resizeEvent( QResizeEvent *e )
+{
+ QMainWindow::resizeEvent( e );
+
+ if ( centralWidget() == abList )
+ showList();
+ else if ( centralWidget() == mView )
+ showView();
+}
+
+AddressbookWindow::~AddressbookWindow()
+{
+}
+
+void AddressbookWindow::slotUpdateToolbar()
+{
+ Contact ce = abList->currentEntry();
+ actionMail->setEnabled( !ce.defaultEmail().isEmpty() );
+}
+
+void AddressbookWindow::showList()
+{
+ if ( mView ) mView->hide();
+ setCentralWidget( abList );
+ abList->show();
+ // update our focues... (or use a stack widget!);
+ abList->setFocus();
+}
+
+void AddressbookWindow::showView()
+{
+ if ( abList->numRows() > 0 ) {
+ abList->hide();
+ setCentralWidget( abView() );
+ mView->show();
+ mView->setFocus();
+ }
+}
+
+void AddressbookWindow::slotListNew()
+{
+ Contact cnt;
+ if( !syncing ) {
+ if ( abEditor )
+ abEditor->setEntry( cnt );
+ abView()->init( cnt );
+ editEntry( NewEntry );
+ } else {
+ QMessageBox::warning(this, tr("Contacts"),
+ tr("Can not edit data, currently syncing"));
+ }
+}
+
+void AddressbookWindow::slotListView()
+{
+ abView()->init( abList->currentEntry() );
+ mView->sync();
+ showView();
+}
+
+void AddressbookWindow::slotListDelete()
+{
+ if(!syncing) {
+ Contact tmpEntry = abList->currentEntry();
+
+ // get a name, do the best we can...
+ QString strName = tmpEntry.fullName();
+ if ( strName.isEmpty() ) {
+ strName = tmpEntry.company();
+ if ( strName.isEmpty() )
+ strName = "No Name";
+ }
+
+
+ if ( QPEMessageBox::confirmDelete( this, tr( "Contacts" ),
+ strName ) ) {
+ abList->deleteCurrentEntry();
+ showList();
+ }
+ } else {
+ QMessageBox::warning( this, tr("Contacts"),
+ tr("Can not edit data, currently syncing") );
+ }
+}
+
+void AddressbookWindow::slotViewBack()
+{
+ showList();
+}
+
+void AddressbookWindow::slotViewEdit()
+{
+ if(!syncing) {
+ if (actionPersonal->isOn()) {
+ editPersonal();
+ } else {
+ if ( !bAbEditFirstTime )
+ abEditor->setEntry( abList->currentEntry() );
+ editEntry( EditEntry );
+ }
+ } else {
+ QMessageBox::warning( this, tr("Contacts"),
+ tr("Can not edit data, currently syncing") );
+ }
+}
+
+
+
+void AddressbookWindow::writeMail()
+{
+ Contact c = abList->currentEntry();
+ QString name = c.fileAs();
+ QString email = c.defaultEmail();
+ QCopEnvelope e("QPE/Application/qtmail", "writeMail(QString,QString)");
+ e << name << email;
+}
+
+
+
+
+static const char * beamfile = "/tmp/obex/contact.vcf";
+
+void AddressbookWindow::slotBeam()
+{
+ QString filename;
+ Contact c;
+ if ( actionPersonal->isOn() ) {
+ filename = addressbookPersonalVCardName();
+ if (!QFile::exists(filename))
+ return; // can't beam a non-existent file
+ c = Contact::readVCard( filename )[0];
+ } else {
+ unlink( beamfile ); // delete if exists
+ c = abList->currentEntry();
+ mkdir("/tmp/obex/", 0755);
+ Contact::writeVCard( beamfile, c );
+ filename = beamfile;
+ }
+ Ir *ir = new Ir( this );
+ connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
+ QString description = c.fullName();
+ ir->send( filename, description, "text/x-vCard" );
+}
+
+void AddressbookWindow::beamDone( Ir *ir )
+{
+ delete ir;
+ unlink( beamfile );
+}
+
+
+static void parseName( const QString& name, QString *first, QString *middle,
+ QString * last )
+{
+
+ int comma = name.find ( "," );
+ QString rest;
+ if ( comma > 0 ) {
+ *last = name.left( comma );
+ comma++;
+ while ( comma < int(name.length()) && name[comma] == ' ' )
+ comma++;
+ rest = name.mid( comma );
+ } else {
+ int space = name.findRev( ' ' );
+ *last = name.mid( space+1 );
+ rest = name.left( space );
+ }
+ int space = rest.find( ' ' );
+ if ( space <= 0 ) {
+ *first = rest;
+ } else {
+ *first = rest.left( space );
+ *middle = rest.mid( space+1 );
+ }
+
+}
+
+
+void AddressbookWindow::appMessage(const QCString &msg, const QByteArray &data)
+{
+ if (msg == "editPersonal()") {
+ editPersonal();
+ } else if (msg == "editPersonalAndClose()") {
+ editPersonal();
+ close();
+ } else if ( msg == "addContact(QString,QString)" ) {
+ QDataStream stream(data,IO_ReadOnly);
+ QString name, email;
+ stream >> name >> email;
+
+ Contact cnt;
+ QString fn, mn, ln;
+ parseName( name, &fn, &mn, &ln );
+ // qDebug( " %s - %s - %s", fn.latin1(), mn.latin1(), ln.latin1() );
+ cnt.setFirstName( fn );
+ cnt.setMiddleName( mn );
+ cnt.setLastName( ln );
+ cnt.setEmails( email );
+ cnt.setDefaultEmail( email );
+ cnt.setFileAs();
+
+ if ( bAbEditFirstTime ) {
+ abEditor = new AbEditor( cnt, &orderedFields, &slOrderedFields,
+ this, "editor" );
+ bAbEditFirstTime = FALSE;
+ } else {
+ abEditor->setEntry( cnt );
+ }
+ abView()->init( cnt );
+ editEntry( NewEntry );
+
+
+
+ }
+#if 0
+ else if (msg == "pickAddresses(QCString,QCString,QStringList,...)" ) {
+ QDataStream stream(data,IO_ReadOnly);
+ QCString ch,m;
+ QStringList types;
+ stream >> ch >> m >> types;
+ AddressPicker picker(abList,this,0,TRUE);
+ picker.showMaximized();
+ picker.setChoiceNames(types);
+ int i=0;
+ for (QStringList::ConstIterator it = types.begin(); it!=types.end(); ++it) {
+ QStringList sel;
+ stream >> sel;
+ picker.setSelection(i++,sel);
+ }
+ picker.showMaximized();
+ picker.exec();
+
+ // ###### note: contacts may have been added - save here!
+
+ setCentralWidget(abList);
+ QCopEnvelope e(ch,m);
+ i=0;
+ for (QStringList::ConstIterator it = types.begin(); it!=types.end(); ++it) {
+ QStringList sel = picker.selection(i++);
+ e << sel;
+ }
+ }
+#endif
+
+}
+
+void AddressbookWindow::editPersonal()
+{
+ QString filename = addressbookPersonalVCardName();
+ Contact me;
+ if (QFile::exists(filename))
+ me = Contact::readVCard( filename )[0];
+ if (bAbEditFirstTime) {
+ abEditor = new AbEditor( me, &orderedFields, &slOrderedFields,
+ this, "editor" );
+ // don't create a new editor every time
+ bAbEditFirstTime = FALSE;
+ } else
+ abEditor->setEntry( me );
+
+ abEditor->setCaption(tr("Edit My Personal Details"));
+ abEditor->showMaximized();
+
+ // fix the foxus...
+ abEditor->setNameFocus();
+ if ( abEditor->exec() ) {
+ setFocus();
+ Contact new_personal = abEditor->entry();
+ QString fname = addressbookPersonalVCardName();
+ Contact::writeVCard( fname, new_personal );
+ abView()->init(new_personal);
+ abView()->sync();
+ }
+ abEditor->setCaption( tr("Edit Address") );
+}
+
+void AddressbookWindow::slotPersonalView()
+{
+ if (!actionPersonal->isOn()) {
+ // we just turned it off
+ setCaption( tr("Contacts") );
+ actionNew->setEnabled(TRUE);
+ actionTrash->setEnabled(TRUE);
+ actionFind->setEnabled(TRUE);
+ slotUpdateToolbar(); // maybe some of the above could be moved there
+ showList();
+ return;
+ }
+
+ // XXX need to disable some QActions.
+ actionNew->setEnabled(FALSE);
+ actionTrash->setEnabled(FALSE);
+ actionFind->setEnabled(FALSE);
+ actionMail->setEnabled(FALSE);
+
+ setCaption( tr("Contacts - My Personal Details") );
+ QString filename = addressbookPersonalVCardName();
+ Contact me;
+ if (QFile::exists(filename))
+ me = Contact::readVCard( filename )[0];
+
+ abView()->init( me );
+ abView()->sync();
+ abList->hide();
+ setCentralWidget( abView() );
+ mView->show();
+ mView->setFocus();
+}
+
+void AddressbookWindow::editEntry( EntryMode entryMode )
+{
+ Contact entry;
+ if ( bAbEditFirstTime ) {
+ abEditor = new AbEditor( entry, &orderedFields, &slOrderedFields,
+ this, "editor" );
+ bAbEditFirstTime = FALSE;
+ if ( entryMode == EditEntry )
+ abEditor->setEntry( abList->currentEntry() );
+ }
+ // other things may chane the caption.
+ abEditor->setCaption( tr("Edit Address") );
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ abEditor->showMaximized();
+#endif
+ // fix the foxus...
+ abEditor->setNameFocus();
+ if ( abEditor->exec() ) {
+ setFocus();
+ if ( entryMode == NewEntry ) {
+ Contact insertEntry = abEditor->entry();
+ insertEntry.assignUid();
+ abList->addEntry( insertEntry );
+ } else {
+ Contact replaceEntry = abEditor->entry();
+ if ( !replaceEntry.isValidUid() )
+ replaceEntry.assignUid();
+ abList->replaceCurrentEntry( replaceEntry );
+ }
+ }
+ populateCategories();
+ showList();
+}
+
+void AddressbookWindow::listIsEmpty( bool empty )
+{
+ if ( !empty ) {
+ deleteButton->setEnabled( TRUE );
+ }
+}
+
+void AddressbookWindow::reload()
+{
+ syncing = FALSE;
+ abList->clear();
+ abList->load( addressbookXMLFilename() );
+}
+
+void AddressbookWindow::flush()
+{
+ syncing = TRUE;
+ abList->save( addressbookXMLFilename() );
+}
+
+
+void AddressbookWindow::closeEvent( QCloseEvent *e )
+{
+ if ( centralWidget() == mView ) {
+ if (actionPersonal->isOn()) {
+ // pretend we clicked it off
+ actionPersonal->setOn(FALSE);
+ slotPersonalView();
+ } else {
+ showList();
+ }
+ e->ignore();
+ return;
+ }
+
+ if(syncing) {
+ /* shouldn't we save, I hear you say? well its already been set
+ so that an edit can not occur during a sync, and we flushed
+ at the start of the sync, so there is no need to save
+ Saving however itself would cause problems. */
+ e->accept();
+ return;
+ }
+//################## shouldn't always save
+ if ( save() )
+ e->accept();
+ else
+ e->ignore();
+}
+
+/*
+ Returns TRUE if it is OK to exit
+ */
+
+bool AddressbookWindow::save()
+{
+ QString str = addressbookXMLFilename();
+ if ( str.isNull() ) {
+ if ( QMessageBox::critical( 0, tr("Out of space"),
+ tr("Unable to save information.\n"
+ "Free up some space\n"
+ "and try again.\n"
+ "\nQuit anyway?"),
+ QMessageBox::Yes|QMessageBox::Escape,
+ QMessageBox::No|QMessageBox::Default )
+ != QMessageBox::No )
+ return TRUE;
+ else
+ return FALSE;
+ } else {
+ if ( !abList->save( str ) ) {
+ if ( QMessageBox::critical( 0, tr( "Out of space" ),
+ tr("Unable to save information.\n"
+ "Free up some space\n"
+ "and try again.\n"
+ "\nQuit anyway?"),
+ QMessageBox::Yes|QMessageBox::Escape,
+ QMessageBox::No|QMessageBox::Default )
+ != QMessageBox::No )
+ return TRUE;
+ else
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+void AddressbookWindow::slotSettings()
+{
+ AddressSettings frmSettings( this );
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ frmSettings.showMaximized();
+#endif
+
+ if ( frmSettings.exec() ) {
+ allFields.clear();
+ orderedFields.clear();
+ slOrderedFields.clear();
+ initFields();
+ if ( abEditor )
+ abEditor->loadFields();
+ abList->refresh();
+ }
+}
+
+
+void AddressbookWindow::initFields()
+{
+ // we really don't need the things from the configuration, anymore
+ // only thing that is important are the important categories. So,
+ // Call the contact functions that correspond to these old functions...
+
+ QStringList xmlFields = Contact::fields();
+ QStringList visibleFields = Contact::trfields();
+ xmlFields.remove( "Title" );
+ visibleFields.remove( tr("Name Title") );
+ visibleFields.remove( tr("Notes") );
+
+ int i,
+ version;
+ Config cfg( "AddressBook" );
+ QString zn;
+
+ // ### Write a function to keep this from happening again...
+ QStringList::ConstIterator it;
+ for ( i = 0, it = xmlFields.begin(); it != xmlFields.end(); ++it, i++ ) {
+ allFields.append( i + 3 );
+ }
+
+ cfg.setGroup( "Version" );
+ version = cfg.readNumEntry( "version" );
+ i = 0;
+ if ( version >= ADDRESSVERSION ) {
+
+ cfg.setGroup( "ImportantCategory" );
+
+ zn = cfg.readEntry( "Category" + QString::number(i), QString::null );
+ while ( !zn.isNull() ) {
+ if ( zn.contains( tr("Work") ) || zn.contains( tr("Mb") ) ) {
+ slOrderedFields.clear();
+ break;
+ }
+ slOrderedFields.append( zn );
+ zn = cfg.readEntry( "Category" + QString::number(++i), QString::null );
+ }
+ } else {
+ QString str;
+ str = getenv("HOME");
+ str += "/Settings/AddressBook.conf";
+ QFile::remove( str );
+ }
+ if ( slOrderedFields.count() > 0 ) {
+ for( QStringList::ConstIterator it = slOrderedFields.begin();
+ it != slOrderedFields.end(); ++it ) {
+ QValueList<int>::ConstIterator itVl;
+ QStringList::ConstIterator itVis;
+ itVl = allFields.begin();
+ for ( itVis = visibleFields.begin();
+ itVis != visibleFields.end() && itVl != allFields.end();
+ ++itVis, ++itVl ) {
+ if ( *it == *itVis && itVl != allFields.end() ) {
+ orderedFields.append( *itVl );
+ }
+ }
+ }
+ } else {
+ QValueList<int>::ConstIterator it;
+ for ( it = allFields.begin(); it != allFields.end(); ++it )
+ orderedFields.append( *it );
+
+ slOrderedFields = visibleFields;
+ orderedFields.remove( Qtopia::AddressUid );
+ orderedFields.remove( Qtopia::Title );
+ orderedFields.remove( Qtopia::Groups );
+ orderedFields.remove( Qtopia::AddressCategory );
+ orderedFields.remove( Qtopia::FirstName );
+ orderedFields.remove( Qtopia::LastName );
+ orderedFields.remove( Qtopia::DefaultEmail );
+ orderedFields.remove( Qtopia::FileAs );
+ orderedFields.remove( Qtopia::Notes );
+ orderedFields.remove( Qtopia::Gender );
+ slOrderedFields.remove( tr("Name Title") );
+ slOrderedFields.remove( tr("First Name") );
+ slOrderedFields.remove( tr("Last Name") );
+ slOrderedFields.remove( tr("File As") );
+ slOrderedFields.remove( tr("Default Email") );
+ slOrderedFields.remove( tr("Notes") );
+ slOrderedFields.remove( tr("Gender") );
+
+ }
+}
+
+
+AbLabel *AddressbookWindow::abView()
+{
+ if ( !mView ) {
+ mView = new AbLabel( this, "viewer" );
+ mView->init( Contact() );
+ connect( mView, SIGNAL( okPressed() ), this, SLOT( slotListView() ) );
+ }
+ return mView;
+}
+
+void AddressbookWindow::slotFind()
+{
+ if ( centralWidget() == abView() )
+ showList();
+ FindDialog frmFind( "Contacts", this );
+ QObject::connect( &frmFind, SIGNAL(signalFindClicked(const QString &, bool, bool, int)), abList, SLOT(slotDoFind( const QString&,bool,bool,int)));
+ QObject::connect( abList, SIGNAL(signalNotFound()), &frmFind, SLOT(slotNotFound()) );
+ QObject::connect( abList, SIGNAL(signalWrapAround()), &frmFind, SLOT(slotWrapAround()) );
+ frmFind.exec();
+ if ( abList->numSelections() )
+ abList->clearSelection();
+ abList->clearFindRow();
+}
+
+void AddressbookWindow::slotSetCategory( int c )
+{
+ if ( c <= 0 )
+ return;
+ for ( unsigned int i = 1; i < catMenu->count(); i++ )
+ catMenu->setItemChecked( i, c == (int)i );
+ if ( c == 1 ) {
+ abList->setShowCategory( QString::null );
+ setCaption( tr("Contacts") + " - " + tr ( "All" ) );
+ } else if ( c == (int)catMenu->count() ) {
+ abList->setShowCategory( tr( "Unfiled" ) );
+ setCaption( tr("Contacts") + " - " + tr( "Unfiled" ) );
+ } else {
+ QString cat = abList->categories()[c - 2];
+ abList->setShowCategory( cat );
+ setCaption( tr("Contacts") + " - " + cat );
+ }
+}
+
+void AddressbookWindow::populateCategories()
+{
+ catMenu->clear();
+
+ int id,
+ rememberId;
+ id = 1;
+ catMenu->insertItem( tr( "All" ), id++ );
+ QStringList categories = abList->categories();
+ categories.append( tr( "Unfiled" ) );
+ for ( QStringList::Iterator it = categories.begin();
+ it != categories.end(); ++it ) {
+ catMenu->insertItem( *it, id );
+ if ( *it == abList->showCategory() )
+ rememberId = id;
+ ++id;
+ }
+ if ( abList->showCategory().isEmpty() )
+ slotSetCategory( 1 );
+ else
+ slotSetCategory( rememberId );
+}
diff --git a/core/pim/addressbook/addressbook.cw b/core/pim/addressbook/addressbook.cw
new file mode 100644
index 0000000..452df36
--- a/dev/null
+++ b/core/pim/addressbook/addressbook.cw
@@ -0,0 +1,26 @@
+<!DOCTYPE CW><CW>
+<customwidgets>
+ <customwidget>
+ <class>AbLineEdit</class>
+ <header location="local">ablineedit.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <pixmap>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </pixmap>
+ </customwidget>
+ <customwidget>
+ <class>AbMultiLineEdit</class>
+ <header location="local">abmultilineedit.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <pixmap>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </pixmap>
+ </customwidget>
+</customwidgets>
+</CW>
diff --git a/core/pim/addressbook/addressbook.h b/core/pim/addressbook/addressbook.h
new file mode 100644
index 0000000..9694465
--- a/dev/null
+++ b/core/pim/addressbook/addressbook.h
@@ -0,0 +1,99 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef Addressbook_H
+#define Addressbook_H
+
+#include <qmainwindow.h>
+
+class AbEditor;
+class AbLabel;
+class AbTable;
+class QPEToolBar;
+class QPopupMenu;
+class QToolButton;
+class QDialog;
+class Ir;
+class QAction;
+
+class AddressbookWindow: public QMainWindow
+{
+ Q_OBJECT
+public:
+ AddressbookWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~AddressbookWindow();
+
+protected:
+ void resizeEvent( QResizeEvent * e );
+ void showList();
+ void showView();
+ enum EntryMode { NewEntry=0, EditEntry };
+ void editPersonal();
+ void editEntry( EntryMode );
+ void closeEvent( QCloseEvent *e );
+ bool save();
+
+public slots:
+ void flush();
+ void reload();
+ void appMessage(const QCString &, const QByteArray &);
+ void setDocument( const QString & );
+
+private slots:
+ void slotListNew();
+ void slotListView();
+ void slotListDelete();
+ void slotViewBack();
+ void slotViewEdit();
+ void slotPersonalView();
+ void listIsEmpty( bool );
+ void slotSettings();
+ void writeMail();
+ void slotBeam();
+ void beamDone( Ir * );
+ void slotFind();
+ void slotSetCategory( int );
+ void slotUpdateToolbar();
+
+private:
+ void initFields(); // inititialize our fields...
+ AbLabel *abView();
+ void populateCategories();
+
+ QPopupMenu *catMenu;
+ QPEToolBar *listTools;
+ QToolButton *deleteButton;
+ QValueList<int> allFields,
+ orderedFields;
+ QStringList slOrderedFields;
+ enum Panes { paneList=0, paneView, paneEdit };
+ AbEditor *abEditor;
+ AbLabel *mView;
+ AbTable *abList;
+
+ QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam,
+ *actionPersonal, *actionMail;
+
+ bool bAbEditFirstTime;
+ int viewMargin;
+
+ bool syncing;
+};
+
+#endif
diff --git a/core/pim/addressbook/addressbook.pro b/core/pim/addressbook/addressbook.pro
new file mode 100644
index 0000000..8d3401d
--- a/dev/null
+++ b/core/pim/addressbook/addressbook.pro
@@ -0,0 +1,22 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = addressbook.h \
+ abeditor.h \
+ ablabel.h \
+ abtable.h \
+ addresssettings.h
+SOURCES = main.cpp \
+ addressbook.cpp \
+ abeditor.cpp \
+ ablabel.cpp \
+ abtable.cpp \
+ addresssettings.cpp
+INTERFACES = addresssettingsbase.ui
+
+TARGET = addressbook
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/addressbook.ts
diff --git a/core/pim/addressbook/addresspicker.cpp b/core/pim/addressbook/addresspicker.cpp
new file mode 100644
index 0000000..79c4d43
--- a/dev/null
+++ b/core/pim/addressbook/addresspicker.cpp
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "addresspicker.h"
+#include "abtable.h"
+
+#include <qlayout.h>
+
+/*!
+ \a tab is reparented for use in the picker. Take it back out if you want
+ to regain ownership.
+*/
+AddressPicker::AddressPicker(AbTable* tab, QWidget* parent, const char* name, bool modal) :
+ QDialog(parent,name,modal)
+{
+ QVBoxLayout* vb = new QVBoxLayout(this);
+ tab->reparent(this,QPoint(0,0));
+ table = tab;
+ vb->addWidget(table);
+}
+
+void AddressPicker::setChoiceNames(const QStringList& list)
+{
+ table->setChoiceNames(list);
+}
+
+void AddressPicker::setSelection(int index, const QStringList& list)
+{
+ table->setChoiceSelection(index,list);
+}
+
+QStringList AddressPicker::selection(int index) const
+{
+ return table->choiceSelection(index);
+}
diff --git a/core/pim/addressbook/addresspicker.h b/core/pim/addressbook/addresspicker.h
new file mode 100644
index 0000000..8a57479
--- a/dev/null
+++ b/core/pim/addressbook/addresspicker.h
@@ -0,0 +1,39 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef AddressPicker_H
+#define AddressPicker_H
+
+#include <qdialog.h>
+
+class AbTable;
+
+class AddressPicker : public QDialog {
+public:
+ AddressPicker(AbTable* table, QWidget* parent, const char* name=0, bool modal=FALSE);
+
+ void setChoiceNames(const QStringList&);
+ void setSelection(int index, const QStringList&);
+ QStringList selection(int index) const;
+
+private:
+ AbTable* table;
+};
+
+#endif
diff --git a/core/pim/addressbook/addresssettings.cpp b/core/pim/addressbook/addresssettings.cpp
new file mode 100644
index 0000000..e7c2210
--- a/dev/null
+++ b/core/pim/addressbook/addresssettings.cpp
@@ -0,0 +1,136 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "addresssettings.h"
+
+#include <qpe/config.h>
+#include <qpe/contact.h>
+
+#include <qfile.h>
+#include <qlistbox.h>
+
+#include <stdlib.h>
+
+AddressSettings::AddressSettings( QWidget *parent, const char *name )
+ : AddressSettingsBase( parent, name, TRUE )
+{
+ init();
+}
+
+AddressSettings::~AddressSettings()
+{
+}
+
+void AddressSettings::init()
+{
+ QStringList slFields = Contact::trfields();
+ // Make this match what is in initFields
+ slFields.remove( tr("Name Title") );
+ slFields.remove( tr("First Name") );
+ slFields.remove( tr("Last Name") );
+ slFields.remove( tr("File As") );
+ slFields.remove( tr("Default Email") );
+ slFields.remove( tr("Notes") );
+ slFields.remove( tr("Gender") );
+
+
+ for( QStringList::Iterator it = slFields.begin();
+ it != slFields.end(); ++it ) {
+ fieldListBox->insertItem( *it );
+ }
+
+ Config cfg( "AddressBook" );
+
+ cfg.setGroup( "Version" );
+ int version;
+ version = cfg.readNumEntry( "version" );
+ if ( version >= ADDRESSVERSION ) {
+ int i = 0;
+ int p = 0;
+ cfg.setGroup( "ImportantCategory" );
+ QString zn = cfg.readEntry( "Category" + QString::number(i),
+ QString::null );
+ while ( !zn.isNull() ) {
+ for ( int m = i; m < (int)fieldListBox->count(); m++ ) {
+ if ( fieldListBox->text( m ) == zn ) {
+ if ( m != p ) {
+ fieldListBox->removeItem( m );
+ fieldListBox->insertItem( zn, p );
+ }
+ p++;
+ break;
+ }
+ }
+ zn = cfg.readEntry( "Category" + QString::number(++i),
+ QString::null );
+ }
+
+ fieldListBox->setCurrentItem( 0 );
+ } else {
+ QString str;
+ str = getenv("HOME");
+
+ str += "/Settings/AddressBook.conf";
+ QFile::remove( str );
+ }
+}
+
+void AddressSettings::itemUp()
+{
+ int i = fieldListBox->currentItem();
+ if ( i > 0 ) {
+ QString item = fieldListBox->currentText();
+ fieldListBox->removeItem( i );
+ fieldListBox->insertItem( item, i-1 );
+ fieldListBox->setCurrentItem( i-1 );
+ }
+}
+
+void AddressSettings::itemDown()
+{
+ int i = fieldListBox->currentItem();
+ if ( i < (int)fieldListBox->count() - 1 ) {
+ QString item = fieldListBox->currentText();
+ fieldListBox->removeItem( i );
+ fieldListBox->insertItem( item, i+1 );
+ fieldListBox->setCurrentItem( i+1 );
+ }
+}
+
+void AddressSettings::accept()
+{
+ save();
+ QDialog::accept();
+}
+
+
+void AddressSettings::save()
+{
+ Config cfg( "AddressBook" );
+ cfg.setGroup( "Version" );
+ // *** To change the version change it here...
+ cfg.writeEntry( "version", QString::number(ADDRESSVERSION) );
+ cfg.setGroup( "ImportantCategory" );
+
+ for ( int i = 0; i < (int)fieldListBox->count(); i++ ) {
+ cfg.writeEntry( "Category"+QString::number(i), fieldListBox->text(i) );
+ }
+}
diff --git a/core/pim/addressbook/addresssettings.h b/core/pim/addressbook/addresssettings.h
new file mode 100644
index 0000000..0fdfa77
--- a/dev/null
+++ b/core/pim/addressbook/addresssettings.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef _ADDRESSSETTINGS_H_
+#define _ADDRESSSETTINGS_H_
+
+#include <qlist.h>
+#include <qstringlist.h>
+#include "addresssettingsbase.h"
+
+const int ADDRESSVERSION = 3;
+
+class AddressSettings : public AddressSettingsBase
+{
+ Q_OBJECT
+public:
+ AddressSettings( QWidget *parent = 0, const char *name = 0 );
+ ~AddressSettings();
+
+protected:
+ void accept();
+ virtual void itemUp();
+ virtual void itemDown();
+
+private:
+ void init();
+ void save();
+};
+
+#endif // _ADDRESSSETTINGS_H_
diff --git a/core/pim/addressbook/addresssettingsbase.ui b/core/pim/addressbook/addresssettingsbase.ui
new file mode 100644
index 0000000..bd3b85b
--- a/dev/null
+++ b/core/pim/addressbook/addresssettingsbase.ui
@@ -0,0 +1,170 @@
+<!DOCTYPE UI><UI>
+<class>AddressSettingsBase</class>
+<comment>/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+**********************************************************************/</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>AddressSettingsBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>244</width>
+ <height>207</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Arrange Edit Fields</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>6</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="1" column="0" rowspan="3" colspan="1" >
+ <class>QListBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>fieldListBox</cstring>
+ </property>
+ </widget>
+ <widget row="0" column="0" rowspan="1" colspan="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblExplain</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>MShape</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>MShadow</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Select the field order:</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignTop|AlignLeft</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>upButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Up</string>
+ </property>
+ <property stdset="1">
+ <name>autoRepeat</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>downButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Down</string>
+ </property>
+ <property stdset="1">
+ <name>autoRepeat</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer row="3" column="1" >
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>upButton</sender>
+ <signal>clicked()</signal>
+ <receiver>AddressSettingsBase</receiver>
+ <slot>itemUp()</slot>
+ </connection>
+ <connection>
+ <sender>downButton</sender>
+ <signal>clicked()</signal>
+ <receiver>AddressSettingsBase</receiver>
+ <slot>itemDown()</slot>
+ </connection>
+ <slot access="protected">itemUp()</slot>
+ <slot access="protected">itemDown()</slot>
+</connections>
+</UI>
diff --git a/core/pim/addressbook/main.cpp b/core/pim/addressbook/main.cpp
new file mode 100644
index 0000000..2ea1819
--- a/dev/null
+++ b/core/pim/addressbook/main.cpp
@@ -0,0 +1,41 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "addressbook.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qstring.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ AddressbookWindow mw;
+ QObject::connect( &a, SIGNAL( flush() ), &mw, SLOT( flush() ) );
+ QObject::connect( &a, SIGNAL( reload() ), &mw, SLOT( reload() ) );
+ QObject::connect( &a, SIGNAL( appMessage(const QCString &, const QByteArray &) ),
+ &mw, SLOT( appMessage(const QCString &, const QByteArray &) ) );
+
+ mw.setCaption( AddressbookWindow::tr("Contacts") );
+ a.showMainDocumentWidget(&mw);
+
+ return a.exec();
+}
diff --git a/core/pim/addressbook/qpe-addressbook.control b/core/pim/addressbook/qpe-addressbook.control
new file mode 100644
index 0000000..cca98f3
--- a/dev/null
+++ b/core/pim/addressbook/qpe-addressbook.control
@@ -0,0 +1,9 @@
+Files: bin/addressbook apps/Applications/addressbook.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Contacts
+ A simple addressbook for the Qtopia environment.
diff --git a/core/pim/datebook/.cvsignore b/core/pim/datebook/.cvsignore
new file mode 100644
index 0000000..4ba477d
--- a/dev/null
+++ b/core/pim/datebook/.cvsignore
@@ -0,0 +1,12 @@
+moc_*
+Makefile
+dateentry.h
+datebookdayheader.h
+dateentry.cpp
+datebookdayheader.cpp
+datebookweekheader.cpp
+datebookweekheader.h
+datebooksettingsbase.h
+datebooksettingsbase.cpp
+repeatentrybase.cpp
+repeatentrybase.h
diff --git a/core/pim/datebook/Makefile.in b/core/pim/datebook/Makefile.in
new file mode 100644
index 0000000..bdc69dc
--- a/dev/null
+++ b/core/pim/datebook/Makefile.in
@@ -0,0 +1,385 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = datebook
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = datebookday.h \
+ datebook.h \
+ dateentryimpl.h \
+ datebookdayheaderimpl.h \
+ datebooksettings.h \
+ datebookweek.h \
+ datebookweekheaderimpl.h \
+ repeatentry.h
+SOURCES = main.cpp \
+ datebookday.cpp \
+ datebook.cpp \
+ dateentryimpl.cpp \
+ datebookdayheaderimpl.cpp \
+ datebooksettings.cpp \
+ datebookweek.cpp \
+ datebookweekheaderimpl.cpp \
+ repeatentry.cpp
+OBJECTS = main.o \
+ datebookday.o \
+ datebook.o \
+ dateentryimpl.o \
+ datebookdayheaderimpl.o \
+ datebooksettings.o \
+ datebookweek.o \
+ datebookweekheaderimpl.o \
+ repeatentry.o \
+ dateentry.o \
+ datebookdayheader.o \
+ datebooksettingsbase.o \
+ datebookweekheader.o \
+ repeatentrybase.o
+INTERFACES = dateentry.ui \
+ datebookdayheader.ui \
+ datebooksettingsbase.ui \
+ datebookweekheader.ui \
+ repeatentrybase.ui
+UICDECLS = dateentry.h \
+ datebookdayheader.h \
+ datebooksettingsbase.h \
+ datebookweekheader.h \
+ repeatentrybase.h
+UICIMPLS = dateentry.cpp \
+ datebookdayheader.cpp \
+ datebooksettingsbase.cpp \
+ datebookweekheader.cpp \
+ repeatentrybase.cpp
+SRCMOC = moc_datebookday.cpp \
+ moc_datebook.cpp \
+ moc_dateentryimpl.cpp \
+ moc_datebookdayheaderimpl.cpp \
+ moc_datebookweek.cpp \
+ moc_datebookweekheaderimpl.cpp \
+ moc_repeatentry.cpp \
+ moc_dateentry.cpp \
+ moc_datebookdayheader.cpp \
+ moc_datebooksettingsbase.cpp \
+ moc_datebookweekheader.cpp \
+ moc_repeatentrybase.cpp
+OBJMOC = moc_datebookday.o \
+ moc_datebook.o \
+ moc_dateentryimpl.o \
+ moc_datebookdayheaderimpl.o \
+ moc_datebookweek.o \
+ moc_datebookweekheaderimpl.o \
+ moc_repeatentry.o \
+ moc_dateentry.o \
+ moc_datebookdayheader.o \
+ moc_datebooksettingsbase.o \
+ moc_datebookweekheader.o \
+ moc_repeatentrybase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake datebook.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ datebook.h \
+ $(QPEDIR)/include/qpe/datebookdb.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+datebookday.o: datebookday.cpp \
+ datebookday.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ datebookdayheaderimpl.h \
+ datebookdayheader.h \
+ $(QPEDIR)/include/qpe/datebookdb.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/timestring.h \
+ $(QPEDIR)/include/qpe/qpedebug.h
+
+datebook.o: datebook.cpp \
+ datebook.h \
+ $(QPEDIR)/include/qpe/datebookdb.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ datebookday.h \
+ datebooksettings.h \
+ datebooksettingsbase.h \
+ datebookweek.h \
+ dateentryimpl.h \
+ dateentry.h \
+ $(QPEDIR)/include/qpe/datebookmonth.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpedebug.h \
+ $(QPEDIR)/include/qpe/finddialog.h \
+ $(QPEDIR)/include/qpe/ir.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpemessagebox.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ $(QPEDIR)/include/qpe/timestring.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/tzselect.h \
+ $(QPEDIR)/include/qpe/xmlreader.h
+
+dateentryimpl.o: dateentryimpl.cpp \
+ dateentryimpl.h \
+ dateentry.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ repeatentry.h \
+ repeatentrybase.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/categoryselect.h \
+ $(QPEDIR)/include/qpe/datebookmonth.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/timeconversion.h \
+ $(QPEDIR)/include/qpe/timestring.h \
+ $(QPEDIR)/include/qpe/tzselect.h
+
+datebookdayheaderimpl.o: datebookdayheaderimpl.cpp \
+ datebookdayheaderimpl.h \
+ datebookdayheader.h \
+ $(QPEDIR)/include/qpe/datebookmonth.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/timestring.h
+
+datebooksettings.o: datebooksettings.cpp \
+ datebooksettings.h \
+ datebooksettingsbase.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+datebookweek.o: datebookweek.cpp \
+ datebookweek.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ datebookweekheaderimpl.h \
+ datebookweekheader.h \
+ $(QPEDIR)/include/qpe/calendar.h \
+ $(QPEDIR)/include/qpe/datebookdb.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/timestring.h
+
+datebookweekheaderimpl.o: datebookweekheaderimpl.cpp \
+ datebookweekheaderimpl.h \
+ datebookweekheader.h
+
+repeatentry.o: repeatentry.cpp \
+ repeatentry.h \
+ repeatentrybase.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/datebookmonth.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/timestring.h
+
+dateentry.h: dateentry.ui
+ $(UIC) dateentry.ui -o $(INTERFACE_DECL_PATH)/dateentry.h
+
+dateentry.cpp: dateentry.ui
+ $(UIC) dateentry.ui -i dateentry.h -o dateentry.cpp
+
+datebookdayheader.h: datebookdayheader.ui
+ $(UIC) datebookdayheader.ui -o $(INTERFACE_DECL_PATH)/datebookdayheader.h
+
+datebookdayheader.cpp: datebookdayheader.ui
+ $(UIC) datebookdayheader.ui -i datebookdayheader.h -o datebookdayheader.cpp
+
+datebooksettingsbase.h: datebooksettingsbase.ui
+ $(UIC) datebooksettingsbase.ui -o $(INTERFACE_DECL_PATH)/datebooksettingsbase.h
+
+datebooksettingsbase.cpp: datebooksettingsbase.ui
+ $(UIC) datebooksettingsbase.ui -i datebooksettingsbase.h -o datebooksettingsbase.cpp
+
+datebookweekheader.h: datebookweekheader.ui
+ $(UIC) datebookweekheader.ui -o $(INTERFACE_DECL_PATH)/datebookweekheader.h
+
+datebookweekheader.cpp: datebookweekheader.ui
+ $(UIC) datebookweekheader.ui -i datebookweekheader.h -o datebookweekheader.cpp
+
+repeatentrybase.h: repeatentrybase.ui
+ $(UIC) repeatentrybase.ui -o $(INTERFACE_DECL_PATH)/repeatentrybase.h
+
+repeatentrybase.cpp: repeatentrybase.ui
+ $(UIC) repeatentrybase.ui -i repeatentrybase.h -o repeatentrybase.cpp
+
+dateentry.o: dateentry.cpp
+
+datebookdayheader.o: datebookdayheader.cpp
+
+datebooksettingsbase.o: datebooksettingsbase.cpp
+
+datebookweekheader.o: datebookweekheader.cpp
+
+repeatentrybase.o: repeatentrybase.cpp
+
+moc_datebookday.o: moc_datebookday.cpp \
+ datebookday.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h
+
+moc_datebook.o: moc_datebook.cpp \
+ datebook.h \
+ $(QPEDIR)/include/qpe/datebookdb.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h
+
+moc_dateentryimpl.o: moc_dateentryimpl.cpp \
+ dateentryimpl.h \
+ dateentry.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h
+
+moc_datebookdayheaderimpl.o: moc_datebookdayheaderimpl.cpp \
+ datebookdayheaderimpl.h \
+ datebookdayheader.h
+
+moc_datebookweek.o: moc_datebookweek.cpp \
+ datebookweek.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h
+
+moc_datebookweekheaderimpl.o: moc_datebookweekheaderimpl.cpp \
+ datebookweekheaderimpl.h \
+ datebookweekheader.h
+
+moc_repeatentry.o: moc_repeatentry.cpp \
+ repeatentry.h \
+ repeatentrybase.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h
+
+moc_dateentry.o: moc_dateentry.cpp \
+ dateentry.h
+
+moc_datebookdayheader.o: moc_datebookdayheader.cpp \
+ datebookdayheader.h
+
+moc_datebooksettingsbase.o: moc_datebooksettingsbase.cpp \
+ datebooksettingsbase.h
+
+moc_datebookweekheader.o: moc_datebookweekheader.cpp \
+ datebookweekheader.h
+
+moc_repeatentrybase.o: moc_repeatentrybase.cpp \
+ repeatentrybase.h
+
+moc_datebookday.cpp: datebookday.h
+ $(MOC) datebookday.h -o moc_datebookday.cpp
+
+moc_datebook.cpp: datebook.h
+ $(MOC) datebook.h -o moc_datebook.cpp
+
+moc_dateentryimpl.cpp: dateentryimpl.h
+ $(MOC) dateentryimpl.h -o moc_dateentryimpl.cpp
+
+moc_datebookdayheaderimpl.cpp: datebookdayheaderimpl.h
+ $(MOC) datebookdayheaderimpl.h -o moc_datebookdayheaderimpl.cpp
+
+moc_datebookweek.cpp: datebookweek.h
+ $(MOC) datebookweek.h -o moc_datebookweek.cpp
+
+moc_datebookweekheaderimpl.cpp: datebookweekheaderimpl.h
+ $(MOC) datebookweekheaderimpl.h -o moc_datebookweekheaderimpl.cpp
+
+moc_repeatentry.cpp: repeatentry.h
+ $(MOC) repeatentry.h -o moc_repeatentry.cpp
+
+moc_dateentry.cpp: dateentry.h
+ $(MOC) dateentry.h -o moc_dateentry.cpp
+
+moc_datebookdayheader.cpp: datebookdayheader.h
+ $(MOC) datebookdayheader.h -o moc_datebookdayheader.cpp
+
+moc_datebooksettingsbase.cpp: datebooksettingsbase.h
+ $(MOC) datebooksettingsbase.h -o moc_datebooksettingsbase.cpp
+
+moc_datebookweekheader.cpp: datebookweekheader.h
+ $(MOC) datebookweekheader.h -o moc_datebookweekheader.cpp
+
+moc_repeatentrybase.cpp: repeatentrybase.h
+ $(MOC) repeatentrybase.h -o moc_repeatentrybase.cpp
+
+
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
new file mode 100644
index 0000000..6ec6cc2
--- a/dev/null
+++ b/core/pim/datebook/datebook.cpp
@@ -0,0 +1,854 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+**********************************************************************/
+
+#include "datebook.h"
+#include "datebookday.h"
+#include "datebooksettings.h"
+#include "datebookweek.h"
+#include "dateentryimpl.h"
+
+#include <qpe/datebookmonth.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include <qpe/qpedebug.h>
+#include <qpe/event.h>
+#include <qpe/finddialog.h>
+#include <qpe/ir.h>
+#include <qpe/qpemenubar.h>
+#include <qpe/qpemessagebox.h>
+#include <qpe/resource.h>
+#include <qpe/sound.h>
+#include <qpe/timestring.h>
+#include <qpe/qpetoolbar.h>
+#include <qpe/tzselect.h>
+#include <qpe/xmlreader.h>
+
+#include <qaction.h>
+#include <qcopchannel_qws.h>
+#include <qdatetime.h>
+#include <qdialog.h>
+#include <qfile.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qmessagebox.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qtextcodec.h>
+#include <qtextstream.h>
+#include <qtl.h>
+#include <qwidgetstack.h>
+#include <qwindowsystem_qws.h>
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <stdlib.h>
+
+#define DAY 1
+#define WEEK 2
+#define MONTH 3
+
+
+DateBook::DateBook( QWidget *parent, const char *, WFlags f )
+ : QMainWindow( parent, "datebook", f ),
+ aPreset( FALSE ),
+ presetTime( -1 ),
+ startTime( 8 ), // an acceptable default
+ syncing(FALSE),
+ inSearch(FALSE)
+{
+ QTime t;
+ t.start();
+ db = new DateBookDB;
+ qDebug("loading db t=%d", t.elapsed() );
+ loadSettings();
+ setCaption( tr("Calendar") );
+ setIcon( Resource::loadPixmap( "datebook_icon" ) );
+
+ setToolBarsMovable( FALSE );
+
+ QPEToolBar *bar = new QPEToolBar( this );
+ bar->setHorizontalStretchable( TRUE );
+
+ QPEMenuBar *mb = new QPEMenuBar( bar );
+ mb->setMargin( 0 );
+
+ QPEToolBar *sub_bar = new QPEToolBar(this);
+
+ QPopupMenu *view = new QPopupMenu( this );
+ QPopupMenu *settings = new QPopupMenu( this );
+
+ mb->insertItem( tr( "View" ), view );
+ mb->insertItem( tr( "Settings" ), settings );
+
+ QActionGroup *g = new QActionGroup( this );
+ g->setExclusive( TRUE );
+
+ QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
+ a->addTo( sub_bar );
+
+ a = new QAction( tr( "Day" ), Resource::loadPixmap( "day" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( viewDay() ) );
+ a->addTo( sub_bar );
+ a->addTo( view );
+ a->setToggleAction( TRUE );
+ a->setOn( TRUE );
+ dayAction = a;
+ a = new QAction( tr( "Week" ), Resource::loadPixmap( "week" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( viewWeek() ) );
+ a->addTo( sub_bar );
+ a->addTo( view );
+ a->setToggleAction( TRUE );
+ weekAction = a;
+ a = new QAction( tr( "Month" ), Resource::loadPixmap( "month" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( viewMonth() ) );
+ a->addTo( sub_bar );
+ a->addTo( view );
+ a->setToggleAction( TRUE );
+ monthAction = a;
+
+ a = new QAction( tr( "Find" ), Resource::loadPixmap( "mag" ), QString::null, 0, g, 0 );
+ connect( a, SIGNAL(activated()), this, SLOT(slotFind()) );
+ a->addTo( sub_bar );
+
+ a = new QAction( tr( "Today" ), QString::null, 0, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( slotToday() ) );
+ a->addTo( view );
+
+ a = new QAction( tr( "Alarm and Start Time..." ), QString::null, 0, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( slotSettings() ) );
+ a->addTo( settings );
+
+ views = new QWidgetStack( this );
+ setCentralWidget( views );
+
+ dayView = 0;
+ weekView = 0;
+ monthView = 0;
+
+ viewDay();
+ connect( qApp, SIGNAL(clockChanged(bool)),
+ this, SLOT(changeClock(bool)) );
+ connect( qApp, SIGNAL(weekChanged(bool)),
+ this, SLOT(changeWeek(bool)) );
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)),
+ this, SLOT(appMessage(const QCString&, const QByteArray&)) );
+#endif
+
+ // listen on QPE/System
+#if defined(Q_WS_QWS)
+#if !defined(QT_NO_COP)
+ QCopChannel *channel = new QCopChannel( "QPE/System", this );
+ connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(receive(const QCString&, const QByteArray&)) );
+#endif
+#endif
+
+ qDebug("done t=%d", t.elapsed() );
+
+}
+
+void DateBook::receive( const QCString &msg, const QByteArray &data )
+{
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "timeChange(QString)" ) {
+ // update active view!
+ if ( dayAction->isOn() )
+ viewDay();
+ else if ( weekAction->isOn() )
+ viewWeek();
+ else if ( monthAction->isOn() )
+ viewMonth();
+ }
+}
+
+DateBook::~DateBook()
+{
+}
+
+void DateBook::slotSettings()
+{
+ DateBookSettings frmSettings( ampm, this );
+ frmSettings.setStartTime( startTime );
+ frmSettings.setAlarmPreset( aPreset, presetTime );
+#if defined (Q_WS_QWS) || defined(_WS_QWS_)
+ frmSettings.showMaximized();
+#endif
+
+ if ( frmSettings.exec() ) {
+ aPreset = frmSettings.alarmPreset();
+ presetTime = frmSettings.presetTime();
+ startTime = frmSettings.startTime();
+ if ( dayView )
+ dayView->setStartViewTime( startTime );
+ if ( weekView )
+ weekView->setStartViewTime( startTime );
+ saveSettings();
+
+ // make the change obvious
+ if ( views->visibleWidget() ) {
+ if ( views->visibleWidget() == dayView )
+ dayView->redraw();
+ else if ( views->visibleWidget() == weekView )
+ weekView->redraw();
+ }
+ }
+}
+
+void DateBook::fileNew()
+{
+ slotNewEventFromKey("");
+}
+
+QString DateBook::checkEvent(const Event &e)
+{
+ /* check if overlaps with itself */
+ bool checkFailed = FALSE;
+
+ /* check the next 12 repeats. should catch most problems */
+ QDate current_date = e.start().date();
+ Event previous = e;
+ for(int i = 0; i < 12; i++)
+ {
+ QDateTime next;
+ if (!nextOccurance(previous, current_date.addDays(1), next)) {
+ break; // no more repeats
+ }
+ if(next < previous.end()) {
+ checkFailed = TRUE;
+ break;
+ }
+ current_date = next.date();
+ }
+
+ if(checkFailed)
+ return tr("Event duration is potentially longer\n"
+ "than interval between repeats.");
+
+ return QString::null;
+}
+
+QDate DateBook::currentDate()
+{
+ QDate d = QDate::currentDate();
+
+ if ( dayView && views->visibleWidget() == dayView ) {
+ d = dayView->date();
+ } else if ( weekView && views->visibleWidget() == weekView ) {
+ d = weekView->date();
+ } else if ( monthView && views->visibleWidget() == monthView ) {
+ d = monthView->selectedDate();
+ }
+
+ return d;
+}
+
+void DateBook::viewDay()
+{
+ initDay();
+ dayAction->setOn( TRUE );
+ QDate d = currentDate();
+ dayView->setDate( d );
+ views->raiseWidget( dayView );
+ dayView->redraw();
+}
+
+void DateBook::viewWeek()
+{
+ initWeek();
+ weekAction->setOn( TRUE );
+ QDate d = currentDate();
+ weekView->setDate( d );
+ views->raiseWidget( weekView );
+ weekView->redraw();
+}
+
+void DateBook::viewMonth()
+{
+ initMonth();
+ monthAction->setOn( TRUE );
+ QDate d = currentDate();
+ monthView->setDate( d.year(), d.month(), d.day() );
+ views->raiseWidget( monthView );
+ monthView->redraw();
+}
+
+void DateBook::editEvent( const Event &e )
+{
+ if (syncing) {
+ QMessageBox::warning( this, tr("Calendar"),
+ tr( "Can not edit data, currently syncing") );
+ return;
+ }
+
+ // workaround added for text input.
+ QDialog editDlg( this, 0, TRUE );
+ DateEntry *entry;
+ editDlg.setCaption( tr("Edit Event") );
+ QVBoxLayout *vb = new QVBoxLayout( &editDlg );
+ QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
+ sv->setResizePolicy( QScrollView::AutoOneFit );
+ // KLUDGE!!!
+ sv->setHScrollBarMode( QScrollView::AlwaysOff );
+ vb->addWidget( sv );
+ entry = new DateEntry( onMonday, e, ampm, &editDlg, "editor" );
+ entry->timezone->setEnabled( FALSE );
+ sv->addChild( entry );
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ editDlg.showMaximized();
+#endif
+ while (editDlg.exec() ) {
+ Event newEv = entry->event();
+ QString error = checkEvent(newEv);
+ if (!error.isNull()) {
+ if (QMessageBox::warning(this, "error box",
+ error, "Fix it", "Continue", 0, 0, 1) == 0)
+ continue;
+ }
+ db->editEvent(e, newEv);
+ emit newEvent();
+ break;
+ }
+}
+
+void DateBook::removeEvent( const Event &e )
+{
+ if (syncing) {
+ QMessageBox::warning( this, tr("Calendar"),
+ tr( "Can not edit data, currently syncing") );
+ return;
+ }
+
+ QString strName = e.description();
+
+ if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) )
+ return;
+
+ db->removeEvent( e );
+ if ( views->visibleWidget() == dayView && dayView )
+ dayView->redraw();
+}
+
+void DateBook::addEvent( const Event &e )
+{
+ QDate d = e.start().date();
+ initDay();
+ dayView->setDate( d );
+}
+
+void DateBook::showDay( int year, int month, int day )
+{
+ initDay();
+ dayView->setDate( year, month, day );
+ views->raiseWidget( dayView );
+ dayAction->setOn( TRUE );
+}
+
+void DateBook::initDay()
+{
+ if ( !dayView ) {
+ dayView = new DateBookDay( ampm, onMonday, db, views, "day view" );
+ views->addWidget( dayView, DAY );
+ dayView->setStartViewTime( startTime );
+ connect( this, SIGNAL( newEvent() ),
+ dayView, SLOT( redraw() ) );
+ connect( dayView, SIGNAL( newEvent() ),
+ this, SLOT( fileNew() ) );
+ connect( dayView, SIGNAL( removeEvent( const Event & ) ),
+ this, SLOT( removeEvent( const Event & ) ) );
+ connect( dayView, SIGNAL( editEvent( const Event & ) ),
+ this, SLOT( editEvent( const Event & ) ) );
+ connect( dayView, SIGNAL( beamEvent( const Event & ) ),
+ this, SLOT( beamEvent( const Event & ) ) );
+ connect( dayView, SIGNAL(sigNewEvent(const QString &)),
+ this, SLOT(slotNewEventFromKey(const QString &)) );
+ }
+}
+
+void DateBook::initWeek()
+{
+ if ( !weekView ) {
+ weekView = new DateBookWeek( ampm, onMonday, db, views, "week view" );
+ weekView->setStartViewTime( startTime );
+ views->addWidget( weekView, WEEK );
+ connect( weekView, SIGNAL( showDate( int, int, int ) ),
+ this, SLOT( showDay( int, int, int ) ) );
+ connect( this, SIGNAL( newEvent() ),
+ weekView, SLOT( redraw() ) );
+ }
+ //But also get it right: the year that we display can be different
+ //from the year of the current date. So, first find the year
+ //number of the current week.
+
+ int yearNumber, totWeeks;
+ calcWeek( currentDate(), totWeeks, yearNumber, onMonday );
+
+ QDate d = QDate( yearNumber, 12, 31 );
+ calcWeek( d, totWeeks, yearNumber, onMonday );
+
+ while ( totWeeks == 1 ) {
+ d = d.addDays( -1 );
+ calcWeek( d, totWeeks, yearNumber, onMonday );
+ }
+ if ( totWeeks != weekView->totalWeeks() )
+ weekView->setTotalWeeks( totWeeks );
+}
+
+void DateBook::initMonth()
+{
+ if ( !monthView ) {
+ monthView = new DateBookMonth( views, "month view", FALSE, db );
+ views->addWidget( monthView, MONTH );
+ connect( monthView, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( showDay( int, int, int ) ) );
+ connect( this, SIGNAL( newEvent() ),
+ monthView, SLOT( redraw() ) );
+ qApp->processEvents();
+ }
+}
+
+void DateBook::loadSettings()
+{
+ {
+ Config config( "qpe" );
+ config.setGroup("Time");
+ ampm = config.readBoolEntry( "AMPM", TRUE );
+ onMonday = config.readBoolEntry( "MONDAY" );
+ }
+
+ {
+ Config config("DateBook");
+ config.setGroup("Main");
+ startTime = config.readNumEntry("startviewtime", 8);
+ aPreset = config.readBoolEntry("alarmpreset");
+ presetTime = config.readNumEntry("presettime");
+ }
+}
+
+void DateBook::saveSettings()
+{
+ Config config( "qpe" );
+ Config configDB( "DateBook" );
+ configDB.setGroup( "Main" );
+ configDB.writeEntry("startviewtime",startTime);
+ configDB.writeEntry("alarmpreset",aPreset);
+ configDB.writeEntry("presettime",presetTime);
+}
+
+void DateBook::appMessage(const QCString& msg, const QByteArray& data)
+{
+ bool needShow = FALSE;
+ if ( msg == "alarm(QDateTime,int)" ) {
+ QDataStream ds(data,IO_ReadOnly);
+ QDateTime when; int warn;
+ ds >> when >> warn;
+
+ // check to make it's okay to continue,
+ // this is the case that the time was set ahead, and
+ // we are forced given a stale alarm...
+ QDateTime current = QDateTime::currentDateTime();
+ if ( current.time().hour() != when.time().hour()
+ && current.time().minute() != when.time().minute() )
+ return;
+
+ QValueList<EffectiveEvent> list = db->getEffectiveEvents(when.addSecs(warn*60));
+ if ( list.count() > 0 ) {
+ QString msg;
+ bool bSound = FALSE;
+ int stopTimer = 0;
+ bool found = FALSE;
+ for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin();
+ it!=list.end(); ++it ) {
+ if ( (*it).event().hasAlarm() ) {
+ found = TRUE;
+ msg += "<CENTER><B>" + (*it).description() + "</B>"
+ + "<BR>" + (*it).location() + "<BR>"
+ + TimeString::dateString((*it).event().start(),ampm)
+ + (warn
+ ? tr(" (in " + QString::number(warn)
+ + tr(" minutes)"))
+ : QString(""))
+ + "<BR>"
+ + (*it).notes() + "</CENTER>";
+ if ( (*it).event().alarmSound() != Event::Silent ) {
+ bSound = TRUE;
+ }
+ }
+ }
+ if ( found ) {
+ if ( bSound ) {
+ Sound::soundAlarm();
+ stopTimer = startTimer( 5000 );
+ }
+
+ QDialog dlg( this, 0, TRUE );
+ QVBoxLayout *vb = new QVBoxLayout( &dlg );
+ QScrollView *view = new QScrollView( &dlg, "scrollView");
+ view->setResizePolicy( QScrollView::AutoOneFit );
+ vb->addWidget( view );
+ QLabel *lblMsg = new QLabel( msg, &dlg );
+ view->addChild( lblMsg );
+ QPushButton *cmdOk = new QPushButton( tr("OK"), &dlg );
+ connect( cmdOk, SIGNAL(clicked()), &dlg, SLOT(accept()) );
+ vb->addWidget( cmdOk );
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ dlg.showMaximized();
+#endif
+ needShow = dlg.exec();
+
+ if ( bSound )
+ killTimer( stopTimer );
+ }
+ }
+ } else if ( msg == "nextView()" ) {
+ QWidget* cur = views->visibleWidget();
+ if ( cur ) {
+ if ( cur == dayView )
+ viewWeek();
+ else if ( cur == weekView )
+ viewMonth();
+ else if ( cur == monthView )
+ viewDay();
+ needShow = TRUE;
+ }
+ }
+ if ( needShow ) {
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ showMaximized();
+#else
+ show();
+#endif
+ raise();
+ QPEApplication::setKeepRunning();
+ setActiveWindow();
+ }
+}
+
+void DateBook::reload()
+{
+ db->reload();
+ if ( dayAction->isOn() )
+ viewDay();
+ else if ( weekAction->isOn() )
+ viewWeek();
+ else if ( monthAction->isOn() )
+ viewMonth();
+ syncing = FALSE;
+}
+
+void DateBook::flush()
+{
+ syncing = TRUE;
+ db->save();
+}
+
+void DateBook::timerEvent( QTimerEvent *e )
+{
+ static int stop = 0;
+ if ( stop < 10 ) {
+ Sound::soundAlarm();
+ stop++;
+ } else {
+ stop = 0;
+ killTimer( e->timerId() );
+ }
+}
+
+void DateBook::changeClock( bool newClock )
+{
+ ampm = newClock;
+ // repaint the affected objects...
+ if (dayView) dayView->redraw();
+ if (weekView) weekView->redraw();
+}
+
+void DateBook::changeWeek( bool m )
+{
+ /* no need to redraw, each widget catches. Do need to
+ store though for widgets we haven't made yet */
+ onMonday = m;
+}
+
+void DateBook::slotToday()
+{
+ // we need to view today
+ QDate dt = QDate::currentDate();
+ showDay( dt.year(), dt.month(), dt.day() );
+}
+
+void DateBook::closeEvent( QCloseEvent *e )
+{
+ if(syncing) {
+ /* no need to save, did that at flush */
+ e->accept();
+ return;
+ }
+
+ // save settings will generate it's own error messages, no
+ // need to do checking ourselves.
+ saveSettings();
+ if ( db->save() )
+ e->accept();
+ else {
+ if ( QMessageBox::critical( this, tr( "Out of space" ),
+ tr("Calendar was unable to save\n"
+ "your changes.\n"
+ "Free up some space and try again.\n"
+ "\nQuit anyway?"),
+ QMessageBox::Yes|QMessageBox::Escape,
+ QMessageBox::No|QMessageBox::Default )
+ != QMessageBox::No )
+ e->accept();
+ else
+ e->ignore();
+ }
+}
+
+// Entering directly from the "keyboard"
+void DateBook::slotNewEventFromKey( const QString &str )
+{
+ if (syncing) {
+ QMessageBox::warning( this, tr("Calendar"),
+ tr( "Can not edit data, currently syncing") );
+ return;
+ }
+
+ // We get to here from a key pressed in the Day View
+ // So we can assume some things. We want the string
+ // passed in to be part of the description.
+ QDateTime start, end;
+ if ( views->visibleWidget() == dayView ) {
+ dayView->selectedDates( start, end );
+ } else if ( views->visibleWidget() == monthView ) {
+ QDate d = monthView->selectedDate();
+ start = end = d;
+ start.setTime( QTime( 10, 0 ) );
+ end.setTime( QTime( 12, 0 ) );
+ } else if ( views->visibleWidget() == weekView ) {
+ QDate d = weekView->date();
+ start = end = d;
+ start.setTime( QTime( 10, 0 ) );
+ end.setTime( QTime( 12, 0 ) );
+ }
+
+ // argh! This really needs to be encapsulated in a class
+ // or function.
+ QDialog newDlg( this, 0, TRUE );
+ newDlg.setCaption( DateEntryBase::tr("New Event") );
+ DateEntry *e;
+ QVBoxLayout *vb = new QVBoxLayout( &newDlg );
+ QScrollView *sv = new QScrollView( &newDlg );
+ sv->setResizePolicy( QScrollView::AutoOneFit );
+ sv->setFrameStyle( QFrame::NoFrame );
+ sv->setHScrollBarMode( QScrollView::AlwaysOff );
+ vb->addWidget( sv );
+
+ Event ev;
+ ev.setDescription( str );
+ // When the new gui comes in, change this...
+ ev.setLocation( tr("(Unknown)") );
+ ev.setStart( start );
+ ev.setEnd( end );
+
+ e = new DateEntry( onMonday, ev, ampm, &newDlg );
+ e->setAlarmEnabled( aPreset, presetTime, Event::Loud );
+ sv->addChild( e );
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ newDlg.showMaximized();
+#endif
+ while (newDlg.exec()) {
+ ev = e->event();
+ ev.assignUid();
+ QString error = checkEvent( ev );
+ if ( !error.isNull() ) {
+ if ( QMessageBox::warning( this, tr("Error!"),
+ error, tr("Fix it"), tr("Continue"), 0, 0, 1 ) == 0 )
+ continue;
+ }
+ db->addEvent( ev );
+ emit newEvent();
+ break;
+ }
+}
+
+void DateBook::setDocument( const QString &filename )
+{
+ if ( filename.find(".vcs") != int(filename.length()) - 4 ) return;
+
+ QValueList<Event> tl = Event::readVCalendar( filename );
+ for( QValueList<Event>::Iterator it = tl.begin(); it != tl.end(); ++it ) {
+ db->addEvent( *it );
+ }
+}
+
+static const char * beamfile = "/tmp/obex/event.vcs";
+
+void DateBook::beamEvent( const Event &e )
+{
+ qDebug("trying to beamn");
+ unlink( beamfile ); // delete if exists
+ mkdir("/tmp/obex/", 0755);
+ Event::writeVCalendar( beamfile, e );
+ Ir *ir = new Ir( this );
+ connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
+ QString description = e.description();
+ ir->send( beamfile, description, "text/x-vCalendar" );
+}
+
+void DateBook::beamDone( Ir *ir )
+{
+ delete ir;
+ unlink( beamfile );
+}
+
+void DateBook::slotFind()
+{
+ // move it to the day view...
+ viewDay();
+ FindDialog frmFind( "Calendar", this );
+ frmFind.setUseDate( true );
+ frmFind.setDate( currentDate() );
+ QObject::connect( &frmFind,
+ SIGNAL(signalFindClicked(const QString&, const QDate&,
+ bool, bool, int)),
+ this,
+ SLOT(slotDoFind(const QString&, const QDate&,
+ bool, bool, int)) );
+ QObject::connect( this,
+ SIGNAL(signalNotFound()),
+ &frmFind,
+ SLOT(slotNotFound()) );
+ QObject::connect( this,
+ SIGNAL(signalWrapAround()),
+ &frmFind,
+ SLOT(slotWrapAround()) );
+ frmFind.exec();
+ inSearch = false;
+}
+
+bool catComp( QArray<int> cats, int category )
+{
+ bool returnMe;
+ int i,
+ count;
+
+ count = int(cats.count());
+ returnMe = false;
+ if ( (category == -1 && count == 0) || category == -2 )
+ returnMe = true;
+ else {
+ for ( i = 0; i < count; i++ ) {
+ if ( category == cats[i] ) {
+ returnMe = true;
+ break;
+ }
+ }
+ }
+ return returnMe;
+}
+
+
+void DateBook::slotDoFind( const QString& txt, const QDate &dt,
+ bool caseSensitive, bool /*backwards*/,
+ int category )
+{
+ QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ),
+ next;
+
+ QRegExp r( txt );
+ r.setCaseSensitive( caseSensitive );
+
+
+ static Event rev,
+ nonrev;
+ if ( !inSearch ) {
+ rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
+ nonrev.setStart( rev.start() );
+ inSearch = true;
+ }
+ static QDate searchDate = dt;
+ static bool wrapAround = true;
+ bool candidtate;
+ candidtate = false;
+
+ QValueList<Event> repeats = db->getRawRepeats();
+
+ // find the candidate for the first repeat that matches...
+ QValueListConstIterator<Event> it;
+ QDate start = dt;
+ for ( it = repeats.begin(); it != repeats.end(); ++it ) {
+ if ( catComp( (*it).categories(), category ) ) {
+ while ( nextOccurance( *it, start, next ) ) {
+ if ( next < dtEnd ) {
+ if ( (*it).match( r ) && !(next <= rev.start()) ) {
+ rev = *it;
+ dtEnd = next;
+ rev.setStart( next );
+ candidtate = true;
+ wrapAround = true;
+ start = dt;
+ break;
+ } else
+ start = next.date().addDays( 1 );
+ }
+ }
+ }
+ }
+
+ // now the for first non repeat...
+ QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() );
+ qHeapSort( nonRepeats.begin(), nonRepeats.end() );
+ for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) {
+ if ( catComp( (*it).categories(), category ) ) {
+ if ( (*it).start() < dtEnd ) {
+ if ( (*it).match( r ) && !(*it <= nonrev) ) {
+ nonrev = *it;
+ dtEnd = nonrev.start();
+ candidtate = true;
+ wrapAround = true;
+ break;
+ }
+ }
+ }
+ }
+ if ( candidtate ) {
+ dayView->setStartViewTime( dtEnd.time().hour() );
+ dayView->setDate( dtEnd.date().year(), dtEnd.date().month(),
+ dtEnd.date().day() );
+ } else {
+ if ( wrapAround ) {
+ emit signalWrapAround();
+ rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
+ nonrev.setStart( rev.start() );
+ } else
+ emit signalNotFound();
+ wrapAround = !wrapAround;
+ }
+}
diff --git a/core/pim/datebook/datebook.h b/core/pim/datebook/datebook.h
new file mode 100644
index 0000000..44627bb
--- a/dev/null
+++ b/core/pim/datebook/datebook.h
@@ -0,0 +1,111 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DATEBOOK_H
+#define DATEBOOK_H
+
+#include <qpe/datebookdb.h>
+
+#include <qmainwindow.h>
+
+class QAction;
+class QWidgetStack;
+class DateBookDay;
+class DateBookWeek;
+class DateBookMonth;
+class Event;
+class QDate;
+class Ir;
+
+class DateBook : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ DateBook( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~DateBook();
+
+signals:
+ void newEvent();
+ void signalNotFound();
+ void signalWrapAround();
+
+protected:
+ QDate currentDate();
+ void timerEvent( QTimerEvent *e );
+ void closeEvent( QCloseEvent *e );
+
+public slots:
+ void flush();
+ void reload();
+
+private slots:
+ void fileNew();
+ void slotSettings();
+ void slotToday(); // view today
+ void changeClock( bool newClock );
+ void changeWeek( bool newDay );
+ void appMessage(const QCString& msg, const QByteArray& data);
+ // handle key events in the day view...
+ void slotNewEventFromKey( const QString &str );
+ void slotFind();
+ void slotDoFind( const QString &, const QDate &, bool, bool, int );
+
+ void viewDay();
+ void viewWeek();
+ void viewMonth();
+
+ void showDay( int y, int m, int d );
+
+ void editEvent( const Event &e );
+ void removeEvent( const Event &e );
+
+ void receive( const QCString &msg, const QByteArray &data );
+ void setDocument( const QString & );
+ void beamEvent( const Event &e );
+ void beamDone( Ir *ir );
+
+private:
+ void addEvent( const Event &e );
+ void initDay();
+ void initWeek();
+ void initMonth();
+ void loadSettings();
+ void saveSettings();
+
+private:
+ DateBookDB *db;
+ QWidgetStack *views;
+ DateBookDay *dayView;
+ DateBookWeek *weekView;
+ DateBookMonth *monthView;
+ QAction *dayAction, *weekAction, *monthAction;
+ bool aPreset; // have everything set to alarm?
+ int presetTime; // the standard time for the alarm
+ int startTime;
+ bool ampm;
+ bool onMonday;
+
+ bool syncing;
+ bool inSearch;
+
+ QString checkEvent(const Event &);
+};
+
+#endif
diff --git a/core/pim/datebook/datebook.pro b/core/pim/datebook/datebook.pro
new file mode 100644
index 0000000..17c02ec
--- a/dev/null
+++ b/core/pim/datebook/datebook.pro
@@ -0,0 +1,36 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+
+HEADERS = datebookday.h \
+ datebook.h \
+ dateentryimpl.h \
+ datebookdayheaderimpl.h \
+ datebooksettings.h \
+ datebookweek.h \
+ datebookweekheaderimpl.h \
+ repeatentry.h
+
+SOURCES = main.cpp \
+ datebookday.cpp \
+ datebook.cpp \
+ dateentryimpl.cpp \
+ datebookdayheaderimpl.cpp \
+ datebooksettings.cpp \
+ datebookweek.cpp \
+ datebookweekheaderimpl.cpp \
+ repeatentry.cpp
+
+INTERFACES = dateentry.ui \
+ datebookdayheader.ui \
+ datebooksettingsbase.ui \
+ datebookweekheader.ui \
+ repeatentrybase.ui
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TARGET = datebook
+
+TRANSLATIONS = ../i18n/de/datebook.ts
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
new file mode 100644
index 0000000..d5daab2
--- a/dev/null
+++ b/core/pim/datebook/datebookday.cpp
@@ -0,0 +1,553 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "datebookday.h"
+#include "datebookdayheaderimpl.h"
+
+#include <qpe/datebookdb.h>
+#include <qpe/resource.h>
+#include <qpe/event.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/timestring.h>
+#include <qpe/qpedebug.h>
+
+#include <qheader.h>
+#include <qdatetime.h>
+#include <qpainter.h>
+#include <qsimplerichtext.h>
+#include <qpopupmenu.h>
+#include <qtextcodec.h>
+#include <qpalette.h>
+
+DateBookDayView::DateBookDayView( bool whichClock, QWidget *parent,
+ const char *name )
+ : QTable( 24, 1, parent, name ),
+ ampm( whichClock )
+{
+ enableClipper(TRUE);
+ setTopMargin( 0 );
+ horizontalHeader()->hide();
+ setLeftMargin(38);
+ setColumnStretchable( 0, TRUE );
+ setHScrollBarMode( QScrollView::AlwaysOff );
+ verticalHeader()->setPalette(white);
+ verticalHeader()->setResizeEnabled(FALSE);
+ setSelectionMode( Single );
+
+ // get rid of being able to edit things...
+ QTableItem *tmp;
+ int row;
+ for ( row = 0; row < numRows(); row++ ) {
+ tmp = new QTableItem( this, QTableItem::Never, QString::null);
+ setItem( row, 0, tmp );
+ }
+ initHeader();
+ QObject::connect( qApp, SIGNAL(clockChanged(bool)),
+ this, SLOT(slotChangeClock(bool)) );
+}
+
+void DateBookDayView::initHeader()
+{
+ QString strTmp;
+ for ( int i = 0; i < 24; ++i ) {
+ if ( ampm ) {
+ if ( i == 0 )
+ strTmp = QString::number(12) + ":00";
+ else if ( i == 12 )
+ strTmp = QString::number(12) + tr(":00p");
+ else if ( i > 12 )
+ strTmp = QString::number( i - 12 ) + tr(":00p");
+ else
+ strTmp = QString::number(i) + ":00";
+ } else {
+ if ( i < 10 )
+ strTmp = "0" + QString::number(i) + ":00";
+ else
+ strTmp = QString::number(i) + ":00";
+ }
+ strTmp = strTmp.rightJustify( 6, ' ' );
+ verticalHeader()->setLabel( i, strTmp );
+ setRowStretchable( i, FALSE );
+ }
+}
+
+void DateBookDayView::slotChangeClock( bool newClock )
+{
+ ampm = newClock;
+ initHeader();
+}
+
+bool DateBookDayView::whichClock() const
+{
+ return ampm;
+}
+
+void DateBookDayView::moveUp()
+{
+ scrollBy(0, -20);
+}
+
+void DateBookDayView::moveDown()
+{
+ scrollBy(0, 20);
+}
+
+void DateBookDayView::paintCell( QPainter *p, int, int, const QRect &cr, bool )
+{
+ int w = cr.width();
+ int h = cr.height();
+ p->fillRect( 0, 0, w, h, colorGroup().brush( QColorGroup::Base ) );
+ if ( showGrid() ) {
+ // Draw our lines
+ int x2 = w - 1;
+ int y2 = h - 1;
+ QPen pen( p->pen() );
+ p->setPen( colorGroup().mid() );
+ p->drawLine( x2, 0, x2, y2 );
+ p->drawLine( 0, y2, x2, y2 );
+ p->setPen( pen );
+ }
+}
+
+void DateBookDayView::paintFocus( QPainter *, const QRect & )
+{
+}
+
+
+void DateBookDayView::resizeEvent( QResizeEvent *e )
+{
+ QTable::resizeEvent( e );
+ columnWidthChanged( 0 );
+ emit sigColWidthChanged();
+}
+
+void DateBookDayView::keyPressEvent( QKeyEvent *e )
+{
+ QString txt = e->text();
+ if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 ) {
+ // we this is some sort of thing we know about...
+ e->accept();
+ emit sigCapturedKey( txt );
+ } else {
+ // I don't know what this key is, do you?
+ e->ignore();
+ }
+}
+
+
+//===========================================================================
+
+DateBookDay::DateBookDay( bool ampm, bool startOnMonday,
+ DateBookDB *newDb, QWidget *parent,
+ const char *name )
+ : QVBox( parent, name ),
+ currDate( QDate::currentDate() ),
+ db( newDb ),
+ startTime( 0 )
+{
+ widgetList.setAutoDelete( true );
+ header = new DateBookDayHeader( startOnMonday, this, "day header" );
+ header->setDate( currDate.year(), currDate.month(), currDate.day() );
+ view = new DateBookDayView( ampm, this, "day view" );
+ connect( header, SIGNAL( dateChanged( int, int, int ) ),
+ this, SLOT( dateChanged( int, int, int ) ) );
+ connect( view, SIGNAL( sigColWidthChanged() ),
+ this, SLOT( slotColWidthChanged() ) );
+ connect( qApp, SIGNAL(weekChanged(bool)),
+ this, SLOT(slotWeekChanged(bool)) );
+ connect( view, SIGNAL(sigCapturedKey(const QString &)),
+ this, SIGNAL(sigNewEvent(const QString&)) );
+}
+
+void DateBookDay::selectedDates( QDateTime &start, QDateTime &end )
+{
+ start.setDate( currDate );
+ end.setDate( currDate );
+
+ int sh=99,eh=-1;
+
+ int n = dayView()->numSelections();
+
+ for (int i=0; i<n; i++) {
+ QTableSelection sel = dayView()->selection( i );
+ sh = QMIN(sh,sel.topRow());
+ eh = QMAX(sh,sel.bottomRow()+1);
+ }
+ if (sh > 23 || eh < 1) {
+ sh=8;
+ eh=9;
+ }
+
+ start.setTime( QTime( sh, 0, 0 ) );
+ end.setTime( QTime( eh, 0, 0 ) );
+}
+
+void DateBookDay::setDate( int y, int m, int d )
+{
+ header->setDate( y, m, d );
+}
+
+void DateBookDay::setDate( QDate d)
+{
+ header->setDate( d.year(), d.month(), d.day() );
+}
+
+void DateBookDay::dateChanged( int y, int m, int d )
+{
+ QDate date( y, m, d );
+ if ( currDate == date )
+ return;
+ currDate.setYMD( y, m, d );
+ relayoutPage();
+ dayView()->clearSelection();
+ QTableSelection ts;
+ ts.init( startTime, 0 );
+ ts.expandTo( startTime, 0 );
+ dayView()->addSelection( ts );
+}
+
+void DateBookDay::redraw()
+{
+ if ( isUpdatesEnabled() )
+ relayoutPage();
+}
+
+void DateBookDay::getEvents()
+{
+ widgetList.clear();
+
+ QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate,
+ currDate );
+ QValueListIterator<EffectiveEvent> it;
+ for ( it = eventList.begin(); it != eventList.end(); ++it ) {
+ DateBookDayWidget* w = new DateBookDayWidget( *it, this );
+ connect( w, SIGNAL( deleteMe( const Event & ) ),
+ this, SIGNAL( removeEvent( const Event & ) ) );
+ connect( w, SIGNAL( editMe( const Event & ) ),
+ this, SIGNAL( editEvent( const Event & ) ) );
+ connect( w, SIGNAL( beamMe( const Event & ) ),
+ this, SIGNAL( beamEvent( const Event & ) ) );
+ widgetList.append( w );
+ }
+}
+
+static int place( const DateBookDayWidget *item, bool *used, int maxn )
+{
+ int place = 0;
+ int start = item->event().start().hour();
+ QTime e = item->event().end();
+ int end = e.hour();
+ if ( e.minute() < 5 )
+ end--;
+ if ( end < start )
+ end = start;
+ while ( place < maxn ) {
+ bool free = TRUE;
+ int s = start;
+ while( s <= end ) {
+ if ( used[10*s+place] ) {
+ free = FALSE;
+ break;
+ }
+ s++;
+ }
+ if ( free ) break;
+ place++;
+ }
+ if ( place == maxn ) {
+ return -1;
+ }
+ while( start <= end ) {
+ used[10*start+place] = TRUE;
+ start++;
+ }
+ return place;
+}
+
+
+void DateBookDay::relayoutPage( bool fromResize )
+{
+ setUpdatesEnabled( FALSE );
+ if ( !fromResize )
+ getEvents(); // no need we already have them!
+
+ int wCount = widgetList.count();
+ int wid = view->columnWidth(0)-1;
+ int n = 1;
+
+ if ( wCount < 20 ) {
+ for ( int i = 0; i < wCount; ) {
+ DateBookDayWidget *w = widgetList.at(i);
+ int x = 0;
+ int xp = 0;
+ QRect geom = w->geometry();
+ geom.setX( x );
+ geom.setWidth( wid );
+ while ( xp < n && intersects( w, geom ) ) {
+ x += wid;
+ xp++;
+ geom.moveBy( wid, 0 );
+ }
+ if ( xp >= n ) {
+ n++;
+ wid = ( view->columnWidth(0)-1 ) / n;
+ i = 0;
+ } else {
+ w->setGeometry( geom );
+ i++;
+ }
+ }
+ view->setContentsPos( 0, startTime * view->rowHeight(0) );
+ } else {
+
+
+ int hours[24];
+ memset( hours, 0, 24*sizeof( int ) );
+ bool overFlow = FALSE;
+ for ( int i = 0; i < wCount; i++ ) {
+ DateBookDayWidget *w = widgetList.at(i);
+ int start = w->event().start().hour();
+ QTime e = w->event().end();
+ int end = e.hour();
+ if ( e.minute() < 5 )
+ end--;
+ if ( end < start )
+ end = start;
+ while( start <= end ) {
+ hours[start]++;
+ if ( hours[start] >= 10 )
+ overFlow = TRUE;
+ ++start;
+ }
+ if ( overFlow )
+ break;
+ }
+ for ( int i = 0; i < 24; i++ ) {
+ n = QMAX( n, hours[i] );
+ }
+ wid = ( view->columnWidth(0)-1 ) / n;
+
+ bool used[24*10];
+ memset( used, FALSE, 24*10*sizeof( bool ) );
+
+ for ( int i = 0; i < wCount; i++ ) {
+ DateBookDayWidget *w = widgetList.at(i);
+ int xp = place( w, used, n );
+ if ( xp != -1 ) {
+ QRect geom = w->geometry();
+ geom.setX( xp*wid );
+ geom.setWidth( wid );
+ w->setGeometry( geom );
+ }
+ }
+ view->setContentsPos( 0, startTime * view->rowHeight(0) );
+ }
+ setUpdatesEnabled( TRUE );
+ return;
+}
+
+DateBookDayWidget *DateBookDay::intersects( const DateBookDayWidget *item, const QRect &geom )
+{
+ int i = 0;
+ DateBookDayWidget *w = widgetList.at(i);
+ int wCount = widgetList.count();
+ while ( i < wCount && w != item ) {
+ if ( w->geometry().intersects( geom ) ) {
+ return w;
+ }
+ w = widgetList.at(++i);
+ }
+
+ return 0;
+}
+
+
+QDate DateBookDay::date() const
+{
+ return currDate;
+}
+
+void DateBookDay::setStartViewTime( int startHere )
+{
+ startTime = startHere;
+ dayView()->clearSelection();
+ QTableSelection ts;
+ ts.init( startTime, 0 );
+ ts.expandTo( startTime, 0 );
+ dayView()->addSelection( ts );
+}
+
+int DateBookDay::startViewTime() const
+{
+ return startTime;
+}
+
+void DateBookDay::slotWeekChanged( bool bStartOnMonday )
+{
+ header->setStartOfWeek( bStartOnMonday );
+ // redraw();
+}
+
+void DateBookDay::keyPressEvent(QKeyEvent *e)
+{
+ switch(e->key()) {
+ case Key_Up:
+ view->moveUp();
+ break;
+ case Key_Down:
+ view->moveDown();
+ break;
+ case Key_Left:
+ setDate(QDate(currDate).addDays(-1));
+ break;
+ case Key_Right:
+ setDate(QDate(currDate).addDays(1));
+ break;
+ default:
+ e->ignore();
+ }
+}
+
+//===========================================================================
+
+DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e,
+ DateBookDay *db )
+ : QWidget( db->dayView()->viewport() ), ev( e ), dateBook( db )
+{
+ bool whichClock = db->dayView()->whichClock();
+
+ // why would someone use "<"? Oh well, fix it up...
+ // I wonder what other things may be messed up...
+ QString strDesc = ev.description();
+ int where = strDesc.find( "<" );
+ while ( where != -1 ) {
+ strDesc.remove( where, 1 );
+ strDesc.insert( where, "&#60;" );
+ where = strDesc.find( "<", where );
+ }
+
+ QString strCat;
+ // ### Fix later...
+// QString strCat = ev.category();
+// where = strCat.find( "<" );
+// while ( where != -1 ) {
+// strCat.remove( where, 1 );
+// strCat.insert( where, "&#60;" );
+// where = strCat.find( "<", where );
+// }
+
+ QString strNote = ev.notes();
+ where = strNote.find( "<" );
+ while ( where != -1 ) {
+ strNote.remove( where, 1 );
+ strNote.insert( where, "&#60;" );
+ where = strNote.find( "<", where );
+ }
+
+ text = "<b>" + strDesc + "</b><br>" + "<i>"
+ + strCat + "</i>"
+ + "<br><b>" + tr("Start") + "</b>: ";
+
+
+ if ( e.startDate() != ev.date() ) {
+ // multi-day event. Show start date
+ text += TimeString::longDateString( e.startDate() );
+ } else {
+ // Show start time.
+ text += TimeString::timeString( ev.start(), whichClock, FALSE );
+ }
+
+ text += "<br><b>" + tr("End") + "</b>: ";
+ if ( e.endDate() != ev.date() ) {
+ // multi-day event. Show end date
+ text += TimeString::longDateString( e.endDate() );
+ } else {
+ // Show end time.
+ text += TimeString::timeString( ev.end(), whichClock, FALSE );
+ }
+ text += "<br><br>" + strNote;
+ setBackgroundMode( PaletteBase );
+
+ QTime s = ev.start();
+ QTime e = ev.end();
+ int y = s.hour()*60+s.minute();
+ int h = e.hour()*60+e.minute()-y;
+ int rh = dateBook->dayView()->rowHeight(0);
+ y = y*rh/60;
+ h = h*rh/60;
+ if ( h < 3 )
+ h = 3;
+ geom.setY( y );
+ geom.setHeight( h );
+}
+
+DateBookDayWidget::~DateBookDayWidget()
+{
+}
+
+void DateBookDayWidget::paintEvent( QPaintEvent *e )
+{
+ QPainter p( this );
+ p.setPen( QColor(100, 100, 100) );
+ p.setBrush( QColor( 255, 240, 230 ) ); // based on priority?
+ p.drawRect(rect());
+
+ int y = 0;
+ int d = 0;
+
+ if ( ev.event().hasAlarm() ) {
+ p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
+ y = 20;
+ d = 20;
+ }
+
+ if ( ev.event().hasRepeat() ) {
+ p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
+ d = 20;
+ }
+
+ QSimpleRichText rt( text, font() );
+ rt.setWidth( geom.width() - d - 6 );
+ rt.draw( &p, 3, 0, e->region(), colorGroup() );
+}
+
+void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
+{
+ QPopupMenu m;
+ m.insertItem( tr( "Edit" ), 1 );
+ m.insertItem( tr( "Delete" ), 2 );
+ m.insertItem( tr( "Beam" ), 3 );
+ int r = m.exec( e->globalPos() );
+ if ( r == 1 ) {
+ emit editMe( ev.event() );
+ } else if ( r == 2 ) {
+ emit deleteMe( ev.event() );
+ } else if ( r == 3 ) {
+ emit beamMe( ev.event() );
+ }
+}
+
+void DateBookDayWidget::setGeometry( const QRect &r )
+{
+ geom = r;
+ setFixedSize( r.width()+1, r.height()+1 );
+ dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
+ show();
+}
diff --git a/core/pim/datebook/datebookday.h b/core/pim/datebook/datebookday.h
new file mode 100644
index 0000000..531fded
--- a/dev/null
+++ b/core/pim/datebook/datebookday.h
@@ -0,0 +1,138 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DATEBOOKDAY_H
+#define DATEBOOKDAY_H
+
+#include <qpe/event.h>
+
+#include <qdatetime.h>
+#include <qtable.h>
+#include <qvbox.h>
+#include <qlist.h>
+
+class DateBookDayHeader;
+class DateBookDB;
+class QDateTime;
+class QMouseEvent;
+class QPaintEvent;
+class QResizeEvent;
+
+class DateBookDayView : public QTable
+{
+ Q_OBJECT
+public:
+ DateBookDayView( bool hourClock, QWidget *parent, const char *name );
+ bool whichClock() const;
+
+public slots:
+ void moveUp();
+ void moveDown();
+
+signals:
+ void sigColWidthChanged();
+ void sigCapturedKey( const QString &txt );
+protected slots:
+ void slotChangeClock( bool );
+protected:
+ virtual void paintCell( QPainter *p, int row, int col, const QRect &cr, bool selected );
+ virtual void paintFocus( QPainter *p, const QRect &cr );
+ virtual void resizeEvent( QResizeEvent *e );
+ void keyPressEvent( QKeyEvent *e );
+ void initHeader();
+private:
+ bool ampm;
+};
+
+class DateBookDay;
+class DateBookDayWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ DateBookDayWidget( const EffectiveEvent &e, DateBookDay *db );
+ ~DateBookDayWidget();
+
+ const QRect &geometry() { return geom; }
+ void setGeometry( const QRect &r );
+
+ const EffectiveEvent &event() const { return ev; }
+
+signals:
+ void deleteMe( const Event &e );
+ void editMe( const Event &e );
+ void beamMe( const Event &e );
+
+protected:
+ void paintEvent( QPaintEvent *e );
+ void mousePressEvent( QMouseEvent *e );
+
+private:
+ const EffectiveEvent ev;
+ DateBookDay *dateBook;
+ QString text;
+ QRect geom;
+};
+
+class DateBookDay : public QVBox
+{
+ Q_OBJECT
+
+public:
+ DateBookDay( bool ampm, bool startOnMonday, DateBookDB *newDb,
+ QWidget *parent, const char *name );
+ void selectedDates( QDateTime &start, QDateTime &end );
+ QDate date() const;
+ DateBookDayView *dayView() const { return view; }
+ void setStartViewTime( int startHere );
+ int startViewTime() const;
+
+public slots:
+ void setDate( int y, int m, int d );
+ void setDate( QDate );
+ void redraw();
+ void slotWeekChanged( bool bStartOnMonday );
+
+signals:
+ void removeEvent( const Event& );
+ void editEvent( const Event& );
+ void beamEvent( const Event& );
+ void newEvent();
+ void sigNewEvent( const QString & );
+
+protected slots:
+ void keyPressEvent(QKeyEvent *);
+
+private slots:
+ void dateChanged( int y, int m, int d );
+ void slotColWidthChanged() { relayoutPage(); };
+
+private:
+ void getEvents();
+ void relayoutPage( bool fromResize = false );
+ DateBookDayWidget *intersects( const DateBookDayWidget *item, const QRect &geom );
+ QDate currDate;
+ DateBookDayView *view;
+ DateBookDayHeader *header;
+ DateBookDB *db;
+ QList<DateBookDayWidget> widgetList;
+ int startTime;
+};
+
+#endif
diff --git a/core/pim/datebook/datebookdayheader.ui b/core/pim/datebook/datebookdayheader.ui
new file mode 100644
index 0000000..8bc284f
--- a/dev/null
+++ b/core/pim/datebook/datebookdayheader.ui
@@ -0,0 +1,424 @@
+<!DOCTYPE UI><UI>
+<class>DateBookDayHeaderBase</class>
+<comment>/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+**********************************************************************/</comment>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>DateBookDayHeaderBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>249</width>
+ <height>26</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Form1</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>back</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image0</pixmap>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRepeat</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>false</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>date</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap></pixmap>
+ </property>
+ <property stdset="1">
+ <name>autoRepeat</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QButtonGroup</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>grpDays</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Plain</enum>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>exclusive</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>M</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>T</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>W</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay4</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>T</string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap></pixmap>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRepeat</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay5</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>F</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay6</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>S</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay7</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>S</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>toolTip</name>
+ <string></string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>forward</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image1</pixmap>
+ </property>
+ <property stdset="1">
+ <name>autoRepeat</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoRaise</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+</widget>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="582">789c6dcfcd4e843010c0f13b4fd1d01b31bb6cb325211b1f41e3d1c4789876a60bcbd7aeae07637c773b6d5985d870e0f7ef50605b88e7a707516cb3f72b5c5b2b6c036fa2c08f61f87c79bdffcaf2dd5ef0558b5d7e97e51b61c5e33412df4b7f2fcbb09896a94ab557817063cd744cad74a915734aac35308740d018d9332d5ab0c8ec1229f2c2448d156a661b489ee1ab4e4cf2a08a790e24020abb0dd355442eec8e914e45526215790c749e8e89891069125de466b1fe14295705ccaa5863e2d05cc01894925b2a7e8217dd8a631eb169fd509af10fd1a9ebfbdf32008d9d0c07cd274f70ee162773ba2cdfee935c977ffe6b2edf87ec07796f81cd</data>
+ </image>
+ <image>
+ <name>image1</name>
+ <data format="XPM.GZ" length="627">789c7dcfc94ec3301006e07b9ec28a6f114a13cbb1a8108f00e28884387819676993340b07847877329ea8697a60ec83bfdf232f8784bdbfbdb0e4104db39e6bcb6ca54796b8afb6fdfef87cfe89e25cb2650ac1f2f8218a5366d96bdf01aef9b2e65928a4458a0c07b25c29890352e63293e19c53a0968f52230159e8c22981744495133552097554a1f982b4ce6aeb9013d215165c81ec894e109b4070ca85378f2b35f18c04050214b20d04d010762ba457003eecd6442f88f34a45f4817ea147762b35d1acf4c47457d784737d9f18ebee1363614bf852c6f812b6c460f90abb6e93ba694ed7c49fdbaeee2f76b83da71ba772e0db5d9ccf4b07dfdd5e858edd9b2948fff9d796fc3e457f660e8d47</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>forward</sender>
+ <signal>clicked()</signal>
+ <receiver>DateBookDayHeaderBase</receiver>
+ <slot>goForward()</slot>
+ </connection>
+ <connection>
+ <sender>back</sender>
+ <signal>clicked()</signal>
+ <receiver>DateBookDayHeaderBase</receiver>
+ <slot>goBack()</slot>
+ </connection>
+ <connection>
+ <sender>grpDays</sender>
+ <signal>clicked(int)</signal>
+ <receiver>DateBookDayHeaderBase</receiver>
+ <slot>setDay( int )</slot>
+ </connection>
+ <slot access="public">goBack()</slot>
+ <slot access="public">goForward()</slot>
+ <slot access="public">setDate( int, int, int )</slot>
+ <slot access="public">setDay( int )</slot>
+</connections>
+</UI>
diff --git a/core/pim/datebook/datebookdayheaderimpl.cpp b/core/pim/datebook/datebookdayheaderimpl.cpp
new file mode 100644
index 0000000..fbcb3d2
--- a/dev/null
+++ b/core/pim/datebook/datebookdayheaderimpl.cpp
@@ -0,0 +1,181 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "datebookdayheaderimpl.h"
+
+#include <qpe/datebookmonth.h>
+#include <qpe/timestring.h>
+
+#include <qbuttongroup.h>
+#include <qpopupmenu.h>
+#include <qstringlist.h>
+#include <qtimer.h>
+#include <qtoolbutton.h>
+
+/*
+ * Constructs a DateBookDayHeader which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ *
+ * The dialog will by default be modeless, unless you set 'modal' to
+ * TRUE to construct a modal dialog.
+ */
+DateBookDayHeader::DateBookDayHeader( bool useMonday,
+ QWidget* parent, const char* name )
+ : DateBookDayHeaderBase( parent, name ),
+ bUseMonday( useMonday )
+{
+ connect(date,SIGNAL(pressed()),this,SLOT(pickDate()));
+
+ setupNames();
+
+ setBackgroundMode( PaletteButton );
+ grpDays->setBackgroundMode( PaletteButton );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+DateBookDayHeader::~DateBookDayHeader()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+void DateBookDayHeader::setStartOfWeek( bool onMonday )
+{
+ bUseMonday = onMonday;
+ setupNames();
+ setDate( currDate.year(), currDate.month(), currDate.day() );
+}
+
+void DateBookDayHeader::setupNames()
+{
+ if ( bUseMonday ) {
+ cmdDay1->setText( DateBookDayHeaderBase::tr("Monday").left(1) );
+ cmdDay2->setText( DateBookDayHeaderBase::tr("Tuesday").left(1) );
+ cmdDay3->setText( DateBookDayHeaderBase::tr("Wednesday").left(1) );
+ cmdDay4->setText( DateBookDayHeaderBase::tr("Thursday").left(1) );
+ cmdDay5->setText( DateBookDayHeaderBase::tr("Friday").left(1) );
+ cmdDay6->setText( DateBookDayHeaderBase::tr("Saturday").left(1) );
+ cmdDay7->setText( DateBookDayHeaderBase::tr("Sunday").left(1) );
+ } else {
+ cmdDay1->setText( DateBookDayHeaderBase::tr("Sunday").left(1) );
+ cmdDay2->setText( DateBookDayHeaderBase::tr("Monday").left(1) );
+ cmdDay3->setText( DateBookDayHeaderBase::tr("Tuesday").left(1) );
+ cmdDay4->setText( DateBookDayHeaderBase::tr("Wednesday").left(1) );
+ cmdDay5->setText( DateBookDayHeaderBase::tr("Thursday").left(1) );
+ cmdDay6->setText( DateBookDayHeaderBase::tr("Friday").left(1) );
+ cmdDay7->setText( DateBookDayHeaderBase::tr("Saturday").left(1) );
+ }
+}
+
+
+void DateBookDayHeader::pickDate()
+{
+ static QPopupMenu *m1 = 0;
+ static DateBookMonth *picker = 0;
+ if ( !m1 ) {
+ m1 = new QPopupMenu( this );
+ picker = new DateBookMonth( m1, 0, TRUE );
+ m1->insertItem( picker );
+ connect( picker, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( setDate( int, int, int ) ) );
+ connect( m1, SIGNAL( aboutToHide() ),
+ this, SLOT( gotHide() ) );
+ }
+ picker->setDate( currDate.year(), currDate.month(), currDate.day() );
+ m1->popup(mapToGlobal(date->pos()+QPoint(0,date->height())));
+ picker->setFocus();
+}
+
+void DateBookDayHeader::gotHide()
+{
+ // we have to redo the button...
+ date->setDown( false );
+}
+
+/*
+ * public slot
+ */
+void DateBookDayHeader::goBack()
+{
+ currDate = currDate.addDays( -1 );
+ setDate( currDate.year(), currDate.month(), currDate.day() );
+}
+/*
+ * public slot
+ */
+void DateBookDayHeader::goForward()
+{
+ currDate = currDate.addDays( 1 );
+ setDate( currDate.year(), currDate.month(), currDate.day() );
+}
+
+
+/*
+ * public slot
+ */
+void DateBookDayHeader::setDate( int y, int m, int d )
+{
+ currDate.setYMD( y, m, d );
+ date->setText( TimeString::shortDate( currDate ) );
+
+ int iDayOfWeek = currDate.dayOfWeek();
+ // cleverly adjust the day depending on how we start the week
+ if ( bUseMonday )
+ iDayOfWeek--;
+ else {
+ if ( iDayOfWeek == 7 ) // Sunday
+ iDayOfWeek = 0;
+ }
+ grpDays->setButton( iDayOfWeek );
+ emit dateChanged( y, m, d );
+}
+
+/*
+ * public slot
+ */
+void DateBookDayHeader::setDay( int day )
+{
+ int realDay;
+ int dayOfWeek = currDate.dayOfWeek();
+
+ // a little adjustment is needed...
+ if ( bUseMonday )
+ realDay = day + 1 ;
+ else if ( !bUseMonday && day == 0 ) // sunday
+ realDay = 7;
+ else
+ realDay = day;
+ // special cases first...
+ if ( realDay == 7 && !bUseMonday ) {
+ while ( currDate.dayOfWeek() != realDay )
+ currDate = currDate.addDays( -1 );
+ } else if ( !bUseMonday && dayOfWeek == 7 && dayOfWeek > realDay ) {
+ while ( currDate.dayOfWeek() != realDay )
+ currDate = currDate.addDays( 1 );
+ } else if ( dayOfWeek < realDay ) {
+ while ( currDate.dayOfWeek() < realDay )
+ currDate = currDate.addDays( 1 );
+ } else if ( dayOfWeek > realDay ) {
+ while ( currDate.dayOfWeek() > realDay )
+ currDate = currDate.addDays( -1 );
+ }
+ // update the date...
+ setDate( currDate.year(), currDate.month(), currDate.day() );
+}
diff --git a/core/pim/datebook/datebookdayheaderimpl.h b/core/pim/datebook/datebookdayheaderimpl.h
new file mode 100644
index 0000000..43f3a93
--- a/dev/null
+++ b/core/pim/datebook/datebookdayheaderimpl.h
@@ -0,0 +1,57 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DATEBOOKDAYHEADER_H
+#define DATEBOOKDAYHEADER_H
+#include "datebookdayheader.h"
+
+#include <qdatetime.h>
+
+class DateBookDayHeader : public DateBookDayHeaderBase
+{
+ Q_OBJECT
+
+public:
+ DateBookDayHeader( bool bUseMonday, QWidget* parent = 0,
+ const char* name = 0 );
+ ~DateBookDayHeader();
+ void setStartOfWeek( bool onMonday );
+
+public slots:
+ void goBack();
+ void goForward();
+ void setDate( int, int, int );
+ void setDay( int );
+ void gotHide();
+
+signals:
+ void dateChanged( int y, int m, int d );
+
+private slots:
+ void pickDate();
+
+
+private:
+ QDate currDate;
+ bool bUseMonday;
+ void setupNames();
+
+};
+
+#endif // DATEBOOKDAYHEADER_H
diff --git a/core/pim/datebook/datebooksettings.cpp b/core/pim/datebook/datebooksettings.cpp
new file mode 100644
index 0000000..c5d8ac1
--- a/dev/null
+++ b/core/pim/datebook/datebooksettings.cpp
@@ -0,0 +1,135 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "datebooksettings.h"
+
+#include <qpe/qpeapplication.h>
+
+#include <qspinbox.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+
+DateBookSettings::DateBookSettings( bool whichClock, QWidget *parent,
+ const char *name, bool modal, WFlags fl )
+ : DateBookSettingsBase( parent, name, modal, fl ),
+ ampm( whichClock )
+{
+ init();
+ QObject::connect( qApp, SIGNAL( clockChanged( bool ) ),
+ this, SLOT( slotChangeClock( bool ) ) );
+}
+
+DateBookSettings::~DateBookSettings()
+{
+}
+
+void DateBookSettings::setStartTime( int newStartViewTime )
+{
+ if ( ampm ) {
+ if ( newStartViewTime >= 12 ) {
+ newStartViewTime %= 12;
+ if ( newStartViewTime == 0 )
+ newStartViewTime = 12;
+ spinStart->setSuffix( tr(":00 PM") );
+ }
+ else if ( newStartViewTime == 0 ) {
+ newStartViewTime = 12;
+ spinStart->setSuffix( tr(":00 AM") );
+ }
+ oldtime = newStartViewTime;
+ }
+ spinStart->setValue( newStartViewTime );
+}
+
+int DateBookSettings::startTime() const
+{
+ int returnMe = spinStart->value();
+ if ( ampm ) {
+ if ( returnMe != 12 && spinStart->suffix().contains(tr("PM"), FALSE) )
+ returnMe += 12;
+ else if (returnMe == 12 && spinStart->suffix().contains(tr("AM"), TRUE))
+ returnMe = 0;
+ }
+ return returnMe;
+}
+
+
+void DateBookSettings::setAlarmPreset( bool bAlarm, int presetTime )
+{
+ chkAlarmPreset->setChecked( bAlarm );
+ if ( presetTime >=5 )
+ spinPreset->setValue( presetTime );
+}
+
+bool DateBookSettings::alarmPreset() const
+{
+ return chkAlarmPreset->isChecked();
+}
+
+int DateBookSettings::presetTime() const
+{
+ return spinPreset->value();
+}
+
+
+void DateBookSettings::slot12Hour( int i )
+{
+ if ( ampm ) {
+ if ( spinStart->suffix().contains( tr("AM"), FALSE ) ) {
+ if ( oldtime == 12 && i == 11 || oldtime == 11 && i == 12 )
+ spinStart->setSuffix( tr(":00 PM") );
+ } else {
+ if ( oldtime == 12 && i == 11 || oldtime == 11 && i == 12 )
+ spinStart->setSuffix( tr(":00 AM") );
+ }
+ oldtime = i;
+ }
+}
+
+void DateBookSettings::init()
+{
+ if ( ampm ) {
+ spinStart->setMinValue( 1 );
+ spinStart->setMaxValue( 12 );
+ spinStart->setValue( 12 );
+ spinStart->setSuffix( tr(":00 AM") );
+ oldtime = 12;
+ } else {
+ spinStart->setMinValue( 0 );
+ spinStart->setMaxValue( 23 );
+ spinStart->setSuffix( tr(":00") );
+ }
+}
+
+void DateBookSettings::slotChangeClock( bool whichClock )
+{
+ int saveMe;
+ saveMe = spinStart->value();
+ if ( ampm && spinStart->suffix().contains( tr("AM"), FALSE ) ) {
+ if ( saveMe == 12 )
+ saveMe = 0;
+ } else if ( ampm && spinStart->suffix().contains( tr("PM"), FALSE ) ) {
+ if ( saveMe != 12 )
+ saveMe += 12;
+ }
+ ampm = whichClock;
+ init();
+ setStartTime( saveMe );
+}
diff --git a/core/pim/datebook/datebooksettings.h b/core/pim/datebook/datebooksettings.h
new file mode 100644
index 0000000..ee9f39c
--- a/dev/null
+++ b/core/pim/datebook/datebooksettings.h
@@ -0,0 +1,48 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef DATEBOOKSETTINGS_H
+#define DATEBOOKSETTINGS_H
+#include "datebooksettingsbase.h"
+
+class DateBookSettings : public DateBookSettingsBase
+{
+public:
+ DateBookSettings( bool whichClock, QWidget *parent = 0,
+ const char *name = 0, bool modal = TRUE, WFlags = 0 );
+ ~DateBookSettings();
+ void setStartTime( int newStartViewTime );
+ int startTime() const;
+ void setAlarmPreset( bool bAlarm, int presetTime );
+ bool alarmPreset() const;
+ int presetTime() const;
+ void setAlarmType( int alarmType );
+ int alarmType() const;
+
+private slots:
+ void slot12Hour( int );
+ void slotChangeClock( bool );
+
+private:
+ void init();
+ bool ampm;
+ int oldtime;
+};
+#endif
diff --git a/core/pim/datebook/datebooksettingsbase.ui b/core/pim/datebook/datebooksettingsbase.ui
new file mode 100644
index 0000000..0f40773
--- a/dev/null
+++ b/core/pim/datebook/datebooksettingsbase.ui
@@ -0,0 +1,232 @@
+<!DOCTYPE UI><UI>
+<class>DateBookSettingsBase</class>
+<comment>**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+**********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>DateBookSettingsBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>232</width>
+ <height>290</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Preferences</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>fraStart</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Start viewing events</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblStartTime</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Start Time:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinStart</cstring>
+ </property>
+ <property stdset="1">
+ <name>suffix</name>
+ <string>:00</string>
+ </property>
+ <property stdset="1">
+ <name>wrapping</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>23</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>fraAlarm</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Alarm Settings</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>chkAlarmPreset</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Alarm Preset</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinPreset</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>suffix</name>
+ <string> minutes</string>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>180</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>5</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>chkAlarmPreset</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>spinPreset</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>spinStart</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>DateBookSettingsBase</receiver>
+ <slot>slot12Hour( int )</slot>
+ </connection>
+ <slot access="public">slotChangeClock( bool )</slot>
+ <slot access="public">slot12Hour( int )</slot>
+</connections>
+</UI>
diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp
new file mode 100644
index 0000000..e9fcc39
--- a/dev/null
+++ b/core/pim/datebook/datebookweek.cpp
@@ -0,0 +1,687 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "datebookweek.h"
+#include "datebookweekheaderimpl.h"
+
+#include <qpe/calendar.h>
+#include <qpe/datebookdb.h>
+#include <qpe/event.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/timestring.h>
+
+#include <qdatetime.h>
+#include <qheader.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qpainter.h>
+#include <qpopupmenu.h>
+#include <qtimer.h>
+#include <qspinbox.h>
+#include <qstyle.h>
+
+//-----------------------------------------------------------------
+
+
+DateBookWeekItem::DateBookWeekItem( const EffectiveEvent e )
+ : ev( e )
+{
+ // with the current implementation change the color for all day events
+ if ( ev.event().type() == Event::AllDay && !ev.event().hasAlarm() ) {
+ c = Qt::green;
+ } else {
+ c = ev.event().hasAlarm() ? Qt::red : Qt::blue;
+ }
+}
+
+void DateBookWeekItem::setGeometry( int x, int y, int w, int h )
+{
+ r.setRect( x, y, w, h );
+}
+
+
+//------------------=---------------------------------------------
+
+DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
+ QWidget *parent, const char *name )
+ : QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ),
+ showingEvent( false )
+{
+ items.setAutoDelete( true );
+
+ viewport()->setBackgroundMode( PaletteBase );
+
+ header = new QHeader( this );
+ header->addLabel( "" );
+
+ header->setMovingEnabled( false );
+ header->setResizeEnabled( false );
+ header->setClickEnabled( false, 0 );
+ initNames();
+
+
+ connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) );
+
+ QObject::connect(qApp, SIGNAL(clockChanged(bool)),
+ this, SLOT(slotChangeClock(bool)));
+
+ QFontMetrics fm( font() );
+ rowHeight = fm.height()+2;
+
+ resizeContents( width(), 24*rowHeight );
+}
+
+void DateBookWeekView::initNames()
+{
+ static bool bFirst = true;
+ if ( bFirst ) {
+ if ( bOnMonday ) {
+ header->addLabel( tr("M", "Monday" ) );
+ header->addLabel( tr("T", "Tuesday") );
+ header->addLabel( tr("W", "Wednesday" ) );
+ header->addLabel( tr("T", "Thursday" ) );
+ header->addLabel( tr("F", "Friday" ) );
+ header->addLabel( tr("S", "Saturday" ) );
+ header->addLabel( tr("S", "Sunday" ) );
+ } else {
+ header->addLabel( tr("S", "Sunday" ) );
+ header->addLabel( tr("M", "Monday") );
+ header->addLabel( tr("T", "Tuesday") );
+ header->addLabel( tr("W", "Wednesday" ) );
+ header->addLabel( tr("T", "Thursday" ) );
+ header->addLabel( tr("F", "Friday" ) );
+ header->addLabel( tr("S", "Saturday" ) );
+ }
+ bFirst = false;
+ } else {
+ // we are change things...
+ if ( bOnMonday ) {
+ header->setLabel( 1, tr("M", "Monday") );
+ header->setLabel( 2, tr("T", "Tuesday") );
+ header->setLabel( 3, tr("W", "Wednesday" ) );
+ header->setLabel( 4, tr("T", "Thursday" ) );
+ header->setLabel( 5, tr("F", "Friday" ) );
+ header->setLabel( 6, tr("S", "Saturday" ) );
+ header->setLabel( 7, tr("S", "Sunday" ) );
+ } else {
+ header->setLabel( 1, tr("S", "Sunday" ) );
+ header->setLabel( 2, tr("M", "Monday") );
+ header->setLabel( 3, tr("T", "Tuesday") );
+ header->setLabel( 4, tr("W", "Wednesday" ) );
+ header->setLabel( 5, tr("T", "Thursday" ) );
+ header->setLabel( 6, tr("F", "Friday" ) );
+ header->setLabel( 7, tr("S", "Saturday" ) );
+ }
+ }
+}
+
+
+
+void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev )
+{
+ items.clear();
+ QValueListIterator<EffectiveEvent> it;
+ for ( it = ev.begin(); it != ev.end(); ++it ) {
+ DateBookWeekItem *i = new DateBookWeekItem( *it );
+ positionItem( i );
+ items.append( i );
+ }
+ viewport()->update();
+}
+
+void DateBookWeekView::moveToHour( int h )
+{
+ int offset = h*rowHeight;
+ setContentsPos( 0, offset );
+}
+
+void DateBookWeekView::keyPressEvent( QKeyEvent *e )
+{
+ e->ignore();
+}
+
+void DateBookWeekView::slotChangeClock( bool c )
+{
+ ampm = c;
+ viewport()->update();
+}
+
+static inline int db_round30min( int m )
+{
+ if ( m < 15 )
+ m = 0;
+ else if ( m < 45 )
+ m = 1;
+ else
+ m = 2;
+
+ return m;
+}
+
+void DateBookWeekView::alterDay( int day )
+{
+ if ( !bOnMonday ) {
+ day--;
+ }
+ emit showDay( day );
+}
+
+void DateBookWeekView::positionItem( DateBookWeekItem *i )
+{
+ const int Width = 8;
+ const EffectiveEvent ev = i->event();
+
+ // 30 minute intervals
+ int y = ev.start().hour() * 2;
+ y += db_round30min( ev.start().minute() );
+ if ( y > 47 )
+ y = 47;
+ y = y * rowHeight / 2;
+
+ int h;
+ if ( ev.event().type() == Event::AllDay ) {
+ h = 48;
+ y = 0;
+ } else {
+ h = ( ev.end().hour() - ev.start().hour() ) * 2;
+ h += db_round30min( ev.end().minute() - ev.start().minute() );
+ if ( h < 1 ) h = 1;
+ }
+ h = h * rowHeight / 2;
+
+ int dow = ev.date().dayOfWeek();
+ if ( !bOnMonday ) {
+ if ( dow == 7 )
+ dow = 1;
+ else
+ dow++;
+ }
+ int x = header->sectionPos( dow ) - 1;
+ int xlim = header->sectionPos( dow ) + header->sectionSize( dow );
+ DateBookWeekItem *isect = 0;
+ do {
+ i->setGeometry( x, y, Width, h );
+ isect = intersects( i );
+ x += Width - 1;
+ } while ( isect && x < xlim );
+}
+
+DateBookWeekItem *DateBookWeekView::intersects( const DateBookWeekItem *item )
+{
+ QRect geom = item->geometry();
+
+ // We allow the edges to overlap
+ geom.moveBy( 1, 1 );
+ geom.setSize( geom.size()-QSize(2,2) );
+
+ QListIterator<DateBookWeekItem> it(items);
+ for ( ; it.current(); ++it ) {
+ DateBookWeekItem *i = it.current();
+ if ( i != item ) {
+ if ( i->geometry().intersects( geom ) ) {
+ return i;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void DateBookWeekView::contentsMousePressEvent( QMouseEvent *e )
+{
+ QListIterator<DateBookWeekItem> it(items);
+ for ( ; it.current(); ++it ) {
+ DateBookWeekItem *i = it.current();
+ if ( i->geometry().contains( e->pos() ) ) {
+ showingEvent = true;
+ emit signalShowEvent( i->event() );
+ break;
+ }
+ }
+}
+
+void DateBookWeekView::contentsMouseReleaseEvent( QMouseEvent *e )
+{
+ if ( showingEvent ) {
+ showingEvent = false;
+ emit signalHideEvent();
+ } else {
+ int d = header->sectionAt( e->pos().x() );
+ if ( d > 0 ) {
+// if ( !bOnMonday )
+// d--;
+ emit showDay( d );
+ }
+ }
+}
+
+void DateBookWeekView::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ QRect ur( cx, cy, cw, ch );
+ p->setPen( lightGray );
+ for ( int i = 1; i <= 7; i++ )
+ p->drawLine( header->sectionPos(i)-2, cy, header->sectionPos(i)-2, cy+ch );
+
+ p->setPen( black );
+ for ( int t = 0; t < 24; t++ ) {
+ int y = t*rowHeight;
+ if ( QRect( 1, y, 20, rowHeight ).intersects( ur ) ) {
+ QString s;
+ if ( ampm ) {
+ if ( t == 0 )
+ s = QString::number( 12 );
+ else if ( t == 12 )
+ s = QString::number(12) + tr( "p" );
+ else if ( t > 12 ) {
+ if ( t - 12 < 10 )
+ s = " ";
+ else
+ s = "";
+ s += QString::number( t - 12 ) + tr("p");
+ } else {
+ if ( 12 - t < 3 )
+ s = "";
+ else
+ s = " ";
+ s += QString::number( t );
+ }
+ } else {
+ s = QString::number( t );
+ if ( s.length() == 1 )
+ s.prepend( "0" );
+ }
+ p->drawText( 1, y+p->fontMetrics().ascent()+1, s );
+ }
+ }
+
+ QListIterator<DateBookWeekItem> it(items);
+ for ( ; it.current(); ++it ) {
+ DateBookWeekItem *i = it.current();
+ if ( i->geometry().intersects( ur ) ) {
+ p->setBrush( i->color() );
+ p->drawRect( i->geometry() );
+ }
+ }
+}
+
+void DateBookWeekView::resizeEvent( QResizeEvent *e )
+{
+ const int hourWidth = 20;
+ QScrollView::resizeEvent( e );
+ int avail = width()-qApp->style().scrollBarExtent().width()-1;
+ header->setGeometry( 0, 0, avail, header->sizeHint().height() );
+ setMargins( 0, header->height(), 0, 0 );
+ header->resizeSection( 0, hourWidth );
+ int sw = (avail - hourWidth) / 7;
+ for ( int i = 1; i < 7; i++ )
+ header->resizeSection( i, sw );
+ header->resizeSection( 7, avail - hourWidth - sw*6 );
+}
+
+void DateBookWeekView::setStartOfWeek( bool bStartOnMonday )
+{
+ bOnMonday = bStartOnMonday;
+ initNames();
+}
+
+//-------------------------------------------------------------------
+
+DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB,
+ QWidget *parent, const char *name )
+ : QWidget( parent, name ),
+ db( newDB ),
+ startTime( 0 ),
+ ampm( ap ),
+ bStartOnMonday( startOnMonday )
+{
+ setFocusPolicy(StrongFocus);
+ QVBoxLayout *vb = new QVBoxLayout( this );
+ header = new DateBookWeekHeader( bStartOnMonday, this );
+ view = new DateBookWeekView( ampm, startOnMonday, this );
+ vb->addWidget( header );
+ vb->addWidget( view );
+
+ lblDesc = new QLabel( this, "event label" );
+ lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box );
+ lblDesc->setBackgroundColor( yellow );
+ lblDesc->hide();
+
+ tHide = new QTimer( this );
+
+ connect( view, SIGNAL( showDay( int ) ),
+ this, SLOT( showDay( int ) ) );
+ connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)),
+ this, SLOT(slotShowEvent(const EffectiveEvent&)) );
+ connect( view, SIGNAL(signalHideEvent()),
+ this, SLOT(slotHideEvent()) );
+ connect( header, SIGNAL( dateChanged( int, int ) ),
+ this, SLOT( dateChanged( int, int ) ) );
+ connect( tHide, SIGNAL( timeout() ),
+ lblDesc, SLOT( hide() ) );
+ connect( header->spinYear, SIGNAL(valueChanged(int)),
+ this, SLOT(slotYearChanged(int)) );
+ connect( qApp, SIGNAL(weekChanged(bool)),
+ this, SLOT(slotWeekChanged(bool)) );
+ connect( qApp, SIGNAL(clockChanged(bool)),
+ this, SLOT(slotClockChanged(bool)));
+ setDate(QDate::currentDate());
+
+}
+
+void DateBookWeek::keyPressEvent(QKeyEvent *e)
+{
+ switch(e->key()) {
+ case Key_Up:
+ view->scrollBy(0, -20);
+ break;
+ case Key_Down:
+ view->scrollBy(0, 20);
+ break;
+ case Key_Left:
+ setDate(date().addDays(-7));
+ break;
+ case Key_Right:
+ setDate(date().addDays(7));
+ break;
+ default:
+ e->ignore();
+ }
+}
+
+void DateBookWeek::showDay( int day )
+{
+ QDate d;
+ d = dateFromWeek( _week, year, bStartOnMonday );
+ day--;
+ d = d.addDays( day );
+ emit showDate( d.year(), d.month(), d.day() );
+}
+
+void DateBookWeek::setDate( int y, int m, int d )
+{
+ QDate date;
+ date.setYMD( y, m, d );
+ setDate(QDate(y, m, d));
+}
+
+void DateBookWeek::setDate(QDate date)
+{
+ dow = date.dayOfWeek();
+ int w, y;
+ calcWeek( date, w, y, bStartOnMonday );
+ header->setDate( y, w );
+}
+
+void DateBookWeek::dateChanged( int y, int w )
+{
+ year = y;
+ _week = w;
+ getEvents();
+}
+
+QDate DateBookWeek::date() const
+{
+ QDate d;
+ d = dateFromWeek( _week - 1, year, bStartOnMonday );
+ if ( bStartOnMonday )
+ d = d.addDays( 7 + dow - 1 );
+ else {
+ if ( dow == 7 )
+ d = d.addDays( dow );
+ else
+ d = d.addDays( 7 + dow );
+ }
+ return d;
+}
+
+void DateBookWeek::getEvents()
+{
+ QDate startWeek = weekDate();
+
+ QDate endWeek = startWeek.addDays( 6 );
+ QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek,
+ endWeek);
+ view->showEvents( eventList );
+ view->moveToHour( startTime );
+}
+
+void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
+{
+ if ( tHide->isActive() )
+ tHide->stop();
+
+ // why would someone use "<"? Oh well, fix it up...
+ // I wonder what other things may be messed up...
+ QString strDesc = ev.description();
+ int where = strDesc.find( "<" );
+ while ( where != -1 ) {
+ strDesc.remove( where, 1 );
+ strDesc.insert( where, "&#60;" );
+ where = strDesc.find( "<", where );
+ }
+
+ QString strCat;
+ // ### FIX later...
+// QString strCat = ev.category();
+// where = strCat.find( "<" );
+// while ( where != -1 ) {
+// strCat.remove( where, 1 );
+// strCat.insert( where, "&#60;" );
+// where = strCat.find( "<", where );
+// }
+
+ QString strNote = ev.notes();
+ where = strNote.find( "<" );
+ while ( where != -1 ) {
+ strNote.remove( where, 1 );
+ strNote.insert( where, "&#60;" );
+ where = strNote.find( "<", where );
+ }
+
+ QString str = "<b>" + strDesc + "</b><br>" + "<i>"
+ + strCat + "</i>"
+ + "<br>" + TimeString::longDateString( ev.date() )
+ + "<br><b>" + QObject::tr("Start") + "</b>: ";
+
+ if ( ev.startDate() != ev.date() ) {
+ // multi-day event. Show start date
+ str += TimeString::longDateString( ev.startDate() );
+ } else {
+ // Show start time.
+ str += TimeString::timeString(ev.start(), ampm, FALSE );
+ }
+
+ str += "<br><b>" + QObject::tr("End") + "</b>: ";
+ if ( ev.endDate() != ev.date() ) {
+ // multi-day event. Show end date
+ str += TimeString::longDateString( ev.endDate() );
+ } else {
+ // Show end time.
+ str += TimeString::timeString( ev.end(), ampm, FALSE );
+ }
+ str += "<br><br>" + strNote;
+
+ lblDesc->setText( str );
+ lblDesc->resize( lblDesc->sizeHint() );
+ // move the label so it is "centerd" horizontally...
+ lblDesc->move( QMAX(0,(width() - lblDesc->width()) / 2), 0 );
+ lblDesc->show();
+}
+
+void DateBookWeek::slotHideEvent()
+{
+ tHide->start( 2000, true );
+}
+
+void DateBookWeek::setStartViewTime( int startHere )
+{
+ startTime = startHere;
+ view->moveToHour( startTime );
+}
+
+int DateBookWeek::startViewTime() const
+{
+ return startTime;
+}
+
+void DateBookWeek::redraw()
+{
+ getEvents();
+}
+
+void DateBookWeek::slotYearChanged( int y )
+{
+ int totWeek;
+ QDate d( y, 12, 31 );
+ int throwAway;
+ calcWeek( d, totWeek, throwAway, bStartOnMonday );
+ while ( totWeek == 1 ) {
+ d = d.addDays( -1 );
+ calcWeek( d, totWeek, throwAway, bStartOnMonday );
+ }
+ if ( totWeek != totalWeeks() )
+ setTotalWeeks( totWeek );
+}
+
+
+void DateBookWeek::setTotalWeeks( int numWeeks )
+{
+ header->spinWeek->setMaxValue( numWeeks );
+}
+
+int DateBookWeek::totalWeeks() const
+{
+ return header->spinWeek->maxValue();
+}
+
+void DateBookWeek::slotWeekChanged( bool onMonday )
+{
+ bStartOnMonday = onMonday;
+ view->setStartOfWeek( bStartOnMonday );
+ header->setStartOfWeek( bStartOnMonday );
+ redraw();
+}
+
+void DateBookWeek::slotClockChanged( bool ap )
+{
+ ampm = ap;
+}
+
+// return the date at the beginning of the week...
+QDate DateBookWeek::weekDate() const
+{
+ return dateFromWeek( _week, year, bStartOnMonday );
+}
+
+// this used to only be needed by datebook.cpp, but now we need it inside
+// week view since
+// we need to be able to figure out our total number of weeks on the fly...
+// this is probably the best place to put it..
+
+// For Weeks that start on Monday... (EASY!)
+// At the moment we will use ISO 8601 method for computing
+// the week. Granted, other countries use other methods,
+// bet we aren't doing any Locale stuff at the moment. So,
+// this should pass. This Algorithim is public domain and
+// available at:
+// http://personal.ecu.edu/mccartyr/ISOwdALG.txt
+// the week number is return, and the year number is returned in year
+// for Instance 2001/12/31 is actually the first week in 2002.
+// There is a more mathematical definition, but I will implement it when
+// we are pass our deadline.
+
+// For Weeks that start on Sunday... (ahh... home rolled)
+// okay, if Jan 1 is on Friday or Saturday,
+// it will go to the pervious
+// week...
+
+bool calcWeek( const QDate &d, int &week, int &year,
+ bool startOnMonday = false )
+{
+ int weekNumber;
+ int yearNumber;
+
+ // remove a pesky warning, (Optimizations on g++)
+ weekNumber = -1;
+ int jan1WeekDay = QDate(d.year(), 1, 1).dayOfWeek();
+ int dayOfWeek = d.dayOfWeek();
+
+ if ( !d.isValid() )
+ return false;
+
+ if ( startOnMonday ) {
+ // find the Jan1Weekday;
+ if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) {
+ yearNumber = d.year() - 1;
+ if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) )
+ weekNumber = 53;
+ else
+ weekNumber = 52;
+ } else
+ yearNumber = d.year();
+ if ( yearNumber == d.year() ) {
+ int totalDays = 365;
+ if ( QDate::leapYear(yearNumber) )
+ totalDays++;
+ if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) )
+ || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) {
+ yearNumber++;
+ weekNumber = 1;
+ }
+ }
+ if ( yearNumber == d.year() ) {
+ int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 );
+ weekNumber = j / 7;
+ if ( jan1WeekDay > 4 )
+ weekNumber--;
+ }
+ } else {
+ // it's better to keep these cases separate...
+ if ( d.dayOfYear() <= (7 - jan1WeekDay) && jan1WeekDay > 4
+ && jan1WeekDay != 7 ) {
+ yearNumber = d.year() - 1;
+ if ( jan1WeekDay == 6
+ || (jan1WeekDay == 7 && QDate::leapYear(yearNumber) ) ) {
+ weekNumber = 53;
+ }else
+ weekNumber = 52;
+ } else
+ yearNumber = d.year();
+ if ( yearNumber == d.year() ) {
+ int totalDays = 365;
+ if ( QDate::leapYear( yearNumber ) )
+ totalDays++;
+ if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek % 7)) ) {
+ yearNumber++;
+ weekNumber = 1;
+ }
+ }
+ if ( yearNumber == d.year() ) {
+ int j = d.dayOfYear() + (7 - dayOfWeek % 7) + ( jan1WeekDay - 1 );
+ weekNumber = j / 7;
+ if ( jan1WeekDay > 4 ) {
+ weekNumber--;
+ }
+ }
+ }
+ year = yearNumber;
+ week = weekNumber;
+ return true;
+}
+
diff --git a/core/pim/datebook/datebookweek.h b/core/pim/datebook/datebookweek.h
new file mode 100644
index 0000000..6e675f1
--- a/dev/null
+++ b/core/pim/datebook/datebookweek.h
@@ -0,0 +1,152 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DATEBOOKWEEK
+#define DATEBOOKWEEK
+
+#include <qpe/event.h>
+
+#include <qlist.h>
+#include <qscrollview.h>
+#include <qstring.h>
+#include <qvaluelist.h>
+
+class DateBookDB;
+class DateBookWeekHeader;
+class QDate;
+class QLabel;
+class QResizeEvent;
+class QSpinBox;
+class QTimer;
+class QHeader;
+
+class DateBookWeekItem
+{
+public:
+ DateBookWeekItem( const EffectiveEvent e );
+
+ void setGeometry( int x, int y, int w, int h );
+ QRect geometry() const { return r; }
+
+ const QColor &color() const { return c; }
+ const EffectiveEvent event() const { return ev; }
+
+private:
+ const EffectiveEvent ev;
+ QRect r;
+ QColor c;
+};
+
+class DateBookWeekView : public QScrollView
+{
+ Q_OBJECT
+public:
+ DateBookWeekView( bool ampm, bool weekOnMonday, QWidget *parent = 0,
+ const char *name = 0 );
+
+ bool whichClock() const;
+ void showEvents( QValueList<EffectiveEvent> &ev );
+ void moveToHour( int h );
+ void setStartOfWeek( bool bOnMonday );
+
+signals:
+ void showDay( int d );
+ void signalShowEvent( const EffectiveEvent & );
+ void signalHideEvent();
+
+protected slots:
+ void keyPressEvent(QKeyEvent *);
+
+private slots:
+ void slotChangeClock( bool );
+ void alterDay( int );
+
+private:
+ void positionItem( DateBookWeekItem *i );
+ DateBookWeekItem *intersects( const DateBookWeekItem * );
+ void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
+ void contentsMousePressEvent( QMouseEvent * );
+ void contentsMouseReleaseEvent( QMouseEvent * );
+ void resizeEvent( QResizeEvent * );
+ void initNames();
+
+private:
+ bool ampm;
+ bool bOnMonday;
+ QHeader *header;
+ QList<DateBookWeekItem> items;
+ int rowHeight;
+ bool showingEvent;
+};
+
+class DateBookWeek : public QWidget
+{
+ Q_OBJECT
+
+public:
+ DateBookWeek( bool ampm, bool weekOnMonday, DateBookDB *newDB,
+ QWidget *parent = 0, const char *name = 0 );
+ void setDate( int y, int m, int d );
+ void setDate( QDate d );
+ QDate date() const;
+ DateBookWeekView *weekView() const { return view; }
+ void setStartViewTime( int startHere );
+ int startViewTime() const;
+ int week() const { return _week; };
+ void setTotalWeeks( int totalWeeks );
+ int totalWeeks() const;
+ QDate weekDate() const;
+
+public slots:
+ void redraw();
+ void slotWeekChanged( bool bStartOnMonday );
+ void slotClockChanged( bool a );
+
+signals:
+ void showDate( int y, int m, int d );
+
+protected slots:
+ void keyPressEvent(QKeyEvent *);
+
+private slots:
+ void showDay( int day );
+ void dateChanged( int y, int w );
+ void slotShowEvent( const EffectiveEvent & );
+ void slotHideEvent();
+ void slotYearChanged( int );
+
+private:
+ void getEvents();
+ int year;
+ int _week;
+ int dow;
+ DateBookWeekHeader *header;
+ DateBookWeekView *view;
+ DateBookDB *db;
+ QLabel *lblDesc;
+ QTimer *tHide;
+ int startTime;
+ bool ampm;
+ bool bStartOnMonday;
+};
+
+
+bool calcWeek( const QDate &d, int &week, int &year,
+ bool startOnMonday = false );
+#endif
diff --git a/core/pim/datebook/datebookweekheader.ui b/core/pim/datebook/datebookweekheader.ui
new file mode 100644
index 0000000..dd6a5b1
--- a/dev/null
+++ b/core/pim/datebook/datebookweekheader.ui
@@ -0,0 +1,167 @@
+<!DOCTYPE UI><UI>
+<class>DateBookWeekHeaderBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>DateBookWeekHeaderBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>281</width>
+ <height>30</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Form1</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinYear</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>prefix</name>
+ <string>Y: </string>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>2037</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>1970</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>2002</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinWeek</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>prefix</name>
+ <string>W: </string>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>52</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>1</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>1</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>labelDate</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>00. Jan-00. Jan</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ </hbox>
+</widget>
+<connections>
+ <connection>
+ <sender>spinYear</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>DateBookWeekHeaderBase</receiver>
+ <slot>yearChanged( int )</slot>
+ </connection>
+ <connection>
+ <sender>spinWeek</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>DateBookWeekHeaderBase</receiver>
+ <slot>weekChanged( int )</slot>
+ </connection>
+ <slot access="public">yearChanged( int )</slot>
+ <slot access="public">nextWeek()</slot>
+ <slot access="public">prevWeek()</slot>
+ <slot access="public">weekChanged( int )</slot>
+</connections>
+</UI>
diff --git a/core/pim/datebook/datebookweekheaderimpl.cpp b/core/pim/datebook/datebookweekheaderimpl.cpp
new file mode 100644
index 0000000..e7c7208
--- a/dev/null
+++ b/core/pim/datebook/datebookweekheaderimpl.cpp
@@ -0,0 +1,126 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "datebookweekheaderimpl.h"
+#include <qlabel.h>
+#include <qspinbox.h>
+#include <qdatetime.h>
+
+/*
+ * Constructs a DateBookWeekHeader which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ */
+DateBookWeekHeader::DateBookWeekHeader( bool startOnMonday, QWidget* parent,
+ const char* name, WFlags fl )
+ : DateBookWeekHeaderBase( parent, name, fl ),
+ bStartOnMonday( startOnMonday )
+{
+ setBackgroundMode( PaletteButton );
+ labelDate->setBackgroundMode( PaletteButton );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+DateBookWeekHeader::~DateBookWeekHeader()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * public slot
+ */
+void DateBookWeekHeader::yearChanged( int y )
+{
+ setDate( y, week );
+}
+/*
+ * public slot
+ */
+void DateBookWeekHeader::nextWeek()
+{
+ if ( week < 52 )
+ week++;
+ setDate( year, week );
+}
+/*
+ * public slot
+ */
+void DateBookWeekHeader::prevWeek()
+{
+ if ( week > 1 )
+ week--;
+ setDate( year, week );
+}
+/*
+ * public slot
+ */
+void DateBookWeekHeader::weekChanged( int w )
+{
+ setDate( year, w );
+}
+
+void DateBookWeekHeader::setDate( int y, int w )
+{
+ year = y;
+ week = w;
+ spinYear->setValue( y );
+ spinWeek->setValue( w );
+
+ QDate d = dateFromWeek( week, year, bStartOnMonday );
+
+ QString s = QString::number( d.day() ) + ". " + d.monthName( d.month() )
+ + "-";
+ d = d.addDays( 6 );
+ s += QString::number( d.day() ) + ". " + d.monthName( d.month() );
+ labelDate->setText( s );
+
+ emit dateChanged( y, w );
+}
+
+void DateBookWeekHeader::setStartOfWeek( bool onMonday )
+{
+ bStartOnMonday = onMonday;
+ setDate( year, week );
+}
+
+// dateFromWeek
+// compute the date from the week in the year
+
+QDate dateFromWeek( int week, int year, bool startOnMonday )
+{
+ QDate d;
+ d.setYMD( year, 1, 1 );
+ int dayOfWeek = d.dayOfWeek();
+ if ( startOnMonday ) {
+ if ( dayOfWeek <= 4 ) {
+ d = d.addDays( ( week - 1 ) * 7 - dayOfWeek + 1 );
+ } else {
+ d = d.addDays( (week) * 7 - dayOfWeek + 1 );
+ }
+ } else {
+ if ( dayOfWeek <= 4 || dayOfWeek == 7) {
+ d = d.addDays( ( week - 1 ) * 7 - dayOfWeek % 7 );
+ } else {
+ d = d.addDays( ( week ) * 7 - dayOfWeek % 7 );
+ }
+ }
+ return d;
+}
+
diff --git a/core/pim/datebook/datebookweekheaderimpl.h b/core/pim/datebook/datebookweekheaderimpl.h
new file mode 100644
index 0000000..2abef46
--- a/dev/null
+++ b/core/pim/datebook/datebookweekheaderimpl.h
@@ -0,0 +1,62 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DATEBOOKDAYHEADER_H
+#define DATEBOOKDAYHEADER_H
+#include <qdatetime.h>
+#include "datebookweekheader.h"
+
+
+class DateBookWeekHeader : public DateBookWeekHeaderBase
+{
+ Q_OBJECT
+
+public:
+ DateBookWeekHeader( bool startOnMonday, QWidget* parent = 0,
+ const char* name = 0, WFlags fl = 0 );
+ ~DateBookWeekHeader();
+
+ void setDate( int y, int w );
+ void setStartOfWeek( bool onMonday );
+
+signals:
+ void dateChanged( int y, int w );
+
+public slots:
+ void yearChanged( int );
+ void nextWeek();
+ void prevWeek();
+ void weekChanged( int );
+
+protected slots:
+ void keyPressEvent(QKeyEvent *e)
+ {
+ e->ignore();
+ }
+
+private:
+ int year,
+ week;
+ bool bStartOnMonday;
+
+};
+
+QDate dateFromWeek( int week, int year, bool startOnMonday );
+
+#endif // DATEBOOKDAYHEADER_H
diff --git a/core/pim/datebook/dateentry.ui b/core/pim/datebook/dateentry.ui
new file mode 100644
index 0000000..0c363a4
--- a/dev/null
+++ b/core/pim/datebook/dateentry.ui
@@ -0,0 +1,1095 @@
+<!DOCTYPE UI><UI>
+<class>DateEntryBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+*********************************************************************</comment>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>DateEntryBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>242</width>
+ <height>339</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>New Event</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>MShape</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>MShadow</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Location</string>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Category</string>
+ </property>
+ <property>
+ <name>buddy</name>
+ <cstring>comboPriority</cstring>
+ </property>
+ </widget>
+ <widget row="0" column="1" rowspan="1" colspan="3" >
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>(None)</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Meeting</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Lunch</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Dinner</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Travel</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboDescription</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>currentItem</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>duplicatesEnabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Description:</string>
+ </property>
+ </widget>
+ <widget row="1" column="1" rowspan="1" colspan="3" >
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>(Unknown)</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Office</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Home</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboLocation</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>currentItem</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>duplicatesEnabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="2" column="1" rowspan="1" colspan="3" >
+ <class>CategorySelect</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboCategory</cstring>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Start</string>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonStart</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Jan 02 00</string>
+ </property>
+ </widget>
+ <widget row="3" column="2" rowspan="1" colspan="2" >
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>00:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>00:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>01:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>01:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>02:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>02:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>03:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>03:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>04:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>04:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>05:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>05:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>06:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>06:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>07:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>07:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>08:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>08:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>09:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>09:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>10:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>10:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>11:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>11:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>12:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>12:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>13:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>13:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>14:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>14:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>15:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>15:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>16:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>16:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>17:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>17:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>18:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>18:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>19:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>19:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>20:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>20:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>21:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>21:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>22:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>22:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>23:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>23:30</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboStart</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>duplicatesEnabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="4" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonEnd</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Jan 02 00</string>
+ </property>
+ </widget>
+ <widget row="4" column="2" rowspan="1" colspan="2" >
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>00:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>00:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>01:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>01:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>02:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>02:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>03:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>03:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>04:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>04:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>05:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>05:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>06:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>06:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>07:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>07:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>08:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>08:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>09:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>09:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>10:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>10:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>11:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>11:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>12:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>12:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>13:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>13:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>14:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>14:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>15:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>15:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>16:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>16:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>17:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>17:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>18:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>18:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>19:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>19:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>20:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>20:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>21:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>21:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>22:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>22:30</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>23:00</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>23:30</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboEnd</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>duplicatesEnabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="4" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>End</string>
+ </property>
+ </widget>
+ <widget row="5" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>checkAllDay</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>All day</string>
+ </property>
+ </widget>
+ <widget row="6" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3_2_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Time zone:</string>
+ </property>
+ </widget>
+ <widget row="6" column="1" rowspan="1" colspan="3" >
+ <class>TimeZoneSelector</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>timezone</cstring>
+ </property>
+ </widget>
+ <widget row="7" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>checkAlarm</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>autoMask</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Alarm</string>
+ </property>
+ <property stdset="1">
+ <name>checked</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="7" column="1" rowspan="1" colspan="2" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinAlarm</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>suffix</name>
+ <string> minutes</string>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>180</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>5</number>
+ </property>
+ </widget>
+ <widget row="7" column="3" >
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Silent</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Loud</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboSound</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="8" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblRepeat</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Repeat</string>
+ </property>
+ </widget>
+ <widget row="8" column="1" rowspan="1" colspan="3" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdRepeat</cstring>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>No Repeat...</string>
+ </property>
+ </widget>
+ <widget row="9" column="0" rowspan="1" colspan="4" >
+ <class>QMultiLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>editNote</cstring>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>TimeZoneSelector</class>
+ <header location="global">qpe/tzselect.h</header>
+ <sizehint>
+ <width>21</width>
+ <height>10</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>1</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+ <customwidget>
+ <class>CategorySelect</class>
+ <header location="global">qpe/categoryselect.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>1</verdata>
+ </sizepolicy>
+ <pixmap>image1</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="45">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523250004143a55a6b2e0026630c4f</data>
+ </image>
+ <image>
+ <name>image1</name>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>checkAlarm</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>spinAlarm</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>comboEnd</sender>
+ <signal>activated(const QString&amp;)</signal>
+ <receiver>DateEntryBase</receiver>
+ <slot>endTimeChanged( const QString &amp; )</slot>
+ </connection>
+ <connection>
+ <sender>cmdRepeat</sender>
+ <signal>clicked()</signal>
+ <receiver>DateEntryBase</receiver>
+ <slot>slotRepeat()</slot>
+ </connection>
+ <connection>
+ <sender>comboStart</sender>
+ <signal>activated(int)</signal>
+ <receiver>DateEntryBase</receiver>
+ <slot>startTimeChanged( int )</slot>
+ </connection>
+ <connection>
+ <sender>checkAllDay</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>comboEnd</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>checkAlarm</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>comboSound</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>checkAllDay</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>comboStart</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <slot access="public">endDateChanged( const QString &amp; )</slot>
+ <slot access="public">endDateChanged( int, int, int )</slot>
+ <slot access="public">endTimeChanged( const QString &amp; )</slot>
+ <slot access="public">slotRepeat()</slot>
+ <slot access="public">slotWait( int )</slot>
+ <slot access="public">startDateChanged( const QString &amp; )</slot>
+ <slot access="public">startDateChanged(int, int, int)</slot>
+ <slot access="public">startTimeChanged( int )</slot>
+ <slot access="public">typeChanged( const QString &amp; )</slot>
+ <slot access="public">tzexecute(void)</slot>
+</connections>
+</UI>
diff --git a/core/pim/datebook/dateentryimpl.cpp b/core/pim/datebook/dateentryimpl.cpp
new file mode 100644
index 0000000..1122f79
--- a/dev/null
+++ b/core/pim/datebook/dateentryimpl.cpp
@@ -0,0 +1,474 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "dateentryimpl.h"
+#include "repeatentry.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/categoryselect.h>
+#include <qpe/datebookmonth.h>
+#include <qpe/global.h>
+#include <qpe/timeconversion.h>
+#include <qpe/timestring.h>
+#include <qpe/tzselect.h>
+
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qmultilineedit.h>
+#include <qpopupmenu.h>
+#include <qscrollview.h>
+#include <qspinbox.h>
+#include <qtoolbutton.h>
+
+#include <stdlib.h>
+
+/*
+ * Constructs a DateEntry which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ *
+ * The dialog will by default be modeless, unless you set 'modal' to
+ * TRUE to construct a modal dialog.
+ */
+
+DateEntry::DateEntry( bool startOnMonday, const QDateTime &start,
+ const QDateTime &end, bool whichClock, QWidget* parent,
+ const char* name )
+ : DateEntryBase( parent, name ),
+ ampm( whichClock ),
+ startWeekOnMonday( startOnMonday )
+{
+ init();
+ setDates(start,end);
+}
+
+static void addOrPick( QComboBox* combo, const QString& t )
+{
+ for (int i=0; i<combo->count(); i++) {
+ if ( combo->text(i) == t ) {
+ combo->setCurrentItem(i);
+ return;
+ }
+ }
+ combo->setEditText(t);
+}
+
+DateEntry::DateEntry( bool startOnMonday, const Event &event, bool whichClock,
+ QWidget* parent, const char* name )
+ : DateEntryBase( parent, name ),
+ ampm( whichClock ),
+ startWeekOnMonday( startOnMonday )
+{
+ init();
+ setDates(event.start(),event.end());
+ comboCategory->setCategories( event.categories(), "Calendar", tr("Calendar") );
+ if(!event.description().isEmpty())
+ addOrPick( comboDescription, event.description() );
+ if(!event.location().isEmpty())
+ addOrPick( comboLocation, event.location() );
+ checkAlarm->setChecked( event.hasAlarm() );
+ checkAllDay->setChecked( event.type() == Event::AllDay );
+ if(!event.notes().isEmpty())
+ editNote->setText(event.notes());
+ spinAlarm->setValue(event.alarmTime());
+ if ( event.alarmSound() != Event::Silent )
+ comboSound->setCurrentItem( 1 );
+ if ( event.hasRepeat() ) {
+ rp = event.repeatPattern();
+ cmdRepeat->setText( tr("Repeat...") );
+ }
+ setRepeatLabel();
+}
+
+void DateEntry::setDates( const QDateTime& s, const QDateTime& e )
+{
+ int shour,
+ ehour;
+ QString strStart,
+ strEnd;
+ startDate = s.date();
+ endDate = e.date();
+ startTime = s.time();
+ endTime = e.time();
+ startDateChanged( s.date().year(), s.date().month(), s.date().day() );
+ if ( ampm ) {
+ shour = s.time().hour();
+ ehour = e.time().hour();
+ if ( shour >= 12 ) {
+ if ( shour > 12 )
+ shour -= 12;
+ strStart.sprintf( "%d:%02d PM", shour, s.time().minute() );
+ } else {
+ if ( shour == 0 )
+ shour = 12;
+ strStart.sprintf( "%d:%02d AM", shour, s.time().minute() );
+ }
+ if ( ehour == 24 && e.time().minute() == 0 ) {
+ strEnd = "11:59 PM"; // or "midnight"
+ } else if ( ehour >= 12 ) {
+ if ( ehour > 12 )
+ ehour -= 12;
+ strEnd.sprintf( "%d:%02d PM", ehour, e.time().minute() );
+ } else {
+ if ( ehour == 0 )
+ ehour = 12;
+ strEnd.sprintf( "%d:%02d AM", ehour, e.time().minute() );
+ }
+ } else {
+ strStart.sprintf( "%02d:%02d", s.time().hour(), s.time().minute() );
+ strEnd.sprintf( "%02d:%02d", e.time().hour(), e.time().minute() );
+ }
+ addOrPick(comboStart, strStart );
+ endDateChanged( e.date().year(), e.date().month(), e.date().day() );
+ addOrPick(comboEnd, strEnd );
+}
+
+void DateEntry::init()
+{
+ comboDescription->setInsertionPolicy(QComboBox::AtCurrent);
+ comboLocation->setInsertionPolicy(QComboBox::AtCurrent);
+
+ initCombos();
+ QPopupMenu *m1 = new QPopupMenu( this );
+ startPicker = new DateBookMonth( m1, 0, TRUE );
+ m1->insertItem( startPicker );
+ buttonStart->setPopup( m1 );
+ connect( startPicker, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( startDateChanged( int, int, int ) ) );
+
+ //Let start button change both start and end dates
+ connect( startPicker, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( endDateChanged( int, int, int ) ) );
+ connect( qApp, SIGNAL( clockChanged( bool ) ),
+ this, SLOT( slotChangeClock( bool ) ) );
+ connect( qApp, SIGNAL(weekChanged(bool)),
+ this, SLOT(slotChangeStartOfWeek(bool)) );
+
+ QPopupMenu *m2 = new QPopupMenu( this );
+ endPicker = new DateBookMonth( m2, 0, TRUE );
+ m2->insertItem( endPicker );
+ buttonEnd->setPopup( m2 );
+ connect( endPicker, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( endDateChanged( int, int, int ) ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+DateEntry::~DateEntry()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * public slot
+ */
+void DateEntry::endDateChanged( int y, int m, int d )
+{
+ endDate.setYMD( y, m, d );
+ if ( endDate < startDate ) {
+ endDate = startDate;
+ }
+
+ buttonEnd->setText( TimeString::shortDate( endDate ) );
+
+ endPicker->setDate( endDate.year(), endDate.month(), endDate.day() );
+}
+
+static QTime parseTime( const QString& s, bool ampm )
+{
+ QTime tmpTime;
+ QStringList l = QStringList::split( ':', s );
+ int hour = l[0].toInt();
+ if ( ampm ) {
+ int i=0;
+ while (i<int(l[1].length()) && l[1][i]>='0' && l[1][i]<='9')
+ i++;
+ QString digits = l[1].left(i);
+ if ( l[1].contains( "PM", FALSE ) ) {
+ if ( hour != 12 )
+ hour += 12;
+ } else {
+ if ( hour == 12 )
+ hour = 0;
+ }
+ l[1] = digits;
+ }
+ int minute = l[1].toInt();
+ if ( minute > 59 )
+ minute = 59;
+ else if ( minute < 0 )
+ minute = 0;
+ if ( hour > 23 ) {
+ hour = 23;
+ minute = 59;
+ } else if ( hour < 0 )
+ hour = 0;
+ tmpTime.setHMS( hour, minute, 0 );
+ return tmpTime;
+}
+
+/*
+ * public slot
+ */
+void DateEntry::endTimeChanged( const QString &s )
+{
+ QTime tmpTime = parseTime(s,ampm);
+ if ( endDate > startDate || tmpTime >= startTime ) {
+ endTime = tmpTime;
+ } else {
+ endTime = startTime;
+ comboEnd->setCurrentItem( comboStart->currentItem() );
+ }
+}
+
+/*
+ * public slot
+ */
+void DateEntry::startDateChanged( int y, int m, int d )
+{
+ QDate prev = startDate;
+ startDate.setYMD( y, m, d );
+ if ( rp.type == Event::Weekly &&
+ startDate.dayOfWeek() != prev.dayOfWeek() ) {
+ // if we change the start of a weekly repeating event
+ // set the repeating day appropriately
+ char mask = 1 << (prev.dayOfWeek()-1);
+ rp.days &= (~mask);
+ rp.days |= 1 << (startDate.dayOfWeek()-1);
+ }
+
+ buttonStart->setText( TimeString::shortDate( startDate ) );
+
+ // our pickers must be reset...
+ startPicker->setDate( y, m, d );
+ endPicker->setDate( y, m, d );
+}
+
+/*
+ * public slot
+ */
+void DateEntry::startTimeChanged( int index )
+{
+ startTime = parseTime(comboStart->text(index),ampm);
+ changeEndCombo( index );
+}
+/*
+ * public slot
+ */
+void DateEntry::typeChanged( const QString &s )
+{
+ bool b = s != "All Day";
+ buttonStart->setEnabled( b );
+ comboStart->setEnabled( b );
+ comboEnd->setEnabled( b );
+}
+/*
+ * public slot
+ */
+void DateEntry::changeEndCombo( int change )
+{
+ if ( change + 2 < comboEnd->count() )
+ change += 2;
+ comboEnd->setCurrentItem( change );
+ endTimeChanged( comboEnd->currentText() );
+}
+
+void DateEntry::slotRepeat()
+{
+ // Work around for compiler Bug..
+ RepeatEntry *e;
+
+ // it is better in my opinion to just grab this from the mother,
+ // since, this dialog doesn't need to keep track of it...
+ if ( rp.type != Event::NoRepeat )
+ e = new RepeatEntry( startWeekOnMonday, rp, startDate, this);
+ else
+ e = new RepeatEntry( startWeekOnMonday, startDate, this );
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ e->showMaximized();
+#endif
+ if ( e->exec() ) {
+ rp = e->repeatPattern();
+ setRepeatLabel();
+ }
+}
+
+void DateEntry::slotChangeStartOfWeek( bool onMonday )
+{
+ startWeekOnMonday = onMonday;
+}
+
+Event DateEntry::event()
+{
+ Event ev;
+ Event::SoundTypeChoice st;
+ ev.setDescription( comboDescription->currentText() );
+ ev.setLocation( comboLocation->currentText() );
+ ev.setCategories( comboCategory->currentCategories() );
+ ev.setType( checkAllDay->isChecked() ? Event::AllDay : Event::Normal );
+ if ( startDate > endDate ) {
+ QDate tmp = endDate;
+ endDate = startDate;
+ startDate = tmp;
+ }
+ startTime = parseTime( comboStart->currentText(), ampm );
+ endTime = parseTime( comboEnd->currentText(), ampm );
+ if ( startTime > endTime && endDate == startDate ) {
+ QTime tmp = endTime;
+ endTime = startTime;
+ startTime = tmp;
+ }
+ // don't set the time if theres no need too
+ if ( ev.type() == Event::AllDay ) {
+ startTime.setHMS( 0, 0, 0 );
+ endTime.setHMS( 23, 59, 59 );
+ }
+
+ // adjust start and end times based on timezone
+ QDateTime start( startDate, startTime );
+ QDateTime end( endDate, endTime );
+ time_t start_utc, end_utc;
+
+// qDebug( "tz: %s", timezone->currentZone().latin1() );
+
+ // get real timezone
+ QString realTZ;
+ realTZ = QString::fromLocal8Bit( getenv("TZ") );
+
+ // set timezone
+ if ( setenv( "TZ", timezone->currentZone(), true ) != 0 )
+ qWarning( "There was a problem setting the timezone." );
+
+ // convert to UTC based on selected TZ (calling tzset internally)
+ start_utc = TimeConversion::toUTC( start );
+ end_utc = TimeConversion::toUTC( end );
+
+ // done playing around... put it all back
+ unsetenv( "TZ" );
+ if ( !realTZ.isNull() )
+ if ( setenv( "TZ", realTZ, true ) != 0 )
+ qWarning( "There was a problem setting the timezone." );
+
+ // convert UTC to local time (calling tzset internally)
+ ev.setStart( TimeConversion::fromUTC( start_utc ) );
+ ev.setEnd( TimeConversion::fromUTC( end_utc ) );
+
+ // we only have one type of sound at the moment... LOUD!!!
+ if ( comboSound->currentItem() != 0 )
+ st = Event::Loud;
+ else
+ st = Event::Silent;
+ ev.setAlarm( checkAlarm->isChecked(), spinAlarm->value(), st );
+ if ( rp.type != Event::NoRepeat )
+ ev.setRepeat( TRUE, rp );
+ ev.setNotes( editNote->text() );
+ return ev;
+}
+
+void DateEntry::setRepeatLabel()
+{
+
+ switch( rp.type ) {
+ case Event::Daily:
+ cmdRepeat->setText( tr("Daily...") );
+ break;
+ case Event::Weekly:
+ cmdRepeat->setText( tr("Weekly...") );
+ break;
+ case Event::MonthlyDay:
+ case Event::MonthlyDate:
+ cmdRepeat->setText( tr("Monthly...") );
+ break;
+ case Event::Yearly:
+ cmdRepeat->setText( tr("Yearly...") );
+ break;
+ default:
+ cmdRepeat->setText( tr("No Repeat...") );
+ }
+}
+
+void DateEntry::setAlarmEnabled( bool alarmPreset, int presetTime, Event::SoundTypeChoice sound )
+{
+ checkAlarm->setChecked( alarmPreset );
+ spinAlarm->setValue( presetTime );
+ if ( sound != Event::Silent )
+ comboSound->setCurrentItem( 1 );
+ else
+ comboSound->setCurrentItem( 0 );
+}
+
+void DateEntry::initCombos()
+{
+ comboStart->clear();
+ comboEnd->clear();
+ if ( ampm ) {
+ for ( int i = 0; i < 24; i++ ) {
+ if ( i == 0 ) {
+ comboStart->insertItem( "12:00 AM" );
+ comboStart->insertItem( "12:30 AM" );
+ comboEnd->insertItem( "12:00 AM" );
+ comboEnd->insertItem( "12:30 AM" );
+ } else if ( i == 12 ) {
+ comboStart->insertItem( "12:00 PM" );
+ comboStart->insertItem( "12:30 PM" );
+ comboEnd->insertItem( "12:00 PM" );
+ comboEnd->insertItem( "12:30 PM" );
+ } else if ( i > 12 ) {
+ comboStart->insertItem( QString::number( i - 12 ) + ":00 PM" );
+ comboStart->insertItem( QString::number( i - 12 ) + ":30 PM" );
+ comboEnd->insertItem( QString::number( i - 12 ) + ":00 PM" );
+ comboEnd->insertItem( QString::number( i - 12 ) + ":30 PM" );
+ } else {
+ comboStart->insertItem( QString::number( i) + ":00 AM" );
+ comboStart->insertItem( QString::number( i ) + ":30 AM" );
+ comboEnd->insertItem( QString::number( i ) + ":00 AM" );
+ comboEnd->insertItem( QString::number( i ) + ":30 AM" );
+ }
+ }
+ } else {
+ for ( int i = 0; i < 24; i++ ) {
+ if ( i < 10 ) {
+ comboStart->insertItem( QString("0")
+ + QString::number(i) + ":00" );
+ comboStart->insertItem( QString("0")
+ + QString::number(i) + ":30" );
+ comboEnd->insertItem( QString("0")
+ + QString::number(i) + ":00" );
+ comboEnd->insertItem( QString("0")
+ + QString::number(i) + ":30" );
+ } else {
+ comboStart->insertItem( QString::number(i) + ":00" );
+ comboStart->insertItem( QString::number(i) + ":30" );
+ comboEnd->insertItem( QString::number(i) + ":00" );
+ comboEnd->insertItem( QString::number(i) + ":30" );
+ }
+ }
+ }
+}
+
+void DateEntry::slotChangeClock( bool whichClock )
+{
+ ampm = whichClock;
+ initCombos();
+ setDates( QDateTime( startDate, startTime ), QDateTime( endDate, endTime ) );
+}
diff --git a/core/pim/datebook/dateentryimpl.h b/core/pim/datebook/dateentryimpl.h
new file mode 100644
index 0000000..785af7a
--- a/dev/null
+++ b/core/pim/datebook/dateentryimpl.h
@@ -0,0 +1,71 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DATEENTRY_H
+#define DATEENTRY_H
+
+#include "dateentry.h"
+
+#include <qpe/event.h>
+
+#include <qdatetime.h>
+
+class DateBookMonth;
+
+class DateEntry : public DateEntryBase
+{
+ Q_OBJECT
+
+public:
+ DateEntry( bool startOnMonday, const QDateTime &start,
+ const QDateTime &end, bool whichClock = FALSE,
+ QWidget* parent = 0, const char* name = 0 );
+ DateEntry( bool startOnMonday, const Event &event, bool whichCLock = FALSE,
+ QWidget* parent = 0, const char* name = 0 );
+ ~DateEntry();
+
+ Event event();
+ void setAlarmEnabled( bool alarmPreset, int presetTime, Event::SoundTypeChoice );
+
+public slots:
+ void endDateChanged( int, int, int );
+ void endTimeChanged( const QString & );
+ void startDateChanged(int, int, int);
+ void startTimeChanged( int index );
+ void typeChanged( const QString & );
+ void changeEndCombo( int change );
+ void slotRepeat();
+ void slotChangeClock( bool );
+ void slotChangeStartOfWeek( bool );
+
+private:
+ void init();
+ void initCombos();
+ void setDates( const QDateTime& s, const QDateTime& e );
+ void setRepeatLabel();
+
+ DateBookMonth *startPicker, *endPicker;
+ QDate startDate, endDate;
+ QTime startTime, endTime;
+ Event::RepeatPattern rp;
+ bool ampm;
+ bool startWeekOnMonday;
+};
+
+#endif // DATEENTRY_H
diff --git a/core/pim/datebook/main.cpp b/core/pim/datebook/main.cpp
new file mode 100644
index 0000000..caa5fb6
--- a/dev/null
+++ b/core/pim/datebook/main.cpp
@@ -0,0 +1,38 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "datebook.h"
+#include <qpe/qpeapplication.h>
+
+
+int main( int argc, char **argv )
+{
+ QPEApplication a( argc, argv );
+
+ DateBook e;
+ QObject::connect( &a, SIGNAL( flush() ), &e, SLOT( flush() ) );
+ QObject::connect( &a, SIGNAL( reload() ), &e, SLOT( reload() ) );
+
+
+ e.setCaption( DateBook::tr("Calendar") );
+ a.showMainWidget(&e);
+
+ return a.exec();
+}
diff --git a/core/pim/datebook/qpe-datebook.control b/core/pim/datebook/qpe-datebook.control
new file mode 100644
index 0000000..c6ab81a
--- a/dev/null
+++ b/core/pim/datebook/qpe-datebook.control
@@ -0,0 +1,9 @@
+Files: bin/datebook apps/Applications/datebook.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: A datebook/appointment manager
+ A datebook/appointment manager for the Qtopia environment.
diff --git a/core/pim/datebook/repeatentry.cpp b/core/pim/datebook/repeatentry.cpp
new file mode 100644
index 0000000..5637c4d
--- a/dev/null
+++ b/core/pim/datebook/repeatentry.cpp
@@ -0,0 +1,595 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "repeatentry.h"
+
+#include <qpe/datebookmonth.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/timestring.h>
+
+#include <qbuttongroup.h>
+#include <qlabel.h>
+#include <qpopupmenu.h>
+#include <qspinbox.h>
+#include <qtoolbutton.h>
+
+#include <time.h>
+
+// Global Templates for use in setting up the repeat label...
+const QString strDayTemplate = QObject::tr("Every");
+const QString strYearTemplate = QObject::tr("%1 %2 every ");
+const QString strMonthDateTemplate = QObject::tr("The %1 every ");
+const QString strMonthDayTemplate = QObject::tr("The %1 %1 of every");
+const QString strWeekTemplate = QObject::tr("Every ");
+const QString dayLabel[] = { QObject::tr("Monday"),
+ QObject::tr("Tuesday"),
+ QObject::tr("Wednesday"),
+ QObject::tr("Thursday"),
+ QObject::tr("Friday"),
+ QObject::tr("Saturday"),
+ QObject::tr("Sunday") };
+
+
+static QString numberPlacing( int x ); // return the proper word format for
+ // x (1st, 2nd, etc)
+static int week( const QDate &dt ); // what week in the month is dt?
+
+RepeatEntry::RepeatEntry( bool startOnMonday,
+ const QDate &newStart, QWidget *parent,
+ const char *name, bool modal, WFlags fl )
+ : RepeatEntryBase( parent, name, modal, fl ),
+ start( newStart ),
+ currInterval( NONE ),
+ startWeekOnMonday( startOnMonday )
+{
+ init();
+ fraType->setButton( currInterval );
+ chkNoEnd->setChecked( TRUE );
+ setupNone();
+}
+
+RepeatEntry::RepeatEntry( bool startOnMonday, const Event::RepeatPattern &rp,
+ const QDate &startDate,
+ QWidget *parent, const char *name, bool modal,
+ WFlags fl )
+ : RepeatEntryBase( parent, name, modal, fl ),
+ start( startDate ),
+ end( rp.endDate() ),
+ startWeekOnMonday( startOnMonday )
+{
+ // do some stuff with the repeat pattern
+ init();
+ switch ( rp.type ) {
+ default:
+ case Event::NoRepeat:
+ currInterval = NONE;
+ setupNone();
+ break;
+ case Event::Daily:
+ currInterval = DAY;
+ setupDaily();
+ break;
+ case Event::Weekly:
+ currInterval = WEEK;
+ setupWeekly();
+ int day, buttons;
+ for ( day = 0x01, buttons = 0; buttons < 7;
+ day = day << 1, buttons++ ) {
+ if ( rp.days & day ) {
+ if ( startWeekOnMonday )
+ fraExtra->setButton( buttons );
+ else {
+ if ( buttons == 7 )
+ fraExtra->setButton( 0 );
+ else
+ fraExtra->setButton( buttons + 1 );
+ }
+ }
+ }
+ slotWeekLabel();
+ break;
+ case Event::MonthlyDay:
+ currInterval = MONTH;
+ setupMonthly();
+ fraExtra->setButton( 0 );
+ slotMonthLabel( 0 );
+ break;
+ case Event::MonthlyDate:
+ currInterval = MONTH;
+ setupMonthly();
+ fraExtra->setButton( 1 );
+ slotMonthLabel( 1 );
+ break;
+ case Event::Yearly:
+ currInterval = YEAR;
+ setupYearly();
+ break;
+ }
+ fraType->setButton( currInterval );
+ spinFreq->setValue( rp.frequency );
+ if ( !rp.hasEndDate ) {
+ cmdEnd->setText( RepeatEntryBase::tr("No End Date") );
+ chkNoEnd->setChecked( TRUE );
+ } else
+ cmdEnd->setText( TimeString::shortDate( end ) );
+}
+
+RepeatEntry::~RepeatEntry()
+{
+}
+
+Event::RepeatPattern RepeatEntry::repeatPattern()
+{
+ QListIterator<QToolButton> it( listRTypeButtons );
+ QListIterator<QToolButton> itExtra( listExtra );
+ Event::RepeatPattern rpTmp;
+ int i;
+ for ( i = 0; *it; ++it, i++ ) {
+ if ( (*it)->isOn() ) {
+ switch ( i ) {
+ case NONE:
+ rpTmp.type = Event::NoRepeat;
+ break;
+ case DAY:
+ rpTmp.type = Event::Daily;
+ break;
+ case WEEK:
+ rpTmp.type = Event::Weekly;
+ rpTmp.days = 0;
+ int day;
+ for ( day = 1; *itExtra; ++itExtra, day = day << 1 ) {
+ if ( (*itExtra)->isOn() ) {
+ if ( startWeekOnMonday )
+ rpTmp.days |= day;
+ else {
+ if ( day == 1 )
+ rpTmp.days |= Event::SUN;
+ else
+ rpTmp.days |= day >> 1;
+ }
+ }
+ }
+ break;
+ case MONTH:
+ if ( cmdExtra1->isOn() )
+ rpTmp.type = Event::MonthlyDay;
+ else if ( cmdExtra2->isOn() )
+ rpTmp.type = Event::MonthlyDate;
+ // figure out the montly day...
+ rpTmp.position = week( start );
+ break;
+ case YEAR:
+ rpTmp.type = Event::Yearly;
+ break;
+ }
+ break; // no need to keep looking!
+ }
+ }
+ rpTmp.frequency = spinFreq->value();
+ rpTmp.hasEndDate = !chkNoEnd->isChecked();
+ if ( rpTmp.hasEndDate ) {
+ rpTmp.setEndDate( end );
+ }
+ // timestamp it...
+ rpTmp.createTime = time( NULL );
+ return rpTmp;
+}
+
+void RepeatEntry::slotSetRType( int rtype )
+{
+ // now call the right function based on the type...
+ currInterval = static_cast<repeatButtons>(rtype);
+ switch ( currInterval ) {
+ case NONE:
+ setupNone();
+ break;
+ case DAY:
+ setupDaily();
+ break;
+ case WEEK:
+ setupWeekly();
+ slotWeekLabel();
+ break;
+ case MONTH:
+ setupMonthly();
+ cmdExtra2->setOn( TRUE );
+ slotMonthLabel( 1 );
+ break;
+ case YEAR:
+ setupYearly();
+ break;
+ }
+}
+
+void RepeatEntry::setupNone()
+{
+ lblRepeat->setText( tr("No Repeat") );
+ lblVar1->hide();
+ lblVar2->hide();
+ hideExtras();
+ cmdEnd->hide();
+ lblFreq->hide();
+ lblEvery->hide();
+ lblFreq->hide();
+ spinFreq->hide();
+ lblEnd->hide();
+ lblWeekVar->hide();
+}
+
+void RepeatEntry::setupDaily()
+{
+ hideExtras();
+ lblWeekVar->hide();
+ spinFreq->setValue( 1 );
+ lblFreq->setText( tr("day(s)") );
+ lblVar2->show();
+ showRepeatStuff();
+ lblRepeat->setText( strDayTemplate );
+ setupRepeatLabel( 1 );
+}
+
+void RepeatEntry::setupWeekly()
+{
+ // reshow the buttons...
+ fraExtra->setTitle( RepeatEntryBase::tr("Repeat On") );
+ fraExtra->setExclusive( FALSE );
+ fraExtra->show();
+ if ( startWeekOnMonday ) {
+ cmdExtra1->setText( RepeatEntryBase::tr("Mon") );
+ cmdExtra2->setText( RepeatEntryBase::tr("Tue") );
+ cmdExtra3->setText( RepeatEntryBase::tr("Wed") );
+ cmdExtra4->setText( RepeatEntryBase::tr("Thu") );
+ cmdExtra5->setText( RepeatEntryBase::tr("Fri") );
+ cmdExtra6->setText( RepeatEntryBase::tr("Sat") );
+ cmdExtra7->setText( RepeatEntryBase::tr("Sun") );
+ } else {
+ cmdExtra1->setText( RepeatEntryBase::tr("Sun") );
+ cmdExtra2->setText( RepeatEntryBase::tr("Mon") );
+ cmdExtra3->setText( RepeatEntryBase::tr("Tue") );
+ cmdExtra4->setText( RepeatEntryBase::tr("Wed") );
+ cmdExtra5->setText( RepeatEntryBase::tr("Thu") );
+ cmdExtra6->setText( RepeatEntryBase::tr("Fri") );
+ cmdExtra7->setText( RepeatEntryBase::tr("Sat") );
+ }
+ // I hope clustering these improve performance....
+ cmdExtra1->setOn( FALSE );
+ cmdExtra2->setOn( FALSE );
+ cmdExtra3->setOn( FALSE );
+ cmdExtra4->setOn( FALSE );
+ cmdExtra5->setOn( FALSE );
+ cmdExtra6->setOn( FALSE );
+ cmdExtra7->setOn( FALSE );
+
+ cmdExtra1->show();
+ cmdExtra2->show();
+ cmdExtra3->show();
+ cmdExtra4->show();
+ cmdExtra5->show();
+ cmdExtra6->show();
+ cmdExtra7->show();
+
+ lblWeekVar->show();
+ spinFreq->setValue( 1 );
+ // might as well set the day too...
+ if ( startWeekOnMonday ) {
+ fraExtra->setButton( start.dayOfWeek() - 1 );
+ } else {
+ fraExtra->setButton( start.dayOfWeek() % 7 );
+ }
+ lblFreq->setText( tr("week(s)") );
+ lblVar2->show();
+ showRepeatStuff();
+ setupRepeatLabel( 1 );
+}
+
+void RepeatEntry::setupMonthly()
+{
+ hideExtras();
+ lblWeekVar->hide();
+ fraExtra->setTitle( tr("Repeat By") );
+ fraExtra->setExclusive( TRUE );
+ fraExtra->show();
+ cmdExtra1->setText( tr("Day") );
+ cmdExtra1->show();
+ cmdExtra2->setText( tr("Date") );
+ cmdExtra2->show();
+ spinFreq->setValue( 1 );
+ lblFreq->setText( tr("month(s)") );
+ lblVar2->show();
+ showRepeatStuff();
+ setupRepeatLabel( 1 );
+}
+
+void RepeatEntry::setupYearly()
+{
+ hideExtras();
+ lblWeekVar->hide();
+ spinFreq->setValue( 1 );
+ lblFreq->setText( tr("year(s)") );
+ lblFreq->show();
+ lblFreq->show();
+ showRepeatStuff();
+ lblVar2->show();
+ QString strEvery = strYearTemplate.arg( start.monthName(start.month()) ).arg( numberPlacing(start.day()) );
+ lblRepeat->setText( strEvery );
+ setupRepeatLabel( 1 );
+
+}
+
+void RepeatEntry::init()
+{
+ QPopupMenu *m1 = new QPopupMenu( this );
+ repeatPicker = new DateBookMonth( m1, 0, TRUE );
+ m1->insertItem( repeatPicker );
+ cmdEnd->setPopup( m1 );
+ cmdEnd->setPopupDelay( 0 );
+
+ QObject::connect( repeatPicker, SIGNAL(dateClicked(int, int, int)),
+ this, SLOT(endDateChanged(int, int, int)) );
+ QObject::connect( qApp, SIGNAL(weekChanged(bool)),
+ this, SLOT(slotChangeStartOfWeek(bool)) );
+
+ listRTypeButtons.setAutoDelete( TRUE );
+ listRTypeButtons.append( cmdNone );
+ listRTypeButtons.append( cmdDay );
+ listRTypeButtons.append( cmdWeek );
+ listRTypeButtons.append( cmdMonth );
+ listRTypeButtons.append( cmdYear );
+
+ listExtra.setAutoDelete( TRUE );
+ listExtra.append( cmdExtra1 );
+ listExtra.append( cmdExtra2 );
+ listExtra.append( cmdExtra3 );
+ listExtra.append( cmdExtra4 );
+ listExtra.append( cmdExtra5 );
+ listExtra.append( cmdExtra6 );
+ listExtra.append( cmdExtra7 );
+}
+
+void RepeatEntry::slotNoEnd( bool unused )
+{
+ // if the item was toggled, then go ahead and set it to the maximum date
+ if ( unused ) {
+ end.setYMD( 3000, 12, 31 );
+ cmdEnd->setText( RepeatEntryBase::tr("No End Date") );
+ } else {
+ end = start;
+ cmdEnd->setText( TimeString::shortDate(end) );
+ }
+}
+
+void RepeatEntry::endDateChanged( int y, int m, int d )
+{
+ end.setYMD( y, m, d );
+ if ( end < start )
+ end = start;
+ cmdEnd->setText( TimeString::shortDate( end ) );
+ repeatPicker->setDate( end.year(), end.month(), end.day() );
+}
+
+void RepeatEntry::setupRepeatLabel( const QString &s )
+{
+ lblVar1->setText( s );
+}
+
+void RepeatEntry::setupRepeatLabel( int x )
+{
+ // change the spelling based on the value of x
+ QString strVar2;
+
+ if ( x > 1 )
+ lblVar1->show();
+ else
+ lblVar1->hide();
+
+ switch ( currInterval ) {
+ case NONE:
+ break;
+ case DAY:
+ if ( x > 1 )
+ strVar2 = tr( "days" );
+ else
+ strVar2 = tr( "day" );
+ break;
+ case WEEK:
+ if ( x > 1 )
+ strVar2 = tr( "weeks" );
+ else
+ strVar2 = tr( "week" );
+ break;
+ case MONTH:
+ if ( x > 1 )
+ strVar2 = RepeatEntryBase::tr( "months" );
+ else
+ strVar2 = tr( "month" );
+ break;
+ case YEAR:
+ if ( x > 1 )
+ strVar2 = RepeatEntryBase::tr( "years" );
+ else
+ strVar2 = tr( "year" );
+ break;
+ }
+ if ( !strVar2.isNull() )
+ lblVar2->setText( strVar2 );
+}
+
+void RepeatEntry::showRepeatStuff()
+{
+ cmdEnd->show();
+ chkNoEnd->show();
+ lblFreq->show();
+ lblEvery->show();
+ lblFreq->show();
+ spinFreq->show();
+ lblEnd->show();
+ lblRepeat->setText( RepeatEntryBase::tr("Every") );
+}
+
+void RepeatEntry::slotWeekLabel()
+{
+ QString str;
+ QListIterator<QToolButton> it( listExtra );
+ unsigned int i;
+ unsigned int keepMe;
+ bool bNeedCarriage = FALSE;
+ // don't do something we'll regret!!!
+ if ( currInterval != WEEK )
+ return;
+
+ if ( startWeekOnMonday )
+ keepMe = start.dayOfWeek() - 1;
+ else
+ keepMe = start.dayOfWeek() % 7;
+
+ QStringList list;
+ for ( i = 0; *it; ++it, i++ ) {
+ // a crazy check, if you are repeating weekly, the current day
+ // must be selected!!!
+ if ( i == keepMe && !( (*it)->isOn() ) )
+ (*it)->setOn( TRUE );
+ if ( (*it)->isOn() ) {
+ if ( startWeekOnMonday )
+ list.append( dayLabel[i] );
+ else {
+ if ( i == 0 )
+ list.append( dayLabel[6] );
+ else
+ list.append( dayLabel[i - 1] );
+ }
+ }
+ }
+ QStringList::Iterator itStr;
+ for ( i = 0, itStr = list.begin(); itStr != list.end(); ++itStr, i++ ) {
+ if ( i == 3 )
+ bNeedCarriage = TRUE;
+ else
+ bNeedCarriage = FALSE;
+ if ( str.isNull() )
+ str = *itStr;
+ else if ( i == list.count() - 1 ) {
+ if ( i < 2 )
+ str += tr(" and ") + *itStr;
+ else {
+ if ( bNeedCarriage )
+ str += tr( ",\nand " ) + *itStr;
+ else
+ str += tr( ", and " ) + *itStr;
+ }
+ } else {
+ if ( bNeedCarriage )
+ str += ",\n" + *itStr;
+ else
+ str += ", " + *itStr;
+ }
+ }
+ str = str.prepend( "on " );
+ lblWeekVar->setText( str );
+}
+
+void RepeatEntry::slotMonthLabel( int type )
+{
+ QString str;
+ if ( currInterval != MONTH || type > 1 )
+ return;
+ if ( type == 1 )
+ str = strMonthDateTemplate.arg( numberPlacing(start.day()) );
+ else
+ str = strMonthDayTemplate.arg( numberPlacing(week(start)))
+ .arg( dayLabel[start.dayOfWeek() - 1] );
+ lblRepeat->setText( str );
+}
+
+void RepeatEntry::slotChangeStartOfWeek( bool onMonday )
+{
+ startWeekOnMonday = onMonday;
+ // we need to make this unintrusive as possible...
+ int saveSpin = spinFreq->value();
+ char days = 0;
+ int day;
+ QListIterator<QToolButton> itExtra( listExtra );
+ for ( day = 1; *itExtra; ++itExtra, day = day << 1 ) {
+ if ( (*itExtra)->isOn() ) {
+ if ( !startWeekOnMonday )
+ days |= day;
+ else {
+ if ( day == 1 )
+ days |= Event::SUN;
+ else
+ days |= day >> 1;
+ }
+ }
+ }
+ setupWeekly();
+ spinFreq->setValue( saveSpin );
+ int buttons;
+ for ( day = 0x01, buttons = 0; buttons < 7;
+ day = day << 1, buttons++ ) {
+ if ( days & day ) {
+ if ( startWeekOnMonday )
+ fraExtra->setButton( buttons );
+ else {
+ if ( buttons == 7 )
+ fraExtra->setButton( 0 );
+ else
+ fraExtra->setButton( buttons + 1 );
+ }
+ }
+ }
+ slotWeekLabel();
+}
+
+static int week( const QDate &start )
+{
+ // figure out the week...
+ int stop = start.day(),
+ sentinel = start.dayOfWeek(),
+ dayOfWeek = QDate( start.year(), start.month(), 1 ).dayOfWeek(),
+ week = 1,
+ i;
+ for ( i = 1; i < stop; i++ ) {
+ if ( dayOfWeek++ == sentinel )
+ week++;
+ if ( dayOfWeek > 7 )
+ dayOfWeek = 0;
+ }
+ return week;
+}
+
+static QString numberPlacing( int x )
+{
+ // I hope this works in other languages besides english...
+ QString str = QString::number( x );
+ switch ( x % 10 ) {
+ case 1:
+ str += QWidget::tr( "st" );
+ break;
+ case 2:
+ str += QWidget::tr( "nd" );
+ break;
+ case 3:
+ str += QWidget::tr( "rd" );
+ break;
+ default:
+ str += QWidget::tr( "th" );
+ break;
+ }
+ return str;
+}
diff --git a/core/pim/datebook/repeatentry.h b/core/pim/datebook/repeatentry.h
new file mode 100644
index 0000000..949fecd
--- a/dev/null
+++ b/core/pim/datebook/repeatentry.h
@@ -0,0 +1,98 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef REPEATENTRY_H
+#define REPEATENTRY_H
+
+#include "repeatentrybase.h"
+
+#include <qpe/event.h>
+
+#include <qcheckbox.h>
+#include <qbuttongroup.h>
+#include <qdatetime.h>
+#include <qlist.h>
+#include <qtoolbutton.h>
+
+class DateBookMonth;
+
+class RepeatEntry : public RepeatEntryBase
+{
+ Q_OBJECT
+public:
+ RepeatEntry( bool startOnMonday,
+ const QDate &start, QWidget *parent = 0, const char *name = 0,
+ bool modal = TRUE, WFlags fl = 0 );
+ RepeatEntry( bool startOnMonday,
+ const Event::RepeatPattern &rp, const QDate &start,
+ QWidget *parent = 0, const char *name = 0, bool modal = TRUE,
+ WFlags fl = 0 );
+ ~RepeatEntry();
+
+ Event::RepeatPattern repeatPattern();
+ QDate endDate() { return end; };
+
+public slots:
+ void slotSetRType( int );
+ void endDateChanged( int, int, int );
+ void slotNoEnd( bool unused );
+
+private slots:
+ void setupRepeatLabel( const QString& );
+ void setupRepeatLabel( int );
+ void slotWeekLabel();
+ void slotMonthLabel( int );
+ void slotChangeStartOfWeek( bool onMonday );
+
+private:
+ void setupNone();
+ void setupDaily();
+ void setupWeekly();
+ void setupMonthly();
+ void setupYearly();
+
+ enum repeatButtons { NONE, DAY, WEEK, MONTH, YEAR };
+ void init();
+ inline void hideExtras();
+ void showRepeatStuff();
+
+ QList<QToolButton> listRTypeButtons;
+ QList<QToolButton> listExtra;
+ QDate start; // only used in one spot...
+ QDate end;
+ repeatButtons currInterval;
+ bool startWeekOnMonday;
+ DateBookMonth *repeatPicker;
+};
+
+inline void RepeatEntry::hideExtras()
+{
+ // hide the extra buttons...
+ fraExtra->hide();
+ chkNoEnd->hide();
+ QListIterator<QToolButton> it( listExtra );
+ for ( ; *it; ++it ) {
+ (*it)->hide();
+ (*it)->setOn( FALSE );
+ }
+
+}
+
+#endif
diff --git a/core/pim/datebook/repeatentrybase.ui b/core/pim/datebook/repeatentrybase.ui
new file mode 100644
index 0000000..9621d74
--- a/dev/null
+++ b/core/pim/datebook/repeatentrybase.ui
@@ -0,0 +1,713 @@
+<!DOCTYPE UI><UI>
+<class>RepeatEntryBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+*********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>RepeatEntryBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>250</width>
+ <height>309</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Repeating Event </string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget>
+ <class>QButtonGroup</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>fraType</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>exclusive</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdNone</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>None</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDay</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Day</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdWeek</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Week</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdMonth</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Month</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdYear</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Year</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblEvery</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Every:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spinFreq</cstring>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>1</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblFreq</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Frequency</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout8</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblEnd</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>End On:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdEnd</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>No End Date</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>chkNoEnd</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>No End Date</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QButtonGroup</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>fraExtra</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Repeat On</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdExtra1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Mon</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdExtra2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Tue</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdExtra3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Wed</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdExtra4</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Thu</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdExtra5</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Fri</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdExtra6</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Sat</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdExtra7</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Sun</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QFrame</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Frame3</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout6</cstring>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblRepeat</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>3</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Every</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignTop|AlignLeft</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblVar1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Var1</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignTop|AlignLeft</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblVar2</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Var 2</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignTop|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblWeekVar</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>WeekVar</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignTop|AlignHCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>chkNoEnd</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdEnd</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>chkNoEnd</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>RepeatEntryBase</receiver>
+ <slot>slotNoEnd(bool)</slot>
+ </connection>
+ <connection>
+ <sender>spinFreq</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>lblVar1</receiver>
+ <slot>setNum(int)</slot>
+ </connection>
+ <connection>
+ <sender>spinFreq</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>RepeatEntryBase</receiver>
+ <slot>setupRepeatLabel( int )</slot>
+ </connection>
+ <connection>
+ <sender>fraType</sender>
+ <signal>clicked(int)</signal>
+ <receiver>RepeatEntryBase</receiver>
+ <slot>slotSetRType( int )</slot>
+ </connection>
+ <connection>
+ <sender>fraExtra</sender>
+ <signal>clicked(int)</signal>
+ <receiver>RepeatEntryBase</receiver>
+ <slot>slotMonthLabel( int )</slot>
+ </connection>
+ <connection>
+ <sender>fraExtra</sender>
+ <signal>clicked(int)</signal>
+ <receiver>RepeatEntryBase</receiver>
+ <slot>slotWeekLabel()</slot>
+ </connection>
+ <slot access="public">setupRepeatLabel( const QString &amp; )</slot>
+ <slot access="public">setupRepeatLabel( int )</slot>
+ <slot access="public">slotMonthLabel( int )</slot>
+ <slot access="public">slotNoEnd(bool)</slot>
+ <slot access="public">slotSetRType( int )</slot>
+ <slot access="public">slotWeekLabel()</slot>
+</connections>
+</UI>
diff --git a/core/pim/todo/.cvsignore b/core/pim/todo/.cvsignore
new file mode 100644
index 0000000..5ed04d8
--- a/dev/null
+++ b/core/pim/todo/.cvsignore
@@ -0,0 +1,4 @@
+moc_*
+Makefile
+todoentry.h
+todoentry.cpp
diff --git a/core/pim/todo/Makefile.in b/core/pim/todo/Makefile.in
new file mode 100644
index 0000000..f3c5f0e
--- a/dev/null
+++ b/core/pim/todo/Makefile.in
@@ -0,0 +1,201 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = todolist
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = mainwindow.h \
+ todotable.h \
+ todoentryimpl.h
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ todotable.cpp \
+ todoentryimpl.cpp
+OBJECTS = main.o \
+ mainwindow.o \
+ todotable.o \
+ todoentryimpl.o \
+ todoentry.o
+INTERFACES = todoentry.ui
+UICDECLS = todoentry.h
+UICIMPLS = todoentry.cpp
+SRCMOC = moc_mainwindow.cpp \
+ moc_todotable.cpp \
+ moc_todoentryimpl.cpp \
+ moc_todoentry.cpp
+OBJMOC = moc_mainwindow.o \
+ moc_todotable.o \
+ moc_todoentryimpl.o \
+ moc_todoentry.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake todo.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ mainwindow.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+mainwindow.o: mainwindow.cpp \
+ mainwindow.h \
+ todoentryimpl.h \
+ todoentry.h \
+ $(QPEDIR)/include/qpe/task.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/stringutil.h \
+ todotable.h \
+ $(QPEDIR)/include/qpe/categories.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/finddialog.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/ir.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpemessagebox.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+todotable.o: todotable.cpp \
+ todotable.h \
+ $(QPEDIR)/include/qpe/categories.h \
+ $(QPEDIR)/include/qpe/task.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/stringutil.h \
+ $(QPEDIR)/include/qpe/categoryselect.h \
+ $(QPEDIR)/include/qpe/xmlreader.h
+
+todoentryimpl.o: todoentryimpl.cpp \
+ todoentryimpl.h \
+ todoentry.h \
+ $(QPEDIR)/include/qpe/task.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/stringutil.h \
+ $(QPEDIR)/include/qpe/categoryselect.h \
+ $(QPEDIR)/include/qpe/datebookmonth.h \
+ $(QPEDIR)/include/qpe/event.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/imageedit.h \
+ $(QPEDIR)/include/qpe/timestring.h
+
+todoentry.h: todoentry.ui
+ $(UIC) todoentry.ui -o $(INTERFACE_DECL_PATH)/todoentry.h
+
+todoentry.cpp: todoentry.ui
+ $(UIC) todoentry.ui -i todoentry.h -o todoentry.cpp
+
+todoentry.o: todoentry.cpp \
+ todoentry.h \
+ todoentry.ui
+
+moc_mainwindow.o: moc_mainwindow.cpp \
+ mainwindow.h
+
+moc_todotable.o: moc_todotable.cpp \
+ todotable.h \
+ $(QPEDIR)/include/qpe/categories.h \
+ $(QPEDIR)/include/qpe/task.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/stringutil.h
+
+moc_todoentryimpl.o: moc_todoentryimpl.cpp \
+ todoentryimpl.h \
+ todoentry.h \
+ $(QPEDIR)/include/qpe/task.h \
+ $(QPEDIR)/include/qpe/palmtoprecord.h \
+ $(QPEDIR)/include/qpe/stringutil.h
+
+moc_todoentry.o: moc_todoentry.cpp \
+ todoentry.h
+
+moc_mainwindow.cpp: mainwindow.h
+ $(MOC) mainwindow.h -o moc_mainwindow.cpp
+
+moc_todotable.cpp: todotable.h
+ $(MOC) todotable.h -o moc_todotable.cpp
+
+moc_todoentryimpl.cpp: todoentryimpl.h
+ $(MOC) todoentryimpl.h -o moc_todoentryimpl.cpp
+
+moc_todoentry.cpp: todoentry.h
+ $(MOC) todoentry.h -o moc_todoentry.cpp
+
+
diff --git a/core/pim/todo/main.cpp b/core/pim/todo/main.cpp
new file mode 100644
index 0000000..4e1c8a1
--- a/dev/null
+++ b/core/pim/todo/main.cpp
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "mainwindow.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication a( argc, argv );
+
+ TodoWindow mw;
+ QObject::connect( &a, SIGNAL( flush() ), &mw, SLOT( flush() ) );
+ QObject::connect( &a, SIGNAL( reload() ), &mw, SLOT( reload() ) );
+
+ a.showMainWidget(&mw);
+
+ return a.exec();
+}
diff --git a/core/pim/todo/mainwindow.cpp b/core/pim/todo/mainwindow.cpp
new file mode 100644
index 0000000..fb85a09
--- a/dev/null
+++ b/core/pim/todo/mainwindow.cpp
@@ -0,0 +1,466 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "mainwindow.h"
+#include "todoentryimpl.h"
+#include "todotable.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include <qpe/finddialog.h>
+#include <qpe/global.h>
+#include <qpe/ir.h>
+#include <qpe/qpemenubar.h>
+#include <qpe/qpemessagebox.h>
+#include <qpe/resource.h>
+#include <qpe/task.h>
+#include <qpe/qpetoolbar.h>
+
+#include <qaction.h>
+#include <qarray.h>
+#include <qdatastream.h>
+#include <qdatetime.h>
+#include <qfile.h>
+#include <qmessagebox.h>
+#include <qpopupmenu.h>
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <stdlib.h>
+
+static QString todolistXMLFilename()
+{
+ return Global::applicationFileName("todolist","todolist.xml");
+}
+
+static QString categoriesXMLFilename()
+{
+ return Global::applicationFileName("todolist","categories.xml");
+}
+
+TodoWindow::TodoWindow( QWidget *parent, const char *name, WFlags f = 0 ) :
+ QMainWindow( parent, name, f ), syncing(FALSE)
+{
+// QTime t;
+// t.start();
+
+ setCaption( tr("Todo") );
+ QString str;
+ table = new TodoTable( this );
+ table->setColumnWidth( 2, 10 );
+ table->setPaintingEnabled( FALSE );
+ table->setUpdatesEnabled( FALSE );
+ table->viewport()->setUpdatesEnabled( FALSE );
+
+ {
+ str = todolistXMLFilename();
+ if ( str.isNull() )
+ QMessageBox::critical( this,
+ tr("Out of Space"),
+ tr("Unable to create startup files\n"
+ "Free up some space\n"
+ "before you enter any data") );
+ else
+ table->load( str );
+ }
+
+ // repeat for categories...
+ str = categoriesXMLFilename();
+ if ( str.isNull() )
+ QMessageBox::critical( this,
+ tr( "Out of Space" ),
+ tr( "Unable to create startup files\n"
+ "Free up some space\n"
+ "before you enter any data") );
+
+ setCentralWidget( table );
+ setToolBarsMovable( FALSE );
+
+// qDebug("after load: t=%d", t.elapsed() );
+
+ Config config( "todo" );
+ config.setGroup( "View" );
+ bool complete = config.readBoolEntry( "ShowComplete", true );
+ table->setShowCompleted( complete );
+ QString category = config.readEntry( "Category", QString::null );
+ table->setShowCategory( category );
+
+ QPEToolBar *bar = new QPEToolBar( this );
+ bar->setHorizontalStretchable( TRUE );
+
+ QPEMenuBar *mb = new QPEMenuBar( bar );
+
+ catMenu = new QPopupMenu( this );
+ QPopupMenu *edit = new QPopupMenu( this );
+ contextMenu = new QPopupMenu( this );
+
+ bar = new QPEToolBar( this );
+
+ QAction *a = new QAction( tr( "New Task" ), Resource::loadPixmap( "new" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ),
+ this, SLOT( slotNew() ) );
+ a->addTo( bar );
+ a->addTo( edit );
+ a = new QAction( tr( "Edit" ), Resource::loadIconSet( "edit" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ),
+ this, SLOT( slotEdit() ) );
+ a->addTo( bar );
+ a->addTo( edit );
+ a->addTo( contextMenu );
+ a->setEnabled( FALSE );
+ editAction = a;
+ a = new QAction( tr( "Delete" ), Resource::loadIconSet( "trash" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ),
+ this, SLOT( slotDelete() ) );
+ a->addTo( bar );
+ a->addTo( edit );
+ a->addTo( contextMenu );
+ a->setEnabled( FALSE );
+ deleteAction = a;
+
+ if ( Ir::supported() ) {
+ a = new QAction( tr( "Beam" ), Resource::loadPixmap( "beam" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ),
+ this, SLOT( slotBeam() ) );
+ a->addTo( edit );
+ a->addTo( bar );
+ }
+
+ a = new QAction( tr( "Find" ), Resource::loadIconSet( "mag" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ),
+ this, SLOT( slotFind() ) );
+ a->addTo( bar );
+ a->addTo( edit );
+ if ( table->numRows() )
+ a->setEnabled( TRUE );
+ else
+ a->setEnabled( FALSE );
+
+ //a->setEnabled( FALSE );
+ findAction = a;
+// qDebug("mainwindow #2: t=%d", t.elapsed() );
+
+ completedAction = new QAction( QString::null, tr("Completed tasks"), 0, this, 0, TRUE );
+
+ catMenu->setCheckable( true );
+ populateCategories();
+
+ mb->insertItem( tr( "Task" ), edit );
+ mb->insertItem( tr( "View" ), catMenu );
+
+ resize( 200, 300 );
+ if ( table->numRows() > 0 )
+ currentEntryChanged( 0, 0 );
+ connect( table, SIGNAL( signalEdit() ),
+ this, SLOT( slotEdit() ) );
+ connect( table, SIGNAL(signalShowMenu(const QPoint &)),
+ this, SLOT( slotShowPopup(const QPoint &)) );
+
+// qDebug("mainwindow #3: t=%d", t.elapsed() );
+ table->updateVisible();
+ table->setUpdatesEnabled( TRUE );
+ table->setPaintingEnabled( TRUE );
+ table->viewport()->setUpdatesEnabled( TRUE );
+
+ connect( completedAction, SIGNAL( toggled(bool) ), this, SLOT( showCompleted(bool) ) );
+ connect( catMenu, SIGNAL(activated(int)), this, SLOT(setCategory(int)) );
+ connect( table, SIGNAL( currentChanged( int, int ) ),
+ this, SLOT( currentEntryChanged( int, int ) ) );
+
+// qDebug("done: t=%d", t.elapsed() );
+}
+
+void TodoWindow::slotNew()
+{
+ if(syncing) {
+ QMessageBox::warning(this, tr("Todo"),
+ tr("Can not edit data, currently syncing"));
+ return;
+ }
+
+ int id;
+ id = -1;
+ QArray<int> ids;
+ ids = table->currentEntry().categories();
+ if ( ids.count() )
+ id = ids[0];
+ NewTaskDialog e( id, this, 0, TRUE );
+
+ Task todo;
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ e.showMaximized();
+#endif
+ int ret = e.exec();
+
+ if ( ret == QDialog::Accepted ) {
+ table->setPaintingEnabled( false );
+ todo = e.todoEntry();
+ todo.assignUid();
+ table->addEntry( todo );
+ table->setPaintingEnabled( true );
+ findAction->setEnabled( TRUE );
+ }
+ // I'm afraid we must call this every time now, otherwise
+ // spend expensive time comparing all these strings...
+ populateCategories();
+}
+
+TodoWindow::~TodoWindow()
+{
+}
+
+void TodoWindow::slotDelete()
+{
+ if(syncing) {
+ QMessageBox::warning(this, tr("Todo"),
+ tr("Can not edit data, currently syncing"));
+ return;
+ }
+
+ if ( table->currentRow() == -1 )
+ return;
+
+ QString strName = table->text( table->currentRow(), 2 ).left( 30 );
+
+ if ( !QPEMessageBox::confirmDelete( this, tr( "Todo" ), strName ) )
+ return;
+
+
+
+ table->setPaintingEnabled( false );
+ table->removeCurrentEntry();
+ table->setPaintingEnabled( true );
+
+ if ( table->numRows() == 0 ) {
+ currentEntryChanged( -1, 0 );
+ findAction->setEnabled( FALSE );
+ }
+}
+
+void TodoWindow::slotEdit()
+{
+ if(syncing) {
+ QMessageBox::warning(this, tr("Todo"),
+ tr("Can not edit data, currently syncing"));
+ return;
+ }
+
+ Task todo = table->currentEntry();
+
+ NewTaskDialog e( todo, this, 0, TRUE );
+ e.setCaption( tr( "Edit Task" ) );
+
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ e.showMaximized();
+#endif
+ int ret = e.exec();
+
+ if ( ret == QDialog::Accepted ) {
+ table->setPaintingEnabled( false );
+ todo = e.todoEntry();
+ table->replaceCurrentEntry( todo );
+ table->setPaintingEnabled( true );
+ }
+ populateCategories();
+
+}
+
+void TodoWindow::slotShowPopup( const QPoint &p )
+{
+ contextMenu->popup( p );
+}
+
+void TodoWindow::showCompleted( bool s )
+{
+ if ( !table->isUpdatesEnabled() )
+ return;
+ table->setPaintingEnabled( false );
+ table->setShowCompleted( s );
+ table->setPaintingEnabled( true );
+}
+
+void TodoWindow::currentEntryChanged( int r, int )
+{
+ if ( r != -1 && table->rowHeight( r ) > 0 ) {
+ editAction->setEnabled( TRUE );
+ deleteAction->setEnabled( TRUE );
+ } else {
+ editAction->setEnabled( FALSE );
+ deleteAction->setEnabled( FALSE );
+ }
+}
+
+void TodoWindow::setCategory( int c )
+{
+ if ( c <= 0 ) return;
+ if ( !table->isUpdatesEnabled() )
+ return;
+ table->setPaintingEnabled( false );
+ for ( unsigned int i = 1; i < catMenu->count(); i++ )
+ catMenu->setItemChecked( i, c == (int)i );
+ if ( c == 1 ) {
+ table->setShowCategory( QString::null );
+ setCaption( tr("Todo") + " - " + tr( "All" ) );
+ } else if ( c == (int)catMenu->count() - 1 ) {
+ table->setShowCategory( tr( "Unfiled" ) );
+ setCaption( tr("Todo") + " - " + tr( "Unfiled" ) );
+ } else {
+ QString cat = table->categories()[c - 2];
+ table->setShowCategory( cat );
+ setCaption( tr("Todo") + " - " + cat );
+ }
+ table->setPaintingEnabled( true );
+}
+
+void TodoWindow::populateCategories()
+{
+ catMenu->clear();
+
+ completedAction->addTo( catMenu );
+ completedAction->setOn( table->showCompleted() );
+
+ int id,
+ rememberId;
+ id = 1;
+ catMenu->insertItem( tr( "All" ), id++ );
+// catMenu->insertSeparator();
+ QStringList categories = table->categories();
+ categories.append( tr( "Unfiled" ) );
+ for ( QStringList::Iterator it = categories.begin();
+ it != categories.end(); ++it ) {
+ catMenu->insertItem( *it, id );
+ if ( *it == table->showCategory() )
+ rememberId = id;
+ ++id;
+ }
+ if ( table->showCategory().isEmpty() )
+ setCategory( 1 );
+ else
+ setCategory( rememberId );
+}
+
+void TodoWindow::reload()
+{
+ table->clear();
+ table->load( todolistXMLFilename() );
+ syncing = FALSE;
+}
+
+void TodoWindow::flush()
+{
+ syncing = TRUE;
+ table->save( todolistXMLFilename() );
+}
+
+void TodoWindow::closeEvent( QCloseEvent *e )
+{
+ if(syncing) {
+ /* no need to save if in the middle of syncing */
+ e->accept();
+ return;
+ }
+
+ if ( table->save( todolistXMLFilename() ) ) {
+ e->accept();
+ // repeat for categories...
+ // if writing configs fail, it will emit an
+ // error, but I feel that it is "ok" for us to exit
+ // espically since we aren't told if the write succeeded...
+ Config config( "todo" );
+ config.setGroup( "View" );
+ config.writeEntry( "ShowComplete", table->showCompleted() );
+ config.writeEntry( "Category", table->showCategory() );
+ } else {
+ if ( QMessageBox::critical( this, tr("Out of space"),
+ tr("Todo was unable\n"
+ "to save your changes.\n"
+ "Free up some space\n"
+ "and try again.\n"
+ "\nQuit Anyway?"),
+ QMessageBox::Yes|QMessageBox::Escape,
+ QMessageBox::No|QMessageBox::Default)
+ != QMessageBox::No )
+ e->accept();
+ else
+ e->ignore();
+ }
+}
+
+void TodoWindow::slotFind()
+{
+ // put everything back to view all for searching...
+ if ( !catMenu->isItemChecked( 0 ) )
+ setCategory( 0 );
+
+ FindDialog dlg( "Todo List", this );
+ QObject::connect( &dlg,
+ SIGNAL(signalFindClicked(const QString &,
+ bool, bool, int)),
+ table,
+ SLOT(slotDoFind(const QString&, bool, bool, int)) );
+ QObject::connect( table, SIGNAL(signalNotFound()), &dlg,
+ SLOT(slotNotFound()) );
+ QObject::connect( table, SIGNAL(signalWrapAround()), &dlg,
+ SLOT(slotWrapAround()) );
+ dlg.exec();
+ if ( table->numSelections() )
+ table->clearSelection();
+ table->clearFindRow();
+}
+
+
+void TodoWindow::setDocument( const QString &filename )
+{
+ if ( filename.find(".vcs") != int(filename.length()) - 4 ) return;
+
+ QValueList<Task> tl = Task::readVCalendar( filename );
+ for( QValueList<Task>::Iterator it = tl.begin(); it != tl.end(); ++it ) {
+ table->addEntry( *it );
+ }
+}
+
+static const char * beamfile = "/tmp/obex/todo.vcs";
+
+void TodoWindow::slotBeam()
+{
+ unlink( beamfile ); // delete if exists
+ Task c = table->currentEntry();
+ mkdir("/tmp/obex/", 0755);
+ Task::writeVCalendar( beamfile, c );
+ Ir *ir = new Ir( this );
+ connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
+ QString description = c.description();
+ ir->send( beamfile, description, "text/x-vCalendar" );
+}
+
+void TodoWindow::beamDone( Ir *ir )
+{
+ delete ir;
+ unlink( beamfile );
+}
diff --git a/core/pim/todo/mainwindow.h b/core/pim/todo/mainwindow.h
new file mode 100644
index 0000000..f4fcd1b
--- a/dev/null
+++ b/core/pim/todo/mainwindow.h
@@ -0,0 +1,73 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <qmainwindow.h>
+
+class TodoTable;
+class QAction;
+class QPopupMenu;
+class Ir;
+
+class TodoWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ TodoWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~TodoWindow();
+
+public slots:
+ void flush();
+ void reload();
+
+protected slots:
+ void slotNew();
+ void slotDelete();
+ void slotEdit();
+ void slotShowPopup( const QPoint & );
+ void showCompleted( bool );
+ void currentEntryChanged( int r, int c );
+ void setCategory( int );
+ void slotFind();
+ void setDocument( const QString & );
+ void slotBeam();
+ void beamDone( Ir * );
+
+protected:
+ void closeEvent( QCloseEvent *e );
+
+private:
+ void populateCategories();
+
+private:
+ TodoTable *table;
+ QAction *editAction,
+ *deleteAction,
+ *findAction,
+ * completedAction;
+ QPopupMenu *contextMenu, *catMenu;
+
+ bool syncing;
+};
+
+#endif
diff --git a/core/pim/todo/qpe-todo.control b/core/pim/todo/qpe-todo.control
new file mode 100644
index 0000000..80195a0
--- a/dev/null
+++ b/core/pim/todo/qpe-todo.control
@@ -0,0 +1,9 @@
+Files: bin/todolist apps/Applications/todo.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: TODO-list manager
+ A Todo-list manager for the Qtopia environment.
diff --git a/core/pim/todo/todo.pro b/core/pim/todo/todo.pro
new file mode 100644
index 0000000..e28ea1c
--- a/dev/null
+++ b/core/pim/todo/todo.pro
@@ -0,0 +1,19 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = mainwindow.h \
+ todotable.h \
+ todoentryimpl.h
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ todotable.cpp \
+ todoentryimpl.cpp
+
+INTERFACES = todoentry.ui
+
+TARGET = todolist
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/todolist.ts
diff --git a/core/pim/todo/todoentry.ui b/core/pim/todo/todoentry.ui
new file mode 100644
index 0000000..c735e76
--- a/dev/null
+++ b/core/pim/todo/todoentry.ui
@@ -0,0 +1,266 @@
+<!DOCTYPE UI><UI>
+<class>NewTaskDialogBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>NewTaskDialogBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>249</width>
+ <height>321</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>New Task</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Priority:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>1 - Very High</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>2 - High</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>3 - Normal</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>4 - Low</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>5 - Very Low</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboPriority</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>currentItem</name>
+ <number>2</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Category:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>CategorySelect</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comboCategory</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>checkCompleted</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Completed</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>checkDate</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>D&amp;ue</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonDate</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>1 Jan 2001</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QMultiLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>txtTodo</cstring>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>CategorySelect</class>
+ <header location="global">qpe/categoryselect.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>1</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>checkDate</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>buttonDate</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <slot access="protected">dateChanged( const QString &amp; )</slot>
+ <slot access="protected">dateChanged( int, int, int )</slot>
+</connections>
+</UI>
diff --git a/core/pim/todo/todoentryimpl.cpp b/core/pim/todo/todoentryimpl.cpp
new file mode 100644
index 0000000..79206de
--- a/dev/null
+++ b/core/pim/todo/todoentryimpl.cpp
@@ -0,0 +1,142 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "todoentryimpl.h"
+
+#include <qpe/categoryselect.h>
+#include <qpe/datebookmonth.h>
+#include <qpe/global.h>
+#include <qpe/imageedit.h>
+#include <qpe/task.h>
+#include <qpe/timestring.h>
+
+#include <qmessagebox.h>
+#include <qpopupmenu.h>
+#include <qtoolbutton.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qmultilineedit.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qapplication.h>
+
+
+NewTaskDialog::NewTaskDialog( const Task& task, QWidget *parent,
+ const char *name, bool modal, WFlags fl )
+ : NewTaskDialogBase( parent, name, modal, fl ),
+ todo( task )
+{
+ todo.setCategories( task.categories() );
+ if ( todo.hasDueDate() )
+ date = todo.dueDate();
+ else
+ date = QDate::currentDate();
+
+ init();
+ comboPriority->setCurrentItem( task.priority() - 1 );
+
+ checkCompleted->setChecked( task.isCompleted() );
+ checkDate->setChecked( task.hasDueDate() );
+ buttonDate->setText( TimeString::longDateString( date ) );
+
+ txtTodo->setText( task.description() );
+}
+
+/*
+ * Constructs a NewTaskDialog which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ *
+ * The dialog will by default be modeless, unless you set 'modal' to
+ * TRUE to construct a modal dialog.
+ */
+NewTaskDialog::NewTaskDialog( int id, QWidget* parent, const char* name, bool modal,
+ WFlags fl )
+ : NewTaskDialogBase( parent, name, modal, fl ),
+ date( QDate::currentDate() )
+{
+ if ( id != -1 ) {
+ QArray<int> ids( 1 );
+ ids[0] = id;
+ todo.setCategories( ids );
+ }
+ init();
+}
+
+void NewTaskDialog::init()
+{
+ QPopupMenu *m1 = new QPopupMenu( this );
+ picker = new DateBookMonth( m1, 0, TRUE );
+ m1->insertItem( picker );
+ buttonDate->setPopup( m1 );
+ comboCategory->setCategories( todo.categories(), "Todo List", tr("Todo List") );
+
+ connect( picker, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( dateChanged( int, int, int ) ) );
+
+ buttonDate->setText( TimeString::longDateString( date ) );
+ picker->setDate( date.year(), date.month(), date.day() );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+NewTaskDialog::~NewTaskDialog()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+void NewTaskDialog::dateChanged( int y, int m, int d )
+{
+ date = QDate( y, m, d );
+ buttonDate->setText( TimeString::longDateString( date ) );
+}
+
+/*!
+*/
+
+Task NewTaskDialog::todoEntry()
+{
+ todo.setDueDate( date, checkDate->isChecked() );
+ if ( comboCategory->currentCategory() != -1 ) {
+ todo.setCategories( comboCategory->currentCategories() );
+ }
+ todo.setPriority( comboPriority->currentItem() + 1 );
+ todo.setCompleted( checkCompleted->isChecked() );
+
+ todo.setDescription( txtTodo->text() );
+
+ return todo;
+}
+
+
+/*!
+
+*/
+
+void NewTaskDialog::accept()
+{
+ QString strText = txtTodo->text();
+ if ( !strText || strText == "") {
+ // hmm... just decline it then, the user obviously didn't care about it
+ QDialog::reject();
+ return;
+ }
+ QDialog::accept();
+}
diff --git a/core/pim/todo/todoentryimpl.h b/core/pim/todo/todoentryimpl.h
new file mode 100644
index 0000000..932d66e
--- a/dev/null
+++ b/core/pim/todo/todoentryimpl.h
@@ -0,0 +1,61 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef NEWTASKDIALOG_H
+#define NEWTASKDIALOG_H
+
+#include "todoentry.h"
+
+#include <qpe/task.h>
+
+#include <qdatetime.h>
+#include <qpalette.h>
+
+class QLabel;
+class QTimer;
+class DateBookMonth;
+
+class NewTaskDialog : public NewTaskDialogBase
+{
+ Q_OBJECT
+
+public:
+ NewTaskDialog( const Task &task, QWidget *parent = 0, const char* name = 0,
+ bool modal = FALSE, WFlags fl = 0 );
+ NewTaskDialog( int id, QWidget* parent = 0, const char* name = 0,
+ bool modal = FALSE, WFlags fl = 0 );
+ ~NewTaskDialog();
+
+ Task todoEntry();
+
+protected slots:
+ void dateChanged( int y, int m, int d );
+
+protected:
+ virtual void accept();
+
+private:
+ void init();
+ Task todo;
+ QDate date;
+ DateBookMonth *picker;
+};
+
+#endif // NEWTASKDIALOG_H
diff --git a/core/pim/todo/todotable.cpp b/core/pim/todo/todotable.cpp
new file mode 100644
index 0000000..77d3389
--- a/dev/null
+++ b/core/pim/todo/todotable.cpp
@@ -0,0 +1,859 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "todotable.h"
+
+#include <qpe/categoryselect.h>
+#include <qpe/xmlreader.h>
+
+#include <qasciidict.h>
+#include <qcombobox.h>
+#include <qfile.h>
+#include <qpainter.h>
+#include <qtextcodec.h>
+#include <qtimer.h>
+#include <qdatetime.h>
+
+#include <qcursor.h>
+#include <qregexp.h>
+
+#include <errno.h>
+#include <stdlib.h>
+
+
+
+static bool taskCompare( const Task &task, const QRegExp &r, int category );
+
+static QString journalFileName();
+
+CheckItem::CheckItem( QTable *t, const QString &key )
+ : QTableItem( t, Never, "" ), checked( FALSE ), sortKey( key )
+{
+}
+
+QString CheckItem::key() const
+{
+ return sortKey;
+}
+
+void CheckItem::setChecked( bool b )
+{
+ checked = b;
+ table()->updateCell( row(), col() );
+}
+
+void CheckItem::toggle()
+{
+ TodoTable *parent = static_cast<TodoTable*>(table());
+ Task newTodo = parent->currentEntry();
+ checked = !checked;
+ newTodo.setCompleted( checked );
+ table()->updateCell( row(), col() );
+ parent->replaceCurrentEntry( newTodo, true );
+}
+
+bool CheckItem::isChecked() const
+{
+ return checked;
+}
+
+static const int BoxSize = 10;
+
+void CheckItem::paint( QPainter *p, const QColorGroup &cg, const QRect &cr,
+ bool )
+{
+ p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );
+
+ int marg = ( cr.width() - BoxSize ) / 2;
+ int x = 0;
+ int y = ( cr.height() - BoxSize ) / 2;
+ p->setPen( QPen( cg.text() ) );
+ p->drawRect( x + marg, y, BoxSize, BoxSize );
+ p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 );
+ p->setPen( darkGreen );
+ x += 1;
+ y += 1;
+ if ( checked ) {
+ QPointArray a( 7*2 );
+ int i, xx, yy;
+ xx = x+1+marg;
+ yy = y+2;
+ for ( i=0; i<3; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy++;
+ }
+ yy -= 2;
+ for ( i=3; i<7; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy--;
+ }
+ p->drawLineSegments( a );
+ }
+}
+
+
+ComboItem::ComboItem( QTable *t, EditType et )
+ : QTableItem( t, et, "3" ), cb( 0 )
+{
+ setReplaceable( FALSE );
+}
+
+QWidget *ComboItem::createEditor() const
+{
+ QString txt = text();
+ ( (ComboItem*)this )->cb = new QComboBox( table()->viewport() );
+ cb->insertItem( "1" );
+ cb->insertItem( "2" );
+ cb->insertItem( "3" );
+ cb->insertItem( "4" );
+ cb->insertItem( "5" );
+ cb->setCurrentItem( txt.toInt() - 1 );
+ return cb;
+}
+
+void ComboItem::setContentFromEditor( QWidget *w )
+{
+ TodoTable *parent = static_cast<TodoTable*>(table());
+ Task newTodo = parent->currentEntry();
+
+ if ( w->inherits( "QComboBox" ) )
+ setText( ( (QComboBox*)w )->currentText() );
+ else
+ QTableItem::setContentFromEditor( w );
+ newTodo.setPriority( text().toInt() );
+ parent->replaceCurrentEntry( newTodo, true );
+}
+
+void ComboItem::setText( const QString &s )
+{
+ if ( cb )
+ cb->setCurrentItem( s.toInt() - 1 );
+ QTableItem::setText( s );
+}
+
+QString ComboItem::text() const
+{
+ if ( cb )
+ return cb->currentText();
+ return QTableItem::text();
+}
+
+
+
+TodoTable::TodoTable( QWidget *parent, const char *name )
+// #ifdef QT_QTABLE_NOHEADER_CONSTRUCTOR
+// : QTable( 0, 3, parent, name, TRUE ),
+// #else
+ : QTable( 0, 3, parent, name ),
+// #endif
+ showComp( true ),
+ enablePainting( true ),
+ mCat( 0 ),
+ currFindRow( -2 )
+{
+ mCat.load( categoryFileName() );
+ setSorting( TRUE );
+ setSelectionMode( NoSelection );
+ setColumnStretchable( 2, TRUE );
+ setColumnWidth( 0, 20 );
+ setColumnWidth( 1, 35 );
+ setLeftMargin( 0 );
+ verticalHeader()->hide();
+ horizontalHeader()->setLabel( 0, tr( "C." ) );
+ horizontalHeader()->setLabel( 1, tr( "Prior." ) );
+ horizontalHeader()->setLabel( 2, tr( "Description" ) );
+ connect( this, SIGNAL( clicked( int, int, int, const QPoint & ) ),
+ this, SLOT( slotClicked( int, int, int, const QPoint & ) ) );
+ connect( this, SIGNAL( pressed( int, int, int, const QPoint & ) ),
+ this, SLOT( slotPressed( int, int, int, const QPoint & ) ) );
+ connect( this, SIGNAL( valueChanged( int, int ) ),
+ this, SLOT( slotCheckPriority( int, int ) ) );
+ connect( this, SIGNAL( currentChanged( int, int ) ),
+ this, SLOT( slotCurrentChanged( int, int ) ) );
+
+ menuTimer = new QTimer( this );
+ connect( menuTimer, SIGNAL(timeout()), this, SLOT(slotShowMenu()) );
+}
+
+void TodoTable::addEntry( const Task &todo )
+{
+ int row = numRows();
+ setNumRows( row + 1 );
+ updateJournal( todo, ACTION_ADD );
+ insertIntoTable( new Task(todo), row );
+ setCurrentCell(row, currentColumn());
+ updateVisible();
+}
+
+void TodoTable::slotClicked( int row, int col, int, const QPoint &pos )
+{
+ if ( !cellGeometry( row, col ).contains(pos) )
+ return;
+ // let's switch on the column number...
+ switch ( col )
+ {
+ case 0: {
+ CheckItem *i = static_cast<CheckItem*>(item( row, col ));
+ if ( i ) {
+ int x = pos.x() - columnPos( col );
+ int y = pos.y() - rowPos( row );
+ int w = columnWidth( col );
+ int h = rowHeight( row );
+ if ( i && x >= ( w - BoxSize ) / 2 && x <= ( w - BoxSize ) / 2 + BoxSize &&
+ y >= ( h - BoxSize ) / 2 && y <= ( h - BoxSize ) / 2 + BoxSize ) {
+ i->toggle();
+ }
+ emit signalDoneChanged( i->isChecked() );
+ }
+ }
+ break;
+ case 1:
+ break;
+ case 2:
+ // may as well edit it...
+ menuTimer->stop();
+// emit signalEdit();
+ break;
+ }
+}
+
+void TodoTable::slotPressed( int row, int col, int, const QPoint &pos )
+{
+ if ( col == 2 && cellGeometry( row, col ).contains(pos) )
+ menuTimer->start( 750, TRUE );
+}
+
+void TodoTable::slotShowMenu()
+{
+ emit signalShowMenu( QCursor::pos() );
+}
+
+void TodoTable::slotCurrentChanged( int, int )
+{
+ menuTimer->stop();
+}
+
+void TodoTable::internalAddEntries( QList<Task> &list )
+{
+ setNumRows( list.count() );
+ int row = 0;
+ Task *it;
+ for ( it = list.first(); it; it = list.next() )
+ insertIntoTable( it, row++ );
+}
+
+
+Task TodoTable::currentEntry() const
+{
+ QTableItem *i = item( currentRow(), 0 );
+ if ( !i || rowHeight( currentRow() ) <= 0 )
+ return Task();
+ Task *todo = todoList[(CheckItem*)i];
+ todo->setCompleted( ( (CheckItem*)item( currentRow(), 0 ) )->isChecked() );
+ todo->setPriority( ( (ComboItem*)item( currentRow(), 1 ) )->text().toInt() );
+ return *todo;
+}
+
+void TodoTable::replaceCurrentEntry( const Task &todo, bool fromTableItem )
+{
+ int row = currentRow();
+ updateJournal( todo, ACTION_REPLACE, row );
+
+ if ( !fromTableItem ) {
+ journalFreeReplaceEntry( todo, row );
+ updateVisible();
+ }
+}
+
+void TodoTable::removeCurrentEntry()
+{
+ Task *oldTodo;
+ int row = currentRow();
+ CheckItem *chk;
+
+ chk = static_cast<CheckItem*>(item(row, 0 ));
+ if ( !chk )
+ return;
+ oldTodo = todoList[chk];
+ todoList.remove( chk );
+ oldTodo->setCompleted( chk->isChecked() );
+ oldTodo->setPriority( static_cast<ComboItem*>(item(row, 1))->text().toInt() );
+ realignTable( row );
+ updateVisible();
+ updateJournal( *oldTodo, ACTION_REMOVE, row );
+ delete oldTodo;
+}
+
+
+bool TodoTable::save( const QString &fn )
+{
+ QString strNewFile = fn + ".new";
+ QFile f( strNewFile );
+ if ( !f.open( IO_WriteOnly|IO_Raw ) )
+ return false;
+
+ QString buf("<!DOCTYPE Tasks>\n<Tasks>\n");
+ QCString str;
+ int total_written;
+
+ for ( QMap<CheckItem*, Task *>::Iterator it = todoList.begin();
+ it != todoList.end(); ++it ) {
+ if ( !item( it.key()->row(), 0 ) )
+ continue;
+ Task *todo = *it;
+ // sync item with table
+ todo->setCompleted( ((CheckItem*)item(it.key()->row(), 0))->isChecked() );
+ todo->setPriority( ((ComboItem*)item( it.key()->row(), 1))->text().toInt() );
+ buf += "<Task";
+ todo->save( buf );
+ buf += " />\n";
+ str = buf.utf8();
+ total_written = f.writeBlock( str.data(), str.length() );
+ if ( total_written != int(str.length()) ) {
+ f.close();
+ QFile::remove( strNewFile );
+ return false;
+ }
+ buf = "";
+ }
+
+ buf += "</Tasks>\n";
+ str = buf.utf8();
+ total_written = f.writeBlock( str.data(), str.length() );
+ if ( total_written != int(str.length()) ) {
+ f.close();
+ QFile::remove( strNewFile );
+ return false;
+ }
+ f.close();
+
+ // now do the rename
+ if ( ::rename( strNewFile, fn ) < 0 )
+ qWarning( "problem renaming file %s to %s errno %d",
+ strNewFile.latin1(), fn.latin1(), errno );
+
+ // remove the journal
+ QFile::remove( journalFileName() );
+ return true;
+}
+
+void TodoTable::load( const QString &fn )
+{
+ loadFile( fn, false );
+ if ( QFile::exists(journalFileName()) ) {
+ loadFile( journalFileName(), true );
+ save( fn );
+ }
+// QTable::sortColumn(2,TRUE,TRUE);
+// QTable::sortColumn(1,TRUE,TRUE);
+ QTable::sortColumn(0,TRUE,TRUE);
+ setCurrentCell( 0, 2 );
+}
+
+void TodoTable::updateVisible()
+{
+ if ( !isUpdatesEnabled() )
+ return;
+
+// qDebug("--> updateVisible!");
+
+ int visible = 0;
+ int id = mCat.id( "Todo List", showCat );
+ for ( int row = 0; row < numRows(); row++ ) {
+ CheckItem *ci = (CheckItem *)item( row, 0 );
+ Task *t = todoList[ci];
+ QArray<int> vlCats = t->categories();
+ bool hide = false;
+ if ( !showComp && ci->isChecked() )
+ hide = true;
+ if ( !showCat.isEmpty() ) {
+ if ( showCat == tr( "Unfiled" ) ) {
+ if ( vlCats.count() > 0 )
+ hide = true;
+ } else {
+ // do some comparing, we have to reverse our idea here...
+ if ( !hide ) {
+ hide = true;
+ for ( uint it = 0; it < vlCats.count(); ++it ) {
+ if ( vlCats[it] == id ) {
+ hide = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if ( hide ) {
+ if ( currentRow() == row )
+ setCurrentCell( -1, 0 );
+ if ( rowHeight( row ) > 0 )
+ hideRow( row );
+ } else {
+ if ( rowHeight( row ) == 0 ) {
+ showRow( row );
+ adjustRow( row );
+ }
+ visible++;
+ }
+ }
+ if ( !visible )
+ setCurrentCell( -1, 0 );
+}
+
+void TodoTable::viewportPaintEvent( QPaintEvent *pe )
+{
+ if ( enablePainting )
+ QTable::viewportPaintEvent( pe );
+}
+
+void TodoTable::setPaintingEnabled( bool e )
+{
+ if ( e != enablePainting ) {
+ if ( !enablePainting ) {
+ enablePainting = true;
+ rowHeightChanged( 0 );
+ viewport()->update();
+ } else {
+ enablePainting = false;
+ }
+ }
+}
+
+void TodoTable::clear()
+{
+ for ( QMap<CheckItem*, Task *>::Iterator it = todoList.begin();
+ it != todoList.end(); ++it ) {
+ Task *todo = *it;
+ delete todo;
+ }
+ todoList.clear();
+ for ( int r = 0; r < numRows(); ++r ) {
+ for ( int c = 0; c < numCols(); ++c ) {
+ if ( cellWidget( r, c ) )
+ clearCellWidget( r, c );
+ clearCell( r, c );
+ }
+ }
+ setNumRows( 0 );
+}
+
+void TodoTable::sortColumn( int col, bool /*ascending*/, bool /*wholeRows*/ )
+{
+ // The default for wholeRows is false, however
+ // for this todo table we want to exchange complete
+ // rows when sorting. Also, we always want ascending, since
+ // the values have a logical order.
+ QTable::sortColumn( col, TRUE, TRUE );
+ updateVisible();
+}
+
+void TodoTable::slotCheckPriority(int row, int col )
+{
+ // kludgey work around to make forward along the updated priority...
+ if ( col == 1 ) {
+ // let everyone know!!
+ ComboItem* i = static_cast<ComboItem*>( item( row, col ) );
+ emit signalPriorityChanged( i->text().toInt() );
+ }
+}
+
+
+void TodoTable::updateJournal( const Task &todo, journal_action action, int row )
+{
+ QFile f( journalFileName() );
+ if ( !f.open(IO_WriteOnly|IO_Append) )
+ return;
+ QString buf;
+ QCString str;
+ buf = "<Task";
+ todo.save( buf );
+ buf += " Action=\"" + QString::number( int(action) ) + "\"";
+ buf += " Row=\"" + QString::number( row ) + "\"";
+ buf += "/>\n";
+ str = buf.utf8();
+ f.writeBlock( str.data(), str.length() );
+ f.close();
+}
+
+void TodoTable::rowHeightChanged( int row )
+{
+ if ( enablePainting )
+ QTable::rowHeightChanged( row );
+}
+
+void TodoTable::loadFile( const QString &strFile, bool fromJournal )
+{
+ QFile f( strFile );
+ if ( !f.open(IO_ReadOnly) )
+ return;
+
+ int action, row;
+ action = 0; row = 0;
+
+ enum Attribute {
+ FCompleted = 0,
+ FHasDate,
+ FPriority,
+ FCategories,
+ FDescription,
+ FDateYear,
+ FDateMonth,
+ FDateDay,
+ FUid,
+ FAction,
+ FRow
+ };
+
+ QAsciiDict<int> dict( 31 );
+ QList<Task> list;
+ dict.setAutoDelete( TRUE );
+ dict.insert( "Completed", new int(FCompleted) );
+ dict.insert( "HasDate", new int(FHasDate) );
+ dict.insert( "Priority", new int(FPriority) );
+ dict.insert( "Categories", new int(FCategories) );
+ dict.insert( "Description", new int(FDescription) );
+ dict.insert( "DateYear", new int(FDateYear) );
+ dict.insert( "DateMonth", new int(FDateMonth) );
+ dict.insert( "DateDay", new int(FDateDay) );
+ dict.insert( "Uid", new int(FUid) );
+ dict.insert( "Action", new int(FAction) );
+ dict.insert( "Row", new int(FRow) );
+
+ QByteArray ba = f.readAll();
+ f.close();
+ char* dt = ba.data();
+ int len = ba.size();
+ bool hasDueDate = FALSE;
+
+ action = ACTION_ADD;
+ int i = 0;
+ char *point;
+ while ( ( point = strstr( dt+i, "<Task " ) ) != NULL ) {
+ // new Task
+ i = point - dt;
+ Task *todo = new Task;
+ int dtY = 0, dtM = 0, dtD = 0;
+
+ i += 5;
+
+ while( 1 ) {
+ while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') )
+ ++i;
+ if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') )
+ break;
+ // we have another attribute, read it.
+ int j = i;
+ while ( j < len && dt[j] != '=' )
+ ++j;
+ char *attr = dt+i;
+ dt[j] = '\0';
+ i = ++j; // skip =
+ while ( i < len && dt[i] != '"' )
+ ++i;
+ j = ++i;
+ bool haveUtf = FALSE;
+ bool haveEnt = FALSE;
+ while ( j < len && dt[j] != '"' ) {
+ if ( ((unsigned char)dt[j]) > 0x7f )
+ haveUtf = TRUE;
+ if ( dt[j] == '&' )
+ haveEnt = TRUE;
+ ++j;
+ }
+ if ( i == j ) {
+ // empty value
+ i = j + 1;
+ continue;
+ }
+ QCString value( dt+i, j-i+1 );
+ i = j + 1;
+ int *lookup = dict[ attr ];
+ if ( !lookup ) {
+ todo->setCustomField(attr, value);
+ continue;
+ }
+ switch( *lookup ) {
+ case FCompleted:
+ todo->setCompleted( value.toInt() );
+ break;
+ case FHasDate:
+ // leave...
+ hasDueDate = value.toInt();
+ break;
+ case FPriority:
+ todo->setPriority( value.toInt() );
+ break;
+ case FCategories: {
+ //QString str = Qtopia::plainString( value );
+ todo->setCategories( Qtopia::Record::idsFromString( value ) );
+ break;
+ }
+ case FDescription:
+ {
+ QString str = (haveUtf ? QString::fromUtf8( value )
+ : QString::fromLatin1( value ) );
+ if ( haveEnt )
+ str = Qtopia::plainString( str );
+ todo->setDescription( str );
+ break;
+ }
+ case FDateYear:
+ dtY = value.toInt();
+ break;
+ case FDateMonth:
+ dtM = value.toInt();
+ break;
+ case FDateDay:
+ dtD = value.toInt();
+ break;
+ case FUid:
+ todo->setUid( value.toInt() );
+ break;
+ case FAction:
+ action = value.toInt();
+ break;
+ case FRow:
+ row = value.toInt();
+ break;
+ default:
+ qDebug( "huh??? missing enum? -- attr.: %s", attr );
+ break;
+ }
+ }
+
+ if ( dtY != 0 && dtM != 0 && dtD != 0 )
+ todo->setDueDate( QDate( dtY, dtM, dtD), hasDueDate );
+ else
+ todo->setHasDueDate( hasDueDate );
+
+// if ( categoryList.find( todo.category() ) == categoryList.end() )
+// categoryList.append( todo.category() );
+
+
+ // sadly we can't delay adding of items from the journal to get
+ // the proper effect, but then, the journal should _never_ be
+ // that huge
+
+ switch( action ) {
+ case ACTION_ADD:
+ if ( fromJournal ) {
+ int myrows = numRows();
+ setNumRows( myrows + 1 );
+ insertIntoTable( todo, myrows );
+ delete todo;
+ } else
+ list.append( todo );
+ break;
+ case ACTION_REMOVE:
+ journalFreeRemoveEntry( row );
+ break;
+ case ACTION_REPLACE:
+ journalFreeReplaceEntry( *todo, row );
+ delete todo;
+ break;
+ default:
+ break;
+ }
+ }
+// qDebug("parsing done=%d", t.elapsed() );
+ if ( list.count() > 0 ) {
+ internalAddEntries( list );
+ list.clear();
+ }
+// qDebug("loading done: t=%d", t.elapsed() );
+}
+
+void TodoTable::journalFreeReplaceEntry( const Task &todo, int row )
+{
+ QString strTodo;
+ strTodo = todo.description().left(40).simplifyWhiteSpace();
+ if ( row == -1 ) {
+ QMapIterator<CheckItem*, Task *> it;
+ for ( it = todoList.begin(); it != todoList.end(); ++it ) {
+ if ( *(*it) == todo ) {
+ row = it.key()->row();
+ it.key()->setChecked( todo.isCompleted() );
+ static_cast<ComboItem*>(item(row, 1))->setText( QString::number(todo.priority()) );
+ item( row, 2 )->setText( strTodo );
+ *(*it) = todo;
+ }
+ }
+ } else {
+ Task *t = todoList[static_cast<CheckItem*>(item(row, 0))];
+ todoList.remove( static_cast<CheckItem*>(item(row, 0)) );
+ delete t;
+ static_cast<CheckItem*>(item(row, 0))->setChecked( todo.isCompleted() );
+ static_cast<ComboItem*>(item(row, 1))->setText( QString::number(todo.priority()) );
+ item( row, 2 )->setText( strTodo );
+ todoList.insert( static_cast<CheckItem*>(item(row,0)), new Task(todo) );
+ }
+}
+
+void TodoTable::journalFreeRemoveEntry( int row )
+{
+ CheckItem *chk;
+ chk = static_cast<CheckItem*>(item(row, 0 ));
+ if ( !chk )
+ return;
+ todoList.remove( chk );
+
+ realignTable( row );
+}
+
+void TodoTable::keyPressEvent( QKeyEvent *e )
+{
+ if ( e->key() == Key_Space || e->key() == Key_Return ) {
+ switch ( currentColumn() ) {
+ case 0: {
+ CheckItem *i = static_cast<CheckItem*>(item(currentRow(),
+ currentColumn()));
+ if ( i )
+ i->toggle();
+ break;
+ }
+ case 1:
+ break;
+ case 2:
+ emit signalEdit();
+ default:
+ break;
+ }
+ } else {
+ QTable::keyPressEvent( e );
+ }
+}
+
+QStringList TodoTable::categories()
+{
+ // This is called seldom, so calling a load in here
+ // should be fine.
+ mCat.load( categoryFileName() );
+ QStringList categoryList = mCat.labels( "Todo List" );
+ return categoryList;
+}
+
+void TodoTable::slotDoFind( const QString &findString, bool caseSensitive,
+ bool backwards, int category )
+{
+ // we have to iterate through the table, this gives the illusion that
+ // sorting is actually being used.
+ if ( currFindRow < -1 )
+ currFindRow = currentRow() - 1;
+ clearSelection( TRUE );
+ int rows,
+ row;
+ CheckItem *chk;
+ QRegExp r( findString );
+
+ r.setCaseSensitive( caseSensitive );
+ rows = numRows();
+ static bool wrapAround = true;
+
+ if ( !backwards ) {
+ for ( row = currFindRow + 1; row < rows; row++ ) {
+ chk = static_cast<CheckItem*>( item(row, 0) );
+ if ( taskCompare(*(todoList[chk]), r, category) )
+ break;
+ }
+ } else {
+ for ( row = currFindRow - 1; row > -1; row-- ) {
+ chk = static_cast<CheckItem*>( item(row, 0) );
+ if ( taskCompare(*(todoList[chk]), r, category) )
+ break;
+ }
+ }
+ if ( row >= rows || row < 0 ) {
+ if ( row < 0 )
+ currFindRow = rows;
+ else
+ currFindRow = -1;
+ if ( wrapAround )
+ emit signalWrapAround();
+ else
+ emit signalNotFound();
+ wrapAround = !wrapAround;
+ } else {
+ currFindRow = row;
+ QTableSelection foundSelection;
+ foundSelection.init( currFindRow, 0 );
+ foundSelection.expandTo( currFindRow, numCols() - 1 );
+ addSelection( foundSelection );
+ setCurrentCell( currFindRow, numCols() - 1 );
+ // we should always be able to wrap around and find this again,
+ // so don't give confusing not found message...
+ wrapAround = true;
+ }
+}
+
+int TodoTable::showCategoryId() const
+{
+ int id;
+ id = -1;
+ // if allcategories are selected, you get unfiled...
+ if ( showCat != tr( "Unfiled" ) && showCat != tr( "All" ) )
+ id = mCat.id( "Todo List", showCat );
+ return id;
+}
+
+static bool taskCompare( const Task &task, const QRegExp &r, int category )
+{
+ bool returnMe;
+ QArray<int> cats;
+ cats = task.categories();
+
+ returnMe = false;
+ if ( (category == -1 && cats.count() == 0) || category == -2 )
+ returnMe = task.match( r );
+ else {
+ int i;
+ for ( i = 0; i < int(cats.count()); i++ ) {
+ if ( cats[i] == category ) {
+ returnMe = task.match( r );
+ break;
+ }
+ }
+ }
+ return returnMe;
+}
+
+static QString journalFileName()
+{
+ QString str;
+ str = getenv( "HOME" );
+ str += "/.todojournal";
+ return str;
+}
+
+// int TodoTable::rowHeight( int ) const
+// {
+// return 18;
+// }
+
+// int TodoTable::rowPos( int row ) const
+// {
+// return 18*row;
+// }
+
+// int TodoTable::rowAt( int pos ) const
+// {
+// return QMIN( pos/18, numRows()-1 );
+// }
diff --git a/core/pim/todo/todotable.h b/core/pim/todo/todotable.h
new file mode 100644
index 0000000..4f3a064
--- a/dev/null
+++ b/core/pim/todo/todotable.h
@@ -0,0 +1,207 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef TODOTABLE_H
+#define TODOTABLE_H
+
+#include <qpe/categories.h>
+#include <qpe/stringutil.h>
+#include <qpe/task.h>
+
+#include <qtable.h>
+#include <qmap.h>
+#include <qguardedptr.h>
+
+class Node;
+class QComboBox;
+class QTimer;
+
+class CheckItem : public QTableItem
+{
+public:
+ CheckItem( QTable *t, const QString &sortkey );
+
+ void setChecked( bool b );
+ void toggle();
+ bool isChecked() const;
+ void setKey( const QString &key ) { sortKey = key; }
+ QString key() const;
+
+ void paint( QPainter *p, const QColorGroup &cg, const QRect &cr, bool selected );
+
+private:
+ bool checked;
+ QString sortKey;
+};
+
+class ComboItem : public QTableItem
+{
+public:
+ ComboItem( QTable *t, EditType et );
+ QWidget *createEditor() const;
+ void setContentFromEditor( QWidget *w );
+ void setText( const QString &s );
+ int alignment() const { return Qt::AlignCenter; }
+
+ QString text() const;
+
+private:
+ QGuardedPtr<QComboBox> cb;
+
+};
+
+class TodoTextItem : public QTableItem
+{
+public:
+ TodoTextItem( QTable *t, const QString & str )
+ :QTableItem( t, QTableItem::Never, str ) {}
+
+ QString key () const { return Qtopia::buildSortKey( text() ); }
+};
+
+
+
+enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE };
+
+class TodoTable : public QTable
+{
+ Q_OBJECT
+
+public:
+ TodoTable( QWidget *parent = 0, const char * name = 0 );
+ void addEntry( const Task &todo );
+ void clearFindRow() { currFindRow = -2; }
+
+ Task currentEntry() const;
+ void replaceCurrentEntry( const Task &todo, bool fromTableItem = false );
+
+ QStringList categories();
+
+ void setShowCompleted( bool sc ) { showComp = sc; updateVisible(); }
+ bool showCompleted() const { return showComp; }
+
+ void setShowCategory( const QString &c ) { showCat = c; updateVisible(); }
+ const QString &showCategory() const { return showCat; }
+ int showCategoryId() const;
+
+ bool save( const QString &fn );
+ void load( const QString &fn );
+ void clear();
+ void removeCurrentEntry();
+
+ void setPaintingEnabled( bool e );
+
+ virtual void sortColumn( int col, bool ascending, bool /*wholeRows*/ );
+
+// int rowHeight( int ) const;
+// int rowPos( int row ) const;
+// virtual int rowAt( int pos ) const;
+
+signals:
+ void signalEdit();
+ void signalDoneChanged( bool b );
+ void signalPriorityChanged( int i );
+ void signalShowMenu( const QPoint & );
+ void signalNotFound();
+ void signalWrapAround();
+
+protected:
+ void keyPressEvent( QKeyEvent *e );
+
+private:
+ void updateVisible();
+ void viewportPaintEvent( QPaintEvent * );
+ void internalAddEntries( QList<Task> &list);
+ inline void insertIntoTable( Task *todo, int row );
+ void updateJournal( const Task &todo, journal_action action, int row = -1);
+ void mergeJournal();
+ void journalFreeReplaceEntry( const Task &todo, int row );
+ void journalFreeRemoveEntry( int row );
+ inline void realignTable( int row );
+ void loadFile( const QString &strFile, bool fromJournal = false );
+
+private slots:
+ void slotClicked( int row, int col, int button, const QPoint &pos );
+ void slotPressed( int row, int col, int button, const QPoint &pos );
+ void slotCheckPriority(int row, int col );
+ void slotCurrentChanged(int row, int col );
+ void slotDoFind( const QString &findString, bool caseSensetive,
+ bool backwards, int category );
+ void slotShowMenu();
+ void rowHeightChanged( int row );
+
+private:
+ friend class TodoWindow;
+
+ QMap<CheckItem*, Task *> todoList;
+ QStringList categoryList;
+ bool showComp;
+ QString showCat;
+ QTimer *menuTimer;
+ bool enablePainting;
+ Categories mCat;
+ int currFindRow;
+};
+
+
+inline void TodoTable::insertIntoTable( Task *todo, int row )
+{
+ QString sortKey = (char) ((todo->isCompleted() ? 'a' : 'A')
+ + todo->priority() )
+ + Qtopia::buildSortKey( todo->description() );
+ CheckItem *chk = new CheckItem( this, sortKey );
+ chk->setChecked( todo->isCompleted() );
+ ComboItem *cmb = new ComboItem( this, QTableItem::WhenCurrent );
+ cmb->setText( QString::number( todo->priority() ) );
+ QTableItem *ti = new TodoTextItem( this, todo->description().left(40).simplifyWhiteSpace() );
+ ti->setReplaceable( false );
+
+ setItem( row, 0, chk );
+ setItem( row, 1, cmb );
+ setItem( row, 2, ti );
+
+ todoList.insert( chk, todo );
+}
+
+inline void TodoTable::realignTable( int row )
+{
+ QTableItem *ti1,
+ *ti2,
+ *ti3;
+ int totalRows = numRows();
+ for ( int curr = row; curr < totalRows - 1; curr++ ) {
+ // this is bad, we must take the item out and then
+ // set it. In the end, it behaves no worse (time wise)
+ // then the old way of saving the entries to file, clearing
+ // the table re-reading in the file and resetting the table
+ ti1 = item( curr + 1, 0 );
+ ti2 = item( curr + 1, 1 );
+ ti3 = item( curr + 1, 2 );
+ takeItem( ti1 );
+ takeItem( ti2 );
+ takeItem( ti3 );
+ setItem( curr, 0, ti1 );
+ setItem( curr, 1, ti2 );
+ setItem( curr, 2, ti3 );
+ }
+ setNumRows( totalRows - 1 );
+}
+
+#endif
diff --git a/core/settings/citytime/.cvsignore b/core/settings/citytime/.cvsignore
new file mode 100644
index 0000000..d316ac9
--- a/dev/null
+++ b/core/settings/citytime/.cvsignore
@@ -0,0 +1,5 @@
+moc_*
+*.moc
+Makefile
+citytimebase.cpp
+citytimebase.h
diff --git a/core/settings/citytime/Makefile.in b/core/settings/citytime/Makefile.in
new file mode 100644
index 0000000..b058021
--- a/dev/null
+++ b/core/settings/citytime/Makefile.in
@@ -0,0 +1,184 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = citytime
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = citytime.h \
+ zonemap.h \
+ sun.h \
+ stylusnormalizer.h
+SOURCES = citytime.cpp \
+ zonemap.cpp \
+ main.cpp \
+ sun.c \
+ stylusnormalizer.cpp
+OBJECTS = citytime.o \
+ zonemap.o \
+ main.o \
+ sun.o \
+ stylusnormalizer.o \
+ citytimebase.o
+INTERFACES = citytimebase.ui
+UICDECLS = citytimebase.h
+UICIMPLS = citytimebase.cpp
+SRCMOC = moc_citytime.cpp \
+ moc_zonemap.cpp \
+ moc_stylusnormalizer.cpp \
+ moc_citytimebase.cpp
+OBJMOC = moc_citytime.o \
+ moc_zonemap.o \
+ moc_stylusnormalizer.o \
+ moc_citytimebase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake citytime.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+citytime.o: citytime.cpp \
+ zonemap.h \
+ stylusnormalizer.h \
+ citytime.h \
+ citytimebase.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/timestring.h \
+ $(QPEDIR)/include/qpe/tzselect.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h
+
+zonemap.o: zonemap.cpp \
+ sun.h \
+ zonemap.h \
+ stylusnormalizer.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/timestring.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+main.o: main.cpp \
+ citytime.h \
+ citytimebase.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+sun.o: sun.c \
+ sun.h \
+ $(QPEDIR)/include/qpe/qmath.h
+
+stylusnormalizer.o: stylusnormalizer.cpp \
+ stylusnormalizer.h
+
+citytimebase.h: citytimebase.ui
+ $(UIC) citytimebase.ui -o $(INTERFACE_DECL_PATH)/citytimebase.h
+
+citytimebase.cpp: citytimebase.ui
+ $(UIC) citytimebase.ui -i citytimebase.h -o citytimebase.cpp
+
+citytimebase.o: citytimebase.cpp \
+ citytimebase.h \
+ citytimebase.ui
+
+moc_citytime.o: moc_citytime.cpp \
+ citytime.h \
+ citytimebase.h
+
+moc_zonemap.o: moc_zonemap.cpp \
+ zonemap.h \
+ stylusnormalizer.h
+
+moc_stylusnormalizer.o: moc_stylusnormalizer.cpp \
+ stylusnormalizer.h
+
+moc_citytimebase.o: moc_citytimebase.cpp \
+ citytimebase.h
+
+moc_citytime.cpp: citytime.h
+ $(MOC) citytime.h -o moc_citytime.cpp
+
+moc_zonemap.cpp: zonemap.h
+ $(MOC) zonemap.h -o moc_zonemap.cpp
+
+moc_stylusnormalizer.cpp: stylusnormalizer.h
+ $(MOC) stylusnormalizer.h -o moc_stylusnormalizer.cpp
+
+moc_citytimebase.cpp: citytimebase.h
+ $(MOC) citytimebase.h -o moc_citytimebase.cpp
+
+
diff --git a/core/settings/citytime/citytime.cpp b/core/settings/citytime/citytime.cpp
new file mode 100644
index 0000000..b2f9f14
--- a/dev/null
+++ b/core/settings/citytime/citytime.cpp
@@ -0,0 +1,272 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "zonemap.h"
+#include "citytime.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include <qpe/timestring.h>
+#include <qpe/tzselect.h>
+#if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP)
+#include <qpe/qcopenvelope_qws.h>
+#endif
+
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qlabel.h>
+#include <qmessagebox.h>
+#include <qregexp.h>
+#include <qtextstream.h>
+#include <qtoolbutton.h>
+
+#include <stdlib.h>
+
+CityTime::CityTime( QWidget *parent, const char* name,
+ WFlags fl )
+ : CityTimeBase( parent, name, fl ),
+ strRealTz(0),
+ bAdded(false)
+{
+ Config config( "qpe" );
+ bWhichClock = config.readBoolEntry( "AMPM", TRUE );
+ frmMap->changeClock( bWhichClock );
+
+ char *pEnv;
+ pEnv = NULL;
+ pEnv = getenv("TZ");
+ if ( pEnv )
+ strRealTz = pEnv;
+ pEnv = NULL;
+ pEnv = getenv("HOME");
+ if ( pEnv )
+ strHome = pEnv;
+ // append the labels to their respective lists...
+ listCities.setAutoDelete( true );
+ listTimes.setAutoDelete( true );
+
+ listCities.append( cmdCity1 );
+ listCities.append( cmdCity2 );
+ listCities.append( cmdCity3 );
+
+ listTimes.append( lblCTime1 );
+ listTimes.append( lblCTime2 );
+ listTimes.append( lblCTime3 );
+
+
+ // kludgy way of getting the screen size so we don't have to depend
+ // on a resize event...
+ QWidget *d = QApplication::desktop();
+ if ( d->width() < d->height() ) {
+ // append for that 4 down look
+
+ listCities.append( cmdCity4 );
+ listCities.append( cmdCity5 );
+ listCities.append( cmdCity6 );
+ listTimes.append( lblCTime4 );
+ listTimes.append( lblCTime5 );
+ listTimes.append( lblCTime6 );
+ lblCTime7->hide();
+ lblCTime8->hide();
+ lblCTime9->hide();
+ cmdCity7->hide();
+ cmdCity8->hide();
+ cmdCity9->hide();
+ } else {
+ listCities.append( cmdCity7 );
+ listCities.append( cmdCity8 );
+ listCities.append( cmdCity9 );
+ listTimes.append( lblCTime7 );
+ listTimes.append( lblCTime8 );
+ listTimes.append( lblCTime9 );
+ lblCTime4->hide();
+ lblCTime5->hide();
+ lblCTime6->hide();
+ cmdCity4->hide();
+ cmdCity5->hide();
+ cmdCity6->hide();
+ }
+ bAdded = true;
+ readInTimes();
+ changed = FALSE;
+ QObject::connect( qApp, SIGNAL( clockChanged(bool) ),
+ this, SLOT( changeClock(bool) ) );
+ // now start the timer so we can update the time quickly every second
+ timerEvent( 0 );
+}
+
+CityTime::~CityTime()
+{
+ if ( changed ) {
+ Config cfg("CityTime");
+ cfg.setGroup("TimeZones");
+ QListIterator<QToolButton> itCity( listCities );
+ int i;
+ bool realTzWritten = FALSE;
+ for ( i = 0, itCity.toFirst(); i < CITIES; i++, ++itCity ) {
+ if ( !strCityTz[i].isNull() ) {
+ cfg.writeEntry("Zone"+QString::number(i), strCityTz[i]);
+ cfg.writeEntry("ZoneName"+QString::number(i), itCity.current()->text());
+ if ( strCityTz[i] == strRealTz )
+ realTzWritten = TRUE;
+ }
+ }
+ if ( realTzWritten ) {
+ cfg.removeEntry("Zone"+QString::number(CITIES));
+ cfg.removeEntry("ZoneName"+QString::number(CITIES));
+ } else {
+ cfg.writeEntry("Zone"+QString::number(CITIES), strRealTz);
+ if ( nameRealTz.isEmpty() ) {
+ int i = strRealTz.find( '/' );
+ nameRealTz = strRealTz.mid( i+1 );
+ }
+ cfg.writeEntry("ZoneName"+QString::number(CITIES), nameRealTz);
+ }
+ QCopEnvelope ( "QPE/System", "timeZoneListChange()" );
+
+ changed = FALSE;
+ }
+ // restore the timezone, just in case we messed with it and
+ // are destroyed at an inoppurtune moment
+ if ( !strRealTz.isNull() ) {
+ // this should be checked, but there is not much that can done at this
+ //point if it fails
+ setenv( "TZ", strRealTz, true );
+ }
+}
+
+void CityTime::timerEvent( QTimerEvent *e )
+{
+ if ( e )
+ killTimer( timerId );
+ // change the time again!!
+ showTime();
+ int ms = 1000 - QTime::currentTime().msec();
+ timerId = startTimer( ms );
+}
+
+void CityTime::mousePressEvent( QMouseEvent * )
+{
+ // DEBUG enable this to get a look at the zone information DEBUG
+// frmMap->showZones();
+}
+
+void CityTime::showTime( void )
+{
+ int i;
+ QListIterator<QLabel> itTime(listTimes);
+
+ // traverse the list...
+ for ( i = 0, itTime.toFirst(); i < CITIES; i++, ++itTime) {
+ if ( !strCityTz[i].isNull() ) {
+ if ( setenv( "TZ", strCityTz[i], true ) == 0 ) {
+ itTime.current()->setText( TimeString::shortTime(bWhichClock) );
+ } else {
+ QMessageBox::critical( this, tr( "Time Changing" ),
+ tr( "There was a problem setting timezone %1" )
+ .arg( QString::number( i + 1 ) ) );
+ }
+ }
+ }
+ // done playing around... put it all back
+ unsetenv( "TZ" );
+ if ( !strRealTz.isNull() ) {
+ if ( setenv( "TZ", strRealTz, true ) != 0 ) {
+ QMessageBox::critical( this, tr( "Restore Time Zone" ),
+ tr( "There was a problem setting your timezone."
+ "Your time may be wrong now..." ) );
+ }
+ }
+}
+
+void CityTime::beginNewTz()
+{
+ frmMap->setFocus();
+}
+
+void CityTime::slotNewTz( const QString & strNewCountry,
+ const QString & strNewCity )
+{
+ // determine what to do based on what putton is pressed...
+ QListIterator<QToolButton> itCity(listCities);
+ int i;
+ // go through the list and make adjustments based on which button is on
+ for ( i = 0, itCity.toFirst(); itCity.current(), i < CITIES; i++, ++itCity ) {
+ QToolButton *cmdTmp = itCity.current();
+ if ( cmdTmp->isOn() ) {
+ strCityTz[i] = strNewCountry + strNewCity;
+ QString s = strNewCity;
+ cmdTmp->setText( s.replace( QRegExp("_"), " " ) );
+ cmdTmp->toggle();
+ // we can actually break, since there is only one button
+ // that is ever pressed!
+ changed = TRUE;
+ break;
+ }
+ }
+ showTime();
+}
+
+void CityTime::readInTimes( void )
+{
+ Config cfg("CityTime");
+ cfg.setGroup("TimeZones");
+ QListIterator<QToolButton> itCity( listCities );
+ int i=0;
+ nameRealTz = QString::null;
+ QString zn;
+ for ( ; i < CITIES ; i++ ) {
+ zn = cfg.readEntry("Zone"+QString::number(i), QString::null);
+ if ( zn.isNull() )
+ break;
+ QString nm = cfg.readEntry("ZoneName"+QString::number(i));
+ strCityTz[i] = zn;
+ itCity.current()->setText(nm);
+ if ( zn == strRealTz )
+ nameRealTz = nm;
+ ++itCity;
+ }
+ if ( i == 0 ) {
+ // write in our own in a shameless self promotion and some humor
+ QStringList list = timezoneDefaults();
+ int i;
+ QStringList::Iterator it = list.begin();
+ for ( i = 0, itCity.toFirst(); i < CITIES && itCity.current();
+ i++, ++itCity ) {
+ strCityTz[i] = *it++;
+ itCity.current()->setText( *it++ );
+ }
+ }
+ if ( nameRealTz.isEmpty() ) {
+ //remember the current time zone even if we don't have room
+ //to show it.
+ zn = cfg.readEntry("Zone"+QString::number(CITIES), QString::null);
+ if ( zn == strRealTz )
+ nameRealTz = cfg.readEntry("ZoneName"+QString::number(CITIES));
+ i++;
+ }
+}
+
+void CityTime::changeClock( bool newClock )
+{
+ bWhichClock = newClock;
+ showTime();
+}
diff --git a/core/settings/citytime/citytime.h b/core/settings/citytime/citytime.h
new file mode 100644
index 0000000..5a2c4d8
--- a/dev/null
+++ b/core/settings/citytime/citytime.h
@@ -0,0 +1,66 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef TIMEWIDGETIMPL_H
+#define TIMEWIDGETIMPL_H
+
+#include <qlist.h>
+#include <qwidget.h>
+
+#include "citytimebase.h"
+
+const int CITIES = 6; // the number of cities...
+
+class ZoneMap;
+
+class CityTime : public CityTimeBase
+{
+ Q_OBJECT
+public:
+ CityTime(QWidget* parent = 0, const char *name = 0, WFlags fl = 0);
+ ~CityTime();
+
+public slots:
+ void beginNewTz();
+ void slotNewTz( const QString& strNewCountry, const QString& strNewCity );
+ void changeClock( bool newClock );
+
+protected:
+ void timerEvent( QTimerEvent* );
+ void mousePressEvent( QMouseEvent* event );
+
+private:
+ void showTime( void ); // get and show the time for various places...
+ void readInTimes( void ); // a method to get information from the config
+ QString strRealTz; // save the TZ var
+ QString nameRealTz; // and what it is called
+ QString strHome; // the home variable...
+ bool bAdded; // a flag to indicate things have been added...
+ bool bWhichClock;
+ int timerId;
+
+ // a spot to hold the time zone for each city
+ QString strCityTz[CITIES];
+ QList<QToolButton> listCities;
+ QList<QLabel> listTimes;
+ bool changed;
+};
+
+#endif
diff --git a/core/settings/citytime/citytime.pro b/core/settings/citytime/citytime.pro
new file mode 100644
index 0000000..d988b48
--- a/dev/null
+++ b/core/settings/citytime/citytime.pro
@@ -0,0 +1,13 @@
+# $Id$
+CONFIG += qt warn_on release
+TEMPLATE = app
+DESTDIR = $(QPEDIR)/bin
+INTERFACES = citytimebase.ui
+HEADERS = citytime.h zonemap.h sun.h stylusnormalizer.h
+SOURCES = citytime.cpp zonemap.cpp main.cpp sun.c stylusnormalizer.cpp
+TARGET = citytime
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/citytime.ts
diff --git a/core/settings/citytime/citytimebase.ui b/core/settings/citytime/citytimebase.ui
new file mode 100644
index 0000000..4665097
--- a/dev/null
+++ b/core/settings/citytime/citytimebase.ui
@@ -0,0 +1,1199 @@
+<!DOCTYPE UI><UI>
+<class>CityTimeBase</class>
+<comment>*********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+*********************************************************************</comment>
+<author>Trenton Schulz</author>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>CityTimeBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>289</width>
+ <height>359</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>City Time</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget>
+ <class>ZoneMap</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>frmMap</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>4</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget row="0" column="2" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity7</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 4&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="2" column="3" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime9</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 6 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="1" column="2" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity8</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 5&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity2</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 2&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="5" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime6</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 6 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="5" column="0" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity6</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 6&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity4</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 4&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="4" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime5</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 5 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime2</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 2 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 1 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity3</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 3&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="1" column="3" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime8</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 5 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 1&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="0" column="3" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime7</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 3 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime4</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 4 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="4" column="0" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity5</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 5&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCTime3</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>10</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;CITY 3 TIME&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="2" column="2" >
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdCity9</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;location 6&gt;</string>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>toggleButton</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>ZoneMap</class>
+ <header location="local">zonemap.h</header>
+ <sizehint>
+ <width>200</width>
+ <height>400</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>7</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>signalTz(const QString &amp;, const QString &amp;)</signal>
+ <slot access="public">slotIllum(bool)</slot>
+ <slot access="public">slotZoom(bool)</slot>
+ </customwidget>
+</customwidgets>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="197524">789cc4bdd772e34ab6ae7bbf9ea263e16ec5096c7973712e442f2fca5066c7be8025e8404f82da2f7f3273fcff20c45255cd9ea64f7760b23e024c9fc36526f4bffee75f6f0fb7fffa9ffff55ff345b0e845ff8ab260f6afff8997a3d1e67fff9ffff7fffed77f1fededfdebc05e07e707ff3af8efffe7bffe3b4aff15fdcbdb33ffdb3fb39c2ec887fb96e3087cb4bf67793c201f9c5b0e1ec1677bee7ed822cbf3c944d9a53f69930fdcfda8098ee4f7d991b27b3ede9025bd75872cf9373fc887529e27e1fd3d492f682bbbf4bc2a59ca138cc9529ec903f9c8d57fd8051fa17e4db2fcdeab91e5f7f1a7b22b4f780d46fbaca660d47790081fa0bc9f6764f9fde6068cfc0728cf01d2f39ec892ffec108cf4d7f8fde19eb45f9a3b36bd23fddbe8928f02777f4e3e76e363d604b33e9760f4e7ea992cf7177b64e98f690f8cfecb1764793e2f844dfd5c7af33159ee8ff03cebbb7e5576cf0f62b294675903a3feab1659f29f3c29bbe73f376469bfd695f021c6c700ed7188feaef7c128cf12e53f42ffad0330faabf96ed98eb63475edb10023bff12959fa231b9065fccd2ac21c0fe10559da773e25cbf3f13518e3d1e3efcf24fd8b5b30f20f5fc8727f3e5496fc9ec952fe7e57f810e5f944fdd83e9f8764493fe7f3ecaf09599eaf8ec892de2a07a3bffaa9f011e6e7ba0d46fbe7efca2ebd9a3c6f66c3e9a14b9f7c24e37b5a05637c0613b2dccfdec1189fe32159daa7be4796f6a8497f9af122ed9f57c018bffd108cfa0d911feb37dd234bfdfad764997f952559f29b838fd0fee34730e64f2f26a3fd5fc148bf3e5696fe43fb1c433e3402f0b1b46ffd982cf7ab48eff85ceea72e3d333ad1bec3028cf64c783f121e84e41357bfe041f810fd9be56469efe0932ceddb7c261fbbf4ba2bb2b44fbc00531eef9125bde246d9d5bf9290a5bd7bfb60c8d3f4912cbfcf3764298fd75076e5194dc9529ee0058cf65f307d8ca7f5a9b28cff0959d25f5f90a57cc5bb30e743109025bd694bd9a5d778214b79d2148cf1d9bb214bf93fd11f47d0df692c7c8cfc8673f0b1ccdf06ca777c8ef183f63f8ee57ed7c97f636ea03d920e18f5a92f850fa17fa615b28c8f469f7c1abaf6be071f49fb2443b28c87ca2df9c4716345167910cfc1d45763b2b4d7724096f4e76f6429afa7bf97fc965764296ff64a96fa2e593ef46fb343c6f8699225fdd654d9a5df3f163ec2fc5c4cc8f2fbe593b28c3f94ef08f65ad12523ff6bb2fcbef1a42cf9dd90a53eb31a18f2ba774686feb852167db422cb78acf695657cdf9225bf794696fa2f781ff269b8244b7a9348d9ddaf2664496f21f3e99ce375ec298bbc8cc892deb04686bd575576e9e523f031e4694a96df8f7df039e4d70559ee2f36e018f213e3e9e45ce475712e7cba0ff93d134e53e1aeebbfc3fd038c87e642f8d09820aeff7a60f457f3802ce33d3922cb78ec6560b47fccdf9fc9fc5adc81393f6365994f73b2e4e7cd94ddfdc93359f2ef2564c97fd817e678adf864c9ef739f8cf46a60c86faf4e467b5c9131ff3c30c65fda5076fd9f1d93213f06ca529e53b294273d5076f7eb73b2d4a7f108e6780dc892df22254b7e41ae2cf9b13e68ef0998e377345376e9ad33b2a47fd1274bfa953d6599cf9a1ef41bea67c6b3fbfdac4796f45a3764c8939c8cfe417b1f9fcbfd469b2ced93a3fec7b1a47f714686be8dc852de02e3f3641ff3e95d599eef8031ffe647cad21e0f60e89f5ea82cfaa94ac6fc7d5376bfaf3f81313febe7caeef7eb3a19f6d38bf0e9bedc1fd7c89087b7c2692adc75f2ffd0e803990ff501f9cccdb7f10959c653510163fe345265f7bcbf20cbfcf77365b93f23c31e92f960f403f469a6ecfaabda214b7ed95059d28bc8925ffd5159f4f10359f28b0a30f489774896fc2f5acaee7e5127e3f70918f3353a26cbf84a3fc992defc4359c6fb9c2cf52998df9994bfb55076e59f0664c827b60fe667d6274bfee303b2e4df3f54167b94e9a1ff9257b2a4df45ff72be365f9545de5d9165be6dfaca222f5ec8927f0fe5e1fc1d256449ef624096f2ccf6c0e7f2fca64186ffd2264bfea39ab2f4e70519f56f29bbfb338c17cefff11d19f6fc5059fcaf902cf9d76e94c51eec90e10f15cae24fe8f3529e96a687f120f3f99cf265305576f90f32b2e43fa82b4b7f60bc51fe2c7d65b117f97bd80353f4c709da735e5116fb84e9419e64ca529e19fad7c813493f06c3de6ebd9111af5a2b8b3cc4f3690a7b2d22c37eba5096fafb64296fd821cb78f5ddf83b52fded4f8439ff570559eed7d760d81f9b800cf9b15276bfafb7c9f2fb0519f3797c44167994be9191de81b2cce70bf2f991931f6764497f7d09c67cee75c9327e8a3b65773f9c9325bd6241867f5711e67c0d2e94c53ea99125fd68ac2cfed63359d20b1be063e98ff11919f6415559e6db3b19f6fa8c2ced5f63798e215fd17f9cdff3736597de8af9637e7fde288b7ec778e07ccde7ca321f3d32cadb5196f938254bfae395b2d8a34b61ced7a44f96fcb25365f77ce09125bfe158d9ddaf1d91211f6aca521ffe1ef2334dc892dfa2af2cf2e8810c7ffc4559ee0fc8925f88f63b813f508c945d7e454496fcaa17caa2efeec8925fb65096faf5c0901f0b65941ff99fa23d1b7764dc477a942721ef439ed53d32e4f3abb2f8bf28ff29ecab75830cfbee130c79d77a5516fbeb830cf98cf97c06f9d728c8682ff4ff19e4dde6168cf6ad67c2947f2b9f0cfff3932ce51b6dc8323f2ea4fd02da0fdd3e18fabc9b9345fea4cf64f8fb32bf8263d853e92b599e8ffbca4e5ec55db2c897fe800c797a0fc678eb0f95c57e3b204b7e8b4765977ed5274bfaa9fe5ed2ff9c81319e3653b2cc0faf45467d06ca2efda5fe5eeab7395476f7d72cffb9e41fb3bc9017930a59eab79a298bfdb221cb7caa9c2bcbfcd7fb90779a3ee2455764c86bf417e5c5c5882ce9e72d65d13f7db2a49f2f955dfa952332ec79948ff2242ec8f0bfb62cf3774e96fc070fca62efb13ce8df55872cf569be80212f862bb2e4d77d55167d744b96fc96e7caa20ff5bee4d7bf5276f59b37c0e8afe05559d23f25e3f7b7caeef7b9d80701e55174a1ecda6b724b863d365616fdb44f86bff948867fd3204bfe6106a67df44696fc860b32fcdd2332c6c7842ce94f1230fcc70ad3873c9f9c9225bdd93119f67b0886bcfb8cc9f2fce6832ccf17d7c26768af39e6f319e4f30afd734679ef7e7f7c40f9d198828fcf23371e7db2dccfc660daef2119f264a0ecfa2f699065be2f4e9445deec9131df47ca2eff5a420edcfd614e86fd47c6fc4eeec8884f0dc9927f559f477e3159d2abd684399fd73919f6e4922ce9559e9445be8dc958bfcbc098bf69932ce363b165e94ffe1ef3f7f34859f2bf2023ff4f32e2f57530e6737caa2cfaf78d0cf91129cbf89990a1bf9ec9925f7eaf2cf26c4396f66c0dc8909f7c1ef37fd65296f9f94e86bd7ba52cfe34f3877c182d955dfe337d5ecab7667ba07f9be764f4475ff814f27c3e5296fe3921233e9829cb7c5f91a53cd33765579ecd0359daa77946c6fa1fc623e547af4586bc3f5716793f204b79aa7a1ff36f4996f2788fcae26f8dc9982f183fb4b7364b65f15f5ec9529eda87b2e85f9607e3e7e25459fab34746fbec2b4b7bd4c9d23e39e637e5d9f89a8c78c6bdb2c4ff597e8c9751ac2ce3fb4098f65f744b467b42be511e7ebe29cbfa668d2ce5a956c8529efc058cf6fa44f9cf604fafe764c8f38ef039ca5393f632f64de0e45b3d25433fdf8363699f2823cb785ee8fde8d8f11319f25bca63ec0bf89ff7ca2ebfe69a2cf2343e2363bded018cf157dc92a53fd71365917715b2ccbfd11559f2af8d94459ec764c9bf182bbbfb594a0e63371ffb64c427f7c1187f714886bdc1fa425e5d44cae2efcfc952beea89b2cb7f7c48c6fa47074cff735f59fc4fb60fe4d35cef4b79c6ac1fe453b05696fb6c4ff4efe7b5b22bcfe0890cf92ee353ed99784286fddd264b79962365975fff8e2ce5496e95ddfd6e932ce5493e955d79d26b32fae3088cf991f9ca323f981fe4d7aaa22cf6679d2ce51d9e2a4b79591f8eaf1b65b11f94a5bcf90319f27e09c67cdd4464c46753b2946f5a288bfed7df637dca53167dccfc31ded62d6577bfc7fad35ec17ca33c9b4ec9f0ff1f9525fec1f6c4f80ab62cfa86ed83f155cf95a57d1a64699f19cb83f19443bea8bfac0cfd744c96fe1d0764c47b06cae27fbd91a5bc83a5b22bcf28224b799ba8ff19e3057b64c85b5f59f4cb0119f6f5bbb2c4933664c9af1882195f6d91e11f27cad2dfb764d8479fcaa27faa60f4d76757f81cf37189fccf519f02f3f71cfaa1e1daeb44edcd2e98f6e5a2410e45debf2b3b79d8d4fb22ffe77a1ff27f0386bc5d4ec990f7e7caeefea24a96fc92bab2cb2f5c9325bfe69db2bbefcfc918df2330edfd0765d1ff4db28cc75eaaeccab362f961efa7beb2bbef6bfa689f58d99567119151de7d65773fbe27c39f617a984f9f4f64297ff74c59e2032159ca3f59288bbfc4f689a5fcd3a6b2e8fb822ce5f79f9545dfb1bd313ee24361cafbfa0319f18c2a19f19696b2f85f4f64e89f4259ea9392a53e5e57d995b7abbf97fa7c2e94dd7d2f21c3be45ff51be476b32ca575516f9f84a96f279c7ca222ff479f817a9b2cb3fbf234bf95667caee7e634c96f6f65664ec8f63f930ffb31e19fe4740863dbb5176e50b876429ffa0adecee5fccc9d0efbeb22b5fa2e9617ebe91111f3c01435f041d32f4c54059fc17f61ff4457aa5ecca93bd90a5bcfd4cd9dd1f3c92115fbc57167b44d3837db4274cfd30ed92a57c9b2b65f11feec8586f4d94653c7e92a1ef7d6569cf942ce51b5c2bcb789890614fe760fa5727ca629f0fc8f0f72265f1173a64e8ff6b65d1bf0b32e2bbb7caee7eed812ce56d7864d827187fd43f459f8cf5ea6b65f13f0332e27b4365591fbb20c3bf7a22a3bfa03fce389e6232f469ae2cfaac49867ff9ac2cfe25db13e3677a4f46fb63fe9d233e57bf5116fb4b19ebc785b2dc0fc9d0b71565b137347dac5723ff73ee4f6992e14f8e94459e7e92b11f0aed7f8ef8dc6c4ac6fafe868c78df5259ec872119e31ff2ec1ceddd833c08b85e74a5eceeb7d0bee101f6fbc87c54ff6e5113a63db0e890e10fd6c1d0dff1982cf7fd776577bfd620c7723f234b7e5e0f0c79b578258bbcaa2e94453f4fc9d06f89b2d80b2959cae3dd2acbfd980c7fb405863caa9d28bbfca29c2ce5f1c7ca529e908cf204ca2ebf19eb0f7fba3e5596f27864acf748ffa8ffe46564ac1ff7945dfed543b2946f73a12cfee63119e57b50167baf4a46ff0dc9529ecd040c79345c9361bf7c288b7c8dc9b05f96caa28f4ec852de40ef4b79bb7a1ffa342263bfff080cf914337fe8c7d99bb294e7920cfb63a9ecf26bb17e186f599d2cf9a70519fdc3f683fc5a35c9588fd9b2c42f72b2946fd85396f5b657b2942f7c5276e59b6dc852bee64c59eca30519f6bed8dfea1fcd2e9545ffde93e14f46cae26f1e92a19f17ca2ebf8b0a59ca53cb9525bed225a3bf8ec0908fd1a1b2c8bb3732f6ef1c288b3f3423233eeb298b3ed0fbd0e70365f1cf347da9cf455d59e2452c2fc6e3469f97f95163fbd19e9b83e9df2764ac575d90a5bc514b59eccd2119f37bad2ce395fd87f1ba0a945d79e737649407e353f52dfb13e3336a90113f4a95c53ede90a53c134f59f4ef0719f379cbae3c9fec2fea0f945ff5e9a9b2ec476b91a53ce38eb28ccf828cf97ca32cf6c73559ca9355c8680ff417f5ef608f8cf5d40365b1770ec9d81f74a22cf615cb8bf17571ac2cf18f902cf9afd0bed4e7d11d19fb95efc9386f72a82cf1a39c2ce5b9785196f6d907237ebd7e57167b93ed037b6b33579678d83319e977c9904f6db2d46782f60c604f557232f253c6fa41a12cf61dc67710c03e86fe0b12c4cbf07c7880fdbc536591aff764ec97417b8427d80fff41c67905e8b33080bd83f998a6287f4c867de6c6ffe9e1c939ec932e19f6491f0cf9bb08c9d0a797caa2cf0764d84bcf64a4df23c35e06535f0f876449af1f90613fe87d496f9190b17f6209867cebc664493fb9244bf9c38db2d87b6f64c92fce94a57e1764d807cc1fe3b3fa4286ff14288bbc5d93a53dbb756589ff3e91a17f3d6597fff2992ce54b6764ec4f5980195f7953167f7a4c96f275dbca22cf5a64295f63a62ce55b91a57c9f7bcaae7c05cb87fecf3a64d89b5361eadfc140d9956ff242c6faf1908c78cf4859e26f0bb29467d55676e519b6c8b05fd0fed4a7d14a59ec910a19f6c93b59cab33c5596f1744396f2f59764ec1fac8121efd6a9b2c4ef1b64d8733332f4e389b2c4cfcec9d08fb1b22bcf94e5c3f81a4f95a5ff8ec8d8dfcefb5c0f7e24637f7ca82ceb056332faef4c59e21f4f6429df66a62cf67a44863d3750967852872ce59ba17ef4579b2b32ca1b92117fd1e7a57cabb5b2bbdfa893d19ffbca127fd1f4a57cad3bb28ca7cd1319faf6100c7d9ab6c988cfaf95453eb4c8d03737ca626f7864d89f97ca62affb64c4e34ec9523eaf20437fb13e187f514d59f407eb8ff1377a5616fbe89e8cfd1d81b2c48b347dc49bc9184f3dd61fe36978a22ce399e9613c5d1c294b7c654cc678bf264bfdd790bfd4c7618f8c784b5759f4ed862ce5697acae2dfbd93610f1e80113fc823b2e8dbf05e59e26f2959f2af79ca627f3c90913fe445007d1db23eb017ea1d65b127987e80fd627c1ef6c46245c6f9bdb5b2d8eb4f649407cc78c8649f8cdf1f2bcb7ada1159f2af8f94253e73053e91f84bf4a82ce59b91b15fada52cfdf349463c13fd4f7b66caf2a27d366b6591a7e88f10edf13927e3f92365292fca43fb68b626a3fe736529ff1119e759dfc9d89f25fa23a43d525d81313fbb1118fa7cea93e3c4c98f7732d6a32760c8c7e48a2cfaae3b5276e97d5e92612f1d2abbfbf92d59d21fa1bcf46f932659e657724d96fcf20b6597dee88d2cf9452764e8bf1c0cf9d57f2763fde94559e46f9f2cf9d526ca22dfeec892fee0030c79145f91213ff53eecaf4f32e21d7a5ff2afec9325ffca48d9e53f1892a5be3dd61ffdf5790c867c4b2fc9224f6a2fcaa24ff7c858ffdf90b15e31509678c7940cff3c224b793ed97ee8df3eea437f336f90a53cd1a5b2ec975892a5fd46afca92ff2959ca57a9298bfed6f4a4fd96b7cad27ee764d8631918f2721393b1be169011df4895c55e9c93b1feaee94979d75532ecc7576529ef1119e57d274bf95a981fd4876bd617fab03f5196fd1d2f64294fe54e59daef8c8c78cbb3b294674496f6aa0ec9d84fd003733fdfa7b2aca7b0bda06f972b65991f6c0feee7f395459f2fc88817bd2bcbfce4f8c1785ced91e17f883c0da98fb31332ec812619eb67a7caa2ef5764f82f1d6569df828cfd455565579e4d9d0cffe58a0c79fa00c6781b3595257ed423633dea52d9e51f307d8cc7eabbb2b41febcf785b9b8cf982f6a57e5f1c92717e305796f274c9d89fb2a72cf613db23c07eff9ab2ec77c07ca63dd08a94c59e66fd12e8f389b2c4abf43eec43d63fc17ed567658917a1feb4278a1519f652a42cf65448c679af4765193ff764d88f7a1ff14f8c2fda13cb5059c6db822ce90f67caa2cfafc992fe04ed4bfb6271a92cf649858cf35dac1ffa6780fe547b03f23742fd2ece95a57d30de687f4c4664d84797ca62afdd91b1bfb950167b668f8cf5cb6332cedb7e2a4bfbb9fe3e53ffba9b91451ed6bb6489b75c3c91b11f810cfd3cf5c8a28fba21599eaff03ee45da28c78cc4cd9a5179d9325bdea3559ca130764c4936a60c8abfa1919f6c64859fc65a60f7baaea298b7edd274bfe69870c799708533ff61fc9b02fce95451f55c888575495653dea842cf6daf2958cfddea81ff561ff4959e2c3fb64913fd3908cfaeb7dc44fcec8883765ca2eff16eb87fe5cadc838bf3805433f161f64ec7f7c54167b88e5817eecce945d7946ef64c8cb0b65590f5a90a5bc9b336529ef2559cadbd4fca43d9b5db28c9f44d387bd8ef940fd387f5496fd552d32eccb95b2e8f70d19e729f69565ff04db8bf6fb5ad995af32264bf9f32119fb95303ea84fa31919ef0b682bcbfee63a19fb93de95c59eb923e33cdab1b2b4f72d19feb6de97fa046f64c41bd01fd4a70b8f2ce5aba4ca128fec93a57cbda1b2c41f3ec958efa892d1be15b2e43fc6f8537dd9571679774d86fe3a5616ff7f8f8cf8edadb2c45f3232e2e1e84feacf755f59e4fb920cfd79ab2cf67641c67993a6b2c48bd89f09f6678d9565bf00ca437db9689161ff7595c55ef8244b7ed32b6577bf35244b7ef51e18fa74fe42c67ac4a3b2c4173664bc2fe34c59e60fd33f813e823ca53e0d4ec8d0a735b23cbf84bc0fd19e4bd4274279466d32f6933d83a18f43c803f5e7bb64f847556589c7f5c9189f0fca325e3ec838cf2eed13aafebb2763ff68050c7934fd24239eb80786bc985c9325bd7a5559f4d3922cf26c7d424e4edcfc1f91b19e83f4e9df855332fc8f2519eb0d2f64c97f38529678c30759e217b52a3911be22a7ae3cb34459e4ed06ccf59a1a19f6c85859f67ff2f7d057515f59f6e3a464e8eb9eb2bb9f9c92a5bd86976429af7744c67ac51c0c7d54c4ca529e0e59cad31c298bbfabf7a53cb5736559dff2c8529e4a43d995a7d1244bf93e5764ec7760ff41fff4d85fd03fb3bab2d85b8764296f7fa62cfa4759cadb8a95ddfdc60159ca9b56c8d84f89fea0fe594564c4132664eccfc9c8b0bf1e94255e35234b79066fcad27e4db29467d35176ed35d1f2c05e5980a18fb203658937b4c988d7acc8d2bec323b2947f744d46f93f95653d8ce5c378ac687e684fd617e3b1b1afecca3ff4c868df4730f455fd990cfdd4204bff8fee9425fea58cf973ad2cf3794896fc830118faa9c6e7a18f2a5b96f4efc9583fa92b4b7f633c515ff54664e8837b65f127dfc9d87f7345c67ee99c2ce51fa3bda97ffa1764e88f076549ff8c8cfa1c2bbbfc8a13b2e47781fe08e97fd7c958afd823e37c18fa23843d50f92043ffb7c9586f785396f39fac2fdabb1991218fd03ff427375d32f66ff860e8c7f10519fb1f301e23d46701a67f99e764ec9f8994657f6e8f0cfb527f2fe5dfbc90e1ffb9fadad747897ebaa881795e600286fe5a56c988272f858d7e71f7c385b21baf714e167d130d94455e3e80313f9367b2ccbfd92759d2f7af945dfad1902ce98785b2e8d77d30f48577a02ce397cf435f5c74c8220faafa7b294f375176f9872bb2942f592abbfb498d2ce5f38f94c55f6d81a10f821959e45372ae2ce725a664294f76a3ecf21bb0fdd05f4955d9dd9f4fc8529ede4059e2f73d61ea832c214bfb142959cad77f5376e5ebf964f873156597ff6c4ec6783a5276f72ff4f752beee9db2ecef60fe5cffdf23a37c3365d1f7af6429efa8a52cfa2a274b790797caae3c59832ce54d0332e22dac3fe47d764646fbed93b13f235216f9c8fc02295f3653167d744a867de42bbbf2f51ec952bec689b2bb5f1c93e1af9221efc22a59e4c5e79a8cf3496c3fe88b569f2cf5199e2bbbf2663532ec83a6b2bbbfee9211bfca955d79bbecdf04fb0d503eeaa3bcae2cfb0b6ec9d0b73d32e21567ca32dfa76429ffbcab2cfaf6950cfbfa4259ee9f90a5fca33119eb3bbc0ffd56657ed05fe32bb2946ffeaa2cf12a65d80337ca321ef43eda93f99f487922b617e3cf0365b1ff6a64c44bd6ca120f3b224b79aafa7b29cf7aa12cf1408c67fa7f8d0f65d177ec2ffad37d32fcd92b65592fb826c35e867e88d0ffcb0b65d9bf7a4c863e0e94e5fcf7848cfdfb4d65d9bfba0143ff6e86ca52fe3e19f1a71365b10794e1bf613c517f176b32eca95c59e23d900f11ec91568b8cf7e7bc9271de15fd17239e30817c8ae1ef579fc8386f84f68d196f91f112a9bf7a284c7d9d7f9245fe0e07caa24f8760c8cfe61159e4cfea5c59e453950cfdf7aa2ce97960e8d35a850c7dbfafeceefb7532d26b2b8b3db107e67eb71659e647fd5559ec934732f2d3e791df0d19f93595c51f15f91251ff250b32e2e16d65b1074664e477af2cf9adc9c8afaa2cf6d82518fa2cbb5696fc5764e88b86b2ec67f8204bfede5859fced9c8cfc5f94a5be2c2fe441ab20c3bfdf5396fd012c1ff5d781b2e437214b79bac7cae22f866494e74c59fcaf0e18fa69c5e7a99f9acab2dfe3882ce55d2e95657fe22159cabbbc5316ffef930c7bf952d9ddefb3bd1394f75459f623a03d19cf9b1f90b1ffae5096f8cb928cf589b9b2c4d7db64a9cf7aa52cfae2980c7fd65796f8c5882cf5691e2a4b7d1ec8187fbc0ff9b7627d20ffaa4b6589570764c8df2b65a91feb037d37b95776e59fe8efa57e17b1b2d4ef8d8cf17546c67e06f417f561dc5216ff8aed017db80894c5dfd4fb58bfbe5696fdb95532e6c35c59ec2165297fe3990cf983f94efd387e25e3fd0e97ca521e8f0c7f3b5416fb82e5c1f8dfe8efb13f08fd4dfd39fd204b7e6bbd2ff9550ec9f08fb62cfb2f3330f4e3e8932ce98dbbcad25e6332e25f3d30faa772af2cf1ef1919e59982d15e2d9697f18f7765d1efe2bf44d497f30e19f93d90719e0df9c7d0ffb3828cf533cc57ead3cf5b32ec2df44f0c7ba82ff64594c0ffbf70e32b50fff4e2044c7df6a62cf1b15330f493e72b8bbed823e3f73565895fdf0a53ff783764e89f4f65496f49467a1565594fe2efa16f8a07b2a4ef9f9391fe9db2dcdf9091feb5b2e8ef7730e64b75ae2cf91d90a15f5f94653eb13cd427fa3ce2114f64e47fa22cfe78138cf935e07de8871edb03fa21592b8b7ecfc9927ffcac2cfa83f5877e882f9445be5e09539e77f7c9925f912b8b7f3a254b7e595359e2012f64c96fd55596f58f1618f3b15e21633df45059fc697d1ef1990b65a97f4196f2543f94ddfdd12519e313fd45f91ab33e90a7d51e59dabfb2224bfed51919faf851d9e5573d2643ffb6c19097d32159f21bb1bdd0df9b7332ec1fcc4fcacb6843c6f9c36365592fcac09087ab4459d677f6c858ef3927239e3157167d1781210fe757648cd791b2f83ffc3de395a9b2946f46863fda5416ffaf4b867d119271be0cfd4f793a8cc890ff6b65896fed93b1ffef4559f417e415e56db1a72cfbbd1232ec8db1b2e8871b32fcc71365a90fcb03791d85cab2bebd24637de4942ce94d30be13d477b352167fb44146ff4ec028ef27da37c17aea6ca22cebcb4764fcfd12942f813ed9ec29cb7ac30919ed75a92cfa1ded9142ffb4d6643c8ff19b32febca72ce5b923e3f94259ce6f407fa4287f6b45c6f9815730e2d3d35b32fe3e83c817f5dfa63918faacdb50167921e5d9fa471fcae24f8ec0d4378f64c8bb180cf9d0ef9125bd60a12cef733806437ecf07643c3f5596f8a9e82fb5cfe70bb2c8a77ca02cf9f7c9a8cfb1b2c4e7f93ce4e9f2902ccfd72f95a5bc4f60e8c3594a46fdc53e30f61bf69b77c0f87de3168cf13ead29cb7a92de17f93446fb45186fc52119fb839ec9d80f22f233e2fcaf5c2a4bfcae4b86bf93298b3c7e24633d3400637e5d3494259ef64cc6fadb81b2c88353b2e4377b5596785f878cf833c61fe5c3f05659e41bcb8bf69b1f2b8b7cab90e19fde8369ff6f59e2435332d6afdaca12aff3c8927e21f222a27c5a3f2a4bff74c888ffc5caa22f3232fa674dc67903fe9ef1af2e19fec3b5b2accfeaf3925edd5796f640ff50de8581b2f89798cf946f832365799f418b8cfebf27233fa497c2fe8fde9465bd6f4ec6fee64f65592f3b25e3bc39fa93f232ae2bcb7af53e19fe42aa2cf24f19fa6002863e481265492f2323bdaeb2f8276764b4ff81b2c443d0ffdc8fba6279b17ed88f9465fffe1119f1f65365293feb9f227e112bbbfc7c977fa8fec7c5b5b0c68f8ec19047bd3e18f2a1910b53fead6ec0987fb5028cdf77ab60fcfe2211a67c4b6660cce7cd3b19fb39eb60ccc78b1b65896fbe91112f1d9345beae9fc992df300463fc5d0cc9f8fda330e5df305596fd9fd764f8efafcaeef7171f64496fd40363be4ddfc9b09f6332f6bb64ca120f5b90b15fea098cf1b4ba5316fb6a42463ce45059ca7f4f463cc45316ff8df5817fd75a92a11fd0ff31daafd75616f97441c67ee837658917a17d29efd60519e75146ca223fd7649cffa82acbf98a3b32d68b4ec1b43f1f9545df54c8d0370fcad23f3119f27f0ac67caebc9125fde05459ecfd1e19fbb1ae9445ff34c8d21e6bf40fe567f55e59dedf9092b1bff25859eaf342c6786e2a8b7c3922a3bf1f94e57d43283fe5eff45259f6675c91b1df62a32cf6784086fc8d95257eb447c6f95b4d1ff1b90b32c6cb2d18f27b5e5396fdb9af64f8077bcab25eba4f46ff687a58df6b90b1df06f389f27d5c5796fc5ec8d07fe7cae2efb07de88fec2b8b7d3526435f431e51de4f2664e4c7f240be47efca72ff838cf63e5496f1c7f2a788e70ac711e39b4365d9ff7749867d2af339a63c5bde80299f0fc890574d65777ff506467d9b9f60c63f5b64e9efc65a59e2070119fbb9a5ff63ceefd6b5b27bbefe4e86be40f939df7b8764bc6fa0a62ce393bfc77c0f3e9465bd81f9a13f93900cfd9028cb7e822519f18a3365d99f7744c6fa06f3c37c1fbf90b15e992abbf4c30732ecff3b65912fc764d88387ca32dffb64c97f8efae8fc1e2acb78f3c888173c28cbfac0868cfd3b6fcab2bfbf43c6fb5c3f94c5fffa24a33d301e39bf477bca32bf591eaee71e298b3dfb4ac679923b65699f2619fb4fd17f9cefeb3332ecd985b2ccf76b32f23f5096fe6179e99f1d2a8b7ed1fcb05e3f5096f9c3e7290f9ec990070fcad21ea76494c75716fd5090616f1f29cbfc70f2263ae6fccef6c8886f2fc15c9fb8204b7ff5de95c51eab90b1df2116e6fc9df494a5ff03b2a4378d94451e0cc9581f6e80d19fa33e19fee84259ca7b4e96f427beb2ccef2b32f68f7964f1e7d72c2fd79bf6c9381f74a62cf6c82919efa3fb501679552763fee5ca623f56c9a8ef1d18f3bffa4c863ceb284b7b303fceff1b65b127597ff45ff75659da9bf9a3ff5a1b61cefff999b29ccfb926a33dce95ddfdf49e0c7998294b7d4332f4c99665fdf4968cf5842618f33d7c27431e1f2bcb7c4fc992ffa0a22cfdff46c67ac6a5b29c37780463fe8f3fc9b02fce9565be55c9781f40a42cf2e9858cf6385196f1caf6c2f898b0be900715961ff2205b298bbce89011fff695a53d6ec8789fe299b2ecbfda27e37ca1e417737ef79ec988ef4b7faafebdb820cbfd6943d9f963cd4730da7bd95096fd767b64aca754c9f03f6fc068cfde0719f1a1aeb2f81be764f4e71919fb078ec1982fab0765b1cf9b64d82327ca22ef7c32e6abf4b7eabfa84296f47b47ca22ff9ec8d82ff2a02cfaba4d46fbf5c890cf0760cc87fc9c0cfbfa912cf94febcad29f5764ecbf5c2b4bf9fa64ac27697ef0f7311e38ded7e7ca220f7332ea5f5796f68bc992ff67a62cf547fb6a7c6345c6f9b6b5b2ccbf4f32fcd389b2d82b1764f4f74059fcff1a59ca131c294bbcd1b57f6cf585f4c70d19f6f30318e36bbd1166ffc62b30fae3d32323fed026e37c46138cf6a89e91a15ff7c1a8efec4959d68f5ec9902f7a1fe7a39cbeb2e623f6433bf994a687fc7b9e9f60fc7dd3e61e187f8f74b60fc6df0f1c8f848ff0f7bfa32e19f1a04730d2db8460a417d6c1fcfba4488f7f0f6c81f2f17d7bfe1318f12cff5698ef93497c30d7af4fc17c5f5f00e679af8130cf6b072b30cfef1e81f1fb10e5e37efb654f98efdb0a2764a43707f3fd8f4b30de2fe577c8c88fcfe37d157e838cfaa27c5c5f096330deb73454c6fb8f3c6549af20a33f5ac2f407ab684fae0f143561c6bfd2088cf1df457d192faaa0fc317e1fdf0827905f33b427fdb5f1828cf5894732f46548c678dc80217f669eb2c4bbe664e8ff0b32e2917760f85ba34765c97f4896f4c3b6b2f837ef64a43f23a3fe180ff4afe6cfca12ef0fc888f79f298b3dd725239e74a32ce5fb20c3de7c21633f08fa93fed3e4848cfd4b67ca223f4fc9a8ef87b2d4f7958cfa56c9e8ff6b30fca7f14c59fc15e647ffe95859f425db03fd19be294b7ca34d86be3f2763fc62bef3efd7171764fcfdda3365f73ef5b94796f76fad3f94e5fd59cc0fef97984c95e57d1b0519e77f626589e73f91b17ea0f7f17e943b32fc3bcd0fef676a90d15e27ca62ff1e92a1efc6caee7e5c234b7bb5176469aff6c2f7cc15fcc39f21ae089ff6fbd85c49e9b9f89bdfa5f87ef7332971b7f43d7f97949e0b713fc3bf7b7edf1f80839df492d2efbf2b97fdfdb0549fd1ceef83d2bddd72ecd637ff4d7b8d4b57f84dfdbd523ebf6affdd76297f4e7ed35f7f24fdf137ed1deee4bf5bff292ef79c3f73cfcd7ff1fc3f3d3eede7e2bbfc9d8e5cfa2b7f6dae7feeb370d7c6fcfbd3bf3057612eb95fc1fddde7d7ee372bbf8aefed674d9fdf5ef6fbbadf70df37bffc5eeed7c072bfe1b75c190affd27dd7f8925605d715d2bb362db4c13337e6f3c6a56feb51987f4b7d58cea596bfd06bb9736f7b15a61cf6f7b7fe1d9e633ae5fadb72dee3b35cc6efdae177fd50be6a680f9bcf9de98f1fdb7fa5e5bfff52aeef3e0bedcf8abfedcffb9dfefbd5657fffe09e6ffce4996d7b7efff9d7c66745fb93fdf1257fe891ca7fe86a62ced6c0b5d2bfffc8f5b367af77f2a8eedcaf969ebb0657f16c7327fd72d9da25661e6d5cfcee71a75cb5f61faf57f0933afebbd75fe913ef37f9fed17ef9ee77fcf76e7fec3ecb3e68fe0df5f92bd777fd51717a84f3ff9fba6aa57f37fda7bf31ed0232a0e1744913df55dd2532ac82cfaa2f7aa6897f3f9b675ebe2927afb6fbae81ef1b861bf8ae70f71ffd8eff6a3edfcc67ed17e97cdf1e52eea5b131a8e37ef6fb1af2fff1bb5fe7f1abab59fab72dc3aff3fe23fddbf8f2ecee6fd91f3faba7fd77fab78d893f333e7fd91fd0237f4676fdd9ebfd1f9493d4212fedadae28eb107e36db5f75c9ae6c2beb865a296d7bb54bdf7ffc442efe4e27f07ef69be7fe48fdff6c3f5066277f639a3f6b8bea6f2eb66dadbdd5ddffc9eb97fdf11fd32394174d3ffed3f2ef67d79e91637bf02f6efcd50f3a64cf5f397bd97eb69ddc6f38b9b5814ff1639a0dc89595bfef6ceb95b3af37ed057c11eb03d9fc3a4eb7ecca5dfa5fbb32767b15f88c55a6ffba3d98def6f3cfb4ffae6e123dd22b95f7df4bf7bbfeddcd8f3e5455afe287ebab1ef9b1bd7e97f7dfa147e492fed8c9ff3fa447ca7333fe66feeecaca5fc9e3b2cce17560ae433cfbf84dde1fa5ebed9b72354b97956b47f83c36d789b94ecd75d6deea277e5fd6477f468fa43fa9ff77bfffbb64fd6e9af1df90f6aecefe553b7ca747fea89cff27dae067fdf1558f70eefc539fb4e1a94776e76a59e6574abf235316d397a8224d2bdbcffdc2f3cde57981177a91177b89979acf2eaecc5c3dbfebf5bd813734cf8ddcf32b3f94dfbadfe7a56bdc5e78137fe54dbd9937f716ded25b796baff0367ec3fbf42ebc8a57f56a5edd6b784df3df9677e95d79c67af3c6b0b96d393f4d3a37285fb5549ff225df79dfd67fb71dfeeae7aff4c89ee98fea5f4c9ffaa11c8b2cc7debeaf7bd94f6c78b7ae8f79fd7a7cfcddedb4db1fdfeb91ff44ccc0cadc6bccd51afe6d3f1f71bf1c43aa959ea7bfc0989491dfde9db94c3adebdf7e099df798fde93f76c3e8d9cf73ae67a3597d1179ef17d3ca33bbc3d73ed9bcbe81bcfe81bcfe8096f692ea30f3c9b9ed1139ed113de797b11f8e6f2822008cd67642e23670363b30726bfa06b2e63b3063d73f5cd3530d730180579300e269089a68cc1d45c3329abd6f3bbeb3b195e29d5b91c437bdcf9aeec5ffdaeed77f32dfb54ec8f721ffd913477cb5bee2ffebb9cd775a9dcd7edaf7dfb3bbdb0fb1c7ffff8cdbd3f73edf6c7171de3f4c83fa943c4de6e409758fbddf3afcdbfad1ddfb69fc1dc7f7431a9225848ecc87c16fabb1b534a895d17c1325805eba00836c16770115402332203634706c637081ae6dfa6b5825670195c994f3b52cd6f83dbe02eb80f1e8276f0183c05cfc14bd0098c7f11bc066f819941819941819941c17e701098d91398d91398991398d11d9899139899139899139a99137ae60ac2308cc2384c82bbd08caeb01b6661cf2fc27e380887e128ccbdbb701c4ec2a9df0967de4338f77fee13548c0ca74d5c928da6fe2bdb53a1fdb4b2f9daef04263d7f6dbe3333db5fba36e9189f6865effd2159fa35dfad5e5ea20c4d97966977d31f6dedb7af9f3f4bbf8998a2ad832de3ca94ef0e7aaa5daabfa953b030e98b0e93b860536c8c70fd93b2d65cb9b6e5603bd577e28c7f872eb1fdf18ddefb0fe991b2dd9795e40bf548bbf4ec6be99e19e96161ae4df8195e984f3b72cccc086b613d34b3226c86adf032bc0aed7337e16d68f44b786fae0773b545ee8726fdf0297c0e5fc24e68d20e8d7e09cdec08cdec08cdec088d7e098d7e09cd0c09cd0c098f65768566968466968467f8343325f2f1bc2ff723336ba2c05c46e74446e744460e4549308ad2a81bd97abefc42265386574a6dc38bb19e13a461ca1419dd15f5457f064bd155d4597fa8fd77ffbdeb8f40fe078bf6575df22b7f0097fb4d490f79617bebbb510f3c4a5f6adf7e7cd3f7bf1a3be5f8e39fd1757fa48d921d76ff767ae477f6de5ffdac610d416455ec6228120f6a4403730f32221afa76dda1509961d7246c4bdc44a3288fc6d1249a46b3681e991e89cc288956d13a2afc4eb4893e2333832253a3c8f44a548bea51236a46ade832323a2532694466d447b7d15d646650f410b523db63e7e6f3c9f0737017991e8d3af61eeedb7f9b1915991915bd476d37433ee4d3ce98684f668ad359360f33732233d3a2c3e8283a8e4ea253532fab03ef4b7eca5759bed523cd925c371c4ca3b3e83cf6632f0e82c28be2303a8ea33836e98ee32498c7c6df8abb81e890aaae0bfdaafdbf5e5cfbb1f1b94f5706892d5de39ee885dfa7cb4fd797ed459cc5bdb86fca672cd078e83762bb4ba7093db8b0fd6cbecfdd772ba343cc1808276e969872c463f4fb777a64bb9e23b1cbb69653c6c85f1f9fdbfe28ef65f8cfea9157c80cfb196ce58dde6feec8a2d7d2bfabb8674671b0095bb1b1fb63233b6363efc77373997bb19931b1d1f0b1d1f471116fe24ff37921f22c36e9c46ee698cf9ae8023baaed088f8c3e71b3c4c8b2b86e3e5fe43ba7233ea03b0cc70dcc0c7c67d93dc719637f6f4740cb702e7575656eb77f6e2f7f67ffe25e6446577c692e53ced8b4536c665b7cdb16bd62afa31df9fdefe891529bbbcf698929a37f27dbbf4b9fbec6d894f54e2ea74b76d7aa76d7ab5e7f925e6de7df657d52f647fe2e7db2eb1f7ed523ffa40ed9ca50d109e7f17dfce017b19103b1d119f1139ebb31f2c78c56b73fcaca302bd3f6cdfd67fcfecafcdbb476dcf18ee3d7f82d7e8f3fe2bd783f3e880f633362e2e3f8c4ea97f834fef0baf1997f629e3f4ffcc4f35749e0744b3b31332689e40a5a32e2a3a7244e9292ee30233f31d64cd28585e59bef5f4497b819f581d9716ad8e89c24333ae8499e4d7a493f1924c3c4ca4f2b23696fffce1fd9b58fcd8c48f23848c6c9246c25d36416cc93b95f24a67ec912a3b12d723ebef8c3edbf2b9b1bceff58fa17c67790f59f3be7f7358c0fd4713e611b72fa77b1a50fd809f6593b3b6cbb188995185f2a29bc45b289df92cfe422290c9b5197548dff68fcabc4cd2cf12792fa2ff54849af99df583b847e2af7eafdf5f1f9ffb33fa232d5c890c4c8e0c4c882a4158c12c8416b532797edafeb0d8861254696fa47613d319cd8d1736b678af934bd9118cb29b13d62d24e8c4c49ec2ce3da85e5e7e425e924af817dde584d8919ddf6ff8919e9c9de5627b811de9519c04fce06ea0bab2bdc73fba27b924c2c33ea94e440625dc9617264edeee4785be76fe3f1657f64477e3abbddd6d7d42336333c3915bda87e0af5d31fb5cb7f96bf4dc3b6fd19fac0d43335fa35e51eae3f2aa3e95742c7d919929a72a7462aa54622a5463ea7499aa656f20ccdbfe9abedda13df95b5561a43e5d859f527bfffb33a64d73ffc1ad7fa2ece5cf9328fff48eceac7b9f94536fa45da4bfbe9201d867974928e924e9aa7e37412ac8caf318adbde209da6337f1cdfbb98c8951fa7f374911ab999ae8c9c794ed7c9495aa41b634135d3cff4c24be2abb49256fd4e5a4beb69236dc6af693f5ce9da77c7c5cb6c9438f6ee5263a3a597f12cbd4aafd39bf43635dfa7f7f0ba3f4a3ae2cbec303a82b3e4743b2becf7cec27a828e319f96d387b49d3e7a51928b6c8cec0efafa4f657943f5c8fa9bf6bf36f74facae35695066deb876e47356ee769c9efa5d7fec7ecf7d6be7d1287d4a9fd397b4939c4747e96bfa16e5a61f56e9bbff893c7fb65ee16258a64f4d5ba546daa4fbde223df0eae9a1b7f2ced3a3f4383d496d9b9c491bdbd8606aaeae99815dc3ddc05b191ba1e31f3bbdf5d51fd9d52715897bfafbddb01b794137f687c9953f4f9ffc6137f9859efef7d7f1e2efc6ef377aa46cf7bde1bbf29e9ab25dc939cd58f80f73b0bdb5534d6b7553c87ac35d2353ba59b7d735b2b73b08465d2b5fcc68ec8eb6b2b26b6cfbee586493935155db1be63be393748ddceb1a9fa46b7c92ae9131dd6577e59edbcdbfb4aee264d789c8b8aef15dba465e7737a223e8777c99254f72515794f54af7b3e4a79851d23572be5b11d9ff4b3f8097ade377eb23bb6bbff40fcaedcc7581ddb6a77d5f96b52fdb7434ae64f5b8ed0373bf6b7edb35be983b07c3be2eade9741b320ed4f7a96dd3ed9a74bac66aed1a1ba07b25eb523602af31c363699feeb544cebb66b6778d1de0594967fbefaebdd5b3d55299cb3e11cb603f8d54eb3e881dd16d771fa39352993e76ca5cfb26dddd314a3dcf768edb5ff7856ffd9135e6625bd631e2dcad5548bcc9edec40cca9a2f128c6401a883388bde82279760fae6d517cef4683bfea3e759fbbb6553bdd57efc41b74dfa293ae1d6de3ee47f72df1bb7b626f77f74dba77f8cd81b90ecd7766e4778fe3b3ee49f7b47b963c45c7c12a9e76cf333ff3b220bdcac2709245599c257ec3d8b90ddff48edb6765cb7a02996dcbdc7231161b07696476b6165937cb24f21b3d88cea067be9d25e2776c67c856e7d83518f7db7bd149592feb67836ce8cea8883c6afc726dba525a9bd8c66e28ebb76b0e4eca5839eaafb0d7b8e12ec48cd41778f465cde91ab134f96cb8357049af80cfe785b3d8cb46599e56b3b1f5f3cc771da77b4dbf1a5decf6a6651397a6cdcbf88666541b1d60d73f3233ba33239db279b6c896887e7c9422e4e576329f99b1bcb2b58d966445b6c93eb38bac92991198d56c1f58cbcc5f6566cc640d632f98f1923583b9675764efe16bbca1ff96a6dfcc8ccc2efd2233333233ed9fdda0af1f55df75dc5eec57b70e5394da53c681f3afcc3df39d95182ece76adb1d427d74edbbd64653d529643e5f317afa57b8feded5a2fe354bbeb1be57808f58779c6d5ccc88fcc8cfecc8e2633eab276f09499df664fd0d6b6759ecd657bcce89cac93bd2603f3f996bdc7a6b533d30bd99ee880ccf45866466776981d65465665469e64a68732fbbb73b187bfd8abe57a94d67d7ba6777b9eac8b385df1b0f53bbee88ea7af7ac47af77634f44c597a612fea19f993f57b49ef3bffe25736309fdf3d5fc1fb6599d6fe2ad7bfac3197754f796f32ebcb34b0c7acd78dbabd4cf602f47af25cafdfdeeaa0335c94d3d0e3bd81e8f19ed1f93da3777a6684f5c6a5f6faf851e7daef7a66c4f7a6bd59cfe8fc9e91843d33b37aa68f7a6b8939f68ab09e9a51df3333b367f473cfe8e4f4103e18751ad78b6c392a320e740fdd0bcad8de8e4bb76ec431588e2d725da63cde311ee231ee97dbf5edcb7e2dccb7de40e48fd384b6542d27676c9ca9e164999d9f1f7ea357d539d930f2ad83348a2f766fd5fd2eebd564fda257ef357acd5eab67b473ef4a767af4ae7b37bddbde5defbef7d0b33b4b4ccbf51ebd453c882b3d333a7bcff16def257eeb75e249efd5c892ebde5bcfb47eefa3b7d7dbef1df44c6bf68e7ac7bd93de69efac77def7b3671ba3ef5bcfb30af9f1a8b6b52d67a31f98729b1e493fc2513f8cda6ea7c9b5917daf5bffe38b2e29f57a3f4a622b1bed6a623fee27fdb4dfed67e1c8cae37e0feb0ef4397e661f97d74776fd9536e467a5a40faeb1cfb8069dcd337856de5d8713e955e8f526f63534b9d66d65b25da337f5eef7077d33c2fb2323b3ed9af7c69f3b7f67cfc95fd746fd3cadf4c7feaa3fe94ffb6616f5cdc8f6ae4d3b2dfacbfe2a98f7d7a237dd4aeb81c40177a31c655dd237f2babf81d5f5299f56baf43f6535d7b67ddfcc06ab93fa668cf4cdace99bf1d2af9b7218dd62758af57bec67dfd4b3dfea67d98b29df65ffaa7fddbfe9dff6effaf7d151d6747be41a3646978cfc8ed531f1f3ce9eb93db173421701c0de8e6b9c43b47ba0df5c3b6ccf0d192ee911dab727327ffb0fb8da223fdcfac4b4342f2193dcdea469e9f74d99d31a87c1f37d3377fb66c4db1eb271ffc0e88cbebd5e24d6e4ec58e3a3f48d8cee9b91da37b2b26f5bd8b44edfe88fbe1d9176bf9549af7f287aa47fd43fee9b72f44fd1b267e219f6cf07fec0cc9041792da6acfb6adb38c920345734880789f9b4bdfdbcf54fb4d7777c94e04ed659ba9783eec0c8e3be9931835ed4fd72f6e177bae43b7fe43b5f8ecfc29f7292eb4cdac1b6b14ab2a31d7959b2b9a3c136ad415ffcb9c140facdbb6d7fb1fd07a67f0646470c72f135acef30180f2603f3ec6026f27f309791ed2cabce763d4975c8ce6cb1cfd978a08b099674b59d29b61d6dbfb9bd0fc626182ce0e799e70666d60c6c7e66560ecc4c1bd8b298993530f51ed8ba983e1fd4c40f1a98913f30bf1bd83630690f5a251d53dedb56d64b65bb89fe48a9fd9dce3ec47e2db776696dd5f4c32f069783abc1f5e06670ebaf06a607fa937032b81f3c64cfe9f5a0ed1d0f1e074f7d33576d29ac5d6af7c95a39357836cf9b12d9f5816c6aee9bd61bbc7a496c46dde04d2ca4c17bd6e9be8793e062f031580ff606fb83838119f103d3c3836319a5bd23f3db7ba32b52230f8cac1c9c04f3c8f6aaadf9d9e07ce81b7bf469e80d03bf188632ab6c8f0da3616c771f0e13d159c374d81d66c3deb0df3d8ddde8f53bc381e892e1d06fb8fdbfa6d587a361debf1b8e87268fe1d4c8bee71ddd51eef1a7e0ceaea7d81e1ece86f3e162b81cae329bcf7a5804723eb1565aa3fe598ca5ec8fecae236d7d94865848a6bcb69c9fd1d1f062686cf9617558cbb2613d9c78a7de62d8b07d66f71e436fca6f3bd8cb447f7145ff6cd8343afa63d88afb26bdcb7466d7a8ba07b6ff6cbf99ba5c89c4195a6b7433bcb1ed3ebc1dde0def65440f1f86ede1a3e804bbbee45652cf77db6aeb8fb0ed5c5cb0f4bdfd4d706574b8c967f824fe9df30bb1de64a3294353a6e18bfcdbce8aa1e9ebe1abe870f7fc9e3c1b98993e34636cf83efc181a5dd1bb0fdefa2bd36efb224d860732b6ed65748cacd318bf7b68a56d43ee9b761cbab3f5b592ce39f41b3bfe8829cdf04876fad91884b5d3ed7ea4e1b170af2e7b696d69ec5c76a5323264685bd1c882a1a9f5c8b4a2675a6f64e4f8c8fc766446f12832572cf26094c83af928953db9a3ae4406ede7c8b4e2c8d8c7a3bef8155c2b1819993732f26d6466dfc8c8b7d15874dc68329a8e66a3f9c8c89e915d6bb7cf19b9335a4b7ab6dca362b419f6c3ba4dc7e98e725ca814fbeabd8e3623c4aa18cffa4e26bafbbee82e2b6b6d7b8c4c5b8c767db63f1293dff55f76e38ad00f23336247e6bb9169ff5143765adad8d1a829bab55f17d9396ab5b77b8d21235d9de9ef5445f7f01a999935ba1a6dac1f30b4699bdf8d4c3f5bc96875c3c88cbc91f9f7c8cc8ed183c878ab03466decc079927d6edffa21a54bd79c76fc14ee7be3a74bf343dad7e992fdd2beb96399096e5f1dd6abd84fce320e64f6d87eb156e0c8f4c3c8dc1bd9991f8b056fd766ac5d3432e37c64ed95898c2b7b6f647e1bbfc2662aad6975dd1c71b11023ff466fc3d6c8f6b86dfd3dd18a2a1f5eb0f3023bfa46a54f37b20fccdcbd1c1d8e6c8f1ecb9c77dad88e64dbdaa7b29f76647a7774de1b8e9e8379eee75e6e74411ee65118e5719ee4e9609c77f32cefe57d6f959cfbab7c900ea3ab7c387830cf8df2dca6958ff3493e0d27b9d161f95c6654be103d68f79ce6cbec395fc97aba6dbd7c9d17b91905f18b5ff4447e77faa645f34fa75bdc1ed4fc222df24a5e7591e0779165db19b28d6d59fbdb3e637da9dcb4605ef71b79236fda588b3beb58c3fea16a49377cb75eb4eb8f509fd4109b32be9e975b9fca1be466e4e7976295bad1749ac4b63cb92d8319d5f98d8d88983a4d928b78667444eacb7b4e5af96d37f657d696b7fb15864646e677d1517e9f3f74d7f15b7a93bd644f793bb7918b439158f963fe943fe72f79473cedf4d6f4d36bfe96bbba4b8ccaad15591f22dac6f8649c7cf5dbbeec4d285bada54fb79fc1e49f9776feb87d713656d6d9d1e99a8ee91fbb729cc867b90c6eb6bcc8f74e3fd95913cb18756b336696e57bf97e7e2063d4fa55b9a97b6ec66d7e9ccf4783e8e8cb79a0bd2feb23d72287f313d8e5af28356a9397a3a23b570e7bd2ce61ce65b797f60c330d9ad1ed36ef8a5d9b9bb4c7fed81b9bd13ab6bac6c8f971243ecad8d46a9cc8bc1f9bb2d81a0d17928fdb4962eee5fb2203aca535ee8a1c55dd603ec71974a1d167e39ec4bdc67d919fba5716f67a7e3b1e8c87e3d138472ba3bedc9162659a2dbfad979de53d5b56a3cbc613898d7d91dde5787cb5f4fdaffc91b27d5cd2e9e369bcb13bf86d3dacdd3f9e89ac1dcfc56fb2ed6b63855697f54c2f8f6dccc8f4c778d956bfd2ee574bcce7d88ceec0e88ab19199e342f61cd874c71b91c1e34fc860d3dee30bb49bf9ed187edeb826e3a2bc5feda73360f7fa6175f6ebe5f4c7eef3dfc51477d6adf45efbebf7e33a74cf09a4f9a1440e9c0ef2f179b0d54de38648beb11d37769792b9c697f4a99d1eb16bc1c7c62635a98dafc6d7e39b30b6769eec6d2dd9955f6a58fafe4166829b05d7b42bf1bdb1dfb95b707c9bc7e3224dc6a657c766fe8e1f249661479d3d11356e8f1f6d34d1dac256ffd8796fe7b9b598c6b6e6cf18c176b4d8f4ece76b5e1ddbdf4eddb98b8eff61e4e5c0d8999bb43286b7e89eb523676fbc3f3e181f8e8f82f9d8ee14e17edbd6f8647c3a3e1bdb673fa55e3a43ce45f3dbb32256bf4efc8937b17e903d1d7cefd6c20b5ddf30ad6ced5c3b6bac7f3009fd55b2fcc9f98eb23fd246eca92d7b63fd4a30ef9b5eebdd4e221bef91f59ba86d2d9d492c52683c175d674757de99249374d29d642863cf5a1493bef515f355af3919e44fe32bb13cec3a85b5446c3ab61d27c3c9c8f517fad1adf9d8f21f06977938d89be4a343d71f1e2cbcfd926edd9d21dfe9909f7d3e61cf3574c464fc8be7bfe4f1f5775f74bdf97e32810d60eedbfecb758f369e7fd8de57fd732ad7f86132b5d6b3f5bf26b3f071328f8e260bf5474ccf4ecc68cd8c3c9f187933312d39294a73f41732e08b9dfed1fe71addab680193d93cfc9c5c4e6539dd4267599e3d65a703626ce6d4c1ab043fdd2dc3f43cf99cf8919411333c727978885999e9b9834268c55d833ed66c64ccc28b0114a966762f29898993931336ef2108cf4bc3ad61fa27cd2eed911f3d8fe21a6e564911d794f62abdb9892d3453bebce13338327d61a32bab8d7125bd77a84dfae7decfa23dcc3cab508db4bb63caf6d8d01d9a8c6e4cd8e7a911cbaf7f84474c0c4b6f387ac37f57d597718ec61cdfb1db123e8442743f785277bdb76d2fbf67b737f7280f58f7db4cb838cb8727fff6a4ce8f58c586059e697f636a86efa6e9cd9b63ffcfe7bdee3de6b8da361557372d4d6b89a1b0747dfe826db6e76ec99769c9c8a9f6dfdd9891d6fe677a377f7ae56dfef4cbd69303533646a2c99a991315363cd4c53a4465fe414adf4bed511ce5e7cdf99d3bb357d109d31ed4eb3683ded656df1d2b315f63d754446aa6c413af969d47672e045f64345cf62878726bfa037ed4f07dee774181d4d47c1dc9e699fe6e61a1b9e0c5be955300fb013c2eaa1e9d46f4c67c3d674ee776cfcc61ff16c8aefde8fe285d3c57419dc59399b64c8d794636a46e4743d2da6e6997e6ef7ddfa6e5fae7ba760056b45cde9e7f4625a999a5139adc91ea5a99102d346ba9c364be7477ee68f5cfb1db78f016bbcc3cf7c386dd97247ede9655b6247a6d7a7575123b575b91e35eda89f9a724cedec37b3717a37bd8f6e8cdf76ddbbebbf4e1fac8fc23394d1de56d7dbe82bfb523ea7a5fdccd28ff61939cb69f27fa45d602d18ec8d2efb077f4467bcc3aff826d6c534a64f18edfe8ff7b73364e7f71867eea4c3e9f679ab3f5c9460c7af9c1c71dc96c699cdfb59c6d7f465da99bec66fd3b7c1d9d47eff31dd9b6ed2027a04711ecfa43c352d3435f263caf8c1c376aebbb9fab295294e363cff4686d83db2b1ac1859bb797a84124fe49ec6c3fdb6da93b655a6c75b1fc8f90376449c88976acf91db75d8a9add919d67e2193edbaf1d4f6fe93f83d3393eecce89b5910d6273ccbd0dcea107796cf9461164e7b337b96b08328a52fb265168bde98e18c9aee61e685b5e9280f4633538659576279339346daf983fe082fbc8365d64384f344dad77ecefab2463033759f0da57c6c5feba7cc6ccccfea1a339367795bf70ed8116ffd17ee5956d90a9d61a3ae724a602beb13f81d2eff0efafbb9247f9fb63ae00fe9919ff8b1e5516efb7c3696cfefd6eabff821fcbebd538e529a3a6bec787d954f893e976297e6f733330e67c63fcd53ec3fbb9335fcbe797666df49f022eb23c1dcc8b162665a72b6982d474170385b41239f5306e10c1e668df3376cab3dff5e86b8d960e7aa8d5216b3b5fddec5441e3012f6709d62ae97f4508efdb6f6deacb0dab0f7305cd998b7bf1abdf9c3feaa3feecec2d16c9375669f7ec3c670ecfeaed985bfca3e6695998d9af666b5dec5e07e564fd799db371bcc67b69506d005764da365be6bce5a36fee156baacaeb2d1eebdf4313987cee1790a9ecf6ffbb23fd75ed69a5c78c17433bb1c9c798bd915f6122d4b670c7fe68fdc886eb265ef2f8c061cceaec70fdc851fb5ad3799af6637b3dbd9dde8507ca3e07c766f634fd65ab5bacffa0c363a3b7b907fd39f747b92cfd15f7654f8c19d9b254fd415939193d3c62610a9b56d7ff73b9c207067354b52affcdcaffbff2733636706508ffc546794fd90a7d2f7bb7e09d3a66f75007f8efef5f95642b8fba762b9ceda76b5c11f3adfbc62df8fe3d652acbf097f84e7fcac2d3b333a65f62473afbc6f89ba64774df5a7fb744a25b73ac2ca325b2aab0b6c69ad7d3c3072636666dacce43deb94ece1f36d4da9b3acbf327b95f799fc70de9b7124bcdbc4c6c4dc1e2f93dfec4de23c767d99e7aa7f5807c73e9f99f9cdec43f2b3f190d9de6cdfed2f58949ee31edcf2faec6be91ecae1cab59bd72fd647ac1eec87a26bdddb244e4477da585eb496b58cd981b0b37eee6687b9a9e7ec4874c6ec78b4999d88df36434cc7ed12c18850195cf6037cf4c747c926f8101daea3ed05ed6f75d9d93723fcaf5ed023badeb1bbc7e1573aa9a4d3766788f581edeae3ec5c2242737feed9757db7de728ed8d6838cf7818d0f5a3b81fbb55ecb673c759dfd462c977920a74ee761dbc50068eb59af6d901a7533c3cec43bd101aa070eca312d5c28f93c46e9edccf89c4c6d8c649e6445af314fe7dd7916199b7adec37cf7b7739c7e8ff50fec77f3fef4cded566c39d9ecf62ff57bee2c5ae1bfca9af4e0117132bbc6f3ee453d2313b24b2ba3bba7767d55cf2b4f455e58fd29a3dfefcc077e311fce47d68fb196e63c9f8f23b7e30fe7b1edefaeb67b4983a9d3017226aeb4dfcdea88f9c4c5d91aba67b5bce65ed9f147cc6f527f3e9dcfe6732b9dac0f61dbd5591fa62e79c3946be1af86175e61e380b66dec3ad17c395fcdd7f3626e46c3fc737e31afccab56ffcc6ba23be675aea770b41b9d7eb4d501f2b68b69fb4b9f7deccaf3ed2cb3ebea368af2a3eed819c13f7cfeda5fb5d268326e8bae7a6eff38e277d21b718dfde3eb38d3f7e1d815e16534cf0fbaad79c36fcc9bbde6bc35bfb433c6452faaa23be657f96a7e3dbfb1fb8fed2ec9f9ad1fcfef5c9fc978c27ebbd2fa886d75fb4bdbca762e7b628f3bbbd7ae619a916cdf3735b77b75cdc899cfe49cf5fc49f6cd58cfd8c640ecefe6cfd064c7d2132e467d20f1f7f98ba437efc8de9fe98becb7b1eb1ebaae7252d229bec8469bbf3b63585ec7663c8bfb3d4f249ee5f6efd85a5b3b74d2d6bdca2a1b1ebfc6b5beece5b1ab9c83782fb3657cfb853ff1ef5c4c03ef88b4e5b0d7fcbdadfbd9e61f7256d2ad539c49d4c4c6fc9c0cdc43ffec4b64d2bef325ec87f5b969abb99dcd66e4cf4ddbcc4f4aedc775809db56ceed6b47d62dbdbeec3d5b5ec93ef9fffb7beffc9735627da7eb775b29fa1bf8da169bf63f4ff90ce213cf363c43a312e2d5ba960ef5b8b746ec797952a75ecd732ff9e9fcb5e8485dd4563f4eac28ccf45207b00adae777b13d0f7a661bfe93ff737cf22df5bc48b647c1c9fa5cbfe7291e673bb00b7c8f2380f8777a19911a629fbf1647ce8d58d933df482eed962b4c887fdc57831091f2783d151d8b76b10612fcf17d3ac981c8461f438991a07671eb426d3a035bccbc3ac08a3c562b1342ed22ab85cacb362fcb4b0ebec7178bfd82c3e179b301ade4d4fa6d6951a3957cafcdefc7b3a7f595c04d5eea91f2c2ab3869f2daa8ba41ff8f1a2e67717f5c45f34fc9ed10dc345737ebd6865c5e27271b5b0b5be59dccede7c2f3ef72f1677899f98e7ba9191dfd12259dcdb7a1b1b34f13df35bcf7cc67e6ad2ac9aef1fccd0795c3c2597e63bf3bd79eecf7f06fe6d5237ff7e5ebc2c3aa6ecafe6df6fe67a5f7c24f545129f9b7a8d177b0b334216d9e2607118dd2dae17478be3ac085a8b22baec0f1627be973e79c9629285836e783d3b5c9c2ece06e3fef9e27ce92fbdec7e512c0353ef6369efc5ccb4ef8c9fb61d83cb65b8e5e9937dcef6c732faf1f9bff773fa346df7a692ff647f7867f3b5ef41b3e5306364b434e362190fefecfde9097f67fb1fe99876983e4d4683c3697b99ccd661649e4f4d7dbb66865f0607cbcce8d9ebd960b6b7ec1953bc1f1f2c07c9c9e2697cec45f1ebe42a3e35be696f395c8e867dafbdccf3e672bc9cc4f7fe831f2fa78bc4f6bfe91fd3ffe313d3573a0edca7b9a047da5bf966e7ce7226bec9c2ccc1e55cd615acafbfc4bb97dc5e5ff830f65ada9540231317669e2e57d82181f5e0d1fe560658bbd9dabf5cefe09ecfe57a592c3722d3969f78fe4c3e9d0e32d7f2c25cb66c90ffee4c1ded7d9c5b737b90c2b6eef7b1bb2996b5b033b3ebcb368dba9c0fd773118c2fedfa09e5fda07f5587301686f7c24c3f652dcadde3be64d32e0b53a6a5f5e9ccb56c623dc393b3318b91d4d1be5f725a601f5a5764a75dffb03a98eb18aeedcedb5fd695d89edcfbc0371e595e865fdbfb9ff8a4ce608c943606cbc7f53167fd95bee773cb96fc6e79293ac4ead28ce7208dcd927c8ace585e0523bb57245dc9194bbbd76269d2581a1d66638edcbf4e7f56639495527f7cab4710a759b9f32078efd2b0216ff7b42b56de59d65d1a0dd94dfced3bf35edd730dbb47ca1bfb8da5dd1f3c4b8bfedde06a1289d7e96261a75b7bd4d5d82bd9bfafb2e7b3070decae9bf63672076fdfc6badddaf04c76cbd87304f6ddbc7ab6ac16ccdd7b3ceefc6264f7397590beb1bb6dec67791f35968697a635968fcba791f16796cfcee694f7bf6fdf27dcc03ed9c29d25dcb833f11d5d47ffb357db97f70adade7af1926567f96adf0b63f2f0dc1eaf7b777eb2331e2f5f97f60dac67cb77279d6c9cab63ca6afdb85e30f7726fb1dc1f27cb03b1c8ec0cb23e1ecf71587fc1ed5279d8c622759fd9e9d7cbd9efd7b2b6bc7bef9fb86c19ecfa8addefa55104f43323398c33fd701d6037a5ddf36ba473af9dc56e1ce4a66d8c95b5b4abae2f720e24be30fd65f7661c64ddde265fd975a2e5f1f26479eaaf701e7385f39bfc1b02d24775e75b7aa5f7057c779efda3bd3ddf762db6fff24cbc603b07ddde95f2bed4d299697db71fce372ccfc54e2cefcdd418d82362253ca7f1b0f5d0ac5dc958cc17cfad2d2dd8bd59f97607caca937dbf2a03dee40a9c11077bf541e498f37e63d8af764dbadb7d747bbb8ee4375fce3e972ffa38dfddfb77ae4aa99ca6ad56466eaf2279d789f547d447aa8aae5ec5b2877a9588ae18f36d412772767f95a23daeb03b1df6b89d2d5ff62c97d63bd4f33efb9117b39fc48ffee68b33c5bda969c7b3576f9bfbb6be598b9fd7646f85dd3fb6eab6bfbe0f8c3e26fc6aab435699c400edba9cf59bf55c3fe3a0b415cafe6679ff9c5ed8f72b73aa22670b8d4cbe3576dad370d43db57b8fe2e770e4f6415a79e57a14ef1eb1f3f245ce27381df4e8ce4337ecfc5ef5567dbb276b5edbc62a9cccb89a8c54b7b855a9ed3972591bfd3e4ee25ad64687cd4858d9d3417babe1788a73662d1b430ae656060c2e8337ebb9329e6e5b7d35dab28d68aff2d5d8ee4674e7dbdfbe795779c59eeb737127fb1ec9bfe77db24647d9bd5ce9663559deaca62bab13dbbee7cacd5350ebb65bf99ccda2a3d57cd25f2d56cbf9e36a65f732dbb321f68480b562ed6871eb45ce5a95bd073666e5eaf7107dddcff4f0e3bebaf2a8b5eb23ba77e2fd1ffa7c91f2d112dcddefe5d6b8b9c3fd071d289fb6ced6c24c6f930b6f62fae4c897773dd660ff3c3a9deff674db3dcf2bbb13c993347b8746077767896de7a4865824dfb552515d62d3f2be7bc717f4c8754987bcae0a1b275e6ddadbb8cf71fbebbed4f219876bd141ee3c34623856ef0c1e569fab8b922e799788a2935b5ca17ad9eea329bffbf0073df28e5d14a7b0bbb18fa86766e1aa22efc0b5f9aeacfcc0085ad5657f17d3ed47c8d76af56ee84ef3ba3abc96e4fd6e1caaf9cdbd3f19d7b2b670909b72d9f298b65d35e59d62e5772d5a89349ac8c9b5fe427c3c2b33ed2e98d160d5b2fbc6ec3b469cc582758cf27ad20fe7f079710de1e12bbbd179f20feb9027e46b75a4a9ef4a67c9b68fe93ffd4a07d933aaab6b9c6367ffd4da5fde87a2b149c4feac54b57b2decb990d54dfbebfe8aefde359cb6bfb105709ebdc1f55ecf3732d4beb74fdedd27fe4705fb519b784f0663fc559fef8eed94cecf35ecbed5c4dc5b19ff62654feb9c96de25723599aa2cd15520deffeabf3042b9badf6a61b787ec436425cf72ac1ef26152f18b553beb8eec68f1a3b65d9b5f3dae9e448789aeb272977b95c6e1aab27a1e1fb97a528f94ff766dbbf4fddff04ef260393e58d9f3eed9aab37a9d4e57f694dabd17b9fce55d2dee9d20ab77a3bb5ac3faf0349cac3e96efe673b4f2567babfdd54170ccf527539f52fb717789db69f1cbf5891ff73b85fb76bfd63fa843ec2c3f0cee6c5fad8e56c733ec3891dd2fdbb57ab73ef25ed21d5fd231f535f6c3bcba3a599d7aab95dd55daee9eaecef1b708f8774b5acea628ecb99b35def3bff6fccef4d43b72ef9face26fc2ac314eb7efb497bf6375e3fec65af1133df22b19f8dd7b06cbb676f9bd45e5eb45cea2db13508c83db91ce5d073fdb95409de1e48791716b2337d621e2ea3bfb765cfc7ccf7ae26d17d758476d7de73b9f2bef76e33b3c86d375bc36d6dbda9ef01db575bf9abe0b70f74cfa5fbc6c2ccbae3bd9bf8fb236f2706d46f3ba676422d768ae65af5c62da6add97b5e1a9912e8b965818367665576ddd3beacba3ffbbb5687c9f60ad9e7b6275bf5d593effa7fc11eb3fd97707d8ba0fd03fa5f5f16057b7ec5cd6afb2d19bf5d05c23899daef36fc622c6a3f589ed2ab2dda7b71e97c6e977e3b96c1b95f7cf699afa5e14bec384b1229ead586bdce7abddfe5dfc06efeee3fbc7e327bfb19ecc47eba9d4d0eeee0efdf5eceb5aebcefe1b6ad653d129c1d57abe5e64954477aa71ef265aef4ad6a5d7c6b35dafc2d17a2d79592bc48d127fbbb7d8ae3e592fd7cae2856d651b45ad1b59be11dd27ebe8edc5173952fe7b7e7ff6d3f86b9e19216ba3f3d626fff5859cfb9b75b3deba9275d28f60beaeae6b569ad835605b1fbb93c24519ec0aeec356a7feb8ef69a7fdd84ed81deedeb4906ddb7577368507b27fee9fd325b20a3048d7f57543fe8252e8f6917ddd933b7d6aff5ce7b1af717a3c6e66857d0bfac4ee86cd313e9bbefc1d4a77fed39ebc36eddc5cf4d72d7eb7f37e94f2beb9edfe875fbd37befceec5f299b8eaee9cfac9557e3738edf9b6c8e5f5254e4dd93d40a675d6bb67ce4ab246f77de19c82931d26adf5cd8e5ff1c4198359627588ddd1725192511fa2d519e3b2e9db91e7fc9fa1d8a96b236ff2bbf6d73592f64fe4d35fb8522feadaf7c2d873e9eb7bc9d7e69f9e88bf61cff8bbbf8be26d756e794dfc877dafa5ef5cec6ae75c9eeae1b27f421f7067264df64bdffd039f36fff5c3babd7e94f8627eb6ed0fc6366d1ffeeafc885e0fb2c7796deab97ec6787bfd46475ccb7b78ac3fe7d6c276f7e77dd74ff6fbeffec6f0f67dbf3fd30be573d9dc67b4867cc5fcd4b3bf120b92b505fbfc87df59bfac3bebd7f5dbfa1d27801fd61fdbbd9a3fd121e7d21a7cbbcc285befadb10796e717f8b73f68b5857e1edb78967db70acf0dac0f204fed4cc30e36fb66212bc3e7d7e1647d349dad8fa3a3c4daaf27a57750eeeaccbffaee7c93763e307ab56d63fad1d1f4757dda1f87a3a8919df6fdde9d3d412be7692279bf17ac511be7d35341eff6344112bbbdb93a024bb141b6236357d8e75696c9e5b50abe85c1eed7fadb7729ee5c6ee592fb6e6dfecf3887cef347653df24d5974ffd84b70b7b6d2f0bcd728fc609e3ac9fc839e70ef2788edbb80cd9871ef862bbfff7857e794fffec8f2b77f7fa4baf3f99d5ff2b3fb5c2b29bd6784ffb67f03a4b0ab5d46c61701f448fb272d5a6e219e5b3123bc3069d8d9411d63cf22ba1de367a5a8b12feb097a26cdfa22fbb2d66ecf5b1411dec93894f559bb37c0fed585d5aebedc5d13f93b7c92135c6d792f7b11cbf99785edf1f5f6bd5eceee2ef94f5fecf69fe9de87afeda97e072d52eca5559d827387dcfbf08ffb231f523f1b81b7f9db98dcee99c41fa238edafbf9fe02c93fdbdddbf56d81380a1585be5b527ed43c6afaeb12f63d7efd8d51ffcfcb93fb2fb1ea8257cfff2f7d59dabf9e5f9ed1af5f6ddb5f29e40630f16693829ba8bb3c29d5c2a7a7ae670c76efd628fbe94ec6b9ea5e0fabb7d2bd1a8e8dbb314fdaaf82dd6e6b6766f8473cb3c87626749312886c5689e8e7c6f51189d61f7061463efaeb032392ea6bd97c5937feee3ef33aafef8d1fffab39f128bef488bdb732d5e50cc96effdf5bc657bdcc5d9e618cd9de8cb79fa7e54d211e591573e476175ee39628290d5c93e58d7494ae7f53012650d7b32fafa4e93bfdf1f717b256cffbdd8185712ef9eff70e78618ebfa690c0ef5347d5fcc83f9f8322dfaefc5a29b489b96fa49faed3a98f7faf6fda1edc5b76740b7efd4dff671f9efc1fca8477e36bf7855bfb9be7b8edff19db3909fd6e68e27abcfc2c8ee62d5feb2b6fe831dbb73b175dd0e6aab7103796792db0360d22a8c1c2e70f67e803dacc546648e5d632d3e8b8bf1ad3de1da767fa9c1b59ab90a53cec2d4a330e59efeec7dbb7fa71e698b4c8b0645dd9e99b67b538b86c8723b1b66d0893c7bc9730ee57d4e3ff826ef5f6386fa9eaa9b9d75a6f7ad0ed9dd37f59f5a67b752cc5ebbef7274e5b82af9a13b6bec22f1a0535f25565598f155b4b6edbadb4fba3faed296d5d9dff9d4eceb74876baa476a5fe6d28fefaaddd521bbbaa42c73656e16f6fc967946f63a195db23cf31b53e327b8774f2cb0ff665777bc977400d78c3f648dbdb8945dd1c555713dbe995f67cf9e7bf7888d83db952917f37910bde17ac3edf18ada83c3f587953d767d7a9da595f8c597f7ef5d7a83ec7af696568b9be2b6b82b8c27adefe9dd95257f7d8d5dce1a9a116adfd9523c743fec0ecbf4dcc870affd250ea556d67efbcbd90f3d53f325962511e1a22d116267853c6645017fad2ccbdd1b9d2af36892664518b4d59a0dffbff6feaba975a6690385cff7cff87cae2287da474eb2c12c4004033e9373c63955edfffecd35dd2d8dc632782d8c59ef7aeea2a684654b1a4de8dc579fa8cf27e27fb2f3412a9bb1707ee7c85824c8bf0f2aec59947128f37d1fd30fc977014e8ee2f7e30662f61295c513e7e8986b1532cd92e59902afc5a9a187989898d17a91ee167ce4335af8510c6c1ccd357e8f38aac53369d49aab8abcfc1b7448f39037d200174a37598017bcf6960b756ea1467071e045722485b6ea95a068f4e290f25e16475eb46e4a9afc171bfd3cbb6812fb8556223ad7be250b34fa1b6097b13f07b61b5d67eb35e4b9813e51220a000c29e45d003f0b188b8b63c2235c481ebb7814d92f84d8ed851aff05f8938c25f0017cf23b74388337d083f8fb052c27c3c5c5e272e92c13c4d7b7ce63ffacc94ee12c3dd19bfa6c5de8b1cd0d9fc11bb52df090e66de92fcbbf53fbf7d3b6a91eccdeeab337477307e8669d93d19cf808db64b6a1518f5e94c69e93269e58f5ef97956575a9f8ccb23e6b2f1b1c497f497e10587ae14f81cd68d95cb6de6bd5c2b23daa2d14bd98209251c70f3096bc67d4aad8fdfbd351f54363ef979c62e23d315b76140d7708070ab8b7da1a5125bd6ad95df6967dfaacf5068769ec2b4965c02c435cf0f21df8ef4e77a9c66339acbc2f4794a3283a9ad6ce6f96e379be9b47ccd760bad49899824db09cce52c0c7edea982a8e4e31a24a97b3515147ae3bb63eb343bd45cdef72ce91ef97225d553ce4516a4c173def4a2648719538259754fa8df258d7aff7266bfaf19f1c6dfc65e3fb3dd5d53d23bc278cf47211b53d6d6d7934e457ecaea5da01d343f25d036d1bf6a9b1da19cb154b2997cc4380b7d5210c62d439590a3696992762d3935dbf7f9a79c905f154f88181bbb14c31ed649eb14cd37b21a374a9fab7645e11f010c648111ffad2a5b1c5fbf4789c13eab7cb1cf38a22496dc04a411f205122bf46d36cec9e33c26a7e2f1bfa80a1f3e0b9c8dd08f485831df2106b6e75ae6121aaaf80ca013d095455e7aa1e7b81beb1440c02e7deec648e4c7d649d8f7c270fc1d1234ba7ceaa74285e8b109545defd84d698181c684ffe2d667e79354800cb6a79ddb900aaf1b2d0a9751acb9be52f8eb057cf5bde2eef902dd61f9507d349bda8b115b34eb13ce7ba1305434e95bae5bb7e7fc4626512fefbb073bdbc6fddf66eea374b0ffac164ac33559f5b33ec8ce5c3f271895da07dc4eaf368f93ceb3a3354b4d1e8e48c638b6be0efe91d4ddf9645f8a38065ac66f392b058eacbcec5f285f53158314e66a7cb57fdbec9e51bc54d97d987ff5e6c679725cedb61fc32338e4eb00c44178afaea77c34b96a05c1213ac737f28be4e57d3cb912ef9de18df00715dcfd7d4197731df47b5e4f2b83c88c52ffb135ebf7d3dc4ef68698a9f815d627962c46b3d867ac6474ddbd38d5d82cf4b255b2fcfc87685bc3d60d4c3ba0c9abc64da8bb8a7ce0bd1ef20af50f20c4c3bfa77f00eb3a915bcbce0fea4280f025968c80104dac5529d5f395c4b04f9fdeabd5609ca1d0122c1caa75805e820e227420635f24cf06e01d63937c4c6aeca8ccf7b4ef8043206c0b2ed30ee098ed89de803ee8b710d10dc04a3e4c0f0fd5f7ab1715f3be123871c8123b6ad22f18ec198ea290798caf06d9d53cdb2c685b7bbfaec3fab8f649cc5aad24f2302a47c3e196357686d2ce21dfb441f1169ab441207fc09ab2afcd3156f555bd5578dce01b0a5a07b089efd0a28701d67ac6d6ca81b78c678178aa656951c1fd40b2c04b904dfa38f00e3319758e8b85d96e99b73e849fd2a6aa5b41f1c5763b69ce95ccf05ea406277ac5a4e717abe6a43425c75bc008b173c45e754e21dbbcbe74aa1d9981e7613ef437fdc551463d553ad3fcdc1d6a5fd4c6ad7adde576dbc6fe2bd9e6c56bca00640e7543df28068f76a60485b8fe4d30f72012f19a76bc73c44e675350ceb8ae8f97ea5a84e50166da73ae0f951e3d9bc5c8d9a17f03381a2a879fdbfaf8fb07fa5dc261feb6a6c44177ce443dea08fe8e32bfb012ed80fc2b8c0d062250f1a3c66257e5889eb113fbaf4ebc40bea7105b4e43b6c5b881fba32e4fa22c50abc97016ac1cf2dd16f578c1fb6526335032598132fd43c48f185d582ea05a296e44ad1dd15764592f432e0e7c3b3ba4a91ed0f7c4747afa89db5e218e3a17ad62a435a3f227de01f814d0b3c44f252223e988390b60791423be421180fd4245e2122e7d40b700e747d15f4f995c7c6f3024cb595cb3c7797fcff67f5911745bf141d874fbcf232d458ba2461d9f15a9fe8236f952836a068e625b291ad72b4fa707e8c4caf31e705487e0cfaf2ea90ce5177c87e6ed6fe306d50bb7cff0cdebf3cd031afbcc27484feafa50b1ea173da291f72b1523b67754578f489413db5423dc066f50e1e536042b56bab6be82cd581e3f64f156daff378700428fc2d628732636bf1bb95e223e545b9b7ba616fabb68e0f757ea01e4fe8230635828f5f7203bfd3170fc48afa2dea62a20688dab58a2aac7e398b9ef6fe490d4b6fa2733fd26a8c6e413d1c8d03b053dbe3cfe9232cf72f5ec94ebfba33f88191a3f861f32c3e1213d723b69ff7e7d5fdf2da5baf5bbea9ed08fbe4c3f7874ee1197e07b512560f5c433865e073e4289e2bd0934033d5f880f7c1ea091cb3f63bb005564fab67aad514c465199896413c94c4f71e537ea6e00dac8a5e50836a22988cb6446b8fbf35de5f694229305fa889857168962a8d9e9ab715f34c5493d53c5efc4aa24f9e13cfac5d1abc6517f3f4b3fa08f2889504d1bd812fd8bfd29afa1acafd16726b44ea121e13ad65e41756afabb7c42471c31889052b579d730d2755c6c8d8854de4b363c959546bf5c6b84d7e0ed890743df76ae7b18b7ac573d44d7774adc27ac999d52069951295d541a2b33a74ba9573e004a8f7bb5e1dad8e9b6dd4f15b9dac4ea758dd8ee030abf100ef28fab73348b28390e76a1de864d0688e094364a5f4b3f2015dd75e4cc66b3ef6dff27f6c3b7feb47eab7d283cecb3d5f499035e4fecc1227ab0baa2ab8c22eb87538f6cf9b24755d17ff155562e715eddb5aec4c7ffc79ff08fbb351776a5a67b99769df6f638fcbce92cf06fd83269f4c948b0db52b93c87b169cc5b8380013a3f1bbf9488972eea12321de2c59c68a57c70ad1f6a4a25f0df57d7f48fc7606daaa5649b266f43f4d3913d55b3a57cf53cda5c931e7e778acf5428ae5bc8cc06608cc6275af649d9e9384dd8af50c78ef62c7f99338ba2f37e649d085928a472694c4976cd17b26db54636bc6b10f62b74b760863b1c9586a71b15a5f9aa79fd347ce880e366f56ed6417b6f85a9530d195bc1b892bfae4c833a76b15bd195a3fc7b66aba8891ec35ca24c3aa4658bc6b31bc08400ef8c837bfbf46273a70dc641f96d6f9db2a937c4f2a4d3a396c7b8b57a7981c55d3dd036736ee038316d246b301fb542f5ff59b3784673c85fdedae511e6a0fa83f56fca6981cb7a7c9c9f2daaff8478de270f85e4e4e7525bc02f9e47b8c92f19e55e37c4975ff9233d49e657f8bd633cc7cf6981db16b9fba79e4ba32b07726e7cdf7245005a7cea2d64f2e93eafd93c9baae9f8ef880ce93b348aa159b04a56df7ddee1161d770bcd6ff757d24cd7b3e47347338e2bcf24b2fb0956c4d7b36f091aaa03f9f5175cd0886a39d9f6ee64a9a9fbf918f24990fa01eb0f616de914f074873c8fc820d071e565d4f12f43e4b988c669d45adb31878c1824f0fad1f7e02f09f2478b2e345b0f6033d459d4fe6a8495d113d070f31e31bc7bbbfa9e95dcc7100627bac7609b312b63d8de17c403a0be2a5e11d85bfc48ceddd49fb597da44098ebc052ac979279d4e61bd66c4be216b4c78a7995cfa4dbf8b788e15a1cf7f3fd5bf23d3b73c69db4e54e9b8f7c872dcb3cbed0739257ce0c7891a8d6895a6189d7c110fa8348435211c06f3b45d4c0d5381f197f5c5e906daee1328e5446e34b516c755ee353fe9a2ae92a790d6b6e74bc0413b37cae9ef362f8b21fc5f7311f7dcc33ecb66b9e823e8cfaa8680a0cff6441bfe3b8dea927910557adb75e6be3c46cfada4d246f92bf2a57e56eb5a3784d86b17abc1dcdd3cfeb239253fc4a769b59977cbf5ae2facc5662d332b171f175413cf019c5bd6a7a74e685787ca5284f8bd4bbdd873ec2ef8f98db1ec75b95196fcacf7b816d4f7cd9c95bb25c6b4cb314f7ff998e5a6a135fc1b317e6e0e588a7203a3e620394f112de227aca8077a3993f62da0a9fc2f1dd877e92bca33833bc8f7e479639c04f92f78b4943ad9d86e820cf216f951a62bbe2f73fa88f3cb33ea038662bedfc028e54d2a3e8ef966ff1880db486242c432f613c5fec101d497dc43b64091a83d154cf7be6e78b8c69b49deb2331726c7054b431f930be4185212de1307e607be15f493d10a92e878c567cdfbdf167c3f3fabcd6776609d5e01ba80f928f4920402b9a8b9abd1ae7f610df118e63f2d9a22c26cf7d032a1ffb4b9e041b13b6b079697d9c0dcc925889eb776d5bf6f7eb54b0fb40f5265be9a01e8c1ab7fa6406fe591ad592451d7fe06abb24f827a4f485e6a5bbb14dfeb83e12c9cda8d3671dc50d146ca9d964626398f9d86fb40b922f5e185587ef5fbca01a19ae4bbe7a512cd7cff2f277d5ec5c4da16f465c31f2301bbfd8e6f4e80558eab134fc5e902e285f2239241e51bf21bf00ea6724d56f3b39c23c06a22b7854e28978aa543ba54cdd90475165662f92b7833c95ca43f85cc17c8cf857e27887e52f096c93717e9452f87d80e152328e6f145f37169c33c15be498de72ff9bd7672a9ca71fd447d2c65e05f6c403f0e65bafc992a211c5f7026c3158e9c98330bb26a8b7c83b04f416769ae421d964e697e4634870551b1f35c995bcae694bcaa8659b661bba997b9633fc23bb78bf57c60094f7541a37d7d573b5def04c56ef8a6065f10ad69824360f7d249b9460c2248f66ed41a9dc4b1e0ffafe39dd03e3957c4e9e244ffb8f0de4663a8e8b5c1344e6086a50404d044fd9f1b8dab441e3f5b9d15cae099017c45668c63698fd7b8bfb2cef56f136d65a7e0cfd36da3669dc77f100cb83e2b767141301ab8b3f699c4f406da6dfbc3eff0e7dc4a4dd4ddab3902d81833e2c1818f3a5b04268a42e3c327cce8916ebaac06d5878d996734e1ea7ee8917e6697c17cfd8f63d25ef9065e8f98c6c571144eab3183e62d166c4a1758b8882279f3a2a616b5be009c5c40209097e11d8b3e04f08fc4e252fa2b7e9dd8638b66668d3125d2e796949556f5ebcff294e4f8ce1156bfa6529e65efc596751bd918fa4794eb6aa24c7170432c12e6d579fc9033fa78f44f386b15717a81fd229d64f666aa6fb1215fd2678bf5eb4e202bc4ce5fa6d62d57ceee79d623d9f725209a577f494ac3e2044b7943fbea9698e19e42f7fd8af401fd9c5fb092693f025fdd91f63d43b4fce6c3e6b15dee1a97be69ab6fc9ec0488ccdc7901ac60e614beadc0ecd83484f10cc626db342e4e27daaac63c17c8af1b525198c654af19ee67836d7190ad821cf749fd17baada3f17dba0ec10b6b5993cc5ec9fadc56fd322fa66b84345b71ca8d599aa19750881cba3debb76ba23ffc7dfad8f98f415da34f057b95689c628545248aace91df975e68cf971d7240b517bbc75ee82f60dfb3b6915f504edffbd48be71bdf95a31ef78e668e0aeb28a8f38b3fedd736e2d3b0ca0543df5e5192f3a7a51fbe4eefaa63635ccec3959e6a2c2e524d8edf7ab276c913f95d509765a6f8cc50d1ee548baf3fa0bcd088de21f15e81c7d6e225256ff32eb1be0b788b956d6d361d818fac00a9b322f56fa47671e91be62aaefdac3e920bf6a6abf988d21f46aa3937f5362c7a58ddcb29cbcce7511c58b4543b314b753cc2ad3f74dcd9a5b67f503c96e72caa4f959314761a72300a8a7e4f1d3396773d3674d7fac8d4d04570843ee251dc958ed69b7a84fb751f62ef6a9d43e923211f09696c8df58620e3f829f4920a7ea3605196594749f5fb69e03dc247a457de09dfef897dee77dd9b146a9838957c6a40b919a921e212fc2becc45a43e2bb2a9e19ff16d8b81e6378c8267f4a64f754d6f00822bc6450ab2282bf7e5e3fa99734be599122e0039d7277b1bd7fb73e62d62e697a614df333aab70e6c8ff28317d49a8a70639f703f02fa2c58c2432fd03d528a1ea7c66c3f8fab3d95f2d663b67665578fe3976c93e978c443748d261383916d4db17ca464f09267e221c038c6ce81e4a56ba73f7a119b95c6cecfd18eac303290fe9de807f7d40fe434a2ce3baaf8614cfb6aac53132fac712be36ff272e103a67e68f779139f8991ac8218b25278dfe16d6aaa6b8b717ecfa8e685d859af7be2233fab8f888c2efa08fecf3a8b4a87b0e5db6ff562f7b872023aa871612d5ffaf47e5e699c3a33aeb73573729c874e7bbf086c8cde4ba2d3293ab3c0af6ec668c5f4a73cdfa13e227428cc45d1b50f51ef1e5a75ff9a6c3da0ed417c1a249a82e823eb34582a18e96cac01e90b7d41a853b49d2420cebf68e878ea4a6a564fbd5f53bc167608f40ceccec109e917a9796a915a92d4da2ba456a964e26c591d4e7b2bb21136aefce3d61557713071ae1eadfe99e71f0d5ef3813f44766c903764dc171ed53976c81d8f9dce0c6019c0fb067c81bf531f3163fcdfd6693c7802ea64cf1256fc9647752b74ed43e12322f35f78a17e82bc88acc51f5eaccf19ebf85d3c44def79c6a12a752965f40e8e77d0c46a24d83e3f26b0c1e625ed77e22fd2e95269e20985de03d03ceba828518f919ad2ed59b45de7be28ab0f353cc63e66a1e126f948515f157193c0ea880d8a5ba021ff33a7db4fbea197d36721951b94df2f231bf293577cd4b6f3dae6e5fbaa4ccd9cfeb23c44b9a4e2642eb67e34ecd5926fbbf526ac45239b6d73c8672f120a1eb2ec25e855a8d849b7b81ba8b1ee18203170412499bea14b55b1c0f0a9e73eb8478c4b9108f38e023bb9467a5a955d81ca6f2a92bac04aea5c5fe8640d208f4910df2fc47fe88185b135674fbdd292e2f12f37695fd20ea77ef6e883f0ffb58eaba750f5f12fc4ba942e52471fe7eace3e928be0df6c659e2bc59d1281007d68e957e615e04fbfd852ccb8873d07a4d33be7fc88fd73ad5395da36b9029c93875537e482a99e2bd8d8ad1467dc2f91e78c7dfa58f98f4a0697dce103fa8bf11ed7d5fb08471c23852afcc33525e807368c61237949490faa5665d7d9f2c72ccafe5e78ee567dfc54b32d4b785c3166d436a34f160027d24d64aba81bf6cb02b699b9792661acf941f823c12cdbb9ee8bcd8c0407dda9c2f0ecc7d581312522f596a624247b9a53c1f6d53cc5acf171ec67160c0e44fdd91ff475ba96ddec73638ade71c501e3f3218fa88439e908ca0ebe40a768de90fd9271ff9797d24e3881fa11ad89a0487556b6744eb13057f9cbaa719951a4e88c3d276b003a631409e035a99d265525eeaa176552fa61e139d55dee9f693e50163de2f347dc4a8df18b827361fd9350f21dc587704fb5542560bd1d27087304ed691ad8f7c9c3723ff23de20a869c5e720bd8037203265c63c20f554ab06188fcf610cb0e46d68cf6c29f55c7d207ba11e9f5767068caed602f926a962eac57c16f3887bea7f4aeda8d45ba7d93caf9f75e64eb171ed31ae89a19f887e75483111a91222e197add4417980aae6ad073d3f337fda38af6a0b8c3f8ee803732366e2dfd6474c39b3eeadf311c9272b501c52f9358c9cd7d5a6abf4bdce2df4087faac7f7e976bc20ff1bf96a5db542526a46827adc39eb59dfc54b4c1f10aab95d87345e6c422269691bd711c7fdda3ce3a3c6f789d513ee498f48a9fba68e69d7d4180955c765dd132d1f9cb275f9887f7fe2456d81291ac71eea144b751d8b8f006d15d2584add0bc870e003a809d2612cce40ffe27ee3b929cc19acd4e7e4a7d115d964ee24deedc48bea8f19631ebfbbfd34be56a07b301f89e66db057b0da87be91a8a52ea41e15afa8ba3f6e6b3c13f5bb2c67691d53a68d8e132d710daa3367562da62edb0fc97cdaa9f4aab78df374826ba9160cfd63d7fa8859eb8bce2d066345ab356268c55b93e72577e36030d4df7fc443626c4411694ce2aa9efd5be8246958ca1dc71d8c189bff9178089e07dc43f1d5e3ffee73ba9cae242ace9cb16332acc321c3ebdd59805a4177d1fcc7789ef6f1ab96ae564ef46f864e11b5c0d2358ecebff7a2befa279c4f3cadd42e49a6d2f5fa23fbd3319f88cf52d74cd28849f0265cc7395c2f6983fffffbfa88f00ec9f130692ff6f00bd333752edd20da03bb098e405383dc5a874f84e3b3505f35a0419e17d45f94baaab0d9a49b54174feb28dfe10fb17988bceb05c55811b2911746d698f2bcbf051fd932e2437855bf48fa08de7f7a67acee472fc0d417fd007a4953f5a17ae985f52c3146252fc8cb48b7587fb17819763fb023b54f43f418758f749b7cfa66ccb6b6ad614e3b1cff3cf002ff7992d745200b3c7bd1f562d7baf9ee35fa73fa88d005a2b909ad2f987e697058e80b0f4a16559cbd964a77577ebf8a382d689fa087abace3b69dd9bc3d705cec984e2add43fd11e786b11605af575b86d5b9fb64bea1deb0fde8cfd2fdca99fe9dc89db63e62d62f8c9353b7d547425bcc62557116e8bb44aa07bc80fd09c44708eff7539fb57d3ea861252b5e7ce16a25be1356632fef8f5ba26db38d0978591a6bf91745914ed5ca1eff727e4d4fd86e9866db9fc7b56aef9c597a605686667f869aa3f410baa347b506091b6c36bd2584229d2bff64f41f1ecea4bad7c899f5d26a3e808d5562dd12e3fbe22cd2132751ed266e03bf888ceb2e6d8f7fbf3e22ffc7ed55db270e8c73252da4a7145f54e61cbb3647f2c186b2945cbc82417f0ad173dae67e66d1235b3f31e995f9bbdfa55f663dbe53a04dafd76c8ad06227f4b307da7c1c9ff80c7fcce035da2f7243f4fdbd49bc2ab8fe91f4044d75801cb120be9b9e6da6d7d0abc6cc8350d141f75bddab31f2a2b93a1c5305de8ddfa7e7ebfa481abcdcc4e735e75cdd37bd54f3fb66ad955de29e7cd67e5e1f31f76a6e7daf1ab23c8e1afbb676e98fdfa735bf754248d21aade092626287d7cbe777c5476a0b67361a63c65827a17b1731e3880b0eb01873461fd4736a59431f09ebb22e029e60f6eb335e22d7482cc183534cafc8feafe3aa6c1ec0f92195d2308a87cfbfa3efe8983cb0f5918f790d284843edcee9eda00dc4d3ca0bf398fb5a1591f5a8b43aae371bf5a61e2fe08e28de6df1443d4e7afcdcc1335974a56a27f84f0fba0470c104673fa5b15b8ac00f4857d46a4fa65390fa827eb1b499567c0a71d04e1803c13a90fa2ed37e4c67cb039d9fffc2f734e6eb7f441f91ff63f76acc9e16f9946356d38a46a6735c8f43ed9a96a255e93c69f011de60e81d01968879df38da6fe72efe290fe17705fdedb0ef23883af7425a2e345fd7f432f985f81dd89614e8335bdabdb092313eb0310d946ed0bbe0e73d132f4e5f514c17f4151def86f71e7ff05ed031c43e77463b10b15e7a5e245f90710a344f820e03a4d4297b169d9097226619a814c1b5a6dc80eb9404d8bcb2d6cc77ea90716bf4e7fd23b2576d395f68356328d2aaa59827e46a8f045fb0b77c84dd0631abc8f0d508ca3a5b95ed311ef3204fe935ea1e65f8e44b4e202f9bbc2ad047a4a6b7cd137ec796928edc47f5bb72561d92669bbef5421b8fe4e8dd73fe083049ccfaea461e39f2da41bf71fcd47f22d7956815d72f17edc5ab3faeff22c92a7d47f158a39bfe207d4fb9efce893f460e8feaf3630caf9fe9f85bf0e249b9071ba3aee7f248be975943d3faa2e29733e730a8e1a27d50b04d35ddde0d50f6a8de8c17581550050395bf2336c034cdf7ead11f6bac46c5bb462bae0d83f9bcf99ff28fc8ff9bf411fbb3994fc858533adfa4a3661d362cb522d20f6a54cbf49d796d402353065ea31daf25b8281217b449eedd96a798f779a65a5288ba087884914fa1d145c12b1e0cfe61c46069f9fd51b26bb7e0212646cc3df9d061f71b5e1325692bcd7bfa8b69b89983835d90fdf8bd10c7a591390e884705310fc29f390e5b68bef6ad287e907e22ec1bc16186e505f92dc1f5c6b8c1ee987eae34d24a42832ea7e78f6380f7c64bfe767d44fcee54175e8f0ac77c2a5aa27d2039c51b8018ad565a1395237f0d8b7d356b3dd53a18f5bc13faed5ff8f39953d4715b05b6d384f5e3173a7f646ef4c36c66fdee6d6898fc2ec7bc042bebd2af94ef0d9b9365bbd2188ac867bf37f2330c5b15be4fbfa45fdf9fb6c0a9628c18b9bfaea800d49dc47b21fd9658f43ace225d7216e301c563693eebe97a5e88bbee46f006e8bdc5b6a5f135617d004f9b239bed6e35734e823973b56f25c57825391aeb9ae2e5a87132698f5ad32453844bca241e61a7aed56756d46f099e5573d207f5515abd7b4d6a54ee5bc6f93bf591381aee7d702fb659a186d3f894ea7547eceacc77342d83b473ec85b67fd173e4735c3fcdbefca95ec2b1ac5a6bb77cec92d787cf917c76c3d398e67ae4a63cbfa905750c4d0dfe95f48fde096143a64f897ea7b976a2b64389bc5f8d197f23d60dba55fa9cee87bc791d2797611c2c5327111f17d70841dd4550b3f69c7810785b5a741973bc247ff3848e13b7d12ab3cd6da7f859dbacd1bf571f31f5019c175fabc77e0fa91fe209eea2da1d6aa57593e94b20ecf460edbc637a96d3b59a52fde9f826592a77c6a3cac9eab29644959bee11be231fb2839c45a9c73e3572e06d5eb22dfe96f0c6291d1b6a770e3b821f16f2108dfec6982083638ed7b27608647fa977b5753c97d8ccdee87af0928c9349a0eae8fcb4e7f43ae501aaa6a58f190739e390fe567012d6fccca86201f35cf59b767f76803c98ca61c6ef1eeb772d46e623c7c7943eaff953bb54eeb513f0fa564e52d7a41765cacbe74cc5e0cdf360ec16f0b367aace385373dc4c9d7deb9eb33d2fffdfd0473eb283dbf9841ec9bd19a59f649a4cdb385e0b3a0baa84c2af92511ae658d1ae4c5bad1aac2497f054025a267a8a6db38fe30d9fbd9ff93b8e17c87404cd22d45e45a2425e47df8ee5b57c1e412ee227fa48246f5cce3f91b6debda7382aacf2b4e4fc9bfa59ed93b14f139e3d2a77eaba2e675ed456283cf9951beb1035b11582dfab39cf74393e4be404d137e477eabe19999b7ddab3a4fdedfac8e6df87b486ce1f38240b6394e74e31d3af9f64de9b8dccc0716b3789ce3cd54d0045e21db6a37a669819553c8da8833a4f09d2f0e799722f51d73274d179e51aed39877089bd20aeecf7311cd35ac7d1fc0cd24242f5e91dd1200ee755948c3c731d0b3b2f691c31ec9e52c5d3194b8f849dd25fcb2bf9e068c6e4ca0ee3d862608f61a70c67feedfcd21fd765fc44075c293e227a9aad8709af3f2bf79a4a8f582432e30c24a09431173927cccfc9b00e9975168389d3cd4c499f68ba9debcc6c389ade06f5c41688a7d0fc8c9ebba8018fec36d1c9a8f14b562a27ce25f5afbc70d6f483ff417dc4a4d59b6c4ca60f5be8cf03db3fd2437f04d48043b22ca2163b383b625d6117923c6d39f6149fe92819b99ef242599ae3bd6269cbefc4099bfe9602d3d053d258237a4589e3a71eb89fe721ed5fc321f90c0f39c647227c085127fa399c47329578683b7eee335f36749b37aa675b35e7d4f62b19f7c92cbc805f577dba87d631f01bd15b3ce3a87ed751fc3ea3f86ef517cfadccf13ef8c8dfad8fcc2d1b939ccf18df9bfe07f1ef66c886d43d5acd32ab4c1208caa8d35e663f36ea7e138d36564d81337c4efd714dada60c66536b8db86779d06a1b7c2467b48fdecbf405934eb2108c46c44d6532e42b89e46d14287f043e045d59075afaa5ed27d9929798fa4809b9e3747ef41e4635229a1d988e3a362b6df091a991cf638ebfd818339abfbab51efc1ed397641258ee819e48d7dc05b1b9aea356b8a3de197a08e2b2152f255fcb1dce6b9f0a70e167b31bf2bf346af089284dbdeab8ab2ba7db01f548ad668b7bba3f6aadec55c6f97bf511931699d7d87926568c4fd00ae43b862e92567467207507cf3897f132dc2592b3870a074d608df4092f57cbca71b5da7fc73f228d311a2163a37af238676051de4bdd46b53bb39060d4b373148fa6f1b31c838f6cc3430c5d26c0c57a0c71abe47d61290f72fd8cb1cdb8dee77c44de0fba5dceb8470c0fd131d6a7a423ea6a6d175ea8f331bfd0fce4997e03dc67b947a543715bd34114f7662fedefd64722b6728b87449bd85066da26a5ed5f780b4763fa81de7572dd945e6dac21131695c44711edd5e86f57540324931f2486a3cc1562bf60f3ca5c6bbf40d4b6b52d8f0cfb4ffe9807c26c498fcabd4c81aa8422661971021deccce3cccde2b596ec22c2c66975118da8eb146e63cbb231474a95001f992cccb5aa8e8279216c9486b37c6ce7b8664926c22b9bc11ca4acf7119c5d3aaf734ca617a3d7f62bf349cf09f33b52ac23e6fbbf2031a1ee14906633bfa66fd507cd4b161a778cf43e5d37b8bbca5c81a22d8789ce3b706fd4f7d5fbc46dbaa87847be3cf027ce4ce36cfda78f98b468132fb1e99c60c29af766bb3c72a4a59a3256499c7fc1bf26ab2c22fc809b8bd599b9f5a275dc4ddeb0edfb99581e19a28b520b16ba4046491c997bc22906b664a2c1fc0bf5bd5ec80f312f6ce717319b44e0a35a28aed331bac25f3c923e6b6cfbb3fb5bbdfb60aee433e79883b66bfa6ed46834e37fc11fea40007f217d2fa39e9d61db95e62fa2c360ee5019f48eb0f0338f466de19431b7df8d3f60bfe7dfab8fd8727f141f58ec3026bf014d2bf23584d7f8007f87a2d59541bf2c1e35f161dfafcbefc3c7102914d6595458c3caad65029f7c54575a7f8f28cf9b1a3a13be3b203f4ea54374103e99d4c8592415bf025658d785ac5e9feb77d1b8244ed19ff79cfae9f20e39e49a0f3e0b36ccc7bc44dbca4ad821ea7d9f08a581f0ac88b7f419eb4bd763c906745f8f63a2ef24ac9882a88d4b6c55922b7212f04bc2e7273d92e2743daa115251ef58ed38eee8977f9451cf6fbd388b96e87cea37a88f9bec977b4039d291fae0313ef7cd633fcba1c1c3e2622136afafffabfa88499feac6e76d7303b6f19d7894bfb06c84f536827a8b563d0c9d69540869b5ae137e46f43ec09c159da210d30fc9db8b7b874dbccfe499122f253c959f01f91cfc0c3c4eef608ee10aea81b03e63f391f76c98ff1fe8288267f516f2aa35ba8ce7d67e73ec6dbe6adbb4d43d331c2f9c415ea4637d7fc1185e45aa8b997931c604dfdb3e2b390a66a37cbf8bb5638f45d5ba4e5f1bf091ef6fe24baff251e2a7dcafde3b79c6fbfeae73bdca8a2d87f329ae65e584f2bba0514b9e869ceb1ef8a0f7820fe2b21f1a3e04a2a5af8caf32774cbfcde7fdb76956d8aa5aaf129ff28d532ccf6a495d01416a95d878bb7136ad7b8a5bc335a8be4d98c29ceb584705674597616fba31e21984dfcd99af7fa559b1d38b7b6791812ef29629650e38730a3a89ea43e6703643761c223a813c01fcafcc91fa4ef1d9aaa64ac46bba6ea31cd80749f7046ec12c83c822c2bc91e71703de77e0cc3876c235fbb375bbe1f988aecf9fe023ad6fba37e8d709e34939a14d47ea0c9a476d793d655a8d95f64231ada8671bd8b6848e0876b9498f0a46fb42bf47ae75ee9430826129969a52c20b237e9ef3101b45e77500d78a637303448963b20e683de4cce8b74557279ff1916d9b41f7c1b7106bac7dfb40b7635e832a759953aa26a479a3e2252344df4ca8de6106bef673fafdc2e655199a071dc79d339e578ae9435cbffe643e74db0b1ff1784fdee8f6a8f7ea4d4083bfca475c455f5c6073f4f3acf132fe94f010bb61874ccbe4770f2a3aa8d597b9e877bbc78a9ec12af9c0f4a810e97fc83714cd4a384ee86bfe3d7a35d375ae6e942e206381fb43abbf7c9fa112b3ee27c76c69c9f03a7c27b3e19cbad5693641b439ebf3b5a80e77972d23beaaaa768df64ddcf0bbc4cdc757e778ce6343f75a3487fe385b517c62de9d25105139251f4b2f4116048dd9029b9bdadd6db55bb2d5ea45b656f5ebaf3507fe96cc63b69e6d50ec173e5793ea9867bd3307bd0736302543f8fe98f9fb4ce305df713f3c5e5be15afbb8d9f321f37c13f09104efa16f3c6a3d04f25eff1beeafeedb50ab63029c11c5b197736ad0cc91eb373ce3e3234959d372b6996df1f903da31ab5ab6bd442df0ece8708cd588d8a631e757005b12f4b6c5ef015c41dff8fc87fdce76f83eea39d92ed51c1e6327abd5b5ba23dc14f41b4769780734bc278e59b5f2b26a4cb3eff42e389f1d507d3060f22b461419ffc9d36ee7233be4fbf87494f365f40d590ce78d87049ea5c6b876961d57a03bddd198f7cbc8ec45a465a59e9d8c0eb353bf27f3999d118fcb222602c8a7e0856a8cb20b3a6a3c1735fed965f4b9724cfcfa8df76885f3b1febde623b277beab613f42ae3cd0f4a6b5f6dd57efafeedd386a4fe7392fa8590bdb8e641ce9ca0685308e56fbb42b74d4e70fe8fc027478d5d5a8058d97f614354f90afa26df4738dd315d2fc03876d5706adda762c6c3e72cbf91a4afeaecd076d68b9bd838a17f04287a42f34bc93f0c7808fa855363c244c32d067d069d88c6a97ea9e8842a4da8cb68e143f1f7f3abf26ed453ba39887fa05d0b713b344d59995678e9b594ddfc63e6560c15734bd4f775ba99ad3cad486d9547990159bd214f988b00a4f53f0ed77949e9228f8b3eacba00ddc7b60e234a0c7488ea9c9a3e378c747fdcff071ca983d37d1ebf6a88f484b7cc33dd3c4b12131bd5b5823c87b086c5825d657586f11bd44e4ff6c86f412e47da046baae197e4ebef8005fc5d683b6b59bd832728169afa927a863b344fe1ae821bdc3757d4a620544af42ae5f4fd151d4451c5ed17559c4af15d9e760dd7fadbfbb9c0fb9f719e924f3348de7fbaddf9b3cd079f097e63de104675dc24deba871c82a0a97cd877e92d90dfd3e0b4bf239fd6eaeee9f55bb3e5ba0d88820f6ecabfdb6e7635d1fb1633d777dcc39a1dffa86eb8f48ada9cc0eee3f0726971afd16cbb9412cac17d40d0ca20639666bc0689e22ef8b1f426afa968fb2373ef48382e3766fa66f29b56b925746ce89d93eebdfba5d7fa17df16247b933304096149d018b6dd86fa3b6d49b17c47dc1af032b716b5af1da88a057bc278b28c6fbb9932868ecfc22db868afa7992e761cfc797c7df7837fd0eec2b7a9ebe205e387b0b7f7b2297e8eb671713a7ad45b3e257d456d091a8b5c93495bdcbdea7b3555fe918646f4b65bdec43d65b5df9e3446eda6f1c977bc30cc527d49085966ba616afcea2bb74c88735b5fa239fb7991fdbae958abecf5f10afb50b3aa0560850a8d77cd3864d2812737bc15186669c93156bab7750896c33f8434df40097f04ffb6ce7c1c4c51c3c137e15a446c91ff1a56a0efb7960e105cfccaa3e77eaa1cd4b7f5fa49cff203e2a673ddbe67dbbb26bd963c2f82bd927c288c16e101ea36b58aad55e61de9c3ef67b1d45e12666cc9c110f5c57bac9ac4cf8c4908c75c508252da7cd3951bfeffffae2bc54adcfa17fe4fb7decaeb12fab5bf94c7fe7587016994a3701ec0f2d6d4450dbe2f1a8869263ce79173a3750bee798db408f392404e8e4a473dd0cfdfb519cdfcffa19177bb6213e087825bd27b6e40a968ae11fd128d76a970caad9e72c70ac9ea88f3a36ed1eb5db8125a331afc82e17ff7cc1a209fd237f3afe769c178d8df623a11fc06f863daba6decb1f42aff374ad138d79a2aead749d5fb5b3ca59efda71abc002c66e2ae89c46f2bbdf386ef665d5eedcf9e3c615538357a222d9d7c4bc3657e78ffabf9cbbcac9242eee6c1bdfbb391fd638fd10deef269af6a72d47ba837f69f8a44d1e1113af151b0f1587afcb988ac0bdcdbe71cea3195fb66d3c575c33630ef83df07f0b5a7b8f56bfcebcb26a0d4b6e481658bacfb49b468cd535bba23cf2c0a790def06ce9db36f923bfcb47ccbc12d5dedbd983ac5af9038e4f90da31121f57e994b38db2818702be20710e8269af7e9f547df51bc6783864bfab0ffd5ef6484967c75e887793f2b69b1b737eec1810ddf612af65f3119bb67ef5fe9ece512f22b6b67760ee10c9cd5bafeba7d1df6cccf652fc758810d4d5c91c4270e3fa26eb3992dbf39078ba253c57bdcffb9553ecbef8b7e4338ff64feab6674f54638b83aeb98bcf4a7a999f4cdf10371591b5ed67c7cdc7578f26cd36e3a015cf182b9d2baba858f622e1573b895b8de7bf7474ed43c54716ce3df33dc159cbb16fe48175a897f24023e2ad329de66dc583de098ad885c7f2b93eaa4d8055a0780fe29ad77057b69a9fbf898fd4bdddf211894bbd209bc71a8a82c439597c24825b65238a5ab5a7a4d62c625413b6df769bd8d44d7cc4967fe57f648279d178b2080f618b7015769e4bc67ce4fc45ec1ec4adadc5226f1af3bab79b39f8e83c6220e0af425f6b8499827cc600070d630a3b15e703e918613366ee21ac09807869fc41b2ce94282eac8ddc98672b67f17778c9bfaf8f300d731d37d13db556ff5b68b332e579f091489e86cd438c7ae454edb9e2a1f6794f6288f0cc03a6777fa68fcc2274cba4f779c7ad4d81956ff2bab07fe02ddacfa36b0aba3e7426b74c3b04b9fb6ea5dcd37cc47336c5ccaef3915df290100b20c033436e885b7566d57bf094fa22f3bc6abb3a07d1adbb8dc6b9db745b6edbedd47a4e7199ccd6870e61b7e878e194c619283a2fd0d5eaa9d1aff14d323db81da931e9e4d57dba9c452c3cc7e623dbce4f8a6dae3fc747e4ffd8d8caafdd5bd318ac945e983b1244309af5c6df8c78ad0b2326f8d1c0a9f2a2bf973c14c43fa1ee6f8001b20bdabb2127d3edabf64e96dd35bd49f01c5f48fac37bc096e50ebcc0ff335c1afd3363cfe278499c6d6d577cc4fc5e748b02e58b061829aa7feeb0d2d0f85a29f2eb747b5e88b1c2b6b9c0d793a2ead9ee283cb754e3e26a6474efcff411e963ac8d6f2ffe119b6ed936e8dc17ef8f1a7a9a7e287aa2ebf25a1821817f21c4561f9e19fe07337ffc9e7788601fbe51dd0e48369d5fb524b01fb56fd7c410fe5dff4846fa6dc9bf920bcf7ef7ee9be4531a7a9399ef8ea343f889b32b97aa7bde137aa93be57ccabc81976bf7973e57bf3cfe1927ea8f90fb890f2cc5f45d78d892f251ca0bce6f5f3a0b7748d85cddae3fabcd027c469d9782fac9f07fe975f3aa6d7545e752e927397dfd223dae2f56f944c59df16f72464b6fd97fb1f1997e3b3eff17f84776757fb5eaa72fc8800d7902a4a47e4cfe88f090585caa18fd05bf73e7de6e6b869bf9d3f63d1953a57d1e2339c6f87fc03bdc05bd07f2f7e18fa04aac5e7c3d4133ff6517fac8b673643ec71c4bd14984df18b88df556390b9cc9e9947fcb3cdc5d1af73563b04d5c813f9d8f753ef2fdfa48485b7e075f6bdba3a76965116fd47e4d7781dd889852ac1e77b5d93fb275de38f2334aad828edd7a60dff5b63613db7f1095df858fb8119ae7211fbc9b685d99b50837e7b343ba6c2cdd64d9e1dc11e005df301f79d67e88a2a2bd2d57af285d276411d8e4a6413ecff7cebb39df266dcfd0fb3a35d431738a15485959ae05537016f5c3e5e37cea14dfeb9dcbe1d8a7586bc53b600168649d993f34c633ce96b5adbefbf7e7b3ef8a2e2bdad9ef52541ffc22b1f9ec25c33f525a6fc1ef0dfd05f15b880fd2f9e9362dfcca98d8f6f874f82e33a020f9466ee186a6f5ab1b450dd264d3c2e7aef009f1419c517e466d62f45b9eb52bffc857c641f23d61db3aa1237cf4ed09e597a0924695e3b70403d3cda0a29d17ad1960fa84be321feb7c641f3cc4dcab9b68eb9f1e53864f56ad0e17f81a39f69dc7e5839b7c246697d83e7ad88f5c1718c3865c8d77996f89d911c7334d7d44f0ee83715112c6312152e8a8934f781d76fcfb7d73d19a7841c463fd387886eb622ca0d5e747358da39f336c3fd31dfa47b67dffa83e44e309abed9de3d6b0faaf563769d493bc74afdb45c2c007d2d272e4507ec899b368568124d8b91b25992786b6b428affa5d19e7e7f2d9f7a18ff0ffb097b805da2541ac6c4c3e7b8826647c6f1fd972dcfbc5b88ec2af4c5af5a734d8967f2dfed463bde9231e12485b979c15c0b997a941782ff03fe497b88a0e37c41e9733faff19deef77af0b7936d74549295dca55e3ed2a3ee2726d60bc17fe7718771eef94e638b08e6d63b4df655b9ef26feb231927e44b39a7582f396eab4015aae1d388f292187de4de3a9ab4fa9122e95df881cffcb1c6880af587108beb2bfac84a9fa77b6a4c4a2515f9443fd7305d628e5a1a7b619bd635495a33baff227598b972d58e1f43377ba89c683afc6ae83ff31df947b69dff4c4c7b55ad46b83689a1fbd87e025f9c3d0a4e9a605b767e75ae5df5ddbca1c6a64eb1d17dd8b2e6fc3eb66ded7778c9ff863e82e6b1cdfc8272d351a3bc6fd3625b1fc1b9a7f8b82e91f75b8c798e7b0798b542a3fe9406dbf2afc19b10cf54166c932df888f873504d0d357375de0be35ac1a73d3ca61a523a46c0c60fdb873eb229ef869bf8d0578efbdc7927ea00de01fd4a5799636ccb3eaac72a0914f9a2f8dcbc25c97a2dd6c1d6effe643ea27ce4ffba3e92e5fc01dc53e38b00270bd1d76e71d9617fc947fac8a31d5b1bdd51ddd3f640e3d6e6743eb5590f2bd42376a58f68daa7a422442a16ad78ad8d47c2d5d2117ed7fd47f7057a92e2790f949584e847f0191d6b9675421d809e97f8b6f9b6f50f9b8fc8fb02b7d17766ee6b37051c159db5c05553096793e647c761ab559c4eb96fba0a1e223fcfd2e5d68313ea87612d99a8adf03f7d24ae71ae9a5bfa5c1f89d45167db166647cbf76ab6122b6fbd46c92ef511532ec77d9f2997705bcc78f41748df8b33aaefa57dd8afc48f705e6bf64d2f5a7b446c5b4f5f7887afac05f169708d46a0c9428faa705d7bbb663de2d1b47e891de487d82ffe01c7a7e5ac67fc2e2ff9b7f511933e1d18fc448d4ef362d92a9f7ca48f6cb069315615ceb907e55e50274b9e65dae03fe389bfeb1f51f4b0fdeabfea4a719b70b5acfa23a0a98da253740f518f50cdec0beeafa413c63df67ff959f7886bd51a7dd6388ddfad8fd8fe9014e7449e39b3660eb8ff6a77e45b05f718b995a4176287e85df2e8df9a989315a9d51b447656bca5d213db41053fc39f4fe3bc88ccd5ffb63e62c7cea25d9056b7b57f84b5747d7c269a063ce096600d4afda63ff5e5dafdb5f347e47ecf843e8ae8ef4f717fb9efef4a4e0f560a631a8236030b11abaa65faa2f7ad8fd8efcd3924c8515fa25a7599f4284dcd9ebda00e7180812fd804e7eb3c063106a92b9219024c619387fc4e0ec9bfab8f08a6de2b1f8536237e4bc9a6dd974ff411d31fc21183b01521a210928aaba322f89e1ed3a53963a5d8b6943fd14732d6ef804938571aac2ff5143fe625c86f41de8cae52f04cef9ff451933173d5e3ace471ce1f374e0dff8ec8ddf33dea2399e0fddce989e3baa76e71ac28106ab94f8e29eb18e31ee4849648c2ea1b7e2c1d775032e6eb8d28d952ddd33d631f5954dfdaaebefbbfaf8fc4c5b3b25c9f2a7cae8f04fc43eaa31f52be34ea082ee03f105fae8909181707f53bcd967f4dfdc6a3d8d8f7c616fa086335f62f39bf0ff7e0dcbd296bb6a34bc67689ab1bb24fff88cc0ff0fd536473838517fa45e7c49817838f5095552fc06f0e6221e433f052506de9867cf36b6be03f7d2467b4687cb1d64760050536f9a7f15a467d7444762076b655e8dfb7d4b58ce7a171d1959c1fcab9730363fe2bfa88e92316591abad408b9889fd71f1129e41d517fcf0ec51d3c386ed72d0ffc1cf9113a3a2a9df511799ec9d7bf7bdee5bdf859ee7962914cb3ff0abe0f919e1c89c11649cbbfa55d52abea9d125007fa9df60ddd9394863a98a3b1c1477e27aeeedfd747e26805e8c205d1aa4ffd236f5e18430b6b2fec2c52afd7ac8928b8bfa69f7a57fe1193ce624523e7714b7d04ef83b8a6a07e0ae7f0019f1d3c7188efccfc49539fda873e62f178d8a1908b831d52ab729c00ef927625baf38379c2ce79e27ca0378ac513bf092cdbb8befdee45716bfed3476c7997e28fe8dc0be528241805c8d64702dc78eb3cbc52493573ae46a4d1f4b8a835e01b43960f7de2a1cffa2bfa88c41be5023ea8e3c01aa7992bf803627987f1193b64e1ad8eda23e613afea5a17f7ada792a0af47f586ae494fb53dc2da9339633ef631ff86ad69de280f3a29aa0a81958ff9181cdb39978c85263ce691b06a82df3d528c81447d425e40d5711d4b20e3fe3bbef67f5b1f3179099e05ba9923f954631e5a762b9d3f724047b1bbe33bf8e4878a36e9b8a038fa13476f7719af65de4bad8624accf82b3f5e405182d1541b6f06887b817949bb7c6ef142faa2dd95f62c41447fab1affc11f31d117ff518f284a0b6704cfc9cde45bc73345a600c768dde290e61567666d6b37e878fd8328e9619fe097d242a5f8718b0cfce625c37d0e6c4a77e4fe8d2fafc93926b79c435d646a9f91cf8d4cd5cb5aff6ef33f9375a339d72f72ecabdfe15ef88a7505f82dfa67c49ef31440dc5b7d5d1424b7f1a6b8478e9ab3fd6fa538af2c0b90f8b4037907eed025febb36348cbc5a6e6d64ba97c73caabdbc01788f0f6c770bef44e30eac5c4c5726397745f17b544819ff5ea8476ad4db1c7618e66888b62d92aff117d248e97a4c896d3b63d854ca3ccfa23e32ac9c5dd21d5fff892dfe377c6a46ef4dbe6231ef96546092f5adfdda8cd8b2a37e07d885cd1bcc2acbbf5ea45eba4d8788de67cec2b5e4b9e8de8ff25c591e9fc97ebf01820249dd16713057c936f48ff9eadf53ddf7896f9eccfe6e2dfd647e4dea6dcabe5eecee5ace605bee8d0f354f1c4ae85363f22090c79e1ee65e544c9ee517bfe2edefb237dc4a46538deb0fd2c4d96035df3a96e68ae1ca38c1d32eb79939cd3bead971cf25f670d5b5b4adf2bc4f80d63a3d7e7e3bbe79d9ecbbc52adbc3baa182a3e73c1cd948a75828ea473f44dcc1ab1411abb446a276bf9e0dc59d40f780ca61b7888bdfe8487cb7c98fd9e3b8b7f501f91868ace6a16de575ed46f6b5a4c2f429a8511465476e0538fa3b9bb6ca63e62d359f9fe9978046c36366e98ae3baffa9fbae738e185b7ce2b74748617e67ca7bca8dd47e6631ffa8869db82dded9c6d8ecf848f1f8973f0580a3b33ea429afcc30bf5333b9eab6adb1b7f175f6b4d2ffca7f4919c611757e706e5fe7d2b6bd42d37685180af75ef05d8f2bdc5f8265130f2da4c1de13bf591d0176cd44ed7582fb3e989e213098e123f8cee12e8537ebdf7043f0ae5b27814a725b570a96e6e584737c5bc66dffa4894e733afa4f805d4a3d73cfe5d7881d20f5fbca04e4cf745bc8a060e9ae82166acf6a37f0bed7ed6e925344f7d0d702add98715fef5734ee21e4bb773fc247be531f319fa3e847b2cef5482c395673f233d6d26f49cacaf9ee73aeecadc7f77e178db5f511fb99ac17c1df9eab90fe14d871cea9ffb92ac529e95a1d292f8a8f6bf22bb9b7f9bf391ffbf28f98ff3f938fc4f49deb0a431764cbd398fd77142fa7d15acf42bdccae0520d837d85543aea7f847f3578be9efbfa18f84be54c32ee44d9aeef2b16bacac00978ae55f1dfba3f8484e8d4caedecbe41a0ee532d834fdab3c6f1b7d24d4a75ca92dab3fabfecc1ba31bf8fd358d7d23c90499b9fd9b6675a9add4e039de2488e9255f3ad1c267a3b6498a6397f7ad8f649ce83890bd6dd67ae839dd9a17d6393ea29880de7dc5eb1ff9e3f7e2e0763eed0fa639ff28c77a99d4b08c48676cfdc5795d01c3ce97b779c8a6f9583a89006bd8e025ff983e62d160f8a93b134bd67da3ea36429b746dd7ae1af52b2fea53ff4e1e22f4bdeaadc710dbcfe5cc5d8901061236fe06238e4fb2f946ccf59fcec7bee37e313f67403822dc01cd23de28f61775787b8c2fa6e3e49e292726d7422e65b6895d02fb5580c3cc1218e2bd1609e2bb1b799834d3ce277371c635860b9ec583fe297d44e83ee590b8ab9ee3fa81cddda8057540d535736d8a5c443460aee3b8e585c6748ae61fc4c4ef7c833eb24e73c3fcc4595bc9d653b59a4073735d3f9b7e7366bdeef42d072caa0cd795cd84bf0f9e638fb34d43f7a58fc8fb0bbf7c205e594b273a03c79bacd42e1f9cd7cf5b8aff0309dc45e5bdc700ab51eb6bcde1aa9df995ebe7de590fbb09299fced57c01d57016c92b7ec69d919b6abf7f8a632772cea22675be701ef529cfd6b16efe417d24c3f9d18afee406965fe12dc4fb5da088d890ec20c3b2119bb50f1e22cfb0f3d9e3fe4f11fe6ded063b99f40fb420c6d7eeeb36fddeb73e22cde269b911d571472d4b603106f10d76cc849aafb4a26a5db54372639692bdd006066d7de13396a3e0fddab93246d3eb43edaa1ce344a301735ed7503eb17fff8fe92342ff35b608326cfd0bd3274bda3ab8726e0a8d30371b76298aa30a9ca613aa8711a1c5bbeadf67fa88795e9e2f7c21a5e99dae6fa577067040607b2b10b67af0dbe907cf33e5f19fd447f0fc2ccf91a2d958d5f0f466150faf69d43ccd3f8a814e059900317359f5ee4ff5457bb83aeafe2209193112e29747fd329dc5807191dc1e53b688be3fe2f0502f3299a3dfbbba7664ba7a077b5ba49ee2bfa78f1874b5c5f13b9a137ba1dc0a4e8d6c1e2db92c58a63fa1a6e98b1dcff45d3ef74df9ec71b4ef818f268d145c5cef8331dfc41ff6ad8fd8be8a9217c404e85d7f66bc5b4c5e3ae605fe1ffc76a6f8480e3efa8710a312b114b995757d5cec82b4173afac3c47dfd857518257754efe2e6fb9fd047e47e62db56f427d15fb573498e6b327cb33aef1b517e8a76e5d408642eb5fc099a463ee91b431edd959cfe793e7b48efe6fc7f385eb320b72ec77ef46b67a6eb35a53486fac2e01d8233b508c62263f5e327f411b30f78fe0bf311ec8a39e98039c2472972bfc9fec6b92eed16d52f211d862a5a03a1afcf3829e315b2192ad7ad14df57c623942b22362d8d48eb117e7df5b93ecd659c62eda6f5aa74986aa40e16cfdb3fa28fa4d79f05ac586dd3923a828f64e91da8e7232a7baef847aac7f4ccf4437b1beefb1d6362e3fd7ec4031eaccf422f4f365cb72d1ff96e7dc4ec47cc3cc97b04d86585e8f9604e72e1717ac178c86a4cdad02bb21cafa63e277defe3bc918cf11c60402a6a39468d328cc393d54fddf77f421f11fa2434589d4b0cfa83729d6d5986e5b7a334c3f7b7f203b4bf453fa8ed4af43927ba8c4187b6c961fbaa3e62f29118fbbcbe3e1b609ad0779e81f115de5778d13a1ff9597dc4cc2f9f39e203ba09f8c522877c97824375800b016e3c5d23c71ce33a2b9e8f7a243d64528fca0354481da1424f100fe684b10ba6adcf9c07fcf64e3d57edb877c4c30d9d59d775ba465e4dc087fe217dc47a564b4954a850dc3f0f7dea65458772c01a872f5664e07dfa06ccf651fd914de73e3a1ff7dddfa68f989ffff499a28f315e41fd80751abb4ea5c9471e8ce7caefb84e7cb54cf57e35a67e22aedfff843e62d34e4563d323ff7501db4789f1a7a0d55d39ee60dcb8a8979cc5a4ca7159991df7e34ff4915df3d48ffaf153fac84747d5ca73f6876ce2c1260f446d441cef9cae3baa8f12d3c9236abfb3cee2aefdfe81f349b35e80ac048c824ebbdece5dafda9d337f5cbd57bfbbd5f3b1165bf18fe923429f148dce15c20a378809d5987e152f94553fb09fefa5d9fe917d3fdb9c8f9f1a832f34e81435a53f34d4dcb6525e68ebb3df53f48f07b28da1417799abb590030af76db816b47f646d2cfe097d241aafe522f6d59ffae34a92f3a1b90e49a294fbd5d33bc499e56e8d9a7bfb78ef4d3c7553fcd0f78d7ffc7cfc140fe163c04736f16033275474b14367b1b8f326cd42eeae8add21ba5c78bd81b7e68f1db6a575d4ceea29ca99bbaf8e3a4567d1043ef454eb3f4dad27e1fa69f8dc7f441f11de207ce4816a76b72fc2ac9db6fadd08f4c4f6a3fe0dfac8bedb4fc66beda219b50f1bb04d9e1975776dbd44d64421f4b134d47a484f152f01e6d8b3715dec7cfc13fa888da1f4ea2c205fa6ea946105df7af250697737ce42db3f941ea2f5911b87f8c83ede7b134ffd4f1f89f2918f787024de8a63ac4e1de8118a0750be8d3fa4638467aa63a54b7e91eeb259ccc172f35099e51e956c01ec8202f39a17e7d1096d83c1f3ff317d841be845b247b1b2e021d821c3438eed35f3f1ecbeedb3fda78ffc597fa5f1fc21ce2a32a7361f91f35cab17b98fb907b21c4bad48e135895f71cffa27f4918c139557e74e32f7d4b9ae5f867986c977606639ae3f6479151c9a7098fed3477e9287f0f1537d24daff20c6c01fb28d8b7eafe3b002bf888cabae214c3ba476e6cf66955ad2d799cd0ec52be4187bac60f0d469f8dc7f401f89c997489cf4968b4418a785789e865993dca043ffe9233f3806fb784fd3c78f3570e105751523fef8b8f9f897fc23141f3a15ffacd24366e9a4e03322a36afcd8eb346a4c2fd435938a41b7f6f1de9b78ea7ffa48948f7cc4836d3d23ee7cf4fb68ac0263346bccca2856251d250fd1cc47cafd13fa884d2bd284279be6a86920cba03e928eed34ede73fcd47fed347f6f39e968cb1969f62feb61c374eff843ef2ca7c84730650c7a93f55bbe48122a7c7adee0cd56a225853d0474c3ffb77bff7269efa9f3e12e523dbf2e06ddf338a8d12d6434ec7fcfe96f9483a7addbfa98fe85ce9996a8a77248a542f49cb9f8ca71eb17ffca78ffcdfe623196f7d0d7cb446ecd86333fef8df8ed74a87adbc70dcc6d1f83507741a441d289ed275f1c69cb7b75274a417f847f6f3de9b78ea7ffa48948f6ce209f67a89d33be2de378c050fe3b0e439d3e03bfa0c7d24b5fe9c7f401f316983d085176f929d7b93e6ab3769e57b4bf8dcd7f2d20adee7f4e7bbc7e43f7de4cffbfd3bbffbe8b3996f538b39f76fe823c29784a6bceae32251cd15732fd3d79cfa9cea391a1b70a35d6bdfb473dffac8265a3cfd0d7d64d338c5db9462797c6c9b1bf31167a3dad696b5e977c21b24363cc4f334df6b1def97afdf131f31f7a68d05b24b1a26f7132c8d7eee2d575a9647ea9999f9e830a8c361d6a1dad7bbdb72f3c6f8a03df4c33cf727fac8363a80d9d29fb4b87512778f5daf45f37f733e22efb7177d84ec0982bf5a8dd0a45dd170eb5e95aef6a92f9c436fb2b8f7c783e9f4a576ee4da627d4974935a02fdf1faf15f7ae391e8b9b6f7eaecd4332d67ccc793e3e93ff3f6ae94faecb399ff111b79675a44e58886b66df3fee39dbb68fd7e7fa7c18ed07f848c23ab72b3e62ee7dd8ae047391f349847f44b04ff0ddeb8e9eff27b4775ffac8261a5cf0d66d399fd1dd8fee6f1fbf3a3e9fdd3f0e2739ae6ddb071b5f20aa8f7c6713ba40b42161d0ce306f7b17cf90fb119ec6c2996247705e34e151cd025ae5732ef5ae9ebf5dff84362d1cc2fe48e87eeee3f9664bb15c4e7439b1c535ae930bc6c9b53e7f7eadd895e0c33a303e1b3c23f18be72615fbaced9eb1f9f8f9dc6434ae6342c76ad0b9c056b6473e2234bd669cfb2e3e62da25848720be53fcecc23b3ec2a7da65db44d7f6a58fc4f90784cfc6e98776cbc5b46de9b6f06af3fb57eb9cdcd3fbe4de329771facc2ef84822e65ec4473eb211ece29873423e329dd4024c41913977f11c537e159ca502d3cbb937d1f8afb06b31fd1ab9ba0f6e70ed77beff7aff088f65ea3c46e283be729c7ff27d38ce8b00434cb798f9b05bc87336dbe0ccdfcaefa7ceba7fc2e6216c5fd2f391fa603ee2d689f8cb53cefa18c7f57fd311bf09e76311b94f68d7aa334dfba6a38ecbc767c543b21d3a7ef7f3c66ffc19b4019127496f32c93236782d7780dfe9fce5c4f7bfbf7d1cb9f45c3d16fb787e2d7ad4cf97cfc8c52b73b37ee70cb995ad368cbfefda519eff44c7dca1f159dd6752e5cfe5d1a1be6f8fc7e3b3fbd6a2f7ddf8dc9dcc47c047beb3493dd71b4d337ee9bd3a75ecfa4a7fdad6ef930dce1166df52c779528dc4953aa23ec915d32d9386eeb369baa569f82ec661113b0ed2a64633e7e380e763a5c76511cc8b34397fcb2dee73f41a798ed9171d67abeb6931edc7ff89778d4d4271daf8fd95be1fd58eb1fbf13b2d1573fd67e317f0119e0f6b3dec511f9156dbf3f34406377118cdfab33fd9be4b1f11d95d3ec3ce2735dbf199f16ea1134c32c6351fe914e66f1eaccf252fd42f1e8c67caf566bd0f23177dad0e88cc8f3caf64dc4b9add17f319f67bffee1cc7cec75ef411910989c654bf4d1f91fbadd9c63dc2f04b132fc9a837af293ed238c20830c6ec3ef49175fa5edd993e62ea09e633d4e796faae76caf9dec0474f219b591db102b34e2b66ccc42624f741ec82db701db1c949bd5ed2f93cc64fd4bf57cfb171267306e662ced04b3cc12c718a895f6cd3421e21304c80095cd2f7c5ef8bfadc837e0737d2cf8cbe6611fc6fea34264fd86e7d561d5b2fdb1f1f31f7fb77d1ce8f9a4779cfbaf6ecb3e2f2854a6388aacd477f406b763926dfc5534dbf109f13ecf5488c81c7f361fe3e8e87487b357e2778569ef13b7e4e10cb20cfc26f042b1ebce0c50bf99ac9df6c9e224d303553deba5dcd7c5fab2fbb990fcd47be9b86466d1ee4cb34cfefeafe9b1ae53ecf5c20d31d7b9376d39ba4ef1d1788d8b913835e7ef7fbafdb7faa3b7b8e69634a05e7d9b6571e807fd450c1065538dfe9e800d5756ac41edb4deef76abc8760ecdf514e9fbebfde09541fa5a69ed938f526f512ea510287c699e54e9d59e59c7503d4b03ad07e2b578dbdb62d02b364f2c67d422b305fba56d7afd05ff5ff9d33ab3eaa6bcff89969ddbfa2e6451e788c8ee9e6cf06afd9767e36f191fdf947cc7dfd9df15a9b1ad7df1bbef496fd43aabbd7291a74edbb9fbf694cbe93a70aad9723ea442187e69c723257334fd3786dd3d914476563b7e33ec027bba07ba09e16723e751cdc05e1ceb4d52a5f287e93529f9b556a99153fff84efa1be6b1c7a411e8fc6eb4d7bd13c73ce3dc7fd076d45cdb836a27e96fc26e5ade3fd7fa4577d3417f67c04d7ee297fc4dcd7df1fafb54eb315ed5bcd50d76adc2244a1dcb9b6abcc02f9f67bdf3fae8571a6a92fdedfbe5ee20c966a8697541f0ab862ee69bd302bad8e926ffe78f15a3f71af501b2a51019d0606b234e796ae635a4df7d2fa1c300ea72fd54ee524f1d09bf51c7f3c2865ae528a2f2d2f3ad7ed66eea28dca487d6f922cf7d3be925c062fa8ff8b4a16ed66baa2aecf75ae474da73877da83fa75ee32a9eedd56fc67be6a36862ffe6c39ca5ce53afeec7da8cecd12d7d3c3cea59bf5c733c597f24ef57579df4dccd5ee9caa3e76516de94ae94935d5c7bce653517dc4aebff2f1fc84f361cdd51ef988eccbaaf1ffaef8c86736995ceea0adf491b6da2503458fbaf7444ff5f7a51d3cff77fb27ed9be2b5829834b467aac5b268d07b57d5731b8a6e27d4f9016ab068fdccd3345bd713b469b9e814fc1bf08e7c82eba6abfb75d4774bb51b3b2375ee95723fbbeabbd63b654a0367f9fd9e6a8a2dd54e4d28a92aa3fa9044ec1cf0aeb26a17299ee62bea95f7e9fbd6b56aea5cb94535ab50d955675eabf19aaabe0f81483a57f7549f07d78cb175eaadd79fdf767dd9f31199a7adf247c4bfba0b9aba8bfc914d74d98c199d925d5ed345c5fddfdbe01ffe6d7346d5def2657fd65d8acd24e67d455e35db2e789adc1f72ef92e3833e9297c5576de659cb3bce49c6877e01f91fefaa7d11f83c2cf7564e6252bb290fc66ac5fa07b4a2a58e208e7a45ab7bcf9d7e37a9f483b9e3bfce1dc76dcf6ac979da7151d7a3bb22bd42eb18cdf14d4fe90eef73e2c5bab6cb4b58331d3866bd0342fdd3750a0fa4a67178ae7c48b899a8af2e0d5593f215c2d49cab1d5551bca8a2ee39e8d2fd9a33d5df17f4bde26994f30455aaeea27a2a106b07b3d9cc4dccdab7f5c568599fe7abce0ce3c17acc624d5fcb396b3a4720e384e783f5c47c242efec53cc67d6fda2d64cf6dcaed33aed3bed6b8fb9af625d35e21f7f7bce8feb63f9bf691025502eda132a81ac9e1886850e5996676a4662c5f633bcf677d8e1b179b1f70ac518039cb36a0866bdd9beb6640feae2b1a39e11a1891e79a74fbcca0e7f85f72f1a51fa0e9eabd7ab754d7a9c7efdd519420df209a8c9a5d159f28435063f88d57af3adf2fabff517de2803e830780e6af147d7f573b093b2cdf54b43f4fbc02558ef47d9ed4fbded278e233ee27f7b78f664d6354bab08fe553e37afb7ef77cbd755eefb8537a2ff0aee12df1b486da612d5826d4580d212b9c5bebe9848f2f3c9e9e319ea28fc4f3915c402f176bb4739d9eba6cf3261f6681fdbc520f358cbd25db834993898f446331e999e135b2d7f52a7150636ac6b6787daf6a9f6df399a0feea4cff4f75cadd4caa72517eec5ce6d52a6c4e2b5e6b4e68a6ef638c3461c8f7665cc735cc5958ab9bb7b14569901be903f555eaf2119f52ef50eb693a3f6bab9db380c4703e9be5dbf94ef7bcdc7d7faf2fe66a6652a3cac9cae9e67be9faa2f3d09eceaae5c1fbb473d97cac9cf4c00be6f50534dd66c11f27c7ab76beed8f51b939afe86dbe47727f67b19c244f99221c50fd47da15525b385a63b87c34e8e1a8cf3f1a752351031d55d592cb650f3b51e918c363ba26a82ff91877dfdf3dd22e19bc1bf5c6fee03ea87ba9778d43bb1c481f8d5faadfefb383a6e2afd05d6a73e82fcc5fa06fa5746d7b93b75783dcc4104bc5e42326efb0f7529c0c67c66aa60c3a9ae1a3d8416c9adbdc702ff3c8f7d4368c336ea75e886772e685f69a94d10ffefc3e181dced5b37a6a16cbaf542514dc5eea790fd40aca5e311db16352ed7e65ac71896b621b337dc469ea3f6c3da0f1dd1b929ffb905ace8926bf9788d6a3c6ef44d1695f7db7043ed81dd1764813a0916dc5474625da052d753fac5afce1bd502318f23ef42cff9c7e8755a2df7360ae3aab79448b27237b758634ba794bf7c373c063b0434c5ea4af2b7df08c6d5ac9b86fc9baff96d7077d609ea36b961d53e571e84dbd5f34d618f756827977c15b5bcb938ab50f343fd77cc48e595a97f36db92d3c9fd27e56b69307f770f99cab6b9e9bf13ca5c9732487e0d571993785f56caf81efed8ff383c4ace3555f1bb97a01752260cbc8a895ee1e414e56fce4499d3b51d73d33bfb9a3d61cd54f06155a79ed34c9b77a87bcf9b7b51a8d647ee868fb4fd267ffb0f9bea12dcefde0fdc3ffb38ed4c470a5566c52ad64c8f3ab97f14d7e44abbefb4cab0d2bba7c8236e8a17f22ab3756520942d14648858ffeadac72fc062bc9ffc5ed9ade07bb9ef8a392e52f58967748121a0c6ad528ad8fd268fddca3c130e00dc24b9e154dbe0c6932faaaeff9c2ab50ee07fa7fbc035ea2ee337c64a9ebfccfaea75d22bc508dcb13c6407dd67da6f7812e8335911f67aef29384ef98f92924232422f202d779dfd2ae15679391f3c24fcc7d29745ee46a693837dcf00c432e6c29da9e6f931f630a4e3fed389922d9617a5da2cb3e6650ad8aae7afb461dab51ad16c5a312eabb8a4bb616d062ade5496d5d8ce833d974741fc1435e36bcdf261bd9a6ef3cae6da1fa38573c61a5e8ae7b473619d4636c4127b8a095a76d3d6a65778ea95fa8d98886ff753df937e6797ccccfe83aacc8619d6c46f939d1dcc14928b7bf8f425a2ad7f7cfc3dd61d368f42b8e8f681e7349fdd5dab868e86fc65176c857f9084b7d5fe2494655589115deb3a1be84392f4b5dcc73c65bb3f560531f8934f68face786a11d382606d1faf7a297202f43f18c1adb929a6a266a8abec22692af2626f5e3ca49f3b17eb2784d74eac7f5557e41951ed1dc73aa0101fb7d17b6fc1459223b1763b7a3becf2fc98601cb1f68311a248eda5b3fed1f38453feb67a16ff4b2f955efd871df1bf80eb85af383acda551dd040754c1e54bc60b5a8d5d6873f173cf0c0d03f4c39d46c531e0be133af4e14cf29ad7dc0b3761fb5c3d3dd91479a32e87df93ca4e19a462a391eab9acee5937ae59f100dd4c712fd7e70429fdb15ff96760ff51f3b032b33dc5554ef51ff7f4ff7c7fbd60ee9fcf034ca3b36eb23e1efaa59be97b92b1e896789beb22e69fdac3e621e032a23fdbea777d576bc553e35ba72dce60dfb7c0a2cdfcc9da89fddb071321ff98c86dae7cc3df84cbed099a2754b456f6655427d833e3050ab66f440bd835cdb9c926c08991a0d16495fcdc88c790378809b255b0af800e4c9f113bd2d6880b6b7b32d0335aa348d2e91f531387fce92cc19af4aa1a93ca3b036ae44d711fe67dbac3ee3a5396b1c8026a1ee0b1fbe7efe79947605f4edd15805f08aa5bd807780c6d70ee3e571b1e500bb18bf89ac268bfe6ae94c2417e703da6cea2371df3f7a6bfd2e9fc7dfe74b7ce4abfa88f4d51c0b93c7b10497b9e82df319d645326c737cb5e6f62d6e1f047e76d3266cfa09c42e6f606ec3f60c3b817b5e4f65faf542db4bccf36a65e7ddf762ab4b741e9638c8ded51cf550ece7e5c3c1102b19964669d048f17bd8667a6a97b46bfe512691cfe595c402db4ce549c9d5d8292c2743bed4e70fc8deae3ff3f7d0d6f477daca4b3424a081588dd07093fe71e7a6fababca01aed8901d93a8c1c87a8be61dada44767da66b14bf5c2c5ebb37d0c4810989f79c1db33cfcccb3f448bbbcd60c79048eb5c6682e2b582ad2c5d2e647ae33ffcc7a8a4133710deea7774f839ff564c8e936cd363e933e32f46c5a2cfd0b6d57f67de47b1ed79fd647827e84bb431a3e634d8c0bed615e51e54c8af3541eb44dcb357886bb2906c4f28f98f6f9e7b041c6467c4e0236168ff844fe9a6d2c25a69d6f7c3c229a8ed522766c99797cc668986f10d8c79907689b8c69cf37e9af671cef43da13274f4766d7b3eea3ee9f47dddd36d99adc2bf21f07ef1ce727326a82cb780c5fc85ea5dffbc0b2f39736f42d46c2b0edfe7147d34f10797fa1a3f2ac4796c34d199d9fb9511f89e9dbdae7b8f7b179e31fb62feb2396ff25721f354ec90449f55a07b5f55f23966062c6fd06f38f3d02db3d68e2a04c713dd527c7d5b130b9ca49329bb9eadd341bed666fba9ce46f206bf72e487ad2924f82f6e9fc8269f93dd3bc0db607ff9a69a749e3c426c13270b0ab3ea255b65cbc89d6c97dc546f448b60e78ceb42f173e5e25fd3516e96ee2b23f404c11ec67da8e3ea0463e6cf239b79c7a2a39aebeb612cd2a78e6f48e76b3f082d8d564cf3cbf63f97c4836fdf3e8f591e39b415befd78f7ec1a0f5a66d4776e19a6d6b5d1fd96e3cedf7326c485fe12116b5f8701e3f9adfe0685c2ffa93d3afb6eeba09e8baa95ef5ae71515f941fabafab4262965773ed2a89b4a63405a5a3741b4712ab10d42961bb563343b6a1740b9535158d54aba7a7686d2e4976fcde3dd999612f07cdd4d6d433da1d364d5ba3a146837c0c3e62fa6423ed31a409b1b4ec23fa65cbe506af0af412ee9f5ed53ef7234316e25197fc1379b5ea1b4aca6b252966b5b5245e01bb9a12962633f85d94fed07ba0880c6d5b3af6d67786c9f32c5e213c1634fcb7e56ffbbdbde8fb06beeb33de09b71bee63ea23969eb471a76fe2275f695fd547ccf567f058fddecc5331bfbd278a1b802f1e5139d08ff3f7142fd65414b3aac621c536afbc4747c42c38e7d8230da5455495bee1677bc7a91c623669b5688d986de3819c8ff6423e4d6d773ef7368fa0b93b5827f1af873ae646df4ff4085bae3469da8734ec031b8bf17bfddc42785eaf0cd87b947c3f3f227f84f63ab1b68f11852e857a8af0e2e958e13a35f16fe07ef30bff76766c3c3f8e863d867d90a3f00ebf309a073cc2fc7d1cadfd8006cb7bf50e3d6bdc797cd7c6f3637d2476bc3fdc413fac8fbc7996655a64071ecf22cd29641fc83db95a68eb42c37c4263984dfca37cc159f4677eb63f7366d574a33877441f014dd4deac63f2dbc2670b8f16ecedb0e36b1a78493615cda1cfd8ce7f465af087b4a6e405344bd3dcf7d08e2f7b7d4d76fe8c86f1c8c4ca9fe6bdc41e736ae93feca7c0f307bcca250a4ff348f60b68df7581c645dbca4ec3f78ee8099be8bdcdef2c7da2f2f0c1f55b501e737c3f1c0773bc8cfbafe923dbe879f6f73be0275fd54736c58999f162b26e4dff8e5c8f6a808843cb3f504cb4d846493fc61ea1f84dc86d6c5934f766408348eec48ec1eac0ce88ec8e8f6696ef45b69b418fbc52c65edf441b2c5a134bbb6cde12acd0284f32bd5de8c740bd67fe91fc0ada1ef4c636a37bbeef7dd8e49dc5eea4479bffafd56dfd28466f7ab48ec1f7f3927ec6672be323e967edf7162ffa607c491f11db5a8c7c1f370fa6dc6ff3ce3f3a7a5fd74762fb698cd53dcd6be037e1dfe9cf6c33a43886c1d0bf086524997fe2239af3f35ed6fca2492d79109d01b1e347f48688c6f8f14ce339c255833d1ec31b02fde129469e8eb36d99e7ed26b4dc7886c423e9880d5b5a8a93cd0daa1119e992419b6c3dea33ba68af8c8f7e6bdedf6ef6f98ffa6f5d1789d72a19f78b7b9ecd033f9aebdf69a51dc66b6dfafe39bcbf50765306d05e53752eff443243f47acd470cfa44fe5bf2f16235c867cd5f1ea3b451dbd137d99ce2e4eb12e9239b24a735f972d37db6a695cc430686ed855790d647021abee93e3caa4dbe5e6c381be4fb753dc1babf79d4ef1e43c3b7399ae3f2e4ad8fcb9a8d2afe3e14c3c4f31177ff381afdd9bcfcc97117fa88fdfe46bf484e083f4bd44f649dbd212661346f2fac3559123eb2339af0c97ec7de5d8d7ff3ba1dd8dfe36c60b13ee33d363c7f75e77d4c03bfb989bfea27c741e623b26a7f683e8696bc414df311fddf1769c14747e639e0a8b5fa7cf4edcffbf0482dffccff7fc283beeb081e5dbe9c97b45eb6c7f70e69ad7fab75aa839f9e0f3ae69f7ff0f9180fac878321c57158dfef918f987b754fcfdbd8fe44eedd71131afe23fdb8ff6f3eb69e0f2fe423dfd938ceaa14fa47227e95bd8d4425f48f8c423fc5be6723c8edbe1ccdc96fb38716d1fd581f3967ff489cad6c1b4bc2aec60373f0b0613ef6b43e3896b0277e2cf33cf1916de285be720c7a7116fa96bff3799f1dc9eac97e929fea87436361c6b5edeba8fd0585bf673e341244e1e7e7637816ce87f0b6b2f6b393ff5bfce0bb3f0a7dd0b91255ff0ade19f1717ee77337f607b9da79de25e7fb7fbef8fd25067aefef2ff37144f311998b1f9a0fcdd77f7a3e12341fbdc3e858b07f447cc7df75647f0476c732c5a3f19dcffbec28f15a092fcc0ddcf3f3311e188bfe0f3c5f68b6c6c19afce03cc8f184e7e3d08bc632ec713e300ff962cc7c9c628f0c0e47f3c1e1d0fbae63e561349f8c06c3c969f7b635c9bf4ce6fed5773e6fd3b1fb88e360382d776ff3afcdc5e474345fccf6df8fc121de1fe331ade48b83e1f73f6fd0c3f3c27118f4866743a4b6e9f9d8fffb478f988f6995e683fa89feeeeff96a6df62633c5432ae17c4c46f2fd60f8fffbfffedfffe7ff0f035432c6</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>frmMap</sender>
+ <signal>signalTz(const QString &amp;, const QString &amp;)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>slotNewTz(const QString &amp;, const QString &amp;)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity1</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity3</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity4</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity5</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity6</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity7</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity8</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity9</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>cmdCity2</receiver>
+ <slot>setDisabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity1</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity2</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity7</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity3</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity4</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity5</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity6</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity8</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <connection>
+ <sender>cmdCity9</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CityTimeBase</receiver>
+ <slot>beginNewTz()</slot>
+ </connection>
+ <slot access="public">beginNewTz()</slot>
+ <slot access="public">slotNewTz(const QString &amp;, const QString &amp;)</slot>
+</connections>
+<tabstops>
+ <tabstop>cmdCity1</tabstop>
+ <tabstop>cmdCity2</tabstop>
+ <tabstop>cmdCity3</tabstop>
+ <tabstop>cmdCity4</tabstop>
+ <tabstop>cmdCity5</tabstop>
+ <tabstop>cmdCity6</tabstop>
+ <tabstop>cmdCity7</tabstop>
+ <tabstop>cmdCity8</tabstop>
+ <tabstop>cmdCity9</tabstop>
+ <tabstop>frmMap</tabstop>
+</tabstops>
+</UI>
diff --git a/core/settings/citytime/findvalidzones b/core/settings/citytime/findvalidzones
new file mode 100755
index 0000000..f9e8b5b
--- a/dev/null
+++ b/core/settings/citytime/findvalidzones
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+
+# A Little utility to help tidy up messy zoneinfo directories.
+
+use File::Find;
+
+find sub {
+ if ( -f $_ ) {
+ my $a;
+ open T, $_;
+ read T, $a, 4;
+ if ( $a eq "TZif" ) {
+ my $d="$File::Find::dir/$_";
+ $d =~ s/^.\///;
+ $D{$d}=1;
+ }
+ close T;
+ }
+}, ".";
+
+open Z, "zone.tab" || die;
+
+while (<Z>) {
+ next if /^#/;
+ if ( ($cc, $north, $east, $z, $comment) =
+ $_ =~ /^(\S\S)\s+([+-]\d+)([+-]\d+)\s+(\S+)\s*(\S*)/ )
+ {
+ $Z{$z}=1;
+ }
+}
+
+for $d ( sort keys %D ) {
+ print "rm $d\n" if !$Z{$d};
+}
+
+for $z ( sort keys %Z ) {
+ print "zone $z, but no such file\n" if !$D{$z};
+}
diff --git a/core/settings/citytime/light.png b/core/settings/citytime/light.png
new file mode 100644
index 0000000..2aab906
--- a/dev/null
+++ b/core/settings/citytime/light.png
Binary files differ
diff --git a/core/settings/citytime/mag.png b/core/settings/citytime/mag.png
new file mode 100644
index 0000000..9cbd32b
--- a/dev/null
+++ b/core/settings/citytime/mag.png
Binary files differ
diff --git a/core/settings/citytime/main.cpp b/core/settings/citytime/main.cpp
new file mode 100644
index 0000000..e8664c6
--- a/dev/null
+++ b/core/settings/citytime/main.cpp
@@ -0,0 +1,30 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "citytime.h"
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char** argv )
+{
+ QPEApplication a( argc, argv );
+ CityTime main;
+ a.showMainWidget( &main );
+ return a.exec();
+}
diff --git a/core/settings/citytime/qpe-citytime.control b/core/settings/citytime/qpe-citytime.control
new file mode 100644
index 0000000..fcec4a6
--- a/dev/null
+++ b/core/settings/citytime/qpe-citytime.control
@@ -0,0 +1,9 @@
+Files: bin/citytime apps/Applications/citytime.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION), timezones
+Description: Time-zone / world clock settings
+ The time-zone manager for the Qtopia environment.
diff --git a/core/settings/citytime/stylusnormalizer.cpp b/core/settings/citytime/stylusnormalizer.cpp
new file mode 100644
index 0000000..62de28b
--- a/dev/null
+++ b/core/settings/citytime/stylusnormalizer.cpp
@@ -0,0 +1,98 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpoint.h>
+#include <qtimer.h>
+
+#include "stylusnormalizer.h"
+
+static const int FLUSHTIME = 100;
+
+_StylusEvent::_StylusEvent( const QPoint& newPt )
+ : _pt( newPt ),
+ _t( QTime::currentTime() )
+{
+}
+
+_StylusEvent::~_StylusEvent()
+{
+}
+
+StylusNormalizer::StylusNormalizer( QWidget *parent, const char* name )
+ : QWidget( parent, name ),
+ _next( 0 ),
+ bFirst( true )
+{
+ // initialize _ptList
+ int i;
+ for (i = 0; i < SAMPLES; i++ ) {
+ _ptList[i].setPoint( -1, -1 );
+ }
+ _tExpire = new QTimer( this );
+ QObject::connect( _tExpire, SIGNAL( timeout() ),
+ this, SLOT( slotAveragePoint() ) );
+}
+
+StylusNormalizer::~StylusNormalizer()
+{
+}
+
+void StylusNormalizer::addEvent( const QPoint& pt )
+{
+ _ptList[_next].setPoint( pt );
+ _ptList[_next++].setTime( QTime::currentTime() );
+ if ( _next >= SAMPLES ) {
+ _next = 0;
+ }
+ // make a single mouse click work
+ if ( bFirst ) {
+ slotAveragePoint();
+ bFirst = false;
+ }
+}
+
+void StylusNormalizer::slotAveragePoint( void )
+{
+ QPoint pt( 0, 0 );
+ QTime tCurr = QTime::currentTime();
+ int i,
+ size;
+ size = 0;
+ for ( i = 0; i < SAMPLES; i++ ) {
+ if ( ( (_ptList[i]).time().msecsTo( tCurr ) < FLUSHTIME ) &&
+ ( _ptList[i].point() != QPoint( -1, -1 ) ) ) {
+ pt += _ptList[i].point();
+ size++;
+ }
+ }
+ if ( size > 0 )
+ emit signalNewPoint( pt /= size );
+}
+
+void StylusNormalizer::start( void )
+{
+ _tExpire->start( FLUSHTIME );
+}
+
+void StylusNormalizer::stop( void )
+{
+ _tExpire->stop();
+ bFirst = true;
+} \ No newline at end of file
diff --git a/core/settings/citytime/stylusnormalizer.h b/core/settings/citytime/stylusnormalizer.h
new file mode 100644
index 0000000..d5e44a3
--- a/dev/null
+++ b/core/settings/citytime/stylusnormalizer.h
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef STYLUSNORMALIZER_H
+#define STYLUSNORMALIZER_H
+
+#include <qdatetime.h>
+#include <qwidget.h>
+
+class QTimer;
+
+class _StylusEvent
+{
+public:
+ _StylusEvent( const QPoint &pt = QPoint( 0, 0 ) );
+ ~_StylusEvent();
+ QPoint point( void ) const { return _pt; };
+ QTime time( void ) const { return _t; };
+ void setPoint( int x, int y) { _pt.setX( x ); _pt.setY( y ); };
+ void setPoint( const QPoint &newPt ) { _pt = newPt; };
+ void setTime( QTime newTime ) { _t = newTime; };
+
+private:
+ QPoint _pt;
+ QTime _t;
+};
+
+
+class StylusNormalizer : public QWidget
+{
+ Q_OBJECT
+public:
+ StylusNormalizer( QWidget *parent = 0, const char* name = 0 );
+ ~StylusNormalizer();
+ void start();
+ void stop();
+ void addEvent( const QPoint &pt ); // add a new point in
+
+signals:
+ void signalNewPoint( const QPoint &p );
+
+private slots:
+ void slotAveragePoint( void ); // return an averaged point
+
+private:
+ static const int SAMPLES = 10;
+ _StylusEvent _ptList[SAMPLES];
+ int _next;
+ QTimer *_tExpire;
+ bool bFirst; // the first item added in...
+};
+
+#endif
diff --git a/core/settings/citytime/sun.c b/core/settings/citytime/sun.c
new file mode 100644
index 0000000..d3f3731
--- a/dev/null
+++ b/core/settings/citytime/sun.c
@@ -0,0 +1,323 @@
+/*
+ * Sun clock. X11 version by John Mackin.
+ *
+ * This program was derived from, and is still in part identical with, the
+ * Suntools Sun clock program whose author's comment appears immediately
+ * below. Please preserve both notices.
+ *
+ * The X11R3/4 version of this program was written by John Mackin, at the
+ * Basser Department of Computer Science, University of Sydney, Sydney,
+ * New South Wales, Australia; <john@cs.su.oz.AU>. This program, like
+ * the one it was derived from, is in the public domain: `Love is the
+ * law, love under will.'
+ */
+
+/*
+
+ Sun clock
+
+ Designed and implemented by John Walker in November of 1988.
+
+ Version for the Sun Workstation.
+
+ The algorithm used to calculate the position of the Sun is given in
+ Chapter 18 of:
+
+ "Astronomical Formulae for Calculators" by Jean Meeus, Third Edition,
+ Richmond: Willmann-Bell, 1985. This book can be obtained from:
+
+ Willmann-Bell
+ P.O. Box 35025
+ Richmond, VA 23235
+ USA
+ Phone: (804) 320-7016
+
+ This program was written by:
+
+ John Walker
+ Autodesk, Inc.
+ 2320 Marinship Way
+ Sausalito, CA 94965
+ USA
+ Fax: (415) 389-9418
+ Voice: (415) 332-2344 Ext. 2829
+ Usenet: {sun,well,uunet}!acad!kelvin
+ or: kelvin@acad.uu.net
+
+ modified for interactive maps by
+
+ Stephen Martin
+ Fujitsu Systems Business of Canada
+ smartin@fujitsu.ca
+
+ This program is in the public domain: "Do what thou wilt shall be the
+ whole of the law". I'd appreciate receiving any bug fixes and/or
+ enhancements, which I'll incorporate in future versions of the
+ program. Please leave the original attribution information intact so
+ that credit and blame may be properly apportioned.
+
+ Revision history:
+
+ 1.0 12/21/89 Initial version.
+ 8/24/89 Finally got around to submitting.
+
+ 1.1 8/31/94 Version with interactive map.
+ 1.2 10/12/94 Fixes for HP and Solaris, new icon bitmap
+ 1.3 11/01/94 Timezone now shown in icon
+ 1.4 03/29/98 Fixed city drawing, added icon animation
+
+*/
+
+#include "sun.h"
+
+#include <qpe/qmath.h>
+
+/* PROJILLUM -- Project illuminated area on the map. */
+
+void
+projillum(wtab, xdots, ydots, dec)
+short *wtab;
+int xdots, ydots;
+double dec;
+{
+ int i, ftf = 1, ilon, ilat, lilon = 0, lilat = 0, xt;
+ double m, x, y, z, th, lon, lat, s, c;
+
+ /* Clear unoccupied cells in width table */
+
+ for (i = 0; i < ydots; i++)
+ wtab[i] = -1;
+
+ /* Build transformation for declination */
+
+ s = qSin(-dtr(dec));
+ c = qCos(-dtr(dec));
+
+ /* Increment over a semicircle of illumination */
+
+ for (th = -(PI / 2); th <= PI / 2 + 0.001;
+ th += PI / TERMINC) {
+
+ /* Transform the point through the declination rotation. */
+
+ x = -s * qSin(th);
+ y = qCos(th);
+ z = c * qSin(th);
+
+ /* Transform the resulting co-ordinate through the
+ map projection to obtain screen co-ordinates. */
+
+ lon = (y == 0 && x == 0) ? 0.0 : rtd(qATan2(y, x));
+ lat = rtd(qASin(z));
+
+ ilat = ydots - (lat + 90) * (ydots / 180.0);
+ ilon = lon * (xdots / 360.0);
+
+ if (ftf) {
+
+ /* First time. Just save start co-ordinate. */
+
+ lilon = ilon;
+ lilat = ilat;
+ ftf = 0;
+ } else {
+
+ /* Trace out the line and set the width table. */
+
+ if (lilat == ilat) {
+ wtab[(ydots - 1) - ilat] = ilon == 0 ? 1 : ilon;
+ } else {
+ m = ((double) (ilon - lilon)) / (ilat - lilat);
+ for (i = lilat; i != ilat; i += sgn(ilat - lilat)) {
+ xt = lilon + qFloor((m * (i - lilat)) + 0.5);
+ wtab[(ydots - 1) - i] = xt == 0 ? 1 : xt;
+ }
+ }
+ lilon = ilon;
+ lilat = ilat;
+ }
+ }
+
+ /* Now tweak the widths to generate full illumination for
+ the correct pole. */
+
+ if (dec < 0.0) {
+ ilat = ydots - 1;
+ lilat = -1;
+ } else {
+ ilat = 0;
+ lilat = 1;
+ }
+
+ for (i = ilat; i != ydots / 2; i += lilat) {
+ if (wtab[i] != -1) {
+ while (1) {
+ wtab[i] = xdots / 2;
+ if (i == ilat)
+ break;
+ i -= lilat;
+ }
+ break;
+ }
+ }
+}
+
+/*
+ * Sun clock - astronomical routines.
+ */
+
+/* JDATE -- Convert internal GMT date and time to Julian day
+ and fraction. */
+
+long
+jdate(t)
+struct tm *t;
+{
+ long c, m, y;
+
+ y = t->tm_year + 1900;
+ m = t->tm_mon + 1;
+ if (m > 2)
+ m = m - 3;
+ else {
+ m = m + 9;
+ y--;
+ }
+ c = y / 100L; /* Compute century */
+ y -= 100L * c;
+ return t->tm_mday + (c * 146097L) / 4 + (y * 1461L) / 4 +
+ (m * 153L + 2) / 5 + 1721119L;
+}
+
+/* JTIME -- Convert internal GMT date and time to astronomical
+ Julian time (i.e. Julian date plus day fraction,
+ expressed as a double). */
+
+double
+jtime(t)
+struct tm *t;
+{
+ return (jdate(t) - 0.5) +
+ (((long) t->tm_sec) +
+ 60L * (t->tm_min + 60L * t->tm_hour)) / 86400.0;
+}
+
+/* KEPLER -- Solve the equation of Kepler. */
+
+double
+kepler(m, ecc)
+double m, ecc;
+{
+ double e, delta;
+#define EPSILON 1E-6
+
+ e = m = dtr(m);
+ do {
+ delta = e - ecc * qSin(e) - m;
+ e -= delta / (1 - ecc * qCos(e));
+ } while (qFabs(delta) > EPSILON);
+ return e;
+}
+
+/* SUNPOS -- Calculate position of the Sun. JD is the Julian date
+ of the instant for which the position is desired and
+ APPARENT should be nonzero if the apparent position
+ (corrected for nutation and aberration) is desired.
+ The Sun's co-ordinates are returned in RA and DEC,
+ both specified in degrees (divide RA by 15 to obtain
+ hours). The radius vector to the Sun in astronomical
+ units is returned in RV and the Sun's longitude (true
+ or apparent, as desired) is returned as degrees in
+ SLONG. */
+
+
+void
+sunpos(jd, apparent, ra, dec, rv, slong)
+double jd;
+int apparent;
+double *ra, *dec, *rv, *slong;
+{
+ double t, t2, t3, l, m, e, ea, v, theta, omega,
+ eps;
+
+ /* Time, in Julian centuries of 36525 ephemeris days,
+ measured from the epoch 1900 January 0.5 ET. */
+
+ t = (jd - 2415020.0) / 36525.0;
+ t2 = t * t;
+ t3 = t2 * t;
+
+ /* Geometric mean longitude of the Sun, referred to the
+ mean equinox of the date. */
+
+ l = fixangle(279.69668 + 36000.76892 * t + 0.0003025 * t2);
+
+ /* Sun's mean anomaly. */
+
+ m = fixangle(358.47583 + 35999.04975*t - 0.000150*t2 - 0.0000033*t3);
+
+ /* Eccentricity of the Earth's orbit. */
+
+ e = 0.01675104 - 0.0000418 * t - 0.000000126 * t2;
+
+ /* Eccentric anomaly. */
+
+ ea = kepler(m, e);
+
+ /* True anomaly */
+
+ v = fixangle(2 * rtd(qATan(qSqrt((1 + e) / (1 - e)) * qTan(ea / 2))));
+
+ /* Sun's true longitude. */
+
+ theta = l + v - m;
+
+ /* Obliquity of the ecliptic. */
+
+ eps = 23.452294 - 0.0130125 * t - 0.00000164 * t2 + 0.000000503 * t3;
+
+ /* Corrections for Sun's apparent longitude, if desired. */
+
+ if (apparent) {
+ omega = fixangle(259.18 - 1934.142 * t);
+ theta = theta - 0.00569 - 0.00479 * qSin(dtr(omega));
+ eps += 0.00256 * qCos(dtr(omega));
+ }
+
+ /* Return Sun's longitude and radius vector */
+
+ *slong = theta;
+ *rv = (1.0000002 * (1 - e * e)) / (1 + e * qCos(dtr(v)));
+
+ /* Determine solar co-ordinates. */
+
+ *ra =
+ fixangle(rtd(qATan2(qCos(dtr(eps)) * qSin(dtr(theta)), qCos(dtr(theta)))));
+ *dec = rtd(qASin(sin(dtr(eps)) * qSin(dtr(theta))));
+}
+
+/* GMST -- Calculate Greenwich Mean Siderial Time for a given
+ instant expressed as a Julian date and fraction. */
+
+double
+gmst(jd)
+double jd;
+{
+ double t, theta0;
+
+
+ /* Time, in Julian centuries of 36525 ephemeris days,
+ measured from the epoch 1900 January 0.5 ET. */
+
+ t = ((qFloor(jd + 0.5) - 0.5) - 2415020.0) / 36525.0;
+
+ theta0 = 6.6460656 + 2400.051262 * t + 0.00002581 * t * t;
+
+ t = (jd + 0.5) - (qFloor(jd + 0.5));
+
+ theta0 += (t * 24.0) * 1.002737908;
+
+ theta0 = (theta0 - 24.0 * (qFloor(theta0 / 24.0)));
+
+ return theta0;
+}
diff --git a/core/settings/citytime/sun.h b/core/settings/citytime/sun.h
new file mode 100644
index 0000000..2091621
--- a/dev/null
+++ b/core/settings/citytime/sun.h
@@ -0,0 +1,57 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+/*
+ * Sun clock definitions.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <time.h>
+
+#ifndef PI
+#define PI 3.14159265358979323846
+#endif
+
+#ifndef E
+#define E 2.7182818284590452354
+#endif
+
+#define abs(x) ((x) < 0 ? (-(x)) : x) /* Absolute value */
+#define sgn(x) (((x) < 0) ? -1 : ((x) > 0 ? 1 : 0)) /* Extract sign */
+#define dtr(x) ((x) * (PI / 180.0)) /* Degree->Radian */
+#define rtd(x) ((x) / (PI / 180.0)) /* Radian->Degree */
+#define fixangle(a) ((a) - 360.0 * (qFloor((a) / 360.0))) /* Fix angle */
+
+#define TERMINC 100 /* Circle segments for terminator */
+
+#define PROJINT (60 * 10) /* Frequency of seasonal recalculation */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+double jtime(struct tm *t);
+double kepler(double m, double ecc);
+void sunpos(double jd, int apparent, double *ra, double *dec, double *rv, double *slong);
+void projillum(short *wtab, int xdots, int ydots, double dec);
+#ifdef __cplusplus
+};
+#endif
diff --git a/core/settings/citytime/zonemap.cpp b/core/settings/citytime/zonemap.cpp
new file mode 100644
index 0000000..337f4d9
--- a/dev/null
+++ b/core/settings/citytime/zonemap.cpp
@@ -0,0 +1,670 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "sun.h"
+#include "zonemap.h"
+
+#include <qpe/resource.h>
+#include <qpe/timestring.h>
+#include <qpe/qpeapplication.h>
+
+#include <qdatetime.h>
+#include <qfile.h>
+#include <qimage.h>
+#include <qlabel.h>
+#include <qlist.h>
+#include <qmessagebox.h>
+#include <qpixmap.h>
+#include <qpainter.h>
+#include <qregexp.h>
+#include <qtextstream.h>
+#include <qtimer.h>
+#include <qtoolbutton.h>
+
+#include <limits.h>
+
+// the map file...
+static const char strZONEINFO[] = "/usr/share/zoneinfo/zone.tab";
+static const char strMAP[] = "simple_grid_400";
+
+// the maximum distance we'll allow the pointer to be away from a city
+// and still show the city's time
+static const int iTHRESHOLD = 50000;
+
+// The label offset (how far away from pointer)
+static const int iLABELOFFSET = 8;
+
+// the size of the dot to draw, and where to start it
+static const int iCITYSIZE = 3;
+const int iCITYOFFSET = 2;
+
+// the darkening function
+static inline void darken( QImage *pImage, int start, int stop, int row );
+static void dayNight( QImage *pImage );
+
+ZoneField::ZoneField( const QString& strLine )
+{
+ // make a bunch of RegExp's to match the data from the line
+ QRegExp regCoord( "[-+][0-9]+" ); // the latitude
+ QRegExp regCountry( "[A-Za-z]+/" ); // the country (not good enough)
+ QRegExp regCity( "[A-Za-z_-]*" ); // the city
+
+ int iStart,
+ iStop,
+ iLen,
+ tmp;
+ QString strTmp;
+ // we should be able to assume that the country code is always the first
+ // two chars, so just grap them and let it go...
+ strCountryCode = strLine.left( 2 );
+ iStart = regCoord.match( strLine, 0, &iLen );
+ if ( iStart >= 0 ) {
+ strTmp = strLine.mid( iStart, iLen );
+ tmp = strTmp.toInt();
+ // okay, there are two versions of the format, make a decision based on
+ // the size...
+ // Oh BTW, we are storing everything in seconds!
+ if ( iLen < 7 ) {
+ _y = tmp / 100;
+ _y *= 60;
+ _y += tmp % 100;
+ _y *= 60;
+ } else {
+ _y = tmp / 10000;
+ _y *= 60;
+ tmp %= 10000;
+ _y += tmp / 100;
+ _y *= 60;
+ tmp %= 100;
+ _y += tmp;
+ }
+ }
+ iStart = regCoord.match( strLine, iStart + iLen, &iLen );
+ if ( iStart >= 0 ) {
+ strTmp = strLine.mid( iStart, iLen );
+ tmp = strTmp.toInt();
+ if ( iLen < 8 ) {
+ _x = tmp / 100;
+ _x *= 60;
+ _x += tmp % 100;
+ _x *= 60;
+ } else {
+ _x = tmp / 10000;
+ _x *= 60;
+ tmp %= 10000;
+ _x += tmp / 100;
+ _x *= 60;
+ tmp %= 100;
+ _x += tmp;
+ }
+ }
+ iStart = regCountry.match( strLine, 0, &iLen );
+ // help with the shortcoming in 2.x regexp...
+ iStop = strLine.findRev( '/' );
+ if ( iStart >= 0 ) {
+ iLen = (iStop - iStart) + 1;
+ strCountry = strLine.mid( iStart, iLen );
+ }
+ // now match the city...
+ iStart = regCity.match( strLine, iStart + iLen, &iLen );
+ if ( iStart >= 0 ) {
+ strCity = strLine.mid( iStart, iLen );
+ }
+}
+
+void ZoneField::showStructure( void ) const
+{
+ qDebug( "Country: %s", strCountry.latin1() );
+ qDebug( "City: %s", strCity.latin1() );
+ qDebug( "x: %d", _x );
+ qDebug( "y: %d\n", _y );
+}
+
+ZoneMap::ZoneMap( QWidget *parent, const char* name )
+ : QScrollView( parent, name ),
+ pLast( 0 ),
+ pRepaint( 0 ),
+ ox( 0 ),
+ oy( 0 ),
+ drawableW( -1 ),
+ drawableH( -1 ),
+ bZoom( FALSE ),
+ bIllum( TRUE ),
+ cursor( 0 )
+{
+ viewport()->setFocusPolicy( StrongFocus );
+
+ // set mouse tracking so we can use the mouse move event
+ zones.setAutoDelete( true );
+ // get the map loaded
+ // just set the current image to point
+ pixCurr = new QPixmap();
+
+ QPixmap pixZoom = Resource::loadPixmap( "mag" );
+
+ cmdZoom = new QToolButton( this, "Zoom command" );
+ cmdZoom->setPixmap( pixZoom );
+ cmdZoom->setToggleButton( true );
+
+ cmdZoom->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0,
+ (QSizePolicy::SizeType)0,
+ cmdZoom->sizePolicy().hasHeightForWidth() ) );
+ cmdZoom->setMaximumSize( cmdZoom->sizeHint() );
+ // probably don't need this, but just in case...
+ cmdZoom->move( width() - cmdZoom->width(), height() - cmdZoom->height() );
+
+
+ lblCity = new QLabel( tr( "CITY" ), this, "City Label" );
+ lblCity->setMinimumSize( lblCity->sizeHint() );
+ lblCity->setFrameStyle( QFrame::Plain | QFrame::Box );
+ lblCity->setBackgroundColor( yellow );
+ lblCity->hide();
+
+ // A timer to make sure the label gets hidden
+ tHide = new QTimer( this, "Label Timer" );
+ QObject::connect( tHide, SIGNAL( timeout() ),
+ lblCity, SLOT( hide() ) );
+ QObject::connect( tHide, SIGNAL( timeout() ),
+ this, SLOT( slotRedraw() ) );
+ QTimer *tUpdate = new QTimer( this, "Update Timer" );
+ QObject::connect( tUpdate, SIGNAL( timeout() ),
+ this, SLOT( slotUpdate() ) );
+ QObject::connect( qApp, SIGNAL( timeChanged() ),
+ this, SLOT( slotUpdate() ) );
+ QObject::connect( cmdZoom, SIGNAL( toggled( bool ) ),
+ this, SLOT( slotZoom( bool ) ) );
+ QObject::connect( &norm, SIGNAL( signalNewPoint( const QPoint& ) ),
+ this, SLOT( slotFindCity( const QPoint& ) ) );
+ QObject::connect( qApp, SIGNAL( clockChanged( bool ) ),
+ this, SLOT( changeClock( bool ) ) );
+ // update the sun's movement every 5 minutes
+ tUpdate->start( 5 * 60 * 1000 );
+ // May as well read in the timezone information too...
+ readZones();
+}
+
+ZoneMap::~ZoneMap()
+{
+}
+
+void ZoneMap::readZones( void )
+{
+ QFile fZone( strZONEINFO );
+ if ( !fZone.open( IO_ReadOnly ) ) {
+ QMessageBox::warning (this,
+ tr( "Unable to Find Timezone Info" ),
+ tr( "<p>Unable to find any timezone information in %1" )
+ .arg( strZONEINFO ));
+ exit(-1);
+ } else {
+ QTextStream tZone( &fZone );
+ while ( !tZone.atEnd() ) {
+ QString strLine = tZone.readLine();
+ // only pass on lines that aren't comments
+ if ( strLine[0] != '#' ) {
+ zones.append( new ZoneField( strLine ) );
+ }
+ }
+ fZone.close();
+ }
+}
+
+void ZoneMap::viewportMousePressEvent( QMouseEvent* event )
+{
+ // add the mouse event into the normalizer, and get the average,
+ // pass it along
+ slotRedraw();
+ norm.start();
+ norm.addEvent( event->pos() );
+}
+
+void ZoneMap::viewportMouseMoveEvent( QMouseEvent* event )
+{
+ norm.addEvent( event->pos() );
+}
+
+void ZoneMap::viewportMouseReleaseEvent( QMouseEvent* )
+{
+ // get the averaged points in case a timeout hasn't occurred,
+ // more for "mouse clicks"
+ norm.stop();
+ if ( pLast != NULL ) {
+ emit signalTz( pLast->country(), pLast->city() );
+ pLast = NULL;
+ }
+ tHide->start( 2000, true );
+}
+
+void ZoneMap::keyPressEvent( QKeyEvent *ke )
+{
+ switch ( ke->key() ) {
+ case Key_Left:
+ case Key_Right:
+ case Key_Up:
+ case Key_Down: {
+ tHide->stop();
+ if ( !cursor )
+ slotFindCity( QPoint( contentsWidth(), contentsHeight() ) / 2 );
+ ZoneField *city = findCityNear( cursor, ke->key() );
+ if ( city ) {
+ cursor = city;
+ int tmpx, tmpy;
+ zoneToWin( cursor->x(), cursor->y(), tmpx, tmpy );
+ ensureVisible( tmpx, tmpy );
+ showCity( cursor );
+ tHide->start( 3000, true );
+ }
+ }
+ break;
+
+ case Key_Space:
+ case Key_Enter:
+ case Key_Return:
+ if ( cursor ) {
+ emit signalTz( cursor->country(), cursor->city() );
+ tHide->start( 0, true );
+ }
+ break;
+ }
+}
+
+ZoneField *ZoneMap::findCityNear( ZoneField *city, int key )
+{
+ ZoneField *pZone;
+ ZoneField *pClosest = 0;
+ long ddist = LONG_MAX;
+
+ QListIterator<ZoneField> it( zones );
+ for (; it.current(); ++it) {
+ pZone = it.current();
+ long dx = (pZone->x() - city->x())/100;
+ long dy = (pZone->y() - city->y())/100;
+ switch ( key ) {
+ case Key_Right:
+ case Key_Left:
+ if ( key == Key_Left )
+ dx = -dx;
+ if ( dx > 0 ) {
+ long dist = QABS(dy)*4 + dx;
+ if ( dist < ddist ) {
+ ddist = dist;
+ pClosest = pZone;
+ }
+ }
+ break;
+ case Key_Down:
+ case Key_Up:
+ if ( key == Key_Down )
+ dy = -dy;
+ if ( dy > 0 ) {
+ long dist = QABS(dx)*4 + dy;
+ if ( dist < ddist ) {
+ ddist = dist;
+ pClosest = pZone;
+ }
+ }
+ break;
+ }
+ }
+
+ return pClosest;
+}
+
+void ZoneMap::slotFindCity( const QPoint &pos )
+{
+ lblCity->hide();
+ // given coordinates on the screen find the closest city and display the
+ // label close to it
+ int tmpx, tmpy, x, y;
+ long lDistance,
+ lClosest;
+ ZoneField *pZone,
+ *pClosest;
+
+ if ( tHide->isActive() ) {
+ tHide->stop();
+ }
+ viewportToContents(pos.x(), pos.y(), tmpx, tmpy);
+ winToZone( tmpx, tmpy, x, y );
+ // Find city alogorithim: start out at an (near) infinite distance away and
+ // then find the closest city, (similar to the Z-buffer technique, I guess)
+ // the only problem is that this is all done with doubles, but I don't know
+ // another way to do it at the moment. Another problem is a linked list is
+ // used obviously something indexed would help
+ QListIterator<ZoneField> it( zones );
+ pClosest = 0;
+ lClosest = LONG_MAX;
+ for (; it.current(); ++it) {
+ pZone = it.current();
+ // use the manhattenLength, a good enough of an appoximation here
+ lDistance = QABS( x - pZone->x() ) + QABS( y - pZone->y() );
+ // first to zero wins!
+ if ( lDistance < lClosest ) {
+ lClosest = lDistance;
+ pClosest = pZone;
+ }
+ }
+
+ // Okay, we found the closest city, but it might still be too far away.
+ if ( lClosest <= iTHRESHOLD ) {
+ showCity( pClosest );
+ cursor = pClosest;
+ }
+}
+
+void ZoneMap::showCity( ZoneField *city )
+{
+ pLast = city;
+ // we'll use city and country a couple of times, get them to save some
+ // time
+ QString strCity = pLast->city();
+ QString strCountry = pLast->country();
+ // Display the time at this location by setting the environment timezone
+ // getting the current time [there] and then swapping back the variable
+ // so no one notices...
+ QString strSave;
+ char *p = getenv( "TZ" );
+ if ( p ) {
+ strSave = p;
+ }
+ // set the timezone :)
+ setenv( "TZ", strCountry + strCity, true );
+ lblCity->setText( strCity.replace( QRegExp("_"), " ") + "\n" +
+ TimeString::shortTime( ampm ) );
+ lblCity->setMinimumSize( lblCity->sizeHint() );
+ // undue our damage...
+ unsetenv( "TZ" );
+ if ( p )
+ setenv( "TZ", strSave, true );
+ // Now decide where to move the label, x & y can be reused
+ int tmpx, tmpy, x, y;
+ zoneToWin( pLast->x(), pLast->y(), tmpx, tmpy );
+ contentsToViewport(tmpx, tmpy, x, y);
+ if ( lblCity->width() > drawableW - x ) {
+ // oops... try putting it on the right
+ x = x - lblCity->width() - iLABELOFFSET;
+ } else {
+ // the default...
+ x += iLABELOFFSET;
+ }
+ if ( lblCity->height() > drawableH - y ) {
+ // move it up...
+ y = y - lblCity->height() - iLABELOFFSET;
+ } else if ( y < 0 ) {
+ // the city is actually off the screen...
+ // this only happens on the a zoom when you are near the top,
+ // a quick workaround..
+ y = iLABELOFFSET;
+ } else {
+ // the default
+ y += iLABELOFFSET;
+ }
+
+ // draw in the city and the label
+ if ( pRepaint ) {
+ int repx,
+ repy;
+ zoneToWin( pRepaint->x(), pRepaint->y(), repx, repy );
+ updateContents( repx - iCITYOFFSET, repy - iCITYOFFSET,
+ iCITYSIZE, iCITYSIZE );
+ }
+ updateContents( tmpx - iCITYOFFSET, tmpy - iCITYOFFSET, iCITYSIZE,
+ iCITYSIZE );
+ pRepaint = pLast;
+
+ lblCity->move( x, y );
+ lblCity->show();
+}
+
+void ZoneMap::resizeEvent( QResizeEvent *e )
+{
+ // keep the zoom button down in the corner
+ QSize _size = e->size();
+ cmdZoom->move( _size.width() - cmdZoom->width(),
+ _size.height() - cmdZoom->height() );
+ if ( !bZoom ) {
+ drawableW = width() - 2 * frameWidth();
+ drawableH = height() - 2 * frameWidth();
+ makeMap( drawableW, drawableH );
+ resizeContents( drawableW, drawableH );
+ }
+}
+
+void ZoneMap::showZones( void ) const
+{
+ // go through the zones in the list and just display the values...
+ QListIterator<ZoneField> itZone( zones );
+ for ( itZone.toFirst(); itZone.current(); ++itZone ) {
+ ZoneField *pZone = itZone.current();
+ pZone->showStructure();
+ }
+}
+
+void ZoneMap::drawCities( QPainter *p )
+{
+ int x,
+ y,
+ j;
+ // draw in the cities
+ // for testing only as when you put it
+ // on the small screen it looks awful and not to mention useless
+ p->setPen( red );
+ QListIterator<ZoneField> itZone( zones );
+ for ( itZone.toFirst(), j = 0; itZone.current(); ++itZone, j++ ) {
+ ZoneField *pZone = itZone.current();
+ zoneToWin( pZone->x(), pZone->y(), x, y );
+ if ( x > wImg )
+ x = x - wImg;
+ p->drawRect( x - iCITYOFFSET, y - iCITYOFFSET, iCITYSIZE, iCITYSIZE);
+ }
+}
+
+static void dayNight(QImage *pImage)
+{
+ // create a mask the functions from sun.h
+ double dJulian,
+ dSunRad,
+ dSunDecl,
+ dSunRadius,
+ dSunLong;
+ int wImage = pImage->width(),
+ hImage = pImage->height(),
+ iStart,
+ iStop,
+ iMid,
+ relw,
+ i;
+ short wtab[ wImage ];
+ time_t tCurrent;
+ struct tm *pTm;
+
+ // get the position of the sun bassed on our current time...
+ tCurrent = time( NULL );
+ pTm = gmtime( &tCurrent );
+ dJulian = jtime( pTm );
+ sunpos( dJulian, 0, &dSunRad, &dSunDecl, &dSunRadius, &dSunLong );
+
+ // now get the projected illumination
+ projillum( wtab, wImage, hImage, dSunDecl );
+ relw = wImage - int( wImage * 0.0275 );
+
+ // draw the map, keeping in mind that we may go too far off the map...
+ iMid = ( relw * ( 24*60 - pTm->tm_hour * 60 - pTm->tm_min ) ) / ( 24*60 );
+
+ for ( i = 0; i < hImage; i++ ) {
+ if ( wtab[i] > 0 ) {
+ iStart = iMid - wtab[i];
+ iStop = iMid + wtab[i];
+ if ( iStart < 0 ) {
+ darken( pImage, iStop, wImage + iStart, i );
+ } else if ( iStop > wImage ) {
+ darken( pImage, iStop - wImage, iStart, i );
+ } else {
+ darken( pImage, 0, iStart, i );
+ darken( pImage, iStop, wImage, i );
+ }
+ } else {
+ darken( pImage, 0, wImage, i );
+ }
+ }
+}
+
+static inline void darken( QImage *pImage, int start, int stop, int row )
+{
+ int colors,
+ j;
+ uchar *p;
+
+ // assume that the image is similar to the one we have...
+ colors = pImage->numColors() / 2;
+
+ p = pImage->scanLine( row );
+ for ( j = start; j <= stop; j++ ) {
+ if ( p[j] < colors )
+ p[j] += colors;
+ }
+}
+
+void ZoneMap::makeMap( int w, int h )
+{
+ QImage imgOrig = Resource::loadImage( strMAP );
+ if ( imgOrig.isNull() ) {
+ QMessageBox::warning( this,
+ tr( "Couldn't Find Map" ),
+ tr( "<p>Couldn't load map: %1, exiting")
+ .arg( strMAP ) );
+ exit(-1);
+ }
+
+ // set up the color table for darkening...
+ imgOrig = imgOrig.convertDepth( 8 );
+ int numColors = imgOrig.numColors();
+ // double the colors
+ imgOrig.setNumColors( 2 * numColors );
+ // darken the new ones...
+ for ( int i = 0; i < numColors; i++ ) {
+ QRgb rgb = imgOrig.color( i );
+ imgOrig.setColor ( i + numColors, qRgb( 2 * qRed( rgb ) / 3,
+ 2 * qGreen( rgb ) / 3, 2 * qBlue( rgb ) / 3 ) );
+ }
+
+ // else go one with making the map...
+ if ( bIllum ) {
+ // do a daylight mask
+ dayNight(&imgOrig);
+ }
+ // redo the width and height
+ wImg = w;
+ hImg = h;
+ ox = ( wImg / 2 ) - int( wImg * 0.0275 );
+ oy = hImg / 2;
+ pixCurr->convertFromImage( imgOrig.smoothScale(w, h),
+ QPixmap::ThresholdDither );
+}
+
+void ZoneMap::drawCity( QPainter *p, const ZoneField *pCity )
+{
+ int x,
+ y;
+
+ p->setPen( red );
+ zoneToWin( pCity->x(), pCity->y(), x, y );
+ p->drawRect( x - iCITYOFFSET, y - iCITYOFFSET, iCITYSIZE, iCITYSIZE );
+}
+
+void ZoneMap::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ // if there is a need to resize, then do it...
+ // get our drawable area
+ drawableW = width() - 2 * frameWidth();
+ drawableH = height() - 2 * frameWidth();
+
+ int pixmapW = pixCurr->width(),
+ pixmapH = pixCurr->height();
+ if ( !bZoom && ( ( pixmapW != drawableW ) ||
+ ( pixmapH != drawableH) ) ) {
+ makeMap( drawableW, drawableH );
+ }
+
+ // taken from the scrollview example...
+ int rowheight = pixCurr->height();
+ int toprow = cy / rowheight;
+ int bottomrow = ( cy + ch + rowheight - 1 ) / rowheight;
+ int colwidth = pixCurr->width();
+ int leftcol= cx / colwidth;
+ int rightcol= ( cx + cw + colwidth - 1 ) / colwidth;
+ for ( int r = toprow; r <= bottomrow; r++ ) {
+ int py = r * rowheight;
+ for ( int c = leftcol; c <= rightcol; c++ ) {
+ int px = c * colwidth;
+ p->drawPixmap( px, py, *pixCurr );
+ }
+ }
+
+ // Draw that city!
+ if ( pLast )
+ drawCity( p, pLast );
+}
+
+void ZoneMap::slotZoom( bool setZoom )
+{
+ bZoom = setZoom;
+ if ( bZoom ) {
+ makeMap( 2 * wImg , 2 * hImg );
+ resizeContents( wImg, hImg );
+ } else {
+ makeMap( drawableW, drawableH );
+ resizeContents( drawableW, drawableH );
+ }
+}
+
+void ZoneMap::slotIllum( bool setIllum )
+{
+ bIllum = !setIllum;
+ // make the map...
+ makeMap( pixCurr->width(), pixCurr->height() );
+ updateContents( 0, 0, wImg, hImg );
+}
+
+void ZoneMap::slotUpdate( void )
+{
+ // recalculate the light, most people will never see this,
+ // but it is good to be complete
+ makeMap ( pixCurr->width(), pixCurr->height() );
+ updateContents( contentsX(), contentsY(), drawableW, drawableH );
+}
+
+void ZoneMap::slotRedraw( void )
+{
+ // paint over that pesky city...
+ int x,
+ y;
+ if ( pRepaint ) {
+ pLast = 0;
+ zoneToWin(pRepaint->x(), pRepaint->y(), x, y);
+ updateContents( x - iCITYOFFSET, y - iCITYOFFSET, iCITYSIZE, iCITYSIZE);
+ pRepaint = 0;
+ }
+}
+
+void ZoneMap::changeClock( bool whichClock )
+{
+ ampm = whichClock;
+}
diff --git a/core/settings/citytime/zonemap.cw b/core/settings/citytime/zonemap.cw
new file mode 100644
index 0000000..8e8625e
--- a/dev/null
+++ b/core/settings/citytime/zonemap.cw
@@ -0,0 +1,21 @@
+<!DOCTYPE CW><CW>
+<customwidgets>
+ <customwidget>
+ <class>ZoneMap</class>
+ <header location="local">zonemap.h</header>
+ <sizehint>
+ <width>200</width>
+ <height>200</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>1</hordata>
+ <verdata>1</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="XPM.GZ" length="220836">789cc4bd59732acbb2adf97e7fc5b6936fc7cab87492d0433d8010926804089080b27ac88ebe134280b87fbe32638ce19a6beeb99add9d5a662ce6a7c88c708fc6c33d2232f9dffffdb761a7f5b7fffedfffebe3e01fe6e1dfc299bfffdb7f479febf5d7fff3fffedfffe77ffd57319bfd5b3ef9146e8ab77fcbffd7fff5bffe2b5efd2dfc9b974dfecb95525e44e2422ee5c9855ccc65533ebd8bf3b729875b7229ebd2a3a318d7cf3e8d5dfe5f6571dea5c7afe410f7af8bc6eefac9ad18f9357c31cacfdf890b906707ce65915fb83176f9f94731e4095a62c8f3f5252e3afdf7757291fa7d8a71bf7f12e3fe69c6d8c913293fd6cf639b4c7ddfa94f9ef2762e62dcdfa2fe7996ff1e93999fff2246f977ca8ff9d73be04216f537bf729cb40eda777c12177dd7fea1f8caf58fca1759fae87ab6e79331d26b1931dae3b224b3fd3eafc5b8fec8eb13fd5c7e777531d20f7b32f56d04c6eefa774f0c791e28bff47f8ac428ffebded85ddfbe88517fc505b8c0fef14efd0b6cef21f52d509e1af529b2fd9e8664b657be9272dadb6e02571f5532cb3b9fc5688f55518cfe57f900ab3f444b31eaf7ae29c6f5d32399fdd1ff2497907ff799ccf2a38e18e9770fc62effa78cf8caf58fa82dbe29a4bc2517285f6743667d753ec428ef93e517d47e9f625cdf1f8a91df23f52bb0fdb6bcbfc8f15a2f90d91ec7bab1cbefd5d99ba47766216fff815c447fbfb4c9ecafc1b318e9eb0199fdf5b417a3be465931eae775042eb03d8e1199fd79fb48a67efb3e99fa95a762e8b7db8a311e7b336357dedd0bb8c8fa3ffb648ea7cd5c8cfc8e2cbfc8fc87f7c6eefee731f88af662ccf2afae50bf634f8cf4418e7c8bf4b91b0f496f65fdeef364d6e7ec400ec1bb5bf1b5d32f5c830b6cdf55498cfa0eb262d46fdeae477d2c9be2926bef498e2cfbfc2a467ecd8bb1d3ffe5598cfade7e92695f170f62dc7ff4c490c7ff3276f21cb662c817eec9acff9aee677f6aec8cd1ff250fed41bd2c867ccd1e58e321781723bfcbabb1cb2f7b12633ce47c63679fe603b2fa6b20863eed2299f3fbfc057cc5f2f76fe42b8ce7f1907ccbfed42247485fa2fd6ef325b4d7eb52ec872e7f31f51d42bedb02e7abcbb318fd677c11431fbf452ea2fe665b31daa3d7155f3b1eb7c5a89fc998ccf17a1f89519fb58618f9573fc590d75f1abbfc1f4e62c8bb7e11df165d7ed287ed9fff12b37f493fd647e1d118e369042e72fcdec762dcffd03646ff7c27d3bf6bb4c4283f5714e3feac5dcff1bb13439f0af52fd29e6f2b62ce376763cc5f3d31fa6bffc518f3cf5a8cf2ee2c3fe87fdf21d37eeda53fc7d3b96aecd2fb3531f2ab2dc0eabfc7bc31fc939218f9ed8de91fde18bbfc3edfc8579cef5a62da8b1cf916e9eba518e9f7ec1fc9f8807da53cd7b7b0e74d967793a37d873dba2d91974e9f424ef351ee0e2c7b38fe22b3bdf22d31fafbfc22be75e36fb323b3fe274f628caffb1e59e373658cf1d414a33c7f61ecd2bf1ec5287fb314633cec299ffaebcbbd18e575dec5cccf23d3befb6731eba320863cab1732fbdf626fecda7f7d25a6fdd818bbfcfa1f62c8b31818bbf4e1b318f59fdd92d55f2f629457cd89515ed03486bd2a8b51de970f56ff3dec8c317e4a62e4df198b917f3f34c6789e8a39ffb1bca43fbbfbcbaf62e457dc88694f1662dcdf7e23df223dbb16a37e3e1fc811f27fa988391f37c490b799055fe738be57c6eefade0d99e3affa64ecd2eb7932e7a3cdd418f395f2e7f83c3e19bbfb47ecafd71c9fe399b1bbbf5e13e3fe11fbd74d0ee9a79e98f690fade50de25fa5f321f603c0c2fe2921b6fe793d8c77c31100791ab9f2999e3697c3476f767ba62f4c7cca331d2db62e437e1fd45cdaf6763d77e83b118e5f9cfc6c86f224679a33b63971e0562ccf7719dccf925c888517ef7c1d8a537d762d8ab7841e6f89decc4e86f8b9518f9554fc62e7d9b17439fe6bb18f2175ac64efed72b31ecd52514a37df60d32c7efaa20863ce70f31e4d9bd1a43de9298f659f2b3fd96185f361fe52fc6b0876b31c6636b650c7b722d46f95bb6b7c6f7c78d18f9750a62c853a1fec9fc85f58a8198f14f598cf20f4d63979f7f1053ffa5b14b2fb3fe641f4e2531e381ba31e2b7bd18e5bf9d8c919f2f663cb53576e9ef3931e429d8f590675704cbfebc1f8d5df9ef1331ca7fef1ba3bd59dfb24fb5b531fcc90731f22fb3bdae599f77436397df3dc7a3eccd7a21a6bdbf17633c3e4462f49f0ae54bec11e2c71b31eedf5d89517ed41523bfda1799fe7ef149ccf58dbc31e623d66f89f670332353df8cabcf624ef627d304cb5e3c8ec5811b5fc32199fe4bcb1343bfe1abb1bb7f742546fea3aa38bc725c3176e9f72a8ff6e1fc2986fe8b6731ed5bd118eb3d2d31ec43612b86fc930f31caafeb7ada87cd468cfed8ac18bbf4ee488cf2a3508cf21a0531ec6b9007cb1e043963f847cf629417978d31fe2331ed37e54fec03e6e32f31fd938cb1bbbf5210335e507eb4276fc6b09f31f595fda8768c5d7e4f9e18f9b5b3c6f02fba64da83cf8231c6f3b598f2b68c311f283fda83d39331fc61e6277b305b8b51defad618f3d94e8cf2f63d6397fe7625467945df18fad4c8b4cff3be98f167c918f1f1b598eb056d63a46fc5282f627b5f331e69f48c5d798d8a18e50d76c698af2c1de5ad2363ac8f497edaa7ea8d18f9dd53be1bd667361623fd301263becfefc4e82ff7d447f627ba1323bfe154ccf9a16f0cfff54b8cf19d3f8b31be6ab44f37f40feb0f62caa7f26e717dd113633c360332ed75f1d118fea5f4e3fcd6b812737e57fd44187ffb15b844fbfd702346fd36698f4ab4bf8f0531e793580c799f395e4b6cffe1814cffb6037bebcb3f5a6ec8f44f964731f25b3c8961ef6a2fe02bfa8b8b9698eb757563a7dfa426e6fac84c8cf6def68c5d7f187d91d9dfb77d63f43f4f8cf2efb3c6aebcbedd8ff2e67931cafbb4fc505e7b4d66ff6e9dc418af7e594cff2d678cf9f355ccfabf18bbf4fa500c79a662daaf73490c7d1f3bc6981f76628ceffed918f6682ca6fdcd19a3ff5b79d0dfbf13a33dc377b0ec59e7468cf28e6b6357de692b46799f763debdfae67bcc3fa90bd9b94c4286fd33346fb0ec528fffdda18feeebd18e53f7d89d19ef94f32edd97e2c4679ab9331e64bc9c3f9e7e1da18f347284679bb8db1d3efae4066fb859fc6eefefc8b98f7bf1bbbfb3f31bff8b297f1b3b1abafaf8398fee83763fe7c12a3bc6345cc78ef468cf243d687fcb946284679fba198eb612731f4eb7a62e47fe6f8be617cfdd21353fe6b31d7ff2231e47d91fcb497cf6f625cfffc29c6f54ddaa712ebeb6e45e6fcf034216b3e72ed7b95bfca46ce3f1b3f92af30ff4c3ec5180fab5bb2e297ba98f62663ecda6fd613737e991bbbf481e587f13f691bbbf25f2f62c69b2f62f8b7f72199e37d267dd87fee3d31caef67c52caf2c46fe830fb0c6737d2ea63f1c8b915faf600c7bd71523bfcb82ccf1bb50feec1ff74fc6b0af0731eab3f3cd287f2d66f9ef6294b710733c4f8bc6589fef8b693f32c62ebdf12a46f92bc9cbf63b7e193b797a3b31fd7fc9cbf60a57648effcac518e3b322a63f3e32c6fee4b318f21c0ec6aefc4a550cf9ea963fe4c9bf8961ff2e1bf00dedf9dda331da672ce6fa69d618fed3a718f294236327cff3448cfac90fc428ffb545a6fdd8dc88399fdf19c3ded7c590e775658c78632ae6fa54d718f1a49547ff91f5237fae5531c6fef78b18f2bcbd19633e6e8821cf8be507791eefc5ac9fa5b19327d713a37e3e9b64dab353518cf29f7d63d847c9c3fef261d7a3fc07f61ff9877151ccfaa47eb2879db5b1bbbefd24863c837731e43952bf12ebeb59e5d1dfafefc448af703cdd529ea1f34fae7cad5f16cac6ae3e4e186fbef63b1f037211e943d8b3c45f427f1aeec488e7c71531ec793e43a63f1d6fc48c9f4762d8f75cde18f6f54d8cf8fdb162ecd26b4d31e70f8c8fc4bf613c70670c79d762f4c76a568cfca65762e4b76a18c729cf7d32c747b32c467dd6d7c6580ff2c4b00f87a118f2bd3e1b637c7e89215f6360ecd2572331ea672ef9af503f8b83b14b7fb1f220ff94f529fb3b51791c1fd5400c793b4fc6586f517dd2debec6c64ebeeaad18f29f25cf2de4dbb2fd656fcf7b63579fd38b18f5592d1ba37f1ec5902f181a23fd2c867cedb1b1936f9f11a3fe16ecbfb2bf93be98f1455b0c796adfeccadbedc59067766decd2975762c8336b183b79165f62b4effb8d18e321df3376f2166a62d4e794fac97eafbac6384f9017a3be1f8bc6f0bf6fc5d0efc3eea77e6731fb6fce18fed38318fab50231f4c95afe90f7783176fa5ceec9b467ad500cf94fb118f25feac6f08f3ec4dcdf8c8ce1afa83cf6e77ad3d8a537d47eecaf5bbb9ff3b5da8ffedef3540c7d6a4b32e7878bca63ff8e9ac68857aa62c81b6c8c317fcfc45c5fb5eb59df9f62d477e5510c793fd93f35ff349ec5a8dfed9798f349410c799f6f8de1ff0762c8fb7e67ece4f9b0fb216f8efa6bfde36d2846799ff7c6f0bfea6294ffd533c67e41438cf21a2f64add75f89e9bfb48cd13fec7afa9b4d63cce7b4a725b6d733ede92ded418de3f196fa3429ef2de7dbb9f3afaff3852cc67324e67e593e47e67ed5b04fe6fc5bb936c67ac42bb8c8fc864d32e7df684fe67a75b56a0c7fae2fc6f54103acf5a071991c613e58eec08a2fee1fc5b03ff737c6aeffe70662f4ffea511cbbfcf20fe2c9b52b4fd7737eabf5c4a88fe9b5b14bbfbf13a3fc59d7d8951f4dc5283f776becd2979118f3f773ded8c937d88863275fa6638c742b1ff2df0764da8ffb9131fcc95731c6e36665ecf479cc89a1effcc9d8a5676a62e85bb5fca16f752886beed8131fc15b517fdad85c90b7ddf2c7fe8b3527bd2de743c31f45b3d1bbb742f2b867ee7576327ffb42a66bcd93746ff95fef4efbc0f63277fe524a6ff3213439fb7a618ed3565fd68be1e5dc45c6f2b88b9fe7934c6f9bba998fe83e5477d8b62e8eb5d1bc3ffda8ba16ffbddd8a57b563ef4dbc762b457ff534cfdd85e9a8fe32731e5df1a3bf9b6c6943f3276e987ba98f1f0c2d8c9773c8bb9defa620c7fe44d8cf6f237c64efe9631daaba8fae0785bdc1abbfe77c7fea0f97c951743df554f0c7d2f0d63a74fa8f6e0f87b2f19bbf4aeda93e3efd9ee87be33d5a7e6f7b531faaf950ffdcaa198facd8c5dfa4cf5cbf1f6207d38ff871f629eb72d18bbf4f9ab98ed7b3676faac3b62e8bbfd6697feaefae578dc59799c6fd43e1c7f0f8f62fa2fea8f1c6faf596397fe3e16a3fdb607b0fc85cb5c0cfd5a37c6380f711443bf46c318e7453fc4d0efe3d518f6a82b867eef5963a74f6e21467be6fa62e8f769d7737e90fc5adfb81863fd50d7d3ff58bd1a63bff045ccf3f8beb193b75516733fe69b5dfa5b550c7dc61b31c6d785fd53fe4aa323863c77256397fe2179395e1eed7ec6e7d762947fbc13a33fbc7c8a517ef662ecea6f7345667f0ed49e8ad7dac658ef903eeccf7ecfd895ff247dd87f2f0531db8ff2dc72fd7c743086ff7f25e6f996b331d6d32d9dfbd33563eccf64c4f4b7585fb73a5f3711f3fccede18e70b8b62e49fa3fdbde5fa79c513f37986b998ebf10b63f8a32a8fedfbccf6b9657d6f385e7dfa9bf74d63975e647f0af2e0bcf3a7affd02cf1fe4eb62b4ef06f2fa3a1ff6be10a33f0e46c6eefece5c8cf6293f91b9df38ee8bb91fb8045ff13c5a2f4fe67c7d0f797df98ff70531c6e77d8dccf965f22246baf765ecd2dfd662d8dfcc590cff2df32186bff3726b3c71f989393fdc17c55c7ff78de19f3d8b519f998531cecf2cc590d77f3086be5762c85bf58c9dbcf70331fdd19d31f4998ba18f7767ecf499bd91391f9c6ac638af771143bfcc9331f48bc4d4cf37867fa6fae57c31088ca15f570cfdee87c64efed5b598fa79c6d0cfe4837ebec90ffd0eb027b65fd6bd16a33f7a2531f48fdf8db19ee68ba17fab6decd2cf4731fdd3d818f14e530cfd5b9fc6a89f8d18fa2f4363c457961ff5bf3346bc712586fe01fbaffcbfd6d118e7117262faeb1563f8af7931fdf5a1319ef7b0eb511fc1ab31fc5be9cbf969723676fa7a563ec7e79531d26fc4a88fc9bdb1d3b75f15a33e9acfc6f037381ee40f7edd183bfda696cef3753963f817d28ffea0bf3676fa15240fc7fb7a2786bee599b1d3e7a8f6e4f85ecc8d5d7a57f5cbf9f0291043fee3d218fb731d31e4df378da1df8b18f247cfc64efeca560cf93f4263a4ab7f713c1f8fc658efec8ba1cf8767ecd2fd9518ed377b3446fb487f8ee715f591bf57a918c35fbd1243dfa7ac31d6e75ec5d0775b3476fa743fc4dc7fb5fb793e2410439fd5d8d8e9f33115d35fbf3776faecd87ef20f271b63cce77d31cfcf7e33d68f5a62ae9f8e8ce1efa83eb47e1a19bbf4e68b18fa772fc6b05f763ff47fde8bd19e6f0731f47ffb32c67a7153cc788cfd49fee649f547ff72a3fae3f88bdf8c115f4ec4d0c7df1a63bd6925863e8f9eb1d3677c27a63e2763977e772b46ff7d793476fabcaa7d381ebb0563d863da07f35f553f1c9fb1a543bfbb8bb1937fa3fec8f179ae18c39f55ffe1f8fcb2fce83fa97d383ef3ea2f1c6f35d68ffcd5cec9d8c9b7bc1143bef3c418e3e9494cfb5733c6f9db0f31e45b5b79a8cf915d8ffaacefc590ef8ef3abfcdffd42ccf3465d639c3f398a21eff3bd31e21fc9c3feff7230c679a48a18f595b5fb21efa3e4a37f1d5f89215f762a66bc5d35c67e82ca677feede18633ea57dbee57e6f2332c6fea9e461fcd3fa32463ca6fcd99f3a7d31e3db9d18fdfb8bf6d3677cf37225663c7a234679839931d6a375bdcff3596c4f3fe6fe09fdcf20cfe78356c6989fdec53cff4afd826bdc7f6c8a717f3143f6915ea07d0e59de4b4bccf354ae7fde140a3c6f1dafc18a27c64fc6f037b6e422c74b955cc2787a3883751ed1cf80e54f67b662aed7de1b3bffb1f946e678ed1e8d5dfebe27e67eb05d4f7ff8da18fefe49ccf82527a6ffdb37867ffb29867fe33d8821efee60ece49de4c15acfdcecc5a8af7d470c79b63531e41996c590a7d617331e7b3576f254c762c893b7fc204ffb83ccf968198821cf6c24467d457363c407d762c837793446fa8b18f5e54562c6074331e5b3fb21dfb04ed6788fc5b4975331c6e340f9717eda958c31df16c4e80fcb6fc6faa8cae7fc346f183b7d1ed43e9c9fc6563ef4cde5c45c2ff5c5689f8f8998faf5c85a9fff32c6faa8e467ff5e6d8ce11fa97ed9bf7b4363e823f9d8df3b3b63ac5fcfc4d027affa657fafd8f5907fdd1543fe39e5977f383b8ab91eb13176fa7c3d89793eae25e6fec2de18fb495931e47f3a18637ff924a6bf1b19c33ffa14439f4f9307fdb17511a33f76696fe4efc58fc6f0df953fe7b7695f0c7d1e0ac6183f4531d7a7afc41ccf763de48bdec99cef9e0ac6d8ef577d71be9b0cc5dc2f981863bdf54e4c7f6d61ece42babbd381e4e5fc6e83f963fe47d2919e3fc89e50ff91bba5ee7eb1ec47c1e73618cfd8e9198f1d2d118ebe5ea2fecffadb3b193afaff2b5deb833c6f904e9c3fe9d7d31c67e00eb53eb8db97b31f72ffa62c8bb7a1343dec7a1b14b1f5f8bd91f2c1df2be5bfe90b7f821e6fafd4accf5ed8918f53ba81bc3beb37ee5af2d6a62eee75b3ae41f7c89e9bf2c8d719ee9564cfbb936c6fa63560cf99fba62c87f67ccf5b29d31f42b88a1cf59f9b1bfc73d63f82b1d31cfbb4f8cd17f6231cfdf968db17f24fdb47ffb4c66ffdc287ff6cf8f6fc6790dbb9efeed8731ce178ec5c8ff692666fd70be97ff1766c55c6f7f34c6fc66ccf78b648c711ea32c863c5f9c6fb47efc5917c3bf8bee8d71bef241ccf39e7b63f8bb5b31cba7bfe6d33f0c5fc5c87fd43386ff6ad723ff5a854c7ff2fe5dccf74f7c1843be404c79289fd6c3bfc662dc5f8b8de15fefc4287f78678cf579b667e20fe3bcffad31e45b8af93c41608cf66988f93c23fb8bfce78bf263fdb4aac6b0dfecff01eba3bd11f33c6ac518f549f943ca538bc4283f5b15a3bd5e381f862cff79610cfdd9bef2efebf762e6ff6e8cf3a9b48f11ebbfb210b3fd56c6d8bfa07f1851de16fc9f40cf671e2e64ee2fcc72623e3f9a3776f622467b047a9e69d41463bc953b628cb7d950cc78b860ecf2fbba8839ff62fe09142f54f262fa53960e7977a8ef40e709ca1731f79b3d31cfd754c4f0979edec8b4bf5f0d31ca3f18339e2a1abbf4412ca63e2732edddf051ccf3634363777f3d2b46feaba918f22e3d63f857be18f3cda22386bfd46b8ba15f7541a6bdcc758db11e3013f3f9b01b31fb83e4a3bfbafc3476f2b4fb62f6976b63977eda8921df51f5c3786cd43176f2be515ef9a7872731fdb78198fd2b2fe6fa6b60ecca5f5dc4906f5e1073bdfc5dccf5d59d31d6cf7362c8b7bb27eb794a95cffe135e8b21efae25e6f31a7563f81f2b31e47fed1863fdf8538cfa0c6fc43c7f3d31c6f923e9cbf57edfca833ecf3532e7ebd3544c7f6f6e0c7ffa20a6ffd13676f2bf8562aeefbf19c31fb4fcb9be5830c6f987ad98e795d51ef45ff77b63277f4ef5c3fe5e3079d09f9aca9ffec2e224867e6f5d63ac2f8ec4d4cfd2795e58fd91f667d234c67a86ea8be3e1f52c663c7a30c679fdaa98e7e54ac64e9ff64c8cf67b817f1ce879829d31f73b1662e8170f8dd1bef762e8f7b932c6f3f33331edeb9731d68f6fc568bf879a31f4198b19af8e8c11cf9ec4d0275b3476fa76389eb5de59e889b91f1719e3f9b28c98fef2ad319eafec8b391f7d33eced9d98fbed8131e2938e98fa9a7cd0efa966ecf46be4c41c8f961ff43d5f91e94f8f545ff49f0b96cef3a85531cf23d9f5d06f751043bfdec018eda9fea0f5feb531da53fd81e36f581243bffeab18f27faa3ef4bc56cb18cfd77c8a795ebf680cfb3111733faa678c7840fd8fe3ef2536867d947e1c6f4f8f62c8fb7a30c6fac2458cf668523f9fef276a5e89b9df742366fc712de679b1ac31e20bcb8feb4347633c7fd015f3bcc7ded8c9dfea8bb9feee89a1cf82eda378e0f0628cfd154be7f9fb9231f683a40fc7c7a0608cfa0ec55c9f957e1c0f3dda6bc513355dcff8615331863c65319fa7bd18bbf2da6731e469f58c71fe99f3ade28f42648cf85ff2c58c1f1e8cb17f732be6f382cf623ebf583576e5bdb27cc52f8d1b31e38bbe31e2b72731df57f2688cfe5315335e7d37863ffa4156bcf0698cfe561723fffdab31e29f9698fbf3b4ef8a67ee1bc688873a62be8f6426c6fd7bda03c5371fe490fad5ee8df1bcdbbb98ef8bca19633f55d753bffbbd31e2a5a998cf9b4ec45c7f3266feac0fc54be76763777ff54acce7693f8db1df62d723bf06fd03c557e79698ed7130467d6fc49c8ff262eeb7b3be156fd53e8ca1ef59ccfae4f850fc1586c6e8bfae7e4b05bdef21f0c08a5f66af62cc47ad67639c8fbd256bfcbe8879bee2ced85d9f3f92399f94951fe78fe1580c7b34a819e37c7c48a67d7edb8a517e67224679870fb09d2f35c6f587d818fb1d2b31e46f54c590a77b25867ddf505fadff56e7629e4f6e89b9dfb51723ffb7ba31e2ab408cf25a3531e6c3b7bc31d6a7253ff74b961963172f2cd97ef2b7834f31df0ffb24e6f37d2531e47da919239eb574eefff8c638cf771043fe51d9d8a50feec58c7f4ec64e9f99da87f3ffbc6a8cf8c2ca837ef91b32e7fba331f4db14c43c8fa0fa627f99178db1fe5d1143bffec518e72f4662e8d7537b73be5f34c4907ffccd4efef2408cf67a0e8d9d3e5f6c7fad3f9f2662e853be32c6fac7548cf61b6e8c11ff95c5d07763f943df7a45ccfdf76b63ec6ff5c43c8f69e5419fd149cce77f3ac64e9f40f2d21fd8dd1943fe9c98effb8bc48c577bc6d81f2e8ab91f373286ff3513a37d0ab131d2f762b4d7e3c0d8e9f3d21733fe3e88a15f2cf9399e9aba9ee3691e1be3f993b618fa2d6bc6787e6f2ba6fddc1b63fd49edcff1f6fc688cf36a9f62e89b0b8cb1befe2586beaf3b638ca7b318fdf5f4608cf1d81443ff3ec797fce9eacc18cf47a93de84f6faf8d11afbe8b799ead668cfa507fd07a4fdb18e7fdd55e1c7f4f1fc68827d47f381e2fea2f1c8f17bb1ffa4d694fe57fc75531e6db75cd18cfb3f7c55c6f3919237e1a88a1ff62648cf67c10f379efb5b14b0f8f62e897ad1b3bfd1e8dd17e4dda0f9fef17f8ba15439faae4a5bffed236c67eb2f4e7f8dc9c8d713e6a28e6f922c9cbf1f9b61743beec9d98eb27d762c6a3eceff2d78307639c9f1b8be93ff78db1dfa1fc7dcee779639cf75c89f9fe09da2bf9eff5c018fea0e493ff9e37c6fa4543ccf79f548db17fd613f3f9ab2f633c1fcff947fefa7d5dcc78b5668c78a522467997a1b14b2f1cc5b4f71cfff2e7ab5b31cffb948d319f34c5283f9b35c6f87d17f37d6b6c1ff9f3e19398fb892f62be6f47e5b33eabaccf90fa9ee7c6789e6626e6f9b6b531dabb22c678a8b17f87d4ef60ccf5a8d818fb811331df8f427f28647f7bac8939bfd27f927f1ef68c71fee95dcce743a98ffceff642ccf7b7b9fd8a52a0f3451bdc1fc83f1e3c9275fe64648ce72d9ec57c1ff14a8cfa9864c95adf288a917f1018c3ffd6fdb49f6d95cff5bf9c31c66b07f565ebe1cb3b31d7bf6fc4f41f66c6785f8531fdc18631de173a27737e3f0cc4cc6f698cf52e4f8cfc56763ffc8dbad2391f6f32629e2fae89f9bee7b131fc8b4f31caeb34c5286f3c32867fa4f2395f5eec7aca5322b37dc62b31c66f363486bdb888198f497fb6e7d7560c790e960e795ea50fe7bfc6464c7ffa564c7fe6cbd8c9ebb3ffc89f6c8e8cd13e7d31ea2fca1863bd7d2e86bc77964e7fb22b86fcfb6f467d6fc53c8fb316733ddaf2633cf029863ee5b631eadf27eb7d026731f777242fe7b7c137231ecc89393eed7ee83ba988a16ffc618c78a82a86bef3b131c6474d8cf60a4c5ee8f7a0fa60ff8ed83fe46f6627c6983fca62be7fe44b4c7fe3c118f19cea9ffe656e6f8cf5f3500cf9dfe6c6388f782f86fcbd3b63c4a7d29fe3a37d10a3bd06d7c64ebf91cae378e9aabe395e96556327ff7625867e95a3319e7f91fe1c3fdb9cb193bfa7fae6782a4c8cb1ffb511733dd7e4e1f3114331fa676f6decd2d74d31f47db574e85b833f60ebbb8f5331f43d6cc4d0e7b41473fee81ac33fce8b39be26c62e7db71073ff676bece41d5e89a1cf283076e9679397ed773176fae458df7a9e31ae89e94fe78c111f8562ae47583adaf743e5697ec88aa9ffca18fdd5cae77ec2c218cfef34c5d03fdb30463cabfaa4bfda36f9a0fff84d0cfd1f383fcb3f1d3d89217f311673bda9688cf5abb298f6236b8cfd6d4fcce739d87ffc98bf679611733dfc51ccfdc6a398fb350d63945f11f3fc59688cfec6f2e5bf6e2e62fa8747639cff7f1573be6d88f9fe848918fa9d387ee48fb69ac6781f512046790f96cef30da118faf5b7c6aefc665eccf541da8f40fb03928fed776c8b39ff293fd66fdf17e3feb3ea87f5fdd531c6f3b14f62e4978bc4b4c7ec6f5aef6ecdc57c7f6b20e6f83889b95feb8b31fe5ee95fca3f3e3d8bf93c84f267fd0d9662e4f7bc11f379da1d99f5957d12b3fdbf8cf1bc9be465bc753f11b37d551eeb2bbc33c6fe16fb83fce726db27627fb8e37c1fb37e3a6e3cde16e52f2fe762eeef2fc5d0ef6cd743bfd62b59fe7153ccf5e7ac18f662f8cdf03f1a62aecf7a60f9bbbd8a98f1fa8cacf76d348d619fc662dcef378c315fe5c428af51236b3ff545ccf5ea9398e7b32764ce978d92319e57d98b215f253486bf321423ff75460c791e7c31ca7b88c15aaffc5a89b91e9215439ed1d018f67e2c863c9f7363f8934731d74b06c658ef33e6796a9307f24691b16b9f49474cfff864ecf439e97afa831f4363f43fddaff7d72e8d61cf7762fa83d287f351e55dcce7876f8c9d7cf1590cf9a29931d68f3fc9f4ffbeeac6587fbb16f3f99a92b14bdfa8bee80ff626c6882f9a62c8ffe219233d23e6f3d1763ffa7f640cfd661563ac37aafef4fc7bcb18cf47287fae371e8b62be5ff2de18f19cf4637fefbe1a23be7a11b33d1e8de1ff493f8efff597b19377ef8ba9cfb331e6eb8618fa6c3e8d713e8ef561e7779fc5d0a77830863e6b31f4799f1be3f9aaa198fed1d118f173530c7d77df8cf78184623e0fdc3276fa546231c77bd618f391c9cff74fcd8c9dbead2959cf47bc89b9df9635863f178919efbe1a23feb0fb21effbc818fef7bb98fb317363bcdf53fa69ffec9b9dbc15b6afd6232b3d31d71f5bc6381f22fde8ef6d3c6397be1e8bb99eff6a0c7f2827a67db5f2b9be2a7d7daeaf9e8d118fa8be7dc6cb260ff46d5afed0b7fb62ecf49d2a9dfe4db41543ffb6fa0bfd99f6a731f4bf88a16fe1430c7d3f06c64e9fb5e50f7ddfdf8c5dfad3b518fa764ac6d89f517f8ba1df52fac7d0afd33086fdee83b5de5a3988b9de3c33c6f3266531d7977762b46fff680c7f371073fdc3eee77ad242ccf8ecca18e99f62e87b588979fe93fd47fe70bf24867ca78298cf371e8cb11f581733dec81ba37f49de6bc85357f9d78c7fd91e818ff3808357319f8fea8a79de666b8cf8f646ccfda192b193afa1f2385efa6a2f8e97fabb31ce83d37e6abd395b33463cb214f3798d9118e58fde8d713e4af2d03fafb0bee47f3f648ce1af9ec5f4ef3d63bcbfea24e6fb66be19cfbf733cc83f6fbd1be3bcd0a398fb6d0d63c407763dca0fa99ffcf5a6e4657b14cec6580fa37d0819df148df97e9f9298bfc7447b2cfffc4bccfd85c1404cff9dfd39a23c0f185fa1fce543d918eb0f4f628cdf21ec4128ff39b317d33faa1823bd21a6ff60e9183fbd1e99f3c7ebad98fe7dcb18f94dc52c2f30c6fad6418cf2326b63d853ea277f3c3716a3bcc2dc18e53d88595ed518eba10532fd995d478cf11084629477f934c6fc7e14a3fce3abb1cb3ffb2846f979cb9fcfe3327ff9e38da2319eff9b88b95ed83346fcf221a67ff86c8c78aa20e6797d5f8cf2f76d63f84fca8ffef7e39598f6e2cdd895bf1c8a195f05c6787ee241ccf7994b3eb6ffd38bb1936f9317b3bf9d8cd1fe3b32fdeb93ea8ffef5e7cc18f567e990afbc30c6fb764662d6572c867cdebd31fa534e4cf9d6c64ebef53599fe74f54b4cff782be6798b37633cdf501533de8d8d31bf1fc4a8cfd1c018fbef0d31fb7bd118cf877b628eaf8231ceffb0bee52f57c662c667df8cf86621e6f3cf45638c9fb598f1c08331cebb95c5d0675a3746fcb213b33d4263b4475f4c7d4c3ee8d3d1f53a1ffb658cf5d02b31dfe73935c67a5e5b4cffea534c7ff26c0c7deec4d0e7c337c6f33d5d319fe79818bb743f12b37f1d8c9d3e47da57f9c72fba9efef13c23467b1446629e477e31c6fb8aaa62cafb600c79541ff47f5775638c57c947ffd7eb193b7937aa3ffa07e3a531fc13e943ffe0e1c518f62716d3df0d8c315e9ec4dccfce19e3fd458f62bebfe8c118f1a6fa6b0cfdba763df4dbcdc4d4cfe4837e31e593ff7bbc1643dfeabd98cf4f3f18637da321e6feec8bb193bf781643bffac118fe6557cce715d6c6881f4d3eee3f583adf376df9f17d1a2763d833da07ad0f3f491efa47e5b531cefb3d8ae99f558da1afa573ffd5f283bee73b31f4edd48da16f45ccfeda13f3fc5fc7d8c9df7d27d35f9b6e8d619f55dff49fab0363f4cf4f31cff7fbc6783f84da53e3ad610c7b118ab99ef62146fb4cd45fe80f9e6762c873dc18431eb50fc7cb73d718f3a1f4e7786959fe3cbfcbfce56f9727629457b7743effbf14f379afbdb1cbaf45fb2f7ffa5015f37d8a96cef7694cc53c0fbd22b37d7aafc6389ff324a6bdbb21b3be0a2731f72b32c68807d8bfe45f577762969715f3fd87ac2fad8f5796629e47a4bf27ffbb9d1323bd497b16317eda71bed5fa7ac1d58f5fb4f7ede48db11e1790393f7befc62ebd7f05d6fb681ecbc698df7d31d78beec89cbf86b762beefa0640cffe1468cfc875b63bc6ff3410c79f6cf64bdaf53f2d01fef47c6789f654bccf5f63199fe4ea56c8cf396ba9ffaafce609d87290cc57c7ea82ba63fbe3286bf7010d37f7817d37fb0eb595e9bacf3f65b31f7038ac638cf3b10d31fff3046792d31fdb3d018e93331e5d918633f4ae5ebf735243ffddbdec218f654f2b03d5eb2c628af2ea63cb131d2cb62caf365ece469a87cfab7f54f31eaebe9410cf9366b63973eb5fbe9ffdd19bbf21f553ff267ef8d11df4a1e8e97b79d31ce033c81ed7d230331e46d2cc5b06fedae31f6178e629e8fad1a43fe7b31e40dda623e6fa7ebe95f5ecec6382ff229e6f9f88231e2bbb118e51f1f8c117f5dc48cafe662beefbf668ce7338d694f3cb27e6fe856ccf7010d8c11df5f8b21cf3434c67aeb49ccf3e09131d68f1b62aea7aa3e144f7db393ef8ef651cf274e46629e2f53fb319e3a6d8cf1be949d98ed171ac37e4cc5f49f5e8c313fefc58c3f86c6b0b76a5fc5535963f84f64c54beb4731e47ddf8921dfe3a731ce279fc57cff71c618fef9bd98e3e3cd18e3f7454cf946c64ebe90edabf799ec6b62fe3e4a57ccf8efda18f19fca63ff6dc6c6b0877762ae0f748c715eb12de67a68d518f56bf9b3fe0363e8f72aa67e2563a75f41f5457fad2179e8afbdd78d319ea41ffdb5d69331e2d9b998f6aa6d8cf9d3ae67bc5433467a53ccfede31c679348e0fc547a3ad98fe5edf18cfd3aa3fd1dfeb748ce12f1fc45c1fff30c6fa554eccfda97b63c4df7b31edc9b331e2a78218fa4c7d63a74f96f5a5f5fee24accf32bf7c6f00fbfc47cbfc8de18fef449ccf3aa763fcf67f68d616f3c31dfaf66f951fe400cf91f8fc64efe33eb47f14f6d28e6ef53de1a23fe298a793e66668cf6cc88b99ffd608cf315963ff7aff7c6680fbb1efa0cac3ce8737813733d8ff657f14b7d6a8cf396af62ce3f6d31d717d55eecef03d527fb77376fecca7fb5f2e8cfd27e28beb95b1ac37fbe11d39fd989b99eb710d31fac8bd15e05bb9ff11ec75fc8f3e34d63febef49b319eef2c89f97cd146cc78a029e6f319b7c64ede1ae5d5f9a0afac98f19cca677f795c1b637faf2de6fb0aaec45c0fce1be33c8be4e5fb906a2731ec7753f2f2f982e151ccf3d2ef62c6473762ee7f5b3a7fef94f383bdaf742be6fb878ac678beda13f33cedd818cf4394c5dcdf9919bbf2ce3d31e4b9b3fcb97fa5faa43d7bb2fcd11f8ab4ef7a9fd2e5460c799f76c62e7d3a17f3f7cd7bc678bfedbd98f16cdd18cf1755c47cff84678c789cf389e2c7e6c018cf8f9ec58c5ff3c6eefe5e53ccfa9818c35eb2ff446cffc154ccf78744c678fe48f971bde3f322a6ff477b1eb33e5a77c638dfdd11f3f94fdaa398f2b795cefdcbf2ad31f6df0231fb23db2366bcfc7c34c6fbfe7c31ebef608ce79b38de268aafdfc4bc9ef74ff4feae9531ceeb35c5bcde3346f9b48f13ca5f30e6fea7f29ff079ab9c98cfb340ff50ef73babb17f33ce097b1b35ff73e99fea83716c3de2e2d9defcb7916733f0ee3c5f6f75ef362dcbf681be3fcc29798cf23b23cc5b3c19b98e7797d31f29b6cc9fa3d9c9d18f71f0762c6035d63c46f924fe7d5593f8a1f3b67319f17d91be3bcca8398e7350a62c8f7fa668cf5ce8698ef179a18bbf2df597f8af73e32c68827dec5d0a75c36c679e6ba98eb335963c45f961fcfafbf92b5df3612f37cfd8db12bbf2ff9e84f3f2c8c11afeec5906f7e67ecca1f3c8bd99f0ec638bf23f9e94f3ff6c97c5fe4a824e6fbb90ec6989f743fe3c359418cf20f1531e3bf3763b48fea57f160c3d8b5cfe72799fbb52f4b31f707aac638cf2879f47c4f688cf30eaa2ff69f782766fd7c19e379a40f31cf37158df1be6cacefd8fe58211443be6e648ce7f73362b6e7d418ed792de67a52de18fbd76f62c85bf5c5acbfb231d6433664bd7ffe51cce7b7be19fb952531fd918c31d6974662aeeff8c62ebd1288b93fdf37c6fef88398fb61a131d67fa4aff6c376c6389fc9fea4f363eb9e18fa3caec4fc7dc8b331f6a76b62c81fc4c62e3d527bd2ff3d3d1ae3bc9431cfc37d18c31e75c5fc7d9a8131cec3a97ee9ef7cbd8a19efb4c5f4776ec490a7db3386bd57ff617c7627fde81f051d63acff90edfc55dd18f1fd488cfadb4f8d113f66c5dcdfe81ba37e8d21ef9d95c7f5b19e31eaeb45ccf67e36c67933f62fc55b5f6f629edf7832c6f9a39c18f21f8ec688b76a629e2751f98cbf72a131de673016f3bca631df7fb833c6ef2f713eb3fda64731f757a4bf9e67991a43bfae98eb5b9fc658bf5a8b51dff99918f296ed7e3eff7627e6f9f51399fef84bd918ed6fcce7f54ac6587fa888b9dfa4fec0fe5a5f1ac35eb07e159f15dfc5b047b92b31fdc9bab12beffe590c790a5963d8db9218f28c2d3feee7d29ee8bc57f42ae6fedfbb31fcf7ae98bf7f75658cf72b2cc55caf647f533c767732c6f3ea07317f0f6f2de6f3b54fc64ebee2a798cfa7d78c112f4662ae2f778db11e6fe95c9f933c8ce79e1a62beef696d8cf761cdc494f72c86bca79531f6bf2d3fc8d31c1ae3f904b53fedd13de7577bffd2de18f1ed45ccdf5f3f8879be7b648cf1d514f3f7bb1662be0fa4668cfeb21473ffdde4e1fbc22d9dfb3d9c3ff5fea7fb85317eeff043ccf71d0cc4fcfdf42b633c3f5f12f37c4ad918e74b252ffbdfe7c118f1f944cce74bde8ce13f4fc5a8ef06e7b788eb07c38a18f23c7b62c8f3b132863f7027e679d8ba31c64b5b4c7f4cf5a5fe726b8cf77b583a9f0fab19637da42fe6fa2dfb83e2d37ad118e7333b629e876d1ae3fce852ccfeb011d39f65f931dbe7a52be6fe78db18e7874e62fe3e796c8cf50cce1f8a77c317639cdfe578517cbbdf1ae37ce75eccfef126667958bf0827dcdf9ecc8cd1ffca62e4bfec1ba3bd1fc47cbe85f5a97879ba34c6fad8a718f9cda6c6887f55bed603743fd703661363bcff7321667e33633c9f26fdd81f1bdf8cfe217926983f1e4b62fede6cdd18cf4b15c43c9f3e32c679887731cabb3b1abbf216ceff0d6cff785e22eb79d66731c6dbe4c118fbb74532e39f45d3d8dddfd88ab93f7345e67ac0e39d18e9830358f1e87320e6f33f6732fdf3c6d118cf83e87efae7ed480cf97bcfc6aebce71b32e3bb8f7b319f27f0c53c6fd412f3bc94aee77ede712ee67ee39db193ef521673ff682fe67e45df18feaf31dfcf60e5a13e56ef62fa974fc6d82f62fd295e0b0fc64e9edc8718e5ef56c6f02fbec4287f773146bcd012a3fc304766fc55d4f58cb7b237c688072c1dedf7f92ae6fb02fac638ff7525e6fb7aad3cbedf616e8cfd27e94bff32927e8c8f1e2ac678fefd59ccf8f4648cfd979198eb213b633cff64e990675e36c67a96da83f1d04ee5d39fdca97e180fd547c6e8ffd29ffb57fd8d31ce2faa3d190f45944ff1d0bc23e6fb270662c6bb2763ec7f67c53c9ff6628c78f7594c7b5113f3bc6a9bccf97bf726e6f3b313639c6fb474beef626a8cf3cc2b31f4cf1d8d5dfa93a5f3bc26fbafe28dc6a398f1d1ca18e7c90a629ef7d91ba3fc8c18f997d9ff144f043563f8174f62f6ff8231d6dfb662c6173d63ecdf8ec57c9fc09731e247f617c51bef6731d7efaf8d317f8fc57c7ef3cd18fee15cccfdc84f63f85fcf62ae5f35c87cbe23ea89591f5563577e47f2d0bf9b9d8c51fe8798ef635889196f537f7bbfead118fe5f47ccf7b5a83ee8df95df8c71de6222e67a56cb18f1e7528cfac8978d717ea42d46ffa8df8ab9fe3d2333dea8168df1fb2496cef743c462fa677d6327efbe22e6f3472b63d4ef9518f215d91f157fb47662c8f3762de6fb12f662ee67d9fd7c1fc4a398bfbffa648cfabc88f9fca295c7e7171662c85763fd47dc6f6ccc8c9dbc075fccfde858ccfddd7b31cfcb558d317eea628c9f3ac78be281a7ad31ce63aa3e743eb6690cfd1a62949f2f18bbf29a5d31df17630cfb74e27c14b1fdb65363f8f39297f662f46a8cf527fa138a0fea2731cf2f178c112f1fc58cf7bbc658efb0ebb99ec8feaff860d03746fc168ab9be736d8cfdee8998eb6b9c5f141ff46ec57c1ead618cfd5be9c7fa5f79c6b0a7763f9f57667f52bc31681bbbf2de252fc7d37e670c7d1ec47cfebb620c7f5cf5c1f6289e8c61bfd95f15af5cde8cb17eb01373ffbc688cfdcb58ccf8feded8953fff10f3f7a1ec7aee97de89d95fd8de8a77eec6c6aebcc9540c79264b63ac1fd9f56c9f8531e261e9c7f62fb2be140f9d5e8d515e24e6fe6dc618ef97b474eedf7e1863bc97c48c6f69df141f9dbb6296e789a9dfdc18e9d287f1d057de18fd2f2be6fb0f607f22c5471f3159fb7b282f52bc12de1ae37d296531e39b17b2ce2b2fc4dc7fbc33c679bd8618f66bfd618cf843e9fa7dbdaa98ebbd6d63975fef51cc78e6c618cf2b4a7ec62bcdbd98ef435a8af97eb59698fb6b5563eccf305df1c66a21e6f39bbe31ce5fbf93191fbcccc5f4373362fe9e9031cf6b558cf1be3aea277f7eb53686bef762becfb065ecd273763ff2af7c33f2bf2273be7d93fcf4dfbf3662e41f1f8ce1afbe8af93c20fc9b48fe786b2ce6fb25eac6d84f9a8bb93fdc30c67af9a798f1efd918ebe50159fb09c6287ff920e6f34696cedf136c8bb97f7025e6f9e5a231ca63fdcb1f7f9c18e37cb52f667c101a633ebf17f37dc537c6e80fd257e7b9dac6385fb011f3f9a01e99f67e5d12733eac19bbf2e7aa3fb677a52be6f89889517e8dfac8df3e8d8dddfdd5a998fb6173633c8f722f663cdc31c6fa4028867ef52732fda9f845cce7533c31df37da3586bffb21a6ffb81633fecb1ba3fdafc96ccfcf8a31cefbbe89b95fdd32c6feff4accf1d733c6f9d2bd98e7e10664cedf5155ccf7e7778d5d7a55f733be6a8e8d11cfd09ec97fcd4fc4dcffef88f9bc27f3d37af54359ccf8e52ce6f3cd1b63f46f5dcff9ac3d3786bff628c6fd27b69ffcc3d348ccfda0ae31ece58398e74b589ff20f3f3362947f9c8ae9df2c8d719ef94dccf799b2fde40f6e4f62ee57c6c6f05fb662ae3f7d1923dea7fef2ff668198f1c58331c6a7f2577f2b1be37c8ef4d5fa0eedabfcc17324a67f3334467f5279ec4f97bc31cec7593ad7d75f8c5df965cb0fe5dfd1de9bffd734c6fbc20331fdbf8c319e2fec89e98f8c8d5dbaff26e6f3d7efc6f04f5fc5ac0f8e6ff97f9f7b63f8631d31e4890ac6d81f388bf97b6a1563d48f27e6fb42d9bfe40f36543efdc1f7b231ca9f88597ed618ed3312339edf1823feb0f2f87c7f6c8cf1a7fa97bfa8faa7bf18df18c31f36667f691ba3ffdf8af97eb26f863cce1f0fafb41e3ee982e50f4e5b64ad577a64f9631331e6ab59db18ebbbd764ae0f6f7762aed73f1be379f808acf5dde9ad98eb89d762dcefcf8ce19f95c9f4cf025dcff5f8bd27a6bc356377ffec854c7bbedc92b5be3916237d9c07cbbf59ad8c519f3d31fdbf0763f8e71b32edeff4438cfc8a8131ceb38dc4cccfd2b95f3020ebbc8c31f22b7862fa174763ec97ccc9d4f7732de6fb014bc688379ec4c8ef60d7d39f627bca9fb874c45cbfdc89f9bed9404cf9e6c6584f64feb61e772566fdc562fa5f77c6a88f5b31d7c733c6f0bf5ec428bf6de928ff2347a6fdae158c71de6229e6f3353b638c175fcce72336c6380f67f9f3fd4f2fc6184fec3f21edf9742ae67acead31f62b543efdbf97a618e5bd57c53c1ff9618cf7e1b2fe6dfdad2da67f766b8ce7174e62c8139e8d71feae2266bc64e9b40fec4fdaafdf2ec43c3fd413733fec620c7fe041ccf3a22363f4afa198f5f94ed6fa4f5dccf3582d31df477f31863cc63caf903376e921fb83f6e3479fc6585f698851de8bcae7fc1d3f1863fddf18e56df7c6d82fb3fce8ef6f8cb1ff427b2dff2a9e89f97c4cc618f3f38798efe3898de1cfe5c42c8ff2c45cdf19adc49c7f7d31e3ab9e31faeb9d18e59dcbc6f0c7242fdb77712d46ffa94b7ecec775c9c7f9789137c67af5a798ef33b574fa972a8fed7bf7640cffdbeee7fb61d89fe5af0ddec4f43f1f8d719ee95d4c7f6d6fecf25f5c89b9df3131c6783b8a79de93f393fcb5eab3b12beff82e667d148db1df5e1533def68c118f3c8ab99e7d34463cb615f3793df63ff967d140cce71b9bc6583ffd12f379c1b631dadfd2197f978d31bf707e92bf766a89e91f3d1b637d3512f3f7204263f8939f62faf35fc6188f5762c8f3c5f691ffd63b8831fed796cef53e633effe41963bcccc4902f6c19c35eacc5dcaf42fbda7a5ed027d3bff16a64fa675e864cff6bfb0ab6f7ffecc5f47742b2de4f7914f3fcc3454cff2c3676f73f9ec89ccfe24f32e71b1ffdcbd67ffc2732edb57f4be67ce9b5c5d46740667e01fab7ad4f1c1e8df17c455f0c7d2bb7629e57b074eabf20733e297f8979fe60600c7fa32ba6bfd63186fe7332fb4f7f628cfda7bc18e51ddfc4fcbd2b4ba7ffd412f3bcfcd418bf277126d35e545f8dddfdcb2731f22f578de1efa93ef47eca95b1cb7fc2fad67ac5e4464c7f252be6efb7dc1a637c37c4fcfdab9131ced356c55c8fb1fbb95e6be5f17c6840a63db97c89517e5c10d3bfbd37c6f9e39918f9b5258fec4b460c7d87925fefc36f1b637fec45ccf743dd19c39f55fd713ee95d8cb15e2ffdd9fecd0f32fd8b8eea97f349503186ffb516a3fce89bf17ccf52ccf561f677edc7553a629e87ae88d97f1bc6981ff762b667cf18f5abfc68fff35331d70356c6f0afdfc5f4afe7629edfe2f8d0f9bfc70f31cfef066294b7b574d457f9c518f349468cf2cb6731d79b7364d6f7d3ded85d5f577db0be8f4363979ebd16f33c17eda9d663b22d63f8df4b31e48f3b623ebf7436c6faed5accf7a7dd1b637db829e6ef276dc41ccfba9ff3f7312be6fe5e49ccf1f5628cfe9411737df5640cffb22ae6f9094f8cf2df9ec99c9f1b0763ec0fefc58c478ac6f0876331ca7fce19a33d391f6a3ebe3c88f97ccbd418fe822fe6fb91abc6580f1b88e9df5a7e7c3fc344ccf8c8cae7efffb9fe1dd97a8b772473becee4c99caf333db0e6e7bb3659ef671818e3f99d1d99f6da5b8135df7a5b32ebdf9b9035bfcec8bcbfc574cd9fabb298f3e7c218f777c9cc7ff548a63d9b3f1bc39fa88a198f0ec91c2f6f336377fd6229e6fb40585f9a7ff29e98ef036f89b9ff3536c67e8d5dcff5888631d66fea64f903ba9ff3c9fbab98e791aec8b41fb53763d8c38118f7b732c6785e4ff9b33e163932ed4bf5ce18f6652546fec59d98f5eb83755e635710737fef45ccf9f720e6f3796bb27e8fa323e6f9d86b63d81763aed7b17d656ff357623edf343446bae465fd856563c8c3fea4f8aa2c79699f9b0f62dae38931e2f9ae98fb49763f9f37657dcbbed6bfc4c86f3833c6fcb716733d624fa6fd9c5c89f93ebb82b1bb7f9c11d37e1d8c614f1ec4fc3de77b32ed616b24e679b08598bf5fccfe217bb6df1863becc8bf9fec0b631e2f558ccf7f13b7f3e8a65af565764da2b8fe9b25719a6cb3e751ec8b24f68cfd8ecd3862cfb3425cb3ecdc9baff0296fdc9dc92797fd0252b1e3992653f307e638df75395ccfa9e9ec418af1f25639c071e8aa95f9eccf1dd6f1ae37a9547ff7d7163ecee2f4664fadf998c31deffc2fb63dab327eaabf595565dccdf23ef89b91e1b1b63ff7f23a63d1a1a63bcd5c8f4b7f20b31f72f2b629ea77f37867d5d8af97c3cf5d3f88ceac6f08fdb629e97c81963bd7a24e67aa2670cfb4a7d345ecfb131f6e7b6628effb631ce9364c58cbfd8df343edb5b63ac8f1dc5d4df37c67e38fb9ff9274331e56f90b99e305b8af93c45cb18ef4f943c1ccfc767633cdff821e67a815dcff3cf1931eb676d0c7fd8d99fc45b977f5207dbf86b9235fe96608dbfa047d6f87d256bfc6dc9da3f607e1a7fe388cceb276f648e87fe08acf9eaad2346faddde18efeba17ceadfa38998ef8bc81b63be7a24b33f7f168d5d79e79d98e7bf5bc688df9a62fefedcd618fb4d2f64f6e74e598cfcbe96c6286f2ae6f9eb2763ece73c80355f7d2cc45c4ff81073fd62628cfc3764f6efe024e6fc7b6f8cf31ec6fc3dc1c818fe11f5977ffe1e88393e1e8de1ef5c8b999ff4e1f346b3d818eb69a198e7eb32c678feeb56ccf3a137c6988f7d31c64774658cf5fcb998ef5b888cf1bcc89d98f6e3688cf731b4c56c4f670f639b9f5a7932fbc3e089ccf66ca2fd62edbf74bec41c2f5d32ebfbab29e6fa458f2c7ffa8dacfcd1bf628d97f79931e28b90cc78f06e23e6f3032531cacf1ec53cdfd53246f9d44febf3f58531def7341223ff69418cfa7c7f16f3f90e95cff175f18c713ea74fe6f98acfc818cf3b96c53ccfba30c67986ac98f1beea8be3b12279381e5f60df62c5f3d58d31ce1b7c8921cf2e67ecca3b64c45c2f6f19e379da3b31e3cdad18f5f35515f37d151531e4fb9a92e9bf7f5d89f9fea59931f62b42317f3ff7cdd8a5af7c317fbf2912f3793031fd85d3c518e7194a6294bf0a8c51be319f777e3576e9ddae98e537c47cff49510cfd9fd83f654f2e2b639ccf96bc3a7f513276e9d3b518f24eed7ecaabfaa0bd296f8d5dfa742186bc93d818f6c698fe50cd18e94d31ed71ddd8d5b7affaa1bd0933c658cf7d16f33ce4d8d88d9777a7dfe45afe682f24d35e545760d98bc5c418fef21d99fda3d21673bdad27a6bd1889b97e5d36c6f34c0f64b67756f971fcfb0531fb77c918fe774ce6782fe7c5eccf4fc638cf5611733fea24e67c762fe6ef51dd19e33c4b00d6787ed889f9fc406c8cfa298af97edcaa98fa0dc47c5ea46eecca3b8ec97a1e222be67cd735863d1b89a95f474cfd4e62ee1f5c93f5bcf054ccf3504563ac4f86623edfd13276e9cf2f623e8f7127e6fb936ec48c974ec6f0a79ec47cdefecdd8c9db503ac7efa1648ce7ab0f62ca7f6d8cfdcabc98bf97f06e0c7f5aedc7f1bb0a8df13ce7ad98eb7d53638c5fb507c76f3434467b1b73fc3e1ae37968f5278e5fbf6f0c7f12fd77a2f9fef102d6facdf42ca6bf3823eb7c4487ccfa6d6e8c5dfaa146e6f8a88fc5b83ebb3046f9bc5ffdbf933376f5392e8891dfdb9398e7d1afc4b40f5963acc7b13cf5f7eca731f6178a62fa4f8198f6a727e6f3b19e31cebff5c9ecbfd5584cfd4331df072479587fed9331fa679dace73d42633ccf7623e67af39d31e68f9998e7192bc638dffc2ae67e53c1d8a5c7be98fd2f67ece48f1ec55c1f9d1aa37fdaf5fc3dcf8d31fcad43c64b3efe7fea3b1364bc4c988932b1fb4c32d3e43b48fe3ecbcc93f4c50fd7cfedfac0ee5ff2efcbcc2a33cfac93efeffbc09bcc36f9a4d7ed7e2877915e97794fbef749793377ff47e690fc3bcc7c668e995372cf39f9f78f72b8efcc57e6922927df95448e7d921e6676eebab2932b95fdce7d5793cf7da696a6bbfbd6943ffdfb83bb4e72ec7efaf692bcd3fc1e93fa307d7ffa4ef378729fbafb8e584eaa2fe40c71dd9fd63fca4df5803c8d44bf59f29d96739f69fe54dfdfe507bfd1e3f7f34fe56ba1be5dfe3fddf7a3fe890c903bcc3cbb4fcbe9e565daeeba4ef2b1f6d07d6939bfa89f9ffbc93fdf3f67497da4ed1167baae3dc2dfb6573a46322f995ea69f7cfe73df03f7794dfefd9619269f41f241fa88e93f5fdf77f7f43263fe3dfdcedaf5df9ff4efb94cdefdbdf09bfb919e25233d9f293a19ae32d7c96794f08f798df8b9617ea5cc6de6d5cba4699e97c9279f9e93eb353348fe0d7d24e78bc93fb0cfcb4f69df9f41224772bfe77b01af533e3fea9fd49317e2fb3732feaa1efeac1d7efc649deeae1c2ff0a25fd4bff442f97f9cffc0da7364727ddf37fe45f93f7f523d63777dfe77aef9aecf5f7fff6bfd73a4f6b4f6f84df9e918f12699d17ffc3375df85e473493e59fe3dfbc3bfffcae7d7d7ce32256f6eff2e249f71f219b90ffe36b6eb16c927e1c43e8cddb59049f26593efacb74cfebd4affedadbd0dcb9cb38c6df2b7f483b293bf79bb9fe4824edbbfa497ff3b3afef6b3fde1f3abf47fb42db64e1fd58ff7bbe5fef5bc7fef3efd7bfc27d7173233eb1fffb83effbecfafda63e4e6118dffffd427fbc3bf0bdefbbf31ef016d40decd2505fe6dec3eb061237e8f5dd97bf7197b7bef23b9eff0635edea793338bef64147cba79067fcf7b6bf749afbd72e93befe89dbc4fefec1d7fa39ff4d5e7d7f571e5f27949e678cd71bf773f3ef95ffced8fcbf8a34fe1877fa732fc71d97fa57df3bfb9f6e77bd51ebfa767faefe57fb0fffdb9fc7fd81e9c477ecf86fc7b3eb281a98dde7a5f7f600fff395b76e1f7dcd9a1647ef00e9c4bc666c3666efec07c90daad06d3679c473487387993113077328fdcf7c46c5cc1e690b99b67ca6efed9fc9d8dffb697bfd2756bf6fc83fffe57f4ffe7dae3db662ffee53cbfe7b8d16ff8fb6fe33ff914bc4af271f5efeaf73fdb1fffc1f6f81f9b47642f0adedd3f6dff7ee7e355131b5f457ce162869fe690242df579dd77d2024767f752bbf5ca98e2eff34ce311e7977af7a96f9dcc3ba1f357178c45d21828b1375ecdcd2d3fdb5dc55f3fdbd8efcf15e7ac3bb3e97f5c1fcaeffbfb9fa9ff9fe726378f780f3fc8fb8fe5fbabf6fdb93cc55063fb0cfeeef3db79e4efebebcfcafe77cc23d9440eb5c74fe5ff8fcc23b22fce267b77bfb4b7bfb663bfb26b8a21befff6e83d7975af91c41023171f4c3927e033f29aa9bd4f3ef83ea7763fb372f2689e28fcf049e7a1563237a5dfcf5edbeb785def25f9f4bc7e323f25adea0d92bfcf92bf2f92eb5fcd16fe6c3bffd8c787bd5afe8efebfbaff9fb7f53fcf65bf9573fe2fe58d0fea606671c7b7ccb3bfcbef57f308da436df6f7f1d7bf6f0efdbd79e4efdbc3ca77f388c6ce7fea3bb54f3fce233f8fd51fe386d10ff789658b0b991fe708b776e2a56b22c3cc9537f2c65ed6cb7979afe015bd2befdabb493e575e29f9dcfa4930e6fb7e90b9f2c3e4da61727fc47b938f1ff9b17d265edf9ffa337fee2ffca5bff2d7fec6dffa3bffdddffb1ffec1fff48ffec93ffb5ffe25f97fd9aff8777e35b967429f3b9533cdf39e6b3be31ff4f9f1e3fee6d77ea9ffcff5f0af7effc13c92ccad7393fb9fcd5ff3c38f6b913faebdfd52f71fdab290c9fb0fae8df5f9e3fef1efaea79fdbe3d7f3c87f7ecd20f5fbb136b474e333fdb7fbf676fe631a53d00f756b476e0c17143b308f92ff94c614a9fdf6eb7ec32bfa4dbfe53ffb6dbfe377fd17bfe7f7fd81ffeabff9437f947cc6c9bfb37ececffb05f7db95d7fe8d5ff26f834ce0057e10f8eb2074ef2c9a04d36016cc8345b00c56c13ad804db6017bc07fbe02338049fc1313805677f187c0597a01c5482bba01adc07b5e021f93c064f413d6804cda0153c076d674b4bde25e804dde025e826b2b69d0ebfb65ff3c486cf7e595f05d549d063fc93c6482e3e4ad9fd4d6b79a5bf50ffbf2d776aeb7259d71edf735bc1c9af3ce77fa15d110f16d28f6b1fb41bf249dbf162f15b89b15cfa777c2ed6b6a3241ef9a379a1606b718a2dd3fb276e4db1f09764fc2bf5f3dd1ebf99bfdd3cf29f9c43e06fc3bfcfa6fe7b32564b892d5fa7b141fa1df4bd9d5b931a0403ac1d25df57ba2ff1fd6f93cf551a0704afc15b300c46c138c806b9201f14826270155c07374129b80d33a117fa611086e9d392e1249c86b3701e2ec265b80ad7e126dc86bbf03ddc871f091fc2cff0189ec273f8e5e7c24b580e2be15d580defc35a92cf43f8183e85f5b01136c35692cf73925f3bf9ee84ddf025ec85fd7010be866fe130e151380eb3612ecc8785b0e8de93711396c2db281379911f055112cbfc6e4c304a6cb87ce21f6c63a27ffaefdb28ca60ffa1e4d5828e57cbf4bd4b14676e13db9cd449c2b9243d49fb4bb6f4b7e57ecfcb2f9421fd7729adf7a43dd6d66ebffdfebdfc0b5ec6e6f8beb78826c9c80892bf8d5c1bd31748d709bd653008fa98c392be7072f73b1f239afe8eac5927d7b71caaa79c9761de837fdb5c9bb6c72fe6bdff9179447e266cce87b32fcbc4a65c308f60cf41d77b27ffd131e69a49344b7acb3c5a44cb6815ada34db48d76d17bb48f3ea243f4191da353748ebea24b548e2ad15d548deea35af4103d464f513d28478da819b5a2e7a81d75a26ef412f5a27e923e885ea3b768188dc26e344e381be5a27cf25d48b8988eaef4a9ab701add249f52749b7cc77126f9788943364ed29311135d47b53888d39723e6e2f42181493c8d67f13c5ec4cb7815afe34de621895f165c4ffb95ed4a6df8dcec96a52573885b6f8bb7c93c7449f3f09ee35dfc1eefe38ff890cc9f8de0d56b079d64b424736b327afe9a9dfcfef7946d82f6d825f67f445b9dd8e46090fcade4ea7ef6f7b2fd7a1e090671ba527eebe693527c4cbcdeae774858715ac15ba5ed1ccd5cbbcf5dbb97113b629ec934fec4c66f3997a4ff9e51bef93f30d7fd953a9a67163fe4677abb79e4cffcbd7ff53bcb3d04d8aab9db87c57a503e3e25769036223ea7fb0e3687a436289fee757b5efc155fe2725c89efe26a7c1fd7fc5cfce00fe2c7f829aec78db819b7e2e7b81d77a261dc8d5fe25edc8f07f16bfc160fe3513c8eb3712ecec785b818a7cfdbddc6377129be0dbbe9b1988937f127c1249c4493f4ec681cdf4cd24f263dc8339946b79359184fe6934c3a42260bf79d8e9c78b24ce796a8e6e6acf429ff5572ed3a7a9c6c26dbc96ef23ed92776d24b7a77f8439cf2f76b35b2e1df763de1a033f9981c269f93e3e4148c26e7c95792e365529eece2f2a432b99b5427f793dae4c1cd2163daf03facffdf7e687fb106f896d96546dc772f310df342fe4ff31d5b3ba56d7c993c4e9e26f54963d28c8f93d6e479d20eba6e9e48e7c1816be7db4927f5b0927b4ea90f31e926a36499ca3149d7d57e6f1ef9decf1938b9d792937de45fee9f3fb4c78f6719fe47e711ef843d87f43b099f67b037de2bedc0dcec177ce2793a97d0b6a5eb1edb34cd3b4c7ac1383a4efa93c1e475f236194e4693f1243bc94df293c2a438b98a7293ebc9cda434b99d66a6ded49f065e769a74e9693c9d4ca7c9c8994e67e134f6d25e3d9d273dfc6a329f2e925112c7c95c315d26a3221d29f3309eaea2da6491cc13c98870bc0ee3744e49fe7695fc6d9eb0fb7b3a72a29b64d495a2abe926ca4db7d35d78ed3fa536339139b191ceb6febeddfad9ff655afc357d9feea71fd3c3f4737a9c9ea6e7e9d7f4322d27f3cacc7d5aaeae66c18073c03f328f680d47723df35b6b852517f3cc79ddf6cff34fe690acb771f794a695ccd3f46e5a9dde279f9a9b030fd3871ff6aa7406c2e2a9a44ffcfd3cf2dbf5d09f63933963d3ad8b47fe4a3cf657e791dd0f73fe6fe791ffe41ce26c28f6aadd9cf0367d9c3e6506d3bab79f3692ef266d91376d4d9b49cbbfd28695b037317d4efcf9743cdf24ff6e4f3bd36e104d5fa6bd697f3a98be4edfa6c3e9683a9e66a7b9693eae4d0bd3e274e05d4fafbc4e72fdf5f4665a9adece32332feecdfc59100d6761d84c3f61308b268bc4fe7bb378969e6e4de696f4cce8641ed566d3e493c432d1cd2c1949c99c12612e494745728f1b1d5132d7c4c9e8982d66cb49fafcf94deccf56b3f56c33dbce52dbb89ebd9bbffd67f1c84ffe711a83cdf6b38fd96196f892b3e3ec343bcfbe669759d95bcc2a2e0a4e3f99f4ccc0d467bcf387f5ff4bdb9cd671ba0e354c6207b7ffe3ce2aa5f5df4fedbec58cf93f5b5b4abca663dac6a94c491eb7d3a744cebb5975763fabcd1e668fb3a7597dd69835670f7e3c6b79fdd973125b7666ed59e22da631699affacfb87f348fe7b5ef3dc5e7832475fdc19ab1ce29e7fad7ffed01eff7fc523a94d4dd762121b327b99f566fdd960f63a7b9b0d935677e7aa129f7a361bcdc66e7e81ad99730d6b36cba67673969be5678559717635bb9e55a7ddd9cdac34bb4d0df1dc9f07f3a443cfe379322dccd33d8d85d749629ac4d79dcfe78bf972be0a3fe6ebf9269eceb7493cb399efe6eff3fdfc239d2726f1fce0e6826454242364e146479c7ebb11948e8a79324f6492f9a3947a59d1d5fc331d59613c5ba4232b9d63d29115c6f3e3fc143ccccff3aff925f1bba7f3d4df5e9b4ffef77b1ddff1c86f6d57e2b524f7a7f67136afccefe6d5f9fdbc96f43c3f896dc6f0f99d0f5ff85edff94bf3c8cffb33d9d4eb49e680e7f8387ff016691bcc1fa795f9d3bc3e6fa4f313d611ff8a9f90c1d984a4bde6cd648e4b4688d79db7e6cff3f6bc33ef2635fe32efcdfbf3c1fc75fe1616e7c3f9c86b7b87d4134bfc05c85ff95d59b36ece9c3b3fa3e0f46db39f2ce88ffc3be690bf8f0f7fbbaef5ab75e651e6b7fee09faf5dfdfdd8fcad6d1cccc7f3ec3c37cf87d7f3c2bc98f4ddabf9f5fc665e8a2ff3db697d91044c0b3ff3b408dc9ac84d66b70817d1225e4c16536f9f74f6a4c72ce68bc562e95f16abc5da2b4c0f8bcd621b3716bbc5fb62bff898be2c0ed1447bdfc9f72ef15d03efd5cb2f3e17898fb6384d868bf3e26b7159941795c5dda29ac42f01e20cce11737ed29191f4fc244e99c3fb4a6390d902f14afa77179378c9dc937a67494526a327b7b85fd4160f93f36c8fb596f89cb460ee776d79dee691fe2feabf94d8e44ea6376d24231e6b7b6e7fdfc510b82e89db9c8f3ff8d3f6f8f9ef05b6c95bfcb5785c3c2dea8bc6fc71d15cb416cff165d15e4c179dcc9bb3d35799dfdbaf706b5899c1a2eb2d162fb3eaa2b7e82f06fe79f1ba780b568be162b4182fb28bdc221fe5e26051089fc3eea2184f1757d16671bdb8599416b7d3e7593bb1689954ffdfc4233fcf2723ac7b7af7cba4132ffd65b00c67d965b4785cc6cbc91fccd3fff83edefc57fdd7cd23b2651a4317fa7d4bef4c7f74ccfd0dc407df7baa5ae32ed9f9a60befdf72af239d3fa6e9795bafb79c2e678be57cea7533afcbf972b15c2e57cbf572b3dc2e77cbf7e57ef9b1e82c0fcb4f9495fab7cbe3f2b43c2fbfbc56e2e377d2329797456f595e569677cbeaf27e595b3e2c1f974fcb7ab4593696a90d4bcbdd701d0d7a71bddff9f107b76fbe58b696cfcbf6b2b3ec2e5f96bdf48749276e54a471c7f71c92f6fe345e413c82390523268943bacb7e38459cb2282411fc743958be2edf96c379c5d9269c3bfea335a1c2efec8f7caf01ce28ff9cf3c685f5bce2bec09c76750a5bcb3d9513edfff7d9b5894b736b8436075d66f9e568395e6697b9657e59c8ec3335c438c93d17ed5da5652d8b49ac71862fc0f96792ce67de615e5e5e2daf9737cbd2f276955979e1e3caf75f43cf1f466f613d5d335c05512dba5985ab6815a62be7abd8cfad267edf7f5f4dfd797c5ccdbcb62b2febce615f7866dbcda18c89dc9a682243fabd5acd578bd572b59a7657ebd566b55ded56efec73dbc4e3dbb0ed57bc9eb27a13ebb7a8d739d32ef06dd8c7d37e3247d93fc44d33ce237d8c45e77b8e3257934ee68aeb10e9f9d60b6de2deed6deb7c925b0371bea03b139bfa8be9b5eedfb97435907f1f611d63b55f7dac0eabcfd571750a26abf3ea6b75595eafca61695549fe7db7aa6606a9bfbdba4f7ce380f7d4bcfdea61f5b87af2faabfaaab16aae5aabe7f974b25bb527afabceaabb7a59f516e7557f3558bdaede56c3c973e23164bc6a807356a93fdd71f10c6c6131b18b897d4ed7825623af3b7b588d57d9552ecaa66b59495c314fe30ace23364ae252ea51618424692e2e8157164e9211924d3cb6eb640ea9ce77abfcaab02afacfee1915d8a3fc1fee4d8f7ed89bf85ebb497dee4ff3bfd333cae92a7929b5a389cfefce1aafaebcb34bbf726b5b2e1648eb1f7b4e2ece18bb361ab875af740f1c6b5569fc779b795da5cf631f5737abd262bbba9db6dd733235b7fe98b46b347171c9659d49f34ccb4af2bf4fda7618a4fb1f97b5e7f5d7fe3a5887eb681d47c3b09dd6593a1ac2b95bff737595d81d7eaf93786f3d4d57ced7b3f57cbd582fd7abf57abd596f93d8e421f9dc79fbf5ce5bacdffd5912af74d7fbf5873f4d466198f62fe8eb62da974c7e7d48aefb5c1fd7a759757d4eaefd4aacef7d123ba57b6c2eeef58ee9596cefe4f661ae92fbf73fcca5e893d9242df95b6a3126e989a212e7b091f7eeeadd9d23f363cd273f9cd7d23c52a00f3d4aa43cb9358b743d7de5d6b277ee4c54ba4e9572d3edd9628d7b9eae6f24df2bc5206859d8a3f5617d5997fde1bab2be5b57c3ccfa3edaac6be16efdb07e5c3fadeb8b977563dd5cb7d6cfebf6bae3f5bd9e375b77d72fb3cdbab7eeaf07d3fefa75fdb6ccae87896fdb5a8fd6e375769d5be7d78575717db5be5edfac4bebdb4d66e36dfc4db0cc27b59ed8a7789b29cc5edc1c72e2d9dc915b9f4fe4fbffb87bb3366591a56bf8c770cea56559eaa18288080a8a967ac63c28f328bffecbc80487baebeeee7777f5eefd3d075cd6e0809019112b62c50a64b7c6da32348243686a7d73003ec12699df31c12708677077df41d9ed0e697f07944f5b5a688576e8846ee885fe75105ec22b2db4dfffcf6b0b90e7bfb4cf7bedaf88e8ae7e01fd2e67f82ec88f927a12b691681538ad2f715bbb889e8f735cd8163fd59ba2d656c281701abc260cc2308cc2384cf42de58629f9dc3023f947f4990ab573d930b74a84ebe03d218f06afdd844558fabbb00aebf01636e1349c99c7903194fbf5f29f7d6e7ba0203964c379c8858b900f97a110ae423194c275b809e55071ec701bee42d5afc37d78083fc363780acf61cf3f58b103fd1c90c322710d9c031c6ad877594ff22f2d874e019e37e4fa30078170b61d1d6a4b01f6a95d0e0fe75031672fbed7413ccc0f207e24b2b7c8674e5bbe01b947c887bef0b5089f2a0d0bd847f61a79427c56f43bce37215b82f6e11ce7a886d4947e0bdfee7bf28d823a07798fe14bdc0b798f39750b076668c9261fbe87c3f0231c85e37012d15a5f2f232ad2223d322233b2223b72cc508bfc4be4469e2d3a66e49b6174719ae81a055168ab5114c5411d2551aaf5a32ccaa3222aa3caec4775748b9a681acd2226628335e4e8a33946b9c47ec45d6c4d78bf11e748f441577c255a447cb4d46f8668d8c8f63928ba6af1c7c39760bce291c31c4642b442b6d132cf8618899114ada34d24470b6743f991d2d61d3accd1ebfa52bec1055fe3df47fd82f4ad9c9efcc198f08cf17b0e706fe49e56b1ad43ffb315ccae247c06920322f78170b2200f66d013d3a2e8681bed22155dd37d7470a7700d6899a290df65c1fec23542cff98c8ed1c9c8a373d48bfa9412bd39b2c64683e83d1a461fd1281a1bbccfa2ebe542f5d5f05ce7d9f77696e4e14ba2494cc7947984ec398a5071163db40c25d6d0eeda9b47fda61d63dde0030b3d1a86189b261f5bb11d3b8118bb9aab398e8c708faa39b117fbe8b8447220c7d73888c3388ae33889d338a3ad20d52cf03d90a3736377837c8ce2ac5f3973c011a7fbface3471acb247f1128d7d34e4c8b6718e7d50dd72a261ddd47181fd0889df499d1572491b478bcbb842675369725cc737b46b26503725b55dd2eb87f1c100b8491a8ff62c7a2df2c4b027d123dad3e83dc076e1e7a3bd1a37f1349ec58c798d546de4e4316b24f13ce6d055591882e518bc41b9a67132fb311f2f63215ec5a2cbc652bc8e37b11c2bce2ddec6bb588df71a4b29f121fe0cfae8f7637c8acf9613f7e0ca5a5adc8fdffcf77810bfc7c3f8231ec5632b6af152d4d668705c8bbebdd1e649dc7872a9123aa1122dd113c3828a628b4fee77fd81e621caa2ae4662da703b94cb24b1123b71a28fc44dbcc46f6bc8e193ff707eeb4bbec323bd174e828ded207e2ee0316701b92064b9b09dd7584746d7788f7e6f6b2670edeffea38bb9010f5eac0a3fa25d945c12040e92c0a992d03d438d5e5bbcf4c46c92288993c4721264852ea324d312334cf2a4484a834faaa40ed71736b9250db22a0a8eacecae9ef4e443fc67fc86eb4c9657d8e8800a2eba76adaf463b05ea550adc37d82dc07148a638d7e8988b649630099bcc132e59247cb24c8464e5de12319192353a970d3ae44449b68083925da29a74b24f0ec9a723535b974d8e2e0b3c6ddc4b347e60bb16d335adaf801c59c7b3b3e9f88513ed602cb66af95ab876e98814b2ab2e979c9273d24bfac95bc027032f8ecec97b324c3e8275324ac6ba994c523ace520ace22d0607f437e9d52528d4a531dc597318a5729974b0d974dcdd472d6949adafe25387bebd449ddcb8731d1fba9972c523fbda4d73448c33432fb696c2889013e214d92619aa2c865efce352bcdd2dc9a99615a68fdb44cabb47666c132bda54d3a4d672913f329abdf2c279da79c5ea3c78576b4e4944f97a990ae523195d2b52358f0cdcb748363db3295d17706fe2ff225a9926ee334dda5aac9a77bb43f7440ea5d3cdded8e6e87d8866b5f21afe5a587f4333da6a7f49cf6d0e7f4d3376f0cfd89c4d6d37f9c1b7cc623afbee4ed09a3bc9108c9dda403740ddf69211da61f41908ed2f1b5974e325a77332ad3342b3901f7b8f59b8443c5d1a467b2c38bbb0e9f657a6638fbccb485ccd2b5cc46f73d45d80fee9f1f509993b9061f9b869579991f1eb24b5a98c7ec9a0559082b1afd1c65719618c245051f1bada0aa0ac7ebeee8ae5f8bdf3c9c2d6fff6e4e5aee826320f003dcba2c453fdbe610ed2003b80fb0832e3b33ccb22ccfd0e75f76da31d96465566987ac36796010c1f3215b021979c3d78ed92d6bb26936cb988c8d2ca38c3eb279c6810f74e40ce11e5f813c1cf818a8d3e88a8bfc4ec6a3359ce0ff2b997631706f7ee7cf5984c55657acb3d2e60020eeccb36526642b03adb8abe59ac05fb290f7cb44740692e584ef06aff50c3ebb7971b2ced6e8ac36991c6c3225db66bb4ccdf6a6941db24f2dcb8ed9293b67bdac7f99666fd9c073b2f76c982cb28f6ce4c4f6211b67936ca5bd69fd9c46df766d69396d3939a5b3b966f28696eb0857e460f34d37377233b7723b777237f7723fbfe4d73c407e6e95877994c77992a77996e7ded116033d2ff232afd07bd1869289e631aff35b2ae58de96a4be43b429217caa7d8eff55afc34ce67519433396b1ebdbccb67913bfb6a13b1ad04dbe7c53d934fd27c9e73e83b2c723e5f5e132a46982cfecb39f90e8f7cf5251d3fa9aba92bb990af723197f275bec965433024f4bd1493cfb739f2adb91a3bf99eda0687fc80ec66c7353e61bfcea3efbcb9f762227b093102f23f0a3ad4fcd365f3637e021c904ef273decb9679ffba4806288afa3094fc2d1fe4ef9a9a0fcd3047bf27d37c948f4d2e9f14b461a2950eabf98de4021ff8ed97c373dd977a537b5dd17ddfa0d75de1b1a09c2bf01fc8f3e0fae29ce1d950e0efb063aebaa118be21161af14bc08dc0381157700da5d00d01ed9e6361a0f773cd7e8122b6c2cafcc22e9ceb67226851e11aef8517d78154f8f9b9b8049be89c9d733bcde07fc5b5089c2da584459b5b23fe3cbc602d23ccbf8d29eeda146111157191a04f4c01c142f5acb50f66cbbc40676d6c5cb3c8ee8f624e7971911745382ecaa2d2d4a2463b68a31df41bdaef0b74d6b77c5334289a5a187c312d660513d6e8ccd9625e70c5a2e08b6521186ab12ac4424af2625d6c0ab9508aadc75369b12b54eb54ec938fe2507c16e8bd8a53712e7a45df99176ffea51814ef86560c8b0fcd45f6d0376d972d46c1ba18eb8d6b40aec5e48a49499794553a1b7a1fbe61fe29177154536a38678739a8a55e1aa5595a971dd4d1c196e13bd9d64a1eb92d147f2b975d6903962a518458baa557fae525285a6d905ecb1f3a3ff986effa33bee291474f1cd87b9c8fd24c8405e6e5b50c8ab80ccb0845a50ae490cc11b2dd23db2a634b2b13932fd3320ba625c20f65611fcbd266114e819acb7b595d742a45b13c8acb35377d77b9b2a685f25636978db3f39b400e96e5b498eb5584ac8af666d4e5ac644ab69c979c390cd964e74fcb45c997cb52285766cfa6033b1fe18aab635b91807d05f6b3249fd5d699bee09147cde9c927b78fb07b601d95225e5f0ef95f29e15c998ddeefd9a73fb2f28635727c17c2bc51b9ee2c19610601a32831e1fa203fc3c1ae8944ed006bd41f6a2a649ecb4d29978a1940b48670155f6ed1df76c5a9548b416e96fbe77e2084d38a7b7d24a2c7e5c116cbcff2886251c31f00a38f30f9c8be2f4f5d850d9fe9d3a3e1946782be906d3d92bd8c7eef11ce2cda695ceb19fbc6ca72f429c4b5e8cea2e796fdf2ad1c94efe5b0fcc8eb72548ecb49cc557445555aa55786f15e999555d9a55239e9d1102bd7505ca3f220a22ae5cb32b735845f4cbef2f50bb5c5755752171950fbea62d499843e57b6b4ea5a05c1a40aab88f20127215c95b6361bd761aab84aaab4caaa1c7234c4d695275c73c70c46f01d70c50bf46331ad8a7097c455595555ad2ba1013517c89fb4d8e17cd76679c4b97f8647c83937f79f4f087fe49452ddec895169fd2b8adb81655935109d985c3545361406d08fcd7e30d38ed5cce023744d2ac672a2ac62abb915b7b872e49815572d2abe5aa68e3ed2fa9590ecaa95197891c95f114aae90af4536d8a92403e13ae89331b46a0d9d00e87f9ba0a8e40ae1856a5bed2a3531008380cfb0ef58e38593e07fe747daff3f67d45f0e608656fbd75cd893efa6ec2f7f6fff463dfe47f063e7ffd1753a90ac0bf828b0e2856688d104dddb37d891f877589f22f24d22f24d42f5a9a168ce3c5647f49d4fd5d9faac7a559fda134c8df1481fed97358a49e7d55b35a8deaba1b18738cfbea0386f534af7b8d2bfe72c1e7502882b315716f76ce0bd6b60fe2cd85e38ebc474e0bd901faa3eaa51b5f2d46a8cce64624e6a145d0596191653adaf9db5634dd55a88ee388a851573a11dfc21dafb28fa8148afd603a6463b17af60dbd26ab3b66abb766ab7f66abfbe54372a455145494da922ddd0c374101deb6b1da03b3a41cf0deba88eeba44eebacceeb22c8ea1276545737a9abbaae6f7553879504dfcbf5ca936b828d238c78b4628ec87323f45a4feb59cda414c4af388722b7793cd05b3950be2bb96c68f897e4e4c8614ea5eeccddfc52ebfe8247082f0a672e39b2531c29762f4e64d46c8c22087437f1f54ca6e87bcfb115ea5753e2eb0c13d960aee6ea45cdd74bed88ce91bfd26618d7b51068995a8cc38f7a553215c29585657850a7305c43ace78662235c558bb504f78bf84a7382ef1fb2e16950af8b65ead79ba244f703ed18f477c910a133a0f3adf755fbedce78d4471e8ff6e3117c03d53ea2f554cbddff3b5ff4f4fc97cf00ae36c6855daed1ba9f0fda21b5d2c600542901e70e59f696a30dcfc7d97da3dd5d1db702769307b9b69aaeb7496a086961f0f5ce146bb5ded7077b0d7ba4fea44f9e501febd355adcf75afeed76f955a0fc0f3619ed2d3956863c97b7cde1d6d4ea38b4b5ff84ee8d3dfeb61fd518fea713db9d137eaa6dd90b93227650cfbd83c427d02e2cd9b09758afb5e17a209f2416362c3cdf1cdbaa1bb7a736eeecdbbf99673bbe8f1ed7a0b6ee12d825cc52da656b784aaf59d26dfd208ed44dbbf65e8fd8eb7fc56dcca5b75ab29e576bb359444cfef36fe4c7956739b46e16d766350f03beea22c6c01ac1bb29d4572636ff31b97f76f0b6a47ec0bda916ecb796de8b333bbf1ba7e5bde38637013c251368cceb755c6dfc45fb4a57ec52351cb61257d8612f24b5b47be49b7f56d6338f91823d8611aa16f2cdf94627cdb22cbc111ee714c3b576437258bb9ed6eea6daf5f82258ab3d9dbc1b16f9fa91f4a805bb08fefc34ab0b14f041b8a563bcec2de8edd7d6b6d6f00f1fded743bdf7ab7bee1840c7afe99d86a0bb8cf17e3e97e7f8b3fbe1c687de8b6959864ad743943bcaedaf7b1e86aff58378f35d5f9a9dbdbf37a7aca39b6ffc3fd3de3bbbf014e377efe6d606b6d5e0de39bdb80dc531249776bd99cdcded13144d7f7e336ba8d11f6aa0cfe36d1fa0ddd5045047ba4d128aed11ba331cdb0b1bcb8b1b543e398c706d87d543eba63117485485cfef011f0ed1fb6e2be9b9e724106f63135ad1d1baff1ad65730938ed68ac6d2db013b3f50b63c8f8b5b6057d2bccc94536c0a651c433b44dcc871ada7a7345f65433f74da0cf9bb089b4ac899ba4491d097ada9bacc99ba22993aca97ce41410fe114d14af6662736b9a66dacc9aaa61dc4daad1139a83bc3870a1c0fed37baad7b0cdbce1021467bb3e7c2e3a07b4bb9b45c337cb46685629157d52aa3ba352e09cd2db966f8a79538dd848cdbad93472a368c051e29b2dba8e3bdf6ad4a7fe91dfe19131c541ef0cae7b9c352b7d6ff6cd21d965a2356e3e6f3877646c2ca7395a7bffd49c9a73be35f786d5f40cafe9bb5ead9893e6ad19586fcd7bd26b86b1d07c9429bac612c986d81782a76085032313560ce91a83d5d58c1ef880d86eafc07d310ad48b9ab1e31b6d5f4d75c809379a7af221def3fdff03dfa1dbafbf7f89aa9a0959edc83a3e3defb10b1ebeebe9f5ed2ec1533e47f7f7f3c07fc0417025ac2782186e03bc6e35ec43ee119c399cd2f918bd5e9c52536d8aa0c0d44ccb298a6fa6f6d469565397e4b530e36430f5a88fa93fbdb8b7e9751a4c4343c491c608f2d5049be0bd6a7636a5b50dfad7f8b28bc6da476a1a355773126bda51eb19f414f90e642bb45a41bb0f7947d81dc4777431a66bdede5c739a002620680f6c80e14ed36936cd114a3dea3cd461a7c5b49c56d37a7af377d326bc421c4f5b613a9d4e6753c65c4fd9e9dcd2a61c3a165a7fca4f97b7657020dc597ad5fa10cc9d453ec19b0acd65ba4277c3361c175028b235b7e1549c4ad335f21b9be986f4b7a0e7423d01708c830f529b76ad662a4f157465b79633dda147d51d4ef77f098f34ed017d877b6aabc9d3c3f433ab918d37507c8daeaf73d50ed3e3f4942ca7e7696fda9fbee108b08bcd35845394e960fa5e54d361bd997e4c47b8a7d202dce015088fa16bdc71966f03623b496ddcb0b214dbea21be17a47f46711d6215c1d7e3ceb331390f627f3b1c405effe77ee4b19a5f7089ffbcca91df7a43ab746c88b0237eadd57fc121deafbee8c9422b24826ad722743638f811eeebe3f9a46f68389dcce81935d30a29ac2ec3e070755df622cdf4489e1933136a2ca43ea2abc88eed6716a5ceec9993f50c76866256a8a142af1ece6f41bf046d5bddaec1fd1670d5f4e7bd4df0c9e391e0965a9979f03c13a1f46832f3d1df34c889805d03846f229b6d9e482480bc23c23dc48f10e48c6c028a98e08ece2eb3ebed6316a4e7f25363117e6a6661f4119d2e9c319c45b3789650b4afb8ec75e9b2b3547383cf5936cbcd7eaecd8af09c0c67e5ac0a6e60af757556538d55b57568a869bc3bd2ec366b72ca1031fbdd2b25c3450838f7171e0f3e47dfddfb29483d1bf757d063dc87f186b0c8a13ecca6cd6a364bcb193363834370c3bd0e6f7f561f217c5eca875a72f4eed7ba309bd734d8fc720d36efb2d3fac578c6cd1633be282dc0467d633d5b969cc921b030018c119be631ffd0fa33c1c4780e61490e1fc037a3c1ff9338dea2dc0b8e4028926935ecd90a2c12c404b582112fbafe314df24436c4f20e603adcabd9ad58b0cdd4579cf03b5ff2145774f9adaf111abadf9d1f79f88ce775d4ae2fca7ee098675cf3127de1d76a2d3e76804f07b948723de0bb90cf34bbffa3758522d77026cea450bf1898a77da2f71a7a0b743f10dea468ec47da3e3f970d96b3f50c6181343470a7aaf9d41f81eb0210d75dc999747bb78b4bbf72639faf1078d06aea0fd05979d38cc4b4717f2627f94c996d67bb993adbcf0eb0136c0dbd4f974924d9e731ec4a7388f00a3ffb9c1db5c0655b8ee806dbdd9c3a7479246a373be9d7d9b9d2673d4705d65b7c9df5eb53359fbd25d7f200f502c2e7a16fc0416b7101f8850bf43fcc06e8fbbf1b0a7c5e9169c7d970f641e55057c1b8c3beeb94603e41db774ef8600dd101d615f43795dae90aba9ee7b6aeffe77cadd36c145ef355c4cfc6d5cc3c829a04ae1ba088a172c39bb59c4df24f86662883af5c40d6c8c70f19ad10199d31d01d47889c31198bb1cd23836e10e3929c8eeb90b81bdb54ca1fc0eaeee2f616f729d38c6080c4045f4156ec3469f396d80e8385449ff161288c17b7999be798e1ebe33778e40f7d0cc96be1f3a2be721cbef99c679ff49cf77aca9b59237f50a3fb981559c9f8a091c35c982b13405ddffcc096de31df907546d1381332515a32f1f5c824f412f387a15fd66b79ce5dff480fed1764c7a625933299e538a1396172ec3b0cb035b053a02e92184c911eaa6d3033846006f915438403f90011f62bc96b11fc71e7caa22bce94e017f03eb6628da98025cdd4cc2d1c320d336566d6bb76601874c63d1241c0de7ee45a001f58385e64d8a9e932983f46b79c4e2e82feb53eb2e915ae49abc944538b29e4fad16344f5c33ebd0f0ae00f3073376ef59f0003ac09b70cfc67cb92e6184eb3980503751c11459a3cb364042bc15110e9c786d78ddade6fdc774efa62303ec1ba1f1d478d4a9915d63779239cd52f35f7d3173c825ee32d19919198758aaebdb106ff1a3060df194f3b963eb36164cd4d878c125880134caeb8d56766cbec18645d1884c89903f3c91c99538d6c3e73cec78035989e6b927a4a7b2f4c6b8c7c08c9e9f8e49e9a3da6ff72cf70fc0f11cfbda671b7bb17d5e4a2c9c3c7bff88aaf59db97c727bedb4b16981c45e69ab58c7ed63b7c7b7f4efb394fe7e24336b75d1ffef33a839d862b0c3837178acc5ba95c46cc206399f7f08319321f5981b3171cf85ca88b30a362cc8c994910514ad8a77c96662956837bd6aea7966f87fd888bf3f1327a96ce1aac6939ac059d3196761b9a1cf0692c03edc92b6beb39ebb02eeb5ddf589f91d80b7b35433600de8c76cc4443841c08bc8e0d21176558571dadfcb321428e1a3c1ed44dd808bf9fc3c66c12aed9748a6ca3763204d780fa0ace5b436d156b92b4b6ce31c7f8f3336add72ae4ef7de10afad7138585f452e5cc867c1fb251b4d65d1f95a33b4ab4ec8fe57c0d86fb5df635a68fb1436f73e01c2e5813e97b7dc740ed75da8b1c55d93defd0bc7ef9ee7b59804fa30802bed815f02dfcd96448f8b1e5c13b6626b0fed904a02de9921348e21405d593bb337b6217c57768a8248b8d34b9631de58969db31cbb60797689ee83c09aec0a678a1d52bb267581472d9bfc1d2c105969e8ffe87e8402f159f87ab7af238fe47518b7dcfffe78bfc7dffff8f1fe3c177d265a0f90c72c745c0d75708e6d04e7c1622b4bea68f7f378fa1e6407403d03e73a3f882e81897c450d99873760ab987d165d3b766df69151be62bed68eddb072f819abacc26ecd305db23b569df6d93d7b8895cb1b955b657ec0da35b8078afd6c7b563acedbbd7f843d6a1c7b62cf75c9f67c2b1ab2fd621070ec1b3b60df8b253b347aec073b62c7b6ca4eb47a4ecfa9b9765dcff5b9914a73736e9962bd2a2ae3ad8eacadd19bdb7367eedefa73cf9accfdf9657e35f479808eb05806aea1cea379ccf4e7c93c9d67f3bcd6e745b19c97e67c5ecdeb7985fe1f4eb3f96d7e99add06b6ff07a74046c346ff4c17c4a6bf3d9aca6eb39c39e238e8ee7ec7c3ee7e68b394f2de8f5c5982f99f15c08dcf96a2ecea5f97abe99cbb3fe5c713ee6dbf9eecab8bbb97aa1e67bda9e1fe69ff0bd6986f6690af9150466905dbfd0de9c991fe7a7f979de9b7fba273a86bfb360f3ffd3478dd25c05bd6f7ffe361fa0737f9f0fe71fe8f7d17cec2aec199ddb845e723447711a3be074ceb0867309810d8bb30d9d73ac23e772defce8f3a935b7ae6a62993746e37cee92e4f13b77e5022e0c58cee1222e46af49d06bd2f985cbe0bab58fe83a72395774bf37a36602f705ee07573e9effcf3c3613ae0a392ee30a2ebd9db91a7faecee5705ed6a496b82270b91b577305534d33fcf7a0bdfff87cd1776ad07b4cd3607ee3661c83d648ceb1dc9ce3a61fe1d860b805c733e3696f36e496acca09ce915b79334eac4bb414b7b7c079e7a4eb1bb7e636a9a46d38b9bc700ab77578caa2636ec7a9e83e35e8fea0fbcfed69edb10ef0233a081e6935120197805689cf1d667ab0e43ed1f53f722733bcd5dcd9931c9d23da4636f045f53dc4dc98bbaf72fdc22b22ee8ded7303ee1d450789a595b18d3008b65716b101906b3139c023e0111907f913ccf9348fdc90fbe046dc3814c2253769b37963f23aec83902f5ad0d97941d1938546faec4c17638b4bdb6701bcd6c6d116fa656a089093825c5cc89afd85b13067e542afd385b5b0178ec7229c202f1e7d975f754b7af4043d1eda9ee9eeef7fc58ffcee20b9b098e09685b7f0eb63dbb3a9b51c6a89da70dee2b2407ed9da2f82456839c89758866cf68351aecf75dc8be32e22ffd208999f8996b388b1ed3ce60af860747d12b0c3c83e7799fa31897cbbeb688eb18e187ec4518949d02c57b43f8fffa947a8e0591ae9cf21bd9e100dc17a68cfcf3107b7135e1f67a893ddffde3ecf5016a9e178793e5a64fe0070515a2cf2405e1497e1a2bc6617c75d5dd6d04bb2a816b52dba03dfa1f68b1ba55617b65e34e85a4d17b305e3e8c0c56a670a60fd1d882b3a1d4c7cafb4effaf75b5d14dcaf80fb41b0ee1295661aa5eafe822dc666881ee70bce652f3695769a7910afa1e7d1c091d26c7bbd58506ad42f8d385df0357bdb1a477f00b92f73f4c871e01aae3cbfc10eb14657c376101eb731431ab3d50c40f76e97b933eeac37c875e3daf06eb1b445ffa23994aa99f7fe67dcc382753c747a9f0b0b41fb44a87f0499656b5c72e80aadd0ba13f56a21a11db35e6cf2033a5f19624e8421fa4f3ddba4eefe86f952d04b78809e78aabcf709fe8707ce7ff5713da65928d460b15dec1c01eafbc866819ebd41d1a01352958bdd42b5cee87aefb92b3ad7833f88f9d25b7c425f8a236966e42d8e95be38195625911d04b99ab68f037a331c60a9741c07f2d8e10912f59083c4f270ed6b7a1e60bcd9fefd9f7a845c13d45702fb713edd7d86f398b61883bce6f9203b19d7cfd0ba49f7861239d74f5ba414cda4e8c599f2173d5028227d208ee66ed0f5f4b3c5f51c1e8a31d48916fdc5db02cf9d69d70cd6fcc2dc06ee9e6bec636cd93ce905bcf6b363ddbe56539dc4fbe86e526b2b5dbc175e3271e40583794efe535f42a7c50b7d721ed6791ae33dea5fddc570f1e1c535dde6289e7835b8a63a6975ac745cd3c67cae8eff65bee18e9da71c06c9b958d8a658dad55a8c6a7b315e4c783aae28bfedb7f3705f5e4d5d753938f014af41ee0db3da4c93072635302f2c8ad4cc2b9fd7a92d6f20db8d35e4a147e04907a39d9342f257f719557fe768757bb1df38f3266ff136eff0aec75136c2230ec148e8fa215c7491788ff7f94bb6e3af7c60f27cc847d51cf9eb0038c07c7ce1f9844ff92cc7be017aea319b9c706f2fe604f3a89eb84c5d6dfbae5c317e45d860ebe797ef72533fffd8ee14cbc5681bffbdab34a3efc2e738e3631a6dddc37e79f4f2abc19cd15a71bcb892f9822f2905e7327bee99e045be02ce755b63da2c6e7ccddf700e908b35741d9b4b83fdc7a9f5235d9f0de92d7af88c4e43ffe51e12de2fd6462ae9d37508be44dff3536ec7cf52e52a8586cb3a6b9e011e24e46f70ffd6892ab16d3cc32c28acbb8a7b12813b0cfde2e8a4587ece73c0c962ce8f5c05ce57219371f72db82a057977d2478e19d4c03ef0da2bd8e5d6bd7ce4daa49a652234ce2f78de68f86585bc29ee337b871c92ae82ff4b4ebc8090abd7f27a26e8aa7bfccae8f2eb9a8d223c5ee4a5aa4657f91df91292777ad5fe38b9495b0b7fb3aa7656c8dfd5931d503470b97c9f5f2fa6fc86972905f992069f7700b51a646d544a31d71e35337985df166ffc8e575997df9b36f86a4acd4d332c13fec09c1d1fd8e08c07954ee00043ce8ad48e71ddeace836a7f6feb0b8f7c63773f20ea9dad88d6cb173ed54f3e9ae4fc1022ef13f63bbec774b74b603d3413e2375e7d6077deb6c5a0282c13f94f7fea8a9aa3599444b41ee1dab66baf847e7e74ef36b4aab9fcd18b2d1d572f94a8e24fd4c774035d66ae0c3c09a2f788f5004e440f8026bac3cd771a5f6d3f3bc4f36d8f3455f1677ac9f7f8beb3c05333c91c8e4ee3dbb9fb911eee7b83d7e21ee030837a03e86f68fc82e1df920f7ee0789676f7251e64155d737e697b0468609910df023c1a525fb965f8ef2f7e04e7f827d0c786190311c9912d926b3fb2728f7fe787d43be0247ac27f5c3ef81130500c8b1ff3939b9d8f08af0998dce4ee201fa3e8d3256d83fa410fd7c99ffb063b0d11d2533e683562fe9e7e53847be70beeac8bb9b5a4969a259ae152a77cf784f35b9d1ea21b1a4b230f8343a03972f4ce1745349bf0a55546d0e7612ecd2241f1bae9f8013042701d03f8686db5cf831c511a927ad6734de2e1c7ad96d3dcf5c680d542f8f0c9d7fc0307958f20562874cb595aa5bcb48167d19e07611da1f3e7f3878ffb95b78177f369e92cdd787591bafe9856d76b8a7385611bdbe09997d476e92d412dd03684e5c50c9dadb3585ea94e5b06c73e78ad13fd85e7f923dfcc1d6bfbd9dfeef5dea3ada0b87e870f83269adda7968f8ab54f5a9bdb69f461edd8b6f7aed3ae3d3992bbd6dc65b00c9711dcb98e63097e64190357f55105ea389cb70c74ae302feb898f03887d9968476c7f80d7e3c26bc166e25e0e11a1567e992e3357a2f7cbfc7a2e18f388a22a1a7ade96c5b2243e0c344f902df2109a27eaa35c39e4df97555d507aab2109dfe969762d9e87d8fb4d8dfc3fd024d70f75b6accd309297b765d334cba93348861460a85dabd592bad2c559ce968cf5994e3265c92ee74b0e3d2e169325bf5c2e0563611e0dbbe5ae769d091ef090c8ea729f7bca7fad4f588f7a46a7ed023592e5ea1ff521e871292626ba57c2525aae196db9998e3bf6cb9d5361e1fa88f7f01dafef83beefc5d098d3525e2afea4d8a2f84160e6cb2deebf2fe96e6ec93b9957ac99b1b744eb02b8ca4b75b99f968b08eb4f9edb99302a59a70f4d7bec8f8668fd437579ff1b3ff27b1bd8f564bdf65a3feb0d3e748b5e66d952f9f2106f969f866628503bc7b6c0ec5807cfbbe4a996dade59e87bc67ca02bfa96c7e56979d6fa067ebeebdded20e85e5da182691e176b47a67694b2ec193c2058e70a8c44623fefbc1d1f7c104190e97ed95fbe69fde5206852a59d7f38686bab832fdfefef1f5e232edf59d33c2e8785b7fc588e96e3e544a00504c551c4d7d9be8fca7003411374ed28a0afd6bcf1fc5c3004e8a5343f4153463b16fa73af46e7638d2e32f59efece811203ba3e98e183b90ab4ddf19bdaca1cc93d113cf2acd4f0d307e04ec33328c14cac602a58da01b8ca8ffa78db3ff2c25079c6338447666cb483600b8ee06a7dee9dcd048fcc1da03b3db56efd9d0113071bedcd3c0abe7011ae18473f7486bfea663ef0c7abbec0abde6f978379e847bcdd7b2b54bcaf7e9d31f45d0ea7d5eeebf4c71d91a28580e18510578cac34823c95103d756775b8e1a5664bf219d8a7a0ab27c44222a45ed2e541307f0cef10b8d3086f88c6da14842c3908b950082566be78c0a600dd5e63e35ef02eb16d3a9a04cc4545ffb70d679e987da1d28ee9841ad107f07d4473891e113db1fbf13ccfef3f7c041d32ad116ae1668642e3b2c214f993caec4fb7d73761368b7dc55e098cc01a9ae5401f39d4d9eb77e01cb898c5d3d5bf8bece9badd7bfbbaebf7aa35d9b2c33daf00be5b1759bdec069225e909f3affcba9f7d34ac32369cc410386121f01a56a7031e195af70f16890778e45b6eaf77e7e8426ed3c32a4fa1b0b40782501fac08b4e0eefa01db6e9e32323e11bad62b762c882e779fb3f53c53ec9937f7e03ffc916efccb6cbaa79a41b7f75e6deaebecf353ab0578be3fbf9b5984edb22069fd18d74780a56d5bc2faabbde8721846cbfb825c8d81d974c02712362125c88282fbcc311b12987e6405003ec1b97ec97284adb0633e4ddefc803e67882402660ab9f70f58658e0fb9a0faddd2bc9c3fd4a2a026557d16f68557d6a08d017927ac73e8fd32d7f5effb11d75b0987782a7ce6c2f2201c8593b0e73401f946ff2cf4f83290b291b531559ccd9d405dc71cb926e0a62e43fa0beff5c9072766f7f7ce72801f7e589b674e6cdb797def2785eb7b3b3f47653fffe804425f781306c2bb79840eb1ca6d59b12d97d8c2751461f84ddfd1b3bf241876e40f04747f8591301626ee00787b5877fed1af6f639c3ca6d478baa28b08f7f7136edcabe6d9f3faedfcc6ebfc91d7fac85d4be31bbff0dc97ddf18cd4d6beb6fbf33e0b90e482486d01b403a754b9a256da4a5f192b13f85e08c18f566dcea5b55ddff8908e5b0c3f8796c9e7d4ca5e392dcfc826391bb8bbb03b3a5e91b159b9ec2a2bd3b8eb4737ac15c21fc6e696411fe1ca07351aede8a33b15555a9f19af2eab6b335b05f5de4da96615028f17ebfc15bff8ccbfa99d0f1af6c54e731d0172faab68aaafe2e8b44aac7d3089d855aa8f78de58dfacc0cec736fe9e8605fc57a80bb55803ecb2562bae552bb81fe2de674ffabddbdebaa7dc15f85ae0b9619cd75edfae3e627b6d7f05f623088f3c7a7dfe8903b42cf13424e0eb619fae937ef37bffd1b31ff9b56bcbbbbdd501e6039b89b9cad07dcdc3e1aa5895be807560865ffcc41be4b61c71165ee7ad36dcb3fef1579ff33c7f64fba7f347ced4b3eff855afe3f5ffaf7e85d44a3a5da24e9f1162c486ea4d6fab6a555b6b435cddc08fd88ffee35f39c2f79f89263b891a568d4d749c02b4e247e6e4e660659923e4bf01e583d63ba8dae478820e7e7f607f2be6d9f04216bd7eaa57abd98a094db631de17e565b862b9fe9475e9d59c7fbf8598478cf3249067bffb90e867fc08e6c20147d9a60277eb2d57dc6a7171fcc38ae72e97b1509ac704fa34d06a5f2da1e7f08eba119ec01d41bfe4793a1fdcf6f1dcb9bcb86fb4c51d242225c7437b12fb67c2c526fc27a5c523ffdc817020f4c1f32bdb5a09fc04d4fb5e7b123b3cf2f021d6f8e5f51eec10a2f16f4eb4b3a6ae56d6193a02eb034c67f8b23ebb99572d076ba1bdcc8effea475e75fc7f8f47beea406d5becfffcf7f39763f0f2fc7b8dfa49bb7688fbeadee9fd4acce895c45d56eb3ab4a8d5e6de73f8d21ff0128f6ac051edd40270975741ae16f6333ada0dee4a2e4a5e8b498f2207391de8a5809c16bc1fe94381bc0dda21ca6abbda314d76d0ae2b95f2811bb0da6bc2eab0fab4dcd531baae4ed467379ff1ee3f7ec55fffe9e309cf0ae168d24995069fabf3aab7ea476366a801f716451058c5814251a44de278e8c3867a51243c7cc41d47786d2fe0dd7740071c5c0712a19ab8dfb0cd11b63d83b89fa2ebd7f33b9f0d7ea49648e6f88f7a09ffce239e25a9a0fbe7d8a6e32f45d7fadaff01e784f35abfc323786d10dd0443b69cd59bc7547ddf8ba5d5e0620373e865fd92fb36d6d53003fd50fdcf34f51ff7f8791ecc573ff23ccbdc7ed9475d1eabd3d17ecc237a7ede8bb620dea3033cd3b069e72e297cb97ab7d5d570f561f65723d28ff0da07f0ec43b042d9dd66425d04ed18adc8621a45564aa1d75661afc68b77974de6ab8948bba64810fc2499624ea8256ac4e7c4e851d445a3fa10cde62c5abea52b58afb1126dd1115dd1ab58d1172fcd46ec748abd2fdfff27f04884af43806ddac5aac4400c6752e95a8e18615b6e41e4c378c42792de4b5cc7f1ba3eec76ce09f7920bbcf702e20a2caebb13ae2d46b7b813b7b5422d2e203ea4c37b98530dd98b7b9dfdcf6be5ffd923447bd0e1007d805d1dec19afc0b9433f7b1b257ea9b1138b07df0bb47a101ef1c538bdb9ac9810ac81e71274331e5bbf4df871045f5ad557bff0cdf1e7f3477a2f7be949abf6373ee4ab2f79b6b9646fc2d943ce9fcc3a44be64f12ea6534bcc801f944c0d0b8ece93bee64220dfdff6cc8d882f801abb98070cb0a2c5422cab21330ed6da15b44796bbf97a696907604ee24ea033f12984e3554a692042bf8a532696b31c8bb5b369355f3fc45b50cffa7e2436e2549c890c9ef1f1f51afc7d1fd23ee2da134b5d40b34564afb33a3543ff5d9c430ebfed42bb3333304e38137d123c61cebbf7cd3dea1da0928376086484458e6488b5b3b8107971290a368ddfefa96f031839310a76eb85281adb87ce803998e7c034252c90e77e90d696bfe083df689cfcc923d122b134e8bf2713f69ebf2b796fc0230f7e591763dcb531711d052c00ba661233056d50719dbaa085f3c5df434c73686744126ee1b09d4df53adff119673ef4317fef47fe9abdfc9dbec7ef6ceed3f3759952c58d5ea5b1a5d532ce97b7d36e7e9797ff5227c6357aec2b5074102e45593b888a7012b7f94ddcddaea2aa73e21e452d1f70f5ed6e7e21a0fa2144228c633842df0caf6f81a07b78528141e640118dfc467466640ec68ff88d5ffd08e96f81da2e701242d05489d12e99b7196dd0f2821e7f9b74984daac610bd0cadfe438b2bc8e40288c7bb595b4e753027712f5b39a6f8994ec29b78144fd74ff12cf6421bbe3fa92842dfa0395c249a7aab6786d88f57e29b057d25b897d0fc30f962210e504027a411447b64873a57e27fa0ce24be8bc390133fc4913816274435e2b73da7bf3d7ef3bc6e075eaaabd9bb1af998646a40e9c31c054c9111553af8dd70cde3f222d1fe0e6a4af444a224edceb5fa89fbf6bb7930ffa5f9ec141d68cb9d7e339c349a61958764da696574bbe40fe25a9ced84aa605b1b46bb2b64795ecb245d322453b2245b722457f20ca1c013dc10a257718d01d7f88db5214abe74a974a794ae52203af3fd9c27fd85241ec5b3aff6cf5a893ffbfd5b5f02b3a1407b7f4a959a2d855224c5a0fb84b50acd52c2fa31734301fd45299152295b4cd1ef1699cb08ff47d70145518c6728cec59c2c0e5a5f020dafa95448a52048953595ea455edc48f485eb22607f5de9268852a3a1d8bd3e4ad3a269d53cd0759266fc7bc6d8a7ac3014dbc41903af21bcb909dc1b89991da02601751ae46b9c079e79c6937f13b7a09d29b186b2c890f56cfbcd6f8352627ada11345dec56bb31d94873ef04b92a7a683512c7c834e45827dfd63dfe5f1fbfea2f3ffdffbf345757f62f8e0d9958b32f2dda0c2fe6717d930fffd606dd992b28fe86bc3ababbbcb45c1c25613934afc1991ff2ef6cca1ccaa3b49244e86103a502587592549febd5eda065d9d6df4a6b69434f9087bed1ddcc95c76c8ae8e9f71ff523981f14408f239efde883f6462423d029e39c93025c0149b21c4991b6120f9a97e154da05b5a49a41dcebea1c903535275037016e34f20147693f2d5054ebe97be9902f419b51fad45de9289d0c0173816ddc912bd49b8b03585264a4f37407bd8a04db184bf6902952af1c1a225cd716278a2d470eebe82e52d29382f1d0e53ff1217f76c0b9483ef26db8afa8d54f80684ca9dff943f34970a67692fade8d6861ea7b2d95dea441a63b3a257d67fbff83e3455fe0173ff24ffa901ece174dfc436cd734e438a4f7fb4c73acad01fee14ff4991e1a1ca42ea027a6799686d2473df3118a974669a94566288d132db1a4c99a3644ac7e83eef89a5a6bc13239146f6b9debad0d3c1ba94f95a6d3ce951d3fe69b7773cb7ffc3a201be5ca6bb3baadadb5bd76f2bedfacddb5171b6be0ef3af1225c4b7c99ad2febeb3a98b2e6d67284557392ea75c82f452914894a1fd1b1250cbf155a4145bee4d6916621bb3a81d927c84ff93073c3f7d3721df3bce1826e19608e75b24eed35faaee63ad3fafc82e01f63b3ce6b3b76d685191a2ecca977db9a7eabea40724e9041bf63a17b6ffc3de7f45cdffa8f1ebd7569725900d560d8d5ad763c7a5fe89f7742146925dab1f2d755b6a754ac41b3359d1445ceeb7a7d5b37ebe9b7fa65ff89afffa37988ffb41f417654f8d4de2c60a67beb19d150c23d04548733fed88f24a6f1546fcd47aba5c9ad9935bb9e9bfd58d30e8b30f1b2de9a5bad71b54a582fb06eaf27182c02c7c8d6ec60862bd14f27fdf0ad1f19dc6b3bddb97e5367fddb077400edd7bca6ae97442ddc825ef523f4001a0ac384a7b5e05fd62b3bbdba56097d9dbabd5eaef3b558cd032988d6d27abddec426c22907b4926dc7f7724b337a69b62633bff6616195ddac2a382e52b65d2b507701f55773b2de3a636a073cedcb9bf569f0698cfdb292c6285ae3bd98614081fa86eb1644c1cdbeeb4f4136b99b4f8fe70bd35fea177fff706c7fbd831ecafa1df7130db126bc0dbe63add6eaeadd7d077fd9cda472e68bc17a1f52897b5d3bfa8fcd67ff77f1488fdeaf0fb5578bd0f730bf02a311b4305ed48eff0c8f743930ec47ae4635ad83f5e7fa68acadf1fab43eaf7ba93f134c1eb84e90ff00bef0baef585e7ffd46c9d88672944cf42e604e910db98e6e5ee098cc6dfdc7f0c841b3627f3d3016386a0196a116400fe67a5ea68bf57b3cb5d7a0d982ce6f72b135ebca696e355f0fd71feb115a0d637f1bafd613ed60d8fc01be9b39b0b48564868be386de501bcdea6d74f4b351dd3666fa4ea91b2bf636f622cc44f03db87fc3d9381bc8500c35db0fae878d476600c0cc978def65e6116cf7e64274a9f075a6a0a68ffb2f485596c6f342beb95f7f178f90cfdb5c899a3af82cdce7833051f306ad4b68d71fd03d635b3d1a98b3a66f82907226c127581477f37f008fc08c8fb3231bc85f04f62ddb84a0c308ca384fdccfbf9213f19f70890b9a19016348383e06ad8c2168a82f0ea0a50eaafa9b683ddfc49ba49d237bc69a49b8f6dffa113c1f11625988e7ef7ea4e3fcfeb41f1d534a1c183c89eb8133e0f837c73c96c34498d958efdea3a690cfdfa49b0cfc81b6dce48ec16fcd70536ccad4e4879b0aead5d662536f6ee13918078bd0df349be96686fec618f486d50e95bf9917e562bbe1a4a1281b5675b81ab5825638a51d378b0df4c5788d1aee37cb5b064ae5d0253dbfa09d12f98304f7a5a0d5f9a8c1e03c1b28a3773a671d53e8077d08c63797fd46d8ac3622569f05ee008a2fcccfdac9057a42d5b7186b5e9179c03625ebd6465aee37eb763efbcfadd37f138f54f45e63cb3c36818fb4d940950cb3e3ef3ee22fe21192af6fd5d1808785735813dc4f827ccb46c61e7a02ac14661c48330b7396dbb980642e21cc88c598e34293fcf9b99dbbdad98eef34deffee630fbeff46d13ef1f9761c5c27bb4a7b1f2642408dbfc639fee166bbd96d54ac47bfd79ce8b89138891a6ff68bf7cdc167b563246d3ed7c1e668ab4ba6543727e388573468fce3de7fd02e43d845c4bab9d47d8e8a631c357573a6f7a6cb339b9e41275398c505f9b4f90ddb6e0f3221d1cabed72ea02b0de6d0c30e01ad47fb077cc6778f26e71adac19f49f34833c3529dafe799c96dfaac929b8e0cbdb1a44704cf74c4f36e376feb25bfd55c8c2d7f32f7f8efe191761e88b8d5fa218a7b378336e3eb77b9ad3ff7238413fce837e87e7ee67d759ae8b5b97997469b61a7bdf5742e4fb5587ad5fecdfdc3bacfcf7c7f87ee6d3e36234370aea42f06b43f36e3cd24809953583705f3121c7a20d3de12f77c82e6d3869285938c0271e4fb36de2954645d36a213a53a9a6c961f96235b5829d06a2bae9af5acc37c8f4eb14e80c28f589ae80dc8b6ec003bddb00a2d6038abc386cfd7f7c97f7bdfd5beffded1e970420e2b9fc86e205f8ec1a7ece547ff22235fc8f8f2452fe52b601032cf19b014ae656da86d365c0eab378fc731c2cfe521ff553c02792d777671b24b38d1ce5c06dd9bb701e1b23e76c89ff89247d4f5a2710edc51ebce023487862d0772e8abda9ce00e9cb7eaddedf9bdd7903db51a193f9113f9b3ef3fa587f6cc3b302c64bf6dda700d013466af9f299dc2f354cd82998430abd05734d75d538a1c896b39f63772320bed14e6a653be75925339bb0e608e9f9c8b8345dfd22ca2e74bf00285fb648ca588e770dc7593a1b3cd1cd43c3220f2a2e7b2725185e6c9c25a8ed164ed3f6aeccf35f0e79cd5d7daf9173cf1ffee3bf0fb92f3964bb9926bfd44f9ee5cbe99f622921b791abecb3399a17cdca789ef15e5a3e84a05bd82f81c4e963d8443483f7af153b9c77fb33e4234530093e4b61972ac6d0536f11f9dded25fc323c66b1f45e74f082b03aa8b4e3535149995e7d790bac81cd64524ba17bff000eebaf1fff07787cf9517289e76a977dd5acfa197d01064de0cad533c9297c82ee68e2c0bd9525ec962d1af7ac8df1acb9c52825896e4b50ebddb17ec8bced2a730b9340e0b3a0394ef97f2a63a697d0ef42da1c7d1c7a897c37591b62fa3cd19c2842445af655956e42dfa9c9dac9a3cf4f2802ab9c47eb9de5fd546fd2ff7e1878e76ce0b74def5e5bd7cd03ee44ff9a8a3d52a9fe4b3dc93fbf21bff4138bb61417494e581fcceee91fbe1f03cc7a6e56afd94bfff37f1888cf6fc989e04b7f5581eca1f861bad300f14c5cbb85feeafda209f445cb592c06c100ff78e50ddbc3c9c95746253ebcb2389a37b31f48294a0634c7fc3e1658f4f7ee41ffefe9777ea42b1142d8fe589c4afcccd52a1154ad1143daec56d3657d0a5c818c5649646cd8ccc50f617f3f49d52f2839b0537a267bc001d5a43b11a0914591dc957145b71a2a1e24a233d57bc6bd934e550f1610624cc0d01df0a9c0313cf0d41be96360498fba75c946b36550273d0e10c257ce08c363a7b66087dcbc5fdbb8fede79984ab5c8b665f89ae93708f75f6876eaac4e816f34aea7bc0c7024d9854733925a369056a395ae9670b3c93be68f95aff7fc7237896abc6430e82caf9b899193cc2250aceb58fbf56a5fec8973c735e9f700975351cdcb308fc23432c43a5345dcc8d8a5a2cf46bfffd899ab579f5ff021eb9254a85351fd5fc7a61255ea9d71a68312a37eeaa1da1f3cbfc348f356df6619e64ba3043a5a1d445a42b948c736258831673596bb09b584ba5d5c9776484fad5eb5ab6c56d7852a658fbb2ed2b21b887f4fce15cd1519979b1324391d707b2e190dd002ec2e4c93ffcd203f8cddf7ef880ec4595e7ab36f788356a6c496116d7c25590cfa464651e2bf12890a7673134c375ac70ee3be5630c4734b57ee63efdbbf591319909085a8ac8fe2daa81c1370eba53cf737bff8a0dea6cdab39a3eb249580bdd732f218bc2fa631994a0050ffd676a3b2be46bdcf9d58ffc13b9ac673c027a90672a5590815888dad18bccb0b10d5e3b2b4bdbc63ef13ec1a07e37797da10869abf1011a94a68bcff5edf27e1db6f3dff79484a0884cfa73289d9f2e64975556b36b683d5faf6e3625f0b06cc37688ba28649e097b120e217a4c83fece67b458efaff0eafef2e3ebfb9ba3e9a85a52aa5537f9d403ed9d8be9f5fd80ebbbaccda6a97b2beb85aa888aa4acada3f16e8b9ae5ca44ab077323fe0fe011dc83079cda2bd8416fa96cf8a5222b8a6b82fec99fd66c9f718847e2ec7b4eacd5ecc273993eb4e3f5733344ab718ff32139ccabc2fa4bdd793c7a5fcead1ff9b5a7f21f39604e8ab25576856d1e816b0b732f0097183af852c85c004f09e6af589aa22a7b669c07d41a9f1be867429dde468f57d094c4d826c01a021b9cd7213a6036b5530e1a9e5bf8c43c27bd7e683be19c9706f345ac313fa915c2f8443be8d18778ef01b45b3cf367f8e4a70e93533e175bddc57a94a09b4966d3a3ef674bf544392aa74b3f37aea17286b9f2300f062626d127ec777e3f27ecffd9dfffab7824c7b9a537e89f08df28cd95624fe9297d2f3394d06af1c82f3a50775bd3dab0d7397c24e3698d615606d45bcc9e975e3f2915661b221be33b9abd46bb6447777341bef4befc381ef9268ebd3f8eedb5f2a60c6628a2021b0efd2cc09489268641664a5963e0e84294c4affc8121d7567651dea7e5ac72532ad54c2a85da80375286ca073d7119970d73cd5df4d0aa9a63bd6045b3e5ab32d28e3857f89c9ba2dadfd1f5e4c7588b442333a93056a12d4a19bfe0913657f865e2b3f78a53bee6babad7fe95dcd7a3abf8eea37c43cc92a0893ea9267cc33a27133223cc3797ba32b9ceb6307e727f8519965bc0b7a00d4a35e05f2117f87f80afd5f52e76bd62a085777664a9f6e2fc2df2f51b9ebbc7911a745737e97601b933d03fb0d570ee0a77ebe66350d4c6fc210ef2335eae1db7ba23b7bea3d35922bee3dbbefc7b7de427ec4ff4d4ab69b7f68de8599ec8bc2dbedc1a57f0216f044b614df58d217e67c32da27471cc29339cceb7a6a203272b0ffcc60c9743cb61d545b0b5ac7ef27971e22a2eabdbd6de3a5b57db6907e0c19527e25f31cec3190dc81dde32c06da01871d76af460debba55913f0e504bf00b717aa854ff5950e07defdd2a30ffd3173aacb4d7efd7bf71ee4ffedac2c8c25bb47f2bcf5221830bcaeb773bf3a2d699b92b69ef1d1ea637dbd8f3f7dfcbb78e4fcb457b71483ae04ed8869baf5b7976b59bdbb0630e74c6e7b85ee9a87eeabad937c7d7972411f44293243d80690eb379c55be0da1eeac9d4dbe920c479f0761ecda6b645b86389ffee835dbffd27b3678aa8ffc04de803accb37e535f079d785ccfa724d044f62fb9ad1d71c4f3ace3dedb46f67dee7ddbd70ff58e119e43ef8126cc36de26b7bdc36cd37a63acc89c2fd7b016ca689b6df36d7151d6e2aad80289b13424aca7755f9964c21b9e63889533c8b4e94e3f007c883934cfdb0a45bcd8a6132d5ec837b6b9c2ceb73fd74ba82f3e847af88abbc6e2f7b3962d323f9dbc2fce4dfaf79ca622f2757c5dd36fdb9ae87d9a2ea0f2ed6dfe8e735dff78eef15fc723cf750887ce708ecb75b4a571e1bdba39cf649890d9e10cb7bdbbadde16f12b94211a2b2540b6389c5a37b6096f577974bd88dbc2dd36a610be17c34ca094b64fc37dfadcdfd89e1ff423a7271d00f23d71fd1759822b9c8ba3c5a5906fe6b9623f2693610d4af023edccc117bc45a625834d8f26e631ab0cbac8b7d3c2f407cdc281b97730c7e5a89d881292b9b41c65eac599640e03fb6a10fbfcd02b039b1e5a8db29d7996ce987df303b8c3a41a8b2255819bb7e7f07c1e2ff5a7a728ec2b4efcc5577c538bbfeb163cd7f2f121323df2d969140c82c9f25ddfdfe2a907fdff28dacab16dc7735bfef1f549e2817f118fbcf60d530c9e5b6a6a566a6c9965c33aa56c08f53b5cbd52ea9447effc53d83103ed28f3fe4ccb02b90cb6ac5f6ee75b0ee18e18c5ea4ebc12f6ebf7ed62cbbb12b0dceefdcb7f785e773cf213dfafd364eafc12fe5d578163946a9a2be4915609088b988909eadf6093891f11e60fedc4474d9bcc30866c762921cca2803a2bcee8e2be703205bc9d1909aacf4e4d6f97dae75630b6f918f26384b74b7a36c9fb19ca76b51503833f6ad095001afc26ae2729d3f15642d1194dceabc37d6daecdefa2b59759c9dd0a7fc6287fa684ea913ea1ee7dc86b80d98a27678c2cad5e98e1760dbc6ccccfa26915f4dda9c69bfe50fde37f1b8f3cfb118449ec2dd13e829e0a88d3737bc56f375b1926b54026d8bafb10d22f629e0c9e916eab8c879980ba82e707b65c2c987b02b17a249b6135c7bd13f039afb6e0db3aec8ffa91878eec803cb6b599863e0707fd9af0664870d3333f0dba973a0dfd2f6c1b3c2710eb549a8fd741c7aef9f6d046c1bb8bac7467ab6cb7db5d281578ae4ba738ddc6fb28f2897b11c5538ebc55b7fb66eb0fb6071ccd01a797931644959ae00e524f79f4eb40c5f60b3ffbdec7f38c53befa8c571c6253dd67184f5343bbf7777cf363fa71596d3f91df15f1b58339955885dd2a9ef292ffecf1efe291c17d6fbe613ff249353360ad53dbe3351404e8959066da11c7cc23f7f2d5236f4fc5767bc63ee20dfac1975bc88f113e16f4a13beb6d6fdbdfbe6df17c2264bfb777bb009ffdabf6fb0fe391bbe65ff73dfb246fefae5d3690b7ef81e59a985735b23597ac46acde0378c4bc23e847fc0ef800f7e16fbad9e88e4faaa4a09ee49aa0b847b428c97470e03f6f87b5a78f2edb90257e046bcbc0fbeaa4e69e0fb34bb1df1cb383f5b9fd30f906d9f0edc8ecc72697414f8beb02eec0ab96b61e2ae21ee10e775c86ce7fb4b3755f785ddfccceed725914e9ab7fe4db1e3eab569a6b753014bfb71dfb0ad6ca2c71dd43be63ca9fd1eeffdfc72383bbd6aab39d50c0a1bae099e6f28ed6822270cc1d658a0103771bcf7fbf6ba1e059ac613ac13d840d8e4dc9ecc34827da4a17fae4e83b6da7ef8ca670346477e2177dfbef34faec3b5febe7fd25d13b1e500e25596532de999663f206d126d4c8e408e24b006fcc2fd083f76d9c0f338549443476fc48c07a241e4c7e9e2606e9426a357ee17dcc93d65f84d55b207bb165107b3d4d0812ef72569673e9079123e79f3b4bf777763ab91dcaa379dc3958d1a19d616c1ebb19601d9ee9f0c9c3b7774aaa5df6b6f3334f95c8975d42e68c10d5d9a7be53bf7b5f4b6bde762eb545f7b84785e8fe35d30dd6b6c49ad19873f7dff023ff2e1ee962f40e8fc0cf7d7a6855445b3e96765ec6ef7c7dd46a8adf7580f1951616e2b2771548bf39ce9b0fda3e74bcf7290ee63f15d76b9d1ab817e4579dc56fcec7747e108f7476a8c35d273cfbd09f96bb0b42d5933226b91eb0ed9dee15d64db43b3cf25437685717eed7c0fddda0f30b73d571cecfc30a75c8b663dd5f8ad86ed7056d2d3ddf5d77017018d08ea441371f7006d4d9d1e7e2dcd62edc45bb3846d73ad0f3de2ed9a5ba2d99cd3c67f38dcfd6d66562b0e178310d66c87f8dba7e91a7ba54e747ee7f6fef13aea77cf125aff511ace34f30c8133f8ff0ec3873e133ab9852f0bc1bac2780a3e9942633427e5e5fe07f138f3c38fe0e757bd285c435936d4f9777597ef02f8b89c13ff85bed1c444a1bc71505dd354bec47065867c4a7768e0e3aba7876474ea99701d1ccc01ce3ae46716a7ba03b3f02d8a1d7fa917fc687d8ad1fd950dbd0e74e86b3cbaf465b17e8a214623f47df6824bed8e0a77992f7e7e095f9f0238f95abc4dcae007cb72b41e384a8a142a48a50bf0788dcd8048c94857bd95fb061bdab164d3cf22497d566bbbaacbde3ee167bf9671e08e2aed17a96964cb18f1ade73644fb92cd7061c71355c82fe0957c234be9c6bf73a72bec437612dca094c6e83ddefe586625089b79be6e750dfcd9efcfe63eecd7fc3879035fabf8047b02fd94ee8de8baddf319c33923665b563626fc7c2ac2662a3b0fa9a6708f54cb3a81cd9fd2dcc6ac4bab96887d86bcd6c75c1df29df8181375b32a7285230370ccf29a274648f3a3de2c1438ff8ee477e329e6d0fb43bfd80dacd779ca1d8f66ed1ce7dc4fd1c843943547a081ef9861ff5cc9bbadbf0afb6fb51e780bf275343894e3b7ecd6b5124123c03115df56988c8cfc0ac2b50381576cb59a0cf77c22a4751d6aa4974b7cea1d71fae21cc8ed14ccdd5ddeb81616012c69769076dbd0470d55dfbdd211dbfa046048a7f58ab9efa5a478169182e0af6f01c4707b4f1f10cb2bd21ee4453541acdaaa29de4c33d2133d1c86c82ff060ef9dfc1230fad6e0fe191673d76f4b3c6235cb2de6de809b5ddc9d50a56164426c85e39e64492e4776a879f7b059e27cc5ea4cf8eee6878ef5fae1edfdb29bbad30dbedb61475305dd0f3c5792f784d73c742affe6cf68f7ccfd6f639da4e5d15968333da9d6df5491f7f57732078a4d336feaeeef0ec5f7e995ff5b47a61475c0df39dfdb8e6fe455e25b3acb6b5c4e411da37143cf79ce4c02628f212e33ee1065728420bacd8d6f2a7993135e696a9bbfdf49d634163c63599de2f3ac31aa0783c1399328faba9d6df1dd82457cc3ed6197ef17dc65dc9fc0638e9e20f6e8ea541bf4b31df7d2aeeee886204852f77276ab73c609de8e77a48efbfc3a7bb7fd6bf8b477aad1f39213cd2e59a5a1d565c3182d91f038ad6d8dd79d783ae2098ee059948d7bc7e6e8eb304f7609478aec99c523416f4dfe9b75d7ff7e69ea6fbdd60f7bed9cec252b715c8ade35afbb8e5865258436bff5cc3f8513cf23aa7e58d3ed9eba9aaf561aeebd37c15d2c38f7345ad4e16ae8ffcaec7efe9f72f8c42e80b69675ab5bbcfb06032f32aafe3eae65ff8b9c1db9769b41bbaa48eb2b1c6ed0e01f43e01ad14a8e3a315ce1bb7dd87b322f942746f0aaaa677c16d360977f2b4dcee46bbb1218296f283ff053e10bdd1c8d276134350e9c40e26fe3959a8c88475ba261ddfcbbaeba29967d7d4ce89ae6a7a55e5aaae1a4c924c2e4ee4522a6821eb07d574045dc175a5673ca03e7126fe6fe391e7b90f9717bf82e70ee139eb84a7b34f3edd4a3ce02c3051b839a916efe319b8a1cc51227aee46b7553b9bec76d09b916e304f1450de262c361fa9185f550778bf5837fcd58f90d914f63f561f39111fe968aa1bb5baed449392d87f9cdb69f5c220da30f4afd536fbcbe3ebdfbbf7211af2f79a36c239fe00566d35533dd5af78f562f2ccf966355732cfa46aae06e4b6cc8fab717bbf1a5e01b38911d2efa957155d4f3c0f92cc1604fdfc262cd430ef85bda5602d7016e54b0f68199b7d8631683592dfb3bd1af2a51aaf566698c8a05c6d3c666bb5e70e9a926a72a9b3839aaad9e643cd3127c20f0b3c2b1de1521a9889134a6a7b56bb7bd56b67a4fd37fcc8bfadaf75c71e78af76f8a4b3eba42ad8d832e00db5504b2fc62a691e5144d66f4e118be01ba80bdda714e8d28a2ab572dfe949f8d6e4d02f8eb1874ca58ea2d6f15459a837ebe6b0aaa9a25817eb698c9ff0c74fe391e7595ff86f9a55abd112adc209e8d43ef980bb2dc675f693f48e355dbee5d23e739ebf706c9fa3318af48920bf6b2094cdab53799bd6debcde190a689fe0ff9ba48e02b320ad11d878fcb39815ea4c655416dbea41cbcd067fdea7279aed72c9e765a9cf510465bf72afb16f5a79b13adff9c927a5ea32c5b9a9cbaa9ccf686752856c6bf5ad1e9a39d4ceda4e2e624fc9d485cf23dc5861bf0575903714e15de60c3d493550baa03b4ec65beba3f75ff1c1ff613cd2f98ef8cb8c53bc87511c5a91f9f0f459e5d5a5c1c3ec5517a1776483b84c4c0414b7fa3ea52b0aaf0ae1bb2108ae36ef7a0ca94087c99c36e9cfa3275717b40a57b4ba52c578aa4ad097d8e6b73a9d949fc523aff3583c6a178f0a848a7107997f67d6b4ab1ae7b89cb67f847bf515f6ab0ff96e3ee02fcf733ddcad867c4ac9858abaa6d4ab1b8f162be4a76c84edba7acc156a31a48a073b26ee6bfdeb8e529c0f6a0fbd1af89e8c71bf0ac9098ed1aadfa872dc27d3e13aae30ee1ded59ce7aadc9d416ebb75c318ec95545dd9a6161749ced7befa8139bea4e55f300f99bfd65a6a5b87e34a51c85e04631ddd0c89f608ed6e665bd7c9d75f3cfaed17f138f747681d8dc06e72c9eead2948467d60da958572956575c493dacd7eaa7393094ac067b68389b55c6462c7f8ccef629130d21d9a8c7e4442928961d62adc54eaf175477ce2017a22c2e9fea2966d4b3da53fbe879fb7bdcf9158f3ccf2ffc2e4efdab78e49e8bd1acf56145a373c7358da7d54de686201b0bd34ecd1397dc75d87fed017c4cf7bcd71d9e725d541765c18a076e02d979ea9b3a20bdf0ea3bb2241e61a5907e7fd0cbc273887de80cd6fa08428013192e7a6ddef08c711be40331678a32d40f7584fc88f9ac4503d1afc1ab6357054c08d780aa31c72a5d2cd4093fd2409bd8bacf0480d75d0c6581de7e4f696e2ea86769095a31045bd280812a7ab8d7f6ba2d69423b33e4ed7e5d7f32f7f8bf8f474ead1fb9fcd6cf38f42337aeae7a7b631aeccd666b38e6d85080055f1898c9a7e48aa6aedd8b437ad270ccea76b5101cbf8ec1365a65a8ef689821f5628f9ef148afb51fdfcde8fa7fb55f8f19c411b576e4da368f4ee07abf4447185774fd23246744f48feffc82e1a33e6dfc467fec17fe14991712184a992631b2ef6a756119cb20b5781225e523c04168e7f2b771d803b51e7def6ef7d62fb3c93c7c2d4fd0a9564fd880ccbb87395bd887ec55ebc2f131e9d5c1cf8b70aef1a42b17696fb3c14cde3bc0b0bf7751011ee1f6ee86a676e8356d7f3e4de6aae3d9ea54b0f0f7de651a4b54d76784d7c17dc6f17fc38ffcfb78e479af0e7eddab8f581e3f0ed1caf63d7eef5773978e6aed986c885a8145635da86373dc5faabe23bb0b2a9d59504544662ae87c1368c0523ef082891623f62fe9fd1cd0e7b8ca131e79cc65dd7f33a3ebcf7d49f79a964b40c5ee667f35eacb1eb3302e5f7d40abfd8e5677337a6101b63e84fc8f70a0b7d76e57fcae3ffcb9f60db57bf37845087ab1a885105915db592d89425db46a160887ecf601d36c74ef847c07f217fa7e1f52ec179f88af13d5a0eb47df969a6ab8b70c7272d0d156d3d77e71b5d7f4a1d3d9c73e7c88702247abf65a65f6d13ede2725e70feee745a24d659ff26caac1e75c87f483070118a8d96731c37fee73982d42b0ca93dfff6faccfff0d3cd2f911ef4f9f4fe6a2929e669fda2e4a9e12d97db12ff795817c09a875eeeb50de9aff1f7bdfb1dd28d3b57b31cc5948c8b63c54465948020133441195500e577f6a570014dc76b743bf7f9f6f500b45a8b8f37eb6765e9a977258627e0f5ad3b048306049de1ad64f7c8225c2f5905bffc8156ff9631e728dad22d98a6f2b4f259697c1a2e113bf01cff18398d8d32053fb51e0f14b04ab9dec7c885e7f3f7f3cf1c183ddcc8fa579aedd8edbda65bcd9971cb7ddc49a3b68ed45a7a595b4f26230c36c417c9d0ea83d50abbc3d366137e86a55d069a05e3ce028970ad36874c2eb426b7e1549dc02e82321e8825a4dab6b8dbeb8aed839c8c286ca6e24b714ec7b795b57dbf181f0f9eb1a9a2bb1a8295ab3d15aec61ed48ae3ab56b15bf05c7ffad3dfa5ff08ff0b37a2be7735acd3014456ab125314f8223446517f005fd41dfd55ae352185ff248999e6dc369d839d440cbe319f29b195d031eb4f0bbf87eaf0809752c05ec29962ec3f363fd49f4115ed3fb9627fc8e2dc5baba4f5e2cce634fd7da60d7d23a801a0a369e34470f722c69ad74ad4bebab83ad895f6974bcd2a67923f8fa0b1ec279138b97a238287e54680f3a43ad1795ecf1f684fbd047b9a8aa0dcaf5bda4a9c2d8f6f0bc76fdae8d883d6bfd80d78305a40ed68fa0d46c40cdfbc027d1f6aa528b43e5007629e120c4f87735cc438a490c83b6b10575b1dee5060a4143aa13dc619209809e62db519c02a9a99eae3b8db98b0682369c9a61077857794db0fca9ad52f8ffca3fc269ee5bfa4892b36c2bcc67c2e4e2a9caf0ddfbca61e6ef506ba48db00470b6735834b68369fc02f555459a0f48fc2c1013cc30c5e7833af11faf1239973c4bdd25b82896f0eb5aeceff394d446c7ee23ecfcb86b42d405b76571bf06d13320771f6bec4e87605b09dcd695fa14d033964c344d4716abaef6eb0ca60c460c48358a7eb05cbf150cd1c5b0730ea6222b4bd937ea8029426ad106843e1709e65710a80ff8786affbb8cce8d39e609396f367762697122754ccc843ff338ec0ba3f9fde55e887693c38b36b18dde90d60a867c18b044efd1b90eb5bc6e79300a9607cdd04ccdd224a147781cd5eb625667fd27f8c87f5d1fe17e775a179e4a4b807d41f803c1ca90a763b059452aa653f6621a954af6a16f1bfb0d523607ac0916e0ff8457e421ea5e2c10fcdc3ac1f12b8aa9fc4b75108de48f8cc56bbf4696a7fdcad6f5685ca90d06ecfeeaf834dda10641ea76d2ccd79407407d1488d7a2fe0a1e8795466fe0ef552da7e54fcefb58edc4b24cf3cf89de03d5444f987f0daac7822657d41dda085ac1762b6d88c7c2f3b2988e493c6d4ed8f81dede90a6f808e9bdbb6ea782dc6276f7b7002c76f6f91116fb567a19bac599ef856205697c7c4150197c676e7baf6522d96f48608f5a968659f85e774ca0d617c5f9f59b82839e0595a517b8d6c5d7457809f45faf0d332ce7f531f916ebe3709863a7f0fb4e9c268db4ca4b53cfac26eb7e80d965ab5e5a8ad6866305f2cafd37dc17c07d3b2ee4417bc916e27b67f8fe93998e6333e92e503a6705f67fe77f1b7182e8a28bbf1a8b47c9d698cc6277913807a40b04ae0fd753e7b9a0b98d3a78eeacf0f12482aefe121d3bae657f151be17287ac547b9fd517776f338d411e61f2361acbb8185f586107c13244f12e620146e6d47216041d271403efe34d4f1eeae4021c692eefb36897958cd0a6cae289e724872cfc1af027e8ec1e9550fdaf585ad87ab223220a7f28825473d1a74a80d32e521a49eb12c4eb1f4d780d35253f4190a00b115ee9789dbfefe3dfa5fd647b2fa007cce7cad84d6f15c42b0a32f38eea270a9b485f1e6499fef8430dee5406f2178284426b63d7db17fd197c3c8912b5d7d35a8e8f106f9836dc3764116b73d4cfbea58a6e6f5d88724a6f8312ff928fe16e78d437a9dd785f16515c6584a79f532f9dc2775f77252316f21a7a61ca1346f3ff187043ea99a5d47dcfef5111ce490c51687e4ffa43a8fbed637ddb1be6d2fb6fa0ead0ba7315a628a51a7f53c98fe56b4eb37eb332292138b91c6af37ab89be833c186faeefb70ad80749ec75ba1e32bb42ccae49f953dc779e5635418d84cb7ad4b475a851a51ff4a37ecae0618d93b9d36a1541d7cf33a45fc4bc5ea2be75e2f3ff282fffff431f79ac0f0499ef7d4eeb6115b1dcabe965bda257175ddf267924f059a01ca2d9a2a9d72ec330d6eb7aa3dac3745919964eab407035bd3978294f859dd8003a8965ea6582e7640aa9bde59e37bc3f3e2bc18002391ad3c899afb79042d12c88f61a2671b32141a0eb1c3a4eea69cbe6f6b1b85ec243d0fbfa489a374e7c21758244379d3b5a7f206d57da623d4080a1a294167a9be4dbd371537b5ff4e6dcf3f16bfb9ca31cd648e9bec421e87e44bfe33a8b45ed4ff83305741412fb551c998146d74f18e99dca45afe9dd7d80d7a74fe67d41fceb54df00de8ef5436130dbe93db105b64c266dcf990cf1337ce4bfae8fbcfdfb94d68c48cc6f95e91c0bccf1c7417f230d2b7a7f6ee903af171474b555ee3b3b0f2d4ea25b740c7da88f76c5056402cd1c176a3c0553bdd6aa361b420130ff84035ed503b1a1c1fd8bf8fd22892bfb7d0c478be838443e077c28dbd7c7c782eb134c2c16b7c5f2cc299a85a56b04bb9dd8a43c312015273c07acc59043f89e1e925c531ce414a391c416a3d76317ec5a8e7b69ac517ba7ebd110d3f16c8ee64414123ded560fe375e507fa6451b273eda36ee826d62798cf22f1ab705d4462798339513be123a15bc46eb659ac7549cf5dca8d068d8710c1f65825d6e33a7bae16a8584f9aea795d0e2e83a65e1026b46e0c0ac4dfb331fe9bfa4856eee7b967d21bdf333a4ff24862c869c7f2aaa53f950fd57e34d29f9d82fe726a3b358802395e500e593497cee9bb36d05a4ccbb12262e7d68daa33021caee239162512eb456b5950bd27e523b290f5a9bcdfd27cf639d19b467ab1daa215e9481dc430e51bfe1c7ffe8a77f185c6067be1dc01cbf049050d9ef9c6c30ceeeebb8ddbb602c4f990837513f40ca811905f32cf358ca0cafc13291f891ff2912c2e22e605e5d7fd4a393564b4f411e505690c35b18f79c967a6a08ba6fe3a112702d33d8289dd9d90daf41a7d16d65b2876d682e06a7ac2022f0b7ed67a3e962753ffe85fa62af86f84d856a6831fe223ff6d7d647c6363e29ff336b6ddacff81c9a994169ae2ebb6a15627ce0479dd45d75e0d4aa841a3f67a078a6b9845b301ff418c6cfd301e17c2b3309eb8e2eb50a47147a2e9a9cb6d868fc899f6ab71657dc15427d12846a3edeef4d5cbc4833c3d909aa80f1df789a0512369783c89a4b24e0ec90445d46159b81449ee63f5cf93fa85bcde7d694df5925291443592137488913153e3b021117f43ca4786643dd2f8283e0e6e6394087f158358182fd6135fdd4c02afcaf801192fc52216a19e14dc47079ba2df8d04bd1014dc83ed831d4da8839f4b2ce06b0cb8f0e2a839a7b110334f508378aa564d41ec8fcbcb4d68cb6831093b8c474d35b067fec0fefcafeb23597cdeebff5ce59908dcff40306119edc7b488e088abf380e4b3edc745d73f3f517b11d0eac0a7b85d595c2a54407ab89a440b4b18e3cb4c1d0a2ac965b8aed5ce79c34779086f21a9e187f912e0c5f794ad5129d8c64954f45d916428b9e10ebd9e103226b3306e1f97e7e5b353b32d7c6ac0bf2170bde283f50739924f52c71e2cc16019a0b1be30def9d4360efdc91cd3f2e8b61ecb6491c9217fcc4738afc07c71a74c9658a791139e11dcf090004b9981d08358afc96a50099ef0332fcc8616329f97426a87ecc066b673bba7a08a7725e66993d83d0aaa164ed6f5a1dd9c525c949fcb43fc6feb2357b6f21b1e72ddb80d65446c52c4fe055a1d790fd172e27a32d9400e03d590d15310d0d392d88f425a3ba9d646cac5532693eda97c294f76c75c50059bd7644f7c29d7b6ad8ff2c8b4ff1ae17731c16c196bc2723139d8b97ed151b71d645cf24e6bbdb1731d6372ec0c27a7edd4b556d5e5e9b0b10d64429c16e721b7b9890fe3b528e608e49183cf9e4a5df6490d68140cd481f79c56f4d49bc711ab59226579e5f0355903f3663c1c67977e8e750bafd72894737187f1c98598e6779834ee4a2c1ce3f51cea4ed96e6788962dd4cef96d6243d3080e32d5fb446160bb9bc2e43c2e6edbdda39e3f1d44824be6372717cdf2bb62c153a71ae842ff5fe58f70faf4285eebad38294aefb8eccc3e67f1bd03ee9367715aa4767750550347a1d594494ebc8ff5003b13474b2cac0e527680cd3e1b21c5365dffb019f42725c05ed19aac8ebb27723de87d3ee2b3bceb2c9607e175ee11eafb0596306c3c350cbd32294f2a93aadec127a3b21aa0aef03c05fe05f91b6a69daa8eade2a6af5492e9f9fea2feff112d0f0299244b343627fc34a82040779258a8e1a935ad011b43b8c183cbe49fd866f5cf9aac87b9fd89f80fe0f087d0f921a93168bb966bc1762b6a2d63ad8e353a22f66834903e5268abb11e5e988e4f0503f0a89991046a568e52265d2ec5a93d6a40dff25a70cfc6303d069889fe9ebea54bdbf47ffcbfac8addc7f850fccf8479656537b499dfd87e235c6e0ef10d49e7eea637dc4075acaf07149ddbf144384f2930be0e882643283da51aebd6938a7ce50180783c4277fad2bdd8fe39ae7a5588dd49753a57e1cf74864f58d8dbb33829a7e8a309eb7ec606b0baaed4f3a642c049724e84f8dad1e993d7b548c4512e78408b6631a97f5f00a982734b6b6d95923a8c253911695d23a16797cd8613d28950ec298d463c9113f12e7919a8d44e126a6e0dac6c56d5545e23319111fbbc5f80a8955007f078dfd055e31afaf62d768b5bccea45b6e3895490f19ab95a82df3ecfff837501f7750f4d7a383a36c4fb5de1a72446dda37ea73c17a4b2dc3c31ec542bcbdbffeafea23f49c527bfa2c79fff1dc805ffd8ee661fb602399757b613774544283058ee7e45cdb86c0de83f908e00bb3f8298275b83f4ffa905747741cc07c67b8ef49be839960ad50daf9d806977e766b9b4bf5ae80c4cb16333c95d2f78b6f07d549695a051e07111c3c868bc70abbacfefa356ff123883e2158fb225007d0bb82d025e39e3b489b0c2aeda64e6275af75ad90f421facdb9b76ec665ddf09fa2a04e54b4d4aa5b6332b473d1d30424e215d3573ca8e1d8ea78ba3d715a8db5d39a8c0726de95301ff03dc16661facb8add8fdc1f6a5c41562fad09f98bf8badfd93bd9c6630e6ed731e523dfdfb82f3d64571e3f95ffecbd87271ad32b38bad46fd31a809cd602af20988719cc72a28fcc18a24e4469317a09d0b632d16c2fc107a1f633d07926949692f86199f19571665ceff5f19666a52d247a15cba1c47cb08ebcc9695ac13c0e4b5cee4b261658c8ea27995c45929b3177f61ba83142aa6fbb4104995dc10cb0ac1c63ffa43c633ea5033e4c269e81e975781ce1a7d7f62676ba535d1cd65db49ce893c9c4682ee3ee748429ce1efa303187e35e30b19009e8aca87e9c4ca4490effaf296a586f7965f1db4f5b7b023160507f5dc4f3b22171c025613f91212289c41ab3e743dc008b09a8323d95efabfbf9fe65c3ff0d93d88b747f523e426dfae6b75dbd0c0d0ee31df98c37ff0bee3f27fa4a7152983cd9b9f9147618c50d863c6fc0cd85dd023c03b15a4d8e377906dc2982cb1ea2574052db3bf658bdf85366db0a19ad02f999c73779497f8b8c06173fd4bfdb96d0aa728a654bbe037bd0ba88f52989f2388804a4b58759bffbf47338dd840746649ca11320039383ba3753743851f0fd048ff9925f4ac706d4a6653919c5741d78ffaad617ad73918d8fc43b4c8a2bcbf5a3c278a49d0f0dce7b824aa33c793544a78b5ed750050253b372417f0e4acbc57cd9888ef5606808868df5c25ec727b9a2704fc8be56882db344b071a85f863e6f49d686f3f994e7673ffbc8fe243c11afc783f5fa093ec27cd779c0b91204630a67959c57f94bf8485e2889f9e920e81f1668d9c2b414b09cf65bacf922c852f2e84ea38da011819455df631a3bc0bbcb63df094ec7700cb4556cd7ef0b11d862081d2966fb9ff20d42b38c8caff9f7e815c8de70bdd0b9a0be6f2c83bf4ec263f3b8a37d82fe4364395c1dc4c744c6e5d2069f392dc3353cc33702a0cd066040e2713add0045552382f82abf43e2a0ebe4590ba65fdcacc7e7d600f77fccd682de4b5b088dc88048c6d6c69aa2a90a050d8338a86e4d072aa6aaeb1250267cfe835e3fde0891313716c652ab453d6305fe9649cb88d527e2b3c7f2015e13d0570a44ef845860acf788af7e531c0deac69af1f711e00513cce01427389fd96bbf6e57eb91596781f21171295ec465f9f45d57a16cd7f1eb19963943b1242af87a1103f81e3efffcfd7b48a888e5a8d80c6b2d63e3be9ecd6e7553eb56cfe6e5d5d89e06caaeb4557670bdbc2abbda6cf25cdf1b3b633f792e6d5b4f67e36ce2f7879e691c7bb5453ff68d53b53475a6ba581607c6395085f2f0153f2bc2fdde93712cc5157e6d8b0e7e1f90f7bfdfef36be06c605ee639cc58150364a623b6cdaedea603c72c6caae2ff746ced4289f0667d39942ab769c696f74798571f9a14bae67d3a838cf4615b79a513f1bc6d67d353646e3a85e2c43b117e2b46a607a7c5177b89f67a162346bb9bbf5f8d4fc6b537189e7bf84e703ae6c5dfb0aea19adce93d18e24a323148cae88c44658367aeed8e8a39a31c073aeee9b9bb2161b43dd76e7c6c8181bdaf942ee1b8a5343174b35dd98188661469a61cd3b6255ac18929113a76245acfacf0dbc1e46de16c5397e2eef4fb2afecc6c7f757bc23eb51c2eb51baff9ec85aecec7c5723e714ece74073c742e3f6bb4fdf1fcbacf3ba21b740171950c9a422391d9a71447debc02f681c2da9945677c698dfc894a740b613fe3cd7d1b607a3b031aa8b6d6e7e5c3d41cd93489daac4463f2658c289bc4bf84835e52fbf3317777c644af264a0fe9616d48ca7e80919fb8d5be4bc90d46591086a1c4187a0fc91d62fdc6f6ddd78365e4ab3cb08f205d7581fc1745a191dc6afa182fbfd8279484e7c1437f0703dfe747db3b417f80a58e1edd5611be591d1b8ec87425ed860c54a9c380dadb2757d6d8272db8eeb373a467199335e97727030f142ee66d037acbb0c493ee265d26a08ea2614d6453bb0aba6ed0fcde9568943c0c4c1bc8461b25cf3e847bce397fd97d87548317bb2ffe57c246373f99ee665e43bcc43ee7cb89fbfbf3555e38de9b8826b1f2f4e9aaf11b11ab6dc86853f077d05c9e780e82df8f4e02bde7dc4afe09bc87463bc13679a6d548ae7fa3450fbc2d01fac26247f2f2231ae5979378be5f2ebf1dfdb50a0d9ecbfdcdf5014fa8b89e91d36501f12aaa45eeb1f1c6988ea57745cbda1e96f0bf341138fed325174b788143330c392c6e2a3cca4eed72aa38ff01cffec7a7c768db90da90ffe8fe55e505b15473123943b16cd594d227a918a7a68b9a821a594473973aecccd055ebba2b93457fbaaaa330c8285b06acec1df6537cdd850fcc2ac622e3cad550d63736d6ecc6d65a00e49ecd923fbd6a379ff75dfafd7e3917fe436d6f3abafdca643fde1619ab72e5edbb5fff43a16a2a0bb1d3b12d6044b199c59e65fe73c24b1fce29d75b6086da6df23822d68731f3cc93797cc9d531ecd268766653b6bd6471b61ac625d25b17b64db7bfdbbb7eb831f1ef2576242cb9c0c06882e8cbba7f30c698cc7bdd0dc42379bb1cbe2be4e05a8bdeb74961d731f6319df9bed8ae6016bec8de6c8ae0a1b82b14f6d4360fb7912799ec7f57ac49f9fffccd8c8180856d746d899c745099fd893ebb7907db111c45707fd295a8ee6fa74571d967bd1481807a5866062c151999825ac63507b9b6996cd8a59ed8ffdae7da90fe60db376515d7fbd4146b8def6b4a359ef0c83fa4616a90f6b78d31ffefe23eb93f28c98db19b3e3f90fc46b7d017e92b08b0fa5319ebddd350e3bb509dde4f241547af16c222945eca1f54152bf36c52244c64e85bc0bdb404bb331747dc025d4129affa7f390d6d5e2f141c1f55884f1ac8e5a586af469fe08f58f507f07ede3b10498ed4e682ab1b8761c1f8fbb4e2ac315772f9ea7283b24a86291208d87894f44121ef96edef78fbcdf6efdf3e433f021cd836dd36c3a4acb325b11c48a99a43e952a8c04753531db7382cb295c74dbecac43fba526da0ae17580d10c68e60bb32b9a612bf2cd9ee2a2e5ae0e58f64ee7384146e084b1269be0d30aa88753b89803a1f9897549e3b5aee6e987e2b5f29973197ec867fa3bd7a2edea27538daae8f53201ac7686117815ef94a9e98a4fc6e535392190476e93dc408e8dc8b0de81ff101e642d2a95cafaa2063d77b109fa899c9bc5f97daf9f8f62cfde880fb2d146d87b48816aa1a47f535e8724c5dfc2a7a47eaa994373847224f2dd823a23b4aa9bfa12b7cb2ec44751bbdc1bcfe75834a97fe44fe7ff36ce8bce0df1c197dda03e3ea0e5d634c7c146d4a603c05f16c610cb4d304ff07fdd93520acba1bc3304d1ef884f428d488775e6bb077d2f6f6abde2fae9729abd2283c42004900f641ba66eaf829adf9dd70f47c1d9bab5ca83fe7cc4f79e5d8f9b79fa71bc5f3fc99f7eec8ffe930634449b068ee2f4c0ee9ee0cc321e91a901c5aa9039e8a8a5bc85d528e419b5117fef319e4268b41ae7f08a4c1a07df16780cd72dbee1fbe3bf6e21e6a919ac1681e6db4bc265e998c62e706d381d9079e566b0e769ce22ca0122a9699a560c91373364948a247a536dba8be3c226b8ec0477fd2a1ee07ecec307f9ec7fbec694a7f0bc12363f41f5b8322533a73c9d9b44a7537de89f4cbe2739f0eed1cccf44e1321db87bee6387ba88806b4031edb526d4061bb42aab69c951594dac27b0d85f2cdf890453360be693f91c580cef86f6e9a37804e97a84f7ebf523f15a577c84d41ff93a1e22d1fc6bdb335f2607a4ec3729b608cdcd835858ea4be7f9ded04e03f8cd4d4dd86cadd84c7d3f8810ac587855042cb40dfc019177ef72247f8b8730ba456ad5dfce03f8f7a363ce2c6e4f9e1364b05478ff68ddf60099af16de04a705a921d50fa0f6fbab653b4a7b6e4de7f5040be0513faef9fa57ad73966667e3a031cfa84e2d6734b390e5964b5ec7f200cf1feb5e225459724f5837e37c8fe3acc9cc3712531d4a387aaab00baada5c6f2dca9e087a27a688b96d68e75673cb0f4a806310f4495cf31deeca87d6e7bfc347bca4fec857f1119a170d397f2fe6da51a9ed278b0eca30123358bac04752dcaadbba5099da1950c539ef74fc3996ffc177dd3cd7b136cc6953c068ff9ff3915bf9d7649f17a76a8c355dac673c25f9ea290f21f10180177c76c3a515d018e1930a15d53c77f5ea9c2cb82fc44b9ba476e4aff848b61ecc6779c8db9f17dd832e0772a93cbb7865b4d4032bf2517c2631c4a476cc6824f4049de1ff5f0017056a0840bc318b9f0ba71ac4500be3d5405943ade2a86acd26136bae55774aac12ecb080e4a5f271ddd626f8081ff977f511b0a75bc2c65a58cb6d27b16185090275b6462c93e74f832bcc914c4d7186c9ce790ec9eb23b56cc565d551763b4cff58ed5ee663ff58fdf0c7fa404ab7b2f4be208841390efb6dceeb32c810781c01ab8e8024279c69d60a2a5b5b31e86187de02eb4fd6dada001f21f16616f1e1ff828f30befe953c24c502e0311480077cb1b6e2c86f8a5a75ba8827aab5b3f680296c1dace3185927eb6c5dac521007fd6edf2a5f287ecb7e992751347592cb78045d4d5f941b5645dd9f0f655918af0dabbaeb9e8b0d79aafa6d883f7ec0473eba3e26b3b9fe3d3e425f878f632b3fc747a61ae48fc707ab86163c7784e777d37ae3a94d88fa15ce262a428e1eaddb41eb13d24a6820f7677f4fa3cf1d778fa598c62bb16bad32b822fe27facde5dfec3d081db3eac22a9ad8e3a5eb84691e09c77f677cce77004d2244d04f2f56ac06e8521ee41ce62e6d82814563cbb27987f7bcc4177e81f7fb1b63f9b5dc2f91186a88a5f601a1563980ff0468bead805e62295613b03845d36a59ed4177a352ec15c24b006b4d165f016f4ba45829da56098391e137209f51341797de76d1b23a8497787fa48ff0f5881ee10bff887fe4868fdcd9a0e54fde1f6ae811fa31f31b4ba8cbcb6abb862c4337cce661505b5569cb7def148b84d7ef23a7e325a9322326753bfab6b1ce1f1b80fd486282b97f57fad0f81ff1906b3ec2ef03b58189dfdd76b7258a2a9de853cc0647fb0b35aaf00004f4dadea2d7a66b752b12d4a9c2ff6954f58ac8f2290b19bcdcdbfe92f78c8f7c6e7daffd11fc7edc0746b0b7488d12826943f4107c52b0447520fa862e6a9642ec58f9cdc0ea05155e1b86e4a500b6641474a1d60cc36e2ee2359878a0f5c3ff9fbacd83d31f0a2f565f88ee62b3ac0ff69fdbf8b27e3bf6f97fc03ff2f946b19ab06c6b0d46fb8ee1a8e18eecf4b0b44675a8539eea23dc3fa2ec782c708a4be5dde82f697e06d411b7546bf8a535c3e51bf937f593ac484d95d11041bd956bbcdfeb1a56ccffe363dea1375eac111ec76be03bad522d3404960fce302c57628ae39bcd7ff1bf441ff9e81ec83e279dcb50947725a88705362de6d309852e99a328b4acb18e16dd7a8efe96e58f0496e697131ec6f371b2b6c6dfad1ff3dfce67ffe495c43a59043b508d3b467127001a35ad1d6be95c9e4ffc232ef58f707d84dbbab21824d779e4c057f6eb951da94493ac2739871fb199dcfa0faee577ce47f2599a07d9621bdb9a2c8bc013f9e978bbfe08f84666238bf80d02a2d9037625d69b4067da91fc4cc0ed6d5826c3b4029c196e931b8af18facfb23fc0246af49866e84fb89e7d63d0b3ae073d1fc4cdb8d46bd796bdbd48eae655d2a5e4330302fc1bc43970575260b9be920339fbfc245f8983ef55fce67ff5c5b313a0039eed1453bee512392c1777e963df7da0fc21084d0d9e4b569b9ad886bedfcf73c7711decfb4e0d0c909aa7bbc19cb676af565f3a7398de57e17bc0314c3519c21ca41f4e23b188dbe13d8862559b9d52be82fe869bb1f3a80cf42fc2d50af762068f3a5950f4a09b6628a67f2185febe71ac92135cef8443401331eb09a859ed09f07417555d83e59b2eb4fcfae5f9d5b05821119631dc48a07d653b5bfd389df3e13b777358f7fbe1ef77ce4277848f6acbe455bfff46a729f2c96e377eec17ad6dafe12d0a7a18ef8797b25cfdff2912863d3cad641cfd06a246d0fd64bdfa810bb4926b77efc41cc8e473c33ab8f0c33bc84dc4f8822fd3c9b8d1c15f20adfc3468138e09358db2d5b4e073ca0e80519914e6ad4939868b5ea0fce5dab3808062b82a32f676c3fc32ff48f7c74fcd77a1a9dcf1ea93523063d41b55efbd2b822895b4d1262c5f14f1ddc909deb9eec80c45e032efd042dd78df55379c378626a4bbbe655bf2be3fcbd7cf6efd547b85d85e03b2df7a5bd64bbbebf74dc704773f26ef511c8678728797e2238cf48af19dde4c55177f9b5ae53aca74b6227bacde3fedd26dfc46b65e387adea69bf4639544c6b0afea2f990c74ee2bbe6543f193ecf8e6c3e227518b78dea79284dd1727eb69b22c757e4f8c4efe1fd7ef7be20f6b7491bf303f0afab235b72247c222457f2249fc6660364bde44b584723183263752885da042952341b6c3ce20b7abcd7386ff9bdf578c447fe8feb23a224a67c490efa912acd56f6365a1602b4acb2cacf6fea23a9cdeb210689807f279f2cb503d854d331d8f933fa83f62179f73d7d64423ea7f71c9398d9281051eed421080fefd71f817c7d1fbc9c247f5fddeea5b9f24ceeaf8dfdc9595a48cb6a17e5a49514635abde7797b8c177e3e5eeb77d65fba6fb83f23a28f08426487d23aae3bea4994b04ae67440c74258167005a4acf33d57daf6c5e6f362796a383ed21c655f5ceb780c79a65b3dd67bfea78f646806abd1de17464155bd48bb46db691d8377f4113809d36c5cd7adbc8f8ce5299a417d26c8c7e098b5098dfaf318602effa67c84f126df1ef4a5bde75e45c4ff025f0b501f76c5dd4b6ce39dd453dc296025822f429ed5a4035a969691bc47ed8a5d1574e1487c3bbcffc18fe8236f6170d236c712e019e2b87a6de9b8de1dc353c7b5a1162fd6afd4c0078bb667873bdb388ce68d755b3af56ab108b1ce8bf25ab59e052d890f33eff4bbdff18ffccbfa488ee4f0d17c085a43ef35c0dafb6a229dbb2be62f79531f6131b5496c2d8bfd4deaa3a3fab6b3b200b716e47862cf4feb61a57ac457e92384f609d17ce7fa9ed76e5ec56b3dbc927111346d4c6b8d8b215da412c4024cc7f89444adaa6d386091f091b218082ae683fb4407a0cfbbfcd0badff3113ede22d68f6c3b90ca52656220856023cf582d9680c900533f829ac1d3b3a3686ba90a9e6288c6d99fa5da2a60354d681e89763f9f1fe8e7bfaf8fd096f57b838f415387cd50aa435ec5aff591c4f6c5a20601eb1050500173049968696f85b158049f2ecbe3cbda4e3eaf8f5cfb0e08f661d331f1eed87d04ef97e083396e8c1ca5931f5abd813fc03c0fea15ae7c7b798e1145739d56a406c1223eb1dc498b3d6bfb037ce47a2facd8fa04b42619e42d4aca3177d687cf8eea7904cb86d4f9a231d840ad880586d8f0f0096aeda734fb6c6f6369ec3298cfba4195d63161fb80e36ff1b8e7df5d8f7b3ef27f5d1fc9d0271243c5f80944c02d05a90979eb6feb23895d2bad2515062160bb1f4be4b356b3bf6a506c741697ca69e3ad2ef4a7fac82dcd1bdb6edc915a330d7ceaefe1fd128c46c0d66acd0fbbb2d40eea98875eb044b5174df7b02715b0b19e124d5fa225d4b067f585599f084ee377eb2337fe1091d45e2798bfc162238cb70d7f30aaad6ca983f59002f5479df38b0a3e251027e79078b9a42631f00f56398244764add5eadbf8923f740aac61593980e6e7fd4aed6eaff677dc413b33535787d5bac97ec8b505ffc57fe9124e6374ce2a1a00e14727cc07fb2cded64e9b0fa4bbc96ac250449fbf3fe5efb474c21e14d04fff77058393dca237ec94798f5fad851ed38020c76829bdbc17d0d8eb975b9b1869d64eb2b1b7f5724f14efe8feb2357e306ffc654f5edf8101fa55e6f3128ccc7e64ac2a71cc92e9e77c80975181e3e791df29a2a14678ca079708ae6cfa7c818d5e7557528682810a89d2cab8f7c948ffcdbfa08af4b42eab0cf9f12da8ce5fa7aced96d4feff84742763a927828826fe52f5d548fd1e8280d8093d37b529fbec87180b53b5bca9fe823d2cdef8a24876fdceb2163e9beeb1f81fc1675bf39b9dd1389ea83d8d7fda02eece7f5c9795f02440ba75529f437f356c6bfc3e5eef10fea237c9c58ff68484a5552a5617537ba0c14db00f177ed80c714a2fc594e285e1bfcda3e983cb7876211a46b466483572c9de5ba457d3cf4814f666aabc8193ef23f7d44caf0111e0344e4fa6d73d446c67bfa489233c2eba35b8e8ad5015f1a1db6ed36c144817bae8412c3a8e7314f9fe9f3adfc9bea3710b3142887f3f818711ef82b3e12207feeb907691f90ba90b41e23cc45d4306c1d34db96238d01db85e46a5cf3ac9ff58f907502dfb87b50b7dbc9a8eb885009c37526cf9b95e303c6318d32e5fc9de82190496d53fce64c2c047b0f36af7664e72647499b0724ded94b629e7f878ffcdbfa482a4f67f32200cf7c3c0d241d2abffd3a5e8bd9b4d8097102a7e5349cd3caee4e572bf740f13c80465d76c23123e78e699d910f8dfb3df9f73ac60878e078613735ca037f19af45682c3ef1cab1067c848c9dc4d36eed66d511301fd1ecdcfa15ac0e84cea6cfcbf2f5ef5e773e2ef22c61234d7ab2bab7f56595a057b89b051d872b04335ea188561b5a237a4a2e7352b53ba10ef03b86b1f9825e912c193b6fe697dd4c7d95df89abfbf7f5919456a4762d598884d1d091cc77f491eb18da0e9a38ca76307b3ece84b16f0bd99a883ee623d45e92faa93f8e5f7e3f2759ff48d6be35277913bb993f9d23e37d7d04f8a26b5bf23e2076aba3b014e2738cefa1b63a688979a25ff29498c6c512db5c363636f8b27cf677f9077f0ee0fbfb83c6ab232eabbb97cbdc83f04b6b6fc37a78f6aac56a036770c4a8851e9f9029d81aa99dee2c43f50cc6537cfcdbbc535b99a53dc3adf1afc6f97bebf1888ffc5fd747b2f9002c8f0cef14c85118db7dbc4b24466f33fa48821b9f8df18dc02b15c6aaa088d2845440aee39d7680fc7282b94e6bc3d3ba7ff0ec31f1117fde3fc2e38de4840f022616d61f26e7e919d0906e6391794be2b53a9dfa60b3ca51bb15d6d6f7b302eee7585f0cb761bcdf853ad4a467f5d4d3da9372663d7e62fd135b93ed369ffbeaba8fea47fdec42cd94da0c34f1433745dfa063245868799a3d06bc9ebe67bf1320c68054f2f3e13f585e50164dcc4b9dccbcff8eaffddfd647b2bc04e8704920b96bf360ba3a6c889d3d93ab0ed88dd50e41302d82bc4b6befc28a1c0347b93ccf7ca801fb90fe3ca2b75fe11fa1f749ed72f01efc3b3e5aba53a89f48ebad03af031c2d6f4671c4f07b1fa24f2469d1df2aa4d621e16d0ce7de17764d3d684a398811c8c41467fbf135f9ec1fdf07445fc4fadd585adb06c49781d67dbcdcc6cfa5793c473df511119c7f6a874cb16cf0ffe1a48045b8373ccfd635c0f14a7c241fb53d92ba637778674466f827f4916bf93ac1801576b65bb9d806e47d53bb08a33d60632708a60e44a1385e24e56105d6259473ce8b81ed339a9ecd55fb6cffde937f25669383ef207e0bea6e8c56f261c970b6a6a9be742cb9583af14490c32f12e687da60b339637d0374241dff7708bc643a26363893e681b33e68896ec0fbf515f85aef5d535ace6c6a8218a9a3dac2253cc0cde20ba419650c9b46e0717414ab99e5f7739920cdfb213ea245657b6eb7ed2a7d168903b3584de6b7628fd31ccd1417e5c656f98fe823d7bcc4e7f2e86a22c93191b452dc131adb7b3659fd114c8f1795cac1732ff3b9b3d1d0725d4c68ee77cf49aa8f58577c847c8fa52675e92ca556e4a84027d3bc165acb0ade877bc73f06b63edf9178325a4f90d7e538115e7461b55252fc965b5c949fd047521e4fe9b52ca851d47b2e2d19be00d30f337c82e81d503d228b029ed82033ba18f70fe1efd5a56be7b692a0c2f8af6c5beff310daafd91d3e41f08fe823fcde59b997c8dd52415980c60ebe683adb1c9b11701a39dd6a87581a134aabf616e5a42745c5b2fb7dbefd67c7fd2b7d244bcb24126ff644ec6796303ece94093269056db21ba8871378c8133e21aad2468af41c6f2295e48b3c91d83589e94d58a7811a2322c7f84d62a31facc777af3b7d2ef35d0817c189c315ded1047311af0dd8193d86f742eaa73074a48a7485ea94da20134bbee3b2982ea2c13b6de925027b16f0e4ac5deb57bc5d62fde27867d97e8f45ed1fd447b86d4b16a278eb28c76ed6dece69d151a379ed64963bfe1ceaa63b7e5c1f6f96ce959de9cfed56efb56cfe489a8bc2fd3b24c70350d7e6bb4e03e5c9ee493c693086c0777cdc7f75244d2abeedae5040fe43f1f979bf69ed453affc544cff97a7cad8fee013abe9510db4d6138f22488812015228ecfa9be48f52ee01b903792d4850c533e42f495691677003c8f1477c0f7aef8c8efe26b65f92c5d9be23fa58fc8895d9cd885963be975596031bddcdece6c41a701ab26fa9260cbabbb53e5d5ae66f2daa41b9fed77e923a92f387d1ec57ad934a43e660d4e6bf54a24ab6c5c1944f775a6e7bdb7b0833ecd6581382d7a1f62c3a27573b544e7a14dfb717de49ae7335e29a8d2c06c201330fe034470334946db1a793ec98c83fa309ded096ac32478676e6aadcfc66a9fb7e04781caa94a636b462ab337666d85b77ac86dbfaee31e12be0b717aff8c3e729b13087ef6f14075fde3255be79c790941fec5f22e541c5ba3b3dbde3a6a4ec8d9b9a9d0e7755cafe27ebe674eb2fa48d63f42ea30127c10cb6e2a879c93438e82f5279e93081ec357f4ec843977ad747242d49c137cc290611aae12599cf2ab740db2afb3ebf153fe91745e0361073e128881809d4ff197d725c21b7d778a29165ebba8ea28b649ac2b2ac14913a9fec2e2b692f53c98e809780a928785d241c8621c7f540ee03999b7f2c3bfa28fa4be544a33a85d285aac73deb6933921bc462dc38d27b510318dcaf9919c0b769dde19eab7b25cef2c4dff2ccffb883e92ea53795e5b96bcc7fd693e97eb4e036aa4e0fee3b140e51e67e0a887cd7cd2038baf4578ce85f8d02516f3cc7410c045c93c4f13b3f5477e4a1f91c4ab7960f6b6cd2ad8ea9b06a9e80afe11c21791868cdd732e3ca897d3c93b1f5adb5cd4583a95dccc36402f838c64f091c01c2451a860c900ebaf671b4397d8f7ee7dfb591ef2d67ae8a290600d6778c93fa38f6469c78cd455b782ea746e1b409b127b3a956bfd53612f202908d133601c2a7abb949bef269887c889ffe07b7908a5ef541fb9c583bac3a10aaa81880ca73777b0bc1d9aaf4ecbced9fa69b43cce03a12fdcc6eddedaad7eede7f949ff48c29f09eed7408876b930f697c013730ba4b9bed4474bed3ca9eca4a04a72d707244a73dc1b542fb9a5ebeff10102ea009589180e338f9df0372bd76f1fada1727818bb70dd176ae7e37863f03a809a59558bd43fb9890bf8a7f4112eeb921c12afd7772bb1d3a6742acd5727396efed940f5dc0ad50307d363e95ccdc55e0f0580e974937ff0207ee71bf4917b9a9be6278ee24e67d328b9fea6d141b9f5f445933571e735ebb90d44f04dc734de39fd7df29cdb79bea5a13fa58ff0f173fcb09860116f82de617e2a21a55fb48df373242d8ddc363ef9836829447e8763358ac4c7b110ac5d0be576b93de137aa1380ef9d56ca20b99a3e324ea361a82a342791e4fb643117b3e3a7f8c13afe4c0bcac05b853aa9bb05f52907f75837ff9c3e02f60cc0ffc5f26eee903b625a738f9785b975eed43ee7ceb9cb78e47bd5f305f9d32436eb2ddaf3f573721d1f748fed91e0d36f54370e0ab37c2e8e437538f3d5218925037ff28a8d393b07bfbf1e3fc547b8ff8ab6fed699d55696fe126f4a918e84b13022bea928ebe722317298b66baf3363333a147225c04af16cac7f402cb04d7df1b972fb3cc4648fe993d49ef7e67c0026817014bc5c85d52b29da0a60d8072ac1f7baf1a7fc63fa08a7ff80dba8da5b4774ba1c7b916abb6077df8061be0ae8fcb9da255e74b74a50f56d51c3b323d2e8f16f18f77bfa48f673fe7cce174ca077c2c64650a71cefa031ee27d8de8ac24194585ee130f3fbb778f4ad4de76fe823f0fc1c5d23c0c9aae766fe6a12548d9ced063dcc1701635e26747e2f925acc80cb88e97c4ed4fc5e14aea4c1663b878c5e88705c2344ea5842fd32476db7832a99179edb93f5ed5f8d1fe2f0c4d154130d6301b5e50591d48eb4267541102e57f514ff257d24eb632739e74b6777e80d1d35883218f0e01391b0c0e2e4ea585b5ce61aa131070c912e96ebbba4a6eb6d3cd39f61fe7da43dce677f84ff4b6b39d1fabb7dc8e1034469868beb135cf5eb9a8a6fcbe16fadc7f7f291ebbc47163f0d3638884983532f0c720aa3ffab441f4c7542900ba02689e7db4155192ecd5cd3f12fc5b9437cf381a3ee1d641c874b9b6153666317565763a557c8640e21067a3a40d3a8eb5794833fc57a4f84cf488a3b96fcfe9fd047f8fdb86d1bd31f1bf5835c0bd0d9180f11a87d1d7cb7b3113296657c42dad16c1212f9136b87c4bf9de735fa92fb7ea53cfe963e2265e8dd98bd4ee76b94e4d6913a1e50731db00a99ffbcc8f0e1adccff86495c564a43ffa63e92ed03e80a47c6eb8b986f00bd2f0a62ae436c8a75d6ef27c24358aecb4aa5f54be07dd00baaad4aaebb5f23e3b02638296245dff6b603d75ce648ee089b0fc0b1c9cc41c6a6e51ec9bd087ebddf8fdc5c2fd70f0ab901d661c2ab3a586cddfe117d84c7b4723e620ad1aa60e7d6253fa2f6776ad382ca03a79a6dacfb3bbfa535fca14c6bee8912c3e93059bd8bdfc5f8fbb339e1fa88ff40a7b8a57f21f17ba4d8ef3ef3a97b045f3dbd278d75a5afafe2bf7eb91edfc947a42b3ec27904d11bc97864e2db294fb56088f9058d2d83df66ec4e09963cc4a3c9f1a151885f14032d5127a7c6addc30378adb245e2d169603ce0beed72e995b52b784c6b2f59d67b4aca27351c8635d644bf26b6e6c8cff843ec2f908a7c1f833dbcf8d1d83d8b26c6affa048029b783d3dcd5167331aabed31a991fe94c439c98c0e65f59b8fe4b07d561fc9f29107f679f2ff1ca931cb7f47fde8f7bc8ef3a27b3ef277f5916c7ef988f61feb199467138c809c26529c2da8035ce4b8f1ec3ffc2a133e0316e14dd00daabb56346b4ba5d2c226f98751326f746c5a369fe86e1d0097c511b59c9e9b9cd63923388c9fb7b6f694c9abe1fdcfff33fa48d63e84e9d46eb1d49102158a0f26e47b830fd7b59b1196b0cc455718e62c8237fe995aeb9f6df7f547de9ab38f7dfee8bbff863ef2b85fd79f953f7c2fa0f14477710f801f130d499dde88c90109de4046af58311e7c112566c7c2ba085eff3ed489f7cefd23d4fb0d4af81e9704a32bd3ef7f421fb9a19d801faf09cea13370310f3974793c694edaef4fe3792f5245adcaf3f1a42feec79fe8235fcd537fd58fbfa58ffcea8a1bf2993fe42d1e9ce181787d0fe4eacc9c9191cbd98b5c1e6abf8bb929d7ddae7f0fb9a4c43626e8605926759891d75bcfe7664eee15375bafed37858d3025eb71175bf1cfe823595bce4c9487935ca16cd30a37145b03e5734fd35dfcc264d57222f7fe2d3ef266fef45f588fbf350769fb081fe173457414b04186a15f9b95436199db9549fd9205a9307a3d4e562f136c8350af17b708eb2ee3a6140ab9e7fe93ddcabd10dd04f399404de622b32eff843e721daf9587d8d7a9bed9b93dd7869ab3b40e0952ec7caeb86b092afc36f79af871dfcf47ff8afebdc553df8a1ffabef97fbc1e7f8b87b06bc247dee2c1999c50ae8b093551eb54ce9dc5292ffaada99ae872e9ff595e08bc9f8ef16bb0a15d367650ddaff242def68c0dd6491667f195f8db8be296e87cf0ff61fadc7f421f49719424e69b8d8793580d84fc94d51f111d3576367ed90b3bcc0e547ed0b79f6d6fe239fd85f5f8eb7c446cffc6ef434ef761cd67fb7117744b5a6397fae46fc64ae2a8217f0605e517df6e17e68363b5b4c83bad50180b3bf195e0c5e0ff0995441fb9e5233f4533be4b1fb9c150124ee293dfcca361df518f5df40ab821c3853d8e2eb64bec1f580f017d84d460fd8afc908f8cfb2d9efa3f7de49a8ffc8a075fc75bd589afa587db147800c43e63f96140af573c135fdd13f58b6ce4bc9bf7ec5cde77957c20a8a41e4091f89a004b672dca577e2a729f7f461fc9bef751900f072ff9c8e94532444d0f17f9596916cd76136ed710a7ffd34732ebf1d7f9c83bfac875ff68ae25593fc39e02866691f9528aee9eadeb35be097c2f432c567eae079528efa32596ba35d1f2a19af88ac566acec86f0afea23927825af8a6301e517f96554a0b59db0b4d552c5ed589a78bde980c9ab75a8bf27523ef213e37e8ba7fe4f1fb9e623bfe2c169fff32cc640c327a49efe9ec661257e113eafa486b070c152b61a96f32bc53feca7e614eabb6f885f5d26be27b85fca5387e973ff017d24f5e326713a8d553e6e1f517d07b1a1a1e3c792539beff2ebb4ee14967fff361ff99f3e9269bfa58ffcde38a534d71362b2c02702f1c5a46e7d366f472635869358eb749efe097d449a3f919c9121f7cf06d563538b91444e887b2a389dea6287661ea317f83f552343b77e62dc6ff1d4ffe923d77ce4573cf82dbcb3ece7d7df5fc72a108c66db05ccca1bac4a7ae57988d97c24f99fd047a41b2c254bd066ddfc46f708ce2fd4a3ca0d9f979a7298aa24d694fc4fdd313ee2ff4f1f11fe037ce437fcecbf3bceab9c4e21ad1d63de7c270991886ed623e5233f4533be491f813c3cc24758ce403008aafb97fc561b3bbe13389d4a65631d7319cc5ef85f9ddab7123ef2dde37e8ba7fe4f1fb9e6231fe5c11f1de735364a5a0fd9baffbd30657cc4bafedf3fa18f2c6ff4918b3070e3dddea9ed44a7634f7687fc2ea862f97325c42e64ec04583bf3ff3a1ff99f3e92699fd047ae72cfafda639cb43446fcfa7fb01ec29b7ce4a768c677c66b59694381989fd7abfbfcdef595c63cd7dafa832d44bd4990b727026e8a26d613ffc8cf8cfb2d9efa3f7de49a8fbcc5136ef7cb23bde3d178d358f0340e8b3f67987c47df833e62de3fe71fd04752da90e2a21c85d030f287c5387f5cbee44fb10af97b4286e730bb96f43f7de4ff943ef2d17e3e8e7f4ee280d97b9a8793e27e65f1b532fffb17f491842f319a02f537f05513f2f973fed218e74bfeeb5026d8b79737ed5a3f4d3b7f5a1f798b160f7f431f796b9e1edb941ef2f8876d9c598f4736aa8fdab2defa1de70d3c363cc5f3cc8e2bc58dbff9ff8ff0117e5e299651561ff96afc117abf25a93f82f9c458ca97f3957cb551093bba9caf2df75395d8346475472a15737ca59fa0dbb77233f0b1efc4d07fbb1f743d4c9623ff317dc4cfb45fe9008f5bb60e318fadbbb231e1f5e0fef3b7f48acfd4307e340fb7afb3ebf1f3f85ad49ec0f157c32b9af45534fce65eee49cc4f07e29350135f3b55af7d32267e589faa0dc9eb410e5ad52438ebd7f2e8775e6fc74a5b98e8443fc543a49bf518b3f5784ffeff55b3def99f2cbec747f281caeb846570cd6eefffe8391f6dbfde9ff7eb91693fa48fa47c24142f0fe8eb17d36a2126f9de34275a225827940ec904fbc4237c84d22c9fd4e9f8391a7e3ddeefc288b9a7e38f6833c43c0576fd837dffc8fd6faf1f6bb82fe292c54c3de2236fdfff16dbf2adf6d1becc1edc2fd547beb371ba4069c325433bd3bcedaf7806cf1fa1781a9a38142e538de06f50fb46917c4e9f6933ecdbaf7afec7fac7691360b7431efd85f4f3279e9f6d2693cb095db6eb1ff84f5e949379cadfbc7fffbf3c07bf4a303493f7599e6137d8da980f9ff5b167bc7d7d7f6d603d86783d86f779453fc6472806229ccbe8863e7d3d1fe1b488f31022f7428d756141f29d57c289f011f21dc341f9de764fd7a8bfffa7f491ec3ca7f149b43dd20f6f9b7cd756cce7b07a976e4ba4a6d692d91497fc7de633a85db948d6427ea71fd683f6b8ef69ffde9f23ba1e9707f7a27ce4573682afb8ca62ca4786552bc114e432e7573c272bbf9a097ed3138b0386185f8d60f031fa553e913ee493ff7ee7f8effba7114c90a131bd8a0ffacc75fccef7e93c6b09861869f9fadd7adcb634dee96d1b5cf6b7fcf743f1de3f71cb43987d89ac87f98bf578b44fb8bfdc14efe7f851ffdfba4a045b8daf8776751f6ed72a635a52c634eddbae98932eb16e1888911818174cc323dc42b1fd35f787fbe0c6de0b157169378472be413e5f62fe5912eb6239af8841adde08f019c5fdc837f1ff9658530c4401f7e59bc79fed1f3c17ef8836ee179e0bfcfccb679f0fff87f97ceb3ef85991b8166336efb1d8c6cf0ff095ac87a8885311b146be4f7e37157ba4f9f83b3ff90d629fc3f7118c0b7e0ff7c72dfb9c645dc4a9b085f742b9afd1fe0a5b7a9faa49fa875fe75bf8bd8bd7c91185db7e90fb07f479ac5f117d3eb9cff5efda99e7b6afe7fdcdfd73b31ed97d09ff4ff8c8773656cf95e82143c126677528ded657fad3767f9f5cf219add9a493384fa0514fe2045fa13ec933c593bda2a13fd828dd223cf52be6417b380fbc9131e2f1f271f2f520b1d24a89c41d4cd89a641bfb1cf2fc48aedfa3f7e9ef9f32cfc9f64583385b524f8bd17e786d7b42c43ea3ff7f26f7a3b5638677f7cd5e7fddccbbffbf3fbfd2cd7adcec871fd447680b983ef2b3fe658ac9047635c065c42ddf66b96b7fc7cf4d1bcf57f8ea3ed07a88728a2322c4a4663dad590eef8fd44782758259adfac0e771af5370fc5d22e333fc615e7791e2f79e389600f9ed8ad445e1723eadf7118a69be798aed2ec3ef31bfa7be970bc164a4cfa37da6f79ab3c6c7e067740dfe0c6a174bf19a3976fc47e7379b3f92693fa28f709990d2ecf8dbf4117ebf3bdb382060028e2bc95bd626ae1005a6b099d721db9f61ccfe843e724fdfc32fd347b27a42f619f8fd322fecc312cbf7067c749320e81cf00e9c89b978f760ceb84d88df270f35ef670512bff0c4e82ee5cb45c8c9110ee435a9e58b9f738b332933db626a83c2cf104412f340d64c3860699cd8b4481e21d45439e2d725725fa8c37b209fc5640cfcfffbc45e16f35ac2cc2e96ceaff6a1f94df7677ca797fd1c1f91aeceea4fd36ba85bbe82bc6704759f76826a5735f3b2c977f25da57a87a3f1530d685ef42d7efe55621b92d99c639a0c7e21c05e67b6218831003b928fe5eeebdf4b499f78ecd22c638f9ab3df917c72527f71c19e49ff47b1f72d429522e69722cf6158f184cf08c7734c4e288d89c03c41047ba39fc18ca73c875d134c4d93f08915b3abf98cdfc0fb99282518fa9cef7dd17a103ef2dd34f4dae6417d99d9cfbfeafe6f359afb3c52abd1cc5cf883d5601c6bea2a1ee255ccf732f4f2bbc77f6fff09bfec39591b93997cae11ec5cd353817f046577253898427860e773576201f351a09d6ff139763f12ff6602dd263adc13e0ed923a5163767f9954d5d9807e11f46c77de12c6912a8c176b8243b3d17d71e46d883ef1446a585589df2a8fe79ed81601b3a4f60235dba15f049514783be0e36be535d65b3cdbc59f6ffc8ed72375a68a3cff03f051c01f063c86d46261ef3336b38faecf2d5fff793ffb5bf9235f1daff5b8d17ab383a05a9ae6fb8781ebdbf238dc3814d552f879be96d2adefcc1f019a5c64fe21a0f93d4183da82c2d01f28077fa03d939ddd2f439cc1bdcf81c65451ba4ee47f42a38b04a7be2f8c822adc03ea69cdba04f710f2c4b5dd24a8c6dba3d219ce4ee3c3a23f9f98fe7c725c4e1cfcec1ea9f3e291da2923419dd7481d15a233f8767e405046699e79405eefc457f8ddac8bfb7a094b8dd16e01fdc7cfd2d86fe87e2a126cc680e8313cde2bf58f7c7c7fdeae47f2df1fca1fc99eebef8fd7baa7d99a80f784bd8d2a950aca39bdbc9ac73b05d3bd5122df7eeff81fb534ced4fce4fd6ffe9fc419e858e2d181b60b634ccfc7929a1f356bf9f1d03d343ac361c57ab55dbf37ae82dd0930907913a6f8f4e8995c3d9361eae39dbbb1cda3d71945b6badb6ff543e3ac4dce7b6d30ef29bab41ae4b555751f579a613c50f2faf4d45f9dfb4eebb019945a1ae6de95b8bd9ef4dcd2586d35472b2b3ae527ea36a8af2641bd75995ba5a95ae89e26e75c3cdb1ecff8b35dde681879d37a3e3470bfadbce48f7a9e35693ecffc4643186f1b82ba36bddeccc37d2c10dd83e92384df5defbbf7d7275d8f9bb5fa413e42cfa57f95aff0557ce43d9b8c9ccfada47c14db9e7b7e723adb95dec1f4b481bfa731c23f35feeb16629efa1dfa08e8041752d703eac5ee4afb5561bc6977cfea76e574fcc051679a6dd85a3e7f3ecc06a367d0cf0856885acf2598211ac311497ddb94fe8f877e6e9e97d1325fb00dd4705aeb81b6e82aebcbfae828b6e5fa3b11e5b627545f56a0b2a7d34179473d89c8e80df34fdd7369624b8e32f15c5f2d3b8a53cf3fef7aa6b82fe65fa6b57c942f22e358b6f595b88d96bdfcab23b97eae19a0c0418a3646caf4ec280db1f47cb196e77543162b17c9392f64613ab09bc0a7887526d58d3ebebf6ed7e36a9d3e943fc2fdab5f41534da1f288f67d01cfb88e191d52bb3ca18b58063faefaaf4e6f8d169ee322bc4ab22d061b526f84e526de8e97cbabd9f6153c8ddf1fe45e8ac3a1fd525ee6beea6c9e351fe398daffb17e01f27f046325be08ac6f44c24aeeb5b74250a8acab3b7bec5c8607bca37d5a47d0733ccff16dcb51764779da1ced3535b8949a23e7d01c5d4aabe7dcb45591660b3ba86e0a54af001d23345579e7c9ceb18514a787958417f4eaf9e815aa4103fa387a71fcfd86d44a7f452fe809ea17e3cf425a3f9da2ca220bd5a12625d457a7cde99c6ac89091e31fbb91dc8e1c1f2b1fae3b75fc5307bdee378abef0d6c8f3e700dd5cc4cff1f1772ad21c75db414a472b3daf2cd96d0ad124de1c9cf2aa7c943d6103f341f598a42ee23defbd97376eebc164f3d96f65d16c5defac7c9a7e9fc6ee5899989d22b36d739ec1e85aa6ae50d0d792fb5ee713143334959f7d7a7f6287279826f4391db8129b8c943c6f85f901b7ab139ab755647fb79b3d47e6317f29efcb9806f91e02543ac76d394b4d0ec45762e7b9cf470c327dbeee239f0f29f98fcfed3cd01f4cbf13db3df80b660556af89de9b60ce82c4e2db7633b4e4b01e4e816e5fd873c3cc98a15f17a8614e6573ac0300ad8c092e2df1f3802e013a861c4d8abbc232528ca3b393b6cdad1287ebdaba2ecfec1ca6d9e2ba6febfb29a6e712aaf31ac3d0f02eaeefa7c8d837918126b899f835fe1de60198e6db7abfdd189ebcf9bebadbc9f25c5e4cb6d54d13df7313c37d3c179f3417ef5d17e613ee8bd895d52ebeba666a1a939a94b7d7f9f46cc209f317747db2f783f750cf32fd1cfe87ea709d4f497d4b63273aad4bde36d683308e9e9cd3ca9d9d6cb51f970ef25218e2b54b6a66b1bab932f511111bdb2259d7d43ff2988fc809bdd4ee68e71d3d25d876cc66228ed8556376067206792d3b567b28fd2fe52379c0c84b1a7926b197a7e71b9e4b7609d49510a97ccdeae57903669b9778fd55627339800d1f9e3d71e515eae54d390ee3852baf97036d305c38eab104330d18f2fdd56e1fd4831ed61ad39c85bbba796fb66b1a948e5522f55fb98ec36cf6b88f03db0d62a0f3761077826abbe30f1ab2bc91b7f26eab3a85e3210a5be5381cd98ada6bcbfb5debe0ac5f574f4ab4158fb5bcb9685ed6fbf9a23b35a2705ec374fde45554dfdac9db716165a1a57c6878f2d1360e9bd171ddec9686bbdef3f48cea40c79d3ed0f16c6d61a80b09ef1d17e839924e5d07d1faf59e803f17e077f0b9d372045b6f885d657f6a94e4d3a2525a627e417eebd1fa9282e7a6f7fdd32b9c12273c0dc83539c1bf7b1fcca74438654e1fd5b727a7654fd072ee8d66f259be2c26b60bba4b80e76e6d825d0f743588e583daf6ac2e31e5d961929b9862a9a47ce43ed7eb6ddb00b55d333b35b78fc395c8c1ac0eaab06035e7ae65705fdc5ee5b4515c2c6ec7a7d70bc3c1ea131bc600eaae0696d0c3f235d4952d62da3b20f436e03589927e503cf1fef124975a553bb7779d4eb7ebb466235477455239d4de619a746af4633306ba2cccb97ff8a1eccafd06d6ddf8c34cff891f9bf59bfb81e13fd1726f377713d4558c756b3b5b2b95cbd23c8cf7e548420b90df4f2b3b87e5efdca621976b2db7e134ec5c577594a86a1b3b1529589ac03412193196fbe58aa31c36276b591c3cef4f8ee2faa4fa696e8d65f593e8dae7279473dab651c67a02de25be5ba47557f889b86d40db6157d566f834456ce7b3069f631a6d2ccab621576c6336723aae434f08e121c9eee6fffd448b40fa3a6ac01be05e595ef7d1fff33e80f4e716d1ebba84a5bc3c9e8f2ed6bb4c8495ff69f5b4cabf46d2eeb044520ff3ee3ee5c7ac5e09958982aa2164eb60b25800c2476e6396eee5fc5bb92dfddc24d887cc4eceef417802a9972a74494c148bb711f64249ae667308001b8bd5404debd9be08d1465e6ce55a77b92efaa3d9935cdf3841bdd108aa935050a3a53fd814ecc0efd96e43c2322720540e40ef00f9d37617f6b078aaca8d4dc3e9c49856e20f552c23e39de2398147b8b6222bc20678d0a07eb9f533f3bc81fbf8d4ebf1b3d7980ee5f0b8489e3cd4f303dc2edb55157fb0b0d7fa20aabccacd4525aabafe768f0c38ad5883ad2319cbd4b2dc22fd1389dceecec6a4de16ad058c8056af11dbe5aff01b0705c8899c0e6e21dead2a8c07d3fed76309768767b7b7f87702192f9684e084042ea5f5b4a6306d641e444a7b815fd416f85e61c263e0f7c813e13ba8418c4f5b07fa4aeee993e770da1dc2ee3ce7f10efd2c2fc1e3b9bc523e02f3403fff0d1e05f52e23ce0be9bc8124e84df17b1ff426b788f98ced78280715c7e5b6dc91bb728fca434426e232c2e54a5e6075de091fb9a5ebf74dba8aff9f5fc5efc8ccf7594ce46a8fc8d16057b1589dba22b9d2f3da6379d437d8de98ef34e9d9750f72ff7894b7fda33cb08d460e8f4a8d9f26c38e793ee4e63b6fdd528cd9f37479cc6f476b7dabc5ed714f1e0ea2997f9c355fec55bbe26aeaa9abc8234c8b7378669e306dc1b486ec0e1774927e551e035e38f0102c97fae2bdcd29d537aee7e191fd8cd77e0d7c5be8cf03596b75965aaf379a48fea61c384ec79fa3fad2c527a048a41fa071f563c9b5370bbaba0733080f265ded2062d291c0e83ade9db21e844e3f16f18e342e81d369ac515d9e805c7ede9e65229f3fc1ee3d5e48ed6018ef2b919c42b8774a736f6934f42be5239c97105afc047c17f7d7056d1c346e7a3af895d26f72423ecb4742ca47ae7992f77bf788d8e91758fd642c2b1c75cf5ea3b943aac622a042e8153d3bea668f96f95d1ef4423d8919a33ce351bc5690f847ee73c3241e170aafe74f0fe92acd1183bc0c380122d402025bc2622d8c83ae1d6c0a78b77bf63cd22feb4533323a43d988f4682e9bfe201ad2264d84b1eddb41d915d48d8ce5f62e5822a3d9e6509137d170295b918c34646863644455a7851b9638ec5cb83ab8ce652c4c5fa62fcb812ced7a726e7ff0cc6304dfd9bad290f3e6080bfd2b3c7bde793b9c7be2c1a4bb06d344e570c67d061e5865b6744bbc9643b36dc8e682eb1fa71b3c27fc5fbf236c56137fd0aa18c572278cb1a66c38116896a9fc8f5ea81c7f960f3dd8195e2817405f38cb9486e32b3e31f4f76719de7bf6aa15ccf02e0fa1ae23ee3f3e194ee79c87131520321e52ef113dc14920bb01f409cc2bc33dbe0f3e6da5f547f59144da12fd19d05ece3328f63ea1cd02bb3f97dea2ac0ef137f511ce1be93588d83ad3f9861a664f5083c6b6b0045b959fca65f9797126fab348e49fd47698fad933364ec647a42b5eb1baa193b7f23ab77145c466be035f68531feffc81fce20f94289cb4b6d573abda1b9ffafb72658965428bcac90bd75176f9d2f3b20872b55c742e7271fab2569426d865167d7b355d58cfd3557527bf769583e7741dbfba845542af67079049f1aa16b09422396a9c43468049219a603979009f23033edf3b2887306dc534c327920b60c70b9c2383b5b1a5f6ebb206f5bc135fb4959143b3e37ecc4356496c299d0755186e9b0d63ef1f06d3722cb1d380980d660e2b05348eb5d0f1b9a4521003043b035615687cb8872bd71fb87e809ec0928abff7033cfe70cf258b7487111a0cf70ca1b21d3e815802f3222c9961698956defe953ef290b63fd113017d3f6fc9fc855c12e2349ef195e26fd2fcafd647a80521e527841f018f83b985d7a05fd986e11484825d98123b225ec35941e860396295d1bd7de1fc48a648fcec599b70d64f3014537bd798fb1ca88f539ae88b8d24d7e393bd2a380554704fdef274d8623a6f5cf2207b3baabf045a4a3936ec1864d5167827779099b6b881944b3eff241fc15e1fc6abae53d13705afe0836d06aff634004b23e6982057027dc0eb32c33b0decef1696bfe13dc89ff87bacadb9e43b44a40f87d312b23b4192c1f73cf69cea3a57087a5867688f83baed635e46721c6c379145b3ba47d6d6c6f806e840c033836e50ef0cb7b3c358af290df013cc9d6607e4613f82534276a840b4c9a720a2340f788447d0ba0b7c77c3dc10e9864884a9c421721b12fc1fc6e7711b14a3f9a067c1fd027c7c024c32c8ce06393c24a72fccea1f8ff59166fb863663bec6ee4f6c5789c61fa6f7e1fd02de82c7f957f511bebefc9404084ec7394ff82d3925784fa895e24a3aec0575e2420e11d61f63634de4819467e489cdf5813f8bf091d4f7c16d4cd4260f7e5615da3c1034e5303b0bcff6343e8dbcd6766b15a2b3ba2cdab9fdda366209d3702c11611a0a34de9f4f31cdf7c0decd46cdce37d08acb2b9563a92c4b1bfc9ef10003ecf3a93d9fd1083603dcce9edacbf93d6e6924ff8f77fd5e60d283539a146668316d14e6954b45b45e49ec9146b4ff5dc6276232ff0fcf45a0be67988f31c42b95a6ca7e3b7314e8373eed2ab1d7733f4142d3b23ce1da26741ad0fedfdafdd3eb233f8177e52f603a4bc86926ecda3562cfced2d837f511c7bd93ff93f94ca4aa30194b763c7042844ff2914feb23292fe3fe96ec7df03cf9836a6181a5fa4818909a8921b7c3c2ba92f5a6f1c9ab7c9de8c4a98c40ae704682186cc6b6bbdc91b81ed5ef79bd6dc31fac27274dbd4ccebb5c7fba1aec76dd526159eea0e5be64e76c0b73f2c0b5b194f3ba2ecd9df696d272624378b9a301219f6507952336d361429b984d82cac0995345393ee501090de3b483d39aecbd38ade3cfa77238dc33b111c1ff7cc705cf993b75dc53cdd60bab423c538de274be97c695386cc0d84dd09348bd3c12c31aa9604bf3074b67d1517d7fb444f3c9f2d42b34da2e9cee5412896edad58e6327988d11bd0c57888f37f3ffab6b98d2563eafe915f833b1e5d88c6fb8896d873c1724afcb9ccedfdbfa483a9fce1bf3c95e474963cf81138279c96778087bde67f491ec7c5cfd9ff40f7f2e14d62bb7ef605d773c94abc6bc777050af10f4adc2a6b0ed8bd602ebcf95a0ba38cfdc799dd627e18ddbb566fe6235f367c1cc1ff7c77174a95e1aaf7b7f2b1576b9165a821d7ff78c4f85e9b41665a7b377c01208f23e9c0e7cb48a4e86a6656968b6517a091e1ee0aa284b0313ba91da24ae572a43cbb2f267c227e07bb83fdf25e4b32b5e85180da6fd839d51d8635e05b4db38bbc4429c6b97b096dde8f50b877e6df6b2f797d6f6793e695796fa59dfced6adc9500be7fa71afbc84f14eb08d3dc2bcb217c9e12ecb13d395a6cf83f1705e91f208ca63090df7a9bfe1b63da2a5e91c65bfa3cf813e807491f161cf818f004f794c93aff4912c2fc8f23ffafae9f1e79fe11d99f6497d24bbffb2bc968c9bf054f41423c9d87bbbc3c92bcc0753a4409c59b98096856363beeb1dadf9f8ac7b466336deee83fc6ed12d9c826a7c9cf95b25a80a433823f3c3f2e47bd2cbf4657f1855edf140b17507eb088103367c6a1bc7a7c1653a80ebf9e0d304791faf3f3fbbd7a722bc692ed54960366a67d04dd625a6574cb9fd9ef30cc2bd53da754fc3286d4b7cc2647533df319e1331793c62cff5186d89e84eade393017e8036a6bfe08f589720c6084b7c58dbc72706fc184604deb88e6d542ab6313dbbfef44c74acce097c159ee7b6b76bd4ecec5e52d93f634312186d866bc49e1f71bd8ccf47abc6b460361e2effa7361a4621c25bdb4d665e927141fcd3355582f94de693edaa3bffc8f99af75ead673adfb7b6acabefffb27f84f1e6f4ca780b9f7f3ce73102cb11329cc1dcc9f96b447830023f13f157295863c829a3c2b9302b5cf6457c128a2af2bdf9a139d2443823288769a21a2388d1247edbfaf9c9516763c73d5e1cff58a23617bc93ec700f9e2c2ac782d512ae819fa129199e91364eb3d02bdc07cbe0aff8be99b3ce79c4ad7d22c33b6eeec767e65efee47db9d23f485c4f96d6a3e271eef4a9dc8ee9af4f251af40a14002802f70b9c9f6077bb36c4ae626ad1c17a938ac7adfa736a33e3f145f7b49f3f1f766896e6798cd6319ff02bff7f627bbabe267a40c22733d4827fee513dede13c5ceb0b6feb23cc5a9a95096e758fd0bbf9fe9a6ffe79fbbc7fe4ad383126ab105907bcae78bc4fa97f271df7a9e0a89b18198552806658afde33ee40f563382364957c90dbc0fac8ffc9ede24043ce5b4c2b67f86ef8c4105fb00bf62168a9d5f10d9a9f440950add415cb6dea95ca9cf53b3d223b03597d86495391e3666850fa5ec8d05c6aebb0b99c4d6d1c74e7413fce96e316cabb17f03d107b5078e882cdc87da1fde0fe01b8029520d21af8ea8964e0844083a99d8cdb78eeedf4ac1f191e91d5a3e05aa8b82f092578bb3de2cd6172bdd95137bc48e0fd794b1f69d5525e71adefa4a795ffff46ee4ffbfde73c84dde793f15a0ffa91ee0dba8e6e91fb4df83c0411dd1f845a415c01ea169ceea14bd69ae9d53056382364d7ab0ec227012293b12411109bbde30ee7e959836b10b1781d81d01c9fae42966e5dd39d2bf93aa2bb13ec5a49cc67422baf6942a23fb0d8d2eca949e57c6edbb9b5d3dfea388c96735e454e49613f072984f397446a497c18d9bef9099d7da17390ee5eeaffe0b6a6ab79b896fedcf4cabfe776addbf9bb6f9cf73c1adff5b8bd07bac507fc23199e91b59dddfe3e2befffb62ffcadf6e978adccda3db41f524f00f13be1d758ee09f973980c60fb740e3a856a2c6299e17a9e23382359c906fcb507137cbc984f902809f0e17a22e12f9c265139cf2676feab78a08ccd292b8f73f999ccc6e525195596268659b996fb4853db441a63caaed998d32bda7c2bc7826d07f314ceabd80ec2fa889ad2f05b9a7b6dcbc1f4c649ecf0dc6f70a527dc3ef796d6dfea17d407ee45ccc6776bef7fef9a9ddf69f6fb0ccf0a6f9fcfef9fd54740a26cb6d335b8b9ff039e7e25e727fad307fbfdf0ea7c501f79f3ffd736b82bbd8efe9fca09c9fcd769dc424a7db80c505a17c2d56b90a16c74fe081fc9cc023f7fb7b4ef23ed2d1ec2cf23e51dfde5151db891161edc47f8d3e767696b761cd097d653626df815ef7b6f4cbffcfc767cd7dfc3f3fb724abf7ffdac3f698fd6f5fa7beaafe2fdfcd5383ed2bfb77eff816b04fa4866d7fed17d3fd32f12cb50e727f59ae7133e42ef267edb95f11c90e3035febded3b46f7efed595ee88422dd15b7ef8f974dcc0a35d11eb23e28f8d3b13db4bf535e2d79fb556f77ad4cfcf47a1f6b79ecfe603bcaeb3e10acf4978dd0fb778cb47beb351ab2ba35b7fa12534a30e748bcabde83573727eb4c1f34137fbfdf8a4cf376edbf9bbeb91ee8b743dfedebeb85e0f62b562b63eca47bebd17228b454afc23577e951f9b0df02390678710114efd143f7f4248d439b5f145d46ff303edca4a4b6924899f93883e721f13f0014bc2573562a1794dfd4677fdfe81f9a1b184a72ef363257632c4ec5a8fe284bef29acc84caecf1fef73eefed7ef0f70e3a9b105706f91c7fab1f10730027153c9c3f356efedea5fe1f9fe78ffc9df548afc85276d01fba1e3fbd3fd2f5286dd3f5a0b62ff89ec85a1eb1f9bbdf7545cc370291daa75a7d07be6cf23d6fdffcfcf4ca7d02f83d450ba8a7feff1fbe7ab033ea1bd2971f1a77ba1e6c674a8e7aaa9d7a576bf1d3f3c0d683f0758951b0bfb21e8eef0c0aa40f10af909d0b7246486e1cf88ebfe74a7622c40243d667a73ba0f91fec7bb8aadffbfcd437ce9f872463b3079ff980d2ae1f7c3e9d0f89c43a93b93806df3efeec3c135e4e693641475097adfbf9b9b97efbfc2099ae07b258ccf8c379fbc6fd89d703d6a1d0b85b0f1515e08c9cad56ed6c0d57df75755f5bb5daac5ba8bbb5e5b255506adb53ef6c35dbdffddcdbeb7603d7cab1beaf2d0bcd6e5c7787c7f6cb4ff7039e57df9daddaa2eed60f8546e5f8fdcf3d75cf56b790cec3a95bda36dbb5355d8f9f5e87db2bac47fd4cd703e685f6f7e79e5f9b9dbab5f5ff9b73797208223e5cb361f2cee54ab5d65c009db7fe89</data>
+ </pixmap>
+ <signal>signalTz(const QString &amp;, const QString &amp;)</signal>
+ </customwidget>
+</customwidgets>
+</CW>
diff --git a/core/settings/citytime/zonemap.h b/core/settings/citytime/zonemap.h
new file mode 100644
index 0000000..c9c2035
--- a/dev/null
+++ b/core/settings/citytime/zonemap.h
@@ -0,0 +1,157 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ZONEMAP_H
+#define ZONEMAP_H
+
+#include "stylusnormalizer.h"
+
+#include <qlist.h>
+#include <qscrollview.h>
+#include <qstring.h>
+
+extern const int iCITYOFFSET;
+
+class QImage;
+class QComboBox;
+class QLabel;
+class QTimer;
+class QToolButton;
+
+
+
+class ZoneField
+{
+public:
+ ZoneField( const QString & );
+ void showStructure( void ) const;
+ inline int x( void ) const { return _x; };
+ inline int y( void ) const { return _y; };
+
+ inline QString city( void ) const { return strCity; };
+ inline QString country( void ) const { return strCountry; };
+ inline QString code( void ) const { return strCountryCode; };
+private:
+ int _x;
+ int _y;
+ QString strCountryCode;
+ QString strCountry;
+ QString strCity;
+};
+
+class ZoneMap : public QScrollView
+{
+ Q_OBJECT
+public:
+ ZoneMap( QWidget *parent = 0, const char *name = 0 );
+ ~ZoneMap();
+ void showZones( void ) const;
+ // convert between the pixels on the image and the coordinates in the
+ // database
+ inline bool zoneToWin( int zoneX, int zoneY, int &winX, int &winY ) const;
+ inline bool winToZone( int winX, int winY, int &zoneX, int &zoneY ) const;
+
+public slots:
+ void slotZoom( bool setZoom );
+ void slotIllum( bool setIllum );
+ void slotUpdate( void );
+ void slotRedraw( void );
+ void slotFindCity( const QPoint &pos ); // Find the closest city
+ void changeClock( bool );
+
+signals:
+ void signalTz( const QString &newCountry, const QString &newCity );
+
+protected:
+ virtual void viewportMouseMoveEvent( QMouseEvent *event );
+ virtual void viewportMousePressEvent( QMouseEvent *event );
+ virtual void viewportMouseReleaseEvent( QMouseEvent *event );
+ virtual void keyPressEvent( QKeyEvent * );
+ virtual void resizeEvent( QResizeEvent *);
+ virtual void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
+
+private:
+ ZoneField *findCityNear( ZoneField *city, int key );
+ void showCity( ZoneField *city );
+ void drawCities( QPainter *p ); // put all the cities on the map (ugly)
+ void drawCity( QPainter *p, const ZoneField *pCity ); // draw the given city on the map
+ void readZones( void ); // Read in the zone information from the file
+ void zoom( void ); // Zoom the map...
+ void makeMap( int width, int height );
+ QPixmap* pixCurr; // image to be drawn on the screen
+ QLabel* lblCity; // the "tool-tip" that shows up when you pick a city...
+ QToolButton *cmdZoom; // our zoom option...
+ QTimer* tHide; // the timer to hide the "tool tip"
+ ZoneField *pLast; // the last known good city that was found...
+ ZoneField *pRepaint; // save the location to maximize the repaint...
+ QList<ZoneField> zones; // a linked list to hold all this information
+ StylusNormalizer norm;
+
+ //the True width and height of the map...
+ int wImg;
+ int hImg;
+ // the pixel points that correspond to (0, 0);
+ int ox;
+ int oy;
+
+ // the drawable area of the map...
+ int drawableW;
+ int drawableH;
+
+ bool bZoom; // a flag to indicate zoom is active
+ bool bIllum; // flag to indicat that illumination is active
+ bool ampm;
+
+ ZoneField *cursor;
+};
+
+inline bool ZoneMap::zoneToWin( int zoneX, int zoneY,
+ int &winX, int &winY ) const
+{
+ winY = oy - ( ( hImg * zoneY ) / 648000 ); // 180 degrees in secs
+ winX = ox + ( ( wImg * zoneX ) / 1296000 ); // 360 degrees in secs
+ // whoa, some things aren't in the best spots..
+ if ( winX > wImg ) {
+ winX = wImg - iCITYOFFSET;
+ } else if ( winX <= 0 ) {
+ winX = iCITYOFFSET;
+ }
+
+ if ( winY >= hImg ) {
+ winY = hImg - iCITYOFFSET;
+ } else if ( winY <= 0 ) {
+ winY = iCITYOFFSET;
+ }
+ // perhaps in the future there will be some real error checking
+ // for now just return true...
+ return true;
+}
+
+inline bool ZoneMap::winToZone( int winX, int winY,
+ int &zoneX, int &zoneY ) const
+{
+ zoneY = ( 648000 * ( oy - winY ) ) / hImg;
+ zoneX = ( 1296000 * ( winX - ox ) ) / wImg;
+ // perhaps in the future there will be some real error checking
+ // for now just return true...
+ return true;
+}
+
+#endif
diff --git a/core/settings/light-and-power/.cvsignore b/core/settings/light-and-power/.cvsignore
new file mode 100644
index 0000000..e6ba7a1
--- a/dev/null
+++ b/core/settings/light-and-power/.cvsignore
@@ -0,0 +1,4 @@
+moc_*
+Makefile
+lightsettingsbase.h
+lightsettingsbase.cpp
diff --git a/core/settings/light-and-power/Makefile.in b/core/settings/light-and-power/Makefile.in
new file mode 100644
index 0000000..8236ed0
--- a/dev/null
+++ b/core/settings/light-and-power/Makefile.in
@@ -0,0 +1,135 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = light-and-power
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = settings.h
+SOURCES = light.cpp \
+ main.cpp
+OBJECTS = light.o \
+ main.o \
+ lightsettingsbase.o
+INTERFACES = lightsettingsbase.ui
+UICDECLS = lightsettingsbase.h
+UICIMPLS = lightsettingsbase.cpp
+SRCMOC = moc_settings.cpp \
+ moc_lightsettingsbase.cpp
+OBJMOC = moc_settings.o \
+ moc_lightsettingsbase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake light-and-power.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+light.o: light.cpp \
+ settings.h \
+ lightsettingsbase.h
+
+main.o: main.cpp \
+ settings.h \
+ lightsettingsbase.h
+
+lightsettingsbase.h: lightsettingsbase.ui
+ $(UIC) lightsettingsbase.ui -o $(INTERFACE_DECL_PATH)/lightsettingsbase.h
+
+lightsettingsbase.cpp: lightsettingsbase.ui
+ $(UIC) lightsettingsbase.ui -i lightsettingsbase.h -o lightsettingsbase.cpp
+
+lightsettingsbase.o: lightsettingsbase.cpp \
+ lightsettingsbase.h \
+ lightsettingsbase.ui
+
+moc_settings.o: moc_settings.cpp \
+ settings.h \
+ lightsettingsbase.h
+
+moc_lightsettingsbase.o: moc_lightsettingsbase.cpp \
+ lightsettingsbase.h
+
+moc_settings.cpp: settings.h
+ $(MOC) settings.h -o moc_settings.cpp
+
+moc_lightsettingsbase.cpp: lightsettingsbase.h
+ $(MOC) lightsettingsbase.h -o moc_lightsettingsbase.cpp
+
+
diff --git a/core/settings/light-and-power/light-and-power.pro b/core/settings/light-and-power/light-and-power.pro
new file mode 100644
index 0000000..87bb111
--- a/dev/null
+++ b/core/settings/light-and-power/light-and-power.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = ../../bin
+HEADERS = settings.h
+SOURCES = light.cpp main.cpp
+INTERFACES = lightsettingsbase.ui
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include
+LIBS += -lqpe
+TARGET = light-and-power
+
+TRANSLATIONS = ../../i18n/de/light-and-power.ts
diff --git a/core/settings/light-and-power/light-off.xpm b/core/settings/light-and-power/light-off.xpm
new file mode 100644
index 0000000..26624c7
--- a/dev/null
+++ b/core/settings/light-and-power/light-off.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * light_off_xpm[] = {
+"16 16 4 1",
+" c None",
+". c #000000000000",
+"X c #6B6B6C6C6C6C",
+"o c #FFFF6C6C0000",
+" ",
+" ",
+" ... ",
+" . . ",
+" . X. ",
+" . X. ",
+" . XXX. ",
+" . X XX. ",
+" . XX. ",
+" . XXX. ",
+" . X. ",
+" . X.. ",
+" .ooo.. ",
+" .ooo.. ",
+" .o.. ",
+" .. "};
diff --git a/core/settings/light-and-power/light-on.xpm b/core/settings/light-and-power/light-on.xpm
new file mode 100644
index 0000000..3f8e174
--- a/dev/null
+++ b/core/settings/light-and-power/light-on.xpm
@@ -0,0 +1,24 @@
+/* XPM */
+static char * light_on_xpm[] = {
+"16 16 5 1",
+" c None",
+". c #FFFFFFFF0000",
+"X c #000000000000",
+"o c #FFFFFFFFFFFF",
+"O c #FFFF6C6C0000",
+" . . ",
+" . . . ",
+" . XXX . ",
+" XoooX . ",
+" Xoooo.X ",
+" .. Xoooooo.X ",
+" Xoooo...X ..",
+" Xooo.o..X ",
+" .. Xooo..X ",
+" Xoo...X ",
+" . Xoo.X . ",
+" . Xoo.XX . ",
+" XOOOXX ",
+" XOOOXX ",
+" XOXX ",
+" XX "};
diff --git a/core/settings/light-and-power/light.cpp b/core/settings/light-and-power/light.cpp
new file mode 100644
index 0000000..24e1fab
--- a/dev/null
+++ b/core/settings/light-and-power/light.cpp
@@ -0,0 +1,133 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "settings.h"
+
+#include <qpe/global.h>
+#include <qpe/fontmanager.h>
+#include <qpe/config.h>
+#include <qpe/applnk.h>
+#include <qpe/qpeapplication.h>
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+#include <qpe/qcopenvelope_qws.h>
+#endif
+
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+#include <qslider.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qdatastream.h>
+#include <qmessagebox.h>
+#include <qcombobox.h>
+#include <qspinbox.h>
+#include <qlistbox.h>
+#include <qdir.h>
+#if QT_VERSION >= 300
+#include <qstylefactory.h>
+#endif
+
+extern int qpe_sysBrightnessSteps();
+
+LightSettings::LightSettings( QWidget* parent, const char* name, WFlags fl )
+ : LightSettingsBase( parent, name, TRUE, fl )
+{
+ // Not supported
+ auto_brightness->hide();
+
+ Config config( "qpe" );
+
+ config.setGroup( "Screensaver" );
+
+ int interval;
+ interval = config.readNumEntry( "Interval_Dim", 30 );
+ interval_dim->setValue( interval );
+ interval = config.readNumEntry( "Interval_LightOff", 20 );
+ interval_lightoff->setValue( interval );
+ interval = config.readNumEntry( "Interval", 60 );
+ if ( interval > 3600 ) interval /= 1000; // compatibility (was millisecs)
+ interval_suspend->setValue( interval );
+
+ screensaver_dim->setChecked( config.readNumEntry("Dim",1) != 0 );
+ screensaver_lightoff->setChecked( config.readNumEntry("LightOff",1) != 0 );
+ int maxbright = qpe_sysBrightnessSteps();
+ initbright = config.readNumEntry("Brightness",255);
+ brightness->setMaxValue( maxbright );
+ brightness->setTickInterval( QMAX(1,maxbright/16) );
+ brightness->setLineStep( QMAX(1,maxbright/16) );
+ brightness->setPageStep( QMAX(1,maxbright/16) );
+ brightness->setValue( (maxbright*255 - initbright*maxbright)/255 );
+
+ connect(brightness, SIGNAL(valueChanged(int)), this, SLOT(applyBrightness()));
+}
+
+LightSettings::~LightSettings()
+{
+}
+
+static void set_fl(int bright)
+{
+ QCopEnvelope e("QPE/System", "setBacklight(int)" );
+ e << bright;
+}
+
+void LightSettings::reject()
+{
+ set_fl(initbright);
+
+ QDialog::reject();
+}
+
+void LightSettings::accept()
+{
+ if ( qApp->focusWidget() )
+ qApp->focusWidget()->clearFocus();
+
+ applyBrightness();
+
+ int i_dim = (screensaver_dim->isChecked() ? interval_dim->value() : 0);
+ int i_lightoff = (screensaver_lightoff->isChecked() ? interval_lightoff->value() : 0);
+ int i_suspend = interval_suspend->value();
+ QCopEnvelope e("QPE/System", "setScreenSaverIntervals(int,int,int)" );
+ e << i_dim << i_lightoff << i_suspend;
+
+ Config config( "qpe" );
+ config.setGroup( "Screensaver" );
+ config.writeEntry( "Dim", (int)screensaver_dim->isChecked() );
+ config.writeEntry( "LightOff", (int)screensaver_lightoff->isChecked() );
+ config.writeEntry( "Interval_Dim", interval_dim->value() );
+ config.writeEntry( "Interval_LightOff", interval_lightoff->value() );
+ config.writeEntry( "Interval", interval_suspend->value() );
+ config.writeEntry( "Brightness",
+ (brightness->maxValue()-brightness->value())*255/brightness->maxValue() );
+ config.write();
+
+ QDialog::accept();
+}
+
+void LightSettings::applyBrightness()
+{
+ int bright = (brightness->maxValue()-brightness->value())*255
+ / brightness->maxValue();
+ set_fl(bright);
+}
+
+
diff --git a/core/settings/light-and-power/lightsettingsbase.ui b/core/settings/light-and-power/lightsettingsbase.ui
new file mode 100644
index 0000000..47775f7
--- a/dev/null
+++ b/core/settings/light-and-power/lightsettingsbase.ui
@@ -0,0 +1,471 @@
+<!DOCTYPE UI><UI>
+<class>LightSettingsBase</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>LightSettingsBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>256</width>
+ <height>316</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Light Settings</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>7</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>auto_brightness</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Adjust to environment</string>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>By sensing the ambient light where you are using your device, the screen light can be adjusted automatically. The brightness setting still affects the average brightness.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Power saving</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>6</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget row="1" column="1" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>interval_lightoff</cstring>
+ </property>
+ <property stdset="1">
+ <name>suffix</name>
+ <string> seconds</string>
+ </property>
+ <property stdset="1">
+ <name>buttonSymbols</name>
+ <enum>PlusMinus</enum>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>3600</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>10</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>15</number>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>interval_suspend</cstring>
+ </property>
+ <property stdset="1">
+ <name>suffix</name>
+ <string> seconds</string>
+ </property>
+ <property stdset="1">
+ <name>buttonSymbols</name>
+ <enum>PlusMinus</enum>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>3600</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>10</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>15</number>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>screensaver_lightoff</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Light off after</string>
+ </property>
+ <property stdset="1">
+ <name>checked</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>screensaver_dim</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Dim light after</string>
+ </property>
+ <property stdset="1">
+ <name>checked</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>interval_dim</cstring>
+ </property>
+ <property stdset="1">
+ <name>suffix</name>
+ <string> seconds</string>
+ </property>
+ <property stdset="1">
+ <name>buttonSymbols</name>
+ <enum>PlusMinus</enum>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>3600</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>10</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>15</number>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Suspend after</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout18</cstring>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QSlider</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>brightness</cstring>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>255</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>16</number>
+ </property>
+ <property stdset="1">
+ <name>pageStep</name>
+ <number>16</number>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>tickmarks</name>
+ <enum>Right</enum>
+ </property>
+ <property stdset="1">
+ <name>tickInterval</name>
+ <number>32</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout16</cstring>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout10</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PixmapLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image0</pixmap>
+ </property>
+ <property stdset="1">
+ <name>scaledContents</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Bright</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer3</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;blockquote&gt;The brighter the screen light, the more battery power is used.&lt;/blockquote&gt;</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout9</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PixmapLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image1</pixmap>
+ </property>
+ <property stdset="1">
+ <name>scaledContents</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Off</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignLeft</set>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="439">789c6d8ec10ac2300c86ef7b8ad0ff36a4730777111f41f1288887b4b3e8610a3a0f22bebb6dd3d54d0ca5cdffe54f9aaaa4dd764d6555dc7beecf96ec896f54b68fae7bee0fab57a1ea86fc5950ad6685d2646973bd1c43ce3ec73c46903648e79a5624443a27d20cd2b9382704747e124382f11a7c5e30b364b957b331866331b3800c38f70282121c7c628367c098c1e0eb03121ccd4b46fcb0f80b26bb4833987f76b6d6f274de5fe6a1a031d30969f55e161fe4715f7b</data>
+ </image>
+ <image>
+ <name>image1</name>
+ <data format="XPM.GZ" length="424">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022130543251d2e253d856405bffcbc54105b19c856360003103711c4354b344b314b04719340dcb434b31488ac1e1a2020a6acac8c2ea60cc54862606ea232b218541b5810452c3111432c510f550c22886a1e482c115d0c2c88e6168818babaa4a42462c48082cae8e68102011a06b5d65c0041d3518e</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>screensaver_dim</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>interval_dim</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+ <connection>
+ <sender>screensaver_lightoff</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>interval_lightoff</receiver>
+ <slot>setEnabled(bool)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>auto_brightness</tabstop>
+ <tabstop>screensaver_dim</tabstop>
+ <tabstop>interval_dim</tabstop>
+ <tabstop>screensaver_lightoff</tabstop>
+ <tabstop>interval_lightoff</tabstop>
+ <tabstop>interval_suspend</tabstop>
+ <tabstop>brightness</tabstop>
+</tabstops>
+</UI>
diff --git a/core/settings/light-and-power/main.cpp b/core/settings/light-and-power/main.cpp
new file mode 100644
index 0000000..051fdec
--- a/dev/null
+++ b/core/settings/light-and-power/main.cpp
@@ -0,0 +1,38 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "settings.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/global.h>
+
+
+int main(int argc, char** argv)
+{
+ QPEApplication a(argc,argv);
+
+ LightSettings dlg;
+
+ a.showMainWidget(&dlg);
+
+ return a.exec();
+}
+
diff --git a/core/settings/light-and-power/qpe-light-and-power.control b/core/settings/light-and-power/qpe-light-and-power.control
new file mode 100644
index 0000000..0ed9d84
--- a/dev/null
+++ b/core/settings/light-and-power/qpe-light-and-power.control
@@ -0,0 +1,9 @@
+Files: bin/light-and-power apps/Settings/Light.desktop
+Priority: optional
+Section: qpe/settings
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Light and Power settings dialog
+ For the Qtopia environment.
diff --git a/core/settings/light-and-power/settings.h b/core/settings/light-and-power/settings.h
new file mode 100644
index 0000000..cec08e3
--- a/dev/null
+++ b/core/settings/light-and-power/settings.h
@@ -0,0 +1,50 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef SETTINGS_H
+#define SETTINGS_H
+
+
+#include <qstrlist.h>
+#include <qasciidict.h>
+#include "lightsettingsbase.h"
+
+
+class LightSettings : public LightSettingsBase
+{
+ Q_OBJECT
+
+public:
+ LightSettings( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~LightSettings();
+
+protected:
+ void accept();
+ void reject();
+
+private slots:
+ void applyBrightness();
+
+private:
+ int initbright;
+};
+
+
+#endif // SETTINGS_H
+
diff --git a/core/settings/security/.cvsignore b/core/settings/security/.cvsignore
new file mode 100644
index 0000000..11eef0d
--- a/dev/null
+++ b/core/settings/security/.cvsignore
@@ -0,0 +1,5 @@
+Makefile
+moc_*
+*.moc
+securitybase.cpp
+securitybase.h
diff --git a/core/settings/security/Makefile.in b/core/settings/security/Makefile.in
new file mode 100644
index 0000000..803edc5
--- a/dev/null
+++ b/core/settings/security/Makefile.in
@@ -0,0 +1,135 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = security
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = security.h
+SOURCES = security.cpp \
+ main.cpp
+OBJECTS = security.o \
+ main.o \
+ securitybase.o
+INTERFACES = securitybase.ui
+UICDECLS = securitybase.h
+UICIMPLS = securitybase.cpp
+SRCMOC = moc_security.cpp \
+ moc_securitybase.cpp
+OBJMOC = moc_security.o \
+ moc_securitybase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake security.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+security.o: security.cpp \
+ security.h \
+ securitybase.h
+
+main.o: main.cpp \
+ security.h \
+ securitybase.h
+
+securitybase.h: securitybase.ui
+ $(UIC) securitybase.ui -o $(INTERFACE_DECL_PATH)/securitybase.h
+
+securitybase.cpp: securitybase.ui
+ $(UIC) securitybase.ui -i securitybase.h -o securitybase.cpp
+
+securitybase.o: securitybase.cpp \
+ securitybase.h \
+ securitybase.ui
+
+moc_security.o: moc_security.cpp \
+ security.h \
+ securitybase.h
+
+moc_securitybase.o: moc_securitybase.cpp \
+ securitybase.h
+
+moc_security.cpp: security.h
+ $(MOC) security.h -o moc_security.cpp
+
+moc_securitybase.cpp: securitybase.h
+ $(MOC) securitybase.h -o moc_securitybase.cpp
+
+
diff --git a/core/settings/security/main.cpp b/core/settings/security/main.cpp
new file mode 100644
index 0000000..c15bb31
--- a/dev/null
+++ b/core/settings/security/main.cpp
@@ -0,0 +1,38 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/qpeapplication.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/global.h>
+
+#include "security.h"
+
+
+int main(int argc, char** argv)
+{
+ QPEApplication a(argc,argv);
+
+ Security dlg;
+
+ a.showMainWidget(&dlg);
+
+ return a.exec();
+}
+
diff --git a/core/settings/security/qpe-security.control b/core/settings/security/qpe-security.control
new file mode 100644
index 0000000..78a5a86
--- a/dev/null
+++ b/core/settings/security/qpe-security.control
@@ -0,0 +1,9 @@
+Files: bin/security apps/Settings/Security.desktop
+Priority: optional
+Section: qpe/settings
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Security settings dialog
+ For the Qtopia environment.
diff --git a/core/settings/security/security.cpp b/core/settings/security/security.cpp
new file mode 100644
index 0000000..f4116b0
--- a/dev/null
+++ b/core/settings/security/security.cpp
@@ -0,0 +1,234 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "security.h"
+
+#include <qpe/config.h>
+#include <qpe/password.h>
+#include <qpe/qpedialog.h>
+
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qcombobox.h>
+#include <qmessagebox.h>
+
+Security::Security( QWidget* parent, const char* name, WFlags fl )
+ : SecurityBase( parent, name, TRUE, fl )
+{
+ valid=FALSE;
+ Config cfg("Security");
+ cfg.setGroup("Passcode");
+ passcode = cfg.readEntry("passcode");
+ passcode_poweron->setChecked(cfg.readBoolEntry("passcode_poweron",FALSE));
+ cfg.setGroup("Sync");
+ int auth_peer = cfg.readNumEntry("auth_peer",0xc0a80100);
+ int auth_peer_bits = cfg.readNumEntry("auth_peer_bits",24);
+ selectNet(auth_peer,auth_peer_bits);
+ connect(syncnet, SIGNAL(textChanged(const QString&)),
+ this, SLOT(setSyncNet(const QString&)));
+
+ /*
+ cfg.setGroup("Remote");
+ if ( telnetAvailable() )
+ telnet->setChecked(cfg.readEntry("allow_telnet"));
+ else
+ telnet->hide();
+
+ if ( sshAvailable() )
+ ssh->setChecked(cfg.readEntry("allow_ssh"));
+ else
+ ssh->hide();
+ */
+
+ connect(changepasscode,SIGNAL(clicked()), this, SLOT(changePassCode()));
+ connect(clearpasscode,SIGNAL(clicked()), this, SLOT(clearPassCode()));
+ updateGUI();
+
+ dl = new QPEDialogListener(this);
+}
+
+Security::~Security()
+{
+}
+
+
+void Security::updateGUI()
+{
+ bool empty = passcode.isEmpty();
+
+ changepasscode->setText( empty ? tr("Set passcode" )
+ : tr("Change passcode" ) );
+ passcode_poweron->setEnabled( !empty );
+ clearpasscode->setEnabled( !empty );
+}
+
+
+void Security::show()
+{
+ valid=FALSE;
+ setEnabled(FALSE);
+ SecurityBase::show();
+ if ( passcode.isEmpty() ) {
+ // could insist...
+ //changePassCode();
+ //if ( passcode.isEmpty() )
+ //reject();
+ } else {
+ QString pc = enterPassCode(tr("Enter passcode"));
+ if ( pc != passcode ) {
+ QMessageBox::critical(this, tr("Passcode incorrect"),
+ tr("The passcode entered is incorrect.\nAccess denied"));
+ reject();
+ return;
+ }
+ }
+ setEnabled(TRUE);
+ valid=TRUE;
+}
+
+void Security::accept()
+{
+ applySecurity();
+ QDialog::accept();
+}
+
+void Security::done(int r)
+{
+ QDialog::done(r);
+ close();
+}
+
+void Security::selectNet(int auth_peer,int auth_peer_bits)
+{
+ QString sn;
+ if ( auth_peer_bits == 0 && auth_peer == 0 ) {
+ sn = tr("Any");
+ } else if ( auth_peer_bits == 32 && auth_peer == 0 ) {
+ sn = tr("None");
+ } else {
+ sn =
+ QString::number((auth_peer>>24)&0xff) + "."
+ + QString::number((auth_peer>>16)&0xff) + "."
+ + QString::number((auth_peer>>8)&0xff) + "."
+ + QString::number((auth_peer>>0)&0xff) + "/"
+ + QString::number(auth_peer_bits);
+ }
+ for (int i=0; i<syncnet->count(); i++) {
+ if ( syncnet->text(i).left(sn.length()) == sn ) {
+ syncnet->setCurrentItem(i);
+ return;
+ }
+ }
+ qDebug("No match for \"%s\"",sn.latin1());
+}
+
+void Security::parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits)
+{
+ auth_peer=0;
+ if ( sn == tr("Any") ) {
+ auth_peer = 0;
+ auth_peer_bits = 0;
+ } else if ( sn == tr("None") ) {
+ auth_peer = 0;
+ auth_peer_bits = 32;
+ } else {
+ int x=0;
+ for (int i=0; i<4; i++) {
+ int nx = sn.find(QChar(i==3 ? '/' : '.'),x);
+ auth_peer = (auth_peer<<8)|sn.mid(x,nx-x).toInt();
+ x = nx+1;
+ }
+ uint n = (uint)sn.find(' ',x)-x;
+ auth_peer_bits = sn.mid(x,n).toInt();
+ }
+}
+
+void Security::setSyncNet(const QString& sn)
+{
+ int auth_peer,auth_peer_bits;
+ parseNet(sn,auth_peer,auth_peer_bits);
+ selectNet(auth_peer,auth_peer_bits);
+}
+
+void Security::applySecurity()
+{
+ if ( valid ) {
+ Config cfg("Security");
+ cfg.setGroup("Passcode");
+ cfg.writeEntry("passcode",passcode);
+ cfg.writeEntry("passcode_poweron",passcode_poweron->isChecked());
+ cfg.setGroup("Sync");
+ int auth_peer=0;
+ int auth_peer_bits;
+ QString sn = syncnet->currentText();
+ parseNet(sn,auth_peer,auth_peer_bits);
+ cfg.writeEntry("auth_peer",auth_peer);
+ cfg.writeEntry("auth_peer_bits",auth_peer_bits);
+ /*
+ cfg.setGroup("Remote");
+ if ( telnetAvailable() )
+ cfg.writeEntry("allow_telnet",telnet->isChecked());
+ if ( sshAvailable() )
+ cfg.writeEntry("allow_ssh",ssh->isChecked());
+ // ### write ssh/telnet sys config files
+ */
+ }
+}
+
+void Security::changePassCode()
+{
+ QString new1;
+ QString new2;
+
+ do {
+ new1 = enterPassCode("Enter new passcode");
+ if ( new1.isNull() )
+ return;
+ new2 = enterPassCode("Re-enter new passcode");
+ if ( new2.isNull() )
+ return;
+ } while (new1 != new2);
+
+ passcode = new1;
+ updateGUI();
+}
+
+void Security::clearPassCode()
+{
+ passcode = QString::null;
+ updateGUI();
+}
+
+
+QString Security::enterPassCode(const QString& prompt)
+{
+ return Password::getPassword(prompt);
+}
+
+bool Security::telnetAvailable() const
+{
+ // ### not implemented
+ return FALSE;
+}
+
+bool Security::sshAvailable() const
+{
+ // ### not implemented
+ return FALSE;
+}
diff --git a/core/settings/security/security.h b/core/settings/security/security.h
new file mode 100644
index 0000000..efc83a2
--- a/dev/null
+++ b/core/settings/security/security.h
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef SECURITY_H
+#define SECURITY_H
+
+#include "securitybase.h"
+
+class QPEDialogListener;
+
+class Security : public SecurityBase
+{
+ Q_OBJECT
+
+public:
+ Security( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~Security();
+
+ void show();
+
+protected:
+ void accept();
+ void applySecurity();
+ void done(int);
+
+private slots:
+ void changePassCode();
+ void clearPassCode();
+ void setSyncNet(const QString&);
+
+private:
+ bool telnetAvailable() const;
+ bool sshAvailable() const;
+ void updateGUI();
+
+ static void parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits);
+ void selectNet(int auth_peer,int auth_peer_bits);
+
+ QString enterPassCode(const QString&);
+ QString passcode;
+ bool valid;
+
+ QPEDialogListener *dl;
+};
+
+
+#endif // SECURITY_H
+
diff --git a/core/settings/security/security.pro b/core/settings/security/security.pro
new file mode 100644
index 0000000..282127e
--- a/dev/null
+++ b/core/settings/security/security.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = ../../bin
+HEADERS = security.h
+SOURCES = security.cpp main.cpp
+INTERFACES = securitybase.ui
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include
+LIBS += -lqpe
+TARGET = security
+
+TRANSLATIONS = ../../i18n/de/security.ts
diff --git a/core/settings/security/securitybase.ui b/core/settings/security/securitybase.ui
new file mode 100644
index 0000000..2f3189d
--- a/dev/null
+++ b/core/settings/security/securitybase.ui
@@ -0,0 +1,200 @@
+<!DOCTYPE UI><UI>
+<class>SecurityBase</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>SecurityBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>281</width>
+ <height>328</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Security Settings</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="0" >
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>-1</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>changepasscode</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Change passcode</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>clearpasscode</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Clear passcode</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>passcode_poweron</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Require pass code at power-on</string>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QTabWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TabWidget2</cstring>
+ </property>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tab</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Sync</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Accept sync from network:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>192.168.1.0/24 (default)</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>192.168.0.0/16</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>172.16.0.0/12</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>10.0.0.0/8</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Any</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>None</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>syncnet</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;P&gt;Pass code protection provides a minimal level of protection from casual access to this device.</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignTop|AlignLeft</set>
+ </property>
+ <property>
+ <name>vAlign</name>
+ </property>
+ </widget>
+ </grid>
+</widget>
+</UI>
diff --git a/docs/README b/docs/README
new file mode 100644
index 0000000..573e0fa
--- a/dev/null
+++ b/docs/README
@@ -0,0 +1,2 @@
+After running qdoc in the directory above, the html directory created here should
+be renamed to "qtopia" and moved to $QTDIR/doc/html/
diff --git a/docs/beauty.html b/docs/beauty.html
new file mode 100644
index 0000000..9cf6509
--- a/dev/null
+++ b/docs/beauty.html
@@ -0,0 +1,10 @@
+<html><head><title>The beauty of Qt/Embedded</title></head><body><h2>The beauty of Qt/Embedded</h2>
+Qt/Embedded features some great additional functionality compared
+to X11. You will be stunned by the beauty of anti-aliased text and alpha
+blended pixmaps. These new features could add an additional touch of class to a
+user interface. Forget about embedded graphics which looks more like old
+alphanumeric terminals. Qt/Embedded can utilize hardware graphics acceleration
+and it is well suited for multimedia and web applications. Let Qt/Embedded
+impress you and your customers.
+</body>
+</html>
diff --git a/docs/copying.html b/docs/copying.html
new file mode 100644
index 0000000..5425ff7
--- a/dev/null
+++ b/docs/copying.html
@@ -0,0 +1,336 @@
+<html><head><title>Copying</title></head><body><h2> Copying</h2>
+
+<p>
+<b>The Qtopia Environment is Copyright &copy; 2000 Trolltech AS.</b>
+
+<p>
+<b>
+ You may use, distribute and copy the Qtopia Environment under the terms of
+ GNU General Public License version 2, which is displayed below.
+</b>
+
+<p>
+<hr>
+
+<h1 align=center>GNU General Public License
+<small>Version 2, June 1991</small>
+</h1>
+
+<p>
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+<br>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+<h2>Preamble</h2>
+
+<p>
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+<p>
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+<p>
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+<p>
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+<p>
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+<p>
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+<p>
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+<p>
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+
+<h2>GNU General Public License<br>
+Terms and Conditions for Copying, Distribution and Modification
+</h2>
+
+<p>
+0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+<p>
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+<p>
+1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+<p>
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+<p>
+2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+<p>
+a) You must cause the modified files to carry prominent notices
+stating that you changed the files and the date of any change.
+
+<p>
+b) You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+<p>
+c) If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License. (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+
+<p>
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+<p>
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+<p>
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+<p>
+3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+<p>
+a) Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+<p>
+b) Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+<p>
+c) Accompany it with the information you received as to the offer
+to distribute corresponding source code. (This alternative is
+allowed only for non-commercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+
+<p>
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+<p>
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+<p>
+4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+<p>
+5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+<p>
+6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+<p>
+7. If, as a consequence of a court judgement or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+<p>
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+<p>
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+<p>
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+<p>
+8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+<p>
+9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+<p>
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+<p>
+10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+<p>
+NO WARRANTY
+
+<p>
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+<p>
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/docs/customization.html b/docs/customization.html
new file mode 100644
index 0000000..ce586a8
--- a/dev/null
+++ b/docs/customization.html
@@ -0,0 +1,7 @@
+<html><head><title>Customization</title></head><body><h2>Customization</h2>
+Qt's clean object oriented design makes it easy to extend and
+enhance the standard widgets. You can create specialized widgets for the
+limited space offered by embedded device screens.
+Qt's GUI styling support lets you create a unique GUI look to make your
+device stand out from the rest.
+
diff --git a/docs/developing.html b/docs/developing.html
new file mode 100644
index 0000000..f6f3eed
--- a/dev/null
+++ b/docs/developing.html
@@ -0,0 +1,10 @@
+<html><head><title>Developing</title></head><body><h2> Developing</h2>
+To add functionality to the Qtopia Environment, download the
+sourcecode to both Qt/Embedded and the Qtopia Environment
+from Trolltech's website (http://www.trolltech.com). The API used
+is the same as normal Qt for X11 and Windows, so you can choose to
+develop your applications there first, but keep in mind the much
+smaller screen size that the Qtopia Environment is intended
+to be used on.
+</body>
+</html>
diff --git a/docs/features.html b/docs/features.html
new file mode 100644
index 0000000..5df6576
--- a/dev/null
+++ b/docs/features.html
@@ -0,0 +1,11 @@
+<html><head><title>Features</title></head><body><h2>Features</h2>
+<ol>
+<li>Alpha-blending of image painting
+<li>Anti-aliased scalable TrueType and Type1 fonts
+<li>Small memory-mapped pre-rendered fonts
+<li>Handwriting recognition, virtual keyboard
+<li>Easy to write new input methods
+<li>Easy to add new client-side rendering
+</ol>
+</body>
+</html>
diff --git a/docs/i18n.html b/docs/i18n.html
new file mode 100644
index 0000000..f47ca1f
--- a/dev/null
+++ b/docs/i18n.html
@@ -0,0 +1,23 @@
+<html><head><title>I18n</title></head><body><h2> <img src=language.png> I18n</h2>
+Qt/Embedded uses Unicode natively.
+(some characters below may noit be present in the current font)
+<p>
+<font face=Cyberbit size=4>
+语言 : 简体中文
+<p>
+語言 : 繁體中文
+<p>
+Γλώσσα: Ελληνικά
+<p>
+Langage: Français
+<p>
+言語 : 日本語
+<p>
+언어 : 한국어
+<p>
+Язык: Русский
+<p>
+Språk: Norsk
+</font>
+</body>
+</html>
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..f70f7e1
--- a/dev/null
+++ b/docs/index.html
@@ -0,0 +1,17 @@
+<html><head><title>Welcome to Qtopia</title></head>
+<body>
+
+<p align=center><img src=qtlogo.png height=100>
+<h3 align=center>Qtopia</h3>
+<p align=center><small>Made with <a href=qt-embedded.html>Qt/Embedded</a> from Trolltech</small></center>
+
+<p align=center>
+<table width=100% border=0 cellspacing=2><tr>
+<td align=center><a href="pointing.html">Pointing</a></td>
+<td align=center><a href="writing.html">Writing</a></td>
+</tr><tr>
+<td align=center><a href="developing.html">Developing</a></td>
+<td align=center><a href="copying.html">Copying</a></td>
+</tr></table>
+
+</body></html>
diff --git a/docs/indices.doc b/docs/indices.doc
new file mode 100644
index 0000000..8da9c31
--- a/dev/null
+++ b/docs/indices.doc
@@ -0,0 +1,152 @@
+/*!
+
+\page index.html
+
+\title Qtopia - the Qt palmtop environment
+
+Qtopia is a graphical environment for Linux on a handheld PC or small device.
+
+<ul>
+ <li><a href=start.html>Getting started with Qtopia development</a>
+ <li><a href=refman.html>Qtopia Library Reference Manual</a>
+ <li><a href=../index.html>Qt Library Reference Manual</a>
+</ul>
+
+*/
+
+/*!
+
+\page refman.html
+
+\title Qtopia Library Reference Manual
+
+<h2>Overview</h2>
+
+Qtopia applications share a common look and feel through a shared application
+framework. This documentation describes that framework to the audience
+of developers intending to write new applications and to modify existing
+applications.
+
+<ul>
+ <li> <a href=mainfunc.html>The <tt>main()</tt> function.</a>
+ <li> <a href=docwidget.html>The main document widget.</a>
+ <li> <a href=qcop.html>QCop messages.</a>
+ <li> <a href=classes.html>Library classes.</a>
+ <li> <a href=functions.html>All functions.</a>
+</ul>
+*/
+
+/*!
+
+\page mainfunc.html
+
+\title The <tt>main()</tt> function
+
+The <tt>main()</tt> function of all applications should following
+this example:
+
+\code
+int main( int argc, char **argv )
+{
+ QPEApplication a( argc, argv );
+
+ Main m;
+ a.showMainWidget(&m);
+
+ a.exec();
+}
+\endcode
+
+If the application is <a href=docwidget.html>document-oriented</a>, the
+call to <tt>QPEApplication::showMainWidget()</tt>
+should be replaced by a call to
+<tt>\l QPEApplication::showMainDocumentWidget() </tt>.
+
+The application window should be implemented in a self-contained way -
+it should not perform application-level operations such as testing parameters,
+calling exit(), or calling quit() - all that is handled by QPEApplication.
+Your application window should call close() if it needs to explicitly
+close, and it must be prepared for the possibility that show() will be
+called before the application window destructor. In other words,
+implement your application window in a way that it could be used easily
+from other applications - and that is a good rule to follow anyway, as
+it means that most of your program can be trivially reused on Qt/X11, Qt/Windows,
+Qt/Mac, and any other ports of the Qt API.
+*/
+
+/*!
+
+\page docwidget.html
+
+\title The main document widget
+
+Applications which view or edit a particular type or types of files are
+called <i>document-oriented</i> applications. Qtopia has framework
+support to simplify the implementation of such applications. The
+<a href=mainfunc.html>main()</a> function is slightly different in
+these applications.
+
+The top-level widget of a document-oriented application must have a
+Qt slot named:
+
+\code
+public slot:
+ void setDocument( const QString& applnk_filename );
+\endcode
+
+This slot should then be implemented to save the applications current
+document (if any) and show/edit the specified document. An example
+implementation is:
+
+\code
+void Main::setDocument( const QString& applnk_filename )
+{
+ FileManager fm;
+
+ if ( current ) {
+ if ( !fm.saveFile( *current, data ) ) {
+ // error
+ return;
+ }
+ delete current;
+ }
+
+ current = new DocLnk(applnk_filename);
+
+ if ( !fm.loadFile(*current, data ) ) {
+ // error
+ }
+}
+\endcode
+
+*/
+
+/*!
+
+\page classes.html
+
+\title Library Classes
+
+\annotatedclasslist
+
+*/
+
+/*!
+
+\page headers.html
+
+\title Header Files
+
+\headerfilelist
+
+*/
+
+/*!
+
+\page functions.html
+
+\title All Functions
+
+\functionindex
+
+*/
diff --git a/docs/logo32.png b/docs/logo32.png
new file mode 100644
index 0000000..92b7b73
--- a/dev/null
+++ b/docs/logo32.png
Binary files differ
diff --git a/docs/pointing.html b/docs/pointing.html
new file mode 100644
index 0000000..9830188
--- a/dev/null
+++ b/docs/pointing.html
@@ -0,0 +1,9 @@
+<html><head><title>Pointing</title></head><body><h2> Pointing</h2>
+When using a stylus or a mouse, press-and-hold rather than tapping or clicking
+on an item to activate additional functionality, such as a menu of options.
+<p>
+For example, in the Mine Sweep game, press-and-hold to mark the location of
+a bomb. In the File Browser, press-and-hold on a filename to choose an
+operation to perform on the file.
+</body>
+</html>
diff --git a/docs/portability.html b/docs/portability.html
new file mode 100644
index 0000000..a4b891f
--- a/dev/null
+++ b/docs/portability.html
@@ -0,0 +1,9 @@
+<html><head><title>Portability</title></head><body><h2>Portability</h2>
+Qt/Embedded features the same API as the excellent
+Qt/Windows and Qt/X11 versions. Imagine writing your Qt application in
+your favourite desktop environment and just recompiling to move it to
+your embedded device. It saves you heaps of development effort and
+allows you to work productively in your favorite programming
+environment from day one. You can start today.
+</body>
+</html>
diff --git a/docs/qcop.doc b/docs/qcop.doc
new file mode 100644
index 0000000..6fe4c71
--- a/dev/null
+++ b/docs/qcop.doc
@@ -0,0 +1,179 @@
+/*!
+
+\page qcop.html
+
+\title QCop Messages
+
+QCop messages allow applications to communicate with each other.
+These messages are send using QCopEnvelope, and received by connecting
+to a QCopChannel.
+
+The <tt>channelname</tt> of channels within Qtopia all start with "QPE/".
+The <tt>messagename</tt> is a function identifier followed by a list of types
+in parentheses. There are no spaces in the message name.
+
+The variable names shown in this documentation are purely for information
+purposes. A message shown as
+"messageName(Type1 varname1, Type2 varname2, Type2 varname3)" would be
+used in program code as:
+
+\code
+ QCopEnvelope e(channelname, "messageName(Type1,Type2,Type2)");
+ e << parameter1 << parameter2 << parameter3;
+\endcode
+
+
+The system-wide channels and messages.
+
+<dl>
+<dt><b>QPE/System</b>
+ <dd>
+ <ul>
+ <li>busy()
+ <br> Causes a wait indicator to be shown to the user.
+ <li>notBusy()
+ <br> Cancels the wait indicator.
+ <li>linkChanged(QString)
+ <br> Sent whenever a link is changed.
+ It is sent by FileManager::saveFile() and others, and
+ received by the Launcher.
+ <li>applyStyle()
+ <br> Sent when user changes style.
+ It is received by QPEApplication and the application
+ will redraw accordingly.
+ <li>quit()
+ <br> Terminates the Qtopia environment.
+ <li>shutdown()
+ <br> Terminates the system.
+ <li>restart()
+ <br> Restarts the Qtopia environment.
+ <li>execute(QString)
+ <br> Executes or raises the given application.
+ <li>execute(QString,QString)
+ <br> Executes or raises the given application, passing an argument.
+ Note that you should consider using the
+ <b>QPE/Application/<i>appname</i></b> channels described below.
+ <li>addAlarm(QDateTime,QCString,QCString,int)
+ <br> Internal. See AlarmServer::addAlarm()
+ <li>deleteAlarm(QDateTime,QCString,QCString,int)
+ <br> Internal. See AlarmServer::deleteAlarm()
+ <li>setDefaultRotation(int)
+ <br> Internal.
+ <li>grabKeyboard(QString)
+ <br> Internal.
+ <li>timeChange(QString)
+ <br> Internal.
+ <li>clockChange(bool)
+ <br> Internal.
+ <li>setScreenSaverInterval(int)
+ <br> Internal.
+ <li>language(QString)
+ <br> Internal.
+ </ul>
+
+<dt><b>QPE/Sync</b>
+ <ul>
+ <li>flush()
+ <br> Sent at the start of synchronization. Synchable applications
+ should save any synchable data to disk.
+ <i>Note: this message is currently asynchronous. Stay tuned
+ to discussions regarding synchronization, as this message
+ may become synchronous, requiring slight midification to
+ your code. For now, just respond in a timely fashion,
+ since the sync server merely waits a small time.</i>
+ <li>reload()
+ <br> Sent at the end of synchronization. Synchable applications
+ should reload any synchable data from disk.
+ </ul>
+
+<dt><b>QPE/TaskBar</b>
+ <ul>
+ <li>message(QString)
+ <br> Internal. See Global::statusMessage()
+ <li>showInputMethod()
+ <br> Internal.
+ <li>hideInputMethod()
+ <br> Internal.
+ <li>reloadInputMethods()
+ <br> Internal.
+ <li>reloadApplets()
+ <br> Internal.
+ </ul>
+
+<dt><b>QPE/Card</b>
+ <ul>
+ <li>stabChanged()
+ <br> Sent when <tt>/var/run/stab</tt>, <tt>/var/state/pcmcia/stab</tt>,
+ or <tt>/var/lib/pcmcia/stab</tt> may have changed.
+ <li>netUp()
+ <br> Sent when a network connection is running.
+ <li>netDown()
+ <br> Sent when a network connection is available, but not running.
+ <li>netUnavailable()
+ <br> Sent when a network connection is not available.
+ </ul>
+
+<dt><b>Qt/Tray</b>
+ This channel allows Qt applications (not just Qtopia applications)
+ to show system-tray status in a cross-platform manner,
+ but it is not currently supported. See TaskbarAppletInterface for
+ a more powerful alternative for system tray applications.
+ <ul>
+ <li>popup(int,QPoint)
+ <li>remove(int)
+ <li>setIcon(int,QPixmap)
+ <li>setToolTip(int,QString)
+ <li>doubleClicked(int,QPoint)
+ <li>clicked(int,QPoint)
+ </ul>
+</dl>
+
+Each application listens on a channel called
+<b>QPE/Application/<i>appname</i></b>, where <b><i>appname</i></b> is
+the executable name (the application identifier). Standard messages on
+this channel are:
+
+<dl>
+ <dt><b>QPE/Application/<i>appname</i></b>
+ <ul>
+ <li>setDocument(QString)
+ <br>Internal. Causes the setDocument(const QString&) slot
+ of <a href=docwidget.html>the main document widget</a>
+ to be called.
+ <li>nextView()
+ <br>Applications connected to hardware buttons will receive
+ this message if they are already visible.
+ <li>raise()
+ <br>Internal. Causes the the main document widget and the
+ current modal widget to be raised.
+ <li>quit()
+ <br>Internal. Terminates the application.
+ <li>quitIfInvisible()
+ <br>Internal. Terminates the application if it is not shown.
+ </ul>
+</dl>
+
+The QPE/Application/<i>appname</i> channel has a special property: when
+messages are sent to these channels vie QCopEnvelope, the message is
+delivered even if the application is not yet running (the application
+is run and the message is then sent).
+
+Applications also respond to messages specific to the application.
+Such messages in the base Qtopia applications are:
+
+<dl>
+ <dt><b>QPE/Application/helpbrowser</b>
+ <ul>
+ <li>showFile(QString <i>file</i>)
+ <br>Send this message to have the Help Browser show a file.
+ The <i>file</i> may be an absolute filename or relative
+ to the system HTML documentation directory ($QPEDIR/help/html).
+ </ul>
+ <dt><b>QPE/Application/datebook</b>
+ <ul>
+ <li>alarm(QDateTime,int)
+ <br>Internal. Causes the Calendar application to sound alarms.
+ </ul>
+</dl>
+
+*/
diff --git a/docs/qt-embedded.html b/docs/qt-embedded.html
new file mode 100644
index 0000000..2180be6
--- a/dev/null
+++ b/docs/qt-embedded.html
@@ -0,0 +1,22 @@
+<html><head><title>Welcome to Qtopia</title></head>
+<body>
+
+<p align=center><img src=qtlogo.png height=100>
+<h3 align=center><a href=index.html>The Qtopia Environment</a></h3>
+<p align=center><small>Made with Qt/Embedded from Trolltech</small></center>
+
+<p align=center>
+<table width=100% border=0 cellspacing=2><tr>
+<td align=center><a href="size.html">Small</a></td>
+<td align=center><a href="features.html">Feature-packed</a></td>
+</tr><tr>
+<td align=center><a href="customization.html">Customizable</a></td>
+<td align=center><a href="portability.html">Portable</a></td>
+</tr><tr>
+<td align=center><a href="support.html">Support</a></td>
+<td align=center><a href="source.html">Open Source</a></td>
+</tr><tr>
+<td align=center><a href="i18n.html">International</a></td>
+</tr></table>
+
+</body></html>
diff --git a/docs/size.html b/docs/size.html
new file mode 100644
index 0000000..813f283
--- a/dev/null
+++ b/docs/size.html
@@ -0,0 +1,14 @@
+<html><head><title>Size</title></head><body><h2> <img src=tgz.xpm> Size</h2>
+Qt/Embedded is modular and scalable. You can assemble the
+Qt features you really need and leave the others out.
+<p>
+Qt/Embedded includes the GUI server, client libraries, and window manager.
+<p>
+By picking and choosing features, the memory demands of
+Qt/Embedded can be tuned between 800Kb and 3 Mb in ROM (Intel x86).
+<p>
+Applications written with Qt have a small
+memory footprint compared to applications written with other toolkits
+due to sharing of the rich feature-set in the library.
+</body>
+</html>
diff --git a/docs/source.html b/docs/source.html
new file mode 100644
index 0000000..019a0b1
--- a/dev/null
+++ b/docs/source.html
@@ -0,0 +1,8 @@
+<html><head><title>Source Code</title></head><body><h2>Source Code</h2>
+You know the value of source code availability. All Qt
+releases are delivered with source code, and Qt/Embedded is no exception.
+You get a better understanding of how Qt works and it helps you debug
+and tune your code. Customer and community feedback allows us to continually
+improve the source code for better usability and performance.
+</body>
+</html
diff --git a/docs/start.doc b/docs/start.doc
new file mode 100644
index 0000000..9745d9a
--- a/dev/null
+++ b/docs/start.doc
@@ -0,0 +1,191 @@
+/*!
+
+\page start.html
+
+\title Getting Started
+
+<html>
+<title>Qtopia - The Qt palmtop environment</title>
+
+<body>
+<h1><i>Qtopia</i> - The Qt palmtop environment</h1>
+
+<p>
+<i>Qtopia</i> is a windowing system for handheld devices. It offers
+developers the powerful Qt API, and provides users with fast and
+intuitive interaction.
+
+<h2>Developing for <i>Qtopia</i></h2>
+
+<p>
+The Qt API includes rich GUI functionality, and is suitable for
+both large and small applications.
+
+<p>
+Since <i>Qtopia</i> offers the complete Qt API, you can do much of
+your development on any of the other platforms for which Qt is
+available - Windows, Unix/X11, or Mac OS X. However, for optimal
+tailoring of your application to the smaller screen and other
+demands of a handheld environment, you should use the <i>Qtopia
+SDK</i>.
+
+<p>
+The <i>Qtopia SDK</i> allows you to develop <i>Qtopia</i>
+applications under the Linux desktop environment using the Qt Virtual
+Framebuffer, which completely emulates the handheld <i>Qtopia</i>
+environment. It also includes cross-compiler software so that you can
+compile your application to run on the target handheld device.
+If you do not already have the Qtopia SDK (this document is normally
+part of the SDK), contact info@trolltech.com, or see the
+<a href=http://www.trolltech.com>Trolltech</a> web site.
+
+<p>To build applications for the SHARP SL5000 or similar StrongARM-based devices,
+you will also need a StrongARM cross compiler. Entrants in the programming
+contest for this device will have received both the SDK and a cross-compiler.
+
+<p>
+The SDK includes an example program. We recommend that you compile and
+run this example to learn how things work, before tackling your own
+projects.
+
+<p>
+To compile the example program for running on the Linux desktop:
+
+<ol>
+ <li>
+ <p>
+ Check the environment is correct:
+
+ <p>
+<pre>
+ export QPEDIR=/opt/Qtopia
+ export QTDIR=/opt/Qtopia
+ export PATH=$QTDIR/bin:$PATH
+ export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-generic-g++
+ export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
+</pre>
+
+ <li> Take a copy of the example:
+
+<pre>
+ cd somewhere
+ cp -r $QPEDIR/example .
+ cd example
+</pre>
+
+ <li> Generate a Makefile:
+
+<pre>
+ tmake -o Makefile example.pro
+</pre>
+
+ <li> Build the example:
+
+<pre>
+ make
+</pre>
+
+ <li> Install it:
+
+<pre>
+ su # root privileges required to install
+ cp example.desktop $QPEDIR/apps/Applications
+ cp Example.png $QPEDIR/pics
+ cp example $QPEDIR/bin
+ exit # no need to be root anymore
+</pre>
+
+ <li> To run it, first run the Qt Virtual Framebuffer:
+
+<pre>
+ qvfb &amp;
+</pre>
+
+ <li> Then run the <i>Qtopia</i> environment:
+
+<pre>
+ qpe
+</pre>
+
+<p>
+ Your application should be available in the Applications tab visible
+inside the Qt Virtual Framebuffer window.
+</p>
+
+ <li> If you want to distribute your applications to others, build an RPM package, e.g.:
+<pre>
+ mkipks -rpm -arch i386 example.control
+</pre>
+</ol>
+
+<p>
+To make your own application, use the example program as a model. Make sure that
+when you add files to your project, you also add them
+to your project file (e.g. <tt>example.pro</tt>) and rerun the
+<tt>tmake</tt> command to update the <tt>Makefile</tt>.
+
+<p>
+To build you application for the SHARP SL5000 rather than just running
+on the desktop, the process is similar:
+
+<ol>
+ <li>
+ <p>
+ Check the environment is correctly set for the SHARP SL5000:
+
+ <p>
+<pre>
+ export QPEDIR=/opt/Qtopia/sharp
+ export QTDIR=/opt/Qtopia/sharp
+ export PATH=$QTDIR/bin:/usr/local/arm/bin:$PATH
+ export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-sharp-g++
+</pre>
+
+ <li> Build and install exactly the same as you did for the desktop
+ (note that the generated Makefile is different):
+<pre>
+ make clean
+ tmake -o Makefile example.pro
+ ... <i>etc.</i>
+</pre>
+
+ <li> To install it on a device, build an ipk package file (you should be root
+ to do this, since then it will strip the executable for you):
+<pre>
+ mkipks example.control
+</pre>
+
+<p>
+ The resulting <tt>example-1.0.0.ipk</tt> can be installed on the
+SL5000 by using <i>Qtopia Desktop</i>.
+</p>
+
+</ol>
+
+<h3>Building Your Own Applications</h3>
+
+Once you have built the example, you can proceed with writing
+your own applicatons. If you are not familiar with Qt, you should
+consult the Qt documentation by pointing your web browser at
+<a href=file:/opt/Qtopia/doc/html/index.html><tt>/opt/Qtopia/doc/html/index.html</tt></a>
+when you have installed the SDK, or use the online
+<a href=http://doc.trolltech.com/>Trolltech Documentation Site</a>.
+The <a href="http://www.trolltech.com/products/qt/whitepaper.html">Qt
+Whitepaper</a> provides a good overview of, and introduction to, the
+Qt API.
+
+<p>
+When you add more files to your application, just edit the project
+file (e.g. <tt>example.pro</tt>) and rerun the <tt>tmake</tt>
+command.
+
+<p>
+The <tt>.ui</tt> files are <i>Qt Designer</i> user interface files.
+You can create and edit these using <i>Qt Designer</i>:
+<pre>
+ designer example.ui
+</pre>
+<i>Qt Designer</i>'s online documentation includes a complete
+tutorial.
+
+*/
diff --git a/docs/support.html b/docs/support.html
new file mode 100644
index 0000000..7d6a930
--- a/dev/null
+++ b/docs/support.html
@@ -0,0 +1,9 @@
+<html><head><title>Support</title></head><body><h2>Support</h2>
+Embedded devices have different requirements to desktop
+computers. The Qt/Embedded team at Trolltech is dedicated to supporting you with
+new features and widgets. We can offer training, partnerships and first class
+support. It is straightforward to port Qt/Embedded to new hardware. We can
+offer you a port to your special device or the embedded operating system of
+your choice. We look forward to working closely with you to help you succeed.
+</body>
+</html>
diff --git a/docs/time.html b/docs/time.html
new file mode 100644
index 0000000..3c6cc2f
--- a/dev/null
+++ b/docs/time.html
@@ -0,0 +1,11 @@
+<html><head><title>Time to market</title></head><body><h2>Time to market</h2>
+Qt is one of the most popular GUI toolkits in the world.
+Programmers like the compact code,the powerful API, the ease of use, and the
+excellent support. It is easy to find existing developer skills with Qt and a
+lot of quality Qt based code has already been written. Qt/Embedded allows you
+and your programmers to move seamlessly into the exciting field of embedded
+systems. Your Qt experts don't need to be retrained. Our customers tell us that
+even programmers without Qt experience get up to speed sooner with Qt than with
+other toolkits.
+</body>
+</html>
diff --git a/docs/what.html b/docs/what.html
new file mode 100644
index 0000000..bfff3a9
--- a/dev/null
+++ b/docs/what.html
@@ -0,0 +1,7 @@
+<html><head><title>What is Qt/Embedded?</title></head><body><h2>What is Qt/Embedded?</h2>
+The Qt/Embedded product provides you with all you need to
+create stunning graphical user interfaces for embedded devices.
+Qt/Embedded installs and runs with a very small memory footprint on any
+device running embedded Linux - without using X11.
+</body>
+</html>
diff --git a/docs/writing-handwriting.html b/docs/writing-handwriting.html
new file mode 100644
index 0000000..cc493d7
--- a/dev/null
+++ b/docs/writing-handwriting.html
@@ -0,0 +1,7 @@
+<html><head><title>Handwriting</title></head><body><h2>Handwriting</h2>
+By combining handwriting recognition with the dictionary, you can enter
+words with even fairly sloppy writing. The default handwriting templates
+should suit most people, or you can also edit them from the pencil icon
+on the handwriting input panel.
+</body>
+</html>
diff --git a/docs/writing-keyboard.html b/docs/writing-keyboard.html
new file mode 100644
index 0000000..dc734a7
--- a/dev/null
+++ b/docs/writing-keyboard.html
@@ -0,0 +1,6 @@
+<html><head><title>Keyboard</title></head><body><h2>Keyboard</h2>
+The legacy input device. Not at all suited to small devices.
+It is static like a lump of plastic
+(except for the little green arrow and the dictionary look-ahead).
+</body>
+</html>
diff --git a/docs/writing-opti.html b/docs/writing-opti.html
new file mode 100644
index 0000000..faf8d26
--- a/dev/null
+++ b/docs/writing-opti.html
@@ -0,0 +1,4 @@
+<html><head><title>Opti</title></head><body><h2>Opti</h2>
+This is an experimental input method.
+</body>
+</html>
diff --git a/docs/writing-pickboard.html b/docs/writing-pickboard.html
new file mode 100644
index 0000000..62db4ff
--- a/dev/null
+++ b/docs/writing-pickboard.html
@@ -0,0 +1,11 @@
+<html><head><title>Pickboard</title></head><body><h2>Pickboard</h2>
+The Pickboard is a neat invention of Trolltech's that makes use of the
+dynamic nature of a palmtop display to provide reasonably fast text input
+using a minimum of screen space.
+<p>
+Tap anywhere on the letter-group containing the letter you want to type,
+and QPE searches the dictionary (very fast) to find matching words.
+<p>
+Tap the words to "type" them.
+</body>
+</html>
diff --git a/docs/writing-unicode.html b/docs/writing-unicode.html
new file mode 100644
index 0000000..5396258
--- a/dev/null
+++ b/docs/writing-unicode.html
@@ -0,0 +1,7 @@
+<html><head><title>Unicode</title></head><body><h2>Unicode</h2>
+This method allows you to input any character from the Unicode
+range. Of course, it's only appropriate for very occasional use!
+Having this requires a somewhat large font, the GNU UniFont, which
+is supplied with Qt/Embedded.
+</body>
+</html>
diff --git a/docs/writing.html b/docs/writing.html
new file mode 100644
index 0000000..49d6fc9
--- a/dev/null
+++ b/docs/writing.html
@@ -0,0 +1,13 @@
+<html><head><title>Writing</title></head><body><h2>Writing</h2>
+To enter text without a keyboard, tap on the icon to the right of the
+<img src=go.png> menu. This brings up one of the input methods. The
+small arrow further to the right brings up a menu of different methods.
+<ul>
+<li><a href=writing-pickboard.html>Pickboard</a>
+<li><a href=writing-handwriting.html>Handwriting</a>
+<li><a href=writing-keyboard.html>Keyboard</a>
+<li><a href=writing-opti.html>Opti</a>
+<li><a href=writing-unicode.html>Unicode</a>
+</ul>
+</body>
+</html>
diff --git a/etc/colors/Blues.scheme b/etc/colors/Blues.scheme
new file mode 100644
index 0000000..5c83297
--- a/dev/null
+++ b/etc/colors/Blues.scheme
@@ -0,0 +1,4 @@
+[Colors]
+Background = #C2DFFF
+Button = #C9DFFF
+Highlight = #2861FF
diff --git a/etc/colors/Bright.scheme b/etc/colors/Bright.scheme
new file mode 100644
index 0000000..9aff5f6
--- a/dev/null
+++ b/etc/colors/Bright.scheme
@@ -0,0 +1,5 @@
+[Colors]
+Background = #F7F7F7
+Button = #F0F0F0
+Highlight = #0000FF
+HighlightedText = #FFFFFF
diff --git a/etc/colors/Desert.scheme b/etc/colors/Desert.scheme
new file mode 100644
index 0000000..5729700
--- a/dev/null
+++ b/etc/colors/Desert.scheme
@@ -0,0 +1,4 @@
+[Colors]
+Background = #E5E1D5
+Button = #D6CDBB
+Highlight = #800000
diff --git a/etc/colors/Gray.scheme b/etc/colors/Gray.scheme
new file mode 100644
index 0000000..99a8230
--- a/dev/null
+++ b/etc/colors/Gray.scheme
@@ -0,0 +1,4 @@
+[Colors]
+Background = #E0E0E0
+Button = #D0D0D0
+Highlight = #52719C
diff --git a/etc/colors/Green.scheme b/etc/colors/Green.scheme
new file mode 100644
index 0000000..0390b28
--- a/dev/null
+++ b/etc/colors/Green.scheme
@@ -0,0 +1,4 @@
+[Colors]
+Background = #DCFBC1
+Button = #C0DBA8
+Highlight = #085500
diff --git a/etc/colors/Purple.scheme b/etc/colors/Purple.scheme
new file mode 100644
index 0000000..f04a77b
--- a/dev/null
+++ b/etc/colors/Purple.scheme
@@ -0,0 +1,5 @@
+[Colors]
+Background = #F0D3FF
+Button = #E4B8FF
+Highlight = #B406FF
+HighlightedText = #FFFFFF
diff --git a/etc/colors/Yellow.scheme b/etc/colors/Yellow.scheme
new file mode 100644
index 0000000..47b3c6c
--- a/dev/null
+++ b/etc/colors/Yellow.scheme
@@ -0,0 +1,5 @@
+[Colors]
+Background = #EFEFAA
+Button = #D1D194
+Highlight = #FFFF00
+HighlightedText = #000000
diff --git a/etc/dict/README b/etc/dict/README
new file mode 100644
index 0000000..c0f0814
--- a/dev/null
+++ b/etc/dict/README
@@ -0,0 +1,9 @@
+The wordlists here are:
+
+words = /usr/dict/words on a Linux machine
+words.de = igerman98-20000206 (German ispell), excluding zusammen.txt
+words.no = ispell-norsk-1.1a (Norwegian ispell)
+
+The "dawg" form of each is automatically generated from the "words" form.
+Note that this takes a LOT of memory. Don't try it on an iPAQ, etc.
+
diff --git a/etc/dict/dawg b/etc/dict/dawg
new file mode 100644
index 0000000..9f4bc26
--- a/dev/null
+++ b/etc/dict/dawg
Binary files differ
diff --git a/etc/dict/dawg.de b/etc/dict/dawg.de
new file mode 100644
index 0000000..086d82e
--- a/dev/null
+++ b/etc/dict/dawg.de
Binary files differ
diff --git a/etc/dict/dawg.no b/etc/dict/dawg.no
new file mode 100644
index 0000000..b6bc7cc
--- a/dev/null
+++ b/etc/dict/dawg.no
Binary files differ
diff --git a/etc/dict/local.dawg b/etc/dict/local.dawg
new file mode 100644
index 0000000..d540a34
--- a/dev/null
+++ b/etc/dict/local.dawg
Binary files differ
diff --git a/etc/dict/words b/etc/dict/words
new file mode 100644
index 0000000..1568032
--- a/dev/null
+++ b/etc/dict/words
@@ -0,0 +1,45407 @@
+Aarhus
+Aaron
+Ababa
+aback
+abaft
+abandon
+abandoned
+abandoning
+abandonment
+abandons
+abase
+abased
+abasement
+abasements
+abases
+abash
+abashed
+abashes
+abashing
+abasing
+abate
+abated
+abatement
+abatements
+abater
+abates
+abating
+Abba
+abbe
+abbey
+abbeys
+abbot
+abbots
+Abbott
+abbreviate
+abbreviated
+abbreviates
+abbreviating
+abbreviation
+abbreviations
+Abby
+abdomen
+abdomens
+abdominal
+abduct
+abducted
+abduction
+abductions
+abductor
+abductors
+abducts
+Abe
+abed
+Abel
+Abelian
+Abelson
+Aberdeen
+Abernathy
+aberrant
+aberration
+aberrations
+abet
+abets
+abetted
+abetter
+abetting
+abeyance
+abhor
+abhorred
+abhorrent
+abhorrer
+abhorring
+abhors
+abide
+abided
+abides
+abiding
+Abidjan
+Abigail
+Abilene
+abilities
+ability
+abject
+abjection
+abjections
+abjectly
+abjectness
+abjure
+abjured
+abjures
+abjuring
+ablate
+ablated
+ablates
+ablating
+ablation
+ablative
+ablaze
+able
+abler
+ablest
+ably
+Abner
+abnormal
+abnormalities
+abnormality
+abnormally
+Abo
+aboard
+abode
+abodes
+abolish
+abolished
+abolisher
+abolishers
+abolishes
+abolishing
+abolishment
+abolishments
+abolition
+abolitionist
+abolitionists
+abominable
+abominate
+aboriginal
+aborigine
+aborigines
+abort
+aborted
+aborting
+abortion
+abortions
+abortive
+abortively
+aborts
+Abos
+abound
+abounded
+abounding
+abounds
+about
+above
+aboveboard
+aboveground
+abovementioned
+abrade
+abraded
+abrades
+abrading
+Abraham
+Abram
+Abrams
+Abramson
+abrasion
+abrasions
+abrasive
+abreaction
+abreactions
+abreast
+abridge
+abridged
+abridges
+abridging
+abridgment
+abroad
+abrogate
+abrogated
+abrogates
+abrogating
+abrupt
+abruptly
+abruptness
+abscess
+abscessed
+abscesses
+abscissa
+abscissas
+abscond
+absconded
+absconding
+absconds
+absence
+absences
+absent
+absented
+absentee
+absenteeism
+absentees
+absentia
+absenting
+absently
+absentminded
+absents
+absinthe
+absolute
+absolutely
+absoluteness
+absolutes
+absolution
+absolve
+absolved
+absolves
+absolving
+absorb
+absorbed
+absorbency
+absorbent
+absorber
+absorbing
+absorbs
+absorption
+absorptions
+absorptive
+abstain
+abstained
+abstainer
+abstaining
+abstains
+abstention
+abstentions
+abstinence
+abstract
+abstracted
+abstracting
+abstraction
+abstractionism
+abstractionist
+abstractions
+abstractly
+abstractness
+abstractor
+abstractors
+abstracts
+abstruse
+abstruseness
+absurd
+absurdities
+absurdity
+absurdly
+Abu
+abundance
+abundant
+abundantly
+abuse
+abused
+abuses
+abusing
+abusive
+abut
+abutment
+abuts
+abutted
+abutter
+abutters
+abutting
+abysmal
+abysmally
+abyss
+abysses
+Abyssinia
+Abyssinian
+Abyssinians
+acacia
+academia
+academic
+academically
+academics
+academies
+academy
+Acadia
+Acapulco
+accede
+acceded
+accedes
+accelerate
+accelerated
+accelerates
+accelerating
+acceleration
+accelerations
+accelerator
+accelerators
+accelerometer
+accelerometers
+accent
+accented
+accenting
+accents
+accentual
+accentuate
+accentuated
+accentuates
+accentuating
+accentuation
+accept
+acceptability
+acceptable
+acceptably
+acceptance
+acceptances
+accepted
+accepter
+accepters
+accepting
+acceptor
+acceptors
+accepts
+access
+accessed
+accesses
+accessibility
+accessible
+accessibly
+accessing
+accession
+accessions
+accessories
+accessors
+accessory
+accident
+accidental
+accidentally
+accidently
+accidents
+acclaim
+acclaimed
+acclaiming
+acclaims
+acclamation
+acclimate
+acclimated
+acclimates
+acclimating
+acclimatization
+acclimatized
+accolade
+accolades
+accommodate
+accommodated
+accommodates
+accommodating
+accommodation
+accommodations
+accompanied
+accompanies
+accompaniment
+accompaniments
+accompanist
+accompanists
+accompany
+accompanying
+accomplice
+accomplices
+accomplish
+accomplished
+accomplisher
+accomplishers
+accomplishes
+accomplishing
+accomplishment
+accomplishments
+accord
+accordance
+accorded
+accorder
+accorders
+according
+accordingly
+accordion
+accordions
+accords
+accost
+accosted
+accosting
+accosts
+account
+accountability
+accountable
+accountably
+accountancy
+accountant
+accountants
+accounted
+accounting
+accounts
+Accra
+accredit
+accreditation
+accreditations
+accredited
+accretion
+accretions
+accrue
+accrued
+accrues
+accruing
+acculturate
+acculturated
+acculturates
+acculturating
+acculturation
+accumulate
+accumulated
+accumulates
+accumulating
+accumulation
+accumulations
+accumulator
+accumulators
+accuracies
+accuracy
+accurate
+accurately
+accurateness
+accursed
+accusal
+accusation
+accusations
+accusative
+accuse
+accused
+accuser
+accuses
+accusing
+accusingly
+accustom
+accustomed
+accustoming
+accustoms
+ace
+aces
+acetate
+acetone
+acetylene
+Achaean
+Achaeans
+ache
+ached
+aches
+achievable
+achieve
+achieved
+achievement
+achievements
+achiever
+achievers
+achieves
+achieving
+Achilles
+aching
+acid
+acidic
+acidities
+acidity
+acidly
+acids
+acidulous
+Ackerman
+Ackley
+acknowledge
+acknowledgeable
+acknowledged
+acknowledgement
+acknowledgements
+acknowledger
+acknowledgers
+acknowledges
+acknowledging
+acknowledgment
+acknowledgments
+acme
+acne
+acolyte
+acolytes
+acorn
+acorns
+acoustic
+acoustical
+acoustically
+acoustician
+acoustics
+acquaint
+acquaintance
+acquaintances
+acquainted
+acquainting
+acquaints
+acquiesce
+acquiesced
+acquiescence
+acquiescent
+acquiesces
+acquiescing
+acquirable
+acquire
+acquired
+acquires
+acquiring
+acquisition
+acquisitions
+acquisitive
+acquisitiveness
+acquit
+acquits
+acquittal
+acquitted
+acquitter
+acquitting
+acre
+acreage
+acres
+acrid
+acrimonious
+acrimony
+acrobat
+acrobatic
+acrobatics
+acrobats
+acronym
+acronyms
+acropolis
+across
+acrylic
+act
+Acta
+Actaeon
+acted
+acting
+actinium
+actinometer
+actinometers
+action
+actions
+activate
+activated
+activates
+activating
+activation
+activations
+activator
+activators
+active
+actively
+activism
+activist
+activists
+activities
+activity
+Acton
+actor
+actors
+actress
+actresses
+Acts
+actual
+actualities
+actuality
+actualization
+actually
+actuals
+actuarial
+actuarially
+actuate
+actuated
+actuates
+actuating
+actuator
+actuators
+acuity
+acumen
+acute
+acutely
+acuteness
+acyclic
+acyclically
+ad
+Ada
+adage
+adages
+adagio
+adagios
+Adair
+Adam
+adamant
+adamantly
+Adams
+Adamson
+adapt
+adaptability
+adaptable
+adaptation
+adaptations
+adapted
+adapter
+adapters
+adapting
+adaptive
+adaptively
+adaptor
+adaptors
+adapts
+add
+added
+addend
+addenda
+addendum
+adder
+adders
+addict
+addicted
+addicting
+addiction
+addictions
+addicts
+adding
+Addis
+Addison
+addition
+additional
+additionally
+additions
+additive
+additives
+additivity
+address
+addressability
+addressable
+addressed
+addressee
+addressees
+addresser
+addressers
+addresses
+addressing
+Addressograph
+adds
+adduce
+adduced
+adduces
+adducible
+adducing
+adduct
+adducted
+adducting
+adduction
+adductor
+adducts
+Adelaide
+Adele
+Adelia
+Aden
+adept
+adequacies
+adequacy
+adequate
+adequately
+adhere
+adhered
+adherence
+adherent
+adherents
+adherer
+adherers
+adheres
+adhering
+adhesion
+adhesions
+adhesive
+adhesives
+adiabatic
+adiabatically
+adieu
+Adirondack
+Adirondacks
+adjacency
+adjacent
+adjective
+adjectives
+adjoin
+adjoined
+adjoining
+adjoins
+adjourn
+adjourned
+adjourning
+adjournment
+adjourns
+adjudge
+adjudged
+adjudges
+adjudging
+adjudicate
+adjudicated
+adjudicates
+adjudicating
+adjudication
+adjudications
+adjunct
+adjuncts
+adjure
+adjured
+adjures
+adjuring
+adjust
+adjustable
+adjustably
+adjusted
+adjuster
+adjusters
+adjusting
+adjustment
+adjustments
+adjustor
+adjustors
+adjusts
+adjutant
+adjutants
+Adkins
+Adler
+Adlerian
+administer
+administered
+administering
+administerings
+administers
+administrable
+administrate
+administration
+administrations
+administrative
+administratively
+administrator
+administrators
+admirable
+admirably
+admiral
+admirals
+admiralty
+admiration
+admirations
+admire
+admired
+admirer
+admirers
+admires
+admiring
+admiringly
+admissibility
+admissible
+admission
+admissions
+admit
+admits
+admittance
+admitted
+admittedly
+admitter
+admitters
+admitting
+admix
+admixed
+admixes
+admixture
+admonish
+admonished
+admonishes
+admonishing
+admonishment
+admonishments
+admonition
+admonitions
+ado
+adobe
+adolescence
+adolescent
+adolescents
+Adolph
+Adolphus
+Adonis
+adopt
+adopted
+adopter
+adopters
+adopting
+adoption
+adoptions
+adoptive
+adopts
+adorable
+adoration
+adore
+adored
+adores
+adorn
+adorned
+adornment
+adornments
+adorns
+adrenal
+adrenaline
+Adrian
+Adriatic
+Adrienne
+adrift
+adroit
+adroitness
+ads
+adsorb
+adsorbed
+adsorbing
+adsorbs
+adsorption
+adulate
+adulating
+adulation
+adult
+adulterate
+adulterated
+adulterates
+adulterating
+adulterer
+adulterers
+adulterous
+adulterously
+adultery
+adulthood
+adults
+adumbrate
+adumbrated
+adumbrates
+adumbrating
+adumbration
+advance
+advanced
+advancement
+advancements
+advances
+advancing
+advantage
+advantaged
+advantageous
+advantageously
+advantages
+advent
+adventist
+adventists
+adventitious
+adventure
+adventured
+adventurer
+adventurers
+adventures
+adventuring
+adventurous
+adverb
+adverbial
+adverbs
+adversaries
+adversary
+adverse
+adversely
+adversities
+adversity
+advert
+advertise
+advertised
+advertisement
+advertisements
+advertiser
+advertisers
+advertises
+advertising
+advice
+advisability
+advisable
+advisably
+advise
+advised
+advisedly
+advisee
+advisees
+advisement
+advisements
+adviser
+advisers
+advises
+advising
+advisor
+advisors
+advisory
+advocacy
+advocate
+advocated
+advocates
+advocating
+Aegean
+aegis
+Aeneas
+Aeneid
+Aeolus
+aerate
+aerated
+aerates
+aerating
+aeration
+aerator
+aerators
+aerial
+aerials
+aeroacoustic
+Aerobacter
+aerobic
+aerobics
+aerodynamic
+aerodynamics
+aeronautic
+aeronautical
+aeronautics
+aerosol
+aerosolize
+aerosols
+aerospace
+Aeschylus
+Aesop
+aesthetic
+aesthetically
+aesthetics
+afar
+affable
+affair
+affairs
+affect
+affectation
+affectations
+affected
+affecting
+affectingly
+affection
+affectionate
+affectionately
+affections
+affective
+affects
+afferent
+affianced
+affidavit
+affidavits
+affiliate
+affiliated
+affiliates
+affiliating
+affiliation
+affiliations
+affinities
+affinity
+affirm
+affirmation
+affirmations
+affirmative
+affirmatively
+affirmed
+affirming
+affirms
+affix
+affixed
+affixes
+affixing
+afflict
+afflicted
+afflicting
+affliction
+afflictions
+afflictive
+afflicts
+affluence
+affluent
+afford
+affordable
+afforded
+affording
+affords
+affricate
+affricates
+affright
+affront
+affronted
+affronting
+affronts
+Afghan
+Afghanistan
+Afghans
+aficionado
+afield
+afire
+aflame
+afloat
+afoot
+afore
+aforementioned
+aforesaid
+aforethought
+afoul
+afraid
+afresh
+Africa
+African
+Africanization
+Africanizations
+Africanize
+Africanized
+Africanizes
+Africanizing
+Africans
+Afrikaans
+Afrikaner
+Afrikaners
+aft
+after
+aftereffect
+afterglow
+afterimage
+afterlife
+aftermath
+aftermost
+afternoon
+afternoons
+aftershock
+aftershocks
+afterthought
+afterthoughts
+afterward
+afterwards
+again
+against
+Agamemnon
+agape
+agar
+agate
+agates
+Agatha
+age
+aged
+Agee
+ageless
+agencies
+agency
+agenda
+agendas
+agent
+agents
+ager
+agers
+ages
+Aggie
+Aggies
+agglomerate
+agglomerated
+agglomerates
+agglomeration
+agglutinate
+agglutinated
+agglutinates
+agglutinating
+agglutination
+agglutinin
+agglutinins
+aggrandize
+aggravate
+aggravated
+aggravates
+aggravation
+aggregate
+aggregated
+aggregately
+aggregates
+aggregating
+aggregation
+aggregations
+aggression
+aggressions
+aggressive
+aggressively
+aggressiveness
+aggressor
+aggressors
+aggrieve
+aggrieved
+aggrieves
+aggrieving
+aghast
+agile
+agilely
+agility
+aging
+agitate
+agitated
+agitates
+agitating
+agitation
+agitations
+agitator
+agitators
+agleam
+aglow
+Agnes
+Agnew
+agnostic
+agnostics
+ago
+agog
+agonies
+agonize
+agonized
+agonizes
+agonizing
+agonizingly
+agony
+agrarian
+agree
+agreeable
+agreeably
+agreed
+agreeing
+agreement
+agreements
+agreer
+agreers
+agrees
+Agricola
+agricultural
+agriculturally
+agriculture
+ague
+Agway
+ah
+ahead
+Ahmadabad
+Ahmedabad
+aid
+Aida
+aide
+aided
+Aides
+aiding
+aids
+Aiken
+ail
+Aileen
+aileron
+ailerons
+ailing
+ailment
+ailments
+aim
+aimed
+aimer
+aimers
+aiming
+aimless
+aimlessly
+aims
+Ainu
+Ainus
+air
+airbag
+airbags
+airborne
+Airbus
+aircraft
+airdrop
+airdrops
+aired
+Airedale
+airer
+airers
+Aires
+airfare
+airfield
+airfields
+airflow
+airfoil
+airfoils
+airframe
+airframes
+airily
+airing
+airings
+airless
+airlift
+airlifts
+airline
+airliner
+airlines
+airlock
+airlocks
+airmail
+airmails
+airman
+airmen
+airplane
+airplanes
+airport
+airports
+airs
+airship
+airships
+airspace
+airspeed
+airstrip
+airstrips
+airtight
+airway
+airways
+airy
+aisle
+Aitken
+ajar
+Ajax
+Akers
+akimbo
+akin
+Akron
+Al
+Alabama
+Alabamans
+Alabamian
+alabaster
+alacrity
+Aladdin
+Alameda
+Alamo
+Alamos
+Alan
+Alar
+alarm
+alarmed
+alarming
+alarmingly
+alarmist
+alarms
+alas
+Alaska
+Alaskan
+Alastair
+alba
+albacore
+Albania
+Albanian
+Albanians
+Albany
+albatross
+albeit
+Alberich
+Albert
+Alberta
+Alberto
+Albrecht
+Albright
+album
+albumin
+albums
+Albuquerque
+Alcestis
+alchemy
+Alcibiades
+Alcmena
+Alcoa
+alcohol
+alcoholic
+alcoholics
+alcoholism
+alcohols
+Alcott
+alcove
+alcoves
+Aldebaran
+Alden
+alder
+alderman
+aldermen
+Aldrich
+ale
+Alec
+Aleck
+alee
+alert
+alerted
+alertedly
+alerter
+alerters
+alerting
+alertly
+alertness
+alerts
+Aleut
+Aleutian
+Alex
+Alexander
+Alexandra
+Alexandre
+Alexandria
+Alexandrine
+Alexei
+Alexis
+Alfa
+alfalfa
+Alfonso
+Alfred
+Alfredo
+alfresco
+alga
+algae
+algaecide
+algebra
+algebraic
+algebraically
+algebras
+Algenib
+Alger
+Algeria
+Algerian
+Algiers
+alginate
+ALGOL
+Algol
+Algonquian
+Algonquin
+algorithm
+algorithmic
+algorithmically
+algorithms
+Alhambra
+Ali
+alias
+aliased
+aliases
+aliasing
+alibi
+alibis
+Alice
+Alicia
+alien
+alienate
+alienated
+alienates
+alienating
+alienation
+aliens
+alight
+align
+aligned
+aligning
+alignment
+alignments
+aligns
+alike
+aliment
+aliments
+alimony
+Alison
+Alistair
+alive
+alkali
+alkaline
+alkalis
+alkaloid
+alkaloids
+alkyl
+all
+Allah
+Allan
+allay
+allayed
+allaying
+allays
+allegation
+allegations
+allege
+alleged
+allegedly
+alleges
+Alleghenies
+Allegheny
+allegiance
+allegiances
+alleging
+allegoric
+allegorical
+allegorically
+allegories
+allegory
+Allegra
+allegretto
+allegrettos
+allele
+alleles
+allemande
+Allen
+Allendale
+Allentown
+allergic
+allergies
+allergy
+alleviate
+alleviated
+alleviates
+alleviating
+alleviation
+alley
+alleys
+alleyway
+alleyways
+alliance
+alliances
+allied
+allies
+alligator
+alligators
+Allis
+Allison
+alliteration
+alliterations
+alliterative
+allocatable
+allocate
+allocated
+allocates
+allocating
+allocation
+allocations
+allocator
+allocators
+allophone
+allophones
+allophonic
+allot
+allotment
+allotments
+allots
+allotted
+allotter
+allotting
+allow
+allowable
+allowably
+allowance
+allowances
+allowed
+allowing
+allows
+alloy
+alloys
+Allstate
+allude
+alluded
+alludes
+alluding
+allure
+allurement
+alluring
+allusion
+allusions
+allusive
+allusiveness
+ally
+allying
+Allyn
+alma
+Almaden
+almanac
+almanacs
+almighty
+almond
+almonds
+almoner
+almost
+alms
+almsman
+alnico
+aloe
+aloes
+aloft
+aloha
+alone
+aloneness
+along
+alongside
+aloof
+aloofness
+aloud
+Alpert
+alpha
+alphabet
+alphabetic
+alphabetical
+alphabetically
+alphabetics
+alphabetize
+alphabetized
+alphabetizes
+alphabetizing
+alphabets
+alphanumeric
+Alpheratz
+Alphonse
+alpine
+Alps
+already
+Alsatian
+Alsatians
+also
+Alsop
+Altair
+altar
+altars
+alter
+alterable
+alteration
+alterations
+altercation
+altercations
+altered
+alterer
+alterers
+altering
+alternate
+alternated
+alternately
+alternates
+alternating
+alternation
+alternations
+alternative
+alternatively
+alternatives
+alternator
+alternators
+alters
+Althaea
+although
+altitude
+altitudes
+altogether
+Alton
+Altos
+altruism
+altruist
+altruistic
+altruistically
+alum
+aluminum
+alumna
+alumnae
+alumni
+alumnus
+alundum
+Alva
+Alvarez
+alveolar
+alveoli
+alveolus
+Alvin
+always
+Alyssa
+am
+Amadeus
+amain
+amalgam
+amalgamate
+amalgamated
+amalgamates
+amalgamating
+amalgamation
+amalgams
+Amanda
+amanuensis
+amaretto
+Amarillo
+amass
+amassed
+amasses
+amassing
+amateur
+amateurish
+amateurishness
+amateurism
+amateurs
+amatory
+amaze
+amazed
+amazedly
+amazement
+amazer
+amazers
+amazes
+amazing
+amazingly
+Amazon
+Amazons
+ambassador
+ambassadors
+amber
+ambiance
+ambidextrous
+ambidextrously
+ambient
+ambiguities
+ambiguity
+ambiguous
+ambiguously
+ambition
+ambitions
+ambitious
+ambitiously
+ambivalence
+ambivalent
+ambivalently
+amble
+ambled
+ambler
+ambles
+ambling
+ambrosial
+ambulance
+ambulances
+ambulatory
+ambuscade
+ambush
+ambushed
+ambushes
+Amdahl
+Amelia
+ameliorate
+ameliorated
+ameliorating
+amelioration
+amen
+amenable
+amend
+amended
+amending
+amendment
+amendments
+amends
+amenities
+amenity
+amenorrhea
+Amerada
+America
+American
+Americana
+Americanism
+Americanization
+Americanizations
+Americanize
+Americanizer
+Americanizers
+Americanizes
+Americans
+Americas
+americium
+Ames
+Amharic
+Amherst
+amiable
+amicable
+amicably
+amid
+amide
+amidst
+Amiga
+amigo
+amino
+amiss
+amity
+Amman
+Ammerman
+ammo
+ammonia
+ammoniac
+ammonium
+ammunition
+amnesty
+Amoco
+amoeba
+amoebae
+amoebas
+amok
+among
+amongst
+Amontillado
+amoral
+amorality
+amorist
+amorous
+amorphous
+amorphously
+amortize
+amortized
+amortizes
+amortizing
+Amos
+amount
+amounted
+amounter
+amounters
+amounting
+amounts
+amour
+amperage
+ampere
+amperes
+ampersand
+ampersands
+Ampex
+amphetamine
+amphetamines
+amphibian
+amphibians
+amphibious
+amphibiously
+amphibology
+amphitheater
+amphitheaters
+ample
+amplification
+amplified
+amplifier
+amplifiers
+amplifies
+amplify
+amplifying
+amplitude
+amplitudes
+amply
+ampoule
+ampoules
+amputate
+amputated
+amputates
+amputating
+Amsterdam
+Amtrak
+amulet
+amulets
+amuse
+amused
+amusedly
+amusement
+amusements
+amuser
+amusers
+amuses
+amusing
+amusingly
+Amy
+amyl
+an
+Anabaptist
+Anabaptists
+Anabel
+anachronism
+anachronisms
+anachronistically
+anaconda
+anacondas
+Anacreon
+anaerobic
+anagram
+anagrams
+Anaheim
+anal
+Analects
+analog
+analogical
+analogies
+analogous
+analogously
+analogue
+analogues
+analogy
+analyses
+analysis
+analyst
+analysts
+analytic
+analytical
+analytically
+analyticities
+analyticity
+analyzable
+analyze
+analyzed
+analyzer
+analyzers
+analyzes
+analyzing
+anaphora
+anaphoric
+anaphorically
+anaplasmosis
+anarchic
+anarchical
+anarchism
+anarchist
+anarchists
+anarchy
+Anastasia
+anastomoses
+anastomosis
+anastomotic
+anathema
+Anatole
+Anatolia
+Anatolian
+anatomic
+anatomical
+anatomically
+anatomy
+ancestor
+ancestors
+ancestral
+ancestry
+anchor
+anchorage
+anchorages
+anchored
+anchoring
+anchorite
+anchoritism
+anchors
+anchovies
+anchovy
+ancient
+anciently
+ancients
+ancillary
+and
+Andalusia
+Andalusian
+Andalusians
+Andean
+anders
+Andersen
+Anderson
+Andes
+anding
+Andorra
+Andover
+Andre
+Andrea
+Andrei
+Andrew
+Andrews
+Andromache
+Andromeda
+Andy
+anecdotal
+anecdote
+anecdotes
+anechoic
+anemia
+anemic
+anemometer
+anemometers
+anemometry
+anemone
+anesthesia
+anesthetic
+anesthetically
+anesthetics
+anesthetize
+anesthetized
+anesthetizes
+anesthetizing
+anew
+angel
+Angela
+Angeleno
+Angelenos
+Angeles
+angelic
+Angelica
+Angelina
+Angeline
+Angelo
+angels
+anger
+angered
+angering
+angers
+Angie
+angiography
+angle
+angled
+angler
+anglers
+Angles
+Anglia
+Anglican
+Anglicanism
+Anglicanize
+Anglicanizes
+Anglicans
+angling
+Anglo
+Anglophilia
+Anglophobia
+Angola
+Angora
+angrier
+angriest
+angrily
+angry
+angst
+angstrom
+anguish
+anguished
+angular
+angularly
+Angus
+Anheuser
+anhydrous
+anhydrously
+aniline
+animal
+animals
+animate
+animated
+animatedly
+animately
+animateness
+animates
+animating
+animation
+animations
+animator
+animators
+animism
+animized
+animosity
+anion
+anionic
+anions
+anise
+aniseikonic
+anisotropic
+anisotropy
+Anita
+Ankara
+ankle
+ankles
+Ann
+Anna
+annal
+Annalist
+Annalistic
+annals
+Annapolis
+Anne
+Annette
+annex
+annexation
+annexed
+annexes
+annexing
+Annie
+annihilate
+annihilated
+annihilates
+annihilating
+annihilation
+anniversaries
+anniversary
+annotate
+annotated
+annotates
+annotating
+annotation
+annotations
+announce
+announced
+announcement
+announcements
+announcer
+announcers
+announces
+announcing
+annoy
+annoyance
+annoyances
+annoyed
+annoyer
+annoyers
+annoying
+annoyingly
+annoys
+annual
+annually
+annuals
+annuity
+annul
+annular
+annuli
+annulled
+annulling
+annulment
+annulments
+annuls
+annulus
+annum
+annunciate
+annunciated
+annunciates
+annunciating
+annunciator
+annunciators
+anode
+anodes
+anodize
+anodized
+anodizes
+anoint
+anointed
+anointing
+anoints
+anomalies
+anomalous
+anomalously
+anomaly
+anomic
+anomie
+anon
+anonymity
+anonymous
+anonymously
+anorexia
+another
+Anselm
+Anselmo
+ANSI
+answer
+answerable
+answered
+answerer
+answerers
+answering
+answers
+ant
+Antaeus
+antagonism
+antagonisms
+antagonist
+antagonistic
+antagonistically
+antagonists
+antagonize
+antagonized
+antagonizes
+antagonizing
+antarctic
+Antarctica
+Antares
+ante
+anteater
+anteaters
+antecedent
+antecedents
+antedate
+antelope
+antelopes
+antenna
+antennae
+antennas
+anterior
+anthem
+anthems
+anther
+anthologies
+anthology
+Anthony
+anthracite
+anthropological
+anthropologically
+anthropologist
+anthropologists
+anthropology
+anthropomorphic
+anthropomorphically
+anti
+antibacterial
+antibiotic
+antibiotics
+antibodies
+antibody
+antic
+anticipate
+anticipated
+anticipates
+anticipating
+anticipation
+anticipations
+anticipatory
+anticoagulation
+anticompetitive
+antics
+antidisestablishmentarianism
+antidote
+antidotes
+Antietam
+antiformant
+antifundamentalist
+antigen
+antigens
+Antigone
+antihistorical
+Antilles
+antimicrobial
+antimony
+antinomian
+antinomy
+Antioch
+antipathy
+antiphonal
+antipode
+antipodes
+antiquarian
+antiquarians
+antiquate
+antiquated
+antique
+antiques
+antiquities
+antiquity
+antiredeposition
+antiresonance
+antiresonator
+antisemitic
+antisemitism
+antiseptic
+antisera
+antiserum
+antislavery
+antisocial
+antisubmarine
+antisymmetric
+antisymmetry
+antithesis
+antithetical
+antithyroid
+antitoxin
+antitoxins
+antitrust
+antler
+antlered
+Antoine
+Antoinette
+Anton
+Antonio
+Antonovics
+Antony
+ants
+Antwerp
+anus
+anvil
+anvils
+anxieties
+anxiety
+anxious
+anxiously
+any
+anybody
+anyhow
+anymore
+anyone
+anyplace
+anything
+anytime
+anyway
+anywhere
+aorta
+apace
+Apaches
+Apalachicola
+apart
+apartment
+apartments
+apathetic
+apathy
+ape
+aped
+aperiodic
+aperiodicity
+aperture
+apes
+Apetalous
+apex
+aphasia
+aphasic
+aphelion
+aphid
+aphids
+aphonic
+aphorism
+aphorisms
+Aphrodite
+apiaries
+apiary
+apical
+apiece
+aping
+apish
+aplenty
+aplomb
+apocalypse
+apocalyptic
+Apocrypha
+apocryphal
+apogee
+apogees
+Apollinaire
+Apollo
+Apollonian
+apologetic
+apologetically
+apologia
+apologies
+apologist
+apologists
+apologize
+apologized
+apologizes
+apologizing
+apology
+apostate
+apostle
+apostles
+apostolic
+apostrophe
+apostrophes
+apothecary
+apothegm
+apotheoses
+apotheosis
+Appalachia
+Appalachian
+Appalachians
+appall
+appalled
+appalling
+appallingly
+Appaloosas
+appanage
+apparatus
+apparel
+appareled
+apparent
+apparently
+apparition
+apparitions
+appeal
+appealed
+appealer
+appealers
+appealing
+appealingly
+appeals
+appear
+appearance
+appearances
+appeared
+appearer
+appearers
+appearing
+appears
+appease
+appeased
+appeasement
+appeases
+appeasing
+appellant
+appellants
+appellate
+appellation
+append
+appendage
+appendages
+appended
+appender
+appenders
+appendices
+appendicitis
+appending
+appendix
+appendixes
+appends
+appertain
+appertains
+appetite
+appetites
+appetizer
+appetizing
+Appia
+Appian
+applaud
+applauded
+applauding
+applauds
+applause
+apple
+Appleby
+applejack
+apples
+Appleton
+appliance
+appliances
+applicability
+applicable
+applicant
+applicants
+application
+applications
+applicative
+applicatively
+applicator
+applicators
+applied
+applier
+appliers
+applies
+applique
+apply
+applying
+appoint
+appointed
+appointee
+appointees
+appointer
+appointers
+appointing
+appointive
+appointment
+appointments
+appoints
+Appomattox
+apportion
+apportioned
+apportioning
+apportionment
+apportionments
+apportions
+apposite
+appraisal
+appraisals
+appraise
+appraised
+appraiser
+appraisers
+appraises
+appraising
+appraisingly
+appreciable
+appreciably
+appreciate
+appreciated
+appreciates
+appreciating
+appreciation
+appreciations
+appreciative
+appreciatively
+apprehend
+apprehended
+apprehensible
+apprehension
+apprehensions
+apprehensive
+apprehensively
+apprehensiveness
+apprentice
+apprenticed
+apprentices
+apprenticeship
+apprise
+apprised
+apprises
+apprising
+approach
+approachability
+approachable
+approached
+approacher
+approachers
+approaches
+approaching
+approbate
+approbation
+appropriate
+appropriated
+appropriately
+appropriateness
+appropriates
+appropriating
+appropriation
+appropriations
+appropriator
+appropriators
+approval
+approvals
+approve
+approved
+approver
+approvers
+approves
+approving
+approvingly
+approximate
+approximated
+approximately
+approximates
+approximating
+approximation
+approximations
+appurtenance
+appurtenances
+apricot
+apricots
+April
+Aprils
+apron
+aprons
+apropos
+apse
+apsis
+apt
+aptitude
+aptitudes
+aptly
+aptness
+aqua
+aquaria
+aquarium
+Aquarius
+aquatic
+aqueduct
+aqueducts
+aqueous
+aquifer
+aquifers
+Aquila
+Aquinas
+Arab
+arabesque
+Arabia
+Arabian
+Arabianize
+Arabianizes
+Arabians
+Arabic
+Arabicize
+Arabicizes
+arable
+Arabs
+Araby
+Arachne
+arachnid
+arachnids
+Aramco
+Arapaho
+arbiter
+arbiters
+arbitrarily
+arbitrariness
+arbitrary
+arbitrate
+arbitrated
+arbitrates
+arbitrating
+arbitration
+arbitrator
+arbitrators
+arbor
+arboreal
+arbors
+arc
+arcade
+arcaded
+arcades
+Arcadia
+Arcadian
+arcane
+arced
+arch
+archaic
+archaically
+archaicness
+archaism
+archaize
+archangel
+archangels
+archbishop
+archdiocese
+archdioceses
+arched
+archenemy
+archeological
+archeologist
+archeology
+Archer
+archers
+archery
+arches
+archetype
+archfool
+Archibald
+Archie
+Archimedes
+arching
+archipelago
+archipelagoes
+architect
+architectonic
+architects
+architectural
+architecturally
+architecture
+architectures
+archival
+archive
+archived
+archiver
+archivers
+archives
+archiving
+archivist
+archly
+arcing
+arclike
+ARCO
+arcs
+arcsine
+arctangent
+arctic
+Arcturus
+Arden
+ardent
+ardently
+ardor
+arduous
+arduously
+arduousness
+are
+area
+areas
+arena
+arenas
+Arequipa
+Ares
+Argentina
+Argentinian
+Argive
+Argo
+argon
+Argonaut
+argonauts
+Argonne
+Argos
+argot
+arguable
+arguably
+argue
+argued
+arguer
+arguers
+argues
+arguing
+argument
+argumentation
+argumentative
+arguments
+Argus
+Ariadne
+Arianism
+Arianist
+Arianists
+arid
+aridity
+Aries
+aright
+arise
+arisen
+ariser
+arises
+arising
+arisings
+aristocracy
+aristocrat
+aristocratic
+aristocratically
+aristocrats
+Aristotelian
+Aristotle
+arithmetic
+arithmetical
+arithmetically
+arithmetics
+arithmetize
+arithmetized
+arithmetizes
+Arizona
+ark
+Arkansan
+Arkansas
+Arlen
+Arlene
+Arlington
+arm
+Armada
+armadillo
+armadillos
+Armageddon
+Armagnac
+armament
+armaments
+Armata
+armchair
+armchairs
+Armco
+armed
+Armenia
+Armenian
+armer
+armers
+armful
+armhole
+armies
+arming
+armistice
+armload
+Armonk
+armor
+armored
+armorer
+armory
+Armour
+armpit
+armpits
+arms
+Armstrong
+army
+Arnold
+aroma
+aromas
+aromatic
+arose
+around
+arousal
+arouse
+aroused
+arouses
+arousing
+ARPA
+ARPANET
+Arpanet
+arpeggio
+arpeggios
+arrack
+Arragon
+arraign
+arraigned
+arraigning
+arraignment
+arraignments
+arraigns
+arrange
+arranged
+arrangement
+arrangements
+arranger
+arrangers
+arranges
+arranging
+arrant
+array
+arrayed
+arrays
+arrears
+arrest
+arrested
+arrester
+arresters
+arresting
+arrestingly
+arrestor
+arrestors
+arrests
+Arrhenius
+arrival
+arrivals
+arrive
+arrived
+arrives
+arriving
+arrogance
+arrogant
+arrogantly
+arrogate
+arrogated
+arrogates
+arrogating
+arrogation
+arrow
+arrowed
+arrowhead
+arrowheads
+arrows
+arroyo
+arroyos
+arsenal
+arsenals
+arsenic
+arsine
+arson
+art
+Artemia
+Artemis
+arterial
+arteries
+arteriolar
+arteriole
+arterioles
+arteriosclerosis
+artery
+artful
+artfully
+artfulness
+arthritis
+arthropod
+arthropods
+Arthur
+artichoke
+artichokes
+article
+articles
+articulate
+articulated
+articulately
+articulateness
+articulates
+articulating
+articulation
+articulations
+articulator
+articulators
+articulatory
+Artie
+artifact
+artifacts
+artifice
+artificer
+artifices
+artificial
+artificialities
+artificiality
+artificially
+artificialness
+artillerist
+artillery
+artisan
+artisans
+artist
+artistic
+artistically
+artistry
+artists
+artless
+arts
+Arturo
+artwork
+Aruba
+Aryan
+Aryans
+as
+asbestos
+ascend
+ascendancy
+ascendant
+ascended
+ascendency
+ascendent
+ascender
+ascenders
+ascending
+ascends
+ascension
+ascensions
+ascent
+ascertain
+ascertainable
+ascertained
+ascertaining
+ascertains
+ascetic
+asceticism
+ascetics
+ASCII
+ascot
+ascribable
+ascribe
+ascribed
+ascribes
+ascribing
+ascription
+aseptic
+ash
+ashamed
+ashamedly
+ashen
+Asher
+ashes
+Asheville
+Ashland
+Ashley
+ashman
+Ashmolean
+ashore
+ashtray
+ashtrays
+Asia
+Asian
+Asians
+Asiatic
+Asiaticization
+Asiaticizations
+Asiaticize
+Asiaticizes
+Asiatics
+aside
+Asilomar
+asinine
+ask
+askance
+asked
+asker
+askers
+askew
+asking
+asks
+asleep
+asocial
+asp
+asparagus
+aspect
+aspects
+aspen
+aspersion
+aspersions
+asphalt
+asphyxia
+aspic
+aspirant
+aspirants
+aspirate
+aspirated
+aspirates
+aspirating
+aspiration
+aspirations
+aspirator
+aspirators
+aspire
+aspired
+aspires
+aspirin
+aspiring
+aspirins
+ass
+assail
+assailant
+assailants
+assailed
+assailing
+assails
+Assam
+assassin
+assassinate
+assassinated
+assassinates
+assassinating
+assassination
+assassinations
+assassins
+assault
+assaulted
+assaulting
+assaults
+assay
+assayed
+assaying
+assemblage
+assemblages
+assemble
+assembled
+assembler
+assemblers
+assembles
+assemblies
+assembling
+assembly
+assent
+assented
+assenter
+assenting
+assents
+assert
+asserted
+asserter
+asserters
+asserting
+assertion
+assertions
+assertive
+assertively
+assertiveness
+asserts
+asses
+assess
+assessed
+assesses
+assessing
+assessment
+assessments
+assessor
+assessors
+asset
+assets
+assiduity
+assiduous
+assiduously
+assign
+assignable
+assigned
+assignee
+assignees
+assigner
+assigners
+assigning
+assignment
+assignments
+assigns
+assimilate
+assimilated
+assimilates
+assimilating
+assimilation
+assimilations
+assist
+assistance
+assistances
+assistant
+assistants
+assistantship
+assistantships
+assisted
+assisting
+assists
+associate
+associated
+associates
+associating
+association
+associational
+associations
+associative
+associatively
+associativity
+associator
+associators
+assonance
+assonant
+assort
+assorted
+assortment
+assortments
+assorts
+assuage
+assuaged
+assuages
+assume
+assumed
+assumes
+assuming
+assumption
+assumptions
+assurance
+assurances
+assure
+assured
+assuredly
+assurer
+assurers
+assures
+assuring
+assuringly
+Assyria
+Assyrian
+Assyrianize
+Assyrianizes
+Assyriology
+Astaire
+Astaires
+Astarte
+astatine
+aster
+asterisk
+asterisks
+asteroid
+asteroidal
+asteroids
+asters
+asthma
+Aston
+astonish
+astonished
+astonishes
+astonishing
+astonishingly
+astonishment
+Astor
+Astoria
+astound
+astounded
+astounding
+astounds
+astral
+astray
+astride
+astringency
+astringent
+astrology
+astronaut
+astronautics
+astronauts
+astronomer
+astronomers
+astronomical
+astronomically
+astronomy
+astrophysical
+astrophysics
+astute
+astutely
+astuteness
+Asuncion
+asunder
+asylum
+asymmetric
+asymmetrically
+asymmetry
+asymptomatically
+asymptote
+asymptotes
+asymptotic
+asymptotically
+asynchronism
+asynchronous
+asynchronously
+asynchrony
+at
+Atalanta
+Atari
+atavistic
+Atchison
+ate
+atemporal
+Athabascan
+atheism
+atheist
+atheistic
+atheists
+Athena
+Athenian
+Athenians
+Athens
+atherosclerosis
+athlete
+athletes
+athletic
+athleticism
+athletics
+Atkins
+Atkinson
+Atlanta
+Atlantic
+Atlantica
+Atlantis
+atlas
+atmosphere
+atmospheres
+atmospheric
+atoll
+atolls
+atom
+atomic
+atomically
+atomics
+atomization
+atomize
+atomized
+atomizes
+atomizing
+atoms
+atonal
+atonally
+atone
+atoned
+atonement
+atones
+atop
+Atreus
+atrocious
+atrociously
+atrocities
+atrocity
+atrophic
+atrophied
+atrophies
+atrophy
+atrophying
+Atropos
+attach
+attache
+attached
+attacher
+attachers
+attaches
+attaching
+attachment
+attachments
+attack
+attackable
+attacked
+attacker
+attackers
+attacking
+attacks
+attain
+attainable
+attainably
+attained
+attainer
+attainers
+attaining
+attainment
+attainments
+attains
+attempt
+attempted
+attempter
+attempters
+attempting
+attempts
+attend
+attendance
+attendances
+attendant
+attendants
+attended
+attendee
+attendees
+attender
+attenders
+attending
+attends
+attention
+attentional
+attentionality
+attentions
+attentive
+attentively
+attentiveness
+attenuate
+attenuated
+attenuates
+attenuating
+attenuation
+attenuator
+attenuators
+attest
+attested
+attesting
+attests
+attic
+Attica
+attics
+attire
+attired
+attires
+attiring
+attitude
+attitudes
+attitudinal
+Attlee
+attorney
+attorneys
+attract
+attracted
+attracting
+attraction
+attractions
+attractive
+attractively
+attractiveness
+attractor
+attractors
+attracts
+attributable
+attribute
+attributed
+attributes
+attributing
+attribution
+attributions
+attributive
+attributively
+attrition
+attune
+attuned
+attunes
+attuning
+Atwater
+Atwood
+atypical
+atypically
+Auberge
+Aubrey
+auburn
+Auckland
+auction
+auctioneer
+auctioneers
+audacious
+audaciously
+audaciousness
+audacity
+audible
+audibly
+audience
+audiences
+audio
+audiogram
+audiograms
+audiological
+audiologist
+audiologists
+audiology
+audiometer
+audiometers
+audiometric
+audiometry
+audit
+audited
+auditing
+audition
+auditioned
+auditioning
+auditions
+auditor
+auditorium
+auditors
+auditory
+audits
+Audrey
+Audubon
+Auerbach
+Augean
+auger
+augers
+aught
+augment
+augmentation
+augmented
+augmenting
+augments
+augur
+augurs
+august
+Augusta
+Augustan
+Augustine
+augustly
+augustness
+Augustus
+aunt
+aunts
+aura
+aural
+aurally
+auras
+Aurelius
+aureole
+aureomycin
+Auriga
+aurora
+Auschwitz
+auscultate
+auscultated
+auscultates
+auscultating
+auscultation
+auscultations
+auspice
+auspices
+auspicious
+auspiciously
+austere
+austerely
+austerity
+Austin
+Australia
+Australian
+Australianize
+Australianizes
+Australis
+Austria
+Austrian
+Austrianize
+Austrianizes
+authentic
+authentically
+authenticate
+authenticated
+authenticates
+authenticating
+authentication
+authentications
+authenticator
+authenticators
+authenticity
+author
+authored
+authoring
+authoritarian
+authoritarianism
+authoritative
+authoritatively
+authorities
+authority
+authorization
+authorizations
+authorize
+authorized
+authorizer
+authorizers
+authorizes
+authorizing
+authors
+authorship
+autism
+autistic
+auto
+autobiographic
+autobiographical
+autobiographies
+autobiography
+autocollimator
+autocorrelate
+autocorrelation
+autocracies
+autocracy
+autocrat
+autocratic
+autocratically
+autocrats
+autodecrement
+autodecremented
+autodecrements
+autodialer
+autofluorescence
+autograph
+autographed
+autographing
+autographs
+autoincrement
+autoincremented
+autoincrements
+autoindex
+autoindexing
+automata
+automate
+automated
+automates
+automatic
+automatically
+automating
+automation
+automaton
+automobile
+automobiles
+automotive
+autonavigator
+autonavigators
+autonomic
+autonomous
+autonomously
+autonomy
+autopilot
+autopilots
+autopsied
+autopsies
+autopsy
+autoregressive
+autos
+autosuggestibility
+autotransformer
+autumn
+autumnal
+autumns
+auxiliaries
+auxiliary
+avail
+availabilities
+availability
+available
+availably
+availed
+availer
+availers
+availing
+avails
+avalanche
+avalanched
+avalanches
+avalanching
+avant
+avarice
+avaricious
+avariciously
+avenge
+avenged
+avenger
+avenges
+avenging
+Aventine
+Aventino
+avenue
+avenues
+aver
+average
+averaged
+averages
+averaging
+Avernus
+averred
+averrer
+averring
+avers
+averse
+aversion
+aversions
+avert
+averted
+averting
+averts
+Avery
+Avesta
+avian
+aviaries
+aviary
+aviation
+aviator
+aviators
+avid
+avidity
+avidly
+Avignon
+avionic
+avionics
+Avis
+Aviv
+avocado
+avocados
+avocation
+avocations
+Avogadro
+avoid
+avoidable
+avoidably
+avoidance
+avoided
+avoider
+avoiders
+avoiding
+avoids
+Avon
+avouch
+avow
+avowal
+avowed
+avows
+await
+awaited
+awaiting
+awaits
+awake
+awaken
+awakened
+awakening
+awakens
+awakes
+awaking
+award
+awarded
+awarder
+awarders
+awarding
+awards
+aware
+awareness
+awash
+away
+awe
+awed
+awesome
+awful
+awfully
+awfulness
+awhile
+awkward
+awkwardly
+awkwardness
+awl
+awls
+awning
+awnings
+awoke
+awry
+ax
+axed
+Axel
+axer
+axers
+axes
+axial
+axially
+axing
+axiological
+axiom
+axiomatic
+axiomatically
+axiomatization
+axiomatizations
+axiomatize
+axiomatized
+axiomatizes
+axiomatizing
+axioms
+axis
+axle
+axles
+axolotl
+axolotls
+axon
+axons
+aye
+Ayers
+ayes
+Aylesbury
+azalea
+azaleas
+Azerbaijan
+azimuth
+azimuths
+Azores
+Aztec
+Aztecan
+azure
+Babbage
+babble
+babbled
+babbles
+babbling
+Babcock
+babe
+Babel
+Babelize
+Babelizes
+babes
+babied
+babies
+Babka
+baboon
+baboons
+Babul
+baby
+babyhood
+babying
+babyish
+Babylon
+Babylonian
+Babylonians
+Babylonize
+Babylonizes
+babysit
+babysitting
+baccalaureate
+Bacchus
+Bach
+bachelor
+bachelors
+bacilli
+bacillus
+back
+backache
+backaches
+backarrow
+backbend
+backbends
+backboard
+backbone
+backbones
+backdrop
+backdrops
+backed
+backer
+backers
+backfill
+backfiring
+background
+backgrounds
+backhand
+backing
+backlash
+backlog
+backlogged
+backlogs
+backorder
+backpack
+backpacks
+backplane
+backplanes
+backplate
+backs
+backscatter
+backscattered
+backscattering
+backscatters
+backside
+backslash
+backslashes
+backspace
+backspaced
+backspaces
+backspacing
+backstage
+backstairs
+backstitch
+backstitched
+backstitches
+backstitching
+backstop
+backtrack
+backtracked
+backtracker
+backtrackers
+backtracking
+backtracks
+backup
+backups
+Backus
+backward
+backwardness
+backwards
+backwater
+backwaters
+backwoods
+backyard
+backyards
+bacon
+bacteria
+bacterial
+bacterium
+bad
+bade
+Baden
+badge
+badger
+badgered
+badgering
+badgers
+badges
+badlands
+badly
+badminton
+badness
+Baffin
+baffle
+baffled
+baffler
+bafflers
+baffling
+bag
+bagatelle
+bagatelles
+bagel
+bagels
+baggage
+bagged
+bagger
+baggers
+bagging
+baggy
+Baghdad
+Bagley
+bagpipe
+bagpipes
+Bagrodia
+Bagrodias
+bags
+bah
+Bahama
+Bahamas
+Bahrein
+bail
+Bailey
+Baileys
+bailiff
+bailiffs
+bailing
+Baird
+Bairdi
+Bairn
+bait
+baited
+baiter
+baiting
+baits
+Baja
+bake
+baked
+Bakelite
+baker
+bakeries
+bakers
+Bakersfield
+bakery
+bakes
+Bakhtiari
+baking
+baklava
+Baku
+balalaika
+balalaikas
+balance
+balanced
+balancer
+balancers
+balances
+balancing
+Balboa
+balconies
+balcony
+bald
+balding
+baldly
+baldness
+Baldwin
+bale
+baleful
+baler
+bales
+Balfour
+Bali
+Balinese
+balk
+Balkan
+Balkanization
+Balkanizations
+Balkanize
+balkanized
+Balkanizes
+balkanizing
+Balkans
+balked
+balkiness
+balking
+balks
+balky
+ball
+ballad
+ballads
+Ballard
+Ballards
+ballast
+ballasts
+balled
+baller
+ballerina
+ballerinas
+ballers
+ballet
+ballets
+ballgown
+balling
+ballistic
+ballistics
+balloon
+ballooned
+ballooner
+ballooners
+ballooning
+balloons
+ballot
+ballots
+ballpark
+ballparks
+ballplayer
+ballplayers
+ballroom
+ballrooms
+balls
+ballyhoo
+balm
+balms
+balmy
+balsa
+balsam
+Baltic
+Baltimore
+Baltimorean
+balustrade
+balustrades
+Balzac
+Bamako
+Bamberger
+Bambi
+bamboo
+ban
+Banach
+banal
+banally
+banana
+bananas
+Banbury
+Bancroft
+band
+bandage
+bandaged
+bandages
+bandaging
+banded
+bandied
+bandies
+banding
+bandit
+bandits
+bandpass
+bands
+bandstand
+bandstands
+bandwagon
+bandwagons
+bandwidth
+bandwidths
+bandy
+bandying
+bane
+baneful
+bang
+banged
+banging
+Bangladesh
+bangle
+bangles
+Bangor
+bangs
+Bangui
+banish
+banished
+banishes
+banishing
+banishment
+banister
+banisters
+banjo
+banjos
+bank
+banked
+banker
+bankers
+banking
+bankrupt
+bankruptcies
+bankruptcy
+bankrupted
+bankrupting
+bankrupts
+Banks
+banned
+banner
+banners
+banning
+banquet
+banqueting
+banquetings
+banquets
+bans
+banshee
+banshees
+bantam
+banter
+bantered
+bantering
+banters
+Bantu
+Bantus
+baptism
+baptismal
+baptisms
+Baptist
+Baptiste
+baptistery
+baptistries
+baptistry
+Baptists
+baptize
+baptized
+baptizes
+baptizing
+bar
+barb
+Barbados
+Barbara
+barbarian
+barbarians
+barbaric
+barbarism
+barbarities
+barbarity
+barbarous
+barbarously
+barbecue
+barbecued
+barbecues
+barbed
+barbell
+barbells
+barber
+barbital
+barbiturate
+barbiturates
+Barbour
+barbs
+Barcelona
+Barclay
+bard
+bards
+bare
+bared
+barefaced
+barefoot
+barefooted
+barely
+bareness
+barer
+bares
+barest
+barflies
+barfly
+bargain
+bargained
+bargaining
+bargains
+barge
+barges
+barging
+Barhop
+baring
+baritone
+baritones
+barium
+bark
+barked
+barker
+barkers
+barking
+barks
+barley
+Barlow
+barn
+Barnabas
+Barnard
+Barnes
+Barnet
+Barnett
+Barney
+Barnhard
+barns
+barnstorm
+barnstormed
+barnstorming
+barnstorms
+Barnum
+barnyard
+barnyards
+barometer
+barometers
+barometric
+baron
+baroness
+baronial
+baronies
+barons
+barony
+baroque
+baroqueness
+Barr
+barrack
+barracks
+barrage
+barrages
+barred
+barrel
+barrelled
+barrelling
+barrels
+barren
+barrenness
+Barrett
+barricade
+barricades
+barrier
+barriers
+barring
+barringer
+Barrington
+Barron
+barrow
+Barry
+Barrymore
+Barrymores
+bars
+Barstow
+Bart
+bartender
+bartenders
+barter
+bartered
+bartering
+barters
+Barth
+Bartholomew
+Bartlett
+Bartok
+Barton
+basal
+basalt
+Bascom
+base
+baseball
+baseballs
+baseband
+baseboard
+baseboards
+based
+Basel
+baseless
+baseline
+baselines
+basely
+baseman
+basement
+basements
+baseness
+baser
+bases
+bash
+bashed
+bashes
+bashful
+bashfulness
+bashing
+BASIC
+Basic
+basic
+basically
+basics
+Basie
+basil
+basin
+basing
+basins
+basis
+bask
+basked
+basket
+basketball
+basketballs
+baskets
+basking
+Basque
+bass
+basses
+basset
+Bassett
+bassinet
+bassinets
+bastard
+bastards
+baste
+basted
+bastes
+basting
+bastion
+bastions
+bat
+Batavia
+batch
+batched
+Batchelder
+batches
+Bateman
+Bates
+bath
+bathe
+bathed
+bather
+bathers
+bathes
+bathing
+bathos
+bathrobe
+bathrobes
+bathroom
+bathrooms
+baths
+bathtub
+bathtubs
+Bathurst
+Batista
+baton
+batons
+Bator
+bats
+battalion
+battalions
+batted
+Battelle
+batten
+battens
+batter
+battered
+batteries
+battering
+batters
+battery
+batting
+battle
+battled
+battlefield
+battlefields
+battlefront
+battlefronts
+battleground
+battlegrounds
+battlement
+battlements
+battler
+battlers
+battles
+battleship
+battleships
+battling
+bauble
+baubles
+baud
+Baudelaire
+Bauer
+Bauhaus
+Bausch
+bauxite
+Bavaria
+Bavarian
+bawdy
+bawl
+bawled
+bawling
+bawls
+Baxter
+bay
+Bayda
+bayed
+Bayes
+Bayesian
+baying
+Baylor
+bayonet
+bayonets
+Bayonne
+bayou
+bayous
+Bayport
+Bayreuth
+bays
+bazaar
+bazaars
+be
+beach
+beached
+beaches
+beachhead
+beachheads
+beaching
+beacon
+beacons
+bead
+beaded
+beading
+beadle
+beadles
+beads
+beady
+beagle
+beagles
+beak
+beaked
+beaker
+beakers
+beaks
+beam
+beamed
+beamer
+beamers
+beaming
+beams
+bean
+beanbag
+beaned
+beaner
+beaners
+beaning
+beans
+bear
+bearable
+bearably
+beard
+bearded
+beardless
+beards
+Beardsley
+bearer
+bearers
+bearing
+bearings
+bearish
+bears
+beast
+beastly
+beasts
+beat
+beatable
+beatably
+beaten
+beater
+beaters
+beatific
+beatification
+beatify
+beating
+beatings
+beatitude
+beatitudes
+beatnik
+beatniks
+Beatrice
+beats
+beau
+Beauchamps
+Beaujolais
+Beaumont
+Beauregard
+beaus
+beauteous
+beauteously
+beauties
+beautifications
+beautified
+beautifier
+beautifiers
+beautifies
+beautiful
+beautifully
+beautify
+beautifying
+beauty
+beaver
+beavers
+Beaverton
+becalm
+becalmed
+becalming
+becalms
+became
+because
+Bechtel
+beck
+Becker
+Beckman
+beckon
+beckoned
+beckoning
+beckons
+Becky
+become
+becomes
+becoming
+becomingly
+bed
+bedazzle
+bedazzled
+bedazzlement
+bedazzles
+bedazzling
+bedbug
+bedbugs
+bedded
+bedder
+bedders
+bedding
+bedevil
+bedeviled
+bedeviling
+bedevils
+bedfast
+Bedford
+bedlam
+bedpost
+bedposts
+bedraggle
+bedraggled
+bedridden
+bedrock
+bedroom
+bedrooms
+beds
+bedside
+bedspread
+bedspreads
+bedspring
+bedsprings
+bedstead
+bedsteads
+bedtime
+bee
+Beebe
+beech
+Beecham
+beechen
+beecher
+beef
+beefed
+beefer
+beefers
+beefing
+beefs
+beefsteak
+beefy
+beehive
+beehives
+been
+beep
+beeps
+beer
+beers
+bees
+beet
+Beethoven
+beetle
+beetled
+beetles
+beetling
+beets
+befall
+befallen
+befalling
+befalls
+befell
+befit
+befits
+befitted
+befitting
+befog
+befogged
+befogging
+before
+beforehand
+befoul
+befouled
+befouling
+befouls
+befriend
+befriended
+befriending
+befriends
+befuddle
+befuddled
+befuddles
+befuddling
+beg
+began
+beget
+begets
+begetting
+beggar
+beggarly
+beggars
+beggary
+begged
+begging
+begin
+beginner
+beginners
+beginning
+beginnings
+begins
+begot
+begotten
+begrudge
+begrudged
+begrudges
+begrudging
+begrudgingly
+begs
+beguile
+beguiled
+beguiles
+beguiling
+begun
+behalf
+behave
+behaved
+behaves
+behaving
+behavior
+behavioral
+behaviorally
+behaviorism
+behavioristic
+behaviors
+behead
+beheading
+beheld
+behemoth
+behemoths
+behest
+behind
+behold
+beholden
+beholder
+beholders
+beholding
+beholds
+behoove
+behooves
+beige
+Beijing
+being
+beings
+Beirut
+Bela
+belabor
+belabored
+belaboring
+belabors
+belated
+belatedly
+belay
+belayed
+belaying
+belays
+belch
+belched
+belches
+belching
+Belfast
+belfries
+belfry
+Belgian
+Belgians
+Belgium
+Belgrade
+belie
+belied
+belief
+beliefs
+belies
+believable
+believably
+believe
+believed
+believer
+believers
+believes
+believing
+belittle
+belittled
+belittles
+belittling
+Belize
+bell
+Bella
+Bellamy
+Bellatrix
+bellboy
+bellboys
+belle
+belles
+Belleville
+bellhop
+bellhops
+bellicose
+bellicosity
+bellies
+belligerence
+belligerent
+belligerently
+belligerents
+Bellingham
+Bellini
+bellman
+bellmen
+Bellovin
+bellow
+bellowed
+bellowing
+bellows
+bells
+bellum
+bellwether
+bellwethers
+Bellwood
+belly
+bellyache
+bellyfull
+Belmont
+Beloit
+belong
+belonged
+belonging
+belongings
+belongs
+beloved
+below
+Belshazzar
+belt
+belted
+belting
+Belton
+belts
+Beltsville
+Belushi
+bely
+belying
+bemoan
+bemoaned
+bemoaning
+bemoans
+Ben
+Benares
+bench
+benched
+benches
+benchmark
+benchmarking
+benchmarks
+bend
+bendable
+Bender
+benders
+bending
+Bendix
+bends
+beneath
+Benedict
+Benedictine
+benediction
+benedictions
+Benedikt
+benefactor
+benefactors
+beneficence
+beneficences
+beneficent
+beneficial
+beneficially
+beneficiaries
+beneficiary
+benefit
+benefited
+benefiting
+benefits
+benefitted
+benefitting
+Benelux
+benevolence
+benevolent
+Bengal
+Bengali
+benighted
+benign
+benignly
+Benjamin
+Bennett
+Bennington
+Benny
+Benson
+bent
+Bentham
+Bentley
+Bentleys
+Benton
+Benz
+Benzedrine
+benzene
+Beograd
+Beowulf
+bequeath
+bequeathal
+bequeathed
+bequeathing
+bequeaths
+bequest
+bequests
+berate
+berated
+berates
+berating
+Berea
+bereave
+bereaved
+bereavement
+bereavements
+bereaves
+bereaving
+bereft
+Berenices
+Beresford
+beret
+berets
+Bergen
+Bergland
+Berglund
+Bergman
+Bergson
+Bergsten
+Bergstrom
+beribboned
+beriberi
+Beringer
+Berkeley
+berkelium
+Berkowitz
+Berkshire
+Berkshires
+Berlin
+Berliner
+Berliners
+Berlinize
+Berlinizes
+Berlioz
+Berlitz
+Berman
+Bermuda
+Bern
+Bernadine
+Bernard
+Bernardine
+Bernardino
+Bernardo
+berne
+Bernet
+Bernhard
+Bernice
+Bernie
+Berniece
+Bernini
+Bernoulli
+Bernstein
+Berra
+berries
+berry
+berserk
+Bert
+berth
+Bertha
+berths
+Bertie
+Bertram
+Bertrand
+Berwick
+beryl
+beryllium
+beseech
+beseeches
+beseeching
+beset
+besets
+besetting
+beside
+besides
+besiege
+besieged
+besieger
+besiegers
+besieging
+besmirch
+besmirched
+besmirches
+besmirching
+besotted
+besotter
+besotting
+besought
+bespeak
+bespeaks
+bespectacled
+bespoke
+Bess
+Bessel
+Bessemer
+Bessemerize
+Bessemerizes
+Bessie
+best
+bested
+bestial
+besting
+bestir
+bestirring
+bestow
+bestowal
+bestowed
+bests
+bestseller
+bestsellers
+bestselling
+bet
+beta
+betatron
+betel
+Betelgeuse
+Bethesda
+Bethlehem
+betide
+betray
+betrayal
+betrayed
+betrayer
+betraying
+betrays
+betroth
+betrothal
+betrothed
+bets
+Betsey
+Betsy
+Bette
+better
+bettered
+bettering
+betterment
+betterments
+betters
+Betties
+betting
+Betty
+between
+betwixt
+bevel
+beveled
+beveling
+bevels
+beverage
+beverages
+Beverly
+bevy
+bewail
+bewailed
+bewailing
+bewails
+beware
+bewhiskered
+bewilder
+bewildered
+bewildering
+bewilderingly
+bewilderment
+bewilders
+bewitch
+bewitched
+bewitches
+bewitching
+beyond
+Bhagavad-Gita
+Bhutan
+Bialystok
+Bianco
+biannual
+bias
+biased
+biases
+biasing
+bib
+bibbed
+bibbing
+Bible
+bibles
+biblical
+biblically
+bibliographic
+bibliographical
+bibliographies
+bibliography
+bibliophile
+bibs
+bicameral
+bicarbonate
+bicentennial
+bicep
+biceps
+bicker
+bickered
+bickering
+bickers
+biconcave
+biconnected
+biconvex
+bicycle
+bicycled
+bicycler
+bicyclers
+bicycles
+bicycling
+bid
+biddable
+bidden
+bidder
+bidders
+biddies
+bidding
+Biddle
+biddy
+bide
+bidirectional
+bids
+Bien
+biennial
+biennium
+Bienville
+bier
+Bierce
+bifocal
+bifocals
+bifurcate
+big
+Bigelow
+bigger
+biggest
+Biggs
+bight
+bights
+bigness
+bigot
+bigoted
+bigotry
+bigots
+biharmonic
+bijection
+bijections
+bijective
+bijectively
+bike
+bikes
+biking
+bikini
+bikinis
+bilabial
+bilateral
+bilaterally
+Bilbao
+Bilbo
+bile
+bilge
+bilges
+bilinear
+bilingual
+bilk
+bilked
+bilking
+bilks
+bill
+billboard
+billboards
+billed
+biller
+billers
+billet
+billeted
+billeting
+billets
+billiard
+billiards
+Billie
+Billiken
+Billikens
+billing
+Billings
+billion
+billions
+billionth
+billow
+billowed
+billows
+bills
+Biltmore
+bimetallic
+bimetallism
+Bimini
+bimodal
+bimolecular
+bimonthlies
+bimonthly
+bin
+binaries
+binary
+binaural
+bind
+binder
+binders
+binding
+bindings
+binds
+bing
+binge
+binges
+Bingham
+Binghamton
+bingo
+Bini
+binocular
+binoculars
+binomial
+bins
+binuclear
+biochemical
+biochemist
+biochemistry
+biofeedback
+biographer
+biographers
+biographic
+biographical
+biographically
+biographies
+biography
+biological
+biologically
+biologist
+biologists
+biology
+biomedical
+biomedicine
+biophysical
+biophysicist
+biophysics
+biopsies
+biopsy
+bioscience
+biosphere
+biostatistic
+biosynthesize
+biota
+biotic
+bipartisan
+bipartite
+biped
+bipeds
+biplane
+biplanes
+bipolar
+biracial
+birch
+birchen
+birches
+bird
+birdbath
+birdbaths
+birdie
+birdied
+birdies
+birdlike
+birds
+birefringence
+birefringent
+Birgit
+Birmingham
+Birminghamize
+Birminghamizes
+birth
+birthday
+birthdays
+birthed
+birthplace
+birthplaces
+birthright
+birthrights
+births
+Biscayne
+biscuit
+biscuits
+bisect
+bisected
+bisecting
+bisection
+bisections
+bisector
+bisectors
+bisects
+bishop
+bishops
+Bismarck
+Bismark
+bismuth
+bison
+bisons
+bisque
+bisques
+Bissau
+bistable
+bistate
+bit
+bitch
+bitches
+bite
+biter
+biters
+bites
+biting
+bitingly
+bitmap
+BITNET
+bits
+bitten
+bitter
+bitterer
+bitterest
+bitterly
+bitterness
+bitternut
+bitterroot
+bitters
+bittersweet
+bitumen
+bituminous
+bitwise
+bivalve
+bivalves
+bivariate
+bivouac
+bivouacs
+biweekly
+bizarre
+Bizet
+blab
+blabbed
+blabbermouth
+blabbermouths
+blabbing
+blabs
+black
+blackberries
+blackberry
+blackbird
+blackbirds
+blackboard
+blackboards
+Blackburn
+blacked
+blacken
+blackened
+blackening
+blackens
+blacker
+blackest
+Blackfeet
+Blackfoot
+Blackfoots
+blacking
+blackjack
+blackjacks
+blacklist
+blacklisted
+blacklisting
+blacklists
+blackly
+blackmail
+blackmailed
+blackmailer
+blackmailers
+blackmailing
+blackmails
+Blackman
+Blackmer
+blackness
+blackout
+blackouts
+blacks
+blacksmith
+blacksmiths
+Blackstone
+Blackwell
+Blackwells
+bladder
+bladders
+blade
+blades
+Blaine
+Blair
+Blake
+Blakey
+blamable
+blame
+blamed
+blameless
+blamelessness
+blamer
+blamers
+blames
+blameworthy
+blaming
+blanch
+Blanchard
+Blanche
+blanched
+blanches
+blanching
+bland
+blandly
+blandness
+blank
+blanked
+blanker
+blankest
+blanket
+blanketed
+blanketer
+blanketers
+blanketing
+blankets
+blanking
+blankly
+blankness
+blanks
+Blanton
+blare
+blared
+blares
+blaring
+blase
+blaspheme
+blasphemed
+blasphemes
+blasphemies
+blaspheming
+blasphemous
+blasphemously
+blasphemousness
+blasphemy
+blast
+blasted
+blaster
+blasters
+blasting
+blasts
+blatant
+blatantly
+Blatz
+blaze
+blazed
+blazer
+blazers
+blazes
+blazing
+bleach
+bleached
+bleacher
+bleachers
+bleaches
+bleaching
+bleak
+bleaker
+bleakly
+bleakness
+blear
+bleary
+bleat
+bleating
+bleats
+bled
+bleed
+bleeder
+bleeding
+bleedings
+bleeds
+Bleeker
+blemish
+blemishes
+blend
+blended
+blender
+blending
+blends
+Blenheim
+bless
+blessed
+blessing
+blessings
+blew
+blight
+blighted
+blimp
+blimps
+blind
+blinded
+blinder
+blinders
+blindfold
+blindfolded
+blindfolding
+blindfolds
+blinding
+blindingly
+blindly
+blindness
+blinds
+blink
+blinked
+blinker
+blinkers
+blinking
+blinks
+Blinn
+blip
+blips
+bliss
+blissful
+blissfully
+blister
+blistered
+blistering
+blisters
+blithe
+blithely
+blitz
+blitzes
+blitzkrieg
+blizzard
+blizzards
+bloat
+bloated
+bloater
+bloating
+bloats
+blob
+blobs
+bloc
+Bloch
+block
+blockade
+blockaded
+blockades
+blockading
+blockage
+blockages
+blocked
+blocker
+blockers
+blockhouse
+blockhouses
+blocking
+blocks
+blocs
+bloke
+blokes
+Blomberg
+Blomquist
+blond
+blonde
+blondes
+blonds
+blood
+bloodbath
+blooded
+bloodhound
+bloodhounds
+bloodied
+bloodiest
+bloodless
+bloods
+bloodshed
+bloodshot
+bloodstain
+bloodstained
+bloodstains
+bloodstream
+bloody
+bloom
+bloomed
+bloomers
+Bloomfield
+blooming
+Bloomington
+blooms
+blooper
+blossom
+blossomed
+blossoms
+blot
+blots
+blotted
+blotting
+blouse
+blouses
+blow
+blower
+blowers
+blowfish
+blowing
+blown
+blowout
+blows
+blowup
+blubber
+bludgeon
+bludgeoned
+bludgeoning
+bludgeons
+blue
+blueberries
+blueberry
+bluebird
+bluebirds
+bluebonnet
+bluebonnets
+bluefish
+blueness
+blueprint
+blueprints
+bluer
+blues
+bluest
+bluestocking
+bluff
+bluffing
+bluffs
+bluing
+bluish
+Blum
+Blumenthal
+blunder
+blunderbuss
+blundered
+blundering
+blunderings
+blunders
+blunt
+blunted
+blunter
+bluntest
+blunting
+bluntly
+bluntness
+blunts
+blur
+blurb
+blurred
+blurring
+blurry
+blurs
+blurt
+blurted
+blurting
+blurts
+blush
+blushed
+blushes
+blushing
+bluster
+blustered
+blustering
+blusters
+blustery
+Blythe
+boa
+boar
+board
+boarded
+boarder
+boarders
+boarding
+boardinghouse
+boardinghouses
+boards
+Boarsh
+boast
+boasted
+boaster
+boasters
+boastful
+boastfully
+boasting
+boastings
+boasts
+boat
+boater
+boaters
+boathouse
+boathouses
+boating
+boatload
+boatloads
+boatman
+boatmen
+boats
+boatsman
+boatsmen
+boatswain
+boatswains
+boatyard
+boatyards
+bob
+bobbed
+Bobbie
+bobbin
+bobbing
+bobbins
+Bobbsey
+bobby
+bobolink
+bobolinks
+Bobrow
+bobs
+bobwhite
+bobwhites
+Boca
+bode
+Bodenheim
+bodes
+bodice
+bodied
+bodies
+bodily
+Bodleian
+body
+bodybuilder
+bodybuilders
+bodybuilding
+bodyguard
+bodyguards
+bodyweight
+Boeing
+Boeotia
+Boeotian
+Boer
+Boers
+bog
+Bogart
+Bogartian
+bogeymen
+bogged
+boggle
+boggled
+boggles
+boggling
+Bogota
+bogs
+bogus
+Boheme
+Bohemia
+Bohemian
+Bohemianism
+Bohr
+boil
+boiled
+boiler
+boilerplate
+boilers
+boiling
+boils
+Bois
+Boise
+boisterous
+boisterously
+bold
+bolder
+boldest
+boldface
+boldly
+boldness
+Bolivia
+Bolivian
+boll
+Bologna
+Bolshevik
+Bolsheviks
+Bolshevism
+Bolshevist
+Bolshevistic
+Bolshoi
+bolster
+bolstered
+bolstering
+bolsters
+bolt
+bolted
+bolting
+Bolton
+bolts
+Boltzmann
+bomb
+bombard
+bombarded
+bombarding
+bombardment
+bombards
+bombast
+bombastic
+Bombay
+bombed
+bomber
+bombers
+bombing
+bombings
+bombproof
+bombs
+bonanza
+bonanzas
+Bonaparte
+Bonaventure
+bond
+bondage
+bonded
+bonder
+bonders
+bonding
+bonds
+bondsman
+bondsmen
+bone
+boned
+boner
+boners
+bones
+bonfire
+bonfires
+bong
+Bonham
+Boniface
+boning
+Bonn
+bonnet
+bonneted
+bonnets
+Bonneville
+Bonnie
+bonny
+Bontempo
+bonus
+bonuses
+bony
+boo
+boob
+booboo
+booby
+book
+bookcase
+bookcases
+booked
+booker
+bookers
+bookie
+bookies
+booking
+bookings
+bookish
+bookkeeper
+bookkeepers
+bookkeeping
+booklet
+booklets
+bookmark
+books
+bookseller
+booksellers
+bookshelf
+bookshelves
+bookstore
+bookstores
+bookworm
+boolean
+Booleans
+boom
+boomed
+boomerang
+boomerangs
+booming
+booms
+boon
+Boone
+Boonton
+boor
+boorish
+boors
+boos
+boost
+boosted
+booster
+boosting
+boosts
+boot
+bootable
+booted
+Bootes
+booth
+booths
+booting
+Bootle
+bootleg
+bootlegged
+bootlegger
+bootleggers
+bootlegging
+bootlegs
+boots
+bootstrap
+bootstrapped
+bootstrapping
+bootstraps
+booty
+booze
+borate
+borates
+borax
+Bordeaux
+bordello
+bordellos
+Borden
+border
+bordered
+bordering
+borderings
+borderland
+borderlands
+borderline
+borders
+bore
+Borealis
+Boreas
+bored
+boredom
+borer
+bores
+Borg
+boric
+boring
+Boris
+born
+borne
+Borneo
+boron
+borough
+boroughs
+Borroughs
+borrow
+borrowed
+borrower
+borrowers
+borrowing
+borrows
+Bosch
+Bose
+bosom
+bosoms
+Bosporus
+boss
+bossed
+bosses
+Bostitch
+Boston
+Bostonian
+Bostonians
+bosun
+Boswell
+Boswellize
+Boswellizes
+botanical
+botanist
+botanists
+botany
+botch
+botched
+botcher
+botchers
+botches
+botching
+both
+bother
+bothered
+bothering
+bothers
+bothersome
+Botswana
+bottle
+bottled
+bottleneck
+bottlenecks
+bottler
+bottlers
+bottles
+bottling
+bottom
+bottomed
+bottoming
+bottomless
+bottoms
+botulinus
+botulism
+Boucher
+bouffant
+bough
+boughs
+bought
+boulder
+boulders
+boulevard
+boulevards
+bounce
+bounced
+bouncer
+bounces
+bouncing
+bouncy
+bound
+boundaries
+boundary
+bounded
+bounden
+bounding
+boundless
+boundlessness
+bounds
+bounteous
+bounteously
+bounties
+bountiful
+bounty
+bouquet
+bouquets
+Bourbaki
+bourbon
+bourgeois
+bourgeoisie
+Bourne
+boustrophedon
+boustrophedonic
+bout
+boutique
+bouts
+Bouvier
+bovine
+bovines
+bow
+Bowditch
+bowdlerize
+bowdlerized
+bowdlerizes
+bowdlerizing
+Bowdoin
+bowed
+bowel
+bowels
+Bowen
+bower
+bowers
+Bowes
+bowing
+bowl
+bowled
+bowler
+bowlers
+bowline
+bowlines
+bowling
+bowls
+bowman
+bows
+bowstring
+bowstrings
+box
+boxcar
+boxcars
+boxed
+boxer
+boxers
+boxes
+Boxford
+boxing
+boxtop
+boxtops
+boxwood
+boy
+Boyce
+boycott
+boycotted
+boycotts
+Boyd
+boyfriend
+boyfriends
+boyhood
+boyish
+boyishness
+Boyle
+Boylston
+boys
+bra
+brace
+braced
+bracelet
+bracelets
+braces
+bracing
+bracket
+bracketed
+bracketing
+brackets
+brackish
+Bradbury
+Bradford
+Bradley
+Bradshaw
+Brady
+brae
+braes
+brag
+Bragg
+bragged
+bragger
+bragging
+brags
+Brahmaputra
+Brahms
+Brahmsian
+braid
+braided
+braiding
+braids
+Braille
+brain
+Brainard
+Brainards
+brainchild
+brained
+braining
+brains
+brainstem
+brainstems
+brainstorm
+brainstorms
+brainwash
+brainwashed
+brainwashes
+brainwashing
+brainy
+brake
+braked
+brakeman
+brakes
+braking
+bramble
+brambles
+brambly
+bran
+branch
+branched
+branches
+branching
+branchings
+Branchville
+brand
+branded
+Brandeis
+Brandel
+Brandenburg
+branding
+brandish
+brandishes
+brandishing
+Brandon
+brands
+Brandt
+brandy
+brandywine
+Braniff
+Brannon
+bras
+brash
+brashly
+brashness
+Brasilia
+brass
+brasses
+brassiere
+Brasstown
+brassy
+brat
+brats
+Braun
+bravado
+brave
+braved
+bravely
+braveness
+braver
+bravery
+braves
+bravest
+braving
+bravo
+bravos
+brawl
+brawler
+brawling
+brawn
+bray
+brayed
+brayer
+braying
+brays
+braze
+brazed
+brazen
+brazenly
+brazenness
+brazes
+brazier
+braziers
+Brazil
+Brazilian
+brazing
+Brazzaville
+breach
+breached
+breacher
+breachers
+breaches
+breaching
+bread
+breadboard
+breadboards
+breadbox
+breadboxes
+breaded
+breading
+breads
+breadth
+breadwinner
+breadwinners
+break
+breakable
+breakables
+breakage
+breakaway
+breakdown
+breakdowns
+breaker
+breakers
+breakfast
+breakfasted
+breakfaster
+breakfasters
+breakfasting
+breakfasts
+breaking
+breakpoint
+breakpoints
+breaks
+breakthrough
+breakthroughes
+breakthroughs
+breakup
+breakwater
+breakwaters
+breast
+breasted
+breasts
+breastwork
+breastworks
+breath
+breathable
+breathe
+breathed
+breather
+breathers
+breathes
+breathing
+breathless
+breathlessly
+breaths
+breathtaking
+breathtakingly
+breathy
+bred
+breech
+breeches
+breed
+breeder
+breeding
+breeds
+breeze
+breezes
+breezily
+breezy
+Bremen
+bremsstrahlung
+Brenda
+Brendan
+Brennan
+Brenner
+Brent
+Bresenham
+Brest
+brethren
+Breton
+Bretons
+Brett
+breve
+brevet
+breveted
+breveting
+brevets
+brevity
+brew
+brewed
+brewer
+breweries
+brewers
+brewery
+brewing
+brews
+Brewster
+Brian
+briar
+briars
+bribe
+bribed
+briber
+bribers
+bribery
+bribes
+bribing
+Brice
+brick
+brickbat
+bricked
+bricker
+bricklayer
+bricklayers
+bricklaying
+bricks
+bridal
+bride
+bridegroom
+brides
+bridesmaid
+bridesmaids
+Bridewell
+bridge
+bridgeable
+bridged
+bridgehead
+bridgeheads
+Bridgeport
+bridges
+Bridget
+Bridgetown
+Bridgewater
+bridgework
+bridging
+bridle
+bridled
+bridles
+bridling
+Brie
+brief
+briefcase
+briefcases
+briefed
+briefer
+briefest
+briefing
+briefings
+briefly
+briefness
+briefs
+Brien
+brier
+brig
+brigade
+brigades
+brigadier
+brigadiers
+Brigadoon
+brigantine
+Briggs
+Brigham
+bright
+brighten
+brightened
+brightener
+brighteners
+brightening
+brightens
+brighter
+brightest
+brightly
+brightness
+Brighton
+brigs
+brilliance
+brilliancy
+brilliant
+brilliantly
+Brillouin
+brim
+brimful
+brimmed
+brimming
+brimstone
+Brindisi
+brindle
+brindled
+brine
+bring
+bringer
+bringers
+bringing
+brings
+brink
+Brinkley
+brinkmanship
+briny
+Brisbane
+brisk
+brisker
+briskly
+briskness
+bristle
+bristled
+bristles
+bristling
+Bristol
+Britain
+Britannic
+Britannica
+britches
+British
+Britisher
+Britishly
+Briton
+Britons
+Brittany
+Britten
+brittle
+brittleness
+broach
+broached
+broaches
+broaching
+broad
+broadband
+broadcast
+broadcasted
+broadcaster
+broadcasters
+broadcasting
+broadcastings
+broadcasts
+broaden
+broadened
+broadener
+broadeners
+broadening
+broadenings
+broadens
+broader
+broadest
+broadly
+broadness
+broadside
+Broadway
+brocade
+brocaded
+broccoli
+brochure
+brochures
+Brock
+Broglie
+broil
+broiled
+broiler
+broilers
+broiling
+broils
+broke
+broken
+brokenly
+brokenness
+broker
+brokerage
+brokers
+Bromfield
+bromide
+bromides
+bromine
+Bromley
+bronchi
+bronchial
+bronchiole
+bronchioles
+bronchitis
+bronchus
+Brontosaurus
+Bronx
+bronze
+bronzed
+bronzes
+brooch
+brooches
+brood
+brooder
+brooding
+broods
+brook
+Brookdale
+Brooke
+brooked
+Brookfield
+Brookhaven
+Brookline
+Brooklyn
+Brookmont
+brooks
+broom
+brooms
+broomstick
+broomsticks
+broth
+brothel
+brothels
+brother
+brotherhood
+brotherliness
+brotherly
+brothers
+brought
+brow
+browbeat
+browbeaten
+browbeating
+browbeats
+brown
+Browne
+browned
+Brownell
+browner
+brownest
+Brownian
+brownie
+brownies
+browning
+brownish
+brownness
+browns
+brows
+browse
+browsing
+Bruce
+Bruckner
+Bruegel
+bruise
+bruised
+bruises
+bruising
+Brumidi
+brunch
+brunches
+brunette
+Brunhilde
+Bruno
+Brunswick
+brunt
+brush
+brushed
+brushes
+brushfire
+brushfires
+brushing
+brushlike
+brushy
+brusque
+brusquely
+Brussels
+brutal
+brutalities
+brutality
+brutalize
+brutalized
+brutalizes
+brutalizing
+brutally
+brute
+brutes
+brutish
+Bruxelles
+Bryan
+Bryant
+Bryce
+Bryn
+bubble
+bubbled
+bubbles
+bubbling
+bubbly
+Buchanan
+Bucharest
+Buchenwald
+Buchwald
+buck
+buckboard
+buckboards
+bucked
+bucket
+buckets
+bucking
+buckle
+buckled
+buckler
+buckles
+Buckley
+buckling
+Bucknell
+bucks
+buckshot
+buckskin
+buckskins
+buckwheat
+Bucky
+bucolic
+bud
+Budapest
+Budd
+budded
+Buddha
+Buddhism
+Buddhist
+Buddhists
+buddies
+budding
+buddy
+budge
+budged
+budges
+budget
+budgetary
+budgeted
+budgeter
+budgeters
+budgeting
+budgets
+budging
+buds
+Budweiser
+Budweisers
+Buehring
+Buena
+Buenos
+buff
+buffalo
+buffaloes
+buffer
+buffered
+buffering
+buffers
+buffet
+buffeted
+buffeting
+buffetings
+buffets
+buffoon
+buffoons
+buffs
+bug
+bugaboo
+Bugatti
+bugeyed
+bugged
+bugger
+buggers
+buggies
+bugging
+buggy
+bugle
+bugled
+bugler
+bugles
+bugling
+bugs
+Buick
+build
+builder
+builders
+building
+buildings
+builds
+buildup
+buildups
+built
+builtin
+Bujumbura
+bulb
+Bulba
+bulbs
+Bulgaria
+Bulgarian
+bulge
+bulged
+bulging
+bulk
+bulked
+bulkhead
+bulkheads
+bulks
+bulky
+bull
+bulldog
+bulldogs
+bulldoze
+bulldozed
+bulldozer
+bulldozes
+bulldozing
+bulled
+bullet
+bulletin
+bulletins
+bullets
+bullfrog
+bullied
+bullies
+bulling
+bullion
+bullish
+bullock
+bulls
+bullseye
+bully
+bullying
+bulwark
+bum
+bumble
+bumblebee
+bumblebees
+bumbled
+bumbler
+bumblers
+bumbles
+bumbling
+Bumbry
+bummed
+bumming
+bump
+bumped
+bumper
+bumpers
+bumping
+bumps
+bumptious
+bumptiously
+bumptiousness
+bums
+bun
+bunch
+bunched
+bunches
+bunching
+Bundestag
+bundle
+bundled
+bundles
+bundling
+Bundoora
+Bundy
+bungalow
+bungalows
+bungle
+bungled
+bungler
+bunglers
+bungles
+bungling
+bunion
+bunions
+bunk
+bunker
+bunkered
+bunkers
+bunkhouse
+bunkhouses
+bunkmate
+bunkmates
+bunks
+bunnies
+bunny
+buns
+Bunsen
+bunt
+bunted
+bunter
+bunters
+bunting
+bunts
+Bunyan
+buoy
+buoyancy
+buoyant
+buoyed
+buoys
+Burbank
+Burch
+burden
+burdened
+burdening
+burdens
+burdensome
+bureau
+bureaucracies
+bureaucracy
+bureaucrat
+bureaucratic
+bureaucrats
+bureaus
+burgeon
+burgeoned
+burgeoning
+burgess
+burgesses
+burgher
+burghers
+burglar
+burglaries
+burglarize
+burglarized
+burglarizes
+burglarizing
+burglarproof
+burglarproofed
+burglarproofing
+burglarproofs
+burglars
+burglary
+Burgundian
+Burgundies
+Burgundy
+burial
+buried
+buries
+Burke
+Burkes
+burl
+burlesque
+burlesques
+Burlingame
+Burlington
+burly
+Burma
+Burmese
+burn
+Burne
+burned
+burner
+burners
+Burnes
+Burnett
+Burnham
+burning
+burningly
+burnings
+burnish
+burnished
+burnishes
+burnishing
+burns
+Burnside
+Burnsides
+burnt
+burntly
+burntness
+burp
+burped
+burping
+burps
+Burr
+Burroughs
+burrow
+burrowed
+burrower
+burrowing
+burrows
+burrs
+bursa
+bursitis
+burst
+burstiness
+bursting
+bursts
+bursty
+Burt
+Burton
+Burtt
+Burundi
+bury
+burying
+bus
+busboy
+busboys
+Busch
+bused
+buses
+bush
+bushel
+bushels
+bushes
+bushing
+Bushnell
+bushwhack
+bushwhacked
+bushwhacking
+bushwhacks
+bushy
+busied
+busier
+busiest
+busily
+business
+businesses
+businesslike
+businessman
+businessmen
+busing
+buss
+bussed
+busses
+bussing
+bust
+bustard
+bustards
+busted
+buster
+bustle
+bustling
+busts
+busy
+but
+butane
+butcher
+butchered
+butchers
+butchery
+butler
+butlers
+butt
+butte
+butted
+butter
+butterball
+buttercup
+buttered
+butterer
+butterers
+butterfat
+Butterfield
+butterflies
+butterfly
+buttering
+buttermilk
+butternut
+butters
+buttery
+buttes
+butting
+buttock
+buttocks
+button
+buttoned
+buttonhole
+buttonholes
+buttoning
+buttons
+buttress
+buttressed
+buttresses
+buttressing
+Buttrick
+butts
+butyl
+butyrate
+buxom
+Buxtehude
+Buxton
+buy
+buyer
+buyers
+buying
+buys
+buzz
+Buzzard
+buzzards
+buzzed
+buzzer
+buzzes
+buzzing
+buzzword
+buzzwords
+buzzy
+by
+bye
+Byers
+bygone
+bylaw
+bylaws
+byline
+bylines
+bypass
+bypassed
+bypasses
+bypassing
+byproduct
+byproducts
+Byrd
+Byrne
+Byron
+Byronic
+Byronism
+Byronize
+Byronizes
+bystander
+bystanders
+byte
+bytes
+byway
+byways
+byword
+bywords
+Byzantine
+Byzantinize
+Byzantinizes
+Byzantium
+cab
+cabal
+cabana
+cabaret
+cabbage
+cabbages
+cabdriver
+cabin
+cabinet
+cabinets
+cabins
+cable
+cabled
+cables
+cabling
+caboose
+Cabot
+cabs
+cache
+cached
+caches
+caching
+cackle
+cackled
+cackler
+cackles
+cackling
+cacti
+cactus
+cadaver
+cadence
+cadenced
+Cadillac
+Cadillacs
+cadres
+Cady
+Caesar
+Caesarian
+Caesarize
+Caesarizes
+cafe
+cafes
+cafeteria
+cage
+caged
+cager
+cagers
+cages
+caging
+Cahill
+caiman
+Cain
+Caine
+cairn
+Cairo
+cajole
+cajoled
+cajoles
+cajoling
+Cajun
+Cajuns
+cake
+caked
+cakes
+caking
+Calais
+calamities
+calamitous
+calamity
+Calceolaria
+calcify
+calcium
+CALCOMP
+CalComp
+Calcomp
+calculate
+calculated
+calculates
+calculating
+calculation
+calculations
+calculative
+calculator
+calculators
+calculi
+calculus
+Calcutta
+Calder
+caldera
+Caldwell
+Caleb
+calendar
+calendars
+calf
+calfskin
+Calgary
+Calhoun
+caliber
+calibers
+calibrate
+calibrated
+calibrates
+calibrating
+calibration
+calibrations
+calico
+California
+Californian
+Californians
+Caligula
+caliph
+caliphs
+Calkins
+call
+callable
+Callaghan
+Callahan
+Callan
+called
+caller
+callers
+calling
+calliope
+Callisto
+callous
+calloused
+callously
+callousness
+calls
+callus
+calm
+calmed
+calmer
+calmest
+calming
+calmingly
+calmly
+calmness
+calms
+caloric
+calorie
+calories
+calorimeter
+calorimetric
+calorimetry
+Caltech
+calumny
+Calvary
+calve
+Calvert
+calves
+Calvin
+Calvinist
+Calvinize
+Calvinizes
+calypso
+cam
+Cambodia
+Cambrian
+Cambridge
+Camden
+came
+camel
+Camelot
+camels
+Camembert
+camera
+cameraman
+cameramen
+cameras
+Cameron
+Cameroon
+Cameroun
+Camilla
+Camille
+Camino
+camouflage
+camouflaged
+camouflages
+camouflaging
+camp
+campaign
+campaigned
+campaigner
+campaigners
+campaigning
+campaigns
+Campbell
+Campbellsport
+camped
+camper
+campers
+campfire
+campground
+camping
+camps
+campsite
+campus
+campuses
+can
+Canaan
+Canada
+Canadian
+Canadianization
+Canadianizations
+Canadianize
+Canadianizes
+Canadians
+canal
+canals
+canaries
+canary
+Canaveral
+Canberra
+cancel
+canceled
+canceling
+cancellation
+cancellations
+cancels
+cancer
+cancerous
+cancers
+Candace
+candid
+candidacy
+candidate
+candidates
+Candide
+candidly
+candidness
+candied
+candies
+candle
+candlelight
+candler
+candles
+candlestick
+candlesticks
+Candlewick
+candor
+candy
+cane
+caner
+Canfield
+canine
+Canis
+canister
+canker
+cankerworm
+cannabis
+canned
+cannel
+canner
+canners
+cannery
+cannibal
+cannibalize
+cannibalized
+cannibalizes
+cannibalizing
+cannibals
+canning
+cannister
+cannisters
+cannon
+cannonball
+cannons
+cannot
+canny
+canoe
+canoes
+Canoga
+canon
+canonic
+canonical
+canonicalization
+canonicalize
+canonicalized
+canonicalizes
+canonicalizing
+canonically
+canonicals
+canons
+Canopus
+canopy
+cans
+cant
+Cantabrigian
+cantaloupe
+cantankerous
+cantankerously
+canteen
+Canterbury
+cantilever
+canto
+canton
+Cantonese
+cantons
+cantor
+cantors
+Canute
+canvas
+canvases
+canvass
+canvassed
+canvasser
+canvassers
+canvasses
+canvassing
+canyon
+canyons
+cap
+capabilities
+capability
+capable
+capably
+capacious
+capaciously
+capaciousness
+capacitance
+capacitances
+capacities
+capacitive
+capacitor
+capacitors
+capacity
+cape
+caper
+capers
+capes
+Capet
+Capetown
+capillary
+Capistrano
+capita
+capital
+capitalism
+capitalist
+capitalists
+capitalization
+capitalizations
+capitalize
+capitalized
+capitalizer
+capitalizers
+capitalizes
+capitalizing
+capitally
+capitals
+Capitan
+capitol
+Capitoline
+capitols
+capped
+capping
+Cappy
+caprice
+capricious
+capriciously
+capriciousness
+Capricorn
+caps
+Capsicum
+capstan
+capstone
+capsule
+captain
+captained
+captaining
+captains
+caption
+captions
+captivate
+captivated
+captivates
+captivating
+captivation
+captive
+captives
+captivity
+captor
+captors
+capture
+captured
+capturer
+capturers
+captures
+capturing
+Caputo
+capybara
+car
+Caracas
+caramel
+caravan
+caravans
+caraway
+carbohydrate
+carbolic
+Carboloy
+carbon
+carbonate
+carbonates
+carbonation
+Carbondale
+Carbone
+Carbones
+carbonic
+carbonization
+carbonize
+carbonized
+carbonizer
+carbonizers
+carbonizes
+carbonizing
+carbons
+carborundum
+carbuncle
+carcass
+carcasses
+carcinogen
+carcinogenic
+carcinoma
+card
+cardboard
+carder
+cardiac
+Cardiff
+cardinal
+cardinalities
+cardinality
+cardinally
+cardinals
+Cardiod
+cardiology
+cardiovascular
+cards
+care
+cared
+careen
+career
+careers
+carefree
+careful
+carefully
+carefulness
+careless
+carelessly
+carelessness
+cares
+caress
+caressed
+caresser
+caresses
+caressing
+caret
+caretaker
+Carey
+Cargill
+cargo
+cargoes
+Carib
+Caribbean
+caribou
+caricature
+caring
+Carl
+Carla
+Carleton
+Carletonian
+Carlin
+Carlisle
+Carlo
+carload
+Carlsbad
+Carlsbads
+Carlson
+Carlton
+Carlyle
+Carmela
+Carmen
+Carmichael
+carnage
+carnal
+carnation
+Carnegie
+carnival
+carnivals
+carnivorous
+carnivorously
+carol
+Carolina
+Carolinas
+Caroline
+Carolingian
+Carolinian
+Carolinians
+carols
+Carolyn
+carp
+Carpathia
+Carpathians
+carpenter
+carpenters
+carpentry
+carpet
+carpeted
+carpeting
+carpets
+carport
+Carr
+Carrara
+carriage
+carriages
+Carrie
+carried
+carrier
+carriers
+carries
+carrion
+Carroll
+carrot
+carrots
+Carruthers
+carry
+carrying
+carryover
+carryovers
+cars
+Carson
+cart
+carted
+cartel
+carter
+carters
+Cartesian
+Carthage
+Carthaginian
+cartilage
+carting
+cartographer
+cartographic
+cartography
+carton
+cartons
+cartoon
+cartoons
+cartridge
+cartridges
+carts
+cartwheel
+Carty
+Caruso
+carve
+carved
+carver
+carves
+carving
+carvings
+Casanova
+cascadable
+cascade
+cascaded
+cascades
+cascading
+case
+cased
+casement
+casements
+cases
+casework
+Casey
+cash
+cashed
+casher
+cashers
+cashes
+cashew
+cashier
+cashiers
+cashing
+cashmere
+casing
+casings
+casino
+cask
+casket
+caskets
+casks
+Caspian
+Cassandra
+casserole
+casseroles
+cassette
+Cassiopeia
+Cassite
+Cassites
+Cassius
+cassock
+cast
+caste
+caster
+casters
+castes
+castigate
+Castillo
+casting
+castle
+castled
+castles
+castor
+Castro
+Castroism
+casts
+casual
+casually
+casualness
+casuals
+casualties
+casualty
+cat
+cataclysmic
+Catalan
+Catalina
+catalog
+cataloged
+cataloger
+cataloging
+catalogs
+Catalonia
+catalyst
+catalysts
+catalytic
+catapult
+cataract
+catastrophe
+catastrophes
+catastrophic
+Catawba
+catch
+catchable
+catcher
+catchers
+catches
+catching
+categorical
+categorically
+categories
+categorization
+categorize
+categorized
+categorizer
+categorizers
+categorizes
+categorizing
+category
+cater
+catered
+caterer
+catering
+caterpillar
+caterpillars
+caters
+cathedral
+cathedrals
+Catherine
+Catherwood
+catheter
+catheters
+cathode
+cathodes
+Catholic
+Catholicism
+Catholicisms
+Catholics
+Cathy
+catlike
+catnip
+cats
+Catskill
+Catskills
+catsup
+cattail
+cattle
+cattleman
+cattlemen
+Caucasian
+Caucasians
+Caucasus
+Cauchy
+caucus
+caught
+cauldron
+cauldrons
+cauliflower
+caulk
+causal
+causality
+causally
+causation
+causations
+cause
+caused
+causer
+causes
+causeway
+causeways
+causing
+caustic
+causticly
+caustics
+caution
+cautioned
+cautioner
+cautioners
+cautioning
+cautionings
+cautions
+cautious
+cautiously
+cautiousness
+cavalier
+cavalierly
+cavalierness
+cavalry
+cave
+caveat
+caveats
+caved
+caveman
+cavemen
+Cavendish
+cavern
+cavernous
+caverns
+caves
+caviar
+cavil
+Caviness
+caving
+cavities
+cavity
+caw
+cawing
+Cayley
+Cayuga
+cease
+ceased
+ceaseless
+ceaselessly
+ceaselessness
+ceases
+ceasing
+Cecil
+Cecilia
+Cecropia
+cedar
+cede
+ceded
+ceding
+Cedric
+ceiling
+ceilings
+Celanese
+Celebes
+celebrate
+celebrated
+celebrates
+celebrating
+celebration
+celebrations
+celebrities
+celebrity
+celerity
+celery
+Celeste
+celestial
+celestially
+Celia
+cell
+cellar
+cellars
+celled
+cellist
+cellists
+cellophane
+cells
+cellular
+cellulose
+Celsius
+Celt
+Celtic
+Celticize
+Celticizes
+cement
+cemented
+cementing
+cements
+cemeteries
+cemetery
+Cenozoic
+censor
+censored
+censoring
+censors
+censorship
+censure
+censured
+censurer
+censures
+census
+censuses
+cent
+centaur
+centenary
+centennial
+center
+centered
+centering
+centerpiece
+centerpieces
+centers
+centigrade
+centimeter
+centimeters
+centipede
+centipedes
+central
+Centralia
+centralism
+centralist
+centralization
+centralize
+centralized
+centralizes
+centralizing
+centrally
+CENTREX
+Centrex
+centrifugal
+centrifuge
+centripetal
+centrist
+centroid
+cents
+centuries
+century
+Cepheus
+ceramic
+Cerberus
+cereal
+cereals
+cerebellum
+cerebral
+ceremonial
+ceremonially
+ceremonialness
+ceremonies
+ceremony
+Ceres
+CERN
+certain
+certainly
+certainties
+certainty
+certifiable
+certificate
+certificates
+certification
+certifications
+certified
+certifier
+certifiers
+certifies
+certify
+certifying
+Cervantes
+Cesare
+cessation
+cessations
+Cessna
+Cetus
+Ceylon
+Cezanne
+Cezannes
+Chablis
+Chablises
+Chad
+Chadwick
+chafe
+chafer
+chaff
+chaffer
+Chaffey
+chaffing
+chafing
+chagrin
+chain
+chained
+chaining
+chains
+chair
+chaired
+chairing
+chairlady
+chairman
+chairmen
+chairperson
+chairpersons
+chairs
+chairwoman
+chairwomen
+chalice
+chalices
+chalk
+chalked
+chalking
+chalks
+challenge
+challenged
+challenger
+challengers
+challenges
+challenging
+Chalmers
+chamber
+chambered
+chamberlain
+chamberlains
+chambermaid
+Chambers
+chameleon
+champagne
+Champaign
+champion
+championed
+championing
+champions
+championship
+championships
+Champlain
+chance
+chanced
+chancellor
+Chancellorsville
+chancery
+chances
+chancing
+chandelier
+chandeliers
+Chandigarh
+Chang
+change
+changeability
+changeable
+changeably
+changed
+changeover
+changer
+changers
+changes
+changing
+channel
+channeled
+channeling
+channelled
+channeller
+channellers
+channelling
+channels
+Channing
+chant
+chanted
+chanter
+chanticleer
+chanticleers
+Chantilly
+chanting
+chants
+Chao
+chaos
+chaotic
+chap
+chapel
+chapels
+chaperon
+chaperone
+chaperoned
+chaplain
+chaplains
+Chaplin
+Chapman
+chaps
+chapter
+chapters
+char
+character
+characteristic
+characteristically
+characteristics
+characterizable
+characterization
+characterizations
+characterize
+characterized
+characterizer
+characterizers
+characterizes
+characterizing
+characters
+charcoal
+charcoaled
+charge
+chargeable
+charged
+charger
+chargers
+charges
+charging
+chariot
+chariots
+charisma
+charismatic
+charitable
+charitableness
+charities
+charity
+Charlemagne
+Charlemagnes
+Charles
+Charleston
+Charley
+Charlie
+Charlotte
+Charlottesville
+charm
+charmed
+charmer
+charmers
+charming
+charmingly
+charms
+Charon
+chars
+chart
+Charta
+chartable
+charted
+charter
+chartered
+chartering
+charters
+charting
+chartings
+Chartres
+chartreuse
+charts
+Charybdis
+chase
+chased
+chaser
+chasers
+chases
+chasing
+chasm
+chasms
+chassis
+chaste
+chastely
+chasteness
+chastise
+chastised
+chastiser
+chastisers
+chastises
+chastising
+chastity
+chat
+chateau
+chateaus
+Chatham
+Chattahoochee
+Chattanooga
+chattel
+chatter
+chattered
+chatterer
+chattering
+chatters
+chatting
+chatty
+Chaucer
+chauffeur
+chauffeured
+Chauncey
+Chautauqua
+cheap
+cheapen
+cheapened
+cheapening
+cheapens
+cheaper
+cheapest
+cheaply
+cheapness
+cheat
+cheated
+cheater
+cheaters
+cheating
+cheats
+check
+checkable
+checkbook
+checkbooks
+checked
+checker
+checkerboard
+checkerboarded
+checkerboarding
+checkers
+checking
+checklist
+checkout
+checkpoint
+checkpoints
+checks
+checksum
+checksummed
+checksumming
+checksums
+checkup
+cheek
+cheekbone
+cheeks
+cheeky
+cheer
+cheered
+cheerer
+cheerful
+cheerfully
+cheerfulness
+cheerily
+cheeriness
+cheering
+cheerleader
+cheerless
+cheerlessly
+cheerlessness
+cheers
+cheery
+cheese
+cheesecloth
+cheeses
+cheesy
+cheetah
+chef
+chefs
+Chekhov
+Chelsea
+chemical
+chemically
+chemicals
+chemise
+chemist
+chemistries
+chemistry
+chemists
+Chen
+Cheney
+Cheng
+cherish
+cherished
+cherishes
+cherishing
+Cheriton
+Cherokee
+Cherokees
+cherries
+cherry
+cherub
+cherubim
+cherubs
+Cheryl
+Chesapeake
+Cheshire
+chess
+chest
+Chester
+Chesterfield
+Chesterton
+chestnut
+chestnuts
+chests
+Chevrolet
+Chevy
+chew
+chewed
+chewer
+chewers
+chewing
+chews
+Cheyenne
+Cheyennes
+Chiang
+chic
+Chicago
+Chicagoan
+Chicagoans
+Chicana
+Chicanas
+chicanery
+Chicano
+Chicanos
+chick
+chickadee
+chickadees
+Chickasaws
+chicken
+chickens
+chicks
+chide
+chided
+chides
+chiding
+chief
+chiefly
+chiefs
+chieftain
+chieftains
+chiffon
+child
+childbirth
+childhood
+childish
+childishly
+childishness
+childlike
+children
+Chile
+Chilean
+Chiles
+chili
+chill
+chilled
+chiller
+chillers
+chillier
+chilliness
+chilling
+chillingly
+chills
+chilly
+chime
+chimera
+chimes
+chimney
+chimneys
+chimpanzee
+chin
+China
+Chinaman
+Chinamen
+Chinas
+Chinatown
+Chinese
+Ching
+chink
+chinked
+chinks
+chinned
+chinner
+chinners
+chinning
+Chinook
+chins
+chintz
+chip
+chipmunk
+chipmunks
+Chippendale
+Chippewa
+chips
+chiropractor
+chirp
+chirped
+chirping
+chirps
+chisel
+chiseled
+chiseler
+chisels
+Chisholm
+chit
+chivalrous
+chivalrously
+chivalrousness
+chivalry
+Chloe
+chlorine
+chloroform
+chlorophyll
+chloroplast
+chloroplasts
+chock
+chocks
+chocolate
+chocolates
+Choctaw
+Choctaws
+choice
+choices
+choicest
+choir
+choirs
+choke
+choked
+choker
+chokers
+chokes
+choking
+cholera
+Chomsky
+choose
+chooser
+choosers
+chooses
+choosing
+chop
+Chopin
+chopped
+chopper
+choppers
+chopping
+choppy
+chops
+choral
+chord
+chordate
+chorded
+chording
+chords
+chore
+choreograph
+choreography
+chores
+choring
+chortle
+chorus
+chorused
+choruses
+chose
+chosen
+Chou
+chowder
+Chris
+Christ
+christen
+Christendom
+christened
+christening
+christens
+Christensen
+Christenson
+Christian
+Christiana
+Christianity
+Christianization
+Christianizations
+Christianize
+Christianizer
+Christianizers
+Christianizes
+Christianizing
+Christians
+Christiansen
+Christianson
+Christie
+Christina
+Christine
+Christlike
+Christmas
+Christoffel
+Christoph
+Christopher
+Christy
+chromatogram
+chromatograph
+chromatography
+chrome
+chromium
+chromosphere
+chronic
+chronicle
+chronicled
+chronicler
+chroniclers
+chronicles
+chronograph
+chronography
+chronological
+chronologically
+chronologies
+chronology
+chrysanthemum
+Chrysler
+chubbier
+chubbiest
+chubbiness
+chubby
+chuck
+chuckle
+chuckled
+chuckles
+chucks
+chum
+Chungking
+chunk
+chunks
+chunky
+church
+churches
+churchgoer
+churchgoing
+Churchill
+Churchillian
+churchly
+churchman
+churchmen
+churchwoman
+churchwomen
+churchyard
+churchyards
+churn
+churned
+churning
+churns
+chute
+chutes
+chutzpah
+cicada
+Cicero
+Ciceronian
+Ciceronianize
+Ciceronianizes
+cider
+cigar
+cigarette
+cigarettes
+cigars
+cilia
+Cincinnati
+cinder
+Cinderella
+cinders
+Cindy
+cinema
+cinematic
+Cinerama
+cinnamon
+cipher
+ciphers
+ciphertext
+ciphertexts
+circa
+Circe
+circle
+circled
+circles
+circlet
+circling
+circuit
+circuitous
+circuitously
+circuitry
+circuits
+circulant
+circular
+circularity
+circularly
+circulate
+circulated
+circulates
+circulating
+circulation
+circumcise
+circumcision
+circumference
+circumflex
+circumlocution
+circumlocutions
+circumnavigate
+circumnavigated
+circumnavigates
+circumpolar
+circumscribe
+circumscribed
+circumscribing
+circumscription
+circumspect
+circumspection
+circumspectly
+circumstance
+circumstanced
+circumstances
+circumstantial
+circumstantially
+circumvent
+circumventable
+circumvented
+circumventing
+circumvents
+circus
+circuses
+cistern
+cisterns
+citadel
+citadels
+citation
+citations
+cite
+cited
+cites
+cities
+citing
+citizen
+citizens
+citizenship
+Citroen
+citrus
+city
+cityscape
+citywide
+civet
+civic
+civics
+civil
+civilian
+civilians
+civility
+civilization
+civilizations
+civilize
+civilized
+civilizes
+civilizing
+civilly
+clad
+cladding
+claim
+claimable
+claimant
+claimants
+claimed
+claiming
+claims
+Claire
+clairvoyant
+clairvoyantly
+clam
+clamber
+clambered
+clambering
+clambers
+clamor
+clamored
+clamoring
+clamorous
+clamors
+clamp
+clamped
+clamping
+clamps
+clams
+clan
+clandestine
+clang
+clanged
+clanging
+clangs
+clank
+clannish
+clap
+clapboard
+Clapeyron
+clapping
+claps
+Clara
+Clare
+Claremont
+Clarence
+Clarendon
+clarification
+clarifications
+clarified
+clarifies
+clarify
+clarifying
+clarinet
+clarity
+Clark
+Clarke
+Clarridge
+clash
+clashed
+clashes
+clashing
+clasp
+clasped
+clasping
+clasps
+class
+classed
+classes
+classic
+classical
+classically
+classics
+classifiable
+classification
+classifications
+classified
+classifier
+classifiers
+classifies
+classify
+classifying
+classmate
+classmates
+classroom
+classrooms
+classy
+clatter
+clattered
+clattering
+Claude
+Claudia
+Claudio
+Claus
+clause
+Clausen
+clauses
+Clausius
+claustrophobia
+claustrophobic
+claw
+clawed
+clawing
+claws
+clay
+clays
+Clayton
+clean
+cleaned
+cleaner
+cleaners
+cleanest
+cleaning
+cleanliness
+cleanly
+cleanness
+cleans
+cleanse
+cleansed
+cleanser
+cleansers
+cleanses
+cleansing
+cleanup
+clear
+clearance
+clearances
+cleared
+clearer
+clearest
+clearing
+clearings
+clearly
+clearness
+clears
+Clearwater
+cleavage
+cleave
+cleaved
+cleaver
+cleavers
+cleaves
+cleaving
+cleft
+clefts
+clemency
+Clemens
+clement
+Clemente
+Clemson
+clench
+clenched
+clenches
+clergy
+clergyman
+clergymen
+clerical
+clerk
+clerked
+clerking
+clerks
+Cleveland
+clever
+cleverer
+cleverest
+cleverly
+cleverness
+cliche
+cliches
+click
+clicked
+clicking
+clicks
+client
+clientele
+clients
+cliff
+Clifford
+cliffs
+Clifton
+climate
+climates
+climatic
+climatically
+climatology
+climax
+climaxed
+climaxes
+climb
+climbed
+climber
+climbers
+climbing
+climbs
+clime
+climes
+clinch
+clinched
+clincher
+clinches
+cling
+clinging
+clings
+clinic
+clinical
+clinically
+clinician
+clinics
+clink
+clinked
+clinker
+Clint
+Clinton
+Clio
+clip
+clipboard
+clipped
+clipper
+clippers
+clipping
+clippings
+clips
+clique
+cliques
+clitoris
+Clive
+cloak
+cloakroom
+cloaks
+clobber
+clobbered
+clobbering
+clobbers
+clock
+clocked
+clocker
+clockers
+clocking
+clockings
+clocks
+clockwatcher
+clockwise
+clockwork
+clod
+clods
+clog
+clogged
+clogging
+clogs
+cloister
+cloisters
+clone
+cloned
+clones
+cloning
+close
+closed
+closely
+closeness
+closenesses
+closer
+closers
+closes
+closest
+closet
+closeted
+closets
+closeup
+closing
+closure
+closures
+clot
+cloth
+clothe
+clothed
+clothes
+clotheshorse
+clothesline
+clothing
+Clotho
+clotting
+cloture
+cloud
+cloudburst
+clouded
+cloudier
+cloudiest
+cloudiness
+clouding
+cloudless
+clouds
+cloudy
+clout
+clove
+clover
+cloves
+clown
+clowning
+clowns
+club
+clubbed
+clubbing
+clubhouse
+clubroom
+clubs
+cluck
+clucked
+clucking
+clucks
+clue
+clues
+Cluj
+clump
+clumped
+clumping
+clumps
+clumsily
+clumsiness
+clumsy
+clung
+cluster
+clustered
+clustering
+clusterings
+clusters
+clutch
+clutched
+clutches
+clutching
+clutter
+cluttered
+cluttering
+clutters
+Clyde
+Clytemnestra
+coach
+coached
+coacher
+coaches
+coaching
+coachman
+coachmen
+coagulate
+coal
+coalesce
+coalesced
+coalesces
+coalescing
+coalition
+coals
+coarse
+coarsely
+coarsen
+coarsened
+coarseness
+coarser
+coarsest
+coast
+coastal
+coasted
+coaster
+coasters
+coasting
+coastline
+coasts
+coat
+coated
+Coates
+coating
+coatings
+coats
+coattail
+coauthor
+coax
+coaxed
+coaxer
+coaxes
+coaxial
+coaxing
+cobalt
+Cobb
+cobble
+cobbler
+cobblers
+cobblestone
+COBOL
+Cobol
+cobra
+cobweb
+cobwebs
+coca
+cocaine
+Cochise
+Cochran
+Cochrane
+cock
+cocked
+cocking
+cockpit
+cockroach
+cocks
+cocktail
+cocktails
+cocky
+coco
+cocoa
+coconut
+coconuts
+cocoon
+cocoons
+cod
+Coddington
+coddle
+code
+coded
+codeine
+coder
+coders
+codes
+codeword
+codewords
+codfish
+codicil
+codification
+codifications
+codified
+codifier
+codifiers
+codifies
+codify
+codifying
+coding
+codings
+codpiece
+Cody
+coed
+coeditor
+coeducation
+coefficient
+coefficients
+coequal
+coerce
+coerced
+coerces
+coercible
+coercing
+coercion
+coercive
+coexist
+coexisted
+coexistence
+coexisting
+coexists
+cofactor
+coffee
+coffeecup
+coffeepot
+coffees
+coffer
+coffers
+Coffey
+coffin
+coffins
+Coffman
+cog
+cogent
+cogently
+cogitate
+cogitated
+cogitates
+cogitating
+cogitation
+cognac
+cognition
+cognitive
+cognitively
+cognizance
+cognizant
+cogs
+cohabitation
+cohabitations
+Cohen
+cohere
+cohered
+coherence
+coherent
+coherently
+coheres
+cohering
+cohesion
+cohesive
+cohesively
+cohesiveness
+Cohn
+cohort
+coil
+coiled
+coiling
+coils
+coin
+coinage
+coincide
+coincided
+coincidence
+coincidences
+coincident
+coincidental
+coincides
+coinciding
+coined
+coiner
+coining
+coins
+coke
+cokes
+colander
+Colby
+cold
+colder
+coldest
+coldly
+coldness
+colds
+Cole
+Coleman
+Coleridge
+Colette
+Colgate
+colicky
+coliform
+coliseum
+collaborate
+collaborated
+collaborates
+collaborating
+collaboration
+collaborations
+collaborative
+collaborator
+collaborators
+collagen
+collapse
+collapsed
+collapses
+collapsible
+collapsing
+collar
+collarbone
+collared
+collaring
+collars
+collate
+collateral
+colleague
+colleagues
+collect
+collected
+collectible
+collecting
+collection
+collections
+collective
+collectively
+collectives
+collector
+collectors
+collects
+college
+colleges
+collegian
+collegiate
+collide
+collided
+collides
+colliding
+collie
+Collier
+collies
+Collins
+collision
+collisions
+colloidal
+colloquia
+colloquial
+colloquium
+colloquy
+collusion
+Cologne
+Colombia
+Colombian
+Colombians
+Colombo
+colon
+colonel
+colonels
+colonial
+colonially
+colonials
+colonies
+colonist
+colonists
+colonization
+colonize
+colonized
+colonizer
+colonizers
+colonizes
+colonizing
+colons
+colony
+color
+Colorado
+colored
+colorer
+colorers
+colorful
+coloring
+colorings
+colorless
+colors
+colossal
+Colosseum
+colt
+colts
+Columbia
+Columbian
+Columbus
+column
+columnize
+columnized
+columnizes
+columnizing
+columns
+Comanche
+comb
+combat
+combatant
+combatants
+combated
+combating
+combative
+combats
+combed
+comber
+combers
+combination
+combinational
+combinations
+combinator
+combinatorial
+combinatorially
+combinatoric
+combinatorics
+combinators
+combine
+combined
+combines
+combing
+combings
+combining
+combs
+combustible
+combustion
+Comdex
+come
+comeback
+comedian
+comedians
+comedic
+comedies
+comedy
+comeliness
+comely
+comer
+comers
+comes
+comestible
+comet
+cometary
+comets
+comfort
+comfortabilities
+comfortability
+comfortable
+comfortably
+comforted
+comforter
+comforters
+comforting
+comfortingly
+comforts
+comic
+comical
+comically
+comics
+Cominform
+coming
+comings
+comma
+command
+commandant
+commandants
+commanded
+commandeer
+commander
+commanders
+commanding
+commandingly
+commandment
+commandments
+commando
+commands
+commas
+commemorate
+commemorated
+commemorates
+commemorating
+commemoration
+commemorative
+commence
+commenced
+commencement
+commencements
+commences
+commencing
+commend
+commendation
+commendations
+commended
+commending
+commends
+commensurate
+comment
+commentaries
+commentary
+commentator
+commentators
+commented
+commenting
+comments
+commerce
+commercial
+commercially
+commercialness
+commercials
+commission
+commissioned
+commissioner
+commissioners
+commissioning
+commissions
+commit
+commitment
+commitments
+commits
+committed
+committee
+committeeman
+committeemen
+committees
+committeewoman
+committeewomen
+committing
+commodities
+commodity
+commodore
+commodores
+common
+commonalities
+commonality
+commoner
+commoners
+commonest
+commonly
+commonness
+commonplace
+commonplaces
+commons
+commonwealth
+commonwealths
+commotion
+communal
+communally
+commune
+communes
+communicant
+communicants
+communicate
+communicated
+communicates
+communicating
+communication
+communications
+communicative
+communicator
+communicators
+communion
+communist
+communists
+communities
+community
+commutative
+commutativity
+commute
+commuted
+commuter
+commuters
+commutes
+commuting
+compact
+compacted
+compacter
+compactest
+compacting
+compaction
+compactly
+compactness
+compactor
+compactors
+compacts
+companies
+companion
+companionable
+companions
+companionship
+company
+comparability
+comparable
+comparably
+comparative
+comparatively
+comparatives
+comparator
+comparators
+compare
+compared
+compares
+comparing
+comparison
+comparisons
+compartment
+compartmentalize
+compartmentalized
+compartmentalizes
+compartmentalizing
+compartmented
+compartments
+compass
+compassion
+compassionate
+compassionately
+compatibilities
+compatibility
+compatible
+compatibles
+compatibly
+compel
+compelled
+compelling
+compellingly
+compels
+compendium
+compensate
+compensated
+compensates
+compensating
+compensation
+compensations
+compensatory
+compete
+competed
+competence
+competency
+competent
+competently
+competes
+competing
+competition
+competitions
+competitive
+competitively
+competitor
+competitors
+compilation
+compilations
+compile
+compiled
+compiler
+compilers
+compiles
+compiling
+complacency
+complain
+complained
+complainer
+complainers
+complaining
+complains
+complaint
+complaints
+complement
+complementary
+complemented
+complementer
+complementers
+complementing
+complements
+complete
+completed
+completely
+completeness
+completes
+completing
+completion
+completions
+complex
+complexes
+complexion
+complexities
+complexity
+complexly
+compliance
+compliant
+complicate
+complicated
+complicates
+complicating
+complication
+complications
+complicator
+complicators
+complicity
+complied
+compliment
+complimentary
+complimented
+complimenter
+complimenters
+complimenting
+compliments
+comply
+complying
+component
+componentry
+components
+componentwise
+compose
+composed
+composedly
+composer
+composers
+composes
+composing
+composite
+composites
+composition
+compositional
+compositions
+compost
+composure
+compound
+compounded
+compounding
+compounds
+comprehend
+comprehended
+comprehending
+comprehends
+comprehensibility
+comprehensible
+comprehension
+comprehensive
+comprehensively
+compress
+compressed
+compresses
+compressible
+compressing
+compression
+compressive
+compressor
+comprise
+comprised
+comprises
+comprising
+compromise
+compromised
+compromiser
+compromisers
+compromises
+compromising
+compromisingly
+Compton
+comptroller
+comptrollers
+compulsion
+compulsions
+compulsive
+compulsory
+compunction
+Compuserve
+computability
+computable
+computation
+computational
+computationally
+computations
+compute
+computed
+computer
+computerize
+computerized
+computerizes
+computerizing
+computers
+computes
+computing
+comrade
+comradely
+comrades
+comradeship
+con
+Conakry
+Conant
+concatenate
+concatenated
+concatenates
+concatenating
+concatenation
+concatenations
+concave
+conceal
+concealed
+concealer
+concealers
+concealing
+concealment
+conceals
+concede
+conceded
+concedes
+conceding
+conceit
+conceited
+conceits
+conceivable
+conceivably
+conceive
+conceived
+conceives
+conceiving
+concentrate
+concentrated
+concentrates
+concentrating
+concentration
+concentrations
+concentrator
+concentrators
+concentric
+concept
+conception
+conceptions
+concepts
+conceptual
+conceptualization
+conceptualizations
+conceptualize
+conceptualized
+conceptualizes
+conceptualizing
+conceptually
+concern
+concerned
+concernedly
+concerning
+concerns
+concert
+concerted
+concertmaster
+concerto
+concerts
+concession
+concessions
+conciliate
+conciliatory
+concise
+concisely
+conciseness
+conclave
+conclude
+concluded
+concludes
+concluding
+conclusion
+conclusions
+conclusive
+conclusively
+concoct
+concomitant
+concord
+concordant
+Concorde
+Concordia
+concourse
+concrete
+concretely
+concreteness
+concretes
+concretion
+concubine
+concur
+concurred
+concurrence
+concurrencies
+concurrency
+concurrent
+concurrently
+concurring
+concurs
+concussion
+condemn
+condemnation
+condemnations
+condemned
+condemner
+condemners
+condemning
+condemns
+condensation
+condense
+condensed
+condenser
+condenses
+condensing
+condescend
+condescending
+condition
+conditional
+conditionally
+conditionals
+conditioned
+conditioner
+conditioners
+conditioning
+conditions
+condom
+condone
+condoned
+condones
+condoning
+conduce
+conducive
+conduciveness
+conduct
+conductance
+conducted
+conducting
+conduction
+conductive
+conductivity
+conductor
+conductors
+conducts
+conduit
+cone
+cones
+Conestoga
+confectionery
+confederacy
+confederate
+confederates
+confederation
+confederations
+confer
+conferee
+conference
+conferences
+conferred
+conferrer
+conferrers
+conferring
+confers
+confess
+confessed
+confesses
+confessing
+confession
+confessions
+confessor
+confessors
+confidant
+confidants
+confide
+confided
+confidence
+confidences
+confident
+confidential
+confidentiality
+confidentially
+confidently
+confides
+confiding
+confidingly
+configurable
+configuration
+configurations
+configure
+configured
+configures
+configuring
+confine
+confined
+confinement
+confinements
+confiner
+confines
+confining
+confirm
+confirmation
+confirmations
+confirmatory
+confirmed
+confirming
+confirms
+confiscate
+confiscated
+confiscates
+confiscating
+confiscation
+confiscations
+conflagration
+conflict
+conflicted
+conflicting
+conflicts
+confluent
+confocal
+conform
+conformal
+conformance
+conformed
+conforming
+conformity
+conforms
+confound
+confounded
+confounding
+confounds
+confront
+confrontation
+confrontations
+confronted
+confronter
+confronters
+confronting
+confronts
+Confucian
+Confucianism
+Confucius
+confuse
+confused
+confuser
+confusers
+confuses
+confusing
+confusingly
+confusion
+confusions
+congenial
+congenially
+congenital
+congest
+congested
+congestion
+congestive
+conglomerate
+Congo
+Congolese
+congratulate
+congratulated
+congratulation
+congratulations
+congratulatory
+congregate
+congregated
+congregates
+congregating
+congregation
+congregations
+congress
+congresses
+congressional
+congressionally
+congressman
+congressmen
+congresswoman
+congresswomen
+congruence
+congruent
+conic
+conifer
+coniferous
+conjecture
+conjectured
+conjectures
+conjecturing
+conjoined
+conjugal
+conjugate
+conjunct
+conjuncted
+conjunction
+conjunctions
+conjunctive
+conjunctively
+conjuncts
+conjuncture
+conjure
+conjured
+conjurer
+conjures
+conjuring
+Conklin
+Conley
+Connally
+connect
+connected
+connectedness
+Connecticut
+connecting
+connection
+connectionless
+connections
+connective
+connectives
+connectivity
+connector
+connectors
+connects
+Connelly
+Conner
+Connie
+connivance
+connive
+connoisseur
+connoisseurs
+Connors
+connotation
+connotative
+connote
+connoted
+connotes
+connoting
+connubial
+conquer
+conquerable
+conquered
+conquerer
+conquerers
+conquering
+conqueror
+conquerors
+conquers
+conquest
+conquests
+Conrad
+Conrail
+conscience
+consciences
+conscientious
+conscientiously
+conscious
+consciously
+consciousness
+conscript
+conscription
+consecrate
+consecration
+consecutive
+consecutively
+consensual
+consensus
+consent
+consented
+consenter
+consenters
+consenting
+consents
+consequence
+consequences
+consequent
+consequential
+consequentialities
+consequentiality
+consequently
+consequents
+conservation
+conservationist
+conservationists
+conservations
+conservatism
+conservative
+conservatively
+conservatives
+conservator
+conserve
+conserved
+conserves
+conserving
+consider
+considerable
+considerably
+considerate
+considerately
+consideration
+considerations
+considered
+considering
+considers
+consign
+consigned
+consigning
+consigns
+consist
+consisted
+consistency
+consistent
+consistently
+consisting
+consists
+consolable
+consolation
+consolations
+console
+consoled
+consoler
+consolers
+consoles
+consolidate
+consolidated
+consolidates
+consolidating
+consolidation
+consoling
+consolingly
+consonant
+consonants
+consort
+consorted
+consorting
+consortium
+consorts
+conspicuous
+conspicuously
+conspiracies
+conspiracy
+conspirator
+conspirators
+conspire
+conspired
+conspires
+conspiring
+constable
+constables
+Constance
+constancy
+constant
+Constantine
+Constantinople
+constantly
+constants
+constellation
+constellations
+consternation
+constituencies
+constituency
+constituent
+constituents
+constitute
+constituted
+constitutes
+constituting
+constitution
+constitutional
+constitutionality
+constitutionally
+constitutions
+constitutive
+constrain
+constrained
+constraining
+constrains
+constraint
+constraints
+constrict
+construct
+constructed
+constructibility
+constructible
+constructing
+construction
+constructions
+constructive
+constructively
+constructor
+constructors
+constructs
+construe
+construed
+construing
+consul
+consular
+consulate
+consulates
+consuls
+consult
+consultant
+consultants
+consultation
+consultations
+consultative
+consulted
+consulting
+consults
+consumable
+consume
+consumed
+consumer
+consumers
+consumes
+consuming
+consummate
+consummated
+consummately
+consummation
+consumption
+consumptions
+consumptive
+consumptively
+contact
+contacted
+contacting
+contacts
+contagion
+contagious
+contagiously
+contain
+containable
+contained
+container
+containers
+containing
+containment
+containments
+contains
+contaminate
+contaminated
+contaminates
+contaminating
+contamination
+contemplate
+contemplated
+contemplates
+contemplating
+contemplation
+contemplations
+contemplative
+contemporaries
+contemporariness
+contemporary
+contempt
+contemptible
+contemptuous
+contemptuously
+contend
+contended
+contender
+contenders
+contending
+contends
+content
+contented
+contenting
+contention
+contentions
+contently
+contentment
+contents
+contest
+contestable
+contestant
+contested
+contester
+contesters
+contesting
+contests
+context
+contexts
+contextual
+contextually
+contiguity
+contiguous
+contiguously
+continent
+continental
+continentally
+continents
+contingencies
+contingency
+contingent
+contingents
+continual
+continually
+continuance
+continuances
+continuation
+continuations
+continue
+continued
+continues
+continuing
+continuities
+continuity
+continuous
+continuously
+continuum
+contortions
+contour
+contoured
+contouring
+contours
+contraband
+contraception
+contraceptive
+contract
+contracted
+contracting
+contraction
+contractions
+contractor
+contractors
+contracts
+contractual
+contractually
+contradict
+contradicted
+contradicting
+contradiction
+contradictions
+contradictory
+contradicts
+contradistinction
+contradistinctions
+contrapositive
+contrapositives
+contraption
+contraptions
+contrariness
+contrary
+contrast
+contrasted
+contraster
+contrasters
+contrasting
+contrastingly
+contrasts
+contribute
+contributed
+contributes
+contributing
+contribution
+contributions
+contributor
+contributorily
+contributors
+contributory
+contrite
+contrition
+contrivance
+contrivances
+contrive
+contrived
+contriver
+contrives
+contriving
+control
+controllability
+controllable
+controllably
+controlled
+controller
+controllers
+controlling
+controls
+controversial
+controversies
+controversy
+controvertible
+contumacious
+contumacy
+conundrum
+conundrums
+Convair
+convalescent
+convect
+convene
+convened
+convenes
+convenience
+conveniences
+convenient
+conveniently
+convening
+convent
+convention
+conventional
+conventionally
+conventions
+convents
+converge
+converged
+convergence
+convergent
+converges
+converging
+conversant
+conversantly
+conversation
+conversational
+conversationally
+conversations
+converse
+conversed
+conversely
+converses
+conversing
+conversion
+conversions
+convert
+converted
+converter
+converters
+convertibility
+convertible
+converting
+converts
+convex
+convey
+conveyance
+conveyances
+conveyed
+conveyer
+conveyers
+conveying
+conveyor
+conveys
+convict
+convicted
+convicting
+conviction
+convictions
+convicts
+convince
+convinced
+convincer
+convincers
+convinces
+convincing
+convincingly
+convivial
+convoke
+convoluted
+convolution
+convoy
+convoyed
+convoying
+convoys
+convulse
+convulsion
+convulsions
+Conway
+coo
+cooing
+cook
+cookbook
+Cooke
+cooked
+cookery
+cookie
+cookies
+cooking
+cooks
+cooky
+cool
+cooled
+cooler
+coolers
+coolest
+Cooley
+Coolidge
+coolie
+coolies
+cooling
+coolly
+coolness
+cools
+coon
+coons
+coop
+cooped
+cooper
+cooperate
+cooperated
+cooperates
+cooperating
+cooperation
+cooperations
+cooperative
+cooperatively
+cooperatives
+cooperator
+cooperators
+coopers
+coops
+coordinate
+coordinated
+coordinates
+coordinating
+coordination
+coordinations
+coordinator
+coordinators
+Coors
+cop
+cope
+coped
+Copeland
+Copenhagen
+Copernican
+Copernicus
+copes
+copied
+copier
+copiers
+copies
+coping
+copings
+copious
+copiously
+copiousness
+coplanar
+copper
+Copperfield
+copperhead
+coppers
+copra
+coprocessor
+cops
+copse
+copy
+copying
+copyright
+copyrightable
+copyrighted
+copyrights
+copywriter
+coquette
+coral
+Corbett
+Corcoran
+cord
+corded
+corder
+cordial
+cordiality
+cordially
+cords
+core
+cored
+corer
+corers
+cores
+Corey
+coriander
+coring
+Corinth
+Corinthian
+Corinthianize
+Corinthianizes
+Corinthians
+Coriolanus
+cork
+corked
+corker
+corkers
+corking
+corks
+corkscrew
+cormorant
+corn
+cornea
+Cornelia
+Cornelian
+Cornelius
+Cornell
+corner
+cornered
+corners
+cornerstone
+cornerstones
+cornet
+cornfield
+cornfields
+corning
+Cornish
+cornmeal
+corns
+cornstarch
+cornucopia
+Cornwall
+Cornwallis
+corny
+corollaries
+corollary
+Coronado
+coronaries
+coronary
+coronation
+coroner
+coronet
+coronets
+coroutine
+coroutines
+corporal
+corporals
+corporate
+corporately
+corporation
+corporations
+corps
+corpse
+corpses
+corpulent
+corpus
+corpuscular
+corral
+correct
+correctable
+corrected
+correcting
+correction
+corrections
+corrective
+correctively
+correctives
+correctly
+correctness
+corrector
+corrects
+correlate
+correlated
+correlates
+correlating
+correlation
+correlations
+correlative
+correspond
+corresponded
+correspondence
+correspondences
+correspondent
+correspondents
+corresponding
+correspondingly
+corresponds
+corridor
+corridors
+corrigenda
+corrigendum
+corrigible
+corroborate
+corroborated
+corroborates
+corroborating
+corroboration
+corroborations
+corroborative
+corrode
+corrosion
+corrosive
+corrugate
+corrupt
+corrupted
+corrupter
+corruptible
+corrupting
+corruption
+corruptions
+corrupts
+corset
+Corsica
+Corsican
+cortex
+Cortez
+cortical
+Cortland
+Corvallis
+Corvus
+Corydoras
+Cosgrove
+cosine
+cosines
+cosmetic
+cosmetics
+cosmic
+cosmology
+cosmopolitan
+cosmos
+cosponsor
+Cossack
+cost
+Costa
+costed
+Costello
+costing
+costly
+costs
+costume
+costumed
+costumer
+costumes
+costuming
+cosy
+cot
+cotangent
+cotillion
+cots
+cottage
+cottager
+cottages
+cotton
+cottonmouth
+cottons
+cottonseed
+cottonwood
+Cottrell
+cotyledon
+cotyledons
+couch
+couched
+couches
+couching
+cougar
+cough
+coughed
+coughing
+coughs
+could
+coulomb
+Coulter
+council
+councillor
+councillors
+councilman
+councilmen
+councils
+councilwoman
+councilwomen
+counsel
+counseled
+counseling
+counselled
+counselling
+counsellor
+counsellors
+counselor
+counselors
+counsels
+count
+countable
+countably
+counted
+countenance
+counter
+counteract
+counteracted
+counteracting
+counteractive
+counterargument
+counterattack
+counterbalance
+counterclockwise
+countered
+counterexample
+counterexamples
+counterfeit
+counterfeited
+counterfeiter
+counterfeiting
+counterflow
+countering
+counterintuitive
+counterman
+countermeasure
+countermeasures
+countermen
+counterpart
+counterparts
+counterpoint
+counterpointing
+counterpoise
+counterproductive
+counterproposal
+counterrevolution
+counters
+countersink
+countersunk
+countess
+counties
+counting
+countless
+countries
+country
+countryman
+countrymen
+countryside
+countrywide
+counts
+county
+countywide
+couple
+coupled
+coupler
+couplers
+couples
+coupling
+couplings
+coupon
+coupons
+courage
+courageous
+courageously
+courier
+couriers
+course
+coursed
+courser
+courses
+coursing
+court
+courted
+courteous
+courteously
+courter
+courters
+courtesan
+courtesies
+courtesy
+courthouse
+courthouses
+courtier
+courtiers
+courting
+courtly
+Courtney
+courtroom
+courtrooms
+courts
+courtship
+courtyard
+courtyards
+cousin
+cousins
+covalent
+covariant
+cove
+covenant
+covenants
+Covent
+Coventry
+cover
+coverable
+coverage
+covered
+covering
+coverings
+coverlet
+coverlets
+covers
+covert
+covertly
+coves
+covet
+coveted
+coveting
+covetous
+covetousness
+covets
+cow
+Cowan
+coward
+cowardice
+cowardly
+cowboy
+cowboys
+cowed
+cower
+cowered
+cowerer
+cowerers
+cowering
+coweringly
+cowers
+cowherd
+cowhide
+cowing
+cowl
+cowlick
+cowling
+cowls
+coworker
+cows
+cowslip
+cowslips
+coyote
+coyotes
+coypu
+cozier
+coziness
+cozy
+crab
+crabapple
+crabs
+crack
+cracked
+cracker
+crackers
+cracking
+crackle
+crackled
+crackles
+crackling
+crackpot
+cracks
+cradle
+cradled
+cradles
+craft
+crafted
+crafter
+craftiness
+crafting
+crafts
+craftsman
+craftsmen
+craftspeople
+craftsperson
+crafty
+crag
+craggy
+crags
+Craig
+cram
+Cramer
+cramming
+cramp
+cramps
+crams
+cranberries
+cranberry
+Crandall
+crane
+cranes
+Cranford
+crania
+cranium
+crank
+crankcase
+cranked
+crankier
+crankiest
+crankily
+cranking
+cranks
+crankshaft
+cranky
+cranny
+Cranston
+crash
+crashed
+crasher
+crashers
+crashes
+crashing
+crass
+crate
+crater
+craters
+crates
+cravat
+cravats
+crave
+craved
+craven
+craves
+craving
+Crawford
+crawl
+crawled
+crawler
+crawlers
+crawling
+crawls
+Cray
+crayon
+Crays
+craze
+crazed
+crazes
+crazier
+craziest
+crazily
+craziness
+crazing
+crazy
+creak
+creaked
+creaking
+creaks
+creaky
+cream
+creamed
+creamer
+creamers
+creamery
+creaming
+creams
+creamy
+crease
+creased
+creases
+creasing
+create
+created
+creates
+creating
+creation
+creations
+creative
+creatively
+creativeness
+creativity
+creator
+creators
+creature
+creatures
+credence
+credential
+credibility
+credible
+credibly
+credit
+creditable
+creditably
+credited
+crediting
+creditor
+creditors
+credits
+credulity
+credulous
+credulousness
+Cree
+creed
+creeds
+creek
+creeks
+creep
+creeper
+creepers
+creeping
+creeps
+creepy
+Creighton
+cremate
+cremated
+cremates
+cremating
+cremation
+cremations
+crematory
+Creole
+Creon
+crepe
+crept
+crescent
+crescents
+crest
+crested
+crestfallen
+crests
+Crestview
+Cretaceous
+Cretaceously
+Cretan
+Crete
+cretin
+crevice
+crevices
+crew
+crewcut
+crewed
+crewing
+crews
+crib
+cribs
+cricket
+crickets
+cried
+crier
+criers
+cries
+crime
+Crimea
+Crimean
+crimes
+criminal
+criminally
+criminals
+criminate
+crimson
+crimsoning
+cringe
+cringed
+cringes
+cringing
+cripple
+crippled
+cripples
+crippling
+crises
+crisis
+crisp
+Crispin
+crisply
+crispness
+crisscross
+criteria
+criterion
+critic
+critical
+critically
+criticism
+criticisms
+criticize
+criticized
+criticizes
+criticizing
+critics
+critique
+critiques
+critiquing
+critter
+croak
+croaked
+croaking
+croaks
+Croatia
+Croatian
+crochet
+crochets
+crock
+crockery
+Crockett
+crocks
+crocodile
+crocus
+croft
+Croix
+Cromwell
+Cromwellian
+crook
+crooked
+crooks
+crop
+cropped
+cropper
+croppers
+cropping
+crops
+Crosby
+cross
+crossable
+crossbar
+crossbars
+crossed
+crosser
+crossers
+crosses
+crossing
+crossings
+crossly
+crossover
+crossovers
+crosspoint
+crossroad
+crosstalk
+crosswalk
+crossword
+crosswords
+crotch
+crotchety
+crouch
+crouched
+crouching
+crow
+crowd
+crowded
+crowder
+crowding
+crowds
+crowed
+crowing
+Crowley
+crown
+crowned
+crowning
+crowns
+crows
+Croydon
+crucial
+crucially
+crucible
+crucified
+crucifies
+crucifix
+crucifixion
+crucify
+crucifying
+crud
+cruddy
+crude
+crudely
+crudeness
+cruder
+crudest
+cruel
+crueler
+cruelest
+cruelly
+cruelty
+Cruickshank
+cruise
+cruiser
+cruisers
+cruises
+cruising
+crumb
+crumble
+crumbled
+crumbles
+crumbling
+crumbly
+crumbs
+crummy
+crumple
+crumpled
+crumples
+crumpling
+crunch
+crunched
+crunches
+crunchier
+crunchiest
+crunching
+crunchy
+crusade
+crusader
+crusaders
+crusades
+crusading
+crush
+crushable
+crushed
+crusher
+crushers
+crushes
+crushing
+crushingly
+Crusoe
+crust
+crustacean
+crustaceans
+crusts
+crutch
+crutches
+crux
+cruxes
+Cruz
+cry
+crying
+cryogenic
+crypt
+cryptanalysis
+cryptanalyst
+cryptanalytic
+cryptic
+cryptogram
+cryptographer
+cryptographic
+cryptographically
+cryptography
+cryptologist
+cryptology
+crystal
+crystalline
+crystallize
+crystallized
+crystallizes
+crystallizing
+crystals
+cub
+Cuba
+Cuban
+Cubanize
+Cubanizes
+Cubans
+cubbyhole
+cube
+cubed
+cubes
+cubic
+cubs
+cuckoo
+cuckoos
+cucumber
+cucumbers
+cuddle
+cuddled
+cuddly
+cudgel
+cudgels
+cue
+cued
+cues
+cuff
+cufflink
+cuffs
+cuisine
+Culbertson
+culinary
+cull
+culled
+culler
+culling
+culls
+culminate
+culminated
+culminates
+culminating
+culmination
+culpa
+culpable
+culprit
+culprits
+cult
+cultivable
+cultivate
+cultivated
+cultivates
+cultivating
+cultivation
+cultivations
+cultivator
+cultivators
+cults
+cultural
+culturally
+culture
+cultured
+cultures
+culturing
+Culver
+Culvers
+Cumberland
+cumbersome
+Cummings
+Cummins
+cumulative
+cumulatively
+Cunard
+cunnilingus
+cunning
+Cunningham
+cunningly
+cup
+cupboard
+cupboards
+Cupertino
+cupful
+Cupid
+cupped
+cupping
+cups
+curable
+curably
+curb
+curbing
+curbs
+curd
+curdle
+cure
+cured
+cures
+curfew
+curfews
+curing
+curiosities
+curiosity
+curious
+curiouser
+curiousest
+curiously
+curl
+curled
+curler
+curlers
+curlicue
+curling
+curls
+curly
+Curran
+currant
+currants
+currencies
+currency
+current
+currently
+currentness
+currents
+curricular
+curriculum
+curriculums
+curried
+curries
+curry
+currying
+curs
+curse
+cursed
+curses
+cursing
+cursive
+cursor
+cursorily
+cursors
+cursory
+curt
+curtail
+curtailed
+curtails
+curtain
+curtained
+curtains
+curtate
+Curtis
+curtly
+curtness
+curtsies
+curtsy
+curvaceous
+curvature
+curve
+curved
+curves
+curvilinear
+curving
+Cushing
+cushion
+cushioned
+cushioning
+cushions
+Cushman
+cusp
+cusps
+custard
+Custer
+custodial
+custodian
+custodians
+custody
+custom
+customarily
+customary
+customer
+customers
+customizable
+customization
+customizations
+customize
+customized
+customizer
+customizers
+customizes
+customizing
+customs
+cut
+cutaneous
+cutback
+cute
+cutest
+cutlass
+cutlet
+cutoff
+cutout
+cutover
+cuts
+cutter
+cutters
+cutthroat
+cutting
+cuttingly
+cuttings
+cuttlefish
+Cuvier
+Cuzco
+Cyanamid
+cyanide
+cybernetic
+cybernetics
+cyberspace
+Cyclades
+cycle
+cycled
+cycles
+cyclic
+cyclically
+cycling
+cycloid
+cycloidal
+cycloids
+cyclone
+cyclones
+Cyclops
+cyclotron
+cyclotrons
+Cygnus
+cylinder
+cylinders
+cylindrical
+cymbal
+cymbals
+cynic
+cynical
+cynically
+Cynthia
+cypress
+Cyprian
+Cypriot
+Cyprus
+Cyril
+Cyrillic
+Cyrus
+cyst
+cysts
+cytology
+cytoplasm
+czar
+Czech
+Czechization
+Czechizations
+Czechoslovakia
+Czerniak
+dabble
+dabbled
+dabbler
+dabbles
+dabbling
+Dacca
+Dacron
+dactyl
+dactylic
+dad
+Dada
+Dadaism
+Dadaist
+Dadaistic
+daddy
+Dade
+dads
+Daedalus
+daemon
+daemons
+daffodil
+daffodils
+dagger
+Dahl
+dahlia
+Dahomey
+Dailey
+dailies
+daily
+Daimler
+daintily
+daintiness
+dainty
+dairy
+Dairylea
+daisies
+daisy
+Dakar
+Dakota
+dale
+dales
+Daley
+Dalhousie
+Dali
+Dallas
+Dalton
+Daly
+Dalzell
+dam
+damage
+damaged
+damager
+damagers
+damages
+damaging
+Damascus
+damask
+dame
+damming
+damn
+damnation
+damned
+damning
+damns
+Damocles
+Damon
+damp
+dampen
+dampens
+damper
+damping
+dampness
+dams
+damsel
+damsels
+Dan
+Dana
+Danbury
+dance
+danced
+dancer
+dancers
+dances
+dancing
+dandelion
+dandelions
+dandy
+Dane
+Danes
+danger
+dangerous
+dangerously
+dangers
+dangle
+dangled
+dangles
+dangling
+Daniel
+Daniels
+Danielson
+Danish
+Danization
+Danizations
+Danize
+Danizes
+Danny
+Dante
+Danube
+Danubian
+Danville
+Danzig
+Daphne
+Dar
+dare
+dared
+darer
+darers
+dares
+daresay
+daring
+daringly
+Darius
+dark
+darken
+darker
+darkest
+darkly
+darkness
+darkroom
+Darlene
+darling
+darlings
+Darlington
+darn
+darned
+darner
+darning
+darns
+DARPA
+Darrell
+Darrow
+Darry
+dart
+darted
+darter
+darting
+Dartmouth
+darts
+Darwin
+Darwinian
+Darwinism
+Darwinistic
+Darwinize
+Darwinizes
+dash
+dashboard
+dashed
+dasher
+dashers
+dashes
+dashing
+dashingly
+data
+database
+databases
+datagram
+datagrams
+Datamation
+Datamedia
+date
+dated
+dateline
+dater
+dates
+dating
+dative
+Datsun
+datum
+Daugherty
+daughter
+daughterly
+daughters
+daunt
+daunted
+dauntless
+Dave
+David
+Davidson
+Davie
+Davies
+Davinich
+Davis
+Davison
+Davy
+dawn
+dawned
+dawning
+dawns
+Dawson
+day
+daybreak
+daydream
+daydreaming
+daydreams
+daylight
+daylights
+days
+daytime
+Dayton
+Daytona
+daze
+dazed
+dazzle
+dazzled
+dazzler
+dazzles
+dazzling
+dazzlingly
+De
+deacon
+deacons
+deactivate
+dead
+deaden
+deadline
+deadlines
+deadlock
+deadlocked
+deadlocking
+deadlocks
+deadly
+deadness
+deadwood
+deaf
+deafen
+deafer
+deafest
+deafness
+deal
+dealer
+dealers
+dealership
+dealing
+dealings
+deallocate
+deallocated
+deallocating
+deallocation
+deallocations
+deals
+dealt
+dean
+Deane
+Deanna
+deans
+dear
+Dearborn
+dearer
+dearest
+dearly
+dearness
+dearth
+dearths
+death
+deathbed
+deathly
+deaths
+debacle
+debar
+debase
+debatable
+debate
+debated
+debater
+debaters
+debates
+debating
+debauch
+debauchery
+Debbie
+Debby
+debilitate
+debilitated
+debilitates
+debilitating
+debility
+debit
+debited
+Deborah
+Debra
+debrief
+debris
+debt
+debtor
+debts
+debug
+debugged
+debugger
+debuggers
+debugging
+debugs
+debunk
+Debussy
+debutante
+DEC
+decade
+decadence
+decadent
+decadently
+decades
+decal
+decathlon
+Decatur
+decay
+decayed
+decaying
+decays
+Decca
+decease
+deceased
+deceases
+deceasing
+decedent
+deceit
+deceitful
+deceitfully
+deceitfulness
+deceive
+deceived
+deceiver
+deceivers
+deceives
+deceiving
+decelerate
+decelerated
+decelerates
+decelerating
+deceleration
+December
+Decembers
+decencies
+decency
+decennial
+decent
+decently
+decentralization
+decentralized
+deception
+deceptions
+deceptive
+deceptively
+decertify
+decibel
+decidability
+decidable
+decide
+decided
+decidedly
+decides
+deciding
+deciduous
+decimal
+decimals
+decimate
+decimated
+decimates
+decimating
+decimation
+decipher
+deciphered
+decipherer
+deciphering
+deciphers
+decision
+decisions
+decisive
+decisively
+decisiveness
+deck
+decked
+Decker
+decking
+deckings
+decks
+declaration
+declarations
+declarative
+declaratively
+declaratives
+declarator
+declaratory
+declare
+declared
+declarer
+declarers
+declares
+declaring
+declassify
+declination
+declinations
+decline
+declined
+decliner
+decliners
+declines
+declining
+DECnet
+decode
+decoded
+decoder
+decoders
+decodes
+decoding
+decodings
+decolletage
+decollimate
+decompile
+decomposability
+decomposable
+decompose
+decomposed
+decomposes
+decomposing
+decomposition
+decompositions
+decompress
+decompression
+decorate
+decorated
+decorates
+decorating
+decoration
+decorations
+decorative
+decorum
+decouple
+decoupled
+decouples
+decoupling
+decoy
+decoys
+decrease
+decreased
+decreases
+decreasing
+decreasingly
+decree
+decreed
+decreeing
+decrees
+decrement
+decremented
+decrementing
+decrements
+decrypt
+decrypted
+decrypting
+decryption
+decrypts
+DECstation
+DECsystem
+DECtape
+dedicate
+dedicated
+dedicates
+dedicating
+dedication
+deduce
+deduced
+deducer
+deduces
+deducible
+deducing
+deduct
+deducted
+deductible
+deducting
+deduction
+deductions
+deductive
+Dee
+deed
+deeded
+deeding
+deeds
+deem
+deemed
+deeming
+deemphasize
+deemphasized
+deemphasizes
+deemphasizing
+deems
+deep
+deepen
+deepened
+deepening
+deepens
+deeper
+deepest
+deeply
+deeps
+deer
+Deere
+deface
+default
+defaulted
+defaulter
+defaulting
+defaults
+defeat
+defeated
+defeating
+defeats
+defecate
+defect
+defected
+defecting
+defection
+defections
+defective
+defects
+defend
+defendant
+defendants
+defended
+defender
+defenders
+defending
+defends
+defenestrate
+defenestrated
+defenestrates
+defenestrating
+defenestration
+defense
+defenseless
+defenses
+defensible
+defensive
+defer
+deference
+deferment
+deferments
+deferrable
+deferred
+deferrer
+deferrers
+deferring
+defers
+defiance
+defiant
+defiantly
+deficiencies
+deficiency
+deficient
+deficit
+deficits
+defied
+defies
+defile
+defiling
+definable
+define
+defined
+definer
+defines
+defining
+definite
+definitely
+definiteness
+definition
+definitional
+definitions
+definitive
+deflate
+deflater
+deflect
+defocus
+Defoe
+deforest
+deforestation
+deform
+deformation
+deformations
+deformed
+deformities
+deformity
+defraud
+defray
+defrost
+deftly
+defunct
+defy
+defying
+degeneracy
+degenerate
+degenerated
+degenerates
+degenerating
+degeneration
+degenerative
+degradable
+degradation
+degradations
+degrade
+degraded
+degrades
+degrading
+degree
+degrees
+dehumidify
+dehydrate
+deify
+deign
+deigned
+deigning
+deigns
+Deimos
+Deirdre
+Deirdres
+deities
+deity
+dejected
+dejectedly
+DeKalb
+DeKastere
+Del
+Delaney
+Delano
+Delaware
+delay
+delayed
+delaying
+delays
+delegate
+delegated
+delegates
+delegating
+delegation
+delegations
+delete
+deleted
+deleter
+deleterious
+deletes
+deleting
+deletion
+deletions
+Delft
+Delhi
+Delia
+deliberate
+deliberated
+deliberately
+deliberateness
+deliberates
+deliberating
+deliberation
+deliberations
+deliberative
+deliberator
+deliberators
+delicacies
+delicacy
+delicate
+delicately
+delicatessen
+delicious
+deliciously
+delight
+delighted
+delightedly
+delightful
+delightfully
+delighting
+delights
+Delilah
+delimit
+delimitation
+delimited
+delimiter
+delimiters
+delimiting
+delimits
+delineament
+delineate
+delineated
+delineates
+delineating
+delineation
+delinquency
+delinquent
+delirious
+deliriously
+delirium
+deliver
+deliverable
+deliverables
+deliverance
+delivered
+deliverer
+deliverers
+deliveries
+delivering
+delivers
+delivery
+dell
+Della
+dells
+Dellwood
+Delmarva
+Delphi
+Delphic
+Delphically
+Delphinus
+delta
+deltas
+delude
+deluded
+deludes
+deluding
+deluge
+deluged
+deluges
+delusion
+delusions
+deluxe
+delve
+delves
+delving
+demagnify
+demagogue
+demand
+demanded
+demander
+demanding
+demandingly
+demands
+demarcate
+demeanor
+demented
+demerit
+Demeter
+demigod
+demise
+demo
+democracies
+democracy
+democrat
+democratic
+democratically
+democrats
+demodulate
+demodulator
+demographic
+demolish
+demolished
+demolishes
+demolition
+demon
+demoniac
+demonic
+demons
+demonstrable
+demonstrate
+demonstrated
+demonstrates
+demonstrating
+demonstration
+demonstrations
+demonstrative
+demonstratively
+demonstrator
+demonstrators
+demoralize
+demoralized
+demoralizes
+demoralizing
+DeMorgan
+demote
+demountable
+Dempsey
+demultiplex
+demultiplexed
+demultiplexer
+demultiplexers
+demultiplexing
+demur
+demythologize
+den
+denature
+Deneb
+Denebola
+Deneen
+deniable
+denial
+denials
+denied
+denier
+denies
+denigrate
+denigrated
+denigrates
+denigrating
+denizen
+Denmark
+Dennis
+Denny
+denominate
+denomination
+denominations
+denominator
+denominators
+denotable
+denotation
+denotational
+denotationally
+denotations
+denotative
+denote
+denoted
+denotes
+denoting
+denounce
+denounced
+denounces
+denouncing
+dens
+dense
+densely
+denseness
+denser
+densest
+densities
+density
+dent
+dental
+dentally
+dented
+denting
+dentist
+dentistry
+dentists
+Denton
+dents
+denture
+denude
+denumerable
+denunciate
+denunciation
+Denver
+deny
+denying
+deodorant
+deoxyribonucleic
+depart
+departed
+departing
+department
+departmental
+departments
+departs
+departure
+departures
+depend
+dependability
+dependable
+dependably
+depended
+dependence
+dependencies
+dependency
+dependent
+dependently
+dependents
+depending
+depends
+depict
+depicted
+depicting
+depicts
+deplete
+depleted
+depletes
+depleting
+depletion
+depletions
+deplorable
+deplore
+deplored
+deplores
+deploring
+deploy
+deployed
+deploying
+deployment
+deployments
+deploys
+deport
+deportation
+deportee
+deportment
+depose
+deposed
+deposes
+deposit
+depositary
+deposited
+depositing
+deposition
+depositions
+depositor
+depositors
+depository
+deposits
+depot
+depots
+deprave
+depraved
+depravity
+deprecate
+depreciate
+depreciated
+depreciates
+depreciation
+depress
+depressed
+depresses
+depressing
+depression
+depressions
+deprivation
+deprivations
+deprive
+deprived
+deprives
+depriving
+depth
+depths
+deputies
+deputy
+dequeue
+dequeued
+dequeues
+dequeuing
+derail
+derailed
+derailing
+derails
+derby
+Derbyshire
+dereference
+deregulate
+deregulated
+Derek
+deride
+derision
+derivable
+derivation
+derivations
+derivative
+derivatives
+derive
+derived
+derives
+deriving
+derogatory
+derrick
+derriere
+dervish
+Des
+Descartes
+descend
+descendant
+descendants
+descended
+descendent
+descender
+descenders
+descending
+descends
+descent
+descents
+describable
+describe
+described
+describer
+describes
+describing
+description
+descriptions
+descriptive
+descriptively
+descriptives
+descriptor
+descriptors
+descry
+desecrate
+desegregate
+desert
+deserted
+deserter
+deserters
+deserting
+desertion
+desertions
+deserts
+deserve
+deserved
+deserves
+deserving
+deservingly
+deservings
+desiderata
+desideratum
+design
+designate
+designated
+designates
+designating
+designation
+designations
+designator
+designators
+designed
+designer
+designers
+designing
+designs
+desirability
+desirable
+desirably
+desire
+desired
+desires
+desiring
+desirous
+desist
+desk
+desks
+desktop
+Desmond
+desolate
+desolately
+desolation
+desolations
+despair
+despaired
+despairing
+despairingly
+despairs
+despatch
+despatched
+desperado
+desperate
+desperately
+desperation
+despicable
+despise
+despised
+despises
+despising
+despite
+despoil
+despondent
+despot
+despotic
+despotism
+despots
+dessert
+desserts
+dessicate
+destabilize
+destination
+destinations
+destine
+destined
+destinies
+destiny
+destitute
+destitution
+destroy
+destroyed
+destroyer
+destroyers
+destroying
+destroys
+destruct
+destruction
+destructions
+destructive
+destructively
+destructiveness
+destructor
+destuff
+destuffing
+destuffs
+desuetude
+desultory
+desynchronize
+detach
+detached
+detacher
+detaches
+detaching
+detachment
+detachments
+detail
+detailed
+detailing
+details
+detain
+detained
+detaining
+detains
+detect
+detectable
+detectably
+detected
+detecting
+detection
+detections
+detective
+detectives
+detector
+detectors
+detects
+detente
+detention
+deter
+detergent
+deteriorate
+deteriorated
+deteriorates
+deteriorating
+deterioration
+determinable
+determinacy
+determinant
+determinants
+determinate
+determinately
+determination
+determinations
+determinative
+determine
+determined
+determiner
+determiners
+determines
+determining
+determinism
+deterministic
+deterministically
+deterred
+deterrent
+deterring
+detest
+detestable
+detested
+detour
+detract
+detractor
+detractors
+detracts
+detriment
+detrimental
+Detroit
+deuce
+deus
+deuterium
+Deutsch
+devastate
+devastated
+devastates
+devastating
+devastation
+develop
+developed
+developer
+developers
+developing
+development
+developmental
+developments
+develops
+deviant
+deviants
+deviate
+deviated
+deviates
+deviating
+deviation
+deviations
+device
+devices
+devil
+devilish
+devilishly
+devils
+devious
+devise
+devised
+devises
+devising
+devisings
+devoid
+devolve
+Devon
+Devonshire
+devote
+devoted
+devotedly
+devotee
+devotees
+devotes
+devoting
+devotion
+devotions
+devour
+devoured
+devourer
+devours
+devout
+devoutly
+devoutness
+dew
+dewdrop
+dewdrops
+Dewey
+Dewitt
+dewy
+Dexedrine
+dexterity
+Dhabi
+diabetes
+diabetic
+diabolic
+diachronic
+diacritical
+diadem
+diagnosable
+diagnose
+diagnosed
+diagnoses
+diagnosing
+diagnosis
+diagnostic
+diagnostician
+diagnostics
+diagonal
+diagonally
+diagonals
+diagram
+diagrammable
+diagrammatic
+diagrammatically
+diagrammed
+diagrammer
+diagrammers
+diagramming
+diagrams
+dial
+dialect
+dialectic
+dialects
+dialed
+dialer
+dialers
+dialing
+dialog
+dialogs
+dialogue
+dialogues
+dials
+dialup
+dialysis
+diamagnetic
+diameter
+diameters
+diametric
+diametrically
+diamond
+diamonds
+Diana
+Diane
+Dianne
+diaper
+diapers
+diaphragm
+diaphragms
+diaries
+diarrhea
+diary
+diatribe
+diatribes
+dibble
+dice
+dichotomize
+dichotomy
+dickens
+Dickerson
+Dickinson
+Dickson
+dicky
+dictate
+dictated
+dictates
+dictating
+dictation
+dictations
+dictator
+dictatorial
+dictators
+dictatorship
+diction
+dictionaries
+dictionary
+dictum
+dictums
+did
+didactic
+diddle
+Dido
+die
+Diebold
+died
+Diego
+diehard
+dielectric
+dielectrics
+diem
+dies
+diesel
+diet
+dietary
+dieter
+dieters
+dietetic
+dietician
+dietitian
+dietitians
+Dietrich
+diets
+Dietz
+differ
+differed
+difference
+differences
+different
+differentiable
+differential
+differentials
+differentiate
+differentiated
+differentiates
+differentiating
+differentiation
+differentiations
+differentiators
+differently
+differer
+differers
+differing
+differs
+difficult
+difficulties
+difficultly
+difficulty
+diffract
+diffuse
+diffused
+diffusely
+diffuser
+diffusers
+diffuses
+diffusible
+diffusing
+diffusion
+diffusions
+diffusive
+dig
+digest
+digested
+digestible
+digesting
+digestion
+digestive
+digests
+digger
+diggers
+digging
+diggings
+digit
+digital
+digitalis
+digitally
+digitization
+digitize
+digitized
+digitizes
+digitizing
+digits
+dignified
+dignify
+dignitary
+dignities
+dignity
+digram
+digress
+digressed
+digresses
+digressing
+digression
+digressions
+digressive
+digs
+dihedral
+Dijkstra
+Dijon
+dike
+dikes
+dilapidate
+dilatation
+dilate
+dilated
+dilates
+dilating
+dilation
+dildo
+dilemma
+dilemmas
+diligence
+diligent
+diligently
+dill
+Dillon
+dilogarithm
+dilute
+diluted
+dilutes
+diluting
+dilution
+dim
+DiMaggio
+dime
+dimension
+dimensional
+dimensionality
+dimensionally
+dimensioned
+dimensioning
+dimensions
+dimes
+diminish
+diminished
+diminishes
+diminishing
+diminution
+diminutive
+dimly
+dimmed
+dimmer
+dimmers
+dimmest
+dimming
+dimness
+dimple
+dims
+din
+Dinah
+dine
+dined
+diner
+diners
+dines
+ding
+dinghy
+dinginess
+dingo
+dingy
+dining
+dinner
+dinners
+dinnertime
+dinnerware
+dinosaur
+dint
+Diocletian
+diode
+diodes
+Diogenes
+Dion
+Dionysian
+Dionysus
+Diophantine
+diopter
+diorama
+dioxide
+dip
+diphtheria
+diphthong
+diploma
+diplomacy
+diplomas
+diplomat
+diplomatic
+diplomats
+dipole
+dipped
+dipper
+dippers
+dipping
+dippings
+dips
+Dirac
+dire
+direct
+directed
+directing
+direction
+directional
+directionality
+directionally
+directions
+directive
+directives
+directly
+directness
+director
+directorate
+directories
+directors
+directory
+directrices
+directrix
+directs
+dirge
+dirges
+Dirichlet
+dirt
+dirtier
+dirtiest
+dirtily
+dirtiness
+dirts
+dirty
+Dis
+disabilities
+disability
+disable
+disabled
+disabler
+disablers
+disables
+disabling
+disadvantage
+disadvantageous
+disadvantages
+disaffected
+disaffection
+disagree
+disagreeable
+disagreed
+disagreeing
+disagreement
+disagreements
+disagrees
+disallow
+disallowed
+disallowing
+disallows
+disambiguate
+disambiguated
+disambiguates
+disambiguating
+disambiguation
+disambiguations
+disappear
+disappearance
+disappearances
+disappeared
+disappearing
+disappears
+disappoint
+disappointed
+disappointing
+disappointment
+disappointments
+disapproval
+disapprove
+disapproved
+disapproves
+disarm
+disarmament
+disarmed
+disarming
+disarms
+disassemble
+disassembled
+disassembles
+disassembling
+disassembly
+disaster
+disasters
+disastrous
+disastrously
+disband
+disbanded
+disbanding
+disbands
+disburse
+disbursed
+disbursement
+disbursements
+disburses
+disbursing
+disc
+discard
+discarded
+discarding
+discards
+discern
+discerned
+discernibility
+discernible
+discernibly
+discerning
+discerningly
+discernment
+discerns
+discharge
+discharged
+discharges
+discharging
+disciple
+disciples
+disciplinary
+discipline
+disciplined
+disciplines
+disciplining
+disclaim
+disclaimed
+disclaimer
+disclaims
+disclose
+disclosed
+discloses
+disclosing
+disclosure
+disclosures
+discomfort
+disconcert
+disconcerting
+disconcertingly
+disconnect
+disconnected
+disconnecting
+disconnection
+disconnects
+discontent
+discontented
+discontinuance
+discontinue
+discontinued
+discontinues
+discontinuities
+discontinuity
+discontinuous
+discord
+discordant
+discount
+discounted
+discounting
+discounts
+discourage
+discouraged
+discouragement
+discourages
+discouraging
+discourse
+discourses
+discover
+discovered
+discoverer
+discoverers
+discoveries
+discovering
+discovers
+discovery
+discredit
+discredited
+discreet
+discreetly
+discrepancies
+discrepancy
+discrete
+discretely
+discreteness
+discretion
+discretionary
+discriminant
+discriminate
+discriminated
+discriminates
+discriminating
+discrimination
+discriminatory
+discs
+discuss
+discussant
+discussed
+discusses
+discussing
+discussion
+discussions
+disdain
+disdaining
+disdains
+disease
+diseased
+diseases
+disembowel
+disengage
+disengaged
+disengages
+disengaging
+disentangle
+disentangling
+disfigure
+disfigured
+disfigures
+disfiguring
+disgorge
+disgrace
+disgraced
+disgraceful
+disgracefully
+disgraces
+disgruntle
+disgruntled
+disguise
+disguised
+disguises
+disgust
+disgusted
+disgustedly
+disgustful
+disgusting
+disgustingly
+disgusts
+dish
+dishearten
+disheartening
+dished
+dishes
+dishevel
+dishing
+dishonest
+dishonestly
+dishonesty
+dishonor
+dishonorable
+dishonored
+dishonoring
+dishonors
+dishwasher
+dishwashers
+dishwashing
+dishwater
+disillusion
+disillusioned
+disillusioning
+disillusionment
+disillusionments
+disinclined
+disingenuous
+disinterested
+disinterestedness
+disjoint
+disjointed
+disjointly
+disjointness
+disjunct
+disjunction
+disjunctions
+disjunctive
+disjunctively
+disjuncts
+disk
+diskette
+diskettes
+disks
+dislike
+disliked
+dislikes
+disliking
+dislocate
+dislocated
+dislocates
+dislocating
+dislocation
+dislocations
+dislodge
+dislodged
+dismal
+dismally
+dismay
+dismayed
+dismaying
+dismember
+dismembered
+dismemberment
+dismembers
+dismiss
+dismissal
+dismissals
+dismissed
+dismisser
+dismissers
+dismisses
+dismissing
+dismount
+dismounted
+dismounting
+dismounts
+Disney
+Disneyland
+disobedience
+disobedient
+disobey
+disobeyed
+disobeying
+disobeys
+disorder
+disordered
+disorderly
+disorders
+disorganized
+disown
+disowned
+disowning
+disowns
+disparage
+disparate
+disparities
+disparity
+dispassionate
+dispatch
+dispatched
+dispatcher
+dispatchers
+dispatches
+dispatching
+dispel
+dispell
+dispelled
+dispelling
+dispels
+dispensary
+dispensation
+dispense
+dispensed
+dispenser
+dispensers
+dispenses
+dispensing
+dispersal
+disperse
+dispersed
+disperses
+dispersing
+dispersion
+dispersions
+displace
+displaced
+displacement
+displacements
+displaces
+displacing
+display
+displayable
+displayed
+displayer
+displaying
+displays
+displease
+displeased
+displeases
+displeasing
+displeasure
+disposable
+disposal
+disposals
+dispose
+disposed
+disposer
+disposes
+disposing
+disposition
+dispositions
+dispossessed
+disproportionate
+disprove
+disproved
+disproves
+disproving
+dispute
+disputed
+disputer
+disputers
+disputes
+disputing
+disqualification
+disqualified
+disqualifies
+disqualify
+disqualifying
+disquiet
+disquieting
+Disraeli
+disregard
+disregarded
+disregarding
+disregards
+disrespectful
+disrupt
+disrupted
+disrupting
+disruption
+disruptions
+disruptive
+disrupts
+dissatisfaction
+dissatisfactions
+dissatisfactory
+dissatisfied
+dissect
+dissects
+dissemble
+disseminate
+disseminated
+disseminates
+disseminating
+dissemination
+dissension
+dissensions
+dissent
+dissented
+dissenter
+dissenters
+dissenting
+dissents
+dissertation
+dissertations
+disservice
+dissident
+dissidents
+dissimilar
+dissimilarities
+dissimilarity
+dissipate
+dissipated
+dissipates
+dissipating
+dissipation
+dissociate
+dissociated
+dissociates
+dissociating
+dissociation
+dissolution
+dissolutions
+dissolve
+dissolved
+dissolves
+dissolving
+dissonant
+dissuade
+distaff
+distal
+distally
+distance
+distances
+distant
+distantly
+distaste
+distasteful
+distastefully
+distastes
+distemper
+distempered
+distempers
+distill
+distillation
+distilled
+distiller
+distillers
+distillery
+distilling
+distills
+distinct
+distinction
+distinctions
+distinctive
+distinctively
+distinctiveness
+distinctly
+distinctness
+distinguish
+distinguishable
+distinguished
+distinguishes
+distinguishing
+distort
+distorted
+distorting
+distortion
+distortions
+distorts
+distract
+distracted
+distracting
+distraction
+distractions
+distracts
+distraught
+distress
+distressed
+distresses
+distressing
+distribute
+distributed
+distributes
+distributing
+distribution
+distributional
+distributions
+distributive
+distributivity
+distributor
+distributors
+district
+districts
+distrust
+distrusted
+disturb
+disturbance
+disturbances
+disturbed
+disturber
+disturbing
+disturbingly
+disturbs
+disuse
+ditch
+ditches
+dither
+ditto
+ditty
+Ditzel
+diurnal
+divan
+divans
+dive
+dived
+diver
+diverge
+diverged
+divergence
+divergences
+divergent
+diverges
+diverging
+divers
+diverse
+diversely
+diversification
+diversified
+diversifies
+diversify
+diversifying
+diversion
+diversionary
+diversions
+diversities
+diversity
+divert
+diverted
+diverting
+diverts
+dives
+divest
+divested
+divesting
+divestiture
+divests
+divide
+divided
+dividend
+dividends
+divider
+dividers
+divides
+dividing
+divine
+divinely
+diviner
+diving
+divining
+divinities
+divinity
+divisibility
+divisible
+division
+divisional
+divisions
+divisive
+divisor
+divisors
+divorce
+divorced
+divorcee
+divulge
+divulged
+divulges
+divulging
+Dixie
+Dixiecrats
+Dixieland
+Dixon
+dizziness
+dizzy
+Djakarta
+Dmitri
+Dnieper
+do
+Dobbin
+Dobbs
+Doberman
+Doc
+docile
+dock
+docked
+docket
+docks
+dockside
+dockyard
+doctor
+doctoral
+doctorate
+doctorates
+doctored
+doctors
+doctrinaire
+doctrinal
+doctrine
+doctrines
+document
+documentaries
+documentary
+documentation
+documentations
+documented
+documenter
+documenters
+documenting
+documents
+Dodd
+dodecahedra
+dodecahedral
+dodecahedron
+dodge
+dodged
+dodger
+dodgers
+dodging
+Dodington
+Dodson
+doe
+doer
+doers
+does
+dog
+Doge
+dogged
+doggedly
+doggedness
+dogging
+doghouse
+dogma
+dogmas
+dogmatic
+dogmatism
+dogs
+Dogtown
+Doherty
+doing
+doings
+Dolan
+doldrum
+dole
+doled
+doleful
+dolefully
+doles
+doll
+dollar
+dollars
+dollies
+dolls
+dolly
+Dolores
+dolphin
+dolphins
+domain
+domains
+dome
+domed
+Domenico
+domes
+Domesday
+domestic
+domestically
+domesticate
+domesticated
+domesticates
+domesticating
+domestication
+domicile
+dominance
+dominant
+dominantly
+dominate
+dominated
+dominates
+dominating
+domination
+domineer
+domineering
+Domingo
+Dominic
+Dominican
+Dominicans
+Dominick
+dominion
+Dominique
+domino
+don
+Donahue
+Donald
+Donaldson
+donate
+donated
+donates
+donating
+donation
+done
+Doneck
+donkey
+donkeys
+Donna
+Donnelly
+Donner
+donnybrook
+donor
+Donovan
+dons
+doodle
+Dooley
+Doolittle
+doom
+doomed
+dooming
+dooms
+doomsday
+door
+doorbell
+doorkeeper
+doorman
+doormen
+doors
+doorstep
+doorsteps
+doorway
+doorways
+dope
+doped
+doper
+dopers
+dopes
+doping
+Doppler
+Dora
+Dorado
+Dorcas
+Dorchester
+Doreen
+Doria
+Doric
+Doricize
+Doricizes
+Doris
+dormant
+dormitories
+dormitory
+Dorothea
+Dorothy
+Dorset
+Dortmund
+dosage
+dose
+dosed
+doses
+dossier
+dossiers
+Dostoevsky
+dot
+dote
+doted
+dotes
+doting
+dotingly
+dots
+dotted
+dotting
+double
+doubled
+Doubleday
+doubleheader
+doubler
+doublers
+doubles
+doublet
+doubleton
+doublets
+doubling
+doubloon
+doubly
+doubt
+doubtable
+doubted
+doubter
+doubters
+doubtful
+doubtfully
+doubting
+doubtless
+doubtlessly
+doubts
+Doug
+dough
+Dougherty
+doughnut
+doughnuts
+Douglas
+Douglass
+dove
+dover
+doves
+dovetail
+Dow
+dowager
+dowel
+Dowling
+down
+downcast
+downed
+downers
+Downey
+downfall
+downfallen
+downgrade
+downhill
+Downing
+downlink
+downlinks
+download
+downloaded
+downloading
+downloads
+downplay
+downplayed
+downplaying
+downplays
+downpour
+downright
+Downs
+downside
+downstairs
+downstream
+downtown
+downtowns
+downtrodden
+downturn
+downward
+downwards
+downy
+dowry
+Doyle
+doze
+dozed
+dozen
+dozens
+dozenth
+dozes
+dozing
+drab
+Draco
+Draconian
+draft
+drafted
+draftee
+drafter
+drafters
+drafting
+drafts
+draftsman
+draftsmen
+drafty
+drag
+dragged
+dragging
+dragnet
+dragon
+dragonfly
+dragonhead
+dragons
+dragoon
+dragooned
+dragoons
+drags
+drain
+drainage
+drained
+drainer
+draining
+drains
+drake
+dram
+drama
+Dramamine
+dramas
+dramatic
+dramatically
+dramatics
+dramatist
+dramatists
+drank
+drape
+draped
+draper
+draperies
+drapers
+drapery
+drapes
+drastic
+drastically
+draught
+draughts
+Dravidian
+draw
+drawback
+drawbacks
+drawbridge
+drawbridges
+drawer
+drawers
+drawing
+drawings
+drawl
+drawled
+drawling
+drawls
+drawn
+drawnly
+drawnness
+draws
+dread
+dreaded
+dreadful
+dreadfully
+dreading
+dreadnought
+dreads
+dream
+dreamboat
+dreamed
+dreamer
+dreamers
+dreamily
+dreaming
+dreamlike
+dreams
+dreamt
+dreamy
+dreariness
+dreary
+dredge
+dregs
+drench
+drenched
+drenches
+drenching
+dress
+dressed
+dresser
+dressers
+dresses
+dressing
+dressings
+dressmaker
+dressmakers
+drew
+Drexel
+Dreyfuss
+dried
+drier
+driers
+dries
+driest
+drift
+drifted
+drifter
+drifters
+drifting
+drifts
+drill
+drilled
+driller
+drilling
+drills
+drily
+drink
+drinkable
+drinker
+drinkers
+drinking
+drinks
+drip
+dripping
+drippy
+drips
+Driscoll
+drive
+driven
+driver
+drivers
+drives
+driveway
+driveways
+driving
+drizzle
+drizzly
+droll
+dromedary
+drone
+drones
+drool
+droop
+drooped
+drooping
+droops
+droopy
+drop
+droplet
+dropout
+dropped
+dropper
+droppers
+dropping
+droppings
+drops
+drosophila
+drought
+droughts
+drove
+drover
+drovers
+droves
+drown
+drowned
+drowning
+drownings
+drowns
+drowsiness
+drowsy
+drubbing
+drudge
+drudgery
+drug
+druggist
+druggists
+drugs
+drugstore
+drum
+drumhead
+drummed
+drummer
+drummers
+drumming
+Drummond
+drums
+drunk
+drunkard
+drunkards
+drunken
+drunkenness
+drunker
+drunkly
+drunks
+Drury
+dry
+Dryden
+drying
+dryly
+dual
+dualism
+dualities
+duality
+Duane
+dub
+dubbed
+Dubhe
+dubious
+dubiously
+dubiousness
+Dublin
+dubs
+Dubuque
+duchess
+duchesses
+duchy
+duck
+ducked
+ducking
+duckling
+ducks
+duct
+ducts
+dud
+Dudley
+due
+duel
+dueling
+duels
+dues
+duet
+Duffy
+dug
+Dugan
+duke
+dukes
+dull
+dulled
+duller
+Dulles
+dullest
+dulling
+dullness
+dulls
+dully
+Duluth
+duly
+dumb
+dumbbell
+dumbbells
+dumber
+dumbest
+dumbly
+dumbness
+dummies
+dummy
+dump
+dumped
+dumper
+dumping
+dumps
+Dumpty
+Dunbar
+Duncan
+dunce
+dunces
+Dundee
+dune
+Dunedin
+dunes
+dung
+dungeon
+dungeons
+Dunham
+dunk
+Dunkirk
+Dunlap
+Dunlop
+Dunn
+Dunne
+dupe
+duplex
+duplicable
+duplicate
+duplicated
+duplicates
+duplicating
+duplication
+duplications
+duplicator
+duplicators
+duplicity
+DuPont
+Dupont
+DuPonts
+Duponts
+Duquesne
+durabilities
+durability
+durable
+durably
+Durango
+duration
+durations
+Durer
+Durers
+duress
+Durham
+during
+Durkee
+Durkin
+Durrell
+Durward
+Dusenberg
+Dusenbury
+dusk
+duskiness
+dusky
+Dusseldorf
+dust
+dustbin
+dusted
+duster
+dusters
+dustier
+dustiest
+Dustin
+dusting
+dusts
+dusty
+Dutch
+dutchess
+Dutchman
+Dutchmen
+duties
+dutiful
+dutifully
+dutifulness
+Dutton
+duty
+Dvorak
+dwarf
+dwarfed
+dwarfs
+dwarves
+dwell
+dwelled
+dweller
+dwellers
+dwelling
+dwellings
+dwells
+dwelt
+Dwight
+dwindle
+dwindled
+dwindling
+Dwyer
+dyad
+dyadic
+dye
+dyed
+dyeing
+dyer
+dyers
+dyes
+dying
+Dyke
+Dylan
+dynamic
+dynamically
+dynamics
+dynamism
+dynamite
+dynamited
+dynamites
+dynamiting
+dynamo
+dynastic
+dynasties
+dynasty
+dyne
+dysentery
+dyspeptic
+dystrophy
+each
+Eagan
+eager
+eagerly
+eagerness
+eagle
+eagles
+ear
+eardrum
+eared
+earl
+earlier
+earliest
+earliness
+earls
+early
+earmark
+earmarked
+earmarking
+earmarkings
+earmarks
+earn
+earned
+earner
+earners
+earnest
+earnestly
+earnestness
+earning
+earnings
+earns
+Earp
+earphone
+earring
+earrings
+ears
+earsplitting
+earth
+earthen
+earthenware
+earthliness
+earthling
+earthly
+Earthman
+Earthmen
+earthmover
+earthquake
+earthquakes
+earths
+earthworm
+earthworms
+earthy
+ease
+eased
+easel
+easement
+easements
+eases
+easier
+easiest
+easily
+easiness
+easing
+east
+eastbound
+easter
+eastern
+easterner
+easterners
+easternmost
+Easthampton
+Eastland
+Eastman
+eastward
+eastwards
+Eastwick
+Eastwood
+easy
+easygoing
+eat
+eaten
+eater
+eaters
+eating
+eatings
+Eaton
+eats
+eaves
+eavesdrop
+eavesdropped
+eavesdropper
+eavesdroppers
+eavesdropping
+eavesdrops
+ebb
+ebbing
+ebbs
+Eben
+ebony
+eccentric
+eccentricities
+eccentricity
+eccentrics
+Eccles
+ecclesiastical
+echelon
+echo
+echoed
+echoes
+echoing
+eclectic
+eclipse
+eclipsed
+eclipses
+eclipsing
+ecliptic
+Ecole
+ecology
+econometric
+Econometrica
+economic
+economical
+economically
+economics
+economies
+economist
+economists
+economize
+economized
+economizer
+economizers
+economizes
+economizing
+economy
+ecosystem
+ecstasy
+ecstatic
+Ecuador
+Ecuadorian
+Ed
+Eddie
+eddies
+eddy
+Eden
+Edenization
+Edenizations
+Edenize
+Edenizes
+Edgar
+edge
+edged
+Edgerton
+edges
+Edgewater
+Edgewood
+edging
+edible
+edict
+edicts
+edifice
+edifices
+Edinburgh
+Edison
+edit
+edited
+Edith
+editing
+edition
+editions
+editor
+editorial
+editorially
+editorials
+editors
+edits
+Edmonds
+Edmondson
+Edmonton
+Edmund
+Edna
+Edsger
+Eduard
+Eduardo
+educable
+educate
+educated
+educates
+educating
+education
+educational
+educationally
+educations
+educator
+educators
+Edward
+Edwardian
+Edwardine
+Edwards
+Edwin
+Edwina
+eel
+eelgrass
+eels
+eerie
+eerily
+effect
+effected
+effecting
+effective
+effectively
+effectiveness
+effector
+effectors
+effects
+effectually
+effectuate
+effeminate
+efficacy
+efficiencies
+efficiency
+efficient
+efficiently
+Effie
+effigy
+effort
+effortless
+effortlessly
+effortlessness
+efforts
+egalitarian
+Egan
+egg
+egged
+egghead
+egging
+eggplant
+eggs
+eggshell
+ego
+egocentric
+egos
+egotism
+egotist
+Egypt
+Egyptian
+Egyptianization
+Egyptianizations
+Egyptianize
+Egyptianizes
+Egyptians
+Egyptize
+Egyptizes
+Egyptology
+Ehrlich
+Eichmann
+Eiffel
+eigenfunction
+eigenstate
+eigenvalue
+eigenvalues
+eigenvector
+eight
+eighteen
+eighteens
+eighteenth
+eightfold
+eighth
+eighthes
+eighties
+eightieth
+eights
+eighty
+Eileen
+Einstein
+Einsteinian
+Eire
+Eisenhower
+Eisner
+either
+ejaculate
+ejaculated
+ejaculates
+ejaculating
+ejaculation
+ejaculations
+eject
+ejected
+ejecting
+ejects
+Ekberg
+eke
+eked
+ekes
+Ekstrom
+Ektachrome
+elaborate
+elaborated
+elaborately
+elaborateness
+elaborates
+elaborating
+elaboration
+elaborations
+elaborators
+Elaine
+elapse
+elapsed
+elapses
+elapsing
+elastic
+elastically
+elasticity
+Elba
+elbow
+elbowing
+elbows
+elder
+elderly
+elders
+eldest
+Eldon
+Eleanor
+Eleazar
+elect
+elected
+electing
+election
+elections
+elective
+electives
+elector
+electoral
+electorate
+electors
+Electra
+electric
+electrical
+electrically
+electricalness
+electrician
+electricity
+electrification
+electrify
+electrifying
+electro
+electrocardiogram
+electrocardiograph
+electrocute
+electrocuted
+electrocutes
+electrocuting
+electrocution
+electrocutions
+electrode
+electrodes
+electroencephalogram
+electroencephalograph
+electroencephalography
+electrolysis
+electrolyte
+electrolytes
+electrolytic
+electromagnetic
+electromechanical
+electron
+electronic
+electronically
+electronics
+electrons
+electrophoresis
+electrophorus
+elects
+elegance
+elegant
+elegantly
+elegy
+element
+elemental
+elementals
+elementary
+elements
+Elena
+elephant
+elephants
+elevate
+elevated
+elevates
+elevation
+elevator
+elevators
+eleven
+elevens
+eleventh
+elf
+Elgin
+Eli
+elicit
+elicited
+eliciting
+elicits
+elide
+eligibility
+eligible
+Elijah
+eliminate
+eliminated
+eliminates
+eliminating
+elimination
+eliminations
+eliminator
+eliminators
+Elinor
+Eliot
+Elisabeth
+Elisha
+elision
+elite
+elitist
+Elizabeth
+Elizabethan
+Elizabethanize
+Elizabethanizes
+Elizabethans
+elk
+Elkhart
+elks
+Ella
+Ellen
+Ellie
+Elliot
+Elliott
+ellipse
+ellipses
+ellipsis
+ellipsoid
+ellipsoidal
+ellipsoids
+elliptic
+elliptical
+elliptically
+Ellis
+Ellison
+Ellsworth
+Ellwood
+elm
+Elmer
+Elmhurst
+Elmira
+elms
+Elmsford
+Eloise
+elope
+eloquence
+eloquent
+eloquently
+Elroy
+else
+Elsevier
+elsewhere
+Elsie
+Elsinore
+Elton
+elucidate
+elucidated
+elucidates
+elucidating
+elucidation
+elude
+eluded
+eludes
+eluding
+elusive
+elusively
+elusiveness
+elves
+Elvis
+Ely
+Elysee
+Elysees
+Elysium
+em
+emaciate
+emaciated
+emacs
+emanate
+emanating
+emancipate
+emancipation
+Emanuel
+emasculate
+embalm
+embargo
+embargoes
+embark
+embarked
+embarks
+embarrass
+embarrassed
+embarrasses
+embarrassing
+embarrassment
+embassies
+embassy
+embed
+embedded
+embedding
+embeds
+embellish
+embellished
+embellishes
+embellishing
+embellishment
+embellishments
+ember
+embezzle
+emblem
+embodied
+embodies
+embodiment
+embodiments
+embody
+embodying
+embolden
+embrace
+embraced
+embraces
+embracing
+embroider
+embroidered
+embroideries
+embroiders
+embroidery
+embroil
+embryo
+embryology
+embryos
+emerald
+emeralds
+emerge
+emerged
+emergence
+emergencies
+emergency
+emergent
+emerges
+emerging
+emeritus
+Emerson
+Emery
+emigrant
+emigrants
+emigrate
+emigrated
+emigrates
+emigrating
+emigration
+Emil
+Emile
+Emilio
+Emily
+eminence
+eminent
+eminently
+emissary
+emission
+emit
+emits
+emitted
+emitter
+emitting
+Emma
+Emmanuel
+Emmett
+Emory
+emotion
+emotional
+emotionally
+emotions
+empathy
+emperor
+emperors
+emphases
+emphasis
+emphasize
+emphasized
+emphasizes
+emphasizing
+emphatic
+emphatically
+empire
+empires
+empirical
+empirically
+empiricist
+empiricists
+employ
+employable
+employed
+employee
+employees
+employer
+employers
+employing
+employment
+employments
+employs
+emporium
+empower
+empowered
+empowering
+empowers
+empress
+emptied
+emptier
+empties
+emptiest
+emptily
+emptiness
+empty
+emptying
+emulate
+emulated
+emulates
+emulating
+emulation
+emulations
+emulator
+emulators
+en
+enable
+enabled
+enabler
+enablers
+enables
+enabling
+enact
+enacted
+enacting
+enactment
+enacts
+enamel
+enameled
+enameling
+enamels
+encamp
+encamped
+encamping
+encamps
+encapsulate
+encapsulated
+encapsulates
+encapsulating
+encapsulation
+encased
+enchant
+enchanted
+enchanter
+enchanting
+enchantment
+enchantress
+enchants
+encipher
+enciphered
+enciphering
+enciphers
+encircle
+encircled
+encircles
+enclose
+enclosed
+encloses
+enclosing
+enclosure
+enclosures
+encode
+encoded
+encoder
+encoders
+encodes
+encoding
+encodings
+encompass
+encompassed
+encompasses
+encompassing
+encore
+encounter
+encountered
+encountering
+encounters
+encourage
+encouraged
+encouragement
+encouragements
+encourages
+encouraging
+encouragingly
+encroach
+encrust
+encrypt
+encrypted
+encrypting
+encryption
+encryptions
+encrypts
+encumber
+encumbered
+encumbering
+encumbers
+encyclopedia
+encyclopedias
+encyclopedic
+end
+endanger
+endangered
+endangering
+endangers
+endear
+endeared
+endearing
+endears
+endeavor
+endeavored
+endeavoring
+endeavors
+ended
+endemic
+ender
+enders
+endgame
+Endicott
+ending
+endings
+endless
+endlessly
+endlessness
+endorse
+endorsed
+endorsement
+endorses
+endorsing
+endow
+endowed
+endowing
+endowment
+endowments
+endows
+endpoint
+ends
+endurable
+endurably
+endurance
+endure
+endured
+endures
+enduring
+enduringly
+enema
+enemas
+enemies
+enemy
+energetic
+energies
+energize
+energy
+enervate
+enfeeble
+Enfield
+enforce
+enforceable
+enforced
+enforcement
+enforcer
+enforcers
+enforces
+enforcing
+enfranchise
+Eng
+engage
+engaged
+engagement
+engagements
+engages
+engaging
+engagingly
+Engel
+Engels
+engender
+engendered
+engendering
+engenders
+engine
+engineer
+engineered
+engineering
+engineers
+engines
+England
+Englander
+Englanders
+Engle
+Englewood
+English
+Englishize
+Englishizes
+Englishman
+Englishmen
+engrave
+engraved
+engraver
+engraves
+engraving
+engravings
+engross
+engrossed
+engrossing
+engulf
+enhance
+enhanced
+enhancement
+enhancements
+enhances
+enhancing
+Enid
+enigma
+enigmatic
+enjoin
+enjoined
+enjoining
+enjoins
+enjoy
+enjoyable
+enjoyably
+enjoyed
+enjoying
+enjoyment
+enjoys
+enlarge
+enlarged
+enlargement
+enlargements
+enlarger
+enlargers
+enlarges
+enlarging
+enlighten
+enlightened
+enlightening
+enlightenment
+enlist
+enlisted
+enlistment
+enlists
+enliven
+enlivened
+enlivening
+enlivens
+enmities
+enmity
+ennoble
+ennobled
+ennobles
+ennobling
+ennui
+Enoch
+enormities
+enormity
+enormous
+enormously
+Enos
+enough
+enqueue
+enqueued
+enqueues
+enquire
+enquired
+enquirer
+enquires
+enquiry
+enrage
+enraged
+enrages
+enraging
+enrapture
+enrich
+enriched
+enriches
+enriching
+Enrico
+enroll
+enrolled
+enrolling
+enrollment
+enrollments
+enrolls
+ensemble
+ensembles
+ensign
+ensigns
+enslave
+enslaved
+enslaves
+enslaving
+ensnare
+ensnared
+ensnares
+ensnaring
+Ensolite
+ensue
+ensued
+ensues
+ensuing
+ensure
+ensured
+ensurer
+ensurers
+ensures
+ensuring
+entail
+entailed
+entailing
+entails
+entangle
+enter
+entered
+entering
+enterprise
+enterprises
+enterprising
+enters
+entertain
+entertained
+entertainer
+entertainers
+entertaining
+entertainingly
+entertainment
+entertainments
+entertains
+enthusiasm
+enthusiasms
+enthusiast
+enthusiastic
+enthusiastically
+enthusiasts
+entice
+enticed
+enticer
+enticers
+entices
+enticing
+entire
+entirely
+entireties
+entirety
+entities
+entitle
+entitled
+entitles
+entitling
+entity
+entomb
+entrance
+entranced
+entrances
+entrap
+entreat
+entreated
+entreaty
+entree
+entrench
+entrenched
+entrenches
+entrenching
+entrepreneur
+entrepreneurial
+entrepreneurs
+entries
+entropy
+entrust
+entrusted
+entrusting
+entrusts
+entry
+enumerable
+enumerate
+enumerated
+enumerates
+enumerating
+enumeration
+enumerative
+enumerator
+enumerators
+enunciation
+envelop
+envelope
+enveloped
+enveloper
+envelopes
+enveloping
+envelops
+envied
+envies
+envious
+enviously
+enviousness
+environ
+environing
+environment
+environmental
+environments
+environs
+envisage
+envisaged
+envisages
+envision
+envisioned
+envisioning
+envisions
+envoy
+envoys
+envy
+enzyme
+Eocene
+epaulet
+epaulets
+ephemeral
+Ephesian
+Ephesians
+Ephesus
+Ephraim
+epic
+epicenter
+epics
+Epicurean
+Epicurize
+Epicurizes
+Epicurus
+epidemic
+epidemics
+epidermis
+epigram
+epileptic
+epilogue
+Epiphany
+episcopal
+Episcopalian
+Episcopalianize
+Episcopalianizes
+episode
+episodes
+epistemological
+epistemology
+epistle
+epistles
+epitaph
+epitaphs
+epitaxial
+epitaxially
+epithet
+epithets
+epitomize
+epitomized
+epitomizes
+epitomizing
+epoch
+epochs
+epsilon
+Epsom
+Epstein
+equal
+equaled
+equaling
+equalities
+equality
+equalization
+equalize
+equalized
+equalizer
+equalizers
+equalizes
+equalizing
+equally
+equals
+equate
+equated
+equates
+equating
+equation
+equations
+equator
+equatorial
+equators
+equestrian
+equidistant
+equilateral
+equilibrate
+equilibria
+equilibrium
+equilibriums
+equinox
+equip
+equipment
+equipoise
+equipped
+equipping
+equips
+equitable
+equitably
+equity
+equivalence
+equivalences
+equivalent
+equivalently
+equivalents
+equivocal
+equivocally
+era
+eradicate
+eradicated
+eradicates
+eradicating
+eradication
+eras
+erasable
+erase
+erased
+eraser
+erasers
+erases
+erasing
+Erasmus
+Erastus
+erasure
+Erato
+Eratosthenes
+ere
+erect
+erected
+erecting
+erection
+erections
+erector
+erectors
+erects
+erg
+ergo
+ergodic
+Eric
+Erich
+Erickson
+Ericsson
+Erie
+Erik
+Erikson
+Eris
+Erlang
+Erlenmeyer
+Erlenmeyers
+ermine
+ermines
+Erne
+Ernest
+Ernestine
+Ernie
+Ernst
+erode
+Eros
+erosion
+erotic
+erotica
+err
+errand
+errant
+errata
+erratic
+erratum
+erred
+erring
+erringly
+Errol
+erroneous
+erroneously
+erroneousness
+error
+errors
+errs
+ersatz
+Erskine
+erudite
+erupt
+eruption
+Ervin
+Erwin
+escalate
+escalated
+escalates
+escalating
+escalation
+escapable
+escapade
+escapades
+escape
+escaped
+escapee
+escapees
+escapes
+escaping
+Escherichia
+eschew
+eschewed
+eschewing
+eschews
+escort
+escorted
+escorting
+escorts
+escrow
+Eskimo
+Eskimoized
+Eskimoizeds
+Eskimos
+Esmark
+esoteric
+Espagnol
+especial
+especially
+espionage
+Esposito
+espouse
+espoused
+espouses
+espousing
+esprit
+espy
+esquire
+esquires
+essay
+essayed
+essays
+Essen
+essence
+essences
+Essenize
+Essenizes
+essential
+essentially
+essentials
+Essex
+establish
+established
+establishes
+establishing
+establishment
+establishments
+estate
+estates
+esteem
+esteemed
+esteeming
+esteems
+Estella
+Estes
+Esther
+esthetics
+estimate
+estimated
+estimates
+estimating
+estimation
+estimations
+Estonia
+Estonian
+et
+etch
+etching
+eternal
+eternally
+eternities
+eternity
+Ethan
+Ethel
+ether
+ethereal
+ethereally
+Ethernet
+Ethernets
+ethers
+ethic
+ethical
+ethically
+ethics
+Ethiopia
+Ethiopians
+ethnic
+etiquette
+Etruria
+Etruscan
+etymology
+eucalyptus
+Eucharist
+Euclid
+Euclidean
+Eugene
+Eugenia
+Euler
+Eulerian
+Eumenides
+Eunice
+eunuch
+eunuchs
+euphemism
+euphemisms
+euphoria
+euphoric
+Euphrates
+Eurasia
+Eurasian
+eureka
+Euripides
+Europa
+Europe
+European
+Europeanization
+Europeanizations
+Europeanize
+Europeanized
+Europeanizes
+Europeans
+Eurydice
+Euterpe
+euthanasia
+Eva
+evacuate
+evacuated
+evacuation
+evade
+evaded
+evades
+evading
+evaluate
+evaluated
+evaluates
+evaluating
+evaluation
+evaluations
+evaluative
+evaluator
+evaluators
+Evangeline
+Evans
+Evanston
+Evansville
+evaporate
+evaporated
+evaporating
+evaporation
+evaporative
+evasion
+evasive
+Eve
+Evelyn
+even
+evened
+evenhanded
+evenhandedly
+evenhandedness
+evening
+evenings
+evenly
+evenness
+evens
+Evensen
+event
+eventful
+eventfully
+events
+eventual
+eventualities
+eventuality
+eventually
+ever
+Eveready
+Everest
+Everett
+Everglade
+Everglades
+evergreen
+Everhart
+everlasting
+everlastingly
+evermore
+every
+everybody
+everyday
+everyone
+everything
+everywhere
+evict
+evicted
+evicting
+eviction
+evictions
+evicts
+evidence
+evidenced
+evidences
+evidencing
+evident
+evidently
+evil
+eviller
+evilly
+evils
+evince
+evinced
+evinces
+evoke
+evoked
+evokes
+evoking
+evolute
+evolutes
+evolution
+evolutionary
+evolutions
+evolve
+evolved
+evolves
+evolving
+ewe
+Ewen
+ewes
+Ewing
+ex
+exacerbate
+exacerbated
+exacerbates
+exacerbating
+exacerbation
+exacerbations
+exact
+exacted
+exacting
+exactingly
+exaction
+exactions
+exactitude
+exactly
+exactness
+exacts
+exaggerate
+exaggerated
+exaggerates
+exaggerating
+exaggeration
+exaggerations
+exalt
+exaltation
+exalted
+exalting
+exalts
+exam
+examination
+examinations
+examine
+examined
+examiner
+examiners
+examines
+examining
+example
+examples
+exams
+exasperate
+exasperated
+exasperates
+exasperating
+exasperation
+excavate
+excavated
+excavates
+excavating
+excavation
+excavations
+exceed
+exceeded
+exceeding
+exceedingly
+exceeds
+excel
+excelled
+excellence
+excellences
+excellency
+excellent
+excellently
+excelling
+excels
+except
+excepted
+excepting
+exception
+exceptionable
+exceptional
+exceptionally
+exceptions
+excepts
+excerpt
+excerpted
+excerpts
+excess
+excesses
+excessive
+excessively
+exchange
+exchangeable
+exchanged
+exchanges
+exchanging
+exchequer
+exchequers
+excise
+excised
+excises
+excising
+excision
+excitable
+excitation
+excitations
+excite
+excited
+excitedly
+excitement
+excites
+exciting
+excitingly
+exciton
+exclaim
+exclaimed
+exclaimer
+exclaimers
+exclaiming
+exclaims
+exclamation
+exclamations
+exclamatory
+exclude
+excluded
+excludes
+excluding
+exclusion
+exclusionary
+exclusions
+exclusive
+exclusively
+exclusiveness
+exclusivity
+excommunicate
+excommunicated
+excommunicates
+excommunicating
+excommunication
+excrete
+excreted
+excretes
+excreting
+excretion
+excretions
+excretory
+excruciate
+excursion
+excursions
+excusable
+excusably
+excuse
+excused
+excuses
+excusing
+exec
+executable
+execute
+executed
+executes
+executing
+execution
+executional
+executioner
+executions
+executive
+executives
+executor
+executors
+exemplar
+exemplary
+exemplification
+exemplified
+exemplifier
+exemplifiers
+exemplifies
+exemplify
+exemplifying
+exempt
+exempted
+exempting
+exemption
+exempts
+exercise
+exercised
+exerciser
+exercisers
+exercises
+exercising
+exert
+exerted
+exerting
+exertion
+exertions
+exerts
+Exeter
+exhale
+exhaled
+exhales
+exhaling
+exhaust
+exhausted
+exhaustedly
+exhausting
+exhaustion
+exhaustive
+exhaustively
+exhausts
+exhibit
+exhibited
+exhibiting
+exhibition
+exhibitions
+exhibitor
+exhibitors
+exhibits
+exhilarate
+exhort
+exhortation
+exhortations
+exhume
+exigency
+exile
+exiled
+exiles
+exiling
+exist
+existed
+existence
+existent
+existential
+existentialism
+existentialist
+existentialists
+existentially
+existing
+exists
+exit
+exited
+exiting
+exits
+exodus
+exorbitant
+exorbitantly
+exorcism
+exorcist
+exoskeleton
+exotic
+expand
+expandable
+expanded
+expander
+expanders
+expanding
+expands
+expanse
+expanses
+expansible
+expansion
+expansionism
+expansions
+expansive
+expect
+expectancy
+expectant
+expectantly
+expectation
+expectations
+expected
+expectedly
+expecting
+expectingly
+expects
+expediency
+expedient
+expediently
+expedite
+expedited
+expedites
+expediting
+expedition
+expeditions
+expeditious
+expeditiously
+expel
+expelled
+expelling
+expels
+expend
+expendable
+expended
+expending
+expenditure
+expenditures
+expends
+expense
+expenses
+expensive
+expensively
+experience
+experienced
+experiences
+experiencing
+experiment
+experimental
+experimentally
+experimentation
+experimentations
+experimented
+experimenter
+experimenters
+experimenting
+experiments
+expert
+expertise
+expertly
+expertness
+experts
+expiration
+expirations
+expire
+expired
+expires
+expiring
+explain
+explainable
+explained
+explainer
+explainers
+explaining
+explains
+explanation
+explanations
+explanatory
+expletive
+explicit
+explicitly
+explicitness
+explode
+exploded
+explodes
+exploding
+exploit
+exploitable
+exploitation
+exploitations
+exploited
+exploiter
+exploiters
+exploiting
+exploits
+exploration
+explorations
+exploratory
+explore
+explored
+explorer
+explorers
+explores
+exploring
+explosion
+explosions
+explosive
+explosively
+explosives
+exponent
+exponential
+exponentially
+exponentials
+exponentiate
+exponentiated
+exponentiates
+exponentiating
+exponentiation
+exponentiations
+exponents
+export
+exportation
+exported
+exporter
+exporters
+exporting
+exports
+expose
+exposed
+exposer
+exposers
+exposes
+exposing
+exposition
+expositions
+expository
+exposure
+exposures
+expound
+expounded
+expounder
+expounding
+expounds
+express
+expressed
+expresses
+expressibility
+expressible
+expressibly
+expressing
+expression
+expressions
+expressive
+expressively
+expressiveness
+expressly
+expulsion
+expunge
+expunged
+expunges
+expunging
+expurgate
+exquisite
+exquisitely
+exquisiteness
+extant
+extemporaneous
+extend
+extendable
+extended
+extending
+extends
+extensibility
+extensible
+extension
+extensions
+extensive
+extensively
+extent
+extents
+extenuate
+extenuated
+extenuating
+extenuation
+exterior
+exteriors
+exterminate
+exterminated
+exterminates
+exterminating
+extermination
+external
+externally
+extinct
+extinction
+extinguish
+extinguished
+extinguisher
+extinguishes
+extinguishing
+extirpate
+extol
+extort
+extorted
+extortion
+extra
+extract
+extracted
+extracting
+extraction
+extractions
+extractor
+extractors
+extracts
+extracurricular
+extramarital
+extraneous
+extraneously
+extraneousness
+extraordinarily
+extraordinariness
+extraordinary
+extrapolate
+extrapolated
+extrapolates
+extrapolating
+extrapolation
+extrapolations
+extras
+extraterrestrial
+extravagance
+extravagant
+extravagantly
+extravaganza
+extremal
+extreme
+extremely
+extremes
+extremist
+extremists
+extremities
+extremity
+extricate
+extrinsic
+extrovert
+exuberance
+exult
+exultation
+Exxon
+eye
+eyeball
+eyebrow
+eyebrows
+eyed
+eyeful
+eyeglass
+eyeglasses
+eyeing
+eyelash
+eyelid
+eyelids
+eyepiece
+eyepieces
+eyer
+eyers
+eyes
+eyesight
+eyewitness
+eyewitnesses
+eying
+Ezekiel
+Ezra
+Faber
+Fabian
+fable
+fabled
+fables
+fabric
+fabricate
+fabricated
+fabricates
+fabricating
+fabrication
+fabrics
+fabulous
+fabulously
+facade
+facaded
+facades
+face
+faced
+faces
+facet
+faceted
+facets
+facial
+facile
+facilely
+facilitate
+facilitated
+facilitates
+facilitating
+facilities
+facility
+facing
+facings
+facsimile
+facsimiles
+fact
+faction
+factions
+factious
+facto
+factor
+factored
+factorial
+factories
+factoring
+factorization
+factorizations
+factors
+factory
+facts
+factual
+factually
+faculties
+faculty
+fade
+faded
+fadeout
+fader
+faders
+fades
+fading
+Fafnir
+fag
+Fagin
+fags
+Fahey
+Fahrenheit
+Fahrenheits
+fail
+failed
+failing
+failings
+fails
+failsoft
+failure
+failures
+fain
+faint
+fainted
+fainter
+faintest
+fainting
+faintly
+faintness
+faints
+fair
+Fairbanks
+Fairchild
+fairer
+fairest
+Fairfax
+Fairfield
+fairies
+fairing
+fairly
+Fairmont
+fairness
+Fairport
+fairs
+Fairview
+fairy
+fairyland
+faith
+faithful
+faithfully
+faithfulness
+faithless
+faithlessly
+faithlessness
+faiths
+fake
+faked
+faker
+fakes
+faking
+falcon
+falconer
+falcons
+Falk
+Falkland
+Falklands
+fall
+fallacies
+fallacious
+fallacy
+fallen
+fallibility
+fallible
+falling
+Fallopian
+fallout
+fallow
+falls
+Falmouth
+false
+falsehood
+falsehoods
+falsely
+falseness
+falsification
+falsified
+falsifies
+falsify
+falsifying
+falsity
+Falstaff
+falter
+faltered
+falters
+fame
+famed
+fames
+familial
+familiar
+familiarities
+familiarity
+familiarization
+familiarize
+familiarized
+familiarizes
+familiarizing
+familiarly
+familiarness
+families
+familism
+family
+famine
+famines
+famish
+famous
+famously
+fan
+fanatic
+fanaticism
+fanatics
+fancied
+fancier
+fanciers
+fancies
+fanciest
+fanciful
+fancifully
+fancily
+fanciness
+fancy
+fancying
+fanfare
+fanfold
+fang
+fangled
+fangs
+fanned
+Fannies
+fanning
+Fanny
+fanout
+fans
+fantasies
+fantasize
+fantastic
+fantasy
+FAQ
+far
+farad
+Faraday
+faraway
+Farber
+farce
+farces
+fare
+fared
+fares
+farewell
+farewells
+farfetched
+Fargo
+farina
+faring
+Farkas
+Farley
+farm
+farmed
+farmer
+farmers
+farmhouse
+farmhouses
+farming
+Farmington
+farmland
+farms
+farmyard
+farmyards
+Farnsworth
+Farrell
+farsighted
+farther
+farthest
+farthing
+fascicle
+fascinate
+fascinated
+fascinates
+fascinating
+fascination
+fascism
+fascist
+fashion
+fashionable
+fashionably
+fashioned
+fashioning
+fashions
+fast
+fasted
+fasten
+fastened
+fastener
+fasteners
+fastening
+fastenings
+fastens
+faster
+fastest
+fastidious
+fasting
+fastness
+fasts
+fat
+fatal
+fatalities
+fatality
+fatally
+fatals
+fate
+fated
+fateful
+fates
+father
+fathered
+fatherland
+fatherly
+fathers
+fathom
+fathomed
+fathoming
+fathoms
+fatigue
+fatigued
+fatigues
+fatiguing
+Fatima
+fatness
+fats
+fatten
+fattened
+fattener
+fatteners
+fattening
+fattens
+fatter
+fattest
+fatty
+faucet
+Faulkner
+Faulknerian
+fault
+faulted
+faulting
+faultless
+faultlessly
+faults
+faulty
+faun
+fauna
+Fauntleroy
+Faust
+Faustian
+Faustus
+favor
+favorable
+favorably
+favored
+favorer
+favoring
+favorite
+favorites
+favoritism
+favors
+Fawkes
+fawn
+fawned
+fawning
+fawns
+Fayette
+Fayetteville
+faze
+Fe
+fear
+feared
+fearful
+fearfully
+fearing
+fearless
+fearlessly
+fearlessness
+fears
+fearsome
+feasibility
+feasible
+feast
+feasted
+feasting
+feasts
+feat
+feather
+featherbed
+featherbedding
+feathered
+featherer
+featherers
+feathering
+Featherman
+feathers
+featherweight
+feathery
+feats
+feature
+featured
+features
+featuring
+Februaries
+February
+fecund
+fed
+Fedders
+federal
+federalist
+federally
+federals
+federation
+Fedora
+fee
+feeble
+feebleness
+feebler
+feeblest
+feebly
+feed
+feedback
+feeder
+feeders
+feeding
+feedings
+feeds
+feel
+feeler
+feelers
+feeling
+feelingly
+feelings
+feels
+Feeney
+fees
+feet
+feign
+feigned
+feigning
+Felder
+Feldman
+Felice
+Felicia
+felicities
+felicity
+feline
+Felix
+fell
+fellatio
+felled
+felling
+Fellini
+fellow
+fellows
+fellowship
+fellowships
+felon
+felonious
+felony
+felt
+felts
+female
+females
+feminine
+femininity
+feminism
+feminist
+femur
+femurs
+fen
+fence
+fenced
+fencer
+fencers
+fences
+fencing
+fend
+Fenton
+Fenwick
+Ferber
+Ferdinand
+Ferdinando
+Ferguson
+Fermat
+ferment
+fermentation
+fermentations
+fermented
+fermenting
+ferments
+Fermi
+fern
+Fernando
+ferns
+ferocious
+ferociously
+ferociousness
+ferocity
+Ferreira
+Ferrer
+ferret
+ferried
+ferries
+ferrite
+ferry
+fertile
+fertilely
+fertility
+fertilization
+fertilize
+fertilized
+fertilizer
+fertilizers
+fertilizes
+fertilizing
+fervent
+fervently
+fervor
+fervors
+Fess
+festival
+festivals
+festive
+festively
+festivities
+festivity
+fetal
+fetch
+fetched
+fetches
+fetching
+fetchingly
+fetid
+fetish
+fetter
+fettered
+fetters
+fettle
+fetus
+feud
+feudal
+feudalism
+feuds
+fever
+fevered
+feverish
+feverishly
+fevers
+few
+fewer
+fewest
+fewness
+fiance
+fiancee
+fiasco
+fiat
+fib
+fibbing
+fiber
+Fiberglas
+fibers
+Fibonacci
+fibrosities
+fibrosity
+fibrous
+fibrously
+fickle
+fickleness
+fiction
+fictional
+fictionally
+fictions
+fictitious
+fictitiously
+fiddle
+fiddled
+fiddler
+fiddles
+fiddlestick
+fiddlesticks
+fiddling
+Fidel
+fidelity
+fidget
+fiducial
+fief
+fiefdom
+field
+fielded
+fielder
+fielders
+fielding
+Fields
+fieldwork
+fiend
+fiendish
+fierce
+fiercely
+fierceness
+fiercer
+fiercest
+fiery
+fife
+fifteen
+fifteens
+fifteenth
+fifth
+fifties
+fiftieth
+fifty
+fig
+Figaro
+fight
+fighter
+fighters
+fighting
+fights
+figs
+figurative
+figuratively
+figure
+figured
+figures
+figuring
+figurings
+Fiji
+Fijian
+Fijians
+filament
+filaments
+file
+filed
+filename
+filenames
+filer
+files
+filial
+filibuster
+filing
+filings
+Filipino
+Filipinos
+Filippo
+fill
+fillable
+filled
+filler
+fillers
+filling
+fillings
+Fillmore
+fills
+filly
+film
+filmed
+filming
+films
+filter
+filtered
+filtering
+filters
+filth
+filthier
+filthiest
+filthiness
+filthy
+fin
+final
+finality
+finalization
+finalize
+finalized
+finalizes
+finalizing
+finally
+finals
+finance
+financed
+finances
+financial
+financially
+financier
+financiers
+financing
+find
+finder
+finders
+finding
+findings
+finds
+fine
+fined
+finely
+fineness
+finer
+fines
+finesse
+finessed
+finessing
+finest
+finger
+fingered
+fingering
+fingerings
+fingernail
+fingerprint
+fingerprints
+fingers
+fingertip
+finicky
+fining
+finish
+finished
+finisher
+finishers
+finishes
+finishing
+finite
+finitely
+finiteness
+fink
+Finland
+Finley
+Finn
+Finnegan
+Finnish
+Finns
+finny
+fins
+Fiorello
+Fiori
+fir
+fire
+firearm
+firearms
+fireboat
+firebreak
+firebug
+firecracker
+fired
+fireflies
+firefly
+firehouse
+firelight
+fireman
+firemen
+fireplace
+fireplaces
+firepower
+fireproof
+firer
+firers
+fires
+fireside
+Firestone
+firewall
+firewood
+fireworks
+firing
+firings
+firm
+firmament
+firmed
+firmer
+firmest
+firming
+firmly
+firmness
+firms
+firmware
+first
+firsthand
+firstly
+firsts
+fiscal
+fiscally
+Fischbein
+Fischer
+fish
+fished
+fisher
+fisherman
+fishermen
+fishers
+fishery
+fishes
+fishing
+Fishkill
+fishmonger
+fishpond
+fishy
+Fisk
+Fiske
+fission
+fissure
+fissured
+fist
+fisted
+fisticuff
+fists
+fit
+Fitch
+Fitchburg
+fitful
+fitfully
+fitly
+fitness
+fits
+fitted
+fitter
+fitters
+fitting
+fittingly
+fittings
+Fitzgerald
+Fitzpatrick
+Fitzroy
+five
+fivefold
+fives
+fix
+fixate
+fixated
+fixates
+fixating
+fixation
+fixations
+fixed
+fixedly
+fixedness
+fixer
+fixers
+fixes
+fixing
+fixings
+fixture
+fixtures
+Fizeau
+fizzle
+fizzled
+flabbergast
+flabbergasted
+flack
+flag
+flagellate
+flagged
+flagging
+Flagler
+flagpole
+flagrant
+flagrantly
+flags
+Flagstaff
+flail
+flair
+flak
+flake
+flaked
+flakes
+flaking
+flaky
+flam
+flamboyant
+flame
+flamed
+flamer
+flamers
+flames
+flaming
+flammable
+Flanagan
+Flanders
+flank
+flanked
+flanker
+flanking
+flanks
+flannel
+flannels
+flap
+flaps
+flare
+flared
+flares
+flaring
+flash
+flashback
+flashed
+flasher
+flashers
+flashes
+flashing
+flashlight
+flashlights
+flashy
+flask
+flat
+flatbed
+flatly
+flatness
+flats
+flatten
+flattened
+flattening
+flatter
+flattered
+flatterer
+flattering
+flattery
+flattest
+flatulent
+flatus
+flatworm
+flaunt
+flaunted
+flaunting
+flaunts
+flavor
+flavored
+flavoring
+flavorings
+flavors
+flaw
+flawed
+flawless
+flawlessly
+flaws
+flax
+flaxen
+flea
+fleas
+fled
+Fledermaus
+fledged
+fledgling
+fledglings
+flee
+fleece
+fleeces
+fleecy
+fleeing
+flees
+fleet
+fleetest
+fleeting
+fleetly
+fleetness
+fleets
+Fleischman
+Fleisher
+Fleming
+Flemings
+Flemish
+Flemished
+Flemishes
+Flemishing
+flesh
+fleshed
+fleshes
+fleshing
+fleshly
+fleshy
+Fletcher
+Fletcherize
+Fletcherizes
+flew
+flex
+flexibilities
+flexibility
+flexible
+flexibly
+flick
+flicked
+flicker
+flickering
+flicking
+flicks
+flier
+fliers
+flies
+flight
+flights
+flimsy
+flinch
+flinched
+flinches
+flinching
+fling
+flings
+flint
+flinty
+flip
+flipflop
+flipped
+flips
+flirt
+flirtation
+flirtatious
+flirted
+flirting
+flirts
+flit
+flitting
+Flo
+float
+floated
+floater
+floating
+floats
+flock
+flocked
+flocking
+flocks
+flog
+flogging
+flood
+flooded
+flooding
+floodlight
+floodlit
+floods
+floor
+floored
+flooring
+floorings
+floors
+flop
+floppies
+floppily
+flopping
+floppy
+flops
+flora
+floral
+Florence
+Florentine
+florid
+Florida
+Floridian
+Floridians
+florin
+florist
+floss
+flossed
+flosses
+flossing
+flotation
+flotilla
+flounder
+floundered
+floundering
+flounders
+flour
+floured
+flourish
+flourished
+flourishes
+flourishing
+flow
+flowchart
+flowcharting
+flowcharts
+flowed
+flower
+flowered
+floweriness
+flowering
+flowerpot
+flowers
+flowery
+flowing
+flown
+flows
+Floyd
+flu
+fluctuate
+fluctuates
+fluctuating
+fluctuation
+fluctuations
+flue
+fluency
+fluent
+fluently
+fluff
+fluffier
+fluffiest
+fluffy
+fluid
+fluidity
+fluidly
+fluids
+fluke
+flung
+flunked
+fluoresce
+fluorescent
+flurried
+flurry
+flush
+flushed
+flushes
+flushing
+flute
+fluted
+fluting
+flutter
+fluttered
+fluttering
+flutters
+flux
+fly
+flyable
+flyer
+flyers
+flying
+Flynn
+foal
+foam
+foamed
+foaming
+foams
+foamy
+fob
+fobbing
+focal
+focally
+foci
+focus
+focused
+focuses
+focusing
+focussed
+fodder
+foe
+foes
+fog
+Fogarty
+fogged
+foggier
+foggiest
+foggily
+fogging
+foggy
+fogs
+fogy
+foible
+foil
+foiled
+foiling
+foils
+foist
+fold
+folded
+folder
+folders
+folding
+foldout
+folds
+Foley
+foliage
+folk
+folklore
+folks
+folksong
+folksy
+follies
+follow
+followed
+follower
+followers
+following
+followings
+follows
+folly
+Folsom
+Fomalhaut
+fond
+fonder
+fondle
+fondled
+fondles
+fondling
+fondly
+fondness
+font
+Fontaine
+Fontainebleau
+Fontana
+fonts
+food
+foods
+foodstuff
+foodstuffs
+fool
+fooled
+foolhardy
+fooling
+foolish
+foolishly
+foolishness
+foolproof
+fools
+foot
+footage
+football
+footballs
+footbridge
+Foote
+footed
+footer
+footers
+footfall
+foothill
+foothold
+footing
+footman
+footnote
+footnotes
+footpath
+footprint
+footprints
+footstep
+footsteps
+for
+forage
+foraged
+forages
+foraging
+foray
+forays
+forbade
+forbear
+forbearance
+forbears
+Forbes
+forbid
+forbidden
+forbidding
+forbids
+force
+forced
+forceful
+forcefully
+forcefulness
+forcer
+forces
+forcible
+forcibly
+forcing
+ford
+Fordham
+fords
+fore
+forearm
+forearms
+foreboding
+forecast
+forecasted
+forecaster
+forecasters
+forecasting
+forecastle
+forecasts
+forefather
+forefathers
+forefinger
+forefingers
+forego
+foregoes
+foregoing
+foregone
+foreground
+forehead
+foreheads
+foreign
+foreigner
+foreigners
+foreigns
+foreman
+foremost
+forenoon
+forensic
+forerunners
+foresee
+foreseeable
+foreseen
+foresees
+foresight
+foresighted
+forest
+forestall
+forestalled
+forestalling
+forestallment
+forestalls
+forested
+forester
+foresters
+forestry
+forests
+foretell
+foretelling
+foretells
+foretold
+forever
+forewarn
+forewarned
+forewarning
+forewarnings
+forewarns
+forfeit
+forfeited
+forfeiture
+forgave
+forge
+forged
+forger
+forgeries
+forgery
+forges
+forget
+forgetful
+forgetfulness
+forgets
+forgettable
+forgettably
+forgetting
+forging
+forgivable
+forgivably
+forgive
+forgiven
+forgiveness
+forgives
+forgiving
+forgivingly
+forgot
+forgotten
+fork
+forked
+forking
+forklift
+forks
+forlorn
+forlornly
+form
+formal
+formalism
+formalisms
+formalities
+formality
+formalization
+formalizations
+formalize
+formalized
+formalizes
+formalizing
+formally
+formant
+formants
+format
+formation
+formations
+formative
+formatively
+formats
+formatted
+formatter
+formatters
+formatting
+formed
+former
+formerly
+Formica
+Formicas
+formidable
+forming
+Formosa
+Formosan
+forms
+formula
+formulae
+formulas
+formulate
+formulated
+formulates
+formulating
+formulation
+formulations
+formulator
+formulators
+fornication
+Forrest
+forsake
+forsaken
+forsakes
+forsaking
+Forsythe
+fort
+forte
+Fortescue
+FORTH
+forthcoming
+forthright
+forthwith
+fortier
+forties
+fortieth
+fortification
+fortifications
+fortified
+fortifies
+fortify
+fortifying
+fortiori
+fortitude
+fortnight
+fortnightly
+FORTRAN
+Fortran
+fortress
+fortresses
+forts
+fortuitous
+fortuitously
+fortunate
+fortunately
+fortune
+fortunes
+forty
+forum
+forums
+forward
+forwarded
+forwarder
+forwarding
+forwardness
+forwards
+Foss
+fossil
+foster
+fostered
+fostering
+fosters
+fought
+foul
+fouled
+foulest
+fouling
+foully
+foulmouth
+foulness
+fouls
+found
+foundation
+foundations
+founded
+founder
+foundered
+founders
+founding
+foundling
+foundries
+foundry
+founds
+fount
+fountain
+fountains
+founts
+four
+fourfold
+Fourier
+fours
+fourscore
+foursome
+foursquare
+fourteen
+fourteens
+fourteenth
+fourth
+fowl
+fowler
+fowls
+fox
+foxes
+Foxhall
+fraction
+fractional
+fractionally
+fractions
+fracture
+fractured
+fractures
+fracturing
+fragile
+fragment
+fragmentary
+fragmentation
+fragmented
+fragmenting
+fragments
+fragrance
+fragrances
+fragrant
+fragrantly
+frail
+frailest
+frailty
+frame
+framed
+framer
+frames
+framework
+frameworks
+framing
+Fran
+franc
+Francaise
+France
+Frances
+Francesca
+Francesco
+franchise
+franchises
+Francie
+Francine
+Francis
+Franciscan
+Franciscans
+Francisco
+Francize
+Francizes
+Franco
+Francois
+Francoise
+francs
+frank
+franked
+Frankel
+franker
+frankest
+Frankfort
+Frankfurt
+Frankie
+franking
+Franklinization
+Franklinizations
+frankly
+frankness
+franks
+Franny
+frantic
+frantically
+Franz
+Fraser
+fraternal
+fraternally
+fraternities
+fraternity
+Frau
+fraud
+frauds
+fraudulent
+fraught
+fray
+frayed
+fraying
+Frayne
+frays
+Frazier
+frazzle
+freak
+freakish
+freaks
+freckle
+freckled
+freckles
+Fred
+Freddie
+Freddy
+Frederic
+Frederick
+Fredericks
+Fredericksburg
+Frederico
+Fredericton
+Fredholm
+Fredrick
+Fredrickson
+free
+freed
+Freedman
+freedom
+freedoms
+freeing
+freeings
+freely
+freeman
+Freemason
+Freemasonry
+Freemasons
+freeness
+Freeport
+freer
+frees
+freest
+freestyle
+Freetown
+freeway
+freewheel
+freeze
+freezer
+freezers
+freezes
+freezing
+Freida
+freight
+freighted
+freighter
+freighters
+freighting
+freights
+French
+Frenchize
+Frenchizes
+Frenchman
+Frenchmen
+frenetic
+frenzied
+frenzy
+freon
+frequencies
+frequency
+frequent
+frequented
+frequenter
+frequenters
+frequenting
+frequently
+frequents
+fresco
+frescoes
+fresh
+freshen
+freshened
+freshener
+fresheners
+freshening
+freshens
+fresher
+freshest
+freshly
+freshman
+freshmen
+freshness
+freshwater
+Fresnel
+Fresno
+fret
+fretful
+fretfully
+fretfulness
+Freud
+Freudian
+Freudianism
+Freudianisms
+Freudians
+Frey
+Freya
+friar
+friars
+fricative
+fricatives
+Frick
+friction
+frictionless
+frictions
+Friday
+Fridays
+fried
+Friedman
+Friedrich
+friend
+friendless
+friendlier
+friendliest
+friendliness
+friendly
+friends
+friendship
+friendships
+fries
+Friesland
+frieze
+friezes
+frigate
+frigates
+Frigga
+fright
+frighten
+frightened
+frightening
+frighteningly
+frightens
+frightful
+frightfully
+frightfulness
+frigid
+Frigidaire
+frill
+frills
+fringe
+fringed
+Frisbee
+Frisia
+Frisian
+frisk
+frisked
+frisking
+frisks
+frisky
+Frito
+fritter
+Fritz
+frivolity
+frivolous
+frivolously
+fro
+frock
+frocks
+frog
+frogs
+frolic
+frolics
+from
+front
+frontage
+frontal
+fronted
+frontier
+frontiers
+frontiersman
+frontiersmen
+fronting
+fronts
+frost
+Frostbelt
+frostbite
+frostbitten
+frosted
+frosting
+frosts
+frosty
+froth
+frothing
+frothy
+frown
+frowned
+frowning
+frowns
+froze
+frozen
+frozenly
+Fruehauf
+frugal
+frugally
+fruit
+fruitful
+fruitfully
+fruitfulness
+fruition
+fruitless
+fruitlessly
+fruits
+frustrate
+frustrated
+frustrates
+frustrating
+frustration
+frustrations
+fry
+Frye
+Fuchs
+Fuchsia
+fudge
+fuel
+fueled
+fueling
+fuels
+fugitive
+fugitives
+fugue
+Fuji
+Fujitsu
+Fulbright
+Fulbrights
+fulcrum
+fulfill
+fulfilled
+fulfilling
+fulfillment
+fulfillments
+fulfills
+full
+fuller
+Fullerton
+fullest
+fullness
+fully
+fulminate
+Fulton
+fumble
+fumbled
+fumbling
+fume
+fumed
+fumes
+fuming
+fun
+function
+functional
+functionalities
+functionality
+functionally
+functionals
+functionary
+functioned
+functioning
+functions
+functor
+functors
+fund
+fundamental
+fundamentally
+fundamentals
+funded
+funder
+funders
+funding
+funds
+funeral
+funerals
+funereal
+fungal
+fungi
+fungible
+fungicide
+fungus
+funk
+funnel
+funneled
+funneling
+funnels
+funnier
+funniest
+funnily
+funniness
+funny
+fur
+furies
+furious
+furiouser
+furiously
+furlong
+furlough
+Furman
+furnace
+furnaces
+furnish
+furnished
+furnishes
+furnishing
+furnishings
+furniture
+furrier
+furrow
+furrowed
+furrows
+furry
+furs
+further
+furthered
+furthering
+furthermore
+furthermost
+furthers
+furthest
+furtive
+furtively
+furtiveness
+fury
+fuse
+fused
+fuses
+fusing
+fusion
+fuss
+fussing
+fussy
+futile
+futility
+future
+futures
+futuristic
+fuzz
+fuzzier
+fuzziness
+fuzzy
+gab
+gabardine
+gabbing
+Gaberones
+gable
+gabled
+gabler
+gables
+Gabon
+Gaborone
+Gabriel
+Gabrielle
+gad
+gadfly
+gadget
+gadgetry
+gadgets
+Gaelic
+Gaelicization
+Gaelicizations
+Gaelicize
+Gaelicizes
+gag
+gagged
+gagging
+gaging
+gags
+gaieties
+gaiety
+Gail
+gaily
+gain
+gained
+gainer
+gainers
+Gaines
+Gainesville
+gainful
+gaining
+gains
+gait
+gaited
+gaiter
+gaiters
+Gaithersburg
+galactic
+Galahad
+Galapagos
+Galatea
+Galatean
+Galateans
+Galatia
+Galatians
+galaxies
+galaxy
+Galbreath
+gale
+Galen
+Galilean
+Galilee
+Galileo
+gall
+Gallagher
+gallant
+gallantly
+gallantry
+gallants
+galled
+galleried
+galleries
+gallery
+galley
+galleys
+galling
+gallon
+gallons
+gallop
+galloped
+galloper
+galloping
+gallops
+Galloway
+gallows
+galls
+gallstone
+Gallup
+Galois
+Galt
+Galveston
+Galvin
+Galway
+Gambia
+gambit
+gamble
+gambled
+gambler
+gamblers
+gambles
+gambling
+gambol
+game
+gamed
+gamely
+gameness
+games
+gaming
+gamma
+gander
+Gandhi
+Gandhian
+gang
+Ganges
+gangland
+gangling
+gangplank
+gangrene
+gangs
+gangster
+gangsters
+Gannett
+gantry
+Ganymede
+gap
+gape
+gaped
+gapes
+gaping
+gaps
+garage
+garaged
+garages
+garb
+garbage
+garbages
+garbed
+garble
+garbled
+Garcia
+garden
+gardened
+gardener
+gardeners
+gardening
+gardens
+Gardner
+Garfield
+Garfunkel
+gargantuan
+gargle
+gargled
+gargles
+gargling
+Garibaldi
+garland
+garlanded
+garlic
+garment
+garments
+garner
+garnered
+Garnett
+garnish
+Garrett
+garrison
+garrisoned
+Garrisonian
+Garry
+garter
+garters
+Garth
+Garvey
+Gary
+gas
+Gascony
+gaseous
+gaseously
+gases
+gash
+gashes
+gasket
+gaslight
+gasoline
+gasp
+gasped
+Gaspee
+gasping
+gasps
+gassed
+gasser
+Gasset
+gassing
+gassings
+gassy
+Gaston
+gastric
+gastrointestinal
+gastronome
+gastronomy
+gate
+gated
+Gates
+gateway
+gateways
+gather
+gathered
+gatherer
+gatherers
+gathering
+gatherings
+gathers
+gating
+Gatlinburg
+gator
+Gatsby
+gauche
+gaudiness
+gaudy
+gauge
+gauged
+gauges
+Gauguin
+Gaul
+Gaulle
+Gauls
+gaunt
+Gauntley
+gauntness
+Gaussian
+Gautama
+gauze
+gave
+gavel
+Gavin
+gawk
+gawky
+gay
+gayer
+gayest
+gayety
+Gaylor
+Gaylord
+gayly
+gayness
+Gaynor
+gaze
+gazed
+gazelle
+gazer
+gazers
+gazes
+gazette
+gazing
+gear
+geared
+gearing
+gears
+Geary
+gecko
+geese
+Gehrig
+Geiger
+Geigy
+geisha
+gel
+gelatin
+gelatine
+gelatinous
+geld
+gelled
+gelling
+gels
+gem
+Gemini
+Geminid
+Gemma
+gems
+gender
+genders
+gene
+genealogy
+general
+generalist
+generalists
+generalities
+generality
+generalization
+generalizations
+generalize
+generalized
+generalizer
+generalizers
+generalizes
+generalizing
+generally
+generals
+generate
+generated
+generates
+generating
+generation
+generations
+generative
+generator
+generators
+generic
+generically
+generosities
+generosity
+generous
+generously
+generousness
+genes
+Genesco
+genesis
+genetic
+genetically
+Geneva
+Genevieve
+genial
+genially
+genie
+genius
+geniuses
+Genoa
+genre
+genres
+gent
+genteel
+gentile
+gentle
+gentleman
+gentlemanly
+gentlemen
+gentleness
+gentler
+gentlest
+gentlewoman
+gently
+gentry
+genuine
+genuinely
+genuineness
+genus
+geocentric
+geodesic
+geodesy
+geodetic
+Geoff
+Geoffrey
+geographer
+geographic
+geographical
+geographically
+geography
+geological
+geologist
+geologists
+geology
+geometric
+geometrical
+geometrically
+geometrician
+geometries
+geometry
+geophysical
+geophysics
+George
+Georges
+Georgetown
+Georgia
+Georgian
+Georgians
+geosynchronous
+Gerald
+Geraldine
+geranium
+Gerard
+Gerber
+gerbil
+Gerhard
+Gerhardt
+geriatric
+germ
+German
+germane
+Germania
+Germanic
+Germans
+Germantown
+Germany
+germicide
+germinal
+germinate
+germinated
+germinates
+germinating
+germination
+germs
+Gerome
+Gerry
+Gershwin
+Gershwins
+Gertrude
+gerund
+Gestapo
+gesture
+gestured
+gestures
+gesturing
+get
+getaway
+gets
+getter
+getters
+getting
+Getty
+Gettysburg
+geyser
+Ghana
+Ghanian
+ghastly
+Ghent
+ghetto
+ghost
+ghosted
+ghostly
+ghosts
+Giacomo
+giant
+giants
+gibberish
+Gibbons
+Gibbs
+Gibby
+Gibraltar
+Gibson
+giddiness
+Giddings
+giddy
+Gideon
+Gifford
+gift
+gifted
+gifts
+gig
+gigabit
+gigabits
+gigabyte
+gigabytes
+gigacycle
+gigahertz
+gigantic
+gigavolt
+gigawatt
+giggle
+giggled
+giggles
+giggling
+Gil
+Gilbertson
+Gilchrist
+gild
+gilded
+gilding
+gilds
+Gilead
+Giles
+Gilkson
+gill
+Gillespie
+Gillette
+Gilligan
+gills
+Gilmore
+gilt
+Gimbel
+gimmick
+gimmicks
+gin
+Gina
+ginger
+gingerbread
+gingerly
+gingham
+ginghams
+Ginn
+Gino
+gins
+Ginsberg
+Ginsburg
+Gioconda
+Giorgio
+Giovanni
+Gipsies
+Gipsy
+giraffe
+giraffes
+gird
+girder
+girders
+girdle
+girl
+girlfriend
+girlie
+girlish
+girls
+girt
+girth
+gist
+Giuliano
+Giuseppe
+give
+giveaway
+given
+giver
+givers
+gives
+giving
+glacial
+glacier
+glaciers
+glad
+gladden
+gladder
+gladdest
+glade
+gladiator
+gladly
+gladness
+Gladstone
+Gladys
+glamor
+glamorous
+glamour
+glance
+glanced
+glances
+glancing
+gland
+glands
+glandular
+glare
+glared
+glares
+glaring
+glaringly
+Glasgow
+glass
+glassed
+glasses
+glassy
+Glaswegian
+glaucoma
+glaze
+glazed
+glazer
+glazes
+glazing
+gleam
+gleamed
+gleaming
+gleams
+glean
+gleaned
+gleaner
+gleaning
+gleanings
+gleans
+Gleason
+glee
+gleeful
+gleefully
+glees
+glen
+Glenda
+Glendale
+Glenn
+glens
+Glidden
+glide
+glided
+glider
+gliders
+glides
+glimmer
+glimmered
+glimmering
+glimmers
+glimpse
+glimpsed
+glimpses
+glint
+glinted
+glinting
+glints
+glisten
+glistened
+glistening
+glistens
+glitch
+glitter
+glittered
+glittering
+glitters
+gloat
+global
+globally
+globe
+globes
+globular
+globularity
+gloom
+gloomily
+gloomy
+Gloria
+Gloriana
+glories
+glorification
+glorified
+glorifies
+glorify
+glorious
+gloriously
+glory
+glorying
+gloss
+glossaries
+glossary
+glossed
+glosses
+glossing
+glossy
+glottal
+Gloucester
+glove
+gloved
+glover
+glovers
+gloves
+gloving
+glow
+glowed
+glower
+glowers
+glowing
+glowingly
+glows
+glue
+glued
+glues
+gluing
+glut
+glutton
+Glynn
+gnash
+gnat
+gnats
+gnaw
+gnawed
+gnawing
+gnaws
+gnome
+gnomon
+gnu
+go
+Goa
+goad
+goaded
+goal
+goals
+goat
+goatee
+goatees
+goats
+gobble
+gobbled
+gobbler
+gobblers
+gobbles
+Gobi
+goblet
+goblets
+goblin
+goblins
+god
+Goddard
+goddess
+goddesses
+godfather
+Godfrey
+godhead
+godlike
+godly
+godmother
+godmothers
+Godot
+godparent
+gods
+godsend
+godson
+Godwin
+Godzilla
+goes
+Goethe
+Goff
+goggles
+Gogh
+going
+goings
+gold
+Golda
+Goldberg
+golden
+goldenly
+goldenness
+goldenrod
+Goldfield
+goldfish
+golding
+Goldman
+golds
+goldsmith
+Goldstein
+Goldstine
+Goldwater
+Goleta
+golf
+golfer
+golfers
+golfing
+Goliath
+golly
+Gomez
+gondola
+gone
+goner
+gong
+gongs
+Gonzales
+Gonzalez
+good
+goodby
+goodbye
+Goode
+goodies
+goodly
+Goodman
+goodness
+Goodrich
+goods
+goodwill
+Goodwin
+goody
+Goodyear
+goof
+goofed
+goofs
+goofy
+goose
+gopher
+Gordian
+Gordon
+gore
+Goren
+gorge
+gorgeous
+gorgeously
+gorges
+gorging
+Gorham
+gorilla
+gorillas
+Gorky
+Gorton
+gory
+gosh
+gospel
+gospelers
+gospels
+gossip
+gossiped
+gossiping
+gossips
+got
+Gotham
+Gothic
+Gothically
+Gothicism
+Gothicize
+Gothicized
+Gothicizer
+Gothicizers
+Gothicizes
+Gothicizing
+GOTO
+GOTOs
+gotten
+Gottfried
+Goucher
+Gouda
+gouge
+gouged
+gouges
+gouging
+Gould
+gourd
+gourmet
+gout
+govern
+governance
+governed
+governess
+governing
+government
+governmental
+governmentally
+governments
+governor
+governors
+governs
+gown
+gowned
+gowns
+grab
+grabbed
+grabber
+grabbers
+grabbing
+grabbings
+grabs
+grace
+graced
+graceful
+gracefully
+gracefulness
+graces
+Gracie
+gracing
+gracious
+graciously
+graciousness
+grad
+gradation
+gradations
+grade
+graded
+grader
+graders
+grades
+gradient
+gradients
+grading
+gradings
+gradual
+gradually
+graduate
+graduated
+graduates
+graduating
+graduation
+graduations
+Grady
+Graff
+graft
+grafted
+grafter
+grafting
+Grafton
+grafts
+graham
+grahams
+grail
+grain
+grained
+graining
+grains
+gram
+grammar
+grammarian
+grammars
+grammatic
+grammatical
+grammatically
+grams
+granaries
+granary
+grand
+grandchild
+grandchildren
+granddaughter
+grander
+grandest
+grandeur
+grandfather
+grandfathers
+grandiose
+grandly
+grandma
+grandmother
+grandmothers
+grandnephew
+grandness
+grandniece
+grandpa
+grandparent
+grands
+grandson
+grandsons
+grandstand
+grange
+granite
+granny
+granola
+grant
+granted
+grantee
+granter
+granting
+grantor
+grants
+granularity
+granulate
+granulated
+granulates
+granulating
+Granville
+grape
+grapefruit
+grapes
+grapevine
+graph
+graphed
+graphic
+graphical
+graphically
+graphics
+graphing
+graphite
+graphs
+grapple
+grappled
+grappling
+grasp
+graspable
+grasped
+grasping
+graspingly
+grasps
+grass
+grassed
+grassers
+grasses
+grassier
+grassiest
+grassland
+grassy
+grate
+grated
+grateful
+gratefully
+gratefulness
+grater
+grates
+gratification
+gratified
+gratify
+gratifying
+grating
+gratings
+gratis
+gratitude
+gratuities
+gratuitous
+gratuitously
+gratuitousness
+gratuity
+grave
+gravel
+gravelly
+gravely
+graven
+graveness
+graver
+Graves
+gravest
+gravestone
+graveyard
+gravitate
+gravitation
+gravitational
+gravity
+gravy
+gray
+grayed
+grayer
+grayest
+graying
+grayness
+Grayson
+graze
+grazed
+grazer
+grazing
+grease
+greased
+greases
+greasy
+great
+greater
+greatest
+greatly
+greatness
+Grecian
+Grecianize
+Grecianizes
+Greece
+greed
+greedily
+greediness
+greedy
+Greek
+Greekize
+Greekizes
+Greeks
+green
+Greenbelt
+Greenberg
+Greenblatt
+Greenbriar
+Greene
+greener
+greenery
+greenest
+Greenfeld
+Greenfield
+greengrocer
+greenhouse
+greenhouses
+greening
+greenish
+Greenland
+greenly
+greenness
+greens
+Greensboro
+Greensville
+Greentree
+Greenville
+greenware
+Greenwich
+Greer
+greet
+greeted
+greeter
+greeting
+greetings
+greets
+Greg
+gregarious
+Gregg
+Gregorian
+Gregory
+grenade
+grenades
+Grendel
+Grenier
+Grenoble
+Grenville
+Gresham
+Greta
+Gretchen
+grew
+grey
+greyest
+greyhound
+greying
+grid
+griddle
+gridiron
+grids
+grief
+griefs
+grievance
+grievances
+grieve
+grieved
+griever
+grievers
+grieves
+grieving
+grievingly
+grievous
+grievously
+Griffith
+grill
+grilled
+grilling
+grills
+grim
+grimace
+Grimaldi
+grime
+grimed
+Grimes
+grimly
+Grimm
+grimness
+grin
+grind
+grinder
+grinders
+grinding
+grindings
+grinds
+grindstone
+grindstones
+grinning
+grins
+grip
+gripe
+griped
+gripes
+griping
+gripped
+gripping
+grippingly
+grips
+Gris
+grisly
+grist
+Griswold
+grit
+grits
+gritty
+grizzly
+groan
+groaned
+groaner
+groaners
+groaning
+groans
+grocer
+groceries
+grocers
+grocery
+groggy
+groin
+groom
+groomed
+grooming
+grooms
+Groot
+groove
+grooved
+grooves
+grope
+groped
+gropes
+groping
+gross
+grossed
+grosser
+grosses
+grossest
+Grosset
+grossing
+grossly
+Grossman
+grossness
+Grosvenor
+grotesque
+grotesquely
+grotesques
+Groton
+grotto
+grottos
+ground
+grounded
+grounder
+grounders
+grounding
+grounds
+groundwork
+group
+grouped
+grouping
+groupings
+groups
+grouse
+grove
+grovel
+groveled
+groveling
+grovels
+Grover
+grovers
+groves
+grow
+grower
+growers
+growing
+growl
+growled
+growling
+growls
+grown
+grownup
+grownups
+grows
+growth
+growths
+grub
+grubby
+grubs
+grudge
+grudges
+grudgingly
+gruesome
+gruff
+gruffly
+grumble
+grumbled
+grumbles
+grumbling
+Grumman
+grunt
+grunted
+grunting
+grunts
+Grusky
+Gruyere
+Guadalupe
+Guam
+guano
+guarantee
+guaranteed
+guaranteeing
+guaranteer
+guaranteers
+guarantees
+guaranty
+guard
+guarded
+guardedly
+guardhouse
+Guardia
+guardian
+guardians
+guardianship
+guarding
+guards
+Guatemala
+Guatemalan
+gubernatorial
+Guelph
+Guenther
+guerrilla
+guerrillas
+guess
+guessed
+guesses
+guessing
+guesswork
+guest
+guests
+Guggenheim
+Guhleman
+Guiana
+guidance
+guide
+guidebook
+guidebooks
+guided
+guideline
+guidelines
+guides
+guiding
+guild
+guilder
+guilders
+guile
+Guilford
+guilt
+guiltier
+guiltiest
+guiltily
+guiltiness
+guiltless
+guiltlessly
+guilty
+guinea
+Guinevere
+guise
+guises
+guitar
+guitars
+Gujarat
+Gujarati
+gulch
+gulches
+gulf
+gulfs
+gull
+Gullah
+gulled
+gullies
+gulling
+gulls
+gully
+gulp
+gulped
+gulps
+gum
+gumming
+gumption
+gums
+gun
+Gunderson
+gunfire
+gunman
+gunmen
+Gunnar
+gunned
+gunner
+gunners
+gunnery
+gunning
+gunny
+gunplay
+gunpowder
+guns
+gunshot
+Gunther
+gurgle
+Gurkha
+guru
+Gus
+gush
+gushed
+gusher
+gushes
+gushing
+gust
+Gustafson
+Gustav
+Gustave
+Gustavus
+gusto
+gusts
+gusty
+gut
+Gutenberg
+Guthrie
+guts
+gutsy
+gutter
+guttered
+gutters
+gutting
+guttural
+guy
+Guyana
+guyed
+guyer
+guyers
+guying
+guys
+Gwen
+Gwyn
+gymnasium
+gymnasiums
+gymnast
+gymnastic
+gymnastics
+gymnasts
+gypsies
+gypsy
+gyro
+gyrocompass
+gyroscope
+gyroscopes
+ha
+Haag
+Haas
+habeas
+Haberman
+Habib
+habit
+habitat
+habitation
+habitations
+habitats
+habits
+habitual
+habitually
+habitualness
+hack
+hacked
+hacker
+hackers
+Hackett
+hacking
+hackneyed
+hacks
+hacksaw
+had
+Hadamard
+Haddad
+haddock
+Hades
+Hadley
+Hadrian
+Hafiz
+hag
+Hagen
+Hager
+haggard
+haggardly
+haggle
+Hagstrom
+Hague
+Hahn
+Haifa
+hail
+hailed
+hailing
+hails
+hailstone
+hailstorm
+Haines
+hair
+haircut
+haircuts
+hairier
+hairiness
+hairless
+hairpin
+hairs
+hairy
+Haiti
+Haitian
+Hal
+halcyon
+hale
+haler
+Haley
+half
+halfhearted
+halfway
+Halifax
+hall
+Halley
+Hallinan
+hallmark
+hallmarks
+hallow
+hallowed
+Halloween
+halls
+hallucinate
+hallway
+hallways
+halogen
+Halpern
+Halsey
+Halstead
+halt
+halted
+halter
+halters
+halting
+haltingly
+halts
+halve
+halved
+halvers
+Halverson
+halves
+halving
+ham
+Hamal
+Hamburg
+hamburger
+hamburgers
+Hamey
+Hamilton
+Hamiltonian
+Hamiltonians
+hamlet
+hamlets
+Hamlin
+hammer
+hammered
+hammering
+hammers
+Hammett
+hamming
+hammock
+hammocks
+Hammond
+hamper
+hampered
+hampers
+Hampshire
+Hampton
+hams
+hamster
+Han
+Hancock
+hand
+handbag
+handbags
+handbook
+handbooks
+handcuff
+handcuffed
+handcuffing
+handcuffs
+handed
+Handel
+handful
+handfuls
+handgun
+handicap
+handicapped
+handicaps
+handier
+handiest
+handily
+handiness
+handing
+handiwork
+handkerchief
+handkerchiefs
+handle
+handled
+handler
+handlers
+handles
+handling
+handmaid
+handout
+hands
+handshake
+handshakes
+handshaking
+handsome
+handsomely
+handsomeness
+handsomer
+handsomest
+handwriting
+handwritten
+handy
+Haney
+Hanford
+hang
+hangar
+hangars
+hanged
+hanger
+hangers
+hanging
+hangman
+hangmen
+hangout
+hangover
+hangovers
+hangs
+Hankel
+Hanley
+Hanlon
+Hanna
+Hannah
+Hannibal
+Hanoi
+Hanover
+Hanoverian
+Hanoverianize
+Hanoverianizes
+Hanoverize
+Hanoverizes
+Hans
+Hansel
+Hansen
+Hanson
+Hanukkah
+hap
+Hapgood
+haphazard
+haphazardly
+haphazardness
+hapless
+haplessly
+haplessness
+haply
+happen
+happened
+happening
+happenings
+happens
+happier
+happiest
+happily
+happiness
+happy
+Hapsburg
+harass
+harassed
+harasses
+harassing
+harassment
+Harbin
+harbinger
+harbor
+harbored
+harboring
+harbors
+Harcourt
+hard
+hardboiled
+hardcopy
+harden
+harder
+hardest
+hardhat
+Hardin
+hardiness
+Harding
+hardly
+hardness
+hardscrabble
+hardship
+hardships
+hardware
+hardwired
+hardworking
+hardy
+hare
+harelip
+harem
+hares
+hark
+harken
+Harlan
+Harlem
+Harley
+harlot
+harlots
+harm
+harmed
+harmful
+harmfully
+harmfulness
+harming
+harmless
+harmlessly
+harmlessness
+Harmon
+harmonic
+harmonics
+harmonies
+harmonious
+harmoniously
+harmoniousness
+Harmonist
+Harmonistic
+Harmonistically
+harmonize
+harmony
+harms
+harness
+harnessed
+harnessing
+Harold
+harp
+harper
+harpers
+harping
+Harpy
+harried
+harrier
+Harriet
+Harriman
+Harrington
+Harris
+Harrisburg
+Harrison
+Harrisonburg
+harrow
+harrowed
+harrowing
+harrows
+harry
+harsh
+harsher
+harshly
+harshness
+hart
+Hartford
+Hartley
+Hartman
+Harvard
+Harvardize
+Harvardizes
+harvest
+harvested
+harvester
+harvesting
+harvests
+Harvey
+Harveyize
+Harveyizes
+Harveys
+has
+hash
+hashed
+hasher
+hashes
+hashing
+hashish
+Haskell
+Haskins
+hassle
+haste
+hasten
+hastened
+hastening
+hastens
+hastily
+hastiness
+Hastings
+hasty
+hat
+hatch
+hatched
+hatchet
+hatchets
+hatching
+Hatchure
+hate
+hated
+hateful
+hatefully
+hatefulness
+hater
+hates
+Hatfield
+Hathaway
+hating
+hatred
+hats
+Hatteras
+Hattie
+Hattiesburg
+Hattize
+Hattizes
+Haugen
+haughtily
+haughtiness
+haughty
+haul
+hauled
+hauler
+hauling
+hauls
+haunch
+haunches
+haunt
+haunted
+haunter
+haunting
+haunts
+Hausa
+Hausdorff
+Hauser
+Havana
+have
+haven
+havens
+haves
+Havilland
+having
+havoc
+Hawaii
+Hawaiian
+hawk
+hawked
+hawker
+hawkers
+Hawkins
+hawks
+Hawley
+Hawthorne
+hay
+Hayden
+Haydn
+Hayes
+haying
+Haynes
+Hays
+haystack
+Hayward
+Haywood
+hazard
+hazardous
+hazards
+haze
+hazel
+hazes
+haziness
+hazy
+he
+head
+headache
+headaches
+headed
+header
+headers
+headgear
+heading
+headings
+headland
+headlands
+headlight
+headline
+headlined
+headlines
+headlining
+headlong
+headmaster
+headphone
+headquarters
+headroom
+heads
+headset
+headway
+heal
+healed
+healer
+healers
+Healey
+healing
+heals
+health
+healthful
+healthfully
+healthfulness
+healthier
+healthiest
+healthily
+healthiness
+healthy
+Healy
+heap
+heaped
+heaping
+heaps
+hear
+heard
+hearer
+hearers
+hearing
+hearings
+hearken
+hears
+hearsay
+Hearst
+heart
+heartbeat
+heartbreak
+hearten
+heartiest
+heartily
+heartiness
+heartless
+hearts
+Heartwood
+hearty
+heat
+heatable
+heated
+heatedly
+heater
+heaters
+heath
+heathen
+heather
+Heathkit
+Heathman
+heating
+heats
+heave
+heaved
+heaven
+heavenly
+heavens
+heaver
+heavers
+heaves
+heavier
+heaviest
+heavily
+heaviness
+heaving
+heavy
+heavyweight
+Hebe
+Hebraic
+Hebraicize
+Hebraicizes
+Hebrew
+Hebrews
+Hebrides
+Hecate
+heck
+heckle
+Heckman
+hectic
+Hecuba
+Hedda
+hedge
+hedged
+hedgehog
+hedgehogs
+hedges
+hedonism
+hedonist
+heed
+heeded
+heedless
+heedlessly
+heedlessness
+heeds
+heel
+heeled
+heelers
+heeling
+heels
+hefty
+Hegel
+Hegelian
+Hegelianize
+Hegelianizes
+hegemony
+Heidegger
+Heidelberg
+heifer
+height
+heighten
+heightened
+heightening
+heightens
+heights
+Heine
+Heinlein
+heinous
+heinously
+Heinrich
+Heinz
+Heinze
+heir
+heiress
+heiresses
+heirs
+Heisenberg
+Heiser
+held
+Helen
+Helena
+Helene
+Helga
+helical
+helicopter
+heliocentric
+Heliopolis
+helium
+helix
+hell
+Hellenic
+Hellenization
+Hellenizations
+Hellenize
+Hellenized
+Hellenizes
+Hellenizing
+Hellespont
+hellfire
+hellish
+Hellman
+hello
+hells
+helm
+helmet
+helmets
+Helmholtz
+helmsman
+Helmut
+help
+helped
+helper
+helpers
+helpful
+helpfully
+helpfulness
+helping
+helpless
+helplessly
+helplessness
+helpmate
+helps
+Helsinki
+Helvetica
+hem
+Hemingway
+hemisphere
+hemispheres
+hemlock
+hemlocks
+hemoglobin
+hemorrhoid
+hemostat
+hemostats
+hemp
+hempen
+Hempstead
+hems
+hen
+hence
+henceforth
+henchman
+henchmen
+Henderson
+Hendrick
+Hendricks
+Hendrickson
+Hendrix
+Henley
+Hennessey
+Hennessy
+Henning
+henpeck
+Henri
+Henrietta
+hens
+hepatitis
+Hepburn
+her
+Hera
+Heraclitus
+herald
+heralded
+heralding
+heralds
+herb
+Herbert
+herbivore
+herbivorous
+herbs
+Herculean
+Hercules
+herd
+herded
+herder
+herding
+herds
+here
+hereabout
+hereabouts
+hereafter
+hereby
+hereditary
+heredity
+Hereford
+herein
+hereinafter
+hereof
+heres
+heresy
+heretic
+heretics
+hereto
+heretofore
+hereunder
+herewith
+heritage
+heritages
+Herkimer
+Herman
+Hermann
+Hermes
+hermetic
+hermetically
+hermit
+Hermite
+hermitian
+hermits
+Hermosa
+Hernandez
+hero
+Herodotus
+heroes
+heroic
+heroically
+heroics
+heroin
+heroine
+heroines
+heroism
+heron
+herons
+herpes
+Herr
+herring
+herrings
+Herrington
+hers
+Herschel
+herself
+Hersey
+Hershel
+Hershey
+hertz
+Hertzog
+hesitant
+hesitantly
+hesitate
+hesitated
+hesitates
+hesitating
+hesitatingly
+hesitation
+hesitations
+Hesperus
+Hess
+Hesse
+Hessian
+Hessians
+Hester
+heterogeneity
+heterogeneous
+heterogeneously
+heterogeneousness
+heterogenous
+heterosexual
+Hetman
+Hettie
+Hetty
+Heublein
+heuristic
+heuristically
+heuristics
+Heusen
+Heuser
+hew
+hewed
+hewer
+Hewett
+Hewitt
+Hewlett
+hews
+hex
+hexadecimal
+hexagon
+hexagonal
+hexagonally
+hexagons
+hey
+Heywood
+hi
+Hiatt
+Hiawatha
+Hibbard
+hibernate
+Hibernia
+hick
+Hickey
+Hickeys
+Hickman
+Hickok
+hickory
+Hicks
+hid
+hidden
+hide
+hideous
+hideously
+hideousness
+hideout
+hideouts
+hides
+hiding
+hierarchal
+hierarchic
+hierarchical
+hierarchically
+hierarchies
+hierarchy
+Hieronymus
+Higgins
+high
+higher
+highest
+Highfield
+highland
+highlander
+highlands
+highlight
+highlighted
+highlighting
+highlights
+highly
+highness
+highnesses
+highway
+highwayman
+highwaymen
+highways
+hijack
+hijacked
+hike
+hiked
+hiker
+hikes
+hiking
+hilarious
+hilariously
+hilarity
+Hilbert
+Hildebrand
+hill
+Hillary
+hillbilly
+Hillcrest
+Hillel
+hillock
+hills
+Hillsboro
+Hillsdale
+hillside
+hillsides
+hilltop
+hilltops
+hilt
+Hilton
+hilts
+him
+Himalaya
+Himalayas
+Himmler
+himself
+hind
+hinder
+hindered
+hindering
+hinders
+Hindi
+hindrance
+hindrances
+hindsight
+Hindu
+Hinduism
+Hindus
+Hindustan
+Hines
+hinge
+hinged
+hinges
+Hinkle
+Hinman
+Hinsdale
+hint
+hinted
+hinting
+hints
+hip
+hippo
+Hippocrates
+Hippocratic
+hippopotamus
+hips
+Hiram
+hire
+hired
+hirer
+hirers
+hires
+Hirey
+hiring
+hirings
+Hiroshi
+Hiroshima
+Hirsch
+his
+Hispanic
+Hispanicize
+Hispanicizes
+Hispanics
+hiss
+hissed
+hisses
+hissing
+histogram
+histograms
+historian
+historians
+historic
+historical
+historically
+histories
+history
+hit
+Hitachi
+hitch
+Hitchcock
+hitched
+hitchhike
+hitchhiked
+hitchhiker
+hitchhikers
+hitchhikes
+hitchhiking
+hitching
+hither
+hitherto
+Hitler
+Hitlerian
+Hitlerism
+Hitlerite
+Hitlerites
+hits
+hitter
+hitters
+hitting
+hive
+Hoagland
+hoar
+hoard
+hoarder
+hoarding
+hoariness
+hoarse
+hoarsely
+hoarseness
+hoary
+Hobart
+Hobbes
+hobbies
+hobble
+hobbled
+hobbles
+hobbling
+Hobbs
+hobby
+hobbyhorse
+hobbyist
+hobbyists
+Hobday
+Hoboken
+hockey
+hodgepodge
+Hodges
+Hodgkin
+hoe
+hoes
+Hoff
+Hoffman
+hog
+hogging
+hogs
+hoist
+hoisted
+hoisting
+hoists
+Hokan
+Holbrook
+Holcomb
+hold
+holden
+holder
+holders
+holding
+holdings
+holds
+hole
+holed
+holes
+holiday
+holidays
+holies
+holiness
+holistic
+Holland
+Hollandaise
+Hollander
+Hollerith
+Hollingsworth
+Hollister
+hollow
+Holloway
+hollowed
+hollowing
+hollowly
+hollowness
+hollows
+holly
+Hollywood
+Hollywoodize
+Hollywoodizes
+Holm
+Holman
+Holmdel
+Holmes
+holocaust
+Holocene
+hologram
+holograms
+Holst
+Holstein
+holy
+Holyoke
+Holzman
+Hom
+homage
+home
+home-brew
+homed
+homeless
+homely
+homemade
+homemaker
+homemakers
+homeomorphic
+homeomorphism
+homeomorphisms
+homeopath
+homeowner
+homer
+Homeric
+homers
+homes
+homesick
+homesickness
+homespun
+homestead
+homesteader
+homesteaders
+homesteads
+homeward
+homewards
+homework
+homicidal
+homicide
+homing
+homo
+homogeneities
+homogeneity
+homogeneous
+homogeneously
+homogeneousness
+homomorphic
+homomorphism
+homomorphisms
+homosexual
+Honda
+Hondo
+Honduras
+hone
+honed
+honer
+hones
+honest
+honestly
+honesty
+honey
+honeybee
+honeycomb
+honeycombed
+honeydew
+honeymoon
+honeymooned
+honeymooner
+honeymooners
+honeymooning
+honeymoons
+honeysuckle
+Honeywell
+honing
+Honolulu
+honor
+honorable
+honorableness
+honorably
+honoraries
+honorarium
+honorary
+honored
+honorer
+honoring
+honors
+Honshu
+hood
+hooded
+hoodlum
+hoods
+hoodwink
+hoodwinked
+hoodwinking
+hoodwinks
+hoof
+hoofs
+hook
+hooked
+hooker
+hookers
+hooking
+hooks
+hookup
+hookups
+hoop
+hooper
+hoops
+Hoosier
+Hoosierize
+Hoosierizes
+hoot
+hooted
+hooter
+hooting
+hoots
+Hoover
+Hooverize
+Hooverizes
+hooves
+hop
+hope
+hoped
+hopeful
+hopefully
+hopefulness
+hopefuls
+hopeless
+hopelessly
+hopelessness
+hopes
+Hopi
+hoping
+Hopkins
+Hopkinsian
+hopper
+hoppers
+hopping
+hops
+Horace
+Horatio
+horde
+hordes
+horizon
+horizons
+horizontal
+horizontally
+hormone
+hormones
+horn
+Hornblower
+horned
+hornet
+hornets
+horns
+horny
+Horowitz
+horrendous
+horrendously
+horrible
+horribleness
+horribly
+horrid
+horridly
+horrified
+horrifies
+horrify
+horrifying
+horror
+horrors
+horse
+horseback
+horseflesh
+horsefly
+horseman
+horseplay
+horsepower
+horses
+horseshoe
+horseshoer
+horticulture
+Horton
+Horus
+hose
+hoses
+hospitable
+hospitably
+hospital
+hospitality
+hospitalize
+hospitalized
+hospitalizes
+hospitalizing
+hospitals
+host
+hostage
+hostages
+hosted
+hostess
+hostesses
+hostile
+hostilely
+hostilities
+hostility
+hosting
+hosts
+hot
+hotel
+hotels
+hotly
+hotness
+Hottentot
+hotter
+hottest
+Houdaille
+Houdini
+Houghton
+hound
+hounded
+hounding
+hounds
+hour
+hourglass
+hourly
+hours
+house
+houseboat
+housebroken
+housed
+houseflies
+housefly
+household
+householder
+householders
+households
+housekeeper
+housekeepers
+housekeeping
+houses
+housetop
+housetops
+housewife
+housewifely
+housewives
+housework
+housing
+Houston
+hovel
+hovels
+hover
+hovered
+hovering
+hovers
+how
+Howard
+Howe
+Howell
+however
+howl
+howled
+howler
+howling
+howls
+Hoyt
+Hrothgar
+hub
+Hubbard
+Hubbell
+Huber
+Hubert
+hubris
+hubs
+Huck
+huddle
+huddled
+huddling
+Hudson
+hue
+hues
+Huey
+Huffman
+hug
+huge
+hugely
+hugeness
+hugging
+Huggins
+Hugh
+Hughes
+Hugo
+huh
+hull
+hulls
+hum
+human
+humane
+humanely
+humaneness
+humanitarian
+humanities
+humanity
+humanly
+humanness
+humans
+humble
+humbled
+humbleness
+humbler
+humblest
+humbling
+humbly
+Humboldt
+humbug
+Hume
+humerus
+humid
+humidification
+humidified
+humidifier
+humidifiers
+humidifies
+humidify
+humidifying
+humidity
+humidly
+humiliate
+humiliated
+humiliates
+humiliating
+humiliation
+humiliations
+humility
+hummed
+Hummel
+humming
+hummingbird
+humor
+humored
+humorer
+humorers
+humoring
+humorous
+humorously
+humorousness
+humors
+hump
+humpback
+humped
+Humphrey
+Humpty
+hums
+Hun
+hunch
+hunched
+hunches
+hundred
+hundredfold
+hundreds
+hundredth
+hung
+Hungarian
+Hungary
+hunger
+hungered
+hungering
+hungers
+hungrier
+hungriest
+hungrily
+hungry
+hunk
+hunks
+Huns
+hunt
+hunted
+Hunter
+hunters
+hunting
+Huntington
+Huntley
+hunts
+huntsman
+Huntsville
+Hurd
+hurdle
+hurl
+hurled
+hurler
+hurlers
+hurling
+Huron
+Hurons
+hurrah
+hurricane
+hurricanes
+hurried
+hurriedly
+hurries
+hurry
+hurrying
+Hurst
+hurt
+hurting
+hurtle
+hurtling
+hurts
+Hurwitz
+husband
+husbandry
+husbands
+hush
+hushed
+hushes
+hushing
+husk
+husked
+husker
+huskiness
+husking
+husks
+husky
+hustle
+hustled
+hustler
+hustles
+hustling
+Huston
+hut
+hutch
+Hutchins
+Hutchinson
+Hutchison
+huts
+Huxley
+Huxtable
+hyacinth
+Hyades
+Hyannis
+hybrid
+Hyde
+hydra
+hydrant
+hydraulic
+hydro
+hydrodynamic
+hydrodynamics
+hydrogen
+hydrogens
+hyena
+hygiene
+Hyman
+hymen
+hymn
+hymns
+hyper
+hyperbola
+hyperbolic
+hypertext
+hyphen
+hyphenate
+hyphens
+hypnosis
+hypnotic
+hypocrisies
+hypocrisy
+hypocrite
+hypocrites
+hypodermic
+hypodermics
+hypotheses
+hypothesis
+hypothesize
+hypothesized
+hypothesizer
+hypothesizes
+hypothesizing
+hypothetical
+hypothetically
+hysteresis
+hysterical
+hysterically
+Ian
+Iberia
+Iberian
+Ibero-
+ibex
+ibid
+ibis
+Ibn
+Ibsen
+Icarus
+ice
+iceberg
+icebergs
+icebox
+iced
+Iceland
+Icelandic
+ices
+icicle
+iciness
+icing
+icings
+icon
+iconoclasm
+iconoclast
+icons
+icosahedra
+icosahedral
+icosahedron
+icy
+Ida
+Idaho
+idea
+ideal
+idealism
+idealistic
+idealization
+idealizations
+idealize
+idealized
+idealizes
+idealizing
+ideally
+ideals
+ideas
+idem
+idempotency
+idempotent
+identical
+identically
+identifiable
+identifiably
+identification
+identifications
+identified
+identifier
+identifiers
+identifies
+identify
+identifying
+identities
+identity
+ideological
+ideologically
+ideology
+idiocy
+idiom
+idiosyncrasies
+idiosyncrasy
+idiosyncratic
+idiot
+idiotic
+idiots
+idle
+idled
+idleness
+idler
+idlers
+idles
+idlest
+idling
+idly
+idol
+idolatry
+idols
+if
+Ifni
+igloo
+ignite
+ignition
+ignoble
+ignominious
+ignoramus
+ignorance
+ignorant
+ignorantly
+ignore
+ignored
+ignores
+ignoring
+Igor
+Ike
+Iliad
+Iliadize
+Iliadizes
+ill
+illegal
+illegalities
+illegality
+illegally
+illegitimate
+illicit
+illicitly
+Illinois
+illiteracy
+illiterate
+illness
+illnesses
+illogical
+illogically
+ills
+illuminate
+illuminated
+illuminates
+illuminating
+illumination
+illuminations
+illusion
+illusions
+illusive
+illusively
+illusory
+illustrate
+illustrated
+illustrates
+illustrating
+illustration
+illustrations
+illustrative
+illustratively
+illustrator
+illustrators
+illustrious
+illustriousness
+illy
+Ilona
+Ilyushin
+image
+Imagen
+imagery
+images
+imaginable
+imaginably
+imaginary
+imagination
+imaginations
+imaginative
+imaginatively
+imagine
+imagined
+imagines
+imaging
+imagining
+imaginings
+imbalance
+imbalances
+imbecile
+imbibe
+Imbrium
+imitate
+imitated
+imitates
+imitating
+imitation
+imitations
+imitative
+immaculate
+immaculately
+immaterial
+immaterially
+immature
+immaturity
+immediacies
+immediacy
+immediate
+immediately
+immemorial
+immense
+immensely
+immerse
+immersed
+immerses
+immersion
+immigrant
+immigrants
+immigrate
+immigrated
+immigrates
+immigrating
+immigration
+imminent
+imminently
+immoderate
+immodest
+immoral
+immortal
+immortality
+immortally
+immovability
+immovable
+immovably
+immune
+immunities
+immunity
+immunization
+immutable
+imp
+impact
+impacted
+impacting
+impaction
+impactor
+impactors
+impacts
+impair
+impaired
+impairing
+impairs
+impale
+impart
+imparted
+impartial
+impartially
+imparts
+impasse
+impassive
+impatience
+impatient
+impatiently
+impeach
+impeachable
+impeached
+impeachment
+impeccable
+impedance
+impedances
+impede
+impeded
+impedes
+impediment
+impediments
+impeding
+impel
+impelled
+impelling
+impend
+impending
+impenetrability
+impenetrable
+impenetrably
+imperative
+imperatively
+imperatives
+imperceivable
+imperceptible
+imperfect
+imperfection
+imperfections
+imperfectly
+imperial
+imperialism
+imperialist
+imperialists
+imperil
+imperiled
+imperious
+imperiously
+impermanence
+impermanent
+impermeable
+impermissible
+impersonal
+impersonally
+impersonate
+impersonated
+impersonates
+impersonating
+impersonation
+impersonations
+impertinent
+impertinently
+impervious
+imperviously
+impetuous
+impetuously
+impetus
+impinge
+impinged
+impinges
+impinging
+impious
+implacable
+implant
+implanted
+implanting
+implants
+implausible
+implement
+implementable
+implementation
+implementations
+implemented
+implementer
+implementing
+implementor
+implementors
+implements
+implicant
+implicants
+implicate
+implicated
+implicates
+implicating
+implication
+implications
+implicit
+implicitly
+implicitness
+implied
+implies
+implore
+implored
+imploring
+imply
+implying
+impolite
+import
+importance
+important
+importantly
+importation
+imported
+importer
+importers
+importing
+imports
+impose
+imposed
+imposes
+imposing
+imposition
+impositions
+impossibilities
+impossibility
+impossible
+impossibly
+impostor
+impostors
+impotence
+impotency
+impotent
+impound
+impoverish
+impoverished
+impoverishment
+impracticable
+impractical
+impracticality
+impractically
+imprecise
+imprecisely
+imprecision
+impregnable
+impregnate
+impress
+impressed
+impresser
+impresses
+impressible
+impressing
+impression
+impressionable
+impressionist
+impressionistic
+impressions
+impressive
+impressively
+impressiveness
+impressment
+imprimatur
+imprint
+imprinted
+imprinting
+imprints
+imprison
+imprisoned
+imprisoning
+imprisonment
+imprisonments
+imprisons
+improbability
+improbable
+impromptu
+improper
+improperly
+impropriety
+improve
+improved
+improvement
+improvements
+improves
+improving
+improvisation
+improvisational
+improvisations
+improvise
+improvised
+improviser
+improvisers
+improvises
+improvising
+imprudent
+imps
+impudent
+impudently
+impugn
+impulse
+impulses
+impulsion
+impulsive
+impunity
+impure
+impurities
+impurity
+impute
+imputed
+in
+inability
+inaccessible
+inaccuracies
+inaccuracy
+inaccurate
+inaction
+inactivate
+inactive
+inactivity
+inadequacies
+inadequacy
+inadequate
+inadequately
+inadequateness
+inadmissibility
+inadmissible
+inadvertent
+inadvertently
+inadvisable
+inalienable
+inalterable
+inane
+inanimate
+inanimately
+Inanna
+inapplicable
+inapproachable
+inappropriate
+inappropriateness
+inasmuch
+inattention
+inaudible
+inaugural
+inaugurate
+inaugurated
+inaugurating
+inauguration
+inauspicious
+inboard
+inbound
+inbreed
+Inca
+incalculable
+incandescent
+incantation
+incapable
+incapacitate
+incapacitating
+incarcerate
+incarnation
+incarnations
+Incas
+incendiaries
+incendiary
+incense
+incensed
+incenses
+incentive
+incentives
+inception
+incessant
+incessantly
+incest
+incestuous
+inch
+inched
+inches
+inching
+incidence
+incident
+incidental
+incidentally
+incidentals
+incidents
+incinerate
+incipient
+incisive
+incite
+incited
+incitement
+incites
+inciting
+inclement
+inclination
+inclinations
+incline
+inclined
+inclines
+inclining
+inclose
+inclosed
+incloses
+inclosing
+include
+included
+includes
+including
+inclusion
+inclusions
+inclusive
+inclusively
+inclusiveness
+incoherence
+incoherent
+incoherently
+income
+incomes
+incoming
+incommensurable
+incommensurate
+incommunicable
+incomparable
+incomparably
+incompatibilities
+incompatibility
+incompatible
+incompatibly
+incompetence
+incompetent
+incompetents
+incomplete
+incompletely
+incompleteness
+incomprehensibility
+incomprehensible
+incomprehensibly
+incomprehension
+incompressible
+incomputable
+inconceivable
+inconclusive
+incongruity
+incongruous
+inconsequential
+inconsequentially
+inconsiderable
+inconsiderate
+inconsiderately
+inconsiderateness
+inconsistencies
+inconsistency
+inconsistent
+inconsistently
+inconspicuous
+incontestable
+incontrovertible
+incontrovertibly
+inconvenience
+inconvenienced
+inconveniences
+inconveniencing
+inconvenient
+inconveniently
+inconvertible
+incorporate
+incorporated
+incorporates
+incorporating
+incorporation
+incorrect
+incorrectly
+incorrectness
+incorrigible
+increase
+increased
+increases
+increasing
+increasingly
+incredible
+incredibly
+incredulity
+incredulous
+incredulously
+increment
+incremental
+incrementally
+incremented
+incrementer
+incrementing
+increments
+incriminate
+incubate
+incubated
+incubates
+incubating
+incubation
+incubator
+incubators
+inculcate
+incumbent
+incur
+incurable
+incurred
+incurring
+incurs
+incursion
+indebted
+indebtedness
+indecent
+indecipherable
+indecision
+indecisive
+indeed
+indefatigable
+indefensible
+indefinite
+indefinitely
+indefiniteness
+indelible
+indemnify
+indemnity
+indent
+indentation
+indentations
+indented
+indenting
+indents
+indenture
+independence
+independent
+independently
+indescribable
+indestructible
+indeterminacies
+indeterminacy
+indeterminate
+indeterminately
+index
+indexable
+indexed
+indexes
+indexing
+India
+Indian
+Indiana
+Indianapolis
+Indians
+indicate
+indicated
+indicates
+indicating
+indication
+indications
+indicative
+indicator
+indicators
+indices
+indict
+indictment
+indictments
+Indies
+indifference
+indifferent
+indifferently
+indigenous
+indigenously
+indigenousness
+indigestible
+indigestion
+indignant
+indignantly
+indignation
+indignities
+indignity
+indigo
+Indira
+indirect
+indirected
+indirecting
+indirection
+indirections
+indirectly
+indirects
+indiscreet
+indiscretion
+indiscriminate
+indiscriminately
+indispensability
+indispensable
+indispensably
+indisputable
+indistinct
+indistinguishable
+individual
+individualism
+individualistic
+individuality
+individualize
+individualized
+individualizes
+individualizing
+individually
+individuals
+indivisibility
+indivisible
+Indo
+Indochina
+Indochinese
+indoctrinate
+indoctrinated
+indoctrinates
+indoctrinating
+indoctrination
+Indoeuropean
+indolent
+indolently
+indomitable
+Indonesia
+Indonesian
+indoor
+indoors
+indubitable
+induce
+induced
+inducement
+inducements
+inducer
+induces
+inducing
+induct
+inductance
+inductances
+inducted
+inductee
+inducting
+induction
+inductions
+inductive
+inductively
+inductor
+inductors
+inducts
+indulge
+indulged
+indulgence
+indulgences
+indulgent
+indulging
+Indus
+industrial
+industrialism
+industrialist
+industrialists
+industrialization
+industrialized
+industrially
+industrials
+industries
+industrious
+industriously
+industriousness
+industry
+Indy
+ineffective
+ineffectively
+ineffectiveness
+ineffectual
+inefficiencies
+inefficiency
+inefficient
+inefficiently
+inelegant
+ineligible
+inept
+inequalities
+inequality
+inequitable
+inequity
+inert
+inertia
+inertial
+inertly
+inertness
+inescapable
+inescapably
+inessential
+inestimable
+inevitabilities
+inevitability
+inevitable
+inevitably
+inexact
+inexcusable
+inexcusably
+inexhaustible
+inexorable
+inexorably
+inexpensive
+inexpensively
+inexperience
+inexperienced
+inexplicable
+infallibility
+infallible
+infallibly
+infamous
+infamously
+infamy
+infancy
+infant
+infantile
+infantry
+infantryman
+infantrymen
+infants
+infarct
+infatuate
+infeasible
+infect
+infected
+infecting
+infection
+infections
+infectious
+infectiously
+infective
+infects
+infer
+inference
+inferences
+inferential
+inferior
+inferiority
+inferiors
+infernal
+infernally
+inferno
+infernos
+inferred
+inferring
+infers
+infertile
+infest
+infested
+infesting
+infests
+infidel
+infidelity
+infidels
+infighting
+infiltrate
+infinite
+infinitely
+infiniteness
+infinitesimal
+infinitive
+infinitives
+infinitude
+infinitum
+infinity
+infirm
+infirmary
+infirmity
+infix
+inflame
+inflamed
+inflammable
+inflammation
+inflammatory
+inflatable
+inflate
+inflated
+inflater
+inflates
+inflating
+inflation
+inflationary
+inflexibility
+inflexible
+inflict
+inflicted
+inflicting
+inflicts
+inflow
+influence
+influenced
+influences
+influencing
+influential
+influentially
+influenza
+inform
+informal
+informality
+informally
+informant
+informants
+Informatica
+information
+informational
+informative
+informatively
+informed
+informer
+informers
+informing
+informs
+infra
+infrared
+infrastructure
+infrequent
+infrequently
+infringe
+infringed
+infringement
+infringements
+infringes
+infringing
+infuriate
+infuriated
+infuriates
+infuriating
+infuriation
+infuse
+infused
+infuses
+infusing
+infusion
+infusions
+ingenious
+ingeniously
+ingeniousness
+ingenuity
+ingenuous
+Ingersoll
+ingest
+ingestion
+inglorious
+ingot
+Ingram
+ingrate
+ingratiate
+ingratitude
+ingredient
+ingredients
+ingrown
+inhabit
+inhabitable
+inhabitance
+inhabitant
+inhabitants
+inhabited
+inhabiting
+inhabits
+inhale
+inhaled
+inhaler
+inhales
+inhaling
+inhere
+inherent
+inherently
+inheres
+inherit
+inheritable
+inheritance
+inheritances
+inherited
+inheriting
+inheritor
+inheritors
+inheritress
+inheritresses
+inheritrices
+inheritrix
+inherits
+inhibit
+inhibited
+inhibiting
+inhibition
+inhibitions
+inhibitor
+inhibitors
+inhibitory
+inhibits
+inhomogeneities
+inhomogeneity
+inhomogeneous
+inhospitable
+inhuman
+inhumane
+inimical
+inimitable
+iniquities
+iniquity
+initial
+initialed
+initialing
+initialization
+initializations
+initialize
+initialized
+initializer
+initializers
+initializes
+initializing
+initially
+initials
+initiate
+initiated
+initiates
+initiating
+initiation
+initiations
+initiative
+initiatives
+initiator
+initiators
+inject
+injected
+injecting
+injection
+injections
+injective
+injects
+injudicious
+Injun
+injunction
+injunctions
+Injuns
+injure
+injured
+injures
+injuries
+injuring
+injurious
+injury
+injustice
+injustices
+ink
+inked
+inker
+inkers
+inking
+inkings
+inkling
+inklings
+inks
+inlaid
+inland
+inlay
+inlet
+inlets
+inline
+Inman
+inmate
+inmates
+inn
+innards
+innate
+innately
+inner
+innermost
+inning
+innings
+innocence
+innocent
+innocently
+innocents
+innocuous
+innocuously
+innocuousness
+innovate
+innovation
+innovations
+innovative
+inns
+innuendo
+innumerability
+innumerable
+innumerably
+inoculate
+inoperable
+inoperative
+inopportune
+inordinate
+inordinately
+inorganic
+input
+inputs
+inquest
+inquire
+inquired
+inquirer
+inquirers
+inquires
+inquiries
+inquiring
+inquiry
+inquisition
+inquisitions
+inquisitive
+inquisitively
+inquisitiveness
+inroad
+inroads
+insane
+insanely
+insanity
+insatiable
+inscribe
+inscribed
+inscribes
+inscribing
+inscription
+inscriptions
+inscrutable
+insect
+insecticide
+insects
+insecure
+insecurely
+inseminate
+insensible
+insensitive
+insensitively
+insensitivity
+inseparable
+insert
+inserted
+inserting
+insertion
+insertions
+inserts
+inset
+inside
+insider
+insiders
+insides
+insidious
+insidiously
+insidiousness
+insight
+insightful
+insights
+insignia
+insignificance
+insignificant
+insincere
+insincerity
+insinuate
+insinuated
+insinuates
+insinuating
+insinuation
+insinuations
+insipid
+insist
+insisted
+insistence
+insistent
+insistently
+insisting
+insists
+insofar
+insolence
+insolent
+insolently
+insoluble
+insolvable
+insolvent
+insomnia
+insomniac
+inspect
+inspected
+inspecting
+inspection
+inspections
+inspector
+inspectors
+inspects
+inspiration
+inspirations
+inspire
+inspired
+inspirer
+inspires
+inspiring
+instabilities
+instability
+install
+installation
+installations
+installed
+installer
+installers
+installing
+installment
+installments
+installs
+instance
+instances
+instant
+instantaneous
+instantaneously
+instanter
+instantiate
+instantiated
+instantiates
+instantiating
+instantiation
+instantiations
+instantly
+instants
+instead
+instigate
+instigated
+instigates
+instigating
+instigator
+instigators
+instill
+instinct
+instinctive
+instinctively
+instincts
+instinctual
+institute
+instituted
+instituter
+instituters
+institutes
+instituting
+institution
+institutional
+institutionalize
+institutionalized
+institutionalizes
+institutionalizing
+institutionally
+institutions
+instruct
+instructed
+instructing
+instruction
+instructional
+instructions
+instructive
+instructively
+instructor
+instructors
+instructs
+instrument
+instrumental
+instrumentalist
+instrumentalists
+instrumentally
+instrumentals
+instrumentation
+instrumented
+instrumenting
+instruments
+insubordinate
+insufferable
+insufficient
+insufficiently
+insular
+insulate
+insulated
+insulates
+insulating
+insulation
+insulator
+insulators
+insulin
+insult
+insulted
+insulting
+insults
+insuperable
+insupportable
+insurance
+insure
+insured
+insurer
+insurers
+insures
+insurgent
+insurgents
+insuring
+insurmountable
+insurrection
+insurrections
+intact
+intangible
+intangibles
+integer
+integers
+integrable
+integral
+integrals
+integrand
+integrate
+integrated
+integrates
+integrating
+integration
+integrations
+integrative
+integrity
+Intel
+intellect
+intellects
+intellectual
+intellectually
+intellectuals
+intelligence
+intelligent
+intelligently
+intelligentsia
+intelligibility
+intelligible
+intelligibly
+Intelsat
+intemperate
+intend
+intended
+intending
+intends
+intense
+intensely
+intensification
+intensified
+intensifier
+intensifiers
+intensifies
+intensify
+intensifying
+intensities
+intensity
+intensive
+intensively
+intent
+intention
+intentional
+intentionally
+intentioned
+intentions
+intently
+intentness
+intents
+inter
+interact
+interacted
+interacting
+interaction
+interactions
+interactive
+interactively
+interactivity
+interacts
+intercept
+intercepted
+intercepting
+interception
+interceptor
+intercepts
+interchange
+interchangeability
+interchangeable
+interchangeably
+interchanged
+interchanger
+interchanges
+interchanging
+interchangings
+interchannel
+intercity
+intercom
+intercommunicate
+intercommunicated
+intercommunicates
+intercommunicating
+intercommunication
+interconnect
+interconnected
+interconnecting
+interconnection
+interconnections
+interconnects
+intercontinental
+intercourse
+Interdata
+interdependence
+interdependencies
+interdependency
+interdependent
+interdict
+interdiction
+interdisciplinary
+interest
+interested
+interesting
+interestingly
+interests
+interface
+interfaced
+interfacer
+interfaces
+interfacing
+interfere
+interfered
+interference
+interferences
+interferes
+interfering
+interferingly
+interferometer
+interferometric
+interferometry
+interframe
+intergroup
+interim
+interior
+interiors
+interject
+interlace
+interlaced
+interlaces
+interlacing
+interleave
+interleaved
+interleaves
+interleaving
+interlink
+interlinked
+interlinks
+interlisp
+intermediary
+intermediate
+intermediates
+interminable
+intermingle
+intermingled
+intermingles
+intermingling
+intermission
+intermittent
+intermittently
+intermix
+intermixed
+intermodule
+intern
+internal
+internalize
+internalized
+internalizes
+internalizing
+internally
+internals
+international
+internationality
+internationally
+interned
+INTERNET
+Internet
+internetwork
+interning
+interns
+internship
+interoffice
+interpersonal
+interplay
+Interpol
+interpolate
+interpolated
+interpolates
+interpolating
+interpolation
+interpolations
+interpose
+interposed
+interposes
+interposing
+interpret
+interpretable
+interpretation
+interpretations
+interpreted
+interpreter
+interpreters
+interpreting
+interpretive
+interpretively
+interprets
+interprocess
+interrelate
+interrelated
+interrelates
+interrelating
+interrelation
+interrelations
+interrelationship
+interrelationships
+interrogate
+interrogated
+interrogates
+interrogating
+interrogation
+interrogations
+interrogative
+interrupt
+interrupted
+interruptible
+interrupting
+interruption
+interruptions
+interruptive
+interrupts
+intersect
+intersected
+intersecting
+intersection
+intersections
+intersects
+intersperse
+interspersed
+intersperses
+interspersing
+interspersion
+interstage
+interstate
+intertwine
+intertwined
+intertwines
+intertwining
+interval
+intervals
+intervene
+intervened
+intervenes
+intervening
+intervention
+interventions
+interview
+interviewed
+interviewee
+interviewer
+interviewers
+interviewing
+interviews
+interwoven
+intestate
+intestinal
+intestine
+intestines
+intimacy
+intimate
+intimated
+intimately
+intimating
+intimation
+intimations
+intimidate
+intimidated
+intimidates
+intimidating
+intimidation
+into
+intolerable
+intolerably
+intolerance
+intolerant
+intonation
+intonations
+intone
+intoxicant
+intoxicate
+intoxicated
+intoxicating
+intoxication
+intractability
+intractable
+intractably
+intragroup
+intraline
+intramural
+intramuscular
+intransigent
+intransitive
+intransitively
+intraoffice
+intraprocess
+intrastate
+intravenous
+intrepid
+intricacies
+intricacy
+intricate
+intricately
+intrigue
+intrigued
+intrigues
+intriguing
+intrinsic
+intrinsically
+introduce
+introduced
+introduces
+introducing
+introduction
+introductions
+introductory
+introspect
+introspection
+introspections
+introspective
+introvert
+introverted
+intrude
+intruded
+intruder
+intruders
+intrudes
+intruding
+intrusion
+intrusions
+intrust
+intubate
+intubated
+intubates
+intubation
+intuition
+intuitionist
+intuitions
+intuitive
+intuitively
+inundate
+invade
+invaded
+invader
+invaders
+invades
+invading
+invalid
+invalidate
+invalidated
+invalidates
+invalidating
+invalidation
+invalidations
+invalidities
+invalidity
+invalidly
+invalids
+invaluable
+invariable
+invariably
+invariance
+invariant
+invariantly
+invariants
+invasion
+invasions
+invective
+invent
+invented
+inventing
+invention
+inventions
+inventive
+inventively
+inventiveness
+inventor
+inventories
+inventors
+inventory
+invents
+Inverness
+inverse
+inversely
+inverses
+inversion
+inversions
+invert
+invertebrate
+invertebrates
+inverted
+inverter
+inverters
+invertible
+inverting
+inverts
+invest
+invested
+investigate
+investigated
+investigates
+investigating
+investigation
+investigations
+investigative
+investigator
+investigators
+investigatory
+investing
+investment
+investments
+investor
+investors
+invests
+inveterate
+invigorate
+invincible
+invisibility
+invisible
+invisibly
+invitation
+invitations
+invite
+invited
+invites
+inviting
+invocable
+invocation
+invocations
+invoice
+invoiced
+invoices
+invoicing
+invoke
+invoked
+invoker
+invokes
+invoking
+involuntarily
+involuntary
+involve
+involved
+involvement
+involvements
+involves
+involving
+inward
+inwardly
+inwardness
+inwards
+Io
+iodine
+ion
+Ionian
+Ionians
+Ionicization
+Ionicizations
+Ionicize
+Ionicizes
+ionosphere
+ionospheric
+ions
+iota
+Iowa
+Ira
+Iran
+Iranian
+Iranians
+Iranize
+Iranizes
+Iraq
+Iraqi
+Iraqis
+irate
+irately
+irateness
+ire
+Ireland
+Irene
+ires
+iris
+Irish
+Irishize
+Irishizes
+Irishman
+Irishmen
+irk
+irked
+irking
+irks
+irksome
+Irma
+iron
+ironed
+ironic
+ironical
+ironically
+ironies
+ironing
+ironings
+irons
+irony
+Iroquois
+irradiate
+irrational
+irrationally
+irrationals
+Irrawaddy
+irreconcilable
+irrecoverable
+irreducible
+irreducibly
+irreflexive
+irrefutable
+irregular
+irregularities
+irregularity
+irregularly
+irregulars
+irrelevance
+irrelevances
+irrelevant
+irrelevantly
+irreplaceable
+irrepressible
+irreproducibility
+irreproducible
+irresistible
+irrespective
+irrespectively
+irresponsible
+irresponsibly
+irretrievably
+irreverent
+irreversibility
+irreversible
+irreversibly
+irrevocable
+irrevocably
+irrigate
+irrigated
+irrigates
+irrigating
+irrigation
+irritable
+irritant
+irritate
+irritated
+irritates
+irritating
+irritation
+irritations
+Irvin
+Irvine
+Irving
+Irwin
+is
+Isaac
+Isaacs
+Isaacson
+Isabel
+Isabella
+Isadore
+Isaiah
+Isfahan
+Ising
+Isis
+Islam
+Islamabad
+Islamic
+Islamization
+Islamizations
+Islamize
+Islamizes
+island
+islander
+islanders
+Islandia
+islands
+isle
+isles
+islet
+islets
+isolate
+isolated
+isolates
+isolating
+isolation
+isolations
+Isolde
+isometric
+isomorphic
+isomorphically
+isomorphism
+isomorphisms
+isotope
+isotopes
+Israel
+Israeli
+Israelis
+Israelite
+Israelites
+Israelitize
+Israelitizes
+issuance
+issue
+issued
+issuer
+issuers
+issues
+issuing
+Istanbul
+isthmus
+Istvan
+it
+Italian
+Italianization
+Italianizations
+Italianize
+Italianizer
+Italianizers
+Italianizes
+Italians
+italic
+italicize
+italicized
+italics
+Italy
+itch
+itches
+itching
+Itel
+item
+itemization
+itemizations
+itemize
+itemized
+itemizes
+itemizing
+items
+iterate
+iterated
+iterates
+iterating
+iteration
+iterations
+iterative
+iteratively
+iterator
+iterators
+Ithaca
+Ithacan
+itineraries
+itinerary
+Ito
+its
+itself
+Ivan
+Ivanhoe
+Iverson
+ivies
+ivory
+ivy
+Izaak
+Izvestia
+jab
+jabbed
+jabbing
+Jablonsky
+jabs
+jack
+jackass
+jacket
+jacketed
+jackets
+Jackie
+jacking
+jackknife
+Jackman
+jackpot
+Jackson
+Jacksonian
+Jacksons
+Jacksonville
+Jacky
+Jacob
+Jacobean
+Jacobi
+Jacobian
+Jacobinize
+Jacobite
+Jacobs
+Jacobsen
+Jacobson
+Jacobus
+Jacoby
+Jacqueline
+Jacques
+jade
+jaded
+Jaeger
+jaguar
+jail
+jailed
+jailer
+jailers
+jailing
+jails
+Jaime
+Jakarta
+Jake
+Jakes
+jam
+Jamaica
+Jamaican
+James
+Jameson
+Jamestown
+jammed
+jamming
+jams
+Jane
+Janeiro
+Janesville
+Janet
+Janice
+Janis
+janitor
+janitors
+Janos
+Jansen
+Jansenist
+Januaries
+January
+Janus
+Japan
+Japanese
+Japanization
+Japanizations
+Japanize
+Japanized
+Japanizes
+Japanizing
+jar
+jargon
+jarred
+jarring
+jarringly
+jars
+Jarvin
+Jason
+Jastrow
+jaundice
+jaunt
+jauntiness
+jaunts
+jaunty
+Java
+Javanese
+javelin
+javelins
+jaw
+jawbone
+jaws
+jay
+Jaycee
+Jaycees
+jazz
+jazzy
+jealous
+jealousies
+jealously
+jealousy
+jean
+Jeanne
+Jeannie
+jeans
+Jed
+jeep
+jeeps
+jeer
+jeers
+Jeff
+Jefferson
+Jeffersonian
+Jeffersonians
+Jeffrey
+Jehovah
+jellies
+Jello
+jelly
+jellyfish
+Jenkins
+Jennie
+Jennifer
+Jennings
+jenny
+Jensen
+jeopardize
+jeopardized
+jeopardizes
+jeopardizing
+jeopardy
+Jeremiah
+Jeremy
+Jeres
+Jericho
+jerk
+jerked
+jerkiness
+jerking
+jerkings
+jerks
+jerky
+Jeroboam
+Jerome
+Jerry
+jersey
+jerseys
+Jerusalem
+Jesse
+Jessica
+Jessie
+Jessy
+jest
+jested
+jester
+jesting
+jests
+Jesuit
+Jesuitism
+Jesuitize
+Jesuitized
+Jesuitizes
+Jesuitizing
+Jesuits
+Jesus
+jet
+jetliner
+jets
+jetted
+jetting
+Jew
+jewel
+jeweled
+jeweler
+Jewell
+Jewelled
+jewelries
+jewelry
+jewels
+Jewett
+Jewish
+Jewishness
+Jews
+jiffy
+jig
+jigs
+jigsaw
+Jill
+Jim
+Jimenez
+Jimmie
+jingle
+jingled
+jingling
+Jinny
+jitter
+jitterbug
+jittery
+Jo
+Joan
+Joanna
+Joanne
+Joaquin
+job
+Jobrel
+jobs
+jockey
+jockstrap
+jocund
+Jody
+Joe
+Joel
+Joes
+jog
+jogging
+jogs
+Johann
+Johanna
+Johannes
+Johannesburg
+Johansen
+Johanson
+John
+Johnnie
+Johnny
+Johns
+Johnsen
+Johnson
+Johnston
+Johnstown
+join
+joined
+joiner
+joiners
+joining
+joins
+joint
+jointly
+joints
+joke
+joked
+joker
+jokers
+jokes
+joking
+jokingly
+Joliet
+Jolla
+jolly
+jolt
+jolted
+jolting
+jolts
+Jon
+Jonas
+Jonathan
+Jonathanization
+Jonathanizations
+Jones
+Joneses
+jonquil
+Joplin
+Jordan
+Jordanian
+Jorge
+Jorgensen
+Jorgenson
+Jose
+Josef
+Joseph
+Josephine
+Josephson
+Josephus
+Joshua
+Josiah
+jostle
+jostled
+jostles
+jostling
+jot
+jots
+jotted
+jotting
+joule
+journal
+journalism
+journalist
+journalists
+journalize
+journalized
+journalizes
+journalizing
+journals
+journey
+journeyed
+journeying
+journeyings
+journeyman
+journeymen
+journeys
+joust
+jousted
+jousting
+jousts
+Jovanovich
+Jove
+jovial
+Jovian
+joy
+Joyce
+joyful
+joyfully
+joyous
+joyously
+joyousness
+joyride
+joys
+joystick
+Juan
+Juanita
+Jubal
+jubilee
+Judaica
+Judaism
+Judas
+Judd
+Judder
+Juddered
+Juddering
+Judders
+Jude
+Judea
+judge
+judged
+judges
+judging
+judgment
+judgments
+judicial
+judiciary
+judicious
+judiciously
+Judith
+judo
+Judson
+Judy
+jug
+juggle
+juggler
+jugglers
+juggles
+juggling
+Jugoslavia
+jugs
+juice
+juices
+juiciest
+juicy
+Jukes
+Jules
+Julia
+Julian
+Julie
+Julies
+Juliet
+Julio
+Julius
+July
+jumble
+jumbled
+jumbles
+jumbo
+jump
+jumped
+jumper
+jumpers
+jumping
+jumps
+jumpy
+junction
+junctions
+juncture
+junctures
+June
+Juneau
+Junes
+Jung
+Jungian
+jungle
+jungles
+junior
+juniors
+juniper
+junk
+junker
+junkers
+junks
+junky
+Juno
+junta
+Jupiter
+Jura
+Juras
+Jurassic
+jure
+juries
+jurisdiction
+jurisdictions
+jurisprudence
+jurist
+juror
+jurors
+jury
+just
+justice
+justices
+justifiable
+justifiably
+justification
+justifications
+justified
+justifier
+justifiers
+justifies
+justify
+justifying
+Justine
+Justinian
+justly
+justness
+jut
+Jutish
+Jutland
+jutting
+juvenile
+juveniles
+juxtapose
+juxtaposed
+juxtaposes
+juxtaposing
+Kabuki
+Kabul
+Kaddish
+Kafka
+Kafkaesque
+Kahn
+Kajar
+Kalamazoo
+Kali
+Kalmuk
+Kamchatka
+Kamikaze
+Kamikazes
+Kampala
+Kampuchea
+Kanarese
+Kane
+kangaroo
+kanji
+Kankakee
+Kannada
+Kansas
+Kant
+Kantian
+Kaplan
+kappa
+Karachi
+Karamazov
+karate
+Karen
+Karl
+Karol
+Karp
+Kashmir
+Kaskaskia
+Kate
+Katharine
+Katherine
+Kathleen
+Kathy
+Katie
+Katmandu
+Katowice
+Katz
+Kauffman
+Kaufman
+Kay
+Keaton
+Keats
+Keegan
+keel
+keeled
+keeling
+keels
+keen
+Keenan
+keener
+keenest
+keenly
+keenness
+keep
+keeper
+keepers
+keeping
+keeps
+Keith
+Keller
+Kelley
+Kellogg
+Kelly
+Kelsey
+Kelvin
+Kemp
+ken
+Kendall
+Kenilworth
+Kennan
+Kennecott
+Kennedy
+kennel
+kennels
+Kenneth
+Kenney
+Kenning
+Kenny
+Kenosha
+Kensington
+Kent
+Kenton
+Kentucky
+Kenya
+Kenyon
+Kepler
+kept
+kerchief
+kerchiefs
+Kermit
+kern
+kernel
+kernels
+Kernighan
+kerosene
+Kerouac
+Kerr
+Kessler
+ketchup
+Kettering
+kettle
+kettles
+Kevin
+Kewaskum
+Kewaunee
+key
+keyboard
+keyboards
+keyed
+Keyes
+keyhole
+keying
+Keynes
+Keynesian
+keynote
+keypad
+keypads
+keys
+keystroke
+keystrokes
+keyword
+keywords
+Khartoum
+Khmer
+Khrushchev
+Khrushchevs
+kick
+Kickapoo
+kicked
+kicker
+kickers
+kicking
+kickoff
+kicks
+kid
+Kidde
+kidded
+kiddie
+kidding
+kidnap
+kidnapper
+kidnappers
+kidnapping
+kidnappings
+kidnaps
+kidney
+kidneys
+kids
+Kieffer
+Kiel
+Kiev
+Kiewit
+Kigali
+Kikuyu
+Kilgore
+Kilimanjaro
+kill
+Killebrew
+killed
+killer
+killers
+killing
+killingly
+killings
+killjoy
+kills
+kilobit
+kilobits
+kiloblock
+kilobyte
+kilobytes
+kilogram
+kilograms
+kilohertz
+kilohm
+kilojoule
+kilometer
+kilometers
+kiloton
+kilovolt
+kilowatt
+kiloword
+Kim
+Kimball
+Kimberly
+kimono
+kin
+kind
+kinder
+kindergarten
+kindest
+kindhearted
+kindle
+kindled
+kindles
+kindling
+kindly
+kindness
+kindred
+kinds
+kinetic
+king
+kingdom
+kingdoms
+kingly
+kingpin
+kings
+Kingsbury
+Kingsley
+Kingston
+Kingstown
+Kingwood
+kink
+kinky
+Kinney
+Kinnickinnic
+Kinsey
+Kinshasha
+kinship
+kinsman
+kiosk
+Kiowa
+Kipling
+Kirby
+Kirchner
+Kirchoff
+Kirk
+Kirkland
+Kirkpatrick
+Kirkwood
+Kirov
+kiss
+kissed
+kisser
+kissers
+kisses
+kissing
+kit
+Kitakyushu
+kitchen
+kitchenette
+kitchens
+kite
+kited
+kites
+kiting
+kits
+kitten
+kittenish
+kittens
+kitty
+Kiwanis
+Klan
+Klaus
+klaxon
+Klein
+Kleinrock
+Kline
+kludge
+kludges
+Klux
+klystron
+knack
+Knapp
+knapsack
+knapsacks
+Knauer
+knave
+knaves
+knead
+kneads
+knee
+kneecap
+kneed
+kneeing
+kneel
+kneeled
+kneeling
+kneels
+knees
+knell
+knells
+knelt
+knew
+Knickerbocker
+Knickerbockers
+knife
+knifed
+knifes
+knifing
+knight
+knighted
+knighthood
+knighting
+knightly
+knights
+Knightsbridge
+knit
+knits
+knives
+knob
+Knobeloch
+knobs
+knock
+knockdown
+knocked
+knocker
+knockers
+knocking
+knockout
+knocks
+knoll
+knolls
+Knossos
+knot
+knots
+Knott
+knotted
+knotting
+know
+knowable
+knower
+knowhow
+knowing
+knowingly
+knowledge
+knowledgeable
+Knowles
+Knowlton
+known
+knows
+Knox
+Knoxville
+knuckle
+knuckled
+knuckles
+Knudsen
+Knudson
+Knuth
+Knutsen
+Knutson
+koala
+Kobayashi
+Koch
+Kochab
+Kodachrome
+Kodak
+Kodiak
+Koenig
+Koenigsberg
+Kohler
+Kong
+Konrad
+Koppers
+Koran
+Korea
+Korean
+Koreans
+kosher
+Kovacs
+Kowalewski
+Kowalski
+Kowloon
+Kowtow
+Kraemer
+Krakatoa
+Krakow
+Kramer
+Krause
+Krebs
+Kremlin
+Kresge
+Krieger
+Krishna
+Kristin
+Kronecker
+Krueger
+Kruger
+Kruse
+Ku
+Kuala
+kudo
+Kuenning
+Kuhn
+Kumar
+Kurd
+Kurdish
+Kurt
+Kuwait
+Kuwaiti
+Kyoto
+lab
+Laban
+label
+labeled
+labeling
+labelled
+labeller
+labellers
+labelling
+labels
+labor
+laboratories
+laboratory
+labored
+laborer
+laborers
+laboring
+laborings
+laborious
+laboriously
+labors
+Labrador
+labs
+labyrinth
+labyrinths
+Lac
+lace
+laced
+lacerate
+lacerated
+lacerates
+lacerating
+laceration
+lacerations
+Lacerta
+laces
+Lacey
+Lachesis
+lacing
+lack
+Lackawanna
+lacked
+lackey
+lacking
+lacks
+lacquer
+lacquered
+lacquers
+lacrosse
+lacy
+lad
+ladder
+laden
+ladies
+lading
+ladle
+lads
+lady
+ladylike
+Lafayette
+lag
+lager
+lagers
+lagoon
+lagoons
+Lagos
+Lagrange
+Lagrangian
+lags
+Laguerre
+Laguna
+Lahore
+laid
+Laidlaw
+lain
+lair
+lairs
+laissez
+lake
+Lakehurst
+lakes
+Lakewood
+Lamar
+Lamarck
+lamb
+lambda
+lambdas
+lambert
+lambs
+lame
+lamed
+lamely
+lameness
+lament
+lamentable
+lamentation
+lamentations
+lamented
+lamenting
+laments
+lames
+laminar
+laming
+lamp
+lamplight
+lampoon
+Lamport
+lamprey
+lamps
+Lana
+Lancashire
+Lancaster
+lance
+lanced
+Lancelot
+lancer
+lances
+land
+landed
+lander
+landers
+landfill
+landing
+landings
+Landis
+landladies
+landlady
+landlord
+landlords
+landmark
+landmarks
+landowner
+landowners
+lands
+landscape
+landscaped
+landscapes
+landscaping
+landslide
+Landwehr
+lane
+lanes
+Lang
+Lange
+Langeland
+Langford
+Langley
+Langmuir
+language
+languages
+languid
+languidly
+languidness
+languish
+languished
+languishes
+languishing
+Lanka
+Lansing
+lantern
+lanterns
+Lao
+Laocoon
+Laos
+Laotian
+Laotians
+lap
+lapel
+lapels
+Laplace
+Laplacian
+lapping
+laps
+lapse
+lapsed
+lapses
+lapsing
+Laramie
+lard
+larder
+Laredo
+Lares
+large
+largely
+largeness
+larger
+largest
+lark
+Larkin
+larks
+Larry
+Lars
+Larsen
+Larson
+larva
+larvae
+larynx
+lascivious
+laser
+lasers
+lash
+lashed
+lashes
+lashing
+lashings
+lass
+lasses
+lasso
+last
+lasted
+lasting
+lastly
+lasts
+Laszlo
+latch
+latched
+latches
+latching
+late
+lately
+latency
+lateness
+latent
+later
+lateral
+laterally
+Lateran
+latest
+LaTeX
+lathe
+Lathrop
+Latin
+Latinate
+Latinity
+Latinization
+Latinizations
+Latinize
+Latinized
+Latinizer
+Latinizers
+Latinizes
+Latinizing
+latitude
+latitudes
+latrine
+latrines
+Latrobe
+latter
+latterly
+lattice
+lattices
+Lattimer
+Latvia
+laudable
+Lauderdale
+Laue
+laugh
+laughable
+laughably
+laughed
+laughing
+laughingly
+laughingstock
+Laughlin
+laughs
+laughter
+launch
+launched
+launcher
+launches
+launching
+launchings
+launder
+laundered
+launderer
+laundering
+launderings
+launders
+Laundromat
+Laundromats
+laundry
+laureate
+laurel
+laurels
+Lauren
+Laurence
+Laurent
+Laurentian
+Laurie
+Lausanne
+lava
+lavatories
+lavatory
+lavender
+lavish
+lavished
+lavishing
+lavishly
+Lavoisier
+law
+lawbreaker
+Lawford
+lawful
+lawfully
+lawgiver
+lawless
+lawlessness
+lawn
+lawns
+Lawrence
+Lawrenceville
+laws
+Lawson
+lawsuit
+lawsuits
+lawyer
+lawyers
+lax
+laxative
+lay
+layer
+layered
+layering
+layers
+laying
+layman
+laymen
+layoff
+layoffs
+layout
+layouts
+lays
+Layton
+Lazarus
+lazed
+lazier
+laziest
+lazily
+laziness
+lazing
+lazy
+lazybones
+lead
+leaded
+leaden
+leader
+leaders
+leadership
+leaderships
+leading
+leadings
+leads
+leaf
+leafed
+leafiest
+leafing
+leafless
+leaflet
+leaflets
+leafy
+league
+leagued
+leaguer
+leaguers
+leagues
+leak
+leakage
+leakages
+leaked
+leaking
+leaks
+leaky
+lean
+Leander
+leaned
+leaner
+leanest
+leaning
+leanness
+leans
+leap
+leaped
+leapfrog
+leaping
+leaps
+leapt
+Lear
+learn
+learned
+learner
+learners
+learning
+learns
+Leary
+lease
+leased
+leases
+leash
+leashes
+leasing
+least
+leather
+leathered
+leathern
+leatherneck
+leathers
+leave
+leaved
+leaven
+leavened
+leavening
+Leavenworth
+leaves
+leaving
+leavings
+Lebanese
+Lebanon
+Lebesgue
+lechery
+lecture
+lectured
+lecturer
+lecturers
+lectures
+lecturing
+led
+ledge
+ledger
+ledgers
+ledges
+lee
+leech
+leeches
+Leeds
+leek
+leer
+leery
+lees
+Leeuwenhoek
+leeward
+leeway
+left
+leftist
+leftists
+leftmost
+leftover
+leftovers
+leftward
+leg
+legacies
+legacy
+legal
+legality
+legalization
+legalize
+legalized
+legalizes
+legalizing
+legally
+legend
+legendary
+Legendre
+legends
+Leger
+Legers
+legged
+leggings
+legibility
+legible
+legibly
+legion
+legions
+legislate
+legislated
+legislates
+legislating
+legislation
+legislative
+legislator
+legislators
+legislature
+legislatures
+legitimacy
+legitimate
+legitimately
+legs
+legume
+Lehigh
+Lehman
+Leibniz
+Leiden
+Leigh
+Leighton
+Leila
+Leipzig
+leisure
+leisurely
+Leland
+Lemke
+lemma
+lemmas
+lemming
+lemmings
+lemon
+lemonade
+lemons
+Lemuel
+Len
+Lena
+lend
+lender
+lenders
+lending
+lends
+length
+lengthen
+lengthened
+lengthening
+lengthens
+lengthly
+lengths
+lengthwise
+lengthy
+leniency
+lenient
+leniently
+Lenin
+Leningrad
+Leninism
+Leninist
+Lennox
+Lenny
+Lenore
+lens
+lenses
+lent
+Lenten
+lentil
+lentils
+Leo
+Leon
+Leona
+Leonard
+Leonardo
+Leone
+Leonid
+leopard
+leopards
+Leopold
+Leopoldville
+leper
+leprosy
+Leroy
+Lesbian
+Lesbians
+Leslie
+Lesotho
+less
+lessen
+lessened
+lessening
+lessens
+lesser
+lesson
+lessons
+lessor
+lest
+Lester
+let
+lethal
+Lethe
+Letitia
+lets
+letter
+lettered
+letterer
+letterhead
+lettering
+letters
+letting
+lettuce
+leukemia
+Lev
+levee
+levees
+level
+leveled
+leveler
+leveling
+levelled
+leveller
+levellest
+levelling
+levelly
+levelness
+levels
+lever
+leverage
+levers
+Levi
+Leviable
+levied
+levies
+Levin
+Levine
+Levis
+Leviticus
+Levitt
+levity
+levy
+levying
+Lew
+lewd
+lewdly
+lewdness
+Lewellyn
+lexical
+lexically
+lexicographic
+lexicographical
+lexicographically
+lexicon
+lexicons
+Lexington
+Leyden
+liabilities
+liability
+liable
+liaison
+liaisons
+liar
+liars
+libel
+libelous
+Liberace
+liberal
+liberalize
+liberalized
+liberalizes
+liberalizing
+liberally
+liberals
+liberate
+liberated
+liberates
+liberating
+liberation
+liberator
+liberators
+Liberia
+libertarian
+liberties
+liberty
+libido
+librarian
+librarians
+libraries
+library
+libretto
+Libreville
+Libya
+Libyan
+lice
+license
+licensed
+licensee
+licenses
+licensing
+licensor
+licentious
+lichen
+lichens
+Lichter
+lick
+licked
+licking
+licks
+licorice
+lid
+lids
+lie
+Lieberman
+Liechtenstein
+lied
+liege
+lien
+liens
+lies
+lieu
+lieutenant
+lieutenants
+life
+lifeblood
+lifeboat
+lifeguard
+lifeless
+lifelessness
+lifelike
+lifelong
+lifer
+lifespan
+lifestyle
+lifestyles
+lifetime
+lifetimes
+lift
+lifted
+lifter
+lifters
+lifting
+lifts
+ligament
+ligature
+Ligget
+Liggett
+light
+lighted
+lighten
+lightens
+lighter
+lighters
+lightest
+lightface
+lighthearted
+lighthouse
+lighthouses
+lighting
+lightly
+lightness
+lightning
+lightnings
+lights
+lightweight
+like
+liked
+likelier
+likeliest
+likelihood
+likelihoods
+likeliness
+likely
+liken
+likened
+likeness
+likenesses
+likening
+likens
+likes
+likewise
+liking
+Lila
+lilac
+lilacs
+Lilian
+lilies
+Lillian
+Lilliput
+Lilliputian
+Lilliputianize
+Lilliputianizes
+Lilly
+lily
+Lima
+Liman
+limb
+limber
+limbo
+limbs
+lime
+limelight
+Limerick
+limes
+limestone
+limit
+limitability
+limitably
+limitation
+limitations
+limited
+limiter
+limiters
+limiting
+limitless
+limits
+limousine
+limp
+limped
+limping
+limply
+limpness
+limps
+Lin
+Lincoln
+Lind
+Linda
+Lindberg
+Lindbergh
+linden
+Lindholm
+Lindquist
+Lindsay
+Lindsey
+Lindstrom
+Lindy
+line
+linear
+linearities
+linearity
+linearizable
+linearize
+linearized
+linearizes
+linearizing
+linearly
+lined
+linen
+linens
+liner
+liners
+lines
+lineup
+linger
+lingered
+lingerie
+lingering
+lingers
+lingo
+lingua
+linguist
+linguistic
+linguistically
+linguistics
+linguists
+lining
+linings
+link
+linkage
+linkages
+linked
+linker
+linkers
+linking
+links
+Linnaeus
+linoleum
+Linotype
+linseed
+lint
+Linton
+Linus
+Linux
+lion
+Lionel
+lioness
+lionesses
+lions
+lip
+Lippincott
+lips
+Lipschitz
+Lipscomb
+lipstick
+Lipton
+liquid
+liquidate
+liquidation
+liquidations
+liquidity
+liquids
+liquor
+liquors
+Lisa
+Lisbon
+Lise
+lisp
+lisped
+lisping
+lisps
+Liss
+Lissajous
+list
+listed
+listen
+listened
+listener
+listeners
+listening
+listens
+Lister
+Listerize
+Listerizes
+listers
+listing
+listings
+listless
+Liston
+lists
+lit
+litany
+liter
+literacy
+literal
+literally
+literalness
+literals
+literary
+literate
+literature
+literatures
+liters
+lithe
+lithograph
+lithography
+Lithuania
+Lithuanian
+litigant
+litigate
+litigation
+litigious
+litmus
+litter
+litterbug
+littered
+littering
+litters
+little
+littleness
+littler
+littlest
+Littleton
+Litton
+livable
+livably
+live
+lived
+livelihood
+lively
+liveness
+liver
+liveried
+Livermore
+Liverpool
+Liverpudlian
+livers
+livery
+lives
+livestock
+livid
+living
+Livingston
+Liz
+lizard
+lizards
+Lizzie
+Lizzy
+Lloyd
+load
+loaded
+loader
+loaders
+loading
+loadings
+loads
+loaf
+loafed
+loafer
+loan
+loaned
+loaning
+loans
+loath
+loathe
+loathed
+loathing
+loathly
+loathsome
+loaves
+lobbied
+lobbies
+lobby
+lobbying
+lobe
+lobes
+lobster
+lobsters
+local
+localities
+locality
+localization
+localize
+localized
+localizes
+localizing
+locally
+locals
+locate
+located
+locates
+locating
+location
+locations
+locative
+locatives
+locator
+locators
+loci
+lock
+Locke
+locked
+locker
+lockers
+Lockhart
+Lockheed
+Lockian
+locking
+lockings
+lockout
+lockouts
+locks
+locksmith
+lockstep
+lockup
+lockups
+Lockwood
+locomotion
+locomotive
+locomotives
+locus
+locust
+locusts
+lodge
+lodged
+lodger
+lodges
+lodging
+lodgings
+Lodowick
+Loeb
+loft
+loftiness
+lofts
+lofty
+Logan
+logarithm
+logarithmic
+logarithmically
+logarithms
+logged
+logger
+loggers
+logging
+logic
+logical
+logically
+logician
+logicians
+logics
+login
+logins
+logistic
+logistics
+logjam
+logo
+logs
+loin
+loincloth
+loins
+Loire
+Lois
+loiter
+loitered
+loiterer
+loitering
+loiters
+Loki
+Lola
+Lomb
+Lombard
+Lombardy
+Lome
+London
+Londonderry
+Londoner
+Londonization
+Londonizations
+Londonize
+Londonizes
+lone
+lonelier
+loneliest
+loneliness
+lonely
+loner
+loners
+lonesome
+long
+longed
+longer
+longest
+longevity
+Longfellow
+longhand
+longing
+longings
+longitude
+longitudes
+longs
+longstanding
+Longstreet
+look
+lookahead
+looked
+looker
+lookers
+looking
+lookout
+looks
+lookup
+lookups
+loom
+loomed
+looming
+Loomis
+looms
+loon
+loop
+looped
+loophole
+loopholes
+looping
+loops
+loose
+loosed
+looseleaf
+loosely
+loosen
+loosened
+looseness
+loosening
+loosens
+looser
+looses
+loosest
+loosing
+loot
+looted
+looter
+looting
+loots
+Lopez
+lopsided
+lord
+lordly
+lords
+lordship
+lore
+Lorelei
+Loren
+Lorentzian
+Lorenz
+Loretta
+Lorinda
+Lorraine
+lorry
+Los
+lose
+loser
+losers
+loses
+losing
+loss
+losses
+lossier
+lossiest
+lossy
+lost
+lot
+Lothario
+lotion
+lots
+Lotte
+lottery
+Lottie
+lotus
+Lou
+loud
+louder
+loudest
+loudly
+loudness
+loudspeaker
+loudspeakers
+Louis
+Louisa
+Louise
+Louisiana
+Louisianan
+Louisville
+lounge
+lounged
+lounges
+lounging
+Lounsbury
+Lourdes
+louse
+lousy
+lout
+Louvre
+lovable
+lovably
+love
+loved
+Lovejoy
+Lovelace
+Loveland
+lovelier
+lovelies
+loveliest
+loveliness
+lovelorn
+lovely
+lover
+lovers
+loves
+loving
+lovingly
+low
+Lowe
+Lowell
+lower
+lowered
+lowering
+lowers
+lowest
+lowland
+lowlands
+lowliest
+lowly
+lowness
+Lowry
+lows
+Loy
+loyal
+loyally
+loyalties
+loyalty
+Loyola
+Lubbock
+Lubell
+lubricant
+lubricate
+lubrication
+Lucas
+Lucerne
+Lucia
+Lucian
+lucid
+Lucien
+Lucifer
+Lucille
+Lucius
+luck
+lucked
+luckier
+luckiest
+luckily
+luckless
+lucks
+lucky
+lucrative
+Lucretia
+Lucretius
+Lucy
+ludicrous
+ludicrously
+ludicrousness
+Ludlow
+Ludmilla
+Ludwig
+Lufthansa
+Luftwaffe
+luggage
+Luis
+Luke
+lukewarm
+lull
+lullaby
+lulled
+lulls
+lumber
+lumbered
+lumbering
+luminous
+luminously
+lummox
+lump
+lumped
+lumping
+lumps
+Lumpur
+lumpy
+lunar
+lunatic
+lunch
+lunched
+luncheon
+luncheons
+lunches
+lunching
+Lund
+Lundberg
+Lundquist
+lung
+lunged
+lungs
+Lura
+lurch
+lurched
+lurches
+lurching
+lure
+lured
+lures
+luring
+lurk
+lurked
+lurking
+lurks
+Lusaka
+luscious
+lusciously
+lusciousness
+lush
+lust
+luster
+lustful
+lustily
+lustiness
+lustrous
+lusts
+lusty
+lute
+lutes
+Luther
+Lutheran
+Lutheranize
+Lutheranizer
+Lutheranizers
+Lutheranizes
+Lutz
+Luxembourg
+Luxemburg
+luxuriant
+luxuriantly
+luxuries
+luxurious
+luxuriously
+luxury
+Luzon
+L'vov
+Lydia
+lying
+Lykes
+Lyle
+Lyman
+lymph
+lynch
+Lynchburg
+lynched
+lyncher
+lynches
+Lyndon
+Lynn
+lynx
+lynxes
+Lyon
+Lyons
+Lyra
+lyre
+lyric
+lyrics
+Lysenko
+Mabel
+Mac
+Macadamia
+MacArthur
+Macarthur
+Macassar
+Macaulay
+Macaulayan
+Macaulayism
+Macaulayisms
+Macbeth
+MacDonald
+Macdonald
+MacDougall
+Macdougall
+MacDraw
+mace
+maced
+Macedon
+Macedonia
+Macedonian
+maces
+MacGregor
+Macgregor
+Mach
+Machiavelli
+Machiavellian
+machination
+machine
+machined
+machinelike
+machinery
+machines
+machining
+macho
+MacIntosh
+Macintosh
+macintosh
+MacKenzie
+Mackenzie
+mackerel
+Mackey
+Mackinac
+Mackinaw
+MacMahon
+MacMillan
+Macmillan
+Macon
+MacPaint
+macro
+macroeconomics
+macromolecule
+macromolecules
+macrophage
+macros
+macroscopic
+mad
+Madagascar
+madam
+Madame
+Madames
+madden
+maddening
+madder
+maddest
+Maddox
+made
+Madeira
+Madeleine
+Madeline
+madhouse
+Madhya
+Madison
+madly
+madman
+madmen
+madness
+Madonna
+Madonnas
+madras
+Madrid
+Madsen
+Mae
+Maelstrom
+maestro
+Mafia
+Mafiosi
+magazine
+magazines
+Magdalene
+Magellan
+Magellanic
+magenta
+Maggie
+maggot
+maggots
+magic
+magical
+magically
+magician
+magicians
+Magill
+magistrate
+magistrates
+magna
+magnesium
+magnet
+magnetic
+magnetically
+magnetism
+magnetisms
+magnetizable
+magnetized
+magneto
+magnification
+magnificence
+magnificent
+magnificently
+magnified
+magnifier
+magnifies
+magnify
+magnifying
+magnitude
+magnitudes
+magnolia
+magnum
+Magnuson
+Magog
+magpie
+Magruder
+Maguire
+Maguires
+Maharashtra
+Mahayana
+Mahayanist
+mahogany
+Mahoney
+maid
+maiden
+maidens
+maids
+Maier
+mail
+mailable
+mailbox
+mailboxes
+mailed
+mailer
+mailing
+mailings
+mailman
+mailmen
+mails
+maim
+maimed
+maiming
+maims
+main
+Maine
+mainframe
+mainframes
+mainland
+mainline
+mainly
+mains
+mainstay
+mainstream
+maintain
+maintainability
+maintainable
+maintained
+maintainer
+maintainers
+maintaining
+maintains
+maintenance
+maintenances
+maize
+majestic
+majesties
+majesty
+major
+Majorca
+majored
+majoring
+majorities
+majority
+majors
+makable
+make
+maker
+makers
+makes
+makeshift
+makeup
+makeups
+making
+makings
+Malabar
+maladies
+malady
+Malagasy
+Malamud
+malaria
+Malawi
+Malay
+Malayize
+Malayizes
+Malaysia
+Malaysian
+Malcolm
+malcontent
+Malden
+Maldive
+male
+malefactor
+malefactors
+maleness
+males
+malevolent
+malformed
+malfunction
+malfunctioned
+malfunctioning
+malfunctions
+Mali
+Malibu
+malice
+malicious
+maliciously
+maliciousness
+malign
+malignant
+malignantly
+mall
+mallard
+mallet
+mallets
+Mallory
+malnutrition
+Malone
+Maloney
+malpractice
+Malraux
+malt
+Malta
+malted
+Maltese
+Malthus
+Malthusian
+Malton
+malts
+mama
+mamma
+mammal
+mammalian
+mammals
+mammas
+mammoth
+man
+manage
+manageable
+manageableness
+managed
+management
+managements
+manager
+managerial
+managers
+manages
+managing
+Managua
+Manama
+Manchester
+Manchuria
+mandarin
+mandate
+mandated
+mandates
+mandating
+mandatory
+Mandelbrot
+mandible
+mane
+manes
+maneuver
+maneuvered
+maneuvering
+maneuvers
+Manfred
+manger
+mangers
+mangle
+mangled
+mangler
+mangles
+mangling
+Manhattan
+Manhattanize
+Manhattanizes
+manhole
+manhood
+mania
+maniac
+maniacal
+maniacs
+manic
+manicure
+manicured
+manicures
+manicuring
+manifest
+manifestation
+manifestations
+manifested
+manifesting
+manifestly
+manifests
+manifold
+manifolds
+Manila
+manipulability
+manipulable
+manipulatable
+manipulate
+manipulated
+manipulates
+manipulating
+manipulation
+manipulations
+manipulative
+manipulator
+manipulators
+manipulatory
+Manitoba
+Manitowoc
+mankind
+Mankowski
+Manley
+manly
+Mann
+manned
+manner
+mannered
+mannerly
+manners
+manning
+manometer
+manometers
+manor
+manors
+manpower
+Mans
+Mansfield
+mansion
+mansions
+manslaughter
+mantel
+mantels
+mantis
+mantissa
+mantissas
+mantle
+mantlepiece
+mantles
+manual
+manually
+manuals
+Manuel
+manufacture
+manufactured
+manufacturer
+manufacturers
+manufactures
+manufacturing
+manure
+manuscript
+manuscripts
+Manville
+many
+Mao
+Maori
+map
+maple
+Maplecrest
+maples
+mappable
+mapped
+mapping
+mappings
+maps
+marathon
+marble
+marbles
+marbling
+Marc
+Marceau
+Marcel
+Marcello
+march
+marched
+marcher
+marches
+marching
+Marcia
+Marco
+Marcotte
+Marcus
+Marcy
+Mardi
+Mardis
+mare
+mares
+Margaret
+margarine
+Margery
+margin
+marginal
+marginally
+margins
+Margo
+Marguerite
+Marianne
+Marie
+Marietta
+marigold
+marijuana
+Marilyn
+Marin
+marina
+marinade
+marinate
+marine
+mariner
+marines
+Marino
+Mario
+Marion
+marionette
+marital
+maritime
+Marjorie
+Marjory
+mark
+markable
+marked
+markedly
+marker
+markers
+market
+marketability
+marketable
+marketed
+marketing
+marketings
+marketplace
+marketplaces
+markets
+Markham
+marking
+markings
+Markism
+Markov
+Markovian
+Markovitz
+Marks
+Marlboro
+Marlborough
+Marlene
+Marlowe
+marmalade
+marmot
+maroon
+Marquette
+marquis
+marriage
+marriageable
+marriages
+married
+marries
+Marriott
+marrow
+marry
+marrying
+Mars
+Marseilles
+marsh
+Marsha
+marshal
+marshaled
+marshaling
+Marshall
+Marshalled
+Marshalling
+marshals
+marshes
+marshmallow
+mart
+marten
+Martha
+martial
+Martian
+Martians
+Martinez
+martingale
+martini
+Martinique
+Martinson
+marts
+Marty
+martyr
+martyrdom
+martyrs
+marvel
+marveled
+marvelled
+marvelling
+marvelous
+marvelously
+marvelousness
+marvels
+Marvin
+Marx
+Marxian
+Marxism
+Marxisms
+Marxist
+Mary
+Maryland
+Marylanders
+mascara
+masculine
+masculinely
+masculinity
+Maseru
+mash
+mashed
+mashes
+mashing
+mask
+maskable
+masked
+masker
+masking
+maskings
+masks
+masochist
+masochists
+mason
+Masonic
+Masonite
+masonry
+masons
+masquerade
+masquerader
+masquerades
+masquerading
+mass
+Massachusetts
+massacre
+massacred
+massacres
+massage
+massages
+massaging
+massed
+masses
+Massey
+massing
+massive
+mast
+masted
+master
+mastered
+masterful
+masterfully
+mastering
+masterings
+masterly
+mastermind
+masterpiece
+masterpieces
+masters
+mastery
+mastodon
+masts
+masturbate
+masturbated
+masturbates
+masturbating
+masturbation
+mat
+match
+matchable
+matched
+matcher
+matchers
+matches
+matching
+matchings
+matchless
+mate
+mated
+Mateo
+mater
+material
+materialist
+materialize
+materialized
+materializes
+materializing
+materially
+materials
+maternal
+maternally
+maternity
+mates
+math
+Mathematica
+mathematical
+mathematically
+mathematician
+mathematicians
+mathematics
+Mathematik
+Mathewson
+Mathias
+Mathieu
+Matilda
+mating
+matings
+Matisse
+Matisses
+matriarch
+matriarchal
+matrices
+matriculate
+matriculation
+matrimonial
+matrimony
+matrix
+matroid
+matron
+matronly
+mats
+Matson
+Matsumoto
+Matt
+matted
+matter
+mattered
+matters
+Matthew
+Matthews
+Mattie
+mattress
+mattresses
+Mattson
+maturation
+mature
+matured
+maturely
+matures
+maturing
+maturities
+maturity
+Maude
+maul
+Maureen
+Maurice
+Mauricio
+Maurine
+Mauritania
+Mauritius
+mausoleum
+maverick
+Mavis
+Mawr
+Max
+maxim
+maxima
+maximal
+maximally
+Maximilian
+maximize
+maximized
+maximizer
+maximizers
+maximizes
+maximizing
+maxims
+maximum
+maximums
+Maxine
+Maxtor
+Maxwell
+Maxwellian
+May
+Maya
+Mayans
+maybe
+Mayer
+Mayfair
+Mayflower
+mayhap
+mayhem
+Maynard
+Mayo
+mayonnaise
+mayor
+mayoral
+mayors
+Mazda
+maze
+mazes
+Mbabane
+McAdam
+McAdams
+McAllister
+McBride
+McCabe
+McCall
+McCallum
+McCann
+McCarthy
+McCarty
+McCauley
+McClain
+McClellan
+McClure
+McCluskey
+McConnel
+McConnell
+McCormick
+McCoy
+McCracken
+McCullough
+McDaniel
+McDermott
+McDonald
+McDonnell
+McDougall
+McDowell
+McElhaney
+McElroy
+McFadden
+McFarland
+McGee
+McGill
+McGinnis
+McGovern
+McGowan
+McGrath
+McGraw
+McGregor
+McGuire
+McHugh
+McIntosh
+McIntyre
+McKay
+McKee
+McKenna
+McKenzie
+McKeon
+McKesson
+McKinley
+McKinney
+McKnight
+McLanahan
+McLaughlin
+McLean
+McLeod
+McMahon
+McMartin
+McMillan
+McMullen
+McNally
+McNaughton
+McNeil
+McNulty
+McPherson
+me
+mead
+meadow
+meadows
+meager
+meagerly
+meagerness
+meal
+meals
+mealtime
+mealy
+mean
+meander
+meandered
+meandering
+meanders
+meaner
+meanest
+meaning
+meaningful
+meaningfully
+meaningfulness
+meaningless
+meaninglessly
+meaninglessness
+meanings
+meanly
+meanness
+means
+meant
+meantime
+meanwhile
+measle
+measles
+measurable
+measurably
+measure
+measured
+measurement
+measurements
+measurer
+measures
+measuring
+meat
+meats
+meaty
+Mecca
+mechanic
+mechanical
+mechanically
+mechanics
+mechanism
+mechanisms
+mechanization
+mechanizations
+mechanize
+mechanized
+mechanizes
+mechanizing
+medal
+medallion
+medallions
+medals
+meddle
+meddled
+meddler
+meddles
+meddling
+Medea
+Medfield
+Medford
+media
+median
+medians
+mediate
+mediated
+mediates
+mediating
+mediation
+mediations
+mediator
+medic
+Medicaid
+medical
+medically
+Medicare
+Medici
+medicinal
+medicinally
+medicine
+medicines
+Medicis
+medics
+medieval
+mediocre
+mediocrity
+meditate
+meditated
+meditates
+meditating
+meditation
+meditations
+meditative
+Mediterranean
+Mediterraneanization
+Mediterraneanizations
+Mediterraneanize
+Mediterraneanizes
+medium
+mediums
+medley
+Medusa
+Medusan
+meek
+meeker
+meekest
+meekly
+meekness
+meet
+meeting
+meetinghouse
+meetings
+meets
+Meg
+megabaud
+megabit
+megabits
+megabyte
+megabytes
+megahertz
+megalomania
+megaton
+megavolt
+megawatt
+megaword
+megawords
+megohm
+Meier
+Meiji
+Meister
+Meistersinger
+Mekong
+Mel
+Melampus
+melancholy
+Melanesia
+Melanesian
+Melanie
+Melbourne
+Melcher
+Melinda
+Melisande
+Melissa
+Mellon
+mellow
+mellowed
+mellowing
+mellowness
+mellows
+melodies
+melodious
+melodiously
+melodiousness
+melodrama
+melodramas
+melodramatic
+melody
+melon
+melons
+Melpomene
+melt
+melted
+melting
+meltingly
+melts
+Melville
+Melvin
+member
+members
+membership
+memberships
+membrane
+memento
+memo
+memoir
+memoirs
+memorabilia
+memorable
+memorableness
+memoranda
+memorandum
+memorial
+memorially
+memorials
+memories
+memorization
+memorize
+memorized
+memorizer
+memorizes
+memorizing
+memory
+memoryless
+memos
+Memphis
+men
+menace
+menaced
+menacing
+menagerie
+menarche
+Mencken
+mend
+mendacious
+mendacity
+mended
+Mendel
+Mendelian
+Mendelize
+Mendelizes
+Mendelssohn
+mender
+mending
+Mendoza
+mends
+Menelaus
+menial
+menials
+Menlo
+Mennonite
+Mennonites
+Menominee
+Menorca
+mens
+Mensch
+menstruate
+mensurable
+mensuration
+mental
+mentalities
+mentality
+mentally
+mention
+mentionable
+mentioned
+mentioner
+mentioners
+mentioning
+mentions
+mentor
+mentors
+menu
+menus
+Menzies
+Mephistopheles
+mercantile
+Mercator
+Mercedes
+mercenaries
+mercenariness
+mercenary
+merchandise
+merchandiser
+merchandising
+merchant
+merchants
+merciful
+mercifully
+merciless
+mercilessly
+Merck
+mercurial
+mercury
+mercy
+mere
+Meredith
+merely
+merest
+merge
+merged
+merger
+mergers
+merges
+merging
+meridian
+meringue
+merit
+merited
+meriting
+meritorious
+meritoriously
+meritoriousness
+merits
+Meriwether
+Merle
+mermaid
+Merriam
+Merrick
+merriest
+Merrill
+merrily
+Merrimac
+Merrimack
+merriment
+Merritt
+merry
+Merrymake
+Mervin
+mescaline
+mesh
+meson
+Mesopotamia
+Mesozoic
+mesquite
+mess
+message
+messages
+messed
+messenger
+messengers
+messes
+Messiah
+messiahs
+messier
+messiest
+messily
+messiness
+messing
+messy
+met
+meta
+metabolic
+metabolism
+metacircular
+metacircularity
+metal
+metalanguage
+metallic
+metallization
+metallizations
+metallurgy
+metals
+metamathematical
+metamorphosis
+metaphor
+metaphorical
+metaphorically
+metaphors
+metaphysical
+metaphysically
+metaphysics
+metavariable
+Metcalf
+mete
+meted
+meteor
+meteoric
+meteorite
+meteoritic
+meteorology
+meteors
+meter
+metering
+meters
+metes
+methane
+method
+methodical
+methodically
+methodicalness
+Methodism
+Methodist
+methodists
+methodological
+methodologically
+methodologies
+methodologists
+methodology
+methods
+Methuen
+Methuselah
+Methuselahs
+meticulously
+meting
+Metrecal
+metric
+metrical
+metrics
+metro
+metronome
+metropolis
+metropolitan
+mets
+mettle
+mettlesome
+Metzler
+mew
+mewed
+mews
+Mexican
+Mexicanize
+Mexicanizes
+Mexicans
+Mexico
+Meyer
+Meyers
+Miami
+miasma
+mica
+mice
+Michael
+Michaels
+Michel
+Michelangelo
+Michele
+Michelin
+Michelson
+Michigan
+Mick
+Mickey
+Mickie
+Micky
+micro
+microarchitects
+microarchitecture
+microarchitectures
+microbial
+microbicidal
+microbicide
+microcode
+microcoded
+microcodes
+microcoding
+microcomputer
+microcomputers
+microcosm
+microcycle
+microcycles
+microeconomics
+microelectronics
+microfilm
+microfilms
+microgramming
+microinstruction
+microinstructions
+microjump
+microjumps
+microlevel
+micron
+Micronesia
+Micronesian
+microoperations
+microphone
+microphones
+microphoning
+Microport
+microprocedure
+microprocedures
+microprocessing
+microprocessor
+microprocessors
+microprogram
+microprogrammable
+microprogrammed
+microprogrammer
+microprogramming
+microprograms
+micros
+microscope
+microscopes
+microscopic
+microscopy
+microsecond
+microseconds
+Microsoft
+microstore
+microsystems
+MicroVAX
+MicroVAXes
+microwave
+microwaves
+microword
+microwords
+mid
+Midas
+midday
+middle
+Middlebury
+middleman
+middlemen
+middles
+Middlesex
+Middleton
+Middletown
+middling
+midget
+Midlandize
+Midlandizes
+midnight
+midnights
+midpoint
+midpoints
+midrange
+midscale
+midsection
+midshipman
+midshipmen
+midst
+midstream
+midsts
+midsummer
+midway
+midweek
+Midwest
+Midwestern
+Midwesterner
+Midwesterners
+midwife
+midwinter
+midwives
+mien
+might
+mightier
+mightiest
+mightily
+mightiness
+mighty
+migrant
+migrate
+migrated
+migrates
+migrating
+migration
+migrations
+migratory
+Miguel
+mike
+Mikhail
+Mikoyan
+Milan
+mild
+milder
+mildest
+mildew
+mildly
+mildness
+Mildred
+mile
+mileage
+Miles
+milestone
+milestones
+militant
+militantly
+militarily
+militarism
+military
+militia
+milk
+milked
+milker
+milkers
+milkiness
+milking
+milkmaid
+milkmaids
+milks
+milky
+mill
+Millard
+milled
+millennium
+miller
+millet
+milliammeter
+milliampere
+Millie
+millijoule
+Millikan
+millimeter
+millimeters
+millinery
+milling
+Millington
+million
+millionaire
+millionaires
+millions
+millionth
+millipede
+millipedes
+millisecond
+milliseconds
+millivolt
+millivoltmeter
+milliwatt
+Mills
+millstone
+millstones
+Milne
+Milquetoast
+Milquetoasts
+Milton
+Miltonian
+Miltonic
+Miltonism
+Miltonist
+Miltonize
+Miltonized
+Miltonizes
+Miltonizing
+Milwaukee
+mimeograph
+Mimi
+mimic
+mimicked
+mimicking
+mimics
+minaret
+mince
+minced
+mincemeat
+minces
+mincing
+mind
+Mindanao
+minded
+mindful
+mindfully
+mindfulness
+minding
+mindless
+mindlessly
+minds
+mine
+mined
+minefield
+miner
+mineral
+minerals
+miners
+Minerva
+mines
+minesweeper
+mingle
+mingled
+mingles
+mingling
+mini
+miniature
+miniatures
+miniaturization
+miniaturize
+miniaturized
+miniaturizes
+miniaturizing
+minicomputer
+minicomputers
+minima
+minimal
+minimally
+minimax
+minimization
+minimizations
+minimize
+minimized
+minimizer
+minimizers
+minimizes
+minimizing
+minimum
+mining
+minion
+minis
+minister
+ministered
+ministering
+ministers
+ministries
+ministry
+mink
+minks
+Minneapolis
+Minnesota
+Minnie
+minnow
+minnows
+Minoan
+minor
+minoring
+minorities
+minority
+minors
+Minos
+Minotaur
+Minsk
+Minsky
+minstrel
+minstrels
+mint
+minted
+minter
+minting
+mints
+minuend
+minuet
+minus
+minuscule
+minute
+minutely
+minuteman
+minutemen
+minuteness
+minuter
+minutes
+Miocene
+MIPS
+Mira
+miracle
+miracles
+miraculous
+miraculously
+mirage
+Miranda
+mire
+mired
+mires
+Mirfak
+Miriam
+mirror
+mirrored
+mirroring
+mirrors
+mirth
+misanthrope
+misbehaving
+miscalculation
+miscalculations
+miscarriage
+miscarry
+miscegenation
+miscellaneous
+miscellaneously
+miscellaneousness
+mischief
+mischievous
+mischievously
+mischievousness
+misconception
+misconceptions
+misconduct
+misconstrue
+misconstrued
+misconstrues
+misdemeanors
+miser
+miserable
+miserableness
+miserably
+miseries
+miserly
+misers
+misery
+misfit
+misfits
+misfortune
+misfortunes
+misgiving
+misgivings
+misguided
+mishap
+mishaps
+misinformed
+misjudged
+misjudgment
+mislead
+misleading
+misleads
+misled
+mismanagement
+mismatch
+mismatched
+mismatches
+mismatching
+misnomer
+misplace
+misplaced
+misplaces
+misplacing
+mispronunciation
+misrepresentation
+misrepresentations
+miss
+missed
+misses
+misshapen
+missile
+missiles
+missing
+mission
+missionaries
+missionary
+missioner
+missions
+Mississippi
+Mississippian
+Mississippians
+missive
+Missoula
+Missouri
+misspell
+misspelled
+misspelling
+misspellings
+misspells
+Missy
+mist
+mistakable
+mistake
+mistaken
+mistakenly
+mistakes
+mistaking
+misted
+mister
+misters
+mistiness
+misting
+mistletoe
+mistress
+mistrust
+mistrusted
+mists
+misty
+mistype
+mistyped
+mistypes
+mistyping
+misunderstand
+misunderstander
+misunderstanders
+misunderstanding
+misunderstandings
+misunderstood
+misuse
+misused
+misuses
+misusing
+Mitch
+Mitchell
+miter
+mitigate
+mitigated
+mitigates
+mitigating
+mitigation
+mitigative
+MITRE
+MITREs
+mitten
+mittens
+mix
+mixed
+mixer
+mixers
+mixes
+mixing
+mixture
+mixtures
+mixup
+Mizar
+mnemonic
+mnemonically
+mnemonics
+moan
+moaned
+moans
+moat
+moats
+mob
+Mobil
+mobile
+mobility
+mobs
+mobster
+moccasin
+moccasins
+mock
+mocked
+mocker
+mockery
+mocking
+mockingbird
+mocks
+mockup
+modal
+modalities
+modality
+modally
+mode
+model
+modeled
+modeling
+modelings
+models
+modem
+modems
+moderate
+moderated
+moderately
+moderateness
+moderates
+moderating
+moderation
+modern
+modernity
+modernize
+modernized
+modernizer
+modernizing
+modernly
+modernness
+moderns
+modes
+modest
+modestly
+Modesto
+modesty
+modicum
+modifiability
+modifiable
+modification
+modifications
+modified
+modifier
+modifiers
+modifies
+modify
+modifying
+Modula
+Modula-2
+Modula-3
+modular
+modularity
+modularization
+modularize
+modularized
+modularizes
+modularizing
+modularly
+modulate
+modulated
+modulates
+modulating
+modulation
+modulations
+modulator
+modulators
+module
+modules
+moduli
+modulo
+modulus
+modus
+Moe
+Moen
+Mogadiscio
+Mogadishu
+Moghul
+Mohammed
+Mohammedan
+Mohammedanism
+Mohammedanization
+Mohammedanizations
+Mohammedanize
+Mohammedanizes
+Mohawk
+Mohr
+Moines
+Moiseyev
+moist
+moisten
+moistly
+moistness
+moisture
+molar
+molasses
+mold
+Moldavia
+molded
+molder
+molding
+molds
+mole
+molecular
+molecule
+molecules
+molehill
+moles
+molest
+molested
+molesting
+molests
+Moliere
+Moline
+Moll
+Mollie
+mollify
+mollusk
+Molly
+mollycoddle
+Moloch
+Molochize
+Molochizes
+Molotov
+molten
+Moluccas
+moment
+momentarily
+momentariness
+momentary
+momentous
+momentously
+momentousness
+moments
+momentum
+mommy
+Mona
+Monaco
+monadic
+monarch
+monarchies
+monarchs
+monarchy
+Monash
+monasteries
+monastery
+monastic
+Monday
+Mondays
+Monet
+monetarism
+monetary
+money
+moneyed
+moneys
+Monfort
+Mongolia
+Mongolian
+Mongolianism
+mongoose
+Monica
+monitor
+monitored
+monitoring
+monitors
+monk
+monkey
+monkeyed
+monkeying
+monkeys
+monkish
+monks
+Monmouth
+monoalphabetic
+Monoceros
+monochromatic
+monochrome
+monocotyledon
+monocular
+monogamous
+monogamy
+monogram
+monograms
+monograph
+monographes
+monographs
+monolith
+monolithic
+monologue
+Monongahela
+monopolies
+monopolize
+monopolized
+monopolizing
+monopoly
+monoprogrammed
+monoprogramming
+monostable
+monotheism
+monotone
+monotonic
+monotonically
+monotonicity
+monotonous
+monotonously
+monotonousness
+monotony
+Monroe
+Monrovia
+Monsanto
+monsoon
+monster
+monsters
+monstrosity
+monstrous
+monstrously
+Mont
+Montague
+Montaigne
+Montana
+Montanan
+Montclair
+Montenegrin
+Montenegro
+Monterey
+Monteverdi
+Montevideo
+Montgomery
+month
+monthly
+months
+Monticello
+Montmartre
+Montpelier
+Montrachet
+Montreal
+Monty
+monument
+monumental
+monumentally
+monuments
+moo
+mood
+moodiness
+moods
+moody
+Moon
+mooned
+Mooney
+mooning
+moonlight
+moonlighter
+moonlighting
+Moonlike
+moonlit
+moons
+moonshine
+Moor
+Moore
+moored
+mooring
+moorings
+Moorish
+Moors
+moose
+moot
+mop
+moped
+mops
+moraine
+moral
+morale
+moralities
+morality
+morally
+morals
+Moran
+morass
+moratorium
+Moravia
+Moravian
+Moravianized
+Moravianizeds
+morbid
+morbidly
+morbidness
+more
+Morehouse
+Moreland
+moreover
+mores
+Moresby
+Morgan
+Moriarty
+moribund
+Morley
+Mormon
+morn
+morning
+mornings
+Moroccan
+Morocco
+moron
+morose
+morphine
+morphism
+morphisms
+morphological
+morphology
+Morrill
+Morris
+Morrison
+Morrissey
+Morristown
+morrow
+Morse
+morsel
+morsels
+mortal
+mortality
+mortally
+mortals
+mortar
+mortared
+mortaring
+mortars
+mortem
+mortgage
+mortgages
+mortician
+mortification
+mortified
+mortifies
+mortify
+mortifying
+Mortimer
+Morton
+mosaic
+mosaics
+Moscone
+Moscow
+Moser
+Moses
+Moslem
+Moslemize
+Moslemizes
+Moslems
+mosque
+mosquito
+mosquitoes
+moss
+Mossberg
+mosses
+mossy
+most
+mostly
+motel
+motels
+moth
+mothball
+mothballs
+mother
+mothered
+motherer
+motherers
+motherhood
+mothering
+motherland
+motherly
+mothers
+motif
+motifs
+motion
+motioned
+motioning
+motionless
+motionlessly
+motionlessness
+motions
+motivate
+motivated
+motivates
+motivating
+motivation
+motivations
+motive
+motives
+motley
+motor
+motorcar
+motorcars
+motorcycle
+motorcycles
+motoring
+motorist
+motorists
+motorize
+motorized
+motorizes
+motorizing
+Motorola
+motors
+motto
+mottoes
+mould
+moulding
+Moulton
+mound
+mounded
+mounds
+mount
+mountable
+mountain
+mountaineer
+mountaineering
+mountaineers
+mountainous
+mountainously
+mountains
+mounted
+mounter
+mounting
+mountings
+mounts
+mourn
+mourned
+mourner
+mourners
+mournful
+mournfully
+mournfulness
+mourning
+mourns
+mouse
+mouser
+mouses
+mousetrap
+mousy
+mouth
+Mouthe
+mouthed
+mouthes
+mouthful
+mouthing
+mouthpiece
+mouths
+Mouton
+movable
+move
+moved
+movement
+movements
+mover
+movers
+moves
+movie
+movies
+moving
+movings
+mow
+mowed
+mower
+mows
+Moyer
+Mozart
+mu
+much
+muck
+mucker
+mucking
+mucus
+mud
+Mudd
+muddied
+muddiness
+muddle
+muddled
+muddlehead
+muddler
+muddlers
+muddles
+muddling
+muddy
+Mueller
+Muenster
+muff
+muffin
+muffins
+muffle
+muffled
+muffler
+muffles
+muffling
+muffs
+mug
+mugging
+mugs
+Muhammad
+Muir
+Mukden
+mulatto
+mulberries
+mulberry
+mule
+mules
+mull
+mullah
+Mullen
+multi
+multibit
+Multibus
+multibyte
+multicast
+multicasting
+multicasts
+multicellular
+multicomputer
+MULTICS
+Multics
+multidimensional
+multilateral
+multilayer
+multilayered
+multilevel
+multimedia
+multinational
+multiple
+multiples
+multiplex
+multiplexed
+multiplexer
+multiplexers
+multiplexes
+multiplexing
+multiplexor
+multiplexors
+multiplicand
+multiplicands
+multiplication
+multiplications
+multiplicative
+multiplicatives
+multiplicity
+multiplied
+multiplier
+multipliers
+multiplies
+multiply
+multiplying
+multiprocess
+multiprocessing
+multiprocessor
+multiprocessors
+multiprogram
+multiprogrammed
+multiprogramming
+multistage
+multitude
+multitudes
+multiuser
+multivariate
+multiword
+mumble
+mumbled
+mumbler
+mumblers
+mumbles
+mumbling
+mumblings
+Mumford
+mummies
+mummy
+munch
+munched
+munching
+Muncie
+mundane
+mundanely
+Mundt
+mung
+Munich
+municipal
+municipalities
+municipality
+municipally
+munition
+munitions
+Munroe
+Munsey
+Munson
+Muong
+mural
+murder
+murdered
+murderer
+murderers
+murdering
+murderous
+murderously
+murders
+Muriel
+murky
+murmur
+murmured
+murmurer
+murmuring
+murmurs
+Murphy
+Murray
+Murrow
+Muscat
+muscle
+muscled
+muscles
+muscling
+Muscovite
+Muscovy
+muscular
+musculature
+muse
+mused
+muses
+museum
+museums
+mush
+mushroom
+mushroomed
+mushrooming
+mushrooms
+mushy
+music
+musical
+musically
+musicals
+musician
+musicianly
+musicians
+musicology
+musing
+musings
+musk
+Muskegon
+musket
+muskets
+muskox
+muskoxen
+muskrat
+muskrats
+musks
+Muslim
+Muslims
+muslin
+mussel
+mussels
+Mussolini
+Mussolinis
+Mussorgsky
+must
+mustache
+mustached
+mustaches
+mustard
+muster
+mustiness
+musts
+musty
+mutability
+mutable
+mutableness
+mutandis
+mutant
+mutate
+mutated
+mutates
+mutating
+mutation
+mutations
+mutatis
+mutative
+mute
+muted
+mutely
+muteness
+mutilate
+mutilated
+mutilates
+mutilating
+mutilation
+mutinies
+mutiny
+mutt
+mutter
+muttered
+mutterer
+mutterers
+muttering
+mutters
+mutton
+mutual
+mutually
+Muzak
+Muzo
+muzzle
+muzzles
+my
+Mycenae
+Mycenaean
+Myers
+Mynheer
+Myra
+myriad
+Myron
+myrtle
+myself
+Mysore
+mysteries
+mysterious
+mysteriously
+mysteriousness
+mystery
+mystic
+mystical
+mystics
+mystify
+myth
+mythical
+mythologies
+mythology
+nab
+Nabisco
+nabla
+nablas
+Nadia
+Nadine
+nadir
+nag
+Nagasaki
+nagged
+nagging
+Nagoya
+nags
+Nagy
+nail
+nailed
+nailing
+nails
+Nair
+Nairobi
+naive
+naively
+naiveness
+naivete
+Nakamura
+Nakayama
+naked
+nakedly
+nakedness
+Nakoma
+name
+nameable
+named
+nameless
+namelessly
+namely
+namer
+namers
+names
+namesake
+namesakes
+naming
+Nan
+Nancy
+Nanette
+Nanking
+nanoinstruction
+nanoinstructions
+Nanook
+nanoprogram
+nanoprogramming
+nanosecond
+nanoseconds
+nanostore
+nanostores
+Nantucket
+Naomi
+nap
+napkin
+napkins
+Naples
+Napoleon
+Napoleonic
+Napoleonize
+Napoleonizes
+naps
+Narbonne
+narcissus
+narcotic
+narcotics
+Narragansett
+narrate
+narration
+narrative
+narratives
+narrow
+narrowed
+narrower
+narrowest
+narrowing
+narrowly
+narrowness
+narrows
+nary
+NASA
+nasal
+nasally
+NASAs
+Nash
+Nashua
+Nashville
+Nassau
+nastier
+nastiest
+nastily
+nastiness
+nasty
+Nat
+natal
+Natalie
+Natchez
+Nate
+Nathan
+Nathaniel
+nation
+national
+nationalist
+nationalists
+nationalities
+nationality
+nationalization
+nationalize
+nationalized
+nationalizes
+nationalizing
+nationally
+nationals
+nationhood
+nations
+nationwide
+native
+natively
+natives
+nativity
+NATO
+NATOs
+natural
+naturalism
+naturalist
+naturalization
+naturally
+naturalness
+naturals
+nature
+natured
+natures
+naught
+naughtier
+naughtiness
+naughty
+Naur
+nausea
+nauseate
+nauseum
+Navaho
+Navajo
+naval
+navally
+navel
+navies
+navigable
+navigate
+navigated
+navigates
+navigating
+navigation
+navigator
+navigators
+Navona
+navy
+nay
+Nazarene
+Nazareth
+Nazi
+Nazis
+Nazism
+Ndjamena
+Neal
+Neanderthal
+Neapolitan
+near
+nearby
+neared
+nearer
+nearest
+nearing
+nearly
+nearness
+nears
+nearsighted
+neat
+neater
+neatest
+neatly
+neatness
+Nebraska
+Nebraskan
+Nebuchadnezzar
+nebula
+nebular
+nebulous
+necessaries
+necessarily
+necessary
+necessitate
+necessitated
+necessitates
+necessitating
+necessitation
+necessities
+necessity
+neck
+necking
+necklace
+necklaces
+neckline
+necks
+necktie
+neckties
+necrosis
+nectar
+Ned
+need
+needed
+needful
+Needham
+needing
+needle
+needled
+needler
+needlers
+needles
+needless
+needlessly
+needlessness
+needlework
+needling
+needs
+needy
+Neff
+negate
+negated
+negates
+negating
+negation
+negations
+negative
+negatively
+negatives
+negator
+negators
+neglect
+neglected
+neglecting
+neglects
+negligee
+negligence
+negligent
+negligible
+negotiable
+negotiate
+negotiated
+negotiates
+negotiating
+negotiation
+negotiations
+Negro
+Negroes
+Negroid
+Negroization
+Negroizations
+Negroize
+Negroizes
+Nehru
+neigh
+neighbor
+neighborhood
+neighborhoods
+neighboring
+neighborly
+neighbors
+Neil
+neither
+Nell
+Nellie
+Nelsen
+Nelson
+nemesis
+neoclassic
+neon
+neonatal
+neophyte
+neophytes
+Nepal
+Nepali
+nephew
+nephews
+Neptune
+Nero
+nerve
+nerves
+nervous
+nervously
+nervousness
+Ness
+nest
+nested
+nester
+nesting
+nestle
+nestled
+nestles
+nestling
+Nestor
+nests
+net
+nether
+Netherlands
+nets
+netted
+netting
+nettle
+nettled
+network
+networked
+networking
+networks
+Neumann
+neural
+neuritis
+neurological
+neurologists
+neuron
+neurons
+neuroses
+neurosis
+neurotic
+neuter
+neutral
+neutralities
+neutrality
+neutralize
+neutralized
+neutralizing
+neutrally
+neutrino
+neutrinos
+neutron
+Neva
+Nevada
+never
+nevertheless
+Nevins
+new
+Newark
+Newbold
+newborn
+Newbury
+Newburyport
+Newcastle
+newcomer
+newcomers
+Newell
+newer
+newest
+Newfoundland
+newly
+newlywed
+Newman
+Newmanize
+Newmanizes
+newness
+Newport
+NeWS
+newscast
+newsgroup
+newsletter
+newsletters
+newsman
+newsmen
+newspaper
+newspapers
+newsstand
+Newsweek
+Newsweekly
+newt
+Newton
+Newtonian
+next
+Nguyen
+Niagara
+Niamey
+nibble
+nibbled
+nibbler
+nibblers
+nibbles
+nibbling
+Nibelung
+Nicaragua
+Niccolo
+nice
+nicely
+niceness
+nicer
+nicest
+niche
+Nicholas
+Nicholls
+Nichols
+Nicholson
+nick
+nicked
+nickel
+nickels
+nicker
+nicking
+Nicklaus
+nickname
+nicknamed
+nicknames
+nicks
+Nicodemus
+Nicosia
+nicotine
+niece
+nieces
+Nielsen
+Nielson
+Nietzsche
+nifty
+Niger
+Nigeria
+Nigerian
+nigh
+night
+nightcap
+nightclub
+nightfall
+nightgown
+nightingale
+nightingales
+nightly
+nightmare
+nightmares
+nightmarish
+nights
+nighttime
+nihilism
+Nijinsky
+Nikko
+Nikolai
+nil
+Nile
+Nilsen
+Nilsson
+nimble
+nimbleness
+nimbler
+nimbly
+nimbus
+Nina
+nine
+ninefold
+nines
+nineteen
+nineteens
+nineteenth
+nineties
+ninetieth
+ninety
+Nineveh
+ninth
+Niobe
+nip
+nipple
+Nippon
+Nipponize
+Nipponizes
+nips
+nitric
+nitrogen
+nitrous
+nitty
+Nixon
+no
+Noah
+Nobel
+nobility
+noble
+nobleman
+nobleness
+nobler
+nobles
+noblest
+nobly
+nobody
+nocturnal
+nocturnally
+nod
+nodal
+nodded
+nodding
+node
+nodes
+nods
+nodular
+nodule
+Noel
+Noetherian
+noise
+noiseless
+noiselessly
+noises
+noisier
+noisily
+noisiness
+noisy
+Nolan
+Noll
+nomenclature
+nominal
+nominally
+nominate
+nominated
+nominating
+nomination
+nominative
+nominee
+non
+nonadaptive
+nonbiodegradable
+nonblocking
+nonce
+nonchalant
+noncommercial
+noncommunication
+nonconsecutively
+nonconservative
+noncritical
+noncyclic
+nondecreasing
+nondescript
+nondescriptly
+nondestructively
+nondeterminacy
+nondeterminate
+nondeterminately
+nondeterminism
+nondeterministic
+nondeterministically
+none
+nonempty
+nonetheless
+nonexistence
+nonexistent
+nonextensible
+nonfunctional
+nongovernmental
+nonidempotent
+noninteracting
+noninterference
+noninterleaved
+nonintrusive
+nonintuitive
+noninverting
+nonlinear
+nonlinearities
+nonlinearity
+nonlinearly
+nonlocal
+nonmaskable
+nonmathematical
+nonmilitary
+nonnegative
+nonnegligible
+nonnumerical
+nonogenarian
+nonorthogonal
+nonorthogonality
+nonperishable
+nonpersistent
+nonportable
+nonprocedural
+nonprocedurally
+nonprofit
+nonprogrammable
+nonprogrammer
+nonsegmented
+nonsense
+nonsensical
+nonsequential
+nonspecialist
+nonspecialists
+nonstandard
+nonsynchronous
+nontechnical
+nonterminal
+nonterminals
+nonterminating
+nontermination
+nonthermal
+nontransparent
+nontrivial
+nonuniform
+nonuniformity
+nonzero
+noodle
+nook
+nooks
+noon
+noonday
+noons
+noontide
+noontime
+noose
+nor
+Nora
+Nordhoff
+Nordic
+Nordstrom
+Noreen
+Norfolk
+norm
+Norma
+normal
+normalcy
+normality
+normalization
+normalize
+normalized
+normalizes
+normalizing
+normally
+normals
+Norman
+Normandy
+Normanization
+Normanizations
+Normanize
+Normanizer
+Normanizers
+Normanizes
+normative
+norms
+Norris
+Norristown
+Norse
+north
+Northampton
+northbound
+northeast
+northeaster
+northeastern
+northerly
+northern
+northerner
+northerners
+northernly
+Northfield
+Northrop
+Northrup
+Northumberland
+northward
+northwards
+northwest
+northwestern
+Norton
+Norwalk
+Norway
+Norwegian
+Norwich
+nose
+nosed
+noses
+nosing
+nostalgia
+nostalgic
+Nostradamus
+Nostrand
+nostril
+nostrils
+not
+notable
+notables
+notably
+notarize
+notarized
+notarizes
+notarizing
+notary
+notation
+notational
+notations
+notch
+notched
+notches
+notching
+note
+notebook
+notebooks
+noted
+notes
+noteworthy
+nothing
+nothingness
+nothings
+notice
+noticeable
+noticeably
+noticed
+notices
+noticing
+notification
+notifications
+notified
+notifier
+notifiers
+notifies
+notify
+notifying
+noting
+notion
+notions
+notoriety
+notorious
+notoriously
+Notre
+Nottingham
+notwithstanding
+Nouakchott
+noun
+nouns
+nourish
+nourished
+nourishes
+nourishing
+nourishment
+Novak
+novel
+novelist
+novelists
+novels
+novelties
+novelty
+November
+Novembers
+novice
+novices
+Novosibirsk
+now
+nowadays
+nowhere
+noxious
+Noyes
+nozzle
+nu
+nuance
+nuances
+Nubia
+Nubian
+nubile
+nuclear
+nuclei
+nucleic
+nucleotide
+nucleotides
+nucleus
+nuclide
+nude
+nudge
+nudged
+nudity
+Nugent
+nugget
+nuisance
+nuisances
+null
+nullary
+nulled
+nullified
+nullifiers
+nullifies
+nullify
+nullifying
+nulls
+numb
+numbed
+number
+numbered
+numberer
+numbering
+numberless
+numbers
+numbing
+numbly
+numbness
+numbs
+numerable
+numeral
+numerals
+numerator
+numerators
+numeric
+numerical
+numerically
+numerics
+numerous
+numismatic
+numismatist
+nun
+nuns
+nuptial
+nurse
+nursed
+nurseries
+nursery
+nurses
+nursing
+nurture
+nurtured
+nurtures
+nurturing
+nut
+nutate
+nutria
+nutrient
+nutrition
+nutritious
+nuts
+nutshell
+nutshells
+nuzzle
+nylon
+nymph
+nymphomania
+nymphomaniac
+nymphs
+Nyquist
+oaf
+oak
+oaken
+Oakland
+Oakley
+Oakmont
+oaks
+oar
+oars
+oases
+oasis
+oat
+oaten
+oath
+oaths
+oatmeal
+oats
+obedience
+obediences
+obedient
+obediently
+obelisk
+Oberlin
+Oberon
+obese
+obey
+obeyed
+obeying
+obeys
+obfuscate
+obfuscatory
+obituary
+object
+objected
+objecting
+objection
+objectionable
+objections
+objective
+objectively
+objectives
+objector
+objectors
+objects
+obligated
+obligation
+obligations
+obligatory
+oblige
+obliged
+obliges
+obliging
+obligingly
+oblique
+obliquely
+obliqueness
+obliterate
+obliterated
+obliterates
+obliterating
+obliteration
+oblivion
+oblivious
+obliviously
+obliviousness
+oblong
+obnoxious
+oboe
+O'Brien
+obscene
+obscure
+obscured
+obscurely
+obscurer
+obscures
+obscuring
+obscurities
+obscurity
+obsequious
+observable
+observance
+observances
+observant
+observation
+observations
+observatory
+observe
+observed
+observer
+observers
+observes
+observing
+obsession
+obsessions
+obsessive
+obsolescence
+obsolescent
+obsolete
+obsoleted
+obsoletes
+obsoleting
+obstacle
+obstacles
+obstinacy
+obstinate
+obstinately
+obstruct
+obstructed
+obstructing
+obstruction
+obstructions
+obstructive
+obtain
+obtainable
+obtainably
+obtained
+obtaining
+obtains
+obviate
+obviated
+obviates
+obviating
+obviation
+obviations
+obvious
+obviously
+obviousness
+Occam
+occasion
+occasional
+occasionally
+occasioned
+occasioning
+occasionings
+occasions
+Occident
+Occidental
+Occidentalization
+Occidentalizations
+Occidentalize
+Occidentalized
+Occidentalizes
+Occidentalizing
+Occidentals
+occipital
+occlude
+occluded
+occludes
+occlusion
+occlusions
+occult
+occupancies
+occupancy
+occupant
+occupants
+occupation
+occupational
+occupationally
+occupations
+occupied
+occupier
+occupies
+occupy
+occupying
+occur
+occurred
+occurrence
+occurrences
+occurring
+occurs
+ocean
+Oceania
+oceanic
+oceanography
+oceans
+O'Connell
+O'Connor
+Oconomowoc
+octagon
+octagonal
+octahedra
+octahedral
+octahedron
+octal
+octane
+octave
+octaves
+Octavia
+octet
+octets
+October
+Octobers
+octogenarian
+octopus
+odd
+odder
+oddest
+oddities
+oddity
+oddly
+oddness
+odds
+ode
+O'Dell
+Oderberg
+Oderbergs
+odes
+Odessa
+Odin
+odious
+odiously
+odiousness
+odium
+O'Donnell
+odor
+odorous
+odorously
+odorousness
+odors
+O'Dwyer
+Odysseus
+Odyssey
+Oedipal
+Oedipally
+Oedipus
+of
+off
+Offenbach
+offend
+offended
+offender
+offenders
+offending
+offends
+offense
+offenses
+offensive
+offensively
+offensiveness
+offer
+offered
+offerer
+offerers
+offering
+offerings
+offers
+offhand
+office
+officemate
+officer
+officers
+offices
+official
+officialdom
+officially
+officials
+officiate
+officio
+officious
+officiously
+officiousness
+offing
+offload
+offs
+offset
+offsets
+offsetting
+offshore
+offspring
+oft
+often
+oftentimes
+Ogden
+oh
+O'Hare
+Ohio
+ohm
+ohmmeter
+oil
+oilcloth
+oiled
+oiler
+oilers
+oilier
+oiliest
+oiling
+oils
+oily
+ointment
+Ojibwa
+Okamoto
+okay
+Okinawa
+Oklahoma
+Oklahoman
+Olaf
+Olav
+old
+olden
+Oldenburg
+older
+oldest
+oldness
+Oldsmobile
+Olduvai
+oldy
+oleander
+O'Leary
+Oleg
+oleomargarine
+Olga
+oligarchy
+Oligocene
+Olin
+olive
+Oliver
+Olivers
+olives
+Olivetti
+Olivia
+Olivier
+Olsen
+Olson
+Olympia
+Olympian
+Olympianize
+Olympianizes
+Olympic
+Olympics
+Olympus
+Omaha
+Oman
+omega
+omelet
+omen
+omens
+omicron
+ominous
+ominously
+ominousness
+omission
+omissions
+omit
+omits
+omitted
+omitting
+omnibus
+omnidirectional
+omnipotent
+omnipresent
+omniscient
+omnisciently
+omnivore
+on
+onanism
+once
+oncology
+one
+Oneida
+O'Neill
+oneness
+onerous
+ones
+oneself
+onetime
+ongoing
+onion
+onions
+online
+onlooker
+only
+Onondaga
+onrush
+onset
+onsets
+onslaught
+Ontario
+onto
+ontology
+onus
+onward
+onwards
+onyx
+ooze
+oozed
+opacity
+opal
+opals
+opaque
+opaquely
+opaqueness
+opcode
+OPEC
+Opel
+open
+opened
+opener
+openers
+opening
+openings
+openly
+openness
+opens
+opera
+operable
+operand
+operandi
+operands
+operas
+operate
+operated
+operates
+operating
+operation
+operational
+operationally
+operations
+operative
+operatives
+operator
+operators
+operetta
+Ophiuchus
+Ophiucus
+opiate
+opinion
+opinions
+opium
+opossum
+Oppenheimer
+opponent
+opponents
+opportune
+opportunely
+opportunism
+opportunistic
+opportunities
+opportunity
+opposable
+oppose
+opposed
+opposes
+opposing
+opposite
+oppositely
+oppositeness
+opposites
+opposition
+oppress
+oppressed
+oppresses
+oppressing
+oppression
+oppressive
+oppressor
+oppressors
+opprobrium
+opt
+opted
+opthalmic
+optic
+optical
+optically
+optics
+optima
+optimal
+optimality
+optimally
+optimism
+optimist
+optimistic
+optimistically
+optimization
+optimizations
+optimize
+optimized
+optimizer
+optimizers
+optimizes
+optimizing
+optimum
+opting
+option
+optional
+optionally
+options
+optoacoustic
+optometrist
+optometry
+opts
+opulence
+opulent
+opus
+or
+oracle
+oracles
+oral
+orally
+orange
+oranges
+orangutan
+oration
+orations
+orator
+oratories
+orators
+oratory
+orb
+orbit
+orbital
+orbitally
+orbited
+orbiter
+orbiters
+orbiting
+orbits
+orchard
+orchards
+orchestra
+orchestral
+orchestras
+orchestrate
+orchid
+orchids
+ordain
+ordained
+ordaining
+ordains
+ordeal
+order
+ordered
+ordering
+orderings
+orderlies
+orderly
+orders
+ordinal
+ordinance
+ordinances
+ordinarily
+ordinariness
+ordinary
+ordinate
+ordinates
+ordination
+ore
+oregano
+Oregon
+Oregonians
+ores
+Oresteia
+Orestes
+organ
+organic
+organism
+organisms
+organist
+organists
+organizable
+organization
+organizational
+organizationally
+organizations
+organize
+organized
+organizer
+organizers
+organizes
+organizing
+organs
+orgasm
+orgiastic
+orgies
+orgy
+Orient
+Oriental
+Orientalization
+Orientalizations
+Orientalize
+Orientalized
+Orientalizes
+Orientalizing
+Orientals
+orientation
+orientations
+oriented
+orienting
+orients
+orifice
+orifices
+origin
+original
+originality
+originally
+originals
+originate
+originated
+originates
+originating
+origination
+originator
+originators
+origins
+Orin
+Orinoco
+oriole
+Orion
+Orkney
+Orlando
+Orleans
+Orlick
+Orly
+ornament
+ornamental
+ornamentally
+ornamentation
+ornamented
+ornamenting
+ornaments
+ornate
+ornery
+Orono
+orphan
+orphanage
+orphaned
+orphans
+Orpheus
+Orphic
+Orphically
+Orr
+Ortega
+orthant
+orthodontist
+orthodox
+orthodoxy
+orthogonal
+orthogonality
+orthogonally
+orthopedic
+Orville
+Orwell
+Orwellian
+Osaka
+Osbert
+Osborn
+Osborne
+Oscar
+oscillate
+oscillated
+oscillates
+oscillating
+oscillation
+oscillations
+oscillator
+oscillators
+oscillatory
+oscilloscope
+oscilloscopes
+Osgood
+O'Shea
+Oshkosh
+Osiris
+Oslo
+osmosis
+osmotic
+ossify
+ostensible
+ostensibly
+ostentatious
+osteopath
+osteopathic
+osteopathy
+osteoporosis
+ostracism
+Ostrander
+ostrich
+ostriches
+O'Sullivan
+Oswald
+Othello
+other
+others
+otherwise
+otherworldly
+Otis
+Ott
+Ottawa
+otter
+otters
+Otto
+Ottoman
+Ottomanization
+Ottomanizations
+Ottomanize
+Ottomanizes
+Ouagadougou
+ouch
+ought
+ounce
+ounces
+our
+ours
+ourself
+ourselves
+oust
+out
+outbound
+outbreak
+outbreaks
+outburst
+outbursts
+outcast
+outcasts
+outcome
+outcomes
+outcries
+outcry
+outdated
+outdo
+outdoor
+outdoors
+outer
+outermost
+outfit
+outfits
+outfitted
+outgoing
+outgrew
+outgrow
+outgrowing
+outgrown
+outgrows
+outgrowth
+outing
+outlandish
+outlast
+outlasts
+outlaw
+outlawed
+outlawing
+outlaws
+outlay
+outlays
+outlet
+outlets
+outline
+outlined
+outlines
+outlining
+outlive
+outlived
+outlives
+outliving
+outlook
+outlying
+outnumbered
+outperform
+outperformed
+outperforming
+outperforms
+outpost
+outposts
+output
+outputs
+outputting
+outrage
+outraged
+outrageous
+outrageously
+outrages
+outright
+outrun
+outruns
+outs
+outset
+outside
+outsider
+outsiders
+outskirts
+outstanding
+outstandingly
+outstretched
+outstrip
+outstripped
+outstripping
+outstrips
+outvote
+outvoted
+outvotes
+outvoting
+outward
+outwardly
+outweigh
+outweighed
+outweighing
+outweighs
+outwit
+outwits
+outwitted
+outwitting
+oval
+ovals
+ovaries
+ovary
+oven
+ovens
+over
+overall
+overalls
+overboard
+overcame
+overcoat
+overcoats
+overcome
+overcomes
+overcoming
+overcrowd
+overcrowded
+overcrowding
+overcrowds
+overdone
+overdose
+overdraft
+overdrafts
+overdue
+overemphasis
+overemphasized
+overestimate
+overestimated
+overestimates
+overestimating
+overestimation
+overflow
+overflowed
+overflowing
+overflows
+overgrown
+overhang
+overhanging
+overhangs
+overhaul
+overhauling
+overhead
+overheads
+overhear
+overheard
+overhearing
+overhears
+overjoy
+overjoyed
+overkill
+overland
+overlap
+overlapped
+overlapping
+overlaps
+overlay
+overlaying
+overlays
+overload
+overloaded
+overloading
+overloads
+overlook
+overlooked
+overlooking
+overlooks
+overly
+overnight
+overnighter
+overnighters
+overpower
+overpowered
+overpowering
+overpowers
+overprint
+overprinted
+overprinting
+overprints
+overproduction
+overridden
+override
+overrides
+overriding
+overrode
+overrule
+overruled
+overrules
+overrun
+overrunning
+overruns
+overseas
+oversee
+overseeing
+overseer
+overseers
+oversees
+overshadow
+overshadowed
+overshadowing
+overshadows
+overshoot
+overshot
+oversight
+oversights
+oversimplified
+oversimplifies
+oversimplify
+oversimplifying
+oversized
+overstate
+overstated
+overstatement
+overstatements
+overstates
+overstating
+overstocks
+oversubscribed
+overt
+overtake
+overtaken
+overtaker
+overtakers
+overtakes
+overtaking
+overthrew
+overthrow
+overthrown
+overtime
+overtly
+overtone
+overtones
+overtook
+overture
+overtures
+overturn
+overturned
+overturning
+overturns
+overuse
+overview
+overviews
+overwhelm
+overwhelmed
+overwhelming
+overwhelmingly
+overwhelms
+overwork
+overworked
+overworking
+overworks
+overwrite
+overwrites
+overwriting
+overwritten
+overzealous
+Ovid
+owe
+owed
+Owen
+Owens
+owes
+owing
+owl
+owls
+own
+owned
+owner
+owners
+ownership
+ownerships
+owning
+owns
+ox
+oxen
+Oxford
+oxide
+oxides
+oxidize
+oxidized
+Oxnard
+Oxonian
+oxygen
+oyster
+oysters
+Oz
+Ozark
+Ozarks
+ozone
+Ozzie
+Pablo
+Pabst
+pace
+paced
+pacemaker
+pacer
+pacers
+paces
+pacific
+pacification
+pacified
+pacifier
+pacifies
+pacifism
+pacifist
+pacify
+pacing
+pack
+package
+packaged
+packager
+packagers
+packages
+packaging
+packagings
+Packard
+Packards
+packed
+packer
+packers
+packet
+packets
+packing
+packs
+Packwood
+pact
+pacts
+pad
+padded
+padding
+paddle
+paddock
+paddy
+padlock
+pads
+pagan
+Paganini
+pagans
+page
+pageant
+pageantry
+pageants
+paged
+pager
+pagers
+pages
+paginate
+paginated
+paginates
+paginating
+pagination
+paging
+pagoda
+paid
+pail
+pails
+pain
+Paine
+pained
+painful
+painfully
+painless
+pains
+painstaking
+painstakingly
+paint
+painted
+painter
+painters
+painting
+paintings
+paints
+pair
+paired
+pairing
+pairings
+pairs
+pairwise
+pajama
+pajamas
+Pakistan
+Pakistani
+Pakistanis
+pal
+palace
+palaces
+palate
+palates
+Palatine
+pale
+paled
+palely
+paleness
+Paleolithic
+Paleozoic
+paler
+Palermo
+pales
+palest
+Palestine
+Palestinian
+palfrey
+palindrome
+palindromic
+paling
+pall
+Palladian
+palladium
+palliate
+palliative
+pallid
+palm
+palmed
+palmer
+palming
+Palmolive
+palms
+Palmyra
+Palo
+Palomar
+palpable
+pals
+palsy
+Pam
+Pamela
+pamper
+pamphlet
+pamphlets
+pan
+panacea
+panaceas
+panama
+Panamanian
+pancake
+pancakes
+Pancho
+panda
+Pandanus
+pandas
+pandemic
+pandemonium
+pander
+Pandora
+pane
+panel
+paneled
+paneling
+panelist
+panelists
+panels
+panes
+pang
+Pangaea
+pangs
+panic
+panicked
+panicking
+panicky
+panics
+panned
+panning
+panorama
+panoramic
+pans
+pansies
+pansy
+pant
+panted
+pantheism
+pantheist
+pantheon
+panther
+panthers
+panties
+panting
+pantomime
+pantries
+pantry
+pants
+panty
+pantyhose
+Paoli
+papa
+papal
+paper
+paperback
+paperbacks
+papered
+paperer
+paperers
+papering
+paperings
+papers
+paperweight
+paperwork
+papoose
+Pappas
+Papua
+papyrus
+par
+parabola
+parabolic
+paraboloid
+paraboloidal
+parachute
+parachuted
+parachutes
+parade
+paraded
+parades
+paradigm
+paradigms
+parading
+paradise
+paradox
+paradoxes
+paradoxical
+paradoxically
+paraffin
+paragon
+paragons
+paragraph
+paragraphing
+paragraphs
+Paraguay
+Paraguayan
+Paraguayans
+parakeet
+parallax
+parallel
+paralleled
+paralleling
+parallelism
+parallelize
+parallelized
+parallelizes
+parallelizing
+parallelogram
+parallelograms
+parallels
+paralysis
+paralyze
+paralyzed
+paralyzes
+paralyzing
+parameter
+parameterizable
+parameterization
+parameterizations
+parameterize
+parameterized
+parameterizes
+parameterizing
+parameterless
+parameters
+parametric
+parametrized
+paramilitary
+paramount
+Paramus
+paranoia
+paranoiac
+paranoid
+paranormal
+parapet
+parapets
+paraphernalia
+paraphrase
+paraphrased
+paraphrases
+paraphrasing
+parapsychology
+parasite
+parasites
+parasitic
+parasitics
+parasol
+parboil
+PARC
+parcel
+parceled
+parceling
+parcels
+parch
+parched
+parchment
+pardon
+pardonable
+pardonably
+pardoned
+pardoner
+pardoners
+pardoning
+pardons
+pare
+paregoric
+parent
+parentage
+parental
+parentheses
+parenthesis
+parenthesized
+parenthesizes
+parenthesizing
+parenthetic
+parenthetical
+parenthetically
+parenthood
+parents
+pares
+Pareto
+pariah
+parimutuel
+paring
+parings
+Paris
+parish
+parishes
+parishioner
+Parisian
+Parisianization
+Parisianizations
+Parisianize
+Parisianizes
+parity
+park
+Parke
+parked
+parker
+parkers
+Parkersburg
+Parkhouse
+parking
+Parkinson
+Parkinsonian
+parkland
+parklike
+Parks
+parkway
+parlay
+parley
+parliament
+parliamentarian
+parliamentary
+parliaments
+parlor
+parlors
+Parmesan
+parochial
+parody
+parole
+paroled
+paroles
+paroling
+Parr
+parried
+Parrish
+parrot
+parroting
+parrots
+Parrs
+parry
+pars
+parse
+parsed
+parser
+parsers
+parses
+Parsi
+Parsifal
+parsimony
+parsing
+parsings
+parsley
+parson
+Parsons
+part
+partake
+partaker
+partakes
+partaking
+parted
+parter
+parters
+Parthenon
+Parthia
+partial
+partiality
+partially
+participant
+participants
+participate
+participated
+participates
+participating
+participation
+participle
+particle
+particles
+particular
+particularly
+particulars
+particulate
+parties
+parting
+partings
+partisan
+partisans
+partition
+partitioned
+partitioning
+partitions
+partly
+partner
+partnered
+partners
+partnership
+partook
+partridge
+partridges
+parts
+party
+Pasadena
+PASCAL
+Pascal
+Paso
+pass
+passage
+passages
+passageway
+Passaic
+passe
+passed
+passenger
+passengers
+passer
+passers
+passes
+passing
+passion
+passionate
+passionately
+passions
+passivate
+passive
+passively
+passiveness
+passivity
+Passover
+passport
+passports
+password
+passwords
+past
+paste
+pasted
+pastel
+Pasternak
+pastes
+Pasteur
+pastime
+pastimes
+pasting
+pastness
+pastor
+pastoral
+pastors
+pastry
+pasts
+pasture
+pastures
+pat
+Patagonia
+Patagonians
+patch
+patched
+patches
+patching
+patchwork
+patchy
+pate
+paten
+patent
+patentable
+patented
+patenter
+patenters
+patenting
+patently
+patents
+paternal
+paternally
+paternoster
+Paterson
+path
+pathetic
+pathname
+pathnames
+pathogen
+pathogenesis
+pathological
+pathology
+pathos
+paths
+pathway
+pathways
+patience
+patient
+patiently
+patients
+patina
+patio
+patriarch
+patriarchal
+patriarchs
+patriarchy
+Patrice
+Patricia
+patrician
+patricians
+Patrick
+patrimonial
+patrimony
+patriot
+patriotic
+patriotism
+patriots
+patrol
+patrolled
+patrolling
+patrolman
+patrolmen
+patrols
+patron
+patronage
+patronize
+patronized
+patronizes
+patronizing
+patrons
+pats
+Patsies
+Patsy
+patter
+pattered
+pattering
+patterings
+pattern
+patterned
+patterning
+patterns
+patters
+Patterson
+Patti
+patties
+Patton
+patty
+paucity
+Paul
+Paula
+Paulette
+Pauli
+Pauline
+Pauling
+Paulinize
+Paulinizes
+Paulo
+Paulsen
+Paulson
+Paulus
+paunch
+paunchy
+pauper
+pause
+paused
+pauses
+pausing
+pave
+paved
+pavement
+pavements
+paves
+pavilion
+pavilions
+paving
+Pavlov
+Pavlovian
+paw
+pawing
+pawn
+pawns
+pawnshop
+paws
+Pawtucket
+pay
+payable
+paycheck
+paychecks
+payed
+payer
+payers
+paying
+payment
+payments
+Payne
+Paynes
+Paynize
+Paynizes
+payoff
+payoffs
+payroll
+pays
+Payson
+Paz
+pea
+Peabody
+peace
+peaceable
+peaceful
+peacefully
+peacefulness
+peacetime
+peach
+peaches
+Peachtree
+peacock
+peacocks
+peak
+peaked
+peaks
+peal
+Peale
+pealed
+pealing
+peals
+peanut
+peanuts
+pear
+Pearce
+pearl
+pearls
+pearly
+pears
+Pearson
+peas
+peasant
+peasantry
+peasants
+Pease
+peat
+pebble
+pebbles
+peccary
+peck
+pecked
+pecking
+pecks
+Pecos
+pectoral
+peculiar
+peculiarities
+peculiarity
+peculiarly
+pecuniary
+pedagogic
+pedagogical
+pedagogically
+pedagogy
+pedal
+pedant
+pedantic
+pedantry
+peddle
+peddler
+peddlers
+pedestal
+pedestrian
+pedestrians
+pediatric
+pediatrician
+pediatrics
+pedigree
+Pedro
+peek
+peeked
+peeking
+peeks
+peel
+peeled
+peeling
+peels
+peep
+peeped
+peeper
+peephole
+peeping
+peeps
+peer
+peered
+peering
+peerless
+peers
+peg
+Pegasus
+pegboard
+Peggy
+pegs
+Peiping
+pejorative
+Peking
+Pelham
+pelican
+pellagra
+Peloponnese
+pelt
+pelting
+pelts
+pelvic
+pelvis
+Pembroke
+pen
+penal
+penalize
+penalized
+penalizes
+penalizing
+penalties
+penalty
+penance
+pence
+penchant
+pencil
+penciled
+pencils
+pend
+pendant
+pended
+pending
+Pendleton
+pends
+pendulum
+pendulums
+Penelope
+penetrable
+penetrate
+penetrated
+penetrates
+penetrating
+penetratingly
+penetration
+penetrations
+penetrative
+penetrator
+penetrators
+penguin
+penguins
+Penh
+penicillin
+peninsula
+peninsulas
+penis
+penises
+penitent
+penitentiary
+Penn
+penned
+pennies
+penniless
+penning
+Pennsylvania
+penny
+Penrose
+pens
+Pensacola
+pension
+pensioner
+pensions
+pensive
+pent
+pentagon
+pentagons
+Pentateuch
+Pentecost
+pentecostal
+penthouse
+penultimate
+penumbra
+peony
+people
+peopled
+peoples
+Peoria
+pep
+pepper
+peppered
+peppering
+peppermint
+pepperoni
+peppers
+peppery
+peppy
+Pepsi
+PepsiCo
+Pepsico
+peptide
+per
+perceivable
+perceivably
+perceive
+perceived
+perceiver
+perceivers
+perceives
+perceiving
+percent
+percentage
+percentages
+percentile
+percentiles
+percents
+perceptible
+perceptibly
+perception
+perceptions
+perceptive
+perceptively
+perceptual
+perceptually
+perch
+perchance
+perched
+perches
+perching
+Percival
+percussion
+percutaneous
+Percy
+peremptory
+perennial
+perennially
+Perez
+perfect
+perfected
+perfectible
+perfecting
+perfection
+perfectionist
+perfectionists
+perfectly
+perfectness
+perfects
+perforce
+perform
+performance
+performances
+performed
+performer
+performers
+performing
+performs
+perfume
+perfumed
+perfumes
+perfuming
+perfunctory
+Pergamon
+perhaps
+Periclean
+Pericles
+perihelion
+peril
+Perilla
+perilous
+perilously
+perils
+perimeter
+period
+periodic
+periodical
+periodically
+periodicals
+periods
+peripheral
+peripherally
+peripherals
+peripheries
+periphery
+periscope
+perish
+perishable
+perishables
+perished
+perisher
+perishers
+perishes
+perishing
+perjure
+perjury
+perk
+Perkins
+perky
+Perle
+permanence
+permanent
+permanently
+permeable
+permeate
+permeated
+permeates
+permeating
+permeation
+Permian
+permissibility
+permissible
+permissibly
+permission
+permissions
+permissive
+permissively
+permit
+permits
+permitted
+permitting
+permutation
+permutations
+permute
+permuted
+permutes
+permuting
+pernicious
+Pernod
+peroxide
+perpendicular
+perpendicularly
+perpendiculars
+perpetrate
+perpetrated
+perpetrates
+perpetrating
+perpetration
+perpetrations
+perpetrator
+perpetrators
+perpetual
+perpetually
+perpetuate
+perpetuated
+perpetuates
+perpetuating
+perpetuation
+perpetuity
+perplex
+perplexed
+perplexing
+perplexity
+Perry
+persecute
+persecuted
+persecutes
+persecuting
+persecution
+persecutor
+persecutors
+Perseid
+Persephone
+Perseus
+perseverance
+persevere
+persevered
+perseveres
+persevering
+Pershing
+Persia
+Persian
+Persianization
+Persianizations
+Persianize
+Persianizes
+Persians
+persist
+persisted
+persistence
+persistent
+persistently
+persisting
+persists
+person
+personage
+personages
+personal
+personalities
+personality
+personalization
+personalize
+personalized
+personalizes
+personalizing
+personally
+personification
+personified
+personifies
+personify
+personifying
+personnel
+persons
+perspective
+perspectives
+perspicuous
+perspicuously
+perspiration
+perspire
+persuadable
+persuade
+persuaded
+persuader
+persuaders
+persuades
+persuading
+persuasion
+persuasions
+persuasive
+persuasively
+persuasiveness
+pertain
+pertained
+pertaining
+pertains
+Perth
+pertinent
+perturb
+perturbation
+perturbations
+perturbed
+Peru
+perusal
+peruse
+perused
+peruser
+perusers
+peruses
+perusing
+Peruvian
+Peruvianize
+Peruvianizes
+Peruvians
+pervade
+pervaded
+pervades
+pervading
+pervasive
+pervasively
+perversion
+pervert
+perverted
+perverts
+pessimism
+pessimist
+pessimistic
+pest
+pester
+pesticide
+pestilence
+pestilent
+pests
+pet
+petal
+petals
+Pete
+Peter
+Peters
+Petersburg
+Petersen
+Peterson
+petition
+petitioned
+petitioner
+petitioning
+petitions
+Petkiewicz
+petri
+petroleum
+pets
+petted
+petter
+petters
+Pettibone
+petticoat
+petticoats
+pettiness
+petting
+petty
+petulance
+petulant
+Peugeot
+pew
+Pewaukee
+pews
+pewter
+Pfizer
+Phaedra
+phantom
+phantoms
+pharmaceutic
+pharmacist
+pharmacology
+pharmacopoeia
+pharmacy
+phase
+phased
+phaser
+phasers
+phases
+phasing
+pheasant
+pheasants
+Phelps
+phenomena
+phenomenal
+phenomenally
+phenomenological
+phenomenologically
+phenomenologies
+phenomenology
+phenomenon
+phi
+PHIGS
+Phil
+Philadelphia
+philanthropy
+Philco
+philharmonic
+Philip
+Philippe
+Philippians
+Philippine
+Philippines
+Philistine
+Philistines
+Philistinize
+Philistinizes
+Phillies
+Phillip
+Phillips
+Philly
+philosopher
+philosophers
+philosophic
+philosophical
+philosophically
+philosophies
+philosophize
+philosophized
+philosophizer
+philosophizers
+philosophizes
+philosophizing
+philosophy
+Phipps
+Phobos
+Phoenicia
+phoenix
+phone
+phoned
+phoneme
+phonemes
+phonemic
+phones
+phonetic
+phonetics
+phoning
+phonograph
+phonographs
+phony
+phosgene
+phosphate
+phosphates
+phosphor
+phosphorescent
+phosphoric
+phosphorus
+photo
+photocopied
+photocopier
+photocopiers
+photocopies
+photocopy
+photocopying
+photodiode
+photodiodes
+photogenic
+photograph
+photographed
+photographer
+photographers
+photographic
+photographing
+photographs
+photography
+photon
+photos
+photosensitive
+phototypesetter
+phototypesetters
+phrase
+phrased
+phraseology
+phrases
+phrasing
+phrasings
+phyla
+Phyllis
+phylum
+physic
+physical
+physically
+physicalness
+physicals
+physician
+physicians
+physicist
+physicists
+physics
+physiological
+physiologically
+physiology
+physiotherapist
+physiotherapy
+physique
+phytoplankton
+pi
+pianist
+piano
+pianos
+pica
+picas
+Picasso
+picayune
+Piccadilly
+piccolo
+pick
+pickaxe
+picked
+picker
+Pickering
+pickers
+picket
+picketed
+picketer
+picketers
+picketing
+pickets
+Pickett
+Pickford
+picking
+pickings
+pickle
+pickled
+pickles
+pickling
+Pickman
+picks
+pickup
+pickups
+picky
+picnic
+picnicked
+picnicking
+picnics
+picofarad
+picojoule
+picosecond
+Pict
+pictorial
+pictorially
+picture
+pictured
+pictures
+picturesque
+picturesqueness
+picturing
+piddle
+pidgin
+pie
+piece
+pieced
+piecemeal
+pieces
+piecewise
+piecing
+Piedfort
+Piedmont
+pier
+pierce
+pierced
+pierces
+piercing
+Pierre
+piers
+Pierson
+pies
+piety
+piezoelectric
+pig
+pigeon
+pigeonhole
+pigeons
+piggish
+piggy
+piggyback
+piggybacked
+piggybacking
+piggybacks
+pigment
+pigmentation
+pigmented
+pigments
+pigpen
+pigs
+pigskin
+pigtail
+pike
+piker
+pikes
+Pilate
+pile
+piled
+pilers
+piles
+pilfer
+pilferage
+pilgrim
+pilgrimage
+pilgrimages
+pilgrims
+piling
+pilings
+pill
+pillage
+pillaged
+pillar
+pillared
+pillars
+pillory
+pillow
+pillows
+pills
+Pillsbury
+pilot
+piloting
+pilots
+pimp
+pimple
+pin
+pinafore
+pinball
+pinch
+pinched
+pinches
+pinching
+pincushion
+pine
+pineapple
+pineapples
+pined
+Pinehurst
+pines
+ping
+pinhead
+pinhole
+pining
+pinion
+pink
+pinker
+pinkest
+pinkie
+pinkish
+pinkly
+pinkness
+pinks
+pinnacle
+pinnacles
+pinned
+pinning
+pinnings
+pinochle
+pinpoint
+pinpointing
+pinpoints
+pins
+pinscher
+Pinsky
+pint
+pinto
+pints
+pinwheel
+pion
+pioneer
+pioneered
+pioneering
+pioneers
+Piotr
+pious
+piously
+pip
+pipe
+piped
+pipeline
+pipelined
+pipelines
+pipelining
+Piper
+pipers
+pipes
+Pipestone
+pipette
+piping
+pique
+piracy
+Piraeus
+pirate
+pirates
+Pisa
+Piscataway
+Pisces
+piss
+pistachio
+pistil
+pistils
+pistol
+pistols
+piston
+pistons
+pit
+pitch
+pitched
+pitcher
+pitchers
+pitches
+pitchfork
+pitching
+piteous
+piteously
+pitfall
+pitfalls
+pith
+pithed
+pithes
+pithier
+pithiest
+pithiness
+pithing
+pithy
+pitiable
+pitied
+pitier
+pitiers
+pities
+pitiful
+pitifully
+pitiless
+pitilessly
+Pitney
+pits
+Pitt
+pitted
+Pittsburgh
+Pittsburghers
+Pittsfield
+Pittston
+pituitary
+pity
+pitying
+pityingly
+Pius
+pivot
+pivotal
+pivoting
+pivots
+pixel
+pixels
+Pizarro
+pizza
+placard
+placards
+placate
+place
+placebo
+placed
+placeholder
+placement
+placements
+placenta
+placental
+placer
+places
+placid
+placidly
+placing
+plagiarism
+plagiarist
+plague
+plagued
+plagues
+plaguing
+plaid
+plaids
+plain
+plainer
+plainest
+Plainfield
+plainly
+plainness
+plains
+plaintext
+plaintexts
+plaintiff
+plaintiffs
+plaintive
+plaintively
+plaintiveness
+Plainview
+plait
+plaits
+plan
+planar
+planarity
+Planck
+plane
+planed
+planeload
+planer
+planers
+planes
+planet
+planetaria
+planetarium
+planetary
+planetesimal
+planetoid
+planets
+planing
+plank
+planking
+planks
+plankton
+planned
+planner
+planners
+planning
+planoconcave
+planoconvex
+plans
+plant
+plantation
+plantations
+planted
+planter
+planters
+planting
+plantings
+plants
+plaque
+plasma
+plaster
+plastered
+plasterer
+plastering
+plasters
+plastic
+plasticity
+plastics
+plate
+plateau
+plateaus
+plated
+platelet
+platelets
+platen
+platens
+plates
+platform
+platforms
+plating
+platinum
+platitude
+Plato
+platonic
+Platonism
+Platonist
+platoon
+Platte
+platter
+platters
+Platteville
+plausibility
+plausible
+play
+playable
+playback
+playboy
+played
+player
+players
+playful
+playfully
+playfulness
+playground
+playgrounds
+playhouse
+playing
+playmate
+playmates
+playoff
+playroom
+plays
+plaything
+playthings
+playtime
+playwright
+playwrights
+playwriting
+plaza
+plea
+plead
+pleaded
+pleader
+pleading
+pleads
+pleas
+pleasant
+pleasantly
+pleasantness
+please
+pleased
+pleases
+pleasing
+pleasingly
+pleasure
+pleasures
+pleat
+plebeian
+plebian
+plebiscite
+plebiscites
+pledge
+pledged
+pledges
+Pleiades
+Pleistocene
+plenary
+plenipotentiary
+plenteous
+plentiful
+plentifully
+plenty
+plethora
+pleurisy
+Plexiglas
+pliable
+pliant
+plied
+pliers
+plies
+plight
+Pliny
+Pliocene
+plod
+plodding
+plot
+plots
+plotted
+plotter
+plotters
+plotting
+plow
+plowed
+plower
+plowing
+plowman
+plows
+plowshare
+ploy
+ploys
+pluck
+plucked
+plucking
+plucks
+plucky
+plug
+pluggable
+plugged
+plugging
+plugs
+plum
+plumage
+plumb
+plumbed
+plumbing
+plumbs
+plume
+plumed
+plumes
+plummet
+plummeting
+plump
+plumped
+plumpness
+plums
+plunder
+plundered
+plunderer
+plunderers
+plundering
+plunders
+plunge
+plunged
+plunger
+plungers
+plunges
+plunging
+plunk
+plural
+plurality
+plurals
+plus
+pluses
+plush
+Plutarch
+Pluto
+plutonium
+ply
+Plymouth
+plywood
+pneumatic
+pneumonia
+Po
+poach
+poacher
+poaches
+Pocahontas
+pocket
+pocketbook
+pocketbooks
+pocketed
+pocketful
+pocketing
+pockets
+Pocono
+Poconos
+pod
+podia
+podium
+pods
+Podunk
+Poe
+poem
+poems
+poet
+poetic
+poetical
+poetically
+poetics
+poetries
+poetry
+poets
+pogo
+pogrom
+poignancy
+poignant
+Poincare
+Poindexter
+point
+pointed
+pointedly
+pointer
+pointers
+pointing
+pointless
+points
+pointy
+poise
+poised
+poises
+poison
+poisoned
+poisoner
+poisoning
+poisonous
+poisonousness
+poisons
+Poisson
+poke
+poked
+poker
+pokerface
+pokes
+poking
+Poland
+polar
+Polaris
+polarities
+polarity
+Polaroid
+pole
+polecat
+poled
+polemic
+polemics
+poles
+police
+policed
+policeman
+policemen
+polices
+policies
+policing
+policy
+poling
+polio
+polish
+polished
+polisher
+polishers
+polishes
+polishing
+Politburo
+polite
+politely
+politeness
+politer
+politest
+politic
+political
+politically
+politician
+politicians
+politicking
+politics
+Polk
+polka
+poll
+Pollard
+polled
+pollen
+polling
+polloi
+polls
+pollutant
+pollute
+polluted
+pollutes
+polluting
+pollution
+Pollux
+polo
+polyalphabetic
+polygon
+polygons
+Polyhymnia
+polymer
+polymers
+polymorphic
+Polynesia
+Polynesian
+polynomial
+polynomials
+Polyphemus
+polytechnic
+polytheist
+Pomerania
+Pomeranian
+Pomona
+pomp
+pompadour
+Pompeii
+Pompey
+pomposity
+pompous
+pompously
+pompousness
+Ponce
+Ponchartrain
+poncho
+pond
+ponder
+pondered
+pondering
+ponderous
+ponders
+ponds
+pong
+ponies
+Pontiac
+pontiff
+pontific
+pontificate
+pony
+pooch
+poodle
+pool
+Poole
+pooled
+pooling
+pools
+poor
+poorer
+poorest
+poorly
+poorness
+pop
+popcorn
+Pope
+Popek
+Popeks
+popish
+poplar
+poplin
+popped
+poppies
+popping
+poppy
+pops
+Popsicle
+Popsicles
+populace
+popular
+popularity
+popularization
+popularize
+popularized
+popularizes
+popularizing
+popularly
+populate
+populated
+populates
+populating
+population
+populations
+populous
+populousness
+porcelain
+porch
+porches
+porcine
+porcupine
+porcupines
+pore
+pored
+pores
+poring
+pork
+porker
+pornographer
+pornographic
+pornography
+porous
+porpoise
+porridge
+port
+portability
+portable
+portage
+portal
+portals
+Porte
+ported
+portend
+portended
+portending
+portends
+portent
+portentous
+porter
+porterhouse
+porters
+portfolio
+portfolios
+Portia
+portico
+porting
+portion
+portions
+Portland
+portly
+portmanteau
+Porto
+portrait
+portraits
+portray
+portrayal
+portrayed
+portraying
+portrays
+ports
+Portsmouth
+Portugal
+Portuguese
+pose
+posed
+Poseidon
+poser
+posers
+poses
+posh
+posing
+posit
+posited
+positing
+position
+positional
+positioned
+positioning
+positions
+positive
+positively
+positiveness
+positives
+positron
+posits
+Posner
+posse
+possess
+possessed
+possesses
+possessing
+possession
+possessional
+possessions
+possessive
+possessively
+possessiveness
+possessor
+possessors
+possibilities
+possibility
+possible
+possibly
+possum
+possums
+post
+postage
+postal
+postcard
+postcondition
+postdoctoral
+posted
+poster
+posterior
+posteriori
+posterity
+posters
+postfix
+postgraduate
+posting
+postlude
+postman
+postmark
+postmaster
+postmasters
+postmortem
+postoperative
+postorder
+postpone
+postponed
+postponing
+postprocess
+postprocessor
+posts
+postscript
+postscripts
+postulate
+postulated
+postulates
+postulating
+postulation
+postulations
+posture
+postures
+pot
+potable
+potash
+potassium
+potato
+potatoes
+potbelly
+Potemkin
+potent
+potentate
+potentates
+potential
+potentialities
+potentiality
+potentially
+potentials
+potentiating
+potentiometer
+potentiometers
+pothole
+potion
+potlatch
+Potomac
+potpourri
+pots
+Potsdam
+Pottawatomie
+potted
+potter
+potters
+pottery
+potting
+Potts
+pouch
+pouches
+Poughkeepsie
+poultice
+poultry
+pounce
+pounced
+pounces
+pouncing
+pound
+pounded
+pounder
+pounders
+pounding
+pounds
+pour
+poured
+pourer
+pourers
+pouring
+pours
+Poussin
+Poussins
+pout
+pouted
+pouting
+pouts
+poverty
+powder
+powdered
+powdering
+powderpuff
+powders
+powdery
+Powell
+power
+powered
+powerful
+powerfully
+powerfulness
+powering
+powerless
+powerlessly
+powerlessness
+Powers
+pox
+Poynting
+practicable
+practicably
+practical
+practicality
+practically
+practice
+practiced
+practices
+practicing
+practitioner
+practitioners
+Pradesh
+Prado
+pragmatic
+pragmatically
+pragmatics
+pragmatism
+pragmatist
+Prague
+prairie
+praise
+praised
+praiser
+praisers
+praises
+praiseworthy
+praising
+praisingly
+prance
+pranced
+prancer
+prancing
+prank
+pranks
+prate
+Pratt
+Prattville
+Pravda
+pray
+prayed
+prayer
+prayers
+praying
+preach
+preached
+preacher
+preachers
+preaches
+preaching
+preallocate
+preallocated
+preallocating
+preamble
+preambles
+preassign
+preassigned
+preassigning
+preassigns
+Precambrian
+precarious
+precariously
+precariousness
+precaution
+precautions
+precede
+preceded
+precedence
+precedences
+precedent
+precedented
+precedents
+precedes
+preceding
+precept
+precepts
+precess
+precession
+precinct
+precincts
+precious
+preciously
+preciousness
+precipice
+precipitable
+precipitate
+precipitated
+precipitately
+precipitateness
+precipitates
+precipitating
+precipitation
+precipitous
+precipitously
+precise
+precisely
+preciseness
+precision
+precisions
+preclude
+precluded
+precludes
+precluding
+precocious
+precociously
+precocity
+precompute
+precomputed
+precomputing
+preconceive
+preconceived
+preconception
+preconceptions
+precondition
+preconditioned
+preconditions
+precursor
+precursors
+predate
+predated
+predates
+predating
+predatory
+predecessor
+predecessors
+predefine
+predefined
+predefines
+predefining
+predefinition
+predefinitions
+predetermination
+predetermine
+predetermined
+predetermines
+predetermining
+predicament
+predicate
+predicated
+predicates
+predicating
+predication
+predications
+predict
+predictability
+predictable
+predictably
+predicted
+predicting
+prediction
+predictions
+predictive
+predictor
+predicts
+predilection
+predilections
+predisposition
+predominant
+predominantly
+predominate
+predominated
+predominately
+predominates
+predominating
+predomination
+preeminence
+preeminent
+preempt
+preempted
+preempting
+preemption
+preemptive
+preemptor
+preempts
+preen
+preexisting
+prefab
+prefabricate
+preface
+prefaced
+prefaces
+prefacing
+prefer
+preferable
+preferably
+preference
+preferences
+preferential
+preferentially
+preferred
+preferring
+prefers
+prefix
+prefixed
+prefixes
+prefixing
+pregnancy
+pregnant
+prehistoric
+preinitialize
+preinitialized
+preinitializes
+preinitializing
+prejudge
+prejudged
+prejudice
+prejudiced
+prejudices
+prejudicial
+prelate
+preliminaries
+preliminary
+prelude
+preludes
+premature
+prematurely
+prematurity
+premeditated
+premeditation
+premier
+premiers
+premise
+premises
+premium
+premiums
+premonition
+prenatal
+Prentice
+Prenticed
+Prenticing
+preoccupation
+preoccupied
+preoccupies
+preoccupy
+prep
+preparation
+preparations
+preparative
+preparatives
+preparatory
+prepare
+prepared
+prepares
+preparing
+prepend
+prepended
+prepending
+preposition
+prepositional
+prepositions
+preposterous
+preposterously
+preprocessed
+preprocessing
+preprocessor
+preprocessors
+preproduction
+preprogrammed
+prerequisite
+prerequisites
+prerogative
+prerogatives
+Presbyterian
+Presbyterianism
+Presbyterianize
+Presbyterianizes
+Prescott
+prescribe
+prescribed
+prescribes
+prescription
+prescriptions
+prescriptive
+preselect
+preselected
+preselecting
+preselects
+presence
+presences
+present
+presentation
+presentations
+presented
+presenter
+presenting
+presently
+presentness
+presents
+preservation
+preservations
+preserve
+preserved
+preserver
+preservers
+preserves
+preserving
+preset
+preside
+presided
+presidency
+president
+presidential
+presidents
+presides
+presiding
+Presley
+press
+pressed
+presser
+presses
+pressing
+pressings
+pressure
+pressured
+pressures
+pressuring
+pressurize
+pressurized
+prestidigitate
+prestige
+prestigious
+Preston
+presumably
+presume
+presumed
+presumes
+presuming
+presumption
+presumptions
+presumptive
+presumptuous
+presumptuousness
+presuppose
+presupposed
+presupposes
+presupposing
+presupposition
+pretend
+pretended
+pretender
+pretenders
+pretending
+pretends
+pretense
+pretenses
+pretension
+pretensions
+pretentious
+pretentiously
+pretentiousness
+pretext
+pretexts
+Pretoria
+Pretorian
+prettier
+prettiest
+prettily
+prettiness
+pretty
+prevail
+prevailed
+prevailing
+prevailingly
+prevails
+prevalence
+prevalent
+prevalently
+prevent
+preventable
+preventably
+prevented
+preventing
+prevention
+preventive
+preventives
+prevents
+preview
+previewed
+previewing
+previews
+previous
+previously
+prey
+preyed
+preying
+preys
+Priam
+price
+priced
+priceless
+pricer
+pricers
+prices
+pricing
+prick
+pricked
+pricking
+prickly
+pricks
+pride
+prided
+prides
+priding
+priest
+Priestley
+priggish
+prim
+prima
+primacy
+primal
+primaries
+primarily
+primary
+primate
+prime
+primed
+primeness
+primer
+primers
+primes
+primeval
+priming
+primitive
+primitively
+primitiveness
+primitives
+primrose
+prince
+princely
+princes
+princess
+princesses
+Princeton
+principal
+principalities
+principality
+principally
+principals
+Principia
+principle
+principled
+principles
+print
+printable
+printably
+printed
+printer
+printers
+printing
+printout
+prints
+prior
+priori
+priorities
+priority
+priory
+Priscilla
+prism
+prisms
+prison
+prisoner
+prisoners
+prisons
+pristine
+Pritchard
+privacies
+privacy
+private
+privately
+privates
+privation
+privations
+privies
+privilege
+privileged
+privileges
+privy
+prize
+prized
+prizer
+prizers
+prizes
+prizewinning
+prizing
+pro
+probabilistic
+probabilistically
+probabilities
+probability
+probable
+probably
+probate
+probated
+probates
+probating
+probation
+probative
+probe
+probed
+probes
+probing
+probings
+probity
+problem
+problematic
+problematical
+problematically
+problems
+procaine
+procedural
+procedurally
+procedure
+procedures
+proceed
+proceeded
+proceeding
+proceedings
+proceeds
+process
+processed
+processes
+processing
+procession
+processor
+processors
+proclaim
+proclaimed
+proclaimer
+proclaimers
+proclaiming
+proclaims
+proclamation
+proclamations
+proclivities
+proclivity
+procotols
+procrastinate
+procrastinated
+procrastinates
+procrastinating
+procrastination
+procreate
+Procrustean
+Procrusteanize
+Procrusteanizes
+Procrustes
+Procter
+procure
+procured
+procurement
+procurements
+procurer
+procurers
+procures
+procuring
+Procyon
+prod
+prodigal
+prodigally
+prodigious
+prodigy
+produce
+produced
+producer
+producers
+produces
+producible
+producing
+product
+production
+productions
+productive
+productively
+productivity
+products
+profane
+profanely
+profess
+professed
+professes
+professing
+profession
+professional
+professionalism
+professionally
+professionals
+professions
+professor
+professorial
+professors
+proffer
+proffered
+proffers
+proficiency
+proficient
+proficiently
+profile
+profiled
+profiles
+profiling
+profit
+profitability
+profitable
+profitably
+profited
+profiteer
+profiteers
+profiting
+profits
+profitted
+profligate
+profound
+profoundest
+profoundly
+profundity
+profuse
+profusion
+progenitor
+progeny
+prognosis
+prognosticate
+program
+programmability
+programmable
+programmed
+programmer
+programmers
+programming
+programs
+progress
+progressed
+progresses
+progressing
+progression
+progressions
+progressive
+progressively
+prohibit
+prohibited
+prohibiting
+prohibition
+prohibitions
+prohibitive
+prohibitively
+prohibitory
+prohibits
+project
+projected
+projectile
+projecting
+projection
+projections
+projective
+projectively
+projector
+projectors
+projects
+Prokofieff
+Prokofiev
+prolate
+prolegomena
+proletariat
+proliferate
+proliferated
+proliferates
+proliferating
+proliferation
+prolific
+prolix
+prolog
+prologue
+prolong
+prolongate
+prolonged
+prolonging
+prolongs
+promenade
+promenades
+Promethean
+Prometheus
+prominence
+prominent
+prominently
+promiscuous
+promise
+promised
+promises
+promising
+promontory
+promote
+promoted
+promoter
+promoters
+promotes
+promoting
+promotion
+promotional
+promotions
+prompt
+prompted
+prompter
+promptest
+prompting
+promptings
+promptly
+promptness
+prompts
+promulgate
+promulgated
+promulgates
+promulgating
+promulgation
+prone
+proneness
+prong
+pronged
+prongs
+pronoun
+pronounce
+pronounceable
+pronounced
+pronouncement
+pronouncements
+pronounces
+pronouncing
+pronouns
+pronunciation
+pronunciations
+proof
+proofread
+proofreader
+proofs
+prop
+propaganda
+propagandist
+propagate
+propagated
+propagates
+propagating
+propagation
+propagations
+propane
+propel
+propellant
+propelled
+propeller
+propellers
+propelling
+propels
+propensity
+proper
+properly
+properness
+propertied
+properties
+property
+prophecies
+prophecy
+prophesied
+prophesier
+prophesies
+prophesy
+prophet
+prophetic
+prophets
+propitious
+proponent
+proponents
+proportion
+proportional
+proportionally
+proportionately
+proportioned
+proportioning
+proportionment
+proportions
+propos
+proposal
+proposals
+propose
+proposed
+proposer
+proposes
+proposing
+proposition
+propositional
+propositionally
+propositioned
+propositioning
+propositions
+propound
+propounded
+propounding
+propounds
+proprietary
+proprietor
+proprietors
+propriety
+props
+propulsion
+propulsions
+prorate
+prorated
+prorates
+pros
+proscenium
+proscribe
+proscription
+prose
+prosecute
+prosecuted
+prosecutes
+prosecuting
+prosecution
+prosecutions
+prosecutor
+proselytize
+proselytized
+proselytizes
+proselytizing
+Proserpine
+prosodic
+prosodics
+prospect
+prospected
+prospecting
+prospection
+prospections
+prospective
+prospectively
+prospectives
+prospector
+prospectors
+prospects
+prospectus
+prosper
+prospered
+prospering
+prosperity
+prosperous
+prospers
+prostate
+prosthetic
+prostitute
+prostitution
+prostrate
+prostration
+protagonist
+protean
+protect
+protected
+protecting
+protection
+protections
+protective
+protectively
+protectiveness
+protector
+protectorate
+protectors
+protects
+protege
+proteges
+protein
+proteins
+protest
+protestant
+Protestantism
+Protestantize
+Protestantizes
+protestation
+protestations
+protested
+protesting
+protestingly
+protestor
+protests
+Protista
+protocol
+protocols
+proton
+protons
+Protophyta
+protoplasm
+prototype
+prototyped
+prototypes
+prototypical
+prototypically
+prototyping
+Protozoa
+protozoan
+protract
+protrude
+protruded
+protrudes
+protruding
+protrusion
+protrusions
+protuberant
+proud
+prouder
+proudest
+proudly
+Proust
+provability
+provable
+provably
+prove
+proved
+proven
+provenance
+Provence
+prover
+proverb
+proverbial
+proverbs
+provers
+proves
+provide
+provided
+providence
+provident
+provider
+providers
+provides
+providing
+province
+provinces
+provincial
+proving
+provision
+provisional
+provisionally
+provisioned
+provisioning
+provisions
+proviso
+provocation
+provoke
+provoked
+provokes
+provost
+prow
+prowess
+prowl
+prowled
+prowler
+prowlers
+prowling
+prows
+proximal
+proximate
+proximity
+Proxmire
+proxy
+prudence
+prudent
+prudential
+prudently
+prune
+pruned
+pruner
+pruners
+prunes
+pruning
+prurient
+Prussia
+Prussian
+Prussianization
+Prussianizations
+Prussianize
+Prussianizer
+Prussianizers
+Prussianizes
+pry
+prying
+psalm
+psalms
+pseudo
+pseudofiles
+pseudoinstruction
+pseudoinstructions
+pseudonym
+pseudoparallelism
+psilocybin
+psych
+psyche
+psychedelic
+psyches
+psychiatric
+psychiatrist
+psychiatrists
+psychiatry
+psychic
+psycho
+psychoanalysis
+psychoanalyst
+psychoanalytic
+psychobiology
+psychological
+psychologically
+psychologist
+psychologists
+psychology
+psychopath
+psychopathic
+psychophysic
+psychoses
+psychosis
+psychosocial
+psychosomatic
+psychotherapeutic
+psychotherapist
+psychotherapy
+psychotic
+Ptolemaic
+Ptolemaists
+Ptolemy
+pub
+puberty
+public
+publication
+publications
+publicity
+publicize
+publicized
+publicizes
+publicizing
+publicly
+publish
+published
+publisher
+publishers
+publishes
+publishing
+pubs
+Puccini
+pucker
+puckered
+puckering
+puckers
+pudding
+puddings
+puddle
+puddles
+puddling
+Puerto
+puff
+puffed
+puffin
+puffing
+puffs
+Pugh
+puke
+Pulaski
+Pulitzer
+pull
+pulled
+puller
+pulley
+pulleys
+pulling
+pullings
+Pullman
+Pullmanize
+Pullmanizes
+Pullmans
+pullover
+pulls
+pulmonary
+pulp
+pulping
+pulpit
+pulpits
+pulsar
+pulsate
+pulsation
+pulsations
+pulse
+pulsed
+pulses
+pulsing
+puma
+pumice
+pummel
+pump
+pumped
+pumping
+pumpkin
+pumpkins
+pumps
+pun
+punch
+punched
+puncher
+punches
+punching
+punctual
+punctually
+punctuation
+puncture
+punctured
+punctures
+puncturing
+pundit
+pungent
+Punic
+punish
+punishable
+punished
+punishes
+punishing
+punishment
+punishments
+punitive
+Punjab
+Punjabi
+puns
+punt
+punted
+punting
+punts
+puny
+pup
+pupa
+pupil
+pupils
+puppet
+puppeteer
+puppets
+puppies
+puppy
+pups
+Purcell
+purchase
+purchased
+purchaser
+purchasers
+purchases
+purchasing
+Purdue
+pure
+purely
+purer
+purest
+purgatory
+purge
+purged
+purges
+purging
+purification
+purifications
+purified
+purifier
+purifiers
+purifies
+purify
+purifying
+Purina
+purist
+Puritan
+puritanic
+Puritanize
+Puritanizer
+Puritanizers
+Puritanizes
+purity
+purple
+purpler
+purplest
+purport
+purported
+purportedly
+purporter
+purporters
+purporting
+purports
+purpose
+purposed
+purposeful
+purposefully
+purposely
+purposes
+purposive
+purr
+purred
+purring
+purrs
+purse
+pursed
+purser
+purses
+pursuant
+pursue
+pursued
+pursuer
+pursuers
+pursues
+pursuing
+pursuit
+pursuits
+purveyor
+purview
+pus
+Pusan
+Pusey
+push
+pushbutton
+pushdown
+pushed
+pusher
+pushers
+pushes
+pushing
+puss
+pussy
+pussycat
+put
+Putnam
+puts
+putt
+putter
+puttering
+putters
+putting
+putty
+puzzle
+puzzled
+puzzlement
+puzzler
+puzzlers
+puzzles
+puzzling
+puzzlings
+Pygmalion
+pygmies
+pygmy
+Pyle
+Pyongyang
+Pyotr
+pyramid
+pyramids
+pyre
+Pyrex
+Pyrrhic
+Pythagoras
+Pythagorean
+Pythagoreanize
+Pythagoreanizes
+Pythagoreans
+python
+Qatar
+qua
+quack
+quacked
+quackery
+quacks
+quad
+quadrangle
+quadrangular
+quadrant
+quadrants
+quadratic
+quadratical
+quadratically
+quadratics
+quadrature
+quadratures
+quadrennial
+quadrilateral
+quadrillion
+quadruple
+quadrupled
+quadruples
+quadrupling
+quadrupole
+quaff
+quagmire
+quagmires
+quahog
+quail
+quails
+quaint
+quaintly
+quaintness
+quake
+quaked
+quaker
+Quakeress
+Quakerization
+Quakerizations
+Quakerize
+Quakerizes
+quakers
+quakes
+quaking
+qualification
+qualifications
+qualified
+qualifier
+qualifiers
+qualifies
+qualify
+qualifying
+qualitative
+qualitatively
+qualities
+quality
+qualm
+quandaries
+quandary
+quanta
+Quantico
+quantifiable
+quantification
+quantifications
+quantified
+quantifier
+quantifiers
+quantifies
+quantify
+quantifying
+quantile
+quantitative
+quantitatively
+quantities
+quantity
+quantization
+quantize
+quantized
+quantizes
+quantizing
+quantum
+quarantine
+quarantines
+quarantining
+quark
+quarrel
+quarreled
+quarreling
+quarrels
+quarrelsome
+quarries
+quarry
+quart
+quarter
+quarterback
+quartered
+quartering
+quarterly
+quartermaster
+quarters
+quartet
+quartets
+quartile
+quarts
+quartz
+quartzite
+quasar
+quash
+quashed
+quashes
+quashing
+quasi
+Quasimodo
+quaternary
+quaver
+quavered
+quavering
+quavers
+quay
+queasy
+Quebec
+queen
+queenly
+queens
+Queensland
+queer
+queerer
+queerest
+queerly
+queerness
+quell
+quelling
+quench
+quenched
+quenches
+quenching
+queried
+queries
+query
+querying
+quest
+quested
+quester
+questers
+questing
+question
+questionable
+questionably
+questioned
+questioner
+questioners
+questioning
+questioningly
+questionings
+questionnaire
+questionnaires
+questions
+quests
+queue
+queued
+queueing
+queuer
+queuers
+queues
+queuing
+Quezon
+quibble
+Quichua
+quick
+quicken
+quickened
+quickening
+quickens
+quicker
+quickest
+quickie
+quicklime
+quickly
+quickness
+quicksand
+quicksilver
+quiescent
+quiet
+quieted
+quieter
+quietest
+quieting
+quietly
+quietness
+quiets
+quietude
+quill
+quilt
+quilted
+quilting
+quilts
+quince
+quinine
+Quinn
+quint
+quintet
+quintillion
+quip
+Quirinal
+quirk
+quirky
+quit
+quite
+Quito
+quits
+quitter
+quitters
+quitting
+quiver
+quivered
+quivering
+quivers
+Quixote
+quixotic
+Quixotism
+quiz
+quizzed
+quizzes
+quizzical
+quizzing
+quo
+quonset
+quorum
+quota
+quotas
+quotation
+quotations
+quote
+quoted
+quotes
+quoth
+quotient
+quotients
+quoting
+Rabat
+rabbi
+rabbit
+rabbits
+rabble
+rabid
+rabies
+Rabin
+raccoon
+raccoons
+race
+raced
+racer
+racers
+races
+racetrack
+Rachel
+Rachmaninoff
+racial
+racially
+Racine
+racing
+rack
+racked
+racket
+racketeer
+racketeering
+racketeers
+rackets
+racking
+racks
+radar
+radars
+Radcliffe
+radial
+radially
+radian
+radiance
+radiant
+radiantly
+radiate
+radiated
+radiates
+radiating
+radiation
+radiations
+radiator
+radiators
+radical
+radically
+radicals
+radices
+radii
+radio
+radioactive
+radioastronomy
+radioed
+radiography
+radioing
+radiology
+radios
+radish
+radishes
+radium
+radius
+radix
+radon
+Rae
+Rafael
+Rafferty
+raft
+rafter
+rafters
+rafts
+rag
+rage
+raged
+rages
+ragged
+raggedly
+raggedness
+raging
+rags
+Ragusan
+ragweed
+raid
+raided
+raider
+raiders
+raiding
+raids
+rail
+railed
+railer
+railers
+railing
+railroad
+railroaded
+railroader
+railroaders
+railroading
+railroads
+rails
+railway
+railways
+raiment
+rain
+rainbow
+raincoat
+raincoats
+raindrop
+raindrops
+rained
+rainfall
+rainier
+rainiest
+raining
+rains
+rainstorm
+rainy
+raise
+raised
+raiser
+raisers
+raises
+raisin
+raising
+rake
+raked
+rakes
+raking
+Raleigh
+rallied
+rallies
+rally
+rallying
+Ralph
+Ralston
+ram
+Ramada
+Raman
+ramble
+rambler
+rambles
+rambling
+ramblings
+ramification
+ramifications
+Ramirez
+Ramo
+Ramona
+ramp
+rampage
+rampant
+rampart
+ramps
+ramrod
+rams
+Ramsey
+ran
+ranch
+ranched
+rancher
+ranchers
+ranches
+ranching
+rancid
+Rand
+Randall
+Randolph
+random
+randomization
+randomize
+randomized
+randomizes
+randomly
+randomness
+randy
+rang
+range
+ranged
+rangeland
+ranger
+rangers
+ranges
+ranging
+Rangoon
+rangy
+Ranier
+rank
+ranked
+ranker
+rankers
+rankest
+Rankin
+Rankine
+ranking
+rankings
+rankle
+rankly
+rankness
+ranks
+ransack
+ransacked
+ransacking
+ransacks
+ransom
+ransomer
+ransoming
+ransoms
+rant
+ranted
+ranter
+ranters
+ranting
+rants
+Raoul
+rap
+rapacious
+rape
+raped
+raper
+rapes
+Raphael
+rapid
+rapidity
+rapidly
+rapids
+rapier
+raping
+rapport
+rapprochement
+raps
+rapt
+raptly
+rapture
+raptures
+rapturous
+Rapunzel
+rare
+rarely
+rareness
+rarer
+rarest
+Raritan
+rarity
+rascal
+rascally
+rascals
+rash
+rasher
+rashly
+rashness
+Rasmussen
+rasp
+raspberry
+rasped
+rasping
+rasps
+raster
+Rastus
+rat
+rate
+rated
+rater
+raters
+rates
+Ratfor
+rather
+ratification
+ratified
+ratifies
+ratify
+ratifying
+rating
+ratings
+ratio
+ration
+rational
+rationale
+rationales
+rationalities
+rationality
+rationalization
+rationalizations
+rationalize
+rationalized
+rationalizes
+rationalizing
+rationally
+rationals
+rationing
+rations
+ratios
+rats
+rattle
+rattled
+rattler
+rattlers
+rattles
+rattlesnake
+rattlesnakes
+rattling
+raucous
+Raul
+ravage
+ravaged
+ravager
+ravagers
+ravages
+ravaging
+rave
+raved
+raven
+ravening
+ravenous
+ravenously
+ravens
+raves
+ravine
+ravines
+raving
+ravings
+raw
+rawer
+rawest
+Rawlings
+Rawlins
+Rawlinson
+rawly
+rawness
+Rawson
+ray
+Rayburn
+Rayleigh
+Raymond
+Raymondville
+rays
+Raytheon
+raze
+razor
+razors
+re
+reabbreviate
+reabbreviated
+reabbreviates
+reabbreviating
+reach
+reachability
+reachable
+reachably
+reached
+reacher
+reaches
+reaching
+reacquired
+react
+reacted
+reacting
+reaction
+reactionaries
+reactionary
+reactions
+reactivate
+reactivated
+reactivates
+reactivating
+reactivation
+reactive
+reactively
+reactivity
+reactor
+reactors
+reacts
+read
+readability
+readable
+reader
+readers
+readied
+readier
+readies
+readiest
+readily
+readiness
+reading
+readings
+readjusted
+readout
+readouts
+reads
+ready
+readying
+Reagan
+real
+realest
+realign
+realigned
+realigning
+realigns
+realism
+realist
+realistic
+realistically
+realists
+realities
+reality
+realizable
+realizably
+realization
+realizations
+realize
+realized
+realizes
+realizing
+reallocate
+really
+realm
+realms
+realness
+reals
+realtor
+ream
+reanalyze
+reanalyzes
+reanalyzing
+reap
+reaped
+reaper
+reaping
+reappear
+reappeared
+reappearing
+reappears
+reappraisal
+reappraisals
+reaps
+rear
+reared
+rearing
+rearrange
+rearrangeable
+rearranged
+rearrangement
+rearrangements
+rearranges
+rearranging
+rearrest
+rearrested
+rears
+reason
+reasonable
+reasonableness
+reasonably
+reasoned
+reasoner
+reasoning
+reasonings
+reasons
+reassemble
+reassembled
+reassembles
+reassembling
+reassembly
+reassessment
+reassessments
+reassign
+reassigned
+reassigning
+reassignment
+reassignments
+reassigns
+reassure
+reassured
+reassures
+reassuring
+reawaken
+reawakened
+reawakening
+reawakens
+rebate
+rebates
+Rebecca
+rebel
+rebelled
+rebelling
+rebellion
+rebellions
+rebellious
+rebelliously
+rebelliousness
+rebels
+rebind
+rebinding
+rebinds
+reboot
+rebooted
+rebooting
+reboots
+rebound
+rebounded
+rebounding
+rebounds
+rebroadcast
+rebroadcasting
+rebroadcasts
+rebuff
+rebuffed
+rebuild
+rebuilding
+rebuilds
+rebuilt
+rebuke
+rebuked
+rebukes
+rebuking
+rebuttal
+rebutted
+rebutting
+recalcitrant
+recalculate
+recalculated
+recalculates
+recalculating
+recalculation
+recalculations
+recalibrate
+recalibrated
+recalibrates
+recalibrating
+recall
+recalled
+recalling
+recalls
+recant
+recapitulate
+recapitulated
+recapitulates
+recapitulation
+recapture
+recaptured
+recaptures
+recapturing
+recast
+recasting
+recasts
+recede
+receded
+recedes
+receding
+receipt
+receipts
+receivable
+receive
+received
+receiver
+receivers
+receives
+receiving
+recent
+recently
+recentness
+receptacle
+receptacles
+reception
+receptionist
+receptions
+receptive
+receptively
+receptiveness
+receptivity
+receptor
+recess
+recessed
+recesses
+recession
+recessive
+Recife
+recipe
+recipes
+recipient
+recipients
+reciprocal
+reciprocally
+reciprocate
+reciprocated
+reciprocates
+reciprocating
+reciprocation
+reciprocity
+recirculate
+recirculated
+recirculates
+recirculating
+recital
+recitals
+recitation
+recitations
+recite
+recited
+reciter
+recites
+reciting
+reckless
+recklessly
+recklessness
+reckon
+reckoned
+reckoner
+reckoning
+reckonings
+reckons
+reclaim
+reclaimable
+reclaimed
+reclaimer
+reclaimers
+reclaiming
+reclaims
+reclamation
+reclamations
+reclassification
+reclassified
+reclassifies
+reclassify
+reclassifying
+recline
+reclining
+recode
+recoded
+recodes
+recoding
+recognition
+recognitions
+recognizability
+recognizable
+recognizably
+recognize
+recognized
+recognizer
+recognizers
+recognizes
+recognizing
+recoil
+recoiled
+recoiling
+recoils
+recollect
+recollected
+recollecting
+recollection
+recollections
+recombination
+recombine
+recombined
+recombines
+recombining
+recommend
+recommendation
+recommendations
+recommended
+recommender
+recommending
+recommends
+recompense
+recompile
+recompiled
+recompiles
+recompiling
+recompute
+recomputed
+recomputes
+recomputing
+reconcile
+reconciled
+reconciler
+reconciles
+reconciliation
+reconciling
+reconfigurable
+reconfiguration
+reconfigurations
+reconfigure
+reconfigured
+reconfigurer
+reconfigures
+reconfiguring
+reconnect
+reconnected
+reconnecting
+reconnection
+reconnects
+reconsider
+reconsideration
+reconsidered
+reconsidering
+reconsiders
+reconstituted
+reconstruct
+reconstructed
+reconstructing
+reconstruction
+reconstructs
+reconverted
+reconverts
+record
+recorded
+recorder
+recorders
+recording
+recordings
+records
+recount
+recounted
+recounting
+recounts
+recourse
+recover
+recoverable
+recovered
+recoveries
+recovering
+recovers
+recovery
+recreate
+recreated
+recreates
+recreating
+recreation
+recreational
+recreations
+recreative
+recruit
+recruited
+recruiter
+recruiting
+recruits
+recta
+rectangle
+rectangles
+rectangular
+rectify
+rector
+rectors
+rectum
+rectums
+recuperate
+recur
+recurrence
+recurrences
+recurrent
+recurrently
+recurring
+recurs
+recurse
+recursed
+recurses
+recursing
+recursion
+recursions
+recursive
+recursively
+recyclable
+recycle
+recycled
+recycles
+recycling
+red
+redbreast
+redcoat
+redden
+reddened
+redder
+reddest
+reddish
+reddishness
+redeclare
+redeclared
+redeclares
+redeclaring
+redeem
+redeemed
+redeemer
+redeemers
+redeeming
+redeems
+redefine
+redefined
+redefines
+redefining
+redefinition
+redefinitions
+redemption
+redesign
+redesigned
+redesigning
+redesigns
+redevelopment
+Redford
+redhead
+Redhook
+redirect
+redirected
+redirecting
+redirection
+redirections
+redisplay
+redisplayed
+redisplaying
+redisplays
+redistribute
+redistributed
+redistributes
+redistributing
+redly
+Redmond
+redneck
+redness
+redo
+redone
+redouble
+redoubled
+redraw
+redrawn
+redress
+redressed
+redresses
+redressing
+reds
+Redstone
+reduce
+reduced
+reducer
+reducers
+reduces
+reducibility
+reducible
+reducibly
+reducing
+reduction
+reductions
+redundancies
+redundancy
+redundant
+redundantly
+redwood
+reed
+reeds
+reeducation
+Reedville
+reef
+reefer
+reefs
+reel
+reelect
+reelected
+reelecting
+reelects
+reeled
+reeler
+reeling
+reels
+reemphasize
+reemphasized
+reemphasizes
+reemphasizing
+reenabled
+reenforcement
+reenter
+reentered
+reentering
+reenters
+reentrant
+Reese
+reestablish
+reestablished
+reestablishes
+reestablishing
+reevaluate
+reevaluated
+reevaluates
+reevaluating
+reevaluation
+Reeves
+reexamine
+reexamined
+reexamines
+reexamining
+reexecuted
+refer
+referee
+refereed
+refereeing
+referees
+reference
+referenced
+referencer
+references
+referencing
+referenda
+referendum
+referendums
+referent
+referential
+referentiality
+referentially
+referents
+referral
+referrals
+referred
+referring
+refers
+refill
+refillable
+refilled
+refilling
+refills
+refine
+refined
+refinement
+refinements
+refiner
+refinery
+refines
+refining
+reflect
+reflected
+reflecting
+reflection
+reflections
+reflective
+reflectively
+reflectivity
+reflector
+reflectors
+reflects
+reflex
+reflexes
+reflexive
+reflexively
+reflexiveness
+reflexivity
+reforestation
+reform
+reformable
+reformat
+reformation
+reformatory
+reformats
+reformatted
+reformatting
+reformed
+reformer
+reformers
+reforming
+reforms
+reformulate
+reformulated
+reformulates
+reformulating
+reformulation
+refract
+refracted
+refraction
+refractory
+refragment
+refrain
+refrained
+refraining
+refrains
+refresh
+refreshed
+refresher
+refreshers
+refreshes
+refreshing
+refreshingly
+refreshment
+refreshments
+refrigerate
+refrigerator
+refrigerators
+refuel
+refueled
+refueling
+refuels
+refuge
+refugee
+refugees
+refusal
+refuse
+refused
+refuses
+refusing
+refutable
+refutation
+refute
+refuted
+refuter
+refutes
+refuting
+regain
+regained
+regaining
+regains
+regal
+regaled
+regally
+regard
+regarded
+regarding
+regardless
+regards
+regatta
+regenerate
+regenerated
+regenerates
+regenerating
+regeneration
+regenerative
+regenerator
+regenerators
+regent
+regents
+regime
+regimen
+regiment
+regimentation
+regimented
+regiments
+regimes
+Regina
+Reginald
+region
+regional
+regionally
+regions
+Regis
+register
+registered
+registering
+registers
+registrar
+registration
+registrations
+registry
+regress
+regressed
+regresses
+regressing
+regression
+regressions
+regressive
+regret
+regretful
+regretfully
+regrets
+regrettable
+regrettably
+regretted
+regretting
+regroup
+regrouped
+regrouping
+regular
+regularities
+regularity
+regularly
+regulars
+regulate
+regulated
+regulates
+regulating
+regulation
+regulations
+regulative
+regulator
+regulators
+regulatory
+Regulus
+rehabilitate
+rehearsal
+rehearsals
+rehearse
+rehearsed
+rehearser
+rehearses
+rehearsing
+Reich
+Reichenberg
+Reichstag
+Reid
+reign
+reigned
+reigning
+reigns
+Reilly
+reimbursable
+reimburse
+reimbursed
+reimbursement
+reimbursements
+rein
+reincarnate
+reincarnated
+reincarnation
+reindeer
+reined
+reinforce
+reinforced
+reinforcement
+reinforcements
+reinforcer
+reinforces
+reinforcing
+Reinhard
+Reinhardt
+Reinhold
+reinitialize
+reinitialized
+reinitializing
+reins
+reinsert
+reinserted
+reinserting
+reinserts
+reinstate
+reinstated
+reinstatement
+reinstates
+reinstating
+reinterpret
+reinterpreted
+reinterpreting
+reinterprets
+reintroduce
+reintroduced
+reintroduces
+reintroducing
+reinvent
+reinvented
+reinventing
+reinvents
+reiterate
+reiterated
+reiterates
+reiterating
+reiteration
+reject
+rejected
+rejecting
+rejection
+rejections
+rejector
+rejectors
+rejects
+rejoice
+rejoiced
+rejoicer
+rejoices
+rejoicing
+rejoin
+rejoinder
+rejoined
+rejoining
+rejoins
+relabel
+relabeled
+relabeling
+relabelled
+relabelling
+relabels
+relapse
+relate
+related
+relater
+relates
+relating
+relation
+relational
+relationally
+relations
+relationship
+relationships
+relative
+relatively
+relativeness
+relatives
+relativism
+relativistic
+relativistically
+relativity
+relax
+relaxation
+relaxations
+relaxed
+relaxer
+relaxes
+relaxing
+relay
+relayed
+relaying
+relays
+release
+released
+releases
+releasing
+relegate
+relegated
+relegates
+relegating
+relent
+relented
+relenting
+relentless
+relentlessly
+relentlessness
+relents
+relevance
+relevances
+relevant
+relevantly
+reliability
+reliable
+reliably
+reliance
+reliant
+relic
+relics
+relied
+relief
+relies
+relieve
+relieved
+reliever
+relievers
+relieves
+relieving
+religion
+religions
+religious
+religiously
+religiousness
+relink
+relinquish
+relinquished
+relinquishes
+relinquishing
+relish
+relished
+relishes
+relishing
+relive
+relives
+reliving
+reload
+reloaded
+reloader
+reloading
+reloads
+relocatable
+relocate
+relocated
+relocates
+relocating
+relocation
+relocations
+reluctance
+reluctant
+reluctantly
+rely
+relying
+remain
+remainder
+remainders
+remained
+remaining
+remains
+remark
+remarkable
+remarkableness
+remarkably
+remarked
+remarking
+remarks
+Rembrandt
+remedial
+remedied
+remedies
+remedy
+remedying
+remember
+remembered
+remembering
+remembers
+remembrance
+remembrances
+remind
+reminded
+reminder
+reminders
+reminding
+reminds
+Remington
+reminiscence
+reminiscences
+reminiscent
+reminiscently
+remiss
+remission
+remit
+remittance
+remnant
+remnants
+remodel
+remodeled
+remodeling
+remodels
+remonstrate
+remonstrated
+remonstrates
+remonstrating
+remonstration
+remonstrative
+remorse
+remorseful
+remote
+remotely
+remoteness
+remotest
+removable
+removal
+removals
+remove
+removed
+remover
+removes
+removing
+remunerate
+remuneration
+Remus
+Remy
+Rena
+renaissance
+renal
+rename
+renamed
+renames
+renaming
+Renault
+Renaults
+rend
+render
+rendered
+rendering
+renderings
+renders
+rendezvous
+rending
+rendition
+renditions
+rends
+Rene
+Renee
+renegade
+renegotiable
+renew
+renewable
+renewal
+renewed
+renewer
+renewing
+renews
+Reno
+Renoir
+renounce
+renounces
+renouncing
+renovate
+renovated
+renovation
+renown
+renowned
+Rensselaer
+rent
+rental
+rentals
+rented
+renting
+rents
+renumber
+renumbering
+renumbers
+renunciate
+renunciation
+Renville
+reoccur
+reopen
+reopened
+reopening
+reopens
+reorder
+reordered
+reordering
+reorders
+reorganization
+reorganizations
+reorganize
+reorganized
+reorganizes
+reorganizing
+repackage
+repaid
+repair
+repaired
+repairer
+repairing
+repairman
+repairmen
+repairs
+reparation
+reparations
+repartee
+repartition
+repast
+repasts
+repay
+repaying
+repays
+repeal
+repealed
+repealer
+repealing
+repeals
+repeat
+repeatable
+repeated
+repeatedly
+repeater
+repeaters
+repeating
+repeats
+repel
+repelled
+repellent
+repels
+repent
+repentance
+repented
+repenting
+repents
+repercussion
+repercussions
+repertoire
+repertory
+repetition
+repetitions
+repetitious
+repetitive
+repetitively
+repetitiveness
+rephrase
+rephrased
+rephrases
+rephrasing
+repine
+replace
+replaceable
+replaced
+replacement
+replacements
+replacer
+replaces
+replacing
+replay
+replayed
+replaying
+replays
+replenish
+replenished
+replenishes
+replenishing
+replete
+repleteness
+repletion
+replica
+replicas
+replicate
+replicated
+replicates
+replicating
+replication
+replications
+replied
+replies
+reply
+replying
+report
+reported
+reportedly
+reporter
+reporters
+reporting
+reports
+repose
+reposed
+reposes
+reposing
+reposition
+repositioned
+repositioning
+repositions
+repositories
+repository
+reprehensible
+represent
+representable
+representably
+representation
+representational
+representationally
+representations
+representative
+representatively
+representativeness
+representatives
+represented
+representing
+represents
+repress
+repressed
+represses
+repressing
+repression
+repressions
+repressive
+reprieve
+reprieved
+reprieves
+reprieving
+reprimand
+reprint
+reprinted
+reprinting
+reprints
+reprisal
+reprisals
+reproach
+reproached
+reproaches
+reproaching
+reprobate
+reproduce
+reproduced
+reproducer
+reproducers
+reproduces
+reproducibilities
+reproducibility
+reproducible
+reproducibly
+reproducing
+reproduction
+reproductions
+reprogram
+reprogrammed
+reprogramming
+reprograms
+reproof
+reprove
+reprover
+reptile
+reptiles
+reptilian
+republic
+republican
+republicans
+republics
+repudiate
+repudiated
+repudiates
+repudiating
+repudiation
+repudiations
+repugnant
+repulse
+repulsed
+repulses
+repulsing
+repulsion
+repulsions
+repulsive
+reputable
+reputably
+reputation
+reputations
+repute
+reputed
+reputedly
+reputes
+request
+requested
+requester
+requesters
+requesting
+requests
+require
+required
+requirement
+requirements
+requires
+requiring
+requisite
+requisites
+requisition
+requisitioned
+requisitioning
+requisitions
+reread
+reregister
+reroute
+rerouted
+reroutes
+rerouting
+rerun
+reruns
+reschedule
+rescind
+rescue
+rescued
+rescuer
+rescuers
+rescues
+rescuing
+research
+researched
+researcher
+researchers
+researches
+researching
+reselect
+reselected
+reselecting
+reselects
+resell
+reselling
+resemblance
+resemblances
+resemble
+resembled
+resembles
+resembling
+resent
+resented
+resentful
+resentfully
+resenting
+resentment
+resents
+reserpine
+reservation
+reservations
+reserve
+reserved
+reserver
+reserves
+reserving
+reservoir
+reservoirs
+reset
+resets
+resetting
+resettings
+reside
+resided
+residence
+residences
+resident
+residential
+residentially
+residents
+resides
+residing
+residual
+residue
+residues
+resign
+resignation
+resignations
+resigned
+resigning
+resigns
+resilient
+resin
+resins
+resist
+resistable
+resistance
+resistances
+resistant
+resistantly
+resisted
+resistible
+resisting
+resistive
+resistivity
+resistor
+resistors
+resists
+resolute
+resolutely
+resoluteness
+resolution
+resolutions
+resolvable
+resolve
+resolved
+resolver
+resolvers
+resolves
+resolving
+resonance
+resonances
+resonant
+resonate
+resort
+resorted
+resorting
+resorts
+resound
+resounding
+resounds
+resource
+resourceful
+resourcefully
+resourcefulness
+resources
+respect
+respectability
+respectable
+respectably
+respected
+respecter
+respectful
+respectfully
+respectfulness
+respecting
+respective
+respectively
+respects
+respiration
+respirator
+respiratory
+respite
+resplendent
+resplendently
+respond
+responded
+respondent
+respondents
+responder
+responding
+responds
+response
+responses
+responsibilities
+responsibility
+responsible
+responsibleness
+responsibly
+responsive
+responsively
+responsiveness
+rest
+restart
+restarted
+restarting
+restarts
+restate
+restated
+restatement
+restates
+restating
+restaurant
+restaurants
+restaurateur
+rested
+restful
+restfully
+restfulness
+resting
+restitution
+restive
+restless
+restlessly
+restlessness
+restoration
+restorations
+restore
+restored
+restorer
+restorers
+restores
+restoring
+restrain
+restrained
+restrainer
+restrainers
+restraining
+restrains
+restraint
+restraints
+restrict
+restricted
+restricting
+restriction
+restrictions
+restrictive
+restrictively
+restricts
+restroom
+restructure
+restructured
+restructures
+restructuring
+rests
+result
+resultant
+resultantly
+resultants
+resulted
+resulting
+results
+resumable
+resume
+resumed
+resumes
+resuming
+resumption
+resumptions
+resurgent
+resurrect
+resurrected
+resurrecting
+resurrection
+resurrections
+resurrector
+resurrectors
+resurrects
+resuscitate
+resynchronization
+resynchronize
+resynchronized
+resynchronizing
+retail
+retailer
+retailers
+retailing
+retain
+retained
+retainer
+retainers
+retaining
+retainment
+retains
+retaliate
+retaliation
+retaliatory
+retard
+retarded
+retarder
+retarding
+retch
+retention
+retentions
+retentive
+retentively
+retentiveness
+reticle
+reticles
+reticular
+reticulate
+reticulated
+reticulately
+reticulates
+reticulating
+reticulation
+retina
+retinal
+retinas
+retinue
+retire
+retired
+retiree
+retirement
+retirements
+retires
+retiring
+retort
+retorted
+retorts
+retrace
+retraced
+retraces
+retracing
+retract
+retracted
+retracting
+retraction
+retractions
+retracts
+retrain
+retrained
+retraining
+retrains
+retranslate
+retranslated
+retransmission
+retransmissions
+retransmit
+retransmits
+retransmitted
+retransmitting
+retreat
+retreated
+retreating
+retreats
+retribution
+retried
+retrier
+retriers
+retries
+retrievable
+retrieval
+retrievals
+retrieve
+retrieved
+retriever
+retrievers
+retrieves
+retrieving
+retroactive
+retroactively
+retrofit
+retrofitting
+retrograde
+retrospect
+retrospection
+retrospective
+retry
+retrying
+return
+returnable
+returned
+returner
+returning
+returns
+retype
+retyped
+retypes
+retyping
+Reub
+Reuben
+reunion
+reunions
+reunite
+reunited
+reuniting
+reusable
+reuse
+reused
+reuses
+reusing
+Reuters
+Reuther
+revamp
+revamped
+revamping
+revamps
+reveal
+revealed
+revealing
+reveals
+revel
+revelation
+revelations
+reveled
+reveler
+reveling
+revelry
+revels
+revenge
+revenger
+revenue
+revenuers
+revenues
+reverberate
+revere
+revered
+reverence
+reverend
+reverends
+reverent
+reverently
+reveres
+reverie
+reverified
+reverifies
+reverify
+reverifying
+revering
+reversal
+reversals
+reverse
+reversed
+reversely
+reverser
+reverses
+reversible
+reversing
+reversion
+revert
+reverted
+reverting
+reverts
+review
+reviewed
+reviewer
+reviewers
+reviewing
+reviews
+revile
+reviled
+reviler
+reviling
+revise
+revised
+reviser
+revises
+revising
+revision
+revisionary
+revisions
+revisit
+revisited
+revisiting
+revisits
+revival
+revivals
+revive
+revived
+reviver
+revives
+reviving
+revocable
+revocation
+revoke
+revoked
+revoker
+revokes
+revoking
+revolt
+revolted
+revolter
+revolting
+revoltingly
+revolts
+revolution
+revolutionaries
+revolutionary
+revolutionize
+revolutionized
+revolutionizer
+revolutions
+revolve
+revolved
+revolver
+revolvers
+revolves
+revolving
+revulsion
+reward
+rewarded
+rewarding
+rewardingly
+rewards
+rewind
+rewinding
+rewinds
+rewire
+rework
+reworked
+reworking
+reworks
+rewound
+rewrite
+rewrites
+rewriting
+rewritten
+Rex
+Reykjavik
+Reynolds
+rhapsody
+Rhea
+Rheims
+Rheinholdt
+Rhenish
+rhesus
+rhetoric
+rheumatic
+rheumatism
+Rhine
+rhinestone
+rhino
+rhinoceros
+rho
+Rhoda
+Rhode
+Rhodes
+Rhodesia
+rhododendron
+rhombic
+rhombus
+rhubarb
+rhyme
+rhymed
+rhymes
+rhyming
+rhythm
+rhythmic
+rhythmically
+rhythms
+rib
+ribald
+ribbed
+ribbing
+ribbon
+ribbons
+riboflavin
+ribonucleic
+ribs
+Rica
+Rican
+Ricanism
+Ricans
+rice
+rich
+Richard
+Richards
+Richardson
+richer
+riches
+richest
+Richey
+Richfield
+Richland
+richly
+Richmond
+richness
+Richter
+Rick
+Rickenbaugh
+rickets
+Rickettsia
+rickety
+rickshaw
+rickshaws
+Rico
+ricochet
+rid
+riddance
+ridden
+ridding
+riddle
+riddled
+riddles
+riddling
+ride
+rider
+riders
+rides
+ridge
+Ridgefield
+ridgepole
+ridges
+Ridgway
+ridicule
+ridiculed
+ridicules
+ridiculing
+ridiculous
+ridiculously
+ridiculousness
+riding
+rids
+Riemann
+Riemannian
+rifle
+rifled
+rifleman
+rifler
+rifles
+rifling
+rift
+rig
+Riga
+Rigel
+rigging
+Riggs
+right
+righted
+righteous
+righteously
+righteousness
+righter
+rightful
+rightfully
+rightfulness
+righting
+rightly
+rightmost
+rightness
+rights
+rightward
+rigid
+rigidity
+rigidly
+rigor
+rigorous
+rigorously
+rigors
+rigs
+Riley
+Rilke
+rill
+rim
+rime
+rims
+rind
+rinds
+Rinehart
+ring
+ringed
+ringer
+ringers
+ringing
+ringingly
+ringings
+rings
+ringside
+rink
+rinse
+rinsed
+rinser
+rinses
+rinsing
+Rio
+Riordan
+riot
+rioted
+rioter
+rioters
+rioting
+riotous
+riots
+rip
+ripe
+ripely
+ripen
+ripeness
+Ripley
+ripoff
+ripped
+ripping
+ripple
+rippled
+ripples
+rippling
+rips
+RISC
+rise
+risen
+riser
+risers
+rises
+rising
+risings
+risk
+risked
+risking
+risks
+risky
+Ritchie
+rite
+rites
+Ritter
+ritual
+ritually
+rituals
+Ritz
+rival
+rivaled
+rivalled
+rivalling
+rivalries
+rivalry
+rivals
+river
+riverbank
+riverfront
+rivers
+riverside
+Riverview
+rivet
+riveter
+rivets
+Riviera
+rivulet
+rivulets
+Riyadh
+roach
+road
+roadbed
+roadblock
+roads
+roadside
+roadster
+roadsters
+roadway
+roadways
+roam
+roamed
+roaming
+roams
+roar
+roared
+roarer
+roaring
+roars
+roast
+roasted
+roaster
+roasting
+roasts
+rob
+robbed
+robber
+robberies
+robbers
+robbery
+Robbie
+Robbin
+robbing
+Robbins
+robe
+robed
+Robert
+Roberta
+Roberto
+Roberts
+Robertson
+Robertsons
+robes
+robin
+robing
+robins
+Robinson
+Robinsonville
+robot
+robotic
+robotics
+robots
+robs
+robust
+robustly
+robustness
+Rocco
+Rochester
+Rochford
+rock
+rockabye
+Rockaway
+Rockaways
+rocked
+Rockefeller
+rocker
+rockers
+rocket
+rocketed
+rocketing
+rockets
+Rockford
+Rockies
+rocking
+Rockland
+rocks
+Rockville
+Rockwell
+rocky
+rod
+rode
+rodent
+rodents
+rodeo
+Rodgers
+Rodney
+Rodriguez
+rods
+roe
+Roentgen
+Roger
+Rogers
+rogue
+rogues
+Roland
+role
+roles
+roll
+rollback
+rolled
+roller
+rollers
+Rollie
+rolling
+Rollins
+rolls
+Roman
+romance
+romancer
+romancers
+romances
+romancing
+Romanesque
+Romania
+Romanizations
+Romanizer
+Romanizers
+Romanizes
+Romano
+Romans
+romantic
+romantics
+Rome
+Romeldale
+Romeo
+romp
+romped
+romper
+romping
+romps
+Romulus
+Ron
+Ronald
+Ronnie
+roof
+roofed
+roofer
+roofing
+roofs
+rooftop
+rook
+rookie
+room
+roomed
+roomer
+roomers
+roomful
+rooming
+roommate
+rooms
+roomy
+Rooney
+Roosevelt
+Rooseveltian
+roost
+rooster
+roosters
+root
+rooted
+rooter
+rooting
+roots
+rope
+roped
+roper
+ropers
+ropes
+roping
+Roquemore
+Rorschach
+Rosa
+Rosabelle
+Rosalie
+rosary
+Rose
+rosebud
+rosebuds
+rosebush
+Roseland
+Rosella
+rosemary
+Rosen
+Rosenberg
+Rosenblum
+Rosenthal
+Rosenzweig
+roses
+Rosetta
+rosette
+Rosie
+rosiness
+Ross
+Rossi
+roster
+rostrum
+Roswell
+rosy
+rot
+Rotarian
+Rotarians
+rotary
+rotate
+rotated
+rotates
+rotating
+rotation
+rotational
+rotations
+rotator
+Roth
+Rothschild
+rotor
+rots
+rotten
+rottenness
+Rotterdam
+rotting
+rotund
+rotunda
+rouge
+rough
+roughed
+roughen
+rougher
+roughest
+roughly
+roughneck
+roughness
+roulette
+round
+roundabout
+rounded
+roundedness
+rounder
+roundest
+roundhead
+roundhouse
+rounding
+roundly
+roundness
+roundoff
+rounds
+roundtable
+roundup
+roundworm
+Rourke
+rouse
+roused
+rouses
+rousing
+Rousseau
+roustabout
+rout
+route
+routed
+router
+routers
+routes
+routine
+routinely
+routines
+routing
+routings
+rove
+roved
+rover
+roves
+roving
+row
+rowboat
+rowdy
+Rowe
+rowed
+Rowena
+rower
+rowing
+Rowland
+Rowley
+rows
+Roxbury
+Roxy
+Roy
+royal
+royalist
+royalists
+royally
+royalties
+royalty
+Royce
+Rozelle
+Ruanda
+rub
+Rubaiyat
+rubbed
+rubber
+rubbers
+rubbery
+rubbing
+rubbish
+rubble
+rubdown
+Rube
+Ruben
+Rubens
+rubies
+Rubin
+ruble
+rubles
+rubout
+rubs
+ruby
+rudder
+rudders
+ruddiness
+ruddy
+rude
+rudely
+rudeness
+rudiment
+rudimentary
+rudiments
+Rudolf
+Rudolph
+Rudy
+Rudyard
+rue
+ruefully
+ruffian
+ruffianly
+ruffians
+ruffle
+ruffled
+ruffles
+Rufus
+rug
+rugged
+ruggedly
+ruggedness
+rugs
+ruin
+ruination
+ruinations
+ruined
+ruining
+ruinous
+ruinously
+ruins
+rule
+ruled
+ruler
+rulers
+rules
+ruling
+rulings
+rum
+Rumania
+Rumanian
+Rumanians
+rumble
+rumbled
+rumbler
+rumbles
+rumbling
+rumen
+Rumford
+rummage
+Rummel
+rummy
+rumor
+rumored
+rumors
+rump
+rumple
+rumpled
+rumply
+rumpus
+run
+runaway
+rundown
+rung
+Runge
+rungs
+runnable
+runner
+runners
+running
+Runnymede
+runoff
+runs
+runt
+runtime
+Runyon
+rupee
+Ruppert
+rupture
+ruptured
+ruptures
+rupturing
+rural
+rurally
+rush
+rushed
+rusher
+rushes
+rushing
+Rushmore
+Russ
+Russell
+russet
+Russia
+Russian
+Russianizations
+Russianizes
+Russians
+Russo
+rust
+rusted
+rustic
+rusticate
+rusticated
+rusticates
+rusticating
+rustication
+rusting
+rustle
+rustled
+rustler
+rustlers
+rustling
+rusts
+rusty
+rut
+Rutgers
+Ruth
+Rutherford
+ruthless
+ruthlessly
+ruthlessness
+Rutland
+Rutledge
+ruts
+Rwanda
+Ryan
+Rydberg
+Ryder
+rye
+sabbath
+Sabbathize
+Sabbathizes
+sabbatical
+saber
+sabers
+Sabina
+Sabine
+sable
+sables
+sabotage
+Sachs
+sack
+sacker
+sacking
+sacks
+sacrament
+Sacramento
+sacred
+sacredly
+sacredness
+sacrifice
+sacrificed
+sacrificer
+sacrificers
+sacrifices
+sacrificial
+sacrificially
+sacrificing
+sacrilege
+sacrilegious
+sacrosanct
+sad
+sadden
+saddened
+saddens
+sadder
+saddest
+saddle
+saddlebag
+saddled
+saddles
+Sadie
+sadism
+sadist
+sadistic
+sadistically
+sadists
+Sadler
+sadly
+sadness
+safari
+safe
+safeguard
+safeguarded
+safeguarding
+safeguards
+safekeeping
+safely
+safeness
+safer
+safes
+safest
+safeties
+safety
+saffron
+sag
+saga
+sagacious
+sagacity
+sage
+sagebrush
+sagely
+sages
+sagging
+Saginaw
+sagittal
+Sagittarius
+sags
+saguaro
+Sahara
+said
+Saigon
+sail
+sailboat
+sailed
+sailfish
+sailing
+sailor
+sailorly
+sailors
+sails
+saint
+sainted
+sainthood
+saintly
+saints
+sake
+sakes
+Sal
+Salaam
+salable
+salad
+salads
+salamander
+salami
+salaried
+salaries
+salary
+sale
+Salem
+Salerno
+sales
+salesgirl
+Salesian
+saleslady
+salesman
+salesmen
+salesperson
+salient
+Salina
+saline
+Salisbury
+Salish
+saliva
+salivary
+salivate
+Salk
+Salle
+sallies
+sallow
+Sally
+sallying
+salmon
+salon
+salons
+saloon
+saloons
+salt
+salted
+salter
+salters
+saltier
+saltiest
+saltiness
+salting
+Salton
+salts
+salty
+salutary
+salutation
+salutations
+salute
+saluted
+salutes
+saluting
+Salvador
+Salvadoran
+salvage
+salvaged
+salvager
+salvages
+salvaging
+salvation
+Salvatore
+salve
+salver
+salves
+Salz
+Sam
+Samaritan
+same
+sameness
+Sammy
+Samoa
+Samoan
+sample
+sampled
+sampler
+samplers
+samples
+sampling
+samplings
+Sampson
+Samson
+Samuel
+Samuels
+Samuelson
+San
+Sana
+sanatoria
+sanatorium
+Sanborn
+Sanchez
+Sancho
+sanctification
+sanctified
+sanctify
+sanctimonious
+sanction
+sanctioned
+sanctioning
+sanctions
+sanctity
+sanctuaries
+sanctuary
+sanctum
+sand
+sandal
+sandals
+sandbag
+Sandburg
+sanded
+sander
+Sanderling
+Sanders
+Sanderson
+Sandia
+sanding
+sandman
+sandpaper
+Sandra
+sands
+sandstone
+Sandusky
+sandwich
+sandwiches
+sandy
+sane
+sanely
+saner
+sanest
+Sanford
+sang
+sanguine
+Sanhedrin
+sanitarium
+sanitary
+sanitation
+sanity
+sank
+Sanskrit
+Sanskritic
+Sanskritize
+Santa
+Santayana
+Santiago
+Santo
+Sao
+sap
+sapiens
+sapling
+saplings
+sapphire
+Sappho
+saps
+sapsucker
+Sara
+Saracen
+Saracens
+Sarah
+Saran
+Sarasota
+Saratoga
+sarcasm
+sarcasms
+sarcastic
+sardine
+Sardinia
+sardonic
+Sargent
+sari
+Sartre
+sash
+Saskatchewan
+Saskatoon
+sat
+Satan
+satanic
+Satanism
+Satanist
+satchel
+satchels
+sate
+sated
+satellite
+satellites
+sates
+satin
+sating
+satire
+satires
+satiric
+satisfaction
+satisfactions
+satisfactorily
+satisfactory
+satisfiability
+satisfiable
+satisfied
+satisfies
+satisfy
+satisfying
+saturate
+saturated
+saturates
+saturating
+saturation
+Saturday
+Saturdays
+Saturn
+Saturnalia
+Saturnism
+satyr
+sauce
+saucepan
+saucepans
+saucer
+saucers
+sauces
+saucy
+Saud
+Saudi
+Saukville
+Saul
+Sault
+Saunders
+saunter
+sausage
+sausages
+savage
+savaged
+savagely
+savageness
+savager
+savagers
+savages
+savaging
+Savannah
+save
+saved
+saver
+savers
+saves
+saving
+savings
+savior
+saviors
+Saviour
+Savonarola
+savor
+savored
+savoring
+savors
+savory
+Savoy
+Savoyard
+Savoyards
+saw
+sawdust
+sawed
+sawfish
+sawing
+sawmill
+sawmills
+saws
+sawtooth
+sax
+Saxon
+Saxonization
+Saxonizations
+Saxonize
+Saxonizes
+Saxons
+Saxony
+saxophone
+Saxton
+say
+sayer
+sayers
+saying
+sayings
+says
+scab
+scabbard
+scabbards
+scabrous
+scaffold
+scaffolding
+scaffoldings
+scaffolds
+Scala
+scalable
+scalar
+scalars
+scald
+scalded
+scalding
+scale
+scaled
+scales
+scaling
+scalings
+scallop
+scalloped
+scallops
+scalp
+scalps
+scaly
+scamper
+scampering
+scampers
+scan
+scandal
+scandalous
+scandals
+Scandinavia
+Scandinavian
+Scandinavians
+scanned
+scanner
+scanners
+scanning
+scans
+scant
+scantier
+scantiest
+scantily
+scantiness
+scantly
+scanty
+scapegoat
+scar
+Scarborough
+scarce
+scarcely
+scarceness
+scarcer
+scarcity
+scare
+scarecrow
+scared
+scares
+scarf
+scaring
+Scarlatti
+scarlet
+scars
+Scarsdale
+scarves
+scary
+scatter
+scatterbrain
+scattered
+scattering
+scatters
+scenario
+scenarios
+scene
+scenery
+scenes
+scenic
+scent
+scented
+scents
+scepter
+scepters
+Schaefer
+Schaeffer
+Schafer
+Schaffner
+Schantz
+Schapiro
+schedulable
+schedule
+scheduled
+scheduler
+schedulers
+schedules
+scheduling
+Scheherazade
+Schelling
+schema
+schemas
+schemata
+schematic
+schematically
+schematics
+scheme
+schemed
+schemer
+schemers
+schemes
+scheming
+Schiller
+schism
+schizophrenia
+Schlesinger
+Schlitz
+Schloss
+Schmidt
+Schmitt
+Schnabel
+Schneider
+Schoenberg
+Schofield
+scholar
+scholarly
+scholars
+scholarship
+scholarships
+scholastic
+scholastically
+scholastics
+school
+schoolboy
+schoolboys
+schooled
+schooler
+schoolers
+schoolhouse
+schoolhouses
+schooling
+schoolmaster
+schoolmasters
+schoolroom
+schoolrooms
+schools
+schooner
+Schopenhauer
+Schottky
+Schroeder
+Schroedinger
+Schubert
+Schultz
+Schulz
+Schumacher
+Schuman
+Schumann
+Schuster
+Schuyler
+Schuylkill
+Schwab
+Schwartz
+Schweitzer
+science
+sciences
+scientific
+scientifically
+scientist
+scientists
+scissor
+scissored
+scissoring
+scissors
+sclerosis
+sclerotic
+scoff
+scoffed
+scoffer
+scoffing
+scoffs
+scold
+scolded
+scolding
+scolds
+scoop
+scooped
+scooping
+scoops
+scoot
+scope
+scoped
+scopes
+scoping
+scorch
+scorched
+scorcher
+scorches
+scorching
+score
+scoreboard
+scorecard
+scored
+scorer
+scorers
+scores
+scoring
+scorings
+scorn
+scorned
+scorner
+scornful
+scornfully
+scorning
+scorns
+Scorpio
+scorpion
+scorpions
+Scot
+scotch
+Scotchgard
+Scotchman
+Scotia
+Scotian
+Scotland
+Scots
+Scotsman
+Scotsmen
+Scott
+Scottish
+Scottsdale
+Scotty
+scoundrel
+scoundrels
+scour
+scoured
+scourge
+scouring
+scours
+scout
+scouted
+scouting
+scouts
+scow
+scowl
+scowled
+scowling
+scowls
+scram
+scramble
+scrambled
+scrambler
+scrambles
+scrambling
+Scranton
+scrap
+scrape
+scraped
+scraper
+scrapers
+scrapes
+scraping
+scrapings
+scrapped
+scraps
+scratch
+scratched
+scratcher
+scratchers
+scratches
+scratching
+scratchy
+scrawl
+scrawled
+scrawling
+scrawls
+scrawny
+scream
+screamed
+screamer
+screamers
+screaming
+screams
+screech
+screeched
+screeches
+screeching
+screen
+screened
+screening
+screenings
+screenplay
+screens
+screw
+screwball
+screwdriver
+screwed
+screwing
+screws
+scribble
+scribbled
+scribbler
+scribbles
+scribe
+scribes
+scribing
+Scribners
+scrimmage
+Scripps
+script
+scripts
+scripture
+scriptures
+scroll
+scrolled
+scrolling
+scrolls
+Scrooge
+scrounge
+scrub
+scrumptious
+scruple
+scrupulous
+scrupulously
+scrutinize
+scrutinized
+scrutinizing
+scrutiny
+scuba
+scud
+scuffle
+scuffled
+scuffles
+scuffling
+sculpt
+sculpted
+sculptor
+sculptors
+sculpts
+sculpture
+sculptured
+sculptures
+scurried
+scurry
+scurvy
+scuttle
+scuttled
+scuttles
+scuttling
+Scylla
+scythe
+scythes
+Scythia
+sea
+seaboard
+Seaborg
+Seabrook
+seacoast
+seacoasts
+seafood
+Seagate
+Seagram
+seagull
+seahorse
+seal
+sealed
+sealer
+sealing
+seals
+sealy
+seam
+seaman
+seamed
+seamen
+seaming
+seams
+seamy
+Sean
+seaport
+seaports
+Seaquarium
+sear
+search
+searched
+searcher
+searchers
+searches
+searching
+searchingly
+searchings
+searchlight
+seared
+searing
+searingly
+Sears
+seas
+seashore
+seashores
+seaside
+season
+seasonable
+seasonably
+seasonal
+seasonally
+seasoned
+seasoner
+seasoners
+seasoning
+seasonings
+seasons
+seat
+seated
+seating
+seats
+Seattle
+seaward
+seaweed
+Sebastian
+secant
+secede
+seceded
+secedes
+seceding
+secession
+seclude
+secluded
+seclusion
+second
+secondaries
+secondarily
+secondary
+seconded
+seconder
+seconders
+secondhand
+seconding
+secondly
+seconds
+secrecy
+secret
+secretarial
+secretariat
+secretaries
+secretary
+secrete
+secreted
+secretes
+secreting
+secretion
+secretions
+secretive
+secretively
+secretly
+secrets
+sect
+sectarian
+section
+sectional
+sectioned
+sectioning
+sections
+sector
+sectors
+sects
+secular
+secure
+secured
+securely
+secures
+securing
+securings
+securities
+security
+sedan
+sedate
+sedge
+Sedgwick
+sediment
+sedimentary
+sediments
+sedition
+seditious
+seduce
+seduced
+seducer
+seducers
+seduces
+seducing
+seduction
+seductive
+see
+seed
+seeded
+seeder
+seeders
+seeding
+seedings
+seedling
+seedlings
+seeds
+seedy
+seeing
+seek
+seeker
+seekers
+seeking
+seeks
+Seeley
+seem
+seemed
+seeming
+seemingly
+seemly
+seems
+seen
+seep
+seepage
+seeped
+seeping
+seeps
+seer
+seers
+seersucker
+sees
+seethe
+seethed
+seethes
+seething
+segment
+segmentation
+segmentations
+segmented
+segmenting
+segments
+Segovia
+segregate
+segregated
+segregates
+segregating
+segregation
+Segundo
+Seidel
+seismic
+seismograph
+seismology
+seize
+seized
+seizes
+seizing
+seizure
+seizures
+seldom
+select
+selected
+selecting
+selection
+selections
+selective
+selectively
+selectivity
+selectman
+selectmen
+selector
+selectors
+Selectric
+selects
+Selena
+selenium
+self
+selfish
+selfishly
+selfishness
+Selfridge
+selfsame
+Selkirk
+sell
+seller
+sellers
+selling
+sellout
+sells
+Selma
+seltzer
+selves
+Selwyn
+semantic
+semantical
+semantically
+semanticist
+semanticists
+semantics
+semaphore
+semaphores
+semblance
+semester
+semesters
+semi
+semiautomated
+semicolon
+semicolons
+semiconductor
+semiconductors
+seminal
+seminar
+seminarian
+seminaries
+seminars
+seminary
+Seminole
+semipermanent
+semipermanently
+Semiramis
+Semite
+Semitic
+Semiticize
+Semiticizes
+Semitization
+Semitizations
+Semitize
+Semitizes
+senate
+senates
+senator
+senatorial
+senators
+send
+sender
+senders
+sending
+sends
+Seneca
+Senegal
+senile
+senior
+seniority
+seniors
+sensation
+sensational
+sensationally
+sensations
+sense
+sensed
+senseless
+senselessly
+senselessness
+senses
+sensibilities
+sensibility
+sensible
+sensibly
+sensing
+sensitive
+sensitively
+sensitiveness
+sensitives
+sensitivities
+sensitivity
+sensor
+sensors
+sensory
+sensual
+sensuous
+sent
+sentence
+sentenced
+sentences
+sentencing
+sentential
+sentiment
+sentimental
+sentimentally
+sentiments
+sentinel
+sentinels
+sentries
+sentry
+Seoul
+separable
+separate
+separated
+separately
+separateness
+separates
+separating
+separation
+separations
+separator
+separators
+sepia
+Sepoy
+sept
+September
+Septembers
+sepulcher
+sepulchers
+sequel
+sequels
+sequence
+sequenced
+sequencer
+sequencers
+sequences
+sequencing
+sequencings
+sequential
+sequentiality
+sequentialize
+sequentialized
+sequentializes
+sequentializing
+sequentially
+sequester
+Sequoia
+Serafin
+Serbia
+Serbian
+Serbians
+Serbo-
+serendipitous
+serendipity
+serene
+serenely
+serenity
+serf
+serfs
+sergeant
+sergeants
+Sergei
+serial
+serializability
+serializable
+serialization
+serializations
+serialize
+serialized
+serializes
+serializing
+serially
+serials
+series
+serif
+serious
+seriously
+seriousness
+sermon
+sermons
+Serpens
+serpent
+serpentine
+serpents
+Serra
+serum
+serums
+servant
+servants
+serve
+served
+server
+servers
+serves
+service
+serviceability
+serviceable
+serviced
+serviceman
+servicemen
+services
+servicing
+servile
+serving
+servings
+servitude
+servo
+servomechanism
+sesame
+session
+sessions
+set
+setback
+Seth
+sets
+settable
+setter
+setters
+setting
+settings
+settle
+settled
+settlement
+settlements
+settler
+settlers
+settles
+settling
+setup
+setups
+seven
+sevenfold
+sevens
+seventeen
+seventeens
+seventeenth
+seventh
+seventies
+seventieth
+seventy
+sever
+several
+severalfold
+severally
+severance
+severe
+severed
+severely
+severer
+severest
+severing
+severities
+severity
+Severn
+severs
+Seville
+sew
+sewage
+Seward
+sewed
+sewer
+sewers
+sewing
+sews
+sex
+sexed
+sexes
+sexist
+Sextans
+sextet
+sextillion
+sexton
+sextuple
+sextuplet
+sexual
+sexuality
+sexually
+sexy
+Seychelles
+Seymour
+shabby
+shack
+shacked
+shackle
+shackled
+shackles
+shackling
+shacks
+shade
+shaded
+shades
+shadier
+shadiest
+shadily
+shadiness
+shading
+shadings
+shadow
+shadowed
+shadowing
+shadows
+shadowy
+shady
+Shafer
+Shaffer
+shaft
+shafts
+shaggy
+shakable
+shakably
+shake
+shakedown
+shaken
+shaker
+shakers
+shakes
+Shakespeare
+Shakespearean
+Shakespearian
+Shakespearize
+Shakespearizes
+shakiness
+shaking
+shaky
+shale
+shall
+shallow
+shallower
+shallowly
+shallowness
+sham
+shambles
+shame
+shamed
+shameful
+shamefully
+shameless
+shamelessly
+shames
+shaming
+shampoo
+shamrock
+shams
+Shanghai
+Shanghaied
+Shanghaiing
+Shanghaiings
+Shanghais
+Shannon
+shanties
+Shantung
+shanty
+shape
+shaped
+shapeless
+shapelessly
+shapelessness
+shapely
+shaper
+shapers
+shapes
+shaping
+Shapiro
+sharable
+shard
+share
+shareable
+sharecropper
+sharecroppers
+shared
+shareholder
+shareholders
+sharer
+sharers
+shares
+Shari
+sharing
+shark
+sharks
+Sharon
+sharp
+Sharpe
+sharpen
+sharpened
+sharpening
+sharpens
+sharper
+sharpest
+sharply
+sharpness
+sharpshoot
+Shasta
+shatter
+shattered
+shattering
+shatterproof
+shatters
+Shattuck
+shave
+shaved
+shaven
+shaves
+shaving
+shavings
+Shawano
+shawl
+shawls
+Shawnee
+she
+Shea
+sheaf
+shear
+sheared
+Shearer
+shearing
+shears
+sheath
+sheathing
+sheaths
+sheaves
+Sheboygan
+shed
+shedding
+Shedir
+sheds
+Sheehan
+sheen
+sheep
+sheepskin
+sheer
+sheered
+sheet
+sheeted
+sheeting
+sheets
+Sheffield
+sheik
+Sheila
+Shelby
+Sheldon
+shelf
+shell
+shelled
+sheller
+Shelley
+shelling
+shells
+shelter
+sheltered
+sheltering
+shelters
+Shelton
+shelve
+shelved
+shelves
+shelving
+Shenandoah
+shenanigan
+Shepard
+shepherd
+shepherds
+Sheppard
+Sheraton
+sherbet
+Sheridan
+sheriff
+sheriffs
+Sherlock
+Sherman
+Sherrill
+sherry
+Sherwin
+Sherwood
+shibboleth
+shied
+shield
+shielded
+shielding
+Shields
+shies
+shift
+shifted
+shifter
+shifters
+shiftier
+shiftiest
+shiftily
+shiftiness
+shifting
+shifts
+shifty
+Shiite
+Shiites
+shill
+shilling
+shillings
+Shillong
+Shiloh
+shimmer
+shimmering
+shin
+shinbone
+shine
+shined
+shiner
+shiners
+shines
+shingle
+shingles
+shining
+shiningly
+Shinto
+Shintoism
+Shintoize
+Shintoizes
+shiny
+ship
+shipboard
+shipbuilding
+Shipley
+shipmate
+shipment
+shipments
+shipped
+shipper
+shippers
+shipping
+ships
+shipshape
+shipwreck
+shipwrecked
+shipwrecks
+shipyard
+shire
+shirk
+shirker
+shirking
+shirks
+Shirley
+shirt
+shirting
+shirts
+shit
+Shiva
+shiver
+shivered
+shiverer
+shivering
+shivers
+Shmuel
+shoal
+shoals
+shock
+shocked
+shocker
+shockers
+shocking
+shockingly
+Shockley
+shocks
+shod
+shoddy
+shoe
+shoed
+shoehorn
+shoeing
+shoelace
+shoemaker
+shoes
+shoestring
+Shoji
+shone
+shook
+shoot
+shooter
+shooters
+shooting
+shootings
+shoots
+shop
+shopkeeper
+shopkeepers
+shopped
+shopper
+shoppers
+shopping
+shops
+shopworn
+shore
+shoreline
+shores
+Shorewood
+shorn
+short
+shortage
+shortages
+shortcoming
+shortcomings
+shortcut
+shortcuts
+shorted
+shorten
+shortened
+shortening
+shortens
+shorter
+shortest
+shortfall
+shorthand
+shorthanded
+shorting
+shortish
+shortly
+shortness
+shorts
+shortsighted
+shortstop
+Shoshone
+shot
+shotgun
+shotguns
+shots
+should
+shoulder
+shouldered
+shouldering
+shoulders
+shout
+shouted
+shouter
+shouters
+shouting
+shouts
+shove
+shoved
+shovel
+shoveled
+shovels
+shoves
+shoving
+show
+showboat
+showcase
+showdown
+showed
+shower
+showered
+showering
+showers
+showing
+showings
+shown
+showpiece
+showroom
+shows
+showy
+shrank
+shrapnel
+shred
+shredder
+shredding
+shreds
+Shreveport
+shrew
+shrewd
+shrewdest
+shrewdly
+shrewdness
+shrews
+shriek
+shrieked
+shrieking
+shrieks
+shrill
+shrilled
+shrilling
+shrillness
+shrilly
+shrimp
+shrine
+shrines
+shrink
+shrinkable
+shrinkage
+shrinking
+shrinks
+shrivel
+shriveled
+shroud
+shrouded
+shrub
+shrubbery
+shrubs
+shrug
+shrugs
+shrunk
+shrunken
+Shu
+shudder
+shuddered
+shuddering
+shudders
+shuffle
+shuffleboard
+shuffled
+shuffles
+shuffling
+Shulman
+shun
+shuns
+shunt
+shut
+shutdown
+shutdowns
+shutoff
+shutout
+shuts
+shutter
+shuttered
+shutters
+shutting
+shuttle
+shuttlecock
+shuttled
+shuttles
+shuttling
+shy
+Shylock
+Shylockian
+shyly
+shyness
+Siam
+Siamese
+Sian
+Siberia
+Siberian
+Sibley
+sibling
+siblings
+Sicilian
+Siciliana
+Sicilians
+Sicily
+sick
+sicken
+sicker
+sickest
+sickle
+sickly
+sickness
+sicknesses
+sickroom
+side
+sidearm
+sideband
+sideboard
+sideboards
+sideburns
+sidecar
+sided
+sidelight
+sidelights
+sideline
+sidereal
+sides
+sidesaddle
+sideshow
+sidestep
+sidetrack
+sidewalk
+sidewalks
+sideways
+sidewise
+siding
+sidings
+Sidney
+siege
+Siegel
+sieges
+Siegfried
+Sieglinda
+Siegmund
+Siemens
+Siena
+sierra
+sieve
+sieves
+Sifford
+sift
+sifted
+sifter
+sifting
+SIGGRAPH
+sigh
+sighed
+sighing
+sighs
+sight
+sighted
+sighting
+sightings
+sightly
+sights
+sightseeing
+sigma
+Sigmund
+sign
+signal
+signaled
+signaling
+signalled
+signalling
+signally
+signals
+signature
+signatures
+signed
+signer
+signers
+signet
+significance
+significant
+significantly
+significants
+signification
+signified
+signifies
+signify
+signifying
+signing
+signs
+Sikh
+Sikhes
+Sikhs
+Sikkim
+Sikkimese
+Sikorsky
+Silas
+silence
+silenced
+silencer
+silencers
+silences
+silencing
+silent
+silently
+silhouette
+silhouetted
+silhouettes
+silica
+silicate
+silicon
+silicone
+silk
+silken
+silkier
+silkiest
+silkily
+Silkine
+silks
+silky
+sill
+silliest
+silliness
+sills
+silly
+silo
+silt
+silted
+silting
+silts
+silver
+silvered
+silvering
+Silverman
+silvers
+silversmith
+Silverstein
+silverware
+silvery
+similar
+similarities
+similarity
+similarly
+simile
+similitude
+Simla
+simmer
+simmered
+simmering
+simmers
+Simmons
+Simmonsville
+Simms
+Simon
+Simons
+Simonson
+simple
+simpleminded
+simpleness
+simpler
+simplest
+simpleton
+simplex
+simplicities
+simplicity
+simplification
+simplifications
+simplified
+simplifier
+simplifiers
+simplifies
+simplify
+simplifying
+simplistic
+simply
+Simpson
+Sims
+SIMULA
+Simula
+simulate
+simulated
+simulates
+simulating
+simulation
+simulations
+simulator
+simulators
+simulcast
+simultaneity
+simultaneous
+simultaneously
+Sinai
+Sinatra
+Sinbad
+since
+sincere
+sincerely
+sincerest
+sincerity
+Sinclair
+sine
+sines
+sinew
+sinews
+sinewy
+sinful
+sinfully
+sinfulness
+sing
+singable
+Singapore
+Singborg
+singe
+singed
+singer
+singers
+singing
+singingly
+single
+singled
+singlehanded
+singleness
+singles
+singlet
+singleton
+singletons
+singling
+singly
+sings
+singsong
+singular
+singularities
+singularity
+singularly
+sinister
+sink
+sinked
+sinker
+sinkers
+sinkhole
+sinking
+sinks
+sinned
+sinner
+sinners
+sinning
+Sino-
+sins
+sinuous
+sinus
+sinusoid
+sinusoidal
+sinusoids
+Sioux
+sip
+siphon
+siphoning
+sipping
+sips
+sir
+sire
+sired
+siren
+sirens
+sires
+Sirius
+sirs
+sirup
+sister
+sisterly
+sisters
+Sistine
+Sisyphean
+Sisyphus
+sit
+site
+sited
+sites
+siting
+sits
+sitter
+sitters
+sitting
+sittings
+situ
+situate
+situated
+situates
+situating
+situation
+situational
+situationally
+situations
+Siva
+six
+sixes
+sixfold
+sixgun
+sixpence
+sixteen
+sixteens
+sixteenth
+sixth
+sixties
+sixtieth
+sixty
+sizable
+size
+sized
+sizes
+sizing
+sizings
+sizzle
+skate
+skated
+skater
+skaters
+skates
+skating
+skeletal
+skeleton
+skeletons
+skeptic
+skeptical
+skeptically
+skepticism
+skeptics
+sketch
+sketchbook
+sketched
+sketches
+sketchily
+sketching
+sketchpad
+sketchy
+skew
+skewed
+skewer
+skewers
+skewing
+skews
+ski
+skid
+skidding
+skied
+skies
+skiff
+skiing
+skill
+skilled
+skillet
+skillful
+skillfully
+skillfulness
+skills
+skim
+skimmed
+skimming
+skimp
+skimped
+skimping
+skimps
+skimpy
+skims
+skin
+skindive
+skinned
+skinner
+skinners
+skinning
+skinny
+skins
+skip
+skipped
+skipper
+skippers
+skipping
+Skippy
+skips
+skirmish
+skirmished
+skirmisher
+skirmishers
+skirmishes
+skirmishing
+skirt
+skirted
+skirting
+skirts
+skis
+skit
+Skopje
+skulk
+skulked
+skulker
+skulking
+skulks
+skull
+skullcap
+skullduggery
+skulls
+skunk
+skunks
+sky
+Skye
+skyhook
+skyjack
+skylark
+skylarking
+skylarks
+skylight
+skylights
+skyline
+skyrockets
+skyscraper
+skyscrapers
+slab
+slack
+slacken
+slacker
+slacking
+slackly
+slackness
+slacks
+slain
+slam
+slammed
+slamming
+slams
+slander
+slanderer
+slanderous
+slanders
+slang
+slant
+slanted
+slanting
+slants
+slap
+slapped
+slapping
+slaps
+slapstick
+slash
+slashed
+slashes
+slashing
+slat
+slate
+slated
+slater
+slates
+slats
+slaughter
+slaughtered
+slaughterhouse
+slaughtering
+slaughters
+Slav
+slave
+slaver
+slavery
+slaves
+Slavic
+Slavicize
+Slavicizes
+slavish
+Slavization
+Slavizations
+Slavize
+Slavizes
+Slavonic
+Slavonicize
+Slavonicizes
+Slavs
+slay
+slayer
+slayers
+slaying
+slays
+sled
+sledding
+sledge
+sledgehammer
+sledges
+sleds
+sleek
+sleep
+sleeper
+sleepers
+sleepily
+sleepiness
+sleeping
+sleepless
+sleeplessly
+sleeplessness
+sleeps
+sleepwalk
+sleepy
+sleet
+sleeve
+sleeves
+sleigh
+sleighs
+sleight
+slender
+slenderer
+slept
+Slesinger
+sleuth
+slew
+slewing
+slice
+sliced
+slicer
+slicers
+slices
+slicing
+slick
+slicker
+slickers
+slicks
+slid
+slide
+slider
+sliders
+slides
+sliding
+slight
+slighted
+slighter
+slightest
+slighting
+slightly
+slightness
+slights
+slim
+slime
+slimed
+slimly
+slimy
+sling
+slinging
+slings
+slingshot
+slip
+slippage
+slipped
+slipper
+slipperiness
+slippers
+slippery
+slipping
+slips
+slit
+slither
+slits
+sliver
+Sloan
+Sloane
+slob
+Slocum
+slogan
+slogans
+sloop
+slop
+slope
+sloped
+sloper
+slopers
+slopes
+sloping
+slopped
+sloppiness
+slopping
+sloppy
+slops
+slot
+sloth
+slothful
+sloths
+slots
+slotted
+slotting
+slouch
+slouched
+slouches
+slouching
+Slovakia
+Slovenia
+slow
+slowdown
+slowed
+slower
+slowest
+slowing
+slowly
+slowness
+slows
+sludge
+slug
+sluggish
+sluggishly
+sluggishness
+slugs
+sluice
+slum
+slumber
+slumbered
+slumming
+slump
+slumped
+slumps
+slums
+slung
+slur
+slurp
+slurring
+slurry
+slurs
+sly
+slyly
+smack
+smacked
+smacking
+smacks
+small
+smaller
+smallest
+Smalley
+smallish
+smallness
+smallpox
+smalltime
+Smallwood
+smart
+smarted
+smarter
+smartest
+smartly
+smartness
+smash
+smashed
+smasher
+smashers
+smashes
+smashing
+smashingly
+smattering
+smear
+smeared
+smearing
+smears
+smell
+smelled
+smelling
+smells
+smelly
+smelt
+smelter
+smelts
+smile
+smiled
+smiles
+smiling
+smilingly
+smirk
+smite
+smith
+smithereens
+Smithfield
+smiths
+Smithson
+Smithsonian
+Smithtown
+smithy
+smitten
+smock
+smocking
+smocks
+smog
+smokable
+smoke
+smoked
+smoker
+smokers
+smokes
+smokescreen
+smokestack
+smokies
+smoking
+smoky
+smolder
+smoldered
+smoldering
+smolders
+smooch
+smooth
+smoothbore
+smoothed
+smoother
+smoothes
+smoothest
+smoothing
+smoothly
+smoothness
+smote
+smother
+smothered
+smothering
+smothers
+Smucker
+smudge
+smug
+smuggle
+smuggled
+smuggler
+smugglers
+smuggles
+smuggling
+smut
+smutty
+Smyrna
+Smythe
+snack
+snafu
+snag
+snail
+snails
+snake
+snaked
+snakelike
+snakes
+snap
+snapdragon
+snapped
+snapper
+snappers
+snappily
+snapping
+snappy
+snaps
+snapshot
+snapshots
+snare
+snared
+snares
+snaring
+snark
+snarl
+snarled
+snarling
+snatch
+snatched
+snatches
+snatching
+snazzy
+Snead
+sneak
+sneaked
+sneaker
+sneakers
+sneakier
+sneakiest
+sneakily
+sneakiness
+sneaking
+sneaks
+sneaky
+Sneed
+sneer
+sneered
+sneering
+sneers
+sneeze
+sneezed
+sneezes
+sneezing
+Snider
+sniff
+sniffed
+sniffing
+sniffle
+sniffs
+snifter
+snigger
+snip
+snipe
+snippet
+snivel
+snob
+snobbery
+snobbish
+Snodgrass
+snoop
+snooped
+snooping
+snoops
+snoopy
+snore
+snored
+snores
+snoring
+snorkel
+snort
+snorted
+snorting
+snorts
+snotty
+snout
+snouts
+snow
+snowball
+Snowbelt
+snowed
+snowfall
+snowflake
+snowier
+snowiest
+snowily
+snowing
+snowman
+snowmen
+snows
+snowshoe
+snowshoes
+snowstorm
+snowy
+snub
+snuff
+snuffed
+snuffer
+snuffing
+snuffs
+snug
+snuggle
+snuggled
+snuggles
+snuggling
+snugly
+snugness
+Snyder
+so
+soak
+soaked
+soaking
+soaks
+soap
+soaped
+soaping
+soaps
+soapy
+soar
+soared
+soaring
+soars
+sob
+sobbing
+sober
+sobered
+sobering
+soberly
+soberness
+sobers
+sobriety
+sobs
+soccer
+sociability
+sociable
+sociably
+social
+socialism
+socialist
+socialists
+socialize
+socialized
+socializes
+socializing
+socially
+societal
+societies
+society
+socioeconomic
+sociological
+sociologically
+sociologist
+sociologists
+sociology
+sock
+socked
+socket
+sockets
+socking
+socks
+Socrates
+Socratic
+sod
+soda
+Soddy
+sodium
+sodomy
+sods
+sofa
+sofas
+Sofia
+soft
+softball
+soften
+softened
+softening
+softens
+softer
+softest
+softly
+softness
+software
+softwares
+soggy
+soil
+soiled
+soiling
+soils
+soiree
+sojourn
+sojourner
+sojourners
+Sol
+solace
+solaced
+solar
+sold
+solder
+soldered
+soldier
+soldiering
+soldierly
+soldiers
+sole
+solely
+solemn
+solemnity
+solemnly
+solemnness
+solenoid
+soles
+solicit
+solicitation
+solicited
+soliciting
+solicitor
+solicitous
+solicits
+solicitude
+solid
+solidarity
+solidification
+solidified
+solidifies
+solidify
+solidifying
+solidity
+solidly
+solidness
+solids
+soliloquy
+solitaire
+solitary
+solitude
+solitudes
+Solly
+solo
+Solomon
+Solon
+solos
+Soloviev
+solstice
+solubility
+soluble
+solution
+solutions
+solvable
+solve
+solved
+solvent
+solvents
+solver
+solvers
+solves
+solving
+Somali
+Somalia
+Somalis
+somatic
+somber
+somberly
+some
+somebody
+someday
+somehow
+someone
+someplace
+Somers
+somersault
+Somerset
+Somerville
+something
+sometime
+sometimes
+somewhat
+somewhere
+sommelier
+Sommerfeld
+somnolent
+son
+sonar
+sonata
+Sonenberg
+song
+songbook
+songs
+sonic
+sonnet
+sonnets
+sonny
+Sonoma
+Sonora
+sons
+Sony
+soon
+sooner
+soonest
+soot
+sooth
+soothe
+soothed
+soother
+soothes
+soothing
+soothsayer
+Sophia
+Sophias
+Sophie
+sophisticated
+sophistication
+sophistry
+Sophoclean
+Sophocles
+sophomore
+sophomores
+soprano
+sorcerer
+sorcerers
+sorcery
+sordid
+sordidly
+sordidness
+sore
+sorely
+soreness
+Sorensen
+Sorenson
+sorer
+sores
+sorest
+sorghum
+sorority
+sorrel
+Sorrentine
+sorrier
+sorriest
+sorrow
+sorrowful
+sorrowfully
+sorrows
+sorry
+sort
+sorted
+sorter
+sorters
+sortie
+sorting
+sorts
+sought
+soul
+soulful
+souls
+sound
+sounded
+sounder
+soundest
+sounding
+soundings
+soundly
+soundness
+soundproof
+sounds
+soup
+souped
+soups
+sour
+source
+sources
+sourdough
+soured
+sourer
+sourest
+souring
+sourly
+sourness
+sours
+Sousa
+south
+Southampton
+southbound
+southeast
+southeastern
+southern
+southerner
+southerners
+southernmost
+Southernwood
+Southey
+Southfield
+southland
+southpaw
+southward
+southwest
+southwestern
+souvenir
+sovereign
+sovereigns
+sovereignty
+soviet
+soviets
+sow
+sown
+soy
+soya
+soybean
+spa
+space
+spacecraft
+spaced
+spacer
+spacers
+spaces
+spaceship
+spaceships
+spacesuit
+Spacewar
+spacing
+spacings
+spacious
+spaded
+spades
+spading
+Spafford
+Spahn
+Spain
+Spalding
+span
+spandrel
+Spaniard
+Spaniardization
+Spaniardizations
+Spaniardize
+Spaniardizes
+Spaniards
+spaniel
+Spanish
+Spanishize
+Spanishizes
+spank
+spanked
+spanking
+spanks
+spanned
+spanner
+spanners
+spanning
+spans
+SPARC
+SPARCstation
+spare
+spared
+sparely
+spareness
+sparer
+spares
+sparest
+sparing
+sparingly
+spark
+sparked
+sparking
+sparkle
+sparkling
+Sparkman
+sparks
+sparring
+sparrow
+sparrows
+sparse
+sparsely
+sparseness
+sparser
+sparsest
+Sparta
+Spartan
+Spartanize
+Spartanizes
+spasm
+spastic
+spat
+spate
+spates
+spatial
+spatially
+spatter
+spattered
+spatula
+Spaulding
+spawn
+spawned
+spawning
+spawns
+spayed
+speak
+speakable
+speakeasy
+speaker
+Speakerphone
+Speakerphones
+speakers
+speaking
+speaks
+spear
+speared
+spearmint
+spears
+spec
+special
+specialist
+specialists
+specialization
+specializations
+specialize
+specialized
+specializes
+specializing
+specially
+specials
+specialties
+specialty
+specie
+species
+specifiable
+specific
+specifically
+specification
+specifications
+specificity
+specifics
+specified
+specifier
+specifiers
+specifies
+specify
+specifying
+specimen
+specimens
+specious
+speck
+speckle
+speckled
+speckles
+specks
+spectacle
+spectacled
+spectacles
+spectacular
+spectacularly
+spectator
+spectators
+specter
+specters
+Spector
+spectra
+spectral
+spectrogram
+spectrograms
+spectrograph
+spectrographic
+spectrography
+spectrometer
+spectrophotometer
+spectrophotometry
+spectroscope
+spectroscopic
+spectroscopy
+spectrum
+speculate
+speculated
+speculates
+speculating
+speculation
+speculations
+speculative
+speculator
+speculators
+sped
+speech
+speeches
+speechless
+speechlessness
+speed
+speedboat
+speeded
+speeder
+speeders
+speedily
+speeding
+speedometer
+speeds
+speedup
+speedups
+speedy
+spell
+spellbound
+spelled
+speller
+spellers
+spelling
+spellings
+spells
+Spencer
+Spencerian
+spend
+spender
+spenders
+spending
+spends
+Spenglerian
+spent
+sperm
+Sperry
+sphere
+spheres
+spherical
+spherically
+spheroid
+spheroidal
+sphinx
+Spica
+spice
+spiced
+spices
+spiciness
+spicy
+spider
+spiders
+spidery
+Spiegel
+spies
+spigot
+spike
+spiked
+spikes
+spill
+spilled
+spiller
+spilling
+spills
+spilt
+spin
+spinach
+spinal
+spinally
+spindle
+spindled
+spindling
+spine
+spinnaker
+spinner
+spinners
+spinning
+spinoff
+spins
+spinster
+spiny
+spiral
+spiraled
+spiraling
+spirally
+spire
+spires
+spirit
+spirited
+spiritedly
+spiriting
+spirits
+spiritual
+spiritually
+spirituals
+Spiro
+spit
+spite
+spited
+spiteful
+spitefully
+spitefulness
+spites
+spitfire
+spiting
+spits
+spitting
+spittle
+Spitz
+splash
+splashed
+splashes
+splashing
+splashy
+spleen
+splendid
+splendidly
+splendor
+splenetic
+splice
+spliced
+splicer
+splicers
+splices
+splicing
+splicings
+spline
+splines
+splint
+splinter
+splintered
+splinters
+splintery
+split
+splits
+splitter
+splitters
+splitting
+splurge
+spoil
+spoilage
+spoiled
+spoiler
+spoilers
+spoiling
+spoils
+Spokane
+spoke
+spoked
+spoken
+spokes
+spokesman
+spokesmen
+sponge
+sponged
+sponger
+spongers
+sponges
+sponging
+spongy
+sponsor
+sponsored
+sponsoring
+sponsors
+sponsorship
+spontaneity
+spontaneous
+spontaneously
+spoof
+spook
+spooky
+spool
+spooled
+spooler
+spoolers
+spooling
+spools
+spoon
+spooned
+spoonful
+spooning
+spoons
+sporadic
+spore
+spores
+sport
+sported
+sporting
+sportingly
+sportive
+sports
+sportsman
+sportsmen
+sportswear
+sportswriter
+sportswriting
+sporty
+Sposato
+spot
+spotless
+spotlessly
+spotlight
+spots
+spotted
+spotter
+spotters
+spotting
+spotty
+spouse
+spouses
+spout
+spouted
+spouting
+spouts
+Sprague
+sprain
+sprang
+sprawl
+sprawled
+sprawling
+sprawls
+spray
+sprayed
+sprayer
+spraying
+sprays
+spread
+spreader
+spreaders
+spreading
+spreadings
+spreads
+spreadsheet
+spree
+sprees
+sprig
+sprightly
+spring
+springboard
+springer
+springers
+Springfield
+springier
+springiest
+springiness
+springing
+springs
+springtime
+springy
+sprinkle
+sprinkled
+sprinkler
+sprinkles
+sprinkling
+sprint
+sprinted
+sprinter
+sprinters
+sprinting
+sprints
+sprite
+sprocket
+Sproul
+sprout
+sprouted
+sprouting
+spruce
+spruced
+sprung
+Spuds
+spun
+spunk
+spur
+spurious
+spurn
+spurned
+spurning
+spurns
+spurs
+spurt
+spurted
+spurting
+spurts
+sputter
+sputtered
+spy
+spyglass
+spying
+squabble
+squabbled
+squabbles
+squabbling
+squad
+squadron
+squadrons
+squads
+squalid
+squall
+squalls
+squander
+square
+squared
+squarely
+squareness
+squarer
+squares
+squarest
+Squaresville
+squaring
+squash
+squashed
+squashing
+squat
+squats
+squatting
+squaw
+squawk
+squawked
+squawking
+squawks
+squeak
+squeaked
+squeaking
+squeaks
+squeaky
+squeal
+squealed
+squealing
+squeals
+squeamish
+squeeze
+squeezed
+squeezer
+squeezes
+squeezing
+squelch
+Squibb
+squid
+squint
+squinted
+squinting
+squire
+squires
+squirm
+squirmed
+squirms
+squirmy
+squirrel
+squirreled
+squirreling
+squirrels
+squirt
+squishy
+Sri
+stab
+stabbed
+stabbing
+stabile
+stabilities
+stability
+stabilize
+stabilized
+stabilizer
+stabilizers
+stabilizes
+stabilizing
+stable
+stabled
+stabler
+stables
+stabling
+stably
+stabs
+stack
+stacked
+stacking
+stacks
+Stacy
+stadia
+stadium
+staff
+staffed
+staffer
+staffers
+staffing
+Stafford
+Staffordshire
+staffs
+stag
+stage
+stagecoach
+stagecoaches
+staged
+stager
+stagers
+stages
+stagger
+staggered
+staggering
+staggers
+staging
+stagnant
+stagnate
+stagnation
+stags
+Stahl
+staid
+stain
+stained
+staining
+stainless
+stains
+stair
+staircase
+staircases
+stairs
+stairway
+stairways
+stairwell
+stake
+staked
+stakes
+stalactite
+stale
+stalemate
+Staley
+Stalin
+Stalinist
+Stalins
+stalk
+stalked
+stalking
+stall
+stalled
+stalling
+stallings
+stallion
+stalls
+stalwart
+stalwartly
+stamen
+stamens
+Stamford
+stamina
+stammer
+stammered
+stammerer
+stammering
+stammers
+stamp
+stamped
+stampede
+stampeded
+stampedes
+stampeding
+stamper
+stampers
+stamping
+stamps
+Stan
+stanch
+stanchest
+stanchion
+stand
+standard
+standardization
+standardize
+standardized
+standardizes
+standardizing
+standardly
+standards
+standby
+standing
+standings
+Standish
+standoff
+standpoint
+standpoints
+stands
+standstill
+Stanford
+Stanhope
+Stanley
+Stans
+Stanton
+stanza
+stanzas
+staphylococcus
+staple
+stapler
+staples
+Stapleton
+stapling
+star
+starboard
+starch
+starched
+stardom
+stare
+stared
+starer
+stares
+starfish
+Stargate
+staring
+stark
+Starkey
+starkly
+starlet
+starlight
+starling
+Starr
+starred
+starring
+starry
+stars
+start
+started
+starter
+starters
+starting
+startle
+startled
+startles
+startling
+starts
+startup
+startups
+starvation
+starve
+starved
+starves
+starving
+state
+stated
+stately
+statement
+statements
+Staten
+states
+statesman
+statesmanlike
+statesmen
+statewide
+static
+statically
+stating
+station
+stationary
+stationed
+stationer
+stationery
+stationing
+stationmaster
+stations
+statistic
+statistical
+statistically
+statistician
+statisticians
+statistics
+Statler
+statue
+statues
+statuesque
+statuesquely
+statuesqueness
+statuette
+stature
+status
+statuses
+statute
+statutes
+statutorily
+statutoriness
+statutory
+Stauffer
+staunch
+staunchest
+staunchly
+Staunton
+stave
+staved
+staves
+stay
+stayed
+staying
+stays
+stead
+steadfast
+steadfastly
+steadfastness
+steadied
+steadier
+steadies
+steadiest
+steadily
+steadiness
+steady
+steadying
+steak
+steaks
+steal
+stealer
+stealing
+steals
+stealth
+stealthily
+stealthy
+steam
+steamboat
+steamboats
+steamed
+steamer
+steamers
+steaming
+steams
+steamship
+steamships
+steamy
+Stearns
+steed
+steel
+Steele
+steeled
+steelers
+steeling
+steelmaker
+steels
+steely
+Steen
+steep
+steeped
+steeper
+steepest
+steeping
+steeple
+steeples
+steeply
+steepness
+steeps
+steer
+steerable
+steered
+steering
+steers
+Stefan
+Stegosaurus
+Steinbeck
+Steinberg
+Steiner
+Stella
+stellar
+stem
+stemmed
+stemming
+stems
+stench
+stenches
+stencil
+stencils
+Stendhal
+Stendler
+stenographer
+stenographers
+stenotype
+step
+stepchild
+Stephan
+Stephanie
+Stephen
+Stephens
+Stephenson
+stepmother
+stepmothers
+stepped
+stepper
+stepping
+steps
+stepson
+stepwise
+stereo
+stereos
+stereoscopic
+stereotype
+stereotyped
+stereotypes
+stereotypical
+sterile
+sterilization
+sterilizations
+sterilize
+sterilized
+sterilizer
+sterilizes
+sterilizing
+sterling
+stern
+Sternberg
+sternly
+sternness
+Sterno
+sterns
+stethoscope
+Stetson
+Stetsons
+Steuben
+Steve
+stevedore
+Steven
+Stevens
+Stevenson
+Stevie
+stew
+steward
+stewardess
+stewards
+Stewart
+stewed
+stews
+stick
+sticker
+stickers
+stickier
+stickiest
+stickily
+stickiness
+sticking
+stickleback
+sticks
+sticky
+stiff
+stiffen
+stiffens
+stiffer
+stiffest
+stiffly
+stiffness
+stiffs
+stifle
+stifled
+stifles
+stifling
+stigma
+stigmata
+stile
+stiles
+stiletto
+still
+stillbirth
+stillborn
+stilled
+stiller
+stillest
+stilling
+stillness
+stills
+Stillwell
+stilt
+stilts
+Stimson
+stimulant
+stimulants
+stimulate
+stimulated
+stimulates
+stimulating
+stimulation
+stimulations
+stimulative
+stimuli
+stimulus
+sting
+stinging
+stings
+stingy
+stink
+stinker
+stinkers
+stinking
+stinks
+stint
+stipend
+stipends
+stipulate
+stipulated
+stipulates
+stipulating
+stipulation
+stipulations
+stir
+Stirling
+stirred
+stirrer
+stirrers
+stirring
+stirringly
+stirrings
+stirrup
+stirs
+stitch
+stitched
+stitches
+stitching
+stochastic
+stochastically
+stock
+stockade
+stockades
+stockbroker
+stocked
+stocker
+stockers
+stockholder
+stockholders
+Stockholm
+stocking
+stockings
+stockpile
+stockroom
+stocks
+Stockton
+stocky
+stodgy
+stoichiometry
+stoke
+Stokes
+stole
+stolen
+stoles
+stolid
+stomach
+stomached
+stomacher
+stomaches
+stomaching
+stomp
+Stone
+stoned
+Stonehenge
+stones
+stoning
+stony
+stood
+stooge
+stool
+stoop
+stooped
+stooping
+stoops
+stop
+stopcock
+stopcocks
+stopgap
+stopover
+stoppable
+stoppage
+stopped
+stopper
+stoppers
+stopping
+stops
+stopwatch
+storage
+storages
+store
+stored
+storehouse
+storehouses
+storekeeper
+storeroom
+stores
+Storey
+Storeyed
+Storeys
+storied
+stories
+storing
+stork
+storks
+storm
+stormed
+stormier
+stormiest
+storminess
+storming
+storms
+stormy
+story
+storyboard
+storyteller
+Stouffer
+stout
+stouter
+stoutest
+stoutly
+stoutness
+stove
+stoves
+stow
+Stowe
+stowed
+straddle
+strafe
+straggle
+straggled
+straggler
+stragglers
+straggles
+straggling
+straight
+straightaway
+straighten
+straightened
+straightens
+straighter
+straightest
+straightforward
+straightforwardly
+straightforwardness
+straightness
+straightway
+strain
+strained
+strainer
+strainers
+straining
+strains
+strait
+straiten
+straits
+strand
+stranded
+stranding
+strands
+strange
+strangely
+strangeness
+stranger
+strangers
+strangest
+strangle
+strangled
+strangler
+stranglers
+strangles
+strangling
+stranglings
+strangulation
+strangulations
+strap
+straps
+Strasbourg
+stratagem
+stratagems
+strategic
+strategies
+strategist
+strategy
+Stratford
+stratification
+stratifications
+stratified
+stratifies
+stratify
+stratosphere
+stratospheric
+Stratton
+stratum
+Strauss
+Stravinsky
+straw
+strawberries
+strawberry
+straws
+stray
+strayed
+strays
+streak
+streaked
+streaks
+stream
+streamed
+streamer
+streamers
+streaming
+streamline
+streamlined
+streamliner
+streamlines
+streamlining
+streams
+street
+streetcar
+streetcars
+streeters
+streets
+strength
+strengthen
+strengthened
+strengthener
+strengthening
+strengthens
+strengths
+strenuous
+strenuously
+streptococcus
+stress
+stressed
+stresses
+stressful
+stressing
+stretch
+stretched
+stretcher
+stretchers
+stretches
+stretching
+strew
+strewn
+strews
+stricken
+Strickland
+strict
+stricter
+strictest
+strictly
+strictness
+stricture
+stride
+strider
+strides
+striding
+strife
+strike
+strikebreaker
+striker
+strikers
+strikes
+striking
+strikingly
+Strindberg
+string
+stringed
+stringent
+stringently
+stringer
+stringers
+stringier
+stringiest
+stringiness
+stringing
+strings
+stringy
+strip
+stripe
+striped
+stripes
+stripped
+stripper
+strippers
+stripping
+strips
+striptease
+strive
+striven
+strives
+striving
+strivings
+strobe
+strobed
+strobes
+stroboscopic
+strode
+stroke
+stroked
+stroker
+strokers
+strokes
+stroking
+stroll
+strolled
+stroller
+strolling
+strolls
+Strom
+Stromberg
+strong
+stronger
+strongest
+Strongheart
+stronghold
+strongly
+strontium
+strove
+struck
+structural
+structurally
+structure
+structured
+structurer
+structures
+structuring
+struggle
+struggled
+struggles
+struggling
+strung
+strut
+struts
+strutting
+strychnine
+Stu
+Stuart
+stub
+stubble
+Stubblefield
+Stubblefields
+stubborn
+stubbornly
+stubbornness
+stubby
+stubs
+stucco
+stuck
+stud
+Studebaker
+student
+students
+studied
+studies
+studio
+studios
+studious
+studiously
+studs
+study
+studying
+stuff
+stuffed
+stuffier
+stuffiest
+stuffing
+stuffs
+stuffy
+stumble
+stumbled
+stumbles
+stumbling
+stump
+stumped
+stumping
+stumps
+stun
+stung
+stunning
+stunningly
+stunt
+stunts
+stupefy
+stupefying
+stupendous
+stupendously
+stupid
+stupidest
+stupidities
+stupidity
+stupidly
+stupor
+Sturbridge
+sturdiness
+sturdy
+sturgeon
+Sturm
+stutter
+Stuttgart
+Stuyvesant
+Stygian
+style
+styled
+styler
+stylers
+styles
+styli
+styling
+stylish
+stylishly
+stylishness
+stylistic
+stylistically
+stylized
+stylus
+Styrofoam
+Styx
+suave
+sub
+subatomic
+subchannel
+subchannels
+subclass
+subclasses
+subcommittees
+subcomponent
+subcomponents
+subcomputation
+subcomputations
+subconscious
+subconsciously
+subculture
+subcultures
+subcycle
+subcycles
+subdirectories
+subdirectory
+subdivide
+subdivided
+subdivides
+subdividing
+subdivision
+subdivisions
+subdomains
+subdue
+subdued
+subdues
+subduing
+subexpression
+subexpressions
+subfield
+subfields
+subfile
+subfiles
+subgoal
+subgoals
+subgraph
+subgraphs
+subgroup
+subgroups
+subinterval
+subintervals
+subject
+subjected
+subjecting
+subjection
+subjective
+subjectively
+subjectivity
+subjects
+sublanguage
+sublanguages
+sublayer
+sublayers
+sublimation
+sublimations
+sublime
+sublimed
+sublist
+sublists
+submarine
+submariner
+submariners
+submarines
+submerge
+submerged
+submerges
+submerging
+submission
+submissions
+submissive
+submit
+submits
+submittal
+submitted
+submitting
+submode
+submodes
+submodule
+submodules
+submultiplexed
+subnet
+subnets
+subnetwork
+subnetworks
+suboptimal
+subordinate
+subordinated
+subordinates
+subordination
+subparts
+subphases
+subpoena
+subproblem
+subproblems
+subprocesses
+subprogram
+subprograms
+subproject
+subproof
+subproofs
+subrange
+subranges
+subroutine
+subroutines
+subs
+subschema
+subschemas
+subscribe
+subscribed
+subscriber
+subscribers
+subscribes
+subscribing
+subscript
+subscripted
+subscripting
+subscription
+subscriptions
+subscripts
+subsection
+subsections
+subsegment
+subsegments
+subsequence
+subsequences
+subsequent
+subsequently
+subservient
+subset
+subsets
+subside
+subsided
+subsides
+subsidiaries
+subsidiary
+subsidies
+subsiding
+subsidize
+subsidized
+subsidizes
+subsidizing
+subsidy
+subsist
+subsisted
+subsistence
+subsistent
+subsisting
+subsists
+subslot
+subslots
+subspace
+subspaces
+substance
+substances
+substantial
+substantially
+substantiate
+substantiated
+substantiates
+substantiating
+substantiation
+substantiations
+substantive
+substantively
+substantivity
+substation
+substations
+substitutability
+substitutable
+substitute
+substituted
+substitutes
+substituting
+substitution
+substitutions
+substrate
+substrates
+substring
+substrings
+substructure
+substructures
+subsume
+subsumed
+subsumes
+subsuming
+subsystem
+subsystems
+subtask
+subtasks
+subterfuge
+subterranean
+subtitle
+subtitled
+subtitles
+subtle
+subtleness
+subtler
+subtlest
+subtleties
+subtlety
+subtly
+subtotal
+subtract
+subtracted
+subtracting
+subtraction
+subtractions
+subtractor
+subtractors
+subtracts
+subtrahend
+subtrahends
+subtree
+subtrees
+subunit
+subunits
+suburb
+suburban
+suburbia
+suburbs
+subversion
+subversive
+subvert
+subverted
+subverter
+subverting
+subverts
+subway
+subways
+succeed
+succeeded
+succeeding
+succeeds
+success
+successes
+successful
+successfully
+succession
+successions
+successive
+successively
+successor
+successors
+succinct
+succinctly
+succinctness
+succor
+succumb
+succumbed
+succumbing
+succumbs
+such
+suck
+sucked
+sucker
+suckers
+sucking
+suckle
+suckling
+sucks
+suction
+Sudan
+Sudanese
+Sudanic
+sudden
+suddenly
+suddenness
+suds
+sudsing
+sue
+sued
+sues
+Suez
+suffer
+sufferance
+suffered
+sufferer
+sufferers
+suffering
+sufferings
+suffers
+suffice
+sufficed
+suffices
+sufficiency
+sufficient
+sufficiently
+sufficing
+suffix
+suffixed
+suffixer
+suffixes
+suffixing
+suffocate
+suffocated
+suffocates
+suffocating
+suffocation
+Suffolk
+suffrage
+suffragette
+sugar
+sugared
+sugaring
+sugarings
+sugars
+suggest
+suggested
+suggestible
+suggesting
+suggestion
+suggestions
+suggestive
+suggestively
+suggests
+suicidal
+suicidally
+suicide
+suicides
+suing
+suit
+suitability
+suitable
+suitableness
+suitably
+suitcase
+suitcases
+suite
+suited
+suiters
+suites
+suiting
+suitor
+suitors
+suits
+Sukarno
+sulfa
+sulfur
+sulfuric
+sulfurous
+sulk
+sulked
+sulkiness
+sulking
+sulks
+sulky
+sullen
+sullenly
+sullenness
+Sullivan
+sulphate
+sulphur
+sulphured
+sulphuric
+sultan
+sultans
+sultry
+Sulzberger
+sum
+sumac
+Sumatra
+Sumeria
+Sumerian
+summand
+summands
+summaries
+summarily
+summarization
+summarizations
+summarize
+summarized
+summarizes
+summarizing
+summary
+summation
+summations
+summed
+Summer
+Summerdale
+Summers
+summertime
+summing
+summit
+summitry
+summon
+summoned
+summoner
+summoners
+summoning
+summons
+summonses
+Sumner
+sumptuous
+sums
+Sumter
+sun
+sunbeam
+sunbeams
+Sunbelt
+sunbonnet
+sunburn
+sunburnt
+Sunday
+Sundays
+sunder
+sundial
+sundown
+sundries
+sundry
+sunflower
+sung
+sunglass
+sunglasses
+sunk
+sunken
+sunlight
+sunlit
+sunned
+sunning
+sunny
+Sunnyvale
+sunrise
+suns
+sunset
+sunshine
+sunspot
+suntan
+suntanned
+suntanning
+super
+superb
+superblock
+superbly
+supercomputer
+supercomputers
+superego
+superegos
+superficial
+superficially
+superfluities
+superfluity
+superfluous
+superfluously
+supergroup
+supergroups
+superhuman
+superhumanly
+superimpose
+superimposed
+superimposes
+superimposing
+superintend
+superintendent
+superintendents
+superior
+superiority
+superiors
+superlative
+superlatively
+superlatives
+supermarket
+supermarkets
+supermini
+superminis
+supernatural
+superpose
+superposed
+superposes
+superposing
+superposition
+superscript
+superscripted
+superscripting
+superscripts
+supersede
+superseded
+supersedes
+superseding
+superset
+supersets
+superstition
+superstitions
+superstitious
+superuser
+supervise
+supervised
+supervises
+supervising
+supervision
+supervisor
+supervisors
+supervisory
+supine
+supper
+suppers
+supplant
+supplanted
+supplanting
+supplants
+supple
+supplement
+supplemental
+supplementary
+supplemented
+supplementing
+supplements
+suppleness
+supplication
+supplied
+supplier
+suppliers
+supplies
+supply
+supplying
+support
+supportable
+supported
+supporter
+supporters
+supporting
+supportingly
+supportive
+supportively
+supports
+suppose
+supposed
+supposedly
+supposes
+supposing
+supposition
+suppositions
+suppress
+suppressed
+suppresses
+suppressing
+suppression
+suppressor
+suppressors
+supranational
+supremacy
+supreme
+supremely
+surcharge
+sure
+surely
+sureness
+sureties
+surety
+surf
+surface
+surfaced
+surfaceness
+surfaces
+surfacing
+surge
+surged
+surgeon
+surgeons
+surgery
+surges
+surgical
+surgically
+surging
+surliness
+surly
+surmise
+surmised
+surmises
+surmount
+surmounted
+surmounting
+surmounts
+surname
+surnames
+surpass
+surpassed
+surpasses
+surpassing
+surplus
+surpluses
+surprise
+surprised
+surprises
+surprising
+surprisingly
+surreal
+surrender
+surrendered
+surrendering
+surrenders
+surreptitious
+surrey
+surrogate
+surrogates
+surround
+surrounded
+surrounding
+surroundings
+surrounds
+surtax
+survey
+surveyed
+surveying
+surveyor
+surveyors
+surveys
+survival
+survivals
+survive
+survived
+survives
+surviving
+survivor
+survivors
+Sus
+Susan
+Susanne
+susceptible
+Susie
+suspect
+suspected
+suspecting
+suspects
+suspend
+suspended
+suspender
+suspenders
+suspending
+suspends
+suspense
+suspenses
+suspension
+suspensions
+suspicion
+suspicions
+suspicious
+suspiciously
+Susquehanna
+Sussex
+sustain
+sustained
+sustaining
+sustains
+sustenance
+Sutherland
+Sutton
+suture
+sutures
+Suwanee
+Suzanne
+suzerainty
+Suzuki
+svelte
+Svetlana
+swab
+swabbing
+swagger
+swaggered
+swaggering
+Swahili
+swain
+swains
+swallow
+swallowed
+swallowing
+swallows
+swallowtail
+swam
+swami
+swamp
+swamped
+swamping
+swamps
+swampy
+swan
+swank
+swanky
+swanlike
+swans
+Swansea
+Swanson
+swap
+swapped
+swapping
+swaps
+swarm
+swarmed
+swarming
+swarms
+Swarthmore
+Swarthout
+swarthy
+Swartz
+swastika
+swat
+swatted
+sway
+swayed
+swaying
+Swaziland
+swear
+swearer
+swearing
+swears
+sweat
+sweated
+sweater
+sweaters
+sweating
+sweats
+sweatshirt
+sweaty
+Swede
+Sweden
+Swedes
+Swedish
+Sweeney
+Sweeneys
+sweep
+sweeper
+sweepers
+sweeping
+sweepings
+sweeps
+sweepstakes
+sweet
+sweeten
+sweetened
+sweetener
+sweeteners
+sweetening
+sweetenings
+sweetens
+sweeter
+sweetest
+sweetheart
+sweethearts
+sweetish
+sweetly
+sweetness
+sweets
+swell
+swelled
+swelling
+swellings
+swells
+swelter
+Swenson
+swept
+swerve
+swerved
+swerves
+swerving
+swift
+swifter
+swiftest
+swiftly
+swiftness
+swim
+swimmer
+swimmers
+swimming
+swimmingly
+swims
+swimsuit
+Swinburne
+swindle
+swine
+swing
+swinger
+swingers
+swinging
+swings
+Swink
+swipe
+swirl
+swirled
+swirling
+swish
+swished
+swiss
+switch
+switchblade
+switchboard
+switchboards
+switched
+switcher
+switchers
+switches
+switching
+switchings
+switchman
+Switzer
+Switzerland
+swivel
+swizzle
+swollen
+swoon
+swoop
+swooped
+swooping
+swoops
+sword
+swordfish
+swords
+swore
+sworn
+swum
+swung
+Sybil
+sycamore
+sycophant
+sycophantic
+Sydney
+Sykes
+syllable
+syllables
+syllogism
+syllogisms
+syllogistic
+Sylow
+sylvan
+Sylvania
+Sylvester
+Sylvia
+Sylvie
+symbiosis
+symbiotic
+symbol
+symbolic
+symbolically
+symbolics
+symbolism
+symbolization
+symbolize
+symbolized
+symbolizes
+symbolizing
+symbols
+Symington
+symmetric
+symmetrical
+symmetrically
+symmetries
+symmetry
+sympathetic
+sympathies
+sympathize
+sympathized
+sympathizer
+sympathizers
+sympathizes
+sympathizing
+sympathizingly
+sympathy
+symphonic
+symphonies
+symphony
+symposia
+symposium
+symposiums
+symptom
+symptomatic
+symptoms
+synagogue
+synapse
+synapses
+synaptic
+synchronism
+synchronization
+synchronize
+synchronized
+synchronizer
+synchronizers
+synchronizes
+synchronizing
+synchronous
+synchronously
+synchrony
+synchrotron
+syncopate
+syndicate
+syndicated
+syndicates
+syndication
+syndrome
+syndromes
+synergism
+synergistic
+synergy
+Synge
+synod
+synonym
+synonymous
+synonymously
+synonyms
+synopses
+synopsis
+syntactic
+syntactical
+syntactically
+syntax
+syntaxes
+synthesis
+synthesize
+synthesized
+synthesizer
+synthesizers
+synthesizes
+synthesizing
+synthetic
+synthetics
+Syracuse
+Syria
+Syrian
+Syrianize
+Syrianizes
+Syrians
+syringe
+syringes
+syrup
+syrupy
+system
+systematic
+systematically
+systematize
+systematized
+systematizes
+systematizing
+systemic
+systems
+systemwide
+Szilard
+tab
+tabernacle
+tabernacles
+table
+tableau
+tableaus
+tablecloth
+tablecloths
+tabled
+tables
+tablespoon
+tablespoonful
+tablespoonfuls
+tablespoons
+tablet
+tablets
+tabling
+taboo
+taboos
+tabs
+tabular
+tabulate
+tabulated
+tabulates
+tabulating
+tabulation
+tabulations
+tabulator
+tabulators
+tachometer
+tachometers
+tacit
+tacitly
+Tacitus
+tack
+tacked
+tacking
+tackle
+tackles
+Tacoma
+tact
+tactic
+tactics
+tactile
+Taft
+tag
+tagged
+tagging
+tags
+Tahiti
+Tahoe
+tail
+tailed
+tailing
+tailor
+tailored
+tailoring
+tailors
+tails
+taint
+tainted
+Taipei
+Taiwan
+Taiwanese
+take
+taken
+taker
+takers
+takes
+taking
+takings
+tale
+talent
+talented
+talents
+tales
+talk
+talkative
+talkatively
+talkativeness
+talked
+talker
+talkers
+talkie
+talking
+talks
+tall
+Talladega
+Tallahassee
+Tallahatchie
+Tallahoosa
+Tallchief
+taller
+tallest
+Talleyrand
+tallness
+tallow
+tally
+Talmud
+Talmudism
+Talmudization
+Talmudizations
+Talmudize
+Talmudizes
+tame
+tamed
+tamely
+tameness
+tamer
+tames
+Tamil
+taming
+Tammany
+Tammanyize
+Tammanyizes
+Tampa
+tamper
+tampered
+tampering
+tampers
+tan
+Tanaka
+Tananarive
+tandem
+tang
+Tanganyika
+tangent
+tangential
+tangents
+tangible
+tangibly
+tangle
+tangled
+tangy
+tank
+tanker
+tankers
+tanks
+Tannenbaum
+tanner
+tanners
+tantalizing
+tantalizingly
+Tantalus
+tantamount
+tantrum
+tantrums
+Tanya
+Tanzania
+Taoism
+Taoist
+Taos
+tap
+tape
+taped
+taper
+tapered
+tapering
+tapers
+tapes
+tapestries
+tapestry
+taping
+tapings
+tapped
+tapper
+tappers
+tapping
+taproot
+taproots
+taps
+tar
+Tara
+Tarbell
+tardiness
+tardy
+target
+targeted
+targeting
+targets
+tariff
+tariffs
+tarry
+Tarrytown
+tart
+Tartary
+tartly
+tartness
+Tartuffe
+Tarzan
+task
+tasked
+tasking
+tasks
+Tasmania
+Tass
+tassel
+tassels
+taste
+tasted
+tasteful
+tastefully
+tastefulness
+tasteless
+tastelessly
+taster
+tasters
+tastes
+tasting
+Tate
+tatter
+tattered
+tattoo
+tattooed
+tattoos
+tau
+taught
+taunt
+taunted
+taunter
+taunting
+taunts
+Taurus
+taut
+tautly
+tautness
+tautological
+tautologically
+tautologies
+tautology
+tavern
+taverns
+Tawney
+tawny
+tax
+taxable
+taxation
+taxed
+taxes
+taxi
+taxicab
+taxicabs
+taxied
+taxiing
+taxing
+taxis
+taxonomic
+taxonomically
+taxonomy
+taxpayer
+taxpayers
+Taylor
+Taylorize
+Taylorizes
+Taylors
+Tchaikovsky
+tea
+teach
+teachable
+teacher
+teachers
+teaches
+teaching
+teachings
+teacup
+team
+teamed
+teaming
+teams
+tear
+teared
+tearful
+tearfully
+tearing
+tears
+teas
+tease
+teased
+teases
+teasing
+teaspoon
+teaspoonful
+teaspoonfuls
+teaspoons
+technical
+technicalities
+technicality
+technically
+technician
+technicians
+Technion
+technique
+techniques
+technological
+technologically
+technologies
+technologist
+technologists
+technology
+Ted
+Teddy
+tedious
+tediously
+tediousness
+tedium
+teem
+teemed
+teeming
+teems
+teen
+teenage
+teenaged
+teenager
+teenagers
+teens
+teeth
+teethe
+teethed
+teethes
+teething
+Teflon
+Tegucigalpa
+Teheran
+Tehran
+Tektronix
+telecommunication
+telecommunications
+Teledyne
+Telefunken
+telegram
+telegrams
+telegraph
+telegraphed
+telegrapher
+telegraphers
+telegraphic
+telegraphing
+telegraphs
+Telemann
+telemetry
+teleological
+teleologically
+teleology
+telepathy
+telephone
+telephoned
+telephoner
+telephoners
+telephones
+telephonic
+telephoning
+telephony
+teleprocessing
+telescope
+telescoped
+telescopes
+telescoping
+Teletex
+Teletext
+teletype
+teletypes
+televise
+televised
+televises
+televising
+television
+televisions
+televisor
+televisors
+Telex
+tell
+teller
+tellers
+telling
+tells
+TELNET
+Telnet
+temper
+temperament
+temperamental
+temperaments
+temperance
+temperate
+temperately
+temperateness
+temperature
+temperatures
+tempered
+tempering
+tempers
+tempest
+tempestuous
+tempestuously
+template
+templates
+temple
+Templeman
+temples
+Templeton
+temporal
+temporally
+temporaries
+temporarily
+temporary
+tempt
+temptation
+temptations
+tempted
+tempter
+tempters
+tempting
+temptingly
+tempts
+ten
+tenacious
+tenaciously
+tenant
+tenants
+tend
+tended
+tendencies
+tendency
+tender
+tenderly
+tenderness
+tenders
+tending
+tends
+tenement
+tenements
+TENEX
+Tenex
+tenfold
+Tenneco
+Tennessee
+Tenney
+tennis
+Tennyson
+tenor
+tenors
+tens
+tense
+tensed
+tensely
+tenseness
+tenser
+tenses
+tensest
+tensing
+tension
+tensions
+tent
+tentacle
+tentacled
+tentacles
+tentative
+tentatively
+tented
+tenth
+tenting
+tents
+tenure
+Teresa
+term
+termed
+terminal
+terminally
+terminals
+terminate
+terminated
+terminates
+terminating
+termination
+terminations
+terminator
+terminators
+terming
+terminologies
+terminology
+terminus
+terms
+termwise
+ternary
+Terpsichore
+Terra
+terrace
+terraced
+terraces
+terrain
+terrains
+Terran
+Terre
+terrestrial
+terrestrials
+terrible
+terribly
+terrier
+terriers
+terrific
+terrified
+terrifies
+terrify
+terrifying
+territorial
+territories
+territory
+terror
+terrorism
+terrorist
+terroristic
+terrorists
+terrorize
+terrorized
+terrorizes
+terrorizing
+terrors
+tertiary
+Tess
+Tessie
+test
+testability
+testable
+testament
+testaments
+tested
+tester
+testers
+testicle
+testicles
+testified
+testifier
+testifiers
+testifies
+testify
+testifying
+testimonies
+testimony
+testing
+testings
+tests
+Teutonic
+TeX
+Tex
+Texaco
+Texan
+Texans
+Texas
+Texases
+text
+textbook
+textbooks
+textile
+textiles
+Textron
+texts
+textual
+textually
+texture
+textured
+textures
+Thai
+Thailand
+Thalia
+Thames
+than
+thank
+thanked
+thankful
+thankfully
+thankfulness
+thanking
+thankless
+thanklessly
+thanklessness
+thanks
+thanksgiving
+thanksgivings
+that
+thatch
+thatches
+thats
+thaw
+thawed
+thawing
+thaws
+Thayer
+the
+Thea
+theater
+theaters
+theatrical
+theatrically
+theatricals
+Thebes
+theft
+thefts
+their
+theirs
+Thelma
+them
+thematic
+theme
+themes
+themselves
+then
+thence
+thenceforth
+Theodore
+Theodosian
+Theodosius
+theological
+theology
+theorem
+theorems
+theoretic
+theoretical
+theoretically
+theoreticians
+theories
+theorist
+theorists
+theorization
+theorizations
+theorize
+theorized
+theorizer
+theorizers
+theorizes
+theorizing
+theory
+therapeutic
+therapies
+therapist
+therapists
+therapy
+there
+thereabouts
+thereafter
+thereby
+therefore
+therein
+thereof
+thereon
+Theresa
+thereto
+thereupon
+therewith
+thermal
+thermodynamic
+thermodynamics
+Thermofax
+thermometer
+thermometers
+thermostat
+thermostats
+these
+theses
+Theseus
+thesis
+Thessalonian
+Thessaly
+Thetis
+they
+thick
+thicken
+thickens
+thicker
+thickest
+thicket
+thickets
+thickly
+thickness
+thief
+Thiensville
+thieve
+thieves
+thieving
+thigh
+thighs
+thimble
+thimbles
+Thimbu
+thin
+thing
+things
+think
+thinkable
+thinkably
+thinker
+thinkers
+thinking
+thinks
+thinly
+thinner
+thinness
+thinnest
+third
+thirdly
+thirds
+thirst
+thirsted
+thirsts
+thirsty
+thirteen
+thirteens
+thirteenth
+thirties
+thirtieth
+thirty
+this
+thistle
+Thomas
+Thomistic
+Thompson
+Thomson
+thong
+Thor
+Thoreau
+thorn
+Thornburg
+thorns
+Thornton
+thorny
+thorough
+thoroughfare
+thoroughfares
+thoroughly
+thoroughness
+Thorpe
+Thorstein
+those
+though
+thought
+thoughtful
+thoughtfully
+thoughtfulness
+thoughtless
+thoughtlessly
+thoughtlessness
+thoughts
+thousand
+thousands
+thousandth
+Thrace
+Thracian
+thrash
+thrashed
+thrasher
+thrashes
+thrashing
+thread
+threaded
+threader
+threaders
+threading
+threads
+threat
+threaten
+threatened
+threatening
+threatens
+threats
+three
+threefold
+threes
+threescore
+threshold
+thresholds
+threw
+thrice
+thrift
+thrifty
+thrill
+thrilled
+thriller
+thrillers
+thrilling
+thrillingly
+thrills
+thrive
+thrived
+thrives
+thriving
+throat
+throated
+throats
+throb
+throbbed
+throbbing
+throbs
+throne
+Throneberry
+thrones
+throng
+throngs
+throttle
+throttled
+throttles
+throttling
+through
+throughout
+throughput
+throw
+thrower
+throwing
+thrown
+throws
+thrush
+thrust
+thruster
+thrusters
+thrusting
+thrusts
+Thuban
+thud
+thuds
+thug
+thugs
+Thule
+thumb
+thumbed
+thumbing
+thumbs
+thump
+thumped
+thumping
+thunder
+thunderbolt
+thunderbolts
+thundered
+thunderer
+thunderers
+thundering
+thunders
+thunderstorm
+thunderstorms
+Thurber
+Thurman
+Thursday
+Thursdays
+thus
+thusly
+thwart
+thwarted
+thwarting
+thwarts
+thyself
+Tiber
+Tibet
+Tibetan
+Tiburon
+tick
+ticked
+ticker
+tickers
+ticket
+tickets
+ticking
+tickle
+tickled
+tickles
+tickling
+ticklish
+ticks
+Ticonderoga
+tidal
+tidally
+tide
+tided
+tides
+tidied
+tidiness
+tiding
+tidings
+tidy
+tidying
+tie
+Tieck
+tied
+Tientsin
+tier
+tiers
+ties
+Tiffany
+tiger
+tigers
+tight
+tighten
+tightened
+tightener
+tighteners
+tightening
+tightenings
+tightens
+tighter
+tightest
+tightly
+tightness
+Tigris
+Tijuana
+tilde
+tile
+tiled
+tiles
+tiling
+till
+tillable
+tilled
+tiller
+tillers
+Tillich
+Tillie
+tilling
+tills
+tilt
+tilted
+tilting
+tilts
+Tim
+timber
+timbered
+timbering
+timbers
+time
+timed
+timeless
+timelessly
+timelessness
+timely
+timeout
+timeouts
+timer
+timers
+times
+timeshare
+timeshares
+timesharing
+timestamp
+timestamps
+timetable
+timetables
+Timex
+timid
+timidity
+timidly
+timing
+timings
+Timmy
+Timon
+Timonize
+Timonizes
+Tims
+tin
+Tina
+tincture
+tinge
+tinged
+tingle
+tingled
+tingles
+tingling
+tinier
+tiniest
+tinily
+tininess
+tinker
+tinkered
+tinkering
+tinkers
+tinkle
+tinkled
+tinkles
+tinkling
+tinnier
+tinniest
+tinnily
+tinniness
+tinny
+tins
+Tinseltown
+tint
+tinted
+tinting
+tints
+tiny
+Tioga
+tip
+Tippecanoe
+tipped
+tipper
+Tipperary
+tippers
+tipping
+tips
+tiptoe
+Tirana
+tire
+tired
+tiredly
+tireless
+tirelessly
+tirelessness
+tires
+tiresome
+tiresomely
+tiresomeness
+tiring
+tissue
+tissues
+tit
+Titan
+tithe
+tither
+tithes
+tithing
+title
+titled
+titles
+Tito
+tits
+titter
+titters
+Titus
+to
+toad
+toads
+toast
+toasted
+toaster
+toasting
+toasts
+tobacco
+Tobago
+Toby
+today
+todays
+Todd
+toe
+toes
+together
+togetherness
+toggle
+toggled
+toggles
+toggling
+Togo
+toil
+toiled
+toiler
+toilet
+toilets
+toiling
+toils
+token
+tokens
+Tokyo
+Toland
+told
+Toledo
+tolerability
+tolerable
+tolerably
+tolerance
+tolerances
+tolerant
+tolerantly
+tolerate
+tolerated
+tolerates
+tolerating
+toleration
+toll
+tolled
+Tolley
+tolls
+Tolstoy
+Tom
+tomahawk
+tomahawks
+tomato
+tomatoes
+tomb
+Tombigbee
+tombs
+Tomlinson
+Tommie
+tomography
+tomorrow
+tomorrows
+Tompkins
+ton
+tone
+toned
+toner
+tones
+tongs
+tongue
+tongued
+tongues
+Toni
+tonic
+tonics
+tonight
+toning
+Tonio
+tonnage
+tons
+tonsil
+too
+took
+tool
+tooled
+tooler
+toolers
+tooling
+tools
+Toomey
+tooth
+toothbrush
+toothbrushes
+toothpaste
+toothpick
+toothpicks
+top
+Topeka
+toper
+topic
+topical
+topically
+topics
+topmost
+topography
+topological
+topologies
+topology
+topple
+toppled
+topples
+toppling
+tops
+Topsy
+Torah
+torch
+torches
+tore
+Tories
+torment
+tormented
+tormenter
+tormenters
+tormenting
+torn
+tornado
+tornadoes
+Toronto
+torpedo
+torpedoes
+torque
+Torquemada
+Torrance
+torrent
+torrents
+torrid
+tortoise
+tortoises
+torture
+tortured
+torturer
+torturers
+tortures
+torturing
+torus
+toruses
+Tory
+Toryize
+Toryizes
+Tosca
+Toscanini
+Toshiba
+toss
+tossed
+tosses
+tossing
+total
+totaled
+totaling
+totalities
+totality
+totalled
+totaller
+totallers
+totalling
+totally
+totals
+Toto
+totter
+tottered
+tottering
+totters
+touch
+touchable
+touched
+touches
+touchier
+touchiest
+touchily
+touchiness
+touching
+touchingly
+touchy
+tough
+toughen
+tougher
+toughest
+toughly
+toughness
+Toulouse
+tour
+toured
+touring
+tourist
+tourists
+tournament
+tournaments
+tours
+tow
+toward
+towards
+towed
+towel
+toweling
+towelled
+towelling
+towels
+tower
+towered
+towering
+towers
+town
+Townley
+towns
+Townsend
+township
+townships
+Towsley
+toy
+toyed
+toying
+Toynbee
+Toyota
+toys
+trace
+traceable
+traced
+tracer
+tracers
+traces
+tracing
+tracings
+track
+tracked
+tracker
+trackers
+tracking
+tracks
+tract
+tractability
+tractable
+Tractarians
+tractive
+tractor
+tractors
+tracts
+Tracy
+trade
+traded
+trademark
+trademarks
+tradeoff
+tradeoffs
+trader
+traders
+trades
+tradesman
+trading
+tradition
+traditional
+traditionally
+traditions
+traffic
+trafficked
+trafficker
+traffickers
+trafficking
+traffics
+tragedies
+tragedy
+tragic
+tragically
+trail
+trailed
+trailer
+trailers
+trailing
+trailings
+trails
+train
+trained
+trainee
+trainees
+trainer
+trainers
+training
+trains
+trait
+traitor
+traitors
+traits
+trajectories
+trajectory
+tramp
+tramped
+tramping
+trample
+trampled
+trampler
+tramples
+trampling
+tramps
+trance
+trances
+tranquil
+tranquility
+tranquilly
+transact
+transaction
+transactions
+transatlantic
+transceive
+transceiver
+transceivers
+transcend
+transcended
+transcendent
+transcending
+transcends
+transcontinental
+transcribe
+transcribed
+transcriber
+transcribers
+transcribes
+transcribing
+transcript
+transcription
+transcriptions
+transcripts
+transfer
+transferability
+transferable
+transferal
+transferals
+transference
+transferred
+transferrer
+transferrers
+transferring
+transfers
+transfinite
+transform
+transformable
+transformation
+transformational
+transformations
+transformed
+transformer
+transformers
+transforming
+transforms
+transgress
+transgressed
+transgression
+transgressions
+transience
+transiency
+transient
+transiently
+transients
+transistor
+transistorize
+transistorized
+transistorizing
+transistors
+transit
+Transite
+transition
+transitional
+transitioned
+transitions
+transitive
+transitively
+transitiveness
+transitivity
+transitory
+translatability
+translatable
+translate
+translated
+translates
+translating
+translation
+translational
+translations
+translator
+translators
+translucent
+transmission
+transmissions
+transmit
+transmits
+transmittal
+transmitted
+transmitter
+transmitters
+transmitting
+transmogrification
+transmogrify
+transpacific
+transparencies
+transparency
+transparent
+transparently
+transpire
+transpired
+transpires
+transpiring
+transplant
+transplanted
+transplanting
+transplants
+transponder
+transponders
+transport
+transportability
+transportation
+transported
+transporter
+transporters
+transporting
+transports
+transpose
+transposed
+transposes
+transposing
+transposition
+Transputer
+Transvaal
+Transylvania
+trap
+trapezoid
+trapezoidal
+trapezoids
+trapped
+trapper
+trappers
+trapping
+trappings
+traps
+trash
+Trastevere
+trauma
+traumatic
+travail
+travel
+traveled
+traveler
+travelers
+traveling
+travelings
+travels
+traversal
+traversals
+traverse
+traversed
+traverses
+traversing
+travesties
+travesty
+Travis
+tray
+trays
+treacheries
+treacherous
+treacherously
+treachery
+tread
+treading
+treads
+Treadwell
+treason
+treasure
+treasured
+treasurer
+treasures
+treasuries
+treasuring
+treasury
+treat
+treated
+treaties
+treating
+treatise
+treatises
+treatment
+treatments
+treats
+treaty
+treble
+tree
+trees
+treetop
+treetops
+trek
+treks
+tremble
+trembled
+trembles
+trembling
+tremendous
+tremendously
+tremor
+tremors
+trench
+trencher
+trenches
+trend
+trending
+trends
+Trenton
+trespass
+trespassed
+trespasser
+trespassers
+trespasses
+tress
+tresses
+Trevelyan
+trial
+trials
+triangle
+triangles
+triangular
+triangularly
+Triangulum
+Trianon
+Triassic
+tribal
+tribe
+tribes
+tribunal
+tribunals
+tribune
+tribunes
+tributary
+tribute
+tributes
+Triceratops
+Trichinella
+trichotomy
+trick
+tricked
+trickier
+trickiest
+trickiness
+tricking
+trickle
+trickled
+trickles
+trickling
+tricks
+tricky
+tried
+trier
+triers
+tries
+trifle
+trifler
+trifles
+trifling
+trigger
+triggered
+triggering
+triggers
+trigonometric
+trigonometry
+trigram
+trigrams
+trihedral
+trilateral
+trill
+trilled
+trillion
+trillions
+trillionth
+trim
+Trimble
+trimly
+trimmed
+trimmer
+trimmest
+trimming
+trimmings
+trimness
+trims
+Trinidad
+trinket
+trinkets
+trio
+trip
+triple
+tripled
+triples
+triplet
+triplets
+Triplett
+tripling
+tripod
+trips
+Tristan
+triumph
+triumphal
+triumphant
+triumphantly
+triumphed
+triumphing
+triumphs
+trivia
+trivial
+trivialities
+triviality
+trivially
+Trobriand
+trod
+Trojan
+troll
+trolley
+trolleys
+trolls
+troop
+trooper
+troopers
+troops
+Tropez
+trophies
+trophy
+tropic
+tropical
+tropics
+trot
+trots
+Trotsky
+trouble
+troubled
+troublemaker
+troublemakers
+troubles
+troubleshoot
+troubleshooter
+troubleshooters
+troubleshooting
+troubleshoots
+troublesome
+troublesomely
+troubling
+trough
+trouser
+trousers
+trout
+Troutman
+trowel
+trowels
+Troy
+truant
+truants
+truce
+truck
+trucked
+Truckee
+trucker
+truckers
+trucking
+trucks
+Trudeau
+trudge
+trudged
+Trudy
+true
+trued
+truer
+trues
+truest
+truing
+truism
+truisms
+Trujillo
+Truk
+truly
+Truman
+Trumbull
+trump
+trumped
+trumpet
+trumpeter
+trumps
+truncate
+truncated
+truncates
+truncating
+truncation
+truncations
+trunk
+trunks
+trust
+trusted
+trustee
+trustees
+trustful
+trustfully
+trustfulness
+trusting
+trustingly
+trusts
+trustworthiness
+trustworthy
+trusty
+truth
+truthful
+truthfully
+truthfulness
+truths
+try
+trying
+Tsunematsu
+tub
+tube
+tuber
+tuberculosis
+tubers
+tubes
+tubing
+tubs
+tuck
+tucked
+Tucker
+tucking
+tucks
+Tucson
+Tudor
+Tuesday
+Tuesdays
+tuft
+tufts
+tug
+tugs
+tuition
+Tulane
+tulip
+tulips
+Tulsa
+tumble
+tumbled
+tumbler
+tumblers
+tumbles
+tumbling
+tumor
+tumors
+tumult
+tumults
+tumultuous
+tunable
+tune
+tuned
+tuner
+tuners
+tunes
+tunic
+tunics
+tuning
+Tunis
+Tunisia
+Tunisian
+tunnel
+tunneled
+tunnels
+tuple
+tuples
+turban
+turbans
+turbulence
+turbulent
+turbulently
+turf
+turgid
+turgidly
+Turin
+Turing
+turkey
+turkeys
+Turkish
+Turkize
+Turkizes
+turmoil
+turmoils
+turn
+turnable
+turnaround
+turned
+turner
+turners
+turning
+turnings
+turnip
+turnips
+turnover
+turns
+turpentine
+turquoise
+turret
+turrets
+turtle
+turtleneck
+turtles
+Tuscaloosa
+Tuscan
+Tuscanize
+Tuscanizes
+Tuscany
+Tuscarora
+Tuskegee
+Tutankhamen
+Tutankhamon
+Tutankhamun
+Tutenkhamon
+tutor
+tutored
+tutorial
+tutorials
+tutoring
+tutors
+Tuttle
+twain
+twang
+twas
+tweed
+twelfth
+twelve
+twelves
+twenties
+twentieth
+twenty
+twice
+twig
+twigs
+twilight
+twilights
+twill
+twin
+twine
+twined
+twiner
+twinkle
+twinkled
+twinkler
+twinkles
+twinkling
+twins
+twirl
+twirled
+twirler
+twirling
+twirls
+twist
+twisted
+twister
+twisters
+twisting
+twists
+twitch
+twitched
+twitching
+twitter
+twittered
+twittering
+two
+twofold
+Twombly
+twos
+Tyburn
+tying
+Tyler
+Tylerize
+Tylerizes
+Tyndall
+type
+typed
+typeout
+types
+typesetter
+typewriter
+typewriters
+typhoid
+Typhon
+typical
+typically
+typicalness
+typified
+typifies
+typify
+typifying
+typing
+typist
+typists
+typo
+typographic
+typographical
+typographically
+typography
+tyrannical
+Tyrannosaurus
+tyranny
+tyrant
+tyrants
+Tyson
+Tzeltal
+ubiquitous
+ubiquitously
+ubiquity
+Udall
+Uganda
+ugh
+uglier
+ugliest
+ugliness
+ugly
+Ukraine
+Ukrainian
+Ukrainians
+Ulan
+ulcer
+ulcers
+Ullman
+Ulster
+ultimate
+ultimately
+ultra
+ultrasonic
+ULTRIX
+Ultrix
+Ulysses
+umbrage
+umbrella
+umbrellas
+umpire
+umpires
+unabated
+unabbreviated
+unable
+unacceptability
+unacceptable
+unacceptably
+unaccountable
+unaccustomed
+unachievable
+unacknowledged
+unadulterated
+unaesthetically
+unaffected
+unaffectedly
+unaffectedness
+unaided
+unalienability
+unalienable
+unalterably
+unaltered
+unambiguous
+unambiguously
+unambitious
+unanalyzable
+unanimity
+unanimous
+unanimously
+unanswerable
+unanswered
+unanticipated
+unarmed
+unary
+unassailable
+unassigned
+unassisted
+unattainability
+unattainable
+unattended
+unattractive
+unattractively
+unauthorized
+unavailability
+unavailable
+unavoidable
+unavoidably
+unaware
+unawareness
+unawares
+unbalanced
+unbearable
+unbecoming
+unbelievable
+unbiased
+unbind
+unblock
+unblocked
+unblocking
+unblocks
+unborn
+unbound
+unbounded
+unbreakable
+unbridled
+unbroken
+unbuffered
+uncancelled
+uncanny
+uncapitalized
+uncaught
+uncertain
+uncertainly
+uncertainties
+uncertainty
+unchangeable
+unchanged
+unchanging
+unclaimed
+unclassified
+uncle
+unclean
+uncleanly
+uncleanness
+unclear
+uncleared
+uncles
+unclosed
+uncomfortable
+uncomfortably
+uncommitted
+uncommon
+uncommonly
+uncompromising
+uncomputable
+unconcerned
+unconcernedly
+unconditional
+unconditionally
+unconnected
+unconscionable
+unconscious
+unconsciously
+unconsciousness
+unconstitutional
+unconstrained
+uncontrollability
+uncontrollable
+uncontrollably
+uncontrolled
+unconventional
+unconventionally
+unconvinced
+unconvincing
+uncoordinated
+uncorrectable
+uncorrected
+uncountable
+uncountably
+uncouth
+uncover
+uncovered
+uncovering
+uncovers
+undamaged
+undaunted
+undauntedly
+undecidable
+undecided
+undeclared
+undecomposable
+undefinability
+undefined
+undeleted
+undeniable
+undeniably
+under
+underbrush
+underdone
+underestimate
+underestimated
+underestimates
+underestimating
+underestimation
+underflow
+underflowed
+underflowing
+underflows
+underfoot
+undergo
+undergoes
+undergoing
+undergone
+undergraduate
+undergraduates
+underground
+underlie
+underlies
+underline
+underlined
+underlines
+underling
+underlings
+underlining
+underlinings
+underloaded
+underlying
+undermine
+undermined
+undermines
+undermining
+underneath
+underpinning
+underpinnings
+underplay
+underplayed
+underplaying
+underplays
+underscore
+underscored
+underscores
+understand
+understandability
+understandable
+understandably
+understanding
+understandingly
+understandings
+understands
+understated
+understood
+undertake
+undertaken
+undertaker
+undertakers
+undertakes
+undertaking
+undertakings
+undertook
+underwater
+underway
+underwear
+underwent
+underworld
+underwrite
+underwriter
+underwriters
+underwrites
+underwriting
+undesirability
+undesirable
+undetectable
+undetected
+undetermined
+undeveloped
+undid
+undiminished
+undirected
+undisciplined
+undiscovered
+undisturbed
+undivided
+undo
+undocumented
+undoes
+undoing
+undoings
+undone
+undoubtedly
+undress
+undressed
+undresses
+undressing
+undue
+unduly
+uneasily
+uneasiness
+uneasy
+uneconomic
+uneconomical
+unembellished
+unemployed
+unemployment
+unencrypted
+unending
+unenlightening
+unequal
+unequaled
+unequally
+unequivocal
+unequivocally
+UNESCO
+unessential
+unevaluated
+uneven
+unevenly
+unevenness
+uneventful
+unexcused
+unexpanded
+unexpected
+unexpectedly
+unexplained
+unexplored
+unextended
+unfair
+unfairly
+unfairness
+unfaithful
+unfaithfully
+unfaithfulness
+unfamiliar
+unfamiliarity
+unfamiliarly
+unfavorable
+unfettered
+unfinished
+unfit
+unfitness
+unflagging
+unfold
+unfolded
+unfolding
+unfolds
+unforeseen
+unforgeable
+unforgiving
+unformatted
+unfortunate
+unfortunately
+unfortunates
+unfounded
+unfriendliness
+unfriendly
+unfulfilled
+ungrammatical
+ungrateful
+ungratefully
+ungratefulness
+ungrounded
+unguarded
+unguided
+unhappier
+unhappiest
+unhappily
+unhappiness
+unhappy
+unharmed
+unhealthy
+unheard
+unheeded
+Unibus
+unicorn
+unicorns
+unicycle
+unidentified
+unidirectional
+unidirectionality
+unidirectionally
+unification
+unifications
+unified
+unifier
+unifiers
+unifies
+uniform
+uniformed
+uniformity
+uniformly
+uniforms
+unify
+unifying
+unilluminating
+unimaginable
+unimpeded
+unimplemented
+unimportant
+unindented
+uninitialized
+uninsulated
+unintelligible
+unintended
+unintentional
+unintentionally
+uninteresting
+uninterestingly
+uninterpreted
+uninterrupted
+uninterruptedly
+union
+unionization
+unionize
+unionized
+unionizer
+unionizers
+unionizes
+unionizing
+unions
+UniPlus
+uniprocessor
+unique
+uniquely
+uniqueness
+Uniroyal
+UniSoft
+unison
+unit
+Unitarian
+Unitarianize
+Unitarianizes
+Unitarians
+unite
+united
+unites
+unities
+uniting
+units
+unity
+Univac
+univalve
+univalves
+universal
+universality
+universally
+universals
+universe
+universes
+universities
+university
+UNIX
+Unix
+unjust
+unjustifiable
+unjustified
+unjustly
+unkind
+unkindly
+unkindness
+unknowable
+unknowing
+unknowingly
+unknown
+unknowns
+unlabelled
+unlawful
+unlawfully
+unleash
+unleashed
+unleashes
+unleashing
+unless
+unlike
+unlikely
+unlikeness
+unlimited
+unlink
+unlinked
+unlinking
+unlinks
+unload
+unloaded
+unloading
+unloads
+unlock
+unlocked
+unlocking
+unlocks
+unlucky
+unmanageable
+unmanageably
+unmanned
+unmarked
+unmarried
+unmask
+unmasked
+unmatched
+unmentionable
+unmerciful
+unmercifully
+unmistakable
+unmistakably
+unmodified
+unmoved
+unnamed
+unnatural
+unnaturally
+unnaturalness
+unnecessarily
+unnecessary
+unneeded
+unnerve
+unnerved
+unnerves
+unnerving
+unnoticed
+unobservable
+unobserved
+unobtainable
+unoccupied
+unofficial
+unofficially
+unopened
+unordered
+unpack
+unpacked
+unpacking
+unpacks
+unpaid
+unparalleled
+unparsed
+unplanned
+unpleasant
+unpleasantly
+unpleasantness
+unplug
+unpopular
+unpopularity
+unprecedented
+unpredictable
+unpredictably
+unprescribed
+unpreserved
+unprimed
+unprofitable
+unprojected
+unprotected
+unprovability
+unprovable
+unproven
+unpublished
+unqualified
+unqualifiedly
+unquestionably
+unquestioned
+unquoted
+unravel
+unraveled
+unraveling
+unravels
+unreachable
+unreal
+unrealistic
+unrealistically
+unreasonable
+unreasonableness
+unreasonably
+unrecognizable
+unrecognized
+unregulated
+unrelated
+unreliability
+unreliable
+unreported
+unrepresentable
+unresolved
+unresponsive
+unrest
+unrestrained
+unrestricted
+unrestrictedly
+unrestrictive
+unroll
+unrolled
+unrolling
+unrolls
+unruly
+unsafe
+unsafely
+unsanitary
+unsatisfactory
+unsatisfiability
+unsatisfiable
+unsatisfied
+unsatisfying
+unscrupulous
+unseeded
+unseen
+unselected
+unselfish
+unselfishly
+unselfishness
+unsent
+unsettled
+unsettling
+unshaken
+unshared
+unsigned
+unskilled
+unslotted
+unsolvable
+unsolved
+unsophisticated
+unsound
+unspeakable
+unspecified
+unstable
+unsteadiness
+unsteady
+unstructured
+unsuccessful
+unsuccessfully
+unsuitable
+unsuited
+unsupported
+unsure
+unsurprising
+unsurprisingly
+unsynchronized
+untagged
+untapped
+untenable
+unterminated
+untested
+unthinkable
+unthinking
+untidiness
+untidy
+untie
+untied
+unties
+until
+untimely
+unto
+untold
+untouchable
+untouchables
+untouched
+untoward
+untrained
+untranslated
+untreated
+untried
+untrue
+untruthful
+untruthfulness
+untying
+unusable
+unused
+unusual
+unusually
+unvarying
+unveil
+unveiled
+unveiling
+unveils
+unwanted
+unwelcome
+unwholesome
+unwieldiness
+unwieldy
+unwilling
+unwillingly
+unwillingness
+unwind
+unwinder
+unwinders
+unwinding
+unwinds
+unwise
+unwisely
+unwiser
+unwisest
+unwitting
+unwittingly
+unworthiness
+unworthy
+unwound
+unwrap
+unwrapped
+unwrapping
+unwraps
+unwritten
+up
+upbraid
+upcoming
+update
+updated
+updater
+updates
+updating
+upgrade
+upgraded
+upgrades
+upgrading
+upheld
+uphill
+uphold
+upholder
+upholders
+upholding
+upholds
+upholster
+upholstered
+upholsterer
+upholstering
+upholsters
+upkeep
+upland
+uplands
+uplift
+uplink
+uplinks
+upload
+upon
+upper
+uppermost
+upright
+uprightly
+uprightness
+uprising
+uprisings
+uproar
+uproot
+uprooted
+uprooting
+uproots
+upset
+upsets
+upshot
+upshots
+upside
+upstairs
+upstream
+Upton
+upturn
+upturned
+upturning
+upturns
+upward
+upwards
+Urania
+Uranus
+urban
+Urbana
+urchin
+urchins
+Urdu
+urge
+urged
+urgent
+urgently
+urges
+urging
+urgings
+Uri
+urinate
+urinated
+urinates
+urinating
+urination
+urine
+Uris
+urn
+urns
+Urquhart
+Ursa
+Ursula
+Ursuline
+Uruguay
+Uruguay'a
+Uruguayan
+Uruguayans
+us
+usability
+usable
+usably
+usage
+usages
+use
+used
+useful
+usefully
+usefulness
+useless
+uselessly
+uselessness
+Usenet
+Usenix
+user
+users
+uses
+usher
+ushered
+ushering
+ushers
+using
+usual
+usually
+usurp
+usurped
+usurper
+Utah
+utensil
+utensils
+Utica
+utilities
+utility
+utilization
+utilizations
+utilize
+utilized
+utilizes
+utilizing
+utmost
+utopia
+utopian
+Utopianize
+Utopianizes
+utopians
+Utrecht
+utter
+utterance
+utterances
+uttered
+uttering
+utterly
+uttermost
+utters
+Uzi
+vacancies
+vacancy
+vacant
+vacantly
+vacate
+vacated
+vacates
+vacating
+vacation
+vacationed
+vacationer
+vacationers
+vacationing
+vacations
+vacuo
+vacuous
+vacuously
+vacuum
+vacuumed
+vacuuming
+Vaduz
+vagabond
+vagabonds
+vagaries
+vagary
+vagina
+vaginas
+vagrant
+vagrantly
+vague
+vaguely
+vagueness
+vaguer
+vaguest
+Vail
+vain
+vainly
+vale
+valence
+valences
+valentine
+valentines
+Valerie
+Valery
+vales
+valet
+valets
+Valhalla
+valiant
+valiantly
+valid
+validate
+validated
+validates
+validating
+validation
+validity
+validly
+validness
+Valkyrie
+Valletta
+valley
+valleys
+Valois
+valor
+Valparaiso
+valuable
+valuables
+valuably
+valuation
+valuations
+value
+valued
+valuer
+valuers
+values
+valuing
+valve
+valves
+vampire
+van
+Vance
+Vancement
+Vancouver
+vandalize
+vandalized
+vandalizes
+vandalizing
+Vandenberg
+Vanderbilt
+Vanderburgh
+Vanderpoel
+vane
+vanes
+Vanessa
+vanguard
+vanilla
+vanish
+vanished
+vanisher
+vanishes
+vanishing
+vanishingly
+vanities
+vanity
+vanquish
+vanquished
+vanquishes
+vanquishing
+vans
+vantage
+vapor
+vaporing
+vapors
+variability
+variable
+variableness
+variables
+variably
+Varian
+variance
+variances
+variant
+variantly
+variants
+variation
+variations
+varied
+varies
+varieties
+variety
+various
+variously
+Varitype
+Varityping
+varnish
+varnishes
+vary
+varying
+varyings
+vase
+vases
+Vasquez
+vassal
+Vassar
+vast
+vaster
+vastest
+vastly
+vastness
+vat
+Vatican
+Vaticanization
+Vaticanizations
+Vaticanize
+Vaticanizes
+vats
+vaudeville
+Vaudois
+Vaughan
+Vaughn
+vault
+vaulted
+vaulter
+vaulting
+vaults
+vaunt
+vaunted
+VAX
+VAXes
+veal
+vector
+vectorization
+vectorizing
+vectors
+Veda
+veer
+veered
+veering
+veers
+Vega
+Veganism
+Vegas
+vegetable
+vegetables
+vegetarian
+vegetarians
+vegetate
+vegetated
+vegetates
+vegetating
+vegetation
+vegetative
+vehemence
+vehement
+vehemently
+vehicle
+vehicles
+vehicular
+veil
+veiled
+veiling
+veils
+vein
+veined
+veining
+veins
+Vela
+Velasquez
+Vella
+velocities
+velocity
+velvet
+vendor
+vendors
+venerable
+veneration
+Venetian
+Veneto
+Venezuela
+Venezuelan
+vengeance
+venial
+Venice
+venison
+Venn
+venom
+venomous
+venomously
+vent
+vented
+ventilate
+ventilated
+ventilates
+ventilating
+ventilation
+ventricle
+ventricles
+vents
+Ventura
+venture
+ventured
+venturer
+venturers
+ventures
+venturing
+venturings
+Venus
+Venusian
+Venusians
+Vera
+veracity
+veranda
+verandas
+verb
+verbal
+verbalize
+verbalized
+verbalizes
+verbalizing
+verbally
+verbose
+verbs
+Verde
+Verderer
+Verdi
+verdict
+verdure
+verge
+verger
+verges
+Vergil
+verifiability
+verifiable
+verification
+verifications
+verified
+verifier
+verifiers
+verifies
+verify
+verifying
+verily
+veritable
+Verlag
+vermin
+Vermont
+Vern
+Verna
+vernacular
+Verne
+Vernon
+Verona
+Veronica
+versa
+Versailles
+Versatec
+versatile
+versatility
+verse
+versed
+verses
+versing
+version
+versions
+versus
+vertebrate
+vertebrates
+vertex
+vertical
+vertically
+verticalness
+vertices
+very
+vessel
+vessels
+vest
+vested
+vestige
+vestiges
+vestigial
+vests
+Vesuvius
+veteran
+veterans
+veterinarian
+veterinarians
+veterinary
+veto
+vetoed
+vetoer
+vetoes
+vex
+vexation
+vexed
+vexes
+vexing
+via
+viability
+viable
+viably
+vial
+vials
+vibrate
+vibrated
+vibrating
+vibration
+vibrations
+vibrator
+Vic
+vice
+viceroy
+vices
+Vichy
+vicinity
+vicious
+viciously
+viciousness
+vicissitude
+vicissitudes
+Vickers
+Vicksburg
+Vicky
+victim
+victimize
+victimized
+victimizer
+victimizers
+victimizes
+victimizing
+victims
+victor
+Victoria
+Victorian
+Victorianize
+Victorianizes
+Victorians
+victories
+victorious
+victoriously
+victors
+victory
+Victrola
+victual
+victualer
+victuals
+Vida
+Vidal
+video
+videotape
+videotapes
+Videotex
+vie
+vied
+Vienna
+Viennese
+Vientiane
+vier
+vies
+Viet
+Vietnam
+Vietnamese
+view
+viewable
+viewed
+viewer
+viewers
+viewing
+viewpoint
+viewpoints
+views
+vigilance
+vigilant
+vigilante
+vigilantes
+vigilantly
+vignette
+vignettes
+vigor
+vigorous
+vigorously
+Viking
+Vikings
+Vikram
+vile
+vilely
+vileness
+vilification
+vilifications
+vilified
+vilifies
+vilify
+vilifying
+villa
+village
+villager
+villagers
+villages
+villain
+villainous
+villainously
+villainousness
+villains
+villainy
+villas
+Vince
+Vincent
+Vinci
+vindicate
+vindicated
+vindication
+vindictive
+vindictively
+vindictiveness
+vine
+vinegar
+vines
+vineyard
+vineyards
+Vinson
+vintage
+violate
+violated
+violates
+violating
+violation
+violations
+violator
+violators
+violence
+violent
+violently
+violet
+violets
+violin
+violinist
+violinists
+violins
+viper
+vipers
+Virgil
+virgin
+Virginia
+Virginian
+Virginians
+virginity
+virgins
+Virgo
+virtual
+virtually
+virtue
+virtues
+virtuoso
+virtuosos
+virtuous
+virtuously
+virulent
+virus
+viruses
+visa
+visage
+visas
+viscount
+viscounts
+viscous
+Vishnu
+visibility
+visible
+visibly
+Visigoth
+Visigoths
+vision
+visionary
+visions
+visit
+visitation
+visitations
+visited
+visiting
+visitor
+visitors
+visits
+visor
+visors
+vista
+vistas
+visual
+visualize
+visualized
+visualizer
+visualizes
+visualizing
+visually
+vita
+vitae
+vital
+vitality
+vitally
+vitals
+Vito
+Vitus
+Vivaldi
+Vivian
+vivid
+vividly
+vividness
+vizier
+Vladimir
+Vladivostok
+vocabularies
+vocabulary
+vocal
+vocally
+vocals
+vocation
+vocational
+vocationally
+vocations
+Vogel
+vogue
+voice
+voiced
+voicer
+voicers
+voices
+voicing
+void
+voided
+voider
+voiding
+voids
+volatile
+volatilities
+volatility
+volcanic
+volcano
+volcanos
+volition
+Volkswagen
+Volkswagens
+volley
+volleyball
+volleyballs
+Volstead
+volt
+Volta
+voltage
+voltages
+Voltaire
+Volterra
+volts
+volume
+volumes
+voluntarily
+voluntary
+volunteer
+volunteered
+volunteering
+volunteers
+Volvo
+vomit
+vomited
+vomiting
+vomits
+vortex
+Voss
+vote
+voted
+voter
+voters
+votes
+voting
+votive
+vouch
+voucher
+vouchers
+vouches
+vouching
+Vought
+vow
+vowed
+vowel
+vowels
+vower
+vowing
+vows
+voyage
+voyaged
+voyager
+voyagers
+voyages
+voyaging
+voyagings
+Vreeland
+Vulcan
+Vulcanism
+vulgar
+vulgarly
+vulnerabilities
+vulnerability
+vulnerable
+vulture
+vultures
+Waals
+Wabash
+Wacke
+wacky
+Waco
+wade
+waded
+wader
+wades
+wading
+Wadsworth
+wafer
+wafers
+waffle
+waffles
+waft
+wag
+wage
+waged
+wager
+wagers
+wages
+waging
+Wagner
+Wagnerian
+Wagnerize
+Wagnerizes
+wagon
+wagoner
+wagons
+wags
+Wahl
+wail
+wailed
+wailing
+wails
+Wainwright
+waist
+waistcoat
+waistcoats
+waists
+wait
+Waite
+waited
+waiter
+waiters
+waiting
+waitress
+waitresses
+waits
+waive
+waived
+waiver
+waiverable
+waives
+waiving
+wake
+waked
+Wakefield
+waken
+wakened
+wakening
+wakes
+wakeup
+waking
+Walbridge
+Walcott
+Walden
+Waldensian
+Waldo
+Waldorf
+Waldron
+wales
+Walford
+Walgreen
+walk
+walked
+walker
+walkers
+walking
+walks
+wall
+Wallace
+walled
+Wallenstein
+Waller
+wallet
+wallets
+walling
+Wallis
+wallow
+wallowed
+wallowing
+wallows
+Walls
+walnut
+walnuts
+Walpole
+walrus
+walruses
+Walsh
+Walt
+Walter
+Walters
+Waltham
+Walton
+waltz
+waltzed
+waltzes
+waltzing
+Walworth
+wan
+wand
+wander
+wandered
+wanderer
+wanderers
+wandering
+wanderings
+wanders
+wane
+waned
+wanes
+Wang
+waning
+wanly
+Wansee
+Wansley
+want
+wanted
+wanting
+wanton
+wantonly
+wantonness
+wants
+Wapato
+Wappinger
+war
+warble
+warbled
+warbler
+warbles
+warbling
+Warburton
+ward
+warden
+wardens
+warder
+wardrobe
+wardrobes
+wards
+ware
+warehouse
+warehouses
+warehousing
+wares
+warfare
+Warfield
+warily
+wariness
+Waring
+warlike
+warm
+warmed
+warmer
+warmers
+warmest
+warming
+warmly
+warms
+warmth
+warn
+warned
+warner
+warning
+warningly
+warnings
+Warnock
+warns
+warp
+warped
+warping
+warps
+warrant
+warranted
+warranties
+warranting
+warrants
+warranty
+warred
+warring
+warrior
+warriors
+wars
+Warsaw
+warship
+warships
+wart
+wartime
+warts
+Warwick
+wary
+was
+wash
+Washburn
+washed
+washer
+washers
+washes
+washing
+washings
+Washington
+Washoe
+wasp
+wasps
+Wasserman
+waste
+wasted
+wasteful
+wastefully
+wastefulness
+wastes
+wasting
+Watanabe
+watch
+watched
+watcher
+watchers
+watches
+watchful
+watchfully
+watchfulness
+watching
+watchings
+watchman
+watchword
+watchwords
+water
+Waterbury
+watered
+waterfall
+waterfalls
+Watergate
+Waterhouse
+watering
+waterings
+Waterloo
+Waterman
+waterproof
+waterproofing
+Waters
+Watertown
+waterway
+waterways
+watery
+Watkins
+Watson
+Wattenberg
+Watterson
+Watts
+Waukesha
+Waunona
+Waupaca
+Waupun
+Wausau
+Wauwatosa
+wave
+waved
+waveform
+waveforms
+wavefront
+wavefronts
+waveguides
+Waveland
+wavelength
+wavelengths
+waver
+wavers
+waves
+waving
+wax
+waxed
+waxen
+waxer
+waxers
+waxes
+waxing
+waxy
+way
+Wayne
+Waynesboro
+ways
+wayside
+wayward
+we
+weak
+weaken
+weakened
+weakening
+weakens
+weaker
+weakest
+weakly
+weakness
+weaknesses
+wealth
+wealthiest
+wealths
+wealthy
+wean
+weaned
+weaning
+weapon
+weapons
+wear
+wearable
+wearer
+wearied
+wearier
+weariest
+wearily
+weariness
+wearing
+wearisome
+wearisomely
+wears
+weary
+wearying
+weasel
+weasels
+weather
+weathercock
+weathercocks
+weathered
+Weatherford
+weathering
+weathers
+weave
+weaver
+weaves
+weaving
+web
+Webb
+Webber
+webs
+Webster
+Websterville
+wedded
+wedding
+weddings
+wedge
+wedged
+wedges
+wedging
+wedlock
+Wednesday
+Wednesdays
+weds
+wee
+weed
+weeds
+week
+weekend
+weekends
+weekly
+Weeks
+weep
+weeper
+weeping
+weeps
+Wehr
+Wei
+Weibull
+Weider
+Weidman
+Weierstrass
+weigh
+weighed
+weighing
+weighings
+weighs
+weight
+weighted
+weighting
+weights
+weighty
+Weinberg
+Weiner
+Weinstein
+weird
+weirdly
+Weisenheimer
+Weiss
+Weissman
+Weissmuller
+Welch
+Welcher
+Welches
+welcome
+welcomed
+welcomes
+welcoming
+weld
+welded
+welder
+welding
+Weldon
+welds
+Weldwood
+welfare
+well
+welled
+Weller
+Welles
+Wellesley
+welling
+Wellington
+Wellman
+Wells
+Wellsville
+Welmers
+welsh
+Welton
+wench
+wenches
+Wendell
+Wendy
+went
+Wentworth
+wept
+were
+Werner
+Werther
+Wesley
+Wesleyan
+Wesson
+west
+westbound
+Westbrook
+Westchester
+western
+westerner
+westerners
+Westfield
+Westhampton
+Westinghouse
+Westminster
+Westmore
+Weston
+Westphalia
+Westport
+westward
+westwards
+Westwood
+wet
+wetly
+wetness
+wets
+wetted
+wetter
+wettest
+wetting
+Weyerhauser
+whack
+whacked
+whacking
+whacks
+whale
+Whalen
+whaler
+whales
+whaling
+wharf
+Wharton
+wharves
+what
+whatever
+Whatley
+whatsoever
+wheat
+wheaten
+Wheatland
+Wheaton
+Wheatstone
+wheel
+wheeled
+wheeler
+wheelers
+wheeling
+wheelings
+Wheelock
+wheels
+Whelan
+Wheller
+whelp
+when
+whence
+whenever
+where
+whereabouts
+whereas
+whereby
+wherein
+whereupon
+wherever
+whether
+which
+whichever
+while
+whim
+whimper
+whimpered
+whimpering
+whimpers
+whims
+whimsical
+whimsically
+whimsies
+whimsy
+whine
+whined
+whines
+whining
+whip
+Whippany
+whipped
+whipper
+whippers
+whipping
+whippings
+Whipple
+whips
+whirl
+whirled
+whirling
+whirlpool
+whirlpools
+whirls
+whirlwind
+whirr
+whirring
+whisk
+whisked
+whisker
+whiskers
+whiskey
+whisking
+whisks
+whisper
+whispered
+whispering
+whisperings
+whispers
+whistle
+whistled
+whistler
+whistlers
+whistles
+whistling
+whit
+Whitaker
+Whitcomb
+white
+Whitehall
+Whitehorse
+Whiteleaf
+Whiteley
+whitely
+whiten
+whitened
+whitener
+whiteners
+whiteness
+whitening
+whitens
+whiter
+whites
+whitespace
+whitest
+whitewash
+whitewashed
+Whitewater
+Whitfield
+whiting
+Whitlock
+Whitman
+Whitmanize
+Whitmanizes
+Whitney
+Whittaker
+Whittier
+whittle
+whittled
+whittles
+whittling
+whiz
+whizzed
+whizzes
+whizzing
+who
+whoever
+whole
+wholehearted
+wholeheartedly
+wholeness
+wholes
+wholesale
+wholesaler
+wholesalers
+wholesome
+wholesomeness
+wholly
+whom
+whomever
+whoop
+whooped
+whooping
+whoops
+whore
+whores
+whorl
+whorls
+whose
+why
+Wichita
+wick
+wicked
+wickedly
+wickedness
+wicker
+wicks
+wide
+wideband
+widely
+widen
+widened
+widener
+widening
+widens
+wider
+widespread
+widest
+widget
+widow
+widowed
+widower
+widowers
+widows
+width
+widths
+Wieland
+wield
+wielded
+wielder
+wielding
+wields
+Wier
+wife
+wifely
+wig
+Wiggins
+Wightman
+wigs
+wigwam
+Wilbur
+Wilcox
+wild
+wildcat
+wildcats
+wilder
+wilderness
+wildest
+wildly
+wildness
+wile
+wiles
+Wiley
+Wilfred
+Wilhelm
+Wilhelmina
+wiliness
+Wilkes
+Wilkie
+Wilkins
+Wilkinson
+will
+Willa
+Willamette
+Willard
+Willcox
+willed
+Willem
+willful
+willfully
+William
+Williams
+Williamsburg
+Williamson
+Willie
+Willied
+Willies
+willing
+willingly
+willingness
+Willis
+Willisson
+Willoughby
+willow
+willows
+Wills
+Willy
+Wilma
+Wilmette
+Wilmington
+Wilshire
+Wilson
+Wilsonian
+wilt
+wilted
+wilting
+wilts
+Wiltshire
+wily
+win
+wince
+winced
+winces
+Winchell
+Winchester
+wincing
+wind
+winded
+winder
+winders
+winding
+windmill
+windmills
+window
+windows
+winds
+Windsor
+windy
+wine
+wined
+Winehead
+winer
+winers
+wines
+Winfield
+wing
+winged
+winging
+wings
+Winifred
+wining
+wink
+winked
+winker
+winking
+winks
+Winnebago
+winner
+winners
+Winnetka
+Winnie
+winning
+winningly
+winnings
+Winnipeg
+Winnipesaukee
+Winograd
+Winooski
+wins
+Winsborough
+Winsett
+Winslow
+Winston
+winter
+wintered
+wintering
+Winters
+Winthrop
+wintry
+wipe
+wiped
+wiper
+wipers
+wipes
+wiping
+wire
+wired
+wireless
+wires
+wiretap
+wiretappers
+wiretapping
+wiretaps
+wiriness
+wiring
+wiry
+Wisconsin
+wisdom
+wisdoms
+wise
+wised
+wisely
+Wisenheimer
+wiser
+wisest
+wish
+wished
+wisher
+wishers
+wishes
+wishful
+wishing
+wisp
+wisps
+wistful
+wistfully
+wistfulness
+wit
+witch
+witchcraft
+witches
+witching
+with
+withal
+withdraw
+withdrawal
+withdrawals
+withdrawing
+withdrawn
+withdraws
+withdrew
+wither
+withers
+Witherspoon
+withheld
+withhold
+withholder
+withholders
+withholding
+withholdings
+withholds
+within
+without
+withstand
+withstanding
+withstands
+withstood
+witness
+witnessed
+witnesses
+witnessing
+wits
+Witt
+Wittgenstein
+witty
+wives
+wizard
+wizards
+woe
+woeful
+woefully
+woke
+Wolcott
+wolf
+Wolfe
+Wolff
+Wolfgang
+Wolverton
+wolves
+woman
+womanhood
+womanly
+womb
+wombs
+women
+won
+wonder
+wondered
+wonderful
+wonderfully
+wonderfulness
+wondering
+wonderingly
+wonderment
+wonders
+wondrous
+wondrously
+Wong
+wont
+wonted
+woo
+wood
+Woodard
+Woodberry
+Woodbury
+woodchuck
+woodchucks
+woodcock
+woodcocks
+wooded
+wooden
+woodenly
+woodenness
+woodland
+Woodlawn
+woodman
+woodpecker
+woodpeckers
+Woodrow
+Woods
+Woodstock
+Woodward
+Woodwards
+woodwork
+woodworking
+woody
+wooed
+wooer
+woof
+woofed
+woofer
+woofers
+woofing
+woofs
+wooing
+wool
+woolen
+woolly
+wools
+Woolworth
+Woonsocket
+woos
+Wooster
+Worcester
+Worcestershire
+word
+worded
+wordily
+wordiness
+wording
+words
+Wordsworth
+wordy
+wore
+work
+workable
+workably
+workbench
+workbenches
+workbook
+workbooks
+worked
+worker
+workers
+workhorse
+workhorses
+working
+workingman
+workings
+workload
+workman
+workmanship
+workmen
+works
+workshop
+workshops
+workspace
+workstation
+workstations
+world
+worldliness
+worldly
+worlds
+worldwide
+worm
+wormed
+worming
+worms
+worn
+worried
+worrier
+worriers
+worries
+worrisome
+worry
+worrying
+worryingly
+worse
+worship
+worshiped
+worshiper
+worshipful
+worshiping
+worships
+worst
+worsted
+worth
+worthiest
+worthiness
+Worthington
+worthless
+worthlessness
+worths
+worthwhile
+worthwhileness
+worthy
+Wotan
+would
+wound
+wounded
+wounding
+wounds
+wove
+woven
+wrangle
+wrangled
+wrangler
+wrap
+wraparound
+wrapped
+wrapper
+wrappers
+wrapping
+wrappings
+wraps
+wrath
+wreak
+wreaks
+wreath
+wreathed
+wreathes
+wreck
+wreckage
+wrecked
+wrecker
+wreckers
+wrecking
+wrecks
+wren
+wrench
+wrenched
+wrenches
+wrenching
+wrens
+wrest
+wrestle
+wrestler
+wrestles
+wrestling
+wrestlings
+wretch
+wretched
+wretchedness
+wretches
+wriggle
+wriggled
+wriggler
+wriggles
+wriggling
+Wrigley
+wring
+wringer
+wrings
+wrinkle
+wrinkled
+wrinkles
+wrist
+wrists
+wristwatch
+wristwatches
+writ
+writable
+write
+writer
+writers
+writes
+writhe
+writhed
+writhes
+writhing
+writing
+writings
+writs
+written
+wrong
+wronged
+wronging
+wrongly
+wrongs
+Wronskian
+wrote
+wrought
+wrung
+Wu
+Wuhan
+Wyandotte
+Wyatt
+Wyeth
+Wylie
+Wyman
+Wyner
+Wynn
+Wyoming
+Xanthus
+Xavier
+Xebec
+Xenakis
+Xenia
+Xenix
+xenon
+xenophobia
+xerography
+Xerox
+Xeroxed
+Xeroxes
+Xeroxing
+Xerxes
+Xhosa
+xylene
+xylophone
+Yagi
+Yakima
+Yale
+Yalies
+Yalta
+Yamaha
+yank
+yanked
+Yankee
+Yankees
+yanking
+yanks
+Yankton
+Yaounde
+Yaqui
+yard
+yards
+yardstick
+yardsticks
+Yarmouth
+yarn
+yarns
+Yates
+Yaunde
+yawn
+yawner
+yawning
+yea
+Yeager
+year
+yearly
+yearn
+yearned
+yearning
+yearnings
+years
+yeas
+yeast
+yeasts
+Yeats
+yell
+yelled
+yeller
+yelling
+yellow
+yellowed
+yellower
+yellowest
+yellowing
+yellowish
+Yellowknife
+yellowness
+yellows
+Yellowstone
+yelp
+yelped
+yelping
+yelps
+Yemen
+Yentl
+yeoman
+yeomen
+Yerkes
+yes
+yesterday
+yesterdays
+yet
+Yiddish
+yield
+yielded
+yielding
+yields
+Yoder
+yoke
+yokes
+Yoknapatawpha
+Yokohama
+Yokuts
+yon
+yonder
+Yonkers
+Yorick
+York
+Yorker
+Yorkers
+Yorkshire
+Yorktown
+Yosemite
+Yost
+you
+young
+younger
+youngest
+youngly
+youngster
+youngsters
+Youngstown
+your
+yours
+yourself
+yourselves
+youth
+youthes
+youthful
+youthfully
+youthfulness
+Ypsilanti
+Yuba
+Yucatan
+Yugoslav
+Yugoslavia
+Yugoslavian
+Yugoslavians
+Yuh
+Yuki
+Yukon
+Yuri
+Yves
+Yvette
+Zachary
+Zagreb
+Zaire
+Zambia
+Zan
+Zanzibar
+zeal
+Zealand
+zealous
+zealously
+zealousness
+zebra
+zebras
+Zeffirelli
+Zeiss
+Zellerbach
+Zen
+zenith
+Zennist
+zero
+zeroed
+zeroes
+zeroing
+zeros
+zeroth
+zest
+Zeus
+Ziegfeld
+Ziegfelds
+Ziegler
+Ziggy
+zigzag
+zillions
+Zimmerman
+zinc
+Zion
+Zionism
+Zionist
+Zionists
+Zions
+zodiac
+Zoe
+Zomba
+zonal
+zonally
+zone
+zoned
+zones
+zoning
+zoo
+zoological
+zoologically
+zoom
+zooms
+zoos
+Zorn
+Zoroaster
+Zoroastrian
+Zulu
+Zulus
+Zurich
diff --git a/etc/dict/words.de b/etc/dict/words.de
new file mode 100644
index 0000000..99e911a
--- a/dev/null
+++ b/etc/dict/words.de
@@ -0,0 +1,229027 @@
+ADAC
+ADSL
+AEG
+AG
+AGP
+AI
+ANSI
+AOL
+ARD
+ASCII
+ASTA
+AT
+ATM
+Aachen
+Aal
+Aale
+Aalen
+Aales
+Aals
+Aas
+Aases
+Aasgeier
+Aasgeiern
+Aasgeiers
+Abakus
+Abarbeitung
+Abarbeitungsgeschwindigkeit
+Abarbeitungsgeschwindigkeiten
+Abarbeitungsreihenfolge
+Abarbeitungsreihenfolgen
+Abart
+Abarten
+Abb
+Abbau
+Abbaugerät
+Abbaugeräusche
+Abbauleistung
+Abbauleitzentrale
+Abbauleitzentralen
+Abbaumaschine
+Abbaumaschinen
+Abbaumaterial
+Abbaumaterials
+Abbaumenge
+Abbaumengen
+Abbaus
+Abberufung
+Abberufungen
+Abbestellung
+Abbestellungen
+Abbild
+Abbilder
+Abbildern
+Abbildes
+Abbildung
+Abbildungen
+Abbitte
+Abbitten
+Abblendlicht
+Abblendlichter
+Abblendlichtern
+Abblendlichtes
+Abblendlichts
+Abbruch
+Abbruchbedingung
+Abbruchbedingungen
+Abbruchs
+Abbrände
+Abbränden
+Abbuchung
+Abbuchungen
+Abdankung
+Abdankungen
+Abdecker
+Abdeckern
+Abdeckers
+Abdeckkappe
+Abdeckkappen
+Abdeckklappe
+Abdeckklappen
+Abdeckplane
+Abdeckplanen
+Abdeckplatte
+Abdeckplatten
+Abdeckung
+Abdeckungen
+Abdichtfuge
+Abdichtfugen
+Abdichtung
+Abdichtungen
+Abdrift
+Abdrosslung
+Abdrosslungen
+Abdruck
+Abdruckes
+Abdrucks
+Abend
+Abendbrot
+Abende
+Abenden
+Abendessen
+Abendessens
+Abendland
+Abendlandes
+Abendlands
+Abendmahl
+Abendmahls
+Abends
+Abenteuer
+Abenteuerlust
+Abenteuern
+Abenteuers
+Abenteurer
+Abenteurern
+Abenteurers
+Aberglaube
+Aberglauben
+Aberkennung
+Aberkennungen
+Aberwitz
+Abessinien
+Abeter
+Abeters
+Abfahrt
+Abfahrten
+Abfall
+Abfalleimer
+Abfalleimern
+Abfallkurve
+Abfallkurven
+Abfalls
+Abfassung
+Abfassungen
+Abfertigung
+Abfertigungen
+Abfindung
+Abfindungen
+Abflachung
+Abflachungen
+Abflug
+Abflugs
+Abfluss
+Abflusses
+Abflusskanal
+Abflusskanals
+Abflusskanäle
+Abflusskanälen
+Abflussrohr
+Abflussrohre
+Abflussrohren
+Abflussrohrs
+Abflussverstopfung
+Abflussverstopfungen
+Abflüge
+Abflügen
+Abflüsse
+Abflüssen
+Abfolge
+Abfolgen
+Abfragesprache
+Abfragesprachen
+Abfuhr
+Abfuhren
+Abfälle
+Abfällen
+Abfördermenge
+Abfördermengen
+Abführung
+Abgabe
+Abgaben
+Abgang
+Abgangs
+Abgangszeugnis
+Abgangszeugnisse
+Abgangszeugnissen
+Abgangszeugnisses
+Abgas
+Abgase
+Abgasen
+Abgases
+Abgeltung
+Abgeordnete
+Abgeordneten
+Abgeordneter
+Abgeschiedenheit
+Abgeschlossenheit
+Abgespanntheit
+Abglanz
+Abgleich
+Abgott
+Abgotts
+Abgrenzung
+Abgrenzungen
+Abgriff
+Abgriffen
+Abgriffspannung
+Abgriffspannungen
+Abgrund
+Abgrundes
+Abgrunds
+Abgründe
+Abgründen
+Abguss
+Abgusses
+Abgänge
+Abgängen
+Abgötter
+Abgöttern
+Abgüsse
+Abgüssen
+Abhandlung
+Abhandlungen
+Abhang
+Abhangs
+Abhebung
+Abhebungen
+Abhilfe
+Abhilfen
+Abholung
+Abholungen
+Abhängigkeit
+Abhängigkeiten
+Abhängigkeitsverhältnis
+Abhängigkeitsverhältnisse
+Abhängigkeitsverhältnissen
+Abhängigkeitsverhältnisses
+Abhärtung
+Abitur
+Abiturient
+Abiturienten
+Abiturientin
+Abiturientinnen
+Abiturs
+Abk
+Abkapselung
+Abkehr
+Abklingverhalten
+Abklärung
+Abklärungen
+Abkommen
+Abkommens
+Abkunft
+Abkömmling
+Abkömmlinge
+Abkömmlingen
+Abkömmlings
+Abkühlung
+Abkühlungen
+Abkürzung
+Abkürzungen
+Ablader
+Abladern
+Abladers
+Abladung
+Abladungen
+Ablage
+Ablagen
+Ablagerung
+Ablagerungen
+Ablass
+Ablassbrief
+Ablassbriefe
+Ablassbriefen
+Ablassbriefes
+Ablassbriefs
+Ablasses
+Ablasshandel
+Ablasshandels
+Ablativ
+Ablativs
+Ablauf
+Ablaufdiagramm
+Ablaufdiagramme
+Ablaufdiagrammen
+Ablaufdiagramms
+Ablaufes
+Ablaufqqfolge
+Ablaufqqfolgen
+Ablaufs
+Ablaufsteuerung
+Ablaufsteuerungen
+Ablaufsteuerwerk
+Ablaufsteuerwerks
+Ablaut
+Ablaute
+Ablauten
+Ablautes
+Ablauts
+Ableger
+Ablegern
+Ablegers
+Ablehnung
+Ablehnungen
+Ableistung
+Ableistungen
+Ableitung
+Ableitungen
+Ableitungsregel
+Ableitungsregeln
+Ablenkung
+Ablenkungen
+Ablesung
+Ablesungen
+Ablichtung
+Ablichtungen
+Ablieferung
+Ablieferungen
+Abläufe
+Abläufen
+Ablösesumme
+Ablösesummen
+Ablösung
+Ablösungen
+Abmachung
+Abmachungen
+Abmagerung
+Abmagerungen
+Abmahner
+Abmahnern
+Abmahners
+Abmarsch
+Abmarschs
+Abmeldung
+Abmeldungen
+Abmessung
+Abmessungen
+Abmilderung
+Abmilderungen
+Abmärsche
+Abmärschen
+Abnahme
+Abnahmemenge
+Abnahmemengen
+Abnehmer
+Abnehmern
+Abnehmers
+Abneigung
+Abneigungen
+Abnutzung
+Abnutzungen
+Abnützung
+Abnützungen
+Abo
+Abonnement
+Abonnements
+Abonnent
+Abonnenten
+Abordnung
+Abordnungen
+Abort
+Aborte
+Aborten
+Abortes
+Aborts
+Abortus
+Abplattung
+Abplattungen
+Abprall
+Abpralle
+Abpralles
+Abpralls
+Abraum
+Abraums
+Abrechnung
+Abrechnungen
+Abrede
+Abreden
+Abreibung
+Abreibungen
+Abrieb
+Abriegelung
+Abriegelungen
+Abriss
+Abrissbirne
+Abrissbirnen
+Abrisse
+Abrissen
+Abrisses
+Abruf
+Abrufs
+Abrufung
+Abrufungen
+Abrundung
+Abrundungen
+Abrüstung
+Abrüstungen
+Absatz
+Absatzeinbuße
+Absatzeinbußen
+Absatzes
+Absatzmarkt
+Absatzmarktes
+Absatzmarkts
+Absatzmärkte
+Absatzmärkten
+Abschaffung
+Abschaffungen
+Abschaltrelais
+Abschaltung
+Abschaltungen
+Abschaum
+Abschaumes
+Abschaums
+Abscheu
+Abscheulichkeit
+Abscheulichkeiten
+Abscheus
+Abschiebung
+Abschiebungen
+Abschied
+Abschiede
+Abschieden
+Abschiedes
+Abschieds
+Abschirmeffekt
+Abschirmeffekte
+Abschirmeffekten
+Abschirmeffekts
+Abschirmung
+Abschirmungen
+Abschirmzuleitung
+Abschirmzuleitungen
+Abschlagszahlung
+Abschlagszahlungen
+Abschluss
+Abschlussball
+Abschlussballs
+Abschlussbericht
+Abschlussberichte
+Abschlussberichten
+Abschlussberichtes
+Abschlussberichts
+Abschlussbesprechung
+Abschlussbesprechungen
+Abschlussbälle
+Abschlussbällen
+Abschlusses
+Abschlussexamina
+Abschlussfeier
+Abschlussfeiern
+Abschlussgespräch
+Abschlussgespräche
+Abschlussgesprächen
+Abschlussgespräches
+Abschlussgesprächs
+Abschlussprotokoll
+Abschlussprotokolle
+Abschlussprotokollen
+Abschlussprotokolls
+Abschlussrechnung
+Abschlussspiel
+Abschlussspiele
+Abschlussspielen
+Abschlussspiels
+Abschlussstecker
+Abschlusssteckern
+Abschlusssteckers
+Abschlusswiderstand
+Abschlusswiderstands
+Abschlüsse
+Abschlüssen
+Abschmiernippel
+Abschmiernippeln
+Abschmiernippels
+Abschnitt
+Abschnitte
+Abschnitten
+Abschnittes
+Abschnitts
+Abschnürung
+Abschnürungen
+Abschottung
+Abschottungen
+Abschottzylinder
+Abschottzylindern
+Abschottzylinders
+Abschreckung
+Abschreckungen
+Abschreiber
+Abschreibern
+Abschreibers
+Abschreibung
+Abschreibungen
+Abschrift
+Abschriften
+Abschuss
+Abschusses
+Abschussliste
+Abschweifung
+Abschweifungen
+Abschwächung
+Abschwächungen
+Abschätzung
+Abschätzungen
+Abschöpfung
+Abschöpfungen
+Abschürfung
+Abschürfungen
+Abschüsse
+Abschüssen
+Absender
+Absendern
+Absenders
+Absendung
+Absendungen
+Absenkung
+Absenkungen
+Absetzbewegung
+Absetzbewegungen
+Absetzung
+Absetzungen
+Absicherung
+Absicherungen
+Absicht
+Absichten
+Absichtlichkeit
+Absolutheitsanspruch
+Absolutismus
+Absolvent
+Absolventen
+Absolventin
+Absolventinnen
+Absolvierung
+Absolvierungen
+Absonderung
+Absonderungen
+Absorption
+Absorptionen
+Abspannwerke
+Abspannwerken
+Absperrmaßnahme
+Absperrmaßnahmen
+Absperrung
+Absperrungen
+Absprache
+Absprung
+Absprungs
+Absprünge
+Absprüngen
+Abstammung
+Abstammungen
+Abstand
+Abstands
+Abstecher
+Abstechern
+Abstechers
+Abstellfläche
+Abstellflächen
+Abstellgleis
+Abstellgleise
+Abstellgleisen
+Abstellgleises
+Abstellkammer
+Abstellkammern
+Abstellraum
+Abstellraumes
+Abstellraums
+Abstellräume
+Abstellräumen
+Abstellung
+Abstellungen
+Abstellzeit
+Abstellzeiten
+Abstieg
+Abstiege
+Abstiegen
+Abstiegs
+Abstimmung
+Abstimmungen
+Abstimmungsbedarf
+Abstimmungsergebnis
+Abstimmungsergebnisse
+Abstimmungsergebnissen
+Abstimmungsergebnisses
+Abstinenz
+Abstoß
+Abstoßes
+Abstoßung
+Abstoßungen
+Abstrahlcharakteristik
+Abstrahlcharakteristiken
+Abstrahlwinkel
+Abstrahlwinkeln
+Abstrahlwinkels
+Abstraktion
+Abstraktionen
+Abstraktionsebene
+Abstraktionsebenen
+Abstraktionsfunktion
+Abstraktionsfunktionen
+Abstraktionsniveau
+Abstraktionsniveaus
+Abstreifer
+Abstreifern
+Abstreifers
+Abstrich
+Abstriche
+Abstrichen
+Abstrichs
+Abstufung
+Abstufungen
+Absturz
+Absturzes
+Abstände
+Abständen
+Abstöße
+Abstößen
+Abstützung
+Abstützungen
+Absud
+Absude
+Absuden
+Absudes
+Absurdität
+Absurditäten
+Abszess
+Abszesse
+Abszessen
+Abszesses
+Absätze
+Absätzen
+Abt
+Abtastung
+Abtastungen
+Abtei
+Abteien
+Abteil
+Abteile
+Abteilen
+Abteils
+Abteilung
+Abteilungen
+Abteilungsleiter
+Abteilungsleiterin
+Abteilungsleiterinnen
+Abteilungsleitern
+Abteilungsleiters
+Abtes
+Abtransport
+Abtreibung
+Abtreibungen
+Abtrennung
+Abtrennungen
+Abtreter
+Abtretern
+Abtretung
+Abtretungen
+Abtrieb
+Abtriebs
+Abtritt
+Abtritte
+Abtritten
+Abtritts
+Abtrünnigkeit
+Aburteilung
+Aburteilungen
+Abwanderung
+Abwanderungen
+Abwandlung
+Abwandlungen
+Abwasch
+Abwasser
+Abwassers
+Abwassertechnik
+Abwechselung
+Abwechselungen
+Abwechslung
+Abwechslungen
+Abweg
+Abwege
+Abwegen
+Abwegs
+Abwehr
+Abweichung
+Abweichungen
+Abweisung
+Abweisungen
+Abwendung
+Abwendungen
+Abwerbung
+Abwerbungen
+Abwertung
+Abwertungen
+Abwesenheit
+Abwickelung
+Abwickelungen
+Abwicklung
+Abwicklungen
+Abwurf
+Abwurfes
+Abwurfs
+Abwägung
+Abwägungen
+Abwälzung
+Abwälzungen
+Abwärtsbewegung
+Abwärtsbewegungen
+Abwärtstrend
+Abwärtstrends
+Abwässer
+Abwässern
+Abwürfe
+Abwürfen
+Abzahlung
+Abzahlungen
+Abzehrung
+Abzehrungen
+Abzeichen
+Abzeichens
+Abziehbild
+Abziehbilder
+Abziehbildern
+Abziehbildes
+Abziehbilds
+Abzug
+Abzuges
+Abzugs
+Abzugsfähigkeit
+Abzweigung
+Abzweigungen
+Abzüge
+Abzügen
+Abänderung
+Abänderungen
+Access
+Accessoire
+Accessoires
+Aceton
+Acetons
+Achilles
+Achillesferse
+Achillesfersen
+Achse
+Achsel
+Achselhöhle
+Achselhöhlen
+Achseln
+Achselzucken
+Achselzuckens
+Achsen
+Achtbarkeit
+Achteck
+Achtecke
+Achtecken
+Achteckes
+Achtecks
+Achter
+Achterbahn
+Achterbahnen
+Achtern
+Achters
+Achtklässler
+Achtklässlerin
+Achtklässlerinnen
+Achtklässlern
+Achtklässlers
+Achtlosigkeit
+Achtsamkeit
+Achtsamkeiten
+Achtstundentag
+Achtstundentagen
+Achtung
+Achtzigerjahre
+Achtzigerjahren
+Acidum
+Acker
+Ackermann
+Ackermanns
+Ackers
+Ada
+Adam
+Adamek
+Adameks
+Adams
+Adamsapfel
+Adapter
+Adaptergehäuse
+Adaptergehäusen
+Adaptergehäuses
+Adapterkabel
+Adapterkabeln
+Adapterkabels
+Adapterkarte
+Adapterkarten
+Adapterleiste
+Adapterleisten
+Adaptermodul
+Adaptermoduln
+Adaptermoduls
+Adaptern
+Adapterplatine
+Adapterplatinen
+Adapters
+Adaptierung
+Adaptierungen
+Adaption
+Adaptionen
+Adaptionsplatine
+Addition
+Additionen
+Additionsfunktion
+Additionsfunktionen
+Additiv
+Additive
+Additiven
+Additivs
+Adebar
+Adel
+Adels
+Adelung
+Adelungen
+Adenauer
+Adenauers
+Ader
+Aderlass
+Aderlasse
+Aderlasses
+Adern
+Adhäsionsbruch
+Adidas
+Adjektiv
+Adjektive
+Adjektiven
+Adjektivs
+Adjutant
+Adjutanten
+Adler
+Adlern
+Administration
+Administrationen
+Administrator
+Administratoren
+Administrators
+Admiral
+Admirale
+Admiralen
+Admiralität
+Admiralitäten
+Admirals
+Adolf
+Adolfs
+Adolph
+Adolphs
+Adonis
+Adoption
+Adoptionen
+Adorno
+Adornos
+Adrenalin
+Adrenalins
+Adressat
+Adressate
+Adressaten
+Adressberechnung
+Adressberechnungen
+Adressbit
+Adressbits
+Adressbuch
+Adressbuches
+Adressbuchs
+Adressbus
+Adressbusse
+Adressbussen
+Adressbusses
+Adressbücher
+Adressbüchern
+Adressdatei
+Adressdateien
+Adresse
+Adressen
+Adressenangabe
+Adressenangaben
+Adressengenerierung
+Adressenliste
+Adressenlisten
+Adresserweiterung
+Adresserweiterungen
+Adressgenerator
+Adressgeneratoren
+Adressgenerierung
+Adressierung
+Adressierungsart
+Adressierungsarten
+Adresskarte
+Adresskarten
+Adressliste
+Adresslisten
+Adressoffset
+Adressoffsets
+Adressraum
+Adressraumerweiterung
+Adressraumes
+Adressraums
+Adressregister
+Adressregisters
+Adressräume
+Adressräumen
+Adressverwaltung
+Adria
+Adrianopel
+Advent
+Adverb
+Adverbien
+Adverbs
+Advokat
+Advokaten
+Adäquatheit
+Aerodynamik
+Aerodynamiker
+Aerodynamikern
+Aeronautik
+Aerostatik
+AfA
+Affe
+Affekt
+Affekte
+Affekten
+Affektes
+Affektiertheit
+Affektiertheiten
+Affektion
+Affektionen
+Affektivität
+Affekts
+Affen
+Affentheater
+Affentheaters
+Affinität
+Affinitäten
+Affront
+Affronts
+Affäre
+Affären
+Afghane
+Afghanen
+Afghanin
+Afghaninnen
+Afghanistan
+Afrika
+Afrikaner
+Afrikanerin
+Afrikanerinnen
+Afrikanern
+Afrikaners
+Afrolook
+After
+Afters
+Agadir
+Agent
+Agenten
+Agentin
+Agentinnen
+Agentur
+Agenturen
+Agenturmeldung
+Agenturmeldungen
+Agfa
+Aggregat
+Aggregate
+Aggregaten
+Aggregates
+Aggregatzustand
+Aggregatzustandes
+Aggregatzustands
+Aggregatzustände
+Aggregatzuständen
+Aggression
+Aggressionen
+Aggressivität
+Aggressivitäten
+Aggressor
+Aggressoren
+Agio
+Agios
+Agitation
+Agitationen
+Agitator
+Agitatoren
+Agitators
+Agonie
+Ahle
+Ahlen
+Ahndung
+Ahndungen
+Ahnfrau
+Ahnfrauen
+Ahnherr
+Ahnherren
+Ahnherrn
+Ahnung
+Ahnungen
+Ahorn
+Ahorns
+Aids
+Airbus
+Ajatollah
+Ajatollahs
+Akaba
+Akademie
+Akademien
+Akademiker
+Akademikerin
+Akademikerinnen
+Akademikern
+Akademikers
+Akademikerschaft
+Akklamation
+Akklamationen
+Akklimatisierung
+Akkomodation
+Akkord
+Akkorde
+Akkorden
+Akkordeon
+Akkordeons
+Akkordes
+Akkords
+Akkreditiv
+Akkreditivs
+Akku
+Akkubetrieb
+Akkubetriebs
+Akkumulation
+Akkumulator
+Akkumulatoren
+Akkumulatorenbatterie
+Akkumulatorenbatterien
+Akkumulatorfahrzeug
+Akkumulatorfahrzeuge
+Akkumulatorfahrzeugen
+Akkumulators
+Akkus
+Akkusativ
+Akkusative
+Akkusativen
+Akkusativobjekt
+Akkusativobjekte
+Akkusativobjekten
+Akkusativobjektes
+Akkusativobjekts
+Akkusativs
+Akne
+Akquisiteur
+Akquisiteure
+Akquisiteuren
+Akquisiteurs
+Akquisition
+Akquisitionen
+Akribie
+Akrobat
+Akrobaten
+Akrobatik
+Akrobatin
+Akrobatinnen
+Akropolis
+Akt
+Akte
+Akten
+Aktenberg
+Aktenberge
+Aktenbergen
+Aktenbergs
+Aktenbände
+Aktenbänden
+Aktendeckel
+Aktendeckeln
+Aktendeckels
+Akteneinsicht
+Aktenkoffer
+Aktenkoffern
+Aktenkoffers
+Aktennotiz
+Aktennotizen
+Aktenordner
+Aktenordnern
+Aktenstudium
+Aktentasche
+Aktentaschen
+Aktenvermerk
+Aktenvermerke
+Aktenvermerken
+Aktenvermerks
+Aktenzeichen
+Aktenzeichens
+Akteur
+Akteure
+Akteuren
+Akteurs
+Aktfigur
+Aktfiguren
+Aktgemälde
+Aktgemälden
+Aktgemäldes
+Aktie
+Aktien
+Aktienbörse
+Aktienbörsen
+Aktiengesellschaft
+Aktiengesellschaften
+Aktienkapital
+Aktienkapitals
+Aktion
+Aktionen
+Aktionsplan
+Aktionsplans
+Aktionsradius
+Aktionssemantik
+Aktionssemantiken
+Aktionär
+Aktionäre
+Aktionären
+Aktionärs
+Aktiva
+Aktivierung
+Aktivierungssegment
+Aktivierungssegmente
+Aktivist
+Aktivisten
+Aktivität
+Aktivitäten
+Aktivsein
+Aktor
+Aktoren
+Akts
+Aktstudie
+Aktstudien
+Aktualisierung
+Aktualisierungen
+Aktualität
+Akustik
+Akustiksensor
+Akustiksensoren
+Akzeleration
+Akzent
+Akzente
+Akzenten
+Akzentes
+Akzents
+Akzentsetzung
+Akzentsetzungen
+Akzentverschiebung
+Akzentverschiebungen
+Akzept
+Akzeptanz
+Akzepte
+Akzepten
+Akzeptes
+Aladin
+Aladins
+Alarm
+Alarmanlage
+Alarmanlagen
+Alarme
+Alarmen
+Alarms
+Alarmsignal
+Alaska
+Alaskastraße
+Alb
+Albaner
+Albanerin
+Albanerinnen
+Albanern
+Albaners
+Albanien
+Albatros
+Albatrosse
+Albatrossen
+Albatrosses
+Albernheit
+Albernheiten
+Albert
+Alberts
+Albion
+Albions
+Albrecht
+Albrechts
+Albtraum
+Albtraumes
+Albtraums
+Albträume
+Albträumen
+Album
+Alchemist
+Alchemisten
+Alchimie
+Aldi
+Alemanne
+Alemannen
+Alemannin
+Alemanninnen
+Alembert
+Alemberts
+Alex
+Alexander
+Alexanders
+Alf
+Alfa
+Alfons
+Alfred
+Alfreds
+Alfs
+Alge
+Algebra
+Algebraisierung
+Algebraisierungen
+Algebren
+Algen
+Algerien
+Algerier
+Algerierin
+Algerierinnen
+Algeriern
+Algeriers
+Algorithmen
+Algorithmenfamilie
+Algorithmenfamilien
+Algorithmentheorie
+Algorithmentheorien
+Algorithmisierbarkeit
+Algorithmus
+Alias
+Aliase
+Alibi
+Alibis
+Alice
+Alices
+Alimente
+Alimenten
+Alkali
+Alkalien
+Alkalis
+Alkohol
+Alkoholiker
+Alkoholikerin
+Alkoholikerinnen
+Alkoholikern
+Alkoholikers
+Alkoven
+Alkovens
+All
+Allah
+Allahs
+Allee
+Alleen
+Allegorie
+Allegorien
+Alleingang
+Alleingangs
+Alleingänge
+Alleingängen
+Alleinsein
+Alleinseins
+Alleinstellungsmerkmal
+Alleinstellungsmerkmale
+Alleinstellungsmerkmalen
+Alleinstellungsmerkmals
+Allergie
+Allergien
+Allerheiligen
+Allerheiligste
+Allgegenwart
+Allgegenwarten
+Allgemeinbildung
+Allgemeingut
+Allgemeinheit
+Allgemeininteresse
+Allgemeininteresses
+Allgemeinwissen
+Allgemeinwissens
+Allgemeinzustand
+Allgemeinzustandes
+Allgemeinzustands
+Allgäu
+Allheilmittel
+Allheilmitteln
+Allheilmittels
+Allianz
+Allianzen
+Alliierten
+Allmacht
+Allquantifizierung
+Allquantifizierungen
+Allquantor
+Allquantoren
+Allquantors
+Alls
+Alltag
+Alltages
+Alltags
+Alltagsablauf
+Alltagsablaufs
+Alltagsabläufe
+Alltagsabläufen
+Alltagsarbeit
+Alltagsarbeiten
+Alltagsbetrieb
+Alltagsbetriebs
+Alltagsgeschäft
+Alltagsgeschäftes
+Alltagsgeschäfts
+Allwissenheit
+Alm
+Almanach
+Almanache
+Almanachen
+Almanachs
+Almen
+Alp
+Alpen
+Alphabet
+Alphabete
+Alphabeten
+Alphabets
+Alpinist
+Alpinisten
+Alpinistin
+Alpinistinnen
+Alptraum
+Alptraumes
+Alptraums
+Alpträume
+Alpträumen
+Alster
+Altamira
+Altar
+Altars
+Altenheim
+Altenheimen
+Altenholz
+Alter
+Alternativlösung
+Alternativlösungen
+Alternativvorschlag
+Alternativvorschlags
+Alternativvorschläge
+Alternativvorschlägen
+Alters
+Altertum
+Altertums
+Alterung
+Altlast
+Altlasten
+Altmaterial
+Altmaterials
+Altäre
+Altären
+Alu
+Alugehäuse
+Alugehäusen
+Alugehäuses
+Aluminium
+Aluminiumblech
+Aluminiumgehäuse
+Aluminiumgehäusen
+Aluminiumpulver
+Aluminiumrinnen
+Aluminiums
+Aluplatte
+Aluplatten
+Aluplättchen
+Amadeus
+Amateur
+Amateure
+Amateuren
+Amateurin
+Amateurinnen
+Amateurs
+Amazonas
+Amazone
+Amazonen
+Ambition
+Ambitionen
+Ambivalenz
+Ambivalenzen
+Amboss
+Ambosse
+Ambossen
+Ambosses
+Ambulanz
+Ambulanzen
+Ameise
+Ameisen
+Ameisenbär
+Ameisenbären
+Ameisenhaufen
+Ameisenhaufens
+Ameisenstaat
+Ameisenstaaten
+Ameisenstaats
+Ameisensäure
+Ameisensäuren
+Amerika
+Amerikaner
+Amerikanerin
+Amerikanerinnen
+Amerikanern
+Amerikaners
+Amerikas
+Ami
+Aminosäure
+Aminosäuren
+Amis
+Amme
+Ammen
+Ammenmärchen
+Ammenmärchens
+Ammoniak
+Ammonit
+Amnesie
+Amnesien
+Amnestie
+Amnestien
+Amnestierung
+Amnestierungen
+Amnesty
+Amnestys
+Amokläufer
+Amokläuferin
+Amokläuferinnen
+Amokläufern
+Amokläufers
+Amor
+Amors
+Amortisation
+Amortisationen
+Ampel
+Ampeln
+Ampere
+Amphibie
+Amphibien
+Amphitheater
+Amphitheaters
+Amplitude
+Amplituden
+Amplitudenbereich
+Amplitudendämpfung
+Amplitudenmodulation
+Amplitudenregelung
+Amplitudenverteilung
+Amplitudenwerte
+Ampulle
+Ampullen
+Amputation
+Amputationen
+Amsel
+Amseln
+Amsterdam
+Amsterdamer
+Amsterdamerin
+Amsterdamerinnen
+Amsterdamern
+Amsterdamers
+Amt
+Amtes
+Amts
+Amtsantritt
+Amtsantritte
+Amtsantritten
+Amtsantrittes
+Amtsantritts
+Amtseid
+Amtseide
+Amtseiden
+Amtseides
+Amtseids
+Amtseinführung
+Amtseinführungen
+Amtsgeheimnis
+Amtsgeheimnisse
+Amtsgeheimnissen
+Amtsgeheimnisses
+Amtsgeschäft
+Amtsgeschäfte
+Amtsgeschäften
+Amtsgeschäftes
+Amtsgeschäfts
+Amtsgewalt
+Amtshandlung
+Amtshandlungen
+Amtshilfe
+Amtshilfen
+Amtsinhaber
+Amtsinhaberin
+Amtsinhaberinnen
+Amtsinhabern
+Amtsinhabers
+Amtsmissbrauch
+Amtsmissbrauchs
+Amtsperiode
+Amtsperioden
+Amtssitz
+Amtswechsel
+Amtswechsels
+Amtszeichen
+Amtszeichens
+Amtszeit
+Amtszeiten
+Amtsübernahme
+Amtsübernahmen
+Amulett
+Amulette
+Amuletten
+Amulettes
+Amuletts
+Amüsement
+Amüsements
+Anachoret
+Anachoreten
+Anachronismen
+Anachronismus
+Analogausgabe
+Analogausgang
+Analogausganges
+Analogausgangs
+Analogausgänge
+Analogbus
+Analogeingang
+Analogeingänge
+Analogeingängen
+Analogie
+Analogien
+Analogkanäle
+Analogkarten
+Analogmultiplexer
+Analogon
+Analogons
+Analogschalter
+Analogsignal
+Analogsignale
+Analogsignalen
+Analogsignals
+Analogspannung
+Analogspannungen
+Analogspannungsspeicher
+Analogteil
+Analogteils
+Analogtor
+Analogwandler
+Analogwert
+Analogwerte
+Analphabet
+Analphabeten
+Analphabetentum
+Analphabetin
+Analphabetinnen
+Analphabetismus
+Analysator
+Analysatoren
+Analysators
+Analyse
+Analyseaufwand
+Analyseergebnis
+Analyseergebnisse
+Analyseergebnissen
+Analyseergebnisses
+Analysemethode
+Analysemethoden
+Analysen
+Analysephase
+Analysephasen
+Analyseschritt
+Analyseschritte
+Analyseschritten
+Analyseschrittes
+Analyseschritts
+Analyseverfahren
+Analyseverfahrens
+Analysierbarkeit
+Analysis
+Analyst
+Analysten
+Analytik
+Analytiker
+Analytikerin
+Analytikerinnen
+Analytikern
+Analytikers
+Anamnese
+Anarchie
+Anarchien
+Anarchismus
+Anarchist
+Anarchisten
+Anarchistin
+Anarchistinnen
+Anatol
+Anatolien
+Anatols
+Anatomie
+Anatomien
+Anbau
+Anbauer
+Anbauern
+Anbauers
+Anbauplatte
+Anbaus
+Anbeginn
+Anbeter
+Anbeterin
+Anbeterinnen
+Anbetern
+Anbeters
+Anbetracht
+Anbetung
+Anbetungen
+Anbieter
+Anbietern
+Anbieters
+Anbindung
+Anbindungen
+Anblick
+Anblicks
+Anbringung
+Anbruch
+Anbruchs
+Anbrüche
+Anbrüchen
+Andacht
+Andachten
+Andalusien
+Andalusier
+Andalusierin
+Andalusierinnen
+Andalusiern
+Andalusiers
+Andenken
+Andenkens
+Andeutung
+Andeutungen
+Andorra
+Andrang
+Andranges
+Andrangs
+Andre
+Andrea
+Andreas
+Andres
+Androhung
+Androhungen
+Androide
+Androiden
+Andromeda
+Andromedas
+Andruck
+Andrucks
+Andrängen
+Andy
+Andys
+Aneignung
+Aneignungen
+Anekdote
+Anekdoten
+Anemone
+Anemonen
+Anempfehlung
+Anempfehlungen
+Anerbieten
+Anerbietens
+Anerkenntnis
+Anerkenntnisse
+Anerkenntnissen
+Anerkennung
+Anerkennungen
+Anfahrt
+Anfahrten
+Anfahrtsweg
+Anfahrtswege
+Anfahrtswegen
+Anfahrtswegs
+Anfall
+Anfalls
+Anfang
+Anfangs
+Anfangsbuchstabe
+Anfangsbuchstaben
+Anfangserfolg
+Anfangserfolge
+Anfangserfolgen
+Anfangserfolgs
+Anfangsgehalt
+Anfangsgehaltes
+Anfangsgehalts
+Anfangsgehälter
+Anfangsgehältern
+Anfangsphase
+Anfangsphasen
+Anfangsproblem
+Anfangsprobleme
+Anfangsproblemen
+Anfangsproblems
+Anfangsschwierigkeit
+Anfangsschwierigkeiten
+Anfangssituation
+Anfangssituationen
+Anfangszeit
+Anfangszeiten
+Anfechtung
+Anfechtungen
+Anfeindung
+Anfeindungen
+Anfertigung
+Anfertigungen
+Anflug
+Anfluges
+Anflugs
+Anflüge
+Anflügen
+Anforderung
+Anforderungen
+Anfälle
+Anfällen
+Anfälligkeit
+Anfälligkeiten
+Anfänge
+Anfängen
+Anfänger
+Anfängerin
+Anfängerinnen
+Anfängern
+Anfängers
+Anfügung
+Anfügungen
+Anführer
+Anführerin
+Anführerinnen
+Anführern
+Anführers
+Anführung
+Anführungen
+Anführungsstrich
+Anführungsstriche
+Anführungsstrichen
+Anführungsstriches
+Anführungsstrichs
+Anführungszeichen
+Anführungszeichens
+Angabe
+Angaben
+Angeber
+Angeberei
+Angebereien
+Angeberin
+Angeberinnen
+Angebern
+Angebers
+Angebot
+Angebote
+Angeboten
+Angebotes
+Angebots
+Angehörigkeit
+Angel
+Angelegenheit
+Angelegenheiten
+Angelei
+Angelika
+Angelikas
+Angeln
+Angelpunkt
+Angelpunkte
+Angelpunkten
+Angelpunktes
+Angelpunkts
+Angemessenheit
+Angepasstheit
+Angepasstheiten
+Angesicht
+Angesichter
+Angesichtern
+Angesichtes
+Angesichts
+Angestammtheit
+Angestelltenverhältnis
+Angestelltenverhältnisse
+Angestelltenverhältnissen
+Angestelltenverhältnisses
+Angewohnheit
+Angewohnheiten
+Angewöhnung
+Angina
+Angleichung
+Angleichungen
+Angler
+Anglern
+Anglers
+Angliederung
+Angliederungen
+Anglistik
+Anglokanadier
+Anglokanadierin
+Anglokanadierinnen
+Anglokanadiern
+Anglokanadiers
+Angola
+Angreifer
+Angreiferin
+Angreiferinnen
+Angreifern
+Angreifers
+Angriff
+Angriffe
+Angriffen
+Angriffs
+Angst
+Angstdioden
+Angstgefühl
+Angstgefühle
+Angstgefühlen
+Angstgefühles
+Angstgefühls
+Angsthase
+Angsthasen
+Angstschweiß
+Angstschweiße
+Angstschweißes
+Angstzustand
+Angstzustandes
+Angstzustands
+Angstzustände
+Angstzuständen
+Anhalt
+Anhalter
+Anhalterin
+Anhalterinnen
+Anhaltern
+Anhalters
+Anhaltspunkt
+Anhaltspunkte
+Anhaltspunkten
+Anhaltspunktes
+Anhaltspunkts
+Anhang
+Anhangs
+Anhebung
+Anhebungen
+Anhieb
+Anhiebs
+Anhänger
+Anhängerin
+Anhängerinnen
+Anhängern
+Anhängers
+Anhängerschaft
+Anhängerschaften
+Anhängerzahl
+Anhängerzahlen
+Anhänglichkeit
+Anhängsel
+Anhängseln
+Anhängsels
+Anhäufung
+Anhäufungen
+Anhöhe
+Anhöhen
+Anhörung
+Anhörungen
+Anilin
+Anilins
+Animierung
+Animierungen
+Animosität
+Animositäten
+Anis
+Ankara
+Ankauf
+Ankaufs
+Anker
+Ankers
+Ankerstellung
+Ankerstellungen
+Ankerwicklung
+Ankerwicklungen
+Ankick
+Anklagebank
+Anklagebanken
+Anklang
+Anklangs
+Anklemmung
+Ankläger
+Anklägerin
+Anklägerinnen
+Anklägern
+Anklägers
+Anklänge
+Anklängen
+Anknüpfung
+Ankoppelung
+Ankoppelungen
+Ankopplung
+Ankopplungen
+Ankunft
+Ankunftszeit
+Ankunftszeiten
+Ankurbelung
+Ankurbelungen
+Ankäufe
+Ankäufen
+Ankömmling
+Ankömmlinge
+Ankömmlingen
+Ankömmlings
+Ankündigung
+Ankündigungen
+Ankünfte
+Ankünften
+Anlage
+Anlagen
+Anlass
+Anlasser
+Anlassern
+Anlassers
+Anlasses
+Anlauf
+Anlaufs
+Anlaut
+Anlaute
+Anlauten
+Anlautes
+Anleger
+Anlegern
+Anlehnung
+Anlehnungen
+Anleihe
+Anleihen
+Anleitung
+Anleitungen
+Anlernling
+Anlernlinge
+Anlernlingen
+Anlernlings
+Anlieferung
+Anlieferungen
+Anliegen
+Anliegens
+Anlieger
+Anliegern
+Anliegers
+Anlässe
+Anlässen
+Anläufe
+Anläufen
+Anm
+Anmarsch
+Anmarsches
+Anmaßung
+Anmaßungen
+Anmeldeformular
+Anmeldeformulare
+Anmeldeformularen
+Anmeldeformulars
+Anmeldefrist
+Anmeldefristen
+Anmeldegebühr
+Anmeldegebühren
+Anmeldepflicht
+Anmeldepflichten
+Anmelder
+Anmeldern
+Anmelders
+Anmeldeschein
+Anmeldescheine
+Anmeldescheinen
+Anmeldescheines
+Anmeldescheins
+Anmeldevordruck
+Anmeldevordrucke
+Anmeldevordrucken
+Anmeldevordruckes
+Anmeldevordrucks
+Anmeldevorschrift
+Anmeldevorschriften
+Anmeldung
+Anmeldungen
+Anmerkung
+Anmerkungen
+Anmietung
+Anmietungen
+Anmut
+Anmutung
+Anmutungen
+Anmärsche
+Anmärschen
+Annahme
+Annahmefrist
+Annahmefristen
+Annahmen
+Annahmeschluss
+Annahmeschlusses
+Annahmestelle
+Annahmestellen
+Annahmeverweigerung
+Annahmeverweigerungen
+Annalen
+Annehmlichkeit
+Annehmlichkeiten
+Anneliese
+Annelieses
+Annexe
+Annexen
+Annexes
+Annexion
+Annexionen
+Annie
+Annies
+Annonce
+Annoncen
+Annullierung
+Annullierungen
+Annäherung
+Annäherungen
+Annäherungsversuch
+Annäherungsversuche
+Annäherungsversuchen
+Annäherungsversuches
+Annäherungsversuchs
+Annährung
+Annährungen
+Anomalie
+Anomalien
+Anonymität
+Anonymitäten
+Anorak
+Anoraks
+Anordnung
+Anordnungen
+Anpasshardware
+Anpassung
+Anpassungen
+Anpassungsdruck
+Anpassungsdrucks
+Anpassungsfähigkeit
+Anpassungsfähigkeiten
+Anpassungsprozess
+Anpassungsprozesse
+Anpassungsprozessen
+Anpassungsprozesses
+Anpassungsschwierigkeit
+Anpassungsschwierigkeiten
+Anpassungsvermögen
+Anpassungsvermögens
+Anpflanzung
+Anpflanzungen
+Anprall
+Anpralls
+Anpreisung
+Anpreisungen
+Anpressdruck
+Anpressdrucks
+Anprobe
+Anproben
+Anrechnung
+Anrechnungen
+Anrecht
+Anrechte
+Anrechten
+Anrechts
+Anregung
+Anregungen
+Anreicherung
+Anreicherungen
+Anreisetermin
+Anreisetermine
+Anreiseterminen
+Anreisetermins
+Anreiz
+Anreize
+Anreizen
+Anreizes
+Anriss
+Anrisse
+Anrissen
+Anrisses
+Anrollens
+Anruf
+Anrufbeantworter
+Anrufbeantwortern
+Anrufbeantworters
+Anrufe
+Anrufen
+Anrufer
+Anruferin
+Anruferinnen
+Anrufers
+Anrufes
+Anrufs
+Anrufung
+Anrufungen
+Ansager
+Ansagerin
+Ansagerinnen
+Ansagern
+Ansagers
+Ansammlung
+Ansammlungen
+Ansatz
+Ansatzes
+Ansatzpunkt
+Ansatzpunkte
+Ansatzpunkten
+Ansatzpunktes
+Ansatzpunkts
+Ansatzstück
+Ansatzstücke
+Ansatzstücken
+Ansatzstücks
+Anschaffung
+Anschaffungen
+Anschaulichkeit
+Anschauung
+Anschauungen
+Anschauungsform
+Anschauungsformen
+Anschauungsmaterial
+Anschauungsmaterials
+Anschauungsunterricht
+Anschauungsunterrichtes
+Anschauungsweise
+Anschauungsweisen
+Anschein
+Anscheins
+Anschiss
+Anschisse
+Anschissen
+Anschisses
+Anschlag
+Anschlages
+Anschlags
+Anschluss
+Anschlussbelegung
+Anschlussbelegungen
+Anschlussbuchse
+Anschlussbuchsen
+Anschlussdaten
+Anschlussdrähte
+Anschlussdrähten
+Anschlusses
+Anschlusskabel
+Anschlusskabeln
+Anschlusskabels
+Anschlussklemme
+Anschlussklemmen
+Anschlussleitung
+Anschlussleitungen
+Anschlussmöglichkeit
+Anschlussmöglichkeiten
+Anschlussstelle
+Anschlussstellen
+Anschlussstück
+Anschlussstücke
+Anschlussstücken
+Anschlussstücks
+Anschlusstreffer
+Anschlusstreffers
+Anschläge
+Anschlägen
+Anschlüsse
+Anschlüssen
+Anschnitt
+Anschnitte
+Anschnitten
+Anschnittes
+Anschrift
+Anschriften
+Anschub
+Anschubs
+Anschuldigung
+Anschuldigungen
+Ansehung
+Ansicht
+Ansichten
+Ansichtskarte
+Ansichtskarten
+Ansichtssache
+Ansiedler
+Ansiedlern
+Ansiedlers
+Ansiedlung
+Ansiedlungen
+Ansinnen
+Ansinnens
+Anspannung
+Anspannungen
+Anspielung
+Anspielungen
+Ansporn
+Ansporns
+Ansprache
+Ansprachen
+Ansprechpartner
+Ansprechpartnern
+Ansprechpartners
+Ansprechzeit
+Anspruch
+Anspruchs
+Anspruchsberechtigung
+Anspruchsberechtigungen
+Anspruchslosigkeit
+Ansprüche
+Ansprüchen
+Anstalt
+Anstalten
+Anstand
+Anstands
+Anstandsdame
+Anstandsdamen
+Anstecknadel
+Anstecknadeln
+Ansteckung
+Ansteckungen
+Anstellung
+Anstellungen
+Ansteuerboard
+Ansteuerboards
+Ansteuerelektronik
+Ansteuerelektroniken
+Ansteuerkarte
+Ansteuerleitung
+Ansteuerlogik
+Ansteuerplatinen
+Ansteuerspannung
+Ansteuerung
+Ansteuerungen
+Ansteuerungsleitung
+Ansteuerungszeit
+Ansteuerverstärker
+Ansteuerzeit
+Anstieg
+Anstiege
+Anstiegen
+Anstiegs
+Anstiegszeit
+Anstiegszeiten
+Anstifter
+Anstifterin
+Anstifterinnen
+Anstiftern
+Anstifters
+Anstiftung
+Anstiftungen
+Anstoß
+Anstoßes
+Anstreicher
+Anstreichern
+Anstreichers
+Anstrengung
+Anstrengungen
+Anstrich
+Anstriche
+Anstrichen
+Anstrichs
+Ansturm
+Ansturms
+Anstöße
+Anstößen
+Ansätze
+Ansätzen
+Antagonismus
+Antarktika
+Antarktis
+Anteil
+Anteile
+Anteilen
+Anteilnahme
+Anteils
+Anteilschein
+Anteilscheine
+Anteilscheinen
+Anteilscheines
+Anteilscheins
+Antenne
+Antennen
+Anthologie
+Anthologien
+Anthropoide
+Anthropoiden
+Anthropologe
+Anthropologen
+Anthropologie
+Anthroposoph
+Anthroposophen
+Anthroposophie
+Antibiotika
+Antibiotikum
+Antibiotikums
+Antidot
+Antidote
+Antidots
+Antifaschismus
+Antifaschist
+Antifaschisten
+Antilope
+Antilopen
+Antipathie
+Antipathien
+Antiquar
+Antiquare
+Antiquaren
+Antiquariat
+Antiquariate
+Antiquariaten
+Antiquariates
+Antiquariats
+Antiquars
+Antiquität
+Antiquitäten
+Antisemit
+Antisemiten
+Antisemitismus
+Antithese
+Antithesen
+Antizipation
+Antizipationen
+Antlitz
+Antlitze
+Antlitzes
+Antonio
+Antonios
+Antonius
+Antrag
+Antrages
+Antrags
+Antragsformular
+Antragsformulare
+Antragsformularen
+Antragsformulars
+Antragsfrist
+Antragsfristen
+Antragsteller
+Antragstellerin
+Antragstellerinnen
+Antragstellern
+Antragstellers
+Antragstellung
+Antragstellungen
+Antragszeitraum
+Antragszeitraums
+Antragszeiträume
+Antragszeiträumen
+Antrieb
+Antriebe
+Antrieben
+Antriebs
+Antritt
+Antritte
+Antritten
+Antrittes
+Antritts
+Antrittsbesuch
+Antrittsbesuche
+Antrittsbesuchen
+Antrittsbesuchs
+Antrittsrede
+Antrittsreden
+Antrittstermin
+Antrittstermine
+Antrittsterminen
+Antrittstermins
+Anträge
+Anträgen
+Antwort
+Antworten
+Antworttext
+Antworttexte
+Antworttexten
+Antworttextes
+Antworttexts
+Antwortzeit
+Antwortzeiten
+Anverwandlung
+Anverwandte
+Anverwandten
+Anwahl
+Anwalt
+Anwaltes
+Anwalts
+Anwandlung
+Anwandlungen
+Anwar
+Anwars
+Anwartschaft
+Anwartschaften
+Anweisung
+Anweisungen
+Anweisungsfolge
+Anweisungsfolgen
+Anweisungssequenz
+Anweisungssequenzen
+Anweisungsteil
+Anweisungsteile
+Anweisungsteilen
+Anweisungsteils
+Anwendbarkeit
+Anwender
+Anwenderhinweis
+Anwenderhinweise
+Anwenderhinweisen
+Anwenderhinweises
+Anwendern
+Anwenderoberfläche
+Anwenderproblem
+Anwenderprobleme
+Anwenderproblemen
+Anwenderproblems
+Anwenderprogramm
+Anwenderprogramme
+Anwenders
+Anwenderseite
+Anwenderseiten
+Anwendersicht
+Anwendersichten
+Anwendersoftware
+Anwendung
+Anwendungen
+Anwendungsbeispiel
+Anwendungsbeispiele
+Anwendungsbeispielen
+Anwendungsbeispiels
+Anwendungsbereich
+Anwendungsbereiche
+Anwendungsbereichen
+Anwendungsbereichs
+Anwendungsbeziehung
+Anwendungsbeziehungen
+Anwendungsbezug
+Anwendungsbezuges
+Anwendungsbezugs
+Anwendungsbezüge
+Anwendungsbezügen
+Anwendungsentwicklung
+Anwendungsentwicklungen
+Anwendungsfeld
+Anwendungsfelder
+Anwendungsfeldern
+Anwendungsgebiet
+Anwendungsgebiete
+Anwendungsgebieten
+Anwendungsgebietes
+Anwendungsgebiets
+Anwendungshinweis
+Anwendungshinweise
+Anwendungshinweisen
+Anwendungshinweises
+Anwendungsmöglichkeit
+Anwendungsmöglichkeiten
+Anwendungsprogramm
+Anwendungsprogramme
+Anwendungsprogrammen
+Anwendungsprogrammierer
+Anwendungsprogrammierung
+Anwendungsprogramms
+Anwendungssoftware
+Anwendungsspektrum
+Anwendungsspektrums
+Anwendungssystem
+Anwendungssysteme
+Anwendungssystemen
+Anwendungssystems
+Anwendungstechniker
+Anwendungstechnikern
+Anwendungstechnikers
+Anwendungsunterstützung
+Anwendungsunterstützungen
+Anwerbestopp
+Anwerbestopps
+Anwerbung
+Anwerbungen
+Anwesen
+Anwesenheit
+Anwesenheitsliste
+Anwesenheitslisten
+Anwesenheitspflicht
+Anwesenheitsrecht
+Anwesens
+Anwohner
+Anwohnern
+Anwohners
+Anwälte
+Anwälten
+Anwärter
+Anwärterin
+Anwärterinnen
+Anwärtern
+Anwärters
+Anz
+Anzahl
+Anzahlung
+Anzahlungen
+Anzeichen
+Anzeichens
+Anzeigegenauigkeit
+Anzeigentreiber
+Anzeigepflicht
+Anzeigesoftware
+Anzeigetreiber
+Anziehung
+Anziehungen
+Anziehungskraft
+Anziehungskräfte
+Anziehungskräften
+Anziehungspunkt
+Anziehungspunkte
+Anziehungspunkten
+Anziehungspunktes
+Anziehungspunkts
+Anzug
+Anzuges
+Anzugs
+Anzüge
+Anzügen
+Apache
+Apachen
+Apartheid
+Apartment
+Aperitif
+Aperitifs
+Apfel
+Apfels
+Apfelsine
+Apfelsinen
+Aphorismus
+Aphrodite
+Aphrodites
+Apokalypse
+Apoll
+Apollo
+Apollos
+Apolls
+Apologet
+Apologeten
+Apostel
+Aposteln
+Apostels
+Apostroph
+Apostrophs
+Apotheke
+Apotheken
+Apotheker
+Apothekerin
+Apothekerinnen
+Apothekern
+Apothekers
+Appalachen
+Apparat
+Apparate
+Apparaten
+Apparats
+Apparatur
+Apparaturen
+Appartement
+Appartements
+Appell
+Appelle
+Appellen
+Appells
+Appetenz
+Appetenzen
+Appetit
+Appetits
+Applaus
+Applauses
+Apple
+Applikation
+Applikationen
+Applikationsprogramm
+Applikationsprogramme
+Applikationssoftware
+Approximation
+Approximationen
+Aprikose
+Aprikosen
+April
+Aprils
+Aprilscherz
+Aprilscherze
+Aprilscherzen
+Aprilscherzes
+Apside
+Apsis
+Apulien
+Aquarell
+Aquarelle
+Aquarellen
+Aquarells
+Aquarien
+Aquarium
+Aquariums
+Aquitanien
+Ar
+Araber
+Araberin
+Araberinnen
+Arabern
+Arabers
+Arabeske
+Arabesken
+Arabien
+Arafat
+Arafats
+Aral
+Araldit
+Ararat
+Arbeit
+Arbeitens
+Arbeiter
+Arbeiterin
+Arbeiterinnen
+Arbeitern
+Arbeiters
+Arbeiterschaft
+Arbeitgeber
+Arbeitgebern
+Arbeitgebers
+Arbeitnehmer
+Arbeitnehmerin
+Arbeitnehmerinnen
+Arbeitnehmern
+Arbeitnehmers
+Arbeitsablauf
+Arbeitsablaufs
+Arbeitsabläufe
+Arbeitsabläufen
+Arbeitsamkeit
+Arbeitsamt
+Arbeitsamtes
+Arbeitsamts
+Arbeitsanweisung
+Arbeitsanweisungen
+Arbeitsatmosphäre
+Arbeitsatmosphären
+Arbeitsaufkommen
+Arbeitsaufwand
+Arbeitsaufwandes
+Arbeitsaufwands
+Arbeitsausfall
+Arbeitsausfalls
+Arbeitsausfälle
+Arbeitsausfällen
+Arbeitsbedingung
+Arbeitsbedingungen
+Arbeitsbefreiung
+Arbeitsbefreiungen
+Arbeitsbeginn
+Arbeitsbeginns
+Arbeitsbelastung
+Arbeitsbelastungen
+Arbeitsbereich
+Arbeitsbereiche
+Arbeitsbereichen
+Arbeitsbereiches
+Arbeitsbereichs
+Arbeitsbericht
+Arbeitsberichte
+Arbeitsberichten
+Arbeitsberichts
+Arbeitsbeschaffung
+Arbeitsbeschaffungen
+Arbeitsbescheinigung
+Arbeitsbescheinigungen
+Arbeitsbeschreibung
+Arbeitsbeschreibungen
+Arbeitsbesuch
+Arbeitsbesuche
+Arbeitsbesuchen
+Arbeitsbesuchs
+Arbeitsbewältigung
+Arbeitsbreite
+Arbeitsbögen
+Arbeitsdaten
+Arbeitsdienst
+Arbeitsdienste
+Arbeitsdiensten
+Arbeitsdienstes
+Arbeitsdiensts
+Arbeitsdirectory
+Arbeitseifer
+Arbeitseifers
+Arbeitseinheit
+Arbeitseinheiten
+Arbeitseinsatz
+Arbeitseinsatzes
+Arbeitsende
+Arbeitsentgelt
+Arbeitsentgelte
+Arbeitsentgelten
+Arbeitsentgelts
+Arbeitserlaubnis
+Arbeitserlaubnisse
+Arbeitserlaubnissen
+Arbeitserleichterung
+Arbeitserleichterungen
+Arbeitsessen
+Arbeitsessens
+Arbeitsfanatiker
+Arbeitsfanatikern
+Arbeitsfanatikers
+Arbeitsfeld
+Arbeitsfelder
+Arbeitsfeldern
+Arbeitsfeldes
+Arbeitsfelds
+Arbeitsfläche
+Arbeitsflächen
+Arbeitsfolge
+Arbeitsfolgen
+Arbeitsfrage
+Arbeitsfragen
+Arbeitsfreude
+Arbeitsfreuden
+Arbeitsfrieden
+Arbeitsfriedens
+Arbeitsfähigkeit
+Arbeitsfähigkeiten
+Arbeitsförderung
+Arbeitsgang
+Arbeitsgangs
+Arbeitsgebiet
+Arbeitsgebiete
+Arbeitsgebieten
+Arbeitsgebiets
+Arbeitsgemeinschaft
+Arbeitsgemeinschaften
+Arbeitsgerät
+Arbeitsgeräte
+Arbeitsgeräten
+Arbeitsgeräts
+Arbeitsgruppe
+Arbeitsgruppen
+Arbeitsgänge
+Arbeitsgängen
+Arbeitshypothese
+Arbeitshypothesen
+Arbeitskamerad
+Arbeitskameraden
+Arbeitskampf
+Arbeitskampfes
+Arbeitskampfs
+Arbeitskleidung
+Arbeitskleidungen
+Arbeitskollege
+Arbeitskollegen
+Arbeitskopie
+Arbeitskopien
+Arbeitskraft
+Arbeitskreis
+Arbeitskreise
+Arbeitskreisen
+Arbeitskreises
+Arbeitskräfte
+Arbeitskräften
+Arbeitskämpfe
+Arbeitskämpfen
+Arbeitslager
+Arbeitslagern
+Arbeitslagers
+Arbeitslast
+Arbeitslasten
+Arbeitsleben
+Arbeitslebens
+Arbeitsleistung
+Arbeitsleistungen
+Arbeitslosigkeit
+Arbeitslöhne
+Arbeitslöhnen
+Arbeitsmarkt
+Arbeitsmarktes
+Arbeitsmarkts
+Arbeitsmaterial
+Arbeitsmaterials
+Arbeitsmethode
+Arbeitsmethoden
+Arbeitsmittel
+Arbeitsmitteln
+Arbeitsmittels
+Arbeitsmärkte
+Arbeitsmärkten
+Arbeitsmöglichkeit
+Arbeitsmöglichkeiten
+Arbeitspaket
+Arbeitspakete
+Arbeitspaketen
+Arbeitspaketes
+Arbeitspakets
+Arbeitspapier
+Arbeitspapiere
+Arbeitspapieren
+Arbeitspapiers
+Arbeitspause
+Arbeitspausen
+Arbeitspflicht
+Arbeitspflichten
+Arbeitsphase
+Arbeitsphasen
+Arbeitsplan
+Arbeitsplans
+Arbeitsplanung
+Arbeitsplanungen
+Arbeitsplatz
+Arbeitsplatzcomputer
+Arbeitsplatzcomputern
+Arbeitsplatzcomputers
+Arbeitsplatzes
+Arbeitsplatzwechsel
+Arbeitsplatzwechsels
+Arbeitspläne
+Arbeitsplänen
+Arbeitsplätze
+Arbeitsplätzen
+Arbeitsprogramm
+Arbeitsprogramms
+Arbeitsprotokoll
+Arbeitsprotokolle
+Arbeitsprotokollen
+Arbeitsprotokolls
+Arbeitsprozess
+Arbeitsprozesse
+Arbeitsprozessen
+Arbeitsprozesses
+Arbeitspunkt
+Arbeitspunkte
+Arbeitspunkten
+Arbeitspunktes
+Arbeitspunkts
+Arbeitsraum
+Arbeitsraums
+Arbeitsrecht
+Arbeitsrechts
+Arbeitsrichtung
+Arbeitsrichtungen
+Arbeitsruhe
+Arbeitsräume
+Arbeitsräumen
+Arbeitsschluss
+Arbeitsschritt
+Arbeitsschritte
+Arbeitsschritten
+Arbeitsschritts
+Arbeitsschwerpunkt
+Arbeitsschwerpunkte
+Arbeitsschwerpunkten
+Arbeitsschwerpunkts
+Arbeitssitzung
+Arbeitssitzungen
+Arbeitsspeicher
+Arbeitsstab
+Arbeitsstabs
+Arbeitsstelle
+Arbeitsstellen
+Arbeitsstil
+Arbeitsstile
+Arbeitsstilen
+Arbeitsstils
+Arbeitsstoff
+Arbeitsstoffe
+Arbeitsstoffen
+Arbeitsstoffs
+Arbeitsstunde
+Arbeitsstunden
+Arbeitsstätte
+Arbeitsstätten
+Arbeitssuchende
+Arbeitssuchenden
+Arbeitssuchender
+Arbeitstag
+Arbeitstage
+Arbeitstagen
+Arbeitstags
+Arbeitstakt
+Arbeitstakte
+Arbeitstakten
+Arbeitstakts
+Arbeitsteam
+Arbeitsteams
+Arbeitsteilung
+Arbeitstemperatur
+Arbeitstemperaturen
+Arbeitstext
+Arbeitstexte
+Arbeitstexten
+Arbeitstextes
+Arbeitstexts
+Arbeitstier
+Arbeitstiere
+Arbeitstieren
+Arbeitstiers
+Arbeitstisch
+Arbeitstische
+Arbeitstischen
+Arbeitstisches
+Arbeitstreffen
+Arbeitstreffens
+Arbeitsumgebung
+Arbeitsumgebungen
+Arbeitsumstände
+Arbeitsumständen
+Arbeitsunfall
+Arbeitsunfalls
+Arbeitsunfälle
+Arbeitsunfällen
+Arbeitsunlust
+Arbeitsunterbrechung
+Arbeitsunterbrechungen
+Arbeitsunterlage
+Arbeitsunterlagen
+Arbeitsverhältnis
+Arbeitsverhältnisse
+Arbeitsverhältnissen
+Arbeitsverhältnisses
+Arbeitsverteilung
+Arbeitsverteilungen
+Arbeitsvorgang
+Arbeitsvorgangs
+Arbeitsvorgänge
+Arbeitsvorgängen
+Arbeitsweise
+Arbeitsweisen
+Arbeitswelt
+Arbeitswiderstand
+Arbeitswiderstandes
+Arbeitswille
+Arbeitswillen
+Arbeitswoche
+Arbeitswochen
+Arbeitszeit
+Arbeitszeiten
+Arbeitszimmer
+Arbeitszimmern
+Arbeitszimmers
+Arbeitszwang
+Arbeitszwangs
+Arbeitszwänge
+Arbeitszwängen
+Arbeitszyklus
+Arbeitsämter
+Arbeitsämtern
+Arbeitsüberlastung
+Archenholz
+Archimedes
+Archipel
+Archipele
+Archipelen
+Archipels
+Architekt
+Architekten
+Architektonik
+Architektur
+Architekturen
+Archiv
+Archive
+Archiven
+Archivierung
+Archivs
+Archäologe
+Archäologen
+Archäologie
+Areal
+Areale
+Arealen
+Areals
+Arena
+Arenen
+Argau
+Argentinien
+Arglist
+Arglosigkeit
+Argonaut
+Argonauten
+Argument
+Argumentanzahl
+Argumentation
+Argumentationen
+Argumentationshilfe
+Argumentationshilfen
+Argumentauswertung
+Argumentauswertungen
+Argumentbereich
+Argumentbereiche
+Argumentbereichen
+Argumentbereichs
+Argumente
+Argumenten
+Argumentes
+Argumentliste
+Argumentlisten
+Arguments
+Argumenttyp
+Argumenttypen
+Argumentwert
+Argumentwerten
+Argus
+Argusaugen
+Argwohn
+Argwohns
+Ariadne
+Ariadnes
+Arie
+Arien
+Arier
+Ariern
+Ariers
+Aristokrat
+Aristokraten
+Aristokratie
+Aristokratin
+Aristokratinnen
+Aristoteles
+Arithmetik
+Arizona
+Arkade
+Arkaden
+Arkansas
+Arm
+Armada
+Armagnac
+Armatur
+Armaturen
+Armband
+Armbandes
+Armbands
+Armbanduhr
+Armbanduhren
+Armbruch
+Armbruches
+Armbruchs
+Armbrust
+Armbrüche
+Armbrüchen
+Armbrüste
+Armbänder
+Armbändern
+Armee
+Armeen
+Armeestärke
+Armeestärken
+Armenhaus
+Armenhauses
+Armenhäuser
+Armenhäusern
+Armenien
+Armenier
+Armenierin
+Armenierinnen
+Armeniern
+Armeniers
+Armenviertel
+Armenvierteln
+Armhaltung
+Armhaltungen
+Armlehne
+Armlehnen
+Armreif
+Armreifen
+Arms
+Armseligkeit
+Armstrong
+Armstrongs
+Armut
+Armutsgebiet
+Armutsgebiete
+Armutsgebieten
+Armutsgebiets
+Armutszeugnis
+Armutszeugnisse
+Armutszeugnissen
+Armutszeugnisses
+Arnika
+Arno
+Arnos
+Aroma
+Aromas
+Aromen
+Arosa
+Arrangement
+Arrangements
+Arrangierens
+Array
+Arrays
+Arrest
+Arreste
+Arresten
+Arrestes
+Arrests
+Arroganz
+Arrondierung
+Arrondissement
+Arrondissements
+Arsch
+Arschgeige
+Arschgeigen
+Arschloch
+Arschlochs
+Arschlöcher
+Arschlöchern
+Arsen
+Arsenal
+Arsenale
+Arsenalen
+Arsenals
+Arsens
+Art
+Artaxerxes
+Artefakt
+Artefakte
+Artefakten
+Artefaktes
+Artefakts
+Artemis
+Arten
+Arterie
+Arterien
+Artgenosse
+Artgenossen
+Arthur
+Arthurs
+Artigkeit
+Artigkeiten
+Artikel
+Artikeln
+Artikelnummer
+Artikelnummern
+Artikels
+Artikulation
+Artikulationen
+Artikulationsfähigkeit
+Artillerie
+Artischocke
+Artischocken
+Artist
+Artisten
+Artistin
+Artistinnen
+Artus
+Arznei
+Arzneien
+Arzneimittel
+Arzneimitteln
+Arzneimittels
+Arzneischränke
+Arzneischränken
+Arzneiware
+Arzneiwaren
+Arzt
+Arztes
+Arzthelfer
+Arzthelferin
+Arzthelferinnen
+Arzthelfern
+Arzthelfers
+Asbest
+Asche
+Aschenbahn
+Aschenbahnen
+Aschenbecher
+Aschenbechern
+Aschenbechers
+Aschenbrödel
+Aschenbrödels
+Aschermittwoch
+Aschermittwochs
+Ascona
+Asiat
+Asiaten
+Asiatin
+Asiatinnen
+Asiens
+Asket
+Asketen
+Aspekt
+Aspekte
+Aspekten
+Aspektes
+Aspekts
+Asphalt
+Asphalts
+Asphaltstraße
+Asphaltstraßen
+Aspik
+Aspirant
+Aspiranten
+Aspiration
+Aspirationen
+Ass
+Asse
+Assekuranz
+Assekuranzen
+Assembler
+Assemblern
+Assemblerprogramm
+Assemblerprogramme
+Assemblerprogrammen
+Assemblerprogramms
+Assemblers
+Assen
+Asses
+Assessor
+Assessoren
+Assimilation
+Assisi
+Assistent
+Assistenten
+Assistentin
+Assistentinnen
+Assistenz
+Assistenzen
+Assoziation
+Assoziationen
+Assoziativität
+Assuanstaudamm
+Assyrien
+Ast
+Aster
+Asterix
+Astern
+Astes
+Asthma
+Astlöcher
+Astlöchern
+Astoria
+Astorias
+Astrologe
+Astrologen
+Astrologie
+Astronaut
+Astronauten
+Astronautik
+Astronomie
+Asyl
+Asylant
+Asylanten
+Asyls
+Asymmetrie
+Asymmetrien
+Asynchronmotor
+Asynchronmotoren
+Asynchronmotors
+Atari
+Atelier
+Ateliers
+Atem
+Atemlosigkeit
+Atempause
+Atempausen
+Atemzug
+Atemzugs
+Atemzüge
+Atemzügen
+Atheismus
+Atheist
+Atheisten
+Atheistin
+Atheistinnen
+Athen
+Athene
+Athenes
+Athlet
+Athleten
+Athletik
+Athletin
+Athletinnen
+Atlant
+Atlanten
+Atlantik
+Atlantiks
+Atlantis
+Atlas
+Atlasgebirge
+Atmosphäre
+Atmosphären
+Atmung
+Atmungen
+Atoll
+Atolle
+Atollen
+Atolls
+Atom
+Atome
+Atomen
+Atomium
+Atoms
+Attache
+Attaches
+Attacke
+Attacken
+Attentat
+Attentats
+Attentäter
+Attentätern
+Attentäters
+Attest
+Attesten
+Attika
+Attila
+Attilas
+Attitüde
+Attitüden
+Attraktion
+Attraktionen
+Attraktivität
+Attrappe
+Attrappen
+Attribuierung
+Attribuierungen
+Attribut
+Attribute
+Attributen
+Attributs
+Atü
+Au
+Aubergine
+Auberginen
+Audienz
+Audienzen
+Auditorien
+Auditorium
+Auditoriums
+Audrey
+Audreys
+Aue
+Auen
+Auerhahn
+Auerhahns
+Auerhähne
+Auerhähnen
+Auerochse
+Auerochsen
+Aufarbeitung
+Aufbau
+Aufbaues
+Aufbauphase
+Aufbauphasen
+Aufbauplan
+Aufbauplans
+Aufbaupläne
+Aufbauplänen
+Aufbaus
+Aufbauschung
+Aufbauschungen
+Aufbaustudium
+Aufbaustudiums
+Aufbautermin
+Aufbautermine
+Aufbauterminen
+Aufbautermins
+Aufbereitung
+Aufbereitungen
+Aufbesserung
+Aufbesserungen
+Aufbewahrung
+Aufbewahrungsort
+Aufbewahrungsorte
+Aufbewahrungsorten
+Aufbewahrungsortes
+Aufbietung
+Aufbietungen
+Aufbruch
+Aufbruchs
+Aufbruchstimmung
+Aufbrüche
+Aufbrüchen
+Aufdruck
+Aufdrucks
+Aufeinanderfolge
+Aufenthalt
+Aufenthalte
+Aufenthalten
+Aufenthaltes
+Aufenthalts
+Aufenthaltserlaubnis
+Aufenthaltserlaubnisse
+Aufenthaltserlaubnissen
+Aufenthaltsfrist
+Aufenthaltsfristen
+Aufenthaltsgenehmigung
+Aufenthaltsgenehmigungen
+Aufenthaltsjahr
+Aufenthaltsjahre
+Aufenthaltsjahren
+Aufenthaltsjahrs
+Aufenthaltsort
+Aufenthaltsorte
+Aufenthaltsorten
+Aufenthaltsortes
+Aufenthaltsorts
+Aufenthaltsraum
+Aufenthaltsraums
+Aufenthaltsräume
+Aufenthaltsräumen
+Auferstehung
+Aufgabe
+Aufgaben
+Aufgabenbereich
+Aufgabenbereiche
+Aufgabenbereichen
+Aufgabenbereichs
+Aufgabenbeschreibung
+Aufgabenbeschreibungen
+Aufgabenfeld
+Aufgabenfelder
+Aufgabenfeldern
+Aufgabenfeldes
+Aufgabenfelds
+Aufgabenheft
+Aufgabenhefte
+Aufgabenheften
+Aufgabenheftes
+Aufgabenhefts
+Aufgabenkreis
+Aufgabenkreise
+Aufgabenkreisen
+Aufgabenkreises
+Aufgabenschein
+Aufgabenscheine
+Aufgabenscheinen
+Aufgabenscheins
+Aufgabenschwerpunkt
+Aufgabenschwerpunkte
+Aufgabenschwerpunkten
+Aufgabenschwerpunktes
+Aufgabenschwerpunkts
+Aufgabenstellung
+Aufgabenstellungen
+Aufgang
+Aufganges
+Aufgangs
+Aufgebot
+Aufgebote
+Aufgeboten
+Aufgebots
+Aufgeklärtheit
+Aufgeld
+Aufgelder
+Aufgeldern
+Aufgeldes
+Aufgelds
+Aufgeschlossenheit
+Aufguss
+Aufgusses
+Aufgänge
+Aufgängen
+Aufgüsse
+Aufgüssen
+Aufhebens
+Aufhebung
+Aufhebungen
+Aufheiterung
+Aufheiterungen
+Aufheizung
+Aufhellung
+Aufhetzer
+Aufhetzerin
+Aufhetzerinnen
+Aufhetzern
+Aufhetzers
+Aufhetzung
+Aufhetzungen
+Aufholbedarf
+Aufholbedarfs
+Aufhänger
+Aufhängern
+Aufhängers
+Aufhängung
+Aufhängungen
+Aufhäufung
+Aufhäufungen
+Aufkauf
+Aufkaufes
+Aufkaufs
+Aufkleber
+Aufklebers
+Aufklärer
+Aufklärern
+Aufklärung
+Aufklärungen
+Aufklärungskampagne
+Aufklärungskampagnen
+Aufkäufe
+Aufkäufen
+Aufkäufer
+Aufkäufern
+Aufl
+Aufmachung
+Aufmarsch
+Aufmarsches
+Aufmerksamkeit
+Aufmerksamkeiten
+Aufmunterung
+Aufmunterungen
+Aufmärsche
+Aufmärschen
+Aufnahme
+Aufnahmeantrag
+Aufnahmeantrages
+Aufnahmeantrags
+Aufnahmeanträge
+Aufnahmeanträgen
+Aufnahmebedingung
+Aufnahmebedingungen
+Aufnahmebereitschaft
+Aufnahmefähigkeit
+Aufnahmefähigkeiten
+Aufnahmegebühr
+Aufnahmegebühren
+Aufnahmekraft
+Aufnahmen
+Aufnahmeprüfung
+Aufnahmeprüfungen
+Aufnahmevermögen
+Aufnahmevermögens
+Aufnehmer
+Aufnehmern
+Aufopferung
+Aufopferungen
+Aufpasser
+Aufpasserin
+Aufpasserinnen
+Aufpassern
+Aufpassers
+Aufprall
+Aufpralle
+Aufpralls
+Aufpreis
+Aufpreise
+Aufpreisen
+Aufpreises
+Aufputschmittel
+Aufputschmitteln
+Aufputschmittels
+Aufputz
+Aufputzes
+Aufqqfangbecken
+Aufqqfangbeckens
+Aufqqfassung
+Aufqqfassungen
+Aufqqfassungsgabe
+Aufqqfassungsvermögen
+Aufqqfassungsvermögens
+Aufqqflackern
+Aufqqforderung
+Aufqqforderungen
+Aufqqfrischung
+Aufqqfächerung
+Aufqqfächerungen
+Aufqqfälligkeit
+Aufqqführung
+Aufqqführungen
+Aufqqfüllung
+Aufqqlader
+Aufqqladern
+Aufqqladers
+Aufqqladung
+Aufqqladungen
+Aufqqlage
+Aufqqlagefläche
+Aufqqlageflächen
+Aufqqlagen
+Aufqqlassung
+Aufqqlassungen
+Aufqqlauf
+Aufqqlaufs
+Aufqqlehnung
+Aufqqlehnungen
+Aufqqlistung
+Aufqqlockerung
+Aufqqlockerungen
+Aufqqlockerungstendenz
+Aufqqlockerungstendenzen
+Aufqqlodern
+Aufqqläufe
+Aufqqläufen
+Aufqqlösung
+Aufqqlösungen
+Aufqqlösungserscheinung
+Aufqqlösungserscheinungen
+Aufqqlösungsprozess
+Aufqqlösungsprozesse
+Aufqqlösungsprozessen
+Aufrechnung
+Aufrechterhaltung
+Aufrechterhaltungen
+Aufregung
+Aufregungen
+Aufrichtigkeit
+Aufrichtung
+Aufrichtungen
+Aufriss
+Aufrisse
+Aufrissen
+Aufrisses
+Aufruf
+Aufrufer
+Aufrufern
+Aufrufers
+Aufrufkontext
+Aufrufkontexte
+Aufrufkontexten
+Aufrufkontextes
+Aufrufs
+Aufrufstelle
+Aufrufstellen
+Aufruhr
+Aufruhrs
+Aufrüstung
+Aufrüstungen
+Aufsatz
+Aufsatzes
+Aufschaukeln
+Aufschlag
+Aufschlags
+Aufschluss
+Aufschlusses
+Aufschläge
+Aufschlägen
+Aufschlüsse
+Aufschlüssen
+Aufschneider
+Aufschneiderei
+Aufschneidereien
+Aufschneidern
+Aufschneiders
+Aufschnitt
+Aufschnitte
+Aufschnittes
+Aufschrei
+Aufschreis
+Aufschrift
+Aufschriften
+Aufschub
+Aufschubs
+Aufschwung
+Aufschwungs
+Aufschübe
+Aufschüben
+Aufsehens
+Aufseher
+Aufseherin
+Aufseherinnen
+Aufsehern
+Aufsehers
+Aufsicht
+Aufsichten
+Aufsichtsbehörde
+Aufsichtsbehörden
+Aufsichtsorgan
+Aufsichtsorgane
+Aufsichtsorganen
+Aufsichtsorgans
+Aufsichtsperson
+Aufsichtspersonen
+Aufsichtspflicht
+Aufsichtsrat
+Aufsichtsrates
+Aufsichtsräte
+Aufsichtsräten
+Aufspaltung
+Aufstand
+Aufstands
+Aufstandsbewegung
+Aufstandsbewegungen
+Aufsteiger
+Aufsteigern
+Aufstellort
+Aufstellorte
+Aufstellorten
+Aufstellorts
+Aufstellplan
+Aufstellplans
+Aufstellpläne
+Aufstellplänen
+Aufstellung
+Aufstellungen
+Aufstellungsplanung
+Aufstellungsplanungen
+Aufstieg
+Aufstiege
+Aufstiegen
+Aufstiegs
+Aufstiegschance
+Aufstiegschancen
+Aufstrich
+Aufstriche
+Aufstrichen
+Aufstrichs
+Aufstände
+Aufständen
+Aufsuchung
+Aufsätze
+Aufsätzen
+Aufteilung
+Auftrag
+Auftrages
+Auftraggeber
+Auftraggebern
+Auftraggebers
+Auftrags
+Auftragsbestand
+Auftragsbestandes
+Auftragsbestätigung
+Auftragsbestätigungen
+Auftragseinwerbung
+Auftragseinwerbungen
+Auftragsentwicklung
+Auftragserteilung
+Auftragserteilungen
+Auftragsforschung
+Auftragsgröße
+Auftragsgrößen
+Auftragslage
+Auftragslagen
+Auftragsvergabe
+Auftragsvergaben
+Auftragswert
+Auftragswertes
+Auftrennung
+Auftretens
+Auftrieb
+Auftriebe
+Auftrieben
+Auftriebs
+Auftriebskraft
+Auftriebskräfte
+Auftriebskräften
+Auftritt
+Auftritte
+Auftritten
+Auftrittes
+Auftritts
+Aufträge
+Aufträgen
+Aufwallung
+Aufwallungen
+Aufwand
+Aufwands
+Aufwartefrau
+Aufwartefrauen
+Aufwartung
+Aufweichung
+Aufwendung
+Aufwendungen
+Aufwertung
+Aufwertungen
+Aufwind
+Aufwinde
+Aufwinden
+Aufwindes
+Aufwurf
+Aufwände
+Aufwänden
+Aufwärmung
+Aufwärtsbewegung
+Aufwärtsbewegungen
+Aufwärtsentwicklung
+Aufwärtsentwicklungen
+Aufwärtstrend
+Aufwärtstrends
+Aufzeichnung
+Aufzeichnungen
+Aufzug
+Aufzugs
+Aufzählung
+Aufzählungen
+Aufzüge
+Aufzügen
+Aug
+Augapfel
+Augapfels
+Auge
+Augen
+Augenaufschlag
+Augenaufschlags
+Augenaufschläge
+Augenaufschlägen
+Augenblick
+Augenblicke
+Augenblicken
+Augenblicks
+Augenhöhe
+Augenlicht
+Augenlichts
+Augenlid
+Augenlider
+Augenlidern
+Augenmaß
+Augenmaße
+Augenmaßen
+Augenmaßes
+Augenmerk
+Augenschein
+Augenscheins
+Augenweide
+Augenweiden
+Augenwinkel
+Augenwinkeln
+Augenwischerei
+Augenwischereien
+Augenzeuge
+Augenzeugen
+Augenzwinkern
+Auges
+Augmentation
+Augmentationen
+Augsburg
+August
+Augustin
+Augustins
+Augusts
+Auktion
+Auktionen
+Aula
+Aura
+Aurel
+Aurels
+Ausarbeitung
+Ausarbeitungen
+Ausartung
+Ausbau
+Ausbaus
+Ausbesserung
+Ausbesserungen
+Ausbesserungsarbeit
+Ausbesserungsarbeiten
+Ausbeutung
+Ausbeutungen
+Ausbilder
+Ausbildern
+Ausbilders
+Ausbildung
+Ausbildungen
+Ausbildungsabschnitt
+Ausbildungsabschnitte
+Ausbildungsabschnitten
+Ausbildungsabschnitts
+Ausbildungsbedingung
+Ausbildungsbedingungen
+Ausbildungsbeihilfe
+Ausbildungsbeihilfen
+Ausbildungsbetrieb
+Ausbildungsbetriebe
+Ausbildungsbetrieben
+Ausbildungsbetriebs
+Ausbildungsdauer
+Ausbildungsförderung
+Ausbildungsjahr
+Ausbildungsjahre
+Ausbildungsjahren
+Ausbildungsjahrs
+Ausbildungsplätze
+Ausbildungsplätzen
+Ausbildungsstätte
+Ausbildungsstätten
+Ausbildungsunterlagen
+Ausbildungswesen
+Ausbildungswesens
+Ausbildungszeit
+Ausbildungszeiten
+Ausbildungszweck
+Ausbildungszwecke
+Ausbildungszwecken
+Ausbildungszwecks
+Ausblick
+Ausblicke
+Ausblicken
+Ausblicks
+Ausbrecher
+Ausbrechern
+Ausbrechers
+Ausbreitung
+Ausbreitungen
+Ausbreitungsbedingung
+Ausbreitungsbedingungen
+Ausbreitungsweg
+Ausbreitungswege
+Ausbreitungswegen
+Ausbreitungswegs
+Ausbruch
+Ausbruchs
+Ausbrüche
+Ausbrüchen
+Ausbuchtung
+Ausbuchtungen
+Auschwitz
+Ausdehnung
+Ausdehnungen
+Ausdehnungskoeffizient
+Ausdehnungskoeffizienten
+Ausdehnungsmöglichkeit
+Ausdehnungsmöglichkeiten
+Ausdehnungsvermögen
+Ausdehnungsvermögens
+Ausdruck
+Ausdruckes
+Ausdrucks
+Ausdrucksbewegung
+Ausdrucksbewegungen
+Ausdrucksform
+Ausdrucksformen
+Ausdruckskraft
+Ausdruckskunst
+Ausdrucksmittel
+Ausdrucksmitteln
+Ausdrucksmittels
+Ausdrucksmöglichkeit
+Ausdrucksmöglichkeiten
+Ausdrucksweise
+Ausdrucksweisen
+Ausdünstung
+Ausdünstungen
+Auseinandersetzung
+Auseinandersetzungen
+Ausfahrt
+Ausfahrten
+Ausfall
+Ausfallquote
+Ausfallquoten
+Ausfallrate
+Ausfallraten
+Ausfalls
+Ausfallursache
+Ausfallursachen
+Ausfallwahrscheinlichkeit
+Ausfallwahrscheinlichkeiten
+Ausfallzeit
+Ausfallzeiten
+Ausfertigung
+Ausfertigungen
+Ausflucht
+Ausflug
+Ausflugs
+Ausfluss
+Ausflusses
+Ausflüchte
+Ausflüchten
+Ausflüge
+Ausflügen
+Ausflügler
+Ausflüglerin
+Ausflüglerinnen
+Ausflüglern
+Ausflüglers
+Ausflüsse
+Ausflüssen
+Ausformung
+Ausformungen
+Ausfuhr
+Ausfälle
+Ausfällen
+Ausführlichkeit
+Ausführung
+Ausführungen
+Ausführungsbestimmung
+Ausführungsbestimmungen
+Ausführungsform
+Ausführungsformen
+Ausführungsgeschwindigkeit
+Ausführungsgeschwindigkeiten
+Ausführungsreihenfolge
+Ausführungsreihenfolgen
+Ausführungszeit
+Ausführungszeiten
+Ausfüllanleitung
+Ausfüllanleitungen
+Ausfüllung
+Ausgabe
+Ausgabebehandlung
+Ausgabeeinheit
+Ausgabeeinheiten
+Ausgabefunktion
+Ausgabegeschwindigkeit
+Ausgabekanal
+Ausgabekanäle
+Ausgabekarte
+Ausgabeknoten
+Ausgabekommando
+Ausgabekommandos
+Ausgabemodul
+Ausgabemodule
+Ausgaben
+Ausgaberechner
+Ausgabetreiber
+Ausgang
+Ausganges
+Ausgangs
+Ausgangsbasis
+Ausgangshypothese
+Ausgangshypothesen
+Ausgangsimpuls
+Ausgangslage
+Ausgangslagen
+Ausgangsleistung
+Ausgangsleistungen
+Ausgangsmaterial
+Ausgangspin
+Ausgangspins
+Ausgangsposition
+Ausgangspositionen
+Ausgangspunkt
+Ausgangspunkte
+Ausgangspunkten
+Ausgangspunktes
+Ausgangssituation
+Ausgangssituationen
+Ausgangsspannung
+Ausgangsspannungen
+Ausgangsspannungsbereich
+Ausgangsstromstärke
+Ausgangstransistor
+Ausgangszustand
+Ausgangszustandes
+Ausgangszustands
+Ausgeber
+Ausgebern
+Ausgeburt
+Ausgeburten
+Ausgeglichenheit
+Ausgelassenheit
+Ausgereiftheit
+Ausgesetztheit
+Ausgesetztheiten
+Ausgestaltung
+Ausgestaltungen
+Ausgewogenheit
+Ausgleich
+Ausgleicher
+Ausgleichern
+Ausgleichers
+Ausgleichs
+Ausgleichszahlung
+Ausgleichszahlungen
+Ausgleichung
+Ausgleichungen
+Ausgliederung
+Ausgliederungen
+Ausgrabung
+Ausgrabungen
+Ausgrenzung
+Ausgrenzungen
+Ausguck
+Ausguss
+Ausgusses
+Ausgänge
+Ausgängen
+Ausgüsse
+Ausgüssen
+Aushang
+Aushangs
+Aushebung
+Aushebungen
+Aushilfe
+Aushilfen
+Aushändigung
+Aushändigungen
+Aushängeschild
+Aushängeschilder
+Aushängeschildern
+Aushöhlung
+Aushöhlungen
+Ausklammerung
+Auskoppelung
+Auskunft
+Auskünfte
+Auskünften
+Ausladung
+Ausladungen
+Auslage
+Auslagen
+Auslagerung
+Ausland
+Auslandes
+Auslands
+Auslandsaufenthalt
+Auslandsaufenthalte
+Auslandsaufenthalten
+Auslandsaufenthalts
+Auslandserfahrung
+Auslandserfahrungen
+Auslass
+Auslassung
+Auslassungen
+Auslassungszeichen
+Auslassungszeichens
+Auslastung
+Auslauf
+Auslaufes
+Auslaufs
+Auslaut
+Auslautes
+Ausleger
+Auslegern
+Auslegers
+Auslegung
+Auslegungen
+Ausleihung
+Ausleihungen
+Auslenkung
+Ausleseprozess
+Ausleseprozesse
+Ausleseprozessen
+Ausleseprozesses
+Ausleseverfahren
+Ausleseverfahrens
+Auslesung
+Auslieferer
+Auslieferern
+Auslieferung
+Auslieferungen
+Ausländer
+Ausländerhass
+Ausländerhasses
+Ausländerin
+Ausländerinnen
+Ausländern
+Ausländers
+Ausläufe
+Ausläufen
+Ausläufer
+Ausläufern
+Auslöschung
+Auslöser
+Auslösern
+Auslösers
+Auslösung
+Ausmaß
+Ausmaße
+Ausmaßen
+Ausmaßes
+Ausmerzung
+Ausmessung
+Ausnahme
+Ausnahmebestimmung
+Ausnahmebestimmungen
+Ausnahmeerscheinung
+Ausnahmeerscheinungen
+Ausnahmefall
+Ausnahmefalles
+Ausnahmefalls
+Ausnahmefälle
+Ausnahmefällen
+Ausnahmegenehmigung
+Ausnahmegenehmigungen
+Ausnahmen
+Ausnahmesituation
+Ausnahmesituationen
+Ausnahmezustand
+Ausnahmezustandes
+Ausnahmezustände
+Ausnahmezuständen
+Ausnutzung
+Ausnutzungen
+Ausnutzungsgrad
+Ausnutzungsgrade
+Ausnutzungsgraden
+Ausnutzungsgrades
+Ausnutzungsgrads
+Ausnützung
+Ausplünderung
+Ausplünderungen
+Ausprägung
+Ausprägungen
+Auspuff
+Auspuffe
+Auspuffen
+Auspuffes
+Auspuffs
+Ausrechnung
+Ausrechnungen
+Ausreißer
+Ausreißerin
+Ausreißerinnen
+Ausreißern
+Ausreißers
+Ausrichtung
+Ausritt
+Ausrittes
+Ausrottung
+Ausruf
+Ausrufezeichen
+Ausrufezeichens
+Ausrufs
+Ausrufungszeichen
+Ausrufungszeichens
+Ausrutscher
+Ausrutschern
+Ausrutschers
+Ausrüster
+Ausrüstern
+Ausrüsters
+Ausrüstung
+Ausrüstungen
+Ausrüstungsgegenstände
+Ausrüstungsgegenständen
+Ausrüstungsteil
+Ausrüstungsteile
+Ausrüstungsteilen
+Ausrüstungsteils
+Aussagegehalt
+Aussagegehaltes
+Aussagegehalts
+Aussagekraft
+Ausschalter
+Ausschaltern
+Ausschaltung
+Ausschaltungen
+Ausschank
+Ausschankes
+Ausschanks
+Ausscheidung
+Ausscheidungen
+Ausschlag
+Ausschlags
+Ausschluss
+Ausschlusses
+Ausschläge
+Ausschlägen
+Ausschlüsse
+Ausschlüssen
+Ausschnitt
+Ausschnitte
+Ausschnitten
+Ausschnittes
+Ausschnitts
+Ausschreibung
+Ausschreibungen
+Ausschreitung
+Ausschreitungen
+Ausschuss
+Ausschusses
+Ausschussmitglied
+Ausschussmitglieder
+Ausschussmitgliedern
+Ausschusssitzung
+Ausschusssitzungen
+Ausschusstagung
+Ausschusstagungen
+Ausschussvorsitzende
+Ausschussvorsitzenden
+Ausschussvorsitzender
+Ausschweifung
+Ausschweifungen
+Ausschänke
+Ausschänken
+Ausschöpfung
+Ausschüsse
+Ausschüssen
+Ausschüttung
+Ausschüttungen
+Aussehens
+Aussetzer
+Aussetzern
+Aussetzers
+Aussetzung
+Aussetzungen
+Aussicht
+Aussichten
+Aussichtslage
+Aussichtslagen
+Aussichtslosigkeit
+Aussichtspunkt
+Aussichtspunkte
+Aussichtspunkten
+Aussichtspunktes
+Aussichtstürme
+Aussichtstürmen
+Aussiedler
+Aussiedlern
+Aussparung
+Aussparungen
+Aussprache
+Aussprachen
+Ausspruch
+Ausspruchs
+Aussprüche
+Aussprüchen
+Ausstaffierung
+Ausstand
+Ausstandes
+Ausstands
+Ausstatter
+Ausstattern
+Ausstattung
+Ausstattungen
+Aussteigens
+Aussteller
+Ausstellerin
+Ausstellerinnen
+Ausstellern
+Ausstellers
+Ausstellung
+Ausstellungen
+Aussterbens
+Aussteuer
+Aussteuern
+Ausstieg
+Ausstiegs
+Ausstoß
+Ausstoßes
+Ausstoßung
+Ausstoßungen
+Ausstrahlung
+Ausstrahlungen
+Ausstrahlungskraft
+Ausströmung
+Ausstände
+Ausständen
+Ausstöße
+Ausstößen
+Aussöhnung
+Austausch
+Austauschbarkeit
+Austausches
+Austeilung
+Austenit
+Austenite
+Austeniten
+Austenits
+Auster
+Austern
+Austragung
+Austragungen
+Australien
+Australier
+Australierin
+Australierinnen
+Australiern
+Australiers
+Austreibung
+Austreibungen
+Austriazismen
+Austriazismus
+Austritt
+Austritte
+Austritten
+Austrittes
+Austrittsdüse
+Austrittsdüsen
+Austrittserklärung
+Austrittserklärungen
+Ausuferung
+Ausuferungen
+Ausverkauf
+Ausverkaufs
+Ausverkäufe
+Ausverkäufen
+Auswahl
+Auswahlmöglichkeit
+Auswahlmöglichkeiten
+Auswahloperation
+Auswahloperationen
+Auswahloperator
+Auswahloperatoren
+Auswahlverfahren
+Auswahlverfahrens
+Auswanderer
+Auswanderern
+Auswanderers
+Auswanderung
+Auswechselung
+Auswechselungen
+Auswechslung
+Auswechslungen
+Ausweg
+Auswege
+Auswegen
+Auswegs
+Ausweichmöglichkeit
+Ausweichmöglichkeiten
+Ausweichstelle
+Ausweichstellen
+Ausweis
+Ausweises
+Ausweispapier
+Ausweispapiere
+Ausweispapieren
+Ausweispapiers
+Ausweisung
+Ausweisungen
+Ausweitung
+Auswertesoftware
+Auswertung
+Auswertungen
+Auswertungsreihenfolge
+Auswertungsreihenfolgen
+Auswirkung
+Auswirkungen
+Auswuchs
+Auswuchses
+Auswüchse
+Auswüchsen
+Auszahlung
+Auszahlungen
+Auszehrung
+Auszeichnung
+Auszeichnungen
+Auszug
+Auszugs
+Auszüge
+Auszügen
+Ausübung
+Ausübungen
+Autarkie
+Authentizität
+Auto
+Autobahn
+Autobahnen
+Autobiografie
+Autobiografien
+Autobiographie
+Autobiographien
+Autobus
+Autobusse
+Autobussen
+Autobusses
+Autodidakt
+Autodidakten
+Autodidaktik
+Autofahrer
+Autofahrern
+Autofahrers
+Autofahrt
+Autofahrten
+Autogramm
+Autogramme
+Autogrammen
+Autogramms
+Autograph
+Autographen
+Automat
+Automaten
+Automatentheorie
+Automatik
+Automatikdatei
+Automatikdateien
+Automatiken
+Automation
+Automationen
+Automatisierung
+Automatisierungen
+Automatismus
+Automobil
+Automobile
+Automobilen
+Automobils
+Autonomie
+Autopsie
+Autopsien
+Autor
+Autoren
+Autorenkollektiv
+Autorenkollektivs
+Autorin
+Autorinnen
+Autorisierung
+Autorität
+Autoritäten
+Autors
+Autorschaft
+Autos
+Auvergne
+Außenabmessung
+Außenabmessungen
+Außenanlage
+Außenanlagen
+Außenansicht
+Außenansichten
+Außenbezirk
+Außenbezirke
+Außenbezirken
+Außenbezirks
+Außendienst
+Außendienstes
+Außendruck
+Außendrucks
+Außenfassade
+Außenfassaden
+Außenfläche
+Außenflächen
+Außengehäuse
+Außengehäusen
+Außengruppe
+Außengruppen
+Außenhaut
+Außenkante
+Außenkanten
+Außenlinie
+Außenlinien
+Außenmaße
+Außenmaßen
+Außenposten
+Außenpostens
+Außenprüfung
+Außenprüfungen
+Außenreihe
+Außenreihen
+Außenseite
+Außenseiten
+Außenseiter
+Außenseiterin
+Außenseiterinnen
+Außenseitern
+Außenseiters
+Außenstelle
+Außenstellen
+Außenstände
+Außenständen
+Außentür
+Außentüren
+Außenverhältnis
+Außenverhältnisse
+Außenverhältnissen
+Außenverhältnisses
+Außenvertretung
+Außenvertretungen
+Außenwelt
+Außenwände
+Außenwänden
+Außerachtlassung
+Außerbetriebnahme
+Außerbetriebnahmen
+Avantgarde
+Avantgarden
+Aversion
+Aversionen
+Aviv
+Avocado
+Avocados
+Avogadro
+Avogadros
+Axel
+Axels
+Axiom
+Axiome
+Axiomen
+Axioms
+Axt
+Azalee
+Azaleen
+Azetat
+Azetate
+Azetaten
+Azetats
+Azteken
+Aztekenreich
+Azur
+BASF
+BBC
+BGB
+BH
+BIOS
+BKA
+BMW
+BP
+BRD
+BTX
+BVG
+Babel
+Baby
+Babylon
+Babylonier
+Babys
+Bach
+Baches
+Bachs
+Backup
+Bad
+Bades
+Badminton
+Bafög
+Bagatelle
+Bagatellen
+Bagdad
+Bagger
+Baggers
+Bahamas
+Bahn
+Bahnbrecher
+Bahnbrechern
+Bahnbrechers
+Bahndämme
+Bahndämmen
+Bahnen
+Bahnhof
+Bahnhofs
+Bahnhöfe
+Bahnhöfen
+Bahnkurve
+Bahnkurven
+Bahre
+Bahrein
+Bahren
+Bai
+Baien
+Baiser
+Baisse
+Baissen
+Bajonett
+Bajonette
+Bajonetten
+Bajonetts
+Bakschisch
+Bakterie
+Bakterien
+Bakteriologe
+Bakteriologen
+Balance
+Balanceakt
+Balanceakte
+Balanceakten
+Balanceaktes
+Balanceakts
+Balancen
+Balboa
+Balearen
+Bali
+Balkan
+Balkanländer
+Balken
+Balkenanzeige
+Balkenanzeigen
+Balkendarstellung
+Balkendarstellungen
+Balkens
+Balkenwaage
+Balkenwaagen
+Balkon
+Balkone
+Balkonen
+Balkons
+Ball
+Ballade
+Balladen
+Ballast
+Ballastes
+Ballen
+Ballens
+Ballerina
+Ballerinen
+Ballett
+Ballettes
+Balletts
+Balletttänzer
+Balletttänzerin
+Balletttänzerinnen
+Balletttänzern
+Balletttänzers
+Ballistik
+Ballon
+Ballons
+Balls
+Ballsaal
+Ballsaales
+Ballsaals
+Ballsäle
+Ballsälen
+Ballung
+Ballungen
+Ballungsgebiet
+Ballungsgebiete
+Ballungsgebieten
+Ballungsgebietes
+Ballungsgebiets
+Ballungsraum
+Ballungsraumes
+Ballungsraums
+Ballungsräume
+Ballungsräumen
+Ballungszentrum
+Balsam
+Balsams
+Balte
+Balten
+Baltikum
+Baltin
+Baltinnen
+Bamberg
+Bambi
+Banalität
+Banalitäten
+Banane
+Bananen
+Banause
+Banausen
+Banausentum
+Band
+Bandage
+Bandagen
+Bandagist
+Bandagisten
+Bandbreite
+Bandbreiten
+Bande
+Bandes
+Bandit
+Banditen
+Bandpass
+Bandpasses
+Bandpässe
+Bandpässen
+Bands
+Bangemänner
+Bangkok
+Bangladesh
+Banjo
+Banjos
+Bank
+Banken
+Bankensoftware
+Banker
+Bankern
+Bankett
+Bankette
+Banketten
+Banketts
+Bankier
+Bankiers
+Bann
+Banner
+Bannern
+Banners
+Bannerträger
+Bannstrahl
+Bannung
+Bantu
+Baptist
+Baptisten
+Baptisterium
+Baptisteriums
+Bar
+Baracke
+Baracken
+Barauszahlung
+Barauszahlungen
+Barbar
+Barbara
+Barbaras
+Barbarella
+Barbarellas
+Barbaren
+Barbestand
+Barbestandes
+Barbestände
+Barbeständen
+Barbetrag
+Barbetrages
+Barbetrags
+Barbeträge
+Barbeträgen
+Barbie
+Barbier
+Barbiere
+Barbieren
+Barbiers
+Barbies
+Barcelona
+Barclays
+Barcode
+Barcodes
+Bardame
+Bardamen
+Barde
+Barden
+Barentssee
+Bargeld
+Bargelder
+Bargeldern
+Bargeldes
+Bargelds
+Bariton
+Baritone
+Baritonen
+Baritons
+Barium
+Bark
+Barkasse
+Barkassen
+Barke
+Barken
+Barmherzigkeit
+Barmittel
+Barnabas
+Barock
+Barometer
+Baron
+Barone
+Baronen
+Baronin
+Baroninnen
+Barons
+Barrakuda
+Barrakudas
+Barrel
+Barren
+Barrens
+Barreserve
+Barreserven
+Barriere
+Barrieren
+Barrikade
+Barrikaden
+Bars
+Barschaft
+Barschaften
+Bart
+Bartes
+Bartholdy
+Bartholdys
+Barzahlung
+Barzahlungen
+Basalt
+Basar
+Basare
+Basaren
+Basars
+Base
+Basel
+Basen
+Basic
+Basilika
+Basis
+Basisadresse
+Basisadressen
+Basisarbeit
+Basisarbeiten
+Basisblock
+Basisblocks
+Basisblöcke
+Basisblöcken
+Basisdaten
+Basisdatentyp
+Basisdatentypen
+Basisdatentyps
+Basisfirmware
+Basisgröße
+Basisgrößen
+Basismaterial
+Basisoperation
+Basisoperationen
+Basissoftware
+Basistechnik
+Basistechniken
+Basistyp
+Basistypen
+Basistyps
+Basisvektor
+Basisvektoren
+Basisvektors
+Basiswissen
+Basiswissens
+Basken
+Baskenland
+Baskenlandes
+Baskenmütze
+Baskenmützen
+Basketball
+Basketballs
+Basketbälle
+Basketbällen
+Basler
+Baslern
+Bass
+Basses
+Bassin
+Bassins
+Bassist
+Bassisten
+Bast
+Bastard
+Bastarde
+Bastarden
+Bastardes
+Bastards
+Bastelei
+Basteleien
+Bastelstube
+Bastelstuben
+Bastelstunde
+Bastelstunden
+Bastes
+Bastille
+Bastion
+Bastionen
+Bataillon
+Bataillone
+Bataillonen
+Bataillons
+Bataillonsstärke
+Batik
+Batiken
+Batist
+Batiste
+Batistes
+Bator
+Batterie
+Batterien
+Batzen
+Bau
+Bauanleitung
+Bauanleitungen
+Bauart
+Bauarten
+Bauch
+Bauches
+Bauchlandung
+Bauchlandungen
+Bauchmuskel
+Bauchmuskeln
+Baudrate
+Baudraten
+Baudratenbestimmung
+Bauelement
+Bauelemente
+Bauelementen
+Bauelementes
+Bauelements
+Bauer
+Bauern
+Bauers
+Bauform
+Bauformen
+Baugruppe
+Baugruppen
+Baujahr
+Baujahre
+Baujahren
+Baujahrs
+Baukasten
+Baukastens
+Baukastensystem
+Baukastensysteme
+Baukastensystemen
+Baukastensystems
+Baukästen
+Baum
+Baumdarstellung
+Baumes
+Baums
+Baumsprache
+Baumsprachen
+Baumstamm
+Baumstamms
+Baumstämme
+Baumstämmen
+Baureihe
+Baureihen
+Baus
+Baustein
+Bausteine
+Bausteinen
+Bausteines
+Bausteins
+Baustelle
+Baustellen
+Bausätze
+Bausätzen
+Bauteil
+Bauteile
+Bauteilen
+Bauteils
+Bauweise
+Bauweisen
+Bauwerk
+Bauwerke
+Bauwerken
+Bauwerkes
+Bauxit
+Bauzeit
+Bauzeiten
+Bavaria
+Bavarias
+Bayer
+Bayerin
+Bayerinnen
+Bayern
+Bayers
+Bayeux
+Bayonne
+Bazille
+Bazillen
+Bde
+Bea
+Beachtung
+Beamte
+Beamten
+Beamter
+Beamtin
+Beamtinnen
+Beanspruchung
+Beanspruchungen
+Beanstandung
+Beanstandungen
+Beantragungsfrist
+Beantragungsfristen
+Beantwortung
+Bearbeitung
+Bearbeitungen
+Bearbeitungsfunktion
+Bearbeitungsfunktionen
+Beas
+Beate
+Beates
+Beatles
+Beatmung
+Beatrice
+Beatrices
+Beatrix
+Beaufschlagung
+Beaufschlagungen
+Beaufsichtigung
+Beaufsichtigungen
+Beaujolais
+Bebauungsplan
+Bebauungsplans
+Becher
+Bechern
+Bechers
+Becken
+Beckens
+Beckmann
+Beckmanns
+Becquerel
+Becquerels
+Bedachtsamkeit
+Bedarf
+Bedarfs
+Bedarfsartikel
+Bedarfsartikeln
+Bedarfsartikels
+Bedarfsfall
+Bedarfsfalls
+Bedarfssituation
+Bedarfssituationen
+Bedarfsäußerung
+Bedarfsäußerungen
+Bedenkzeit
+Bedenkzeiten
+Bedeutsamkeit
+Bedeutung
+Bedeutungen
+Bedeutungserweiterung
+Bedeutungserweiterungen
+Bedeutungslosigkeit
+Bedienanleitung
+Bedienanleitungen
+Bedienbarkeit
+Bedienebene
+Bedienebenen
+Bedieneinheit
+Bedieneinheiten
+Bedieneinrichtung
+Bedieneinrichtungen
+Bedienelement
+Bedienelemente
+Bedienelementen
+Bedienelementes
+Bedienelements
+Bediener
+Bedienern
+Bedieneroberfläche
+Bedieneroberflächen
+Bedieners
+Bedienfeld
+Bedienfelds
+Bedienfunktion
+Bedienfunktionen
+Bedienkomfort
+Bedienmannschaft
+Bedienmannschaften
+Bedienmöglichkeit
+Bedienmöglichkeiten
+Bedienoberfläche
+Bedienoberflächen
+Bedienperson
+Bedienpersonal
+Bedienpersonals
+Bedienpersonen
+Bedienpult
+Bedienstete
+Bediensteten
+Bediensteter
+Bedientastatur
+Bedientastaturen
+Bedienung
+Bedienungen
+Bedienungsanleitung
+Bedienungsanleitungen
+Bedienungseinrichtung
+Bedienungseinrichtungen
+Bedienungselement
+Bedienungselemente
+Bedienungselementen
+Bedienungselementes
+Bedienungselements
+Bedienungsweise
+Bedienungsweisen
+Bedienwünsche
+Bedienwünschen
+Bedingung
+Bedingungen
+Bedrohung
+Bedrohungen
+Bedrouille
+Bedrängnis
+Bedrängnisse
+Bedrängnissen
+Bedrückung
+Bedürfnis
+Bedürfnisanstalt
+Bedürfnisanstalten
+Bedürfnisse
+Bedürfnissen
+Bedürfnisses
+Bedürftigkeit
+Beefsteak
+Beefsteaks
+Beeinflussbarkeit
+Beeinflussung
+Beeinflussungen
+Beeinträchtigung
+Beeinträchtigungen
+Beendigung
+Beendigungen
+Beerdigung
+Beerdigungen
+Beere
+Beeren
+Beet
+Beete
+Beeten
+Beetes
+Beethoven
+Beethovens
+Befehl
+Befehle
+Befehlen
+Befehls
+Befehlsausführung
+Befehlscode
+Befehlscodes
+Befehlsfolge
+Befehlsfolgen
+Befehlsform
+Befehlsformen
+Befehlshaber
+Befehlshabern
+Befehlshabers
+Befehlssatz
+Befehlssequenzen
+Befehlsstruktur
+Befehlsstrukturen
+Befehlston
+Befehlstons
+Befehlswort
+Befehlsworte
+Befehlsworten
+Befehlswortes
+Befehlsworts
+Befehlswörter
+Befehlswörtern
+Befestigung
+Befestigungen
+Befindlichkeit
+Befindlichkeiten
+Befolger
+Befolgung
+Befrager
+Befragungsaktion
+Befragungsaktionen
+Befragungsgruppe
+Befragungsgruppen
+Befreier
+Befreierin
+Befreierinnen
+Befreiern
+Befreiers
+Befreiung
+Befreiungsschlag
+Befreiungsschlages
+Befreiungsschlags
+Befreiungsschläge
+Befreiungsschlägen
+Befremdung
+Befriedigung
+Befriedung
+Befruchtung
+Befruchtungen
+Befugnis
+Befugnisse
+Befugnissen
+Befund
+Befunde
+Befundes
+Befähigung
+Befähigungen
+Beförderung
+Beförderungen
+Befürchtung
+Befürchtungen
+Befürworter
+Befürwortern
+Befürwortung
+Befürwortungen
+Begabtenförderung
+Begabung
+Begabungen
+Begebenheit
+Begebenheiten
+Begegnung
+Begegnungen
+Begehrlichkeit
+Begehrlichkeiten
+Begehrtheit
+Begeisterung
+Begierde
+Begierden
+Beginn
+Beginns
+Beglaubigung
+Beglaubigungen
+Beglaubigungsschreiben
+Beglaubigungsschreibens
+Begleichung
+Begleichungen
+Begleitbrief
+Begleitbriefe
+Begleitbriefen
+Begleitbriefes
+Begleitbriefs
+Begleiter
+Begleiterin
+Begleiterinnen
+Begleitern
+Begleiters
+Begleiterscheinung
+Begleiterscheinungen
+Begleitheft
+Begleithefte
+Begleitheften
+Begleitheftes
+Begleithefts
+Begleitperson
+Begleitpersonal
+Begleitpersonals
+Begleitpersonen
+Begleitschreiben
+Begleitschreibens
+Begleitumstand
+Begleitumstandes
+Begleitumstände
+Begleitumständen
+Begleitung
+Begleitungen
+Beglückwünschung
+Begnadigung
+Begnadigungen
+Begonie
+Begonien
+Begradigung
+Begrenztheit
+Begrenzung
+Begrenzungen
+Begrenzungslinie
+Begrenzungslinien
+Begriff
+Begriffe
+Begriffen
+Begriffes
+Begriffs
+Begriffsbestimmung
+Begriffsbestimmungen
+Begriffsbildung
+Begriffsbildungen
+Begriffsebene
+Begriffsebenen
+Begriffsvermögen
+Begriffsvermögens
+Begräbnis
+Begräbnisse
+Begräbnissen
+Begräbnisses
+Begründer
+Begründerin
+Begründerinnen
+Begründern
+Begründers
+Begründung
+Begründungen
+Begründungsschritt
+Begründungsschritte
+Begründungsschritten
+Begründungsschritts
+Begrüßung
+Begrüßungskuss
+Begrüßungskusses
+Begrüßungsküsse
+Begrüßungsküssen
+Begutachtung
+Begutachtungen
+Begünstigung
+Begünstigungen
+Behaglichkeit
+Behandlung
+Behandlungen
+Behandlungserfolge
+Behandlungserfolgen
+Behandlungsmethode
+Behandlungsmethoden
+Behang
+Behanges
+Behangs
+Beharrlichkeit
+Behauptung
+Behauptungen
+Behausung
+Behausungen
+Behaviorist
+Behavioristen
+Behebung
+Behebungsversuch
+Behebungsversuche
+Behebungsversuchen
+Behebungsversuchs
+Beheizung
+Behelf
+Behelfe
+Behelfen
+Behelfes
+Behelfs
+Behelligung
+Behelligungen
+Beherrscher
+Beherrschtheit
+Beherrschung
+Beherztheit
+Behinderung
+Behinderungen
+Behr
+Behrs
+Behutsamkeit
+Behäbigkeit
+Behälter
+Behältern
+Behälters
+Behändigkeit
+Behänge
+Behängen
+Behörde
+Behörden
+Beibehaltung
+Beifall
+Beifalls
+Beifügung
+Beigeschmack
+Beigeschmackes
+Beigeschmacks
+Beihilfe
+Beihilfen
+Beil
+Beilage
+Beilagen
+Beile
+Beilegung
+Beileid
+Beilen
+Beiles
+Beils
+Beimengung
+Beimengungen
+Bein
+Beiname
+Beinamen
+Beinamens
+Beinchen
+Beinchens
+Beine
+Beinen
+Beines
+Beins
+Beipflichtung
+Beipflichtungen
+Beirat
+Beirates
+Beirats
+Beiratstreffen
+Beiratstreffens
+Beiräte
+Beiräten
+Beisammensein
+Beischlaf
+Beisein
+Beiseins
+Beisetzung
+Beisitzer
+Beispiel
+Beispieldialog
+Beispieldialoge
+Beispieldialogen
+Beispieldialogs
+Beispiele
+Beispielen
+Beispiellosigkeit
+Beispiellosigkeiten
+Beispielprogramm
+Beispielprogramme
+Beispiels
+Beistand
+Beistellung
+Beitrag
+Beitrages
+Beitrags
+Beitragsaufkommen
+Beitragsaufkommens
+Beitragseinnahme
+Beitragseinnahmen
+Beitragserhöhung
+Beitragserhöhungen
+Beitragshöhe
+Beitragshöhen
+Beitragszahlung
+Beitragszahlungen
+Beitritt
+Beitritte
+Beitritten
+Beitritts
+Beitrittsbedingung
+Beitrittsbedingungen
+Beiträge
+Beiträgen
+Beiwagen
+Beiwagens
+Beiwort
+Beiwortes
+Beiworts
+Beiwörter
+Beiwörtern
+Bejahung
+Bejahungen
+Bekanntenkreis
+Bekanntenkreise
+Bekanntenkreisen
+Bekanntenkreises
+Bekanntgabe
+Bekanntheit
+Bekanntheitsgrad
+Bekanntheitsgrades
+Bekanntmachung
+Bekanntmachungen
+Bekanntschaft
+Bekanntschaften
+Bekanntwerden
+Bekanntwerdens
+Bekehrung
+Bekenntnis
+Bekenntnisfreiheit
+Bekenntnisse
+Bekenntnissen
+Bekenntnisses
+Bekleidung
+Bekleidungen
+Beklemmung
+Beklemmungen
+Bekräftigung
+Bekräftigungen
+Bekundung
+Bekundungen
+Bekämpfung
+Bekömmlichkeit
+Beköstigung
+Bekümmernis
+Bekümmernisse
+Bekümmernissen
+Belag
+Belagerer
+Belagerern
+Belagerung
+Belagerungen
+Belages
+Belags
+Belang
+Belange
+Belangen
+Belanglosigkeit
+Belanglosigkeiten
+Belangs
+Belastbarkeit
+Belastung
+Belastungen
+Belastungsgrenze
+Belastungsgrenzen
+Belastungstest
+Belastungstests
+Belebung
+Belebungsmaßnahme
+Belebungsmaßnahmen
+Beleg
+Belege
+Belegen
+Beleges
+Belegs
+Belegschaft
+Belegschaften
+Belegschein
+Belegscheine
+Belegscheinen
+Belegscheines
+Belegstelle
+Belegstellen
+Belegung
+Belegungen
+Belehrung
+Belehrungen
+Beleidigung
+Beleidigungen
+Beleihung
+Beleihungen
+Belesenheit
+Beleuchtung
+Beleuchtungen
+Belfast
+Belgien
+Belgiens
+Belgier
+Belgierin
+Belgierinnen
+Belgiern
+Belgiers
+Belgrader
+Belichtung
+Belichtungen
+Beliebigkeit
+Beliebtheit
+Beliebtheitsgrad
+Belieferung
+Belize
+Belletristik
+Belobigung
+Belobigungen
+Belohnung
+Belohnungen
+Belustigung
+Belustigungen
+Beläge
+Belägen
+Belästigung
+Belästigungen
+Bemerkung
+Bemerkungen
+Bemühung
+Bemühungen
+Ben
+Benachrichtigung
+Benachrichtigungen
+Benachteiligung
+Benachteiligungen
+Benchmark
+Benchmarks
+Benediktiner
+Benediktinerin
+Benediktinerinnen
+Benediktinern
+Benediktiners
+Benehmens
+Benelux
+Beneluxstaaten
+Benennung
+Benennungen
+Benetton
+Bengel
+Bengeln
+Bengels
+Benommenheit
+Benotung
+Benotungssystem
+Benotungssysteme
+Benotungssystemen
+Benotungssystems
+Bens
+Bentley
+Bentleys
+Benutzbarkeit
+Benutzer
+Benutzerebene
+Benutzerebenen
+Benutzerinterface
+Benutzerinterfaces
+Benutzern
+Benutzeroberfläche
+Benutzeroberflächen
+Benutzerprogramm
+Benutzerprogramme
+Benutzerprogrammen
+Benutzerprogramms
+Benutzers
+Benutzerwünsche
+Benutzerwünschen
+Benutzung
+Benutzungen
+Benutzungshinweis
+Benutzungshinweise
+Benutzungshinweisen
+Benutzungshinweises
+Benutzungsmöglichkeit
+Benutzungsmöglichkeiten
+Benzin
+Benzins
+Benzol
+Benützer
+Beo
+Beobachter
+Beobachterin
+Beobachterinnen
+Beobachtern
+Beobachters
+Beobachtung
+Beobachtungen
+Beobachtungsgabe
+Beobachtungsgaben
+Beos
+Bepflanzung
+Bepflanzungen
+Beplankung
+Bequemlichkeit
+Bequemlichkeiten
+Bequemlichkeitsgründe
+Bequemlichkeitsgründen
+Berater
+Beraterin
+Beraterinnen
+Beratern
+Beraters
+Beratschlager
+Beratschlagern
+Beratschlagers
+Beratung
+Beratungen
+Beratungsaufgabe
+Beratungsaufgaben
+Beratungsausschuss
+Beratungsausschusses
+Beratungsausschüsse
+Beratungsausschüssen
+Beratungsbüro
+Beratungsbüros
+Beratungsgegenstand
+Beratungsgegenstandes
+Beratungsgegenstands
+Beratungsgegenstände
+Beratungsgegenständen
+Beratungsgesellschaft
+Beratungsgesellschaften
+Beratungsphase
+Beratungsphasen
+Beratungspunkt
+Beratungspunkte
+Beratungspunkten
+Beratungspunktes
+Beratungspunkts
+Beratungsraum
+Beratungsraumes
+Beratungsraums
+Beratungsräume
+Beratungsräumen
+Beratungsstelle
+Beratungsstellen
+Beratungstisch
+Beratungstisches
+Beratungstischs
+Beratungstätigkeit
+Beratungstätigkeiten
+Beratungsverfahren
+Beratungsverfahrens
+Beraubung
+Beraubungen
+Berauschtheit
+Berauschung
+Berechenbarkeit
+Berechenbarkeitstheorie
+Berechenbarkeitstheorien
+Berechnung
+Berechnungen
+Berechnungsergebnis
+Berechnungsergebnisse
+Berechnungsergebnissen
+Berechnungsergebnisses
+Berechnungsgrundlage
+Berechnungsgrundlagen
+Berechnungsmethode
+Berechnungsmethoden
+Berechnungsverfahren
+Berechnungsverfahrens
+Berechtigung
+Berechtigungen
+Berechtigungsnachweis
+Berechtigungsnachweisen
+Berechtigungsnachweises
+Berechtigungsschein
+Berechtigungsscheine
+Berechtigungsscheinen
+Berechtigungsscheines
+Berechtigungsscheins
+Beredsamkeit
+Bereich
+Bereiche
+Bereichen
+Bereicherung
+Bereicherungen
+Bereiches
+Bereichs
+Bereichsbegrenzung
+Bereichsbegrenzungen
+Bereichsgrenze
+Bereichsgrenzen
+Bereichsmaximum
+Bereichsminimum
+Bereichsmitte
+Bereichsüberschreitung
+Bereichsüberschreitungen
+Bereifung
+Bereifungen
+Bereinigung
+Bereinigungsprozess
+Bereinigungsprozesse
+Bereinigungsprozessen
+Bereinigungsprozesses
+Bereithaltung
+Bereitschaft
+Bereitschaften
+Bereitschaftsdienst
+Bereitschaftsdienste
+Bereitschaftsdiensten
+Bereitschaftsdienstes
+Bereitstellung
+Bereitstellungen
+Bereitung
+Bereitungen
+Bereitwilligkeit
+Berg
+Bergbau
+Bergbaus
+Berges
+Bergs
+Bergung
+Bergungen
+Bergwerk
+Bergwerke
+Bergwerken
+Bergwerks
+Bericht
+Berichte
+Berichten
+Berichterstatter
+Berichterstatterin
+Berichterstatterinnen
+Berichterstattern
+Berichterstatters
+Berichterstattung
+Berichtes
+Berichtigung
+Berichtigungen
+Berichts
+Berichtsheft
+Berichtshefte
+Berichtsheften
+Berichtsheftes
+Berichtshefts
+Berichtskritik
+Berichtszeitraum
+Berichtszeitraums
+Beriemung
+Berieselung
+Berlin
+Berliner
+Berlinerin
+Berlinerinnen
+Berlinern
+Berliners
+Bermudas
+Bern
+Bernadotte
+Bernadottes
+Bernd
+Bernds
+Berner
+Bernern
+Bernhard
+Bernhardiner
+Bernhardiners
+Bernhards
+Bernhardt
+Bernhardts
+Bernstein
+Bernsteins
+Berserker
+Bert
+Berta
+Bertas
+Bertelsmann
+Berts
+Beruf
+Berufe
+Berufen
+Berufes
+Berufs
+Berufsanfänger
+Berufsanfängern
+Berufsanfängers
+Berufsausbildung
+Berufsausbildungen
+Berufsausübung
+Berufsberater
+Berufsberaterin
+Berufsberaterinnen
+Berufsberatern
+Berufsberaters
+Berufsberatung
+Berufsbild
+Berufsbilder
+Berufsbildern
+Berufsbildes
+Berufsbilds
+Berufschance
+Berufschancen
+Berufsjahr
+Berufsjahre
+Berufsjahren
+Berufsjahrs
+Berufsleben
+Berufslebens
+Berufsschule
+Berufsschulen
+Berufszweig
+Berufszweige
+Berufszweigen
+Berufszweiges
+Berufszweigs
+Berufung
+Berufungen
+Beruhigung
+Beryll
+Berücksichtigung
+Berücksichtigungen
+Berücksichtung
+Berühmtheit
+Berühmtheiten
+Berührung
+Berührungen
+Berührungsfläche
+Berührungsflächen
+Berührungslinie
+Berührungslinien
+Berührungspunkt
+Berührungspunkte
+Berührungspunkten
+Berührungspunktes
+Berührungspunkts
+Besatz
+Besatzer
+Besatzern
+Besatzes
+Besatzung
+Besatzungen
+Beschaffenheit
+Beschaffung
+Beschaffungen
+Beschaffungsprogramm
+Beschaffungsstelle
+Beschaffungsstellen
+Beschaltung
+Beschattung
+Beschattungen
+Beschaulichkeit
+Beschaulichkeiten
+Bescheid
+Bescheide
+Bescheiden
+Bescheidenheit
+Bescheides
+Bescheids
+Bescheidung
+Bescheinigung
+Bescheinigungen
+Bescherung
+Bescherungen
+Beschichtung
+Beschichtungen
+Beschießung
+Beschießungen
+Beschimpfung
+Beschimpfungen
+Beschiss
+Beschlag
+Beschlagenheit
+Beschlages
+Beschlags
+Beschleuniger
+Beschleunigers
+Beschleunigung
+Beschleunigungen
+Beschluss
+Beschlusses
+Beschlussfassung
+Beschlussfassungen
+Beschlussfähigkeit
+Beschlussunfähigkeit
+Beschläge
+Beschlägen
+Beschlüsse
+Beschlüssen
+Beschneidung
+Beschneidungen
+Beschreibung
+Beschreibungen
+Beschreibungsformalismen
+Beschreibungsmöglichkeit
+Beschreibungsmöglichkeiten
+Beschreibungssprache
+Beschreibungssprachen
+Beschreibungstext
+Beschriftung
+Beschriftungen
+Beschränktheit
+Beschränktheiten
+Beschränkung
+Beschränkungen
+Beschuldigung
+Beschuldigungen
+Beschuss
+Beschwerde
+Beschwerdebrief
+Beschwerdebriefe
+Beschwerdebriefen
+Beschwerdebriefs
+Beschwerden
+Beschwerung
+Beschwichtigung
+Beschwichtigungen
+Beschwörung
+Beschädigung
+Beschädigungen
+Beschäftigung
+Beschäftigungen
+Beschäftigungsdauer
+Beschäftigungslosigkeit
+Beschäftigungsmöglichkeit
+Beschäftigungsmöglichkeiten
+Beschämung
+Beschämungen
+Beschönigung
+Beschönigungen
+Beschützer
+Beschützerin
+Beschützerinnen
+Beschützern
+Beschützers
+Beseitigung
+Besen
+Besens
+Besenstiel
+Besenstiele
+Besenstielen
+Besenstiels
+Besessenheit
+Besetztzeichen
+Besetztzeichens
+Besetzung
+Besetzungen
+Besichtigung
+Besichtigungen
+Besiedlung
+Besiedlungen
+Besiegung
+Besiegungen
+Besinnung
+Besinnungen
+Besinnungslosigkeit
+Besitz
+Besitzen
+Besitzer
+Besitzergreifung
+Besitzergreifungen
+Besitzerin
+Besitzerinnen
+Besitzern
+Besitzers
+Besitzes
+Besitzlosigkeit
+Besitznachweis
+Besitznachweise
+Besitznachweisen
+Besitznachweises
+Besitznahme
+Besitznahmen
+Besitzstand
+Besitztum
+Besitztums
+Besitzung
+Besitzungen
+Besitzwechsel
+Besoldung
+Besoldungen
+Besonderheit
+Besonderheiten
+Besonnenheit
+Besorgnis
+Besorgnisse
+Besorgnissen
+Besorgung
+Besorgungen
+Bespannung
+Bespannungen
+Besprechung
+Besprechungen
+Besserung
+Besserungen
+Besserwisser
+Besserwissern
+Besserwissers
+Bestand
+Bestandes
+Bestands
+Bestandsaufnahme
+Bestandsaufnahmen
+Bestandserhöhung
+Bestandserhöhungen
+Bestandsliste
+Bestandslisten
+Bestandssicherung
+Bestandsverminderung
+Bestandsverminderungen
+Bestandsveränderung
+Bestandsveränderungen
+Bestandsänderung
+Bestandsänderungen
+Bestandsüberblick
+Bestandteil
+Bestandteile
+Bestandteilen
+Bestandteils
+Bestattung
+Bestattungen
+Bestechlichkeit
+Bestechung
+Bestechungen
+Besteck
+Bestecke
+Bestecken
+Besteckes
+Bestehens
+Besteigung
+Besteigungen
+Besteller
+Bestellern
+Bestellers
+Bestellformular
+Bestellformulare
+Bestellformularen
+Bestellformulars
+Bestellnr
+Bestellnummer
+Bestellnummern
+Bestellschein
+Bestellscheine
+Bestellscheinen
+Bestellscheins
+Bestellung
+Bestellungen
+Bestellzettel
+Bestellzetteln
+Bestellzettels
+Besteuerung
+Besteuerungen
+Bestie
+Bestien
+Bestimmtheit
+Bestimmung
+Bestimmungen
+Bestimmungsort
+Bestimmungsorte
+Bestimmungsorten
+Bestimmungsortes
+Bestimmungsorts
+Bestleistung
+Bestleistungen
+Bestnr
+Bestrafung
+Bestrahlung
+Bestrahlungen
+Bestrebung
+Bestrebungen
+Bestseller
+Bestuhlung
+Bestzeit
+Bestzeiten
+Bestände
+Beständen
+Beständigkeit
+Bestätigung
+Bestätigungen
+Bestätigungsvermerk
+Bestätigungsvermerke
+Bestätigungsvermerken
+Bestätigungsvermerks
+Bestückung
+Bestückungsoption
+Bestückungsoptionen
+Bestückungsplan
+Bestückungspläne
+Bestückungsvarianten
+Bestückungsversion
+Bestückungsversionen
+Bestürmung
+Bestürmungen
+Bestürzung
+Bestürzungen
+Besuch
+Besucher
+Besucherin
+Besucherinnen
+Besuchern
+Besuchers
+Besuches
+Besuchs
+Besänftigung
+Besänftigungen
+Besätze
+Besätzen
+Beteiligung
+Beteiligungen
+Betel
+Beteuerung
+Beteuerungen
+Beton
+Betons
+Betonung
+Betracht
+Betrachter
+Betrachterin
+Betrachterinnen
+Betrachtern
+Betrachters
+Betrachtung
+Betrachtungen
+Betrachtungseinheit
+Betrachtungsweise
+Betrachtungsweisen
+Betrag
+Betrages
+Betrags
+Betragssumme
+Betragssummen
+Betrauung
+Betreff
+Betreibens
+Betreiber
+Betreibern
+Betreibers
+Betretung
+Betreuer
+Betreuerin
+Betreuerinnen
+Betreuern
+Betreuers
+Betreuung
+Betreuungen
+Betrieb
+Betriebe
+Betrieben
+Betriebes
+Betriebs
+Betriebsablauf
+Betriebsablaufs
+Betriebsabläufe
+Betriebsabläufen
+Betriebsamkeit
+Betriebsangehörige
+Betriebsangehörigen
+Betriebsangehöriger
+Betriebsanlage
+Betriebsanlagen
+Betriebsanleitung
+Betriebsanleitungen
+Betriebsanzeige
+Betriebsanzeigen
+Betriebsart
+Betriebsarten
+Betriebsausflug
+Betriebsausfluges
+Betriebsausflugs
+Betriebsausflüge
+Betriebsausflügen
+Betriebsbedingung
+Betriebsbedingungen
+Betriebsbereich
+Betriebsbereiche
+Betriebsbereichen
+Betriebsbereichs
+Betriebsbereitschaft
+Betriebsdauer
+Betriebsergebnis
+Betriebsergebnisse
+Betriebsergebnissen
+Betriebsergebnisses
+Betriebsertrag
+Betriebsertrages
+Betriebsertrags
+Betriebserträge
+Betriebserträgen
+Betriebsgeheimnis
+Betriebsgeheimnisse
+Betriebsgeheimnissen
+Betriebsgeheimnisses
+Betriebsgesellschaft
+Betriebsgesellschaften
+Betriebshinweis
+Betriebshinweise
+Betriebshinweisen
+Betriebshinweises
+Betriebsinhaber
+Betriebsinhabern
+Betriebsinhabers
+Betriebskapital
+Betriebsklima
+Betriebsklimas
+Betriebskosten
+Betriebsleiter
+Betriebsleitern
+Betriebsleiters
+Betriebsleitung
+Betriebsleitungen
+Betriebsmaterial
+Betriebsmittel
+Betriebsmitteln
+Betriebsmittels
+Betriebsrat
+Betriebsrates
+Betriebsrisiko
+Betriebsrisikos
+Betriebsräte
+Betriebsräten
+Betriebsschluss
+Betriebssicherheit
+Betriebsspannung
+Betriebsspannungen
+Betriebsstätte
+Betriebsstätten
+Betriebsstörung
+Betriebsstörungen
+Betriebssystem
+Betriebssysteme
+Betriebssystemen
+Betriebssystemfehler
+Betriebssystems
+Betriebsunterbrechung
+Betriebsunterbrechungen
+Betriebsversammlung
+Betriebsversammlungen
+Betriebswirtschaft
+Betriebswirtschaftler
+Betriebswirtschaftlern
+Betriebswirtschaftslehre
+Betriebszeit
+Betriebszeiten
+Betriebszugehörigkeit
+Betriebszustand
+Betriebszustandes
+Betriebszustands
+Betriebszustände
+Betriebszuständen
+Betriebszweig
+Betriebszweige
+Betriebszweigen
+Betriebszweigs
+Betroffenheit
+Betroffensein
+Betrug
+Betruges
+Betrugs
+Betrunkenheit
+Beträge
+Beträgen
+Betrübnis
+Betrübnisse
+Betrübnissen
+Betrüger
+Betrügerei
+Betrügereien
+Betrügerin
+Betrügerinnen
+Betrügern
+Betrügers
+Bett
+Bettchen
+Bettchens
+Bettelbrief
+Bettelbriefe
+Bettelbriefen
+Bettelbriefs
+Bettelei
+Bettenbau
+Bettes
+Bettina
+Bettinas
+Bettler
+Bettlern
+Bettlers
+Bettnachbar
+Bettnachbarin
+Bettnachbarinnen
+Bettnachbarn
+Bettnachbars
+Betty
+Bettys
+Betätigung
+Betätigungen
+Betätigungsfeld
+Betätigungsfelds
+Betäubung
+Betörung
+Betörungen
+Beugung
+Beugungen
+Beugungsform
+Beugungsformen
+Beule
+Beulen
+Beunruhigung
+Beurkundung
+Beurkundungen
+Beurlaubung
+Beurteilung
+Beurteilungen
+Beurteilungskriterien
+Beute
+Beutelschneider
+Beutelschneidern
+Beutelschneiders
+Beuten
+Bevollmächtigung
+Bevollmächtigungen
+Bevormundung
+Bevorzugung
+Bevorzugungen
+Bevölkerung
+Bevölkerungen
+Bewacher
+Bewachern
+Bewachers
+Bewachung
+Bewachungen
+Bewaffnung
+Bewaffnungen
+Bewahrer
+Bewahrern
+Bewahrers
+Bewahrung
+Bewandtnis
+Bewandtnisse
+Bewandtnissen
+Beweggrund
+Beweggrundes
+Beweggrunds
+Beweggründe
+Beweggründen
+Beweglichkeit
+Bewegung
+Bewegungen
+Bewegungsablauf
+Bewegungsablaufs
+Bewegungsabläufe
+Bewegungsabläufen
+Bewegungseindruck
+Bewegungseindrucks
+Bewegungsfreiheit
+Bewegungsgleichung
+Bewegungsgleichungen
+Bewegungsrichtung
+Bewegungsrichtungen
+Bewegungsspielraum
+Bewegungsspielraums
+Bewegungsspielräume
+Bewegungsspielräumen
+Beweis
+Beweisaufnahme
+Beweisaufnahmen
+Beweisbarkeit
+Beweise
+Beweisen
+Beweisens
+Beweiser
+Beweisern
+Beweisers
+Beweises
+Beweisführung
+Beweisführungen
+Beweisidee
+Beweisideen
+Beweiskraft
+Beweiskräfte
+Beweiskräften
+Beweismaterial
+Beweismaterialien
+Beweismaterials
+Beweisschritt
+Beweisschritte
+Beweisschritten
+Beweisschritts
+Beweissicherung
+Beweisstück
+Beweisstücke
+Beweisstücken
+Beweisstückes
+Beweissystem
+Beweissysteme
+Beweissystemen
+Beweissystems
+Beweisverpflichtungen
+Bewerber
+Bewerberangebot
+Bewerberin
+Bewerberinnen
+Bewerbern
+Bewerbers
+Bewerbung
+Bewerbungen
+Bewerbungsfrist
+Bewerbungsfristen
+Bewerbungsschreiben
+Bewerbungsschreibens
+Bewerbungsunterlagen
+Bewertung
+Bewertungen
+Bewertungskriterien
+Bewertungsmaßstäbe
+Bewertungsmaßstäben
+Bewertungsmethode
+Bewertungsmethoden
+Bewertungsschema
+Bewertungsverfahren
+Bewertungsverfahrens
+Bewilligung
+Bewilligungen
+Bewirtschaftung
+Bewirtschaftungen
+Bewirtungskosten
+Bewohnbarkeit
+Bewohner
+Bewohnern
+Bewohners
+Bewunderer
+Bewunderern
+Bewunderers
+Bewunderin
+Bewunderinnen
+Bewunderung
+Bewusstheit
+Bewusstlosigkeit
+Bewusstsein
+Bewusstseins
+Bewusstseinsbildung
+Bewährung
+Bewährungen
+Bewährungsprobe
+Bewährungsproben
+Bewältigung
+Bewässerung
+Bewässerungen
+Bewölkung
+Bewölkungen
+Bezahlung
+Bezahlungen
+Bezauberung
+Bezeichner
+Bezeichnern
+Bezeichners
+Bezeichnung
+Bezeichnungen
+Bezeugung
+Bezieher
+Beziehung
+Beziehungen
+Bezirk
+Bezirke
+Bezirken
+Bezirks
+Bezug
+Bezuges
+Bezugnahme
+Bezugs
+Bezugsfrist
+Bezugsfristen
+Bezugsmaße
+Bezugsmaßen
+Bezugsmöglichkeit
+Bezugsmöglichkeiten
+Bezugspotential
+Bezugspotentiale
+Bezugspotentialen
+Bezugspotentials
+Bezugspotenzial
+Bezugspotenziale
+Bezugspotenzialen
+Bezugspotenzials
+Bezugspreis
+Bezugspreise
+Bezugspreisen
+Bezugspreises
+Bezugspunkt
+Bezugspunkte
+Bezugspunkten
+Bezugspunktes
+Bezugspunkts
+Bezugsquelle
+Bezugsquellen
+Bezugsquellennachweis
+Bezugsquellennachweise
+Bezugsquellennachweisen
+Bezugsquellennachweises
+Bezugsrahmen
+Bezugsrahmens
+Bezugsrecht
+Bezugsrechte
+Bezugsrechten
+Bezugsrechtes
+Bezugsrechts
+Bezugsschein
+Bezugsscheine
+Bezugsscheinen
+Bezugsscheins
+Bezugsspannung
+Bezugssystem
+Bezugssysteme
+Bezugssystemen
+Bezugssystems
+Bezwinger
+Bezwingerin
+Bezwingerinnen
+Bezwingern
+Bezwingers
+Bezwingung
+Bezüge
+Bezügen
+Biafra
+Biarritz
+Bias
+Bibel
+Bibeln
+Biber
+Bibern
+Bibliografie
+Bibliografien
+Bibliographie
+Bibliographien
+Bibliothek
+Bibliothekar
+Bibliothekare
+Bibliothekaren
+Bibliothekars
+Bibliotheken
+Bibliotheksfunktion
+Bibliotheksfunktionen
+Biedenkopf
+Biedenkopfs
+Biegsamkeit
+Biegung
+Bielefeld
+Biene
+Bienen
+Bier
+Biere
+Bieren
+Biers
+Biest
+Biester
+Biestern
+Biestes
+Bieter
+Bieterin
+Bieterinnen
+Bietern
+Bieters
+Bigamie
+Bigband
+Bigbands
+Bijektivität
+Bikini
+Bikinis
+Bilanz
+Bilanzen
+Bilanzierung
+Bild
+Bildaufbau
+Bildaufbaus
+Bildausschnitt
+Bildausschnitte
+Bildausschnitten
+Bildausschnitts
+Bildband
+Bildbands
+Bildbeitrag
+Bildbeitrages
+Bildbeitrags
+Bildbeiträge
+Bildbeiträgen
+Bildbereich
+Bildbereiche
+Bildbereichen
+Bildbereichs
+Bildbände
+Bildbänden
+Bilddarstellung
+Bilddarstellungen
+Bilder
+Bildern
+Bildes
+Bildfläche
+Bildflächen
+Bildnis
+Bildnisse
+Bildnissen
+Bildnisses
+Bildpunkt
+Bildpunkte
+Bildpunkten
+Bildpunktes
+Bildpunkts
+Bildschirm
+Bildschirmanzeige
+Bildschirmanzeigen
+Bildschirmaufteilung
+Bildschirmausfall
+Bildschirmausgabe
+Bildschirmbereiche
+Bildschirmdarstellung
+Bildschirmdarstellungen
+Bildschirme
+Bildschirmeingabe
+Bildschirmeinheit
+Bildschirmeinheiten
+Bildschirmen
+Bildschirmes
+Bildschirmfeld
+Bildschirmfelder
+Bildschirmfeldern
+Bildschirmfeldes
+Bildschirmfelds
+Bildschirmfläche
+Bildschirmflächen
+Bildschirmgrafik
+Bildschirmgröße
+Bildschirmmaske
+Bildschirmmasken
+Bildschirmmeldung
+Bildschirmmeldungen
+Bildschirmprogramm
+Bildschirmprogramme
+Bildschirmprogrammen
+Bildschirmprogramms
+Bildschirmrand
+Bildschirms
+Bildschirmseite
+Bildschirmseiten
+Bildschirmsoftware
+Bildschirmtext
+Bildschirmzeile
+Bildschärfe
+Bildung
+Bildungschance
+Bildungschancen
+Bildungseinrichtung
+Bildungseinrichtungen
+Bildungslücke
+Bildungslücken
+Bildungsstand
+Bildungsweg
+Bildungswege
+Bildungswegen
+Bildungswegs
+Bildungswesen
+Bildungswesens
+Bildverarbeitung
+Bildverarbeitungsrechner
+Bill
+Billard
+Billet
+Billets
+Billiglösung
+Billiglösungen
+Billigsoftware
+Billigung
+Billion
+Billionen
+Bills
+Billy
+Billys
+Binder
+Bindern
+Bindestrich
+Bindestriche
+Bindestrichen
+Bindestriches
+Bindewort
+Bindewortes
+Bindeworts
+Bindewörter
+Bindewörtern
+Bindung
+Bindungen
+Bindungsbereich
+Bindungsbereiche
+Bindungsbereichen
+Bindungsbereichs
+Bindungsregel
+Bindungsregeln
+Bindungsrelation
+Bindungsrelationen
+Bindungsumgebung
+Bindungsumgebungen
+Bindungsverfälschung
+Bindungsverfälschungen
+Bingen
+Binse
+Binsen
+Binsenweisheit
+Binsenweisheiten
+Binärbaum
+Binärbaums
+Binärbäume
+Binärbäumen
+Binärcode
+Binärcodes
+Binärwort
+Binärworte
+Binärworten
+Binärworts
+Biochemie
+Biochemiker
+Biochemikerin
+Biochemikerinnen
+Biochemikern
+Biochemikers
+Biografie
+Biografien
+Biograph
+Biographen
+Biographie
+Biographien
+Biologe
+Biologen
+Biologie
+Biologin
+Biologinnen
+Biotop
+Biotope
+Biotopen
+Biotops
+Birgit
+Birgits
+Birke
+Birken
+Birmingham
+Birne
+Birnen
+Bischof
+Bischofs
+Bischöfe
+Bischöfen
+Bisimulation
+Biskaya
+Biskuit
+Biskuits
+Bismarck
+Bismarcks
+Biss
+Bisse
+Bissen
+Bisses
+Bistum
+Bistums
+Bistümer
+Bistümern
+Bit
+Bitbus
+Bitbusse
+Bitbussen
+Bitbusses
+Bitlänge
+Bitlängen
+Bitmap
+Bitmaske
+Bitmasken
+Bitmaskierung
+Bitmuster
+Bitnummer
+Bitnummern
+Bitpattern
+Bitport
+Bitports
+Bits
+Bitstrom
+Bitstromes
+Bittbrief
+Bittbriefe
+Bittbriefen
+Bittbriefs
+Bitterkeit
+Bitterkeiten
+Bitternis
+Bitternisse
+Bitternissen
+Bittgesuch
+Bittgesuche
+Bittgesuchen
+Bittgesuches
+Bittschreiben
+Bittschreibens
+Bittschrift
+Bittschriften
+Bittsteller
+Bittstellerin
+Bittstellerinnen
+Bittstellern
+Bittstellers
+Bitumen
+Bitzuordnung
+Biwak
+Biwaks
+Bizeps
+Björn
+Björns
+Blamage
+Blamagen
+Blatt
+Blattanfang
+Blattanfangs
+Blatteinzug
+Blatteinzugs
+Blatteinzüge
+Blatteinzügen
+Blattes
+Blattrand
+Blattrandes
+Blattrands
+Blattvorschub
+Blattvorschubs
+Blaubeere
+Blaubeeren
+Blaupause
+Blaupausen
+Blech
+Bleche
+Blechen
+Bleches
+Blechs
+Blei
+Bleis
+Bleistift
+Bleistiftanspitzer
+Bleistiftanspitzern
+Bleistifte
+Bleistiften
+Bleistiftes
+Bleistifts
+Blendung
+Blendungen
+Blick
+Blickes
+Blickfang
+Blickfanges
+Blickfangs
+Blickfeld
+Blickfelder
+Blickfeldern
+Blickfeldes
+Blickfelds
+Blickfänge
+Blickfängen
+Blickfänger
+Blickfängern
+Blickfängers
+Blickpunkt
+Blickpunkte
+Blickpunkten
+Blickpunktes
+Blickpunkts
+Blickrichtung
+Blickrichtungen
+Blicks
+Blickwinkel
+Blickwinkeln
+Blickwinkels
+Blinddarm
+Blinddarms
+Blinddärme
+Blinddärmen
+Blindgänger
+Blindgängern
+Blindgängers
+Blindheit
+Blindschleiche
+Blindschleichen
+Blinker
+Blinklicht
+Blinklichter
+Blinklichtern
+Blitz
+Blitzableiter
+Blitzableitern
+Blitzableiters
+Blitzaktion
+Blitzaktionen
+Blitzbesuch
+Blitze
+Blitzen
+Blitzes
+Blitzkarriere
+Blitzkarrieren
+Blitzlicht
+Blitzlichter
+Blitzlichtern
+Blitzlichtes
+Blitzschlag
+Blitzschlages
+Blitzschlags
+Blitzschläge
+Blitzschlägen
+Blitzstrahl
+Block
+Blockade
+Blockaden
+Blockanfang
+Blockanfangs
+Blockbefehle
+Blockbefehlen
+Blockende
+Blockenden
+Blockes
+Blockierung
+Blockmarkierung
+Blockmarkierungen
+Blocks
+Blocksatz
+Blockschachtelung
+Blockschaltbild
+Blockschaltbilder
+Blockschaltbildern
+Blockschaltbildes
+Blockschaltbilds
+Blondine
+Blondinen
+Blouson
+Blousons
+Bloßlegung
+Bloßstellung
+Bloßstellungen
+Bluejeans
+Blues
+Bluff
+Blume
+Blumen
+Blumentopf
+Blumentopfes
+Blumentopfs
+Blunzn
+Bluse
+Blusen
+Blut
+Blutes
+Bluts
+Blutung
+Blutungen
+Blähung
+Blähungen
+Bläschen
+Bläschens
+Bläser
+Bläsern
+Blässe
+Blättchen
+Blättchens
+Blätter
+Blättern
+Blätterwald
+Blöcke
+Blöcken
+Blödelei
+Blödeleien
+Blödheit
+Blödheiten
+Blödian
+Blödsinn
+Blödsinns
+Blöße
+Blößen
+Blümchen
+Blümchens
+Blümlein
+Blüte
+Blüten
+Blütezeit
+Boa
+Boas
+Boccia
+Bochum
+Bochumer
+Bochumern
+Bock
+Bockes
+Bocks
+Bocuse
+Bocuses
+Boden
+Bodens
+Bodensee
+Bodensees
+Boeing
+Bogenmaß
+Bogenmaße
+Bogenmaßes
+Bogota
+Bohle
+Bohlen
+Bohne
+Bohnen
+Bohrer
+Bohrern
+Bohrmaschine
+Bohrmaschinen
+Bohrung
+Bohrungen
+Boje
+Bojen
+Bolero
+Bolivien
+Bollwerk
+Bollwerkes
+Bollwerks
+Bologna
+Bolognese
+Bolschewik
+Bolschewiken
+Bolschewiki
+Bolschewist
+Bolschewisten
+Bolschoi
+Bolschois
+Bolzen
+Bolzens
+Bombay
+Bombe
+Bomben
+Bombengeschäft
+Bombengeschäfte
+Bombengeschäften
+Bombengeschäftes
+Bombenleger
+Bombenstimmung
+Bon
+Bonbon
+Bonboniere
+Bonbonieren
+Bonbonniere
+Bonbonnieren
+Bonbons
+Bongo
+Bonieren
+Bonifikation
+Bonifikationen
+Bonmot
+Bonn
+Bonner
+Bonnern
+Bonns
+Bons
+Bonsai
+Bonus
+Bonze
+Bonzen
+Boogie
+Booklet
+Booklets
+Boom
+Booms
+Boot
+Bootdiskette
+Bootdisketten
+Boote
+Booten
+Bootes
+Bootmanager
+Bootmanagern
+Bootmanagers
+Boots
+Bootstrapping
+Bord
+Bordeaux
+Bordell
+Bordelle
+Bordellen
+Bordells
+Bordstein
+Bordsteine
+Bordsteinen
+Bordsteins
+Bordüre
+Bordüren
+Boris
+Borke
+Borken
+Borste
+Borsten
+Borte
+Borten
+Bosch
+Bosheit
+Bosheiten
+Bosnien
+Bosporus
+Boss
+Bosse
+Bossen
+Bosses
+Boston
+Botanik
+Botaniker
+Botanikerin
+Botanikerinnen
+Botanikern
+Botanikers
+Bote
+Boten
+Botendienst
+Botendienste
+Botendiensten
+Botendienstes
+Botengang
+Botenganges
+Botengangs
+Botengänge
+Botengängen
+Botschaft
+Botschaften
+Botschafter
+Botschafterin
+Botschafterinnen
+Botschaftern
+Botschafters
+Bottich
+Bottiche
+Bottichen
+Bottichs
+Bouclé
+Bouclés
+Bougainville
+Bouillabaisse
+Bouillon
+Boulevard
+Boulevards
+Bourbone
+Bourbonen
+Bourgogne
+Bourrée
+Bourrées
+Boutique
+Boutiquen
+Bowle
+Bowling
+Box
+Boxer
+Boxerin
+Boxerinnen
+Boxern
+Boxers
+Boy
+Boykott
+Boykotts
+Boys
+Bozener
+Brabant
+Brachland
+Brackwasser
+Brahmane
+Brahmanen
+Brahmanentum
+Brahmanismus
+Brahms
+Brainstorming
+Branche
+Branchen
+Brand
+Brandenburg
+Brandenburger
+Brandenburgern
+Brands
+Brandt
+Brandts
+Brandung
+Branntwein
+Branntweins
+Brasilianer
+Brasilianerin
+Brasilianerinnen
+Brasilianern
+Brasilianers
+Brasilien
+Brauch
+Brauchbarkeit
+Brauches
+Brauchs
+Brauchtum
+Brauerei
+Brauereien
+Braunhemden
+Braunkohle
+Braunschweiger
+Braunschweigers
+Brautpaar
+Brautpaare
+Brautpaaren
+Brautpaars
+Bravour
+Bravourstück
+Bravur
+Breakcontroller
+Breaksignal
+Breaksignale
+Brecher
+Brechern
+Brechers
+Brechmittel
+Brechmitteln
+Brechmittels
+Brechstange
+Brechstangen
+Brechung
+Bregenz
+Brei
+Breie
+Breien
+Breis
+Breisach
+Breitbandigkeit
+Breitengrad
+Breitengrade
+Breitengraden
+Breitengrades
+Breitengrads
+Breitenkreis
+Breitenkreise
+Breitenkreisen
+Breitenkreises
+Breitensport
+Breitensports
+Breitschrift
+Breitseite
+Breitseiten
+Breitwand
+Bremen
+Bremser
+Bremsers
+Bremsklotz
+Bremsklötze
+Bremsklötzen
+Bremsung
+Brenner
+Brennerei
+Brennereien
+Brennern
+Brennerpass
+Brennerpasses
+Brenners
+Brennholz
+Brennholzes
+Brennhölzer
+Brennhölzern
+Brennmaterial
+Brennmaterials
+Brennnessel
+Brennnesseln
+Brennpunkt
+Brennpunkte
+Brennpunkten
+Brennpunktes
+Brennspiegel
+Brennspiegeln
+Brennspiegels
+Brenzligkeit
+Bresche
+Breschen
+Breslau
+Brest
+Brett
+Brettchen
+Brettchens
+Bretter
+Brettern
+Brettes
+Bretton
+Bretts
+Breughel
+Breughels
+Brevier
+Breviers
+Brezel
+Brie
+Brief
+Briefadresse
+Briefadressen
+Briefaktion
+Briefaktionen
+Briefbeschwerer
+Briefbeschwerern
+Briefbogen
+Briefbogens
+Briefbögen
+Briefe
+Briefen
+Briefes
+Briefgeheimnis
+Briefgeheimnisse
+Briefgeheimnissen
+Briefgeheimnisses
+Briefkasten
+Briefkastens
+Briefkopf
+Briefkopfs
+Briefmarke
+Briefmarken
+Briefnotiz
+Briefnotizen
+Briefpapier
+Briefpapiers
+Briefporti
+Briefporto
+Briefportos
+Briefs
+Briefsache
+Briefsachen
+Brieftasche
+Brieftaschen
+Briefträger
+Briefträgern
+Briefumschlag
+Briefumschlags
+Briefumschläge
+Briefumschlägen
+Briefwechsel
+Briefwechseln
+Briefwechsels
+Brieföffner
+Brieföffnern
+Brieföffners
+Brigade
+Brigaden
+Brigadier
+Brigadiers
+Brighton
+Brigitte
+Brigittes
+Brikett
+Brikette
+Briketten
+Briketts
+Brillanz
+Brille
+Brillen
+Brimborium
+Brisanz
+Brise
+Brisen
+Bristol
+Brite
+Briten
+Britin
+Britinnen
+Brixen
+Brockdorf
+Brocken
+Brockens
+Brockhaus
+Brokat
+Brokdorf
+Broker
+Brokerhaus
+Brokerhauses
+Brokerhäuser
+Brokerhäusern
+Brokerin
+Brokerinnen
+Brokern
+Brokers
+Brombeere
+Brombeeren
+Bronchitis
+Bronze
+Brosame
+Brosamen
+Brosche
+Broschen
+Broschüre
+Broschüren
+Brot
+Brote
+Broten
+Broterwerb
+Broterwerbe
+Broterwerben
+Broterwerbs
+Brotes
+Brotzeit
+Browser
+Browsers
+Bruch
+Bruchlandung
+Bruchlandungen
+Bruchrechnung
+Bruchrechnungen
+Bruchs
+Bruchstrich
+Bruchstriche
+Bruchstrichen
+Bruchstrichs
+Bruchstück
+Bruchstücke
+Bruchstücken
+Bruchstückes
+Bruchteil
+Bruchteile
+Bruchteilen
+Bruchteils
+Bruchzahl
+Bruchzahlen
+Bruder
+Bruders
+Brummer
+Brummers
+Brummschädel
+Brummschädeln
+Brummschädels
+Brunch
+Brunhild
+Brunhilde
+Brunhildes
+Brunnen
+Brunnens
+Brunst
+Brust
+Brustton
+Brusttons
+Brut
+Brutalität
+Brutofen
+Brutofens
+Brutstätte
+Brutstätten
+Brutto
+Bruttosozialprodukt
+Bruttosozialprodukte
+Bruttosozialprodukten
+Bruttosozialprodukts
+Brände
+Bränden
+Bräuche
+Bräuchen
+Bräute
+Bräuten
+Bräutigam
+Bräutigams
+Brötchen
+Brötchens
+Brüche
+Brüchen
+Brücke
+Brücken
+Brüder
+Brüderlichkeit
+Brüdern
+Brüderschaft
+Brügge
+Brüskierung
+Brüssel
+Brüstung
+Brüstungen
+Brüter
+Bsp
+Bub
+Bube
+Buben
+Bubenstreich
+Bubenstreiche
+Bubenstreichen
+Bubenstreiches
+Bubenstück
+Bubenstücke
+Bubenstücken
+Bubenstückes
+Buch
+Bucheckern
+Buchenholz
+Buchenwald
+Buches
+Buchfink
+Buchfinken
+Buchhaltung
+Buchhandel
+Buchhandels
+Buchmarkt
+Buchmarktes
+Buchmarkts
+Buchmärkte
+Buchmärkten
+Buchs
+Buchse
+Buchsen
+Buchstabe
+Buchstaben
+Buchstabens
+Buchung
+Buchungen
+Buckel
+Buckeln
+Buckingham
+Budapest
+Buddha
+Bude
+Buden
+Budget
+Budgets
+Buenos
+Bufferausgang
+Bufferausgangs
+Bufferausgänge
+Bufferausgängen
+Bufferflush
+Buffergatter
+Buffergattern
+Bug
+Buges
+Bugfix
+Bugfixes
+Bugs
+Buhmänner
+Bukarest
+Bukett
+Bukette
+Buketten
+Buketts
+Buklee
+Buklees
+Bulette
+Buletten
+Bulgarenreich
+Bulgarien
+Bull
+Bulldog
+Bulldogge
+Bulldoggen
+Bulle
+Bullen
+Bulletin
+Bumerang
+Bumerangs
+Bummelant
+Bummelanten
+Bummelei
+Bummeleien
+Bummler
+Bund
+Bunde
+Bundes
+Bundesamt
+Bundesamtes
+Bundesamts
+Bundesanstalt
+Bundesanwalt
+Bundesanzeiger
+Bundesanzeigers
+Bundesausbildungsförderungsgesetz
+Bundesbank
+Bundesbehörde
+Bundesbehörden
+Bundesbürger
+Bundesbürgerin
+Bundesbürgerinnen
+Bundesbürgern
+Bundesbürgers
+Bundesdatenschutzgesetz
+Bundesdatenschutzgesetzes
+Bundesebene
+Bundesebenen
+Bundesflagge
+Bundesflaggen
+Bundesgebiet
+Bundesgebiete
+Bundesgebieten
+Bundesgebietes
+Bundesgenosse
+Bundesgenossen
+Bundeshaushalt
+Bundeskanzler
+Bundeskanzlern
+Bundeskanzlers
+Bundeskasse
+Bundeskassen
+Bundesland
+Bundesliga
+Bundesländer
+Bundesminister
+Bundesministerien
+Bundesministerium
+Bundesministeriums
+Bundesministern
+Bundesministers
+Bundesmittel
+Bundespolitik
+Bundespolitiker
+Bundespolitikern
+Bundespost
+Bundespräsident
+Bundespräsidenten
+Bundesrat
+Bundesrecht
+Bundesregierung
+Bundesregierungen
+Bundesrepublik
+Bundesrepubliken
+Bundesstaat
+Bundesstaaten
+Bundesstraße
+Bundesstraßen
+Bundestag
+Bundestages
+Bundestags
+Bundeswehr
+Bundstift
+Bundstifte
+Bundstiften
+Bundstiftes
+Bungalow
+Bungalows
+Bunker
+Bunkern
+Bunkers
+Bunsen
+Bunsenbrenner
+Bunsens
+Buntdruck
+Buntglasfenster
+Bunthölzer
+Buntprospekt
+Buntstift
+Buntstifte
+Buntstiften
+Buntstiftes
+Buntstifts
+Burda
+Burdas
+Burg
+Burgen
+Burgenland
+Burghardt
+Burghardts
+Burgund
+Burgunder
+Burgundern
+Burgunderreich
+Burgunders
+Burma
+Bursche
+Burschen
+Burschenschaft
+Bus
+Busabschnitt
+Busabschnitte
+Busanschluss
+Busanschlusses
+Busanschlüsse
+Busanschlüssen
+Busch
+Busches
+Busen
+Busenfreund
+Busenfreunde
+Busenfreunden
+Busenfreundes
+Busenfreundin
+Busenfreundinnen
+Busenfreunds
+Busens
+Buserweiterung
+Buserweiterungen
+Bush
+Bushs
+Business
+Businterface
+Businterfaces
+Busmaster
+Busmasters
+Bussard
+Bussarde
+Bussarden
+Bussards
+Busschnittstelle
+Busschnittstellen
+Busse
+Bussen
+Busses
+Busstruktur
+Busstrukturen
+Bussystem
+Bussysteme
+Bussystemen
+Bussystems
+Butler
+Butter
+Button
+Buttons
+Butzenscheibe
+Butzenscheiben
+Buxtehude
+Buße
+Bußen
+Bußgeld
+Bußgelder
+Bußgeldern
+Bußgeldes
+Bußgelds
+Bypass
+Byte
+Bytes
+Byzantiner
+Byzanz
+Bäche
+Bächen
+Bächlein
+Bächleins
+Bäcker
+Bäckerei
+Bäckereien
+Bäckerin
+Bäckerinnen
+Bäckern
+Bäckers
+Bäder
+Bädern
+Bälde
+Bälle
+Bällen
+Bände
+Bändel
+Bändels
+Bänden
+Bänder
+Bändern
+Bänderriss
+Bänderrisse
+Bänderrissen
+Bänderrisses
+Bändigung
+Bänke
+Bänken
+Bänker
+Bänkern
+Bänkers
+Bär
+Bären
+Bärin
+Bärinnen
+Bärte
+Bärten
+Bässe
+Bässen
+Bäuche
+Bäuchen
+Bäuerin
+Bäuerinnen
+Bäume
+Bäumen
+Béchamel
+Béchamels
+Bö
+Böblingen
+Böcke
+Böcken
+Böe
+Böen
+Bögen
+Böhmen
+Börse
+Börsen
+Börsengang
+Börsengangs
+Börsianer
+Börsianerin
+Börsianerinnen
+Börsianern
+Börsianers
+Bösartigkeit
+Bösartigkeiten
+Böschung
+Böschungen
+Bösewicht
+Bösewichte
+Bösewichten
+Bösewichtes
+Böswilligkeit
+Bücher
+Bücherbord
+Bücherborde
+Bücherborden
+Bücherbordes
+Bücherbords
+Bücherei
+Büchereien
+Büchern
+Büchernarr
+Büchernarren
+Bücherregal
+Bücherregale
+Bücherregalen
+Bücherregals
+Bücherschrank
+Bücherschränke
+Bücherschränken
+Bücherstube
+Bücherstuben
+Bücherverbrennung
+Büchner
+Büchse
+Büchsen
+Bücklinge
+Bücklingen
+Büfett
+Büfettes
+Büfetts
+Büffel
+Büffeln
+Bügel
+Bügeln
+Bügels
+Bühne
+Bühnen
+Bündel
+Bündeln
+Bündelung
+Bündigkeit
+Bündnis
+Bündnisse
+Bündnissen
+Bündnisses
+Bürde
+Bürden
+Bürger
+Bürgerin
+Bürgerinitiative
+Bürgerinitiativen
+Bürgerinnen
+Bürgerkrieg
+Bürgerkriege
+Bürgerkriegen
+Bürgerkrieges
+Bürgerkriegs
+Bürgermeister
+Bürgermeisterin
+Bürgermeisterinnen
+Bürgermeistern
+Bürgermeisters
+Bürgern
+Bürgerpflicht
+Bürgerpflichten
+Bürgerrechtler
+Bürgers
+Bürgerschaft
+Bürgersinn
+Bürgersinns
+Bürgersteig
+Bürgersteige
+Bürgersteigen
+Bürgersteiges
+Bürgertum
+Bürgertums
+Bürgschaft
+Bürgschaften
+Büro
+Büroangestellte
+Büroangestellten
+Büroangestellter
+Büroarbeit
+Büroarbeiten
+Büroartikel
+Büroartikeln
+Bürobedarf
+Bürogebäude
+Bürogebäudes
+Büroklammer
+Büroklammern
+Bürokrat
+Bürokraten
+Bürokratie
+Bürokratien
+Bürokratismus
+Büromaschine
+Büromaschinen
+Büromaterial
+Büromaterials
+Büros
+Büsche
+Büschel
+Büscheln
+Büschen
+Büste
+Büsten
+Büstenhalter
+Büstenhaltern
+Büstenhalters
+Bütt
+Büttel
+Bütteln
+Büttels
+Büßer
+Büßerin
+Büßerinnen
+Büßern
+Büßers
+CAD
+CD
+CDC
+CDU
+CDs
+CIA
+CPU
+CSU
+Cabaret
+Cabrio
+Cache
+Caches
+Cadillac
+Cadiz
+Caen
+Cafeteria
+Café
+Cafés
+Calabrien
+Calamares
+Call
+Callgirl
+Calls
+Calvin
+Calvinist
+Calvinisten
+Calvins
+Camembert
+Camion
+Camp
+Camping
+Campus
+Canberra
+Candela
+Cannes
+Canon
+Canossa
+Cappuccino
+Cappuccinos
+Cappy
+Caravan
+Caravans
+Cardin
+Carlo
+Carlos
+Carol
+Carola
+Carolas
+Carols
+Carotinoid
+Carotinoide
+Carotinoiden
+Carotinoids
+Cartoon
+Cartoons
+Caruso
+Carusos
+Casanova
+Casanovas
+Casino
+Casinoabend
+Castro
+Castros
+Cathy
+Cathys
+Cayenne
+Celle
+Cellist
+Cellisten
+Cellistin
+Cellistinnen
+Cellokonzert
+Cellophanpapier
+Celsius
+Cembalo
+Cent
+Center
+Centers
+Centronics
+Cents
+Cervelatwurst
+Ceylon
+Ch
+Chalet
+Chalets
+Cham
+Champagner
+Champagners
+Champignon
+Champignons
+Champion
+Champions
+Chamäleon
+Chamäleons
+Chance
+Chancen
+Chanel
+Chaos
+Chaot
+Chaoten
+Chaplin
+Chaplins
+Charakter
+Charakterbild
+Charakterbilder
+Charakterbildern
+Charakterbildes
+Charakterbildung
+Charakterbildungen
+Charaktereigenschaft
+Charaktereigenschaften
+Charakterentwicklung
+Charakterfehler
+Charakterfehlern
+Charakterfrage
+Charakterfragen
+Charaktergröße
+Charaktergrößen
+Charakterisierung
+Charakteristik
+Charakteristika
+Charakteristiken
+Charakterköpfe
+Charakterköpfen
+Charakterlosigkeit
+Charaktermängel
+Charakters
+Charakterschwäche
+Charakterschwächen
+Charakterstudie
+Charakterstudien
+Charakterstärke
+Charakterstärken
+Charakterzug
+Charakterzuges
+Charakterzugs
+Charakterzüge
+Charakterzügen
+Charge
+Chargen
+Charisma
+Charles
+Charlie
+Charlies
+Charlottenburg
+Charme
+Charmes
+Charmeur
+Charmeurs
+Charta
+Chartres
+Chassis
+Chateaubriand
+Chateaubriands
+Chauffeur
+Chauffeure
+Chauffeuren
+Chauffeurs
+Chaussee
+Chausseen
+Chauvinismen
+Chauvinismus
+Checkliste
+Checklisten
+Checkpoint
+Checksumme
+Chef
+Chefarzt
+Chefarztes
+Chefbesprechung
+Chefbesprechungen
+Chefin
+Chefinnen
+Chefs
+Chefsache
+Chefsachen
+Chefsekretär
+Chefsekretäre
+Chefsekretären
+Chefsekretärin
+Chefsekretärinnen
+Chefsekretärs
+Chefärzte
+Chefärzten
+Chefärztin
+Chefärztinnen
+Chemie
+Chemiefaser
+Chemikalie
+Chemikalien
+Chemiker
+Chemikerin
+Chemikerinnen
+Chemikern
+Chemikers
+Chemnitz
+Chemotechniker
+Cheops
+Cheque
+Cheques
+Cherusker
+Cheyenne
+Chicorée
+Chicorées
+Chiffre
+Chiffreanzeige
+Chiffreanzeigen
+Chiffren
+Chile
+China
+Chinchilla
+Chinese
+Chinesen
+Chinesin
+Chinesinnen
+Chinin
+Chinins
+Chintz
+Chip
+Chips
+Chipsatz
+Chirac
+Chiracs
+Chirurg
+Chirurgie
+Chlor
+Chlorid
+Chloride
+Chloriden
+Chlorids
+Chlornitrat
+Chloroform
+Chlorophyll
+Chlors
+Choke
+Cholera
+Cholesterin
+Cholesterins
+Chopin
+Chopins
+Chor
+Choral
+Choreograph
+Choreographen
+Choreographin
+Choreographinnen
+Chorgesang
+Chorgesangs
+Chorgesänge
+Chorgesängen
+Chorist
+Choristen
+Chorknabe
+Chorknaben
+Chors
+Chorsänger
+Chorsängerin
+Chorsängerinnen
+Chorsängern
+Chorsängers
+Christ
+Christbaum
+Christbaumes
+Christbaums
+Christbäume
+Christbäumen
+Christdemokrat
+Christdemokraten
+Christen
+Christenheit
+Christentum
+Christi
+Christian
+Christiane
+Christianes
+Christianisierung
+Christians
+Christina
+Christinas
+Christine
+Christines
+Christkind
+Christkindes
+Christlichkeit
+Christmarkt
+Christmarktes
+Christmärkte
+Christmärkten
+Christoph
+Christophorus
+Christophs
+Christus
+Chrom
+Chromausfuhr
+Chromausfuhren
+Chromosom
+Chromosome
+Chromosomen
+Chromosoms
+Chroms
+Chronik
+Chronist
+Chronisten
+Chronologie
+Chronometer
+Chronometrie
+Chruschtschow
+Chruschtschows
+Chrysantheme
+Chrysanthemen
+Chur
+Churchill
+Churchills
+Chöre
+Chören
+Cineast
+Cineasten
+Cinemascope
+Circus
+Citibank
+Citroen
+City
+Citys
+Civil
+Claim
+Claude
+Claudes
+Claudia
+Claudias
+Clausewitz
+Clip
+Clips
+Clique
+Cliquen
+Clochard
+Clochards
+Clockausgang
+Clone
+Clonehersteller
+Closure
+Closures
+Clou
+Clown
+Clowns
+Clownsfigur
+Club
+Clubmitglieder
+Clubs
+Cluny
+Cmos
+Co
+Coatingmaße
+Coats
+Coautor
+Cobol
+Coca
+Cockerspaniel
+Cocktail
+Cocktails
+Cocteau
+Cocteaus
+Code
+Codec
+Codecs
+Codegenerator
+Codegeneratoren
+Codegeneratorgenerator
+Codegeneratorgeneratoren
+Codegeneratorgenerators
+Codegenerators
+Codegenerierung
+Codegenerierungsphase
+Codegenerierungsphasen
+Codequalität
+Codes
+Codestück
+Codestücke
+Codestücken
+Codestücks
+Codetransformation
+Codewort
+Codeworte
+Codex
+Codezeichen
+Codezeichens
+Codiernase
+Codierung
+Codierungen
+Cognac
+Cola
+Collage
+Collagen
+Collie
+Collies
+Colmar
+Colombo
+Colombos
+Colt
+Columbus
+Comecon
+Commerzbank
+Commodore
+Commonwealth
+Commonwealths
+Commune
+Compaq
+Compiegne
+Compiler
+Compilerbau
+Compilern
+Compilers
+Computer
+Computeranimation
+Computeranimationen
+Computeranlage
+Computeranlagen
+Computerausdruck
+Computerausdrucke
+Computerausdrucken
+Computerausdrucks
+Computerbenutzer
+Computerbenutzern
+Computerbenutzers
+Computerclub
+Computerclubs
+Computerdisplay
+Computerdisplays
+Computergrafik
+Computergrafiker
+Computergrafikern
+Computerland
+Computern
+Computerprogramme
+Computerprogrammen
+Computers
+Computersimulation
+Computersimulationen
+Computersystem
+Computersysteme
+Computersystemen
+Computersystems
+Computertechnik
+Computertechniker
+Computertechnikern
+Computerviren
+Conferencier
+Conferenciers
+Connectzustand
+Connor
+Connors
+Container
+Contergan
+Contergans
+Continuation
+Continuations
+Controller
+Controllerbox
+Controllerboxen
+Controllern
+Controllerplatine
+Controllerplatinen
+Controllers
+Coprozessor
+Copyright
+Corazon
+Corazons
+Cornedbeef
+Cornichon
+Cornichons
+Cornwall
+Couchgarnitur
+Couleur
+Coulomb
+Countdown
+Coup
+Coupe
+Coupes
+Coupon
+Coupons
+Coups
+Courage
+Courtage
+Courtagen
+Cousin
+Cousine
+Cousinen
+Cousins
+Couture
+Coventry
+Creme
+Cremen
+Cremes
+Crimpen
+Croupier
+Croupiers
+Cruz
+Crêpe
+Crêpes
+Ctrl
+Curacao
+Curie
+Curies
+Curriculum
+Currywurst
+Cursor
+Cursorbewegung
+Cursorbewegungen
+Cursorposition
+Cursorpositionen
+Cursors
+Cursorspur
+Cursorsteuerungsbefehl
+Cursorsteuerungsbefehle
+Cyberspace
+Cäsar
+Cäsarismus
+Cäsars
+DB
+DDR
+DFÜ
+DGB
+DIN
+DKP
+DNS
+DNVP
+DOS
+DVD
+DVDS
+Dach
+Dachau
+Dachauer
+Daches
+Dachgeschoß
+Dachgeschoße
+Dachgeschoßen
+Dachgeschoßes
+Dachorganisation
+Dachorganisationen
+Dachs
+Dachse
+Dachsen
+Dachses
+Dackel
+Dackeln
+Dackels
+Daimler
+Dakar
+Dali
+Dalis
+Dallas
+Dalmatien
+Damaskus
+Damast
+Damastes
+Dame
+Damen
+Damm
+Dammbruch
+Dammbruches
+Dammbrüche
+Dammbrüchen
+Dammes
+Damms
+Dammtor
+Damokles
+Damoklesschwert
+Dampf
+Dampfer
+Dampfern
+Dampfes
+Dampfs
+Dandy
+Dandys
+Dank
+Dankadresse
+Dankadressen
+Dankbarkeit
+Dankes
+Dankesworte
+Dankesworten
+Dankgebet
+Dankgebete
+Dankgebeten
+Dankgebetes
+Danks
+Danksagung
+Danksagungen
+Dankschreiben
+Dankschreibens
+Dante
+Dantes
+Danton
+Dantons
+Danziger
+Darbietung
+Darbietungen
+Darlegung
+Darlegungen
+Darlehen
+Darlehens
+Darlehn
+Darlehns
+Darm
+Darmes
+Darms
+Darmstadt
+Darmstädter
+Darsteller
+Darstellerin
+Darstellerinnen
+Darstellern
+Darstellers
+Darstellung
+Darstellungen
+Darstellungsart
+Darstellungsarten
+Darstellungsform
+Darstellungsformen
+Darstellungsgeschwindigkeit
+Darstellungsmöglichkeit
+Darstellungsmöglichkeiten
+Darwin
+Darwins
+Dasein
+Daseins
+Daseinsentwurf
+Daseinsgrenze
+Daseinsgrenzen
+Daseinskampf
+Dasssatz
+Dasssatze
+Dasssatzes
+Dasssätze
+Dasssätzen
+Data
+Databook
+Dataframe
+Dataframes
+Dataphon
+Datei
+Dateianfang
+Dateien
+Dateiende
+Dateifeldern
+Dateigröße
+Dateileiche
+Dateileichen
+Dateiname
+Dateinamen
+Dateistruktur
+Dateisystem
+Dateisysteme
+Dateisystems
+Daten
+Datenabstraktion
+Datenabstraktionen
+Datenanschluss
+Datenanschlusses
+Datenanschlüsse
+Datenanschlüssen
+Datenanzug
+Datenaufnahme
+Datenaufnahmen
+Datenausgabe
+Datenausgabegeräte
+Datenausgabegeräten
+Datenausgaben
+Datenausgang
+Datenausgangs
+Datenausgänge
+Datenausgängen
+Datenaustausch
+Datenauswertung
+Datenauswertungen
+Datenbank
+Datenbanken
+Datenbankprogramm
+Datenbankprogramme
+Datenbankserver
+Datenbankservern
+Datenbankservers
+Datenbanksprache
+Datenbanksprachen
+Datenbanktechnik
+Datenbanktechniken
+Datenbankverwaltung
+Datenbankverwaltungen
+Datenbankzugriff
+Datenbankzugriffe
+Datenbankzugriffen
+Datenbankzugriffs
+Datenbasis
+Datenbereich
+Datenbereiche
+Datenbereichen
+Datenbereichs
+Datenbestand
+Datenbestände
+Datenbeständen
+Datenbit
+Datenbits
+Datenblatt
+Datenblock
+Datenblocksicherung
+Datenblätter
+Datenblättern
+Datenbus
+Datenbusse
+Datenbussen
+Datenbusses
+Datenbyte
+Datenbytes
+Dateneingang
+Dateneingangs
+Dateneingänge
+Dateneingängen
+Datenempfang
+Datenendgerät
+Datenendgeräte
+Datenendgeräten
+Datenendgerätes
+Datenerfassung
+Datenerfassungsrechner
+Datenerfassungsrechners
+Datenerfassungssystem
+Datenerfassungssystems
+Datenerfassungsteil
+Datenerfassungsteile
+Datenerfassungsteilen
+Datenerfassungsteils
+Datenfeld
+Datenfelder
+Datenfeldern
+Datenfernverarbeitung
+Datenfernübertragung
+Datenfernübertragungen
+Datenfile
+Datenfiles
+Datenfluss
+Datenflussanalyse
+Datenflussanalysen
+Datenflusses
+Datenflussgraph
+Datenflussgraphen
+Datenflussplan
+Datenflussschema
+Datenflüsse
+Datenflüssen
+Datenformat
+Datenformate
+Datenformaten
+Datenformats
+Datenframe
+Datenframes
+Datenhandschuh
+Dateninterface
+Dateninterfaces
+Datenkabel
+Datenkabels
+Datenkanal
+Datenkanalmultiplexer
+Datenkanalnummer
+Datenkanalnummern
+Datenkanals
+Datenkanäle
+Datenkanälen
+Datenkommunikation
+Datenkommunikationsleitung
+Datenkommunikationsleitungen
+Datenlink
+Datenmodell
+Datenmodelle
+Datenmodellen
+Datenmodells
+Datennetz
+Datennetze
+Datennetzen
+Datennetzes
+Datennetzinterface
+Datennetzinterfaces
+Datennetztopologie
+Datennetzwerk
+Datennetzwerke
+Datenobjekt
+Datenobjekte
+Datenobjekten
+Datenobjekts
+Datenorganisation
+Datenpegel
+Datenpuffer
+Datenrepräsentation
+Datenrepräsentationen
+Datensammlung
+Datensammlungen
+Datensatz
+Datensatzes
+Datenschnittstelle
+Datenschnittstellen
+Datenschutz
+Datenschutzes
+Datenschützer
+Datenschützerin
+Datenschützerinnen
+Datenschützers
+Datenserver
+Datensicherheit
+Datensicherung
+Datensicherungen
+Datensichtgerät
+Datensichtgeräte
+Datensichtgeräten
+Datensichtgerätes
+Datensichtgeräts
+Datenspeicher
+Datenspeichers
+Datenspeicherung
+Datensprungweite
+Datenstrom
+Datenstroms
+Datenstruktur
+Datenstrukturen
+Datenströme
+Datenströmen
+Datensätze
+Datensätzen
+Datentechnik
+Datenterminal
+Datenterminals
+Datentransfer
+Datentransferrate
+Datentransferraten
+Datenträger
+Datenträgern
+Datenträgers
+Datentyp
+Datentypen
+Datenverarbeitung
+Datenverarbeitungen
+Datenverarbeitungsanlage
+Datenverarbeitungsanlagen
+Datenverarbeitungsexperte
+Datenverarbeitungsexperten
+Datenverarbeitungssystem
+Datenverarbeitungssysteme
+Datenverarbeitungssystemen
+Datenverarbeitungssystems
+Datenverarbeitungszentrale
+Datenverarbeitungszentralen
+Datenverbindung
+Datenverbindungen
+Datenverkehr
+Datenverkehrs
+Datenverlust
+Datenvolumen
+Datenwert
+Datenwerte
+Datenwerten
+Datenwerts
+Datenwort
+Datenworts
+Datenzugriff
+Datenzugriffe
+Datenübergabe
+Datenübermittlung
+Datenübernahme
+Datenübertragung
+Datenübertragungskosten
+Datenübertragungsprogramm
+Datenübertragungsprogramme
+Datenübertragungsprogrammen
+Datenübertragungsprogramms
+Datenübertragungsrate
+Datenübertragungsraten
+Datenübertragungsrichtung
+Datenübertragungsrichtungen
+Datenübertragungssoftware
+Datenübertragungsstrecke
+Datenübertragungsstrecken
+Datenübertragungswegen
+Datex
+Dativ
+Dativs
+Dattel
+Datteln
+Datum
+Datums
+Datumsangabe
+Datumsangaben
+Dauer
+Dauerauftrag
+Dauerauftrages
+Dauerauftrags
+Daueraufträge
+Daueraufträgen
+Dauerbrenner
+Dauererfolg
+Dauerhaftigkeit
+Dauerlauf
+Dauerlaufes
+Dauerlaufs
+Dauerläufe
+Dauerläufen
+Dauerlösung
+Dauerzustand
+Dauerzustandes
+Dauerzustands
+Dauerzustände
+Dauerzuständen
+Daumen
+Daumens
+Daune
+Daunen
+David
+Davids
+Davidson
+Davidsons
+Davidswache
+Davis
+Davos
+Deaktivierung
+Debatte
+Debatten
+Debattenpunkt
+Debuglevel
+Debuglevels
+Debussy
+Debussys
+Debüt
+Debütant
+Debütanten
+Debüts
+Deckadresse
+Deckadressen
+Deckbett
+Deckbetten
+Deckbettes
+Deckbetts
+Deckblatt
+Deckblattes
+Deckblätter
+Deckel
+Deckelblatt
+Deckeln
+Deckels
+Deckfarbe
+Deckfarben
+Deckmantel
+Deckmantels
+Deckmäntel
+Deckmänteln
+Deckname
+Decknamen
+Decknamens
+Deckung
+Deckungen
+Decoder
+Decodiereinheit
+Decodiereinheiten
+Decodierung
+Decodierungen
+Deduktion
+Deduktionen
+Deduktionsmethode
+Deduktionsmethoden
+Deduktionsregel
+Deduktionsregeln
+Deduktionsschema
+Defaultwert
+Defaultwerte
+Defaultwerten
+Defaultwerts
+Defensivposition
+Defensivpositionen
+Definiertheit
+Definition
+Definitionen
+Definitionsbereich
+Definitionsbereiche
+Definitionsbereichen
+Definitionsbereichs
+Definitionszeit
+Defizit
+Defizite
+Defiziten
+Defizits
+Deflation
+Deflationen
+Deformation
+Deformationen
+Deformierung
+Deformierungen
+Defätismus
+Degen
+Degeneration
+Degens
+Degradierung
+Degression
+Dehnbarkeit
+Dehnung
+Dehnungen
+Deich
+Deiche
+Deichen
+Deiches
+Deichsel
+Deichseln
+Deinstallation
+Dekade
+Dekaden
+Dekadenz
+Dekagramm
+Dekalog
+Dekan
+Dekanat
+Dekane
+Dekanen
+Dekans
+Deklamation
+Deklamationen
+Deklamator
+Deklamatoren
+Deklamators
+Deklaration
+Deklarationen
+Deklarationspflicht
+Deklarationsteil
+Deklarationsteile
+Deklarationsteilen
+Deklarationsteils
+Deklination
+Dekolletee
+Dekolletees
+Dekolleté
+Dekolletés
+Dekompression
+Dekor
+Dekorateur
+Dekorateure
+Dekorateuren
+Dekorateurs
+Dekoration
+Dekorationen
+Dekors
+Dekrementierung
+Dekret
+Dekrete
+Dekreten
+Dekretes
+Dekrets
+Delaware
+Delegation
+Delegationen
+Delfin
+Delfine
+Delfinen
+Delfins
+Delhi
+Delikatesse
+Delikatessen
+Delikt
+Delikte
+Delikten
+Deliktes
+Delikts
+Delirien
+Delirium
+Delle
+Dellen
+Delors
+Delphi
+Delphin
+Delphine
+Delphinen
+Delphins
+Delta
+Deltas
+Demagoge
+Demagogen
+Demagogie
+Demarkationslinie
+Demarkationslinien
+Dementi
+Dementierung
+Dementierungen
+Demo
+Demobilisierung
+Demobilisierungen
+Demokrat
+Demokraten
+Demokratie
+Demokratien
+Demokratisierung
+Demolierung
+Demolierungen
+Demonstrant
+Demonstration
+Demonstrationen
+Demontage
+Demontagen
+Demonteur
+Demoralisation
+Demosoftware
+Demoversion
+Demoversionen
+Demut
+Demütigung
+Demütigungen
+Denkansatz
+Denkansatzes
+Denkanstoß
+Denkanstoßes
+Denkanstöße
+Denkanstößen
+Denkansätze
+Denkansätzen
+Denkbarkeit
+Denker
+Denkern
+Denkers
+Denkfabrik
+Denkfaulheit
+Denkfehler
+Denkfehlern
+Denkfehlers
+Denkfreiheit
+Denkfreiheiten
+Denklinie
+Denklinien
+Denkmal
+Denkmalen
+Denkmethode
+Denkmethoden
+Denkmäler
+Denkpause
+Denkpausen
+Denkprozess
+Denkprozesse
+Denkprozessen
+Denkprozesses
+Denkschema
+Denkschemas
+Denkschemata
+Denkschrift
+Denkschriften
+Denkspiel
+Denkvermögen
+Denkvermögens
+Denkweise
+Denkweisen
+Denkwürdigkeit
+Denkzettel
+Denkzetteln
+Denkzettels
+Denkzwang
+Denkzwangs
+Denkzwänge
+Denkzwängen
+Dentist
+Dentisten
+Dentistin
+Dentistinnen
+Denunziant
+Denunzianten
+Denunziantin
+Denunziantinnen
+Denunziation
+Denunziationen
+Departement
+Departements
+Depesche
+Depeschen
+Deportation
+Deportationen
+Depositen
+Depot
+Depots
+Depression
+Depressionen
+Dereferenzierung
+Derivat
+Derivate
+Derivaten
+Derivats
+Deserteur
+Deserteure
+Deserteuren
+Deserteurs
+Desertion
+Desertionen
+Design
+Designs
+Desillusion
+Desinfektion
+Desinfektionen
+Desinfizierung
+Desintegration
+Desintegrationen
+Desinteresse
+Desinteresses
+Despot
+Despoten
+Despotie
+Dessert
+Desserts
+Dessous
+Destabilisierung
+Destillat
+Destillateur
+Destillation
+Destillationen
+Destillierung
+Destillierungen
+Destination
+Destinationen
+Destruktion
+Detail
+Detailfrage
+Detailfragen
+Detailfülle
+Detailgenauigkeit
+Detailinformation
+Detailinformationen
+Detailkenntnis
+Detailkenntnisse
+Detailkenntnissen
+Detaillierung
+Detaillierungsgrad
+Detaillierungsgrade
+Detaillierungsgraden
+Detaillierungsgrades
+Detaillierungsgrads
+Details
+Detailvorschlag
+Detailvorschlages
+Detailvorschlags
+Detailvorschläge
+Detailvorschlägen
+Detektierung
+Detektion
+Detektiv
+Detektive
+Detektiven
+Detektivs
+Detektor
+Detektors
+Determinismus
+Detlef
+Detlefs
+Detlev
+Detlevs
+Detroit
+Deut
+Deuterium
+Deutlichkeit
+Deutschland
+Deutschlands
+Deutung
+Deutungen
+Devalvierung
+Devise
+Devisen
+Devon
+Devons
+Dez
+Dezember
+Dezembers
+Dezentralisation
+Dezentralisierung
+Dezernat
+Dezernate
+Dezernaten
+Dezernats
+Dezimalbetrag
+Dezimalbetrages
+Dezimalbetrags
+Dezimalbeträge
+Dezimalbeträgen
+Dezimaldarstellung
+Dezimalpunkt
+Dezimalrechnung
+Dezimalrechnungen
+Dezimalsystem
+Dezimalsystems
+Dezimalwert
+Dezimalwerte
+Dezimalwerten
+Dezimalwertes
+Dezimalwerts
+Dezimalzahl
+Dhabi
+Dia
+Diabetiker
+Diabetikerin
+Diabetikerinnen
+Diabetikern
+Diabetikers
+Diadem
+Diagnose
+Diagnosemöglichkeit
+Diagnosemöglichkeiten
+Diagnosen
+Diagnosesystem
+Diagnosesysteme
+Diagnosesystemen
+Diagnosesystems
+Diagnostik
+Diagramm
+Diagramme
+Diagrammen
+Diagramms
+Diakone
+Diakonen
+Diakonie
+Dialekt
+Dialekte
+Dialekten
+Dialektes
+Dialektik
+Dialekts
+Dialektunabhängigkeit
+Dialog
+Dialogablauf
+Dialogablaufs
+Dialogabläufe
+Dialogabläufen
+Dialoge
+Dialogen
+Dialoges
+Dialogpartner
+Diamant
+Diamanten
+Diamantring
+Diapositiv
+Diapositive
+Diapositiven
+Diapositivs
+Diaprojektor
+Diaprojektors
+Dias
+Diaschau
+Dichotomie
+Dichter
+Dichterin
+Dichterinnen
+Dichtern
+Dichters
+Dichtfläche
+Dichtflächen
+Dichtgummi
+Dichtheit
+Dichtigkeit
+Dichtung
+Dichtungen
+Dickkopf
+Dickköpfe
+Dickköpfen
+Didaktik
+Dieb
+Diebe
+Dieben
+Diebes
+Diebin
+Diebinnen
+Diebs
+Diebstahl
+Diebstahls
+Diebstähle
+Diebstählen
+Diele
+Dielen
+Diener
+Dienern
+Dieners
+Dienerschaft
+Dienst
+Dienstag
+Dienstage
+Dienstagen
+Dienstags
+Dienstalter
+Dienstaltern
+Dienstalters
+Dienstantritt
+Dienstantrittes
+Dienstanweisung
+Dienstanweisungen
+Dienstbarkeit
+Dienstbote
+Dienstboten
+Dienste
+Diensteifer
+Diensteifers
+Diensten
+Dienstes
+Dienstgeheimnis
+Dienstgeheimnisse
+Dienstgeheimnissen
+Dienstgeheimnisses
+Dienstgespräch
+Dienstgespräche
+Dienstgesprächen
+Dienstgesprächs
+Dienstgrad
+Dienstgrade
+Dienstgraden
+Dienstgrades
+Dienstgrads
+Dienstherr
+Dienstherren
+Dienstherrn
+Dienstjahr
+Dienstjahre
+Dienstjahren
+Dienstjahres
+Dienstjahrs
+Dienstleistung
+Dienstleistungen
+Dienstleistungsangebot
+Dienstleistungsangebote
+Dienstleistungsangeboten
+Dienstleistungsangebots
+Dienstleistungsgesellschaft
+Dienstleistungsunternehmen
+Dienstleistungsunternehmens
+Dienstmädchen
+Dienstmädchens
+Dienstordnung
+Dienstordnungen
+Dienstpersonal
+Dienstpflicht
+Dienstpflichten
+Dienstprogramm
+Dienstprogramme
+Dienstprogrammen
+Dienstprogramms
+Dienstraum
+Dienstraumes
+Dienstraums
+Dienstreise
+Dienstreisen
+Diensträume
+Diensträumen
+Dienstsiegel
+Dienstsitz
+Dienststelle
+Dienststellen
+Dienstverhältnis
+Dienstverhältnisse
+Dienstverhältnissen
+Dienstverhältnisses
+Dienstvorschrift
+Dienstvorschriften
+Dienstwagen
+Dienstwagens
+Dienstweg
+Dienstwege
+Dienstwegen
+Dienstweges
+Dienstwohnung
+Dienstwohnungen
+Dienstzeit
+Dienstzeiten
+Dienstälteste
+Dienstältesten
+Dienstältester
+Diesel
+Dieter
+Dieters
+Dietrich
+Dietriche
+Dietrichen
+Dietrichs
+Diffamierung
+Diffamierungen
+Differential
+Differentiale
+Differentialen
+Differentialgleichung
+Differentialgleichungen
+Differentialrechnung
+Differentials
+Differenz
+Differenzbetrag
+Differenzbetrages
+Differenzbetrags
+Differenzbeträge
+Differenzbeträgen
+Differenzen
+Differenzial
+Differenziale
+Differenzialen
+Differenzialgleichung
+Differenzialgleichungen
+Differenzialrechnung
+Differenzials
+Differenzierung
+Differenzierungen
+Differenzvektor
+Differenzvektoren
+Differenzvektors
+Diffusion
+Digitalanzeige
+Digitalanzeigen
+Digitalausgabe
+Digitalausgaben
+Digitalausgang
+Digitalausgangs
+Digitalausgänge
+Digitalausgängen
+Digitaleingabe
+Digitaleingaben
+Digitaleingang
+Digitaleingangs
+Digitaleingänge
+Digitaleingängen
+Digitalisierung
+Digitalrechner
+Digitalrechnern
+Digitalrechners
+Digitalschaltung
+Digitalschaltungen
+Digitalteil
+Digitaluhr
+Digitalwandler
+Diktafon
+Diktafone
+Diktafons
+Diktaphon
+Diktaphone
+Diktaphons
+Diktat
+Diktate
+Diktaten
+Diktates
+Diktator
+Diktators
+Diktatur
+Diktaturen
+Diktion
+Diktionen
+Dilemma
+Dilemmas
+Dilettant
+Dilettanten
+Dilettantismus
+Dill
+Dills
+Dilschalter
+Dilschaltereinstellung
+Dilschaltereinstellungen
+Dilschalters
+Dilschalterstellung
+Dilschalterstellungen
+Dilswitch
+Dilswitches
+Dimension
+Dimensionen
+Dimensionierung
+Dinar
+Ding
+Dinge
+Dingen
+Dinger
+Dingern
+Dings
+Dinosaurier
+Diode
+Dioden
+Diodenbrücke
+Diodenbuchse
+Diodensteckbuchse
+Diogenes
+Dionysios
+Dioptrie
+Dioptrien
+Diphtherie
+Diphtheriebazille
+Diphtheriebazillen
+Diphthong
+Diphthonge
+Diphthongen
+Diphthongs
+Dipl
+Diplom
+Diplomand
+Diplomanden
+Diplomarbeit
+Diplomarbeiten
+Diplomarbeitsthema
+Diplomarbeitsthemas
+Diplomat
+Diplomaten
+Diplomatie
+Diplome
+Diplomen
+Diplomfeier
+Diplomprüfung
+Diplomprüfungen
+Diploms
+Directories
+Directory
+Direktion
+Direktionen
+Direktive
+Direktiven
+Direktor
+Direktorat
+Direktorate
+Direktoraten
+Direktorates
+Direktorats
+Direktoren
+Direktorin
+Direktorinnen
+Direktorium
+Direktrice
+Direktricen
+Dirigent
+Dirigenten
+Dirn
+Dirndl
+Dirne
+Dirnen
+Disharmonie
+Disjunktion
+Disjunktionen
+Disk
+Diskette
+Disketten
+Diskettenlaufwerk
+Diskettenlaufwerke
+Diskettenlaufwerken
+Diskettenlaufwerks
+Diskettensatz
+Diskont
+Diskonte
+Diskonten
+Diskonts
+Diskothek
+Diskotheken
+Diskquota
+Diskquotas
+Diskrepanz
+Diskrepanzen
+Diskretion
+Diskriminierung
+Diskriminierungen
+Diskurs
+Diskurse
+Diskursen
+Diskurses
+Diskus
+Diskusse
+Diskussen
+Diskusses
+Diskussion
+Diskussionen
+Diskussionsbeitrag
+Diskussionsbeitrages
+Diskussionsbeitrags
+Diskussionsbeiträge
+Diskussionsbeiträgen
+Diskussionseifer
+Diskussionsforum
+Diskussionsgegenstand
+Diskussionsgrundlage
+Diskussionsgrundlagen
+Diskussionsgruppe
+Diskussionsgruppen
+Diskussionskreis
+Diskussionskreise
+Diskussionskreisen
+Diskussionskreises
+Diskussionsleiter
+Diskussionspapier
+Diskussionspartner
+Diskussionspunkt
+Diskussionsreaktion
+Diskussionsreaktionen
+Diskussionsrunde
+Diskussionsrunden
+Diskussionsstand
+Diskussionsstoff
+Diskussionsteilnehmer
+Diskussionsteilnehmern
+Diskussionsteilnehmers
+Diskussionsthema
+Diskussionsvorschlag
+Diskussionsvorschlags
+Diskussionsvorschläge
+Diskussionsvorschlägen
+Diskussionszeit
+Diskuswerfer
+Diskzugriff
+Diskzugriffe
+Diskzugriffen
+Diskzugriffs
+Disney
+Disneys
+Disparität
+Disparitäten
+Dispens
+Dispensen
+Dispersion
+Display
+Displayabdeckung
+Displayabdeckungen
+Displaycontroller
+Displaycontrollers
+Displayeinheit
+Displayeinheiten
+Displayfeld
+Displayfenster
+Displayfenstern
+Displayfensters
+Displayfensterumrisse
+Displayinterface
+Displayinterfaces
+Displays
+Displaysteckverbinder
+Disposition
+Dispositionen
+Disput
+Dispute
+Disputen
+Disputes
+Disputs
+Disqualifikation
+Disqualifizierung
+Dissens
+Dissertation
+Dissertationen
+Dissident
+Dissidenten
+Dissonanz
+Dissonanzen
+Distanz
+Distanzen
+Distanzierung
+Distel
+Disteln
+Distribution
+Distributionen
+Distrikt
+Distrikte
+Distrikten
+Distriktes
+Disziplin
+Disziplinen
+Disziplinierung
+Diva
+Divas
+Divergenz
+Divergenzen
+Diversifikation
+Dividende
+Dividenden
+Division
+Divisionen
+Divisor
+Divisors
+Diwan
+Diwans
+Dixieland
+Diät
+Diäten
+Diözesan
+Diözesane
+Diözesanen
+Diözesans
+Diözese
+Diözesen
+Dnjepr
+Dobermann
+Docht
+Dochte
+Dochten
+Dochtes
+Dochts
+Dock
+Docks
+Doge
+Dogen
+Dogge
+Doggen
+Dogma
+Dogmas
+Dogmatik
+Dogmatiker
+Dogmatikern
+Dogmatikers
+Dogmatismus
+Dogmen
+Dohle
+Dohlen
+Doktor
+Doktorand
+Doktoranden
+Doktorandin
+Doktorandinnen
+Doktorarbeit
+Doktorarbeiten
+Doktoren
+Doktorgrade
+Doktorgraden
+Doktors
+Doktorväter
+Doktorwürde
+Doktorwürden
+Doktrin
+Doktrinen
+Doku
+Dokument
+Dokumentarbeitrag
+Dokumentarbeitrages
+Dokumentarbeitrags
+Dokumentarbeiträge
+Dokumentarbeiträgen
+Dokumentarbericht
+Dokumentarberichte
+Dokumentarberichten
+Dokumentarberichts
+Dokumentation
+Dokumentationen
+Dokumente
+Dokumenten
+Dokumentes
+Dokuments
+Dolch
+Dolche
+Dolchen
+Dolchs
+Dollar
+Dollars
+Dolly
+Dollys
+Dolmetscher
+Dolmetscherin
+Dolmetscherinnen
+Dolmetschern
+Dolmetschers
+Dom
+Dome
+Domen
+Domes
+Dominanz
+Dominanzstreben
+Dominanzstrebens
+Dominikaner
+Domino
+Dominoeffekt
+Dominos
+Domizil
+Domizile
+Domizilen
+Domizils
+Dompfaff
+Dompteur
+Dompteurs
+Dompteuse
+Dompteusen
+Domäne
+Domänen
+Don
+Donald
+Donalds
+Donator
+Donatoren
+Donators
+Donau
+Donner
+Donnergang
+Donners
+Donnerschlag
+Donnerschlages
+Donnerschlags
+Donnerschläge
+Donnerschlägen
+Donnerstag
+Donnerstage
+Donnerstagen
+Donnerstages
+Donnerstimme
+Donnerstimmen
+Doping
+Dopings
+Doppel
+Doppelaufgabe
+Doppelaufgaben
+Doppeleurokarte
+Doppelgänger
+Doppelgängern
+Doppelgängers
+Doppelinklinometer
+Doppelkinn
+Doppelkinne
+Doppelkinnen
+Doppelkinns
+Doppellaut
+Doppellaute
+Doppellauten
+Doppellautes
+Doppelmoral
+Doppelname
+Doppelnamen
+Doppelnamens
+Doppelpunkt
+Doppelpunkte
+Doppelpunkten
+Doppelpunktes
+Doppelpunkts
+Doppels
+Doppelstrategie
+Doppelstrategien
+Doppelung
+Doppelungen
+Doppelwirkung
+Doppelwirkungen
+Doppelzentner
+Doppelzentners
+Doppelzimmer
+Doppelzimmern
+Dopplung
+Dopplungen
+Dora
+Dorado
+Doras
+Dorf
+Dorfe
+Dorfes
+Doris
+Dorn
+Dornen
+Dornier
+Dorniers
+Dornröschen
+Dornröschens
+Dorns
+Dorothee
+Dorothees
+Dorsch
+Dorsche
+Dorschen
+Dorsches
+Dorschs
+Dortmund
+Dose
+Dosen
+Dosierung
+Dosierungen
+Dosis
+Dosiswert
+Dosiswerte
+Dosiswerten
+Dosiswertes
+Dosiswerts
+Dotbuffer
+Dotbuffers
+Dotierung
+Dotierungen
+Dotoffset
+Dotoffsets
+Dotposition
+Dotpositionen
+Dotreihe
+Dotreihen
+Dotter
+Dottern
+Double
+Doubles
+Dover
+Dow
+Download
+Downloads
+Dozent
+Dr
+Drache
+Drachen
+Drachenkampf
+Drachme
+Drachmen
+Dracula
+Draculas
+Dragee
+Dragees
+Dragoner
+Draht
+Drahtes
+Drama
+Dramas
+Dramatik
+Dramatiker
+Dramatikerin
+Dramatikerinnen
+Dramatikern
+Dramatikers
+Dramaturg
+Dramaturgen
+Dramaturgie
+Dramen
+Drang
+Drangs
+Drangzeit
+Draufgabe
+Draufgaben
+Draufgänger
+Draufgängerin
+Draufgängerinnen
+Draufgängern
+Draufgängers
+Draufgängertum
+Draufsicht
+Drechsler
+Drechslerei
+Drechslereien
+Dreck
+Dreckes
+Dreckhaufen
+Dreckhaufens
+Drecks
+Drecksache
+Drecksachen
+Drecksarbeit
+Dreckszeug
+Drehachse
+Drehachsen
+Drehantrieb
+Dreharbeit
+Dreharbeiten
+Drehbank
+Drehbanken
+Drehbewegung
+Drehbewegungen
+Drehbleistift
+Drehbleistifte
+Drehbleistiften
+Drehbleistiftes
+Drehbuch
+Drehbuches
+Drehbänke
+Drehbänken
+Drehbücher
+Drehbüchern
+Drehbühne
+Drehbühnen
+Dreher
+Drehern
+Drehers
+Drehgriff
+Drehgriffe
+Drehgriffen
+Drehgriffs
+Drehmoment
+Drehmomente
+Drehmomenten
+Drehmoments
+Drehpotentiometer
+Drehpotentiometern
+Drehpotentiometers
+Drehpoti
+Drehpunkt
+Drehpunkte
+Drehpunkten
+Drehpunktes
+Drehrichtung
+Drehrichtungen
+Drehscheibe
+Drehscheiben
+Drehsinn
+Drehsinns
+Drehstrom
+Drehstromfrequenz
+Drehstuhl
+Drehstuhls
+Drehstühle
+Drehstühlen
+Drehtür
+Drehtüre
+Drehtüren
+Drehung
+Drehungen
+Drehwinkel
+Drehwinkeln
+Drehwinkels
+Drehzahl
+Drehzahlen
+Dreieck
+Dreiecke
+Dreiecken
+Dreiecks
+Dreieckstuch
+Dreiecksverhältnis
+Dreiecksverhältnisse
+Dreiecksverhältnissen
+Dreiecksverhältnisses
+Dreiergruppe
+Dreiergruppen
+Dreifaltigkeit
+Dreifuß
+Dreifußes
+Dreifüße
+Dreifüßen
+Dreiklang
+Dreingabe
+Dreingaben
+Dreisatz
+Dreistigkeit
+Dreistigkeiten
+Dreiteilung
+Dreivierteltakt
+Dreivierteltaktes
+Dreißiger
+Dreißigern
+Dreschflegel
+Dreschflegeln
+Dresden
+Dresdner
+Dress
+Dresse
+Dresses
+Dresseur
+Dresseure
+Dresseuren
+Dresseurs
+Dressman
+Dressur
+Dressuren
+Drift
+Drilling
+Drillinge
+Drillingen
+Drillings
+Dringlichkeit
+Dringlichkeitsantrag
+Dringlichkeitsantrages
+Dringlichkeitsantrags
+Dringlichkeitsanträge
+Dringlichkeitsanträgen
+Dringlichkeitsstufe
+Dringlichkeitsstufen
+Drink
+Drinks
+Drittel
+Dritteln
+Drittels
+Drittklässler
+Drittklässlerin
+Drittklässlerinnen
+Drittklässlern
+Drittklässlers
+Drittmittel
+Drittmitteln
+Drittmittels
+Droge
+Drogen
+Drogerie
+Drogerien
+Drogist
+Drogisten
+Drohbrief
+Drohbriefe
+Drohbriefen
+Drohbriefes
+Drohung
+Drohungen
+Dromedar
+Dromedare
+Dromedaren
+Dromedars
+Droschke
+Droschken
+Drossel
+Drosselung
+Drosselungen
+Drosslung
+Drosslungen
+Druck
+Druckens
+Drucker
+Druckeranpassung
+Druckeranpassungen
+Druckeranschluss
+Druckeranschlusses
+Druckeranschlüsse
+Druckeranschlüssen
+Druckeransteuerung
+Druckerausgabe
+Druckerausgang
+Druckerbefehl
+Druckerbefehle
+Druckerbefehlen
+Druckerbefehls
+Druckerbereich
+Druckerbereiche
+Druckerbereichen
+Druckerbereichs
+Druckerbild
+Druckerbilddarstellung
+Druckerbilddarstellungen
+Druckerbuffer
+Druckerbuffers
+Druckerei
+Druckereien
+Druckereinstellung
+Druckereinstellungen
+Druckerfamilie
+Druckerfamilien
+Druckerfunktion
+Druckerfunktionen
+Druckergehäuse
+Druckergehäuses
+Druckergeneration
+Druckergenerationen
+Druckerhardware
+Druckerinitialisierung
+Druckerinitialisierungen
+Druckerinstallation
+Druckerinstallationen
+Druckerinterface
+Druckerinterfaces
+Druckerkabel
+Druckerkombination
+Druckerkombinationen
+Druckermechanik
+Druckermechaniken
+Druckermotor
+Druckern
+Druckernadel
+Druckernadeln
+Druckerplatine
+Druckerplatinen
+Druckerprogramm
+Druckerprogramme
+Druckerprogrammen
+Druckerprogramms
+Druckerpuffer
+Druckers
+Druckerschnittstelle
+Druckerschnittstellen
+Druckersteckverbinder
+Druckersteuerzeichen
+Druckertask
+Druckertreiber
+Druckertreibers
+Druckertyp
+Druckertypen
+Druckertyps
+Druckerverbindungskabel
+Druckformat
+Druckhardware
+Druckknopf
+Druckknöpfe
+Druckknöpfen
+Druckkopf
+Druckkopfbelastung
+Druckkopfes
+Druckkopfhalteschrauben
+Druckkopfjustierung
+Druckkopfmotor
+Druckkopfnadel
+Druckkopfnadeln
+Druckkopfqqlebensdauer
+Druckkopfs
+Druckkopftausch
+Druckkopfwagen
+Druckkopfwagens
+Druckköpfe
+Drucklegung
+Druckmittel
+Druckpunkt
+Druckrichtung
+Drucks
+Drucksache
+Drucksachen
+Druckschrift
+Druide
+Druiden
+Drusen
+Drähte
+Drähten
+Drückeberger
+Drückebergern
+Drückebergers
+Drücker
+Drückern
+Drüse
+Drüsen
+Dschingis
+Dschungel
+Dschungels
+Dualismus
+Dubcek
+Dubceks
+Dublette
+Dubletten
+Dublin
+Dudelsack
+Duden
+Duell
+Duelle
+Duellen
+Duells
+Duett
+Duette
+Duetten
+Duetts
+Duft
+Duisburg
+Duisburgs
+Dukaten
+Duktus
+Duldsamkeit
+Duldung
+Dumas
+Dummheit
+Dummheiten
+Dummkopf
+Dummkopfes
+Dummkopfs
+Dummköpfe
+Dummköpfen
+Dummyfunktion
+Dummyfunktionen
+Dumpfheit
+Dumpingpreise
+Dumpingpreisen
+Dung
+Dunges
+Dungs
+Dunkelheit
+Dunkelmänner
+Dunkelmännern
+Dunkeln
+Dunst
+Dunstes
+Dunstkreis
+Dunstkreisen
+Dunstkreises
+Dunstwolke
+Dunstwolken
+Duplikat
+Duplikate
+Duplikaten
+Duplikates
+Duplizierung
+Duplizität
+Dur
+Duralith
+Durcharbeitung
+Durchblick
+Durchblicks
+Durchblutung
+Durchbruch
+Durchbruchs
+Durchbrüche
+Durchbrüchen
+Durchdringung
+Durcheinander
+Durcheinanders
+Durchfahrt
+Durchfahrten
+Durchfall
+Durchfallquote
+Durchfallquoten
+Durchfalls
+Durchfluss
+Durchflusses
+Durchflutung
+Durchführung
+Durchführungen
+Durchgabe
+Durchgang
+Durchgangs
+Durchgangsstraße
+Durchgangsstraßen
+Durchgangsverkehr
+Durchgangsverkehrs
+Durchgänge
+Durchgängen
+Durchhalteparole
+Durchhalteparolen
+Durchhaltevermögen
+Durchhaltevermögens
+Durchkontaktierung
+Durchlass
+Durchlasses
+Durchlaucht
+Durchlauf
+Durchlaufes
+Durchlaufrichtung
+Durchlaufs
+Durchleuchtung
+Durchleuchtungen
+Durchlässe
+Durchlässen
+Durchlässigkeit
+Durchläufe
+Durchläufen
+Durchmesser
+Durchmessers
+Durchmischung
+Durchquerung
+Durchsatz
+Durchschlag
+Durchschlages
+Durchschlagpapier
+Durchschlagpapiers
+Durchschlags
+Durchschlagskraft
+Durchschläge
+Durchschlägen
+Durchschnitt
+Durchschnitte
+Durchschnitten
+Durchschnittes
+Durchschnitts
+Durchschnittswert
+Durchschnittswerten
+Durchschrift
+Durchschriften
+Durchschuss
+Durchschusses
+Durchschüsse
+Durchschüssen
+Durchsetzbarkeit
+Durchsetzung
+Durchsetzungsvermögen
+Durchsetzungsvermögens
+Durchsicht
+Durchsichten
+Durchsteiger
+Durchsteigern
+Durchsteigers
+Durchsuchung
+Durchsuchungen
+Durchtriebenheit
+Durchwahl
+Durchzug
+Durchzuges
+Durchzugs
+Durst
+Durstes
+Durstlöscher
+Durststrecke
+Durststrecken
+Duschbad
+Duschnische
+Duschnischen
+Dusel
+Dutt
+Dutte
+Dutts
+Dutzend
+Dutzenden
+Dynamik
+Dynamikumfang
+Dynamikumfanges
+Dynamikumfangs
+Dynamisierung
+Dynamit
+Dynamits
+Dynamo
+Dynamos
+Dynastie
+Dynastien
+Dächer
+Dächern
+Dämme
+Dämmen
+Dämmerlicht
+Dämmerstunde
+Dämmerstunden
+Dämmerung
+Dämmerungen
+Dämon
+Dämonen
+Dämonie
+Dämons
+Dämpfung
+Dämpfungen
+Däne
+Dänemark
+Dänemarks
+Dänen
+Dänin
+Däninnen
+Därme
+Därmen
+Däumchen
+Däumchens
+Dörfchen
+Dörfchens
+Dörfer
+Dörfern
+Düfte
+Düften
+Düne
+Dünen
+Dünger
+Düngern
+Düngers
+Düngung
+Dünkirchen
+Dünnschiss
+Dünnschisses
+Dürer
+Dürers
+Dürftigkeit
+Dürre
+Dürren
+Dürrenmatt
+Dürrenmatts
+Düse
+Düsen
+Düsentrieb
+Düsentriebs
+Düsseldorf
+Düsterkeit
+EDV
+EFTA
+EG
+EH
+EKG
+EPROM
+ETH
+EWG
+EWS
+EWU
+Ebbe
+Ebben
+Ebenbild
+Ebenbilder
+Ebenbildern
+Ebenbildes
+Ebenheit
+Ebenholz
+Eber
+Eberhard
+Eberhards
+Ebern
+Ebers
+Ebert
+Eberts
+Echnaton
+Echnatons
+Echo
+Echos
+Echtzeitbetriebssystem
+Echtzeitbetriebssysteme
+Echtzeitbetriebssystemen
+Echtzeitbetriebssystems
+Echtzeiteigenschaften
+Echtzeitreaktion
+Echtzeitreaktionen
+Echtzeitverarbeitung
+Eckchen
+Eckchens
+Ecke
+Ecken
+Eckernförde
+Eckzahn
+Eckzahnes
+Eckzahns
+Eckzimmer
+Eckzähne
+Eckzähnen
+Economyklasse
+Ecu
+Ecuador
+Ecus
+Edeka
+Edelmann
+Edelmannes
+Edelmanns
+Edelmetall
+Edelmetalle
+Edelmetallen
+Edelmetalls
+Edelmut
+Edelmänner
+Edelmännern
+Edelstahl
+Edelstein
+Edelsteine
+Edelsteinen
+Edelsteins
+Edeltraud
+Edeltrauds
+Edelweiß
+Edelweiße
+Edelweißen
+Edelweißes
+Eden
+Edens
+Eder
+Eders
+Edinburgh
+Edison
+Edisons
+Editor
+Editoren
+Editorial
+Editors
+Edmund
+Edmunds
+Efeu
+Efeus
+Effekt
+Effekte
+Effekten
+Effektes
+Effekthascherei
+Effektivität
+Effekts
+Effizienz
+Effizienzgewinn
+Effizienzgewinne
+Effizienzgewinnen
+Effizienzgewinns
+Effizienzsteigerung
+Effizienzsteigerungen
+Effizienzverbesserung
+Effizienzverlust
+Effizienzverluste
+Effizienzverlusten
+Effizienzverlustes
+Effizienzverlusts
+Egalisierung
+Egel
+Egeln
+Egels
+Egge
+Eggen
+Ego
+Egoismen
+Egoismus
+Egoist
+Egoisten
+Egoistin
+Egoistinnen
+Egos
+Ehe
+Ehen
+Ehrbarkeit
+Ehrbegriff
+Ehrbegriffe
+Ehrbegriffen
+Ehrbegriffs
+Ehrensache
+Ehrensachen
+Ehrenwort
+Ehrenwortes
+Ehrerbietung
+Ehrerbietungen
+Ehrfurcht
+Ehrgefühl
+Ehrgefühls
+Ehrgeiz
+Ehrgeizes
+Ehrlichkeit
+Ehrlosigkeit
+Ehrsamkeit
+Ehrung
+Ehrungen
+Eibe
+Eiben
+Eichamt
+Eiche
+Eichel
+Eicheln
+Eichen
+Eichung
+Eichungen
+Eid
+Eide
+Eidechse
+Eidechsen
+Eiden
+Eides
+Eidgenosse
+Eidgenossen
+Eidgenossenschaft
+Eidotter
+Eidottern
+Eidotters
+Eier
+Eiern
+Eierschwammerl
+Eierspeise
+Eifel
+Eifelberge
+Eifer
+Eifers
+Eifersucht
+Eiffelturm
+Eigelb
+Eigelbe
+Eigelben
+Eigelbs
+Eigen
+Eigenart
+Eigenarten
+Eigenbau
+Eigenbedarf
+Eigenbesitz
+Eigenbetrieb
+Eigenbrötler
+Eigenbrötlern
+Eigenbrötlers
+Eigendynamik
+Eigenentwicklung
+Eigenentwicklungen
+Eigenerfahrung
+Eigenes
+Eigengewicht
+Eigengewichte
+Eigengewichten
+Eigengewichtes
+Eigengewichts
+Eigenheim
+Eigenheime
+Eigenheimen
+Eigenheimes
+Eigenheims
+Eigenheit
+Eigenheiten
+Eigenherstellung
+Eigeninitiative
+Eigeninteresse
+Eigeninteressen
+Eigenkapital
+Eigenkapitals
+Eigenleben
+Eigenlebens
+Eigenlob
+Eigenmittel
+Eigenmächtigkeit
+Eigenmächtigkeiten
+Eigenname
+Eigennamen
+Eigennamens
+Eigennutz
+Eigennutzes
+Eigennutzung
+Eigenschaft
+Eigenschaften
+Eigenschaftswort
+Eigenschaftswortes
+Eigenschaftswörter
+Eigenschaftswörtern
+Eigensinn
+Eigensinnes
+Eigensinns
+Eigentum
+Eigentums
+Eigentümer
+Eigentümerin
+Eigentümerinnen
+Eigentümern
+Eigentümers
+Eigentümerschaft
+Eigentümlichkeit
+Eigentümlichkeiten
+Eigenvektor
+Eigenvektoren
+Eigenvektors
+Eigenverantwortung
+Eigenwert
+Eigenwerten
+Eigenwertes
+Eigenwille
+Eigenwillen
+Eigenwillens
+Eigenwilligkeit
+Eigernordwand
+Eigner
+Eignern
+Eignung
+Eignungen
+Eignungsprüfung
+Eiland
+Eilandes
+Eilauftrag
+Eilauftrages
+Eilauftrags
+Eilaufträge
+Eilaufträgen
+Eilbedürftigkeit
+Eilbrief
+Eilbriefe
+Eilbriefen
+Eilbriefes
+Eilfertigkeit
+Eiltempo
+Eilzuschrift
+Eilzuschriften
+Eilzustellung
+Eimer
+Eimern
+Eimers
+Einakter
+Einaktern
+Einakters
+Einarbeitung
+Einarbeitungszeit
+Einbahnstraße
+Einbahnstraßen
+Einband
+Einbau
+Einbaugerät
+Einbauküche
+Einbauküchen
+Einbaumöglichkeit
+Einbaumöglichkeiten
+Einbaurahmen
+Einbaurahmens
+Einbauraum
+Einbauraumes
+Einbauraums
+Einbauräume
+Einbauräumen
+Einbausatz
+Einberufung
+Einbettung
+Einbeziehung
+Einbildung
+Einbildungen
+Einbindung
+Einblick
+Einblicke
+Einblicken
+Einblicks
+Einbrecher
+Einbrechern
+Einbruch
+Einbruchs
+Einbrüche
+Einbrüchen
+Einbuchtung
+Einbuße
+Einbußen
+Einbände
+Einbänden
+Eindeutigkeit
+Eindringlichkeit
+Eindringling
+Eindringlinge
+Eindringlingen
+Eindringlings
+Eindruck
+Eindrucks
+Eindämmung
+Einehe
+Einengung
+Einengungen
+Einfachheit
+Einfall
+Einfalls
+Einfallsreichtum
+Einfallswinkel
+Einfallswinkeln
+Einfallswinkels
+Einfaltspinsel
+Einfaltspinseln
+Einfaltspinsels
+Einfassung
+Einfassungen
+Einfluss
+Einflussbereich
+Einflusses
+Einflussgröße
+Einflussgrößen
+Einflussmöglichkeit
+Einflussmöglichkeiten
+Einflussnahme
+Einflüsse
+Einflüssen
+Einflüsterung
+Einflüsterungen
+Einfälle
+Einfällen
+Einförmigkeit
+Einfügemodus
+Einfügung
+Einfügungen
+Einfühlung
+Einfühlungskraft
+Einfühlungsvermögen
+Einfühlungsvermögens
+Einführung
+Einführungen
+Eingabe
+Eingabeaufqqforderung
+Eingabedaten
+Eingabedialog
+Eingabedialoge
+Eingabefeld
+Eingabefelder
+Eingabefeldern
+Eingabefenster
+Eingabefenstern
+Eingabefensters
+Eingabeformat
+Eingabegerät
+Eingabekanal
+Eingabemaske
+Eingabemasken
+Eingabemodus
+Eingaben
+Eingabeparameter
+Eingabeparametern
+Eingabestring
+Eingabestrings
+Eingabetastatur
+Eingabetastaturen
+Eingabetaste
+Eingabetasten
+Eingabeterm
+Eingabewert
+Eingabewerte
+Eingabewerten
+Eingabewertes
+Eingabewerts
+Eingang
+Einganges
+Eingangs
+Eingangsbedingung
+Eingangsbedingungen
+Eingangsdaten
+Eingangsgröße
+Eingangsgrößen
+Eingangshalle
+Eingangshallen
+Eingangsimpuls
+Eingangsimpulse
+Eingangsimpulsen
+Eingangsimpulses
+Eingangsleistung
+Eingangsmultiplexer
+Eingangspegel
+Eingangspin
+Eingangspins
+Eingangsplatine
+Eingangspuffer
+Eingangsschaltkreis
+Eingangsschaltkreise
+Eingangssignal
+Eingangssignale
+Eingangsspannung
+Eingangsspannungen
+Eingangstrigger
+Eingangszustand
+Eingangszustands
+Eingeborene
+Eingeborenen
+Eingeborener
+Eingebung
+Eingebungen
+Eingehung
+Eingeständnis
+Eingeständnisse
+Eingeständnissen
+Eingeständnisses
+Eingeweide
+Eingeweiden
+Eingliederung
+Eingrenzung
+Eingriff
+Eingriffe
+Eingriffen
+Eingriffes
+Eingriffs
+Eingriffsmöglichkeit
+Eingriffsmöglichkeiten
+Eingänge
+Eingängen
+Einhalt
+Einhaltes
+Einhalts
+Einhaltung
+Einhaltungen
+Einheit
+Einheiten
+Einheitlichkeit
+Einheitsstreben
+Einheitsstrebens
+Einheitsvektor
+Einheitsvektoren
+Einheitsvektors
+Einholung
+Einigkeit
+Einigung
+Einigungen
+Einigungsform
+Einigungsformel
+Einigungsversuch
+Einkauf
+Einkaufs
+Einkehr
+Einklang
+Einklangs
+Einklänge
+Einklängen
+Einkommen
+Einkommens
+Einkommensteuererklärung
+Einkommensteuererklärungen
+Einkoppelung
+Einkreisung
+Einkäufe
+Einkäufen
+Einkäufer
+Einkäuferin
+Einkäuferinnen
+Einkäufern
+Einkäufers
+Einkünfte
+Einkünften
+Einladung
+Einladungen
+Einlage
+Einlagen
+Einlagerung
+Einlagerungen
+Einlass
+Einlasses
+Einlassung
+Einlassungen
+Einlauf
+Einlaufs
+Einleger
+Einleitung
+Einleitungen
+Einlieferung
+Einlieferungen
+Einlässe
+Einlässen
+Einläufe
+Einläufen
+Einlösung
+Einlösungen
+Einmaligkeit
+Einmarsch
+Einmarsches
+Einmischung
+Einmischungen
+Einmärsche
+Einmärschen
+Einmündung
+Einmündungen
+Einnahme
+Einnahmen
+Einordnung
+Einpendeln
+Einplatinencomputer
+Einplatinensystems
+Einprägsamkeit
+Einquartierung
+Einrad
+Einrichtung
+Einrichtungen
+Einrichtungsgegenstand
+Einrichtungsgegenstandes
+Einrichtungsgegenstände
+Einrichtungsgegenständen
+Einriss
+Einrisse
+Einrissen
+Einrisses
+Einrückung
+Einsamkeit
+Einsatz
+Einsatzbedingung
+Einsatzbedingungen
+Einsatzbereich
+Einsatzbereitschaft
+Einsatzes
+Einsatzfreude
+Einsatzfähigkeit
+Einsatzfälle
+Einsatzfällen
+Einsatzgebiet
+Einsatzgebiete
+Einsatzgebieten
+Einsatzgebietes
+Einsatzgebiets
+Einsatzmöglichkeit
+Einsatzmöglichkeiten
+Einsatzort
+Einsatzorte
+Einsatzorten
+Einsatzortes
+Einsatzorts
+Einsatzreife
+Einsatzspektrum
+Einschaltbegrenzung
+Einschaltens
+Einschaltstrom
+Einschaltstrombegrenzung
+Einschaltung
+Einschaltvorgang
+Einschiebung
+Einschiebungen
+Einschiffung
+Einschiffungen
+Einschlag
+Einschlages
+Einschlags
+Einschluss
+Einschlusses
+Einschläge
+Einschlägen
+Einschlüsse
+Einschlüssen
+Einschnitt
+Einschnitte
+Einschnitten
+Einschnittes
+Einschnürung
+Einschnürungen
+Einschreibebrief
+Einschreibebriefe
+Einschreibebriefen
+Einschreibebriefes
+Einschreibegebühr
+Einschreibegebühren
+Einschreibung
+Einschränkung
+Einschränkungen
+Einschub
+Einschulung
+Einschulungen
+Einschuss
+Einschusses
+Einschussstelle
+Einschussstellen
+Einschätzung
+Einschätzungen
+Einschüchterung
+Einschüchterungsversuch
+Einschüchterungsversuche
+Einschüchterungsversuchen
+Einschüchterungsversuchs
+Einschüsse
+Einschüssen
+Einseitigkeit
+Einsen
+Einsender
+Einsendern
+Einsendeschluss
+Einsendeschlusses
+Einsendeschlüsse
+Einsendeschlüssen
+Einsendetermin
+Einsendung
+Einsendungen
+Einsendungstermin
+Einsetzbarkeit
+Einsetzung
+Einsicht
+Einsichten
+Einsichtnahme
+Einsichtnahmen
+Einsiedler
+Einsiedlerin
+Einsiedlerinnen
+Einsiedlern
+Einsiedlers
+Einsitzer
+Einspannung
+Einsparung
+Einsparungen
+Einsparungsmaßnahme
+Einsparungsmaßnahmen
+Einspeisung
+Einsprache
+Einsprachen
+Einsprengsel
+Einspruch
+Einspruches
+Einspruchs
+Einsprungadressen
+Einsprüche
+Einsprüchen
+Einspänner
+Einsteiger
+Einsteigern
+Einsteigers
+Einstein
+Einsteins
+Einstellung
+Einstellungen
+Einstellwert
+Einstellwerte
+Einstellwerten
+Einstellwertes
+Einstellwerts
+Einstieg
+Einstimmigkeit
+Einstreuung
+Einstreuungen
+Einstufung
+Einstufungen
+Einsturz
+Einsturzes
+Einsätze
+Einsätzen
+Einteilung
+Einteilungen
+Eintopf
+Eintracht
+Eintrag
+Eintrags
+Eintragung
+Eintragungen
+Eintreibung
+Eintritt
+Eintritte
+Eintritten
+Eintritts
+Einträge
+Einträgen
+Einträglichkeit
+Eintönigkeit
+Einverleibung
+Einvernehmen
+Einvernehmens
+Einverständnis
+Einverständnisse
+Einverständnissen
+Einverständnisses
+Einwahl
+Einwand
+Einwanderer
+Einwanderern
+Einwanderers
+Einwanderung
+Einwanderungen
+Einwandes
+Einweihung
+Einweisung
+Einweisungen
+Einwendung
+Einwendungen
+Einwickelpapier
+Einwickelpapiers
+Einwilligung
+Einwilligungen
+Einwirkung
+Einwirkungen
+Einwohner
+Einwohnerin
+Einwohnerinnen
+Einwohnern
+Einwohners
+Einwohnerschaft
+Einwohnerzahl
+Einwurf
+Einwurfes
+Einwurfs
+Einwände
+Einwänden
+Einwürfe
+Einwürfen
+Einzahl
+Einzahlung
+Einzahlungen
+Einzahlungsschein
+Einzahlungsscheine
+Einzahlungsscheinen
+Einzahlungsscheins
+Einzeichnung
+Einzeichnungen
+Einzel
+Einzelabnehmer
+Einzelabsätze
+Einzelabsätzen
+Einzelaktion
+Einzelaktionen
+Einzelanfertigung
+Einzelanfertigungen
+Einzelanschluss
+Einzelanschlusses
+Einzelansteuerung
+Einzelansteuerungen
+Einzelauftrag
+Einzelauftrages
+Einzelauftrags
+Einzelaufträge
+Einzelaufträgen
+Einzelbetätigung
+Einzelbewerber
+Einzelbit
+Einzelbits
+Einzelbitsteuerung
+Einzelbitsteuerungen
+Einzelblattzufuhr
+Einzelblattzuführung
+Einzelblätter
+Einzelbuchstabe
+Einzelbuchstaben
+Einzeldaten
+Einzeldefekt
+Einzeldrucke
+Einzeldrucken
+Einzeldurchgang
+Einzelelement
+Einzelelemente
+Einzelelementen
+Einzelelementes
+Einzelelements
+Einzelentscheidung
+Einzelentscheidungen
+Einzelerscheinung
+Einzelerscheinungen
+Einzelersuchen
+Einzelersuchens
+Einzelexemplar
+Einzelexemplare
+Einzelexemplaren
+Einzelexemplars
+Einzelfall
+Einzelfalles
+Einzelfalls
+Einzelfehler
+Einzelfrage
+Einzelfragen
+Einzelfähigkeit
+Einzelfähigkeiten
+Einzelfälle
+Einzelfällen
+Einzelgespräch
+Einzelgespräche
+Einzelgesprächen
+Einzelgesprächs
+Einzelgänger
+Einzelgängern
+Einzelgängers
+Einzelheit
+Einzelheiten
+Einzelinteresse
+Einzelinteressen
+Einzelkämpfer
+Einzelkämpfern
+Einzelkämpfers
+Einzelleistung
+Einzelleistungen
+Einzeller
+Einzellizenz
+Einzelperson
+Einzelpersonen
+Einzelposition
+Einzelpositionen
+Einzelposten
+Einzelpostens
+Einzelpreis
+Einzelpreise
+Einzelpreisen
+Einzelpreises
+Einzelschicksal
+Einzelschritt
+Einzelschritte
+Einzelschritten
+Einzelschrittes
+Einzelschritts
+Einzelstück
+Einzelstücke
+Einzelstücken
+Einzelstücks
+Einzelteil
+Einzelteile
+Einzelteilen
+Einzelteils
+Einzelwiderstand
+Einzelwiderstands
+Einzelwiderstände
+Einzelwiderständen
+Einzelzeichen
+Einzelzeichens
+Einzelzimmer
+Einzelzimmern
+Einzelzimmerzuschlag
+Einzelzimmerzuschlages
+Einzelzimmerzuschlags
+Einzelzimmerzuschläge
+Einzelzimmerzuschlägen
+Einzigartigkeit
+Einzug
+Einzuges
+Einzugs
+Einzüge
+Einzügen
+Einöde
+Einöden
+Eis
+Eisen
+Eisens
+Eises
+Eitelkeit
+Eitelkeiten
+Eiter
+Eiweiß
+Eiweiße
+Eiweißen
+Eiweißes
+Eizelle
+Eizellen
+Ekel
+Ekels
+Eklat
+Eklipse
+Eklipsen
+Ekstase
+Ekstasen
+Ekzem
+Ekzeme
+Ekzemen
+Ekzems
+Elaborat
+Elaborate
+Elaboraten
+Elaborates
+Elaborats
+Elan
+Elans
+Elastizität
+Elba
+Elbe
+Elbmündung
+Elbtunnel
+Elch
+Elche
+Elchen
+Elches
+Elchs
+Elefant
+Elefanten
+Elegie
+Elegien
+Elektrifizierung
+Elektrik
+Elektriker
+Elektrikern
+Elektrikers
+Elektrizität
+Elektrode
+Elektroden
+Elektrodynamik
+Elektrogerät
+Elektrogeräte
+Elektrogeräten
+Elektrogerätes
+Elektrolyse
+Elektrolyt
+Elektromagnet
+Elektromagneten
+Elektromagnetismus
+Elektromotor
+Elektromotoren
+Elektromotors
+Elektron
+Elektronen
+Elektronenbahn
+Elektronenbahnen
+Elektronenladung
+Elektronenladungen
+Elektronenmasse
+Elektronenmassen
+Elektronenstrahl
+Elektronenstrahlen
+Elektronenstrahls
+Elektronenvolt
+Elektronik
+Elektronikanordnung
+Elektronikbauteil
+Elektronikeingang
+Elektroniken
+Elektroniker
+Elektronikern
+Elektronikfertigung
+Elektronikfirma
+Elektronikgehäuse
+Elektronikherstellern
+Elektronikingenieur
+Elektronikkarten
+Elektronikmaße
+Elektronikplatine
+Elektronikplatinen
+Elektronikseite
+Elektrons
+Elektrotechnik
+Elektrotechniker
+Elektrotechnikern
+Element
+Elementarladung
+Elementarladungen
+Elementarteilchen
+Elementarteilchens
+Elemente
+Elementen
+Elementes
+Elements
+Elend
+Elends
+Elendsviertel
+Elendsvierteln
+Elendsviertels
+Eleonore
+Eleonores
+Elfe
+Elfen
+Elfenbein
+Elfenbeinküste
+Elfenbeins
+Elfenbeinturm
+Elftklässler
+Elftklässlerin
+Elftklässlerinnen
+Elftklässlern
+Elftklässlers
+Eli
+Elias
+Elimination
+Eliminierung
+Elis
+Elisabeth
+Elite
+Eliten
+Elixier
+Elixiere
+Elixieren
+Elixiers
+Eliza
+Elizas
+Elko
+Ellbogen
+Ellbogenfreiheit
+Ellbogenfreiheiten
+Ellbogens
+Ellenbogen
+Ellenbogens
+Ellipse
+Ellipsen
+Elsass
+Elsasses
+Elsässer
+Elsässerin
+Elsässerinnen
+Elsässern
+Elsässers
+Eltern
+Elternpaar
+Elternsprechtag
+Elternsprechtage
+Elternsprechtagen
+Elternteil
+Elternteile
+Elternteilen
+Elternteils
+Emanuel
+Emanuela
+Emanuelas
+Emanuels
+Emanzipation
+Emanzipierung
+Embargo
+Embargos
+Emblem
+Embolie
+Embolien
+Embryo
+Embryonen
+Embryos
+Emeritus
+Emigrant
+Emilia
+Emilias
+Eminenz
+Eminenzen
+Emirat
+Emirate
+Emiraten
+Emirats
+Emission
+Emissionen
+Emissionswert
+Emissionswerte
+Emissionswerten
+Emissionswertes
+Emissionswerts
+Emmentaler
+Emoticon
+Emoticons
+Emotion
+Emotionalität
+Emotionen
+Empfang
+Empfanges
+Empfangs
+Empfangsbereich
+Empfangsbereiche
+Empfangsbereichen
+Empfangsbereichs
+Empfangsbereitschaft
+Empfangsbestätigung
+Empfangsbestätigungen
+Empfangschef
+Empfangsdame
+Empfangsdamen
+Empfangskomitee
+Empfangskomitees
+Empfangspegel
+Empfehlung
+Empfehlungen
+Empfehlungsbrief
+Empfehlungsschreiben
+Empfehlungsschreibens
+Empfindens
+Empfindlichkeit
+Empfindlichkeiten
+Empfindung
+Empfindungen
+Empfindungslosigkeit
+Empfindungsvermögen
+Empfindungsvermögens
+Empfänge
+Empfängen
+Empfänger
+Empfängern
+Empfängers
+Empfänglichkeit
+Empfängnis
+Empfängnisse
+Empfängnissen
+Empfängnisverhütung
+Emphysem
+Emphyseme
+Emphysemen
+Emphysems
+Empirie
+Empore
+Emporen
+Emporkömmling
+Emporkömmlinge
+Emporkömmlingen
+Emporkömmlings
+Empörung
+Empörungen
+Emsigkeit
+Emsigkeiten
+Emulation
+Emulationen
+Emulsion
+Emulsionen
+Endabnehmer
+Endabrechnung
+Endabrechnungen
+Endabschaltung
+Endanwender
+Endarbeit
+Endarbeiten
+Endausbau
+Endausbaustufe
+Endausbaustufen
+Endbenutzer
+Endbereich
+Enddaten
+Enddruck
+Enddrucks
+Ende
+Endeffekt
+Enden
+Enderfolg
+Endergebnis
+Endergebnisse
+Endergebnissen
+Endergebnisses
+Endes
+Endgehalt
+Endgerät
+Endkontrolle
+Endkontrollen
+Endkunde
+Endkunden
+Endlage
+Endlagen
+Endlauf
+Endlaufs
+Endlichkeit
+Endlosschleife
+Endlosschleifen
+Endläufe
+Endläufen
+Endlösung
+Endmontage
+Endmontagen
+Endogamie
+Endphase
+Endphasen
+Endprodukt
+Endprodukte
+Endprodukten
+Endproduktes
+Endpunkt
+Endpunkte
+Endpunkten
+Endpunktes
+Endpunkts
+Endrekursion
+Endrekursionen
+Endrekursionseliminierung
+Endresultat
+Endresultate
+Endresultaten
+Endresultates
+Endresultats
+Endrunde
+Endrunden
+Endschalter
+Endschaltern
+Endschalters
+Endsilbe
+Endsilben
+Endspiel
+Endspiele
+Endspielen
+Endspiels
+Endspurt
+Endspurte
+Endspurten
+Endspurtes
+Endspurts
+Endstadien
+Endstadium
+Endstand
+Endstufe
+Endstufen
+Endsumme
+Endsummen
+Endtest
+Endtests
+Endung
+Endungen
+Endverbraucher
+Endverbrauchern
+Endverbrauchers
+Endwert
+Endwerte
+Endwerten
+Endwerts
+Endzahl
+Endzahlen
+Endziel
+Endziele
+Endzielen
+Endziels
+Endzustand
+Endzustandes
+Endzustands
+Endzustände
+Endzuständen
+Energie
+Energieerhaltung
+Energien
+Energieniveau
+Energieniveaus
+Energiespektrum
+Energiespektrums
+Engagement
+Engagements
+Engel
+Engelchen
+Engelchens
+Engeln
+Engels
+Engelsgeduld
+Engerling
+Engerlinge
+Engerlingen
+Engerlings
+England
+Englands
+Engpass
+Engpasses
+Engpässe
+Engpässen
+Enkel
+Enkelin
+Enkelinnen
+Enkelkind
+Enkelkinder
+Enkelkindern
+Enkelkindes
+Enkelkinds
+Enkeln
+Enkels
+Enklave
+Enklaven
+Ensemble
+Ensembles
+Entartung
+Entbehrlichkeit
+Entbehrung
+Entbehrungen
+Entbindung
+Entbindungen
+Entblößung
+Entblößungen
+Entdecker
+Entdeckerin
+Entdeckerinnen
+Entdeckern
+Entdeckers
+Entdeckung
+Entdeckungen
+Ente
+Entebbe
+Enteignung
+Enten
+Entente
+Enterich
+Enterichs
+Entertaste
+Entfaltung
+Entfaltungsmöglichkeit
+Entfaltungsmöglichkeiten
+Entfernung
+Entfernungen
+Entfremdung
+Entführer
+Entführerin
+Entführerinnen
+Entführern
+Entführers
+Entführung
+Entführungen
+Entgegennahme
+Entgegnung
+Entgelt
+Entgelte
+Entgelten
+Entgeltes
+Entgleisung
+Enthaltsamkeit
+Enthaltung
+Enthaltungen
+Enthusiasmus
+Enthüller
+Enthüllung
+Enthüllungen
+Entkoppelung
+Entkräftung
+Entladebetrieb
+Entladestrom
+Entladeströme
+Entladeströmen
+Entladezeit
+Entladezeiten
+Entladung
+Entladungen
+Entlassung
+Entlassungen
+Entlastung
+Entlastungen
+Entleerens
+Entleerung
+Entlohnung
+Entlüftung
+Entmachtung
+Entmachtungen
+Entmutigung
+Entmutigungen
+Entmündigung
+Entmündigungen
+Entnahme
+Entnahmestelle
+Entnahmestellen
+Entnervung
+Entprellung
+Entprellzeit
+Entrepreneur
+Entrepreneurs
+Entrichtung
+Entrichtungen
+Entropie
+Entrüstung
+Entscheid
+Entscheidbarkeit
+Entscheide
+Entscheiden
+Entscheider
+Entscheidern
+Entscheides
+Entscheids
+Entscheidung
+Entscheidungen
+Entscheidungsbaum
+Entscheidungsbaumes
+Entscheidungsbaums
+Entscheidungsbefugnis
+Entscheidungsbefugnisse
+Entscheidungsbefugnissen
+Entscheidungsbäume
+Entscheidungsbäumen
+Entscheidungsfindung
+Entscheidungsgrundlage
+Entscheidungsgrundlagen
+Entscheidungshilfe
+Entscheidungshilfen
+Entscheidungskriterien
+Entscheidungskriterium
+Entscheidungsprozess
+Entscheidungsprozesse
+Entscheidungsprozessen
+Entscheidungsprozesses
+Entscheidungsspielraum
+Entscheidungsspielraumes
+Entscheidungsspielraums
+Entscheidungsspielräume
+Entscheidungsspielräumen
+Entscheidungsstruktur
+Entscheidungsträger
+Entscheidungsträgern
+Entscheidungsverhalten
+Entscheidungsverhaltens
+Entscheidungswege
+Entscheidungswegen
+Entschiedenheit
+Entschlackung
+Entschließung
+Entschließungen
+Entschlossenheit
+Entschluss
+Entschlusses
+Entschlussfassung
+Entschlussfassungen
+Entschlusskraft
+Entschlüsse
+Entschlüssen
+Entschuldigung
+Entschuldigungen
+Entschädigung
+Entschädigungen
+Entschärfung
+Entsendung
+Entsetzens
+Entsorgung
+Entspannung
+Entspannungen
+Entsprechung
+Entsprechungen
+Entstehens
+Entstehung
+Entstehungen
+Entstehungsgeschichte
+Entstehungsgeschichten
+Entstehungsursache
+Entstehungsursachen
+Entstellung
+Entstellungen
+Entstörung
+Enttarnung
+Enttäuschung
+Enttäuschungen
+Entwaffnung
+Entwaffnungen
+Entwarnung
+Entweihung
+Entweihungen
+Entwendung
+Entwerfens
+Entwertung
+Entwertungen
+Entwickler
+Entwicklerlizenz
+Entwicklern
+Entwicklers
+Entwicklung
+Entwicklungen
+Entwicklungsabteilung
+Entwicklungsabteilungen
+Entwicklungsarbeit
+Entwicklungsauftrag
+Entwicklungsauftrages
+Entwicklungsauftrags
+Entwicklungsaufträge
+Entwicklungsaufträgen
+Entwicklungsaufwand
+Entwicklungsbemühung
+Entwicklungsbemühungen
+Entwicklungsgeschichte
+Entwicklungsgeschichten
+Entwicklungsgeschwindigkeit
+Entwicklungshardware
+Entwicklungshelfer
+Entwicklungshelfern
+Entwicklungshilfe
+Entwicklungshilfen
+Entwicklungskosten
+Entwicklungsland
+Entwicklungslandes
+Entwicklungslands
+Entwicklungslinie
+Entwicklungslinien
+Entwicklungsländer
+Entwicklungsländern
+Entwicklungsmethode
+Entwicklungsmethoden
+Entwicklungsmöglichkeit
+Entwicklungsmöglichkeiten
+Entwicklungsphase
+Entwicklungsphasen
+Entwicklungsprozess
+Entwicklungsprozesse
+Entwicklungsprozessen
+Entwicklungsprozesses
+Entwicklungsschritt
+Entwicklungsschritte
+Entwicklungsschritten
+Entwicklungsschrittes
+Entwicklungsschritts
+Entwicklungsstand
+Entwicklungsstandes
+Entwicklungsstands
+Entwicklungsstrategie
+Entwicklungsstrategien
+Entwicklungsstufe
+Entwicklungsstufen
+Entwicklungssystem
+Entwicklungssysteme
+Entwicklungssystemen
+Entwicklungssystems
+Entwicklungstechnik
+Entwicklungstechniken
+Entwicklungstätigkeit
+Entwicklungsumgebung
+Entwicklungsumgebungen
+Entwicklungsvorhaben
+Entwicklungsvorhabens
+Entwicklungswerkzeug
+Entwicklungswerkzeuge
+Entwicklungswerkzeugen
+Entwicklungswerkzeugs
+Entwicklungswünsche
+Entwicklungswünschen
+Entwicklungszeit
+Entwicklungszeiten
+Entwicklungsziel
+Entwicklungsziele
+Entwicklungszielen
+Entwicklungszieles
+Entwicklungsziels
+Entwurf
+Entwurfes
+Entwurfs
+Entwurfsentscheidung
+Entwurfsentscheidungen
+Entwurfsfassung
+Entwurfsfassungen
+Entwurfsmethode
+Entwurfsmethoden
+Entwurfsprinzipien
+Entwurfsprozess
+Entwurfsprozesse
+Entwurfsprozessen
+Entwurfsprozesses
+Entwässerung
+Entwöhnung
+Entwöhnungskur
+Entwürfe
+Entwürfen
+Entzerrung
+Entzerrungen
+Entziehung
+Entziehungen
+Entziehungskur
+Entziehungskuren
+Entzifferung
+Entzifferungen
+Entzifferungsarbeit
+Entzug
+Entzuges
+Entzugs
+Entzweiung
+Entzücken
+Entzückens
+Entzückung
+Entzückungen
+Entzüge
+Entzügen
+Entzündbarkeit
+Entzündung
+Entzündungen
+Entäußerung
+Enzian
+Enzians
+Enzmann
+Enzmanns
+Enzyklopädie
+Enzyklopädien
+Enzym
+Enzyme
+Enzymen
+Enzyms
+Epen
+Epidemie
+Epidemien
+Epigramm
+Epikur
+Epikurs
+Epilepsie
+Epileptiker
+Epileptikerin
+Epileptikerinnen
+Epileptikern
+Epileptikers
+Epilog
+Epiloge
+Epilogen
+Epilogs
+Episode
+Episoden
+Epizentrum
+Epoche
+Epochen
+Epos
+Epoxiplättchen
+Epoxischeibe
+Epoxyd
+Epromnummer
+Epromversion
+Epromversionen
+Epson
+Equipe
+Erachtens
+Erarbeitung
+Erasmus
+Eratosthenes
+Erbanlage
+Erbanlagen
+Erbauer
+Erbauern
+Erbauers
+Erbauung
+Erbauungen
+Erbens
+Erbfaktor
+Erbfaktoren
+Erbfaktors
+Erbfehler
+Erbfehlern
+Erbfehlers
+Erbfeind
+Erbfeinde
+Erbfeinden
+Erbfeindes
+Erbfeindschaft
+Erbgut
+Erbguts
+Erbin
+Erbitterung
+Erblindung
+Erblindungen
+Erbse
+Erbsen
+Erbärmlichkeit
+Erdapfel
+Erdapfels
+Erdenken
+Erdgas
+Erdgases
+Erdgeschoss
+Erdgeschosse
+Erdgeschossen
+Erdgeschosses
+Erdgeschoß
+Erdgeschoße
+Erdgeschoßen
+Erdgeschoßes
+Erdkunde
+Erdnuss
+Erdnüsschen
+Erdnüsschens
+Erdnüsse
+Erdnüssen
+Erdteil
+Erdteile
+Erdteilen
+Erdteils
+Erdung
+Erdungskabel
+Erdungsleitung
+Erdungsleitungen
+Erdäpfel
+Erdäpfeln
+Erdöl
+Ereignis
+Ereignislosigkeit
+Ereignisschleife
+Ereignisschleifen
+Ereignisse
+Ereignissen
+Ereignisses
+Erektion
+Erektionen
+Eremit
+Eremitage
+Eremitagen
+Eremiten
+Erfahrenheit
+Erfahrung
+Erfahrungen
+Erfahrungsaustausch
+Erfahrungsaustausches
+Erfahrungsbericht
+Erfahrungsberichte
+Erfahrungsberichten
+Erfahrungsberichts
+Erfahrungssache
+Erfahrungssachen
+Erfahrungstatsache
+Erfahrungstatsachen
+Erfahrungstausch
+Erfahrungswert
+Erfahrungswerte
+Erfahrungswerten
+Erfahrungswertes
+Erfahrungswerts
+Erfassung
+Erfassungen
+Erfinder
+Erfindergeist
+Erfindergeistes
+Erfinderin
+Erfinderinnen
+Erfindern
+Erfinders
+Erfindung
+Erfindungen
+Erfindungsgabe
+Erfindungsgaben
+Erfindungsreichtum
+Erfolg
+Erfolge
+Erfolgen
+Erfolges
+Erfolglosigkeit
+Erfolgs
+Erfolgsanteil
+Erfolgsanteile
+Erfolgsanteilen
+Erfolgsanteils
+Erfolgsaussicht
+Erfolgsaussichten
+Erfolgsbeteiligung
+Erfolgsbeteiligungen
+Erfolgsbilanz
+Erfolgsbilanzen
+Erfolgschance
+Erfolgschancen
+Erfolgseuphorie
+Erfolgsformel
+Erfolgsgeheimnis
+Erfolgsgeheimnisse
+Erfolgsgeheimnissen
+Erfolgsgeheimnisses
+Erfolgshonorar
+Erfolgsmeldung
+Erfolgsmeldungen
+Erfolgsmöglichkeit
+Erfolgsmöglichkeiten
+Erfolgsquote
+Erfolgsquoten
+Erfolgsrechnung
+Erfolgsrechnungen
+Erfolgsserie
+Erfolgsserien
+Erfolgsvoraussetzung
+Erfolgsvoraussetzungen
+Erforderlichkeit
+Erfordernis
+Erfordernisse
+Erfordernissen
+Erfordernisses
+Erforscher
+Erforscherin
+Erforscherinnen
+Erforschern
+Erforschers
+Erforschung
+Erfrierung
+Erfrierungen
+Erfrischung
+Erfurt
+Erfüllung
+Ergebenheit
+Ergebnis
+Ergebnisbericht
+Ergebnisberichte
+Ergebnisberichten
+Ergebnisberichtes
+Ergebnisberichts
+Ergebnisprotokoll
+Ergebnisprotokolle
+Ergebnisprotokollen
+Ergebnisprotokolls
+Ergebnisse
+Ergebnissen
+Ergebnisses
+Ergebnisverbesserung
+Ergebung
+Ergebungen
+Ergiebigkeit
+Ergonomie
+Ergreifung
+Ergreifungen
+Ergriffenheit
+Erguss
+Ergusses
+Ergänzung
+Ergänzungen
+Ergänzungsvorschlag
+Ergänzungsvorschlages
+Ergänzungsvorschlags
+Ergänzungsvorschläge
+Ergänzungsvorschlägen
+Ergüsse
+Ergüssen
+Erhalt
+Erhaltes
+Erhalts
+Erhaltung
+Erhaltungsmaßnahme
+Erhaltungsmaßnahmen
+Erhardt
+Erhardts
+Erheblichkeit
+Erhebung
+Erhebungen
+Erhebungszeitraum
+Erhebungszeitraumes
+Erhebungszeitraums
+Erhebungszeiträume
+Erhebungszeiträumen
+Erheiterung
+Erheiterungen
+Erhellung
+Erhellungen
+Erholung
+Erholungen
+Erholzeit
+Erholzeiten
+Erhöhung
+Erhöhungen
+Erich
+Erichs
+Erika
+Erikas
+Erinnerung
+Erinnerungen
+Erinnerungsstück
+Erinnerungsstücke
+Erinnerungsstücken
+Erinnerungsstücks
+Erinnerungsvermögen
+Erinnerungsvermögens
+Erinnerungswert
+Erinnerungswerte
+Erinnerungswerten
+Erinnerungswertes
+Erinnerungswerts
+Eritrea
+Erkennbarkeit
+Erkennens
+Erkenntlichkeit
+Erkenntnis
+Erkenntnisgrundlage
+Erkenntnisgrundlagen
+Erkenntnisquelle
+Erkenntnisquellen
+Erkenntnisse
+Erkenntnissen
+Erkenntnistheorie
+Erkenntnistheorien
+Erkenntnisvermögen
+Erkenntnisvermögens
+Erkennung
+Erkennungen
+Erkennungsmarke
+Erkennungsmarken
+Erkennungswort
+Erkennungsworte
+Erkennungsworten
+Erkennungswortes
+Erkennungsworts
+Erkennungszeichen
+Erkennungszeichens
+Erker
+Erkerfenster
+Erkerfenstern
+Erkerfensters
+Erkern
+Erkers
+Erklärung
+Erklärungen
+Erklärungsansatz
+Erklärungsansatzes
+Erklärungsansätze
+Erklärungsmuster
+Erklärungsmustern
+Erklärungsmusters
+Erklärungsmöglichkeit
+Erklärungsmöglichkeiten
+Erkrankung
+Erkrankungsgefahr
+Erkundigung
+Erkundigungen
+Erkundungsreise
+Erkundungsreisen
+Erkältung
+Erlahmung
+Erlangung
+Erlass
+Erlasse
+Erlasses
+Erlaubnis
+Erlaubnisse
+Erlaubnissen
+Erle
+Erlebnis
+Erlebnisse
+Erlebnissen
+Erlebnisses
+Erledigung
+Erleichterung
+Erleichterungen
+Erlen
+Erlernbarkeit
+Erlkönig
+Erlkönige
+Erlkönigen
+Erlkönigs
+Erläuterung
+Erläuterungen
+Erlös
+Erlöse
+Erlösen
+Erlöser
+Erlösern
+Erlösers
+Erlöses
+Erlösung
+Erlösungen
+Ermahnung
+Ermahnungen
+Ermangelung
+Ermattung
+Ermattungen
+Ermessensentscheidung
+Ermessensentscheidungen
+Ermessensfrage
+Ermessensfragen
+Ermittelung
+Ermittelungen
+Ermittlung
+Ermittlungen
+Ermittlungsbefugnis
+Ermittlungsbefugnisse
+Ermittlungsbefugnissen
+Ermittlungsbehörde
+Ermittlungsbehörden
+Ermittlungsergebnis
+Ermittlungsergebnisse
+Ermittlungsergebnissen
+Ermittlungsergebnisses
+Ermittlungshandlung
+Ermittlungshandlungen
+Ermittlungsmaßnahme
+Ermittlungsmaßnahmen
+Ermittlungsverfahren
+Ermittlungsverfahrens
+Ermordung
+Ermunterung
+Ermunterungen
+Ermutigung
+Ermächtigung
+Ermächtigungen
+Ermäßigung
+Ermäßigungen
+Ermöglichung
+Ermüdung
+Ermüdungen
+Ermüdungserscheinung
+Ermüdungserscheinungen
+Ernennung
+Ernennungen
+Ernennungsurkunde
+Ernennungsurkunden
+Erneuerung
+Erneuerungen
+Erniedrigung
+Ernstfall
+Ernstfalles
+Ernstfalls
+Ernstfälle
+Ernstfällen
+Ernte
+Ernten
+Ernährer
+Ernährern
+Ernährers
+Ernährung
+Ernährungen
+Ernüchterung
+Ernüchterungen
+Eroberer
+Eroberern
+Eroberers
+Eroberung
+Eroberungen
+Eros
+Erosion
+Erosionen
+Erotik
+Erpressbarkeit
+Erpresser
+Erpresserin
+Erpresserinnen
+Erpressern
+Erpressers
+Erpressung
+Erpressungen
+Erprobung
+Erprobungen
+Erquickung
+Erquickungen
+Erregbarkeit
+Erreger
+Erregern
+Erregers
+Erregung
+Erregungen
+Erregungsspannung
+Erregungsspannungen
+Erregungswert
+Erreichung
+Erreichungen
+Erretter
+Erretterin
+Erretterinnen
+Errettern
+Erretters
+Errettung
+Errichtung
+Errichtungen
+Errorroutine
+Errorroutinen
+Errungenschaft
+Errungenschaften
+Ersatz
+Ersatzanspruch
+Ersatzanspruches
+Ersatzanspruchs
+Ersatzansprüche
+Ersatzansprüchen
+Ersatzbedarf
+Ersatzbedarfs
+Ersatzbeschaffung
+Ersatzes
+Ersatzspeicherkarte
+Ersatzspeicherkarten
+Ersatzteil
+Ersatzteile
+Ersatzteilen
+Ersatzteils
+Ersatztermin
+Erschaffer
+Erschafferin
+Erschafferinnen
+Erschaffern
+Erschaffers
+Erschaffung
+Erschaffungen
+Erscheinung
+Erscheinungen
+Erscheinungsform
+Erscheinungsformen
+Erscheinungstag
+Erscheinungstage
+Erscheinungstagen
+Erscheinungstags
+Erschießung
+Erschlaffung
+Erschließung
+Erschrockenheit
+Erschwernis
+Erschwernisse
+Erschwernissen
+Erschwerung
+Erschöpfung
+Erschöpfungen
+Erschöpfungszustand
+Erschütterung
+Erschütterungen
+Ersetzbarkeit
+Ersetzung
+Ersetzungen
+Ersetzungsregel
+Ersetzungsregeln
+Ersetzungssystem
+Ersetzungssysteme
+Ersetzungssystemen
+Ersetzungssystems
+Ersparnis
+Ersparnisgründe
+Ersparnisgründen
+Ersparnisse
+Ersparnissen
+Erstanwendung
+Erstarrung
+Erstattung
+Erstattungen
+Erstaufqqführung
+Erstaufqqlage
+Erstaufqqlagen
+Erstauftrag
+Erstauftrages
+Erstauftrags
+Erstaufträge
+Erstaufträgen
+Erstaunens
+Erstehungskosten
+Ersteigerung
+Ersteigerungen
+Ersteingabe
+Ersteingaben
+Erstellung
+Erstellungsaufwand
+Erstellungsdatum
+Erstellungskosten
+Erstickung
+Erstickungen
+Erstinbetriebnahme
+Erstinbetriebnahmen
+Erstinformation
+Erstinformationen
+Erstklässler
+Erstklässlerin
+Erstklässlerinnen
+Erstklässlern
+Erstklässlers
+Erstling
+Erstlinge
+Erstlingen
+Erstlings
+Erteilung
+Ertrag
+Ertrages
+Ertrags
+Erträge
+Erträgen
+Ertüchtigung
+Eruption
+Eruptionen
+Erwachsenenbildung
+Erwartung
+Erwartungen
+Erwartungsbereich
+Erwartungsbereiche
+Erwartungsbereichen
+Erwartungsbereiches
+Erwartungsbereichs
+Erwartungswert
+Erweckung
+Erweckungen
+Erweiterbarkeit
+Erweiterung
+Erweiterungen
+Erweiterungsbau
+Erweiterungsbaus
+Erweiterungseinheit
+Erweiterungseinheiten
+Erweiterungskarte
+Erweiterungsmodul
+Erweiterungsmöglichkeit
+Erweiterungsmöglichkeiten
+Erweiterungspaket
+Erweiterungspläne
+Erweiterungsplänen
+Erweiterungsprojekt
+Erweiterungssoftware
+Erweiterungsverfahren
+Erweiterungsverfahrens
+Erweiterungszone
+Erweiterungszonen
+Erwerb
+Erwerber
+Erwerbern
+Erwerbs
+Erwerbsfähigkeit
+Erwerbsleben
+Erwerbslebens
+Erwerbsminderung
+Erwerbsquelle
+Erwerbsquellen
+Erwerbstätigkeit
+Erwerbstätigkeiten
+Erwerbung
+Erwerbungen
+Erwiderung
+Erwägung
+Erwägungen
+Erwähnung
+Erwähnungen
+Erwärmung
+Erz
+Erze
+Erzen
+Erzes
+Erzeugnis
+Erzeugnisse
+Erzeugnissen
+Erzeugnisses
+Erzeugung
+Erzeugungen
+Erzfeind
+Erzfeinde
+Erzfeinden
+Erzfeindes
+Erzfeinds
+Erzgebirge
+Erzieher
+Erzieherin
+Erzieherinnen
+Erziehern
+Erziehers
+Erziehung
+Erziehungen
+Erzielung
+Erzwingung
+Erzähler
+Erzählerin
+Erzählerinnen
+Erzählern
+Erzählers
+Erzählung
+Erzählungen
+Eröffnung
+Erörterung
+Erörterungen
+Esc
+Escapesequenz
+Escapesequenzen
+Esche
+Eschen
+Escher
+Eschers
+Escudo
+Escudos
+Esel
+Eselchen
+Eselchens
+Eselei
+Eseln
+Esels
+Eselsbrücke
+Eselsbrücken
+Eselsohr
+Eskalation
+Eskalationen
+Eskapade
+Eskapaden
+Eskorte
+Eskorten
+Eskudo
+Eskudos
+Esoteriker
+Esoterikern
+Esoterikers
+Espenlaub
+Espresso
+Essay
+Essays
+Essenz
+Essenzen
+Essig
+Essigs
+Essigwurst
+Esso
+Estland
+Estrade
+Estraden
+Etablierung
+Etablissement
+Etablissements
+Etage
+Etagen
+Etappe
+Etappen
+Etappensieg
+Etappensiege
+Etappensiegen
+Etappensiegs
+Etappenziel
+Etat
+Etaterhöhung
+Etaterhöhungen
+Etats
+Etatsumme
+Etatvoranschlag
+Etatvoranschlages
+Etatvoranschlags
+Etatvoranschläge
+Etatvoranschlägen
+Ethernet
+Ethernetadapter
+Ethik
+Ethiken
+Ethiker
+Ethikern
+Ethnografie
+Ethnograph
+Ethnographen
+Ethnographie
+Ethnologe
+Ethnologen
+Ethologe
+Ethologen
+Ethologie
+Ethos
+Etikett
+Etikette
+Etiketten
+Etikettendrucker
+Etikettenschwindel
+Etikettierung
+Etiketts
+Eton
+Etons
+Etui
+Etüde
+Etüden
+Eudämonie
+Euklid
+Euklids
+Eule
+Eulen
+Eulenspiegel
+Eulenspiegelei
+Eulenspiegeleien
+Eulenspiegeln
+Euler
+Eulers
+Eunuch
+Eunuchen
+Eupen
+Euphemismen
+Euphemismus
+Euphorie
+Euphrat
+Euratom
+Euro
+Eurocard
+Europa
+Europaformat
+Europaparlament
+Europaparlamentes
+Europarat
+Europas
+Europäer
+Europäerin
+Europäerinnen
+Europäern
+Europäers
+Euros
+Euroscheck
+Euroschecks
+Eurovision
+Eurythmie
+Euter
+Eutern
+Euters
+Euthanasie
+Eva
+Evakuierung
+Evaluation
+Evaluationen
+Evangeliar
+Evangeliars
+Evangelien
+Evangelist
+Evangelisten
+Evangelium
+Evangeliums
+Evas
+Eventualfall
+Eventualfalls
+Eventualfälle
+Eventualfällen
+Eventualität
+Eventualitäten
+Everest
+Evergreens
+Evidenz
+Evolution
+Ewigkeit
+Ewigkeiten
+Exaktheit
+Examen
+Examens
+Examensfeier
+Examensfeiern
+Examina
+Exekution
+Exekutionen
+Exekutor
+Exekutoren
+Exempel
+Exemplar
+Exemplare
+Exemplaren
+Exemplars
+Exil
+Exile
+Exilen
+Exils
+Existentialismus
+Existenz
+Existenzangst
+Existenzberechtigung
+Existenzgefährdung
+Existenzgrundlage
+Existenzgrundlagen
+Existenzialismus
+Existenzquantifizierung
+Existenzquantifizierungen
+Existenzquantor
+Existenzquantoren
+Existenzquantors
+Exitcode
+Exitcodes
+Exklusivität
+Exkurs
+Exkurse
+Exkursen
+Exkurses
+Exkursion
+Exkursionen
+Exorzist
+Exorzisten
+Exot
+Exoten
+Expandierens
+Expansion
+Expansionen
+Expansionsphase
+Expansionsphasen
+Expansionsverfahren
+Expedition
+Expeditionen
+Experiment
+Experimente
+Experimenten
+Experimentes
+Experimentierfreudigkeit
+Experiments
+Experte
+Experten
+Expertenebene
+Expertenebenen
+Expertengespräch
+Expertengespräche
+Expertengesprächen
+Expertengesprächs
+Expertengruppe
+Expertengruppen
+Expertenkomitee
+Expertenkomitees
+Expertensystem
+Expertensysteme
+Expertensystemen
+Expertensystems
+Expertensystemtechnik
+Expertensystemtechniken
+Expertensystemwerkzeug
+Expertensystemwerkzeuge
+Expertensystemwerkzeugen
+Expertensystemwerkzeugs
+Expertenurteil
+Expertenurteile
+Expertenurteilen
+Expertenurteils
+Expertise
+Expertisen
+Exploration
+Explorationen
+Explosion
+Explosionen
+Exponent
+Exponenten
+Export
+Exporte
+Exporten
+Exports
+Exposee
+Exposees
+Exposition
+Expositionen
+Exposé
+Exposés
+Expressgut
+Expressionismus
+Expressionist
+Expressionisten
+Extension
+Extensionen
+Externat
+Externate
+Externaten
+Externates
+Externats
+Extrakt
+Extrakte
+Extrakten
+Extraktes
+Extrapolation
+Extrapolationen
+Extravaganz
+Extravaganzen
+Extrawürste
+Extrawürsten
+Extremfall
+Extremfalls
+Extremfälle
+Extremfällen
+Extremismus
+Extremität
+Extremitäten
+Extremvorstellung
+Extremvorstellungen
+Extremwert
+Exzellenz
+Exzellenzen
+Exzentrizität
+Exzess
+Exzesse
+Exzessen
+Exzesses
+FAQ
+FAZ
+FBI
+FDGB
+FDJ
+FDP
+FF
+FFr
+FG
+FLN
+Fa
+Fabel
+Fabeln
+Fabian
+Fabians
+Fabrik
+Fabrikant
+Fabrikanten
+Fabrikat
+Fabrikate
+Fabrikaten
+Fabrikation
+Fabrikationen
+Fabrikats
+Fabriken
+Facette
+Facetten
+Fach
+Fachabteilung
+Fachabteilungen
+Facharbeiter
+Facharbeiterin
+Facharbeiterinnen
+Facharbeitern
+Facharbeiters
+Fachausbildung
+Fachausbildungen
+Fachausdruck
+Fachausdrucks
+Fachausdrücke
+Fachausdrücken
+Fachausschuss
+Fachausschusses
+Fachausschüsse
+Fachausschüssen
+Fachbegriff
+Fachbegriffe
+Fachbegriffen
+Fachbegriffs
+Fachbereich
+Fachbericht
+Fachberichte
+Fachberichten
+Fachberichtes
+Fachberichts
+Fachbetrieb
+Fachbetriebe
+Fachbetrieben
+Fachbetriebes
+Fachbetriebs
+Fachblatt
+Fachblattes
+Fachbuch
+Fachbuchs
+Fachbücher
+Fachbüchern
+Fachgebiet
+Fachgebiete
+Fachgebieten
+Fachgebietes
+Fachgebiets
+Fachgespräch
+Fachgespräche
+Fachgesprächen
+Fachgesprächs
+Fachhandel
+Fachhochschule
+Fachhochschulen
+Fachidiot
+Fachkenntnis
+Fachkenntnisse
+Fachkenntnissen
+Fachkompetenz
+Fachkompetenzen
+Fachkraft
+Fachkräfte
+Fachkräften
+Fachleute
+Fachleuten
+Fachliteratur
+Fachmann
+Fachmanns
+Fachmänner
+Fachmännern
+Fachpersonal
+Fachpersonals
+Fachpresse
+Fachrichtung
+Fachrichtungen
+Fachs
+Fachschaft
+Fachschaften
+Fachsprache
+Fachsprachen
+Fachtagung
+Fachtagungen
+Fachverband
+Fachverbandes
+Fachverbände
+Fachverbänden
+Fachwelt
+Fachwelten
+Fachwerk
+Fachwerks
+Fachwissen
+Fachwissens
+Fachwort
+Fachworte
+Fachwortes
+Fachworts
+Fachwörter
+Fachwörtern
+Fachzeitschrift
+Fachzeitschriften
+Fachzeitung
+Fachzeitungen
+Fackel
+Fackeln
+Fadenscheinigkeit
+Fahnder
+Fahndern
+Fahnders
+Fahndung
+Fahne
+Fahnen
+Fahrenheit
+Fahrer
+Fahrerin
+Fahrerinnen
+Fahrern
+Fahrers
+Fahrrad
+Fahrrades
+Fahrräder
+Fahrrädern
+Fahrt
+Fahrten
+Fahrzeit
+Fahrzeiten
+Fahrzeug
+Fahrzeuge
+Fahrzeugen
+Fahrzeuges
+Fahrzeugs
+Faible
+Fairness
+Fakt
+Fakten
+Faktenanalyse
+Faktenanalysen
+Faktensammlung
+Faktensammlungen
+Faktes
+Faktor
+Faktoren
+Faktors
+Fakts
+Faktum
+Fakturierung
+Fakultät
+Fakultäten
+Fakultätsfunktion
+Falke
+Falken
+Falklandinsel
+Fall
+Fallbeil
+Fallbeispiel
+Fallbeispiele
+Fallbeispielen
+Fallbeispiels
+Falles
+Fallout
+Falls
+Fallschirm
+Fallschirme
+Fallschirmen
+Fallschirms
+Fallstrick
+Fallstricke
+Fallstricken
+Fallstrickes
+Fallstudie
+Fallstudien
+Falltür
+Falltüre
+Falltüren
+Fallunterscheidung
+Fallunterscheidungen
+Falschaussage
+Falschaussagen
+Falschheit
+Falschheiten
+Falschmeldung
+Falschmeldungen
+Falsifikation
+Falsifikationen
+Faltblatt
+Faltblätter
+Falter
+Faltern
+Faltung
+Faltungen
+Familie
+Familien
+Familienangehörige
+Familienangehörigen
+Familienangelegenheit
+Familienangelegenheiten
+Familienanschluss
+Familienanschlusses
+Familienanschlüsse
+Familienanschlüssen
+Familieneinkommen
+Familieneinkommens
+Familienermäßigung
+Familienkreis
+Familienkreise
+Familienkreisen
+Familienkreises
+Familienleben
+Familienlebens
+Familienmitglied
+Familienname
+Familiennamen
+Familiennamens
+Familienplanung
+Familienplanungen
+Familienpolitik
+Familienstand
+Familienstandes
+Familienstands
+Familienvater
+Familienvaters
+Familienväter
+Familienvätern
+Fan
+Fanatiker
+Fanatikern
+Fanatikers
+Fanatismus
+Fanfare
+Fanfaren
+Fang
+Fangarm
+Fangarme
+Fangarmen
+Fangarms
+Fango
+Fangs
+Fans
+Fantasie
+Fantasien
+Faraday
+Faradays
+Farbaufnahme
+Farbaufnahmen
+Farbband
+Farbbandes
+Farbbands
+Farbbildschirm
+Farbbildschirme
+Farbbildschirmen
+Farbbildschirms
+Farbblindheit
+Farbbänder
+Farbbändern
+Farbdia
+Farbdias
+Farbdrucker
+Farbdruckern
+Farbdruckers
+Farbe
+Farben
+Farbenfreudigkeit
+Farbenlehre
+Farbenlehren
+Farbenpracht
+Farbensinn
+Farbfleck
+Farbflecke
+Farbflecken
+Farbflecks
+Farbgebung
+Farbgefühl
+Farbigkeit
+Farbkopierer
+Farbmarkierung
+Farbmonitor
+Farbmonitore
+Farbmonitoren
+Farbmonitors
+Farbstift
+Farbstifte
+Farbstiften
+Farbstiftes
+Farbstoff
+Farbstoffe
+Farbstoffen
+Farbstoffes
+Farbtafel
+Farbtafeln
+Farbton
+Farbtons
+Farbtupfer
+Farbtupfern
+Farbtupfers
+Farbtöne
+Farbtönen
+Farbumkehr
+Farm
+Farmen
+Farmer
+Farmern
+Farmers
+Farn
+Farne
+Farnen
+Farnes
+Farns
+Fasan
+Fasane
+Fasanen
+Fasans
+Faschierte
+Faschierten
+Faschiertes
+Fasching
+Faschismus
+Faschist
+Faschisten
+Faschistin
+Faschistinnen
+Faselei
+Faseleien
+Faser
+Fasern
+Faserzeug
+Fass
+Fassade
+Fassaden
+Fasses
+Fassette
+Fassetten
+Fassung
+Fassungen
+Fassungsgabe
+Fassungsgaben
+Fassungskraft
+Fassungslosigkeit
+Fassungsvermögen
+Fassungsvermögens
+Fastnacht
+Faszination
+Faszinationen
+Fata
+Fatalismus
+Fatalität
+Fatima
+Fatimas
+Fatum
+Fatums
+Faulenzer
+Faulenzerei
+Faulenzereien
+Faulenzerin
+Faulenzerinnen
+Faulenzern
+Faulenzers
+Faulheit
+Faulpelz
+Faulpelze
+Faulpelzen
+Faulpelzes
+Faultier
+Faultiere
+Faultieren
+Faultiers
+Faun
+Fauna
+Faune
+Faunen
+Fauns
+Faust
+Faustpfand
+Faustpfandes
+Faustrecht
+Faustrechte
+Faustrechten
+Faustrechtes
+Faustrechts
+Faustregel
+Faustregeln
+Faustschlag
+Faustschlages
+Faustschlags
+Faustschläge
+Faustschlägen
+Fauteuil
+Fauteuils
+Favorit
+Favoriten
+Favoritin
+Favoritinnen
+Fax
+Faxanschluss
+Faxanschlusses
+Faxanschlüsse
+Faxanschlüssen
+Fazit
+Fazite
+Faziten
+Fazits
+Feature
+Features
+Feb
+Februar
+Februars
+Fechter
+Fechtern
+Fechters
+Feder
+Federführung
+Federhalter
+Federhaltern
+Federhalters
+Federkraft
+Federlesens
+Federstrich
+Federstriche
+Federstrichen
+Federstrichs
+Federung
+Federungen
+Fedora
+Fee
+Feedback
+Feen
+Fegefeuer
+Fehde
+Fehdehandschuh
+Fehdehandschuhe
+Fehdehandschuhen
+Fehdehandschuhes
+Fehden
+Fehl
+Fehlanpassung
+Fehlanzeige
+Fehlanzeigen
+Fehlbarkeit
+Fehlbedienung
+Fehlbehandlung
+Fehlbestand
+Fehlbestände
+Fehlbeständen
+Fehlbetrag
+Fehlbetrages
+Fehlbetrags
+Fehlbeträge
+Fehlbeträgen
+Fehlbeurteilung
+Fehlbeurteilungen
+Fehldiagnose
+Fehldiagnosen
+Fehleinschätzung
+Fehleinschätzungen
+Fehlens
+Fehlentscheid
+Fehlentscheidung
+Fehlentscheidungen
+Fehlentwicklung
+Fehlentwicklungen
+Fehler
+Fehlerbehandlung
+Fehlerbehandlungsroutine
+Fehlerbehandlungsroutinen
+Fehlerbehebung
+Fehlerbeschreibung
+Fehlerbeschreibungen
+Fehlerbeseitigung
+Fehlerbit
+Fehlerbits
+Fehlerdiagnose
+Fehlerdiagnosen
+Fehlerfall
+Fehlerfalls
+Fehlerfortpflanzung
+Fehlerkorrektur
+Fehlerkorrekturen
+Fehlermeldung
+Fehlermeldungen
+Fehlermodell
+Fehlermodelle
+Fehlermodellen
+Fehlermodells
+Fehlern
+Fehlernummer
+Fehlerquelle
+Fehlerquellen
+Fehlerquote
+Fehlerquoten
+Fehlerrate
+Fehlerraten
+Fehlerrisiken
+Fehlerrisiko
+Fehlerroutine
+Fehlers
+Fehlerstatus
+Fehlersuche
+Fehlersuchprogramm
+Fehlerursache
+Fehlerursachen
+Fehlervariable
+Fehlervariablen
+Fehlfunktion
+Fehlfunktionen
+Fehlgeburt
+Fehlgeburten
+Fehlgriff
+Fehlgriffe
+Fehlgriffen
+Fehlgriffs
+Fehlhandlung
+Fehlhandlungen
+Fehlinformation
+Fehlinformationen
+Fehlinterpretation
+Fehlinterpretationen
+Fehlkalkulation
+Fehlkalkulationen
+Fehlkonstruktion
+Fehlkonstruktionen
+Fehlmaß
+Fehlmaße
+Fehlmaßen
+Fehlmaßes
+Fehlmenge
+Fehlmengen
+Fehlmessung
+Fehlmessungen
+Fehlpass
+Fehlpasses
+Fehlplanung
+Fehlplanungen
+Fehlpässe
+Fehlpässen
+Fehlschlag
+Fehlschlages
+Fehlschlags
+Fehlschluss
+Fehlschlusses
+Fehlschläge
+Fehlschlägen
+Fehlschlüsse
+Fehlschlüssen
+Fehlschuss
+Fehlschusses
+Fehlschüsse
+Fehlschüssen
+Fehlspekulation
+Fehlspekulationen
+Fehlstart
+Fehlstarte
+Fehlstarten
+Fehlstartes
+Fehlstarts
+Fehltritt
+Fehltritts
+Fehlurteil
+Fehlurteile
+Fehlurteilen
+Fehlurteils
+Fehlverhalten
+Fehlverhaltens
+Fehlzündung
+Fehlzündungen
+Feier
+Feierabend
+Feierabende
+Feierabenden
+Feierabendverkehr
+Feierabendverkehrs
+Feiertag
+Feiertage
+Feiertagen
+Feiertags
+Feigenblatt
+Feigenblattes
+Feigenblätter
+Feigenblättern
+Feigheit
+Feigheiten
+Feigling
+Feiglinge
+Feiglingen
+Feiglings
+Feinanpassung
+Feind
+Feindbild
+Feindbilder
+Feindbildern
+Feindbildes
+Feindbilds
+Feinde
+Feinden
+Feindes
+Feindin
+Feindinnen
+Feindlichkeit
+Feindlichkeiten
+Feindschaft
+Feindschaften
+Feindseligkeit
+Feindseligkeiten
+Feinfühligkeit
+Feingefühl
+Feingefühle
+Feingefühlen
+Feingefühls
+Feingliedrigkeit
+Feinheit
+Feinheiten
+Feinstruktur
+Feinstrukturen
+Feld
+Felde
+Felder
+Feldern
+Feldes
+Felds
+Felge
+Felgen
+Felix
+Fell
+Felle
+Fellen
+Fells
+Fels
+Felsen
+Feministin
+Feministinnen
+Fenchel
+Fenster
+Fenstern
+Fensters
+Fenstersystem
+Fenstersysteme
+Fenstersystemen
+Fenstersystems
+Ferien
+Ferkel
+Ferkeln
+Ferkels
+Fernando
+Fernandos
+Fernbedienung
+Ferndiagnose
+Ferndiagnosen
+Fernerkennung
+Ferngespräch
+Ferngespräche
+Ferngesprächen
+Ferngesprächs
+Fernglas
+Fernglases
+Ferngläser
+Fernkurs
+Fernkurse
+Fernkursen
+Fernkurses
+Fernkursus
+Fernlehrgang
+Fernlenkung
+Fernmeldegesetz
+Fernmeldewesen
+Fernmeldewesens
+Fernost
+Fernrohr
+Fernrohre
+Fernrohren
+Fernrohrs
+Fernschreiben
+Fernschreibens
+Fernschreiber
+Fernschreibern
+Fernschreibers
+Fernsehens
+Fernseher
+Fernsehern
+Fernsehers
+Fernsehgerät
+Fernsehgeräte
+Fernsehgeräten
+Fernsehgerätes
+Fernsehgeräts
+Fernsehprogramm
+Fernsehprogramme
+Fernsehprogrammen
+Fernsehprogramms
+Fernsehrat
+Fernsehrats
+Fernsehserie
+Fernsehserien
+Fernsehzuschauer
+Fernsehzuschauern
+Fernsicht
+Fernsteuerung
+Fernsteuerungen
+Fernstudien
+Fernstudium
+Fernuniversität
+Fernuniversitäten
+Fernunterricht
+Fernunterrichts
+Fernverarbeitung
+Fernverkehr
+Fernverkehrs
+Fernwaffe
+Fernwaffen
+Fernwartung
+Fernweh
+Fernziel
+Fernzug
+Fernzuges
+Fernzugs
+Fernzüge
+Fernzügen
+Fernzündung
+Fernübertragung
+Ferrara
+Ferrari
+Ferraris
+Ferse
+Fersen
+Fersengeld
+Fersengelder
+Fersengeldern
+Fersengeldes
+Fersengelds
+Fertigkeit
+Fertigkeiten
+Fertigstellung
+Fertigstellungen
+Fertigung
+Fertigungen
+Fertigungstechnik
+Fertigungstechniken
+Fesselung
+Festakt
+Festakte
+Festakten
+Festaktes
+Festansprache
+Festansprachen
+Festartikel
+Festauftrag
+Festauftrages
+Festauftrags
+Festaufträge
+Festaufträgen
+Festausschuss
+Festausschusses
+Festausschüsse
+Festausschüssen
+Festbestellung
+Festbestellungen
+Festeinstellung
+Festempfang
+Festessen
+Festessens
+Festgelage
+Festgelagen
+Festhalle
+Festhallen
+Festigkeit
+Festigung
+Festival
+Festivals
+Festkörper
+Festkörpern
+Festkörperphysik
+Festkörperphysiker
+Festkörperphysikern
+Festkörpers
+Festland
+Festlegung
+Festlegungen
+Festlichkeit
+Festlichkeiten
+Festnahme
+Festnahmen
+Festplatte
+Festplatten
+Festplattenpartition
+Festplattenpartitionen
+Festplattenspeicher
+Festplattenspeichers
+Festpreis
+Festpreise
+Festpreisen
+Festpreises
+Festschreibung
+Festsetzung
+Festspeicher
+Festspeichers
+Festspiel
+Festspiele
+Festspielen
+Festspiels
+Feststellung
+Feststellungen
+Festtag
+Festtage
+Festtagen
+Festtages
+Festung
+Festungen
+Fetisch
+Fettdruck
+Fettdruckes
+Fettdrucks
+Fetzen
+Fetzens
+Feuchtigkeit
+Feudalismus
+Feuer
+Feuerchen
+Feuerchens
+Feuereifer
+Feuerprobe
+Feuerproben
+Feuers
+Feuerung
+Feuerungen
+Feuilleton
+Feuilletons
+Fez
+Fiaker
+Fiakers
+Fiasko
+Fiaskos
+Fiat
+Fibel
+Fibeln
+Fiber
+Fibu
+Fichte
+Fichten
+Fidibus
+Fieber
+Fiebers
+Figur
+Figuren
+Fiktion
+Fiktionen
+File
+Filename
+Filenamen
+Filepointer
+Files
+Filesystem
+Filesysteme
+Filesystemen
+Filesystems
+Filesystemtyp
+Filesystemtyps
+Filet
+Filets
+Filiale
+Filialen
+Filibuster
+Film
+Filmchen
+Filmchens
+Filmes
+Films
+Filter
+Filteralgorithmen
+Filtern
+Filterprogramm
+Filters
+Filterung
+Filz
+Filzes
+Fimmel
+Finale
+Finanz
+Finanzen
+Finanzier
+Finanziers
+Finanzierung
+Finanzierungen
+Finder
+Finderin
+Finderinnen
+Finderlohn
+Finderlohns
+Findern
+Finders
+Findigkeit
+Findigkeiten
+Findling
+Findlinge
+Findlingen
+Findlings
+Finesse
+Finessen
+Finger
+Fingerfertigkeit
+Fingern
+Fingers
+Fingerzeig
+Fingerzeige
+Fingerzeigen
+Fingerzeigs
+Fingerübung
+Fingerübungen
+Fink
+Finken
+Finne
+Finnen
+Finnin
+Finnland
+Finsternis
+Finsternisse
+Finsternissen
+Finte
+Finten
+Firlefanz
+Firma
+Firmament
+Firmamente
+Firmamentes
+Firmen
+Firmung
+Firmungen
+Firmware
+Firmwareeigenschaft
+Firmwareeigenschaften
+Firmwareveränderung
+Firmwareveränderungen
+Firmwareänderung
+Firmwareänderungen
+First
+Firste
+Firsten
+Firstes
+Firsthöhe
+Firsts
+Fisch
+Fische
+Fischen
+Fischer
+Fischerei
+Fischerin
+Fischerinnen
+Fischern
+Fischers
+Fisches
+Fischs
+Fisole
+Fisolen
+Fistel
+Fisteln
+Fitness
+Fitnesscenter
+Fitnesscentern
+Fitnesscenters
+Fitnessraum
+Fitnessraums
+Fitnessräume
+Fitnessräumen
+Fittich
+Fittiche
+Fittichen
+Fittichs
+Fitzgerald
+Fitzgeralds
+Fixer
+Fixierung
+Fixierungen
+Fixpunkt
+Fixpunktbildung
+Fixpunkte
+Fixpunkten
+Fixpunktes
+Fixpunktgleichung
+Fixpunktgleichungen
+Fixpunktiteration
+Fixpunktiterationen
+Fixpunktoperator
+Fixpunktsatz
+Fixpunktsatzes
+Fixpunktverfahren
+Fjord
+Fjorde
+Fjorden
+Fjords
+Fkt
+Flachbandkabel
+Flachheit
+Flachheiten
+Flachkabel
+Flachland
+Flachlandes
+Flachs
+Flachses
+Flackerschein
+Flackerscheins
+Fladen
+Fladens
+Flagge
+Flaggen
+Flair
+Flak
+Flakon
+Flakons
+Flamen
+Flamenco
+Flamingo
+Flamingos
+Flamme
+Flammen
+Flandern
+Flanell
+Flanke
+Flanken
+Flankensteilheit
+Flankentriggerung
+Flansch
+Flansches
+Flasche
+Flaschen
+Flaschenzug
+Flaschenzuges
+Flaschenzugs
+Flaschenzüge
+Flaschenzügen
+Flatterhaftigkeit
+Flattersatz
+Flaum
+Flaums
+Flausen
+Flaute
+Flauten
+Flautezeit
+Flautezeiten
+Fleck
+Fleckchen
+Fleckchens
+Fleckes
+Flecks
+Fledermaus
+Fledermäuse
+Fledermäusen
+Flegel
+Flegelalter
+Flegelalters
+Flegeljahre
+Flegeljahren
+Fleisch
+Fleischbank
+Fleischbänke
+Fleischbänken
+Fleischer
+Fleischerei
+Fleischereien
+Fleischern
+Fleischers
+Fleisches
+Fleischhauer
+Fleischhauerei
+Fleischhauereien
+Fleischhauern
+Fleischhauers
+Fleischlaibchen
+Fleischlaiberl
+Fleischlaiberln
+Fleischmaschine
+Fleischmaschinen
+Fleischvogel
+Fleiß
+Fleißarbeit
+Fleißarbeiten
+Fleißes
+Flensburg
+Flexibilität
+Flexion
+Flexionen
+Flexionsform
+Flexionsformen
+Flickarbeit
+Flickarbeiten
+Flickenteppich
+Flicker
+Flickerei
+Flickereien
+Flickerin
+Flickerinnen
+Flickern
+Flickers
+Flickwerk
+Flickwerks
+Flickzeug
+Flickzeugs
+Flieder
+Fliedern
+Fliegens
+Fliegerei
+Fliese
+Fliesen
+Fließband
+Fließbandes
+Fließbänder
+Fließbändern
+Fließkommaoperation
+Fließkommaoperationen
+Fließkommaprozessor
+Fließkommazahl
+Fließkommazahlen
+Flimmer
+Flimmers
+Flinkheit
+Flinte
+Flinten
+Flipper
+Flirt
+Flirts
+Flittchen
+Flittchens
+Flitter
+Flitzer
+Flitzern
+Floh
+Flohmarkt
+Flohmarktes
+Flohmärkte
+Flohmärkten
+Flohs
+Flop
+Floppyabdeckung
+Floppyabdeckungen
+Floppybetrieb
+Floppydisk
+Floppydisketten
+Floppylaufwerk
+Floppylaufwerke
+Floppystation
+Floppystationen
+Flora
+Florenz
+Florett
+Florida
+Floskel
+Floskeln
+Flotte
+Flotten
+Flow
+Flowerpower
+Floß
+Floßes
+Fluch
+Flucher
+Fluchern
+Fluchers
+Fluchs
+Flucht
+Flug
+Fluge
+Fluges
+Flugs
+Fluid
+Fluktuation
+Fluktuationen
+Flunder
+Flunkerei
+Flunkereien
+Fluor
+Fluors
+Flur
+Flurs
+Fluss
+Flussdiagramm
+Flussdiagramme
+Flussdiagrammen
+Flussdiagramms
+Flusses
+Flussmodell
+Flussmodelle
+Flussmodellen
+Flussmodells
+Flut
+Fluten
+Fläche
+Flächen
+Flächeninhalt
+Flächeninhalte
+Flächeninhalten
+Flächeninhaltes
+Flächenmaß
+Flächenmaße
+Flächenmaßen
+Flächenmaßes
+Flämmchen
+Flämmchens
+Fläschchen
+Fläschchens
+Flöhe
+Flöhen
+Flötist
+Flötisten
+Flöz
+Flöße
+Flößen
+Flüche
+Flüchen
+Flüchtigkeit
+Flüchtigkeitsfehler
+Flüchtigkeitsfehlern
+Flüchtigkeitsfehlers
+Flüchtling
+Flüchtlinge
+Flüchtlingen
+Flüchtlings
+Flüge
+Flügel
+Flügeln
+Flügen
+Flüsschen
+Flüsschens
+Flüsse
+Flüssen
+Flüssigkeit
+Flüssigkeiten
+Fockmast
+Fohlen
+Fohlens
+Fokker
+Fokkers
+Fokus
+Fokussierung
+Folgeauftrag
+Folgeauftrages
+Folgeauftrags
+Folgeaufträge
+Folgeaufträgen
+Folgeband
+Folgeerscheinung
+Folgeerscheinungen
+Folgejahre
+Folgejahren
+Folgekosten
+Folgelast
+Folgelasten
+Folgenerscheinung
+Folgenglied
+Folgenglieder
+Folgengliedern
+Folgenglieds
+Folgeposition
+Folgepositionen
+Folgerichtigkeit
+Folgerung
+Folgerungen
+Folgesatz
+Folgeschäden
+Folgeseite
+Folgeseiten
+Folgesätze
+Folgesätzen
+Folgetreffen
+Folgetreffens
+Folgewidrigkeit
+Folgewirkung
+Folgewirkungen
+Folgezeit
+Folgezustand
+Folgsamkeit
+Folie
+Folien
+Folienmaß
+Folienmaße
+Folienmaßen
+Folienmaßes
+Folklore
+Folter
+Foltermethode
+Foltermethoden
+Folterung
+Folterungen
+Fond
+Fonografie
+Fontainebleau
+Fontäne
+Fontänen
+Foppereien
+Ford
+Forderung
+Forderungen
+Fords
+Forelle
+Forellen
+Foren
+Form
+Formalisierbarkeit
+Formalisierung
+Formalisierungen
+Formalismen
+Formalismus
+Formalität
+Formalitäten
+Format
+Formatbefehl
+Formatbefehle
+Formate
+Formaten
+Formates
+Formatierens
+Formatierer
+Formatierkommando
+Formatierkommandos
+Formatierkorrektur
+Formatierkorrekturen
+Formatierprogramm
+Formatierprogramme
+Formatierprogrammen
+Formatierprogramms
+Formatiersoftware
+Formatierung
+Formatierungen
+Formation
+Formationen
+Formationsflug
+Formationsfluges
+Formationsflugs
+Formationsflüge
+Formationsflügen
+Formatpapier
+Formatpapiers
+Formats
+Formatänderung
+Formatänderungen
+Formbewusstsein
+Formblatt
+Formblätter
+Formbrief
+Formel
+Formelmenge
+Formelmengen
+Formeln
+Formenbau
+Formenlehre
+Formensprache
+Formenwelt
+Formfeed
+Formfehler
+Formfrage
+Formfragen
+Formmodell
+Formmodelle
+Formmodellen
+Formmodells
+Formosa
+Formosastraße
+Formsache
+Formsachen
+Formstahl
+Formstücke
+Formstücken
+Formtabelle
+Formtabellen
+Formular
+Formulare
+Formularen
+Formulars
+Formularvorschub
+Formularvorschubes
+Formularvorschubs
+Formulierens
+Formulierung
+Formulierungen
+Formung
+Formungen
+Forscher
+Forschergruppe
+Forschergruppen
+Forscherin
+Forscherinnen
+Forschern
+Forschers
+Forschung
+Forschungen
+Forschungsabteilung
+Forschungsabteilungen
+Forschungsanstalt
+Forschungsanstalten
+Forschungsarbeit
+Forschungsarbeiten
+Forschungsauftrag
+Forschungsauftrages
+Forschungsauftrags
+Forschungsaufträge
+Forschungsaufträgen
+Forschungsbemühung
+Forschungsbemühungen
+Forschungsbereich
+Forschungseinrichtung
+Forschungseinrichtungen
+Forschungsergebnis
+Forschungsergebnisse
+Forschungsergebnissen
+Forschungsergebnisses
+Forschungsförderung
+Forschungsgebiet
+Forschungsgebiete
+Forschungsgebieten
+Forschungsgebiets
+Forschungsgemeinschaft
+Forschungsgruppe
+Forschungsgruppen
+Forschungsinstitut
+Forschungsinstitutes
+Forschungslaboratorien
+Forschungslaboratorium
+Forschungsmaterial
+Forschungsministerium
+Forschungsmittel
+Forschungsmitteln
+Forschungsprogramm
+Forschungsprojekt
+Forschungsprojekte
+Forschungsprojekten
+Forschungsprojekts
+Forschungsreise
+Forschungsreisen
+Forschungsreisende
+Forschungsreisenden
+Forschungsreisender
+Forschungsrichtung
+Forschungsrichtungen
+Forschungsschwerpunkt
+Forschungsschwerpunkte
+Forschungsschwerpunkten
+Forschungsschwerpunkts
+Forschungsstelle
+Forschungsstellen
+Forschungsvorhaben
+Forschungsvorhabens
+Forschungszentrum
+Forschungszwecke
+Forschungszwecken
+Forst
+Forste
+Forsten
+Forstes
+Fortbestand
+Fortbewegung
+Fortbewegungen
+Fortbildung
+Fortbildungskurs
+Fortbildungskurse
+Fortbildungskursen
+Fortbildungskurses
+Fortdauer
+Fortfall
+Fortfalls
+Fortfälle
+Fortfällen
+Fortführung
+Fortführungen
+Fortgang
+Fortgangs
+Fortgänge
+Fortgängen
+Fortpflanzung
+Fortpflanzungen
+Fortran
+Fortschreibung
+Fortschritt
+Fortschritte
+Fortschritten
+Fortschrittlichkeit
+Fortschritts
+Fortschrittsglaube
+Fortsetzung
+Fortsetzungen
+Fortsetzungsgespräch
+Fortsetzungsgespräche
+Fortsetzungsgesprächen
+Fortsetzungsgesprächs
+Fortune
+Forum
+Fossilien
+Foto
+Fotoapparat
+Fotoapparate
+Fotoapparaten
+Fotoapparates
+Fotoapparats
+Fotoausrüstung
+Fotoausrüstungen
+Fotoausstellung
+Fotobericht
+Fotoberichte
+Fotoberichten
+Fotoberichts
+Fotodiode
+Fotodioden
+Fotograf
+Fotografen
+Fotografie
+Fotografien
+Fotografin
+Fotografinnen
+Fotokopie
+Fotokopien
+Fotos
+Fotosynthese
+Fotzen
+Foul
+Fouls
+Foulspiel
+Fourieranalyse
+Fourieranalysen
+Fouriertransformation
+Fouriertransformationen
+Foyer
+Fr
+Fracht
+Frachten
+Frachter
+Frachtern
+Frack
+Fracks
+Fragebogen
+Fragebogens
+Fragebögen
+Frageform
+Fragenkomplex
+Fragenkomplexe
+Fragenkomplexen
+Fragenkomplexes
+Frager
+Fragerin
+Fragerinnen
+Fragern
+Fragers
+Fragesatz
+Fragesatzes
+Fragesteller
+Fragestellern
+Fragestellers
+Fragestellung
+Fragestellungen
+Fragestunde
+Fragestunden
+Fragesätze
+Fragesätzen
+Fragewort
+Fragewortes
+Fragewörter
+Fragewörtern
+Fragezeichen
+Fragezeichens
+Fragment
+Fragmente
+Fragmenten
+Fragmentes
+Fragmentierung
+Fragments
+Fragwürdigkeit
+Fraktion
+Fraktionen
+Frakturschrift
+Frameblock
+Frameblocks
+Framelänge
+Frameword
+Franc
+Francisco
+Franco
+Francos
+Frank
+Franken
+Frankens
+Frankenstein
+Frankensteins
+Frankfurt
+Frankfurter
+Frankfurterin
+Frankfurterinnen
+Frankfurters
+Frankreich
+Frankreichs
+Franks
+Franse
+Fransen
+Franziska
+Franziskaner
+Franziskas
+Franziskus
+Franzose
+Franzosen
+Französin
+Französinnen
+Fraternisation
+Fratze
+Fratzen
+Frau
+Frauchen
+Frauchens
+Frauen
+Frauenzimmer
+Frauenzimmern
+Frauenzimmers
+Fraunhofer
+Fraunhofers
+Fraß
+Fraße
+Fraßen
+Fraßes
+Freak
+Freaks
+Frechheit
+Frechheiten
+Freeclimbing
+Freeclimbings
+Freejazz
+Freeware
+Fregatte
+Fregatten
+Freiberufqqler
+Freiberufqqlern
+Freiberufqqlers
+Freibetrag
+Freibetrags
+Freibeträge
+Freibeträgen
+Freibier
+Freibrief
+Freibriefe
+Freibriefen
+Freibriefs
+Freiburg
+Freiburger
+Freiburgern
+Freidenker
+Freidenkern
+Freidenkers
+Freiern
+Freifläche
+Freiflächen
+Freigabe
+Freigebigkeit
+Freigiebigkeit
+Freiheit
+Freiheiten
+Freiherr
+Freiherren
+Freiherrin
+Freiherrinnen
+Freiherrn
+Freilassung
+Freilassungen
+Freilauf
+Freilaufs
+Freiläufe
+Freiläufen
+Freimut
+Freimuts
+Freimütigkeit
+Freiraum
+Freiraumes
+Freiraums
+Freiräume
+Freiräumen
+Freisetzung
+Freising
+Freisprechung
+Freisprechungen
+Freispruch
+Freispruchs
+Freisprüche
+Freisprüchen
+Freistellung
+Freistellungen
+Freistunde
+Freistunden
+Freitag
+Freiwild
+Freiwildes
+Freizeit
+Freizügigkeit
+Fremdenverkehr
+Fremdenzimmer
+Fremdenzimmern
+Fremdgutachten
+Fremdgutachtens
+Fremdkörper
+Fremdkörpern
+Fremdleistung
+Fremdleistungen
+Fremdling
+Fremdlinge
+Fremdlingen
+Fremdlings
+Fremdsprache
+Fremdsprachen
+Fremdsprachenkenntnis
+Fremdsprachenkenntnisse
+Fremdsprachenkenntnissen
+Fremdwort
+Fremdwortes
+Fremdworts
+Fremdwörter
+Fremdwörterbuch
+Fremdwörtern
+Frequenz
+Frequenzen
+Frequenzverhältnis
+Frequenzverhältnisse
+Frequenzverhältnissen
+Frequenzverhältnisses
+Freske
+Fresken
+Fresser
+Fresspaket
+Fresspaketes
+Freud
+Freude
+Freuden
+Freudenjauchzer
+Freudentag
+Freudentaumel
+Freudenträne
+Freudentränen
+Freudigkeit
+Freund
+Freunde
+Freunden
+Freundes
+Freundeskreis
+Freundeskreise
+Freundeskreisen
+Freundeskreises
+Freundesmund
+Freundin
+Freundinnen
+Freundlichkeit
+Freundlichkeiten
+Freundschaft
+Freundschaftlichkeit
+Frevel
+Freveltat
+Friede
+Frieden
+Friedens
+Friedfertigkeit
+Friedhof
+Friedhofs
+Friedhöfe
+Friedhöfen
+Friedland
+Friedrich
+Friedrichs
+Friedrichshafen
+Friedrichstadt
+Friese
+Friesen
+Friesland
+Frikadelle
+Frikadellen
+Friseur
+Friseure
+Friseuren
+Friseurin
+Friseurinnen
+Friseurs
+Friseuse
+Friseusen
+Frisiertisch
+Frist
+Fristablauf
+Fristablaufs
+Fristabläufe
+Fristabläufen
+Fristen
+Fristenmodell
+Fristenmodelle
+Fristenmodellen
+Fristenmodells
+Fristverlängerung
+Fristverlängerungen
+Frisur
+Frisuren
+Frisör
+Frisöre
+Frisören
+Frisörin
+Frisörinnen
+Frisörs
+Fritatten
+Friteuse
+Friteusen
+Fritz
+Frl
+Frohnatur
+Frohnaturen
+Frohsinn
+Frohsinns
+Fron
+Fronarbeit
+Fronarbeiten
+Frondienst
+Frondienste
+Frondiensten
+Frondienstes
+Fronen
+Front
+Frontalangriff
+Frontalangriffe
+Frontalangriffen
+Frontalangriffs
+Frontansicht
+Frontansichten
+Fronten
+Frontend
+Frontendapplikation
+Frontendfirmware
+Frontendprozessor
+Frontendprozessors
+Frontleiterplatte
+Frontplattentastatur
+Frontseite
+Frontseiten
+Frosch
+Froschperspektive
+Froschperspektiven
+Frost
+Frostes
+Frosts
+Frucht
+Fruchtbarkeit
+Frugalität
+Frust
+Fräcke
+Fräcken
+Fräulein
+Fräuleins
+Fröhlichkeit
+Frömmigkeit
+Frösche
+Fröschen
+Früchte
+Früchten
+Frühaufsteher
+Frühaufstehern
+Frühaufstehers
+Früherkennung
+Frühjahr
+Frühjahrs
+Frühling
+Frühlings
+Frühschicht
+Frühschoppen
+Frühschoppens
+Frühstück
+Frühstücks
+Frühzeit
+Frühzeitigkeit
+Fuchs
+Fuchses
+Fuchtel
+Fuder
+Fudern
+Fuge
+Fugen
+Fugger
+Fuggers
+Fuhre
+Fuhren
+Fuji
+Fujitsu
+Fulltimejob
+Fulltimejobs
+Fummel
+Fummelei
+Fummeleien
+Fund
+Fundament
+Fundamente
+Fundamenten
+Fundamentes
+Fundaments
+Fundbüro
+Fundbüros
+Funde
+Funden
+Fundes
+Fundgrube
+Fundgruben
+Fundierung
+Fundierungen
+Fundort
+Fundorte
+Fundorten
+Fundorts
+Fundsache
+Fundsachen
+Fundus
+Funk
+Funker
+Funkern
+Funks
+Funktion
+Funktionalität
+Funktionalitäten
+Funktionen
+Funktionsablauf
+Funktionsablaufs
+Funktionsabläufe
+Funktionsabläufen
+Funktionsanwendung
+Funktionsanwendungen
+Funktionsaufruf
+Funktionsaufrufe
+Funktionsaufrufen
+Funktionsaufrufs
+Funktionsbereich
+Funktionsbereiche
+Funktionsbereichen
+Funktionsbereichs
+Funktionsbeschreibung
+Funktionsbeurteilung
+Funktionsbeurteilungen
+Funktionsdefinition
+Funktionsdefinitionen
+Funktionsdeklaration
+Funktionsdeklarationen
+Funktionsdiagramm
+Funktionsdiagramme
+Funktionsdiagrammen
+Funktionsdiagramms
+Funktionsergebnis
+Funktionsergebnisse
+Funktionsergebnissen
+Funktionsergebnisses
+Funktionsfähigkeit
+Funktionsidentifikator
+Funktionsidentifikatoren
+Funktionskontrolle
+Funktionskontrollen
+Funktionsmerkmale
+Funktionsmerkmalen
+Funktionsobjekt
+Funktionsobjekte
+Funktionsobjekten
+Funktionsobjektes
+Funktionsobjekts
+Funktionsprüfung
+Funktionsrumpf
+Funktionsrumpfes
+Funktionsrumpfs
+Funktionsrümpfe
+Funktionsrümpfen
+Funktionssicherheit
+Funktionssymbol
+Funktionssymbole
+Funktionssymbolen
+Funktionssymbols
+Funktionstaste
+Funktionstasten
+Funktionstest
+Funktionstests
+Funktionsumfang
+Funktionsweise
+Funktionsweisen
+Funktionsüberprüfung
+Funktionär
+Funktionäre
+Funktionären
+Funktionärs
+Funktor
+Funktoren
+Furche
+Furchen
+Furcht
+Furchtlosigkeit
+Furie
+Furien
+Furnier
+Furniere
+Furnieren
+Furniers
+Furore
+Furt
+Furten
+Furunkel
+Furunkeln
+Furunkels
+Furz
+Furzes
+Fusel
+Fusion
+Fusionen
+Futter
+Futteral
+Futterale
+Futteralen
+Futterals
+Futters
+Futur
+Future
+Futures
+Futurologie
+Futurs
+Fuß
+Fußabdrücke
+Fußabdrücken
+Fußabstreicher
+Fußabstreichern
+Fußabstreichers
+Fußabtreter
+Fußabtretern
+Fußabtreters
+Fußangel
+Fußbad
+Fußball
+Fußballes
+Fußballs
+Fußboden
+Fußbodens
+Fußbäder
+Fußbälle
+Fußbällen
+Fußböden
+Fußdrehung
+Fußes
+Fußgänger
+Fußgängerin
+Fußgängerinnen
+Fußgängern
+Fußgängers
+Fußnote
+Fußnoten
+Fächer
+Fächern
+Fächers
+Fädchen
+Fädchens
+Fäden
+Fähigkeit
+Fähigkeiten
+Fähnchen
+Fähnchens
+Fähnlein
+Fähnleins
+Fähre
+Fähren
+Fährte
+Fährten
+Fälle
+Fällen
+Fälligkeit
+Fälligkeitsdatum
+Fälscher
+Fälscherin
+Fälscherinnen
+Fälschern
+Fälschers
+Fälschung
+Fälschungen
+Fänge
+Fängen
+Färber
+Färberei
+Färbereien
+Färbern
+Färbers
+Färbung
+Färbungen
+Fässchen
+Fässchens
+Fässer
+Fässern
+Fäule
+Fäulnis
+Fäulnisse
+Fäulnissen
+Fäustchen
+Fäustchens
+Fäuste
+Fäusten
+Föderalismus
+Föderation
+Föderationen
+Föhn
+Föhns
+Föhre
+Föhren
+Förderer
+Fördergemeinschaft
+Fördergemeinschaften
+Fördergesellschaft
+Fördergesellschaften
+Förderkosten
+Förderkurs
+Förderkurse
+Förderkursen
+Förderkurses
+Förderung
+Förderungen
+Förderungsabfall
+Förderungsabfalls
+Förderungsabfälle
+Förderungsabfällen
+Förderungsgesellschaft
+Förderungsgesellschaften
+Förderungsprogramm
+Förderungsprogramme
+Förderungsprogrammen
+Förderungsprogramms
+Förderungsvorschlag
+Förderungsvorschlages
+Förderungsvorschlags
+Förderungsvorschläge
+Förderungsvorschlägen
+Förderungsweg
+Förderungswege
+Förderungswegen
+Förderungsweges
+Förderungswegs
+Förderungswettbewerb
+Förderungswettbewerbe
+Förderungswettbewerben
+Förderungswettbewerbes
+Förderungswettbewerbs
+Förderunterricht
+Förderverein
+Fördervereine
+Fördervereinen
+Fördervereins
+Förmlichkeit
+Förmlichkeiten
+Förster
+Försterei
+Försterin
+Försterinnen
+Förstern
+Försters
+Fötus
+Füchse
+Füchsen
+Füchsin
+Füchsinnen
+Fügsamkeit
+Fügung
+Fügungen
+Fühlbarkeit
+Fühler
+Fühlern
+Fühlers
+Fühlungsnahme
+Fühlungsnahmen
+Führer
+Führerbefehl
+Führerin
+Führerinnen
+Führern
+Führerpersönlichkeit
+Führerpersönlichkeiten
+Führerprinzip
+Führerrolle
+Führerrollen
+Führers
+Führerschaft
+Führerschaften
+Führerschein
+Führerscheine
+Führerscheinen
+Führerscheins
+Führersitz
+Führersitze
+Führersitzen
+Führersitzes
+Führung
+Führungen
+Führungsapparat
+Führungsaufgabe
+Führungsaufgaben
+Führungsauswahl
+Führungsbegabung
+Führungsentschluss
+Führungsentschlusses
+Führungsentschlüsse
+Führungsentschlüssen
+Führungsgrundsätze
+Führungsgrundsätzen
+Führungskraft
+Führungskreise
+Führungskreisen
+Führungskrise
+Führungskrisen
+Führungskräfte
+Führungskräften
+Führungsmannschaft
+Führungsmodell
+Führungsorganisation
+Führungsorganisationen
+Führungspersönlichkeit
+Führungspersönlichkeiten
+Führungsposition
+Führungspositionen
+Führungsqualität
+Führungsqualitäten
+Führungsschicht
+Führungsschichten
+Führungswechsel
+Führungszeugnis
+Führungszeugnisse
+Führungszeugnissen
+Führungszeugnisses
+Füller
+Füllern
+Füllers
+Füllfederhalter
+Füllhalter
+Füllmenge
+Füllmengen
+Füllung
+Füllungen
+Füllzeichen
+Füllzeichens
+Fünfeck
+Fünfecke
+Fünfecken
+Fünfeckes
+Fünfer
+Fünfjahresplan
+Fünfjahresplans
+Fünfqqlinge
+Fünfqqlingen
+Fünftklässler
+Fünftklässlerin
+Fünftklässlerinnen
+Fünftklässlern
+Fünftklässlers
+Fünfziger
+Fünkchen
+Fünkchens
+Fürbitte
+Fürbitten
+Fürsorge
+Fürsorgen
+Fürsorgepflicht
+Fürsorger
+Fürsorgerin
+Fürsorgerinnen
+Fürsorgern
+Fürsorgers
+Fürsprache
+Fürsprachen
+Fürsprecher
+Fürsprecherin
+Fürsprecherinnen
+Fürsprechern
+Fürsprechers
+Fürst
+Fürsten
+Fürstenfeldbruck
+Fürstentum
+Fürstentums
+Fürstentümer
+Fürstentümern
+Fürstin
+Fürstinnen
+Fürth
+Fürze
+Fürzen
+Fütterung
+Fütterungen
+Füße
+Füßen
+GATT
+GAU
+GB
+GByte
+GEW
+GI
+GPL
+Gabe
+Gabel
+Gabeln
+Gaben
+Gabriele
+Gabrieles
+Gabun
+Gaddafi
+Gaddafis
+Gag
+Gage
+Gagen
+Gags
+Gala
+Galapagos
+Galaxie
+Galaxien
+Galaxis
+Galeere
+Galeeren
+Galerie
+Galerien
+Galgen
+Galgenfrist
+Galgenfristen
+Galgenhumor
+Galgenhumors
+Galgens
+Galgenvogel
+Galgenvogels
+Galgenvögel
+Galilei
+Galileis
+Galizien
+Galle
+Gallen
+Gallien
+Gallier
+Gallierin
+Gallierinnen
+Galliern
+Galliers
+Gallone
+Gallonen
+Galopp
+Galopps
+Galvanometer
+Gamasche
+Gamaschen
+Gammler
+Gammlern
+Gammlers
+Gandhi
+Gandhis
+Gang
+Gangart
+Gangarten
+Ganges
+Ganggräber
+Gangreserve
+Gangreserven
+Gangs
+Gangschaltung
+Gangschaltungen
+Gangster
+Gangstern
+Gangway
+Gangways
+Ganove
+Ganoven
+Gans
+Garage
+Garagen
+Garant
+Garantie
+Garantieabgeltung
+Garantieabkommen
+Garantieabkommens
+Garantiebedingung
+Garantiebedingungen
+Garantiefall
+Garantiefalls
+Garantieforderung
+Garantieforderungen
+Garantiefälle
+Garantiefällen
+Garantieleistung
+Garantieleistungen
+Garantiemittel
+Garantiemitteln
+Garantien
+Garantiesatz
+Garantieschein
+Garantiescheine
+Garantiescheinen
+Garantiescheins
+Garantieträger
+Garantieversprechen
+Garantieversprechens
+Garantiezeit
+Garbe
+Garben
+Garbo
+Garbos
+Garching
+Garde
+Garden
+Garderobe
+Garderoben
+Garderobiere
+Garderobieren
+Gardine
+Gardinen
+Garn
+Garne
+Garnele
+Garnelen
+Garnen
+Garnes
+Garnierung
+Garnison
+Garnisonen
+Garnitur
+Garns
+Garten
+Gartens
+Gas
+Gase
+Gasen
+Gases
+Gasse
+Gassen
+Gast
+Gastarbeiter
+Gastarbeiterin
+Gastarbeiterinnen
+Gastarbeitern
+Gastarbeiters
+Gastbuch
+Gastdozent
+Gasteig
+Gastes
+Gastfreund
+Gastfreunde
+Gastfreunden
+Gastfreundes
+Gastfreundlichkeit
+Gastfreundschaft
+Gastgeber
+Gastgeberin
+Gastgeberinnen
+Gastgebern
+Gastgebers
+Gastgeschenk
+Gasthaus
+Gasthauses
+Gasthof
+Gasthofes
+Gasthofs
+Gasthäuser
+Gasthäusern
+Gasthöfe
+Gasthöfen
+Gastland
+Gastländer
+Gastländern
+Gastmahl
+Gastritis
+Gastrolle
+Gastrollen
+Gastronom
+Gastronomen
+Gastronomie
+Gastspiel
+Gastspiele
+Gastspielen
+Gastspiels
+Gaststätte
+Gaststätten
+Gastvorlesung
+Gastvorlesungen
+Gastvorstellung
+Gastwirt
+Gastwirte
+Gastwirten
+Gastwirtin
+Gastwirtinnen
+Gastwirts
+Gastwirtschaft
+Gastzimmer
+Gateleitung
+Gateleitungen
+Gateway
+Gateways
+Gatte
+Gatten
+Gatter
+Gattern
+Gatters
+Gattin
+Gattinnen
+Gattung
+Gauda
+Gaudeamus
+Gaukelei
+Gaukeleien
+Gaukler
+Gauklern
+Gauklers
+Gaul
+Gaulle
+Gaulles
+Gaullist
+Gaullisten
+Gauls
+Gaumeister
+Gaumen
+Gaumens
+Gauner
+Gaunerei
+Gaunereien
+Gaunerin
+Gaunerinnen
+Gaunern
+Gauners
+Gaze
+Gazelle
+Gazellen
+Gazen
+Gazette
+Gazetten
+GbR
+Gebeine
+Gebeinen
+Gebell
+Gebells
+Geber
+Gebern
+Gebers
+Gebet
+Gebete
+Gebeten
+Gebets
+Gebiet
+Gebieter
+Gebieterin
+Gebieterinnen
+Gebietern
+Gebieters
+Gebietes
+Gebiets
+Gebilde
+Gebilden
+Gebildes
+Gebimmel
+Gebimmels
+Gebinde
+Gebinden
+Gebirge
+Gebirgen
+Gebirges
+Gebiss
+Gebisse
+Gebissen
+Gebisses
+Gebläse
+Gebläsen
+Gebot
+Gebote
+Geboten
+Gebots
+Gebrauch
+Gebrauchs
+Gebrauchsanweisung
+Gebrauchsanweisungen
+Gebrauchsartikel
+Gebrauchsartikeln
+Gebrauchsartikels
+Gebrauchsfahrzeug
+Gebrauchsfahrzeuge
+Gebrauchsfahrzeugen
+Gebrauchsfahrzeugs
+Gebrauchsfähigkeit
+Gebrauchsgegenstand
+Gebrauchsgegenstandes
+Gebrauchsgegenstands
+Gebrauchsgegenstände
+Gebrauchsgegenständen
+Gebrauchsgraphik
+Gebrauchsgüter
+Gebrauchsgütern
+Gebrauchsmuster
+Gebrauchsmustern
+Gebrauchtware
+Gebrauchtwaren
+Gebrechen
+Gebrechens
+Gebrechlichkeit
+Gebrumm
+Gebräu
+Gebräuche
+Gebräuchen
+Gebräus
+Gebrüder
+Gebrüll
+Gebrülls
+Gebundenheit
+Geburt
+Geburten
+Geburtsdaten
+Geburtsdatum
+Geburtsjahr
+Geburtsjahre
+Geburtsjahren
+Geburtsjahres
+Geburtsjahrs
+Geburtsort
+Geburtsorte
+Geburtsorten
+Geburtsortes
+Geburtsstadt
+Geburtstag
+Geburtstage
+Geburtstagen
+Geburtstages
+Geburtstags
+Geburtsurkunde
+Geburtsurkunden
+Geburtswehen
+Gebäck
+Gebälk
+Gebälks
+Gebäude
+Gebäuden
+Gebühr
+Gebühreneinheit
+Gebühreneinheiten
+Gebührenordnung
+Gebührenordnungen
+Gebührenpolitik
+Gebührensätze
+Gebührensätzen
+Gebüsch
+Gebüsche
+Gebüschen
+Gebüschs
+Geck
+Gecken
+Gedanke
+Gedanken
+Gedankenarmut
+Gedankenaustausch
+Gedankenaustausches
+Gedankenblitz
+Gedankenblitze
+Gedankenblitzen
+Gedankenblitzes
+Gedankenfreiheit
+Gedankenfreiheiten
+Gedankengang
+Gedankenganges
+Gedankengangs
+Gedankengespräche
+Gedankengesprächen
+Gedankengut
+Gedankengänge
+Gedankengängen
+Gedankenkette
+Gedankenketten
+Gedankenkreis
+Gedankenkreise
+Gedankenkreisen
+Gedankenkreises
+Gedankenlesen
+Gedankenleser
+Gedankenleserin
+Gedankenleserinnen
+Gedankenlesern
+Gedankenlesers
+Gedankenlosigkeit
+Gedankenlosigkeiten
+Gedankenreichtum
+Gedankens
+Gedankensplitter
+Gedankensplittern
+Gedankenwelt
+Gedankenwelten
+Gedeck
+Gedecke
+Gedecken
+Gedecks
+Gedicht
+Gedichte
+Gedichten
+Gedichts
+Gediegenheit
+Gedränge
+Gedrängen
+Gedränges
+Gedröhn
+Gedröhne
+Gedröhns
+Geduld
+Geduldspiel
+Geduldspiele
+Geduldspielen
+Geduldspiels
+Geduldsprobe
+Geduldsproben
+Gedächtnis
+Gedächtnisse
+Gedächtnissen
+Gedächtnisses
+Gefahr
+Gefahrenherd
+Gefahrenherde
+Gefahrenherden
+Gefahrenherds
+Gefahrenmoment
+Gefahrenmomente
+Gefahrenmomenten
+Gefahrenmoments
+Gefahrenquelle
+Gefahrenquellen
+Gefahrensignal
+Gefahrensignale
+Gefahrensignalen
+Gefahrensignals
+Gefahrenwolke
+Gefahrenwolken
+Gefahrenzone
+Gefahrenzonen
+Gefahrenzulage
+Gefahrenzulagen
+Gefahrlosigkeit
+Gefallsucht
+Gefangenschaft
+Gefangenschaften
+Gefasel
+Gefasels
+Gefecht
+Gefechte
+Gefechten
+Gefechts
+Gefieder
+Gefiedern
+Gefilde
+Gefilden
+Geflecht
+Geflechte
+Geflechten
+Geflechts
+Geflunker
+Geflunkers
+Geflügel
+Geflügels
+Geflüster
+Geflüsters
+Gefolge
+Gefolgen
+Gefolgschaft
+Gefolgschaften
+Gefolgsmann
+Gefolgsmanns
+Gefräßigkeit
+Gefährdung
+Gefährdungen
+Gefährlichkeit
+Gefährt
+Gefährten
+Gefährtin
+Gefährtinnen
+Gefälle
+Gefällen
+Gefälles
+Gefälligkeit
+Gefälligkeiten
+Gefängnis
+Gefängnisse
+Gefängnissen
+Gefängnisses
+Gefäß
+Gefäße
+Gefäßen
+Gefäßerkrankung
+Gefäßerkrankungen
+Gefäßes
+Gefäßschädigung
+Gefäßschädigungen
+Gefüge
+Gefügen
+Gefüges
+Gefühl
+Gefühle
+Gefühlen
+Gefühllosigkeit
+Gefühls
+Gefühlsargument
+Gefühlsduselei
+Gefühlsduseleien
+Gefühlserguss
+Gefühlsergusses
+Gefühlsleben
+Gefühlslebens
+Gefühlsmensch
+Gefühlsmenschen
+Gegebenheit
+Gegebenheiten
+Gegenaktion
+Gegenaktionen
+Gegenangriff
+Gegenangriffe
+Gegenangriffen
+Gegenangriffs
+Gegenargument
+Gegenargumente
+Gegenargumenten
+Gegenarguments
+Gegenbeispiel
+Gegenbeispiele
+Gegenbeispielen
+Gegenbeispiels
+Gegenbesuch
+Gegenbesuche
+Gegenbesuchen
+Gegenbesuches
+Gegenbeweis
+Gegenbeweise
+Gegenbeweisen
+Gegenbeweises
+Gegend
+Gegendarstellung
+Gegendarstellungen
+Gegenden
+Gegenfrage
+Gegenfragen
+Gegengewicht
+Gegengewichte
+Gegengewichten
+Gegengewichtes
+Gegengewichts
+Gegenkraft
+Gegenkräfte
+Gegenkräften
+Gegenleistung
+Gegenleistungen
+Gegenliebe
+Gegenmaßnahme
+Gegenmaßnahmen
+Gegenmittel
+Gegenmitteln
+Gegenposition
+Gegenpositionen
+Gegenprobe
+Gegenproben
+Gegenreaktion
+Gegenreaktionen
+Gegenrechnung
+Gegenrechnungen
+Gegenrichtung
+Gegenruf
+Gegenrufe
+Gegenrufen
+Gegenrufs
+Gegensatz
+Gegensatzes
+Gegenseite
+Gegenseiten
+Gegenseitigkeit
+Gegenspieler
+Gegenspielern
+Gegenspielers
+Gegenstand
+Gegenstandes
+Gegenstelle
+Gegenstellen
+Gegenstimme
+Gegenstimmen
+Gegenstände
+Gegenständen
+Gegenständlichkeit
+Gegenstück
+Gegenstücke
+Gegenstücken
+Gegenstücks
+Gegensätze
+Gegensätzen
+Gegenteil
+Gegenteile
+Gegenteilen
+Gegenteils
+Gegenthese
+Gegenthesen
+Gegenverkehr
+Gegenverkehrs
+Gegenvorschlag
+Gegenvorschlags
+Gegenwart
+Gegenwehr
+Gegenwert
+Gegenwerte
+Gegenwerten
+Gegenwertes
+Gegenwind
+Gegenwinde
+Gegenwinden
+Gegenwindes
+Gegenüberstellung
+Gegenüberstellungen
+Gegner
+Gegnerin
+Gegnerinnen
+Gegnern
+Gegners
+Gegnerschaft
+Gegnerschaften
+Gehabe
+Gehalt
+Gehalts
+Gehege
+Gehegen
+Geheges
+Geheimhaltung
+Geheimhaltungen
+Geheimhaltungspflicht
+Geheimnis
+Geheimnisse
+Geheimnissen
+Geheimnisses
+Geheimnistuerei
+Geheimzahl
+Geheimzahlen
+Geheiß
+Geheißes
+Geheul
+Geheuls
+Gehilfe
+Gehilfen
+Gehilfin
+Gehilfinnen
+Gehirn
+Gehirne
+Gehirnen
+Gehirns
+Gehorsam
+Gehorsamkeit
+Gehorsams
+Gehsteig
+Gehsteige
+Gehsteigen
+Gehsteiges
+Gehsteigs
+Gehupe
+Gehversuch
+Gehversuche
+Gehversuchen
+Gehversuchs
+Gehweg
+Gehwege
+Gehwegen
+Gehwegs
+Gehälter
+Gehältern
+Gehässigkeit
+Gehässigkeiten
+Gehäuse
+Gehäusen
+Gehäuses
+Gehöft
+Gehöfte
+Gehöften
+Gehöftes
+Gehöfts
+Gehölz
+Gehölze
+Gehölzen
+Gehölzes
+Gehör
+Gehörs
+Geier
+Geiern
+Geifer
+Geige
+Geigen
+Geigenkasten
+Geigenkastens
+Geiger
+Geigerin
+Geigerinnen
+Geigern
+Geigers
+Geigerzähler
+Geigerzählern
+Geiseldrama
+Geiselerschießung
+Geiselnahme
+Geiselnahmen
+Geist
+Geiste
+Geister
+Geisterhand
+Geistern
+Geistes
+Geistesarbeit
+Geistesarbeiten
+Geistesarbeiter
+Geistesarbeiterin
+Geistesarbeiterinnen
+Geistesarbeitern
+Geistesarbeiters
+Geistesblitz
+Geistesblitze
+Geistesblitzen
+Geistesblitzes
+Geistesgabe
+Geistesgaben
+Geistesgegenwart
+Geisteshaltung
+Geisteshaltungen
+Geisteskraft
+Geisteskrankheit
+Geisteskrankheiten
+Geisteskräfte
+Geisteskräften
+Geistesschwäche
+Geistesschwächen
+Geistesstärke
+Geistesstörung
+Geistesverfassung
+Geistesverfassungen
+Geistesverwandtschaft
+Geistesverwirrung
+Geistesverwirrungen
+Geisteswissenschaft
+Geisteszustand
+Geisteszustandes
+Geisteszustands
+Geisteszustände
+Geisteszuständen
+Geistigkeit
+Geistlichkeit
+Geistlosigkeit
+Geiz
+Geizes
+Geizhals
+Geizhalses
+Geizhälse
+Geizhälsen
+Geizkragen
+Geizkragens
+Geiß
+Geißelung
+Geißen
+Gejammer
+Gejohle
+Gejohles
+Gekeife
+Gekeifes
+Gekeuche
+Gekeuches
+Gekicher
+Gekichers
+Geklatsche
+Geklimper
+Geklimpers
+Geklirr
+Geklirrs
+Gekläff
+Gekläffs
+Geknatter
+Geknatters
+Geknister
+Geknisters
+Gekreisch
+Gekreische
+Gekreisches
+Gekritzel
+Gekritzels
+Gekröse
+Gekröses
+Gelaber
+Gelabers
+Gelage
+Gelagen
+Gelages
+Gelass
+Gelasse
+Gelassenheit
+Gelasses
+Gelatine
+Gelatinen
+Gelaufe
+Gelaufes
+Geld
+Gelde
+Gelder
+Geldern
+Geldes
+Geldtopf
+Geldtopfs
+Geldtöpfe
+Geldtöpfen
+Gelee
+Gelees
+Gelegenheit
+Gelegenheiten
+Gelehrigkeit
+Gelehrsamkeit
+Geleis
+Geleise
+Geleisen
+Geleises
+Geleit
+Gelenk
+Gelenke
+Gelenken
+Gelenkes
+Gelenkigkeit
+Gelichter
+Gelse
+Geltung
+Geltungen
+Geltungsbedürfnis
+Geltungsbedürfnisse
+Geltungsbedürfnissen
+Geltungsbedürfnisses
+Geltungsbereich
+Geltungsbereichen
+Geltungsdrang
+Geltungswahn
+Geltungswahns
+Gelumpe
+Gelächter
+Gelächtern
+Gelände
+Geländer
+Geländern
+Geländes
+Geläufigkeit
+Geläufigkeiten
+Geläut
+Geläutes
+Gelöbnis
+Gelöbnisse
+Gelöbnissen
+Gelöbnisses
+Gelübde
+Gelübdes
+Gemach
+Gemachs
+Gemahl
+Gemahlin
+Gemahlinnen
+Gemahls
+Gemeinde
+Gemeinden
+Gemeingefühl
+Gemeingut
+Gemeingutes
+Gemeinguts
+Gemeingüter
+Gemeingütern
+Gemeinheit
+Gemeinheiten
+Gemeinnutz
+Gemeinnutzen
+Gemeinsamkeit
+Gemeinschaft
+Gemeinschaften
+Gemeinschaftsaktion
+Gemeinschaftsaktionen
+Gemeinschaftsarbeit
+Gemeinschaftsarbeiten
+Gemeinschaftsgefühl
+Gemeinschaftsgeist
+Gemeinschaftsgeistes
+Gemeinschaftsinteresse
+Gemeinschaftsinteressen
+Gemeinschaftsinteresses
+Gemeinschuldner
+Gemeinschuldnern
+Gemeinschuldners
+Gemeinwesen
+Gemeinwesens
+Gemeinwohl
+Gemeinwohls
+Gemenge
+Gemengen
+Gemetzel
+Gemisch
+Gemische
+Gemischen
+Gemisches
+Gemischs
+Gemunkel
+Gemurmel
+Gemurmels
+Gemächer
+Gemächern
+Gemächlichkeit
+Gemälde
+Gemälden
+Gemäuer
+Gemäuern
+Gemäuers
+Gemüse
+Gemüses
+Gemüt
+Gemüter
+Gemütern
+Gemütes
+Gemütlichkeit
+Gemüts
+Gemütsart
+Gemütsarten
+Gemütsbewegung
+Gemütsbewegungen
+Gemütslage
+Gemütslagen
+Gemütsleben
+Gemütslebens
+Gemütsmensch
+Gemütsmenschen
+Gemütsstörung
+Gemütsstörungen
+Gemütsverfassung
+Gemütszustand
+Gemütszustandes
+Gemütszustands
+Gemütszustände
+Gemütszuständen
+Gen
+Genauigkeit
+Genauigkeiten
+Gendarm
+Gendarmen
+Gendarmerie
+Gene
+Genehmigung
+Genehmigungen
+Genehmigungsverfahren
+Genehmigungsverfahrens
+Genen
+General
+Generalisierung
+Generalisierungen
+Generalität
+Generalplanung
+Generalprobe
+Generalproben
+Generals
+Generalstreik
+Generalstreiks
+Generalthema
+Generaluntersuchung
+Generalvollmacht
+Generalvollmachten
+Generalüberholung
+Generation
+Generationen
+Generator
+Generatoren
+Generators
+Generierung
+Generierungsprozess
+Generierungsprozesse
+Generierungsprozessen
+Generierungsprozesses
+Generäle
+Generälen
+Genesung
+Genesungen
+Genf
+Genfer
+Genfern
+Genforschung
+Genialität
+Genialitäten
+Genick
+Genicke
+Genicken
+Genicks
+Genie
+Genieblitz
+Genies
+Genießer
+Genießern
+Genitalien
+Genitiv
+Genitive
+Genitiven
+Genitivs
+Genius
+Genosse
+Genossen
+Genossenschaft
+Genossin
+Genossinnen
+Genre
+Genres
+Gens
+Gentechnik
+Genua
+Genugtuung
+Genugtuungen
+Genuss
+Genusses
+Genügsamkeit
+Genüsse
+Genüssen
+Geograf
+Geografen
+Geografie
+Geograph
+Geographen
+Geographie
+Geologe
+Geologen
+Geologie
+Geometer
+Geometern
+Geometers
+Geometrie
+Geometrien
+Georg
+George
+Georges
+Georgien
+Georgs
+Gepflogenheit
+Gepflogenheiten
+Geplapper
+Geplappers
+Geplauder
+Geplauders
+Geplänkel
+Geplänkels
+Geplätscher
+Geplätschers
+Gepolter
+Gepolters
+Gepräge
+Gepäck
+Gepäcks
+Gerangel
+Geranie
+Geranien
+Gerassel
+Gerassels
+Geratewohl
+Gerberei
+Gerbereien
+Gerd
+Gerda
+Gerdas
+Gerds
+Gerechtigkeit
+Gerede
+Geredes
+Gerhard
+Gerhards
+Geriatrie
+Gericht
+Gerichte
+Gerichten
+Gerichtes
+Gerichts
+Gerichtsstand
+Geriesel
+Gerieseln
+Geringfügigkeit
+Geringschätzung
+Gerippe
+Gerissenheit
+Germ
+Germane
+Germanen
+Germanien
+Germanist
+Germanisten
+Germanistik
+Gernegroß
+Gernegroßen
+Gerontologie
+Gerste
+Gerte
+Gerten
+Geruch
+Geruches
+Geruchlosigkeit
+Geruchssinn
+Geruchssinne
+Geruchssinnen
+Geruchssinns
+Gerundium
+Gerundiums
+Gerät
+Geräte
+Geräten
+Gerätes
+Gerätetreiber
+Gerätetreibern
+Gerätetreibers
+Geräts
+Geräumigkeit
+Geräusch
+Geräusche
+Geräuschen
+Geräusches
+Geröll
+Gerölls
+Gerüche
+Gerüchen
+Gerücht
+Gerüchte
+Gerüchteküche
+Gerüchteküchen
+Gerüchten
+Gerüchtes
+Gerümpel
+Gerümpels
+Gerüst
+Gerüste
+Gerüsten
+Gerüstes
+Gesamtablauf
+Gesamtablaufs
+Gesamtabläufe
+Gesamtabläufen
+Gesamtalter
+Gesamtanforderung
+Gesamtanforderungen
+Gesamtansicht
+Gesamtarbeitszeit
+Gesamtareal
+Gesamtaufkommen
+Gesamtaufkommens
+Gesamtaufwand
+Gesamtausgabe
+Gesamtausgaben
+Gesamtausstoß
+Gesamtausstoßes
+Gesamtausstöße
+Gesamtausstößen
+Gesamtbedarf
+Gesamtbelastung
+Gesamtbelegschaft
+Gesamtbereich
+Gesamtbereiche
+Gesamtbereichen
+Gesamtbereichs
+Gesamtbeschreibung
+Gesamtbestand
+Gesamtbestandes
+Gesamtbetrag
+Gesamtbetrages
+Gesamtbetrags
+Gesamtbeträge
+Gesamtbeträgen
+Gesamtbevölkerung
+Gesamtbewegung
+Gesamtbewertung
+Gesamtbezug
+Gesamtbezuges
+Gesamtbezugs
+Gesamtbezüge
+Gesamtbezügen
+Gesamtbilanz
+Gesamtbild
+Gesamtbilder
+Gesamtbildern
+Gesamtbildes
+Gesamtbilds
+Gesamtdauer
+Gesamtdokumentation
+Gesamteindruck
+Gesamteinkommen
+Gesamteinkommens
+Gesamtenergie
+Gesamtentwicklung
+Gesamtergebnis
+Gesamtergebnisse
+Gesamtergebnissen
+Gesamtergebnisses
+Gesamterscheinung
+Gesamtersparnis
+Gesamtersparnisse
+Gesamtersparnissen
+Gesamtform
+Gesamtforschungsvorhaben
+Gesamtforschungsvorhabens
+Gesamtgewicht
+Gesamtgewichts
+Gesamtgruppe
+Gesamtgruppen
+Gesamtgröße
+Gesamtgrößen
+Gesamthaushalt
+Gesamthaushaltes
+Gesamthaushalts
+Gesamtheit
+Gesamtherstellung
+Gesamthöhe
+Gesamtinstallation
+Gesamtinteresse
+Gesamtinteressen
+Gesamtinteresses
+Gesamtinvestition
+Gesamtinvestitionen
+Gesamtkapazität
+Gesamtkomplex
+Gesamtkomplexe
+Gesamtkomplexen
+Gesamtkomplexes
+Gesamtkonzept
+Gesamtkonzeptes
+Gesamtkosten
+Gesamtkündigung
+Gesamtlaufzeit
+Gesamtleistung
+Gesamtleistungen
+Gesamtleitung
+Gesamtlieferung
+Gesamtlieferzeit
+Gesamtlänge
+Gesamtlängen
+Gesamtlösung
+Gesamtmarkt
+Gesamtmarktes
+Gesamtmenge
+Gesamtmengen
+Gesamtorganisation
+Gesamtpaket
+Gesamtpakete
+Gesamtpaketen
+Gesamtpaketes
+Gesamtpakets
+Gesamtplan
+Gesamtplans
+Gesamtplanung
+Gesamtplatine
+Gesamtpreis
+Gesamtpreise
+Gesamtpreisen
+Gesamtpreises
+Gesamtprodukt
+Gesamtprodukte
+Gesamtprodukten
+Gesamtproduktion
+Gesamtprodukts
+Gesamtprogramm
+Gesamtprogramms
+Gesamtprojekt
+Gesamtprojektes
+Gesamtprojekts
+Gesamtprozess
+Gesamtprozesse
+Gesamtprozessen
+Gesamtprozesses
+Gesamtquote
+Gesamtquoten
+Gesamtrahmen
+Gesamtrahmens
+Gesamtreserve
+Gesamtreserven
+Gesamtresultat
+Gesamtschaden
+Gesamtschadens
+Gesamtschau
+Gesamtschema
+Gesamtschule
+Gesamtschulen
+Gesamtsituation
+Gesamtspezifikation
+Gesamtspezifikationen
+Gesamtstrategie
+Gesamtstrategien
+Gesamtsumme
+Gesamtsummen
+Gesamtsystem
+Gesamtsysteme
+Gesamtsystemen
+Gesamtsystems
+Gesamtthema
+Gesamtumfang
+Gesamtumstände
+Gesamtumständen
+Gesamtverbrauch
+Gesamtverfügbarkeit
+Gesamtverständnis
+Gesamtverständnisse
+Gesamtverständnissen
+Gesamtverständnisses
+Gesamtvolumen
+Gesamtvolumens
+Gesamtvorgang
+Gesamtvorhaben
+Gesamtvorhabens
+Gesamtvorstellung
+Gesamtwert
+Gesamtwerte
+Gesamtwerten
+Gesamtwerts
+Gesamtwiderstand
+Gesamtwiderstands
+Gesamtwiedergabe
+Gesamtwiedergaben
+Gesamtzahl
+Gesamtzeichnung
+Gesamtzeichnungen
+Gesamtzusammenhang
+Gesamtzuwachs
+Gesamtzuwachses
+Gesamtübersicht
+Gesamtübersichten
+Gesandtschaft
+Gesang
+Gesangbuch
+Gesangbuches
+Gesangbuchs
+Gesangbücher
+Gesangbüchern
+Gesanges
+Gesangs
+Geschaftlhuber
+Geschaftlhubern
+Geschaftlhubers
+Geschehens
+Geschehnis
+Geschehnisse
+Geschehnissen
+Geschehnisses
+Gescheitsein
+Geschenk
+Geschenke
+Geschenken
+Geschenkes
+Geschenks
+Geschichtchen
+Geschichtchens
+Geschichte
+Geschichtechen
+Geschichtechens
+Geschichten
+Geschick
+Geschicke
+Geschicken
+Geschickes
+Geschicklichkeit
+Geschicklichkeiten
+Geschicks
+Geschirr
+Geschlecht
+Geschlechter
+Geschlechtern
+Geschlechtes
+Geschlechts
+Geschlossenheit
+Geschmack
+Geschmacklosigkeit
+Geschmacklosigkeiten
+Geschmacks
+Geschmacksrichtung
+Geschmacksrichtungen
+Geschmackssache
+Geschmacksverirrung
+Geschmacksverirrungen
+Geschmeide
+Geschmeiden
+Geschmeidigkeit
+Geschmiere
+Geschmieres
+Geschmunzel
+Geschmunzels
+Geschmäcker
+Geschmäckern
+Geschnatter
+Geschnatters
+Geschnörkel
+Geschnörkels
+Geschoss
+Geschosse
+Geschossen
+Geschosses
+Geschoß
+Geschoße
+Geschoßen
+Geschoßes
+Geschrei
+Geschreibsel
+Geschreibsels
+Geschreis
+Geschwader
+Geschwadern
+Geschwindigkeit
+Geschwindigkeiten
+Geschwister
+Geschwistern
+Geschwätz
+Geschwätzes
+Geschwätzigkeit
+Geschwülste
+Geschwülsten
+Geschwür
+Geschwüre
+Geschwüren
+Geschwürs
+Geschäft
+Geschäfte
+Geschäften
+Geschäftes
+Geschäftigkeit
+Geschäfts
+Geschäftsführer
+Geschäftsführern
+Geschäftsführers
+Geschäftskunde
+Geschäftskunden
+Geschäftszimmer
+Geschäftszimmern
+Geschäftszimmers
+Geschöpf
+Geschöpfe
+Geschöpfen
+Geschöpfs
+Geschütz
+Geschütze
+Geschützen
+Geschützes
+Geselchte
+Geselchten
+Geselchtes
+Geselle
+Gesellen
+Gesellenbrief
+Geselligkeit
+Gesellschaft
+Gesellschaften
+Gesellschafter
+Gesellschafterin
+Gesellschafterinnen
+Gesellschaftern
+Gesellschafters
+Gesellschaftsform
+Gesellschaftsformen
+Gesellschaftsleben
+Gesellschaftslebens
+Gesellschaftslehre
+Gesellschaftslehren
+Gesellschaftsordnung
+Gesellschaftsspiel
+Gesellschaftsspiele
+Gesellschaftsspielen
+Gesellschaftsspiels
+Gesellschaftsstruktur
+Gesellschaftsstrukturen
+Gesellschaftssystem
+Gesellschaftssysteme
+Gesellschaftssystemen
+Gesellschaftssystems
+Gesetz
+Gesetze
+Gesetzen
+Gesetzes
+Gesetzlichkeit
+Gesetzlosigkeit
+Gesetzmäßigkeit
+Gesetzmäßigkeiten
+Gesetzwidrigkeit
+Gesetzwidrigkeiten
+Gesicht
+Gesichter
+Gesichtern
+Gesichtes
+Gesichts
+Gesichtsausdruck
+Gesichtsausdrücke
+Gesichtsausdrücken
+Gesichtsfarbe
+Gesichtsfarben
+Gesichtsfeld
+Gesichtskreis
+Gesichtskreise
+Gesichtskreisen
+Gesichtskreises
+Gesichtslosigkeit
+Gesichtspunkt
+Gesichtspunkte
+Gesichtspunkten
+Gesichtspunktes
+Gesichtspunkts
+Gesichtswahrung
+Gesichtszug
+Gesichtszuges
+Gesichtszugs
+Gesichtszüge
+Gesichtszügen
+Gesimse
+Gesimsen
+Gesinde
+Gesindel
+Gesindels
+Gesinnung
+Gesinnungen
+Gesinnungsethik
+Gesinnungsgenosse
+Gesinnungsgenossen
+Gesinnungspflege
+Gesinnungswechsel
+Gesinnungswechseln
+Gesinnungswechsels
+Gesittung
+Gesittungen
+Gespann
+Gespanns
+Gespenst
+Gespenster
+Gespenstern
+Gespenstes
+Gespielin
+Gespinst
+Gespinste
+Gespinsten
+Gespinstes
+Gespinsts
+Gespritzte
+Gespritztes
+Gespräch
+Gespräche
+Gesprächen
+Gespräches
+Gesprächigkeit
+Gesprächs
+Gesprächsaufzeichnung
+Gesprächsaufzeichnungen
+Gesprächsbereitschaft
+Gesprächsdauer
+Gesprächsführung
+Gesprächsgegenstand
+Gesprächsklima
+Gesprächslage
+Gesprächslagen
+Gesprächsleiter
+Gesprächsmöglichkeit
+Gesprächsmöglichkeiten
+Gesprächsnotiz
+Gesprächspartner
+Gesprächspartnerin
+Gesprächspartnerinnen
+Gesprächspartnern
+Gesprächspartners
+Gesprächsprotokoll
+Gesprächsstoff
+Gesprächsstoffe
+Gesprächsstoffen
+Gesprächsstoffes
+Gesprächsteilnehmer
+Gesprächsteilnehmern
+Gesprächsteilnehmers
+Gesprächstermin
+Gesprächsthema
+Gesprächsthemen
+Gesprächsweg
+Gespür
+Gespürs
+Gestade
+Gestaden
+Gestalt
+Gestalten
+Gestaltung
+Gestaltungen
+Gestaltungsmöglichkeit
+Gestaltungsmöglichkeiten
+Gestammel
+Gestammels
+Gestank
+Gestankes
+Gestanks
+Geste
+Gestein
+Gesteine
+Gesteinen
+Gesteins
+Gestell
+Gestelle
+Gestellen
+Gestells
+Gesten
+Gestik
+Gestiken
+Gestirn
+Gestirne
+Gestirnen
+Gestirns
+Gesträuch
+Gestrüpp
+Geständnis
+Geständnisse
+Geständnissen
+Geständnisses
+Gestänge
+Gestängen
+Gestöber
+Gestöbern
+Gesuch
+Gesuche
+Gesuchen
+Gesuches
+Gesuchs
+Gesundheit
+Gesundheitsschäden
+Gesundheitswesen
+Gesundheitswesens
+Gesänge
+Gesängen
+Gesäß
+Gesäße
+Gesäßen
+Gesäßes
+Gesöff
+Gesöffe
+Gesöffen
+Gesöffs
+Getratsche
+Getreide
+Getreides
+Getrenntheit
+Getriebe
+Getriebes
+Getrippel
+Getränk
+Getränke
+Getränken
+Getränkes
+Getränks
+Getto
+Gettos
+Getue
+Getues
+Getöse
+Getöses
+Getümmel
+Getümmels
+Gewackel
+Gewackels
+Gewahrsam
+Gewahrsams
+Gewalt
+Gewaltakt
+Gewaltakte
+Gewaltakten
+Gewaltaktes
+Gewaltakts
+Gewaltanwendung
+Gewaltausbrüche
+Gewaltausbrüchen
+Gewaltausübung
+Gewalten
+Gewaltenteilung
+Gewaltherrschaft
+Gewaltherrschaften
+Gewaltkampagne
+Gewaltkampagnen
+Gewaltlosigkeit
+Gewaltschuss
+Gewaltschusses
+Gewaltschüsse
+Gewaltschüssen
+Gewalttäter
+Gewalttätern
+Gewalttäters
+Gewalttätigkeit
+Gewalttätigkeiten
+Gewaltverhältnis
+Gewaltverhältnisse
+Gewaltverhältnissen
+Gewaltverhältnisses
+Gewand
+Gewandes
+Gewandtheit
+Gewebe
+Geweben
+Gewebes
+Gewehr
+Gewehre
+Gewehren
+Gewehrs
+Geweih
+Geweihe
+Geweihen
+Geweihs
+Gewerbe
+Gewerbes
+Gewerkschaft
+Gewerkschaften
+Gewerkschaftler
+Gewerkschaftlerin
+Gewerkschaftlerinnen
+Gewerkschaftlern
+Gewerkschaftlers
+Gewicht
+Gewichtes
+Gewichtigkeit
+Gewichtung
+Gewimmel
+Gewimmels
+Gewinde
+Gewinden
+Gewindes
+Gewinn
+Gewinne
+Gewinnen
+Gewinnens
+Gewinner
+Gewinnerin
+Gewinnerinnen
+Gewinnern
+Gewinners
+Gewinnes
+Gewinns
+Gewinnsucht
+Gewinnung
+Gewinnungsprozess
+Gewinnungsprozesse
+Gewinnungsprozessen
+Gewinnungsprozesses
+Gewirr
+Gewissen
+Gewissenlosigkeit
+Gewissens
+Gewissensbiss
+Gewissensbisse
+Gewissensbissen
+Gewissensbisses
+Gewissensdruck
+Gewissensfrage
+Gewissensfragen
+Gewissensfreiheit
+Gewissensfreiheiten
+Gewissenskonflikt
+Gewissenskonflikte
+Gewissenskonflikten
+Gewissenskonfliktes
+Gewissensnot
+Gewissenszwang
+Gewissenszwangs
+Gewissenszweifel
+Gewissenszweifeln
+Gewissenszweifels
+Gewissenszwänge
+Gewissenszwängen
+Gewissheit
+Gewitter
+Gewittern
+Gewitters
+Gewohnheit
+Gewohnheiten
+Gewohnheitsmensch
+Gewohnheitsmenschen
+Gewohnheitsrecht
+Gewohnheitsrechte
+Gewohnheitsrechten
+Gewohnheitsrechtes
+Gewächsanlage
+Gewächsanlagen
+Gewächse
+Gewächsen
+Gewächshaus
+Gewächshauses
+Gewächshäuser
+Gewächshäusern
+Gewähr
+Gewährleistung
+Gewährleistungen
+Gewährträgerhaftung
+Gewährung
+Gewänder
+Gewässer
+Gewässern
+Gewässerschutz
+Gewöhnung
+Gewöhnungen
+Gewölbe
+Gewölben
+Gewölbes
+Gewölke
+Gewühl
+Gewürz
+Gewürze
+Gewürzen
+Gewürzes
+Gezappel
+Gezeiten
+Gezeter
+Gezwungenheit
+Geäst
+Geäste
+Geästen
+Geästes
+Ghetto
+Ghostwriter
+Ghostwritern
+Ghostwriters
+Gibraltar
+Gicht
+Giebel
+Giebeln
+Giebels
+Giebelwand
+Gier
+Gierwinkel
+Gießer
+Gießerei
+Gießereien
+Gift
+Giftes
+Gifts
+Gigabyte
+Gigant
+Giganten
+Gigolo
+Gilde
+Gilden
+Gina
+Ginas
+Ginkgo
+Ginkgos
+Ginko
+Gipfel
+Gipfeln
+Gipfels
+Gips
+Gipser
+Giraffe
+Giraffen
+Girlande
+Girlanden
+Giro
+Girokonten
+Girokonto
+Girokontos
+Gironde
+Giros
+Gitarre
+Gitarren
+Gitarrist
+Gitarristen
+Gitter
+Gitterkonstante
+Gitterkonstanten
+Gittern
+Gitters
+Gitterstruktur
+Gizeh
+Glaceehandschuh
+Glaceehandschuhe
+Glaceehandschuhes
+Glaceehandschuhs
+Glanz
+Glanzes
+Glanzleistung
+Glanzleistungen
+Glanzlichter
+Glanzzeit
+Glas
+Glases
+Glasgow
+Glasnost
+Glasur
+Glasuren
+Glatteis
+Glatteises
+Glatze
+Glatzen
+Glaubens
+Glaubhaftigkeit
+Glaubwürdigkeit
+Gleichartigkeit
+Gleichgewicht
+Gleichgewichte
+Gleichgewichten
+Gleichgewichts
+Gleichheit
+Gleichheitsprädikat
+Gleichheitszeichen
+Gleichklang
+Gleichlauf
+Gleichlaufs
+Gleichlaut
+Gleichlaute
+Gleichlauten
+Gleichlautes
+Gleichläufe
+Gleichläufen
+Gleichmacherei
+Gleichmachung
+Gleichmaß
+Gleichmaße
+Gleichmaßes
+Gleichmut
+Gleichmäßigkeit
+Gleichnis
+Gleichnisse
+Gleichnissen
+Gleichnisses
+Gleichrichter
+Gleichrichtung
+Gleichschaltung
+Gleichschritt
+Gleichsetzung
+Gleichspannung
+Gleichspannungen
+Gleichspannungsanteil
+Gleichspannungsquelle
+Gleichspannungsquellen
+Gleichstand
+Gleichstellung
+Gleichstellungen
+Gleichtakt
+Gleichung
+Gleichungen
+Gleichungssystem
+Gleichungssysteme
+Gleichungssystemen
+Gleichungssystems
+Gleichverteilung
+Gleichwertigkeit
+Gleichwertigkeiten
+Gleichzeitigkeit
+Gleis
+Gleise
+Gleisen
+Gleises
+Gleitkommazahl
+Gleitkommazahlen
+Gletscher
+Gletschern
+Gletschers
+Glied
+Glieder
+Gliedern
+Gliederung
+Gliederungen
+Gliederungspunkt
+Gliederungspunkte
+Gliederungspunkten
+Gliederungspunktes
+Gliederungspunkts
+Gliedes
+Gliedmaßen
+Glieds
+Globalisierung
+Globetrotter
+Globetrottern
+Globetrotters
+Globus
+Glocke
+Glocken
+Gloria
+Glorias
+Glorienschein
+Glossar
+Glossars
+Glosse
+Glossen
+Glotzkiste
+Gluthitze
+Glykol
+Glyzerin
+Gläser
+Glättung
+Gläubiger
+Gläubigerbank
+Gläubigerbanken
+Gläubigerin
+Gläubigerinnen
+Gläubigern
+Gläubigers
+Gläubigkeit
+Glöckner
+Glück
+Glückauf
+Glückes
+Glücks
+Glücksache
+Glücksachen
+Glückseligkeit
+Glücksfall
+Glücksfalls
+Glücksfälle
+Glücksfällen
+Glücksgefühl
+Glückskind
+Glückskinder
+Glückskindern
+Glückskindes
+Glückspilz
+Glückspilze
+Glückspilzen
+Glückspilzes
+Glücksritter
+Glücksrittern
+Glücksritters
+Glücksspiel
+Glücksspiele
+Glücksspielen
+Glücksspiels
+Glückwunsch
+Glückwunsches
+Glückwünsche
+Glückwünschen
+Glühbirne
+Glühbirnen
+Glühlampe
+Glühlampen
+GmbH
+Gnade
+Gnaden
+Gnadenakt
+Gnadenbrot
+Gnadenfrist
+Gnadenfristen
+Gnadengesuch
+Gnadengesuche
+Gnadengesuchen
+Gnadengesuchs
+Gnom
+Gnomen
+Gnosis
+Gnu
+Gnus
+Gockel
+Godesberg
+Godesberger
+Godesbergern
+Goethe
+Goethes
+Gold
+Golda
+Goldas
+Goldes
+Goldgrube
+Goldgruben
+Golds
+Golf
+Golfer
+Golfern
+Golfes
+Golfs
+Golfstaaten
+Golfstrom
+Gomorrha
+Gomulka
+Gomulkas
+Gondel
+Gondeln
+Gondwanaland
+Gong
+Gongs
+Gorgonzola
+Gorilla
+Gorki
+Goslar
+Gosse
+Gossen
+Gott
+Gottes
+Gotthard
+Gotthards
+Gottheit
+Gottheiten
+Gotthelf
+Gotthelfs
+Gottlosigkeit
+Gottvertrauen
+Gouda
+Gouvernante
+Gouvernanten
+Gouverneur
+Gouverneure
+Gouverneuren
+Gouverneurs
+Goya
+Goyas
+Grab
+Grabens
+Grabesstille
+Grabung
+Grabungen
+Grace
+Graces
+Gracia
+Gracias
+Grad
+Grade
+Graden
+Grades
+Gradient
+Gradienten
+Gradmesser
+Grads
+Graf
+Grafen
+Grafik
+Grafikbefehl
+Grafikbefehle
+Grafikbefehlen
+Grafikbefehls
+Grafikbildschirm
+Grafikcomputer
+Grafiken
+Grafiker
+Grafikerin
+Grafikerinnen
+Grafikern
+Grafikers
+Grafikinterface
+Grafikinterfaces
+Grafikkarte
+Grafikkarten
+Grafikoberfläche
+Grafikoberflächen
+Grafikprogramm
+Grafikprogramme
+Grafikprogrammen
+Grafikprogramms
+Grafiksoftware
+Grafiksystem
+Grafit
+Grafits
+Grafologe
+Grafologen
+Grafologin
+Grafologinnen
+Grafschaft
+Grafschaften
+Gramm
+Grammatik
+Grammatiken
+Grammophon
+Grammophone
+Grammophonen
+Grammophons
+Gramms
+Granat
+Granate
+Granaten
+Granates
+Granats
+Granit
+Granits
+Granulat
+Graph
+Graphen
+Graphensprache
+Graphensprachen
+Graphentheorie
+Graphersetzungssystem
+Graphersetzungssysteme
+Graphersetzungssystemen
+Graphersetzungssystems
+Graphik
+Graphikanzeige
+Graphikbildschirm
+Graphikdarstellung
+Graphikdisplay
+Graphikdisplays
+Graphiken
+Graphiker
+Graphikerin
+Graphikerinnen
+Graphikern
+Graphikers
+Graphikfeld
+Graphikinterface
+Graphikinterfaces
+Graphikkoordinaten
+Graphikprozessor
+Graphikprozessoren
+Graphikprozessors
+Graphiktablett
+Graphikterminal
+Graphikterminals
+Graphikzeile
+Graphit
+Graphologe
+Graphologen
+Graphologin
+Graphologinnen
+Gras
+Grases
+Grat
+Grate
+Graten
+Gratifikation
+Gratifikationen
+Gratisexemplar
+Gratisexemplare
+Gratisexemplaren
+Gratisexemplars
+Gratislieferung
+Gratismuster
+Gratismustern
+Gratisprospekt
+Gratisprospekte
+Gratisprospekten
+Gratisprospektes
+Gratisprospekts
+Grats
+Gratulant
+Gratulation
+Gratulationen
+Graupe
+Graupen
+Grausamkeit
+Grausamkeiten
+Grautöne
+Grautönen
+Grauzone
+Grauzonen
+Gravierung
+Gravierungen
+Gravitation
+Gravitationsgesetz
+Gravitationsgesetzes
+Gravur
+Grazie
+Greenhorn
+Greenhorns
+Greenwich
+Greifer
+Greifhand
+Greis
+Greise
+Greisen
+Greisenalter
+Greises
+Greisin
+Greisinnen
+Greissler
+Gremium
+Gremiums
+Grenada
+Grenoble
+Grenzabstand
+Grenzbereich
+Grenzbereiche
+Grenzbereichen
+Grenzbereichs
+Grenzer
+Grenzfall
+Grenzfalls
+Grenzfläche
+Grenzflächen
+Grenzfälle
+Grenzfällen
+Grenzlinie
+Grenzlinien
+Grenzparameter
+Grenzschicht
+Grenzschichten
+Grenzstadium
+Grenzwert
+Grenzwerte
+Grenzwerten
+Grenzwertes
+Gretchen
+Gretchenfrage
+Gretchenfragen
+Gretchens
+Grete
+Gretes
+Grieche
+Griechen
+Griechenland
+Griechenlands
+Griechin
+Griechinnen
+Griesgram
+Griesgrams
+Grieß
+Grieße
+Grießen
+Grießes
+Griff
+Griffbrett
+Griffbretter
+Griffbrettern
+Griffbretts
+Griffe
+Griffel
+Griffeln
+Griffels
+Griffen
+Griffs
+Grimasse
+Grimassen
+Grimmschen
+Grippe
+Grips
+Grislibär
+Grislibären
+Grizzlybär
+Grizzlybären
+Grobdifferenzierung
+Grobeinstellung
+Grobeinstellungen
+Grobheit
+Grobheiten
+Grobian
+Grobiane
+Grobianen
+Grobians
+Grobkonzept
+Grobschlächtigkeit
+Grobstruktur
+Grog
+Grogs
+Groll
+Grolls
+Gromyko
+Gromykos
+Groschen
+Groschens
+Grossist
+Grossisten
+Grotte
+Grotten
+Großaufgebot
+Großaufgebote
+Großaufgeboten
+Großaufgebots
+Großaufnahme
+Großaufnahmen
+Großauftrag
+Großauftrages
+Großauftrags
+Großaufträge
+Großaufträgen
+Großbetrieb
+Großbetriebe
+Großbetrieben
+Großbetriebs
+Großbritannien
+Großbritanniens
+Großbuchstabe
+Großbuchstaben
+Großbuchstabens
+Großeltern
+Großenkel
+Großenkelin
+Großenkelinnen
+Großenkeln
+Großenkels
+Großfahndung
+Großformat
+Großformate
+Großformaten
+Großformats
+Großforschungseinrichtung
+Großforschungseinrichtungen
+Großherzigkeit
+Großmut
+Großmutter
+Großmutters
+Großmütter
+Großmüttern
+Großrechenanlage
+Großrechenanlagen
+Großrechner
+Großrechnern
+Großreinemachen
+Großreinemachens
+Großschreibung
+Großschrift
+Großserie
+Großserien
+Großteil
+Großteils
+Großunternehmen
+Großunternehmer
+Großunternehmern
+Großunternehmers
+Großunternehmung
+Großunternehmungen
+Großvater
+Großvaters
+Großveranstaltung
+Großveranstaltungen
+Großverdiener
+Großverdienern
+Großverdieners
+Großväter
+Großvätern
+Grube
+Gruben
+Gruft
+Grund
+Grundannahme
+Grundannahmen
+Grundarrangement
+Grundaufqqfassung
+Grundaufqqfassungen
+Grundausbildung
+Grundausbildungen
+Grundausrüstung
+Grundaussage
+Grundaussagen
+Grundausstattung
+Grundbedingung
+Grundbedürfnis
+Grundbedürfnisse
+Grundbedürfnissen
+Grundbedürfnisses
+Grundbegriff
+Grundbegriffe
+Grundbegriffen
+Grundbegriffs
+Grundbeschaffung
+Grundbesitz
+Grundbesitzer
+Grundbesitzern
+Grundbesitzers
+Grundbesitzes
+Grunddilemma
+Grunde
+Grundeigentum
+Grundeigentums
+Grundeigentümer
+Grundeigentümern
+Grundeinheit
+Grundeinheiten
+Grundeinstellung
+Grundeinstellungen
+Grundelement
+Grundelemente
+Grundelementen
+Grundelements
+Grundempfehlung
+Grundentscheidung
+Grundentscheidungen
+Grunderfahrung
+Grundes
+Grundfeste
+Grundfesten
+Grundfigur
+Grundfläche
+Grundflächen
+Grundform
+Grundformel
+Grundformeln
+Grundformen
+Grundfrage
+Grundfragen
+Grundfreiheit
+Grundfreiheiten
+Grundfunktion
+Grundfunktionen
+Grundförderung
+Grundgebühr
+Grundgebühren
+Grundgedanke
+Grundgedanken
+Grundgehalt
+Grundgerät
+Grundgerätes
+Grundgesetz
+Grundgesetze
+Grundgesetzen
+Grundgesetzes
+Grundhaltung
+Grundharmonie
+Grundidee
+Grundideen
+Grundierung
+Grundkenntnis
+Grundkenntnisse
+Grundkenntnissen
+Grundkonzept
+Grundkurs
+Grundkurse
+Grundkursen
+Grundkurses
+Grundlage
+Grundlagen
+Grundlagenforschung
+Grundlagenforschungen
+Grundlosigkeit
+Grundmaterial
+Grundmauer
+Grundmauern
+Grundoperation
+Grundoperationen
+Grundpaket
+Grundpfeiler
+Grundpfeilern
+Grundpfeilers
+Grundplatine
+Grundprinzip
+Grundprinzipien
+Grundrecht
+Grundrechte
+Grundrechten
+Grundrechtes
+Grundrechts
+Grundregel
+Grundregeln
+Grundriss
+Grundrisse
+Grundrissen
+Grundrisses
+Grundsatz
+Grundsatzentscheidung
+Grundsatzentscheidungen
+Grundsatzerklärung
+Grundsatzes
+Grundsatzfrage
+Grundsatzfragen
+Grundschule
+Grundschulen
+Grundsoftware
+Grundstruktur
+Grundstrukturen
+Grundstudium
+Grundstudiums
+Grundstück
+Grundstücke
+Grundstücken
+Grundstückes
+Grundstücks
+Grundsymbol
+Grundsymbole
+Grundsymbolen
+Grundsymbols
+Grundsätze
+Grundsätzen
+Grundsätzlichkeit
+Grundterm
+Grundterme
+Grundtermen
+Grundterms
+Grundvoraussetzung
+Grundwissen
+Grundwissens
+Grundzug
+Grundzuges
+Grundzugs
+Grundzustand
+Grundzustandes
+Grundzustands
+Grundzüge
+Grundzügen
+Grundübel
+Grundüberlegung
+Grundüberlegungen
+Grundüberzeugung
+Grundüberzeugungen
+Grunge
+Gruppe
+Gruppen
+Gruppensex
+Gruppierung
+Gruppierungen
+Gruß
+Grußadresse
+Grußadressen
+Grußbotschaft
+Grußbotschaften
+Grußes
+Grußform
+Grußschreiben
+Grußwort
+Grußworte
+Grußworten
+Grußwortes
+Grußworts
+Gräben
+Gräber
+Gräbern
+Gräfin
+Gräser
+Gräsern
+Gräte
+Gräten
+Gräuel
+Grönland
+Grönlands
+Grönländer
+Grönländerin
+Grönländerinnen
+Grönländern
+Größe
+Größen
+Größenangabe
+Größenangaben
+Größenklasse
+Größenklassen
+Größenmaßstäbe
+Größenmaßstäben
+Größenordnung
+Größenordnungen
+Größenwahn
+Größenwahns
+Grübelei
+Grübeleien
+Grünanlage
+Grünanlagen
+Gründer
+Gründerfamilie
+Gründerfamilien
+Gründerin
+Gründerinnen
+Gründern
+Gründers
+Gründerzeit
+Gründlichkeit
+Gründung
+Gründungen
+Gründungsurkunde
+Gründungsurkunden
+Grünfläche
+Grünflächen
+Grünfutter
+Grünfutters
+Grünkohl
+Grünschnabel
+Grünschnabels
+Grünschnäbel
+Grünschnäbeln
+Grünspan
+Grünspans
+Grünzeug
+Grünzweig
+Grüße
+Grüßen
+Gschaftlhuber
+Gschaftlhubern
+Gschaftlhubers
+Gschnasfest
+Gschnast
+Gst
+Gstanzel
+Gstanzeln
+Gstanzels
+Guayana
+Guerillero
+Guerilleros
+Guido
+Guidos
+Guillaume
+Guillaumes
+Guillotine
+Guillotinen
+Guinness
+Gulasch
+Gulaschs
+Gulden
+Gummi
+Gummiparagraf
+Gummiparagrafen
+Gummiparagraph
+Gummiparagraphen
+Gummis
+Gunst
+Gunsten
+Gunther
+Gunthers
+Gurgel
+Gurke
+Gurken
+Gurt
+Gurten
+Guru
+Gurus
+Guss
+Gusses
+Gusto
+Gut
+Gutachten
+Gutachtens
+Gutachter
+Gutachterkommission
+Gutachterkommissionen
+Gutachtern
+Gutachters
+Gutartigkeit
+Gutdünken
+Gutenberg
+Gutenbergs
+Gutes
+Guthaben
+Guthabens
+Guts
+Gutschein
+Gutscheine
+Gutscheinen
+Gutscheins
+Gutschrift
+Gutwilligkeit
+Gymnasiast
+Gymnasien
+Gymnasium
+Gymnasiums
+Gymnastik
+Gynäkologe
+Gynäkologen
+Gynäkologie
+Gähnens
+Gämse
+Gämsen
+Gänge
+Gängelband
+Gängen
+Gänschen
+Gänschens
+Gänse
+Gänsemarsch
+Gänsemarsches
+Gänsemarschs
+Gänsemärsche
+Gänsemärschen
+Gänsen
+Gänserich
+Gänserichs
+Gänze
+Gärens
+Gärtchen
+Gärtchens
+Gärtner
+Gärtnerei
+Gärtnereien
+Gärtnerin
+Gärtnerinnen
+Gärtnern
+Gärtners
+Gärung
+Gärungen
+Gäste
+Gästen
+Gäule
+Gäulen
+Gödel
+Gödelisierung
+Gödels
+Gönner
+Gönnerin
+Gönnerinnen
+Gönnern
+Gönners
+Gönnerschaft
+Gönnerschaften
+Gönnertum
+Göre
+Gören
+Göring
+Görings
+Göteborg
+Götter
+Göttern
+Göttin
+Göttingen
+Göttinnen
+Götze
+Götzen
+Gültigkeit
+Gültigkeitsbegriff
+Gültigkeitsbegriffe
+Gültigkeitsbegriffen
+Gültigkeitsbegriffs
+Gültigkeitsbereich
+Gültigkeitsbereiche
+Gültigkeitsbereichen
+Gültigkeitsbereiches
+Gültigkeitsbereichs
+Gültigkeitsdauer
+Gültigkeitsdauern
+Günter
+Günters
+Günther
+Günthers
+Gürtel
+Gürtellinie
+Gürtellinien
+Gürteln
+Gürtels
+Güsse
+Güssen
+Güte
+Güteklasse
+Güteklassen
+Gütemerkmal
+Güter
+Gütern
+Gütevorschrift
+Gütevorschriften
+Gütezeichen
+Gütezeichens
+HP
+HTML
+HTTP
+Haag
+Haar
+Haare
+Haaren
+Haares
+Haaresbreite
+Haars
+Haarspray
+Haarsprays
+Hab
+Habakuk
+Habakuks
+Habenichts
+Haberer
+Haberern
+Haberers
+Habgier
+Habicht
+Habichte
+Habichten
+Habichts
+Habilitation
+Habitus
+Habsburg
+Habsburgs
+Habseligkeit
+Habseligkeiten
+Habsucht
+Hachse
+Hachsen
+Hacker
+Hackern
+Hackerversuche
+Hades
+Hafen
+Hafens
+Hafer
+Hafers
+Haft
+Haftpflicht
+Haftung
+Haftungen
+Hagebutte
+Hagebutten
+Hagel
+Hagels
+Hagen
+Hahn
+Hahns
+Hai
+Haie
+Haien
+Haies
+Haifa
+Haifische
+Haifischen
+Hain
+Haine
+Hainen
+Haines
+Hains
+Hais
+Haken
+Hakenkreuz
+Hakenkreuzen
+Hakens
+Halbbruder
+Halbbruders
+Halbbrüder
+Halbbrüdern
+Halbdot
+Halbdots
+Halbdottechnik
+Halbgruppe
+Halbgruppen
+Halbheit
+Halbierung
+Halbinsel
+Halbjahr
+Halbjahres
+Halbjahresbericht
+Halbjahresberichte
+Halbjahresberichten
+Halbjahresberichts
+Halbjahresergebnis
+Halbjahresergebnisse
+Halbjahresergebnissen
+Halbjahresergebnisses
+Halbjahrs
+Halbkreis
+Halbkreise
+Halbkreisen
+Halbkreises
+Halbkugel
+Halbkugeln
+Halbleiter
+Halbleitern
+Halbleiters
+Halbmond
+Halbmonde
+Halbmonden
+Halbmondes
+Halbmonds
+Halbpension
+Halbschlaf
+Halbschuh
+Halbwertszeit
+Halde
+Halden
+Halfter
+Halfters
+Hall
+Halle
+Hallen
+Halley
+Halleys
+Hallig
+Halligen
+Halls
+Halluzinogen
+Halluzinogene
+Halluzinogenen
+Halluzinogens
+Halm
+Halme
+Halmen
+Halms
+Halogen
+Halogene
+Halogenen
+Halogens
+Hals
+Halsabschneider
+Halsabschneidern
+Halsabschneiders
+Halses
+Halt
+Haltbarkeit
+Halteplatz
+Halteplatzes
+Halteplätze
+Halteplätzen
+Halteproblem
+Halteproblems
+Haltepunkt
+Halter
+Haltern
+Halters
+Halterung
+Haltevermögen
+Haltevermögens
+Haltlosigkeit
+Haltung
+Haltungen
+Halunke
+Halunken
+Hamburg
+Hamburger
+Hamburgerin
+Hamburgerinnen
+Hamburgern
+Hamburgers
+Hamed
+Hameds
+Hamlet
+Hamlets
+Hammel
+Hammeln
+Hammer
+Hammers
+Hampelmann
+Hampelmanns
+Hampelmänner
+Hampelmännern
+Hampshire
+Hampton
+Hamster
+Hamsterkäufe
+Hamsterkäufen
+Hamstern
+Hamsters
+Hand
+Handarbeit
+Handarbeiten
+Handarbeiter
+Handarbeiterin
+Handarbeiterinnen
+Handarbeitern
+Handarbeiters
+Handbetrieb
+Handbewegung
+Handbewegungen
+Handbuch
+Handbuches
+Handbuchs
+Handbücher
+Handbüchern
+Handel
+Handelns
+Handels
+Handfertigkeit
+Handfertigkeiten
+Handfläche
+Handflächen
+Handgelenk
+Handgelenke
+Handgelenken
+Handgelenks
+Handgemenge
+Handgepäck
+Handgepäcks
+Handgerät
+Handgreifqqlichkeit
+Handgreifqqlichkeiten
+Handgriff
+Handgriffe
+Handgriffen
+Handgriffs
+Handhabbarkeit
+Handhabung
+Handhabungen
+Handicap
+Handicaps
+Handikap
+Handlanger
+Handlangern
+Handlung
+Handlungen
+Handlungsanweisung
+Handlungsanweisungen
+Handlungsdauer
+Handlungsfreiheit
+Handlungsfähigkeit
+Handlungskonzept
+Handlungsunfähigkeit
+Handlungsvollmacht
+Handlungsvollmachten
+Handlungsweise
+Handlungsweisen
+Handschlag
+Handschlages
+Handschlags
+Handschläge
+Handschlägen
+Handschrift
+Handschriften
+Handschuh
+Handschuhe
+Handschuhen
+Handschuhs
+Handshake
+Handstreich
+Handtasche
+Handtaschen
+Handtuch
+Handtuches
+Handtücher
+Handtüchern
+Handwerk
+Handwerke
+Handwerken
+Handwerker
+Handwerkerin
+Handwerkerinnen
+Handwerkern
+Handwerkers
+Handwerks
+Handy
+Handys
+Handzeichen
+Handzeichens
+Handzeichnung
+Handzettel
+Handzetteln
+Handzettels
+Hang
+Hangar
+Hanges
+Hangs
+Haniel
+Haniels
+Hanne
+Hannelore
+Hannelores
+Hannes
+Hannover
+Hannoveraner
+Hannovermesse
+Hannovers
+Hanoi
+Hans
+Hansdampf
+Hanse
+Hanseat
+Hanseaten
+Hansestadt
+Hansestädte
+Hansestädten
+Hanswurst
+Hanswurste
+Hantel
+Hanteln
+Happyend
+Happyends
+Harakiri
+Harald
+Haralds
+Harburger
+Hardcopy
+Hardcover
+Hardcovers
+Harddisk
+Harddiskbetrieb
+Harddisks
+Hardware
+Hardwaredefekt
+Hardwaredefekte
+Hardwaredefekts
+Hardwareeinheit
+Hardwareeinheiten
+Hardwareerweiterung
+Hardwareerweiterungen
+Hardwarefrage
+Hardwarefragen
+Hardwarehandshake
+Hardwarehandshakes
+Hardwarekomponente
+Hardwarekomponenten
+Hardwarekonfiguration
+Hardwarekonfigurationen
+Hardwaremodifikation
+Hardwaremodifikationen
+Hardwarepflege
+Hardwarepreis
+Hardwarepreise
+Hardwareproblem
+Hardwareprobleme
+Hardwareproblemen
+Hardwareproblems
+Hardwareprotokoll
+Hardwareprotokolle
+Hardwareprotokolls
+Hardwareschnittstelle
+Hardwareschnittstellen
+Hardwareseite
+Hardwaretest
+Hardwaretests
+Hardwareversion
+Hardwareversionen
+Hardwarevoraussetzung
+Hardwarevoraussetzungen
+Hardwareänderung
+Hardwareänderungen
+Hardwareübersicht
+Hardwareübersichten
+Harem
+Harems
+Harfe
+Harfen
+Harlekin
+Harlem
+Harmlosigkeit
+Harmonie
+Harmonisierung
+Harmonium
+Harn
+Harns
+Harold
+Harolds
+Harpune
+Harpunen
+Harpunier
+Harpuniers
+Harro
+Harros
+Hartgeld
+Hartgelder
+Hartgeldern
+Hartgeldes
+Hartgelds
+Hartnäckigkeit
+Hartwährung
+Hartwährungen
+Harvard
+Harvey
+Harveys
+Harz
+Harze
+Harzen
+Harzes
+Hasardeur
+Hasardeure
+Hasardeurs
+Haschisch
+Haschischs
+Hase
+Hasen
+Haskell
+Hass
+Hasses
+Hassgefühl
+Hassgefühle
+Hassgefühlen
+Hassgefühls
+Hasskomplex
+Hasskomplexe
+Hasskomplexen
+Hasskomplexes
+Hastings
+Haube
+Hauben
+Hauch
+Hauer
+Hauern
+Haufen
+Haufenbildung
+Haufens
+Hauff
+Hauffs
+Haupt
+Hauptaktivität
+Hauptaktivitäten
+Hauptakzent
+Hauptakzente
+Hauptakzenten
+Hauptakzentes
+Hauptakzents
+Hauptanliegen
+Hauptanliegens
+Hauptanteil
+Hauptanteile
+Hauptanteilen
+Hauptanteils
+Hauptanwendungsgebiet
+Hauptanwendungsgebiete
+Hauptanwendungsgebieten
+Hauptanwendungsgebiets
+Hauptarbeit
+Hauptarbeiten
+Hauptarbeitsbereich
+Hauptarbeitsbereiche
+Hauptarbeitsbereichen
+Hauptarbeitsbereichs
+Hauptargument
+Hauptaufgabe
+Hauptaufgaben
+Hauptaugenmerk
+Hauptbedingung
+Hauptbedingungen
+Hauptbeschäftigung
+Hauptbeschäftigungen
+Hauptereignis
+Hauptereignisse
+Hauptereignissen
+Hauptereignisses
+Hauptes
+Haupteslänge
+Haupteslängen
+Hauptfach
+Hauptfaches
+Hauptfachs
+Hauptfehler
+Hauptfeld
+Hauptforderung
+Hauptfrage
+Hauptfragen
+Hauptfunktion
+Hauptfunktionen
+Hauptfächer
+Hauptfächern
+Hauptgericht
+Hauptgerichte
+Hauptgerichten
+Hauptgerichts
+Hauptgewicht
+Hauptgrund
+Hauptgrundes
+Hauptgründe
+Hauptgründen
+Hauptindiz
+Hauptinhalt
+Hauptinstrument
+Hauptinteresse
+Hauptinteressen
+Hauptkomponente
+Hauptkomponenten
+Hauptmenü
+Hauptmerkmal
+Hauptmerkmals
+Hauptmodul
+Hauptmoduls
+Hauptnachteil
+Hauptnachteile
+Hauptnachteilen
+Hauptnachteils
+Hauptnutzen
+Hauptnutzens
+Hauptperson
+Hauptpersonen
+Hauptplatine
+Hauptproblem
+Hauptprobleme
+Hauptproblemen
+Hauptproblems
+Hauptprogramm
+Hauptprogramms
+Hauptprozessor
+Hauptprozessors
+Hauptprüfung
+Hauptprüfungen
+Hauptpunkt
+Hauptpunkte
+Hauptpunkten
+Hauptpunktes
+Hauptpunkts
+Hauptrolle
+Hauptrollen
+Haupts
+Hauptsache
+Hauptsachen
+Hauptsatz
+Hauptsatzes
+Hauptschritt
+Hauptschritte
+Hauptschritten
+Hauptschrittes
+Hauptschritts
+Hauptschwierigkeit
+Hauptschwierigkeiten
+Hauptspeicher
+Hauptspeichers
+Hauptstudium
+Hauptstudiums
+Hauptstück
+Hauptstütze
+Hauptstützen
+Hauptsätze
+Hauptsätzen
+Hauptteil
+Hauptteile
+Hauptteilen
+Hauptteils
+Hauptthema
+Hauptthese
+Hauptthesen
+Hauptursache
+Hauptursachen
+Hauptverantwortung
+Hauptverdienst
+Hauptversammlung
+Hauptversammlungen
+Hauptverzeichnis
+Hauptverzeichnisse
+Hauptverzeichnissen
+Hauptverzeichnisses
+Hauptvorstellung
+Hauptvorstellungen
+Hauptvorteil
+Hauptvorteile
+Hauptvorteilen
+Hauptvorteils
+Hauptwerk
+Hauptwerkes
+Hauptwerks
+Hauptwohnsitz
+Hauptwort
+Hauptworte
+Hauptworten
+Hauptwortes
+Hauptworts
+Hauptwunsch
+Hauptziel
+Hauptziele
+Hauptzielen
+Hauptziels
+Hauptzweck
+Hauruck
+Hauruckverfahren
+Haus
+Hauses
+Hausgebrauch
+Haushalt
+Haushaltes
+Haushalts
+Haushaltsentwicklung
+Haushaltsführung
+Haushaltsjahr
+Haushaltsjahre
+Haushaltsjahren
+Haushaltsjahrs
+Haushaltslage
+Haushaltsmittel
+Haushaltsplan
+Haushaltsplans
+Haushaltspläne
+Haushaltsplänen
+Haushaltung
+Hausherr
+Hausherren
+Hausherrin
+Hausherrinnen
+Hausherrn
+Hausierer
+Hausierern
+Hausierers
+Hausmacht
+Hausmitteilung
+Hausmitteilungen
+Hausmittel
+Hausmitteln
+Hausmittels
+Hausordnung
+Hausordnungen
+Hausse
+Haussen
+Haussier
+Haussiers
+Hauswirtschaft
+Hauswirtschaftslehre
+Hauswirtschaftslehren
+Havarie
+Havarien
+Hawaii
+Haxe
+Haxen
+Hd
+He
+Header
+Headers
+Headhunter
+Hebamme
+Hebammen
+Hebebühne
+Hebebühnen
+Hebel
+Hebelarm
+Hebelarme
+Hebelarmen
+Hebelarms
+Hebelchen
+Hebelchens
+Hebelkraft
+Hebeln
+Hebels
+Hebelverhältnis
+Hebelverhältnisse
+Hebelverhältnissen
+Hebelverhältnisses
+Hebelwirkung
+Hebelübersetzung
+Heber
+Hebern
+Hebers
+Hebewerkzeug
+Hebriden
+Hebräer
+Hebräerin
+Hebräerinnen
+Hebräern
+Hebräers
+Hebung
+Hebungen
+Hecht
+Hechts
+Hechtsprung
+Heck
+Hecke
+Hecken
+Hecks
+Hedda
+Heddas
+Hedwig
+Hedwigs
+Hedy
+Hedys
+Heer
+Heere
+Heeren
+Heers
+Heerschar
+Heerscharen
+Heerschau
+Hefe
+Hefen
+Heft
+Heftes
+Heftigkeit
+Heftklammer
+Heftklammern
+Heftmaschine
+Heftmaschinen
+Heftpflaster
+Heftpflastern
+Heftpflasters
+Hefts
+Heftvorgang
+Hegel
+Hegels
+Hegemonie
+Hehl
+Hehler
+Hehlerei
+Hehlern
+Heide
+Heidelbeere
+Heidelbeeren
+Heidelberg
+Heidelinde
+Heidelindes
+Heiden
+Heidenangst
+Heidenspaß
+Heidenspaßes
+Heidentum
+Heidenängste
+Heidenängsten
+Heidin
+Heidinnen
+Heike
+Heikes
+Heiko
+Heikos
+Heiland
+Heilands
+Heilbronn
+Heiligabend
+Heiligkeit
+Heiligtum
+Heiligtums
+Heiligtümer
+Heiligung
+Heilung
+Heilungen
+Heim
+Heimarbeit
+Heimarbeiten
+Heimarbeiter
+Heimarbeiterin
+Heimarbeiterinnen
+Heimarbeitern
+Heimarbeiters
+Heimat
+Heimatanschrift
+Heimatland
+Heimatlands
+Heimatländer
+Heimchen
+Heimchens
+Heime
+Heimen
+Heimes
+Heimlichkeit
+Heimlichkeiten
+Heimlichtuerei
+Heims
+Heimstätte
+Heimstätten
+Heimsuchung
+Heimtücke
+Heine
+Heines
+Heino
+Heinos
+Heinrich
+Heinrichs
+Heinz
+Heirat
+Heisenberg
+Heisenbergs
+Heiserkeit
+Heizer
+Heizern
+Heizung
+Heizungen
+Heißhunger
+Heißhungers
+Hektar
+Hektars
+Hektik
+Held
+Helden
+Heldentat
+Heldentum
+Heldentums
+Heldin
+Heldinnen
+Helds
+Helen
+Helene
+Helenes
+Helfer
+Helferin
+Helferinnen
+Helfern
+Helfers
+Helfershelfer
+Helgoland
+Helikopter
+Helikoptern
+Helikopters
+Hellene
+Hellenen
+Hellenisierung
+Hellenismus
+Hellespont
+Helligkeit
+Helling
+Hellseher
+Hellseherei
+Hellsehereien
+Hellseherin
+Hellseherinnen
+Hellsehern
+Hellsehers
+Hellsichtigkeit
+Helm
+Helme
+Helmen
+Helms
+Helmut
+Helmuts
+Helot
+Heloten
+Helsinki
+Helvetismen
+Helvetismus
+Hemd
+Hemden
+Hemds
+Hemingway
+Hemingways
+Hemmnis
+Hemmnisse
+Hemmnissen
+Hemmung
+Hemmungen
+Hendl
+Hendln
+Hendls
+Hengst
+Hengste
+Hengsten
+Hengstes
+Henkel
+Henkeln
+Henkels
+Henker
+Henkern
+Henkers
+Henkersmahlzeit
+Henne
+Hennen
+Henning
+Hennings
+Henry
+Henrys
+Hera
+Herablassung
+Herabsetzung
+Herabsetzungen
+Herabstufung
+Herakles
+Heranziehung
+Heras
+Herausarbeitung
+Herausbildung
+Herausforderer
+Herausforderung
+Herausforderungen
+Herausgabe
+Herausgeber
+Herausgeberin
+Herausgeberinnen
+Herausgebern
+Herausgebers
+Herbarien
+Herbarium
+Herbariums
+Herberge
+Herbergen
+Herbert
+Herberts
+Herbrand
+Herbst
+Herbstes
+Herd
+Herde
+Herden
+Herdentier
+Herdentiere
+Herdentieren
+Herdentiers
+Herdentrieb
+Herdes
+Herds
+Hereinfall
+Hereinfalls
+Hereinnahme
+Herfahrt
+Herfahrten
+Hergabe
+Hergang
+Hergangs
+Hering
+Heringe
+Heringen
+Herings
+Herkles
+Herklit
+Herklits
+Herkunft
+Herkünfte
+Herkünften
+Herleitbarkeit
+Herleitung
+Herleitungen
+Hermann
+Hermanns
+Hermaphrodit
+Hermelin
+Hermelins
+Hermes
+Herodot
+Herodots
+Heroin
+Heroins
+Herold
+Herolde
+Herolden
+Heroldes
+Herolds
+Herr
+Herren
+Herrenpilz
+Herrenpilze
+Herrenpilzen
+Herrenpilzes
+Herrin
+Herrinnen
+Herrjemine
+Herrlichkeit
+Herrn
+Herrschaft
+Herrschaften
+Herrscher
+Herrscherin
+Herrscherinnen
+Herrschern
+Herrschers
+Hersteller
+Herstellern
+Herstellers
+Herstellung
+Herstellungen
+Herstellungsverfahren
+Herstellungsverfahrens
+Hertz
+Herz
+Herzchen
+Herzchens
+Herzegowina
+Herzen
+Herzens
+Herzensangelegenheit
+Herzensangelegenheiten
+Herzensbrecher
+Herzensbrechern
+Herzensbrechers
+Herzensgüte
+Herzenslust
+Herzenssache
+Herzenssachen
+Herzhaftigkeit
+Herzklopfen
+Herzklopfens
+Herzlichkeit
+Herzlichkeiten
+Herzlosigkeit
+Herzlosigkeiten
+Herzog
+Herzogin
+Herzoginnen
+Herzogs
+Herzöge
+Herzögen
+Hesperiden
+Hesse
+Hessen
+Heterogenität
+Hethiter
+Hethiterreich
+Hetzjagd
+Heu
+Heuchelei
+Heucheleien
+Heuchler
+Heuchlerin
+Heuchlerinnen
+Heuchlern
+Heuchlers
+Heurige
+Heurigen
+Heuristik
+Heuristiken
+Heus
+Heuss
+Hewlett
+Hexadezimalanzeige
+Hexadezimalzahl
+Hexadezimalzeichen
+Hexameter
+Hexameters
+Hexdump
+Hexe
+Hexen
+Hexer
+Hexerei
+Hexereien
+Hieb
+Hiebe
+Hieben
+Hiebes
+Hierarchie
+Hierarchien
+Hieroglyphe
+Hieroglyphen
+Hieronymus
+Highfidelity
+Highsociety
+Hightech
+Hilde
+Hildebrand
+Hildebrands
+Hildes
+Hildesheim
+Hilfe
+Hilfen
+Hilferuf
+Hilferufe
+Hilferufen
+Hilferufs
+Hilfeschrei
+Hilfeschreie
+Hilfeschreien
+Hilfeschreis
+Hilfestellung
+Hilfestellungen
+Hilflosigkeit
+Hilfsaktion
+Hilfsaktionen
+Hilfsarbeiter
+Hilfsarbeiterin
+Hilfsarbeiterinnen
+Hilfsarbeitern
+Hilfsarbeiters
+Hilfsbereitschaft
+Hilfsdatei
+Hilfsdateien
+Hilfsdienst
+Hilfsdienste
+Hilfsdiensten
+Hilfsdienstes
+Hilfsfunktion
+Hilfsfunktionen
+Hilfskonstruktion
+Hilfskonstruktionen
+Hilfskraft
+Hilfskräfte
+Hilfskräften
+Hilfsmittel
+Hilfsmitteln
+Hilfsorganisation
+Hilfsorganisationen
+Hilfsprogramm
+Hilfsprogramme
+Hilfsprogrammen
+Hilfsprogramms
+Hilfstext
+Hilfstexte
+Hilfstexten
+Hilfstextes
+Hilfsvariable
+Hilfsvariablen
+Hilton
+Hiltons
+Himalaja
+Himbeere
+Himbeeren
+Himmel
+Himmeln
+Hinausschiebung
+Hinauswurf
+Hinblick
+Hinblicks
+Hindenburg
+Hindenburgs
+Hindernis
+Hindernisse
+Hindernissen
+Hindernisses
+Hinderung
+Hinderungen
+Hinderungsgrund
+Hindu
+Hinduismus
+Hindus
+Hinfahrt
+Hinfahrten
+Hinfälligkeit
+Hingabe
+Hingang
+Hingangs
+Hingebung
+Hinlänglichkeit
+Hinrichtung
+Hinrichtungen
+Hinsicht
+Hinsichten
+Hinspiel
+Hinterbein
+Hinterbeine
+Hinterbeinen
+Hinterbeins
+Hinterbliebene
+Hinterbliebenen
+Hintereinanderausführung
+Hintereinanderausführungen
+Hinterfragung
+Hintergedanke
+Hintergedanken
+Hintergehung
+Hintergehungen
+Hintergrund
+Hintergrundinformation
+Hintergrundinformationen
+Hintergrunds
+Hintergrundspeicher
+Hintergründe
+Hintergründen
+Hinterhalt
+Hinterhalte
+Hinterhalten
+Hinterhaltes
+Hinterhalts
+Hinterhand
+Hinterkopf
+Hinterkopfes
+Hinterkopfs
+Hinterlassenschaft
+Hinterlassenschaften
+Hinterlegung
+Hinterlegungen
+Hinterlist
+Hintermänner
+Hinterpommern
+Hinterteil
+Hinterteile
+Hinterteilen
+Hinterteils
+Hintertür
+Hintertürchen
+Hintertürchens
+Hinweis
+Hinweisblatt
+Hinweises
+Hinweisschilder
+Hinweiszettel
+Hinz
+Hinzunahme
+Hiobsbotschaft
+Hiobsbotschaften
+Hiobsgestalt
+Hiobsgestalten
+Hippie
+Hippies
+Hippodrom
+Hirn
+Hirne
+Hirnen
+Hirngespinst
+Hirngespinsten
+Hirns
+Hiroshima
+Hirsch
+Hirschen
+Hirse
+Hirte
+Hirten
+Historie
+Historien
+Historik
+Historiker
+Historikern
+Historikers
+Historismus
+Hit
+Hitler
+Hitlers
+Hitliste
+Hitlisten
+Hitparade
+Hitparaden
+Hitze
+Hiwi
+Hiwis
+Hoare
+Hobby
+Hobbyist
+Hobbyisten
+Hobbys
+Hobel
+Hobels
+Hoch
+Hochachtung
+Hochbetrieb
+Hochbetriebs
+Hochburg
+Hochburgen
+Hochdruck
+Hochdrücke
+Hochdrücken
+Hochform
+Hochglanz
+Hochmut
+Hochmuts
+Hochrechnung
+Hochrhein
+Hochrheins
+Hochs
+Hochsaison
+Hochschulabschluss
+Hochschulabschlusses
+Hochschulabschlüsse
+Hochschulabschlüssen
+Hochschule
+Hochschulen
+Hochschulgruppe
+Hochschulgruppen
+Hochschullehrer
+Hochschullehrerin
+Hochschullehrerinnen
+Hochschullehrern
+Hochschullehrers
+Hochschulreform
+Hochschulreife
+Hochschulstudium
+Hochschulstudiums
+Hochschwarzwaldes
+Hochschätzung
+Hochspannung
+Hochspannungen
+Hochspannungsanlage
+Hochspannungskabel
+Hochspannungsleitung
+Hochspannungsleitungen
+Hochspannungstechnik
+Hochsprache
+Hochsprachen
+Hochstapler
+Hochstaplern
+Hochstaplers
+Hochtechnologie
+Hochtechnologien
+Hochzeit
+Hochzeiten
+Hockenheimring
+Hocker
+Hockern
+Hockey
+Hockeys
+Hoden
+Hoechst
+Hoesch
+Hof
+Hofbräuhaus
+Hofe
+Hofes
+Hoffmann
+Hoffmanns
+Hoffnung
+Hoffnungen
+Hoffnungslosigkeit
+Hofs
+Hoheit
+Hoheitsgewalt
+Hohenzoller
+Hohenzollern
+Hohenzollers
+Hohlmaß
+Hohlmaße
+Hohlmaßen
+Hohlmaßes
+Hohlraum
+Hohlraums
+Hohlräume
+Hohlräumen
+Hohlspiegel
+Hohltier
+Hohltiere
+Hohltieren
+Hohltiers
+Hohngelächter
+Hohngelächters
+Holding
+Holger
+Holgers
+Holland
+Hollands
+Hollywood
+Hollywoods
+Holländer
+Holländerin
+Holländerinnen
+Holländern
+Holländers
+Holm
+Holme
+Holmen
+Holms
+Holocaust
+Holocausts
+Holografie
+Holografien
+Hologramm
+Hologramme
+Hologrammen
+Hologramms
+Holographie
+Holographien
+Holstein
+Holunder
+Holunderbaum
+Holunderbaumes
+Holunderbaums
+Holunderbäume
+Holunderbäumen
+Holunders
+Holz
+Holzes
+Holzweg
+Homecomputer
+Homedirectory
+Homeland
+Homepage
+Homepages
+Homer
+Homers
+Homogenität
+Homomorphie
+Homomorphismen
+Homomorphismus
+Homosexualität
+Homöopath
+Homöopathen
+Honda
+Honduras
+Honecker
+Honeckers
+Hongkong
+Hongkongs
+Honig
+Honiglecken
+Honigschlecken
+Honorar
+Honorare
+Honoraren
+Honorars
+Honoratioren
+Honorierung
+Horcher
+Horchern
+Horchers
+Horchposten
+Horde
+Horden
+Horizont
+Horizonte
+Horizonten
+Horizonterweiterung
+Horizonts
+Hormon
+Hormone
+Hormonen
+Hormons
+Horn
+Hornhaut
+Horns
+Hornvieh
+Horoskop
+Horoskope
+Horoskopen
+Horoskops
+Horror
+Horrors
+Horst
+Horste
+Horsten
+Horstes
+Hort
+Horte
+Horten
+Hortes
+Hortung
+Hose
+Hosen
+Hosenlupf
+Hospital
+Hospitals
+Hospitant
+Hospitanten
+Hospitäler
+Hostess
+Hostessen
+Hostie
+Hostien
+Hostinterface
+Hostinterfaces
+Hostprozessor
+Hostprozessoren
+Hostrechner
+Hostrechnern
+Hostrechners
+Hostsoftware
+Hotdog
+Hotdogs
+Hotel
+Hotels
+Hotline
+Hotlines
+Hub
+Huber
+Hubers
+Hubertus
+Hubes
+Hubraum
+Hubraumes
+Hubraums
+Hubräume
+Hubräumen
+Hubs
+Hubschrauber
+Hubschraubern
+Hubschraubers
+Huf
+Hufe
+Hufeisen
+Hufeisens
+Hufen
+Hufs
+Hugo
+Hugos
+Huhn
+Huhns
+Huldigung
+Huldigungen
+Humanismus
+Humanist
+Humanisten
+Humanität
+Humboldt
+Humboldts
+Humbug
+Hummer
+Hummern
+Hummers
+Humor
+Humorist
+Humoristen
+Humors
+Humus
+Hund
+Hunde
+Hunden
+Hundertschaft
+Hundes
+Hunds
+Hunger
+Hungerlohn
+Hungers
+Hungertuch
+Hunne
+Hunnen
+Hurerei
+Hurrikan
+Husar
+Husaren
+Hussein
+Husseins
+Husum
+Hut
+Hutes
+Huts
+Hybris
+Hydepark
+Hydrant
+Hydraulik
+Hydrierung
+Hydrophon
+Hygiene
+Hymne
+Hymnen
+Hypnose
+Hypnosen
+Hypothek
+Hypotheken
+Hypothese
+Hypothesen
+Hyäne
+Hyänen
+Hz
+Häfen
+Häfens
+Häftling
+Häftlinge
+Häftlingen
+Häftlings
+Hähnchen
+Hähnchens
+Hähne
+Hähnen
+Häkchen
+Häkchens
+Hälfte
+Hälften
+Hälse
+Hälsen
+Hämmer
+Hämorrhoide
+Hämorrhoiden
+Hämorride
+Hämorriden
+Händchen
+Händchens
+Hände
+Händedruck
+Händedrücke
+Händedrücken
+Händel
+Händen
+Händeschütteln
+Händler
+Händlerin
+Händlerinnen
+Händlern
+Händlers
+Hänfling
+Hänflinge
+Hänflings
+Hänschen
+Hänschens
+Häppchen
+Häppchens
+Härtefall
+Härtefalls
+Härtefälle
+Härtefällen
+Härterei
+Härtung
+Härtungen
+Häscher
+Häschern
+Häschers
+Hässlichkeit
+Hässlichkeiten
+Häufchen
+Häufchens
+Häufigkeit
+Häufqqlein
+Häufqqleins
+Häufung
+Häufungen
+Häunel
+Häuneln
+Häunels
+Häuptel
+Häupteln
+Häuptels
+Häuptelsalat
+Häupter
+Häuptern
+Häuptling
+Häuptlinge
+Häuptlingen
+Häuptlings
+Häuschen
+Häuschens
+Häuser
+Häusern
+Häute
+Häuten
+Häutung
+Häutungen
+Höchstbetrag
+Höchstbetrages
+Höchstbetrags
+Höchstbeträge
+Höchstbeträgen
+Höchstform
+Höchstleistung
+Höchstleistungen
+Höchstmaß
+Höchstmaße
+Höchstmaßen
+Höchstmaßes
+Höchstsatz
+Höchststand
+Höchstsätze
+Höchstsätzen
+Höchstwert
+Höchstwerte
+Höchstwerten
+Höchstwertes
+Höchstwerts
+Höcker
+Höckern
+Höckers
+Höfe
+Höfen
+Höfqqlichkeit
+Höfqqlichkeiten
+Höhe
+Höhen
+Höhenlinie
+Höhenlinien
+Höhepunkt
+Höhepunkte
+Höhepunkten
+Höhepunkts
+Höhle
+Höhlen
+Höhlung
+Höhlungen
+Hölderlin
+Hölderlins
+Hölle
+Höllen
+Hörer
+Hörern
+Hörers
+Hübe
+Hüben
+Hüfte
+Hüften
+Hügel
+Hügeln
+Hügels
+Hühner
+Hühnern
+Hülse
+Hülsen
+Hündin
+Hüne
+Hünen
+Hüpfer
+Hürde
+Hürden
+Hüter
+Hüterin
+Hüterinnen
+Hütern
+Hüters
+Hütte
+Hütten
+IATA
+IBM
+ICI
+IG
+II
+III
+IP
+IQ
+IRC
+ISBN
+ISDN
+ISO
+ISP
+IT
+ITT
+IV
+IX
+Ibbenbüren
+Iberer
+Iberien
+Ichbewusstsein
+Ichbewusstseins
+Ichform
+Ichformen
+Ichsucht
+Icon
+Ideal
+Idealbedarf
+Idealfall
+Idealfalls
+Idealfälle
+Idealfällen
+Idealgewicht
+Idealismus
+Idealist
+Idealisten
+Idealistin
+Idealistinnen
+Ideals
+Idealwelt
+Idealzustand
+Idealzustandes
+Idee
+Ideen
+Ideendarstellung
+Ideenlehre
+Ideenlehren
+Ideenlosigkeit
+Ideenreichtum
+Ideenreichtums
+Ideensuche
+Ideenträger
+Ideenwettbewerb
+Identifikation
+Identifikator
+Identifikatorbindung
+Identifikatorbindungen
+Identifikatoren
+Identifikators
+Identifizierung
+Identität
+Identitäten
+Identitätsfunktion
+Identitätsfunktionen
+Ideologe
+Ideologen
+Ideologie
+Ideologien
+Ideologin
+Ideologinnen
+Idiomatik
+Idiome
+Idiomen
+Idiosynkrasie
+Idiosynkrasien
+Idiot
+Idioten
+Idol
+Idole
+Idolen
+Idols
+Idyll
+Idylle
+Idyllen
+Igel
+Igeln
+Igels
+Igelstellung
+Igelstellungen
+Ignoranz
+Ikarus
+Ikone
+Ikonen
+Illegalität
+Illiquidität
+Illiterat
+Illiteraten
+Illumination
+Illuminationen
+Illusion
+Illusionen
+Illustration
+Illustrationen
+Illustrator
+Illustratoren
+Illustrierung
+Illyrien
+Illyrier
+Ilmensee
+Iltis
+Iltisse
+Iltissen
+Iltisses
+Image
+Imagepflege
+Imagination
+Imaginärteil
+Imaginärteile
+Imaginärteilen
+Imaginärteils
+Imbiss
+Imbisse
+Imbissen
+Imbisses
+Imitation
+Imitationen
+Imitator
+Imitatoren
+Imker
+Imkern
+Imkers
+Immanuel
+Immanuels
+Immatrikulation
+Immatrikulationen
+Immigrant
+Immigranten
+Immigrantin
+Immigrantinnen
+Immobilie
+Immobilien
+Immunität
+Immunkörper
+Immunkörpern
+Immunkörpers
+Impedanz
+Impedanzanpassung
+Impedanzen
+Impedanzfehlanpassung
+Impedanztabelle
+Impedanzunterschied
+Impedanzwandler
+Impedanzwandlern
+Impedanzwandlers
+Impedanzwandlung
+Imperativ
+Imperativen
+Imperator
+Imperatoren
+Imperfekt
+Imperfekten
+Imperialismus
+Imperium
+Imperiums
+Impertinenz
+Impfpass
+Impfpasses
+Impfpässe
+Impfpässen
+Impfschein
+Impfscheine
+Impfscheinen
+Impfscheins
+Impfschutz
+Impfstoff
+Impfstoffe
+Impfstoffen
+Impfstoffs
+Impfung
+Impfungen
+Implementation
+Implementationen
+Implementationsarbeit
+Implementationsarbeiten
+Implementationsdetail
+Implementationsdetails
+Implementationsrichtlinie
+Implementationsrichtlinien
+Implementationssprache
+Implementationssprachen
+Implementationstechnik
+Implementationstechniken
+Implementationstechnologie
+Implementationstechnologien
+Implementierbarkeit
+Implementierens
+Implementierer
+Implementierern
+Implementierung
+Implementierungen
+Implementierungsarbeit
+Implementierungsarbeiten
+Implementierungsaspekt
+Implementierungsaspekte
+Implementierungsaspekten
+Implementierungsaspekts
+Implementierungsdetail
+Implementierungsdetails
+Implementierungsgrundlage
+Implementierungsgrundlagen
+Implementierungssprache
+Implementierungssprachen
+Implementierungsstrategie
+Implementierungsstrategien
+Implementierungstechnik
+Implementierungstechniken
+Implikation
+Implikationen
+Imponderabilien
+Import
+Importe
+Importen
+Importes
+Imports
+Impotenz
+Impresario
+Impresarios
+Impression
+Impressionen
+Impressionismus
+Impressionist
+Impressionisten
+Impressum
+Improvisation
+Improvisationen
+Imprägnierung
+Imprägnierungen
+Impuls
+Impulse
+Impulsen
+Impulses
+Inaktiver
+Inaktivität
+Inanspruchnahme
+Inbegriff
+Inbegriffe
+Inbegriffen
+Inbegriffs
+Inbesitznahme
+Inbetriebnahme
+Inbetriebnahmen
+Inbetriebsetzung
+Inder
+Inderin
+Inderinnen
+Indern
+Inders
+Index
+Indexe
+Indexen
+Indexes
+Indexgrenze
+Indexgrenzen
+Indiana
+Indianapolis
+Indianer
+Indianerin
+Indianerinnen
+Indianern
+Indianers
+Indices
+Indien
+Indifferenz
+Indikation
+Indikationen
+Indikator
+Indikatoren
+Indio
+Indios
+Indira
+Indiras
+Indirektion
+Indirektionen
+Indiskretion
+Indiskretionen
+Individualebene
+Individualebenen
+Individualismus
+Individualist
+Individualisten
+Individualität
+Individualstück
+Individuen
+Individuum
+Indiz
+Indizes
+Indizien
+Indizienbeweis
+Indizienbeweise
+Indizienbeweisen
+Indizienbeweises
+Indizierung
+Indizierungen
+Indochina
+Indoktrination
+Indonesien
+Indonesier
+Indonesierin
+Indonesierinnen
+Indonesiern
+Indonesiers
+Indossament
+Indossamente
+Indossamenten
+Indossaments
+Indossant
+Induktion
+Induktionen
+Induktionsanfang
+Induktionsannahme
+Induktionsannahmen
+Induktionsaussage
+Induktionsaussagen
+Induktionsbeginn
+Induktionsbeginns
+Induktionsbeweis
+Induktionsbeweise
+Induktionsbeweisen
+Induktionsbeweises
+Induktionshypothese
+Induktionshypothesen
+Induktionsmethode
+Induktionsmethoden
+Induktionsprinzip
+Induktionsschluss
+Induktionsschlusses
+Induktionsschlüsse
+Induktionsschlüssen
+Induktionsschritt
+Induktionsvoraussetzung
+Induktivität
+Induktivitäten
+Induktivitätsmessung
+Indus
+Induskultur
+Industrialisierung
+Industrie
+Industrien
+Industriestandard
+Industriestandards
+Ineffizienz
+Ineffizienzen
+Infanterie
+Infanterien
+Infanterist
+Infanteristen
+Infantilismus
+Infarkt
+Infarkte
+Infarkten
+Infarkts
+Infekt
+Infektion
+Infektionen
+Infektionsbazillus
+Infektionskrankheit
+Infektionskrankheiten
+Inferenzregel
+Inferenzregeln
+Inferenzschritt
+Inferenzschritte
+Inferenzschritten
+Inferenzschrittes
+Inferno
+Infiltrierung
+Infimum
+Infixnotation
+Infixschreibweise
+Inflation
+Inflationen
+Info
+Informant
+Informanten
+Informantin
+Informantinnen
+Informatik
+Informatiker
+Informatikerin
+Informatikerinnen
+Informatikern
+Informatikers
+Informatiksystem
+Informatiksysteme
+Informatiksystemen
+Informatiksystems
+Informatikzeitalter
+Information
+Informationen
+Informationsaustausch
+Informationsblatt
+Informationsblätter
+Informationsbrief
+Informationsbriefe
+Informationsbriefen
+Informationsbriefes
+Informationsdichte
+Informationsdichten
+Informationsdienst
+Informationsdienste
+Informationsdiensten
+Informationsdienstes
+Informationsdiensts
+Informationsfluss
+Informationsflusses
+Informationsflüsse
+Informationsflüssen
+Informationsfreiheit
+Informationsfülle
+Informationsgehalt
+Informationsgesellschaft
+Informationsgespräche
+Informationsgesprächen
+Informationsgewinnung
+Informationsindustrie
+Informationslücke
+Informationslücken
+Informationsmaterial
+Informationsmenge
+Informationsmengen
+Informationspolitik
+Informationsquelle
+Informationsquellen
+Informationssendung
+Informationssendungen
+Informationsspeicher
+Informationsspeichern
+Informationsspeicherung
+Informationsstand
+Informationsstelle
+Informationsstellen
+Informationssystem
+Informationssysteme
+Informationssystemen
+Informationssystems
+Informationstechnik
+Informationstechniken
+Informationstechnologie
+Informationstechnologien
+Informationsverarbeitung
+Informationsverarbeitungsprozess
+Informationsverarbeitungsprozesse
+Informationsverarbeitungsprozessen
+Informationsverarbeitungsprozesses
+Informationsverarbeitungssystem
+Informationsverarbeitungssysteme
+Informationsverarbeitungssystemen
+Informationsverarbeitungssystems
+Informationsverbreitung
+Informationsverwaltung
+Informationsvorsprung
+Informationszeitalter
+Informationszentrale
+Informationszentralen
+Infrarot
+Infrastruktur
+Infrastrukturen
+Ing
+Inganghaltung
+Ingangsetzung
+Ingangsetzungen
+Ingeborg
+Ingeborgs
+Ingenieur
+Ingenieure
+Ingenieuren
+Ingenieurleistung
+Ingenieurs
+Ingenieurwissenschaft
+Ingenieurwissenschaften
+Ingrid
+Ingrids
+Ingwer
+Ingwers
+Inhaber
+Inhaberin
+Inhaberinnen
+Inhabern
+Inhabers
+Inhaftierung
+Inhaftierungen
+Inhalation
+Inhalationen
+Inhalt
+Inhalte
+Inhalten
+Inhaltes
+Inhalts
+Inhaltsangabe
+Inhaltsangaben
+Inhaltsverz
+Inhaltsverzeichnis
+Inhaltsverzeichnisse
+Inhaltsverzeichnissen
+Inhaltsverzeichnisses
+Inhomogenität
+Inhomogenitäten
+Initial
+Initiale
+Initialen
+Initialisierung
+Initialisierungen
+Initialisierungsausdruck
+Initialisierungsausdrucks
+Initialisierungsausdrücke
+Initialisierungsausdrücken
+Initialisierungsbit
+Initialisierungsbits
+Initialisierungsdaten
+Initialisierungsfunktion
+Initialisierungsfunktionen
+Initialisierungsphase
+Initialisierungsphasen
+Initialisierungssequenz
+Initialisierungszeit
+Initials
+Initiative
+Initiativen
+Initiativrecht
+Initiator
+Initiatoren
+Initiierung
+Injektion
+Injektionen
+Injektivität
+Inka
+Inkarnation
+Inkarnationen
+Inkasso
+Inkassos
+Inkaufnahme
+Inklinometer
+Inklinometern
+Inklinometers
+Inklusion
+Inkompatibilität
+Inkompatibilitäten
+Inkonsequenz
+Inkonsequenzen
+Inkonsistenz
+Inkonsistenzen
+Inkorrektheit
+Inkorrektheiten
+Inkraftsetzung
+Inkraftsetzungen
+Inkrafttreten
+Inkrement
+Inland
+Inländer
+Inländerin
+Inländerinnen
+Inländern
+Inländers
+Innenleben
+Innenseite
+Innenseiten
+Innerei
+Innereien
+Innerlichkeit
+Innern
+Innigkeit
+Innovation
+Innovationen
+Innovationscharakter
+Innovationscharakters
+Innsbruck
+Inputfile
+Inputfiles
+Inputparser
+Insasse
+Insassen
+Inschrift
+Insekt
+Insekten
+Insektes
+Insel
+Inselchen
+Inselchens
+Inseln
+Insemination
+Inserat
+Inserate
+Inseraten
+Inserates
+Inserats
+Inserent
+Inserenten
+Insertion
+Insider
+Insidern
+Insolvenz
+Inspekteur
+Inspekteurs
+Inspektion
+Inspektionen
+Inspektor
+Inspektoren
+Inspektors
+Inspiration
+Inspirationen
+Inspizient
+Inst
+Instabilität
+Instabilitäten
+Installateur
+Installateure
+Installateuren
+Installateurs
+Installation
+Installationen
+Installationsarbeit
+Installationsarbeiten
+Installationsmängel
+Installationsprozess
+Installationsprozesse
+Installationsprozessen
+Installationsprozesses
+Installierung
+Instandhaltung
+Instandhaltungskosten
+Instandsetzung
+Instandsetzungen
+Instandsetzungsarbeit
+Instandsetzungsarbeiten
+Instantiierung
+Instantiierungen
+Instanz
+Instanzen
+Instanzvariable
+Instanzvariablen
+Instinkt
+Instinkte
+Instinkten
+Instinktes
+Institut
+Institute
+Instituten
+Institution
+Institutionalisierung
+Institutionen
+Instituts
+Institutsbericht
+Institutsberichte
+Institutsberichten
+Institutsberichts
+Institutsbetrieb
+Institutsgelände
+Institutsleiter
+Instrukteur
+Instruktion
+Instruktionen
+Instruktionsfolge
+Instruktionsfolgen
+Instruktionssatz
+Instrument
+Instrumentalist
+Instrumentalisten
+Instrumentalpart
+Instrumentarium
+Instrumente
+Instrumenten
+Instrumentes
+Insulaner
+Insulanerin
+Insulanerinnen
+Insulanern
+Insulaners
+Insulin
+Insulins
+Inszenator
+Inszenierung
+Inszenierungen
+Integralbildung
+Integralrechnung
+Integralrechnungen
+Integralteil
+Integralteile
+Integralteilen
+Integralteils
+Integration
+Integrationsaspekt
+Integrationsaspekte
+Integrationsaspekten
+Integrationsaspekts
+Integrationsfigur
+Integrationsfähigkeit
+Integrationsidee
+Integrationsideen
+Integrationsplatinen
+Integrationsprozess
+Integrationsprozesse
+Integrationsprozessen
+Integrationsprozesses
+Integrationsvorteil
+Integrationsvorteile
+Integrationsvorteilen
+Integrationsvorteils
+Integrierbarkeit
+Integrität
+Intel
+Intellekt
+Intelligenz
+Intelligenzbestie
+Intelligenzbestien
+Intelligenzen
+Intelligenzgrad
+Intelligenzler
+Intelligenztest
+Intelligenztests
+Intelligenztheorie
+Intelligenztheorien
+Intels
+Intendant
+Intendantenamt
+Intendantenstuhl
+Intendantenwahl
+Intensität
+Intensitäten
+Intensitätsschwächung
+Intensivierung
+Intention
+Intentionen
+Interaktion
+Interaktionen
+Intercity
+Intercitys
+Interdependenz
+Interesse
+Interesselosigkeit
+Interessen
+Interessenausgleich
+Interessenausgleichs
+Interessengebiet
+Interessengebiete
+Interessengebieten
+Interessengebietes
+Interessengebiets
+Interessengemeinschaft
+Interessengemeinschaften
+Interessengruppe
+Interessengruppen
+Interessenkollision
+Interessenkollisionen
+Interessenkonflikt
+Interessenkreis
+Interessenkreise
+Interessenkreisen
+Interessenkreises
+Interessenlage
+Interessenlagen
+Interessenschwerpunkt
+Interessent
+Interessenten
+Interessenvertretung
+Interessenvertretungen
+Interesses
+Interessiertheit
+Interface
+Interfaceplatine
+Interfaceplatinen
+Interfaces
+Interferenz
+Interferenzen
+Interferenzmuster
+Interferenzmustern
+Interferenzmusters
+Interim
+Interims
+Interludium
+Interna
+Internat
+Internate
+Internaten
+Internationalisierung
+Internationalismus
+Internats
+Internet
+Internets
+Interpol
+Interpret
+Interpretation
+Interpretationen
+Interpreten
+Interpreter
+Interpretern
+Interpreters
+Interpretierens
+Interpretierung
+Interpretin
+Interpretinnen
+Interpunktion
+Interpunktionen
+Interruptbuffer
+Interruptbuffers
+Interruptsteuerung
+Interruptsteuerungen
+Interruptvektortabelle
+Interruptvektortabellen
+Interruptverarbeitung
+Intervall
+Intervalle
+Intervallen
+Intervalls
+Intervention
+Interventionen
+Interview
+Interviewer
+Interviewern
+Interviewers
+Interviews
+Interviewung
+Inthronisation
+Intimität
+Intimitäten
+Intimsphäre
+Intoleranz
+Intrigant
+Intriganten
+Intrigantin
+Intrigantinnen
+Intrige
+Intrigen
+Intuition
+Intuitionen
+Invalide
+Invaliden
+Invalidität
+Invasion
+Invasionen
+Inventar
+Inventare
+Inventaren
+Inventars
+Inventur
+Invertierung
+Investition
+Investitionen
+Investitionsmittel
+Investitionsmitteln
+Investitionsmittels
+Investitur
+Investor
+Investoren
+Inzest
+Inzucht
+Ion
+Ionen
+Ionisation
+Ions
+Irak
+Iran
+Ire
+Iren
+Irin
+Irinnen
+Irland
+Irlands
+Ironie
+Ironiker
+Ironikern
+Ironikers
+Irrationalismus
+Irreführung
+Irreführungen
+Irrelevanz
+Irritation
+Irritationen
+Irrläufer
+Irrsinn
+Irrsinns
+Irrtum
+Irrtums
+Irrtümer
+Irrtümern
+Irrweg
+Irrwege
+Irrwegen
+Irrweges
+Irrwegs
+Isaac
+Isaacs
+Isaak
+Isaaks
+Isar
+Isis
+Islam
+Islams
+Island
+Isolationismus
+Isolationist
+Isolationisten
+Isolationsspannung
+Isolationsstoff
+Isolator
+Isolatoren
+Isolierband
+Isolierbandes
+Isolierbändern
+Isolierplatte
+Isolierschicht
+Isolierstation
+Isolierstationen
+Isolierstoff
+Isolierung
+Isolierungen
+Isomorphie
+Isomorphismen
+Isomorphismus
+Isopropanol
+Isotropie
+Israel
+Israeli
+Israelis
+Israels
+Istanbul
+Italien
+Italiener
+Italienerin
+Italienerinnen
+Italienern
+Italieners
+Italiens
+Iteration
+Iterationen
+Itzehoe
+Ivan
+Ivans
+Jacht
+Jachten
+Jachtklub
+Jack
+Jacke
+Jacken
+Jackett
+Jacketts
+Jacks
+Jacob
+Jacobs
+Jacqueline
+Jacquelines
+Jacques
+Jadebusen
+Jaffa
+Jagd
+Jagden
+Jaguar
+Jaguare
+Jaguaren
+Jaguars
+Jahn
+Jahns
+Jahr
+Jahrbuch
+Jahrbuchs
+Jahre
+Jahren
+Jahres
+Jahresanfang
+Jahresbasis
+Jahresbeginn
+Jahresbeitrag
+Jahresbeitrages
+Jahresbeitrags
+Jahresbeiträge
+Jahresbeiträgen
+Jahresbericht
+Jahresberichte
+Jahresberichten
+Jahresberichtes
+Jahresberichts
+Jahresbilanz
+Jahresbilanzen
+Jahreseinkommen
+Jahreseinkommens
+Jahresende
+Jahresenden
+Jahresendes
+Jahresetat
+Jahresetats
+Jahresfrist
+Jahreshälfte
+Jahreshälften
+Jahresmittel
+Jahresschnitt
+Jahrestag
+Jahrestage
+Jahrestagen
+Jahrestags
+Jahresurlaub
+Jahreszahl
+Jahreszahlen
+Jahreszeit
+Jahreszeiten
+Jahrgang
+Jahrgangs
+Jahrgänge
+Jahrgängen
+Jahrhundert
+Jahrhunderte
+Jahrhunderten
+Jahrhunderts
+Jahrhundertwende
+Jahrmarkt
+Jahrmarktes
+Jahrmarkts
+Jahrmillion
+Jahrmillionen
+Jahrmärkte
+Jahrmärkten
+Jahrs
+Jahrtausend
+Jahrtausenden
+Jahrzehnt
+Jahrzehnte
+Jahrzehnten
+Jahrzehnts
+Jahwe
+Jahwes
+Jakobiner
+Jalousie
+Jalousien
+Jalta
+Jamaika
+James
+Jammer
+Jammerbild
+Jammerbilder
+Jammerbildern
+Jammerbildes
+Jammers
+Jan
+Janeiro
+Jans
+Januar
+Januars
+Japan
+Japaner
+Japanerin
+Japanerinnen
+Japanern
+Japaners
+Japans
+Jargon
+Jaruzelski
+Jaruzelskis
+Jauche
+Jauchen
+Jause
+Jausen
+Java
+Javas
+Javasee
+Jawort
+Jaworte
+Jaworten
+Jawortes
+Jaworts
+Jazz
+Jean
+Jeans
+Jeep
+Jeeps
+Jemen
+Jena
+Jens
+Jeremiade
+Jeremiaden
+Jericho
+Jersey
+Jerusalem
+Jesaja
+Jesajas
+Jesuit
+Jesuiten
+Jesus
+Jet
+Jets
+Jg
+Jim
+Jims
+Joachim
+Joachims
+Job
+Jobs
+Jobsharing
+Jobsharings
+Joch
+Jochbein
+Jochen
+Jod
+Jodkur
+Jodler
+Jodlern
+Jodquelle
+Jodquellen
+Jods
+Joga
+Jogas
+Joghurt
+Joghurts
+Jogurt
+Jogurts
+Johann
+Johannes
+Johannisbeere
+Johannisbeeren
+Johannisbrot
+Johannisburg
+Johanniskraut
+Johanniskrauts
+Johanniter
+Johanns
+John
+Johns
+Johnson
+Johnsons
+Jointventure
+Jointventures
+Joker
+Jolle
+Jollen
+Jones
+Jongleur
+Jordan
+Jordanien
+Jordaniens
+Jordans
+Josef
+Josefs
+Joseph
+Josephs
+Jota
+Journal
+Journale
+Journalen
+Journalismus
+Journalist
+Journalisten
+Journalistin
+Journalistinnen
+Journals
+Joy
+Joys
+Joystick
+Jubel
+Jubels
+Jubilar
+Jubilare
+Jubilaren
+Jubilarin
+Jubilarinnen
+Jubilars
+Jubiläen
+Jubiläum
+Jubiläums
+Jubiläumsausgabe
+Jubiläumsausgaben
+Jubiläumsfeier
+Jubiläumsjahr
+Juda
+Judas
+Jude
+Juden
+Judo
+Judoka
+Judos
+Judäa
+Jugend
+Jugendlichkeit
+Jugendliebe
+Jugendlieben
+Jugendstil
+Jugendsünde
+Jugendsünden
+Jugendtraum
+Jugendtraumes
+Jugendtraums
+Jugendträume
+Jugendträumen
+Jugoslawe
+Jugoslawen
+Jugoslawien
+Jugoslawin
+Jugoslawinnen
+Jul
+Juli
+Julia
+Julias
+Julis
+Juliusturm
+Jumbo
+Jumbojet
+Jumbojets
+Jumbos
+Jumper
+Jumpern
+Jumpers
+Jungens
+Jungenschaft
+Jungfer
+Jungfrau
+Jungfrauen
+Junggeselle
+Junggesellen
+Junggesellin
+Junggesellinnen
+Juni
+Junior
+Juniorchef
+Juniorchefin
+Juniorchefinnen
+Juniorchefs
+Junioren
+Juniorin
+Juniorinnen
+Juniorpartner
+Juniors
+Junis
+Junker
+Junkertum
+Junktim
+Jupe
+Jupes
+Jupiter
+Jura
+Juras
+Jurisprudenz
+Jurist
+Juristen
+Juror
+Juroren
+Jury
+Jurys
+Justiermaße
+Justiermaßen
+Justiermöglichkeit
+Justiermöglichkeiten
+Justierung
+Justierungen
+Justitiar
+Justitiare
+Justitiars
+Justiz
+Justiziar
+Justiziare
+Justiziars
+Jute
+Juwel
+Juwelen
+Juwelier
+Juweliere
+Juwelieren
+Juweliers
+Juwels
+Jux
+Juxe
+Juxen
+Juxes
+Jäger
+Jägerei
+Jägerin
+Jägerinnen
+Jägerlatein
+Jägern
+Jägers
+Jährchen
+Jährchens
+Jähzorn
+Jähzorns
+Jänner
+Jänners
+Jörg
+Jörgs
+Jüdin
+Jüdinnen
+Jüngling
+Jünglinge
+Jünglingen
+Jünglings
+Jünglingsalter
+Jünglingsalters
+Jürgen
+Jürgens
+Jütland
+KB
+KBaud
+KByte
+KGB
+KLM
+KP
+KPD
+KPJ
+KPdSU
+KPÖ
+KSZE
+KWU
+KZ
+Kaaba
+Kabarett
+Kabarette
+Kabaretten
+Kabarettistin
+Kabaretts
+Kabel
+Kabelbaum
+Kabelbeschädigung
+Kabelbruch
+Kabelbündel
+Kabeldefekt
+Kabeldefekte
+Kabeldefekten
+Kabeldefektes
+Kabeldefekts
+Kabeldurchführung
+Kabeldurchführungen
+Kabelenden
+Kabelfuge
+Kabelführung
+Kabelhalter
+Kabelkonfektionierung
+Kabellitze
+Kabellänge
+Kabellängen
+Kabelmetall
+Kabeln
+Kabels
+Kabelstecker
+Kabelsteckern
+Kabelstrecke
+Kabelstücke
+Kabelsystem
+Kabelsysteme
+Kabeltausch
+Kabeltrommel
+Kabeltyp
+Kabelverbinder
+Kabelverbindern
+Kabelverbindung
+Kabelverbindungen
+Kabelverlauf
+Kabelverlaufs
+Kabelverlegung
+Kabelverläufe
+Kabelverläufen
+Kabelweg
+Kabelwege
+Kabelweges
+Kabelwegs
+Kabelzuführung
+Kabine
+Kabinen
+Kabinett
+Kabinette
+Kabinetten
+Kabinetts
+Kabrio
+Kabriolett
+Kabul
+Kachel
+Kacheln
+Kadaver
+Kadavern
+Kadavers
+Kader
+Kadern
+Kaders
+Kadett
+Kadetten
+Kadi
+Kadis
+Kaff
+Kaffee
+Kaffees
+Kaffs
+Kafka
+Kafkas
+Kahlheit
+Kahlschlag
+Kahlschlags
+Kahlschläge
+Kahlschlägen
+Kahn
+Kahns
+Kai
+Kairo
+Kairos
+Kais
+Kaiser
+Kaiserin
+Kaiserinnen
+Kaisern
+Kaiserpfalz
+Kaisers
+Kaiserslautern
+Kajüte
+Kajüten
+Kakadu
+Kakadus
+Kakao
+Kakaos
+Kaktee
+Kakteen
+Kaktus
+Kalabrien
+Kalahari
+Kalamität
+Kalamitäten
+Kalauer
+Kalb
+Kalbes
+Kalbs
+Kaledonien
+Kaleidoskop
+Kalender
+Kalenderjahr
+Kalenderjahre
+Kalenderjahren
+Kalenderjahrs
+Kalendermonat
+Kalendern
+Kalenders
+Kalendertag
+Kalendertage
+Kalendertagen
+Kalendertags
+Kalenderwoche
+Kalenderwochen
+Kali
+Kaliber
+Kalibers
+Kalibrierung
+Kalif
+Kalifen
+Kalifornien
+Kalifornier
+Kalifornierin
+Kalifornierinnen
+Kalis
+Kalium
+Kalk
+Kalkar
+Kalkes
+Kalks
+Kalkstein
+Kalkulation
+Kalkulationen
+Kalkulator
+Kalkutta
+Kalkül
+Kalküle
+Kalkülen
+Kalküls
+Kalligraf
+Kalligrafen
+Kalligrafie
+Kalligrafien
+Kalligraph
+Kalligraphen
+Kalligraphie
+Kalligraphien
+Kalorie
+Kalorien
+Kaltwasser
+Kalvinist
+Kalvinisten
+Kalvinistin
+Kalvinistinnen
+Kalzium
+Kalziums
+Kamasutra
+Kambodscha
+Kamel
+Kamele
+Kamelen
+Kamels
+Kamera
+Kamerad
+Kameraden
+Kameradin
+Kameradinnen
+Kameradschaft
+Kameradschaften
+Kameras
+Kamerun
+Kamikaze
+Kamille
+Kamin
+Kamine
+Kaminen
+Kamins
+Kamm
+Kammer
+Kammern
+Kamms
+Kampagne
+Kampagnen
+Kampf
+Kampfansage
+Kampfansagen
+Kampfgeist
+Kampfgeistes
+Kampfgeists
+Kampl
+Kanaan
+Kanada
+Kanadier
+Kanadierin
+Kanadierinnen
+Kanadiern
+Kanadiers
+Kanaille
+Kanaillen
+Kanake
+Kanaken
+Kanal
+Kanalisation
+Kanalisationen
+Kanalisierung
+Kanalisierungen
+Kanals
+Kanapee
+Kanapees
+Kandare
+Kandidat
+Kandidaten
+Kandidatur
+Kandidaturen
+Kandinsky
+Kandinskys
+Kaninchen
+Kaninchens
+Kanister
+Kanistern
+Kanne
+Kannen
+Kannibale
+Kannibalen
+Kannibalismus
+Kanon
+Kanone
+Kanonen
+Kanonier
+Kanoniere
+Kanonieren
+Kanoniers
+Kanons
+Kansas
+Kantate
+Kantaten
+Kantine
+Kantinen
+Kanton
+Kantons
+Kantorei
+Kanu
+Kanus
+Kanute
+Kanuten
+Kanzel
+Kanzeln
+Kanzlei
+Kanzleien
+Kanzler
+Kanzlern
+Kanäle
+Kanälen
+Kap
+Kapaun
+Kapaunen
+Kapazität
+Kapazitäten
+Kapazitätsausnutzung
+Kapazitätsausnutzungen
+Kapelle
+Kapellen
+Kaperung
+Kapillargefäß
+Kapillargefäße
+Kapillargefäßen
+Kapillargefäßes
+Kapital
+Kapitalisierung
+Kapitalismus
+Kapitalist
+Kapitalisten
+Kapitals
+Kapitel
+Kapiteln
+Kapitels
+Kapitol
+Kapitulation
+Kapitulationen
+Kapitäne
+Kapitänen
+Kaplan
+Kappe
+Kappen
+Kaps
+Kapsel
+Kapselriss
+Kapselrisse
+Kapselrissen
+Kapselrisses
+Kapselung
+Kapstadt
+Kapuze
+Kapuzen
+Kapuziner
+Kapuzinern
+Kapuziners
+Karabiner
+Karabinern
+Karabiners
+Karaffe
+Karaffen
+Karajan
+Karajans
+Karambolage
+Karambolagen
+Karamell
+Karat
+Karate
+Karatekunst
+Karates
+Karatschi
+Karawane
+Karawanen
+Karbon
+Karbonade
+Karbonat
+Karbonate
+Karbonaten
+Karbonats
+Kardinal
+Kardinalität
+Kardinalitäten
+Kardinals
+Kardinalzahl
+Kardinalzahlen
+Kardinäle
+Kardinälen
+Kardiogramm
+Kardiogrammes
+Kardiogramms
+Karenzzeit
+Karenzzeiten
+Karfiol
+Karfreitag
+Karfreitags
+Karibik
+Karies
+Karikatur
+Karikaturen
+Karikierung
+Karin
+Karins
+Karl
+Karls
+Karlsbad
+Karlsbader
+Karlsruhe
+Karlsruher
+Karneval
+Karnevale
+Karnevalen
+Karnevals
+Karnickel
+Karnickeln
+Karo
+Karolinger
+Karos
+Karosse
+Karossen
+Karosserie
+Karosserien
+Karotin
+Karotins
+Karotte
+Karotten
+Karottensaft
+Karpaten
+Karpfen
+Karpfens
+Karpfenteich
+Karpfenteiche
+Karpfenteichen
+Karpfenteiches
+Karre
+Karree
+Karrees
+Karren
+Karriere
+Karrierefrau
+Karrierefrauen
+Karrierist
+Karrieristen
+Karte
+Kartei
+Karteien
+Karteikarte
+Karteikarten
+Karteikasten
+Karteikastens
+Karteikästen
+Karteischrank
+Karteischrankes
+Karteischranks
+Karteischränke
+Karteischränken
+Kartell
+Kartelle
+Kartellen
+Kartells
+Karten
+Karthager
+Karthago
+Karthum
+Kartoffel
+Kartoffeln
+Kartograf
+Kartografen
+Kartografie
+Kartografien
+Kartograph
+Kartographen
+Kartographie
+Karton
+Kartons
+Karussell
+Karusselle
+Karussellen
+Karussells
+Karwoche
+Kaschmir
+Kaserne
+Kasernen
+Kasernenhof
+Kasernenhofes
+Kasernenhofs
+Kasernenhofton
+Kasernenhoftons
+Kasernenhöfe
+Kasernenhöfen
+Kasino
+Kasinos
+Kaskade
+Kaskaden
+Kasko
+Kaskoversicherung
+Kasper
+Kassamarkt
+Kassamarktes
+Kassapreis
+Kassapreise
+Kassapreisen
+Kassapreises
+Kassation
+Kassationen
+Kasse
+Kassel
+Kasseler
+Kassen
+Kasserolle
+Kasserollen
+Kassette
+Kassetten
+Kassierer
+Kassiererin
+Kassiererinnen
+Kassierern
+Kassierers
+Kassler
+Kasslers
+Kastagnette
+Kastagnetten
+Kastanie
+Kastanien
+Kastell
+Kastellan
+Kastellane
+Kastellanen
+Kastellans
+Kastelle
+Kastellen
+Kastells
+Kasten
+Kastens
+Kastilien
+Kastrat
+Kastraten
+Kastration
+Kastrationen
+Kasus
+Kasusendung
+Kasusendungen
+Katakombe
+Katakomben
+Katalog
+Kataloge
+Katalogen
+Kataloges
+Katalogs
+Katalonien
+Katalysator
+Katalysators
+Katamaran
+Katanga
+Katapult
+Katapulte
+Katapulten
+Katapultes
+Katapults
+Katarr
+Katarrh
+Katarrhe
+Katarrhen
+Katarrhs
+Katarrs
+Katastrophe
+Katastrophen
+Katechismen
+Katechismus
+Kategorie
+Kategorien
+Kategorisierung
+Kategorisierungen
+Kater
+Katern
+Katers
+Katheder
+Kathedrale
+Kathedralen
+Kathode
+Kathoden
+Katholik
+Katholiken
+Katholizismus
+Kathrin
+Kathrins
+Katia
+Katias
+Kattun
+Kattuns
+Katz
+Katze
+Katzen
+Kauderwelsch
+Kauderwelschs
+Kauf
+Kaufhof
+Kaufs
+Kaugummi
+Kaugummis
+Kaukasus
+Kaulquappe
+Kaulquappen
+Kausalbedingung
+Kausalbedingungen
+Kausalbegriff
+Kausalbegriffe
+Kausalbegriffen
+Kausalbegriffes
+Kausalgesetz
+Kausalgesetze
+Kausalgesetzen
+Kausalgesetzes
+Kausalität
+Kausalkette
+Kausalketten
+Kausalprinzip
+Kausalprinzips
+Kausalsatz
+Kausalsatzes
+Kausalsätze
+Kausalsätzen
+Kausalzusammenhang
+Kausalzusammenhangs
+Kausalzusammenhänge
+Kausalzusammenhängen
+Kaution
+Kautionen
+Kautschuk
+Kautschuks
+Kauz
+Kauzes
+Kavalier
+Kavaliere
+Kavalieren
+Kavaliers
+Kavaliersdelikt
+Kavaliersdelikte
+Kavaliersdelikten
+Kavaliersdeliktes
+Kavaliersdelikts
+Kavallerie
+Kavallerien
+Kavallerist
+Kavalleristen
+Kaverne
+Kavernen
+Kaviar
+Kaviars
+Kavitation
+Kavitationen
+Kawasaki
+Kb
+Keckheit
+Keckheiten
+Kegel
+Kegeln
+Kegels
+Kegler
+Keglern
+Keglers
+Kehle
+Kehlen
+Kehlkopf
+Kehlköpfe
+Kehlköpfen
+Kehllaut
+Kehllaute
+Kehllauten
+Kehllautes
+Kehricht
+Kehrseite
+Kehrseiten
+Kehrtwende
+Kehrtwendung
+Kehrtwendungen
+Kehrwert
+Kehrwerte
+Kehrwerten
+Kehrwertes
+Keil
+Keiler
+Keilform
+Keils
+Keim
+Keimling
+Keimlinge
+Keimlingen
+Keimlings
+Keims
+Keks
+Kekse
+Keksen
+Kekses
+Kelch
+Kelche
+Kelchen
+Kelchs
+Kelle
+Kellen
+Keller
+Kellerei
+Kellergeschoß
+Kellergeschoße
+Kellergeschoßen
+Kellergeschoßes
+Kellern
+Kellers
+Kellner
+Kellnerin
+Kellnerinnen
+Kellnern
+Kellners
+Kelten
+Kelterei
+Kelvin
+Kempten
+Kenia
+Kennbuchstabe
+Kennbuchstaben
+Kenndaten
+Kennedy
+Kennedys
+Kenner
+Kennerblick
+Kennerblicks
+Kennerin
+Kennerinnen
+Kennermiene
+Kennermienen
+Kennern
+Kenners
+Kennlinie
+Kennlinien
+Kennnummer
+Kennnummern
+Kenntlichkeit
+Kenntnis
+Kenntnisnahme
+Kenntnisse
+Kenntnissen
+Kenntnisstand
+Kennung
+Kennungen
+Kennwert
+Kennwerte
+Kennwerten
+Kennwerts
+Kennwort
+Kennworte
+Kennworten
+Kennwortes
+Kennzahl
+Kennzahlen
+Kennzeichen
+Kennzeichens
+Kennzeichnung
+Kennziffer
+Kent
+Kentucky
+Keramik
+Keramiken
+Kerbel
+Kerbels
+Kerbholz
+Kerbnägel
+Kerbnägeln
+Kerbtier
+Kerbtiere
+Kerbtieren
+Kerbtieres
+Kerbwirkung
+Kerker
+Kerkern
+Kerl
+Kerle
+Kerlen
+Kerls
+Kern
+Kernbereich
+Kernbereiche
+Kernbereichen
+Kernbereichs
+Kernchen
+Kernchens
+Kerne
+Kernel
+Kernels
+Kernelversion
+Kernelversionen
+Kernen
+Kernfrage
+Kernfragen
+Kerngebiet
+Kerngebiete
+Kerngebieten
+Kerngebietes
+Kerngebiets
+Kerngedanke
+Kerngedanken
+Kernproblem
+Kernprobleme
+Kernproblemen
+Kernproblems
+Kernprogramm
+Kernpunkt
+Kernpunkte
+Kernpunkten
+Kernpunktes
+Kerns
+Kernstück
+Kernstücke
+Kernstücken
+Kernstückes
+Kernstücks
+Kernthese
+Kernthesen
+Kerosin
+Kerze
+Kerzen
+Kessel
+Kesseln
+Kessels
+Ketchup
+Ketschup
+Ketschups
+Kettchen
+Kettchens
+Ketzer
+Ketzerei
+Ketzerin
+Ketzerinnen
+Ketzern
+Ketzers
+Keule
+Keulen
+Keuschheit
+Keynes
+Kfz
+Khan
+Khans
+Khmer
+Khomeini
+Khomeinis
+Kicker
+Kiebitz
+Kiebitze
+Kiebitzen
+Kiebitzes
+Kiefer
+Kiefern
+Kiel
+Kiele
+Kielen
+Kieler
+Kielerin
+Kielerinnen
+Kielern
+Kielers
+Kiels
+Kiemen
+Kiepe
+Kiepen
+Kies
+Kiesel
+Kieselstein
+Kieselsteine
+Kieselsteinen
+Kieselsteins
+Kieses
+Kiew
+Kilimandscharo
+Killer
+Kilo
+Kilobyte
+Kilogramm
+Kilogramme
+Kilogrammen
+Kilogramms
+Kilometer
+Kilometern
+Kilos
+Kilowatt
+Kilowatts
+Kilowattstunde
+Kilowattstunden
+Kimm
+Kimme
+Kimmen
+Kind
+Kindchen
+Kindchens
+Kinder
+Kinderei
+Kindereien
+Kindern
+Kindes
+Kindheit
+Kindheiten
+Kinetik
+Kinkerlitzchen
+Kinn
+Kinns
+Kino
+Kinos
+Kiosk
+Kioske
+Kiosken
+Kiosks
+Kioto
+Kippung
+Kir
+Kirche
+Kirchen
+Kirchhoff
+Kirchhoffs
+Kirmes
+Kirs
+Kirsche
+Kirschen
+Kissen
+Kissens
+Kissinger
+Kissingers
+Kiste
+Kisten
+Kit
+Kits
+Kitsch
+Kitsches
+Kitschs
+Kitt
+Kittchen
+Kittel
+Kitteln
+Kittels
+Kitts
+Kitzel
+Klagenfurt
+Klammer
+Klammerung
+Klammerungen
+Klamotte
+Klamotten
+Klampfe
+Klang
+Klangs
+Klarheit
+Klarinette
+Klarinetten
+Klarsichtfolie
+Klarsichtfolien
+Klarsichtigkeit
+Klarstellung
+Klarstellungen
+Klartext
+Klasse
+Klassen
+Klassenbewusstsein
+Klassenbewusstseins
+Klassendefinition
+Klassendefinitionen
+Klassenhierarchie
+Klassenhierarchien
+Klassifikation
+Klassifikationen
+Klassifizierung
+Klassifizierungen
+Klassik
+Klassiker
+Klassikern
+Klassikers
+Klassizismus
+Klatsch
+Klatsches
+Klau
+Klaus
+Klausel
+Klauseln
+Klausulierung
+Klausur
+Klausuren
+Klausurtagung
+Klausurtagungen
+Klavier
+Klaviere
+Klavieren
+Klaviers
+Kleber
+Klebstoff
+Klebstoffe
+Klebstoffen
+Klebstoffes
+Klebung
+Klebungen
+Kleckser
+Klecksern
+Klecksers
+Klee
+Kleeernte
+Kleeernten
+Klees
+Kleid
+Kleidchen
+Kleidchens
+Kleider
+Kleidern
+Kleidsamkeit
+Kleidung
+Kleidungen
+Kleidungsstück
+Kleidungsstücke
+Kleidungsstücken
+Kleidungsstückes
+Kleidungsstücks
+Kleie
+Kleien
+Kleinarmenien
+Kleinbuchstabe
+Kleinbuchstaben
+Kleinformat
+Kleingeld
+Kleingeldes
+Kleinheit
+Kleinigkeit
+Kleinigkeiten
+Kleinkram
+Kleinlichkeit
+Kleinod
+Kleinode
+Kleinoden
+Kleinodes
+Kleinschreibung
+Kleinschreibungen
+Kleinserie
+Kleinserien
+Kleinteil
+Kleinteile
+Kleinteilen
+Kleinteils
+Kleinwalsertal
+Kleist
+Kleister
+Kleisters
+Kleists
+Klemmanschluss
+Klemmanschlusses
+Klemmanschlüsse
+Klemmanschlüssen
+Klemmenadapter
+Klemmenanschluss
+Klemmenanschlusses
+Klemmenanschlussplan
+Klemmenanschlüsse
+Klemmenanschlüssen
+Klemmenbelegung
+Klemmenblöcke
+Klemmendeckel
+Klemmeneinheit
+Klemmeneinheiten
+Klemmengruppe
+Klemmengruppen
+Klemmenkasten
+Klemmenkastens
+Klemmenleiste
+Klemmenmodul
+Klemmenmodule
+Klemmenmodulen
+Klemmenmoduls
+Klemmennummern
+Klemmenplan
+Klemmenplatine
+Klemmenpläne
+Klemmenplänen
+Klemmenpotential
+Klemmenpotenzial
+Klemmenpotenziale
+Klemmenpotenzialen
+Klemmenzusammenstellung
+Klemmmappe
+Klemmmappen
+Klempner
+Klempnerei
+Klempnern
+Klempners
+Kleriker
+Klerikern
+Klerus
+Klette
+Kletten
+Kletterei
+Klettereien
+Kletterer
+Kletterern
+Kleve
+Klick
+Klicks
+Klient
+Klienten
+Klima
+Klimas
+Klimmzug
+Klimmzuges
+Klimmzugs
+Klimmzüge
+Klimmzügen
+Klingel
+Klinik
+Kliniken
+Klippe
+Klippen
+Klipper
+Klischee
+Klischees
+Klo
+Klopapier
+Kloppe
+Klops
+Klos
+Klosett
+Kloster
+Klosters
+Klotz
+Kloß
+Kloßes
+Klub
+Klubs
+Klugheit
+Klumpen
+Klumpens
+Kläger
+Klägerin
+Klägerinnen
+Klägern
+Klägers
+Klänge
+Klängen
+Klärung
+Klärungen
+Klöckner
+Klöster
+Klöstern
+Klötze
+Klötzen
+Klöße
+Klößen
+Klüfte
+Klüften
+Knabe
+Knaben
+Knacker
+Knackpunkt
+Knackpunkte
+Knackpunkten
+Knackpunktes
+Knacks
+Knall
+Knalle
+Knallerei
+Knallereien
+Knalles
+Knalls
+Knappheit
+Knappsack
+Knast
+Knastes
+Knatterton
+Knauf
+Knaufs
+Knaur
+Knaurs
+Knauser
+Knautschzone
+Knautschzonen
+Knebelung
+Knecht
+Knechte
+Knechten
+Knechts
+Kneifzange
+Kneifzangen
+Kneipe
+Kneipen
+Knesset
+Knick
+Knickerbocker
+Knickkante
+Knickkanten
+Knicks
+Knickses
+Knie
+Knien
+Knies
+Kniff
+Kniffe
+Kniffen
+Kniffs
+Knigge
+Knigges
+Knilch
+Knirps
+Knirpsen
+Knobelei
+Knoblauch
+Knoblauchs
+Knochen
+Knochens
+Knolle
+Knollen
+Knopf
+Knopfdruck
+Knopfes
+Knopfloch
+Knopflöcher
+Knopflöchern
+Knopfrand
+Knopfs
+Knopfzelle
+Knopfzellen
+Knorpel
+Knorpeln
+Knospe
+Knospen
+Knossos
+Knoten
+Knotenausfall
+Knoteneingang
+Knoteneinheit
+Knoteneinheiten
+Knotenfirmware
+Knotenfunktion
+Knotenfunktionen
+Knotenmeldung
+Knotenmeldungen
+Knotenmodul
+Knotenprogramm
+Knotenpunkt
+Knotenpunkte
+Knotenpunkten
+Knotenpunktes
+Knotenpunkts
+Knotenrechner
+Knotenrechnern
+Knotenrechnernetz
+Knotenrechnernetzes
+Knotenrechners
+Knotens
+Knotenseite
+Knotenstruktur
+Knotenstrukturen
+Knox
+Knäste
+Knästen
+Knäuel
+Knäueln
+Knäuels
+Knäufe
+Knäufen
+Knöchel
+Knöchels
+Knödel
+Knüller
+Knüllern
+Knüllers
+Knüpfung
+Knüpfungen
+Knüppel
+Knüppeln
+Knüppels
+Koalition
+Koalitionen
+Koaxialkabel
+Koaxialkabeln
+Koaxialkabels
+Kobalt
+Kobold
+Kobolde
+Kobolden
+Kobolds
+Kobra
+Koch
+Kochbuch
+Kochbuches
+Kochbücher
+Kochbüchern
+Kocher
+Kochereien
+Kochern
+Kochers
+Kochrezept
+Kochrezepte
+Kochrezepten
+Kochrezeptes
+Kochrezepts
+Kochs
+Kodex
+Kodexe
+Kodexen
+Kodexes
+Kodierung
+Kodizes
+Koeffizient
+Koeffizienten
+Koexistenz
+Koffein
+Koffeins
+Koffer
+Koffern
+Koffers
+Kognak
+Kognaks
+Kognition
+Kognitionen
+Kohl
+Kohle
+Kohlen
+Kohlendioxid
+Kohlendioxids
+Kohlenhydrat
+Kohlenhydrate
+Kohlenhydraten
+Kohlenhydrats
+Kohlenmonoxid
+Kohlenmonoxyd
+Kohlenstoff
+Kohlenstoffe
+Kohlenstoffen
+Kohlenstoffs
+Kohlensäure
+Kohlensäuren
+Kohlenwasserstoff
+Kohlenwasserstoffe
+Kohlenwasserstoffen
+Kohlenwasserstoffs
+Kohlepapier
+Kohlepapiers
+Kohleschichtwiderstand
+Kohlesensor
+Kohlesensors
+Kohlestift
+Kohlestifte
+Kohlestiften
+Kohlestiftes
+Kohlestifts
+Kohlestück
+Kohlezeichnung
+Kohlezeichnungen
+Kohls
+Kohlsprossen
+Kohorte
+Kohorten
+Kohärenz
+Koinzidenz
+Koje
+Kojen
+Kokain
+Kokerei
+Kokereien
+Koketterie
+Kokolores
+Kokon
+Kokons
+Koks
+Kokses
+Kolben
+Kolbens
+Kolchose
+Kolchosen
+Kolik
+Koliken
+Kollaborateur
+Kollaborateure
+Kollaborateuren
+Kollaborateurs
+Kollage
+Kollagen
+Kollege
+Kollegen
+Kollegialität
+Kollegien
+Kollegin
+Kolleginnen
+Kollegium
+Kollegiums
+Kollekte
+Kollekten
+Kollektion
+Kollektionen
+Kollektiv
+Kollektivbewusstsein
+Kollektivbewusstseins
+Kollektive
+Kollektiven
+Kollektiventscheidung
+Kollektiventscheidungen
+Kollektivierung
+Kollektivismus
+Kollektivs
+Kollektor
+Kollektoren
+Koller
+Kollers
+Kollier
+Kolliers
+Kollision
+Kollisionen
+Kolloquien
+Kolloquium
+Kolofonium
+Kolofoniums
+Kolonialisierung
+Kolonialismus
+Kolonialist
+Kolonialisten
+Kolonie
+Kolonien
+Kolonisierung
+Kolonist
+Kolonisten
+Kolonne
+Kolonnen
+Kolophonium
+Kolophoniums
+Kolorist
+Koloristen
+Kolorit
+Koloss
+Kolosse
+Kolossen
+Kolosses
+Kolosseum
+Kolumne
+Kolumnen
+Kolumnist
+Kolumnisten
+Kombattant
+Kombattanten
+Kombi
+Kombinat
+Kombinate
+Kombinaten
+Kombination
+Kombinationen
+Kombinats
+Kombinierbarkeit
+Kombüse
+Kombüsen
+Komet
+Kometen
+Komfort
+Komforts
+Komik
+Komiker
+Komikerin
+Komikerinnen
+Komikern
+Komikers
+Komintern
+Komitee
+Komitees
+Komma
+Kommandant
+Kommandanten
+Kommandantur
+Kommandeur
+Kommandeure
+Kommandeuren
+Kommandeurs
+Kommanditgesellschaft
+Kommanditgesellschaften
+Kommanditist
+Kommanditisten
+Kommando
+Kommandobyte
+Kommandobytes
+Kommandos
+Kommandozeile
+Kommandozeilen
+Kommandozentrale
+Kommandozentralen
+Kommas
+Kommastelle
+Kommastellen
+Kommata
+Kommentar
+Kommentare
+Kommentaren
+Kommentars
+Kommentarzeilen
+Kommentator
+Kommentators
+Kommentierung
+Kommerz
+Kommerzialisierung
+Kommerzialisierungen
+Kommilitone
+Kommilitonen
+Kommilitonin
+Kommilitoninnen
+Kommiss
+Kommissar
+Kommissare
+Kommissaren
+Kommissariat
+Kommissariate
+Kommissariaten
+Kommissariats
+Kommissars
+Kommisses
+Kommission
+Kommissionen
+Kommissionsmitglied
+Kommissionsmitglieder
+Kommissionsmitgliedern
+Kommissionssitzung
+Kommissionssitzungen
+Kommissionsvorschlag
+Kommissionsvorschlages
+Kommissionsvorschlags
+Kommissionsvorschläge
+Kommissionsvorschlägen
+Kommissionsvorsitzende
+Kommissionsvorsitzenden
+Kommissionsvorsitzender
+Kommissionär
+Kommissionäre
+Kommissionären
+Kommissionärs
+Kommode
+Kommoden
+Kommune
+Kommunen
+Kommunikation
+Kommunikationen
+Kommunikationsfähigkeit
+Kommunikationskanäle
+Kommunikationskanälen
+Kommunikationspartner
+Kommunikationspin
+Kommunikationspins
+Kommunikationsproblem
+Kommunikationsprobleme
+Kommunikationsproblemen
+Kommunikationsproblems
+Kommunikationsrichtung
+Kommunikationssoftware
+Kommunikationsweg
+Kommunikationswege
+Kommunikationswegen
+Kommunikationswegs
+Kommunikationswesen
+Kommunikationswesens
+Kommunikationszeit
+Kommunikationszeiten
+Kommunikationszentrum
+Kommunikator
+Kommunikee
+Kommunikeen
+Kommunion
+Kommunionen
+Kommuniqué
+Kommuniqués
+Kommunismus
+Kommunist
+Kommunisten
+Kommunistin
+Kommunistinnen
+Kommutativität
+Kompagnon
+Kompagnons
+Kompaktheit
+Kompanie
+Kompanien
+Komparator
+Komparators
+Komparserie
+Komparserien
+Kompass
+Kompasse
+Kompasses
+Kompatibilität
+Kompensation
+Kompensationen
+Kompetenz
+Kompetenzabgrenzung
+Kompetenzabgrenzungen
+Kompetenzbereich
+Kompetenzbereiche
+Kompetenzbereichen
+Kompetenzbereiches
+Kompetenzbereichs
+Kompetenzen
+Kompetenzerweiterung
+Kompetenzerweiterungen
+Kompetenzstreit
+Kompetenzstreits
+Kompilation
+Komplement
+Komplementbildung
+Komplemente
+Komplementen
+Komplements
+Komplettierung
+Komplexität
+Komplexitätsanalyse
+Komplexitätsanalysen
+Komplexitätsuntersuchung
+Komplexitätsuntersuchungen
+Komplikation
+Komplikationen
+Kompliment
+Komplimente
+Komplimenten
+Komplimentes
+Kompliments
+Komplize
+Komplizen
+Kompliziertheit
+Komplizierung
+Komplizierungen
+Komplott
+Komplotts
+Komponente
+Komponenten
+Komponist
+Komponisten
+Komposition
+Kompositionen
+Kompost
+Komposte
+Komposten
+Kompostes
+Kompott
+Kompresse
+Kompressen
+Kompression
+Kompressor
+Kompressors
+Komprimierens
+Kompromiss
+Kompromissbereitschaft
+Kompromisse
+Kompromissen
+Kompromisses
+Kompromisslösung
+Kompromisslösungen
+Kompromissmodell
+Kompromissmodelle
+Kompromissmodellen
+Kompromissmodells
+Kompromissplan
+Kompromissplans
+Kompromissvorschlag
+Kompromissvorschlags
+Kompromissvorschläge
+Kompromissvorschlägen
+Komsomolze
+Komsomolzen
+Komtesse
+Komtessen
+Komödchen
+Komödchens
+Komödiant
+Komödianten
+Komödiantin
+Komödiantinnen
+Komödie
+Komödien
+Kondensat
+Kondensate
+Kondensaten
+Kondensates
+Kondensation
+Kondensator
+Kondensatoren
+Kondensators
+Kondition
+Konditional
+Konditionale
+Konditionalen
+Konditionals
+Konditionalsätze
+Konditionalsätzen
+Konditionen
+Konditionstraining
+Konditionstrainings
+Konditor
+Konditorei
+Konditoreien
+Konditoren
+Konditors
+Kondolation
+Kondolationen
+Konfekt
+Konfektion
+Konfektionen
+Konfektionierung
+Konfektionär
+Konfektionäre
+Konfektionären
+Konfektionärs
+Konfekts
+Konferenz
+Konferenzbeginn
+Konferenzbeginnes
+Konferenzbeginns
+Konferenzen
+Konferenzende
+Konferenzergebnis
+Konferenzergebnisse
+Konferenzergebnissen
+Konferenzergebnisses
+Konferenzzimmer
+Konfession
+Konfessionen
+Konfetti
+Konfident
+Konfidenten
+Konfiguration
+Konfigurationen
+Konfigurationsbeispiel
+Konfigurationsdatei
+Konfigurationsdateien
+Konfigurationsdaten
+Konfigurationsfile
+Konfigurationsfiles
+Konfigurationsfreiheit
+Konfigurationsfreiheiten
+Konfigurationsgerüst
+Konfigurationskommando
+Konfigurationsparameter
+Konfigurationsphase
+Konfigurationsphasen
+Konfigurationstabelle
+Konfigurationstabellen
+Konfigurierbarkeit
+Konfigurierung
+Konfigurierungen
+Konfirmand
+Konfirmanden
+Konfirmandin
+Konfirmandinnen
+Konfirmation
+Konfirmationen
+Konfiserie
+Konfiszierung
+Konfiszierungen
+Konfitüre
+Konfitüren
+Konflikt
+Konfliktaustragung
+Konfliktbewältigung
+Konflikte
+Konflikten
+Konflikterkennung
+Konfliktfall
+Konfliktfalls
+Konfliktfälle
+Konfliktfällen
+Konfliktgebiet
+Konfliktgeladenheit
+Konfliktlösung
+Konfliktpartei
+Konfliktparteien
+Konfliktpotential
+Konfliktpotentiale
+Konfliktpotentialen
+Konfliktpotentials
+Konfliktpotenzial
+Konfliktpotenziale
+Konfliktpotenzialen
+Konfliktpotenzials
+Konflikts
+Konfliktvermeidung
+Konfluenz
+Konformität
+Konfrontation
+Konfrontationen
+Konfrontierung
+Konfusion
+Konfusionen
+Konfuzianismus
+Konfuzius
+Konglomerat
+Kongo
+Kongolesen
+Kongregation
+Kongregationen
+Kongress
+Kongresse
+Kongressen
+Kongresses
+Kongruenz
+Konjugation
+Konjugationen
+Konjunktion
+Konjunktionen
+Konjunktiv
+Konjunktur
+Konkatenation
+Konklave
+Konklaven
+Konklaves
+Konkordat
+Konkordats
+Konkretisierung
+Konkretisierungen
+Konkubinat
+Konkubinate
+Konkubinaten
+Konkubinats
+Konkurrent
+Konkurrenten
+Konkurrentin
+Konkurrentinnen
+Konkurrenz
+Konkurrenzdruck
+Konkurrenzdrucks
+Konkurrenzen
+Konkurrenzkampf
+Konkurrenzkampfes
+Konkurrenzkampfs
+Konkurrenzkämpfe
+Konkurrenzkämpfen
+Konkurrenzprodukt
+Konkurrenzprodukte
+Konkurrenzprodukten
+Konkurrenzproduktes
+Konkurrenzprodukts
+Konkurrenzsituation
+Konkurrenzsituationen
+Konkurs
+Konkurse
+Konkursen
+Konkurses
+Konnossement
+Konnossemente
+Konnossementen
+Konnossementes
+Konnossements
+Konnotation
+Konnotationen
+Konquistador
+Konquistadoren
+Konrad
+Konrads
+Konsens
+Konsequenz
+Konsequenzen
+Konservatorien
+Konservatorium
+Konservatoriums
+Konserve
+Konserven
+Konservierung
+Konsistenz
+Konsistenzprüfung
+Konsistenzprüfungen
+Konsistorium
+Konsole
+Konsolen
+Konsolidierung
+Konsolidierungsperiode
+Konsolidierungsperioden
+Konsolidierungsphase
+Konsolidierungsphasen
+Konsolschnittstelle
+Konsonant
+Konsorten
+Konsortium
+Konsortiums
+Konsortiumsmitglieder
+Konsortiumsmitgliedern
+Konsortiumstreffen
+Konsortiumstreffens
+Konstantin
+Konstantinopel
+Konstantins
+Konstantstromquelle
+Konstantstromquellen
+Konstanz
+Konstellation
+Konstellationen
+Konstituierung
+Konstitution
+Konstitutionen
+Konstrukt
+Konstrukte
+Konstrukten
+Konstruktes
+Konstrukteur
+Konstrukteure
+Konstrukteuren
+Konstrukteurs
+Konstruktion
+Konstruktionen
+Konstruktor
+Konstruktoren
+Konstruktorfunktion
+Konstruktorfunktionen
+Konstruktors
+Konstrukts
+Konsul
+Konsulat
+Konsulate
+Konsulaten
+Konsulats
+Konsuln
+Konsuls
+Konsultation
+Konsultationen
+Konsum
+Konsument
+Konsumenten
+Konsums
+Kontakt
+Kontaktadresse
+Kontaktadressen
+Kontaktaufnahme
+Kontaktbelegung
+Kontaktbolzen
+Kontaktbronze
+Kontakte
+Kontakten
+Kontaktfeder
+Kontaktfläche
+Kontaktfreude
+Kontaktfähigkeit
+Kontaktgespräch
+Kontaktgüte
+Kontaktiermöglichkeit
+Kontaktiermöglichkeiten
+Kontaktierung
+Kontaktkammern
+Kontakts
+Kontaktsuche
+Kontemplation
+Kontemplationen
+Konten
+Kontext
+Kontextbedingung
+Kontextbedingungen
+Kontexte
+Kontexten
+Kontextes
+Kontinent
+Kontinente
+Kontinenten
+Kontinents
+Kontingent
+Kontingente
+Kontingenten
+Kontingentierung
+Kontingents
+Kontinuum
+Kontinuums
+Konto
+Kontoauszug
+Kontoauszugs
+Kontoauszüge
+Kontoauszügen
+Kontoinhaber
+Kontoinhabern
+Kontoinhabers
+Kontonummer
+Kontonummern
+Kontor
+Kontors
+Kontos
+Kontra
+Kontrahent
+Kontrahenten
+Kontrakt
+Kontrakten
+Kontraktion
+Kontraktionen
+Kontrapunkt
+Kontrapunkts
+Kontrast
+Kontraste
+Kontrasten
+Kontrastes
+Kontrastprogramm
+Kontrastschnitt
+Kontrazeption
+Kontrollcode
+Kontrollcodes
+Kontrolle
+Kontrollen
+Kontrolleur
+Kontrolleure
+Kontrolleuren
+Kontrolleurs
+Kontrollfluss
+Kontrollflussanalyse
+Kontrollflussanalysen
+Kontrollflusses
+Kontrollflüsse
+Kontrollflüssen
+Kontrollmaßnahme
+Kontrollmaßnahmen
+Kontrollmöglichkeit
+Kontrollmöglichkeiten
+Kontrollstruktur
+Kontrollstrukturen
+Kontrollzweck
+Kontrollzwecke
+Kontrollzwecken
+Kontrollzwecks
+Kontur
+Konturen
+Konvektion
+Konvektionen
+Konvent
+Konvente
+Konventen
+Konventes
+Konvention
+Konventionen
+Konvents
+Konvergenz
+Konversation
+Konversationen
+Konversion
+Konversionen
+Konverter
+Konvertern
+Konverters
+Konvertierung
+Konvertierungen
+Konvoi
+Konvois
+Konzentrat
+Konzentrate
+Konzentraten
+Konzentration
+Konzentrationsschwäche
+Konzentrationsschwächen
+Konzentrats
+Konzentrierung
+Konzept
+Konzepte
+Konzepten
+Konzeptes
+Konzeption
+Konzeptionen
+Konzepts
+Konzern
+Konzerne
+Konzernen
+Konzerns
+Konzert
+Konzerte
+Konzerten
+Konzertes
+Konzerts
+Konzession
+Konzessionen
+Konzessionierung
+Konzil
+Konzile
+Konzilen
+Konzilianz
+Konzils
+Konzipierung
+Kooperation
+Kooperationen
+Kooperationsbemühung
+Kooperationsbemühungen
+Kooperationsbereitschaft
+Kooperationspartner
+Kooperationspartnern
+Kooperationspartners
+Kooperationsvertrag
+Kooperationsvertrages
+Kooperationsvertrags
+Kooperationsverträge
+Kooperationsverträgen
+Koordinate
+Koordinaten
+Koordinatenkonvention
+Koordinatenkonventionen
+Koordinatensystem
+Koordinatensysteme
+Koordinatensystemen
+Koordinatensystems
+Koordinatentransformation
+Koordinatentransformationen
+Koordinatenursprung
+Koordinatenursprungs
+Koordinatenverschiebung
+Koordinatenverschiebungen
+Koordinatenwert
+Koordinatenwerte
+Koordinatenwerten
+Koordinatenwertes
+Koordinatenwerts
+Koordination
+Koordinationsstelle
+Koordinationsstellen
+Koordinator
+Koordinierung
+Koordinierungsbedarf
+Koordinierungsbedarfs
+Kopenhagen
+Kopernikanische
+Kopernikanisches
+Kopernikus
+Kopf
+Kopfe
+Kopfes
+Kopfschütteln
+Kopfteil
+Kopfteile
+Kopfteilen
+Kopfteils
+Kopfzerbrechen
+Kopie
+Kopien
+Kopierer
+Koppel
+Koppeln
+Koppelung
+Koppelungen
+Koppler
+Kopplung
+Kopplungen
+Koralle
+Korallen
+Koran
+Korb
+Korbes
+Korbs
+Kordel
+Kordeln
+Korea
+Koreaner
+Koreas
+Korinth
+Korinthen
+Korinther
+Kork
+Korken
+Korkens
+Korn
+Korns
+Korollar
+Korollare
+Korollaren
+Korollars
+Korona
+Korporation
+Korporationen
+Korps
+Korrektheit
+Korrektheitsbegriff
+Korrektheitsbegriffe
+Korrektheitsbegriffen
+Korrektheitsbegriffs
+Korrektheitsbeweis
+Korrektheitsbeweise
+Korrektheitsbeweisen
+Korrektheitsbeweises
+Korrektheitsnachweis
+Korrektheitsnachweise
+Korrektheitsnachweisen
+Korrektheitsnachweises
+Korrektur
+Korrekturen
+Korrekturlesen
+Korrekturmöglichkeit
+Korrekturmöglichkeiten
+Korrekturversuche
+Korrekturversuchen
+Korrelat
+Korrelation
+Korrelationen
+Korrelationsanalyse
+Korrelationsanalysen
+Korrelationsfeld
+Korrelator
+Korrelators
+Korrespondent
+Korrespondenten
+Korrespondentin
+Korrespondentinnen
+Korrespondenz
+Korrespondenzen
+Korridor
+Korridore
+Korridoren
+Korridors
+Korrigierbarkeit
+Korrosion
+Korrumpierung
+Korruption
+Korse
+Korselett
+Korsen
+Korsett
+Korsetts
+Korso
+Korvette
+Korvetten
+Kosak
+Kosaken
+Kosinus
+Kosmetik
+Kosmetika
+Kosmetiker
+Kosmetikerin
+Kosmetikerinnen
+Kosmetikern
+Kosmetikers
+Kosmologe
+Kosmologen
+Kosmologie
+Kosmos
+Kost
+Kostbarkeit
+Kostbarkeiten
+Kosten
+Kostprobe
+Kostproben
+Kostüm
+Kostüme
+Kostümen
+Kostüms
+Kot
+Kotelett
+Kotelette
+Koteletten
+Koteletts
+Kots
+Krabbe
+Krabben
+Krach
+Kracherl
+Krachs
+Kraft
+Kraftakt
+Kraftanstrengung
+Kraftaufwand
+Kraftausdruck
+Kraftausdrucks
+Kraftausdrücke
+Kraftausdrücken
+Kraftentfaltung
+Kraftfeld
+Kraftfelder
+Kraftfelds
+Kraftprobe
+Kraftproben
+Kraftstoff
+Kraftstoffe
+Kraftstoffen
+Kraftstoffs
+Kraftwerk
+Kraftwerke
+Kraftwerken
+Kraftwerks
+Kragen
+Kragens
+Krakau
+Krakeeler
+Krakeelers
+Kralle
+Krallen
+Kram
+Krampf
+Krams
+Kran
+Krankheit
+Krankheiten
+Krans
+Kranz
+Kranzes
+Krapfen
+Krater
+Kratern
+Kraters
+Kratzer
+Kratzern
+Kratzers
+Krauler
+Kraut
+Krautes
+Krauthäupl
+Krawall
+Krawalle
+Krawallen
+Krawalls
+Krawatte
+Krawatten
+Kraxelei
+Kraxeleien
+Kreation
+Kreationen
+Kreativität
+Kreatur
+Kreaturen
+Krebs
+Krebse
+Krebsen
+Krebses
+Kredit
+Kredite
+Krediten
+Kredits
+Krefeld
+Kreis
+Kreisabschnitt
+Kreisabschnitte
+Kreisabschnitten
+Kreisabschnitts
+Kreisbahn
+Kreisbahnen
+Kreisbogen
+Kreisbogens
+Kreisbögen
+Kreise
+Kreisel
+Kreiseln
+Kreisels
+Kreisen
+Kreises
+Kreislauf
+Kreislaufes
+Kreislaufs
+Kreislinie
+Kreislinien
+Kreisläufe
+Kreisläufen
+Kreißsaal
+Krem
+Krematorium
+Kreme
+Kreml
+Krempe
+Krempel
+Krempels
+Krempen
+Krems
+Kren
+Kreole
+Kreolen
+Krepp
+Krepppapier
+Krepppapieren
+Krepppapiers
+Krepps
+Kresse
+Kreta
+Kreuz
+Kreuzberg
+Kreuzchen
+Kreuzchens
+Kreuze
+Kreuzen
+Kreuzer
+Kreuzern
+Kreuzers
+Kreuzes
+Kreuzigung
+Kreuzigungen
+Kreuzprodukt
+Kreuzprodukte
+Kreuzprodukten
+Kreuzprodukts
+Kreuzung
+Kreuzungen
+Kreuzungspunkt
+Kreuzungspunkte
+Kreuzungspunkten
+Kreuzungspunktes
+Kreuzungspunkts
+Kreuzverhör
+Kreuzverhöre
+Kreuzverhören
+Kreuzverhörs
+Kreuzverweis
+Kreuzverweise
+Kreuzverweisen
+Kreuzverweises
+Kricket
+Krieg
+Krieger
+Kriegern
+Krieges
+Kriegs
+Krim
+Krimi
+Kriminalist
+Kriminalisten
+Kriminalität
+Kriminologie
+Krimis
+Krimsekt
+Krimskrams
+Krippe
+Krippen
+Krise
+Krisen
+Krishna
+Krishnas
+Kristall
+Kristalle
+Kristallen
+Kristallisation
+Kristalls
+Kriterien
+Kriterium
+Kriteriums
+Kritik
+Kritiken
+Kritiker
+Kritikerin
+Kritikerinnen
+Kritikern
+Kritikers
+Kritikpunkt
+Kritikpunkte
+Kritikpunkten
+Kritikpunktes
+Kritikpunkts
+Kritzelei
+Kritzeleien
+Kroaten
+Krokodil
+Krokodile
+Krokodilen
+Krokodils
+Krone
+Kronen
+Kronzeuge
+Kronzeugen
+Krug
+Kruges
+Krugs
+Krume
+Krumen
+Kruste
+Krusten
+Kruzifix
+Kruzifixe
+Kruzifixen
+Kruzifixes
+Kryptographie
+Kräfte
+Kräftebedarf
+Kräftegleichgewicht
+Kräften
+Kräftepotential
+Kräftepotentiale
+Kräftepotentialen
+Kräftepotentials
+Kräftepotenzial
+Kräftepotenziale
+Kräftepotenzialen
+Kräftepotenzials
+Kräftespiel
+Kräftevergleich
+Kräfteverschiebung
+Kräfteverteilung
+Krägen
+Krähe
+Krähen
+Krämer
+Krämerladen
+Krämerladens
+Krämpfe
+Krämpfen
+Kränkung
+Kränze
+Kränzen
+Krätze
+Krätzer
+Krätzers
+Kräuter
+Kräutern
+Krönung
+Krönungen
+Kröte
+Kröten
+Krücke
+Krücken
+Krückstock
+Krückstocks
+Krüge
+Krügen
+Krüger
+Krügerrand
+Krügerrands
+Krügers
+Krüglein
+Krügleins
+Krümchen
+Krümchens
+Krümel
+Krümeln
+Krümels
+Krümmung
+Krümmungen
+Kuba
+Kubaner
+Kubanerin
+Kubanerinnen
+Kubanern
+Kubaners
+Kubas
+Kubikmeter
+Kubikmetern
+Kubikzentimeter
+Kubikzentimetern
+Kubismus
+Kubus
+Kuchen
+Kuchens
+Kuckuck
+Kufe
+Kufen
+Kugel
+Kugelschreiber
+Kugelschreibern
+Kuh
+Kukuruz
+Kulanz
+Kuli
+Kulis
+Kulisse
+Kulissen
+Kult
+Kulte
+Kulten
+Kultes
+Kults
+Kultur
+Kulturen
+Kummer
+Kummers
+Kumpan
+Kumpane
+Kumpanen
+Kumpans
+Kumpel
+Kumpeln
+Kumpels
+Kumulation
+Kumulierung
+Kunde
+Kunden
+Kundenbetreuung
+Kundendienst
+Kundendienste
+Kundendiensten
+Kundendienstes
+Kundensoftware
+Kundenwunsch
+Kundenwunsches
+Kundenwünsche
+Kundenwünschen
+Kundgebung
+Kundgebungen
+Kundin
+Kundinnen
+Kundschaft
+Kundschaften
+Kunibert
+Kuniberts
+Kunst
+Kunstgriff
+Kunstgriffs
+Kunstpause
+Kunstpausen
+Kunstwerk
+Kunstwerke
+Kunstwerken
+Kunstwerks
+Kunz
+Kupee
+Kupfer
+Kupfers
+Kupon
+Kupons
+Kuppe
+Kuppel
+Kuppelei
+Kuppeln
+Kuppen
+Kupplung
+Kupplungen
+Kur
+Kurbel
+Kurde
+Kurden
+Kurfürstendamm
+Kurie
+Kurier
+Kuriere
+Kurieren
+Kuriers
+Kuriosum
+Kurs
+Kurse
+Kursen
+Kurses
+Kursor
+Kursus
+Kurtisane
+Kurtisanen
+Kurve
+Kurven
+Kurvenform
+Kurvenformen
+Kurzanleitung
+Kurzbericht
+Kurzberichte
+Kurzberichten
+Kurzberichts
+Kurzbeschreibung
+Kurzbeschreibungen
+Kurzbezeichnung
+Kurzbezeichnungen
+Kurzdarstellung
+Kurzdarstellungen
+Kurzdokumentation
+Kurzdokumentationen
+Kurzfassung
+Kurzfassungen
+Kurzform
+Kurzformen
+Kurzschließens
+Kurzschluss
+Kurzschlussadapter
+Kurzschlusserkennung
+Kurzschlusses
+Kurzschlussströme
+Kurzschlüsse
+Kurzschlüssen
+Kurzschreibweise
+Kurzschreibweisen
+Kurzsichtigkeit
+Kurzwelle
+Kurzwellen
+Kusine
+Kusinen
+Kuss
+Kusses
+Kusshand
+Kutsche
+Kutschen
+Kutscher
+Kutschern
+Kutschers
+Kuvert
+Kuverts
+Kuwait
+Kybernetik
+Kybernetiker
+Kybernetikern
+Kybernetikers
+Käfer
+Käfern
+Käfers
+Käfig
+Käfige
+Käfigen
+Käfigs
+Kähne
+Kähnen
+Kälber
+Kälbern
+Kälte
+Kämmerchen
+Kämmerchens
+Kämmerei
+Kämmerer
+Kämmerern
+Kämmerers
+Kämpfer
+Kämpferin
+Kämpferinnen
+Kämpfern
+Kämpfers
+Känguru
+Kängurus
+Kärnten
+Käse
+Käserei
+Käsereien
+Käses
+Kästchen
+Kästchens
+Kästen
+Käufe
+Käufen
+Käufer
+Käuferin
+Käuferinnen
+Käuferkreis
+Käuferkreise
+Käuferkreisen
+Käuferkreises
+Käufern
+Käufers
+Käuferschicht
+Käuferschichten
+Käufqqlichkeit
+Köche
+Köchen
+Köcher
+Köchern
+Köchers
+Köchin
+Köchinnen
+Köder
+Ködern
+Köders
+Köln
+Kölner
+Kölnerin
+Kölnerinnen
+Kölnern
+Kölners
+König
+Könige
+Königen
+Königgrätz
+Königin
+Königinnen
+Königs
+Königsberg
+Königsweg
+Königswege
+Königswegen
+Königswegs
+Könnens
+Könner
+Könnern
+Könners
+Köpenick
+Köpenicks
+Körbchen
+Körbchens
+Körbe
+Körben
+Körnchen
+Körnchens
+Körndlbauer
+Körndlbauern
+Körndlbauers
+Körner
+Körnung
+Körper
+Körperbau
+Körperbaues
+Körperbaus
+Körpern
+Körpers
+Körperschaft
+Körperschaften
+Körpersprache
+Körperteil
+Körperteile
+Körperteilen
+Körperteils
+Köstlichkeit
+Köter
+Kötern
+Köters
+Kübel
+Kübeln
+Küche
+Küchen
+Küchenschabe
+Küchenschaben
+Kücken
+Kückens
+Kügelchen
+Kügelchens
+Kühe
+Kühen
+Kühlung
+Kühlungen
+Kühnheit
+Küken
+Kükens
+Kümmerdasein
+Künder
+Kündigung
+Künste
+Künsten
+Künstler
+Künstlerin
+Künstlerinnen
+Künstlern
+Künstlerpech
+Künstlers
+Künstlertum
+Künstlertums
+Kürbis
+Kürbisse
+Kürbissen
+Kürbisses
+Kürschner
+Kürschnerin
+Kürschnerinnen
+Kürschnern
+Kürschners
+Kürzel
+Kürzeln
+Kürzels
+Kürzung
+Kürzungsbemühung
+Kürzungsbemühungen
+Kürzungsklausel
+Kürzungsmöglichkeit
+Kürzungsmöglichkeiten
+Kürzungsvorschlag
+Kürzungsvorschlages
+Kürzungsvorschlags
+Kürzungsvorschläge
+Kürzungsvorschlägen
+Kürzungswünsche
+Kürzungswünschen
+Küsschen
+Küsschens
+Küste
+Küsten
+Küster
+Küstern
+Küsters
+LAN
+LED
+LEDS
+LKW
+LKWS
+LSD
+LSI
+LZW
+LaTeX
+Labor
+Laborant
+Laboranten
+Laboratorien
+Laboratorium
+Laborbedingung
+Laborbedingungen
+Laborbetrieb
+Labore
+Laboren
+Labors
+Labrador
+Labung
+Labyrinth
+Labyrinthe
+Labyrinthen
+Labyrinthes
+Labyrinths
+Lachens
+Lacher
+Lacherfolg
+Lachern
+Lachers
+Lachs
+Lachsalve
+Lachsalven
+Lachse
+Lachsen
+Lachses
+Lack
+Lacke
+Lacken
+Lackes
+Lackierung
+Lackierungen
+Lacks
+Lackschicht
+Lackschichten
+Lacoste
+Ladediskette
+Ladedisketten
+Ladefile
+Ladefiles
+Laden
+Ladens
+Ladeoperation
+Ladeoperationen
+Ladeprogramm
+Ladeprogramme
+Ladeprogrammen
+Ladeprogramms
+Ladeprozessor
+Ladeprozessoren
+Ladeprozessors
+Lader
+Laderampe
+Laderampen
+Ladesoftware
+Ladestation
+Ladestationen
+Ladung
+Ladungen
+Ladungsträger
+Ladungsträgern
+Ladungsträgers
+Lady
+Ladys
+Lafette
+Lafetten
+Lage
+Lagebeurteilung
+Lagebeurteilungen
+Lagegespräch
+Lagegespräche
+Lagegesprächen
+Lagegesprächs
+Lagen
+Lageplan
+Lageplanes
+Lageplans
+Lagepläne
+Lageplänen
+Lager
+Lagern
+Lagers
+Lagerung
+Lagerungen
+Lageverschiebung
+Lageverschiebungen
+Lago
+Lagos
+Lagune
+Lagunen
+Lahr
+Laib
+Laibe
+Laibes
+Laibs
+Laie
+Laien
+Laientum
+Lakai
+Lakaien
+Laken
+Lakens
+Lakritze
+Lakritzen
+Lama
+Lamas
+Lamborghini
+Lamee
+Lamelle
+Lamellen
+Lametta
+Lamm
+Lammes
+Lamms
+Lampe
+Lampen
+Lamé
+Lamés
+Lancaster
+Land
+Landau
+Landes
+Landesmittel
+Landesmitteln
+Landessprache
+Landessprachen
+Landesteil
+Landesteile
+Landesteilen
+Landesteils
+Landkarte
+Landkarten
+Landrover
+Landschaft
+Landschaften
+Landshut
+Landstraße
+Landstraßen
+Landstreicher
+Landstrich
+Landstriche
+Landstrichen
+Landstrichs
+Landung
+Landungen
+Landungsbrücke
+Landungsbrücken
+Landwirt
+Landwirte
+Landwirten
+Landwirtes
+Landwirts
+Landwirtschaft
+Landwirtschaften
+Langeweile
+Langmut
+Langobarde
+Langsamkeit
+Langstrecke
+Langstrecken
+Languedoc
+Languste
+Langusten
+Langwierigkeit
+Langwierigkeiten
+Langzeit
+Lanka
+Lanzarote
+Lanze
+Lanzen
+Laos
+Lappen
+Lappens
+Lappland
+Lapplands
+Laptop
+Laptops
+Lars
+Larve
+Larven
+Lasche
+Laschen
+Laser
+Laserdisk
+Laserdisks
+Laserdrucker
+Laserdruckern
+Laserdruckers
+Lasern
+Laserprinter
+Lasers
+Laserstrahl
+Laserstrahlen
+Lasso
+Lassos
+Last
+Lastenheft
+Lastenhefte
+Lastenheften
+Lastenhefts
+Laster
+Lastern
+Lasters
+Lastverteilung
+Lastverteilungen
+Lastwagen
+Lastwagens
+Latein
+Lateiner
+Lateins
+Lateran
+Laterne
+Laternen
+Latex
+Latifundien
+Latifundium
+Latifundiums
+Latinum
+Latte
+Latten
+Latwerge
+Latwergen
+Latz
+Latzes
+Laub
+Laubes
+Laubs
+Lauch
+Lauches
+Lauer
+Lauerstellung
+Lauf
+Laufbahn
+Laufens
+Laufqqfeuer
+Laufs
+Laufschrift
+Laufschriften
+Laufsteg
+Laufwerk
+Laufwerke
+Laufwerken
+Laufwerkes
+Laufwerks
+Laufzeit
+Laufzeiten
+Laufzeitfehler
+Laufzeitfehlern
+Laufzeitfehlers
+Laufzeitmessung
+Laufzeitsystem
+Laufzeitsysteme
+Laufzeitsystemen
+Laufzeitsystems
+Laufzeitunterschied
+Laufzeitunterschiede
+Laufzeitunterschieden
+Laufzeitunterschieds
+Laufzeitverhalten
+Laufzeitverhaltens
+Laune
+Launen
+Laus
+Lausbubenstreich
+Laut
+Lautschrift
+Lautschriften
+Lautsprecher
+Lautsprechern
+Lautsprechers
+Lautstärke
+Lautstärken
+Lava
+Lavendel
+Lawine
+Lawinen
+Layout
+Layouts
+Lazarett
+Lear
+Lears
+Leasing
+Lebendigkeit
+Lebens
+Lebensabend
+Lebensabende
+Lebensabenden
+Lebensabends
+Lebensabschnitt
+Lebensalter
+Lebensaufgabe
+Lebensaufgaben
+Lebensbedarf
+Lebensbedarfs
+Lebensbedingung
+Lebensbedingungen
+Lebensbereich
+Lebensbereiche
+Lebensbereichen
+Lebensbereichs
+Lebensdaten
+Lebensdauer
+Lebensdauern
+Lebenserfahrung
+Lebenserfahrungen
+Lebenserwartung
+Lebenserwartungen
+Lebensform
+Lebensformen
+Lebensfreude
+Lebensfreuden
+Lebensführung
+Lebensgefahr
+Lebensgefahren
+Lebensgefährte
+Lebensgefährten
+Lebensgefährtin
+Lebensgefährtinnen
+Lebensgefühl
+Lebensjahr
+Lebenslauf
+Lebenslaufes
+Lebenslaufs
+Lebensläufe
+Lebensläufen
+Lebensmittel
+Lebensmitteln
+Lebensmut
+Lebensnerv
+Lebensnotwendigkeit
+Lebenspartner
+Lebensqualität
+Lebensraum
+Lebensraumes
+Lebensraums
+Lebensregel
+Lebensregeln
+Lebensräume
+Lebensräumen
+Lebenssinn
+Lebensspanne
+Lebensspannen
+Lebensstadium
+Lebensstandard
+Lebensstandards
+Lebensstil
+Lebensstils
+Lebenstraum
+Lebenstraumes
+Lebenstraums
+Lebensträume
+Lebensträumen
+Lebensunterhalt
+Lebensunterhalte
+Lebensunterhalten
+Lebensunterhaltes
+Lebensunterhalts
+Lebensverhältnis
+Lebensverhältnisse
+Lebensverhältnissen
+Lebensverhältnisses
+Lebenswandel
+Lebenswandeln
+Lebenswandels
+Lebensweg
+Lebensweges
+Lebenswegs
+Lebensweise
+Lebensweisen
+Lebensweisheit
+Lebensweisheiten
+Lebenswerk
+Lebenswerke
+Lebenswerken
+Lebenswerkes
+Lebenswille
+Lebenswillen
+Lebenszeichen
+Lebenszeichens
+Lebensziel
+Lebensziele
+Lebenszielen
+Lebenszieles
+Lebensäußerung
+Leber
+Lebewesen
+Lebewesens
+Lebewohl
+Lebhaftigkeit
+Lebzeiten
+Lech
+Lechs
+Leck
+Leckerbissen
+Leckerbissens
+Lecks
+Leckströme
+Leder
+Leders
+Leertaste
+Leerung
+Leerungen
+Leerzeichen
+Leerzeichens
+Leerzeile
+Leerzeilen
+Legalisierung
+Legierung
+Legierungen
+Legion
+Legionen
+Legionär
+Legionäre
+Legionären
+Legionärs
+Legislatur
+Legitimation
+Legitimationen
+Legitimationsbasis
+Legitimationsdefizit
+Legitimationsdefizits
+Legitimität
+Leguan
+Leguane
+Leguanen
+Leguans
+Lehm
+Lehms
+Lehnsherr
+Lehnsherren
+Lehnsherrn
+Lehnsmann
+Lehnsmanns
+Lehramt
+Lehrauftrag
+Lehrauftrages
+Lehrauftrags
+Lehraufträge
+Lehraufträgen
+Lehrbefähigung
+Lehrbetrieb
+Lehrbuch
+Lehrbücher
+Lehrbüchern
+Lehrens
+Lehrer
+Lehrerin
+Lehrerinnen
+Lehrern
+Lehrers
+Lehrerschaft
+Lehrgang
+Lehrgangs
+Lehrgeld
+Lehrgänge
+Lehrgängen
+Lehrinhalt
+Lehrinhalte
+Lehrinhalten
+Lehrinhalts
+Lehrjahr
+Lehrjahre
+Lehrjahren
+Lehrjahres
+Lehrkraft
+Lehrkräfte
+Lehrkräften
+Lehrkörper
+Lehrkörpern
+Lehrkörpers
+Lehrling
+Lehrlinge
+Lehrlingen
+Lehrlings
+Lehrmeinung
+Lehrmeinungen
+Lehrmethode
+Lehrmethoden
+Lehrmittel
+Lehrmitteln
+Lehrmittels
+Lehrperson
+Lehrpersonen
+Lehrplan
+Lehrplans
+Lehrpläne
+Lehrplänen
+Lehrsatz
+Lehrsatzes
+Lehrstelle
+Lehrstellen
+Lehrstuhl
+Lehrstuhles
+Lehrstuhls
+Lehrstück
+Lehrstühle
+Lehrstühlen
+Lehrsätze
+Lehrsätzen
+Lehrtätigkeit
+Lehrtätigkeiten
+Lehrveranstaltung
+Lehrveranstaltungen
+Lehrzeit
+Lehrzeiten
+Lehrzweck
+Lehrzwecke
+Lehrzwecken
+Lehrzwecks
+Lehrämter
+Leib
+Leibe
+Leiber
+Leibern
+Leibes
+Leibniz
+Leibs
+Leica
+Leiche
+Leichen
+Leichnam
+Leichnams
+Leichtgläubigkeit
+Leichtigkeit
+Leichtsinn
+Leichtsinnes
+Leichtsinnigkeit
+Leichtsinns
+Leid
+Leidenschaft
+Leidenschaften
+Leidensweg
+Leides
+Leidwesen
+Leidwesens
+Leier
+Leim
+Leine
+Leinen
+Leintuch
+Leintücher
+Leinwand
+Leipzig
+Leistung
+Leistungen
+Leistungsabbau
+Leistungsabfall
+Leistungsabfalls
+Leistungsangebot
+Leistungsansprüche
+Leistungsansprüchen
+Leistungsanstieg
+Leistungsanzeige
+Leistungsanzeigen
+Leistungsaufnahme
+Leistungsbedarf
+Leistungsbereitschaft
+Leistungsbeschreibung
+Leistungsbewertung
+Leistungsbilanz
+Leistungsdaten
+Leistungsdruck
+Leistungsfreude
+Leistungsfähigkeit
+Leistungsgefälle
+Leistungsgrenze
+Leistungsgrenzen
+Leistungsklasse
+Leistungsklassen
+Leistungskraft
+Leistungsmerkmal
+Leistungsmerkmale
+Leistungsmerkmalen
+Leistungsmerkmals
+Leistungsmessung
+Leistungsmöglichkeit
+Leistungsmöglichkeiten
+Leistungsniveau
+Leistungsprinzip
+Leistungsprinzips
+Leistungsprüfung
+Leistungsprüfungen
+Leistungssteigerung
+Leistungssteigerungen
+Leistungsstufe
+Leistungsstufen
+Leistungstief
+Leistungstreiber
+Leistungsumfang
+Leistungsumfanges
+Leistungsumfangs
+Leistungsverbesserung
+Leistungsverbesserungen
+Leistungsverfall
+Leistungsverhältnis
+Leistungsverhältnisse
+Leistungsverhältnissen
+Leistungsverhältnisses
+Leistungsvermögen
+Leistungsvermögens
+Leistungswille
+Leistungswillen
+Leistungszentrum
+Leistungsziel
+Leitartikel
+Leitartikeln
+Leitbild
+Leitbilder
+Leitbildern
+Leitbildes
+Leitbuchstabe
+Leitbuchstaben
+Leiter
+Leiterbahn
+Leiterbahnen
+Leitern
+Leiterplatte
+Leiterplatten
+Leiterplattenbereichen
+Leiterplattenversion
+Leiterplattenversionen
+Leiterplattenzuschnitt
+Leiters
+Leitfaden
+Leitfadens
+Leitfigur
+Leitfrage
+Leitfragen
+Leitfäden
+Leitfähigkeit
+Leitfähigkeiten
+Leitgedanke
+Leitgedanken
+Leithammel
+Leitidee
+Leitideen
+Leitleine
+Leitleinen
+Leitlinie
+Leitlinien
+Leitmotiv
+Leitmotive
+Leitmotiven
+Leitmotivs
+Leitseite
+Leitseiten
+Leitstelle
+Leitstellen
+Leitsätze
+Leitsätzen
+Leitung
+Leitungen
+Leitungsbruch
+Leitungsfehler
+Leitungslänge
+Leitungslängen
+Leitungsmasten
+Leitungsnetz
+Leitwort
+Leitzahl
+Lektion
+Lektionen
+Lektor
+Lektoren
+Lektorin
+Lektorinnen
+Lektors
+Lektüre
+Lemma
+Lemmas
+Lemmata
+Lemming
+Lemminge
+Lemmingen
+Lemmings
+Lende
+Lenden
+Lenin
+Leningrad
+Lenins
+Lenkrad
+Lenkrads
+Lenkung
+Lenkungen
+Lenz
+Lenze
+Lenzen
+Leonore
+Leonores
+Leopard
+Leoparden
+Leopold
+Leopolds
+Leporello
+Leporellos
+Lepra
+Lerche
+Lerchen
+Lernbegierde
+Lernens
+Lernfähigkeit
+Lernmaterial
+Lernmethode
+Lernmethoden
+Lernprozess
+Lernprozesse
+Lernprozessen
+Lernprozesses
+Lernvorgang
+Lernvorganges
+Lernvorgangs
+Lernvorgänge
+Lernvorgängen
+Lernzeit
+Lernziel
+Lesart
+Lesbarkeit
+Lesbierin
+Lesbierinnen
+Leseadresse
+Leseadressen
+Lesegerät
+Lesegeräte
+Lesegeräten
+Lesegeräts
+Lesekopf
+Lesens
+Leser
+Leserbrief
+Leserbriefe
+Leserbriefen
+Leserbriefs
+Leseregister
+Leseregisters
+Leserin
+Leserinnen
+Leserkreis
+Leserkreise
+Leserkreisen
+Leserkreises
+Lesern
+Lesers
+Leserschaft
+Lesesaal
+Lesezugriff
+Lessing
+Lessings
+Lesung
+Lesungen
+Lethargie
+Lette
+Letten
+Lettland
+Leuchtanzeige
+Leuchtanzeigen
+Leuchtdiode
+Leuchtdioden
+Leuchtdiodenfunktion
+Leuchtdiodenfunktionen
+Leuchtdiodenkontrolle
+Leuchter
+Leuchtkraft
+Leuchtpin
+Leuchtpins
+Leuchtpunkt
+Leuchtpunkte
+Leuchtpunkten
+Leuchtpunktes
+Leuchtpunkts
+Leuchtzeichen
+Leuchtzeichens
+Leukoplast
+Leukoplaste
+Leukoplasten
+Leukoplasts
+Leumund
+Leumundes
+Leute
+Leuten
+Leutnant
+Leverkusen
+Lexika
+Lexikon
+Liaison
+Liaisons
+Liane
+Lianen
+Libanon
+Libelle
+Libellen
+Liberalisierung
+Liberalität
+Libertinage
+Libertinagen
+Libyen
+Libyer
+Libyerin
+Libyerinnen
+Libyern
+Libyers
+Licht
+Lichtbild
+Lichtbilder
+Lichtbildern
+Lichtbildes
+Lichtblick
+Lichtblicke
+Lichtblicken
+Lichtblicks
+Lichtchen
+Lichtchens
+Lichter
+Lichtern
+Lichtleiter
+Lichtleitern
+Lichtleiters
+Lichts
+Lichtung
+Lid
+Lider
+Lidern
+Lides
+Lido
+Lidos
+Lids
+Liebelei
+Liebeleien
+Liebenswürdigkeit
+Liebhaber
+Liebhaberei
+Liebhaberin
+Liebhaberinnen
+Liebhabern
+Liebhabers
+Lieblichkeit
+Liebling
+Lieblinge
+Lieblingen
+Lieblings
+Lieblosigkeit
+Lieblosigkeiten
+Liebreiz
+Liebreizes
+Liebschaft
+Liebschaften
+Liechtenstein
+Liechtensteiner
+Liechtensteinerin
+Liechtensteinerinnen
+Liechtensteinern
+Liechtensteiners
+Lied
+Liedchen
+Liedchens
+Lieder
+Liedern
+Liedes
+Lieds
+Lieferant
+Lieferanten
+Lieferbedingung
+Lieferbedingungen
+Lieferbestätigung
+Lieferdatum
+Lieferfähigkeit
+Lieferkonditionen
+Liefermenge
+Liefermengen
+Liefermöglichkeit
+Liefermöglichkeiten
+Lieferproblem
+Lieferprobleme
+Lieferproblemen
+Lieferproblems
+Lieferrückstand
+Lieferschein
+Lieferscheine
+Lieferscheinen
+Lieferscheins
+Lieferschwierigkeit
+Lieferschwierigkeiten
+Liefertermin
+Liefertermine
+Lieferterminen
+Liefertermins
+Lieferumfang
+Lieferung
+Lieferungen
+Lieferzeit
+Lieferzeiten
+Liegenschaft
+Liegenschaften
+Lift
+Liftes
+Lifts
+Liga
+Ligatur
+Ligaturen
+Likör
+Liköre
+Likören
+Likörs
+Lilie
+Lilien
+Liliput
+Liliputaner
+Liliputs
+Lille
+Lima
+Limerick
+Limes
+Limit
+Limitation
+Limitationen
+Limonade
+Limonaden
+Lincoln
+Lincolns
+Lindau
+Lindbergh
+Lindberghs
+Linde
+Linden
+Linderung
+Lineal
+Lineale
+Linealen
+Lineals
+Linearisierung
+Linearisierungen
+Linearität
+Linefeed
+Lineprinter
+Linguistik
+Linie
+Linien
+Linkshänder
+Linkshändern
+Linkshänders
+Linnen
+Linse
+Linsen
+Linus
+Linux
+Linz
+Lippe
+Lippen
+Lippenbekenntnis
+Lippenbekenntnisse
+Lippenbekenntnissen
+Lippenbekenntnisses
+Lippenstift
+Lippenstifte
+Lippenstiften
+Lippenstiftes
+Liquidation
+Liquidationen
+Liquidator
+Liquidatoren
+Liquidität
+Lire
+Lisa
+Lisas
+Lisbeth
+Lisbeths
+Lisp
+List
+Listbefehl
+Liste
+Listen
+Listenoperation
+Listenoperationen
+Listenpreis
+Listenpreise
+Listenpreisen
+Listenpreises
+Listenverarbeitungsfunktion
+Listenverarbeitungsfunktionen
+Litauen
+Liter
+Literat
+Literaten
+Literatur
+Literaturarchiv
+Literaturauswahl
+Literaturhinweis
+Literaturhinweise
+Literaturhinweisen
+Literaturhinweises
+Literaturrecherche
+Literaturrecherchen
+Literaturstudie
+Literaturstudien
+Literaturverzeichnis
+Literaturverzeichnisse
+Literaturverzeichnissen
+Literaturverzeichnisses
+Litern
+Liters
+Litfaßsäule
+Litfaßsäulen
+Lithium
+Lithiumbatterie
+Lithiumbatterien
+Lithografie
+Lithografien
+Lithographie
+Lithographien
+Litowsk
+Liturgie
+Litze
+Litzen
+Liverpool
+Liverpools
+Livingstone
+Livingstones
+Livland
+Liz
+Lizenz
+Lizenzen
+Lizenziat
+Lloyd
+Lloyds
+Lob
+Lobby
+Lobbyist
+Lobbyisten
+Lobbys
+Lobes
+Lobeswort
+Lobesworte
+Lobesworten
+Lobesworts
+Lobgesang
+Lobgesangs
+Lobgesänge
+Lobgesängen
+Lobhudelei
+Loblied
+Loblieder
+Lobpreisung
+Lobs
+Lobspruch
+Lobsprüche
+Lobsprüchen
+Loch
+Loches
+Lochkarten
+Lochkartenanlage
+Lochs
+Lochstreifen
+Lochstreifens
+Lochung
+Lockerung
+Lockheed
+Lockmittel
+Lockmitteln
+Lockung
+Lockungen
+Lockvogel
+Lodenmantel
+Logarithmierung
+Logarithmus
+Logbuch
+Logenplatz
+Loggia
+Loggien
+Logik
+Logikbaustein
+Logiken
+Logiker
+Logikern
+Logikers
+Logikprogrammierung
+Logis
+Logistik
+Logo
+Logopäde
+Logopäden
+Lohn
+Loire
+Lok
+Lokal
+Lokalität
+Lokalitäten
+Lokalkolorit
+Lokals
+Lokaltermin
+Lokomotive
+Lokomotiven
+Loks
+Lolita
+Lolitas
+Lollobrigida
+Lollobrigidas
+Lombarde
+Lombardei
+Lombarden
+London
+Londoner
+Londonern
+Londons
+Lorbeer
+Lorbeerbaum
+Lorbeerbaumes
+Lorbeerbaums
+Lorbeerblatt
+Lorbeerbäume
+Lorbeerbäumen
+Lorbeeren
+Lorbeers
+Lord
+Lords
+Lore
+Loreley
+Loren
+Los
+Lose
+Losen
+Losentscheid
+Losentscheidung
+Loses
+Losglück
+Loslösung
+Losnummer
+Losung
+Losungen
+Lot
+Lotabdeckung
+Lote
+Loten
+Lotes
+Lothar
+Lothars
+Lothringen
+Lotos
+Lotosblüte
+Lotosblüten
+Lotrechte
+Lottchen
+Lottchens
+Lotte
+Lottes
+Lotto
+Louis
+Lourdes
+Louvre
+Lovestory
+Lovestorys
+Lowpegel
+Loyalität
+Ltd
+Luchs
+Luchses
+Luder
+Ludwig
+Ludwigs
+Ludwigshafen
+Luft
+Lufthansa
+Lug
+Lugano
+Lugs
+Luke
+Luken
+Lukullismen
+Lumpen
+Lunge
+Lungen
+Lungenbraten
+Lunte
+Lunten
+Lupe
+Lupen
+Lust
+Lustgefühl
+Lustgefühle
+Lustgefühles
+Lustgefühls
+Lustigkeit
+Luther
+Luthers
+Luxemburg
+Luxemburger
+Luxemburgern
+Luxus
+Luzifer
+Luzifers
+Lydien
+Lymphozyt
+Lymphozyten
+Lynchjustiz
+Lyrik
+Lyriker
+Lyzeum
+Lyzeums
+Lächerlichkeit
+Lächerlichkeiten
+Läden
+Lähmung
+Lähmungen
+Lämmer
+Lämmern
+Lämpchen
+Lämpchens
+Länder
+Ländern
+Ländler
+Länge
+Längen
+Längsrichtung
+Lärm
+Lärms
+Lässigkeit
+Lästerung
+Läufe
+Läufen
+Läufer
+Läuferin
+Läuferinnen
+Läufern
+Läufers
+Läuse
+Läusen
+Läuterung
+Löcher
+Löffel
+Löffeln
+Löffels
+Löffqqler
+Löschens
+Löschung
+Löslichkeit
+Löss
+Lösse
+Lössen
+Lösses
+Lösung
+Lösungen
+Lösungsansatz
+Lösungsansatzes
+Lösungsansätze
+Lösungsansätzen
+Lösungsmöglichkeit
+Lösungsmöglichkeiten
+Lösungsprinzip
+Lösungsvorschlag
+Lösungsvorschlages
+Lösungsvorschlags
+Lösungsvorschläge
+Lösungsvorschlägen
+Lösungswettbewerb
+Lötaugen
+Lötbatzen
+Lötbrücken
+Lötfehler
+Lötkolben
+Lötpin
+Lötpins
+Lötpumpe
+Lötpunkt
+Lötseite
+Lötstelle
+Lötstellen
+Lötstift
+Lötung
+Lötungen
+Lötverbindung
+Lötversion
+Lötversionen
+Lötvorrichtung
+Lötvorrichtungen
+Löwe
+Löwen
+Löwenanteil
+Löwenanteils
+Löwin
+Löwinnen
+Löß
+Löße
+Lößen
+Lößes
+Lübeck
+Lücke
+Lücken
+Lückenbüßer
+Lückenlosigkeit
+Lüftchen
+Lüftchens
+Lüftung
+Lügerei
+Lügner
+Lügnerin
+Lügnerinnen
+Lügnern
+Lügners
+Lümmel
+Lüneburg
+Lüste
+Lüsten
+Lüsterklemme
+Lüsterklemmen
+Lüttich
+MAD
+MB
+MBB
+MByte
+MHz
+MITI
+MPEG
+MSDOS
+Maar
+Maare
+Maas
+Maastricht
+Maastrichter
+Maastrichtern
+Maasübergang
+Mac
+Machart
+Macharten
+Machbarkeit
+Machenschaft
+Machenschaften
+Macher
+Machern
+Machers
+Machiavelli
+Machiavellis
+Machtwort
+Machtworte
+Machtworten
+Machtwortes
+Machtworts
+Machtwörter
+Machtwörtern
+Macintosh
+Macintoshs
+Macke
+Macken
+Macker
+Madagaskar
+Made
+Maden
+Madonna
+Madrid
+Mafia
+Mafioso
+Magazin
+Magazine
+Magazinen
+Magazins
+Magd
+Magdalena
+Magdalenas
+Magellansche
+Magellansches
+Magen
+Magens
+Magenta
+Maghreb
+Maghrebiner
+Magie
+Magier
+Magierin
+Magierinnen
+Magiern
+Magiers
+Magister
+Magistern
+Magisters
+Magistrat
+Magnesium
+Magnesiums
+Magnet
+Magnetband
+Magneten
+Magnetfeld
+Magnetfelder
+Magnetfeldern
+Magnetfeldes
+Magnetik
+Magnetisierung
+Magnetismus
+Magnolie
+Magnolien
+Mahagoni
+Maharadscha
+Mahatma
+Mahatmas
+Mahl
+Mahlzeit
+Mahlzeiten
+Mahner
+Mahnkraft
+Mahnung
+Mahnungen
+Mai
+Mail
+Mailand
+Mailbox
+Mailboxen
+Mailingliste
+Mailinglisten
+Mailorder
+Mailorders
+Mails
+Mailänder
+Main
+Mainboard
+Mainboards
+Mainframe
+Mainframes
+Mainz
+Mais
+Majonäse
+Majonäsen
+Major
+Majoran
+Majore
+Majoren
+Majorität
+Majors
+Makedonien
+Makefile
+Makefiles
+Makel
+Makels
+Makler
+Maklern
+Maklers
+Makro
+Makroexpansion
+Makroexpansionen
+Makroexpansionsfunktion
+Makroexpansionsfunktionen
+Makroexpansionszeit
+Makronummer
+Makronummern
+Makros
+Makrosubstitution
+Makrosubstitutionen
+Makulatur
+Mal
+Malaise
+Malaisen
+Malaria
+Malaysia
+Malaysias
+Malediven
+Maler
+Malerei
+Malereien
+Malerin
+Malerinnen
+Malern
+Malers
+Mali
+Mallorca
+Malmö
+Malo
+Maloche
+Malos
+Malstrom
+Malta
+Malus
+Malve
+Malven
+Malz
+Malzes
+Maläse
+Maläsen
+Mama
+Mamas
+Mammon
+Mammons
+Mammut
+Mammuts
+Management
+Managements
+Manager
+Managern
+Managers
+Manchester
+Mandant
+Mandanten
+Mandarine
+Mandarinen
+Mandat
+Mandate
+Mandaten
+Mandats
+Mandel
+Mandoline
+Mandolinen
+Mandschurei
+Manege
+Manegen
+Manfred
+Manfreds
+Mangan
+Mangel
+Mangelerscheinung
+Mangelhaftigkeit
+Mangelhaftigkeiten
+Mangellage
+Mangellagen
+Mangelpunkt
+Mangelware
+Mangelwaren
+Manhattan
+Manie
+Manien
+Manier
+Manieren
+Manierismus
+Manierist
+Manieristen
+Manifest
+Manifestation
+Manifestationen
+Manifeste
+Manifesten
+Manifestes
+Manifests
+Manila
+Manipulation
+Manipulationen
+Manipulierbarkeit
+Manitu
+Manitus
+Manko
+Mann
+Manne
+Mannen
+Mannequin
+Mannequins
+Mannes
+Mannesmann
+Mannesmut
+Mannheim
+Mannigfaltigkeit
+Mannit
+Mannsbild
+Mannsbilder
+Mannsbildern
+Mannschaft
+Mannschaften
+Manntag
+Manntage
+Manntagen
+Manntags
+Mannwoche
+Mannwochen
+Mansarde
+Mansarden
+Manschette
+Manschetten
+Mantel
+Mantels
+Mantra
+Mantras
+Manual
+Manuale
+Manualen
+Manuals
+Manuela
+Manuelas
+Manufaktur
+Manufakturen
+Manuskript
+Manuskripte
+Manuskripten
+Manuskripts
+Manz
+Manöver
+Manövern
+Mao
+Maori
+Maos
+Mappe
+Mappen
+Maraschino
+Maraschinos
+Marathonsitzung
+Marburg
+Marc
+Marcs
+Marder
+Mardern
+Marders
+Margarete
+Margaretes
+Margarine
+Marge
+Margen
+Marginalie
+Marginalien
+Marianne
+Mariannes
+Marie
+Marienkäfer
+Marienkäfern
+Maries
+Marihuana
+Marille
+Marillen
+Marilyn
+Marilyns
+Marine
+Marinen
+Marines
+Marionette
+Marionetten
+Marita
+Maritas
+Mark
+Marke
+Marken
+Markenartikel
+Markenartikeln
+Markenartikels
+Markenname
+Markennamen
+Markennamens
+Markenzeichen
+Markenzeichens
+Markes
+Marketing
+Markierung
+Markierungen
+Markise
+Markisen
+Markknochen
+Markknochens
+Markov
+Markovs
+Markstücke
+Markstücken
+Markt
+Markteinführung
+Markteinführungen
+Marktes
+Marktziel
+Marktziele
+Marktzielen
+Marktziels
+Markus
+Marmarameer
+Marmelade
+Marmor
+Marmors
+Marne
+Marokkaner
+Marokko
+Marquise
+Marquisen
+Marrakesch
+Mars
+Marsala
+Marsalas
+Marsch
+Marschall
+Marschalls
+Marsches
+Marseille
+Martin
+Martins
+Marx
+Marxismus
+Mary
+Marys
+Marzipan
+Masche
+Maschen
+Maschennetz
+Mascherl
+Mascherln
+Maschine
+Maschinen
+Maschinenbau
+Maschinenbauer
+Maschinenbauern
+Maschinenbaues
+Maschinenbaus
+Maschinenbefehl
+Maschinenbefehle
+Maschinenbefehlen
+Maschinenbefehls
+Maschinencode
+Maschinencodes
+Maschinenmodell
+Maschinenmodelle
+Maschinenmodellen
+Maschinenmodells
+Maschinenoperation
+Maschinenoperationen
+Maschinenprogramm
+Maschinenprogramme
+Maschinenprogrammen
+Maschinenprogramms
+Maschinenregister
+Maschinenregistern
+Maschinenregisters
+Maschinensprache
+Maschinensprachebene
+Maschinensprachebenen
+Maschinensprachen
+Maschinenwort
+Maschinenworte
+Maschinenzustände
+Maschinenzuständen
+Maschinerie
+Maschinerien
+Maschinist
+Maschinisten
+Maserung
+Maserungen
+Maske
+Masken
+Maskerade
+Maskeraden
+Maskottchen
+Maskottchens
+Masochismus
+Massage
+Massagen
+Massaker
+Massakern
+Massakers
+Masse
+Masseanschlüsse
+Masseausgang
+Masseblech
+Masseelektroden
+Massekabel
+Massekopplung
+Massekopplungen
+Masseleitung
+Massen
+Massenandrang
+Massenaufgebot
+Massendemonstration
+Massendemonstrationen
+Massenkundgebung
+Massenkundgebungen
+Massenmedien
+Massenorganisation
+Massenorganisationen
+Massenprodukt
+Massenprodukte
+Massenprodukten
+Massenproduktes
+Massenproduktion
+Massenprodukts
+Massenspeicher
+Massenspeichers
+Masseschleifen
+Masseschluss
+Masseschlusses
+Masseschlüsse
+Masseschlüssen
+Masseur
+Masseure
+Masseuren
+Masseurs
+Masseuse
+Masseusen
+Masseverbindung
+Masseverbindungen
+Massierung
+Massiv
+Massivs
+Mast
+Masten
+Masturbation
+Matador
+Matadore
+Matadoren
+Matadors
+Material
+Materialart
+Materialarten
+Materialaufwand
+Materialbearbeitung
+Materialbeschaffung
+Materialdaten
+Materialeinsatz
+Materialermüdung
+Materialfehler
+Materialfehlern
+Materialfehlers
+Materialien
+Materialist
+Materialisten
+Materialprüfung
+Materials
+Materialsammlung
+Materialschlacht
+Materialschlachten
+Materialvorbereitung
+Materialwert
+Materie
+Materien
+Mathematik
+Mathematiker
+Mathematikerin
+Mathematikerinnen
+Mathematikern
+Mathematikers
+Mathematisierung
+Mathilde
+Mathildes
+Matinee
+Matineen
+Matratze
+Matratzen
+Matrices
+Matrix
+Matrixdrucker
+Matrixdruckern
+Matrixdruckers
+Matrixelement
+Matrixelemente
+Matrixelementen
+Matrixelementes
+Matrixelements
+Matrizen
+Matrizes
+Matrone
+Matronen
+Matroschka
+Matrose
+Matrosen
+Matsch
+Matsches
+Matsushita
+Matterhorn
+Matthias
+Matthäus
+Mattigkeit
+Mattscheibe
+Mattscheiben
+Mattsetzen
+Matur
+Matura
+Maturand
+Maturanden
+Maturant
+Maturanten
+Maturität
+Maturs
+Mauer
+Mauerblümchen
+Mauerblümchens
+Mauerdurchlass
+Mauerdurchlasses
+Mauerdurchlässe
+Mauerdurchlässen
+Mauerfall
+Mauerfalls
+Maul
+Maulesel
+Mauleseln
+Maulesels
+Maulkorb
+Maultier
+Maultieren
+Maulwurf
+Maulwurfs
+Maulwürfe
+Maulwürfen
+Maurer
+Maurern
+Maurerpolier
+Maurerpoliere
+Maurerpolieren
+Maurerpoliers
+Maurers
+Mauretanien
+Mauritius
+Maus
+Mauser
+Mausoleum
+Max
+Maxima
+Maximalforderung
+Maximalforderungen
+Maximalgröße
+Maximalhöhe
+Maximalsatz
+Maximalspannung
+Maximalstrom
+Maximalstromes
+Maximalwert
+Maximalwerte
+Maximalwerten
+Maximalwertes
+Maximalwerts
+Maximalwerttrigger
+Maximalziel
+Maxime
+Maximen
+Maximierung
+Maximierungsstrategie
+Maximierungsstrategien
+Maximilian
+Maximilians
+Maximum
+Maximums
+Maya
+Mayas
+Mayflower
+Mayflowers
+Mayonnaise
+Mayonnaisen
+Mazda
+Mazurka
+Maß
+Maßangabe
+Maßangaben
+Maße
+Maßeinheit
+Maßeinheiten
+Maßen
+Maßes
+Maßfigur
+Maßgabe
+Maßgaben
+Maßlosigkeit
+Maßnahme
+Maßnahmen
+Maßregel
+Maßregeln
+Maßregelung
+Maßstab
+Maßstabes
+Maßstabs
+Maßstäbe
+Maßstäben
+Maßvorlage
+Maßvorlagen
+Maßzeichnung
+McCarthy
+McDonalds
+Md
+Mechanik
+Mechaniker
+Mechanikern
+Mechanisierung
+Mechanismen
+Mechanismus
+Medaille
+Medaillen
+Media
+Medianschnitt
+Medici
+Medicis
+Medien
+Medikament
+Medikamente
+Medikamenten
+Medikamentes
+Medikaments
+Medina
+Meditation
+Meditationen
+Medium
+Mediums
+Medizin
+Mediziner
+Medizinerin
+Medizinerinnen
+Medizinern
+Mediziners
+Meer
+Meere
+Meeren
+Meeres
+Meers
+Meeting
+Megabit
+Megabyte
+Megafon
+Megafone
+Megafons
+Megalith
+Megalithe
+Megalithen
+Megaliths
+Megaphon
+Megaphone
+Megaphonen
+Megaphons
+Mehl
+Mehls
+Mehrarbeit
+Mehrarbeiten
+Mehraufkommen
+Mehraufwand
+Mehraufwandes
+Mehrausgabe
+Mehrausgaben
+Mehrbedarf
+Mehrbetrag
+Mehrbetrags
+Mehrbeträge
+Mehrbeträgen
+Mehreinnahme
+Mehreinnahmen
+Mehrerlös
+Mehrerlöse
+Mehrerlösen
+Mehrerlöses
+Mehrfachzuweisung
+Mehrfachzuweisungen
+Mehrfamilienhaus
+Mehrfamilienhauses
+Mehrfamilienhäuser
+Mehrfamilienhäusern
+Mehrgewicht
+Mehrheit
+Mehrheiten
+Mehrheitsprinzip
+Mehrheitsprinzips
+Mehrkapazität
+Mehrkosten
+Mehrplatz
+Mehrpreis
+Mehrpreise
+Mehrpreisen
+Mehrpreises
+Mehrung
+Mehrverdienst
+Mehrwert
+Mehrwerte
+Mehrwerten
+Mehrwertes
+Mehrwerts
+Mehrwertsteuer
+Mehrzahl
+Mehrzweckraum
+Mehrzweckraumes
+Mehrzweckraums
+Mehrzweckräume
+Mehrzweckräumen
+Meidung
+Meidungen
+Meier
+Meiers
+Meile
+Meilen
+Meilenstein
+Meilensteine
+Meilensteinen
+Meilensteins
+Meineid
+Meineide
+Meineiden
+Meineides
+Meineids
+Meinung
+Meinungen
+Meinungsaustausch
+Meinungsaustausches
+Meinungsaustauschs
+Meinungsbild
+Meinungsbildner
+Meinungsbildung
+Meinungsfreiheit
+Meinungsfreiheiten
+Meinungsmache
+Meinungsmacher
+Meinungsmachern
+Meinungsmachers
+Meinungsumfrage
+Meinungsumfragen
+Meinungsumschwung
+Meinungsverschiedenheit
+Meinungsverschiedenheiten
+Meinungsäußerung
+Meinungsäußerungen
+Meise
+Meisen
+Meister
+Meisterhand
+Meistern
+Meisterprüfung
+Meisters
+Meisterschaft
+Meisterwerk
+Meisterwerke
+Meisterwerken
+Meisterwerkes
+Meisterwerks
+Meißel
+Meißeln
+Meißels
+Meißen
+Mekong
+Mekonggebiet
+Melancholie
+Melange
+Melangen
+Meldebereich
+Meldepflicht
+Meldepflichten
+Meldeschluss
+Meldeschlusses
+Meldeschlüsse
+Meldeschlüssen
+Meldung
+Meldungen
+Melodie
+Melodien
+Melone
+Melonen
+Membran
+Membranen
+Memel
+Memelgebiet
+Memo
+Memoiren
+Memorandum
+Memorymap
+Memphis
+Mendel
+Mendels
+Mendelssohn
+Mendelssohns
+Menge
+Mengen
+Mengenberechnung
+Mengenlehre
+Mengenoperation
+Mengenoperationen
+Mengenrabatt
+Mengenrabatte
+Mengenrabatten
+Mengenrabatts
+Mengenumsatz
+Mengenverband
+Mengenverbandes
+Mengenverbands
+Mengenzunahme
+Mengenzunahmen
+Mengenzuwachs
+Mengenzuwachses
+Mengenänderung
+Mengenänderungen
+Mengung
+Meniskus
+Meniskusriss
+Meniskusrisse
+Meniskusrissen
+Meniskusrisses
+Mensa
+Mensch
+Menschen
+Menschenbild
+Menschenbildes
+Menschengedenken
+Menschenleben
+Menschenlebens
+Menschenliebe
+Menschenmasse
+Menschenmassen
+Menschenmenge
+Menschenmengen
+Menschenrecht
+Menschenrechte
+Menschenrechten
+Menschenrechtes
+Menschenrechts
+Menschenwerk
+Menschenwürde
+Menschheit
+Menschlein
+Menschleins
+Menschlichkeit
+Menschwerdung
+Menstruation
+Mentalität
+Mentalitäten
+Mentor
+Mentoren
+Mentors
+Menü
+Menüfunktion
+Menüfunktionen
+Menüführung
+Menügestaltung
+Menügruppe
+Menügruppen
+Menükarte
+Menükarten
+Menüpunkt
+Menüpunkte
+Menüpunkten
+Menüpunktes
+Menüpunkts
+Menüs
+Menüspalte
+Menüspalten
+Menüsteuerung
+Menütechnik
+Menüvorschlag
+Menüvorschlages
+Menüvorschlags
+Menüvorschläge
+Menüvorschlägen
+Mephisto
+Mephistos
+Meran
+Mercedes
+Merck
+Mergentheim
+Meriten
+Merkblatt
+Merkblattes
+Merkblätter
+Merkblättern
+Merker
+Merkfähigkeit
+Merkliste
+Merklisten
+Merkmal
+Merkmale
+Merkmalen
+Merkmales
+Merkmals
+Merkmalskombination
+Merkmalskombinationen
+Merkmalsreduktion
+Merkmalsreduktionen
+Merkposten
+Merkschwäche
+Merkschwächen
+Merkur
+Merkwürdigkeit
+Merkwürdigkeiten
+Merkzeichen
+Merkzeichens
+Merlin
+Merowinger
+Mesolithikum
+Mesopotamien
+Messanordnung
+Messanordnungen
+Messbereich
+Messbereiche
+Messbereichen
+Messbereiches
+Messbrücke
+Messbrücken
+Messdaten
+Messdose
+Messdosen
+Messeingang
+Messeingangssignal
+Messer
+Messergebnis
+Messergebnisse
+Messergebnissen
+Messergebnisses
+Messern
+Messfehler
+Messfunktion
+Messfunktionen
+Messgenauigkeit
+Messgerät
+Messgröße
+Messgrößen
+Messina
+Messing
+Messinstrument
+Messinstrumente
+Messinstrumenten
+Messinstruments
+Messinterface
+Messinterfaces
+Messkabel
+Messkabeln
+Messkanal
+Messkanals
+Messkanäle
+Messkanälen
+Messkopf
+Messkopfes
+Messkopfs
+Messkurve
+Messkurven
+Messköpfe
+Messköpfen
+Messlatte
+Messlatten
+Messleitung
+Messleitungen
+Messlogik
+Messlänge
+Messlängen
+Messmethode
+Messmethoden
+Messner
+Messners
+Messobjekt
+Messort
+Messorte
+Messorten
+Messortes
+Messorts
+Messprinzip
+Messprobe
+Messproben
+Messpunkt
+Messpunkte
+Messpunkten
+Messpunktes
+Messpunkts
+Messrate
+Messraten
+Messraum
+Messraumes
+Messraums
+Messreihe
+Messreihen
+Messräume
+Messräumen
+Messsignal
+Messsignals
+Messspannung
+Messspannungen
+Messstelle
+Messstellen
+Messstrecke
+Messstrecken
+Messtechnik
+Messung
+Messungen
+Messverfahren
+Messvorgang
+Messvorganges
+Messvorgangs
+Messwert
+Messwerte
+Messwerten
+Messwertes
+Messwerts
+Messwesen
+Messwesens
+Messzahl
+Messzahlen
+Messzeit
+Messzeiten
+Metabolismus
+Metaebene
+Metaebenen
+Metall
+Metalle
+Metallen
+Metalls
+Metallschicht
+Metallschichten
+Metamorphose
+Metamorphosen
+Metapher
+Metaphern
+Metaphysik
+Metaphysiken
+Meteor
+Meteore
+Meteoren
+Meteorologe
+Meteorologen
+Meteors
+Meter
+Metern
+Meterware
+Meterwaren
+Methode
+Methoden
+Methodenauswahl
+Methodik
+Methodiken
+Methodist
+Methodisten
+Metier
+Metiers
+Metrik
+Metriken
+Metronom
+Metropole
+Metropolen
+Metropolis
+Metternich
+Metternichs
+Metz
+Metzelei
+Metzeleien
+Metzger
+Metzgerei
+Metzgereien
+Metzgern
+Metzgers
+Meuchelmord
+Meuchelmordes
+Meute
+Meuten
+Meuterei
+Meutereien
+Meuterer
+Mexikaner
+Mexikanerin
+Mexikanerinnen
+Mexikanern
+Mexikaners
+Mexiko
+Michael
+Michaels
+Michelangelo
+Michelangelos
+Michelin
+Mick
+Micks
+Microsoft
+Microsofts
+Midas
+Midlands
+Midlifecrisis
+Mieder
+Mief
+Miefs
+Miene
+Mienen
+Mienenspiel
+Mienenspiels
+Mieter
+Mieterin
+Mieterinnen
+Mietern
+Mieters
+Mietung
+Mietungen
+Mieze
+Miezen
+Migräne
+Mikado
+Mikrobe
+Mikroben
+Mikrobiologie
+Mikrochip
+Mikrochips
+Mikrocomputer
+Mikrocomputern
+Mikroelektronik
+Mikrofilm
+Mikrofilme
+Mikrofilmen
+Mikrofilmes
+Mikrofon
+Mikrofone
+Mikrofonen
+Mikrofons
+Mikrometer
+Mikrometern
+Mikrometers
+Mikroorganismen
+Mikroorganismus
+Mikrophon
+Mikrophone
+Mikrophonen
+Mikrophons
+Mikroprozessor
+Mikroprozessoren
+Mikroprozessors
+Mikroskop
+Mikroskops
+Mikrowelle
+Mikrowellen
+Milan
+Milane
+Milanen
+Milans
+Milbe
+Milben
+Milch
+Milchgebiss
+Milchgebisse
+Milchgebissen
+Milchgebisses
+Milderung
+Milderungen
+Milderungsgrund
+Milderungsgrundes
+Milderungsgründe
+Milderungsgründen
+Mildtätigkeit
+Milieu
+Milieus
+Milieuschilderung
+Milieuschilderungen
+Militarist
+Militaristen
+Military
+Militär
+Militärs
+Miliz
+Milizen
+Milizionär
+Milizionäre
+Milizionären
+Milizionärs
+Mill
+Millennium
+Millenniums
+Milliarde
+Milliarden
+Milliardär
+Milligramm
+Millimeter
+Millimetern
+Millimeters
+Million
+Millionen
+Millionär
+Millionäre
+Millionären
+Millionärs
+Millisekunde
+Millisekunden
+Milliönchen
+Milz
+Mime
+Mimen
+Mimik
+Mimikry
+Mimose
+Minarett
+Minden
+Mindereinnahme
+Mindereinnahmen
+Minderheit
+Minderheiten
+Minderleistung
+Minderung
+Minderungen
+Minderwertigkeit
+Minderzahl
+Minderzahlen
+Mindestabnahmemenge
+Mindestabnahmemengen
+Mindestalter
+Mindestanforderung
+Mindestanforderungen
+Mindestanzahl
+Mindestausstattung
+Mindestbeitrag
+Mindestbeitrages
+Mindestbeitrags
+Mindestbeiträge
+Mindestbeiträgen
+Mindestbelegung
+Mindestdauer
+Mindeste
+Mindesteinsatz
+Mindesten
+Mindestentfernung
+Mindestgehalt
+Mindestkenntnis
+Mindestkenntnisse
+Mindestkenntnissen
+Mindestkosten
+Mindestmaß
+Mindestmaße
+Mindestmaßes
+Mindestwert
+Mindestwerts
+Mine
+Minen
+Mineral
+Mineralien
+Mineralöl
+Mineralöle
+Mineralölen
+Mineralöls
+Ming
+Mings
+Mini
+Miniatur
+Miniaturen
+Minicar
+Minicomputer
+Minicomputern
+Minicomputers
+Miniformat
+Minigolf
+Minigolfs
+Minima
+Minimierung
+Minimum
+Minis
+Minislip
+Minislips
+Minister
+Ministerien
+Ministerium
+Ministeriums
+Ministern
+Ministers
+Ministrant
+Ministranten
+Minnesänger
+Minolta
+Minotaurus
+Minuszeichen
+Minuszeichens
+Minute
+Minuten
+Minutenbereich
+Minutenereignis
+Minutenereignisse
+Minutenereignissen
+Minutenereignisses
+Minutenzeiger
+Minutenzeigern
+Minutenzeigers
+Mio
+Mips
+Miriam
+Miriams
+Misanthrop
+Misanthropen
+Mischanlage
+Mischanlagen
+Mischehe
+Mischehen
+Mischer
+Mischling
+Mischlinge
+Mischlingen
+Mischlings
+Mischung
+Mischungen
+Misere
+Miseren
+Missachtung
+Missbehagen
+Missbehagens
+Missbildung
+Missbildungen
+Missbilligung
+Missbilligungen
+Missbrauch
+Missbrauches
+Missbrauchs
+Missbräuche
+Missbräuchen
+Missdeutung
+Missdeutungen
+Misserfolg
+Misserfolge
+Misserfolgen
+Misserfolges
+Missetat
+Missetaten
+Missetäter
+Missetätern
+Missgeburt
+Missgeburten
+Missgeschick
+Missgeschicke
+Missgeschicken
+Missgeschickes
+Missgunst
+Misshandlung
+Misshandlungen
+Missinformation
+Missinformationen
+Missionar
+Missionare
+Missionaren
+Missionars
+Mississippi
+Missklang
+Missklanges
+Missklangs
+Missklänge
+Missklängen
+Misskredit
+Missmanagement
+Missmut
+Missmuts
+Missstand
+Missstandes
+Missstimmung
+Missstimmungen
+Missstände
+Missständen
+Misstrauen
+Misstrauens
+Misstrauensvotum
+Misstrauensvotums
+Misstände
+Misständen
+Missvergnügen
+Missvergnügens
+Missverhältnis
+Missverhältnisse
+Missverhältnissen
+Missverhältnisses
+Missverständnis
+Missverständnisse
+Missverständnissen
+Missverständnisses
+Misswahl
+Mist
+Mistkübel
+Mistkübeln
+Mistkübels
+Mistral
+Mistvieh
+Mitarbeit
+Mitarbeiter
+Mitarbeiterin
+Mitarbeiterinnen
+Mitarbeitern
+Mitarbeiters
+Mitarbeiterstab
+Mitautor
+Mitautoren
+Mitautors
+Mitbegründer
+Mitbegründerin
+Mitbegründerinnen
+Mitbegründern
+Mitbegründers
+Mitbenutzung
+Mitberatung
+Mitbesitz
+Mitbesitzer
+Mitbesitzern
+Mitbesitzers
+Mitbesitzes
+Mitbestimmung
+Mitbestimmungen
+Mitbeteiligung
+Mitbewerber
+Mitbewerbern
+Mitbewohner
+Mitbewohnerin
+Mitbewohnerinnen
+Mitbewohnern
+Mitbewohners
+Mitbringsel
+Mitbürger
+Mitbürgerin
+Mitbürgerinnen
+Mitbürgern
+Mitbürgers
+Miteigentum
+Miteigentümer
+Mitentscheidung
+Mitführung
+Mitgefühl
+Mitgefühle
+Mitgefühlen
+Mitgefühls
+Mitgestalter
+Mitgestaltung
+Mitgift
+Mitglied
+Mitglieder
+Mitgliederbeitrag
+Mitgliederbeitrages
+Mitgliederbeitrags
+Mitgliederbeiträge
+Mitgliederbeiträgen
+Mitgliederliste
+Mitgliederlisten
+Mitgliedern
+Mitgliederschwund
+Mitgliederversammlung
+Mitgliederversammlungen
+Mitgliederwerbung
+Mitgliederzahl
+Mitgliederzeitschrift
+Mitgliedes
+Mitglieds
+Mitgliedsbeitrag
+Mitgliedsbeitrages
+Mitgliedsbeitrags
+Mitgliedsbeiträge
+Mitgliedsbeiträgen
+Mitgliedschaft
+Mitgliedschaften
+Mitherausgeber
+Mitherausgeberin
+Mitherausgeberinnen
+Mitherausgebern
+Mitherausgebers
+Mithilfe
+Mithras
+Mitinhaber
+Mitkonkurrent
+Mitkonkurrenten
+Mitkämpfer
+Mitkämpfern
+Mitkämpfers
+Mitlaut
+Mitlaute
+Mitlauten
+Mitlautes
+Mitleid
+Mitleides
+Mitleids
+Mitläufer
+Mitläufern
+Mitläufers
+Mitmensch
+Mitnahme
+Mitraucher
+Mitschuld
+Mitschüler
+Mitschülern
+Mitspieler
+Mitspielern
+Mitsprache
+Mitsprachemöglichkeit
+Mitsprachemöglichkeiten
+Mitspracherecht
+Mitspracherechte
+Mitspracherechten
+Mitspracherechtes
+Mitspracherechts
+Mitsubishi
+Mittag
+Mittagessen
+Mittags
+Mittagspause
+Mittagspausen
+Mittagsstunde
+Mittagsstunden
+Mittagszeit
+Mitte
+Mitteilung
+Mitteilungen
+Mitteilungsblätter
+Mitteilungsblättern
+Mittel
+Mittelachse
+Mittelachsen
+Mittelalter
+Mittelalters
+Mittelamerika
+Mittelanzapfung
+Mittelasien
+Mittelbereich
+Mittelebene
+Mittelebenen
+Mitteleingang
+Mittelengland
+Mitteleuropa
+Mittelfinger
+Mittelfranken
+Mittelgebirge
+Mittelholland
+Mittelitalien
+Mittelkurs
+Mittelkurse
+Mittelkursen
+Mittelkurses
+Mittellinie
+Mittellinien
+Mittelmeer
+Mittelmeerküste
+Mittelmeerländer
+Mittelmeerraum
+Mittelmeers
+Mittelpunkt
+Mittelpunkte
+Mittelpunkten
+Mittelpunktes
+Mittelpunkts
+Mittelrhein
+Mittelsmann
+Mittelsmänner
+Mittelstand
+Mittelstandes
+Mittelsteg
+Mittelstegs
+Mittelstellung
+Mittelstufe
+Mittelstufen
+Mittelstück
+Mittelung
+Mittelwert
+Mittelwertbildung
+Mittelwerte
+Mittelwerten
+Mittelwerts
+Mittelwesten
+Mittelwestens
+Mitterand
+Mitterands
+Mitternacht
+Mitterrand
+Mitterrands
+Mittler
+Mittlerfunktion
+Mittlerfunktionen
+Mittlerin
+Mittlerinnen
+Mittlern
+Mittlers
+Mittlerstellung
+Mittwoch
+Mittäter
+Mittäterschaft
+Mitunterzeichner
+Mitunterzeichnern
+Mitunterzeichners
+Mitursache
+Mitursachen
+Mitverantwortlichkeit
+Mitverursacher
+Mitwelt
+Mitwirkung
+Mitwirkungspflicht
+Mitwirkungspflichten
+Mitwissen
+Mitwissens
+Mix
+Mixer
+Mixtur
+Mixturen
+Mob
+Mobiliar
+Mobiliars
+Mobilien
+Mobilisation
+Mobilität
+Mobilmachung
+Mobs
+Modalität
+Modalitäten
+Mode
+Modell
+Modellbildung
+Modellbildungen
+Modelle
+Modellebene
+Modellebenen
+Modellen
+Modellfall
+Modellierung
+Modells
+Modellstudie
+Modellstudien
+Modellversuch
+Modellversuche
+Modellversuchen
+Modellversuchs
+Modellösung
+Modem
+Modemkabel
+Modems
+Modemverbindung
+Modemverbindungen
+Moden
+Moderation
+Moderator
+Moderatoren
+Moderichtung
+Moderichtungen
+Modernisierung
+Modernisierungsgrad
+Modernität
+Modifikation
+Modifikationen
+Modifizierung
+Modul
+Modula
+Modularisierung
+Modularisierungstechnik
+Modularisierungstechniken
+Modularität
+Modulation
+Modulationen
+Module
+Modulen
+Modulgrenze
+Modulgrenzen
+Modulkonzept
+Modulkonzepte
+Modulkonzepten
+Modulkonzepts
+Moduls
+Modulschnittstelle
+Modulschnittstellen
+Modus
+Mogadischu
+Mohammed
+Mohammedaner
+Mohammedanerin
+Mohammedanerinnen
+Mohammedanern
+Mohammedaners
+Mohammeds
+Mohikaner
+Mohikanern
+Mohikaners
+Mohn
+Mohns
+Mohr
+Mohren
+Moiré
+Mokka
+Moldau
+Mole
+Molekül
+Moleküle
+Molekülen
+Moleküls
+Molen
+Moliere
+Molieres
+Moll
+Molukken
+Molybdän
+Mombasa
+Moment
+Momentaufnahme
+Momentaufnahmen
+Momente
+Momenten
+Momentes
+Moments
+Momo
+Momos
+Monaco
+Monarch
+Monarchen
+Monarchie
+Monarchien
+Monarchist
+Monarchisten
+Monat
+Monate
+Monaten
+Monates
+Monats
+Monatsanfang
+Monatsende
+Mond
+Monde
+Monden
+Mondes
+Mondpreis
+Mondpreise
+Mondpreisen
+Mondpreises
+Moneten
+Mongole
+Mongolei
+Mongolen
+Mongolin
+Mongolinnen
+Monitor
+Monitore
+Monitoren
+Monitorprogramm
+Monitorprogramme
+Monitorprogrammen
+Monitorprogramms
+Monitors
+Monitorschnittstelle
+Monitorschnittstellen
+Monogramm
+Monographie
+Monographien
+Monolog
+Monologen
+Monomanie
+Monomanien
+Monopol
+Monopolen
+Monopolist
+Monopolisten
+Monopoly
+Monostruktur
+Monostrukturen
+Monotonie
+Monotype
+Monotypen
+Monroe
+Monroes
+Monster
+Monstern
+Mont
+Montag
+Montage
+Montagen
+Montags
+Monte
+Montenegro
+Monteur
+Monteure
+Monteuren
+Monteurs
+Montgomery
+Montgomerys
+Montpellier
+Montreal
+Monument
+Monumente
+Monumenten
+Monumentes
+Monuments
+Moor
+Moore
+Mooren
+Moores
+Moors
+Moos
+Moose
+Moosen
+Mooses
+Moped
+Mopeds
+Mopp
+Mopps
+Mops
+Moral
+Moralbegriff
+Moralbegriffe
+Moralbegriffen
+Moralbegriffs
+Moralist
+Moralisten
+Morast
+Morbidität
+Morchel
+Mord
+Mordes
+Mordio
+Morgana
+Mormone
+Mormonen
+Moron
+Morons
+Morris
+Moräne
+Moränen
+Mosaik
+Mosaike
+Mosaiken
+Mosaiks
+Mosambik
+Moschee
+Moscheen
+Mosel
+Moser
+Mosers
+Moses
+Moskau
+Moskauer
+Moskauerin
+Moskauerinnen
+Moskauern
+Moskauers
+Moskaus
+Moskito
+Moskitos
+Moskowiter
+Moslem
+Moslems
+Most
+Mostes
+Motel
+Motiv
+Motivation
+Motivationen
+Motive
+Motiven
+Motivierung
+Motivierungen
+Motivs
+Motocross
+Motor
+Motoren
+Motors
+Motte
+Motten
+Mottenkiste
+Mottenkisten
+Motto
+Mottos
+Mozart
+Mozarts
+Mr
+Mrd
+Muffe
+Muffen
+Mulatte
+Mulatten
+Mulde
+Mulden
+Multi
+Multimedia
+Multiplechoicefrage
+Multiplechoicefragen
+Multiplechoiceverfahren
+Multiplechoiceverfahrens
+Multiplikation
+Multiplikationen
+Multiplikator
+Multiplikatoreffekt
+Multiplikatoren
+Multiplikators
+Multis
+Multitasking
+Mumie
+Mumien
+Mumifizierung
+Mumm
+Mumms
+Mund
+Mundart
+Mundarten
+Munde
+Mundes
+Mundgeruch
+Mundharmonika
+Mundpflege
+Mundstück
+Mundstücks
+Mundwerk
+Mundwinkel
+Munition
+Murks
+Murksbehebung
+Murksbehebungen
+Muschel
+Muscheln
+Muschi
+Muschis
+Muse
+Museen
+Museum
+Museums
+Musical
+Musicals
+Musik
+Musiker
+Musikern
+Musikers
+Musikus
+Muskel
+Muskelkraft
+Muskelkräfte
+Muskelkräften
+Muskeln
+Muskels
+Musketier
+Musketiere
+Musketieren
+Musketiers
+Muskulatur
+Muslim
+Muslims
+Musselin
+Musselins
+Mustang
+Mustangs
+Muster
+Musterbeispiel
+Musterbeispiele
+Musterbeispielen
+Musterbeispieles
+Musterexemplar
+Musterexemplare
+Musterexemplaren
+Musterexemplars
+Musterfall
+Musterfalls
+Musterfälle
+Musterfällen
+Mustergatte
+Mustergatten
+Mustern
+Musters
+Musterschüler
+Musterschülern
+Musterschülers
+Musterstück
+Musterstücke
+Musterstücken
+Musterstücks
+Mut
+Mutant
+Mutanten
+Mutation
+Mutationen
+Mute
+Mutes
+Mutlosigkeit
+Mutmaßung
+Mutmaßungen
+Muts
+Mutter
+Muttern
+Mutters
+Mutti
+Mux
+Muße
+MwSt
+Myriade
+Myriaden
+Myrre
+Myrren
+Myrrhe
+Myrrhen
+Mysterien
+Mysterium
+Mystifikation
+Mystik
+Mystiker
+Mystikerin
+Mystikerinnen
+Mystikern
+Mystikers
+Mystizismus
+Mythen
+Mythologie
+Mythos
+Mäander
+Mächte
+Mächten
+Mächtigkeit
+Mächtigkeiten
+Mädchen
+Mädchens
+Mädel
+Mädeln
+Mädels
+Mähne
+Mähnen
+Mängel
+Mängelanzeige
+Mängelanzeigen
+Mängelbeschreibung
+Mängelbeseitigung
+Mängeln
+Mängelpunkte
+Mängelpunkten
+Mängelrüge
+Mängelrügen
+Mängelverteilung
+Männer
+Männlein
+Männlichkeit
+Mäntel
+Mäntelchen
+Mäntelchens
+Mänteln
+Märchen
+Märchens
+Märkchen
+Märkchens
+Märker
+Märklin
+Märkte
+Märkten
+Märsche
+Märschen
+Märtyrer
+Märtyrern
+März
+Mäulchen
+Mäulchens
+Mäuler
+Mäulern
+Mäuse
+Mäusen
+Mäßigkeit
+Mäßigung
+Möbel
+Möbeln
+Möbels
+Möchtegern
+Möglichkeit
+Möglichkeiten
+Mönche
+Mönchen
+Mönchstum
+Möpse
+Mörder
+Mörderin
+Mörderinnen
+Mördern
+Mörders
+Mörtel
+Mörtels
+Möwe
+Möwen
+Mücke
+Mücken
+Müdigkeit
+Mühle
+Mühlen
+Mühlheim
+Mühsal
+Müll
+Müller
+Müllerin
+Müllerinnen
+Müllern
+Müllers
+München
+Münchner
+Münchnerin
+Münchnerinnen
+Münchnern
+Münchners
+Mündel
+Münder
+Mündern
+Mündigkeit
+Mündung
+Mündungen
+Münster
+Münze
+Münzen
+Münzer
+Mütter
+Mütterchen
+Mütterchens
+Müttern
+Mütze
+Mützen
+Müßiggang
+NASA
+NATO
+NDP
+NL
+NRW
+NS
+NSU
+NTT
+Nabel
+Nabeln
+Nabelschnur
+Nachahmer
+Nachahmung
+Nachahmungen
+Nacharbeit
+Nacharbeitung
+Nachbar
+Nachbardatei
+Nachbardaten
+Nachbarin
+Nachbarinnen
+Nachbarn
+Nachbars
+Nachbarschaft
+Nachbarschaften
+Nachbau
+Nachbaus
+Nachbedingung
+Nachbedingungen
+Nachbehandlung
+Nachbehandlungen
+Nachberechnung
+Nachberechnungen
+Nachbereitung
+Nachbereitungen
+Nachbesserung
+Nachbesserungen
+Nachbestellung
+Nachbestellungen
+Nachbildung
+Nachbildungen
+Nachdenkens
+Nachdenklichkeit
+Nachdruck
+Nachdrucks
+Nacheiferung
+Nacheiferungen
+Nacherzählung
+Nacherzählungen
+Nachfahre
+Nachfahren
+Nachfolgemodell
+Nachfolgemodelle
+Nachfolgemodellen
+Nachfolgemodells
+Nachfolger
+Nachfolgerin
+Nachfolgerinnen
+Nachfolgern
+Nachfolgers
+Nachfolgerschaft
+Nachfolgerschaften
+Nachfolgezustand
+Nachfolgezustandes
+Nachfolgezustands
+Nachforderung
+Nachforderungen
+Nachforschung
+Nachforschungen
+Nachgang
+Nachgeburt
+Nachgeschmack
+Nachgiebigkeit
+Nachhinein
+Nachholbedarf
+Nachholbedarfs
+Nachhut
+Nachklang
+Nachklangs
+Nachklänge
+Nachklängen
+Nachkommastelle
+Nachkommastellen
+Nachkommen
+Nachkommens
+Nachkommenschaft
+Nachkömmlinge
+Nachkömmlingen
+Nachladeprogramm
+Nachladeprogramme
+Nachladeprogrammen
+Nachladeprogramms
+Nachladung
+Nachlass
+Nachlasses
+Nachlauf
+Nachlaufs
+Nachlieferung
+Nachlieferungen
+Nachlässe
+Nachlässen
+Nachlässigkeit
+Nachläufe
+Nachläufen
+Nachmittag
+Nachmittage
+Nachmittagen
+Nachmittags
+Nachnahme
+Nachname
+Nachnamen
+Nachnamens
+Nachprüfung
+Nachprüfungen
+Nachreichung
+Nachricht
+Nachrichten
+Nachrichtenwesen
+Nachrichtenwesens
+Nachruhm
+Nachruhms
+Nachrüstung
+Nachsaison
+Nachschau
+Nachschlag
+Nachschlagewerk
+Nachschlagewerke
+Nachschlagewerken
+Nachschlagewerks
+Nachschlags
+Nachschläge
+Nachschlägen
+Nachschlüssel
+Nachschlüsseln
+Nachschub
+Nachschubes
+Nachschubs
+Nachschübe
+Nachschüben
+Nachsetzen
+Nachsetzens
+Nachsilbe
+Nachsilben
+Nacht
+Nachteil
+Nachteile
+Nachteilen
+Nachteils
+Nachtrag
+Nachtrages
+Nachtrags
+Nachträge
+Nachträgen
+Nachwehe
+Nachwehen
+Nachweis
+Nachweise
+Nachweisen
+Nachweises
+Nachwelt
+Nachwirkung
+Nachwirkungen
+Nachwuchs
+Nachwuchses
+Nachzügler
+Nachzüglern
+Nachzüglers
+Nackedei
+Nacken
+Nackens
+Nacktheit
+Nadel
+Nadeldrucker
+Nadeldruckern
+Nadeldruckers
+Nadeln
+Nadelstich
+Nagasaki
+Nagel
+Nagels
+Nahaufnahme
+Nahaufnahmen
+Nahbereich
+Nahrung
+Nahziele
+Nahzielen
+Nairobi
+Naivling
+Naivlinge
+Naivlingen
+Naivlings
+Name
+Namen
+Namens
+Namensbezeichnung
+Namensbezeichnungen
+Namensgebung
+Namensgleichheit
+Namenskonflikt
+Namenskonflikte
+Namenskonflikten
+Namenskonfliktes
+Namenskonvention
+Namenskonventionen
+Namensnennung
+Namensraum
+Namensraumes
+Namensraums
+Namensräume
+Namensräumen
+Namensträger
+Namensänderung
+Namibia
+Namur
+Nanometer
+Nanometern
+Nanosekunde
+Nanosekunden
+Napf
+Napfes
+Napfs
+Naphthalin
+Napoleon
+Napoleons
+Narbe
+Narben
+Narkose
+Narkosen
+Narkotika
+Narkotikum
+Narretei
+Narreteien
+Narrheit
+Narziss
+Narzisse
+Narzissen
+Narzissmus
+Nase
+Nasen
+Nasenlänge
+Nasenlängen
+Nasenspitze
+Nasenspitzen
+Nashorn
+Nashorns
+Nashörner
+Nassau
+Nation
+Nationalchina
+Nationalchinesen
+Nationalhymne
+Nationalhymnen
+Nationalisierung
+Nationalismus
+Nationalist
+Nationalisten
+Nationalität
+Nationalitäten
+Nationen
+Natrium
+Natriums
+Natron
+Natrons
+Natur
+Naturalien
+Naturalismus
+Naturell
+Naturwissenschaft
+Naturwissenschaften
+Natürlichkeit
+Navigation
+Nazi
+Nazis
+Neandertal
+Neandertaler
+Neandertalern
+Neapel
+Nebel
+Nebels
+Nebenabsicht
+Nebenabsichten
+Nebenausgang
+Nebenbedeutung
+Nebenbedeutungen
+Nebenbedingung
+Nebenbedingungen
+Nebenbemerkung
+Nebenbemerkungen
+Nebenbeschäftigung
+Nebenbeschäftigungen
+Nebenbetrieb
+Nebenbetriebe
+Nebenbetrieben
+Nebenbetriebes
+Nebenbetriebs
+Nebenbuhler
+Nebenbuhlerin
+Nebenbuhlerinnen
+Nebenbuhlern
+Nebenbuhlers
+Nebeneffekt
+Nebeneingang
+Nebeneingangs
+Nebeneingänge
+Nebeneingängen
+Nebeneinnahme
+Nebeneinnahmen
+Nebenerfolg
+Nebenerscheinung
+Nebenerwerb
+Nebenerzeugnis
+Nebenerzeugnisse
+Nebenerzeugnissen
+Nebenerzeugnisses
+Nebenfach
+Nebenfaches
+Nebenfolge
+Nebenfolgen
+Nebenfächer
+Nebenkosten
+Nebenläufigkeit
+Nebenmann
+Nebenrolle
+Nebenrollen
+Nebensache
+Nebensachen
+Nebensatz
+Nebensatzes
+Nebenstelle
+Nebenstellen
+Nebensächlichkeit
+Nebensächlichkeiten
+Nebensätze
+Nebensätzen
+Nebenwirkung
+Nebenwirkungen
+Nebenzimmer
+Nebenzimmern
+Nebraska
+Nebukadnezar
+Nebukadnezars
+Necessaire
+Necessaires
+Neckar
+Neckermann
+Neffe
+Neffen
+Negation
+Negationen
+Negativfaktor
+Negativfaktoren
+Neger
+Negerin
+Negerinnen
+Negern
+Negers
+Negev
+Neglige
+Negliges
+Negro
+Nehmer
+Nehru
+Nehrus
+Neid
+Neider
+Neides
+Neigung
+Neigungen
+Neigungsinformation
+Neigungsinformationen
+Neigungssensor
+Neigungssensoren
+Neigungswert
+Neigungswerte
+Neigungswerten
+Neigungswerts
+Neigungswinkel
+Neigungswinkeln
+Neigungsänderung
+Neigungsänderungen
+Neinsager
+Neinstimme
+Neinstimmen
+Neiße
+Nektar
+Nektarine
+Nektarinen
+Nelke
+Nelken
+Nennbetrag
+Nennbetrages
+Nennbetrags
+Nennbeträge
+Nennbeträgen
+Nenndurchfluss
+Nenndurchflusses
+Nenndurchflüsse
+Nenndurchflüssen
+Nenner
+Nenners
+Nenngröße
+Nenngrößen
+Nennkapazität
+Nennkapital
+Nennkapitals
+Nennleistung
+Nennspannung
+Nennstrom
+Nennung
+Nennungen
+Nennvorwiderstand
+Nennwert
+Nennwertes
+Nennwerts
+Neon
+Neonlicht
+Neonlichter
+Neonlichtern
+Neons
+Nepal
+Nepp
+Nepps
+Nero
+Neros
+Nerv
+Nerven
+Nervenbelastung
+Nervenkitzel
+Nervenkraft
+Nervenkrieg
+Nervenkrieges
+Nervenkriegs
+Nervenprobe
+Nervenproben
+Nervenstärke
+Nervensäge
+Nervensägen
+Nervensägerei
+Nervosität
+Nervs
+Nerz
+Nerze
+Nerzen
+Nerzes
+Ness
+Nessesär
+Nessesärs
+Nester
+Nestern
+Nestle
+Netiquette
+Netscape
+Netscapes
+Nettigkeit
+Nettigkeiten
+Netz
+Netzadapter
+Netzadaptern
+Netzadapters
+Netzadresse
+Netzadressen
+Netzanbindung
+Netzanbindungen
+Netzanschluss
+Netzanschlusses
+Netzanschlüsse
+Netzanschlüssen
+Netzausfalltest
+Netzausfalltests
+Netzdienst
+Netzdienste
+Netzdiensten
+Netzdienstes
+Netze
+Netzeingang
+Netzen
+Netzes
+Netzfilter
+Netzfrequenz
+Netzfrequenzadapter
+Netzgerät
+Netzgeräte
+Netzgeräten
+Netzgeräts
+Netzhaut
+Netzkabel
+Netzkabeln
+Netzkabels
+Netzkarte
+Netzkommunikation
+Netzkonfiguration
+Netzkonfigurationen
+Netzmodul
+Netzmodule
+Netzpolung
+Netzschalter
+Netzsoftware
+Netzspannung
+Netzstecker
+Netzsteckern
+Netzsteckers
+Netzstruktur
+Netztechnik
+Netzteil
+Netzteilbereich
+Netzteile
+Netzteilen
+Netzteiles
+Netzteilgruppe
+Netzteilnehmer
+Netzteilnehmern
+Netzteils
+Netzteilsicherung
+Netzteilstecker
+Netzteilsteckers
+Netzteiltypen
+Netzteilwürfel
+Netztrafo
+Netzversorgungskabel
+Netzversorgungskabeln
+Netzwerk
+Netzwerkadapter
+Netzwerkadapterfunktion
+Netzwerkadapterfunktionen
+Netzwerkadaptern
+Netzwerkadapters
+Netzwerkadresse
+Netzwerkadressen
+Netzwerkanschluss
+Netzwerkanschlusses
+Netzwerkanschlüsse
+Netzwerkanschlüssen
+Netzwerkbetrieb
+Netzwerkbuffer
+Netzwerkbuffers
+Netzwerkdaten
+Netzwerke
+Netzwerken
+Netzwerkes
+Netzwerkinterface
+Netzwerkinterfaces
+Netzwerkkanal
+Netzwerkkanals
+Netzwerkkapazität
+Netzwerkkapazitäten
+Netzwerkkommando
+Netzwerkkommandos
+Netzwerkkommunikation
+Netzwerkleitung
+Netzwerkleitungen
+Netzwerkmenü
+Netzwerknummer
+Netzwerknummern
+Netzwerkrechner
+Netzwerkrechnern
+Netzwerkrechners
+Netzwerks
+Netzwerkschnittstelle
+Netzwerkschnittstellen
+Netzwerksoftware
+Netzwerkteilnehmer
+Netzwerkteilnehmern
+Netzwerkteilnehmers
+Netzwerktopologie
+Netzwerktopologien
+Netzwerkverbindung
+Netzwerkverbindungen
+Netzzuführung
+Netzüberlast
+Neuanfang
+Neuaufqqlage
+Neuaufqqlagen
+Neubau
+Neubeginn
+Neuberechnung
+Neubesetzung
+Neubesetzungen
+Neubestellung
+Neubewertung
+Neueinrichtung
+Neueinrichtungen
+Neueintrag
+Neueintragung
+Neueintragungen
+Neueinträge
+Neueinträgen
+Neuenburg
+Neuenglandkolonien
+Neuentstehung
+Neuentwicklung
+Neuentwicklungen
+Neuerscheinung
+Neuerscheinungen
+Neuerung
+Neuerungen
+Neueröffnung
+Neuformulierung
+Neuformulierungen
+Neufundland
+Neugestaltung
+Neugier
+Neugierde
+Neugranada
+Neugründung
+Neugründungen
+Neuguinea
+Neuheit
+Neuheiten
+Neuigkeit
+Neuigkeiten
+Neujahr
+Neujahrs
+Neukauf
+Neukaufes
+Neukaufs
+Neukäufe
+Neukäufen
+Neuling
+Neulinge
+Neulingen
+Neulings
+Neuntklässler
+Neuntklässlerin
+Neuntklässlerinnen
+Neuntklässlern
+Neuntklässlers
+Neuordnung
+Neuprogrammierung
+Neurologe
+Neurologen
+Neurologie
+Neurose
+Neurosen
+Neuseeland
+Neuss
+Neutralisation
+Neutralist
+Neutralisten
+Neutron
+Neuverteilung
+Neuverteilungen
+Neuwerk
+Neuzeit
+Nevada
+News
+Newsgroup
+Newsgroups
+Newsgruppe
+Newsgruppen
+Newton
+Newtons
+NiCd
+Niagarafälle
+Niagarafällen
+Nibbleoperation
+Nibbleoperationen
+Nibelungen
+Nicaragua
+Nichtbeachtung
+Nichtbeachtungen
+Nichtbefolgung
+Nichtbefolgungen
+Nichtdeterminismus
+Nichte
+Nichteinhalten
+Nichteinhaltung
+Nichteintreffen
+Nichteintreten
+Nichten
+Nichtentdeckung
+Nichterfüllung
+Nichterscheinung
+Nichtgebrauch
+Nichtigkeit
+Nichtigkeiten
+Nichtsnutz
+Nichtstun
+Nichtwissen
+Nichtwissens
+Nickel
+Niederbayern
+Niedergang
+Niedergangs
+Niedergeschlagenheit
+Niedergänge
+Niedergängen
+Niederkunft
+Niederlage
+Niederlagen
+Niederlande
+Niederlassung
+Niederlassungen
+Niedersachsen
+Niederschlag
+Niederschlags
+Niederschlesien
+Niederschläge
+Niederschlägen
+Niederschrift
+Niederträchtigkeit
+Niederträchtigkeiten
+Niederung
+Niederungen
+Niederwerfung
+Niederösterreich
+Niedrigkeit
+Niedrigstand
+Niere
+Nieren
+Niete
+Nieten
+Nietzsche
+Nietzsches
+Niger
+Nigeria
+Nigerianer
+Nigerianerin
+Nigerianerinnen
+Nigerianern
+Nigerianers
+Nigerias
+Nihilist
+Nihilisten
+Nikaragua
+Nikolaus
+Nikon
+Nikotin
+Nikotins
+Nil
+Nildelta
+Nils
+Niltal
+Niltals
+Nimbus
+Nimmerwiedersehen
+Nina
+Ninas
+Ninive
+Ninives
+Nippel
+Nippels
+Nippon
+Nippons
+Nische
+Nischen
+Nissan
+Nitroglyzerin
+Niveau
+Niveaus
+Nivellierung
+Nixdorf
+Nixe
+Nixen
+Nizza
+Noah
+Noahs
+Nobelpreis
+Nobelpreise
+Nobelpreisen
+Nobelpreises
+Noblesse
+Nocken
+Nofretete
+Nofretetes
+Nomade
+Nomaden
+Nomenklatur
+Nomenklaturen
+Nominierung
+Nonkonformismus
+Nonne
+Nonnen
+Nonplusultra
+Nord
+Nordafrika
+Nordafrikas
+Nordatlantik
+Nordaustralien
+Nordbayern
+Nordcarolina
+Nordchina
+Norddeutschland
+Norden
+Nordengland
+Nordens
+Nordeuropa
+Nordfrankreich
+Nordfriesland
+Nordirland
+Norditalien
+Nordmeer
+Nordpol
+Nordrhein
+Nordschleswig
+Nordsee
+Nordseekanal
+Nordseekanals
+Nordseite
+Nordseiten
+Nordvietnam
+Nordwesten
+Nordwestens
+Nordwesteuropa
+Norm
+Normalausführung
+Normalbetrieb
+Normaleinstellung
+Normalfall
+Normalfalle
+Normalfalls
+Normalform
+Normalformen
+Normalfälle
+Normalfällen
+Normalisierung
+Normalität
+Normalpapier
+Normalschrift
+Normalsterbliche
+Normalsterblichen
+Normalsterblicher
+Normaltarif
+Normaltarife
+Normaltarifen
+Normaltarifs
+Normalzustand
+Normalzustandes
+Normalzustands
+Normandie
+Normanne
+Normannen
+Normen
+Normierung
+Normschrift
+Normstecker
+Normteil
+Normteile
+Normteilen
+Normteils
+Normungsentscheidung
+Normungsentscheidungen
+Norwegen
+Nostalgie
+Not
+Nota
+Notar
+Notare
+Notaren
+Notars
+Notation
+Notationen
+Notausgang
+Notausgangs
+Notausgänge
+Notausgängen
+Notbehelf
+Notbehelfe
+Notbehelfen
+Notbehelfs
+Note
+Noteingang
+Noteingangs
+Noten
+Notfall
+Notfalls
+Notfälle
+Notfällen
+Nothilfe
+Notierung
+Notiz
+Notizbuch
+Notizbuches
+Notizbücher
+Notizen
+Notlage
+Notlagen
+Notlösung
+Notlösungen
+Notlüge
+Notlügen
+Notmaßnahme
+Notmaßnahmen
+Notprogramm
+Notruf
+Notrufe
+Notrufen
+Notrufs
+Notsignal
+Notsignale
+Notsignalen
+Notsignals
+Notstand
+Notstands
+Notstände
+Notständen
+Notwendigkeit
+Notwendigkeiten
+Notzeit
+Notzeiten
+Notzucht
+Nougat
+Nov
+Nova
+Novelle
+Novellen
+Novellist
+Novellisten
+November
+Novität
+Novitäten
+Novum
+Nr
+Nuance
+Nuancen
+Nudel
+Nudelholz
+Nudeln
+Nudelwalker
+Nudelwalkern
+Nudelwalkers
+Nugat
+Null
+Nulldurchgang
+Nulldurchgangs
+Nulldurchgänge
+Nulldurchgängen
+Nullen
+Nullleiter
+Nullleiters
+Nullpunkt
+Nullpunktes
+Nullpunkts
+Nullserie
+Nullserien
+Nullspannung
+Nullstelle
+Nullstellen
+Nullstellenbestimmung
+Nullstellung
+Nullsummenspiel
+Nullsummenspiele
+Nullsummenspielen
+Nullsummenspiels
+Nullwert
+Numerik
+Numerus
+Nummer
+Nummerierung
+Nummerierungen
+Nummernfolge
+Nummernfolgen
+Nuss
+Nussschale
+Nussschalen
+Nut
+Nute
+Nuten
+Nutzanwendung
+Nutzbarkeit
+Nutzbarmachung
+Nutzbereich
+Nutzbereichs
+Nutzenanalyse
+Nutzenanalysen
+Nutzer
+Nutzerin
+Nutzerinnen
+Nutzern
+Nutzers
+Nutzlast
+Nutzlasten
+Nutzlosigkeit
+Nutzlänge
+Nutzlängen
+Nutzmachung
+Nutznießer
+Nutznießung
+Nutzung
+Nutzungsart
+Nutzungsrecht
+Nutzungsrechte
+Nutzungsrechten
+Nutzungsrechtes
+Nutzungswert
+Nutzungswerte
+Nutzungswerten
+Nutzungswertes
+Nylon
+Nylons
+Nymphe
+Nymphen
+Nächstenliebe
+Nächte
+Nächten
+Nägel
+Näherung
+Näherungen
+Nährmittel
+Nährmitteln
+Nährmittels
+Nährstoff
+Nährstoffen
+Nährwert
+Nährwerte
+Nährwerten
+Nährwertes
+Nässe
+Nöte
+Nöten
+Nötigung
+Nötigungen
+Nüchternheit
+Nürnberg
+Nürnberger
+Nürnbergern
+Nüsschen
+Nüsse
+Nüssen
+Nützlichkeit
+Nützlichkeiten
+OCR
+OECD
+OEM
+OPEC
+ORF
+OS
+Oase
+Oasen
+Obdach
+Obdachs
+Obduktion
+Obduktionen
+Obelisk
+Obelisken
+Ober
+Oberammergau
+Oberaufsicht
+Oberaufsichten
+Oberbau
+Oberbefehl
+Oberbefehls
+Oberbegriff
+Oberfläche
+Oberflächen
+Oberflächlichkeit
+Oberflächlichkeiten
+Obergeschoss
+Obergeschosse
+Obergeschossen
+Obergeschosses
+Obergeschoß
+Obergeschoße
+Obergeschoßen
+Obergeschoßes
+Obergrenze
+Obergrenzen
+Obergruppe
+Obergruppen
+Oberhausen
+Oberhoheit
+Oberhäupter
+Oberkante
+Oberkanten
+Obermenge
+Obermengen
+Oberrhein
+Oberrheintal
+Obers
+Oberschicht
+Oberschlesien
+Oberschwaben
+Oberteil
+Oberteile
+Oberteilen
+Oberteils
+Oberwasser
+Oberägypten
+Oberösterreich
+Obhut
+Objekt
+Objekte
+Objekten
+Objektes
+Objektivismus
+Objektivität
+Objektprogrammierung
+Objekts
+Oblate
+Oblaten
+Obliegenheit
+Obliegenheiten
+Obligation
+Obligationen
+Obmann
+Obmanns
+Oboe
+Oboen
+Obrigkeit
+Obrist
+Obristen
+Observanz
+Observatorium
+Obst
+Obstes
+Obszönität
+Ochs
+Ochse
+Ochsen
+Ode
+Odem
+Odems
+Oden
+Odenwald
+Odessa
+Odium
+Odyssee
+Ofen
+Ofenheizung
+Ofenheizungen
+Ofens
+Ofentemperatur
+Offenbach
+Offenbarung
+Offenbarungen
+Offenheit
+Offenherzigkeit
+Offenlegung
+Offerte
+Offerten
+Offizier
+Offiziere
+Offizieren
+Offiziers
+Offset
+Offsets
+Oheim
+Oheims
+Ohio
+Ohm
+Ohnmacht
+Ohr
+Ohre
+Ohren
+Ohres
+Ohrs
+Ohrwurm
+Ohrwurms
+Okkultismus
+Okkupant
+Okkupanten
+Okkupation
+Okkupationen
+Okt
+Oktaeder
+Oktan
+Oktav
+Oktaven
+Oktober
+Oktobers
+Okular
+Olaf
+Olafs
+Oldenburg
+Oldtimer
+Oldtimers
+Oleg
+Olegs
+Olga
+Olgas
+Oligarchie
+Olive
+Oliven
+Oliver
+Olivers
+Olivetti
+Olymp
+Olympia
+Olympiade
+Oma
+Omas
+Ombudsmann
+Ombudsmannes
+Ombudsmanns
+Omen
+Omnibus
+Omnibusse
+Omnibussen
+Omnibusses
+Onanie
+Onkel
+Onkeln
+Onkels
+Ontologie
+Opa
+Opas
+Opel
+Oper
+Operand
+Operanden
+Operateur
+Operateure
+Operateuren
+Operateurs
+Operation
+Operationen
+Operator
+Operatoren
+Operators
+Operette
+Operetten
+Opern
+Opfer
+Opferbereitschaft
+Opfergang
+Opfers
+Opferung
+Opium
+Opponent
+Opponenten
+Opportunismus
+Opportunist
+Opportunisten
+Opportunitätsprinzip
+Opposition
+Optiker
+Optikern
+Optikers
+Optimalität
+Optimalitätskriterium
+Optimierung
+Optimierungen
+Optimierungsmaßnahme
+Optimierungsmaßnahmen
+Optimierungsmöglichkeit
+Optimierungsmöglichkeiten
+Optimierungsphase
+Optimierungsphasen
+Optimierungspotential
+Optimierungspotentiale
+Optimierungspotentialen
+Optimierungspotentials
+Optimierungspotenzial
+Optimierungspotenziale
+Optimierungspotenzialen
+Optimierungspotenzials
+Optimierungsschritt
+Optimierungsschritte
+Optimierungsschritten
+Optimierungsschritts
+Optimierungsstrategie
+Optimierungsstrategien
+Optimierungstechnik
+Optimierungstechniken
+Optimierungsverfahren
+Optimierungsverfahrens
+Optimismus
+Optimist
+Optimisten
+Optimum
+Optimums
+Option
+Optionen
+Optokoppler
+Optokopplern
+Optokopplers
+Opus
+Orange
+Orangen
+Oratorium
+Oratoriums
+Orbit
+Orbits
+Orchester
+Orchidee
+Orchideen
+Orden
+Ordens
+Ordentlichkeit
+Order
+Ordinariat
+Ordinarien
+Ordinate
+Ordinaten
+Ordner
+Ordnern
+Ordnung
+Ordnungen
+Ordnungshüter
+Ordnungshüterin
+Ordnungshüterinnen
+Ordnungshütern
+Ordnungshüters
+Ordnungskriterien
+Ordnungsliebe
+Ordnungsmerkmal
+Ordnungsmerkmale
+Ordnungsmerkmalen
+Ordnungsmerkmals
+Ordnungswidrigkeit
+Ordnungswidrigkeiten
+Ordonanz
+Ordonnanz
+Oregon
+Organ
+Organe
+Organen
+Organigramm
+Organigramme
+Organigrammen
+Organigramms
+Organisation
+Organisationen
+Organisationsaufgabe
+Organisationsaufgaben
+Organisationsbegabung
+Organisationserfahrung
+Organisationsgabe
+Organisationsgaben
+Organisationssoftware
+Organisator
+Organisatoren
+Organisators
+Organismen
+Organismus
+Organs
+Organum
+Orgel
+Orgie
+Orgien
+Orient
+Orientale
+Orientalen
+Orientalismus
+Orientierung
+Orientierungsdaten
+Orientierungshilfe
+Orientierungshilfen
+Orientierungskrise
+Orientierungskrisen
+Orientierungspreis
+Orientierungspreise
+Orientierungspreisen
+Orientierungspreises
+Orientierungspunkt
+Orientierungsrahmen
+Orientierungsrahmens
+Orients
+Original
+Originalausgabe
+Originalausgaben
+Originale
+Originalen
+Originalfassung
+Originals
+Orion
+Orions
+Orkan
+Orkane
+Orkanen
+Orkans
+Orkneyinseln
+Orlando
+Orleans
+Ornament
+Ornamente
+Ornamenten
+Ornamentes
+Ornaments
+Ort
+Ortes
+Orthogonalität
+Orthografie
+Orthografien
+Orthographie
+Orthographien
+Orthopäde
+Orthopäden
+Orthopädie
+Orts
+Ortsangabe
+Ortsangaben
+Ortsbezeichnung
+Ortschaft
+Ortseingang
+Ortsgespräch
+Ortsgespräche
+Ortsgesprächen
+Ortsgesprächs
+Ortskenntnis
+Ortskenntnisse
+Ortskenntnissen
+Ortskoordinate
+Ortskoordinaten
+Ortsmitte
+Ortsrand
+Ortsteil
+Ortsteile
+Ortsteilen
+Ortsteils
+Ortsvektor
+Ortsvektoren
+Ortsvektors
+Ortswechsel
+Ortszeit
+Ortszeiten
+Ortung
+Orwell
+Orwells
+Oscar
+Oscars
+Osiris
+Oskar
+Oskars
+Oslo
+Osnabrück
+Osnabrücks
+Ost
+Ostafrika
+Ostafrikas
+Ostasiens
+Ostaustralien
+Ostberlin
+Ostberliner
+Ostberlinern
+Ostdeutschland
+Ostdeutschlands
+Osten
+Ostengland
+Ostens
+Osterinsel
+Osterinseln
+Ostern
+Osteuropa
+Osteuropäer
+Osteuropäerin
+Osteuropäerinnen
+Osteuropäern
+Osteuropäers
+Ostfrankreich
+Ostfriesland
+Ostfrieslands
+Osthessen
+Ostholstein
+Ostholsteins
+Ostpakistan
+Ostpolen
+Ostpommern
+Ostpreuße
+Ostpreußen
+Ostpreußens
+Ostschweiz
+Ostsee
+Ostsibirien
+Ostwestfalen
+Ostwestfalens
+Oszillation
+Oszillationen
+Oszillator
+Oszillatoren
+Oszillogramm
+Oszillogramme
+Oszillogrammen
+Oszillogramms
+Oszillograph
+Oszillographen
+Oszilloskop
+Oszilloskope
+Oszilloskopen
+Oszilloskops
+Othmar
+Othmars
+Otmar
+Otmars
+Otter
+Ottern
+Otto
+Ottos
+Output
+Outputfile
+Outputfiles
+Outputs
+Ouvertüre
+Ouvertüren
+Ovation
+Ovationen
+Overall
+Overalls
+Overheadfolie
+Overheadfolien
+Overkill
+Overkills
+Oxford
+Oxid
+Oxide
+Oxiden
+Oxids
+Oxyd
+Oxydation
+Oxydationen
+Oxyde
+Oxyden
+Oxyds
+Ozean
+Ozeane
+Ozeanen
+Ozeans
+PC
+PCI
+PCs
+PGP
+PKW
+PLO
+PLZ
+PPP
+PPS
+PR
+PS
+PTT
+Paarbildung
+Paare
+Paares
+Paarung
+Paarungen
+Pablo
+Pablos
+Pacht
+Pachten
+Pachtung
+Pachtungen
+Packard
+Packer
+Packerei
+Packerin
+Packerinnen
+Packern
+Packers
+Packesel
+Packeseln
+Packesels
+Packmaschine
+Packmaschinen
+Packmaterial
+Packmaterials
+Packpapier
+Packpapiere
+Packpapieren
+Packpapiers
+Packung
+Packungen
+Packzettel
+Paderborn
+Paella
+Paganini
+Paganinis
+Page
+Pahlewi
+Pahlewis
+Paket
+Pakete
+Paketen
+Paketes
+Pakets
+Pakistan
+Pakistaner
+Pakistanern
+Pakt
+Pakte
+Pakten
+Pakts
+Palais
+Palast
+Palastes
+Palatschinke
+Palatschinken
+Palaver
+Palavers
+Palermo
+Palette
+Paletten
+Palisade
+Palisaden
+Palladium
+Pallas
+Palme
+Palmen
+Palomar
+Paläontologe
+Paläontologen
+Paläste
+Palästen
+Palästina
+Palästinenser
+Palästinenserin
+Palästinenserinnen
+Palästinensern
+Palästinensers
+Pamphlet
+Pamphlete
+Pamphleten
+Pamphletist
+Pamphletisten
+Pamphlets
+Pan
+Panamakanal
+Panamakanalzone
+Panasonic
+Pandschab
+Panik
+Paniken
+Panne
+Pannen
+Pannenserie
+Pannenserien
+Panoptikum
+Panorama
+Panoramas
+Pans
+Panter
+Panters
+Panther
+Panthers
+Pantoffel
+Pantoffeln
+Pantoffels
+Pantomime
+Pantomimen
+Panzer
+Panzern
+Panzers
+Papa
+Papagei
+Papageien
+Papageis
+Papas
+Paperback
+Paperfeed
+Papi
+Papier
+Papierbogen
+Papierbogens
+Papierbögen
+Papiere
+Papieren
+Papierformat
+Papierformate
+Papierformaten
+Papierformats
+Papiergeld
+Papiergelder
+Papiergeldern
+Papiergeldes
+Papiergelds
+Papierhandling
+Papierkorb
+Papierkorbes
+Papierkorbs
+Papierkrieg
+Papierkriege
+Papierkriegen
+Papierkriegs
+Papierkörbe
+Papierkörben
+Papiers
+Papierverschwendung
+Papiervorrat
+Papiervorrats
+Papiervorräte
+Papiervorräten
+Pappe
+Pappel
+Pappeln
+Pappen
+Pappenheimer
+Pappkamerad
+Pappkameraden
+Pappmaché
+Pappmachés
+Pappmaschee
+Pappmaschees
+Pappnase
+Pappnasen
+Paprika
+Papst
+Papstes
+Papsttum
+Papsttums
+Papyrus
+Parabel
+Parabeln
+Paracelsus
+Parade
+Paradeiser
+Paradeisern
+Paradeisers
+Paraden
+Paradestück
+Paradestücke
+Paradestücken
+Paradestücks
+Paradies
+Paradiese
+Paradiesen
+Paradieses
+Paradigma
+Paradigmen
+Paradigmenwechsel
+Paradigmenwechsels
+Paradoxie
+Paradoxien
+Paradoxon
+Paradoxons
+Paraffin
+Paragraf
+Paragrafen
+Paragraph
+Paragraphen
+Paraguay
+Parallelbus
+Parallelbusse
+Parallelbussen
+Parallelbusses
+Parallele
+Parallelen
+Parallelität
+Parallelport
+Parallelrechner
+Parallelrechnern
+Parallelrechners
+Parallelwiderstand
+Parallelwiderstands
+Parameter
+Parameteranpassung
+Parameterblock
+Parameterbuffer
+Parameterbuffers
+Parametereingabe
+Parametereingaben
+Parametereinstellung
+Parametereinstellungen
+Parameterliste
+Parameterlisten
+Parametern
+Parameters
+Parametersatz
+Parameterspeicherung
+Parametersätze
+Parametersätzen
+Parametertyp
+Parametertypen
+Parameterzahl
+Parameterübergabe
+Parameterübergabemechanismen
+Parameterübergaben
+Parametrierung
+Parametrierungen
+Parametrisierung
+Paranoia
+Paraphierung
+Parapsychologe
+Parapsychologen
+Parasit
+Parasiten
+Paratyphus
+Pardon
+Parfum
+Parfums
+Parfüm
+Parfümerie
+Parfümerien
+Parfüms
+Paris
+Pariser
+Paritycheck
+Parityerror
+Parityfehler
+Parityfehlers
+Parität
+Paritäten
+Paritätstest
+Park
+Parkett
+Parks
+Parlament
+Parlamentarier
+Parlamentariern
+Parlamentariers
+Parlamentarismus
+Parlamente
+Parlamenten
+Parlamentes
+Parlaments
+Parnass
+Parodie
+Parodien
+Parole
+Parolen
+Paroli
+Parser
+Part
+Partei
+Parteien
+Parteilichkeit
+Parterre
+Parterres
+Partikel
+Partikeln
+Partikels
+Partikularismus
+Partisan
+Partisanen
+Partition
+Partitionen
+Partitionierung
+Partitur
+Partituren
+Partizip
+Partizipien
+Partizips
+Partner
+Partnern
+Partners
+Partnerschaft
+Partnerschaften
+Partnerstadt
+Parts
+Party
+Partys
+Parzelle
+Parzellen
+Pascal
+Pascals
+Pascha
+Pass
+Passage
+Passagen
+Passagier
+Passagiere
+Passagieren
+Passagierin
+Passagierinnen
+Passagiers
+Passant
+Passanten
+Passau
+Passbild
+Passbilder
+Passbildern
+Passbildes
+Passbilds
+Passes
+Passform
+Passfoto
+Passfotos
+Passgenauigkeit
+Passhöhe
+Passhöhen
+Passion
+Passiva
+Passivität
+Passivum
+Passung
+Passwort
+Passworte
+Passworten
+Passworts
+Passwörter
+Passwörtern
+Paste
+Pasten
+Pasteurisierung
+Pastor
+Pastoren
+Pastorin
+Pastorinnen
+Pastors
+Patagonien
+Patch
+Patches
+Patchwork
+Pate
+Paten
+Patenkirchen
+Patenschaft
+Patent
+Patentamt
+Patentamtes
+Patente
+Patenten
+Patentes
+Patentlösung
+Patents
+Pater
+Paters
+Pathologe
+Pathologen
+Pathologie
+Pathologien
+Pathos
+Patient
+Patienten
+Patientin
+Patientinnen
+Patin
+Patinnen
+Patriarchat
+Patriarchats
+Patriot
+Patrioten
+Patriotismus
+Patrizier
+Patrizierhaus
+Patrizierhauses
+Patrizierhäuser
+Patrizierhäusern
+Patriziern
+Patriziers
+Patriziertum
+Patronat
+Patronate
+Patronaten
+Patronats
+Patrone
+Patronen
+Patronin
+Patrouille
+Patrouillen
+Patsche
+Pattex
+Pattstellung
+Pattstellungen
+Patzer
+Pauke
+Pauken
+Paukenschlag
+Paukenschlages
+Paukenschlags
+Paukenschläge
+Paukenschlägen
+Pauker
+Paul
+Paulette
+Paulettes
+Pauls
+Paulus
+Pausentaste
+Pavia
+Pavian
+Paviane
+Pavianen
+Pavians
+Pavillon
+Pavillons
+Pazifik
+Pazifiks
+Pazifikstaaten
+Pazifismus
+Pazifist
+Pazifisten
+Pech
+Pechs
+Pechserie
+Pechserien
+Pechsträhne
+Pechsträhnen
+Pechvogel
+Pedal
+Pedale
+Pedalen
+Pedals
+Pedanterie
+Pedro
+Pedros
+Peepshow
+Peepshows
+Pegasus
+Pegel
+Pegeln
+Peggy
+Peggys
+Peilung
+Peilungen
+Pein
+Peiniger
+Peinigerin
+Peinigerinnen
+Peinigern
+Peinigers
+Peinigung
+Peinigungen
+Peinlichkeit
+Peinlichkeiten
+Pekinese
+Pekinesen
+Peking
+Pelerine
+Pelerinen
+Pelikan
+Pelz
+Pelze
+Pelzen
+Pelzes
+Pendant
+Pendel
+Pendeln
+Pendels
+Penetration
+Penicillin
+Penicillins
+Penizillin
+Penizillins
+Pennsylvanien
+Pension
+Pensionen
+Pensionierung
+Pensionierungen
+Pensionär
+Pensionäre
+Pensionären
+Pensionärin
+Pensionärinnen
+Pensionärs
+Pensum
+Pensums
+Pentagon
+Pentagons
+Penthouse
+Pentium
+Pentiums
+Pepsi
+Perestroika
+Perfektion
+Perfektionierung
+Perfektionist
+Perfektionisten
+Performance
+Perikles
+Periode
+Perioden
+Periodizität
+Peripherie
+Peripheriebus
+Peripheriebusse
+Peripheriebussen
+Peripheriebusses
+Peripheriechips
+Peripheriegerät
+Peripheriegeräte
+Peripheriegeräten
+Peripheriegeräts
+Peripheriekonzept
+Peripheriekonzepte
+Peripheriekonzepten
+Peripheriekonzeptes
+Peripheriekonzepts
+Peripherien
+Peripherierechner
+Perkussionist
+Perkussionisten
+Perkussionistin
+Perkussionistinnen
+Permanenz
+Permutation
+Peronist
+Peronisten
+Perpetuum
+Perser
+Perserin
+Perserinnen
+Persern
+Persers
+Persien
+Persiflage
+Persiflagen
+Persistenz
+Person
+Personal
+Personalabbau
+Personalabteilung
+Personalabteilungen
+Personalakte
+Personalakten
+Personalangabe
+Personalangaben
+Personalauswahl
+Personalausweis
+Personalausweise
+Personalausweisen
+Personalausweises
+Personalbedarf
+Personalbedarfs
+Personalbüro
+Personalbüros
+Personalchef
+Personalchefs
+Personalcomputer
+Personaleinführung
+Personalfluktuation
+Personalfluktuationen
+Personalführung
+Personalien
+Personalknappheit
+Personalkosten
+Personalmittel
+Personalparkplatz
+Personalpolitik
+Personalrat
+Personalrats
+Personalraum
+Personalraumes
+Personalraums
+Personalräume
+Personalräumen
+Personals
+Personalschalter
+Personalstab
+Personalstand
+Personalverwaltung
+Personalveränderung
+Personalvorschlag
+Personalvorschlages
+Personalvorschlags
+Personalvorschläge
+Personalvorschlägen
+Personalwerbung
+Personalwesen
+Personalwesens
+Personalzuwachs
+Personalzuwachses
+Personen
+Personengruppe
+Personengruppen
+Personenkreis
+Personenkreise
+Personenkreisen
+Personenkreises
+Personifizierung
+Personifizierungen
+Perspektive
+Perspektiven
+Persönlichkeit
+Persönlichkeiten
+Peru
+Perus
+Perversion
+Perversionen
+Perversität
+Perzeption
+Perzeptionen
+Perücke
+Perücken
+Peseta
+Pesete
+Peseten
+Pessimismus
+Pessimist
+Pessimisten
+Pest
+Pestwurz
+Peter
+Peterchen
+Peterchens
+Peters
+Petersdom
+Petersdoms
+Petersilie
+Peterskirche
+Petersplatz
+Petition
+Petitionen
+Petra
+Petras
+Petroleum
+Petrus
+Petting
+Pfad
+Pfadangabe
+Pfadangaben
+Pfade
+Pfaden
+Pfades
+Pfadfinder
+Pfadname
+Pfadnamen
+Pfads
+Pfahl
+Pfahles
+Pfahls
+Pfalz
+Pfand
+Pfandes
+Pfands
+Pfanne
+Pfannen
+Pfarrei
+Pfarreien
+Pfarrer
+Pfarrern
+Pfarrers
+Pfau
+Pfaue
+Pfauen
+Pfaus
+Pfeffer
+Pfeffers
+Pfeil
+Pfeile
+Pfeilen
+Pfeiler
+Pfeilern
+Pfeilers
+Pfeilrichtung
+Pfeilrichtungen
+Pfeils
+Pfeiltaste
+Pfeiltasten
+Pfeilzeichen
+Pfeilzeichens
+Pfennig
+Pfennige
+Pfennigen
+Pfennigfuchser
+Pfennigs
+Pfennigstück
+Pfennigstückes
+Pfennigstücks
+Pferch
+Pferd
+Pferdchen
+Pferdchens
+Pferde
+Pferden
+Pferdes
+Pfg
+Pfiff
+Pfiffe
+Pfiffes
+Pfiffigkeit
+Pfiffigkeiten
+Pfiffs
+Pfingsten
+Pfirsich
+Pfirsiche
+Pfirsichen
+Pfirsichs
+Pfister
+Pflanzer
+Pflanzern
+Pflanzers
+Pflanzung
+Pflanzungen
+Pflaster
+Pflasters
+Pflaume
+Pflaumen
+Pfleglinge
+Pfleglingen
+Pflegung
+Pflegungen
+Pflicht
+Pflichtanteil
+Pflichtanteile
+Pflichtanteilen
+Pflichtanteils
+Pflichtbewusstsein
+Pflichtbewusstseins
+Pflichten
+Pflichtenheft
+Pflichtenhefte
+Pflichtenheften
+Pflichtenheftes
+Pflichterfüllung
+Pflichtfach
+Pflichtfaches
+Pflichtfächer
+Pflichtfächern
+Pflichtgefühl
+Pflichtlektüre
+Pflichtlektüren
+Pflichtverletzung
+Pflichtversäumnis
+Pflichtversäumnisse
+Pflichtversäumnissen
+Pflichtversäumnisses
+Pflichtübung
+Pflichtübungen
+Pflug
+Pfluges
+Pflugs
+Pflücker
+Pflüge
+Pflügen
+Pforte
+Pforten
+Pfosten
+Pfostenleiste
+Pfostenleisten
+Pfostens
+Pfostenstecker
+Pfote
+Pfoten
+Pfründe
+Pfründen
+Pfuhl
+Pfund
+Pfunde
+Pfunden
+Pfundes
+Pfunds
+Pfuscher
+Pfänder
+Pfändern
+Pfändung
+Pfändungen
+Pförtner
+Pförtnern
+Pförtners
+Pfütze
+Pfützen
+Ph
+Phalanx
+Phantasie
+Phantasien
+Phantast
+Phantasten
+Phantasterei
+Phantastereien
+Phantastik
+Phantom
+Phantome
+Phantomen
+Phantoms
+Pharao
+Pharaonen
+Pharisäer
+Pharmakologie
+Pharmazeut
+Pharmazeuten
+Pharmazeutiker
+Pharmazie
+Phase
+Phasen
+Phasenbeziehung
+Phasenbeziehungen
+Phasenfunktion
+Phasenfunktionen
+Phasenverschiebung
+Phasenverschiebungen
+Phenol
+Philatelist
+Philatelisten
+Philharmonie
+Philharmonien
+Philharmoniker
+Philharmonikern
+Philharmonikers
+Philipp
+Philippinen
+Philippinengraben
+Philippineninseln
+Philipps
+Philippsburg
+Philips
+Philister
+Philologe
+Philologen
+Philologenschaft
+Philosoph
+Philosophen
+Philosophentum
+Philosophie
+Philosophien
+Phlegma
+Phon
+Phonetik
+Phonograph
+Phonographen
+Phosphat
+Phosphor
+Phosphors
+Photo
+Photograph
+Photographen
+Photographie
+Photographien
+Photokopie
+Photokopien
+Photolyse
+Photosynthese
+Photosynthesen
+Phrase
+Phrasen
+Phylogenese
+Physik
+Physiker
+Physikerin
+Physikerinnen
+Physikern
+Physikers
+Physiognomie
+Physiognomien
+Physiologe
+Physiologen
+Physiologie
+Phänomen
+Phänomene
+Phänomenen
+Phänomenologie
+Phänomens
+Phönix
+Piaget
+Piagets
+Pianist
+Pianisten
+Piano
+Picasso
+Picassos
+Pickel
+Pickeln
+Pickerl
+Pickerln
+Picknick
+Picknicks
+Piefke
+Piefkes
+Piemont
+Piepsen
+Piepser
+Piepsern
+Piepsers
+Pietät
+Piezoaufnehmer
+Piezoaufnehmers
+Piezogebern
+Piezokeramik
+Piezomaterial
+Piezomaterials
+Piezopiepser
+Piezoplatte
+Piezoscheiben
+Piezoschwinger
+Piezoseite
+Piezosummer
+Pigment
+Pigmente
+Pigmenten
+Pigments
+Pik
+Pike
+Piktogramm
+Piktogramme
+Piktogrammen
+Piktogramms
+Pilatus
+Pilger
+Pilgern
+Pilgers
+Pille
+Pillen
+Pilot
+Piloten
+Pilotprojekt
+Pilotprojekte
+Pilotprojekten
+Pilotprojekts
+Pils
+Pilsen
+Pilsener
+Pilsenern
+Pilz
+Pilze
+Pilzen
+Pilzes
+Pimmel
+Pinadapter
+Pinadapters
+Pinbelegung
+Pinbezeichnung
+Pinbezeichnungen
+Pingpong
+Pinguin
+Pinguine
+Pinguinen
+Pinguins
+Pinie
+Pinien
+Pinnummer
+Pinnummern
+Pinsel
+Pinseln
+Pinsels
+Pinselstrich
+Pinselstriche
+Pinselstrichen
+Pinselstriches
+Pinzette
+Pinzetten
+Pionier
+Pionierarbeit
+Pionierarbeiten
+Pioniere
+Pionieren
+Pioniergeist
+Pionierin
+Pionierinnen
+Pionierleistung
+Pioniers
+Pioniertat
+Pioniertaten
+Pioniertrupp
+Pioniertrupps
+Pionierzeit
+Pipeline
+Pipelines
+Pipette
+Pipetten
+Pippi
+Pippis
+Piquet
+Pirat
+Piraten
+Pirelli
+Pirmasens
+Pirouette
+Pirouetten
+Pirsch
+Pisser
+Pissoir
+Pistazie
+Pistazien
+Piste
+Pisten
+Pistole
+Pistolen
+Pius
+Pixel
+Pixelgruppen
+Pixelmanipulation
+Pixelmatrix
+Pixelmuster
+Pixeltiefe
+Pizza
+Pizzas
+Pizzeria
+Placebo
+Plackerei
+Plackereien
+Plagiat
+Plagiator
+Plagiatoren
+Plagiats
+Plakat
+Plakate
+Plakaten
+Plakates
+Plakats
+Plakette
+Plaketten
+Plan
+Planer
+Planern
+Planers
+Planes
+Planet
+Planeten
+Planierung
+Planke
+Planken
+Plankton
+Planquadrat
+Plans
+Planstelle
+Planstellen
+Plantage
+Plantagen
+Plantschbecken
+Plantschbeckens
+Planung
+Planungen
+Planungsansätze
+Planungsansätzen
+Planungsarbeit
+Planungsausschuss
+Planungsausschusses
+Planungsausschüsse
+Planungsausschüssen
+Planungschef
+Planungschefs
+Planungsfehler
+Planungskomitee
+Planungskomitees
+Planungskommission
+Planungskommissionen
+Planungsmethode
+Planungsmethoden
+Planungsunterlagen
+Planungsvorschlag
+Planungsvorschlages
+Planungsvorschlags
+Planungsvorschläge
+Planungsvorschlägen
+Planungsziel
+Planzahl
+Plasma
+Plasmadisplay
+Plasmadisplays
+Plasmas
+Plasmen
+Plastik
+Plastiken
+Plastiks
+Plateau
+Plateaus
+Platin
+Platinchen
+Platine
+Platinen
+Platinenanschraubwinkel
+Platinenanzahlung
+Platinenebene
+Platinenhalterung
+Platinenkombination
+Platinenkombinationen
+Platinenkonzept
+Platinenparameter
+Platinentest
+Platins
+Plato
+Platon
+Platonismus
+Platos
+Plattenkapazität
+Plattenkapazitäten
+Plattensee
+Plattform
+Plattformen
+Plattitüde
+Plattitüden
+Platz
+Platzbedarf
+Platzbelegung
+Platzeinsparung
+Platzes
+Platzgründe
+Platzgründen
+Platzhalter
+Platzhaltern
+Platzhalters
+Platzierung
+Platzierungen
+Platzmangel
+Platznot
+Platzprobleme
+Platzproblemen
+Plauderei
+Plaudereien
+Plausch
+Plausibilität
+Playback
+Playboy
+Playboys
+Plebejer
+Pleite
+Pleiten
+Pleitier
+Pleitiers
+Plenum
+Plenums
+Plot
+Plots
+Plotter
+Plumpheit
+Plural
+Pluralismus
+Pluralität
+Plurals
+Pluspunkte
+Pluspunkten
+Pluswert
+Pluswerte
+Pluswerten
+Pluswertes
+Pluswerts
+Plutarch
+Plutarchs
+Pluto
+Plutonium
+Plymouth
+Plädoyer
+Pläne
+Plänen
+Pläsier
+Plätte
+Plätzchen
+Plätzchens
+Plätze
+Plätzen
+Plünderer
+Plünderung
+Plünderungen
+Plüsch
+Pneu
+Pneumatik
+Pneus
+Po
+Pocken
+Podien
+Podium
+Podiums
+Podiumsdiskussion
+Podiumsdiskussionen
+Podiumsgespräch
+Podiumsgespräche
+Podiumsgesprächen
+Podiumsgesprächs
+Poesie
+Poet
+Poeten
+Pointe
+Pointen
+Pokal
+Pokale
+Pokalen
+Pokals
+Poker
+Pol
+Polarität
+Polaritäten
+Polarkoordinaten
+Polaroid
+Pole
+Polemik
+Polemiken
+Polen
+Polens
+Polente
+Police
+Policen
+Polier
+Poliklinik
+Polin
+Polinnen
+Polis
+Politesse
+Politessen
+Politik
+Politiker
+Politikerin
+Politikerinnen
+Politikern
+Politikers
+Politur
+Polizei
+Polizist
+Polizisten
+Polizistin
+Polizistinnen
+Polle
+Pollen
+Pollinie
+Pollinien
+Polonaise
+Pols
+Polster
+Polstern
+Polsters
+Polsterung
+Polsterungen
+Polygamie
+Polygonzug
+Polygonzugs
+Polygonzüge
+Polygonzügen
+Polynesier
+Polynesiern
+Polypen
+Polystyrol
+Pomade
+Pomaden
+Pommern
+Pommes
+Pomp
+Pompadour
+Pompadours
+Pompidou
+Pompidous
+Pomps
+Pontiac
+Ponton
+Pontons
+Pony
+Ponys
+Pool
+Pools
+Pop
+Popanz
+Popanzen
+Pope
+Popeline
+Popen
+Popo
+Popos
+Popper
+Poppern
+Poppers
+Popularität
+Population
+Populationen
+Pore
+Poren
+Porno
+Pornografie
+Pornografien
+Pornographie
+Pornographien
+Pornos
+Porsche
+Portabilität
+Portabilitätsproblem
+Portabilitätsprobleme
+Portefeuille
+Portefeuilles
+Portemonnaie
+Portemonnaies
+Portfunktionen
+Portier
+Portiers
+Portierung
+Portierungsaufwand
+Portierungsaufwandes
+Portierungsaufwands
+Portion
+Portionen
+Portionierung
+Portland
+Portmonee
+Portmonees
+Porto
+Portos
+Portrait
+Porträt
+Porträtfoto
+Porträtfotos
+Porträtist
+Porträtisten
+Porträts
+Portsmouth
+Portugal
+Portugals
+Portugiese
+Portugiesen
+Portugiesin
+Portugiesinnen
+Porzellan
+Porzellane
+Porzellanen
+Porzellans
+Posaune
+Posaunen
+Pose
+Posen
+Position
+Positionen
+Positionierung
+Positionsänderung
+Positionsänderungen
+Positivismus
+Posse
+Possen
+Post
+PostScript
+Postabgabe
+Postablieferung
+Postablieferungen
+Postamt
+Postamtes
+Postamts
+Postanschrift
+Postanschriften
+Postbeamte
+Postbeamten
+Postbeamter
+Postbote
+Postboten
+Posten
+Postens
+Postenverteilung
+Poster
+Postfach
+Postfächer
+Postfächern
+Postgebühr
+Postgebühren
+Postgeheimnis
+Postgeheimnisse
+Postgeheimnissen
+Postgeheimnisses
+Postille
+Postillen
+Postkarte
+Postkarten
+Postleitzahl
+Postleitzahlen
+Poststempel
+Poststempeln
+Poststempels
+Postulat
+Postulate
+Postulaten
+Postulates
+Postulats
+Postämter
+Potentat
+Potentaten
+Potential
+Potentiale
+Potentialen
+Potentialfreiheit
+Potentials
+Potentialtrennung
+Potentiometer
+Potentiometerauswertung
+Potentiometern
+Potentiometers
+Potentiometerspannung
+Potentiometerspannungen
+Potentiometerstellung
+Potentiometerwert
+Potenz
+Potenzen
+Potenzial
+Potenzialbarriere
+Potenzialbarrieren
+Potenziale
+Potenzialen
+Potenzialfreiheit
+Potenzials
+Potenzialtopf
+Potenzialtrennung
+Potenzialverlauf
+Potenzialverläufe
+Potenzialverläufen
+Potenzreihe
+Potenzreihen
+Poti
+Potis
+Potsdam
+Potsdams
+Povidl
+Povoir
+Poweradapter
+Poweradaptern
+Poweradapters
+Powerdown
+Powerpack
+Powerpacks
+Powerup
+Pracht
+Prachtexemplar
+Prachtexemplare
+Prachtexemplaren
+Prachtexemplars
+Prachtstück
+Prado
+Prag
+Prager
+Pragern
+Pragmatik
+Pragmatiker
+Pragmatikern
+Prags
+Prahlerei
+Prahlhans
+Praktika
+Praktikant
+Praktikanten
+Praktikantin
+Praktikantinnen
+Praktiken
+Praktiker
+Praktikern
+Praktikers
+Praktikum
+Praktikums
+Praline
+Pralinen
+Pranger
+Prangers
+Pranke
+Pranken
+Pratze
+Pratzen
+Prawda
+Prawdas
+Praxen
+Praxis
+Praxisbezug
+Praxisbezugs
+Praxiserfahrung
+Praxisnähe
+Praxisuntauglichkeit
+Preis
+Preises
+Prellung
+Prellungen
+Premier
+Premiere
+Premieren
+Premiers
+Presbyter
+Presbyterianer
+Presbyterianern
+Presbyterianers
+Presbyterin
+Presbyterinnen
+Presbyterium
+Presbyteriums
+Presbytern
+Presbyters
+Pressestelle
+Pressestellen
+Pression
+Pressionen
+Pressung
+Prestige
+Prestiges
+Preuße
+Preußen
+Priester
+Priestern
+Primaballerina
+Primadonna
+Primaner
+Primat
+Primate
+Primaten
+Primats
+Primitivismus
+Primitivität
+Primus
+Primzahl
+Primzahlen
+Prinz
+Prinzen
+Prinzessin
+Prinzessinnen
+Prinzip
+Prinzipien
+Prinzips
+Priorität
+Prioritäten
+Prismen
+Privatadresse
+Privatadressen
+Privatangelegenheit
+Privataufenthalt
+Privataufenthalte
+Privataufenthalten
+Privataufenthaltes
+Privataufenthalts
+Privatausgabe
+Privatausgaben
+Privatdozent
+Privatdozenten
+Privateigentum
+Privateigentums
+Privatfrage
+Privatfragen
+Privathaftpflicht
+Privathaushalt
+Privatinteresse
+Privatinteressen
+Privatisierung
+Privatisierungen
+Privatissimum
+Privatleben
+Privatlebens
+Privatleute
+Privatleuten
+Privatmann
+Privatperson
+Privatpersonen
+Privatsphäre
+Privatsphären
+Privatvermögen
+Privatwohnung
+Privatwohnungen
+Privileg
+Privilegien
+Privilegs
+Probeausdruck
+Probeausdrucke
+Probeausdrucken
+Probeausdrucks
+Probeausgabe
+Probeausgaben
+Probebestellung
+Probebestellungen
+Probebetrieb
+Probeexemplar
+Probeexemplare
+Probeexemplaren
+Probeexemplars
+Probefahrt
+Probefall
+Probelauf
+Probelaufs
+Probelieferung
+Probeläufe
+Probeläufen
+Probenarbeit
+Probenplan
+Probierens
+Problem
+Problematik
+Problematiken
+Problembereich
+Problembereiche
+Problembereichen
+Problembereichs
+Problembeschreibung
+Problembeseitigung
+Problemchen
+Problemchens
+Probleme
+Problemen
+Problemfall
+Problemfalls
+Problemfälle
+Problemfällen
+Problemkreis
+Problemkreise
+Problemkreisen
+Problemkreises
+Problemlösung
+Problemlösungen
+Problems
+Problemstellung
+Problemstellungen
+Produkt
+Produktangebot
+Produktbeschreibung
+Produktbezeichnung
+Produkte
+Produkten
+Produktentwicklung
+Produktes
+Produktfamilie
+Produktfamilien
+Produktinformation
+Produktinformationen
+Produktion
+Produktionen
+Produktionsbeginn
+Produktionsbereich
+Produktionsbereiche
+Produktionsbereichen
+Produktionsbereichs
+Produktionskapazität
+Produktionskapazitäten
+Produktionskosten
+Produktionslinie
+Produktionslinien
+Produktionsmittel
+Produktionsprozess
+Produktionsprozesse
+Produktionsprozessen
+Produktionsprozesses
+Produktionsstätte
+Produktionsstätten
+Produktivität
+Produktivitätssteigerung
+Produktlinie
+Produktlinien
+Produktpalette
+Produktpaletten
+Produktpolitik
+Produktqualität
+Produkts
+Produktübersicht
+Produktübersichten
+Produzent
+Produzenten
+Prof
+Profession
+Professionalismus
+Professionen
+Professor
+Professoren
+Professorin
+Professorinnen
+Professors
+Professur
+Professuren
+Profi
+Profil
+Profile
+Profilen
+Profils
+Profis
+Profit
+Profitgier
+Profits
+Prognose
+Prognosen
+Prognoseverfahren
+Prognoseverfahrens
+Prognostik
+Prognostiker
+Prognostikerin
+Prognostikerinnen
+Prognostikern
+Prognostikers
+Programm
+Programmabbruch
+Programmablauf
+Programmablaufes
+Programmablaufplan
+Programmablaufplans
+Programmablaufs
+Programmabläufe
+Programmabläufen
+Programmanalyse
+Programmanalysen
+Programmaufruf
+Programmaufrufe
+Programmaufrufen
+Programmaufrufs
+Programmausführung
+Programmbestandteil
+Programmbestandteile
+Programmbestandteilen
+Programmbestandteils
+Programmbibliothek
+Programmcode
+Programmdarstellung
+Programmdarstellungen
+Programmdatei
+Programmdateien
+Programmdokumentation
+Programme
+Programmen
+Programmende
+Programmentwicklung
+Programmentwicklungsprozess
+Programmentwicklungsprozesse
+Programmentwicklungsprozessen
+Programmentwicklungsprozesses
+Programmerstellung
+Programmfehler
+Programmfehlern
+Programmfehlers
+Programmfile
+Programmfiles
+Programmierarbeit
+Programmierarbeiten
+Programmierarbeitszeit
+Programmieraufgabe
+Programmieraufgaben
+Programmieraufwand
+Programmieraufwands
+Programmierausrüstung
+Programmierbarkeit
+Programmiereffizienz
+Programmiereingänge
+Programmiereinrichtung
+Programmiereinrichtungen
+Programmierer
+Programmiererfahrung
+Programmierern
+Programmierers
+Programmierfehler
+Programmierfehlers
+Programmierkosten
+Programmierleistung
+Programmierleistungen
+Programmiermethodik
+Programmiermethodiken
+Programmierneigung
+Programmierneigungen
+Programmieroberfläche
+Programmieroberflächen
+Programmierproblem
+Programmierprobleme
+Programmierproblemen
+Programmierproblems
+Programmierrichtlinien
+Programmiersprache
+Programmiersprachen
+Programmierstil
+Programmierstile
+Programmierstilen
+Programmierstils
+Programmierstunde
+Programmierstunden
+Programmiertechnik
+Programmiertechniken
+Programmiertrick
+Programmiertricks
+Programmierumgebung
+Programmierumgebungen
+Programmierung
+Programmierzeit
+Programmierzeitpunkt
+Programminbetriebnahme
+Programminstallation
+Programminstallationen
+Programminterface
+Programminterfaces
+Programmkonstrukt
+Programmkonstrukte
+Programmkonstrukten
+Programmkonstruktes
+Programmkonstruktion
+Programmkonstrukts
+Programmladezeit
+Programmlauf
+Programmlaufs
+Programmläufe
+Programmläufen
+Programmmodul
+Programmmodule
+Programmobjekt
+Programmobjekte
+Programmobjekten
+Programmobjektes
+Programmobjekts
+Programmoptimierung
+Programmoptimierungen
+Programmpaket
+Programmpakete
+Programmpaketen
+Programmpakets
+Programmquellcode
+Programmquellcodes
+Programmrepräsentation
+Programmrepräsentationen
+Programms
+Programmschritt
+Programmspeicher
+Programmspeicherbereich
+Programmspeicherbereiche
+Programmspeichers
+Programmstart
+Programmstelle
+Programmstruktur
+Programmstrukturen
+Programmsystem
+Programmsystemen
+Programmteil
+Programmtext
+Programmtexte
+Programmtexten
+Programmtextes
+Programmtransformation
+Programmtransformationen
+Programmverifikation
+Programmversion
+Programmversionen
+Programmverzweigung
+Programmverzweigungen
+Programmwartung
+Programmzustände
+Programmzweig
+Programmzweige
+Programmzweigen
+Programmzweigs
+Progress
+Progresse
+Progressen
+Progresses
+Progression
+Projekt
+Projektbearbeitung
+Projektbearbeitungen
+Projektbeginn
+Projektbeginns
+Projektbericht
+Projektberichte
+Projektberichten
+Projektberichtes
+Projektbeschreibung
+Projektbeschreibungen
+Projekte
+Projekten
+Projekterfahrung
+Projekterfahrungen
+Projektergebnis
+Projektergebnisse
+Projektergebnissen
+Projektergebnisses
+Projektes
+Projektion
+Projektionen
+Projektlaufzeit
+Projektlaufzeiten
+Projektleiter
+Projektleitern
+Projektleiters
+Projektmanagement
+Projektmanagements
+Projektor
+Projektoren
+Projektpartner
+Projektpartnern
+Projektpartners
+Projektphase
+Projektphasen
+Projektresultat
+Projektresultaten
+Projekts
+Proklamation
+Proklamationen
+Prokura
+Prokuren
+Prokurist
+Prokuristen
+Proletariat
+Proletariats
+Proletarier
+Proletariern
+Proletariers
+Proletarisierung
+Proletentum
+Proletentums
+Prolog
+Prologe
+Prologen
+Prologs
+Promenade
+Promenaden
+Promille
+Prominenz
+Prominenzen
+Promoter
+Promotern
+Promotion
+Promotionen
+Propagandist
+Propagandisten
+Propagierung
+Propeller
+Prophet
+Propheten
+Prophezeiung
+Prophezeiungen
+Proportion
+Proportionalschrift
+Proportionen
+Proporz
+Propyläen
+Prosa
+Prospekt
+Prospekte
+Prospekten
+Prospekts
+Prostata
+Protein
+Protektion
+Protektionismus
+Protektor
+Protektorat
+Protest
+Protestaktion
+Protestaktionen
+Protestant
+Protestanten
+Protestantismus
+Protestbrief
+Protestbriefes
+Protestbriefs
+Proteste
+Protesten
+Protestes
+Protestkundgebung
+Protestkundgebungen
+Protestschreiben
+Protestschreibens
+Protestschritt
+Proteststurm
+Proteststurms
+Prothese
+Prothesen
+Protokoll
+Protokolldrucker
+Protokolle
+Protokollen
+Protokollfehler
+Protokollierung
+Protokolls
+Proton
+Protonen
+Protons
+Prototyp
+Prototypen
+Prototyps
+Proviant
+Proviants
+Provider
+Providern
+Providers
+Provinz
+Provinzen
+Provision
+Provisionen
+Provisorien
+Provisorium
+Provokation
+Provokationen
+Proxy
+Proxys
+Prozedur
+Prozeduren
+Prozent
+Prozentangabe
+Prozentangaben
+Prozentanteil
+Prozentanteile
+Prozentanteilen
+Prozentanteils
+Prozente
+Prozenten
+Prozentgehalt
+Prozentpunkt
+Prozentpunkte
+Prozentpunkten
+Prozentpunktes
+Prozentpunkts
+Prozents
+Prozentsatz
+Prozentskala
+Prozentsteigerung
+Prozentsteigerungen
+Prozentsätze
+Prozentsätzen
+Prozentwert
+Prozentwerte
+Prozentwerten
+Prozentwertes
+Prozentwerts
+Prozentzahl
+Prozess
+Prozesse
+Prozessen
+Prozesses
+Prozession
+Prozessionen
+Prozessor
+Prozessoren
+Prozessorleistung
+Prozessorregister
+Prozessors
+Prozessorumgebung
+Prozessrechner
+Prozessrechnersystem
+Prozesssteuerung
+Prunk
+Prunkstück
+Prunkstücks
+Präambel
+Prädestination
+Prädestinationen
+Prädikat
+Prädikate
+Prädikaten
+Prädikatenlogik
+Prädikates
+Prädikats
+Präfekt
+Präfekten
+Präfektur
+Präferenz
+Präferenzen
+Prägnanz
+Prägung
+Präjudiz
+Prälat
+Prälaten
+Präludium
+Prämie
+Prämien
+Prämierung
+Prämisse
+Prämissen
+Präparat
+Präparate
+Präparaten
+Präparates
+Präparation
+Präparationen
+Präparats
+Prärie
+Prärien
+Präsentation
+Präsentationen
+Präsentierteller
+Präsenz
+Präsenzen
+Präsident
+Präsidenten
+Präsidentin
+Präsidentinnen
+Präsidentschaft
+Präsidentschaften
+Präsidien
+Präsidium
+Präsidiums
+Präzedenzfall
+Präzedenzfalles
+Präzedenzfalls
+Präzedenzfälle
+Präzedenzfällen
+Präzisierung
+Präzision
+Präzisionen
+Präzisionsinstrument
+Präzisionsinstrumente
+Präzisionsinstrumenten
+Präzisionsinstrumentes
+Präzisionsinstruments
+Präzisionsleistung
+Präzisionsmessgerät
+Präzisionsmessgeräte
+Präzisionsmessgeräten
+Präzisionsmessgerätes
+Präzisionsmessgeräts
+Präzisionsprodukt
+Präzisionsspezifikation
+Präzisionsspezifikationen
+Präzisionstechnik
+Prüderie
+Prüfanweisung
+Prüfaufwand
+Prüfbescheinigung
+Prüfeinrichtung
+Prüfer
+Prüfergebnis
+Prüfergebnisse
+Prüfergebnissen
+Prüfergebnisses
+Prüfern
+Prüfers
+Prüfpunkt
+Prüfpunkte
+Prüfpunkten
+Prüfpunktes
+Prüfpunkts
+Prüfqqling
+Prüfqqlinge
+Prüfqqlingen
+Prüfqqlings
+Prüfqqliste
+Prüfqqlisten
+Prüfstand
+Prüfstandes
+Prüfstein
+Prüfsteine
+Prüfsteinen
+Prüfsteines
+Prüfstelle
+Prüfstellen
+Prüftechnik
+Prüftechniken
+Prüfung
+Prüfungen
+Prüfungsantrag
+Prüfungsantrages
+Prüfungsantrags
+Prüfungsanträge
+Prüfungsanträgen
+Prüfungsarbeit
+Prüfungsarbeiten
+Prüfungsausschuss
+Prüfungsausschusses
+Prüfungsausschüsse
+Prüfungsausschüssen
+Prüfungsbericht
+Prüfungsberichte
+Prüfungsberichten
+Prüfungsberichts
+Prüfungsdienst
+Prüfungserfolg
+Prüfungstermin
+Prüfungstermine
+Prüfungsterminen
+Prüfungstermins
+Prüfungsthema
+Prüfungsverfahren
+Prüfungsverfahrens
+Prüfungsvorbereitung
+Prüfverfahren
+Prüfverfahrens
+Prüfzettel
+Prügel
+Prügelknabe
+Prügelknaben
+Pseudonym
+Pseudonyme
+Pseudonymen
+Pseudonyms
+Psyche
+Psychiater
+Psychiaterin
+Psychiaterinnen
+Psychiatern
+Psychiaters
+Psychiatrie
+Psychologe
+Psychologen
+Psychologie
+Psychologin
+Psychologinnen
+Psychopath
+Psychose
+Psychosen
+Ptolemaios
+Ptolemäus
+Pub
+Pubertät
+Publikation
+Publikationen
+Publikationsliste
+Publikationslisten
+Publikum
+Publikums
+Publizist
+Publizisten
+Pubs
+Pudding
+Puddings
+Pudel
+Pudelmütze
+Pudelmützen
+Pudels
+Puder
+Puders
+Puffer
+Puffergröße
+Puffern
+Puffers
+Pufferspeicher
+Pufferspeichern
+Pufferspeichers
+Puffärmel
+Puffärmeln
+Pulk
+Pulle
+Pulli
+Pullover
+Pullovern
+Pullovers
+Puls
+Pulses
+Pult
+Pulte
+Pulten
+Pultes
+Pults
+Pulver
+Pulverfass
+Pulverfasses
+Pulvers
+Puma
+Pumas
+Pump
+Pumps
+Punk
+Punkt
+Punkte
+Punkten
+Punktes
+Punktesammeln
+Punktfolge
+Punktfolgen
+Punktgrafik
+Punktladung
+Punktraster
+Punktum
+Punktwert
+Punktwerte
+Punktwerten
+Punktwertes
+Punktwerts
+Punktzahl
+Punktzahlen
+Punktzeile
+Punktzeilen
+Punsch
+Pupille
+Pupillen
+Puppe
+Puppen
+Purist
+Puristen
+Puritanismus
+Purpur
+Put
+Pute
+Puten
+Puter
+Puters
+Puts
+Putsch
+Putsches
+Putz
+Putzerei
+Puzzle
+Puzzles
+Pygmäe
+Pygmäen
+Pyjama
+Pyjamas
+Pyramide
+Pyramiden
+Pyrenäen
+Pyrrhus
+Pythagoras
+Pythia
+Pythias
+Pächter
+Pächterin
+Pächterinnen
+Pächtern
+Pächters
+Päckchen
+Päckchens
+Pädagoge
+Pädagogen
+Pädagogik
+Pädagogin
+Pädagoginnen
+Päpste
+Päpsten
+Pärchen
+Pärchens
+Pärke
+Pärken
+Pässe
+Pässen
+Pöbel
+Pöbelei
+Pöbeleien
+Pöbels
+Pöstchen
+Pöstchens
+Pünktlichkeit
+Püppchen
+Püppchens
+Püree
+Pütt
+Pütts
+Quadrant
+Quadranten
+Quadrat
+Quadrate
+Quadraten
+Quadrates
+Quadratkilometer
+Quadratkilometern
+Quadratmeter
+Quadratmetern
+Quadratmeters
+Quadrats
+Quadratur
+Quadratwurzel
+Quadratzentimeter
+Quadrofonie
+Quadrofonien
+Quadrophonie
+Quai
+Quais
+Qual
+Qualen
+Qualifikation
+Qualifikationen
+Qualität
+Qualitäten
+Qualitätsansprüche
+Qualitätsansprüchen
+Qualitätsarbeit
+Qualitätsarbeiten
+Qualitätsbeurteilung
+Qualitätsbeurteilungen
+Qualitätseigenschaft
+Qualitätseigenschaften
+Qualitätskontrolle
+Qualitätskontrollen
+Qualitätsmerkmal
+Qualitätsmerkmale
+Qualitätsmerkmalen
+Qualitätsmerkmals
+Qualitätsprüfung
+Qualitätsprüfungen
+Qualitätssicherung
+Qualitätsspanne
+Qualitätsspannen
+Qualitätsstandard
+Qualitätsstufe
+Qualitätsstufen
+Qualitätsverbesserung
+Qualitätsverbesserungen
+Qualitätsware
+Qualitätswaren
+Qualitätsüberlegung
+Qualitätsüberlegungen
+Qualitätsüberwachung
+Qualle
+Quallen
+Qualm
+Qualmerei
+Qualmereien
+Qualms
+Quant
+Quanten
+Quantendynamik
+Quantifizierung
+Quantifizierungen
+Quantisierung
+Quantisierungen
+Quantität
+Quantor
+Quantoren
+Quants
+Quarantäne
+Quarantänen
+Quargel
+Quargeln
+Quargels
+Quark
+Quarks
+Quart
+Quartal
+Quartale
+Quartalen
+Quartals
+Quartier
+Quartiere
+Quartieren
+Quartiers
+Quarz
+Quarze
+Quarzen
+Quarzes
+Quasar
+Quatsch
+Quebec
+Quedlinburg
+Queensland
+Quellcode
+Quellcodes
+Quelldatei
+Quelldateien
+Quelldaten
+Quellenangabe
+Quellenangaben
+Quellenstudie
+Quellenstudien
+Quellenstudium
+Quellimpedanz
+Quellprogramm
+Quellprogramme
+Quellprogrammen
+Quellprogramms
+Quellsprache
+Quellsprachen
+Quelltext
+Quelltexte
+Quelltexten
+Quelltextes
+Quellverzeichnis
+Quellverzeichnisse
+Quellverzeichnissen
+Quellverzeichnisses
+Quellwiderstand
+Quere
+Querelen
+Querschnitt
+Querschnitte
+Querschnitten
+Querschnitts
+Quersumme
+Quersummen
+Querverbindung
+Querverbindungen
+Querverweis
+Querverweise
+Querverweisen
+Querverweises
+Querweg
+Querwege
+Querwegen
+Querweges
+Quetschung
+Quetschungen
+Quickstepp
+Quickstepps
+Quintessenz
+Quirl
+Quirle
+Quirlen
+Quirls
+Quitte
+Quitten
+Quittierung
+Quittierungen
+Quittung
+Quittungen
+Quiz
+Quota
+Quotas
+Quote
+Quoten
+Quotenregelung
+Quotenregelungen
+Quotient
+Quotienten
+Quotierung
+Quotierungen
+Quäker
+Quäler
+Quälerei
+Quälern
+Quälers
+Quäntchen
+Quäntchens
+RAM
+RIAS
+ROM
+RTC
+Rabat
+Rabatt
+Rabatte
+Rabatten
+Rabattes
+Rabe
+Raben
+Rabeneltern
+Rabulistik
+Rache
+Racheakt
+Racheakte
+Racheakten
+Racheakts
+Rachegelüste
+Rachegelüsten
+Rachen
+Rachens
+Rachsucht
+Rad
+Radar
+Radars
+Radau
+Radebrecher
+Rades
+Radfahrer
+Radfahrern
+Radfahrers
+Radiant
+Radianten
+Radiation
+Radiationen
+Radiator
+Radiatoren
+Radiators
+Radien
+Radiergummi
+Radiergummis
+Radierung
+Radierungen
+Radieschen
+Radieschens
+Radikalisierung
+Radikalist
+Radikalisten
+Radio
+Radioaktivität
+Radioaktivitäten
+Radiologe
+Radiologen
+Radiologie
+Radiologien
+Radiometrie
+Radiometrien
+Radios
+Radium
+Radius
+Radler
+Radlerin
+Radlerinnen
+Radlern
+Radlers
+Radon
+Radons
+Rads
+Rafael
+Rafaels
+Raffinerie
+Raffinerien
+Raffinesse
+Raffinessen
+Rahm
+Rahmen
+Rahmenbedingung
+Rahmenbedingungen
+Rahmenplan
+Rahmenplanung
+Rahmenpläne
+Rahmenplänen
+Rahmenprogramm
+Rahmens
+Rahmenvertrag
+Rahmenvertrages
+Rahmenvertrags
+Rahmenverträge
+Rahmenverträgen
+Rahms
+Raimund
+Raimunds
+Rain
+Raine
+Rainen
+Rainer
+Rainers
+Rains
+Rakete
+Raketen
+Ral
+Ralf
+Ralfs
+Rallye
+Rallyes
+Ralph
+Ralphs
+Ramdisk
+Ramdisks
+Rammbock
+Rammbockes
+Rammbocks
+Rampe
+Rampen
+Ramses
+Rand
+Randbedingung
+Randbedingungen
+Randbemerkung
+Randbereich
+Randbereiche
+Randbereichen
+Randbereichs
+Rande
+Randerscheinung
+Randerscheinungen
+Randes
+Randfall
+Randfalls
+Randfälle
+Randfällen
+Randgebiet
+Randgebiete
+Randgebieten
+Randgebietes
+Randgebiets
+Randindex
+Randindizes
+Randkoordinate
+Randkoordinaten
+Randposition
+Randpositionen
+Randproblem
+Randprobleme
+Randproblemen
+Randproblems
+Randstellung
+Randzone
+Randzonen
+Rang
+Ranges
+Rangfolge
+Rangfolgen
+Rangliste
+Ranglisten
+Rangordnung
+Rangordnungen
+Rangs
+Rangstufe
+Rangstufen
+Raphael
+Raphaels
+Rappe
+Rappen
+Rapport
+Rapporte
+Rapporten
+Rapportes
+Rapports
+Raps
+Rapses
+Rapsöl
+Rarität
+Raritäten
+Raserei
+Rasereien
+Rasse
+Rassen
+Rassismus
+Rast
+Rastatt
+Raster
+Rastermaß
+Rastermaße
+Rastermaßen
+Rastermaßes
+Rasters
+Rasterweite
+Rasterweiten
+Rasthaus
+Rasthauses
+Rasthäuser
+Rasthäusern
+Rastplatz
+Rastplätze
+Rastplätzen
+Raststätte
+Raststätten
+Rat
+Rates
+Ratgeber
+Ratgeberin
+Ratgeberinnen
+Ratgebern
+Ratgebers
+Rathaus
+Rathauses
+Rathäuser
+Rathäusern
+Ratifikation
+Ratifikationen
+Ratifizierung
+Ratifizierungen
+Rating
+Ratings
+Ration
+Rationalisierung
+Rationalisierungen
+Rationalismus
+Rationalität
+Rationen
+Rationierung
+Rationierungen
+Ratlosigkeit
+Rats
+Ratsche
+Ratschlag
+Ratschlags
+Ratschläge
+Ratschlägen
+Ratte
+Ratten
+Ratzeburg
+Raub
+Raubbau
+Raubbaus
+Raubens
+Raubkopie
+Raubkopien
+Rauch
+Raucher
+Rauchern
+Rauchers
+Rauchfangkehrer
+Rauchfangkehrern
+Rauchfangkehrers
+Rauchs
+Raudi
+Rauhaardackel
+Rauhaardackels
+Raum
+Raumaufteilung
+Raumaufteilungen
+Raumbedarf
+Raumbedarfs
+Raumbereich
+Raumbereichen
+Raumbereichs
+Raume
+Raumes
+Raumgestaltung
+Raummangel
+Raums
+Raupe
+Raupen
+Raureif
+Raureifes
+Raureifs
+Rausch
+Rausschmiss
+Rausschmisse
+Rausschmissen
+Rausschmisses
+Ravenna
+Ravensburg
+Ravensburger
+Ravensburgern
+Razzia
+Razzien
+Reagan
+Reagans
+Reagenzglas
+Reagenzglases
+Reagenzgläser
+Reaktion
+Reaktionen
+Reaktionsfähigkeit
+Reaktionsgeschwindigkeit
+Reaktionsgeschwindigkeiten
+Reaktionszeit
+Reaktionszeiten
+Reaktor
+Reaktoren
+Reaktors
+Realisation
+Realisierbarkeit
+Realisierbarkeiten
+Realisierung
+Realisierungen
+Realisierungschance
+Realisierungschancen
+Realismus
+Realist
+Realisten
+Realistin
+Realistinnen
+Realität
+Realitäten
+Realo
+Realos
+Rebe
+Rebell
+Rebellen
+Rebellion
+Rebellionen
+Reben
+Rechaud
+Rechauds
+Rechen
+Rechenanlage
+Rechenanlagen
+Rechenaufgabe
+Rechenaufgaben
+Rechenaufwand
+Rechenaufwands
+Rechenbeispiel
+Rechenbeispiele
+Rechenbeispielen
+Rechenbeispiels
+Rechenfehler
+Rechenfehlern
+Rechenfehlers
+Rechenfähigkeit
+Rechenfähigkeiten
+Rechenkapazität
+Rechenkapazitäten
+Rechenleistung
+Rechenleistungen
+Rechenmaschine
+Rechenmaschinen
+Rechenregel
+Rechenregeln
+Rechens
+Rechenschaft
+Rechenschieber
+Rechenschiebern
+Rechenschiebers
+Rechenschritt
+Rechenschritte
+Rechenschritten
+Rechenschritts
+Rechenvorgang
+Rechenvorgangs
+Rechenvorgänge
+Rechenvorgängen
+Rechenvorschrift
+Rechenvorschriften
+Rechenzeit
+Rechenzeiten
+Rechenzentren
+Rechenzentrum
+Rechenzentrums
+Recherche
+Recherchen
+Rechnens
+Rechner
+Rechneranschluss
+Rechneranschlusses
+Rechneranschlüsse
+Rechneranschlüssen
+Rechnerausfall
+Rechnerbaugruppe
+Rechnerbaugruppen
+Rechnerelektronik
+Rechnerfamilie
+Rechnerfamilien
+Rechnerfähigkeit
+Rechnergehäuse
+Rechnergehäusen
+Rechnergehäuses
+Rechnergeneration
+Rechnergenerationen
+Rechnerkapazität
+Rechnerkapazitäten
+Rechnerkarte
+Rechnerkarten
+Rechnerkenntnisse
+Rechnerkenntnissen
+Rechnerkommando
+Rechnerkommandos
+Rechnerkommunikation
+Rechnerkomponente
+Rechnerkomponenten
+Rechnerkonzept
+Rechnerkonzepte
+Rechnerkonzepten
+Rechnerkonzepts
+Rechnerleistung
+Rechnerleistungen
+Rechnern
+Rechnernetz
+Rechnernetze
+Rechnerplatine
+Rechnerplatinen
+Rechners
+Rechnerschnittstelle
+Rechnerschnittstellen
+Rechnerseite
+Rechnersystem
+Rechnersysteme
+Rechnerunterstützung
+Rechnung
+Rechnungen
+Recht
+Rechte
+Rechteck
+Rechtecke
+Rechtecken
+Rechtecks
+Rechten
+Rechtfertigung
+Rechtfertigungen
+Rechthaber
+Rechthaberei
+Rechthabereien
+Rechthaberin
+Rechthaberinnen
+Rechthabern
+Rechthabers
+Rechtlichkeit
+Rechtlosigkeit
+Rechtmäßigkeit
+Rechts
+Rechtschreibung
+Rechtsempfinden
+Rechtsempfindens
+Rechtsform
+Rechtsformen
+Rechtsgefühl
+Rechtsgefühls
+Rechtsgültigkeit
+Rechtskraft
+Rechtslage
+Rechtslagen
+Rechtsordnung
+Rechtsordnungen
+Rechtsprechung
+Rechtsprechungen
+Rechtssicherheit
+Rechtsstaatlichkeit
+Rechtsstellung
+Rechtsstreit
+Rechtsstreite
+Rechtsstreiten
+Rechtsstreites
+Rechtssystem
+Rechtssysteme
+Rechtssystemen
+Rechtssystems
+Rechtsverbindlichkeit
+Rechtswesen
+Rechtswesens
+Reck
+Recklinghausen
+Reclam
+Recycling
+Redakteur
+Redakteure
+Redakteuren
+Redakteurs
+Redaktion
+Redaktionen
+Redefinition
+Redefinitionen
+Redefinitionsmöglichkeit
+Redefinitionsmöglichkeiten
+Redefreiheit
+Redefreiheiten
+Redegabe
+Redegaben
+Redekunst
+Redekünste
+Redekünsten
+Redensart
+Redensarten
+Redeschwall
+Redeschwalls
+Redewendung
+Redewendungen
+Redford
+Redfords
+Redigierung
+Redlichkeit
+Redner
+Rednern
+Redseligkeit
+Reduktion
+Reduktionen
+Redundanz
+Redundanzen
+Reduzierung
+Reduzierungen
+Reeder
+Reederei
+Reedereien
+Reedern
+Reeders
+Reedkontakte
+Reedstab
+Reedstäbe
+Reedstäben
+Reengineering
+Reeperbahn
+Referat
+Referate
+Referaten
+Referats
+Referendum
+Referendums
+Referent
+Referenten
+Referenz
+Referenzbuffer
+Referenzbuffers
+Referenzen
+Referenzpunkt
+Referenzpunkts
+Referenzsignal
+Referenzsignale
+Referenzsignalen
+Referenzsignals
+Referenzzeit
+Referenzzeiten
+Refinanzierung
+Reflektant
+Reflektanten
+Reflektor
+Reflektoren
+Reflex
+Reflexe
+Reflexen
+Reflexes
+Reflexion
+Reflexionen
+Reflexivität
+Reformation
+Reformationskurs
+Reformationskurse
+Reformationskursen
+Reformationskurses
+Reformbemühung
+Reformbemühungen
+Reformbewegung
+Reformbewegungen
+Reformer
+Reformprogramm
+Reformulierung
+Reformversuch
+Reformversuche
+Reformversuchen
+Reformversuchs
+Reformvorhaben
+Reformvorhabens
+Reformvorschlag
+Reformvorschlages
+Reformvorschlags
+Reformvorschläge
+Reformvorschlägen
+Refrain
+Refrains
+Refugium
+Regal
+Regale
+Regalen
+Regalien
+Regals
+Regatta
+Regatten
+Regel
+Regelabweichung
+Regelabweichungen
+Regelbereich
+Regelbereichs
+Regelfall
+Regelfalls
+Regelfunktion
+Regelfunktionen
+Regelkreis
+Regelkreise
+Regelkreisen
+Regelkreises
+Regelmechanismen
+Regelmechanismus
+Regelmäßigkeit
+Regelmäßigkeiten
+Regelmöglichkeit
+Regelmöglichkeiten
+Regelung
+Regelungen
+Regelungstechnik
+Regenbogen
+Regenbogenfarben
+Regenbogens
+Regenbögen
+Regeneration
+Regenerierung
+Regensburg
+Regensburger
+Regensburgern
+Regent
+Regenten
+Regentschaft
+Reggae
+Regie
+Regierung
+Regierungen
+Regime
+Regiment
+Regimenter
+Regimentern
+Regimentes
+Regiments
+Regimes
+Region
+Regionalisierung
+Regionalisierungen
+Regionen
+Regisseur
+Regisseure
+Regisseuren
+Regisseurs
+Register
+Registerinhalt
+Registerinhalte
+Registerinhalten
+Registerinhaltes
+Registerinhalts
+Registern
+Registers
+Registervergabe
+Registratur
+Registraturen
+Registrierung
+Reglement
+Reglemente
+Reglementen
+Reglementierung
+Reglementierungen
+Reglements
+Regler
+Reglerkarte
+Reglern
+Reglers
+Reglung
+Reglungen
+Regress
+Regresses
+Regsamkeit
+Regularien
+Regularität
+Regularitäten
+Regulierung
+Regulierungen
+Regung
+Regungen
+Reh
+Rehabilitierung
+Rehabilitierungen
+Rehe
+Rehen
+Rehs
+Reiberei
+Reibereien
+Reibung
+Reibungen
+Reich
+Reichhaltigkeit
+Reichs
+Reichtum
+Reichtums
+Reichweite
+Reichweiten
+Reifeprüfung
+Reifeprüfungen
+Reifung
+Reigen
+Reihe
+Reihen
+Reihenentwicklung
+Reihenentwicklungen
+Reihenfolge
+Reihenfolgen
+Reihenschaltung
+Reihenschaltungen
+Reihung
+Reihungen
+Reim
+Reimplementierung
+Reims
+Reineke
+Reinekes
+Reinfall
+Reinfalls
+Reinfälle
+Reinfällen
+Reinhaltung
+Reinhardt
+Reinhardts
+Reinheit
+Reinheitsgebot
+Reinheitsgebote
+Reinheitsgeboten
+Reinheitsgebots
+Reinigung
+Reinigungen
+Reinkultur
+Reinkulturen
+Reinlichkeit
+Reinschrift
+Reinschriften
+Reis
+Reisig
+Reisigs
+Reiter
+Reitern
+Reiz
+Reizbarkeit
+Reize
+Reizen
+Reizes
+Reizung
+Reizungen
+Reißbrett
+Reißer
+Reißverschluss
+Reißverschlusses
+Reißverschlüsse
+Reißverschlüssen
+Reißwolf
+Reklamation
+Reklamationen
+Reklame
+Reklamen
+Rekognoszierung
+Rekompilation
+Rekonstruktion
+Rekonstruktionen
+Rekord
+Rekorde
+Rekorden
+Rekordergebnis
+Rekordergebnisse
+Rekordergebnissen
+Rekordergebnisses
+Rekords
+Rekrut
+Rekruten
+Rektor
+Rektorat
+Rektorats
+Rektoren
+Rektors
+Rekursion
+Rekursionen
+Relais
+Relaisansteuerung
+Relaisausgang
+Relaisausgangs
+Relaisausgänge
+Relaisausgängen
+Relaiskarte
+Relaismagneten
+Relaisschalter
+Relaissteuerung
+Relaistest
+Relation
+Relationen
+Relativierbarkeit
+Relativierung
+Relativismus
+Relativität
+Relativitäten
+Relativitätstheorie
+Relevanz
+Relief
+Reliefs
+Religion
+Religionen
+Religiosität
+Relikte
+Relikten
+Rembrandt
+Rembrandts
+Remoulade
+Ren
+Renaissance
+Renaissancen
+Renate
+Renates
+Rendezvous
+Rendite
+Renditen
+Rendsburg
+Renitenz
+Renner
+Renommee
+Rens
+Rentabilität
+Rente
+Renten
+Rentier
+Rentner
+Rentnern
+Rentners
+Reorganisation
+Reorganisationen
+Reparation
+Reparationen
+Reparatur
+Reparaturen
+Reparaturplatinen
+Repertoire
+Repertoires
+Report
+Reportage
+Reportagen
+Reporte
+Reporten
+Reporter
+Reporterin
+Reporterinnen
+Reportern
+Reporters
+Reports
+Repressalie
+Repressalien
+Reproduktion
+Reproduktionen
+Reproduzierbarkeit
+Repräsentant
+Repräsentanten
+Repräsentanz
+Repräsentanzen
+Repräsentation
+Repräsentationen
+Repräsentativität
+Reptil
+Reptils
+Republik
+Republikaner
+Republikanern
+Republikaners
+Republiken
+Reputation
+Requisit
+Requisiten
+Reservat
+Reservate
+Reservaten
+Reservates
+Reservation
+Reservationen
+Reserve
+Reserven
+Reservierung
+Reservoir
+Reservoire
+Reservoirs
+Resetleitung
+Resetleitungen
+Resetlogik
+Resetlogiken
+Resetproblem
+Resetprobleme
+Resetproblemen
+Resetproblems
+Resetschaltung
+Resetschaltungen
+Resetsignal
+Resetsignale
+Resetsignalen
+Resetsignals
+Residenz
+Residenzen
+Resignation
+Resistenz
+Resolution
+Resolutionen
+Resonanz
+Resonanzbedingung
+Resonanzbedingungen
+Resonanzen
+Resozialisierung
+Respekt
+Respektierung
+Respektlosigkeit
+Respektlosigkeiten
+Ressentiment
+Ressort
+Ressortchef
+Ressortchefs
+Ressorts
+Ressortverteilung
+Ressortverteilungen
+Ressource
+Ressourcen
+Ressourcenbedarf
+Ressourcenbedarfs
+Ressourcenverknappung
+Rest
+Restaurant
+Restaurants
+Restbestand
+Restbestandes
+Restbestände
+Restbeständen
+Restbetrag
+Restbetrages
+Restbetrags
+Restbeträge
+Restbeträgen
+Reste
+Resten
+Restes
+Restexemplar
+Restexemplare
+Restexemplaren
+Restexemplars
+Restlaufzeit
+Restlaufzeiten
+Restlieferung
+Restmaterial
+Restmenge
+Restmengen
+Restriktion
+Restriktionen
+Rests
+Restwert
+Restwerte
+Restwerten
+Restwerts
+Resultat
+Resultate
+Resultaten
+Resultates
+Resultats
+Resümee
+Resümees
+Retorte
+Retorten
+Retoure
+Retouren
+Retrospektive
+Retter
+Rettern
+Retters
+Rettich
+Rettiche
+Rettichen
+Rettichs
+Rettung
+Rettungen
+Rettungsaktion
+Rettungsaktionen
+Reue
+Reuter
+Reuters
+Reutlingen
+Revanche
+Revanchist
+Revanchisten
+Revier
+Reviere
+Revieren
+Reviers
+Revision
+Revisionen
+Revisionismus
+Revisionist
+Revisionisten
+Revisor
+Revisors
+Revolte
+Revolten
+Revolution
+Revolutionen
+Revolutionierung
+Revolver
+Revolvern
+Revolvers
+Rezension
+Rezensionen
+Rezept
+Rezepte
+Rezepten
+Rezeptes
+Rezeption
+Rezeptionen
+Rezepts
+Rezess
+Rezession
+Rezessionen
+Rhabarber
+Rhabarbers
+Rhapsodie
+Rhapsodien
+Rheinland
+Rheinmetall
+Rhetorik
+Rhetoriker
+Rhetorikern
+Rhodesien
+Rhodesier
+Rhodos
+Rhomben
+Rhombus
+Rhone
+Rhythmen
+Rhythmik
+Rhythmus
+Riad
+Ribbentrop
+Ribbentrops
+Ribisel
+Richelieu
+Richelieus
+Richter
+Richterin
+Richterinnen
+Richtern
+Richters
+Richtfunk
+Richtfunkfrequenz
+Richtfunkfrequenzen
+Richtfunks
+Richtfunkstrecke
+Richtfunkstrecken
+Richtige
+Richtigkeit
+Richtigstellung
+Richtlinie
+Richtlinien
+Richtmaß
+Richtmaße
+Richtmaßen
+Richtmaßes
+Richtschnur
+Richtung
+Richtungen
+Richtungsbit
+Richtungsbits
+Richtungskampf
+Richtungsumkehrung
+Richtungsänderung
+Richtwert
+Richtwerte
+Richtwerten
+Richtwertes
+Richtwerts
+Ricke
+Ricken
+Rico
+Riecher
+Riege
+Riegel
+Riegeln
+Riegen
+Rieger
+Riemen
+Riemens
+Ries
+Riese
+Riesen
+Riesenaufwand
+Riesenaufwands
+Riesenerfolg
+Riesenerfolge
+Riesenerfolgen
+Riesenerfolgs
+Riesengebirge
+Riesenmenge
+Riesenmengen
+Riesenvorteil
+Riesenvorteile
+Riesenvorteilen
+Riesenvorteils
+Riesenwirbel
+Riesenwirbels
+Rieses
+Riesin
+Riesinnen
+Riff
+Riffe
+Riffen
+Riffes
+Riga
+Rille
+Rillen
+Rind
+Rinde
+Rinden
+Rinder
+Rindern
+Rindes
+Rinds
+Ring
+Ringelrein
+Ringes
+Rings
+Rinnsal
+Rinnsale
+Rinnsalen
+Rinnsals
+Rinnstein
+Rinnsteine
+Rinnsteinen
+Rinnsteines
+Rinnsteins
+Rio
+Rippe
+Rippen
+Risiken
+Risiko
+Risikoabschätzung
+Risikoabschätzungen
+Risikobegrenzung
+Risikoprüfung
+Risikoprüfungen
+Risikos
+Risikostreuung
+Risikovermeidung
+Risikoverteilung
+Riss
+Risse
+Rissen
+Risses
+Riten
+Ritter
+Rittern
+Ritual
+Rituale
+Ritualen
+Rituals
+Ritzel
+Rivale
+Rivalen
+Rivalin
+Rivalinnen
+Rivalität
+Rivalitäten
+Riviera
+Rivieraküste
+Rizinus
+Robbe
+Robben
+Robert
+Roberta
+Robertas
+Roberts
+Robespierre
+Robespierres
+Robin
+Robins
+Robinson
+Robinsons
+Roboter
+Robotern
+Roboters
+Robustheit
+Rochefort
+Rochelle
+Rock
+Rockefeller
+Rockefellers
+Rocker
+Rockes
+Rocks
+Rodung
+Rodungen
+Roger
+Rogers
+Roggen
+Roggens
+Rohdaten
+Rohheit
+Rohheiten
+Rohmaterial
+Rohmaterialien
+Rohprodukt
+Rohprodukte
+Rohprodukten
+Rohproduktes
+Rohprodukts
+Rohr
+Rohre
+Rohren
+Rohres
+Rohrs
+Rohstoff
+Rohstoffe
+Rohstoffen
+Rohstoffs
+Rohware
+Rohwaren
+Rohöl
+Rohöls
+Roland
+Rolands
+Rolex
+Rollenverteilung
+Rollenverteilungen
+Rollenzuteilung
+Rollenzuteilungen
+Rolli
+Rollis
+Rollladen
+Rollläden
+Rollreibung
+Rollstuhl
+Rollstuhls
+Rollstühle
+Rollstühlen
+Rolltreppe
+Rolltreppen
+Rollwinkel
+Roman
+Romancier
+Romane
+Romanen
+Romano
+Romanos
+Romans
+Romantik
+Romantiker
+Romantikerin
+Romantikerinnen
+Romantikern
+Romantikers
+Romanze
+Romanzen
+Rommel
+Rommels
+Rommé
+Rommés
+Ronald
+Ronalds
+Rondo
+Roosevelt
+Roosevelts
+Rose
+Rosen
+Rosenkavalier
+Rosenkriege
+Rosenkrieges
+Rosette
+Rosetten
+Rosine
+Rosinen
+Rost
+Rostes
+Rotation
+Rotationen
+Rothschild
+Rothschilds
+Rotkehlchen
+Rotkehlchens
+Rotor
+Rotoren
+Rotznase
+Rotznasen
+Roulette
+Route
+Routen
+Routine
+Routinen
+Routinier
+Routiniers
+Rowdy
+Rowdys
+Royalist
+Royalisten
+Rubens
+Rubrik
+Rubriken
+Ruck
+Rucks
+Rucksack
+Rucksacks
+Rucksäcke
+Rucksäcken
+Ruder
+Ruderer
+Rudern
+Ruders
+Rudi
+Rudis
+Rudolf
+Rudolfs
+Ruf
+Rufes
+Rufnummer
+Rufnummern
+Rufs
+Rufzeichen
+Rufzeichens
+Rugby
+Rugbys
+Ruhelosigkeit
+Ruhemasse
+Ruhemassen
+Ruhepause
+Ruhepausen
+Ruheplatz
+Ruheplätze
+Ruheplätzen
+Ruherecht
+Ruhespannung
+Ruhestand
+Ruhestellung
+Ruhestellungen
+Ruhestrom
+Ruhestörer
+Ruhestörung
+Ruhestörungen
+Ruhetag
+Ruhetage
+Ruhetagen
+Ruhetages
+Ruhetags
+Ruhezustand
+Ruhezustandes
+Ruhezustands
+Ruhm
+Ruhmes
+Ruhms
+Ruin
+Ruine
+Ruinen
+Ruins
+Rum
+Rummel
+Rumpf
+Rumpfes
+Rumpfs
+Rums
+Rumäne
+Rumänen
+Rumänien
+Rumäniens
+Rumänin
+Rumäninnen
+Run
+Rundblick
+Rundblicke
+Rundblicken
+Rundblicks
+Rundbrief
+Rundbriefe
+Rundbriefen
+Rundbriefs
+Rundfrage
+Rundfragen
+Rundfunk
+Rundfunks
+Rundgang
+Rundganges
+Rundgangs
+Rundgänge
+Rundgängen
+Rundkurs
+Rundkurse
+Rundkursen
+Rundkurses
+Rundschau
+Rundschreiben
+Rundung
+Rundungen
+Rune
+Runen
+Runzel
+Runzeln
+Rupert
+Ruperts
+Rupie
+Rupien
+Russ
+Russe
+Russen
+Russes
+Russin
+Russinnen
+Russland
+Russlands
+Rute
+Ruten
+Ruthenium
+Rutschpartie
+Rutschpartien
+Ruß
+Rußes
+Rächer
+Rächerin
+Rächerinnen
+Rächern
+Rächers
+Rädchen
+Rädchens
+Rädelsführer
+Rädelsführerin
+Rädelsführerinnen
+Rädelsführern
+Rädelsführers
+Räder
+Rädern
+Räderwerk
+Räderwerke
+Räderwerken
+Räderwerks
+Ränder
+Rändern
+Ränge
+Rängen
+Räte
+Räten
+Rätsel
+Rätselraten
+Rätsels
+Räuber
+Räubern
+Räubers
+Räume
+Räumen
+Räumfahrt
+Räumlichkeit
+Räumlichkeiten
+Räumung
+Räumungen
+Röckchen
+Röckchens
+Röcke
+Röcken
+Römer
+Römern
+Röte
+Röteln
+Rübe
+Rüben
+Rübezahl
+Rübezahls
+Rückansicht
+Rückansichten
+Rückantwort
+Rückantworten
+Rückbeziehung
+Rückblick
+Rückblicke
+Rückblicken
+Rückblickes
+Rückerstattung
+Rückerstattungen
+Rückfahrt
+Rückfall
+Rückfalls
+Rückforderung
+Rückfrage
+Rückfragen
+Rückfälle
+Rückfällen
+Rückführung
+Rückführungen
+Rückgabe
+Rückgang
+Rückganges
+Rückgangs
+Rückgewinnung
+Rückgewinnungen
+Rückgliederung
+Rückgrat
+Rückgriff
+Rückgänge
+Rückgängen
+Rückhalt
+Rückhand
+Rückkampf
+Rückkehr
+Rückkoppelung
+Rückkoppelungen
+Rückkopplung
+Rückkopplungen
+Rücklauf
+Rücklaufs
+Rücklaufzeit
+Rücklaufzeiten
+Rückleitung
+Rücklieferung
+Rücklieferungen
+Rückläufe
+Rückläufen
+Rückmeldung
+Rückmeldungen
+Rückreise
+Rückreisen
+Rückrichtung
+Rückruf
+Rückschlag
+Rückschlages
+Rückschlags
+Rückschluss
+Rückschlusses
+Rückschläge
+Rückschlägen
+Rückschlüsse
+Rückschlüssen
+Rückschritt
+Rückschritten
+Rückschub
+Rückseite
+Rückseiten
+Rücksendung
+Rücksicht
+Rücksichten
+Rücksichtnahme
+Rücksprache
+Rücksprachen
+Rücksprung
+Rücksprungadresse
+Rücksprungadressen
+Rücksprungs
+Rückstand
+Rückstandes
+Rückstellung
+Rückstellungen
+Rückstände
+Rückständen
+Rückstöße
+Rückstößen
+Rücktritt
+Rücktritte
+Rücktritten
+Rücktritts
+Rückvergütung
+Rückvergütungen
+Rückversicherung
+Rückversicherungen
+Rückwand
+Rückwandplatine
+Rückweg
+Rückwege
+Rückwegen
+Rückwegs
+Rückwendung
+Rückwirkung
+Rückwirkungen
+Rückwände
+Rückwänden
+Rückwärtsrichtung
+Rückzieher
+Rückziehern
+Rückzug
+Rückzuges
+Rückzugs
+Rückzüge
+Rückzügen
+Rückäußerung
+Rüdesheim
+Rüdiger
+Rüdigers
+Rührung
+Rührungen
+Rümpfe
+Rümpfen
+Rüstung
+Rüstungen
+Rüstzeug
+SAP
+SAS
+SCSI
+SEATO
+SFr
+SGI
+SMD
+SMTP
+SOS
+SPARC
+SPD
+SPÖ
+SQL
+SUN
+SWAPO
+Saal
+Saales
+Saals
+Saarbrücken
+Saargebiet
+Saarland
+Saarlandes
+Saat
+Saatgut
+Sabbat
+Sabbats
+Sabine
+Sabines
+Sabotage
+Sabotageakt
+Sabotageakte
+Sabotageakten
+Sabotageaktes
+Sabotageakts
+Sabotagen
+Saboteur
+Saboteure
+Saboteuren
+Saboteurs
+Sachanlage
+Sachanlagen
+Sachargument
+Sachargumente
+Sachargumenten
+Sachargumentes
+Sacharguments
+Sacharin
+Sachaufgabe
+Sachaufgaben
+Sachausgabe
+Sachausgaben
+Sachbearbeiter
+Sachbearbeiterin
+Sachbearbeiterinnen
+Sachbearbeitern
+Sachbearbeiters
+Sachbearbeitung
+Sachbeihilfe
+Sachbeihilfen
+Sachbereich
+Sachbereichen
+Sachbereichs
+Sachbeschädigung
+Sachbeschädigungen
+Sachbuch
+Sachbuches
+Sachbücher
+Sache
+Sachen
+Sacher
+Sachers
+Sachfrage
+Sachfragen
+Sachgebiet
+Sachgebiete
+Sachgebieten
+Sachgebietes
+Sachgebiets
+Sachkatalog
+Sachkataloge
+Sachkatalogen
+Sachkataloges
+Sachkatalogs
+Sachkenner
+Sachkennern
+Sachkenners
+Sachkenntnis
+Sachkenntnisse
+Sachkenntnissen
+Sachkosten
+Sachlage
+Sachlagen
+Sachlichkeit
+Sachmittel
+Sachmitteln
+Sachmittels
+Sachproblem
+Sachprobleme
+Sachproblemen
+Sachproblems
+Sachschaden
+Sachschadens
+Sachschäden
+Sachsenhausen
+Sachverhalt
+Sachverhalte
+Sachverhalten
+Sachverhaltes
+Sachverhalts
+Sachverhaltsaufklärung
+Sachvermögen
+Sachvermögens
+Sachverstand
+Sachverständige
+Sachverständigen
+Sachverständiger
+Sachwalter
+Sachwaltern
+Sachwalters
+Sachwert
+Sachwerte
+Sachwerten
+Sachwertes
+Sachwerts
+Sachziel
+Sachziele
+Sachzielen
+Sachziels
+Sachzwänge
+Sachzwängen
+Sack
+Sackerl
+Sackgasse
+Sackgassen
+Sacks
+Sadat
+Sadats
+Sadismus
+Sadist
+Sadisten
+Safari
+Safran
+Safrans
+Saft
+Safte
+Saftes
+Saftladen
+Saftladens
+Safts
+Saga
+Saigons
+Saison
+Saisons
+Saite
+Saiten
+Sakrament
+Sakramente
+Sakramenten
+Sakramentes
+Sakraments
+Sakrileg
+Saladin
+Saladins
+Salamander
+Salamandern
+Salamanders
+Salami
+Salat
+Salate
+Salaten
+Salates
+Salbei
+Salbung
+Salbungen
+Salden
+Saldo
+Salisbury
+Salm
+Salmen
+Salomoneninseln
+Salon
+Saloniki
+Salons
+Salpeter
+Salpeters
+Salto
+Saltos
+Salut
+Salvador
+Salve
+Salven
+Salz
+Salzburg
+Salzes
+Salzgitter
+Salzkammergut
+Sam
+Samariter
+Samaritern
+Samariters
+Samarkand
+Sambia
+Same
+Samen
+Sammelbezeichnung
+Sammelbezeichnungen
+Sammelname
+Sammelnamen
+Sammelnamens
+Sammelstelle
+Sammelstellen
+Sammelsurium
+Sammler
+Sammlerin
+Sammlerinnen
+Sammlern
+Sammlers
+Sammlung
+Sammlungen
+Samoainseln
+Sams
+Samson
+Samsons
+Samstag
+Samstage
+Samstagen
+Samstags
+Samt
+Samts
+Samuel
+Samuels
+San
+Sanatorien
+Sanatorium
+Sand
+Sandale
+Sandalen
+Sande
+Sanden
+Sandes
+Sandler
+Sandlern
+Sandlers
+Sandoz
+Sands
+Sandwich
+Sanftheit
+Sanftheiten
+Sanftmut
+Sanftmuts
+Sanierung
+Sanierungen
+Sanitäter
+Sanitätern
+Sanitäters
+Sanktion
+Sanktionen
+Sansibar
+Santa
+Santorin
+Sanyo
+Sao
+Saphir
+Saphire
+Saphiren
+Saphirs
+Saragossa
+Sarajewo
+Saratoga
+Sardelle
+Sardellen
+Sardine
+Sardinen
+Sarg
+Sargdeckel
+Sargdeckeln
+Sargs
+Sarkasmus
+Satan
+Satans
+Satellit
+Satelliten
+Satin
+Satins
+Satire
+Satiren
+Satiriker
+Satirikern
+Satirikers
+Sattel
+Sattelpunkt
+Sattelpunkte
+Sattelpunkten
+Sattelpunktes
+Sattelpunkts
+Sattler
+Sattlerei
+Sattlereien
+Sattlern
+Sattlers
+Saturation
+Saturn
+Satyr
+Satyrn
+Satz
+Satzanfang
+Satzanfangs
+Satzanfänge
+Satzanfängen
+Satzaussage
+Satzaussagen
+Satzbau
+Satze
+Satzende
+Satzes
+Satzgefüge
+Satzgefüges
+Satzlehre
+Satzlehren
+Satzteil
+Satzteile
+Satzteilen
+Satzteils
+Satzung
+Satzungen
+Satzzeichen
+Satzzeichens
+Sau
+Sauberkeit
+Sauce
+Saucen
+Sauciere
+Saucieren
+Saudi
+Sauerei
+Sauereien
+Sauerstoff
+Sauerstoffflasche
+Sauerstoffflaschen
+Sauerstoffs
+Sauferei
+Sauger
+Saugern
+Saugers
+Saul
+Saulgau
+Sauls
+Saum
+Saumes
+Saums
+Sauna
+Saunas
+Saurier
+Sauriern
+Sauriers
+Sausewind
+Saxofon
+Saxofone
+Saxofons
+Saxophon
+Saxophone
+Saxophonen
+Saxophons
+Scanner
+Scanners
+Schabernack
+Schabernackes
+Schabernacks
+Schablone
+Schablonen
+Schach
+Schachs
+Schacht
+Schachtel
+Schachteln
+Schachtelung
+Schachtelungen
+Schachtelungsprinzip
+Schachtlung
+Schachtlungen
+Schachts
+Schachzug
+Schachzugs
+Schachzüge
+Schachzügen
+Schaden
+Schadenfreude
+Schadenfreuden
+Schadens
+Schadhaftigkeit
+Schadhaftigkeiten
+Schadstoff
+Schadstoffe
+Schadstoffen
+Schadstoffs
+Schaf
+Schafblattern
+Schafe
+Schafen
+Schafes
+Schaffensdrang
+Schaffensepoche
+Schaffensepochen
+Schaffensfreude
+Schaffensfreuden
+Schaffenskraft
+Schaffenskräfte
+Schaffenskräften
+Schaffhausen
+Schaffner
+Schaffnerin
+Schaffnerinnen
+Schaffnern
+Schaffners
+Schaffung
+Schaffungen
+Schafott
+Schafotte
+Schafotten
+Schafotts
+Schafpelz
+Schafpelze
+Schafpelzen
+Schafpelzes
+Schafs
+Schah
+Schahs
+Schakal
+Schakale
+Schakalen
+Schakals
+Schal
+Schalheit
+Schalk
+Schalke
+Schalken
+Schalkes
+Schalkhaftigkeit
+Schalkheit
+Schalks
+Schall
+Schalle
+Schallmauer
+Schallmauern
+Schalls
+Schals
+Schaltausgang
+Schaltausgangs
+Schaltausgangsmodul
+Schaltausgänge
+Schaltausgängen
+Schaltbild
+Schaltbilder
+Schaltbildern
+Schaltbildes
+Schalteingang
+Schalteinheit
+Schalteinheiten
+Schalteinstellung
+Schaltelement
+Schaltelemente
+Schalter
+Schalteranordnung
+Schaltereingängen
+Schalterinterface
+Schalterinterfaces
+Schalterleitung
+Schalterleitungen
+Schaltermodul
+Schaltern
+Schalters
+Schalterstellung
+Schalterstellungen
+Schaltflanken
+Schaltfunktion
+Schaltfunktionen
+Schalthebel
+Schalthebeln
+Schaltkasten
+Schaltknopf
+Schaltknopfes
+Schaltknöpfe
+Schaltknöpfen
+Schaltkontakte
+Schaltkontakten
+Schaltleitung
+Schaltlitze
+Schaltmagnete
+Schaltmatrix
+Schaltmodul
+Schaltnetzteil
+Schaltnetzteilen
+Schaltnetzteils
+Schaltplan
+Schaltplanes
+Schaltplans
+Schaltpläne
+Schaltplänen
+Schaltpult
+Schaltpulte
+Schaltpultes
+Schaltpunkt
+Schaltpunktanzeige
+Schaltpunktbereiche
+Schaltpunktbeschreibung
+Schaltpunkte
+Schaltpunkten
+Schaltpunktes
+Schaltregler
+Schaltreglernetzteilen
+Schaltrelais
+Schaltrichtung
+Schaltschema
+Schaltschemas
+Schaltschrank
+Schaltschwellen
+Schaltspitzen
+Schaltstelle
+Schaltstellen
+Schaltstrom
+Schaltstromverlauf
+Schaltstromverlaufs
+Schaltstromverläufe
+Schaltstromverläufen
+Schaltströme
+Schaltsystem
+Schaltsysteme
+Schalttafel
+Schalttafeln
+Schalttaster
+Schaltung
+Schaltungen
+Schaltungsbeschreibung
+Schaltungsgestaltung
+Schaltungsvorschlag
+Schaltungsvorschlags
+Schaltungsvorschläge
+Schaltungsvorschlägen
+Schaltverhalten
+Schaltwerk
+Schaltwerke
+Schaltwerken
+Schaltwerks
+Schaltzeit
+Schaltzeiten
+Schalung
+Schalungen
+Schaluppe
+Schaluppen
+Scham
+Schamgefühl
+Schamgefühle
+Schamgefühlen
+Schamgefühles
+Schamhaftigkeit
+Schamlosigkeit
+Schamlosigkeiten
+Schande
+Schanden
+Schanghai
+Schanigarten
+Schanigartens
+Schar
+Scharade
+Scharaden
+Scharfsinn
+Scharfsinnigkeit
+Scharfsinns
+Scharlatan
+Scharlatane
+Scharlatanen
+Scharlatans
+Scharmützel
+Scharmützeln
+Scharmützels
+Scharnier
+Scharniere
+Scharnieren
+Scharniers
+Schatten
+Schattendasein
+Schattendaseins
+Schattens
+Schattenseite
+Schattenseiten
+Schattierung
+Schatulle
+Schatullen
+Schatz
+Schatzes
+Schau
+Schaubild
+Schaubilder
+Schaubildern
+Schaubildes
+Schauder
+Schauer
+Schauers
+Schaufel
+Schaufenster
+Schaufenstern
+Schaufensters
+Schaukel
+Schaum
+Schaumburg
+Schaums
+Schauplatz
+Schauplatzes
+Schauplätze
+Schauplätzen
+Schauspiel
+Schauspiele
+Schauspielen
+Schauspieles
+Schauspiels
+Schaustück
+Schaustücke
+Schaustücken
+Schaustückes
+Schaustücks
+Scheck
+Schecks
+Scheffel
+Scheffels
+Scheibe
+Scheiben
+Scheibtruhe
+Scheich
+Scheiche
+Scheichen
+Scheichs
+Scheichtum
+Scheidung
+Scheidungen
+Schein
+Scheingrund
+Scheingrundes
+Scheingründe
+Scheingründen
+Scheins
+Scheinwiderstand
+Scheit
+Scheite
+Scheitel
+Scheitelpunkt
+Scheitelpunkte
+Scheitelpunkten
+Scheitelpunktes
+Scheitelpunkts
+Scheitels
+Scheiten
+Scheites
+Scheißkerl
+Scheißkerle
+Scheißkerlen
+Scheißkerls
+Schelm
+Schelme
+Schelmen
+Schelmerei
+Schelmereien
+Schelmes
+Schema
+Schemas
+Schemata
+Schematisierung
+Schemazeichnung
+Schemel
+Schemeln
+Schemels
+Schemen
+Schemens
+Schenke
+Schenkel
+Schenkeln
+Schenkels
+Schenken
+Schenker
+Schenkung
+Scherbe
+Scherben
+Scherer
+Schererei
+Scherereien
+Scherfqqlein
+Scherfqqleins
+Scherge
+Schergen
+Scherz
+Scherzel
+Scherzes
+Scherzhaftigkeit
+Scheuklappe
+Scheuklappen
+Scheune
+Scheunen
+Scheusal
+Scheusale
+Scheusalen
+Scheusals
+Scheußlichkeit
+Scheußlichkeiten
+Schi
+Schicht
+Schichtaufbau
+Schichtaufbaus
+Schichtfolge
+Schichtfolgen
+Schichtstruktur
+Schichtstrukturen
+Schichtung
+Schichtungen
+Schichtwechsel
+Schichtwechsels
+Schickeria
+Schicklichkeit
+Schicksal
+Schicksale
+Schicksalen
+Schicksals
+Schickung
+Schickungen
+Schieber
+Schieberegister
+Schieberei
+Schiebereien
+Schiebern
+Schiebers
+Schiebung
+Schiebungen
+Schiedsspruch
+Schiedssprüche
+Schiedssprüchen
+Schiefer
+Schiefers
+Schiefqqlage
+Schiefqqlagen
+Schiefstellung
+Schiefstellungen
+Schierling
+Schierlings
+Schiff
+Schiffchen
+Schiffchens
+Schiffe
+Schiffen
+Schiffer
+Schiffern
+Schiffers
+Schiffes
+Schiffs
+Schiiten
+Schikane
+Schikanen
+Schikoree
+Schikorees
+Schild
+Schilda
+Schildbürger
+Schildbürgern
+Schildbürgers
+Schilde
+Schilden
+Schilder
+Schildern
+Schilderung
+Schilderungen
+Schildes
+Schilds
+Schilf
+Schilfe
+Schilfen
+Schilfes
+Schiller
+Schilling
+Schimmel
+Schimmels
+Schimmer
+Schimmers
+Schimpanse
+Schimpansen
+Schimpfwort
+Schimpfwortes
+Schimpfwörter
+Schimpfwörtern
+Schindel
+Schindeln
+Schinder
+Schinderei
+Schindereien
+Schinders
+Schinken
+Schinkens
+Schirm
+Schirmes
+Schirmherr
+Schirmherren
+Schirmherrin
+Schirmherrinnen
+Schirmherrn
+Schirmherrschaft
+Schirmherrschaften
+Schirms
+Schirmung
+Schirmwand
+Schirmwände
+Schirmwänden
+Schis
+Schizophrenie
+Schlacht
+Schlachten
+Schlachter
+Schlachtung
+Schlaf
+Schlafes
+Schlafittchen
+Schlafs
+Schlag
+Schlagabtausch
+Schlager
+Schlagern
+Schlagers
+Schlages
+Schlagfertigkeit
+Schlagobers
+Schlags
+Schlagseite
+Schlagwort
+Schlagworte
+Schlagworten
+Schlagwortes
+Schlagwörter
+Schlagwörtern
+Schlagzeile
+Schlagzeilen
+Schlamassel
+Schlamm
+Schlamms
+Schlampe
+Schlampen
+Schlamperei
+Schlampereien
+Schlampertatsch
+Schlange
+Schlangen
+Schlangenlinie
+Schlangenlinien
+Schlankheit
+Schlapfen
+Schlapfens
+Schlappen
+Schlaraffenland
+Schlaraffenlandes
+Schlauberger
+Schlaubergern
+Schlaubergers
+Schlauch
+Schlauchs
+Schlaufe
+Schlaufen
+Schlauheit
+Schlawiner
+Schlechtigkeit
+Schlechtigkeiten
+Schlegel
+Schlegeln
+Schlegels
+Schleichweg
+Schleichwege
+Schleichwegen
+Schleichwegs
+Schleier
+Schleiern
+Schleiers
+Schleifchen
+Schleifchens
+Schleifenbedingung
+Schleifenbedingungen
+Schleifendurchlauf
+Schleifendurchlaufs
+Schleifendurchläufe
+Schleifendurchläufen
+Schleifeninvariante
+Schleifeninvarianten
+Schleim
+Schleims
+Schlemmerei
+Schlemmereien
+Schlendrian
+Schlendrians
+Schlepp
+Schlepper
+Schleppern
+Schleppers
+Schleppung
+Schleppungen
+Schlesier
+Schlesiern
+Schlesiers
+Schleswig
+Schleuder
+Schleudern
+Schleudersitz
+Schleudersitze
+Schleudersitzen
+Schleudersitzes
+Schleuderung
+Schleuderungen
+Schleuse
+Schleusen
+Schleusentor
+Schleusentore
+Schleusentoren
+Schleusentors
+Schlichter
+Schlichterin
+Schlichterinnen
+Schlichtern
+Schlichters
+Schlichtheit
+Schlick
+Schlicks
+Schließens
+Schließer
+Schließung
+Schließungen
+Schliff
+Schliffs
+Schlips
+Schlipse
+Schlipsen
+Schlipses
+Schlitten
+Schlittens
+Schlitz
+Schlitze
+Schlitzen
+Schlitzes
+Schlitzohr
+Schloss
+Schlosser
+Schlossern
+Schlossers
+Schlosses
+Schlossherr
+Schlossherren
+Schlossherrn
+Schlot
+Schlote
+Schloten
+Schlotes
+Schlots
+Schlucht
+Schluchten
+Schluck
+Schluckes
+Schlucks
+Schludrigkeit
+Schlummer
+Schlummers
+Schlund
+Schlundes
+Schlupf
+Schlupfqqloch
+Schlupfqqloches
+Schlupfqqlochs
+Schlupfqqlöcher
+Schlupfqqlöchern
+Schlupfs
+Schlupfwinkel
+Schlupfwinkeln
+Schluss
+Schlussakt
+Schlussakte
+Schlussakten
+Schlussaktes
+Schlussakts
+Schlussbemerkung
+Schlussbemerkungen
+Schlussbericht
+Schlussberichte
+Schlussberichten
+Schlussberichts
+Schlusserklärung
+Schlusses
+Schlussfeier
+Schlussfeiern
+Schlussfolgerung
+Schlussfolgerungen
+Schlussformel
+Schlussformeln
+Schlusslicht
+Schlusslichter
+Schlusslichtern
+Schlusslichtes
+Schlussphase
+Schlussphasen
+Schlusspunkt
+Schlussrunde
+Schlussrunden
+Schlusssatz
+Schlusssatzes
+Schlusssitzung
+Schlussstrich
+Schlussstriche
+Schlussstrichen
+Schlussstriches
+Schlusssätze
+Schlusssätzen
+Schlusstag
+Schlusswort
+Schlussworte
+Schlussworten
+Schlusswortes
+Schlussworts
+Schlächter
+Schlächterei
+Schlächtereien
+Schlächtern
+Schläfchen
+Schläfchens
+Schläfe
+Schläfen
+Schläfer
+Schläferin
+Schläferinnen
+Schläfern
+Schläfers
+Schläfrigkeit
+Schläge
+Schlägen
+Schläger
+Schlägerei
+Schlägereien
+Schlägern
+Schlägers
+Schläuche
+Schläuchen
+Schlösschen
+Schlösschens
+Schlösser
+Schlössern
+Schlückchen
+Schlückchens
+Schlücke
+Schlücken
+Schlünde
+Schlünden
+Schlüsse
+Schlüssel
+Schlüsseldateien
+Schlüsseln
+Schlüsselposition
+Schlüsselpositionen
+Schlüssels
+Schlüsseltechnologie
+Schlüsseltechnologien
+Schlüsselwort
+Schlüsselworte
+Schlüsselworten
+Schlüsselwortes
+Schlüsselwörter
+Schlüsselwörtern
+Schlüssen
+Schmach
+Schmackhaftigkeit
+Schmalz
+Schmalzes
+Schmarotzer
+Schmarotzerin
+Schmarotzerinnen
+Schmarotzern
+Schmarotzers
+Schmarotzertum
+Schmarotzertums
+Schmarre
+Schmarren
+Schmatz
+Schmatzes
+Schmaus
+Schmauserei
+Schmausereien
+Schmeichelei
+Schmeicheleien
+Schmeichler
+Schmeichlerin
+Schmeichlerinnen
+Schmeichlern
+Schmeichlers
+Schmelz
+Schmelzerei
+Schmelzereien
+Schmelzes
+Schmelztiegel
+Schmelztiegeln
+Schmelztiegels
+Schmelzung
+Schmelzungen
+Schmerbauch
+Schmerbauches
+Schmerbauchs
+Schmerbäuche
+Schmerbäuchen
+Schmerz
+Schmerzen
+Schmerzes
+Schmerzgrenze
+Schmerzgrenzen
+Schmetterling
+Schmetterlinge
+Schmetterlingen
+Schmetterlings
+Schmidt
+Schmidts
+Schmied
+Schmiedes
+Schmieds
+Schmiererei
+Schmierereien
+Schmiergeld
+Schmiergelder
+Schmiergeldern
+Schmiergeldes
+Schmierung
+Schmierungen
+Schmierzettel
+Schmirgel
+Schmirgels
+Schmiss
+Schmuck
+Schmucks
+Schmuckstück
+Schmuckstücke
+Schmuckstücken
+Schmuckstückes
+Schmuckstücks
+Schmuggel
+Schmuggelei
+Schmuggeleien
+Schmuggels
+Schmuggler
+Schmugglern
+Schmugglers
+Schmutz
+Schmutzarbeit
+Schmutzarbeiten
+Schmutzes
+Schmutzfink
+Schmutzfinken
+Schmutzfinks
+Schmutzfleck
+Schmutzflecken
+Schmutzflecks
+Schmutzigkeit
+Schmäh
+Schmähs
+Schmähung
+Schmähungen
+Schmälerung
+Schmälerungen
+Schmäuse
+Schmäusen
+Schmöker
+Schnabel
+Schnabels
+Schnake
+Schnaken
+Schnaps
+Schnapses
+Schnapsidee
+Schnapsideen
+Schnaufer
+Schnaufern
+Schnaufers
+Schnauze
+Schnauzen
+Schnauzer
+Schnauzern
+Schnauzers
+Schneck
+Schnecke
+Schnecken
+Schneckentempo
+Schneckerl
+Schneckerln
+Schneckerls
+Schnecks
+Schnee
+Schnees
+Schneewittchen
+Schneewittchens
+Schneid
+Schneidens
+Schneider
+Schneiderei
+Schneiderin
+Schneiderinnen
+Schneidern
+Schneiders
+Schneids
+Schneise
+Schneisen
+Schnelligkeit
+Schnellverfahren
+Schnellverfahrens
+Schnepfe
+Schnepfen
+Schnippchen
+Schnippel
+Schnippels
+Schnitt
+Schnitte
+Schnittebene
+Schnittebenen
+Schnittes
+Schnittpunkt
+Schnittpunkte
+Schnittpunkten
+Schnittpunktes
+Schnittpunkts
+Schnitts
+Schnittstelle
+Schnittstellen
+Schnittstellenbaustein
+Schnittstellenbausteine
+Schnittstellenbausteinen
+Schnittstellenbausteins
+Schnittstellenbelegung
+Schnittstellenbelegungen
+Schnittstellenbeschreibung
+Schnittstellenbeschreibungen
+Schnittstellenbox
+Schnittstellenboxen
+Schnittstellenkabel
+Schnittstellenkabeln
+Schnittstellenkabels
+Schnittstellenkonverter
+Schnittstellennummer
+Schnittstellennummern
+Schnittstellenoption
+Schnittstellenoptionen
+Schnittstellenparameter
+Schnittstellensoftware
+Schnittstellentreiber
+Schnittstellentreibern
+Schnittstellentreibers
+Schnitzel
+Schnitzeln
+Schnitzels
+Schnitzer
+Schnitzerei
+Schnitzereien
+Schnitzern
+Schnitzers
+Schnorchel
+Schnorrer
+Schnorrerei
+Schnorrern
+Schnorrers
+Schnorrertum
+Schnuller
+Schnullern
+Schnulze
+Schnulzen
+Schnupfen
+Schnupfens
+Schnuppe
+Schnuppen
+Schnur
+Schnäbel
+Schnäbeln
+Schnäppchen
+Schnäppchens
+Schnäpse
+Schnäpsen
+Schnörkel
+Schnörkeln
+Schnörkels
+Schnösel
+Schnüffelei
+Schnüffqqler
+Schnüffqqlern
+Schnüffqqlers
+Schober
+Schobers
+Schock
+Schockerlebnis
+Schockerlebnisse
+Schockerlebnissen
+Schockerlebnisses
+Schocktherapie
+Schocktherapien
+Schockwirkung
+Schokolade
+Schokoladen
+Scholastiker
+Scholle
+Schollen
+Schoner
+Schonern
+Schonung
+Schonungen
+Schonzeit
+Schonzeiten
+Schopf
+Schopfes
+Schopfs
+Schoppen
+Schoppens
+Schorf
+Schorfs
+Schornstein
+Schornsteine
+Schornsteinen
+Schornsteins
+Schote
+Schoten
+Schott
+Schotte
+Schotten
+Schotter
+Schottern
+Schotters
+Schottin
+Schottinnen
+Schottland
+Schotts
+Schoße
+Schoßes
+Schraffierung
+Schrank
+Schranke
+Schranken
+Schranks
+Schraubenschlüssel
+Schraubenschlüsseln
+Schraubenschlüssels
+Schraubenzieher
+Schraubenziehern
+Schraubenziehers
+Schraubstock
+Schraubstocks
+Schraubstöcke
+Schraubstöcken
+Schraubung
+Schraubungen
+Schraubverschluss
+Schraubverschlusses
+Schraubverschlüsse
+Schraubverschlüssen
+Schreck
+Schrecken
+Schreckens
+Schreckensbotschaft
+Schreckensbotschaften
+Schreckenschrei
+Schreckenschreie
+Schreckenschreien
+Schreckenschreis
+Schreckensnachricht
+Schreckensnachrichten
+Schreckensruf
+Schreckensschrei
+Schreckensschreies
+Schreckensschreis
+Schreckenstat
+Schreckenstaten
+Schreckgespenst
+Schreckgespenster
+Schreckgespenstern
+Schreckgespenstes
+Schrecknis
+Schrecknisse
+Schrecknissen
+Schrecknisses
+Schrecksekunde
+Schrecksekunden
+Schrei
+Schreibarbeit
+Schreibarbeiten
+Schreibblock
+Schreibblockes
+Schreibblocks
+Schreibblöcke
+Schreibblöcken
+Schreibcursor
+Schreibens
+Schreiber
+Schreiberei
+Schreibereien
+Schreiberin
+Schreiberinnen
+Schreiberling
+Schreiberlinge
+Schreiberlingen
+Schreiberlings
+Schreibern
+Schreibers
+Schreibfehler
+Schreibfehlern
+Schreibfehlers
+Schreibgerät
+Schreibgeräte
+Schreibgeräten
+Schreibgerätes
+Schreibheft
+Schreibhefte
+Schreibheften
+Schreibheftes
+Schreibhilfe
+Schreibhilfen
+Schreibschutz
+Schreibschutzes
+Schreibtisch
+Schreibtische
+Schreibtischen
+Schreibtisches
+Schreibtischtäter
+Schreibung
+Schreibungen
+Schreibweise
+Schreibweisen
+Schreibzugriff
+Schreibzugriffe
+Schreibzugriffen
+Schreibzugriffs
+Schreier
+Schreierin
+Schreierinnen
+Schreiern
+Schreiers
+Schreihals
+Schreihalses
+Schreihälse
+Schreihälsen
+Schrein
+Schreine
+Schreinen
+Schreiner
+Schreinern
+Schreiners
+Schreins
+Schreis
+Schreitens
+Schrift
+Schriftart
+Schriftarten
+Schriftbild
+Schriftbilder
+Schriftbildern
+Schriftbildes
+Schriftbreite
+Schriftbreiten
+Schriften
+Schriftführer
+Schriftgröße
+Schriftgrößen
+Schriftsatz
+Schriftsatzes
+Schriftsetzer
+Schriftsetzern
+Schriftsprache
+Schriftsprachen
+Schriftstück
+Schriftstücke
+Schriftstücken
+Schriftstücks
+Schriftsätze
+Schriftsätzen
+Schrifttum
+Schrifttums
+Schriftverkehr
+Schriftwechsel
+Schriftwechsels
+Schriftwort
+Schriftzeichen
+Schriftzeichens
+Schriftzug
+Schriftzuges
+Schriftzugs
+Schriftzüge
+Schriftzügen
+Schrimp
+Schrimps
+Schritt
+Schritte
+Schritten
+Schritthalten
+Schritthaltens
+Schrittmacher
+Schrittmachern
+Schrittmachers
+Schrittmotorinterface
+Schrittmotorinterfaces
+Schritts
+Schrittweite
+Schrittweiten
+Schroffheit
+Schrot
+Schrots
+Schrott
+Schrotts
+Schrulle
+Schrullen
+Schrumpfung
+Schrumpfungen
+Schrunden
+Schräglage
+Schräglagen
+Schröder
+Schröders
+Schrödinger
+Schrödingers
+Schub
+Schubert
+Schuberts
+Schubfach
+Schubfaches
+Schubfächer
+Schubs
+Schuft
+Schufterei
+Schufts
+Schuh
+Schuhe
+Schuhen
+Schuhs
+Schuld
+Schuldfrage
+Schuldfragen
+Schuldigkeit
+Schuldlosigkeit
+Schuldner
+Schuldnerin
+Schuldnerinnen
+Schuldnern
+Schuldners
+Schulpflicht
+Schulter
+Schultern
+Schulung
+Schulungen
+Schund
+Schur
+Schuren
+Schurke
+Schurken
+Schurkerei
+Schurkereien
+Schurz
+Schurzes
+Schuss
+Schussel
+Schussels
+Schusses
+Schuster
+Schustern
+Schusters
+Schute
+Schuten
+Schutt
+Schutts
+Schutz
+Schutze
+Schutzes
+Schutzschicht
+Schutzschichten
+Schwabe
+Schwaben
+Schwabenland
+Schwachheit
+Schwachsinn
+Schwachsinns
+Schwachstelle
+Schwachstellen
+Schwachstrom
+Schwade
+Schwaden
+Schwadron
+Schwadronen
+Schwager
+Schwagers
+Schwalbe
+Schwalben
+Schwall
+Schwalle
+Schwalls
+Schwammerl
+Schwammerln
+Schwammerls
+Schwan
+Schwanensee
+Schwangerschaft
+Schwank
+Schwankung
+Schwankungen
+Schwankungsbreite
+Schwankungsbreiten
+Schwans
+Schwanz
+Schwanzes
+Schwarm
+Schwarms
+Schwarte
+Schwarten
+Schwarzafrika
+Schwarzbeere
+Schwarzbeeren
+Schwarzmalerei
+Schwarzwald
+Schwatz
+Schwatzes
+Schwebebahn
+Schwebebahnen
+Schwebebalken
+Schwebebalkens
+Schwede
+Schweden
+Schwedin
+Schwedinnen
+Schwefel
+Schwefels
+Schweif
+Schweifs
+Schweifung
+Schweifungen
+Schweigsamkeit
+Schwein
+Schweine
+Schweinen
+Schweinerei
+Schweinereien
+Schweins
+Schweitzer
+Schweitzers
+Schweiz
+Schweizer
+Schweizerin
+Schweizerinnen
+Schweizers
+Schweiß
+Schweißer
+Schweißerei
+Schweißern
+Schweißers
+Schweißes
+Schweißung
+Schwelger
+Schwelgerei
+Schwelgerin
+Schwelgerinnen
+Schwelgern
+Schwelgers
+Schwellenspannung
+Schwellenstrom
+Schwellung
+Schwellungen
+Schwellwert
+Schwenk
+Schwenks
+Schwerarbeit
+Schwerarbeiten
+Schwerarbeiter
+Schwerarbeiterin
+Schwerarbeiterinnen
+Schwerarbeitern
+Schwerarbeiters
+Schwerfälligkeit
+Schwerkraft
+Schwerkräfte
+Schwerkräften
+Schwermut
+Schwermuts
+Schwerpunkt
+Schwerpunkte
+Schwerpunkten
+Schwerpunktes
+Schwerpunktverschiebung
+Schwerpunktverschiebungen
+Schwerstarbeit
+Schwert
+Schwerte
+Schwerter
+Schwertern
+Schwertes
+Schwester
+Schwestern
+Schwesterorganisation
+Schwesterorganisationen
+Schwiegereltern
+Schwiegermütter
+Schwiegersohn
+Schwiegersöhne
+Schwiegersöhnen
+Schwiele
+Schwielen
+Schwierigkeit
+Schwierigkeiten
+Schwindel
+Schwindelei
+Schwindeleien
+Schwindels
+Schwindler
+Schwindlerin
+Schwindlerinnen
+Schwindlern
+Schwindlers
+Schwindsucht
+Schwinger
+Schwingern
+Schwingers
+Schwingkreis
+Schwingkreise
+Schwingkreisen
+Schwingkreises
+Schwingung
+Schwingungen
+Schwips
+Schwipses
+Schwulität
+Schwulitäten
+Schwulst
+Schwulstes
+Schwund
+Schwundes
+Schwunds
+Schwung
+Schwungkraft
+Schwungkräfte
+Schwungkräften
+Schwungs
+Schwur
+Schwurs
+Schwäbin
+Schwäbinnen
+Schwächlichkeit
+Schwächling
+Schwächlinge
+Schwächlingen
+Schwächlings
+Schwächung
+Schwächungen
+Schwägerin
+Schwägerinnen
+Schwämme
+Schwämmen
+Schwäne
+Schwänen
+Schwängerung
+Schwänke
+Schwänken
+Schwärmer
+Schwärmerei
+Schwärmerin
+Schwärmerinnen
+Schwärmern
+Schwärmers
+Schwätzer
+Schwätzerin
+Schwätzerinnen
+Schwätzern
+Schwätzers
+Schwüre
+Schwüren
+Schäbigkeit
+Schächer
+Schächern
+Schächers
+Schächte
+Schächten
+Schädel
+Schädeln
+Schädels
+Schäden
+Schädigung
+Schädigungen
+Schädlichkeit
+Schädling
+Schädlinge
+Schädlingen
+Schädlings
+Schäfchen
+Schäfchens
+Schäfer
+Schäferin
+Schäferinnen
+Schäfern
+Schäfers
+Schäfte
+Schäften
+Schäkerei
+Schäkereien
+Schälle
+Schällen
+Schändlichkeit
+Schändung
+Schändungen
+Schänke
+Schänken
+Schären
+Schärfung
+Schärfungen
+Schärpe
+Schärpen
+Schätzchen
+Schätzchens
+Schätzer
+Schätzern
+Schätzers
+Schätzung
+Schätzungen
+Schäume
+Schäumen
+Schöffe
+Schöffen
+Schönbrunn
+Schönfärber
+Schönfärberei
+Schönfärbern
+Schönfärbers
+Schönheit
+Schönheiten
+Schönredner
+Schönrednern
+Schönredners
+Schöpfer
+Schöpfergeist
+Schöpfergeistes
+Schöpferin
+Schöpferinnen
+Schöpferkraft
+Schöpfern
+Schöpfers
+Schöpfung
+Schöpfungen
+Schössling
+Schösslinge
+Schösslingen
+Schösslings
+Schübe
+Schüben
+Schüchternheit
+Schüler
+Schülerin
+Schülerinnen
+Schülern
+Schülers
+Schürze
+Schürzen
+Schüsse
+Schüssel
+Schüsseln
+Schüssen
+Schützling
+Schützlinge
+Schützlingen
+Schützlings
+Sciencefiction
+Scratchpad
+Scratchpads
+Sebastian
+Sebastians
+Sechseck
+Sechsecke
+Sechsecken
+Sechseckes
+Sechsecks
+Sechsen
+Sechstklässler
+Sechstklässlerin
+Sechstklässlerinnen
+Sechstklässlern
+Sechstklässlers
+Sechziger
+Sechzigerin
+Sechzigerinnen
+Sechzigern
+Sechzigers
+Sediment
+Sedimente
+Sedimenten
+Sediments
+See
+Seele
+Seelen
+Seen
+Sees
+Segel
+Segeln
+Segels
+Segen
+Segens
+Segler
+Seglerin
+Seglerinnen
+Seglern
+Seglers
+Segment
+Segmente
+Segmenten
+Segmentes
+Segments
+Segnung
+Segnungen
+Sehenswürdigkeit
+Sehenswürdigkeiten
+Sehnsucht
+Sehnsüchte
+Sehnsüchten
+Sehvermögen
+Sehvermögens
+Seichtheit
+Seichtheiten
+Seide
+Seidel
+Seidels
+Seiko
+Seil
+Seiler
+Seilern
+Seilpotis
+Seils
+Seim
+Seime
+Seimen
+Seims
+Sein
+Seins
+Seismograf
+Seismografen
+Seismograph
+Seismographen
+Seite
+Seiten
+Seitenansicht
+Seitenansichten
+Seitenblick
+Seitenblicke
+Seitenblicken
+Seitenblickes
+Seiteneffekt
+Seiteneffektanalyse
+Seiteneffektanalysen
+Seiteneffekte
+Seiteneffekten
+Seiteneffektes
+Seiteneffekts
+Seitenhieb
+Seitenhiebe
+Seitenhieben
+Seitenhiebes
+Seitenlehne
+Seitenlehnen
+Seitenlinie
+Seitenlinien
+Seitenlänge
+Seitenlängen
+Seitennummerierung
+Seitenteil
+Seitenteile
+Seitenteilen
+Seitenteils
+Seitenwechsel
+Seitenwechseln
+Seitenwechsels
+Seitenwirkung
+Seitenwirkungen
+Seitenzahl
+Sekante
+Sekanten
+Sekret
+Sekretariat
+Sekretariate
+Sekretariaten
+Sekretariates
+Sekretariats
+Sekreten
+Sekretion
+Sekretionen
+Sekretär
+Sekretäre
+Sekretären
+Sekretärin
+Sekretärinnen
+Sekretärs
+Sekt
+Sektes
+Sektierer
+Sektierern
+Sektierers
+Sektion
+Sektionen
+Sektor
+Sektoren
+Sektors
+Sekts
+Sekundant
+Sekundanten
+Sekunde
+Sekunden
+Sekundenbruchteil
+Sekundenbruchteile
+Sekundenbruchteilen
+Sekundenbruchteils
+Sekundenschnelle
+Sekundentakt
+Sekundenzeiger
+Sekundenzeigern
+Sekundenzeigers
+Selbstaufopferung
+Selbstbedienung
+Selbstbedienungen
+Selbstbedienungskomfort
+Selbstbehauptung
+Selbstbeherrschung
+Selbstbeschränkung
+Selbstbeschuldigung
+Selbstbeschuldigungen
+Selbstbesinnung
+Selbstbestimmung
+Selbstbestimmungsrecht
+Selbstbeteiligung
+Selbstbeteiligungen
+Selbstbetrug
+Selbstbetrugs
+Selbstbewusstsein
+Selbstbewusstseins
+Selbstdarstellung
+Selbstdisziplin
+Selbsteinschätzung
+Selbsteinschätzungen
+Selbstentfaltung
+Selbsterfahrung
+Selbsterhaltung
+Selbsterhaltungstrieb
+Selbsterhaltungstriebe
+Selbsterhaltungstrieben
+Selbsterhaltungstriebes
+Selbsterkenntnis
+Selbsterkenntnisse
+Selbsterkenntnissen
+Selbsterniedrigung
+Selbsterniedrigungen
+Selbstgefälligkeit
+Selbstgefühl
+Selbstgefühle
+Selbstgefühlen
+Selbstgefühls
+Selbstgespräch
+Selbstgespräche
+Selbstgesprächen
+Selbstgesprächs
+Selbsthilfe
+Selbstinitiative
+Selbstinteresse
+Selbstironie
+Selbstkontrolle
+Selbstkostenpreis
+Selbstkostenpreise
+Selbstkostenpreisen
+Selbstkostenpreises
+Selbstkritik
+Selbstkritiken
+Selbstlaut
+Selbstlaute
+Selbstlauten
+Selbstlautes
+Selbstlauts
+Selbstsicherheit
+Selbstständigkeit
+Selbstständigkeiten
+Selbstsucht
+Selbsttest
+Selbsttäuschung
+Selbstverachtung
+Selbstverantwortung
+Selbstverleugnung
+Selbstverleugnungen
+Selbstvernichtung
+Selbstverständlichkeit
+Selbstverständlichkeiten
+Selbstvertrauen
+Selbstvertrauens
+Selbstverwirklichung
+Selbstverwirklichungen
+Selbstzensur
+Selbstzufriedenheit
+Selbstzweck
+Selbstzwecke
+Selbstzwecken
+Selbstzweckes
+Selbstzwecks
+Selbständigkeit
+Selbstüberwindung
+Selbstüberwindungen
+Selektion
+Selektionen
+Selektionsdruck
+Selektionsdrucks
+Selfmademan
+Sellerie
+Seltenheit
+Seltenheiten
+Seltenheitswert
+Seltsamkeit
+Semantik
+Semantikbeschreibung
+Semantikbeschreibungen
+Semantikdefinition
+Semantikdefinitionen
+Semantiken
+Semaphor
+Semaphore
+Semaphoren
+Semaphors
+Semester
+Semesterbeginn
+Semesterbeginns
+Semesterende
+Semesterenden
+Semesterendes
+Semesterferien
+Semestern
+Semesters
+Semesterschluss
+Semesterschlusses
+Semikolon
+Semikolons
+Seminar
+Seminare
+Seminaren
+Seminarist
+Seminaristen
+Seminaristin
+Seminaristinnen
+Seminarraum
+Seminarraumes
+Seminarraums
+Seminarräume
+Seminarräumen
+Seminars
+Semiotik
+Semit
+Semiten
+Semitin
+Semitinnen
+Semmel
+Semmeln
+Senat
+Senate
+Senaten
+Senates
+Senator
+Senatoren
+Senats
+Sendedaten
+Sendeeinheit
+Sendeeinheiten
+Sendens
+Sender
+Sendern
+Sendeseite
+Sendung
+Sendungen
+Senegal
+Senf
+Senfs
+Senilität
+Senior
+Senioren
+Seniors
+Senkel
+Senkeln
+Senkels
+Senker
+Senkern
+Senkers
+Senkung
+Senkungen
+Senner
+Sennerei
+Sennereien
+Sennerin
+Sennerinnen
+Sennern
+Senners
+Sensation
+Sensationen
+Sensibilität
+Sensibilitäten
+Sensitivität
+Sensor
+Sensoren
+Sensorik
+Sensors
+Sentenz
+Sentenzen
+Sentiment
+Sentimentalität
+Sentiments
+Seoul
+Separation
+Separationen
+Separatismen
+Separatist
+Separatisten
+Separee
+Separees
+Sepp
+Seppel
+Sepps
+Sept
+September
+Septembers
+Sequenz
+Sequenzen
+Serbe
+Serben
+Serbien
+Serbin
+Serbinnen
+Seren
+Serenade
+Serenaden
+Sergeant
+Sergeanten
+Sergeants
+Serie
+Serien
+Serienproduktion
+Serienproduktionen
+Serienwiderstand
+Serife
+Serifen
+Serpentine
+Serpentinen
+Serum
+Serums
+Server
+Servern
+Servers
+Service
+Servicearbeit
+Servicearbeiten
+Serviceleistung
+Serviceleistungen
+Services
+Serviererin
+Serviererinnen
+Serviette
+Servietten
+Sesam
+Sesams
+Sessel
+Sesseln
+Sessels
+Sesshaftigkeit
+Session
+Sessionen
+Set
+Sets
+Setup
+Setups
+Setzer
+Setzerei
+Setzern
+Setzers
+Setzlinge
+Setzlingen
+Setzung
+Setzungen
+Seufzer
+Seufzerbrücke
+Seufzern
+Seufzers
+Severin
+Sex
+Sexappeal
+Sexappeals
+Sexes
+Sexismus
+Sexpuppe
+Sexpuppen
+Sextett
+Sextette
+Sextetten
+Sextettes
+Sextetts
+Sexualität
+Sexus
+Señor
+Señora
+Señoras
+Señores
+Señorita
+Señoritas
+Señors
+Sh
+Shakespeare
+Shakespeares
+Shareware
+Shell
+Shellscript
+Shellscripts
+Sheriff
+Sherry
+Sherrys
+Shirley
+Shirleys
+Shogun
+Shortstory
+Shortstorys
+Show
+Showbusiness
+Showdown
+Showdowns
+Shows
+Shrimp
+Shrimps
+Sibirier
+Sibiriern
+Sibiriers
+Sichel
+Sicheln
+Sicherheit
+Sicherheiten
+Sicherstellung
+Sicherung
+Sicherungen
+Sicherungsmechanismus
+Sicht
+Sichtbarkeit
+Sichtbarmachung
+Sichten
+Sichtverhältnis
+Sichtverhältnisse
+Sichtverhältnissen
+Sichtverhältnisses
+Sichtweise
+Sichtweisen
+Sieb
+Siebe
+Sieben
+Siebenbürgen
+Siebengebirge
+Siebes
+Siebs
+Siebtklässler
+Siebtklässlerin
+Siebtklässlerinnen
+Siebtklässlern
+Siebtklässlers
+Siebziger
+Siebzigerin
+Siebzigerinnen
+Siebzigern
+Siebzigers
+Siechtum
+Siedepunkt
+Siedepunkte
+Siedepunkten
+Siedepunktes
+Siedepunkts
+Sieder
+Siedern
+Sieders
+Siedler
+Siedlern
+Siedlers
+Siedlung
+Siedlungen
+Sieg
+Siegel
+Siegeln
+Siegels
+Sieger
+Siegerin
+Siegerinnen
+Siegern
+Siegers
+Siegs
+Siel
+Siele
+Sielen
+Siels
+Siemens
+Siesta
+Sigi
+Sigis
+Sigmund
+Sigmunds
+Signal
+Signale
+Signalen
+Signals
+Signalwirkung
+Signatur
+Signaturen
+Signet
+Signets
+Signifikanz
+Sigrid
+Sigrids
+Sigrun
+Sigruns
+Silbe
+Silben
+Silbentrennprogramm
+Silbentrennung
+Silbentrennungen
+Silber
+Silbers
+Silberstreifen
+Silberstreifens
+Silhouette
+Silhouetten
+Silikat
+Silikats
+Silikon
+Silikons
+Silikose
+Silikosen
+Silizium
+Siliziums
+Silo
+Silofutter
+Silofutters
+Silos
+Silvester
+Silvesters
+Simbabwe
+Simon
+Simons
+Simplex
+Sims
+Simse
+Simsen
+Simses
+Simulant
+Simulanten
+Simulantin
+Simulantinnen
+Simulation
+Simulationen
+Simulator
+Simulatoren
+Sinai
+Sinalco
+Sinatra
+Sinatras
+Sinfonie
+Sinfonien
+Singapur
+Singsang
+Singsangs
+Singular
+Singulars
+Sinn
+Sinnbeziehung
+Sinnbezug
+Sinnbezuges
+Sinnbezugs
+Sinnbezüge
+Sinnbezügen
+Sinnbild
+Sinnbilder
+Sinnbildern
+Sinnbildes
+Sinnes
+Sinnesart
+Sinneserfahrung
+Sinnesorgan
+Sinnesorgane
+Sinnesorganen
+Sinnesorgans
+Sinnestäuschung
+Sinneswandel
+Sinnesänderung
+Sinnesänderungen
+Sinnfrage
+Sinnfragen
+Sinnhaftigkeit
+Sinnlichkeit
+Sinnlosigkeit
+Sinns
+Sinnspruch
+Sinnspruchs
+Sinnsprüche
+Sinnsprüchen
+Sinter
+Sinters
+Sintflut
+Sintfluten
+Sinus
+Sinuskurve
+Sinuskurven
+Siphon
+Siphons
+Sippe
+Sippen
+Sir
+Sirene
+Sirenen
+Sirius
+Sirup
+Sirups
+Sisyphusarbeit
+Sitte
+Sitten
+Sittich
+Sittiche
+Sittichen
+Sittichs
+Sittlichkeit
+Sittsamkeit
+Situation
+Situationen
+Sitz
+Sitzes
+Sitzplatz
+Sitzplätze
+Sitzplätzen
+Sitzung
+Sitzungen
+Sizilianer
+Sizilianerin
+Sizilianerinnen
+Sizilianern
+Sizilianers
+Sizilien
+Skagerrak
+Skala
+Skalen
+Skalierung
+Skalierungen
+Skalp
+Skalpell
+Skalps
+Skandal
+Skandale
+Skandalen
+Skandals
+Skandinavien
+Skandinaviens
+Skandinavier
+Skandinavierin
+Skandinavierinnen
+Skandinaviern
+Skandinaviers
+Skandälchen
+Skandälchens
+Skat
+Skats
+Skeleton
+Skeletons
+Skelett
+Skelette
+Skeletten
+Skelettes
+Skepsis
+Skeptiker
+Skeptikern
+Skeptikers
+Sketch
+Sketche
+Sketchen
+Sketches
+Sketsch
+Sketsche
+Sketschen
+Sketsches
+Ski
+Skis
+Skizze
+Skizzen
+Sklave
+Sklaven
+Sklaverei
+Sklavereien
+Sklavin
+Sklavinnen
+Skoliose
+Skoliosen
+Skonti
+Skonto
+Skorbut
+Skorbuts
+Skorpion
+Skorpione
+Skorpionen
+Skorpions
+Skript
+Skripten
+Skriptes
+Skripts
+Skrupel
+Skrupeln
+Skrupels
+Skulptur
+Skulpturen
+Skylla
+Slalom
+Slaloms
+Slawe
+Slawen
+Slawin
+Slawinnen
+Slip
+Slips
+Slogan
+Slogans
+Slotnummer
+Slotnummern
+Slowake
+Slowakei
+Slowaken
+Slowakin
+Slowakinnen
+Slowenen
+Slum
+Slums
+Smalltalk
+Smaragd
+Smaragde
+Smaragden
+Smaragdes
+Smaragds
+Smog
+Smoking
+Smolensk
+Smyrna
+Snackbar
+Snob
+Snobs
+Socke
+Sockel
+Sockeln
+Sockels
+Socken
+Soda
+Sodas
+Sodom
+Sodomie
+Sofa
+Sofas
+Sofia
+Softkey
+Software
+Softwareabteilung
+Softwareabteilungen
+Softwareadaption
+Softwareadaptionen
+Softwareanforderung
+Softwareanforderungen
+Softwareanpassung
+Softwareanpassungen
+Softwareansatz
+Softwareansatzes
+Softwareanschluss
+Softwareanschlusses
+Softwareanschlüsse
+Softwareanschlüssen
+Softwareanteil
+Softwareanteile
+Softwareanteilen
+Softwareanteils
+Softwarearbeit
+Softwarearbeiten
+Softwareaufwand
+Softwareaufwands
+Softwareauslieferung
+Softwareauslieferungen
+Softwarebeschreibung
+Softwarebeschreibungen
+Softwarebestellung
+Softwarebestellungen
+Softwarebezeichnung
+Softwarebezeichnungen
+Softwareentwicklung
+Softwareentwicklungen
+Softwareentwicklungssystem
+Softwareentwicklungssysteme
+Softwareentwicklungssystemen
+Softwareentwicklungssystems
+Softwareerarbeitungszeit
+Softwareerweiterung
+Softwareerweiterungen
+Softwarefreigabebaustein
+Softwarefreigabebausteine
+Softwarefreigabemodul
+Softwarefreigabemodule
+Softwaregigant
+Softwaregiganten
+Softwaregrundkosten
+Softwareinbetriebnahme
+Softwareinterface
+Softwarekey
+Softwarekeys
+Softwarekomponente
+Softwarekomponenten
+Softwarekonzern
+Softwarekonzerne
+Softwarekopierfreigabe
+Softwarekorrektheit
+Softwarekosten
+Softwareleute
+Softwarelieferung
+Softwarelisting
+Softwarelistings
+Softwarelösung
+Softwarelösungen
+Softwaremechanismen
+Softwaremodifikation
+Softwaremodifikationen
+Softwaremodul
+Softwaremodule
+Softwaremodulen
+Softwaremoduls
+Softwarepaket
+Softwarepakete
+Softwarepauschale
+Softwarepirat
+Softwarepiraten
+Softwareplattform
+Softwareplattformen
+Softwarepreis
+Softwarepreise
+Softwareproblem
+Softwareprobleme
+Softwareproblems
+Softwareprodukt
+Softwareprodukte
+Softwareprodukten
+Softwareprotokoll
+Softwareprotokolle
+Softwareprotokollen
+Softwareprüfung
+Softwareprüfungen
+Softwareschutz
+Softwareseite
+Softwaresimulation
+Softwaresimulationen
+Softwaresystem
+Softwaresysteme
+Softwaresystemen
+Softwaresystems
+Softwareteil
+Softwareteile
+Softwareteilen
+Softwaretestmethode
+Softwaretestmethoden
+Softwaretreiber
+Softwaretreibern
+Softwareverbesserung
+Softwareverbesserungen
+Softwareverifikation
+Softwareverifikationen
+Softwareversion
+Softwareversionen
+Softwarewartung
+Softwarewerkzeuge
+Softwareänderung
+Softwareänderungen
+Sog
+Soge
+Sogen
+Soges
+Sogs
+Sogwirkung
+Sogwirkungen
+Sohle
+Sohlen
+Sohn
+Sohne
+Sohnemann
+Sohnes
+Sohns
+Solaris
+Sold
+Soldat
+Solde
+Solden
+Soldes
+Solds
+Sole
+Soli
+Solidarisierung
+Solidarität
+Solidaritäten
+Solidität
+Soliditäten
+Solist
+Solisten
+Sollbruchstelle
+Sollbruchstellen
+Sollmaß
+Sollmaße
+Sollmaßen
+Sollmaßes
+Sollmenge
+Sollmengen
+Sollstärke
+Sollstärken
+Sollwert
+Sollwerte
+Sollwerten
+Sollwertes
+Sollwerts
+Sollzustand
+Sollzustandes
+Sollzustands
+Solo
+Solon
+Solons
+Solos
+Solvenz
+Solvenzen
+Somalia
+Somaliland
+Sommer
+Sommern
+Sommers
+Sommersemester
+Sommersemestern
+Sommersemesters
+Sonate
+Sonaten
+Sonde
+Sonden
+Sonderausgabe
+Sonderausgaben
+Sonderbedingung
+Sonderbedingungen
+Sonderbehandlung
+Sonderbehandlungen
+Sondererlaubnis
+Sondererlaubnisse
+Sondererlaubnissen
+Sonderfall
+Sonderfalls
+Sonderfälle
+Sonderfällen
+Sonderheit
+Sonderheiten
+Sonderinteresse
+Sonderinteressen
+Sonderling
+Sonderlinge
+Sonderlingen
+Sonderlings
+Sondermaßnahme
+Sondermaßnahmen
+Sonderpreis
+Sonderpreise
+Sonderpreisen
+Sonderpreises
+Sonderrecht
+Sonderrechte
+Sonderrechten
+Sonderrechts
+Sondersituation
+Sondersituationen
+Sondersitzung
+Sondersitzungen
+Sonderstellung
+Sonderstellungen
+Sonderwünsche
+Sonderwünschen
+Sonderzeichen
+Sonderzeichens
+Sondierung
+Sondierungen
+Sonett
+Sonette
+Sonetten
+Sonettes
+Sonetts
+Sonnabend
+Sonnabende
+Sonnabenden
+Sonnabends
+Sonne
+Sonnen
+Sonntag
+Sonntagen
+Sony
+Sophia
+Sophias
+Sophie
+Sophies
+Sophist
+Sophisten
+Sophisterei
+Sophistereien
+Sophistin
+Sophistinnen
+Sophokles
+Sopran
+Soprane
+Sopranen
+Sopranist
+Sopranisten
+Sopranistin
+Sopranistinnen
+Soprans
+Sorbe
+Sorben
+Sorgenkind
+Sorgenkinder
+Sorgenkindern
+Sorgenkindes
+Sorgepflicht
+Sorgfalt
+Sorglosigkeit
+Sorglosigkeiten
+Sorte
+Sorten
+Sortierung
+Sortierungen
+Sortiment
+Sortimente
+Sortimenten
+Sortimentes
+Sortiments
+Soufflee
+Soufflees
+Souffleur
+Souffleure
+Souffleuren
+Souffleurs
+Souffleuse
+Souffleusen
+Soufflé
+Soufflés
+Soundkarte
+Soundkarten
+Sourcecode
+Sourcecodes
+Souterrain
+Souterrains
+Souvenir
+Souvenirs
+Souverän
+Souveränität
+Souveränitäten
+Souveräns
+Soweto
+Sowjet
+Sowjetrepublik
+Sowjetrepubliken
+Sowjetrusse
+Sowjetrussen
+Sowjetrussland
+Sowjets
+Sowjetunion
+Sowjetzone
+Sozialismus
+Sozialist
+Sozialisten
+Sozialistin
+Sozialistinnen
+Sozietät
+Soziologe
+Soziologen
+Soziologie
+Soziologin
+Soziologinnen
+Sozius
+Soße
+Soßen
+Spachtel
+Spachtels
+Spagat
+Spagate
+Spagaten
+Spagats
+Spagetti
+Spaghetti
+Spalier
+Spaliere
+Spalieren
+Spaliers
+Spalt
+Spalts
+Spaltung
+Spaltungen
+Span
+Spandau
+Spanien
+Spaniens
+Spanier
+Spanierin
+Spanierinnen
+Spaniern
+Spaniers
+Spann
+Spanns
+Spannung
+Spannungen
+Spannungsabfall
+Spannungsabweichung
+Spannungsabweichungen
+Spannungsamplitude
+Spannungsanschluss
+Spannungsanschlusses
+Spannungsanschlüsse
+Spannungsanschlüssen
+Spannungsausgang
+Spannungsausgangs
+Spannungsausgänge
+Spannungsausgängen
+Spannungsbereich
+Spannungseingang
+Spannungseingänge
+Spannungsfeld
+Spannungsfelder
+Spannungsfeldern
+Spannungsfelds
+Spannungsgewinn
+Spannungsmessung
+Spannungsmessungen
+Spannungspegeln
+Spannungspulse
+Spannungsregler
+Spannungsreglern
+Spannungsreglers
+Spannungsspitzen
+Spannungsteiler
+Spannungsteilung
+Spannungsverhältnis
+Spannungsverhältnisse
+Spannungsverhältnissen
+Spannungsverhältnisses
+Spannungsversorgung
+Spannungswert
+Spannungswerte
+Spannungswerten
+Spannungswertes
+Spannungswerts
+Spannungszuführung
+Spannweite
+Spannweiten
+Spans
+Spant
+Spanten
+Sparer
+Sparern
+Sparers
+Spargel
+Spargeln
+Sparpläne
+Sparplänen
+Sparprogramm
+Sparprogramms
+Sparre
+Sparren
+Sparsamkeit
+Sparta
+Spartakus
+Spass
+Spasses
+Spassetln
+Spatel
+Spateln
+Spaten
+Spatens
+Spatz
+Spatzes
+Spaß
+Spaßes
+Spaßmacher
+Spaßmachern
+Spaßmachers
+Spaßverderber
+Spaßverderbern
+Spaßvogel
+Spaßvogels
+Spaßvögel
+Spaßvögeln
+Specht
+Spechte
+Spechten
+Spechts
+Speck
+Spediteur
+Spediteurs
+Spedition
+Speditionen
+Speer
+Speere
+Speeren
+Speers
+Speerwurf
+Speiche
+Speichel
+Speichels
+Speichen
+Speicher
+Speicheranforderung
+Speicheranforderungen
+Speicherausbau
+Speicherbausteine
+Speicherbausteinen
+Speicherbedarf
+Speicherbedarfs
+Speicherbereich
+Speicherbereiche
+Speicherbereichen
+Speicherbereichs
+Speicherbereinigung
+Speicherbereinigungsverfahren
+Speicherbereinigungsverfahrens
+Speicherchip
+Speicherchips
+Speichereffizienz
+Speichererweiterung
+Speichererweiterungen
+Speicherfehler
+Speicherinhalt
+Speicherinhalten
+Speicherkapazität
+Speicherkapazitäten
+Speicherkarte
+Speicherkarten
+Speicherkartenfehler
+Speichermangel
+Speichermedium
+Speicherplatz
+Speicherplatzbedarf
+Speicherplatzes
+Speicherplatzverwaltung
+Speicherplätze
+Speicherplätzen
+Speichers
+Speicherschutz
+Speicherstelle
+Speicherstellen
+Speicherung
+Speicherungen
+Speicherverwaltung
+Speicherverwaltungsalgorithmen
+Speicherverwaltungssystem
+Speicherverwaltungssysteme
+Speicherverwaltungssystemen
+Speicherverwaltungssystems
+Speicherverwaltungsverfahren
+Speicherverwaltungsverfahrens
+Speicherzelle
+Speicherzellen
+Speis
+Speisung
+Speisungen
+Spektakel
+Spektakels
+Spektren
+Spektrum
+Spektrums
+Spekulant
+Spekulanten
+Spekulation
+Spekulationen
+Spender
+Spenderin
+Spenderinnen
+Spendern
+Spenders
+Spengler
+Spenglermeister
+Spenglermeistern
+Spenglermeisters
+Spenglern
+Sperber
+Sperbers
+Sperling
+Sperlinge
+Sperlingen
+Sperlings
+Sperma
+Spermas
+Sperrung
+Sperrungen
+Sperrvermerk
+Sperrvermerke
+Sperrvermerken
+Sperrvermerks
+Sperrwirkung
+Sperrwirkungen
+Spesen
+Spessart
+Spezerei
+Spezereien
+Spezereiware
+Spezereiwaren
+Spezi
+Spezialanwendung
+Spezialanwendungen
+Spezialfall
+Spezialfalles
+Spezialfalls
+Spezialfälle
+Spezialfällen
+Spezialgebiet
+Spezialgebiete
+Spezialgebieten
+Spezialgebietes
+Spezialgebiets
+Spezialisierung
+Spezialisierungen
+Spezialist
+Spezialisten
+Spezialistentum
+Spezialistentums
+Spezialistin
+Spezialistinnen
+Spezialität
+Spezialitäten
+Spezialsoftware
+Spezialverfahren
+Spezies
+Spezifikation
+Spezifikationen
+Spezifikationssprache
+Spezifikationssprachen
+Spezifikationstechnik
+Spezifikationstechniken
+Spezifizierung
+Sphinx
+Sphäre
+Sphären
+Spiegel
+Spiegelbild
+Spiegelbilder
+Spiegelbildern
+Spiegelbildes
+Spiegelschrift
+Spiegelschriften
+Spiegelung
+Spieglung
+Spiel
+Spielens
+Spieler
+Spielerei
+Spielereien
+Spielerin
+Spielerinnen
+Spielern
+Spielers
+Spiels
+Spieß
+Spieße
+Spießen
+Spießes
+Spike
+Spikes
+Spin
+Spinat
+Spind
+Spindel
+Spindeln
+Spinden
+Spindes
+Spinett
+Spinette
+Spinetten
+Spinetts
+Spinner
+Spinnerei
+Spinnereien
+Spinnerin
+Spinnerinnen
+Spinnern
+Spinners
+Spins
+Spion
+Spionage
+Spione
+Spionen
+Spionin
+Spioninnen
+Spions
+Spirale
+Spiralen
+Spiritismus
+Spiritist
+Spiritisten
+Spiritistin
+Spiritistinnen
+Spirituosen
+Spital
+Spitzel
+Spitzeln
+Spitzels
+Spitzenbelastung
+Spitzenbelastungen
+Spitzenbewertung
+Spitzenbewertungen
+Spitzenerfolg
+Spitzenerfolge
+Spitzenerfolgen
+Spitzenerfolgs
+Spitzengruppe
+Spitzengruppen
+Spitzenklasse
+Spitzenklassen
+Spitzenlast
+Spitzenlasten
+Spitzenleistung
+Spitzenleistungen
+Spitzenreiter
+Spitzenreiterin
+Spitzenreiterinnen
+Spitzenreitern
+Spitzenreiters
+Spitzfindigkeit
+Spitzfindigkeiten
+Spitzname
+Spitznamen
+Spitznamens
+Spitäler
+Spitälern
+Spleen
+Spleens
+Splint
+Splinte
+Splinten
+Splints
+Splitt
+Splitter
+Splittern
+Splitters
+Splitts
+Sponsor
+Sponsoren
+Spontaneität
+Spontanreaktion
+Spontanreaktionen
+Spooler
+Spooling
+Spore
+Sporen
+Sporn
+Sporns
+Sport
+Sports
+Spott
+Spotts
+Sprachbeschreibung
+Sprachbeschreibungen
+Sprachbestandteil
+Sprachbestandteile
+Sprachbestandteilen
+Sprachbestandteils
+Sprachdefinition
+Sprachdefinitionen
+Sprachdesign
+Sprachdesigns
+Sprache
+Spracheigenschaft
+Spracheigenschaften
+Sprachelement
+Sprachelemente
+Sprachelementen
+Sprachelementes
+Sprachelements
+Sprachen
+Spracherweiterung
+Spracherweiterungen
+Sprachfamilie
+Sprachfamilien
+Sprachgebrauch
+Sprachgebrauchs
+Sprachgefühl
+Sprachgefühle
+Sprachgefühlen
+Sprachgefühls
+Sprachkenntnis
+Sprachkenntnisse
+Sprachkenntnissen
+Sprachkern
+Sprachkonstrukt
+Sprachkonstrukte
+Sprachkonstrukten
+Sprachkonstrukts
+Sprachregelung
+Sprachregelungen
+Sprachrohr
+Sprachrohre
+Sprachrohren
+Sprachrohrs
+Sprachschatz
+Sprachschatzes
+Sprachumfang
+Sprachumfangs
+Sprachverhalten
+Sprachverhaltens
+Sprecher
+Sprecherin
+Sprecherinnen
+Sprechern
+Sprechers
+Sprechpause
+Sprechpausen
+Sprechprobe
+Sprechproben
+Sprechsilbe
+Sprechsilben
+Sprechstunde
+Sprechstunden
+Sprechweise
+Sprechweisen
+Spreizung
+Spreizungen
+Sprengung
+Spreu
+Sprichwort
+Sprichworts
+Sprichwörter
+Sprichwörtern
+Springer
+Springerin
+Springerinnen
+Springern
+Springers
+Sprint
+Sprinter
+Sprinterin
+Sprinterinnen
+Sprintern
+Sprinters
+Sprints
+Sprit
+Sprits
+Spritzkrug
+Spritzkrugs
+Spritzkrüge
+Spritzkrügen
+Spross
+Sprosse
+Sprossen
+Sprosses
+Spruch
+Spruchband
+Spruchbänder
+Spruchbändern
+Spruchkammer
+Spruchs
+Sprudel
+Sprung
+Sprungadresse
+Sprungadressen
+Sprungbefehl
+Sprungbefehls
+Sprunges
+Sprungs
+Sprungtabelle
+Sprungtabellen
+Sprungziel
+Sprungziele
+Sprungzielen
+Sprungziels
+Sprössling
+Sprösslinge
+Sprösslingen
+Sprösslings
+Sprüche
+Sprüchen
+Sprünge
+Sprüngen
+Spuk
+Spuks
+Spur
+Spuren
+Spurt
+Spurts
+Sputnik
+Sputniks
+Späher
+Späherin
+Späherinnen
+Spähern
+Spähers
+Späne
+Spänen
+Spärlichkeit
+Spätling
+Spätlinge
+Spätlingen
+Spätlings
+Spätzle
+Späße
+Späßen
+Spöttelei
+Spötteleien
+Spötter
+Spötterei
+Spöttereien
+Spötterin
+Spötterinnen
+Spöttern
+Spötters
+Spürnase
+Spürnasen
+Spürsinn
+Spürsinne
+Spürsinnen
+Spürsinns
+Sri
+St
+StGB
+Staat
+Staate
+Staaten
+Staates
+Staatlichkeit
+Staats
+Stab
+Stabes
+Stabilisierung
+Stabilität
+Stabilitäten
+Stabreim
+Stabreime
+Stabreimen
+Stabreims
+Stabs
+Stachel
+Stacheln
+Stachels
+Stachus
+Stack
+Stacks
+Stadel
+Stadeln
+Stadels
+Stadion
+Stadions
+Stadium
+Stadt
+Stadtgebiet
+Stadtgebiete
+Stadtgebieten
+Stadtgebiets
+Stadtplan
+Stadtpläne
+Stadtplänen
+Stadtrand
+Stadtviertel
+Stadtvierteln
+Stadtviertels
+Stafette
+Stafetten
+Staffage
+Staffagen
+Staffel
+Staffelei
+Staffeleien
+Staffelung
+Staffelungen
+Stafflung
+Stafflungen
+Stagnation
+Stahl
+Stahls
+Stalin
+Stalingrad
+Stalinisierung
+Stalinismus
+Stalins
+Stall
+Stalls
+Stallung
+Stallungen
+Stamm
+Stammbaum
+Stammbaumes
+Stammbaums
+Stammbäume
+Stammbäumen
+Stammdatum
+Stammheim
+Stamms
+Stammwort
+Stammworts
+Stammwörter
+Stammwörtern
+Stamperl
+Stamperln
+Stamperls
+Standard
+Standardabweichung
+Standardabweichungen
+Standardausrüstung
+Standardausstattung
+Standardeinstellung
+Standardeinstellungen
+Standardformat
+Standardisierung
+Standardlösung
+Standardlösungen
+Standardmodell
+Standardmodelle
+Standardmodellen
+Standardmodells
+Standards
+Standardsituation
+Standardsituationen
+Standardsoftware
+Standardverfahren
+Standardverfahrens
+Standardwerk
+Standardwerke
+Standardwerken
+Standardwerkes
+Standardwerks
+Standardwert
+Standardwerte
+Standardwerten
+Standardwertes
+Standardwerts
+Standarte
+Standarten
+Standbein
+Standbild
+Standbilder
+Standbildern
+Standbildes
+Stande
+Standes
+Standesbewusstsein
+Standesbewusstseins
+Standesdünkel
+Standesdünkels
+Standesehre
+Standesehren
+Standesunterschied
+Standesunterschiede
+Standesunterschieden
+Standesunterschiedes
+Standfestigkeit
+Standhaftigkeit
+Standleitung
+Standleitungen
+Standort
+Standortbestimmung
+Standorte
+Standorten
+Standorts
+Standpauke
+Standpauken
+Standpunkt
+Standpunkte
+Standpunkten
+Standpunkts
+Stanford
+Stange
+Stangen
+Stanniol
+Stanniols
+Stapel
+Stapels
+Stapelung
+Stapelverarbeitung
+Star
+Stare
+Staren
+Starnberger
+Starrsinn
+Starrsinne
+Starrsinnen
+Starrsinns
+Stars
+Start
+Startadresse
+Startbit
+Startbits
+Starter
+Startern
+Starters
+Startpunkt
+Startpunkte
+Startpunkten
+Startpunktes
+Startpunkts
+Starts
+Starttermin
+Startwert
+Statement
+Statements
+Statik
+Statiker
+Statikern
+Statikers
+Station
+Stationen
+Statist
+Statisten
+Statistenrolle
+Statistenrollen
+Statistik
+Statistiken
+Statistiker
+Statistikern
+Statistikers
+Statistin
+Stativ
+Stative
+Stativen
+Stativs
+Statthalter
+Statthaltern
+Statthalters
+Stattlichkeit
+Statue
+Statuen
+Statur
+Staturen
+Status
+Statusanzeige
+Statusanzeigen
+Statusbit
+Statusbits
+Statusmeldung
+Statusmeldungen
+Statusoutput
+Statussymbol
+Statussymbole
+Statussymbolen
+Statussymbols
+Statuszeile
+Statuszeilen
+Statut
+Statuten
+Statuts
+Staub
+Staubs
+Staude
+Stauden
+Stauer
+Stauern
+Staufer
+Staupe
+Staus
+Stauung
+Stauungen
+Stavanger
+Stck
+Std
+Steak
+Steaks
+Steckdose
+Steckdosen
+Steckenpferd
+Steckenpferde
+Steckenpferden
+Steckenpferdes
+Steckens
+Stecker
+Steckeradapter
+Steckeranordnung
+Steckeranschluss
+Steckeranschlusses
+Steckeranschlussraum
+Steckeranschlüsse
+Steckeranschlüssen
+Steckerauslegung
+Steckerbelegung
+Steckerbuchsen
+Steckerdichtung
+Steckerdichtungen
+Steckereinsatz
+Steckereinsätze
+Steckerführung
+Steckergehäuse
+Steckerhalter
+Steckerhalterung
+Steckerhülse
+Steckerkombination
+Steckerkombinationen
+Steckerkupplung
+Steckerkupplungen
+Steckerleiste
+Steckerleisten
+Steckerlinie
+Steckern
+Steckerpin
+Steckerpins
+Steckerplan
+Steckerplatine
+Steckerplatten
+Steckers
+Steckerschutz
+Steckersystem
+Steckerteil
+Steckertyp
+Steckkarte
+Steckkarten
+Steckkontakt
+Steckkontakte
+Steckkontakten
+Steckkontakts
+Steckkräfte
+Steckkräften
+Steckling
+Stecklinge
+Stecklingen
+Stecklings
+Stecknadel
+Stecknadeln
+Steckplatz
+Steckplätze
+Steckverbinder
+Steckverbindern
+Steckverbinders
+Steckverbindung
+Steckverbindungen
+Steckzyklen
+Stefan
+Stefans
+Steffi
+Steffis
+Steg
+Steganographie
+Stege
+Stegen
+Stegreif
+Stegreifs
+Stegs
+Stehaufmännchen
+Stehaufmännchens
+Steher
+Stehern
+Stehers
+Stehhöhe
+Stehvermögen
+Stehvermögens
+Steiermark
+Steifheit
+Steifigkeit
+Steiger
+Steigern
+Steigers
+Steigerung
+Steigerungen
+Steigerungsform
+Steigerungsformen
+Steigerungsgrad
+Steigerungsgrade
+Steigerungsgraden
+Steigerungsgrades
+Steigerungsgrads
+Steigerungsrate
+Steigerungsraten
+Steigerungswert
+Steigerungswerte
+Steigerungswerten
+Steigerungswertes
+Steigung
+Steigungen
+Steilheit
+Stein
+Steine
+Steinen
+Steinigung
+Steinigungen
+Steins
+Steinway
+Steinways
+Steiß
+Steiße
+Steißen
+Steißes
+Stellage
+Stellagen
+Stelldichein
+Stelldicheins
+Stellenwert
+Stellenzahl
+Stellglied
+Stellglieder
+Stellgröße
+Stellgrößen
+Stelligkeit
+Stelligkeiten
+Stellmöglichkeit
+Stellmöglichkeiten
+Stellplatz
+Stellplätze
+Stellplätzen
+Stellung
+Stellungen
+Stellungnahme
+Stellungnahmen
+Stellvertreter
+Stellvertreterin
+Stellvertreterinnen
+Stellvertretern
+Stellvertreters
+Stellvertretung
+Stellvertretungen
+Stempel
+Stempels
+Stephan
+Stephans
+Stephanstag
+Sterblichkeit
+Stereo
+Stereofonie
+Stereofonien
+Stereophonie
+Stereotyp
+Stereotype
+Stereotypen
+Stereotyps
+Sterilisation
+Sterilisationen
+Sterilisierung
+Sterilisierungen
+Sterilität
+Sterling
+Sternstunde
+Sternstunden
+Stethoskop
+Stethoskope
+Stethoskopen
+Stethoskops
+Stetigkeit
+Stettin
+Steuer
+Steuerbord
+Steuerbordes
+Steuerbyte
+Steuerbytes
+Steuercode
+Steuercodes
+Steuerfile
+Steuerfiles
+Steuerflag
+Steuerflags
+Steuerfähigkeit
+Steuerknüppel
+Steuerknüppeln
+Steuerknüppels
+Steuermann
+Steuermanns
+Steuermänner
+Steuern
+Steuersoftware
+Steuerung
+Steuerungen
+Steuerzeichen
+Steuerzeichens
+Steve
+Stevens
+Steves
+Steward
+Stewardess
+Stewardessen
+Stewards
+Stewart
+Stewarts
+Stich
+Stiche
+Stichel
+Stichelei
+Sticheleien
+Stichels
+Stichen
+Stichhaltigkeit
+Stichling
+Stichlingen
+Stichprobe
+Stichproben
+Stichpunkt
+Stichpunkte
+Stichpunkten
+Stichpunktes
+Stichs
+Stichtag
+Stichtage
+Stichtagen
+Stichtags
+Stichwort
+Stichworte
+Stichworten
+Stichwortes
+Stichworts
+Stichwunde
+Stichwunden
+Stichwörter
+Sticker
+Stickerei
+Stickereien
+Stickerin
+Stickerinnen
+Stickern
+Stickers
+Stiefel
+Stiege
+Stiegen
+Stiel
+Stiele
+Stielen
+Stiels
+Stier
+Stift
+Stifter
+Stifterin
+Stifterinnen
+Stiftern
+Stifters
+Stiftes
+Stifts
+Stigma
+Stil
+Stilart
+Stilarten
+Stilblüte
+Stilblüten
+Stile
+Stilen
+Stilett
+Stilette
+Stiletten
+Stiletts
+Stilgefühl
+Stilgefühle
+Stilgefühlen
+Stilgefühls
+Stilistik
+Stilistiken
+Stilkunde
+Stillleben
+Stilllebens
+Stilllegung
+Stilllegungen
+Stillsetzen
+Stillstand
+Stillstandes
+Stillstands
+Stillung
+Stillungen
+Stilmittel
+Stils
+Stilübung
+Stimmabgabe
+Stimmer
+Stimmern
+Stimmers
+Stimmlage
+Stimmlagen
+Stimmung
+Stimmungen
+Stimmungslage
+Stimmungslagen
+Stimmungsmache
+Stimmungspegel
+Stimmungsumschwung
+Stimmungsumschwungs
+Stimulation
+Stimulationen
+Stipendiat
+Stipendiaten
+Stipendien
+Stipendium
+Stipendiums
+Stippvisite
+Stippvisiten
+Stirn
+Stirne
+Stirnen
+Stirnrunzeln
+Stirnseite
+Stirnseiten
+Stirnwände
+Stirnwänden
+Stock
+Stockerl
+Stockerln
+Stockerls
+Stocks
+Stockung
+Stockungen
+Stoff
+Stoffe
+Stoffel
+Stoffels
+Stoffen
+Stoffes
+Stoffs
+Stoffwechsel
+Stoffwechseln
+Stoffwechsels
+Stoiker
+Stoikern
+Stoikers
+Stola
+Stollen
+Stollens
+Stolperer
+Stoltenberg
+Stoltenbergs
+Stonehenge
+Stopbit
+Stopbits
+Stopfung
+Stopfungen
+Stoppel
+Stoppeln
+Stoppelzieher
+Stoppelziehern
+Stoppelziehers
+Stoppuhr
+Stoppuhren
+Storch
+Storchs
+Stornierung
+Storno
+Stotterer
+Stotterern
+Stotterers
+Stoß
+Stoßes
+Stoßvorgang
+Stoßvorgangs
+Stoßvorgänge
+Stoßvorgängen
+Strahl
+Strahls
+Strand
+Strandes
+Strands
+Strang
+Strangs
+Strapaze
+Strapazen
+Strass
+Stratege
+Strategen
+Strategie
+Strategien
+Strategieprogramm
+Strategieänderung
+Stratosphäre
+Strauch
+Strauchs
+Strauss
+Strauß
+Strauße
+Straußes
+Strawinsky
+Strawinskys
+Straßburg
+Straße
+Straßen
+Streber
+Strebern
+Strebers
+Strebertum
+Strebsamkeit
+Strebung
+Streckung
+Streich
+Streicher
+Streichern
+Streichholz
+Streichholzes
+Streichhölzer
+Streichung
+Streichungen
+Streif
+Streifens
+Streifqqlicht
+Streifqqlichter
+Streifqqlichtern
+Streifqqlichts
+Streifzug
+Streifzugs
+Streifzüge
+Streifzügen
+Streik
+Streikes
+Streiks
+Streit
+Streiter
+Streiterin
+Streiterinnen
+Streitern
+Streiters
+Streitfall
+Streitfalls
+Streitfrage
+Streitfragen
+Streitfälle
+Streitfällen
+Streitigkeit
+Streitigkeiten
+Streits
+Streitschrift
+Streitschriften
+Streitsucht
+Streitwert
+Streitwerte
+Streitwerten
+Streitwerts
+Stresemann
+Stresemanns
+Stress
+Stresses
+Streubreite
+Streubreiten
+Streubüchse
+Streubüchsen
+Streueffekt
+Streueffekte
+Streueffekten
+Streueffektes
+Streueffekts
+Streuung
+Streuungen
+Streuwinkel
+Streuwinkeln
+Streuwinkels
+Strich
+Striche
+Strichen
+Strichs
+Strick
+Strickmuster
+Stricks
+Striegel
+Striegels
+Striezel
+Striezeln
+Striezels
+Striktheit
+Stringdecodierung
+Stringeinträge
+Stringeinträgen
+Stringvariable
+Stringvariablen
+Stringzuweisung
+Stringzuweisungen
+Stringüberprüfung
+Stringüberprüfungen
+Strizzi
+Strizzis
+Stroh
+Strohfeuer
+Strohhalm
+Strohhalme
+Strohhalmen
+Strohhalms
+Strohmann
+Strohmänner
+Strohmännern
+Strohs
+Strolch
+Strolche
+Strolchen
+Strolchs
+Strom
+Stromabnehmer
+Stromabnehmern
+Stromabnehmers
+Stromabschaltung
+Stromabschaltungen
+Stromabsenkung
+Stromadapter
+Stromanschlüssen
+Stromaufnahme
+Stromaufnahmekurven
+Stromaufnahmemessung
+Stromaufnahmen
+Stromausfall
+Stromausfalls
+Stromausfallzeiten
+Stromausfälle
+Stromausfällen
+Stromausgang
+Stromausgangs
+Stromausgänge
+Stromausgängen
+Strombedarf
+Strombegrenzung
+Strombelastung
+Stromboli
+Stromeingang
+Stromeingangs
+Stromeingänge
+Stromeingängen
+Stromeinspeiseadapter
+Stromeinspeisungseinheit
+Stromeinspeisungseinheiten
+Stromeinspeisungsstellen
+Stromentnahme
+Stromerzeuger
+Stromerzeugern
+Stromerzeugers
+Stromes
+Stromfrequenzen
+Stromgewinnung
+Stromknappheit
+Stromkreis
+Stromkreise
+Stromkreisen
+Stromkreises
+Stromlauf
+Stromlaufplan
+Stromlaufplans
+Stromlaufpläne
+Stromlaufs
+Stromleiter
+Stromleitern
+Stromleiters
+Stromlinie
+Stromlinien
+Stromläufe
+Stromläufen
+Strommesser
+Strommessern
+Strommessers
+Strommessstelle
+Strommessung
+Strommessungen
+Strommesswiderstand
+Strommesswiderstandes
+Strommesswiderständen
+Stromnetz
+Stromnetze
+Stromnetzen
+Stromnetzes
+Stromquelle
+Stromquellen
+Stromreduzierung
+Stromregelkarten
+Stromreglerkarte
+Stromreglerkarten
+Stromreserve
+Stromreservierung
+Stromrichter
+Stromrichtern
+Stromrichters
+Stroms
+Stromschiene
+Stromschienen
+Stromschlag
+Stromschlags
+Stromschleife
+Stromschleifen
+Stromschläge
+Stromschlägen
+Stromschnelle
+Stromschnellen
+Stromschnittstelle
+Stromsignal
+Stromsimulation
+Stromsimulationen
+Stromsituation
+Stromsituationen
+Stromspannung
+Stromspannungen
+Stromstoß
+Stromstoßes
+Stromstärken
+Stromstöße
+Stromstößen
+Stromunterbrecher
+Stromunterbrechern
+Stromunterbrechers
+Stromverbrauch
+Stromverbrauches
+Stromverbrauchs
+Stromvers
+Stromversetzung
+Stromversorgung
+Stromversorgungen
+Stromversorgungseingang
+Stromversorgungskabel
+Stromversorgungsoption
+Stromversorgungsoptionen
+Stromversorgungsspannung
+Stromversorgungsteil
+Stromwandler
+Stromwandlern
+Stromwandlers
+Stromwandlungsmodul
+Stromwender
+Stromwendern
+Stromwenders
+Stromzufuhr
+Stromzuführung
+Stromzunahme
+Stromzähler
+Stromzählers
+Stromänderung
+Stromüberwachung
+Strophe
+Strophen
+Strudel
+Strudeln
+Strudels
+Struktur
+Strukturbaum
+Strukturbaumes
+Strukturbaums
+Strukturbäume
+Strukturbäumen
+Strukturelement
+Strukturelemente
+Strukturelementen
+Strukturelementes
+Strukturelements
+Strukturen
+Strukturiertheit
+Strukturierung
+Strukturkomponente
+Strukturkomponenten
+Strukturkrise
+Strukturkrisen
+Strukturmaßnahme
+Strukturmaßnahmen
+Strukturmerkmal
+Strukturmerkmale
+Strukturmerkmalen
+Strukturmerkmals
+Strukturproblem
+Strukturprobleme
+Strukturproblemen
+Strukturproblems
+Strukturtiefe
+Strukturtiefen
+Strukturverbesserung
+Strukturveränderung
+Strukturveränderungen
+Strukturwandlung
+Strumpf
+Strumpfs
+Strunk
+Strunks
+Strychnin
+Strychnins
+Sträfqqling
+Sträfqqlinge
+Sträfqqlingen
+Sträfqqlings
+Strähne
+Strähnen
+Strände
+Stränden
+Stränge
+Strängen
+Sträucher
+Sträuchern
+Strömung
+Strömungen
+Strümpfe
+Strümpfen
+Stube
+Stuben
+Stuck
+Stuckateur
+Stuckateure
+Stuckateurs
+Stucks
+Student
+Studenten
+Studentenschaft
+Studentenschaften
+Studentin
+Studentinnen
+Studie
+Studien
+Studienanfänger
+Studienaufenthalt
+Studienbeginn
+Studienberatung
+Studiendauer
+Studiendirektor
+Studiendirektoren
+Studiendirektorin
+Studiendirektorinnen
+Studiendirektors
+Studienförderung
+Studienführer
+Studiengang
+Studiengangs
+Studiengänge
+Studiengängen
+Studienjahr
+Studienjahre
+Studienjahren
+Studienjahrs
+Studienplan
+Studienplans
+Studienpläne
+Studienplänen
+Studienplätze
+Studienplätzen
+Studienrat
+Studienreform
+Studienreise
+Studienreisen
+Studienräte
+Studienräten
+Studienrätin
+Studienrätinnen
+Studienzeit
+Studienziel
+Studienziele
+Studienzielen
+Studienzieles
+Studienziels
+Studienzwecke
+Studienzwecken
+Studierzimmer
+Studierzimmern
+Studierzimmers
+Studio
+Studium
+Studiums
+Stufe
+Stufen
+Stufenfolge
+Stufenfolgen
+Stufenfunktion
+Stufenfunktionen
+Stufenleiter
+Stufenleitern
+Stufenplan
+Stuhl
+Stuhle
+Stulle
+Stullen
+Stulpe
+Stulpen
+Stummel
+Stummeln
+Stummels
+Stumpfheit
+Stumpfsinn
+Stumpfsinns
+Stunde
+Stunden
+Stundengeschwindigkeit
+Stundenkilometer
+Stundenkilometern
+Stundenkilometers
+Stundenlohn
+Stundenlohns
+Stundenlöhne
+Stundenlöhnen
+Stundenplan
+Stundenplans
+Stundenpläne
+Stundenplänen
+Stundenzeiger
+Stundenzeigern
+Stundenzeigers
+Stundung
+Stunk
+Stunks
+Sturm
+Sturmes
+Sturms
+Sturz
+Sturzes
+Stuss
+Stusses
+Stute
+Stuten
+Stuttgart
+Stuttgarts
+Stutzer
+Stutzern
+Stäbe
+Stäben
+Städtchen
+Städtchens
+Städte
+Städten
+Städter
+Städterin
+Städterinnen
+Städtern
+Städters
+Ställe
+Ställen
+Stämme
+Stämmen
+Ständchen
+Ständchens
+Stände
+Ständen
+Ständer
+Ständern
+Ständers
+Stängel
+Stängeln
+Stängels
+Stänker
+Stänkerei
+Stänkereien
+Stänkers
+Stärkegrad
+Stärkung
+Stärkungen
+Stätte
+Stätten
+Stöcke
+Stöcken
+Stöcklein
+Stöpsel
+Stöpseln
+Stöpsels
+Stör
+Störanfälligkeit
+Störbarkeit
+Störenfried
+Störenfriede
+Störenfrieden
+Störenfriedes
+Störenfrieds
+Störer
+Störfaktor
+Störfaktoren
+Störfall
+Störfalls
+Störfälle
+Störfällen
+Störmeldung
+Störmeldungen
+Störpegel
+Störquelle
+Störquellen
+Störrischkeit
+Störs
+Störstelle
+Störstellen
+Störunempfindlichkeit
+Störung
+Störungen
+Störungsanzeige
+Störungsanzeigen
+Störungsfunktion
+Störungsfunktionen
+Störungsmeldung
+Störungsmeldungen
+Störunterdrückung
+Stöße
+Stößel
+Stößeln
+Stößen
+Stübchen
+Stübchens
+Stück
+Stückchen
+Stückchens
+Stücke
+Stückelung
+Stückelungen
+Stücken
+Stückes
+Stückgut
+Stückguts
+Stückgüter
+Stückgütern
+Stückliste
+Stücklisten
+Stücklohn
+Stücklohns
+Stücklöhne
+Stücklöhnen
+Stückpreis
+Stückpreise
+Stückpreisen
+Stückpreises
+Stücks
+Stückwerk
+Stückwerks
+Stückzahl
+Stückzahlen
+Stühle
+Stühlen
+Stümper
+Stümperei
+Stümperin
+Stümperinnen
+Stümpern
+Stümpers
+Stündchen
+Stündchens
+Stündlein
+Stündleins
+Stürmer
+Stürmern
+Stürmers
+Stützung
+Subjekt
+Subjekte
+Subjekten
+Subjektivismus
+Subjektivität
+Subjekts
+Subkultur
+Submission
+Submissionen
+Subsidiarität
+Subsidiaritätsprinzip
+Subsidiaritätsprinzips
+Substantialisierung
+Substantialisierungen
+Substantiv
+Substantive
+Substantiven
+Substantivs
+Substanz
+Substanzen
+Substanzverlust
+Substanzverlustes
+Substitut
+Substitute
+Substituten
+Substitutes
+Substitution
+Substitutionen
+Substitutionsergebnis
+Substitutionsergebnisse
+Substitutionsergebnissen
+Substitutionsergebnisses
+Substituts
+Substrat
+Substrate
+Substraten
+Substrates
+Substrats
+Subsumtion
+Subsystem
+Subsysteme
+Subsystemen
+Subsystems
+Subtraktion
+Subtraktionen
+Subvention
+Subventionen
+Subventionierung
+Subventionierungen
+Suchaktion
+Suchaktionen
+Suchanzeige
+Suchanzeigen
+Sucharbeit
+Suchard
+Suchbefehl
+Suchbefehle
+Suchbefehlen
+Suchbefehls
+Suchbohrung
+Suchdienst
+Suchdienste
+Suchdiensten
+Suchdienstes
+Sucher
+Sucherin
+Sucherinnen
+Suchern
+Suchers
+Suchgerät
+Suchgeräte
+Suchgeräten
+Suchgerätes
+Suchgeräts
+Suchkartei
+Suchkarteien
+Suchlauf
+Suchlaufs
+Suchläufe
+Suchläufen
+Suchmaschine
+Suchmaschinen
+Suchvorgang
+Suchwerkzeug
+Suchwerkzeuge
+Suchwerkzeugen
+Suchwerkzeugs
+Suchwort
+Suchworten
+Suchwörter
+Sud
+Sudan
+Sudelei
+Sudeleien
+Suez
+Suezkanal
+Suezkanals
+Suezkanalzone
+Suffix
+Suffixe
+Suffixen
+Suffixes
+Suggestion
+Suggestionen
+Suggestionsbedürfnis
+Suggestionsbedürfnisse
+Suggestionsbedürfnissen
+Suggestionsbedürfnisses
+Suggestivfrage
+Suggestivfragen
+Suggestivität
+Suhrkamp
+Suite
+Suiten
+Sultan
+Sultane
+Sultanen
+Sultanin
+Sultanine
+Sultaninen
+Sultaninnen
+Sultans
+Sumatra
+Sumerer
+Summand
+Summanden
+Summe
+Summen
+Summenbeschränkung
+Summenwert
+Summenwerts
+Summer
+Summern
+Summierung
+Sumpf
+Sumpfes
+Sumpfs
+Superiorität
+Superklasse
+Superklassen
+Superlativ
+Superlative
+Superlativen
+Superlativs
+Suppe
+Suppen
+Support
+Supports
+Supraleitung
+Suprema
+Supremum
+Supremums
+Surfbrett
+Surrealismus
+Surrealist
+Surrealisten
+Susanne
+Susannes
+Sushi
+Sussex
+Swimmingpool
+Swing
+Sydney
+Sylphe
+Sylphen
+Sylphide
+Sylphiden
+Sylt
+Symbiose
+Symbiosen
+Symbol
+Symbolcharakter
+Symbole
+Symbolen
+Symbolik
+Symbolist
+Symbolisten
+Symbols
+Symbolwirkung
+Symbolwirkungen
+Symmetrie
+Symmetrieebene
+Symmetrieebenen
+Symmetrien
+Sympathie
+Sympathien
+Sympathisant
+Sympathisanten
+Symphonie
+Symphonien
+Symposien
+Symposium
+Symptom
+Symptome
+Symptomen
+Symptoms
+Synagoge
+Synagogen
+Synapse
+Synapsen
+Synchronimpuls
+Synchronimpulse
+Synchronimpulsen
+Synchronimpulses
+Synchronisation
+Synchronisationsloch
+Synchronisationsprobleme
+Synchronisationssignal
+Synchronisationszeichen
+Synchronisierlöcher
+Synchronisierschalter
+Synchronlocherkennung
+Synchronlöchern
+Synchronschalter
+Synchronschalterkette
+Synchronzähler
+Syndikalismus
+Syndikat
+Syndikate
+Syndikaten
+Syndikats
+Syndikus
+Synergie
+Synergien
+Synode
+Synoden
+Synonym
+Synonyms
+Syntax
+Syntaxbaum
+Syntaxbaumes
+Syntaxbaums
+Syntaxbäume
+Syntaxbäumen
+Syntaxfehler
+Syntaxfehlern
+Syntaxfehlers
+Synthese
+Synthesen
+Synthesizer
+Synthesizern
+Synthesizers
+Syphilis
+Syrer
+Syrien
+Syrier
+Syrierin
+Syrierinnen
+Syriern
+Syriers
+System
+Systemanalyse
+Systemanalysen
+Systemarchitektur
+Systematik
+Systematiken
+Systemaufruf
+Systemaufrufs
+Systembibliothek
+Systeme
+Systemen
+Systementwicklung
+Systemerweiterung
+Systemfamilie
+Systemfamilien
+Systemfunktion
+Systemfunktionen
+Systemfunktionsaufruf
+Systemfunktionsaufrufe
+Systemfunktionsaufrufen
+Systemfunktionsaufrufs
+Systemlösung
+Systemlösungen
+Systempflege
+Systemprogrammierung
+Systemreset
+Systems
+Systemsoftware
+Systemspeicher
+Systemspeichers
+Systemstart
+Systemstecker
+Systemsteckerbelegung
+Systemsteckerbelegungen
+Systemsteckers
+Systemsteckverbinder
+Systemsteckverbinders
+Systemtakt
+Systemtechnik
+Systemtheoretiker
+Systemtheoretikern
+Systemtheoretikers
+Szenarien
+Szenario
+Szenarios
+Szenarium
+Szenariums
+Szene
+Szenen
+Szenerie
+Szenerien
+Säbel
+Säbeln
+Säbels
+Säckchen
+Säckchens
+Säcke
+Säcken
+Säfte
+Säften
+Säkulum
+Säle
+Sälen
+Sänfte
+Sänften
+Sänger
+Sängerin
+Sängerinnen
+Sängern
+Sängers
+Särge
+Särgen
+Sättel
+Sätteln
+Sättigung
+Sättigungsgrad
+Sättigungspunkt
+Sättigungsverhalten
+Sättigungsverhaltens
+Sätzchen
+Sätzchens
+Sätze
+Sätzen
+Säuberung
+Säuberungen
+Säuberungsaktion
+Säuberungsaktionen
+Säue
+Säuen
+Säufer
+Säufern
+Säufers
+Säugetier
+Säugetiere
+Säugetieren
+Säugetiers
+Säugling
+Säuglinge
+Säuglingen
+Säuglings
+Säule
+Säulen
+Säume
+Säumen
+Säure
+Säuren
+Séparée
+Séparées
+Söldling
+Söldlinge
+Söldlingen
+Söldlings
+Söldner
+Söldnern
+Söller
+Söllern
+Söllers
+Süchte
+Süchten
+Süd
+Südamerika
+Südamerikas
+Südaustralien
+Süddeutschland
+Süddeutschlands
+Süden
+Südens
+Südeuropa
+Südfinnland
+Südfrankreich
+Südfrankreichs
+Südfrüchte
+Südfrüchten
+Südhälfte
+Südhälften
+Süditalien
+Südjemen
+Südkoreaner
+Südkoreanern
+Südkoreas
+Südpol
+Südpols
+Südrhodesien
+Südrussland
+Südsachalin
+Südschwarzwald
+Südsteiermark
+Südwest
+Südwesten
+Südwestfalen
+Sühne
+Sühnung
+Sühnungen
+Sülze
+Sülzen
+Sümmchen
+Sümmchens
+Sümpfe
+Sümpfen
+Sünde
+Sünden
+Sünder
+Sünderin
+Sünderinnen
+Sündern
+Sünders
+TByte
+TCP
+TFT
+TV
+TWA
+Tabak
+Tabaks
+Tabelle
+Tabellen
+Tabelleneintrag
+Tabelleneintrages
+Tabelleneintrags
+Tabelleneinträge
+Tabelleneinträgen
+Tabellenende
+Tabellenkalkulation
+Tabellenkalkulationen
+Tabellensammlung
+Tablett
+Tablette
+Tabletten
+Tabletts
+Tabubereich
+Tabubereiche
+Tabubereichen
+Tabubereichs
+Tabulator
+Tabulatore
+Tabulatoren
+Tabulatorposition
+Tabulatorpositionen
+Tabulators
+Tabulatorzeile
+Tabulatorzeilen
+Tachometer
+Tachometern
+Tachometers
+Tadel
+Tadler
+Tadlern
+Tadlers
+Tafel
+Tafelberg
+Taft
+Tafts
+Tag
+Tagbau
+Tagbauten
+Tagblatt
+Tagblatts
+Tagblätter
+Tagblättern
+Tagebuch
+Tagebuchs
+Tagebücher
+Tagereise
+Tagereisen
+Tages
+Tagesanbruch
+Tagesanbrüche
+Tagesanbrüchen
+Tagesordnung
+Tagesordnungspunkt
+Tagesordnungspunkte
+Tagesordnungspunkten
+Tagesordnungspunktes
+Tagespolitik
+Tagespreis
+Tagespreise
+Tagespreisen
+Tagespreises
+Tagesschau
+Tagesthema
+Tageszeit
+Tageszeiten
+Tageszeitung
+Tageszeitungen
+Tagewerk
+Tagewerke
+Tagewerken
+Tagewerks
+Tags
+Tagung
+Tagungen
+Tagungshotel
+Tagungsort
+Tagungsstätte
+Tagungsstätten
+Tagungsthema
+Taifun
+Taifune
+Taifunen
+Taifuns
+Taiga
+Taille
+Taillen
+Taillenweite
+Tailrekursionseliminierung
+Tailrekursionseliminierungen
+Taiwan
+Taiwanesen
+Takel
+Takelage
+Takelagen
+Takels
+Takelung
+Takelungen
+Takelwerk
+Takelwerke
+Takelwerken
+Takelwerks
+Taklung
+Taklungen
+Takt
+Taktausgang
+Takteingang
+Taktes
+Taktfrequenz
+Taktik
+Taktiken
+Taktiker
+Taktikerin
+Taktikerinnen
+Taktikern
+Taktikers
+Taktimpulse
+Taktlosigkeit
+Taktlosigkeiten
+Taktpin
+Taktpins
+Taktrate
+Takts
+Taktsignal
+Taktverzögerungszeit
+Tal
+Talent
+Talente
+Talenten
+Talentes
+Talents
+Taler
+Tales
+Talg
+Talges
+Talgs
+Talisman
+Talismane
+Talismanen
+Talismans
+Talk
+Talks
+Talkshow
+Talkshows
+Talkum
+Talkums
+Talleyrand
+Talleyrands
+Talon
+Talons
+Tals
+Tamburin
+Tamburine
+Tamburinen
+Tamburins
+Tamilen
+Tampon
+Tampons
+Tamtam
+Tamtams
+Tand
+Tandem
+Tandems
+Tands
+Tang
+Tange
+Tangen
+Tangens
+Tangente
+Tangenten
+Tanger
+Tango
+Tangos
+Tangs
+Tank
+Tanker
+Tankern
+Tankers
+Tanks
+Tanne
+Tannen
+Tantal
+Tantals
+Tante
+Tanten
+Tantieme
+Tantiemen
+Tanz
+Tanzes
+Tapet
+Tapete
+Tapeten
+Tapetenwechsel
+Tapetenwechsels
+Tapferkeit
+Tapferkeiten
+Tapisserieware
+Tapisseriewaren
+Tara
+Tarantel
+Tarantella
+Taranteln
+Tarif
+Tarife
+Tarifen
+Tarifes
+Tarifs
+Tarnkappe
+Tarnkappen
+Tarnung
+Tarnungen
+Tarski
+Tarzan
+Tarzans
+Tasche
+Taschen
+Taschkent
+Task
+Taskfunktion
+Taskfunktionen
+Tasse
+Tassen
+Tastatur
+Tastaturbelegung
+Tastaturblech
+Tastaturen
+Tastaturfolie
+Tastaturfolien
+Tastaturplatine
+Tastaturtreiber
+Tastaturtreibers
+Tastenbelegung
+Tastenbelegungen
+Tastencode
+Tastencodes
+Tastendecodierung
+Tastendioden
+Tastendruck
+Tastendrucke
+Tastendrucken
+Tastendrucks
+Tastendrücke
+Tastendrücken
+Tastenfolie
+Tastenfolien
+Tastenleiterplatte
+Tastenplatine
+Tastentimer
+Taster
+Tastern
+Tasters
+Tatar
+Tataren
+Tatars
+Tatbestand
+Tatbestands
+Tatbestände
+Tatbeständen
+Tateinheit
+Tateinheiten
+Tatendrang
+Tatort
+Tatorte
+Tatorten
+Tatortes
+Tatorts
+Tatsache
+Tatsachen
+Tatsachenbericht
+Tatsachenberichte
+Tatsachenberichten
+Tatsachenberichts
+Tatsachenverschleierung
+Tattoo
+Tattoos
+Tatverdacht
+Tatze
+Tatzen
+Tau
+Taubheit
+Taucher
+Taucherei
+Taucherin
+Taucherinnen
+Tauchern
+Tauchers
+Taugenichts
+Taugenichtse
+Taugenichtsen
+Taugenichtses
+Tauglichkeit
+Taumel
+Taumels
+Taunus
+Taupunkt
+Taupunkte
+Taupunkten
+Taupunktes
+Taupunkts
+Tausch
+Tausches
+Tausende
+Tausenden
+Tausender
+Tausendern
+Tausendsasa
+Tausendsasas
+Tautologie
+Tautologien
+Tauziehen
+Taxameter
+Taxametern
+Taxameters
+Taxator
+Taxatoren
+Taxators
+Taxen
+Taxi
+Taxifahrer
+Taxifahrern
+Taxifahrers
+Taxis
+Taxistand
+Taxistands
+Taylorismus
+TeX
+Team
+Teamarbeit
+Teams
+Teamwork
+Technik
+Techniken
+Technikentwicklung
+Techniker
+Technikerin
+Technikerinnen
+Technikern
+Technikers
+Technikerschule
+Technikerschulen
+Technikum
+Technikums
+Technisierung
+Technokrat
+Technokraten
+Technokratie
+Technologe
+Technologen
+Technologie
+Technologien
+Technologieträger
+Technophilie
+Techtelmechtel
+Techtelmechteln
+Teckel
+Teckeln
+Teckels
+Teddybär
+Teddybären
+Teebüchse
+Teebüchsen
+Teenager
+Teenagern
+Teenagers
+Teer
+Teers
+Tegernsee
+Teheran
+Teich
+Teiche
+Teichen
+Teichs
+Teig
+Teigs
+Teil
+Teilabbildung
+Teilabbildungen
+Teilaspekt
+Teilaspekte
+Teilaspekten
+Teilaspektes
+Teilaspekts
+Teilaufgabe
+Teilaufgaben
+Teilausdruck
+Teilausdrucks
+Teilausdrücke
+Teilausdrücken
+Teilbarkeit
+Teilbaum
+Teilbaumes
+Teilbaums
+Teilbereich
+Teilbereiche
+Teilbereichen
+Teilbereichs
+Teilbetrag
+Teilbetrages
+Teilbetrags
+Teilbeträge
+Teilbeträgen
+Teilbus
+Teilbusabschnitt
+Teilbusabschnitte
+Teilbusabschnitten
+Teilbusabschnitts
+Teilbusbereich
+Teilbusbereiche
+Teilbusbereichen
+Teilbusbereichs
+Teilbusleitung
+Teilbusleitungen
+Teilbusse
+Teilbussen
+Teilbusses
+Teilbusübersicht
+Teilbusübersichten
+Teilbäume
+Teilbäumen
+Teilchen
+Teilchens
+Teildisziplin
+Teildisziplinen
+Teiler
+Teilerfolg
+Teilerfolge
+Teilerfolgen
+Teilerfolgs
+Teilers
+Teiles
+Teilgebiete
+Teilgebieten
+Teilgruppe
+Teilgruppen
+Teilhaber
+Teilhaberin
+Teilhaberinnen
+Teilhabern
+Teilhabers
+Teilhaberschaft
+Teilhaberschaften
+Teilkomponente
+Teilkomponenten
+Teilmenge
+Teilmengen
+Teilmengenrelation
+Teilmengenrelationen
+Teilnahme
+Teilnahmebedingung
+Teilnahmebedingungen
+Teilnahmslosigkeit
+Teilnehmer
+Teilnehmerin
+Teilnehmerinnen
+Teilnehmerkreis
+Teilnehmerkreise
+Teilnehmerkreisen
+Teilnehmerkreises
+Teilnehmern
+Teilnehmerquote
+Teilnehmerquoten
+Teilnehmers
+Teilnehmerverzeichnis
+Teilnehmerverzeichnisse
+Teilnehmerverzeichnissen
+Teilnehmerverzeichnisses
+Teilnehmerzahl
+Teils
+Teilsprache
+Teilsprachen
+Teilsprachenbeziehung
+Teilsprachenbeziehungen
+Teilstrich
+Teilstriche
+Teilstrichen
+Teilstriches
+Teilstück
+Teilsystem
+Teilsysteme
+Teilsystemen
+Teilsystems
+Teilung
+Teilungen
+Teilzustände
+Teilzuständen
+Teint
+Teints
+Tel
+Telefax
+Telefon
+Telefonanruf
+Telefonanrufe
+Telefonanrufen
+Telefonanrufs
+Telefonanschluss
+Telefonanschlusses
+Telefonanschlüsse
+Telefonanschlüssen
+Telefonapparat
+Telefonapparate
+Telefonapparaten
+Telefonapparats
+Telefonat
+Telefonate
+Telefonaten
+Telefonats
+Telefonbuch
+Telefonbücher
+Telefonbüchern
+Telefone
+Telefonen
+Telefongebühr
+Telefongebühren
+Telefongesellschaft
+Telefongesellschaften
+Telefongespräch
+Telefongespräche
+Telefongesprächen
+Telefongespräches
+Telefongesprächs
+Telefonhörer
+Telefonhörern
+Telefonhörers
+Telefonleitung
+Telefonleitungen
+Telefonliste
+Telefonlisten
+Telefonnetz
+Telefonnummer
+Telefonnummern
+Telefons
+Telefonverbindung
+Telefonverbindungen
+Telegraf
+Telegrafen
+Telegrafie
+Telegramm
+Telegramme
+Telegrammen
+Telegramms
+Telegraph
+Telegraphen
+Telegraphie
+Telegraphist
+Telegraphisten
+Telegraphistin
+Telegraphistinnen
+Telekom
+Telekommunikation
+Telekopierer
+Telepathie
+Telepathien
+Teleskop
+Teleskope
+Teleskopen
+Teleskops
+Television
+Telex
+Teller
+Tellern
+Tellers
+Tempel
+Tempeln
+Tempels
+Temperament
+Temperamente
+Temperamenten
+Temperamentes
+Temperaments
+Temperatur
+Temperaturen
+Temperenzler
+Temperenzlern
+Temperenzlers
+Tempo
+Tempos
+Tempus
+Tendenz
+Tendenzen
+Tendenzwende
+Tendenzwenden
+Teneriffa
+Teneriffas
+Tenne
+Tennen
+Tennessee
+Tennis
+Tenor
+Tenors
+Tensor
+Tensorgleichung
+Tensorgleichungen
+Tensors
+Tenöre
+Tenören
+Teppich
+Teppiche
+Teppichen
+Teppichs
+Term
+Termdarstellung
+Termdarstellungen
+Terme
+Termen
+Termersetzung
+Termersetzungen
+Termersetzungsregel
+Termersetzungsregeln
+Termersetzungssystem
+Termersetzungssysteme
+Termersetzungssystemen
+Termersetzungssystems
+Termin
+Terminabsprache
+Terminabsprachen
+Terminal
+Terminalbildschirm
+Terminalbildschirms
+Terminaleingang
+Terminalleitung
+Terminalleitungen
+Terminalmode
+Terminals
+Terminaltreiber
+Terminaltreibers
+Terminauftrag
+Terminauftrages
+Terminauftrags
+Terminaufträge
+Terminaufträgen
+Terminbestellung
+Terminbestätigung
+Termine
+Termineinhaltung
+Terminen
+Terminfestsetzung
+Terminierung
+Terminierungsnachweis
+Terminierungsnachweise
+Terminierungsnachweisen
+Terminierungsnachweises
+Terminkalender
+Terminkalendern
+Terminkalenders
+Terminologie
+Terminologien
+Terminplan
+Terminplans
+Terminpläne
+Terminplänen
+Termins
+Terminschwierigkeit
+Terminschwierigkeiten
+Terminvorschlag
+Terminvorschlages
+Terminvorschlags
+Terminvorschläge
+Terminvorschlägen
+Terminzusage
+Terminzusagen
+Termite
+Termiten
+Terms
+Terpentin
+Terpentins
+Terrain
+Terrasse
+Terrassen
+Terrine
+Terrinen
+Territorien
+Territorium
+Territoriums
+Terror
+Terrors
+Terz
+Terzen
+Tesafilm
+Tessin
+Test
+Testament
+Testamente
+Testamenten
+Testaments
+Testaufbau
+Testaufbauten
+Testausdruck
+Testausdruckes
+Testausdrucks
+Testausgang
+Testbetrieb
+Testclip
+Testclips
+Testergebnis
+Testergebnisse
+Testergebnissen
+Testergebnisses
+Testfrage
+Testfragen
+Testlauf
+Testlaufs
+Testläufe
+Testläufen
+Testmethode
+Testmethoden
+Testmode
+Testmodes
+Testpattern
+Testpatterns
+Testpin
+Testpinadapter
+Testpinadapters
+Testpinplatine
+Testpinplatinen
+Testpins
+Testpinträger
+Testpinträgers
+Tests
+Testsoftware
+Testverfahren
+Testverfahrens
+Testzweck
+Testzwecke
+Testzwecken
+Testzweckes
+Testzwecks
+Teuerung
+Teuerungen
+Teufel
+Teufelei
+Teufeleien
+Teufeln
+Texas
+Text
+Textanfang
+Textanfangs
+Textanzeige
+Textanzeigen
+Textausschnitt
+Textausschnitte
+Textausschnitten
+Textausschnitts
+Textbaustein
+Textbausteine
+Textbausteinen
+Textbausteins
+Textbereich
+Textbereiche
+Textbereichen
+Textbereiches
+Textbereichs
+Textblock
+Textblockende
+Textblocks
+Textblöcke
+Textblöcken
+Textbuch
+Textbuchs
+Textbuffer
+Textbuffers
+Textbücher
+Textbüchern
+Textdarstellung
+Textdarstellungen
+Textdatei
+Texte
+Texteditor
+Texteditors
+Texteinfügung
+Texteinfügungen
+Texteingabe
+Texteingaben
+Texten
+Textende
+Textenden
+Textendes
+Texterfassung
+Textes
+Textfelder
+Textfile
+Textfiles
+Textil
+Textilien
+Textils
+Textinformation
+Textinformationen
+Textkorrektur
+Textkorrekturen
+Textlänge
+Textlängen
+Textmaterial
+Textmenge
+Textmengen
+Textposition
+Textpositionen
+Textprogramm
+Textprogramme
+Textprogrammen
+Textrand
+Textsalat
+Textseite
+Textseiten
+Textstelle
+Textstellen
+Textsystem
+Textsysteme
+Textsystemen
+Textsystems
+Textteil
+Textteile
+Textteilen
+Textteils
+Textumbruch
+Textur
+Texturen
+Textverarbeitung
+Textverarbeitungsprogramm
+Textverarbeitungsprogramme
+Textverarbeitungsprogrammen
+Textverarbeitungsprogramms
+Textverarbeitungssystem
+Textverarbeitungssysteme
+Textverarbeitungssystemen
+Textverarbeitungssystems
+Textvorlage
+Textvorlagen
+Textzeichen
+Textzeichens
+Textzeile
+Textzeilen
+Textänderung
+Textänderungen
+Thailand
+Thatcher
+Thatchers
+Theater
+Theatern
+Theaters
+Theke
+Theken
+Thema
+Themas
+Thematik
+Thematisierung
+Thematisierungen
+Themen
+Themenbereich
+Themenbereiche
+Themenbereichen
+Themenbereichs
+Themenkreis
+Themenkreise
+Themenkreisen
+Themenkreises
+Themistokles
+Theo
+Theodor
+Theodore
+Theodors
+Theologe
+Theologen
+Theologie
+Theorem
+Theoreme
+Theoremen
+Theorems
+Theoretiker
+Theoretikern
+Theoretikers
+Theoretisierung
+Theorie
+Theorien
+Theos
+Therapeut
+Therapeuten
+Therapeutik
+Therapie
+Therapien
+Theresa
+Theresas
+Therese
+Thereses
+Therme
+Thermen
+Thermik
+Thermodynamik
+Thesaurus
+These
+Thesen
+Thomas
+Thorax
+Thoraxe
+Thoraxen
+Thriller
+Thrombose
+Thrombosen
+Thron
+Throne
+Thronen
+Thrones
+Throns
+Thurgau
+Thymian
+Thymiane
+Thymianen
+Thymians
+Thyristor
+Thyristoren
+Thüringen
+Thüringer
+Thüringerin
+Thüringerinnen
+Thüringern
+Thüringers
+Tibet
+Tick
+Ticket
+Tickets
+Ticks
+Tiebreak
+Tiebreaks
+Tiefblick
+Tiefblicke
+Tiefblicken
+Tiefblicks
+Tiefgang
+Tiefgangs
+Tiefgänge
+Tiefgängen
+Tiefschlag
+Tiefschlags
+Tiefsinn
+Tiefsinns
+Tiefstand
+Tiefstands
+Tiefstände
+Tiefständen
+Tiegel
+Tiegeln
+Tier
+Tierchen
+Tierchens
+Tiere
+Tieren
+Tieres
+Tiers
+Tiger
+Tigerin
+Tigerinnen
+Tigern
+Tigers
+Tiki
+Tikis
+Tilde
+Tilden
+Tilgung
+Tilgungen
+Tilsit
+Tilsiter
+Tilsitern
+Tim
+Timing
+Timinglogik
+Timinglogiken
+Timingschema
+Timingsignal
+Timingsignale
+Timingsignalen
+Timingsignals
+Tims
+Tina
+Tinas
+Tinktur
+Tinkturen
+Tinte
+Tinten
+Tintenstrahldrucker
+Tipp
+Tippfehler
+Tippfehlern
+Tippfehlers
+Tipps
+Tirol
+Tiroler
+Tirolerin
+Tirolerinnen
+Tirolern
+Tirolers
+Tisch
+Tische
+Tischen
+Tisches
+Tischler
+Tischlerei
+Tischlereien
+Tischlern
+Tischlers
+Tischs
+Titan
+Titanen
+Titanic
+Titanin
+Titaninnen
+Titans
+Titel
+Titeln
+Titels
+Titelseite
+Titelseiten
+Titelzeile
+Titelzeilen
+Tito
+Titos
+Titulatur
+Titulaturen
+Titulierung
+Tivoli
+Toast
+Toaster
+Toasts
+Tobsucht
+Tobsuchtsanfall
+Tobsuchtsanfalls
+Tobsuchtsanfälle
+Tobsuchtsanfällen
+Tochter
+Tochterdatei
+Tochterdateien
+Tod
+Tode
+Todes
+Tods
+Tofu
+Tofus
+Tohuwabohu
+Toilette
+Toiletten
+Tokio
+Tokios
+Toleranz
+Toleranzbereich
+Toleranzbereiche
+Toleranzbereichen
+Toleranzbereichs
+Toleranzen
+Toleranzgrenze
+Toleranzgrenzen
+Toleranzschranke
+Toleranzschranken
+Toleranzwert
+Tollkühnheit
+Tollpatsch
+Tollpatsche
+Tollpatschen
+Tollpatsches
+Tollpatschs
+Tollwut
+Tomate
+Tomaten
+Tomatenketschup
+Tomatenketschups
+Tombola
+Tombolas
+Ton
+Tonalität
+Tone
+Tonen
+Tones
+Tonfall
+Tonfalls
+Tonnage
+Tonnagen
+Tonne
+Tonnen
+Tons
+Tonsur
+Tonsuren
+Top
+Topas
+Topase
+Topasen
+Topases
+Topdesign
+Topf
+Topfen
+Topfens
+Topografie
+Topografien
+Topographie
+Topographien
+Topologie
+Topp
+Tor
+Torchance
+Torchancen
+Tore
+Toren
+Torero
+Toreros
+Torf
+Torfs
+Torheit
+Tornado
+Tornados
+Tornister
+Tornistern
+Tornisters
+Torpedo
+Torpedos
+Tors
+Torschlusspanik
+Torso
+Torsos
+Torte
+Torten
+Tortur
+Torturen
+Torvalds
+Totalausfall
+Totalausfalls
+Totalausfälle
+Totalausfällen
+Totalisator
+Totalisatoren
+Totalschaden
+Totalschadens
+Totalverlust
+Totalzusammenbruch
+Totalzusammenbruches
+Totbereich
+Totbereiche
+Totbereichen
+Totbereichs
+Toto
+Totos
+Totzeit
+Touchscreen
+Touchscreens
+Toulouse
+Tour
+Touren
+Tourist
+Touristen
+Touristik
+Touristin
+Touristinnen
+Tournee
+Tourneen
+Toyota
+Trab
+Trabant
+Trabanten
+Traber
+Trabern
+Tracht
+Trachten
+Tradition
+Traditionen
+Trafalgar
+Trafik
+Trafiken
+Trafo
+Trafos
+Tragfähigkeit
+Tragik
+Tragiken
+Tragiker
+Tragikern
+Tragikers
+Tragikomödie
+Tragikomödien
+Tragkraft
+Tragkräfte
+Tragkräften
+Tragweite
+Tragweiten
+Tragwerk
+Tragwerke
+Tragwerken
+Tragwerks
+Tragöde
+Tragöden
+Tragödie
+Tragödien
+Tragödin
+Tragödinnen
+Trainer
+Trainern
+Training
+Trainings
+Trakt
+Traktat
+Traktate
+Traktaten
+Traktats
+Traktion
+Traktor
+Traktore
+Traktoren
+Traktors
+Tramper
+Tran
+Trance
+Trancen
+Tranche
+Tranchen
+Trane
+Tranen
+Trank
+Tranks
+Tranquilizer
+Trans
+Transaktion
+Transaktionen
+Transfer
+Transferrate
+Transferraten
+Transfers
+Transformation
+Transformationen
+Transformator
+Transformatoren
+Transformators
+Transfusion
+Transfusionen
+Transistor
+Transistoren
+Transistorkühlblech
+Transistormischer
+Transistormischers
+Transistors
+Transistorschalter
+Transistorvergleich
+Transitionssystem
+Transitionssysteme
+Transitionssystemen
+Transitionssystems
+Transitivität
+Transjordanien
+Transmission
+Transmissionen
+Transparentmode
+Transparenz
+Transpiration
+Transpirationen
+Transplantation
+Transplantationen
+Transport
+Transporte
+Transporten
+Transporter
+Transportern
+Transporters
+Transporteur
+Transporteure
+Transporteuren
+Transporteurs
+Transportierbarkeit
+Transports
+Transputer
+Transputers
+Transvaalrepublik
+Transzendenz
+Trapez
+Trapeze
+Trapezen
+Trapezes
+Trassant
+Trassanten
+Trassat
+Tratsch
+Tratte
+Tratten
+Traube
+Trauben
+Trauer
+Trauerspiel
+Trauerspiele
+Trauerspielen
+Trauerspiels
+Traufe
+Traufen
+Traulichkeit
+Traum
+Trauma
+Traumas
+Traumata
+Traumberuf
+Traumbild
+Traumbilder
+Traumbildern
+Traumbildes
+Traumes
+Traumresultat
+Traumresultate
+Traumresultaten
+Traumresultats
+Traums
+Traumwelt
+Traumwelten
+Traurigkeit
+Trauung
+Trauungen
+Trecker
+Treckern
+Treckers
+Treff
+Treffen
+Treffens
+Treffer
+Treffern
+Trefferquote
+Trefferquoten
+Treffers
+Treffpunkt
+Treffpunkte
+Treffpunkten
+Treffpunktes
+Treffpunkts
+Treffqqlichkeit
+Treffs
+Treffsicherheit
+Treiber
+Treiberbaustein
+Treiberbausteine
+Treiberkarte
+Treiberkarten
+Treibern
+Treiberprogramm
+Treiberprogramme
+Treiberprogrammen
+Treiberprogramms
+Treibers
+Treibersoftware
+Treibertransistoren
+Trenchcoat
+Trend
+Trendlinie
+Trendlinien
+Trendmeldung
+Trendmeldungen
+Trends
+Trendwende
+Trendwenden
+Trennfläche
+Trennflächen
+Trennmittel
+Trennprogramm
+Trennprogramme
+Trennprogrammen
+Trennprogramms
+Trennschicht
+Trennschichten
+Trennstrich
+Trenntrafo
+Trenntrafos
+Trennung
+Trennungslinie
+Trennungslinien
+Trennwand
+Trennwände
+Trennwänden
+Trennzeichen
+Trennzeichens
+Trense
+Trensen
+Treppe
+Treppen
+Tresen
+Tresens
+Tresor
+Tresore
+Tresoren
+Tresors
+Treter
+Tretern
+Treters
+Tretmine
+Tretminen
+Tretmühle
+Tretmühlen
+Treulosigkeit
+Treulosigkeiten
+Trias
+Tribun
+Tribunal
+Tribunale
+Tribunalen
+Tribunals
+Tribune
+Tribunen
+Tribuns
+Tribut
+Tribute
+Tributen
+Tributs
+Tribüne
+Tribünen
+Trichter
+Trichtern
+Trichters
+Trick
+Trickfilmsoftware
+Tricks
+Trieb
+Triebe
+Trieben
+Triebfeder
+Triebfedern
+Triebkräfte
+Triebkräften
+Triebs
+Triest
+Triggerbarkeit
+Triggereingang
+Triggereingangs
+Triggereingänge
+Triggereingängen
+Triggerkanal
+Triggermagnet
+Triggerquellen
+Triggerzeitpunkt
+Trigonometrie
+Trikot
+Trikotage
+Trikotagen
+Trikots
+Triller
+Trillers
+Trillion
+Trillionen
+Trilogie
+Trilogien
+Trinkgeld
+Trinkgelder
+Trinkgeldern
+Trinkglas
+Trinkglases
+Trinkgläser
+Trinkgläsern
+Trinkspruch
+Trinkspruchs
+Trinksprüche
+Trinksprüchen
+Trio
+Triole
+Triolen
+Trios
+Trip
+Tripel
+Tripeln
+Tripels
+Tripolis
+Tripper
+Trippern
+Trippers
+Trips
+Tritt
+Trittbrett
+Trittbretter
+Trittbrettern
+Trittbretts
+Tritte
+Tritten
+Tritts
+Triumph
+Triumphe
+Triumphen
+Triumphs
+Triumphzug
+Triumphzuges
+Triumphzugs
+Triumphzüge
+Triumphzügen
+Triumvirat
+Trivialität
+Trivialitäten
+Trockenheit
+Troja
+Trojaner
+Trojanerin
+Trojanerinnen
+Trojanern
+Trojaners
+Trommel
+Trommler
+Trommlern
+Trommlers
+Trompeter
+Trompetern
+Tropen
+Trophäe
+Trophäen
+Tross
+Trosse
+Trossen
+Trosses
+Trost
+Trostlosigkeit
+Trostpflaster
+Trostpreis
+Trostpreise
+Trostpreisen
+Trostpreises
+Trosts
+Trott
+Trottel
+Trotteln
+Trottels
+Trottoir
+Trottoire
+Trottoirs
+Trotts
+Trotz
+Trotzki
+Trotzkis
+Trotzkopf
+Trotzkopfs
+Trotzköpfe
+Trotzköpfen
+Trotzreaktion
+Trotzreaktionen
+Troubadour
+Troubadoure
+Troubadouren
+Troubadours
+Trubel
+Trubels
+Trudeau
+Trudeaus
+Trugbild
+Trugbilder
+Trugbildern
+Trugbildes
+Trugschluss
+Trugschlusses
+Trugschlüsse
+Trugschlüssen
+Truhe
+Truhen
+Trum
+Trumpf
+Trumpfs
+Trums
+Trunk
+Truppe
+Truppen
+Trächtigkeit
+Träger
+Trägerin
+Trägerinnen
+Trägern
+Trägers
+Trägerschaft
+Trägerverein
+Trägheit
+Tränkung
+Träume
+Träumen
+Träumer
+Träumerei
+Träumereien
+Träumerin
+Träumerinnen
+Träumern
+Träumers
+Trödelei
+Trödeleien
+Trödler
+Trödlern
+Tröster
+Trösterin
+Trösterinnen
+Tröstern
+Trösters
+Tröstung
+Tröstungen
+Trübheit
+Trübsal
+Trübseligkeit
+Trübsinn
+Trübsinns
+Trübung
+Trübungen
+Trüffel
+Trüffeln
+Trüffels
+Trümmer
+Trümmerfeld
+Trümmerfelder
+Trümmerfeldern
+Trümmerfelds
+Trümmerhaufen
+Trümmerhaufens
+Trümmern
+Trümpfe
+Trümpfen
+Tschaikowsky
+Tschaikowskys
+Tscheche
+Tschechen
+Tschechin
+Tschechinnen
+Tschechoslowakei
+Tschernobyl
+Tschiang
+Tschiangs
+Tschick
+Tschicks
+Tschusch
+Tschuschen
+Tube
+Tuben
+Tuberkel
+Tuberkels
+Tuberkulose
+Tuberkulosen
+Tuch
+Tuchent
+Tuchenten
+Tuches
+Tuchfühlung
+Tuchfühlungen
+Tuff
+Tuffe
+Tuffen
+Tuffs
+Tugend
+Tugenden
+Tulpe
+Tulpen
+Tummelplatz
+Tummelplatzes
+Tummelplätze
+Tummelplätzen
+Tumor
+Tumore
+Tumoren
+Tumors
+Tumult
+Tumulte
+Tumulten
+Tumults
+Tumultuant
+Tumultuanten
+Tun
+Tundra
+Tunesien
+Tunfisch
+Tunfische
+Tunfischen
+Tunfisches
+Tunfischs
+Tunichtgut
+Tunichtguts
+Tunis
+Tunnel
+Tunneln
+Tunnels
+Tunnelwahrscheinlichkeit
+Tunnelwahrscheinlichkeiten
+Tuns
+Tupel
+Tupelbildung
+Tupeln
+Tupels
+Turban
+Turbane
+Turbanen
+Turbans
+Turbine
+Turbinen
+Turing
+Turingmaschine
+Turingmaschinen
+Turm
+Turme
+Turmes
+Turms
+Turner
+Turnerin
+Turnerinnen
+Turnern
+Turners
+Turnier
+Turniere
+Turnieren
+Turniers
+Turnus
+Turteltaube
+Turteltauben
+Tusch
+Tutor
+Tutoren
+Tutors
+Tutu
+Tutus
+Tycoon
+Typ
+Typanalyse
+Typanalysen
+Typdeklaration
+Typdeklarationen
+Type
+Typen
+Typenangabe
+Typenangaben
+Typenbezeichnung
+Typenbezeichnungen
+Typenschild
+Typenschilder
+Typenschildern
+Typenschildes
+Typenschilds
+Typfehler
+Typfehlern
+Typfehlers
+Typinferenz
+Typinformation
+Typinformationen
+Typisierung
+Typisierungskonzepte
+Typklasse
+Typklassen
+Typnummer
+Typograf
+Typografen
+Typografie
+Typografien
+Typograph
+Typographen
+Typographie
+Typographien
+Typologie
+Typs
+Typschema
+Typschemas
+Typschemata
+Typtest
+Typtests
+Typus
+Typverband
+Typverbands
+Typverbände
+Typverbänden
+Tyrann
+Tyrannei
+Tyrannen
+Tyrannin
+Tyranninnen
+TÄGE
+TÄGEN
+TÜV
+Täfelung
+Täfelungen
+Täler
+Tälern
+Tändelei
+Tändeleien
+Tänze
+Tänzen
+Tänzer
+Tänzerin
+Tänzerinnen
+Tänzern
+Tänzers
+Tässchen
+Tässchens
+Täter
+Täterin
+Täterinnen
+Tätern
+Täters
+Täterschaft
+Tätigkeit
+Tätigkeiten
+Tätigkeitsbereich
+Tätigkeitsbereiche
+Tätigkeitsbereichen
+Tätigkeitsbereiches
+Tätigkeitsbereichs
+Tätigkeitsfeld
+Tätigkeitsfelder
+Tätigkeitsfeldern
+Tätigkeitsfeldes
+Tätigung
+Tätigungen
+Tätigwerden
+Tätlichkeit
+Tätlichkeiten
+Tätowierung
+Tätowierungen
+Täuberich
+Täuberiche
+Täuberichen
+Täuberichs
+Täufqqling
+Täufqqlinge
+Täufqqlingen
+Täufqqlings
+Täuschmanöver
+Täuschung
+Täuschungen
+Täuschungsmanöver
+Täuschungsmanövern
+Täuschungsmanövers
+Täuschungsversuch
+Täuschungsversuche
+Täuschungsversuchen
+Täuschungsversuchs
+Töchter
+Töchterchen
+Töchterchens
+Töchtern
+Tölpel
+Tölpelei
+Tölpeleien
+Tölpeln
+Tölpels
+Tönung
+Tönungen
+Töpfe
+Töpfen
+Töpfer
+Töpferei
+Töpfern
+Töpfers
+Törin
+Törinnen
+Tötung
+Tötungen
+Tübingen
+Tücher
+Tüchern
+Tüchtigkeit
+Tüftler
+Tüftlergeist
+Tüftlern
+Tüftlers
+Tüll
+Tülls
+Tümmler
+Tümpel
+Tümpeln
+Tümpels
+Tüpfel
+Tüpfelchen
+Tüpfelchens
+Tüpfels
+Tür
+Türchen
+Türchens
+Türe
+Türen
+Türgriff
+Türgriffe
+Türgriffen
+Türgriffs
+Türke
+Türkei
+Türken
+Türkin
+Türkinnen
+Türkis
+Türkise
+Türkisen
+Türkises
+Türklinke
+Türklinken
+Türmchen
+Türmchens
+Türpfosten
+Türpfostens
+Türrahmen
+Türrahmens
+Türschild
+Türschilder
+Türschildern
+Türschilds
+Türschnalle
+Türschnallen
+Tüte
+Tüten
+UART
+UFO
+UKW
+UN
+UNESCO
+UNICEF
+UNITA
+UNIX
+UNO
+URL
+URLS
+US
+USA
+USB
+USS
+UStG
+UdSSR
+Ufer
+Ufern
+Ufers
+Uganda
+Uhr
+Uhren
+Uhrzeigersinn
+Uhrzeit
+Uhu
+Ukas
+Ukasse
+Ukassen
+Ukasses
+Ukraine
+Ulan
+Ulk
+Ulks
+Ulla
+Ullas
+Ulm
+Ulme
+Ulmen
+Ulrich
+Ulrichs
+Ultimaten
+Ultimatum
+Ultimo
+Ultimos
+Ultraschallinterface
+Umarbeitung
+Umarbeitungen
+Umarmung
+Umarmungen
+Umbau
+Umbaus
+Umbenennung
+Umbenennungen
+Umbesetzung
+Umbildung
+Umbildungen
+Umbruch
+Umbrüche
+Umbrüchen
+Umbuchung
+Umdrehung
+Umdrehungen
+Umdruck
+Umdrucks
+Umdrücke
+Umdrücken
+Umeichung
+Umerziehung
+Umerziehungen
+Umfang
+Umfangs
+Umfangsweg
+Umfassung
+Umfeld
+Umfeldes
+Umformatierung
+Umformer
+Umformern
+Umformers
+Umformulierung
+Umformulierungen
+Umformung
+Umformungen
+Umformungsregel
+Umformungsregeln
+Umfrage
+Umfrageergebnis
+Umfrageergebnisse
+Umfrageergebnissen
+Umfrageergebnisses
+Umfrageforschung
+Umfragen
+Umfänge
+Umfängen
+Umgang
+Umgangs
+Umgangsform
+Umgangsformen
+Umgangssprache
+Umgebung
+Umgebungen
+Umgebungsbedingung
+Umgebungsbedingungen
+Umgebungsvariable
+Umgebungsvariablen
+Umgehung
+Umgestaltung
+Umgruppierung
+Umgruppierungen
+Umgänglichkeit
+Umhang
+Umhüllung
+Umhüllungen
+Uminterpretation
+Uminterpretationen
+Umkehr
+Umkehrpunkt
+Umkehrpunkte
+Umkehrpunkten
+Umkehrpunktes
+Umkehrpunkts
+Umkehrung
+Umkehrungen
+Umklammerung
+Umklammerungen
+Umkreis
+Umkreise
+Umkreisen
+Umkreises
+Umlage
+Umlagen
+Umlagerung
+Umlagerungen
+Umlauf
+Umlaufs
+Umlaut
+Umlauts
+Umlegung
+Umleitung
+Umläufe
+Umläufen
+Umnachtung
+Umnachtungen
+Umorganisation
+Umorganisationen
+Umorientierung
+Umpolung
+Umpolungen
+Umprogrammierens
+Umrandung
+Umrandungen
+Umrechnung
+Umrechnungen
+Umriss
+Umrisse
+Umrissen
+Umrisses
+Umrisslinie
+Umrisslinien
+Umrisszeichnung
+Umrisszeichnungen
+Umrüstung
+Umsatz
+Umsatzes
+Umschalter
+Umschaltern
+Umschalters
+Umschaltung
+Umschaltzeit
+Umschau
+Umschichtung
+Umschichtungen
+Umschiffung
+Umschiffungen
+Umschlag
+Umschlags
+Umschlingung
+Umschläge
+Umschlägen
+Umschreibung
+Umschreibungen
+Umschrift
+Umschriften
+Umschuldung
+Umschuldungen
+Umschulung
+Umschulungen
+Umschweif
+Umschweifen
+Umschwung
+Umschwungs
+Umschwünge
+Umschwüngen
+Umsetzbarkeit
+Umsetzung
+Umsetzungsprozess
+Umsetzungsprozesse
+Umsetzungsprozessen
+Umsetzungsprozesses
+Umsetzungsschritt
+Umsetzungsschritte
+Umsetzungsschritten
+Umsetzungsschritts
+Umsichgreifen
+Umsicht
+Umstand
+Umstandes
+Umstands
+Umstandswort
+Umstandsworte
+Umstandsworten
+Umstandswortes
+Umstandsworts
+Umstellung
+Umstieg
+Umstrukturierung
+Umsturz
+Umstände
+Umständen
+Umständlichkeit
+Umstürzler
+Umstürzlerin
+Umstürzlerinnen
+Umstürzlern
+Umstürzlers
+Umsätze
+Umsätzen
+Umtausch
+Umtauschs
+Umtrieb
+Umtriebe
+Umtrieben
+Umtriebs
+Umverteilung
+Umverteilungen
+Umwandelung
+Umwandelungen
+Umwandlung
+Umwandlungen
+Umwandlungsschritt
+Umwandlungsschritte
+Umwandlungsschritten
+Umwandlungsschrittes
+Umwandlungsschritts
+Umweg
+Umwege
+Umwegen
+Umwegs
+Umwelt
+Umwertung
+Umwohner
+Umwohnern
+Umwohners
+Umwälzung
+Umwälzungen
+Umzingelung
+Umzug
+Umzugs
+Umzäunung
+Umzüge
+Umzügen
+Unabhängigkeit
+Unachtsamkeit
+Unangepasstheit
+Unangepasstheiten
+Unannehmlichkeit
+Unannehmlichkeiten
+Unanständigkeit
+Unanständigkeiten
+Unart
+Unarten
+Unaufqqfälligkeit
+Unaufrichtigkeit
+Unaufrichtigkeiten
+Unausgeglichenheit
+Unbedeutsamkeit
+Unbegreifqqlichkeit
+Unbegrenztheit
+Unbehagen
+Unbehagens
+Unbeherrschtheit
+Unbekanntheit
+Unbekümmertheit
+Unbeliebtheit
+Unberechenbarkeit
+Unberührtheit
+Unbescheidenheit
+Unbescholtenheit
+Unbeschwertheit
+Unbestechlichkeit
+Unbestimmtheit
+Unbestimmtheiten
+Unbeständigkeit
+Unbilden
+Unbildung
+Unbotmäßigkeit
+Unbrauchbarkeit
+Undank
+Undankbarkeit
+Undankes
+Undanks
+Underdog
+Unding
+Undinge
+Undingen
+Undinger
+Undingern
+Undings
+Unduldsamkeit
+Unebenheit
+Unebenheiten
+Unehelichkeit
+Unehre
+Unehren
+Unehrlichkeit
+Uneinigkeit
+Unempfindlichkeit
+Unempfindlichkeiten
+Unendlichkeit
+Unentbehrlichkeit
+Unenthaltsamkeit
+Unentschiedenheit
+Unentschlossenheit
+Unerfahrenheit
+Unerheblichkeit
+Unermüdlichkeit
+Unerschrockenheit
+Unersetzbarkeit
+Unfairness
+Unfall
+Unfalls
+Unfehlbarkeit
+Unfolgsamkeit
+Unfreiheit
+Unfreiheiten
+Unfreundlichkeit
+Unfreundlichkeiten
+Unfriede
+Unfruchtbarkeit
+Unfug
+Unfugs
+Unfähigkeit
+Unfähigkeiten
+Unfälle
+Unfällen
+Unförmigkeit
+Ungar
+Ungarin
+Ungarinnen
+Ungarn
+Ungebundenheit
+Ungebührlichkeit
+Ungeduld
+Ungefälligkeit
+Ungefälligkeiten
+Ungeheuer
+Ungeheuerlichkeit
+Ungeheuerlichkeiten
+Ungeheuern
+Ungeheuers
+Ungenauigkeit
+Ungenauigkeiten
+Ungenügsamkeit
+Ungerechtigkeit
+Ungerechtigkeiten
+Ungereimtheit
+Ungereimtheiten
+Ungeschick
+Ungeschicklichkeit
+Ungeschicklichkeiten
+Ungeschicks
+Ungesetzlichkeit
+Ungesetzlichkeiten
+Ungetüm
+Ungetüme
+Ungetümen
+Ungetümes
+Ungewissheit
+Ungewissheiten
+Ungewöhnlichkeit
+Ungewöhnlichkeiten
+Ungeziefer
+Ungeziefern
+Ungeziefers
+Ungezogenheit
+Ungezogenheiten
+Ungezwungenheit
+Unglauben
+Unglaubens
+Ungleichheit
+Ungleichmäßigkeit
+Ungleichmäßigkeiten
+Ungleichung
+Ungleichungen
+Ungleichzeitigkeit
+Unglück
+Unglücke
+Unglücken
+Unglücks
+Unglücksfall
+Unglücksfalles
+Unglücksfalls
+Unglücksfälle
+Unglücksfällen
+Unglücksstätte
+Unglücksstätten
+Unglückstag
+Unglückstage
+Unglückstagen
+Unglückstags
+Ungnade
+Ungnaden
+Ungunst
+Ungunsten
+Ungültigkeit
+Unheil
+Unheiles
+Unheils
+Unheilstifter
+Unheilstifterin
+Unheilstifterinnen
+Unheilstiftern
+Unheilstifters
+Unhold
+Unholds
+Unhöfqqlichkeit
+Unhöfqqlichkeiten
+Uni
+Unicode
+Unifikation
+Unifikationsverfahren
+Unifikator
+Unifikatoren
+Unifizierbarkeit
+Uniform
+Uniformen
+Uniformierung
+Unikum
+Unikums
+Unilever
+Union
+Unionen
+Universalist
+Universalisten
+Universalität
+Universalwerkzeug
+Universalwerkzeuge
+Universalwerkzeugen
+Universalwerkzeugs
+Universität
+Universitäten
+Universitätsdozent
+Universitätsprofessor
+Universitätsprofessoren
+Universitätsprofessorin
+Universitätsprofessorinnen
+Universitätsprofessors
+Universum
+Universums
+Unix
+Unke
+Unken
+Unkenntlichkeit
+Unkenntnis
+Unkenntnisse
+Unkenntnissen
+Unkeuschheit
+Unklare
+Unklaren
+Unklares
+Unklarheit
+Unklarheiten
+Unklugheit
+Unklugheiten
+Unkorrigierbarkeit
+Unkosten
+Unkraut
+Unkrautes
+Unkräuter
+Unkräutern
+Unleserlichkeit
+Unlust
+Unlustgefühl
+Unlustgefühle
+Unlustgefühles
+Unlustgefühls
+Unlösbarkeit
+Unmasse
+Unmassen
+Unmenge
+Unmengen
+Unmensch
+Unmenschen
+Unmenschlichkeit
+Unmenschlichkeiten
+Unmittelbarkeit
+Unmut
+Unmuts
+Unmännlichkeit
+Unmäßigkeit
+Unmäßigkeiten
+Unmöglichkeit
+Unmöglichkeiten
+Unmündigkeit
+Unnachgiebigkeit
+Unnatürlichkeit
+Unordentlichkeit
+Unordnung
+Unordnungen
+Unparteilichkeit
+Unpässlichkeit
+Unpässlichkeiten
+Unpünktlichkeit
+Unrast
+Unrat
+Unrats
+Unrecht
+Unrechte
+Unrechten
+Unrechts
+Unredlichkeit
+Unregelmäßigkeit
+Unregelmäßigkeiten
+Unreinheit
+Unrichtigkeit
+Unruh
+Unruhe
+Unruhen
+Unruhestifter
+Unruhestifterin
+Unruhestifterinnen
+Unruhestiftern
+Unruhestifters
+Unsachlichkeit
+Unschicklichkeit
+Unschicklichkeiten
+Unschlüssigkeit
+Unschuldsmiene
+Unschuldsmienen
+Unschärfe
+Unschärferelation
+Unsegen
+Unsegens
+Unselbstständigkeit
+Unselbstständigkeiten
+Unselbständigkeit
+Unsicherheit
+Unsicherheiten
+Unsicherheitsfaktor
+Unsicherheitsfaktoren
+Unsicherheitsfaktors
+Unsichtbarkeit
+Unsinn
+Unsinnes
+Unsinns
+Unsinnswort
+Unsinnsworte
+Unsinnsworten
+Unsinnsworts
+Unsitte
+Unsitten
+Unsittlichkeit
+Unsittlichkeiten
+Unsterblichkeit
+Unstetigkeit
+Unstimmigkeit
+Unstimmigkeiten
+Unstrukturiertheit
+Unsumme
+Unsummen
+Untat
+Untaten
+Untauglichkeit
+Unterabschnitt
+Unterabschnitte
+Unterabschnitten
+Unterabschnittes
+Unterabschnitts
+Unterabteilung
+Unterabteilungen
+Unterart
+Unterarten
+Unterbau
+Unterbaus
+Unterbelichtung
+Unterbewertung
+Unterbewusstsein
+Unterbewusstseins
+Unterbindung
+Unterbrecher
+Unterbrechern
+Unterbrechung
+Unterbrechungen
+Unterbringung
+Unterbringungen
+Unterdeck
+Unterdecke
+Unterdecken
+Unterdecks
+Unterdruck
+Unterdrucks
+Unterdrücker
+Unterdrückern
+Unterdrückung
+Unterdrückungen
+Untereinheit
+Untereinheiten
+Unterernährung
+Unterernährungen
+Unterfamilie
+Unterfamilien
+Unterführung
+Untergang
+Unterganges
+Untergangs
+Untergattung
+Untergattungen
+Untergeschoß
+Untergeschoße
+Untergeschoßen
+Untergeschoßes
+Untergliederung
+Untergrenze
+Untergrenzen
+Untergrund
+Untergrundes
+Untergrunds
+Untergruppe
+Untergruppen
+Untergründe
+Untergründen
+Untergänge
+Untergängen
+Unterhalt
+Unterhalter
+Unterhaltern
+Unterhalters
+Unterhaltes
+Unterhalts
+Unterhaltung
+Unterhandlung
+Unterhandlungen
+Unterhaus
+Unterhauses
+Unterhemd
+Unterhemde
+Unterhemden
+Unterhemdes
+Unterhemds
+Unterholz
+Unterholzes
+Unterhose
+Unterhosen
+Unterhändler
+Unterhändlerin
+Unterhändlerinnen
+Unterhändlern
+Unterhändlers
+Unterhäuser
+Unterhäusern
+Unterjacke
+Unterjacken
+Unterjochung
+Unterkante
+Unterkanten
+Unterkiefer
+Unterkiefern
+Unterkiefers
+Unterklasse
+Unterklassen
+Unterkleid
+Unterkleider
+Unterkleidern
+Unterkleidung
+Unterkleidungen
+Unterkunft
+Unterkühlung
+Unterkünfte
+Unterkünften
+Unterlage
+Unterlagen
+Unterlass
+Unterlassung
+Unterlassungen
+Unterlassungssünde
+Unterlassungssünden
+Unterleib
+Unterleiber
+Unterleibern
+Unterlippe
+Unterlippen
+Untermalung
+Untermenge
+Untermengen
+Unternehmen
+Unternehmens
+Unternehmer
+Unternehmerin
+Unternehmerinnen
+Unternehmern
+Unternehmers
+Unternehmertum
+Unternehmertums
+Unternehmung
+Unternehmungen
+Unternehmungsgeist
+Unternehmungslust
+Unterordnung
+Unterprogramm
+Unterprogramme
+Unterprogrammen
+Unterprogramms
+Unterpunkt
+Unterpunkte
+Unterpunkten
+Unterpunktes
+Unterpunkts
+Unterredung
+Unterrelease
+Unterricht
+Unterrichts
+Unterrichtung
+Unterrichtungen
+Untersagung
+Untersagungen
+Untersatz
+Untersatzes
+Unterscheidbarkeit
+Unterscheidung
+Unterscheidungen
+Unterschenkel
+Unterschenkeln
+Unterschenkels
+Unterschiebung
+Unterschiebungen
+Unterschied
+Unterschiede
+Unterschieden
+Unterschiedes
+Unterschiedlichkeit
+Unterschiedlichkeiten
+Unterschieds
+Unterschlagung
+Unterschlagungen
+Unterschlupf
+Unterschlupfs
+Unterschlüpfe
+Unterschlüpfen
+Unterschreitung
+Unterschrift
+Unterschriften
+Unterschätzung
+Unterschätzungen
+Unterseite
+Unterseiten
+Untersetzung
+Unterspree
+Untersteiermark
+Unterstellung
+Unterstellungen
+Untersteuerung
+Untersteuerungen
+Unterstreichung
+Unterstreichungszeichen
+Unterstreichungszeichens
+Unterstufe
+Unterstufen
+Unterstützung
+Unterstützungen
+Untersuchung
+Untersuchungen
+Untersuchungszeitraum
+Untersuchungszeitraumes
+Untersuchungszeitraums
+Untersuchungszeiträume
+Untersuchungszeiträumen
+Untersätze
+Untersätzen
+Untertan
+Untertanen
+Unterteil
+Unterteils
+Unterteilung
+Unterteilungen
+Unterthema
+Unterthemas
+Untertitel
+Untertiteln
+Unterton
+Untertons
+Untertreibung
+Untertreibungen
+Unterverzeichnis
+Unterverzeichnisse
+Unterverzeichnissen
+Unterverzeichnisses
+Unterwanderer
+Unterwanderung
+Unterwanderungen
+Unterweisung
+Unterweisungen
+Unterwerfung
+Unterwerfungen
+Unterzeichner
+Unterzeichnung
+Unterzeichnungen
+Untier
+Untiere
+Untieren
+Untieres
+Untiers
+Untugend
+Untugenden
+Unvereinbarkeit
+Unvereinbarkeiten
+Unvergleichbarkeit
+Unvermeidbarkeit
+Unvermögen
+Unvermögens
+Unvernunft
+Unverschämtheit
+Unverschämtheiten
+Unversehrtheit
+Unverstand
+Unverstandes
+Unverständlichkeit
+Unverständnis
+Unverständnisse
+Unverständnissen
+Unverständnisses
+Unverträglichkeit
+Unverzichtbarkeit
+Unvollkommenheit
+Unvollkommenheiten
+Unvollständigkeit
+Unvollständigkeiten
+Unwahrheit
+Unwahrheiten
+Unwahrscheinlichkeit
+Unwahrscheinlichkeiten
+Unweigerlichkeit
+Unwerte
+Unwesen
+Unwesens
+Unwetter
+Unwetters
+Unwille
+Unwillen
+Unwirksamkeit
+Unwissenheit
+Unwohlsein
+Unwohlseins
+Unzahl
+Unzahlung
+Unzahlungen
+Unze
+Unzen
+Unzucht
+Unzuchten
+Unzufriedenheit
+Unzugänglichkeit
+Unzulänglichkeit
+Unzulänglichkeiten
+Unzweckmäßigkeit
+Unzüchtigkeit
+Unzüchtigkeiten
+Unähnlichkeit
+Unähnlichkeiten
+Unübersichtlichkeit
+Update
+Updates
+Urabstimmung
+Urabstimmungen
+Urahn
+Urahnen
+Urahns
+Ural
+Uran
+Urans
+Uraufqqführung
+Uraufqqführungen
+Urbanisation
+Urbanität
+Urbild
+Ureigenheit
+Ureinwohner
+Ureinwohnerin
+Ureinwohnerinnen
+Ureinwohnern
+Ureinwohners
+Urenkel
+Urenkelin
+Urenkelinnen
+Urenkeln
+Urenkels
+Urerfahrung
+Urfassung
+Urfassungen
+Urform
+Urformen
+Urgeschichte
+Urgroßmutter
+Urgroßmütter
+Urgroßvater
+Urgroßvaters
+Urgroßväter
+Urheber
+Urheberin
+Urheberinnen
+Urhebern
+Urheberrecht
+Urheberrechte
+Urheberrechten
+Urheberrechts
+Urhebers
+Urheberschaft
+Urin
+Urins
+Urinstinkt
+Urinstinkte
+Urinstinkten
+Urinstinktes
+Urinstinkts
+Urkraft
+Urkräfte
+Urkräften
+Urkunde
+Urkunden
+Urlaub
+Urlaube
+Urlauben
+Urlauber
+Urlaubern
+Urlaubers
+Urlaubs
+Urmensch
+Urmenschen
+Urne
+Urnen
+Ursache
+Ursachen
+Ursprung
+Ursprungs
+Ursprungsland
+Ursprungsländer
+Ursprungsnachweis
+Ursprungsnachweise
+Ursprungsnachweisen
+Ursprungsnachweises
+Ursprungswert
+Ursprungswerte
+Ursprungswerten
+Ursprungswerts
+Ursprünge
+Ursprüngen
+Ursprünglichkeit
+Urstoff
+Urstoffe
+Urstoffen
+Urstoffs
+Ursula
+Ursulas
+Ursächlichkeit
+Urteil
+Urteile
+Urteilen
+Urteils
+Urteilsbildung
+Urteilsfindung
+Urteilskraft
+Urteilsvermögen
+Urteilsvermögens
+Urtier
+Urtiere
+Urtieren
+Urtiers
+Urvater
+Urvaters
+Urwald
+Urwelt
+Urwälder
+Urwäldern
+Urzeit
+Urzeiten
+Urzustand
+Urzustandes
+Urzustands
+Urzustände
+Urzuständen
+Usenet
+User
+Userport
+Users
+Usus
+Uta
+Utas
+Ute
+Utensilie
+Utensilien
+Utes
+Utility
+Utilitys
+Utopie
+Utopien
+Utrecht
+VDE
+VDI
+VI
+VII
+VIII
+VLSI
+VMOS
+Vabanquespiel
+Vagabund
+Vagabunden
+Vakuen
+Vakuum
+Vakuums
+Valenzband
+Valenzbandes
+Valium
+Valpolicella
+Valuta
+Valuten
+Vamp
+Vampir
+Vampire
+Vampiren
+Vampirs
+Vamps
+Vandale
+Vandalen
+Vanille
+Variabilität
+Variablenbelegung
+Variablenbindung
+Variablenbindungen
+Variablenidentifikator
+Variablenidentifikatoren
+Variablenidentifikators
+Variablennummer
+Variablennummern
+Variablenreferenz
+Variablenreferenzen
+Variablensubstitution
+Variablensubstitutionen
+Variablenvorkommen
+Variablenvorkommens
+Variablenübergabe
+Variablenübergaben
+Variante
+Varianten
+Variation
+Variationen
+Varietee
+Varietees
+Varietät
+Varietäten
+Varieté
+Varietés
+Varistor
+Varistoren
+Vasall
+Vasallen
+Vase
+Vaseline
+Vasen
+Vater
+Vaters
+Vaterschaft
+Vaterschaften
+Vati
+Vatikan
+Vatikanstadt
+Vatis
+Vegetabilien
+Vegetarier
+Vegetariern
+Vegetariers
+Vegetarismus
+Vegetation
+Vegetationen
+Vehemenz
+Vehikel
+Vehikeln
+Vehikels
+Veilchen
+Veilchens
+Veitstanz
+Veitstanzes
+Veitstänze
+Veitstänzen
+Vektor
+Vektoren
+Vektorgraphik
+Vektorgraphiken
+Vektorkette
+Vektorketten
+Vektorrechnung
+Vektors
+Velin
+Velins
+Velours
+Vene
+Venedig
+Venen
+Venetien
+Venezianer
+Venezianerin
+Venezianerinnen
+Venezianern
+Venezianers
+Venezuela
+Ventil
+Ventilation
+Ventilationen
+Ventilator
+Ventilators
+Ventile
+Ventilen
+Ventils
+Venus
+Venusberg
+Verabfolgung
+Verabfolgungen
+Verabredung
+Verabredungen
+Verabschiedung
+Verabschiedungen
+Verachtung
+Verallgemeinerbarkeit
+Verallgemeinerung
+Verallgemeinerungsfähigkeit
+Veraltung
+Veranda
+Veranden
+Verankerung
+Verankerungen
+Veranlagung
+Veranlagungen
+Veranlassung
+Veranlassungen
+Veranschaulichung
+Veranschaulichungen
+Veranschlagung
+Veranschlagungen
+Veranstalter
+Veranstalterin
+Veranstalterinnen
+Veranstaltern
+Veranstalters
+Veranstaltung
+Veranstaltungen
+Verantwortlichkeit
+Verantwortlichkeiten
+Verantwortung
+Verantwortungen
+Verantwortungsbereich
+Verantwortungslosigkeit
+Verarbeiter
+Verarbeitern
+Verarbeiters
+Verarbeitung
+Verarbeitungen
+Verarbeitungsschritt
+Verarbeitungsschritte
+Verarbeitungsschritten
+Verarbeitungsschrittes
+Verarbeitungsweise
+Verarbeitungszeit
+Verarmung
+Verb
+Verband
+Verbandes
+Verbands
+Verbandsoperation
+Verbandsoperationen
+Verbandstheorie
+Verbandstheorien
+Verbannung
+Verben
+Verbesserbarkeit
+Verbesserung
+Verbesserungen
+Verbesserungsmaßnahme
+Verbesserungsmaßnahmen
+Verbesserungsmöglichkeit
+Verbesserungsmöglichkeiten
+Verbesserungsvorschlag
+Verbesserungsvorschlages
+Verbesserungsvorschlags
+Verbesserungsvorschläge
+Verbesserungsvorschlägen
+Verbeugung
+Verbeugungen
+Verbiegung
+Verbiegungen
+Verbinder
+Verbindern
+Verbindlichkeit
+Verbindlichkeiten
+Verbindung
+Verbindungen
+Verbindungsplatine
+Verbindungsstelle
+Verbindungsstellen
+Verbindungsstück
+Verbindungsstücke
+Verbindungsstücken
+Verbindungsstückes
+Verbindungsstücks
+Verbissenheit
+Verbitterung
+Verbitterungen
+Verblendung
+Verblendungen
+Verblüffung
+Verblüffungen
+Verborgenheit
+Verbot
+Verbote
+Verboten
+Verbots
+Verbrauch
+Verbraucher
+Verbrauchern
+Verbrauchers
+Verbrauches
+Verbrauchs
+Verbrauchsgut
+Verbrauchsguts
+Verbrauchsgüter
+Verbrauchsgütern
+Verbrauchsmaterial
+Verbrauchsmessung
+Verbrauchsrückgang
+Verbrauchszunahme
+Verbrauchszunahmen
+Verbrechen
+Verbrechens
+Verbrecher
+Verbrecherin
+Verbrecherinnen
+Verbrechern
+Verbrechers
+Verbrechertum
+Verbrechertums
+Verbreiter
+Verbreiterung
+Verbreitung
+Verbrennung
+Verbrennungen
+Verbrüderung
+Verbuchung
+Verbuchungen
+Verbum
+Verbund
+Verbunde
+Verbunden
+Verbundenheit
+Verbundes
+Verbundprojekt
+Verbunds
+Verbundvorhaben
+Verbundvorhabens
+Verbände
+Verbänden
+Verdachtsmoment
+Verdachtsmomente
+Verdachtsmomenten
+Verdachtsmomentes
+Verdachtsmoments
+Verdammnis
+Verdammnisse
+Verdammnissen
+Verdammung
+Verdammungen
+Verdampfung
+Verdampfungen
+Verdaulichkeit
+Verdauung
+Verdeck
+Verdeckes
+Verdecks
+Verderb
+Verderber
+Verderblichkeit
+Verderbnis
+Verderbtheit
+Verdeutlichung
+Verdeutschung
+Verdi
+Verdichtung
+Verdichtungen
+Verdienst
+Verdienstausfall
+Verdienstausfalles
+Verdienstausfalls
+Verdienstausfälle
+Verdienstausfällen
+Verdienste
+Verdiensten
+Verdienstes
+Verdienstkreuz
+Verdienstmöglichkeit
+Verdienstmöglichkeiten
+Verdienstspanne
+Verdienstspannen
+Verdinglichung
+Verdis
+Verdoppelung
+Verdoppelungen
+Verdopplung
+Verdopplungen
+Verdrahtung
+Verdrahtungskasten
+Verdrahtungsplatine
+Verdrahtungsplatte
+Verdrahtungspläne
+Verdrehschutz
+Verdrehtheit
+Verdrehung
+Verdrehungen
+Verdrießlichkeit
+Verdrossenheit
+Verdruss
+Verdrusse
+Verdrusses
+Verdrängung
+Verdrängungen
+Verdummung
+Verdun
+Verdunkelung
+Verdunkelungen
+Verdunkelungsgefahr
+Verdunkelungsgefahren
+Verdunstung
+Verdunstungen
+Verdutzung
+Verdächtigung
+Verdächtigungen
+Verdünnung
+Verdünnungen
+Veredelung
+Verehrer
+Verehrerin
+Verehrerinnen
+Verehrern
+Verehrers
+Verehrung
+Verehrungen
+Vereidigung
+Vereidigungen
+Verein
+Vereinbarkeit
+Vereinbarung
+Vereinbarungen
+Vereinbarungsentwurf
+Vereinfachung
+Vereinfachungen
+Vereinfachungsgründe
+Vereinfachungsgründen
+Vereinheitlichung
+Vereinheitlichungen
+Vereinigung
+Vereinigungen
+Vereinigungstyp
+Vereinigungstypen
+Vereinigungstyps
+Vereins
+Vereinsamung
+Vereinsbank
+Vereinzelung
+Vereisung
+Vereisungen
+Vereitelung
+Vereitelungen
+Vereiterung
+Vereiterungen
+Verelendung
+Verelendungen
+Verengerung
+Verengerungen
+Verengung
+Vererbung
+Vererbungsgesetz
+Vererbungsgesetze
+Vererbungsgesetzen
+Vererbungsgesetzes
+Vererbungshierarchie
+Vererbungslehre
+Vererbungslehren
+Vererbungslinie
+Vererbungslinien
+Vererbungsmechanismen
+Verewigung
+Verewigungen
+Verfahren
+Verfahrens
+Verfahrenshinweis
+Verfahrenshinweise
+Verfahrenshinweisen
+Verfahrenshinweises
+Verfahrenstechnik
+Verfahrenstechniken
+Verfahrensvorschrift
+Verfahrensvorschriften
+Verfahrensweise
+Verfahrensweisen
+Verfall
+Verfalles
+Verfalls
+Verfasser
+Verfasserin
+Verfasserinnen
+Verfassern
+Verfassers
+Verfassung
+Verfassungen
+Verfechter
+Verfechterin
+Verfechterinnen
+Verfechtern
+Verfechters
+Verfehlung
+Verfehlungen
+Verfeindung
+Verfeindungen
+Verfeinerung
+Verfeinerungen
+Verfertiger
+Verfertigern
+Verfertigers
+Verfertigung
+Verfettung
+Verfettungen
+Verfilmung
+Verfilzung
+Verfilzungen
+Verflechtung
+Verflechtungen
+Verfolger
+Verfolgerin
+Verfolgerinnen
+Verfolgern
+Verfolgers
+Verfolgung
+Verfolgungen
+Verformung
+Verformungen
+Verfremdung
+Verfälscher
+Verfälschern
+Verfälschers
+Verfälschung
+Verfälschungen
+Verfärbung
+Verfärbungen
+Verfügbarkeit
+Verfügung
+Verfügungen
+Verfügungsfreiheit
+Verfügungsrecht
+Verfügungsrechte
+Verfügungsrechten
+Verfügungsrechtes
+Verfügungsrechts
+Verfügungsstellung
+Verführer
+Verführerin
+Verführerinnen
+Verführern
+Verführers
+Verführung
+Verführungen
+Verführungskraft
+Vergabe
+Vergaben
+Vergangenheit
+Vergaser
+Vergasern
+Vergasers
+Vergasung
+Vergeblichkeit
+Vergebung
+Vergebungen
+Vergegenwärtigung
+Vergehen
+Vergehens
+Vergeistigung
+Vergeltung
+Vergeltungen
+Vergeltungsakt
+Vergeltungsakte
+Vergeltungsaktes
+Vergeltungsmaßnahme
+Vergeltungsmaßnahmen
+Vergeltungsschlag
+Vergeltungsschlages
+Vergeltungsschlags
+Vergeltungsschläge
+Vergeltungsschlägen
+Vergemeinschaftung
+Vergessenheit
+Vergesslichkeit
+Vergeuder
+Vergeuderin
+Vergeuderinnen
+Vergeudern
+Vergeuders
+Vergeudung
+Vergeudungen
+Vergewaltigung
+Vergiftung
+Vergissmeinnicht
+Vergissmeinnichtes
+Vergleich
+Vergleichbarkeit
+Vergleiche
+Vergleichen
+Vergleiches
+Vergleichs
+Vergleichsbasis
+Vergleichsbetrieb
+Vergleichsfunktion
+Vergleichsfunktionen
+Vergleichsliste
+Vergleichslisten
+Vergleichsmöglichkeit
+Vergleichsmöglichkeiten
+Vergleichsrechnung
+Vergleichsrechnungen
+Vergleichswert
+Vergleichswerte
+Vergleichswerten
+Vergleichswertes
+Vergleichswerts
+Vergleichszahl
+Vergleichszahlen
+Vergleichszwecke
+Vergleichszwecken
+Vergleichung
+Vergnügen
+Vergnügens
+Vergnügung
+Vergnügungen
+Vergolder
+Vergoldern
+Vergolders
+Vergoldung
+Vergröberung
+Vergröberungen
+Vergrößerung
+Vergrößerungen
+Verguss
+Vergusses
+Vergänglichkeit
+Vergötterung
+Vergünstigung
+Vergünstigungen
+Vergüsse
+Vergüssen
+Vergütung
+Vergütungen
+Verhaftung
+Verhaftungen
+Verhalten
+Verhaltenheit
+Verhaltens
+Verhaltensform
+Verhaltensformen
+Verhaltenskodex
+Verhaltenskodexe
+Verhaltenskodexen
+Verhaltenskodexes
+Verhaltensmaßregel
+Verhaltensmaßregeln
+Verhaltensmuster
+Verhaltensnorm
+Verhaltensnormen
+Verhaltensprogramm
+Verhaltensregel
+Verhaltensregeln
+Verhaltensstörung
+Verhaltensweise
+Verhaltensweisen
+Verhaltenswert
+Verhaltenswerte
+Verhaltenswerten
+Verhaltenswertes
+Verhaltenswerts
+Verhaltensänderung
+Verhandlung
+Verhandlungen
+Verhandlungsdauer
+Verhandlungsergebnis
+Verhandlungsergebnisse
+Verhandlungsergebnissen
+Verhandlungsergebnisses
+Verhandlungsführer
+Verhandlungsführerin
+Verhandlungsführerinnen
+Verhandlungsgeschick
+Verhandlungskommission
+Verhandlungskommissionen
+Verhandlungspartner
+Verhandlungspartnerin
+Verhandlungspartnerinnen
+Verhandlungspartnern
+Verhandlungspartners
+Verhandlungsprogramm
+Verhandlungspunkt
+Verhandlungsrunde
+Verhandlungsrunden
+Verhandlungsspielraum
+Verhandlungsspielraumes
+Verhandlungsspielraums
+Verhandlungsspielräume
+Verhandlungsspielräumen
+Verhandlungsteilnehmer
+Verhandlungsteilnehmern
+Verhandlungsteilnehmers
+Verhandlungstisch
+Verhandlungsziele
+Verhandlungszielen
+Verhau
+Verhaues
+Verhaus
+Verheerung
+Verheerungen
+Verheimlichung
+Verheimlichungen
+Verheiratung
+Verheißung
+Verherrlichung
+Verherrlichungen
+Verhetzung
+Verhinderung
+Verhinderungen
+Verhältnis
+Verhältnismäßigkeit
+Verhältnismäßigkeiten
+Verhältnisse
+Verhältnissen
+Verhältnisses
+Verhältniswahl
+Verhältniswahlen
+Verhältniswort
+Verhältniswortes
+Verhältniswörter
+Verhältniswörtern
+Verhängnis
+Verhängnisse
+Verhängnissen
+Verhängnisses
+Verhängung
+Verhärtung
+Verhärtungen
+Verhöhnung
+Verhör
+Verhöre
+Verhöres
+Verhörs
+Verhüllung
+Verhüllungen
+Verhütung
+Verhütungen
+Verhütungsmaßnahme
+Verhütungsmaßnahmen
+Verhütungsmittel
+Verhütungsmitteln
+Verhütungsmittels
+Verifikation
+Verifikationen
+Verifizierung
+Verinnerlichung
+Verirrung
+Verirrungen
+Verjährung
+Verjährungen
+Verjährungsfrist
+Verjährungsfristen
+Verjüngung
+Verjüngungen
+Verjüngungskur
+Verkabelung
+Verkabelungen
+Verkabelungsaufwand
+Verkabelungsaufwands
+Verkabelungsbeispiel
+Verkabelungsfehler
+Verkabelungsprobleme
+Verkabelungsschema
+Verkabelungsteile
+Verkabelungswege
+Verkalkung
+Verkalkungen
+Verkapselung
+Verkapselungen
+Verkauf
+Verkaufs
+Verkehr
+Verkehres
+Verkehrs
+Verkehrswesen
+Verkehrswesens
+Verkeilung
+Verkennung
+Verkennungen
+Verkettung
+Verkettungen
+Verketzerung
+Verketzerungen
+Verkippung
+Verkippungen
+Verklagung
+Verklammerung
+Verklammerungen
+Verklebung
+Verklebungen
+Verkleidung
+Verkleidungen
+Verkleinerung
+Verkleinerungen
+Verkleinerungswort
+Verkleinerungswortes
+Verkleinerungswörter
+Verkleinerungswörtern
+Verklärung
+Verklärungen
+Verknappung
+Verknappungen
+Verknöcherung
+Verknöcherungen
+Verknüpfung
+Verknüpfungen
+Verkohlung
+Verkommenheit
+Verkrümmung
+Verkrümmungen
+Verkrüppelung
+Verkrüppelungen
+Verkäufer
+Verkäufern
+Verkäufers
+Verkäufqqlichkeit
+Verkörperung
+Verkörperungen
+Verkümmerung
+Verkümmerungen
+Verkündigung
+Verkündung
+Verkündungen
+Verkürzung
+Verladen
+Verladens
+Verladerampe
+Verladerampen
+Verladestation
+Verladestationen
+Verladung
+Verladungen
+Verlag
+Verlage
+Verlagen
+Verlagerung
+Verlagerungen
+Verlages
+Verlags
+Verlagsort
+Verlagsrecht
+Verlagsrechte
+Verlagsrechten
+Verlagsrechtes
+Verlagsrechts
+Verlangens
+Verlangsamung
+Verlass
+Verlasse
+Verlassenheit
+Verlasses
+Verlaub
+Verlauf
+Verlaufs
+Verlautbarung
+Verlegenheit
+Verlegenheiten
+Verleger
+Verlegern
+Verlegers
+Verlegung
+Verleih
+Verleiher
+Verleiherin
+Verleiherinnen
+Verleihern
+Verleihers
+Verleihes
+Verleihs
+Verleihung
+Verleihungen
+Verleitung
+Verleitungen
+Verletzung
+Verletzungen
+Verletzungsgefahr
+Verletzungsgefahren
+Verleumder
+Verleumderin
+Verleumderinnen
+Verleumdern
+Verleumders
+Verleumdung
+Verleumdungen
+Verliebtheit
+Verlierer
+Verlierern
+Verlies
+Verliese
+Verliesen
+Verlieses
+Verlobung
+Verlobungen
+Verlockung
+Verlockungen
+Verlogenheit
+Verlogenheiten
+Verlosung
+Verlosungen
+Verlust
+Verluste
+Verlusten
+Verlustes
+Verlustfall
+Verlustfalls
+Verlustfälle
+Verlustfällen
+Verlustgefahr
+Verlustgefahren
+Verlustgeschäft
+Verlustleistung
+Verlusts
+Verlängerung
+Verlängerungen
+Verlängerungsantrag
+Verlängerungsantrages
+Verlängerungsantrags
+Verlängerungsanträge
+Verlängerungsanträgen
+Verlängerungskabel
+Verlässlichkeit
+Verläufe
+Verläufen
+Verlöbnis
+Verlöbnisse
+Verlöbnissen
+Verlöbnisses
+Verlöschung
+Verlöschungen
+Verlötung
+Vermarktung
+Vermaßung
+Vermaßungen
+Vermehrung
+Vermeidbarkeit
+Vermeidung
+Vermeidungen
+Vermengung
+Vermengungen
+Vermenschlichung
+Vermerk
+Vermerke
+Vermerken
+Vermerks
+Vermessenheit
+Vermessenheiten
+Vermessung
+Vermessungen
+Vermietbarkeit
+Vermieter
+Vermietern
+Vermieters
+Vermietung
+Vermietungen
+Verminderung
+Verminderungen
+Verminung
+Verminungen
+Vermischung
+Vermischungen
+Vermischungsgrad
+Vermisstenanzeige
+Vermisstenanzeigen
+Vermisstenliste
+Vermisstenlisten
+Vermittler
+Vermittlern
+Vermittlerrolle
+Vermittlerrollen
+Vermittlers
+Vermittlung
+Vermittlungsangebot
+Vermittlungsbemühung
+Vermittlungsbemühungen
+Vermittlungsbeziehung
+Vermittlungsgebühr
+Vermittlungsgebühren
+Vermittlungsgespräch
+Vermittlungsgespräche
+Vermittlungsgesprächen
+Vermittlungsgesprächs
+Vermittlungsprovision
+Vermittlungsprovisionen
+Vermittlungsversuch
+Vermittlungsversuche
+Vermittlungsversuchen
+Vermittlungsversuchs
+Vermittlungsvorschlag
+Vermittlungsvorschlages
+Vermittlungsvorschlags
+Vermittlungsvorschläge
+Vermittlungsvorschlägen
+Vermummung
+Vermutung
+Vermutungen
+Vermutungswissen
+Vermutungswissens
+Vermächtnis
+Vermächtnisse
+Vermächtnissen
+Vermächtnisses
+Vermählung
+Vermögen
+Vermögens
+Vernachlässigung
+Vernachlässigungen
+Vernebelung
+Verneigung
+Verneigungen
+Verneinung
+Verneinungen
+Vernetzbarkeit
+Vernetzung
+Vernichtung
+Vernichtungskrieg
+Vernichtungskriege
+Vernichtungskriegen
+Vernichtungskriegs
+Vernichtungslager
+Vernichtungslagern
+Vernichtungslagers
+Vernunft
+Vernunftehe
+Vernunftehen
+Vernunftwesen
+Vernunftwesens
+Verona
+Veroneser
+Verordnung
+Verordnungen
+Verordnungsentwurf
+Verpachtung
+Verpachtungen
+Verpacker
+Verpackern
+Verpackers
+Verpackung
+Verpackungen
+Verpestung
+Verpestungen
+Verpflanzung
+Verpflanzungen
+Verpflegung
+Verpflegungen
+Verpflichtung
+Verpfändung
+Verpfändungen
+Verpolschutz
+Verputz
+Verpächter
+Verpächtern
+Verpächters
+Verrat
+Verrates
+Verrats
+Verrechnung
+Verrechnungen
+Verrenkung
+Verrenkungen
+Verrichtung
+Verrichtungen
+Verriegelung
+Verriegelungen
+Verringerung
+Verriss
+Verrisse
+Verrissen
+Verrisses
+Verrohung
+Verrohungen
+Verruchtheit
+Verruf
+Verrufes
+Verrufs
+Verräter
+Verräterin
+Verräterinnen
+Verrätern
+Verräters
+Verrücktheit
+Verrücktheiten
+Versachlichung
+Versagen
+Versagens
+Versager
+Versagerin
+Versagerinnen
+Versagern
+Versagers
+Versagung
+Versagungen
+Versailles
+Versammlung
+Versammlungen
+Versammlungsfreiheit
+Versammlungsleiter
+Versammlungsleitern
+Versammlungsleiters
+Versand
+Versandes
+Versbau
+Versbaues
+Versbaus
+Verschaltung
+Verschaltungen
+Verschalung
+Verschalungen
+Verschickung
+Verschickungen
+Verschiebespiel
+Verschiebung
+Verschiebungen
+Verschiedenheit
+Verschiffung
+Verschiffungen
+Verschlafenheit
+Verschlag
+Verschlagenheit
+Verschlages
+Verschlags
+Verschlagwortung
+Verschlechterung
+Verschleierung
+Verschleiß
+Verschleiße
+Verschleißen
+Verschleißes
+Verschleißteil
+Verschleißteile
+Verschleißteilen
+Verschleißteils
+Verschleppung
+Verschleppungen
+Verschleuderung
+Verschleuderungen
+Verschlimmerung
+Verschlimmerungen
+Verschluss
+Verschlusses
+Verschläge
+Verschlägen
+Verschlüsse
+Verschlüsselung
+Verschlüsselungen
+Verschlüsselungstechnik
+Verschlüsselungstechniken
+Verschlüssen
+Verschmelzung
+Verschmelzungen
+Verschmitztheit
+Verschmutzung
+Verschmutzungen
+Verschnaufpause
+Verschnaufpausen
+Verschraubung
+Verschraubungen
+Verschreibung
+Verschreibungen
+Verschrobenheit
+Verschrobenheiten
+Verschrottung
+Verschrottungen
+Verschränkung
+Verschuldung
+Verschuldungen
+Verschweigung
+Verschwender
+Verschwenderin
+Verschwenderinnen
+Verschwendern
+Verschwenders
+Verschwendung
+Verschwendungen
+Verschwendungssucht
+Verschwiegenheit
+Verschwommenheit
+Verschwörer
+Verschwörerin
+Verschwörerinnen
+Verschwörern
+Verschwörers
+Verschwörung
+Verschwörungen
+Verschämtheit
+Verschärfung
+Verschärfungen
+Verschönerung
+Verschönerungen
+Verschüchterung
+Verschüchterungen
+Verse
+Versehrtheit
+Versen
+Versendung
+Versendungen
+Versenkung
+Versenkungen
+Versetzung
+Versetzungen
+Verseuchung
+Versfuß
+Versfußes
+Versfüße
+Versfüßen
+Versicherer
+Versicherern
+Versicherers
+Versicherung
+Versicherungen
+Versiegelung
+Versiegelungen
+Versilberung
+Versinnbildlichung
+Version
+Versionen
+Versionsnummer
+Versionsnummern
+Versionsverwaltung
+Versionsverwaltungssystem
+Versionsverwaltungssysteme
+Versionsverwaltungssystemen
+Versionsverwaltungssystems
+Verskunst
+Versmaß
+Versmaße
+Versmaßen
+Versmaßes
+Versorger
+Versorgerin
+Versorgerinnen
+Versorgern
+Versorgers
+Versorgung
+Versorgungen
+Verspannung
+Verspannungen
+Verspottung
+Verspottungen
+Versprecher
+Versprechern
+Versprechers
+Versprechung
+Versprechungen
+Verspätung
+Verstaatlichung
+Verstaatlichungen
+Verstande
+Verstandes
+Verstandeskraft
+Verstandeskräfte
+Verstandeskräften
+Verstandesmensch
+Verstandesschärfe
+Verstandeswelt
+Verstauchung
+Versteck
+Versteckes
+Verstecks
+Versteckspiel
+Versteckspieles
+Versteckspiels
+Versteifung
+Versteifungen
+Versteigerung
+Versteigerungen
+Versteigerungswert
+Versteigerungswerte
+Versteigerungswerten
+Versteigerungswertes
+Versteinerung
+Versteinerungen
+Verstellmöglichkeit
+Verstellmöglichkeiten
+Verstellung
+Verstellungen
+Versteuerung
+Versteuerungen
+Verstiegenheit
+Verstimmung
+Verstimmungen
+Verstocktheit
+Verstopfung
+Verstopfungen
+Verstoß
+Verstoßes
+Verstoßung
+Verstoßungen
+Verstrebung
+Verstrebungen
+Verstrebungswinkel
+Verstrebungswinkeln
+Verstrebungswinkels
+Verstreuung
+Verstreuungen
+Verstrickung
+Verstädterung
+Verständigkeit
+Verständigkeiten
+Verständigung
+Verständigungen
+Verständlichkeit
+Verständnis
+Verständnislosigkeit
+Verständnisse
+Verständnissen
+Verständnisses
+Verstärker
+Verstärkerbaustein
+Verstärkereingang
+Verstärkerkarte
+Verstärkerkarten
+Verstärkern
+Verstärkerröhre
+Verstärkers
+Verstärkerschaltung
+Verstärkerstufe
+Verstärkung
+Verstärkungen
+Verstärkungsanstieg
+Verstärkungsanstiegs
+Verstärkungseinstellung
+Verstärkungsregelung
+Verstärkungsreserve
+Verstörtheit
+Verstöße
+Verstößen
+Verstümmelung
+Versuch
+Versuche
+Versuchen
+Versuches
+Versuchs
+Versuchsanordnung
+Versuchsanstalt
+Versuchsanstalten
+Versuchsballon
+Versuchsballons
+Versuchsdurchführung
+Versuchsfahrt
+Versuchsfeld
+Versuchsgelände
+Versuchsgeländes
+Versuchsingenieur
+Versuchsingenieure
+Versuchsingenieuren
+Versuchsingenieurs
+Versuchskaninchen
+Versuchskaninchens
+Versuchslabor
+Versuchslaboratorium
+Versuchslabore
+Versuchslaboren
+Versuchslabors
+Versuchslauf
+Versuchslaufs
+Versuchsläufe
+Versuchsläufen
+Versuchsperson
+Versuchspersonen
+Versuchsreihe
+Versuchsreihen
+Versuchsstadium
+Versuchsstadiums
+Versuchsstrecke
+Versuchsstrecken
+Versuchstier
+Versuchstiere
+Versuchstieren
+Versuchstiers
+Versuchung
+Versuchungen
+Versunkenheit
+Versäumnis
+Versäumnisse
+Versäumnissen
+Versäumnisses
+Versöhnung
+Versöhnungen
+Versündigung
+Versündigungen
+Vertagung
+Vertagungen
+Vertauschung
+Vertauschungen
+Verteidiger
+Verteidigerin
+Verteidigerinnen
+Verteidigern
+Verteidigers
+Verteidigung
+Verteidigungen
+Verteiler
+Verteilern
+Verteilers
+Verteilung
+Verteilungen
+Verteilungsfunktion
+Verteilungsfunktionen
+Verteuerung
+Verteuerungen
+Vertiefung
+Vertiefungen
+Vertonung
+Vertonungen
+Vertrag
+Vertragen
+Vertragens
+Vertrages
+Vertrags
+Vertragsabschluss
+Vertragsabschlusses
+Vertragsabwicklung
+Vertragsangebot
+Vertragsbedingung
+Vertragsbedingungen
+Vertragsbeginn
+Vertragsbestandteil
+Vertragsbestandteile
+Vertragsbestandteilen
+Vertragsbestandteils
+Vertragsbruch
+Vertragsbruches
+Vertragsbruchs
+Vertragsbrüche
+Vertragsbrüchen
+Vertragsdauer
+Vertragsentwurf
+Vertragsentwurfes
+Vertragsentwurfs
+Vertragsentwürfe
+Vertragsentwürfen
+Vertragserfüllung
+Vertragsfirmen
+Vertragsgegenstand
+Vertragsgegenstandes
+Vertragsgegenstände
+Vertragsgegenständen
+Vertragskündigung
+Vertragspartei
+Vertragsparteien
+Vertragspartner
+Vertragspartnerin
+Vertragspartnerinnen
+Vertragspartnern
+Vertragspartners
+Vertragsstrafe
+Vertragsstrafen
+Vertragstext
+Vertragstexte
+Vertragstexten
+Vertragstextes
+Vertragsunterzeichnung
+Vertragsverhandlung
+Vertragsverhandlungen
+Vertragsverhältnis
+Vertragsverhältnisse
+Vertragsverhältnissen
+Vertragsverhältnisses
+Vertragsverletzung
+Vertragswerk
+Vertragswerke
+Vertragswerken
+Vertragswerks
+Vertragsänderung
+Vertragsänderungen
+Vertrauensbasis
+Vertrauensbeweis
+Vertrauensbeweise
+Vertrauensbeweisen
+Vertrauensbeweises
+Vertrauensbildung
+Vertrauensbruch
+Vertrauensbruches
+Vertrauensbrüche
+Vertrauensbrüchen
+Vertrauensdozent
+Vertrauensdozenten
+Vertrauenskrise
+Vertrauenskrisen
+Vertrauensleute
+Vertrauensleuten
+Vertrauensmann
+Vertrauensmannes
+Vertrauensmanns
+Vertrauensmänner
+Vertrauensmännern
+Vertrauensperson
+Vertrauenspersonen
+Vertrauenssache
+Vertrauenssachen
+Vertrauensschwund
+Vertrauensseligkeit
+Vertrauensstellung
+Vertrauensverlust
+Vertrauensvorschuss
+Vertrauensvorschusses
+Vertrauensvorschüsse
+Vertrauensvorschüssen
+Vertrauensvotum
+Vertrauensvotums
+Vertrauenswürdigkeit
+Vertraulichkeit
+Vertraulichkeiten
+Vertrautheit
+Vertreiber
+Vertreibern
+Vertreibers
+Vertreibung
+Vertreter
+Vertreterin
+Vertreterinnen
+Vertretern
+Vertreters
+Vertretung
+Vertretungen
+Vertrieb
+Vertriebe
+Vertrieben
+Vertriebs
+Verträge
+Verträgen
+Verträglichkeit
+Verunglimpfung
+Verunreinigung
+Verunreinigungen
+Verunsicherung
+Verunstaltung
+Verunstaltungen
+Veruntreuung
+Verursacher
+Verursachern
+Verursachers
+Verursachung
+Verursachungen
+Verurteilung
+Verurteilungen
+Vervielfachung
+Vervielfachungen
+Vervielfältigung
+Vervielfältigungen
+Vervollkommnung
+Vervollkommnungen
+Vervollständigung
+Vervollständigungen
+Verw
+Verwachsen
+Verwachsens
+Verwahrlosung
+Verwahrlosungen
+Verwahrung
+Verwahrungen
+Verwalter
+Verwalterin
+Verwalterinnen
+Verwaltern
+Verwalters
+Verwaltung
+Verwaltungen
+Verwandlung
+Verwandlungen
+Verwandlungskünstler
+Verwandlungskünstlern
+Verwandlungskünstlers
+Verwandtenbesuch
+Verwandtenbesuche
+Verwandtenbesuchen
+Verwandtenbesuchs
+Verwandtschaft
+Verwandtschaftsgrad
+Verwandtschaftsgrade
+Verwandtschaftsgraden
+Verwandtschaftsgrades
+Verwandtschaftsgrads
+Verwarnung
+Verwarnungen
+Verwebung
+Verwechslung
+Verwechslungen
+Verwegenheit
+Verwegenheiten
+Verwehrung
+Verwehrungen
+Verwehung
+Verwehungen
+Verweichlichung
+Verweichlichungen
+Verweigerung
+Verweigerungen
+Verweildauer
+Verweildauern
+Verweilzeit
+Verweilzeiten
+Verweis
+Verweises
+Verweisung
+Verweisungen
+Verweisungszeichen
+Verweisungszeichens
+Verweltlichung
+Verweltlichungen
+Verwendbarkeit
+Verwendbarkeiten
+Verwender
+Verwendern
+Verwenders
+Verwendung
+Verwendungen
+Verwendungsmöglichkeit
+Verwendungsmöglichkeiten
+Verwendungszweck
+Verwendungszwecke
+Verwendungszwecken
+Verwendungszweckes
+Verwerfung
+Verwertbarkeit
+Verwertung
+Verwertungen
+Verwesung
+Verwesungen
+Verwickelung
+Verwickelungen
+Verwicklung
+Verwicklungen
+Verwilderung
+Verwilderungen
+Verwindung
+Verwindungen
+Verwirklichung
+Verwirklichungen
+Verwirrung
+Verwirrungen
+Verwischung
+Verwischungen
+Verwitterung
+Verwitterungen
+Verworfenheit
+Verworfenheiten
+Verworrenheit
+Verworrenheiten
+Verwundbarkeit
+Verwundbarkeiten
+Verwunderung
+Verwunderungen
+Verwundung
+Verwundungen
+Verwurzelung
+Verwöhnung
+Verwöhnungen
+Verwünschung
+Verwünschungen
+Verwüstung
+Verwüstungen
+Verzahnung
+Verzahnungen
+Verzauberung
+Verzehr
+Verzehres
+Verzehrs
+Verzeichnis
+Verzeichnisbaum
+Verzeichnisbaumes
+Verzeichnisbaums
+Verzeichnisbäume
+Verzeichnisbäumen
+Verzeichnishierarchie
+Verzeichnishierarchien
+Verzeichnisname
+Verzeichnisnamen
+Verzeichnisse
+Verzeichnissen
+Verzeichnisses
+Verzeichnisstruktur
+Verzeichnisstrukturen
+Verzeichnung
+Verzeichnungen
+Verzeihung
+Verzeihungen
+Verzerrung
+Verzerrungen
+Verzicht
+Verzichtbarkeit
+Verzichterklärung
+Verzichterklärungen
+Verzichtes
+Verzichtserklärung
+Verzichtserklärungen
+Verzierung
+Verzierungen
+Verzinsung
+Verzinsungen
+Verzollung
+Verzollungen
+Verzug
+Verzuge
+Verzuges
+Verzweifqqlung
+Verzweifqqlungen
+Verzweifqqlungsschritt
+Verzweigung
+Verzweigungen
+Verzärtelung
+Verzärtelungen
+Verzögerung
+Verzögerungen
+Verzögerungstaktik
+Verzögerungszeit
+Verzückung
+Verzückungen
+Verächter
+Verächters
+Veränderlichkeit
+Veränderlichkeiten
+Veränderung
+Veränderungen
+Veränderungszeit
+Veränderungszeiten
+Verästelung
+Veräußerlichung
+Veräußerlichungen
+Veräußerung
+Veräußerungen
+Verödung
+Verödungen
+Veröffentlichung
+Veröffentlichungen
+Vesper
+Vesperbrot
+Vesperbrote
+Vesperbroten
+Vesperbrotes
+Vesperbrots
+Vespern
+Vestibül
+Vestibüls
+Veteran
+Veteranen
+Veterinär
+Veterinäre
+Veterinären
+Veterinärs
+Veto
+Vetorecht
+Vetorechte
+Vetorechten
+Vetorechts
+Vetos
+Vetter
+Vettern
+Vetternwirtschaft
+Vetters
+Viadukt
+Viadukte
+Viadukten
+Viaduktes
+Vibration
+Vibrationen
+Victor
+Victoriasee
+Victors
+Video
+Videobus
+Videobusse
+Videobussen
+Videobusses
+Videoclip
+Videoclips
+Videocontroller
+Videocontrollers
+Videos
+Videosignal
+Videosignale
+Videosignalen
+Videosignals
+Videotape
+Videotapes
+Viecher
+Viechern
+Vieh
+Viehes
+Vieleck
+Vielecke
+Vielecken
+Vieleckes
+Vielfalt
+Vielflieger
+Vielfliegern
+Vielfraß
+Vielfraße
+Vielfraßen
+Vielfraßes
+Vielfältigkeit
+Vielgestalt
+Vielheit
+Vielheiten
+Vielschichtkondensator
+Vielseitigkeit
+Vielweiberei
+Vielweibereien
+Vielzahl
+Vielzeller
+Vierbeiner
+Vierbeinern
+Vierbeiners
+Viereck
+Vierecke
+Vierecken
+Vierecks
+Viertelstunde
+Viertelstunden
+Viertklässler
+Viertklässlerin
+Viertklässlerinnen
+Viertklässlern
+Viertklässlers
+Vierziger
+Vierzigerin
+Vierzigerinnen
+Vierzigern
+Vierzigers
+Vierzigstundenwoche
+Vierzimmerwohnung
+Vietcong
+Vietnam
+Vignette
+Vignetten
+Vikar
+Vikare
+Vikaren
+Vikars
+Viktoria
+Viktorias
+Viktualien
+Villa
+Villen
+Villeneuve
+Viola
+Violas
+Violine
+Violinen
+Violinist
+Violinisten
+Violinistin
+Violinistinnen
+Violoncelli
+Violoncello
+Viper
+Viren
+Virenscanner
+Virenscannern
+Virenscanners
+Virginia
+Virtuosin
+Virtuosität
+Virtuositäten
+Virus
+Visa
+Visage
+Visagen
+Visier
+Vision
+Visionen
+Visionär
+Visionäre
+Visionären
+Visionärs
+Visitation
+Visitationen
+Visite
+Visiten
+Visitenkarte
+Visitenkarten
+Viskosität
+Visualisierung
+Visualisierungsproblem
+Visualisierungsprobleme
+Visualisierungsproblemen
+Visualisierungsproblems
+Visualisierungssystem
+Visualisierungswerkzeug
+Visum
+Visums
+Vitalität
+Vitalitäten
+Vitamin
+Vitamine
+Vitaminen
+Vitamins
+Vitrine
+Vitrinen
+Vize
+Vlies
+Vliese
+Vliesen
+Vlieses
+Vogel
+Vogels
+Vogt
+Vogtes
+Vokabel
+Vokabeln
+Vokabular
+Vokal
+Vokale
+Vokalen
+Vokals
+Volant
+Volatilität
+Volk
+Volke
+Volkes
+Volks
+Volksfest
+Volksfeste
+Volksfesten
+Volksfestes
+Volksmund
+Volkswagen
+Volkswirt
+Volkswirte
+Volkswirten
+Volkswirtes
+Volkswirts
+Volkswirtschaft
+Volkswirtschaften
+Volkswirtschaftslehre
+Volkszählung
+Volkszählungen
+Vollautomatik
+Vollautomatisierung
+Vollautomatisierungen
+Vollbesitz
+Vollbesitze
+Vollbesitzen
+Vollbesitzes
+Vollbringung
+Volldampf
+Vollendung
+Vollendungen
+Vollfunktion
+Vollfunktionen
+Vollführung
+Vollgefühl
+Vollgefühles
+Vollgefühls
+Volljurist
+Volljuristen
+Vollkaufmann
+Vollkommenheit
+Vollmacht
+Vollmachten
+Vollmer
+Vollmers
+Vollpension
+Vollstrecker
+Vollstreckerin
+Vollstreckerinnen
+Vollstreckern
+Vollstreckers
+Vollstreckung
+Vollständigkeit
+Volltreffer
+Volltreffern
+Volltreffers
+Vollversammlung
+Vollversion
+Vollversionen
+Vollziehung
+Vollziehungen
+Vollzug
+Vollzugs
+Volontär
+Volontäre
+Volontären
+Volontärs
+Volt
+Voltaire
+Voltaires
+Voltmeter
+Voltmeters
+Volumen
+Volumenelement
+Volumenelemente
+Volumenelementen
+Volumenelements
+Volumens
+Volumenstrom
+Volumenstroms
+Vopo
+Vorabauftrag
+Vorabauftrages
+Vorabauftrags
+Vorabaufträge
+Vorabaufträgen
+Vorabend
+Vorabentscheidung
+Vorabentscheidungen
+Vorahnung
+Vorahnungen
+Voranalyse
+Voranalysen
+Vorankündigung
+Vorankündigungen
+Voranmeldung
+Voranmeldungen
+Voranschlag
+Voranschlages
+Voranschlags
+Voranschläge
+Voranschlägen
+Voranzeige
+Voranzeigen
+Vorarbeit
+Vorarbeiten
+Vorarbeiter
+Vorarbeiterin
+Vorarbeiterinnen
+Vorarbeitern
+Vorarbeiters
+Vorarlberg
+Vorausbestimmung
+Vorausbestimmungen
+Vorauskasse
+Vorausschätzung
+Voraussetzung
+Voraussetzungen
+Voraussicht
+Voraussichten
+Vorauswahl
+Vorauszahlung
+Vorauszahlungen
+Vorbau
+Vorbaues
+Vorbaus
+Vorbedacht
+Vorbedeutung
+Vorbedeutungen
+Vorbedingung
+Vorbedingungen
+Vorbehalt
+Vorbehalte
+Vorbehalten
+Vorbehalts
+Vorbemerkung
+Vorbemerkungen
+Vorbereitung
+Vorbereitungen
+Vorbereitungsprogramm
+Vorbereitungsprogramme
+Vorbereitungsprogrammen
+Vorbereitungsprogramms
+Vorbereitungszeit
+Vorbericht
+Vorberichte
+Vorberichten
+Vorberichtes
+Vorbesetzung
+Vorbesetzungen
+Vorbesprechung
+Vorbesprechungen
+Vorbestellung
+Vorbestellungen
+Vorbestrafung
+Vorbestrafungen
+Vorbeugung
+Vorbeugungen
+Vorbeugungsmaßnahme
+Vorbeugungsmaßnahmen
+Vorbeugungsmittel
+Vorbeugungsmitteln
+Vorbild
+Vorbilder
+Vorbildern
+Vorbildfunktion
+Vorbildfunktionen
+Vorbildung
+Vorbote
+Vorboten
+Vordenker
+Vorderansicht
+Vorderansichten
+Vorderasien
+Vordergrund
+Vordergrundes
+Vordergründe
+Vordergründen
+Vorderpratze
+Vorderpratzen
+Vorderreihe
+Vorderreihen
+Vorderseite
+Vorderseiten
+Vorderteil
+Vorderteile
+Vorderteilen
+Vorderteiles
+Vordiplom
+Vordiplome
+Vordiplomen
+Vordiploms
+Vordruck
+Vordrucke
+Vordrucken
+Vordruckes
+Vordrucks
+Voreiligkeit
+Voreilung
+Voreingenommenheit
+Voreinstellung
+Voreinstellungen
+Vorenthaltung
+Vorenthaltungen
+Vorentwurf
+Vorentwurfs
+Vorfahr
+Vorfahren
+Vorfaktor
+Vorfaktoren
+Vorfaktors
+Vorfall
+Vorfalls
+Vorfrage
+Vorfragen
+Vorfreude
+Vorfreuden
+Vorfälle
+Vorfällen
+Vorführung
+Vorführungen
+Vorführzwecke
+Vorführzwecken
+Vorgabe
+Vorgaben
+Vorgabewert
+Vorgabewerte
+Vorgabewerten
+Vorgabewerts
+Vorgang
+Vorganges
+Vorgangs
+Vorgefühl
+Vorgefühle
+Vorgefühlen
+Vorgefühles
+Vorgefühls
+Vorgehens
+Vorgehensweise
+Vorgehensweisen
+Vorgeschichte
+Vorgeschmack
+Vorgeschmäcke
+Vorgeschmäcken
+Vorgespräch
+Vorgespräche
+Vorgesprächen
+Vorgesprächs
+Vorgriff
+Vorgriffe
+Vorgriffen
+Vorgriffes
+Vorgänge
+Vorgängen
+Vorgänger
+Vorgängerin
+Vorgängerinnen
+Vorgängern
+Vorgängers
+Vorgängerversion
+Vorgängerversionen
+Vorhabens
+Vorhaltung
+Vorhaltungen
+Vorhandensein
+Vorhandenseins
+Vorhang
+Vorhanges
+Vorhangs
+Vorherbestimmung
+Vorherbestimmungen
+Vorherrschaft
+Vorhersehens
+Vorhinein
+Vorhänge
+Vorhängen
+Vorhängeschloss
+Vorhängeschlosses
+Vorhäute
+Vorhäuten
+Vorjahr
+Vorjahre
+Vorjahren
+Vorjahres
+Vorkasse
+Vorkauf
+Vorkaufes
+Vorkaufs
+Vorkaufsrecht
+Vorkaufsrechte
+Vorkaufsrechten
+Vorkaufsrechtes
+Vorkaufsrechts
+Vorkehrung
+Vorkehrungen
+Vorkehrungsmaßnahme
+Vorkehrungsmaßnahmen
+Vorkenntnis
+Vorkenntnisse
+Vorkenntnissen
+Vorkommens
+Vorkommnis
+Vorkommnisse
+Vorkommnissen
+Vorkommnisses
+Vorkosten
+Vorkämpfer
+Vorkämpferin
+Vorkämpferinnen
+Vorkämpfern
+Vorkämpfers
+Vorkäufe
+Vorkäufen
+Vorladung
+Vorladungen
+Vorlage
+Vorlagen
+Vorlageweg
+Vorlauf
+Vorlaufes
+Vorlaufs
+Vorleben
+Vorlebens
+Vorleger
+Vorlegern
+Vorlegers
+Vorleistung
+Vorleser
+Vorlesern
+Vorlesung
+Vorlesungen
+Vorlesungsverzeichnis
+Vorlesungsverzeichnisse
+Vorlesungsverzeichnissen
+Vorlesungsverzeichnisses
+Vorliebe
+Vorlieben
+Vorläufe
+Vorläufen
+Vorläufer
+Vorläuferin
+Vorläuferinnen
+Vorläufern
+Vorläufers
+Vorläufigkeit
+Vormachtrolle
+Vormachtrollen
+Vormachtstellung
+Vormarsch
+Vormarsches
+Vormittag
+Vormittage
+Vormittagen
+Vormittags
+Vormonat
+Vormonats
+Vormund
+Vormunde
+Vormunden
+Vormundes
+Vormundschaft
+Vormundschaften
+Vorname
+Vornamen
+Vornamens
+Vornehmheit
+Vorort
+Vororte
+Vororten
+Vorortes
+Vororts
+Vorplanung
+Vorposten
+Vorpostens
+Vorproduktstadium
+Vorproduktstadiums
+Vorprogrammieren
+Vorprojekt
+Vorprüfung
+Vorprüfungen
+Vorrang
+Vorranges
+Vorrangs
+Vorrat
+Vorrates
+Vorrats
+Vorratskammer
+Vorratskammern
+Vorratsspeicher
+Vorratsspeichers
+Vorraum
+Vorraumes
+Vorraums
+Vorrecht
+Vorrechte
+Vorrechten
+Vorrechts
+Vorredner
+Vorrednern
+Vorredners
+Vorrichtung
+Vorrichtungen
+Vorruhestand
+Vorrunde
+Vorrunden
+Vorräte
+Vorräten
+Vorräume
+Vorräumen
+Vorsaison
+Vorsatz
+Vorschau
+Vorschein
+Vorschieben
+Vorschiebens
+Vorschlag
+Vorschlages
+Vorschlags
+Vorschlagsrecht
+Vorschläge
+Vorschlägen
+Vorschrift
+Vorschriften
+Vorschub
+Vorschubes
+Vorschubs
+Vorschule
+Vorschulen
+Vorschuss
+Vorschusses
+Vorschussrunde
+Vorschussrunden
+Vorschübe
+Vorschüben
+Vorschüsse
+Vorschüssen
+Vorsehung
+Vorsehungen
+Vorsicht
+Vorsichtsmaßnahme
+Vorsichtsmaßnahmen
+Vorsichtsmaßregel
+Vorsichtsmaßregeln
+Vorsilbe
+Vorsilben
+Vorsitz
+Vorsitze
+Vorsitzen
+Vorsitzer
+Vorsitzern
+Vorsitzes
+Vorsorgeplanung
+Vorspann
+Vorspannes
+Vorspanns
+Vorspannung
+Vorspeise
+Vorspeisen
+Vorspiel
+Vorspiele
+Vorspielen
+Vorspiels
+Vorsprung
+Vorsprungs
+Vorsprünge
+Vorsprüngen
+Vorstadt
+Vorstand
+Vorstandes
+Vorsteher
+Vorsteherin
+Vorsteherinnen
+Vorstehern
+Vorstehers
+Vorstellung
+Vorstellungen
+Vorstellungsgespräch
+Vorstellungsgespräche
+Vorstellungsgesprächen
+Vorstellungsgesprächs
+Vorstellungsvermögen
+Vorstellungsvermögens
+Vorsteuerventil
+Vorsteuerventile
+Vorsteuerventilen
+Vorsteuerventils
+Vorstoß
+Vorstoßes
+Vorstrafe
+Vorstrafen
+Vorstudie
+Vorstudien
+Vorstudium
+Vorstudiums
+Vorstufe
+Vorstufen
+Vorstädte
+Vorstädten
+Vorstädter
+Vorstädterin
+Vorstädterinnen
+Vorstädtern
+Vorstädters
+Vorstände
+Vorständen
+Vorstöße
+Vorstößen
+Vorsänger
+Vorsängerin
+Vorsängerinnen
+Vorsängern
+Vorsängers
+Vorsätze
+Vorsätzen
+Vortag
+Vortage
+Vortagen
+Vortages
+Vortags
+Vorteil
+Vorteile
+Vorteilen
+Vorteiles
+Vorteils
+Vortrag
+Vortrages
+Vortrags
+Vortragsblock
+Vortragskunst
+Vortragskünste
+Vortragskünsten
+Vortragskünstler
+Vortragskünstlerin
+Vortragskünstlerinnen
+Vortragskünstlern
+Vortragskünstlers
+Vortragsreise
+Vortragsreisen
+Vortragsthema
+Vortrieb
+Vortriebs
+Vortritt
+Vortritte
+Vortritten
+Vortritts
+Vorträge
+Vorträgen
+Vortäuschung
+Vortäuschungen
+Voruntersuchung
+Voruntersuchungen
+Vorurteil
+Vorurteile
+Vorurteilen
+Vorurteils
+Vorverarbeitung
+Vorverlegung
+Vorverlegungen
+Vorverstärker
+Vorverstärkern
+Vorverstärkers
+Vorversuche
+Vorversuchen
+Vorvertrag
+Vorvertrages
+Vorvertrags
+Vorverträge
+Vorverträgen
+Vorväter
+Vorvätern
+Vorwahl
+Vorwahlen
+Vorwand
+Vorwandes
+Vorwands
+Vorwarnung
+Vorwarnungen
+Vorwiderstand
+Vorwiderstände
+Vorwissen
+Vorwissens
+Vorwoche
+Vorwochen
+Vorwort
+Vorworte
+Vorworten
+Vorworts
+Vorwurf
+Vorwurfs
+Vorwählnummer
+Vorwählnummern
+Vorwände
+Vorwänden
+Vorwärtsfahren
+Vorwärtsfahrens
+Vorwärtsrichtung
+Vorwürfe
+Vorwürfen
+Vorzeichen
+Vorzeichenregel
+Vorzeichenregeln
+Vorzeichens
+Vorzensur
+Vorzensuren
+Vorzug
+Vorzuges
+Vorzugs
+Vorzugsrichtung
+Vorzugsrichtungen
+Vorzugsstellung
+Vorzugsstellungen
+Vorzüge
+Vorzügen
+Vorüberlegung
+Vorüberlegungen
+Vorübung
+Vorübungen
+Votum
+Voyeur
+Voyeure
+Voyeuren
+Voyeurismus
+Voyeurs
+Vulkan
+Vulkane
+Vulkanen
+Vulkans
+Väter
+Väterchen
+Väterchens
+Vätern
+Vögel
+Vöglein
+Vögleins
+Vögte
+Vögten
+Völker
+Völkern
+Völlerei
+WC
+WDR
+WM
+Waage
+Waagen
+Waagschale
+Waagschalen
+Wabe
+Waben
+Wacholder
+Wacholdern
+Wacholders
+Wachs
+Wachsamkeit
+Wachses
+Wachstum
+Wachstums
+Wachstumsphase
+Wachstumsphasen
+Wachstumspolitik
+Wachstumsprozess
+Wachstumsprozesse
+Wachstumsprozessen
+Wachstumsprozesses
+Wachstumsrate
+Wachstumsraten
+Wachstumsrichtung
+Wachstumsrichtungen
+Wachtel
+Wachteln
+Wackelkontakt
+Wackelkontakte
+Wackelkontakten
+Wackelkontaktes
+Wackelkontakts
+Wackersdorf
+Wackler
+Wade
+Waden
+Wadi
+Wadis
+Waffe
+Waffel
+Waffeln
+Waffen
+Wagehals
+Wagehalses
+Wagehälse
+Wagehälsen
+Wagemut
+Wagemuts
+Wagen
+Wagenladung
+Wagenladungen
+Wagenrad
+Wagenräder
+Wagenrädern
+Wagens
+Waggon
+Waggons
+Waghalsigkeit
+Waghalsigkeiten
+Wagner
+Wagners
+Wagnis
+Wagnisse
+Wagnissen
+Wagnisses
+Wagon
+Wagons
+Wahl
+Wahlen
+Wahlheimat
+Wahn
+Wahnbild
+Wahnbilder
+Wahnbildern
+Wahnbildes
+Wahnbilds
+Wahns
+Wahnsinn
+Wahnvorstellung
+Wahnvorstellungen
+Wahnwitz
+Wahrhaftigkeit
+Wahrheit
+Wahrheiten
+Wahrheitsbeweis
+Wahrheitsbeweise
+Wahrheitsbeweisen
+Wahrheitsbeweises
+Wahrheitsgehalt
+Wahrheitsliebe
+Wahrheitssucher
+Wahrheitswert
+Wahrheitswerte
+Wahrheitswerten
+Wahrheitswerts
+Wahrnehmung
+Wahrnehmungsvermögen
+Wahrnehmungsvermögens
+Wahrsager
+Wahrsagerei
+Wahrsagerin
+Wahrsagerinnen
+Wahrsagern
+Wahrsagers
+Wahrscheinlichkeit
+Wahrscheinlichkeiten
+Wahrscheinlichkeitsfunktion
+Wahrscheinlichkeitsfunktionen
+Wahrscheinlichkeitsrechnung
+Wahrscheinlichkeitsrechnungen
+Wahrscheinlichkeitstheorie
+Wahrscheinlichkeitsverteilung
+Wahrscheinlichkeitsverteilungen
+Wahrspruch
+Wahrspruchs
+Wahrsprüche
+Wahrsprüchen
+Wahrung
+Wahrungen
+Wahrzeichen
+Wahrzeichens
+Waidmann
+Waidmanns
+Waidmänner
+Waidmännern
+Waise
+Waisen
+Waisenhaus
+Waisenhauses
+Waisenhäuser
+Waisenhäusern
+Waisenkind
+Waisenkinder
+Waisenkindern
+Waisenkindes
+Waisenknabe
+Waisenknaben
+Wal
+Wald
+Walde
+Waldes
+Wale
+Walen
+Wales
+Walhalla
+Walküre
+Wall
+Wallach
+Wallache
+Wallachen
+Wallachs
+Wallenstein
+Wallensteins
+Wallfahrer
+Wallfahrern
+Wallfahrers
+Wallfahrt
+Wallfahrten
+Wallraff
+Wallraffs
+Walls
+Wallung
+Walnuss
+Walnüsschen
+Walnüsschens
+Walnüsse
+Walnüssen
+Walter
+Walters
+Walther
+Walthers
+Waltraud
+Waltrauds
+Walze
+Walzen
+Wams
+Wamses
+Wand
+Wandel
+Wandelbarkeit
+Wandels
+Wanderer
+Wanderern
+Wanderers
+Wanderin
+Wanderinnen
+Wanderschaft
+Wanderung
+Wanderungen
+Wandler
+Wandlern
+Wandlers
+Wandlung
+Wandlungen
+Wange
+Wangen
+Wankelmotor
+Wankelmotoren
+Wankelmotors
+Wankelmut
+Wankelmutes
+Wanne
+Wannen
+Wannsee
+Wanst
+Wanstes
+Wanze
+Wanzen
+Wappen
+Wappens
+Ware
+Warenhaus
+Warenhauses
+Warenhäuser
+Warenhäusern
+Warenkorb
+Warenkorbs
+Warenzeichen
+Warenzeichens
+Warhol
+Warhols
+Warmlauf
+Warmlaufphase
+Warmlaufphasen
+Warmlaufs
+Warmläufe
+Warmläufen
+Warngrenze
+Warngrenzen
+Warnmeldung
+Warnsignal
+Warnsignale
+Warnsignalen
+Warnsignals
+Warnung
+Warnungen
+Warnzeichen
+Warnzeichens
+Warrant
+Warrants
+Warschau
+Wartbarkeit
+Warteliste
+Wartelisten
+Wartens
+Warteposition
+Wartepositionen
+Warteposten
+Wartepostens
+Warteraum
+Warteraumes
+Warteraums
+Warteräume
+Warteräumen
+Wartesaal
+Warteschlange
+Warteschlangen
+Wartesäle
+Wartesälen
+Wartezeit
+Wartezeiten
+Wartezimmer
+Wartezimmern
+Wartezimmers
+Wartezustand
+Wartezustandes
+Wartezustands
+Wartezyklus
+Wartung
+Wartungen
+Wartungsanleitung
+Wartungsanleitungen
+Wartungsarbeit
+Wartungsarbeiten
+Wartungsaufwand
+Wartungsbestimmung
+Wartungsbestimmungen
+Wartungsdaten
+Wartungsfall
+Wartungsgebühr
+Wartungsgebühren
+Wartungsintervall
+Wartungsintervalle
+Wartungsintervallen
+Wartungsintervalls
+Wartungsmaßnahme
+Wartungsmaßnahmen
+Wartungsprozess
+Wartungsprozesse
+Wartungsprozessen
+Wartungsprozesses
+Wartungssoftware
+Wartungsunterlagen
+Wartungsvertrag
+Wartungsvertrages
+Wartungsvertrags
+Wartungsverträge
+Wartungsverträgen
+Wartungszeit
+Wartungszeiten
+Wartungszwecke
+Wartungszwecken
+Wartungszyklen
+Warze
+Warzen
+Washington
+Wasser
+Wassers
+Wasserzeichen
+Wasserzeichens
+Waterloo
+Waterloos
+Watsche
+Watschen
+Watt
+Watte
+Watten
+Watts
+Weber
+Weberei
+Webereien
+Weberin
+Weberinnen
+Webern
+Webers
+Website
+Websites
+Wechsel
+Wechselbad
+Wechselbeziehung
+Wechselbeziehungen
+Wechselbäder
+Wechselbädern
+Wechselbälge
+Wechselbälgen
+Wechselfälle
+Wechselfällen
+Wechselgeld
+Wechselgelder
+Wechselgeldern
+Wechselgespräch
+Wechselgespräche
+Wechselgesprächen
+Wechselgesprächs
+Wechseljahre
+Wechseljahren
+Wechselspannung
+Wechselspannungen
+Wechselspiel
+Wechselspiele
+Wechselspielen
+Wechselspiels
+Wechselstrom
+Wechselstroms
+Wechselströme
+Wechselströmen
+Wechselwirkung
+Wechselwirkungen
+Wechte
+Wechten
+Wecker
+Weckern
+Weckers
+Wedel
+Wedeln
+Wedels
+Weg
+Wegbereich
+Wegbereichs
+Wegbereiter
+Wegbereitern
+Wegbereitung
+Wege
+Wegebau
+Wegelagerer
+Wegelagerern
+Wegelagerers
+Wegemessung
+Wegerecht
+Wegerechte
+Wegerechten
+Wegerechts
+Wegerich
+Wegeriche
+Wegerichen
+Wegerichs
+Weges
+Wegfall
+Wegfalls
+Wegfälle
+Wegfällen
+Weggang
+Weggangs
+Weggeber
+Weggänge
+Weggängen
+Wegkontrolle
+Wegkontrollen
+Weglassung
+Weglassungen
+Weglänge
+Weglängen
+Wegmarkierung
+Wegmesser
+Wegmessung
+Wegmessungen
+Wegnahme
+Wegs
+Wegstrecke
+Wegstrecken
+Wegunterschied
+Wegweiser
+Wegweisern
+Wegweisers
+Wegwerfgesellschaft
+Wegzehrung
+Wegzehrungen
+Weh
+Wehgeschrei
+Wehgeschreis
+Wehmut
+Wehr
+Wehrlosigkeit
+Wehrpass
+Wehrpasses
+Wehrpflicht
+Wehrpflichten
+Wehrpässe
+Wehrpässen
+Weib
+Weibchen
+Weibchens
+Weibe
+Weiber
+Weibervolk
+Weibervölker
+Weibervölkern
+Weibes
+Weiblichkeit
+Weichheit
+Weichherzigkeit
+Weichling
+Weichlinge
+Weichlingen
+Weichlings
+Weichsel
+Weigerung
+Weigerungen
+Weihe
+Weihen
+Weiher
+Weihern
+Weihnacht
+Weihnachten
+Weiler
+Weilern
+Weimar
+Weimarer
+Wein
+Weins
+Weinschänke
+Weintraube
+Weintrauben
+Weisheit
+Weisheiten
+Weissager
+Weissagerin
+Weissagerinnen
+Weissagern
+Weissagers
+Weissagung
+Weisung
+Weisungen
+Weitblick
+Weitblicks
+Weiterarbeit
+Weiterausbau
+Weiterbeschäftigung
+Weiterbestand
+Weiterbestands
+Weiterbildung
+Weiterentwicklung
+Weiterentwicklungen
+Weiterführung
+Weitergabe
+Weiterleitung
+Weiterleitungen
+Weitermelden
+Weiterschalten
+Weiterschauen
+Weiterverarbeitung
+Weiterverfolgung
+Weiterverkauf
+Weiterverkaufs
+Weiterverkäufe
+Weiterverkäufen
+Weiterzahlung
+Weitläufigkeit
+Weitschweifigkeit
+Weitsichtigkeit
+Weizen
+Weizens
+Weißrussland
+Wellenfunktion
+Wellenfunktionen
+Wellington
+Wellingtons
+Welpe
+Welpen
+Welt
+Weltall
+Weltalls
+Weltanschauung
+Weltanschauungen
+Weltbevölkerung
+Weltbild
+Weltbilder
+Weltbildern
+Weltbildes
+Weltbilds
+Welten
+Welterfahrung
+Welterfahrungen
+Weltformat
+Weltgeltung
+Weltgeltungen
+Weltgeschehen
+Weltgeschichte
+Weltgewandtheit
+Weltkarte
+Weltkarten
+Weltkenntnis
+Weltkenntnisse
+Weltkenntnissen
+Weltklasse
+Weltkrieg
+Weltkriege
+Weltkriegen
+Weltkrieges
+Weltkriegs
+Weltlage
+Weltlagen
+Weltliteratur
+Weltmeer
+Weltmeere
+Weltmeeren
+Weltmeers
+Weltmeister
+Weltmeisterin
+Weltmeisterinnen
+Weltmeistern
+Weltmeisters
+Weltmodell
+Weltmodelle
+Weltmodellen
+Weltmodells
+Weltmächte
+Weltmächten
+Weltoffenheit
+Weltordnung
+Weltordnungen
+Weltpolitik
+Weltpolitiken
+Weltpremiere
+Weltpremieren
+Weltraum
+Weltraumes
+Weltraums
+Weltruhm
+Weltschmerz
+Weltschmerzes
+Weltstadt
+Weltstar
+Weltstädte
+Weltstädten
+Weltteil
+Weltteile
+Weltteilen
+Weltteils
+Weltuntergang
+Weltuntergangs
+Weltwirtschaft
+Weltwunder
+Weltwundern
+Weltwunders
+Wembleystadion
+Wendepunkt
+Wendepunkte
+Wendepunkten
+Wendepunkts
+Wendigkeit
+Wendung
+Wendungen
+Wenigkeit
+Werber
+Werbern
+Werbung
+Werbungen
+Werbungskosten
+Werdegang
+Werder
+Werders
+Werft
+Werften
+Werk
+Werkbank
+Werkbänke
+Werkbänken
+Werkes
+Werkhalle
+Werkhallen
+Werkmeister
+Werkmeisterin
+Werkmeisterinnen
+Werkmeistern
+Werkmeisters
+Werks
+Werksangehörige
+Werksangehörigen
+Werksangehöriger
+Werkschutz
+Werkschutzes
+Werkshalle
+Werkshallen
+Werksleitung
+Werkspionage
+Werkspionagen
+Werkstatt
+Werkstoff
+Werkstoffe
+Werkstoffen
+Werkstoffs
+Werkstudent
+Werkstudenten
+Werkstudentin
+Werkstudentinnen
+Werkstätte
+Werkstätten
+Werkstück
+Werkstücke
+Werkstücken
+Werkstücks
+Werksvertretung
+Werkswohnung
+Werkswohnungen
+Werktag
+Werktage
+Werktagen
+Werktages
+Werktags
+Werktisch
+Werktische
+Werktischen
+Werktisches
+Werkverkehr
+Werkvertrag
+Werkvertrags
+Werkverträge
+Werkverträgen
+Werkzeug
+Werkzeuge
+Werkzeugen
+Werkzeugs
+Wermut
+Wermuts
+Wermutstropfen
+Wermutstropfens
+Werner
+Werners
+Wert
+Wertangabe
+Wertangaben
+Wertannahme
+Wertanteil
+Wertanteile
+Wertanteilen
+Wertanteils
+Wertarbeit
+Wertarbeiten
+Werte
+Wertebereich
+Wertebereichs
+Wertegruppe
+Wertegruppen
+Werteliste
+Wertelisten
+Wertentwicklung
+Wertepaare
+Wertepaaren
+Wertepakete
+Wertepaketen
+Werterhöhung
+Werterhöhungen
+Wertermittlung
+Wertevorrat
+Wertgegenstand
+Wertgegenstände
+Wertgegenständen
+Werthaltung
+Wertigkeit
+Wertigkeiten
+Wertmaßstab
+Wertmaßstabes
+Wertmaßstabs
+Wertmaßstäbe
+Wertmaßstäben
+Wertmesser
+Wertmessern
+Wertminderung
+Wertminderungen
+Wertsache
+Wertsachen
+Wertschätzung
+Wertschätzungen
+Wertstatus
+Wertsteigerung
+Wertsteigerungen
+Wertung
+Wertungen
+Werturteil
+Werturteile
+Werturteilen
+Werturteils
+Wertverlust
+Wertverringerung
+Wertverringerungen
+Wertvorstellung
+Wertvorstellungen
+Wertwandel
+Wertwandels
+Wertzeichen
+Wertzeichens
+Wertzuwachs
+Wertzuwachses
+Wertzuweisung
+Wertzuweisungen
+Werwolf
+Wesen
+Wesenheit
+Wesenheiten
+Wesens
+Wesensmerkmal
+Wesensmerkmale
+Wesensmerkmalen
+Wesensmerkmals
+Wesenszug
+Wesenszugs
+Wesenszüge
+Wesenszügen
+Weser
+Wesermündung
+Wespe
+Wespen
+Westafrika
+Westberliner
+Westdeutschland
+Weste
+Westen
+Westens
+Westentasche
+Westentaschen
+Westentaschenformat
+Westentaschenformate
+Westentaschenformaten
+Westentaschenformats
+Western
+Westeuropa
+Westeuropäer
+Westeuropäern
+Westfale
+Westfalen
+Westfrankreich
+Westfälin
+Westfälinnen
+Westgoten
+Westminster
+Westminsterabtei
+Westsibiriens
+Wettbewerb
+Wettbewerbe
+Wettbewerben
+Wettbewerber
+Wettbewerberin
+Wettbewerberinnen
+Wettbewerbern
+Wettbewerbers
+Wettbewerbs
+Wettbewerbsverhältnis
+Wettbewerbsverhältnisse
+Wettbewerbsverhältnissen
+Wettbewerbsverhältnisses
+Wettbüro
+Wetteifer
+Wetter
+Wetters
+Wettfahrt
+Wettfahrten
+Wettfliegen
+Wettfliegens
+Wettflug
+Wettfluges
+Wettflugs
+Wettflüge
+Wettflügen
+Wettgesang
+Wettgesangs
+Wettgesänge
+Wettgesängen
+Wettkampf
+Wettkampfsiege
+Wettkampfsiegen
+Wettkämpfe
+Wettkämpfen
+Wettkämpfer
+Wettkämpferin
+Wettkämpferinnen
+Wettkämpfern
+Wettkämpfers
+Wettlauf
+Wettlaufs
+Wettläufe
+Wettläufen
+Wettläufer
+Wettläuferin
+Wettläuferinnen
+Wettläufern
+Wettläufers
+Wettrennen
+Wettrennens
+Wettrudern
+Wettruderns
+Wettrüsten
+Wettrüstens
+Wettschwimmen
+Wettschwimmens
+Wettsegeln
+Wettsegelns
+Wettspiel
+Wettspiele
+Wettspielen
+Wettspiels
+Wettstreit
+Wettstreits
+Wettzettel
+Wettzetteln
+Wetzstahl
+Wetzstahle
+Wetzstahlen
+Wetzstahls
+Wetzstein
+Wetzsteine
+Wetzsteinen
+Wetzsteins
+Wheatcraft
+Wheatcrafts
+Whisky
+Whiskys
+Whoopy
+Whoopys
+Wichte
+Wichten
+Wichtigkeit
+Wichtigtuer
+Wichtigtuerei
+Wichtigtuereien
+Wichtigtuerin
+Wichtigtuerinnen
+Wichtigtuern
+Wichtigtuers
+Wicke
+Wickel
+Wickelkind
+Wickelkinder
+Wickelkindern
+Wickelrichtung
+Wickels
+Wickelung
+Wickelungen
+Wicken
+Wicklung
+Wicklungen
+Widder
+Widdern
+Widders
+Widerhaken
+Widerhakens
+Widerhall
+Widerhalls
+Widerlager
+Widerlegung
+Widerlegungen
+Widerlichkeit
+Widerlichkeiten
+Widerpart
+Widerparte
+Widerparten
+Widerparts
+Widerrede
+Widerreden
+Widerruf
+Widersacher
+Widersacherin
+Widersacherinnen
+Widersachern
+Widersachers
+Widerschein
+Widerscheins
+Widersetzlichkeit
+Widersetzlichkeiten
+Widersinn
+Widersinns
+Widerspenstigkeit
+Widerspenstigkeiten
+Widerspruch
+Widerspruchsgeist
+Widerspruchsgeistes
+Widerspruchslosigkeit
+Widersprüche
+Widersprüchen
+Widersprüchlichkeit
+Widersprüchlichkeiten
+Widerstand
+Widerstandes
+Widerstands
+Widerstandskraft
+Widerstandskräfte
+Widerstandskräften
+Widerstreit
+Widerstreits
+Widerstände
+Widerständen
+Widerwille
+Widerwillen
+Widerwärtigkeit
+Widmung
+Widmungen
+Widrigkeit
+Widrigkeiten
+Wiedehopf
+Wiedehopfe
+Wiedehopfen
+Wiedehopfs
+Wiederabdruck
+Wiederabdrücke
+Wiederabdrücken
+Wiederanfang
+Wiederanfangs
+Wiederanfänge
+Wiederanfängen
+Wiederanlage
+Wiederanlagen
+Wiederanstellung
+Wiederanstellungen
+Wiederaufbau
+Wiederaufbaus
+Wiederauferstehung
+Wiederauferstehungen
+Wiederaufnahme
+Wiederaufnahmen
+Wiederaufqqführung
+Wiederauftreten
+Wiederauftretens
+Wiederbeginn
+Wiederbeginns
+Wiederbelebung
+Wiederbelebungen
+Wiederbesetzung
+Wiedereinbau
+Wiedereinführung
+Wiedereinführungen
+Wiedereingliederung
+Wiedereingliederungen
+Wiedereinlösung
+Wiedereinlösungen
+Wiedereinnahme
+Wiedereinnahmen
+Wiedereinschalten
+Wiedereinschaltens
+Wiedereinschiffung
+Wiedereinschiffungen
+Wiedereinstellung
+Wiedereinstellungen
+Wiederergreifung
+Wiedererkennung
+Wiedererkennungen
+Wiedererlangung
+Wiedererreichen
+Wiedererreichens
+Wiedererstattung
+Wiedererstattungen
+Wiedereröffnung
+Wiedereröffnungen
+Wiedergabe
+Wiedergaben
+Wiedergeburt
+Wiedergeburten
+Wiedergenesung
+Wiedergenesungen
+Wiedergutmachung
+Wiedergutmachungen
+Wiederherstellung
+Wiederherstellungen
+Wiederholbarkeit
+Wiederholrate
+Wiederholraten
+Wiederholung
+Wiederholungen
+Wiederholungsfall
+Wiederholungsfalles
+Wiederholungsfalls
+Wiederholungsfälle
+Wiederholungsfällen
+Wiederholvorwahl
+Wiederholzeit
+Wiederinbetriebnahme
+Wiederkauf
+Wiederkaufs
+Wiederkehr
+Wiederkäufe
+Wiederkäufen
+Wiederkünfte
+Wiederkünften
+Wiederlösen
+Wiedersehen
+Wiedersehens
+Wiedersehensfreude
+Wiedersehensfreuden
+Wiederstand
+Wiederstandbewegung
+Wiedertaufe
+Wiedertaufen
+Wiedertäufer
+Wiedertäufern
+Wiedertäufers
+Wiedervereinigung
+Wiederverwendbarkeit
+Wiederverwendung
+Wiederverwertung
+Wiederwahl
+Wiederwahlen
+Wiederzulassung
+Wiederzulassungen
+Wiegenfest
+Wiegenfeste
+Wiegenfesten
+Wiegenfestes
+Wiegenkind
+Wiegenkinder
+Wiegenkindern
+Wiegenkinds
+Wiegenlied
+Wiegenlieder
+Wiegenliedern
+Wiegenlieds
+Wieland
+Wielands
+Wien
+Wiener
+Wienerin
+Wienerinnen
+Wieners
+Wienerwald
+Wiesbaden
+Wiese
+Wiesel
+Wieseln
+Wiesels
+Wiesen
+Wikinger
+Wildcard
+Wildcards
+Wilhelm
+Wilhelms
+Wille
+Willen
+Willenlosigkeit
+Willenlosigkeiten
+Willensakt
+Willensakte
+Willensakten
+Willensakts
+Willensbildung
+Willenseinstellung
+Willenserklärung
+Willenserklärungen
+Willensfreiheit
+Willensfreiheiten
+Willenskraft
+Willenskräfte
+Willenskräften
+Willensschwäche
+Willensschwächen
+Willensstärke
+Willensstärken
+Willensäußerung
+Willensäußerungen
+Willi
+Willis
+Willkür
+Willkürakt
+Willkürakte
+Willkürakten
+Willkürakts
+Willkürlichkeit
+Willy
+Willys
+Wim
+Wimmerl
+Wimmerln
+Wimmerls
+Wimpel
+Wimper
+Wimpern
+Wims
+Winchester
+Wind
+Windel
+Windeln
+Windes
+Windeseile
+Windschatten
+Windschattens
+Windsor
+Windsors
+Windung
+Windungen
+Windungszahl
+Windungszahlen
+Winfried
+Winfrieds
+Wink
+Winkel
+Winkeln
+Winkels
+Winkelzug
+Winkelzugs
+Winkelzüge
+Winkelzügen
+Winker
+Winkern
+Winkers
+Winks
+Winkspruch
+Winkspruchs
+Winksprüche
+Winksprüchen
+Winter
+Winterhalbjahr
+Winterhalbjahre
+Winterhalbjahren
+Winterhalbjahrs
+Wintern
+Winters
+Wintersemester
+Wintersemestern
+Wintersemesters
+Wintershall
+Winterthur
+Winzer
+Winzerin
+Winzerinnen
+Winzern
+Winzers
+Winzling
+Winzlinge
+Winzlingen
+Winzlings
+Wipfel
+Wipfeln
+Wipfels
+Wirbel
+Wirkens
+Wirker
+Wirkerin
+Wirkerinnen
+Wirkern
+Wirkers
+Wirklichkeit
+Wirklichkeiten
+Wirksamkeit
+Wirkstoff
+Wirkstoffe
+Wirkstoffen
+Wirkstoffs
+Wirkung
+Wirkungen
+Wirkungsbereich
+Wirkungsbereiche
+Wirkungsbereichen
+Wirkungsbereichs
+Wirkungsgrad
+Wirkungsgrads
+Wirkungskreis
+Wirkungskreise
+Wirkungskreisen
+Wirkungskreises
+Wirkungskräfte
+Wirkungskräften
+Wirkungslosigkeit
+Wirkungsmöglichkeit
+Wirkungsmöglichkeiten
+Wirkungsoptimum
+Wirkungsquantum
+Wirkungsweise
+Wirkungsweisen
+Wirrkopf
+Wirrkopfs
+Wirrköpfe
+Wirrköpfen
+Wirrnis
+Wirrnisse
+Wirrnissen
+Wirrsal
+Wirrsale
+Wirrsalen
+Wirrung
+Wirrungen
+Wirrwarr
+Wirrwarrs
+Wirsingkohl
+Wirsingkohle
+Wirsingkohlen
+Wirsingkohls
+Wirt
+Wirte
+Wirten
+Wirtin
+Wirtinnen
+Wirts
+Wirtschaft
+Wirtschafter
+Wirtschafterin
+Wirtschafterinnen
+Wirtschaftern
+Wirtschafters
+Wirtschaftler
+Wirtschaftlerin
+Wirtschaftlerinnen
+Wirtschaftlern
+Wirtschaftlers
+Wirtschaftlichkeit
+Wirtschaftswissenschaft
+Wirtschaftswissenschaften
+Wirtshaus
+Wirtshauses
+Wirtshäuser
+Wirtshäusern
+Wirtssprache
+Wirtssprachen
+Wisch
+Wischer
+Wischern
+Wischers
+Wischlappen
+Wischlappens
+Wisent
+Wisents
+Wissbegierde
+Wissbegierden
+Wissens
+Wissensakquisitionskomponente
+Wissensakquisitionskomponenten
+Wissensbasen
+Wissensbasis
+Wissenschaft
+Wissenschaften
+Wissenschaftler
+Wissenschaftlerin
+Wissenschaftlerinnen
+Wissenschaftlern
+Wissenschaftlers
+Wissenschaftsrat
+Wissenschaftsrates
+Wissensdrang
+Wissensdrangs
+Wissensdränge
+Wissensdrängen
+Wissensdurst
+Wissensdursts
+Wissensform
+Wissensformen
+Wissensgebiet
+Wissensgebiete
+Wissensgebieten
+Wissensgebiets
+Wissenslücke
+Wissenslücken
+Wissensrepräsentationsformalismen
+Wissensrepräsentationsformalismus
+Wissensschatz
+Wissensschatzes
+Wissensschätze
+Wissensschätzen
+Wissensstand
+Wissenstand
+Wissenstrieb
+Wissenstriebe
+Wissenstrieben
+Wissenstriebs
+Wissensverarbeitung
+Wissensvermittlung
+Wissenszweig
+Wissenszweige
+Wissenszweigen
+Wissenszweigs
+Witterung
+Witterungen
+Witwe
+Witwen
+Witwer
+Witwern
+Witwers
+Witz
+Witzblatt
+Witzblatts
+Witzblätter
+Witzbold
+Witzbolde
+Witzbolden
+Witzboldes
+Witzbolds
+Witze
+Witzelei
+Witzeleien
+Witzen
+Witzes
+Witzigkeit
+Witzigkeiten
+Wladimir
+Wladimirs
+Wladiwostok
+Woche
+Wochen
+Wochenstunde
+Wochenstunden
+Wochentag
+Wochentage
+Wochentagen
+Wochentages
+Wochentags
+Woge
+Wogen
+Wohlbefinden
+Wohlbehagen
+Wohlbehagens
+Wohlergehen
+Wohlergehens
+Wohlfahrt
+Wohlfahrten
+Wohlgefallen
+Wohlgefallens
+Wohlgefühl
+Wohlgefühle
+Wohlgefühlen
+Wohlgefühls
+Wohlgeruch
+Wohlgeruchs
+Wohlgerüche
+Wohlgerüchen
+Wohlgeschmack
+Wohlgeschmacks
+Wohlgeschmäcker
+Wohlgeschmäckern
+Wohlhabenheit
+Wohlklang
+Wohlklangs
+Wohlklänge
+Wohlklängen
+Wohllaut
+Wohllaute
+Wohllauten
+Wohllauts
+Wohlleben
+Wohllebens
+Wohlsein
+Wohlseins
+Wohlstand
+Wohlstandes
+Wohlstands
+Wohlstände
+Wohlständen
+Wohltat
+Wohltäter
+Wohltäterin
+Wohltäterinnen
+Wohltätern
+Wohltäters
+Wohltätigkeit
+Wohnort
+Wohnorte
+Wohnorten
+Wohnortes
+Wohnorts
+Wohnsitz
+Wohnsitze
+Wohnsitzen
+Wohnsitzes
+Wohnung
+Wohnungen
+Wolf
+Wolfgang
+Wolfgangs
+Wolfram
+Wolframs
+Wolfs
+Wolfsburg
+Wolga
+Wolke
+Wolken
+Wolkenkuckucksland
+Wolkenkuckuckslands
+Wolkenkuckucksländer
+Wolkenkuckucksländern
+Wollens
+Wollust
+Wollüste
+Wollüsten
+Wollüstling
+Wollüstlinge
+Wollüstlingen
+Wollüstlings
+Wonne
+Wonnen
+Word
+Workshop
+Workshops
+Workstation
+Workstations
+Worms
+Wort
+Wortakzent
+Wortakzente
+Wortakzenten
+Wortakzents
+Wortanfang
+Wortanfanges
+Wortanfangs
+Wortarmut
+Wortart
+Wortbildung
+Wortbildungen
+Wortbreite
+Wortbreiten
+Wortbruch
+Wortbrüche
+Wortbrüchen
+Worte
+Worten
+Wortende
+Wortenden
+Wortes
+Wortfolge
+Wortfolgen
+Wortfuge
+Wortfugen
+Wortfügung
+Wortfügungen
+Wortführer
+Wortführerin
+Wortführerinnen
+Wortführern
+Wortführers
+Wortfülle
+Wortgefecht
+Wortgefechte
+Wortgefechten
+Wortgefechts
+Wortkargheit
+Wortklauber
+Wortklauberei
+Wortklaubereien
+Wortklauberin
+Wortklauberinnen
+Wortklaubern
+Wortklaubers
+Wortlaut
+Wortlaute
+Wortlauten
+Wortlauts
+Wortliste
+Wortlisten
+Wortmeldung
+Wortmeldungen
+Wortpaare
+Wortpaaren
+Worts
+Wortschatz
+Wortschatzes
+Wortschwall
+Wortschwalle
+Wortschwallen
+Wortschwalls
+Wortschätze
+Wortschätzen
+Wortsinn
+Wortsinne
+Wortsinnen
+Wortsinns
+Wortspiel
+Wortspiele
+Wortspielen
+Wortspiels
+Wortstamm
+Wortstamms
+Wortstellung
+Wortstellungen
+Wortstreit
+Wortstreite
+Wortstreiten
+Wortstreits
+Wortstämme
+Wortstämmen
+Wortteil
+Wortteile
+Wortteilen
+Wortteils
+Wortverdreher
+Wortverdreherin
+Wortverdreherinnen
+Wortverdrehern
+Wortverdrehers
+Wortverdrehung
+Wortverdrehungen
+Wortwahl
+Wortwechsel
+Wortwechseln
+Wotan
+Wrack
+Wrackgut
+Wrackguts
+Wrackgüter
+Wrackgütern
+Wracks
+Wrangler
+Wrestling
+Wucher
+Wucherer
+Wucherern
+Wucherers
+Wuchers
+Wucherung
+Wuchs
+Wuchses
+Wucht
+Wulst
+Wulstes
+Wunder
+Wunsch
+Wunsche
+Wunsches
+Wunschvorstellung
+Wunschvorstellungen
+Wunschzettel
+Wunschzetteln
+Wunschzettels
+Wurf
+Wurfgeschoß
+Wurfgeschoße
+Wurfgeschoßen
+Wurfgeschoßes
+Wurfs
+Wurm
+Wurms
+Wurst
+Wurzel
+Wurzelwort
+Wurzelworte
+Wurzelworten
+Wurzelworts
+Wurzelwörter
+Wurzelzeichen
+Wurzelzeichens
+Wurzelziehen
+Wurzelziehens
+Wust
+Wusts
+Wut
+Wächter
+Wächterin
+Wächterinnen
+Wächtern
+Wächters
+Wägung
+Wählbarkeit
+Wähler
+Wählerin
+Wählerinnen
+Wählern
+Wählers
+Wählerwillen
+Wählerwillens
+Währung
+Währungen
+Wälder
+Wäldern
+Wälle
+Wällen
+Wälzer
+Wälzern
+Wälzers
+Wämser
+Wämsern
+Wände
+Wänden
+Wärter
+Wärterin
+Wärterinnen
+Wärtern
+Wärters
+Wäsche
+Wäscher
+Wäscherei
+Wäschereien
+Wäscherin
+Wäscherinnen
+Wäschern
+Wäschers
+Wässerung
+Wässerungen
+Wöchnerin
+Wöchnerinnen
+Wölbung
+Wölfe
+Wölfen
+Wölfin
+Wörtchen
+Wörtchens
+Wörter
+Wörterbuch
+Wörterbucheintrag
+Wörterbucheintrages
+Wörterbucheintrags
+Wörterbucheinträge
+Wörterbucheinträgen
+Wörterbuches
+Wörterbuchs
+Wörterbuchverwaltung
+Wörterbücher
+Wörterbüchern
+Wörterliste
+Wörterlisten
+Wörtern
+Wörterverzeichnis
+Wörterverzeichnisse
+Wörterverzeichnissen
+Wörterverzeichnisses
+Wühlarbeit
+Wühlarbeiten
+Wühler
+Wühlerin
+Wühlerinnen
+Wühlern
+Wühlers
+Wülste
+Wülsten
+Würdenträger
+Würdenträgern
+Würdigkeit
+Würdigung
+Würfe
+Würfel
+Würfeln
+Würfels
+Würfen
+Würger
+Würgerin
+Würgerinnen
+Würgern
+Würgers
+Würmchen
+Würmchens
+Würmer
+Würmern
+Würstchen
+Würstchens
+Würste
+Würsten
+Württemberg
+Würzburg
+Wüstenei
+Wüsteneien
+Wüstenrot
+Wüstling
+Wüstlinge
+Wüstlingen
+Wüstlings
+XI
+XII
+XIII
+XIV
+XML
+Xanten
+Xenix
+Xerox
+Xerxes
+Xoff
+Xon
+Xylograph
+Xylographen
+Yacht
+Yachten
+Yangtse
+Yen
+Yeti
+Yoga
+Yokohama
+York
+Yuppie
+Yuppies
+ZDF
+ZK
+Zahl
+Zahlenangabe
+Zahlenangaben
+Zahlenaspekt
+Zahlenbeispiel
+Zahlenbeispiele
+Zahlenbeispielen
+Zahlenbeispiels
+Zahlenblock
+Zahlendarstellung
+Zahlendarstellungen
+Zahleneingabe
+Zahleneingaben
+Zahlenfeld
+Zahlenfolge
+Zahlenfolgen
+Zahlenform
+Zahlenmaterial
+Zahlenreihe
+Zahlenreihen
+Zahlenspielerei
+Zahlenspielereien
+Zahlensystem
+Zahlensysteme
+Zahlensystemen
+Zahlensystems
+Zahlenverhältnis
+Zahlenverhältnisse
+Zahlenverhältnissen
+Zahlenverhältnisses
+Zahlenwerk
+Zahlenwert
+Zahlenwerte
+Zahlenwerten
+Zahlenwerts
+Zahltag
+Zahltage
+Zahltagen
+Zahltags
+Zahlung
+Zahlungen
+Zahn
+Zahns
+Zander
+Zange
+Zangen
+Zank
+Zar
+Zarathustra
+Zarathustras
+Zaren
+Zarenzeit
+Zarewitsch
+Zarin
+Zartheit
+Zauber
+Zauberei
+Zaubereien
+Zauberer
+Zauberern
+Zauberers
+Zauberin
+Zauberinnen
+Zauberlehrling
+Zauberlehrlinge
+Zauberlehrlingen
+Zauberlehrlings
+Zaubers
+Zauderer
+Zaum
+Zaume
+Zaumes
+Zaums
+Zaun
+Zaunkönig
+Zauns
+Zebra
+Zebras
+Zeche
+Zechen
+Zeh
+Zehen
+Zehenspitze
+Zehenspitzen
+Zehner
+Zehnerpotenz
+Zehntel
+Zehntklässler
+Zehntklässlerin
+Zehntklässlerinnen
+Zehntklässlern
+Zehntklässlers
+Zehs
+Zeichen
+Zeichenabstand
+Zeichenabstände
+Zeichenabständen
+Zeichenart
+Zeichenausgabe
+Zeichenausgaben
+Zeichenbreite
+Zeichenbreiten
+Zeichenbrett
+Zeichenbretter
+Zeichenbrettern
+Zeichenbretts
+Zeichenbuffer
+Zeichenbuffers
+Zeichencode
+Zeichendarstellung
+Zeichenerklärung
+Zeichenerklärungen
+Zeichenfolge
+Zeichenfolgen
+Zeichengröße
+Zeichengrößen
+Zeichenhöhe
+Zeichenkette
+Zeichenketten
+Zeichenreihe
+Zeichenreihen
+Zeichens
+Zeichensatz
+Zeichensatzes
+Zeichensetzung
+Zeichensetzungen
+Zeichensätze
+Zeichensätzen
+Zeichenvorrat
+Zeichenzahl
+Zeichner
+Zeichnerin
+Zeichnerinnen
+Zeichnern
+Zeichners
+Zeichnung
+Zeichnungen
+Zeigefinger
+Zeigefingern
+Zeigefingers
+Zeiger
+Zeigern
+Zeigers
+Zeile
+Zeilen
+Zeilenabstand
+Zeilenanfang
+Zeilenbreite
+Zeilenbreiten
+Zeilenbuffer
+Zeilenbuffers
+Zeilendrucker
+Zeilenende
+Zeilenenden
+Zeilenformatierung
+Zeilenlänge
+Zeilenlängen
+Zeilenrand
+Zeilenstart
+Zeilenumbruch
+Zeilenvorschub
+Zeilenvorschubs
+Zeilenvorschubtaste
+Zeilenvorschübe
+Zeilenvorschüben
+Zeit
+Zeitablauf
+Zeitablaufes
+Zeitablaufs
+Zeitabläufe
+Zeitabläufen
+Zeitabschnitt
+Zeitabschnitte
+Zeitabschnitten
+Zeitabschnitts
+Zeitabstand
+Zeitabstandes
+Zeitabstände
+Zeitabständen
+Zeitalter
+Zeitalters
+Zeitangabe
+Zeitangaben
+Zeitaufqqlösung
+Zeitaufwand
+Zeitaufwands
+Zeitausdruck
+Zeitbasen
+Zeitbasis
+Zeitbedarf
+Zeitbedarfs
+Zeitbereich
+Zeitbombe
+Zeitbomben
+Zeitdauer
+Zeitdimension
+Zeitdimensionen
+Zeitdruck
+Zeitdrucks
+Zeiteinblendung
+Zeiteinheit
+Zeiteinheiten
+Zeiten
+Zeiterfassung
+Zeitermittlung
+Zeiterscheinung
+Zeitersparnis
+Zeitersparnisse
+Zeitersparnissen
+Zeitfalle
+Zeitfallen
+Zeitfenster
+Zeitfrage
+Zeitfragen
+Zeitfunktion
+Zeitfunktionen
+Zeitgenosse
+Zeitgenossen
+Zeitgeschehen
+Zeitgeschehens
+Zeitgewinn
+Zeitgründe
+Zeitgründen
+Zeitintegral
+Zeitintegrale
+Zeitintegralen
+Zeitintegrals
+Zeitintervall
+Zeitintervalle
+Zeitintervallen
+Zeitintervalls
+Zeitkonstante
+Zeitkonstanten
+Zeitkontrolle
+Zeitkontrollen
+Zeitkorrektur
+Zeitlauf
+Zeitlaufs
+Zeitlupe
+Zeitlupen
+Zeitläufe
+Zeitläufen
+Zeitmangel
+Zeitmesser
+Zeitmessern
+Zeitmessers
+Zeitmessung
+Zeitmessungen
+Zeitnahme
+Zeitnahmen
+Zeitnormal
+Zeitnot
+Zeitnullpunkt
+Zeitplan
+Zeitplans
+Zeitplanung
+Zeitplanungen
+Zeitpläne
+Zeitplänen
+Zeitprotokoll
+Zeitpunkt
+Zeitpunkte
+Zeitpunkten
+Zeitpunktes
+Zeitraffer
+Zeitraffers
+Zeitrahmen
+Zeitrahmens
+Zeitraster
+Zeitrasters
+Zeitraum
+Zeitraumes
+Zeitraums
+Zeitrechnung
+Zeiträume
+Zeiträumen
+Zeitscheibe
+Zeitscheiben
+Zeitschere
+Zeitscheren
+Zeitschrift
+Zeitschriften
+Zeitschriftenhändler
+Zeitschriftenhändlerin
+Zeitschriftenhändlerinnen
+Zeitschriftenhändlern
+Zeitschriftenhändlers
+Zeitskala
+Zeitspanne
+Zeitspannen
+Zeitsteuerung
+Zeitumstellung
+Zeitung
+Zeitungen
+Zeitungsartikel
+Zeitungsartikeln
+Zeitungsartikels
+Zeitungsbericht
+Zeitungsberichten
+Zeitungsmeldung
+Zeitungsmeldungen
+Zeitungsnotiz
+Zeitungsnotizen
+Zeitunsicherheit
+Zeitunsicherheiten
+Zeitverhalten
+Zeitverhaltens
+Zeitverlust
+Zeitverluste
+Zeitverlusten
+Zeitverlustes
+Zeitverschiebung
+Zeitvertreib
+Zeitvertreibs
+Zeitverzug
+Zeitverzugs
+Zeitverzögerung
+Zeitvorsprung
+Zeitwert
+Zeitwort
+Zeitwortes
+Zeitwörter
+Zeitwörtern
+Zeitzeichen
+Zeitzeichens
+Zeitzone
+Zeitzonen
+Zeitzünder
+Zeitzündern
+Zeitüberschreitung
+Zelle
+Zellen
+Zellophan
+Zellophans
+Zellstoff
+Zellstoffe
+Zellstoffen
+Zellstoffes
+Zellteilung
+Zelluloid
+Zelluloids
+Zellulose
+Zellulosen
+Zelt
+Zeltbahn
+Zeltbahnen
+Zeltdach
+Zeltdaches
+Zeltdächer
+Zeltes
+Zeltlager
+Zeltlagern
+Zeltpflock
+Zeltpflöcke
+Zeltpflöcken
+Zeltplane
+Zeltplanen
+Zeltplatz
+Zeltplatzes
+Zeltplätze
+Zeltplätzen
+Zeltstange
+Zeltstangen
+Zement
+Zemente
+Zementen
+Zementierung
+Zements
+Zensor
+Zensoren
+Zensur
+Zensuren
+Zentigramm
+Zentimeter
+Zentimetern
+Zentimeters
+Zentner
+Zentnern
+Zentners
+Zentralafrikanische
+Zentralamt
+Zentralaufgabe
+Zentralaufgaben
+Zentralbus
+Zentralbusse
+Zentralbussen
+Zentralbusses
+Zentralbusverdrahtung
+Zentralbüro
+Zentralcomputer
+Zentraleinheit
+Zentraleinheiten
+Zentralisation
+Zentralisierung
+Zentralisierungen
+Zentralpunkt
+Zentralpunkte
+Zentralpunkten
+Zentralpunktes
+Zentralpunkts
+Zentralrechner
+Zentralrechnern
+Zentralrechners
+Zentralsoftware
+Zentralstelle
+Zentralstellen
+Zentralsteuerung
+Zentren
+Zentrifugalkraft
+Zentrifugalkräfte
+Zentrifugalkräften
+Zentrifuge
+Zentrifugen
+Zentrigramm
+Zentrigramme
+Zentrigrammen
+Zentrigramms
+Zentrum
+Zentrums
+Zeppelin
+Zepter
+Zeptern
+Zepters
+Zeremonie
+Zeremoniell
+Zeremoniells
+Zeremonien
+Zerfall
+Zerfalls
+Zerfallserscheinung
+Zerfallserscheinungen
+Zerfallsprodukt
+Zerfallsprodukte
+Zerfallsprodukten
+Zerfallsproduktes
+Zerfallsprodukts
+Zerfallsprozess
+Zerfallsprozesse
+Zerfallsprozessen
+Zerfallsprozesses
+Zerfallszeit
+Zerfaserung
+Zerfälle
+Zerfällen
+Zerlegung
+Zerlegungen
+Zermürbung
+Zerrbild
+Zerrbilder
+Zerrbildern
+Zerrbildes
+Zerreißfestigkeit
+Zerreißprobe
+Zerreißproben
+Zerreißung
+Zerreißungen
+Zerrissenheit
+Zerrspiegel
+Zerrspiegeln
+Zerrung
+Zerrungen
+Zerrüttung
+Zerrüttungen
+Zersetzung
+Zersiedelung
+Zersplitterung
+Zerstreutheit
+Zerstreuung
+Zerstreuungen
+Zerstäuber
+Zerstörer
+Zerstörern
+Zerstörers
+Zerstörung
+Zerstörungen
+Zerstörungstrieb
+Zerstörungstriebe
+Zerstörungstrieben
+Zerstörungstriebes
+Zerstörungswut
+Zerstückelung
+Zerstückelungen
+Zerteilung
+Zerteilungen
+Zertifikat
+Zertifikate
+Zertifikaten
+Zertifikates
+Zertifikats
+Zertifizierung
+Zertifizierungsstelle
+Zertifizierungsstellen
+Zertrümmerung
+Zertrümmerungen
+Zerwürfnis
+Zerwürfnisse
+Zerwürfnissen
+Zerwürfnisses
+Zession
+Zessionar
+Zessionare
+Zessionaren
+Zessionars
+Zessionen
+Zeter
+Zetergeschrei
+Zettel
+Zettelchen
+Zettelchens
+Zettelkasten
+Zettelkastens
+Zetteln
+Zettels
+Zeug
+Zeuge
+Zeugen
+Zeugin
+Zeuginnen
+Zeugnis
+Zeugniskopie
+Zeugniskopien
+Zeugnisse
+Zeugnissen
+Zeugnisses
+Zeugs
+Zeugung
+Zeugungen
+Zeus
+Zichorie
+Zichorien
+Zicke
+Zicken
+Zicklein
+Zickleins
+Zickzack
+Ziege
+Ziegel
+Ziegelei
+Ziegeln
+Ziegels
+Ziegelstein
+Ziegelsteine
+Ziegelsteinen
+Ziegelsteins
+Ziegen
+Ziehbänke
+Ziehbänken
+Ziehharmonika
+Ziehharmonikas
+Ziehkind
+Ziehkinder
+Ziehkindes
+Ziehung
+Ziehvater
+Ziel
+Zielcode
+Zielcodes
+Zieles
+Zielgerade
+Zielgeraden
+Zielgruppe
+Zielgruppen
+Zielkurve
+Zielkurven
+Ziellinie
+Ziellinien
+Zielmaschine
+Zielmaschinen
+Zielmaschinensprache
+Zielmaschinensprachen
+Zielort
+Zielprogramm
+Zielprogramme
+Zielprogrammen
+Zielprogramms
+Zielpunkt
+Zielpunkte
+Zielpunkten
+Zielpunkts
+Zielrichtung
+Ziels
+Zielscheibe
+Zielscheiben
+Zielsetzung
+Zielsetzungen
+Zielsprache
+Zielsprachen
+Zielstrebigkeit
+Zielvorgabe
+Zielvorgaben
+Zielvorstellung
+Zielvorstellungen
+Zielwert
+Zielwerte
+Zielwerten
+Zielwertes
+Zielwerts
+Ziemer
+Ziemern
+Ziemers
+Zier
+Zierde
+Zierden
+Ziererei
+Zierereien
+Zierlichkeit
+Zierrat
+Zierrate
+Zierraten
+Zierrates
+Ziffer
+Zifferblatt
+Zifferblatts
+Zifferblätter
+Zifferblättern
+Ziffern
+Ziffernanzeige
+Ziffernanzeigen
+Ziffernfolge
+Ziffernfolgen
+Zigarette
+Zigaretten
+Zigarillo
+Zigarillos
+Zigarre
+Zigarren
+Zigeuner
+Zigeunerin
+Zigeunerinnen
+Zigeunern
+Zigeuners
+Zikade
+Zikaden
+Zille
+Zillen
+Zimbabwe
+Zimmer
+Zimmerer
+Zimmerern
+Zimmerers
+Zimmermann
+Zimmermanns
+Zimmern
+Zimmers
+Zimperlichkeit
+Zimt
+Zimts
+Zink
+Zinke
+Zinken
+Zinkes
+Zinks
+Zinn
+Zinne
+Zinnen
+Zinnes
+Zinnober
+Zinnobers
+Zinns
+Zins
+Zinse
+Zinsen
+Zinses
+Zion
+Zionist
+Zionisten
+Zionistin
+Zionistinnen
+Zions
+Zipfel
+Zipfelmütze
+Zipfelmützen
+Zipfeln
+Zirkel
+Zirkeln
+Zirkels
+Zirkular
+Zirkulare
+Zirkularen
+Zirkulars
+Zirkulation
+Zirkulationen
+Zirkumflex
+Zirkumflexe
+Zirkumflexen
+Zirkus
+Zirkusse
+Zirkussen
+Zischlaut
+Zischlaute
+Zischlauten
+Zischlautes
+Ziselierarbeit
+Zisterne
+Zisternen
+Zitadelle
+Zitadellen
+Zitat
+Zitate
+Zitaten
+Zitats
+Zither
+Zithern
+Zitronat
+Zitronats
+Zitrone
+Zitronen
+Zitze
+Zitzen
+Zivilcourage
+Zivildienst
+Zivilisation
+Zivilisationen
+Zivilist
+Zivilisten
+Zobel
+Zobeln
+Zobels
+Zofe
+Zofen
+Zoll
+Zombie
+Zombies
+Zone
+Zonen
+Zoo
+Zoologe
+Zoologen
+Zoologie
+Zoos
+Zopf
+Zopfes
+Zopfs
+Zorn
+Zornes
+Zorns
+Zorro
+Zorros
+Zote
+Zoten
+Zubehör
+Zubehöre
+Zubehören
+Zubehörs
+Zuber
+Zubereitung
+Zubern
+Zubers
+Zucht
+Zuchten
+Zuchtlosigkeit
+Zuchtlosigkeiten
+Zucker
+Zuckers
+Zuckung
+Zuckungen
+Zudrang
+Zudringlichkeit
+Zudringlichkeiten
+Zueignung
+Zuerkennung
+Zuerkennungen
+Zufahrt
+Zufahrten
+Zufahrtsstraße
+Zufahrtsstraßen
+Zufahrtswege
+Zufahrtswegen
+Zufall
+Zufalls
+Zufallsauswahl
+Zufallsbekanntschaft
+Zufallsdaten
+Zufallsgenerator
+Zufallsgeneratoren
+Zufallsgenerators
+Zufallsnummerierung
+Zufallsprinzip
+Zufallszahl
+Zufallszahlen
+Zuflucht
+Zufluchten
+Zufluchtsort
+Zufluchtsorte
+Zufluchtsorten
+Zufluchtsortes
+Zufluchtsorts
+Zufluss
+Zuflusses
+Zuflüsse
+Zuflüssen
+Zufriedenheit
+Zufriedenstellung
+Zufriedenstellungen
+Zufuhr
+Zufuhren
+Zufälle
+Zufällen
+Zufälligkeit
+Zufälligkeiten
+Zuführung
+Zuführungen
+Zuführungsdraht
+Zuführungsdrahtes
+Zuführungsdrähte
+Zuführungsdrähten
+Zug
+Zugabe
+Zugaben
+Zugang
+Zuganges
+Zugangs
+Zugangstechnik
+Zugangstechniken
+Zuge
+Zugehörigkeit
+Zugehörigkeiten
+Zuges
+Zugeständnis
+Zugeständnisse
+Zugeständnissen
+Zugeständnisses
+Zugpferd
+Zugpferde
+Zugpferden
+Zugpferdes
+Zugpferds
+Zugriff
+Zugriffe
+Zugriffen
+Zugriffs
+Zugriffsgeschwindigkeit
+Zugriffsrechte
+Zugriffsrechten
+Zugriffszeit
+Zugriffszeiten
+Zugänge
+Zugängen
+Zugänglichkeit
+Zuhilfenahme
+Zuhörer
+Zuhörerin
+Zuhörerinnen
+Zuhörern
+Zuhörers
+Zuhörerschaft
+Zukauf
+Zukaufs
+Zukunft
+Zukunftsangst
+Zukunftsaussicht
+Zukunftsaussichten
+Zukunftsbetrachtung
+Zukunftsbetrachtungen
+Zukunftschance
+Zukunftschancen
+Zukunftsdenken
+Zukunftsdenkens
+Zukunftserwartung
+Zukunftsperspektive
+Zukunftsperspektiven
+Zukunftsplanung
+Zukunftspläne
+Zukunftsplänen
+Zukunftsprognostik
+Zukunftsverantwortung
+Zukunftsvision
+Zukunftsvisionen
+Zukäufe
+Zukäufen
+Zulage
+Zulagen
+Zulassung
+Zulassungen
+Zulauf
+Zulaufs
+Zuleitung
+Zuleitungen
+Zulieferer
+Zulieferern
+Zulieferung
+Zulieferungen
+Zulässigkeit
+Zulässigkeitsgrenze
+Zulässigkeitsgrenzen
+Zulässigkeitskontrolle
+Zulässigkeitskontrollen
+Zuläufe
+Zuläufen
+Zumutung
+Zunahme
+Zunahmen
+Zuname
+Zunamen
+Zunamens
+Zunder
+Zundern
+Zuneigung
+Zunft
+Zunge
+Zungen
+Zungenkuss
+Zungenkusses
+Zungenküsse
+Zungenküssen
+Zuordnung
+Zuordnungen
+Zurechnung
+Zurechnungsfähigkeit
+Zurechtweisung
+Zurechtweisungen
+Zurschaustellung
+Zurschaustellungen
+Zuruf
+Zurufe
+Zurufen
+Zurufs
+Zurverfügungstellung
+Zurückbehaltung
+Zurückforderung
+Zurückforderungen
+Zurückführung
+Zurückführungen
+Zurückgabe
+Zurückgaben
+Zurückgezogenheit
+Zurückhaltung
+Zurücknahme
+Zurücksetzung
+Zurücksetzungen
+Zurückstellung
+Zurückstellungen
+Zurückweisung
+Zurückweisungen
+Zurückzahlung
+Zurückzahlungen
+Zurückziehung
+Zurückziehungen
+Zurüstung
+Zurüstungen
+Zusammenarbeit
+Zusammenballung
+Zusammenballungen
+Zusammenbruch
+Zusammenbruchs
+Zusammenbrüche
+Zusammenbrüchen
+Zusammenfassung
+Zusammenfassungen
+Zusammenfluss
+Zusammenflusses
+Zusammenflüsse
+Zusammenflüssen
+Zusammengehörigkeit
+Zusammenhalt
+Zusammenhalts
+Zusammenhang
+Zusammenhanges
+Zusammenhangs
+Zusammenklang
+Zusammenklangs
+Zusammenklänge
+Zusammenklängen
+Zusammenkunft
+Zusammenkünfte
+Zusammenkünften
+Zusammenleben
+Zusammenlebens
+Zusammenlegung
+Zusammenlegungen
+Zusammenprall
+Zusammenpralls
+Zusammenrottung
+Zusammenschluss
+Zusammenschlusses
+Zusammenschlüsse
+Zusammenschlüssen
+Zusammensein
+Zusammensetzung
+Zusammensetzungen
+Zusammenspiel
+Zusammenspiele
+Zusammenspielen
+Zusammenspiels
+Zusammenstellung
+Zusammenstellungen
+Zusammenstoß
+Zusammenstoßes
+Zusammenstöße
+Zusammenstößen
+Zusammentritt
+Zusammentritte
+Zusammentritten
+Zusammentritts
+Zusammenwirken
+Zusammenwirkens
+Zusammenziehung
+Zusammenziehungen
+Zusatz
+Zusatzabkommen
+Zusatzabkommens
+Zusatzantrag
+Zusatzantrages
+Zusatzantrags
+Zusatzanträge
+Zusatzanträgen
+Zusatzausrüstung
+Zusatzbedarf
+Zusatzbedarfs
+Zusatzeinrichtung
+Zusatzeinrichtungen
+Zusatzeinstellung
+Zusatzeinstellungen
+Zusatzes
+Zusatzfeld
+Zusatzfrage
+Zusatzfragen
+Zusatzfunktion
+Zusatzfunktionen
+Zusatzgehäuse
+Zusatzgehäusen
+Zusatzgerät
+Zusatzgeräte
+Zusatzgeräten
+Zusatzgerätes
+Zusatzhardware
+Zusatzinformation
+Zusatzinformationen
+Zusatzkenntnisse
+Zusatzkenntnissen
+Zusatzleistung
+Zusatzpaket
+Zusatzplatine
+Zusatzschilder
+Zusatzsystem
+Zusatzsysteme
+Zusatzsystemen
+Zusatzsystems
+Zusatzteil
+Zusatzteile
+Zusatzteilen
+Zusatzteils
+Zusatzterm
+Zusatzterme
+Zusatztermen
+Zusatzterms
+Zusatzversicherung
+Zusatzversicherungen
+Zuschauer
+Zuschauerin
+Zuschauerinnen
+Zuschauern
+Zuschauers
+Zuschlag
+Zuschlages
+Zuschlags
+Zuschläge
+Zuschlägen
+Zuschnitt
+Zuschnitte
+Zuschnitten
+Zuschnittes
+Zuschrift
+Zuschriften
+Zuschuss
+Zuschussbetrieb
+Zuschussbetriebe
+Zuschussbetrieben
+Zuschussbetriebs
+Zuschusses
+Zuschüsse
+Zuschüssen
+Zuse
+Zusendung
+Zusicherung
+Zusicherungen
+Zuspruch
+Zuspruches
+Zusprüche
+Zusprüchen
+Zustand
+Zustandes
+Zustands
+Zustandsbericht
+Zustandsberichte
+Zustandsberichten
+Zustandsberichts
+Zustandsbit
+Zustandsbits
+Zustandsmeldung
+Zustandsmeldungen
+Zustandsmenge
+Zustandsmengen
+Zustandsnr
+Zustandsraum
+Zustandsraumes
+Zustandsraums
+Zustandsräume
+Zustandsräumen
+Zustandstabelle
+Zustandstabellen
+Zustandstransformation
+Zustandstransformationen
+Zustandsänderung
+Zustandsänderungen
+Zustandsübergang
+Zustandsübergangs
+Zustandsübergänge
+Zustandsübergängen
+Zusteller
+Zustellern
+Zustellers
+Zustellung
+Zustellungen
+Zustimmung
+Zustimmungen
+Zustrom
+Zustromes
+Zustroms
+Zustände
+Zuständen
+Zuständigkeit
+Zuständigkeiten
+Zuständigkeitsbereich
+Zuständigkeitsbereiche
+Zuständigkeitsbereichen
+Zuständigkeitsbereichs
+Zusätze
+Zusätzen
+Zutat
+Zutaten
+Zuteilung
+Zuteilungen
+Zutraulichkeit
+Zutraulichkeiten
+Zutritt
+Zutrittes
+Zutritts
+Zuträger
+Zuträgerei
+Zuträgereien
+Zuträgerin
+Zuträgerinnen
+Zuträgern
+Zuträgers
+Zuträglichkeit
+Zuträglichkeiten
+Zutun
+Zutuns
+Zuverlässigkeit
+Zuverlässigkeiten
+Zuverlässigkeitsgrad
+Zuversicht
+Zuversichtlichkeit
+Zuwachs
+Zuwachses
+Zuwachsrate
+Zuwachsraten
+Zuwanderung
+Zuweisung
+Zuweisungen
+Zuwendung
+Zuwendungen
+Zuwiderhandlung
+Zuzug
+Zuzuges
+Zuzugs
+Zuzugsgenehmigung
+Zuzugsgenehmigungen
+Zuzüge
+Zuzügen
+Zwang
+Zwanges
+Zwanglosigkeit
+Zwangs
+Zwangsbedingung
+Zwangsbedingungen
+Zwangslage
+Zwangslagen
+Zwangsmaßnahme
+Zwangsmaßnahmen
+Zwangsmittel
+Zwangsmitteln
+Zwangsmittels
+Zweck
+Zwecke
+Zwecken
+Zweckes
+Zwecklosigkeit
+Zwecklosigkeiten
+Zweckmäßigkeit
+Zweckpessimismus
+Zwecks
+Zweibettzimmer
+Zweibettzimmern
+Zweideutigkeit
+Zweideutigkeiten
+Zweidrittelmehrheit
+Zweidrittelmehrheiten
+Zweiergespräch
+Zweierpotenz
+Zweierzimmer
+Zweierzimmern
+Zweifel
+Zweifelsfall
+Zweifelsfalles
+Zweifelsfalls
+Zweifelsfälle
+Zweifelsfällen
+Zweifqqler
+Zweifqqlerin
+Zweifqqlerinnen
+Zweifqqlern
+Zweifqqlers
+Zweig
+Zweige
+Zweigen
+Zweiges
+Zweiglein
+Zweigstelle
+Zweigstellen
+Zweikampf
+Zweikampfes
+Zweikampfs
+Zweikämpfe
+Zweikämpfen
+Zweisprachigkeit
+Zweitaufqqlage
+Zweitaufqqlagen
+Zweiteilung
+Zweitklässler
+Zweitklässlerin
+Zweitklässlerinnen
+Zweitklässlern
+Zweitklässlers
+Zweitschrift
+Zweitschriften
+Zweizeiler
+Zweizeilern
+Zweizeilers
+Zwerchfell
+Zwerchfelle
+Zwerchfellen
+Zwerchfelles
+Zwerchfells
+Zwerg
+Zwerge
+Zwergen
+Zwerges
+Zwergin
+Zwerginnen
+Zwetschge
+Zwetschgen
+Zwetschkenröster
+Zwickel
+Zwicker
+Zwickers
+Zwickmühle
+Zwickmühlen
+Zwieback
+Zwiebacks
+Zwiebel
+Zwiebeln
+Zwiebelschale
+Zwiebelschalen
+Zwiegespräch
+Zwiegespräche
+Zwiegesprächen
+Zwiegesprächs
+Zwielicht
+Zwielichter
+Zwielichtern
+Zwielichtes
+Zwielichts
+Zwiespalt
+Zwiespaltes
+Zwiespalts
+Zwiespälte
+Zwiespälten
+Zwietracht
+Zwilling
+Zwillinge
+Zwillingen
+Zwillings
+Zwinger
+Zwingern
+Zwingers
+Zwingli
+Zwinglis
+Zwirn
+Zwirnerei
+Zwirnes
+Zwirns
+Zwischenbemerkung
+Zwischenbemerkungen
+Zwischenbericht
+Zwischenberichte
+Zwischenberichten
+Zwischenberichts
+Zwischending
+Zwischendinge
+Zwischendingen
+Zwischendinges
+Zwischendings
+Zwischenergebnis
+Zwischenergebnisse
+Zwischenergebnissen
+Zwischenergebnisses
+Zwischenfall
+Zwischenfalls
+Zwischenfrage
+Zwischenfragen
+Zwischenfälle
+Zwischenfällen
+Zwischengeschoß
+Zwischengeschoße
+Zwischengeschoßen
+Zwischengeschoßes
+Zwischenlandung
+Zwischenlandungen
+Zwischenlösung
+Zwischenlösungen
+Zwischenpuffer
+Zwischenruf
+Zwischenrufe
+Zwischenrufen
+Zwischenrufer
+Zwischenruferin
+Zwischenruferinnen
+Zwischenrufern
+Zwischenrufers
+Zwischenrufes
+Zwischenrufs
+Zwischenschritt
+Zwischenschritte
+Zwischenschritten
+Zwischenschritts
+Zwischenspeicher
+Zwischenspeicherung
+Zwischensprache
+Zwischensprachen
+Zwischenstadien
+Zwischenstadium
+Zwischenstand
+Zwischenstation
+Zwischenstationen
+Zwischenstecker
+Zwischensteckern
+Zwischensteckers
+Zwischenstufe
+Zwischenstufen
+Zwischenstück
+Zwischenstücke
+Zwischenstücken
+Zwischenstückes
+Zwischenstücks
+Zwischenwand
+Zwischenwände
+Zwischenwänden
+Zwischenzeit
+Zwischenzeiten
+Zwischenziel
+Zwischenziele
+Zwischenzielen
+Zwischenziels
+Zwischenzustände
+Zwischenzuständen
+Zwist
+Zwiste
+Zwisten
+Zwistes
+Zwistigkeit
+Zwistigkeiten
+Zwitter
+Zwittern
+Zwölfeck
+Zwölfecke
+Zwölfecken
+Zwölfeckes
+Zwölfecks
+Zwölftklässler
+Zwölftklässlerin
+Zwölftklässlerinnen
+Zwölftklässlern
+Zwölftklässlers
+Zyanid
+Zyankali
+Zyklen
+Zyklon
+Zyklons
+Zyklop
+Zyklopen
+Zyklotron
+Zyklotrone
+Zyklotronen
+Zyklotrons
+Zyklus
+Zykluszeit
+Zylinder
+Zylindern
+Zylinders
+Zyniker
+Zynikern
+Zynikers
+Zynismus
+Zypern
+Zypresse
+Zypressen
+Zyste
+Zysten
+Zähheit
+Zähigkeit
+Zähler
+Zählern
+Zählers
+Zählerstand
+Zählerstände
+Zählerständen
+Zählrichtung
+Zähmung
+Zähne
+Zähnen
+Zäpfchen
+Zäpfchens
+Zärtlichkeit
+Zärtlichkeiten
+Zäune
+Zäunen
+Zögerung
+Zögerungen
+Zögling
+Zöglinge
+Zöglingen
+Zöglings
+Zölibat
+Zölibates
+Zölle
+Zöllen
+Zöllner
+Zöllnern
+Zöllners
+Zöpfe
+Zöpfen
+Züchter
+Züchterin
+Züchterinnen
+Züchtern
+Züchters
+Züchtigkeit
+Züchtigung
+Züchtigungen
+Züchtung
+Züchtungen
+Züge
+Zügel
+Zügellosigkeit
+Zügellosigkeiten
+Zügeln
+Zügels
+Zügelung
+Zügen
+Zünder
+Zündern
+Zünders
+Zündschnur
+Zündung
+Zündungen
+Zünglein
+Zürcher
+Zürcherin
+Zürcherinnen
+Zürchern
+Zürich
+Zürichs
+ab
+abarbeite
+abarbeiten
+abarbeitend
+abarbeitende
+abarbeitendem
+abarbeitenden
+abarbeitender
+abarbeitendes
+abarbeitest
+abarbeitet
+abarbeitete
+abarbeiteten
+abarbeitetest
+abarbeitetet
+abartig
+abartige
+abartigem
+abartigen
+abartiger
+abartiges
+abbat
+abbaten
+abbatest
+abbatet
+abbatst
+abbaue
+abbauen
+abbauend
+abbauende
+abbauendem
+abbauenden
+abbauender
+abbauendes
+abbaust
+abbaut
+abbaute
+abbauten
+abbautest
+abbautet
+abbeiße
+abbeißen
+abbeißend
+abbeißende
+abbeißendem
+abbeißenden
+abbeißender
+abbeißendes
+abbeißt
+abbekomme
+abbekommen
+abbekommst
+abbekommt
+abberufe
+abberufen
+abberufend
+abberufende
+abberufendem
+abberufenden
+abberufender
+abberufendes
+abberufene
+abberufenem
+abberufenen
+abberufener
+abberufenes
+abberufst
+abberuft
+abbestelle
+abbestellen
+abbestellend
+abbestellende
+abbestellendem
+abbestellenden
+abbestellender
+abbestellendes
+abbestellst
+abbestellt
+abbestellte
+abbestelltem
+abbestellten
+abbestellter
+abbestelltes
+abbestelltest
+abbestelltet
+abbettele
+abbetteln
+abbettelnd
+abbettelnde
+abbettelndem
+abbettelnden
+abbettelnder
+abbettelndes
+abbettelst
+abbettelt
+abbettelte
+abbettelten
+abbetteltest
+abbetteltet
+abbettle
+abbezahle
+abbezahlen
+abbezahlend
+abbezahlende
+abbezahlendem
+abbezahlenden
+abbezahlender
+abbezahlendes
+abbezahlst
+abbezahlt
+abbezahlte
+abbezahltem
+abbezahlten
+abbezahlter
+abbezahltes
+abbezahltest
+abbezahltet
+abbiege
+abbiegen
+abbiegend
+abbiegende
+abbiegendem
+abbiegenden
+abbiegender
+abbiegendes
+abbiegst
+abbiegt
+abbilde
+abbilden
+abbildend
+abbildende
+abbildendem
+abbildenden
+abbildender
+abbildendes
+abbildest
+abbildet
+abbildete
+abbildeten
+abbildetest
+abbildetet
+abbinde
+abbinden
+abbindend
+abbindende
+abbindendem
+abbindenden
+abbindender
+abbindendes
+abbindest
+abbindet
+abbindete
+abbindeten
+abbindetest
+abbindetet
+abbitte
+abbitten
+abbittest
+abbittet
+abblende
+abblenden
+abblendend
+abblendende
+abblendendem
+abblendenden
+abblendender
+abblendendes
+abblendest
+abblendet
+abblendete
+abblendeten
+abblendetest
+abblendetet
+abblitze
+abblitzen
+abblitzend
+abblitzende
+abblitzendem
+abblitzenden
+abblitzender
+abblitzendes
+abblitzest
+abblitzt
+abblitzte
+abblitzten
+abblitztest
+abblitztet
+abblättere
+abblättern
+abblätternd
+abblätternde
+abblätterndem
+abblätternden
+abblätternder
+abblätterndes
+abblätterst
+abblättert
+abblätterte
+abblätterten
+abblättertest
+abblättertet
+abblättre
+abbrach
+abbrachen
+abbrachest
+abbrachst
+abbracht
+abbrachte
+abbrachten
+abbrachtest
+abbrachtet
+abbrause
+abbrausen
+abbrausend
+abbrausende
+abbrausendem
+abbrausenden
+abbrausender
+abbrausendes
+abbrausest
+abbraust
+abbrauste
+abbrausten
+abbraustest
+abbraustet
+abbreche
+abbrechen
+abbrechend
+abbrechende
+abbrechendem
+abbrechenden
+abbrechender
+abbrechendes
+abbrecht
+abbremse
+abbremsen
+abbremsend
+abbremsende
+abbremsendem
+abbremsenden
+abbremsender
+abbremsendes
+abbremsest
+abbremst
+abbremste
+abbremsten
+abbremstest
+abbremstet
+abbrenne
+abbrennen
+abbrennend
+abbrennende
+abbrennendem
+abbrennenden
+abbrennender
+abbrennendes
+abbrennst
+abbrennt
+abbrennte
+abbrennten
+abbrenntest
+abbrenntet
+abbrichst
+abbricht
+abbringe
+abbringen
+abbringend
+abbringende
+abbringendem
+abbringenden
+abbringender
+abbringendes
+abbringst
+abbringt
+abbruchreif
+abbruchreife
+abbruchreifem
+abbruchreifen
+abbruchreifer
+abbruchreifes
+abbröckele
+abbröckeln
+abbröckelnd
+abbröckelnde
+abbröckelndem
+abbröckelnden
+abbröckelnder
+abbröckelndes
+abbröckelst
+abbröckelt
+abbröckelte
+abbröckelten
+abbröckeltest
+abbröckeltet
+abbröckle
+abbuche
+abbuchen
+abbuchend
+abbuchende
+abbuchendem
+abbuchenden
+abbuchender
+abbuchendes
+abbuchst
+abbucht
+abbuchte
+abbuchten
+abbuchtest
+abbuchtet
+abbürste
+abbürsten
+abbürstend
+abbürstende
+abbürstendem
+abbürstenden
+abbürstender
+abbürstendes
+abbürstest
+abbürstet
+abbürstete
+abbürsteten
+abbürstetest
+abbürstetet
+abdampfe
+abdampfen
+abdampfend
+abdampfende
+abdampfendem
+abdampfenden
+abdampfender
+abdampfendes
+abdampfst
+abdampft
+abdampfte
+abdampften
+abdampftest
+abdampftet
+abdanke
+abdanken
+abdankend
+abdankende
+abdankendem
+abdankenden
+abdankender
+abdankendes
+abdankst
+abdankt
+abdankte
+abdankten
+abdanktest
+abdanktet
+abdeckbar
+abdeckbare
+abdeckbarem
+abdeckbaren
+abdeckbarer
+abdeckbares
+abdecke
+abdecken
+abdeckend
+abdeckende
+abdeckendem
+abdeckenden
+abdeckender
+abdeckendes
+abdeckst
+abdeckt
+abdeckte
+abdeckten
+abdecktest
+abdecktet
+abdichtbar
+abdichtbare
+abdichtbarem
+abdichtbaren
+abdichtbarer
+abdichtbares
+abdichte
+abdichten
+abdichtend
+abdichtende
+abdichtendem
+abdichtenden
+abdichtender
+abdichtendes
+abdichtest
+abdichtet
+abdichtete
+abdichteten
+abdichtetest
+abdichtetet
+abdiene
+abdienen
+abdienend
+abdienende
+abdienendem
+abdienenden
+abdienender
+abdienendes
+abdienst
+abdient
+abdiente
+abdienten
+abdientest
+abdientet
+abdrehe
+abdrehen
+abdrehend
+abdrehende
+abdrehendem
+abdrehenden
+abdrehender
+abdrehendes
+abdrehst
+abdreht
+abdrehte
+abdrehten
+abdrehtest
+abdrehtet
+abdrifte
+abdriften
+abdriftend
+abdriftende
+abdriftendem
+abdriftenden
+abdriftender
+abdriftendes
+abdriftest
+abdriftet
+abdriftete
+abdrifteten
+abdriftetest
+abdriftetet
+abdrossele
+abdrosseln
+abdrosselnd
+abdrosselnde
+abdrosselndem
+abdrosselnden
+abdrosselnder
+abdrosselndes
+abdrosselst
+abdrosselt
+abdrosselte
+abdrosselten
+abdrosseltest
+abdrosseltet
+abdrossle
+abdrucke
+abdrucken
+abdruckend
+abdruckende
+abdruckendem
+abdruckenden
+abdruckender
+abdruckendes
+abdruckst
+abdruckt
+abdruckte
+abdruckten
+abdrucktest
+abdrucktet
+abdrücke
+abdrücken
+abdrückend
+abdrückende
+abdrückendem
+abdrückenden
+abdrückender
+abdrückendes
+abdrückst
+abdrückt
+abdrückte
+abdrückten
+abdrücktest
+abdrücktet
+abebbe
+abebben
+abebbend
+abebbende
+abebbendem
+abebbenden
+abebbender
+abebbendes
+abebbst
+abebbt
+abebbte
+abebbten
+abebbtest
+abebbtet
+abendfüllend
+abendfüllende
+abendfüllendem
+abendfüllenden
+abendfüllender
+abendfüllendes
+abendlich
+abendliche
+abendlichem
+abendlichen
+abendlicher
+abendliches
+abendländisch
+abendländische
+abendländischem
+abendländischen
+abendländischer
+abendländisches
+abendrot
+abendrote
+abendrotem
+abendroten
+abendroter
+abendrotes
+abends
+abenteuerlich
+abenteuerliche
+abenteuerlichem
+abenteuerlichen
+abenteuerlicher
+abenteuerlichere
+abenteuerlicherem
+abenteuerlicheren
+abenteuerlicherer
+abenteuerlicheres
+abenteuerliches
+abenteuerlichste
+abenteuerlichstem
+abenteuerlichsten
+abenteuerlichster
+abenteuerlichstes
+abenteuerreich
+abenteuerreiche
+abenteuerreichem
+abenteuerreichen
+abenteuerreicher
+abenteuerreiches
+aber
+abergläubisch
+abergläubische
+abergläubischem
+abergläubischen
+abergläubischer
+abergläubisches
+aberhundert
+aberhunderte
+aberkannt
+aberkannte
+aberkanntem
+aberkannten
+aberkannter
+aberkanntes
+aberkanntest
+aberkanntet
+aberkanntst
+aberkenne
+aberkennen
+aberkennend
+aberkennende
+aberkennendem
+aberkennenden
+aberkennender
+aberkennendes
+aberkennst
+aberkennt
+abermalig
+abermalige
+abermaligem
+abermaligen
+abermaliger
+abermaliges
+abermals
+abernte
+abernten
+aberntend
+aberntende
+aberntendem
+aberntenden
+aberntender
+aberntendes
+aberntest
+aberntet
+aberntete
+abernteten
+aberntetest
+aberntetet
+abertausend
+abertausende
+abesse
+abessen
+abessend
+abessende
+abessendem
+abessenden
+abessender
+abessendes
+abessinisch
+abessinische
+abessinischem
+abessinischen
+abessinischer
+abessinisches
+abesst
+abfahre
+abfahren
+abfahrend
+abfahrende
+abfahrendem
+abfahrenden
+abfahrender
+abfahrendes
+abfahrt
+abfalle
+abfallen
+abfallend
+abfallende
+abfallendem
+abfallenden
+abfallender
+abfallendes
+abfallt
+abfange
+abfangen
+abfangend
+abfangende
+abfangendem
+abfangenden
+abfangender
+abfangendes
+abfangt
+abfasse
+abfassen
+abfassend
+abfassende
+abfassendem
+abfassenden
+abfassender
+abfassendes
+abfassest
+abfasst
+abfasste
+abfassten
+abfasstest
+abfasstet
+abfaule
+abfaulen
+abfaulend
+abfaulende
+abfaulendem
+abfaulenden
+abfaulender
+abfaulendes
+abfaulst
+abfault
+abfaulte
+abfaulten
+abfaultest
+abfaultet
+abfeile
+abfeilen
+abfeilend
+abfeilende
+abfeilendem
+abfeilenden
+abfeilender
+abfeilendes
+abfeilst
+abfeilt
+abfeilte
+abfeilten
+abfeiltest
+abfeiltet
+abfertige
+abfertigen
+abfertigend
+abfertigende
+abfertigendem
+abfertigenden
+abfertigender
+abfertigendes
+abfertigst
+abfertigt
+abfertigte
+abfertigten
+abfertigtest
+abfertigtet
+abfeuere
+abfeuern
+abfeuernd
+abfeuernde
+abfeuerndem
+abfeuernden
+abfeuernder
+abfeuerndes
+abfeuerst
+abfeuert
+abfeuerte
+abfeuerten
+abfeuertest
+abfeuertet
+abfeure
+abfinde
+abfinden
+abfindest
+abfindet
+abfing
+abfingen
+abfingst
+abfingt
+abflache
+abflachen
+abflachend
+abflachende
+abflachendem
+abflachenden
+abflachender
+abflachendes
+abflachst
+abflacht
+abflachte
+abflachten
+abflachtest
+abflachtet
+abflaue
+abflauen
+abflauend
+abflauende
+abflauendem
+abflauenden
+abflauender
+abflauendes
+abflaust
+abflaut
+abflaute
+abflauten
+abflautest
+abflautet
+abfliege
+abfliegen
+abfliegend
+abfliegende
+abfliegendem
+abfliegenden
+abfliegender
+abfliegendes
+abfliegst
+abfliegt
+abfließe
+abfließen
+abfließend
+abfließende
+abfließendem
+abfließenden
+abfließender
+abfließendes
+abfließest
+abfließt
+abflog
+abflogen
+abflogst
+abflogt
+abfloss
+abflossen
+abflossest
+abflosst
+abfordere
+abfordern
+abfordernd
+abfordernde
+abforderndem
+abfordernden
+abfordernder
+abforderndes
+abforderst
+abfordert
+abforderte
+abforderten
+abfordertest
+abfordertet
+abfordre
+abfotografiere
+abfotografieren
+abfotografierend
+abfotografierende
+abfotografierendem
+abfotografierenden
+abfotografierender
+abfotografierendes
+abfotografierst
+abfotografiert
+abfotografierte
+abfotografiertem
+abfotografierten
+abfotografierter
+abfotografiertes
+abfotografiertest
+abfotografiertet
+abfragbar
+abfragbare
+abfragbarem
+abfragbaren
+abfragbarer
+abfragbares
+abfrage
+abfragen
+abfragend
+abfragende
+abfragendem
+abfragenden
+abfragender
+abfragendes
+abfragst
+abfragt
+abfragte
+abfragten
+abfragtest
+abfragtet
+abfräse
+abfräsen
+abfräsend
+abfräsende
+abfräsendem
+abfräsenden
+abfräsender
+abfräsendes
+abfräsest
+abfräst
+abfräste
+abfrästen
+abfrästest
+abfrästet
+abfährst
+abfährt
+abfällig
+abfällige
+abfälligem
+abfälligen
+abfälliger
+abfälligere
+abfälligerem
+abfälligeren
+abfälligerer
+abfälligeres
+abfälliges
+abfälligste
+abfälligstem
+abfälligsten
+abfälligster
+abfälligstes
+abfällst
+abfällt
+abfängst
+abfängt
+abfärbe
+abfärben
+abfärbend
+abfärbende
+abfärbendem
+abfärbenden
+abfärbender
+abfärbendes
+abfärbst
+abfärbt
+abfärbte
+abfärbten
+abfärbtest
+abfärbtet
+abführe
+abführen
+abführend
+abführende
+abführendem
+abführenden
+abführender
+abführendes
+abführst
+abführt
+abführte
+abführten
+abführtest
+abführtet
+abfülle
+abfüllen
+abfüllend
+abfüllende
+abfüllendem
+abfüllenden
+abfüllender
+abfüllendes
+abfüllst
+abfüllt
+abfüllte
+abfüllten
+abfülltest
+abfülltet
+abfüttere
+abfüttern
+abfütternd
+abfütternde
+abfütterndem
+abfütternden
+abfütternder
+abfütterndes
+abfütterst
+abfüttert
+abfütterte
+abfütterten
+abfüttertest
+abfüttertet
+abfüttre
+abgab
+abgaben
+abgabst
+abgabt
+abgearbeitet
+abgearbeitete
+abgearbeitetem
+abgearbeiteten
+abgearbeiteter
+abgearbeitetes
+abgebaut
+abgebaute
+abgebautem
+abgebauten
+abgebauter
+abgebautes
+abgebbar
+abgebbare
+abgebbarem
+abgebbaren
+abgebbarer
+abgebbares
+abgebe
+abgeben
+abgebend
+abgebende
+abgebendem
+abgebenden
+abgebender
+abgebendes
+abgebettelt
+abgebettelte
+abgebetteltem
+abgebettelten
+abgebettelter
+abgebetteltes
+abgebildet
+abgebildete
+abgebildetem
+abgebildeten
+abgebildeter
+abgebildetes
+abgebissen
+abgebissene
+abgebissenem
+abgebissenen
+abgebissener
+abgebissenes
+abgeblasen
+abgeblasene
+abgeblasenem
+abgeblasenen
+abgeblasener
+abgeblasenes
+abgeblendet
+abgeblendete
+abgeblendetem
+abgeblendeten
+abgeblendeter
+abgeblendetes
+abgeblitzt
+abgeblitzte
+abgeblitztem
+abgeblitzten
+abgeblitzter
+abgeblitztes
+abgeblättert
+abgeblätterte
+abgeblättertem
+abgeblätterten
+abgeblätterter
+abgeblättertes
+abgebogen
+abgebogene
+abgebogenem
+abgebogenen
+abgebogener
+abgebogenes
+abgebracht
+abgebrachte
+abgebrachtem
+abgebrachten
+abgebrachter
+abgebrachtes
+abgebrannt
+abgebrannte
+abgebranntem
+abgebrannten
+abgebrannter
+abgebranntes
+abgebraust
+abgebrauste
+abgebraustem
+abgebrausten
+abgebrauster
+abgebraustes
+abgebremst
+abgebremste
+abgebremstem
+abgebremsten
+abgebremster
+abgebremstes
+abgebrochen
+abgebrochene
+abgebrochenem
+abgebrochenen
+abgebrochener
+abgebrochenes
+abgebröckelt
+abgebröckelte
+abgebröckeltem
+abgebröckelten
+abgebröckelter
+abgebröckeltes
+abgebrüht
+abgebrühte
+abgebrühtem
+abgebrühten
+abgebrühter
+abgebrühtere
+abgebrühterem
+abgebrühteren
+abgebrühterer
+abgebrühteres
+abgebrühtes
+abgebrühteste
+abgebrühtestem
+abgebrühtesten
+abgebrühtester
+abgebrühtestes
+abgebt
+abgebucht
+abgebuchte
+abgebuchtem
+abgebuchten
+abgebuchter
+abgebuchtes
+abgebunden
+abgebundene
+abgebundenem
+abgebundenen
+abgebundener
+abgebundenes
+abgebürstet
+abgebürstete
+abgebürstetem
+abgebürsteten
+abgebürsteter
+abgebürstetes
+abgedankt
+abgedankte
+abgedanktem
+abgedankten
+abgedankter
+abgedanktes
+abgedeckt
+abgedeckte
+abgedecktem
+abgedeckten
+abgedeckter
+abgedecktes
+abgedichtet
+abgedichtete
+abgedichtetem
+abgedichteten
+abgedichteter
+abgedichtetes
+abgedient
+abgediente
+abgedientem
+abgedienten
+abgedienter
+abgedientes
+abgedreht
+abgedrehte
+abgedrehtem
+abgedrehten
+abgedrehter
+abgedrehtes
+abgedriftet
+abgedriftete
+abgedriftetem
+abgedrifteten
+abgedrifteter
+abgedriftetes
+abgedrosselt
+abgedrosselte
+abgedrosseltem
+abgedrosselten
+abgedrosselter
+abgedrosseltes
+abgedruckt
+abgedruckte
+abgedrucktem
+abgedruckten
+abgedruckter
+abgedrucktes
+abgedrängt
+abgedrängte
+abgedrängtem
+abgedrängten
+abgedrängter
+abgedrängtes
+abgedrückt
+abgedrückte
+abgedrücktem
+abgedrückten
+abgedrückter
+abgedrücktes
+abgeerntet
+abgeerntete
+abgeerntetem
+abgeernteten
+abgeernteter
+abgeerntetes
+abgefahren
+abgefahrene
+abgefahrenem
+abgefahrenen
+abgefahrener
+abgefahrenes
+abgefallen
+abgefallene
+abgefallenem
+abgefallenen
+abgefallener
+abgefallenes
+abgefangen
+abgefangene
+abgefangenem
+abgefangenen
+abgefangener
+abgefangenes
+abgefasst
+abgefasste
+abgefasstem
+abgefassten
+abgefasster
+abgefasstes
+abgefault
+abgefaulte
+abgefaultem
+abgefaulten
+abgefaulter
+abgefaultes
+abgefeilt
+abgefeilte
+abgefeiltem
+abgefeilten
+abgefeilter
+abgefeiltes
+abgefeimt
+abgefeimte
+abgefeimtem
+abgefeimten
+abgefeimter
+abgefeimtes
+abgefertigt
+abgefertigte
+abgefertigtem
+abgefertigten
+abgefertigter
+abgefertigtes
+abgefeuert
+abgefeuerte
+abgefeuertem
+abgefeuerten
+abgefeuerter
+abgefeuertes
+abgeflacht
+abgeflachte
+abgeflachtem
+abgeflachten
+abgeflachter
+abgeflachtes
+abgeflaut
+abgeflaute
+abgeflautem
+abgeflauten
+abgeflauter
+abgeflautes
+abgeflogen
+abgeflogene
+abgeflogenem
+abgeflogenen
+abgeflogener
+abgeflogenes
+abgeflossen
+abgeflossene
+abgeflossenem
+abgeflossenen
+abgeflossener
+abgeflossenes
+abgefordert
+abgeforderte
+abgefordertem
+abgeforderten
+abgeforderter
+abgefordertes
+abgefragt
+abgefragte
+abgefragtem
+abgefragten
+abgefragter
+abgefragtes
+abgefunden
+abgefundene
+abgefundenem
+abgefundenen
+abgefundener
+abgefundenes
+abgefärbt
+abgefärbte
+abgefärbtem
+abgefärbten
+abgefärbter
+abgefärbtes
+abgeführt
+abgeführte
+abgeführtem
+abgeführten
+abgeführter
+abgeführtes
+abgefüllt
+abgefüllte
+abgefülltem
+abgefüllten
+abgefüllter
+abgefülltes
+abgefüttert
+abgefütterte
+abgefüttertem
+abgefütterten
+abgefütterter
+abgefüttertes
+abgegangen
+abgegangene
+abgegangenem
+abgegangenen
+abgegangener
+abgegangenes
+abgegeben
+abgegebene
+abgegebenem
+abgegebenen
+abgegebener
+abgegebenes
+abgeglitten
+abgeglittene
+abgeglittenem
+abgeglittenen
+abgeglittener
+abgeglittenes
+abgegolten
+abgegoltene
+abgegoltenem
+abgegoltenen
+abgegoltener
+abgegoltenes
+abgegossen
+abgegossene
+abgegossenem
+abgegossenen
+abgegossener
+abgegossenes
+abgegraben
+abgegrabene
+abgegrabenem
+abgegrabenen
+abgegrabener
+abgegrabenes
+abgegrast
+abgegraste
+abgegrastem
+abgegrasten
+abgegraster
+abgegrastes
+abgegrenzt
+abgegrenzte
+abgegrenztem
+abgegrenzten
+abgegrenzter
+abgegrenztes
+abgegriffen
+abgegriffene
+abgegriffenem
+abgegriffenen
+abgegriffener
+abgegriffenes
+abgehackt
+abgehackte
+abgehacktem
+abgehackten
+abgehackter
+abgehacktes
+abgehalten
+abgehaltene
+abgehaltenem
+abgehaltenen
+abgehaltener
+abgehaltenes
+abgehandelt
+abgehandelte
+abgehandeltem
+abgehandelten
+abgehandelter
+abgehandeltes
+abgehangen
+abgehangene
+abgehangenem
+abgehangenen
+abgehangener
+abgehangenes
+abgehauen
+abgehauene
+abgehauenem
+abgehauenen
+abgehauener
+abgehauenes
+abgehe
+abgehebelt
+abgehebelte
+abgehebeltem
+abgehebelten
+abgehebelter
+abgehebeltes
+abgeheilt
+abgeheilte
+abgeheiltem
+abgeheilten
+abgeheilter
+abgeheiltes
+abgehen
+abgehend
+abgehende
+abgehendem
+abgehenden
+abgehender
+abgehendes
+abgehetzt
+abgehetzte
+abgehetztem
+abgehetzten
+abgehetzter
+abgehetztes
+abgehoben
+abgehobene
+abgehobenem
+abgehobenen
+abgehobener
+abgehobenes
+abgeholt
+abgeholte
+abgeholtem
+abgeholten
+abgeholter
+abgeholtes
+abgeholzt
+abgeholzte
+abgeholztem
+abgeholzten
+abgeholzter
+abgeholztes
+abgehorcht
+abgehorchte
+abgehorchtem
+abgehorchten
+abgehorchter
+abgehorchtes
+abgehst
+abgeht
+abgehängt
+abgehängte
+abgehängtem
+abgehängten
+abgehängter
+abgehängtes
+abgehärmt
+abgehärmte
+abgehärmtem
+abgehärmten
+abgehärmter
+abgehärmtes
+abgehärtet
+abgehärtete
+abgehärtetem
+abgehärteten
+abgehärteter
+abgehärtetere
+abgehärteterem
+abgehärteteren
+abgehärteterer
+abgehärteteres
+abgehärtetes
+abgehärtetste
+abgehärtetstem
+abgehärtetsten
+abgehärtetster
+abgehärtetstes
+abgehört
+abgehörte
+abgehörtem
+abgehörten
+abgehörter
+abgehörtes
+abgejagt
+abgejagte
+abgejagtem
+abgejagten
+abgejagter
+abgejagtes
+abgekartet
+abgekartete
+abgekartetem
+abgekarteten
+abgekarteter
+abgekartetes
+abgekauft
+abgekaufte
+abgekauftem
+abgekauften
+abgekaufter
+abgekauftes
+abgekehrt
+abgekehrte
+abgekehrtem
+abgekehrten
+abgekehrter
+abgekehrtes
+abgeklappert
+abgeklapperte
+abgeklappertem
+abgeklapperten
+abgeklapperter
+abgeklappertes
+abgeklemmt
+abgeklemmte
+abgeklemmtem
+abgeklemmten
+abgeklemmter
+abgeklemmtes
+abgeklopft
+abgeklopfte
+abgeklopftem
+abgeklopften
+abgeklopfter
+abgeklopftes
+abgeklungen
+abgeklungene
+abgeklungenem
+abgeklungenen
+abgeklungener
+abgeklungenes
+abgeklärt
+abgeklärte
+abgeklärtem
+abgeklärten
+abgeklärter
+abgeklärtes
+abgeknabbert
+abgeknabberte
+abgeknabbertem
+abgeknabberten
+abgeknabberter
+abgeknabbertes
+abgeknallt
+abgeknallte
+abgeknalltem
+abgeknallten
+abgeknallter
+abgeknalltes
+abgeknickt
+abgeknickte
+abgeknicktem
+abgeknickten
+abgeknickter
+abgeknicktes
+abgekocht
+abgekochte
+abgekochtem
+abgekochten
+abgekochter
+abgekochtere
+abgekochterem
+abgekochteren
+abgekochterer
+abgekochteres
+abgekochtes
+abgekochteste
+abgekochtestem
+abgekochtesten
+abgekochtester
+abgekochtestes
+abgekommen
+abgekommene
+abgekommenem
+abgekommenen
+abgekommener
+abgekommenes
+abgekoppelt
+abgekoppelte
+abgekoppeltem
+abgekoppelten
+abgekoppelter
+abgekoppeltes
+abgekratzt
+abgekratzte
+abgekratztem
+abgekratzten
+abgekratzter
+abgekratztes
+abgekriegt
+abgekriegte
+abgekriegtem
+abgekriegten
+abgekriegter
+abgekriegtes
+abgekämpft
+abgekämpfte
+abgekämpftem
+abgekämpften
+abgekämpfter
+abgekämpftes
+abgekühlt
+abgekühlte
+abgekühltem
+abgekühlten
+abgekühlter
+abgekühltes
+abgekürzt
+abgekürzte
+abgekürztem
+abgekürzten
+abgekürzter
+abgekürztes
+abgeküsst
+abgeküsste
+abgeküsstem
+abgeküssten
+abgeküsster
+abgeküsstes
+abgeladen
+abgeladene
+abgeladenem
+abgeladenen
+abgeladener
+abgeladenes
+abgelagert
+abgelagerte
+abgelagertem
+abgelagerten
+abgelagerter
+abgelagertes
+abgelassen
+abgelassene
+abgelassenem
+abgelassenen
+abgelassener
+abgelassenes
+abgelaufen
+abgelaufene
+abgelaufenem
+abgelaufenen
+abgelaufener
+abgelaufenes
+abgeleckt
+abgeleckte
+abgelecktem
+abgeleckten
+abgeleckter
+abgelecktes
+abgelegen
+abgelegene
+abgelegenem
+abgelegenen
+abgelegener
+abgelegenere
+abgelegenerem
+abgelegeneren
+abgelegenerer
+abgelegeneres
+abgelegenes
+abgelegenste
+abgelegenstem
+abgelegensten
+abgelegenster
+abgelegenstes
+abgelegt
+abgelegte
+abgelegtem
+abgelegten
+abgelegter
+abgelegtes
+abgelehnt
+abgelehnte
+abgelehntem
+abgelehnten
+abgelehnter
+abgelehntes
+abgeleistet
+abgeleistete
+abgeleistetem
+abgeleisteten
+abgeleisteter
+abgeleistetes
+abgeleitet
+abgeleitete
+abgeleitetem
+abgeleiteten
+abgeleiteter
+abgeleitetes
+abgelenkt
+abgelenkte
+abgelenktem
+abgelenkten
+abgelenkter
+abgelenktes
+abgelesen
+abgelesene
+abgelesenem
+abgelesenen
+abgelesener
+abgelesenes
+abgeleugnet
+abgeleugnete
+abgeleugnetem
+abgeleugneten
+abgeleugneter
+abgeleugnetes
+abgeliefert
+abgelieferte
+abgeliefertem
+abgelieferten
+abgelieferter
+abgeliefertes
+abgelöscht
+abgelöschte
+abgelöschtem
+abgelöschten
+abgelöschter
+abgelöschtes
+abgelöst
+abgelöste
+abgelöstem
+abgelösten
+abgelöster
+abgelöstes
+abgemacht
+abgemachte
+abgemachtem
+abgemachten
+abgemachter
+abgemachtes
+abgemagert
+abgemagerte
+abgemagertem
+abgemagerten
+abgemagerter
+abgemagertes
+abgemeldet
+abgemeldete
+abgemeldetem
+abgemeldeten
+abgemeldeter
+abgemeldetes
+abgemessen
+abgemessene
+abgemessenem
+abgemessenen
+abgemessener
+abgemessenes
+abgemildert
+abgemilderte
+abgemildertem
+abgemilderten
+abgemilderter
+abgemildertes
+abgemustert
+abgemusterte
+abgemustertem
+abgemusterten
+abgemusterter
+abgemustertes
+abgemüht
+abgemühte
+abgemühtem
+abgemühten
+abgemühter
+abgemühtes
+abgenabelt
+abgenabelte
+abgenabeltem
+abgenabelten
+abgenabelter
+abgenabeltes
+abgenagt
+abgenagte
+abgenagtem
+abgenagten
+abgenagter
+abgenagtes
+abgeneigt
+abgeneigte
+abgeneigtem
+abgeneigten
+abgeneigter
+abgeneigtes
+abgenommen
+abgenommene
+abgenommenem
+abgenommenen
+abgenommener
+abgenommenes
+abgenutzt
+abgenutzte
+abgenutztem
+abgenutzten
+abgenutzter
+abgenutztes
+abgenötigt
+abgenötigte
+abgenötigtem
+abgenötigten
+abgenötigter
+abgenötigtes
+abgenützt
+abgenützte
+abgenütztem
+abgenützten
+abgenützter
+abgenütztes
+abgeordnet
+abgeordnete
+abgeordnetem
+abgeordneten
+abgeordneter
+abgeordnetes
+abgepasst
+abgepasste
+abgepasstem
+abgepassten
+abgepasster
+abgepasstes
+abgepfiffen
+abgepfiffene
+abgepfiffenem
+abgepfiffenen
+abgepfiffener
+abgepfiffenes
+abgepflückt
+abgepflückte
+abgepflücktem
+abgepflückten
+abgepflückter
+abgepflücktes
+abgeplagt
+abgeplagte
+abgeplagtem
+abgeplagten
+abgeplagter
+abgeplagtes
+abgeprallt
+abgeprallte
+abgepralltem
+abgeprallten
+abgeprallter
+abgepralltes
+abgeputzt
+abgeputzte
+abgeputztem
+abgeputzten
+abgeputzter
+abgeputztes
+abgequetscht
+abgequetschte
+abgequetschtem
+abgequetschten
+abgequetschter
+abgequetschtes
+abgequält
+abgequälte
+abgequältem
+abgequälten
+abgequälter
+abgequältes
+abgerackert
+abgerackerte
+abgerackertem
+abgerackerten
+abgerackerter
+abgerackertes
+abgeraten
+abgeratene
+abgeratenem
+abgeratenen
+abgeratener
+abgeratenes
+abgerechnet
+abgerechnete
+abgerechnetem
+abgerechneten
+abgerechneter
+abgerechnetes
+abgereist
+abgereiste
+abgereistem
+abgereisten
+abgereister
+abgereistes
+abgerichtet
+abgerichtete
+abgerichtetem
+abgerichteten
+abgerichteter
+abgerichtetes
+abgerieben
+abgeriebene
+abgeriebenem
+abgeriebenen
+abgeriebener
+abgeriebenes
+abgeriegelt
+abgeriegelte
+abgeriegeltem
+abgeriegelten
+abgeriegelter
+abgeriegeltes
+abgerissen
+abgerissene
+abgerissenem
+abgerissenen
+abgerissener
+abgerissenes
+abgerollt
+abgerollte
+abgerolltem
+abgerollten
+abgerollter
+abgerolltes
+abgerufen
+abgerufene
+abgerufenem
+abgerufenen
+abgerufener
+abgerufenes
+abgerundet
+abgerundete
+abgerundetem
+abgerundeten
+abgerundeter
+abgerundetes
+abgerungen
+abgerungene
+abgerungenem
+abgerungenen
+abgerungener
+abgerungenes
+abgerutscht
+abgerutschte
+abgerutschtem
+abgerutschten
+abgerutschter
+abgerutschtes
+abgeräumt
+abgeräumte
+abgeräumtem
+abgeräumten
+abgeräumter
+abgeräumtes
+abgerückt
+abgerückte
+abgerücktem
+abgerückten
+abgerückter
+abgerücktes
+abgerüstet
+abgerüstete
+abgerüstetem
+abgerüsteten
+abgerüsteter
+abgerüstetes
+abgesackt
+abgesackte
+abgesacktem
+abgesackten
+abgesackter
+abgesacktes
+abgesagt
+abgesagte
+abgesagtem
+abgesagten
+abgesagter
+abgesagtes
+abgesandt
+abgesandte
+abgesandtem
+abgesandten
+abgesandter
+abgesandtes
+abgesaugt
+abgesaugte
+abgesaugtem
+abgesaugten
+abgesaugter
+abgesaugtes
+abgeschabt
+abgeschabte
+abgeschabtem
+abgeschabten
+abgeschabter
+abgeschabtes
+abgeschafft
+abgeschaffte
+abgeschafftem
+abgeschafften
+abgeschaffter
+abgeschafftes
+abgeschaltet
+abgeschaltete
+abgeschaltetem
+abgeschalteten
+abgeschalteter
+abgeschaltetes
+abgeschickt
+abgeschickte
+abgeschicktem
+abgeschickten
+abgeschickter
+abgeschicktes
+abgeschieden
+abgeschiedene
+abgeschiedenem
+abgeschiedenen
+abgeschiedener
+abgeschiedenes
+abgeschirmt
+abgeschirmte
+abgeschirmtem
+abgeschirmten
+abgeschirmter
+abgeschirmtes
+abgeschlachtet
+abgeschlachtete
+abgeschlachtetem
+abgeschlachteten
+abgeschlachteter
+abgeschlachtetes
+abgeschlafft
+abgeschlaffte
+abgeschlafftem
+abgeschlafften
+abgeschlaffter
+abgeschlafftes
+abgeschlagen
+abgeschlagene
+abgeschlagenem
+abgeschlagenen
+abgeschlagener
+abgeschlagenes
+abgeschleckt
+abgeschleckte
+abgeschlecktem
+abgeschleckten
+abgeschleckter
+abgeschlecktes
+abgeschleppt
+abgeschleppte
+abgeschlepptem
+abgeschleppten
+abgeschleppter
+abgeschlepptes
+abgeschliffen
+abgeschliffene
+abgeschliffenem
+abgeschliffenen
+abgeschliffener
+abgeschliffenes
+abgeschlossen
+abgeschlossene
+abgeschlossenem
+abgeschlossenen
+abgeschlossener
+abgeschlossenes
+abgeschmackt
+abgeschmackte
+abgeschmacktem
+abgeschmackten
+abgeschmackter
+abgeschmacktes
+abgeschmettert
+abgeschmetterte
+abgeschmettertem
+abgeschmetterten
+abgeschmetterter
+abgeschmettertes
+abgeschmiert
+abgeschmierte
+abgeschmiertem
+abgeschmierten
+abgeschmierter
+abgeschmiertes
+abgeschminkt
+abgeschminkte
+abgeschminktem
+abgeschminkten
+abgeschminkter
+abgeschminktes
+abgeschmolzen
+abgeschmolzene
+abgeschmolzenem
+abgeschmolzenen
+abgeschmolzener
+abgeschmolzenes
+abgeschnitten
+abgeschnittene
+abgeschnittenem
+abgeschnittenen
+abgeschnittener
+abgeschnittenes
+abgeschnürt
+abgeschnürte
+abgeschnürtem
+abgeschnürten
+abgeschnürter
+abgeschnürtes
+abgeschoben
+abgeschobene
+abgeschobenem
+abgeschobenen
+abgeschobener
+abgeschobenes
+abgeschossen
+abgeschossene
+abgeschossenem
+abgeschossenen
+abgeschossener
+abgeschossenes
+abgeschraubt
+abgeschraubte
+abgeschraubtem
+abgeschraubten
+abgeschraubter
+abgeschraubtes
+abgeschreckt
+abgeschreckte
+abgeschrecktem
+abgeschreckten
+abgeschreckter
+abgeschrecktes
+abgeschrieben
+abgeschriebene
+abgeschriebenem
+abgeschriebenen
+abgeschriebener
+abgeschriebenes
+abgeschritten
+abgeschrittene
+abgeschrittenem
+abgeschrittenen
+abgeschrittener
+abgeschrittenes
+abgeschrägt
+abgeschrägte
+abgeschrägtem
+abgeschrägten
+abgeschrägter
+abgeschrägtes
+abgeschuftet
+abgeschuftete
+abgeschuftetem
+abgeschufteten
+abgeschufteter
+abgeschuftetes
+abgeschweift
+abgeschweifte
+abgeschweiftem
+abgeschweiften
+abgeschweifter
+abgeschweiftes
+abgeschwenkt
+abgeschwenkte
+abgeschwenktem
+abgeschwenkten
+abgeschwenkter
+abgeschwenktes
+abgeschworen
+abgeschworene
+abgeschworenem
+abgeschworenen
+abgeschworener
+abgeschworenes
+abgeschwächt
+abgeschwächte
+abgeschwächtem
+abgeschwächten
+abgeschwächter
+abgeschwächtes
+abgeschätzt
+abgeschätzte
+abgeschätztem
+abgeschätzten
+abgeschätzter
+abgeschätztes
+abgeschöpft
+abgeschöpfte
+abgeschöpftem
+abgeschöpften
+abgeschöpfter
+abgeschöpftes
+abgeschürft
+abgeschürfte
+abgeschürftem
+abgeschürften
+abgeschürfter
+abgeschürftes
+abgeschüttelt
+abgeschüttelte
+abgeschütteltem
+abgeschüttelten
+abgeschüttelter
+abgeschütteltes
+abgesegelt
+abgesegelte
+abgesegeltem
+abgesegelten
+abgesegelter
+abgesegeltes
+abgesegnet
+abgesegnete
+abgesegnetem
+abgesegneten
+abgesegneter
+abgesegnetes
+abgesehen
+abgeseift
+abgeseifte
+abgeseiftem
+abgeseiften
+abgeseifter
+abgeseiftes
+abgeseilt
+abgeseilte
+abgeseiltem
+abgeseilten
+abgeseilter
+abgeseiltes
+abgesendet
+abgesendete
+abgesendetem
+abgesendeten
+abgesendeter
+abgesendetes
+abgesenkt
+abgesenkte
+abgesenktem
+abgesenkten
+abgesenkter
+abgesenktes
+abgesessen
+abgesessene
+abgesessenem
+abgesessenen
+abgesessener
+abgesessenes
+abgesetzt
+abgesetzte
+abgesetztem
+abgesetzten
+abgesetzter
+abgesetztes
+abgesichert
+abgesicherte
+abgesichertem
+abgesicherten
+abgesicherter
+abgesichertes
+abgesondert
+abgesonderte
+abgesondertem
+abgesonderten
+abgesonderter
+abgesondertere
+abgesonderterem
+abgesonderteren
+abgesonderterer
+abgesonderteres
+abgesondertes
+abgesonderteste
+abgesondertestem
+abgesondertesten
+abgesondertester
+abgesondertestes
+abgespalten
+abgespaltene
+abgespaltenem
+abgespaltenen
+abgespaltener
+abgespaltenes
+abgespannt
+abgespannte
+abgespanntem
+abgespannten
+abgespannter
+abgespanntes
+abgespart
+abgesparte
+abgespartem
+abgesparten
+abgesparter
+abgespartes
+abgespeckt
+abgespeckte
+abgespecktem
+abgespeckten
+abgespeckter
+abgespecktes
+abgespeichert
+abgespeicherte
+abgespeichertem
+abgespeicherten
+abgespeicherter
+abgespeichertes
+abgespeist
+abgespeiste
+abgespeistem
+abgespeisten
+abgespeister
+abgespeistes
+abgesperrt
+abgesperrte
+abgesperrtem
+abgesperrten
+abgesperrter
+abgesperrtes
+abgespiegelt
+abgespiegelte
+abgespiegeltem
+abgespiegelten
+abgespiegelter
+abgespiegeltes
+abgespielt
+abgespielte
+abgespieltem
+abgespielten
+abgespielter
+abgespieltes
+abgespiesen
+abgespiesene
+abgespiesenem
+abgespiesenen
+abgespiesener
+abgespiesenes
+abgesplittert
+abgesplitterte
+abgesplittertem
+abgesplitterten
+abgesplitterter
+abgesplittertes
+abgespritzt
+abgespritzte
+abgespritztem
+abgespritzten
+abgespritzter
+abgespritztes
+abgesprochen
+abgesprochene
+abgesprochenem
+abgesprochenen
+abgesprochener
+abgesprochenes
+abgesprungen
+abgesprungene
+abgesprungenem
+abgesprungenen
+abgesprungener
+abgesprungenes
+abgespült
+abgespülte
+abgespültem
+abgespülten
+abgespülter
+abgespültes
+abgestammt
+abgestammte
+abgestammtem
+abgestammten
+abgestammter
+abgestammtes
+abgestanden
+abgestandene
+abgestandenem
+abgestandenen
+abgestandener
+abgestandenes
+abgestattet
+abgestattete
+abgestattetem
+abgestatteten
+abgestatteter
+abgestattetes
+abgestaubt
+abgestaubte
+abgestaubtem
+abgestaubten
+abgestaubter
+abgestaubtes
+abgesteckt
+abgesteckte
+abgestecktem
+abgesteckten
+abgesteckter
+abgestecktes
+abgestellt
+abgestellte
+abgestelltem
+abgestellten
+abgestellter
+abgestelltes
+abgestempelt
+abgestempelte
+abgestempeltem
+abgestempelten
+abgestempelter
+abgestempeltes
+abgesteppt
+abgesteppte
+abgestepptem
+abgesteppten
+abgesteppter
+abgestepptes
+abgestiegen
+abgestiegene
+abgestiegenem
+abgestiegenen
+abgestiegener
+abgestiegenes
+abgestimmt
+abgestimmte
+abgestimmtem
+abgestimmten
+abgestimmter
+abgestimmtes
+abgestochen
+abgestochene
+abgestochenem
+abgestochenen
+abgestochener
+abgestochenes
+abgestoppt
+abgestoppte
+abgestopptem
+abgestoppten
+abgestoppter
+abgestopptes
+abgestorben
+abgestorbene
+abgestorbenem
+abgestorbenen
+abgestorbener
+abgestorbenes
+abgestottert
+abgestotterte
+abgestottertem
+abgestotterten
+abgestotterter
+abgestottertes
+abgestoßen
+abgestoßene
+abgestoßenem
+abgestoßenen
+abgestoßener
+abgestoßenes
+abgestrahlt
+abgestrahlte
+abgestrahltem
+abgestrahlten
+abgestrahlter
+abgestrahltes
+abgestreift
+abgestreifte
+abgestreiftem
+abgestreiften
+abgestreifter
+abgestreiftes
+abgestrichen
+abgestrichene
+abgestrichenem
+abgestrichenen
+abgestrichener
+abgestrichenes
+abgestritten
+abgestrittene
+abgestrittenem
+abgestrittenen
+abgestrittener
+abgestrittenes
+abgestuft
+abgestufte
+abgestuftem
+abgestuften
+abgestufter
+abgestuftes
+abgestumpft
+abgestumpfte
+abgestumpftem
+abgestumpften
+abgestumpfter
+abgestumpftere
+abgestumpfterem
+abgestumpfteren
+abgestumpfterer
+abgestumpfteres
+abgestumpftes
+abgestumpfteste
+abgestumpftestem
+abgestumpftesten
+abgestumpftester
+abgestumpftestes
+abgestürzt
+abgestürzte
+abgestürztem
+abgestürzten
+abgestürzter
+abgestürztes
+abgestützt
+abgestützte
+abgestütztem
+abgestützten
+abgestützter
+abgestütztes
+abgesucht
+abgesuchte
+abgesuchtem
+abgesuchten
+abgesuchter
+abgesuchtes
+abgesunken
+abgesunkene
+abgesunkenem
+abgesunkenen
+abgesunkener
+abgesunkenes
+abgesägt
+abgesägte
+abgesägtem
+abgesägten
+abgesägter
+abgesägtes
+abgetakelt
+abgetakelte
+abgetakeltem
+abgetakelten
+abgetakelter
+abgetakeltes
+abgetan
+abgetane
+abgetanem
+abgetanen
+abgetaner
+abgetanes
+abgetastet
+abgetastete
+abgetastetem
+abgetasteten
+abgetasteter
+abgetastetes
+abgeteilt
+abgeteilte
+abgeteiltem
+abgeteilten
+abgeteilter
+abgeteiltes
+abgetragen
+abgetragene
+abgetragenem
+abgetragenen
+abgetragener
+abgetragenes
+abgetrennt
+abgetrennte
+abgetrenntem
+abgetrennten
+abgetrennter
+abgetrenntes
+abgetreten
+abgetretene
+abgetretenem
+abgetretenen
+abgetretener
+abgetretenes
+abgetrieben
+abgetriebene
+abgetriebenem
+abgetriebenen
+abgetriebener
+abgetriebenes
+abgetrocknet
+abgetrocknete
+abgetrocknetem
+abgetrockneten
+abgetrockneter
+abgetrocknetes
+abgetropft
+abgetropfte
+abgetropftem
+abgetropften
+abgetropfter
+abgetropftes
+abgetupft
+abgetupfte
+abgetupftem
+abgetupften
+abgetupfter
+abgetupftes
+abgetötet
+abgetötete
+abgetötetem
+abgetöteten
+abgetöteter
+abgetötetes
+abgeurteilt
+abgeurteilte
+abgeurteiltem
+abgeurteilten
+abgeurteilter
+abgeurteiltes
+abgewandelt
+abgewandelte
+abgewandeltem
+abgewandelten
+abgewandelter
+abgewandeltes
+abgewandert
+abgewanderte
+abgewandertem
+abgewanderten
+abgewanderter
+abgewandertes
+abgewandt
+abgewandte
+abgewandtem
+abgewandten
+abgewandter
+abgewandtes
+abgewartet
+abgewartete
+abgewartetem
+abgewarteten
+abgewarteter
+abgewartetes
+abgewaschen
+abgewaschene
+abgewaschenem
+abgewaschenen
+abgewaschener
+abgewaschenes
+abgewechselt
+abgewechselte
+abgewechseltem
+abgewechselten
+abgewechselter
+abgewechseltes
+abgewehrt
+abgewehrte
+abgewehrtem
+abgewehrten
+abgewehrter
+abgewehrtes
+abgewendet
+abgewendete
+abgewendetem
+abgewendeten
+abgewendeter
+abgewendetes
+abgewertet
+abgewertete
+abgewertetem
+abgewerteten
+abgewerteter
+abgewertetes
+abgewetzt
+abgewetzte
+abgewetztem
+abgewetzten
+abgewetzter
+abgewetztes
+abgewichen
+abgewichene
+abgewichenem
+abgewichenen
+abgewichener
+abgewichenes
+abgewickelt
+abgewickelte
+abgewickeltem
+abgewickelten
+abgewickelter
+abgewickeltes
+abgewiesen
+abgewiesene
+abgewiesenem
+abgewiesenen
+abgewiesener
+abgewiesenes
+abgewinkt
+abgewinne
+abgewinnen
+abgewinnend
+abgewinnende
+abgewinnendem
+abgewinnenden
+abgewinnender
+abgewinnendes
+abgewinnst
+abgewinnt
+abgewirtschaftet
+abgewirtschaftete
+abgewirtschaftetem
+abgewirtschafteten
+abgewirtschafteter
+abgewirtschaftetes
+abgewischt
+abgewischte
+abgewischtem
+abgewischten
+abgewischter
+abgewischtes
+abgewogen
+abgewogene
+abgewogenem
+abgewogenen
+abgewogener
+abgewogenes
+abgewonnen
+abgewonnene
+abgewonnenem
+abgewonnenen
+abgewonnener
+abgewonnenes
+abgeworfen
+abgeworfene
+abgeworfenem
+abgeworfenen
+abgeworfener
+abgeworfenes
+abgewunken
+abgewunkene
+abgewunkenem
+abgewunkenen
+abgewunkener
+abgewunkenes
+abgewählt
+abgewählte
+abgewähltem
+abgewählten
+abgewählter
+abgewähltes
+abgewälzt
+abgewälzte
+abgewälztem
+abgewälzten
+abgewälzter
+abgewälztes
+abgewöhne
+abgewöhnen
+abgewöhnend
+abgewöhnende
+abgewöhnendem
+abgewöhnenden
+abgewöhnender
+abgewöhnendes
+abgewöhnst
+abgewöhnt
+abgewöhnte
+abgewöhntem
+abgewöhnten
+abgewöhnter
+abgewöhntes
+abgewöhntest
+abgewöhntet
+abgewürgt
+abgewürgte
+abgewürgtem
+abgewürgten
+abgewürgter
+abgewürgtes
+abgezahlt
+abgezahlte
+abgezahltem
+abgezahlten
+abgezahlter
+abgezahltes
+abgezapft
+abgezapfte
+abgezapftem
+abgezapften
+abgezapfter
+abgezapftes
+abgezehrt
+abgezehrte
+abgezehrtem
+abgezehrten
+abgezehrter
+abgezehrtes
+abgezeichnet
+abgezeichnete
+abgezeichnetem
+abgezeichneten
+abgezeichneter
+abgezeichnetes
+abgezielt
+abgezielte
+abgezieltem
+abgezielten
+abgezielter
+abgezieltes
+abgezinst
+abgezinste
+abgezinstem
+abgezinsten
+abgezinster
+abgezinstes
+abgezogen
+abgezogene
+abgezogenem
+abgezogenen
+abgezogener
+abgezogenes
+abgezweigt
+abgezweigte
+abgezweigtem
+abgezweigten
+abgezweigter
+abgezweigtes
+abgezwickt
+abgezwickte
+abgezwicktem
+abgezwickten
+abgezwickter
+abgezwicktes
+abgezwungen
+abgezwungene
+abgezwungenem
+abgezwungenen
+abgezwungener
+abgezwungenes
+abgezählt
+abgezählte
+abgezähltem
+abgezählten
+abgezählter
+abgezähltes
+abgezäunt
+abgezäunte
+abgezäuntem
+abgezäunten
+abgezäunter
+abgezäuntes
+abgeändert
+abgeänderte
+abgeändertem
+abgeänderten
+abgeänderter
+abgeändertes
+abgibst
+abgibt
+abgieße
+abgießen
+abgießend
+abgießende
+abgießendem
+abgießenden
+abgießender
+abgießendes
+abgießest
+abgießt
+abging
+abgingen
+abgingst
+abgingt
+abgleiche
+abgleichen
+abgleichst
+abgleicht
+abgleichte
+abgleichten
+abgleichtest
+abgleichtet
+abgleite
+abgleiten
+abgleitend
+abgleitende
+abgleitendem
+abgleitenden
+abgleitender
+abgleitendes
+abgleitest
+abgleitet
+abgrabe
+abgraben
+abgrabend
+abgrabende
+abgrabendem
+abgrabenden
+abgrabender
+abgrabendes
+abgrabt
+abgrase
+abgrasen
+abgrasend
+abgrasende
+abgrasendem
+abgrasenden
+abgrasender
+abgrasendes
+abgrasest
+abgrast
+abgraste
+abgrasten
+abgrastest
+abgrastet
+abgreifbar
+abgreifbare
+abgreifbarem
+abgreifbaren
+abgreifbarer
+abgreifbares
+abgreife
+abgreifen
+abgreifend
+abgreifende
+abgreifendem
+abgreifenden
+abgreifender
+abgreifendes
+abgreifst
+abgreift
+abgrenze
+abgrenzen
+abgrenzend
+abgrenzende
+abgrenzendem
+abgrenzenden
+abgrenzender
+abgrenzendes
+abgrenzest
+abgrenzt
+abgrenzte
+abgrenzten
+abgrenztest
+abgrenztet
+abgrundtief
+abgrundtiefe
+abgrundtiefem
+abgrundtiefen
+abgrundtiefer
+abgrundtiefes
+abhacke
+abhacken
+abhackend
+abhackende
+abhackendem
+abhackenden
+abhackender
+abhackendes
+abhackst
+abhackt
+abhackte
+abhackten
+abhacktest
+abhacktet
+abhake
+abhaken
+abhakend
+abhakende
+abhakendem
+abhakenden
+abhakender
+abhakendes
+abhakst
+abhakt
+abhakte
+abhakten
+abhaktest
+abhaktet
+abhalte
+abhalten
+abhaltend
+abhaltende
+abhaltendem
+abhaltenden
+abhaltender
+abhaltendes
+abhaltet
+abhanden
+abhaue
+abhauen
+abhauend
+abhauende
+abhauendem
+abhauenden
+abhauender
+abhauendes
+abhaust
+abhaut
+abhaute
+abhauten
+abhautest
+abhautet
+abhebe
+abheben
+abhebend
+abhebende
+abhebendem
+abhebenden
+abhebender
+abhebendes
+abhebst
+abhebt
+abheile
+abheilen
+abheilend
+abheilende
+abheilendem
+abheilenden
+abheilender
+abheilendes
+abheilst
+abheilt
+abheilte
+abheilten
+abheiltest
+abheiltet
+abhetze
+abhetzen
+abhetzend
+abhetzende
+abhetzendem
+abhetzenden
+abhetzender
+abhetzendes
+abhetzest
+abhetzt
+abhetzte
+abhetzten
+abhetztest
+abhetztet
+abhielt
+abhielten
+abhieltest
+abhieltet
+abhieltst
+abhing
+abhingen
+abhingst
+abhingt
+abhob
+abhoben
+abhobst
+abhobt
+abhold
+abholde
+abholdem
+abholden
+abholder
+abholdes
+abhole
+abholen
+abholend
+abholende
+abholendem
+abholenden
+abholender
+abholendes
+abholst
+abholt
+abholte
+abholten
+abholtest
+abholtet
+abholze
+abholzen
+abholzend
+abholzende
+abholzendem
+abholzenden
+abholzender
+abholzendes
+abholzest
+abholzt
+abholzte
+abholzten
+abholztest
+abholztet
+abhorche
+abhorchen
+abhorchend
+abhorchende
+abhorchendem
+abhorchenden
+abhorchender
+abhorchendes
+abhorchst
+abhorcht
+abhorchte
+abhorchten
+abhorchtest
+abhorchtet
+abhungere
+abhungern
+abhungernd
+abhungernde
+abhungerndem
+abhungernden
+abhungernder
+abhungerndes
+abhungerst
+abhungert
+abhungerte
+abhungerten
+abhungertest
+abhungertet
+abhungre
+abhält
+abhältst
+abhänge
+abhängen
+abhängend
+abhängende
+abhängendem
+abhängenden
+abhängender
+abhängendes
+abhängig
+abhängige
+abhängigem
+abhängigen
+abhängiger
+abhängigere
+abhängigerem
+abhängigeren
+abhängigerer
+abhängigeres
+abhängiges
+abhängigste
+abhängigstem
+abhängigsten
+abhängigster
+abhängigstes
+abhängst
+abhängt
+abhängte
+abhängten
+abhängtest
+abhängtet
+abhöre
+abhören
+abhörend
+abhörende
+abhörendem
+abhörenden
+abhörender
+abhörendes
+abhörst
+abhört
+abhörte
+abhörten
+abhörtest
+abhörtet
+abjage
+abjagen
+abjagend
+abjagende
+abjagendem
+abjagenden
+abjagender
+abjagendes
+abjagst
+abjagt
+abjagte
+abjagten
+abjagtest
+abjagtet
+abkam
+abkamen
+abkamst
+abkamt
+abkapsele
+abkapseln
+abkapselnd
+abkapselnde
+abkapselndem
+abkapselnden
+abkapselnder
+abkapselndes
+abkapselst
+abkapselt
+abkapselte
+abkapselten
+abkapseltest
+abkapseltet
+abkapsle
+abkaufe
+abkaufen
+abkaufend
+abkaufende
+abkaufendem
+abkaufenden
+abkaufender
+abkaufendes
+abkaufst
+abkauft
+abkaufte
+abkauften
+abkauftest
+abkauftet
+abkehre
+abkehren
+abkehrend
+abkehrende
+abkehrendem
+abkehrenden
+abkehrender
+abkehrendes
+abkehrst
+abkehrt
+abkehrte
+abkehrten
+abkehrtest
+abkehrtet
+abklang
+abklangen
+abklangst
+abklangt
+abklappbar
+abklappbare
+abklappbarem
+abklappbaren
+abklappbarer
+abklappbares
+abklappe
+abklappen
+abklappend
+abklappende
+abklappendem
+abklappenden
+abklappender
+abklappendes
+abklappere
+abklappern
+abklappernd
+abklappernde
+abklapperndem
+abklappernden
+abklappernder
+abklapperndes
+abklapperst
+abklappert
+abklapperte
+abklapperten
+abklappertest
+abklappertet
+abklappre
+abklappst
+abklappt
+abklappte
+abklappten
+abklapptest
+abklapptet
+abklebe
+abkleben
+abklebend
+abklebende
+abklebendem
+abklebenden
+abklebender
+abklebendes
+abklebst
+abklebt
+abklebte
+abklebten
+abklebtest
+abklebtet
+abklemme
+abklemmen
+abklemmend
+abklemmende
+abklemmendem
+abklemmenden
+abklemmender
+abklemmendes
+abklemmst
+abklemmt
+abklemmte
+abklemmten
+abklemmtest
+abklemmtet
+abklinge
+abklingen
+abklingend
+abklingende
+abklingendem
+abklingenden
+abklingender
+abklingendes
+abklingst
+abklingt
+abklopfe
+abklopfen
+abklopfend
+abklopfende
+abklopfendem
+abklopfenden
+abklopfender
+abklopfendes
+abklopfst
+abklopft
+abklopfte
+abklopften
+abklopftest
+abklopftet
+abkläre
+abklären
+abklärend
+abklärende
+abklärendem
+abklärenden
+abklärender
+abklärendes
+abklärst
+abklärt
+abklärte
+abklärten
+abklärtest
+abklärtet
+abknabbere
+abknabbern
+abknabbernd
+abknabbernde
+abknabberndem
+abknabbernden
+abknabbernder
+abknabberndes
+abknabberst
+abknabbert
+abknabberte
+abknabberten
+abknabbertest
+abknabbertet
+abknabbre
+abknalle
+abknallen
+abknallend
+abknallende
+abknallendem
+abknallenden
+abknallender
+abknallendes
+abknallst
+abknallt
+abknallte
+abknallten
+abknalltest
+abknalltet
+abknappe
+abknappen
+abknappend
+abknappende
+abknappendem
+abknappenden
+abknappender
+abknappendes
+abknappst
+abknappt
+abknappte
+abknappten
+abknapptest
+abknapptet
+abknicke
+abknicken
+abknickend
+abknickende
+abknickendem
+abknickenden
+abknickender
+abknickendes
+abknickst
+abknickt
+abknickte
+abknickten
+abknicktest
+abknicktet
+abknöpfe
+abknöpfen
+abknöpfend
+abknöpfende
+abknöpfendem
+abknöpfenden
+abknöpfender
+abknöpfendes
+abknöpfst
+abknöpft
+abknöpfte
+abknöpften
+abknöpftest
+abknöpftet
+abkoche
+abkochen
+abkochend
+abkochende
+abkochendem
+abkochenden
+abkochender
+abkochendes
+abkochst
+abkocht
+abkochte
+abkochten
+abkochtest
+abkochtet
+abkommandiere
+abkommandieren
+abkommandierend
+abkommandierende
+abkommandierendem
+abkommandierenden
+abkommandierender
+abkommandierendes
+abkommandierst
+abkommandiert
+abkommandierte
+abkommandiertem
+abkommandierten
+abkommandierter
+abkommandiertes
+abkommandiertest
+abkommandiertet
+abkomme
+abkommen
+abkommend
+abkommende
+abkommendem
+abkommenden
+abkommender
+abkommendes
+abkommst
+abkommt
+abkoppele
+abkoppeln
+abkoppelnd
+abkoppelnde
+abkoppelndem
+abkoppelnden
+abkoppelnder
+abkoppelndes
+abkoppelst
+abkoppelt
+abkoppelte
+abkoppelten
+abkoppeltest
+abkoppeltet
+abkopple
+abkratze
+abkratzen
+abkratzend
+abkratzende
+abkratzendem
+abkratzenden
+abkratzender
+abkratzendes
+abkratzest
+abkratzt
+abkratzte
+abkratzten
+abkratztest
+abkratztet
+abkriege
+abkriegen
+abkriegend
+abkriegende
+abkriegendem
+abkriegenden
+abkriegender
+abkriegendes
+abkriegst
+abkriegt
+abkriegte
+abkriegten
+abkriegtest
+abkriegtet
+abkömmlich
+abkömmliche
+abkömmlichem
+abkömmlichen
+abkömmlicher
+abkömmliches
+abkühle
+abkühlen
+abkühlend
+abkühlende
+abkühlendem
+abkühlenden
+abkühlender
+abkühlendes
+abkühlst
+abkühlt
+abkühlte
+abkühlten
+abkühltest
+abkühltet
+abkündige
+abkündigen
+abkündigst
+abkündigt
+abkündigte
+abkündigten
+abkündigtest
+abkündigtet
+abkürze
+abkürzen
+abkürzend
+abkürzende
+abkürzendem
+abkürzenden
+abkürzender
+abkürzendes
+abkürzest
+abkürzt
+abkürzte
+abkürzten
+abkürztest
+abkürztet
+abküsse
+abküssen
+abküssend
+abküssende
+abküssendem
+abküssenden
+abküssender
+abküssendes
+abküssest
+abküsst
+abküsste
+abküssten
+abküsstest
+abküsstet
+ablade
+abladen
+abladend
+abladende
+abladendem
+abladenden
+abladender
+abladendes
+abladet
+ablagere
+ablagern
+ablagernd
+ablagernde
+ablagerndem
+ablagernden
+ablagernder
+ablagerndes
+ablagerst
+ablagert
+ablagerte
+ablagerten
+ablagertest
+ablagertet
+ablagre
+ablasse
+ablassen
+ablassend
+ablassende
+ablassendem
+ablassenden
+ablassender
+ablassendes
+ablasst
+ablaufe
+ablaufen
+ablaufend
+ablaufende
+ablaufendem
+ablaufenden
+ablaufender
+ablaufendes
+ablaufqqfähig
+ablaufqqfähige
+ablaufqqfähigem
+ablaufqqfähigen
+ablaufqqfähiger
+ablaufqqfähiges
+ablauft
+ablecke
+ablecken
+ableckend
+ableckende
+ableckendem
+ableckenden
+ableckender
+ableckendes
+ableckst
+ableckt
+ableckte
+ableckten
+ablecktest
+ablecktet
+ablege
+ablegen
+ablegend
+ablegende
+ablegendem
+ablegenden
+ablegender
+ablegendes
+ablegst
+ablegt
+ablegte
+ablegten
+ablegtest
+ablegtet
+ablehne
+ablehnen
+ablehnend
+ablehnende
+ablehnendem
+ablehnenden
+ablehnender
+ablehnendes
+ablehnst
+ablehnt
+ablehnte
+ablehnten
+ablehntest
+ablehntet
+ableiste
+ableisten
+ableistend
+ableistende
+ableistendem
+ableistenden
+ableistender
+ableistendes
+ableistest
+ableistet
+ableistete
+ableisteten
+ableistetest
+ableistetet
+ableitbar
+ableitbare
+ableitbarem
+ableitbaren
+ableitbarer
+ableitbares
+ableite
+ableiten
+ableitend
+ableitende
+ableitendem
+ableitenden
+ableitender
+ableitendes
+ableitest
+ableitet
+ableitete
+ableiteten
+ableitetest
+ableitetet
+ablenke
+ablenken
+ablenkend
+ablenkende
+ablenkendem
+ablenkenden
+ablenkender
+ablenkendes
+ablenkst
+ablenkt
+ablenkte
+ablenkten
+ablenktest
+ablenktet
+ablesbar
+ablesbare
+ablesbarem
+ablesbaren
+ablesbarer
+ablesbares
+ablese
+ablesen
+ablesend
+ablesende
+ablesendem
+ablesenden
+ablesender
+ablesendes
+ablesest
+ablest
+ableugne
+ableugnen
+ableugnend
+ableugnende
+ableugnendem
+ableugnenden
+ableugnender
+ableugnendes
+ableugnest
+ableugnet
+ableugnete
+ableugneten
+ableugnetest
+ableugnetet
+ablichte
+ablichten
+ablichtend
+ablichtende
+ablichtendem
+ablichtenden
+ablichtender
+ablichtendes
+ablichtest
+ablichtet
+ablichtete
+ablichteten
+ablichtetest
+ablichtetet
+abliefere
+abliefern
+abliefernd
+abliefernde
+ablieferndem
+abliefernden
+abliefernder
+ablieferndes
+ablieferst
+abliefert
+ablieferte
+ablieferten
+abliefertest
+abliefertet
+abliefre
+abliege
+abliegen
+abliegend
+abliegende
+abliegendem
+abliegenden
+abliegender
+abliegendes
+abliegst
+abliegt
+abliegte
+abliegten
+abliegtest
+abliegtet
+ablädst
+ablädt
+abläufst
+abläuft
+ablösbar
+ablösbare
+ablösbarem
+ablösbaren
+ablösbarer
+ablösbares
+ablösche
+ablöschen
+ablöschend
+ablöschende
+ablöschendem
+ablöschenden
+ablöschender
+ablöschendes
+ablöschest
+ablöschst
+ablöscht
+ablöschte
+ablöschten
+ablöschtest
+ablöschtet
+ablöse
+ablösen
+ablösend
+ablösende
+ablösendem
+ablösenden
+ablösender
+ablösendes
+ablösest
+ablöst
+ablöste
+ablösten
+ablöstest
+ablöstet
+ablöte
+ablöten
+ablötend
+ablötende
+ablötendem
+ablötenden
+ablötender
+ablötendes
+ablötest
+ablötet
+ablötete
+ablöteten
+ablötetest
+ablötetet
+abmache
+abmachen
+abmachend
+abmachende
+abmachendem
+abmachenden
+abmachender
+abmachendes
+abmachst
+abmacht
+abmachte
+abmachten
+abmachtest
+abmachtet
+abmagere
+abmagern
+abmagernd
+abmagernde
+abmagerndem
+abmagernden
+abmagernder
+abmagerndes
+abmagerst
+abmagert
+abmagerte
+abmagerten
+abmagertest
+abmagertet
+abmagre
+abmale
+abmalen
+abmalend
+abmalende
+abmalendem
+abmalenden
+abmalender
+abmalendes
+abmalst
+abmalt
+abmalte
+abmalten
+abmaltest
+abmaltet
+abmarschiere
+abmarschieren
+abmarschierend
+abmarschierende
+abmarschierendem
+abmarschierenden
+abmarschierender
+abmarschierendes
+abmarschierst
+abmarschiert
+abmarschierte
+abmarschiertem
+abmarschierten
+abmarschierter
+abmarschiertes
+abmarschiertest
+abmarschiertet
+abmaß
+abmaßen
+abmaßest
+abmaßt
+abmelde
+abmelden
+abmeldend
+abmeldende
+abmeldendem
+abmeldenden
+abmeldender
+abmeldendes
+abmeldest
+abmeldet
+abmeldete
+abmeldeten
+abmeldetest
+abmeldetet
+abmesse
+abmessen
+abmessend
+abmessende
+abmessendem
+abmessenden
+abmessender
+abmessendes
+abmesst
+abmildere
+abmildern
+abmildernd
+abmildernde
+abmilderndem
+abmildernden
+abmildernder
+abmilderndes
+abmilderst
+abmildert
+abmilderte
+abmilderten
+abmildertest
+abmildertet
+abmildre
+abmontiere
+abmontieren
+abmontierend
+abmontierende
+abmontierendem
+abmontierenden
+abmontierender
+abmontierendes
+abmontierst
+abmontiert
+abmontierte
+abmontiertem
+abmontierten
+abmontierter
+abmontiertes
+abmontiertest
+abmontiertet
+abmustere
+abmustern
+abmusternd
+abmusternde
+abmusterndem
+abmusternden
+abmusternder
+abmusterndes
+abmusterst
+abmustert
+abmusterte
+abmusterten
+abmustertest
+abmustertet
+abmustre
+abmühe
+abmühen
+abmühend
+abmühende
+abmühendem
+abmühenden
+abmühender
+abmühendes
+abmühst
+abmüht
+abmühte
+abmühten
+abmühtest
+abmühtet
+abnabeln
+abnabelnd
+abnabelnde
+abnabelndem
+abnabelnden
+abnabelnder
+abnabelndes
+abnabelst
+abnabelt
+abnabelte
+abnabelten
+abnabeltest
+abnabeltet
+abnage
+abnagen
+abnagend
+abnagende
+abnagendem
+abnagenden
+abnagender
+abnagendes
+abnagst
+abnagt
+abnagte
+abnagten
+abnagtest
+abnagtet
+abnahm
+abnahmefähig
+abnahmefähige
+abnahmefähigem
+abnahmefähigen
+abnahmefähiger
+abnahmefähiges
+abnahmen
+abnahmst
+abnahmt
+abnehmbar
+abnehmbare
+abnehmbarem
+abnehmbaren
+abnehmbarer
+abnehmbares
+abnehme
+abnehmen
+abnehmend
+abnehmende
+abnehmendem
+abnehmenden
+abnehmender
+abnehmendes
+abnehmt
+abnimmst
+abnimmt
+abnorm
+abnorme
+abnormem
+abnormen
+abnormer
+abnormes
+abnutze
+abnutzen
+abnutzend
+abnutzende
+abnutzendem
+abnutzenden
+abnutzender
+abnutzendes
+abnutzest
+abnutzt
+abnutzte
+abnutzten
+abnutztest
+abnutztet
+abnötige
+abnötigen
+abnötigend
+abnötigende
+abnötigendem
+abnötigenden
+abnötigender
+abnötigendes
+abnötigst
+abnötigt
+abnötigte
+abnötigten
+abnötigtest
+abnötigtet
+abnütze
+abnützen
+abnützend
+abnützende
+abnützendem
+abnützenden
+abnützender
+abnützendes
+abnützest
+abnützt
+abnützte
+abnützten
+abnütztest
+abnütztet
+abonnierbar
+abonnierbare
+abonnierbarem
+abonnierbaren
+abonnierbarer
+abonnierbares
+abonniere
+abonnieren
+abonnierend
+abonnierende
+abonnierendem
+abonnierenden
+abonnierender
+abonnierendes
+abonnierst
+abonniert
+abonnierte
+abonniertem
+abonnierten
+abonnierter
+abonniertes
+abonniertest
+abonniertet
+abordne
+abordnen
+abordnend
+abordnende
+abordnendem
+abordnenden
+abordnender
+abordnendes
+abordnest
+abordnet
+abordnete
+abordneten
+abordnetest
+abordnetet
+abpasse
+abpassen
+abpassend
+abpassende
+abpassendem
+abpassenden
+abpassender
+abpassendes
+abpassest
+abpasst
+abpasste
+abpassten
+abpasstest
+abpasstet
+abpatrouilliere
+abpatrouillieren
+abpatrouillierst
+abpatrouilliert
+abpflücke
+abpflücken
+abpflückend
+abpflückende
+abpflückendem
+abpflückenden
+abpflückender
+abpflückendes
+abpflückst
+abpflückt
+abpflückte
+abpflückten
+abpflücktest
+abpflücktet
+abplage
+abplagen
+abplagend
+abplagende
+abplagendem
+abplagenden
+abplagender
+abplagendes
+abplagst
+abplagt
+abplagte
+abplagten
+abplagtest
+abplagtet
+abpralle
+abprallen
+abprallend
+abprallende
+abprallendem
+abprallenden
+abprallender
+abprallendes
+abprallst
+abprallt
+abprallte
+abprallten
+abpralltest
+abpralltet
+abpresse
+abpressen
+abpressend
+abpressende
+abpressendem
+abpressenden
+abpressender
+abpressendes
+abpressest
+abpresst
+abpresste
+abpressten
+abpresstest
+abpresstet
+abputze
+abputzen
+abputzend
+abputzende
+abputzendem
+abputzenden
+abputzender
+abputzendes
+abputzest
+abputzt
+abputzte
+abputzten
+abputztest
+abputztet
+abquetsche
+abquetschen
+abquetschend
+abquetschende
+abquetschendem
+abquetschenden
+abquetschender
+abquetschendes
+abquetschest
+abquetschst
+abquetscht
+abquetschte
+abquetschten
+abquetschtest
+abquetschtet
+abquäle
+abquälen
+abquälend
+abquälende
+abquälendem
+abquälenden
+abquälender
+abquälendes
+abquälst
+abquält
+abquälte
+abquälten
+abquältest
+abquältet
+abrackere
+abrackern
+abrackernd
+abrackernde
+abrackerndem
+abrackernden
+abrackernder
+abrackerndes
+abrackerst
+abrackert
+abrackerte
+abrackerten
+abrackertest
+abrackertet
+abrackre
+abrate
+abraten
+abratend
+abratende
+abratendem
+abratenden
+abratender
+abratendes
+abratet
+abreagiere
+abreagieren
+abreagierend
+abreagierende
+abreagierendem
+abreagierenden
+abreagierender
+abreagierendes
+abreagierst
+abreagiert
+abreagierte
+abreagiertem
+abreagierten
+abreagierter
+abreagiertes
+abreagiertest
+abreagiertet
+abrechne
+abrechnen
+abrechnend
+abrechnende
+abrechnendem
+abrechnenden
+abrechnender
+abrechnendes
+abrechnest
+abrechnet
+abrechnete
+abrechneten
+abrechnetest
+abrechnetet
+abrege
+abregen
+abregend
+abregende
+abregendem
+abregenden
+abregender
+abregendes
+abregst
+abregt
+abregte
+abregten
+abregtest
+abregtet
+abreibe
+abreiben
+abreibend
+abreibende
+abreibendem
+abreibenden
+abreibender
+abreibendes
+abreibst
+abreibt
+abreise
+abreisen
+abreisend
+abreisende
+abreisendem
+abreisenden
+abreisender
+abreisendes
+abreisest
+abreist
+abreiste
+abreisten
+abreistest
+abreistet
+abreiße
+abreißen
+abreißend
+abreißende
+abreißendem
+abreißenden
+abreißender
+abreißendes
+abreißest
+abreißt
+abrichte
+abrichten
+abrichtend
+abrichtende
+abrichtendem
+abrichtenden
+abrichtender
+abrichtendes
+abrichtest
+abrichtet
+abrichtete
+abrichteten
+abrichtetest
+abrichtetet
+abriegele
+abriegeln
+abriegelnd
+abriegelnde
+abriegelndem
+abriegelnden
+abriegelnder
+abriegelndes
+abriegelst
+abriegelt
+abriegelte
+abriegelten
+abriegeltest
+abriegeltet
+abriegle
+abriet
+abrieten
+abrietest
+abrietet
+abrietst
+abringe
+abringen
+abringend
+abringende
+abringendem
+abringenden
+abringender
+abringendes
+abringst
+abringt
+abrolle
+abrollen
+abrollend
+abrollende
+abrollendem
+abrollenden
+abrollender
+abrollendes
+abrollst
+abrollt
+abrollte
+abrollten
+abrolltest
+abrolltet
+abrufbar
+abrufbare
+abrufbarem
+abrufbaren
+abrufbarer
+abrufbares
+abrufbereit
+abrufbereite
+abrufbereitem
+abrufbereiten
+abrufbereiter
+abrufbereites
+abrufe
+abrufen
+abrufend
+abrufende
+abrufendem
+abrufenden
+abrufender
+abrufendes
+abrufst
+abruft
+abrunde
+abrunden
+abrundend
+abrundende
+abrundendem
+abrundenden
+abrundender
+abrundendes
+abrundest
+abrundet
+abrundete
+abrundeten
+abrundetest
+abrundetet
+abrupt
+abrupte
+abruptem
+abrupten
+abrupter
+abruptere
+abrupterem
+abrupteren
+abrupterer
+abrupteres
+abruptes
+abrupteste
+abruptestem
+abruptesten
+abruptester
+abruptestes
+abrutsche
+abrutschen
+abrutschend
+abrutschende
+abrutschendem
+abrutschenden
+abrutschender
+abrutschendes
+abrutschest
+abrutschst
+abrutscht
+abrutschte
+abrutschten
+abrutschtest
+abrutschtet
+abräume
+abräumen
+abräumend
+abräumende
+abräumendem
+abräumenden
+abräumender
+abräumendes
+abräumst
+abräumt
+abräumte
+abräumten
+abräumtest
+abräumtet
+abrücke
+abrücken
+abrückend
+abrückende
+abrückendem
+abrückenden
+abrückender
+abrückendes
+abrückst
+abrückt
+abrückte
+abrückten
+abrücktest
+abrücktet
+abrüste
+abrüsten
+abrüstend
+abrüstende
+abrüstendem
+abrüstenden
+abrüstender
+abrüstendes
+abrüstest
+abrüstet
+abrüstete
+abrüsteten
+abrüstetest
+abrüstetet
+absacke
+absacken
+absackend
+absackende
+absackendem
+absackenden
+absackender
+absackendes
+absackst
+absackt
+absackte
+absackten
+absacktest
+absacktet
+absage
+absagen
+absagend
+absagende
+absagendem
+absagenden
+absagender
+absagendes
+absagst
+absagt
+absagte
+absagten
+absagtest
+absagtet
+absah
+absahen
+absahst
+absaht
+absauge
+absaugen
+absaugend
+absaugende
+absaugendem
+absaugenden
+absaugender
+absaugendes
+absaugst
+absaugt
+absaugte
+absaugten
+absaugtest
+absaugtet
+abschabe
+abschaben
+abschabend
+abschabende
+abschabendem
+abschabenden
+abschabender
+abschabendes
+abschabst
+abschabt
+abschabte
+abschabten
+abschabtest
+abschabtet
+abschaffe
+abschaffen
+abschaffend
+abschaffende
+abschaffendem
+abschaffenden
+abschaffender
+abschaffendes
+abschaffst
+abschafft
+abschaffte
+abschafften
+abschafftest
+abschafftet
+abschaltbar
+abschaltbare
+abschaltbarem
+abschaltbaren
+abschaltbarer
+abschaltbares
+abschalte
+abschalten
+abschaltend
+abschaltende
+abschaltendem
+abschaltenden
+abschaltender
+abschaltendes
+abschaltest
+abschaltet
+abschaltete
+abschalteten
+abschaltetest
+abschaltetet
+abscheide
+abscheiden
+abscheidend
+abscheidende
+abscheidendem
+abscheidenden
+abscheidender
+abscheidendes
+abscheidest
+abscheidet
+abscheulich
+abscheuliche
+abscheulichem
+abscheulichen
+abscheulicher
+abscheulichere
+abscheulicherem
+abscheulicheren
+abscheulicherer
+abscheulicheres
+abscheuliches
+abscheulichste
+abscheulichstem
+abscheulichsten
+abscheulichster
+abscheulichstes
+abschicke
+abschicken
+abschickend
+abschickende
+abschickendem
+abschickenden
+abschickender
+abschickendes
+abschickst
+abschickt
+abschickte
+abschickten
+abschicktest
+abschicktet
+abschiebe
+abschieben
+abschiebend
+abschiebende
+abschiebendem
+abschiebenden
+abschiebender
+abschiebendes
+abschiebst
+abschiebt
+abschiebte
+abschiebten
+abschiebtest
+abschiebtet
+abschied
+abschieden
+abschiedest
+abschiedet
+abschiedst
+abschieße
+abschießen
+abschießend
+abschießende
+abschießendem
+abschießenden
+abschießender
+abschießendes
+abschießest
+abschießt
+abschirme
+abschirmen
+abschirmend
+abschirmende
+abschirmendem
+abschirmenden
+abschirmender
+abschirmendes
+abschirmst
+abschirmt
+abschirmte
+abschirmten
+abschirmtest
+abschirmtet
+abschlachte
+abschlachten
+abschlachtend
+abschlachtende
+abschlachtendem
+abschlachtenden
+abschlachtender
+abschlachtendes
+abschlachtest
+abschlachtet
+abschlachtete
+abschlachteten
+abschlachtetest
+abschlachtetet
+abschlage
+abschlagen
+abschlagend
+abschlagende
+abschlagendem
+abschlagenden
+abschlagender
+abschlagendes
+abschlagt
+abschleife
+abschleifen
+abschleifend
+abschleifende
+abschleifendem
+abschleifenden
+abschleifender
+abschleifendes
+abschleifst
+abschleift
+abschleppe
+abschleppen
+abschleppend
+abschleppende
+abschleppendem
+abschleppenden
+abschleppender
+abschleppendes
+abschleppst
+abschleppt
+abschleppte
+abschleppten
+abschlepptest
+abschlepptet
+abschließe
+abschließen
+abschließend
+abschließende
+abschließendem
+abschließenden
+abschließender
+abschließendes
+abschließest
+abschließlich
+abschließt
+abschlägig
+abschlägige
+abschlägigem
+abschlägigen
+abschlägiger
+abschlägiges
+abschmelze
+abschmelzen
+abschmelzend
+abschmelzende
+abschmelzendem
+abschmelzenden
+abschmelzender
+abschmelzendes
+abschmelzt
+abschmiere
+abschmieren
+abschmierend
+abschmierende
+abschmierendem
+abschmierenden
+abschmierender
+abschmierendes
+abschmierst
+abschmiert
+abschmierte
+abschmierten
+abschmiertest
+abschmiertet
+abschminke
+abschminken
+abschminkend
+abschminkende
+abschminkendem
+abschminkenden
+abschminkender
+abschminkendes
+abschminkst
+abschminkt
+abschminkte
+abschminkten
+abschminktest
+abschminktet
+abschnalle
+abschnallen
+abschnallend
+abschnallende
+abschnallendem
+abschnallenden
+abschnallender
+abschnallendes
+abschnallst
+abschnallt
+abschnallte
+abschnallten
+abschnalltest
+abschnalltet
+abschneide
+abschneiden
+abschneidend
+abschneidende
+abschneidendem
+abschneidenden
+abschneidender
+abschneidendes
+abschneidest
+abschneidet
+abschnüre
+abschnüren
+abschnürend
+abschnürende
+abschnürendem
+abschnürenden
+abschnürender
+abschnürendes
+abschnürst
+abschnürt
+abschnürte
+abschnürten
+abschnürtest
+abschnürtet
+abschoss
+abschossen
+abschossest
+abschosst
+abschraubbar
+abschraubbare
+abschraubbarem
+abschraubbaren
+abschraubbarer
+abschraubbares
+abschraube
+abschrauben
+abschraubend
+abschraubende
+abschraubendem
+abschraubenden
+abschraubender
+abschraubendes
+abschraubst
+abschraubt
+abschraubte
+abschraubten
+abschraubtest
+abschraubtet
+abschrecke
+abschrecken
+abschreckend
+abschreckende
+abschreckendem
+abschreckenden
+abschreckender
+abschreckendes
+abschreckst
+abschreckt
+abschreckte
+abschreckten
+abschrecktest
+abschrecktet
+abschreibe
+abschreiben
+abschreibend
+abschreibende
+abschreibendem
+abschreibenden
+abschreibender
+abschreibendes
+abschreibst
+abschreibt
+abschreite
+abschreiten
+abschreitend
+abschreitende
+abschreitendem
+abschreitenden
+abschreitender
+abschreitendes
+abschreitest
+abschreitet
+abschräge
+abschrägen
+abschrägend
+abschrägende
+abschrägendem
+abschrägenden
+abschrägender
+abschrägendes
+abschrägst
+abschrägt
+abschrägte
+abschrägten
+abschrägtest
+abschrägtet
+abschufte
+abschuften
+abschuftend
+abschuftende
+abschuftendem
+abschuftenden
+abschuftender
+abschuftendes
+abschuftest
+abschuftet
+abschuftete
+abschufteten
+abschuftetest
+abschuftetet
+abschweife
+abschweifen
+abschweifend
+abschweifende
+abschweifendem
+abschweifenden
+abschweifender
+abschweifendes
+abschweifst
+abschweift
+abschweifte
+abschweiften
+abschweiftest
+abschweiftet
+abschwenke
+abschwenken
+abschwenkend
+abschwenkende
+abschwenkendem
+abschwenkenden
+abschwenkender
+abschwenkendes
+abschwenkst
+abschwenkt
+abschwenkte
+abschwenkten
+abschwenktest
+abschwenktet
+abschwäche
+abschwächen
+abschwächend
+abschwächende
+abschwächendem
+abschwächenden
+abschwächender
+abschwächendes
+abschwächst
+abschwächt
+abschwächte
+abschwächten
+abschwächtest
+abschwächtet
+abschwöre
+abschwören
+abschwörend
+abschwörende
+abschwörendem
+abschwörenden
+abschwörender
+abschwörendes
+abschwörst
+abschwört
+abschätze
+abschätzen
+abschätzend
+abschätzende
+abschätzendem
+abschätzenden
+abschätzender
+abschätzendes
+abschätzest
+abschätzig
+abschätzige
+abschätzigem
+abschätzigen
+abschätziger
+abschätziges
+abschätzt
+abschätzte
+abschätzten
+abschätztest
+abschätztet
+abschöpfe
+abschöpfen
+abschöpfend
+abschöpfende
+abschöpfendem
+abschöpfenden
+abschöpfender
+abschöpfendes
+abschöpfst
+abschöpft
+abschöpfte
+abschöpften
+abschöpftest
+abschöpftet
+abschürfe
+abschürfen
+abschürfend
+abschürfende
+abschürfendem
+abschürfenden
+abschürfender
+abschürfendes
+abschürfst
+abschürft
+abschürfte
+abschürften
+abschürftest
+abschürftet
+abschüssig
+abschüssige
+abschüssigem
+abschüssigen
+abschüssiger
+abschüssiges
+abschüttele
+abschütteln
+abschüttelnd
+abschüttelnde
+abschüttelndem
+abschüttelnden
+abschüttelnder
+abschüttelndes
+abschüttelst
+abschüttelt
+abschüttelte
+abschüttelten
+abschütteltest
+abschütteltet
+abschüttle
+absegele
+absegeln
+absegelnd
+absegelnde
+absegelndem
+absegelnden
+absegelnder
+absegelndes
+absegelst
+absegelt
+absegelte
+absegelten
+absegeltest
+absegeltet
+absegle
+absehbar
+absehbare
+absehbarem
+absehbaren
+absehbarer
+absehbares
+absehe
+absehen
+absehend
+absehende
+absehendem
+absehenden
+absehender
+absehendes
+abseht
+abseife
+abseifen
+abseifend
+abseifende
+abseifendem
+abseifenden
+abseifender
+abseifendes
+abseifst
+abseift
+abseifte
+abseiften
+abseiftest
+abseiftet
+abseile
+abseilen
+abseilend
+abseilende
+abseilendem
+abseilenden
+abseilender
+abseilendes
+abseilst
+abseilt
+abseilte
+abseilten
+abseiltest
+abseiltet
+abseitig
+abseitige
+abseitigem
+abseitigen
+abseitiger
+abseitiges
+abseits
+abseitsstehe
+abseitsstehen
+abseitsstehend
+abseitsstehende
+abseitsstehendem
+abseitsstehenden
+abseitsstehender
+abseitsstehendes
+abseitsstehst
+abseitssteht
+absende
+absenden
+absendend
+absendende
+absendendem
+absendenden
+absendender
+absendendes
+absendest
+absendet
+absendete
+absendeten
+absendetest
+absendetet
+absenke
+absenken
+absenkst
+absenkt
+absenkte
+absenkten
+absenktest
+absenktet
+absetzbar
+absetzbare
+absetzbarem
+absetzbaren
+absetzbarer
+absetzbares
+absetze
+absetzen
+absetzend
+absetzende
+absetzendem
+absetzenden
+absetzender
+absetzendes
+absetzest
+absetzt
+absetzte
+absetzten
+absetztest
+absetztet
+absichere
+absichern
+absichernd
+absichernde
+absicherndem
+absichernden
+absichernder
+absicherndes
+absicherst
+absichert
+absicherte
+absicherten
+absichertest
+absichertet
+absichre
+absichtlich
+absichtliche
+absichtlichem
+absichtlichen
+absichtlicher
+absichtliches
+absichtsvoll
+absichtsvolle
+absichtsvollem
+absichtsvollen
+absichtsvoller
+absichtsvolles
+absiehst
+absieht
+absinge
+absingen
+absingst
+absingt
+absinke
+absinken
+absinkend
+absinkende
+absinkendem
+absinkenden
+absinkender
+absinkendes
+absinkst
+absinkt
+absinkte
+absinkten
+absinktest
+absinktet
+absitze
+absitzen
+absitzend
+absitzende
+absitzendem
+absitzenden
+absitzender
+absitzendes
+absitzest
+absitzt
+absolut
+absolute
+absolutem
+absoluten
+absoluter
+absolutes
+absolutistisch
+absolutistische
+absolutistischem
+absolutistischen
+absolutistischer
+absolutistisches
+absolviere
+absolvieren
+absolvierend
+absolvierende
+absolvierendem
+absolvierenden
+absolvierender
+absolvierendes
+absolvierst
+absolviert
+absolvierte
+absolviertem
+absolvierten
+absolvierter
+absolviertes
+absolviertest
+absolviertet
+absondere
+absonderlich
+absonderliche
+absonderlichem
+absonderlichen
+absonderlicher
+absonderlichere
+absonderlicherem
+absonderlicheren
+absonderlicherer
+absonderlicheres
+absonderliches
+absonderlichste
+absonderlichstem
+absonderlichsten
+absonderlichster
+absonderlichstes
+absondern
+absondernd
+absondernde
+absonderndem
+absondernden
+absondernder
+absonderndes
+absonderst
+absondert
+absonderte
+absonderten
+absondertest
+absondertet
+absondre
+absorbiere
+absorbieren
+absorbierend
+absorbierende
+absorbierendem
+absorbierenden
+absorbierender
+absorbierendes
+absorbierst
+absorbiert
+absorbierte
+absorbiertem
+absorbierten
+absorbierter
+absorbiertes
+absorbiertest
+absorbiertet
+abspalte
+abspalten
+abspaltend
+abspaltende
+abspaltendem
+abspaltenden
+abspaltender
+abspaltendes
+abspaltest
+abspaltet
+abspaltete
+abspalteten
+abspaltetest
+abspaltetet
+abspanne
+abspannen
+abspannend
+abspannende
+abspannendem
+abspannenden
+abspannender
+abspannendes
+abspannst
+abspannt
+abspannte
+abspannten
+abspanntest
+abspanntet
+abspecke
+abspecken
+abspeckst
+abspeckt
+abspeckte
+abspeckten
+abspecktest
+abspecktet
+abspeichere
+abspeichern
+abspeicherst
+abspeichert
+abspeicherte
+abspeicherten
+abspeichertest
+abspeichertet
+abspeichre
+abspeise
+abspeisen
+abspeisend
+abspeisende
+abspeisendem
+abspeisenden
+abspeisender
+abspeisendes
+abspeisest
+abspeist
+abspenstig
+abspenstige
+abspenstigem
+abspenstigen
+abspenstiger
+abspenstiges
+absperre
+absperren
+absperrend
+absperrende
+absperrendem
+absperrenden
+absperrender
+absperrendes
+absperrst
+absperrt
+absperrte
+absperrten
+absperrtest
+absperrtet
+abspiegele
+abspiegeln
+abspiegelnd
+abspiegelnde
+abspiegelndem
+abspiegelnden
+abspiegelnder
+abspiegelndes
+abspiegelst
+abspiegelt
+abspiegelte
+abspiegelten
+abspiegeltest
+abspiegeltet
+abspiegle
+abspiele
+abspielen
+abspielend
+abspielende
+abspielendem
+abspielenden
+abspielender
+abspielendes
+abspielst
+abspielt
+abspielte
+abspielten
+abspieltest
+abspieltet
+absplittere
+absplittern
+absplitternd
+absplitternde
+absplitterndem
+absplitternden
+absplitternder
+absplitterndes
+absplitterst
+absplittert
+absplitterte
+absplitterten
+absplittertest
+absplittertet
+absplittre
+absprach
+absprachen
+absprachest
+absprachst
+abspracht
+absprang
+absprangen
+absprangst
+absprangt
+abspreche
+absprechen
+absprechend
+absprechende
+absprechendem
+absprechenden
+absprechender
+absprechendes
+absprecht
+absprengbar
+absprengbare
+absprengbarem
+absprengbaren
+absprengbarer
+absprengbares
+absprenge
+absprengen
+absprengst
+absprengt
+absprengte
+absprengten
+absprengtest
+absprengtet
+absprichst
+abspricht
+abspringe
+abspringen
+abspringend
+abspringende
+abspringendem
+abspringenden
+abspringender
+abspringendes
+abspringst
+abspringt
+abspüle
+abspülen
+abspülend
+abspülende
+abspülendem
+abspülenden
+abspülender
+abspülendes
+abspülst
+abspült
+abspülte
+abspülten
+abspültest
+abspültet
+abstamme
+abstammen
+abstammend
+abstammende
+abstammendem
+abstammenden
+abstammender
+abstammendes
+abstammst
+abstammt
+abstammte
+abstammten
+abstammtest
+abstammtet
+abstatte
+abstatten
+abstattend
+abstattende
+abstattendem
+abstattenden
+abstattender
+abstattendes
+abstattest
+abstattet
+abstattete
+abstatteten
+abstattetest
+abstattetet
+abstaube
+abstauben
+abstaubend
+abstaubende
+abstaubendem
+abstaubenden
+abstaubender
+abstaubendes
+abstaubst
+abstaubt
+abstaubte
+abstaubten
+abstaubtest
+abstaubtet
+absteche
+abstechen
+abstechend
+abstechende
+abstechendem
+abstechenden
+abstechender
+abstechendes
+abstecht
+abstecke
+abstecken
+absteckend
+absteckende
+absteckendem
+absteckenden
+absteckender
+absteckendes
+absteckst
+absteckt
+absteckte
+absteckten
+abstecktest
+abstecktet
+abstehe
+abstehen
+abstehend
+abstehende
+abstehendem
+abstehenden
+abstehender
+abstehendes
+abstehst
+absteht
+absteige
+absteigen
+absteigend
+absteigende
+absteigendem
+absteigenden
+absteigender
+absteigendes
+absteigst
+absteigt
+abstelle
+abstellen
+abstellend
+abstellende
+abstellendem
+abstellenden
+abstellender
+abstellendes
+abstellig
+abstellige
+abstelligem
+abstelligen
+abstelliger
+abstelliges
+abstellst
+abstellt
+abstellte
+abstellten
+abstelltest
+abstelltet
+abstempele
+abstempeln
+abstempelnd
+abstempelnde
+abstempelndem
+abstempelnden
+abstempelnder
+abstempelndes
+abstempelst
+abstempelt
+abstempelte
+abstempelten
+abstempeltest
+abstempeltet
+abstemple
+absteppe
+absteppen
+absteppend
+absteppende
+absteppendem
+absteppenden
+absteppender
+absteppendes
+absteppst
+absteppt
+absteppte
+absteppten
+abstepptest
+abstepptet
+absterbe
+absterben
+absterbend
+absterbende
+absterbendem
+absterbenden
+absterbender
+absterbendes
+absterbt
+abstichst
+absticht
+abstimme
+abstimmen
+abstimmend
+abstimmende
+abstimmendem
+abstimmenden
+abstimmender
+abstimmendes
+abstimmst
+abstimmt
+abstimmte
+abstimmten
+abstimmtest
+abstimmtet
+abstinent
+abstinente
+abstinentem
+abstinenten
+abstinenter
+abstinentes
+abstoppe
+abstoppen
+abstoppend
+abstoppende
+abstoppendem
+abstoppenden
+abstoppender
+abstoppendes
+abstoppst
+abstoppt
+abstoppte
+abstoppten
+abstopptest
+abstopptet
+abstoße
+abstoßen
+abstoßend
+abstoßende
+abstoßendem
+abstoßenden
+abstoßender
+abstoßendere
+abstoßenderem
+abstoßenderen
+abstoßenderer
+abstoßenderes
+abstoßendes
+abstoßendste
+abstoßendstem
+abstoßendsten
+abstoßendster
+abstoßendstes
+abstoßt
+abstrahiere
+abstrahieren
+abstrahierend
+abstrahierende
+abstrahierendem
+abstrahierenden
+abstrahierender
+abstrahierendes
+abstrahierst
+abstrahiert
+abstrahierte
+abstrahiertem
+abstrahierten
+abstrahierter
+abstrahiertes
+abstrahiertest
+abstrahiertet
+abstrahle
+abstrahlen
+abstrahlend
+abstrahlende
+abstrahlendem
+abstrahlenden
+abstrahlender
+abstrahlendes
+abstrahlst
+abstrahlt
+abstrahlte
+abstrahlten
+abstrahltest
+abstrahltet
+abstrakt
+abstrakte
+abstraktem
+abstrakten
+abstrakter
+abstraktere
+abstrakterem
+abstrakteren
+abstrakterer
+abstrakteres
+abstraktes
+abstrakteste
+abstraktestem
+abstraktesten
+abstraktester
+abstraktestes
+abstreiche
+abstreichen
+abstreichend
+abstreichende
+abstreichendem
+abstreichenden
+abstreichender
+abstreichendes
+abstreichst
+abstreicht
+abstreife
+abstreifen
+abstreifend
+abstreifende
+abstreifendem
+abstreifenden
+abstreifender
+abstreifendes
+abstreifst
+abstreift
+abstreifte
+abstreiften
+abstreiftest
+abstreiftet
+abstreite
+abstreiten
+abstreitend
+abstreitende
+abstreitendem
+abstreitenden
+abstreitender
+abstreitendes
+abstreitest
+abstreitet
+abstrus
+abstruse
+abstrusem
+abstrusen
+abstruser
+abstruses
+abstufe
+abstufen
+abstufend
+abstufende
+abstufendem
+abstufenden
+abstufender
+abstufendes
+abstufst
+abstuft
+abstufte
+abstuften
+abstuftest
+abstuftet
+abstumpfe
+abstumpfen
+abstumpfst
+abstumpft
+abstumpfte
+abstumpften
+abstumpftest
+abstumpftet
+abstürze
+abstürzen
+abstürzend
+abstürzende
+abstürzendem
+abstürzenden
+abstürzender
+abstürzendes
+abstürzest
+abstürzt
+abstürzte
+abstürzten
+abstürztest
+abstürztet
+abstütze
+abstützen
+abstützend
+abstützende
+abstützendem
+abstützenden
+abstützender
+abstützendes
+abstützest
+abstützt
+abstützte
+abstützten
+abstütztest
+abstütztet
+absuche
+absuchen
+absuchend
+absuchende
+absuchendem
+absuchenden
+absuchender
+absuchendes
+absuchst
+absucht
+absuchte
+absuchten
+absuchtest
+absuchtet
+absurd
+absurde
+absurdem
+absurden
+absurder
+absurdere
+absurderem
+absurderen
+absurderer
+absurderes
+absurdes
+absurdste
+absurdstem
+absurdsten
+absurdster
+absurdstes
+absurdum
+absäge
+absägen
+absägend
+absägende
+absägendem
+absägenden
+absägender
+absägendes
+absägst
+absägt
+absägte
+absägten
+absägtest
+absägtet
+abtaste
+abtasten
+abtastend
+abtastende
+abtastendem
+abtastenden
+abtastender
+abtastendes
+abtastest
+abtastet
+abtastete
+abtasteten
+abtastetest
+abtastetet
+abtat
+abtaten
+abtatest
+abtatet
+abtatst
+abteilbar
+abteilbare
+abteilbarem
+abteilbaren
+abteilbarer
+abteilbares
+abteile
+abteilen
+abteilend
+abteilende
+abteilendem
+abteilenden
+abteilender
+abteilendes
+abteilst
+abteilt
+abteilte
+abteilten
+abteiltest
+abteiltet
+abteufe
+abteufen
+abteufst
+abteuft
+abteufte
+abteuften
+abteuftest
+abteuftet
+abtrage
+abtragen
+abtragend
+abtragende
+abtragendem
+abtragenden
+abtragender
+abtragendes
+abtragt
+abtransportierbar
+abtransportierbare
+abtransportierbarem
+abtransportierbaren
+abtransportierbarer
+abtransportierbares
+abtransportiere
+abtransportieren
+abtransportierst
+abtransportiert
+abtransportierte
+abtransportiertem
+abtransportierten
+abtransportierter
+abtransportiertes
+abtransportiertest
+abtransportiertet
+abtrat
+abtraten
+abtratest
+abtratet
+abtratst
+abtreibe
+abtreiben
+abtreibend
+abtreibende
+abtreibendem
+abtreibenden
+abtreibender
+abtreibendes
+abtreibst
+abtreibt
+abtrennbar
+abtrennbare
+abtrennbarem
+abtrennbaren
+abtrennbarer
+abtrennbares
+abtrenne
+abtrennen
+abtrennend
+abtrennende
+abtrennendem
+abtrennenden
+abtrennender
+abtrennendes
+abtrennst
+abtrennt
+abtrennte
+abtrennten
+abtrenntest
+abtrenntet
+abtrete
+abtreten
+abtretend
+abtretende
+abtretendem
+abtretenden
+abtretender
+abtretendes
+abtretet
+abtrockne
+abtrocknen
+abtrocknend
+abtrocknende
+abtrocknendem
+abtrocknenden
+abtrocknender
+abtrocknendes
+abtrocknest
+abtrocknet
+abtrocknete
+abtrockneten
+abtrocknetest
+abtrocknetet
+abtropfe
+abtropfen
+abtropfend
+abtropfende
+abtropfendem
+abtropfenden
+abtropfender
+abtropfendes
+abtropfst
+abtropft
+abtropfte
+abtropften
+abtropftest
+abtropftet
+abträglich
+abträgliche
+abträglichem
+abträglichen
+abträglicher
+abträglichere
+abträglicherem
+abträglicheren
+abträglicherer
+abträglicheres
+abträgliches
+abträglichste
+abträglichstem
+abträglichsten
+abträglichster
+abträglichstes
+abtrünnig
+abtrünnige
+abtrünnigem
+abtrünnigen
+abtrünniger
+abtrünniges
+abtue
+abtuend
+abtuende
+abtuendem
+abtuenden
+abtuender
+abtuendes
+abtun
+abtupfe
+abtupfen
+abtupfend
+abtupfende
+abtupfendem
+abtupfenden
+abtupfender
+abtupfendes
+abtupfst
+abtupft
+abtupfte
+abtupften
+abtupftest
+abtupftet
+abtust
+abtut
+abtöte
+abtöten
+abtötend
+abtötende
+abtötendem
+abtötenden
+abtötender
+abtötendes
+abtötest
+abtötet
+abtötete
+abtöteten
+abtötetest
+abtötetet
+aburteile
+aburteilen
+aburteilend
+aburteilende
+aburteilendem
+aburteilenden
+aburteilender
+aburteilendes
+aburteilst
+aburteilt
+aburteilte
+aburteilten
+aburteiltest
+aburteiltet
+abverdiene
+abverdienen
+abverdienend
+abverdienende
+abverdienendem
+abverdienenden
+abverdienender
+abverdienendes
+abverdienst
+abverdient
+abverdiente
+abverdienten
+abverdientest
+abverdientet
+abverlange
+abverlangen
+abverlangend
+abverlangende
+abverlangendem
+abverlangenden
+abverlangender
+abverlangendes
+abverlangst
+abverlangt
+abverlangte
+abverlangtem
+abverlangten
+abverlangter
+abverlangtes
+abverlangtest
+abverlangtet
+abwandelbar
+abwandelbare
+abwandelbarem
+abwandelbaren
+abwandelbarer
+abwandelbares
+abwandele
+abwandeln
+abwandelnd
+abwandelnde
+abwandelndem
+abwandelnden
+abwandelnder
+abwandelndes
+abwandelst
+abwandelt
+abwandelte
+abwandelten
+abwandeltest
+abwandeltet
+abwandere
+abwandern
+abwandernd
+abwandernde
+abwanderndem
+abwandernden
+abwandernder
+abwanderndes
+abwanderst
+abwandert
+abwanderte
+abwanderten
+abwandertest
+abwandertet
+abwandle
+abwandre
+abwandte
+abwandten
+abwandtest
+abwandtet
+abwarte
+abwarten
+abwartend
+abwartende
+abwartendem
+abwartenden
+abwartender
+abwartendes
+abwartest
+abwartet
+abwartete
+abwarteten
+abwartetest
+abwartetet
+abwaschbar
+abwaschbare
+abwaschbarem
+abwaschbaren
+abwaschbarer
+abwaschbares
+abwasche
+abwaschen
+abwaschend
+abwaschende
+abwaschendem
+abwaschenden
+abwaschender
+abwaschendes
+abwascht
+abwechsele
+abwechseln
+abwechselnd
+abwechselnde
+abwechselndem
+abwechselnden
+abwechselnder
+abwechselndes
+abwechselst
+abwechselt
+abwechselte
+abwechselten
+abwechseltest
+abwechseltet
+abwechsle
+abwechslungsreich
+abwechslungsreiche
+abwechslungsreichem
+abwechslungsreichen
+abwechslungsreicher
+abwechslungsreichere
+abwechslungsreicherem
+abwechslungsreicheren
+abwechslungsreicherer
+abwechslungsreicheres
+abwechslungsreiches
+abwechslungsreichste
+abwechslungsreichstem
+abwechslungsreichsten
+abwechslungsreichster
+abwechslungsreichstes
+abwechslungsweise
+abwegig
+abwegige
+abwegigem
+abwegigen
+abwegiger
+abwegigere
+abwegigerem
+abwegigeren
+abwegigerer
+abwegigeres
+abwegiges
+abwegigste
+abwegigstem
+abwegigsten
+abwegigster
+abwegigstes
+abwehre
+abwehren
+abwehrend
+abwehrende
+abwehrendem
+abwehrenden
+abwehrender
+abwehrendes
+abwehrst
+abwehrt
+abwehrte
+abwehrten
+abwehrtest
+abwehrtet
+abweiche
+abweichen
+abweichend
+abweichende
+abweichendem
+abweichenden
+abweichender
+abweichendes
+abweichst
+abweicht
+abweise
+abweisen
+abweisend
+abweisende
+abweisendem
+abweisenden
+abweisender
+abweisendes
+abweisest
+abweist
+abwendbar
+abwendbare
+abwendbarem
+abwendbaren
+abwendbarer
+abwendbares
+abwende
+abwenden
+abwendend
+abwendende
+abwendendem
+abwendenden
+abwendender
+abwendendes
+abwendest
+abwendet
+abwendete
+abwendeten
+abwendetest
+abwendetet
+abwerbe
+abwerben
+abwerbend
+abwerbende
+abwerbendem
+abwerbenden
+abwerbender
+abwerbendes
+abwerbt
+abwerfe
+abwerfen
+abwerfend
+abwerfende
+abwerfendem
+abwerfenden
+abwerfender
+abwerfendes
+abwerft
+abwerte
+abwerten
+abwertend
+abwertende
+abwertendem
+abwertenden
+abwertender
+abwertendes
+abwertest
+abwertet
+abwertete
+abwerteten
+abwertetest
+abwertetet
+abwesend
+abwesende
+abwesendem
+abwesenden
+abwesender
+abwesendes
+abwickele
+abwickeln
+abwickelnd
+abwickelnde
+abwickelndem
+abwickelnden
+abwickelnder
+abwickelndes
+abwickelst
+abwickelt
+abwickelte
+abwickelten
+abwickeltest
+abwickeltet
+abwickle
+abwiege
+abwiegen
+abwiegend
+abwiegende
+abwiegendem
+abwiegenden
+abwiegender
+abwiegendes
+abwiegst
+abwiegt
+abwinke
+abwinken
+abwinkend
+abwinkende
+abwinkendem
+abwinkenden
+abwinkender
+abwinkendes
+abwinkst
+abwinkt
+abwinkte
+abwinkten
+abwinktest
+abwinktet
+abwirtschafte
+abwirtschaften
+abwirtschaftend
+abwirtschaftende
+abwirtschaftendem
+abwirtschaftenden
+abwirtschaftender
+abwirtschaftendes
+abwirtschaftest
+abwirtschaftet
+abwirtschaftete
+abwirtschafteten
+abwirtschaftetest
+abwirtschaftetet
+abwischbar
+abwischbare
+abwischbarem
+abwischbaren
+abwischbarer
+abwischbares
+abwische
+abwischen
+abwischend
+abwischende
+abwischendem
+abwischenden
+abwischender
+abwischendes
+abwischest
+abwischst
+abwischt
+abwischte
+abwischten
+abwischtest
+abwischtet
+abwäge
+abwägen
+abwägend
+abwägende
+abwägendem
+abwägenden
+abwägender
+abwägendes
+abwägst
+abwägt
+abwägte
+abwägten
+abwägtest
+abwägtet
+abwählbar
+abwählbare
+abwählbarem
+abwählbaren
+abwählbarer
+abwählbares
+abwähle
+abwählen
+abwählst
+abwählt
+abwählte
+abwählten
+abwähltest
+abwähltet
+abwälze
+abwälzen
+abwälzend
+abwälzende
+abwälzendem
+abwälzenden
+abwälzender
+abwälzendes
+abwälzest
+abwälzt
+abwälzte
+abwälzten
+abwälztest
+abwälztet
+abwärts
+abwürge
+abwürgen
+abwürgend
+abwürgende
+abwürgendem
+abwürgenden
+abwürgender
+abwürgendes
+abwürgst
+abwürgt
+abwürgte
+abwürgten
+abwürgtest
+abwürgtet
+abzahle
+abzahlen
+abzahlend
+abzahlende
+abzahlendem
+abzahlenden
+abzahlender
+abzahlendes
+abzahlst
+abzahlt
+abzahlte
+abzahlten
+abzahltest
+abzahltet
+abzapfe
+abzapfen
+abzapfend
+abzapfende
+abzapfendem
+abzapfenden
+abzapfender
+abzapfendes
+abzapfst
+abzapft
+abzapfte
+abzapften
+abzapftest
+abzapftet
+abzeichne
+abzeichnen
+abzeichnend
+abzeichnende
+abzeichnendem
+abzeichnenden
+abzeichnender
+abzeichnendes
+abzeichnest
+abzeichnet
+abzeichnete
+abzeichneten
+abzeichnetest
+abzeichnetet
+abzgl
+abziehe
+abziehen
+abziehend
+abziehende
+abziehendem
+abziehenden
+abziehender
+abziehendes
+abziehst
+abzieht
+abziehte
+abziehten
+abziehtest
+abziehtet
+abziele
+abzielen
+abzielend
+abzielende
+abzielendem
+abzielenden
+abzielender
+abzielendes
+abzielst
+abzielt
+abzielte
+abzielten
+abzieltest
+abzieltet
+abzog
+abzogen
+abzogst
+abzogt
+abzuarbeiten
+abzuarbeitend
+abzuarbeitende
+abzuarbeitendem
+abzuarbeitenden
+abzuarbeitender
+abzuarbeitendes
+abzubauen
+abzubauend
+abzubauende
+abzubauendem
+abzubauenden
+abzubauender
+abzubauendes
+abzubilden
+abzubildend
+abzubildende
+abzubildendem
+abzubildenden
+abzubildender
+abzubildendes
+abzublocken
+abzublockend
+abzublockende
+abzublockendem
+abzublockenden
+abzublockender
+abzublockendes
+abzubrechen
+abzubrechend
+abzubrechende
+abzubrechendem
+abzubrechenden
+abzubrechender
+abzubrechendes
+abzubringen
+abzudecken
+abzudeckend
+abzudeckende
+abzudeckendem
+abzudeckenden
+abzudeckender
+abzudeckendes
+abzudrehen
+abzudrehend
+abzudrehende
+abzudrehendem
+abzudrehenden
+abzudrehender
+abzudrehendes
+abzudrängen
+abzudrängend
+abzudrängende
+abzudrängendem
+abzudrängenden
+abzudrängender
+abzudrängendes
+abzuerkennen
+abzuerkennend
+abzuerkennende
+abzuerkennendem
+abzuerkennenden
+abzuerkennender
+abzuerkennendes
+abzufangen
+abzufangend
+abzufangende
+abzufangendem
+abzufangenden
+abzufangender
+abzufangendes
+abzufeiern
+abzufeiernd
+abzufeiernde
+abzufeierndem
+abzufeiernden
+abzufeiernder
+abzufeierndes
+abzufeuern
+abzufeuernd
+abzufeuernde
+abzufeuerndem
+abzufeuernden
+abzufeuernder
+abzufeuerndes
+abzufinden
+abzufindend
+abzufindende
+abzufindendem
+abzufindenden
+abzufindender
+abzufindendes
+abzufragen
+abzufragend
+abzufragende
+abzufragendem
+abzufragenden
+abzufragender
+abzufragendes
+abzuführen
+abzuführend
+abzuführende
+abzuführendem
+abzuführenden
+abzuführender
+abzuführendes
+abzugeben
+abzugebend
+abzugebende
+abzugebendem
+abzugebenden
+abzugebender
+abzugebendes
+abzugehen
+abzugehend
+abzugehende
+abzugehendem
+abzugehenden
+abzugehender
+abzugehendes
+abzugewinnen
+abzugewinnend
+abzugewinnende
+abzugewinnendem
+abzugewinnenden
+abzugewinnender
+abzugewinnendes
+abzugrasen
+abzugrasend
+abzugrasende
+abzugrasendem
+abzugrasenden
+abzugrasender
+abzugrasendes
+abzugrenzen
+abzugrenzend
+abzugrenzende
+abzugrenzendem
+abzugrenzenden
+abzugrenzender
+abzugrenzendes
+abzugsfähig
+abzugsfähige
+abzugsfähigem
+abzugsfähigen
+abzugsfähiger
+abzugsfähiges
+abzuhalten
+abzuhaltend
+abzuhaltende
+abzuhaltendem
+abzuhaltenden
+abzuhaltender
+abzuhaltendes
+abzuheben
+abzuhebend
+abzuhebende
+abzuhebendem
+abzuhebenden
+abzuhebender
+abzuhebendes
+abzuholen
+abzuholend
+abzuholende
+abzuholendem
+abzuholenden
+abzuholender
+abzuholendes
+abzuhängen
+abzuhängend
+abzuhängende
+abzuhängendem
+abzuhängenden
+abzuhängender
+abzuhängendes
+abzuhören
+abzuhörend
+abzuhörende
+abzuhörendem
+abzuhörenden
+abzuhörender
+abzuhörendes
+abzujagen
+abzujagend
+abzujagende
+abzujagendem
+abzujagenden
+abzujagender
+abzujagendes
+abzuklingen
+abzuklopfen
+abzuklopfend
+abzuklopfende
+abzuklopfendem
+abzuklopfenden
+abzuklopfender
+abzuklopfendes
+abzuknabbern
+abzuknabbernd
+abzuknabbernde
+abzuknabberndem
+abzuknabbernden
+abzuknabbernder
+abzuknabberndes
+abzukühlen
+abzukühlend
+abzukühlende
+abzukühlendem
+abzukühlenden
+abzukühlender
+abzukühlendes
+abzukürzen
+abzukürzend
+abzukürzende
+abzukürzendem
+abzukürzenden
+abzukürzender
+abzukürzendes
+abzulassen
+abzulassend
+abzulassende
+abzulassendem
+abzulassenden
+abzulassender
+abzulassendes
+abzulaufen
+abzulegen
+abzulegend
+abzulegende
+abzulegendem
+abzulegenden
+abzulegender
+abzulegendes
+abzulehnen
+abzulehnend
+abzulehnende
+abzulehnendem
+abzulehnenden
+abzulehnender
+abzulehnendes
+abzuleiten
+abzuleitend
+abzuleitende
+abzuleitendem
+abzuleitenden
+abzuleitender
+abzuleitendes
+abzulenken
+abzulenkend
+abzulenkende
+abzulenkendem
+abzulenkenden
+abzulenkender
+abzulenkendes
+abzulesen
+abzulesend
+abzulesende
+abzulesendem
+abzulesenden
+abzulesender
+abzulesendes
+abzuliefern
+abzuliefernd
+abzuliefernde
+abzulieferndem
+abzuliefernden
+abzuliefernder
+abzulieferndes
+abzulösen
+abzulösend
+abzulösende
+abzulösendem
+abzulösenden
+abzulösender
+abzulösendes
+abzumildern
+abzumildernd
+abzumildernde
+abzumilderndem
+abzumildernden
+abzumildernder
+abzumilderndes
+abzunehmen
+abzunehmend
+abzunehmende
+abzunehmendem
+abzunehmenden
+abzunehmender
+abzunehmendes
+abzuraten
+abzurechnen
+abzurechnend
+abzurechnende
+abzurechnendem
+abzurechnenden
+abzurechnender
+abzurechnendes
+abzureisen
+abzuriegeln
+abzuriegelnd
+abzuriegelnde
+abzuriegelndem
+abzuriegelnden
+abzuriegelnder
+abzuriegelndes
+abzuringen
+abzuringend
+abzuringende
+abzuringendem
+abzuringenden
+abzuringender
+abzuringendes
+abzurunden
+abzurundend
+abzurundende
+abzurundendem
+abzurundenden
+abzurundender
+abzurundendes
+abzurücken
+abzurückend
+abzurückende
+abzurückendem
+abzurückenden
+abzurückender
+abzurückendes
+abzusagen
+abzusagend
+abzusagende
+abzusagendem
+abzusagenden
+abzusagender
+abzusagendes
+abzusahnen
+abzusahnend
+abzusahnende
+abzusahnendem
+abzusahnenden
+abzusahnender
+abzusahnendes
+abzuschaffen
+abzuschaffend
+abzuschaffende
+abzuschaffendem
+abzuschaffenden
+abzuschaffender
+abzuschaffendes
+abzuschalten
+abzuschaltend
+abzuschaltende
+abzuschaltendem
+abzuschaltenden
+abzuschaltender
+abzuschaltendes
+abzuscheiden
+abzuscheidend
+abzuscheidende
+abzuscheidendem
+abzuscheidenden
+abzuscheidender
+abzuscheidendes
+abzuschicken
+abzuschickend
+abzuschickende
+abzuschickendem
+abzuschickenden
+abzuschickender
+abzuschickendes
+abzuschieben
+abzuschiebend
+abzuschiebende
+abzuschiebendem
+abzuschiebenden
+abzuschiebender
+abzuschiebendes
+abzuschlagen
+abzuschlagend
+abzuschlagende
+abzuschlagendem
+abzuschlagenden
+abzuschlagender
+abzuschlagendes
+abzuschleifen
+abzuschleifend
+abzuschleifende
+abzuschleifendem
+abzuschleifenden
+abzuschleifender
+abzuschleifendes
+abzuschließen
+abzuschließend
+abzuschließende
+abzuschließendem
+abzuschließenden
+abzuschließender
+abzuschließendes
+abzuschneiden
+abzuschneidend
+abzuschneidende
+abzuschneidendem
+abzuschneidenden
+abzuschneidender
+abzuschneidendes
+abzuschotten
+abzuschottend
+abzuschottende
+abzuschottendem
+abzuschottenden
+abzuschottender
+abzuschottendes
+abzuschreiben
+abzuschreibend
+abzuschreibende
+abzuschreibendem
+abzuschreibenden
+abzuschreibender
+abzuschreibendes
+abzuschwenken
+abzuschwenkend
+abzuschwenkende
+abzuschwenkendem
+abzuschwenkenden
+abzuschwenkender
+abzuschwenkendes
+abzuschwächen
+abzuschwächend
+abzuschwächende
+abzuschwächendem
+abzuschwächenden
+abzuschwächender
+abzuschwächendes
+abzuschätzen
+abzuschätzend
+abzuschätzende
+abzuschätzendem
+abzuschätzenden
+abzuschätzender
+abzuschätzendes
+abzuschütteln
+abzuschüttelnd
+abzuschüttelnde
+abzuschüttelndem
+abzuschüttelnden
+abzuschüttelnder
+abzuschüttelndes
+abzusehen
+abzusehend
+abzusehende
+abzusehendem
+abzusehenden
+abzusehender
+abzusehendes
+abzusenden
+abzusendend
+abzusendende
+abzusendendem
+abzusendenden
+abzusendender
+abzusendendes
+abzusetzen
+abzusetzend
+abzusetzende
+abzusetzendem
+abzusetzenden
+abzusetzender
+abzusetzendes
+abzusichern
+abzusichernd
+abzusichernde
+abzusicherndem
+abzusichernden
+abzusichernder
+abzusicherndes
+abzusinken
+abzusondern
+abzusondernd
+abzusondernde
+abzusonderndem
+abzusondernden
+abzusondernder
+abzusonderndes
+abzuspeichern
+abzuspeichernd
+abzuspeichernde
+abzuspeicherndem
+abzuspeichernden
+abzuspeichernder
+abzuspeicherndes
+abzusperren
+abzusperrend
+abzusperrende
+abzusperrendem
+abzusperrenden
+abzusperrender
+abzusperrendes
+abzusprechen
+abzusprechend
+abzusprechende
+abzusprechendem
+abzusprechenden
+abzusprechender
+abzusprechendes
+abzustatten
+abzustattend
+abzustattende
+abzustattendem
+abzustattenden
+abzustattender
+abzustattendes
+abzustehen
+abzustellen
+abzustellend
+abzustellende
+abzustellendem
+abzustellenden
+abzustellender
+abzustellendes
+abzustimmen
+abzustimmend
+abzustimmende
+abzustimmendem
+abzustimmenden
+abzustimmender
+abzustimmendes
+abzustoßen
+abzustoßend
+abzustoßende
+abzustoßendem
+abzustoßenden
+abzustoßender
+abzustoßendes
+abzustreifen
+abzustreifend
+abzustreifende
+abzustreifendem
+abzustreifenden
+abzustreifender
+abzustreifendes
+abzustumpfen
+abzustumpfend
+abzustumpfende
+abzustumpfendem
+abzustumpfenden
+abzustumpfender
+abzustumpfendes
+abzutasten
+abzutastend
+abzutastende
+abzutastendem
+abzutastenden
+abzutastender
+abzutastendes
+abzutransportieren
+abzutransportierend
+abzutransportierende
+abzutransportierendem
+abzutransportierenden
+abzutransportierender
+abzutransportierendes
+abzutrennen
+abzutrennend
+abzutrennende
+abzutrennendem
+abzutrennenden
+abzutrennender
+abzutrennendes
+abzutreten
+abzutretend
+abzutretende
+abzutretendem
+abzutretenden
+abzutretender
+abzutretendes
+abzutrocknen
+abzutrocknend
+abzutrocknende
+abzutrocknendem
+abzutrocknenden
+abzutrocknender
+abzutrocknendes
+abzutun
+abzutöten
+abzutötend
+abzutötende
+abzutötendem
+abzutötenden
+abzutötender
+abzutötendes
+abzuwarten
+abzuwartend
+abzuwartende
+abzuwartendem
+abzuwartenden
+abzuwartender
+abzuwartendes
+abzuwehren
+abzuwehrend
+abzuwehrende
+abzuwehrendem
+abzuwehrenden
+abzuwehrender
+abzuwehrendes
+abzuweichen
+abzuwenden
+abzuwendend
+abzuwendende
+abzuwendendem
+abzuwendenden
+abzuwendender
+abzuwendendes
+abzuwerfen
+abzuwerfend
+abzuwerfende
+abzuwerfendem
+abzuwerfenden
+abzuwerfender
+abzuwerfendes
+abzuwickeln
+abzuwickelnd
+abzuwickelnde
+abzuwickelndem
+abzuwickelnden
+abzuwickelnder
+abzuwickelndes
+abzuwiegen
+abzuwiegend
+abzuwiegende
+abzuwiegendem
+abzuwiegenden
+abzuwiegender
+abzuwiegendes
+abzuwirtschaften
+abzuwirtschaftend
+abzuwirtschaftende
+abzuwirtschaftendem
+abzuwirtschaftenden
+abzuwirtschaftender
+abzuwirtschaftendes
+abzuwägen
+abzuwägend
+abzuwägende
+abzuwägendem
+abzuwägenden
+abzuwägender
+abzuwägendes
+abzuwälzen
+abzuwälzend
+abzuwälzende
+abzuwälzendem
+abzuwälzenden
+abzuwälzender
+abzuwälzendes
+abzuzahlen
+abzuzahlend
+abzuzahlende
+abzuzahlendem
+abzuzahlenden
+abzuzahlender
+abzuzahlendes
+abzuzeichnen
+abzuzeichnend
+abzuzeichnende
+abzuzeichnendem
+abzuzeichnenden
+abzuzeichnender
+abzuzeichnendes
+abzuziehen
+abzuziehend
+abzuziehende
+abzuziehendem
+abzuziehenden
+abzuziehender
+abzuziehendes
+abzuändern
+abzuändernd
+abzuändernde
+abzuänderndem
+abzuändernden
+abzuändernder
+abzuänderndes
+abzweige
+abzweigen
+abzweigend
+abzweigende
+abzweigendem
+abzweigenden
+abzweigender
+abzweigendes
+abzweigst
+abzweigt
+abzweigte
+abzweigten
+abzweigtest
+abzweigtet
+abzwicke
+abzwicken
+abzwickend
+abzwickende
+abzwickendem
+abzwickenden
+abzwickender
+abzwickendes
+abzwickst
+abzwickt
+abzwickte
+abzwickten
+abzwicktest
+abzwicktet
+abzählbar
+abzählbare
+abzählbarem
+abzählbaren
+abzählbarer
+abzählbares
+abzähle
+abzählen
+abzählend
+abzählende
+abzählendem
+abzählenden
+abzählender
+abzählendes
+abzählst
+abzählt
+abzählte
+abzählten
+abzähltest
+abzähltet
+abzäune
+abzäunen
+abzäunend
+abzäunende
+abzäunendem
+abzäunenden
+abzäunender
+abzäunendes
+abzäunst
+abzäunt
+abzäunte
+abzäunten
+abzäuntest
+abzäuntet
+abzüglich
+abzügliche
+abzüglichem
+abzüglichen
+abzüglicher
+abzügliches
+abändere
+abänderlich
+abänderliche
+abänderlichem
+abänderlichen
+abänderlicher
+abänderliches
+abändern
+abändernd
+abändernde
+abänderndem
+abändernden
+abändernder
+abänderndes
+abänderst
+abändert
+abänderte
+abänderten
+abändertest
+abändertet
+abändre
+ach
+achselzucken
+achselzuckend
+achselzuckende
+achselzuckendem
+achselzuckenden
+achselzuckender
+achselzuckendes
+achsig
+achsige
+achsigem
+achsigen
+achsiger
+achsiges
+acht
+achtbar
+achtbare
+achtbarem
+achtbaren
+achtbarer
+achtbares
+achte
+achtel
+achtele
+achteln
+achtelnd
+achtelnde
+achtelndem
+achtelnden
+achtelnder
+achtelndes
+achtelst
+achtelt
+achtelte
+achtelten
+achteltest
+achteltet
+achtem
+achten
+achtend
+achtende
+achtendem
+achtenden
+achtender
+achtendes
+achtenswert
+achtenswerte
+achtenswertem
+achtenswerten
+achtenswerter
+achtenswertes
+achter
+achtes
+achtest
+achtet
+achtete
+achteten
+achtetest
+achtetet
+achtfach
+achtfache
+achtfachem
+achtfachen
+achtfacher
+achtfaches
+achthundert
+achtjährig
+achtjährige
+achtjährigem
+achtjährigen
+achtjähriger
+achtjähriges
+achtle
+achtlos
+achtlose
+achtlosem
+achtlosen
+achtloser
+achtlosere
+achtloserem
+achtloseren
+achtloserer
+achtloseres
+achtloses
+achtloseste
+achtlosestem
+achtlosesten
+achtlosester
+achtlosestes
+achtsam
+achtsame
+achtsamem
+achtsamen
+achtsamer
+achtsames
+achtseitig
+achtseitige
+achtseitigem
+achtseitigen
+achtseitiger
+achtseitiges
+achtstrahlig
+achtstrahlige
+achtstrahligem
+achtstrahligen
+achtstrahliger
+achtstrahliges
+achtstündig
+achtstündige
+achtstündigem
+achtstündigen
+achtstündiger
+achtstündiges
+achttausend
+achtungsvoll
+achtungsvolle
+achtungsvollem
+achtungsvollen
+achtungsvoller
+achtungsvollere
+achtungsvollerem
+achtungsvolleren
+achtungsvollerer
+achtungsvolleres
+achtungsvolles
+achtungsvollste
+achtungsvollstem
+achtungsvollsten
+achtungsvollster
+achtungsvollstes
+achtzehn
+achtzehnte
+achtzehntem
+achtzehnten
+achtzehnter
+achtzehntes
+achtzig
+achtziger
+achtzigern
+achtzigste
+achtzigstem
+achtzigsten
+achtzigster
+achtzigstes
+ackere
+ackern
+ackernd
+ackernde
+ackerndem
+ackernden
+ackernder
+ackerndes
+ackerst
+ackert
+ackerte
+ackerten
+ackertest
+ackertet
+ackre
+acta
+ad
+adaptierbar
+adaptierbare
+adaptierbarem
+adaptierbaren
+adaptierbarer
+adaptierbares
+adaptiere
+adaptieren
+adaptierst
+adaptiert
+adaptierte
+adaptiertem
+adaptierten
+adaptierter
+adaptiertes
+adaptiertest
+adaptiertet
+adaptiv
+adaptive
+adaptivem
+adaptiven
+adaptiver
+adaptives
+addiere
+addieren
+addierend
+addierende
+addierendem
+addierenden
+addierender
+addierendes
+addierst
+addiert
+addierte
+addiertem
+addierten
+addierter
+addiertes
+addiertest
+addiertet
+additionell
+additionelle
+additionellem
+additionellen
+additioneller
+additionelles
+additiv
+additive
+additivem
+additiven
+additiver
+additives
+ade
+adele
+adelig
+adelige
+adeligem
+adeligen
+adeliger
+adeliges
+adeln
+adelnd
+adelnde
+adelndem
+adelnden
+adelnder
+adelndes
+adelst
+adelt
+adelte
+adelten
+adeltest
+adeltet
+aderig
+aderige
+aderigem
+aderigen
+aderiger
+aderiges
+adieu
+adjektivisch
+adjektivische
+adjektivischem
+adjektivischen
+adjektivischer
+adjektivisches
+adjungiert
+adjungierte
+adjungiertem
+adjungierten
+adjungierter
+adjungiertes
+adle
+adlig
+adlige
+adligem
+adligen
+adliger
+adliges
+administrativ
+administrative
+administrativem
+administrativen
+administrativer
+administratives
+administriere
+administrieren
+administrierend
+administrierende
+administrierendem
+administrierenden
+administrierender
+administrierendes
+administrierst
+administriert
+administrierte
+administriertem
+administrierten
+administrierter
+administriertes
+administriertest
+administriertet
+adoptiere
+adoptieren
+adoptierend
+adoptierende
+adoptierendem
+adoptierenden
+adoptierender
+adoptierendes
+adoptierst
+adoptiert
+adoptierte
+adoptiertem
+adoptierten
+adoptierter
+adoptiertes
+adoptiertest
+adoptiertet
+adressierbar
+adressierbare
+adressierbarem
+adressierbaren
+adressierbarer
+adressierbares
+adressiere
+adressieren
+adressierend
+adressierende
+adressierendem
+adressierenden
+adressierender
+adressierendes
+adressierst
+adressiert
+adressierte
+adressiertem
+adressierten
+adressierter
+adressiertes
+adressiertest
+adressiertet
+adrett
+adrette
+adrettem
+adretten
+adretter
+adrettere
+adretterem
+adretteren
+adretterer
+adretteres
+adrettes
+adretteste
+adrettestem
+adrettesten
+adrettester
+adrettestes
+adrig
+adrige
+adrigem
+adrigen
+adriger
+adriges
+adsorbiere
+adsorbieren
+adsorbierend
+adsorbierende
+adsorbierendem
+adsorbierenden
+adsorbierender
+adsorbierendes
+adsorbierst
+adsorbiert
+adsorbierte
+adsorbiertem
+adsorbierten
+adsorbierter
+adsorbiertes
+adsorbiertest
+adsorbiertet
+adverbial
+adverbiale
+adverbialem
+adverbialen
+adverbialer
+adverbiales
+adäquat
+adäquate
+adäquatem
+adäquaten
+adäquater
+adäquatere
+adäquaterem
+adäquateren
+adäquaterer
+adäquateres
+adäquates
+adäquateste
+adäquatestem
+adäquatesten
+adäquatester
+adäquatestes
+aerodynamisch
+aerodynamische
+aerodynamischem
+aerodynamischen
+aerodynamischer
+aerodynamisches
+aeronautisch
+aeronautische
+aeronautischem
+aeronautischen
+aeronautischer
+aeronautisches
+affektiert
+affektierte
+affektiertem
+affektierten
+affektierter
+affektiertere
+affektierterem
+affektierteren
+affektierterer
+affektierteres
+affektiertes
+affektierteste
+affektiertestem
+affektiertesten
+affektiertester
+affektiertestes
+affig
+affige
+affigem
+affigen
+affiger
+affigere
+affigerem
+affigeren
+affigerer
+affigeres
+affiges
+affigste
+affigstem
+affigsten
+affigster
+affigstes
+affirmativ
+affirmative
+affirmativem
+affirmativen
+affirmativer
+affirmatives
+afghanisch
+afghanische
+afghanischem
+afghanischen
+afghanischer
+afghanisches
+afrikanisch
+afrikanische
+afrikanischem
+afrikanischen
+afrikanischer
+afrikanisches
+aggressiv
+aggressive
+aggressivem
+aggressiven
+aggressiver
+aggressivere
+aggressiverem
+aggressiveren
+aggressiverer
+aggressiveres
+aggressives
+aggressivste
+aggressivstem
+aggressivsten
+aggressivster
+aggressivstes
+agiere
+agieren
+agierend
+agierende
+agierendem
+agierenden
+agierender
+agierendes
+agierst
+agiert
+agierte
+agierten
+agiertest
+agiertet
+agil
+agile
+agilem
+agilen
+agiler
+agiles
+agitatorisch
+agitatorische
+agitatorischem
+agitatorischen
+agitatorischer
+agitatorisches
+agitiere
+agitieren
+agitierend
+agitierende
+agitierendem
+agitierenden
+agitierender
+agitierendes
+agitierst
+agitiert
+agitierte
+agitierten
+agitiertest
+agitiertet
+agrarisch
+agrarische
+agrarischem
+agrarischen
+agrarischer
+agrarisches
+ahme
+ahmen
+ahmst
+ahmt
+ahmte
+ahmten
+ahmtest
+ahmtet
+ahnde
+ahnden
+ahndend
+ahndende
+ahndendem
+ahndenden
+ahndender
+ahndendes
+ahndest
+ahndet
+ahndete
+ahndeten
+ahndetest
+ahndetet
+ahne
+ahnen
+ahnend
+ahnende
+ahnendem
+ahnenden
+ahnender
+ahnendes
+ahnst
+ahnt
+ahnte
+ahnten
+ahntest
+ahntet
+ahnungslos
+ahnungslose
+ahnungslosem
+ahnungslosen
+ahnungsloser
+ahnungslosere
+ahnungsloserem
+ahnungsloseren
+ahnungsloserer
+ahnungsloseres
+ahnungsloses
+ahnungsloseste
+ahnungslosestem
+ahnungslosesten
+ahnungslosester
+ahnungslosestes
+ahnungsvoll
+ahnungsvolle
+ahnungsvollem
+ahnungsvollen
+ahnungsvoller
+ahnungsvollere
+ahnungsvollerem
+ahnungsvolleren
+ahnungsvollerer
+ahnungsvolleres
+ahnungsvolles
+ahnungsvollste
+ahnungsvollstem
+ahnungsvollsten
+ahnungsvollster
+ahnungsvollstes
+ahoi
+akademisch
+akademische
+akademischem
+akademischen
+akademischer
+akademischere
+akademischerem
+akademischeren
+akademischerer
+akademischeres
+akademisches
+akademischste
+akademischstem
+akademischsten
+akademischster
+akademischstes
+akklimatisiere
+akklimatisieren
+akklimatisierend
+akklimatisierende
+akklimatisierendem
+akklimatisierenden
+akklimatisierender
+akklimatisierendes
+akklimatisierst
+akklimatisiert
+akklimatisierte
+akklimatisiertem
+akklimatisierten
+akklimatisierter
+akklimatisiertes
+akklimatisiertest
+akklimatisiertet
+akkreditiere
+akkreditieren
+akkreditierend
+akkreditierende
+akkreditierendem
+akkreditierenden
+akkreditierender
+akkreditierendes
+akkreditierst
+akkreditiert
+akkreditierte
+akkreditiertem
+akkreditierten
+akkreditierter
+akkreditiertes
+akkreditiertest
+akkreditiertet
+akkugepuffert
+akkugepufferte
+akkugepuffertem
+akkugepufferten
+akkugepufferter
+akkugepuffertes
+akkumuliere
+akkumulieren
+akkumulierend
+akkumulierende
+akkumulierendem
+akkumulierenden
+akkumulierender
+akkumulierendes
+akkumulierst
+akkumuliert
+akkumulierte
+akkumuliertem
+akkumulierten
+akkumulierter
+akkumuliertes
+akkumuliertest
+akkumuliertet
+akkurat
+akkurate
+akkuratem
+akkuraten
+akkurater
+akkurates
+aklimatisiere
+aklimatisieren
+aklimatisierend
+aklimatisierende
+aklimatisierendem
+aklimatisierenden
+aklimatisierender
+aklimatisierendes
+aklimatisierst
+aklimatisiert
+aklimatisierte
+aklimatisiertem
+aklimatisierten
+aklimatisierter
+aklimatisiertes
+aklimatisiertest
+aklimatisiertet
+akquisitorisch
+akquisitorische
+akquisitorischem
+akquisitorischen
+akquisitorischer
+akquisitorisches
+akribisch
+akribische
+akribischem
+akribischen
+akribischer
+akribisches
+akrobatisch
+akrobatische
+akrobatischem
+akrobatischen
+akrobatischer
+akrobatisches
+aktenkundig
+aktenkundige
+aktenkundigem
+aktenkundigen
+aktenkundiger
+aktenkundiges
+aktenmäßig
+aktenmäßige
+aktenmäßigem
+aktenmäßigen
+aktenmäßiger
+aktenmäßiges
+aktiv
+aktive
+aktivem
+aktiven
+aktiver
+aktivere
+aktiverem
+aktiveren
+aktiverer
+aktiveres
+aktives
+aktivierbar
+aktivierbare
+aktivierbarem
+aktivierbaren
+aktivierbarer
+aktivierbares
+aktiviere
+aktivieren
+aktivierend
+aktivierende
+aktivierendem
+aktivierenden
+aktivierender
+aktivierendes
+aktivierst
+aktiviert
+aktivierte
+aktiviertem
+aktivierten
+aktivierter
+aktiviertes
+aktiviertest
+aktiviertet
+aktivste
+aktivstem
+aktivsten
+aktivster
+aktivstes
+aktualisiere
+aktualisieren
+aktualisierend
+aktualisierende
+aktualisierendem
+aktualisierenden
+aktualisierender
+aktualisierendes
+aktualisierst
+aktualisiert
+aktualisierte
+aktualisiertem
+aktualisierten
+aktualisierter
+aktualisiertes
+aktualisiertest
+aktualisiertet
+aktuell
+aktuelle
+aktuellem
+aktuellen
+aktueller
+aktuellere
+aktuellerem
+aktuelleren
+aktuellerer
+aktuelleres
+aktuelles
+aktuellste
+aktuellstem
+aktuellsten
+aktuellster
+aktuellstes
+akustisch
+akustische
+akustischem
+akustischen
+akustischer
+akustisches
+akut
+akute
+akutem
+akuten
+akuter
+akutere
+akuterem
+akuteren
+akuterer
+akuteres
+akutes
+akuteste
+akutestem
+akutesten
+akutester
+akutestes
+akzentfrei
+akzentfreie
+akzentfreiem
+akzentfreien
+akzentfreier
+akzentfreies
+akzentlos
+akzentlose
+akzentlosem
+akzentlosen
+akzentloser
+akzentloses
+akzentuiere
+akzentuieren
+akzentuierend
+akzentuierende
+akzentuierendem
+akzentuierenden
+akzentuierender
+akzentuierendes
+akzentuierst
+akzentuiert
+akzentuierte
+akzentuiertem
+akzentuierten
+akzentuierter
+akzentuiertes
+akzentuiertest
+akzentuiertet
+akzeptabel
+akzeptabelste
+akzeptabelstem
+akzeptabelsten
+akzeptabelster
+akzeptabelstes
+akzeptable
+akzeptablem
+akzeptablen
+akzeptabler
+akzeptablere
+akzeptablerem
+akzeptableren
+akzeptablerer
+akzeptableres
+akzeptables
+akzeptiere
+akzeptieren
+akzeptierend
+akzeptierende
+akzeptierendem
+akzeptierenden
+akzeptierender
+akzeptierendes
+akzeptierst
+akzeptiert
+akzeptierte
+akzeptiertem
+akzeptierten
+akzeptierter
+akzeptiertes
+akzeptiertest
+akzeptiertet
+alarmiere
+alarmieren
+alarmierend
+alarmierende
+alarmierendem
+alarmierenden
+alarmierender
+alarmierendes
+alarmierst
+alarmiert
+alarmierte
+alarmiertem
+alarmierten
+alarmierter
+alarmiertes
+alarmiertest
+alarmiertet
+albanisch
+albanische
+albanischem
+albanischen
+albanischer
+albanisches
+albere
+albern
+albernd
+albernde
+alberndem
+albernden
+albernder
+alberndes
+alberne
+albernem
+albernen
+alberner
+albernes
+alberst
+albert
+alberte
+alberten
+albertest
+albertet
+albre
+alemannisch
+alemannische
+alemannischem
+alemannischen
+alemannischer
+alemannisches
+alert
+alerte
+alertem
+alerten
+alerter
+alertes
+algebraisch
+algebraische
+algebraischem
+algebraischen
+algebraischer
+algebraisches
+algorithmisch
+algorithmische
+algorithmischem
+algorithmischen
+algorithmischer
+algorithmisches
+alkalisch
+alkalische
+alkalischem
+alkalischen
+alkalischer
+alkalisches
+alkoholfrei
+alkoholfreie
+alkoholfreiem
+alkoholfreien
+alkoholfreier
+alkoholfreies
+alkoholisch
+alkoholische
+alkoholischem
+alkoholischen
+alkoholischer
+alkoholisches
+all
+allabendlich
+allabendliche
+allabendlichem
+allabendlichen
+allabendlicher
+allabendliches
+allbekannt
+allbekannte
+allbekanntem
+allbekannten
+allbekannter
+allbekanntes
+alle
+allegorisch
+allegorische
+allegorischem
+allegorischen
+allegorischer
+allegorisches
+allegro
+allein
+alleine
+alleinem
+alleinen
+alleiner
+alleines
+alleinig
+alleinige
+alleinigem
+alleinigen
+alleiniger
+alleiniges
+allem
+allemal
+allen
+allenfalls
+aller
+allerbeste
+allerbestem
+allerbesten
+allerbester
+allerbestes
+allerdings
+allererste
+allererstem
+allerersten
+allererster
+allererstes
+allergeringste
+allergeringstem
+allergeringsten
+allergeringster
+allergeringstes
+allergisch
+allergische
+allergischem
+allergischen
+allergischer
+allergisches
+allergrößte
+allergrößtem
+allergrößten
+allergrößter
+allergrößtes
+allerhand
+allerherzlichst
+allerherzlichste
+allerherzlichstem
+allerherzlichsten
+allerherzlichster
+allerherzlichstes
+allerhöchste
+allerhöchstem
+allerhöchsten
+allerhöchster
+allerhöchstes
+allerlei
+allerletzt
+allerletzte
+allerletztem
+allerletzten
+allerletzter
+allerletztes
+allerliebst
+allerliebste
+allerliebstem
+allerliebsten
+allerliebster
+allerliebstes
+allermeist
+allermeiste
+allermeistem
+allermeisten
+allermeister
+allermeistes
+allerneust
+allerneuste
+allerneustem
+allerneusten
+allerneuster
+allerneustes
+allernächste
+allernächstem
+allernächsten
+allernächster
+allernächstes
+allerorten
+allerschlechteste
+allerschlechtestem
+allerschlechtesten
+allerschlechtester
+allerschlechtestes
+allerschlimmste
+allerschlimmstem
+allerschlimmsten
+allerschlimmster
+allerschlimmstes
+allerschwerste
+allerschwerstem
+allerschwersten
+allerschwerster
+allerschwerstes
+allerseits
+allerwenigste
+allerwenigstem
+allerwenigsten
+allerwenigster
+allerwenigstes
+allerwichtigste
+allerwichtigstem
+allerwichtigsten
+allerwichtigster
+allerwichtigstes
+allerwärts
+alles
+allezeit
+allfällig
+allfällige
+allfälligem
+allfälligen
+allfälliger
+allfälliges
+allg
+allgegenwärtig
+allgegenwärtige
+allgegenwärtigem
+allgegenwärtigen
+allgegenwärtiger
+allgegenwärtiges
+allgemein
+allgemeine
+allgemeinem
+allgemeinen
+allgemeiner
+allgemeinere
+allgemeinerem
+allgemeineren
+allgemeinerer
+allgemeineres
+allgemeines
+allgemeinste
+allgemeinstem
+allgemeinsten
+allgemeinster
+allgemeinstes
+allgewaltig
+allgewaltige
+allgewaltigem
+allgewaltigen
+allgewaltiger
+allgewaltiges
+alliiert
+alliierte
+alliiertem
+alliierten
+alliierter
+alliiertes
+alljährlich
+alljährliche
+alljährlichem
+alljährlichen
+alljährlicher
+alljährliches
+allmonatlich
+allmonatliche
+allmonatlichem
+allmonatlichen
+allmonatlicher
+allmonatliches
+allmächtig
+allmächtige
+allmächtigem
+allmächtigen
+allmächtiger
+allmächtiges
+allmählich
+allmähliche
+allmählichem
+allmählichen
+allmählicher
+allmähliches
+alloziere
+allozieren
+allozierend
+allozierende
+allozierendem
+allozierenden
+allozierender
+allozierendes
+allozierst
+alloziert
+allozierte
+alloziertem
+allozierten
+allozierter
+alloziertes
+alloziertest
+alloziertet
+allquantifiziert
+allquantifizierte
+allquantifiziertem
+allquantifizierten
+allquantifizierter
+allquantifiziertes
+allseitig
+allseitige
+allseitigem
+allseitigen
+allseitiger
+allseitiges
+allseits
+alltäglich
+alltägliche
+alltäglichem
+alltäglichen
+alltäglicher
+alltägliches
+allumfassend
+allumfassende
+allumfassendem
+allumfassenden
+allumfassender
+allumfassendes
+allwissend
+allwissende
+allwissendem
+allwissenden
+allwissender
+allwissendes
+allwo
+allwöchentlich
+allwöchentliche
+allwöchentlichem
+allwöchentlichen
+allwöchentlicher
+allwöchentliches
+allzu
+allzweck
+alpha
+alphabetisch
+alphabetische
+alphabetischem
+alphabetischen
+alphabetischer
+alphabetisches
+alphanumerisch
+alphanumerische
+alphanumerischem
+alphanumerischen
+alphanumerischer
+alphanumerisches
+alpin
+alpine
+alpinem
+alpinen
+alpiner
+alpines
+als
+alsbald
+alsbaldig
+alsbaldige
+alsbaldigem
+alsbaldigen
+alsbaldiger
+alsbaldiges
+alsdann
+also
+alt
+altbacken
+altbackene
+altbackenem
+altbackenen
+altbackener
+altbackenes
+altbekannt
+altbekannte
+altbekanntem
+altbekannten
+altbekannter
+altbekanntes
+altbewährt
+altbewährte
+altbewährtem
+altbewährten
+altbewährter
+altbewährtes
+alte
+altem
+alten
+alter
+altere
+alterlos
+alterlose
+alterlosem
+alterlosen
+alterloser
+alterloses
+altern
+alternativ
+alternative
+alternativem
+alternativen
+alternativer
+alternatives
+alternd
+alternde
+alterndem
+alternden
+alternder
+alterndes
+alterniere
+alternieren
+alternierend
+alternierende
+alternierendem
+alternierenden
+alternierender
+alternierendes
+alternierst
+alterniert
+alternierte
+alterniertem
+alternierten
+alternierter
+alterniertes
+alterniertest
+alterniertet
+altersgemäß
+altersgemäße
+altersgemäßem
+altersgemäßen
+altersgemäßer
+altersgemäßes
+altersher
+altersmäßig
+altersmäßige
+altersmäßigem
+altersmäßigen
+altersmäßiger
+altersmäßiges
+altersschwach
+altersschwache
+altersschwachem
+altersschwachen
+altersschwacher
+altersschwaches
+alterst
+altert
+alterte
+alterten
+altertest
+altertet
+altertümlich
+altertümliche
+altertümlichem
+altertümlichen
+altertümlicher
+altertümliches
+altes
+altgedient
+altgediente
+altgedientem
+altgedienten
+altgedienter
+altgedientes
+altgewohnt
+altgewohnte
+altgewohntem
+altgewohnten
+altgewohnter
+altgewohntes
+althergebracht
+althergebrachte
+althergebrachtem
+althergebrachten
+althergebrachter
+althergebrachtes
+althochdeutsch
+althochdeutsche
+althochdeutschem
+althochdeutschen
+althochdeutscher
+althochdeutsches
+altklug
+altkluge
+altklugem
+altklugen
+altkluger
+altkluges
+altliberal
+altliberale
+altliberalem
+altliberalen
+altliberaler
+altliberales
+altmodisch
+altmodische
+altmodischem
+altmodischen
+altmodischer
+altmodischere
+altmodischerem
+altmodischeren
+altmodischerer
+altmodischeres
+altmodisches
+altmodischste
+altmodischstem
+altmodischsten
+altmodischster
+altmodischstes
+altre
+altrosa
+altruistisch
+altruistische
+altruistischem
+altruistischen
+altruistischer
+altruistisches
+altsprachlich
+altsprachliche
+altsprachlichem
+altsprachlichen
+altsprachlicher
+altsprachliches
+altvertraut
+altvertraute
+altvertrautem
+altvertrauten
+altvertrauter
+altvertrautes
+altvordere
+altvorderem
+altvorderen
+altvorderer
+altvorderes
+am
+amateurhaft
+amateurhafte
+amateurhaftem
+amateurhaften
+amateurhafter
+amateurhaftes
+ambitiös
+ambitiöse
+ambitiösem
+ambitiösen
+ambitiöser
+ambitiöses
+ambivalent
+ambivalente
+ambivalentem
+ambivalenten
+ambivalenter
+ambivalentes
+ambulant
+ambulante
+ambulantem
+ambulanten
+ambulanter
+ambulantes
+amen
+amerikanisch
+amerikanische
+amerikanischem
+amerikanischen
+amerikanischer
+amerikanisches
+amerikanisiere
+amerikanisieren
+amerikanisierend
+amerikanisierende
+amerikanisierendem
+amerikanisierenden
+amerikanisierender
+amerikanisierendes
+amerikanisierst
+amerikanisiert
+amerikanisierte
+amerikanisiertem
+amerikanisierten
+amerikanisierter
+amerikanisiertes
+amerikanisiertest
+amerikanisiertet
+amoralisch
+amoralische
+amoralischem
+amoralischen
+amoralischer
+amoralisches
+amorph
+amorphe
+amorphem
+amorphen
+amorpher
+amorphes
+amortisierbar
+amortisierbare
+amortisierbarem
+amortisierbaren
+amortisierbarer
+amortisierbares
+amortisiere
+amortisieren
+amortisierend
+amortisierende
+amortisierendem
+amortisierenden
+amortisierender
+amortisierendes
+amortisierst
+amortisiert
+amortisierte
+amortisiertem
+amortisierten
+amortisierter
+amortisiertes
+amortisiertest
+amortisiertet
+amourös
+amouröse
+amourösem
+amourösen
+amouröser
+amouröses
+amplitudenmoduliert
+amplitudenmodulierte
+amplitudenmoduliertem
+amplitudenmodulierten
+amplitudenmodulierter
+amplitudenmoduliertes
+amputiere
+amputieren
+amputierend
+amputierende
+amputierendem
+amputierenden
+amputierender
+amputierendes
+amputierst
+amputiert
+amputierte
+amputiertem
+amputierten
+amputierter
+amputiertes
+amputiertest
+amputiertet
+amte
+amten
+amtest
+amtet
+amtiere
+amtieren
+amtierend
+amtierende
+amtierendem
+amtierenden
+amtierender
+amtierendes
+amtierst
+amtiert
+amtierte
+amtierten
+amtiertest
+amtiertet
+amtlich
+amtliche
+amtlichem
+amtlichen
+amtlicher
+amtliches
+amusisch
+amusische
+amusischem
+amusischen
+amusischer
+amusisches
+amüsant
+amüsante
+amüsantem
+amüsanten
+amüsanter
+amüsantes
+amüsiere
+amüsieren
+amüsierend
+amüsierende
+amüsierendem
+amüsierenden
+amüsierender
+amüsierendes
+amüsierst
+amüsiert
+amüsierte
+amüsiertem
+amüsierten
+amüsierter
+amüsiertes
+amüsiertest
+amüsiertet
+an
+anachronistisch
+anachronistische
+anachronistischem
+anachronistischen
+anachronistischer
+anachronistisches
+anal
+anale
+analem
+analen
+analer
+anales
+analog
+analoge
+analogem
+analogen
+analoger
+analoges
+analphabetisch
+analphabetische
+analphabetischem
+analphabetischen
+analphabetischer
+analphabetisches
+analysierbar
+analysierbare
+analysierbarem
+analysierbaren
+analysierbarer
+analysierbares
+analysiere
+analysieren
+analysierend
+analysierende
+analysierendem
+analysierenden
+analysierender
+analysierendes
+analysierst
+analysiert
+analysierte
+analysiertem
+analysierten
+analysierter
+analysiertes
+analysiertest
+analysiertet
+analytisch
+analytische
+analytischem
+analytischen
+analytischer
+analytisches
+anarchisch
+anarchische
+anarchischem
+anarchischen
+anarchischer
+anarchisches
+anarchistisch
+anarchistische
+anarchistischem
+anarchistischen
+anarchistischer
+anarchistisches
+anastatisch
+anastatische
+anastatischem
+anastatischen
+anastatischer
+anastatisches
+anatomisch
+anatomische
+anatomischem
+anatomischen
+anatomischer
+anatomisches
+anbahne
+anbahnen
+anbahnend
+anbahnende
+anbahnendem
+anbahnenden
+anbahnender
+anbahnendes
+anbahnst
+anbahnt
+anbahnte
+anbahnten
+anbahntest
+anbahntet
+anbaue
+anbauen
+anbauend
+anbauende
+anbauendem
+anbauenden
+anbauender
+anbauendes
+anbaust
+anbaut
+anbaute
+anbauten
+anbautest
+anbautet
+anbefohlen
+anbefohlene
+anbefohlenem
+anbefohlenen
+anbefohlener
+anbefohlenes
+anbehalte
+anbehalten
+anbehaltend
+anbehaltende
+anbehaltendem
+anbehaltenden
+anbehaltender
+anbehaltendes
+anbehaltest
+anbehaltet
+anbehaltete
+anbehaltetem
+anbehalteten
+anbehalteter
+anbehaltetes
+anbehaltetest
+anbehaltetet
+anbei
+anbeiße
+anbeißen
+anbeißend
+anbeißende
+anbeißendem
+anbeißenden
+anbeißender
+anbeißendes
+anbeißest
+anbeißt
+anbelange
+anbelangen
+anbelangend
+anbelangende
+anbelangendem
+anbelangenden
+anbelangender
+anbelangendes
+anbelangst
+anbelangt
+anbelangte
+anbelangtem
+anbelangten
+anbelangter
+anbelangtes
+anbelangtest
+anbelangtet
+anbelle
+anbellen
+anbellend
+anbellende
+anbellendem
+anbellenden
+anbellender
+anbellendes
+anbellst
+anbellt
+anbellte
+anbellten
+anbelltest
+anbelltet
+anberaume
+anberaumen
+anberaumend
+anberaumende
+anberaumendem
+anberaumenden
+anberaumender
+anberaumendes
+anberaumst
+anberaumt
+anberaumte
+anberaumtem
+anberaumten
+anberaumter
+anberaumtes
+anberaumtest
+anberaumtet
+anbete
+anbeten
+anbetend
+anbetende
+anbetendem
+anbetenden
+anbetender
+anbetendes
+anbetest
+anbetet
+anbetete
+anbeteten
+anbetetest
+anbetetet
+anbetreffen
+anbetreffend
+anbetreffende
+anbetreffendem
+anbetreffenden
+anbetreffender
+anbetreffendes
+anbetrifft
+anbetroffen
+anbetroffene
+anbetroffenem
+anbetroffenen
+anbetroffener
+anbetroffenes
+anbettele
+anbetteln
+anbettelnd
+anbettelnde
+anbettelndem
+anbettelnden
+anbettelnder
+anbettelndes
+anbettelst
+anbettelt
+anbettelte
+anbettelten
+anbetteltest
+anbetteltet
+anbettle
+anbetungswürdig
+anbetungswürdige
+anbetungswürdigem
+anbetungswürdigen
+anbetungswürdiger
+anbetungswürdiges
+anbiedere
+anbiedern
+anbiedernd
+anbiedernde
+anbiederndem
+anbiedernden
+anbiedernder
+anbiederndes
+anbiederst
+anbiedert
+anbiederte
+anbiederten
+anbiedertest
+anbiedertet
+anbiedre
+anbiete
+anbieten
+anbietend
+anbietende
+anbietendem
+anbietenden
+anbietender
+anbietendes
+anbietest
+anbietet
+anbinde
+anbinden
+anbindend
+anbindende
+anbindendem
+anbindenden
+anbindender
+anbindendes
+anbindest
+anbindet
+anbiss
+anbissen
+anbissest
+anbisst
+anblase
+anblasen
+anblasend
+anblasende
+anblasendem
+anblasenden
+anblasender
+anblasendes
+anblast
+anblicke
+anblicken
+anblickend
+anblickende
+anblickendem
+anblickenden
+anblickender
+anblickendes
+anblickst
+anblickt
+anblickte
+anblickten
+anblicktest
+anblicktet
+anblinzele
+anblinzeln
+anblinzelnd
+anblinzelnde
+anblinzelndem
+anblinzelnden
+anblinzelnder
+anblinzelndes
+anblinzelst
+anblinzelt
+anblinzelte
+anblinzelten
+anblinzeltest
+anblinzeltet
+anblinzle
+anbohre
+anbohren
+anbohrend
+anbohrende
+anbohrendem
+anbohrenden
+anbohrender
+anbohrendes
+anbohrst
+anbohrt
+anbohrte
+anbohrten
+anbohrtest
+anbohrtet
+anbordsetze
+anbordsetzen
+anbordsetzend
+anbordsetzende
+anbordsetzendem
+anbordsetzenden
+anbordsetzender
+anbordsetzendes
+anbordsetzt
+anbot
+anboten
+anbotest
+anbotet
+anbotst
+anbrach
+anbrachen
+anbrachest
+anbrachst
+anbracht
+anbrachte
+anbrachten
+anbrachtest
+anbrachtet
+anbrannte
+anbrannten
+anbranntest
+anbranntet
+anbrate
+anbraten
+anbratend
+anbratende
+anbratendem
+anbratenden
+anbratender
+anbratendes
+anbratet
+anbreche
+anbrechen
+anbrechend
+anbrechende
+anbrechendem
+anbrechenden
+anbrechender
+anbrechendes
+anbrecht
+anbrenne
+anbrennen
+anbrennend
+anbrennende
+anbrennendem
+anbrennenden
+anbrennender
+anbrennendes
+anbrennst
+anbrennt
+anbrichst
+anbricht
+anbriet
+anbriete
+anbrieten
+anbrietest
+anbrietet
+anbrietst
+anbringe
+anbringen
+anbringend
+anbringende
+anbringendem
+anbringenden
+anbringender
+anbringendes
+anbringst
+anbringt
+anbrülle
+anbrüllen
+anbrüllend
+anbrüllende
+anbrüllendem
+anbrüllenden
+anbrüllender
+anbrüllendes
+anbrüllst
+anbrüllt
+anbrüllte
+anbrüllten
+anbrülltest
+anbrülltet
+anbändele
+anbändeln
+anbändelnd
+anbändelnde
+anbändelndem
+anbändelnden
+anbändelnder
+anbändelndes
+anbändelst
+anbändelt
+anbändelte
+anbändelten
+anbändeltest
+anbändeltet
+anbändle
+ancrimpbar
+ancrimpen
+andalusisch
+andalusische
+andalusischem
+andalusischen
+andalusischer
+andalusisches
+andauere
+andauern
+andauernd
+andauernde
+andauerndem
+andauernden
+andauernder
+andauerndes
+andauerst
+andauert
+andauerte
+andauerten
+andauertest
+andauertet
+andaure
+andere
+anderem
+anderen
+anderenfalls
+anderenorts
+anderer
+andererseits
+anderes
+andermal
+andernfalls
+andernorts
+anderntags
+anders
+andersartig
+andersartige
+andersartigem
+andersartigen
+andersartiger
+andersartiges
+anderseits
+andersgläubig
+andersgläubige
+andersgläubigem
+andersgläubigen
+andersgläubiger
+andersgläubiges
+andersherum
+anderswie
+anderswo
+anderswoher
+anderthalb
+anderthalbe
+anderthalbem
+anderthalben
+anderthalber
+anderthalbes
+anderthalbfach
+anderthalbfache
+anderthalbfachem
+anderthalbfachen
+anderthalbfacher
+anderthalbfaches
+anderthalbjährig
+anderthalbjährige
+anderthalbjährigem
+anderthalbjährigen
+anderthalbjähriger
+anderthalbjähriges
+anderweitig
+anderweitige
+anderweitigem
+anderweitigen
+anderweitiger
+anderweitiges
+andeute
+andeuten
+andeutend
+andeutende
+andeutendem
+andeutenden
+andeutender
+andeutendes
+andeutest
+andeutet
+andeutete
+andeuteten
+andeutetest
+andeutetet
+andeutungsweise
+andichte
+andichten
+andichtend
+andichtende
+andichtendem
+andichtenden
+andichtender
+andichtendes
+andichtest
+andichtet
+andichtete
+andichteten
+andichtetest
+andichtetet
+andiene
+andienen
+andienend
+andienende
+andienendem
+andienenden
+andienender
+andienendes
+andienst
+andient
+andiente
+andienten
+andientest
+andientet
+andorranisch
+andorranische
+andorranischem
+andorranischen
+andorranischer
+andorranisches
+andre
+andrehe
+andrehen
+andrehend
+andrehende
+andrehendem
+andrehenden
+andrehender
+andrehendes
+andrehst
+andreht
+andrehte
+andrehten
+andrehtest
+andrehtet
+andrem
+andren
+andrer
+andres
+androhe
+androhen
+androhend
+androhende
+androhendem
+androhenden
+androhender
+androhendes
+androhst
+androht
+androhte
+androhten
+androhtest
+androhtet
+andächtig
+andächtige
+andächtigem
+andächtigen
+andächtiger
+andächtiges
+anecke
+anecken
+aneckst
+aneckt
+aneckte
+aneckten
+anecktest
+anecktet
+aneigne
+aneignen
+aneignend
+aneignende
+aneignendem
+aneignenden
+aneignender
+aneignendes
+aneignest
+aneignet
+aneignete
+aneigneten
+aneignetest
+aneignetet
+aneinander
+anekdotenhaft
+anekdotenhafte
+anekdotenhaftem
+anekdotenhaften
+anekdotenhafter
+anekdotenhaftes
+anekele
+anekeln
+anekelnd
+anekelnde
+anekelndem
+anekelnden
+anekelnder
+anekelndes
+anekelst
+anekelt
+anekelte
+anekelten
+anekeltest
+anekeltet
+anekle
+anempfohlen
+anempfohlene
+anempfohlenem
+anempfohlenen
+anempfohlener
+anempfohlenes
+anerkannt
+anerkannte
+anerkanntem
+anerkannten
+anerkannter
+anerkanntes
+anerkennbar
+anerkennbare
+anerkennbarem
+anerkennbaren
+anerkennbarer
+anerkennbares
+anerkenne
+anerkennen
+anerkennend
+anerkennende
+anerkennendem
+anerkennenden
+anerkennender
+anerkennendes
+anerkennenswert
+anerkennenswerte
+anerkennenswertem
+anerkennenswerten
+anerkennenswerter
+anerkennenswertes
+anerkennst
+anerkennt
+anerziehe
+anerziehen
+anerziehend
+anerziehende
+anerziehendem
+anerziehenden
+anerziehender
+anerziehendes
+anerziehst
+anerzieht
+anerzog
+anerzogen
+anerzogene
+anerzogenem
+anerzogenen
+anerzogener
+anerzogenes
+anerzogst
+anerzogt
+anfache
+anfachen
+anfachend
+anfachende
+anfachendem
+anfachenden
+anfachender
+anfachendes
+anfachst
+anfacht
+anfachte
+anfachten
+anfachtest
+anfachtet
+anfahre
+anfahren
+anfahrend
+anfahrende
+anfahrendem
+anfahrenden
+anfahrender
+anfahrendes
+anfahrt
+anfalle
+anfallen
+anfallend
+anfallende
+anfallendem
+anfallenden
+anfallender
+anfallendes
+anfallt
+anfange
+anfangen
+anfangend
+anfangende
+anfangendem
+anfangenden
+anfangender
+anfangendes
+anfangs
+anfangt
+anfasse
+anfassen
+anfassend
+anfassende
+anfassendem
+anfassenden
+anfassender
+anfassendes
+anfassest
+anfasst
+anfasste
+anfassten
+anfasstest
+anfasstet
+anfaule
+anfaulen
+anfaulend
+anfaulende
+anfaulendem
+anfaulenden
+anfaulender
+anfaulendes
+anfaulst
+anfault
+anfaulte
+anfaulten
+anfaultest
+anfaultet
+anfechtbar
+anfechtbare
+anfechtbarem
+anfechtbaren
+anfechtbarer
+anfechtbares
+anfechte
+anfechten
+anfechtend
+anfechtende
+anfechtendem
+anfechtenden
+anfechtender
+anfechtendes
+anfechtest
+anfechtet
+anfeinde
+anfeinden
+anfeindend
+anfeindende
+anfeindendem
+anfeindenden
+anfeindender
+anfeindendes
+anfeindest
+anfeindet
+anfeindete
+anfeindeten
+anfeindetest
+anfeindetet
+anfertige
+anfertigen
+anfertigend
+anfertigende
+anfertigendem
+anfertigenden
+anfertigender
+anfertigendes
+anfertigst
+anfertigt
+anfertigte
+anfertigten
+anfertigtest
+anfertigtet
+anfeuchte
+anfeuchten
+anfeuchtend
+anfeuchtende
+anfeuchtendem
+anfeuchtenden
+anfeuchtender
+anfeuchtendes
+anfeuchtest
+anfeuchtet
+anfeuchtete
+anfeuchteten
+anfeuchtetest
+anfeuchtetet
+anfeuere
+anfeuern
+anfeuernd
+anfeuernde
+anfeuerndem
+anfeuernden
+anfeuernder
+anfeuerndes
+anfeuerst
+anfeuert
+anfeuerte
+anfeuerten
+anfeuertest
+anfeuertet
+anfeure
+anfiel
+anfielen
+anfielst
+anfielt
+anfing
+anfingen
+anfingst
+anfingt
+anflehe
+anflehen
+anflehend
+anflehende
+anflehendem
+anflehenden
+anflehender
+anflehendes
+anflehst
+anfleht
+anflehte
+anflehten
+anflehtest
+anflehtet
+anfliege
+anfliegen
+anfliegend
+anfliegende
+anfliegendem
+anfliegenden
+anfliegender
+anfliegendes
+anfliegst
+anfliegt
+anfordere
+anfordern
+anfordernd
+anfordernde
+anforderndem
+anfordernden
+anfordernder
+anforderndes
+anforderst
+anfordert
+anforderte
+anforderten
+anfordertest
+anfordertet
+anforderungsgemäß
+anforderungsgemäße
+anforderungsgemäßem
+anforderungsgemäßen
+anforderungsgemäßer
+anforderungsgemäßes
+anfordre
+anfrage
+anfragen
+anfragend
+anfragende
+anfragendem
+anfragenden
+anfragender
+anfragendes
+anfragst
+anfragt
+anfragte
+anfragten
+anfragtest
+anfragtet
+anfraß
+anfraßen
+anfraßest
+anfraßt
+anfreunde
+anfreunden
+anfreundend
+anfreundende
+anfreundendem
+anfreundenden
+anfreundender
+anfreundendes
+anfreundest
+anfreundet
+anfreundete
+anfreundeten
+anfreundetest
+anfreundetet
+anfriere
+anfrieren
+anfrierend
+anfrierende
+anfrierendem
+anfrierenden
+anfrierender
+anfrierendes
+anfrierst
+anfriert
+anfällig
+anfällige
+anfälligem
+anfälligen
+anfälliger
+anfälliges
+anfällst
+anfällt
+anfänglich
+anfängliche
+anfänglichem
+anfänglichen
+anfänglicher
+anfängliches
+anfängst
+anfängt
+anfüge
+anfügen
+anfügend
+anfügende
+anfügendem
+anfügenden
+anfügender
+anfügendes
+anfügst
+anfügt
+anfügte
+anfügten
+anfügtest
+anfügtet
+anführe
+anführen
+anführend
+anführende
+anführendem
+anführenden
+anführender
+anführendes
+anführst
+anführt
+anführte
+anführten
+anführtest
+anführtet
+angab
+angaben
+angabst
+angabt
+angaffe
+angaffen
+angaffend
+angaffende
+angaffendem
+angaffenden
+angaffender
+angaffendes
+angaffst
+angafft
+angaffte
+angafften
+angafftest
+angafftet
+angebahnt
+angebahnte
+angebahntem
+angebahnten
+angebahnter
+angebahntes
+angebaut
+angebaute
+angebautem
+angebauten
+angebauter
+angebautes
+angebbar
+angebbare
+angebbarem
+angebbaren
+angebbarer
+angebbares
+angebe
+angebellt
+angebellte
+angebelltem
+angebellten
+angebellter
+angebelltes
+angeben
+angebend
+angebende
+angebendem
+angebenden
+angebender
+angebendes
+angeberisch
+angeberische
+angeberischem
+angeberischen
+angeberischer
+angeberisches
+angebetet
+angebetete
+angebetetem
+angebeteten
+angebeteter
+angebetetes
+angebettelt
+angebettelte
+angebetteltem
+angebettelten
+angebettelter
+angebetteltes
+angebiedert
+angebiederte
+angebiedertem
+angebiederten
+angebiederter
+angebiedertes
+angebissen
+angebissene
+angebissenem
+angebissenen
+angebissener
+angebissenes
+angeblasen
+angeblasene
+angeblasenem
+angeblasenen
+angeblasener
+angeblasenes
+angeblich
+angebliche
+angeblichem
+angeblichen
+angeblicher
+angebliches
+angeblickt
+angeblickte
+angeblicktem
+angeblickten
+angeblickter
+angeblicktes
+angeblinzelt
+angeblinzelte
+angeblinzeltem
+angeblinzelten
+angeblinzelter
+angeblinzeltes
+angebohrt
+angebohrte
+angebohrtem
+angebohrten
+angebohrter
+angebohrtes
+angeboren
+angeborene
+angeborenem
+angeborenen
+angeborener
+angeborenes
+angeboten
+angebotene
+angebotenem
+angebotenen
+angebotener
+angebotenes
+angebracht
+angebrachte
+angebrachtem
+angebrachten
+angebrachter
+angebrachtere
+angebrachterem
+angebrachteren
+angebrachterer
+angebrachteres
+angebrachtes
+angebrachteste
+angebrachtestem
+angebrachtesten
+angebrachtester
+angebrachtestes
+angebrannt
+angebrannte
+angebranntem
+angebrannten
+angebrannter
+angebranntes
+angebraten
+angebratene
+angebratenem
+angebratenen
+angebratener
+angebratenes
+angebrochen
+angebrochene
+angebrochenem
+angebrochenen
+angebrochener
+angebrochenes
+angebrüllt
+angebrüllte
+angebrülltem
+angebrüllten
+angebrüllter
+angebrülltes
+angebt
+angebunden
+angebundene
+angebundenem
+angebundenen
+angebundener
+angebundenes
+angedacht
+angedachte
+angedachtem
+angedachten
+angedachter
+angedachtes
+angedeihe
+angedeihen
+angedeihend
+angedeihende
+angedeihendem
+angedeihenden
+angedeihender
+angedeihendes
+angedeihst
+angedeiht
+angedeihte
+angedeihten
+angedeihtest
+angedeihtet
+angedeutet
+angedeutete
+angedeutetem
+angedeuteten
+angedeuteter
+angedeutetes
+angedichtet
+angedichtete
+angedichtetem
+angedichteten
+angedichteter
+angedichtetes
+angedient
+angediente
+angedientem
+angedienten
+angedienter
+angedientes
+angedreht
+angedrehte
+angedrehtem
+angedrehten
+angedrehter
+angedrehtes
+angedroht
+angedrohte
+angedrohtem
+angedrohten
+angedrohter
+angedrohtes
+angeeignet
+angeeignete
+angeeignetem
+angeeigneten
+angeeigneter
+angeeignetes
+angeekelt
+angeekelte
+angeekeltem
+angeekelten
+angeekelter
+angeekeltes
+angefacht
+angefachte
+angefachtem
+angefachten
+angefachter
+angefachtes
+angefahren
+angefahrene
+angefahrenem
+angefahrenen
+angefahrener
+angefahrenes
+angefallen
+angefallene
+angefallenem
+angefallenen
+angefallener
+angefallenes
+angefangen
+angefangene
+angefangenem
+angefangenen
+angefangener
+angefangenes
+angefasst
+angefasste
+angefasstem
+angefassten
+angefasster
+angefasstes
+angefault
+angefaulte
+angefaultem
+angefaulten
+angefaulter
+angefaultes
+angefeindet
+angefeindete
+angefeindetem
+angefeindeten
+angefeindeter
+angefeindetes
+angefertigt
+angefertigte
+angefertigtem
+angefertigten
+angefertigter
+angefertigtes
+angefeuchtet
+angefeuchtete
+angefeuchtetem
+angefeuchteten
+angefeuchteter
+angefeuchtetes
+angefeuert
+angefeuerte
+angefeuertem
+angefeuerten
+angefeuerter
+angefeuertes
+angefleht
+angeflehte
+angeflehtem
+angeflehten
+angeflehter
+angeflehtes
+angeflogen
+angeflogene
+angeflogenem
+angeflogenen
+angeflogener
+angeflogenes
+angefochten
+angefochtene
+angefochtenem
+angefochtenen
+angefochtener
+angefochtenes
+angefordert
+angeforderte
+angefordertem
+angeforderten
+angeforderter
+angefordertes
+angefragt
+angefragte
+angefragtem
+angefragten
+angefragter
+angefragtes
+angefreundet
+angefreundete
+angefreundetem
+angefreundeten
+angefreundeter
+angefreundetes
+angefroren
+angefrorene
+angefrorenem
+angefrorenen
+angefrorener
+angefrorenes
+angefügt
+angefügte
+angefügtem
+angefügten
+angefügter
+angefügtes
+angeführt
+angeführte
+angeführtem
+angeführten
+angeführter
+angeführtes
+angefüllt
+angefüllte
+angefülltem
+angefüllten
+angefüllter
+angefülltes
+angegafft
+angegaffte
+angegafftem
+angegafften
+angegaffter
+angegafftes
+angegangen
+angegangene
+angegangenem
+angegangenen
+angegangener
+angegangenes
+angegeben
+angegebene
+angegebenem
+angegebenen
+angegebener
+angegebenes
+angeglichen
+angeglichene
+angeglichenem
+angeglichenen
+angeglichener
+angeglichenes
+angegliedert
+angegliederte
+angegliedertem
+angegliederten
+angegliederter
+angegliedertes
+angegossen
+angegossene
+angegossenem
+angegossenen
+angegossener
+angegossenes
+angegrenzt
+angegriffen
+angegriffene
+angegriffenem
+angegriffenen
+angegriffener
+angegriffenes
+angegrinst
+angegrinste
+angegrinstem
+angegrinsten
+angegrinster
+angegrinstes
+angehabt
+angehabte
+angehabtem
+angehabten
+angehabter
+angehabtes
+angehalten
+angehaltene
+angehaltenem
+angehaltenen
+angehaltener
+angehaltenes
+angehaucht
+angehauchte
+angehauchtem
+angehauchten
+angehauchter
+angehauchtes
+angehe
+angeheftet
+angeheftete
+angeheftetem
+angehefteten
+angehefteter
+angeheftetes
+angehen
+angehend
+angehende
+angehendem
+angehenden
+angehender
+angehendes
+angeheuert
+angeheuerte
+angeheuertem
+angeheuerten
+angeheuerter
+angeheuertes
+angehimmelt
+angehimmelte
+angehimmeltem
+angehimmelten
+angehimmelter
+angehimmeltes
+angehoben
+angehobene
+angehobenem
+angehobenen
+angehobener
+angehobenes
+angehst
+angeht
+angehängt
+angehängte
+angehängtem
+angehängten
+angehängter
+angehängtes
+angehäuft
+angehäufte
+angehäuftem
+angehäuften
+angehäufter
+angehäuftes
+angehöre
+angehören
+angehörend
+angehörende
+angehörendem
+angehörenden
+angehörender
+angehörendes
+angehörig
+angehörige
+angehörigem
+angehörigen
+angehöriger
+angehöriges
+angehörst
+angehört
+angehörte
+angehörtem
+angehörten
+angehörter
+angehörtes
+angehörtest
+angehörtet
+angekauft
+angekaufte
+angekauftem
+angekauften
+angekaufter
+angekauftes
+angekettet
+angekettete
+angekettetem
+angeketteten
+angeketteter
+angekettetes
+angeklagt
+angeklagte
+angeklagtem
+angeklagten
+angeklagter
+angeklagtes
+angeklammert
+angeklammerte
+angeklammertem
+angeklammerten
+angeklammerter
+angeklammertes
+angeklebt
+angeklebte
+angeklebtem
+angeklebten
+angeklebter
+angeklebtes
+angekleidet
+angekleidete
+angekleidetem
+angekleideten
+angekleideter
+angekleidetes
+angeklemmt
+angeklemmte
+angeklemmtem
+angeklemmten
+angeklemmter
+angeklemmtes
+angeklingelt
+angeklopft
+angeklopfte
+angeklopftem
+angeklopften
+angeklopfter
+angeklopftes
+angeklungen
+angeklungene
+angeklungenem
+angeklungenen
+angeklungener
+angeklungenes
+angeknackst
+angeknackste
+angeknackstem
+angeknacksten
+angeknackster
+angeknackstes
+angeknipst
+angeknipste
+angeknipstem
+angeknipsten
+angeknipster
+angeknipstes
+angeknüpft
+angeknüpfte
+angeknüpftem
+angeknüpften
+angeknüpfter
+angeknüpftes
+angekommen
+angekommene
+angekommenem
+angekommenen
+angekommener
+angekommenes
+angekoppelt
+angekoppelte
+angekoppeltem
+angekoppelten
+angekoppelter
+angekoppeltes
+angekratzt
+angekratzte
+angekratztem
+angekratzten
+angekratzter
+angekratztes
+angekreidet
+angekreidete
+angekreidetem
+angekreideten
+angekreideter
+angekreidetes
+angekreuzt
+angekreuzte
+angekreuztem
+angekreuzten
+angekreuzter
+angekreuztes
+angekränkelt
+angekränkelte
+angekränkeltem
+angekränkelten
+angekränkelter
+angekränkeltes
+angekurbelt
+angekurbelte
+angekurbeltem
+angekurbelten
+angekurbelter
+angekurbeltes
+angekündigt
+angekündigte
+angekündigtem
+angekündigten
+angekündigter
+angekündigtes
+angelacht
+angelachte
+angelachtem
+angelachten
+angelachter
+angelachtes
+angelangt
+angelangte
+angelangtem
+angelangten
+angelangter
+angelangtes
+angelassen
+angelassene
+angelassenem
+angelassenen
+angelassener
+angelassenes
+angelastet
+angelastete
+angelastetem
+angelasteten
+angelasteter
+angelastetes
+angelaufen
+angelaufene
+angelaufenem
+angelaufenen
+angelaufener
+angelaufenes
+angele
+angelegen
+angelegene
+angelegenem
+angelegenen
+angelegener
+angelegenes
+angelegt
+angelegte
+angelegtem
+angelegten
+angelegter
+angelegtes
+angelehnt
+angelehnte
+angelehntem
+angelehnten
+angelehnter
+angelehntes
+angeleimt
+angeleimte
+angeleimtem
+angeleimten
+angeleimter
+angeleimtes
+angeleitet
+angeleitete
+angeleitetem
+angeleiteten
+angeleiteter
+angeleitetes
+angelernt
+angelernte
+angelerntem
+angelernten
+angelernter
+angelerntes
+angeliefert
+angelieferte
+angeliefertem
+angelieferten
+angelieferter
+angeliefertes
+angeln
+angelnd
+angelnde
+angelndem
+angelnden
+angelnder
+angelndes
+angelockt
+angelockte
+angelocktem
+angelockten
+angelockter
+angelocktes
+angelogen
+angelogene
+angelogenem
+angelogenen
+angelogener
+angelogenes
+angelst
+angelsächsisch
+angelsächsische
+angelsächsischem
+angelsächsischen
+angelsächsischer
+angelsächsisches
+angelt
+angelte
+angelten
+angeltest
+angeltet
+angelächelt
+angelächelte
+angelächeltem
+angelächelten
+angelächelter
+angelächeltes
+angelötet
+angelötete
+angelötetem
+angelöteten
+angelöteter
+angelötetes
+angemacht
+angemachte
+angemachtem
+angemachten
+angemachter
+angemachtes
+angemahnt
+angemahnte
+angemahntem
+angemahnten
+angemahnter
+angemahntes
+angemalt
+angemalte
+angemaltem
+angemalten
+angemalter
+angemaltes
+angemaßt
+angemaßte
+angemaßtem
+angemaßten
+angemaßter
+angemaßtes
+angemeldet
+angemeldete
+angemeldetem
+angemeldeten
+angemeldeter
+angemeldetes
+angemerkt
+angemerkte
+angemerktem
+angemerkten
+angemerkter
+angemerktes
+angemessen
+angemessene
+angemessenem
+angemessenen
+angemessener
+angemessenere
+angemessenerem
+angemesseneren
+angemessenerer
+angemesseneres
+angemessenes
+angemessenste
+angemessenstem
+angemessensten
+angemessenster
+angemessenstes
+angemietet
+angemietete
+angemietetem
+angemieteten
+angemieteter
+angemietetes
+angemustert
+angemusterte
+angemustertem
+angemusterten
+angemusterter
+angemustertes
+angenagelt
+angenagelte
+angenageltem
+angenagelten
+angenagelter
+angenageltes
+angenehm
+angenehme
+angenehmem
+angenehmen
+angenehmer
+angenehmere
+angenehmerem
+angenehmeren
+angenehmerer
+angenehmeres
+angenehmes
+angenehmste
+angenehmstem
+angenehmsten
+angenehmster
+angenehmstes
+angenommen
+angenommene
+angenommenem
+angenommenen
+angenommener
+angenommenes
+angenäht
+angenähte
+angenähtem
+angenähten
+angenähter
+angenähtes
+angeordnet
+angeordnete
+angeordnetem
+angeordneten
+angeordneter
+angeordnetes
+angepackt
+angepackte
+angepacktem
+angepackten
+angepackter
+angepacktes
+angepasst
+angepasste
+angepasstem
+angepassten
+angepasster
+angepasstere
+angepassterem
+angepassteren
+angepassterer
+angepassteres
+angepasstes
+angepassteste
+angepasstestem
+angepasstesten
+angepasstester
+angepasstestes
+angepeilt
+angepeilte
+angepeiltem
+angepeilten
+angepeilter
+angepeiltes
+angepfiffen
+angepfiffene
+angepfiffenem
+angepfiffenen
+angepfiffener
+angepfiffenes
+angepflanzt
+angepflanzte
+angepflanztem
+angepflanzten
+angepflanzter
+angepflanztes
+angeprallt
+angeprallte
+angepralltem
+angeprallten
+angeprallter
+angepralltes
+angepriesen
+angepriesene
+angepriesenem
+angepriesenen
+angepriesener
+angepriesenes
+angepumpt
+angepumpte
+angepumptem
+angepumpten
+angepumpter
+angepumptes
+angepöbelt
+angepöbelte
+angepöbeltem
+angepöbelten
+angepöbelter
+angepöbeltes
+angerannt
+angerannte
+angeranntem
+angerannten
+angerannter
+angeranntes
+angeraten
+angeratene
+angeratenem
+angeratenen
+angeratener
+angeratenes
+angeraucht
+angerauchte
+angerauchtem
+angerauchten
+angerauchter
+angerauchtes
+angeraut
+angeraute
+angerautem
+angerauten
+angerauter
+angerautes
+angerechnet
+angerechnete
+angerechnetem
+angerechneten
+angerechneter
+angerechnetes
+angeredet
+angeredete
+angeredetem
+angeredeten
+angeredeter
+angeredetes
+angeregt
+angeregte
+angeregtem
+angeregten
+angeregter
+angeregtes
+angereichert
+angereicherte
+angereichertem
+angereicherten
+angereicherter
+angereichertes
+angereiht
+angereihte
+angereihtem
+angereihten
+angereihter
+angereihtes
+angereist
+angereiste
+angereistem
+angereisten
+angereister
+angereistes
+angerichtet
+angerichtete
+angerichtetem
+angerichteten
+angerichteter
+angerichtetes
+angerissen
+angerissene
+angerissenem
+angerissenen
+angerissener
+angerissenes
+angeritzt
+angeritzte
+angeritztem
+angeritzten
+angeritzter
+angeritztes
+angerufen
+angerufene
+angerufenem
+angerufenen
+angerufener
+angerufenes
+angerückt
+angerückte
+angerücktem
+angerückten
+angerückter
+angerücktes
+angerührt
+angerührte
+angerührtem
+angerührten
+angerührter
+angerührtes
+angesagt
+angesagte
+angesagtem
+angesagten
+angesagter
+angesagtes
+angesammelt
+angesammelte
+angesammeltem
+angesammelten
+angesammelter
+angesammeltes
+angesaugt
+angesaugte
+angesaugtem
+angesaugten
+angesaugter
+angesaugtes
+angeschafft
+angeschaffte
+angeschafftem
+angeschafften
+angeschaffter
+angeschafftes
+angeschaltet
+angeschaltete
+angeschaltetem
+angeschalteten
+angeschalteter
+angeschaltetes
+angeschaut
+angeschaute
+angeschautem
+angeschauten
+angeschauter
+angeschautes
+angeschichtet
+angeschichtete
+angeschichtetem
+angeschichteten
+angeschichteter
+angeschichtetes
+angeschickt
+angeschickte
+angeschicktem
+angeschickten
+angeschickter
+angeschicktes
+angeschlagen
+angeschlagene
+angeschlagenem
+angeschlagenen
+angeschlagener
+angeschlagenes
+angeschlossen
+angeschlossene
+angeschlossenem
+angeschlossenen
+angeschlossener
+angeschlossenes
+angeschmiegt
+angeschmiegte
+angeschmiegtem
+angeschmiegten
+angeschmiegter
+angeschmiegtes
+angeschmiert
+angeschmierte
+angeschmiertem
+angeschmierten
+angeschmierter
+angeschmiertes
+angeschnallt
+angeschnallte
+angeschnalltem
+angeschnallten
+angeschnallter
+angeschnalltes
+angeschnauzt
+angeschnauzte
+angeschnauztem
+angeschnauzten
+angeschnauzter
+angeschnauztes
+angeschnitten
+angeschnittene
+angeschnittenem
+angeschnittenen
+angeschnittener
+angeschnittenes
+angeschossen
+angeschossene
+angeschossenem
+angeschossenen
+angeschossener
+angeschossenes
+angeschraubt
+angeschraubte
+angeschraubtem
+angeschraubten
+angeschraubter
+angeschraubtes
+angeschrieben
+angeschriebene
+angeschriebenem
+angeschriebenen
+angeschriebener
+angeschriebenes
+angeschrien
+angeschriene
+angeschrienem
+angeschrienen
+angeschriener
+angeschrienes
+angeschuldigt
+angeschuldigte
+angeschuldigtem
+angeschuldigten
+angeschuldigter
+angeschuldigtes
+angeschweißt
+angeschweißte
+angeschweißtem
+angeschweißten
+angeschweißter
+angeschweißtes
+angeschwemmt
+angeschwemmte
+angeschwemmtem
+angeschwemmten
+angeschwemmter
+angeschwemmtes
+angeschwindelt
+angeschwindelte
+angeschwindeltem
+angeschwindelten
+angeschwindelter
+angeschwindeltes
+angeschwollen
+angeschwollene
+angeschwollenem
+angeschwollenen
+angeschwollener
+angeschwollenes
+angeschwärzt
+angeschwärzte
+angeschwärztem
+angeschwärzten
+angeschwärzter
+angeschwärztes
+angesehen
+angesehene
+angesehenem
+angesehenen
+angesehener
+angesehenere
+angesehenerem
+angeseheneren
+angesehenerer
+angeseheneres
+angesehenes
+angesehenste
+angesehenstem
+angesehensten
+angesehenster
+angesehenstes
+angeseilt
+angeseilte
+angeseiltem
+angeseilten
+angeseilter
+angeseiltes
+angesengt
+angesengte
+angesengtem
+angesengten
+angesengter
+angesengtes
+angesenkt
+angesenkte
+angesenktem
+angesenkten
+angesenkter
+angesenktes
+angesetzt
+angesetzte
+angesetztem
+angesetzten
+angesetzter
+angesetztes
+angesichts
+angesiedelt
+angesiedelte
+angesiedeltem
+angesiedelten
+angesiedelter
+angesiedeltes
+angespannt
+angespannte
+angespanntem
+angespannten
+angespannter
+angespanntere
+angespannterem
+angespannteren
+angespannterer
+angespannteres
+angespanntes
+angespannteste
+angespanntestem
+angespanntesten
+angespanntester
+angespanntestes
+angespart
+angesparte
+angespartem
+angesparten
+angesparter
+angespartes
+angespielt
+angespielte
+angespieltem
+angespielten
+angespielter
+angespieltes
+angespitzt
+angespitzte
+angespitztem
+angespitzten
+angespitzter
+angespitztes
+angespornt
+angespornte
+angesporntem
+angespornten
+angespornter
+angesporntes
+angespritzt
+angespritzte
+angespritztem
+angespritzten
+angespritzter
+angespritztes
+angesprochen
+angesprochene
+angesprochenem
+angesprochenen
+angesprochener
+angesprochenes
+angesprungen
+angesprungene
+angesprungenem
+angesprungenen
+angesprungener
+angesprungenes
+angespuckt
+angespuckte
+angespucktem
+angespuckten
+angespuckter
+angespucktes
+angespült
+angespülte
+angespültem
+angespülten
+angespülter
+angespültes
+angestammt
+angestammte
+angestammtem
+angestammten
+angestammter
+angestammtes
+angestanden
+angestarrt
+angestarrte
+angestarrtem
+angestarrten
+angestarrter
+angestarrtes
+angestaut
+angestaute
+angestautem
+angestauten
+angestauter
+angestautes
+angesteckt
+angesteckte
+angestecktem
+angesteckten
+angesteckter
+angestecktes
+angestellt
+angestellte
+angestelltem
+angestellten
+angestellter
+angestelltes
+angesteuert
+angesteuerte
+angesteuertem
+angesteuerten
+angesteuerter
+angesteuertes
+angestiegen
+angestiegene
+angestiegenem
+angestiegenen
+angestiegener
+angestiegenes
+angestiftet
+angestiftete
+angestiftetem
+angestifteten
+angestifteter
+angestiftetes
+angestimmt
+angestimmte
+angestimmtem
+angestimmten
+angestimmter
+angestimmtes
+angestoßen
+angestoßene
+angestoßenem
+angestoßenen
+angestoßener
+angestoßenes
+angestrahlt
+angestrahlte
+angestrahltem
+angestrahlten
+angestrahlter
+angestrahltes
+angestrebt
+angestrebte
+angestrebtem
+angestrebten
+angestrebter
+angestrebtes
+angestrengt
+angestrengte
+angestrengtem
+angestrengten
+angestrengter
+angestrengtes
+angestrichen
+angestrichene
+angestrichenem
+angestrichenen
+angestrichener
+angestrichenes
+angestürmt
+angestürmte
+angestürmtem
+angestürmten
+angestürmter
+angestürmtes
+angesucht
+angesuchte
+angesuchtem
+angesuchten
+angesuchter
+angesuchtes
+angesäuselt
+angesäuselte
+angesäuseltem
+angesäuselten
+angesäuselter
+angesäuseltes
+angetan
+angetane
+angetanem
+angetanen
+angetaner
+angetanes
+angetastet
+angetastete
+angetastetem
+angetasteten
+angetasteter
+angetastetes
+angetragen
+angetragene
+angetragenem
+angetragenen
+angetragener
+angetragenes
+angetraut
+angetraute
+angetrautem
+angetrauten
+angetrauter
+angetrautes
+angetreten
+angetretene
+angetretenem
+angetretenen
+angetretener
+angetretenes
+angetrieben
+angetriebene
+angetriebenem
+angetriebenen
+angetriebener
+angetriebenes
+angetroffen
+angetroffene
+angetroffenem
+angetroffenen
+angetroffener
+angetroffenes
+angetrunken
+angetrunkene
+angetrunkenem
+angetrunkenen
+angetrunkener
+angetrunkenes
+angewachsen
+angewachsene
+angewachsenem
+angewachsenen
+angewachsener
+angewachsenes
+angewandt
+angewandte
+angewandtem
+angewandten
+angewandter
+angewandtes
+angewendet
+angewendete
+angewendetem
+angewendeten
+angewendeter
+angewendetes
+angewidert
+angewiderte
+angewidertem
+angewiderten
+angewiderter
+angewidertes
+angewiesen
+angewiesene
+angewiesenem
+angewiesenen
+angewiesener
+angewiesenes
+angeworben
+angeworbene
+angeworbenem
+angeworbenen
+angeworbener
+angeworbenes
+angeworfen
+angeworfene
+angeworfenem
+angeworfenen
+angeworfener
+angeworfenes
+angewurzelt
+angewurzelte
+angewurzeltem
+angewurzelten
+angewurzelter
+angewurzeltes
+angewählt
+angewählte
+angewähltem
+angewählten
+angewählter
+angewähltes
+angewärmt
+angewärmte
+angewärmtem
+angewärmten
+angewärmter
+angewärmtes
+angewöhnt
+angewöhnte
+angewöhntem
+angewöhnten
+angewöhnter
+angewöhntes
+angezahlt
+angezahlte
+angezahltem
+angezahlten
+angezahlter
+angezahltes
+angezapft
+angezapfte
+angezapftem
+angezapften
+angezapfter
+angezapftes
+angezeichnet
+angezeichnete
+angezeichnetem
+angezeichneten
+angezeichneter
+angezeichnetes
+angezeigt
+angezeigte
+angezeigtem
+angezeigten
+angezeigter
+angezeigtes
+angezettelt
+angezettelte
+angezetteltem
+angezettelten
+angezettelter
+angezetteltes
+angezischt
+angezischte
+angezischtem
+angezischten
+angezischter
+angezischtes
+angezogen
+angezogene
+angezogenem
+angezogenen
+angezogener
+angezogenes
+angezweifelt
+angezweifelte
+angezweifeltem
+angezweifelten
+angezweifelter
+angezweifeltes
+angezündet
+angezündete
+angezündetem
+angezündeten
+angezündeter
+angezündetes
+angibst
+angibt
+anging
+angingen
+angingst
+angingt
+angle
+angleiche
+angleichen
+angleichend
+angleichende
+angleichendem
+angleichenden
+angleichender
+angleichendes
+angleichst
+angleicht
+angliedere
+angliedern
+angliedernd
+angliedernde
+angliederndem
+angliedernden
+angliedernder
+angliederndes
+angliederst
+angliedert
+angliederte
+angliederten
+angliedertest
+angliedertet
+angliedre
+anglikanisch
+anglikanische
+anglikanischem
+anglikanischen
+anglikanischer
+anglikanisches
+anglotze
+anglotzen
+anglotzend
+anglotzende
+anglotzendem
+anglotzenden
+anglotzender
+anglotzendes
+anglotzest
+anglotzt
+anglotzte
+anglotzten
+anglotztest
+anglotztet
+angolanisch
+angolanische
+angolanischem
+angolanischen
+angolanischer
+angolanisches
+angreifbar
+angreifbare
+angreifbarem
+angreifbaren
+angreifbarer
+angreifbares
+angreife
+angreifen
+angreifend
+angreifende
+angreifendem
+angreifenden
+angreifender
+angreifendes
+angreifst
+angreift
+angrenze
+angrenzen
+angrenzend
+angrenzende
+angrenzendem
+angrenzenden
+angrenzender
+angrenzendes
+angrenzt
+angrinse
+angrinsen
+angrinsend
+angrinsende
+angrinsendem
+angrinsenden
+angrinsender
+angrinsendes
+angrinsest
+angrinst
+angrinste
+angrinsten
+angrinstest
+angrinstet
+angsterregend
+angsterregende
+angsterregendem
+angsterregenden
+angsterregender
+angsterregendere
+angsterregenderem
+angsterregenderen
+angsterregenderer
+angsterregenderes
+angsterregendes
+angsterregendste
+angsterregendstem
+angsterregendsten
+angsterregendster
+angsterregendstes
+angstvoll
+angstvolle
+angstvollem
+angstvollen
+angstvoller
+angstvollere
+angstvollerem
+angstvolleren
+angstvollerer
+angstvolleres
+angstvolles
+angstvollste
+angstvollstem
+angstvollsten
+angstvollster
+angstvollstes
+angucke
+angucken
+anguckend
+anguckende
+anguckendem
+anguckenden
+anguckender
+anguckendes
+anguckst
+anguckt
+anguckte
+anguckten
+angucktest
+angucktet
+angängig
+angängige
+angängigem
+angängigen
+angängiger
+angängiges
+anhabe
+anhaben
+anhabend
+anhabende
+anhabendem
+anhabenden
+anhabender
+anhabendes
+anhabt
+anhafte
+anhaften
+anhaftend
+anhaftende
+anhaftendem
+anhaftenden
+anhaftender
+anhaftendes
+anhaftest
+anhaftet
+anhaftete
+anhafteten
+anhaftetest
+anhaftetet
+anhalte
+anhalten
+anhaltend
+anhaltende
+anhaltendem
+anhaltenden
+anhaltender
+anhaltendes
+anhaltest
+anhaltet
+anhand
+anhauche
+anhauchen
+anhauchend
+anhauchende
+anhauchendem
+anhauchenden
+anhauchender
+anhauchendes
+anhauchst
+anhaucht
+anhauchte
+anhauchten
+anhauchtest
+anhauchtet
+anhebe
+anheben
+anhebend
+anhebende
+anhebendem
+anhebenden
+anhebender
+anhebendes
+anhebst
+anhebt
+anhefte
+anheften
+anheftend
+anheftende
+anheftendem
+anheftenden
+anheftender
+anheftendes
+anheftest
+anheftet
+anheftete
+anhefteten
+anheftetest
+anheftetet
+anheim
+anheischig
+anheischige
+anheischigem
+anheischigen
+anheischiger
+anheischiges
+anheize
+anheizen
+anheizend
+anheizende
+anheizendem
+anheizenden
+anheizender
+anheizendes
+anheizest
+anheizt
+anheizte
+anheizten
+anheiztest
+anheiztet
+anhielt
+anhielten
+anhieltest
+anhieltet
+anhieltst
+anhimmele
+anhimmeln
+anhimmelnd
+anhimmelnde
+anhimmelndem
+anhimmelnden
+anhimmelnder
+anhimmelndes
+anhimmelst
+anhimmelt
+anhimmelte
+anhimmelten
+anhimmeltest
+anhimmeltet
+anhimmle
+anhob
+anhoben
+anhobst
+anhobt
+anhält
+anhältst
+anhänge
+anhängen
+anhängend
+anhängende
+anhängendem
+anhängenden
+anhängender
+anhängendes
+anhängig
+anhängige
+anhängigem
+anhängigen
+anhängiger
+anhängiges
+anhänglich
+anhängliche
+anhänglichem
+anhänglichen
+anhänglicher
+anhängliches
+anhängst
+anhängt
+anhäufe
+anhäufen
+anhäufend
+anhäufende
+anhäufendem
+anhäufenden
+anhäufender
+anhäufendes
+anhäufst
+anhäuft
+anhäufte
+anhäuften
+anhäuftest
+anhäuftet
+anhöre
+anhören
+anhörend
+anhörende
+anhörendem
+anhörenden
+anhörender
+anhörendes
+anhörst
+anhört
+anhörte
+anhörten
+anhörtest
+anhörtet
+animalisch
+animalische
+animalischem
+animalischen
+animalischer
+animalisches
+animiere
+animieren
+animierend
+animierende
+animierendem
+animierenden
+animierender
+animierendes
+animierst
+animiert
+animierte
+animiertem
+animierten
+animierter
+animiertes
+animiertest
+animiertet
+anisotrop
+anisotrope
+anisotropem
+anisotropen
+anisotroper
+anisotropes
+ankam
+ankamen
+ankamst
+ankamt
+ankaufe
+ankaufen
+ankaufend
+ankaufende
+ankaufendem
+ankaufenden
+ankaufender
+ankaufendes
+ankaufst
+ankauft
+ankaufte
+ankauften
+ankauftest
+ankauftet
+ankere
+ankern
+ankernd
+ankernde
+ankerndem
+ankernden
+ankernder
+ankerndes
+ankerst
+ankert
+ankerte
+ankerten
+ankertest
+ankertet
+ankette
+anketten
+ankettend
+ankettende
+ankettendem
+ankettenden
+ankettender
+ankettendes
+ankettest
+ankettet
+ankettete
+anketteten
+ankettetest
+ankettetet
+anklage
+anklagen
+anklagend
+anklagende
+anklagendem
+anklagenden
+anklagender
+anklagendes
+anklagst
+anklagt
+anklagte
+anklagten
+anklagtest
+anklagtet
+anklammere
+anklammern
+anklammernd
+anklammernde
+anklammerndem
+anklammernden
+anklammernder
+anklammerndes
+anklammerst
+anklammert
+anklammerte
+anklammerten
+anklammertest
+anklammertet
+anklammre
+anklebe
+ankleben
+anklebend
+anklebende
+anklebendem
+anklebenden
+anklebender
+anklebendes
+anklebst
+anklebt
+anklebte
+anklebten
+anklebtest
+anklebtet
+ankleide
+ankleiden
+ankleidend
+ankleidende
+ankleidendem
+ankleidenden
+ankleidender
+ankleidendes
+ankleidest
+ankleidet
+ankleidete
+ankleideten
+ankleidetest
+ankleidetet
+anklemme
+anklemmen
+anklemmst
+anklemmt
+anklemmte
+anklemmten
+anklemmtest
+anklemmtet
+anklinge
+anklingele
+anklingeln
+anklingelnd
+anklingelnde
+anklingelndem
+anklingelnden
+anklingelnder
+anklingelndes
+anklingelst
+anklingelt
+anklingelte
+anklingelten
+anklingeltest
+anklingeltet
+anklingen
+anklingend
+anklingende
+anklingendem
+anklingenden
+anklingender
+anklingendes
+anklingle
+anklingst
+anklingt
+anklopfe
+anklopfen
+anklopfend
+anklopfende
+anklopfendem
+anklopfenden
+anklopfender
+anklopfendes
+anklopfst
+anklopft
+anklägerisch
+anklägerische
+anklägerischem
+anklägerischen
+anklägerischer
+anklägerisches
+anknackbar
+anknackbare
+anknackbarem
+anknackbaren
+anknackbarer
+anknackbares
+anknipse
+anknipsen
+anknipsend
+anknipsende
+anknipsendem
+anknipsenden
+anknipsender
+anknipsendes
+anknipsest
+anknipst
+anknipste
+anknipsten
+anknipstest
+anknipstet
+anknüpfe
+anknüpfen
+anknüpfend
+anknüpfende
+anknüpfendem
+anknüpfenden
+anknüpfender
+anknüpfendes
+anknüpfst
+anknüpft
+anknüpfte
+anknüpften
+anknüpftest
+anknüpftet
+ankomme
+ankommen
+ankommend
+ankommende
+ankommendem
+ankommenden
+ankommender
+ankommendes
+ankommst
+ankommt
+ankoppele
+ankoppeln
+ankoppelnd
+ankoppelnde
+ankoppelndem
+ankoppelnden
+ankoppelnder
+ankoppelndes
+ankoppelst
+ankoppelt
+ankoppelte
+ankoppelten
+ankoppeltest
+ankoppeltet
+ankopple
+ankotze
+ankotzen
+ankotzend
+ankotzende
+ankotzendem
+ankotzenden
+ankotzender
+ankotzendes
+ankotzest
+ankotzt
+ankotzte
+ankotzten
+ankotztest
+ankotztet
+ankre
+ankreide
+ankreiden
+ankreidend
+ankreidende
+ankreidendem
+ankreidenden
+ankreidender
+ankreidendes
+ankreidest
+ankreidet
+ankreidete
+ankreideten
+ankreidetest
+ankreidetet
+ankreuze
+ankreuzen
+ankreuzend
+ankreuzende
+ankreuzendem
+ankreuzenden
+ankreuzender
+ankreuzendes
+ankreuzest
+ankreuzt
+ankreuzte
+ankreuzten
+ankreuztest
+ankreuztet
+ankurbele
+ankurbeln
+ankurbelnd
+ankurbelnde
+ankurbelndem
+ankurbelnden
+ankurbelnder
+ankurbelndes
+ankurbelst
+ankurbelt
+ankurbelte
+ankurbelten
+ankurbeltest
+ankurbeltet
+ankurble
+ankäme
+ankämen
+ankämpfe
+ankämpfen
+ankämpfend
+ankämpfende
+ankämpfendem
+ankämpfenden
+ankämpfender
+ankämpfendes
+ankämpfst
+ankämpft
+ankämpfte
+ankämpften
+ankämpftest
+ankämpftet
+ankämst
+ankämt
+ankündige
+ankündigen
+ankündigend
+ankündigende
+ankündigendem
+ankündigenden
+ankündigender
+ankündigendes
+ankündigst
+ankündigt
+ankündigte
+ankündigten
+ankündigtest
+ankündigtet
+anlache
+anlachen
+anlachend
+anlachende
+anlachendem
+anlachenden
+anlachender
+anlachendes
+anlachst
+anlacht
+anlachte
+anlachten
+anlachtest
+anlachtet
+anlange
+anlangen
+anlangend
+anlangende
+anlangendem
+anlangenden
+anlangender
+anlangendes
+anlangst
+anlangt
+anlangte
+anlangten
+anlangtest
+anlangtet
+anlasse
+anlassen
+anlassend
+anlassende
+anlassendem
+anlassenden
+anlassender
+anlassendes
+anlasst
+anlaufe
+anlaufen
+anlaufend
+anlaufende
+anlaufendem
+anlaufenden
+anlaufender
+anlaufendes
+anlaufgeschützt
+anlaufgeschützte
+anlaufgeschütztem
+anlaufgeschützten
+anlaufgeschützter
+anlaufgeschütztes
+anlauft
+anlege
+anlegen
+anlegend
+anlegende
+anlegendem
+anlegenden
+anlegender
+anlegendes
+anlegst
+anlegt
+anlegte
+anlegten
+anlegtest
+anlegtet
+anlehne
+anlehnen
+anlehnend
+anlehnende
+anlehnendem
+anlehnenden
+anlehnender
+anlehnendes
+anlehnst
+anlehnt
+anlehnte
+anlehnten
+anlehntest
+anlehntet
+anleime
+anleimen
+anleimend
+anleimende
+anleimendem
+anleimenden
+anleimender
+anleimendes
+anleimst
+anleimt
+anleimte
+anleimten
+anleimtest
+anleimtet
+anleite
+anleiten
+anleitend
+anleitende
+anleitendem
+anleitenden
+anleitender
+anleitendes
+anleitest
+anleitet
+anleitete
+anleiteten
+anleitetest
+anleitetet
+anlerne
+anlernen
+anlernend
+anlernende
+anlernendem
+anlernenden
+anlernender
+anlernendes
+anlernst
+anlernt
+anlernte
+anlernten
+anlerntest
+anlerntet
+anlief
+anliefen
+anliefere
+anliefern
+anliefernd
+anliefernde
+anlieferndem
+anliefernden
+anliefernder
+anlieferndes
+anlieferst
+anliefert
+anlieferte
+anlieferten
+anliefertest
+anliefertet
+anliefest
+anliefre
+anliefst
+anlieft
+anliege
+anliegen
+anliegend
+anliegende
+anliegendem
+anliegenden
+anliegender
+anliegendes
+anliegst
+anliegt
+anlocke
+anlocken
+anlockend
+anlockende
+anlockendem
+anlockenden
+anlockender
+anlockendes
+anlockst
+anlockt
+anlockte
+anlockten
+anlocktest
+anlocktet
+anlächele
+anlächeln
+anlächelnd
+anlächelnde
+anlächelndem
+anlächelnden
+anlächelnder
+anlächelndes
+anlächelst
+anlächelt
+anlächelte
+anlächelten
+anlächeltest
+anlächeltet
+anlächle
+anlässlich
+anlässliche
+anlässlichem
+anlässlichen
+anlässlicher
+anlässliches
+anläufst
+anläuft
+anlöte
+anlöten
+anlötend
+anlötende
+anlötendem
+anlötenden
+anlötender
+anlötendes
+anlötest
+anlötet
+anlötete
+anlöteten
+anlötetest
+anlötetet
+anlüge
+anlügen
+anlügend
+anlügende
+anlügendem
+anlügenden
+anlügender
+anlügendes
+anlügst
+anlügt
+anmache
+anmachen
+anmachend
+anmachende
+anmachendem
+anmachenden
+anmachender
+anmachendes
+anmachst
+anmacht
+anmachte
+anmachten
+anmachtest
+anmachtet
+anmale
+anmalen
+anmalend
+anmalende
+anmalendem
+anmalenden
+anmalender
+anmalendes
+anmalst
+anmalt
+anmalte
+anmalten
+anmaltest
+anmaltet
+anmarschiere
+anmarschieren
+anmarschierend
+anmarschierende
+anmarschierendem
+anmarschierenden
+anmarschierender
+anmarschierendes
+anmarschierst
+anmarschiert
+anmarschierte
+anmarschiertem
+anmarschierten
+anmarschierter
+anmarschiertes
+anmarschiertest
+anmarschiertet
+anmaße
+anmaßen
+anmaßend
+anmaßende
+anmaßendem
+anmaßenden
+anmaßender
+anmaßendes
+anmaßest
+anmaßt
+anmaßte
+anmaßten
+anmaßtest
+anmaßtet
+anmelde
+anmelden
+anmeldend
+anmeldende
+anmeldendem
+anmeldenden
+anmeldender
+anmeldendes
+anmeldepflichtig
+anmeldepflichtige
+anmeldepflichtigem
+anmeldepflichtigen
+anmeldepflichtiger
+anmeldepflichtiges
+anmeldest
+anmeldet
+anmeldete
+anmeldeten
+anmeldetest
+anmeldetet
+anmerke
+anmerken
+anmerkend
+anmerkende
+anmerkendem
+anmerkenden
+anmerkender
+anmerkendes
+anmerkst
+anmerkt
+anmerkte
+anmerkten
+anmerktest
+anmerktet
+anmesse
+anmessen
+anmessend
+anmessende
+anmessendem
+anmessenden
+anmessender
+anmessendes
+anmessest
+anmesst
+anmesste
+anmessten
+anmesstest
+anmesstet
+anmute
+anmuten
+anmutend
+anmutende
+anmutendem
+anmutenden
+anmutender
+anmutendes
+anmutest
+anmutet
+anmutete
+anmuteten
+anmutetest
+anmutetet
+anmutig
+anmutige
+anmutigem
+anmutigen
+anmutiger
+anmutigere
+anmutigerem
+anmutigeren
+anmutigerer
+anmutigeres
+anmutiges
+anmutigste
+anmutigstem
+anmutigsten
+anmutigster
+anmutigstes
+annagele
+annageln
+annagelnd
+annagelnde
+annagelndem
+annagelnden
+annagelnder
+annagelndes
+annagelst
+annagelt
+annagelte
+annagelten
+annageltest
+annageltet
+annagle
+annehmbar
+annehmbare
+annehmbarem
+annehmbaren
+annehmbarer
+annehmbares
+annehme
+annehmen
+annehmend
+annehmende
+annehmendem
+annehmenden
+annehmender
+annehmendes
+annehmt
+annektiere
+annektieren
+annektierend
+annektierende
+annektierendem
+annektierenden
+annektierender
+annektierendes
+annektierst
+annektiert
+annektierte
+annektiertem
+annektierten
+annektierter
+annektiertes
+annektiertest
+annektiertet
+annimmst
+annimmt
+anno
+annonciere
+annoncieren
+annoncierend
+annoncierende
+annoncierendem
+annoncierenden
+annoncierender
+annoncierendes
+annoncierst
+annonciert
+annoncierte
+annonciertem
+annoncierten
+annoncierter
+annonciertes
+annonciertest
+annonciertet
+annulliere
+annullieren
+annullierend
+annullierende
+annullierendem
+annullierenden
+annullierender
+annullierendes
+annullierst
+annulliert
+annullierte
+annulliertem
+annullierten
+annullierter
+annulliertes
+annulliertest
+annulliertet
+annähe
+annähen
+annähend
+annähende
+annähendem
+annähenden
+annähender
+annähendes
+annähere
+annähern
+annähernd
+annähernde
+annäherndem
+annähernden
+annähernder
+annäherndes
+annäherst
+annähert
+annäherte
+annäherten
+annähertest
+annähertet
+annäherungsweise
+annähme
+annähmen
+annähmst
+annähmt
+annähre
+annähst
+annäht
+annähte
+annähten
+annähtest
+annähtet
+anomal
+anomale
+anomalem
+anomalen
+anomaler
+anomalere
+anomalerem
+anomaleren
+anomalerer
+anomaleres
+anomales
+anomalste
+anomalstem
+anomalsten
+anomalster
+anomalstes
+anonym
+anonyme
+anonymem
+anonymen
+anonymer
+anonymes
+anordne
+anordnen
+anordnend
+anordnende
+anordnendem
+anordnenden
+anordnender
+anordnendes
+anordnest
+anordnet
+anordnete
+anordneten
+anordnetest
+anordnetet
+anorganisch
+anorganische
+anorganischem
+anorganischen
+anorganischer
+anorganisches
+anormal
+anormale
+anormalem
+anormalen
+anormaler
+anormales
+anpacke
+anpacken
+anpackend
+anpackende
+anpackendem
+anpackenden
+anpackender
+anpackendes
+anpackst
+anpackt
+anpackte
+anpackten
+anpacktest
+anpacktet
+anpassbar
+anpassbare
+anpassbarem
+anpassbaren
+anpassbarer
+anpassbares
+anpasse
+anpassen
+anpassend
+anpassende
+anpassendem
+anpassenden
+anpassender
+anpassendes
+anpassest
+anpasst
+anpasste
+anpassten
+anpasstest
+anpasstet
+anpeile
+anpeilen
+anpeilend
+anpeilende
+anpeilendem
+anpeilenden
+anpeilender
+anpeilendes
+anpeilst
+anpeilt
+anpeilte
+anpeilten
+anpeiltest
+anpeiltet
+anpflanze
+anpflanzen
+anpflanzend
+anpflanzende
+anpflanzendem
+anpflanzenden
+anpflanzender
+anpflanzendes
+anpflanzest
+anpflanzt
+anpflanzte
+anpflanzten
+anpflanztest
+anpflanztet
+anpralle
+anprallen
+anprallend
+anprallende
+anprallendem
+anprallenden
+anprallender
+anprallendes
+anprallst
+anprallt
+anprallte
+anprallten
+anpralltest
+anpralltet
+anprangere
+anprangern
+anprangernd
+anprangernde
+anprangerndem
+anprangernden
+anprangernder
+anprangerndes
+anprangerst
+anprangert
+anprangerte
+anprangerten
+anprangertest
+anprangertet
+anprangre
+anpreise
+anpreisen
+anpreisend
+anpreisende
+anpreisendem
+anpreisenden
+anpreisender
+anpreisendes
+anpreisest
+anpreist
+anpreiste
+anpreisten
+anpreistest
+anpreistet
+anpresse
+anpressen
+anpressend
+anpressende
+anpressendem
+anpressenden
+anpressender
+anpressendes
+anpressest
+anpresst
+anpresste
+anpressten
+anpresstest
+anpresstet
+anprobiere
+anprobieren
+anprobierend
+anprobierende
+anprobierendem
+anprobierenden
+anprobierender
+anprobierendes
+anprobierst
+anprobiert
+anprobierte
+anprobiertem
+anprobierten
+anprobierter
+anprobiertes
+anprobiertest
+anprobiertet
+anpumpe
+anpumpen
+anpumpend
+anpumpende
+anpumpendem
+anpumpenden
+anpumpender
+anpumpendes
+anpumpst
+anpumpt
+anpumpte
+anpumpten
+anpumptest
+anpumptet
+anpöbele
+anpöbeln
+anpöbelnd
+anpöbelnde
+anpöbelndem
+anpöbelnden
+anpöbelnder
+anpöbelndes
+anpöbelst
+anpöbelt
+anpöbelte
+anpöbelten
+anpöbeltest
+anpöbeltet
+anpöble
+anrate
+anraten
+anratend
+anratende
+anratendem
+anratenden
+anratender
+anratendes
+anratet
+anrechne
+anrechnen
+anrechnend
+anrechnende
+anrechnendem
+anrechnenden
+anrechnender
+anrechnendes
+anrechnest
+anrechnet
+anrechnete
+anrechneten
+anrechnetest
+anrechnetet
+anrede
+anreden
+anredend
+anredende
+anredendem
+anredenden
+anredender
+anredendes
+anredest
+anredet
+anredete
+anredeten
+anredetest
+anredetet
+anrege
+anregen
+anregend
+anregende
+anregendem
+anregenden
+anregender
+anregendes
+anregst
+anregt
+anregte
+anregten
+anregtest
+anregtet
+anreichere
+anreichern
+anreichernd
+anreichernde
+anreicherndem
+anreichernden
+anreichernder
+anreicherndes
+anreicherst
+anreichert
+anreicherte
+anreicherten
+anreichertest
+anreichertet
+anreichre
+anreihe
+anreihen
+anreihend
+anreihende
+anreihendem
+anreihenden
+anreihender
+anreihendes
+anreihst
+anreiht
+anreihte
+anreihten
+anreihtest
+anreihtet
+anreise
+anreisen
+anreisend
+anreisende
+anreisendem
+anreisenden
+anreisender
+anreisendes
+anreisest
+anreist
+anreiste
+anreisten
+anreistest
+anreistet
+anreize
+anreizen
+anreizend
+anreizende
+anreizendem
+anreizenden
+anreizender
+anreizendes
+anreizest
+anreizt
+anreizte
+anreizten
+anreiztest
+anreiztet
+anreiße
+anreißen
+anreißend
+anreißende
+anreißendem
+anreißenden
+anreißender
+anreißendes
+anreißest
+anreißt
+anreißte
+anreißten
+anreißtest
+anreißtet
+anrenne
+anrennen
+anrennend
+anrennende
+anrennendem
+anrennenden
+anrennender
+anrennendes
+anrennst
+anrennt
+anrichte
+anrichten
+anrichtend
+anrichtende
+anrichtendem
+anrichtenden
+anrichtender
+anrichtendes
+anrichtest
+anrichtet
+anrichtete
+anrichteten
+anrichtetest
+anrichtetet
+anrief
+anriefen
+anriefest
+anriefst
+anrieft
+anrolle
+anrollen
+anrollend
+anrollende
+anrollendem
+anrollenden
+anrollender
+anrollendes
+anrollst
+anrollt
+anrollte
+anrollten
+anrolltest
+anrolltet
+anrufe
+anrufen
+anrufend
+anrufende
+anrufendem
+anrufenden
+anrufender
+anrufendes
+anrufst
+anruft
+anrüchig
+anrüchige
+anrüchigem
+anrüchigen
+anrüchiger
+anrüchigere
+anrüchigerem
+anrüchigeren
+anrüchigerer
+anrüchigeres
+anrüchiges
+anrüchigste
+anrüchigstem
+anrüchigsten
+anrüchigster
+anrüchigstes
+anrücke
+anrücken
+anrückend
+anrückende
+anrückendem
+anrückenden
+anrückender
+anrückendes
+anrückst
+anrückt
+anrückte
+anrückten
+anrücktest
+anrücktet
+anrühre
+anrühren
+anrührend
+anrührende
+anrührendem
+anrührenden
+anrührender
+anrührendes
+anrührst
+anrührt
+anrührte
+anrührten
+anrührtest
+anrührtet
+ans
+ansage
+ansagen
+ansagend
+ansagende
+ansagendem
+ansagenden
+ansagender
+ansagendes
+ansagst
+ansagt
+ansagte
+ansagten
+ansagtest
+ansagtet
+ansah
+ansahen
+ansahst
+ansaht
+ansammele
+ansammeln
+ansammelnd
+ansammelnde
+ansammelndem
+ansammelnden
+ansammelnder
+ansammelndes
+ansammelst
+ansammelt
+ansammelte
+ansammelten
+ansammeltest
+ansammeltet
+ansammle
+ansatzweise
+ansatzweisem
+ansatzweisen
+ansatzweiser
+ansatzweises
+ansauge
+ansaugen
+ansaugend
+ansaugende
+ansaugendem
+ansaugenden
+ansaugender
+ansaugendes
+ansaugst
+ansaugt
+ansaugte
+ansaugten
+ansaugtest
+ansaugtet
+anschaffe
+anschaffen
+anschaffend
+anschaffende
+anschaffendem
+anschaffenden
+anschaffender
+anschaffendes
+anschaffst
+anschafft
+anschaffte
+anschafften
+anschafftest
+anschafftet
+anschalte
+anschalten
+anschaltend
+anschaltende
+anschaltendem
+anschaltenden
+anschaltender
+anschaltendes
+anschaltest
+anschaltet
+anschaltete
+anschalteten
+anschaltetest
+anschaltetet
+anschaue
+anschauen
+anschauend
+anschauende
+anschauendem
+anschauenden
+anschauender
+anschauendes
+anschaulich
+anschauliche
+anschaulichem
+anschaulichen
+anschaulicher
+anschaulichere
+anschaulicherem
+anschaulicheren
+anschaulicherer
+anschaulicheres
+anschauliches
+anschaulichste
+anschaulichstem
+anschaulichsten
+anschaulichster
+anschaulichstes
+anschaust
+anschaut
+anschaute
+anschauten
+anschautest
+anschautet
+anscheinend
+anscheinende
+anscheinendem
+anscheinenden
+anscheinender
+anscheinendes
+anschichte
+anschichten
+anschichtend
+anschichtende
+anschichtendem
+anschichtenden
+anschichtender
+anschichtendes
+anschichtest
+anschichtet
+anschichtete
+anschichteten
+anschichtetest
+anschichtetet
+anschicke
+anschicken
+anschickend
+anschickende
+anschickendem
+anschickenden
+anschickender
+anschickendes
+anschickst
+anschickt
+anschickte
+anschickten
+anschicktest
+anschicktet
+anschieße
+anschießen
+anschießend
+anschießende
+anschießendem
+anschießenden
+anschießender
+anschießendes
+anschießest
+anschießt
+anschlage
+anschlagen
+anschlagend
+anschlagende
+anschlagendem
+anschlagenden
+anschlagender
+anschlagendes
+anschlagt
+anschließbar
+anschließbare
+anschließbarem
+anschließbaren
+anschließbarer
+anschließbares
+anschließe
+anschließen
+anschließend
+anschließende
+anschließendem
+anschließenden
+anschließender
+anschließendes
+anschließest
+anschließt
+anschloss
+anschlossen
+anschlossest
+anschlosst
+anschlug
+anschlugen
+anschlugst
+anschlugt
+anschlägst
+anschlägt
+anschmiege
+anschmiegen
+anschmiegend
+anschmiegende
+anschmiegendem
+anschmiegenden
+anschmiegender
+anschmiegendes
+anschmiegst
+anschmiegt
+anschmiegte
+anschmiegten
+anschmiegtest
+anschmiegtet
+anschmiere
+anschmieren
+anschmierend
+anschmierende
+anschmierendem
+anschmierenden
+anschmierender
+anschmierendes
+anschmierst
+anschmiert
+anschmierte
+anschmierten
+anschmiertest
+anschmiertet
+anschnalle
+anschnallen
+anschnallend
+anschnallende
+anschnallendem
+anschnallenden
+anschnallender
+anschnallendes
+anschnallst
+anschnallt
+anschnallte
+anschnallten
+anschnalltest
+anschnalltet
+anschnalzen
+anschnauze
+anschnauzen
+anschnauzend
+anschnauzende
+anschnauzendem
+anschnauzenden
+anschnauzender
+anschnauzendes
+anschnauzest
+anschnauzt
+anschnauzte
+anschnauzten
+anschnauztest
+anschnauztet
+anschneide
+anschneiden
+anschneidend
+anschneidende
+anschneidendem
+anschneidenden
+anschneidender
+anschneidendes
+anschneidest
+anschneidet
+anschraube
+anschrauben
+anschraubend
+anschraubende
+anschraubendem
+anschraubenden
+anschraubender
+anschraubendes
+anschraubst
+anschraubt
+anschraubte
+anschraubten
+anschraubtest
+anschraubtet
+anschreibe
+anschreiben
+anschreibend
+anschreibende
+anschreibendem
+anschreibenden
+anschreibender
+anschreibendes
+anschreibst
+anschreibt
+anschreie
+anschreien
+anschreiend
+anschreiende
+anschreiendem
+anschreienden
+anschreiender
+anschreiendes
+anschreist
+anschreit
+anschuldige
+anschuldigen
+anschuldigend
+anschuldigende
+anschuldigendem
+anschuldigenden
+anschuldigender
+anschuldigendes
+anschuldigst
+anschuldigt
+anschuldigte
+anschuldigten
+anschuldigtest
+anschuldigtet
+anschweiße
+anschweißen
+anschweißend
+anschweißende
+anschweißendem
+anschweißenden
+anschweißender
+anschweißendes
+anschweißest
+anschweißt
+anschweißte
+anschweißten
+anschweißtest
+anschweißtet
+anschwelle
+anschwellen
+anschwellend
+anschwellende
+anschwellendem
+anschwellenden
+anschwellender
+anschwellendes
+anschwellst
+anschwellt
+anschwemme
+anschwemmen
+anschwemmend
+anschwemmende
+anschwemmendem
+anschwemmenden
+anschwemmender
+anschwemmendes
+anschwemmst
+anschwemmt
+anschwemmte
+anschwemmten
+anschwemmtest
+anschwemmtet
+anschwindele
+anschwindeln
+anschwindelnd
+anschwindelnde
+anschwindelndem
+anschwindelnden
+anschwindelnder
+anschwindelndes
+anschwindelst
+anschwindelt
+anschwindelte
+anschwindelten
+anschwindeltest
+anschwindeltet
+anschwindle
+anschwärze
+anschwärzen
+anschwärzend
+anschwärzende
+anschwärzendem
+anschwärzenden
+anschwärzender
+anschwärzendes
+anschwärzest
+anschwärzt
+anschwärzte
+anschwärzten
+anschwärztest
+anschwärztet
+ansehe
+ansehen
+ansehend
+ansehende
+ansehendem
+ansehenden
+ansehender
+ansehendes
+ansehnlich
+ansehnliche
+ansehnlichem
+ansehnlichen
+ansehnlicher
+ansehnlichere
+ansehnlicherem
+ansehnlicheren
+ansehnlicherer
+ansehnlicheres
+ansehnliches
+ansehnlichste
+ansehnlichstem
+ansehnlichsten
+ansehnlichster
+ansehnlichstes
+anseht
+anseile
+anseilen
+anseilend
+anseilende
+anseilendem
+anseilenden
+anseilender
+anseilendes
+anseilst
+anseilt
+anseilte
+anseilten
+anseiltest
+anseiltet
+ansenge
+ansengen
+ansengend
+ansengende
+ansengendem
+ansengenden
+ansengender
+ansengendes
+ansengst
+ansengt
+ansengte
+ansengten
+ansengtest
+ansengtet
+ansetze
+ansetzen
+ansetzend
+ansetzende
+ansetzendem
+ansetzenden
+ansetzender
+ansetzendes
+ansetzest
+ansetzt
+ansetzte
+ansetzten
+ansetztest
+ansetztet
+ansiedele
+ansiedeln
+ansiedelnd
+ansiedelnde
+ansiedelndem
+ansiedelnden
+ansiedelnder
+ansiedelndes
+ansiedelst
+ansiedelt
+ansiedelte
+ansiedelten
+ansiedeltest
+ansiedeltet
+ansiedle
+ansiehst
+ansieht
+ansonsten
+anspanne
+anspannen
+anspannend
+anspannende
+anspannendem
+anspannenden
+anspannender
+anspannendes
+anspannst
+anspannt
+anspannte
+anspannten
+anspanntest
+anspanntet
+anspeie
+anspeien
+anspeiend
+anspeiende
+anspeiendem
+anspeienden
+anspeiender
+anspeiendes
+anspeist
+anspeit
+anspiele
+anspielen
+anspielend
+anspielende
+anspielendem
+anspielenden
+anspielender
+anspielendes
+anspielst
+anspielt
+anspielte
+anspielten
+anspieltest
+anspieltet
+anspinne
+anspinnen
+anspinnend
+anspinnende
+anspinnendem
+anspinnenden
+anspinnender
+anspinnendes
+anspinnst
+anspinnt
+anspitze
+anspitzen
+anspitzend
+anspitzende
+anspitzendem
+anspitzenden
+anspitzender
+anspitzendes
+anspitzest
+anspitzt
+anspitzte
+anspitzten
+anspitztest
+anspitztet
+ansporne
+anspornen
+anspornend
+anspornende
+anspornendem
+anspornenden
+anspornender
+anspornendes
+anspornst
+anspornt
+anspornte
+anspornten
+ansporntest
+ansporntet
+ansprach
+ansprachen
+ansprachest
+ansprachst
+anspracht
+ansprechbar
+ansprechbare
+ansprechbarem
+ansprechbaren
+ansprechbarer
+ansprechbares
+anspreche
+ansprechen
+ansprechend
+ansprechende
+ansprechendem
+ansprechenden
+ansprechender
+ansprechendere
+ansprechenderem
+ansprechenderen
+ansprechenderer
+ansprechenderes
+ansprechendes
+ansprechendste
+ansprechendstem
+ansprechendsten
+ansprechendster
+ansprechendstes
+ansprecht
+ansprichst
+anspricht
+anspringe
+anspringen
+anspringend
+anspringende
+anspringendem
+anspringenden
+anspringender
+anspringendes
+anspringst
+anspringt
+anspritze
+anspritzen
+anspritzend
+anspritzende
+anspritzendem
+anspritzenden
+anspritzender
+anspritzendes
+anspritzest
+anspritzt
+anspritzte
+anspritzten
+anspritztest
+anspritztet
+anspruchsberechtigt
+anspruchsberechtigte
+anspruchsberechtigtem
+anspruchsberechtigten
+anspruchsberechtigter
+anspruchsberechtigtes
+anspruchslos
+anspruchslose
+anspruchslosem
+anspruchslosen
+anspruchsloser
+anspruchslosere
+anspruchsloserem
+anspruchsloseren
+anspruchsloserer
+anspruchsloseres
+anspruchsloses
+anspruchsloseste
+anspruchslosestem
+anspruchslosesten
+anspruchslosester
+anspruchslosestes
+anspruchsvoll
+anspruchsvolle
+anspruchsvollem
+anspruchsvollen
+anspruchsvoller
+anspruchsvollere
+anspruchsvollerem
+anspruchsvolleren
+anspruchsvollerer
+anspruchsvolleres
+anspruchsvolles
+anspruchsvollste
+anspruchsvollstem
+anspruchsvollsten
+anspruchsvollster
+anspruchsvollstes
+anspucke
+anspucken
+anspuckend
+anspuckende
+anspuckendem
+anspuckenden
+anspuckender
+anspuckendes
+anspuckst
+anspuckt
+anspuckte
+anspuckten
+anspucktest
+anspucktet
+anspüle
+anspülen
+anspülend
+anspülende
+anspülendem
+anspülenden
+anspülender
+anspülendes
+anspülst
+anspült
+anspülte
+anspülten
+anspültest
+anspültet
+anstachele
+anstacheln
+anstachelnd
+anstachelnde
+anstachelndem
+anstachelnden
+anstachelnder
+anstachelndes
+anstachelst
+anstachelt
+anstachelte
+anstachelten
+anstacheltest
+anstacheltet
+anstachle
+anstandslos
+anstandslose
+anstandslosem
+anstandslosen
+anstandsloser
+anstandsloses
+anstarre
+anstarren
+anstarrend
+anstarrende
+anstarrendem
+anstarrenden
+anstarrender
+anstarrendes
+anstarrst
+anstarrt
+anstarrte
+anstarrten
+anstarrtest
+anstarrtet
+anstatt
+ansteckbar
+ansteckbare
+ansteckbarem
+ansteckbaren
+ansteckbarer
+ansteckbares
+anstecke
+anstecken
+ansteckend
+ansteckende
+ansteckendem
+ansteckenden
+ansteckender
+ansteckendes
+ansteckst
+ansteckt
+ansteckte
+ansteckten
+anstecktest
+anstecktet
+anstehe
+anstehen
+anstehend
+anstehende
+anstehendem
+anstehenden
+anstehender
+anstehendes
+anstehst
+ansteht
+ansteige
+ansteigen
+ansteigend
+ansteigende
+ansteigendem
+ansteigenden
+ansteigender
+ansteigendes
+ansteigst
+ansteigt
+anstelle
+anstellen
+anstellend
+anstellende
+anstellendem
+anstellenden
+anstellender
+anstellendes
+anstellig
+anstellige
+anstelligem
+anstelligen
+anstelliger
+anstelligere
+anstelligerem
+anstelligeren
+anstelligerer
+anstelligeres
+anstelliges
+anstelligste
+anstelligstem
+anstelligsten
+anstelligster
+anstelligstes
+anstellst
+anstellt
+anstellte
+anstellten
+anstelltest
+anstelltet
+ansteuerbar
+ansteuerbare
+ansteuerbarem
+ansteuerbaren
+ansteuerbarer
+ansteuerbares
+ansteuere
+ansteuern
+ansteuernd
+ansteuernde
+ansteuerndem
+ansteuernden
+ansteuernder
+ansteuerndes
+ansteuerst
+ansteuert
+ansteuerte
+ansteuerten
+ansteuertest
+ansteuertet
+ansteure
+anstifte
+anstiften
+anstiftend
+anstiftende
+anstiftendem
+anstiftenden
+anstiftender
+anstiftendes
+anstiftest
+anstiftet
+anstiftete
+anstifteten
+anstiftetest
+anstiftetet
+anstimme
+anstimmen
+anstimmend
+anstimmende
+anstimmendem
+anstimmenden
+anstimmender
+anstimmendes
+anstimmst
+anstimmt
+anstimmte
+anstimmten
+anstimmtest
+anstimmtet
+anstoße
+anstoßen
+anstoßend
+anstoßende
+anstoßendem
+anstoßenden
+anstoßender
+anstoßendes
+anstoßt
+anstrahle
+anstrahlen
+anstrahlend
+anstrahlende
+anstrahlendem
+anstrahlenden
+anstrahlender
+anstrahlendes
+anstrahlst
+anstrahlt
+anstrahlte
+anstrahlten
+anstrahltest
+anstrahltet
+anstrebe
+anstreben
+anstrebend
+anstrebende
+anstrebendem
+anstrebenden
+anstrebender
+anstrebendes
+anstrebst
+anstrebt
+anstrebte
+anstrebten
+anstrebtest
+anstrebtet
+anstreiche
+anstreichen
+anstreichend
+anstreichende
+anstreichendem
+anstreichenden
+anstreichender
+anstreichendes
+anstreichst
+anstreicht
+anstrenge
+anstrengen
+anstrengend
+anstrengende
+anstrengendem
+anstrengenden
+anstrengender
+anstrengendere
+anstrengenderem
+anstrengenderen
+anstrengenderer
+anstrengenderes
+anstrengendes
+anstrengendste
+anstrengendstem
+anstrengendsten
+anstrengendster
+anstrengendstes
+anstrengst
+anstrengt
+anstrengte
+anstrengten
+anstrengtest
+anstrengtet
+anständig
+anständige
+anständigem
+anständigen
+anständiger
+anständigere
+anständigerem
+anständigeren
+anständigerer
+anständigeres
+anständiges
+anständigste
+anständigstem
+anständigsten
+anständigster
+anständigstes
+anstößig
+anstößige
+anstößigem
+anstößigen
+anstößiger
+anstößigere
+anstößigerem
+anstößigeren
+anstößigerer
+anstößigeres
+anstößiges
+anstößigste
+anstößigstem
+anstößigsten
+anstößigster
+anstößigstes
+anstößt
+anstürme
+anstürmen
+anstürmend
+anstürmende
+anstürmendem
+anstürmenden
+anstürmender
+anstürmendes
+anstürmst
+anstürmt
+anstürmte
+anstürmten
+anstürmtest
+anstürmtet
+ansuche
+ansuchen
+ansuchend
+ansuchende
+ansuchendem
+ansuchenden
+ansuchender
+ansuchendes
+ansuchst
+ansucht
+ansuchte
+ansuchten
+ansuchtest
+ansuchtet
+ansässig
+ansässige
+ansässigem
+ansässigen
+ansässiger
+ansässiges
+antanze
+antanzen
+antanzest
+antanzt
+antanzte
+antanzten
+antanztest
+antanztet
+antarktisch
+antarktische
+antarktischem
+antarktischen
+antarktischer
+antarktisches
+antaste
+antasten
+antastend
+antastende
+antastendem
+antastenden
+antastender
+antastendes
+antastest
+antastet
+antastete
+antasteten
+antastetest
+antastetet
+antat
+antaten
+antatest
+antatet
+antatst
+anteilig
+anteilige
+anteiligem
+anteiligen
+anteiliger
+anteiliges
+anteilsmäßig
+anteilsmäßige
+anteilsmäßigem
+anteilsmäßigen
+anteilsmäßiger
+anteilsmäßiges
+anthropologisch
+anthropologische
+anthropologischem
+anthropologischen
+anthropologischer
+anthropologisches
+antiautoritär
+antiautoritäre
+antiautoritärem
+antiautoritären
+antiautoritärer
+antiautoritäres
+antibritisch
+antibritische
+antibritischem
+antibritischen
+antibritischer
+antibritisches
+antifaschistisch
+antifaschistische
+antifaschistischem
+antifaschistischen
+antifaschistischer
+antifaschistisches
+antik
+antike
+antikem
+antiken
+antiker
+antikes
+antikirchlich
+antikirchliche
+antikirchlichem
+antikirchlichen
+antikirchlicher
+antikirchliches
+antilandwirtschaftlich
+antilandwirtschaftliche
+antilandwirtschaftlichem
+antilandwirtschaftlichen
+antilandwirtschaftlicher
+antilandwirtschaftliches
+antimarxistisch
+antimarxistische
+antimarxistischem
+antimarxistischen
+antimarxistischer
+antimarxistisches
+antiquarisch
+antiquarische
+antiquarischem
+antiquarischen
+antiquarischer
+antiquarisches
+antiquiert
+antiquierte
+antiquiertem
+antiquierten
+antiquierter
+antiquiertes
+antirachitisch
+antirachitische
+antirachitischem
+antirachitischen
+antirachitischer
+antirachitisches
+antisemitisch
+antisemitische
+antisemitischem
+antisemitischen
+antisemitischer
+antisemitisches
+antisowjetisch
+antisowjetische
+antisowjetischem
+antisowjetischen
+antisowjetischer
+antisowjetisches
+antisozial
+antisoziale
+antisozialem
+antisozialen
+antisozialer
+antisoziales
+antisozialistisch
+antisozialistische
+antisozialistischem
+antisozialistischen
+antisozialistischer
+antisozialistisches
+antizipiere
+antizipieren
+antizipierend
+antizipierende
+antizipierendem
+antizipierenden
+antizipierender
+antizipierendes
+antizipierst
+antizipiert
+antizipierte
+antizipiertem
+antizipierten
+antizipierter
+antizipiertes
+antizipiertest
+antizipiertet
+antizyklisch
+antizyklische
+antizyklischem
+antizyklischen
+antizyklischer
+antizyklisches
+antraf
+antrafen
+antrafest
+antrafst
+antraft
+antrage
+antragen
+antragend
+antragende
+antragendem
+antragenden
+antragender
+antragendes
+antragsberechtigt
+antragsberechtigte
+antragsberechtigtem
+antragsberechtigten
+antragsberechtigter
+antragsberechtigtes
+antragst
+antragt
+antragte
+antragten
+antragtest
+antragtet
+antrat
+antraten
+antratest
+antratet
+antratst
+antreffe
+antreffen
+antreffend
+antreffende
+antreffendem
+antreffenden
+antreffender
+antreffendes
+antreffst
+antrefft
+antreibe
+antreiben
+antreibend
+antreibende
+antreibendem
+antreibenden
+antreibender
+antreibendes
+antreibst
+antreibt
+antrete
+antreten
+antretend
+antretende
+antretendem
+antretenden
+antretender
+antretendes
+antretet
+antriffst
+antrifft
+antritt
+antrittst
+antue
+antun
+antust
+antut
+antworte
+antworten
+antwortend
+antwortende
+antwortendem
+antwortenden
+antwortender
+antwortendes
+antwortest
+antwortet
+antwortete
+antworteten
+antwortetest
+antwortetet
+antörne
+antörnen
+antörnend
+antörnende
+antörnendem
+antörnenden
+antörnender
+antörnendes
+antörnst
+antörnt
+antörnte
+antörnten
+antörntest
+antörntet
+anvertraue
+anvertrauen
+anvertrauend
+anvertrauende
+anvertrauendem
+anvertrauenden
+anvertrauender
+anvertrauendes
+anvertraust
+anvertraut
+anvertraute
+anvertrautem
+anvertrauten
+anvertrauter
+anvertrautes
+anvertrautest
+anvertrautet
+anvisiere
+anvisieren
+anvisierend
+anvisierende
+anvisierendem
+anvisierenden
+anvisierender
+anvisierendes
+anvisierst
+anvisiert
+anvisierte
+anvisiertem
+anvisierten
+anvisierter
+anvisiertes
+anvisiertest
+anvisiertet
+anwachse
+anwachsen
+anwachsend
+anwachsende
+anwachsendem
+anwachsenden
+anwachsender
+anwachsendes
+anwachst
+anwarb
+anwarben
+anwarbst
+anwarbt
+anwarf
+anwarfen
+anwarfest
+anwarfst
+anwarft
+anweise
+anweisen
+anweisend
+anweisende
+anweisendem
+anweisenden
+anweisender
+anweisendes
+anweisest
+anweist
+anwendbar
+anwendbare
+anwendbarem
+anwendbaren
+anwendbarer
+anwendbares
+anwende
+anwenden
+anwendend
+anwendende
+anwendendem
+anwendenden
+anwendender
+anwendendes
+anwendest
+anwendet
+anwendete
+anwendeten
+anwendetest
+anwendetet
+anwendungsfreundlich
+anwendungsfreundliche
+anwendungsfreundlichem
+anwendungsfreundlichen
+anwendungsfreundlicher
+anwendungsfreundliches
+anwendungsgerecht
+anwendungsgerechte
+anwendungsgerechtem
+anwendungsgerechten
+anwendungsgerechter
+anwendungsgerechtes
+anwendungsorientiert
+anwendungsorientierte
+anwendungsorientiertem
+anwendungsorientierten
+anwendungsorientierter
+anwendungsorientiertes
+anwendungsspezifisch
+anwendungsspezifische
+anwendungsspezifischem
+anwendungsspezifischen
+anwendungsspezifischer
+anwendungsspezifisches
+anwesend
+anwesende
+anwesendem
+anwesenden
+anwesender
+anwesendes
+anwies
+anwiesen
+anwiesest
+anwiest
+anwinkele
+anwinkeln
+anwinkelnd
+anwinkelnde
+anwinkelndem
+anwinkelnden
+anwinkelnder
+anwinkelndes
+anwinkelst
+anwinkelt
+anwinkelte
+anwinkelten
+anwinkeltest
+anwinkeltet
+anwinkle
+anwuchs
+anwuchsen
+anwuchsest
+anwuchst
+anwächst
+anwählbar
+anwählbare
+anwählbarem
+anwählbaren
+anwählbarer
+anwählbares
+anwähle
+anwählen
+anwählst
+anwählt
+anwählte
+anwählten
+anwähltest
+anwähltet
+anzahle
+anzahlen
+anzahlend
+anzahlende
+anzahlendem
+anzahlenden
+anzahlender
+anzahlendes
+anzahlst
+anzahlt
+anzahlte
+anzahlten
+anzahltest
+anzahltet
+anzapfe
+anzapfen
+anzapfend
+anzapfende
+anzapfendem
+anzapfenden
+anzapfender
+anzapfendes
+anzapfst
+anzapft
+anzapfte
+anzapften
+anzapftest
+anzapftet
+anzeichne
+anzeichnen
+anzeichnend
+anzeichnende
+anzeichnendem
+anzeichnenden
+anzeichnender
+anzeichnendes
+anzeichnest
+anzeichnet
+anzeichnete
+anzeichneten
+anzeichnetest
+anzeichnetet
+anzeige
+anzeigen
+anzeigend
+anzeigende
+anzeigendem
+anzeigenden
+anzeigender
+anzeigendes
+anzeigentechnisch
+anzeigentechnische
+anzeigentechnischem
+anzeigentechnischen
+anzeigentechnischer
+anzeigentechnisches
+anzeigst
+anzeigt
+anzeigte
+anzeigten
+anzeigtest
+anzeigtet
+anzettele
+anzetteln
+anzettelnd
+anzettelnde
+anzettelndem
+anzettelnden
+anzettelnder
+anzettelndes
+anzettelst
+anzettelt
+anzettelte
+anzettelten
+anzetteltest
+anzetteltet
+anzettle
+anziehe
+anziehen
+anziehend
+anziehende
+anziehendem
+anziehenden
+anziehender
+anziehendes
+anziehst
+anzieht
+anzog
+anzogen
+anzogst
+anzogt
+anzubahnen
+anzubahnend
+anzubahnende
+anzubahnendem
+anzubahnenden
+anzubahnender
+anzubahnendes
+anzubieten
+anzubietend
+anzubietende
+anzubietendem
+anzubietenden
+anzubietender
+anzubietendes
+anzubringen
+anzubringend
+anzubringende
+anzubringendem
+anzubringenden
+anzubringender
+anzubringendes
+anzudeuten
+anzudeutend
+anzudeutende
+anzudeutendem
+anzudeutenden
+anzudeutender
+anzudeutendes
+anzudienen
+anzudienend
+anzudienende
+anzudienendem
+anzudienenden
+anzudienender
+anzudienendes
+anzuerkennen
+anzuerkennend
+anzuerkennende
+anzuerkennendem
+anzuerkennenden
+anzuerkennender
+anzuerkennendes
+anzufachen
+anzufachend
+anzufachende
+anzufachendem
+anzufachenden
+anzufachender
+anzufachendes
+anzufahren
+anzufallen
+anzufangen
+anzufechten
+anzufechtend
+anzufechtende
+anzufechtendem
+anzufechtenden
+anzufechtender
+anzufechtendes
+anzufertigen
+anzufertigend
+anzufertigende
+anzufertigendem
+anzufertigenden
+anzufertigender
+anzufertigendes
+anzuflehen
+anzuflehend
+anzuflehende
+anzuflehendem
+anzuflehenden
+anzuflehender
+anzuflehendes
+anzufragen
+anzufragend
+anzufragende
+anzufragendem
+anzufragenden
+anzufragender
+anzufragendes
+anzufügen
+anzufügend
+anzufügende
+anzufügendem
+anzufügenden
+anzufügender
+anzufügendes
+anzugeben
+anzugebend
+anzugebende
+anzugebendem
+anzugebenden
+anzugebender
+anzugebendes
+anzugehen
+anzugehend
+anzugehende
+anzugehendem
+anzugehenden
+anzugehender
+anzugehendes
+anzugehören
+anzugleichen
+anzugleichend
+anzugleichende
+anzugleichendem
+anzugleichenden
+anzugleichender
+anzugleichendes
+anzugliedern
+anzugliedernd
+anzugliedernde
+anzugliederndem
+anzugliedernden
+anzugliedernder
+anzugliederndes
+anzugreifen
+anzugreifend
+anzugreifende
+anzugreifendem
+anzugreifenden
+anzugreifender
+anzugreifendes
+anzuhalten
+anzuhaltend
+anzuhaltende
+anzuhaltendem
+anzuhaltenden
+anzuhaltender
+anzuhaltendes
+anzuheben
+anzuhebend
+anzuhebende
+anzuhebendem
+anzuhebenden
+anzuhebender
+anzuhebendes
+anzuhängen
+anzuhören
+anzuhörend
+anzuhörende
+anzuhörendem
+anzuhörenden
+anzuhörender
+anzuhörendes
+anzukaufen
+anzukaufend
+anzukaufende
+anzukaufendem
+anzukaufenden
+anzukaufender
+anzukaufendes
+anzuklagen
+anzuklagend
+anzuklagende
+anzuklagendem
+anzuklagenden
+anzuklagender
+anzuklagendes
+anzuknüpfen
+anzuknüpfend
+anzuknüpfende
+anzuknüpfendem
+anzuknüpfenden
+anzuknüpfender
+anzuknüpfendes
+anzukommen
+anzukreiden
+anzukreidend
+anzukreidende
+anzukreidendem
+anzukreidenden
+anzukreidender
+anzukreidendes
+anzukuppeln
+anzukuppelnd
+anzukuppelnde
+anzukuppelndem
+anzukuppelnden
+anzukuppelnder
+anzukuppelndes
+anzukurbeln
+anzukurbelnd
+anzukurbelnde
+anzukurbelndem
+anzukurbelnden
+anzukurbelnder
+anzukurbelndes
+anzukündigen
+anzukündigend
+anzukündigende
+anzukündigendem
+anzukündigenden
+anzukündigender
+anzukündigendes
+anzulaufen
+anzulegen
+anzulegend
+anzulegende
+anzulegendem
+anzulegenden
+anzulegender
+anzulegendes
+anzulehnen
+anzulehnend
+anzulehnende
+anzulehnendem
+anzulehnenden
+anzulehnender
+anzulehnendes
+anzuleiern
+anzuleiernd
+anzuleiernde
+anzuleierndem
+anzuleiernden
+anzuleiernder
+anzuleierndes
+anzulernen
+anzulocken
+anzulockend
+anzulockende
+anzulockendem
+anzulockenden
+anzulockender
+anzulockendes
+anzumelden
+anzumeldend
+anzumeldende
+anzumeldendem
+anzumeldenden
+anzumeldender
+anzumeldendes
+anzumerken
+anzumerkend
+anzumerkende
+anzumerkendem
+anzumerkenden
+anzumerkender
+anzumerkendes
+anzunehmen
+anzunehmend
+anzunehmende
+anzunehmendem
+anzunehmenden
+anzunehmender
+anzunehmendes
+anzunähern
+anzunähernd
+anzunähernde
+anzunäherndem
+anzunähernden
+anzunähernder
+anzunäherndes
+anzuordnen
+anzuordnend
+anzuordnende
+anzuordnendem
+anzuordnenden
+anzuordnender
+anzuordnendes
+anzupacken
+anzupackend
+anzupackende
+anzupackendem
+anzupackenden
+anzupackender
+anzupackendes
+anzupassen
+anzupassend
+anzupassende
+anzupassendem
+anzupassenden
+anzupassender
+anzupassendes
+anzupeilen
+anzupeilend
+anzupeilende
+anzupeilendem
+anzupeilenden
+anzupeilender
+anzupeilendes
+anzupreisen
+anzupreisend
+anzupreisende
+anzupreisendem
+anzupreisenden
+anzupreisender
+anzupreisendes
+anzuraten
+anzuratend
+anzuratende
+anzuratendem
+anzuratenden
+anzuratender
+anzuratendes
+anzuregen
+anzuregend
+anzuregende
+anzuregendem
+anzuregenden
+anzuregender
+anzuregendes
+anzurempeln
+anzurempelnd
+anzurempelnde
+anzurempelndem
+anzurempelnden
+anzurempelnder
+anzurempelndes
+anzurichten
+anzurichtend
+anzurichtende
+anzurichtendem
+anzurichtenden
+anzurichtender
+anzurichtendes
+anzurufen
+anzurufend
+anzurufende
+anzurufendem
+anzurufenden
+anzurufender
+anzurufendes
+anzusagen
+anzusagend
+anzusagende
+anzusagendem
+anzusagenden
+anzusagender
+anzusagendes
+anzusammeln
+anzusammelnd
+anzusammelnde
+anzusammelndem
+anzusammelnden
+anzusammelnder
+anzusammelndes
+anzuschaffen
+anzuschaffend
+anzuschaffende
+anzuschaffendem
+anzuschaffenden
+anzuschaffender
+anzuschaffendes
+anzuschauen
+anzuschauend
+anzuschauende
+anzuschauendem
+anzuschauenden
+anzuschauender
+anzuschauendes
+anzuschlagen
+anzuschlagend
+anzuschlagende
+anzuschlagendem
+anzuschlagenden
+anzuschlagender
+anzuschlagendes
+anzuschließen
+anzuschließend
+anzuschließende
+anzuschließendem
+anzuschließenden
+anzuschließender
+anzuschließendes
+anzuschreiben
+anzuschreibend
+anzuschreibende
+anzuschreibendem
+anzuschreibenden
+anzuschreibender
+anzuschreibendes
+anzusehen
+anzusehend
+anzusehende
+anzusehendem
+anzusehenden
+anzusehender
+anzusehendes
+anzusetzen
+anzusetzend
+anzusetzende
+anzusetzendem
+anzusetzenden
+anzusetzender
+anzusetzendes
+anzusiedeln
+anzuspannen
+anzuspannend
+anzuspannende
+anzuspannendem
+anzuspannenden
+anzuspannender
+anzuspannendes
+anzusprechen
+anzusprechend
+anzusprechende
+anzusprechendem
+anzusprechenden
+anzusprechender
+anzusprechendes
+anzustellen
+anzustellend
+anzustellende
+anzustellendem
+anzustellenden
+anzustellender
+anzustellendes
+anzusteuern
+anzusteuernd
+anzusteuernde
+anzusteuerndem
+anzusteuernden
+anzusteuernder
+anzusteuerndes
+anzustoßen
+anzustoßend
+anzustoßende
+anzustoßendem
+anzustoßenden
+anzustoßender
+anzustoßendes
+anzustreben
+anzustrebend
+anzustrebende
+anzustrebendem
+anzustrebenden
+anzustrebender
+anzustrebendes
+anzustrengen
+anzustrengend
+anzustrengende
+anzustrengendem
+anzustrengenden
+anzustrengender
+anzustrengendes
+anzutragen
+anzutragend
+anzutragende
+anzutragendem
+anzutragenden
+anzutragender
+anzutragendes
+anzutreffen
+anzutreffend
+anzutreffende
+anzutreffendem
+anzutreffenden
+anzutreffender
+anzutreffendes
+anzutreten
+anzutretend
+anzutretende
+anzutretendem
+anzutretenden
+anzutretender
+anzutretendes
+anzuvertrauen
+anzuvertrauend
+anzuvertrauende
+anzuvertrauendem
+anzuvertrauenden
+anzuvertrauender
+anzuvertrauendes
+anzuweisen
+anzuweisend
+anzuweisende
+anzuweisendem
+anzuweisenden
+anzuweisender
+anzuweisendes
+anzuwenden
+anzuwendend
+anzuwendende
+anzuwendendem
+anzuwendenden
+anzuwendender
+anzuwendendes
+anzuwerben
+anzuwerbend
+anzuwerbende
+anzuwerbendem
+anzuwerbenden
+anzuwerbender
+anzuwerbendes
+anzuwählen
+anzuwählend
+anzuwählende
+anzuwählendem
+anzuwählenden
+anzuwählender
+anzuwählendes
+anzuzapfen
+anzuzapfend
+anzuzapfende
+anzuzapfendem
+anzuzapfenden
+anzuzapfender
+anzuzapfendes
+anzuzeigen
+anzuzeigend
+anzuzeigende
+anzuzeigendem
+anzuzeigenden
+anzuzeigender
+anzuzeigendes
+anzuzetteln
+anzuzettelnd
+anzuzettelnde
+anzuzettelndem
+anzuzettelnden
+anzuzettelnder
+anzuzettelndes
+anzweifele
+anzweifeln
+anzweifelnd
+anzweifelnde
+anzweifelndem
+anzweifelnden
+anzweifelnder
+anzweifelndes
+anzweifelst
+anzweifelt
+anzweifelte
+anzweifelten
+anzweifeltest
+anzweifeltet
+anzweifle
+anzüglich
+anzügliche
+anzüglichem
+anzüglichen
+anzüglicher
+anzüglichere
+anzüglicherem
+anzüglicheren
+anzüglicherer
+anzüglicheres
+anzügliches
+anzüglichste
+anzüglichstem
+anzüglichsten
+anzüglichster
+anzüglichstes
+anzünde
+anzünden
+anzündend
+anzündende
+anzündendem
+anzündenden
+anzündender
+anzündendes
+anzündest
+anzündet
+anzündete
+anzündeten
+anzündetest
+anzündetet
+anämisch
+anämische
+anämischem
+anämischen
+anämischer
+anämisches
+apart
+aparte
+apartem
+aparten
+aparter
+apartere
+aparterem
+aparteren
+aparterer
+aparteres
+apartes
+aparteste
+apartestem
+apartesten
+apartester
+apartestes
+apathisch
+apathische
+apathischem
+apathischen
+apathischer
+apathisches
+apodiktisch
+apodiktische
+apodiktischem
+apodiktischen
+apodiktischer
+apodiktisches
+apokalyptisch
+apokalyptische
+apokalyptischem
+apokalyptischen
+apokalyptischer
+apokalyptisches
+apostolisch
+apostolische
+apostolischem
+apostolischen
+apostolischer
+apostolisches
+apostrophier
+apostrophiere
+apostrophieren
+apostrophierend
+apostrophierende
+apostrophierendem
+apostrophierenden
+apostrophierender
+apostrophierendes
+apostrophierst
+apostrophiert
+apostrophierte
+apostrophiertem
+apostrophierten
+apostrophierter
+apostrophiertes
+apostrophiertest
+apostrophiertet
+apparativ
+apparative
+apparativem
+apparativen
+apparativer
+apparatives
+appelliere
+appellieren
+appellierend
+appellierende
+appellierendem
+appellierenden
+appellierender
+appellierendes
+appellierst
+appelliert
+appellierte
+appellierten
+appelliertest
+appelliertet
+appetitlich
+appetitliche
+appetitlichem
+appetitlichen
+appetitlicher
+appetitlichere
+appetitlicherem
+appetitlicheren
+appetitlicherer
+appetitlicheres
+appetitliches
+appetitlichste
+appetitlichstem
+appetitlichsten
+appetitlichster
+appetitlichstes
+applaudiere
+applaudieren
+applaudierend
+applaudierende
+applaudierendem
+applaudierenden
+applaudierender
+applaudierendes
+applaudierst
+applaudiert
+applaudierte
+applaudierten
+applaudiertest
+applaudiertet
+applikativ
+applikative
+applikativem
+applikativen
+applikativer
+applikatives
+applizierbar
+applizierbare
+applizierbarem
+applizierbaren
+applizierbarer
+applizierbares
+appliziere
+applizieren
+applizierend
+applizierende
+applizierendem
+applizierenden
+applizierender
+applizierendes
+applizierst
+appliziert
+applizierte
+appliziertem
+applizierten
+applizierter
+appliziertes
+appliziertest
+appliziertet
+approximiere
+approximieren
+approximierend
+approximierende
+approximierendem
+approximierenden
+approximierender
+approximierendes
+approximierst
+approximiert
+approximierte
+approximiertem
+approximierten
+approximierter
+approximiertes
+approximiertest
+approximiertet
+apriorisch
+apriorische
+apriorischem
+apriorischen
+apriorischer
+apriorisches
+apropos
+arabisch
+arabische
+arabischem
+arabischen
+arabischer
+arabisches
+arbeite
+arbeiten
+arbeitend
+arbeitende
+arbeitendem
+arbeitenden
+arbeitender
+arbeitendes
+arbeitest
+arbeitet
+arbeitete
+arbeiteten
+arbeitetest
+arbeitetet
+arbeitnehmerfeindlich
+arbeitnehmerfeindliche
+arbeitnehmerfeindlichem
+arbeitnehmerfeindlichen
+arbeitnehmerfeindlicher
+arbeitnehmerfeindlichere
+arbeitnehmerfeindlicherem
+arbeitnehmerfeindlicheren
+arbeitnehmerfeindlicherer
+arbeitnehmerfeindlicheres
+arbeitnehmerfeindliches
+arbeitnehmerfeindlichste
+arbeitnehmerfeindlichstem
+arbeitnehmerfeindlichsten
+arbeitnehmerfeindlichster
+arbeitnehmerfeindlichstes
+arbeitsam
+arbeitsame
+arbeitsamem
+arbeitsamen
+arbeitsamer
+arbeitsamere
+arbeitsamerem
+arbeitsameren
+arbeitsamerer
+arbeitsameres
+arbeitsames
+arbeitsamste
+arbeitsamstem
+arbeitsamsten
+arbeitsamster
+arbeitsamstes
+arbeitsaufwendig
+arbeitsaufwendige
+arbeitsaufwendigem
+arbeitsaufwendigen
+arbeitsaufwendiger
+arbeitsaufwendiges
+arbeitsaufwändig
+arbeitsaufwändige
+arbeitsaufwändigem
+arbeitsaufwändigen
+arbeitsaufwändiger
+arbeitsaufwändiges
+arbeitsfrei
+arbeitsfreie
+arbeitsfreiem
+arbeitsfreien
+arbeitsfreier
+arbeitsfreies
+arbeitsfreudig
+arbeitsfreudige
+arbeitsfreudigem
+arbeitsfreudigen
+arbeitsfreudiger
+arbeitsfreudigere
+arbeitsfreudigerem
+arbeitsfreudigeren
+arbeitsfreudigerer
+arbeitsfreudigeres
+arbeitsfreudiges
+arbeitsfreudigste
+arbeitsfreudigstem
+arbeitsfreudigsten
+arbeitsfreudigster
+arbeitsfreudigstes
+arbeitsfähig
+arbeitsfähige
+arbeitsfähigem
+arbeitsfähigen
+arbeitsfähiger
+arbeitsfähiges
+arbeitsintensiv
+arbeitsintensive
+arbeitsintensivem
+arbeitsintensiven
+arbeitsintensiver
+arbeitsintensives
+arbeitslos
+arbeitslose
+arbeitslosem
+arbeitslosen
+arbeitsloser
+arbeitsloses
+arbeitspädagogisch
+arbeitspädagogische
+arbeitspädagogischem
+arbeitspädagogischen
+arbeitspädagogischer
+arbeitspädagogisches
+arbeitsrechtlich
+arbeitsrechtliche
+arbeitsrechtlichem
+arbeitsrechtlichen
+arbeitsrechtlicher
+arbeitsrechtliches
+arbeitsreich
+arbeitsreiche
+arbeitsreichem
+arbeitsreichen
+arbeitsreicher
+arbeitsreiches
+arbeitsscheu
+arbeitsscheue
+arbeitsscheuem
+arbeitsscheuen
+arbeitsscheuer
+arbeitsscheues
+arbeitssparend
+arbeitssparende
+arbeitssparendem
+arbeitssparenden
+arbeitssparender
+arbeitssparendes
+arbeitstechnisch
+arbeitstechnische
+arbeitstechnischem
+arbeitstechnischen
+arbeitstechnischer
+arbeitstechnisches
+arbeitsunfähig
+arbeitsunfähige
+arbeitsunfähigem
+arbeitsunfähigen
+arbeitsunfähiger
+arbeitsunfähiges
+arbeitswillig
+arbeitswillige
+arbeitswilligem
+arbeitswilligen
+arbeitswilliger
+arbeitswilliges
+archaisch
+archaische
+archaischem
+archaischen
+archaischer
+archaisches
+architektonisch
+architektonische
+architektonischem
+architektonischen
+architektonischer
+architektonisches
+archiviere
+archivieren
+archivierend
+archivierende
+archivierendem
+archivierenden
+archivierender
+archivierendes
+archivierst
+archiviert
+archivierte
+archiviertem
+archivierten
+archivierter
+archiviertes
+archiviertest
+archiviertet
+archäologisch
+archäologische
+archäologischem
+archäologischen
+archäologischer
+archäologisches
+areligiös
+areligiöse
+areligiösem
+areligiösen
+areligiöser
+areligiöses
+arg
+arge
+argem
+argen
+argentinisch
+argentinische
+argentinischem
+argentinischen
+argentinischer
+argentinisches
+arger
+arges
+arglistig
+arglistige
+arglistigem
+arglistigen
+arglistiger
+arglistiges
+arglos
+arglose
+arglosem
+arglosen
+argloser
+argloses
+argumentativ
+argumentative
+argumentativem
+argumentativen
+argumentativer
+argumentatives
+argumentiere
+argumentieren
+argumentierend
+argumentierende
+argumentierendem
+argumentierenden
+argumentierender
+argumentierendes
+argumentierst
+argumentiert
+argumentierte
+argumentierten
+argumentiertest
+argumentiertet
+argwöhne
+argwöhnen
+argwöhnend
+argwöhnende
+argwöhnendem
+argwöhnenden
+argwöhnender
+argwöhnendes
+argwöhnisch
+argwöhnische
+argwöhnischem
+argwöhnischen
+argwöhnischer
+argwöhnischere
+argwöhnischerem
+argwöhnischeren
+argwöhnischerer
+argwöhnischeres
+argwöhnisches
+argwöhnischste
+argwöhnischstem
+argwöhnischsten
+argwöhnischster
+argwöhnischstes
+argwöhnst
+argwöhnt
+argwöhnte
+argwöhnten
+argwöhntest
+argwöhntet
+aristokratisch
+aristokratische
+aristokratischem
+aristokratischen
+aristokratischer
+aristokratisches
+aristotelisch
+aristotelische
+aristotelischem
+aristotelischen
+aristotelischer
+aristotelisches
+arithmetisch
+arithmetische
+arithmetischem
+arithmetischen
+arithmetischer
+arithmetisches
+arktisch
+arktische
+arktischem
+arktischen
+arktischer
+arktisches
+arm
+arme
+armem
+armen
+armenisch
+armenische
+armenischem
+armenischen
+armenischer
+armenisches
+armer
+armes
+armiere
+armieren
+armierend
+armierende
+armierendem
+armierenden
+armierender
+armierendes
+armierst
+armiert
+armierte
+armiertem
+armierten
+armierter
+armiertes
+armiertest
+armiertet
+armlos
+armlose
+armlosem
+armlosen
+armloser
+armloses
+armselig
+armselige
+armseligem
+armseligen
+armseliger
+armseligere
+armseligerem
+armseligeren
+armseligerer
+armseligeres
+armseliges
+armseligste
+armseligstem
+armseligsten
+armseligster
+armseligstes
+aromatisch
+aromatische
+aromatischem
+aromatischen
+aromatischer
+aromatischere
+aromatischerem
+aromatischeren
+aromatischerer
+aromatischeres
+aromatisches
+aromatischste
+aromatischstem
+aromatischsten
+aromatischster
+aromatischstes
+arrangiere
+arrangieren
+arrangierend
+arrangierende
+arrangierendem
+arrangierenden
+arrangierender
+arrangierendes
+arrangierst
+arrangiert
+arrangierte
+arrangiertem
+arrangierten
+arrangierter
+arrangiertes
+arrangiertest
+arrangiertet
+arretiere
+arretieren
+arretierend
+arretierende
+arretierendem
+arretierenden
+arretierender
+arretierendes
+arretierst
+arretiert
+arretierte
+arretiertem
+arretierten
+arretierter
+arretiertes
+arretiertest
+arretiertet
+arriviere
+arrivieren
+arrivierend
+arrivierende
+arrivierendem
+arrivierenden
+arrivierender
+arrivierendes
+arrivierst
+arriviert
+arrivierte
+arriviertem
+arrivierten
+arrivierter
+arriviertes
+arriviertest
+arriviertet
+arrogant
+arrogante
+arrogantem
+arroganten
+arroganter
+arrogantere
+arroganterem
+arroganteren
+arroganterer
+arroganteres
+arrogantes
+arroganteste
+arrogantestem
+arrogantesten
+arrogantester
+arrogantestes
+arrondiert
+arrondierte
+arrondiertem
+arrondierten
+arrondierter
+arrondiertes
+arte
+arteigen
+arteigene
+arteigenem
+arteigenen
+arteigener
+arteigenes
+arten
+artest
+artet
+artete
+arteten
+artetest
+artetet
+artfremd
+artfremde
+artfremdem
+artfremden
+artfremder
+artfremdes
+artig
+artige
+artigem
+artigen
+artiger
+artigere
+artigerem
+artigeren
+artigerer
+artigeres
+artiges
+artigste
+artigstem
+artigsten
+artigster
+artigstes
+artikuliere
+artikulieren
+artikulierend
+artikulierende
+artikulierendem
+artikulierenden
+artikulierender
+artikulierendes
+artikulierst
+artikuliert
+artikulierte
+artikuliertem
+artikulierten
+artikulierter
+artikuliertes
+artikuliertest
+artikuliertet
+artistisch
+artistische
+artistischem
+artistischen
+artistischer
+artistischere
+artistischerem
+artistischeren
+artistischerer
+artistischeres
+artistisches
+artistischste
+artistischstem
+artistischsten
+artistischster
+artistischstes
+artverwandt
+artverwandte
+artverwandtem
+artverwandten
+artverwandter
+artverwandtes
+aschfahl
+aschfahle
+aschfahlem
+aschfahlen
+aschfahler
+aschfahles
+asiatisch
+asiatische
+asiatischem
+asiatischen
+asiatischer
+asiatisches
+asketisch
+asketische
+asketischem
+asketischen
+asketischer
+asketischere
+asketischerem
+asketischeren
+asketischerer
+asketischeres
+asketisches
+asketischste
+asketischstem
+asketischsten
+asketischster
+asketischstes
+assemblerartig
+assemblerartige
+assemblerartigem
+assemblerartigen
+assemblerartiger
+assemblerartiges
+assembliere
+assemblieren
+assemblierend
+assemblierende
+assemblierendem
+assemblierenden
+assemblierender
+assemblierendes
+assemblierst
+assembliert
+assemblierte
+assembliertem
+assemblierten
+assemblierter
+assembliertes
+assembliertest
+assembliertet
+assimiliere
+assimilieren
+assimilierend
+assimilierende
+assimilierendem
+assimilierenden
+assimilierender
+assimilierendes
+assimilierst
+assimiliert
+assimilierte
+assimiliertem
+assimilierten
+assimilierter
+assimiliertes
+assimiliertest
+assimiliertet
+assistiere
+assistieren
+assistierend
+assistierende
+assistierendem
+assistierenden
+assistierender
+assistierendes
+assistierst
+assistiert
+assistierte
+assistiertem
+assistierten
+assistierter
+assistiertes
+assistiertest
+assistiertet
+assoziativ
+assoziative
+assoziativem
+assoziativen
+assoziativer
+assoziatives
+assoziierbar
+assoziierbare
+assoziierbarem
+assoziierbaren
+assoziierbarer
+assoziierbares
+assoziiere
+assoziieren
+assoziierend
+assoziierende
+assoziierendem
+assoziierenden
+assoziierender
+assoziierendes
+assoziierst
+assoziiert
+assoziierte
+assoziiertem
+assoziierten
+assoziierter
+assoziiertes
+assoziiertest
+assoziiertet
+astronomisch
+astronomische
+astronomischem
+astronomischen
+astronomischer
+astronomisches
+asymmetrisch
+asymmetrische
+asymmetrischem
+asymmetrischen
+asymmetrischer
+asymmetrisches
+asynchron
+asynchrone
+asynchronem
+asynchronen
+asynchroner
+asynchrones
+atemberaubend
+atemberaubende
+atemberaubendem
+atemberaubenden
+atemberaubender
+atemberaubendes
+atemlos
+atemlose
+atemlosem
+atemlosen
+atemloser
+atemloses
+atlantisch
+atlantische
+atlantischem
+atlantischen
+atlantischer
+atlantisches
+atme
+atmen
+atmend
+atmende
+atmendem
+atmenden
+atmender
+atmendes
+atmest
+atmet
+atmete
+atmeten
+atmetest
+atmetet
+atmosphärisch
+atmosphärische
+atmosphärischem
+atmosphärischen
+atmosphärischer
+atmosphärisches
+atomar
+atomare
+atomarem
+atomaren
+atomarer
+atomares
+attackiere
+attackieren
+attackierend
+attackierende
+attackierendem
+attackierenden
+attackierender
+attackierendes
+attackierst
+attackiert
+attackierte
+attackiertem
+attackierten
+attackierter
+attackiertes
+attackiertest
+attackiertet
+attraktiv
+attraktive
+attraktivem
+attraktiven
+attraktiver
+attraktivere
+attraktiverem
+attraktiveren
+attraktiverer
+attraktiveres
+attraktives
+attraktivste
+attraktivstem
+attraktivsten
+attraktivster
+attraktivstes
+attribuierbar
+attribuierbare
+attribuierbarem
+attribuierbaren
+attribuierbarer
+attribuierbares
+attribuiere
+attribuieren
+attribuierend
+attribuierende
+attribuierendem
+attribuierenden
+attribuierender
+attribuierendes
+attribuierst
+attribuiert
+attribuierte
+attribuiertem
+attribuierten
+attribuierter
+attribuiertes
+attribuiertest
+attribuiertet
+attributiv
+attributive
+attributivem
+attributiven
+attributiver
+attributives
+au
+auch
+auf
+aufaddiere
+aufaddieren
+aufaddierend
+aufaddierende
+aufaddierendem
+aufaddierenden
+aufaddierender
+aufaddierendes
+aufaddierst
+aufaddiert
+aufaddierte
+aufaddiertem
+aufaddierten
+aufaddierter
+aufaddiertes
+aufaddiertest
+aufaddiertet
+aufatme
+aufatmen
+aufatmend
+aufatmende
+aufatmendem
+aufatmenden
+aufatmender
+aufatmendes
+aufatmest
+aufatmet
+aufatmete
+aufatmeten
+aufatmetest
+aufatmetet
+aufbaue
+aufbauen
+aufbauend
+aufbauende
+aufbauendem
+aufbauenden
+aufbauender
+aufbauendes
+aufbaust
+aufbaut
+aufbaute
+aufbauten
+aufbautest
+aufbautet
+aufbereite
+aufbereiten
+aufbereitend
+aufbereitende
+aufbereitendem
+aufbereitenden
+aufbereitender
+aufbereitendes
+aufbereitest
+aufbereitet
+aufbereitete
+aufbereiteten
+aufbereitetest
+aufbereitetet
+aufbewahre
+aufbewahren
+aufbewahrend
+aufbewahrende
+aufbewahrendem
+aufbewahrenden
+aufbewahrender
+aufbewahrendes
+aufbewahrst
+aufbewahrt
+aufbewahrte
+aufbewahrten
+aufbewahrtest
+aufbewahrtet
+aufbiege
+aufbiegen
+aufbiegst
+aufbiegt
+aufbinde
+aufbinden
+aufbindend
+aufbindende
+aufbindendem
+aufbindenden
+aufbindender
+aufbindendes
+aufbindest
+aufbindet
+aufblasbar
+aufblasbare
+aufblasbarem
+aufblasbaren
+aufblasbarer
+aufblasbares
+aufblase
+aufblasen
+aufblasend
+aufblasende
+aufblasendem
+aufblasenden
+aufblasender
+aufblasendes
+aufblast
+aufbrach
+aufbrachen
+aufbrachest
+aufbrachst
+aufbracht
+aufbrachte
+aufbrachten
+aufbrachtest
+aufbrachtet
+aufbreche
+aufbrechen
+aufbrecht
+aufbrichst
+aufbricht
+aufbringe
+aufbringen
+aufbringst
+aufbringt
+aufdecke
+aufdecken
+aufdeckst
+aufdeckt
+aufdeckte
+aufdeckten
+aufdecktest
+aufdecktet
+aufdringlich
+aufdringliche
+aufdringlichem
+aufdringlichen
+aufdringlicher
+aufdringlichere
+aufdringlicherem
+aufdringlicheren
+aufdringlicherer
+aufdringlicheres
+aufdringliches
+aufdringlichste
+aufdringlichstem
+aufdringlichsten
+aufdringlichster
+aufdringlichstes
+aufdrucke
+aufdrucken
+aufdruckend
+aufdruckende
+aufdruckendem
+aufdruckenden
+aufdruckender
+aufdruckendes
+aufdruckst
+aufdruckt
+aufdruckte
+aufdruckten
+aufdrucktest
+aufdrucktet
+aufdränge
+aufdrängen
+aufdrängend
+aufdrängende
+aufdrängendem
+aufdrängenden
+aufdrängender
+aufdrängendes
+aufdrängst
+aufdrängt
+aufdrängte
+aufdrängten
+aufdrängtest
+aufdrängtet
+aufdrücke
+aufdrücken
+aufdrückend
+aufdrückende
+aufdrückendem
+aufdrückenden
+aufdrückender
+aufdrückendes
+aufdrückst
+aufdrückt
+aufdrückte
+aufdrückten
+aufdrücktest
+aufdrücktet
+aufeinander
+auferlege
+auferlegen
+auferlegend
+auferlegende
+auferlegendem
+auferlegenden
+auferlegender
+auferlegendes
+auferlegst
+auferlegt
+auferlegte
+auferlegtem
+auferlegten
+auferlegter
+auferlegtes
+auferlegtest
+auferlegtet
+auferstanden
+auferstandene
+auferstandenem
+auferstandenen
+auferstandener
+auferstandenes
+auferstehe
+auferstehen
+auferstehend
+auferstehende
+auferstehendem
+auferstehenden
+auferstehender
+auferstehendes
+auferstehst
+aufersteht
+auferstünde
+auferstünden
+auferstündest
+auferstündet
+aufesse
+aufessen
+aufessend
+aufessende
+aufessendem
+aufessenden
+aufessender
+aufessendes
+aufesst
+aufgab
+aufgabehalber
+aufgaben
+aufgabst
+aufgabt
+aufgearbeitet
+aufgearbeitete
+aufgearbeitetem
+aufgearbeiteten
+aufgearbeiteter
+aufgearbeitetes
+aufgebahrt
+aufgebahrte
+aufgebahrtem
+aufgebahrten
+aufgebahrter
+aufgebahrtes
+aufgebauscht
+aufgebauschte
+aufgebauschtem
+aufgebauschten
+aufgebauschter
+aufgebauschtes
+aufgebaut
+aufgebaute
+aufgebautem
+aufgebauten
+aufgebauter
+aufgebautes
+aufgebe
+aufgeben
+aufgebend
+aufgebende
+aufgebendem
+aufgebenden
+aufgebender
+aufgebendes
+aufgebessert
+aufgebesserte
+aufgebessertem
+aufgebesserten
+aufgebesserter
+aufgebessertes
+aufgeblasen
+aufgeblasene
+aufgeblasenem
+aufgeblasenen
+aufgeblasener
+aufgeblasenere
+aufgeblasenerem
+aufgeblaseneren
+aufgeblasenerer
+aufgeblaseneres
+aufgeblasenes
+aufgeblasenste
+aufgeblasenstem
+aufgeblasensten
+aufgeblasenster
+aufgeblasenstes
+aufgeblendet
+aufgeblendete
+aufgeblendetem
+aufgeblendeten
+aufgeblendeter
+aufgeblendetes
+aufgeblickt
+aufgeblieben
+aufgebliebene
+aufgebliebenem
+aufgebliebenen
+aufgebliebener
+aufgebliebenes
+aufgeblitzt
+aufgeblitzte
+aufgeblitztem
+aufgeblitzten
+aufgeblitzter
+aufgeblitztes
+aufgebläht
+aufgeblähte
+aufgeblähtem
+aufgeblähten
+aufgeblähter
+aufgeblähtere
+aufgeblähterem
+aufgeblähteren
+aufgeblähterer
+aufgeblähteres
+aufgeblähtes
+aufgeblähteste
+aufgeblähtestem
+aufgeblähtesten
+aufgeblähtester
+aufgeblähtestes
+aufgeblüht
+aufgeblühte
+aufgeblühtem
+aufgeblühten
+aufgeblühter
+aufgeblühtes
+aufgebockt
+aufgebockte
+aufgebocktem
+aufgebockten
+aufgebockter
+aufgebocktes
+aufgebohrt
+aufgebohrte
+aufgebohrtem
+aufgebohrten
+aufgebohrter
+aufgebohrtes
+aufgeboten
+aufgebotene
+aufgebotenem
+aufgebotenen
+aufgebotener
+aufgebotenes
+aufgebracht
+aufgebrachte
+aufgebrachtem
+aufgebrachten
+aufgebrachter
+aufgebrachtes
+aufgebraucht
+aufgebrauchte
+aufgebrauchtem
+aufgebrauchten
+aufgebrauchter
+aufgebrauchtes
+aufgebraust
+aufgebrauste
+aufgebraustem
+aufgebrausten
+aufgebrauster
+aufgebraustes
+aufgebrochen
+aufgebrochene
+aufgebrochenem
+aufgebrochenen
+aufgebrochener
+aufgebrochenes
+aufgebt
+aufgebunden
+aufgebundene
+aufgebundenem
+aufgebundenen
+aufgebundener
+aufgebundenes
+aufgebäumt
+aufgebäumte
+aufgebäumtem
+aufgebäumten
+aufgebäumter
+aufgebäumtes
+aufgebügelt
+aufgebügelte
+aufgebügeltem
+aufgebügelten
+aufgebügelter
+aufgebügeltes
+aufgedeckt
+aufgedeckte
+aufgedecktem
+aufgedeckten
+aufgedeckter
+aufgedecktes
+aufgedonnert
+aufgedonnerte
+aufgedonnertem
+aufgedonnerten
+aufgedonnerter
+aufgedonnertes
+aufgedreht
+aufgedrehte
+aufgedrehtem
+aufgedrehten
+aufgedrehter
+aufgedrehtes
+aufgedruckt
+aufgedruckte
+aufgedrucktem
+aufgedruckten
+aufgedruckter
+aufgedrucktes
+aufgedrängt
+aufgedrängte
+aufgedrängtem
+aufgedrängten
+aufgedrängter
+aufgedrängtes
+aufgedrückt
+aufgedrückte
+aufgedrücktem
+aufgedrückten
+aufgedrückter
+aufgedrücktes
+aufgedunsen
+aufgedunsene
+aufgedunsenem
+aufgedunsenen
+aufgedunsener
+aufgedunsenes
+aufgefahren
+aufgefahrene
+aufgefahrenem
+aufgefahrenen
+aufgefahrener
+aufgefahrenes
+aufgefallen
+aufgefallene
+aufgefallenem
+aufgefallenen
+aufgefallener
+aufgefallenes
+aufgefangen
+aufgefangene
+aufgefangenem
+aufgefangenen
+aufgefangener
+aufgefangenes
+aufgefasst
+aufgefasste
+aufgefasstem
+aufgefassten
+aufgefasster
+aufgefasstes
+aufgefischt
+aufgefischte
+aufgefischtem
+aufgefischten
+aufgefischter
+aufgefischtes
+aufgeflammt
+aufgeflammte
+aufgeflammtem
+aufgeflammten
+aufgeflammter
+aufgeflammtes
+aufgeflogen
+aufgeflogene
+aufgeflogenem
+aufgeflogenen
+aufgeflogener
+aufgeflogenes
+aufgefordert
+aufgeforderte
+aufgefordertem
+aufgeforderten
+aufgeforderter
+aufgefordertes
+aufgeforstet
+aufgeforstete
+aufgeforstetem
+aufgeforsteten
+aufgeforsteter
+aufgeforstetes
+aufgefressen
+aufgefressene
+aufgefressenem
+aufgefressenen
+aufgefressener
+aufgefressenes
+aufgefrischt
+aufgefrischte
+aufgefrischtem
+aufgefrischten
+aufgefrischter
+aufgefrischtes
+aufgefunden
+aufgefundene
+aufgefundenem
+aufgefundenen
+aufgefundener
+aufgefundenes
+aufgefächert
+aufgefächerte
+aufgefächertem
+aufgefächerten
+aufgefächerter
+aufgefächertes
+aufgeführt
+aufgeführte
+aufgeführtem
+aufgeführten
+aufgeführter
+aufgeführtes
+aufgefüllt
+aufgefüllte
+aufgefülltem
+aufgefüllten
+aufgefüllter
+aufgefülltes
+aufgegangen
+aufgegangene
+aufgegangenem
+aufgegangenen
+aufgegangener
+aufgegangenes
+aufgegeben
+aufgegebene
+aufgegebenem
+aufgegebenen
+aufgegebener
+aufgegebenes
+aufgegessen
+aufgegessene
+aufgegessenem
+aufgegessenen
+aufgegessener
+aufgegessenes
+aufgegliedert
+aufgegliederte
+aufgegliedertem
+aufgegliederten
+aufgegliederter
+aufgegliedertes
+aufgegossen
+aufgegossene
+aufgegossenem
+aufgegossenen
+aufgegossener
+aufgegossenes
+aufgegriffen
+aufgegriffene
+aufgegriffenem
+aufgegriffenen
+aufgegriffener
+aufgegriffenes
+aufgehabt
+aufgehabte
+aufgehabtem
+aufgehabten
+aufgehabter
+aufgehabtes
+aufgehackt
+aufgehackte
+aufgehacktem
+aufgehackten
+aufgehackter
+aufgehacktes
+aufgehalten
+aufgehaltene
+aufgehaltenem
+aufgehaltenen
+aufgehaltener
+aufgehaltenes
+aufgehe
+aufgeheitert
+aufgeheiterte
+aufgeheitertem
+aufgeheiterten
+aufgeheiterter
+aufgeheitertes
+aufgeheizt
+aufgeheizte
+aufgeheiztem
+aufgeheizten
+aufgeheizter
+aufgeheiztes
+aufgehellt
+aufgehellte
+aufgehelltem
+aufgehellten
+aufgehellter
+aufgehelltes
+aufgehen
+aufgehend
+aufgehende
+aufgehendem
+aufgehenden
+aufgehender
+aufgehendes
+aufgehetzt
+aufgehetzte
+aufgehetztem
+aufgehetzten
+aufgehetzter
+aufgehetztes
+aufgehoben
+aufgehobene
+aufgehobenem
+aufgehobenen
+aufgehobener
+aufgehobenes
+aufgeholfen
+aufgeholfene
+aufgeholfenem
+aufgeholfenen
+aufgeholfener
+aufgeholfenes
+aufgeholt
+aufgeholte
+aufgeholtem
+aufgeholten
+aufgeholter
+aufgeholtes
+aufgehorcht
+aufgehorchte
+aufgehorchtem
+aufgehorchten
+aufgehorchter
+aufgehorchtes
+aufgehst
+aufgeht
+aufgehängt
+aufgehängte
+aufgehängtem
+aufgehängten
+aufgehängter
+aufgehängtes
+aufgehäuft
+aufgehäufte
+aufgehäuftem
+aufgehäuften
+aufgehäufter
+aufgehäuftes
+aufgehört
+aufgekauft
+aufgekaufte
+aufgekauftem
+aufgekauften
+aufgekaufter
+aufgekauftes
+aufgeklappt
+aufgeklappte
+aufgeklapptem
+aufgeklappten
+aufgeklappter
+aufgeklapptes
+aufgeklebt
+aufgeklebte
+aufgeklebtem
+aufgeklebten
+aufgeklebter
+aufgeklebtes
+aufgeklärt
+aufgeklärte
+aufgeklärtem
+aufgeklärten
+aufgeklärter
+aufgeklärtes
+aufgeknöpft
+aufgeknöpfte
+aufgeknöpftem
+aufgeknöpften
+aufgeknöpfter
+aufgeknöpftes
+aufgekocht
+aufgekochte
+aufgekochtem
+aufgekochten
+aufgekochter
+aufgekochtes
+aufgekommen
+aufgekommene
+aufgekommenem
+aufgekommenen
+aufgekommener
+aufgekommenes
+aufgekratzt
+aufgekratzte
+aufgekratztem
+aufgekratzten
+aufgekratzter
+aufgekratztes
+aufgekrempelt
+aufgekrempelte
+aufgekrempeltem
+aufgekrempelten
+aufgekrempelter
+aufgekrempeltes
+aufgekreuzt
+aufgekreuzte
+aufgekreuztem
+aufgekreuzten
+aufgekreuzter
+aufgekreuztes
+aufgekriegt
+aufgelacht
+aufgelachte
+aufgelachtem
+aufgelachten
+aufgelachter
+aufgelachtes
+aufgeladen
+aufgeladene
+aufgeladenem
+aufgeladenen
+aufgeladener
+aufgeladenes
+aufgelassen
+aufgelassene
+aufgelassenem
+aufgelassenen
+aufgelassener
+aufgelassenes
+aufgelauert
+aufgelauerte
+aufgelauertem
+aufgelauerten
+aufgelauerter
+aufgelauertes
+aufgelaufen
+aufgelaufene
+aufgelaufenem
+aufgelaufenen
+aufgelaufener
+aufgelaufenes
+aufgelebt
+aufgelebte
+aufgelebtem
+aufgelebten
+aufgelebter
+aufgelebtes
+aufgelegen
+aufgelegene
+aufgelegenem
+aufgelegenen
+aufgelegener
+aufgelegenes
+aufgelegt
+aufgelegte
+aufgelegtem
+aufgelegten
+aufgelegter
+aufgelegtes
+aufgelehnt
+aufgelehnte
+aufgelehntem
+aufgelehnten
+aufgelehnter
+aufgelehntes
+aufgelesen
+aufgelesene
+aufgelesenem
+aufgelesenen
+aufgelesener
+aufgelesenes
+aufgeleuchtet
+aufgeleuchtete
+aufgeleuchtetem
+aufgeleuchteten
+aufgeleuchteter
+aufgeleuchtetes
+aufgelistet
+aufgelistete
+aufgelistetem
+aufgelisteten
+aufgelisteter
+aufgelistetes
+aufgelockert
+aufgelockerte
+aufgelockertem
+aufgelockerten
+aufgelockerter
+aufgelockertere
+aufgelockerterem
+aufgelockerteren
+aufgelockerterer
+aufgelockerteres
+aufgelockertes
+aufgelockerteste
+aufgelockertestem
+aufgelockertesten
+aufgelockertester
+aufgelockertestes
+aufgelodert
+aufgeloderte
+aufgelodertem
+aufgeloderten
+aufgeloderter
+aufgelodertes
+aufgelöst
+aufgelöste
+aufgelöstem
+aufgelösten
+aufgelöster
+aufgelöstere
+aufgelösterem
+aufgelösteren
+aufgelösterer
+aufgelösteres
+aufgelöstes
+aufgelösteste
+aufgelöstestem
+aufgelöstesten
+aufgelöstester
+aufgelöstestes
+aufgemacht
+aufgemachte
+aufgemachtem
+aufgemachten
+aufgemachter
+aufgemachtes
+aufgemalt
+aufgemalte
+aufgemaltem
+aufgemalten
+aufgemalter
+aufgemaltes
+aufgemotzt
+aufgemotzte
+aufgemotztem
+aufgemotzten
+aufgemotzter
+aufgemotztes
+aufgemuntert
+aufgemunterte
+aufgemuntertem
+aufgemunterten
+aufgemunterter
+aufgemuntertes
+aufgemöbelt
+aufgemöbelte
+aufgemöbeltem
+aufgemöbelten
+aufgemöbelter
+aufgemöbeltes
+aufgenommen
+aufgenommene
+aufgenommenem
+aufgenommenen
+aufgenommener
+aufgenommenes
+aufgenötigt
+aufgenötigte
+aufgenötigtem
+aufgenötigten
+aufgenötigter
+aufgenötigtes
+aufgeopfert
+aufgeopferte
+aufgeopfertem
+aufgeopferten
+aufgeopferter
+aufgeopfertes
+aufgepasst
+aufgepasste
+aufgepasstem
+aufgepassten
+aufgepasster
+aufgepasstes
+aufgepinselt
+aufgepinselte
+aufgepinseltem
+aufgepinselten
+aufgepinselter
+aufgepinseltes
+aufgeplatzt
+aufgeplatzte
+aufgeplatztem
+aufgeplatzten
+aufgeplatzter
+aufgeplatztes
+aufgeprallt
+aufgeprallte
+aufgepralltem
+aufgeprallten
+aufgeprallter
+aufgepralltes
+aufgepresst
+aufgepresste
+aufgepresstem
+aufgepressten
+aufgepresster
+aufgepresstes
+aufgepumpt
+aufgepumpte
+aufgepumptem
+aufgepumpten
+aufgepumpter
+aufgepumptes
+aufgeputzt
+aufgeputzte
+aufgeputztem
+aufgeputzten
+aufgeputzter
+aufgeputztes
+aufgepäppelt
+aufgepäppelte
+aufgepäppeltem
+aufgepäppelten
+aufgepäppelter
+aufgepäppeltes
+aufgerafft
+aufgeraffte
+aufgerafftem
+aufgerafften
+aufgeraffter
+aufgerafftes
+aufgeraut
+aufgeraute
+aufgerautem
+aufgerauten
+aufgerauter
+aufgerautes
+aufgerechnet
+aufgerechnete
+aufgerechnetem
+aufgerechneten
+aufgerechneter
+aufgerechnetes
+aufgereckt
+aufgereckte
+aufgerecktem
+aufgereckten
+aufgereckter
+aufgerecktes
+aufgeregt
+aufgeregte
+aufgeregtem
+aufgeregten
+aufgeregter
+aufgeregtere
+aufgeregterem
+aufgeregteren
+aufgeregterer
+aufgeregteres
+aufgeregtes
+aufgeregteste
+aufgeregtestem
+aufgeregtesten
+aufgeregtester
+aufgeregtestes
+aufgereiht
+aufgereihte
+aufgereihtem
+aufgereihten
+aufgereihter
+aufgereihtes
+aufgerichtet
+aufgerichtete
+aufgerichtetem
+aufgerichteten
+aufgerichteter
+aufgerichtetes
+aufgerieben
+aufgeriebene
+aufgeriebenem
+aufgeriebenen
+aufgeriebener
+aufgeriebenes
+aufgerissen
+aufgerissene
+aufgerissenem
+aufgerissenen
+aufgerissener
+aufgerissenes
+aufgerollt
+aufgerollte
+aufgerolltem
+aufgerollten
+aufgerollter
+aufgerolltes
+aufgerufen
+aufgerufene
+aufgerufenem
+aufgerufenen
+aufgerufener
+aufgerufenes
+aufgerundet
+aufgerundete
+aufgerundetem
+aufgerundeten
+aufgerundeter
+aufgerundetes
+aufgeräumt
+aufgeräumte
+aufgeräumtem
+aufgeräumten
+aufgeräumter
+aufgeräumtes
+aufgerückt
+aufgerückte
+aufgerücktem
+aufgerückten
+aufgerückter
+aufgerücktes
+aufgerührt
+aufgerührte
+aufgerührtem
+aufgerührten
+aufgerührter
+aufgerührtes
+aufgerüstet
+aufgerüstete
+aufgerüstetem
+aufgerüsteten
+aufgerüsteter
+aufgerüstetes
+aufgesagt
+aufgesagte
+aufgesagtem
+aufgesagten
+aufgesagter
+aufgesagtes
+aufgesammelt
+aufgesammelte
+aufgesammeltem
+aufgesammelten
+aufgesammelter
+aufgesammeltes
+aufgesaugt
+aufgesaugte
+aufgesaugtem
+aufgesaugten
+aufgesaugter
+aufgesaugtes
+aufgeschaut
+aufgescheucht
+aufgescheuchte
+aufgescheuchtem
+aufgescheuchten
+aufgescheuchter
+aufgescheuchtes
+aufgeschichtet
+aufgeschichtete
+aufgeschichtetem
+aufgeschichteten
+aufgeschichteter
+aufgeschichtetes
+aufgeschlagen
+aufgeschlagene
+aufgeschlagenem
+aufgeschlagenen
+aufgeschlagener
+aufgeschlagenes
+aufgeschlitzt
+aufgeschlitzte
+aufgeschlitztem
+aufgeschlitzten
+aufgeschlitzter
+aufgeschlitztes
+aufgeschlossen
+aufgeschlossene
+aufgeschlossenem
+aufgeschlossenen
+aufgeschlossener
+aufgeschlossenes
+aufgeschlüsselt
+aufgeschlüsselte
+aufgeschlüsseltem
+aufgeschlüsselten
+aufgeschlüsselter
+aufgeschlüsseltes
+aufgeschmissen
+aufgeschmissene
+aufgeschmissenem
+aufgeschmissenen
+aufgeschmissener
+aufgeschmissenes
+aufgeschnitten
+aufgeschnittene
+aufgeschnittenem
+aufgeschnittenen
+aufgeschnittener
+aufgeschnittenes
+aufgeschnürt
+aufgeschnürte
+aufgeschnürtem
+aufgeschnürten
+aufgeschnürter
+aufgeschnürtes
+aufgeschoben
+aufgeschobene
+aufgeschobenem
+aufgeschobenen
+aufgeschobener
+aufgeschobenes
+aufgeschraubt
+aufgeschraubte
+aufgeschraubtem
+aufgeschraubten
+aufgeschraubter
+aufgeschraubtes
+aufgeschreckt
+aufgeschreckte
+aufgeschrecktem
+aufgeschreckten
+aufgeschreckter
+aufgeschrecktes
+aufgeschrieben
+aufgeschriebene
+aufgeschriebenem
+aufgeschriebenen
+aufgeschriebener
+aufgeschriebenes
+aufgeschrien
+aufgeschwatzt
+aufgeschwatzte
+aufgeschwatztem
+aufgeschwatzten
+aufgeschwatzter
+aufgeschwatztes
+aufgeschürft
+aufgeschürfte
+aufgeschürftem
+aufgeschürften
+aufgeschürfter
+aufgeschürftes
+aufgeschüttet
+aufgeschüttete
+aufgeschüttetem
+aufgeschütteten
+aufgeschütteter
+aufgeschüttetes
+aufgesehen
+aufgesehene
+aufgesehenem
+aufgesehenen
+aufgesehener
+aufgesehenes
+aufgesessen
+aufgesessene
+aufgesessenem
+aufgesessenen
+aufgesessener
+aufgesessenes
+aufgesetzt
+aufgesetzte
+aufgesetztem
+aufgesetzten
+aufgesetzter
+aufgesetztes
+aufgesogen
+aufgesogene
+aufgesogenem
+aufgesogenen
+aufgesogener
+aufgesogenes
+aufgespalten
+aufgespaltene
+aufgespaltenem
+aufgespaltenen
+aufgespaltener
+aufgespaltenes
+aufgespannt
+aufgespannte
+aufgespanntem
+aufgespannten
+aufgespannter
+aufgespanntes
+aufgespart
+aufgesparte
+aufgespartem
+aufgesparten
+aufgesparter
+aufgespartes
+aufgesperrt
+aufgesperrte
+aufgesperrtem
+aufgesperrten
+aufgesperrter
+aufgesperrtes
+aufgespielt
+aufgespielte
+aufgespieltem
+aufgespielten
+aufgespielter
+aufgespieltes
+aufgespießen
+aufgespießene
+aufgespießenem
+aufgespießenen
+aufgespießener
+aufgespießenes
+aufgesprungen
+aufgesprungene
+aufgesprungenem
+aufgesprungenen
+aufgesprungener
+aufgesprungenes
+aufgespürt
+aufgespürte
+aufgespürtem
+aufgespürten
+aufgespürter
+aufgespürtes
+aufgestachelt
+aufgestachelte
+aufgestacheltem
+aufgestachelten
+aufgestachelter
+aufgestacheltes
+aufgestanden
+aufgestandene
+aufgestandenem
+aufgestandenen
+aufgestandener
+aufgestandenes
+aufgestapelt
+aufgestapelte
+aufgestapeltem
+aufgestapelten
+aufgestapelter
+aufgestapeltes
+aufgestaut
+aufgestaute
+aufgestautem
+aufgestauten
+aufgestauter
+aufgestautes
+aufgesteckt
+aufgesteckte
+aufgestecktem
+aufgesteckten
+aufgesteckter
+aufgestecktes
+aufgestellt
+aufgestellte
+aufgestelltem
+aufgestellten
+aufgestellter
+aufgestelltes
+aufgesteppt
+aufgesteppte
+aufgestepptem
+aufgesteppten
+aufgesteppter
+aufgestepptes
+aufgestiegen
+aufgestiegene
+aufgestiegenem
+aufgestiegenen
+aufgestiegener
+aufgestiegenes
+aufgestockt
+aufgestockte
+aufgestocktem
+aufgestockten
+aufgestockter
+aufgestocktes
+aufgestoßen
+aufgestoßene
+aufgestoßenem
+aufgestoßenen
+aufgestoßener
+aufgestoßenes
+aufgestrebt
+aufgestrebte
+aufgestrebtem
+aufgestrebten
+aufgestrebter
+aufgestrebtes
+aufgestrichen
+aufgestrichene
+aufgestrichenem
+aufgestrichenen
+aufgestrichener
+aufgestrichenes
+aufgeständert
+aufgeständerte
+aufgeständertem
+aufgeständerten
+aufgeständerter
+aufgeständertes
+aufgestöbert
+aufgestöberte
+aufgestöbertem
+aufgestöberten
+aufgestöberter
+aufgestöbertes
+aufgestützt
+aufgestützte
+aufgestütztem
+aufgestützten
+aufgestützter
+aufgestütztes
+aufgesucht
+aufgesuchte
+aufgesuchtem
+aufgesuchten
+aufgesuchter
+aufgesuchtes
+aufgetan
+aufgetankt
+aufgetankte
+aufgetanktem
+aufgetankten
+aufgetankter
+aufgetanktes
+aufgetaucht
+aufgetauchte
+aufgetauchtem
+aufgetauchten
+aufgetauchter
+aufgetauchtes
+aufgetaut
+aufgetaute
+aufgetautem
+aufgetauten
+aufgetauter
+aufgetautes
+aufgeteilt
+aufgeteilte
+aufgeteiltem
+aufgeteilten
+aufgeteilter
+aufgeteiltes
+aufgetischt
+aufgetischte
+aufgetischtem
+aufgetischten
+aufgetischter
+aufgetischtes
+aufgetragen
+aufgetragene
+aufgetragenem
+aufgetragenen
+aufgetragener
+aufgetragenes
+aufgetrennt
+aufgetrennte
+aufgetrenntem
+aufgetrennten
+aufgetrennter
+aufgetrenntes
+aufgetreten
+aufgetretene
+aufgetretenem
+aufgetretenen
+aufgetretener
+aufgetretenes
+aufgetrieben
+aufgetriebene
+aufgetriebenem
+aufgetriebenen
+aufgetriebener
+aufgetriebenes
+aufgetroffen
+aufgetroffene
+aufgetroffenem
+aufgetroffenen
+aufgetroffener
+aufgetroffenes
+aufgewachsen
+aufgewachsene
+aufgewachsenem
+aufgewachsenen
+aufgewachsener
+aufgewachsenes
+aufgewacht
+aufgewachte
+aufgewachtem
+aufgewachten
+aufgewachter
+aufgewachtes
+aufgewandt
+aufgewandte
+aufgewandtem
+aufgewandten
+aufgewandter
+aufgewandtes
+aufgewartet
+aufgewartete
+aufgewartetem
+aufgewarteten
+aufgewarteter
+aufgewartetes
+aufgewaschen
+aufgewaschene
+aufgewaschenem
+aufgewaschenen
+aufgewaschener
+aufgewaschenes
+aufgeweckt
+aufgeweckte
+aufgewecktem
+aufgeweckten
+aufgeweckter
+aufgewecktere
+aufgeweckterem
+aufgeweckteren
+aufgeweckterer
+aufgeweckteres
+aufgewecktes
+aufgeweckteste
+aufgewecktestem
+aufgewecktesten
+aufgewecktester
+aufgewecktestes
+aufgeweicht
+aufgeweichte
+aufgeweichtem
+aufgeweichten
+aufgeweichter
+aufgeweichtes
+aufgewendet
+aufgewendete
+aufgewendetem
+aufgewendeten
+aufgewendeter
+aufgewendetes
+aufgewertet
+aufgewertete
+aufgewertetem
+aufgewerteten
+aufgewerteter
+aufgewertetes
+aufgewickelt
+aufgewickelte
+aufgewickeltem
+aufgewickelten
+aufgewickelter
+aufgewickeltes
+aufgewiegelt
+aufgewiegelte
+aufgewiegeltem
+aufgewiegelten
+aufgewiegelter
+aufgewiegeltes
+aufgewiesen
+aufgewiesene
+aufgewiesenem
+aufgewiesenen
+aufgewiesener
+aufgewiesenes
+aufgewirbelt
+aufgewirbelte
+aufgewirbeltem
+aufgewirbelten
+aufgewirbelter
+aufgewirbeltes
+aufgewischt
+aufgewischte
+aufgewischtem
+aufgewischten
+aufgewischter
+aufgewischtes
+aufgewogen
+aufgewogene
+aufgewogenem
+aufgewogenen
+aufgewogener
+aufgewogenes
+aufgeworfen
+aufgeworfene
+aufgeworfenem
+aufgeworfenen
+aufgeworfener
+aufgeworfenes
+aufgewärmt
+aufgewärmte
+aufgewärmtem
+aufgewärmten
+aufgewärmter
+aufgewärmtes
+aufgewühlt
+aufgewühlte
+aufgewühltem
+aufgewühlten
+aufgewühlter
+aufgewühltes
+aufgezeichnet
+aufgezeichnete
+aufgezeichnetem
+aufgezeichneten
+aufgezeichneter
+aufgezeichnetes
+aufgezeigt
+aufgezeigte
+aufgezeigtem
+aufgezeigten
+aufgezeigter
+aufgezeigtes
+aufgezogen
+aufgezogene
+aufgezogenem
+aufgezogenen
+aufgezogener
+aufgezogenes
+aufgezwungen
+aufgezwungene
+aufgezwungenem
+aufgezwungenen
+aufgezwungener
+aufgezwungenes
+aufgezählt
+aufgezählte
+aufgezähltem
+aufgezählten
+aufgezählter
+aufgezähltes
+aufgezäumt
+aufgezäumte
+aufgezäumtem
+aufgezäumten
+aufgezäumter
+aufgezäumtes
+aufgibst
+aufgibt
+aufgieße
+aufgießen
+aufgießend
+aufgießende
+aufgießendem
+aufgießenden
+aufgießender
+aufgießendes
+aufgießest
+aufgießt
+aufging
+aufgingen
+aufgingst
+aufgingt
+aufgliedere
+aufgliedern
+aufgliedernd
+aufgliedernde
+aufgliederndem
+aufgliedernden
+aufgliedernder
+aufgliederndes
+aufgliederst
+aufgliedert
+aufgliederte
+aufgliederten
+aufgliedertest
+aufgliedertet
+aufgliedre
+aufglühe
+aufglühen
+aufglühend
+aufglühende
+aufglühendem
+aufglühenden
+aufglühender
+aufglühendes
+aufglühst
+aufglüht
+aufglühte
+aufglühten
+aufglühtest
+aufglühtet
+aufgreife
+aufgreifen
+aufgreifend
+aufgreifende
+aufgreifendem
+aufgreifenden
+aufgreifender
+aufgreifendes
+aufgreifst
+aufgreift
+aufgrund
+aufhabe
+aufhaben
+aufhabend
+aufhabende
+aufhabendem
+aufhabenden
+aufhabender
+aufhabendes
+aufhabt
+aufhacke
+aufhacken
+aufhackend
+aufhackende
+aufhackendem
+aufhackenden
+aufhackender
+aufhackendes
+aufhackst
+aufhackt
+aufhackte
+aufhackten
+aufhacktest
+aufhacktet
+aufhalf
+aufhalfen
+aufhalfest
+aufhalfst
+aufhalft
+aufhalte
+aufhalten
+aufhaltend
+aufhaltende
+aufhaltendem
+aufhaltenden
+aufhaltender
+aufhaltendes
+aufhaltet
+aufhebbar
+aufhebbare
+aufhebbarem
+aufhebbaren
+aufhebbarer
+aufhebbares
+aufhebe
+aufheben
+aufhebend
+aufhebende
+aufhebendem
+aufhebenden
+aufhebender
+aufhebendes
+aufhebst
+aufhebt
+aufheitere
+aufheitern
+aufheiternd
+aufheiternde
+aufheiterndem
+aufheiternden
+aufheiternder
+aufheiterndes
+aufheiterst
+aufheitert
+aufheiterte
+aufheiterten
+aufheitertest
+aufheitertet
+aufheitre
+aufheize
+aufheizen
+aufheizend
+aufheizende
+aufheizendem
+aufheizenden
+aufheizender
+aufheizendes
+aufheizest
+aufheizt
+aufheizte
+aufheizten
+aufheiztest
+aufheiztet
+aufhelfe
+aufhelfen
+aufhelfend
+aufhelfende
+aufhelfendem
+aufhelfenden
+aufhelfender
+aufhelfendes
+aufhelft
+aufhelle
+aufhellen
+aufhellend
+aufhellende
+aufhellendem
+aufhellenden
+aufhellender
+aufhellendes
+aufhellst
+aufhellt
+aufhellte
+aufhellten
+aufhelltest
+aufhelltet
+aufhetze
+aufhetzen
+aufhetzend
+aufhetzende
+aufhetzendem
+aufhetzenden
+aufhetzender
+aufhetzendes
+aufhetzest
+aufhetzt
+aufhetzte
+aufhetzten
+aufhetztest
+aufhetztet
+aufheule
+aufheulen
+aufheulend
+aufheulende
+aufheulendem
+aufheulenden
+aufheulender
+aufheulendes
+aufheulst
+aufheult
+aufheulte
+aufheulten
+aufheultest
+aufheultet
+aufhielt
+aufhielten
+aufhieltest
+aufhieltet
+aufhieltst
+aufhob
+aufhoben
+aufhobst
+aufhobt
+aufhole
+aufholen
+aufholend
+aufholende
+aufholendem
+aufholenden
+aufholender
+aufholendes
+aufholst
+aufholt
+aufholte
+aufholten
+aufholtest
+aufholtet
+aufhorche
+aufhorchen
+aufhorchend
+aufhorchende
+aufhorchendem
+aufhorchenden
+aufhorchender
+aufhorchendes
+aufhorchst
+aufhorcht
+aufhorchte
+aufhorchten
+aufhorchtest
+aufhorchtet
+aufhält
+aufhältst
+aufhänge
+aufhängen
+aufhängend
+aufhängende
+aufhängendem
+aufhängenden
+aufhängender
+aufhängendes
+aufhängst
+aufhängt
+aufhäufe
+aufhäufen
+aufhäufend
+aufhäufende
+aufhäufendem
+aufhäufenden
+aufhäufender
+aufhäufendes
+aufhäufst
+aufhäuft
+aufhäufte
+aufhäuften
+aufhäuftest
+aufhäuftet
+aufhöre
+aufhören
+aufhörend
+aufhörende
+aufhörendem
+aufhörenden
+aufhörender
+aufhörendes
+aufhörst
+aufhört
+aufhörte
+aufhörten
+aufhörtest
+aufhörtet
+aufkaufe
+aufkaufen
+aufkaufend
+aufkaufende
+aufkaufendem
+aufkaufenden
+aufkaufender
+aufkaufendes
+aufkaufst
+aufkauft
+aufkaufte
+aufkauften
+aufkauftest
+aufkauftet
+aufkeime
+aufkeimen
+aufkeimend
+aufkeimende
+aufkeimendem
+aufkeimenden
+aufkeimender
+aufkeimendes
+aufkeimst
+aufkeimt
+aufkeimte
+aufkeimten
+aufkeimtest
+aufkeimtet
+aufklaffe
+aufklaffen
+aufklaffend
+aufklaffende
+aufklaffendem
+aufklaffenden
+aufklaffender
+aufklaffendes
+aufklaffst
+aufklafft
+aufklaffte
+aufklafften
+aufklafftest
+aufklafftet
+aufklappe
+aufklappen
+aufklappend
+aufklappende
+aufklappendem
+aufklappenden
+aufklappender
+aufklappendes
+aufklappst
+aufklappt
+aufklappte
+aufklappten
+aufklapptest
+aufklapptet
+aufklare
+aufklaren
+aufklarend
+aufklarende
+aufklarendem
+aufklarenden
+aufklarender
+aufklarendes
+aufklarst
+aufklart
+aufklarte
+aufklarten
+aufklartest
+aufklartet
+aufklebe
+aufkleben
+aufklebend
+aufklebende
+aufklebendem
+aufklebenden
+aufklebender
+aufklebendes
+aufklebst
+aufklebt
+aufklebte
+aufklebten
+aufklebtest
+aufklebtet
+aufkläre
+aufklären
+aufklärend
+aufklärende
+aufklärendem
+aufklärenden
+aufklärender
+aufklärendes
+aufklärerisch
+aufklärerische
+aufklärerischem
+aufklärerischen
+aufklärerischer
+aufklärerisches
+aufklärst
+aufklärt
+aufklärte
+aufklärten
+aufklärtest
+aufklärtet
+aufknöpfe
+aufknöpfen
+aufknöpfend
+aufknöpfende
+aufknöpfendem
+aufknöpfenden
+aufknöpfender
+aufknöpfendes
+aufknöpfst
+aufknöpft
+aufknöpfte
+aufknöpften
+aufknöpftest
+aufknöpftet
+aufkoche
+aufkochen
+aufkochend
+aufkochende
+aufkochendem
+aufkochenden
+aufkochender
+aufkochendes
+aufkochst
+aufkocht
+aufkochte
+aufkochten
+aufkochtest
+aufkochtet
+aufkomme
+aufkommen
+aufkommend
+aufkommende
+aufkommendem
+aufkommenden
+aufkommender
+aufkommendes
+aufkommst
+aufkommt
+aufkrempele
+aufkrempeln
+aufkrempelnd
+aufkrempelnde
+aufkrempelndem
+aufkrempelnden
+aufkrempelnder
+aufkrempelndes
+aufkrempelst
+aufkrempelt
+aufkrempelte
+aufkrempelten
+aufkrempeltest
+aufkrempeltet
+aufkremple
+aufkreuze
+aufkreuzen
+aufkreuzend
+aufkreuzende
+aufkreuzendem
+aufkreuzenden
+aufkreuzender
+aufkreuzendes
+aufkreuzest
+aufkreuzt
+aufkreuzte
+aufkreuzten
+aufkreuztest
+aufkreuztet
+aufkriege
+aufkriegen
+aufkriegst
+aufkriegt
+aufkriegte
+aufkriegten
+aufkriegtest
+aufkriegtet
+aufkündige
+aufkündigen
+aufkündigend
+aufkündigende
+aufkündigendem
+aufkündigenden
+aufkündigender
+aufkündigendes
+aufkündigst
+aufkündigt
+aufkündigte
+aufkündigten
+aufkündigtest
+aufkündigtet
+aufmache
+aufmachen
+aufmachend
+aufmachende
+aufmachendem
+aufmachenden
+aufmachender
+aufmachendes
+aufmachst
+aufmacht
+aufmachte
+aufmachten
+aufmachtest
+aufmachtet
+aufmarschiere
+aufmarschieren
+aufmarschierend
+aufmarschierende
+aufmarschierendem
+aufmarschierenden
+aufmarschierender
+aufmarschierendes
+aufmarschierst
+aufmarschiert
+aufmarschierte
+aufmarschiertem
+aufmarschierten
+aufmarschierter
+aufmarschiertes
+aufmarschiertest
+aufmarschiertet
+aufmerksam
+aufmerksame
+aufmerksamem
+aufmerksamen
+aufmerksamer
+aufmerksamere
+aufmerksamerem
+aufmerksameren
+aufmerksamerer
+aufmerksameres
+aufmerksames
+aufmerksamste
+aufmerksamstem
+aufmerksamsten
+aufmerksamster
+aufmerksamstes
+aufmuntere
+aufmuntern
+aufmunternd
+aufmunternde
+aufmunterndem
+aufmunternden
+aufmunternder
+aufmunterndes
+aufmunterst
+aufmuntert
+aufmunterte
+aufmunterten
+aufmuntertest
+aufmuntertet
+aufmuntre
+aufmöbele
+aufmöbeln
+aufmöbelnd
+aufmöbelnde
+aufmöbelndem
+aufmöbelnden
+aufmöbelnder
+aufmöbelndes
+aufmöbelst
+aufmöbelt
+aufmöbelte
+aufmöbelten
+aufmöbeltest
+aufmöbeltet
+aufmöble
+aufmüpfig
+aufmüpfige
+aufmüpfigem
+aufmüpfigen
+aufmüpfiger
+aufmüpfiges
+aufnahm
+aufnahmebereit
+aufnahmebereite
+aufnahmebereitem
+aufnahmebereiten
+aufnahmebereiter
+aufnahmebereites
+aufnahmefähig
+aufnahmefähige
+aufnahmefähigem
+aufnahmefähigen
+aufnahmefähiger
+aufnahmefähigere
+aufnahmefähigerem
+aufnahmefähigeren
+aufnahmefähigerer
+aufnahmefähigeres
+aufnahmefähiges
+aufnahmefähigste
+aufnahmefähigstem
+aufnahmefähigsten
+aufnahmefähigster
+aufnahmefähigstes
+aufnahmen
+aufnahmst
+aufnahmt
+aufnehme
+aufnehmen
+aufnehmend
+aufnehmende
+aufnehmendem
+aufnehmenden
+aufnehmender
+aufnehmendes
+aufnehmst
+aufnehmt
+aufnimmst
+aufnimmt
+aufopfere
+aufopfern
+aufopfernd
+aufopfernde
+aufopferndem
+aufopfernden
+aufopfernder
+aufopferndes
+aufopferst
+aufopfert
+aufopferte
+aufopferten
+aufopfertest
+aufopfertet
+aufopfre
+aufpasse
+aufpassen
+aufpassend
+aufpassende
+aufpassendem
+aufpassenden
+aufpassender
+aufpassendes
+aufpassest
+aufpasst
+aufpasste
+aufpassten
+aufpasstest
+aufpasstet
+aufpinsele
+aufpinseln
+aufpinselnd
+aufpinselnde
+aufpinselndem
+aufpinselnden
+aufpinselnder
+aufpinselndes
+aufpinselst
+aufpinselt
+aufpinselte
+aufpinselten
+aufpinseltest
+aufpinseltet
+aufpinsle
+aufplatze
+aufplatzen
+aufplatzend
+aufplatzende
+aufplatzendem
+aufplatzenden
+aufplatzender
+aufplatzendes
+aufplatzest
+aufplatzt
+aufplatzte
+aufplatzten
+aufplatztest
+aufplatztet
+aufplätte
+aufplätten
+aufplättend
+aufplättende
+aufplättendem
+aufplättenden
+aufplättender
+aufplättendes
+aufplättest
+aufplättet
+aufplättete
+aufplätteten
+aufplättetest
+aufplättetet
+aufpralle
+aufprallen
+aufprallend
+aufprallende
+aufprallendem
+aufprallenden
+aufprallender
+aufprallendes
+aufprallst
+aufprallt
+aufprallte
+aufprallten
+aufpralltest
+aufpralltet
+aufprobiere
+aufprobieren
+aufprobierend
+aufprobierende
+aufprobierendem
+aufprobierenden
+aufprobierender
+aufprobierendes
+aufprobierst
+aufprobiert
+aufprobierte
+aufprobiertem
+aufprobierten
+aufprobierter
+aufprobiertes
+aufprobiertest
+aufprobiertet
+aufpräge
+aufprägen
+aufprägend
+aufprägende
+aufprägendem
+aufprägenden
+aufprägender
+aufprägendes
+aufprägst
+aufprägt
+aufprägte
+aufprägten
+aufprägtest
+aufprägtet
+aufpumpe
+aufpumpen
+aufpumpend
+aufpumpende
+aufpumpendem
+aufpumpenden
+aufpumpender
+aufpumpendes
+aufpumpst
+aufpumpt
+aufpumpte
+aufpumpten
+aufpumptest
+aufpumptet
+aufputze
+aufputzen
+aufputzend
+aufputzende
+aufputzendem
+aufputzenden
+aufputzender
+aufputzendes
+aufputzest
+aufputzt
+aufputzte
+aufputzten
+aufputztest
+aufputztet
+aufpäppele
+aufpäppeln
+aufpäppelnd
+aufpäppelnde
+aufpäppelndem
+aufpäppelnden
+aufpäppelnder
+aufpäppelndes
+aufpäppelst
+aufpäppelt
+aufpäppelte
+aufpäppelten
+aufpäppeltest
+aufpäppeltet
+aufpäpple
+aufqqfahre
+aufqqfahren
+aufqqfahrend
+aufqqfahrende
+aufqqfahrendem
+aufqqfahrenden
+aufqqfahrender
+aufqqfahrendes
+aufqqfahrt
+aufqqfalle
+aufqqfallen
+aufqqfallend
+aufqqfallende
+aufqqfallendem
+aufqqfallenden
+aufqqfallender
+aufqqfallendere
+aufqqfallenderem
+aufqqfallenderen
+aufqqfallenderer
+aufqqfallenderes
+aufqqfallendes
+aufqqfallendste
+aufqqfallendstem
+aufqqfallendsten
+aufqqfallendster
+aufqqfallendstes
+aufqqfallt
+aufqqfange
+aufqqfangen
+aufqqfangend
+aufqqfangende
+aufqqfangendem
+aufqqfangenden
+aufqqfangender
+aufqqfangendes
+aufqqfangt
+aufqqfasse
+aufqqfassen
+aufqqfassend
+aufqqfassende
+aufqqfassendem
+aufqqfassenden
+aufqqfassender
+aufqqfassendes
+aufqqfassest
+aufqqfasst
+aufqqfasste
+aufqqfassten
+aufqqfasstest
+aufqqfasstet
+aufqqfiel
+aufqqfielen
+aufqqfielst
+aufqqfielt
+aufqqfindbar
+aufqqfindbare
+aufqqfindbarem
+aufqqfindbaren
+aufqqfindbarer
+aufqqfindbares
+aufqqfinde
+aufqqfinden
+aufqqfindend
+aufqqfindende
+aufqqfindendem
+aufqqfindenden
+aufqqfindender
+aufqqfindendes
+aufqqfindest
+aufqqfindet
+aufqqfing
+aufqqfingen
+aufqqfingst
+aufqqfingt
+aufqqfische
+aufqqfischen
+aufqqfischend
+aufqqfischende
+aufqqfischendem
+aufqqfischenden
+aufqqfischender
+aufqqfischendes
+aufqqfischest
+aufqqfischst
+aufqqfischt
+aufqqfischte
+aufqqfischten
+aufqqfischtest
+aufqqfischtet
+aufqqflamme
+aufqqflammen
+aufqqflammend
+aufqqflammende
+aufqqflammendem
+aufqqflammenden
+aufqqflammender
+aufqqflammendes
+aufqqflammst
+aufqqflammt
+aufqqflammte
+aufqqflammten
+aufqqflammtest
+aufqqflammtet
+aufqqfliege
+aufqqfliegen
+aufqqfliegend
+aufqqfliegende
+aufqqfliegendem
+aufqqfliegenden
+aufqqfliegender
+aufqqfliegendes
+aufqqfliegst
+aufqqfliegt
+aufqqfordere
+aufqqfordern
+aufqqfordernd
+aufqqfordernde
+aufqqforderndem
+aufqqfordernden
+aufqqfordernder
+aufqqforderndes
+aufqqforderst
+aufqqfordert
+aufqqforderte
+aufqqforderten
+aufqqfordertest
+aufqqfordertet
+aufqqfordre
+aufqqforste
+aufqqforsten
+aufqqforstend
+aufqqforstende
+aufqqforstendem
+aufqqforstenden
+aufqqforstender
+aufqqforstendes
+aufqqforstest
+aufqqforstet
+aufqqforstete
+aufqqforsteten
+aufqqforstetest
+aufqqforstetet
+aufqqfraß
+aufqqfraßen
+aufqqfraßest
+aufqqfraßt
+aufqqfresse
+aufqqfressen
+aufqqfressend
+aufqqfressende
+aufqqfressendem
+aufqqfressenden
+aufqqfressender
+aufqqfressendes
+aufqqfresst
+aufqqfrische
+aufqqfrischen
+aufqqfrischend
+aufqqfrischende
+aufqqfrischendem
+aufqqfrischenden
+aufqqfrischender
+aufqqfrischendes
+aufqqfrischest
+aufqqfrischst
+aufqqfrischt
+aufqqfrischte
+aufqqfrischten
+aufqqfrischtest
+aufqqfrischtet
+aufqqfrisst
+aufqqfuhr
+aufqqfuhren
+aufqqfuhrst
+aufqqfuhrt
+aufqqfächere
+aufqqfächern
+aufqqfächernd
+aufqqfächernde
+aufqqfächerndem
+aufqqfächernden
+aufqqfächernder
+aufqqfächerndes
+aufqqfächerst
+aufqqfächert
+aufqqfächerte
+aufqqfächerten
+aufqqfächertest
+aufqqfächertet
+aufqqfächre
+aufqqfährst
+aufqqfährt
+aufqqfällig
+aufqqfällige
+aufqqfälligem
+aufqqfälligen
+aufqqfälliger
+aufqqfälligere
+aufqqfälligerem
+aufqqfälligeren
+aufqqfälligerer
+aufqqfälligeres
+aufqqfälliges
+aufqqfälligste
+aufqqfälligstem
+aufqqfälligsten
+aufqqfälligster
+aufqqfälligstes
+aufqqfängst
+aufqqfängt
+aufqqführe
+aufqqführen
+aufqqführend
+aufqqführende
+aufqqführendem
+aufqqführenden
+aufqqführender
+aufqqführendes
+aufqqführst
+aufqqführt
+aufqqführte
+aufqqführten
+aufqqführtest
+aufqqführtet
+aufqqfülle
+aufqqfüllen
+aufqqfüllend
+aufqqfüllende
+aufqqfüllendem
+aufqqfüllenden
+aufqqfüllender
+aufqqfüllendes
+aufqqfüllst
+aufqqfüllt
+aufqqfüllte
+aufqqfüllten
+aufqqfülltest
+aufqqfülltet
+aufqqlache
+aufqqlachen
+aufqqlachend
+aufqqlachende
+aufqqlachendem
+aufqqlachenden
+aufqqlachender
+aufqqlachendes
+aufqqlachst
+aufqqlacht
+aufqqlachte
+aufqqlachten
+aufqqlachtest
+aufqqlachtet
+aufqqlade
+aufqqladen
+aufqqladend
+aufqqladende
+aufqqladendem
+aufqqladenden
+aufqqladender
+aufqqladendes
+aufqqladet
+aufqqlagenstark
+aufqqlagenstarke
+aufqqlagenstarkem
+aufqqlagenstarken
+aufqqlagenstarker
+aufqqlagenstarkes
+aufqqlandig
+aufqqlandige
+aufqqlandigem
+aufqqlandigen
+aufqqlandiger
+aufqqlandiges
+aufqqlasse
+aufqqlassen
+aufqqlassend
+aufqqlassende
+aufqqlassendem
+aufqqlassenden
+aufqqlassender
+aufqqlassendes
+aufqqlasst
+aufqqlauere
+aufqqlauern
+aufqqlauernd
+aufqqlauernde
+aufqqlauerndem
+aufqqlauernden
+aufqqlauernder
+aufqqlauerndes
+aufqqlauerst
+aufqqlauert
+aufqqlauerte
+aufqqlauerten
+aufqqlauertest
+aufqqlauertet
+aufqqlaufe
+aufqqlaufen
+aufqqlaufend
+aufqqlaufende
+aufqqlaufendem
+aufqqlaufenden
+aufqqlaufender
+aufqqlaufendes
+aufqqlauft
+aufqqlaure
+aufqqlebe
+aufqqleben
+aufqqlebend
+aufqqlebende
+aufqqlebendem
+aufqqlebenden
+aufqqlebender
+aufqqlebendes
+aufqqlebst
+aufqqlebt
+aufqqlebte
+aufqqlebten
+aufqqlebtest
+aufqqlebtet
+aufqqlege
+aufqqlegen
+aufqqlegend
+aufqqlegende
+aufqqlegendem
+aufqqlegenden
+aufqqlegender
+aufqqlegendes
+aufqqlegst
+aufqqlegt
+aufqqlegte
+aufqqlegten
+aufqqlegtest
+aufqqlegtet
+aufqqlehne
+aufqqlehnen
+aufqqlehnend
+aufqqlehnende
+aufqqlehnendem
+aufqqlehnenden
+aufqqlehnender
+aufqqlehnendes
+aufqqlehnst
+aufqqlehnt
+aufqqlehnte
+aufqqlehnten
+aufqqlehntest
+aufqqlehntet
+aufqqlese
+aufqqlesen
+aufqqlesend
+aufqqlesende
+aufqqlesendem
+aufqqlesenden
+aufqqlesender
+aufqqlesendes
+aufqqlest
+aufqqleuchte
+aufqqleuchten
+aufqqleuchtend
+aufqqleuchtende
+aufqqleuchtendem
+aufqqleuchtenden
+aufqqleuchtender
+aufqqleuchtendes
+aufqqleuchtest
+aufqqleuchtet
+aufqqleuchtete
+aufqqleuchteten
+aufqqleuchtetest
+aufqqleuchtetet
+aufqqliege
+aufqqliegen
+aufqqliegend
+aufqqliegende
+aufqqliegendem
+aufqqliegenden
+aufqqliegender
+aufqqliegendes
+aufqqliegst
+aufqqliegt
+aufqqliste
+aufqqlisten
+aufqqlistend
+aufqqlistende
+aufqqlistendem
+aufqqlistenden
+aufqqlistender
+aufqqlistendes
+aufqqlistest
+aufqqlistet
+aufqqlistete
+aufqqlisteten
+aufqqlistetest
+aufqqlistetet
+aufqqlockere
+aufqqlockern
+aufqqlockernd
+aufqqlockernde
+aufqqlockerndem
+aufqqlockernden
+aufqqlockernder
+aufqqlockerndes
+aufqqlockerst
+aufqqlockert
+aufqqlockerte
+aufqqlockerten
+aufqqlockertest
+aufqqlockertet
+aufqqlockre
+aufqqlodernd
+aufqqlodernde
+aufqqloderndem
+aufqqlodernden
+aufqqlodernder
+aufqqloderndes
+aufqqlädst
+aufqqlädt
+aufqqlöse
+aufqqlösen
+aufqqlösend
+aufqqlösende
+aufqqlösendem
+aufqqlösenden
+aufqqlösender
+aufqqlösendes
+aufqqlösest
+aufqqlöst
+aufqqlöste
+aufqqlösten
+aufqqlöstest
+aufqqlöstet
+aufraffe
+aufraffen
+aufraffend
+aufraffende
+aufraffendem
+aufraffenden
+aufraffender
+aufraffendes
+aufraffst
+aufrafft
+aufraffte
+aufrafften
+aufrafftest
+aufrafftet
+aufrage
+aufragen
+aufragend
+aufragende
+aufragendem
+aufragenden
+aufragender
+aufragendes
+aufragst
+aufragt
+aufragte
+aufragten
+aufragtest
+aufragtet
+aufrechne
+aufrechnen
+aufrechnend
+aufrechnende
+aufrechnendem
+aufrechnenden
+aufrechnender
+aufrechnendes
+aufrechnest
+aufrechnet
+aufrechnete
+aufrechneten
+aufrechnetest
+aufrechnetet
+aufrecht
+aufrechte
+aufrechtem
+aufrechten
+aufrechter
+aufrechterhalte
+aufrechterhalten
+aufrechterhaltend
+aufrechterhaltende
+aufrechterhaltendem
+aufrechterhaltenden
+aufrechterhaltender
+aufrechterhaltendes
+aufrechterhaltene
+aufrechterhaltenem
+aufrechterhaltenen
+aufrechterhaltener
+aufrechterhaltenes
+aufrechterhaltet
+aufrechtes
+aufrechtzuerhalten
+aufrechtzuerhaltend
+aufrechtzuerhaltende
+aufrechtzuerhaltendem
+aufrechtzuerhaltenden
+aufrechtzuerhaltender
+aufrechtzuerhaltendes
+aufrege
+aufregen
+aufregend
+aufregende
+aufregendem
+aufregenden
+aufregender
+aufregendere
+aufregenderem
+aufregenderen
+aufregenderer
+aufregenderes
+aufregendes
+aufregendste
+aufregendstem
+aufregendsten
+aufregendster
+aufregendstes
+aufregst
+aufregt
+aufregte
+aufregten
+aufregtest
+aufregtet
+aufreibe
+aufreiben
+aufreibend
+aufreibende
+aufreibendem
+aufreibenden
+aufreibender
+aufreibendere
+aufreibenderem
+aufreibenderen
+aufreibenderer
+aufreibenderes
+aufreibendes
+aufreibendste
+aufreibendstem
+aufreibendsten
+aufreibendster
+aufreibendstes
+aufreibst
+aufreibt
+aufreihe
+aufreihen
+aufreihend
+aufreihende
+aufreihendem
+aufreihenden
+aufreihender
+aufreihendes
+aufreihst
+aufreiht
+aufreihte
+aufreihten
+aufreihtest
+aufreihtet
+aufreize
+aufreizen
+aufreizend
+aufreizende
+aufreizendem
+aufreizenden
+aufreizender
+aufreizendes
+aufreizest
+aufreizt
+aufreizte
+aufreizten
+aufreiztest
+aufreiztet
+aufreiße
+aufreißen
+aufreißend
+aufreißende
+aufreißendem
+aufreißenden
+aufreißender
+aufreißendes
+aufreißest
+aufreißt
+aufrichte
+aufrichten
+aufrichtend
+aufrichtende
+aufrichtendem
+aufrichtenden
+aufrichtender
+aufrichtendes
+aufrichtest
+aufrichtet
+aufrichtete
+aufrichteten
+aufrichtetest
+aufrichtetet
+aufrichtig
+aufrichtige
+aufrichtigem
+aufrichtigen
+aufrichtiger
+aufrichtigere
+aufrichtigerem
+aufrichtigeren
+aufrichtigerer
+aufrichtigeres
+aufrichtiges
+aufrichtigste
+aufrichtigstem
+aufrichtigsten
+aufrichtigster
+aufrichtigstes
+aufrief
+aufriefen
+aufriefest
+aufriefst
+aufrieft
+aufrolle
+aufrollen
+aufrollend
+aufrollende
+aufrollendem
+aufrollenden
+aufrollender
+aufrollendes
+aufrollst
+aufrollt
+aufrollte
+aufrollten
+aufrolltest
+aufrolltet
+aufrufbar
+aufrufbare
+aufrufbarem
+aufrufbaren
+aufrufbarer
+aufrufbares
+aufrufe
+aufrufen
+aufrufend
+aufrufende
+aufrufendem
+aufrufenden
+aufrufender
+aufrufendes
+aufrufst
+aufruft
+aufrunde
+aufrunden
+aufrundend
+aufrundende
+aufrundendem
+aufrundenden
+aufrundender
+aufrundendes
+aufrundest
+aufrundet
+aufrundete
+aufrundeten
+aufrundetest
+aufrundetet
+aufräume
+aufräumen
+aufräumend
+aufräumende
+aufräumendem
+aufräumenden
+aufräumender
+aufräumendes
+aufräumst
+aufräumt
+aufräumte
+aufräumten
+aufräumtest
+aufräumtet
+aufrücke
+aufrücken
+aufrückend
+aufrückende
+aufrückendem
+aufrückenden
+aufrückender
+aufrückendes
+aufrückst
+aufrückt
+aufrückte
+aufrückten
+aufrücktest
+aufrücktet
+aufrühre
+aufrühren
+aufrührend
+aufrührende
+aufrührendem
+aufrührenden
+aufrührender
+aufrührendes
+aufrührerisch
+aufrührerische
+aufrührerischem
+aufrührerischen
+aufrührerischer
+aufrührerisches
+aufrührst
+aufrührt
+aufrührte
+aufrührten
+aufrührtest
+aufrührtet
+aufrüstbar
+aufrüstbare
+aufrüstbarem
+aufrüstbaren
+aufrüstbarer
+aufrüstbares
+aufrüste
+aufrüsten
+aufrüstend
+aufrüstende
+aufrüstendem
+aufrüstenden
+aufrüstender
+aufrüstendes
+aufrüstest
+aufrüstet
+aufrüstete
+aufrüsteten
+aufrüstetest
+aufrüstetet
+aufrüttele
+aufrütteln
+aufrüttelnd
+aufrüttelnde
+aufrüttelndem
+aufrüttelnden
+aufrüttelnder
+aufrüttelndes
+aufrüttelst
+aufrüttelt
+aufrüttelte
+aufrüttelten
+aufrütteltest
+aufrütteltet
+aufrüttle
+aufs
+aufsage
+aufsagen
+aufsagend
+aufsagende
+aufsagendem
+aufsagenden
+aufsagender
+aufsagendes
+aufsagst
+aufsagt
+aufsagte
+aufsagten
+aufsagtest
+aufsagtet
+aufsammele
+aufsammeln
+aufsammelnd
+aufsammelnde
+aufsammelndem
+aufsammelnden
+aufsammelnder
+aufsammelndes
+aufsammelst
+aufsammelt
+aufsammelte
+aufsammelten
+aufsammeltest
+aufsammeltet
+aufsammle
+aufsauge
+aufsaugen
+aufsaugend
+aufsaugende
+aufsaugendem
+aufsaugenden
+aufsaugender
+aufsaugendes
+aufsaugst
+aufsaugt
+aufsaugte
+aufsaugten
+aufsaugtest
+aufsaugtet
+aufschaue
+aufschauen
+aufschauend
+aufschauende
+aufschauendem
+aufschauenden
+aufschauender
+aufschauendes
+aufschaust
+aufschaut
+aufschaute
+aufschauten
+aufschautest
+aufschautet
+aufscheuche
+aufscheuchen
+aufscheuchend
+aufscheuchende
+aufscheuchendem
+aufscheuchenden
+aufscheuchender
+aufscheuchendes
+aufscheuchst
+aufscheucht
+aufscheuchte
+aufscheuchten
+aufscheuchtest
+aufscheuchtet
+aufschichte
+aufschichten
+aufschichtend
+aufschichtende
+aufschichtendem
+aufschichtenden
+aufschichtender
+aufschichtendes
+aufschichtest
+aufschichtet
+aufschichtete
+aufschichteten
+aufschichtetest
+aufschichtetet
+aufschiebe
+aufschieben
+aufschiebend
+aufschiebende
+aufschiebendem
+aufschiebenden
+aufschiebender
+aufschiebendes
+aufschiebst
+aufschiebt
+aufschlage
+aufschlagen
+aufschlagend
+aufschlagende
+aufschlagendem
+aufschlagenden
+aufschlagender
+aufschlagendes
+aufschlagt
+aufschließe
+aufschließen
+aufschließend
+aufschließende
+aufschließendem
+aufschließenden
+aufschließender
+aufschließendes
+aufschließest
+aufschließt
+aufschlitze
+aufschlitzen
+aufschlitzest
+aufschlitzt
+aufschlitzte
+aufschlitzten
+aufschlitztest
+aufschlitztet
+aufschlussreich
+aufschlussreiche
+aufschlussreichem
+aufschlussreichen
+aufschlussreicher
+aufschlussreichere
+aufschlussreicherem
+aufschlussreicheren
+aufschlussreicherer
+aufschlussreicheres
+aufschlussreiches
+aufschlussreichste
+aufschlussreichstem
+aufschlussreichsten
+aufschlussreichster
+aufschlussreichstes
+aufschlüssele
+aufschlüsseln
+aufschlüsselst
+aufschlüsselt
+aufschlüsselte
+aufschlüsselten
+aufschlüsseltest
+aufschlüsseltet
+aufschlüssle
+aufschnappe
+aufschnappen
+aufschnappend
+aufschnappende
+aufschnappendem
+aufschnappenden
+aufschnappender
+aufschnappendes
+aufschnappst
+aufschnappt
+aufschnappte
+aufschnappten
+aufschnapptest
+aufschnapptet
+aufschneide
+aufschneiden
+aufschneidend
+aufschneidende
+aufschneidendem
+aufschneidenden
+aufschneidender
+aufschneidendes
+aufschneidest
+aufschneidet
+aufschnüre
+aufschnüren
+aufschnürend
+aufschnürende
+aufschnürendem
+aufschnürenden
+aufschnürender
+aufschnürendes
+aufschnürst
+aufschnürt
+aufschnürte
+aufschnürten
+aufschnürtest
+aufschnürtet
+aufschraube
+aufschrauben
+aufschraubend
+aufschraubende
+aufschraubendem
+aufschraubenden
+aufschraubender
+aufschraubendes
+aufschraubst
+aufschraubt
+aufschraubte
+aufschraubten
+aufschraubtest
+aufschraubtet
+aufschrecke
+aufschrecken
+aufschreckend
+aufschreckende
+aufschreckendem
+aufschreckenden
+aufschreckender
+aufschreckendes
+aufschreckst
+aufschreckt
+aufschreckte
+aufschreckten
+aufschrecktest
+aufschrecktet
+aufschreibe
+aufschreiben
+aufschreibend
+aufschreibende
+aufschreibendem
+aufschreibenden
+aufschreibender
+aufschreibendes
+aufschreibst
+aufschreibt
+aufschreie
+aufschreien
+aufschreiend
+aufschreiende
+aufschreiendem
+aufschreienden
+aufschreiender
+aufschreiendes
+aufschreist
+aufschreit
+aufschrie
+aufschrieen
+aufschrien
+aufschriest
+aufschriet
+aufschwinge
+aufschwingen
+aufschwingend
+aufschwingende
+aufschwingendem
+aufschwingenden
+aufschwingender
+aufschwingendes
+aufschwingst
+aufschwingt
+aufschürfe
+aufschürfen
+aufschürfend
+aufschürfende
+aufschürfendem
+aufschürfenden
+aufschürfender
+aufschürfendes
+aufschürfst
+aufschürft
+aufschürfte
+aufschürften
+aufschürftest
+aufschürftet
+aufschüttele
+aufschütteln
+aufschüttelnd
+aufschüttelnde
+aufschüttelndem
+aufschüttelnden
+aufschüttelnder
+aufschüttelndes
+aufschüttelst
+aufschüttelt
+aufschüttelte
+aufschüttelten
+aufschütteltest
+aufschütteltet
+aufschüttle
+aufsehe
+aufsehen
+aufsehend
+aufsehende
+aufsehendem
+aufsehenden
+aufsehender
+aufsehendes
+aufseht
+aufseiten
+aufsetze
+aufsetzen
+aufsetzend
+aufsetzende
+aufsetzendem
+aufsetzenden
+aufsetzender
+aufsetzendes
+aufsetzest
+aufsetzt
+aufsetzte
+aufsetzten
+aufsetztest
+aufsetztet
+aufsiehst
+aufsieht
+aufsitze
+aufsitzen
+aufsitzend
+aufsitzende
+aufsitzendem
+aufsitzenden
+aufsitzender
+aufsitzendes
+aufsitzest
+aufsitzt
+aufspalte
+aufspalten
+aufspaltend
+aufspaltende
+aufspaltendem
+aufspaltenden
+aufspaltender
+aufspaltendes
+aufspaltest
+aufspaltet
+aufspaltete
+aufspalteten
+aufspaltetest
+aufspaltetet
+aufspanne
+aufspannen
+aufspannend
+aufspannende
+aufspannendem
+aufspannenden
+aufspannender
+aufspannendes
+aufspannst
+aufspannt
+aufspannte
+aufspannten
+aufspanntest
+aufspanntet
+aufspare
+aufsparen
+aufsparend
+aufsparende
+aufsparendem
+aufsparenden
+aufsparender
+aufsparendes
+aufsparst
+aufspart
+aufsparte
+aufsparten
+aufspartest
+aufspartet
+aufsperre
+aufsperren
+aufsperrend
+aufsperrende
+aufsperrendem
+aufsperrenden
+aufsperrender
+aufsperrendes
+aufsperrst
+aufsperrt
+aufsperrte
+aufsperrten
+aufsperrtest
+aufsperrtet
+aufspiele
+aufspielen
+aufspielend
+aufspielende
+aufspielendem
+aufspielenden
+aufspielender
+aufspielendes
+aufspielst
+aufspielt
+aufspielte
+aufspielten
+aufspieltest
+aufspieltet
+aufspieße
+aufspießen
+aufspießend
+aufspießende
+aufspießendem
+aufspießenden
+aufspießender
+aufspießendes
+aufspießest
+aufspießt
+aufspießte
+aufspießten
+aufspießtest
+aufspießtet
+aufsprang
+aufsprangen
+aufsprangst
+aufsprangt
+aufspringe
+aufspringen
+aufspringend
+aufspringende
+aufspringendem
+aufspringenden
+aufspringender
+aufspringendes
+aufspringst
+aufspringt
+aufspüre
+aufspüren
+aufspürend
+aufspürende
+aufspürendem
+aufspürenden
+aufspürender
+aufspürendes
+aufspürst
+aufspürt
+aufspürte
+aufspürten
+aufspürtest
+aufspürtet
+aufstachele
+aufstacheln
+aufstachelnd
+aufstachelnde
+aufstachelndem
+aufstachelnden
+aufstachelnder
+aufstachelndes
+aufstachelst
+aufstachelt
+aufstachelte
+aufstachelten
+aufstacheltest
+aufstacheltet
+aufstachle
+aufstampfe
+aufstampfen
+aufstampfend
+aufstampfende
+aufstampfendem
+aufstampfenden
+aufstampfender
+aufstampfendes
+aufstampfst
+aufstampft
+aufstampfte
+aufstampften
+aufstampftest
+aufstampftet
+aufstand
+aufstanden
+aufstandest
+aufstandet
+aufstandst
+aufstapele
+aufstapeln
+aufstapelnd
+aufstapelnde
+aufstapelndem
+aufstapelnden
+aufstapelnder
+aufstapelndes
+aufstapelst
+aufstapelt
+aufstapelte
+aufstapelten
+aufstapeltest
+aufstapeltet
+aufstaple
+aufstecke
+aufstecken
+aufsteckend
+aufsteckende
+aufsteckendem
+aufsteckenden
+aufsteckender
+aufsteckendes
+aufsteckst
+aufsteckt
+aufsteckte
+aufsteckten
+aufstecktest
+aufstecktet
+aufstehe
+aufstehen
+aufstehend
+aufstehende
+aufstehendem
+aufstehenden
+aufstehender
+aufstehendes
+aufstehst
+aufsteht
+aufsteige
+aufsteigen
+aufsteigend
+aufsteigende
+aufsteigendem
+aufsteigenden
+aufsteigender
+aufsteigendes
+aufsteigst
+aufsteigt
+aufstellbar
+aufstellbare
+aufstellbarem
+aufstellbaren
+aufstellbarer
+aufstellbares
+aufstelle
+aufstellen
+aufstellend
+aufstellende
+aufstellendem
+aufstellenden
+aufstellender
+aufstellendes
+aufstellst
+aufstellt
+aufstellte
+aufstellten
+aufstelltest
+aufstelltet
+aufstocke
+aufstocken
+aufstockend
+aufstockende
+aufstockendem
+aufstockenden
+aufstockender
+aufstockendes
+aufstockst
+aufstockt
+aufstockte
+aufstockten
+aufstocktest
+aufstocktet
+aufstockungsfähig
+aufstockungsfähige
+aufstockungsfähigem
+aufstockungsfähigen
+aufstockungsfähiger
+aufstockungsfähiges
+aufstoße
+aufstoßen
+aufstoßend
+aufstoßende
+aufstoßendem
+aufstoßenden
+aufstoßender
+aufstoßendes
+aufstoßt
+aufstrebe
+aufstreben
+aufstrebend
+aufstrebende
+aufstrebendem
+aufstrebenden
+aufstrebender
+aufstrebendes
+aufstrebst
+aufstrebt
+aufstrebte
+aufstrebten
+aufstrebtest
+aufstrebtet
+aufstreiche
+aufstreichen
+aufstreichend
+aufstreichende
+aufstreichendem
+aufstreichenden
+aufstreichender
+aufstreichendes
+aufstreichst
+aufstreicht
+aufständisch
+aufständische
+aufständischem
+aufständischen
+aufständischer
+aufständisches
+aufstöbere
+aufstöbern
+aufstöbernd
+aufstöbernde
+aufstöberndem
+aufstöbernden
+aufstöbernder
+aufstöberndes
+aufstöberst
+aufstöbert
+aufstöberte
+aufstöberten
+aufstöbertest
+aufstöbertet
+aufstöbre
+aufstöhne
+aufstöhnen
+aufstöhnend
+aufstöhnende
+aufstöhnendem
+aufstöhnenden
+aufstöhnender
+aufstöhnendes
+aufstöhnst
+aufstöhnt
+aufstöhnte
+aufstöhnten
+aufstöhntest
+aufstöhntet
+aufstütze
+aufstützen
+aufstützend
+aufstützende
+aufstützendem
+aufstützenden
+aufstützender
+aufstützendes
+aufstützest
+aufstützt
+aufstützte
+aufstützten
+aufstütztest
+aufstütztet
+aufsuche
+aufsuchen
+aufsuchend
+aufsuchende
+aufsuchendem
+aufsuchenden
+aufsuchender
+aufsuchendes
+aufsuchst
+aufsucht
+aufsuchte
+aufsuchten
+aufsuchtest
+aufsuchtet
+aufsummiere
+aufsummieren
+aufsummierend
+aufsummierende
+aufsummierendem
+aufsummierenden
+aufsummierender
+aufsummierendes
+aufsummierst
+aufsummiert
+aufsummierte
+aufsummiertem
+aufsummierten
+aufsummierter
+aufsummiertes
+aufsummiertest
+aufsummiertet
+aufsässig
+aufsässige
+aufsässigem
+aufsässigen
+aufsässiger
+aufsässigere
+aufsässigerem
+aufsässigeren
+aufsässigerer
+aufsässigeres
+aufsässiges
+aufsässigste
+aufsässigstem
+aufsässigsten
+aufsässigster
+aufsässigstes
+auftanke
+auftanken
+auftankend
+auftankende
+auftankendem
+auftankenden
+auftankender
+auftankendes
+auftankst
+auftankt
+auftankte
+auftankten
+auftanktest
+auftanktet
+auftat
+auftaten
+auftatest
+auftatet
+auftatst
+auftauche
+auftauchen
+auftauchend
+auftauchende
+auftauchendem
+auftauchenden
+auftauchender
+auftauchendes
+auftauchst
+auftaucht
+auftauchte
+auftauchten
+auftauchtest
+auftauchtet
+auftaue
+auftauen
+auftauend
+auftauende
+auftauendem
+auftauenden
+auftauender
+auftauendes
+auftaust
+auftaut
+auftaute
+auftauten
+auftautest
+auftautet
+aufteilbar
+aufteilbare
+aufteilbarem
+aufteilbaren
+aufteilbarer
+aufteilbares
+aufteile
+aufteilen
+aufteilend
+aufteilende
+aufteilendem
+aufteilenden
+aufteilender
+aufteilendes
+aufteilst
+aufteilt
+aufteilte
+aufteilten
+aufteiltest
+aufteiltet
+auftische
+auftischen
+auftischend
+auftischende
+auftischendem
+auftischenden
+auftischender
+auftischendes
+auftischest
+auftischst
+auftischt
+auftischte
+auftischten
+auftischtest
+auftischtet
+auftrage
+auftragen
+auftragend
+auftragende
+auftragendem
+auftragenden
+auftragender
+auftragendes
+auftragsgemäß
+auftragsgemäße
+auftragsgemäßem
+auftragsgemäßen
+auftragsgemäßer
+auftragsgemäßes
+auftragt
+auftrat
+auftraten
+auftratest
+auftratet
+auftratst
+auftreffe
+auftreffen
+auftreffend
+auftreffende
+auftreffendem
+auftreffenden
+auftreffender
+auftreffendes
+auftrefft
+auftreibe
+auftreiben
+auftreibend
+auftreibende
+auftreibendem
+auftreibenden
+auftreibender
+auftreibendes
+auftreibst
+auftreibt
+auftrenne
+auftrennen
+auftrennend
+auftrennende
+auftrennendem
+auftrennenden
+auftrennender
+auftrennendes
+auftrennst
+auftrennt
+auftrennte
+auftrennten
+auftrenntest
+auftrenntet
+auftrete
+auftreten
+auftretend
+auftretende
+auftretendem
+auftretenden
+auftretender
+auftretendes
+auftretet
+auftritt
+auftrittst
+auftrumpfe
+auftrumpfen
+auftrumpfend
+auftrumpfende
+auftrumpfendem
+auftrumpfenden
+auftrumpfender
+auftrumpfendes
+auftrumpfst
+auftrumpft
+auftrumpfte
+auftrumpften
+auftrumpftest
+auftrumpftet
+aufträgst
+aufträgt
+auftue
+auftun
+auftust
+auftut
+aufwache
+aufwachen
+aufwachend
+aufwachende
+aufwachendem
+aufwachenden
+aufwachender
+aufwachendes
+aufwachse
+aufwachsen
+aufwachsend
+aufwachsende
+aufwachsendem
+aufwachsenden
+aufwachsender
+aufwachsendes
+aufwachst
+aufwacht
+aufwachte
+aufwachten
+aufwachtest
+aufwachtet
+aufwalle
+aufwallen
+aufwallend
+aufwallende
+aufwallendem
+aufwallenden
+aufwallender
+aufwallendes
+aufwallst
+aufwallt
+aufwallte
+aufwallten
+aufwalltest
+aufwalltet
+aufwarte
+aufwarten
+aufwartend
+aufwartende
+aufwartendem
+aufwartenden
+aufwartender
+aufwartendes
+aufwartest
+aufwartet
+aufwartete
+aufwarteten
+aufwartetest
+aufwartetet
+aufwecke
+aufwecken
+aufweckend
+aufweckende
+aufweckendem
+aufweckenden
+aufweckender
+aufweckendes
+aufweckst
+aufweckt
+aufweckte
+aufweckten
+aufwecktest
+aufwecktet
+aufweiche
+aufweichen
+aufweichend
+aufweichende
+aufweichendem
+aufweichenden
+aufweichender
+aufweichendes
+aufweichst
+aufweicht
+aufweichte
+aufweichten
+aufweichtest
+aufweichtet
+aufweise
+aufweisen
+aufweisend
+aufweisende
+aufweisendem
+aufweisenden
+aufweisender
+aufweisendes
+aufweisest
+aufweist
+aufwende
+aufwenden
+aufwendend
+aufwendende
+aufwendendem
+aufwendenden
+aufwendender
+aufwendendes
+aufwendest
+aufwendet
+aufwendete
+aufwendeten
+aufwendetest
+aufwendetet
+aufwendig
+aufwendige
+aufwendigem
+aufwendigen
+aufwendiger
+aufwendigere
+aufwendigerem
+aufwendigeren
+aufwendigerer
+aufwendigeres
+aufwendiges
+aufwendigste
+aufwendigstem
+aufwendigsten
+aufwendigster
+aufwendigstes
+aufwerfe
+aufwerfen
+aufwerfend
+aufwerfende
+aufwerfendem
+aufwerfenden
+aufwerfender
+aufwerfendes
+aufwerft
+aufwerte
+aufwerten
+aufwertend
+aufwertende
+aufwertendem
+aufwertenden
+aufwertender
+aufwertendes
+aufwertest
+aufwertet
+aufwertete
+aufwerteten
+aufwertetest
+aufwertetet
+aufwickele
+aufwickeln
+aufwickelnd
+aufwickelnde
+aufwickelndem
+aufwickelnden
+aufwickelnder
+aufwickelndes
+aufwickelst
+aufwickelt
+aufwickelte
+aufwickelten
+aufwickeltest
+aufwickeltet
+aufwickle
+aufwiege
+aufwiegele
+aufwiegeln
+aufwiegelnd
+aufwiegelnde
+aufwiegelndem
+aufwiegelnden
+aufwiegelnder
+aufwiegelndes
+aufwiegelst
+aufwiegelt
+aufwiegelte
+aufwiegelten
+aufwiegeltest
+aufwiegeltet
+aufwiegen
+aufwiegend
+aufwiegende
+aufwiegendem
+aufwiegenden
+aufwiegender
+aufwiegendes
+aufwiegle
+aufwiegst
+aufwiegt
+aufwies
+aufwiesen
+aufwiesest
+aufwiest
+aufwirbele
+aufwirbeln
+aufwirbelnd
+aufwirbelnde
+aufwirbelndem
+aufwirbelnden
+aufwirbelnder
+aufwirbelndes
+aufwirbelst
+aufwirbelt
+aufwirbelte
+aufwirbelten
+aufwirbeltest
+aufwirbeltet
+aufwirble
+aufwische
+aufwischen
+aufwischend
+aufwischende
+aufwischendem
+aufwischenden
+aufwischender
+aufwischendes
+aufwischest
+aufwischst
+aufwischt
+aufwischte
+aufwischten
+aufwischtest
+aufwischtet
+aufwändig
+aufwändige
+aufwändigem
+aufwändigen
+aufwändiger
+aufwändigere
+aufwändigerem
+aufwändigeren
+aufwändigerer
+aufwändigeres
+aufwändiges
+aufwändigste
+aufwändigstem
+aufwändigsten
+aufwändigster
+aufwändigstes
+aufwärme
+aufwärmen
+aufwärmend
+aufwärmende
+aufwärmendem
+aufwärmenden
+aufwärmender
+aufwärmendes
+aufwärmst
+aufwärmt
+aufwärmte
+aufwärmten
+aufwärmtest
+aufwärmtet
+aufwärts
+aufwühle
+aufwühlen
+aufwühlend
+aufwühlende
+aufwühlendem
+aufwühlenden
+aufwühlender
+aufwühlendes
+aufwühlst
+aufwühlt
+aufwühlte
+aufwühlten
+aufwühltest
+aufwühltet
+aufzehre
+aufzehren
+aufzehrend
+aufzehrende
+aufzehrendem
+aufzehrenden
+aufzehrender
+aufzehrendes
+aufzehrst
+aufzehrt
+aufzehrte
+aufzehrten
+aufzehrtest
+aufzehrtet
+aufzeichne
+aufzeichnen
+aufzeichnend
+aufzeichnende
+aufzeichnendem
+aufzeichnenden
+aufzeichnender
+aufzeichnendes
+aufzeichnest
+aufzeichnet
+aufzeichnete
+aufzeichneten
+aufzeichnetest
+aufzeichnetet
+aufzeige
+aufzeigen
+aufzeigend
+aufzeigende
+aufzeigendem
+aufzeigenden
+aufzeigender
+aufzeigendes
+aufzeigst
+aufzeigt
+aufzeigte
+aufzeigten
+aufzeigtest
+aufzeigtet
+aufziehe
+aufziehen
+aufziehend
+aufziehende
+aufziehendem
+aufziehenden
+aufziehender
+aufziehendes
+aufziehst
+aufzieht
+aufzubauen
+aufzubauend
+aufzubauende
+aufzubauendem
+aufzubauenden
+aufzubauender
+aufzubauendes
+aufzubessern
+aufzubessernd
+aufzubessernde
+aufzubesserndem
+aufzubessernden
+aufzubessernder
+aufzubesserndes
+aufzubieten
+aufzubietend
+aufzubietende
+aufzubietendem
+aufzubietenden
+aufzubietender
+aufzubietendes
+aufzubinden
+aufzubindend
+aufzubindende
+aufzubindendem
+aufzubindenden
+aufzubindender
+aufzubindendes
+aufzublasen
+aufzublasend
+aufzublasende
+aufzublasendem
+aufzublasenden
+aufzublasender
+aufzublasendes
+aufzubohren
+aufzubohrend
+aufzubohrende
+aufzubohrendem
+aufzubohrenden
+aufzubohrender
+aufzubohrendes
+aufzubrechen
+aufzubrechend
+aufzubrechende
+aufzubrechendem
+aufzubrechenden
+aufzubrechender
+aufzubrechendes
+aufzubringen
+aufzubringend
+aufzubringende
+aufzubringendem
+aufzubringenden
+aufzubringender
+aufzubringendes
+aufzubürden
+aufzubürdend
+aufzubürdende
+aufzubürdendem
+aufzubürdenden
+aufzubürdender
+aufzubürdendes
+aufzudecken
+aufzudeckend
+aufzudeckende
+aufzudeckendem
+aufzudeckenden
+aufzudeckender
+aufzudeckendes
+aufzudrehen
+aufzudrehend
+aufzudrehende
+aufzudrehendem
+aufzudrehenden
+aufzudrehender
+aufzudrehendes
+aufzudrücken
+aufzudrückend
+aufzudrückende
+aufzudrückendem
+aufzudrückenden
+aufzudrückender
+aufzudrückendes
+aufzuerlegen
+aufzuerlegend
+aufzuerlegende
+aufzuerlegendem
+aufzuerlegenden
+aufzuerlegender
+aufzuerlegendes
+aufzufallen
+aufzufangen
+aufzufangend
+aufzufangende
+aufzufangendem
+aufzufangenden
+aufzufangender
+aufzufangendes
+aufzufassen
+aufzufassend
+aufzufassende
+aufzufassendem
+aufzufassenden
+aufzufassender
+aufzufassendes
+aufzufinden
+aufzufindend
+aufzufindende
+aufzufindendem
+aufzufindenden
+aufzufindender
+aufzufindendes
+aufzufordern
+aufzufordernd
+aufzufordernde
+aufzuforderndem
+aufzufordernden
+aufzufordernder
+aufzuforderndes
+aufzufrischen
+aufzufrischend
+aufzufrischende
+aufzufrischendem
+aufzufrischenden
+aufzufrischender
+aufzufrischendes
+aufzuführen
+aufzuführend
+aufzuführende
+aufzuführendem
+aufzuführenden
+aufzuführender
+aufzuführendes
+aufzugeben
+aufzugebend
+aufzugebende
+aufzugebendem
+aufzugebenden
+aufzugebender
+aufzugebendes
+aufzugliedern
+aufzugliedernd
+aufzugliedernde
+aufzugliederndem
+aufzugliedernden
+aufzugliedernder
+aufzugliederndes
+aufzugreifen
+aufzugreifend
+aufzugreifende
+aufzugreifendem
+aufzugreifenden
+aufzugreifender
+aufzugreifendes
+aufzuhalten
+aufzuhaltend
+aufzuhaltende
+aufzuhaltendem
+aufzuhaltenden
+aufzuhaltender
+aufzuhaltendes
+aufzuheben
+aufzuhebend
+aufzuhebende
+aufzuhebendem
+aufzuhebenden
+aufzuhebender
+aufzuhebendes
+aufzuheitern
+aufzuheiternd
+aufzuheiternde
+aufzuheiterndem
+aufzuheiternden
+aufzuheiternder
+aufzuheiterndes
+aufzuhelfen
+aufzuhelfend
+aufzuhelfende
+aufzuhelfendem
+aufzuhelfenden
+aufzuhelfender
+aufzuhelfendes
+aufzuholen
+aufzuholend
+aufzuholende
+aufzuholendem
+aufzuholenden
+aufzuholender
+aufzuholendes
+aufzuhängen
+aufzuhängend
+aufzuhängende
+aufzuhängendem
+aufzuhängenden
+aufzuhängender
+aufzuhängendes
+aufzukaufen
+aufzukaufend
+aufzukaufende
+aufzukaufendem
+aufzukaufenden
+aufzukaufender
+aufzukaufendes
+aufzuklären
+aufzuklärend
+aufzuklärende
+aufzuklärendem
+aufzuklärenden
+aufzuklärender
+aufzuklärendes
+aufzukommen
+aufzulegen
+aufzulegend
+aufzulegende
+aufzulegendem
+aufzulegenden
+aufzulegender
+aufzulegendes
+aufzulehnen
+aufzulesen
+aufzulesend
+aufzulesende
+aufzulesendem
+aufzulesenden
+aufzulesender
+aufzulesendes
+aufzulockern
+aufzulockernd
+aufzulockernde
+aufzulockerndem
+aufzulockernden
+aufzulockernder
+aufzulockerndes
+aufzulösen
+aufzulösend
+aufzulösende
+aufzulösendem
+aufzulösenden
+aufzulösender
+aufzulösendes
+aufzunehmen
+aufzunehmend
+aufzunehmende
+aufzunehmendem
+aufzunehmenden
+aufzunehmender
+aufzunehmendes
+aufzuopfern
+aufzuopfernd
+aufzuopfernde
+aufzuopferndem
+aufzuopfernden
+aufzuopfernder
+aufzuopferndes
+aufzupolieren
+aufzupolierend
+aufzupolierende
+aufzupolierendem
+aufzupolierenden
+aufzupolierender
+aufzupolierendes
+aufzuprägen
+aufzuprägend
+aufzuprägende
+aufzuprägendem
+aufzuprägenden
+aufzuprägender
+aufzuprägendes
+aufzurechnen
+aufzurechnend
+aufzurechnende
+aufzurechnendem
+aufzurechnenden
+aufzurechnender
+aufzurechnendes
+aufzuregen
+aufzuregend
+aufzuregende
+aufzuregendem
+aufzuregenden
+aufzuregender
+aufzuregendes
+aufzureißen
+aufzureißend
+aufzureißende
+aufzureißendem
+aufzureißenden
+aufzureißender
+aufzureißendes
+aufzurichten
+aufzurichtend
+aufzurichtende
+aufzurichtendem
+aufzurichtenden
+aufzurichtender
+aufzurichtendes
+aufzurollen
+aufzurollend
+aufzurollende
+aufzurollendem
+aufzurollenden
+aufzurollender
+aufzurollendes
+aufzurufen
+aufzurufend
+aufzurufende
+aufzurufendem
+aufzurufenden
+aufzurufender
+aufzurufendes
+aufzuräumen
+aufzuräumend
+aufzuräumende
+aufzuräumendem
+aufzuräumenden
+aufzuräumender
+aufzuräumendes
+aufzurücken
+aufzurückend
+aufzurückende
+aufzurückendem
+aufzurückenden
+aufzurückender
+aufzurückendes
+aufzurüsten
+aufzurüstend
+aufzurüstende
+aufzurüstendem
+aufzurüstenden
+aufzurüstender
+aufzurüstendes
+aufzuschieben
+aufzuschiebend
+aufzuschiebende
+aufzuschiebendem
+aufzuschiebenden
+aufzuschiebender
+aufzuschiebendes
+aufzuschließen
+aufzuschließend
+aufzuschließende
+aufzuschließendem
+aufzuschließenden
+aufzuschließender
+aufzuschließendes
+aufzuschlüsseln
+aufzuschlüsselnd
+aufzuschlüsselnde
+aufzuschlüsselndem
+aufzuschlüsselnden
+aufzuschlüsselnder
+aufzuschlüsselndes
+aufzuschnüren
+aufzuschnürend
+aufzuschnürende
+aufzuschnürendem
+aufzuschnürenden
+aufzuschnürender
+aufzuschnürendes
+aufzuschreiben
+aufzuschreibend
+aufzuschreibende
+aufzuschreibendem
+aufzuschreibenden
+aufzuschreibender
+aufzuschreibendes
+aufzuspalten
+aufzuspaltend
+aufzuspaltende
+aufzuspaltendem
+aufzuspaltenden
+aufzuspaltender
+aufzuspaltendes
+aufzuspielen
+aufzuspielend
+aufzuspielende
+aufzuspielendem
+aufzuspielenden
+aufzuspielender
+aufzuspielendes
+aufzuspüren
+aufzuspürend
+aufzuspürende
+aufzuspürendem
+aufzuspürenden
+aufzuspürender
+aufzuspürendes
+aufzustauen
+aufzustauend
+aufzustauende
+aufzustauendem
+aufzustauenden
+aufzustauender
+aufzustauendes
+aufzustehen
+aufzustellen
+aufzustellend
+aufzustellende
+aufzustellendem
+aufzustellenden
+aufzustellender
+aufzustellendes
+aufzustocken
+aufzustockend
+aufzustockende
+aufzustockendem
+aufzustockenden
+aufzustockender
+aufzustockendes
+aufzustöbern
+aufzustöbernd
+aufzustöbernde
+aufzustöberndem
+aufzustöbernden
+aufzustöbernder
+aufzustöberndes
+aufzusuchen
+aufzusuchend
+aufzusuchende
+aufzusuchendem
+aufzusuchenden
+aufzusuchender
+aufzusuchendes
+aufzutauchen
+aufzuteilen
+aufzuteilend
+aufzuteilende
+aufzuteilendem
+aufzuteilenden
+aufzuteilender
+aufzuteilendes
+aufzutragen
+aufzutragend
+aufzutragende
+aufzutragendem
+aufzutragenden
+aufzutragender
+aufzutragendes
+aufzutrennen
+aufzutrennend
+aufzutrennende
+aufzutrennendem
+aufzutrennenden
+aufzutrennender
+aufzutrennendes
+aufzutreten
+aufzutun
+aufzuwachsen
+aufzuwecken
+aufzuweckend
+aufzuweckende
+aufzuweckendem
+aufzuweckenden
+aufzuweckender
+aufzuweckendes
+aufzuweisen
+aufzuweisend
+aufzuweisende
+aufzuweisendem
+aufzuweisenden
+aufzuweisender
+aufzuweisendes
+aufzuweiten
+aufzuweitend
+aufzuweitende
+aufzuweitendem
+aufzuweitenden
+aufzuweitender
+aufzuweitendes
+aufzuwerfen
+aufzuwerfend
+aufzuwerfende
+aufzuwerfendem
+aufzuwerfenden
+aufzuwerfender
+aufzuwerfendes
+aufzuwiegeln
+aufzuwiegelnd
+aufzuwiegelnde
+aufzuwiegelndem
+aufzuwiegelnden
+aufzuwiegelnder
+aufzuwiegelndes
+aufzuwiegen
+aufzuwiegend
+aufzuwiegende
+aufzuwiegendem
+aufzuwiegenden
+aufzuwiegender
+aufzuwiegendes
+aufzuwärmen
+aufzuwärmend
+aufzuwärmende
+aufzuwärmendem
+aufzuwärmenden
+aufzuwärmender
+aufzuwärmendes
+aufzuzeichnen
+aufzuzeichnend
+aufzuzeichnende
+aufzuzeichnendem
+aufzuzeichnenden
+aufzuzeichnender
+aufzuzeichnendes
+aufzuzeigen
+aufzuzeigend
+aufzuzeigende
+aufzuzeigendem
+aufzuzeigenden
+aufzuzeigender
+aufzuzeigendes
+aufzuziehen
+aufzuziehend
+aufzuziehende
+aufzuziehendem
+aufzuziehenden
+aufzuziehender
+aufzuziehendes
+aufzuzählen
+aufzuzählend
+aufzuzählende
+aufzuzählendem
+aufzuzählenden
+aufzuzählender
+aufzuzählendes
+aufzwang
+aufzwangen
+aufzwangst
+aufzwangt
+aufzwinge
+aufzwingen
+aufzwingend
+aufzwingende
+aufzwingendem
+aufzwingenden
+aufzwingender
+aufzwingendes
+aufzwingst
+aufzwingt
+aufzähle
+aufzählen
+aufzählend
+aufzählende
+aufzählendem
+aufzählenden
+aufzählender
+aufzählendes
+aufzählst
+aufzählt
+aufzählte
+aufzählten
+aufzähltest
+aufzähltet
+aufzüchte
+aufzüchten
+aufzüchtest
+aufzüchtet
+aufzüchtete
+aufzüchteten
+aufzüchtetest
+aufzüchtetet
+augenblicklich
+augenblickliche
+augenblicklichem
+augenblicklichen
+augenblicklicher
+augenblickliches
+augenfällig
+augenfällige
+augenfälligem
+augenfälligen
+augenfälliger
+augenfälligere
+augenfälligerem
+augenfälligeren
+augenfälligerer
+augenfälligeres
+augenfälliges
+augenfälligste
+augenfälligstem
+augenfälligsten
+augenfälligster
+augenfälligstes
+augenlos
+augenlose
+augenlosem
+augenlosen
+augenloser
+augenloses
+augenscheinlich
+augenscheinliche
+augenscheinlichem
+augenscheinlichen
+augenscheinlicher
+augenscheinliches
+aus
+ausarbeite
+ausarbeiten
+ausarbeitend
+ausarbeitende
+ausarbeitendem
+ausarbeitenden
+ausarbeitender
+ausarbeitendes
+ausarbeitest
+ausarbeitet
+ausarbeitete
+ausarbeiteten
+ausarbeitetest
+ausarbeitetet
+ausarte
+ausarten
+ausartend
+ausartende
+ausartendem
+ausartenden
+ausartender
+ausartendes
+ausartest
+ausartet
+ausartete
+ausarteten
+ausartetest
+ausartetet
+ausatme
+ausatmen
+ausatmend
+ausatmende
+ausatmendem
+ausatmenden
+ausatmender
+ausatmendes
+ausatmest
+ausatmet
+ausatmete
+ausatmeten
+ausatmetest
+ausatmetet
+ausbade
+ausbaden
+ausbadend
+ausbadende
+ausbadendem
+ausbadenden
+ausbadender
+ausbadendes
+ausbadest
+ausbadet
+ausbadete
+ausbadeten
+ausbadetest
+ausbadetet
+ausbalanciere
+ausbalancieren
+ausbalancierend
+ausbalancierende
+ausbalancierendem
+ausbalancierenden
+ausbalancierender
+ausbalancierendes
+ausbalancierst
+ausbalanciert
+ausbalancierte
+ausbalanciertem
+ausbalancierten
+ausbalancierter
+ausbalanciertes
+ausbalanciertest
+ausbalanciertet
+ausbaubar
+ausbaubare
+ausbaubarem
+ausbaubaren
+ausbaubarer
+ausbaubares
+ausbaue
+ausbaueigen
+ausbaueigene
+ausbaueigenem
+ausbaueigenen
+ausbaueigener
+ausbaueigenes
+ausbauen
+ausbauend
+ausbauende
+ausbauendem
+ausbauenden
+ausbauender
+ausbauendes
+ausbaufähig
+ausbaufähige
+ausbaufähigem
+ausbaufähigen
+ausbaufähiger
+ausbaufähigere
+ausbaufähigerem
+ausbaufähigeren
+ausbaufähigerer
+ausbaufähigeres
+ausbaufähiges
+ausbaufähigste
+ausbaufähigstem
+ausbaufähigsten
+ausbaufähigster
+ausbaufähigstes
+ausbaulokal
+ausbaulokale
+ausbaulokalem
+ausbaulokalen
+ausbaulokaler
+ausbaulokales
+ausbaust
+ausbaut
+ausbaute
+ausbauten
+ausbautest
+ausbautet
+ausbessere
+ausbessern
+ausbessernd
+ausbessernde
+ausbesserndem
+ausbessernden
+ausbessernder
+ausbesserndes
+ausbesserst
+ausbessert
+ausbesserte
+ausbesserten
+ausbessertest
+ausbessertet
+ausbessre
+ausbeute
+ausbeuten
+ausbeutend
+ausbeutende
+ausbeutendem
+ausbeutenden
+ausbeutender
+ausbeutendes
+ausbeuterisch
+ausbeuterische
+ausbeuterischem
+ausbeuterischen
+ausbeuterischer
+ausbeuterisches
+ausbeutest
+ausbeutet
+ausbeutete
+ausbeuteten
+ausbeutetest
+ausbeutetet
+ausbezahle
+ausbezahlen
+ausbezahlst
+ausbezahlt
+ausbezahlte
+ausbezahltem
+ausbezahlten
+ausbezahlter
+ausbezahltes
+ausbezahltest
+ausbezahltet
+ausbilde
+ausbilden
+ausbildend
+ausbildende
+ausbildendem
+ausbildenden
+ausbildender
+ausbildendes
+ausbildest
+ausbildet
+ausbildete
+ausbildeten
+ausbildetest
+ausbildetet
+ausbitte
+ausbitten
+ausbittend
+ausbittende
+ausbittendem
+ausbittenden
+ausbittender
+ausbittendes
+ausbittest
+ausbittet
+ausblase
+ausblasen
+ausblasend
+ausblasende
+ausblasendem
+ausblasenden
+ausblasender
+ausblasendes
+ausblast
+ausbleibe
+ausbleiben
+ausbleibend
+ausbleibende
+ausbleibendem
+ausbleibenden
+ausbleibender
+ausbleibendes
+ausbleibst
+ausbleibt
+ausbleiche
+ausbleichen
+ausbleichend
+ausbleichende
+ausbleichendem
+ausbleichenden
+ausbleichender
+ausbleichendes
+ausbleichst
+ausbleicht
+ausblende
+ausblenden
+ausblendend
+ausblendende
+ausblendendem
+ausblendenden
+ausblendender
+ausblendendes
+ausblendest
+ausblendet
+ausblendete
+ausblendeten
+ausblendetest
+ausblendetet
+ausblieb
+ausblieben
+ausbliebst
+ausbliebt
+ausblute
+ausbluten
+ausblutend
+ausblutende
+ausblutendem
+ausblutenden
+ausblutender
+ausblutendes
+ausblutest
+ausblutet
+ausblutete
+ausbluteten
+ausblutetest
+ausblutetet
+ausbohre
+ausbohren
+ausbohrend
+ausbohrende
+ausbohrendem
+ausbohrenden
+ausbohrender
+ausbohrendes
+ausbohrst
+ausbohrt
+ausbohrte
+ausbohrten
+ausbohrtest
+ausbohrtet
+ausboote
+ausbooten
+ausbootend
+ausbootende
+ausbootendem
+ausbootenden
+ausbootender
+ausbootendes
+ausbootest
+ausbootet
+ausbootete
+ausbooteten
+ausbootetest
+ausbootetet
+ausborge
+ausborgen
+ausborgend
+ausborgende
+ausborgendem
+ausborgenden
+ausborgender
+ausborgendes
+ausborgst
+ausborgt
+ausborgte
+ausborgten
+ausborgtest
+ausborgtet
+ausbrach
+ausbrachen
+ausbrachest
+ausbrachst
+ausbracht
+ausbrannte
+ausbrannten
+ausbranntest
+ausbranntet
+ausbreche
+ausbrechen
+ausbrechend
+ausbrechende
+ausbrechendem
+ausbrechenden
+ausbrechender
+ausbrechendes
+ausbrechst
+ausbrecht
+ausbreite
+ausbreiten
+ausbreitend
+ausbreitende
+ausbreitendem
+ausbreitenden
+ausbreitender
+ausbreitendes
+ausbreitest
+ausbreitet
+ausbreitete
+ausbreiteten
+ausbreitetest
+ausbreitetet
+ausbrenne
+ausbrennen
+ausbrennend
+ausbrennende
+ausbrennendem
+ausbrennenden
+ausbrennender
+ausbrennendes
+ausbrennst
+ausbrennt
+ausbringe
+ausbringen
+ausbringend
+ausbringende
+ausbringendem
+ausbringenden
+ausbringender
+ausbringendes
+ausbringst
+ausbringt
+ausbrüte
+ausbrüten
+ausbrütend
+ausbrütende
+ausbrütendem
+ausbrütenden
+ausbrütender
+ausbrütendes
+ausbrütest
+ausbrütet
+ausbrütete
+ausbrüteten
+ausbrütetest
+ausbrütetet
+ausbürgere
+ausbürgern
+ausbürgernd
+ausbürgernde
+ausbürgerndem
+ausbürgernden
+ausbürgernder
+ausbürgerndes
+ausbürgerst
+ausbürgert
+ausbürgerte
+ausbürgerten
+ausbürgertest
+ausbürgertet
+ausbürgre
+ausbürste
+ausbürsten
+ausbürstend
+ausbürstende
+ausbürstendem
+ausbürstenden
+ausbürstender
+ausbürstendes
+ausbürstest
+ausbürstet
+ausbürstete
+ausbürsteten
+ausbürstetest
+ausbürstetet
+auschlaggebend
+auschlaggebende
+auschlaggebendem
+auschlaggebenden
+auschlaggebender
+auschlaggebendes
+ausdachte
+ausdachten
+ausdauernd
+ausdauernde
+ausdauerndem
+ausdauernden
+ausdauernder
+ausdauerndere
+ausdauernderem
+ausdauernderen
+ausdauernderer
+ausdauernderes
+ausdauerndes
+ausdauerndste
+ausdauerndstem
+ausdauerndsten
+ausdauerndster
+ausdauerndstes
+ausdehnbar
+ausdehnbare
+ausdehnbarem
+ausdehnbaren
+ausdehnbarer
+ausdehnbarere
+ausdehnbarerem
+ausdehnbareren
+ausdehnbarerer
+ausdehnbareres
+ausdehnbares
+ausdehnbarste
+ausdehnbarstem
+ausdehnbarsten
+ausdehnbarster
+ausdehnbarstes
+ausdehne
+ausdehnen
+ausdehnend
+ausdehnende
+ausdehnendem
+ausdehnenden
+ausdehnender
+ausdehnendes
+ausdehnst
+ausdehnt
+ausdehnte
+ausdehnten
+ausdehntest
+ausdehntet
+ausdenkbar
+ausdenkbare
+ausdenkbarem
+ausdenkbaren
+ausdenkbarer
+ausdenkbares
+ausdenke
+ausdenken
+ausdenkend
+ausdenkende
+ausdenkendem
+ausdenkenden
+ausdenkender
+ausdenkendes
+ausdenkst
+ausdenkt
+ausdiskutiere
+ausdiskutieren
+ausdiskutierend
+ausdiskutierende
+ausdiskutierendem
+ausdiskutierenden
+ausdiskutierender
+ausdiskutierendes
+ausdiskutierst
+ausdiskutiert
+ausdiskutierte
+ausdiskutiertem
+ausdiskutierten
+ausdiskutierter
+ausdiskutiertes
+ausdiskutiertest
+ausdiskutiertet
+ausdorre
+ausdorren
+ausdorrend
+ausdorrende
+ausdorrendem
+ausdorrenden
+ausdorrender
+ausdorrendes
+ausdorrst
+ausdorrt
+ausdorrte
+ausdorrten
+ausdorrtest
+ausdorrtet
+ausdrehe
+ausdrehen
+ausdrehend
+ausdrehende
+ausdrehendem
+ausdrehenden
+ausdrehender
+ausdrehendes
+ausdrehst
+ausdreht
+ausdrehte
+ausdrehten
+ausdrehtest
+ausdrehtet
+ausdrucke
+ausdrucken
+ausdruckend
+ausdruckende
+ausdruckendem
+ausdruckenden
+ausdruckender
+ausdruckendes
+ausdrucksfähig
+ausdrucksfähige
+ausdrucksfähigem
+ausdrucksfähigen
+ausdrucksfähiger
+ausdrucksfähigere
+ausdrucksfähigerem
+ausdrucksfähigeren
+ausdrucksfähigerer
+ausdrucksfähigeres
+ausdrucksfähiges
+ausdrucksfähigste
+ausdrucksfähigstem
+ausdrucksfähigsten
+ausdrucksfähigster
+ausdrucksfähigstes
+ausdruckslos
+ausdruckslose
+ausdruckslosem
+ausdruckslosen
+ausdrucksloser
+ausdruckslosere
+ausdrucksloserem
+ausdrucksloseren
+ausdrucksloserer
+ausdrucksloseres
+ausdrucksloses
+ausdrucksloseste
+ausdruckslosestem
+ausdruckslosesten
+ausdruckslosester
+ausdruckslosestes
+ausdrucksstark
+ausdrucksstarke
+ausdrucksstarkem
+ausdrucksstarken
+ausdrucksstarker
+ausdrucksstarkes
+ausdrucksstärker
+ausdrucksstärkere
+ausdrucksstärkerem
+ausdrucksstärkeren
+ausdrucksstärkerer
+ausdrucksstärkeres
+ausdruckst
+ausdrucksvoll
+ausdrucksvolle
+ausdrucksvollem
+ausdrucksvollen
+ausdrucksvoller
+ausdrucksvollere
+ausdrucksvollerem
+ausdrucksvolleren
+ausdrucksvollerer
+ausdrucksvolleres
+ausdrucksvolles
+ausdrucksvollste
+ausdrucksvollstem
+ausdrucksvollsten
+ausdrucksvollster
+ausdrucksvollstes
+ausdruckt
+ausdruckte
+ausdruckten
+ausdrucktest
+ausdrucktet
+ausdrückbar
+ausdrückbare
+ausdrückbarem
+ausdrückbaren
+ausdrückbarer
+ausdrückbares
+ausdrücke
+ausdrücken
+ausdrückend
+ausdrückende
+ausdrückendem
+ausdrückenden
+ausdrückender
+ausdrückendes
+ausdrücklich
+ausdrückliche
+ausdrücklichem
+ausdrücklichen
+ausdrücklicher
+ausdrücklichere
+ausdrücklicherem
+ausdrücklicheren
+ausdrücklicherer
+ausdrücklicheres
+ausdrückliches
+ausdrücklichste
+ausdrücklichstem
+ausdrücklichsten
+ausdrücklichster
+ausdrücklichstes
+ausdrückst
+ausdrückt
+ausdrückte
+ausdrückten
+ausdrücktest
+ausdrücktet
+auseinander
+auserkoren
+auserkorene
+auserkorenem
+auserkorenen
+auserkorener
+auserkorenes
+auserlesen
+auserlesene
+auserlesenem
+auserlesenen
+auserlesener
+auserlesenere
+auserlesenerem
+auserleseneren
+auserlesenerer
+auserleseneres
+auserlesenes
+auserlesenste
+auserlesenstem
+auserlesensten
+auserlesenster
+auserlesenstes
+ausersehen
+ausersehene
+ausersehenem
+ausersehenen
+ausersehener
+ausersehenes
+auserwählt
+auserwählte
+auserwähltem
+auserwählten
+auserwählter
+auserwähltes
+ausfahre
+ausfahren
+ausfahrend
+ausfahrende
+ausfahrendem
+ausfahrenden
+ausfahrender
+ausfahrendes
+ausfahrt
+ausfalle
+ausfallen
+ausfallend
+ausfallende
+ausfallendem
+ausfallenden
+ausfallender
+ausfallendes
+ausfallsicher
+ausfallsichere
+ausfallsicherem
+ausfallsicheren
+ausfallsicherer
+ausfallsicherere
+ausfallsichererem
+ausfallsichereren
+ausfallsichererer
+ausfallsichereres
+ausfallsicheres
+ausfallsicherste
+ausfallsicherstem
+ausfallsichersten
+ausfallsicherster
+ausfallsicherstes
+ausfallt
+ausfechte
+ausfechten
+ausfechtend
+ausfechtende
+ausfechtendem
+ausfechtenden
+ausfechtender
+ausfechtendes
+ausfechtest
+ausfechtet
+ausfege
+ausfegen
+ausfegend
+ausfegende
+ausfegendem
+ausfegenden
+ausfegender
+ausfegendes
+ausfegst
+ausfegt
+ausfegte
+ausfegten
+ausfegtest
+ausfegtet
+ausfeile
+ausfeilen
+ausfeilend
+ausfeilende
+ausfeilendem
+ausfeilenden
+ausfeilender
+ausfeilendes
+ausfeilst
+ausfeilt
+ausfeilte
+ausfeilten
+ausfeiltest
+ausfeiltet
+ausfiel
+ausfielen
+ausfielst
+ausfielt
+ausfinde
+ausfinden
+ausfindend
+ausfindende
+ausfindendem
+ausfindenden
+ausfindender
+ausfindendes
+ausfindest
+ausfindet
+ausfindig
+ausflicke
+ausflicken
+ausflickend
+ausflickende
+ausflickendem
+ausflickenden
+ausflickender
+ausflickendes
+ausflickst
+ausflickt
+ausflickte
+ausflickten
+ausflicktest
+ausflicktet
+ausfliege
+ausfliegen
+ausfliegend
+ausfliegende
+ausfliegendem
+ausfliegenden
+ausfliegender
+ausfliegendes
+ausfliegst
+ausfliegt
+ausfließe
+ausfließen
+ausfließend
+ausfließende
+ausfließendem
+ausfließenden
+ausfließender
+ausfließendes
+ausfließest
+ausfließt
+ausforme
+ausformen
+ausformst
+ausformt
+ausformte
+ausformten
+ausformtest
+ausformtet
+ausfrage
+ausfragen
+ausfragend
+ausfragende
+ausfragendem
+ausfragenden
+ausfragender
+ausfragendes
+ausfragst
+ausfragt
+ausfragte
+ausfragten
+ausfragtest
+ausfragtet
+ausfranse
+ausfransen
+ausfransend
+ausfransende
+ausfransendem
+ausfransenden
+ausfransender
+ausfransendes
+ausfransest
+ausfranst
+ausfranste
+ausfransten
+ausfranstest
+ausfranstet
+ausfresse
+ausfressen
+ausfressend
+ausfressende
+ausfressendem
+ausfressenden
+ausfressender
+ausfressendes
+ausfresst
+ausfällst
+ausfällt
+ausführbar
+ausführbare
+ausführbarem
+ausführbaren
+ausführbarer
+ausführbares
+ausführe
+ausführen
+ausführend
+ausführende
+ausführendem
+ausführenden
+ausführender
+ausführendes
+ausführlich
+ausführliche
+ausführlichem
+ausführlichen
+ausführlicher
+ausführlichere
+ausführlicherem
+ausführlicheren
+ausführlicherer
+ausführlicheres
+ausführliches
+ausführlichste
+ausführlichstem
+ausführlichsten
+ausführlichster
+ausführlichstes
+ausführst
+ausführt
+ausführte
+ausführten
+ausführtest
+ausführtet
+ausfülle
+ausfüllen
+ausfüllend
+ausfüllende
+ausfüllendem
+ausfüllenden
+ausfüllender
+ausfüllendes
+ausfüllst
+ausfüllt
+ausfüllte
+ausfüllten
+ausfülltest
+ausfülltet
+ausgab
+ausgaben
+ausgabst
+ausgabt
+ausgangsseitig
+ausgangsseitige
+ausgangsseitigem
+ausgangsseitigen
+ausgangsseitiger
+ausgangsseitiges
+ausgearbeitet
+ausgearbeitete
+ausgearbeitetem
+ausgearbeiteten
+ausgearbeiteter
+ausgearbeitetes
+ausgeartet
+ausgeartete
+ausgeartetem
+ausgearteten
+ausgearteter
+ausgeartetes
+ausgeatmet
+ausgeatmete
+ausgeatmetem
+ausgeatmeten
+ausgeatmeter
+ausgeatmetes
+ausgebacken
+ausgebackene
+ausgebackenem
+ausgebackenen
+ausgebackener
+ausgebackenes
+ausgebadet
+ausgebaggert
+ausgebaggerte
+ausgebaggertem
+ausgebaggerten
+ausgebaggerter
+ausgebaggertes
+ausgebaut
+ausgebaute
+ausgebautem
+ausgebauten
+ausgebauter
+ausgebautes
+ausgebe
+ausgeben
+ausgebend
+ausgebende
+ausgebendem
+ausgebenden
+ausgebender
+ausgebendes
+ausgebessert
+ausgebesserte
+ausgebessertem
+ausgebesserten
+ausgebesserter
+ausgebessertes
+ausgebeult
+ausgebeulte
+ausgebeultem
+ausgebeulten
+ausgebeulter
+ausgebeultes
+ausgebeutet
+ausgebeutete
+ausgebeutetem
+ausgebeuteten
+ausgebeuteter
+ausgebeutetes
+ausgebildet
+ausgebildete
+ausgebildetem
+ausgebildeten
+ausgebildeter
+ausgebildetes
+ausgeblasen
+ausgeblasene
+ausgeblasenem
+ausgeblasenen
+ausgeblasener
+ausgeblasenes
+ausgebleicht
+ausgebleichte
+ausgebleichtem
+ausgebleichten
+ausgebleichter
+ausgebleichtes
+ausgeblendet
+ausgeblendete
+ausgeblendetem
+ausgeblendeten
+ausgeblendeter
+ausgeblendetes
+ausgeblieben
+ausgebliebene
+ausgebliebenem
+ausgebliebenen
+ausgebliebener
+ausgebliebenes
+ausgeblutet
+ausgeblutete
+ausgeblutetem
+ausgebluteten
+ausgebluteter
+ausgeblutetes
+ausgebootet
+ausgebootete
+ausgebootetem
+ausgebooteten
+ausgebooteter
+ausgebootetes
+ausgeborgt
+ausgeborgte
+ausgeborgtem
+ausgeborgten
+ausgeborgter
+ausgeborgtes
+ausgebrannt
+ausgebrannte
+ausgebranntem
+ausgebrannten
+ausgebrannter
+ausgebranntes
+ausgebreitet
+ausgebreitete
+ausgebreitetem
+ausgebreiteten
+ausgebreiteter
+ausgebreitetes
+ausgebrochen
+ausgebrochene
+ausgebrochenem
+ausgebrochenen
+ausgebrochener
+ausgebrochenes
+ausgebrütet
+ausgebrütete
+ausgebrütetem
+ausgebrüteten
+ausgebrüteter
+ausgebrütetes
+ausgebt
+ausgebucht
+ausgebuchte
+ausgebuchtem
+ausgebuchten
+ausgebuchter
+ausgebuchtes
+ausgebürgert
+ausgebürgerte
+ausgebürgertem
+ausgebürgerten
+ausgebürgerter
+ausgebürgertes
+ausgebürstet
+ausgebürstete
+ausgebürstetem
+ausgebürsteten
+ausgebürsteter
+ausgebürstetes
+ausgedacht
+ausgedachte
+ausgedachtem
+ausgedachten
+ausgedachter
+ausgedachtes
+ausgedehnt
+ausgedehnte
+ausgedehntem
+ausgedehnten
+ausgedehnter
+ausgedehntere
+ausgedehnterem
+ausgedehnteren
+ausgedehnterer
+ausgedehnteres
+ausgedehntes
+ausgedehnteste
+ausgedehntestem
+ausgedehntesten
+ausgedehntester
+ausgedehntestes
+ausgedient
+ausgediente
+ausgedientem
+ausgedienten
+ausgedienter
+ausgedientes
+ausgedorrt
+ausgedorrte
+ausgedorrtem
+ausgedorrten
+ausgedorrter
+ausgedorrtes
+ausgedreht
+ausgedrehte
+ausgedrehtem
+ausgedrehten
+ausgedrehter
+ausgedrehtes
+ausgedruckt
+ausgedruckte
+ausgedrucktem
+ausgedruckten
+ausgedruckter
+ausgedrucktes
+ausgedrückt
+ausgedrückte
+ausgedrücktem
+ausgedrückten
+ausgedrückter
+ausgedrücktes
+ausgedörrt
+ausgedörrte
+ausgedörrtem
+ausgedörrten
+ausgedörrter
+ausgedörrtes
+ausgedünstet
+ausgedünstete
+ausgedünstetem
+ausgedünsteten
+ausgedünsteter
+ausgedünstetes
+ausgefahren
+ausgefahrene
+ausgefahrenem
+ausgefahrenen
+ausgefahrener
+ausgefahrenes
+ausgefallen
+ausgefallene
+ausgefallenem
+ausgefallenen
+ausgefallener
+ausgefallenere
+ausgefallenerem
+ausgefalleneren
+ausgefallenerer
+ausgefalleneres
+ausgefallenes
+ausgefallenste
+ausgefallenstem
+ausgefallensten
+ausgefallenster
+ausgefallenstes
+ausgefegt
+ausgefegte
+ausgefegtem
+ausgefegten
+ausgefegter
+ausgefegtes
+ausgefeilt
+ausgefeilte
+ausgefeiltem
+ausgefeilten
+ausgefeilter
+ausgefeiltes
+ausgefiltert
+ausgefilterte
+ausgefiltertem
+ausgefilterten
+ausgefilterter
+ausgefiltertes
+ausgeflickt
+ausgeflickte
+ausgeflicktem
+ausgeflickten
+ausgeflickter
+ausgeflicktes
+ausgeflogen
+ausgeflogene
+ausgeflogenem
+ausgeflogenen
+ausgeflogener
+ausgeflogenes
+ausgeflossen
+ausgeflossene
+ausgeflossenem
+ausgeflossenen
+ausgeflossener
+ausgeflossenes
+ausgefochten
+ausgefochtene
+ausgefochtenem
+ausgefochtenen
+ausgefochtener
+ausgefochtenes
+ausgeforscht
+ausgeforschte
+ausgeforschtem
+ausgeforschten
+ausgeforschter
+ausgeforschtes
+ausgefragt
+ausgefragte
+ausgefragtem
+ausgefragten
+ausgefragter
+ausgefragtes
+ausgefranst
+ausgefranste
+ausgefranstem
+ausgefransten
+ausgefranster
+ausgefranstes
+ausgefressen
+ausgefressene
+ausgefressenem
+ausgefressenen
+ausgefressener
+ausgefressenes
+ausgefuchst
+ausgefuchste
+ausgefuchstem
+ausgefuchsten
+ausgefuchster
+ausgefuchstes
+ausgeführt
+ausgeführte
+ausgeführtem
+ausgeführten
+ausgeführter
+ausgeführtes
+ausgefüllt
+ausgefüllte
+ausgefülltem
+ausgefüllten
+ausgefüllter
+ausgefülltes
+ausgegangen
+ausgegangene
+ausgegangenem
+ausgegangenen
+ausgegangener
+ausgegangenes
+ausgegeben
+ausgegebene
+ausgegebenem
+ausgegebenen
+ausgegebener
+ausgegebenes
+ausgeglichen
+ausgeglichene
+ausgeglichenem
+ausgeglichenen
+ausgeglichener
+ausgeglichenere
+ausgeglichenerem
+ausgeglicheneren
+ausgeglichenerer
+ausgeglicheneres
+ausgeglichenes
+ausgeglichenste
+ausgeglichenstem
+ausgeglichensten
+ausgeglichenster
+ausgeglichenstes
+ausgegliedert
+ausgegliederte
+ausgegliedertem
+ausgegliederten
+ausgegliederter
+ausgegliedertes
+ausgeglitten
+ausgeglittene
+ausgeglittenem
+ausgeglittenen
+ausgeglittener
+ausgeglittenes
+ausgegoren
+ausgegorene
+ausgegorenem
+ausgegorenen
+ausgegorener
+ausgegorenes
+ausgegossen
+ausgegossene
+ausgegossenem
+ausgegossenen
+ausgegossener
+ausgegossenes
+ausgegraben
+ausgegrabene
+ausgegrabenem
+ausgegrabenen
+ausgegrabener
+ausgegrabenes
+ausgehalten
+ausgehaltene
+ausgehaltenem
+ausgehaltenen
+ausgehaltener
+ausgehaltenes
+ausgehandelt
+ausgehandelte
+ausgehandeltem
+ausgehandelten
+ausgehandelter
+ausgehandeltes
+ausgeharrt
+ausgeharrte
+ausgeharrtem
+ausgeharrten
+ausgeharrter
+ausgeharrtes
+ausgehe
+ausgeheckt
+ausgeheckte
+ausgehecktem
+ausgeheckten
+ausgeheckter
+ausgehecktes
+ausgeheilt
+ausgeheilte
+ausgeheiltem
+ausgeheilten
+ausgeheilter
+ausgeheiltes
+ausgehen
+ausgehend
+ausgehende
+ausgehendem
+ausgehenden
+ausgehender
+ausgehendes
+ausgehoben
+ausgehobene
+ausgehobenem
+ausgehobenen
+ausgehobener
+ausgehobenes
+ausgeholfen
+ausgeholfene
+ausgeholfenem
+ausgeholfenen
+ausgeholfener
+ausgeholfenes
+ausgeholt
+ausgeholte
+ausgeholtem
+ausgeholten
+ausgeholter
+ausgeholtes
+ausgehorcht
+ausgehorchte
+ausgehorchtem
+ausgehorchten
+ausgehorchter
+ausgehorchtes
+ausgehst
+ausgeht
+ausgehändigt
+ausgehändigte
+ausgehändigtem
+ausgehändigten
+ausgehändigter
+ausgehändigtes
+ausgehängt
+ausgehängte
+ausgehängtem
+ausgehängten
+ausgehängter
+ausgehängtes
+ausgehärtet
+ausgehärtete
+ausgehärtetem
+ausgehärteten
+ausgehärteter
+ausgehärtetes
+ausgehöhlt
+ausgehöhlte
+ausgehöhltem
+ausgehöhlten
+ausgehöhlter
+ausgehöhltes
+ausgekannt
+ausgekehrt
+ausgekehrte
+ausgekehrtem
+ausgekehrten
+ausgekehrter
+ausgekehrtes
+ausgeklammert
+ausgeklammerte
+ausgeklammertem
+ausgeklammerten
+ausgeklammerter
+ausgeklammertes
+ausgekleidet
+ausgekleidete
+ausgekleidetem
+ausgekleideten
+ausgekleideter
+ausgekleidetes
+ausgeklopft
+ausgeklopfte
+ausgeklopftem
+ausgeklopften
+ausgeklopfter
+ausgeklopftes
+ausgeklungen
+ausgeklungene
+ausgeklungenem
+ausgeklungenen
+ausgeklungener
+ausgeklungenes
+ausgeklügelt
+ausgeklügelte
+ausgeklügeltem
+ausgeklügelten
+ausgeklügelter
+ausgeklügeltes
+ausgeknobelt
+ausgeknobelte
+ausgeknobeltem
+ausgeknobelten
+ausgeknobelter
+ausgeknobeltes
+ausgekocht
+ausgekochte
+ausgekochtem
+ausgekochten
+ausgekochter
+ausgekochtere
+ausgekochterem
+ausgekochteren
+ausgekochterer
+ausgekochteres
+ausgekochtes
+ausgekochteste
+ausgekochtestem
+ausgekochtesten
+ausgekochtester
+ausgekochtestes
+ausgekohlt
+ausgekohlte
+ausgekohltem
+ausgekohlten
+ausgekohlter
+ausgekohltes
+ausgekommen
+ausgekostet
+ausgekostete
+ausgekostetem
+ausgekosteten
+ausgekosteter
+ausgekostetes
+ausgekratzt
+ausgekratzte
+ausgekratztem
+ausgekratzten
+ausgekratzter
+ausgekratztes
+ausgekundschaftet
+ausgekundschaftete
+ausgekundschaftetem
+ausgekundschafteten
+ausgekundschafteter
+ausgekundschaftetes
+ausgekuppelt
+ausgekuppelte
+ausgekuppeltem
+ausgekuppelten
+ausgekuppelter
+ausgekuppeltes
+ausgekühlt
+ausgekühlte
+ausgekühltem
+ausgekühlten
+ausgekühlter
+ausgekühltes
+ausgelacht
+ausgelachte
+ausgelachtem
+ausgelachten
+ausgelachter
+ausgelachtes
+ausgeladen
+ausgeladene
+ausgeladenem
+ausgeladenen
+ausgeladener
+ausgeladenes
+ausgelassen
+ausgelassene
+ausgelassenem
+ausgelassenen
+ausgelassener
+ausgelassenere
+ausgelassenerem
+ausgelasseneren
+ausgelassenerer
+ausgelasseneres
+ausgelassenes
+ausgelassenste
+ausgelassenstem
+ausgelassensten
+ausgelassenster
+ausgelassenstes
+ausgelastet
+ausgelastete
+ausgelastetem
+ausgelasteten
+ausgelasteter
+ausgelastetes
+ausgelaufen
+ausgelaufene
+ausgelaufenem
+ausgelaufenen
+ausgelaufener
+ausgelaufenes
+ausgelaugt
+ausgelaugte
+ausgelaugtem
+ausgelaugten
+ausgelaugter
+ausgelaugtes
+ausgelebt
+ausgelebte
+ausgelebtem
+ausgelebten
+ausgelebter
+ausgelebtes
+ausgeleert
+ausgeleerte
+ausgeleertem
+ausgeleerten
+ausgeleerter
+ausgeleertes
+ausgelegt
+ausgelegte
+ausgelegtem
+ausgelegten
+ausgelegter
+ausgelegtes
+ausgelenkt
+ausgelenkte
+ausgelenktem
+ausgelenkten
+ausgelenkter
+ausgelenktes
+ausgelesen
+ausgelesene
+ausgelesenem
+ausgelesenen
+ausgelesener
+ausgelesenes
+ausgeliefert
+ausgelieferte
+ausgeliefertem
+ausgelieferten
+ausgelieferter
+ausgeliefertes
+ausgeliehen
+ausgeliehene
+ausgeliehenem
+ausgeliehenen
+ausgeliehener
+ausgeliehenes
+ausgelistet
+ausgelistete
+ausgelistetem
+ausgelisteten
+ausgelisteter
+ausgelistetes
+ausgelitten
+ausgelittene
+ausgelittenem
+ausgelittenen
+ausgelittener
+ausgelittenes
+ausgelost
+ausgeloste
+ausgelostem
+ausgelosten
+ausgeloster
+ausgelostes
+ausgelotet
+ausgelotete
+ausgelotetem
+ausgeloteten
+ausgeloteter
+ausgelotetes
+ausgelutscht
+ausgelutschte
+ausgelutschtem
+ausgelutschten
+ausgelutschter
+ausgelutschtes
+ausgelöffelt
+ausgelöffelte
+ausgelöffeltem
+ausgelöffelten
+ausgelöffelter
+ausgelöffeltes
+ausgelöscht
+ausgelöschte
+ausgelöschtem
+ausgelöschten
+ausgelöschter
+ausgelöschtes
+ausgelöst
+ausgelöste
+ausgelöstem
+ausgelösten
+ausgelöster
+ausgelöstes
+ausgelötet
+ausgelötete
+ausgelötetem
+ausgelöteten
+ausgelöteter
+ausgelötetes
+ausgelüftet
+ausgelüftete
+ausgelüftetem
+ausgelüfteten
+ausgelüfteter
+ausgelüftetes
+ausgemacht
+ausgemachte
+ausgemachtem
+ausgemachten
+ausgemachter
+ausgemachtes
+ausgemalt
+ausgemalte
+ausgemaltem
+ausgemalten
+ausgemalter
+ausgemaltes
+ausgemergelt
+ausgemergelte
+ausgemergeltem
+ausgemergelten
+ausgemergelter
+ausgemergeltes
+ausgemerzt
+ausgemerzte
+ausgemerztem
+ausgemerzten
+ausgemerzter
+ausgemerztes
+ausgemessen
+ausgemessene
+ausgemessenem
+ausgemessenen
+ausgemessener
+ausgemessenes
+ausgemistet
+ausgemistete
+ausgemistetem
+ausgemisteten
+ausgemisteter
+ausgemistetes
+ausgemustert
+ausgemusterte
+ausgemustertem
+ausgemusterten
+ausgemusterter
+ausgemustertes
+ausgenommen
+ausgenommene
+ausgenommenem
+ausgenommenen
+ausgenommener
+ausgenommenes
+ausgenutzt
+ausgenutzte
+ausgenutztem
+ausgenutzten
+ausgenutzter
+ausgenutztes
+ausgenüchtert
+ausgenüchterte
+ausgenüchtertem
+ausgenüchterten
+ausgenüchterter
+ausgenüchtertes
+ausgenützt
+ausgenützte
+ausgenütztem
+ausgenützten
+ausgenützter
+ausgenütztes
+ausgepackt
+ausgepackte
+ausgepacktem
+ausgepackten
+ausgepackter
+ausgepacktes
+ausgepeitscht
+ausgepeitschte
+ausgepeitschtem
+ausgepeitschten
+ausgepeitschter
+ausgepeitschtes
+ausgependelt
+ausgepfiffen
+ausgepfiffene
+ausgepfiffenem
+ausgepfiffenen
+ausgepfiffener
+ausgepfiffenes
+ausgepicht
+ausgepichte
+ausgepichtem
+ausgepichten
+ausgepichter
+ausgepichtes
+ausgeplaudert
+ausgeplauderte
+ausgeplaudertem
+ausgeplauderten
+ausgeplauderter
+ausgeplaudertes
+ausgeplündert
+ausgeplünderte
+ausgeplündertem
+ausgeplünderten
+ausgeplünderter
+ausgeplündertes
+ausgepresst
+ausgepresste
+ausgepresstem
+ausgepressten
+ausgepresster
+ausgepresstes
+ausgeprägt
+ausgeprägte
+ausgeprägtem
+ausgeprägten
+ausgeprägter
+ausgeprägtes
+ausgepumpt
+ausgepumpte
+ausgepumptem
+ausgepumpten
+ausgepumpter
+ausgepumptes
+ausgeputzt
+ausgeputzte
+ausgeputztem
+ausgeputzten
+ausgeputzter
+ausgeputztes
+ausgequetscht
+ausgequetschte
+ausgequetschtem
+ausgequetschten
+ausgequetschter
+ausgequetschtes
+ausgeraubt
+ausgeraubte
+ausgeraubtem
+ausgeraubten
+ausgeraubter
+ausgeraubtes
+ausgerechnet
+ausgerechnete
+ausgerechnetem
+ausgerechneten
+ausgerechneter
+ausgerechnetes
+ausgeredet
+ausgeredete
+ausgeredetem
+ausgeredeten
+ausgeredeter
+ausgeredetes
+ausgeregelt
+ausgeregelte
+ausgeregeltem
+ausgeregelten
+ausgeregelter
+ausgeregeltes
+ausgereicht
+ausgereichte
+ausgereichtem
+ausgereichten
+ausgereichter
+ausgereichtes
+ausgereift
+ausgereifte
+ausgereiftem
+ausgereiften
+ausgereifter
+ausgereiftes
+ausgereist
+ausgereiste
+ausgereistem
+ausgereisten
+ausgereister
+ausgereistes
+ausgereizt
+ausgereizte
+ausgereiztem
+ausgereizten
+ausgereizter
+ausgereiztes
+ausgerenkt
+ausgerenkte
+ausgerenktem
+ausgerenkten
+ausgerenkter
+ausgerenktes
+ausgerichtet
+ausgerichtete
+ausgerichtetem
+ausgerichteten
+ausgerichteter
+ausgerichtetes
+ausgerissen
+ausgerissene
+ausgerissenem
+ausgerissenen
+ausgerissener
+ausgerissenes
+ausgeritten
+ausgerittene
+ausgerittenem
+ausgerittenen
+ausgerittener
+ausgerittenes
+ausgerollt
+ausgerollte
+ausgerolltem
+ausgerollten
+ausgerollter
+ausgerolltes
+ausgerottet
+ausgerottete
+ausgerottetem
+ausgerotteten
+ausgerotteter
+ausgerottetes
+ausgerufen
+ausgerufene
+ausgerufenem
+ausgerufenen
+ausgerufener
+ausgerufenes
+ausgeruht
+ausgeruhte
+ausgeruhtem
+ausgeruhten
+ausgeruhter
+ausgeruhtes
+ausgerutscht
+ausgerutschte
+ausgerutschtem
+ausgerutschten
+ausgerutschter
+ausgerutschtes
+ausgeräuchert
+ausgeräucherte
+ausgeräuchertem
+ausgeräucherten
+ausgeräucherter
+ausgeräuchertes
+ausgeräumt
+ausgeräumte
+ausgeräumtem
+ausgeräumten
+ausgeräumter
+ausgeräumtes
+ausgerückt
+ausgerückte
+ausgerücktem
+ausgerückten
+ausgerückter
+ausgerücktes
+ausgerüstet
+ausgerüstete
+ausgerüstetem
+ausgerüsteten
+ausgerüsteter
+ausgerüstetes
+ausgesagt
+ausgesagte
+ausgesagtem
+ausgesagten
+ausgesagter
+ausgesagtes
+ausgesandt
+ausgesandte
+ausgesandtem
+ausgesandten
+ausgesandter
+ausgesandtes
+ausgesaugt
+ausgesaugte
+ausgesaugtem
+ausgesaugten
+ausgesaugter
+ausgesaugtes
+ausgeschaltet
+ausgeschaltete
+ausgeschaltetem
+ausgeschalteten
+ausgeschalteter
+ausgeschaltetes
+ausgeschenkt
+ausgeschenkte
+ausgeschenktem
+ausgeschenkten
+ausgeschenkter
+ausgeschenktes
+ausgeschert
+ausgescherte
+ausgeschertem
+ausgescherten
+ausgescherter
+ausgeschertes
+ausgeschieden
+ausgeschiedene
+ausgeschiedenem
+ausgeschiedenen
+ausgeschiedener
+ausgeschiedenes
+ausgeschildert
+ausgeschilderte
+ausgeschildertem
+ausgeschilderten
+ausgeschilderter
+ausgeschildertes
+ausgeschimpft
+ausgeschimpfte
+ausgeschimpftem
+ausgeschimpften
+ausgeschimpfter
+ausgeschimpftes
+ausgeschlafen
+ausgeschlafene
+ausgeschlafenem
+ausgeschlafenen
+ausgeschlafener
+ausgeschlafenes
+ausgeschlagen
+ausgeschlagene
+ausgeschlagenem
+ausgeschlagenen
+ausgeschlagener
+ausgeschlagenes
+ausgeschlossen
+ausgeschlossene
+ausgeschlossenem
+ausgeschlossenen
+ausgeschlossener
+ausgeschlossenes
+ausgeschmückt
+ausgeschmückte
+ausgeschmücktem
+ausgeschmückten
+ausgeschmückter
+ausgeschmücktere
+ausgeschmückterem
+ausgeschmückteren
+ausgeschmückterer
+ausgeschmückteres
+ausgeschmücktes
+ausgeschmückteste
+ausgeschmücktestem
+ausgeschmücktesten
+ausgeschmücktester
+ausgeschmücktestes
+ausgeschnitten
+ausgeschnittene
+ausgeschnittenem
+ausgeschnittenen
+ausgeschnittener
+ausgeschnittenes
+ausgeschrieben
+ausgeschriebene
+ausgeschriebenem
+ausgeschriebenen
+ausgeschriebener
+ausgeschriebenes
+ausgeschritten
+ausgeschrittene
+ausgeschrittenem
+ausgeschrittenen
+ausgeschrittener
+ausgeschrittenes
+ausgeschwenkt
+ausgeschwenkte
+ausgeschwenktem
+ausgeschwenkten
+ausgeschwenkter
+ausgeschwenktes
+ausgeschöpft
+ausgeschöpfte
+ausgeschöpftem
+ausgeschöpften
+ausgeschöpfter
+ausgeschöpftes
+ausgeschüttelt
+ausgeschüttelte
+ausgeschütteltem
+ausgeschüttelten
+ausgeschüttelter
+ausgeschütteltes
+ausgeschüttet
+ausgeschüttete
+ausgeschüttetem
+ausgeschütteten
+ausgeschütteter
+ausgeschüttetes
+ausgesehen
+ausgesendet
+ausgesendete
+ausgesendetem
+ausgesendeten
+ausgesendeter
+ausgesendetes
+ausgesetzt
+ausgesetzte
+ausgesetztem
+ausgesetzten
+ausgesetzter
+ausgesetztes
+ausgesorgt
+ausgespannt
+ausgespannte
+ausgespanntem
+ausgespannten
+ausgespannter
+ausgespanntes
+ausgespart
+ausgesparte
+ausgespartem
+ausgesparten
+ausgesparter
+ausgespartes
+ausgesperrt
+ausgesperrte
+ausgesperrtem
+ausgesperrten
+ausgesperrter
+ausgesperrtes
+ausgespielt
+ausgespielte
+ausgespieltem
+ausgespielten
+ausgespielter
+ausgespieltes
+ausgesprochen
+ausgesprochene
+ausgesprochenem
+ausgesprochenen
+ausgesprochener
+ausgesprochenes
+ausgespuckt
+ausgespuckte
+ausgespucktem
+ausgespuckten
+ausgespuckter
+ausgespucktes
+ausgespäht
+ausgespült
+ausgespülte
+ausgespültem
+ausgespülten
+ausgespülter
+ausgespültes
+ausgestalte
+ausgestalten
+ausgestaltest
+ausgestaltet
+ausgestaltete
+ausgestalteten
+ausgestaltetest
+ausgestaltetet
+ausgestanden
+ausgestandene
+ausgestandenem
+ausgestandenen
+ausgestandener
+ausgestandenes
+ausgestanzt
+ausgestanzte
+ausgestanztem
+ausgestanzten
+ausgestanzter
+ausgestanztes
+ausgestattet
+ausgestattete
+ausgestattetem
+ausgestatteten
+ausgestatteter
+ausgestattetes
+ausgestellt
+ausgestellte
+ausgestelltem
+ausgestellten
+ausgestellter
+ausgestelltes
+ausgestiegen
+ausgestiegene
+ausgestiegenem
+ausgestiegenen
+ausgestiegener
+ausgestiegenes
+ausgestochen
+ausgestochene
+ausgestochenem
+ausgestochenen
+ausgestochener
+ausgestochenes
+ausgestopft
+ausgestopfte
+ausgestopftem
+ausgestopften
+ausgestopfter
+ausgestopftes
+ausgestorben
+ausgestorbene
+ausgestorbenem
+ausgestorbenen
+ausgestorbener
+ausgestorbenes
+ausgestoßen
+ausgestoßene
+ausgestoßenem
+ausgestoßenen
+ausgestoßener
+ausgestoßenes
+ausgestrahlt
+ausgestrahlte
+ausgestrahltem
+ausgestrahlten
+ausgestrahlter
+ausgestrahltes
+ausgestreckt
+ausgestreckte
+ausgestrecktem
+ausgestreckten
+ausgestreckter
+ausgestrecktes
+ausgestreut
+ausgestreute
+ausgestreutem
+ausgestreuten
+ausgestreuter
+ausgestreutes
+ausgestrichen
+ausgestrichene
+ausgestrichenem
+ausgestrichenen
+ausgestrichener
+ausgestrichenes
+ausgeströmt
+ausgeströmte
+ausgeströmtem
+ausgeströmten
+ausgeströmter
+ausgeströmtes
+ausgesucht
+ausgesuchte
+ausgesuchtem
+ausgesuchten
+ausgesuchter
+ausgesuchtere
+ausgesuchterem
+ausgesuchteren
+ausgesuchterer
+ausgesuchteres
+ausgesuchtes
+ausgesuchteste
+ausgesuchtestem
+ausgesuchtesten
+ausgesuchtester
+ausgesuchtestes
+ausgesät
+ausgesäte
+ausgesätem
+ausgesäten
+ausgesäter
+ausgesätes
+ausgesöhnt
+ausgesöhnte
+ausgesöhntem
+ausgesöhnten
+ausgesöhnter
+ausgesöhntes
+ausgetauscht
+ausgetauschte
+ausgetauschtem
+ausgetauschten
+ausgetauschter
+ausgetauschtes
+ausgeteilt
+ausgeteilte
+ausgeteiltem
+ausgeteilten
+ausgeteilter
+ausgeteiltes
+ausgetestet
+ausgetestete
+ausgetestetem
+ausgetesteten
+ausgetesteter
+ausgetestetes
+ausgetragen
+ausgetragene
+ausgetragenem
+ausgetragenen
+ausgetragener
+ausgetragenes
+ausgetreten
+ausgetretene
+ausgetretenem
+ausgetretenen
+ausgetretener
+ausgetretenes
+ausgetrieben
+ausgetriebene
+ausgetriebenem
+ausgetriebenen
+ausgetriebener
+ausgetriebenes
+ausgetrocknet
+ausgetrocknete
+ausgetrocknetem
+ausgetrockneten
+ausgetrockneter
+ausgetrocknetes
+ausgetrunken
+ausgetrunkene
+ausgetrunkenem
+ausgetrunkenen
+ausgetrunkener
+ausgetrunkenes
+ausgetüftelt
+ausgetüftelte
+ausgetüfteltem
+ausgetüftelten
+ausgetüftelter
+ausgetüfteltes
+ausgewachsen
+ausgewachsene
+ausgewachsenem
+ausgewachsenen
+ausgewachsener
+ausgewachsenes
+ausgewandert
+ausgewanderte
+ausgewandertem
+ausgewanderten
+ausgewanderter
+ausgewandertes
+ausgewaschen
+ausgewaschene
+ausgewaschenem
+ausgewaschenen
+ausgewaschener
+ausgewaschenes
+ausgewechselt
+ausgewechselte
+ausgewechseltem
+ausgewechselten
+ausgewechselter
+ausgewechseltes
+ausgeweint
+ausgeweitet
+ausgeweitete
+ausgeweitetem
+ausgeweiteten
+ausgeweiteter
+ausgeweitetes
+ausgewertet
+ausgewertete
+ausgewertetem
+ausgewerteten
+ausgewerteter
+ausgewertetes
+ausgewetzt
+ausgewetzte
+ausgewetztem
+ausgewetzten
+ausgewetzter
+ausgewetztes
+ausgewichen
+ausgewichene
+ausgewichenem
+ausgewichenen
+ausgewichener
+ausgewichenes
+ausgewickelt
+ausgewickelte
+ausgewickeltem
+ausgewickelten
+ausgewickelter
+ausgewickeltes
+ausgewiesen
+ausgewiesene
+ausgewiesenem
+ausgewiesenen
+ausgewiesener
+ausgewiesenes
+ausgewischt
+ausgewischte
+ausgewischtem
+ausgewischten
+ausgewischter
+ausgewischtes
+ausgewogen
+ausgewogene
+ausgewogenem
+ausgewogenen
+ausgewogener
+ausgewogenes
+ausgeworfen
+ausgeworfene
+ausgeworfenem
+ausgeworfenen
+ausgeworfener
+ausgeworfenes
+ausgewrungen
+ausgewrungene
+ausgewrungenem
+ausgewrungenen
+ausgewrungener
+ausgewrungenes
+ausgewählt
+ausgewählte
+ausgewähltem
+ausgewählten
+ausgewählter
+ausgewähltes
+ausgezahlt
+ausgezahlte
+ausgezahltem
+ausgezahlten
+ausgezahlter
+ausgezahltes
+ausgezeichnet
+ausgezeichnete
+ausgezeichnetem
+ausgezeichneten
+ausgezeichneter
+ausgezeichnetes
+ausgezogen
+ausgezogene
+ausgezogenem
+ausgezogenen
+ausgezogener
+ausgezogenes
+ausgezählt
+ausgezählte
+ausgezähltem
+ausgezählten
+ausgezählter
+ausgezähltes
+ausgeübt
+ausgeübte
+ausgeübtem
+ausgeübten
+ausgeübter
+ausgeübtes
+ausgibst
+ausgibt
+ausgiebig
+ausgiebige
+ausgiebigem
+ausgiebigen
+ausgiebiger
+ausgiebigere
+ausgiebigerem
+ausgiebigeren
+ausgiebigerer
+ausgiebigeres
+ausgiebiges
+ausgiebigste
+ausgiebigstem
+ausgiebigsten
+ausgiebigster
+ausgiebigstes
+ausgieße
+ausgießen
+ausgießend
+ausgießende
+ausgießendem
+ausgießenden
+ausgießender
+ausgießendes
+ausgießest
+ausgießt
+ausging
+ausgingen
+ausgingst
+ausgingt
+ausgleiche
+ausgleichen
+ausgleichend
+ausgleichende
+ausgleichendem
+ausgleichenden
+ausgleichender
+ausgleichendes
+ausgleichst
+ausgleicht
+ausgleite
+ausgleiten
+ausgleitend
+ausgleitende
+ausgleitendem
+ausgleitenden
+ausgleitender
+ausgleitendes
+ausgleitest
+ausgleitet
+ausgrabe
+ausgraben
+ausgrabend
+ausgrabende
+ausgrabendem
+ausgrabenden
+ausgrabender
+ausgrabendes
+ausgrabt
+ausgreife
+ausgreifen
+ausgreifend
+ausgreifende
+ausgreifendem
+ausgreifenden
+ausgreifender
+ausgreifendes
+ausgreifst
+ausgreift
+ausgräbst
+ausgräbt
+aushalte
+aushalten
+aushaltend
+aushaltende
+aushaltendem
+aushaltenden
+aushaltender
+aushaltendes
+aushaltet
+aushandele
+aushandeln
+aushandelnd
+aushandelnde
+aushandelndem
+aushandelnden
+aushandelnder
+aushandelndes
+aushandelst
+aushandelt
+aushandelte
+aushandelten
+aushandeltest
+aushandeltet
+aushandle
+ausharre
+ausharren
+ausharrend
+ausharrende
+ausharrendem
+ausharrenden
+ausharrender
+ausharrendes
+ausharrst
+ausharrt
+ausharrte
+ausharrten
+ausharrtest
+ausharrtet
+aushauche
+aushauchen
+aushauchend
+aushauchende
+aushauchendem
+aushauchenden
+aushauchender
+aushauchendes
+aushauchst
+aushaucht
+aushauchte
+aushauchten
+aushauchtest
+aushauchtet
+aushebe
+ausheben
+aushebend
+aushebende
+aushebendem
+aushebenden
+aushebender
+aushebendes
+aushebst
+aushebt
+aushecke
+aushecken
+ausheckend
+ausheckende
+ausheckendem
+ausheckenden
+ausheckender
+ausheckendes
+ausheckst
+ausheckt
+ausheckte
+ausheckten
+aushecktest
+aushecktet
+ausheile
+ausheilen
+ausheilend
+ausheilende
+ausheilendem
+ausheilenden
+ausheilender
+ausheilendes
+ausheilst
+ausheilt
+ausheilte
+ausheilten
+ausheiltest
+ausheiltet
+aushelfe
+aushelfen
+aushelfend
+aushelfende
+aushelfendem
+aushelfenden
+aushelfender
+aushelfendes
+aushelft
+aushielt
+aushielten
+aushieltest
+aushieltet
+aushieltst
+aushilfsweise
+aushole
+ausholen
+ausholend
+ausholende
+ausholendem
+ausholenden
+ausholender
+ausholendes
+ausholst
+ausholt
+ausholte
+ausholten
+ausholtest
+ausholtet
+aushorche
+aushorchen
+aushorchend
+aushorchende
+aushorchendem
+aushorchenden
+aushorchender
+aushorchendes
+aushorchst
+aushorcht
+aushorchte
+aushorchten
+aushorchtest
+aushorchtet
+aushält
+aushältst
+aushändige
+aushändigen
+aushändigend
+aushändigende
+aushändigendem
+aushändigenden
+aushändigender
+aushändigendes
+aushändigst
+aushändigt
+aushändigte
+aushändigten
+aushändigtest
+aushändigtet
+aushänge
+aushängen
+aushängend
+aushängende
+aushängendem
+aushängenden
+aushängender
+aushängendes
+aushängst
+aushängt
+aushärte
+aushärten
+aushärtend
+aushärtende
+aushärtendem
+aushärtenden
+aushärtender
+aushärtendes
+aushärtest
+aushärtet
+aushärtete
+aushärteten
+aushärtetest
+aushärtetet
+aushöhle
+aushöhlen
+aushöhlend
+aushöhlende
+aushöhlendem
+aushöhlenden
+aushöhlender
+aushöhlendes
+aushöhlst
+aushöhlt
+aushöhlte
+aushöhlten
+aushöhltest
+aushöhltet
+auskam
+auskamen
+auskamst
+auskamt
+auskehre
+auskehren
+auskehrend
+auskehrende
+auskehrendem
+auskehrenden
+auskehrender
+auskehrendes
+auskehrst
+auskehrt
+auskehrte
+auskehrten
+auskehrtest
+auskehrtet
+auskenne
+auskennen
+auskennend
+auskennende
+auskennendem
+auskennenden
+auskennender
+auskennendes
+auskennst
+auskennt
+ausklammere
+ausklammern
+ausklammernd
+ausklammernde
+ausklammerndem
+ausklammernden
+ausklammernder
+ausklammerndes
+ausklammerst
+ausklammert
+ausklammerte
+ausklammerten
+ausklammertest
+ausklammertet
+ausklammre
+ausklappbar
+ausklappbare
+ausklappbarem
+ausklappbaren
+ausklappbarer
+ausklappbares
+ausklappe
+ausklappen
+ausklappend
+ausklappende
+ausklappendem
+ausklappenden
+ausklappender
+ausklappendes
+ausklappst
+ausklappt
+ausklappte
+ausklappten
+ausklapptest
+ausklapptet
+auskleide
+auskleiden
+auskleidend
+auskleidende
+auskleidendem
+auskleidenden
+auskleidender
+auskleidendes
+auskleidest
+auskleidet
+auskleidete
+auskleideten
+auskleidetest
+auskleidetet
+ausklinge
+ausklingen
+ausklingend
+ausklingende
+ausklingendem
+ausklingenden
+ausklingender
+ausklingendes
+ausklingst
+ausklingt
+ausklinke
+ausklinken
+ausklinkend
+ausklinkende
+ausklinkendem
+ausklinkenden
+ausklinkender
+ausklinkendes
+ausklinkst
+ausklinkt
+ausklinkte
+ausklinkten
+ausklinktest
+ausklinktet
+ausklopfe
+ausklopfen
+ausklopfend
+ausklopfende
+ausklopfendem
+ausklopfenden
+ausklopfender
+ausklopfendes
+ausklopfst
+ausklopft
+ausklopfte
+ausklopften
+ausklopftest
+ausklopftet
+auskoche
+auskochen
+auskochend
+auskochende
+auskochendem
+auskochenden
+auskochender
+auskochendes
+auskochst
+auskocht
+auskochte
+auskochten
+auskochtest
+auskochtet
+auskomme
+auskommen
+auskommend
+auskommende
+auskommendem
+auskommenden
+auskommender
+auskommendes
+auskommst
+auskommt
+auskoste
+auskosten
+auskostend
+auskostende
+auskostendem
+auskostenden
+auskostender
+auskostendes
+auskostest
+auskostet
+auskostete
+auskosteten
+auskostetest
+auskostetet
+auskratze
+auskratzen
+auskratzend
+auskratzende
+auskratzendem
+auskratzenden
+auskratzender
+auskratzendes
+auskratzest
+auskratzt
+auskratzte
+auskratzten
+auskratztest
+auskratztet
+auskundschafte
+auskundschaften
+auskundschaftend
+auskundschaftende
+auskundschaftendem
+auskundschaftenden
+auskundschaftender
+auskundschaftendes
+auskundschaftest
+auskundschaftet
+auskundschaftete
+auskundschafteten
+auskundschaftetest
+auskundschaftetet
+auskuppele
+auskuppeln
+auskuppelnd
+auskuppelnde
+auskuppelndem
+auskuppelnden
+auskuppelnder
+auskuppelndes
+auskuppelst
+auskuppelt
+auskuppelte
+auskuppelten
+auskuppeltest
+auskuppeltet
+auskupple
+auskuriere
+auskurieren
+auskurierend
+auskurierende
+auskurierendem
+auskurierenden
+auskurierender
+auskurierendes
+auskurierst
+auskuriert
+auskurierte
+auskuriertem
+auskurierten
+auskurierter
+auskuriertes
+auskuriertest
+auskuriertet
+auskühle
+auskühlen
+auskühlend
+auskühlende
+auskühlendem
+auskühlenden
+auskühlender
+auskühlendes
+auskühlst
+auskühlt
+auskühlte
+auskühlten
+auskühltest
+auskühltet
+auslache
+auslachen
+auslachend
+auslachende
+auslachendem
+auslachenden
+auslachender
+auslachendes
+auslachst
+auslacht
+auslachte
+auslachten
+auslachtest
+auslachtet
+auslade
+ausladen
+ausladend
+ausladende
+ausladendem
+ausladenden
+ausladender
+ausladendes
+ausladet
+auslasse
+auslassen
+auslassend
+auslassende
+auslassendem
+auslassenden
+auslassender
+auslassendes
+auslasst
+auslaufe
+auslaufen
+auslaufend
+auslaufende
+auslaufendem
+auslaufenden
+auslaufender
+auslaufendes
+auslauft
+auslaute
+auslauten
+auslautend
+auslautende
+auslautendem
+auslautenden
+auslautender
+auslautendes
+auslautest
+auslautet
+auslautete
+auslauteten
+auslautetest
+auslautetet
+auslebe
+ausleben
+auslebend
+auslebende
+auslebendem
+auslebenden
+auslebender
+auslebendes
+auslebst
+auslebt
+auslebte
+auslebten
+auslebtest
+auslebtet
+ausleere
+ausleeren
+ausleerend
+ausleerende
+ausleerendem
+ausleerenden
+ausleerender
+ausleerendes
+ausleerst
+ausleert
+ausleerte
+ausleerten
+ausleertest
+ausleertet
+auslege
+auslegen
+auslegend
+auslegende
+auslegendem
+auslegenden
+auslegender
+auslegendes
+auslegst
+auslegt
+auslegte
+auslegten
+auslegtest
+auslegtet
+ausleihe
+ausleihen
+ausleihend
+ausleihende
+ausleihendem
+ausleihenden
+ausleihender
+ausleihendes
+ausleihst
+ausleiht
+auslesbar
+auslesbare
+auslesbarem
+auslesbaren
+auslesbarer
+auslesbares
+auslese
+auslesen
+auslesend
+auslesende
+auslesendem
+auslesenden
+auslesender
+auslesendes
+auslest
+ausleuchte
+ausleuchten
+ausleuchtend
+ausleuchtende
+ausleuchtendem
+ausleuchtenden
+ausleuchtender
+ausleuchtendes
+ausleuchtest
+ausleuchtet
+ausleuchtete
+ausleuchteten
+ausleuchtetest
+ausleuchtetet
+ausliefere
+ausliefern
+ausliefernd
+ausliefernde
+auslieferndem
+ausliefernden
+ausliefernder
+auslieferndes
+auslieferst
+ausliefert
+auslieferte
+auslieferten
+ausliefertest
+ausliefertet
+ausliefre
+ausließ
+ausließen
+ausließest
+ausließt
+ausliste
+auslisten
+auslistend
+auslistende
+auslistendem
+auslistenden
+auslistender
+auslistendes
+auslistest
+auslistet
+auslistete
+auslisteten
+auslistetest
+auslistetet
+ausloote
+auslooten
+auslootend
+auslootende
+auslootendem
+auslootenden
+auslootender
+auslootendes
+auslootest
+auslootet
+auslootete
+auslooteten
+auslootetest
+auslootetet
+auslose
+auslosen
+auslosend
+auslosende
+auslosendem
+auslosenden
+auslosender
+auslosendes
+auslosest
+auslost
+ausloste
+auslosten
+auslostest
+auslostet
+auslädst
+auslädt
+ausländisch
+ausländische
+ausländischem
+ausländischen
+ausländischer
+ausländisches
+ausläufst
+ausläuft
+auslöffele
+auslöffeln
+auslöffelnd
+auslöffelnde
+auslöffelndem
+auslöffelnden
+auslöffelnder
+auslöffelndes
+auslöffelst
+auslöffelt
+auslöffelte
+auslöffelten
+auslöffeltest
+auslöffeltet
+auslöffle
+auslösche
+auslöschen
+auslöschend
+auslöschende
+auslöschendem
+auslöschenden
+auslöschender
+auslöschendes
+auslöschest
+auslöschst
+auslöscht
+auslöschte
+auslöschten
+auslöschtest
+auslöschtet
+auslöse
+auslösen
+auslösend
+auslösende
+auslösendem
+auslösenden
+auslösender
+auslösendes
+auslösest
+auslöst
+auslöste
+auslösten
+auslöstest
+auslöstet
+auslöte
+auslöten
+auslötest
+auslötet
+auslötete
+auslöteten
+auslötetest
+auslötetet
+auslüfte
+auslüften
+auslüftend
+auslüftende
+auslüftendem
+auslüftenden
+auslüftender
+auslüftendes
+auslüftest
+auslüftet
+auslüftete
+auslüfteten
+auslüftetest
+auslüftetet
+ausmache
+ausmachen
+ausmachend
+ausmachende
+ausmachendem
+ausmachenden
+ausmachender
+ausmachendes
+ausmachst
+ausmacht
+ausmachte
+ausmachten
+ausmachtest
+ausmachtet
+ausmale
+ausmalen
+ausmalend
+ausmalende
+ausmalendem
+ausmalenden
+ausmalender
+ausmalendes
+ausmalst
+ausmalt
+ausmalte
+ausmalten
+ausmaltest
+ausmaltet
+ausmerze
+ausmerzen
+ausmerzend
+ausmerzende
+ausmerzendem
+ausmerzenden
+ausmerzender
+ausmerzendes
+ausmerzest
+ausmerzt
+ausmerzte
+ausmerzten
+ausmerztest
+ausmerztet
+ausmesse
+ausmessen
+ausmessend
+ausmessende
+ausmessendem
+ausmessenden
+ausmessender
+ausmessendes
+ausmesst
+ausmiste
+ausmisten
+ausmistend
+ausmistende
+ausmistendem
+ausmistenden
+ausmistender
+ausmistendes
+ausmistest
+ausmistet
+ausmistete
+ausmisteten
+ausmistetest
+ausmistetet
+ausmusternd
+ausmusternde
+ausmusterndem
+ausmusternden
+ausmusternder
+ausmusterndes
+ausnahm
+ausnahmen
+ausnahmslos
+ausnahmslose
+ausnahmslosem
+ausnahmslosen
+ausnahmsloser
+ausnahmsloses
+ausnahmst
+ausnahmsweise
+ausnahmt
+ausnehme
+ausnehmen
+ausnehmend
+ausnehmende
+ausnehmendem
+ausnehmenden
+ausnehmender
+ausnehmendes
+ausnehmt
+ausnimmst
+ausnimmt
+ausnutze
+ausnutzen
+ausnutzend
+ausnutzende
+ausnutzendem
+ausnutzenden
+ausnutzender
+ausnutzendes
+ausnutzest
+ausnutzt
+ausnutzte
+ausnutzten
+ausnutztest
+ausnutztet
+ausnütze
+ausnützen
+ausnützend
+ausnützende
+ausnützendem
+ausnützenden
+ausnützender
+ausnützendes
+ausnützest
+ausnützt
+ausnützte
+ausnützten
+ausnütztest
+ausnütztet
+auspacke
+auspacken
+auspackend
+auspackende
+auspackendem
+auspackenden
+auspackender
+auspackendes
+auspackst
+auspackt
+auspackte
+auspackten
+auspacktest
+auspacktet
+auspeitsche
+auspeitschen
+auspeitschend
+auspeitschende
+auspeitschendem
+auspeitschenden
+auspeitschender
+auspeitschendes
+auspeitschest
+auspeitschst
+auspeitscht
+auspeitschte
+auspeitschten
+auspeitschtest
+auspeitschtet
+auspfeife
+auspfeifen
+auspfeifend
+auspfeifende
+auspfeifendem
+auspfeifenden
+auspfeifender
+auspfeifendes
+auspfeifst
+auspfeift
+auspfiff
+auspfiffen
+auspfiffest
+auspfiffst
+auspfifft
+ausplaudernd
+ausplaudernde
+ausplauderndem
+ausplaudernden
+ausplaudernder
+ausplauderndes
+ausplündere
+ausplündern
+ausplündernd
+ausplündernde
+ausplünderndem
+ausplündernden
+ausplündernder
+ausplünderndes
+ausplünderst
+ausplündert
+ausplünderte
+ausplünderten
+ausplündertest
+ausplündertet
+ausplündre
+auspresse
+auspressen
+auspressend
+auspressende
+auspressendem
+auspressenden
+auspressender
+auspressendes
+auspressest
+auspresst
+auspresste
+auspressten
+auspresstest
+auspresstet
+ausprobiere
+ausprobieren
+ausprobierend
+ausprobierende
+ausprobierendem
+ausprobierenden
+ausprobierender
+ausprobierendes
+ausprobierst
+ausprobiert
+ausprobierte
+ausprobiertem
+ausprobierten
+ausprobierter
+ausprobiertes
+ausprobiertest
+ausprobiertet
+auspräge
+ausprägen
+ausprägend
+ausprägende
+ausprägendem
+ausprägenden
+ausprägender
+ausprägendes
+ausprägst
+ausprägt
+ausprägte
+ausprägten
+ausprägtest
+ausprägtet
+auspumpe
+auspumpen
+auspumpst
+auspumpt
+auspumpte
+auspumpten
+auspumptest
+auspumptet
+ausputze
+ausputzen
+ausputzend
+ausputzende
+ausputzendem
+ausputzenden
+ausputzender
+ausputzendes
+ausputzest
+ausputzt
+ausputzte
+ausputzten
+ausputztest
+ausputztet
+ausquetsche
+ausquetschen
+ausquetschend
+ausquetschende
+ausquetschendem
+ausquetschenden
+ausquetschender
+ausquetschendes
+ausquetschest
+ausquetschst
+ausquetscht
+ausquetschte
+ausquetschten
+ausquetschtest
+ausquetschtet
+ausradiere
+ausradieren
+ausradierend
+ausradierende
+ausradierendem
+ausradierenden
+ausradierender
+ausradierendes
+ausradierst
+ausradiert
+ausradierte
+ausradiertem
+ausradierten
+ausradierter
+ausradiertes
+ausradiertest
+ausradiertet
+ausrangiere
+ausrangieren
+ausrangierend
+ausrangierende
+ausrangierendem
+ausrangierenden
+ausrangierender
+ausrangierendes
+ausrangierst
+ausrangiert
+ausrangierte
+ausrangiertem
+ausrangierten
+ausrangierter
+ausrangiertes
+ausrangiertest
+ausrangiertet
+ausraube
+ausrauben
+ausraubend
+ausraubende
+ausraubendem
+ausraubenden
+ausraubender
+ausraubendes
+ausraubst
+ausraubt
+ausraubte
+ausraubten
+ausraubtest
+ausraubtet
+ausrechne
+ausrechnen
+ausrechnend
+ausrechnende
+ausrechnendem
+ausrechnenden
+ausrechnender
+ausrechnendes
+ausrechnest
+ausrechnet
+ausrechnete
+ausrechneten
+ausrechnetest
+ausrechnetet
+ausrede
+ausreden
+ausredend
+ausredende
+ausredendem
+ausredenden
+ausredender
+ausredendes
+ausredest
+ausredet
+ausredete
+ausredeten
+ausredetest
+ausredetet
+ausreiche
+ausreichen
+ausreichend
+ausreichende
+ausreichendem
+ausreichenden
+ausreichender
+ausreichendes
+ausreichst
+ausreicht
+ausreichte
+ausreichten
+ausreichtest
+ausreichtet
+ausreife
+ausreifen
+ausreifend
+ausreifende
+ausreifendem
+ausreifenden
+ausreifender
+ausreifendes
+ausreifst
+ausreift
+ausreifte
+ausreiften
+ausreiftest
+ausreiftet
+ausreise
+ausreisen
+ausreisend
+ausreisende
+ausreisendem
+ausreisenden
+ausreisender
+ausreisendes
+ausreisest
+ausreist
+ausreiste
+ausreisten
+ausreistest
+ausreistet
+ausreite
+ausreiten
+ausreitend
+ausreitende
+ausreitendem
+ausreitenden
+ausreitender
+ausreitendes
+ausreitest
+ausreitet
+ausreiße
+ausreißen
+ausreißend
+ausreißende
+ausreißendem
+ausreißenden
+ausreißender
+ausreißendes
+ausreißest
+ausreißt
+ausrenke
+ausrenken
+ausrenkend
+ausrenkende
+ausrenkendem
+ausrenkenden
+ausrenkender
+ausrenkendes
+ausrenkst
+ausrenkt
+ausrenkte
+ausrenkten
+ausrenktest
+ausrenktet
+ausrichte
+ausrichten
+ausrichtend
+ausrichtende
+ausrichtendem
+ausrichtenden
+ausrichtender
+ausrichtendes
+ausrichtest
+ausrichtet
+ausrichtete
+ausrichteten
+ausrichtetest
+ausrichtetet
+ausrief
+ausriefen
+ausriefest
+ausriefst
+ausrieft
+ausrolle
+ausrollen
+ausrollend
+ausrollende
+ausrollendem
+ausrollenden
+ausrollender
+ausrollendes
+ausrollst
+ausrollt
+ausrollte
+ausrollten
+ausrolltest
+ausrolltet
+ausrotte
+ausrotten
+ausrottend
+ausrottende
+ausrottendem
+ausrottenden
+ausrottender
+ausrottendes
+ausrottest
+ausrottet
+ausrottete
+ausrotteten
+ausrottetest
+ausrottetet
+ausrufe
+ausrufen
+ausrufend
+ausrufende
+ausrufendem
+ausrufenden
+ausrufender
+ausrufendes
+ausrufst
+ausruft
+ausruhe
+ausruhen
+ausruhend
+ausruhende
+ausruhendem
+ausruhenden
+ausruhender
+ausruhendes
+ausruhst
+ausruht
+ausruhte
+ausruhten
+ausruhtest
+ausruhtet
+ausrutsche
+ausrutschen
+ausrutschend
+ausrutschende
+ausrutschendem
+ausrutschenden
+ausrutschender
+ausrutschendes
+ausrutschest
+ausrutschst
+ausrutscht
+ausrutschte
+ausrutschten
+ausrutschtest
+ausrutschtet
+ausräume
+ausräumen
+ausräumend
+ausräumende
+ausräumendem
+ausräumenden
+ausräumender
+ausräumendes
+ausräumst
+ausräumt
+ausräumte
+ausräumten
+ausräumtest
+ausräumtet
+ausrücke
+ausrücken
+ausrückend
+ausrückende
+ausrückendem
+ausrückenden
+ausrückender
+ausrückendes
+ausrückst
+ausrückt
+ausrückte
+ausrückten
+ausrücktest
+ausrücktet
+ausrüstbar
+ausrüstbare
+ausrüstbarem
+ausrüstbaren
+ausrüstbarer
+ausrüstbares
+ausrüste
+ausrüsten
+ausrüstend
+ausrüstende
+ausrüstendem
+ausrüstenden
+ausrüstender
+ausrüstendes
+ausrüstest
+ausrüstet
+ausrüstete
+ausrüsteten
+ausrüstetest
+ausrüstetet
+aussage
+aussagefähig
+aussagefähige
+aussagefähigem
+aussagefähigen
+aussagefähiger
+aussagefähiges
+aussagekräftig
+aussagekräftige
+aussagekräftigem
+aussagekräftigen
+aussagekräftiger
+aussagekräftiges
+aussagen
+aussagend
+aussagende
+aussagendem
+aussagenden
+aussagender
+aussagendes
+aussagenlogisch
+aussagenlogische
+aussagenlogischem
+aussagenlogischen
+aussagenlogischer
+aussagenlogisches
+aussagst
+aussagt
+aussagte
+aussagten
+aussagtest
+aussagtet
+aussah
+aussahen
+aussahst
+aussaht
+aussauge
+aussaugen
+aussaugend
+aussaugende
+aussaugendem
+aussaugenden
+aussaugender
+aussaugendes
+aussaugst
+aussaugt
+aussaugte
+aussaugten
+aussaugtest
+aussaugtet
+ausschaltbar
+ausschaltbare
+ausschaltbarem
+ausschaltbaren
+ausschaltbarer
+ausschaltbares
+ausschalte
+ausschalten
+ausschaltend
+ausschaltende
+ausschaltendem
+ausschaltenden
+ausschaltender
+ausschaltendes
+ausschaltest
+ausschaltet
+ausschaltete
+ausschalteten
+ausschaltetest
+ausschaltetet
+ausschaue
+ausschauen
+ausschauend
+ausschauende
+ausschauendem
+ausschauenden
+ausschauender
+ausschauendes
+ausschaust
+ausschaut
+ausschaute
+ausschauten
+ausschautest
+ausschautet
+ausscheide
+ausscheiden
+ausscheidend
+ausscheidende
+ausscheidendem
+ausscheidenden
+ausscheidender
+ausscheidendes
+ausscheidest
+ausscheidet
+ausschere
+ausscheren
+ausscherend
+ausscherende
+ausscherendem
+ausscherenden
+ausscherender
+ausscherendes
+ausscherst
+ausschert
+ausscherte
+ausscherten
+ausschertest
+ausschertet
+ausschied
+ausschieden
+ausschiedest
+ausschiedet
+ausschiedst
+ausschimpfe
+ausschimpfen
+ausschimpfend
+ausschimpfende
+ausschimpfendem
+ausschimpfenden
+ausschimpfender
+ausschimpfendes
+ausschimpfst
+ausschimpft
+ausschimpfte
+ausschimpften
+ausschimpftest
+ausschimpftet
+ausschlachtbar
+ausschlachtbare
+ausschlachtbarem
+ausschlachtbaren
+ausschlachtbarer
+ausschlachtbares
+ausschlachte
+ausschlachten
+ausschlachtend
+ausschlachtende
+ausschlachtendem
+ausschlachtenden
+ausschlachtender
+ausschlachtendes
+ausschlachtest
+ausschlachtet
+ausschlachtete
+ausschlachteten
+ausschlachtetest
+ausschlachtetet
+ausschlafe
+ausschlafen
+ausschlafend
+ausschlafende
+ausschlafendem
+ausschlafenden
+ausschlafender
+ausschlafendes
+ausschlaft
+ausschlage
+ausschlagen
+ausschlagend
+ausschlagende
+ausschlagendem
+ausschlagenden
+ausschlagender
+ausschlagendes
+ausschlaggebend
+ausschlaggebende
+ausschlaggebendem
+ausschlaggebenden
+ausschlaggebender
+ausschlaggebendere
+ausschlaggebenderem
+ausschlaggebenderen
+ausschlaggebenderer
+ausschlaggebenderes
+ausschlaggebendes
+ausschlaggebendste
+ausschlaggebendstem
+ausschlaggebendsten
+ausschlaggebendster
+ausschlaggebendstes
+ausschlagt
+ausschließe
+ausschließen
+ausschließend
+ausschließende
+ausschließendem
+ausschließenden
+ausschließender
+ausschließendes
+ausschließest
+ausschließlich
+ausschließliche
+ausschließlichem
+ausschließlichen
+ausschließlicher
+ausschließliches
+ausschließt
+ausschmücke
+ausschmücken
+ausschmückend
+ausschmückende
+ausschmückendem
+ausschmückenden
+ausschmückender
+ausschmückendes
+ausschmückst
+ausschmückt
+ausschmückte
+ausschmückten
+ausschmücktest
+ausschmücktet
+ausschneide
+ausschneiden
+ausschneidend
+ausschneidende
+ausschneidendem
+ausschneidenden
+ausschneidender
+ausschneidendes
+ausschneidest
+ausschneidet
+ausschnittsweise
+ausschreibe
+ausschreiben
+ausschreibend
+ausschreibende
+ausschreibendem
+ausschreibenden
+ausschreibender
+ausschreibendes
+ausschreibst
+ausschreibt
+ausschreite
+ausschreiten
+ausschreitend
+ausschreitende
+ausschreitendem
+ausschreitenden
+ausschreitender
+ausschreitendes
+ausschreitest
+ausschreitet
+ausschweife
+ausschweifen
+ausschweifend
+ausschweifende
+ausschweifendem
+ausschweifenden
+ausschweifender
+ausschweifendes
+ausschweifst
+ausschweift
+ausschweifte
+ausschweiften
+ausschweiftest
+ausschweiftet
+ausschweige
+ausschweigen
+ausschweigend
+ausschweigende
+ausschweigendem
+ausschweigenden
+ausschweigender
+ausschweigendes
+ausschweigst
+ausschweigt
+ausschwenke
+ausschwenken
+ausschwenkend
+ausschwenkende
+ausschwenkendem
+ausschwenkenden
+ausschwenkender
+ausschwenkendes
+ausschwenkst
+ausschwenkt
+ausschwenkte
+ausschwenkten
+ausschwenktest
+ausschwenktet
+ausschwinge
+ausschwingen
+ausschwingst
+ausschwingt
+ausschöpfe
+ausschöpfen
+ausschöpfst
+ausschöpft
+ausschöpfte
+ausschöpften
+ausschöpftest
+ausschöpftet
+ausschütte
+ausschüttele
+ausschütteln
+ausschüttelnd
+ausschüttelnde
+ausschüttelndem
+ausschüttelnden
+ausschüttelnder
+ausschüttelndes
+ausschüttelst
+ausschüttelt
+ausschüttelte
+ausschüttelten
+ausschütteltest
+ausschütteltet
+ausschütten
+ausschüttend
+ausschüttende
+ausschüttendem
+ausschüttenden
+ausschüttender
+ausschüttendes
+ausschüttest
+ausschüttet
+ausschüttete
+ausschütteten
+ausschüttetest
+ausschüttetet
+ausschüttle
+aussehe
+aussehen
+aussehend
+aussehende
+aussehendem
+aussehenden
+aussehender
+aussehendes
+ausseht
+aussende
+aussenden
+aussendend
+aussendende
+aussendendem
+aussendenden
+aussendender
+aussendendes
+aussendest
+aussendet
+aussendete
+aussendeten
+aussendetest
+aussendetet
+aussetze
+aussetzen
+aussetzend
+aussetzende
+aussetzendem
+aussetzenden
+aussetzender
+aussetzendes
+aussetzest
+aussetzt
+aussetzte
+aussetzten
+aussetztest
+aussetztet
+aussichtslos
+aussichtslose
+aussichtslosem
+aussichtslosen
+aussichtsloser
+aussichtslosere
+aussichtsloserem
+aussichtsloseren
+aussichtsloserer
+aussichtsloseres
+aussichtsloses
+aussichtsloseste
+aussichtslosestem
+aussichtslosesten
+aussichtslosester
+aussichtslosestes
+aussichtsreich
+aussichtsreiche
+aussichtsreichem
+aussichtsreichen
+aussichtsreicher
+aussichtsreichere
+aussichtsreicherem
+aussichtsreicheren
+aussichtsreicherer
+aussichtsreicheres
+aussichtsreiches
+aussichtsreichste
+aussichtsreichstem
+aussichtsreichsten
+aussichtsreichster
+aussichtsreichstes
+aussichtsvoll
+aussichtsvolle
+aussichtsvollem
+aussichtsvollen
+aussichtsvoller
+aussichtsvollere
+aussichtsvollerem
+aussichtsvolleren
+aussichtsvollerer
+aussichtsvolleres
+aussichtsvolles
+aussichtsvollste
+aussichtsvollstem
+aussichtsvollsten
+aussichtsvollster
+aussichtsvollstes
+aussiehst
+aussieht
+aussondere
+aussondern
+aussondernd
+aussondernde
+aussonderndem
+aussondernden
+aussondernder
+aussonderndes
+aussonderst
+aussondert
+aussonderte
+aussonderten
+aussondertest
+aussondertet
+aussondre
+aussortiere
+aussortieren
+aussortierend
+aussortierende
+aussortierendem
+aussortierenden
+aussortierender
+aussortierendes
+aussortierst
+aussortiert
+aussortierte
+aussortiertem
+aussortierten
+aussortierter
+aussortiertes
+aussortiertest
+aussortiertet
+ausspanne
+ausspannen
+ausspannend
+ausspannende
+ausspannendem
+ausspannenden
+ausspannender
+ausspannendes
+ausspannst
+ausspannt
+ausspannte
+ausspannten
+ausspanntest
+ausspanntet
+ausspare
+aussparen
+aussparend
+aussparende
+aussparendem
+aussparenden
+aussparender
+aussparendes
+aussparst
+ausspart
+aussparte
+aussparten
+ausspartest
+ausspartet
+ausspeie
+ausspeien
+ausspeiend
+ausspeiende
+ausspeiendem
+ausspeienden
+ausspeiender
+ausspeiendes
+ausspeist
+ausspeit
+aussperre
+aussperren
+aussperrend
+aussperrende
+aussperrendem
+aussperrenden
+aussperrender
+aussperrendes
+aussperrst
+aussperrt
+aussperrte
+aussperrten
+aussperrtest
+aussperrtet
+ausspiele
+ausspielen
+ausspielend
+ausspielende
+ausspielendem
+ausspielenden
+ausspielender
+ausspielendes
+ausspielst
+ausspielt
+ausspielte
+ausspielten
+ausspieltest
+ausspieltet
+ausspioniere
+ausspionieren
+ausspionierend
+ausspionierende
+ausspionierendem
+ausspionierenden
+ausspionierender
+ausspionierendes
+ausspionierst
+ausspioniert
+ausspionierte
+ausspioniertem
+ausspionierten
+ausspionierter
+ausspioniertes
+ausspioniertest
+ausspioniertet
+aussprach
+aussprachen
+aussprachest
+aussprachst
+ausspracht
+ausspreche
+aussprechen
+aussprechend
+aussprechende
+aussprechendem
+aussprechenden
+aussprechender
+aussprechendes
+aussprecht
+aussprichst
+ausspricht
+ausspucke
+ausspucken
+ausspuckend
+ausspuckende
+ausspuckendem
+ausspuckenden
+ausspuckender
+ausspuckendes
+ausspuckst
+ausspuckt
+ausspuckte
+ausspuckten
+ausspucktest
+ausspucktet
+ausspüle
+ausspülen
+ausspülend
+ausspülende
+ausspülendem
+ausspülenden
+ausspülender
+ausspülendes
+ausspülst
+ausspült
+ausspülte
+ausspülten
+ausspültest
+ausspültet
+ausstaffiere
+ausstaffieren
+ausstaffierend
+ausstaffierende
+ausstaffierendem
+ausstaffierenden
+ausstaffierender
+ausstaffierendes
+ausstaffierst
+ausstaffiert
+ausstaffierte
+ausstaffiertem
+ausstaffierten
+ausstaffierter
+ausstaffiertes
+ausstaffiertest
+ausstaffiertet
+ausstanze
+ausstanzen
+ausstanzend
+ausstanzende
+ausstanzendem
+ausstanzenden
+ausstanzender
+ausstanzendes
+ausstanzest
+ausstanzt
+ausstanzte
+ausstanzten
+ausstanztest
+ausstanztet
+ausstatte
+ausstatten
+ausstattend
+ausstattende
+ausstattendem
+ausstattenden
+ausstattender
+ausstattendes
+ausstattest
+ausstattet
+ausstattete
+ausstatteten
+ausstattetest
+ausstattetet
+aussteche
+ausstechen
+ausstechend
+ausstechende
+ausstechendem
+ausstechenden
+ausstechender
+ausstechendes
+ausstecht
+ausstehe
+ausstehen
+ausstehend
+ausstehende
+ausstehendem
+ausstehenden
+ausstehender
+ausstehendes
+ausstehst
+aussteht
+aussteige
+aussteigen
+aussteigend
+aussteigende
+aussteigendem
+aussteigenden
+aussteigender
+aussteigendes
+aussteigst
+aussteigt
+ausstelle
+ausstellen
+ausstellend
+ausstellende
+ausstellendem
+ausstellenden
+ausstellender
+ausstellendes
+ausstellst
+ausstellt
+ausstellte
+ausstellten
+ausstelltest
+ausstelltet
+aussterbe
+aussterben
+aussterbend
+aussterbende
+aussterbendem
+aussterbenden
+aussterbender
+aussterbendes
+aussterbt
+ausstieß
+ausstießen
+ausstießest
+ausstießt
+ausstopfe
+ausstopfen
+ausstopfend
+ausstopfende
+ausstopfendem
+ausstopfenden
+ausstopfender
+ausstopfendes
+ausstopfst
+ausstopft
+ausstopfte
+ausstopften
+ausstopftest
+ausstopftet
+ausstoße
+ausstoßen
+ausstoßend
+ausstoßende
+ausstoßendem
+ausstoßenden
+ausstoßender
+ausstoßendes
+ausstoßt
+ausstrahle
+ausstrahlen
+ausstrahlend
+ausstrahlende
+ausstrahlendem
+ausstrahlenden
+ausstrahlender
+ausstrahlendes
+ausstrahlst
+ausstrahlt
+ausstrahlte
+ausstrahlten
+ausstrahltest
+ausstrahltet
+ausstrecke
+ausstrecken
+ausstreckend
+ausstreckende
+ausstreckendem
+ausstreckenden
+ausstreckender
+ausstreckendes
+ausstreckst
+ausstreckt
+ausstreckte
+ausstreckten
+ausstrecktest
+ausstrecktet
+ausstreiche
+ausstreichen
+ausstreichend
+ausstreichende
+ausstreichendem
+ausstreichenden
+ausstreichender
+ausstreichendes
+ausstreichst
+ausstreicht
+ausstreue
+ausstreuen
+ausstreuend
+ausstreuende
+ausstreuendem
+ausstreuenden
+ausstreuender
+ausstreuendes
+ausstreust
+ausstreut
+ausstreute
+ausstreuten
+ausstreutest
+ausstreutet
+ausströme
+ausströmen
+ausströmend
+ausströmende
+ausströmendem
+ausströmenden
+ausströmender
+ausströmendes
+ausströmst
+ausströmt
+ausströmte
+ausströmten
+ausströmtest
+ausströmtet
+aussuche
+aussuchen
+aussuchend
+aussuchende
+aussuchendem
+aussuchenden
+aussuchender
+aussuchendes
+aussuchst
+aussucht
+aussuchte
+aussuchten
+aussuchtest
+aussuchtet
+aussätzig
+aussätzige
+aussätzigem
+aussätzigen
+aussätziger
+aussätziges
+aussöhne
+aussöhnen
+aussöhnend
+aussöhnende
+aussöhnendem
+aussöhnenden
+aussöhnender
+aussöhnendes
+aussöhnst
+aussöhnt
+aussöhnte
+aussöhnten
+aussöhntest
+aussöhntet
+austauschbar
+austauschbare
+austauschbarem
+austauschbaren
+austauschbarer
+austauschbares
+austausche
+austauschen
+austauschend
+austauschende
+austauschendem
+austauschenden
+austauschender
+austauschendes
+austauschest
+austauschst
+austauscht
+austauschte
+austauschten
+austauschtest
+austauschtet
+austeile
+austeilen
+austeilend
+austeilende
+austeilendem
+austeilenden
+austeilender
+austeilendes
+austeilst
+austeilt
+austeilte
+austeilten
+austeiltest
+austeiltet
+austobe
+austoben
+austobend
+austobende
+austobendem
+austobenden
+austobender
+austobendes
+austobst
+austobt
+austobte
+austobten
+austobtest
+austobtet
+austrage
+austragen
+austragend
+austragende
+austragendem
+austragenden
+austragender
+austragendes
+austragt
+australisch
+australische
+australischem
+australischen
+australischer
+australisches
+austrampele
+austrampeln
+austrampelnd
+austrampelnde
+austrampelndem
+austrampelnden
+austrampelnder
+austrampelndes
+austrampelst
+austrampelt
+austrampelte
+austrampelten
+austrampeltest
+austrampeltet
+austrample
+austreibe
+austreiben
+austreibend
+austreibende
+austreibendem
+austreibenden
+austreibender
+austreibendes
+austreibst
+austreibt
+austrete
+austreten
+austretend
+austretende
+austretendem
+austretenden
+austretender
+austretendes
+austretet
+austrinke
+austrinken
+austrinkend
+austrinkende
+austrinkendem
+austrinkenden
+austrinkender
+austrinkendes
+austrinkst
+austrinkt
+austrockne
+austrocknen
+austrocknend
+austrocknende
+austrocknendem
+austrocknenden
+austrocknender
+austrocknendes
+austrocknest
+austrocknet
+austrocknete
+austrockneten
+austrocknetest
+austrocknetet
+austüftele
+austüfteln
+austüftelnd
+austüftelnde
+austüftelndem
+austüftelnden
+austüftelnder
+austüftelndes
+austüftelst
+austüftelt
+austüftelte
+austüftelten
+austüfteltest
+austüfteltet
+austüftle
+ausufere
+ausufern
+ausufernd
+ausufernde
+ausuferndem
+ausufernden
+ausufernder
+ausuferndes
+ausuferst
+ausufert
+ausuferte
+ausuferten
+ausufertest
+ausufertet
+ausufre
+ausverkaufe
+ausverkaufen
+ausverkaufend
+ausverkaufende
+ausverkaufendem
+ausverkaufenden
+ausverkaufender
+ausverkaufendes
+ausverkaufst
+ausverkauft
+ausverkaufte
+ausverkauften
+ausverkauftest
+ausverkauftet
+auswandere
+auswandern
+auswandernd
+auswandernde
+auswanderndem
+auswandernden
+auswandernder
+auswanderndes
+auswanderst
+auswandert
+auswanderte
+auswanderten
+auswandertest
+auswandertet
+auswandre
+auswaschbar
+auswaschbare
+auswaschbarem
+auswaschbaren
+auswaschbarer
+auswaschbares
+auswasche
+auswaschen
+auswascht
+auswechselbar
+auswechselbare
+auswechselbarem
+auswechselbaren
+auswechselbarer
+auswechselbares
+auswechsele
+auswechseln
+auswechselnd
+auswechselnde
+auswechselndem
+auswechselnden
+auswechselnder
+auswechselndes
+auswechselst
+auswechselt
+auswechselte
+auswechselten
+auswechseltest
+auswechseltet
+auswechsle
+ausweichend
+ausweichende
+ausweichendem
+ausweichenden
+ausweichender
+ausweichendes
+ausweine
+ausweinen
+ausweinend
+ausweinende
+ausweinendem
+ausweinenden
+ausweinender
+ausweinendes
+ausweinst
+ausweint
+ausweinte
+ausweinten
+ausweintest
+ausweintet
+ausweise
+ausweisen
+ausweisend
+ausweisende
+ausweisendem
+ausweisenden
+ausweisender
+ausweisendes
+ausweisest
+ausweist
+ausweite
+ausweiten
+ausweitend
+ausweitende
+ausweitendem
+ausweitenden
+ausweitender
+ausweitendes
+ausweitest
+ausweitet
+ausweitete
+ausweiteten
+ausweitetest
+ausweitetet
+auswendig
+auswerte
+auswerten
+auswertend
+auswertende
+auswertendem
+auswertenden
+auswertender
+auswertendes
+auswertest
+auswertet
+auswertete
+auswerteten
+auswertetest
+auswertetet
+auswirke
+auswirken
+auswirkend
+auswirkende
+auswirkendem
+auswirkenden
+auswirkender
+auswirkendes
+auswirkst
+auswirkt
+auswirkte
+auswirkten
+auswirktest
+auswirktet
+auswische
+auswischen
+auswischend
+auswischende
+auswischendem
+auswischenden
+auswischender
+auswischendes
+auswischest
+auswischst
+auswischt
+auswischte
+auswischten
+auswischtest
+auswischtet
+auswähle
+auswählen
+auswählend
+auswählende
+auswählendem
+auswählenden
+auswählender
+auswählendes
+auswählst
+auswählt
+auswählte
+auswählten
+auswähltest
+auswähltet
+auswäscht
+auszahlt
+auszahlte
+auszahltem
+auszahlten
+auszahlter
+auszahltes
+auszeichne
+auszeichnen
+auszeichnend
+auszeichnende
+auszeichnendem
+auszeichnenden
+auszeichnender
+auszeichnendes
+auszeichnest
+auszeichnet
+auszeichnete
+auszeichneten
+auszeichnetest
+auszeichnetet
+ausziehbar
+ausziehbare
+ausziehbarem
+ausziehbaren
+ausziehbarer
+ausziehbares
+ausziehe
+ausziehen
+ausziehst
+auszieht
+auszuarbeiten
+auszuarbeitend
+auszuarbeitende
+auszuarbeitendem
+auszuarbeitenden
+auszuarbeitender
+auszuarbeitendes
+auszuarten
+auszubauen
+auszubauend
+auszubauende
+auszubauendem
+auszubauenden
+auszubauender
+auszubauendes
+auszubeuten
+auszubeutend
+auszubeutende
+auszubeutendem
+auszubeutenden
+auszubeutender
+auszubeutendes
+auszubilden
+auszubildend
+auszubildende
+auszubildendem
+auszubildenden
+auszubildender
+auszubildendes
+auszublenden
+auszublendend
+auszublendende
+auszublendendem
+auszublendenden
+auszublendender
+auszublendendes
+auszubrechen
+auszubrechend
+auszubrechende
+auszubrechendem
+auszubrechenden
+auszubrechender
+auszubrechendes
+auszudehnen
+auszudehnend
+auszudehnende
+auszudehnendem
+auszudehnenden
+auszudehnender
+auszudehnendes
+auszudenken
+auszudenkend
+auszudenkende
+auszudenkendem
+auszudenkenden
+auszudenkender
+auszudenkendes
+auszudesignen
+auszudrucken
+auszudruckend
+auszudruckende
+auszudruckendem
+auszudruckenden
+auszudruckender
+auszudruckendes
+auszudrücken
+auszudrückend
+auszudrückende
+auszudrückendem
+auszudrückenden
+auszudrückender
+auszudrückendes
+auszuführen
+auszuführend
+auszuführende
+auszuführendem
+auszuführenden
+auszuführender
+auszuführendes
+auszufüllen
+auszufüllend
+auszufüllende
+auszufüllendem
+auszufüllenden
+auszufüllender
+auszufüllendes
+auszugeben
+auszugebend
+auszugebende
+auszugebendem
+auszugebenden
+auszugebender
+auszugebendes
+auszugehen
+auszugleichen
+auszugleichend
+auszugleichende
+auszugleichendem
+auszugleichenden
+auszugleichender
+auszugleichendes
+auszuhalten
+auszuhaltend
+auszuhaltende
+auszuhaltendem
+auszuhaltenden
+auszuhaltender
+auszuhaltendes
+auszuhandeln
+auszuhandelnd
+auszuhandelnde
+auszuhandelndem
+auszuhandelnden
+auszuhandelnder
+auszuhandelndes
+auszuhändigen
+auszuhändigend
+auszuhändigende
+auszuhändigendem
+auszuhändigenden
+auszuhändigender
+auszuhändigendes
+auszukommentieren
+auszukotzen
+auszukotzend
+auszukotzende
+auszukotzendem
+auszukotzenden
+auszukotzender
+auszukotzendes
+auszulassen
+auszulassend
+auszulassende
+auszulassendem
+auszulassenden
+auszulassender
+auszulassendes
+auszuleihen
+auszuleihend
+auszuleihende
+auszuleihendem
+auszuleihenden
+auszuleihender
+auszuleihendes
+auszulesen
+auszulesend
+auszulesende
+auszulesendem
+auszulesenden
+auszulesender
+auszulesendes
+auszuliefern
+auszuliefernd
+auszuliefernde
+auszulieferndem
+auszuliefernden
+auszuliefernder
+auszulieferndes
+auszumachen
+auszumachend
+auszumachende
+auszumachendem
+auszumachenden
+auszumachender
+auszumachendes
+auszumalen
+auszumalend
+auszumalende
+auszumalendem
+auszumalenden
+auszumalender
+auszumalendes
+auszumerzen
+auszumerzend
+auszumerzende
+auszumerzendem
+auszumerzenden
+auszumerzender
+auszumerzendes
+auszumessen
+auszumessend
+auszumessende
+auszumessendem
+auszumessenden
+auszumessender
+auszumessendes
+auszunutzen
+auszunutzend
+auszunutzende
+auszunutzendem
+auszunutzenden
+auszunutzender
+auszunutzendes
+auszupolieren
+auszupolierend
+auszupolierende
+auszupolierendem
+auszupolierenden
+auszupolierender
+auszupolierendes
+auszuprobieren
+auszuprobierend
+auszuprobierende
+auszuprobierendem
+auszuprobierenden
+auszuprobierender
+auszuprobierendes
+auszurüsten
+auszurüstend
+auszurüstende
+auszurüstendem
+auszurüstenden
+auszurüstender
+auszurüstendes
+auszuschalten
+auszuschaltend
+auszuschaltende
+auszuschaltendem
+auszuschaltenden
+auszuschaltender
+auszuschaltendes
+auszuschlachten
+auszuschlachtend
+auszuschlachtende
+auszuschlachtendem
+auszuschlachtenden
+auszuschlachtender
+auszuschlachtendes
+auszuschlagen
+auszuschlagend
+auszuschlagende
+auszuschlagendem
+auszuschlagenden
+auszuschlagender
+auszuschlagendes
+auszuschließen
+auszuschließend
+auszuschließende
+auszuschließendem
+auszuschließenden
+auszuschließender
+auszuschließendes
+auszuschöpfen
+auszuschöpfend
+auszuschöpfende
+auszuschöpfendem
+auszuschöpfenden
+auszuschöpfender
+auszuschöpfendes
+auszusondern
+auszusondernd
+auszusondernde
+auszusonderndem
+auszusondernden
+auszusondernder
+auszusonderndes
+auszusprechen
+auszusprechend
+auszusprechende
+auszusprechendem
+auszusprechenden
+auszusprechender
+auszusprechendes
+auszuspucken
+auszuspuckend
+auszuspuckende
+auszuspuckendem
+auszuspuckenden
+auszuspuckender
+auszuspuckendes
+auszustatten
+auszustattend
+auszustattende
+auszustattendem
+auszustattenden
+auszustattender
+auszustattendes
+auszustellen
+auszustellend
+auszustellende
+auszustellendem
+auszustellenden
+auszustellender
+auszustellendes
+auszusuchen
+auszusuchend
+auszusuchende
+auszusuchendem
+auszusuchenden
+auszusuchender
+auszusuchendes
+auszutauschen
+auszutauschend
+auszutauschende
+auszutauschendem
+auszutauschenden
+auszutauschender
+auszutauschendes
+auszutüfteln
+auszutüftelnd
+auszutüftelnde
+auszutüftelndem
+auszutüftelnden
+auszutüftelnder
+auszutüftelndes
+auszuwechseln
+auszuwechselnd
+auszuwechselnde
+auszuwechselndem
+auszuwechselnden
+auszuwechselnder
+auszuwechselndes
+auszuwerten
+auszuwertend
+auszuwertende
+auszuwertendem
+auszuwertenden
+auszuwertender
+auszuwertendes
+auszuwählen
+auszuwählend
+auszuwählende
+auszuwählendem
+auszuwählenden
+auszuwählender
+auszuwählendes
+auszuzahlen
+auszuzahlend
+auszuzahlende
+auszuzahlendem
+auszuzahlenden
+auszuzahlender
+auszuzahlendes
+auszuüben
+auszuübend
+auszuübende
+auszuübendem
+auszuübenden
+auszuübender
+auszuübendes
+ausübe
+ausüben
+ausübend
+ausübende
+ausübendem
+ausübenden
+ausübender
+ausübendes
+ausübst
+ausübt
+ausübte
+ausübten
+ausübtest
+ausübtet
+autark
+autarke
+autarkem
+autarken
+autarker
+autarkes
+authentisch
+authentische
+authentischem
+authentischen
+authentischer
+authentisches
+automatenfreundlich
+automatenfreundliche
+automatenfreundlichem
+automatenfreundlichen
+automatenfreundlicher
+automatenfreundliches
+automatisch
+automatische
+automatischem
+automatischen
+automatischer
+automatisches
+automatisierbar
+automatisierbare
+automatisierbarem
+automatisierbaren
+automatisierbarer
+automatisierbares
+automatisiere
+automatisieren
+automatisierend
+automatisierende
+automatisierendem
+automatisierenden
+automatisierender
+automatisierendes
+automatisierst
+automatisiert
+automatisierte
+automatisiertem
+automatisierten
+automatisierter
+automatisiertes
+automatisiertest
+automatisiertet
+autonom
+autonome
+autonomem
+autonomen
+autonomer
+autonomes
+autorisiere
+autorisieren
+autorisierst
+autorisiert
+autorisierte
+autorisiertem
+autorisierten
+autorisierter
+autorisiertes
+autorisiertest
+autorisiertet
+autoritativ
+autoritative
+autoritativem
+autoritativen
+autoritativer
+autoritatives
+außen
+außer
+außerdem
+außergewöhnlich
+außergewöhnliche
+außergewöhnlichem
+außergewöhnlichen
+außergewöhnlicher
+außergewöhnlichere
+außergewöhnlicherem
+außergewöhnlicheren
+außergewöhnlicherer
+außergewöhnlicheres
+außergewöhnliches
+außergewöhnlichste
+außergewöhnlichstem
+außergewöhnlichsten
+außergewöhnlichster
+außergewöhnlichstes
+außerhalb
+außerirdisch
+außerirdische
+außerirdischem
+außerirdischen
+außerirdischer
+außerirdisches
+außerordentlich
+außerordentliche
+außerordentlichem
+außerordentlichen
+außerordentlicher
+außerordentliches
+außerplanmäßig
+außerplanmäßige
+außerplanmäßigem
+außerplanmäßigen
+außerplanmäßiger
+außerplanmäßiges
+außerschulisch
+außerschulische
+außerschulischem
+außerschulischen
+außerschulischer
+außerschulisches
+außerstande
+avanciere
+avancieren
+avancierend
+avancierende
+avancierendem
+avancierenden
+avancierender
+avancierendes
+avancierst
+avanciert
+avancierte
+avanciertem
+avancierten
+avancierter
+avanciertes
+avanciertest
+avanciertet
+avantgardistisch
+avantgardistische
+avantgardistischem
+avantgardistischen
+avantgardistischer
+avantgardistisches
+avisiere
+avisieren
+avisierend
+avisierende
+avisierendem
+avisierenden
+avisierender
+avisierendes
+avisierst
+avisiert
+avisierte
+avisiertem
+avisierten
+avisierter
+avisiertes
+avisiertest
+avisiertet
+axiomatisch
+axiomatische
+axiomatischem
+axiomatischen
+axiomatischer
+axiomatisches
+azurblau
+azurblaue
+azurblauem
+azurblauen
+azurblauer
+azurblaues
+azyklisch
+azyklische
+azyklischem
+azyklischen
+azyklischer
+azyklisches
+aß
+aßen
+aßest
+aßt
+babylonisch
+babylonische
+babylonischem
+babylonischen
+babylonischer
+babylonisches
+backe
+backen
+backend
+backende
+backendem
+backenden
+backender
+backendes
+backst
+backt
+backte
+backten
+backtest
+backtet
+bade
+baden
+badend
+badende
+badendem
+badenden
+badender
+badendes
+badest
+badet
+badete
+badeten
+badetest
+badetet
+badisch
+badische
+badischem
+badischen
+badischer
+badisches
+bagatellisiere
+bagatellisieren
+bagatellisierend
+bagatellisierende
+bagatellisierendem
+bagatellisierenden
+bagatellisierender
+bagatellisierendes
+bagatellisierst
+bagatellisiert
+bagatellisierte
+bagatellisiertem
+bagatellisierten
+bagatellisierter
+bagatellisiertes
+bagatellisiertest
+bagatellisiertet
+baggere
+baggern
+baggernd
+baggernde
+baggerndem
+baggernden
+baggernder
+baggerndes
+baggerst
+baggert
+baggerte
+baggerten
+baggertest
+baggertet
+baggre
+bahnbrechend
+bahnbrechende
+bahnbrechendem
+bahnbrechenden
+bahnbrechender
+bahnbrechendes
+bahne
+bahnen
+bahnst
+bahnt
+bahnte
+bahnten
+bahntest
+bahntet
+bakteriell
+bakterielle
+bakteriellem
+bakteriellen
+bakterieller
+bakterielles
+balanciere
+balancieren
+balancierend
+balancierende
+balancierendem
+balancierenden
+balancierender
+balancierendes
+balancierst
+balanciert
+balancierte
+balancierten
+balanciertest
+balanciertet
+bald
+baldig
+baldige
+baldigem
+baldigen
+baldiger
+baldiges
+baldmöglich
+baldmögliche
+baldmöglichem
+baldmöglichen
+baldmöglicher
+baldmöglichere
+baldmöglicherem
+baldmöglicheren
+baldmöglicherer
+baldmöglicheres
+baldmögliches
+baldmöglichst
+baldmöglichste
+baldmöglichstem
+baldmöglichsten
+baldmöglichster
+baldmöglichstes
+balge
+balgen
+balgend
+balgende
+balgendem
+balgenden
+balgender
+balgendes
+balgst
+balgt
+balgte
+balgten
+balgtest
+balgtet
+balle
+ballen
+ballend
+ballende
+ballendem
+ballenden
+ballender
+ballendes
+ballere
+ballern
+ballernd
+ballernde
+ballerndem
+ballernden
+ballernder
+ballerndes
+ballerst
+ballert
+ballerte
+ballerten
+ballertest
+ballertet
+ballettmäßig
+ballettmäßige
+ballettmäßigem
+ballettmäßigen
+ballettmäßiger
+ballettmäßiges
+ballistisch
+ballistische
+ballistischem
+ballistischen
+ballistischer
+ballistisches
+ballre
+ballst
+ballt
+ballte
+ballten
+balltest
+balltet
+baltisch
+baltische
+baltischem
+baltischen
+baltischer
+baltisches
+banal
+banale
+banalem
+banalen
+banaler
+banales
+bananenrepublikanisch
+bananenrepublikanische
+bananenrepublikanischem
+bananenrepublikanischen
+bananenrepublikanischer
+bananenrepublikanisches
+band
+bandagiere
+bandagieren
+bandagierend
+bandagierende
+bandagierendem
+bandagierenden
+bandagierender
+bandagierendes
+bandagierst
+bandagiert
+bandagierte
+bandagiertem
+bandagierten
+bandagierter
+bandagiertes
+bandagiertest
+bandagiertet
+banden
+bandest
+bandet
+bandst
+bang
+bange
+bangem
+bangen
+bangend
+bangende
+bangendem
+bangenden
+bangender
+bangendes
+banger
+banges
+bangst
+bangt
+bangte
+bangten
+bangtest
+bangtet
+bankmäßig
+bankmäßige
+bankmäßigem
+bankmäßigen
+bankmäßiger
+bankmäßiges
+bankrott
+bankrotte
+bankrottem
+bankrotten
+bankrotter
+bankrottes
+banne
+bannen
+bannend
+bannende
+bannendem
+bannenden
+bannender
+bannendes
+bannst
+bannt
+bannte
+bannten
+banntest
+banntet
+bar
+barbarisch
+barbarische
+barbarischem
+barbarischen
+barbarischer
+barbarisches
+bare
+barem
+baren
+barer
+bares
+barfüßig
+barfüßige
+barfüßigem
+barfüßigen
+barfüßiger
+barfüßiges
+barg
+bargeldlos
+bargeldlose
+bargeldlosem
+bargeldlosen
+bargeldloser
+bargeldloses
+bargen
+bargst
+bargt
+barhäuptig
+barhäuptige
+barhäuptigem
+barhäuptigen
+barhäuptiger
+barhäuptiges
+barmherzig
+barmherzige
+barmherzigem
+barmherzigen
+barmherziger
+barmherziges
+barsch
+barsche
+barschem
+barschen
+barscher
+barschere
+barscherem
+barscheren
+barscherer
+barscheres
+barsches
+barschste
+barschstem
+barschsten
+barschster
+barschstes
+barst
+barsten
+barstest
+barstet
+barstst
+basiere
+basieren
+basierend
+basierende
+basierendem
+basierenden
+basierender
+basierendes
+basierst
+basiert
+basierte
+basiertem
+basierten
+basierter
+basiertes
+basiertest
+basiertet
+basisch
+basische
+basischem
+basischen
+basischer
+basisches
+bastele
+basteln
+bastelnd
+bastelnde
+bastelndem
+bastelnden
+bastelnder
+bastelndes
+bastelst
+bastelt
+bastelte
+bastelten
+basteltest
+basteltet
+bastle
+bat
+baten
+batest
+batet
+batst
+baue
+bauen
+bauend
+bauende
+bauendem
+bauenden
+bauender
+bauendes
+bauernschlau
+bauernschlaue
+bauernschlauem
+bauernschlauen
+bauernschlauer
+bauernschlaues
+baufällig
+baufällige
+baufälligem
+baufälligen
+baufälliger
+baufälliges
+baulich
+bauliche
+baulichem
+baulichen
+baulicher
+bauliches
+baumartig
+baumartige
+baumartigem
+baumartigen
+baumartiger
+baumartiges
+baumele
+baumeln
+baumelnd
+baumelnde
+baumelndem
+baumelnden
+baumelnder
+baumelndes
+baumelst
+baumelt
+baumelte
+baumelten
+baumeltest
+baumeltet
+baumle
+baumstark
+baumstarke
+baumstarkem
+baumstarken
+baumstarker
+baumstarkes
+baumwollen
+baumwollene
+baumwollenem
+baumwollenen
+baumwollener
+baumwollenes
+baureif
+baureife
+baureifem
+baureifen
+baureifer
+baureifes
+bausche
+bauschen
+bauschend
+bauschende
+bauschendem
+bauschenden
+bauschender
+bauschendes
+bauschest
+bauschig
+bauschige
+bauschigem
+bauschigen
+bauschiger
+bauschiges
+bauschst
+bauscht
+bauschte
+bauschten
+bauschtest
+bauschtet
+baust
+baut
+baute
+bautechnisch
+bautechnische
+bautechnischem
+bautechnischen
+bautechnischer
+bautechnisches
+bauten
+bautest
+bautet
+bayerisch
+bayerische
+bayerischem
+bayerischen
+bayerischer
+bayerisches
+bayrisch
+bayrische
+bayrischem
+bayrischen
+bayrischer
+bayrisches
+beabsichtige
+beabsichtigen
+beabsichtigend
+beabsichtigende
+beabsichtigendem
+beabsichtigenden
+beabsichtigender
+beabsichtigendes
+beabsichtigst
+beabsichtigt
+beabsichtigte
+beabsichtigtem
+beabsichtigten
+beabsichtigter
+beabsichtigtes
+beabsichtigtest
+beabsichtigtet
+beachte
+beachten
+beachtend
+beachtende
+beachtendem
+beachtenden
+beachtender
+beachtendes
+beachtenswert
+beachtenswerte
+beachtenswertem
+beachtenswerten
+beachtenswerter
+beachtenswertere
+beachtenswerterem
+beachtenswerteren
+beachtenswerterer
+beachtenswerteres
+beachtenswertes
+beachtenswerteste
+beachtenswertestem
+beachtenswertesten
+beachtenswertester
+beachtenswertestes
+beachtest
+beachtet
+beachtete
+beachtetem
+beachteten
+beachteter
+beachtetes
+beachtetest
+beachtetet
+beachtlich
+beachtliche
+beachtlichem
+beachtlichen
+beachtlicher
+beachtlichere
+beachtlicherem
+beachtlicheren
+beachtlicherer
+beachtlicheres
+beachtliches
+beachtlichste
+beachtlichstem
+beachtlichsten
+beachtlichster
+beachtlichstes
+beanspruchbar
+beanspruchbare
+beanspruchbarem
+beanspruchbaren
+beanspruchbarer
+beanspruchbares
+beanspruche
+beanspruchen
+beanspruchend
+beanspruchende
+beanspruchendem
+beanspruchenden
+beanspruchender
+beanspruchendes
+beanspruchst
+beansprucht
+beanspruchte
+beanspruchtem
+beanspruchten
+beanspruchter
+beanspruchtes
+beanspruchtest
+beanspruchtet
+beanstandbar
+beanstandbare
+beanstandbarem
+beanstandbaren
+beanstandbarer
+beanstandbares
+beanstande
+beanstanden
+beanstandend
+beanstandende
+beanstandendem
+beanstandenden
+beanstandender
+beanstandendes
+beanstandest
+beanstandet
+beanstandete
+beanstandetem
+beanstandeten
+beanstandeter
+beanstandetes
+beanstandetest
+beanstandetet
+beantrage
+beantragen
+beantragend
+beantragende
+beantragendem
+beantragenden
+beantragender
+beantragendes
+beantragst
+beantragt
+beantragte
+beantragtem
+beantragten
+beantragter
+beantragtes
+beantragtest
+beantragtet
+beanträgst
+beanträgt
+beantworte
+beantworten
+beantwortend
+beantwortende
+beantwortendem
+beantwortenden
+beantwortender
+beantwortendes
+beantwortest
+beantwortet
+beantwortete
+beantwortetem
+beantworteten
+beantworteter
+beantwortetes
+beantwortetest
+beantwortetet
+bearbeite
+bearbeiten
+bearbeitend
+bearbeitende
+bearbeitendem
+bearbeitenden
+bearbeitender
+bearbeitendes
+bearbeitest
+bearbeitet
+bearbeitete
+bearbeitetem
+bearbeiteten
+bearbeiteter
+bearbeitetes
+bearbeitetest
+bearbeitetet
+beargwöhne
+beargwöhnen
+beargwöhnend
+beargwöhnende
+beargwöhnendem
+beargwöhnenden
+beargwöhnender
+beargwöhnendes
+beargwöhnst
+beargwöhnt
+beargwöhnte
+beargwöhntem
+beargwöhnten
+beargwöhnter
+beargwöhntes
+beargwöhntest
+beargwöhntet
+beatmet
+beatmete
+beatmetem
+beatmeten
+beatmeter
+beatmetes
+beaufschlage
+beaufschlagen
+beaufschlagend
+beaufschlagende
+beaufschlagendem
+beaufschlagenden
+beaufschlagender
+beaufschlagendes
+beaufschlagst
+beaufschlagt
+beaufschlagte
+beaufschlagtem
+beaufschlagten
+beaufschlagter
+beaufschlagtes
+beaufschlagtest
+beaufschlagtet
+beaufsichtige
+beaufsichtigen
+beaufsichtigend
+beaufsichtigende
+beaufsichtigendem
+beaufsichtigenden
+beaufsichtigender
+beaufsichtigendes
+beaufsichtigst
+beaufsichtigt
+beaufsichtigte
+beaufsichtigtem
+beaufsichtigten
+beaufsichtigter
+beaufsichtigtes
+beaufsichtigtest
+beaufsichtigtet
+beauftrage
+beauftragen
+beauftragend
+beauftragende
+beauftragendem
+beauftragenden
+beauftragender
+beauftragendes
+beauftragst
+beauftragt
+beauftragte
+beauftragtem
+beauftragten
+beauftragter
+beauftragtes
+beauftragtest
+beauftragtet
+bebaubar
+bebaubare
+bebaubarem
+bebaubaren
+bebaubarer
+bebaubares
+bebaue
+bebauen
+bebauend
+bebauende
+bebauendem
+bebauenden
+bebauender
+bebauendes
+bebaust
+bebaut
+bebaute
+bebautem
+bebauten
+bebauter
+bebautes
+bebautest
+bebautet
+bebe
+beben
+bebend
+bebende
+bebendem
+bebenden
+bebender
+bebendes
+bebst
+bebt
+bebte
+bebten
+bebtest
+bebtet
+bechere
+bechern
+bechernd
+bechernde
+becherndem
+bechernden
+bechernder
+becherndes
+becherst
+bechert
+becherte
+becherten
+bechertest
+bechertet
+bechre
+bedacht
+bedachte
+bedachtem
+bedachten
+bedachter
+bedachtere
+bedachterem
+bedachteren
+bedachterer
+bedachteres
+bedachtes
+bedachtest
+bedachteste
+bedachtestem
+bedachtesten
+bedachtester
+bedachtestes
+bedachtet
+bedachtsam
+bedachtsame
+bedachtsamem
+bedachtsamen
+bedachtsamer
+bedachtsames
+bedanke
+bedanken
+bedankend
+bedankende
+bedankendem
+bedankenden
+bedankender
+bedankendes
+bedankst
+bedankt
+bedankte
+bedankten
+bedanktest
+bedanktet
+bedarf
+bedarfsgerecht
+bedarfsgerechte
+bedarfsgerechtem
+bedarfsgerechten
+bedarfsgerechter
+bedarfsgerechtere
+bedarfsgerechterem
+bedarfsgerechteren
+bedarfsgerechterer
+bedarfsgerechteres
+bedarfsgerechtes
+bedarfsgerechteste
+bedarfsgerechtestem
+bedarfsgerechtesten
+bedarfsgerechtester
+bedarfsgerechtestes
+bedarfsorientiert
+bedarfsorientierte
+bedarfsorientiertem
+bedarfsorientierten
+bedarfsorientierter
+bedarfsorientiertes
+bedarfst
+bedauere
+bedauerlich
+bedauerliche
+bedauerlichem
+bedauerlichen
+bedauerlicher
+bedauerlicherweise
+bedauerliches
+bedauern
+bedauernd
+bedauernde
+bedauerndem
+bedauernden
+bedauernder
+bedauerndes
+bedauernswert
+bedauernswerte
+bedauernswertem
+bedauernswerten
+bedauernswerter
+bedauernswertere
+bedauernswerterem
+bedauernswerteren
+bedauernswerterer
+bedauernswerteres
+bedauernswertes
+bedauernswerteste
+bedauernswertestem
+bedauernswertesten
+bedauernswertester
+bedauernswertestes
+bedauerst
+bedauert
+bedauerte
+bedauertem
+bedauerten
+bedauerter
+bedauertes
+bedauertest
+bedauertet
+bedaure
+bedecke
+bedecken
+bedeckend
+bedeckende
+bedeckendem
+bedeckenden
+bedeckender
+bedeckendes
+bedeckst
+bedeckt
+bedeckte
+bedecktem
+bedeckten
+bedeckter
+bedecktes
+bedecktest
+bedecktet
+bedenke
+bedenken
+bedenkend
+bedenkende
+bedenkendem
+bedenkenden
+bedenkender
+bedenkendes
+bedenkenlos
+bedenkenlose
+bedenkenlosem
+bedenkenlosen
+bedenkenloser
+bedenkenloses
+bedenklich
+bedenkliche
+bedenklichem
+bedenklichen
+bedenklicher
+bedenklichere
+bedenklicherem
+bedenklicheren
+bedenklicherer
+bedenklicheres
+bedenkliches
+bedenklichste
+bedenklichstem
+bedenklichsten
+bedenklichster
+bedenklichstes
+bedenkst
+bedenkt
+bedeute
+bedeuten
+bedeutend
+bedeutende
+bedeutendem
+bedeutenden
+bedeutender
+bedeutendere
+bedeutenderem
+bedeutenderen
+bedeutenderer
+bedeutenderes
+bedeutendes
+bedeutendste
+bedeutendstem
+bedeutendsten
+bedeutendster
+bedeutendstes
+bedeutest
+bedeutet
+bedeutete
+bedeuteten
+bedeutetest
+bedeutetet
+bedeutsam
+bedeutsame
+bedeutsamem
+bedeutsamen
+bedeutsamer
+bedeutsamere
+bedeutsamerem
+bedeutsameren
+bedeutsamerer
+bedeutsameres
+bedeutsames
+bedeutsamste
+bedeutsamstem
+bedeutsamsten
+bedeutsamster
+bedeutsamstes
+bedeutungslos
+bedeutungslose
+bedeutungslosem
+bedeutungslosen
+bedeutungsloser
+bedeutungslosere
+bedeutungsloserem
+bedeutungsloseren
+bedeutungsloserer
+bedeutungsloseres
+bedeutungsloses
+bedeutungsloseste
+bedeutungslosestem
+bedeutungslosesten
+bedeutungslosester
+bedeutungslosestes
+bedeutungsvoll
+bedeutungsvolle
+bedeutungsvollem
+bedeutungsvollen
+bedeutungsvoller
+bedeutungsvollere
+bedeutungsvollerem
+bedeutungsvolleren
+bedeutungsvollerer
+bedeutungsvolleres
+bedeutungsvolles
+bedeutungsvollste
+bedeutungsvollstem
+bedeutungsvollsten
+bedeutungsvollster
+bedeutungsvollstes
+bedienbar
+bedienbare
+bedienbarem
+bedienbaren
+bedienbarer
+bedienbares
+bediene
+bedienen
+bedienend
+bedienende
+bedienendem
+bedienenden
+bedienender
+bedienendes
+bedienerfreundlich
+bedienerfreundliche
+bedienerfreundlichem
+bedienerfreundlichen
+bedienerfreundlicher
+bedienerfreundliches
+bedienst
+bedient
+bediente
+bedientem
+bedienten
+bedienter
+bedientes
+bedientest
+bedientet
+bedienungstechnisch
+bedienungstechnische
+bedienungstechnischem
+bedienungstechnischen
+bedienungstechnischer
+bedienungstechnisches
+bedinge
+bedingen
+bedingend
+bedingende
+bedingendem
+bedingenden
+bedingender
+bedingendes
+bedingst
+bedingt
+bedingte
+bedingtem
+bedingten
+bedingter
+bedingtes
+bedingtest
+bedingtet
+bedingungslos
+bedingungslose
+bedingungslosem
+bedingungslosen
+bedingungsloser
+bedingungslosere
+bedingungsloserem
+bedingungsloseren
+bedingungsloserer
+bedingungsloseres
+bedingungsloses
+bedingungsloseste
+bedingungslosestem
+bedingungslosesten
+bedingungslosester
+bedingungslosestes
+bedrohe
+bedrohen
+bedrohend
+bedrohende
+bedrohendem
+bedrohenden
+bedrohender
+bedrohendes
+bedrohlich
+bedrohliche
+bedrohlichem
+bedrohlichen
+bedrohlicher
+bedrohlichere
+bedrohlicherem
+bedrohlicheren
+bedrohlicherer
+bedrohlicheres
+bedrohliches
+bedrohlichste
+bedrohlichstem
+bedrohlichsten
+bedrohlichster
+bedrohlichstes
+bedrohst
+bedroht
+bedrohte
+bedrohtem
+bedrohten
+bedrohter
+bedrohtes
+bedrohtest
+bedrohtet
+bedruckbar
+bedruckbare
+bedruckbarem
+bedruckbaren
+bedruckbarer
+bedruckbares
+bedrucke
+bedrucken
+bedruckend
+bedruckende
+bedruckendem
+bedruckenden
+bedruckender
+bedruckendes
+bedruckst
+bedruckt
+bedruckte
+bedrucktem
+bedruckten
+bedruckter
+bedrucktes
+bedrucktest
+bedrucktet
+bedränge
+bedrängen
+bedrängend
+bedrängende
+bedrängendem
+bedrängenden
+bedrängender
+bedrängendes
+bedrängst
+bedrängt
+bedrängte
+bedrängtem
+bedrängten
+bedrängter
+bedrängtes
+bedrängtest
+bedrängtet
+bedrücke
+bedrücken
+bedrückend
+bedrückende
+bedrückendem
+bedrückenden
+bedrückender
+bedrückendes
+bedrückst
+bedrückt
+bedrückte
+bedrücktem
+bedrückten
+bedrückter
+bedrücktes
+bedrücktest
+bedrücktet
+bedurft
+bedurfte
+bedurften
+bedurftest
+bedurftet
+bedächtig
+bedächtige
+bedächtigem
+bedächtigen
+bedächtiger
+bedächtiges
+bedürfe
+bedürfen
+bedürfnislos
+bedürfnislose
+bedürfnislosem
+bedürfnislosen
+bedürfnisloser
+bedürfnislosere
+bedürfnisloserem
+bedürfnisloseren
+bedürfnisloserer
+bedürfnisloseres
+bedürfnisloses
+bedürfnisloseste
+bedürfnislosestem
+bedürfnislosesten
+bedürfnislosester
+bedürfnislosestes
+bedürftig
+bedürftige
+bedürftigem
+bedürftigen
+bedürftiger
+bedürftigere
+bedürftigerem
+bedürftigeren
+bedürftigerer
+bedürftigeres
+bedürftiges
+bedürftigste
+bedürftigstem
+bedürftigsten
+bedürftigster
+bedürftigstes
+beehre
+beehren
+beehrend
+beehrende
+beehrendem
+beehrenden
+beehrender
+beehrendes
+beehrst
+beehrt
+beehrte
+beehrtem
+beehrten
+beehrter
+beehrtes
+beehrtest
+beehrtet
+beeile
+beeilen
+beeilend
+beeilende
+beeilendem
+beeilenden
+beeilender
+beeilendes
+beeilst
+beeilt
+beeilte
+beeilten
+beeiltest
+beeiltet
+beeindrucke
+beeindrucken
+beeindruckend
+beeindruckende
+beeindruckendem
+beeindruckenden
+beeindruckender
+beeindruckendes
+beeindruckst
+beeindruckt
+beeindruckte
+beeindrucktem
+beeindruckten
+beeindruckter
+beeindrucktes
+beeindrucktest
+beeindrucktet
+beeinflussbar
+beeinflussbare
+beeinflussbarem
+beeinflussbaren
+beeinflussbarer
+beeinflussbares
+beeinflusse
+beeinflussen
+beeinflussend
+beeinflussende
+beeinflussendem
+beeinflussenden
+beeinflussender
+beeinflussendes
+beeinflussest
+beeinflusst
+beeinflusste
+beeinflusstem
+beeinflussten
+beeinflusster
+beeinflusstes
+beeinflusstest
+beeinflusstet
+beeinträchtige
+beeinträchtigen
+beeinträchtigend
+beeinträchtigende
+beeinträchtigendem
+beeinträchtigenden
+beeinträchtigender
+beeinträchtigendes
+beeinträchtigst
+beeinträchtigt
+beeinträchtigte
+beeinträchtigtem
+beeinträchtigten
+beeinträchtigter
+beeinträchtigtes
+beeinträchtigtest
+beeinträchtigtet
+beende
+beenden
+beendend
+beendende
+beendendem
+beendenden
+beendender
+beendendes
+beendest
+beendet
+beendete
+beendetem
+beendeten
+beendeter
+beendetes
+beendetest
+beendetet
+beendige
+beendigen
+beendigend
+beendigende
+beendigendem
+beendigenden
+beendigender
+beendigendes
+beendigst
+beendigt
+beendigte
+beendigtem
+beendigten
+beendigter
+beendigtes
+beendigtest
+beendigtet
+beerdige
+beerdigen
+beerdigend
+beerdigende
+beerdigendem
+beerdigenden
+beerdigender
+beerdigendes
+beerdigst
+beerdigt
+beerdigte
+beerdigtem
+beerdigten
+beerdigter
+beerdigtes
+beerdigtest
+beerdigtet
+befahl
+befahlen
+befahlst
+befahlt
+befahrbar
+befahrbare
+befahrbarem
+befahrbaren
+befahrbarer
+befahrbares
+befahre
+befahren
+befahrend
+befahrende
+befahrendem
+befahrenden
+befahrender
+befahrendes
+befahrene
+befahrenem
+befahrenen
+befahrener
+befahrenes
+befahrt
+befallen
+befallene
+befallenem
+befallenen
+befallener
+befallenes
+befand
+befanden
+befandest
+befandet
+befandst
+befangen
+befangene
+befangenem
+befangenen
+befangener
+befangenes
+befasse
+befassen
+befassend
+befassende
+befassendem
+befassenden
+befassender
+befassendes
+befassest
+befasst
+befasste
+befasstem
+befassten
+befasster
+befasstes
+befasstest
+befasstet
+befehle
+befehlen
+befehlend
+befehlende
+befehlendem
+befehlenden
+befehlender
+befehlendes
+befehlshaberisch
+befehlshaberische
+befehlshaberischem
+befehlshaberischen
+befehlshaberischer
+befehlshaberisches
+befehlt
+befestige
+befestigen
+befestigend
+befestigende
+befestigendem
+befestigenden
+befestigender
+befestigendes
+befestigst
+befestigt
+befestigte
+befestigtem
+befestigten
+befestigter
+befestigtes
+befestigtest
+befestigtet
+befeuchte
+befeuchten
+befeuchtend
+befeuchtende
+befeuchtendem
+befeuchtenden
+befeuchtender
+befeuchtendes
+befeuchtest
+befeuchtet
+befeuchtete
+befeuchtetem
+befeuchteten
+befeuchteter
+befeuchtetes
+befeuchtetest
+befeuchtetet
+befiehlst
+befiehlt
+befinde
+befinden
+befindend
+befindende
+befindendem
+befindenden
+befindender
+befindendes
+befindest
+befindet
+befindlich
+befindliche
+befindlichem
+befindlichen
+befindlicher
+befindliches
+beflecke
+beflecken
+befleckend
+befleckende
+befleckendem
+befleckenden
+befleckender
+befleckendes
+befleckst
+befleckt
+befleckte
+beflecktem
+befleckten
+befleckter
+beflecktes
+beflecktest
+beflecktet
+beflissen
+beflissene
+beflissenem
+beflissenen
+beflissener
+beflissenes
+beflissentlich
+beflissentliche
+beflissentlichem
+beflissentlichen
+beflissentlicher
+beflissentliches
+beflügele
+beflügeln
+beflügelnd
+beflügelnde
+beflügelndem
+beflügelnden
+beflügelnder
+beflügelndes
+beflügelst
+beflügelt
+beflügelte
+beflügeltem
+beflügelten
+beflügelter
+beflügeltes
+beflügeltest
+beflügeltet
+beflügle
+befohlen
+befohlene
+befohlenem
+befohlenen
+befohlener
+befohlenes
+befolge
+befolgen
+befolgend
+befolgende
+befolgendem
+befolgenden
+befolgender
+befolgendes
+befolgst
+befolgt
+befolgte
+befolgtem
+befolgten
+befolgter
+befolgtes
+befolgtest
+befolgtet
+befrackt
+befrackte
+befracktem
+befrackten
+befrackter
+befracktes
+befrage
+befragen
+befragend
+befragende
+befragendem
+befragenden
+befragender
+befragendes
+befragst
+befragt
+befragte
+befragtem
+befragten
+befragter
+befragtes
+befragtest
+befragtet
+befreie
+befreien
+befreiend
+befreiende
+befreiendem
+befreienden
+befreiender
+befreiendes
+befreist
+befreit
+befreite
+befreitem
+befreiten
+befreiter
+befreites
+befreitest
+befreitet
+befremde
+befremden
+befremdend
+befremdende
+befremdendem
+befremdenden
+befremdender
+befremdendes
+befremdest
+befremdet
+befremdete
+befremdetem
+befremdeten
+befremdeter
+befremdetes
+befremdetest
+befremdetet
+befremdlich
+befremdliche
+befremdlichem
+befremdlichen
+befremdlicher
+befremdliches
+befreunde
+befreunden
+befreundend
+befreundende
+befreundendem
+befreundenden
+befreundender
+befreundendes
+befreundest
+befreundet
+befreundete
+befreundetem
+befreundeten
+befreundeter
+befreundetes
+befreundetest
+befreundetet
+befriede
+befrieden
+befriedend
+befriedende
+befriedendem
+befriedenden
+befriedender
+befriedendes
+befriedest
+befriedet
+befriedete
+befriedetem
+befriedeten
+befriedeter
+befriedetes
+befriedetest
+befriedetet
+befriedige
+befriedigen
+befriedigend
+befriedigende
+befriedigendem
+befriedigenden
+befriedigender
+befriedigendere
+befriedigenderem
+befriedigenderen
+befriedigenderer
+befriedigenderes
+befriedigendes
+befriedigendste
+befriedigendstem
+befriedigendsten
+befriedigendster
+befriedigendstes
+befriedigst
+befriedigt
+befriedigte
+befriedigtem
+befriedigten
+befriedigter
+befriedigtes
+befriedigtest
+befriedigtet
+befriste
+befristen
+befristend
+befristende
+befristendem
+befristenden
+befristender
+befristendes
+befristest
+befristet
+befristete
+befristetem
+befristeten
+befristeter
+befristetes
+befristetest
+befristetet
+befruchte
+befruchten
+befruchtend
+befruchtende
+befruchtendem
+befruchtenden
+befruchtender
+befruchtendes
+befruchtest
+befruchtet
+befruchtete
+befruchtetem
+befruchteten
+befruchteter
+befruchtetes
+befruchtetest
+befruchtetet
+befugt
+befugte
+befugtem
+befugten
+befugter
+befugtes
+befuhr
+befuhren
+befuhrst
+befuhrt
+befunden
+befundene
+befundenem
+befundenen
+befundener
+befundenes
+befähige
+befähigen
+befähigend
+befähigende
+befähigendem
+befähigenden
+befähigender
+befähigendes
+befähigst
+befähigt
+befähigte
+befähigtem
+befähigten
+befähigter
+befähigtes
+befähigtest
+befähigtet
+befährst
+befährt
+befällst
+befällt
+befördere
+befördern
+befördernd
+befördernde
+beförderndem
+befördernden
+befördernder
+beförderndes
+beförderst
+befördert
+beförderte
+befördertem
+beförderten
+beförderter
+befördertes
+befördertest
+befördertet
+befördre
+befühle
+befühlen
+befühlend
+befühlende
+befühlendem
+befühlenden
+befühlender
+befühlendes
+befühlst
+befühlt
+befühlte
+befühlten
+befühltest
+befühltet
+befürchte
+befürchten
+befürchtend
+befürchtende
+befürchtendem
+befürchtenden
+befürchtender
+befürchtendes
+befürchtest
+befürchtet
+befürchtete
+befürchtetem
+befürchteten
+befürchteter
+befürchtetes
+befürchtetest
+befürchtetet
+befürworte
+befürworten
+befürwortend
+befürwortende
+befürwortendem
+befürwortenden
+befürwortender
+befürwortendes
+befürwortest
+befürwortet
+befürwortete
+befürwortetem
+befürworteten
+befürworteter
+befürwortetes
+befürwortetest
+befürwortetet
+begab
+begaben
+begabst
+begabt
+begabte
+begabtem
+begabten
+begabter
+begabtere
+begabterem
+begabteren
+begabterer
+begabteres
+begabtes
+begabteste
+begabtestem
+begabtesten
+begabtester
+begabtestes
+begackert
+begackerte
+begackertem
+begackerten
+begackerter
+begackertes
+begangen
+begangene
+begangenem
+begangenen
+begangener
+begangenes
+begann
+begannen
+begannst
+begannt
+begebe
+begeben
+begebend
+begebende
+begebendem
+begebenden
+begebender
+begebendes
+begebt
+begegne
+begegnen
+begegnend
+begegnende
+begegnendem
+begegnenden
+begegnender
+begegnendes
+begegnest
+begegnet
+begegnete
+begegneten
+begegnetest
+begegnetet
+begehbar
+begehbare
+begehbarem
+begehbaren
+begehbarer
+begehbares
+begehe
+begehen
+begehend
+begehende
+begehendem
+begehenden
+begehender
+begehendes
+begehre
+begehren
+begehrend
+begehrende
+begehrendem
+begehrenden
+begehrender
+begehrendes
+begehrenswert
+begehrenswerte
+begehrenswertem
+begehrenswerten
+begehrenswerter
+begehrenswertere
+begehrenswerterem
+begehrenswerteren
+begehrenswerterer
+begehrenswerteres
+begehrenswertes
+begehrenswerteste
+begehrenswertestem
+begehrenswertesten
+begehrenswertester
+begehrenswertestes
+begehrlich
+begehrliche
+begehrlichem
+begehrlichen
+begehrlicher
+begehrlichere
+begehrlicherem
+begehrlicheren
+begehrlicherer
+begehrlicheres
+begehrliches
+begehrlichste
+begehrlichstem
+begehrlichsten
+begehrlichster
+begehrlichstes
+begehrst
+begehrt
+begehrte
+begehrtem
+begehrten
+begehrter
+begehrtere
+begehrterem
+begehrteren
+begehrterer
+begehrteres
+begehrtes
+begehrtest
+begehrteste
+begehrtestem
+begehrtesten
+begehrtester
+begehrtestes
+begehrtet
+begehst
+begeht
+begeistere
+begeistern
+begeisternd
+begeisternde
+begeisterndem
+begeisternden
+begeisternder
+begeisterndes
+begeisterst
+begeistert
+begeisterte
+begeistertem
+begeisterten
+begeisterter
+begeistertes
+begeistertest
+begeistertet
+begeistre
+begibst
+begibt
+begierig
+begierige
+begierigem
+begierigen
+begieriger
+begieriges
+begieße
+begießen
+begießend
+begießende
+begießendem
+begießenden
+begießender
+begießendes
+begießest
+begießt
+beging
+begingen
+begingst
+begingt
+beginne
+beginnen
+beginnend
+beginnende
+beginnendem
+beginnenden
+beginnender
+beginnendes
+beginnst
+beginnt
+beglaubige
+beglaubigen
+beglaubigend
+beglaubigende
+beglaubigendem
+beglaubigenden
+beglaubigender
+beglaubigendes
+beglaubigst
+beglaubigt
+beglaubigte
+beglaubigtem
+beglaubigten
+beglaubigter
+beglaubigtes
+beglaubigtest
+beglaubigtet
+begleiche
+begleichen
+begleichend
+begleichende
+begleichendem
+begleichenden
+begleichender
+begleichendes
+begleichst
+begleicht
+begleite
+begleiten
+begleitend
+begleitende
+begleitendem
+begleitenden
+begleitender
+begleitendes
+begleitest
+begleitet
+begleitete
+begleitetem
+begleiteten
+begleiteter
+begleitetes
+begleitetest
+begleitetet
+beglich
+beglichen
+beglichene
+beglichenem
+beglichenen
+beglichener
+beglichenes
+beglichst
+beglicht
+beglücke
+beglücken
+beglückend
+beglückende
+beglückendem
+beglückenden
+beglückender
+beglückendes
+beglückst
+beglückt
+beglückte
+beglücktem
+beglückten
+beglückter
+beglücktes
+beglücktest
+beglücktet
+beglückwünsche
+beglückwünschen
+beglückwünschend
+beglückwünschende
+beglückwünschendem
+beglückwünschenden
+beglückwünschender
+beglückwünschendes
+beglückwünschest
+beglückwünschst
+beglückwünscht
+beglückwünschte
+beglückwünschtem
+beglückwünschten
+beglückwünschter
+beglückwünschtes
+beglückwünschtest
+beglückwünschtet
+begnadet
+begnadete
+begnadetem
+begnadeten
+begnadeter
+begnadetes
+begnadige
+begnadigen
+begnadigend
+begnadigende
+begnadigendem
+begnadigenden
+begnadigender
+begnadigendes
+begnadigst
+begnadigt
+begnadigte
+begnadigtem
+begnadigten
+begnadigter
+begnadigtes
+begnadigtest
+begnadigtet
+begnüge
+begnügen
+begnügend
+begnügende
+begnügendem
+begnügenden
+begnügender
+begnügendes
+begnügst
+begnügt
+begnügte
+begnügtem
+begnügten
+begnügter
+begnügtes
+begnügtest
+begnügtet
+begonnen
+begonnene
+begonnenem
+begonnenen
+begonnener
+begonnenes
+begoss
+begossen
+begossene
+begossenem
+begossenen
+begossener
+begossenes
+begossest
+begosst
+begrabe
+begraben
+begrabene
+begrabenem
+begrabenen
+begrabener
+begrabenes
+begrabt
+begradigt
+begradigte
+begradigtem
+begradigten
+begradigter
+begradigtes
+begreifbar
+begreifbare
+begreifbarem
+begreifbaren
+begreifbarer
+begreifbares
+begreife
+begreifen
+begreifend
+begreifende
+begreifendem
+begreifenden
+begreifender
+begreifendes
+begreifqqlich
+begreifqqliche
+begreifqqlichem
+begreifqqlichen
+begreifqqlicher
+begreifqqlichere
+begreifqqlicherem
+begreifqqlicheren
+begreifqqlicherer
+begreifqqlicheres
+begreifqqlicherweise
+begreifqqliches
+begreifqqlichste
+begreifqqlichstem
+begreifqqlichsten
+begreifqqlichster
+begreifqqlichstes
+begreifst
+begreift
+begrenze
+begrenzen
+begrenzend
+begrenzende
+begrenzendem
+begrenzenden
+begrenzender
+begrenzendes
+begrenzest
+begrenzt
+begrenzte
+begrenztem
+begrenzten
+begrenzter
+begrenztes
+begrenztest
+begrenztet
+begriff
+begriffen
+begriffene
+begriffenem
+begriffenen
+begriffener
+begriffenes
+begriffqqlich
+begriffqqliche
+begriffqqlichem
+begriffqqlichen
+begriffqqlicher
+begriffqqliches
+begriffsstutzig
+begriffsstutzige
+begriffsstutzigem
+begriffsstutzigen
+begriffsstutziger
+begriffsstutziges
+begriffst
+begrifft
+begrub
+begruben
+begrubst
+begrubt
+begräbst
+begräbt
+begründbar
+begründbare
+begründbarem
+begründbaren
+begründbarer
+begründbares
+begründe
+begründen
+begründend
+begründende
+begründendem
+begründenden
+begründender
+begründendes
+begründest
+begründet
+begründete
+begründetem
+begründeten
+begründeter
+begründetes
+begründetest
+begründetet
+begrüß
+begrüße
+begrüßen
+begrüßend
+begrüßende
+begrüßendem
+begrüßenden
+begrüßender
+begrüßendes
+begrüßenswert
+begrüßenswerte
+begrüßenswertem
+begrüßenswerten
+begrüßenswerter
+begrüßenswertere
+begrüßenswerterem
+begrüßenswerteren
+begrüßenswerterer
+begrüßenswerteres
+begrüßenswertes
+begrüßenswerteste
+begrüßenswertestem
+begrüßenswertesten
+begrüßenswertester
+begrüßenswertestes
+begrüßest
+begrüßt
+begrüßte
+begrüßtem
+begrüßten
+begrüßter
+begrüßtes
+begrüßtest
+begrüßtet
+begutachtbar
+begutachtbare
+begutachtbarem
+begutachtbaren
+begutachtbarer
+begutachtbares
+begutachte
+begutachten
+begutachtend
+begutachtende
+begutachtendem
+begutachtenden
+begutachtender
+begutachtendes
+begutachtest
+begutachtet
+begutachtete
+begutachtetem
+begutachteten
+begutachteter
+begutachtetes
+begutachtetest
+begutachtetet
+begünstige
+begünstigen
+begünstigend
+begünstigende
+begünstigendem
+begünstigenden
+begünstigender
+begünstigendes
+begünstigst
+begünstigt
+begünstigte
+begünstigtem
+begünstigten
+begünstigter
+begünstigtes
+begünstigtest
+begünstigtet
+begütert
+begüterte
+begütertem
+begüterten
+begüterter
+begütertere
+begüterterem
+begüterteren
+begüterterer
+begüterteres
+begütertes
+begüterteste
+begütertestem
+begütertesten
+begütertester
+begütertestes
+begütige
+begütigen
+begütigend
+begütigende
+begütigendem
+begütigenden
+begütigender
+begütigendes
+begütigst
+begütigt
+begütigte
+begütigtem
+begütigten
+begütigter
+begütigtes
+begütigtest
+begütigtet
+behaart
+behaarte
+behaartem
+behaarten
+behaarter
+behaartes
+behaftet
+behaftete
+behaftetem
+behafteten
+behafteter
+behaftetes
+behage
+behagen
+behagend
+behagende
+behagendem
+behagenden
+behagender
+behagendes
+behaglich
+behagliche
+behaglichem
+behaglichen
+behaglicher
+behaglichere
+behaglicherem
+behaglicheren
+behaglicherer
+behaglicheres
+behagliches
+behaglichste
+behaglichstem
+behaglichsten
+behaglichster
+behaglichstes
+behagst
+behagt
+behagte
+behagten
+behagtest
+behagtet
+behalf
+behalfen
+behalfest
+behalfst
+behalft
+behalte
+behalten
+behaltend
+behaltende
+behaltendem
+behaltenden
+behaltender
+behaltendes
+behaltene
+behaltenem
+behaltenen
+behaltener
+behaltenes
+behaltet
+behandelbar
+behandelbare
+behandelbarem
+behandelbaren
+behandelbarer
+behandelbares
+behandele
+behandeln
+behandelnd
+behandelnde
+behandelndem
+behandelnden
+behandelnder
+behandelndes
+behandelst
+behandelt
+behandelte
+behandeltem
+behandelten
+behandelter
+behandeltes
+behandeltest
+behandeltet
+behandle
+behandschuht
+behandschuhte
+behandschuhtem
+behandschuhten
+behandschuhter
+behandschuhtes
+behangen
+behangene
+behangenem
+behangenen
+behangener
+behangenes
+beharre
+beharren
+beharrend
+beharrende
+beharrendem
+beharrenden
+beharrender
+beharrendes
+beharrlich
+beharrliche
+beharrlichem
+beharrlichen
+beharrlicher
+beharrliches
+beharrst
+beharrt
+beharrte
+beharrten
+beharrtest
+beharrtet
+behaue
+behauen
+behauend
+behauende
+behauendem
+behauenden
+behauender
+behauendes
+behauene
+behauenem
+behauenen
+behauener
+behauenes
+behaupte
+behaupten
+behauptend
+behauptende
+behauptendem
+behauptenden
+behauptender
+behauptendes
+behauptest
+behauptet
+behauptete
+behauptetem
+behaupteten
+behaupteter
+behauptetes
+behauptetest
+behauptetet
+behause
+behausen
+behausend
+behausende
+behausendem
+behausenden
+behausender
+behausendes
+behausest
+behaust
+behauste
+behausten
+behaustest
+behaustet
+behaut
+behaute
+behautem
+behauten
+behauter
+behautes
+behautest
+behautet
+behebbar
+behebbare
+behebbarem
+behebbaren
+behebbarer
+behebbares
+behebe
+beheben
+behebend
+behebende
+behebendem
+behebenden
+behebender
+behebendes
+behebst
+behebt
+beheimatet
+beheimatete
+beheimatetem
+beheimateten
+beheimateter
+beheimatetes
+beheizbar
+beheizbare
+beheizbarem
+beheizbaren
+beheizbarer
+beheizbares
+beheize
+beheizen
+beheizend
+beheizende
+beheizendem
+beheizenden
+beheizender
+beheizendes
+beheizest
+beheizt
+beheizte
+beheiztem
+beheizten
+beheizter
+beheiztes
+beheiztest
+beheiztet
+behelfe
+behelfen
+behelfend
+behelfende
+behelfendem
+behelfenden
+behelfender
+behelfendes
+behelfsmäßig
+behelfsmäßige
+behelfsmäßigem
+behelfsmäßigen
+behelfsmäßiger
+behelfsmäßiges
+behelft
+behellige
+behelligen
+behelligend
+behelligende
+behelligendem
+behelligenden
+behelligender
+behelligendes
+behelligst
+behelligt
+behelligte
+behelligtem
+behelligten
+behelligter
+behelligtes
+behelligtest
+behelligtet
+beherberge
+beherbergen
+beherbergend
+beherbergende
+beherbergendem
+beherbergenden
+beherbergender
+beherbergendes
+beherbergst
+beherbergt
+beherbergte
+beherbergtem
+beherbergten
+beherbergter
+beherbergtes
+beherbergtest
+beherbergtet
+beherrschbar
+beherrschbare
+beherrschbarem
+beherrschbaren
+beherrschbarer
+beherrschbares
+beherrsche
+beherrschen
+beherrschend
+beherrschende
+beherrschendem
+beherrschenden
+beherrschender
+beherrschendes
+beherrschest
+beherrschst
+beherrscht
+beherrschte
+beherrschtem
+beherrschten
+beherrschter
+beherrschtes
+beherrschtest
+beherrschtet
+beherzige
+beherzigen
+beherzigend
+beherzigende
+beherzigendem
+beherzigenden
+beherzigender
+beherzigendes
+beherzigst
+beherzigt
+beherzigte
+beherzigtem
+beherzigten
+beherzigter
+beherzigtes
+beherzigtest
+beherzigtet
+beherzt
+beherzte
+beherztem
+beherzten
+beherzter
+beherztes
+behexe
+behexen
+behexend
+behexende
+behexendem
+behexenden
+behexender
+behexendes
+behexest
+behext
+behexte
+behextem
+behexten
+behexter
+behextes
+behextest
+behextet
+behielt
+behielte
+behielten
+behieltest
+behieltet
+behieltst
+behilfqqlich
+behilfqqliche
+behilfqqlichem
+behilfqqlichen
+behilfqqlicher
+behilfqqliches
+behilfst
+behilft
+behindere
+behindern
+behindernd
+behindernde
+behinderndem
+behindernden
+behindernder
+behinderndes
+behinderst
+behindert
+behinderte
+behindertem
+behinderten
+behinderter
+behindertes
+behindertest
+behindertet
+behindre
+behob
+behoben
+behobene
+behobenem
+behobenen
+behobener
+behobenes
+behobst
+behobt
+beholfen
+behorche
+behorchen
+behorchend
+behorchende
+behorchendem
+behorchenden
+behorchender
+behorchendes
+behorchst
+behorcht
+behorchte
+behorchtem
+behorchten
+behorchter
+behorchtes
+behorchtest
+behorchtet
+behutsam
+behutsame
+behutsamem
+behutsamen
+behutsamer
+behutsamere
+behutsamerem
+behutsameren
+behutsamerer
+behutsameres
+behutsames
+behutsamste
+behutsamstem
+behutsamsten
+behutsamster
+behutsamstes
+behäbig
+behäbige
+behäbigem
+behäbigen
+behäbiger
+behäbiges
+behält
+behältst
+behände
+behändem
+behänden
+behänder
+behändes
+behängt
+behängte
+behängtem
+behängten
+behängter
+behängtes
+behördlich
+behördliche
+behördlichem
+behördlichen
+behördlicher
+behördliches
+behüte
+behüten
+behütend
+behütende
+behütendem
+behütenden
+behütender
+behütendes
+behütest
+behütet
+behütete
+behütetem
+behüteten
+behüteter
+behütetes
+behütetest
+behütetet
+bei
+beibehalte
+beibehalten
+beibehaltend
+beibehaltende
+beibehaltendem
+beibehaltenden
+beibehaltender
+beibehaltendes
+beibehaltene
+beibehaltenem
+beibehaltenen
+beibehaltener
+beibehaltenes
+beibehaltet
+beibehielt
+beibehielten
+beibehieltest
+beibehieltet
+beibehieltst
+beibehälst
+beibehält
+beibringe
+beibringen
+beibringend
+beibringende
+beibringendem
+beibringenden
+beibringender
+beibringendes
+beibringst
+beibringt
+beichte
+beichten
+beichtend
+beichtende
+beichtendem
+beichtenden
+beichtender
+beichtendes
+beichtest
+beichtet
+beichtete
+beichteten
+beichtetest
+beichtetet
+beide
+beidem
+beiden
+beider
+beiderlei
+beiderseitig
+beiderseitige
+beiderseitigem
+beiderseitigen
+beiderseitiger
+beiderseitiges
+beiderseits
+beides
+beidseitig
+beidseitige
+beidseitigem
+beidseitigen
+beidseitiger
+beidseitiges
+beieinander
+beifolge
+beifolgen
+beifolgend
+beifolgende
+beifolgendem
+beifolgenden
+beifolgender
+beifolgendes
+beifolgst
+beifolgt
+beifolgte
+beifolgten
+beifolgtest
+beifolgtet
+beifällig
+beifällige
+beifälligem
+beifälligen
+beifälliger
+beifälliges
+beifüge
+beifügen
+beifügend
+beifügende
+beifügendem
+beifügenden
+beifügender
+beifügendes
+beifügst
+beifügt
+beifügte
+beifügten
+beifügtest
+beifügtet
+beige
+beigebe
+beigeben
+beigebend
+beigebende
+beigebendem
+beigebenden
+beigebender
+beigebendes
+beigebracht
+beigebrachte
+beigebrachtem
+beigebrachten
+beigebrachter
+beigebrachtes
+beigebt
+beigefügt
+beigefügte
+beigefügtem
+beigefügten
+beigefügter
+beigefügtes
+beigegeben
+beigegebene
+beigegebenem
+beigegebenen
+beigegebener
+beigegebenes
+beigelegen
+beigelegene
+beigelegenem
+beigelegenen
+beigelegener
+beigelegenes
+beigelegt
+beigelegte
+beigelegtem
+beigelegten
+beigelegter
+beigelegtes
+beigem
+beigemengt
+beigemengte
+beigemengtem
+beigemengten
+beigemengter
+beigemengtes
+beigemessen
+beigemessene
+beigemessenem
+beigemessenen
+beigemessener
+beigemessenes
+beigemischt
+beigemischte
+beigemischtem
+beigemischten
+beigemischter
+beigemischtes
+beigen
+beigeordnet
+beigeordnete
+beigeordnetem
+beigeordneten
+beigeordneter
+beigeordnetes
+beigepflichtet
+beigepflichtete
+beigepflichtetem
+beigepflichteten
+beigepflichteter
+beigepflichtetes
+beiger
+beiges
+beigesetzt
+beigesetzte
+beigesetztem
+beigesetzten
+beigesetzter
+beigesetztes
+beigesprungen
+beigesprungene
+beigesprungenem
+beigesprungenen
+beigesprungener
+beigesprungenes
+beigestanden
+beigestandene
+beigestandenem
+beigestandenen
+beigestandener
+beigestandenes
+beigestellt
+beigestellte
+beigestelltem
+beigestellten
+beigestellter
+beigestelltes
+beigesteuert
+beigesteuerte
+beigesteuertem
+beigesteuerten
+beigesteuerter
+beigesteuertes
+beigetragen
+beigetragene
+beigetragenem
+beigetragenen
+beigetragener
+beigetragenes
+beigetreten
+beigetretene
+beigetretenem
+beigetretenen
+beigetretener
+beigetretenes
+beigewohnt
+beigewohnten
+beigewohntest
+beigewohntet
+beigewohntst
+beilege
+beilegen
+beilegend
+beilegende
+beilegendem
+beilegenden
+beilegender
+beilegendes
+beilegst
+beilegt
+beilegte
+beilegten
+beilegtest
+beilegtet
+beileibe
+beiliege
+beiliegen
+beiliegend
+beiliegende
+beiliegendem
+beiliegenden
+beiliegender
+beiliegendes
+beiliegst
+beiliegt
+beiläufig
+beiläufige
+beiläufigem
+beiläufigen
+beiläufiger
+beiläufiges
+beim
+beimenge
+beimengen
+beimengend
+beimengende
+beimengendem
+beimengenden
+beimengender
+beimengendes
+beimengst
+beimengt
+beimengte
+beimengten
+beimengtest
+beimengtet
+beimesse
+beimessen
+beimessend
+beimessende
+beimessendem
+beimessenden
+beimessender
+beimessendes
+beimesst
+beimische
+beimischen
+beimischend
+beimischende
+beimischendem
+beimischenden
+beimischender
+beimischendes
+beimischest
+beimischst
+beimischt
+beimischte
+beimischten
+beimischtest
+beimischtet
+beimisst
+beinah
+beinahe
+beinhalte
+beinhalten
+beinhaltend
+beinhaltende
+beinhaltendem
+beinhaltenden
+beinhaltender
+beinhaltendes
+beinhaltest
+beinhaltet
+beinhaltete
+beinhaltetem
+beinhalteten
+beinhalteter
+beinhaltetes
+beinhaltetest
+beinhaltetet
+beinhart
+beinharte
+beinhartem
+beinharten
+beinharter
+beinhartes
+beipflichte
+beipflichten
+beipflichtend
+beipflichtende
+beipflichtendem
+beipflichtenden
+beipflichtender
+beipflichtendes
+beipflichtest
+beipflichtet
+beipflichtete
+beipflichteten
+beipflichtetest
+beipflichtetet
+beirre
+beirren
+beirrend
+beirrende
+beirrendem
+beirrenden
+beirrender
+beirrendes
+beirrst
+beirrt
+beirrte
+beirrten
+beirrtest
+beirrtet
+beisammen
+beiseite
+beisetze
+beisetzen
+beisetzend
+beisetzende
+beisetzendem
+beisetzenden
+beisetzender
+beisetzendes
+beisetzest
+beisetzt
+beisetzte
+beisetzten
+beisetztest
+beisetztet
+beispielgebend
+beispielgebende
+beispielgebendem
+beispielgebenden
+beispielgebender
+beispielgebendes
+beispielhaft
+beispielhafte
+beispielhaftem
+beispielhaften
+beispielhafter
+beispielhaftere
+beispielhafterem
+beispielhafteren
+beispielhafterer
+beispielhafteres
+beispielhaftes
+beispielhafteste
+beispielhaftestem
+beispielhaftesten
+beispielhaftester
+beispielhaftestes
+beispiellos
+beispiellose
+beispiellosem
+beispiellosen
+beispielloser
+beispiellosere
+beispielloserem
+beispielloseren
+beispielloserer
+beispielloseres
+beispielloses
+beispielloseste
+beispiellosestem
+beispiellosesten
+beispiellosester
+beispiellosestes
+beispielshalber
+beispielsweise
+beispringe
+beispringen
+beispringend
+beispringende
+beispringendem
+beispringenden
+beispringender
+beispringendes
+beispringt
+beistehe
+beistehen
+beistehend
+beistehende
+beistehendem
+beistehenden
+beistehender
+beistehendes
+beistehst
+beisteht
+beistelle
+beistellen
+beistellend
+beistellende
+beistellendem
+beistellenden
+beistellender
+beistellendes
+beistellst
+beistellt
+beistellte
+beistellten
+beistelltest
+beistelltet
+beisteuere
+beisteuern
+beisteuernd
+beisteuernde
+beisteuerndem
+beisteuernden
+beisteuernder
+beisteuerndes
+beisteuerst
+beisteuert
+beisteuerte
+beisteuerten
+beisteuertest
+beisteuertet
+beisteure
+beitrage
+beitragen
+beitragend
+beitragende
+beitragendem
+beitragenden
+beitragender
+beitragendes
+beitragsfrei
+beitragsfreie
+beitragsfreiem
+beitragsfreien
+beitragsfreier
+beitragsfreies
+beitragt
+beitrat
+beitraten
+beitratest
+beitratet
+beitratst
+beitreibbar
+beitreibbare
+beitreibbarem
+beitreibbaren
+beitreibbarer
+beitreibbares
+beitreibe
+beitreiben
+beitreibend
+beitreibende
+beitreibendem
+beitreibenden
+beitreibender
+beitreibendes
+beitreibst
+beitreibt
+beitrete
+beitreten
+beitretend
+beitretende
+beitretendem
+beitretenden
+beitretender
+beitretendes
+beitretet
+beitrug
+beitrugen
+beitrugst
+beitrugt
+beiträgst
+beiträgt
+beitrüge
+beitrügen
+beitrügst
+beitrügt
+beiwohne
+beiwohnen
+beiwohnend
+beiwohnende
+beiwohnendem
+beiwohnenden
+beiwohnender
+beiwohnendes
+beiwohnst
+beiwohnt
+beiwohnte
+beiwohnten
+beiwohntest
+beiwohntet
+beizeiten
+beizubehalten
+beizubehaltend
+beizubehaltende
+beizubehaltendem
+beizubehaltenden
+beizubehaltender
+beizubehaltendes
+beizubringen
+beizubringend
+beizubringende
+beizubringendem
+beizubringenden
+beizubringender
+beizubringendes
+beizufügen
+beizufügend
+beizufügende
+beizufügendem
+beizufügenden
+beizufügender
+beizufügendes
+beizukommen
+beizukommend
+beizukommende
+beizukommendem
+beizukommenden
+beizukommender
+beizukommendes
+beizumessen
+beizumessend
+beizumessende
+beizumessendem
+beizumessenden
+beizumessender
+beizumessendes
+beizumischen
+beizumischend
+beizumischende
+beizumischendem
+beizumischenden
+beizumischender
+beizumischendes
+beizustehen
+beizustellen
+beizustellend
+beizustellende
+beizustellendem
+beizustellenden
+beizustellender
+beizustellendes
+beizutragen
+beizutragend
+beizutragende
+beizutragendem
+beizutragenden
+beizutragender
+beizutragendes
+beizutreten
+beizuwohnen
+beizuwohnend
+beizuwohnende
+beizuwohnendem
+beizuwohnenden
+beizuwohnender
+beizuwohnendes
+beiße
+beißen
+beißend
+beißende
+beißendem
+beißenden
+beißender
+beißendes
+beißest
+beißt
+bejahe
+bejahen
+bejahend
+bejahende
+bejahendem
+bejahenden
+bejahender
+bejahendes
+bejahrt
+bejahrte
+bejahrtem
+bejahrten
+bejahrter
+bejahrtes
+bejahst
+bejaht
+bejahte
+bejahtem
+bejahten
+bejahter
+bejahtes
+bejahtest
+bejahtet
+bejubele
+bejubeln
+bejubelnd
+bejubelnde
+bejubelndem
+bejubelnden
+bejubelnder
+bejubelndes
+bejubelst
+bejubelt
+bejubelte
+bejubeltem
+bejubelten
+bejubelter
+bejubeltes
+bejubeltest
+bejubeltet
+bejuble
+bekam
+bekamen
+bekamst
+bekamt
+bekannt
+bekannte
+bekanntem
+bekannten
+bekannter
+bekanntere
+bekannterem
+bekannteren
+bekannterer
+bekannteres
+bekanntermaßen
+bekanntes
+bekanntest
+bekannteste
+bekanntestem
+bekanntesten
+bekanntester
+bekanntestes
+bekanntet
+bekanntgebe
+bekanntgeben
+bekanntgebend
+bekanntgebende
+bekanntgebendem
+bekanntgebenden
+bekanntgebender
+bekanntgebendes
+bekanntgebt
+bekanntgibst
+bekanntgibt
+bekanntlich
+bekanntliche
+bekanntlichem
+bekanntlichen
+bekanntlicher
+bekanntliches
+bekanntmache
+bekanntmachen
+bekanntmachend
+bekanntmachende
+bekanntmachendem
+bekanntmachenden
+bekanntmachender
+bekanntmachendes
+bekanntmachst
+bekanntmacht
+bekanntmachte
+bekanntmachten
+bekanntmachtest
+bekanntmachtet
+bekanntzumachen
+bekanntzumachend
+bekanntzumachende
+bekanntzumachendem
+bekanntzumachenden
+bekanntzumachender
+bekanntzumachendes
+bekehre
+bekehren
+bekehrend
+bekehrende
+bekehrendem
+bekehrenden
+bekehrender
+bekehrendes
+bekehrst
+bekehrt
+bekehrte
+bekehrtem
+bekehrten
+bekehrter
+bekehrtes
+bekehrtest
+bekehrtet
+bekenne
+bekennen
+bekennend
+bekennende
+bekennendem
+bekennenden
+bekennender
+bekennendes
+bekennst
+bekennt
+beklage
+beklagen
+beklagend
+beklagende
+beklagendem
+beklagenden
+beklagender
+beklagendes
+beklagenswert
+beklagenswerte
+beklagenswertem
+beklagenswerten
+beklagenswerter
+beklagenswertes
+beklagst
+beklagt
+beklagte
+beklagtem
+beklagten
+beklagter
+beklagtes
+beklagtest
+beklagtet
+beklaue
+beklauen
+beklauend
+beklauende
+beklauendem
+beklauenden
+beklauender
+beklauendes
+beklaust
+beklaut
+beklaute
+beklautem
+beklauten
+beklauter
+beklautes
+beklautest
+beklautet
+beklebe
+bekleben
+beklebend
+beklebende
+beklebendem
+beklebenden
+beklebender
+beklebendes
+beklebst
+beklebt
+beklebte
+beklebtem
+beklebten
+beklebter
+beklebtes
+beklebtest
+beklebtet
+bekleckse
+beklecksen
+beklecksend
+beklecksende
+beklecksendem
+beklecksenden
+beklecksender
+beklecksendes
+beklecksest
+bekleckst
+bekleckste
+bekleckstem
+beklecksten
+bekleckster
+bekleckstes
+bekleckstest
+bekleckstet
+bekleide
+bekleiden
+bekleidend
+bekleidende
+bekleidendem
+bekleidenden
+bekleidender
+bekleidendes
+bekleidest
+bekleidet
+bekleidete
+bekleidetem
+bekleideten
+bekleideter
+bekleidetes
+bekleidetest
+bekleidetet
+beklemme
+beklemmen
+beklemmend
+beklemmende
+beklemmendem
+beklemmenden
+beklemmender
+beklemmendes
+beklemmst
+beklemmt
+beklommen
+beklommene
+beklommenem
+beklommenen
+beklommener
+beklommenes
+beknackt
+beknackte
+beknacktem
+beknackten
+beknackter
+beknacktes
+bekomme
+bekommen
+bekommend
+bekommende
+bekommendem
+bekommenden
+bekommender
+bekommendes
+bekommst
+bekommt
+bekriege
+bekriegen
+bekriegend
+bekriegende
+bekriegendem
+bekriegenden
+bekriegender
+bekriegendes
+bekriegst
+bekriegt
+bekriegte
+bekriegtem
+bekriegten
+bekriegter
+bekriegtes
+bekriegtest
+bekriegtet
+bekrittele
+bekritteln
+bekrittelnd
+bekrittelnde
+bekrittelndem
+bekrittelnden
+bekrittelnder
+bekrittelndes
+bekrittelst
+bekrittelt
+bekrittelte
+bekritteltem
+bekrittelten
+bekrittelter
+bekritteltes
+bekritteltest
+bekritteltet
+bekrittle
+bekräftige
+bekräftigen
+bekräftigend
+bekräftigende
+bekräftigendem
+bekräftigenden
+bekräftigender
+bekräftigendes
+bekräftigst
+bekräftigt
+bekräftigte
+bekräftigtem
+bekräftigten
+bekräftigter
+bekräftigtes
+bekräftigtest
+bekräftigtet
+bekränzt
+bekränzte
+bekränztem
+bekränzten
+bekränzter
+bekränztes
+bekunde
+bekunden
+bekundend
+bekundende
+bekundendem
+bekundenden
+bekundender
+bekundendes
+bekundest
+bekundet
+bekundete
+bekundetem
+bekundeten
+bekundeter
+bekundetes
+bekundetest
+bekundetet
+bekäme
+bekämen
+bekämpfe
+bekämpfen
+bekämpfend
+bekämpfende
+bekämpfendem
+bekämpfenden
+bekämpfender
+bekämpfendes
+bekämpfst
+bekämpft
+bekämpfte
+bekämpftem
+bekämpften
+bekämpfter
+bekämpftes
+bekämpftest
+bekämpftet
+bekämst
+bekämt
+bekömmlich
+bekömmliche
+bekömmlichem
+bekömmlichen
+bekömmlicher
+bekömmlichere
+bekömmlicherem
+bekömmlicheren
+bekömmlicherer
+bekömmlicheres
+bekömmliches
+bekömmlichste
+bekömmlichstem
+bekömmlichsten
+bekömmlichster
+bekömmlichstes
+bekümmere
+bekümmern
+bekümmernd
+bekümmernde
+bekümmerndem
+bekümmernden
+bekümmernder
+bekümmerndes
+bekümmerst
+bekümmert
+bekümmerte
+bekümmertem
+bekümmerten
+bekümmerter
+bekümmertes
+bekümmertest
+bekümmertet
+bekümmre
+belabere
+belabern
+belabernd
+belabernde
+belaberndem
+belabernden
+belabernder
+belaberndes
+belaberst
+belabert
+belaberte
+belabertem
+belaberten
+belaberter
+belabertes
+belabertest
+belabertet
+belabre
+belade
+beladen
+beladend
+beladende
+beladendem
+beladenden
+beladender
+beladendes
+beladene
+beladenem
+beladenen
+beladener
+beladenes
+beladet
+belagere
+belagern
+belagernd
+belagernde
+belagerndem
+belagernden
+belagernder
+belagerndes
+belagerst
+belagert
+belagerte
+belagertem
+belagerten
+belagerter
+belagertes
+belagertest
+belagertet
+belagre
+belanglos
+belanglose
+belanglosem
+belanglosen
+belangloser
+belanglosere
+belangloserem
+belangloseren
+belangloserer
+belangloseres
+belangloses
+belangloseste
+belanglosestem
+belanglosesten
+belanglosester
+belanglosestes
+belangvoll
+belangvolle
+belangvollem
+belangvollen
+belangvoller
+belangvolles
+belasse
+belassen
+belasst
+belastbar
+belastbare
+belastbarem
+belastbaren
+belastbarer
+belastbares
+belaste
+belasten
+belastend
+belastende
+belastendem
+belastenden
+belastender
+belastendes
+belastest
+belastet
+belastete
+belastetem
+belasteten
+belasteter
+belastetes
+belastetest
+belastetet
+belastungsfrei
+belastungsfreie
+belastungsfreiem
+belastungsfreien
+belastungsfreier
+belastungsfreies
+belaubt
+belaubte
+belaubtem
+belaubten
+belaubter
+belaubtes
+belauere
+belauern
+belauernd
+belauernde
+belauerndem
+belauernden
+belauernder
+belauerndes
+belauerst
+belauert
+belauerte
+belauertem
+belauerten
+belauerter
+belauertes
+belauertest
+belauertet
+belaufe
+belaufen
+belaufend
+belaufende
+belaufendem
+belaufenden
+belaufender
+belaufendes
+belauft
+belaure
+belausche
+belauschen
+belauschend
+belauschende
+belauschendem
+belauschenden
+belauschender
+belauschendes
+belauschest
+belauschst
+belauscht
+belauschte
+belauschtem
+belauschten
+belauschter
+belauschtes
+belauschtest
+belauschtet
+belebe
+beleben
+belebend
+belebende
+belebendem
+belebenden
+belebender
+belebendes
+belebst
+belebt
+belebte
+belebtem
+belebten
+belebter
+belebtes
+belebtest
+belebtet
+belegbar
+belegbare
+belegbarem
+belegbaren
+belegbarer
+belegbares
+belege
+belegen
+belegend
+belegende
+belegendem
+belegenden
+belegender
+belegendes
+belegst
+belegt
+belegte
+belegtem
+belegten
+belegter
+belegtes
+belegtest
+belegtet
+belehre
+belehren
+belehrend
+belehrende
+belehrendem
+belehrenden
+belehrender
+belehrendere
+belehrenderem
+belehrenderen
+belehrenderer
+belehrenderes
+belehrendes
+belehrendste
+belehrendstem
+belehrendsten
+belehrendster
+belehrendstes
+belehrst
+belehrt
+belehrte
+belehrtem
+belehrten
+belehrter
+belehrtes
+belehrtest
+belehrtet
+beleibt
+beleibte
+beleibtem
+beleibten
+beleibter
+beleibtes
+beleidige
+beleidigen
+beleidigend
+beleidigende
+beleidigendem
+beleidigenden
+beleidigender
+beleidigendes
+beleidigst
+beleidigt
+beleidigte
+beleidigtem
+beleidigten
+beleidigter
+beleidigtes
+beleidigtest
+beleidigtet
+beleihbar
+beleihbare
+beleihbarem
+beleihbaren
+beleihbarer
+beleihbares
+beleihe
+beleihen
+beleihend
+beleihende
+beleihendem
+beleihenden
+beleihender
+beleihendes
+beleihst
+beleiht
+beleihungsfähig
+beleihungsfähige
+beleihungsfähigem
+beleihungsfähigen
+beleihungsfähiger
+beleihungsfähigere
+beleihungsfähigerem
+beleihungsfähigeren
+beleihungsfähigerer
+beleihungsfähigeres
+beleihungsfähiges
+beleihungsfähigste
+beleihungsfähigstem
+beleihungsfähigsten
+beleihungsfähigster
+beleihungsfähigstes
+belesen
+belesene
+belesenem
+belesenen
+belesener
+belesenes
+beleuchte
+beleuchten
+beleuchtend
+beleuchtende
+beleuchtendem
+beleuchtenden
+beleuchtender
+beleuchtendes
+beleuchtest
+beleuchtet
+beleuchtete
+beleuchtetem
+beleuchteten
+beleuchteter
+beleuchtetes
+beleuchtetest
+beleuchtetet
+belgisch
+belgische
+belgischem
+belgischen
+belgischer
+belgisches
+belichte
+belichten
+belichtend
+belichtende
+belichtendem
+belichtenden
+belichtender
+belichtendes
+belichtest
+belichtet
+belichtete
+belichtetem
+belichteten
+belichteter
+belichtetes
+belichtetest
+belichtetet
+beliebe
+belieben
+beliebig
+beliebige
+beliebigem
+beliebigen
+beliebiger
+beliebiges
+beliebst
+beliebt
+beliebte
+beliebtem
+beliebten
+beliebter
+beliebtere
+beliebterem
+beliebteren
+beliebterer
+beliebteres
+beliebtes
+beliebtest
+beliebteste
+beliebtestem
+beliebtesten
+beliebtester
+beliebtestes
+beliebtet
+belief
+beliefen
+beliefere
+beliefern
+beliefernd
+beliefernde
+belieferndem
+beliefernden
+beliefernder
+belieferndes
+belieferst
+beliefert
+belieferte
+beliefertem
+belieferten
+belieferter
+beliefertes
+beliefertest
+beliefertet
+beliefre
+beliege
+beliegen
+beliegend
+beliegende
+beliegendem
+beliegenden
+beliegender
+beliegendes
+beliegst
+beliegt
+belieh
+beliehen
+beliehene
+beliehenem
+beliehenen
+beliehener
+beliehenes
+beliehst
+belieht
+beließ
+beließen
+beließest
+beließt
+belle
+bellen
+bellend
+bellende
+bellendem
+bellenden
+bellender
+bellendes
+belletristisch
+belletristische
+belletristischem
+belletristischen
+belletristischer
+belletristisches
+bellst
+bellt
+bellte
+bellten
+belltest
+belltet
+belobigt
+belobigte
+belobigtem
+belobigten
+belobigter
+belobigtes
+belog
+belogen
+belogene
+belogenem
+belogenen
+belogener
+belogenes
+belogst
+belogt
+belohne
+belohnen
+belohnend
+belohnende
+belohnendem
+belohnenden
+belohnender
+belohnendes
+belohnst
+belohnt
+belohnte
+belohntem
+belohnten
+belohnter
+belohntes
+belohntest
+belohntet
+belud
+beluden
+beludest
+beludet
+beludst
+belustige
+belustigen
+belustigend
+belustigende
+belustigendem
+belustigenden
+belustigender
+belustigendes
+belustigst
+belustigt
+belustigte
+belustigtem
+belustigten
+belustigter
+belustigtes
+belustigtest
+belustigtet
+belächele
+belächeln
+belächelnd
+belächelnde
+belächelndem
+belächelnden
+belächelnder
+belächelndes
+belächelst
+belächelt
+belächelte
+belächeltem
+belächelten
+belächelter
+belächeltes
+belächeltest
+belächeltet
+belächle
+belädst
+belädt
+belämmert
+belämmerte
+belämmertem
+belämmerten
+belämmerter
+belämmertes
+belästige
+belästigen
+belästigend
+belästigende
+belästigendem
+belästigenden
+belästigender
+belästigendes
+belästigst
+belästigt
+belästigte
+belästigtem
+belästigten
+belästigter
+belästigtes
+belästigtest
+belästigtet
+beläufst
+beläuft
+belüge
+belügen
+belügend
+belügende
+belügendem
+belügenden
+belügender
+belügendes
+belügst
+belügt
+bemale
+bemalen
+bemalend
+bemalende
+bemalendem
+bemalenden
+bemalender
+bemalendes
+bemalst
+bemalt
+bemalte
+bemaltem
+bemalten
+bemalter
+bemaltes
+bemaltest
+bemaltet
+bemannt
+bemannte
+bemanntem
+bemannten
+bemannter
+bemanntes
+bemaß
+bemaßen
+bemaßest
+bemaßt
+bemerkbar
+bemerkbare
+bemerkbarem
+bemerkbaren
+bemerkbarer
+bemerkbarere
+bemerkbarerem
+bemerkbareren
+bemerkbarerer
+bemerkbareres
+bemerkbares
+bemerkbarste
+bemerkbarstem
+bemerkbarsten
+bemerkbarster
+bemerkbarstes
+bemerke
+bemerken
+bemerkend
+bemerkende
+bemerkendem
+bemerkenden
+bemerkender
+bemerkendes
+bemerkenswert
+bemerkenswerte
+bemerkenswertem
+bemerkenswerten
+bemerkenswerter
+bemerkenswertere
+bemerkenswerterem
+bemerkenswerteren
+bemerkenswerterer
+bemerkenswerteres
+bemerkenswerterweise
+bemerkenswertes
+bemerkenswerteste
+bemerkenswertestem
+bemerkenswertesten
+bemerkenswertester
+bemerkenswertestes
+bemerkst
+bemerkt
+bemerkte
+bemerktem
+bemerkten
+bemerkter
+bemerktes
+bemerktest
+bemerktet
+bemesse
+bemessen
+bemessend
+bemessende
+bemessendem
+bemessenden
+bemessender
+bemessendes
+bemessene
+bemessenem
+bemessenen
+bemessener
+bemessenes
+bemesst
+bemisst
+bemitleide
+bemitleiden
+bemitleidend
+bemitleidende
+bemitleidendem
+bemitleidenden
+bemitleidender
+bemitleidendes
+bemitleidenswert
+bemitleidenswerte
+bemitleidenswertem
+bemitleidenswerten
+bemitleidenswerter
+bemitleidenswertere
+bemitleidenswerterem
+bemitleidenswerteren
+bemitleidenswerterer
+bemitleidenswerteres
+bemitleidenswertes
+bemitleidenswerteste
+bemitleidenswertestem
+bemitleidenswertesten
+bemitleidenswertester
+bemitleidenswertestes
+bemitleidest
+bemitleidet
+bemitleidete
+bemitleidetem
+bemitleideten
+bemitleideter
+bemitleidetes
+bemitleidetest
+bemitleidetet
+bemittelt
+bemittelte
+bemitteltem
+bemittelten
+bemittelter
+bemitteltes
+bemuttere
+bemuttern
+bemutternd
+bemutternde
+bemutterndem
+bemutternden
+bemutternder
+bemutterndes
+bemutterst
+bemuttert
+bemutterte
+bemuttertem
+bemutterten
+bemutterter
+bemuttertes
+bemuttertest
+bemuttertet
+bemuttre
+bemächtige
+bemächtigen
+bemächtigend
+bemächtigende
+bemächtigendem
+bemächtigenden
+bemächtigender
+bemächtigendes
+bemächtigst
+bemächtigt
+bemächtigte
+bemächtigtem
+bemächtigten
+bemächtigter
+bemächtigtes
+bemächtigtest
+bemächtigtet
+bemäkelst
+bemäkelt
+bemängele
+bemängeln
+bemängelnd
+bemängelnde
+bemängelndem
+bemängelnden
+bemängelnder
+bemängelndes
+bemängelst
+bemängelt
+bemängelte
+bemängeltem
+bemängelten
+bemängelter
+bemängeltes
+bemängeltest
+bemängeltet
+bemängle
+bemühe
+bemühen
+bemühend
+bemühende
+bemühendem
+bemühenden
+bemühender
+bemühendes
+bemühst
+bemüht
+bemühte
+bemühtem
+bemühten
+bemühter
+bemühtes
+bemühtest
+bemühtet
+bemüßige
+bemüßigen
+bemüßigend
+bemüßigende
+bemüßigendem
+bemüßigenden
+bemüßigender
+bemüßigendes
+bemüßigst
+bemüßigt
+bemüßigte
+bemüßigten
+bemüßigtest
+bemüßigtet
+benachbart
+benachbarte
+benachbartem
+benachbarten
+benachbarter
+benachbartes
+benachrichtige
+benachrichtigen
+benachrichtigend
+benachrichtigende
+benachrichtigendem
+benachrichtigenden
+benachrichtigender
+benachrichtigendes
+benachrichtigst
+benachrichtigt
+benachrichtigte
+benachrichtigtem
+benachrichtigten
+benachrichtigter
+benachrichtigtes
+benachrichtigtest
+benachrichtigtet
+benachteilige
+benachteiligen
+benachteiligend
+benachteiligende
+benachteiligendem
+benachteiligenden
+benachteiligender
+benachteiligendes
+benachteiligst
+benachteiligt
+benachteiligte
+benachteiligtem
+benachteiligten
+benachteiligter
+benachteiligtes
+benachteiligtest
+benachteiligtet
+benahm
+benahmen
+benahmst
+benahmt
+benam
+benamen
+benamst
+benamt
+benannt
+benannte
+benanntem
+benannten
+benannter
+benanntes
+benanntest
+benanntet
+benebele
+benebeln
+benebelnd
+benebelnde
+benebelndem
+benebelnden
+benebelnder
+benebelndes
+benebelst
+benebelt
+benebelte
+benebeltem
+benebelten
+benebelter
+benebeltes
+benebeltest
+benebeltet
+beneble
+benehme
+benehmen
+benehmend
+benehmende
+benehmendem
+benehmenden
+benehmender
+benehmendes
+benehmt
+beneide
+beneiden
+beneidend
+beneidende
+beneidendem
+beneidenden
+beneidender
+beneidendes
+beneidenswert
+beneidenswerte
+beneidenswertem
+beneidenswerten
+beneidenswerter
+beneidenswertere
+beneidenswerterem
+beneidenswerteren
+beneidenswerterer
+beneidenswerteres
+beneidenswertes
+beneidenswerteste
+beneidenswertestem
+beneidenswertesten
+beneidenswertester
+beneidenswertestes
+beneidest
+beneidet
+beneidete
+beneidetem
+beneideten
+beneideter
+beneidetes
+beneidetest
+beneidetet
+benenne
+benennen
+benennend
+benennende
+benennendem
+benennenden
+benennender
+benennendes
+benennst
+benennt
+benetze
+benetzen
+benetzend
+benetzende
+benetzendem
+benetzenden
+benetzender
+benetzendes
+benetzest
+benetzt
+benetzte
+benetztem
+benetzten
+benetzter
+benetztes
+benetztest
+benetztet
+bengalisch
+bengalische
+bengalischem
+bengalischen
+bengalischer
+bengalisches
+bennenst
+bennent
+benommen
+benommene
+benommenem
+benommenen
+benommener
+benommenes
+benutzbar
+benutzbare
+benutzbarem
+benutzbaren
+benutzbarer
+benutzbares
+benutze
+benutzen
+benutzend
+benutzende
+benutzendem
+benutzenden
+benutzender
+benutzendes
+benutzerdefiniert
+benutzerdefinierte
+benutzerdefiniertem
+benutzerdefinierten
+benutzerdefinierter
+benutzerdefiniertes
+benutzerfreundlich
+benutzerfreundliche
+benutzerfreundlichem
+benutzerfreundlichen
+benutzerfreundlicher
+benutzerfreundliches
+benutzerorientiert
+benutzerorientierte
+benutzerorientiertem
+benutzerorientierten
+benutzerorientierter
+benutzerorientiertes
+benutzest
+benutzt
+benutzte
+benutztem
+benutzten
+benutzter
+benutztes
+benutztest
+benutztet
+benötige
+benötigen
+benötigend
+benötigende
+benötigendem
+benötigenden
+benötigender
+benötigendes
+benötigst
+benötigt
+benötigte
+benötigtem
+benötigten
+benötigter
+benötigtes
+benötigtest
+benötigtet
+benützbar
+benützbare
+benützbarem
+benützbaren
+benützbarer
+benützbares
+benütze
+benützen
+benützend
+benützende
+benützendem
+benützenden
+benützender
+benützendes
+benützest
+benützt
+benützte
+benütztem
+benützten
+benützter
+benütztes
+benütztest
+benütztet
+beobachtbar
+beobachtbare
+beobachtbarem
+beobachtbaren
+beobachtbarer
+beobachtbares
+beobachte
+beobachten
+beobachtend
+beobachtende
+beobachtendem
+beobachtenden
+beobachtender
+beobachtendes
+beobachtest
+beobachtet
+beobachtete
+beobachtetem
+beobachteten
+beobachteter
+beobachtetes
+beobachtetest
+beobachtetet
+beordert
+beorderte
+beordertem
+beorderten
+beorderter
+beordertes
+bepacke
+bepacken
+bepackend
+bepackende
+bepackendem
+bepackenden
+bepackender
+bepackendes
+bepackst
+bepackt
+bepackte
+bepacktem
+bepackten
+bepackter
+bepacktes
+bepacktest
+bepacktet
+bepflanze
+bepflanzen
+bepflanzend
+bepflanzende
+bepflanzendem
+bepflanzenden
+bepflanzender
+bepflanzendes
+bepflanzest
+bepflanzt
+bepflanzte
+bepflanztem
+bepflanzten
+bepflanzter
+bepflanztes
+bepflanztest
+bepflanztet
+bequatsche
+bequatschen
+bequatschend
+bequatschende
+bequatschendem
+bequatschenden
+bequatschender
+bequatschendes
+bequatschest
+bequatschst
+bequatscht
+bequatschte
+bequatschten
+bequatschtest
+bequatschtet
+bequem
+bequeme
+bequemem
+bequemen
+bequemend
+bequemende
+bequemendem
+bequemenden
+bequemender
+bequemendes
+bequemer
+bequemere
+bequemerem
+bequemeren
+bequemerer
+bequemeres
+bequemes
+bequemst
+bequemste
+bequemstem
+bequemsten
+bequemster
+bequemstes
+bequemt
+bequemte
+bequemten
+bequemtest
+bequemtet
+berappe
+berappen
+berappend
+berappende
+berappendem
+berappenden
+berappender
+berappendes
+berappst
+berappt
+berappte
+berapptem
+berappten
+berappter
+berapptes
+berapptest
+berapptet
+berate
+beraten
+beratend
+beratende
+beratendem
+beratenden
+beratender
+beratendes
+beratene
+beratenem
+beratenen
+beratener
+beratenes
+beratet
+beratschlage
+beratschlagen
+beratschlagend
+beratschlagende
+beratschlagendem
+beratschlagenden
+beratschlagender
+beratschlagendes
+beratschlagst
+beratschlagt
+beratschlagte
+beratschlagtem
+beratschlagten
+beratschlagter
+beratschlagtes
+beratschlagtest
+beratschlagtet
+beraube
+berauben
+beraubend
+beraubende
+beraubendem
+beraubenden
+beraubender
+beraubendes
+beraubst
+beraubt
+beraubte
+beraubtem
+beraubten
+beraubter
+beraubtes
+beraubtest
+beraubtet
+berausche
+berauschen
+berauschend
+berauschende
+berauschendem
+berauschenden
+berauschender
+berauschendes
+berauschest
+berauschst
+berauscht
+berauschte
+berauschtem
+berauschten
+berauschter
+berauschtes
+berauschtest
+berauschtet
+berechenbar
+berechenbare
+berechenbarem
+berechenbaren
+berechenbarer
+berechenbares
+berechne
+berechnen
+berechnend
+berechnende
+berechnendem
+berechnenden
+berechnender
+berechnendes
+berechnest
+berechnet
+berechnete
+berechnetem
+berechneten
+berechneter
+berechnetes
+berechnetest
+berechnetet
+berechtige
+berechtigen
+berechtigend
+berechtigende
+berechtigendem
+berechtigenden
+berechtigender
+berechtigendes
+berechtigst
+berechtigt
+berechtigte
+berechtigtem
+berechtigten
+berechtigter
+berechtigterweise
+berechtigtes
+berechtigtest
+berechtigtet
+berede
+bereden
+beredend
+beredende
+beredendem
+beredenden
+beredender
+beredendes
+beredest
+beredet
+beredete
+beredetem
+beredeten
+beredeter
+beredetes
+beredetest
+beredetet
+beredt
+beredte
+beredtem
+beredten
+beredter
+beredtere
+beredterem
+beredteren
+beredterer
+beredteres
+beredtes
+beredteste
+beredtestem
+beredtesten
+beredtester
+beredtestes
+bereichere
+bereichern
+bereichernd
+bereichernde
+bereicherndem
+bereichernden
+bereichernder
+bereicherndes
+bereicherst
+bereichert
+bereicherte
+bereichertem
+bereicherten
+bereicherter
+bereichertes
+bereichertest
+bereichertet
+bereichre
+bereichsübergreifend
+bereichsübergreifende
+bereichsübergreifendem
+bereichsübergreifenden
+bereichsübergreifender
+bereichsübergreifendes
+bereinige
+bereinigen
+bereinigend
+bereinigende
+bereinigendem
+bereinigenden
+bereinigender
+bereinigendes
+bereinigst
+bereinigt
+bereinigte
+bereinigtem
+bereinigten
+bereinigter
+bereinigtes
+bereinigtest
+bereinigtet
+bereise
+bereisen
+bereisend
+bereisende
+bereisendem
+bereisenden
+bereisender
+bereisendes
+bereisest
+bereist
+bereiste
+bereistem
+bereisten
+bereister
+bereistes
+bereistest
+bereistet
+bereit
+bereite
+bereiten
+bereitend
+bereitende
+bereitendem
+bereitenden
+bereitender
+bereitendes
+bereiterkläre
+bereiterklären
+bereiterklärend
+bereiterklärende
+bereiterklärendem
+bereiterklärenden
+bereiterklärender
+bereiterklärendes
+bereiterklärst
+bereiterklärt
+bereiterklärte
+bereiterklärten
+bereiterklärtest
+bereiterklärtet
+bereitest
+bereitet
+bereitete
+bereitetem
+bereiteten
+bereiteter
+bereitetes
+bereitetest
+bereitetet
+bereitfinde
+bereitfinden
+bereitfindend
+bereitfindende
+bereitfindendem
+bereitfindenden
+bereitfindender
+bereitfindendes
+bereitfindest
+bereitfindet
+bereitgehalten
+bereitgehaltene
+bereitgehaltenem
+bereitgehaltenen
+bereitgehaltener
+bereitgehaltenes
+bereitgelegt
+bereitgelegte
+bereitgelegtem
+bereitgelegten
+bereitgelegter
+bereitgelegtes
+bereitgestellt
+bereitgestellte
+bereitgestelltem
+bereitgestellten
+bereitgestellter
+bereitgestelltes
+bereithalte
+bereithalten
+bereithaltend
+bereithaltende
+bereithaltendem
+bereithaltenden
+bereithaltender
+bereithaltendes
+bereithaltet
+bereithielt
+bereithielten
+bereithieltest
+bereithieltet
+bereithieltst
+bereithält
+bereithältst
+bereitliege
+bereitliegen
+bereitliegend
+bereitliegende
+bereitliegendem
+bereitliegenden
+bereitliegender
+bereitliegendes
+bereitliegst
+bereitliegt
+bereits
+bereitstand
+bereitstanden
+bereitstandest
+bereitstandet
+bereitstandst
+bereitstehe
+bereitstehen
+bereitstehend
+bereitstehende
+bereitstehendem
+bereitstehenden
+bereitstehender
+bereitstehendes
+bereitstehst
+bereitsteht
+bereitstelle
+bereitstellen
+bereitstellend
+bereitstellende
+bereitstellendem
+bereitstellenden
+bereitstellender
+bereitstellendes
+bereitstellst
+bereitstellt
+bereitstellte
+bereitstellten
+bereitstelltest
+bereitstelltet
+bereitstünde
+bereitstünden
+bereitstündest
+bereitstündet
+bereitwillig
+bereitwillige
+bereitwilligem
+bereitwilligen
+bereitwilliger
+bereitwilligere
+bereitwilligerem
+bereitwilligeren
+bereitwilligerer
+bereitwilligeres
+bereitwilliges
+bereitwilligste
+bereitwilligstem
+bereitwilligsten
+bereitwilligster
+bereitwilligstes
+bereitzufinden
+bereitzuhalten
+bereitzuhaltend
+bereitzuhaltende
+bereitzuhaltendem
+bereitzuhaltenden
+bereitzuhaltender
+bereitzuhaltendes
+bereitzustellen
+bereitzustellend
+bereitzustellende
+bereitzustellendem
+bereitzustellenden
+bereitzustellender
+bereitzustellendes
+bereue
+bereuen
+bereuend
+bereuende
+bereuendem
+bereuenden
+bereuender
+bereuendes
+bereust
+bereut
+bereute
+bereutem
+bereuten
+bereuter
+bereutes
+bereutest
+bereutet
+bergab
+bergan
+bergauf
+berge
+bergen
+bergend
+bergende
+bergendem
+bergenden
+bergender
+bergendes
+bergeweise
+bergig
+bergige
+bergigem
+bergigen
+bergiger
+bergiges
+bergisch
+bergische
+bergischem
+bergischen
+bergischer
+bergisches
+bergt
+berichte
+berichten
+berichtend
+berichtende
+berichtendem
+berichtenden
+berichtender
+berichtendes
+berichtest
+berichtet
+berichtete
+berichtetem
+berichteten
+berichteter
+berichtetes
+berichtetest
+berichtetet
+berichtige
+berichtigen
+berichtigend
+berichtigende
+berichtigendem
+berichtigenden
+berichtigender
+berichtigendes
+berichtigst
+berichtigt
+berichtigte
+berichtigtem
+berichtigten
+berichtigter
+berichtigtes
+berichtigtest
+berichtigtet
+berichtigungsfähig
+berichtigungsfähige
+berichtigungsfähigem
+berichtigungsfähigen
+berichtigungsfähiger
+berichtigungsfähiges
+berief
+beriefe
+beriefen
+beriefest
+beriefet
+beriefst
+berieft
+beriesele
+berieseln
+berieselnd
+berieselnde
+berieselndem
+berieselnden
+berieselnder
+berieselndes
+berieselst
+berieselt
+berieselte
+berieseltem
+berieselten
+berieselter
+berieseltes
+berieseltest
+berieseltet
+beriesle
+beriet
+berieten
+berietest
+berietet
+berietst
+beritten
+berittene
+berittenem
+berittenen
+berittener
+berittenes
+berlinisch
+berlinische
+berlinischem
+berlinischen
+berlinischer
+berlinisches
+berste
+bersten
+berstend
+berstende
+berstendem
+berstenden
+berstender
+berstendes
+berstest
+berstet
+berufe
+berufen
+berufend
+berufende
+berufendem
+berufenden
+berufender
+berufendes
+berufene
+berufenem
+berufenen
+berufener
+berufenes
+berufqqlich
+berufqqliche
+berufqqlichem
+berufqqlichen
+berufqqlicher
+berufqqliches
+berufsbegleitend
+berufsbegleitende
+berufsbegleitendem
+berufsbegleitenden
+berufsbegleitender
+berufsbegleitendes
+berufsbezogen
+berufsbezogene
+berufsbezogenem
+berufsbezogenen
+berufsbezogener
+berufsbezogenes
+berufsbildend
+berufsbildende
+berufsbildendem
+berufsbildenden
+berufsbildender
+berufsbildendes
+berufserfahren
+berufserfahrene
+berufserfahrenem
+berufserfahrenen
+berufserfahrener
+berufserfahrenes
+berufsfremd
+berufsfremde
+berufsfremdem
+berufsfremden
+berufsfremder
+berufsfremdes
+berufslos
+berufslose
+berufslosem
+berufslosen
+berufsloser
+berufsloses
+berufsnotwendig
+berufsnotwendige
+berufsnotwendigem
+berufsnotwendigen
+berufsnotwendiger
+berufsnotwendiges
+berufst
+berufstechnisch
+berufstechnische
+berufstechnischem
+berufstechnischen
+berufstechnischer
+berufstechnisches
+berufstätig
+berufstätige
+berufstätigem
+berufstätigen
+berufstätiger
+berufstätiges
+beruft
+beruhe
+beruhen
+beruhend
+beruhende
+beruhendem
+beruhenden
+beruhender
+beruhendes
+beruhige
+beruhigen
+beruhigend
+beruhigende
+beruhigendem
+beruhigenden
+beruhigender
+beruhigendes
+beruhigst
+beruhigt
+beruhigte
+beruhigtem
+beruhigten
+beruhigter
+beruhigtes
+beruhigtest
+beruhigtet
+beruhst
+beruht
+beruhte
+beruhten
+beruhtest
+beruhtet
+berät
+berätst
+berüchtigste
+berüchtigstem
+berüchtigsten
+berüchtigster
+berüchtigstes
+berüchtigt
+berüchtigte
+berüchtigtem
+berüchtigten
+berüchtigter
+berüchtigtere
+berüchtigterem
+berüchtigteren
+berüchtigterer
+berüchtigteres
+berüchtigtes
+berüchtigteste
+berüchtigtestem
+berüchtigtesten
+berüchtigtester
+berüchtigtestes
+berücksichtige
+berücksichtigen
+berücksichtigend
+berücksichtigende
+berücksichtigendem
+berücksichtigenden
+berücksichtigender
+berücksichtigendes
+berücksichtigst
+berücksichtigt
+berücksichtigte
+berücksichtigtem
+berücksichtigten
+berücksichtigter
+berücksichtigtes
+berücksichtigtest
+berücksichtigtet
+berühmt
+berühmte
+berühmtem
+berühmten
+berühmter
+berühmtere
+berühmterem
+berühmteren
+berühmterer
+berühmteres
+berühmtes
+berühmteste
+berühmtestem
+berühmtesten
+berühmtester
+berühmtestes
+berühre
+berühren
+berührend
+berührende
+berührendem
+berührenden
+berührender
+berührendes
+berührst
+berührt
+berührte
+berührtem
+berührten
+berührter
+berührtes
+berührtest
+berührtet
+bes
+besage
+besagen
+besagend
+besagende
+besagendem
+besagenden
+besagender
+besagendes
+besagst
+besagt
+besagte
+besagtem
+besagten
+besagter
+besagtes
+besagtest
+besagtet
+besah
+besahen
+besahst
+besaht
+besaite
+besaiten
+besaitend
+besaitende
+besaitendem
+besaitenden
+besaitender
+besaitendes
+besaitest
+besaitet
+besaitete
+besaitetem
+besaiteten
+besaiteter
+besaitetes
+besaitetest
+besaitetet
+besann
+besannen
+besannst
+besannt
+besaufe
+besaufen
+besaufend
+besaufende
+besaufendem
+besaufenden
+besaufender
+besaufendes
+besauft
+besaß
+besaßen
+besaßest
+besaßt
+beschaff
+beschaffbar
+beschaffbare
+beschaffbarem
+beschaffbaren
+beschaffbarer
+beschaffbares
+beschaffe
+beschaffen
+beschaffend
+beschaffende
+beschaffendem
+beschaffenden
+beschaffender
+beschaffendes
+beschaffene
+beschaffenem
+beschaffenen
+beschaffener
+beschaffenes
+beschaffst
+beschafft
+beschaffte
+beschafftem
+beschafften
+beschaffter
+beschafftes
+beschafftest
+beschafftet
+beschalte
+beschalten
+beschaltend
+beschaltende
+beschaltendem
+beschaltenden
+beschaltender
+beschaltendes
+beschaltest
+beschaltet
+beschaltete
+beschaltetem
+beschalteten
+beschalteter
+beschaltetes
+beschaltetest
+beschaltetet
+beschatte
+beschatten
+beschattend
+beschattende
+beschattendem
+beschattenden
+beschattender
+beschattendes
+beschattest
+beschattet
+beschattete
+beschattetem
+beschatteten
+beschatteter
+beschattetes
+beschattetest
+beschattetet
+beschaue
+beschauen
+beschauend
+beschauende
+beschauendem
+beschauenden
+beschauender
+beschauendes
+beschaulich
+beschauliche
+beschaulichem
+beschaulichen
+beschaulicher
+beschaulichere
+beschaulicherem
+beschaulicheren
+beschaulicherer
+beschaulicheres
+beschauliches
+beschaulichste
+beschaulichstem
+beschaulichsten
+beschaulichster
+beschaulichstes
+beschaust
+beschaut
+beschaute
+beschautem
+beschauten
+beschauter
+beschautes
+beschautest
+beschautet
+bescheide
+bescheiden
+bescheidend
+bescheidende
+bescheidendem
+bescheidenden
+bescheidender
+bescheidendes
+bescheidene
+bescheidenem
+bescheidenen
+bescheidener
+bescheidenere
+bescheidenerem
+bescheideneren
+bescheidenerer
+bescheideneres
+bescheidenes
+bescheidenste
+bescheidenstem
+bescheidensten
+bescheidenster
+bescheidenstes
+bescheidest
+bescheidet
+bescheinige
+bescheinigen
+bescheinigend
+bescheinigende
+bescheinigendem
+bescheinigenden
+bescheinigender
+bescheinigendes
+bescheinigst
+bescheinigt
+bescheinigte
+bescheinigtem
+bescheinigten
+bescheinigter
+bescheinigtes
+bescheinigtest
+bescheinigtet
+bescheinst
+bescheint
+beschenke
+beschenken
+beschenkend
+beschenkende
+beschenkendem
+beschenkenden
+beschenkender
+beschenkendes
+beschenkst
+beschenkt
+beschenkte
+beschenktem
+beschenkten
+beschenkter
+beschenktes
+beschenktest
+beschenktet
+beschere
+bescheren
+bescherend
+bescherende
+bescherendem
+bescherenden
+bescherender
+bescherendes
+bescherst
+beschert
+bescherte
+beschertem
+bescherten
+bescherter
+beschertes
+beschertest
+beschertet
+bescheuert
+bescheuerte
+bescheuertem
+bescheuerten
+bescheuerter
+bescheuertes
+beschichte
+beschichten
+beschichtest
+beschichtet
+beschichtete
+beschichtetem
+beschichteten
+beschichteter
+beschichtetes
+beschichtetest
+beschichtetet
+beschied
+beschieden
+beschiedene
+beschiedenem
+beschiedenen
+beschiedener
+beschiedenes
+beschiedest
+beschiedet
+beschieße
+beschießen
+beschießend
+beschießende
+beschießendem
+beschießenden
+beschießender
+beschießendes
+beschießest
+beschießt
+beschimpfe
+beschimpfen
+beschimpfend
+beschimpfende
+beschimpfendem
+beschimpfenden
+beschimpfender
+beschimpfendes
+beschimpfst
+beschimpft
+beschimpfte
+beschimpftem
+beschimpften
+beschimpfter
+beschimpftes
+beschimpftest
+beschimpftet
+beschirmt
+beschirmte
+beschirmtem
+beschirmten
+beschirmter
+beschirmtes
+beschissen
+beschissene
+beschissenem
+beschissenen
+beschissener
+beschissenes
+beschlage
+beschlagen
+beschlagend
+beschlagende
+beschlagendem
+beschlagenden
+beschlagender
+beschlagendes
+beschlagene
+beschlagenem
+beschlagenen
+beschlagener
+beschlagenes
+beschlagnahme
+beschlagnahmen
+beschlagnahmend
+beschlagnahmende
+beschlagnahmendem
+beschlagnahmenden
+beschlagnahmender
+beschlagnahmendes
+beschlagnahmst
+beschlagnahmt
+beschlagnahmte
+beschlagnahmtem
+beschlagnahmten
+beschlagnahmter
+beschlagnahmtes
+beschlagnahmtest
+beschlagnahmtet
+beschlagt
+beschleiche
+beschleichen
+beschleichend
+beschleichende
+beschleichendem
+beschleichenden
+beschleichender
+beschleichendes
+beschleichst
+beschleicht
+beschleunige
+beschleunigen
+beschleunigend
+beschleunigende
+beschleunigendem
+beschleunigenden
+beschleunigender
+beschleunigendes
+beschleunigst
+beschleunigt
+beschleunigte
+beschleunigtem
+beschleunigten
+beschleunigter
+beschleunigtes
+beschleunigtest
+beschleunigtet
+beschließe
+beschließen
+beschließend
+beschließende
+beschließendem
+beschließenden
+beschließender
+beschließendes
+beschließest
+beschließt
+beschloss
+beschlossen
+beschlossene
+beschlossenem
+beschlossenen
+beschlossener
+beschlossenes
+beschlossest
+beschlosst
+beschlug
+beschlugen
+beschlugst
+beschlugt
+beschlussfähig
+beschlussfähige
+beschlussfähigem
+beschlussfähigen
+beschlussfähiger
+beschlussfähiges
+beschlussunfähig
+beschlussunfähige
+beschlussunfähigem
+beschlussunfähigen
+beschlussunfähiger
+beschlussunfähiges
+beschlägst
+beschlägt
+beschmiere
+beschmieren
+beschmierend
+beschmierende
+beschmierendem
+beschmierenden
+beschmierender
+beschmierendes
+beschmierst
+beschmiert
+beschmierte
+beschmiertem
+beschmierten
+beschmierter
+beschmiertes
+beschmiertest
+beschmiertet
+beschmutze
+beschmutzen
+beschmutzend
+beschmutzende
+beschmutzendem
+beschmutzenden
+beschmutzender
+beschmutzendes
+beschmutzest
+beschmutzt
+beschmutzte
+beschmutztem
+beschmutzten
+beschmutzter
+beschmutztes
+beschmutztest
+beschmutztet
+beschneide
+beschneiden
+beschneidend
+beschneidende
+beschneidendem
+beschneidenden
+beschneidender
+beschneidendes
+beschneidest
+beschneidet
+beschnitt
+beschnitten
+beschnittene
+beschnittenem
+beschnittenen
+beschnittener
+beschnittenes
+beschnittest
+beschnittet
+beschoss
+beschossen
+beschossene
+beschossenem
+beschossenen
+beschossener
+beschossenes
+beschossest
+beschosst
+beschoßt
+beschoßte
+beschoßtem
+beschoßten
+beschoßter
+beschoßtes
+beschreibbar
+beschreibbare
+beschreibbarem
+beschreibbaren
+beschreibbarer
+beschreibbares
+beschreibe
+beschreiben
+beschreibend
+beschreibende
+beschreibendem
+beschreibenden
+beschreibender
+beschreibendes
+beschreibst
+beschreibt
+beschreite
+beschreiten
+beschreitend
+beschreitende
+beschreitendem
+beschreitenden
+beschreitender
+beschreitendes
+beschreitest
+beschreitet
+beschrieb
+beschriebe
+beschrieben
+beschriebene
+beschriebenem
+beschriebenen
+beschriebener
+beschriebenes
+beschriebest
+beschriebet
+beschriebst
+beschriebt
+beschriftbar
+beschriftbare
+beschriftbarem
+beschriftbaren
+beschriftbarer
+beschriftbares
+beschrifte
+beschriften
+beschriftend
+beschriftende
+beschriftendem
+beschriftenden
+beschriftender
+beschriftendes
+beschriftest
+beschriftet
+beschriftete
+beschriftetem
+beschrifteten
+beschrifteter
+beschriftetes
+beschriftetest
+beschriftetet
+beschritten
+beschrittene
+beschrittenem
+beschrittenen
+beschrittener
+beschrittenes
+beschrittest
+beschrittet
+beschränke
+beschränken
+beschränkend
+beschränkende
+beschränkendem
+beschränkenden
+beschränkender
+beschränkendes
+beschränkst
+beschränkt
+beschränkte
+beschränktem
+beschränkten
+beschränkter
+beschränktere
+beschränkterem
+beschränkteren
+beschränkterer
+beschränkteres
+beschränktes
+beschränktest
+beschränkteste
+beschränktestem
+beschränktesten
+beschränktester
+beschränktestes
+beschränktet
+beschuldigt
+beschuldigte
+beschuldigtem
+beschuldigten
+beschuldigter
+beschuldigtes
+beschwerdefrei
+beschwerdefreie
+beschwerdefreiem
+beschwerdefreien
+beschwerdefreier
+beschwerdefreies
+beschwere
+beschweren
+beschwerend
+beschwerende
+beschwerendem
+beschwerenden
+beschwerender
+beschwerendes
+beschwerlich
+beschwerliche
+beschwerlichem
+beschwerlichen
+beschwerlicher
+beschwerlichere
+beschwerlicherem
+beschwerlicheren
+beschwerlicherer
+beschwerlicheres
+beschwerliches
+beschwerlichste
+beschwerlichstem
+beschwerlichsten
+beschwerlichster
+beschwerlichstes
+beschwerst
+beschwert
+beschwerte
+beschwertem
+beschwerten
+beschwerter
+beschwertes
+beschwertest
+beschwertet
+beschwichtige
+beschwichtigen
+beschwichtigend
+beschwichtigende
+beschwichtigendem
+beschwichtigenden
+beschwichtigender
+beschwichtigendes
+beschwichtigst
+beschwichtigt
+beschwichtigte
+beschwichtigtem
+beschwichtigten
+beschwichtigter
+beschwichtigtes
+beschwichtigtest
+beschwichtigtet
+beschwindele
+beschwindeln
+beschwindelst
+beschwindelt
+beschwindelte
+beschwindeltem
+beschwindelten
+beschwindelter
+beschwindeltes
+beschwindeltest
+beschwindeltet
+beschwindle
+beschwingt
+beschwingte
+beschwingtem
+beschwingten
+beschwingter
+beschwingtes
+beschwipse
+beschwipsen
+beschwipsend
+beschwipsende
+beschwipsendem
+beschwipsenden
+beschwipsender
+beschwipsendes
+beschwipsest
+beschwipst
+beschwipste
+beschwipstem
+beschwipsten
+beschwipster
+beschwipstes
+beschwipstest
+beschwipstet
+beschwor
+beschworen
+beschworene
+beschworenem
+beschworenen
+beschworener
+beschworenes
+beschworst
+beschwort
+beschwöre
+beschwören
+beschwörend
+beschwörende
+beschwörendem
+beschwörenden
+beschwörender
+beschwörendes
+beschwörst
+beschwört
+beschädige
+beschädigen
+beschädigend
+beschädigende
+beschädigendem
+beschädigenden
+beschädigender
+beschädigendes
+beschädigst
+beschädigt
+beschädigte
+beschädigtem
+beschädigten
+beschädigter
+beschädigtes
+beschädigtest
+beschädigtet
+beschäftige
+beschäftigen
+beschäftigend
+beschäftigende
+beschäftigendem
+beschäftigenden
+beschäftigender
+beschäftigendes
+beschäftigst
+beschäftigt
+beschäftigte
+beschäftigtem
+beschäftigten
+beschäftigter
+beschäftigtes
+beschäftigtest
+beschäftigtet
+beschäftigungslos
+beschäftigungslose
+beschäftigungslosem
+beschäftigungslosen
+beschäftigungsloser
+beschäftigungsloses
+beschäme
+beschämen
+beschämend
+beschämende
+beschämendem
+beschämenden
+beschämender
+beschämendes
+beschämst
+beschämt
+beschämte
+beschämtem
+beschämten
+beschämter
+beschämtes
+beschämtest
+beschämtet
+beschönige
+beschönigen
+beschönigend
+beschönigende
+beschönigendem
+beschönigenden
+beschönigender
+beschönigendes
+beschönigst
+beschönigt
+beschönigte
+beschönigtem
+beschönigten
+beschönigter
+beschönigtes
+beschönigtest
+beschönigtet
+beschösse
+beschössen
+beschössest
+beschösset
+beschütze
+beschützen
+beschützest
+beschützt
+beschützte
+beschütztem
+beschützten
+beschützter
+beschütztes
+beschütztest
+beschütztet
+beseele
+beseelen
+beseelend
+beseelende
+beseelendem
+beseelenden
+beseelender
+beseelendes
+beseelst
+beseelt
+beseelte
+beseeltem
+beseelten
+beseelter
+beseeltes
+beseeltest
+beseeltet
+besehe
+besehen
+besehend
+besehende
+besehendem
+besehenden
+besehender
+besehendes
+besehene
+besehenem
+besehenen
+besehener
+besehenes
+beseht
+beseitige
+beseitigen
+beseitigend
+beseitigende
+beseitigendem
+beseitigenden
+beseitigender
+beseitigendes
+beseitigst
+beseitigt
+beseitigte
+beseitigtem
+beseitigten
+beseitigter
+beseitigtes
+beseitigtest
+beseitigtet
+besessen
+besessene
+besessenem
+besessenen
+besessener
+besessenes
+besetze
+besetzen
+besetzend
+besetzende
+besetzendem
+besetzenden
+besetzender
+besetzendes
+besetzest
+besetzt
+besetzte
+besetztem
+besetzten
+besetzter
+besetztes
+besetztest
+besetztet
+besetzthalte
+besetzthalten
+besetzthaltend
+besetzthaltende
+besetzthaltendem
+besetzthaltenden
+besetzthaltender
+besetzthaltendes
+besetzthaltet
+besichtige
+besichtigen
+besichtigend
+besichtigende
+besichtigendem
+besichtigenden
+besichtigender
+besichtigendes
+besichtigst
+besichtigt
+besichtigte
+besichtigtem
+besichtigten
+besichtigter
+besichtigtes
+besichtigtest
+besichtigtet
+besiedele
+besiedeln
+besiedelnd
+besiedelnde
+besiedelndem
+besiedelnden
+besiedelnder
+besiedelndes
+besiedelst
+besiedelt
+besiedelte
+besiedeltem
+besiedelten
+besiedelter
+besiedeltes
+besiedeltest
+besiedeltet
+besiedle
+besiege
+besiegelt
+besiegelte
+besiegeltem
+besiegelten
+besiegelter
+besiegeltes
+besiegen
+besiegend
+besiegende
+besiegendem
+besiegenden
+besiegender
+besiegendes
+besiegst
+besiegt
+besiegte
+besiegtem
+besiegten
+besiegter
+besiegtes
+besiegtest
+besiegtet
+besinge
+besingen
+besingend
+besingende
+besingendem
+besingenden
+besingender
+besingendes
+besingst
+besingt
+besinne
+besinnen
+besinnend
+besinnende
+besinnendem
+besinnenden
+besinnender
+besinnendes
+besinnlich
+besinnliche
+besinnlichem
+besinnlichen
+besinnlicher
+besinnlichere
+besinnlicherem
+besinnlicheren
+besinnlicherer
+besinnlicheres
+besinnliches
+besinnlichste
+besinnlichstem
+besinnlichsten
+besinnlichster
+besinnlichstes
+besinnst
+besinnt
+besinnungslos
+besinnungslose
+besinnungslosem
+besinnungslosen
+besinnungsloser
+besinnungsloses
+besitze
+besitzen
+besitzend
+besitzende
+besitzendem
+besitzenden
+besitzender
+besitzendes
+besitzest
+besitzlos
+besitzlose
+besitzlosem
+besitzlosen
+besitzloser
+besitzloses
+besitzt
+besoff
+besoffen
+besoffene
+besoffenem
+besoffenen
+besoffener
+besoffenes
+besoffst
+besofft
+besohle
+besohlen
+besohlend
+besohlende
+besohlendem
+besohlenden
+besohlender
+besohlendes
+besohlst
+besohlt
+besohlte
+besohltem
+besohlten
+besohlter
+besohltes
+besohltest
+besohltet
+besolde
+besolden
+besoldend
+besoldende
+besoldendem
+besoldenden
+besoldender
+besoldendes
+besoldest
+besoldet
+besoldete
+besoldetem
+besoldeten
+besoldeter
+besoldetes
+besoldetest
+besoldetet
+besondere
+besonderem
+besonderen
+besonderer
+besonderes
+besonders
+besonne
+besonnen
+besonnend
+besonnende
+besonnendem
+besonnenden
+besonnender
+besonnendes
+besonnene
+besonnenem
+besonnenen
+besonnener
+besonnenere
+besonnenerem
+besonneneren
+besonnenerer
+besonneneres
+besonnenes
+besonnenste
+besonnenstem
+besonnensten
+besonnenster
+besonnenstes
+besonnst
+besonnt
+besonnte
+besonnten
+besonntest
+besonntet
+besorge
+besorgen
+besorgend
+besorgende
+besorgendem
+besorgenden
+besorgender
+besorgendes
+besorgniserregend
+besorgniserregende
+besorgniserregendem
+besorgniserregenden
+besorgniserregender
+besorgniserregendere
+besorgniserregenderem
+besorgniserregenderen
+besorgniserregenderer
+besorgniserregenderes
+besorgniserregendes
+besorgniserregendste
+besorgniserregendstem
+besorgniserregendsten
+besorgniserregendster
+besorgniserregendstes
+besorgst
+besorgt
+besorgte
+besorgtem
+besorgten
+besorgter
+besorgtere
+besorgterem
+besorgteren
+besorgterer
+besorgteres
+besorgtes
+besorgtest
+besorgteste
+besorgtestem
+besorgtesten
+besorgtester
+besorgtestes
+besorgtet
+bespanne
+bespannen
+bespannend
+bespannende
+bespannendem
+bespannenden
+bespannender
+bespannendes
+bespannst
+bespannt
+bespannte
+bespanntem
+bespannten
+bespannter
+bespanntes
+bespanntest
+bespanntet
+bespicke
+bespicken
+bespickend
+bespickende
+bespickendem
+bespickenden
+bespickender
+bespickendes
+bespickst
+bespickt
+bespickte
+bespicktem
+bespickten
+bespickter
+bespicktes
+bespicktest
+bespicktet
+bespielbar
+bespielbare
+bespielbarem
+bespielbaren
+bespielbarer
+bespielbares
+bespiele
+bespielen
+bespielend
+bespielende
+bespielendem
+bespielenden
+bespielender
+bespielendes
+bespielst
+bespielt
+bespielte
+bespieltem
+bespielten
+bespielter
+bespieltes
+bespieltest
+bespieltet
+besprach
+besprachen
+besprachest
+besprachst
+bespracht
+bespreche
+besprechen
+besprechend
+besprechende
+besprechendem
+besprechenden
+besprechender
+besprechendes
+besprecht
+besprenge
+besprengen
+besprengend
+besprengende
+besprengendem
+besprengenden
+besprengender
+besprengendes
+besprengst
+besprengt
+besprengte
+besprengtem
+besprengten
+besprengter
+besprengtes
+besprengtest
+besprengtet
+besprichst
+bespricht
+bespritze
+bespritzen
+bespritzend
+bespritzende
+bespritzendem
+bespritzenden
+bespritzender
+bespritzendes
+bespritzest
+bespritzt
+bespritzte
+bespritztem
+bespritzten
+bespritzter
+bespritztes
+bespritztest
+bespritztet
+besprochen
+besprochene
+besprochenem
+besprochenen
+besprochener
+besprochenes
+besprühe
+besprühen
+besprühst
+besprüht
+besprühte
+besprühtem
+besprühten
+besprühter
+besprühtes
+besprühtest
+besprühtet
+bespucke
+bespucken
+bespuckend
+bespuckende
+bespuckendem
+bespuckenden
+bespuckender
+bespuckendes
+bespuckst
+bespuckt
+bespuckte
+bespucktem
+bespuckten
+bespuckter
+bespucktes
+bespucktest
+bespucktet
+besser
+bessere
+besserem
+besseren
+besserer
+besseres
+bessern
+bessernd
+bessernde
+besserndem
+bessernden
+bessernder
+besserndes
+besserst
+bessert
+besserte
+besserten
+bessertest
+bessertet
+bessre
+best
+bestach
+bestachen
+bestachest
+bestachst
+bestacht
+bestahl
+bestahlen
+bestahlst
+bestahlt
+bestand
+bestanden
+bestandene
+bestandenem
+bestandenen
+bestandener
+bestandenes
+bestandest
+bestandet
+bestatte
+bestatten
+bestattend
+bestattende
+bestattendem
+bestattenden
+bestattender
+bestattendes
+bestattest
+bestattet
+bestattete
+bestattetem
+bestatteten
+bestatteter
+bestattetes
+bestattetest
+bestattetet
+bestaune
+bestaunen
+bestaunend
+bestaunende
+bestaunendem
+bestaunenden
+bestaunender
+bestaunendes
+bestaunst
+bestaunt
+bestaunte
+bestauntem
+bestaunten
+bestaunter
+bestauntes
+bestauntest
+bestauntet
+bestbesucht
+bestbesuchte
+bestbesuchtem
+bestbesuchten
+bestbesuchter
+bestbesuchtes
+bestbezeugt
+bestbezeugte
+bestbezeugtem
+bestbezeugten
+bestbezeugter
+bestbezeugtes
+beste
+besteche
+bestechen
+bestechend
+bestechende
+bestechendem
+bestechenden
+bestechender
+bestechendes
+bestechlich
+bestechliche
+bestechlichem
+bestechlichen
+bestechlicher
+bestechlichere
+bestechlicherem
+bestechlicheren
+bestechlicherer
+bestechlicheres
+bestechliches
+bestechlichste
+bestechlichstem
+bestechlichsten
+bestechlichster
+bestechlichstes
+bestecht
+bestehe
+bestehen
+bestehend
+bestehende
+bestehendem
+bestehenden
+bestehender
+bestehendes
+bestehle
+bestehlen
+bestehlend
+bestehlende
+bestehlendem
+bestehlenden
+bestehlender
+bestehlendes
+bestehlt
+bestehst
+besteht
+besteige
+besteigen
+besteigend
+besteigende
+besteigendem
+besteigenden
+besteigender
+besteigendes
+besteigst
+besteigt
+besteingeführt
+besteingeführte
+besteingeführtem
+besteingeführten
+besteingeführter
+besteingeführtes
+besteingerichtet
+besteingerichtete
+besteingerichtetem
+besteingerichteten
+besteingerichteter
+besteingerichtetes
+bestelle
+bestellen
+bestellend
+bestellende
+bestellendem
+bestellenden
+bestellender
+bestellendes
+bestellst
+bestellt
+bestellte
+bestelltem
+bestellten
+bestellter
+bestelltes
+bestelltest
+bestelltet
+bestem
+bestempfohlen
+bestempfohlene
+bestempfohlenem
+bestempfohlenen
+bestempfohlener
+bestempfohlenes
+besten
+bestenfalls
+bestens
+bester
+besterhalten
+besterhaltene
+besterhaltenem
+besterhaltenen
+besterhaltener
+besterhaltenes
+bestes
+besteuere
+besteuern
+besteuernd
+besteuernde
+besteuerndem
+besteuernden
+besteuernder
+besteuerndes
+besteuerst
+besteuert
+besteuerte
+besteuertem
+besteuerten
+besteuerter
+besteuertes
+besteuertest
+besteuertet
+besteure
+bestgeführt
+bestgeführte
+bestgeführtem
+bestgeführten
+bestgeführter
+bestgeführtes
+bestgehütet
+bestgehütete
+bestgehütetem
+bestgehüteten
+bestgehüteter
+bestgehütetes
+bestgelegen
+bestgelegene
+bestgelegenem
+bestgelegenen
+bestgelegener
+bestgelegenes
+bestialisch
+bestialische
+bestialischem
+bestialischen
+bestialischer
+bestialisches
+bestichst
+besticht
+besticke
+besticken
+bestickst
+bestickt
+bestickte
+besticktem
+bestickten
+bestickter
+besticktes
+besticktest
+besticktet
+bestieg
+bestiegen
+bestiegene
+bestiegenem
+bestiegenen
+bestiegener
+bestiegenes
+bestiegst
+bestiegt
+bestimmbar
+bestimmbare
+bestimmbarem
+bestimmbaren
+bestimmbarer
+bestimmbares
+bestimme
+bestimmen
+bestimmend
+bestimmende
+bestimmendem
+bestimmenden
+bestimmender
+bestimmendes
+bestimmst
+bestimmt
+bestimmte
+bestimmtem
+bestimmten
+bestimmter
+bestimmtes
+bestimmtest
+bestimmtet
+bestmöglich
+bestmögliche
+bestmöglichem
+bestmöglichen
+bestmöglicher
+bestmögliches
+bestochen
+bestochene
+bestochenem
+bestochenen
+bestochener
+bestochenes
+bestohlen
+bestohlene
+bestohlenem
+bestohlenen
+bestohlener
+bestohlenes
+bestorganisiert
+bestorganisierte
+bestorganisiertem
+bestorganisierten
+bestorganisierter
+bestorganisiertes
+bestorientiert
+bestorientierte
+bestorientiertem
+bestorientierten
+bestorientierter
+bestorientiertes
+bestrafe
+bestrafen
+bestrafend
+bestrafende
+bestrafendem
+bestrafenden
+bestrafender
+bestrafendes
+bestrafst
+bestraft
+bestrafte
+bestraftem
+bestraften
+bestrafter
+bestraftes
+bestraftest
+bestraftet
+bestrahle
+bestrahlen
+bestrahlend
+bestrahlende
+bestrahlendem
+bestrahlenden
+bestrahlender
+bestrahlendes
+bestrahlst
+bestrahlt
+bestrahlte
+bestrahltem
+bestrahlten
+bestrahlter
+bestrahltes
+bestrahltest
+bestrahltet
+bestrebe
+bestreben
+bestrebend
+bestrebende
+bestrebendem
+bestrebenden
+bestrebender
+bestrebendes
+bestrebst
+bestrebt
+bestrebte
+bestrebtem
+bestrebten
+bestrebter
+bestrebtes
+bestrebtest
+bestrebtet
+bestreiche
+bestreichen
+bestreichend
+bestreichende
+bestreichendem
+bestreichenden
+bestreichender
+bestreichendes
+bestreichst
+bestreicht
+bestreitbar
+bestreitbare
+bestreitbarem
+bestreitbaren
+bestreitbarer
+bestreitbares
+bestreite
+bestreiten
+bestreitend
+bestreitende
+bestreitendem
+bestreitenden
+bestreitender
+bestreitendes
+bestreitest
+bestreitet
+bestreue
+bestreuen
+bestreuend
+bestreuende
+bestreuendem
+bestreuenden
+bestreuender
+bestreuendes
+bestreust
+bestreut
+bestreute
+bestreutem
+bestreuten
+bestreuter
+bestreutes
+bestreutest
+bestreutet
+bestrich
+bestrichen
+bestrichene
+bestrichenem
+bestrichenen
+bestrichener
+bestrichenes
+bestrichst
+bestricht
+bestricke
+bestricken
+bestrickend
+bestrickende
+bestrickendem
+bestrickenden
+bestrickender
+bestrickendes
+bestrickst
+bestrickt
+bestrickte
+bestricktem
+bestrickten
+bestrickter
+bestricktes
+bestricktest
+bestricktet
+bestritt
+bestritten
+bestrittene
+bestrittenem
+bestrittenen
+bestrittener
+bestrittenes
+bestrittest
+bestrittet
+beständig
+beständige
+beständigem
+beständigen
+beständiger
+beständigere
+beständigerem
+beständigeren
+beständigerer
+beständigeres
+beständiges
+beständigste
+beständigstem
+beständigsten
+beständigster
+beständigstes
+bestärke
+bestärken
+bestärkend
+bestärkende
+bestärkendem
+bestärkenden
+bestärkender
+bestärkendes
+bestärkst
+bestärkt
+bestärkte
+bestärktem
+bestärkten
+bestärkter
+bestärktes
+bestärktest
+bestärktet
+bestätige
+bestätigen
+bestätigend
+bestätigende
+bestätigendem
+bestätigenden
+bestätigender
+bestätigendes
+bestätigst
+bestätigt
+bestätigte
+bestätigtem
+bestätigten
+bestätigter
+bestätigtes
+bestätigtest
+bestätigtet
+bestückbar
+bestückbare
+bestückbarem
+bestückbaren
+bestückbarer
+bestückbares
+bestücke
+bestücken
+bestückend
+bestückende
+bestückendem
+bestückenden
+bestückender
+bestückendes
+bestückst
+bestückt
+bestückte
+bestücktem
+bestückten
+bestückter
+bestücktes
+bestücktest
+bestücktet
+bestünde
+bestünden
+bestündest
+bestündet
+bestürme
+bestürmen
+bestürmend
+bestürmende
+bestürmendem
+bestürmenden
+bestürmender
+bestürmendes
+bestürmst
+bestürmt
+bestürmte
+bestürmtem
+bestürmten
+bestürmter
+bestürmtes
+bestürmtest
+bestürmtet
+bestürze
+bestürzen
+bestürzend
+bestürzende
+bestürzendem
+bestürzenden
+bestürzender
+bestürzendes
+bestürzest
+bestürzt
+bestürzte
+bestürztem
+bestürzten
+bestürzter
+bestürztes
+bestürztest
+bestürztet
+besuche
+besuchen
+besuchend
+besuchende
+besuchendem
+besuchenden
+besuchender
+besuchendes
+besuchst
+besucht
+besuchte
+besuchtem
+besuchten
+besuchter
+besuchtes
+besuchtest
+besuchtet
+besudele
+besudeln
+besudelnd
+besudelnde
+besudelndem
+besudelnden
+besudelnder
+besudelndes
+besudelst
+besudelt
+besudelte
+besudeltem
+besudelten
+besudelter
+besudeltes
+besudeltest
+besudeltet
+besudle
+besungen
+besungene
+besungenem
+besungenen
+besungener
+besungenes
+besänftige
+besänftigen
+besänftigend
+besänftigende
+besänftigendem
+besänftigenden
+besänftigender
+besänftigendes
+besänftigst
+besänftigt
+besänftigte
+besänftigtem
+besänftigten
+besänftigter
+besänftigtes
+besänftigtest
+besänftigtet
+besäufst
+besäuft
+besäße
+besäßen
+besäßest
+besäßet
+beta
+betagt
+betagte
+betagtem
+betagten
+betagter
+betagtes
+betanke
+betanken
+betankst
+betankt
+betankte
+betanktem
+betankten
+betankter
+betanktes
+betanktest
+betanktet
+betaste
+betasten
+betastend
+betastende
+betastendem
+betastenden
+betastender
+betastendes
+betastest
+betastet
+betastete
+betastetem
+betasteten
+betasteter
+betastetes
+betastetest
+betastetet
+betatsche
+betatschen
+betatschest
+betatschst
+betatscht
+betatschte
+betatschtem
+betatschten
+betatschter
+betatschtes
+betatschtest
+betatschtet
+bete
+beteilige
+beteiligen
+beteiligend
+beteiligende
+beteiligendem
+beteiligenden
+beteiligender
+beteiligendes
+beteiligst
+beteiligt
+beteiligte
+beteiligtem
+beteiligten
+beteiligter
+beteiligtes
+beteiligtest
+beteiligtet
+beten
+betend
+betende
+betendem
+betenden
+betender
+betendes
+betest
+betet
+betete
+beteten
+betetest
+betetet
+beteuere
+beteuern
+beteuernd
+beteuernde
+beteuerndem
+beteuernden
+beteuernder
+beteuerndes
+beteuerst
+beteuert
+beteuerte
+beteuertem
+beteuerten
+beteuerter
+beteuertes
+beteuertest
+beteuertet
+beteure
+betitele
+betiteln
+betitelnd
+betitelnde
+betitelndem
+betitelnden
+betitelnder
+betitelndes
+betitelst
+betitelt
+betitelte
+betiteltem
+betitelten
+betitelter
+betiteltes
+betiteltest
+betiteltet
+betitle
+betone
+betonen
+betonend
+betonende
+betonendem
+betonenden
+betonender
+betonendes
+betoniere
+betonieren
+betonierend
+betonierende
+betonierendem
+betonierenden
+betonierender
+betonierendes
+betonierst
+betoniert
+betonierte
+betoniertem
+betonierten
+betonierter
+betoniertes
+betoniertest
+betoniertet
+betonst
+betont
+betonte
+betontem
+betonten
+betonter
+betontes
+betontest
+betontet
+betr
+betrachte
+betrachten
+betrachtend
+betrachtende
+betrachtendem
+betrachtenden
+betrachtender
+betrachtendes
+betrachtest
+betrachtet
+betrachtete
+betrachtetem
+betrachteten
+betrachteter
+betrachtetes
+betrachtetest
+betrachtetet
+betraf
+betrafen
+betrafest
+betrafst
+betraft
+betrage
+betragen
+betragend
+betragende
+betragendem
+betragenden
+betragender
+betragendes
+betragsmäßig
+betragsmäßige
+betragsmäßigem
+betragsmäßigen
+betragsmäßiger
+betragsmäßiges
+betragt
+betrank
+betranken
+betrankest
+betrankst
+betrankt
+betrat
+betraten
+betratest
+betratet
+betratst
+betraue
+betrauen
+betrauere
+betrauern
+betrauernd
+betrauernde
+betrauerndem
+betrauernden
+betrauernder
+betrauerndes
+betrauerst
+betrauert
+betrauerte
+betrauertem
+betrauerten
+betrauerter
+betrauertes
+betrauertest
+betrauertet
+betraure
+betraust
+betraut
+betraute
+betrautem
+betrauten
+betrauter
+betrautes
+betrautest
+betrautet
+betreffe
+betreffen
+betreffend
+betreffende
+betreffendem
+betreffenden
+betreffender
+betreffendes
+betreffs
+betrefft
+betreibbar
+betreibbare
+betreibbarem
+betreibbaren
+betreibbarer
+betreibbares
+betreibe
+betreiben
+betreibend
+betreibende
+betreibendem
+betreibenden
+betreibender
+betreibendes
+betreibst
+betreibt
+betretbar
+betretbare
+betretbarem
+betretbaren
+betretbarer
+betretbares
+betrete
+betreten
+betretend
+betretende
+betretendem
+betretenden
+betretender
+betretendes
+betretene
+betretenem
+betretenen
+betretener
+betretenes
+betretet
+betreue
+betreuen
+betreuend
+betreuende
+betreuendem
+betreuenden
+betreuender
+betreuendes
+betreust
+betreut
+betreute
+betreutem
+betreuten
+betreuter
+betreutes
+betreutest
+betreutet
+betrieb
+betrieben
+betriebene
+betriebenem
+betriebenen
+betriebener
+betriebenes
+betrieblich
+betriebliche
+betrieblichem
+betrieblichen
+betrieblicher
+betriebliches
+betriebsam
+betriebsame
+betriebsamem
+betriebsamen
+betriebsamer
+betriebsamere
+betriebsamerem
+betriebsameren
+betriebsamerer
+betriebsameres
+betriebsames
+betriebsamste
+betriebsamstem
+betriebsamsten
+betriebsamster
+betriebsamstes
+betriebsbedingt
+betriebsbedingte
+betriebsbedingtem
+betriebsbedingten
+betriebsbedingter
+betriebsbedingtes
+betriebsbereit
+betriebsbereite
+betriebsbereitem
+betriebsbereiten
+betriebsbereiter
+betriebsbereites
+betriebsextern
+betriebsexterne
+betriebsexternem
+betriebsexternen
+betriebsexterner
+betriebsexternes
+betriebsfähig
+betriebsfähige
+betriebsfähigem
+betriebsfähigen
+betriebsfähiger
+betriebsfähiges
+betriebsintern
+betriebsinterne
+betriebsinternem
+betriebsinternen
+betriebsinterner
+betriebsinternes
+betriebsnah
+betriebsnahe
+betriebsnahem
+betriebsnahen
+betriebsnaher
+betriebsnahes
+betriebssicher
+betriebssichere
+betriebssicherem
+betriebssicheren
+betriebssicherer
+betriebssicherere
+betriebssichererem
+betriebssichereren
+betriebssichererer
+betriebssichereres
+betriebssicheres
+betriebssicherste
+betriebssicherstem
+betriebssichersten
+betriebssicherster
+betriebssicherstes
+betriebst
+betriebswirtschaftlich
+betriebswirtschaftliche
+betriebswirtschaftlichem
+betriebswirtschaftlichen
+betriebswirtschaftlicher
+betriebswirtschaftliches
+betriebt
+betriffst
+betrifft
+betrinke
+betrinken
+betrinkend
+betrinkende
+betrinkendem
+betrinkenden
+betrinkender
+betrinkendes
+betrinkst
+betrinkt
+betritt
+betrittst
+betroffen
+betroffene
+betroffenem
+betroffenen
+betroffener
+betroffenere
+betroffenerem
+betroffeneren
+betroffenerer
+betroffeneres
+betroffenes
+betroffenste
+betroffenstem
+betroffensten
+betroffenster
+betroffenstes
+betrog
+betrogen
+betrogene
+betrogenem
+betrogenen
+betrogener
+betrogenes
+betrogst
+betrogt
+betrug
+betrugen
+betrugst
+betrugt
+betrunken
+betrunkene
+betrunkenem
+betrunkenen
+betrunkener
+betrunkenes
+beträchtlich
+beträchtliche
+beträchtlichem
+beträchtlichen
+beträchtlicher
+beträchtliches
+beträgst
+beträgt
+betrübe
+betrüben
+betrübend
+betrübende
+betrübendem
+betrübenden
+betrübender
+betrübendes
+betrüblich
+betrübliche
+betrüblichem
+betrüblichen
+betrüblicher
+betrüblichere
+betrüblicherem
+betrüblicheren
+betrüblicherer
+betrüblicheres
+betrübliches
+betrüblichste
+betrüblichstem
+betrüblichsten
+betrüblichster
+betrüblichstes
+betrübst
+betrübt
+betrübte
+betrübtem
+betrübten
+betrübter
+betrübtes
+betrübtest
+betrübtet
+betrüge
+betrügen
+betrügend
+betrügende
+betrügendem
+betrügenden
+betrügender
+betrügendes
+betrügerisch
+betrügerische
+betrügerischem
+betrügerischen
+betrügerischer
+betrügerisches
+betrügst
+betrügt
+bette
+bettelarm
+bettelarme
+bettelarmem
+bettelarmen
+bettelarmer
+bettelarmes
+bettele
+betteln
+bettelnd
+bettelnde
+bettelndem
+bettelnden
+bettelnder
+bettelndes
+bettelst
+bettelt
+bettelte
+bettelten
+betteltest
+betteltet
+betten
+bettend
+bettende
+bettendem
+bettenden
+bettender
+bettendes
+bettest
+bettet
+bettete
+betteten
+bettetest
+bettetet
+bettle
+bettlägerig
+bettlägerige
+bettlägerigem
+bettlägerigen
+bettlägeriger
+bettlägeriges
+bettlägrig
+bettlägrige
+bettlägrigem
+bettlägrigen
+bettlägriger
+bettlägriges
+bettnässen
+bettnässend
+bettnässende
+bettnässendem
+bettnässenden
+bettnässender
+bettnässendes
+betucht
+betuchte
+betuchtem
+betuchten
+betuchter
+betuchtes
+betupfe
+betupfen
+betupfend
+betupfende
+betupfendem
+betupfenden
+betupfender
+betupfendes
+betupfst
+betupft
+betupfte
+betupftem
+betupften
+betupfter
+betupftes
+betupftest
+betupftet
+betätige
+betätigen
+betätigend
+betätigende
+betätigendem
+betätigenden
+betätigender
+betätigendes
+betätigst
+betätigt
+betätigte
+betätigtem
+betätigten
+betätigter
+betätigtes
+betätigtest
+betätigtet
+betäube
+betäuben
+betäubend
+betäubende
+betäubendem
+betäubenden
+betäubender
+betäubendes
+betäubst
+betäubt
+betäubte
+betäubtem
+betäubten
+betäubter
+betäubtes
+betäubtest
+betäubtet
+betöre
+betören
+betörend
+betörende
+betörendem
+betörenden
+betörender
+betörendes
+betörst
+betört
+betörte
+betörtem
+betörten
+betörter
+betörtes
+betörtest
+betörtet
+beuge
+beugen
+beugend
+beugende
+beugendem
+beugenden
+beugender
+beugendes
+beugst
+beugt
+beugte
+beugten
+beugtest
+beugtet
+beunruhige
+beunruhigen
+beunruhigend
+beunruhigende
+beunruhigendem
+beunruhigenden
+beunruhigender
+beunruhigendes
+beunruhigst
+beunruhigt
+beunruhigte
+beunruhigtem
+beunruhigten
+beunruhigter
+beunruhigtes
+beunruhigtest
+beunruhigtet
+beurkunde
+beurkunden
+beurkundend
+beurkundende
+beurkundendem
+beurkundenden
+beurkundender
+beurkundendes
+beurkundest
+beurkundet
+beurkundete
+beurkundetem
+beurkundeten
+beurkundeter
+beurkundetes
+beurkundetest
+beurkundetet
+beurlaube
+beurlauben
+beurlaubend
+beurlaubende
+beurlaubendem
+beurlaubenden
+beurlaubender
+beurlaubendes
+beurlaubst
+beurlaubt
+beurlaubte
+beurlaubtem
+beurlaubten
+beurlaubter
+beurlaubtes
+beurlaubtest
+beurlaubtet
+beurteile
+beurteilen
+beurteilend
+beurteilende
+beurteilendem
+beurteilenden
+beurteilender
+beurteilendes
+beurteilst
+beurteilt
+beurteilte
+beurteiltem
+beurteilten
+beurteilter
+beurteiltes
+beurteiltest
+beurteiltet
+beutele
+beuteln
+beutelnd
+beutelnde
+beutelndem
+beutelnden
+beutelnder
+beutelndes
+beutelst
+beutelt
+beutelte
+beutelten
+beuteltest
+beuteltet
+beutle
+bevollmächtige
+bevollmächtigen
+bevollmächtigend
+bevollmächtigende
+bevollmächtigendem
+bevollmächtigenden
+bevollmächtigender
+bevollmächtigendes
+bevollmächtigst
+bevollmächtigt
+bevollmächtigte
+bevollmächtigtem
+bevollmächtigten
+bevollmächtigter
+bevollmächtigtes
+bevollmächtigtest
+bevollmächtigtet
+bevor
+bevormunde
+bevormunden
+bevormundend
+bevormundende
+bevormundendem
+bevormundenden
+bevormundender
+bevormundendes
+bevormundest
+bevormundet
+bevormundete
+bevormundetem
+bevormundeten
+bevormundeter
+bevormundetes
+bevormundetest
+bevormundetet
+bevorrate
+bevorraten
+bevorratend
+bevorratende
+bevorratendem
+bevorratenden
+bevorratender
+bevorratendes
+bevorratest
+bevorratet
+bevorratete
+bevorrateten
+bevorratetest
+bevorratetet
+bevorschussst
+bevorschusst
+bevorstand
+bevorstanden
+bevorstandest
+bevorstandet
+bevorstandst
+bevorstehe
+bevorstehen
+bevorstehend
+bevorstehende
+bevorstehendem
+bevorstehenden
+bevorstehender
+bevorstehendes
+bevorstehst
+bevorsteht
+bevorzog
+bevorzogen
+bevorzogst
+bevorzogt
+bevorzuge
+bevorzugen
+bevorzugend
+bevorzugende
+bevorzugendem
+bevorzugenden
+bevorzugender
+bevorzugendes
+bevorzugst
+bevorzugt
+bevorzugte
+bevorzugtem
+bevorzugten
+bevorzugter
+bevorzugtes
+bevorzugtest
+bevorzugtet
+bevölkere
+bevölkern
+bevölkernd
+bevölkernde
+bevölkerndem
+bevölkernden
+bevölkernder
+bevölkerndes
+bevölkerst
+bevölkert
+bevölkerte
+bevölkertem
+bevölkerten
+bevölkerter
+bevölkertes
+bevölkertest
+bevölkertet
+bevölkerungsreich
+bevölkerungsreiche
+bevölkerungsreichem
+bevölkerungsreichen
+bevölkerungsreicher
+bevölkerungsreichere
+bevölkerungsreicherem
+bevölkerungsreicheren
+bevölkerungsreicherer
+bevölkerungsreicheres
+bevölkerungsreiches
+bevölkerungsreichste
+bevölkerungsreichstem
+bevölkerungsreichsten
+bevölkerungsreichster
+bevölkerungsreichstes
+bevölkre
+bewache
+bewachen
+bewachend
+bewachende
+bewachendem
+bewachenden
+bewachender
+bewachendes
+bewachst
+bewacht
+bewachte
+bewachtem
+bewachten
+bewachter
+bewachtes
+bewachtest
+bewachtet
+bewaffne
+bewaffnen
+bewaffnend
+bewaffnende
+bewaffnendem
+bewaffnenden
+bewaffnender
+bewaffnendes
+bewaffnest
+bewaffnet
+bewaffnete
+bewaffnetem
+bewaffneten
+bewaffneter
+bewaffnetes
+bewaffnetest
+bewaffnetet
+bewahre
+bewahren
+bewahrend
+bewahrende
+bewahrendem
+bewahrenden
+bewahrender
+bewahrendes
+bewahrheite
+bewahrheiten
+bewahrheitest
+bewahrheitet
+bewahrheitete
+bewahrheiteten
+bewahrheitetest
+bewahrheitetet
+bewahrst
+bewahrt
+bewahrte
+bewahrtem
+bewahrten
+bewahrter
+bewahrtes
+bewahrtest
+bewahrtet
+bewaldet
+bewaldete
+bewaldetem
+bewaldeten
+bewaldeter
+bewaldetes
+bewandert
+bewanderte
+bewandertem
+bewanderten
+bewanderter
+bewandertes
+bewarb
+bewarben
+bewarbst
+bewarbt
+bewarf
+bewarfen
+bewarfest
+bewarfst
+bewarft
+bewege
+bewegen
+bewegend
+bewegende
+bewegendem
+bewegenden
+bewegender
+bewegendes
+beweglich
+bewegliche
+beweglichem
+beweglichen
+beweglicher
+beweglichere
+beweglicherem
+beweglicheren
+beweglicherer
+beweglicheres
+bewegliches
+beweglichste
+beweglichstem
+beweglichsten
+beweglichster
+beweglichstes
+bewegst
+bewegt
+bewegte
+bewegtem
+bewegten
+bewegter
+bewegtes
+bewegtest
+bewegtet
+bewegungsfähig
+bewegungsfähige
+bewegungsfähigem
+bewegungsfähigen
+bewegungsfähiger
+bewegungsfähiges
+bewegungslos
+bewegungslose
+bewegungslosem
+bewegungslosen
+bewegungsloser
+bewegungsloses
+bewegungsunfähig
+bewegungsunfähige
+bewegungsunfähigem
+bewegungsunfähigen
+bewegungsunfähiger
+bewegungsunfähiges
+beweine
+beweinen
+beweinend
+beweinende
+beweinendem
+beweinenden
+beweinender
+beweinendes
+beweinst
+beweint
+beweinte
+beweintem
+beweinten
+beweinter
+beweintes
+beweintest
+beweintet
+beweisbar
+beweisbare
+beweisbarem
+beweisbaren
+beweisbarer
+beweisbares
+beweise
+beweisen
+beweisend
+beweisende
+beweisendem
+beweisenden
+beweisender
+beweisendes
+beweisest
+beweiskräftig
+beweiskräftige
+beweiskräftigem
+beweiskräftigen
+beweiskräftiger
+beweiskräftigere
+beweiskräftigerem
+beweiskräftigeren
+beweiskräftigerer
+beweiskräftigeres
+beweiskräftiges
+beweiskräftigste
+beweiskräftigstem
+beweiskräftigsten
+beweiskräftigster
+beweiskräftigstes
+beweist
+bewenden
+bewerbe
+bewerben
+bewerbend
+bewerbende
+bewerbendem
+bewerbenden
+bewerbender
+bewerbendes
+bewerbt
+bewerkstellige
+bewerkstelligen
+bewerkstelligend
+bewerkstelligende
+bewerkstelligendem
+bewerkstelligenden
+bewerkstelligender
+bewerkstelligendes
+bewerkstelligst
+bewerkstelligt
+bewerkstelligte
+bewerkstelligten
+bewerkstelligtest
+bewerkstelligtet
+bewerte
+bewerten
+bewertend
+bewertende
+bewertendem
+bewertenden
+bewertender
+bewertendes
+bewertest
+bewertet
+bewertete
+bewertetem
+bewerteten
+bewerteter
+bewertetes
+bewertetest
+bewertetet
+bewies
+bewiesen
+bewiesene
+bewiesenem
+bewiesenen
+bewiesener
+bewiesenermaßen
+bewiesenes
+bewiesest
+bewiest
+bewillige
+bewilligen
+bewilligend
+bewilligende
+bewilligendem
+bewilligenden
+bewilligender
+bewilligendes
+bewilligst
+bewilligt
+bewilligte
+bewilligtem
+bewilligten
+bewilligter
+bewilligtes
+bewilligtest
+bewilligtet
+bewirbst
+bewirbt
+bewirke
+bewirken
+bewirkend
+bewirkende
+bewirkendem
+bewirkenden
+bewirkender
+bewirkendes
+bewirkst
+bewirkt
+bewirkte
+bewirktem
+bewirkten
+bewirkter
+bewirktes
+bewirktest
+bewirktet
+bewirte
+bewirten
+bewirtend
+bewirtende
+bewirtendem
+bewirtenden
+bewirtender
+bewirtendes
+bewirtest
+bewirtet
+bewirtete
+bewirtetem
+bewirteten
+bewirteter
+bewirtetes
+bewirtetest
+bewirtetet
+bewirtschafte
+bewirtschaften
+bewirtschaftend
+bewirtschaftende
+bewirtschaftendem
+bewirtschaftenden
+bewirtschaftender
+bewirtschaftendes
+bewirtschaftest
+bewirtschaftet
+bewirtschaftete
+bewirtschaftetem
+bewirtschafteten
+bewirtschafteter
+bewirtschaftetes
+bewirtschaftetest
+bewirtschaftetet
+bewog
+bewogen
+bewogst
+bewogt
+bewohnbar
+bewohnbare
+bewohnbarem
+bewohnbaren
+bewohnbarer
+bewohnbares
+bewohne
+bewohnen
+bewohnend
+bewohnende
+bewohnendem
+bewohnenden
+bewohnender
+bewohnendes
+bewohnst
+bewohnt
+bewohnte
+bewohntem
+bewohnten
+bewohnter
+bewohntes
+bewohntest
+bewohntet
+beworben
+beworbene
+beworbenem
+beworbenen
+beworbener
+beworbenes
+bewundere
+bewundern
+bewundernd
+bewundernde
+bewunderndem
+bewundernden
+bewundernder
+bewunderndes
+bewundernswert
+bewundernswerte
+bewundernswertem
+bewundernswerten
+bewundernswerter
+bewundernswertes
+bewundernswürdig
+bewundernswürdige
+bewundernswürdigem
+bewundernswürdigen
+bewundernswürdiger
+bewundernswürdiges
+bewunderst
+bewundert
+bewunderte
+bewundertem
+bewunderten
+bewunderter
+bewundertes
+bewundertest
+bewundertet
+bewunderungswürdig
+bewunderungswürdige
+bewunderungswürdigem
+bewunderungswürdigen
+bewunderungswürdiger
+bewunderungswürdigere
+bewunderungswürdigerem
+bewunderungswürdigeren
+bewunderungswürdigerer
+bewunderungswürdigeres
+bewunderungswürdiges
+bewunderungswürdigste
+bewunderungswürdigstem
+bewunderungswürdigsten
+bewunderungswürdigster
+bewunderungswürdigstes
+bewundre
+bewusst
+bewusste
+bewusstem
+bewussten
+bewusster
+bewusstes
+bewusstlos
+bewusstlose
+bewusstlosem
+bewusstlosen
+bewusstloser
+bewusstloses
+bewähre
+bewähren
+bewährend
+bewährende
+bewährendem
+bewährenden
+bewährender
+bewährendes
+bewährst
+bewährt
+bewährte
+bewährtem
+bewährten
+bewährter
+bewährtes
+bewährtest
+bewährtet
+bewältige
+bewältigen
+bewältigend
+bewältigende
+bewältigendem
+bewältigenden
+bewältigender
+bewältigendes
+bewältigst
+bewältigt
+bewältigte
+bewältigtem
+bewältigten
+bewältigter
+bewältigtes
+bewältigtest
+bewältigtet
+bewässere
+bewässern
+bewässernd
+bewässernde
+bewässerndem
+bewässernden
+bewässernder
+bewässerndes
+bewässerst
+bewässert
+bewässerte
+bewässertem
+bewässerten
+bewässerter
+bewässertes
+bewässertest
+bewässertet
+bewässre
+bewölkt
+bewölkte
+bewölktem
+bewölkten
+bewölkter
+bewölktes
+bez
+bezahle
+bezahlen
+bezahlend
+bezahlende
+bezahlendem
+bezahlenden
+bezahlender
+bezahlendes
+bezahlst
+bezahlt
+bezahlte
+bezahltem
+bezahlten
+bezahlter
+bezahltes
+bezahltest
+bezahltet
+bezaubere
+bezaubern
+bezaubernd
+bezaubernde
+bezauberndem
+bezaubernden
+bezaubernder
+bezauberndes
+bezauberst
+bezaubert
+bezauberte
+bezaubertem
+bezauberten
+bezauberter
+bezaubertes
+bezaubertest
+bezaubertet
+bezaubre
+bezeichne
+bezeichnen
+bezeichnend
+bezeichnende
+bezeichnendem
+bezeichnenden
+bezeichnender
+bezeichnenderweise
+bezeichnendes
+bezeichnest
+bezeichnet
+bezeichnete
+bezeichnetem
+bezeichneten
+bezeichneter
+bezeichnetes
+bezeichnetest
+bezeichnetet
+bezeuge
+bezeugen
+bezeugend
+bezeugende
+bezeugendem
+bezeugenden
+bezeugender
+bezeugendes
+bezeugst
+bezeugt
+bezeugte
+bezeugtem
+bezeugten
+bezeugter
+bezeugtes
+bezeugtest
+bezeugtet
+bezichtige
+bezichtigen
+bezichtigend
+bezichtigende
+bezichtigendem
+bezichtigenden
+bezichtigender
+bezichtigendes
+bezichtigst
+bezichtigt
+bezichtigte
+bezichtigtem
+bezichtigten
+bezichtigter
+bezichtigtes
+bezichtigtest
+bezichtigtet
+beziehbar
+beziehbare
+beziehbarem
+beziehbaren
+beziehbarer
+beziehbares
+beziehe
+beziehen
+beziehend
+beziehende
+beziehendem
+beziehenden
+beziehender
+beziehendes
+beziehst
+bezieht
+beziehungslos
+beziehungslose
+beziehungslosem
+beziehungslosen
+beziehungsloser
+beziehungsloses
+beziehungsweise
+beziffere
+beziffern
+beziffernd
+beziffernde
+bezifferndem
+beziffernden
+beziffernder
+bezifferndes
+bezifferst
+beziffert
+bezifferte
+beziffertem
+bezifferten
+bezifferter
+beziffertes
+beziffertest
+beziffertet
+beziffre
+bezog
+bezogen
+bezogene
+bezogenem
+bezogenen
+bezogener
+bezogenes
+bezogst
+bezogt
+bezugsfrei
+bezugsfreie
+bezugsfreiem
+bezugsfreien
+bezugsfreier
+bezugsfreies
+bezuschussbar
+bezuschussbare
+bezuschussbarem
+bezuschussbaren
+bezuschussbarer
+bezuschussbares
+bezuschusse
+bezuschussen
+bezuschussest
+bezuschusst
+bezuschusste
+bezuschusstem
+bezuschussten
+bezuschusster
+bezuschusstes
+bezuschusstest
+bezuschusstet
+bezwang
+bezwangen
+bezwangst
+bezwangt
+bezwecke
+bezwecken
+bezweckend
+bezweckende
+bezweckendem
+bezweckenden
+bezweckender
+bezweckendes
+bezweckst
+bezweckt
+bezweckte
+bezwecktem
+bezweckten
+bezweckter
+bezwecktes
+bezwecktest
+bezwecktet
+bezweifele
+bezweifeln
+bezweifelnd
+bezweifelnde
+bezweifelndem
+bezweifelnden
+bezweifelnder
+bezweifelndes
+bezweifelst
+bezweifelt
+bezweifelte
+bezweifeltem
+bezweifelten
+bezweifelter
+bezweifeltes
+bezweifeltest
+bezweifeltet
+bezweifle
+bezwinge
+bezwingen
+bezwingend
+bezwingende
+bezwingendem
+bezwingenden
+bezwingender
+bezwingendes
+bezwingst
+bezwingt
+bezwungen
+bezwungene
+bezwungenem
+bezwungenen
+bezwungener
+bezwungenes
+bezüglich
+bezügliche
+bezüglichem
+bezüglichen
+bezüglicher
+bezügliches
+beängstige
+beängstigen
+beängstigend
+beängstigende
+beängstigendem
+beängstigenden
+beängstigender
+beängstigendes
+beängstigst
+beängstigt
+beängstigte
+beängstigtem
+beängstigten
+beängstigter
+beängstigtes
+beängstigtest
+beängstigtet
+beäuge
+beäugen
+beäugend
+beäugende
+beäugendem
+beäugenden
+beäugender
+beäugendes
+beäugst
+beäugt
+beäugte
+beäugtem
+beäugten
+beäugter
+beäugtes
+beäugtest
+beäugtet
+bibelfest
+bibelfeste
+bibelfestem
+bibelfesten
+bibelfester
+bibelfestes
+biblisch
+biblische
+biblischem
+biblischen
+biblischer
+biblisches
+bidirektional
+bidirektionale
+bidirektionalem
+bidirektionalen
+bidirektionaler
+bidirektionales
+bieder
+biedere
+biederem
+biederen
+biederer
+biederes
+biege
+biegen
+biegend
+biegende
+biegendem
+biegenden
+biegender
+biegendes
+biegsam
+biegsame
+biegsamem
+biegsamen
+biegsamer
+biegsames
+biegst
+biegt
+biete
+bieten
+bietend
+bietende
+bietendem
+bietenden
+bietender
+bietendes
+bietest
+bietet
+bifilar
+bijektiv
+bijektive
+bijektivem
+bijektiven
+bijektiver
+bijektives
+bilanziere
+bilanzieren
+bilanzierend
+bilanzierende
+bilanzierendem
+bilanzierenden
+bilanzierender
+bilanzierendes
+bilanzierst
+bilanziert
+bilanzierte
+bilanziertem
+bilanzierten
+bilanzierter
+bilanziertes
+bilanziertest
+bilanziertet
+bilateral
+bilaterale
+bilateralem
+bilateralen
+bilateraler
+bilaterales
+bilde
+bilden
+bildend
+bildende
+bildendem
+bildenden
+bildender
+bildendes
+bilderreich
+bilderreiche
+bilderreichem
+bilderreichen
+bilderreicher
+bilderreiches
+bildest
+bildet
+bildete
+bildeten
+bildetest
+bildetet
+bildfähig
+bildfähige
+bildfähigem
+bildfähigen
+bildfähiger
+bildfähiges
+bildhaft
+bildhafte
+bildhaftem
+bildhaften
+bildhafter
+bildhaftes
+bildhübsch
+bildhübsche
+bildhübschem
+bildhübschen
+bildhübscher
+bildhübsches
+bildhübscheste
+bildhübschestem
+bildhübschesten
+bildhübschester
+bildhübschestes
+bildlich
+bildliche
+bildlichem
+bildlichen
+bildlicher
+bildliches
+bildschön
+bildschöne
+bildschönem
+bildschönen
+bildschöner
+bildschönes
+bildungsfähig
+bildungsfähige
+bildungsfähigem
+bildungsfähigen
+bildungsfähiger
+bildungsfähiges
+bildungshungrig
+bildungshungrige
+bildungshungrigem
+bildungshungrigen
+bildungshungriger
+bildungshungriges
+bildungspolitisch
+bildungspolitische
+bildungspolitischem
+bildungspolitischen
+bildungspolitischer
+bildungspolitisches
+billig
+billige
+billigem
+billigen
+billigend
+billigende
+billigendem
+billigenden
+billigender
+billigendes
+billiger
+billigere
+billigerem
+billigeren
+billigerer
+billigeres
+billigerweise
+billiges
+billigst
+billigste
+billigstem
+billigsten
+billigster
+billigstes
+billigt
+billigte
+billigten
+billigtest
+billigtet
+bimmele
+bimmeln
+bimmelnd
+bimmelnde
+bimmelndem
+bimmelnden
+bimmelnder
+bimmelndes
+bimmelst
+bimmelt
+bimmelte
+bimmelten
+bimmeltest
+bimmeltet
+bimmle
+bin
+binde
+binden
+bindend
+bindende
+bindendem
+bindenden
+bindender
+bindendes
+bindest
+bindet
+binnen
+binnenländisch
+binnenländische
+binnenländischem
+binnenländischen
+binnenländischer
+binnenländisches
+binär
+binäre
+binärem
+binären
+binärer
+binäres
+biochemisch
+biochemische
+biochemischem
+biochemischen
+biochemischer
+biochemisches
+biogen
+biogene
+biogenem
+biogenen
+biogener
+biogenes
+biographisch
+biographische
+biographischem
+biographischen
+biographischer
+biographisches
+biologisch
+biologische
+biologischem
+biologischen
+biologischer
+biologisches
+biotechnisch
+biotechnische
+biotechnischem
+biotechnischen
+biotechnischer
+biotechnisches
+biotechnologisch
+biotechnologische
+biotechnologischem
+biotechnologischen
+biotechnologischer
+biotechnologisches
+birgst
+birgt
+birnenförmig
+birnenförmige
+birnenförmigem
+birnenförmigen
+birnenförmiger
+birnenförmiges
+bis
+bischöfqqlich
+bischöfqqliche
+bischöfqqlichem
+bischöfqqlichen
+bischöfqqlicher
+bischöfqqliches
+bisher
+bisherig
+bisherige
+bisherigem
+bisherigen
+bisheriger
+bisheriges
+bislang
+biss
+bisschen
+bissen
+bissest
+bissig
+bissige
+bissigem
+bissigen
+bissiger
+bissiges
+bisst
+bist
+bisweilen
+bitte
+bitten
+bittend
+bittende
+bittendem
+bittenden
+bittender
+bittendes
+bitter
+bitterarm
+bitterarme
+bitterarmem
+bitterarmen
+bitterarmer
+bitterarmes
+bitterbös
+bitterböse
+bitterbösem
+bitterbösen
+bitterböser
+bitterböses
+bittere
+bitterem
+bitteren
+bitterer
+bitterere
+bittererem
+bittereren
+bittererer
+bittereres
+bitteres
+bitterkalt
+bitterkalte
+bitterkaltem
+bitterkalten
+bitterkalter
+bitterkaltes
+bitterlich
+bitterliche
+bitterlichem
+bitterlichen
+bitterlicher
+bitterliches
+bitterste
+bitterstem
+bittersten
+bitterster
+bitterstes
+bitteschön
+bittest
+bittet
+bitweise
+bitweisem
+bitweisen
+bitweiser
+bitweises
+bizarr
+bizarre
+bizarrem
+bizarren
+bizarrer
+bizarres
+bizonal
+blamabel
+blamabelste
+blamabelstem
+blamabelsten
+blamabelster
+blamabelstes
+blamable
+blamablem
+blamablen
+blamabler
+blamablere
+blamablerem
+blamableren
+blamablerer
+blamableres
+blamables
+blamiere
+blamieren
+blamierend
+blamierende
+blamierendem
+blamierenden
+blamierender
+blamierendes
+blamierst
+blamiert
+blamierte
+blamiertem
+blamierten
+blamierter
+blamiertes
+blamiertest
+blamiertet
+blanchiere
+blanchieren
+blanchierend
+blanchierende
+blanchierendem
+blanchierenden
+blanchierender
+blanchierendes
+blanchierst
+blanchiert
+blanchierte
+blanchiertem
+blanchierten
+blanchierter
+blanchiertes
+blanchiertest
+blanchiertet
+blank
+blanke
+blankem
+blanken
+blanker
+blankes
+blankgefegt
+blankgefegte
+blankgefegtem
+blankgefegten
+blankgefegter
+blankgefegtes
+blankgeputzt
+blankgeputzte
+blankgeputztem
+blankgeputzten
+blankgeputzter
+blankgeputztes
+blanko
+blase
+blasen
+blasend
+blasende
+blasendem
+blasenden
+blasender
+blasendes
+blasenfrei
+blasenfreie
+blasenfreiem
+blasenfreien
+blasenfreier
+blasenfreies
+blasiert
+blasierte
+blasiertem
+blasierten
+blasierter
+blasiertes
+blasphemisch
+blasphemische
+blasphemischem
+blasphemischen
+blasphemischer
+blasphemisches
+blass
+blasse
+blassem
+blassen
+blasser
+blassere
+blasserem
+blasseren
+blasserer
+blasseres
+blasses
+blasseste
+blassestem
+blassesten
+blassester
+blassestes
+blast
+blau
+blaue
+blauem
+blauen
+blauer
+blaues
+blaugemacht
+blaugrau
+blaugraue
+blaugrauem
+blaugrauen
+blaugrauer
+blaugraues
+blaugrün
+blaugrüne
+blaugrünem
+blaugrünen
+blaugrüner
+blaugrünes
+blaumetallic
+blauäugig
+blauäugige
+blauäugigem
+blauäugigen
+blauäugiger
+blauäugiges
+bleche
+blechen
+blechend
+blechende
+blechendem
+blechenden
+blechender
+blechendes
+blechern
+blecherne
+blechernem
+blechernen
+blecherner
+blechernes
+blechst
+blecht
+blechte
+blechten
+blechtest
+blechtet
+bleib
+bleibe
+bleiben
+bleibend
+bleibende
+bleibendem
+bleibenden
+bleibender
+bleibendes
+bleibst
+bleibt
+bleich
+bleiche
+bleichem
+bleichen
+bleichend
+bleichende
+bleichendem
+bleichenden
+bleichender
+bleichendes
+bleicher
+bleiches
+bleichst
+bleicht
+bleichte
+bleichten
+bleichtest
+bleichtet
+bleiern
+bleierne
+bleiernem
+bleiernen
+bleierner
+bleiernes
+bleifrei
+bleifreie
+bleifreiem
+bleifreien
+bleifreier
+bleifreies
+bleihaltig
+bleihaltige
+bleihaltigem
+bleihaltigen
+bleihaltiger
+bleihaltiges
+blende
+blenden
+blendend
+blendende
+blendendem
+blendenden
+blendender
+blendendes
+blendest
+blendet
+blendete
+blendeten
+blendetest
+blendetet
+blich
+blichen
+blichest
+blichst
+blicht
+blicke
+blicken
+blickend
+blickende
+blickendem
+blickenden
+blickender
+blickendes
+blickfangend
+blickfangende
+blickfangendem
+blickfangenden
+blickfangender
+blickfangendes
+blicklos
+blickst
+blickt
+blickte
+blickten
+blicktest
+blicktet
+blieb
+bliebe
+blieben
+bliebst
+bliebt
+blies
+bliesen
+blind
+blinde
+blindem
+blinden
+blinder
+blindes
+blindwütig
+blindwütige
+blindwütigem
+blindwütigen
+blindwütiger
+blindwütiges
+blinke
+blinken
+blinkend
+blinkende
+blinkendem
+blinkenden
+blinkender
+blinkendes
+blinkst
+blinkt
+blinkte
+blinkten
+blinktest
+blinktet
+blinzele
+blinzeln
+blinzelnd
+blinzelnde
+blinzelndem
+blinzelnden
+blinzelnder
+blinzelndes
+blinzelst
+blinzelt
+blinzelte
+blinzelten
+blinzeltest
+blinzeltet
+blinzle
+blitzartig
+blitzartige
+blitzartigem
+blitzartigen
+blitzartiger
+blitzartiges
+blitzblank
+blitzblanke
+blitzblankem
+blitzblanken
+blitzblanker
+blitzblankes
+blitze
+blitzen
+blitzend
+blitzende
+blitzendem
+blitzenden
+blitzender
+blitzendes
+blitzest
+blitzschnell
+blitzschnelle
+blitzschnellem
+blitzschnellen
+blitzschneller
+blitzschnelles
+blitzt
+blitzte
+blitzten
+blitztest
+blitztet
+blockfrei
+blockfreie
+blockfreiem
+blockfreien
+blockfreier
+blockfreies
+blockiere
+blockieren
+blockierend
+blockierende
+blockierendem
+blockierenden
+blockierender
+blockierendes
+blockierst
+blockiert
+blockierte
+blockiertem
+blockierten
+blockierter
+blockiertes
+blockiertest
+blockiertet
+blond
+blonde
+blondem
+blonden
+blonder
+blondes
+bloß
+bloße
+bloßem
+bloßen
+bloßer
+bloßes
+bloßgelegt
+bloßgelegte
+bloßgelegtem
+bloßgelegten
+bloßgelegter
+bloßgelegtes
+bloßgestellt
+bloßgestellte
+bloßgestelltem
+bloßgestellten
+bloßgestellter
+bloßgestelltes
+bloßlege
+bloßlegen
+bloßlegend
+bloßlegende
+bloßlegendem
+bloßlegenden
+bloßlegender
+bloßlegendes
+bloßlegst
+bloßlegt
+bloßlegte
+bloßlegten
+bloßlegtest
+bloßlegtet
+bloßstelle
+bloßstellen
+bloßstellend
+bloßstellende
+bloßstellendem
+bloßstellenden
+bloßstellender
+bloßstellendes
+bloßstellst
+bloßstellt
+bloßstellte
+bloßstellten
+bloßstelltest
+bloßstelltet
+bloßzulegen
+bloßzulegend
+bloßzulegende
+bloßzulegendem
+bloßzulegenden
+bloßzulegender
+bloßzulegendes
+bluffe
+bluffen
+bluffend
+bluffende
+bluffendem
+bluffenden
+bluffender
+bluffendes
+bluffst
+blufft
+bluffte
+blufften
+blufftest
+blufftet
+blumig
+blumige
+blumigem
+blumigen
+blumiger
+blumigere
+blumigerem
+blumigeren
+blumigerer
+blumigeres
+blumiges
+blumigste
+blumigstem
+blumigsten
+blumigster
+blumigstes
+blutarm
+blutarme
+blutarmem
+blutarmen
+blutarmer
+blutarmes
+blutbesudelt
+blutbesudelte
+blutbesudeltem
+blutbesudelten
+blutbesudelter
+blutbesudeltes
+blutdurstig
+blutdurstige
+blutdurstigem
+blutdurstigen
+blutdurstiger
+blutdurstiges
+blute
+bluten
+blutend
+blutende
+blutendem
+blutenden
+blutender
+blutendes
+blutest
+blutet
+blutete
+bluteten
+blutetest
+blutetet
+blutig
+blutige
+blutigem
+blutigen
+blutiger
+blutigere
+blutigerem
+blutigeren
+blutigerer
+blutigeres
+blutiges
+blutigste
+blutigstem
+blutigsten
+blutigster
+blutigstes
+blutjung
+blutjunge
+blutjungem
+blutjungen
+blutjunger
+blutjunges
+blutrot
+blutrote
+blutrotem
+blutroten
+blutroter
+blutrotes
+blutrünstig
+blutrünstige
+blutrünstigem
+blutrünstigen
+blutrünstiger
+blutrünstigere
+blutrünstigerem
+blutrünstigeren
+blutrünstigerer
+blutrünstigeres
+blutrünstiges
+blutrünstigste
+blutrünstigstem
+blutrünstigsten
+blutrünstigster
+blutrünstigstes
+blutstillend
+blutstillende
+blutstillendem
+blutstillenden
+blutstillender
+blutstillendes
+blutunterlaufen
+blutunterlaufene
+blutunterlaufenem
+blutunterlaufenen
+blutunterlaufener
+blutunterlaufenes
+blutverschmiert
+blutverschmierte
+blutverschmiertem
+blutverschmierten
+blutverschmierter
+blutverschmiertes
+blähe
+blähen
+blähend
+blähende
+blähendem
+blähenden
+blähender
+blähendes
+blähst
+bläht
+blähte
+blähten
+blähtest
+blähtet
+bläst
+blättere
+blättern
+blätternd
+blätternde
+blätterndem
+blätternden
+blätternder
+blätterndes
+blätterst
+blättert
+blätterte
+blätterten
+blättertest
+blättertet
+blättre
+bläulich
+bläuliche
+bläulichem
+bläulichen
+bläulicher
+bläuliches
+blöd
+blöde
+blödele
+blödeln
+blödelnd
+blödelnde
+blödelndem
+blödelnden
+blödelnder
+blödelndes
+blödelst
+blödelt
+blödelte
+blödelten
+blödeltest
+blödeltet
+blödem
+blöden
+blöder
+blödere
+blöderem
+blöderen
+blöderer
+blöderes
+blödes
+blödle
+blödsinnig
+blödsinnige
+blödsinnigem
+blödsinnigen
+blödsinniger
+blödsinniges
+blödste
+blödstem
+blödsten
+blödster
+blödstes
+blöke
+blöken
+blökend
+blökende
+blökendem
+blökenden
+blökender
+blökendes
+blökst
+blökt
+blökte
+blökten
+blöktest
+blöktet
+blühe
+blühen
+blühend
+blühende
+blühendem
+blühenden
+blühender
+blühendes
+blühst
+blüht
+blühte
+blühten
+blühtest
+blühtet
+blütenweiß
+blütenweiße
+blütenweißem
+blütenweißen
+blütenweißer
+blütenweißes
+blütenübersät
+blütenübersäte
+blütenübersätem
+blütenübersäten
+blütenübersäter
+blütenübersätes
+bocke
+bocken
+bockig
+bockige
+bockigem
+bockigen
+bockiger
+bockiges
+bockst
+bockt
+bockte
+bockten
+bocktest
+bocktet
+bodenlos
+bodenlose
+bodenlosem
+bodenlosen
+bodenloser
+bodenloses
+bodennah
+bodennahe
+bodennahem
+bodennahen
+bodennaher
+bodennahere
+bodennaherem
+bodennaheren
+bodennaherer
+bodennaheres
+bodennahes
+bodennahste
+bodennahstem
+bodennahsten
+bodennahster
+bodennahstes
+bodenständig
+bodenständige
+bodenständigem
+bodenständigen
+bodenständiger
+bodenständiges
+bog
+bogen
+bogenförmig
+bogenförmige
+bogenförmigem
+bogenförmigen
+bogenförmiger
+bogenförmiges
+bogst
+bogt
+bohnere
+bohnern
+bohnernd
+bohnernde
+bohnerndem
+bohnernden
+bohnernder
+bohnerndes
+bohnerst
+bohnert
+bohnerte
+bohnerten
+bohnertest
+bohnertet
+bohnre
+bohre
+bohren
+bohrend
+bohrende
+bohrendem
+bohrenden
+bohrender
+bohrendes
+bohrsch
+bohrsche
+bohrschem
+bohrschen
+bohrscher
+bohrsches
+bohrst
+bohrt
+bohrte
+bohrten
+bohrtest
+bohrtet
+bolivianisch
+bolivianische
+bolivianischem
+bolivianischen
+bolivianischer
+bolivianisches
+bolschewistisch
+bolschewistische
+bolschewistischem
+bolschewistischen
+bolschewistischer
+bolschewistisches
+bombardiere
+bombardieren
+bombardierend
+bombardierende
+bombardierendem
+bombardierenden
+bombardierender
+bombardierendes
+bombardierst
+bombardiert
+bombardierte
+bombardiertem
+bombardierten
+bombardierter
+bombardiertes
+bombardiertest
+bombardiertet
+bombastisch
+bombastische
+bombastischem
+bombastischen
+bombastischer
+bombastisches
+bombenfest
+bombenfeste
+bombenfestem
+bombenfesten
+bombenfester
+bombenfestes
+bombig
+bombige
+bombigem
+bombigen
+bombiger
+bombiges
+bonitätsfördernd
+bonitätsfördernde
+bonitätsförderndem
+bonitätsfördernden
+bonitätsfördernder
+bonitätsförderndes
+boolsch
+boolsche
+boolschem
+boolschen
+boolscher
+boolsches
+boote
+booten
+bootest
+bootet
+bootete
+booteten
+bootetest
+bootetet
+bordeigen
+bordeigene
+bordeigenem
+bordeigenen
+bordeigener
+bordeigenes
+borge
+borgen
+borgend
+borgende
+borgendem
+borgenden
+borgender
+borgendes
+borgst
+borgt
+borgte
+borgten
+borgtest
+borgtet
+borniert
+bornierte
+borniertem
+bornierten
+bornierter
+borniertes
+borstig
+borstige
+borstigem
+borstigen
+borstiger
+borstiges
+boshaft
+boshafte
+boshaftem
+boshaften
+boshafter
+boshaftere
+boshafterem
+boshafteren
+boshafterer
+boshafteres
+boshaftes
+boshafteste
+boshaftestem
+boshaftesten
+boshaftester
+boshaftestes
+bot
+botanisch
+botanische
+botanischem
+botanischen
+botanischer
+botanisches
+boten
+botest
+botet
+botst
+boxe
+boxen
+boxend
+boxende
+boxendem
+boxenden
+boxender
+boxendes
+boxest
+boxt
+boxte
+boxten
+boxtest
+boxtet
+boykottiere
+boykottieren
+boykottierend
+boykottierende
+boykottierendem
+boykottierenden
+boykottierender
+boykottierendes
+boykottierst
+boykottiert
+boykottierte
+boykottiertem
+boykottierten
+boykottierter
+boykottiertes
+boykottiertest
+boykottiertet
+brach
+brachen
+brachest
+brachial
+brachiale
+brachialem
+brachialen
+brachialer
+brachiales
+brachliege
+brachliegen
+brachliegend
+brachliegende
+brachliegendem
+brachliegenden
+brachliegender
+brachliegendes
+brachliegst
+brachliegt
+brachst
+bracht
+brachte
+brachten
+brachtest
+brachtet
+branchenkundig
+branchenkundige
+branchenkundigem
+branchenkundigen
+branchenkundiger
+branchenkundiges
+branchenspezifisch
+branchenspezifische
+branchenspezifischem
+branchenspezifischen
+branchenspezifischer
+branchenspezifisches
+branchenüblich
+branchenübliche
+branchenüblichem
+branchenüblichen
+branchenüblicher
+branchenübliches
+brande
+branden
+brandend
+brandende
+brandendem
+brandenden
+brandender
+brandendes
+brandest
+brandet
+brandete
+brandeten
+brandetest
+brandetet
+brandig
+brandige
+brandigem
+brandigen
+brandiger
+brandiges
+brandneu
+brandneue
+brandneuem
+brandneuen
+brandneuer
+brandneues
+brandschatze
+brandschatzen
+brandschatzend
+brandschatzende
+brandschatzendem
+brandschatzenden
+brandschatzender
+brandschatzendes
+brandschatzest
+brandschatzt
+brandschatzte
+brandschatzten
+brandschatztest
+brandschatztet
+brannte
+brannten
+branntest
+branntet
+brasilianisch
+brasilianische
+brasilianischem
+brasilianischen
+brasilianischer
+brasilianisches
+brate
+braten
+bratend
+bratende
+bratendem
+bratenden
+bratender
+bratendes
+bratet
+brauchbar
+brauchbare
+brauchbarem
+brauchbaren
+brauchbarer
+brauchbarere
+brauchbarerem
+brauchbareren
+brauchbarerer
+brauchbareres
+brauchbares
+brauchbarste
+brauchbarstem
+brauchbarsten
+brauchbarster
+brauchbarstes
+brauche
+brauchen
+brauchend
+brauchende
+brauchendem
+brauchenden
+brauchender
+brauchendes
+brauchst
+braucht
+brauchte
+brauchten
+brauchtest
+brauchtet
+braue
+brauen
+brauend
+brauende
+brauendem
+brauenden
+brauender
+brauendes
+braun
+braune
+braunem
+braunen
+brauner
+braunes
+braunschwarz
+braunschwarze
+braunschwarzem
+braunschwarzen
+braunschwarzer
+braunschwarzes
+braunschweigisch
+braunschweigische
+braunschweigischem
+braunschweigischen
+braunschweigischer
+braunschweigisches
+brause
+brausen
+brausend
+brausende
+brausendem
+brausenden
+brausender
+brausendes
+brausest
+braust
+brauste
+brausten
+braustest
+braustet
+braut
+braute
+brauten
+brautest
+brautet
+brav
+brave
+bravem
+braven
+braver
+braves
+bravourös
+bravouröse
+bravourösem
+bravourösen
+bravouröser
+bravouröses
+breche
+brechen
+brechend
+brechende
+brechendem
+brechenden
+brechender
+brechendes
+brecht
+brechungsartig
+brechungsartige
+brechungsartigem
+brechungsartigen
+brechungsartiger
+brechungsartiges
+breiig
+breiige
+breiigem
+breiigen
+breiiger
+breiiges
+breit
+breitangelegt
+breitangelegte
+breitangelegtem
+breitangelegten
+breitangelegter
+breitangelegtere
+breitangelegterem
+breitangelegteren
+breitangelegterer
+breitangelegteres
+breitangelegtes
+breitangelegteste
+breitangelegtestem
+breitangelegtesten
+breitangelegtester
+breitangelegtestes
+breitbandig
+breitbandige
+breitbandigem
+breitbandigen
+breitbandiger
+breitbandiges
+breitbar
+breitbare
+breitbarem
+breitbaren
+breitbarer
+breitbares
+breite
+breitem
+breiten
+breitend
+breitende
+breitendem
+breitenden
+breitender
+breitendes
+breiter
+breitere
+breiterem
+breiteren
+breiterer
+breiteres
+breites
+breitest
+breiteste
+breitestem
+breitesten
+breitester
+breitestes
+breitet
+breitete
+breiteten
+breitetest
+breitetet
+breitgeschlagen
+breitgeschlagene
+breitgeschlagenem
+breitgeschlagenen
+breitgeschlagener
+breitgeschlagenes
+breitgetreten
+breitgetretene
+breitgetretenem
+breitgetretenen
+breitgetretener
+breitgetretenes
+breitmache
+breitmachen
+breitmachend
+breitmachende
+breitmachendem
+breitmachenden
+breitmachender
+breitmachendes
+breitmachst
+breitmacht
+breitmachte
+breitmachten
+breitmachtest
+breitmachtet
+breitrandig
+breitrandige
+breitrandigem
+breitrandigen
+breitrandiger
+breitrandiges
+breitschlage
+breitschlagen
+breitschlagend
+breitschlagende
+breitschlagendem
+breitschlagenden
+breitschlagender
+breitschlagendes
+breitschlagt
+breitschulterig
+breitschulterige
+breitschulterigem
+breitschulterigen
+breitschulteriger
+breitschulteriges
+breitschultrig
+breitschultrige
+breitschultrigem
+breitschultrigen
+breitschultriger
+breitschultriges
+breitspurig
+breitspurige
+breitspurigem
+breitspurigen
+breitspuriger
+breitspuriges
+breittrete
+breittreten
+breittretend
+breittretende
+breittretendem
+breittretenden
+breittretender
+breittretendes
+breittretet
+breitzutreten
+breitzutretend
+breitzutretende
+breitzutretendem
+breitzutretenden
+breitzutretender
+breitzutretendes
+bremsbar
+bremsbare
+bremsbarem
+bremsbaren
+bremsbarer
+bremsbares
+bremse
+bremsen
+bremsend
+bremsende
+bremsendem
+bremsenden
+bremsender
+bremsendes
+bremsest
+bremst
+bremste
+bremsten
+bremstest
+bremstet
+brennbar
+brennbare
+brennbarem
+brennbaren
+brennbarer
+brennbares
+brenne
+brennen
+brennend
+brennende
+brennendem
+brennenden
+brennender
+brennendere
+brennenderem
+brennenderen
+brennenderer
+brennenderes
+brennendes
+brennendste
+brennendstem
+brennendsten
+brennendster
+brennendstes
+brennst
+brennt
+brenzelig
+brenzelige
+brenzeligem
+brenzeligen
+brenzeliger
+brenzeliges
+brenzlich
+brenzliche
+brenzlichem
+brenzlichen
+brenzlicher
+brenzliches
+brenzlig
+brenzlige
+brenzligem
+brenzligen
+brenzliger
+brenzliges
+brichst
+bricht
+briefqqlich
+briefqqliche
+briefqqlichem
+briefqqlichen
+briefqqlicher
+briefqqliches
+brillant
+brillante
+brillantem
+brillanten
+brillanter
+brillantere
+brillanterem
+brillanteren
+brillanterer
+brillanteres
+brillantes
+brillanteste
+brillantestem
+brillantesten
+brillantester
+brillantestes
+bring
+bringe
+bringen
+bringend
+bringende
+bringendem
+bringenden
+bringender
+bringendes
+bringst
+bringt
+brisant
+brisante
+brisantem
+brisanten
+brisanter
+brisantes
+britisch
+britische
+britischem
+britischen
+britischer
+britisches
+brodele
+brodeln
+brodelnd
+brodelnde
+brodelndem
+brodelnden
+brodelnder
+brodelndes
+brodelst
+brodelt
+brodelte
+brodelten
+brodeltest
+brodeltet
+brodle
+bromidfrei
+bromidfreie
+bromidfreiem
+bromidfreien
+bromidfreier
+bromidfreies
+bronzen
+bronzene
+bronzenem
+bronzenen
+bronzener
+bronzenes
+broschiere
+broschieren
+broschierend
+broschierende
+broschierendem
+broschierenden
+broschierender
+broschierendes
+broschierst
+broschiert
+broschierte
+broschiertem
+broschierten
+broschierter
+broschiertes
+broschiertest
+broschiertet
+bruchfest
+bruchfeste
+bruchfestem
+bruchfesten
+bruchfester
+bruchfestes
+brumme
+brummele
+brummeln
+brummelnd
+brummelnde
+brummelndem
+brummelnden
+brummelnder
+brummelndes
+brummelst
+brummelt
+brummelte
+brummelten
+brummeltest
+brummeltet
+brummen
+brummend
+brummende
+brummendem
+brummenden
+brummender
+brummendes
+brummig
+brummige
+brummigem
+brummigen
+brummiger
+brummiges
+brummle
+brummst
+brummt
+brummte
+brummten
+brummtest
+brummtet
+brusttief
+brusttiefe
+brusttiefem
+brusttiefen
+brusttiefer
+brusttiefes
+brutal
+brutale
+brutalem
+brutalen
+brutaler
+brutalere
+brutalerem
+brutaleren
+brutalerer
+brutaleres
+brutales
+brutalste
+brutalstem
+brutalsten
+brutalster
+brutalstes
+brächte
+brächten
+brächtest
+brächtet
+bräune
+bräunen
+bräunend
+bräunende
+bräunendem
+bräunenden
+bräunender
+bräunendes
+bräunlich
+bräunliche
+bräunlichem
+bräunlichen
+bräunlicher
+bräunliches
+bräunst
+bräunt
+bröckele
+bröckelig
+bröckelige
+bröckeligem
+bröckeligen
+bröckeliger
+bröckeliges
+bröckeln
+bröckelnd
+bröckelnde
+bröckelndem
+bröckelnden
+bröckelnder
+bröckelndes
+bröckelst
+bröckelt
+bröckelte
+bröckelten
+bröckeltest
+bröckeltet
+bröckle
+bröcklig
+bröcklige
+bröckligem
+bröckligen
+bröckliger
+bröckliges
+brüchig
+brüchige
+brüchigem
+brüchigen
+brüchiger
+brüchigere
+brüchigerem
+brüchigeren
+brüchigerer
+brüchigeres
+brüchiges
+brüchigste
+brüchigstem
+brüchigsten
+brüchigster
+brüchigstes
+brüderlich
+brüderliche
+brüderlichem
+brüderlichen
+brüderlicher
+brüderliches
+brühe
+brühen
+brühend
+brühende
+brühendem
+brühenden
+brühender
+brühendes
+brühst
+brüht
+brühte
+brühten
+brühtest
+brühtet
+brülle
+brüllen
+brüllend
+brüllende
+brüllendem
+brüllenden
+brüllender
+brüllendes
+brüllst
+brüllt
+brüllte
+brüllten
+brülltest
+brülltet
+brünett
+brünette
+brünettem
+brünetten
+brünetter
+brünettes
+brüsk
+brüske
+brüskem
+brüsken
+brüsker
+brüskes
+brüskiere
+brüskieren
+brüskierend
+brüskierende
+brüskierendem
+brüskierenden
+brüskierender
+brüskierendes
+brüskierst
+brüskiert
+brüskierte
+brüskiertem
+brüskierten
+brüskierter
+brüskiertes
+brüskiertest
+brüskiertet
+brüste
+brüsten
+brüstest
+brüstet
+brüstete
+brüsteten
+brüstetest
+brüstetet
+brüte
+brüten
+brütend
+brütende
+brütendem
+brütenden
+brütender
+brütendes
+brütest
+brütet
+brütete
+brüteten
+brütetest
+brütetet
+bspw
+buche
+buchen
+buchend
+buchende
+buchendem
+buchenden
+buchender
+buchendes
+buchhalterisch
+buchhalterische
+buchhalterischem
+buchhalterischen
+buchhalterischer
+buchhalterisches
+buchmäßig
+buchmäßige
+buchmäßigem
+buchmäßigen
+buchmäßiger
+buchmäßiges
+buchst
+buchstabengemäß
+buchstabengemäße
+buchstabengemäßem
+buchstabengemäßen
+buchstabengemäßer
+buchstabengemäßes
+buchstabengetreu
+buchstabengetreue
+buchstabengetreuem
+buchstabengetreuen
+buchstabengetreuer
+buchstabengetreues
+buchstabiere
+buchstabieren
+buchstabierend
+buchstabierende
+buchstabierendem
+buchstabierenden
+buchstabierender
+buchstabierendes
+buchstabierst
+buchstabiert
+buchstabierte
+buchstabiertem
+buchstabierten
+buchstabierter
+buchstabiertes
+buchstabiertest
+buchstabiertet
+buchstäblich
+buchstäbliche
+buchstäblichem
+buchstäblichen
+buchstäblicher
+buchstäbliches
+bucht
+buchte
+buchten
+buchtest
+buchtet
+buckele
+buckelig
+buckelige
+buckeligem
+buckeligen
+buckeliger
+buckeligere
+buckeligerem
+buckeligeren
+buckeligerer
+buckeligeres
+buckeliges
+buckeligste
+buckeligstem
+buckeligsten
+buckeligster
+buckeligstes
+buckeln
+buckelnd
+buckelnde
+buckelndem
+buckelnden
+buckelnder
+buckelndes
+buckelst
+buckelt
+buckelte
+buckelten
+buckeltest
+buckeltet
+buckle
+bucklig
+bucklige
+buckligem
+buckligen
+buckliger
+buckligere
+buckligerem
+buckligeren
+buckligerer
+buckligeres
+buckliges
+buckligste
+buckligstem
+buckligsten
+buckligster
+buckligstes
+buddhistisch
+buddhistische
+buddhistischem
+buddhistischen
+buddhistischer
+buddhistisches
+bugsiere
+bugsieren
+bugsierend
+bugsierende
+bugsierendem
+bugsierenden
+bugsierender
+bugsierendes
+bugsierst
+bugsiert
+bugsierte
+bugsiertem
+bugsierten
+bugsierter
+bugsiertes
+bugsiertest
+bugsiertet
+buhe
+buhen
+buhend
+buhende
+buhendem
+buhenden
+buhender
+buhendes
+buhle
+buhlen
+buhlend
+buhlende
+buhlendem
+buhlenden
+buhlender
+buhlendes
+buhlst
+buhlt
+buhlte
+buhlten
+buhltest
+buhltet
+buhst
+buht
+buhte
+buhten
+buhtest
+buhtet
+bulgarisch
+bulgarische
+bulgarischem
+bulgarischen
+bulgarischer
+bulgarisches
+bullig
+bullige
+bulligem
+bulligen
+bulliger
+bulligere
+bulligerem
+bulligeren
+bulligerer
+bulligeres
+bulliges
+bulligste
+bulligstem
+bulligsten
+bulligster
+bulligstes
+bummele
+bummeln
+bummelnd
+bummelnde
+bummelndem
+bummelnden
+bummelnder
+bummelndes
+bummelst
+bummelt
+bummelte
+bummelten
+bummeltest
+bummeltet
+bummle
+bumse
+bumsen
+bumsend
+bumsende
+bumsendem
+bumsenden
+bumsender
+bumsendes
+bumsest
+bumsfidel
+bumst
+bumste
+bumsten
+bumstest
+bumstet
+bundesdeutsch
+bundesdeutsche
+bundesdeutschem
+bundesdeutschen
+bundesdeutscher
+bundesdeutsches
+bundesweit
+bundesweite
+bundesweitem
+bundesweiten
+bundesweiter
+bundesweites
+bunt
+buntbedruckt
+buntbedruckte
+buntbedrucktem
+buntbedruckten
+buntbedruckter
+buntbedrucktes
+bunte
+buntem
+bunten
+bunter
+buntes
+buntfarben
+buntfarbene
+buntfarbenem
+buntfarbenen
+buntfarbener
+buntfarbenes
+buntfarbig
+buntfarbige
+buntfarbigem
+buntfarbigen
+buntfarbiger
+buntfarbiges
+buntschillernd
+buntschillernde
+buntschillerndem
+buntschillernden
+buntschillernder
+buntschillerndes
+burgenreich
+burgenreiche
+burgenreichem
+burgenreichen
+burgenreicher
+burgenreiches
+burgtheaterreif
+burlesk
+burleske
+burleskem
+burlesken
+burlesker
+burleskes
+burmesisch
+burmesische
+burmesischem
+burmesischen
+burmesischer
+burmesisches
+burschenhaft
+burschenhafte
+burschenhaftem
+burschenhaften
+burschenhafter
+burschenhaftes
+burschikos
+burschikose
+burschikosem
+burschikosen
+burschikoser
+burschikoses
+busartige
+buschig
+buschige
+buschigem
+buschigen
+buschiger
+buschiges
+busenlos
+busenlose
+busenlosem
+busenlosen
+busenloser
+busenloses
+buttere
+buttern
+butternd
+butternde
+butterndem
+butternden
+butternder
+butterndes
+butterst
+buttert
+butterte
+butterten
+buttertest
+buttertet
+buttre
+bußfertig
+bußfertige
+bußfertigem
+bußfertigen
+bußfertiger
+bußfertiges
+byzantinisch
+byzantinische
+byzantinischem
+byzantinischen
+byzantinischer
+byzantinisches
+bzgl
+bzw
+bändige
+bändigen
+bändigend
+bändigende
+bändigendem
+bändigenden
+bändigender
+bändigendes
+bändigst
+bändigt
+bändigte
+bändigten
+bändigtest
+bändigtet
+bärenstark
+bärenstarke
+bärenstarkem
+bärenstarken
+bärenstarker
+bärenstarkes
+bärtig
+bärtige
+bärtigem
+bärtigen
+bärtiger
+bärtiges
+bäuerlich
+bäuerliche
+bäuerlichem
+bäuerlichen
+bäuerlicher
+bäuerliches
+bäumst
+bäumt
+bäumte
+bäumten
+bäumtest
+bäumtet
+böhmisch
+böhmische
+böhmischem
+böhmischen
+böhmischer
+böhmisches
+böig
+böige
+böigem
+böigen
+böiger
+böiges
+böllere
+böllern
+böllernd
+böllernde
+böllerndem
+böllernden
+böllernder
+böllerndes
+böllerst
+böllert
+böllerte
+böllerten
+böllertest
+böllertet
+böllre
+bös
+bösartig
+bösartige
+bösartigem
+bösartigen
+bösartiger
+bösartiges
+böse
+bösem
+bösen
+böser
+bösere
+böserem
+böseren
+böserer
+böseres
+böses
+böseste
+bösestem
+bösesten
+bösester
+bösestes
+böswillig
+böswillige
+böswilligem
+böswilligen
+böswilliger
+böswilligere
+böswilligerem
+böswilligeren
+böswilligerer
+böswilligeres
+böswilliges
+böswilligste
+böswilligstem
+böswilligsten
+böswilligster
+böswilligstes
+bübisch
+bübische
+bübischem
+bübischen
+bübischer
+bübisches
+bücke
+bücken
+bückend
+bückende
+bückendem
+bückenden
+bückender
+bückendes
+bückst
+bückt
+bückte
+bückten
+bücktest
+bücktet
+büffele
+büffeln
+büffelnd
+büffelnde
+büffelndem
+büffelnden
+büffelnder
+büffelndes
+büffelst
+büffelt
+büffelte
+büffelten
+büffeltest
+büffeltet
+büffle
+bügele
+bügelfrei
+bügelfreie
+bügelfreiem
+bügelfreien
+bügelfreier
+bügelfreies
+bügeln
+bügelnd
+bügelnde
+bügelndem
+bügelnden
+bügelnder
+bügelndes
+bügelst
+bügelt
+bügelte
+bügelten
+bügeltest
+bügeltet
+bügle
+bühnengewandt
+bühnengewandte
+bühnengewandtem
+bühnengewandten
+bühnengewandter
+bühnengewandtes
+bühnenhaft
+bühnenhafte
+bühnenhaftem
+bühnenhaften
+bühnenhafter
+bühnenhaftes
+bühnenkundiger
+bündelweise
+bündig
+bündige
+bündigem
+bündigen
+bündiger
+bündiges
+bündnisfrei
+bündnisfreie
+bündnisfreiem
+bündnisfreien
+bündnisfreier
+bündnisfreies
+bündniskonform
+bündniskonforme
+bündniskonformem
+bündniskonformen
+bündniskonformer
+bündniskonformes
+bürge
+bürgen
+bürgend
+bürgende
+bürgendem
+bürgenden
+bürgender
+bürgendes
+bürgerlich
+bürgerliche
+bürgerlichem
+bürgerlichen
+bürgerlicher
+bürgerliches
+bürgst
+bürgt
+bürgte
+bürgten
+bürgtest
+bürgtet
+bürokratisch
+bürokratische
+bürokratischem
+bürokratischen
+bürokratischer
+bürokratisches
+bürste
+bürsten
+bürstend
+bürstende
+bürstendem
+bürstenden
+bürstender
+bürstendes
+bürstest
+bürstet
+bürstete
+bürsteten
+bürstetest
+bürstetet
+büße
+büßen
+büßend
+büßende
+büßendem
+büßenden
+büßender
+büßendes
+büßest
+büßt
+büßte
+büßten
+büßtest
+büßtet
+ca
+cetera
+cf
+chancenreich
+chancenreiche
+chancenreichem
+chancenreichen
+chancenreicher
+chancenreichere
+chancenreicherem
+chancenreicheren
+chancenreicherer
+chancenreicheres
+chancenreiches
+chancenreichste
+chancenreichstem
+chancenreichsten
+chancenreichster
+chancenreichstes
+chaotisch
+chaotische
+chaotischem
+chaotischen
+chaotischer
+chaotischere
+chaotischerem
+chaotischeren
+chaotischerer
+chaotischeres
+chaotisches
+chaotischste
+chaotischstem
+chaotischsten
+chaotischster
+chaotischstes
+charakterbildend
+charakterbildende
+charakterbildendem
+charakterbildenden
+charakterbildender
+charakterbildendes
+charakterfest
+charakterfeste
+charakterfestem
+charakterfesten
+charakterfester
+charakterfestes
+charakterisiere
+charakterisieren
+charakterisierend
+charakterisierende
+charakterisierendem
+charakterisierenden
+charakterisierender
+charakterisierendes
+charakterisierst
+charakterisiert
+charakterisierte
+charakterisiertem
+charakterisierten
+charakterisierter
+charakterisiertes
+charakterisiertest
+charakterisiertet
+charakteristisch
+charakteristische
+charakteristischem
+charakteristischen
+charakteristischer
+charakteristischere
+charakteristischerem
+charakteristischeren
+charakteristischerer
+charakteristischeres
+charakteristisches
+charakteristischste
+charakteristischstem
+charakteristischsten
+charakteristischster
+charakteristischstes
+charakterlich
+charakterliche
+charakterlichem
+charakterlichen
+charakterlicher
+charakterliches
+charakterlos
+charakterlose
+charakterlosem
+charakterlosen
+charakterloser
+charakterlosere
+charakterloserem
+charakterloseren
+charakterloserer
+charakterloseres
+charakterloses
+charakterloseste
+charakterlosestem
+charakterlosesten
+charakterlosester
+charakterlosestes
+charakterstark
+charakterstarke
+charakterstarkem
+charakterstarken
+charakterstarker
+charakterstarkes
+charaktervoll
+charaktervolle
+charaktervollem
+charaktervollen
+charaktervoller
+charaktervolles
+chargiere
+chargieren
+chargierend
+chargierende
+chargierendem
+chargierenden
+chargierender
+chargierendes
+chargierst
+chargiert
+chargierte
+chargiertem
+chargierten
+chargierter
+chargiertes
+chargiertest
+chargiertet
+charismatisch
+charismatische
+charismatischem
+charismatischen
+charismatischer
+charismatischere
+charismatischerem
+charismatischeren
+charismatischerer
+charismatischeres
+charismatisches
+charismatischste
+charismatischstem
+charismatischsten
+charismatischster
+charismatischstes
+charmant
+charmante
+charmantem
+charmanten
+charmanter
+charmantere
+charmanterem
+charmanteren
+charmanterer
+charmanteres
+charmantes
+charmanteste
+charmantestem
+charmantesten
+charmantester
+charmantestes
+chartere
+chartern
+charternd
+charternde
+charterndem
+charternden
+charternder
+charterndes
+charterst
+chartert
+charterte
+charterten
+chartertest
+chartertet
+chartre
+chate
+chaten
+chatend
+chatende
+chatendem
+chatenden
+chatender
+chatendes
+chatest
+chatet
+chatete
+chateten
+chatetest
+chatetet
+chauffiere
+chauffieren
+chauffierend
+chauffierende
+chauffierendem
+chauffierenden
+chauffierender
+chauffierendes
+chauffierst
+chauffiert
+chauffierte
+chauffiertem
+chauffierten
+chauffierter
+chauffiertes
+chauffiertest
+chauffiertet
+chauvinistisch
+chauvinistische
+chauvinistischem
+chauvinistischen
+chauvinistischer
+chauvinistischere
+chauvinistischerem
+chauvinistischeren
+chauvinistischerer
+chauvinistischeres
+chauvinistisches
+chauvinistischste
+chauvinistischstem
+chauvinistischsten
+chauvinistischster
+chauvinistischstes
+chemisch
+chemische
+chemischem
+chemischen
+chemischer
+chemisches
+chi
+chic
+chice
+chicem
+chicen
+chicer
+chicere
+chicerem
+chiceren
+chicerer
+chiceres
+chices
+chicste
+chicstem
+chicsten
+chicster
+chicstes
+chiffrier
+chiffriere
+chiffrieren
+chiffrierend
+chiffrierende
+chiffrierendem
+chiffrierenden
+chiffrierender
+chiffrierendes
+chiffrierst
+chiffriert
+chiffrierte
+chiffriertem
+chiffrierten
+chiffrierter
+chiffriertes
+chiffriertest
+chiffriertet
+chinesisch
+chinesische
+chinesischem
+chinesischen
+chinesischer
+chinesisches
+chirurgisch
+chirurgische
+chirurgischem
+chirurgischen
+chirurgischer
+chirurgisches
+cholerisch
+cholerische
+cholerischem
+cholerischen
+cholerischer
+cholerischere
+cholerischerem
+cholerischeren
+cholerischerer
+cholerischeres
+cholerisches
+cholerischste
+cholerischstem
+cholerischsten
+cholerischster
+cholerischstes
+choreographiere
+choreographieren
+choreographierend
+choreographierende
+choreographierendem
+choreographierenden
+choreographierender
+choreographierendes
+choreographierst
+choreographiert
+choreographierte
+choreographiertem
+choreographierten
+choreographierter
+choreographiertes
+choreographiertest
+choreographiertet
+choreographisch
+choreographische
+choreographischem
+choreographischen
+choreographischer
+choreographisches
+christlich
+christliche
+christlichem
+christlichen
+christlicher
+christlichere
+christlicherem
+christlicheren
+christlicherer
+christlicheres
+christliches
+christlichste
+christlichstem
+christlichsten
+christlichster
+christlichstes
+chromatisch
+chromatische
+chromatischem
+chromatischen
+chromatischer
+chromatisches
+chronisch
+chronische
+chronischem
+chronischen
+chronischer
+chronisches
+chronologisch
+chronologische
+chronologischem
+chronologischen
+chronologischer
+chronologisches
+cineastisch
+cineastische
+cineastischem
+cineastischen
+cineastischer
+cineastisches
+circa
+clausus
+clever
+clevere
+cleverem
+cleveren
+cleverer
+cleveres
+clippe
+clippen
+clippst
+clippt
+cm
+coate
+coaten
+coatend
+coatende
+coatendem
+coatenden
+coatender
+coatendes
+coatest
+coatet
+coatete
+coateten
+coatetest
+coatetet
+codierbar
+codierbare
+codierbarem
+codierbaren
+codierbarer
+codierbares
+codiere
+codieren
+codierend
+codierende
+codierendem
+codierenden
+codierender
+codierendes
+codierst
+codiert
+codierte
+codiertem
+codierten
+codierter
+codiertes
+codiertest
+codiertet
+codifiziere
+codifizieren
+codifizierend
+codifizierende
+codifizierendem
+codifizierenden
+codifizierender
+codifizierendes
+codifizierst
+codifiziert
+codifizierte
+codifiziertem
+codifizierten
+codifizierter
+codifiziertes
+codifiziertest
+codifiziertet
+compiliere
+compilieren
+compilierend
+compilierende
+compilierendem
+compilierenden
+compilierender
+compilierendes
+compilierst
+compiliert
+compilierte
+compiliertem
+compilierten
+compilierter
+compiliertes
+compiliertest
+compiliertet
+computere
+computergesteuert
+computergesteuerte
+computergesteuertem
+computergesteuerten
+computergesteuerter
+computergesteuertes
+computergestützt
+computergestützte
+computergestütztem
+computergestützten
+computergestützter
+computergestütztes
+computerisiert
+computerisierte
+computerisiertem
+computerisierten
+computerisierter
+computerisiertes
+computern
+computernd
+computernde
+computerndem
+computernden
+computernder
+computerndes
+computerst
+computert
+computerte
+computerten
+computertest
+computertet
+computre
+cremefarbig
+cremefarbige
+cremefarbigem
+cremefarbigen
+cremefarbiger
+cremefarbiges
+cum
+da
+dabei
+dabeibleibe
+dabeibleiben
+dabeibleibend
+dabeibleibende
+dabeibleibendem
+dabeibleibenden
+dabeibleibender
+dabeibleibendes
+dabeibleibst
+dabeibleibt
+dabeigeblieben
+dabeigebliebene
+dabeigebliebenem
+dabeigebliebenen
+dabeigebliebener
+dabeigebliebenes
+dabeigestanden
+dabeigestandene
+dabeigestandenem
+dabeigestandenen
+dabeigestandener
+dabeigestandenes
+dabeistand
+dabeistanden
+dabeistandest
+dabeistandet
+dabeistandst
+dabeistehe
+dabeistehen
+dabeistehend
+dabeistehende
+dabeistehendem
+dabeistehenden
+dabeistehender
+dabeistehendes
+dabeistehst
+dabeisteht
+dableibe
+dableiben
+dableibend
+dableibende
+dableibendem
+dableibenden
+dableibender
+dableibendes
+dableibst
+dableibt
+dachte
+dachten
+dachtest
+dachtet
+dackelte
+dadurch
+dafür
+dafürgehalten
+dafürgehaltene
+dafürgehaltenem
+dafürgehaltenen
+dafürgehaltener
+dafürgehaltenes
+dafürhalte
+dafürhalten
+dafürhaltend
+dafürhaltende
+dafürhaltendem
+dafürhaltenden
+dafürhaltender
+dafürhaltendes
+dafürhaltet
+dageblieben
+dagebliebene
+dagebliebenem
+dagebliebenen
+dagebliebener
+dagebliebenes
+dagegen
+dagegengestand
+dagegengestanden
+dagegengestandest
+dagegengestandet
+dagegengestandst
+dagestanden
+dagestandene
+dagestandenem
+dagestandenen
+dagestandener
+dagestandenes
+daheim
+daher
+dahergekommen
+dahergekommene
+dahergekommenem
+dahergekommenen
+dahergekommener
+dahergekommenes
+daherkam
+daherkamen
+daherkamst
+daherkamt
+daherkomme
+daherkommen
+daherkommst
+daherkommt
+daherschleiche
+daherschleichen
+daherschleichend
+daherschleichende
+daherschleichendem
+daherschleichenden
+daherschleichender
+daherschleichendes
+daherschleichst
+daherschleicht
+dahertrieb
+dahertrieben
+dahertriebst
+dahertriebt
+dahin
+dahingegangen
+dahingegangene
+dahingegangenem
+dahingegangenen
+dahingegangener
+dahingegangenes
+dahingehe
+dahingehen
+dahingehend
+dahingehende
+dahingehendem
+dahingehenden
+dahingehender
+dahingehendes
+dahingehst
+dahingeht
+dahingeschlichen
+dahingestellt
+dahingestellte
+dahingestelltem
+dahingestellten
+dahingestellter
+dahingestelltes
+dahingleite
+dahingleiten
+dahingleitend
+dahingleitende
+dahingleitendem
+dahingleitenden
+dahingleitender
+dahingleitendes
+dahingleitest
+dahingleitet
+dahingleitete
+dahingleiteten
+dahingleitetest
+dahingleitetet
+dahinraffe
+dahinraffen
+dahinraffend
+dahinraffende
+dahinraffendem
+dahinraffenden
+dahinraffender
+dahinraffendes
+dahinraffst
+dahinrafft
+dahinraffte
+dahinrafften
+dahinrafftest
+dahinrafftet
+dahinschleppe
+dahinschleppen
+dahinschleppend
+dahinschleppende
+dahinschleppendem
+dahinschleppenden
+dahinschleppender
+dahinschleppendes
+dahinschleppst
+dahinschleppt
+dahinschleppte
+dahinschleppten
+dahinschlepptest
+dahinschlepptet
+dahinstelze
+dahinstelzen
+dahinstelzend
+dahinstelzende
+dahinstelzendem
+dahinstelzenden
+dahinstelzender
+dahinstelzendes
+dahinstelzest
+dahinstelzt
+dahinstelzte
+dahinstelzten
+dahinstelztest
+dahinstelztet
+dahinsterbe
+dahinsterben
+dahinsterbend
+dahinsterbende
+dahinsterbendem
+dahinsterbenden
+dahinsterbender
+dahinsterbendes
+dahinsterbt
+dahinten
+dahinter
+dahintreibe
+dahintreiben
+dahintreibend
+dahintreibende
+dahintreibendem
+dahintreibenden
+dahintreibender
+dahintreibendes
+dahintreibst
+dahintreibt
+dahinvegetiere
+dahinvegetieren
+dahinvegetierend
+dahinvegetierende
+dahinvegetierendem
+dahinvegetierenden
+dahinvegetierender
+dahinvegetierendes
+dahinvegetierst
+dahinvegetiert
+dahinvegetierte
+dahinvegetierten
+dahinvegetiertest
+dahinvegetiertet
+dahinwelke
+dahinwelken
+dahinwelkend
+dahinwelkende
+dahinwelkendem
+dahinwelkenden
+dahinwelkender
+dahinwelkendes
+dahinwelkst
+dahinwelkt
+dahinwelkte
+dahinwelkten
+dahinwelktest
+dahinwelktet
+dahinziehe
+dahinziehen
+dahinziehend
+dahinziehende
+dahinziehendem
+dahinziehenden
+dahinziehender
+dahinziehendes
+dahinziehst
+dahinzieht
+daliege
+daliegen
+daliegend
+daliegende
+daliegendem
+daliegenden
+daliegender
+daliegendes
+daliegst
+daliegt
+damalig
+damalige
+damaligem
+damaligen
+damaliger
+damaliges
+damals
+damenhaft
+damenhafte
+damenhaftem
+damenhaften
+damenhafter
+damenhaftes
+damit
+dampfe
+dampfen
+dampfend
+dampfende
+dampfendem
+dampfenden
+dampfender
+dampfendes
+dampfst
+dampft
+dampfte
+dampften
+dampftest
+dampftet
+danach
+daneben
+danebenbenehme
+danebenbenehmen
+danebenbenehmend
+danebenbenehmende
+danebenbenehmendem
+danebenbenehmenden
+danebenbenehmender
+danebenbenehmendes
+danebenbenehmt
+danebenbenommen
+danebengegangen
+danebengegangene
+danebengegangenem
+danebengegangenen
+danebengegangener
+danebengegangenes
+danebenliege
+danebenliegen
+danebenliegend
+danebenliegende
+danebenliegendem
+danebenliegenden
+danebenliegender
+danebenliegendes
+danebenliegst
+danebenliegt
+danieder
+dank
+dankbar
+dankbare
+dankbarem
+dankbaren
+dankbarer
+dankbarere
+dankbarerem
+dankbareren
+dankbarerer
+dankbareres
+dankbares
+dankbarste
+dankbarstem
+dankbarsten
+dankbarster
+dankbarstes
+danke
+danken
+dankend
+dankende
+dankendem
+dankenden
+dankender
+dankendes
+dankenswert
+dankenswerte
+dankenswertem
+dankenswerten
+dankenswerter
+dankenswertes
+dankst
+dankt
+dankte
+dankten
+danktest
+danktet
+dann
+dannen
+dar
+daran
+darangegangen
+darangegangene
+darangegangenem
+darangegangenen
+darangegangener
+darangegangenes
+darangehe
+darangehen
+darangehend
+darangehende
+darangehendem
+darangehenden
+darangehender
+darangehendes
+darangehst
+darangeht
+darangesetzt
+daranging
+darangingen
+darangingst
+darangingt
+daranmache
+daranmachen
+daranmachend
+daranmachende
+daranmachendem
+daranmachenden
+daranmachender
+daranmachendes
+daranmachst
+daranmacht
+daranmachte
+daranmachten
+daranmachtest
+daranmachtet
+daransetze
+daransetzen
+daransetzest
+daransetzt
+daransetzte
+daransetzten
+daransetztest
+daransetztet
+darauf
+daraufgelegt
+daraufgelegte
+daraufgelegtem
+daraufgelegten
+daraufgelegter
+daraufgelegtes
+daraufhin
+daraufqqlosgehe
+daraufqqlosgehen
+daraufqqlosgehend
+daraufqqlosgehende
+daraufqqlosgehendem
+daraufqqlosgehenden
+daraufqqlosgehender
+daraufqqlosgehendes
+daraufqqlosgehst
+daraufqqlosgeht
+daraufqqlosging
+daraufqqlosginge
+daraufqqlosgingen
+daraufqqlosgingst
+daraufqqlosgingt
+daraus
+darbiete
+darbieten
+darbietend
+darbietende
+darbietendem
+darbietenden
+darbietender
+darbietendes
+darbietest
+darbietet
+darbot
+darboten
+darbotest
+darbotet
+darbotst
+darbringe
+darbringen
+darbringend
+darbringende
+darbringendem
+darbringenden
+darbringender
+darbringendes
+darbringst
+darbringt
+darein
+darf
+darfst
+dargeboten
+dargebotene
+dargebotenem
+dargebotenen
+dargebotener
+dargebotenes
+dargelegt
+dargelegte
+dargelegtem
+dargelegten
+dargelegter
+dargelegtes
+dargereicht
+dargereichte
+dargereichtem
+dargereichten
+dargereichter
+dargereichtes
+dargestellt
+dargestellte
+dargestelltem
+dargestellten
+dargestellter
+dargestelltes
+dargetan
+darin
+darinnen
+darlege
+darlegen
+darlegend
+darlegende
+darlegendem
+darlegenden
+darlegender
+darlegendes
+darlegst
+darlegt
+darlegte
+darlegten
+darlegtest
+darlegtet
+darreiche
+darreichen
+darreichend
+darreichende
+darreichendem
+darreichenden
+darreichender
+darreichendes
+darreichst
+darreicht
+darreichte
+darreichten
+darreichtest
+darreichtet
+darstellbar
+darstellbare
+darstellbarem
+darstellbaren
+darstellbarer
+darstellbares
+darstelle
+darstellen
+darstellend
+darstellende
+darstellendem
+darstellenden
+darstellender
+darstellendes
+darstellerisch
+darstellerische
+darstellerischem
+darstellerischen
+darstellerischer
+darstellerisches
+darstellst
+darstellt
+darstellte
+darstellten
+darstelltest
+darstelltet
+darstellungsbedingt
+darstellungsbedingte
+darstellungsbedingtem
+darstellungsbedingten
+darstellungsbedingter
+darstellungsbedingtes
+darum
+darunter
+darzulegen
+darzulegend
+darzulegende
+darzulegendem
+darzulegenden
+darzulegender
+darzulegendes
+darzustellen
+darzustellend
+darzustellende
+darzustellendem
+darzustellenden
+darzustellender
+darzustellendes
+darüber
+darüberhinaus
+das
+dasaß
+dasaßen
+dasaßest
+dasaßt
+dasitze
+dasitzen
+dasitzend
+dasitzende
+dasitzendem
+dasitzenden
+dasitzender
+dasitzendes
+dasitzest
+dasitzt
+dasjenige
+dass
+dasselbe
+dasselbige
+dastand
+dastanden
+dastandest
+dastandet
+dastandst
+dastehe
+dastehen
+dastehend
+dastehende
+dastehendem
+dastehenden
+dastehender
+dastehendes
+dastehst
+dasteht
+datentechnisch
+datentechnische
+datentechnischem
+datentechnischen
+datentechnischer
+datentechnisches
+datierbar
+datierbare
+datierbarem
+datierbaren
+datierbarer
+datierbares
+datiere
+datieren
+datierend
+datierende
+datierendem
+datierenden
+datierender
+datierendes
+datierst
+datiert
+datierte
+datiertem
+datierten
+datierter
+datiertes
+datiertest
+datiertet
+dato
+dauere
+dauergeleuchtet
+dauerhaft
+dauerhafte
+dauerhaftem
+dauerhaften
+dauerhafter
+dauerhaftere
+dauerhafterem
+dauerhafteren
+dauerhafterer
+dauerhafteres
+dauerhaftes
+dauerhafteste
+dauerhaftestem
+dauerhaftesten
+dauerhaftester
+dauerhaftestes
+dauern
+dauernd
+dauernde
+dauerndem
+dauernden
+dauernder
+dauerndes
+dauerst
+dauert
+dauerte
+dauerten
+dauertest
+dauertet
+daunenweich
+daunenweiche
+daunenweichem
+daunenweichen
+daunenweicher
+daunenweiches
+daure
+davon
+davonfahre
+davonfahren
+davonfahrend
+davonfahrende
+davonfahrendem
+davonfahrenden
+davonfahrender
+davonfahrendes
+davonfahrt
+davonfliege
+davonfliegen
+davonfliegend
+davonfliegende
+davonfliegendem
+davonfliegenden
+davonfliegender
+davonfliegendes
+davonfliegst
+davonfliegt
+davonfuhr
+davonfuhren
+davonfuhrst
+davonfuhrt
+davongefahren
+davongefahrene
+davongefahrenem
+davongefahrenen
+davongefahrener
+davongefahrenes
+davongekommen
+davongekommene
+davongekommenem
+davongekommenen
+davongekommener
+davongekommenes
+davongelaufen
+davongelaufene
+davongelaufenem
+davongelaufenen
+davongelaufener
+davongelaufenes
+davongemacht
+davongemachte
+davongemachtem
+davongemachten
+davongemachter
+davongemachtes
+davongeschlichen
+davongeschlichene
+davongeschlichenem
+davongeschlichenen
+davongeschlichener
+davongeschlichenes
+davongetragen
+davongetragene
+davongetragenem
+davongetragenen
+davongetragener
+davongetragenes
+davonging
+davongingen
+davongingst
+davongingt
+davonkomme
+davonkommen
+davonkommend
+davonkommende
+davonkommendem
+davonkommenden
+davonkommender
+davonkommendes
+davonkommst
+davonkommt
+davonlaufe
+davonlaufen
+davonlaufend
+davonlaufende
+davonlaufendem
+davonlaufenden
+davonlaufender
+davonlaufendes
+davonlauft
+davonmache
+davonmachen
+davonmachend
+davonmachende
+davonmachendem
+davonmachenden
+davonmachender
+davonmachendes
+davonmachst
+davonmacht
+davonmachte
+davonmachten
+davonmachtest
+davonmachtet
+davonrannte
+davonrannten
+davonranntest
+davonranntet
+davonrase
+davonrasen
+davonrasend
+davonrasende
+davonrasendem
+davonrasenden
+davonrasender
+davonrasendes
+davonrasest
+davonrast
+davonraste
+davonrasten
+davonrastest
+davonrastet
+davonschleiche
+davonschleichen
+davonschleichend
+davonschleichende
+davonschleichendem
+davonschleichenden
+davonschleichender
+davonschleichendes
+davonschleichst
+davonschleicht
+davonstob
+davonstoben
+davonstobst
+davonstobt
+davontrage
+davontragen
+davontragend
+davontragende
+davontragendem
+davontragenden
+davontragender
+davontragendes
+davontragt
+davontrug
+davontrugen
+davontrugst
+davontrugt
+davonzustehlen
+davonzutragen
+davor
+dazu
+dazuführe
+dazuführen
+dazuführend
+dazuführende
+dazuführendem
+dazuführenden
+dazuführender
+dazuführendes
+dazuführst
+dazuführt
+dazugebe
+dazugeben
+dazugebend
+dazugebende
+dazugebendem
+dazugebenden
+dazugebender
+dazugebendes
+dazugebt
+dazugehöre
+dazugehören
+dazugehörend
+dazugehörende
+dazugehörendem
+dazugehörenden
+dazugehörender
+dazugehörendes
+dazugehörig
+dazugehörige
+dazugehörigem
+dazugehörigen
+dazugehöriger
+dazugehöriges
+dazugehörst
+dazugehört
+dazugehörte
+dazugehörten
+dazugehörtest
+dazugehörtet
+dazugekommen
+dazugekommene
+dazugekommenem
+dazugekommenen
+dazugekommener
+dazugekommenes
+dazugelegt
+dazugelegte
+dazugelegtem
+dazugelegten
+dazugelegter
+dazugelegtes
+dazugelernt
+dazugelernte
+dazugelerntem
+dazugelernten
+dazugelernter
+dazugelerntes
+dazugesagt
+dazugesagte
+dazugesagtem
+dazugesagten
+dazugesagter
+dazugesagtes
+dazugeschaltet
+dazugeschaltete
+dazugeschaltetem
+dazugeschalteten
+dazugeschalteter
+dazugeschaltetes
+dazugetan
+dazugetane
+dazugetanem
+dazugetanen
+dazugetaner
+dazugetanes
+dazugewonnen
+dazugewonnene
+dazugewonnenem
+dazugewonnenen
+dazugewonnener
+dazugewonnenes
+dazuhaben
+dazukaufe
+dazukaufen
+dazukaufend
+dazukaufende
+dazukaufendem
+dazukaufenden
+dazukaufender
+dazukaufendes
+dazukaufst
+dazukauft
+dazukaufte
+dazukauften
+dazukauftest
+dazukauftet
+dazukomme
+dazukommen
+dazukommend
+dazukommende
+dazukommendem
+dazukommenden
+dazukommender
+dazukommendes
+dazukommst
+dazukommt
+dazulege
+dazulegen
+dazulegend
+dazulegende
+dazulegendem
+dazulegenden
+dazulegender
+dazulegendes
+dazulegst
+dazulegt
+dazulegte
+dazulegten
+dazulegtest
+dazulegtet
+dazulerne
+dazulernen
+dazulernend
+dazulernende
+dazulernendem
+dazulernenden
+dazulernender
+dazulernendes
+dazulernst
+dazulernt
+dazulernte
+dazulernten
+dazulerntest
+dazulerntet
+dazumal
+dazunimmst
+dazunimmt
+dazurechne
+dazurechnen
+dazurechnend
+dazurechnende
+dazurechnendem
+dazurechnenden
+dazurechnender
+dazurechnendes
+dazurechnest
+dazurechnet
+dazurechnete
+dazurechneten
+dazurechnetest
+dazurechnetet
+dazuschlägst
+dazuschlägt
+dazustehen
+dazutue
+dazutuend
+dazutuende
+dazutuendem
+dazutuenden
+dazutuender
+dazutuendes
+dazutun
+dazutust
+dazutut
+dazuverdiene
+dazuverdienen
+dazuverdienend
+dazuverdienende
+dazuverdienendem
+dazuverdienenden
+dazuverdienender
+dazuverdienendes
+dazuverdienst
+dazuverdient
+dazuverdiente
+dazuverdientem
+dazuverdienten
+dazuverdienter
+dazuverdientes
+dazuverdientest
+dazuverdientet
+dazuzulernen
+dazuzulernend
+dazuzulernende
+dazuzulernendem
+dazuzulernenden
+dazuzulernender
+dazuzulernendes
+dazuzuverdienen
+dazuzuverdienend
+dazuzuverdienende
+dazuzuverdienendem
+dazuzuverdienenden
+dazuzuverdienender
+dazuzuverdienendes
+dazwischen
+dazwischenfahre
+dazwischenfahren
+dazwischenfahrend
+dazwischenfahrende
+dazwischenfahrendem
+dazwischenfahrenden
+dazwischenfahrender
+dazwischenfahrendes
+dazwischenfahrt
+dazwischenfunke
+dazwischenfunken
+dazwischenfunkend
+dazwischenfunkende
+dazwischenfunkendem
+dazwischenfunkenden
+dazwischenfunkender
+dazwischenfunkendes
+dazwischenfunkst
+dazwischenfunkt
+dazwischengefahren
+dazwischengefahrene
+dazwischengefahrenem
+dazwischengefahrenen
+dazwischengefahrener
+dazwischengefahrenes
+dazwischengekommen
+dazwischengekommene
+dazwischengekommenem
+dazwischengekommenen
+dazwischengekommener
+dazwischengekommenes
+dazwischengelegen
+dazwischengelegene
+dazwischengelegenem
+dazwischengelegenen
+dazwischengelegener
+dazwischengelegenes
+dazwischengetreten
+dazwischengetretene
+dazwischengetretenem
+dazwischengetretenen
+dazwischengetretener
+dazwischengetretenes
+dazwischenkomme
+dazwischenkommen
+dazwischenkommend
+dazwischenkommende
+dazwischenkommendem
+dazwischenkommenden
+dazwischenkommender
+dazwischenkommendes
+dazwischenkommst
+dazwischenkommt
+dazwischenliege
+dazwischenliegen
+dazwischenliegend
+dazwischenliegende
+dazwischenliegendem
+dazwischenliegenden
+dazwischenliegender
+dazwischenliegendes
+dazwischenliegst
+dazwischenliegt
+dazwischentrete
+dazwischentreten
+dazwischentretend
+dazwischentretende
+dazwischentretendem
+dazwischentretenden
+dazwischentretender
+dazwischentretendes
+dazwischentretet
+de
+deaktiviere
+deaktivieren
+deaktivierend
+deaktivierende
+deaktivierendem
+deaktivierenden
+deaktivierender
+deaktivierendes
+deaktivierst
+deaktiviert
+deaktivierte
+deaktiviertem
+deaktivierten
+deaktivierter
+deaktiviertes
+deaktiviertest
+deaktiviertet
+deale
+dealen
+dealend
+dealende
+dealendem
+dealenden
+dealender
+dealendes
+dealst
+dealt
+dealte
+dealten
+dealtest
+dealtet
+debattiere
+debattieren
+debattierend
+debattierende
+debattierendem
+debattierenden
+debattierender
+debattierendes
+debattierst
+debattiert
+debattierte
+debattiertem
+debattierten
+debattierter
+debattiertes
+debattiertest
+debattiertet
+debil
+debile
+debilem
+debilen
+debiler
+debiles
+debütierte
+debütierten
+debütiertend
+debütiertende
+debütiertendem
+debütiertenden
+debütiertender
+debütiertendes
+debütiertest
+debütiertet
+debütiertete
+debütiertetem
+debütierteten
+debütierteter
+debütiertetes
+debütiertetest
+debütiertetet
+dechiffriere
+dechiffrieren
+dechiffrierend
+dechiffrierende
+dechiffrierendem
+dechiffrierenden
+dechiffrierender
+dechiffrierendes
+dechiffrierst
+dechiffriert
+dechiffrierte
+dechiffriertem
+dechiffrierten
+dechiffrierter
+dechiffriertes
+dechiffriertest
+dechiffriertet
+decke
+decken
+deckend
+deckende
+deckendem
+deckenden
+deckender
+deckendes
+deckst
+deckt
+deckte
+deckten
+decktest
+decktet
+deckungsgleich
+deckungsgleiche
+deckungsgleichem
+deckungsgleichen
+deckungsgleicher
+deckungsgleiches
+deckungspflichtig
+deckungspflichtige
+deckungspflichtigem
+deckungspflichtigen
+deckungspflichtiger
+deckungspflichtiges
+decodiere
+decodieren
+decodierend
+decodierende
+decodierendem
+decodierenden
+decodierender
+decodierendes
+decodierst
+decodiert
+decodierte
+decodiertem
+decodierten
+decodierter
+decodiertes
+decodiertest
+decodiertet
+decrementiere
+decrementieren
+decrementierend
+decrementierende
+decrementierendem
+decrementierenden
+decrementierender
+decrementierendes
+decrementierst
+decrementiert
+decrementierte
+decrementiertem
+decrementierten
+decrementierter
+decrementiertes
+decrementiertest
+decrementiertet
+dediziert
+dedizierte
+dediziertem
+dedizierten
+dedizierter
+dediziertes
+deduktiv
+deduktive
+deduktivem
+deduktiven
+deduktiver
+deduktives
+deduziere
+deduzieren
+deduzierend
+deduzierende
+deduzierendem
+deduzierenden
+deduzierender
+deduzierendes
+deduzierst
+deduziert
+deduzierte
+deduziertem
+deduzierten
+deduzierter
+deduziertes
+deduziertest
+deduziertet
+defaultmäßig
+defaultmäßige
+defaultmäßigem
+defaultmäßigen
+defaultmäßiger
+defaultmäßiges
+defekt
+defekte
+defektem
+defekten
+defekter
+defektes
+defensiv
+defensive
+defensivem
+defensiven
+defensiver
+defensives
+definierbar
+definierbare
+definierbarem
+definierbaren
+definierbarer
+definierbares
+definiere
+definieren
+definierend
+definierende
+definierendem
+definierenden
+definierender
+definierendes
+definierst
+definiert
+definierte
+definiertem
+definierten
+definierter
+definiertes
+definiertest
+definiertet
+definit
+definite
+definitem
+definiten
+definiter
+definites
+definitionem
+definitionsgemäß
+definitionsgemäße
+definitionsgemäßem
+definitionsgemäßen
+definitionsgemäßer
+definitionsgemäßes
+definitiv
+definitive
+definitivem
+definitiven
+definitiver
+definitives
+defizitär
+defizitäre
+defizitärem
+defizitären
+defizitärer
+defizitäres
+deflationiere
+deflationieren
+deflationierend
+deflationierende
+deflationierendem
+deflationierenden
+deflationierender
+deflationierendes
+deflationierst
+deflationiert
+deflationierte
+deflationiertem
+deflationierten
+deflationierter
+deflationiertes
+deflationiertest
+deflationiertet
+deflationär
+deflationäre
+deflationärem
+deflationären
+deflationärer
+deflationäres
+deformiert
+deformierte
+deformiertem
+deformierten
+deformierter
+deformiertes
+deftig
+deftige
+deftigem
+deftigen
+deftiger
+deftiges
+degeneriere
+degenerieren
+degenerierend
+degenerierende
+degenerierendem
+degenerierenden
+degenerierender
+degenerierendes
+degenerierst
+degeneriert
+degenerierte
+degeneriertem
+degenerierten
+degenerierter
+degeneriertes
+degeneriertest
+degeneriertet
+degradiere
+degradieren
+degradierend
+degradierende
+degradierendem
+degradierenden
+degradierender
+degradierendes
+degradierst
+degradiert
+degradierte
+degradiertem
+degradierten
+degradierter
+degradiertes
+degradiertest
+degradiertet
+degressiv
+degressive
+degressivem
+degressiven
+degressiver
+degressives
+dehnbar
+dehnbare
+dehnbarem
+dehnbaren
+dehnbarer
+dehnbarere
+dehnbarerem
+dehnbareren
+dehnbarerer
+dehnbareres
+dehnbares
+dehnbarste
+dehnbarstem
+dehnbarsten
+dehnbarster
+dehnbarstes
+dehne
+dehnen
+dehnend
+dehnende
+dehnendem
+dehnenden
+dehnender
+dehnendes
+dehnst
+dehnt
+dehnte
+dehnten
+dehntest
+dehntet
+dein
+deindustrialisiere
+deindustrialisieren
+deindustrialisierend
+deindustrialisierende
+deindustrialisierendem
+deindustrialisierenden
+deindustrialisierender
+deindustrialisierendes
+deindustrialisierst
+deindustrialisiert
+deindustrialisierte
+deindustrialisiertem
+deindustrialisierten
+deindustrialisierter
+deindustrialisiertes
+deindustrialisiertest
+deindustrialisiertet
+deine
+deinem
+deinen
+deiner
+deinerseits
+deines
+deinesgleichen
+deinetwegen
+deinig
+deinige
+deinigem
+deinigen
+deiniger
+deiniges
+dekadent
+dekadente
+dekadentem
+dekadenten
+dekadenter
+dekadentes
+dekadisch
+dekadische
+dekadischem
+dekadischen
+dekadischer
+dekadisches
+deklamatiere
+deklamatieren
+deklamatierend
+deklamatierende
+deklamatierendem
+deklamatierenden
+deklamatierender
+deklamatierendes
+deklamatierst
+deklamatiert
+deklamatierte
+deklamatiertem
+deklamatierten
+deklamatierter
+deklamatiertes
+deklamatiertest
+deklamatiertet
+deklamatorisch
+deklamatorische
+deklamatorischem
+deklamatorischen
+deklamatorischer
+deklamatorisches
+deklamiere
+deklamieren
+deklamierend
+deklamierende
+deklamierendem
+deklamierenden
+deklamierender
+deklamierendes
+deklamierst
+deklamiert
+deklamierte
+deklamiertem
+deklamierten
+deklamierter
+deklamiertes
+deklamiertest
+deklamiertet
+deklarativ
+deklarative
+deklarativem
+deklarativen
+deklarativer
+deklaratives
+deklariere
+deklarieren
+deklarierend
+deklarierende
+deklarierendem
+deklarierenden
+deklarierender
+deklarierendes
+deklarierst
+deklariert
+deklarierte
+deklariertem
+deklarierten
+deklarierter
+deklariertes
+deklariertest
+deklariertet
+deklassiere
+deklassieren
+deklassierend
+deklassierende
+deklassierendem
+deklassierenden
+deklassierender
+deklassierendes
+deklassierst
+deklassiert
+deklassierte
+deklassiertem
+deklassierten
+deklassierter
+deklassiertes
+deklassiertest
+deklassiertet
+deklinierbar
+deklinierbare
+deklinierbarem
+deklinierbaren
+deklinierbarer
+deklinierbares
+dekliniere
+deklinieren
+deklinierend
+deklinierende
+deklinierendem
+deklinierenden
+deklinierender
+deklinierendes
+deklinierst
+dekliniert
+deklinierte
+dekliniertem
+deklinierten
+deklinierter
+dekliniertes
+dekliniertest
+dekliniertet
+dekodiere
+dekodieren
+dekodierend
+dekodierende
+dekodierendem
+dekodierenden
+dekodierender
+dekodierendes
+dekodierst
+dekodiert
+dekodierte
+dekodiertem
+dekodierten
+dekodierter
+dekodiertes
+dekodiertest
+dekodiertet
+dekorativ
+dekorative
+dekorativem
+dekorativen
+dekorativer
+dekoratives
+dekoriere
+dekorieren
+dekorierend
+dekorierende
+dekorierendem
+dekorierenden
+dekorierender
+dekorierendes
+dekorierst
+dekoriert
+dekorierte
+dekoriertem
+dekorierten
+dekorierter
+dekoriertes
+dekoriertest
+dekoriertet
+dekretiere
+dekretieren
+dekretierend
+dekretierende
+dekretierendem
+dekretierenden
+dekretierender
+dekretierendes
+dekretierst
+dekretiert
+dekretierte
+dekretiertem
+dekretierten
+dekretierter
+dekretiertes
+dekretiertest
+dekretiertet
+delegiere
+delegieren
+delegierend
+delegierende
+delegierendem
+delegierenden
+delegierender
+delegierendes
+delegierst
+delegiert
+delegierte
+delegiertem
+delegierten
+delegierter
+delegiertes
+delegiertest
+delegiertet
+delektiere
+delektieren
+delektierend
+delektierende
+delektierendem
+delektierenden
+delektierender
+delektierendes
+delektierst
+delektiert
+delektierte
+delektierten
+delektiertest
+delektiertet
+delikat
+delikate
+delikatem
+delikaten
+delikater
+delikates
+delischer
+delphinisch
+delphinische
+delphinischem
+delphinischen
+delphinischer
+delphinisches
+delphisches
+delta
+dem
+demagogisch
+demagogische
+demagogischem
+demagogischen
+demagogischer
+demagogisches
+demaskiere
+demaskieren
+demaskierend
+demaskierende
+demaskierendem
+demaskierenden
+demaskierender
+demaskierendes
+demaskierst
+demaskiert
+demaskierte
+demaskiertem
+demaskierten
+demaskierter
+demaskiertes
+demaskiertest
+demaskiertet
+dementiere
+dementieren
+dementierend
+dementierende
+dementierendem
+dementierenden
+dementierender
+dementierendes
+dementierst
+dementiert
+dementierte
+dementiertem
+dementierten
+dementierter
+dementiertes
+dementiertest
+dementiertet
+dementsprechend
+dementsprechende
+dementsprechendem
+dementsprechenden
+dementsprechender
+dementsprechendes
+demgegenüber
+demgemäß
+demjenigen
+demnach
+demnächst
+demobilisiere
+demobilisieren
+demobilisierend
+demobilisierende
+demobilisierendem
+demobilisierenden
+demobilisierender
+demobilisierendes
+demobilisierst
+demobilisiert
+demobilisierte
+demobilisiertem
+demobilisierten
+demobilisierter
+demobilisiertes
+demobilisiertest
+demobilisiertet
+demografisch
+demografische
+demografischem
+demografischen
+demografischer
+demografisches
+demographisch
+demographische
+demographischem
+demographischen
+demographischer
+demographisches
+demokratisch
+demokratische
+demokratischem
+demokratischen
+demokratischer
+demokratisches
+demokratisiere
+demokratisieren
+demokratisierend
+demokratisierende
+demokratisierendem
+demokratisierenden
+demokratisierender
+demokratisierendes
+demokratisierst
+demokratisiert
+demokratisierte
+demokratisiertem
+demokratisierten
+demokratisierter
+demokratisiertes
+demokratisiertest
+demokratisiertet
+demoliere
+demolieren
+demolierend
+demolierende
+demolierendem
+demolierenden
+demolierender
+demolierendes
+demolierst
+demoliert
+demolierte
+demoliertem
+demolierten
+demolierter
+demoliertes
+demoliertest
+demoliertet
+demonstrativ
+demonstrative
+demonstrativem
+demonstrativen
+demonstrativer
+demonstratives
+demonstriere
+demonstrieren
+demonstrierend
+demonstrierende
+demonstrierendem
+demonstrierenden
+demonstrierender
+demonstrierendes
+demonstrierst
+demonstriert
+demonstrierte
+demonstriertem
+demonstrierten
+demonstrierter
+demonstriertes
+demonstriertest
+demonstriertet
+demontiere
+demontieren
+demontierend
+demontierende
+demontierendem
+demontierenden
+demontierender
+demontierendes
+demontierst
+demontiert
+demontierte
+demontiertem
+demontierten
+demontierter
+demontiertes
+demontiertest
+demontiertet
+demoralisiere
+demoralisieren
+demoralisierend
+demoralisierende
+demoralisierendem
+demoralisierenden
+demoralisierender
+demoralisierendes
+demoralisierst
+demoralisiert
+demoralisierte
+demoralisiertem
+demoralisierten
+demoralisierter
+demoralisiertes
+demoralisiertest
+demoralisiertet
+demoskopisch
+demoskopische
+demoskopischem
+demoskopischen
+demoskopischer
+demoskopisches
+demselben
+demzufolge
+demütig
+demütige
+demütigem
+demütigen
+demütigend
+demütigende
+demütigendem
+demütigenden
+demütigender
+demütigendes
+demütiger
+demütiges
+demütigst
+demütigt
+demütigte
+demütigten
+demütigtest
+demütigtet
+den
+denen
+denjenigen
+denkbar
+denkbare
+denkbarem
+denkbaren
+denkbarer
+denkbares
+denke
+denken
+denkend
+denkende
+denkendem
+denkenden
+denkender
+denkendes
+denkfaul
+denkfaule
+denkfaulem
+denkfaulen
+denkfauler
+denkfaules
+denkfähig
+denkfähige
+denkfähigem
+denkfähigen
+denkfähiger
+denkfähiges
+denkst
+denkt
+denkwürdig
+denkwürdige
+denkwürdigem
+denkwürdigen
+denkwürdiger
+denkwürdiges
+denkähnliche
+denn
+dennoch
+denominiere
+denominieren
+denominierend
+denominierende
+denominierendem
+denominierenden
+denominierender
+denominierendes
+denominierst
+denominiert
+denominierte
+denominiertem
+denominierten
+denominierter
+denominiertes
+denominiertest
+denominiertet
+denotationell
+denotationelle
+denotationellem
+denotationellen
+denotationeller
+denotationelles
+denselben
+denunziere
+denunzieren
+denunzierend
+denunzierende
+denunzierendem
+denunzierenden
+denunzierender
+denunzierendes
+denunzierst
+denunziert
+denunzierte
+denunziertem
+denunzierten
+denunzierter
+denunziertes
+denunziertest
+denunziertet
+deplatziere
+deplatzieren
+deplatzierend
+deplatzierende
+deplatzierendem
+deplatzierenden
+deplatzierender
+deplatzierendes
+deplatzierst
+deplatziert
+deplatzierte
+deplatziertem
+deplatzierten
+deplatzierter
+deplatziertes
+deplatziertest
+deplatziertet
+deponiere
+deponieren
+deponierend
+deponierende
+deponierendem
+deponierenden
+deponierender
+deponierendes
+deponierst
+deponiert
+deponierte
+deponiertem
+deponierten
+deponierter
+deponiertes
+deponiertest
+deponiertet
+deportiere
+deportieren
+deportierst
+deportiert
+deportierte
+deportiertem
+deportierten
+deportierter
+deportiertes
+deportiertest
+deportiertet
+deppere
+deppern
+deppernd
+deppernde
+depperndem
+deppernden
+deppernder
+depperndes
+depperst
+deppert
+depperte
+depperten
+deppertest
+deppertet
+deppre
+depressiv
+depressive
+depressivem
+depressiven
+depressiver
+depressives
+deprimiere
+deprimieren
+deprimierend
+deprimierende
+deprimierendem
+deprimierenden
+deprimierender
+deprimierendes
+deprimierst
+deprimiert
+deprimierte
+deprimiertem
+deprimierten
+deprimierter
+deprimiertes
+deprimiertest
+deprimiertet
+dept
+deputierte
+deputierten
+deputiertend
+deputiertende
+deputiertendem
+deputiertenden
+deputiertender
+deputiertendes
+deputiertest
+deputiertet
+deputiertete
+deputiertetem
+deputierteten
+deputierteter
+deputiertetes
+deputiertetest
+deputiertetet
+der
+derart
+derartig
+derartige
+derartigem
+derartigen
+derartiger
+derartiges
+derb
+derbe
+derbem
+derben
+derber
+derbes
+dereferenzierbar
+dereferenzierbare
+dereferenzierbarem
+dereferenzierbaren
+dereferenzierbarer
+dereferenzierbares
+dereferenziere
+dereferenzieren
+dereferenzierend
+dereferenzierende
+dereferenzierendem
+dereferenzierenden
+dereferenzierender
+dereferenzierendes
+dereferenzierst
+dereferenziert
+dereferenzierte
+dereferenziertem
+dereferenzierten
+dereferenzierter
+dereferenziertes
+dereferenziertest
+dereferenziertet
+dereinst
+dereinstig
+dereinstige
+dereinstigem
+dereinstigen
+dereinstiger
+dereinstiges
+deren
+derentwegen
+derentwillen
+derer
+dergestalt
+dergleichen
+derjenige
+derjenigen
+derlei
+dermaßen
+derselbe
+derselben
+derselbige
+derselbigen
+derweil
+derzeit
+derzeitig
+derzeitige
+derzeitigem
+derzeitigen
+derzeitiger
+derzeitiges
+des
+desertiere
+desertieren
+desertierend
+desertierende
+desertierendem
+desertierenden
+desertierender
+desertierendes
+desertierst
+desertiert
+desertierte
+desertiertem
+desertierten
+desertierter
+desertiertes
+desertiertest
+desertiertet
+desgleichen
+deshalb
+desinfiziere
+desinfizieren
+desinfizierend
+desinfizierende
+desinfizierendem
+desinfizierenden
+desinfizierender
+desinfizierendes
+desinfizierst
+desinfiziert
+desinfizierte
+desinfiziertem
+desinfizierten
+desinfizierter
+desinfiziertes
+desinfiziertest
+desinfiziertet
+desinteressiert
+desinteressierte
+desinteressiertem
+desinteressierten
+desinteressierter
+desinteressiertere
+desinteressierterem
+desinteressierteren
+desinteressierterer
+desinteressierteres
+desinteressiertes
+desinteressierteste
+desinteressiertestem
+desinteressiertesten
+desinteressiertester
+desinteressiertestes
+desjenigen
+deskriptiv
+deskriptive
+deskriptivem
+deskriptiven
+deskriptiver
+deskriptives
+despotisch
+despotische
+despotischem
+despotischen
+despotischer
+despotisches
+desselben
+dessen
+destabilisiere
+destabilisieren
+destabilisierend
+destabilisierende
+destabilisierendem
+destabilisierenden
+destabilisierender
+destabilisierendes
+destabilisierst
+destabilisiert
+destabilisierte
+destabilisiertem
+destabilisierten
+destabilisierter
+destabilisiertes
+destabilisiertest
+destabilisiertet
+destilliere
+destillieren
+destillierend
+destillierende
+destillierendem
+destillierenden
+destillierender
+destillierendes
+destillierst
+destilliert
+destillierte
+destilliertem
+destillierten
+destillierter
+destilliertes
+destilliertest
+destilliertet
+desto
+destruktiv
+destruktive
+destruktivem
+destruktiven
+destruktiver
+destruktivere
+destruktiverem
+destruktiveren
+destruktiverer
+destruktiveres
+destruktives
+destruktivste
+destruktivstem
+destruktivsten
+destruktivster
+destruktivstes
+deswegen
+detailliere
+detaillieren
+detaillierend
+detaillierende
+detaillierendem
+detaillierenden
+detaillierender
+detaillierendes
+detaillierst
+detailliert
+detaillierte
+detailliertem
+detaillierten
+detaillierter
+detailliertere
+detaillierterem
+detaillierteren
+detaillierterer
+detaillierteres
+detailliertes
+detailliertest
+detaillierteste
+detailliertestem
+detailliertesten
+detailliertester
+detailliertestes
+detailliertet
+detektierbar
+detektierbare
+detektierbarem
+detektierbaren
+detektierbarer
+detektierbares
+detektiere
+detektieren
+detektierend
+detektierende
+detektierendem
+detektierenden
+detektierender
+detektierendes
+detektierst
+detektiert
+detektierte
+detektiertem
+detektierten
+detektierter
+detektiertes
+detektiertest
+detektiertet
+determiniere
+determinieren
+determinierend
+determinierende
+determinierendem
+determinierenden
+determinierender
+determinierendes
+determinierst
+determiniert
+determinierte
+determiniertem
+determinierten
+determinierter
+determiniertes
+determiniertest
+determiniertet
+deterministisch
+deterministische
+deterministischem
+deterministischen
+deterministischer
+deterministisches
+detoniere
+detonieren
+detonierend
+detonierende
+detonierendem
+detonierenden
+detonierender
+detonierendes
+detonierst
+detoniert
+detonierte
+detoniertem
+detonierten
+detonierter
+detoniertes
+detoniertest
+detoniertet
+deute
+deuten
+deutend
+deutende
+deutendem
+deutenden
+deutender
+deutendes
+deutest
+deutet
+deutete
+deuteten
+deutetest
+deutetet
+deutlich
+deutliche
+deutlichem
+deutlichen
+deutlicher
+deutlichere
+deutlicherem
+deutlicheren
+deutlicherer
+deutlicheres
+deutliches
+deutlichste
+deutlichstem
+deutlichsten
+deutlichster
+deutlichstes
+deutsch
+deutsche
+deutschem
+deutschen
+deutscher
+deutschere
+deutscherem
+deutscheren
+deutscherer
+deutscheres
+deutsches
+deutscheste
+deutschestem
+deutschesten
+deutschester
+deutschestes
+devot
+devote
+devotem
+devoten
+devoter
+devotere
+devoterem
+devoteren
+devoterer
+devoteres
+devotes
+devoteste
+devotestem
+devotesten
+devotester
+devotestes
+dezent
+dezente
+dezentem
+dezenten
+dezenter
+dezentere
+dezenterem
+dezenteren
+dezenterer
+dezenteres
+dezentes
+dezenteste
+dezentestem
+dezentesten
+dezentester
+dezentestes
+dezentral
+dezentrale
+dezentralem
+dezentralen
+dezentraler
+dezentrales
+dezentralisiere
+dezentralisieren
+dezentralisierend
+dezentralisierende
+dezentralisierendem
+dezentralisierenden
+dezentralisierender
+dezentralisierendes
+dezentralisierst
+dezentralisiert
+dezentralisierte
+dezentralisiertem
+dezentralisierten
+dezentralisierter
+dezentralisiertes
+dezentralisiertest
+dezentralisiertet
+dezimal
+dezimale
+dezimalem
+dezimalen
+dezimaler
+dezimales
+dezimiere
+dezimieren
+dezimierend
+dezimierende
+dezimierendem
+dezimierenden
+dezimierender
+dezimierendes
+dezimierst
+dezimiert
+dezimierte
+dezimiertem
+dezimierten
+dezimierter
+dezimiertes
+dezimiertest
+dezimiertet
+diabetisch
+diabetische
+diabetischem
+diabetischen
+diabetischer
+diabetisches
+diabolisch
+diabolische
+diabolischem
+diabolischen
+diabolischer
+diabolisches
+diagnostisch
+diagnostische
+diagnostischem
+diagnostischen
+diagnostischer
+diagnostisches
+diagnostizierbar
+diagnostizierbare
+diagnostizierbarem
+diagnostizierbaren
+diagnostizierbarer
+diagnostizierbares
+diagnostiziere
+diagnostizieren
+diagnostizierend
+diagnostizierende
+diagnostizierendem
+diagnostizierenden
+diagnostizierender
+diagnostizierendes
+diagnostizierst
+diagnostiziert
+diagnostizierte
+diagnostiziertem
+diagnostizierten
+diagnostizierter
+diagnostiziertes
+diagnostiziertest
+diagnostiziertet
+diagonal
+diagonale
+diagonalem
+diagonalen
+diagonaler
+diagonales
+diagonalisierbar
+diagonalisierbare
+diagonalisierbarem
+diagonalisierbaren
+diagonalisierbarer
+diagonalisierbares
+diagonalisiere
+diagonalisieren
+diagonalisierst
+diagonalisiert
+diagonalisierte
+diagonalisiertem
+diagonalisierten
+diagonalisierter
+diagonalisiertes
+diagonalisiertest
+diagonalisiertet
+diakonisch
+diakonische
+diakonischem
+diakonischen
+diakonischer
+diakonisches
+dialektisch
+dialektische
+dialektischem
+dialektischen
+dialektischer
+dialektisches
+dialektunabhängig
+dialektunabhängige
+dialektunabhängigem
+dialektunabhängigen
+dialektunabhängiger
+dialektunabhängiges
+diametral
+diametrale
+diametralem
+diametralen
+diametraler
+diametrales
+dich
+dicht
+dichte
+dichtem
+dichten
+dichtend
+dichtende
+dichtendem
+dichtenden
+dichtender
+dichtendes
+dichter
+dichtere
+dichterem
+dichteren
+dichterer
+dichteres
+dichterisch
+dichterische
+dichterischem
+dichterischen
+dichterischer
+dichterisches
+dichtes
+dichtest
+dichteste
+dichtestem
+dichtesten
+dichtester
+dichtestes
+dichtet
+dichtete
+dichteten
+dichtetest
+dichtetet
+dick
+dicke
+dickem
+dicken
+dicker
+dickere
+dickerem
+dickeren
+dickerer
+dickeres
+dickes
+dickeste
+dickestem
+dickesten
+dickester
+dickestes
+dickfellig
+dickfellige
+dickfelligem
+dickfelligen
+dickfelliger
+dickfelliges
+dickflüssig
+dickflüssige
+dickflüssigem
+dickflüssigen
+dickflüssiger
+dickflüssiges
+dickköpfig
+dickköpfige
+dickköpfigem
+dickköpfigen
+dickköpfiger
+dickköpfigere
+dickköpfigerem
+dickköpfigeren
+dickköpfigerer
+dickköpfigeres
+dickköpfiges
+dickköpfigste
+dickköpfigstem
+dickköpfigsten
+dickköpfigster
+dickköpfigstes
+dickleibig
+dickleibige
+dickleibigem
+dickleibigen
+dickleibiger
+dickleibiges
+dickste
+dickstem
+dicksten
+dickster
+dickstes
+dickwanstig
+dickwanstige
+dickwanstigem
+dickwanstigen
+dickwanstiger
+dickwanstiges
+didaktisch
+didaktische
+didaktischem
+didaktischen
+didaktischer
+didaktisches
+die
+diebessicher
+diebessichere
+diebessicherem
+diebessicheren
+diebessicherer
+diebessicheres
+diebisch
+diebische
+diebischem
+diebischen
+diebischer
+diebisches
+diejenige
+diejenigen
+diene
+dienen
+dienend
+dienende
+dienendem
+dienenden
+dienender
+dienendes
+dienlich
+dienliche
+dienlichem
+dienlichen
+dienlicher
+dienliches
+dienst
+dienstags
+dienstbar
+dienstbare
+dienstbarem
+dienstbaren
+dienstbarer
+dienstbares
+dienstbegleitend
+dienstbegleitende
+dienstbegleitendem
+dienstbegleitenden
+dienstbegleitender
+dienstbegleitendes
+dienstbereit
+dienstbereite
+dienstbereitem
+dienstbereiten
+dienstbereiter
+dienstbereites
+diensteifrig
+diensteifrige
+diensteifrigem
+diensteifrigen
+diensteifriger
+diensteifrigere
+diensteifrigerem
+diensteifrigeren
+diensteifrigerer
+diensteifrigeres
+diensteifriges
+diensteifrigste
+diensteifrigstem
+diensteifrigsten
+diensteifrigster
+diensteifrigstes
+dienstfrei
+dienstfreie
+dienstfreiem
+dienstfreien
+dienstfreier
+dienstfreies
+dienstlich
+dienstliche
+dienstlichem
+dienstlichen
+dienstlicher
+dienstliches
+diensttauglich
+diensttaugliche
+diensttauglichem
+diensttauglichen
+diensttauglicher
+diensttaugliches
+dienstunfähig
+dienstunfähige
+dienstunfähigem
+dienstunfähigen
+dienstunfähiger
+dienstunfähiges
+dienstuntauglich
+dienstuntaugliche
+dienstuntauglichem
+dienstuntauglichen
+dienstuntauglicher
+dienstuntaugliches
+dienstwillig
+dienstwillige
+dienstwilligem
+dienstwilligen
+dienstwilliger
+dienstwilliges
+dient
+diente
+dienten
+dientest
+dientet
+dies
+diesbezüglich
+diesbezügliche
+diesbezüglichem
+diesbezüglichen
+diesbezüglicher
+diesbezügliches
+diese
+dieselbe
+dieselben
+diesem
+diesen
+dieser
+dieses
+diesig
+diesige
+diesigem
+diesigen
+diesiger
+diesiges
+diesjährig
+diesjährige
+diesjährigem
+diesjährigen
+diesjähriger
+diesjähriges
+diesmal
+diesseitig
+diesseitige
+diesseitigem
+diesseitigen
+diesseitiger
+diesseitiges
+diesseits
+diffamiere
+diffamieren
+diffamierend
+diffamierende
+diffamierendem
+diffamierenden
+diffamierender
+diffamierendes
+diffamierst
+diffamiert
+diffamierte
+diffamiertem
+diffamierten
+diffamierter
+diffamiertes
+diffamiertest
+diffamiertet
+differentiell
+differentielle
+differentiellem
+differentiellen
+differentieller
+differentielles
+differenziell
+differenzielle
+differenziellem
+differenziellen
+differenzieller
+differenzielles
+differenzierbar
+differenzierbare
+differenzierbarem
+differenzierbaren
+differenzierbarer
+differenzierbares
+differenziere
+differenzieren
+differenzierend
+differenzierende
+differenzierendem
+differenzierenden
+differenzierender
+differenzierendes
+differenzierst
+differenziert
+differenzierte
+differenziertem
+differenzierten
+differenzierter
+differenziertere
+differenzierterem
+differenzierteren
+differenzierterer
+differenzierteres
+differenziertes
+differenziertest
+differenzierteste
+differenziertestem
+differenziertesten
+differenziertester
+differenziertestes
+differenziertet
+differiere
+differieren
+differierend
+differierende
+differierendem
+differierenden
+differierender
+differierendes
+differierst
+differiert
+differierte
+differiertem
+differierten
+differierter
+differiertes
+differiertest
+differiertet
+diffizil
+diffizile
+diffizilem
+diffizilen
+diffiziler
+diffiziles
+diffus
+diffuse
+diffusem
+diffusen
+diffuser
+diffusere
+diffuserem
+diffuseren
+diffuserer
+diffuseres
+diffuses
+diffuseste
+diffusestem
+diffusesten
+diffusester
+diffusestes
+digital
+digitale
+digitalem
+digitalen
+digitaler
+digitales
+digitalisiere
+digitalisieren
+digitalisierend
+digitalisierende
+digitalisierendem
+digitalisierenden
+digitalisierender
+digitalisierendes
+digitalisierst
+digitalisiert
+digitalisierte
+digitalisiertem
+digitalisierten
+digitalisierter
+digitalisiertes
+digitalisiertest
+digitalisiertet
+diktatorisch
+diktatorische
+diktatorischem
+diktatorischen
+diktatorischer
+diktatorisches
+diktiere
+diktieren
+diktierend
+diktierende
+diktierendem
+diktierenden
+diktierender
+diktierendes
+diktierst
+diktiert
+diktierte
+diktiertem
+diktierten
+diktierter
+diktiertes
+diktiertest
+diktiertet
+dilettantisch
+dilettantische
+dilettantischem
+dilettantischen
+dilettantischer
+dilettantisches
+dimensioniere
+dimensionieren
+dimensionierend
+dimensionierende
+dimensionierendem
+dimensionierenden
+dimensionierender
+dimensionierendes
+dimensionierst
+dimensioniert
+dimensionierte
+dimensioniertem
+dimensionierten
+dimensionierter
+dimensioniertes
+dimensioniertest
+dimensioniertet
+dimensionslose
+dimensionslosem
+dimensionslosen
+dimensionsloser
+dimensionsloses
+dingfest
+dinglich
+dingliche
+dinglichem
+dinglichen
+dinglicher
+dingliches
+diniere
+dinieren
+dinierend
+dinierende
+dinierendem
+dinierenden
+dinierender
+dinierendes
+dinierst
+diniert
+dinierte
+dinierten
+diniertest
+diniertet
+diplomatisch
+diplomatische
+diplomatischem
+diplomatischen
+diplomatischer
+diplomatisches
+diplomiert
+diplomierte
+diplomiertem
+diplomierten
+diplomierter
+diplomiertes
+dir
+direkt
+direkte
+direktem
+direkten
+direkter
+direktes
+direktional
+direktionale
+direktionalem
+direktionalen
+direktionaler
+direktionales
+dirigiere
+dirigieren
+dirigierend
+dirigierende
+dirigierendem
+dirigierenden
+dirigierender
+dirigierendes
+dirigierst
+dirigiert
+dirigierte
+dirigiertem
+dirigierten
+dirigierter
+dirigiertes
+dirigiertest
+dirigiertet
+dirigistisch
+dirigistische
+dirigistischem
+dirigistischen
+dirigistischer
+dirigistisches
+disharmonisch
+disharmonische
+disharmonischem
+disharmonischen
+disharmonischer
+disharmonisches
+disjunkt
+disjunkte
+disjunktem
+disjunkten
+disjunkter
+disjunktes
+disjunktiv
+disjunktive
+disjunktivem
+disjunktiven
+disjunktiver
+disjunktives
+diskontiere
+diskontieren
+diskontierend
+diskontierende
+diskontierendem
+diskontierenden
+diskontierender
+diskontierendes
+diskontierst
+diskontiert
+diskontierte
+diskontiertem
+diskontierten
+diskontierter
+diskontiertes
+diskontiertest
+diskontiertet
+diskontinuierlich
+diskontinuierliche
+diskontinuierlichem
+diskontinuierlichen
+diskontinuierlicher
+diskontinuierliches
+diskreditiere
+diskreditieren
+diskreditierend
+diskreditierende
+diskreditierendem
+diskreditierenden
+diskreditierender
+diskreditierendes
+diskreditierst
+diskreditiert
+diskreditierte
+diskreditiertem
+diskreditierten
+diskreditierter
+diskreditiertes
+diskreditiertest
+diskreditiertet
+diskret
+diskrete
+diskretem
+diskreten
+diskreter
+diskretere
+diskreterem
+diskreteren
+diskreterer
+diskreteres
+diskretes
+diskreteste
+diskretestem
+diskretesten
+diskretester
+diskretestes
+diskriminiere
+diskriminieren
+diskriminierend
+diskriminierende
+diskriminierendem
+diskriminierenden
+diskriminierender
+diskriminierendes
+diskriminierst
+diskriminiert
+diskriminierte
+diskriminiertem
+diskriminierten
+diskriminierter
+diskriminiertes
+diskriminiertest
+diskriminiertet
+diskursiv
+diskursive
+diskursivem
+diskursiven
+diskursiver
+diskursives
+diskussionsfähig
+diskussionsfähige
+diskussionsfähigem
+diskussionsfähigen
+diskussionsfähiger
+diskussionsfähiges
+diskutierbar
+diskutierbare
+diskutierbarem
+diskutierbaren
+diskutierbarer
+diskutierbares
+diskutiere
+diskutieren
+diskutierend
+diskutierende
+diskutierendem
+diskutierenden
+diskutierender
+diskutierendes
+diskutierst
+diskutiert
+diskutierte
+diskutiertem
+diskutierten
+diskutierter
+diskutiertes
+diskutiertest
+diskutiertet
+disparat
+disparate
+disparatem
+disparaten
+disparater
+disparatere
+disparaterem
+disparateren
+disparaterer
+disparateres
+disparates
+disparateste
+disparatestem
+disparatesten
+disparatester
+disparatestes
+dispensiere
+dispensieren
+dispensierend
+dispensierende
+dispensierendem
+dispensierenden
+dispensierender
+dispensierendes
+dispensierst
+dispensiert
+dispensierte
+dispensiertem
+dispensierten
+dispensierter
+dispensiertes
+dispensiertest
+dispensiertet
+disponierbar
+disponierbare
+disponierbarem
+disponierbaren
+disponierbarer
+disponierbares
+disponiere
+disponieren
+disponierend
+disponierende
+disponierendem
+disponierenden
+disponierender
+disponierendes
+disponierst
+disponiert
+disponierte
+disponiertem
+disponierten
+disponierter
+disponiertes
+disponiertest
+disponiertet
+disputiere
+disputieren
+disputierend
+disputierende
+disputierendem
+disputierenden
+disputierender
+disputierendes
+disputierst
+disputiert
+disputierte
+disputierten
+disputiertest
+disputiertet
+disqualifiziere
+disqualifizieren
+disqualifizierend
+disqualifizierende
+disqualifizierendem
+disqualifizierenden
+disqualifizierender
+disqualifizierendes
+disqualifizierst
+disqualifiziert
+disqualifizierte
+disqualifiziertem
+disqualifizierten
+disqualifizierter
+disqualifiziertes
+disqualifiziertest
+disqualifiziertet
+dissipativ
+dissipative
+dissipativem
+dissipativen
+dissipativer
+dissipatives
+distanziere
+distanzieren
+distanzierend
+distanzierende
+distanzierendem
+distanzierenden
+distanzierender
+distanzierendes
+distanzierst
+distanziert
+distanzierte
+distanziertem
+distanzierten
+distanzierter
+distanziertes
+distanziertest
+distanziertet
+disziplinarisch
+disziplinarische
+disziplinarischem
+disziplinarischen
+disziplinarischer
+disziplinarisches
+diszipliniere
+disziplinieren
+disziplinierend
+disziplinierende
+disziplinierendem
+disziplinierenden
+disziplinierender
+disziplinierendes
+disziplinierst
+diszipliniert
+disziplinierte
+diszipliniertem
+disziplinierten
+disziplinierter
+diszipliniertes
+diszipliniertest
+diszipliniertet
+dito
+div
+divergiere
+divergieren
+divergierend
+divergierende
+divergierendem
+divergierenden
+divergierender
+divergierendes
+divergierst
+divergiert
+divergierte
+divergierten
+divergiertest
+divergiertet
+divers
+diverse
+diversem
+diversen
+diverser
+diverses
+diversifiziere
+diversifizieren
+diversifizierend
+diversifizierende
+diversifizierendem
+diversifizierenden
+diversifizierender
+diversifizierendes
+diversifizierst
+diversifiziert
+diversifizierte
+diversifiziertem
+diversifizierten
+diversifizierter
+diversifiziertes
+diversifiziertest
+diversifiziertet
+dividiere
+dividieren
+dividierend
+dividierende
+dividierendem
+dividierenden
+dividierender
+dividierendes
+dividierst
+dividiert
+dividierte
+dividiertem
+dividierten
+dividierter
+dividiertes
+dividiertest
+dividiertet
+dm
+doch
+dogmatisch
+dogmatische
+dogmatischem
+dogmatischen
+dogmatischer
+dogmatisches
+dogmenartig
+dogmenartige
+dogmenartigem
+dogmenartigen
+dogmenartiger
+dogmenartiges
+dokumentarisch
+dokumentarische
+dokumentarischem
+dokumentarischen
+dokumentarischer
+dokumentarisches
+dokumentiere
+dokumentieren
+dokumentierend
+dokumentierende
+dokumentierendem
+dokumentierenden
+dokumentierender
+dokumentierendes
+dokumentierst
+dokumentiert
+dokumentierte
+dokumentiertem
+dokumentierten
+dokumentierter
+dokumentiertes
+dokumentiertest
+dokumentiertet
+dolmetsche
+dolmetschen
+dolmetschend
+dolmetschende
+dolmetschendem
+dolmetschenden
+dolmetschender
+dolmetschendes
+dolmetschest
+dolmetschst
+dolmetscht
+dolmetschte
+dolmetschten
+dolmetschtest
+dolmetschtet
+domartig
+dominant
+dominante
+dominantem
+dominanten
+dominanter
+dominantes
+domini
+dominiere
+dominieren
+dominierend
+dominierende
+dominierendem
+dominierenden
+dominierender
+dominierendes
+dominierst
+dominiert
+dominierte
+dominiertem
+dominierten
+dominierter
+dominiertes
+dominiertest
+dominiertet
+dominikanisch
+dominikanische
+dominikanischem
+dominikanischen
+dominikanischer
+dominikanisches
+donnere
+donnern
+donnernd
+donnernde
+donnerndem
+donnernden
+donnernder
+donnerndes
+donnerst
+donnerstags
+donnert
+donnerte
+donnerten
+donnertest
+donnertet
+donnre
+doof
+doofe
+doofem
+doofen
+doofer
+doofere
+dooferem
+dooferen
+dooferer
+dooferes
+doofes
+doofste
+doofstem
+doofsten
+doofster
+doofstes
+doppele
+doppelgesichtig
+doppelgesichtige
+doppelgesichtigem
+doppelgesichtigen
+doppelgesichtiger
+doppelgesichtiges
+doppeln
+doppelnd
+doppelnde
+doppelndem
+doppelnden
+doppelnder
+doppelndes
+doppelseitig
+doppelseitige
+doppelseitigem
+doppelseitigen
+doppelseitiger
+doppelseitiges
+doppelst
+doppelt
+doppelte
+doppeltem
+doppelten
+doppelter
+doppeltes
+doppeltest
+doppeltet
+doppelwandig
+doppelwandige
+doppelwandigem
+doppelwandigen
+doppelwandiger
+doppelwandiges
+dopple
+dornig
+dornige
+dornigem
+dornigen
+dorniger
+dorniges
+dorre
+dorren
+dorrend
+dorrende
+dorrendem
+dorrenden
+dorrender
+dorrendes
+dorrst
+dorrt
+dorrte
+dorrten
+dorrtest
+dorrtet
+dort
+dorthin
+dortig
+dortige
+dortigem
+dortigen
+dortiger
+dortiges
+dosiere
+dosieren
+dosierend
+dosierende
+dosierendem
+dosierenden
+dosierender
+dosierendes
+dosierst
+dosiert
+dosierte
+dosiertem
+dosierten
+dosierter
+dosiertes
+dosiertest
+dosiertet
+dotiere
+dotieren
+dotierend
+dotierende
+dotierendem
+dotierenden
+dotierender
+dotierendes
+dotierst
+dotiert
+dotierte
+dotiertem
+dotierten
+dotierter
+dotiertes
+dotiertest
+dotiertet
+dottergelb
+dottergelbe
+dottergelbem
+dottergelben
+dottergelber
+dottergelbes
+doziere
+dozieren
+dozierend
+dozierende
+dozierendem
+dozierenden
+dozierender
+dozierendes
+dozierst
+doziert
+dozierte
+doziertem
+dozierten
+dozierter
+doziertes
+doziertest
+doziertet
+dpi
+drahtig
+drahtige
+drahtigem
+drahtigen
+drahtiger
+drahtiges
+drahtlos
+drahtlose
+drahtlosem
+drahtlosen
+drahtloser
+drahtloses
+drakonisch
+drakonische
+drakonischem
+drakonischen
+drakonischer
+drakonisches
+drall
+dralle
+drallem
+drallen
+draller
+dralles
+dramatisch
+dramatische
+dramatischem
+dramatischen
+dramatischer
+dramatischere
+dramatischerem
+dramatischeren
+dramatischerer
+dramatischeres
+dramatisches
+dramatischste
+dramatischstem
+dramatischsten
+dramatischster
+dramatischstes
+dramatisiere
+dramatisieren
+dramatisierend
+dramatisierende
+dramatisierendem
+dramatisierenden
+dramatisierender
+dramatisierendes
+dramatisierst
+dramatisiert
+dramatisierte
+dramatisiertem
+dramatisierten
+dramatisierter
+dramatisiertes
+dramatisiertest
+dramatisiertet
+dramaturgisch
+dramaturgische
+dramaturgischem
+dramaturgischen
+dramaturgischer
+dramaturgisches
+dran
+drang
+drangen
+dranglauben
+drangsaliere
+drangsalieren
+drangsalierend
+drangsalierende
+drangsalierendem
+drangsalierenden
+drangsalierender
+drangsalierendes
+drangsalierst
+drangsaliert
+drangsalierte
+drangsaliertem
+drangsalierten
+drangsalierter
+drangsaliertes
+drangsaliertest
+drangsaliertet
+drangst
+drangt
+drangvoll
+drangvolle
+drangvollem
+drangvollen
+drangvoller
+drangvolles
+dranhänge
+dranhängen
+dranhängend
+dranhängende
+dranhängendem
+dranhängenden
+dranhängender
+dranhängendes
+dranhängst
+dranhängt
+drankomme
+drankommen
+drankommend
+drankommende
+drankommendem
+drankommenden
+drankommender
+drankommendes
+drankommst
+drankommt
+drapiere
+drapieren
+drapierend
+drapierende
+drapierendem
+drapierenden
+drapierender
+drapierendes
+drapierst
+drapiert
+drapierte
+drapiertem
+drapierten
+drapierter
+drapiertes
+drapiertest
+drapiertet
+drastisch
+drastische
+drastischem
+drastischen
+drastischer
+drastisches
+drauf
+draufdrücke
+draufdrücken
+draufdrückend
+draufdrückende
+draufdrückendem
+draufdrückenden
+draufdrückender
+draufdrückendes
+draufdrückst
+draufdrückt
+draufdrückte
+draufdrückten
+draufdrücktest
+draufdrücktet
+draufgehe
+draufgehen
+draufgehend
+draufgehende
+draufgehendem
+draufgehenden
+draufgehender
+draufgehendes
+draufgehst
+draufgeht
+draufgeklebt
+draufgeklebte
+draufgeklebtem
+draufgeklebten
+draufgeklebter
+draufgeklebtes
+draufhaue
+draufhauen
+draufhauend
+draufhauende
+draufhauendem
+draufhauenden
+draufhauender
+draufhauendes
+draufhaust
+draufhaut
+draufhaute
+draufhauten
+draufhautest
+draufhautet
+draufqqlege
+draufqqlegen
+draufqqlegend
+draufqqlegende
+draufqqlegendem
+draufqqlegenden
+draufqqlegender
+draufqqlegendes
+draufqqlegst
+draufqqlegt
+draufqqlegte
+draufqqlegten
+draufqqlegtest
+draufqqlegtet
+draufqqlos
+draufqqlosgegangen
+draufqqlosgegangene
+draufqqlosgegangenem
+draufqqlosgegangenen
+draufqqlosgegangener
+draufqqlosgegangenes
+draufqqlosgehe
+draufqqlosgehen
+draufqqlosgehend
+draufqqlosgehende
+draufqqlosgehendem
+draufqqlosgehenden
+draufqqlosgehender
+draufqqlosgehendes
+draufqqlosgehst
+draufqqlosgeht
+draufqqlosging
+draufqqlosginge
+draufqqlosgingen
+draufqqlosgingst
+draufqqlosgingt
+draufschlage
+draufschlagen
+draufschlagend
+draufschlagende
+draufschlagendem
+draufschlagenden
+draufschlagender
+draufschlagendes
+draufschlagt
+draufzahle
+draufzahlen
+draufzahlend
+draufzahlende
+draufzahlendem
+draufzahlenden
+draufzahlender
+draufzahlendes
+draufzahlst
+draufzahlt
+draufzahlte
+draufzahlten
+draufzahltest
+draufzahltet
+draußen
+dreckig
+dreckige
+dreckigem
+dreckigen
+dreckiger
+dreckigere
+dreckigerem
+dreckigeren
+dreckigerer
+dreckigeres
+dreckiges
+dreckigste
+dreckigstem
+dreckigsten
+dreckigster
+dreckigstes
+drehbar
+drehbare
+drehbarem
+drehbaren
+drehbarer
+drehbares
+drehe
+drehen
+drehend
+drehende
+drehendem
+drehenden
+drehender
+drehendes
+drehst
+dreht
+drehte
+drehten
+drehtest
+drehtet
+drei
+dreiaderig
+dreiaderige
+dreiaderigem
+dreiaderigen
+dreiaderiger
+dreiaderiges
+dreiadrig
+dreiadrige
+dreiadrigem
+dreiadrigen
+dreiadriger
+dreiadriges
+dreidimensional
+dreidimensionale
+dreidimensionalem
+dreidimensionalen
+dreidimensionaler
+dreidimensionales
+dreieckig
+dreieckige
+dreieckigem
+dreieckigen
+dreieckiger
+dreieckiges
+dreieinhalbfach
+dreieinhalbfache
+dreieinhalbfachem
+dreieinhalbfachen
+dreieinhalbfacher
+dreieinhalbfaches
+dreielementig
+dreielementige
+dreielementigem
+dreielementigen
+dreielementiger
+dreielementiges
+dreien
+dreierlei
+dreifach
+dreifache
+dreifachem
+dreifachen
+dreifacher
+dreifaches
+dreifaltig
+dreifaltige
+dreifaltigem
+dreifaltigen
+dreifaltiger
+dreifaltiges
+dreifarbig
+dreifarbige
+dreifarbigem
+dreifarbigen
+dreifarbiger
+dreifarbiges
+dreigeteilt
+dreigeteilte
+dreigeteiltem
+dreigeteilten
+dreigeteilter
+dreigeteiltes
+dreihundert
+dreijährig
+dreijährige
+dreijährigem
+dreijährigen
+dreijähriger
+dreijähriges
+dreimal
+dreimalig
+dreimalige
+dreimaligem
+dreimaligen
+dreimaliger
+dreimaliges
+drein
+dreingeschlagen
+dreingeschlagene
+dreingeschlagenem
+dreingeschlagenen
+dreingeschlagener
+dreingeschlagenes
+dreinschaue
+dreinschauen
+dreinschauend
+dreinschauende
+dreinschauendem
+dreinschauenden
+dreinschauender
+dreinschauendes
+dreinschaust
+dreinschaut
+dreinschaute
+dreinschauten
+dreinschautest
+dreinschautet
+dreinschlage
+dreinschlagen
+dreinschlagend
+dreinschlagende
+dreinschlagendem
+dreinschlagenden
+dreinschlagender
+dreinschlagendes
+dreinschlagt
+dreinzuschauen
+dreiseitig
+dreiseitige
+dreiseitigem
+dreiseitigen
+dreiseitiger
+dreiseitiges
+dreisilbig
+dreisilbige
+dreisilbigem
+dreisilbigen
+dreisilbiger
+dreisilbiges
+dreisprachig
+dreisprachige
+dreisprachigem
+dreisprachigen
+dreisprachiger
+dreisprachiges
+dreist
+dreiste
+dreistellig
+dreistellige
+dreistelligem
+dreistelligen
+dreistelliger
+dreistelliges
+dreistem
+dreisten
+dreister
+dreistere
+dreisterem
+dreisteren
+dreisterer
+dreisteres
+dreistes
+dreisteste
+dreistestem
+dreistesten
+dreistester
+dreistestes
+dreistufig
+dreistufige
+dreistufigem
+dreistufigen
+dreistufiger
+dreistufiges
+dreistündig
+dreistündige
+dreistündigem
+dreistündigen
+dreistündiger
+dreistündiges
+dreitausend
+dreiteilig
+dreiteilige
+dreiteiligem
+dreiteiligen
+dreiteiliger
+dreiteiliges
+dreitägig
+dreitägige
+dreitägigem
+dreitägigen
+dreitägiger
+dreitägiges
+dreiviertel
+dreizehn
+dreizehnjährig
+dreizehnjährige
+dreizehnjährigem
+dreizehnjährigen
+dreizehnjähriger
+dreizehnjähriges
+dreizehnte
+dreizehntem
+dreizehnten
+dreizehnter
+dreizehntes
+dreißig
+dreißiger
+dreißigfach
+dreißigfache
+dreißigfachem
+dreißigfachen
+dreißigfacher
+dreißigfaches
+dreißigjährig
+dreißigjährige
+dreißigjährigem
+dreißigjährigen
+dreißigjähriger
+dreißigjähriges
+dreißigste
+dreißigstem
+dreißigsten
+dreißigster
+dreißigstes
+dresche
+dreschen
+dreschend
+dreschende
+dreschendem
+dreschenden
+dreschender
+dreschendes
+drescht
+dressiere
+dressieren
+dressierend
+dressierende
+dressierendem
+dressierenden
+dressierender
+dressierendes
+dressierst
+dressiert
+dressierte
+dressiertem
+dressierten
+dressierter
+dressiertes
+dressiertest
+dressiertet
+dribbele
+dribbeln
+dribbelnd
+dribbelnde
+dribbelndem
+dribbelnden
+dribbelnder
+dribbelndes
+dribbelst
+dribbelt
+dribbelte
+dribbelten
+dribbeltest
+dribbeltet
+dribble
+drifte
+driften
+driftend
+driftende
+driftendem
+driftenden
+driftender
+driftendes
+driftest
+driftet
+driftete
+drifteten
+driftetest
+driftetet
+drille
+drillen
+drillend
+drillende
+drillendem
+drillenden
+drillender
+drillendes
+drillst
+drillt
+drillte
+drillten
+drilltest
+drilltet
+drin
+dringe
+dringen
+dringend
+dringende
+dringendem
+dringenden
+dringender
+dringendere
+dringenderem
+dringenderen
+dringenderer
+dringenderes
+dringendes
+dringendst
+dringendste
+dringendstem
+dringendsten
+dringendster
+dringendstes
+dringlich
+dringliche
+dringlichem
+dringlichen
+dringlicher
+dringlichere
+dringlicherem
+dringlicheren
+dringlicherer
+dringlicheres
+dringliches
+dringlichste
+dringlichstem
+dringlichsten
+dringlichster
+dringlichstes
+dringst
+dringt
+drinne
+drinnenstecke
+drinnenstecken
+drinnensteckend
+drinnensteckende
+drinnensteckendem
+drinnensteckenden
+drinnensteckender
+drinnensteckendes
+drinnensteckst
+drinnensteckt
+drinnensteckte
+drinnensteckten
+drinnenstecktest
+drinnenstecktet
+drinstehe
+drinstehen
+drinstehend
+drinstehende
+drinstehendem
+drinstehenden
+drinstehender
+drinstehendes
+drinstehst
+drinsteht
+dritt
+drittbeste
+drittbestem
+drittbesten
+drittbester
+drittbestes
+dritte
+drittel
+drittem
+dritten
+drittens
+dritter
+drittes
+drittgrößte
+drittgrößtem
+drittgrößten
+drittgrößter
+drittgrößtes
+drittletzte
+drittletztem
+drittletzten
+drittletzter
+drittletztes
+drittplatziert
+drittplatzierte
+drittplatziertem
+drittplatzierten
+drittplatzierter
+drittplatziertes
+droben
+drogensüchtig
+drogensüchtige
+drogensüchtigem
+drogensüchtigen
+drogensüchtiger
+drogensüchtiges
+drohe
+drohen
+drohend
+drohende
+drohendem
+drohenden
+drohender
+drohendes
+drohst
+droht
+drohte
+drohten
+drohtest
+drohtet
+drollig
+drollige
+drolligem
+drolligen
+drolliger
+drolligerweise
+drolliges
+drosch
+droschen
+droschest
+droscht
+drossele
+drosseln
+drosselnd
+drosselnde
+drosselndem
+drosselnden
+drosselnder
+drosselndes
+drosselst
+drosselt
+drosselte
+drosselten
+drosseltest
+drosseltet
+drossle
+druckabhängig
+druckabhängige
+druckabhängigem
+druckabhängigen
+druckabhängiger
+druckabhängiges
+druckbar
+druckbare
+druckbarem
+druckbaren
+druckbarer
+druckbares
+drucke
+drucken
+druckend
+druckende
+druckendem
+druckenden
+druckender
+druckendes
+druckfertig
+druckfertige
+druckfertigem
+druckfertigen
+druckfertiger
+druckfertiges
+druckfest
+druckfeste
+druckfestem
+druckfesten
+druckfester
+druckfestes
+druckfrisch
+druckfrische
+druckfrischem
+druckfrischen
+druckfrischer
+druckfrisches
+drucklos
+drucklose
+drucklosem
+drucklosen
+druckloser
+druckloses
+druckreif
+druckreife
+druckreifem
+druckreifen
+druckreifer
+druckreifes
+druckst
+druckt
+druckte
+drucktechnisch
+drucktechnische
+drucktechnischem
+drucktechnischen
+drucktechnischer
+drucktechnisches
+druckten
+drucktest
+drucktet
+druckvoll
+druckvolle
+druckvollem
+druckvollen
+druckvoller
+druckvolles
+drumherum
+drumrum
+drunten
+drunter
+dränge
+drängele
+drängeln
+drängelnd
+drängelnde
+drängelndem
+drängelnden
+drängelnder
+drängelndes
+drängelst
+drängelt
+drängelte
+drängelten
+drängeltest
+drängeltet
+drängen
+drängend
+drängende
+drängendem
+drängenden
+drängender
+drängendere
+drängenderem
+drängenderen
+drängenderer
+drängenderes
+drängendes
+drängendste
+drängendstem
+drängendsten
+drängendster
+drängendstes
+drängle
+drängst
+drängt
+drängte
+drängten
+drängtest
+drängtet
+dröge
+drögem
+drögen
+dröger
+dröges
+dröhne
+dröhnen
+dröhnend
+dröhnende
+dröhnendem
+dröhnenden
+dröhnender
+dröhnendes
+dröhnst
+dröhnt
+dröhnte
+dröhnten
+dröhntest
+dröhntet
+drüben
+drüber
+drüberfahre
+drüberfahren
+drüberfahrend
+drüberfahrende
+drüberfahrendem
+drüberfahrenden
+drüberfahrender
+drüberfahrendes
+drüberfahrt
+drücke
+drücken
+drückend
+drückende
+drückendem
+drückenden
+drückender
+drückendere
+drückenderem
+drückenderen
+drückenderer
+drückenderes
+drückendes
+drückendste
+drückendstem
+drückendsten
+drückendster
+drückendstes
+drückst
+drückt
+drückte
+drückten
+drücktest
+drücktet
+dto
+du
+dual
+duale
+dualem
+dualen
+dualer
+duales
+dualistisch
+dualistische
+dualistischem
+dualistischen
+dualistischer
+dualistisches
+dubio
+dubios
+dubiose
+dubiosem
+dubiosen
+dubioser
+dubiosere
+dubioserem
+dubioseren
+dubioserer
+dubioseres
+dubioses
+dubioseste
+dubiosestem
+dubiosesten
+dubiosester
+dubiosestes
+ducke
+ducken
+duckend
+duckende
+duckendem
+duckenden
+duckender
+duckendes
+duckst
+duckt
+duckte
+duckten
+ducktest
+ducktet
+duelliere
+duellieren
+duellierend
+duellierende
+duellierendem
+duellierenden
+duellierender
+duellierendes
+duellierst
+duelliert
+duellierte
+duellierten
+duelliertest
+duelliertet
+dufte
+duften
+duftend
+duftende
+duftendem
+duftenden
+duftender
+duftendes
+duftest
+duftet
+duftete
+dufteten
+duftetest
+duftetet
+duftig
+duftige
+duftigem
+duftigen
+duftiger
+duftiges
+duftlos
+duftlose
+duftlosem
+duftlosen
+duftloser
+duftloses
+dulde
+dulden
+duldend
+duldende
+duldendem
+duldenden
+duldender
+duldendes
+duldest
+duldet
+duldete
+duldeten
+duldetest
+duldetet
+duldsam
+duldsame
+duldsamem
+duldsamen
+duldsamer
+duldsames
+dumm
+dumme
+dummem
+dummen
+dummer
+dummerweise
+dummes
+dumpf
+dumpfe
+dumpfem
+dumpfen
+dumpfer
+dumpfes
+dunkel
+dunkelblau
+dunkelblaue
+dunkelblauem
+dunkelblauen
+dunkelblauer
+dunkelblaues
+dunkelblond
+dunkelblonde
+dunkelblondem
+dunkelblonden
+dunkelblonder
+dunkelblondes
+dunkelbraun
+dunkelbraune
+dunkelbraunem
+dunkelbraunen
+dunkelbrauner
+dunkelbraunes
+dunkelgrau
+dunkelgraue
+dunkelgrauem
+dunkelgrauen
+dunkelgrauer
+dunkelgraues
+dunkelgrün
+dunkelgrüne
+dunkelgrünem
+dunkelgrünen
+dunkelgrüner
+dunkelgrünes
+dunkelhaarig
+dunkelhaarige
+dunkelhaarigem
+dunkelhaarigen
+dunkelhaariger
+dunkelhaariges
+dunkelhäutig
+dunkelhäutige
+dunkelhäutigem
+dunkelhäutigen
+dunkelhäutiger
+dunkelhäutiges
+dunkelrot
+dunkelrote
+dunkelrotem
+dunkelroten
+dunkelroter
+dunkelrotes
+dunkelste
+dunkelstem
+dunkelsten
+dunkelster
+dunkelstes
+dunkle
+dunklem
+dunklen
+dunkler
+dunklere
+dunklerem
+dunkleren
+dunklerer
+dunkleres
+dunkles
+dunstig
+dunstige
+dunstigem
+dunstigen
+dunstiger
+dunstiges
+duplizierbar
+duplizierbare
+duplizierbarem
+duplizierbaren
+duplizierbarer
+duplizierbares
+dupliziere
+duplizieren
+duplizierend
+duplizierende
+duplizierendem
+duplizierenden
+duplizierender
+duplizierendes
+duplizierst
+dupliziert
+duplizierte
+dupliziertem
+duplizierten
+duplizierter
+dupliziertes
+dupliziertest
+dupliziertet
+durch
+durchackere
+durchackern
+durchackernd
+durchackernde
+durchackerndem
+durchackernden
+durchackernder
+durchackerndes
+durchackerst
+durchackert
+durchackerte
+durchackertem
+durchackerten
+durchackerter
+durchackertes
+durchackertest
+durchackertet
+durchackre
+durcharbeite
+durcharbeiten
+durcharbeitend
+durcharbeitende
+durcharbeitendem
+durcharbeitenden
+durcharbeitender
+durcharbeitendes
+durcharbeitest
+durcharbeitet
+durcharbeitete
+durcharbeiteten
+durcharbeitetest
+durcharbeitetet
+durchaus
+durchbacken
+durchbeiße
+durchbeißen
+durchbeißend
+durchbeißende
+durchbeißendem
+durchbeißenden
+durchbeißender
+durchbeißendes
+durchbeißest
+durchbeißt
+durchblicke
+durchblicken
+durchblickend
+durchblickende
+durchblickendem
+durchblickenden
+durchblickender
+durchblickendes
+durchblickst
+durchblickt
+durchblickte
+durchblickten
+durchblicktest
+durchblicktet
+durchblute
+durchbluten
+durchblutend
+durchblutende
+durchblutendem
+durchblutenden
+durchblutender
+durchblutendes
+durchblutest
+durchblutet
+durchblutete
+durchblutetem
+durchbluteten
+durchbluteter
+durchblutetes
+durchblutetest
+durchblutetet
+durchblättere
+durchblättern
+durchblätternd
+durchblätternde
+durchblätterndem
+durchblätternden
+durchblätternder
+durchblätterndes
+durchblätterst
+durchblättert
+durchblätterte
+durchblätterten
+durchblättertest
+durchblättertet
+durchblättre
+durchbohre
+durchbohren
+durchbohrend
+durchbohrende
+durchbohrendem
+durchbohrenden
+durchbohrender
+durchbohrendes
+durchbohrst
+durchbohrt
+durchbohrte
+durchbohrtem
+durchbohrten
+durchbohrter
+durchbohrtes
+durchbohrtest
+durchbohrtet
+durchbrach
+durchbrachen
+durchbrachest
+durchbrachst
+durchbracht
+durchbreche
+durchbrechen
+durchbrechend
+durchbrechende
+durchbrechendem
+durchbrechenden
+durchbrechender
+durchbrechendes
+durchbrecht
+durchbrenne
+durchbrennen
+durchbrennend
+durchbrennende
+durchbrennendem
+durchbrennenden
+durchbrennender
+durchbrennendes
+durchbrennst
+durchbrennt
+durchbrichst
+durchbricht
+durchbringe
+durchbringen
+durchbringend
+durchbringende
+durchbringendem
+durchbringenden
+durchbringender
+durchbringendes
+durchbringt
+durchbrochen
+durchbrochene
+durchbrochenem
+durchbrochenen
+durchbrochener
+durchbrochenes
+durchdacht
+durchdachte
+durchdachtem
+durchdachten
+durchdachter
+durchdachtes
+durchdenke
+durchdenken
+durchdenkend
+durchdenkende
+durchdenkendem
+durchdenkenden
+durchdenkender
+durchdenkendes
+durchdenkst
+durchdenkt
+durchdrang
+durchdrangen
+durchdrangst
+durchdrangt
+durchdrehe
+durchdrehen
+durchdrehend
+durchdrehende
+durchdrehendem
+durchdrehenden
+durchdrehender
+durchdrehendes
+durchdrehst
+durchdreht
+durchdrehte
+durchdrehten
+durchdrehtest
+durchdrehtet
+durchdringe
+durchdringen
+durchdringend
+durchdringende
+durchdringendem
+durchdringenden
+durchdringender
+durchdringendes
+durchdringlich
+durchdringliche
+durchdringlichem
+durchdringlichen
+durchdringlicher
+durchdringlichere
+durchdringlicherem
+durchdringlicheren
+durchdringlicherer
+durchdringlicheres
+durchdringliches
+durchdringlichste
+durchdringlichstem
+durchdringlichsten
+durchdringlichster
+durchdringlichstes
+durchdringst
+durchdringt
+durchdrungen
+durchdrungene
+durchdrungenem
+durchdrungenen
+durchdrungener
+durchdrungenes
+durchdränge
+durchdrängen
+durchdrängend
+durchdrängende
+durchdrängendem
+durchdrängenden
+durchdrängender
+durchdrängendes
+durchdrängst
+durchdrängt
+durchdrängte
+durchdrängten
+durchdrängtest
+durchdrängtet
+durcheile
+durcheilen
+durcheilend
+durcheilende
+durcheilendem
+durcheilenden
+durcheilender
+durcheilendes
+durcheilst
+durcheilt
+durcheilte
+durcheiltem
+durcheilten
+durcheilter
+durcheiltes
+durcheiltest
+durcheiltet
+durcheinander
+durchexerziere
+durchexerzieren
+durchexerzierend
+durchexerzierende
+durchexerzierendem
+durchexerzierenden
+durchexerzierender
+durchexerzierendes
+durchexerzierst
+durchexerziert
+durchexerzierte
+durchexerziertem
+durchexerzierten
+durchexerzierter
+durchexerziertes
+durchexerziertest
+durchexerziertet
+durchfahre
+durchfahren
+durchfahrend
+durchfahrende
+durchfahrendem
+durchfahrenden
+durchfahrender
+durchfahrendes
+durchfahrt
+durchfalle
+durchfallen
+durchfallend
+durchfallende
+durchfallendem
+durchfallenden
+durchfallender
+durchfallendes
+durchfallt
+durchfechte
+durchfechten
+durchfechtend
+durchfechtende
+durchfechtendem
+durchfechtenden
+durchfechtender
+durchfechtendes
+durchfechtest
+durchfechtet
+durchfliege
+durchfliegen
+durchfliegend
+durchfliegende
+durchfliegendem
+durchfliegenden
+durchfliegender
+durchfliegendes
+durchfliegst
+durchfliegt
+durchfließe
+durchfließen
+durchfließend
+durchfließende
+durchfließendem
+durchfließenden
+durchfließender
+durchfließendes
+durchfließest
+durchfließt
+durchflog
+durchflogen
+durchflogst
+durchflogt
+durchfrage
+durchfragen
+durchfragend
+durchfragende
+durchfragendem
+durchfragenden
+durchfragender
+durchfragendes
+durchfragst
+durchfragt
+durchfroren
+durchfrorene
+durchfrorenem
+durchfrorenen
+durchfrorener
+durchfrorenes
+durchführbar
+durchführbare
+durchführbarem
+durchführbaren
+durchführbarer
+durchführbares
+durchführe
+durchführen
+durchführend
+durchführende
+durchführendem
+durchführenden
+durchführender
+durchführendes
+durchführst
+durchführt
+durchführte
+durchführten
+durchführtest
+durchführtet
+durchfüttere
+durchfüttern
+durchfütternd
+durchfütternde
+durchfütterndem
+durchfütternden
+durchfütternder
+durchfütterndes
+durchfütterst
+durchfüttert
+durchfütterte
+durchfütterten
+durchfüttertest
+durchfüttertet
+durchfüttre
+durchgeackert
+durchgeackerte
+durchgeackertem
+durchgeackerten
+durchgeackerter
+durchgeackertes
+durchgearbeitet
+durchgearbeitete
+durchgearbeitetem
+durchgearbeiteten
+durchgearbeiteter
+durchgearbeitetes
+durchgebe
+durchgeben
+durchgebend
+durchgebende
+durchgebendem
+durchgebenden
+durchgebender
+durchgebendes
+durchgebissen
+durchgebissene
+durchgebissenem
+durchgebissenen
+durchgebissener
+durchgebissenes
+durchgeblickt
+durchgeblickte
+durchgeblicktem
+durchgeblickten
+durchgeblickter
+durchgeblicktes
+durchgeblättert
+durchgeblätterte
+durchgeblättertem
+durchgeblätterten
+durchgeblätterter
+durchgeblättertes
+durchgeboxt
+durchgebracht
+durchgebrachte
+durchgebrachtem
+durchgebrachten
+durchgebrachter
+durchgebrachtes
+durchgebrannt
+durchgebrannte
+durchgebranntem
+durchgebrannten
+durchgebrannter
+durchgebranntes
+durchgebrochen
+durchgebrochene
+durchgebrochenem
+durchgebrochenen
+durchgebrochener
+durchgebrochenes
+durchgebt
+durchgedreht
+durchgedrehte
+durchgedrehtem
+durchgedrehten
+durchgedrehter
+durchgedrehtes
+durchgedrungen
+durchgedrungene
+durchgedrungenem
+durchgedrungenen
+durchgedrungener
+durchgedrungenes
+durchgedrängt
+durchgedrängte
+durchgedrängtem
+durchgedrängten
+durchgedrängter
+durchgedrängtes
+durchgeeilt
+durchgeeilte
+durchgeeiltem
+durchgeeilten
+durchgeeilter
+durchgeeiltes
+durchgefahren
+durchgefahrene
+durchgefahrenem
+durchgefahrenen
+durchgefahrener
+durchgefahrenes
+durchgefallen
+durchgefallene
+durchgefallenem
+durchgefallenen
+durchgefallener
+durchgefallenes
+durchgefegt
+durchgeflogen
+durchgeflogene
+durchgeflogenem
+durchgeflogenen
+durchgeflogener
+durchgeflogenes
+durchgeflossen
+durchgeflossene
+durchgeflossenem
+durchgeflossenen
+durchgeflossener
+durchgeflossenes
+durchgefragt
+durchgefragte
+durchgefragtem
+durchgefragten
+durchgefragter
+durchgefragtes
+durchgeführt
+durchgeführte
+durchgeführtem
+durchgeführten
+durchgeführter
+durchgeführtes
+durchgegangen
+durchgegangene
+durchgegangenem
+durchgegangenen
+durchgegangener
+durchgegangenes
+durchgegeben
+durchgegebene
+durchgegebenem
+durchgegebenen
+durchgegebener
+durchgegebenes
+durchgegriffen
+durchgegriffene
+durchgegriffenem
+durchgegriffenen
+durchgegriffener
+durchgegriffenes
+durchgehalten
+durchgehaltene
+durchgehaltenem
+durchgehaltenen
+durchgehaltener
+durchgehaltenes
+durchgehe
+durchgehen
+durchgehend
+durchgehende
+durchgehendem
+durchgehenden
+durchgehender
+durchgehendes
+durchgehst
+durchgeht
+durchgehärtet
+durchgehärtete
+durchgehärtetem
+durchgehärteten
+durchgehärteter
+durchgehärtetes
+durchgekaut
+durchgekaute
+durchgekautem
+durchgekauten
+durchgekauter
+durchgekautes
+durchgeknetet
+durchgeknetete
+durchgeknetetem
+durchgekneteten
+durchgekneteter
+durchgeknetetes
+durchgekommen
+durchgekommene
+durchgekommenem
+durchgekommenen
+durchgekommener
+durchgekommenes
+durchgekreuzt
+durchgekreuzte
+durchgekreuztem
+durchgekreuzten
+durchgekreuzter
+durchgekreuztes
+durchgekämpft
+durchgelassen
+durchgelassene
+durchgelassenem
+durchgelassenen
+durchgelassener
+durchgelassenes
+durchgelaufen
+durchgelaufene
+durchgelaufenem
+durchgelaufenen
+durchgelaufener
+durchgelaufenes
+durchgelesen
+durchgelesene
+durchgelesenem
+durchgelesenen
+durchgelesener
+durchgelesenes
+durchgelutscht
+durchgelüftet
+durchgelüftete
+durchgelüftetem
+durchgelüfteten
+durchgelüfteter
+durchgelüftetes
+durchgemacht
+durchgemachte
+durchgemachtem
+durchgemachten
+durchgemachter
+durchgemachtes
+durchgeplant
+durchgeplante
+durchgeplantem
+durchgeplanten
+durchgeplanter
+durchgeplantes
+durchgereist
+durchgereiste
+durchgereistem
+durchgereisten
+durchgereister
+durchgereistes
+durchgerissen
+durchgerissene
+durchgerissenem
+durchgerissenen
+durchgerissener
+durchgerissenes
+durchgeritten
+durchgerittene
+durchgerittenem
+durchgerittenen
+durchgerittener
+durchgerittenes
+durchgesagt
+durchgesagte
+durchgesagtem
+durchgesagten
+durchgesagter
+durchgesagtes
+durchgeschaltet
+durchgeschaltete
+durchgeschaltetem
+durchgeschalteten
+durchgeschalteter
+durchgeschaltetes
+durchgeschaut
+durchgeschaute
+durchgeschautem
+durchgeschauten
+durchgeschauter
+durchgeschautes
+durchgeschimmert
+durchgeschimmerte
+durchgeschimmertem
+durchgeschimmerten
+durchgeschimmerter
+durchgeschimmertes
+durchgeschlagen
+durchgeschlagene
+durchgeschlagenem
+durchgeschlagenen
+durchgeschlagener
+durchgeschlagenes
+durchgeschleift
+durchgeschleifte
+durchgeschleiftem
+durchgeschleiften
+durchgeschleifter
+durchgeschleiftes
+durchgeschleust
+durchgeschleuste
+durchgeschleustem
+durchgeschleusten
+durchgeschleuster
+durchgeschleustes
+durchgeschnitten
+durchgeschnittene
+durchgeschnittenem
+durchgeschnittenen
+durchgeschnittener
+durchgeschnittenes
+durchgeschossen
+durchgeschossene
+durchgeschossenem
+durchgeschossenen
+durchgeschossener
+durchgeschossenes
+durchgeschweißt
+durchgeschweißte
+durchgeschweißtem
+durchgeschweißten
+durchgeschweißter
+durchgeschweißtes
+durchgeschwommen
+durchgeschwommene
+durchgeschwommenem
+durchgeschwommenen
+durchgeschwommener
+durchgeschwommenes
+durchgeschüttelt
+durchgeschüttelte
+durchgeschütteltem
+durchgeschüttelten
+durchgeschüttelter
+durchgeschütteltes
+durchgesegelt
+durchgesegelte
+durchgesegeltem
+durchgesegelten
+durchgesegelter
+durchgesegeltes
+durchgesehen
+durchgesehene
+durchgesehenem
+durchgesehenen
+durchgesehener
+durchgesehenes
+durchgesetzt
+durchgesetzte
+durchgesetztem
+durchgesetzten
+durchgesetzter
+durchgesetztes
+durchgesickert
+durchgesickerte
+durchgesickertem
+durchgesickerten
+durchgesickerter
+durchgesickertes
+durchgesiebt
+durchgesiebte
+durchgesiebtem
+durchgesiebten
+durchgesiebter
+durchgesiebtes
+durchgespielt
+durchgespielte
+durchgespieltem
+durchgespielten
+durchgespielter
+durchgespieltes
+durchgesprochen
+durchgesprochene
+durchgesprochenem
+durchgesprochenen
+durchgesprochener
+durchgesprochenes
+durchgestanden
+durchgestandene
+durchgestandenem
+durchgestandenen
+durchgestandener
+durchgestandenes
+durchgestochen
+durchgestoßen
+durchgestrichen
+durchgestrichene
+durchgestrichenem
+durchgestrichenen
+durchgestrichener
+durchgestrichenes
+durchgestöbert
+durchgestöberte
+durchgestöbertem
+durchgestöberten
+durchgestöberter
+durchgestöbertes
+durchgesucht
+durchgesuchte
+durchgesuchtem
+durchgesuchten
+durchgesuchter
+durchgesuchtes
+durchgetreten
+durchgetretene
+durchgetretenem
+durchgetretenen
+durchgetretener
+durchgetretenes
+durchgewachsen
+durchgewachsene
+durchgewachsenem
+durchgewachsenen
+durchgewachsener
+durchgewachsenes
+durchgewandert
+durchgewanderte
+durchgewandertem
+durchgewanderten
+durchgewanderter
+durchgewandertes
+durchgewatet
+durchgeweicht
+durchgewühlt
+durchgewühlte
+durchgewühltem
+durchgewühlten
+durchgewühlter
+durchgewühltes
+durchgezogen
+durchgezogene
+durchgezogenem
+durchgezogenen
+durchgezogener
+durchgezogenes
+durchgezwängt
+durchgezwängte
+durchgezwängtem
+durchgezwängten
+durchgezwängter
+durchgezwängtes
+durchgreife
+durchgreifen
+durchgreifend
+durchgreifende
+durchgreifendem
+durchgreifenden
+durchgreifender
+durchgreifendes
+durchgreifst
+durchgreift
+durchgriff
+durchgriffen
+durchgriffest
+durchgriffst
+durchgrifft
+durchgängig
+durchgängige
+durchgängigem
+durchgängigen
+durchgängiger
+durchgängiges
+durchhaltbar
+durchhaltbare
+durchhaltbarem
+durchhaltbaren
+durchhaltbarer
+durchhaltbares
+durchhalte
+durchhalten
+durchhaltend
+durchhaltende
+durchhaltendem
+durchhaltenden
+durchhaltender
+durchhaltendes
+durchhaltet
+durchkam
+durchkamen
+durchkamst
+durchkamt
+durchknete
+durchkneten
+durchknetend
+durchknetende
+durchknetendem
+durchknetenden
+durchknetender
+durchknetendes
+durchknetest
+durchknetet
+durchknetete
+durchknetetem
+durchkneteten
+durchkneteter
+durchknetetes
+durchknetetest
+durchknetetet
+durchkomme
+durchkommen
+durchkommend
+durchkommende
+durchkommendem
+durchkommenden
+durchkommender
+durchkommendes
+durchkommst
+durchkommt
+durchkonstruierte
+durchkreuze
+durchkreuzen
+durchkreuzend
+durchkreuzende
+durchkreuzendem
+durchkreuzenden
+durchkreuzender
+durchkreuzendes
+durchkreuzest
+durchkreuzt
+durchkreuzte
+durchkreuztem
+durchkreuzten
+durchkreuzter
+durchkreuztes
+durchkreuztest
+durchkreuztet
+durchkämme
+durchkämmen
+durchkämmend
+durchkämmende
+durchkämmendem
+durchkämmenden
+durchkämmender
+durchkämmendes
+durchkämmst
+durchkämmt
+durchkämmte
+durchkämmtem
+durchkämmten
+durchkämmter
+durchkämmtes
+durchkämmtest
+durchkämmtet
+durchlasse
+durchlassen
+durchlassend
+durchlassende
+durchlassendem
+durchlassenden
+durchlassender
+durchlassendes
+durchlasst
+durchlaufe
+durchlaufen
+durchlaufend
+durchlaufende
+durchlaufendem
+durchlaufenden
+durchlaufender
+durchlaufendes
+durchlauft
+durchlese
+durchlesen
+durchlesend
+durchlesende
+durchlesendem
+durchlesenden
+durchlesender
+durchlesendes
+durchlest
+durchleuchte
+durchleuchten
+durchleuchtend
+durchleuchtende
+durchleuchtendem
+durchleuchtenden
+durchleuchtender
+durchleuchtendes
+durchleuchtest
+durchleuchtet
+durchleuchtete
+durchleuchtetem
+durchleuchteten
+durchleuchteter
+durchleuchtetes
+durchleuchtetest
+durchleuchtetet
+durchlief
+durchliefen
+durchliefest
+durchliefst
+durchlieft
+durchliest
+durchlässig
+durchlässige
+durchlässigem
+durchlässigen
+durchlässiger
+durchlässigere
+durchlässigerem
+durchlässigeren
+durchlässigerer
+durchlässigeres
+durchlässiges
+durchlässigste
+durchlässigstem
+durchlässigsten
+durchlässigster
+durchlässigstes
+durchlässt
+durchlöchere
+durchlöchern
+durchlöchernd
+durchlöchernde
+durchlöcherndem
+durchlöchernden
+durchlöchernder
+durchlöcherndes
+durchlöcherst
+durchlöchert
+durchlöcherte
+durchlöchertem
+durchlöcherten
+durchlöcherter
+durchlöchertes
+durchlöchertest
+durchlöchertet
+durchlöchre
+durchlüfte
+durchlüften
+durchlüftend
+durchlüftende
+durchlüftendem
+durchlüftenden
+durchlüftender
+durchlüftendes
+durchlüftest
+durchlüftet
+durchlüftete
+durchlüftetem
+durchlüfteten
+durchlüfteter
+durchlüftetes
+durchlüftetest
+durchlüftetet
+durchmache
+durchmachen
+durchmachend
+durchmachende
+durchmachendem
+durchmachenden
+durchmachender
+durchmachendes
+durchmachst
+durchmacht
+durchmachte
+durchmachten
+durchmachtest
+durchmachtet
+durchmarschiere
+durchmarschieren
+durchmarschierend
+durchmarschierende
+durchmarschierendem
+durchmarschierenden
+durchmarschierender
+durchmarschierendes
+durchmarschierst
+durchmarschiert
+durchmarschierte
+durchmarschiertem
+durchmarschierten
+durchmarschierter
+durchmarschiertes
+durchmarschiertest
+durchmarschiertet
+durchmische
+durchmischen
+durchmischend
+durchmischende
+durchmischendem
+durchmischenden
+durchmischender
+durchmischendes
+durchmischest
+durchmischst
+durchmischt
+durchmischte
+durchmischtem
+durchmischten
+durchmischter
+durchmischtes
+durchmischtest
+durchmischtet
+durchnehme
+durchnehmen
+durchnehmend
+durchnehmende
+durchnehmendem
+durchnehmenden
+durchnehmender
+durchnehmendes
+durchnehmt
+durchnässe
+durchnässen
+durchnässend
+durchnässende
+durchnässendem
+durchnässenden
+durchnässender
+durchnässendes
+durchnässest
+durchnässt
+durchnässte
+durchnässtem
+durchnässten
+durchnässter
+durchnässtes
+durchnässtest
+durchnässtet
+durchpflüge
+durchpflügen
+durchpflügend
+durchpflügende
+durchpflügendem
+durchpflügenden
+durchpflügender
+durchpflügendes
+durchpflügst
+durchpflügt
+durchpflügte
+durchpflügten
+durchpflügtest
+durchpflügtet
+durchquere
+durchqueren
+durchquerend
+durchquerende
+durchquerendem
+durchquerenden
+durchquerender
+durchquerendes
+durchquerst
+durchquert
+durchquerte
+durchquertem
+durchquerten
+durchquerter
+durchquertes
+durchquertest
+durchquertet
+durchrechne
+durchrechnen
+durchrechnend
+durchrechnende
+durchrechnendem
+durchrechnenden
+durchrechnender
+durchrechnendes
+durchrechnest
+durchrechnet
+durchrechnete
+durchrechneten
+durchrechnetest
+durchrechnetet
+durchreise
+durchreisen
+durchreisend
+durchreisende
+durchreisendem
+durchreisenden
+durchreisender
+durchreisendes
+durchreisest
+durchreist
+durchreiste
+durchreistem
+durchreisten
+durchreister
+durchreistes
+durchreistest
+durchreistet
+durchreite
+durchreiten
+durchreitend
+durchreitende
+durchreitendem
+durchreitenden
+durchreitender
+durchreitendes
+durchreitest
+durchreitet
+durchreiße
+durchreißen
+durchreißend
+durchreißende
+durchreißendem
+durchreißenden
+durchreißender
+durchreißendes
+durchreißest
+durchreißt
+durchringe
+durchringen
+durchringend
+durchringende
+durchringendem
+durchringenden
+durchringender
+durchringendes
+durchringst
+durchringt
+durchrutsche
+durchrutschen
+durchrutschend
+durchrutschende
+durchrutschendem
+durchrutschenden
+durchrutschender
+durchrutschendes
+durchrutschest
+durchrutschst
+durchrutscht
+durchrutschte
+durchrutschten
+durchrutschtest
+durchrutschtet
+durchs
+durchsacke
+durchsacken
+durchsackend
+durchsackende
+durchsackendem
+durchsackenden
+durchsackender
+durchsackendes
+durchsackst
+durchsackt
+durchsackte
+durchsackten
+durchsacktest
+durchsacktet
+durchsage
+durchsagen
+durchsagend
+durchsagende
+durchsagendem
+durchsagenden
+durchsagender
+durchsagendes
+durchsagst
+durchsagt
+durchsagte
+durchsagten
+durchsagtest
+durchsagtet
+durchschaubar
+durchschaubare
+durchschaubarem
+durchschaubaren
+durchschaubarer
+durchschaubares
+durchschaue
+durchschauen
+durchschauend
+durchschauende
+durchschauendem
+durchschauenden
+durchschauender
+durchschauendes
+durchschaust
+durchschaut
+durchschaute
+durchschautem
+durchschauten
+durchschauter
+durchschautes
+durchschautest
+durchschautet
+durchscheine
+durchscheinen
+durchscheinend
+durchscheinende
+durchscheinendem
+durchscheinenden
+durchscheinender
+durchscheinendes
+durchscheinst
+durchscheint
+durchschimmere
+durchschimmern
+durchschimmernd
+durchschimmernde
+durchschimmerndem
+durchschimmernden
+durchschimmernder
+durchschimmerndes
+durchschimmerst
+durchschimmert
+durchschimmerte
+durchschimmerten
+durchschimmertest
+durchschimmertet
+durchschimmre
+durchschlage
+durchschlagen
+durchschlagend
+durchschlagende
+durchschlagendem
+durchschlagenden
+durchschlagender
+durchschlagendes
+durchschlagkräftig
+durchschlagkräftige
+durchschlagkräftigem
+durchschlagkräftigen
+durchschlagkräftiger
+durchschlagkräftiges
+durchschlagt
+durchschleuse
+durchschleusen
+durchschleusend
+durchschleusende
+durchschleusendem
+durchschleusenden
+durchschleusender
+durchschleusendes
+durchschleusest
+durchschleust
+durchschleuste
+durchschleusten
+durchschleustest
+durchschleustet
+durchschlug
+durchschlugen
+durchschlugst
+durchschlugt
+durchschneide
+durchschneiden
+durchschneidend
+durchschneidende
+durchschneidendem
+durchschneidenden
+durchschneidender
+durchschneidendes
+durchschneidest
+durchschneidet
+durchschnittlich
+durchschnittliche
+durchschnittlichem
+durchschnittlichen
+durchschnittlicher
+durchschnittliches
+durchschreibe
+durchschreiben
+durchschreibend
+durchschreibende
+durchschreibendem
+durchschreibenden
+durchschreibender
+durchschreibendes
+durchschreibst
+durchschreibt
+durchschritt
+durchschritten
+durchschrittest
+durchschrittet
+durchschrittst
+durchschwamm
+durchschwammen
+durchschwammst
+durchschwammt
+durchsegele
+durchsegeln
+durchsegelnd
+durchsegelnde
+durchsegelndem
+durchsegelnden
+durchsegelnder
+durchsegelndes
+durchsegelst
+durchsegelt
+durchsegelte
+durchsegeltem
+durchsegelten
+durchsegelter
+durchsegeltes
+durchsegeltest
+durchsegeltet
+durchsegle
+durchsehe
+durchsehen
+durchsehend
+durchsehende
+durchsehendem
+durchsehenden
+durchsehender
+durchsehendes
+durchseht
+durchsetzbar
+durchsetzbare
+durchsetzbarem
+durchsetzbaren
+durchsetzbarer
+durchsetzbares
+durchsetze
+durchsetzen
+durchsetzend
+durchsetzende
+durchsetzendem
+durchsetzenden
+durchsetzender
+durchsetzendes
+durchsetzest
+durchsetzt
+durchsetzte
+durchsetztem
+durchsetzten
+durchsetzter
+durchsetztes
+durchsetztest
+durchsetztet
+durchsichtig
+durchsichtige
+durchsichtigem
+durchsichtigen
+durchsichtiger
+durchsichtigere
+durchsichtigerem
+durchsichtigeren
+durchsichtigerer
+durchsichtigeres
+durchsichtiges
+durchsichtigste
+durchsichtigstem
+durchsichtigsten
+durchsichtigster
+durchsichtigstes
+durchsickere
+durchsickern
+durchsickernd
+durchsickernde
+durchsickerndem
+durchsickernden
+durchsickernder
+durchsickerndes
+durchsickerst
+durchsickert
+durchsickerte
+durchsickerten
+durchsickertest
+durchsickertet
+durchsickre
+durchsiebe
+durchsieben
+durchsiebend
+durchsiebende
+durchsiebendem
+durchsiebenden
+durchsiebender
+durchsiebendes
+durchsiebst
+durchsiebt
+durchsiebte
+durchsiebten
+durchsiebtest
+durchsiebtet
+durchspiele
+durchspielen
+durchspielend
+durchspielende
+durchspielendem
+durchspielenden
+durchspielender
+durchspielendes
+durchspielst
+durchspielt
+durchspielte
+durchspielten
+durchspieltest
+durchspieltet
+durchspreche
+durchsprechen
+durchsprechend
+durchsprechende
+durchsprechendem
+durchsprechenden
+durchsprechender
+durchsprechendes
+durchsprecht
+durchstarte
+durchstarten
+durchstartend
+durchstartende
+durchstartendem
+durchstartenden
+durchstartender
+durchstartendes
+durchstartest
+durchstartet
+durchstartete
+durchstarteten
+durchstartetest
+durchstartetet
+durchsteche
+durchstechen
+durchstechend
+durchstechende
+durchstechendem
+durchstechenden
+durchstechender
+durchstechendes
+durchstecht
+durchstehe
+durchstehen
+durchstehend
+durchstehende
+durchstehendem
+durchstehenden
+durchstehender
+durchstehendes
+durchstehst
+durchsteht
+durchstochen
+durchstochene
+durchstochenem
+durchstochenen
+durchstochener
+durchstochenes
+durchstoße
+durchstoßen
+durchstoßend
+durchstoßende
+durchstoßendem
+durchstoßenden
+durchstoßender
+durchstoßendes
+durchstoßene
+durchstoßenem
+durchstoßenen
+durchstoßener
+durchstoßenes
+durchstoßt
+durchstreiche
+durchstreichen
+durchstreichend
+durchstreichende
+durchstreichendem
+durchstreichenden
+durchstreichender
+durchstreichendes
+durchstreichst
+durchstreicht
+durchstreife
+durchstreifen
+durchstreifst
+durchstreift
+durchstreifte
+durchstreiften
+durchstreiftest
+durchstreiftet
+durchströme
+durchströmen
+durchströmst
+durchströmt
+durchströmte
+durchströmten
+durchströmtest
+durchströmtet
+durchstöbere
+durchstöbern
+durchstöbernd
+durchstöbernde
+durchstöberndem
+durchstöbernden
+durchstöbernder
+durchstöberndes
+durchstöberst
+durchstöbert
+durchstöberte
+durchstöbertem
+durchstöberten
+durchstöberter
+durchstöbertes
+durchstöbertest
+durchstöbertet
+durchstöbre
+durchstößt
+durchsuche
+durchsuchen
+durchsuchend
+durchsuchende
+durchsuchendem
+durchsuchenden
+durchsuchender
+durchsuchendes
+durchsuchst
+durchsucht
+durchsuchte
+durchsuchtem
+durchsuchten
+durchsuchter
+durchsuchtes
+durchsuchtest
+durchsuchtet
+durchtoggeln
+durchtrieben
+durchtriebene
+durchtriebenem
+durchtriebenen
+durchtriebener
+durchtriebenere
+durchtriebenerem
+durchtriebeneren
+durchtriebenerer
+durchtriebeneres
+durchtriebenes
+durchtriebenste
+durchtriebenstem
+durchtriebensten
+durchtriebenster
+durchtriebenstes
+durchtränke
+durchtränken
+durchtränkend
+durchtränkende
+durchtränkendem
+durchtränkenden
+durchtränkender
+durchtränkendes
+durchtränkst
+durchtränkt
+durchtränkte
+durchtränktem
+durchtränkten
+durchtränkter
+durchtränktes
+durchtränktest
+durchtränktet
+durchverbunden
+durchverbundene
+durchverbundenem
+durchverbundenen
+durchverbundener
+durchverbundenes
+durchwachsen
+durchwachsene
+durchwachsenem
+durchwachsenen
+durchwachsener
+durchwachsenes
+durchwandere
+durchwandern
+durchwandernd
+durchwandernde
+durchwanderndem
+durchwandernden
+durchwandernder
+durchwanderndes
+durchwanderst
+durchwandert
+durchwanderte
+durchwandertem
+durchwanderten
+durchwanderter
+durchwandertes
+durchwandertest
+durchwandertet
+durchwandre
+durchwate
+durchwaten
+durchwatend
+durchwatende
+durchwatendem
+durchwatenden
+durchwatender
+durchwatendes
+durchwatest
+durchwatet
+durchwatete
+durchwatetem
+durchwateten
+durchwateter
+durchwatetes
+durchwatetest
+durchwatetet
+durchweg
+durchwegs
+durchweiche
+durchweichen
+durchweichend
+durchweichende
+durchweichendem
+durchweichenden
+durchweichender
+durchweichendes
+durchweichst
+durchweicht
+durchweichte
+durchweichtem
+durchweichten
+durchweichter
+durchweichtes
+durchweichtest
+durchweichtet
+durchwähle
+durchwählen
+durchwählend
+durchwählende
+durchwählendem
+durchwählenden
+durchwählender
+durchwählendes
+durchwählst
+durchwählt
+durchwählte
+durchwählten
+durchwähltest
+durchwähltet
+durchwühle
+durchwühlen
+durchwühlend
+durchwühlende
+durchwühlendem
+durchwühlenden
+durchwühlender
+durchwühlendes
+durchwühlst
+durchwühlt
+durchwühlte
+durchwühltem
+durchwühlten
+durchwühlter
+durchwühltes
+durchwühltest
+durchwühltet
+durchziehe
+durchziehen
+durchziehend
+durchziehende
+durchziehendem
+durchziehenden
+durchziehender
+durchziehendes
+durchziehst
+durchzieht
+durchzog
+durchzogen
+durchzogene
+durchzogenem
+durchzogenen
+durchzogener
+durchzogenes
+durchzogst
+durchzogt
+durchzublättern
+durchzublätternd
+durchzublätternde
+durchzublätterndem
+durchzublätternden
+durchzublätternder
+durchzublätterndes
+durchzuboxen
+durchzuboxend
+durchzuboxende
+durchzuboxendem
+durchzuboxenden
+durchzuboxender
+durchzuboxendes
+durchzudrehen
+durchzudringen
+durchzudrücken
+durchzudrückend
+durchzudrückende
+durchzudrückendem
+durchzudrückenden
+durchzudrückender
+durchzudrückendes
+durchzuführen
+durchzuführend
+durchzuführende
+durchzuführendem
+durchzuführenden
+durchzuführender
+durchzuführendes
+durchzugreifen
+durchzuhalten
+durchzuhaltend
+durchzuhaltende
+durchzuhaltendem
+durchzuhaltenden
+durchzuhaltender
+durchzuhaltendes
+durchzukämmen
+durchzukämmend
+durchzukämmende
+durchzukämmendem
+durchzukämmenden
+durchzukämmender
+durchzukämmendes
+durchzulesen
+durchzulesend
+durchzulesende
+durchzulesendem
+durchzulesenden
+durchzulesender
+durchzulesendes
+durchzumachen
+durchzumachend
+durchzumachende
+durchzumachendem
+durchzumachenden
+durchzumachender
+durchzumachendes
+durchzumogeln
+durchzumogelnd
+durchzumogelnde
+durchzumogelndem
+durchzumogelnden
+durchzumogelnder
+durchzumogelndes
+durchzuschalten
+durchzuschaltend
+durchzuschaltende
+durchzuschaltendem
+durchzuschaltenden
+durchzuschaltender
+durchzuschaltendes
+durchzusehen
+durchzusehend
+durchzusehende
+durchzusehendem
+durchzusehenden
+durchzusehender
+durchzusehendes
+durchzusetzen
+durchzusetzend
+durchzusetzende
+durchzusetzendem
+durchzusetzenden
+durchzusetzender
+durchzusetzendes
+durchzustehen
+durchzustehend
+durchzustehende
+durchzustehendem
+durchzustehenden
+durchzustehender
+durchzustehendes
+durchzwänge
+durchzwängen
+durchzwängend
+durchzwängende
+durchzwängendem
+durchzwängenden
+durchzwängender
+durchzwängendes
+durchzwängst
+durchzwängt
+durchzwängte
+durchzwängten
+durchzwängtest
+durchzwängtet
+durfte
+durften
+durftest
+durftet
+durste
+dursten
+durstend
+durstende
+durstendem
+durstenden
+durstender
+durstendes
+durstest
+durstet
+durstete
+dursteten
+durstetest
+durstetet
+durstig
+durstige
+durstigem
+durstigen
+durstiger
+durstigere
+durstigerem
+durstigeren
+durstigerer
+durstigeres
+durstiges
+durstigste
+durstigstem
+durstigsten
+durstigster
+durstigstes
+dusche
+duschen
+duschend
+duschende
+duschendem
+duschenden
+duschender
+duschendes
+duschest
+duschst
+duscht
+duschte
+duschten
+duschtest
+duschtet
+dusselig
+dusselige
+dusseligem
+dusseligen
+dusseliger
+dusseligere
+dusseligerem
+dusseligeren
+dusseligerer
+dusseligeres
+dusseliges
+dusseligste
+dusseligstem
+dusseligsten
+dusseligster
+dusseligstes
+dusslig
+dusslige
+dussligem
+dussligen
+dussliger
+dussligere
+dussligerem
+dussligeren
+dussligerer
+dussligeres
+dussliges
+dussligste
+dussligstem
+dussligsten
+dussligster
+dussligstes
+dutzende
+dutzendweise
+duze
+duzen
+duzend
+duzende
+duzendem
+duzenden
+duzender
+duzendes
+duzest
+duzt
+duzte
+duzten
+duztest
+duztet
+dynamisch
+dynamische
+dynamischem
+dynamischen
+dynamischer
+dynamischere
+dynamischerem
+dynamischeren
+dynamischerer
+dynamischeres
+dynamisches
+dynamischste
+dynamischstem
+dynamischsten
+dynamischster
+dynamischstes
+dächte
+dächten
+dächtest
+dächtet
+dämlich
+dämliche
+dämlichem
+dämlichen
+dämlicher
+dämliches
+dämmere
+dämmerhaft
+dämmerhafte
+dämmerhaftem
+dämmerhaften
+dämmerhafter
+dämmerhaftes
+dämmerig
+dämmerige
+dämmerigem
+dämmerigen
+dämmeriger
+dämmeriges
+dämmern
+dämmernd
+dämmernde
+dämmerndem
+dämmernden
+dämmernder
+dämmerndes
+dämmerst
+dämmert
+dämmerte
+dämmerten
+dämmertest
+dämmertet
+dämmre
+dämmrig
+dämmrige
+dämmrigem
+dämmrigen
+dämmriger
+dämmriges
+dämonisch
+dämonische
+dämonischem
+dämonischen
+dämonischer
+dämonisches
+dämpfe
+dämpfen
+dämpfend
+dämpfende
+dämpfendem
+dämpfenden
+dämpfender
+dämpfendes
+dämpfst
+dämpft
+dämpfte
+dämpften
+dämpftest
+dämpftet
+dänisch
+dänische
+dänischem
+dänischen
+dänischer
+dänisches
+dörfqqlich
+dörfqqliche
+dörfqqlichem
+dörfqqlichen
+dörfqqlicher
+dörfqqliches
+dörre
+dörren
+dörrend
+dörrende
+dörrendem
+dörrenden
+dörrender
+dörrendes
+dörrst
+dörrt
+dörrte
+dörrten
+dörrtest
+dörrtet
+döse
+dösen
+dösend
+dösende
+dösendem
+dösenden
+dösender
+dösendes
+dösest
+döst
+döste
+dösten
+döstest
+döstet
+dümmer
+dümmere
+dümmerem
+dümmeren
+dümmerer
+dümmeres
+dümmlich
+dümmliche
+dümmlichem
+dümmlichen
+dümmlicher
+dümmliches
+dümmste
+dümmstem
+dümmsten
+dümmster
+dümmstes
+dünge
+düngen
+düngend
+düngende
+düngendem
+düngenden
+düngender
+düngendes
+düngst
+düngt
+düngte
+düngten
+düngtest
+düngtet
+dünkt
+dünn
+dünne
+dünnem
+dünnen
+dünner
+dünnere
+dünnerem
+dünneren
+dünnerer
+dünneres
+dünnes
+dünnflüssig
+dünnflüssige
+dünnflüssigem
+dünnflüssigen
+dünnflüssiger
+dünnflüssiges
+dünnst
+dünnste
+dünnstem
+dünnsten
+dünnster
+dünnstes
+dünnt
+dünste
+dünsten
+dünstend
+dünstende
+dünstendem
+dünstenden
+dünstender
+dünstendes
+dünstest
+dünstet
+dünstete
+dünsteten
+dünstetest
+dünstetet
+dürfe
+dürfen
+dürfte
+dürften
+dürftest
+dürftet
+dürftig
+dürftige
+dürftigem
+dürftigen
+dürftiger
+dürftiges
+dürr
+dürre
+dürrem
+dürren
+dürrer
+dürrere
+dürrerem
+dürreren
+dürrerer
+dürreres
+dürres
+dürrste
+dürrstem
+dürrsten
+dürrster
+dürrstes
+dürste
+dürsten
+dürstend
+dürstende
+dürstendem
+dürstenden
+dürstender
+dürstendes
+dürstest
+dürstet
+dürstete
+dürsteten
+dürstetest
+dürstetet
+düster
+düsterblau
+düsterblaue
+düsterblauem
+düsterblauen
+düsterblauer
+düsterblaues
+düstere
+düsterem
+düsteren
+düsterer
+düsterere
+düstererem
+düstereren
+düstererer
+düstereres
+düsteres
+düsterste
+düsterstem
+düstersten
+düsterster
+düsterstes
+eben
+ebenbürtig
+ebenbürtige
+ebenbürtigem
+ebenbürtigen
+ebenbürtiger
+ebenbürtiges
+ebenda
+ebendaher
+ebendahin
+ebendarum
+ebendaselbst
+ebenderselbe
+ebendeshalb
+ebendeswegen
+ebendieselbe
+ebene
+ebenem
+ebenen
+ebener
+ebenerdig
+ebenerdige
+ebenerdigem
+ebenerdigen
+ebenerdiger
+ebenerdiges
+ebenes
+ebenfalls
+ebenjener
+ebenso
+ebensolche
+ebensolchem
+ebensolchen
+ebensolcher
+ebensolches
+ebne
+ebnen
+ebnend
+ebnende
+ebnendem
+ebnenden
+ebnender
+ebnendes
+ebnest
+ebnet
+ebnete
+ebneten
+ebnetest
+ebnetet
+echt
+echte
+echtem
+echten
+echter
+echtere
+echterem
+echteren
+echterer
+echteres
+echtes
+echteste
+echtestem
+echtesten
+echtester
+echtestes
+echtzeitfähig
+echtzeitfähige
+echtzeitfähigem
+echtzeitfähigen
+echtzeitfähiger
+echtzeitfähiges
+echtzeitgesteuert
+echtzeitgesteuerte
+echtzeitgesteuertem
+echtzeitgesteuerten
+echtzeitgesteuerter
+echtzeitgesteuertes
+eckig
+eckige
+eckigem
+eckigen
+eckiger
+eckiges
+edel
+edeldenkend
+edeldenkende
+edeldenkendem
+edeldenkenden
+edeldenkender
+edeldenkendes
+edelgesinnt
+edelgesinnte
+edelgesinntem
+edelgesinnten
+edelgesinnter
+edelgesinntes
+edelmütig
+edelmütige
+edelmütigem
+edelmütigen
+edelmütiger
+edelmütiges
+edelste
+edelstem
+edelsten
+edelster
+edelstes
+editierbar
+editierbare
+editierbarem
+editierbaren
+editierbarer
+editierbares
+editiere
+editieren
+editierend
+editierende
+editierendem
+editierenden
+editierender
+editierendes
+editierst
+editiert
+editierte
+editierten
+editiertest
+editiertet
+edle
+edlem
+edlen
+edler
+edlere
+edlerem
+edleren
+edlerer
+edleres
+edles
+effekthaschend
+effekthaschende
+effekthaschendem
+effekthaschenden
+effekthaschender
+effekthaschendes
+effektiv
+effektive
+effektivem
+effektiven
+effektiver
+effektivere
+effektiverem
+effektiveren
+effektiverer
+effektiveres
+effektives
+effektivste
+effektivstem
+effektivsten
+effektivster
+effektivstes
+effektvoll
+effektvolle
+effektvollem
+effektvollen
+effektvoller
+effektvollere
+effektvollerem
+effektvolleren
+effektvollerer
+effektvolleres
+effektvolles
+effektvollste
+effektvollstem
+effektvollsten
+effektvollster
+effektvollstes
+effizient
+effiziente
+effizientem
+effizienten
+effizienter
+effizientere
+effizienterem
+effizienteren
+effizienterer
+effizienteres
+effizientes
+effizienteste
+effizientestem
+effizientesten
+effizientester
+effizientestes
+effizienzmindernd
+effizienzmindernde
+effizienzminderndem
+effizienzmindernden
+effizienzmindernder
+effizienzminderndes
+effizienzverbessernd
+effizienzverbessernde
+effizienzverbesserndem
+effizienzverbessernden
+effizienzverbessernder
+effizienzverbesserndes
+egal
+egalisiere
+egalisieren
+egalisierend
+egalisierende
+egalisierendem
+egalisierenden
+egalisierender
+egalisierendes
+egalisierst
+egalisiert
+egalisierte
+egalisiertem
+egalisierten
+egalisierter
+egalisiertes
+egalisiertest
+egalisiertet
+egalitär
+egalitäre
+egalitärem
+egalitären
+egalitärer
+egalitäres
+egoistisch
+egoistische
+egoistischem
+egoistischen
+egoistischer
+egoistisches
+egozentrisch
+egozentrische
+egozentrischem
+egozentrischen
+egozentrischer
+egozentrisches
+eh
+ehe
+ehebreche
+ehebrechen
+ehebrechend
+ehebrechende
+ehebrechendem
+ehebrechenden
+ehebrechender
+ehebrechendes
+ehebrecherisch
+ehebrecherische
+ehebrecherischem
+ehebrecherischen
+ehebrecherischer
+ehebrecherisches
+ehebrecht
+ehedem
+ehelich
+eheliche
+ehelichem
+ehelichen
+ehelichend
+ehelichende
+ehelichendem
+ehelichenden
+ehelichender
+ehelichendes
+ehelicher
+eheliches
+ehelichst
+ehelicht
+ehelichte
+ehelichten
+ehelichtest
+ehelichtet
+ehelos
+ehelose
+ehelosem
+ehelosen
+eheloser
+eheloses
+ehemalig
+ehemalige
+ehemaligem
+ehemaligen
+ehemaliger
+ehemaliges
+ehemals
+ehemündig
+ehemündige
+ehemündigem
+ehemündigen
+ehemündiger
+ehemündiges
+eher
+eheste
+ehestem
+ehesten
+ehester
+ehestes
+ehewidrig
+ehewidrige
+ehewidrigem
+ehewidrigen
+ehewidriger
+ehewidriges
+ehrbar
+ehrbare
+ehrbarem
+ehrbaren
+ehrbarer
+ehrbarere
+ehrbarerem
+ehrbareren
+ehrbarerer
+ehrbareres
+ehrbares
+ehrbarste
+ehrbarstem
+ehrbarsten
+ehrbarster
+ehrbarstes
+ehre
+ehren
+ehrenamtlich
+ehrenamtliche
+ehrenamtlichem
+ehrenamtlichen
+ehrenamtlicher
+ehrenamtliches
+ehrend
+ehrende
+ehrendem
+ehrenden
+ehrender
+ehrendes
+ehrenhaft
+ehrenhafte
+ehrenhaftem
+ehrenhaften
+ehrenhafter
+ehrenhaftere
+ehrenhafterem
+ehrenhafteren
+ehrenhafterer
+ehrenhafteres
+ehrenhaftes
+ehrenhafteste
+ehrenhaftestem
+ehrenhaftesten
+ehrenhaftester
+ehrenhaftestes
+ehrenhalber
+ehrenvoll
+ehrenvolle
+ehrenvollem
+ehrenvollen
+ehrenvoller
+ehrenvolles
+ehrenwert
+ehrenwerte
+ehrenwertem
+ehrenwerten
+ehrenwerter
+ehrenwertes
+ehrerbietig
+ehrerbietige
+ehrerbietigem
+ehrerbietigen
+ehrerbietiger
+ehrerbietigere
+ehrerbietigerem
+ehrerbietigeren
+ehrerbietigerer
+ehrerbietigeres
+ehrerbietiges
+ehrerbietigste
+ehrerbietigstem
+ehrerbietigsten
+ehrerbietigster
+ehrerbietigstes
+ehrfurchstvoll
+ehrfurchstvolle
+ehrfurchstvollem
+ehrfurchstvollen
+ehrfurchstvoller
+ehrfurchstvolles
+ehrfurchtsvoll
+ehrfurchtsvolle
+ehrfurchtsvollem
+ehrfurchtsvollen
+ehrfurchtsvoller
+ehrfurchtsvolles
+ehrfürchtig
+ehrfürchtige
+ehrfürchtigem
+ehrfürchtigen
+ehrfürchtiger
+ehrfürchtiges
+ehrgeizig
+ehrgeizige
+ehrgeizigem
+ehrgeizigen
+ehrgeiziger
+ehrgeizigere
+ehrgeizigerem
+ehrgeizigeren
+ehrgeizigerer
+ehrgeizigeres
+ehrgeiziges
+ehrgeizigste
+ehrgeizigstem
+ehrgeizigsten
+ehrgeizigster
+ehrgeizigstes
+ehrlich
+ehrliche
+ehrlichem
+ehrlichen
+ehrlicher
+ehrlichere
+ehrlicherem
+ehrlicheren
+ehrlicherer
+ehrlicheres
+ehrliches
+ehrlichste
+ehrlichstem
+ehrlichsten
+ehrlichster
+ehrlichstes
+ehrlos
+ehrlose
+ehrlosem
+ehrlosen
+ehrloser
+ehrlosere
+ehrloserem
+ehrloseren
+ehrloserer
+ehrloseres
+ehrloses
+ehrloseste
+ehrlosestem
+ehrlosesten
+ehrlosester
+ehrlosestes
+ehrsam
+ehrsame
+ehrsamem
+ehrsamen
+ehrsamer
+ehrsames
+ehrst
+ehrsüchtig
+ehrsüchtige
+ehrsüchtigem
+ehrsüchtigen
+ehrsüchtiger
+ehrsüchtiges
+ehrt
+ehrte
+ehrten
+ehrtest
+ehrtet
+ehrwürdig
+ehrwürdige
+ehrwürdigem
+ehrwürdigen
+ehrwürdiger
+ehrwürdiges
+eidesstattlich
+eidesstattliche
+eidesstattlichem
+eidesstattlichen
+eidesstattlicher
+eidesstattliches
+eidgenössisch
+eidgenössische
+eidgenössischem
+eidgenössischen
+eidgenössischer
+eidgenössisches
+eidlich
+eidliche
+eidlichem
+eidlichen
+eidlicher
+eidliches
+eifere
+eifern
+eifernd
+eifernde
+eiferndem
+eifernden
+eifernder
+eiferndes
+eiferst
+eifersüchtig
+eifersüchtige
+eifersüchtigem
+eifersüchtigen
+eifersüchtiger
+eifersüchtigere
+eifersüchtigerem
+eifersüchtigeren
+eifersüchtigerer
+eifersüchtigeres
+eifersüchtiges
+eifersüchtigste
+eifersüchtigstem
+eifersüchtigsten
+eifersüchtigster
+eifersüchtigstes
+eifert
+eiferte
+eiferten
+eifertest
+eifertet
+eifre
+eifrig
+eifrige
+eifrigem
+eifrigen
+eifriger
+eifrigere
+eifrigerem
+eifrigeren
+eifrigerer
+eifrigeres
+eifriges
+eifrigste
+eifrigstem
+eifrigsten
+eifrigster
+eifrigstes
+eigen
+eigenartig
+eigenartige
+eigenartigem
+eigenartigen
+eigenartiger
+eigenartigere
+eigenartigerem
+eigenartigeren
+eigenartigerer
+eigenartigeres
+eigenartigerweise
+eigenartiges
+eigenartigste
+eigenartigstem
+eigenartigsten
+eigenartigster
+eigenartigstes
+eigene
+eigenem
+eigenen
+eigener
+eigenes
+eigenhändig
+eigenhändige
+eigenhändigem
+eigenhändigen
+eigenhändiger
+eigenhändiges
+eigeninitiatives
+eigeninitiiert
+eigeninitiierte
+eigeninitiiertem
+eigeninitiierten
+eigeninitiierter
+eigeninitiiertes
+eigenmächtig
+eigenmächtige
+eigenmächtigem
+eigenmächtigen
+eigenmächtiger
+eigenmächtiges
+eigennützig
+eigennützige
+eigennützigem
+eigennützigen
+eigennütziger
+eigennützigere
+eigennützigerem
+eigennützigeren
+eigennützigerer
+eigennützigeres
+eigennütziges
+eigennützigste
+eigennützigstem
+eigennützigsten
+eigennützigster
+eigennützigstes
+eigens
+eigensicher
+eigensichere
+eigensicherem
+eigensicheren
+eigensicherer
+eigensicheres
+eigensinnig
+eigensinnige
+eigensinnigem
+eigensinnigen
+eigensinniger
+eigensinnigere
+eigensinnigerem
+eigensinnigeren
+eigensinnigerer
+eigensinnigeres
+eigensinniges
+eigensinnigste
+eigensinnigstem
+eigensinnigsten
+eigensinnigster
+eigensinnigstes
+eigenste
+eigenstem
+eigensten
+eigenster
+eigenstes
+eigenständig
+eigenständige
+eigenständigem
+eigenständigen
+eigenständiger
+eigenständiges
+eigentlich
+eigentliche
+eigentlichem
+eigentlichen
+eigentlicher
+eigentliches
+eigentümlich
+eigentümliche
+eigentümlichem
+eigentümlichen
+eigentümlicher
+eigentümliches
+eigenverantwortlich
+eigenverantwortliche
+eigenverantwortlichem
+eigenverantwortlichen
+eigenverantwortlicher
+eigenverantwortliches
+eigenwillig
+eigenwillige
+eigenwilligem
+eigenwilligen
+eigenwilliger
+eigenwilligere
+eigenwilligerem
+eigenwilligeren
+eigenwilligerer
+eigenwilligeres
+eigenwilliges
+eigenwilligste
+eigenwilligstem
+eigenwilligsten
+eigenwilligster
+eigenwilligstes
+eigne
+eignen
+eignend
+eignende
+eignendem
+eignenden
+eignender
+eignendes
+eignest
+eignet
+eignete
+eigneten
+eignetest
+eignetet
+eile
+eilen
+eilend
+eilende
+eilendem
+eilenden
+eilender
+eilendes
+eilends
+eilfertig
+eilfertige
+eilfertigem
+eilfertigen
+eilfertiger
+eilfertiges
+eilig
+eilige
+eiligem
+eiligen
+eiliger
+eiligere
+eiligerem
+eiligeren
+eiligerer
+eiligeres
+eiliges
+eiligst
+eiligste
+eiligstem
+eiligsten
+eiligster
+eiligstes
+eilst
+eilt
+eilte
+eilten
+eiltest
+eiltet
+ein
+einachsig
+einachsige
+einachsigem
+einachsigen
+einachsiger
+einachsiges
+einander
+einarbeite
+einarbeiten
+einarbeitend
+einarbeitende
+einarbeitendem
+einarbeitenden
+einarbeitender
+einarbeitendes
+einarbeitest
+einarbeitet
+einarbeitete
+einarbeiteten
+einarbeitetest
+einarbeitetet
+einarmig
+einarmige
+einarmigem
+einarmigen
+einarmiger
+einarmiges
+einatme
+einatmen
+einatmend
+einatmende
+einatmendem
+einatmenden
+einatmender
+einatmendes
+einatmest
+einatmet
+einatmete
+einatmeten
+einatmetest
+einatmetet
+einbaubar
+einbaubare
+einbaubarem
+einbaubaren
+einbaubarer
+einbaubares
+einbaue
+einbauen
+einbauend
+einbauende
+einbauendem
+einbauenden
+einbauender
+einbauendes
+einbaufertig
+einbaufertige
+einbaufertigem
+einbaufertigen
+einbaufertiger
+einbaufertiges
+einbaust
+einbaut
+einbaute
+einbauten
+einbautest
+einbautet
+einbegriffen
+einbegriffene
+einbegriffenem
+einbegriffenen
+einbegriffener
+einbegriffenes
+einberufe
+einberufen
+einberufend
+einberufende
+einberufendem
+einberufenden
+einberufender
+einberufendes
+einberufene
+einberufenem
+einberufenen
+einberufener
+einberufenes
+einberufst
+einberuft
+einbette
+einbetten
+einbettest
+einbettet
+einbettete
+einbetteten
+einbettetest
+einbettetet
+einbeziehe
+einbeziehen
+einbeziehend
+einbeziehende
+einbeziehendem
+einbeziehenden
+einbeziehender
+einbeziehendes
+einbeziehst
+einbezieht
+einbezog
+einbezogen
+einbezogene
+einbezogenem
+einbezogenen
+einbezogener
+einbezogenes
+einbezogst
+einbezogt
+einbiege
+einbiegen
+einbiegend
+einbiegende
+einbiegendem
+einbiegenden
+einbiegender
+einbiegendes
+einbiegst
+einbiegt
+einbilde
+einbilden
+einbildend
+einbildende
+einbildendem
+einbildenden
+einbildender
+einbildendes
+einbildest
+einbildet
+einbildete
+einbildeten
+einbildetest
+einbildetet
+einbinde
+einbinden
+einbindend
+einbindende
+einbindendem
+einbindenden
+einbindender
+einbindendes
+einbindest
+einbindet
+einblende
+einblenden
+einblendend
+einblendende
+einblendendem
+einblendenden
+einblendender
+einblendendes
+einblendest
+einblendet
+einblendete
+einblendeten
+einblendetest
+einblendetet
+einbläue
+einbläuen
+einbläuend
+einbläuende
+einbläuendem
+einbläuenden
+einbläuender
+einbläuendes
+einbläust
+einbläut
+einbläute
+einbläuten
+einbläutest
+einbläutet
+einbrach
+einbrachen
+einbrachest
+einbrachst
+einbracht
+einbrachte
+einbrachten
+einbrachtest
+einbrachtet
+einbreche
+einbrechen
+einbrechend
+einbrechende
+einbrechendem
+einbrechenden
+einbrechender
+einbrechendes
+einbrecht
+einbrennlackiere
+einbrennlackieren
+einbrennlackierend
+einbrennlackierende
+einbrennlackierendem
+einbrennlackierenden
+einbrennlackierender
+einbrennlackierendes
+einbrennlackierst
+einbrennlackiert
+einbrennlackierte
+einbrennlackiertem
+einbrennlackierten
+einbrennlackierter
+einbrennlackiertes
+einbrennlackiertest
+einbrennlackiertet
+einbrichst
+einbricht
+einbringe
+einbringen
+einbringend
+einbringende
+einbringendem
+einbringenden
+einbringender
+einbringendes
+einbringst
+einbringt
+einbändig
+einbändige
+einbändigem
+einbändigen
+einbändiger
+einbändiges
+einbürgere
+einbürgern
+einbürgernd
+einbürgernde
+einbürgerndem
+einbürgernden
+einbürgernder
+einbürgerndes
+einbürgerst
+einbürgert
+einbürgerte
+einbürgerten
+einbürgertest
+einbürgertet
+einbürgre
+einbüße
+einbüßen
+einbüßend
+einbüßende
+einbüßendem
+einbüßenden
+einbüßender
+einbüßendes
+einbüßest
+einbüßt
+einbüßte
+einbüßten
+einbüßtest
+einbüßtet
+eindecke
+eindecken
+eindeckend
+eindeckende
+eindeckendem
+eindeckenden
+eindeckender
+eindeckendes
+eindeckst
+eindeckt
+eindeckte
+eindeckten
+eindecktest
+eindecktet
+eindeutig
+eindeutige
+eindeutigem
+eindeutigen
+eindeutiger
+eindeutigere
+eindeutigerem
+eindeutigeren
+eindeutigerer
+eindeutigeres
+eindeutiges
+eindeutigste
+eindeutigstem
+eindeutigsten
+eindeutigster
+eindeutigstes
+eindimensional
+eindimensionale
+eindimensionalem
+eindimensionalen
+eindimensionaler
+eindimensionales
+eindrang
+eindrangen
+eindrangst
+eindrangt
+eindringe
+eindringen
+eindringend
+eindringende
+eindringendem
+eindringenden
+eindringender
+eindringendes
+eindringlich
+eindringliche
+eindringlichem
+eindringlichen
+eindringlicher
+eindringlichere
+eindringlicherem
+eindringlicheren
+eindringlicherer
+eindringlicheres
+eindringliches
+eindringlichste
+eindringlichstem
+eindringlichsten
+eindringlichster
+eindringlichstes
+eindringst
+eindringt
+eindrucksvoll
+eindrucksvolle
+eindrucksvollem
+eindrucksvollen
+eindrucksvoller
+eindrucksvollere
+eindrucksvollerem
+eindrucksvolleren
+eindrucksvollerer
+eindrucksvolleres
+eindrucksvolles
+eindrucksvollste
+eindrucksvollstem
+eindrucksvollsten
+eindrucksvollster
+eindrucksvollstes
+eindrücke
+eindrücken
+eindrückend
+eindrückende
+eindrückendem
+eindrückenden
+eindrückender
+eindrückendes
+eindrücklich
+eindrückliche
+eindrücklichem
+eindrücklichen
+eindrücklicher
+eindrückliches
+eindrückst
+eindrückt
+eindrückte
+eindrückten
+eindrücktest
+eindrücktet
+eindämme
+eindämmen
+eindämmend
+eindämmende
+eindämmendem
+eindämmenden
+eindämmender
+eindämmendes
+eindämmst
+eindämmt
+eindämmte
+eindämmten
+eindämmtest
+eindämmtet
+eine
+eineiig
+eineiige
+eineiigem
+eineiigen
+eineiiger
+eineiiges
+eineinhalb
+eineinhalbjährig
+eineinhalbjährige
+eineinhalbjährigem
+eineinhalbjährigen
+eineinhalbjähriger
+eineinhalbjähriges
+eineinhalbstündig
+eineinhalbstündige
+eineinhalbstündigem
+eineinhalbstündigen
+eineinhalbstündiger
+eineinhalbstündiges
+eineinhalbtausend
+einelementig
+einelementige
+einelementigem
+einelementigen
+einelementiger
+einelementiges
+einem
+einen
+einend
+einende
+einendem
+einenden
+einender
+einendes
+einer
+einerlei
+einerseits
+eines
+einesteils
+einfach
+einfache
+einfachem
+einfachen
+einfacher
+einfachere
+einfacherem
+einfacheren
+einfacherer
+einfacheres
+einfaches
+einfachste
+einfachstem
+einfachsten
+einfachster
+einfachstes
+einfahre
+einfahren
+einfahrend
+einfahrende
+einfahrendem
+einfahrenden
+einfahrender
+einfahrendes
+einfahrt
+einfalle
+einfallen
+einfallend
+einfallende
+einfallendem
+einfallenden
+einfallender
+einfallendes
+einfallslos
+einfallslose
+einfallslosem
+einfallslosen
+einfallsloser
+einfallsloses
+einfallsreich
+einfallsreiche
+einfallsreichem
+einfallsreichen
+einfallsreicher
+einfallsreichere
+einfallsreicherem
+einfallsreicheren
+einfallsreicherer
+einfallsreicheres
+einfallsreiches
+einfallsreichste
+einfallsreichstem
+einfallsreichsten
+einfallsreichster
+einfallsreichstes
+einfallt
+einfand
+einfanden
+einfandest
+einfandet
+einfandst
+einfangbar
+einfangbare
+einfangbarem
+einfangbaren
+einfangbarer
+einfangbares
+einfange
+einfangen
+einfangend
+einfangende
+einfangendem
+einfangenden
+einfangender
+einfangendes
+einfangt
+einfarbig
+einfarbige
+einfarbigem
+einfarbigen
+einfarbiger
+einfarbiges
+einfasse
+einfassen
+einfassend
+einfassende
+einfassendem
+einfassenden
+einfassender
+einfassendes
+einfassest
+einfasst
+einfasste
+einfassten
+einfasstest
+einfasstet
+einfette
+einfetten
+einfettend
+einfettende
+einfettendem
+einfettenden
+einfettender
+einfettendes
+einfettest
+einfettet
+einfettete
+einfetteten
+einfettetest
+einfettetet
+einfiel
+einfielen
+einfielst
+einfielt
+einfinde
+einfinden
+einfindest
+einfindet
+einfließe
+einfließen
+einfließend
+einfließende
+einfließendem
+einfließenden
+einfließender
+einfließendes
+einfließest
+einfließt
+einflussreich
+einflussreiche
+einflussreichem
+einflussreichen
+einflussreicher
+einflussreichere
+einflussreicherem
+einflussreicheren
+einflussreicherer
+einflussreicheres
+einflussreiches
+einflussreichste
+einflussreichstem
+einflussreichsten
+einflussreichster
+einflussreichstes
+einflöße
+einflößen
+einflößend
+einflößende
+einflößendem
+einflößenden
+einflößender
+einflößendes
+einflößest
+einflößt
+einflößte
+einflößten
+einflößtest
+einflößtet
+einforderbar
+einforderbare
+einforderbarem
+einforderbaren
+einforderbarer
+einforderbares
+einfordere
+einfordern
+einfordernd
+einfordernde
+einforderndem
+einfordernden
+einfordernder
+einforderndes
+einforderst
+einfordert
+einforderte
+einforderten
+einfordertest
+einfordertet
+einfordre
+einfriere
+einfrieren
+einfrierend
+einfrierende
+einfrierendem
+einfrierenden
+einfrierender
+einfrierendes
+einfrierst
+einfriert
+einfädele
+einfädeln
+einfädelnd
+einfädelnde
+einfädelndem
+einfädelnden
+einfädelnder
+einfädelndes
+einfädelst
+einfädelt
+einfädelte
+einfädelten
+einfädeltest
+einfädeltet
+einfädle
+einfährst
+einfährt
+einfältig
+einfältige
+einfältigem
+einfältigen
+einfältiger
+einfältigere
+einfältigerem
+einfältigeren
+einfältigerer
+einfältigeres
+einfältiges
+einfältigste
+einfältigstem
+einfältigsten
+einfältigster
+einfältigstes
+einfängst
+einfängt
+einförmig
+einförmige
+einförmigem
+einförmigen
+einförmiger
+einförmiges
+einfüge
+einfügen
+einfügend
+einfügende
+einfügendem
+einfügenden
+einfügender
+einfügendes
+einfügst
+einfügt
+einfügte
+einfügten
+einfügtest
+einfügtet
+einfühle
+einfühlen
+einfühlend
+einfühlende
+einfühlendem
+einfühlenden
+einfühlender
+einfühlendes
+einfühlst
+einfühlt
+einfühlte
+einfühlten
+einfühltest
+einfühltet
+einführbar
+einführbare
+einführbarem
+einführbaren
+einführbarer
+einführbares
+einführe
+einführen
+einführend
+einführende
+einführendem
+einführenden
+einführender
+einführendes
+einführst
+einführt
+einführte
+einführten
+einführtest
+einführtet
+einfülle
+einfüllen
+einfüllend
+einfüllende
+einfüllendem
+einfüllenden
+einfüllender
+einfüllendes
+einfüllst
+einfüllt
+einfüllte
+einfüllten
+einfülltest
+einfülltet
+eing
+eingab
+eingaben
+eingabst
+eingabt
+eingangs
+eingearbeitet
+eingearbeitete
+eingearbeitetem
+eingearbeiteten
+eingearbeiteter
+eingearbeitetes
+eingeatmet
+eingeatmete
+eingeatmetem
+eingeatmeten
+eingeatmeter
+eingeatmetes
+eingebacken
+eingebackene
+eingebackenem
+eingebackenen
+eingebackener
+eingebackenes
+eingebaut
+eingebaute
+eingebautem
+eingebauten
+eingebauter
+eingebautes
+eingebbar
+eingebbare
+eingebbarem
+eingebbaren
+eingebbarer
+eingebbares
+eingebe
+eingeben
+eingebend
+eingebende
+eingebendem
+eingebenden
+eingebender
+eingebendes
+eingebettet
+eingebettete
+eingebettetem
+eingebetteten
+eingebetteter
+eingebettetes
+eingebildet
+eingebildete
+eingebildetem
+eingebildeten
+eingebildeter
+eingebildetes
+eingeblendet
+eingeblendete
+eingeblendetem
+eingeblendeten
+eingeblendeter
+eingeblendetes
+eingebläut
+eingebläute
+eingebläutem
+eingebläuten
+eingebläuter
+eingebläutes
+eingebogen
+eingebogene
+eingebogenem
+eingebogenen
+eingebogener
+eingebogenes
+eingebracht
+eingebrachte
+eingebrachtem
+eingebrachten
+eingebrachter
+eingebrachtes
+eingebrannt
+eingebrannte
+eingebranntem
+eingebrannten
+eingebrannter
+eingebranntes
+eingebraut
+eingebraute
+eingebrautem
+eingebrauten
+eingebrauter
+eingebrautes
+eingebrochen
+eingebrochene
+eingebrochenem
+eingebrochenen
+eingebrochener
+eingebrochenes
+eingebt
+eingebucht
+eingebuchte
+eingebuchtem
+eingebuchten
+eingebuchter
+eingebuchtes
+eingebuchtet
+eingebuchtete
+eingebuchtetem
+eingebuchteten
+eingebuchteter
+eingebuchtetes
+eingebunden
+eingebundene
+eingebundenem
+eingebundenen
+eingebundener
+eingebundenes
+eingebürgert
+eingebürgerte
+eingebürgertem
+eingebürgerten
+eingebürgerter
+eingebürgertes
+eingebüßt
+eingebüßte
+eingebüßtem
+eingebüßten
+eingebüßter
+eingebüßtes
+eingedenk
+eingedeutscht
+eingedeutschte
+eingedeutschtem
+eingedeutschten
+eingedeutschter
+eingedeutschtes
+eingedrungen
+eingedrungene
+eingedrungenem
+eingedrungenen
+eingedrungener
+eingedrungenes
+eingedrückt
+eingedrückte
+eingedrücktem
+eingedrückten
+eingedrückter
+eingedrücktes
+eingedämmt
+eingedämmte
+eingedämmtem
+eingedämmten
+eingedämmter
+eingedämmtes
+eingeebnet
+eingeebnete
+eingeebnetem
+eingeebneten
+eingeebneter
+eingeebnetes
+eingeengt
+eingeengte
+eingeengtem
+eingeengten
+eingeengter
+eingeengtes
+eingefahren
+eingefahrene
+eingefahrenem
+eingefahrenen
+eingefahrener
+eingefahrenes
+eingefallen
+eingefallene
+eingefallenem
+eingefallenen
+eingefallener
+eingefallenes
+eingefangen
+eingefangene
+eingefangenem
+eingefangenen
+eingefangener
+eingefangenes
+eingefasst
+eingefasste
+eingefasstem
+eingefassten
+eingefasster
+eingefasstes
+eingefettet
+eingefettete
+eingefettetem
+eingefetteten
+eingefetteter
+eingefettetes
+eingefleischt
+eingefleischte
+eingefleischtem
+eingefleischten
+eingefleischter
+eingefleischtes
+eingeflogen
+eingeflogene
+eingeflogenem
+eingeflogenen
+eingeflogener
+eingeflogenes
+eingeflößt
+eingeflößte
+eingeflößtem
+eingeflößten
+eingeflößter
+eingeflößtes
+eingefroren
+eingefrorene
+eingefrorenem
+eingefrorenen
+eingefrorener
+eingefrorenes
+eingefunden
+eingefädelt
+eingefädelte
+eingefädeltem
+eingefädelten
+eingefädelter
+eingefädeltes
+eingefärbt
+eingefärbte
+eingefärbtem
+eingefärbten
+eingefärbter
+eingefärbtes
+eingefügt
+eingefügte
+eingefügtem
+eingefügten
+eingefügter
+eingefügtes
+eingefühlt
+eingeführt
+eingeführte
+eingeführtem
+eingeführten
+eingeführter
+eingeführtes
+eingefüllt
+eingefüllte
+eingefülltem
+eingefüllten
+eingefüllter
+eingefülltes
+eingegangen
+eingegangene
+eingegangenem
+eingegangenen
+eingegangener
+eingegangenes
+eingegeben
+eingegebene
+eingegebenem
+eingegebenen
+eingegebener
+eingegebenes
+eingegipst
+eingegipste
+eingegipstem
+eingegipsten
+eingegipster
+eingegipstes
+eingegliedert
+eingegliederte
+eingegliedertem
+eingegliederten
+eingegliederter
+eingegliedertes
+eingegossen
+eingegossene
+eingegossenem
+eingegossenen
+eingegossener
+eingegossenes
+eingegraben
+eingegrabene
+eingegrabenem
+eingegrabenen
+eingegrabener
+eingegrabenes
+eingegrenzt
+eingegrenzte
+eingegrenztem
+eingegrenzten
+eingegrenzter
+eingegrenztes
+eingegriffen
+eingehakt
+eingehakte
+eingehaktem
+eingehakten
+eingehakter
+eingehaktes
+eingehalten
+eingehaltene
+eingehaltenem
+eingehaltenen
+eingehaltener
+eingehaltenes
+eingehandelt
+eingehandelte
+eingehandeltem
+eingehandelten
+eingehandelter
+eingehandeltes
+eingehauen
+eingehauene
+eingehauenem
+eingehauenen
+eingehauener
+eingehauenes
+eingehe
+eingeheftet
+eingeheftete
+eingeheftetem
+eingehefteten
+eingehefteter
+eingeheftetes
+eingeheizt
+eingeheizte
+eingeheiztem
+eingeheizten
+eingeheizter
+eingeheiztes
+eingehen
+eingehend
+eingehende
+eingehendem
+eingehenden
+eingehender
+eingehendes
+eingehendste
+eingeholt
+eingeholte
+eingeholtem
+eingeholten
+eingeholter
+eingeholtes
+eingehst
+eingeht
+eingehämmert
+eingehämmerte
+eingehämmertem
+eingehämmerten
+eingehämmerter
+eingehämmertes
+eingehängt
+eingehängte
+eingehängtem
+eingehängten
+eingehängter
+eingehängtes
+eingehüllt
+eingehüllte
+eingehülltem
+eingehüllten
+eingehüllter
+eingehülltes
+eingeimpft
+eingeimpfte
+eingeimpftem
+eingeimpften
+eingeimpfter
+eingeimpftes
+eingejagt
+eingejagte
+eingejagtem
+eingejagten
+eingejagter
+eingejagtes
+eingekauft
+eingekaufte
+eingekauftem
+eingekauften
+eingekaufter
+eingekauftes
+eingekehrt
+eingekehrte
+eingekehrtem
+eingekehrten
+eingekehrter
+eingekehrtes
+eingekeilt
+eingekeilte
+eingekeiltem
+eingekeilten
+eingekeilter
+eingekeiltes
+eingekellert
+eingekellerte
+eingekellertem
+eingekellerten
+eingekellerter
+eingekellertes
+eingekerbt
+eingekerbte
+eingekerbtem
+eingekerbten
+eingekerbter
+eingekerbtes
+eingeklammert
+eingeklammerte
+eingeklammertem
+eingeklammerten
+eingeklammerter
+eingeklammertes
+eingeklebt
+eingeklebte
+eingeklebtem
+eingeklebten
+eingeklebter
+eingeklebtes
+eingekleidet
+eingekleidete
+eingekleidetem
+eingekleideten
+eingekleideter
+eingekleidetes
+eingeklemmt
+eingeklemmte
+eingeklemmtem
+eingeklemmten
+eingeklemmter
+eingeklemmtes
+eingeknickt
+eingeknickte
+eingeknicktem
+eingeknickten
+eingeknickter
+eingeknicktes
+eingekocht
+eingekochte
+eingekochtem
+eingekochten
+eingekochter
+eingekochtes
+eingekreist
+eingekreiste
+eingekreistem
+eingekreisten
+eingekreister
+eingekreistes
+eingeladen
+eingeladene
+eingeladenem
+eingeladenen
+eingeladener
+eingeladenes
+eingelagert
+eingelagerte
+eingelagertem
+eingelagerten
+eingelagerter
+eingelagertes
+eingelassen
+eingelassene
+eingelassenem
+eingelassenen
+eingelassener
+eingelassenes
+eingelaufen
+eingelaufene
+eingelaufenem
+eingelaufenen
+eingelaufener
+eingelaufenes
+eingelebt
+eingelegt
+eingelegte
+eingelegtem
+eingelegten
+eingelegter
+eingelegtes
+eingeleitet
+eingeleitete
+eingeleitetem
+eingeleiteten
+eingeleiteter
+eingeleitetes
+eingelenkt
+eingelenkte
+eingelenktem
+eingelenkten
+eingelenkter
+eingelenktes
+eingelesen
+eingelesene
+eingelesenem
+eingelesenen
+eingelesener
+eingelesenes
+eingeleuchtet
+eingeleuchtete
+eingeleuchtetem
+eingeleuchteten
+eingeleuchteter
+eingeleuchtetes
+eingeliefert
+eingelieferte
+eingeliefertem
+eingelieferten
+eingelieferter
+eingeliefertes
+eingeloggt
+eingeloggte
+eingeloggtem
+eingeloggten
+eingeloggter
+eingeloggtes
+eingelullt
+eingelullte
+eingelulltem
+eingelullten
+eingelullter
+eingelulltes
+eingeläutet
+eingelöst
+eingelöste
+eingelöstem
+eingelösten
+eingelöster
+eingelöstes
+eingelötet
+eingelötete
+eingelötetem
+eingelöteten
+eingelöteter
+eingelötetes
+eingemacht
+eingemachte
+eingemachtem
+eingemachten
+eingemachter
+eingemachtes
+eingemauert
+eingemauerte
+eingemauertem
+eingemauerten
+eingemauerter
+eingemauertes
+eingemischt
+eingemischte
+eingemischtem
+eingemischten
+eingemischter
+eingemischtes
+eingemündet
+eingemündete
+eingemündetem
+eingemündeten
+eingemündeter
+eingemündetes
+eingenistet
+eingenistete
+eingenistetem
+eingenisteten
+eingenisteter
+eingenistetes
+eingenommen
+eingenommene
+eingenommenem
+eingenommenen
+eingenommener
+eingenommenes
+eingenäht
+eingenähte
+eingenähtem
+eingenähten
+eingenähter
+eingenähtes
+eingeordnet
+eingeordnete
+eingeordnetem
+eingeordneten
+eingeordneter
+eingeordnetes
+eingepackt
+eingepackte
+eingepacktem
+eingepackten
+eingepackter
+eingepacktes
+eingepasst
+eingepasste
+eingepasstem
+eingepassten
+eingepasster
+eingepasstes
+eingepaukt
+eingepaukte
+eingepauktem
+eingepaukten
+eingepaukter
+eingepauktes
+eingependelt
+eingepflanzt
+eingepflanzte
+eingepflanztem
+eingepflanzten
+eingepflanzter
+eingepflanztes
+eingeplant
+eingeplante
+eingeplantem
+eingeplanten
+eingeplanter
+eingeplantes
+eingeprägt
+eingeprägte
+eingeprägtem
+eingeprägten
+eingeprägter
+eingeprägtes
+eingequetscht
+eingequetschte
+eingequetschtem
+eingequetschten
+eingequetschter
+eingequetschtes
+eingerahmt
+eingerahmte
+eingerahmtem
+eingerahmten
+eingerahmter
+eingerahmtes
+eingerannt
+eingerannte
+eingeranntem
+eingerannten
+eingerannter
+eingeranntes
+eingerastet
+eingerastete
+eingerastetem
+eingerasteten
+eingerasteter
+eingerastetes
+eingerechnet
+eingerechnete
+eingerechnetem
+eingerechneten
+eingerechneter
+eingerechnetes
+eingeredet
+eingeredete
+eingeredetem
+eingeredeten
+eingeredeter
+eingeredetes
+eingereicht
+eingereichte
+eingereichtem
+eingereichten
+eingereichter
+eingereichtes
+eingereist
+eingereiste
+eingereistem
+eingereisten
+eingereister
+eingereistes
+eingerenkt
+eingerenkte
+eingerenktem
+eingerenkten
+eingerenkter
+eingerenktes
+eingerichtet
+eingerichtete
+eingerichtetem
+eingerichteten
+eingerichteter
+eingerichtetes
+eingerieben
+eingeriebene
+eingeriebenem
+eingeriebenen
+eingeriebener
+eingeriebenes
+eingerissen
+eingerissene
+eingerissenem
+eingerissenen
+eingerissener
+eingerissenes
+eingeritzt
+eingeritzte
+eingeritztem
+eingeritzten
+eingeritzter
+eingeritztes
+eingerollt
+eingerollte
+eingerolltem
+eingerollten
+eingerollter
+eingerolltes
+eingerostet
+eingerostete
+eingerostetem
+eingerosteten
+eingerosteter
+eingerostetes
+eingeräumt
+eingeräumte
+eingeräumtem
+eingeräumten
+eingeräumter
+eingeräumtes
+eingerückt
+eingerückte
+eingerücktem
+eingerückten
+eingerückter
+eingerücktes
+eingesammelt
+eingesammelte
+eingesammeltem
+eingesammelten
+eingesammelter
+eingesammeltes
+eingesandt
+eingesandte
+eingesandtem
+eingesandten
+eingesandter
+eingesandtes
+eingeschaltet
+eingeschaltete
+eingeschaltetem
+eingeschalteten
+eingeschalteter
+eingeschaltetes
+eingeschenkt
+eingeschenkte
+eingeschenktem
+eingeschenkten
+eingeschenkter
+eingeschenktes
+eingeschickt
+eingeschickte
+eingeschicktem
+eingeschickten
+eingeschickter
+eingeschicktes
+eingeschifft
+eingeschiffte
+eingeschifftem
+eingeschifften
+eingeschiffter
+eingeschifftes
+eingeschlafen
+eingeschlafene
+eingeschlafenem
+eingeschlafenen
+eingeschlafener
+eingeschlafenes
+eingeschlagen
+eingeschlagene
+eingeschlagenem
+eingeschlagenen
+eingeschlagener
+eingeschlagenes
+eingeschleift
+eingeschleifte
+eingeschleiftem
+eingeschleiften
+eingeschleifter
+eingeschleiftes
+eingeschleppt
+eingeschleppte
+eingeschlepptem
+eingeschleppten
+eingeschleppter
+eingeschlepptes
+eingeschleust
+eingeschleuste
+eingeschleustem
+eingeschleusten
+eingeschleuster
+eingeschleustes
+eingeschlichen
+eingeschlichene
+eingeschlichenem
+eingeschlichenen
+eingeschlichener
+eingeschlichenes
+eingeschlossen
+eingeschlossene
+eingeschlossenem
+eingeschlossenen
+eingeschlossener
+eingeschlossenes
+eingeschläfert
+eingeschläferte
+eingeschläfertem
+eingeschläferten
+eingeschläferter
+eingeschläfertes
+eingeschmeichelt
+eingeschmeichelte
+eingeschmeicheltem
+eingeschmeichelten
+eingeschmeichelter
+eingeschmeicheltes
+eingeschmiert
+eingeschmierte
+eingeschmiertem
+eingeschmierten
+eingeschmierter
+eingeschmiertes
+eingeschmolzen
+eingeschmolzene
+eingeschmolzenem
+eingeschmolzenen
+eingeschmolzener
+eingeschmolzenes
+eingeschnitten
+eingeschnittene
+eingeschnittenem
+eingeschnittenen
+eingeschnittener
+eingeschnittenes
+eingeschnürt
+eingeschnürte
+eingeschnürtem
+eingeschnürten
+eingeschnürter
+eingeschnürtes
+eingeschoben
+eingeschobene
+eingeschobenem
+eingeschobenen
+eingeschobener
+eingeschobenes
+eingeschossen
+eingeschossene
+eingeschossenem
+eingeschossenen
+eingeschossener
+eingeschossenes
+eingeschossig
+eingeschossige
+eingeschossigem
+eingeschossigen
+eingeschossiger
+eingeschossiges
+eingeschraubt
+eingeschraubte
+eingeschraubtem
+eingeschraubten
+eingeschraubter
+eingeschraubtes
+eingeschrieben
+eingeschriebene
+eingeschriebenem
+eingeschriebenen
+eingeschriebener
+eingeschriebenes
+eingeschritten
+eingeschrittene
+eingeschrittenem
+eingeschrittenen
+eingeschrittener
+eingeschrittenes
+eingeschrumpft
+eingeschrumpfte
+eingeschrumpftem
+eingeschrumpften
+eingeschrumpfter
+eingeschrumpftes
+eingeschränkt
+eingeschränkte
+eingeschränktem
+eingeschränkten
+eingeschränkter
+eingeschränktes
+eingeschult
+eingeschulte
+eingeschultem
+eingeschulten
+eingeschulter
+eingeschultes
+eingeschweißt
+eingeschweißte
+eingeschweißtem
+eingeschweißten
+eingeschweißter
+eingeschweißtes
+eingeschwenkt
+eingeschwenkte
+eingeschwenktem
+eingeschwenkten
+eingeschwenkter
+eingeschwenktes
+eingeschwärzt
+eingeschwärzte
+eingeschwärztem
+eingeschwärzten
+eingeschwärzter
+eingeschwärztes
+eingeschärft
+eingeschärfte
+eingeschärftem
+eingeschärften
+eingeschärfter
+eingeschärftes
+eingeschätzt
+eingeschätzte
+eingeschätztem
+eingeschätzten
+eingeschätzter
+eingeschätztes
+eingeschüchtert
+eingeschüchterte
+eingeschüchtertem
+eingeschüchterten
+eingeschüchterter
+eingeschüchtertes
+eingesegnet
+eingesegnete
+eingesegnetem
+eingesegneten
+eingesegneter
+eingesegnetes
+eingesehen
+eingesehene
+eingesehenem
+eingesehenen
+eingesehener
+eingesehenes
+eingeseift
+eingeseifte
+eingeseiftem
+eingeseiften
+eingeseifter
+eingeseiftes
+eingesessen
+eingesessene
+eingesessenem
+eingesessenen
+eingesessener
+eingesessenes
+eingesetzt
+eingesetzte
+eingesetztem
+eingesetzten
+eingesetzter
+eingesetztes
+eingespannt
+eingespannte
+eingespanntem
+eingespannten
+eingespannter
+eingespanntes
+eingespart
+eingesparte
+eingespartem
+eingesparten
+eingesparter
+eingespartes
+eingespeichert
+eingespeicherte
+eingespeichertem
+eingespeicherten
+eingespeicherter
+eingespeichertes
+eingespeist
+eingespeiste
+eingespeistem
+eingespeisten
+eingespeister
+eingespeistes
+eingesperrt
+eingesperrte
+eingesperrtem
+eingesperrten
+eingesperrter
+eingesperrtes
+eingespielt
+eingespielte
+eingespieltem
+eingespielten
+eingespielter
+eingespieltes
+eingesprungen
+eingesprungene
+eingesprungenem
+eingesprungenen
+eingesprungener
+eingesprungenes
+eingestampft
+eingestampfte
+eingestampftem
+eingestampften
+eingestampfter
+eingestampftes
+eingestanden
+eingestandene
+eingestandenem
+eingestandenen
+eingestandener
+eingestandenermaßen
+eingestandenes
+eingesteckt
+eingesteckte
+eingestecktem
+eingesteckten
+eingesteckter
+eingestecktes
+eingestehe
+eingestehen
+eingestehend
+eingestehende
+eingestehendem
+eingestehenden
+eingestehender
+eingestehendes
+eingestehst
+eingesteht
+eingestellt
+eingestellte
+eingestelltem
+eingestellten
+eingestellter
+eingestelltes
+eingestiegen
+eingestiegene
+eingestiegenem
+eingestiegenen
+eingestiegener
+eingestiegenes
+eingestimmt
+eingestimmte
+eingestimmtem
+eingestimmten
+eingestimmter
+eingestimmtes
+eingestochen
+eingestochene
+eingestochenem
+eingestochenen
+eingestochener
+eingestochenes
+eingestoßen
+eingestoßene
+eingestoßenem
+eingestoßenen
+eingestoßener
+eingestoßenes
+eingestrahlt
+eingestrahlte
+eingestrahltem
+eingestrahlten
+eingestrahlter
+eingestrahltes
+eingestreut
+eingestreute
+eingestreutem
+eingestreuten
+eingestreuter
+eingestreutes
+eingestuft
+eingestufte
+eingestuftem
+eingestuften
+eingestufter
+eingestuftes
+eingestürzt
+eingestürzte
+eingestürztem
+eingestürzten
+eingestürzter
+eingestürztes
+eingesunken
+eingesunkene
+eingesunkenem
+eingesunkenen
+eingesunkener
+eingesunkenes
+eingetaucht
+eingetauchte
+eingetauchtem
+eingetauchten
+eingetauchter
+eingetauchtes
+eingetauscht
+eingetauschte
+eingetauschtem
+eingetauschten
+eingetauschter
+eingetauschtes
+eingeteilt
+eingeteilte
+eingeteiltem
+eingeteilten
+eingeteilter
+eingeteiltes
+eingetippt
+eingetippte
+eingetipptem
+eingetippten
+eingetippter
+eingetipptes
+eingetragen
+eingetragene
+eingetragenem
+eingetragenen
+eingetragener
+eingetragenes
+eingetreten
+eingetretene
+eingetretenem
+eingetretenen
+eingetretener
+eingetretenes
+eingetrichtert
+eingetrichterte
+eingetrichtertem
+eingetrichterten
+eingetrichterter
+eingetrichtertes
+eingetrieben
+eingetriebene
+eingetriebenem
+eingetriebenen
+eingetriebener
+eingetriebenes
+eingetrocknet
+eingetrocknete
+eingetrocknetem
+eingetrockneten
+eingetrockneter
+eingetrocknetes
+eingetroffen
+eingetroffene
+eingetroffenem
+eingetroffenen
+eingetroffener
+eingetroffenes
+eingetrommelt
+eingetrommelte
+eingetrommeltem
+eingetrommelten
+eingetrommelter
+eingetrommeltes
+eingeträufelt
+eingeträufelte
+eingeträufeltem
+eingeträufelten
+eingeträufelter
+eingeträufeltes
+eingewandert
+eingewanderte
+eingewandertem
+eingewanderten
+eingewanderter
+eingewandertes
+eingewandt
+eingewandte
+eingewandtem
+eingewandten
+eingewandter
+eingewandtes
+eingewebt
+eingewebte
+eingewebtem
+eingewebten
+eingewebter
+eingewebtes
+eingeweckt
+eingeweckte
+eingewecktem
+eingeweckten
+eingeweckter
+eingewecktes
+eingeweicht
+eingeweichte
+eingeweichtem
+eingeweichten
+eingeweichter
+eingeweichtes
+eingeweiht
+eingeweihte
+eingeweihtem
+eingeweihten
+eingeweihter
+eingeweihtes
+eingewickelt
+eingewickelte
+eingewickeltem
+eingewickelten
+eingewickelter
+eingewickeltes
+eingewiesen
+eingewiesene
+eingewiesenem
+eingewiesenen
+eingewiesener
+eingewiesenes
+eingewilligt
+eingewilligte
+eingewilligtem
+eingewilligten
+eingewilligter
+eingewilligtes
+eingewirkt
+eingewirkte
+eingewirktem
+eingewirkten
+eingewirkter
+eingewirktes
+eingeworfen
+eingeworfene
+eingeworfenem
+eingeworfenen
+eingeworfener
+eingeworfenes
+eingewurzelt
+eingewurzelte
+eingewurzeltem
+eingewurzelten
+eingewurzelter
+eingewurzeltes
+eingewöhne
+eingewöhnen
+eingewöhnend
+eingewöhnende
+eingewöhnendem
+eingewöhnenden
+eingewöhnender
+eingewöhnendes
+eingewöhnst
+eingewöhnt
+eingewöhnte
+eingewöhntem
+eingewöhnten
+eingewöhnter
+eingewöhntes
+eingewöhntest
+eingewöhntet
+eingezahlt
+eingezahlte
+eingezahltem
+eingezahlten
+eingezahlter
+eingezahltes
+eingezeichnet
+eingezeichnete
+eingezeichnetem
+eingezeichneten
+eingezeichneter
+eingezeichnetes
+eingezirkelt
+eingezirkelte
+eingezirkeltem
+eingezirkelten
+eingezirkelter
+eingezirkeltes
+eingezogen
+eingezogene
+eingezogenem
+eingezogenen
+eingezogener
+eingezogenes
+eingeäschert
+eingeäscherte
+eingeäschertem
+eingeäscherten
+eingeäscherter
+eingeäschertes
+eingeölte
+eingeöltem
+eingeölten
+eingeölter
+eingeöltes
+eingibst
+eingibt
+eingieße
+eingießen
+eingießend
+eingießende
+eingießendem
+eingießenden
+eingießender
+eingießendes
+eingießest
+eingießt
+einging
+eingingen
+eingingst
+eingingt
+eingleisig
+eingleisige
+eingleisigem
+eingleisigen
+eingleisiger
+eingleisiges
+eingliedere
+eingliedern
+eingliedernd
+eingliedernde
+eingliederndem
+eingliedernden
+eingliedernder
+eingliederndes
+eingliederst
+eingliedert
+eingliederte
+eingliederten
+eingliedertest
+eingliedertet
+eingliedre
+eingrabe
+eingraben
+eingrabend
+eingrabende
+eingrabendem
+eingrabenden
+eingrabender
+eingrabendes
+eingrabt
+eingraviere
+eingravieren
+eingravierend
+eingravierende
+eingravierendem
+eingravierenden
+eingravierender
+eingravierendes
+eingravierst
+eingraviert
+eingravierte
+eingraviertem
+eingravierten
+eingravierter
+eingraviertes
+eingraviertest
+eingraviertet
+eingreife
+eingreifen
+eingreifend
+eingreifende
+eingreifendem
+eingreifenden
+eingreifender
+eingreifendes
+eingreifst
+eingreift
+eingrenzbar
+eingrenzbare
+eingrenzbarem
+eingrenzbaren
+eingrenzbarer
+eingrenzbares
+eingrenze
+eingrenzen
+eingrenzend
+eingrenzende
+eingrenzendem
+eingrenzenden
+eingrenzender
+eingrenzendes
+eingrenzest
+eingrenzt
+eingrenzte
+eingrenzten
+eingrenztest
+eingrenztet
+eingriff
+eingriffen
+eingriffest
+eingriffst
+eingrifft
+eingängig
+eingängige
+eingängigem
+eingängigen
+eingängiger
+eingängiges
+einhake
+einhaken
+einhakend
+einhakende
+einhakendem
+einhakenden
+einhakender
+einhakendes
+einhakst
+einhakt
+einhakte
+einhakten
+einhaktest
+einhaktet
+einhaltbar
+einhaltbare
+einhaltbarem
+einhaltbaren
+einhaltbarer
+einhaltbares
+einhalte
+einhalten
+einhaltend
+einhaltende
+einhaltendem
+einhaltenden
+einhaltender
+einhaltendes
+einhaltet
+einhandele
+einhandeln
+einhandelnd
+einhandelnde
+einhandelndem
+einhandelnden
+einhandelnder
+einhandelndes
+einhandelst
+einhandelt
+einhandelte
+einhandelten
+einhandeltest
+einhandeltet
+einhandle
+einhaue
+einhauen
+einhauend
+einhauende
+einhauendem
+einhauenden
+einhauender
+einhauendes
+einhaust
+einhaut
+einhaute
+einhauten
+einhautest
+einhautet
+einhefte
+einheften
+einheftend
+einheftende
+einheftendem
+einheftenden
+einheftender
+einheftendes
+einheftest
+einheftet
+einheftete
+einhefteten
+einheftetest
+einheftetet
+einheimisch
+einheimische
+einheimischem
+einheimischen
+einheimischer
+einheimisches
+einheimse
+einheimsen
+einheimsend
+einheimsende
+einheimsendem
+einheimsenden
+einheimsender
+einheimsendes
+einheimsest
+einheimst
+einheimste
+einheimsten
+einheimstest
+einheimstet
+einheitlich
+einheitliche
+einheitlichem
+einheitlichen
+einheitlicher
+einheitlichere
+einheitlicherem
+einheitlicheren
+einheitlicherer
+einheitlicheres
+einheitliches
+einheitlichste
+einheitlichstem
+einheitlichsten
+einheitlichster
+einheitlichstes
+einheize
+einheizen
+einheizend
+einheizende
+einheizendem
+einheizenden
+einheizender
+einheizendes
+einheizest
+einheizt
+einheizte
+einheizten
+einheiztest
+einheiztet
+einhellig
+einhellige
+einhelligem
+einhelligen
+einhelliger
+einhelliges
+einher
+einhergegangen
+einhergehe
+einhergehen
+einhergehend
+einhergehende
+einhergehendem
+einhergehenden
+einhergehender
+einhergehendes
+einhergehst
+einhergeht
+einhole
+einholen
+einholend
+einholende
+einholendem
+einholenden
+einholender
+einholendes
+einholst
+einholt
+einholte
+einholten
+einholtest
+einholtet
+einhundert
+einhänge
+einhängen
+einhängend
+einhängende
+einhängendem
+einhängenden
+einhängender
+einhängendes
+einhängst
+einhängt
+einhängte
+einhängten
+einhängtest
+einhängtet
+einhülle
+einhüllen
+einhüllend
+einhüllende
+einhüllendem
+einhüllenden
+einhüllender
+einhüllendes
+einhüllst
+einhüllt
+einhüllte
+einhüllten
+einhülltest
+einhülltet
+einig
+einige
+einigem
+einigen
+einigend
+einigende
+einigendem
+einigenden
+einigender
+einigendes
+einiger
+einigermaßen
+einiges
+einigst
+einigt
+einigte
+einigten
+einigtest
+einigtet
+einjage
+einjagen
+einjagend
+einjagende
+einjagendem
+einjagenden
+einjagender
+einjagendes
+einjagst
+einjagt
+einjagte
+einjagten
+einjagtest
+einjagtet
+einjustiere
+einjustieren
+einjustierend
+einjustierende
+einjustierendem
+einjustierenden
+einjustierender
+einjustierendes
+einjustierst
+einjustiert
+einjustierte
+einjustiertem
+einjustierten
+einjustierter
+einjustiertes
+einjustiertest
+einjustiertet
+einjährig
+einjährige
+einjährigem
+einjährigen
+einjähriger
+einjähriges
+einkalkulierbar
+einkalkulierbare
+einkalkulierbarem
+einkalkulierbaren
+einkalkulierbarer
+einkalkulierbares
+einkalkuliere
+einkalkulieren
+einkalkulierend
+einkalkulierende
+einkalkulierendem
+einkalkulierenden
+einkalkulierender
+einkalkulierendes
+einkalkulierst
+einkalkuliert
+einkalkulierte
+einkalkuliertem
+einkalkulierten
+einkalkulierter
+einkalkuliertes
+einkalkuliertest
+einkalkuliertet
+einkanalig
+einkanalige
+einkanaligem
+einkanaligen
+einkanaliger
+einkanaliges
+einkassiere
+einkassieren
+einkassierend
+einkassierende
+einkassierendem
+einkassierenden
+einkassierender
+einkassierendes
+einkassierst
+einkassiert
+einkassierte
+einkassiertem
+einkassierten
+einkassierter
+einkassiertes
+einkassiertest
+einkassiertet
+einkaufbar
+einkaufbare
+einkaufbarem
+einkaufbaren
+einkaufbarer
+einkaufbares
+einkaufe
+einkaufen
+einkaufend
+einkaufende
+einkaufendem
+einkaufenden
+einkaufender
+einkaufendes
+einkaufst
+einkauft
+einkaufte
+einkauften
+einkauftest
+einkauftet
+einkehre
+einkehren
+einkehrend
+einkehrende
+einkehrendem
+einkehrenden
+einkehrender
+einkehrendes
+einkehrst
+einkehrt
+einkehrte
+einkehrten
+einkehrtest
+einkehrtet
+einkellere
+einkellern
+einkellernd
+einkellernde
+einkellerndem
+einkellernden
+einkellernder
+einkellerndes
+einkellerst
+einkellert
+einkellerte
+einkellerten
+einkellertest
+einkellertet
+einkellre
+einkessele
+einkesseln
+einkesselst
+einkesselt
+einkesselte
+einkesselten
+einkesseltest
+einkesseltet
+einkessle
+einklage
+einklagen
+einklagst
+einklagt
+einklagte
+einklagten
+einklagtest
+einklagtet
+einklammere
+einklammern
+einklammernd
+einklammernde
+einklammerndem
+einklammernden
+einklammernder
+einklammerndes
+einklammerst
+einklammert
+einklammerte
+einklammerten
+einklammertest
+einklammertet
+einklammre
+einklappe
+einklappen
+einklappend
+einklappende
+einklappendem
+einklappenden
+einklappender
+einklappendes
+einklappst
+einklappt
+einklappte
+einklappten
+einklapptest
+einklapptet
+einklebe
+einkleben
+einklebend
+einklebende
+einklebendem
+einklebenden
+einklebender
+einklebendes
+einklebst
+einklebt
+einklebte
+einklebten
+einklebtest
+einklebtet
+einkleide
+einkleiden
+einkleidend
+einkleidende
+einkleidendem
+einkleidenden
+einkleidender
+einkleidendes
+einkleidest
+einkleidet
+einkleidete
+einkleideten
+einkleidetest
+einkleidetet
+einklemme
+einklemmen
+einklemmend
+einklemmende
+einklemmendem
+einklemmenden
+einklemmender
+einklemmendes
+einklemmst
+einklemmt
+einklemmte
+einklemmten
+einklemmtest
+einklemmtet
+einklinke
+einklinken
+einklinkend
+einklinkende
+einklinkendem
+einklinkenden
+einklinkender
+einklinkendes
+einklinkst
+einklinkt
+einklinkte
+einklinkten
+einklinktest
+einklinktet
+einknote
+einknoten
+einknotend
+einknotende
+einknotendem
+einknotenden
+einknotender
+einknotendes
+einknotest
+einknotet
+einknotete
+einknoteten
+einknotetest
+einknotetet
+einknöpfbar
+einknöpfbare
+einknöpfbarem
+einknöpfbaren
+einknöpfbarer
+einknöpfbares
+einknöpfe
+einknöpfen
+einknöpfend
+einknöpfende
+einknöpfendem
+einknöpfenden
+einknöpfender
+einknöpfendes
+einknöpfst
+einknöpft
+einknöpfte
+einknöpften
+einknöpftest
+einknöpftet
+einkoche
+einkochen
+einkochend
+einkochende
+einkochendem
+einkochenden
+einkochender
+einkochendes
+einkochst
+einkocht
+einkochte
+einkochten
+einkochtest
+einkochtet
+einkopiere
+einkopieren
+einkopierend
+einkopierende
+einkopierendem
+einkopierenden
+einkopierender
+einkopierendes
+einkopierst
+einkopiert
+einkopierte
+einkopiertem
+einkopierten
+einkopierter
+einkopiertes
+einkopiertest
+einkopiertet
+einkreise
+einkreisen
+einkreisend
+einkreisende
+einkreisendem
+einkreisenden
+einkreisender
+einkreisendes
+einkreisest
+einkreist
+einkreiste
+einkreisten
+einkreistest
+einkreistet
+einlade
+einladen
+einladend
+einladende
+einladendem
+einladenden
+einladender
+einladendes
+einladet
+einlagere
+einlagern
+einlagernd
+einlagernde
+einlagerndem
+einlagernden
+einlagernder
+einlagerndes
+einlagerst
+einlagert
+einlagerte
+einlagerten
+einlagertest
+einlagertet
+einlagre
+einlasse
+einlassen
+einlassend
+einlassende
+einlassendem
+einlassenden
+einlassender
+einlassendes
+einlasst
+einlaufe
+einlaufen
+einlaufend
+einlaufende
+einlaufendem
+einlaufenden
+einlaufender
+einlaufendes
+einlauft
+einlege
+einlegen
+einlegend
+einlegende
+einlegendem
+einlegenden
+einlegender
+einlegendes
+einlegst
+einlegt
+einlegte
+einlegten
+einlegtest
+einlegtet
+einleite
+einleiten
+einleitend
+einleitende
+einleitendem
+einleitenden
+einleitender
+einleitendes
+einleitest
+einleitet
+einleitete
+einleiteten
+einleitetest
+einleitetet
+einlenke
+einlenken
+einlenkend
+einlenkende
+einlenkendem
+einlenkenden
+einlenkender
+einlenkendes
+einlenkst
+einlenkt
+einlenkte
+einlenkten
+einlenktest
+einlenktet
+einlesbar
+einlesbare
+einlesbarem
+einlesbaren
+einlesbarer
+einlesbares
+einlese
+einlesen
+einlesend
+einlesende
+einlesendem
+einlesenden
+einlesender
+einlesendes
+einlest
+einleuchte
+einleuchten
+einleuchtend
+einleuchtende
+einleuchtendem
+einleuchtenden
+einleuchtender
+einleuchtendes
+einleuchtest
+einleuchtet
+einleuchtete
+einleuchteten
+einleuchtetest
+einleuchtetet
+einlief
+einliefen
+einliefere
+einliefern
+einliefernd
+einliefernde
+einlieferndem
+einliefernden
+einliefernder
+einlieferndes
+einlieferst
+einliefert
+einlieferte
+einlieferten
+einliefertest
+einliefertet
+einliefest
+einliefre
+einliefst
+einlieft
+einliegend
+einliegende
+einliegendem
+einliegenden
+einliegender
+einliegendes
+einliest
+einließ
+einließen
+einließest
+einließt
+einlogge
+einloggen
+einloggend
+einloggende
+einloggendem
+einloggenden
+einloggender
+einloggendes
+einloggst
+einloggt
+einloggte
+einloggten
+einloggtest
+einloggtet
+einlud
+einluden
+einludest
+einludet
+einludst
+einlädst
+einlädt
+einlässt
+einläute
+einläuten
+einläutend
+einläutende
+einläutendem
+einläutenden
+einläutender
+einläutendes
+einläutest
+einläutet
+einläutete
+einläuteten
+einläutetest
+einläutetet
+einlösbar
+einlösbare
+einlösbarem
+einlösbaren
+einlösbarer
+einlösbares
+einlöse
+einlösen
+einlösend
+einlösende
+einlösendem
+einlösenden
+einlösender
+einlösendes
+einlösest
+einlöst
+einlöste
+einlösten
+einlöstest
+einlöstet
+einmache
+einmachen
+einmachend
+einmachende
+einmachendem
+einmachenden
+einmachender
+einmachendes
+einmachst
+einmacht
+einmachte
+einmachten
+einmachtest
+einmachtet
+einmal
+einmalig
+einmalige
+einmaligem
+einmaligen
+einmaliger
+einmaliges
+einmarschiere
+einmarschieren
+einmarschierend
+einmarschierende
+einmarschierendem
+einmarschierenden
+einmarschierender
+einmarschierendes
+einmarschierst
+einmarschiert
+einmarschierte
+einmarschiertem
+einmarschierten
+einmarschierter
+einmarschiertes
+einmarschiertest
+einmarschiertet
+einmauere
+einmauern
+einmauernd
+einmauernde
+einmauerndem
+einmauernden
+einmauernder
+einmauerndes
+einmauerst
+einmauert
+einmauerte
+einmauerten
+einmauertest
+einmauertet
+einmaure
+einmische
+einmischen
+einmischend
+einmischende
+einmischendem
+einmischenden
+einmischender
+einmischendes
+einmischest
+einmischst
+einmischt
+einmischte
+einmischten
+einmischtest
+einmischtet
+einmotte
+einmotten
+einmottend
+einmottende
+einmottendem
+einmottenden
+einmottender
+einmottendes
+einmottest
+einmottet
+einmottete
+einmotteten
+einmottetest
+einmottetet
+einmünde
+einmünden
+einmündend
+einmündende
+einmündendem
+einmündenden
+einmündender
+einmündendes
+einmündest
+einmündet
+einmündete
+einmündeten
+einmündetest
+einmündetet
+einnahm
+einnahmen
+einnahmst
+einnahmt
+einnehmbar
+einnehmbare
+einnehmbarem
+einnehmbaren
+einnehmbarer
+einnehmbarere
+einnehmbarerem
+einnehmbareren
+einnehmbarerer
+einnehmbareres
+einnehmbares
+einnehmbarste
+einnehmbarstem
+einnehmbarsten
+einnehmbarster
+einnehmbarstes
+einnehme
+einnehmen
+einnehmend
+einnehmende
+einnehmendem
+einnehmenden
+einnehmender
+einnehmendes
+einnehmt
+einnimmst
+einnimmt
+einniste
+einnisten
+einnistend
+einnistende
+einnistendem
+einnistenden
+einnistender
+einnistendes
+einnistest
+einnistet
+einnistete
+einnisteten
+einnistetest
+einnistetet
+einordne
+einordnen
+einordnend
+einordnende
+einordnendem
+einordnenden
+einordnender
+einordnendes
+einordnest
+einordnet
+einordnete
+einordneten
+einordnetest
+einordnetet
+einpacke
+einpacken
+einpackend
+einpackende
+einpackendem
+einpackenden
+einpackender
+einpackendes
+einpackst
+einpackt
+einpackte
+einpackten
+einpacktest
+einpacktet
+einpflanze
+einpflanzen
+einpflanzend
+einpflanzende
+einpflanzendem
+einpflanzenden
+einpflanzender
+einpflanzendes
+einpflanzest
+einpflanzt
+einpflanzte
+einpflanzten
+einpflanztest
+einpflanztet
+einphasig
+einphasige
+einphasigem
+einphasigen
+einphasiger
+einphasiges
+einplane
+einplanen
+einplanend
+einplanende
+einplanendem
+einplanenden
+einplanender
+einplanendes
+einplanst
+einplant
+einplante
+einplanten
+einplantest
+einplantet
+einpolig
+einpolige
+einpoligem
+einpoligen
+einpoliger
+einpoliges
+einpralle
+einprallen
+einprallend
+einprallende
+einprallendem
+einprallenden
+einprallender
+einprallendes
+einprallst
+einprallt
+einprallte
+einprallten
+einpralltest
+einpralltet
+einpresse
+einpressen
+einpressend
+einpressende
+einpressendem
+einpressenden
+einpressender
+einpressendes
+einpressest
+einpresst
+einpresste
+einpressten
+einpresstest
+einpresstet
+einprogrammiere
+einprogrammieren
+einprogrammierend
+einprogrammierende
+einprogrammierendem
+einprogrammierenden
+einprogrammierender
+einprogrammierendes
+einprogrammierst
+einprogrammiert
+einprogrammierte
+einprogrammierten
+einprogrammiertest
+einprogrammiertet
+einpräge
+einprägen
+einprägend
+einprägende
+einprägendem
+einprägenden
+einprägender
+einprägendes
+einprägsam
+einprägsame
+einprägsamem
+einprägsamen
+einprägsamer
+einprägsames
+einprägst
+einprägt
+einprägte
+einprägten
+einprägtest
+einprägtet
+einquartiere
+einquartieren
+einquartierend
+einquartierende
+einquartierendem
+einquartierenden
+einquartierender
+einquartierendes
+einquartierst
+einquartiert
+einquartierte
+einquartiertem
+einquartierten
+einquartierter
+einquartiertes
+einquartiertest
+einquartiertet
+einraste
+einrasten
+einrastend
+einrastende
+einrastendem
+einrastenden
+einrastender
+einrastendes
+einrastest
+einrastet
+einrastete
+einrasteten
+einrastetest
+einrastetet
+einrechne
+einrechnen
+einrechnend
+einrechnende
+einrechnendem
+einrechnenden
+einrechnender
+einrechnendes
+einrechnest
+einrechnet
+einrechnete
+einrechneten
+einrechnetest
+einrechnetet
+einrede
+einreden
+einredend
+einredende
+einredendem
+einredenden
+einredender
+einredendes
+einredest
+einredet
+einredete
+einredeten
+einredetest
+einredetet
+einreguliere
+einregulieren
+einregulierend
+einregulierende
+einregulierendem
+einregulierenden
+einregulierender
+einregulierendes
+einregulierst
+einreguliert
+einregulierte
+einreguliertem
+einregulierten
+einregulierter
+einreguliertes
+einreguliertest
+einreguliertet
+einreibe
+einreiben
+einreibend
+einreibende
+einreibendem
+einreibenden
+einreibender
+einreibendes
+einreibst
+einreibt
+einreiche
+einreichen
+einreichend
+einreichende
+einreichendem
+einreichenden
+einreichender
+einreichendes
+einreichst
+einreicht
+einreichte
+einreichten
+einreichtest
+einreichtet
+einreihe
+einreihen
+einreihend
+einreihende
+einreihendem
+einreihenden
+einreihender
+einreihendes
+einreihst
+einreiht
+einreihte
+einreihten
+einreihtest
+einreihtet
+einreise
+einreisen
+einreisend
+einreisende
+einreisendem
+einreisenden
+einreisender
+einreisendes
+einreisest
+einreist
+einreiste
+einreisten
+einreistest
+einreistet
+einreiße
+einreißen
+einreißend
+einreißende
+einreißendem
+einreißenden
+einreißender
+einreißendes
+einreißest
+einreißt
+einrenke
+einrenken
+einrenkend
+einrenkende
+einrenkendem
+einrenkenden
+einrenkender
+einrenkendes
+einrenkst
+einrenkt
+einrenkte
+einrenkten
+einrenktest
+einrenktet
+einrenne
+einrennen
+einrennend
+einrennende
+einrennendem
+einrennenden
+einrennender
+einrennendes
+einrennst
+einrennt
+einrichte
+einrichten
+einrichtend
+einrichtende
+einrichtendem
+einrichtenden
+einrichtender
+einrichtendes
+einrichtest
+einrichtet
+einrichtete
+einrichteten
+einrichtetest
+einrichtetet
+einritze
+einritzen
+einritzend
+einritzende
+einritzendem
+einritzenden
+einritzender
+einritzendes
+einritzest
+einritzt
+einritzte
+einritzten
+einritztest
+einritztet
+einrolle
+einrollen
+einrollst
+einrollt
+einrollte
+einrollten
+einrolltest
+einrolltet
+einroste
+einrosten
+einrostend
+einrostende
+einrostendem
+einrostenden
+einrostender
+einrostendes
+einrostest
+einrostet
+einrostete
+einrosteten
+einrostetest
+einrostetet
+einräume
+einräumen
+einräumend
+einräumende
+einräumendem
+einräumenden
+einräumender
+einräumendes
+einräumst
+einräumt
+einräumte
+einräumten
+einräumtest
+einräumtet
+einrücke
+einrücken
+einrückend
+einrückende
+einrückendem
+einrückenden
+einrückender
+einrückendes
+einrückst
+einrückt
+einrückte
+einrückten
+einrücktest
+einrücktet
+eins
+einsah
+einsahen
+einsahst
+einsaht
+einsam
+einsame
+einsamem
+einsamen
+einsamer
+einsamere
+einsamerem
+einsameren
+einsamerer
+einsameres
+einsames
+einsammele
+einsammeln
+einsammelnd
+einsammelnde
+einsammelndem
+einsammelnden
+einsammelnder
+einsammelndes
+einsammelst
+einsammelt
+einsammelte
+einsammelten
+einsammeltest
+einsammeltet
+einsammle
+einsamste
+einsamstem
+einsamsten
+einsamster
+einsamstes
+einsatzbereit
+einsatzbereite
+einsatzbereitem
+einsatzbereiten
+einsatzbereiter
+einsatzbereites
+einsatzfreudig
+einsatzfreudige
+einsatzfreudigem
+einsatzfreudigen
+einsatzfreudiger
+einsatzfreudigere
+einsatzfreudigerem
+einsatzfreudigeren
+einsatzfreudigerer
+einsatzfreudigeres
+einsatzfreudiges
+einsatzfreudigste
+einsatzfreudigstem
+einsatzfreudigsten
+einsatzfreudigster
+einsatzfreudigstes
+einsatzfähig
+einsatzfähige
+einsatzfähigem
+einsatzfähigen
+einsatzfähiger
+einsatzfähigere
+einsatzfähigerem
+einsatzfähigeren
+einsatzfähigerer
+einsatzfähigeres
+einsatzfähiges
+einsatzfähigste
+einsatzfähigstem
+einsatzfähigsten
+einsatzfähigster
+einsatzfähigstes
+einsatzsicher
+einsatzsichere
+einsatzsicherem
+einsatzsicheren
+einsatzsicherer
+einsatzsicheres
+einschaltbar
+einschaltbare
+einschaltbarem
+einschaltbaren
+einschaltbarer
+einschaltbares
+einschalte
+einschalten
+einschaltend
+einschaltende
+einschaltendem
+einschaltenden
+einschaltender
+einschaltendes
+einschaltest
+einschaltet
+einschaltete
+einschalteten
+einschaltetest
+einschaltetet
+einschenke
+einschenken
+einschenkend
+einschenkende
+einschenkendem
+einschenkenden
+einschenkender
+einschenkendes
+einschenkst
+einschenkt
+einschenkte
+einschenkten
+einschenktest
+einschenktet
+einschicke
+einschicken
+einschickend
+einschickende
+einschickendem
+einschickenden
+einschickender
+einschickendes
+einschickst
+einschickt
+einschickte
+einschickten
+einschicktest
+einschicktet
+einschiebe
+einschieben
+einschiebend
+einschiebende
+einschiebendem
+einschiebenden
+einschiebender
+einschiebendes
+einschiebst
+einschiebt
+einschieße
+einschießen
+einschießend
+einschießende
+einschießendem
+einschießenden
+einschießender
+einschießendes
+einschießest
+einschießt
+einschiffe
+einschiffen
+einschiffend
+einschiffende
+einschiffendem
+einschiffenden
+einschiffender
+einschiffendes
+einschiffst
+einschifft
+einschiffte
+einschifften
+einschifftest
+einschifftet
+einschl
+einschlafe
+einschlafen
+einschlafend
+einschlafende
+einschlafendem
+einschlafenden
+einschlafender
+einschlafendes
+einschlaft
+einschlage
+einschlagen
+einschlagend
+einschlagende
+einschlagendem
+einschlagenden
+einschlagender
+einschlagendes
+einschlagt
+einschleiche
+einschleichen
+einschleichend
+einschleichende
+einschleichendem
+einschleichenden
+einschleichender
+einschleichendes
+einschleichst
+einschleicht
+einschleuse
+einschleusen
+einschleusend
+einschleusende
+einschleusendem
+einschleusenden
+einschleusender
+einschleusendes
+einschleusest
+einschleust
+einschleuste
+einschleusten
+einschleustest
+einschleustet
+einschlich
+einschlichen
+einschlichest
+einschlichst
+einschlicht
+einschließe
+einschließen
+einschließend
+einschließende
+einschließendem
+einschließenden
+einschließender
+einschließendes
+einschließest
+einschließlich
+einschließliche
+einschließlichem
+einschließlichen
+einschließlicher
+einschließliches
+einschließt
+einschlug
+einschlugen
+einschlugst
+einschlugt
+einschläfere
+einschläfern
+einschläfernd
+einschläfernde
+einschläferndem
+einschläfernden
+einschläfernder
+einschläferndes
+einschläferst
+einschläfert
+einschläferte
+einschläferten
+einschläfertest
+einschläfertet
+einschläfre
+einschlägig
+einschlägige
+einschlägigem
+einschlägigen
+einschlägiger
+einschlägiges
+einschlägst
+einschlägt
+einschmeichele
+einschmeicheln
+einschmeichelnd
+einschmeichelnde
+einschmeichelndem
+einschmeichelnden
+einschmeichelnder
+einschmeichelndes
+einschmeichelst
+einschmeichelt
+einschmeichelte
+einschmeichelten
+einschmeicheltest
+einschmeicheltet
+einschmeichle
+einschmelze
+einschmelzen
+einschmelzend
+einschmelzende
+einschmelzendem
+einschmelzenden
+einschmelzender
+einschmelzendes
+einschmelzt
+einschmiere
+einschmieren
+einschmierend
+einschmierende
+einschmierendem
+einschmierenden
+einschmierender
+einschmierendes
+einschmierst
+einschmiert
+einschmierte
+einschmierten
+einschmiertest
+einschmiertet
+einschneide
+einschneiden
+einschneidend
+einschneidende
+einschneidendem
+einschneidenden
+einschneidender
+einschneidendes
+einschneidest
+einschneidet
+einschreibe
+einschreiben
+einschreibend
+einschreibende
+einschreibendem
+einschreibenden
+einschreibender
+einschreibendes
+einschreibst
+einschreibt
+einschreite
+einschreiten
+einschreitend
+einschreitende
+einschreitendem
+einschreitenden
+einschreitender
+einschreitendes
+einschreitest
+einschreitet
+einschränke
+einschränken
+einschränkend
+einschränkende
+einschränkendem
+einschränkenden
+einschränkender
+einschränkendes
+einschränkst
+einschränkt
+einschränkte
+einschränkten
+einschränktest
+einschränktet
+einschule
+einschulen
+einschulend
+einschulende
+einschulendem
+einschulenden
+einschulender
+einschulendes
+einschulst
+einschult
+einschulte
+einschulten
+einschultest
+einschultet
+einschwenke
+einschwenken
+einschwenkend
+einschwenkende
+einschwenkendem
+einschwenkenden
+einschwenkender
+einschwenkendes
+einschwenkst
+einschwenkt
+einschwenkte
+einschwenkten
+einschwenktest
+einschwenktet
+einschätze
+einschätzen
+einschätzend
+einschätzende
+einschätzendem
+einschätzenden
+einschätzender
+einschätzendes
+einschätzest
+einschätzt
+einschätzte
+einschätzten
+einschätztest
+einschätztet
+einschüchtere
+einschüchtern
+einschüchternd
+einschüchternde
+einschüchterndem
+einschüchternden
+einschüchternder
+einschüchterndes
+einschüchterst
+einschüchtert
+einschüchterte
+einschüchterten
+einschüchtertest
+einschüchtertet
+einschüchtre
+einsehbar
+einsehbare
+einsehbarem
+einsehbaren
+einsehbarer
+einsehbares
+einsehe
+einsehen
+einsehend
+einsehende
+einsehendem
+einsehenden
+einsehender
+einsehendes
+einseht
+einseife
+einseifen
+einseifend
+einseifende
+einseifendem
+einseifenden
+einseifender
+einseifendes
+einseifst
+einseift
+einseifte
+einseiften
+einseiftest
+einseiftet
+einseitig
+einseitige
+einseitigem
+einseitigen
+einseitiger
+einseitiges
+einsende
+einsenden
+einsendend
+einsendende
+einsendendem
+einsendenden
+einsendender
+einsendendes
+einsendest
+einsendet
+einsendete
+einsendeten
+einsendetest
+einsendetet
+einsetzbar
+einsetzbare
+einsetzbarem
+einsetzbaren
+einsetzbarer
+einsetzbares
+einsetze
+einsetzen
+einsetzend
+einsetzende
+einsetzendem
+einsetzenden
+einsetzender
+einsetzendes
+einsetzest
+einsetzt
+einsetzte
+einsetzten
+einsetztest
+einsetztet
+einsichtig
+einsichtige
+einsichtigem
+einsichtigen
+einsichtiger
+einsichtigere
+einsichtigerem
+einsichtigeren
+einsichtigerer
+einsichtigeres
+einsichtiges
+einsichtigste
+einsichtigstem
+einsichtigsten
+einsichtigster
+einsichtigstes
+einsichtsvoll
+einsichtsvolle
+einsichtsvollem
+einsichtsvollen
+einsichtsvoller
+einsichtsvollere
+einsichtsvollerem
+einsichtsvolleren
+einsichtsvollerer
+einsichtsvolleres
+einsichtsvolles
+einsichtsvollste
+einsichtsvollstem
+einsichtsvollsten
+einsichtsvollster
+einsichtsvollstes
+einsickernde
+einsickernden
+einsickerndend
+einsickerndende
+einsickerndendem
+einsickerndenden
+einsickerndender
+einsickerndendes
+einsickerndest
+einsickerndet
+einsickerndete
+einsickerndeten
+einsickerndetest
+einsickerndetet
+einsiehst
+einsieht
+einsilbig
+einsilbige
+einsilbigem
+einsilbigen
+einsilbiger
+einsilbiges
+einsinke
+einsinken
+einsinkend
+einsinkende
+einsinkendem
+einsinkenden
+einsinkender
+einsinkendes
+einsinkst
+einsinkt
+einspaltig
+einspaltige
+einspaltigem
+einspaltigen
+einspaltiger
+einspaltiges
+einspanne
+einspannen
+einspannend
+einspannende
+einspannendem
+einspannenden
+einspannender
+einspannendes
+einspannst
+einspannt
+einspannte
+einspannten
+einspanntest
+einspanntet
+einspare
+einsparen
+einsparend
+einsparende
+einsparendem
+einsparenden
+einsparender
+einsparendes
+einsparst
+einspart
+einsparte
+einsparten
+einspartest
+einspartet
+einspeise
+einspeisen
+einspeisend
+einspeisende
+einspeisendem
+einspeisenden
+einspeisender
+einspeisendes
+einspeisest
+einspeist
+einspeiste
+einspeisten
+einspeistest
+einspeistet
+einsperre
+einsperren
+einsperrend
+einsperrende
+einsperrendem
+einsperrenden
+einsperrender
+einsperrendes
+einsperrst
+einsperrt
+einsperrte
+einsperrten
+einsperrtest
+einsperrtet
+einspiele
+einspielen
+einspielend
+einspielende
+einspielendem
+einspielenden
+einspielender
+einspielendes
+einspielst
+einspielt
+einspielte
+einspielten
+einspieltest
+einspieltet
+einsprachig
+einsprachige
+einsprachigem
+einsprachigen
+einsprachiger
+einsprachiges
+einspringe
+einspringen
+einspringend
+einspringende
+einspringendem
+einspringenden
+einspringender
+einspringendes
+einspringst
+einspringt
+einspritze
+einspritzen
+einspritzend
+einspritzende
+einspritzendem
+einspritzenden
+einspritzender
+einspritzendes
+einspritzest
+einspritzt
+einspritzte
+einspritzten
+einspritztest
+einspritztet
+einspurig
+einspurige
+einspurigem
+einspurigen
+einspuriger
+einspuriges
+einst
+einstampfe
+einstampfen
+einstampfend
+einstampfende
+einstampfendem
+einstampfenden
+einstampfender
+einstampfendes
+einstampfst
+einstampft
+einstampfte
+einstampften
+einstampftest
+einstampftet
+einstecke
+einstecken
+einsteckend
+einsteckende
+einsteckendem
+einsteckenden
+einsteckender
+einsteckendes
+einsteckst
+einsteckt
+einsteckte
+einsteckten
+einstecktest
+einstecktet
+einstehe
+einstehen
+einstehend
+einstehende
+einstehendem
+einstehenden
+einstehender
+einstehendes
+einstehst
+einsteht
+einsteige
+einsteigen
+einsteigend
+einsteigende
+einsteigendem
+einsteigenden
+einsteigender
+einsteigendes
+einsteigst
+einsteigt
+einstellbar
+einstellbare
+einstellbarem
+einstellbaren
+einstellbarer
+einstellbares
+einstelle
+einstellen
+einstellend
+einstellende
+einstellendem
+einstellenden
+einstellender
+einstellendes
+einstellig
+einstellige
+einstelligem
+einstelligen
+einstelliger
+einstelliges
+einstellst
+einstellt
+einstellte
+einstellten
+einstelltest
+einstelltet
+einstieg
+einstiegen
+einstiegst
+einstiegt
+einstig
+einstige
+einstigem
+einstigen
+einstiger
+einstiges
+einstimme
+einstimmen
+einstimmend
+einstimmende
+einstimmendem
+einstimmenden
+einstimmender
+einstimmendes
+einstimmig
+einstimmige
+einstimmigem
+einstimmigen
+einstimmiger
+einstimmiges
+einstimmst
+einstimmt
+einstimmte
+einstimmten
+einstimmtest
+einstimmtet
+einstmals
+einstoße
+einstoßen
+einstoßend
+einstoßende
+einstoßendem
+einstoßenden
+einstoßender
+einstoßendes
+einstoßt
+einstreiche
+einstreichen
+einstreichend
+einstreichende
+einstreichendem
+einstreichenden
+einstreichender
+einstreichendes
+einstreichst
+einstreicht
+einstreue
+einstreuen
+einstreuend
+einstreuende
+einstreuendem
+einstreuenden
+einstreuender
+einstreuendes
+einstreust
+einstreut
+einstreute
+einstreuten
+einstreutest
+einstreutet
+einstrich
+einstrichen
+einstrichest
+einstrichst
+einstricht
+einströme
+einströmen
+einströmend
+einströmende
+einströmendem
+einströmenden
+einströmender
+einströmendes
+einströmst
+einströmt
+einströmte
+einströmten
+einströmtest
+einströmtet
+einstudiere
+einstudieren
+einstudierend
+einstudierende
+einstudierendem
+einstudierenden
+einstudierender
+einstudierendes
+einstudierst
+einstudiert
+einstudierte
+einstudiertem
+einstudierten
+einstudierter
+einstudiertes
+einstudiertest
+einstudiertet
+einstufe
+einstufen
+einstufend
+einstufende
+einstufendem
+einstufenden
+einstufender
+einstufendes
+einstufig
+einstufige
+einstufigem
+einstufigen
+einstufiger
+einstufiges
+einstufst
+einstuft
+einstufte
+einstuften
+einstuftest
+einstuftet
+einstweilen
+einstweilig
+einstweilige
+einstweiligem
+einstweiligen
+einstweiliger
+einstweiliges
+einstöckig
+einstöckige
+einstöckigem
+einstöckigen
+einstöckiger
+einstöckiges
+einstündig
+einstündige
+einstündigem
+einstündigen
+einstündiger
+einstündiges
+einstürze
+einstürzen
+einstürzend
+einstürzende
+einstürzendem
+einstürzenden
+einstürzender
+einstürzendes
+einstürzest
+einstürzt
+einstürzte
+einstürzten
+einstürztest
+einstürztet
+eint
+eintauche
+eintauchen
+eintauchend
+eintauchende
+eintauchendem
+eintauchenden
+eintauchender
+eintauchendes
+eintauchst
+eintaucht
+eintauchte
+eintauchten
+eintauchtest
+eintauchtet
+eintauschbar
+eintauschbare
+eintauschbarem
+eintauschbaren
+eintauschbarer
+eintauschbares
+eintausche
+eintauschen
+eintauschend
+eintauschende
+eintauschendem
+eintauschenden
+eintauschender
+eintauschendes
+eintauschest
+eintauschst
+eintauscht
+eintauschte
+eintauschten
+eintauschtest
+eintauschtet
+eintausend
+einte
+einteile
+einteilen
+einteilend
+einteilende
+einteilendem
+einteilenden
+einteilender
+einteilendes
+einteilig
+einteilige
+einteiligem
+einteiligen
+einteiliger
+einteiliges
+einteilst
+einteilt
+einteilte
+einteilten
+einteiltest
+einteiltet
+einten
+eintest
+eintet
+eintippe
+eintippen
+eintippend
+eintippende
+eintippendem
+eintippenden
+eintippender
+eintippendes
+eintippst
+eintippt
+eintippte
+eintippten
+eintipptest
+eintipptet
+eintraf
+eintrafen
+eintrafest
+eintrafst
+eintraft
+eintrage
+eintragen
+eintragend
+eintragende
+eintragendem
+eintragenden
+eintragender
+eintragendes
+eintragt
+eintrat
+eintraten
+eintratest
+eintratet
+eintratst
+eintreffe
+eintreffen
+eintreffend
+eintreffende
+eintreffendem
+eintreffenden
+eintreffender
+eintreffendes
+eintrefft
+eintreibe
+eintreiben
+eintreibend
+eintreibende
+eintreibendem
+eintreibenden
+eintreibender
+eintreibendes
+eintreibst
+eintreibt
+eintrete
+eintreten
+eintretend
+eintretende
+eintretendem
+eintretenden
+eintretender
+eintretendes
+eintretet
+eintriffst
+eintrifft
+eintrit
+eintritst
+eintrockne
+eintrocknen
+eintrocknend
+eintrocknende
+eintrocknendem
+eintrocknenden
+eintrocknender
+eintrocknendes
+eintrocknest
+eintrocknet
+eintrocknete
+eintrockneten
+eintrocknetest
+eintrocknetet
+einträchtig
+einträchtige
+einträchtigem
+einträchtigen
+einträchtiger
+einträchtigere
+einträchtigerem
+einträchtigeren
+einträchtigerer
+einträchtigeres
+einträchtiges
+einträchtigste
+einträchtigstem
+einträchtigsten
+einträchtigster
+einträchtigstes
+einträglich
+einträgliche
+einträglichem
+einträglichen
+einträglicher
+einträglichere
+einträglicherem
+einträglicheren
+einträglicherer
+einträglicheres
+einträgliches
+einträglichste
+einträglichstem
+einträglichsten
+einträglichster
+einträglichstes
+einträgst
+einträgt
+einträte
+einträten
+einträtest
+einträtet
+eintägig
+eintägige
+eintägigem
+eintägigen
+eintägiger
+eintägiges
+eintönig
+eintönige
+eintönigem
+eintönigen
+eintöniger
+eintönigere
+eintönigerem
+eintönigeren
+eintönigerer
+eintönigeres
+eintöniges
+eintönigste
+eintönigstem
+eintönigsten
+eintönigster
+eintönigstes
+einverleibe
+einverleiben
+einverleibend
+einverleibende
+einverleibendem
+einverleibenden
+einverleibender
+einverleibendes
+einverleibst
+einverleibt
+einverleibte
+einverleibtem
+einverleibten
+einverleibter
+einverleibtes
+einverleibtest
+einverleibtet
+einverstanden
+einverstandene
+einverstandenem
+einverstandenen
+einverstandener
+einverstandenes
+einwandere
+einwandern
+einwandernd
+einwandernde
+einwanderndem
+einwandernden
+einwandernder
+einwanderndes
+einwanderst
+einwandert
+einwanderte
+einwanderten
+einwandertest
+einwandertet
+einwandfrei
+einwandfreie
+einwandfreiem
+einwandfreien
+einwandfreier
+einwandfreiere
+einwandfreierem
+einwandfreieren
+einwandfreierer
+einwandfreieres
+einwandfreies
+einwandfreiste
+einwandfreistem
+einwandfreisten
+einwandfreister
+einwandfreistes
+einwandre
+einweiche
+einweichen
+einweichend
+einweichende
+einweichendem
+einweichenden
+einweichender
+einweichendes
+einweichst
+einweicht
+einweichte
+einweichten
+einweichtest
+einweichtet
+einweihe
+einweihen
+einweihend
+einweihende
+einweihendem
+einweihenden
+einweihender
+einweihendes
+einweihst
+einweiht
+einweihte
+einweihten
+einweihtest
+einweihtet
+einweise
+einweisen
+einweisend
+einweisende
+einweisendem
+einweisenden
+einweisender
+einweisendes
+einweisest
+einweist
+einwende
+einwenden
+einwendend
+einwendende
+einwendendem
+einwendenden
+einwendender
+einwendendes
+einwendest
+einwendet
+einwendete
+einwendeten
+einwendetest
+einwendetet
+einwerfe
+einwerfen
+einwerfend
+einwerfende
+einwerfendem
+einwerfenden
+einwerfender
+einwerfendes
+einwerft
+einwickele
+einwickeln
+einwickelnd
+einwickelnde
+einwickelndem
+einwickelnden
+einwickelnder
+einwickelndes
+einwickelst
+einwickelt
+einwickelte
+einwickelten
+einwickeltest
+einwickeltet
+einwickle
+einwillige
+einwilligen
+einwilligend
+einwilligende
+einwilligendem
+einwilligenden
+einwilligender
+einwilligendes
+einwilligst
+einwilligt
+einwilligte
+einwilligten
+einwilligtest
+einwilligtet
+einwirke
+einwirken
+einwirkend
+einwirkende
+einwirkendem
+einwirkenden
+einwirkender
+einwirkendes
+einwirkst
+einwirkt
+einwirkte
+einwirkten
+einwirktest
+einwirktet
+einwärts
+einwöchig
+einwöchige
+einwöchigem
+einwöchigen
+einwöchiger
+einwöchiges
+einzahle
+einzahlen
+einzahlend
+einzahlende
+einzahlendem
+einzahlenden
+einzahlender
+einzahlendes
+einzahlst
+einzahlt
+einzahlte
+einzahlten
+einzahltest
+einzahltet
+einzeichne
+einzeichnen
+einzeichnend
+einzeichnende
+einzeichnendem
+einzeichnenden
+einzeichnender
+einzeichnendes
+einzeichnest
+einzeichnet
+einzeichnete
+einzeichneten
+einzeichnetest
+einzeichnetet
+einzeilig
+einzeilige
+einzeiligem
+einzeiligen
+einzeiliger
+einzeiliges
+einzeln
+einzelne
+einzelnem
+einzelnen
+einzelner
+einzelnes
+einziehbar
+einziehbare
+einziehbarem
+einziehbaren
+einziehbarer
+einziehbares
+einziehe
+einziehen
+einziehend
+einziehende
+einziehendem
+einziehenden
+einziehender
+einziehendes
+einziehst
+einzieht
+einzig
+einzigartig
+einzigartige
+einzigartigem
+einzigartigen
+einzigartiger
+einzigartiges
+einzige
+einzigem
+einzigen
+einziger
+einziges
+einzog
+einzogen
+einzogst
+einzogt
+einzuarbeiten
+einzuarbeitend
+einzuarbeitende
+einzuarbeitendem
+einzuarbeitenden
+einzuarbeitender
+einzuarbeitendes
+einzubauen
+einzubauend
+einzubauende
+einzubauendem
+einzubauenden
+einzubauender
+einzubauendes
+einzubehalten
+einzubehaltend
+einzubehaltende
+einzubehaltendem
+einzubehaltenden
+einzubehaltender
+einzubehaltendes
+einzubetten
+einzubettend
+einzubettende
+einzubettendem
+einzubettenden
+einzubettender
+einzubettendes
+einzubeziehen
+einzubeziehend
+einzubeziehende
+einzubeziehendem
+einzubeziehenden
+einzubeziehender
+einzubeziehendes
+einzubilden
+einzubinden
+einzubindend
+einzubindende
+einzubindendem
+einzubindenden
+einzubindender
+einzubindendes
+einzubringen
+einzubringend
+einzubringende
+einzubringendem
+einzubringenden
+einzubringender
+einzubringendes
+einzubüßen
+einzubüßend
+einzubüßende
+einzubüßendem
+einzubüßenden
+einzubüßender
+einzubüßendes
+einzudecken
+einzudeckend
+einzudeckende
+einzudeckendem
+einzudeckenden
+einzudeckender
+einzudeckendes
+einzudringen
+einzudrücken
+einzudrückend
+einzudrückende
+einzudrückendem
+einzudrückenden
+einzudrückender
+einzudrückendes
+einzuebnen
+einzuebnend
+einzuebnende
+einzuebnendem
+einzuebnenden
+einzuebnender
+einzuebnendes
+einzuengen
+einzuengend
+einzuengende
+einzuengendem
+einzuengenden
+einzuengender
+einzuengendes
+einzufahren
+einzufahrend
+einzufahrende
+einzufahrendem
+einzufahrenden
+einzufahrender
+einzufahrendes
+einzufallen
+einzufliegen
+einzufliegend
+einzufliegende
+einzufliegendem
+einzufliegenden
+einzufliegender
+einzufliegendes
+einzufordern
+einzufordernd
+einzufordernde
+einzuforderndem
+einzufordernden
+einzufordernder
+einzuforderndes
+einzufügen
+einzufügend
+einzufügende
+einzufügendem
+einzufügenden
+einzufügender
+einzufügendes
+einzuführen
+einzuführend
+einzuführende
+einzuführendem
+einzuführenden
+einzuführender
+einzuführendes
+einzugeben
+einzugebend
+einzugebende
+einzugebendem
+einzugebenden
+einzugebender
+einzugebendes
+einzugehen
+einzugestehen
+einzugestehend
+einzugestehende
+einzugestehendem
+einzugestehenden
+einzugestehender
+einzugestehendes
+einzugliedern
+einzugliedernd
+einzugliedernde
+einzugliederndem
+einzugliedernden
+einzugliedernder
+einzugliederndes
+einzugreifen
+einzuhalten
+einzuhaltend
+einzuhaltende
+einzuhaltendem
+einzuhaltenden
+einzuhaltender
+einzuhaltendes
+einzuhandeln
+einzuhandelnd
+einzuhandelnde
+einzuhandelndem
+einzuhandelnden
+einzuhandelnder
+einzuhandelndes
+einzuholen
+einzuholend
+einzuholende
+einzuholendem
+einzuholenden
+einzuholender
+einzuholendes
+einzukaufen
+einzukaufend
+einzukaufende
+einzukaufendem
+einzukaufenden
+einzukaufender
+einzukaufendes
+einzukommen
+einzuladen
+einzuladend
+einzuladende
+einzuladendem
+einzuladenden
+einzuladender
+einzuladendes
+einzulagern
+einzulagernd
+einzulagernde
+einzulagerndem
+einzulagernden
+einzulagernder
+einzulagerndes
+einzulassen
+einzulassend
+einzulassende
+einzulassendem
+einzulassenden
+einzulassender
+einzulassendes
+einzulaufen
+einzulegen
+einzulegend
+einzulegende
+einzulegendem
+einzulegenden
+einzulegender
+einzulegendes
+einzuleiten
+einzuleitend
+einzuleitende
+einzuleitendem
+einzuleitenden
+einzuleitender
+einzuleitendes
+einzulenken
+einzulesen
+einzulesend
+einzulesende
+einzulesendem
+einzulesenden
+einzulesender
+einzulesendes
+einzuloggen
+einzulösen
+einzulösend
+einzulösende
+einzulösendem
+einzulösenden
+einzulösender
+einzulösendes
+einzumischen
+einzumischend
+einzumischende
+einzumischendem
+einzumischenden
+einzumischender
+einzumischendes
+einzunehmen
+einzunehmend
+einzunehmende
+einzunehmendem
+einzunehmenden
+einzunehmender
+einzunehmendes
+einzuordnen
+einzuordnend
+einzuordnende
+einzuordnendem
+einzuordnenden
+einzuordnender
+einzuordnendes
+einzupacken
+einzupackend
+einzupackende
+einzupackendem
+einzupackenden
+einzupackender
+einzupackendes
+einzupflanzen
+einzupflanzend
+einzupflanzende
+einzupflanzendem
+einzupflanzenden
+einzupflanzender
+einzupflanzendes
+einzuprägen
+einzuprägend
+einzuprägende
+einzuprägendem
+einzuprägenden
+einzuprägender
+einzuprägendes
+einzureden
+einzuredend
+einzuredende
+einzuredendem
+einzuredenden
+einzuredender
+einzuredendes
+einzureiben
+einzureibend
+einzureibende
+einzureibendem
+einzureibenden
+einzureibender
+einzureibendes
+einzureichen
+einzureichend
+einzureichende
+einzureichendem
+einzureichenden
+einzureichender
+einzureichendes
+einzureihen
+einzureihend
+einzureihende
+einzureihendem
+einzureihenden
+einzureihender
+einzureihendes
+einzurichten
+einzurichtend
+einzurichtende
+einzurichtendem
+einzurichtenden
+einzurichtender
+einzurichtendes
+einzuräumen
+einzuräumend
+einzuräumende
+einzuräumendem
+einzuräumenden
+einzuräumender
+einzuräumendes
+einzusaugen
+einzusaugend
+einzusaugende
+einzusaugendem
+einzusaugenden
+einzusaugender
+einzusaugendes
+einzuschalten
+einzuschaltend
+einzuschaltende
+einzuschaltendem
+einzuschaltenden
+einzuschaltender
+einzuschaltendes
+einzuschenken
+einzuschenkend
+einzuschenkende
+einzuschenkendem
+einzuschenkenden
+einzuschenkender
+einzuschenkendes
+einzuschieben
+einzuschiebend
+einzuschiebende
+einzuschiebendem
+einzuschiebenden
+einzuschiebender
+einzuschiebendes
+einzuschlagen
+einzuschlagend
+einzuschlagende
+einzuschlagendem
+einzuschlagenden
+einzuschlagender
+einzuschlagendes
+einzuschleusen
+einzuschleusend
+einzuschleusende
+einzuschleusendem
+einzuschleusenden
+einzuschleusender
+einzuschleusendes
+einzuschließen
+einzuschließend
+einzuschließende
+einzuschließendem
+einzuschließenden
+einzuschließender
+einzuschließendes
+einzuschläfern
+einzuschläfernd
+einzuschläfernde
+einzuschläferndem
+einzuschläfernden
+einzuschläfernder
+einzuschläferndes
+einzuschmelzen
+einzuschmelzend
+einzuschmelzende
+einzuschmelzendem
+einzuschmelzenden
+einzuschmelzender
+einzuschmelzendes
+einzuschreiben
+einzuschreibend
+einzuschreibende
+einzuschreibendem
+einzuschreibenden
+einzuschreibender
+einzuschreibendes
+einzuschreiten
+einzuschränken
+einzuschätzen
+einzuschätzend
+einzuschätzende
+einzuschätzendem
+einzuschätzenden
+einzuschätzender
+einzuschätzendes
+einzuschüchtern
+einzuschüchternd
+einzuschüchternde
+einzuschüchterndem
+einzuschüchternden
+einzuschüchternder
+einzuschüchterndes
+einzusehen
+einzusehend
+einzusehende
+einzusehendem
+einzusehenden
+einzusehender
+einzusehendes
+einzusenden
+einzusendend
+einzusendende
+einzusendendem
+einzusendenden
+einzusendender
+einzusendendes
+einzusetzen
+einzusetzend
+einzusetzende
+einzusetzendem
+einzusetzenden
+einzusetzender
+einzusetzendes
+einzuspannen
+einzuspannend
+einzuspannende
+einzuspannendem
+einzuspannenden
+einzuspannender
+einzuspannendes
+einzusparen
+einzusparend
+einzusparende
+einzusparendem
+einzusparenden
+einzusparender
+einzusparendes
+einzuspeisen
+einzuspeisend
+einzuspeisende
+einzuspeisendem
+einzuspeisenden
+einzuspeisender
+einzuspeisendes
+einzusperren
+einzusperrend
+einzusperrende
+einzusperrendem
+einzusperrenden
+einzusperrender
+einzusperrendes
+einzuspielen
+einzuspielend
+einzuspielende
+einzuspielendem
+einzuspielenden
+einzuspielender
+einzuspielendes
+einzustampfen
+einzustampfend
+einzustampfende
+einzustampfendem
+einzustampfenden
+einzustampfender
+einzustampfendes
+einzustecken
+einzusteckend
+einzusteckende
+einzusteckendem
+einzusteckenden
+einzusteckender
+einzusteckendes
+einzusteigen
+einzustellen
+einzustellend
+einzustellende
+einzustellendem
+einzustellenden
+einzustellender
+einzustellendes
+einzustimmen
+einzustimmend
+einzustimmende
+einzustimmendem
+einzustimmenden
+einzustimmender
+einzustimmendes
+einzutauschen
+einzutauschend
+einzutauschende
+einzutauschendem
+einzutauschenden
+einzutauschender
+einzutauschendes
+einzuteilen
+einzuteilend
+einzuteilende
+einzuteilendem
+einzuteilenden
+einzuteilender
+einzuteilendes
+einzutragen
+einzutragend
+einzutragende
+einzutragendem
+einzutragenden
+einzutragender
+einzutragendes
+einzutreiben
+einzutreibend
+einzutreibende
+einzutreibendem
+einzutreibenden
+einzutreibender
+einzutreibendes
+einzutreten
+einzutretend
+einzutretende
+einzutretendem
+einzutretenden
+einzutretender
+einzutretendes
+einzuverleiben
+einzuverleibend
+einzuverleibende
+einzuverleibendem
+einzuverleibenden
+einzuverleibender
+einzuverleibendes
+einzuweisen
+einzuweisend
+einzuweisende
+einzuweisendem
+einzuweisenden
+einzuweisender
+einzuweisendes
+einzuwenden
+einzuwendend
+einzuwendende
+einzuwendendem
+einzuwendenden
+einzuwendender
+einzuwendendes
+einzuwerben
+einzuwerbend
+einzuwerbende
+einzuwerbendem
+einzuwerbenden
+einzuwerbender
+einzuwerbendes
+einzuwerfen
+einzuwerfend
+einzuwerfende
+einzuwerfendem
+einzuwerfenden
+einzuwerfender
+einzuwerfendes
+einzuwirken
+einzuzahlen
+einzuzahlend
+einzuzahlende
+einzuzahlendem
+einzuzahlenden
+einzuzahlender
+einzuzahlendes
+einzuziehen
+einzuziehend
+einzuziehende
+einzuziehendem
+einzuziehenden
+einzuziehender
+einzuziehendes
+einzäune
+einzäunen
+einzäunend
+einzäunende
+einzäunendem
+einzäunenden
+einzäunender
+einzäunendes
+einzäunst
+einzäunt
+einzäunte
+einzäunten
+einzäuntest
+einzäuntet
+einäschere
+einäschern
+einäschernd
+einäschernde
+einäscherndem
+einäschernden
+einäschernder
+einäscherndes
+einäscherst
+einäschert
+einäscherte
+einäscherten
+einäschertest
+einäschertet
+einäschre
+einäugig
+einäugige
+einäugigem
+einäugigen
+einäugiger
+einäugiges
+einübe
+einüben
+einübend
+einübende
+einübendem
+einübenden
+einübender
+einübendes
+einübst
+einübt
+einübte
+einübten
+einübtest
+einübtet
+eisenhaltig
+eisenhaltige
+eisenhaltigem
+eisenhaltigen
+eisenhaltiger
+eisenhaltiges
+eisenhart
+eisenharte
+eisenhartem
+eisenharten
+eisenharter
+eisenhartes
+eisern
+eiserne
+eisernem
+eisernen
+eiserner
+eisernes
+eisfrei
+eisfreie
+eisfreiem
+eisfreien
+eisfreier
+eisfreies
+eisgekühlt
+eisgekühlte
+eisgekühltem
+eisgekühlten
+eisgekühlter
+eisgekühltes
+eisig
+eisige
+eisigem
+eisigen
+eisiger
+eisigere
+eisigerem
+eisigeren
+eisigerer
+eisigeres
+eisiges
+eisigste
+eisigstem
+eisigsten
+eisigster
+eisigstes
+eiskalt
+eiskalte
+eiskaltem
+eiskalten
+eiskalter
+eiskaltes
+eiszeitlich
+eiszeitliche
+eiszeitlichem
+eiszeitlichen
+eiszeitlicher
+eiszeitliches
+eitel
+eitelste
+eitelstem
+eitelsten
+eitelster
+eitelstes
+eitere
+eiterig
+eiterige
+eiterigem
+eiterigen
+eiteriger
+eiteriges
+eitern
+eiternd
+eiternde
+eiterndem
+eiternden
+eiternder
+eiterndes
+eiterst
+eitert
+eiterte
+eiterten
+eitertest
+eitertet
+eitle
+eitlem
+eitlen
+eitler
+eitlere
+eitlerem
+eitleren
+eitlerer
+eitleres
+eitles
+eitre
+eitrig
+eitrige
+eitrigem
+eitrigen
+eitriger
+eitriges
+ekelerregend
+ekelerregende
+ekelerregendem
+ekelerregenden
+ekelerregender
+ekelerregendere
+ekelerregenderem
+ekelerregenderen
+ekelerregenderer
+ekelerregenderes
+ekelerregendes
+ekelerregendste
+ekelerregendstem
+ekelerregendsten
+ekelerregendster
+ekelerregendstes
+ekelhaft
+ekelhafte
+ekelhaftem
+ekelhaften
+ekelhafter
+ekelhaftere
+ekelhafterem
+ekelhafteren
+ekelhafterer
+ekelhafteres
+ekelhaftes
+ekelhafteste
+ekelhaftestem
+ekelhaftesten
+ekelhaftester
+ekelhaftestes
+ekelig
+ekelige
+ekeligem
+ekeligen
+ekeliger
+ekeliges
+eklatant
+eklatante
+eklatantem
+eklatanten
+eklatanter
+eklatantes
+eklig
+eklige
+ekligem
+ekligen
+ekliger
+ekliges
+ekstatisch
+ekstatische
+ekstatischem
+ekstatischen
+ekstatischer
+ekstatisches
+elaboriert
+elaborierte
+elaboriertem
+elaborierten
+elaborierter
+elaboriertes
+elastisch
+elastische
+elastischem
+elastischen
+elastischer
+elastischere
+elastischerem
+elastischeren
+elastischerer
+elastischeres
+elastisches
+elastischste
+elastischstem
+elastischsten
+elastischster
+elastischstes
+elegant
+elegante
+elegantem
+eleganten
+eleganter
+elegantere
+eleganterem
+eleganteren
+eleganterer
+eleganteres
+elegantes
+eleganteste
+elegantestem
+elegantesten
+elegantester
+elegantestes
+elegisch
+elegische
+elegischem
+elegischen
+elegischer
+elegisches
+elektr
+elektrisch
+elektrische
+elektrischem
+elektrischen
+elektrischer
+elektrisches
+elektrisiere
+elektrisieren
+elektrisierend
+elektrisierende
+elektrisierendem
+elektrisierenden
+elektrisierender
+elektrisierendes
+elektrisierst
+elektrisiert
+elektrisierte
+elektrisiertem
+elektrisierten
+elektrisierter
+elektrisiertes
+elektrisiertest
+elektrisiertet
+elektrochemisch
+elektrochemische
+elektrochemischem
+elektrochemischen
+elektrochemischer
+elektrochemisches
+elektrohydraulisch
+elektrohydraulische
+elektrohydraulischem
+elektrohydraulischen
+elektrohydraulischer
+elektrohydraulisches
+elektrolytisch
+elektrolytische
+elektrolytischem
+elektrolytischen
+elektrolytischer
+elektrolytisches
+elektromagnetisch
+elektromagnetische
+elektromagnetischem
+elektromagnetischen
+elektromagnetischer
+elektromagnetisches
+elektromechanisch
+elektromechanische
+elektromechanischem
+elektromechanischen
+elektromechanischer
+elektromechanisches
+elektronisch
+elektronische
+elektronischem
+elektronischen
+elektronischer
+elektronisches
+elektrostatisch
+elektrostatische
+elektrostatischem
+elektrostatischen
+elektrostatischer
+elektrostatisches
+elektrotechnisch
+elektrotechnische
+elektrotechnischem
+elektrotechnischen
+elektrotechnischer
+elektrotechnisches
+elementar
+elementare
+elementarem
+elementaren
+elementarer
+elementares
+elend
+elende
+elendem
+elenden
+elender
+elendere
+elenderem
+elenderen
+elenderer
+elenderes
+elendes
+elendste
+elendstem
+elendsten
+elendster
+elendstes
+elf
+elfeinhalb
+elfenbeinern
+elfenbeinerne
+elfenbeinernem
+elfenbeinernen
+elfenbeinerner
+elfenbeinernes
+elfhundert
+elfjährig
+elfjährige
+elfjährigem
+elfjährigen
+elfjähriger
+elfjähriges
+elfmal
+elfqqfach
+elfqqfache
+elfqqfachem
+elfqqfachen
+elfqqfacher
+elfqqfaches
+elft
+elftausend
+elfte
+elftel
+elftem
+elften
+elftens
+elfter
+elftes
+elftägig
+elftägige
+elftägigem
+elftägigen
+elftägiger
+elftägiges
+eliminierbar
+eliminierbare
+eliminierbarem
+eliminierbaren
+eliminierbarer
+eliminierbares
+eliminiere
+eliminieren
+eliminierend
+eliminierende
+eliminierendem
+eliminierenden
+eliminierender
+eliminierendes
+eliminierst
+eliminiert
+eliminierte
+eliminiertem
+eliminierten
+eliminierter
+eliminiertes
+eliminiertest
+eliminiertet
+elisabethanisch
+elisabethanische
+elisabethanischem
+elisabethanischen
+elisabethanischer
+elisabethanisches
+elitär
+elitäre
+elitärem
+elitären
+elitärer
+elitäres
+ellenlang
+ellenlange
+ellenlangem
+ellenlangen
+ellenlanger
+ellenlanges
+elliptisch
+elliptische
+elliptischem
+elliptischen
+elliptischer
+elliptisches
+eloxiert
+eloxierte
+eloxiertem
+eloxierten
+eloxierter
+eloxiertes
+elterlich
+elterliche
+elterlichem
+elterlichen
+elterlicher
+elterliches
+elternlos
+elternlose
+elternlosem
+elternlosen
+elternloser
+elternloses
+emanzipatorisch
+emanzipatorische
+emanzipatorischem
+emanzipatorischen
+emanzipatorischer
+emanzipatorisches
+emanzipiere
+emanzipieren
+emanzipierst
+emanzipiert
+emanzipierte
+emanzipiertem
+emanzipierten
+emanzipierter
+emanzipiertes
+emanzipiertest
+emanzipiertet
+embryonal
+embryonale
+embryonalem
+embryonalen
+embryonaler
+embryonales
+emeritiere
+emeritieren
+emeritierst
+emeritiert
+emeritierte
+emeritiertem
+emeritierten
+emeritierter
+emeritiertes
+emeritiertest
+emeritiertet
+emigriere
+emigrieren
+emigrierend
+emigrierende
+emigrierendem
+emigrierenden
+emigrierender
+emigrierendes
+emigrierst
+emigriert
+emigrierte
+emigriertem
+emigrierten
+emigrierter
+emigriertes
+emigriertest
+emigriertet
+eminent
+eminente
+eminentem
+eminenten
+eminenter
+eminentes
+emittiere
+emittieren
+emittierend
+emittierende
+emittierendem
+emittierenden
+emittierender
+emittierendes
+emittierst
+emittiert
+emittierte
+emittierten
+emittiertest
+emittiertet
+emotional
+emotionale
+emotionalem
+emotionalen
+emotionaler
+emotionalere
+emotionalerem
+emotionaleren
+emotionalerer
+emotionaleres
+emotionales
+emotionalste
+emotionalstem
+emotionalsten
+emotionalster
+emotionalstes
+emotionell
+emotionelle
+emotionellem
+emotionellen
+emotioneller
+emotionellere
+emotionellerem
+emotionelleren
+emotionellerer
+emotionelleres
+emotionelles
+emotionellste
+emotionellstem
+emotionellsten
+emotionellster
+emotionellstes
+empfahl
+empfahlen
+empfahlst
+empfahlt
+empfand
+empfanden
+empfandest
+empfandet
+empfandst
+empfange
+empfangen
+empfangend
+empfangende
+empfangendem
+empfangenden
+empfangender
+empfangendes
+empfangene
+empfangenem
+empfangenen
+empfangener
+empfangenes
+empfangsbereit
+empfangsbereite
+empfangsbereitem
+empfangsbereiten
+empfangsbereiter
+empfangsbereites
+empfangt
+empfehle
+empfehlen
+empfehlend
+empfehlende
+empfehlendem
+empfehlenden
+empfehlender
+empfehlendes
+empfehlenswert
+empfehlenswerte
+empfehlenswertem
+empfehlenswerten
+empfehlenswerter
+empfehlenswertes
+empfehlt
+empfiehlst
+empfiehlt
+empfinde
+empfinden
+empfindend
+empfindende
+empfindendem
+empfindenden
+empfindender
+empfindendes
+empfindest
+empfindet
+empfindlich
+empfindliche
+empfindlichem
+empfindlichen
+empfindlicher
+empfindlichere
+empfindlicherem
+empfindlicheren
+empfindlicherer
+empfindlicheres
+empfindliches
+empfindlichste
+empfindlichstem
+empfindlichsten
+empfindlichster
+empfindlichstes
+empfindsam
+empfindsame
+empfindsamem
+empfindsamen
+empfindsamer
+empfindsamere
+empfindsamerem
+empfindsameren
+empfindsamerer
+empfindsameres
+empfindsames
+empfindsamste
+empfindsamstem
+empfindsamsten
+empfindsamster
+empfindsamstes
+empfindungslos
+empfindungslose
+empfindungslosem
+empfindungslosen
+empfindungsloser
+empfindungslosere
+empfindungsloserem
+empfindungsloseren
+empfindungsloserer
+empfindungsloseres
+empfindungsloses
+empfindungsloseste
+empfindungslosestem
+empfindungslosesten
+empfindungslosester
+empfindungslosestes
+empfing
+empfingen
+empfingst
+empfingt
+empfohlen
+empfohlene
+empfohlenem
+empfohlenen
+empfohlener
+empfohlenes
+empfunden
+empfundene
+empfundenem
+empfundenen
+empfundener
+empfundenes
+empfänglich
+empfängliche
+empfänglichem
+empfänglichen
+empfänglicher
+empfängliches
+empfängst
+empfängt
+empirisch
+empirische
+empirischem
+empirischen
+empirischer
+empirisches
+empor
+emporarbeite
+emporarbeiten
+emporarbeitend
+emporarbeitende
+emporarbeitendem
+emporarbeitenden
+emporarbeitender
+emporarbeitendes
+emporarbeitest
+emporarbeitet
+emporarbeitete
+emporarbeiteten
+emporarbeitetest
+emporarbeitetet
+emporblicke
+emporblicken
+emporblickend
+emporblickende
+emporblickendem
+emporblickenden
+emporblickender
+emporblickendes
+emporblickst
+emporblickt
+emporblickte
+emporblickten
+emporblicktest
+emporblicktet
+emporgearbeitet
+emporgearbeitete
+emporgearbeitetem
+emporgearbeiteten
+emporgearbeiteter
+emporgearbeitetes
+emporgeblickt
+emporgeblickte
+emporgeblicktem
+emporgeblickten
+emporgeblickter
+emporgeblicktes
+emporgehievt
+emporgehievte
+emporgehievtem
+emporgehievten
+emporgehievter
+emporgehievtes
+emporgekommen
+emporgekommene
+emporgekommenem
+emporgekommenen
+emporgekommener
+emporgekommenes
+emporgeragt
+emporgeragte
+emporgeragtem
+emporgeragten
+emporgeragter
+emporgeragtes
+emporgeschossen
+emporgeschossene
+emporgeschossenem
+emporgeschossenen
+emporgeschossener
+emporgeschossenes
+emporgestiegen
+emporgestiegene
+emporgestiegenem
+emporgestiegenen
+emporgestiegener
+emporgestiegenes
+emporgestrebt
+emporgestrebte
+emporgestrebtem
+emporgestrebten
+emporgestrebter
+emporgestrebtes
+emporgewachsen
+emporgewachsene
+emporgewachsenem
+emporgewachsenen
+emporgewachsener
+emporgewachsenes
+emporhebe
+emporheben
+emporhebend
+emporhebende
+emporhebendem
+emporhebenden
+emporhebender
+emporhebendes
+emporhebst
+emporhebt
+emporkomme
+emporkommen
+emporkommend
+emporkommende
+emporkommendem
+emporkommenden
+emporkommender
+emporkommendes
+emporkommst
+emporkommt
+emporrage
+emporragen
+emporragend
+emporragende
+emporragendem
+emporragenden
+emporragender
+emporragendes
+emporragst
+emporragt
+emporragte
+emporragten
+emporragtest
+emporragtet
+emporschieße
+emporschießen
+emporschießend
+emporschießende
+emporschießendem
+emporschießenden
+emporschießender
+emporschießendes
+emporschießest
+emporschießt
+emporsteige
+emporsteigen
+emporsteigend
+emporsteigende
+emporsteigendem
+emporsteigenden
+emporsteigender
+emporsteigendes
+emporsteigst
+emporsteigt
+emporstemme
+emporstemmen
+emporstemmend
+emporstemmende
+emporstemmendem
+emporstemmenden
+emporstemmender
+emporstemmendes
+emporstemmst
+emporstemmt
+emporstemmte
+emporstemmten
+emporstemmtest
+emporstemmtet
+emporstrebe
+emporstreben
+emporstrebend
+emporstrebende
+emporstrebendem
+emporstrebenden
+emporstrebender
+emporstrebendes
+emporstrebst
+emporstrebt
+emporstrebte
+emporstrebten
+emporstrebtest
+emporstrebtet
+emporziehe
+emporziehen
+emporziehend
+emporziehende
+emporziehendem
+emporziehenden
+emporziehender
+emporziehendes
+emporziehst
+emporzieht
+empöre
+empören
+empörend
+empörende
+empörendem
+empörenden
+empörender
+empörendes
+empörst
+empört
+empörte
+empörtem
+empörten
+empörter
+empörtes
+empörtest
+empörtet
+emsig
+emsige
+emsigem
+emsigen
+emsiger
+emsigere
+emsigerem
+emsigeren
+emsigerer
+emsigeres
+emsiges
+emsigste
+emsigstem
+emsigsten
+emsigster
+emsigstes
+emulgiere
+emulgieren
+emulgierend
+emulgierende
+emulgierendem
+emulgierenden
+emulgierender
+emulgierendes
+emulgierst
+emulgiert
+emulgierte
+emulgiertem
+emulgierten
+emulgierter
+emulgiertes
+emulgiertest
+emulgiertet
+emuliere
+emulieren
+emulierend
+emulierende
+emulierendem
+emulierenden
+emulierender
+emulierendes
+emulierst
+emuliert
+emulierte
+emuliertem
+emulierten
+emulierter
+emuliertes
+emuliertest
+emuliertet
+encodiere
+encodieren
+encodierend
+encodierende
+encodierendem
+encodierenden
+encodierender
+encodierendes
+encodierst
+encodiert
+encodierte
+encodiertem
+encodierten
+encodierter
+encodiertes
+encodiertest
+encodiertet
+ende
+enden
+endend
+endende
+endendem
+endenden
+endender
+endendes
+endest
+endet
+endete
+endeten
+endetest
+endetet
+endgültig
+endgültige
+endgültigem
+endgültigen
+endgültiger
+endgültigere
+endgültigerem
+endgültigeren
+endgültigerer
+endgültigeres
+endgültiges
+endgültigste
+endgültigstem
+endgültigsten
+endgültigster
+endgültigstes
+endlagenabhängig
+endlich
+endliche
+endlichem
+endlichen
+endlicher
+endliches
+endlos
+endlose
+endlosem
+endlosen
+endloser
+endloses
+endogen
+endogene
+endogenem
+endogenen
+endogener
+endogenes
+endrekursiv
+endrekursive
+endrekursivem
+endrekursiven
+endrekursiver
+endrekursives
+energetisch
+energetische
+energetischem
+energetischen
+energetischer
+energetisches
+energiearm
+energiearme
+energiearmem
+energiearmen
+energiearmer
+energiearmes
+energiebewusst
+energiebewusste
+energiebewusstem
+energiebewussten
+energiebewusster
+energiebewusstes
+energiefressend
+energiefressende
+energiefressendem
+energiefressenden
+energiefressender
+energiefressendes
+energiegeladen
+energiegeladene
+energiegeladenem
+energiegeladenen
+energiegeladener
+energiegeladenes
+energielos
+energielose
+energielosem
+energielosen
+energieloser
+energieloses
+energietechnisch
+energietechnische
+energietechnischem
+energietechnischen
+energietechnischer
+energietechnisches
+energisch
+energische
+energischem
+energischen
+energischer
+energischere
+energischerem
+energischeren
+energischerer
+energischeres
+energisches
+energischste
+energischstem
+energischsten
+energischster
+energischstes
+enerviere
+enervieren
+enervierend
+enervierende
+enervierendem
+enervierenden
+enervierender
+enervierendes
+enervierst
+enerviert
+enervierte
+enerviertem
+enervierten
+enervierter
+enerviertes
+enerviertest
+enerviertet
+eng
+engagiere
+engagieren
+engagierend
+engagierende
+engagierendem
+engagierenden
+engagierender
+engagierendes
+engagierst
+engagiert
+engagierte
+engagiertem
+engagierten
+engagierter
+engagiertere
+engagierterem
+engagierteren
+engagierterer
+engagierteres
+engagiertes
+engagiertest
+engagierteste
+engagiertestem
+engagiertesten
+engagiertester
+engagiertestes
+engagiertet
+enge
+engelhaft
+engelhafte
+engelhaftem
+engelhaften
+engelhafter
+engelhaftes
+engem
+engen
+engend
+engende
+engendem
+engenden
+engender
+engendes
+enger
+engere
+engerem
+engeren
+engerer
+engeres
+enges
+engherzig
+engherzige
+engherzigem
+engherzigen
+engherziger
+engherziges
+engl
+englisch
+englische
+englischem
+englischen
+englischer
+englischere
+englischerem
+englischeren
+englischerer
+englischeres
+englisches
+englischsprachig
+englischsprachige
+englischsprachigem
+englischsprachigen
+englischsprachiger
+englischsprachiges
+englischste
+englischstem
+englischsten
+englischster
+englischstes
+engmaschig
+engmaschige
+engmaschigem
+engmaschigen
+engmaschiger
+engmaschiges
+engspurig
+engspurige
+engspurigem
+engspurigen
+engspuriger
+engspuriges
+engst
+engste
+engstem
+engsten
+engster
+engstes
+engstirnig
+engstirnige
+engstirnigem
+engstirnigen
+engstirniger
+engstirniges
+engt
+engte
+engten
+engtest
+engtet
+engumrissen
+engumrissene
+engumrissenem
+engumrissenen
+engumrissener
+engumrissenes
+engverbunden
+engverbundene
+engverbundenem
+engverbundenen
+engverbundener
+engverbundenes
+enorm
+enorme
+enormem
+enormen
+enormer
+enormere
+enormerem
+enormeren
+enormerer
+enormeres
+enormes
+enormste
+enormstem
+enormsten
+enormster
+enormstes
+enstehe
+enstehen
+enstehend
+enstehende
+enstehendem
+enstehenden
+enstehender
+enstehendes
+enstehst
+ensteht
+entarte
+entarten
+entartend
+entartende
+entartendem
+entartenden
+entartender
+entartendes
+entartest
+entartet
+entartete
+entartetem
+entarteten
+entarteter
+entartetes
+entartetest
+entartetet
+entband
+entbanden
+entbandest
+entbandet
+entbandst
+entbehre
+entbehren
+entbehrend
+entbehrende
+entbehrendem
+entbehrenden
+entbehrender
+entbehrendes
+entbehrlich
+entbehrliche
+entbehrlichem
+entbehrlichen
+entbehrlicher
+entbehrlichere
+entbehrlicherem
+entbehrlicheren
+entbehrlicherer
+entbehrlicheres
+entbehrliches
+entbehrlichste
+entbehrlichstem
+entbehrlichsten
+entbehrlichster
+entbehrlichstes
+entbehrst
+entbehrt
+entbehrte
+entbehrtem
+entbehrten
+entbehrter
+entbehrtes
+entbehrtest
+entbehrtet
+entbinde
+entbinden
+entbindend
+entbindende
+entbindendem
+entbindenden
+entbindender
+entbindendes
+entbindest
+entbindet
+entblättere
+entblättern
+entblätternd
+entblätternde
+entblätterndem
+entblätternden
+entblätternder
+entblätterndes
+entblätterst
+entblättert
+entblätterte
+entblättertem
+entblätterten
+entblätterter
+entblättertes
+entblättertest
+entblättertet
+entblättre
+entblöße
+entblößen
+entblößend
+entblößende
+entblößendem
+entblößenden
+entblößender
+entblößendes
+entblößest
+entblößt
+entblößte
+entblößtem
+entblößten
+entblößter
+entblößtes
+entblößtest
+entblößtet
+entbrannte
+entbrannten
+entbranntest
+entbranntet
+entbrenne
+entbrennen
+entbrennend
+entbrennende
+entbrennendem
+entbrennenden
+entbrennender
+entbrennendes
+entbrennst
+entbrennt
+entbunden
+entbundene
+entbundenem
+entbundenen
+entbundener
+entbundenes
+entdecke
+entdecken
+entdeckend
+entdeckende
+entdeckendem
+entdeckenden
+entdeckender
+entdeckendes
+entdeckst
+entdeckt
+entdeckte
+entdecktem
+entdeckten
+entdeckter
+entdecktes
+entdecktest
+entdecktet
+entehre
+entehren
+entehrend
+entehrende
+entehrendem
+entehrenden
+entehrender
+entehrendes
+entehrst
+entehrt
+entehrte
+entehrtem
+entehrten
+entehrter
+entehrtes
+entehrtest
+entehrtet
+enteigne
+enteignen
+enteignend
+enteignende
+enteignendem
+enteignenden
+enteignender
+enteignendes
+enteignest
+enteignet
+enteignete
+enteignetem
+enteigneten
+enteigneter
+enteignetes
+enteignetest
+enteignetet
+enteile
+enteilen
+enteilend
+enteilende
+enteilendem
+enteilenden
+enteilender
+enteilendes
+enteilst
+enteilt
+enteilte
+enteiltem
+enteilten
+enteilter
+enteiltes
+enteiltest
+enteiltet
+enteise
+enteisen
+enteisend
+enteisende
+enteisendem
+enteisenden
+enteisender
+enteisendes
+enteisest
+enteist
+enteiste
+enteistem
+enteisten
+enteister
+enteistes
+enteistest
+enteistet
+enterbe
+enterben
+enterbend
+enterbende
+enterbendem
+enterbenden
+enterbender
+enterbendes
+enterbst
+enterbt
+enterbte
+enterbtem
+enterbten
+enterbter
+enterbtes
+enterbtest
+enterbtet
+entere
+entern
+enternd
+enternde
+enterndem
+enternden
+enternder
+enterndes
+enterst
+entert
+enterte
+enterten
+entertest
+entertet
+entfache
+entfachen
+entfachend
+entfachende
+entfachendem
+entfachenden
+entfachender
+entfachendes
+entfachst
+entfacht
+entfachte
+entfachtem
+entfachten
+entfachter
+entfachtes
+entfachtest
+entfachtet
+entfahre
+entfahren
+entfahrend
+entfahrende
+entfahrendem
+entfahrenden
+entfahrender
+entfahrendes
+entfahrt
+entfalle
+entfallen
+entfallend
+entfallende
+entfallendem
+entfallenden
+entfallender
+entfallendes
+entfallene
+entfallenem
+entfallenen
+entfallener
+entfallenes
+entfallt
+entfalte
+entfalten
+entfaltend
+entfaltende
+entfaltendem
+entfaltenden
+entfaltender
+entfaltendes
+entfaltest
+entfaltet
+entfaltete
+entfaltetem
+entfalteten
+entfalteter
+entfaltetes
+entfaltetest
+entfaltetet
+entferne
+entfernen
+entfernend
+entfernende
+entfernendem
+entfernenden
+entfernender
+entfernendes
+entfernst
+entfernt
+entfernte
+entferntem
+entfernten
+entfernter
+entferntere
+entfernterem
+entfernteren
+entfernterer
+entfernteres
+entferntes
+entferntest
+entfernteste
+entferntestem
+entferntesten
+entferntester
+entferntestes
+entferntet
+entfessele
+entfesseln
+entfesselnd
+entfesselnde
+entfesselndem
+entfesselnden
+entfesselnder
+entfesselndes
+entfesselst
+entfesselt
+entfesselte
+entfesseltem
+entfesselten
+entfesselter
+entfesseltes
+entfesseltest
+entfesseltet
+entfessle
+entfette
+entfetten
+entfettend
+entfettende
+entfettendem
+entfettenden
+entfettender
+entfettendes
+entfettest
+entfettet
+entfettete
+entfettetem
+entfetteten
+entfetteter
+entfettetes
+entfettetest
+entfettetet
+entfiel
+entfielen
+entfielst
+entfielt
+entfilze
+entfilzen
+entfilzend
+entfilzende
+entfilzendem
+entfilzenden
+entfilzender
+entfilzendes
+entfilzest
+entfilzt
+entfilzte
+entfilztem
+entfilzten
+entfilzter
+entfilztes
+entfilztest
+entfilztet
+entflamme
+entflammen
+entflammend
+entflammende
+entflammendem
+entflammenden
+entflammender
+entflammendes
+entflammst
+entflammt
+entflammte
+entflammtem
+entflammten
+entflammter
+entflammtes
+entflammtest
+entflammtet
+entfliehe
+entfliehen
+entfliehend
+entfliehende
+entfliehendem
+entfliehenden
+entfliehender
+entfliehendes
+entfliehst
+entflieht
+entfloh
+entflohen
+entflohene
+entflohenem
+entflohenen
+entflohener
+entflohenes
+entflohst
+entfloht
+entfremde
+entfremden
+entfremdend
+entfremdende
+entfremdendem
+entfremdenden
+entfremdender
+entfremdendes
+entfremdest
+entfremdet
+entfremdete
+entfremdetem
+entfremdeten
+entfremdeter
+entfremdetes
+entfremdetest
+entfremdetet
+entfuhr
+entfuhren
+entfuhrst
+entfuhrt
+entfällst
+entfällt
+entfärbe
+entfärben
+entfärbend
+entfärbende
+entfärbendem
+entfärbenden
+entfärbender
+entfärbendes
+entfärbst
+entfärbt
+entfärbte
+entfärbtem
+entfärbten
+entfärbter
+entfärbtes
+entfärbtest
+entfärbtet
+entführe
+entführen
+entführend
+entführende
+entführendem
+entführenden
+entführender
+entführendes
+entführst
+entführt
+entführte
+entführtem
+entführten
+entführter
+entführtes
+entführtest
+entführtet
+entgangen
+entgangene
+entgangenem
+entgangenen
+entgangener
+entgangenes
+entgegen
+entgegenarbeite
+entgegenarbeiten
+entgegenarbeitend
+entgegenarbeitende
+entgegenarbeitendem
+entgegenarbeitenden
+entgegenarbeitender
+entgegenarbeitendes
+entgegenarbeitest
+entgegenarbeitet
+entgegenarbeitete
+entgegenarbeiteten
+entgegenarbeitetest
+entgegenarbeitetet
+entgegenblickst
+entgegenblickt
+entgegenbringe
+entgegenbringen
+entgegenbringend
+entgegenbringende
+entgegenbringendem
+entgegenbringenden
+entgegenbringender
+entgegenbringendes
+entgegenbringst
+entgegenbringt
+entgegeneile
+entgegeneilen
+entgegeneilend
+entgegeneilende
+entgegeneilendem
+entgegeneilenden
+entgegeneilender
+entgegeneilendes
+entgegeneilst
+entgegeneilt
+entgegeneilte
+entgegeneilten
+entgegeneiltest
+entgegeneiltet
+entgegengearbeitet
+entgegengearbeitete
+entgegengearbeitetem
+entgegengearbeiteten
+entgegengearbeiteter
+entgegengearbeitetes
+entgegengebracht
+entgegengebrachte
+entgegengebrachtem
+entgegengebrachten
+entgegengebrachter
+entgegengebrachtes
+entgegengeeilt
+entgegengeeilte
+entgegengeeiltem
+entgegengeeilten
+entgegengeeilter
+entgegengeeiltes
+entgegengegangen
+entgegengegangene
+entgegengegangenem
+entgegengegangenen
+entgegengegangener
+entgegengegangenes
+entgegengehalten
+entgegengehaltene
+entgegengehaltenem
+entgegengehaltenen
+entgegengehaltener
+entgegengehaltenes
+entgegengehe
+entgegengehen
+entgegengehend
+entgegengehende
+entgegengehendem
+entgegengehenden
+entgegengehender
+entgegengehendes
+entgegengehst
+entgegengeht
+entgegengekommen
+entgegengekommene
+entgegengekommenem
+entgegengekommenen
+entgegengekommener
+entgegengekommenes
+entgegengelaufen
+entgegengelaufene
+entgegengelaufenem
+entgegengelaufenen
+entgegengelaufener
+entgegengelaufenes
+entgegengenommen
+entgegengenommene
+entgegengenommenem
+entgegengenommenen
+entgegengenommener
+entgegengenommenes
+entgegengesehen
+entgegengesehene
+entgegengesehenem
+entgegengesehenen
+entgegengesehener
+entgegengesehenes
+entgegengesetzt
+entgegengesetzte
+entgegengesetztem
+entgegengesetzten
+entgegengesetzter
+entgegengesetztes
+entgegengestanden
+entgegengestandene
+entgegengestandenem
+entgegengestandenen
+entgegengestandener
+entgegengestandenes
+entgegengestellt
+entgegengestellte
+entgegengestelltem
+entgegengestellten
+entgegengestellter
+entgegengestelltes
+entgegengetreten
+entgegengetretene
+entgegengetretenem
+entgegengetretenen
+entgegengetretener
+entgegengetretenes
+entgegengewirkt
+entgegengewirkte
+entgegengewirktem
+entgegengewirkten
+entgegengewirkter
+entgegengewirktes
+entgegenhalte
+entgegenhalten
+entgegenhaltend
+entgegenhaltende
+entgegenhaltendem
+entgegenhaltenden
+entgegenhaltender
+entgegenhaltendes
+entgegenhaltet
+entgegenkam
+entgegenkamen
+entgegenkamst
+entgegenkamt
+entgegenkomme
+entgegenkommen
+entgegenkommend
+entgegenkommende
+entgegenkommendem
+entgegenkommenden
+entgegenkommender
+entgegenkommendes
+entgegenkommst
+entgegenkommt
+entgegenlaufe
+entgegenlaufen
+entgegenlaufend
+entgegenlaufende
+entgegenlaufendem
+entgegenlaufenden
+entgegenlaufender
+entgegenlaufendes
+entgegenlauft
+entgegennehme
+entgegennehmen
+entgegennehmend
+entgegennehmende
+entgegennehmendem
+entgegennehmenden
+entgegennehmender
+entgegennehmendes
+entgegennehmt
+entgegensah
+entgegensahen
+entgegensahst
+entgegensaht
+entgegensehe
+entgegensehen
+entgegensehend
+entgegensehende
+entgegensehendem
+entgegensehenden
+entgegensehender
+entgegensehendes
+entgegenseht
+entgegensetze
+entgegensetzen
+entgegensetzend
+entgegensetzende
+entgegensetzendem
+entgegensetzenden
+entgegensetzender
+entgegensetzendes
+entgegensetzest
+entgegensetzt
+entgegensetzte
+entgegensetzten
+entgegensetztest
+entgegensetztet
+entgegensiehst
+entgegensieht
+entgegenstand
+entgegenstanden
+entgegenstandest
+entgegenstandet
+entgegenstandst
+entgegenstehe
+entgegenstehen
+entgegenstehend
+entgegenstehende
+entgegenstehendem
+entgegenstehenden
+entgegenstehender
+entgegenstehendes
+entgegenstehst
+entgegensteht
+entgegenstelle
+entgegenstellen
+entgegenstellend
+entgegenstellende
+entgegenstellendem
+entgegenstellenden
+entgegenstellender
+entgegenstellendes
+entgegenstellst
+entgegenstellt
+entgegenstellte
+entgegenstellten
+entgegenstelltest
+entgegenstelltet
+entgegenstrecke
+entgegenstrecken
+entgegenstreckend
+entgegenstreckende
+entgegenstreckendem
+entgegenstreckenden
+entgegenstreckender
+entgegenstreckendes
+entgegenstreckst
+entgegenstreckt
+entgegenstreckte
+entgegenstreckten
+entgegenstrecktest
+entgegenstrecktet
+entgegentrete
+entgegentreten
+entgegentretend
+entgegentretende
+entgegentretendem
+entgegentretenden
+entgegentretender
+entgegentretendes
+entgegentretet
+entgegenwachse
+entgegenwachsen
+entgegenwachsend
+entgegenwachsende
+entgegenwachsendem
+entgegenwachsenden
+entgegenwachsender
+entgegenwachsendes
+entgegenwachst
+entgegenwirke
+entgegenwirken
+entgegenwirkend
+entgegenwirkende
+entgegenwirkendem
+entgegenwirkenden
+entgegenwirkender
+entgegenwirkendes
+entgegenwirkst
+entgegenwirkt
+entgegenwirkte
+entgegenwirkten
+entgegenwirktest
+entgegenwirktet
+entgegenzustellen
+entgegenzustellend
+entgegenzustellende
+entgegenzustellendem
+entgegenzustellenden
+entgegenzustellender
+entgegenzustellendes
+entgegenzutreten
+entgegne
+entgegnen
+entgegnend
+entgegnende
+entgegnendem
+entgegnenden
+entgegnender
+entgegnendes
+entgegnest
+entgegnet
+entgegnete
+entgegneten
+entgegnetest
+entgegnetet
+entgehbar
+entgehbare
+entgehbarem
+entgehbaren
+entgehbarer
+entgehbares
+entgehe
+entgehen
+entgehend
+entgehende
+entgehendem
+entgehenden
+entgehender
+entgehendes
+entgehst
+entgeht
+entgeistert
+entgeisterte
+entgeistertem
+entgeisterten
+entgeisterter
+entgeistertes
+entgeltfrei
+entgeltfreie
+entgeltfreiem
+entgeltfreien
+entgeltfreier
+entgeltfreies
+entgifte
+entgiften
+entgiftend
+entgiftende
+entgiftendem
+entgiftenden
+entgiftender
+entgiftendes
+entgiftest
+entgiftet
+entgiftete
+entgiftetem
+entgifteten
+entgifteter
+entgiftetes
+entgiftetest
+entgiftetet
+entging
+entginge
+entgingen
+entgingest
+entginget
+entgingst
+entgingt
+entgleise
+entgleisen
+entgleisend
+entgleisende
+entgleisendem
+entgleisenden
+entgleisender
+entgleisendes
+entgleisest
+entgleist
+entgleiste
+entgleistem
+entgleisten
+entgleister
+entgleistes
+entgleistest
+entgleistet
+entgleite
+entgleiten
+entgleitend
+entgleitende
+entgleitendem
+entgleitenden
+entgleitender
+entgleitendes
+entgleitest
+entgleitet
+entglitt
+entglitten
+entglittene
+entglittenem
+entglittenen
+entglittener
+entglittenes
+entglittest
+entglittet
+entgolten
+entgoltene
+entgoltenem
+entgoltenen
+entgoltener
+entgoltenes
+entgrate
+entgraten
+entgratend
+entgratende
+entgratendem
+entgratenden
+entgratender
+entgratendes
+entgratest
+entgratet
+entgratete
+entgratetem
+entgrateten
+entgrateter
+entgratetes
+entgratetest
+entgratetet
+enthaare
+enthaaren
+enthaarend
+enthaarende
+enthaarendem
+enthaarenden
+enthaarender
+enthaarendes
+enthaarst
+enthaart
+enthaarte
+enthaartem
+enthaarten
+enthaarter
+enthaartes
+enthaartest
+enthaartet
+enthalte
+enthalten
+enthaltend
+enthaltende
+enthaltendem
+enthaltenden
+enthaltender
+enthaltendes
+enthaltene
+enthaltenem
+enthaltenen
+enthaltener
+enthaltenes
+enthaltet
+enthaltsam
+enthaltsame
+enthaltsamem
+enthaltsamen
+enthaltsamer
+enthaltsamere
+enthaltsamerem
+enthaltsameren
+enthaltsamerer
+enthaltsameres
+enthaltsames
+enthaltsamste
+enthaltsamstem
+enthaltsamsten
+enthaltsamster
+enthaltsamstes
+enthaupte
+enthaupten
+enthauptest
+enthauptet
+enthauptete
+enthauptetem
+enthaupteten
+enthaupteter
+enthauptetes
+enthauptetest
+enthauptetet
+enthebe
+entheben
+enthebend
+enthebende
+enthebendem
+enthebenden
+enthebender
+enthebendes
+enthebst
+enthebt
+enthielt
+enthielten
+enthieltest
+enthieltet
+enthieltst
+enthob
+enthoben
+enthobene
+enthobenem
+enthobenen
+enthobener
+enthobenes
+enthobst
+enthobt
+enthusiastisch
+enthusiastische
+enthusiastischem
+enthusiastischen
+enthusiastischer
+enthusiastisches
+enthält
+enthältst
+enthülle
+enthüllen
+enthüllend
+enthüllende
+enthüllendem
+enthüllenden
+enthüllender
+enthüllendes
+enthüllst
+enthüllt
+enthüllte
+enthülltem
+enthüllten
+enthüllter
+enthülltes
+enthülltest
+enthülltet
+entkam
+entkamen
+entkamst
+entkamt
+entkeime
+entkeimen
+entkeimend
+entkeimende
+entkeimendem
+entkeimenden
+entkeimender
+entkeimendes
+entkeimst
+entkeimt
+entkeimte
+entkeimtem
+entkeimten
+entkeimter
+entkeimtes
+entkeimtest
+entkeimtet
+entkleide
+entkleiden
+entkleidend
+entkleidende
+entkleidendem
+entkleidenden
+entkleidender
+entkleidendes
+entkleidest
+entkleidet
+entkleidete
+entkleidetem
+entkleideten
+entkleideter
+entkleidetes
+entkleidetest
+entkleidetet
+entkommbar
+entkommbare
+entkommbarem
+entkommbaren
+entkommbarer
+entkommbares
+entkomme
+entkommen
+entkommend
+entkommende
+entkommendem
+entkommenden
+entkommender
+entkommendes
+entkommene
+entkommenem
+entkommenen
+entkommener
+entkommenes
+entkommst
+entkommt
+entkoppelbar
+entkoppelbare
+entkoppelbarem
+entkoppelbaren
+entkoppelbarer
+entkoppelbares
+entkoppele
+entkoppeln
+entkoppelnd
+entkoppelnde
+entkoppelndem
+entkoppelnden
+entkoppelnder
+entkoppelndes
+entkoppelst
+entkoppelt
+entkoppelte
+entkoppeltem
+entkoppelten
+entkoppelter
+entkoppeltes
+entkoppeltest
+entkoppeltet
+entkopple
+entkorke
+entkorken
+entkorkst
+entkorkt
+entkorkte
+entkorkten
+entkorktest
+entkorktet
+entkräfte
+entkräften
+entkräftend
+entkräftende
+entkräftendem
+entkräftenden
+entkräftender
+entkräftendes
+entkräftest
+entkräftet
+entkräftete
+entkräftetem
+entkräfteten
+entkräfteter
+entkräftetes
+entkräftetest
+entkräftetet
+entlade
+entladen
+entladend
+entladende
+entladendem
+entladenden
+entladender
+entladendes
+entladene
+entladenem
+entladenen
+entladener
+entladenes
+entladet
+entlang
+entlangfährst
+entlangfährt
+entlanggehe
+entlanggehen
+entlanggehend
+entlanggehende
+entlanggehendem
+entlanggehenden
+entlanggehender
+entlanggehendes
+entlanggehst
+entlanggeht
+entlangwandere
+entlangwandern
+entlangwandernd
+entlangwandernde
+entlangwanderndem
+entlangwandernden
+entlangwandernder
+entlangwanderndes
+entlangwanderst
+entlangwandert
+entlangwanderte
+entlangwanderten
+entlangwandertest
+entlangwandertet
+entlangwandre
+entlarve
+entlarven
+entlarvend
+entlarvende
+entlarvendem
+entlarvenden
+entlarvender
+entlarvendes
+entlarvst
+entlarvt
+entlarvte
+entlarvtem
+entlarvten
+entlarvter
+entlarvtes
+entlarvtest
+entlarvtet
+entlasse
+entlassen
+entlassend
+entlassende
+entlassendem
+entlassenden
+entlassender
+entlassendes
+entlassene
+entlassenem
+entlassenen
+entlassener
+entlassenes
+entlasst
+entlaste
+entlasten
+entlastend
+entlastende
+entlastendem
+entlastenden
+entlastender
+entlastendes
+entlastest
+entlastet
+entlastete
+entlastetem
+entlasteten
+entlasteter
+entlastetes
+entlastetest
+entlastetet
+entlaufe
+entlaufen
+entlaufend
+entlaufende
+entlaufendem
+entlaufenden
+entlaufender
+entlaufendes
+entlaufene
+entlaufenem
+entlaufenen
+entlaufener
+entlaufenes
+entlauft
+entlause
+entlausen
+entlausest
+entlaust
+entlauste
+entlaustem
+entlausten
+entlauster
+entlaustes
+entlaustest
+entlaustet
+entledige
+entledigen
+entledigend
+entledigende
+entledigendem
+entledigenden
+entledigender
+entledigendes
+entledigst
+entledigt
+entledigte
+entledigtem
+entledigten
+entledigter
+entledigtes
+entledigtest
+entledigtet
+entleere
+entleeren
+entleerend
+entleerende
+entleerendem
+entleerenden
+entleerender
+entleerendes
+entleerst
+entleert
+entleerte
+entleertem
+entleerten
+entleerter
+entleertes
+entleertest
+entleertet
+entlegen
+entlegene
+entlegenem
+entlegenen
+entlegener
+entlegenere
+entlegenerem
+entlegeneren
+entlegenerer
+entlegeneres
+entlegenes
+entlegenste
+entlegenstem
+entlegensten
+entlegenster
+entlegenstes
+entlehne
+entlehnen
+entlehnend
+entlehnende
+entlehnendem
+entlehnenden
+entlehnender
+entlehnendes
+entlehnst
+entlehnt
+entlehnte
+entlehntem
+entlehnten
+entlehnter
+entlehntes
+entlehntest
+entlehntet
+entleibt
+entleibte
+entleibtem
+entleibten
+entleibter
+entleibtes
+entleihe
+entleihen
+entleihend
+entleihende
+entleihendem
+entleihenden
+entleihender
+entleihendes
+entleihst
+entleiht
+entleihtem
+entleihter
+entleihtes
+entlief
+entliefen
+entliefest
+entliefst
+entlieft
+entlieh
+entliehen
+entliehene
+entliehenem
+entliehenen
+entliehener
+entliehenes
+entliehst
+entlieht
+entließ
+entließen
+entließest
+entließt
+entlocke
+entlocken
+entlockend
+entlockende
+entlockendem
+entlockenden
+entlockender
+entlockendes
+entlockst
+entlockt
+entlockte
+entlocktem
+entlockten
+entlockter
+entlocktes
+entlocktest
+entlocktet
+entlohne
+entlohnen
+entlohnend
+entlohnende
+entlohnendem
+entlohnenden
+entlohnender
+entlohnendes
+entlohnst
+entlohnt
+entlohnte
+entlohntem
+entlohnten
+entlohnter
+entlohntes
+entlohntest
+entlohntet
+entlud
+entluden
+entludest
+entludet
+entludst
+entlädst
+entlädt
+entlässt
+entläufst
+entläuft
+entlüfte
+entlüften
+entlüftend
+entlüftende
+entlüftendem
+entlüftenden
+entlüftender
+entlüftendes
+entlüftest
+entlüftet
+entlüftete
+entlüftetem
+entlüfteten
+entlüfteter
+entlüftetes
+entlüftetest
+entlüftetet
+entmachte
+entmachten
+entmachtend
+entmachtende
+entmachtendem
+entmachtenden
+entmachtender
+entmachtendes
+entmachtest
+entmachtet
+entmachtete
+entmachtetem
+entmachteten
+entmachteter
+entmachtetes
+entmachtetest
+entmachtetet
+entmanne
+entmannen
+entmannend
+entmannende
+entmannendem
+entmannenden
+entmannender
+entmannendes
+entmannst
+entmannt
+entmannte
+entmanntem
+entmannten
+entmannter
+entmanntes
+entmanntest
+entmanntet
+entmutige
+entmutigen
+entmutigend
+entmutigende
+entmutigendem
+entmutigenden
+entmutigender
+entmutigendes
+entmutigst
+entmutigt
+entmutigte
+entmutigtem
+entmutigten
+entmutigter
+entmutigtes
+entmutigtest
+entmutigtet
+entmündige
+entmündigen
+entmündigend
+entmündigende
+entmündigendem
+entmündigenden
+entmündigender
+entmündigendes
+entmündigst
+entmündigt
+entmündigte
+entmündigtem
+entmündigten
+entmündigter
+entmündigtes
+entmündigtest
+entmündigtet
+entnahm
+entnahmen
+entnahmst
+entnahmt
+entnehmbar
+entnehmbare
+entnehmbarem
+entnehmbaren
+entnehmbarer
+entnehmbares
+entnehme
+entnehmen
+entnehmend
+entnehmende
+entnehmendem
+entnehmenden
+entnehmender
+entnehmendes
+entnehmt
+entnimmst
+entnimmt
+entnommen
+entnommene
+entnommenem
+entnommenen
+entnommener
+entnommenes
+entpacke
+entpacken
+entpackend
+entpackende
+entpackendem
+entpackenden
+entpackender
+entpackendes
+entpackst
+entpackt
+entpackte
+entpackten
+entpacktest
+entpacktet
+entprellt
+entprellte
+entprelltem
+entprellten
+entprellter
+entprelltes
+entpuppe
+entpuppen
+entpuppend
+entpuppende
+entpuppendem
+entpuppenden
+entpuppender
+entpuppendes
+entpuppst
+entpuppt
+entpuppte
+entpupptem
+entpuppten
+entpuppter
+entpupptes
+entpupptest
+entpupptet
+entrann
+entrannen
+entrannst
+entrannt
+entraube
+entrauben
+entraubend
+entraubende
+entraubendem
+entraubenden
+entraubender
+entraubendes
+entraubst
+entraubt
+entraubte
+entraubtem
+entraubten
+entraubter
+entraubtes
+entraubtest
+entraubtet
+entre
+entrechte
+entrechten
+entrechtend
+entrechtende
+entrechtendem
+entrechtenden
+entrechtender
+entrechtendes
+entrechtest
+entrechtet
+entrechtete
+entrechtetem
+entrechteten
+entrechteter
+entrechtetes
+entrechtetest
+entrechtetet
+entreiße
+entreißen
+entreißend
+entreißende
+entreißendem
+entreißenden
+entreißender
+entreißendes
+entreißest
+entreißt
+entrichte
+entrichten
+entrichtend
+entrichtende
+entrichtendem
+entrichtenden
+entrichtender
+entrichtendes
+entrichtest
+entrichtet
+entrichtete
+entrichtetem
+entrichteten
+entrichteter
+entrichtetes
+entrichtetest
+entrichtetet
+entriegele
+entriegeln
+entriegelnd
+entriegelnde
+entriegelndem
+entriegelnden
+entriegelnder
+entriegelndes
+entriegelst
+entriegelt
+entriegelte
+entriegeltem
+entriegelten
+entriegelter
+entriegeltes
+entriegeltest
+entriegeltet
+entriegle
+entrinnbar
+entrinnbare
+entrinnbarem
+entrinnbaren
+entrinnbarer
+entrinnbares
+entrinne
+entrinnen
+entrinnend
+entrinnende
+entrinnendem
+entrinnenden
+entrinnender
+entrinnendes
+entrinnst
+entrinnt
+entriss
+entrissen
+entrissene
+entrissenem
+entrissenen
+entrissener
+entrissenes
+entrissest
+entrisst
+entrolle
+entrollen
+entrollend
+entrollende
+entrollendem
+entrollenden
+entrollender
+entrollendes
+entrollst
+entrollt
+entrollte
+entrolltem
+entrollten
+entrollter
+entrolltes
+entrolltest
+entrolltet
+entronnen
+entronnene
+entronnenem
+entronnenen
+entronnener
+entronnenes
+entrungen
+entrungene
+entrungenem
+entrungenen
+entrungener
+entrungenes
+entrücke
+entrücken
+entrückend
+entrückende
+entrückendem
+entrückenden
+entrückender
+entrückendes
+entrückst
+entrückt
+entrückte
+entrücktem
+entrückten
+entrückter
+entrücktes
+entrücktest
+entrücktet
+entrüste
+entrüsten
+entrüstend
+entrüstende
+entrüstendem
+entrüstenden
+entrüstender
+entrüstendes
+entrüstest
+entrüstet
+entrüstete
+entrüstetem
+entrüsteten
+entrüsteter
+entrüstetes
+entrüstetest
+entrüstetet
+entsage
+entsagen
+entsagend
+entsagende
+entsagendem
+entsagenden
+entsagender
+entsagendes
+entsagst
+entsagt
+entsagte
+entsagtem
+entsagten
+entsagter
+entsagtes
+entsagtest
+entsagtet
+entsandt
+entsandte
+entsandtem
+entsandten
+entsandter
+entsandtes
+entsandtest
+entsandtet
+entsann
+entsannen
+entsannst
+entsannt
+entscheidbar
+entscheidbare
+entscheidbarem
+entscheidbaren
+entscheidbarer
+entscheidbares
+entscheide
+entscheiden
+entscheidend
+entscheidende
+entscheidendem
+entscheidenden
+entscheidender
+entscheidendere
+entscheidenderem
+entscheidenderen
+entscheidenderer
+entscheidenderes
+entscheidendes
+entscheidendste
+entscheidendstem
+entscheidendsten
+entscheidendster
+entscheidendstes
+entscheidest
+entscheidet
+entschied
+entschieden
+entschiedene
+entschiedenem
+entschiedenen
+entschiedener
+entschiedenere
+entschiedenerem
+entschiedeneren
+entschiedenerer
+entschiedeneres
+entschiedenes
+entschiedenste
+entschiedenstem
+entschiedensten
+entschiedenster
+entschiedenstes
+entschiedest
+entschiedet
+entschiedst
+entschlacke
+entschlacken
+entschlackend
+entschlackende
+entschlackendem
+entschlackenden
+entschlackender
+entschlackendes
+entschlackst
+entschlackt
+entschlackte
+entschlackten
+entschlacktest
+entschlacktet
+entschlafe
+entschlafen
+entschlaft
+entschlief
+entschliefen
+entschliefest
+entschliefst
+entschlieft
+entschließe
+entschließen
+entschließest
+entschließt
+entschloss
+entschlossen
+entschlossene
+entschlossenem
+entschlossenen
+entschlossener
+entschlossenere
+entschlossenerem
+entschlosseneren
+entschlossenerer
+entschlosseneres
+entschlossenes
+entschlossenste
+entschlossenstem
+entschlossensten
+entschlossenster
+entschlossenstes
+entschlossest
+entschlosst
+entschlussfreudig
+entschlussfreudige
+entschlussfreudigem
+entschlussfreudigen
+entschlussfreudiger
+entschlussfreudiges
+entschläfst
+entschlüpfe
+entschlüpfen
+entschlüpfend
+entschlüpfende
+entschlüpfendem
+entschlüpfenden
+entschlüpfender
+entschlüpfendes
+entschlüpfst
+entschlüpft
+entschlüpfte
+entschlüpftem
+entschlüpften
+entschlüpfter
+entschlüpftes
+entschlüpftest
+entschlüpftet
+entschlüssele
+entschlüsseln
+entschlüsselnd
+entschlüsselnde
+entschlüsselndem
+entschlüsselnden
+entschlüsselnder
+entschlüsselndes
+entschlüsselst
+entschlüsselt
+entschlüsselte
+entschlüsseltem
+entschlüsselten
+entschlüsselter
+entschlüsseltes
+entschlüsseltest
+entschlüsseltet
+entschlüssle
+entschuldbar
+entschuldbare
+entschuldbarem
+entschuldbaren
+entschuldbarer
+entschuldbares
+entschulde
+entschulden
+entschuldend
+entschuldende
+entschuldendem
+entschuldenden
+entschuldender
+entschuldendes
+entschuldest
+entschuldet
+entschuldete
+entschuldetem
+entschuldeten
+entschuldeter
+entschuldetes
+entschuldetest
+entschuldetet
+entschuldige
+entschuldigen
+entschuldigend
+entschuldigende
+entschuldigendem
+entschuldigenden
+entschuldigender
+entschuldigendes
+entschuldigst
+entschuldigt
+entschuldigte
+entschuldigtem
+entschuldigten
+entschuldigter
+entschuldigtes
+entschuldigtest
+entschuldigtet
+entschwand
+entschwanden
+entschwandest
+entschwandet
+entschwandst
+entschwebe
+entschweben
+entschwebend
+entschwebende
+entschwebendem
+entschwebenden
+entschwebender
+entschwebendes
+entschwebst
+entschwebt
+entschwebte
+entschwebtem
+entschwebten
+entschwebter
+entschwebtes
+entschwebtest
+entschwebtet
+entschwinde
+entschwinden
+entschwindend
+entschwindende
+entschwindendem
+entschwindenden
+entschwindender
+entschwindendes
+entschwindest
+entschwindet
+entschwunden
+entschwundene
+entschwundenem
+entschwundenen
+entschwundener
+entschwundenes
+entschädige
+entschädigen
+entschädigend
+entschädigende
+entschädigendem
+entschädigenden
+entschädigender
+entschädigendes
+entschädigst
+entschädigt
+entschädigte
+entschädigtem
+entschädigten
+entschädigter
+entschädigtes
+entschädigtest
+entschädigtet
+entschärfe
+entschärfen
+entschärfend
+entschärfende
+entschärfendem
+entschärfenden
+entschärfender
+entschärfendes
+entschärfst
+entschärft
+entschärfte
+entschärftem
+entschärften
+entschärfter
+entschärftes
+entschärftest
+entschärftet
+entseelt
+entseelte
+entseeltem
+entseelten
+entseelter
+entseeltes
+entsende
+entsenden
+entsendend
+entsendende
+entsendendem
+entsendenden
+entsendender
+entsendendes
+entsendest
+entsendet
+entsendete
+entsendetem
+entsendeten
+entsendeter
+entsendetes
+entsendetest
+entsendetet
+entsetze
+entsetzen
+entsetzend
+entsetzende
+entsetzendem
+entsetzenden
+entsetzender
+entsetzendes
+entsetzest
+entsetzlich
+entsetzliche
+entsetzlichem
+entsetzlichen
+entsetzlicher
+entsetzlichere
+entsetzlicherem
+entsetzlicheren
+entsetzlicherer
+entsetzlicheres
+entsetzliches
+entsetzlichste
+entsetzlichstem
+entsetzlichsten
+entsetzlichster
+entsetzlichstes
+entsetzt
+entsetzte
+entsetztem
+entsetzten
+entsetzter
+entsetztes
+entsetztest
+entsetztet
+entsichere
+entsichern
+entsichernd
+entsichernde
+entsicherndem
+entsichernden
+entsichernder
+entsicherndes
+entsicherst
+entsichert
+entsicherte
+entsichertem
+entsicherten
+entsicherter
+entsichertes
+entsichertest
+entsichertet
+entsichre
+entsinne
+entsinnen
+entsinnst
+entsinnt
+entsorge
+entsorgen
+entsorgst
+entsorgt
+entsorgte
+entsorgten
+entsorgtest
+entsorgtet
+entspann
+entspanne
+entspannen
+entspannend
+entspannende
+entspannendem
+entspannenden
+entspannender
+entspannendes
+entspannst
+entspannt
+entspannte
+entspanntem
+entspannten
+entspannter
+entspanntes
+entspanntest
+entspanntet
+entspinne
+entspinnen
+entspinnend
+entspinnende
+entspinnendem
+entspinnenden
+entspinnender
+entspinnendes
+entspinnst
+entspinnt
+entspr
+entsprach
+entsprachen
+entsprachest
+entsprachst
+entspracht
+entsprang
+entsprangen
+entsprangst
+entsprangt
+entspreche
+entsprechen
+entsprechend
+entsprechende
+entsprechendem
+entsprechenden
+entsprechender
+entsprechendes
+entsprecht
+entsprichst
+entspricht
+entsprieße
+entsprießen
+entsprießend
+entsprießende
+entsprießendem
+entsprießenden
+entsprießender
+entsprießendes
+entsprießest
+entsprießt
+entspringe
+entspringen
+entspringend
+entspringende
+entspringendem
+entspringenden
+entspringender
+entspringendes
+entspringst
+entspringt
+entsprochen
+entsprochene
+entsprochenem
+entsprochenen
+entsprochener
+entsprochenes
+entspross
+entsprossen
+entsprossene
+entsprossenem
+entsprossenen
+entsprossener
+entsprossenes
+entsprossest
+entsprosst
+entsprungen
+entsprungene
+entsprungenem
+entsprungenen
+entsprungener
+entsprungenes
+entspräche
+entsprächen
+entsprächst
+entsprächt
+entstamme
+entstammen
+entstammend
+entstammende
+entstammendem
+entstammenden
+entstammender
+entstammendes
+entstammst
+entstammt
+entstammte
+entstammtem
+entstammten
+entstammter
+entstammtes
+entstammtest
+entstammtet
+entstand
+entstanden
+entstandene
+entstandenem
+entstandenen
+entstandener
+entstandenes
+entstandest
+entstandet
+entstehe
+entstehen
+entstehend
+entstehende
+entstehendem
+entstehenden
+entstehender
+entstehendes
+entstehst
+entsteht
+entstelle
+entstellen
+entstellend
+entstellende
+entstellendem
+entstellenden
+entstellender
+entstellendes
+entstellst
+entstellt
+entstellte
+entstelltem
+entstellten
+entstellter
+entstelltes
+entstelltest
+entstelltet
+entstieg
+entstiegen
+entstiegst
+entstiegt
+entströme
+entströmen
+entströmst
+entströmt
+entströmte
+entströmten
+entströmtest
+entströmtet
+entstünde
+entstünden
+enttarne
+enttarnen
+enttarnend
+enttarnende
+enttarnendem
+enttarnenden
+enttarnender
+enttarnendes
+enttarnst
+enttarnt
+enttarnte
+enttarntem
+enttarnten
+enttarnter
+enttarntes
+enttarntest
+enttarntet
+entthrone
+entthronen
+entthronst
+entthront
+entthronte
+entthrontem
+entthronten
+entthronter
+entthrontes
+entthrontest
+entthrontet
+enttäusche
+enttäuschen
+enttäuschend
+enttäuschende
+enttäuschendem
+enttäuschenden
+enttäuschender
+enttäuschenderweise
+enttäuschendes
+enttäuschest
+enttäuschst
+enttäuscht
+enttäuschte
+enttäuschtem
+enttäuschten
+enttäuschter
+enttäuschtes
+enttäuschtest
+enttäuschtet
+entwachse
+entwachsen
+entwachsene
+entwachsenem
+entwachsenen
+entwachsener
+entwachsenes
+entwachst
+entwaffne
+entwaffnen
+entwaffnend
+entwaffnende
+entwaffnendem
+entwaffnenden
+entwaffnender
+entwaffnendes
+entwaffnest
+entwaffnet
+entwaffnete
+entwaffnetem
+entwaffneten
+entwaffneter
+entwaffnetes
+entwaffnetest
+entwaffnetet
+entwarf
+entwarfen
+entwarfest
+entwarfst
+entwarft
+entweder
+entweiche
+entweichen
+entweichend
+entweichende
+entweichendem
+entweichenden
+entweichender
+entweichendes
+entweichst
+entweicht
+entweihe
+entweihen
+entweihend
+entweihende
+entweihendem
+entweihenden
+entweihender
+entweihendes
+entweihst
+entweiht
+entweihte
+entweihtem
+entweihten
+entweihter
+entweihtes
+entweihtest
+entweihtet
+entwende
+entwenden
+entwendend
+entwendende
+entwendendem
+entwendenden
+entwendender
+entwendendes
+entwendest
+entwendet
+entwendete
+entwendetem
+entwendeten
+entwendeter
+entwendetes
+entwendetest
+entwendetet
+entwerfe
+entwerfen
+entwerfend
+entwerfende
+entwerfendem
+entwerfenden
+entwerfender
+entwerfendes
+entwerft
+entwerte
+entwerten
+entwertend
+entwertende
+entwertendem
+entwertenden
+entwertender
+entwertendes
+entwertest
+entwertet
+entwertete
+entwertetem
+entwerteten
+entwerteter
+entwertetes
+entwertetest
+entwertetet
+entwich
+entwichen
+entwichene
+entwichenem
+entwichenen
+entwichener
+entwichenes
+entwichst
+entwicht
+entwickelbar
+entwickelbare
+entwickelbarem
+entwickelbaren
+entwickelbarer
+entwickelbares
+entwickele
+entwickeln
+entwickelnd
+entwickelnde
+entwickelndem
+entwickelnden
+entwickelnder
+entwickelndes
+entwickelst
+entwickelt
+entwickelte
+entwickeltem
+entwickelten
+entwickelter
+entwickeltes
+entwickeltest
+entwickeltet
+entwickle
+entwicklungsbedürftig
+entwicklungsbedürftige
+entwicklungsbedürftigem
+entwicklungsbedürftigen
+entwicklungsbedürftiger
+entwicklungsbedürftiges
+entwicklungsfähig
+entwicklungsfähige
+entwicklungsfähigem
+entwicklungsfähigen
+entwicklungsfähiger
+entwicklungsfähiges
+entwicklungspolitisch
+entwicklungspolitische
+entwicklungspolitischem
+entwicklungspolitischen
+entwicklungspolitischer
+entwicklungspolitisches
+entwinde
+entwinden
+entwindend
+entwindende
+entwindendem
+entwindenden
+entwindender
+entwindendes
+entwindest
+entwindet
+entwirfst
+entwirft
+entwirre
+entwirren
+entwirrend
+entwirrende
+entwirrendem
+entwirrenden
+entwirrender
+entwirrendes
+entwirrst
+entwirrt
+entwirrte
+entwirrtem
+entwirrten
+entwirrter
+entwirrtes
+entwirrtest
+entwirrtet
+entwische
+entwischen
+entwischend
+entwischende
+entwischendem
+entwischenden
+entwischender
+entwischendes
+entwischest
+entwischst
+entwischt
+entwischte
+entwischtem
+entwischten
+entwischter
+entwischtes
+entwischtest
+entwischtet
+entworfen
+entworfene
+entworfenem
+entworfenen
+entworfener
+entworfenes
+entwurzele
+entwurzeln
+entwurzelnd
+entwurzelnde
+entwurzelndem
+entwurzelnden
+entwurzelnder
+entwurzelndes
+entwurzelst
+entwurzelt
+entwurzelte
+entwurzeltem
+entwurzelten
+entwurzelter
+entwurzeltes
+entwurzeltest
+entwurzeltet
+entwurzle
+entwässere
+entwässern
+entwässernd
+entwässernde
+entwässerndem
+entwässernden
+entwässernder
+entwässerndes
+entwässerst
+entwässert
+entwässerte
+entwässertem
+entwässerten
+entwässerter
+entwässertes
+entwässertest
+entwässertet
+entwässre
+entwöhne
+entwöhnen
+entwöhnend
+entwöhnende
+entwöhnendem
+entwöhnenden
+entwöhnender
+entwöhnendes
+entwöhnst
+entwöhnt
+entwöhnte
+entwöhntem
+entwöhnten
+entwöhnter
+entwöhntes
+entwöhntest
+entwöhntet
+entwürdige
+entwürdigen
+entwürdigend
+entwürdigende
+entwürdigendem
+entwürdigenden
+entwürdigender
+entwürdigendes
+entwürdigst
+entwürdigt
+entwürdigte
+entwürdigtem
+entwürdigten
+entwürdigter
+entwürdigtes
+entwürdigtest
+entwürdigtet
+entzaubere
+entzaubern
+entzaubernd
+entzaubernde
+entzauberndem
+entzaubernden
+entzaubernder
+entzauberndes
+entzauberst
+entzaubert
+entzauberte
+entzaubertem
+entzauberten
+entzauberter
+entzaubertes
+entzaubertest
+entzaubertet
+entzaubre
+entzerre
+entzerren
+entzerrend
+entzerrende
+entzerrendem
+entzerrenden
+entzerrender
+entzerrendes
+entzerrst
+entzerrt
+entzerrte
+entzerrtem
+entzerrten
+entzerrter
+entzerrtes
+entzerrtest
+entzerrtet
+entziehe
+entziehen
+entziehend
+entziehende
+entziehendem
+entziehenden
+entziehender
+entziehendes
+entziehst
+entzieht
+entzifferbar
+entzifferbare
+entzifferbarem
+entzifferbaren
+entzifferbarer
+entzifferbares
+entziffere
+entziffern
+entziffernd
+entziffernde
+entzifferndem
+entziffernden
+entziffernder
+entzifferndes
+entzifferst
+entziffert
+entzifferte
+entziffertem
+entzifferten
+entzifferter
+entziffertes
+entziffertest
+entziffertet
+entziffre
+entzog
+entzogen
+entzogene
+entzogenem
+entzogenen
+entzogener
+entzogenes
+entzogst
+entzogt
+entzwei
+entzweibreche
+entzweibrechen
+entzweibrechend
+entzweibrechende
+entzweibrechendem
+entzweibrechenden
+entzweibrechender
+entzweibrechendes
+entzweibrecht
+entzweie
+entzweien
+entzweiend
+entzweiende
+entzweiendem
+entzweienden
+entzweiender
+entzweiendes
+entzweigebrochen
+entzweigebrochene
+entzweigebrochenem
+entzweigebrochenen
+entzweigebrochener
+entzweigebrochenes
+entzweigegangen
+entzweigegangene
+entzweigegangenem
+entzweigegangenen
+entzweigegangener
+entzweigegangenes
+entzweigehe
+entzweigehen
+entzweigehend
+entzweigehende
+entzweigehendem
+entzweigehenden
+entzweigehender
+entzweigehendes
+entzweigehst
+entzweigeht
+entzweist
+entzweit
+entzweite
+entzweitem
+entzweiten
+entzweiter
+entzweites
+entzweitest
+entzweitet
+entzöge
+entzögen
+entzögest
+entzöget
+entzücke
+entzücken
+entzückend
+entzückende
+entzückendem
+entzückenden
+entzückender
+entzückendere
+entzückenderem
+entzückenderen
+entzückenderer
+entzückenderes
+entzückendes
+entzückendste
+entzückendstem
+entzückendsten
+entzückendster
+entzückendstes
+entzückst
+entzückt
+entzückte
+entzücktem
+entzückten
+entzückter
+entzücktes
+entzücktest
+entzücktet
+entzündbar
+entzündbare
+entzündbarem
+entzündbaren
+entzündbarer
+entzündbarere
+entzündbarerem
+entzündbareren
+entzündbarerer
+entzündbareres
+entzündbares
+entzündbarste
+entzündbarstem
+entzündbarsten
+entzündbarster
+entzündbarstes
+entzünde
+entzünden
+entzündend
+entzündende
+entzündendem
+entzündenden
+entzündender
+entzündendes
+entzündest
+entzündet
+entzündete
+entzündetem
+entzündeten
+entzündeter
+entzündetes
+entzündetest
+entzündetet
+entzündlich
+entzündliche
+entzündlichem
+entzündlichen
+entzündlicher
+entzündliches
+enzyklopädisch
+enzyklopädische
+enzyklopädischem
+enzyklopädischen
+enzyklopädischer
+enzyklopädisches
+eo
+epidemisch
+epidemische
+epidemischem
+epidemischen
+epidemischer
+epidemisches
+episch
+epische
+epischem
+epischen
+epischer
+episches
+epistemologisch
+epochal
+epochale
+epochalem
+epochalen
+epochaler
+epochales
+epsilon
+er
+erachte
+erachten
+erachtend
+erachtende
+erachtendem
+erachtenden
+erachtender
+erachtendes
+erachtest
+erachtet
+erachtete
+erachtetem
+erachteten
+erachteter
+erachtetes
+erachtetest
+erachtetet
+erahne
+erahnen
+erahnend
+erahnende
+erahnendem
+erahnenden
+erahnender
+erahnendes
+erahnst
+erahnt
+erahnte
+erahntem
+erahnten
+erahnter
+erahntes
+erahntest
+erahntet
+erarbeite
+erarbeiten
+erarbeitend
+erarbeitende
+erarbeitendem
+erarbeitenden
+erarbeitender
+erarbeitendes
+erarbeitest
+erarbeitet
+erarbeitete
+erarbeitetem
+erarbeiteten
+erarbeiteter
+erarbeitetes
+erarbeitetest
+erarbeitetet
+erbarme
+erbarmen
+erbarmend
+erbarmende
+erbarmendem
+erbarmenden
+erbarmender
+erbarmendes
+erbarmst
+erbarmt
+erbarmte
+erbarmten
+erbarmtest
+erbarmtet
+erbarmungslos
+erbarmungslose
+erbarmungslosem
+erbarmungslosen
+erbarmungsloser
+erbarmungsloses
+erbarmungswürdig
+erbarmungswürdige
+erbarmungswürdigem
+erbarmungswürdigen
+erbarmungswürdiger
+erbarmungswürdiges
+erbat
+erbaten
+erbatest
+erbatet
+erbatst
+erbaue
+erbauen
+erbauend
+erbauende
+erbauendem
+erbauenden
+erbauender
+erbauendes
+erbaulich
+erbauliche
+erbaulichem
+erbaulichen
+erbaulicher
+erbauliches
+erbaust
+erbaut
+erbaute
+erbautem
+erbauten
+erbauter
+erbautes
+erbautest
+erbautet
+erbberechtigt
+erbberechtigte
+erbberechtigtem
+erbberechtigten
+erbberechtigter
+erbberechtigtes
+erbe
+erben
+erbend
+erbende
+erbendem
+erbenden
+erbender
+erbendes
+erbeten
+erbetene
+erbetenem
+erbetenen
+erbetener
+erbetenes
+erbeute
+erbeuten
+erbeutend
+erbeutende
+erbeutendem
+erbeutenden
+erbeutender
+erbeutendes
+erbeutest
+erbeutet
+erbeutete
+erbeutetem
+erbeuteten
+erbeuteter
+erbeutetes
+erbeutetest
+erbeutetet
+erbfähig
+erbfähige
+erbfähigem
+erbfähigen
+erbfähiger
+erbfähiges
+erbiete
+erbieten
+erbietend
+erbietende
+erbietendem
+erbietenden
+erbietender
+erbietendes
+erbietest
+erbietet
+erbitte
+erbitten
+erbittend
+erbittende
+erbittendem
+erbittenden
+erbittender
+erbittendes
+erbittert
+erbitterte
+erbittertem
+erbitterten
+erbitterter
+erbittertere
+erbitterterem
+erbitterteren
+erbitterterer
+erbitterteres
+erbittertes
+erbitterteste
+erbittertestem
+erbittertesten
+erbittertester
+erbittertestes
+erbittest
+erbittet
+erblasse
+erblassen
+erblassend
+erblassende
+erblassendem
+erblassenden
+erblassender
+erblassendes
+erblassest
+erblasst
+erblasste
+erblasstem
+erblassten
+erblasster
+erblasstes
+erblasstest
+erblasstet
+erbleiche
+erbleichen
+erbleichend
+erbleichende
+erbleichendem
+erbleichenden
+erbleichender
+erbleichendes
+erbleichst
+erbleicht
+erbleichte
+erbleichtem
+erbleichten
+erbleichter
+erbleichtes
+erbleichtest
+erbleichtet
+erblich
+erbliche
+erblichem
+erblichen
+erblicher
+erbliches
+erblicke
+erblicken
+erblickend
+erblickende
+erblickendem
+erblickenden
+erblickender
+erblickendes
+erblickst
+erblickt
+erblickte
+erblicktem
+erblickten
+erblickter
+erblicktes
+erblicktest
+erblicktet
+erblinde
+erblinden
+erblindend
+erblindende
+erblindendem
+erblindenden
+erblindender
+erblindendes
+erblindest
+erblindet
+erblindete
+erblindetem
+erblindeten
+erblindeter
+erblindetes
+erblindetest
+erblindetet
+erblühe
+erblühen
+erblühend
+erblühende
+erblühendem
+erblühenden
+erblühender
+erblühendes
+erblühst
+erblüht
+erblühte
+erblühtem
+erblühten
+erblühter
+erblühtes
+erblühtest
+erblühtet
+erbost
+erboste
+erbostem
+erbosten
+erboster
+erbostes
+erbot
+erboten
+erbotene
+erbotenem
+erbotenen
+erbotener
+erbotenes
+erbotest
+erbotet
+erbrach
+erbrachen
+erbrachest
+erbrachst
+erbracht
+erbrachte
+erbrachtem
+erbrachten
+erbrachter
+erbrachtes
+erbreche
+erbrechen
+erbrechend
+erbrechende
+erbrechendem
+erbrechenden
+erbrechender
+erbrechendes
+erbrecht
+erbrichst
+erbricht
+erbringe
+erbringen
+erbringend
+erbringende
+erbringendem
+erbringenden
+erbringender
+erbringendes
+erbringst
+erbringt
+erbrochen
+erbrochene
+erbrochenem
+erbrochenen
+erbrochener
+erbrochenes
+erbrächte
+erbrächten
+erbrächtest
+erbrächtet
+erbst
+erbt
+erbte
+erbten
+erbtest
+erbtet
+erbärmlich
+erbärmliche
+erbärmlichem
+erbärmlichen
+erbärmlicher
+erbärmliches
+erdacht
+erdachte
+erdachtem
+erdachten
+erdachter
+erdachtes
+erdachtest
+erdachtet
+erdachtst
+erde
+erden
+erdend
+erdende
+erdendem
+erdenden
+erdender
+erdendes
+erdenklich
+erdenkliche
+erdenklichem
+erdenklichen
+erdenklicher
+erdenkliches
+erdest
+erdet
+erdete
+erdeten
+erdetest
+erdetet
+erdichte
+erdichten
+erdichtend
+erdichtende
+erdichtendem
+erdichtenden
+erdichtender
+erdichtendes
+erdichtest
+erdichtet
+erdichtete
+erdichtetem
+erdichteten
+erdichteter
+erdichtetes
+erdichtetest
+erdichtetet
+erdig
+erdige
+erdigem
+erdigen
+erdiger
+erdiges
+erdolche
+erdolchen
+erdolchend
+erdolchende
+erdolchendem
+erdolchenden
+erdolchender
+erdolchendes
+erdolchst
+erdolcht
+erdolchte
+erdolchtem
+erdolchten
+erdolchter
+erdolchtes
+erdolchtest
+erdolchtet
+erdreiste
+erdreisten
+erdreistend
+erdreistende
+erdreistendem
+erdreistenden
+erdreistender
+erdreistendes
+erdreistest
+erdreistet
+erdreistete
+erdreisteten
+erdreistetest
+erdreistetet
+erdrossele
+erdrosseln
+erdrosselnd
+erdrosselnde
+erdrosselndem
+erdrosselnden
+erdrosselnder
+erdrosselndes
+erdrosselst
+erdrosselt
+erdrosselte
+erdrosseltem
+erdrosselten
+erdrosselter
+erdrosseltes
+erdrosseltest
+erdrosseltet
+erdrossle
+erdrücke
+erdrücken
+erdrückend
+erdrückende
+erdrückendem
+erdrückenden
+erdrückender
+erdrückendes
+erdrückst
+erdrückt
+erdrückte
+erdrücktem
+erdrückten
+erdrückter
+erdrücktes
+erdrücktest
+erdrücktet
+erdschlusssicher
+erdulde
+erdulden
+erduldend
+erduldende
+erduldendem
+erduldenden
+erduldender
+erduldendes
+erduldest
+erduldet
+erduldete
+erduldetem
+erduldeten
+erduldeter
+erduldetes
+erduldetest
+erduldetet
+ereifere
+ereifern
+ereifernd
+ereifernde
+ereiferndem
+ereifernden
+ereifernder
+ereiferndes
+ereiferst
+ereifert
+ereiferte
+ereifertem
+ereiferten
+ereiferter
+ereifertes
+ereifertest
+ereifertet
+ereifre
+ereigne
+ereignen
+ereignend
+ereignende
+ereignendem
+ereignenden
+ereignender
+ereignendes
+ereignest
+ereignet
+ereignete
+ereigneten
+ereignetest
+ereignetet
+ereignislos
+ereignislose
+ereignislosem
+ereignislosen
+ereignisloser
+ereignisloses
+ereignisorientiert
+ereignisorientierte
+ereignisorientiertem
+ereignisorientierten
+ereignisorientierter
+ereignisorientiertes
+ereignisreich
+ereignisreiche
+ereignisreichem
+ereignisreichen
+ereignisreicher
+ereignisreiches
+ereile
+ereilen
+ereilend
+ereilende
+ereilendem
+ereilenden
+ereilender
+ereilendes
+ereilst
+ereilt
+ereilte
+ereiltem
+ereilten
+ereilter
+ereiltes
+ereiltest
+ereiltet
+ererbt
+ererbte
+ererbtem
+ererbten
+ererbter
+ererbtes
+ererbtest
+ererbtet
+ererbtst
+erfahrbar
+erfahrbare
+erfahrbarem
+erfahrbaren
+erfahrbarer
+erfahrbares
+erfahre
+erfahren
+erfahrend
+erfahrende
+erfahrendem
+erfahrenden
+erfahrender
+erfahrendes
+erfahrene
+erfahrenem
+erfahrenen
+erfahrener
+erfahrenere
+erfahrenerem
+erfahreneren
+erfahrenerer
+erfahreneres
+erfahrenes
+erfahrenste
+erfahrenstem
+erfahrensten
+erfahrenster
+erfahrenstes
+erfahrt
+erfahrungsgemäß
+erfahrungsgemäße
+erfahrungsgemäßem
+erfahrungsgemäßen
+erfahrungsgemäßer
+erfahrungsgemäßes
+erfahrungsmäßig
+erfahrungsmäßige
+erfahrungsmäßigem
+erfahrungsmäßigen
+erfahrungsmäßiger
+erfahrungsmäßiges
+erfand
+erfanden
+erfandest
+erfandet
+erfandst
+erfassbar
+erfassbare
+erfassbarem
+erfassbaren
+erfassbarer
+erfassbares
+erfasse
+erfassen
+erfassend
+erfassende
+erfassendem
+erfassenden
+erfassender
+erfassendes
+erfassest
+erfasst
+erfasste
+erfasstem
+erfassten
+erfasster
+erfasstes
+erfasstest
+erfasstet
+erfinde
+erfinden
+erfindend
+erfindende
+erfindendem
+erfindenden
+erfindender
+erfindendes
+erfinderisch
+erfinderische
+erfinderischem
+erfinderischen
+erfinderischer
+erfinderisches
+erfindest
+erfindet
+erfindungsreich
+erfindungsreiche
+erfindungsreichem
+erfindungsreichen
+erfindungsreicher
+erfindungsreichere
+erfindungsreicherem
+erfindungsreicheren
+erfindungsreicherer
+erfindungsreicheres
+erfindungsreiches
+erfindungsreichste
+erfindungsreichstem
+erfindungsreichsten
+erfindungsreichster
+erfindungsreichstes
+erflehe
+erflehen
+erflehst
+erfleht
+erflehte
+erflehten
+erflehtest
+erflehtet
+erfocht
+erfochten
+erfochtest
+erfochtet
+erfochtst
+erfolge
+erfolgen
+erfolgend
+erfolgende
+erfolgendem
+erfolgenden
+erfolgender
+erfolgendes
+erfolggewohnt
+erfolggewohnte
+erfolggewohntem
+erfolggewohnten
+erfolggewohnter
+erfolggewohntes
+erfolglos
+erfolglose
+erfolglosem
+erfolglosen
+erfolgloser
+erfolglosere
+erfolgloserem
+erfolgloseren
+erfolgloserer
+erfolgloseres
+erfolgloses
+erfolgloseste
+erfolglosestem
+erfolglosesten
+erfolglosester
+erfolglosestes
+erfolgreich
+erfolgreiche
+erfolgreichem
+erfolgreichen
+erfolgreicher
+erfolgreichere
+erfolgreicherem
+erfolgreicheren
+erfolgreicherer
+erfolgreicheres
+erfolgreiches
+erfolgreichste
+erfolgreichstem
+erfolgreichsten
+erfolgreichster
+erfolgreichstes
+erfolgsbetont
+erfolgsbetonte
+erfolgsbetontem
+erfolgsbetonten
+erfolgsbetonter
+erfolgsbetontes
+erfolgst
+erfolgt
+erfolgte
+erfolgtem
+erfolgten
+erfolgter
+erfolgtes
+erfolgtest
+erfolgtet
+erfolgversprechend
+erfolgversprechende
+erfolgversprechendem
+erfolgversprechenden
+erfolgversprechender
+erfolgversprechendere
+erfolgversprechenderem
+erfolgversprechenderen
+erfolgversprechenderer
+erfolgversprechenderes
+erfolgversprechendes
+erfolgversprechendste
+erfolgversprechendstem
+erfolgversprechendsten
+erfolgversprechendster
+erfolgversprechendstes
+erfordere
+erforderlich
+erforderliche
+erforderlichem
+erforderlichen
+erforderlichenfalls
+erforderlicher
+erforderliches
+erfordern
+erfordernd
+erfordernde
+erforderndem
+erfordernden
+erfordernder
+erforderndes
+erforderst
+erfordert
+erforderte
+erfordertem
+erforderten
+erforderter
+erfordertes
+erfordertest
+erfordertet
+erfordre
+erforschbar
+erforschbare
+erforschbarem
+erforschbaren
+erforschbarer
+erforschbares
+erforsche
+erforschen
+erforschend
+erforschende
+erforschendem
+erforschenden
+erforschender
+erforschendes
+erforschest
+erforschst
+erforscht
+erforschte
+erforschtem
+erforschten
+erforschter
+erforschtes
+erforschtest
+erforschtet
+erfragbar
+erfragbare
+erfragbarem
+erfragbaren
+erfragbarer
+erfragbares
+erfrage
+erfragen
+erfragend
+erfragende
+erfragendem
+erfragenden
+erfragender
+erfragendes
+erfragst
+erfragt
+erfragte
+erfragtem
+erfragten
+erfragter
+erfragtes
+erfragtest
+erfragtet
+erfreue
+erfreuen
+erfreuend
+erfreuende
+erfreuendem
+erfreuenden
+erfreuender
+erfreuendes
+erfreulich
+erfreuliche
+erfreulichem
+erfreulichen
+erfreulicher
+erfreulichere
+erfreulicherem
+erfreulicheren
+erfreulicherer
+erfreulicheres
+erfreulicherweise
+erfreuliches
+erfreulichste
+erfreulichstem
+erfreulichsten
+erfreulichster
+erfreulichstes
+erfreust
+erfreut
+erfreute
+erfreutem
+erfreuten
+erfreuter
+erfreutes
+erfreutest
+erfreutet
+erfriere
+erfrieren
+erfrierend
+erfrierende
+erfrierendem
+erfrierenden
+erfrierender
+erfrierendes
+erfrierst
+erfriert
+erfrische
+erfrischen
+erfrischend
+erfrischende
+erfrischendem
+erfrischenden
+erfrischender
+erfrischendes
+erfrischest
+erfrischst
+erfrischt
+erfrischte
+erfrischtem
+erfrischten
+erfrischter
+erfrischtes
+erfrischtest
+erfrischtet
+erfror
+erfroren
+erfrorene
+erfrorenem
+erfrorenen
+erfrorener
+erfrorenes
+erfrorst
+erfrort
+erfuhr
+erfuhren
+erfuhrst
+erfuhrt
+erfunden
+erfundene
+erfundenem
+erfundenen
+erfundener
+erfundenes
+erfährst
+erfährt
+erfühle
+erfühlen
+erfühlend
+erfühlende
+erfühlendem
+erfühlenden
+erfühlender
+erfühlendes
+erfühlst
+erfühlt
+erfühlte
+erfühltem
+erfühlten
+erfühlter
+erfühltes
+erfühltest
+erfühltet
+erfüllbar
+erfüllbare
+erfüllbarem
+erfüllbaren
+erfüllbarer
+erfüllbares
+erfülle
+erfüllen
+erfüllend
+erfüllende
+erfüllendem
+erfüllenden
+erfüllender
+erfüllendes
+erfüllst
+erfüllt
+erfüllte
+erfülltem
+erfüllten
+erfüllter
+erfülltes
+erfülltest
+erfülltet
+ergab
+ergaben
+ergabst
+ergabt
+ergangen
+ergangene
+ergangenem
+ergangenen
+ergangener
+ergangenes
+ergattere
+ergattern
+ergatternd
+ergatternde
+ergatterndem
+ergatternden
+ergatternder
+ergatterndes
+ergatterst
+ergattert
+ergatterte
+ergattertem
+ergatterten
+ergatterter
+ergattertes
+ergattertest
+ergattertet
+ergattre
+ergebe
+ergeben
+ergebend
+ergebende
+ergebendem
+ergebenden
+ergebender
+ergebendes
+ergebene
+ergebenem
+ergebenen
+ergebener
+ergebenes
+ergebnislos
+ergebnislose
+ergebnislosem
+ergebnislosen
+ergebnisloser
+ergebnisloses
+ergebt
+ergehe
+ergehen
+ergehend
+ergehende
+ergehendem
+ergehenden
+ergehender
+ergehendes
+ergehst
+ergeht
+ergibst
+ergibt
+ergiebig
+ergiebige
+ergiebigem
+ergiebigen
+ergiebiger
+ergiebigere
+ergiebigerem
+ergiebigeren
+ergiebigerer
+ergiebigeres
+ergiebiges
+ergiebigste
+ergiebigstem
+ergiebigsten
+ergiebigster
+ergiebigstes
+ergieße
+ergießen
+ergießend
+ergießende
+ergießendem
+ergießenden
+ergießender
+ergießendes
+ergießest
+ergießt
+erging
+ergingen
+ergingst
+ergingt
+erglühe
+erglühen
+erglühend
+erglühende
+erglühendem
+erglühenden
+erglühender
+erglühendes
+erglühst
+erglüht
+erglühte
+erglühtem
+erglühten
+erglühter
+erglühtes
+erglühtest
+erglühtet
+ergo
+ergonomisch
+ergonomische
+ergonomischem
+ergonomischen
+ergonomischer
+ergonomisches
+ergoss
+ergossen
+ergossest
+ergosst
+ergraue
+ergrauen
+ergrauend
+ergrauende
+ergrauendem
+ergrauenden
+ergrauender
+ergrauendes
+ergraust
+ergraut
+ergraute
+ergrautem
+ergrauten
+ergrauter
+ergrautes
+ergrautest
+ergrautet
+ergreife
+ergreifen
+ergreifend
+ergreifende
+ergreifendem
+ergreifenden
+ergreifender
+ergreifendere
+ergreifenderem
+ergreifenderen
+ergreifenderer
+ergreifenderes
+ergreifendes
+ergreifendste
+ergreifendstem
+ergreifendsten
+ergreifendster
+ergreifendstes
+ergreifst
+ergreift
+ergriff
+ergriffen
+ergriffene
+ergriffenem
+ergriffenen
+ergriffener
+ergriffenes
+ergriffst
+ergrifft
+ergrimme
+ergrimmen
+ergrimmend
+ergrimmende
+ergrimmendem
+ergrimmenden
+ergrimmender
+ergrimmendes
+ergrimmst
+ergrimmt
+ergrimmte
+ergrimmtem
+ergrimmten
+ergrimmter
+ergrimmtes
+ergrimmtest
+ergrimmtet
+ergründe
+ergründen
+ergründend
+ergründende
+ergründendem
+ergründenden
+ergründender
+ergründendes
+ergründest
+ergründet
+ergründete
+ergründetem
+ergründeten
+ergründeter
+ergründetes
+ergründetest
+ergründetet
+ergäbe
+ergäben
+ergänze
+ergänzen
+ergänzend
+ergänzende
+ergänzendem
+ergänzenden
+ergänzender
+ergänzendes
+ergänzest
+ergänzt
+ergänzte
+ergänztem
+ergänzten
+ergänzter
+ergänztes
+ergänztest
+ergänztet
+ergötze
+ergötzen
+ergötzend
+ergötzende
+ergötzendem
+ergötzenden
+ergötzender
+ergötzendes
+ergötzest
+ergötzt
+ergötzte
+ergötztem
+ergötzten
+ergötzter
+ergötztes
+ergötztest
+ergötztet
+erhaben
+erhabene
+erhabenem
+erhabenen
+erhabener
+erhabenere
+erhabenerem
+erhabeneren
+erhabenerer
+erhabeneres
+erhabenes
+erhabenste
+erhabenstem
+erhabensten
+erhabenster
+erhabenstes
+erhalte
+erhalten
+erhaltend
+erhaltende
+erhaltendem
+erhaltenden
+erhaltender
+erhaltendes
+erhaltene
+erhaltenem
+erhaltenen
+erhaltener
+erhaltenes
+erhaltengeblieben
+erhaltengebliebene
+erhaltengebliebenem
+erhaltengebliebenen
+erhaltengebliebener
+erhaltengebliebenes
+erhaltenswert
+erhaltenswerte
+erhaltenswertem
+erhaltenswerten
+erhaltenswerter
+erhaltenswertes
+erhaltet
+erhandele
+erhandeln
+erhandelnd
+erhandelnde
+erhandelndem
+erhandelnden
+erhandelnder
+erhandelndes
+erhandelst
+erhandelt
+erhandelte
+erhandeltem
+erhandelten
+erhandelter
+erhandeltes
+erhandeltest
+erhandeltet
+erhandle
+erhasche
+erhaschen
+erhaschend
+erhaschende
+erhaschendem
+erhaschenden
+erhaschender
+erhaschendes
+erhaschest
+erhaschst
+erhascht
+erhaschte
+erhaschtem
+erhaschten
+erhaschter
+erhaschtes
+erhaschtest
+erhaschtet
+erhebe
+erheben
+erhebend
+erhebende
+erhebendem
+erhebenden
+erhebender
+erhebendes
+erheblich
+erhebliche
+erheblichem
+erheblichen
+erheblicher
+erheblichere
+erheblicherem
+erheblicheren
+erheblicherer
+erheblicheres
+erhebliches
+erheblichste
+erheblichstem
+erheblichsten
+erheblichster
+erheblichstes
+erhebst
+erhebt
+erheische
+erheischen
+erheischend
+erheischende
+erheischendem
+erheischenden
+erheischender
+erheischendes
+erheischest
+erheischst
+erheischt
+erheischte
+erheischtem
+erheischten
+erheischter
+erheischtes
+erheischtest
+erheischtet
+erheitere
+erheitern
+erheiternd
+erheiternde
+erheiterndem
+erheiternden
+erheiternder
+erheiterndes
+erheiterst
+erheitert
+erheiterte
+erheitertem
+erheiterten
+erheiterter
+erheitertes
+erheitertest
+erheitertet
+erheitre
+erhelle
+erhellen
+erhellend
+erhellende
+erhellendem
+erhellenden
+erhellender
+erhellendes
+erhellst
+erhellt
+erhellte
+erhelltem
+erhellten
+erhellter
+erhelltes
+erhelltest
+erhelltet
+erhielt
+erhielte
+erhielten
+erhieltest
+erhieltet
+erhieltst
+erhitze
+erhitzen
+erhitzend
+erhitzende
+erhitzendem
+erhitzenden
+erhitzender
+erhitzendes
+erhitzest
+erhitzt
+erhitzte
+erhitztem
+erhitzten
+erhitzter
+erhitztes
+erhitztest
+erhitztet
+erhob
+erhoben
+erhobene
+erhobenem
+erhobenen
+erhobener
+erhobenes
+erhobst
+erhobt
+erhoffe
+erhoffen
+erhoffend
+erhoffende
+erhoffendem
+erhoffenden
+erhoffender
+erhoffendes
+erhoffst
+erhofft
+erhoffte
+erhofftem
+erhofften
+erhoffter
+erhofftes
+erhofftest
+erhofftet
+erhole
+erholen
+erholend
+erholende
+erholendem
+erholenden
+erholender
+erholendes
+erholsam
+erholsame
+erholsamem
+erholsamen
+erholsamer
+erholsamere
+erholsamerem
+erholsameren
+erholsamerer
+erholsameres
+erholsames
+erholsamste
+erholsamstem
+erholsamsten
+erholsamster
+erholsamstes
+erholst
+erholt
+erholte
+erholtem
+erholten
+erholter
+erholtes
+erholtest
+erholtet
+erholungsbedürftig
+erholungsbedürftige
+erholungsbedürftigem
+erholungsbedürftigen
+erholungsbedürftiger
+erholungsbedürftiges
+erholungssicher
+erholungssichere
+erholungssicherem
+erholungssicheren
+erholungssicherer
+erholungssicheres
+erholungsuchend
+erholungsuchende
+erholungsuchendem
+erholungsuchenden
+erholungsuchender
+erholungsuchendes
+erhält
+erhältlich
+erhältliche
+erhältlichem
+erhältlichen
+erhältlicher
+erhältliches
+erhältst
+erhänge
+erhängen
+erhängend
+erhängende
+erhängendem
+erhängenden
+erhängender
+erhängendes
+erhängst
+erhängt
+erhängte
+erhängtem
+erhängten
+erhängter
+erhängtes
+erhängtest
+erhängtet
+erhärte
+erhärten
+erhärtend
+erhärtende
+erhärtendem
+erhärtenden
+erhärtender
+erhärtendes
+erhärtest
+erhärtet
+erhärtete
+erhärtetem
+erhärteten
+erhärteter
+erhärtetes
+erhärtetest
+erhärtetet
+erhöbe
+erhöben
+erhöbest
+erhöbet
+erhöhe
+erhöhen
+erhöhend
+erhöhende
+erhöhendem
+erhöhenden
+erhöhender
+erhöhendes
+erhöhst
+erhöht
+erhöhte
+erhöhtem
+erhöhten
+erhöhter
+erhöhtes
+erhöhtest
+erhöhtet
+erhöre
+erhören
+erhörend
+erhörende
+erhörendem
+erhörenden
+erhörender
+erhörendes
+erhörst
+erhört
+erhörte
+erhörten
+erhörtest
+erhörtet
+erinnere
+erinnern
+erinnernd
+erinnernde
+erinnerndem
+erinnernden
+erinnernder
+erinnerndes
+erinnerst
+erinnert
+erinnerte
+erinnertem
+erinnerten
+erinnerter
+erinnertes
+erinnertest
+erinnertet
+erinnre
+erkalte
+erkalten
+erkaltend
+erkaltende
+erkaltendem
+erkaltenden
+erkaltender
+erkaltendes
+erkaltest
+erkaltet
+erkaltete
+erkaltetem
+erkalteten
+erkalteter
+erkaltetes
+erkaltetest
+erkaltetet
+erkannt
+erkannte
+erkanntem
+erkannten
+erkannter
+erkanntes
+erkanntest
+erkanntet
+erkaufe
+erkaufen
+erkaufend
+erkaufende
+erkaufendem
+erkaufenden
+erkaufender
+erkaufendes
+erkaufst
+erkauft
+erkaufte
+erkauftem
+erkauften
+erkaufter
+erkauftes
+erkauftest
+erkauftet
+erkennbar
+erkennbare
+erkennbarem
+erkennbaren
+erkennbarer
+erkennbares
+erkenne
+erkennen
+erkennend
+erkennende
+erkennendem
+erkennenden
+erkennender
+erkennendes
+erkennst
+erkennt
+erkenntlich
+erkenntliche
+erkenntlichem
+erkenntlichen
+erkenntlicher
+erkenntlichere
+erkenntlicherem
+erkenntlicheren
+erkenntlicherer
+erkenntlicheres
+erkenntliches
+erkenntlichste
+erkenntlichstem
+erkenntlichsten
+erkenntlichster
+erkenntlichstes
+erkenntniskritisch
+erkenntniskritische
+erkenntniskritischem
+erkenntniskritischen
+erkenntniskritischer
+erkenntniskritisches
+erkenntnislos
+erkenntnistheoretisch
+erkenntnistheoretische
+erkenntnistheoretischem
+erkenntnistheoretischen
+erkenntnistheoretischer
+erkenntnistheoretisches
+erklang
+erklangen
+erklangst
+erklangt
+erklecklich
+erkleckliche
+erklecklichem
+erklecklichen
+erklecklicher
+erkleckliches
+erklettere
+erklettern
+erkletternd
+erkletternde
+erkletterndem
+erkletternden
+erkletternder
+erkletterndes
+erkletterst
+erklettert
+erkletterte
+erklettertem
+erkletterten
+erkletterter
+erklettertes
+erklettertest
+erklettertet
+erklettre
+erklimme
+erklimmen
+erklimmend
+erklimmende
+erklimmendem
+erklimmenden
+erklimmender
+erklimmendes
+erklimmst
+erklimmt
+erklimmte
+erklimmten
+erklimmtest
+erklimmtet
+erklinge
+erklingen
+erklingend
+erklingende
+erklingendem
+erklingenden
+erklingender
+erklingendes
+erklingst
+erklingt
+erklomm
+erklommen
+erklommst
+erklommt
+erklärbar
+erklärbare
+erklärbarem
+erklärbaren
+erklärbarer
+erklärbares
+erkläre
+erklären
+erklärend
+erklärende
+erklärendem
+erklärenden
+erklärender
+erklärendes
+erklärlich
+erklärliche
+erklärlichem
+erklärlichen
+erklärlicher
+erklärlichere
+erklärlicherem
+erklärlicheren
+erklärlicherer
+erklärlicheres
+erklärlicherweise
+erklärliches
+erklärlichste
+erklärlichstem
+erklärlichsten
+erklärlichster
+erklärlichstes
+erklärst
+erklärt
+erklärte
+erklärtem
+erklärten
+erklärter
+erklärtes
+erklärtest
+erklärtet
+erkor
+erkoren
+erkorene
+erkorenem
+erkorenen
+erkorener
+erkorenes
+erkorst
+erkort
+erkranke
+erkranken
+erkrankend
+erkrankende
+erkrankendem
+erkrankenden
+erkrankender
+erkrankendes
+erkrankst
+erkrankt
+erkrankte
+erkranktem
+erkrankten
+erkrankter
+erkranktes
+erkranktest
+erkranktet
+erkunde
+erkunden
+erkundend
+erkundende
+erkundendem
+erkundenden
+erkundender
+erkundendes
+erkundest
+erkundet
+erkundete
+erkundetem
+erkundeten
+erkundeter
+erkundetes
+erkundetest
+erkundetet
+erkundige
+erkundigen
+erkundigend
+erkundigende
+erkundigendem
+erkundigenden
+erkundigender
+erkundigendes
+erkundigst
+erkundigt
+erkundigte
+erkundigten
+erkundigtest
+erkundigtet
+erkälte
+erkälten
+erkältend
+erkältende
+erkältendem
+erkältenden
+erkältender
+erkältendes
+erkältest
+erkältet
+erkältete
+erkältetem
+erkälteten
+erkälteter
+erkältetes
+erkältetest
+erkältetet
+erkämpfe
+erkämpfen
+erkämpfend
+erkämpfende
+erkämpfendem
+erkämpfenden
+erkämpfender
+erkämpfendes
+erkämpfst
+erkämpft
+erkämpfte
+erkämpftem
+erkämpften
+erkämpfter
+erkämpftes
+erkämpftest
+erkämpftet
+erlag
+erlagen
+erlagst
+erlagt
+erlahme
+erlahmen
+erlahmend
+erlahmende
+erlahmendem
+erlahmenden
+erlahmender
+erlahmendes
+erlahmst
+erlahmt
+erlahmte
+erlahmtem
+erlahmten
+erlahmter
+erlahmtes
+erlahmtest
+erlahmtet
+erlange
+erlangen
+erlangend
+erlangende
+erlangendem
+erlangenden
+erlangender
+erlangendes
+erlangst
+erlangt
+erlangte
+erlangtem
+erlangten
+erlangter
+erlangtes
+erlangtest
+erlangtet
+erlasse
+erlassen
+erlassend
+erlassende
+erlassendem
+erlassenden
+erlassender
+erlassendes
+erlassene
+erlassenem
+erlassenen
+erlassener
+erlassenes
+erlasst
+erlaube
+erlauben
+erlaubend
+erlaubende
+erlaubendem
+erlaubenden
+erlaubender
+erlaubendes
+erlaubst
+erlaubt
+erlaubte
+erlaubtem
+erlaubten
+erlaubter
+erlaubtes
+erlaubtest
+erlaubtet
+erlaucht
+erlauchte
+erlauchtem
+erlauchten
+erlauchter
+erlauchtes
+erlebbar
+erlebbare
+erlebbarem
+erlebbaren
+erlebbarer
+erlebbares
+erlebe
+erleben
+erlebend
+erlebende
+erlebendem
+erlebenden
+erlebender
+erlebendes
+erlebnisreich
+erlebnisreiche
+erlebnisreichem
+erlebnisreichen
+erlebnisreicher
+erlebnisreiches
+erlebst
+erlebt
+erlebte
+erlebtem
+erlebten
+erlebter
+erlebtes
+erlebtest
+erlebtet
+erledige
+erledigen
+erledigend
+erledigende
+erledigendem
+erledigenden
+erledigender
+erledigendes
+erledigst
+erledigt
+erledigte
+erledigtem
+erledigten
+erledigter
+erledigtes
+erledigtest
+erledigtet
+erlege
+erlegen
+erlegend
+erlegende
+erlegendem
+erlegenden
+erlegender
+erlegendes
+erlegst
+erlegt
+erlegte
+erlegtem
+erlegten
+erlegter
+erlegtes
+erlegtest
+erlegtet
+erleichtere
+erleichtern
+erleichternd
+erleichternde
+erleichterndem
+erleichternden
+erleichternder
+erleichterndes
+erleichterst
+erleichtert
+erleichterte
+erleichtertem
+erleichterten
+erleichterter
+erleichtertes
+erleichtertest
+erleichtertet
+erleichtre
+erleide
+erleiden
+erleidend
+erleidende
+erleidendem
+erleidenden
+erleidender
+erleidendes
+erleidest
+erleidet
+erlernbar
+erlernbare
+erlernbarem
+erlernbaren
+erlernbarer
+erlernbares
+erlerne
+erlernen
+erlernend
+erlernende
+erlernendem
+erlernenden
+erlernender
+erlernendes
+erlernst
+erlernt
+erlernte
+erlerntem
+erlernten
+erlernter
+erlerntes
+erlerntest
+erlerntet
+erlesen
+erlesene
+erlesenem
+erlesenen
+erlesener
+erlesenere
+erlesenerem
+erleseneren
+erlesenerer
+erleseneres
+erlesenes
+erlesenste
+erlesenstem
+erlesensten
+erlesenster
+erlesenstes
+erleuchte
+erleuchten
+erleuchtend
+erleuchtende
+erleuchtendem
+erleuchtenden
+erleuchtender
+erleuchtendes
+erleuchtest
+erleuchtet
+erleuchtete
+erleuchtetem
+erleuchteten
+erleuchteter
+erleuchtetes
+erleuchtetest
+erleuchtetet
+erliege
+erliegen
+erliegend
+erliegende
+erliegendem
+erliegenden
+erliegender
+erliegendes
+erliegst
+erliegt
+erließ
+erließen
+erließest
+erließt
+erlischst
+erlischt
+erlitt
+erlitten
+erlittene
+erlittenem
+erlittenen
+erlittener
+erlittenes
+erlittest
+erlittet
+erlogen
+erlogene
+erlogenem
+erlogenen
+erlogener
+erlogenes
+erlosch
+erloschen
+erloschene
+erloschenem
+erloschenen
+erloschener
+erloschenes
+erloschest
+erloscht
+erlässlich
+erlässliche
+erlässlichem
+erlässlichen
+erlässlicher
+erlässliches
+erlässt
+erläutere
+erläutern
+erläuternd
+erläuternde
+erläuterndem
+erläuternden
+erläuternder
+erläuterndes
+erläuterst
+erläutert
+erläuterte
+erläutertem
+erläuterten
+erläuterter
+erläutertes
+erläutertest
+erläutertet
+erläuterungsbedürftig
+erläuterungsbedürftige
+erläuterungsbedürftigem
+erläuterungsbedürftigen
+erläuterungsbedürftiger
+erläuterungsbedürftiges
+erläutre
+erlösche
+erlöschen
+erlöschend
+erlöschende
+erlöschendem
+erlöschenden
+erlöschender
+erlöschendes
+erlöschest
+erlöschst
+erlöscht
+erlöschte
+erlöschtem
+erlöschten
+erlöschter
+erlöschtes
+erlöschtest
+erlöschtet
+erlöse
+erlösen
+erlösend
+erlösende
+erlösendem
+erlösenden
+erlösender
+erlösendes
+erlösest
+erlöst
+erlöste
+erlöstem
+erlösten
+erlöster
+erlöstes
+erlöstest
+erlöstet
+ermahne
+ermahnen
+ermahnend
+ermahnende
+ermahnendem
+ermahnenden
+ermahnender
+ermahnendes
+ermahnst
+ermahnt
+ermahnte
+ermahntem
+ermahnten
+ermahnter
+ermahntes
+ermahntest
+ermahntet
+ermatte
+ermatten
+ermattend
+ermattende
+ermattendem
+ermattenden
+ermattender
+ermattendes
+ermattest
+ermattet
+ermattete
+ermattetem
+ermatteten
+ermatteter
+ermattetes
+ermattetest
+ermattetet
+ermessbar
+ermessbare
+ermessbarem
+ermessbaren
+ermessbarer
+ermessbares
+ermesse
+ermessen
+ermessend
+ermessende
+ermessendem
+ermessenden
+ermessender
+ermessendes
+ermesst
+ermisst
+ermittelbar
+ermittelbare
+ermittelbarem
+ermittelbaren
+ermittelbarer
+ermittelbares
+ermittele
+ermitteln
+ermittelnd
+ermittelnde
+ermittelndem
+ermittelnden
+ermittelnder
+ermittelndes
+ermittelst
+ermittelt
+ermittelte
+ermitteltem
+ermittelten
+ermittelter
+ermitteltes
+ermitteltest
+ermitteltet
+ermittle
+ermorde
+ermorden
+ermordend
+ermordende
+ermordendem
+ermordenden
+ermordender
+ermordendes
+ermordest
+ermordet
+ermordete
+ermordetem
+ermordeten
+ermordeter
+ermordetes
+ermordetest
+ermordetet
+ermuntere
+ermuntern
+ermunternd
+ermunternde
+ermunterndem
+ermunternden
+ermunternder
+ermunterndes
+ermunterst
+ermuntert
+ermunterte
+ermuntertem
+ermunterten
+ermunterter
+ermuntertes
+ermuntertest
+ermuntertet
+ermuntre
+ermutige
+ermutigen
+ermutigend
+ermutigende
+ermutigendem
+ermutigenden
+ermutigender
+ermutigendes
+ermutigst
+ermutigt
+ermutigte
+ermutigtem
+ermutigten
+ermutigter
+ermutigtes
+ermutigtest
+ermutigtet
+ermächtige
+ermächtigen
+ermächtigend
+ermächtigende
+ermächtigendem
+ermächtigenden
+ermächtigender
+ermächtigendes
+ermächtigst
+ermächtigt
+ermächtigte
+ermächtigtem
+ermächtigten
+ermächtigter
+ermächtigtes
+ermächtigtest
+ermächtigtet
+ermäßige
+ermäßigen
+ermäßigend
+ermäßigende
+ermäßigendem
+ermäßigenden
+ermäßigender
+ermäßigendes
+ermäßigst
+ermäßigt
+ermäßigte
+ermäßigtem
+ermäßigten
+ermäßigter
+ermäßigtes
+ermäßigtest
+ermäßigtet
+ermögliche
+ermöglichen
+ermöglichend
+ermöglichende
+ermöglichendem
+ermöglichenden
+ermöglichender
+ermöglichendes
+ermöglichst
+ermöglicht
+ermöglichte
+ermöglichtem
+ermöglichten
+ermöglichter
+ermöglichtes
+ermöglichtest
+ermöglichtet
+ermüde
+ermüden
+ermüdend
+ermüdende
+ermüdendem
+ermüdenden
+ermüdender
+ermüdendes
+ermüdest
+ermüdet
+ermüdete
+ermüdetem
+ermüdeten
+ermüdeter
+ermüdetes
+ermüdetest
+ermüdetet
+ernannt
+ernannte
+ernanntem
+ernannten
+ernannter
+ernanntes
+ernanntest
+ernanntet
+ernenne
+ernennen
+ernennend
+ernennende
+ernennendem
+ernennenden
+ernennender
+ernennendes
+ernennst
+ernennt
+erneuere
+erneuern
+erneuernd
+erneuernde
+erneuerndem
+erneuernden
+erneuernder
+erneuerndes
+erneuerst
+erneuert
+erneuerte
+erneuertem
+erneuerten
+erneuerter
+erneuertes
+erneuertest
+erneuertet
+erneure
+erneut
+erneute
+erneutem
+erneuten
+erneuter
+erneutes
+erniedrige
+erniedrigen
+erniedrigend
+erniedrigende
+erniedrigendem
+erniedrigenden
+erniedrigender
+erniedrigendes
+erniedrigst
+erniedrigt
+erniedrigte
+erniedrigtem
+erniedrigten
+erniedrigter
+erniedrigtes
+erniedrigtest
+erniedrigtet
+ernst
+ernste
+ernstem
+ernsten
+ernster
+ernstere
+ernsterem
+ernsteren
+ernsterer
+ernsteres
+ernstes
+ernsteste
+ernstestem
+ernstesten
+ernstester
+ernstestes
+ernsthaft
+ernsthafte
+ernsthaftem
+ernsthaften
+ernsthafter
+ernsthaftere
+ernsthafterem
+ernsthafteren
+ernsthafterer
+ernsthafteres
+ernsthaftes
+ernsthafteste
+ernsthaftestem
+ernsthaftesten
+ernsthaftester
+ernsthaftestes
+ernstlich
+ernstliche
+ernstlichem
+ernstlichen
+ernstlicher
+ernstliches
+ernte
+ernten
+erntend
+erntende
+erntendem
+erntenden
+erntender
+erntendes
+erntest
+erntet
+erntete
+erntetem
+ernteten
+ernteter
+erntetes
+erntetest
+erntetet
+ernähre
+ernähren
+ernährend
+ernährende
+ernährendem
+ernährenden
+ernährender
+ernährendes
+ernährst
+ernährt
+ernährte
+ernährtem
+ernährten
+ernährter
+ernährtes
+ernährtest
+ernährtet
+ernüchtere
+ernüchtern
+ernüchternd
+ernüchternde
+ernüchterndem
+ernüchternden
+ernüchternder
+ernüchterndes
+ernüchterst
+ernüchtert
+ernüchterte
+ernüchtertem
+ernüchterten
+ernüchterter
+ernüchtertes
+ernüchtertest
+ernüchtertet
+ernüchtre
+erobere
+erobern
+erobernd
+erobernde
+eroberndem
+erobernden
+erobernder
+eroberndes
+eroberst
+erobert
+eroberte
+erobertem
+eroberten
+eroberter
+erobertes
+erobertest
+erobertet
+erobre
+erodiere
+erodieren
+erodierend
+erodierende
+erodierendem
+erodierenden
+erodierender
+erodierendes
+erodierst
+erodiert
+erodierte
+erodiertem
+erodierten
+erodierter
+erodiertes
+erodiertest
+erodiertet
+erotisch
+erotische
+erotischem
+erotischen
+erotischer
+erotischere
+erotischerem
+erotischeren
+erotischerer
+erotischeres
+erotisches
+erotischste
+erotischstem
+erotischsten
+erotischster
+erotischstes
+erotisiere
+erotisieren
+erotisierend
+erotisierende
+erotisierendem
+erotisierenden
+erotisierender
+erotisierendes
+erotisierst
+erotisiert
+erotisierte
+erotisiertem
+erotisierten
+erotisierter
+erotisiertes
+erotisiertest
+erotisiertet
+erpicht
+erpichte
+erpichtem
+erpichten
+erpichter
+erpichtes
+erpressbar
+erpressbare
+erpressbarem
+erpressbaren
+erpressbarer
+erpressbares
+erpresse
+erpressen
+erpressend
+erpressende
+erpressendem
+erpressenden
+erpressender
+erpressendes
+erpresserisch
+erpresserische
+erpresserischem
+erpresserischen
+erpresserischer
+erpresserisches
+erpressest
+erpresst
+erpresste
+erpresstem
+erpressten
+erpresster
+erpresstes
+erpresstest
+erpresstet
+erprobbar
+erprobbare
+erprobbarem
+erprobbaren
+erprobbarer
+erprobbares
+erprobe
+erproben
+erprobend
+erprobende
+erprobendem
+erprobenden
+erprobender
+erprobendes
+erprobst
+erprobt
+erprobte
+erprobtem
+erprobten
+erprobter
+erprobtes
+erprobtest
+erprobtet
+erquicke
+erquicken
+erquickend
+erquickende
+erquickendem
+erquickenden
+erquickender
+erquickendes
+erquicklich
+erquickliche
+erquicklichem
+erquicklichen
+erquicklicher
+erquicklichere
+erquicklicherem
+erquicklicheren
+erquicklicherer
+erquicklicheres
+erquickliches
+erquicklichste
+erquicklichstem
+erquicklichsten
+erquicklichster
+erquicklichstes
+erquickst
+erquickt
+erquickte
+erquicktem
+erquickten
+erquickter
+erquicktes
+erquicktest
+erquicktet
+errang
+errangen
+errangst
+errangt
+errate
+erraten
+erratend
+erratende
+erratendem
+erratenden
+erratender
+erratendes
+erratene
+erratenem
+erratenen
+erratener
+erratenes
+erratet
+erratisch
+erratische
+erratischem
+erratischen
+erratischer
+erratisches
+errechenbar
+errechenbare
+errechenbarem
+errechenbaren
+errechenbarer
+errechenbares
+errechne
+errechnen
+errechnend
+errechnende
+errechnendem
+errechnenden
+errechnender
+errechnendes
+errechnest
+errechnet
+errechnete
+errechnetem
+errechneten
+errechneter
+errechnetes
+errechnetest
+errechnetet
+erregbar
+erregbare
+erregbarem
+erregbaren
+erregbarer
+erregbarere
+erregbarerem
+erregbareren
+erregbarerer
+erregbareres
+erregbares
+erregbarste
+erregbarstem
+erregbarsten
+erregbarster
+erregbarstes
+errege
+erregen
+erregend
+erregende
+erregendem
+erregenden
+erregender
+erregendes
+erregst
+erregt
+erregte
+erregtem
+erregten
+erregter
+erregtes
+erregtest
+erregtet
+erreichbar
+erreichbare
+erreichbarem
+erreichbaren
+erreichbarer
+erreichbares
+erreiche
+erreichen
+erreichend
+erreichende
+erreichendem
+erreichenden
+erreichender
+erreichendes
+erreichst
+erreicht
+erreichte
+erreichtem
+erreichten
+erreichter
+erreichtes
+erreichtest
+erreichtet
+erreigne
+erreignen
+erreignend
+erreignende
+erreignendem
+erreignenden
+erreignender
+erreignendes
+erreignest
+erreignet
+erreignete
+erreigneten
+erreignetest
+erreignetet
+errette
+erretten
+errettend
+errettende
+errettendem
+errettenden
+errettender
+errettendes
+errettest
+errettet
+errettete
+errettetem
+erretteten
+erretteter
+errettetes
+errettetest
+errettetet
+errichte
+errichten
+errichtend
+errichtende
+errichtendem
+errichtenden
+errichtender
+errichtendes
+errichtest
+errichtet
+errichtete
+errichtetem
+errichteten
+errichteter
+errichtetes
+errichtetest
+errichtetet
+erriet
+errieten
+errietest
+errietet
+errietst
+erringe
+erringen
+erringend
+erringende
+erringendem
+erringenden
+erringender
+erringendes
+erringst
+erringt
+errungen
+errungene
+errungenem
+errungenen
+errungener
+errungenes
+errät
+errätst
+erröte
+erröten
+errötend
+errötende
+errötendem
+errötenden
+errötender
+errötendes
+errötest
+errötet
+errötete
+errötetem
+erröteten
+erröteter
+errötetes
+errötetest
+errötetet
+ersann
+ersannen
+ersannst
+ersannt
+ersatzweise
+ersaufe
+ersaufen
+ersaufend
+ersaufende
+ersaufendem
+ersaufenden
+ersaufender
+ersaufendes
+ersauft
+erschaff
+erschaffe
+erschaffen
+erschaffend
+erschaffende
+erschaffendem
+erschaffenden
+erschaffender
+erschaffendes
+erschaffene
+erschaffenem
+erschaffenen
+erschaffener
+erschaffenes
+erschaffst
+erschafft
+erschafftem
+erschaffter
+erschafftes
+erschalle
+erschallen
+erschallend
+erschallende
+erschallendem
+erschallenden
+erschallender
+erschallendes
+erschallene
+erschallenem
+erschallenen
+erschallener
+erschallenes
+erschallst
+erschallt
+erschallte
+erschalltem
+erschallten
+erschallter
+erschalltes
+erschalltest
+erschalltet
+erschauere
+erschauern
+erschauernd
+erschauernde
+erschauerndem
+erschauernden
+erschauernder
+erschauerndes
+erschauerst
+erschauert
+erschauerte
+erschauerten
+erschauertest
+erschauertet
+erschaure
+erscheine
+erscheinen
+erscheinend
+erscheinende
+erscheinendem
+erscheinenden
+erscheinender
+erscheinendes
+erscheinst
+erscheint
+erschien
+erschienen
+erschienene
+erschienenem
+erschienenen
+erschienener
+erschienenes
+erschienst
+erschient
+erschieße
+erschießen
+erschießend
+erschießende
+erschießendem
+erschießenden
+erschießender
+erschießendes
+erschießest
+erschießt
+erschlaffe
+erschlaffen
+erschlaffend
+erschlaffende
+erschlaffendem
+erschlaffenden
+erschlaffender
+erschlaffendes
+erschlaffst
+erschlafft
+erschlaffte
+erschlafftem
+erschlafften
+erschlaffter
+erschlafftes
+erschlafftest
+erschlafftet
+erschlage
+erschlagen
+erschlagend
+erschlagende
+erschlagendem
+erschlagenden
+erschlagender
+erschlagendes
+erschlagene
+erschlagenem
+erschlagenen
+erschlagener
+erschlagenes
+erschlagt
+erschleiche
+erschleichen
+erschleichend
+erschleichende
+erschleichendem
+erschleichenden
+erschleichender
+erschleichendes
+erschleichst
+erschleicht
+erschlich
+erschlichen
+erschlichene
+erschlichenem
+erschlichenen
+erschlichener
+erschlichenes
+erschlichst
+erschlicht
+erschließe
+erschließen
+erschließend
+erschließende
+erschließendem
+erschließenden
+erschließender
+erschließendes
+erschließest
+erschließt
+erschloss
+erschlossen
+erschlossene
+erschlossenem
+erschlossenen
+erschlossener
+erschlossenes
+erschlossest
+erschlosst
+erschlug
+erschlugen
+erschlugst
+erschlugt
+erschlägst
+erschlägt
+erschoss
+erschossen
+erschossene
+erschossenem
+erschossenen
+erschossener
+erschossenes
+erschossest
+erschosst
+erschrak
+erschraken
+erschrakest
+erschrakst
+erschrakt
+erschrecke
+erschrecken
+erschreckend
+erschreckende
+erschreckendem
+erschreckenden
+erschreckender
+erschreckendes
+erschreckst
+erschreckt
+erschreckte
+erschrecktem
+erschreckten
+erschreckter
+erschrecktes
+erschrecktest
+erschrecktet
+erschrickst
+erschrickt
+erschrocken
+erschrockene
+erschrockenem
+erschrockenen
+erschrockener
+erschrockenes
+erschwere
+erschweren
+erschwerend
+erschwerende
+erschwerendem
+erschwerenden
+erschwerender
+erschwerendes
+erschwerst
+erschwert
+erschwerte
+erschwertem
+erschwerten
+erschwerter
+erschwertes
+erschwertest
+erschwertet
+erschwindele
+erschwindeln
+erschwindelnd
+erschwindelnde
+erschwindelndem
+erschwindelnden
+erschwindelnder
+erschwindelndes
+erschwindelst
+erschwindelt
+erschwindelte
+erschwindeltem
+erschwindelten
+erschwindelter
+erschwindeltes
+erschwindeltest
+erschwindeltet
+erschwindle
+erschwingbar
+erschwingbare
+erschwingbarem
+erschwingbaren
+erschwingbarer
+erschwingbares
+erschwinge
+erschwingen
+erschwingend
+erschwingende
+erschwingendem
+erschwingenden
+erschwingender
+erschwingendes
+erschwinglich
+erschwingliche
+erschwinglichem
+erschwinglichen
+erschwinglicher
+erschwinglichere
+erschwinglicherem
+erschwinglicheren
+erschwinglicherer
+erschwinglicheres
+erschwingliches
+erschwinglichste
+erschwinglichstem
+erschwinglichsten
+erschwinglichster
+erschwinglichstes
+erschwingst
+erschwingt
+erschwingte
+erschwingtem
+erschwingten
+erschwingter
+erschwingtes
+erschöpfe
+erschöpfen
+erschöpfend
+erschöpfende
+erschöpfendem
+erschöpfenden
+erschöpfender
+erschöpfendes
+erschöpfst
+erschöpft
+erschöpfte
+erschöpftem
+erschöpften
+erschöpfter
+erschöpftes
+erschöpftest
+erschöpftet
+erschüttere
+erschüttern
+erschütternd
+erschütternde
+erschütterndem
+erschütternden
+erschütternder
+erschütterndere
+erschütternderem
+erschütternderen
+erschütternderer
+erschütternderes
+erschütterndes
+erschütterndste
+erschütterndstem
+erschütterndsten
+erschütterndster
+erschütterndstes
+erschütterst
+erschüttert
+erschütterte
+erschüttertem
+erschütterten
+erschütterter
+erschüttertes
+erschüttertest
+erschüttertet
+erschüttre
+ersehbar
+ersehbare
+ersehbarem
+ersehbaren
+ersehbarer
+ersehbares
+ersehe
+ersehen
+ersehne
+ersehnen
+ersehnend
+ersehnende
+ersehnendem
+ersehnenden
+ersehnender
+ersehnendes
+ersehnst
+ersehnt
+ersehnte
+ersehntem
+ersehnten
+ersehnter
+ersehntes
+ersehntest
+ersehntet
+erseht
+ersetzbar
+ersetzbare
+ersetzbarem
+ersetzbaren
+ersetzbarer
+ersetzbarere
+ersetzbarerem
+ersetzbareren
+ersetzbarerer
+ersetzbareres
+ersetzbares
+ersetzbarste
+ersetzbarstem
+ersetzbarsten
+ersetzbarster
+ersetzbarstes
+ersetze
+ersetzen
+ersetzend
+ersetzende
+ersetzendem
+ersetzenden
+ersetzender
+ersetzendes
+ersetzest
+ersetzt
+ersetzte
+ersetztem
+ersetzten
+ersetzter
+ersetztes
+ersetztest
+ersetztet
+ersichtlich
+ersichtliche
+ersichtlichem
+ersichtlichen
+ersichtlicher
+ersichtlichere
+ersichtlicherem
+ersichtlicheren
+ersichtlicherer
+ersichtlicheres
+ersichtliches
+ersichtlichste
+ersichtlichstem
+ersichtlichsten
+ersichtlichster
+ersichtlichstes
+ersiehst
+ersieht
+ersinne
+ersinnen
+ersinnend
+ersinnende
+ersinnendem
+ersinnenden
+ersinnender
+ersinnendes
+ersinnst
+ersinnt
+ersinnte
+ersinntem
+ersinnten
+ersinnter
+ersinntes
+ersinntest
+ersinntet
+ersonnen
+ersonnene
+ersonnenem
+ersonnenen
+ersonnener
+ersonnenes
+erspare
+ersparen
+ersparend
+ersparende
+ersparendem
+ersparenden
+ersparender
+ersparendes
+ersparst
+erspart
+ersparte
+erspartem
+ersparten
+ersparter
+erspartes
+erspartest
+erspartet
+erspiele
+erspielen
+erspielend
+erspielende
+erspielendem
+erspielenden
+erspielender
+erspielendes
+erspielst
+erspielt
+erspielte
+erspieltem
+erspielten
+erspielter
+erspieltes
+erspieltest
+erspieltet
+ersprießlich
+ersprießliche
+ersprießlichem
+ersprießlichen
+ersprießlicher
+ersprießlichere
+ersprießlicherem
+ersprießlicheren
+ersprießlicherer
+ersprießlicheres
+ersprießliches
+ersprießlichste
+ersprießlichstem
+ersprießlichsten
+ersprießlichster
+ersprießlichstes
+erspähe
+erspähen
+erspähst
+erspäht
+erspähte
+erspähtem
+erspähten
+erspähter
+erspähtes
+erspähtest
+erspähtet
+erst
+erstach
+erstachen
+erstachest
+erstachst
+erstacht
+erstammte
+erstand
+erstanden
+erstandene
+erstandenem
+erstandenen
+erstandener
+erstandenes
+erstandest
+erstandet
+erstarke
+erstarken
+erstarkend
+erstarkende
+erstarkendem
+erstarkenden
+erstarkender
+erstarkendes
+erstarkst
+erstarkt
+erstarkte
+erstarktem
+erstarkten
+erstarkter
+erstarktes
+erstarktest
+erstarktet
+erstarre
+erstarren
+erstarrend
+erstarrende
+erstarrendem
+erstarrenden
+erstarrender
+erstarrendes
+erstarrst
+erstarrt
+erstarrte
+erstarrtem
+erstarrten
+erstarrter
+erstarrtes
+erstarrtest
+erstarrtet
+erstatte
+erstatten
+erstattend
+erstattende
+erstattendem
+erstattenden
+erstattender
+erstattendes
+erstattest
+erstattet
+erstattete
+erstattetem
+erstatteten
+erstatteter
+erstattetes
+erstattetest
+erstattetet
+erstaune
+erstaunen
+erstaunend
+erstaunende
+erstaunendem
+erstaunenden
+erstaunender
+erstaunendes
+erstaunlich
+erstaunliche
+erstaunlichem
+erstaunlichen
+erstaunlicher
+erstaunlichere
+erstaunlicherem
+erstaunlicheren
+erstaunlicherer
+erstaunlicheres
+erstaunlicherweise
+erstaunliches
+erstaunlichste
+erstaunlichstem
+erstaunlichsten
+erstaunlichster
+erstaunlichstes
+erstaunst
+erstaunt
+erstaunte
+erstauntem
+erstaunten
+erstaunter
+erstauntes
+erstauntest
+erstauntet
+erstbeste
+erstbestem
+erstbesten
+erstbester
+erstbestes
+erste
+ersteche
+erstechen
+erstechend
+erstechende
+erstechendem
+erstechenden
+erstechender
+erstechendes
+erstecht
+erstehe
+erstehen
+erstehend
+erstehende
+erstehendem
+erstehenden
+erstehender
+erstehendes
+erstehst
+ersteht
+ersteige
+ersteigen
+ersteigend
+ersteigende
+ersteigendem
+ersteigenden
+ersteigender
+ersteigendes
+ersteigere
+ersteigern
+ersteigernd
+ersteigernde
+ersteigerndem
+ersteigernden
+ersteigernder
+ersteigerndes
+ersteigerst
+ersteigert
+ersteigerte
+ersteigertem
+ersteigerten
+ersteigerter
+ersteigertes
+ersteigertest
+ersteigertet
+ersteigre
+ersteigst
+ersteigt
+erstelle
+erstellen
+erstellend
+erstellende
+erstellendem
+erstellenden
+erstellender
+erstellendes
+erstellst
+erstellt
+erstellte
+erstelltem
+erstellten
+erstellter
+erstelltes
+erstelltest
+erstelltet
+erstem
+ersten
+erstens
+erster
+ersterbe
+ersterben
+ersterbend
+ersterbende
+ersterbendem
+ersterbenden
+ersterbender
+ersterbendes
+ersterbt
+erstere
+ersterem
+ersteren
+ersterer
+ersteres
+erstes
+erstgenannt
+erstgenannte
+erstgenanntem
+erstgenannten
+erstgenannter
+erstgenanntes
+erstichst
+ersticht
+ersticke
+ersticken
+erstickend
+erstickende
+erstickendem
+erstickenden
+erstickender
+erstickendes
+erstickst
+erstickt
+erstickte
+ersticktem
+erstickten
+erstickter
+ersticktes
+ersticktest
+ersticktet
+erstieg
+erstiegen
+erstiegst
+erstiegt
+erstklassig
+erstklassige
+erstklassigem
+erstklassigen
+erstklassiger
+erstklassiges
+erstmal
+erstmalig
+erstmalige
+erstmaligem
+erstmaligen
+erstmaliger
+erstmaliges
+erstmals
+erstochen
+erstochene
+erstochenem
+erstochenen
+erstochener
+erstochenes
+erstplatziert
+erstplatzierte
+erstplatziertem
+erstplatzierten
+erstplatzierter
+erstplatziertes
+erstrahle
+erstrahlen
+erstrahlend
+erstrahlende
+erstrahlendem
+erstrahlenden
+erstrahlender
+erstrahlendes
+erstrahlst
+erstrahlt
+erstrahlte
+erstrahltem
+erstrahlten
+erstrahlter
+erstrahltes
+erstrahltest
+erstrahltet
+erstrangig
+erstrangige
+erstrangigem
+erstrangigen
+erstrangiger
+erstrangiges
+erstrebe
+erstreben
+erstrebend
+erstrebende
+erstrebendem
+erstrebenden
+erstrebender
+erstrebendes
+erstrebenswert
+erstrebenswerte
+erstrebenswertem
+erstrebenswerten
+erstrebenswerter
+erstrebenswertere
+erstrebenswerterem
+erstrebenswerteren
+erstrebenswerterer
+erstrebenswerteres
+erstrebenswertes
+erstrebenswerteste
+erstrebenswertestem
+erstrebenswertesten
+erstrebenswertester
+erstrebenswertestes
+erstrebst
+erstrebt
+erstrebte
+erstrebtem
+erstrebten
+erstrebter
+erstrebtes
+erstrebtest
+erstrebtet
+erstrecke
+erstrecken
+erstreckend
+erstreckende
+erstreckendem
+erstreckenden
+erstreckender
+erstreckendes
+erstreckst
+erstreckt
+erstreckte
+erstreckten
+erstrecktest
+erstrecktet
+erststellig
+erststellige
+erststelligem
+erststelligen
+erststelliger
+erststelliges
+erstürme
+erstürmen
+erstürmend
+erstürmende
+erstürmendem
+erstürmenden
+erstürmender
+erstürmendes
+erstürmst
+erstürmt
+erstürmte
+erstürmtem
+erstürmten
+erstürmter
+erstürmtes
+erstürmtest
+erstürmtet
+ersuche
+ersuchen
+ersuchend
+ersuchende
+ersuchendem
+ersuchenden
+ersuchender
+ersuchendes
+ersuchst
+ersucht
+ersuchte
+ersuchtem
+ersuchten
+ersuchter
+ersuchtes
+ersuchtest
+ersuchtet
+ersäufst
+ersäuft
+ertappe
+ertappen
+ertappend
+ertappende
+ertappendem
+ertappenden
+ertappender
+ertappendes
+ertappst
+ertappt
+ertappte
+ertapptem
+ertappten
+ertappter
+ertapptes
+ertapptest
+ertapptet
+erteile
+erteilen
+erteilend
+erteilende
+erteilendem
+erteilenden
+erteilender
+erteilendes
+erteilst
+erteilt
+erteilte
+erteiltem
+erteilten
+erteilter
+erteiltes
+erteiltest
+erteiltet
+ertragbar
+ertragbare
+ertragbarem
+ertragbaren
+ertragbarer
+ertragbares
+ertrage
+ertragen
+ertragend
+ertragende
+ertragendem
+ertragenden
+ertragender
+ertragendes
+ertragene
+ertragenem
+ertragenen
+ertragener
+ertragenes
+ertragreich
+ertragreiche
+ertragreichem
+ertragreichen
+ertragreicher
+ertragreiches
+ertragsabhängig
+ertragsabhängige
+ertragsabhängigem
+ertragsabhängigen
+ertragsabhängiger
+ertragsabhängiges
+ertragsgerecht
+ertragsgerechte
+ertragsgerechtem
+ertragsgerechten
+ertragsgerechter
+ertragsgerechtes
+ertragslos
+ertragslose
+ertragslosem
+ertragslosen
+ertragsloser
+ertragsloses
+ertragsschwach
+ertragsschwache
+ertragsschwachem
+ertragsschwachen
+ertragsschwacher
+ertragsschwaches
+ertragt
+ertrank
+ertranken
+ertrankest
+ertrankst
+ertrankt
+ertrinke
+ertrinken
+ertrinkend
+ertrinkende
+ertrinkendem
+ertrinkenden
+ertrinkender
+ertrinkendes
+ertrinkst
+ertrinkt
+ertrug
+ertrugen
+ertrugst
+ertrugt
+ertrunken
+ertrunkene
+ertrunkenem
+ertrunkenen
+ertrunkener
+ertrunkenes
+erträglich
+erträgliche
+erträglichem
+erträglichen
+erträglicher
+erträglichere
+erträglicherem
+erträglicheren
+erträglicherer
+erträglicheres
+erträgliches
+erträglichste
+erträglichstem
+erträglichsten
+erträglichster
+erträglichstes
+erträgst
+erträgt
+ertränke
+ertränken
+ertränkend
+ertränkende
+ertränkendem
+ertränkenden
+ertränkender
+ertränkendes
+ertränkst
+ertränkt
+ertränkte
+ertränktem
+ertränkten
+ertränkter
+ertränktes
+ertränktest
+ertränktet
+erträume
+erträumen
+erträumend
+erträumende
+erträumendem
+erträumenden
+erträumender
+erträumendes
+erträumst
+erträumt
+erträumte
+erträumtem
+erträumten
+erträumter
+erträumtes
+erträumtest
+erträumtet
+erturne
+erturnen
+erturnend
+erturnende
+erturnendem
+erturnenden
+erturnender
+erturnendes
+erturnst
+erturnt
+erturnte
+erturntem
+erturnten
+erturnter
+erturntes
+erturntest
+erturntet
+ertöne
+ertönen
+ertönend
+ertönende
+ertönendem
+ertönenden
+ertönender
+ertönendes
+ertönst
+ertönt
+ertönte
+ertöntem
+ertönten
+ertönter
+ertöntes
+ertöntest
+ertöntet
+ertüftelt
+ertüftelte
+ertüfteltem
+ertüftelten
+ertüftelter
+ertüfteltes
+eruiere
+eruieren
+eruierend
+eruierende
+eruierendem
+eruierenden
+eruierender
+eruierendes
+eruierst
+eruiert
+eruierte
+eruiertem
+eruierten
+eruierter
+eruiertes
+eruiertest
+eruiertet
+erwache
+erwachen
+erwachend
+erwachende
+erwachendem
+erwachenden
+erwachender
+erwachendes
+erwachse
+erwachsen
+erwachsend
+erwachsende
+erwachsendem
+erwachsenden
+erwachsender
+erwachsendes
+erwachsene
+erwachsenem
+erwachsenen
+erwachsener
+erwachsenes
+erwachst
+erwacht
+erwachte
+erwachtem
+erwachten
+erwachter
+erwachtes
+erwachtest
+erwachtet
+erwandere
+erwandern
+erwandernd
+erwandernde
+erwanderndem
+erwandernden
+erwandernder
+erwanderndes
+erwanderst
+erwandert
+erwanderte
+erwandertem
+erwanderten
+erwanderter
+erwandertes
+erwandertest
+erwandertet
+erwandre
+erwarb
+erwarben
+erwarbst
+erwarbt
+erwartbar
+erwartbare
+erwartbarem
+erwartbaren
+erwartbarer
+erwartbares
+erwarte
+erwarten
+erwartend
+erwartende
+erwartendem
+erwartenden
+erwartender
+erwartendes
+erwartest
+erwartet
+erwartete
+erwartetem
+erwarteten
+erwarteter
+erwartetes
+erwartetest
+erwartetet
+erwartungsfreudig
+erwartungsfreudige
+erwartungsfreudigem
+erwartungsfreudigen
+erwartungsfreudiger
+erwartungsfreudiges
+erwartungsgemäß
+erwartungsgemäße
+erwartungsgemäßem
+erwartungsgemäßen
+erwartungsgemäßer
+erwartungsgemäßes
+erwartungsvoll
+erwartungsvolle
+erwartungsvollem
+erwartungsvollen
+erwartungsvoller
+erwartungsvolles
+erwecke
+erwecken
+erweckend
+erweckende
+erweckendem
+erweckenden
+erweckender
+erweckendes
+erweckst
+erweckt
+erweckte
+erwecktem
+erweckten
+erweckter
+erwecktes
+erwecktest
+erwecktet
+erwehre
+erwehren
+erwehrend
+erwehrende
+erwehrendem
+erwehrenden
+erwehrender
+erwehrendes
+erwehrst
+erwehrt
+erwehrte
+erwehrtem
+erwehrten
+erwehrter
+erwehrtes
+erwehrtest
+erwehrtet
+erweiche
+erweichen
+erweichend
+erweichende
+erweichendem
+erweichenden
+erweichender
+erweichendes
+erweichst
+erweicht
+erweichte
+erweichtem
+erweichten
+erweichter
+erweichtes
+erweichtest
+erweichtet
+erweise
+erweisen
+erweisend
+erweisende
+erweisendem
+erweisenden
+erweisender
+erweisendes
+erweisest
+erweislich
+erweisliche
+erweislichem
+erweislichen
+erweislicher
+erweisliches
+erweist
+erweiterbar
+erweiterbare
+erweiterbarem
+erweiterbaren
+erweiterbarer
+erweiterbares
+erweitere
+erweitern
+erweiternd
+erweiternde
+erweiterndem
+erweiternden
+erweiternder
+erweiterndes
+erweiterst
+erweitert
+erweiterte
+erweitertem
+erweiterten
+erweiterter
+erweitertes
+erweitertest
+erweitertet
+erweitre
+erwerbbar
+erwerbbare
+erwerbbarem
+erwerbbaren
+erwerbbarer
+erwerbbares
+erwerbe
+erwerben
+erwerbend
+erwerbende
+erwerbendem
+erwerbenden
+erwerbender
+erwerbendes
+erwerbsfähig
+erwerbsfähige
+erwerbsfähigem
+erwerbsfähigen
+erwerbsfähiger
+erwerbsfähiges
+erwerbslos
+erwerbslose
+erwerbslosem
+erwerbslosen
+erwerbsloser
+erwerbsloses
+erwerbstätig
+erwerbstätige
+erwerbstätigem
+erwerbstätigen
+erwerbstätiger
+erwerbstätiges
+erwerbsunfähig
+erwerbsunfähige
+erwerbsunfähigem
+erwerbsunfähigen
+erwerbsunfähiger
+erwerbsunfähiges
+erwerbt
+erwidere
+erwidern
+erwidernd
+erwidernde
+erwiderndem
+erwidernden
+erwidernder
+erwiderndes
+erwiderst
+erwidert
+erwiderte
+erwidertem
+erwiderten
+erwiderter
+erwidertes
+erwidertest
+erwidertet
+erwidre
+erwies
+erwiesen
+erwiesene
+erwiesenem
+erwiesenen
+erwiesener
+erwiesenermaßen
+erwiesenes
+erwiesest
+erwiest
+erwirbst
+erwirbt
+erwirke
+erwirken
+erwirkend
+erwirkende
+erwirkendem
+erwirkenden
+erwirkender
+erwirkendes
+erwirkst
+erwirkt
+erwirkte
+erwirktem
+erwirkten
+erwirkter
+erwirktes
+erwirktest
+erwirktet
+erwirtschafte
+erwirtschaften
+erwirtschaftend
+erwirtschaftende
+erwirtschaftendem
+erwirtschaftenden
+erwirtschaftender
+erwirtschaftendes
+erwirtschaftest
+erwirtschaftet
+erwirtschaftete
+erwirtschaftetem
+erwirtschafteten
+erwirtschafteter
+erwirtschaftetes
+erwirtschaftetest
+erwirtschaftetet
+erwische
+erwischen
+erwischend
+erwischende
+erwischendem
+erwischenden
+erwischender
+erwischendes
+erwischest
+erwischst
+erwischt
+erwischte
+erwischtem
+erwischten
+erwischter
+erwischtes
+erwischtest
+erwischtet
+erwog
+erwogen
+erwogene
+erwogenem
+erwogenen
+erwogener
+erwogenes
+erwogst
+erwogt
+erworben
+erworbene
+erworbenem
+erworbenen
+erworbener
+erworbenes
+erwächst
+erwäge
+erwägen
+erwägend
+erwägende
+erwägendem
+erwägenden
+erwägender
+erwägendes
+erwägst
+erwägt
+erwägte
+erwägten
+erwägtest
+erwägtet
+erwähle
+erwählen
+erwählst
+erwählt
+erwählte
+erwähltem
+erwählten
+erwählter
+erwähltes
+erwähltest
+erwähltet
+erwähne
+erwähnen
+erwähnend
+erwähnende
+erwähnendem
+erwähnenden
+erwähnender
+erwähnendes
+erwähnenswert
+erwähnenswerte
+erwähnenswertem
+erwähnenswerten
+erwähnenswerter
+erwähnenswertes
+erwähnst
+erwähnt
+erwähnte
+erwähntem
+erwähnten
+erwähnter
+erwähntes
+erwähntest
+erwähntet
+erwärme
+erwärmen
+erwärmend
+erwärmende
+erwärmendem
+erwärmenden
+erwärmender
+erwärmendes
+erwärmst
+erwärmt
+erwärmte
+erwärmtem
+erwärmten
+erwärmter
+erwärmtes
+erwärmtest
+erwärmtet
+erwünscht
+erwünschte
+erwünschtem
+erwünschten
+erwünschter
+erwünschtere
+erwünschterem
+erwünschteren
+erwünschterer
+erwünschteres
+erwünschtes
+erwünschteste
+erwünschtestem
+erwünschtesten
+erwünschtester
+erwünschtestes
+erwürge
+erwürgen
+erwürgend
+erwürgende
+erwürgendem
+erwürgenden
+erwürgender
+erwürgendes
+erwürgst
+erwürgt
+erwürgte
+erwürgtem
+erwürgten
+erwürgter
+erwürgtes
+erwürgtest
+erwürgtet
+erzengelhaft
+erzengelhafte
+erzengelhaftem
+erzengelhaften
+erzengelhafter
+erzengelhaftes
+erzeugbar
+erzeugbare
+erzeugbarem
+erzeugbaren
+erzeugbarer
+erzeugbares
+erzeuge
+erzeugen
+erzeugend
+erzeugende
+erzeugendem
+erzeugenden
+erzeugender
+erzeugendes
+erzeugst
+erzeugt
+erzeugte
+erzeugtem
+erzeugten
+erzeugter
+erzeugtes
+erzeugtest
+erzeugtet
+erziehbar
+erziehbare
+erziehbarem
+erziehbaren
+erziehbarer
+erziehbares
+erziehe
+erziehen
+erziehend
+erziehende
+erziehendem
+erziehenden
+erziehender
+erziehendes
+erzieherisch
+erzieherische
+erzieherischem
+erzieherischen
+erzieherischer
+erzieherisches
+erziehst
+erzieht
+erziehungsberechtigt
+erziehungsberechtigte
+erziehungsberechtigtem
+erziehungsberechtigten
+erziehungsberechtigter
+erziehungsberechtigtes
+erzielbar
+erzielbare
+erzielbarem
+erzielbaren
+erzielbarer
+erzielbares
+erziele
+erzielen
+erzielend
+erzielende
+erzielendem
+erzielenden
+erzielender
+erzielendes
+erzielst
+erzielt
+erzielte
+erzieltem
+erzielten
+erzielter
+erzieltes
+erzieltest
+erzieltet
+erzittere
+erzittern
+erzitternd
+erzitternde
+erzitterndem
+erzitternden
+erzitternder
+erzitterndes
+erzitterst
+erzittert
+erzitterte
+erzittertem
+erzitterten
+erzitterter
+erzittertes
+erzittertest
+erzittertet
+erzittre
+erzkonservativ
+erzkonservative
+erzkonservativem
+erzkonservativen
+erzkonservativer
+erzkonservatives
+erzog
+erzogen
+erzogene
+erzogenem
+erzogenen
+erzogener
+erzogenes
+erzogst
+erzogt
+erzwang
+erzwangen
+erzwangst
+erzwangt
+erzwingbar
+erzwingbare
+erzwingbarem
+erzwingbaren
+erzwingbarer
+erzwingbares
+erzwinge
+erzwingen
+erzwingend
+erzwingende
+erzwingendem
+erzwingenden
+erzwingender
+erzwingendes
+erzwingst
+erzwingt
+erzwungen
+erzwungene
+erzwungenem
+erzwungenen
+erzwungener
+erzwungenes
+erzähle
+erzählen
+erzählend
+erzählende
+erzählendem
+erzählenden
+erzählender
+erzählendes
+erzählerisch
+erzählerische
+erzählerischem
+erzählerischen
+erzählerischer
+erzählerisches
+erzählst
+erzählt
+erzählte
+erzähltem
+erzählten
+erzählter
+erzähltes
+erzähltest
+erzähltet
+erzürne
+erzürnen
+erzürnend
+erzürnende
+erzürnendem
+erzürnenden
+erzürnender
+erzürnendes
+erzürnst
+erzürnt
+erzürnte
+erzürntem
+erzürnten
+erzürnter
+erzürntes
+erzürntest
+erzürntet
+eröffne
+eröffnen
+eröffnend
+eröffnende
+eröffnendem
+eröffnenden
+eröffnender
+eröffnendes
+eröffnest
+eröffnet
+eröffnete
+eröffnetem
+eröffneten
+eröffneter
+eröffnetes
+eröffnetest
+eröffnetet
+erörtere
+erörtern
+erörternd
+erörternde
+erörterndem
+erörternden
+erörternder
+erörterndes
+erörterst
+erörtert
+erörterte
+erörtertem
+erörterten
+erörterter
+erörtertes
+erörtertest
+erörtertet
+erörtre
+erübrigbar
+erübrigbare
+erübrigbarem
+erübrigbaren
+erübrigbarer
+erübrigbares
+erübrige
+erübrigen
+erübrigend
+erübrigende
+erübrigendem
+erübrigenden
+erübrigender
+erübrigendes
+erübrigst
+erübrigt
+erübrigte
+erübrigtem
+erübrigten
+erübrigter
+erübrigtes
+erübrigtest
+erübrigtet
+es
+eschatologisch
+eschatologische
+eschatologischem
+eschatologischen
+eschatologischer
+eschatologisches
+eselhaft
+eselhafte
+eselhaftem
+eselhaften
+eselhafter
+eselhaftere
+eselhafterem
+eselhafteren
+eselhafterer
+eselhafteres
+eselhaftes
+eselhafteste
+eselhaftestem
+eselhaftesten
+eselhaftester
+eselhaftestes
+eskaliere
+eskalieren
+eskalierend
+eskalierende
+eskalierendem
+eskalierenden
+eskalierender
+eskalierendes
+eskalierst
+eskaliert
+eskalierte
+eskaliertem
+eskalierten
+eskalierter
+eskaliertes
+eskaliertest
+eskaliertet
+esoterisch
+esoterische
+esoterischem
+esoterischen
+esoterischer
+esoterisches
+essbar
+essbare
+essbarem
+essbaren
+essbarer
+essbares
+esse
+essen
+essend
+essende
+essendem
+essenden
+essender
+essendes
+essential
+essentiale
+essentialem
+essentialen
+essentialer
+essentiales
+essentiell
+essentielle
+essentiellem
+essentiellen
+essentieller
+essentielles
+essenziell
+essenzielle
+essenziellem
+essenziellen
+essenzieller
+essenzielles
+esst
+estnisch
+estnische
+estnischem
+estnischen
+estnischer
+estnisches
+et
+etabliere
+etablieren
+etablierend
+etablierende
+etablierendem
+etablierenden
+etablierender
+etablierendes
+etablierst
+etabliert
+etablierte
+etabliertem
+etablierten
+etablierter
+etabliertes
+etabliertest
+etabliertet
+etappenweise
+etappenweisem
+etappenweisen
+etappenweiser
+etappenweises
+etc
+ethisch
+ethische
+ethischem
+ethischen
+ethischer
+ethisches
+ethnisch
+ethnische
+ethnischem
+ethnischen
+ethnischer
+ethnisches
+ethnologisch
+ethnologische
+ethnologischem
+ethnologischen
+ethnologischer
+ethnologisches
+ethologisch
+ethologische
+ethologischem
+ethologischen
+ethologischer
+ethologisches
+etikettiere
+etikettieren
+etikettierend
+etikettierende
+etikettierendem
+etikettierenden
+etikettierender
+etikettierendes
+etikettierst
+etikettiert
+etikettierte
+etikettiertem
+etikettierten
+etikettierter
+etikettiertes
+etikettiertest
+etikettiertet
+etliche
+etlichem
+etlichen
+etlicher
+etliches
+etwa
+etwaig
+etwaige
+etwaigem
+etwaigen
+etwaiger
+etwaiges
+etwas
+etymologisch
+etymologische
+etymologischem
+etymologischen
+etymologischer
+etymologisches
+euch
+euer
+euklidisch
+euklidische
+euklidischem
+euklidischen
+euklidischer
+euklidisches
+eulenartig
+eulenartige
+eulenartigem
+eulenartigen
+eulenartiger
+eulenartiges
+euphorisch
+euphorische
+euphorischem
+euphorischen
+euphorischer
+euphorisches
+eurasisch
+eurasische
+eurasischem
+eurasischen
+eurasischer
+eurasisches
+eure
+eurem
+euren
+eurer
+eures
+euresgleichen
+eurigen
+europaweit
+europaweite
+europaweitem
+europaweiten
+europaweiter
+europaweites
+europäisch
+europäische
+europäischem
+europäischen
+europäischer
+europäisches
+evakuiere
+evakuieren
+evakuierend
+evakuierende
+evakuierendem
+evakuierenden
+evakuierender
+evakuierendes
+evakuierst
+evakuiert
+evakuierte
+evakuiertem
+evakuierten
+evakuierter
+evakuiertes
+evakuiertest
+evakuiertet
+evaluierbar
+evaluierbare
+evaluierbarem
+evaluierbaren
+evaluierbarer
+evaluierbares
+evaluiere
+evaluieren
+evaluierend
+evaluierende
+evaluierendem
+evaluierenden
+evaluierender
+evaluierendes
+evaluierst
+evaluiert
+evaluierte
+evaluiertem
+evaluierten
+evaluierter
+evaluiertes
+evaluiertest
+evaluiertet
+evangelisch
+evangelische
+evangelischem
+evangelischen
+evangelischer
+evangelisches
+eventuell
+eventuelle
+eventuellem
+eventuellen
+eventueller
+eventuelles
+evident
+evidente
+evidentem
+evidenten
+evidenter
+evidentes
+evolutionär
+evolutionäre
+evolutionärem
+evolutionären
+evolutionärer
+evolutionäres
+evolutiv
+evolutive
+evolutivem
+evolutiven
+evolutiver
+evolutives
+evtl
+ewig
+ewige
+ewigem
+ewigen
+ewiger
+ewiges
+ewiglich
+ewigliche
+ewiglichem
+ewiglichen
+ewiglicher
+ewigliches
+ex
+exakt
+exakte
+exaktem
+exakten
+exakter
+exaktes
+exaltiert
+exaltierte
+exaltiertem
+exaltierten
+exaltierter
+exaltiertere
+exaltierterem
+exaltierteren
+exaltierterer
+exaltierteres
+exaltiertes
+exaltierteste
+exaltiertestem
+exaltiertesten
+exaltiertester
+exaltiertestes
+examiniere
+examinieren
+examinierend
+examinierende
+examinierendem
+examinierenden
+examinierender
+examinierendes
+examinierst
+examiniert
+examinierte
+examiniertem
+examinierten
+examinierter
+examiniertes
+examiniertest
+examiniertet
+excellent
+excellente
+excellentem
+excellenten
+excellenter
+excellentes
+exegetisch
+exegetische
+exegetischem
+exegetischen
+exegetischer
+exegetisches
+exekutiere
+exekutieren
+exekutierend
+exekutierende
+exekutierendem
+exekutierenden
+exekutierender
+exekutierendes
+exekutierst
+exekutiert
+exekutierte
+exekutiertem
+exekutierten
+exekutierter
+exekutiertes
+exekutiertest
+exekutiertet
+exekutiv
+exekutive
+exekutivem
+exekutiven
+exekutiver
+exekutives
+exemplarisch
+exemplarische
+exemplarischem
+exemplarischen
+exemplarischer
+exemplarisches
+exerziere
+exerzieren
+exerzierend
+exerzierende
+exerzierendem
+exerzierenden
+exerzierender
+exerzierendes
+exerzierst
+exerziert
+exerzierte
+exerzierten
+exerziertest
+exerziertet
+exilpolnisch
+exilpolnische
+exilpolnischem
+exilpolnischen
+exilpolnischer
+exilpolnisches
+exilungarisch
+exilungarische
+exilungarischem
+exilungarischen
+exilungarischer
+exilungarisches
+existent
+existente
+existentem
+existenten
+existenter
+existentes
+existentiell
+existentielle
+existentiellem
+existentiellen
+existentieller
+existentielles
+existenzbedrohend
+existenzbedrohende
+existenzbedrohendem
+existenzbedrohenden
+existenzbedrohender
+existenzbedrohendes
+existenzgefährdend
+existenzgefährdende
+existenzgefährdendem
+existenzgefährdenden
+existenzgefährdender
+existenzgefährdendes
+existenziell
+existenzielle
+existenziellem
+existenziellen
+existenzieller
+existenzielles
+existiere
+existieren
+existierend
+existierende
+existierendem
+existierenden
+existierender
+existierendes
+existierst
+existiert
+existierte
+existierten
+existiertest
+existiertet
+exklusiv
+exklusive
+exklusivem
+exklusiven
+exklusiver
+exklusivere
+exklusiverem
+exklusiveren
+exklusiverer
+exklusiveres
+exklusives
+exklusivste
+exklusivstem
+exklusivsten
+exklusivster
+exklusivstes
+exogen
+exogene
+exogenem
+exogenen
+exogener
+exogenes
+exotisch
+exotische
+exotischem
+exotischen
+exotischer
+exotischere
+exotischerem
+exotischeren
+exotischerer
+exotischeres
+exotisches
+exotischste
+exotischstem
+exotischsten
+exotischster
+exotischstes
+expandiere
+expandieren
+expandierend
+expandierende
+expandierendem
+expandierenden
+expandierender
+expandierendes
+expandierst
+expandiert
+expandierte
+expandiertem
+expandierten
+expandierter
+expandiertes
+expandiertest
+expandiertet
+expansionistisch
+expansionistische
+expansionistischem
+expansionistischen
+expansionistischer
+expansionistisches
+expansionsfähig
+expansionsfähige
+expansionsfähigem
+expansionsfähigen
+expansionsfähiger
+expansionsfähigere
+expansionsfähigerem
+expansionsfähigeren
+expansionsfähigerer
+expansionsfähigeres
+expansionsfähiges
+expansionsfähigste
+expansionsfähigstem
+expansionsfähigsten
+expansionsfähigster
+expansionsfähigstes
+expansiv
+expansive
+expansivem
+expansiven
+expansiver
+expansivere
+expansiverem
+expansiveren
+expansiverer
+expansiveres
+expansives
+expansivste
+expansivstem
+expansivsten
+expansivster
+expansivstes
+experimentell
+experimentelle
+experimentellem
+experimentellen
+experimenteller
+experimentelles
+experimentiere
+experimentieren
+experimentierend
+experimentierende
+experimentierendem
+experimentierenden
+experimentierender
+experimentierendes
+experimentierst
+experimentiert
+experimentierte
+experimentierten
+experimentiertest
+experimentiertet
+explizit
+explizite
+explizitem
+expliziten
+expliziter
+explizites
+explodiere
+explodieren
+explodierend
+explodierende
+explodierendem
+explodierenden
+explodierender
+explodierendes
+explodierst
+explodiert
+explodierte
+explodiertem
+explodierten
+explodierter
+explodiertes
+explodiertest
+explodiertet
+explosionsartig
+explosionsartige
+explosionsartigem
+explosionsartigen
+explosionsartiger
+explosionsartiges
+explosionsfähig
+explosionsfähige
+explosionsfähigem
+explosionsfähigen
+explosionsfähiger
+explosionsfähiges
+explosionsgefährdet
+explosionsgefährdete
+explosionsgefährdetem
+explosionsgefährdeten
+explosionsgefährdeter
+explosionsgefährdetes
+explosionsgeschützt
+explosionsgeschützte
+explosionsgeschütztem
+explosionsgeschützten
+explosionsgeschützter
+explosionsgeschütztes
+explosiv
+explosive
+explosivem
+explosiven
+explosiver
+explosivere
+explosiverem
+explosiveren
+explosiverer
+explosiveres
+explosives
+explosivste
+explosivstem
+explosivsten
+explosivster
+explosivstes
+exponentiell
+exponentielle
+exponentiellem
+exponentiellen
+exponentieller
+exponentielles
+exponiere
+exponieren
+exponierend
+exponierende
+exponierendem
+exponierenden
+exponierender
+exponierendes
+exponierst
+exponiert
+exponierte
+exponiertem
+exponierten
+exponierter
+exponiertere
+exponierterem
+exponierteren
+exponierterer
+exponierteres
+exponiertes
+exponiertest
+exponierteste
+exponiertestem
+exponiertesten
+exponiertester
+exponiertestes
+exponiertet
+exportierbar
+exportierbare
+exportierbarem
+exportierbaren
+exportierbarer
+exportierbares
+exportiere
+exportieren
+exportierend
+exportierende
+exportierendem
+exportierenden
+exportierender
+exportierendes
+exportierst
+exportiert
+exportierte
+exportiertem
+exportierten
+exportierter
+exportiertes
+exportiertest
+exportiertet
+expressionistisch
+expressionistische
+expressionistischem
+expressionistischen
+expressionistischer
+expressionistisches
+expressis
+expressiv
+expressive
+expressivem
+expressiven
+expressiver
+expressives
+exquisit
+exquisite
+exquisitem
+exquisiten
+exquisiter
+exquisites
+ext
+extensiv
+extensive
+extensivem
+extensiven
+extensiver
+extensives
+extern
+externe
+externem
+externen
+externer
+externes
+exterritorial
+exterritoriale
+exterritorialem
+exterritorialen
+exterritorialer
+exterritoriales
+extra
+extrahiere
+extrahieren
+extrahierend
+extrahierende
+extrahierendem
+extrahierenden
+extrahierender
+extrahierendes
+extrahierst
+extrahiert
+extrahierte
+extrahiertem
+extrahierten
+extrahierter
+extrahiertes
+extrahiertest
+extrahiertet
+extrapolierbar
+extrapolierbare
+extrapolierbarem
+extrapolierbaren
+extrapolierbarer
+extrapolierbares
+extrapoliere
+extrapolieren
+extrapolierend
+extrapolierende
+extrapolierendem
+extrapolierenden
+extrapolierender
+extrapolierendes
+extrapolierst
+extrapoliert
+extrapolierte
+extrapoliertem
+extrapolierten
+extrapolierter
+extrapoliertes
+extrapoliertest
+extrapoliertet
+extrem
+extreme
+extremem
+extremen
+extremer
+extremere
+extremerem
+extremeren
+extremerer
+extremeres
+extremes
+extremistisch
+extremistische
+extremistischem
+extremistischen
+extremistischer
+extremistisches
+extremste
+extremstem
+extremsten
+extremster
+extremstes
+extrudiere
+extrudieren
+extrudierend
+extrudierende
+extrudierendem
+extrudierenden
+extrudierender
+extrudierendes
+extrudierst
+extrudiert
+extrudierte
+extrudiertem
+extrudierten
+extrudierter
+extrudiertes
+extrudiertest
+extrudiertet
+exzellent
+exzellente
+exzellentem
+exzellenten
+exzellenter
+exzellentes
+exzentrisch
+exzentrische
+exzentrischem
+exzentrischen
+exzentrischer
+exzentrisches
+fabelhaft
+fabelhafte
+fabelhaftem
+fabelhaften
+fabelhafter
+fabelhaftes
+fabrikneu
+fabrikneue
+fabrikneuem
+fabrikneuen
+fabrikneuer
+fabrikneues
+fabriziere
+fabrizieren
+fabrizierend
+fabrizierende
+fabrizierendem
+fabrizierenden
+fabrizierender
+fabrizierendes
+fabrizierst
+fabriziert
+fabrizierte
+fabriziertem
+fabrizierten
+fabrizierter
+fabriziertes
+fabriziertest
+fabriziertet
+facettenreich
+facettenreiche
+facettenreichem
+facettenreichen
+facettenreicher
+facettenreiches
+fach
+fache
+fachem
+fachen
+facher
+faches
+fachgemäß
+fachgemäße
+fachgemäßem
+fachgemäßen
+fachgemäßer
+fachgemäßere
+fachgemäßerem
+fachgemäßeren
+fachgemäßerer
+fachgemäßeres
+fachgemäßes
+fachgemäßeste
+fachgemäßestem
+fachgemäßesten
+fachgemäßester
+fachgemäßestes
+fachgerecht
+fachgerechte
+fachgerechtem
+fachgerechten
+fachgerechter
+fachgerechtere
+fachgerechterem
+fachgerechteren
+fachgerechterer
+fachgerechteres
+fachgerechtes
+fachgerechteste
+fachgerechtestem
+fachgerechtesten
+fachgerechtester
+fachgerechtestes
+fachkundig
+fachkundige
+fachkundigem
+fachkundigen
+fachkundiger
+fachkundigere
+fachkundigerem
+fachkundigeren
+fachkundigerer
+fachkundigeres
+fachkundiges
+fachkundigste
+fachkundigstem
+fachkundigsten
+fachkundigster
+fachkundigstes
+fachlich
+fachliche
+fachlichem
+fachlichen
+fachlicher
+fachlichere
+fachlicherem
+fachlicheren
+fachlicherer
+fachlicheres
+fachliches
+fachlichste
+fachlichstem
+fachlichsten
+fachlichster
+fachlichstes
+fachmännisch
+fachmännische
+fachmännischem
+fachmännischen
+fachmännischer
+fachmännischere
+fachmännischerem
+fachmännischeren
+fachmännischerer
+fachmännischeres
+fachmännisches
+fachmännischste
+fachmännischstem
+fachmännischsten
+fachmännischster
+fachmännischstes
+fachsimpele
+fachsimpeln
+fachsimpelst
+fachsimpelt
+fachsimpelte
+fachsimpelten
+fachsimpeltest
+fachsimpeltet
+fachsimple
+fachspezifisch
+fachspezifische
+fachspezifischem
+fachspezifischen
+fachspezifischer
+fachspezifisches
+fachst
+facht
+fachte
+fachten
+fachtest
+fachtet
+fackele
+fackeln
+fackelnd
+fackelnde
+fackelndem
+fackelnden
+fackelnder
+fackelndes
+fackelst
+fackelt
+fackelte
+fackelten
+fackeltest
+fackeltet
+fackle
+facto
+fade
+fadem
+faden
+fadenscheinig
+fadenscheinige
+fadenscheinigem
+fadenscheinigen
+fadenscheiniger
+fadenscheinigere
+fadenscheinigerem
+fadenscheinigeren
+fadenscheinigerer
+fadenscheinigeres
+fadenscheiniges
+fadenscheinigste
+fadenscheinigstem
+fadenscheinigsten
+fadenscheinigster
+fadenscheinigstes
+fader
+fadere
+faderem
+faderen
+faderer
+faderes
+fades
+fadeste
+fadestem
+fadesten
+fadester
+fadestes
+fahl
+fahle
+fahlem
+fahlen
+fahler
+fahlere
+fahlerem
+fahleren
+fahlerer
+fahleres
+fahles
+fahlste
+fahlstem
+fahlsten
+fahlster
+fahlstes
+fahnde
+fahnden
+fahndend
+fahndende
+fahndendem
+fahndenden
+fahndender
+fahndendes
+fahndest
+fahndet
+fahndete
+fahndeten
+fahndetest
+fahndetet
+fahrbar
+fahrbare
+fahrbarem
+fahrbaren
+fahrbarer
+fahrbarere
+fahrbarerem
+fahrbareren
+fahrbarerer
+fahrbareres
+fahrbares
+fahrbarste
+fahrbarstem
+fahrbarsten
+fahrbarster
+fahrbarstes
+fahrbereit
+fahrbereite
+fahrbereitem
+fahrbereiten
+fahrbereiter
+fahrbereites
+fahre
+fahren
+fahrend
+fahrende
+fahrendem
+fahrenden
+fahrender
+fahrendes
+fahrig
+fahrige
+fahrigem
+fahrigen
+fahriger
+fahrigere
+fahrigerem
+fahrigeren
+fahrigerer
+fahrigeres
+fahriges
+fahrigste
+fahrigstem
+fahrigsten
+fahrigster
+fahrigstes
+fahrlässig
+fahrlässige
+fahrlässigem
+fahrlässigen
+fahrlässiger
+fahrlässigere
+fahrlässigerem
+fahrlässigeren
+fahrlässigerer
+fahrlässigeres
+fahrlässiges
+fahrlässigste
+fahrlässigstem
+fahrlässigsten
+fahrlässigster
+fahrlässigstes
+fahrplanmäßig
+fahrplanmäßige
+fahrplanmäßigem
+fahrplanmäßigen
+fahrplanmäßiger
+fahrplanmäßiges
+fahrt
+fair
+faire
+fairem
+fairen
+fairer
+faires
+fakirhaft
+fakirhafte
+fakirhaftem
+fakirhaften
+fakirhafter
+fakirhaftes
+faktisch
+faktische
+faktischem
+faktischen
+faktischer
+faktisches
+fakturiere
+fakturieren
+fakturierst
+fakturiert
+fakturierte
+fakturiertem
+fakturierten
+fakturierter
+fakturiertes
+fakturiertest
+fakturiertet
+fakultativ
+fakultative
+fakultativem
+fakultativen
+fakultativer
+fakultatives
+falb
+falbe
+falbem
+falben
+falber
+falbes
+falle
+fallen
+fallend
+fallende
+fallendem
+fallenden
+fallender
+fallendes
+falls
+fallsüchtig
+fallsüchtige
+fallsüchtigem
+fallsüchtigen
+fallsüchtiger
+fallsüchtiges
+fallt
+falsch
+falsche
+falschem
+falschen
+falscher
+falschere
+falscherem
+falscheren
+falscherer
+falscheres
+falsches
+falscheste
+falschestem
+falschesten
+falschester
+falschestes
+falschspiele
+falschspielen
+falschspielend
+falschspielende
+falschspielendem
+falschspielenden
+falschspielender
+falschspielendes
+falschspielst
+falschspielt
+falschspielte
+falschspielten
+falschspieltest
+falschspieltet
+falte
+falten
+faltend
+faltende
+faltendem
+faltenden
+faltender
+faltendes
+faltenfrei
+faltenfreie
+faltenfreiem
+faltenfreien
+faltenfreier
+faltenfreies
+faltest
+faltet
+faltete
+falteten
+faltetest
+faltetet
+faltig
+faltige
+faltigem
+faltigen
+faltiger
+faltigere
+faltigerem
+faltigeren
+faltigerer
+faltigeres
+faltiges
+faltigste
+faltigstem
+faltigsten
+faltigster
+faltigstes
+familiengerecht
+familiengerechte
+familiengerechtem
+familiengerechten
+familiengerechter
+familiengerechtes
+familienunabhängig
+familienunabhängige
+familienunabhängigem
+familienunabhängigen
+familienunabhängiger
+familienunabhängiges
+familiär
+familiäre
+familiärem
+familiären
+familiärer
+familiärere
+familiärerem
+familiäreren
+familiärerer
+familiäreres
+familiäres
+familiärste
+familiärstem
+familiärsten
+familiärster
+familiärstes
+famos
+famose
+famosem
+famosen
+famoser
+famosere
+famoserem
+famoseren
+famoserer
+famoseres
+famoses
+famoseste
+famosestem
+famosesten
+famosester
+famosestes
+fanatisch
+fanatische
+fanatischem
+fanatischen
+fanatischer
+fanatisches
+fand
+fanden
+fandest
+fandet
+fandst
+fangbewehrt
+fangbewehrte
+fangbewehrtem
+fangbewehrten
+fangbewehrter
+fangbewehrtes
+fange
+fangen
+fangend
+fangende
+fangendem
+fangenden
+fangender
+fangendes
+fangt
+fantasielos
+fantasielose
+fantasielosem
+fantasielosen
+fantasieloser
+fantasielosere
+fantasieloserem
+fantasieloseren
+fantasieloserer
+fantasieloseres
+fantasieloses
+fantasieloseste
+fantasielosestem
+fantasielosesten
+fantasielosester
+fantasielosestes
+fantasiereich
+fantasiereiche
+fantasiereichem
+fantasiereichen
+fantasiereicher
+fantasiereichere
+fantasiereicherem
+fantasiereicheren
+fantasiereicherer
+fantasiereicheres
+fantasiereiches
+fantasiereichste
+fantasiereichstem
+fantasiereichsten
+fantasiereichster
+fantasiereichstes
+fantasievoll
+fantasievolle
+fantasievollem
+fantasievollen
+fantasievoller
+fantasievollere
+fantasievollerem
+fantasievolleren
+fantasievollerer
+fantasievolleres
+fantasievolles
+fantasievollste
+fantasievollstem
+fantasievollsten
+fantasievollster
+fantasievollstes
+fantastisch
+fantastische
+fantastischem
+fantastischen
+fantastischer
+fantastischere
+fantastischerem
+fantastischeren
+fantastischerer
+fantastischeres
+fantastisches
+fantastischste
+fantastischstem
+fantastischsten
+fantastischster
+fantastischstes
+farbecht
+farbechte
+farbechtem
+farbechten
+farbechter
+farbechtes
+farbenblind
+farbenblinde
+farbenblindem
+farbenblinden
+farbenblinder
+farbenblindes
+farbenfreudig
+farbenfreudige
+farbenfreudigem
+farbenfreudigen
+farbenfreudiger
+farbenfreudiges
+farbenfroh
+farbenfrohe
+farbenfrohem
+farbenfrohen
+farbenfroher
+farbenfrohes
+farbenprächtig
+farbenprächtige
+farbenprächtigem
+farbenprächtigen
+farbenprächtiger
+farbenprächtigere
+farbenprächtigerem
+farbenprächtigeren
+farbenprächtigerer
+farbenprächtigeres
+farbenprächtiges
+farbenprächtigste
+farbenprächtigstem
+farbenprächtigsten
+farbenprächtigster
+farbenprächtigstes
+farbenreich
+farbenreiche
+farbenreichem
+farbenreichen
+farbenreicher
+farbenreiches
+farbgraphisch
+farbgraphische
+farbgraphischem
+farbgraphischen
+farbgraphischer
+farbgraphisches
+farbig
+farbige
+farbigem
+farbigen
+farbiger
+farbigere
+farbigerem
+farbigeren
+farbigerer
+farbigeres
+farbiges
+farbigste
+farbigstem
+farbigsten
+farbigster
+farbigstes
+farblich
+farbliche
+farblichem
+farblichen
+farblicher
+farbliches
+farblos
+farblose
+farblosem
+farblosen
+farbloser
+farblosere
+farbloserem
+farbloseren
+farbloserer
+farbloseres
+farbloses
+farbloseste
+farblosestem
+farblosesten
+farblosester
+farblosestes
+faschier
+faschiere
+faschieren
+faschierend
+faschierende
+faschierendem
+faschierenden
+faschierender
+faschierendes
+faschierst
+faschiert
+faschierte
+faschierten
+faschiertest
+faschiertet
+faschistisch
+faschistische
+faschistischem
+faschistischen
+faschistischer
+faschistisches
+fasele
+faseln
+faselnd
+faselnde
+faselndem
+faselnden
+faselnder
+faselndes
+faselst
+faselt
+faselte
+faselten
+faseltest
+faseltet
+faserig
+faserige
+faserigem
+faserigen
+faseriger
+faserigere
+faserigerem
+faserigeren
+faserigerer
+faserigeres
+faseriges
+faserigste
+faserigstem
+faserigsten
+faserigster
+faserigstes
+fasle
+fasrig
+fasrige
+fasrigem
+fasrigen
+fasriger
+fasrigere
+fasrigerem
+fasrigeren
+fasrigerer
+fasrigeres
+fasriges
+fasrigste
+fasrigstem
+fasrigsten
+fasrigster
+fasrigstes
+fassbar
+fassbare
+fassbarem
+fassbaren
+fassbarer
+fassbares
+fasse
+fassen
+fassend
+fassende
+fassendem
+fassenden
+fassender
+fassendes
+fassest
+fassettenreich
+fassettenreiche
+fassettenreichem
+fassettenreichen
+fassettenreicher
+fassettenreiches
+fasst
+fasste
+fassten
+fasstest
+fasstet
+fassungslos
+fassungslose
+fassungslosem
+fassungslosen
+fassungsloser
+fassungslosere
+fassungsloserem
+fassungsloseren
+fassungsloserer
+fassungsloseres
+fassungsloses
+fassungsloseste
+fassungslosestem
+fassungslosesten
+fassungslosester
+fassungslosestes
+fast
+faste
+fasten
+fastend
+fastende
+fastendem
+fastenden
+fastender
+fastendes
+fastest
+fastet
+fastete
+fasteten
+fastetest
+fastetet
+fasziniere
+faszinieren
+faszinierend
+faszinierende
+faszinierendem
+faszinierenden
+faszinierender
+faszinierendere
+faszinierenderem
+faszinierenderen
+faszinierenderer
+faszinierenderes
+faszinierendes
+faszinierendste
+faszinierendstem
+faszinierendsten
+faszinierendster
+faszinierendstes
+faszinierst
+fasziniert
+faszinierte
+fasziniertem
+faszinierten
+faszinierter
+fasziniertes
+fasziniertest
+fasziniertet
+fatal
+fatale
+fatalem
+fatalen
+fataler
+fatalere
+fatalerem
+fataleren
+fatalerer
+fataleres
+fatales
+fatalistisch
+fatalistische
+fatalistischem
+fatalistischen
+fatalistischer
+fatalistisches
+fatalste
+fatalstem
+fatalsten
+fatalster
+fatalstes
+fauche
+fauchen
+fauchend
+fauchende
+fauchendem
+fauchenden
+fauchender
+fauchendes
+fauchst
+faucht
+fauchte
+fauchten
+fauchtest
+fauchtet
+faul
+faule
+faulem
+faulen
+faulend
+faulende
+faulendem
+faulenden
+faulender
+faulendes
+faulenze
+faulenzen
+faulenzend
+faulenzende
+faulenzendem
+faulenzenden
+faulenzender
+faulenzendes
+faulenzest
+faulenzt
+faulenzte
+faulenzten
+faulenztest
+faulenztet
+fauler
+faulere
+faulerem
+fauleren
+faulerer
+fauleres
+faules
+faulig
+faulige
+fauligem
+fauligen
+fauliger
+fauliges
+faulst
+faulste
+faulstem
+faulsten
+faulster
+faulstes
+fault
+faulte
+faulten
+faultest
+faultet
+faustdick
+faustdicke
+faustdickem
+faustdicken
+faustdicker
+faustdickes
+faustgroß
+faustgroße
+faustgroßem
+faustgroßen
+faustgroßer
+faustgroßes
+favorisiere
+favorisieren
+favorisierst
+favorisiert
+favorisierte
+favorisiertem
+favorisierten
+favorisierter
+favorisiertes
+favorisiertest
+favorisiertet
+faxe
+faxen
+faxend
+faxende
+faxendem
+faxenden
+faxender
+faxendes
+faxest
+faxt
+faxte
+faxten
+faxtest
+faxtet
+fechte
+fechten
+fechtend
+fechtende
+fechtendem
+fechtenden
+fechtender
+fechtendes
+fechtest
+fechtet
+federe
+federführend
+federführende
+federführendem
+federführenden
+federführender
+federführendes
+federgewichtig
+federgewichtige
+federgewichtigem
+federgewichtigen
+federgewichtiger
+federgewichtiges
+federleicht
+federleichte
+federleichtem
+federleichten
+federleichter
+federleichtes
+federn
+federnd
+federnde
+federndem
+federnden
+federnder
+federndes
+federst
+federt
+federte
+federten
+federtest
+federtet
+fedre
+feenhaft
+feenhafte
+feenhaftem
+feenhaften
+feenhafter
+feenhaftere
+feenhafterem
+feenhafteren
+feenhafterer
+feenhafteres
+feenhaftes
+feenhafteste
+feenhaftestem
+feenhaftesten
+feenhaftester
+feenhaftestes
+fege
+fegen
+fegend
+fegende
+fegendem
+fegenden
+fegender
+fegendes
+fegst
+fegt
+fegte
+fegten
+fegtest
+fegtet
+fehlbar
+fehlbare
+fehlbarem
+fehlbaren
+fehlbarer
+fehlbares
+fehle
+fehlen
+fehlend
+fehlende
+fehlendem
+fehlenden
+fehlender
+fehlendes
+fehleranfällig
+fehleranfällige
+fehleranfälligem
+fehleranfälligen
+fehleranfälliger
+fehleranfälliges
+fehlerbehaftet
+fehlerbehaftete
+fehlerbehaftetem
+fehlerbehafteten
+fehlerbehafteter
+fehlerbehaftetes
+fehlerfrei
+fehlerfreie
+fehlerfreiem
+fehlerfreien
+fehlerfreier
+fehlerfreies
+fehlerhaft
+fehlerhafte
+fehlerhaftem
+fehlerhaften
+fehlerhafter
+fehlerhaftere
+fehlerhafterem
+fehlerhafteren
+fehlerhafterer
+fehlerhafteres
+fehlerhaftes
+fehlerhafteste
+fehlerhaftestem
+fehlerhaftesten
+fehlerhaftester
+fehlerhaftestes
+fehlerlos
+fehlerlose
+fehlerlosem
+fehlerlosen
+fehlerloser
+fehlerloses
+fehlgeleitet
+fehlgeleitete
+fehlgeleitetem
+fehlgeleiteten
+fehlgeleiteter
+fehlgeleitetes
+fehlgeschlagen
+fehlgeschlagene
+fehlgeschlagenem
+fehlgeschlagenen
+fehlgeschlagener
+fehlgeschlagenes
+fehlinterpretiere
+fehlinterpretieren
+fehlinterpretierend
+fehlinterpretierende
+fehlinterpretierendem
+fehlinterpretierenden
+fehlinterpretierender
+fehlinterpretierendes
+fehlinterpretierst
+fehlinterpretiert
+fehlinterpretierte
+fehlinterpretiertem
+fehlinterpretierten
+fehlinterpretierter
+fehlinterpretiertes
+fehlinterpretiertest
+fehlinterpretiertet
+fehlschlage
+fehlschlagen
+fehlschlagend
+fehlschlagende
+fehlschlagendem
+fehlschlagenden
+fehlschlagender
+fehlschlagendes
+fehlschlagt
+fehlschlug
+fehlschlugen
+fehlschlugst
+fehlschlugt
+fehlst
+fehlt
+fehlte
+fehlten
+fehltest
+fehltet
+feiere
+feierlich
+feierliche
+feierlichem
+feierlichen
+feierlicher
+feierlichere
+feierlicherem
+feierlicheren
+feierlicherer
+feierlicheres
+feierliches
+feierlichste
+feierlichstem
+feierlichsten
+feierlichster
+feierlichstes
+feiern
+feiernd
+feiernde
+feierndem
+feiernden
+feiernder
+feierndes
+feierst
+feiert
+feierte
+feierten
+feiertest
+feiertet
+feig
+feige
+feigem
+feigen
+feiger
+feigere
+feigerem
+feigeren
+feigerer
+feigeres
+feiges
+feigste
+feigstem
+feigsten
+feigster
+feigstes
+feil
+feilbiete
+feilbieten
+feilbietend
+feilbietende
+feilbietendem
+feilbietenden
+feilbietender
+feilbietendes
+feilbietest
+feilbietet
+feile
+feilen
+feilend
+feilende
+feilendem
+feilenden
+feilender
+feilendes
+feilsche
+feilschen
+feilschend
+feilschende
+feilschendem
+feilschenden
+feilschender
+feilschendes
+feilschest
+feilschst
+feilscht
+feilschte
+feilschten
+feilschtest
+feilschtet
+feilst
+feilt
+feilte
+feilten
+feiltest
+feiltet
+feilzubieten
+feilzubietend
+feilzubietende
+feilzubietendem
+feilzubietenden
+feilzubietender
+feilzubietendes
+fein
+feindlich
+feindliche
+feindlichem
+feindlichen
+feindlicher
+feindlichere
+feindlicherem
+feindlicheren
+feindlicherer
+feindlicheres
+feindliches
+feindlichste
+feindlichstem
+feindlichsten
+feindlichster
+feindlichstes
+feindselig
+feindselige
+feindseligem
+feindseligen
+feindseliger
+feindseliges
+feine
+feineinstelle
+feineinstellen
+feineinstellend
+feineinstellende
+feineinstellendem
+feineinstellenden
+feineinstellender
+feineinstellendes
+feineinstellst
+feineinstellt
+feineinstellte
+feineinstellten
+feineinstelltest
+feineinstelltet
+feinem
+feinen
+feiner
+feinere
+feinerem
+feineren
+feinerer
+feineres
+feines
+feinfühlig
+feinfühlige
+feinfühligem
+feinfühligen
+feinfühliger
+feinfühligere
+feinfühligerem
+feinfühligeren
+feinfühligerer
+feinfühligeres
+feinfühliges
+feinfühligste
+feinfühligstem
+feinfühligsten
+feinfühligster
+feinfühligstes
+feingespitzt
+feingespitzte
+feingespitztem
+feingespitzten
+feingespitzter
+feingespitztes
+feinhäutig
+feinhäutige
+feinhäutigem
+feinhäutigen
+feinhäutiger
+feinhäutiges
+feinhörig
+feinhörige
+feinhörigem
+feinhörigen
+feinhöriger
+feinhörigere
+feinhörigerem
+feinhörigeren
+feinhörigerer
+feinhörigeres
+feinhöriges
+feinhörigste
+feinhörigstem
+feinhörigsten
+feinhörigster
+feinhörigstes
+feinkörnig
+feinkörnige
+feinkörnigem
+feinkörnigen
+feinkörniger
+feinkörniges
+feinmaschig
+feinmaschige
+feinmaschigem
+feinmaschigen
+feinmaschiger
+feinmaschiges
+feinmechanisch
+feinmechanische
+feinmechanischem
+feinmechanischen
+feinmechanischer
+feinmechanisches
+feinnervig
+feinnervige
+feinnervigem
+feinnervigen
+feinnerviger
+feinnerviges
+feinschmeckerisch
+feinschmeckerische
+feinschmeckerischem
+feinschmeckerischen
+feinschmeckerischer
+feinschmeckerisches
+feinsinnig
+feinsinnige
+feinsinnigem
+feinsinnigen
+feinsinniger
+feinsinniges
+feinste
+feinstem
+feinsten
+feinster
+feinstes
+feinstverteilt
+feinstverteilte
+feinstverteiltem
+feinstverteilten
+feinstverteilter
+feinstverteiltes
+feinverteilt
+feinverteilte
+feinverteiltem
+feinverteilten
+feinverteilter
+feinverteiltes
+feire
+fellig
+fellige
+felligem
+felligen
+felliger
+felliges
+felsenfest
+felsenfeste
+felsenfestem
+felsenfesten
+felsenfester
+felsenfestes
+felsig
+felsige
+felsigem
+felsigen
+felsiger
+felsigere
+felsigerem
+felsigeren
+felsigerer
+felsigeres
+felsiges
+felsigste
+felsigstem
+felsigsten
+felsigster
+felsigstes
+feminin
+feminine
+femininem
+femininen
+femininer
+feminines
+fern
+fernab
+fernabgelegen
+fernabgelegene
+fernabgelegenem
+fernabgelegenen
+fernabgelegener
+fernabgelegenes
+fernbedienbar
+fernbedienbare
+fernbedienbarem
+fernbedienbaren
+fernbedienbarer
+fernbedienbares
+fernbleibe
+fernbleiben
+fernbleibend
+fernbleibende
+fernbleibendem
+fernbleibenden
+fernbleibender
+fernbleibendes
+fernbleibst
+fernbleibt
+fernblieb
+fernblieben
+fernbliebst
+fernbliebt
+ferne
+ferneingestellt
+ferneingestellte
+ferneingestelltem
+ferneingestellten
+ferneingestellter
+ferneingestelltes
+fernem
+fernen
+ferner
+fernere
+fernerem
+ferneren
+fernerer
+ferneres
+fernerhin
+fernes
+ferngeblieben
+ferngebliebene
+ferngebliebenem
+ferngebliebenen
+ferngebliebener
+ferngebliebenes
+ferngeglieben
+ferngegliebene
+ferngegliebenem
+ferngegliebenen
+ferngegliebener
+ferngegliebenes
+ferngehalten
+ferngehaltene
+ferngehaltenem
+ferngehaltenen
+ferngehaltener
+ferngehaltenes
+ferngeladen
+ferngeladene
+ferngeladenem
+ferngeladenen
+ferngeladener
+ferngeladenes
+ferngelenkt
+ferngelenkte
+ferngelenktem
+ferngelenkten
+ferngelenkter
+ferngelenktes
+ferngesteuert
+ferngesteuerte
+ferngesteuertem
+ferngesteuerten
+ferngesteuerter
+ferngesteuertes
+ferngezündet
+ferngezündete
+ferngezündetem
+ferngezündeten
+ferngezündeter
+ferngezündetes
+fernkontrolliert
+fernkontrollierte
+fernkontrolliertem
+fernkontrollierten
+fernkontrollierter
+fernkontrolliertes
+fernladbar
+fernladbare
+fernladbarem
+fernladbaren
+fernladbarer
+fernladbares
+fernlenkbar
+fernlenkbare
+fernlenkbarem
+fernlenkbaren
+fernlenkbarer
+fernlenkbares
+fernlenke
+fernlenken
+fernlenkend
+fernlenkende
+fernlenkendem
+fernlenkenden
+fernlenkender
+fernlenkendes
+fernlenkst
+fernlenkt
+fernlenkte
+fernlenkten
+fernlenktest
+fernlenktet
+fernmeldetechnisch
+fernmeldetechnische
+fernmeldetechnischem
+fernmeldetechnischen
+fernmeldetechnischer
+fernmeldetechnisches
+fernmündlich
+fernmündliche
+fernmündlichem
+fernmündlichen
+fernmündlicher
+fernmündliches
+fernschriftlich
+fernschriftliche
+fernschriftlichem
+fernschriftlichen
+fernschriftlicher
+fernschriftliches
+fernsehe
+fernsehen
+fernsehend
+fernsehende
+fernsehendem
+fernsehenden
+fernsehender
+fernsehendes
+fernseht
+fernsichtig
+fernsichtige
+fernsichtigem
+fernsichtigen
+fernsichtiger
+fernsichtiges
+fernste
+fernstem
+fernsten
+fernster
+fernstes
+fernzubleiben
+fernöstlich
+fernöstliche
+fernöstlichem
+fernöstlichen
+fernöstlicher
+fernöstliches
+fertig
+fertige
+fertigem
+fertigen
+fertigend
+fertigende
+fertigendem
+fertigenden
+fertigender
+fertigendes
+fertiger
+fertigere
+fertigerem
+fertigeren
+fertigerer
+fertigeres
+fertiges
+fertigst
+fertigste
+fertigstem
+fertigsten
+fertigster
+fertigstes
+fertigt
+fertigte
+fertigten
+fertigtest
+fertigtet
+fesch
+fesche
+feschem
+feschen
+fescher
+feschere
+fescherem
+fescheren
+fescherer
+fescheres
+fesches
+feschste
+feschstem
+feschsten
+feschster
+feschstes
+fessele
+fesseln
+fesselnd
+fesselnde
+fesselndem
+fesselnden
+fesselnder
+fesselndere
+fesselnderem
+fesselnderen
+fesselnderer
+fesselnderes
+fesselndes
+fesselndste
+fesselndstem
+fesselndsten
+fesselndster
+fesselndstes
+fesselst
+fesselt
+fesselte
+fesselten
+fesseltest
+fesseltet
+fessle
+fest
+festbinde
+festbinden
+festbindend
+festbindende
+festbindendem
+festbindenden
+festbindender
+festbindendes
+festbindest
+festbindet
+feste
+festem
+festen
+fester
+festere
+festerem
+festeren
+festerer
+festeres
+festes
+festeste
+festestem
+festesten
+festester
+festestes
+festfahre
+festfahren
+festfahrend
+festfahrende
+festfahrendem
+festfahrenden
+festfahrender
+festfahrendes
+festfahrt
+festgebunden
+festgebundene
+festgebundenem
+festgebundenen
+festgebundener
+festgebundenes
+festgefahren
+festgefahrene
+festgefahrenem
+festgefahrenen
+festgefahrener
+festgefahrenes
+festgehalten
+festgehaltene
+festgehaltenem
+festgehaltenen
+festgehaltener
+festgehaltenes
+festgeklebt
+festgeklebte
+festgeklebtem
+festgeklebten
+festgeklebter
+festgeklebtes
+festgeklemmt
+festgeklemmte
+festgeklemmtem
+festgeklemmten
+festgeklemmter
+festgeklemmtes
+festgelegt
+festgelegte
+festgelegtem
+festgelegten
+festgelegter
+festgelegtes
+festgemacht
+festgemachte
+festgemachtem
+festgemachten
+festgemachter
+festgemachtes
+festgenagelt
+festgenagelte
+festgenageltem
+festgenagelten
+festgenagelter
+festgenageltes
+festgenommen
+festgenommene
+festgenommenem
+festgenommenen
+festgenommener
+festgenommenes
+festgeschnallt
+festgeschnallte
+festgeschnalltem
+festgeschnallten
+festgeschnallter
+festgeschnalltes
+festgeschraubt
+festgeschraubte
+festgeschraubtem
+festgeschraubten
+festgeschraubter
+festgeschraubtes
+festgeschrieben
+festgeschriebene
+festgeschriebenem
+festgeschriebenen
+festgeschriebener
+festgeschriebenes
+festgesetzt
+festgesetzte
+festgesetztem
+festgesetzten
+festgesetzter
+festgesetztes
+festgestanden
+festgestandene
+festgestandenem
+festgestandenen
+festgestandener
+festgestandenes
+festgesteckt
+festgesteckte
+festgestecktem
+festgesteckten
+festgesteckter
+festgestecktes
+festgestellt
+festgestellte
+festgestelltem
+festgestellten
+festgestellter
+festgestelltes
+festgezogen
+festgezogene
+festgezogenem
+festgezogenen
+festgezogener
+festgezogenes
+festhalte
+festhalten
+festhaltend
+festhaltende
+festhaltendem
+festhaltenden
+festhaltender
+festhaltendes
+festhaltet
+festhielt
+festhielten
+festhieltest
+festhieltet
+festhieltst
+festhält
+festhältst
+festige
+festigen
+festigend
+festigende
+festigendem
+festigenden
+festigender
+festigendes
+festigst
+festigt
+festigte
+festigten
+festigtest
+festigtet
+festklebe
+festkleben
+festklebend
+festklebende
+festklebendem
+festklebenden
+festklebender
+festklebendes
+festklebst
+festklebt
+festklebte
+festklebten
+festklebtest
+festklebtet
+festlege
+festlegen
+festlegend
+festlegende
+festlegendem
+festlegenden
+festlegender
+festlegendes
+festlegst
+festlegt
+festlegte
+festlegten
+festlegtest
+festlegtet
+festlich
+festliche
+festlichem
+festlichen
+festlicher
+festlichere
+festlicherem
+festlicheren
+festlicherer
+festlicheres
+festliches
+festlichste
+festlichstem
+festlichsten
+festlichster
+festlichstes
+festliege
+festliegen
+festliegend
+festliegende
+festliegendem
+festliegenden
+festliegender
+festliegendes
+festliegst
+festliegt
+festmache
+festmachen
+festmachend
+festmachende
+festmachendem
+festmachenden
+festmachender
+festmachendes
+festmachst
+festmacht
+festmachte
+festmachten
+festmachtest
+festmachtet
+festmontiere
+festmontieren
+festmontierend
+festmontierende
+festmontierendem
+festmontierenden
+festmontierender
+festmontierendes
+festmontierst
+festmontiert
+festmontierte
+festmontiertem
+festmontierten
+festmontierter
+festmontiertes
+festmontiertest
+festmontiertet
+festnagele
+festnageln
+festnagelnd
+festnagelnde
+festnagelndem
+festnagelnden
+festnagelnder
+festnagelndes
+festnagelst
+festnagelt
+festnagelte
+festnagelten
+festnageltest
+festnageltet
+festnagle
+festnehme
+festnehmen
+festnehmend
+festnehmende
+festnehmendem
+festnehmenden
+festnehmender
+festnehmendes
+festnehmt
+festschmore
+festschmoren
+festschmorend
+festschmorende
+festschmorendem
+festschmorenden
+festschmorender
+festschmorendes
+festschmorst
+festschmort
+festschmorte
+festschmorten
+festschmortest
+festschmortet
+festschnallbar
+festschnallbare
+festschnallbarem
+festschnallbaren
+festschnallbarer
+festschnallbares
+festschnalle
+festschnallen
+festschnallend
+festschnallende
+festschnallendem
+festschnallenden
+festschnallender
+festschnallendes
+festschnallst
+festschnallt
+festschnallte
+festschnallten
+festschnalltest
+festschnalltet
+festschraube
+festschrauben
+festschraubst
+festschraubt
+festschraubte
+festschraubten
+festschraubtest
+festschraubtet
+festschreibbar
+festschreibbare
+festschreibbarem
+festschreibbaren
+festschreibbarer
+festschreibbares
+festschreibe
+festschreiben
+festschreibst
+festschreibt
+festschreibte
+festschreibten
+festschreibtest
+festschreibtet
+festsetze
+festsetzen
+festsetzend
+festsetzende
+festsetzendem
+festsetzenden
+festsetzender
+festsetzendes
+festsetzest
+festsetzt
+festsetzte
+festsetzten
+festsetztest
+festsetztet
+festsitze
+festsitzen
+festsitzend
+festsitzende
+festsitzendem
+festsitzenden
+festsitzender
+festsitzendes
+festsitzest
+festsitzt
+festspanne
+festspannen
+festspannend
+festspannende
+festspannendem
+festspannenden
+festspannender
+festspannendes
+festspannst
+festspannt
+festspannte
+festspannten
+festspanntest
+festspanntet
+feststand
+feststanden
+feststandest
+feststandet
+feststandst
+feststecke
+feststecken
+feststeckend
+feststeckende
+feststeckendem
+feststeckenden
+feststeckender
+feststeckendes
+feststeckst
+feststeckt
+feststeckte
+feststeckten
+feststecktest
+feststecktet
+feststehe
+feststehen
+feststehend
+feststehende
+feststehendem
+feststehenden
+feststehender
+feststehendes
+feststehst
+feststeht
+feststellbar
+feststellbare
+feststellbarem
+feststellbaren
+feststellbarer
+feststellbares
+feststelle
+feststellen
+feststellend
+feststellende
+feststellendem
+feststellenden
+feststellender
+feststellendes
+feststellst
+feststellt
+feststellte
+feststellten
+feststelltest
+feststelltet
+festziehe
+festziehen
+festziehend
+festziehende
+festziehendem
+festziehenden
+festziehender
+festziehendes
+festziehst
+festzieht
+festzuhalten
+festzuhaltend
+festzuhaltende
+festzuhaltendem
+festzuhaltenden
+festzuhaltender
+festzuhaltendes
+festzukrallen
+festzulegen
+festzulegend
+festzulegende
+festzulegendem
+festzulegenden
+festzulegender
+festzulegendes
+festzumachen
+festzumachend
+festzumachende
+festzumachendem
+festzumachenden
+festzumachender
+festzumachendes
+festzuschreiben
+festzuschreibend
+festzuschreibende
+festzuschreibendem
+festzuschreibenden
+festzuschreibender
+festzuschreibendes
+festzusetzen
+festzusetzend
+festzusetzende
+festzusetzendem
+festzusetzenden
+festzusetzender
+festzusetzendes
+festzustehen
+festzustellen
+festzustellend
+festzustellende
+festzustellendem
+festzustellenden
+festzustellender
+festzustellendes
+fett
+fette
+fettem
+fetten
+fetter
+fettere
+fetterem
+fetteren
+fetterer
+fetteres
+fettes
+fetteste
+fettestem
+fettesten
+fettester
+fettestes
+fettfrei
+fettfreie
+fettfreiem
+fettfreien
+fettfreier
+fettfreies
+fettig
+fettige
+fettigem
+fettigen
+fettiger
+fettigere
+fettigerem
+fettigeren
+fettigerer
+fettigeres
+fettiges
+fettigste
+fettigstem
+fettigsten
+fettigster
+fettigstes
+feucht
+feuchte
+feuchtem
+feuchten
+feuchter
+feuchtere
+feuchterem
+feuchteren
+feuchterer
+feuchteres
+feuchtes
+feuchteste
+feuchtestem
+feuchtesten
+feuchtester
+feuchtestes
+feudal
+feudale
+feudalem
+feudalen
+feudaler
+feudalere
+feudalerem
+feudaleren
+feudalerer
+feudaleres
+feudales
+feudalste
+feudalstem
+feudalsten
+feudalster
+feudalstes
+feuere
+feuerfest
+feuerfeste
+feuerfestem
+feuerfesten
+feuerfester
+feuerfestere
+feuerfesterem
+feuerfesteren
+feuerfesterer
+feuerfesteres
+feuerfestes
+feuerfesteste
+feuerfestestem
+feuerfestesten
+feuerfestester
+feuerfestestes
+feuern
+feuernd
+feuernde
+feuerndem
+feuernden
+feuernder
+feuerndes
+feuerst
+feuert
+feuerte
+feuerten
+feuertest
+feuertet
+feure
+feurig
+feurige
+feurigem
+feurigen
+feuriger
+feurigere
+feurigerem
+feurigeren
+feurigerer
+feurigeres
+feuriges
+feurigste
+feurigstem
+feurigsten
+feurigster
+feurigstes
+ff
+ficht
+fichtst
+fidel
+fidele
+fidelen
+fideler
+fidelere
+fidelerem
+fideleren
+fidelerer
+fideleres
+fideles
+fieberartig
+fieberartige
+fieberartigem
+fieberartigen
+fieberartiger
+fieberartiges
+fiebere
+fieberfrei
+fieberfreie
+fieberfreiem
+fieberfreien
+fieberfreier
+fieberfreies
+fieberhaft
+fieberhafte
+fieberhaftem
+fieberhaften
+fieberhafter
+fieberhaftere
+fieberhafterem
+fieberhafteren
+fieberhafterer
+fieberhafteres
+fieberhaftes
+fieberhafteste
+fieberhaftestem
+fieberhaftesten
+fieberhaftester
+fieberhaftestes
+fieberig
+fieberige
+fieberigem
+fieberigen
+fieberiger
+fieberiges
+fiebern
+fiebernd
+fiebernde
+fieberndem
+fiebernden
+fiebernder
+fieberndes
+fieberst
+fiebert
+fieberte
+fieberten
+fiebertest
+fiebertet
+fiebre
+fiebrig
+fiebrige
+fiebrigem
+fiebrigen
+fiebriger
+fiebriges
+fiel
+fiele
+fielen
+fielst
+fielt
+fies
+fiese
+fiesem
+fiesen
+fieser
+fiesere
+fieserem
+fieseren
+fieserer
+fieseres
+fieses
+fieseste
+fiesestem
+fiesesten
+fiesester
+fiesestes
+figürlich
+figürliche
+figürlichem
+figürlichen
+figürlicher
+figürliches
+fiktiv
+fiktive
+fiktivem
+fiktiven
+fiktiver
+fiktives
+filmbar
+filmbare
+filmbarem
+filmbaren
+filmbarer
+filmbares
+filme
+filmen
+filmend
+filmende
+filmendem
+filmenden
+filmender
+filmendes
+filmisch
+filmische
+filmischem
+filmischen
+filmischer
+filmisches
+filmst
+filmt
+filmte
+filmten
+filmtest
+filmtet
+filtere
+filterlos
+filterlose
+filterlosem
+filterlosen
+filterloser
+filterloses
+filtern
+filternd
+filternde
+filterndem
+filternden
+filternder
+filterndes
+filterst
+filtert
+filterte
+filterten
+filtertest
+filtertet
+filtre
+filzig
+filzige
+filzigem
+filzigen
+filziger
+filziges
+final
+finale
+finalem
+finalen
+finaler
+finales
+finanziell
+finanzielle
+finanziellem
+finanziellen
+finanzieller
+finanzielles
+finanzierbar
+finanzierbare
+finanzierbarem
+finanzierbaren
+finanzierbarer
+finanzierbares
+finanziere
+finanzieren
+finanzierend
+finanzierende
+finanzierendem
+finanzierenden
+finanzierender
+finanzierendes
+finanzierst
+finanziert
+finanzierte
+finanziertem
+finanzierten
+finanzierter
+finanziertes
+finanziertest
+finanziertet
+finanzkräftig
+finanzkräftige
+finanzkräftigem
+finanzkräftigen
+finanzkräftiger
+finanzkräftiges
+finanzpolitisch
+finanzpolitische
+finanzpolitischem
+finanzpolitischen
+finanzpolitischer
+finanzpolitisches
+finanztechnisch
+finanztechnische
+finanztechnischem
+finanztechnischen
+finanztechnischer
+finanztechnisches
+findbar
+findbare
+findbarem
+findbaren
+findbarer
+findbares
+finde
+finden
+findend
+findende
+findendem
+findenden
+findender
+findendes
+findest
+findet
+findig
+findige
+findigem
+findigen
+findiger
+findigere
+findigerem
+findigeren
+findigerer
+findigeres
+findiges
+findigste
+findigstem
+findigsten
+findigster
+findigstes
+fing
+fingen
+fingiere
+fingieren
+fingierend
+fingierende
+fingierendem
+fingierenden
+fingierender
+fingierendes
+fingierst
+fingiert
+fingierte
+fingiertem
+fingierten
+fingierter
+fingiertes
+fingiertest
+fingiertet
+fingst
+fingt
+finnisch
+finnische
+finnischem
+finnischen
+finnischer
+finnisches
+finster
+finstere
+finsterem
+finsteren
+finsterer
+finsterere
+finstererem
+finstereren
+finstererer
+finstereres
+finsteres
+finsterste
+finsterstem
+finstersten
+finsterster
+finsterstes
+firmeneigen
+firmeneigene
+firmeneigenem
+firmeneigenen
+firmeneigener
+firmeneigenes
+fischbar
+fischbare
+fischbarem
+fischbaren
+fischbarer
+fischbares
+fische
+fischen
+fischend
+fischende
+fischendem
+fischenden
+fischender
+fischendes
+fischest
+fischst
+fischt
+fischte
+fischten
+fischtest
+fischtet
+fiskalisch
+fiskalische
+fiskalischem
+fiskalischen
+fiskalischer
+fiskalisches
+fit
+fite
+fitem
+fiten
+fiter
+fitere
+fiterem
+fiteren
+fiterer
+fiteres
+fites
+fiteste
+fitestem
+fitesten
+fitester
+fitestes
+fix
+fixe
+fixem
+fixen
+fixend
+fixende
+fixendem
+fixenden
+fixender
+fixendes
+fixer
+fixes
+fixest
+fixiere
+fixieren
+fixierend
+fixierende
+fixierendem
+fixierenden
+fixierender
+fixierendes
+fixierst
+fixiert
+fixierte
+fixiertem
+fixierten
+fixierter
+fixiertes
+fixiertest
+fixiertet
+fixt
+fixte
+fixten
+fixtest
+fixtet
+flach
+flachbrüstig
+flachbrüstige
+flachbrüstigem
+flachbrüstigen
+flachbrüstiger
+flachbrüstiges
+flachdrücke
+flachdrücken
+flachdrückend
+flachdrückende
+flachdrückendem
+flachdrückenden
+flachdrückender
+flachdrückendes
+flachdrückst
+flachdrückt
+flachdrückte
+flachdrückten
+flachdrücktest
+flachdrücktet
+flache
+flachem
+flachen
+flacher
+flachere
+flacherem
+flacheren
+flacherer
+flacheres
+flaches
+flachhügelig
+flachhügelige
+flachhügeligem
+flachhügeligen
+flachhügeliger
+flachhügeliges
+flachhüglig
+flachhüglige
+flachhügligem
+flachhügligen
+flachhügliger
+flachhügliges
+flachste
+flachstem
+flachsten
+flachster
+flachstes
+flackere
+flackern
+flackernd
+flackernde
+flackerndem
+flackernden
+flackernder
+flackerndes
+flackerst
+flackert
+flackerte
+flackerten
+flackertest
+flackertet
+flackre
+flagge
+flaggen
+flaggend
+flaggende
+flaggendem
+flaggenden
+flaggender
+flaggendes
+flaggst
+flaggt
+flaggte
+flaggten
+flaggtest
+flaggtet
+flagrante
+flagrantem
+flagranten
+flagranter
+flagrantes
+flammbar
+flammbare
+flammbarem
+flammbaren
+flammbarer
+flammbares
+flamme
+flammen
+flammend
+flammende
+flammendem
+flammenden
+flammender
+flammendes
+flammst
+flammt
+flammte
+flammten
+flammtest
+flammtet
+flankiere
+flankieren
+flankierend
+flankierende
+flankierendem
+flankierenden
+flankierender
+flankierendes
+flankierst
+flankiert
+flankierte
+flankierten
+flankiertest
+flankiertet
+flankte
+flansche
+flanschen
+flanschest
+flanschst
+flanscht
+flanschte
+flanschten
+flanschtest
+flanschtet
+flattere
+flatterhaft
+flatterhafte
+flatterhaftem
+flatterhaften
+flatterhafter
+flatterhaftere
+flatterhafterem
+flatterhafteren
+flatterhafterer
+flatterhafteres
+flatterhaftes
+flatterhafteste
+flatterhaftestem
+flatterhaftesten
+flatterhaftester
+flatterhaftestes
+flattern
+flatternd
+flatternde
+flatterndem
+flatternden
+flatternder
+flatterndes
+flatterst
+flattert
+flatterte
+flatterten
+flattertest
+flattertet
+flattre
+flau
+flaue
+flauem
+flauen
+flauer
+flauere
+flauerem
+flaueren
+flauerer
+flaueres
+flaues
+flaueste
+flauestem
+flauesten
+flauester
+flauestes
+flaumig
+flaumige
+flaumigem
+flaumigen
+flaumiger
+flaumiges
+flauste
+flaustem
+flausten
+flauster
+flaustes
+flechtbar
+flechtbare
+flechtbarem
+flechtbaren
+flechtbarer
+flechtbares
+flechte
+flechten
+flechtend
+flechtende
+flechtendem
+flechtenden
+flechtender
+flechtendes
+flechtest
+flechtet
+fleckenlos
+fleckenlose
+fleckenlosem
+fleckenlosen
+fleckenloser
+fleckenloses
+fleckig
+fleckige
+fleckigem
+fleckigen
+fleckiger
+fleckiges
+flegelhaft
+flegelhafte
+flegelhaftem
+flegelhaften
+flegelhafter
+flegelhaftes
+flehe
+flehen
+flehend
+flehende
+flehendem
+flehenden
+flehender
+flehendes
+flehentlich
+flehentliche
+flehentlichem
+flehentlichen
+flehentlicher
+flehentliches
+flehst
+fleht
+flehte
+flehten
+flehtest
+flehtet
+fleischfarben
+fleischfarbene
+fleischfarbenem
+fleischfarbenen
+fleischfarbener
+fleischfarbenes
+fleischig
+fleischige
+fleischigem
+fleischigen
+fleischiger
+fleischiges
+fleischlich
+fleischliche
+fleischlichem
+fleischlichen
+fleischlicher
+fleischliches
+fleischlos
+fleischlose
+fleischlosem
+fleischlosen
+fleischloser
+fleischloses
+fleißig
+fleißige
+fleißigem
+fleißigen
+fleißiger
+fleißigere
+fleißigerem
+fleißigeren
+fleißigerer
+fleißigeres
+fleißiges
+fleißigste
+fleißigstem
+fleißigsten
+fleißigster
+fleißigstes
+flenne
+flennen
+flennend
+flennende
+flennendem
+flennenden
+flennender
+flennendes
+flennst
+flennt
+flennte
+flennten
+flenntest
+flenntet
+fletsche
+fletschen
+fletschend
+fletschende
+fletschendem
+fletschenden
+fletschender
+fletschendes
+fletschest
+fletschst
+fletscht
+fletschte
+fletschten
+fletschtest
+fletschtet
+fleucht
+flexibel
+flexibelste
+flexibelstem
+flexibelsten
+flexibelster
+flexibelstes
+flexible
+flexiblem
+flexiblen
+flexibler
+flexiblere
+flexiblerem
+flexibleren
+flexiblerer
+flexibleres
+flexibles
+flichst
+flicht
+flicke
+flicken
+flickend
+flickende
+flickendem
+flickenden
+flickender
+flickendes
+flickst
+flickt
+flickte
+flickten
+flicktest
+flicktet
+fliege
+fliegen
+fliegend
+fliegende
+fliegendem
+fliegenden
+fliegender
+fliegendes
+fliegerisch
+fliegerische
+fliegerischem
+fliegerischen
+fliegerischer
+fliegerisches
+fliegst
+fliegt
+fliehe
+fliehen
+fliehend
+fliehende
+fliehendem
+fliehenden
+fliehender
+fliehendes
+fliehst
+flieht
+fließe
+fließen
+fließend
+fließende
+fließendem
+fließenden
+fließender
+fließendes
+fließest
+fließt
+flimmere
+flimmern
+flimmernd
+flimmernde
+flimmerndem
+flimmernden
+flimmernder
+flimmerndes
+flimmerst
+flimmert
+flimmerte
+flimmerten
+flimmertest
+flimmertet
+flimmre
+flink
+flinke
+flinkem
+flinken
+flinker
+flinkes
+flirte
+flirten
+flirtend
+flirtende
+flirtendem
+flirtenden
+flirtender
+flirtendes
+flirtest
+flirtet
+flirtete
+flirteten
+flirtetest
+flirtetet
+flitze
+flitzen
+flitzend
+flitzende
+flitzendem
+flitzenden
+flitzender
+flitzendes
+flitzest
+flitzt
+flitzte
+flitzten
+flitztest
+flitztet
+flocht
+flochten
+flochtest
+flochtet
+flochtst
+flocke
+flocken
+flockend
+flockende
+flockendem
+flockenden
+flockender
+flockendes
+flockig
+flockige
+flockigem
+flockigen
+flockiger
+flockiges
+flockst
+flockt
+flockte
+flockten
+flocktest
+flocktet
+flog
+flogen
+flogst
+flogt
+floh
+flohen
+flohst
+floht
+florettartig
+florettartige
+florettartigem
+florettartigen
+florettartiger
+florettartiges
+floriere
+florieren
+florierend
+florierende
+florierendem
+florierenden
+florierender
+florierendes
+florierst
+floriert
+florierte
+florierten
+floriertest
+floriertet
+floss
+flossen
+flossest
+flosst
+flott
+flotte
+flottem
+flotten
+flotter
+flottes
+flottgehend
+flottgehende
+flottgehendem
+flottgehenden
+flottgehender
+flottgehendes
+flottgemacht
+flottgemachte
+flottgemachtem
+flottgemachten
+flottgemachter
+flottgemachtes
+flottmache
+flottmachen
+flottmachend
+flottmachende
+flottmachendem
+flottmachenden
+flottmachender
+flottmachendes
+flottmachst
+flottmacht
+flottmachte
+flottmachten
+flottmachtest
+flottmachtet
+flottzumachen
+flottzumachend
+flottzumachende
+flottzumachendem
+flottzumachenden
+flottzumachender
+flottzumachendes
+fluche
+fluchen
+fluchend
+fluchende
+fluchendem
+fluchenden
+fluchender
+fluchendes
+fluchst
+flucht
+fluchtartig
+fluchtartige
+fluchtartigem
+fluchtartigen
+fluchtartiger
+fluchtartiges
+fluchtbereit
+fluchtbereite
+fluchtbereitem
+fluchtbereiten
+fluchtbereiter
+fluchtbereites
+fluchte
+fluchten
+fluchtest
+fluchtet
+flugs
+fluktuiere
+fluktuieren
+fluktuierend
+fluktuierende
+fluktuierendem
+fluktuierenden
+fluktuierender
+fluktuierendes
+fluktuierst
+fluktuiert
+fluktuierte
+fluktuierten
+fluktuiertest
+fluktuiertet
+flunkere
+flunkern
+flunkernd
+flunkernde
+flunkerndem
+flunkernden
+flunkernder
+flunkerndes
+flunkerst
+flunkert
+flunkerte
+flunkerten
+flunkertest
+flunkertet
+flunkre
+flussabwärts
+flussaufwärts
+flutsche
+flutschen
+flutschend
+flutschende
+flutschendem
+flutschenden
+flutschender
+flutschendes
+flutschest
+flutschst
+flutscht
+flutschte
+flutschten
+flutschtest
+flutschtet
+flächendeckend
+flächendeckende
+flächendeckendem
+flächendeckenden
+flächendeckender
+flächendeckendes
+flächenmäßig
+flächenmäßige
+flächenmäßigem
+flächenmäßigen
+flächenmäßiger
+flächenmäßiges
+flämisch
+flämische
+flämischem
+flämischen
+flämischer
+flämisches
+flösse
+flössen
+flössest
+flösset
+flöte
+flöten
+flötend
+flötende
+flötendem
+flötenden
+flötender
+flötendes
+flötest
+flötet
+flötete
+flöteten
+flötetest
+flötetet
+flöße
+flößen
+flößend
+flößende
+flößendem
+flößenden
+flößender
+flößendes
+flößest
+flößt
+flößte
+flößten
+flößtest
+flößtet
+flüchte
+flüchten
+flüchtend
+flüchtende
+flüchtendem
+flüchtenden
+flüchtender
+flüchtendes
+flüchtest
+flüchtet
+flüchtete
+flüchteten
+flüchtetest
+flüchtetet
+flüchtig
+flüchtige
+flüchtigem
+flüchtigen
+flüchtiger
+flüchtigere
+flüchtigerem
+flüchtigeren
+flüchtigerer
+flüchtigeres
+flüchtiges
+flüchtigste
+flüchtigstem
+flüchtigsten
+flüchtigster
+flüchtigstes
+flügge
+flüggem
+flüggen
+flügger
+flügges
+flüssig
+flüssige
+flüssigem
+flüssigen
+flüssiger
+flüssigere
+flüssigerem
+flüssigeren
+flüssigerer
+flüssigeres
+flüssiges
+flüssigste
+flüssigstem
+flüssigsten
+flüssigster
+flüssigstes
+flüstere
+flüstern
+flüsternd
+flüsternde
+flüsterndem
+flüsternden
+flüsternder
+flüsterndes
+flüsterst
+flüstert
+flüsterte
+flüsterten
+flüstertest
+flüstertet
+flüstre
+focht
+fochten
+fochtest
+fochtet
+fochtst
+fokussiere
+fokussieren
+fokussierend
+fokussierende
+fokussierendem
+fokussierenden
+fokussierender
+fokussierendes
+fokussierst
+fokussiert
+fokussierte
+fokussiertem
+fokussierten
+fokussierter
+fokussiertes
+fokussiertest
+fokussiertet
+folge
+folgen
+folgend
+folgende
+folgendem
+folgenden
+folgender
+folgendermaßen
+folgendes
+folgenlos
+folgenlose
+folgenlosem
+folgenlosen
+folgenloser
+folgenloses
+folgenreich
+folgenreiche
+folgenreichem
+folgenreichen
+folgenreicher
+folgenreiches
+folgenschwer
+folgenschwere
+folgenschwerem
+folgenschweren
+folgenschwerer
+folgenschwerere
+folgenschwererem
+folgenschwereren
+folgenschwererer
+folgenschwereres
+folgenschweres
+folgenschwerste
+folgenschwerstem
+folgenschwersten
+folgenschwerster
+folgenschwerstes
+folgere
+folgerichtig
+folgerichtige
+folgerichtigem
+folgerichtigen
+folgerichtiger
+folgerichtiges
+folgern
+folgernd
+folgernde
+folgerndem
+folgernden
+folgernder
+folgerndes
+folgerst
+folgert
+folgerte
+folgerten
+folgertest
+folgertet
+folgewidrig
+folgewidrige
+folgewidrigem
+folgewidrigen
+folgewidriger
+folgewidriges
+folglich
+folgre
+folgsam
+folgsame
+folgsamem
+folgsamen
+folgsamer
+folgsamere
+folgsamerem
+folgsameren
+folgsamerer
+folgsameres
+folgsames
+folgsamste
+folgsamstem
+folgsamsten
+folgsamster
+folgsamstes
+folgst
+folgt
+folgte
+folgten
+folgtest
+folgtet
+foltere
+foltern
+folternd
+folternde
+folterndem
+folternden
+folternder
+folterndes
+folterst
+foltert
+folterte
+folterten
+foltertest
+foltertet
+foltre
+foppe
+foppen
+foppend
+foppende
+foppendem
+foppenden
+foppender
+foppendes
+foppst
+foppt
+foppte
+foppten
+fopptest
+fopptet
+forciere
+forcieren
+forcierend
+forcierende
+forcierendem
+forcierenden
+forcierender
+forcierendes
+forcierst
+forciert
+forcierte
+forciertem
+forcierten
+forcierter
+forciertes
+forciertest
+forciertet
+fordere
+fordern
+fordernd
+fordernde
+forderndem
+fordernden
+fordernder
+forderndes
+forderst
+fordert
+forderte
+forderten
+fordertest
+fordertet
+fordre
+forellenblau
+forellenblaue
+forellenblauem
+forellenblauen
+forellenblauer
+forellenblaues
+forlieb
+forma
+formal
+formale
+formalem
+formalen
+formaler
+formalere
+formalerem
+formaleren
+formalerer
+formaleres
+formales
+formalisierbar
+formalisierbare
+formalisierbarem
+formalisierbaren
+formalisierbarer
+formalisierbares
+formalisiere
+formalisieren
+formalisierend
+formalisierende
+formalisierendem
+formalisierenden
+formalisierender
+formalisierendes
+formalisierst
+formalisiert
+formalisierte
+formalisiertem
+formalisierten
+formalisierter
+formalisiertes
+formalisiertest
+formalisiertet
+formalistisch
+formalistische
+formalistischem
+formalistischen
+formalistischer
+formalistischere
+formalistischerem
+formalistischeren
+formalistischerer
+formalistischeres
+formalistisches
+formalistischste
+formalistischstem
+formalistischsten
+formalistischster
+formalistischstes
+formaljuristisch
+formaljuristische
+formaljuristischem
+formaljuristischen
+formaljuristischer
+formaljuristisches
+formalste
+formalstem
+formalsten
+formalster
+formalstes
+formatierbar
+formatierbare
+formatierbarem
+formatierbaren
+formatierbarer
+formatierbares
+formatiere
+formatieren
+formatierend
+formatierende
+formatierendem
+formatierenden
+formatierender
+formatierendes
+formatierst
+formatiert
+formatierte
+formatiertem
+formatierten
+formatierter
+formatiertes
+formatiertest
+formatiertet
+formbar
+formbare
+formbarem
+formbaren
+formbarer
+formbares
+forme
+formell
+formelle
+formellem
+formellen
+formeller
+formellere
+formellerem
+formelleren
+formellerer
+formelleres
+formelles
+formellste
+formellstem
+formellsten
+formellster
+formellstes
+formelmäßig
+formelmäßige
+formelmäßigem
+formelmäßigen
+formelmäßiger
+formelmäßiges
+formen
+formend
+formende
+formendem
+formenden
+formender
+formendes
+formgerecht
+formgerechte
+formgerechtem
+formgerechten
+formgerechter
+formgerechtes
+formiere
+formieren
+formierend
+formierende
+formierendem
+formierenden
+formierender
+formierendes
+formierst
+formiert
+formierte
+formiertem
+formierten
+formierter
+formiertes
+formiertest
+formiertet
+formlos
+formlose
+formlosem
+formlosen
+formloser
+formlosere
+formloserem
+formloseren
+formloserer
+formloseres
+formloses
+formloseste
+formlosestem
+formlosesten
+formlosester
+formlosestes
+formschön
+formschöne
+formschönem
+formschönen
+formschöner
+formschönere
+formschönerem
+formschöneren
+formschönerer
+formschöneres
+formschönes
+formschönste
+formschönstem
+formschönsten
+formschönster
+formschönstes
+formst
+formt
+formte
+formten
+formtest
+formtet
+formulierbar
+formulierbare
+formulierbarem
+formulierbaren
+formulierbarer
+formulierbares
+formuliere
+formulieren
+formulierend
+formulierende
+formulierendem
+formulierenden
+formulierender
+formulierendes
+formulierst
+formuliert
+formulierte
+formuliertem
+formulierten
+formulierter
+formuliertes
+formuliertest
+formuliertet
+formvollendet
+formvollendete
+formvollendetem
+formvollendeten
+formvollendeter
+formvollendetes
+forsch
+forsche
+forschem
+forschen
+forschend
+forschende
+forschendem
+forschenden
+forschender
+forschendes
+forscher
+forsches
+forschest
+forschst
+forscht
+forschte
+forschten
+forschtest
+forschtet
+forschungsorientiert
+forschungsorientierte
+forschungsorientiertem
+forschungsorientierten
+forschungsorientierter
+forschungsorientiertes
+forstlich
+forstliche
+forstlichem
+forstlichen
+forstlicher
+forstliches
+fort
+fortan
+fortbestanden
+fortbestandene
+fortbestandenem
+fortbestandenen
+fortbestandener
+fortbestandenes
+fortbestehe
+fortbestehen
+fortbestehend
+fortbestehende
+fortbestehendem
+fortbestehenden
+fortbestehender
+fortbestehendes
+fortbestehst
+fortbesteht
+fortbestünde
+fortbestünden
+fortbestündest
+fortbestündet
+fortbewege
+fortbewegen
+fortbewegend
+fortbewegende
+fortbewegendem
+fortbewegenden
+fortbewegender
+fortbewegendes
+fortbewegst
+fortbewegt
+fortbewegte
+fortbewegtem
+fortbewegten
+fortbewegter
+fortbewegtes
+fortbewegtest
+fortbewegtet
+fortbilde
+fortbilden
+fortbildend
+fortbildende
+fortbildendem
+fortbildenden
+fortbildender
+fortbildendes
+fortbildest
+fortbildet
+fortbildete
+fortbildeten
+fortbildetest
+fortbildetet
+fortbleibe
+fortbleiben
+fortbleibend
+fortbleibende
+fortbleibendem
+fortbleibenden
+fortbleibender
+fortbleibendes
+fortbleibst
+fortbleibt
+fortdauere
+fortdauern
+fortdauernd
+fortdauernde
+fortdauerndem
+fortdauernden
+fortdauernder
+fortdauerndes
+fortdauerst
+fortdauert
+fortdauerte
+fortdauerten
+fortdauertest
+fortdauertet
+fortdaure
+fortentwickele
+fortentwickeln
+fortentwickelst
+fortentwickelt
+fortentwickelte
+fortentwickelten
+fortentwickeltest
+fortentwickeltet
+fortentwickle
+fortfahre
+fortfahren
+fortfahrend
+fortfahrende
+fortfahrendem
+fortfahrenden
+fortfahrender
+fortfahrendes
+fortfahrt
+fortfalle
+fortfallen
+fortfallend
+fortfallende
+fortfallendem
+fortfallenden
+fortfallender
+fortfallendes
+fortfallt
+fortfege
+fortfegen
+fortfegend
+fortfegende
+fortfegendem
+fortfegenden
+fortfegender
+fortfegendes
+fortfegst
+fortfegt
+fortfegte
+fortfegten
+fortfegtest
+fortfegtet
+fortfiel
+fortfielen
+fortfielst
+fortfielt
+fortfährst
+fortfährt
+fortführe
+fortführen
+fortführend
+fortführende
+fortführendem
+fortführenden
+fortführender
+fortführendes
+fortführst
+fortführt
+fortführte
+fortführten
+fortführtest
+fortführtet
+fortgebildet
+fortgebildete
+fortgebildetem
+fortgebildeten
+fortgebildeter
+fortgebildetes
+fortgeblieben
+fortgebliebene
+fortgebliebenem
+fortgebliebenen
+fortgebliebener
+fortgebliebenes
+fortgebracht
+fortgebrachte
+fortgebrachtem
+fortgebrachten
+fortgebrachter
+fortgebrachtes
+fortgefahren
+fortgefahrene
+fortgefahrenem
+fortgefahrenen
+fortgefahrener
+fortgefahrenes
+fortgefallen
+fortgefallene
+fortgefallenem
+fortgefallenen
+fortgefallener
+fortgefallenes
+fortgeführt
+fortgeführte
+fortgeführtem
+fortgeführten
+fortgeführter
+fortgeführtes
+fortgegangen
+fortgegangene
+fortgegangenem
+fortgegangenen
+fortgegangener
+fortgegangenes
+fortgehe
+fortgehen
+fortgehend
+fortgehende
+fortgehendem
+fortgehenden
+fortgehender
+fortgehendes
+fortgehst
+fortgeht
+fortgekommen
+fortgekommene
+fortgekommenem
+fortgekommenen
+fortgekommener
+fortgekommenes
+fortgelassen
+fortgelassene
+fortgelassenem
+fortgelassenen
+fortgelassener
+fortgelassenes
+fortgelaufen
+fortgelaufene
+fortgelaufenem
+fortgelaufenen
+fortgelaufener
+fortgelaufenes
+fortgelebt
+fortgepflanzt
+fortgepflanzte
+fortgepflanztem
+fortgepflanzten
+fortgepflanzter
+fortgepflanztes
+fortgerissen
+fortgerissene
+fortgerissenem
+fortgerissenen
+fortgerissener
+fortgerissenes
+fortgeräumt
+fortgeräumte
+fortgeräumtem
+fortgeräumten
+fortgeräumter
+fortgeräumtes
+fortgeschafft
+fortgeschaffte
+fortgeschafftem
+fortgeschafften
+fortgeschaffter
+fortgeschafftes
+fortgeschrieben
+fortgeschriebene
+fortgeschriebenem
+fortgeschriebenen
+fortgeschriebener
+fortgeschriebenes
+fortgeschritten
+fortgeschrittene
+fortgeschrittenem
+fortgeschrittenen
+fortgeschrittener
+fortgeschrittenes
+fortgesetzt
+fortgesetzte
+fortgesetztem
+fortgesetzten
+fortgesetzter
+fortgesetztes
+fortgestohlen
+fortgestohlene
+fortgestohlenem
+fortgestohlenen
+fortgestohlener
+fortgestohlenes
+fortgestoßen
+fortgestoßene
+fortgestoßenem
+fortgestoßenen
+fortgestoßener
+fortgestoßenes
+fortgeweht
+fortgezogen
+fortgezogene
+fortgezogenem
+fortgezogenen
+fortgezogener
+fortgezogenes
+fortging
+fortgingen
+fortgingst
+fortgingt
+forthole
+fortholen
+fortholend
+fortholende
+fortholendem
+fortholenden
+fortholender
+fortholendes
+fortholst
+fortholt
+fortholte
+fortholten
+fortholtest
+fortholtet
+fortjage
+fortjagen
+fortjagend
+fortjagende
+fortjagendem
+fortjagenden
+fortjagender
+fortjagendes
+fortjagst
+fortjagt
+fortjagte
+fortjagten
+fortjagtest
+fortjagtet
+fortkomme
+fortkommen
+fortkommend
+fortkommende
+fortkommendem
+fortkommenden
+fortkommender
+fortkommendes
+fortkommst
+fortkommt
+fortlasse
+fortlassen
+fortlassend
+fortlassende
+fortlassendem
+fortlassenden
+fortlassender
+fortlassendes
+fortlasst
+fortlaufe
+fortlaufen
+fortlaufend
+fortlaufende
+fortlaufendem
+fortlaufenden
+fortlaufender
+fortlaufendes
+fortlauft
+fortlebe
+fortleben
+fortlebend
+fortlebende
+fortlebendem
+fortlebenden
+fortlebender
+fortlebendes
+fortlebst
+fortlebt
+fortlebte
+fortlebten
+fortlebtest
+fortlebtet
+fortnimmst
+fortnimmt
+fortpflanze
+fortpflanzen
+fortpflanzend
+fortpflanzende
+fortpflanzendem
+fortpflanzenden
+fortpflanzender
+fortpflanzendes
+fortpflanzest
+fortpflanzt
+fortpflanzte
+fortpflanzten
+fortpflanztest
+fortpflanztet
+fortrannte
+fortrannten
+fortranntest
+fortranntet
+fortreiße
+fortreißen
+fortreißend
+fortreißende
+fortreißendem
+fortreißenden
+fortreißender
+fortreißendes
+fortreißest
+fortreißt
+forträume
+forträumen
+forträumend
+forträumende
+forträumendem
+forträumenden
+forträumender
+forträumendes
+forträumst
+forträumt
+forträumte
+forträumten
+forträumtest
+forträumtet
+fortschaffe
+fortschaffen
+fortschaffend
+fortschaffende
+fortschaffendem
+fortschaffenden
+fortschaffender
+fortschaffendes
+fortschaffst
+fortschafft
+fortschaffte
+fortschafften
+fortschafftest
+fortschafftet
+fortschreite
+fortschreiten
+fortschreitend
+fortschreitende
+fortschreitendem
+fortschreitenden
+fortschreitender
+fortschreitendes
+fortschreitest
+fortschreitet
+fortschrittlich
+fortschrittliche
+fortschrittlichem
+fortschrittlichen
+fortschrittlicher
+fortschrittlichere
+fortschrittlicherem
+fortschrittlicheren
+fortschrittlicherer
+fortschrittlicheres
+fortschrittliches
+fortschrittlichste
+fortschrittlichstem
+fortschrittlichsten
+fortschrittlichster
+fortschrittlichstes
+fortsetzbar
+fortsetzbare
+fortsetzbarem
+fortsetzbaren
+fortsetzbarer
+fortsetzbares
+fortsetze
+fortsetzen
+fortsetzend
+fortsetzende
+fortsetzendem
+fortsetzenden
+fortsetzender
+fortsetzendes
+fortsetzest
+fortsetzt
+fortsetzte
+fortsetzten
+fortsetztest
+fortsetztet
+fortspinne
+fortspinnen
+fortspinnend
+fortspinnende
+fortspinnendem
+fortspinnenden
+fortspinnender
+fortspinnendes
+fortspinnst
+fortspinnt
+fortspüle
+fortspülen
+fortspülend
+fortspülende
+fortspülendem
+fortspülenden
+fortspülender
+fortspülendes
+fortspülst
+fortspült
+fortspülte
+fortspülten
+fortspültest
+fortspültet
+fortstehle
+fortstehlen
+fortstehlend
+fortstehlende
+fortstehlendem
+fortstehlenden
+fortstehlender
+fortstehlendes
+fortstehlt
+fortstoße
+fortstoßen
+fortstoßend
+fortstoßende
+fortstoßendem
+fortstoßenden
+fortstoßender
+fortstoßendes
+fortstoßt
+fortwähre
+fortwähren
+fortwährend
+fortwährende
+fortwährendem
+fortwährenden
+fortwährender
+fortwährendes
+fortwährst
+fortwährt
+fortwährte
+fortwährten
+fortwährtest
+fortwährtet
+fortziehe
+fortziehen
+fortziehend
+fortziehende
+fortziehendem
+fortziehenden
+fortziehender
+fortziehendes
+fortziehst
+fortzieht
+fortzubilden
+fortzubildend
+fortzubildende
+fortzubildendem
+fortzubildenden
+fortzubildender
+fortzubildendes
+fortzudenken
+fortzudenkend
+fortzudenkende
+fortzudenkendem
+fortzudenkenden
+fortzudenkender
+fortzudenkendes
+fortzufahren
+fortzuführen
+fortzuführend
+fortzuführende
+fortzuführendem
+fortzuführenden
+fortzuführender
+fortzuführendes
+fortzugehen
+fortzulaufen
+fortzunehmen
+fortzunehmend
+fortzunehmende
+fortzunehmendem
+fortzunehmenden
+fortzunehmender
+fortzunehmendes
+fortzuschaffen
+fortzuschaffend
+fortzuschaffende
+fortzuschaffendem
+fortzuschaffenden
+fortzuschaffender
+fortzuschaffendes
+fortzusetzen
+fortzusetzend
+fortzusetzende
+fortzusetzendem
+fortzusetzenden
+fortzusetzender
+fortzusetzendes
+fossil
+fossile
+fossilem
+fossilen
+fossiler
+fossiles
+fotogen
+fotogene
+fotogenem
+fotogenen
+fotogener
+fotogenes
+fotografiere
+fotografieren
+fotografierend
+fotografierende
+fotografierendem
+fotografierenden
+fotografierender
+fotografierendes
+fotografierst
+fotografiert
+fotografierte
+fotografiertem
+fotografierten
+fotografierter
+fotografiertes
+fotografiertest
+fotografiertet
+fotografisch
+fotografische
+fotografischem
+fotografischen
+fotografischer
+fotografisches
+fotokopierfähig
+fotokopierfähige
+fotokopierfähigem
+fotokopierfähigen
+fotokopierfähiger
+fotokopierfähiges
+fototechnisch
+fototechnische
+fototechnischem
+fototechnischen
+fototechnischer
+fototechnisches
+frachtfrei
+frachtfreie
+frachtfreiem
+frachtfreien
+frachtfreier
+frachtfreies
+fragbar
+fragbare
+fragbarem
+fragbaren
+fragbarer
+fragbares
+frage
+fragen
+fragend
+fragende
+fragendem
+fragenden
+fragender
+fragendes
+fraglich
+fragliche
+fraglichem
+fraglichen
+fraglicher
+fraglichere
+fraglicherem
+fraglicheren
+fraglicherer
+fraglicheres
+fragliches
+fraglichste
+fraglichstem
+fraglichsten
+fraglichster
+fraglichstes
+fraglos
+fraglose
+fraglosem
+fraglosen
+fragloser
+fragloses
+fragst
+fragt
+fragte
+fragten
+fragtest
+fragtet
+fragwürdig
+fragwürdige
+fragwürdigem
+fragwürdigen
+fragwürdiger
+fragwürdigere
+fragwürdigerem
+fragwürdigeren
+fragwürdigerer
+fragwürdigeres
+fragwürdiges
+fragwürdigste
+fragwürdigstem
+fragwürdigsten
+fragwürdigster
+fragwürdigstes
+fraktionslos
+fraktionslose
+fraktionslosem
+fraktionslosen
+fraktionsloser
+fraktionsloses
+frankiere
+frankieren
+frankierend
+frankierende
+frankierendem
+frankierenden
+frankierender
+frankierendes
+frankierst
+frankiert
+frankierte
+frankiertem
+frankierten
+frankierter
+frankiertes
+frankiertest
+frankiertet
+franko
+frankophon
+frankophone
+frankophonem
+frankophonen
+frankophoner
+frankophones
+französisch
+französische
+französischem
+französischen
+französischer
+französisches
+frappant
+frappante
+frappantem
+frappanten
+frappanter
+frappantes
+frappiere
+frappieren
+frappierend
+frappierende
+frappierendem
+frappierenden
+frappierender
+frappierendes
+frappierst
+frappiert
+frappierte
+frappierten
+frappiertest
+frappiertet
+fratzenhaft
+fratzenhafte
+fratzenhaftem
+fratzenhaften
+fratzenhafter
+fratzenhaftes
+frauenhaft
+frauenhafte
+frauenhaftem
+frauenhaften
+frauenhafter
+frauenhaftes
+frauenlos
+frauenlose
+frauenlosem
+frauenlosen
+frauenloser
+frauenloses
+fraulich
+frauliche
+fraulichem
+fraulichen
+fraulicher
+fraulichere
+fraulicherem
+fraulicheren
+fraulicherer
+fraulicheres
+frauliches
+fraulichste
+fraulichstem
+fraulichsten
+fraulichster
+fraulichstes
+fraß
+fraßen
+fraßest
+fraßt
+frech
+freche
+frechem
+frechen
+frecher
+frechere
+frecherem
+frecheren
+frecherer
+frecheres
+freches
+frechste
+frechstem
+frechsten
+frechster
+frechstes
+frei
+freiberufqqlich
+freiberufqqliche
+freiberufqqlichem
+freiberufqqlichen
+freiberufqqlicher
+freiberufqqliches
+freidemokratisch
+freidemokratische
+freidemokratischem
+freidemokratischen
+freidemokratischer
+freidemokratisches
+freidenkerisch
+freidenkerische
+freidenkerischem
+freidenkerischen
+freidenkerischer
+freidenkerisches
+freie
+freiem
+freien
+freiend
+freiende
+freiendem
+freienden
+freiender
+freiendes
+freier
+freiere
+freierem
+freieren
+freierer
+freieres
+freies
+freifinanziert
+freifinanzierte
+freifinanziertem
+freifinanzierten
+freifinanzierter
+freifinanziertes
+freigab
+freigaben
+freigabst
+freigabt
+freigearbeitet
+freigebe
+freigeben
+freigebend
+freigebende
+freigebendem
+freigebenden
+freigebender
+freigebendes
+freigebig
+freigebige
+freigebigem
+freigebigen
+freigebiger
+freigebigere
+freigebigerem
+freigebigeren
+freigebigerer
+freigebigeres
+freigebiges
+freigebigste
+freigebigstem
+freigebigsten
+freigebigster
+freigebigstes
+freigebt
+freigegeben
+freigegebene
+freigegebenem
+freigegebenen
+freigegebener
+freigegebenes
+freigehabt
+freigehalten
+freigehaltene
+freigehaltenem
+freigehaltenen
+freigehaltener
+freigehaltenes
+freigekämpft
+freigekämpfte
+freigekämpftem
+freigekämpften
+freigekämpfter
+freigekämpftes
+freigelassen
+freigelassene
+freigelassenem
+freigelassenen
+freigelassener
+freigelassenes
+freigelegt
+freigelegte
+freigelegtem
+freigelegten
+freigelegter
+freigelegtes
+freigemacht
+freigemachte
+freigemachtem
+freigemachten
+freigemachter
+freigemachtes
+freigeräumt
+freigeräumte
+freigeräumtem
+freigeräumten
+freigeräumter
+freigeräumtes
+freigeschwommen
+freigesetzt
+freigesetzte
+freigesetztem
+freigesetzten
+freigesetzter
+freigesetztes
+freigesprochen
+freigesprochene
+freigesprochenem
+freigesprochenen
+freigesprochener
+freigesprochenes
+freigestanden
+freigestellt
+freigestellte
+freigestelltem
+freigestellten
+freigestellter
+freigestelltes
+freigeworden
+freigewordene
+freigewordenem
+freigewordenen
+freigewordener
+freigewordenes
+freigewählt
+freigewählte
+freigewähltem
+freigewählten
+freigewählter
+freigewähltes
+freigibst
+freigibt
+freigiebig
+freigiebige
+freigiebigem
+freigiebigen
+freigiebiger
+freigiebiges
+freihabe
+freihaben
+freihabend
+freihabende
+freihabendem
+freihabenden
+freihabender
+freihabendes
+freihabt
+freihalte
+freihalten
+freihaltend
+freihaltende
+freihaltendem
+freihaltenden
+freihaltender
+freihaltendes
+freihaltet
+freiheitlich
+freiheitliche
+freiheitlichem
+freiheitlichen
+freiheitlicher
+freiheitlichere
+freiheitlicherem
+freiheitlicheren
+freiheitlicherer
+freiheitlicheres
+freiheitliches
+freiheitlichste
+freiheitlichstem
+freiheitlichsten
+freiheitlichster
+freiheitlichstes
+freiheraus
+freihielt
+freihielten
+freihieltest
+freihieltet
+freihieltst
+freihändig
+freihändige
+freihändigem
+freihändigen
+freihändiger
+freihändiges
+freilasse
+freilassen
+freilassend
+freilassende
+freilassendem
+freilassenden
+freilassender
+freilassendes
+freilasst
+freilege
+freilegen
+freilegend
+freilegende
+freilegendem
+freilegenden
+freilegender
+freilegendes
+freilegst
+freilegt
+freilegte
+freilegten
+freilegtest
+freilegtet
+freilich
+freimache
+freimachen
+freimachend
+freimachende
+freimachendem
+freimachenden
+freimachender
+freimachendes
+freimachst
+freimacht
+freimachte
+freimachten
+freimachtest
+freimachtet
+freimütig
+freimütige
+freimütigem
+freimütigen
+freimütiger
+freimütigere
+freimütigerem
+freimütigeren
+freimütigerer
+freimütigeres
+freimütiges
+freimütigste
+freimütigstem
+freimütigsten
+freimütigster
+freimütigstes
+freiprogrammierbar
+freiprogrammierbare
+freiprogrammierbarem
+freiprogrammierbaren
+freiprogrammierbarer
+freiprogrammierbares
+freischaffe
+freischaffen
+freischaffend
+freischaffende
+freischaffendem
+freischaffenden
+freischaffender
+freischaffendes
+freischaffst
+freischafft
+freischaffte
+freischafften
+freischafftest
+freischafftet
+freischneide
+freischneiden
+freischneidend
+freischneidende
+freischneidendem
+freischneidenden
+freischneidender
+freischneidendes
+freischneidest
+freischneidet
+freischwebe
+freischweben
+freischwebend
+freischwebende
+freischwebendem
+freischwebenden
+freischwebender
+freischwebendes
+freischwebst
+freischwebt
+freischwebte
+freischwebten
+freischwebtest
+freischwebtet
+freischwimme
+freischwimmen
+freischwimmend
+freischwimmende
+freischwimmendem
+freischwimmenden
+freischwimmender
+freischwimmendes
+freischwimmst
+freischwimmt
+freisetze
+freisetzen
+freisetzend
+freisetzende
+freisetzendem
+freisetzenden
+freisetzender
+freisetzendes
+freisetzest
+freisetzt
+freisetzte
+freisetzten
+freisetztest
+freisetztet
+freisinnig
+freisinnige
+freisinnigem
+freisinnigen
+freisinniger
+freisinniges
+freispreche
+freisprechen
+freisprechend
+freisprechende
+freisprechendem
+freisprechenden
+freisprechender
+freisprechendes
+freisprecht
+freist
+freiste
+freistehend
+freistehende
+freistehendem
+freistehenden
+freistehender
+freistehendes
+freistelle
+freistellen
+freistellend
+freistellende
+freistellendem
+freistellenden
+freistellender
+freistellendes
+freistellst
+freistellt
+freistellte
+freistellten
+freistelltest
+freistelltet
+freistem
+freisten
+freister
+freistes
+freit
+freitags
+freite
+freiten
+freitest
+freitet
+freitragend
+freitragende
+freitragendem
+freitragenden
+freitragender
+freitragendes
+freiwerde
+freiwerden
+freiwerdend
+freiwerdende
+freiwerdendem
+freiwerdenden
+freiwerdender
+freiwerdendes
+freiwerdet
+freiwillig
+freiwillige
+freiwilligem
+freiwilligen
+freiwilliger
+freiwilliges
+freizugeben
+freizugebend
+freizugebende
+freizugebendem
+freizugebenden
+freizugebender
+freizugebendes
+freizuhalten
+freizuhaltend
+freizuhaltende
+freizuhaltendem
+freizuhaltenden
+freizuhaltender
+freizuhaltendes
+freizukämpfen
+freizukämpfend
+freizukämpfende
+freizukämpfendem
+freizukämpfenden
+freizukämpfender
+freizukämpfendes
+freizulegen
+freizulegend
+freizulegende
+freizulegendem
+freizulegenden
+freizulegender
+freizulegendes
+freizumachen
+freizumachend
+freizumachende
+freizumachendem
+freizumachenden
+freizumachender
+freizumachendes
+freizusprechen
+freizusprechend
+freizusprechende
+freizusprechendem
+freizusprechenden
+freizusprechender
+freizusprechendes
+freizügig
+freizügige
+freizügigem
+freizügigen
+freizügiger
+freizügigere
+freizügigerem
+freizügigeren
+freizügigerer
+freizügigeres
+freizügiges
+freizügigste
+freizügigstem
+freizügigsten
+freizügigster
+freizügigstes
+fremd
+fremdartig
+fremdartige
+fremdartigem
+fremdartigen
+fremdartiger
+fremdartiges
+fremdbezogen
+fremdbezogene
+fremdbezogenem
+fremdbezogenen
+fremdbezogener
+fremdbezogenes
+fremde
+fremdem
+fremden
+fremder
+fremdes
+fremdgesteuert
+fremdgesteuerte
+fremdgesteuertem
+fremdgesteuerten
+fremdgesteuerter
+fremdgesteuertes
+fremdländisch
+fremdländische
+fremdländischem
+fremdländischen
+fremdländischer
+fremdländisches
+fremdsprachig
+fremdsprachige
+fremdsprachigem
+fremdsprachigen
+fremdsprachiger
+fremdsprachiges
+fremdsprachlich
+fremdsprachliche
+fremdsprachlichem
+fremdsprachlichen
+fremdsprachlicher
+fremdsprachliches
+frequentiere
+frequentieren
+frequentierst
+frequentiert
+frequentierte
+frequentiertem
+frequentierten
+frequentierter
+frequentiertes
+frequentiertest
+frequentiertet
+frequenzabhängig
+frequenzabhängige
+frequenzabhängigem
+frequenzabhängigen
+frequenzabhängiger
+frequenzabhängiges
+frequenzmoduliert
+frequenzmodulierte
+frequenzmoduliertem
+frequenzmodulierten
+frequenzmodulierter
+frequenzmoduliertes
+fresse
+fressen
+fressend
+fressende
+fressendem
+fressenden
+fressender
+fressendes
+fresst
+freudestrahlend
+freudestrahlende
+freudestrahlendem
+freudestrahlenden
+freudestrahlender
+freudestrahlendes
+freudevoll
+freudevolle
+freudevollem
+freudevollen
+freudevoller
+freudevolles
+freudig
+freudige
+freudigem
+freudigen
+freudiger
+freudigere
+freudigerem
+freudigeren
+freudigerer
+freudigeres
+freudiges
+freudigste
+freudigstem
+freudigsten
+freudigster
+freudigstes
+freudlos
+freudlose
+freudlosem
+freudlosen
+freudloser
+freudlosere
+freudloserem
+freudloseren
+freudloserer
+freudloseres
+freudloses
+freudloseste
+freudlosestem
+freudlosesten
+freudlosester
+freudlosestes
+freudvoll
+freudvolle
+freudvollem
+freudvollen
+freudvoller
+freudvolles
+freue
+freuen
+freuend
+freuende
+freuendem
+freuenden
+freuender
+freuendes
+freundlich
+freundliche
+freundlichem
+freundlichen
+freundlicher
+freundlichere
+freundlicherem
+freundlicheren
+freundlicherer
+freundlicheres
+freundlicherweise
+freundliches
+freundlichst
+freundlichste
+freundlichstem
+freundlichsten
+freundlichster
+freundlichstes
+freundlos
+freundlose
+freundlosem
+freundlosen
+freundloser
+freundloses
+freundschaftlich
+freundschaftliche
+freundschaftlichem
+freundschaftlichen
+freundschaftlicher
+freundschaftliches
+freust
+freut
+freute
+freuten
+freutest
+freutet
+frevele
+frevelhaft
+frevelhafte
+frevelhaftem
+frevelhaften
+frevelhafter
+frevelhaftes
+freveln
+frevelnd
+frevelnde
+frevelndem
+frevelnden
+frevelnder
+frevelndes
+frevelst
+frevelt
+frevelte
+frevelten
+freveltest
+freveltet
+frevle
+friedenserhaltend
+friedenserhaltende
+friedenserhaltendem
+friedenserhaltenden
+friedenserhaltender
+friedenserhaltendes
+friedensliebend
+friedensliebende
+friedensliebendem
+friedensliebenden
+friedensliebender
+friedensliebendere
+friedensliebenderem
+friedensliebenderen
+friedensliebenderer
+friedensliebenderes
+friedensliebendes
+friedensliebendste
+friedensliebendstem
+friedensliebendsten
+friedensliebendster
+friedensliebendstes
+friedenstörend
+friedenstörende
+friedenstörendem
+friedenstörenden
+friedenstörender
+friedenstörendes
+friedfertig
+friedfertige
+friedfertigem
+friedfertigen
+friedfertiger
+friedfertigere
+friedfertigerem
+friedfertigeren
+friedfertigerer
+friedfertigeres
+friedfertiges
+friedfertigste
+friedfertigstem
+friedfertigsten
+friedfertigster
+friedfertigstes
+friedlich
+friedliche
+friedlichem
+friedlichen
+friedlicher
+friedlichere
+friedlicherem
+friedlicheren
+friedlicherer
+friedlicheres
+friedliches
+friedlichste
+friedlichstem
+friedlichsten
+friedlichster
+friedlichstes
+friedliebend
+friedliebende
+friedliebendem
+friedliebenden
+friedliebender
+friedliebendes
+friedlos
+friedlose
+friedlosem
+friedlosen
+friedloser
+friedlosere
+friedloserem
+friedloseren
+friedloserer
+friedloseres
+friedloses
+friedloseste
+friedlosestem
+friedlosesten
+friedlosester
+friedlosestes
+friere
+frieren
+frierend
+frierende
+frierendem
+frierenden
+frierender
+frierendes
+frierst
+friert
+friesisch
+friesische
+friesischem
+friesischen
+friesischer
+friesisches
+frisch
+frische
+frischem
+frischen
+frischer
+frischere
+frischerem
+frischeren
+frischerer
+frischeres
+frisches
+frischste
+frischstem
+frischsten
+frischster
+frischstes
+frisiere
+frisieren
+frisierend
+frisierende
+frisierendem
+frisierenden
+frisierender
+frisierendes
+frisierst
+frisiert
+frisierte
+frisiertem
+frisierten
+frisierter
+frisiertes
+frisiertest
+frisiertet
+friss
+frisst
+friste
+fristen
+fristend
+fristende
+fristendem
+fristenden
+fristender
+fristendes
+fristenlos
+fristenlose
+fristenlosem
+fristenlosen
+fristenloser
+fristenloses
+fristest
+fristet
+fristete
+fristeten
+fristetest
+fristetet
+fristgerecht
+fristgerechte
+fristgerechtem
+fristgerechten
+fristgerechter
+fristgerechtes
+fristlos
+fristlose
+fristlosem
+fristlosen
+fristloser
+fristloses
+frittiere
+frittieren
+frittierend
+frittierende
+frittierendem
+frittierenden
+frittierender
+frittierendes
+frittierst
+frittiert
+frittierte
+frittierten
+frittiertest
+frittiertet
+frivol
+frivole
+frivolem
+frivolen
+frivoler
+frivoles
+froh
+frohe
+frohem
+frohen
+froher
+frohere
+froherem
+froheren
+froherer
+froheres
+frohes
+froheste
+frohestem
+frohesten
+frohester
+frohestes
+frohlocke
+frohlocken
+frohlockend
+frohlockende
+frohlockendem
+frohlockenden
+frohlockender
+frohlockendes
+frohlockst
+frohlockt
+frohlockte
+frohlockten
+frohlocktest
+frohlocktet
+frohsinnig
+frohsinnige
+frohsinnigem
+frohsinnigen
+frohsinniger
+frohsinniges
+frohste
+frohstem
+frohsten
+frohster
+frohstes
+fromm
+fromme
+frommem
+frommen
+frommer
+frommes
+frontal
+frontale
+frontalem
+frontalen
+frontaler
+frontales
+fror
+froren
+frorst
+frort
+frostig
+frostige
+frostigem
+frostigen
+frostiger
+frostigere
+frostigerem
+frostigeren
+frostigerer
+frostigeres
+frostiges
+frostigste
+frostigstem
+frostigsten
+frostigster
+frostigstes
+frottiere
+frottieren
+frottierst
+frottiert
+frottierte
+frottiertem
+frottierten
+frottierter
+frottiertes
+frottiertest
+frottiertet
+frotzelte
+fruchtbar
+fruchtbare
+fruchtbarem
+fruchtbaren
+fruchtbarer
+fruchtbarere
+fruchtbarerem
+fruchtbareren
+fruchtbarerer
+fruchtbareres
+fruchtbares
+fruchtbarste
+fruchtbarstem
+fruchtbarsten
+fruchtbarster
+fruchtbarstes
+fruchte
+fruchten
+fruchtend
+fruchtende
+fruchtendem
+fruchtenden
+fruchtender
+fruchtendes
+fruchtest
+fruchtet
+fruchtete
+fruchteten
+fruchtetest
+fruchtetet
+fruchtlos
+fruchtlose
+fruchtlosem
+fruchtlosen
+fruchtloser
+fruchtloses
+frustriere
+frustrieren
+frustrierend
+frustrierende
+frustrierendem
+frustrierenden
+frustrierender
+frustrierendes
+frustrierst
+frustriert
+frustrierte
+frustriertem
+frustrierten
+frustrierter
+frustriertes
+frustriertest
+frustriertet
+frägst
+frägt
+fräse
+fräsen
+fräsend
+fräsende
+fräsendem
+fräsenden
+fräsender
+fräsendes
+fräsest
+fräst
+fräste
+frästen
+frästest
+frästet
+fröhlich
+fröhliche
+fröhlichem
+fröhlichen
+fröhlicher
+fröhlichere
+fröhlicherem
+fröhlicheren
+fröhlicherer
+fröhlicheres
+fröhliches
+fröhlichste
+fröhlichstem
+fröhlichsten
+fröhlichster
+fröhlichstes
+fröne
+frönen
+frönend
+frönende
+frönendem
+frönenden
+frönender
+frönendes
+frönst
+frönt
+frönte
+frönten
+fröntest
+fröntet
+fröstele
+frösteln
+fröstelnd
+fröstelnde
+fröstelndem
+fröstelnden
+fröstelnder
+fröstelndes
+fröstelst
+fröstelt
+fröstelte
+fröstelten
+frösteltest
+frösteltet
+fröstle
+früh
+frühe
+frühem
+frühen
+früher
+frühere
+früherem
+früheren
+früherer
+früheres
+frühes
+frühminoisch
+frühminoische
+frühminoischem
+frühminoischen
+frühminoischer
+frühminoisches
+frühmorgens
+frühreif
+frühreife
+frühreifem
+frühreifen
+frühreifer
+frühreifere
+frühreiferem
+frühreiferen
+frühreiferer
+frühreiferes
+frühreifes
+frühreifste
+frühreifstem
+frühreifsten
+frühreifster
+frühreifstes
+frühste
+frühstem
+frühsten
+frühster
+frühstes
+frühstücke
+frühstücken
+frühstückend
+frühstückende
+frühstückendem
+frühstückenden
+frühstückender
+frühstückendes
+frühstückst
+frühstückt
+frühstückte
+frühstückten
+frühstücktest
+frühstücktet
+frühzeitig
+frühzeitige
+frühzeitigem
+frühzeitigen
+frühzeitiger
+frühzeitigere
+frühzeitigerem
+frühzeitigeren
+frühzeitigerer
+frühzeitigeres
+frühzeitiges
+frühzeitigste
+frühzeitigstem
+frühzeitigsten
+frühzeitigster
+frühzeitigstes
+ftp
+fuchse
+fuchsen
+fuchsend
+fuchsende
+fuchsendem
+fuchsenden
+fuchsender
+fuchsendes
+fuchsest
+fuchsrot
+fuchsrote
+fuchsrotem
+fuchsroten
+fuchsroter
+fuchsrotes
+fuchst
+fuchste
+fuchsten
+fuchstest
+fuchstet
+fuchsteufelswild
+fuchsteufelswilde
+fuchsteufelswildem
+fuchsteufelswilden
+fuchsteufelswilder
+fuchsteufelswildes
+fuchtele
+fuchteln
+fuchtelnd
+fuchtelnde
+fuchtelndem
+fuchtelnden
+fuchtelnder
+fuchtelndes
+fuchtelst
+fuchtelt
+fuchtelte
+fuchtelten
+fuchteltest
+fuchteltet
+fuchtle
+fuhr
+fuhren
+fuhrst
+fuhrt
+fulminant
+fulminante
+fulminantem
+fulminanten
+fulminanter
+fulminantes
+fummele
+fummeln
+fummelnd
+fummelnde
+fummelndem
+fummelnden
+fummelnder
+fummelndes
+fummelst
+fummelt
+fummelte
+fummelten
+fummeltest
+fummeltet
+fummle
+fundamental
+fundamentale
+fundamentalem
+fundamentalen
+fundamentaler
+fundamentales
+fundiere
+fundieren
+fundierend
+fundierende
+fundierendem
+fundierenden
+fundierender
+fundierendes
+fundierst
+fundiert
+fundierte
+fundiertem
+fundierten
+fundierter
+fundiertes
+fundiertest
+fundiertet
+fungiere
+fungieren
+fungierend
+fungierende
+fungierendem
+fungierenden
+fungierender
+fungierendes
+fungierst
+fungiert
+fungierte
+fungierten
+fungiertest
+fungiertet
+funke
+funkele
+funkeln
+funkelnagelneu
+funkelnagelneue
+funkelnagelneuem
+funkelnagelneuen
+funkelnagelneuer
+funkelnagelneues
+funkelnd
+funkelnde
+funkelndem
+funkelnden
+funkelnder
+funkelndes
+funkelst
+funkelt
+funkelte
+funkelten
+funkeltest
+funkeltet
+funken
+funkend
+funkende
+funkendem
+funkenden
+funkender
+funkendes
+funkferngesteuert
+funkferngesteuerte
+funkferngesteuertem
+funkferngesteuerten
+funkferngesteuerter
+funkferngesteuertes
+funkle
+funkst
+funkt
+funkte
+funkten
+funktest
+funktet
+funktional
+funktionale
+funktionalem
+funktionalen
+funktionaler
+funktionales
+funktionalistisch
+funktionalistische
+funktionalistischem
+funktionalistischen
+funktionalistischer
+funktionalistisches
+funktionell
+funktionelle
+funktionellem
+funktionellen
+funktioneller
+funktionelles
+funktioniere
+funktionieren
+funktionierend
+funktionierende
+funktionierendem
+funktionierenden
+funktionierender
+funktionierendes
+funktionierst
+funktioniert
+funktionierte
+funktionierten
+funktioniertest
+funktioniertet
+funktionsfähig
+funktionsfähige
+funktionsfähigem
+funktionsfähigen
+funktionsfähiger
+funktionsfähiges
+funktionsidentisch
+funktionsidentische
+funktionsidentischem
+funktionsidentischen
+funktionsidentischer
+funktionsidentisches
+funktionsmäßig
+funktionsmäßige
+funktionsmäßigem
+funktionsmäßigen
+funktionsmäßiger
+funktionsmäßiges
+funktionstüchtig
+funktionstüchtige
+funktionstüchtigem
+funktionstüchtigen
+funktionstüchtiger
+funktionstüchtiges
+funktionsunfähig
+funktionsunfähige
+funktionsunfähigem
+funktionsunfähigen
+funktionsunfähiger
+funktionsunfähiges
+furchtbar
+furchtbare
+furchtbarem
+furchtbaren
+furchtbarer
+furchtbarere
+furchtbarerem
+furchtbareren
+furchtbarerer
+furchtbareres
+furchtbares
+furchtbarste
+furchtbarstem
+furchtbarsten
+furchtbarster
+furchtbarstes
+furchtlos
+furchtlose
+furchtlosem
+furchtlosen
+furchtloser
+furchtlosere
+furchtloserem
+furchtloseren
+furchtloserer
+furchtloseres
+furchtloses
+furchtloseste
+furchtlosestem
+furchtlosesten
+furchtlosester
+furchtlosestes
+furchtsam
+furchtsame
+furchtsamem
+furchtsamen
+furchtsamer
+furchtsamere
+furchtsamerem
+furchtsameren
+furchtsamerer
+furchtsameres
+furchtsames
+furchtsamste
+furchtsamstem
+furchtsamsten
+furchtsamster
+furchtsamstes
+furios
+furiose
+furiosem
+furiosen
+furioser
+furioses
+fusioniere
+fusionieren
+fusionierend
+fusionierende
+fusionierendem
+fusionierenden
+fusionierender
+fusionierendes
+fusionierst
+fusioniert
+fusionierte
+fusioniertem
+fusionierten
+fusionierter
+fusioniertes
+fusioniertest
+fusioniertet
+futsch
+futsche
+futschem
+futschen
+futscher
+futsches
+futtere
+futtern
+futternd
+futternde
+futterndem
+futternden
+futternder
+futterndes
+futterst
+futtert
+futterte
+futterten
+futtertest
+futtertet
+futtre
+futuristisch
+futuristische
+futuristischem
+futuristischen
+futuristischer
+futuristisches
+fußballerisch
+fußballerische
+fußballerischem
+fußballerischen
+fußballerischer
+fußballerisches
+fuße
+fußen
+fußend
+fußende
+fußendem
+fußenden
+fußender
+fußendes
+fußest
+fußt
+fußte
+fußten
+fußtest
+fußtet
+fächele
+fächeln
+fächelnd
+fächelnde
+fächelndem
+fächelnden
+fächelnder
+fächelndes
+fächelst
+fächelt
+fächelte
+fächelten
+fächeltest
+fächeltet
+fächere
+fächerförmig
+fächerförmige
+fächerförmigem
+fächerförmigen
+fächerförmiger
+fächerförmiges
+fächern
+fächernd
+fächernde
+fächerndem
+fächernden
+fächernder
+fächerndes
+fächerst
+fächert
+fächerte
+fächerten
+fächertest
+fächertet
+fächle
+fächre
+fädele
+fädeln
+fädelnd
+fädelnde
+fädelndem
+fädelnden
+fädelnder
+fädelndes
+fädelst
+fädelt
+fädelte
+fädelten
+fädeltest
+fädeltet
+fädle
+fähig
+fähige
+fähigem
+fähigen
+fähiger
+fähigere
+fähigerem
+fähigeren
+fähigerer
+fähigeres
+fähiges
+fähigste
+fähigstem
+fähigsten
+fähigster
+fähigstes
+fährst
+fährt
+fälle
+fällen
+fällend
+fällende
+fällendem
+fällenden
+fällender
+fällendes
+fällig
+fällige
+fälligem
+fälligen
+fälliger
+fälliges
+fällst
+fällt
+fällte
+fällten
+fälltest
+fälltet
+fälschbar
+fälschbare
+fälschbarem
+fälschbaren
+fälschbarer
+fälschbares
+fälsche
+fälschen
+fälschend
+fälschende
+fälschendem
+fälschenden
+fälschender
+fälschendes
+fälschest
+fälschlich
+fälschliche
+fälschlichem
+fälschlichen
+fälschlicher
+fälschlicherweise
+fälschliches
+fälschst
+fälscht
+fälschte
+fälschten
+fälschtest
+fälschtet
+fände
+fänden
+fändest
+fändet
+fängst
+fängt
+färbbar
+färbbare
+färbbarem
+färbbaren
+färbbarer
+färbbares
+färbe
+färben
+färbend
+färbende
+färbendem
+färbenden
+färbender
+färbendes
+färbst
+färbt
+färbte
+färbten
+färbtest
+färbtet
+föderal
+föderale
+föderalem
+föderalen
+föderaler
+föderales
+föderalistisch
+föderalistische
+föderalistischem
+föderalistischen
+föderalistischer
+föderalistisches
+föderativ
+föderative
+föderativem
+föderativen
+föderativer
+föderatives
+föhne
+föhnen
+föhnend
+föhnende
+föhnendem
+föhnenden
+föhnender
+föhnendes
+föhnig
+föhnst
+föhnt
+föhnte
+föhnten
+föhntest
+föhntet
+fördere
+förderlich
+förderliche
+förderlichem
+förderlichen
+förderlicher
+förderlichere
+förderlicherem
+förderlicheren
+förderlicherer
+förderlicheres
+förderliches
+förderlichste
+förderlichstem
+förderlichsten
+förderlichster
+förderlichstes
+fördern
+fördernd
+fördernde
+förderndem
+fördernden
+fördernder
+förderndes
+förderst
+fördert
+förderte
+förderten
+fördertest
+fördertet
+förderungsbedürftig
+förderungsbedürftige
+förderungsbedürftigem
+förderungsbedürftigen
+förderungsbedürftiger
+förderungsbedürftiges
+fördre
+förmig
+förmige
+förmigem
+förmigen
+förmiger
+förmiges
+förmlich
+förmliche
+förmlichem
+förmlichen
+förmlicher
+förmlichere
+förmlicherem
+förmlicheren
+förmlicherer
+förmlicheres
+förmliches
+förmlichste
+förmlichstem
+förmlichsten
+förmlichster
+förmlichstes
+füge
+fügen
+fügend
+fügende
+fügendem
+fügenden
+fügender
+fügendes
+füglich
+fügsam
+fügsame
+fügsamem
+fügsamen
+fügsamer
+fügsamere
+fügsamerem
+fügsameren
+fügsamerer
+fügsameres
+fügsames
+fügsamste
+fügsamstem
+fügsamsten
+fügsamster
+fügsamstes
+fügst
+fügt
+fügte
+fügten
+fügtest
+fügtet
+fühlbar
+fühlbare
+fühlbarem
+fühlbaren
+fühlbarer
+fühlbares
+fühle
+fühlen
+fühlend
+fühlende
+fühlendem
+fühlenden
+fühlender
+fühlendes
+fühlst
+fühlt
+fühlte
+fühlten
+fühltest
+fühltet
+führe
+führen
+führend
+führende
+führendem
+führenden
+führender
+führendes
+führerlos
+führerlose
+führerlosem
+führerlosen
+führerloser
+führerloses
+führst
+führt
+führte
+führten
+führtest
+führtet
+füllbar
+füllbare
+füllbarem
+füllbaren
+füllbarer
+füllbares
+fülle
+füllen
+füllend
+füllende
+füllendem
+füllenden
+füllender
+füllendes
+füllig
+füllige
+fülligem
+fülligen
+fülliger
+fülliges
+füllst
+füllt
+füllte
+füllten
+fülltest
+fülltet
+fündig
+fünf
+fünfeinhalb
+fünfhundert
+fünfjährig
+fünfjährige
+fünfjährigem
+fünfjährigen
+fünfjähriger
+fünfjähriges
+fünfmal
+fünfqqfach
+fünfqqfache
+fünfqqfachem
+fünfqqfachen
+fünfqqfacher
+fünfqqfaches
+fünfstellig
+fünfstellige
+fünfstelligem
+fünfstelligen
+fünfstelliger
+fünfstelliges
+fünft
+fünftausend
+fünfte
+fünfteilig
+fünfteilige
+fünfteiligem
+fünfteiligen
+fünfteiliger
+fünfteiliges
+fünftel
+fünftem
+fünften
+fünfter
+fünftes
+fünfviertel
+fünfzehn
+fünfzehnfach
+fünfzehnfache
+fünfzehnfachem
+fünfzehnfachen
+fünfzehnfacher
+fünfzehnfaches
+fünfzehnte
+fünfzehntem
+fünfzehnten
+fünfzehnter
+fünfzehntes
+fünfzig
+fünfziger
+fünfzigern
+fünfzigjährig
+fünfzigjährige
+fünfzigjährigem
+fünfzigjährigen
+fünfzigjähriger
+fünfzigjähriges
+fünfzigste
+fünfzigstem
+fünfzigsten
+fünfzigster
+fünfzigstes
+für
+fürchte
+fürchten
+fürchtend
+fürchtende
+fürchtendem
+fürchtenden
+fürchtender
+fürchtendes
+fürchterlich
+fürchterliche
+fürchterlichem
+fürchterlichen
+fürchterlicher
+fürchterlichere
+fürchterlicherem
+fürchterlicheren
+fürchterlicherer
+fürchterlicheres
+fürchterliches
+fürchterlichste
+fürchterlichstem
+fürchterlichsten
+fürchterlichster
+fürchterlichstes
+fürchtest
+fürchtet
+fürchtete
+fürchteten
+fürchtetest
+fürchtetet
+fürlieb
+fürs
+fürsorgerisch
+fürsorgerische
+fürsorgerischem
+fürsorgerischen
+fürsorgerischer
+fürsorgerisches
+fürsorglich
+fürsorgliche
+fürsorglichem
+fürsorglichen
+fürsorglicher
+fürsorglichere
+fürsorglicherem
+fürsorglicheren
+fürsorglicherer
+fürsorglicheres
+fürsorgliches
+fürsorglichste
+fürsorglichstem
+fürsorglichsten
+fürsorglichster
+fürsorglichstes
+fürstlich
+fürstliche
+fürstlichem
+fürstlichen
+fürstlicher
+fürstliches
+fürwahr
+füttere
+füttern
+fütternd
+fütternde
+fütterndem
+fütternden
+fütternder
+fütterndes
+fütterst
+füttert
+fütterte
+fütterten
+füttertest
+füttertet
+füttre
+gab
+gabele
+gabelig
+gabelige
+gabeligem
+gabeligen
+gabeliger
+gabeliges
+gabeln
+gabelnd
+gabelnde
+gabelndem
+gabelnden
+gabelnder
+gabelndes
+gabelst
+gabelt
+gabelte
+gabelten
+gabeltest
+gabeltet
+gaben
+gable
+gablig
+gablige
+gabligem
+gabligen
+gabliger
+gabliges
+gabst
+gabt
+gackere
+gackern
+gackernd
+gackernde
+gackerndem
+gackernden
+gackernder
+gackerndes
+gackerst
+gackert
+gackerte
+gackerten
+gackertest
+gackertet
+gackre
+gaffe
+gaffen
+gaffend
+gaffende
+gaffendem
+gaffenden
+gaffender
+gaffendes
+gaffst
+gafft
+gaffte
+gafften
+gafftest
+gafftet
+galant
+galante
+galantem
+galanten
+galanter
+galantere
+galanterem
+galanteren
+galanterer
+galanteres
+galantes
+galanteste
+galantestem
+galantesten
+galantester
+galantestes
+gallig
+gallige
+galligem
+galligen
+galliger
+galliges
+gallisch
+gallische
+gallischem
+gallischen
+gallischer
+gallisches
+galoppiere
+galoppieren
+galoppierend
+galoppierende
+galoppierendem
+galoppierenden
+galoppierender
+galoppierendes
+galoppierst
+galoppiert
+galoppierte
+galoppierten
+galoppiertest
+galoppiertet
+galt
+galten
+galtest
+galtet
+galtst
+galv
+galvanisch
+galvanische
+galvanischem
+galvanischen
+galvanischer
+galvanisches
+gamma
+gammelig
+gammelige
+gammeligem
+gammeligen
+gammeliger
+gammeligere
+gammeligerem
+gammeligeren
+gammeligerer
+gammeligeres
+gammeliges
+gammeligste
+gammeligstem
+gammeligsten
+gammeligster
+gammeligstes
+gammlig
+gammlige
+gammligem
+gammligen
+gammliger
+gammligere
+gammligerem
+gammligeren
+gammligerer
+gammligeres
+gammliges
+gammligste
+gammligstem
+gammligsten
+gammligster
+gammligstes
+gangbar
+gangbare
+gangbarem
+gangbaren
+gangbarer
+gangbarere
+gangbarerem
+gangbareren
+gangbarerer
+gangbareres
+gangbares
+gangbarste
+gangbarstem
+gangbarsten
+gangbarster
+gangbarstes
+gangsterhaft
+gangsterhafte
+gangsterhaftem
+gangsterhaften
+gangsterhafter
+gangsterhaftes
+ganz
+ganze
+ganzem
+ganzen
+ganzer
+ganzes
+ganzheitlich
+ganzheitliche
+ganzheitlichem
+ganzheitlichen
+ganzheitlicher
+ganzheitliches
+ganzseitig
+ganzseitige
+ganzseitigem
+ganzseitigen
+ganzseitiger
+ganzseitiges
+ganztägig
+ganztägige
+ganztägigem
+ganztägigen
+ganztägiger
+ganztägiges
+ganzzahlig
+ganzzahlige
+ganzzahligem
+ganzzahligen
+ganzzahliger
+ganzzahliges
+gar
+garantiere
+garantieren
+garantierend
+garantierende
+garantierendem
+garantierenden
+garantierender
+garantierendes
+garantierst
+garantiert
+garantierte
+garantiertem
+garantierten
+garantierter
+garantiertes
+garantiertest
+garantiertet
+gare
+garem
+garen
+garer
+gares
+garni
+garniere
+garnieren
+garnierend
+garnierende
+garnierendem
+garnierenden
+garnierender
+garnierendes
+garnierst
+garniert
+garnierte
+garniertem
+garnierten
+garnierter
+garniertes
+garniertest
+garniertet
+garstig
+garstige
+garstigem
+garstigen
+garstiger
+garstigere
+garstigerem
+garstigeren
+garstigerer
+garstigeres
+garstiges
+garstigste
+garstigstem
+garstigsten
+garstigster
+garstigstes
+gasartig
+gasartige
+gasartigem
+gasartigen
+gasartiger
+gasartiges
+gasbetrieben
+gasbetriebene
+gasbetriebenem
+gasbetriebenen
+gasbetriebener
+gasbetriebenes
+gasfrei
+gasfreie
+gasfreiem
+gasfreien
+gasfreier
+gasfreies
+gasförmig
+gasförmige
+gasförmigem
+gasförmigen
+gasförmiger
+gasförmiges
+gastfreundlich
+gastfreundliche
+gastfreundlichem
+gastfreundlichen
+gastfreundlicher
+gastfreundliches
+gastgebe
+gastgeben
+gastgebend
+gastgebende
+gastgebendem
+gastgebenden
+gastgebender
+gastgebendes
+gastgebt
+gastiere
+gastieren
+gastierend
+gastierende
+gastierendem
+gastierenden
+gastierender
+gastierendes
+gastierst
+gastiert
+gastierte
+gastierten
+gastiertest
+gastiertet
+gastlich
+gastliche
+gastlichem
+gastlichen
+gastlicher
+gastlichere
+gastlicherem
+gastlicheren
+gastlicherer
+gastlicheres
+gastliches
+gastlichste
+gastlichstem
+gastlichsten
+gastlichster
+gastlichstes
+gastronomisch
+gastronomische
+gastronomischem
+gastronomischen
+gastronomischer
+gastronomisches
+geachtet
+geachtete
+geachtetem
+geachteten
+geachteter
+geachtetere
+geachteterem
+geachteteren
+geachteterer
+geachteteres
+geachtetes
+geachtetste
+geachtetstem
+geachtetsten
+geachtetster
+geachtetstes
+geadelt
+geadelte
+geadeltem
+geadelten
+geadelter
+geadeltes
+geahndet
+geahndete
+geahndetem
+geahndeten
+geahndeter
+geahndetes
+geahnt
+geahnte
+geahntem
+geahnten
+geahnter
+geahntes
+gealtert
+gealterte
+gealtertem
+gealterten
+gealterter
+gealtertes
+geangelt
+geangelte
+geangeltem
+geangelten
+geangelter
+geangeltes
+geankert
+geankerte
+geankertem
+geankerten
+geankerter
+geankertes
+geantwortet
+gearbeitet
+gearbeitete
+gearbeitetem
+gearbeiteten
+gearbeiteter
+gearbeitetes
+geargwöhnt
+geartet
+geartete
+geartetem
+gearteten
+gearteter
+geartetes
+geatmet
+geatmete
+geatmetem
+geatmeten
+geatmeter
+geatmetes
+geb
+gebacken
+gebackene
+gebackenem
+gebackenen
+gebackener
+gebackenes
+gebadet
+gebadete
+gebadetem
+gebadeten
+gebadeter
+gebadetes
+gebaggert
+gebaggerte
+gebaggertem
+gebaggerten
+gebaggerter
+gebaggertes
+gebahnt
+geballt
+geballte
+geballtem
+geballten
+geballter
+geballtes
+gebangt
+gebannt
+gebannte
+gebanntem
+gebannten
+gebannter
+gebanntes
+gebar
+gebaren
+gebarst
+gebart
+gebastelt
+gebastelte
+gebasteltem
+gebastelten
+gebastelter
+gebasteltes
+gebauscht
+gebauschte
+gebauschtem
+gebauschten
+gebauschter
+gebauschtes
+gebaut
+gebaute
+gebautem
+gebauten
+gebauter
+gebautes
+gebbar
+gebbare
+gebbarem
+gebbaren
+gebbarer
+gebbares
+gebe
+gebebt
+gebefreudig
+gebefreudige
+gebefreudigem
+gebefreudigen
+gebefreudiger
+gebefreudigere
+gebefreudigerem
+gebefreudigeren
+gebefreudigerer
+gebefreudigeres
+gebefreudiges
+gebefreudigste
+gebefreudigstem
+gebefreudigsten
+gebefreudigster
+gebefreudigstes
+gebeichtet
+gebeichtete
+gebeichtetem
+gebeichteten
+gebeichteter
+gebeichtetes
+gebellt
+geben
+gebend
+gebende
+gebendem
+gebenden
+gebender
+gebendes
+gebessert
+gebesserte
+gebessertem
+gebesserten
+gebesserter
+gebessertes
+gebeten
+gebetene
+gebetenem
+gebetenen
+gebetener
+gebetenes
+gebettelt
+gebettet
+gebettete
+gebettetem
+gebetteten
+gebetteter
+gebettetes
+gebeugt
+gebeugte
+gebeugtem
+gebeugten
+gebeugter
+gebeugtes
+gebeutelt
+gebeutelte
+gebeuteltem
+gebeutelten
+gebeutelter
+gebeuteltes
+gebiete
+gebieten
+gebietend
+gebietende
+gebietendem
+gebietenden
+gebietender
+gebietendes
+gebieterisch
+gebieterische
+gebieterischem
+gebieterischen
+gebieterischer
+gebieterisches
+gebietest
+gebietet
+gebietsfremd
+gebietsfremde
+gebietsfremdem
+gebietsfremden
+gebietsfremder
+gebietsfremdes
+gebildet
+gebildete
+gebildetem
+gebildeten
+gebildeter
+gebildetere
+gebildeterem
+gebildeteren
+gebildeterer
+gebildeteres
+gebildetes
+gebildetste
+gebildetstem
+gebildetsten
+gebildetster
+gebildetstes
+gebilligt
+gebilligte
+gebilligtem
+gebilligten
+gebilligter
+gebilligtes
+gebirgig
+gebirgige
+gebirgigem
+gebirgigen
+gebirgiger
+gebirgiges
+gebissen
+gebissene
+gebissenem
+gebissenen
+gebissener
+gebissenes
+geblasen
+geblasene
+geblasenem
+geblasenen
+geblasener
+geblasenes
+gebleicht
+gebleichte
+gebleichtem
+gebleichten
+gebleichter
+gebleichtes
+geblendet
+geblendete
+geblendetem
+geblendeten
+geblendeter
+geblendetes
+geblickt
+geblieben
+gebliebene
+gebliebenem
+gebliebenen
+gebliebener
+gebliebenes
+geblüht
+geblümt
+geblümte
+geblümtem
+geblümten
+geblümter
+geblümtes
+gebogen
+gebogene
+gebogenem
+gebogenen
+gebogener
+gebogenes
+gebohrt
+gebohrte
+gebohrtem
+gebohrten
+gebohrter
+gebohrtes
+gebootet
+geboren
+geborene
+geborenem
+geborenen
+geborener
+geborenes
+geborgen
+geborgene
+geborgenem
+geborgenen
+geborgener
+geborgenes
+geborgt
+geborgte
+geborgtem
+geborgten
+geborgter
+geborgtes
+geborsten
+geborstene
+geborstenem
+geborstenen
+geborstener
+geborstenes
+gebot
+geboten
+gebotene
+gebotenem
+gebotenen
+gebotener
+gebotenes
+gebotest
+gebotet
+geboxt
+gebracht
+gebrachte
+gebrachtem
+gebrachten
+gebrachter
+gebrachtes
+gebrandet
+gebrandete
+gebrandetem
+gebrandeten
+gebrandeter
+gebrandetes
+gebrandmarkt
+gebrandmarkte
+gebrandmarktem
+gebrandmarkten
+gebrandmarkter
+gebrandmarktes
+gebrandschatzt
+gebrandschatzte
+gebrandschatztem
+gebrandschatzten
+gebrandschatzter
+gebrandschatztes
+gebrannt
+gebrannte
+gebranntem
+gebrannten
+gebrannter
+gebranntes
+gebraten
+gebratene
+gebratenem
+gebratenen
+gebratener
+gebratenes
+gebrauche
+gebrauchen
+gebrauchend
+gebrauchende
+gebrauchendem
+gebrauchenden
+gebrauchender
+gebrauchendes
+gebrauchsfertig
+gebrauchsfertige
+gebrauchsfertigem
+gebrauchsfertigen
+gebrauchsfertiger
+gebrauchsfertiges
+gebrauchsfähig
+gebrauchsfähige
+gebrauchsfähigem
+gebrauchsfähigen
+gebrauchsfähiger
+gebrauchsfähiges
+gebrauchst
+gebraucht
+gebrauchte
+gebrauchtem
+gebrauchten
+gebrauchter
+gebrauchtes
+gebrauchtest
+gebrauchtet
+gebraust
+gebrauste
+gebraustem
+gebrausten
+gebrauster
+gebraustes
+gebrechlich
+gebrechliche
+gebrechlichem
+gebrechlichen
+gebrechlicher
+gebrechlichere
+gebrechlicherem
+gebrechlicheren
+gebrechlicherer
+gebrechlicheres
+gebrechliches
+gebrechlichste
+gebrechlichstem
+gebrechlichsten
+gebrechlichster
+gebrechlichstes
+gebreitet
+gebremst
+gebremste
+gebremstem
+gebremsten
+gebremster
+gebremstes
+gebrochen
+gebrochene
+gebrochenem
+gebrochenen
+gebrochener
+gebrochenes
+gebrummt
+gebrummte
+gebrummtem
+gebrummten
+gebrummter
+gebrummtes
+gebräuchlich
+gebräuchliche
+gebräuchlichem
+gebräuchlichen
+gebräuchlicher
+gebräuchliches
+gebräunt
+gebräunte
+gebräuntem
+gebräunten
+gebräunter
+gebräuntes
+gebröckelt
+gebröckelte
+gebröckeltem
+gebröckelten
+gebröckelter
+gebröckeltes
+gebrüllt
+gebrüllte
+gebrülltem
+gebrüllten
+gebrüllter
+gebrülltes
+gebrütet
+gebrütete
+gebrütetem
+gebrüteten
+gebrüteter
+gebrütetes
+gebt
+gebucht
+gebuchte
+gebuchtem
+gebuchten
+gebuchter
+gebuchtes
+gebuddelt
+gebunden
+gebundene
+gebundenem
+gebundenen
+gebundener
+gebundenes
+geburtenreich
+geburtenreiche
+geburtenreichem
+geburtenreichen
+geburtenreicher
+geburtenreiches
+gebuttert
+gebutterte
+gebuttertem
+gebutterten
+gebutterter
+gebuttertes
+gebändigt
+gebändigte
+gebändigtem
+gebändigten
+gebändigter
+gebändigtes
+gebärde
+gebärden
+gebärdend
+gebärdende
+gebärdendem
+gebärdenden
+gebärdender
+gebärdendes
+gebärdest
+gebärdet
+gebärdete
+gebärdeten
+gebärdetest
+gebärdetet
+gebäre
+gebären
+gebärend
+gebärende
+gebärendem
+gebärenden
+gebärender
+gebärendes
+gebärst
+gebärt
+gebückt
+gebückte
+gebücktem
+gebückten
+gebückter
+gebücktes
+gebügelt
+gebügelte
+gebügeltem
+gebügelten
+gebügelter
+gebügeltes
+gebühre
+gebühren
+gebührenbefreit
+gebührenbefreite
+gebührenbefreitem
+gebührenbefreiten
+gebührenbefreiter
+gebührenbefreites
+gebührend
+gebührende
+gebührendem
+gebührenden
+gebührender
+gebührendes
+gebührenfrei
+gebührenfreie
+gebührenfreiem
+gebührenfreien
+gebührenfreier
+gebührenfreies
+gebührenpflichtig
+gebührenpflichtige
+gebührenpflichtigem
+gebührenpflichtigen
+gebührenpflichtiger
+gebührenpflichtiges
+gebührlich
+gebührliche
+gebührlichem
+gebührlichen
+gebührlicher
+gebührliches
+gebührst
+gebührt
+gebührte
+gebührten
+gebührtest
+gebührtet
+gebündelt
+gebündelte
+gebündeltem
+gebündelten
+gebündelter
+gebündeltes
+gebürgt
+gebürgte
+gebürgtem
+gebürgten
+gebürgter
+gebürgtes
+gebürstet
+gebürstete
+gebürstetem
+gebürsteten
+gebürsteter
+gebürstetes
+gebürtig
+gebürtige
+gebürtigem
+gebürtigen
+gebürtiger
+gebürtiges
+gebüßt
+gebüßte
+gebüßtem
+gebüßten
+gebüßter
+gebüßtes
+gechartert
+gecharterte
+gechartertem
+gecharterten
+gecharterter
+gechartertes
+geckenhaft
+geckenhafte
+geckenhaftem
+geckenhaften
+geckenhafter
+geckenhaftes
+gecoatet
+gedacht
+gedachte
+gedachtem
+gedachten
+gedachter
+gedachtes
+gedachtest
+gedachtet
+gedampft
+gedankenlos
+gedankenlose
+gedankenlosem
+gedankenlosen
+gedankenloser
+gedankenlosere
+gedankenloserem
+gedankenloseren
+gedankenloserer
+gedankenloseres
+gedankenloses
+gedankenloseste
+gedankenlosestem
+gedankenlosesten
+gedankenlosester
+gedankenlosestes
+gedankenreich
+gedankenreiche
+gedankenreichem
+gedankenreichen
+gedankenreicher
+gedankenreiches
+gedankenverloren
+gedankenverlorene
+gedankenverlorenem
+gedankenverlorenen
+gedankenverlorener
+gedankenverlorenes
+gedankenvoll
+gedankenvolle
+gedankenvollem
+gedankenvollen
+gedankenvoller
+gedankenvolles
+gedanklich
+gedankliche
+gedanklichem
+gedanklichen
+gedanklicher
+gedankliches
+gedankt
+gedankte
+gedanktem
+gedankten
+gedankter
+gedanktes
+gedauert
+gedauerte
+gedauertem
+gedauerten
+gedauerter
+gedauertes
+gedeckt
+gedeckte
+gedecktem
+gedeckten
+gedeckter
+gedecktes
+gedehnt
+gedehnte
+gedehntem
+gedehnten
+gedehnter
+gedehntes
+gedeihe
+gedeihen
+gedeihend
+gedeihende
+gedeihendem
+gedeihenden
+gedeihender
+gedeihendes
+gedeihlich
+gedeihliche
+gedeihlichem
+gedeihlichen
+gedeihlicher
+gedeihliches
+gedeihst
+gedeiht
+gedeihte
+gedeihten
+gedeihtest
+gedeihtet
+gedemütigt
+gedemütigte
+gedemütigtem
+gedemütigten
+gedemütigter
+gedemütigtes
+gedenke
+gedenken
+gedenkend
+gedenkende
+gedenkendem
+gedenkenden
+gedenkender
+gedenkendes
+gedenkst
+gedenkt
+gedeutet
+gedeutete
+gedeutetem
+gedeuteten
+gedeuteter
+gedeutetes
+gedichtet
+gedichtete
+gedichtetem
+gedichteten
+gedichteter
+gedichtetes
+gediegen
+gediegene
+gediegenem
+gediegenen
+gediegener
+gediegenere
+gediegenerem
+gediegeneren
+gediegenerer
+gediegeneres
+gediegenes
+gediegenste
+gediegenstem
+gediegensten
+gediegenster
+gediegenstes
+gedieh
+gediehen
+gediehene
+gediehenem
+gediehenen
+gediehener
+gediehenes
+gediehst
+gedieht
+gedient
+gediente
+gedientem
+gedienten
+gedienter
+gedientes
+gedoktort
+gedopt
+gedopte
+gedoptem
+gedopten
+gedopter
+gedoptes
+gedrahtet
+gedreht
+gedrehte
+gedrehtem
+gedrehten
+gedrehter
+gedrehtes
+gedrillt
+gedrillte
+gedrilltem
+gedrillten
+gedrillter
+gedrilltes
+gedrittelt
+gedrittelte
+gedritteltem
+gedrittelten
+gedrittelter
+gedritteltes
+gedroht
+gedrohte
+gedrohtem
+gedrohten
+gedrohter
+gedrohtes
+gedrosselt
+gedrosselte
+gedrosseltem
+gedrosselten
+gedrosselter
+gedrosseltes
+gedruckt
+gedruckte
+gedrucktem
+gedruckten
+gedruckter
+gedrucktes
+gedrungen
+gedrungene
+gedrungenem
+gedrungenen
+gedrungener
+gedrungenes
+gedrängt
+gedrängte
+gedrängtem
+gedrängten
+gedrängter
+gedrängtes
+gedrückt
+gedrückte
+gedrücktem
+gedrückten
+gedrückter
+gedrücktes
+geduckt
+geduckte
+geducktem
+geduckten
+geduckter
+geducktes
+geduftet
+geduftete
+geduftetem
+gedufteten
+gedufteter
+geduftetes
+gedulde
+gedulden
+geduldend
+geduldende
+geduldendem
+geduldenden
+geduldender
+geduldendes
+geduldest
+geduldet
+geduldete
+geduldetem
+geduldeten
+geduldeter
+geduldetes
+geduldetest
+geduldetet
+geduldig
+geduldige
+geduldigem
+geduldigen
+geduldiger
+geduldigere
+geduldigerem
+geduldigeren
+geduldigerer
+geduldigeres
+geduldiges
+geduldigste
+geduldigstem
+geduldigsten
+geduldigster
+geduldigstes
+gedungen
+gedungene
+gedungenem
+gedungenen
+gedungener
+gedungenes
+gedunsen
+gedunsene
+gedunsenem
+gedunsenen
+gedunsener
+gedunsenes
+geduscht
+geduschte
+geduschtem
+geduschten
+geduschter
+geduschtes
+gedämpft
+gedämpfte
+gedämpftem
+gedämpften
+gedämpfter
+gedämpftes
+gedörrt
+gedörrte
+gedörrtem
+gedörrten
+gedörrter
+gedörrtes
+gedöst
+gedüngt
+gedüngte
+gedüngtem
+gedüngten
+gedüngter
+gedüngtes
+gedünkt
+gedünstet
+gedünstete
+gedünstetem
+gedünsteten
+gedünsteter
+gedünstetes
+geehelicht
+geehelichte
+geehelichtem
+geehelichten
+geehelichter
+geehelichtes
+geehrt
+geehrte
+geehrtem
+geehrten
+geehrter
+geehrtes
+geeicht
+geeichte
+geeichtem
+geeichten
+geeichter
+geeichtes
+geeifert
+geeiferte
+geeifertem
+geeiferten
+geeiferter
+geeifertes
+geeignet
+geeignete
+geeignetem
+geeigneten
+geeigneter
+geeignetere
+geeigneterem
+geeigneteren
+geeigneterer
+geeigneteres
+geeignetes
+geeignetste
+geeignetstem
+geeignetsten
+geeignetster
+geeignetstes
+geeinigt
+geeinigte
+geeinigtem
+geeinigten
+geeinigter
+geeinigtes
+geeint
+geeinte
+geeintem
+geeinten
+geeinter
+geeintes
+geendet
+geendete
+geendetem
+geendeten
+geendeter
+geendetes
+geentert
+geenterte
+geentertem
+geenterten
+geenterter
+geentertes
+geerbt
+geerbte
+geerbtem
+geerbten
+geerbter
+geerbtes
+geerdet
+geerdete
+geerdetem
+geerdeten
+geerdeter
+geerdetes
+geerntet
+geerntete
+geerntetem
+geernteten
+geernteter
+geerntetes
+gefahndet
+gefahndete
+gefahndetem
+gefahndeten
+gefahndeter
+gefahndetes
+gefahrbringend
+gefahrbringende
+gefahrbringendem
+gefahrbringenden
+gefahrbringender
+gefahrbringendere
+gefahrbringenderem
+gefahrbringenderen
+gefahrbringenderer
+gefahrbringenderes
+gefahrbringendes
+gefahrbringendste
+gefahrbringendstem
+gefahrbringendsten
+gefahrbringendster
+gefahrbringendstes
+gefahren
+gefahrene
+gefahrenem
+gefahrenen
+gefahrener
+gefahrenes
+gefahrenträchtig
+gefahrenträchtige
+gefahrenträchtigem
+gefahrenträchtigen
+gefahrenträchtiger
+gefahrenträchtigere
+gefahrenträchtigerem
+gefahrenträchtigeren
+gefahrenträchtigerer
+gefahrenträchtigeres
+gefahrenträchtiges
+gefahrenträchtigste
+gefahrenträchtigstem
+gefahrenträchtigsten
+gefahrenträchtigster
+gefahrenträchtigstes
+gefahrlos
+gefahrlose
+gefahrlosem
+gefahrlosen
+gefahrloser
+gefahrlosere
+gefahrloserem
+gefahrloseren
+gefahrloserer
+gefahrloseres
+gefahrloses
+gefahrloseste
+gefahrlosestem
+gefahrlosesten
+gefahrlosester
+gefahrlosestes
+gefahrvoll
+gefahrvolle
+gefahrvollem
+gefahrvollen
+gefahrvoller
+gefahrvollere
+gefahrvollerem
+gefahrvolleren
+gefahrvollerer
+gefahrvolleres
+gefahrvolles
+gefahrvollste
+gefahrvollstem
+gefahrvollsten
+gefahrvollster
+gefahrvollstes
+gefalle
+gefallen
+gefallene
+gefallenem
+gefallenen
+gefallener
+gefallenes
+gefallsüchtig
+gefallsüchtige
+gefallsüchtigem
+gefallsüchtigen
+gefallsüchtiger
+gefallsüchtiges
+gefallt
+gefaltet
+gefaltete
+gefaltetem
+gefalteten
+gefalteter
+gefaltetes
+gefangen
+gefangene
+gefangenem
+gefangenen
+gefangener
+gefangenes
+gefaselt
+gefasst
+gefasste
+gefasstem
+gefassten
+gefasster
+gefasstes
+gefastet
+gefaulenzt
+gefault
+gefaulte
+gefaultem
+gefaulten
+gefaulter
+gefaultes
+gefaxt
+gefaxte
+gefaxtem
+gefaxten
+gefaxter
+gefaxtes
+gefechtsbereit
+gefechtsbereite
+gefechtsbereitem
+gefechtsbereiten
+gefechtsbereiter
+gefechtsbereites
+gefegt
+gefegte
+gefegtem
+gefegten
+gefegter
+gefegtes
+gefehlt
+gefehlte
+gefehltem
+gefehlten
+gefehlter
+gefehltes
+gefeiert
+gefeierte
+gefeiertem
+gefeierten
+gefeierter
+gefeiertes
+gefeilt
+gefeilte
+gefeiltem
+gefeilten
+gefeilter
+gefeiltes
+gefeit
+gefeite
+gefeitem
+gefeiten
+gefeiter
+gefeites
+gefertigt
+gefertigte
+gefertigtem
+gefertigten
+gefertigter
+gefertigtes
+gefesselt
+gefesselte
+gefesseltem
+gefesselten
+gefesselter
+gefesseltes
+gefestigt
+gefestigte
+gefestigtem
+gefestigten
+gefestigter
+gefestigtes
+gefeuert
+gefeuerte
+gefeuertem
+gefeuerten
+gefeuerter
+gefeuertes
+gefiebert
+gefiedert
+gefiederte
+gefiedertem
+gefiederten
+gefiederter
+gefiedertes
+gefiel
+gefiele
+gefielen
+gefielst
+gefielt
+gefilmt
+gefilmte
+gefilmtem
+gefilmten
+gefilmter
+gefilmtes
+gefiltert
+gefilterte
+gefiltertem
+gefilterten
+gefilterter
+gefiltertes
+gefischt
+gefischte
+gefischtem
+gefischten
+gefischter
+gefischtes
+gefixt
+geflackert
+geflaggt
+geflanscht
+geflattert
+gefleckt
+gefleckte
+geflecktem
+gefleckten
+gefleckter
+geflecktes
+gefleht
+gefletscht
+gefletschte
+gefletschtem
+gefletschten
+gefletschter
+gefletschtes
+geflickt
+geflickte
+geflicktem
+geflickten
+geflickter
+geflicktes
+geflimmert
+geflimmerte
+geflimmertem
+geflimmerten
+geflimmerter
+geflimmertes
+geflissentlich
+geflissentliche
+geflissentlichem
+geflissentlichen
+geflissentlicher
+geflissentliches
+geflitzt
+geflochten
+geflochtene
+geflochtenem
+geflochtenen
+geflochtener
+geflochtenes
+geflogen
+geflogene
+geflogenem
+geflogenen
+geflogener
+geflogenes
+geflohen
+geflohene
+geflohenem
+geflohenen
+geflohener
+geflohenes
+geflossen
+geflossene
+geflossenem
+geflossenen
+geflossener
+geflossenes
+geflucht
+geflunkert
+geflötet
+geflüchtet
+geflüchtete
+geflüchtetem
+geflüchteten
+geflüchteter
+geflüchtetes
+geflügelt
+geflügelte
+geflügeltem
+geflügelten
+geflügelter
+geflügeltes
+geflüstert
+geflüsterte
+geflüstertem
+geflüsterten
+geflüsterter
+geflüstertes
+gefolgert
+gefolgerte
+gefolgertem
+gefolgerten
+gefolgerter
+gefolgertes
+gefolgt
+gefoltert
+gefolterte
+gefoltertem
+gefolterten
+gefolterter
+gefoltertes
+gefoppt
+gefoppte
+gefopptem
+gefoppten
+gefoppter
+gefopptes
+gefordert
+geforderte
+gefordertem
+geforderten
+geforderter
+gefordertes
+geformt
+geformte
+geformtem
+geformten
+geformter
+geformtes
+geforscht
+geforschte
+geforschtem
+geforschten
+geforschter
+geforschtes
+gefoult
+gefoulte
+gefoultem
+gefoulten
+gefoulter
+gefoultes
+gefragt
+gefragte
+gefragtem
+gefragten
+gefragter
+gefragtes
+gefreit
+gefreite
+gefreitem
+gefreiten
+gefreiter
+gefreites
+gefressen
+gefressene
+gefressenem
+gefressenen
+gefressener
+gefressenes
+gefreut
+gefrevelt
+gefrevelte
+gefreveltem
+gefrevelten
+gefrevelter
+gefreveltes
+gefrierbar
+gefrierbare
+gefrierbarem
+gefrierbaren
+gefrierbarer
+gefrierbares
+gefriere
+gefrieren
+gefrierend
+gefrierende
+gefrierendem
+gefrierenden
+gefrierender
+gefrierendes
+gefrierst
+gefriert
+gefrierte
+gefrierten
+gefriertest
+gefriertet
+gefristet
+gefristete
+gefristetem
+gefristeten
+gefristeter
+gefristetes
+gefror
+gefroren
+gefrorene
+gefrorenem
+gefrorenen
+gefrorener
+gefrorenes
+gefrorst
+gefrort
+gefräßig
+gefräßige
+gefräßigem
+gefräßigen
+gefräßiger
+gefräßigere
+gefräßigerem
+gefräßigeren
+gefräßigerer
+gefräßigeres
+gefräßiges
+gefräßigste
+gefräßigstem
+gefräßigsten
+gefräßigster
+gefräßigstes
+gefrühstückt
+gefunden
+gefundene
+gefundenem
+gefundenen
+gefundener
+gefundenes
+gefunkelt
+gefunkt
+gefunkte
+gefunktem
+gefunkten
+gefunkter
+gefunktes
+gefächert
+gefächerte
+gefächertem
+gefächerten
+gefächerter
+gefächertes
+gefädelt
+gefädelte
+gefädeltem
+gefädelten
+gefädelter
+gefädeltes
+gefährde
+gefährden
+gefährdend
+gefährdende
+gefährdendem
+gefährdenden
+gefährdender
+gefährdendes
+gefährdest
+gefährdet
+gefährdete
+gefährdetem
+gefährdeten
+gefährdeter
+gefährdetere
+gefährdeterem
+gefährdeteren
+gefährdeterer
+gefährdeteres
+gefährdetes
+gefährdetest
+gefährdetet
+gefährdetste
+gefährdetstem
+gefährdetsten
+gefährdetster
+gefährdetstes
+gefährlich
+gefährliche
+gefährlichem
+gefährlichen
+gefährlicher
+gefährlichere
+gefährlicherem
+gefährlicheren
+gefährlicherer
+gefährlicheres
+gefährliches
+gefährlichste
+gefährlichstem
+gefährlichsten
+gefährlichster
+gefährlichstes
+gefällig
+gefällige
+gefälligem
+gefälligen
+gefälliger
+gefälligere
+gefälligerem
+gefälligeren
+gefälligerer
+gefälligeres
+gefälliges
+gefälligst
+gefälligste
+gefälligstem
+gefälligsten
+gefälligster
+gefälligstes
+gefällst
+gefällt
+gefällte
+gefälltem
+gefällten
+gefällter
+gefälltes
+gefälscht
+gefälschte
+gefälschtem
+gefälschten
+gefälschter
+gefälschtes
+gefärbt
+gefärbte
+gefärbtem
+gefärbten
+gefärbter
+gefärbtes
+geföhnt
+geföhnte
+geföhntem
+geföhnten
+geföhnter
+geföhntes
+gefördert
+geförderte
+gefördertem
+geförderten
+geförderter
+gefördertes
+gefügig
+gefügige
+gefügigem
+gefügigen
+gefügiger
+gefügigere
+gefügigerem
+gefügigeren
+gefügigerer
+gefügigeres
+gefügiges
+gefügigste
+gefügigstem
+gefügigsten
+gefügigster
+gefügigstes
+gefügt
+gefühllos
+gefühllose
+gefühllosem
+gefühllosen
+gefühlloser
+gefühllosere
+gefühlloserem
+gefühlloseren
+gefühlloserer
+gefühlloseres
+gefühlloses
+gefühlloseste
+gefühllosestem
+gefühllosesten
+gefühllosester
+gefühllosestes
+gefühlsbetont
+gefühlsbetonte
+gefühlsbetontem
+gefühlsbetonten
+gefühlsbetonter
+gefühlsbetontere
+gefühlsbetonterem
+gefühlsbetonteren
+gefühlsbetonterer
+gefühlsbetonteres
+gefühlsbetontes
+gefühlsbetonteste
+gefühlsbetontestem
+gefühlsbetontesten
+gefühlsbetontester
+gefühlsbetontestes
+gefühlsduselig
+gefühlsduselige
+gefühlsduseligem
+gefühlsduseligen
+gefühlsduseliger
+gefühlsduseliges
+gefühlsduslig
+gefühlsduslige
+gefühlsdusligem
+gefühlsdusligen
+gefühlsdusliger
+gefühlsdusliges
+gefühlsmäßig
+gefühlsmäßige
+gefühlsmäßigem
+gefühlsmäßigen
+gefühlsmäßiger
+gefühlsmäßiges
+gefühlsvoll
+gefühlsvolle
+gefühlsvollem
+gefühlsvollen
+gefühlsvoller
+gefühlsvollere
+gefühlsvollerem
+gefühlsvolleren
+gefühlsvollerer
+gefühlsvolleres
+gefühlsvolles
+gefühlsvollste
+gefühlsvollstem
+gefühlsvollsten
+gefühlsvollster
+gefühlsvollstes
+gefühlt
+gefühlte
+gefühltem
+gefühlten
+gefühlter
+gefühltes
+gefühlvoll
+gefühlvolle
+gefühlvollem
+gefühlvollen
+gefühlvoller
+gefühlvollere
+gefühlvollerem
+gefühlvolleren
+gefühlvollerer
+gefühlvolleres
+gefühlvolles
+gefühlvollste
+gefühlvollstem
+gefühlvollsten
+gefühlvollster
+gefühlvollstes
+geführt
+geführte
+geführtem
+geführten
+geführter
+geführtes
+gefüllt
+gefüllte
+gefülltem
+gefüllten
+gefüllter
+gefülltes
+gefürchtet
+gefürchtete
+gefürchtetem
+gefürchteten
+gefürchteter
+gefürchtetere
+gefürchteterem
+gefürchteteren
+gefürchteterer
+gefürchteteres
+gefürchtetes
+gefürchtetste
+gefürchtetstem
+gefürchtetsten
+gefürchtetster
+gefürchtetstes
+gefüttert
+gefütterte
+gefüttertem
+gefütterten
+gefütterter
+gefüttertes
+gegackert
+gegafft
+gegangen
+gegangene
+gegangenem
+gegangenen
+gegangener
+gegangenes
+gegeben
+gegebene
+gegebenem
+gegebenen
+gegebenenfalls
+gegebener
+gegebenes
+gegeizt
+gegen
+gegeneinander
+gegengewichtslos
+gegengewichtslose
+gegengewichtslosem
+gegengewichtslosen
+gegengewichtsloser
+gegengewichtsloses
+gegenläufig
+gegenläufige
+gegenläufigem
+gegenläufigen
+gegenläufiger
+gegenläufiges
+gegenseitig
+gegenseitige
+gegenseitigem
+gegenseitigen
+gegenseitiger
+gegenseitiges
+gegenstandslos
+gegenstandslose
+gegenstandslosem
+gegenstandslosen
+gegenstandsloser
+gegenstandsloses
+gegensteuere
+gegensteuern
+gegensteuernd
+gegensteuernde
+gegensteuerndem
+gegensteuernden
+gegensteuernder
+gegensteuerndes
+gegensteuerst
+gegensteuert
+gegensteuerte
+gegensteuerten
+gegensteuertest
+gegensteuertet
+gegensteure
+gegenständlich
+gegenständliche
+gegenständlichem
+gegenständlichen
+gegenständlicher
+gegenständliches
+gegensätzlich
+gegensätzliche
+gegensätzlichem
+gegensätzlichen
+gegensätzlicher
+gegensätzlichere
+gegensätzlicherem
+gegensätzlicheren
+gegensätzlicherer
+gegensätzlicheres
+gegensätzliches
+gegensätzlichste
+gegensätzlichstem
+gegensätzlichsten
+gegensätzlichster
+gegensätzlichstes
+gegenteilig
+gegenteilige
+gegenteiligem
+gegenteiligen
+gegenteiliger
+gegenteiliges
+gegenwärtig
+gegenwärtige
+gegenwärtigem
+gegenwärtigen
+gegenwärtiger
+gegenwärtiges
+gegenüber
+gegenübergestanden
+gegenübergestandene
+gegenübergestandenem
+gegenübergestandenen
+gegenübergestandener
+gegenübergestandenes
+gegenübergestellt
+gegenübergestellte
+gegenübergestelltem
+gegenübergestellten
+gegenübergestellter
+gegenübergestelltes
+gegenübergetreten
+gegenübergetretene
+gegenübergetretenem
+gegenübergetretenen
+gegenübergetretener
+gegenübergetretenes
+gegenüberliege
+gegenüberliegen
+gegenüberliegend
+gegenüberliegende
+gegenüberliegendem
+gegenüberliegenden
+gegenüberliegender
+gegenüberliegendes
+gegenüberliegst
+gegenüberliegt
+gegenübersehe
+gegenübersehen
+gegenübersehend
+gegenübersehende
+gegenübersehendem
+gegenübersehenden
+gegenübersehender
+gegenübersehendes
+gegenüberseht
+gegenübersiehst
+gegenübersieht
+gegenüberstand
+gegenüberstanden
+gegenüberstandest
+gegenüberstandet
+gegenüberstandst
+gegenüberstehe
+gegenüberstehen
+gegenüberstehend
+gegenüberstehende
+gegenüberstehendem
+gegenüberstehenden
+gegenüberstehender
+gegenüberstehendes
+gegenüberstehst
+gegenübersteht
+gegenüberstelle
+gegenüberstellen
+gegenüberstellend
+gegenüberstellende
+gegenüberstellendem
+gegenüberstellenden
+gegenüberstellender
+gegenüberstellendes
+gegenüberstellst
+gegenüberstellt
+gegenüberstellte
+gegenüberstellten
+gegenüberstelltest
+gegenüberstelltet
+gegenübersähe
+gegenübersähen
+gegenübersähest
+gegenübersähet
+gegenübertrete
+gegenübertreten
+gegenübertretend
+gegenübertretende
+gegenübertretendem
+gegenübertretenden
+gegenübertretender
+gegenübertretendes
+gegenübertretet
+gegenüberzustehen
+gegessen
+gegessene
+gegessenem
+gegessenen
+gegessener
+gegessenes
+geglaubt
+geglaubte
+geglaubtem
+geglaubten
+geglaubter
+geglaubtes
+geglichen
+gegliedert
+gegliederte
+gegliedertem
+gegliederten
+gegliederter
+gegliedertes
+geglotzt
+geglänzt
+geglättet
+geglättete
+geglättetem
+geglätteten
+geglätteter
+geglättetes
+geglückt
+geglückte
+geglücktem
+geglückten
+geglückter
+geglücktes
+gegnerisch
+gegnerische
+gegnerischem
+gegnerischen
+gegnerischer
+gegnerisches
+gegolten
+gegoltene
+gegoltenem
+gegoltenen
+gegoltener
+gegoltenes
+gegossen
+gegossene
+gegossenem
+gegossenen
+gegossener
+gegossenes
+gegraben
+gegrabene
+gegrabenem
+gegrabenen
+gegrabener
+gegrabenes
+gegriffen
+gegriffene
+gegriffenem
+gegriffenen
+gegriffener
+gegriffenes
+gegrillt
+gegrillte
+gegrilltem
+gegrillten
+gegrillter
+gegrilltes
+gegrinst
+gegrübelt
+gegründet
+gegründete
+gegründetem
+gegründeten
+gegründeter
+gegründetes
+gegrüßt
+gegrüßte
+gegrüßtem
+gegrüßten
+gegrüßter
+gegrüßtes
+geguckt
+gegähnt
+gegängelt
+gegängelte
+gegängeltem
+gegängelten
+gegängelter
+gegängeltes
+gegärt
+gegärte
+gegärtem
+gegärten
+gegärter
+gegärtes
+gegönnt
+gegönnte
+gegönntem
+gegönnten
+gegönnter
+gegönntes
+gehabt
+gehabte
+gehabtem
+gehabten
+gehabter
+gehabtes
+gehackt
+gehackte
+gehacktem
+gehackten
+gehackter
+gehacktes
+gehaftet
+gehagelt
+gehalten
+gehaltene
+gehaltenem
+gehaltenen
+gehaltener
+gehaltenes
+gehaltlos
+gehaltreich
+gehaltreiche
+gehaltreichem
+gehaltreichen
+gehaltreicher
+gehaltreichere
+gehaltreicherem
+gehaltreicheren
+gehaltreicherer
+gehaltreicheres
+gehaltreiches
+gehaltreichste
+gehaltreichstem
+gehaltreichsten
+gehaltreichster
+gehaltreichstes
+gehaltvoll
+gehaltvolle
+gehaltvollem
+gehaltvollen
+gehaltvoller
+gehaltvolles
+gehandelt
+gehandelte
+gehandeltem
+gehandelten
+gehandelter
+gehandeltes
+gehandhabt
+gehandhabte
+gehandhabtem
+gehandhabten
+gehandhabter
+gehandhabtes
+gehandikapt
+gehandikapte
+gehandikaptem
+gehandikapten
+gehandikapter
+gehandikaptes
+gehangen
+gehangene
+gehangenem
+gehangenen
+gehangener
+gehangenes
+geharnischt
+geharnischte
+geharnischtem
+geharnischten
+geharnischter
+geharnischtes
+gehascht
+gehasst
+gehasste
+gehasstem
+gehassten
+gehasster
+gehasstes
+gehastet
+gehaucht
+gehauchte
+gehauchtem
+gehauchten
+gehauchter
+gehauchtes
+gehauen
+gehauene
+gehauenem
+gehauenen
+gehauener
+gehauenes
+gehaust
+gehbehindert
+gehbehinderte
+gehbehindertem
+gehbehinderten
+gehbehinderter
+gehbehindertes
+gehe
+gehebelt
+geheftet
+geheftete
+geheftetem
+gehefteten
+gehefteter
+geheftetes
+gehegt
+gehegte
+gehegtem
+gehegten
+gehegter
+gehegtes
+geheiligt
+geheiligte
+geheiligtem
+geheiligten
+geheiligter
+geheiligtes
+geheilt
+geheilte
+geheiltem
+geheilten
+geheilter
+geheiltes
+geheim
+geheime
+geheimem
+geheimen
+geheimer
+geheimere
+geheimerem
+geheimeren
+geheimerer
+geheimeres
+geheimes
+geheimgehalten
+geheimgehaltene
+geheimgehaltenem
+geheimgehaltenen
+geheimgehaltener
+geheimgehaltenes
+geheimnisvoll
+geheimnisvolle
+geheimnisvollem
+geheimnisvollen
+geheimnisvoller
+geheimnisvollere
+geheimnisvollerem
+geheimnisvolleren
+geheimnisvollerer
+geheimnisvolleres
+geheimnisvolles
+geheimnisvollste
+geheimnisvollstem
+geheimnisvollsten
+geheimnisvollster
+geheimnisvollstes
+geheimste
+geheimstem
+geheimsten
+geheimster
+geheimstes
+geheimtuerisch
+geheimtuerische
+geheimtuerischem
+geheimtuerischen
+geheimtuerischer
+geheimtuerisches
+geheiratet
+geheiratete
+geheiratetem
+geheirateten
+geheirateter
+geheiratetes
+geheizt
+geheizte
+geheiztem
+geheizten
+geheizter
+geheiztes
+geheißen
+geheißene
+geheißenem
+geheißenen
+geheißener
+geheißenes
+gehemmt
+gehemmte
+gehemmtem
+gehemmten
+gehemmter
+gehemmtes
+gehen
+gehend
+gehende
+gehendem
+gehenden
+gehender
+gehendes
+gehenkt
+gehenkte
+gehenktem
+gehenkten
+gehenkter
+gehenktes
+geherrscht
+gehetzt
+gehetzte
+gehetztem
+gehetzten
+gehetzter
+gehetztes
+geheuchelt
+geheuchelte
+geheucheltem
+geheuchelten
+geheuchelter
+geheucheltes
+geheuer
+geheuert
+geheult
+gehievt
+gehindert
+gehinderte
+gehindertem
+gehinderten
+gehinderter
+gehindertes
+gehinkt
+gehisst
+gehisste
+gehisstem
+gehissten
+gehisster
+gehisstes
+gehobelt
+gehobelte
+gehobeltem
+gehobelten
+gehobelter
+gehobeltes
+gehoben
+gehobene
+gehobenem
+gehobenen
+gehobener
+gehobenere
+gehobenerem
+gehobeneren
+gehobenerer
+gehobeneres
+gehobenes
+gehobenste
+gehobenstem
+gehobensten
+gehobenster
+gehobenstes
+gehofft
+geholfen
+geholt
+geholte
+geholtem
+geholten
+geholter
+geholtes
+gehorche
+gehorchen
+gehorchend
+gehorchende
+gehorchendem
+gehorchenden
+gehorchender
+gehorchendes
+gehorchst
+gehorcht
+gehorchte
+gehorchten
+gehorchtest
+gehorchtet
+gehorsam
+gehorsame
+gehorsamem
+gehorsamen
+gehorsamer
+gehorsamere
+gehorsamerem
+gehorsameren
+gehorsamerer
+gehorsameres
+gehorsames
+gehorsamste
+gehorsamstem
+gehorsamsten
+gehorsamster
+gehorsamstes
+gehortet
+gehortete
+gehortetem
+gehorteten
+gehorteter
+gehortetes
+gehst
+geht
+gehuldigt
+gehungert
+gehupt
+gehustet
+gehäkelt
+gehäkelte
+gehäkeltem
+gehäkelten
+gehäkelter
+gehäkeltes
+gehängt
+gehängte
+gehängtem
+gehängten
+gehängter
+gehängtes
+gehänselt
+gehänselte
+gehänseltem
+gehänselten
+gehänselter
+gehänseltes
+gehärtet
+gehärtete
+gehärtetem
+gehärteten
+gehärteter
+gehärtetes
+gehässig
+gehässige
+gehässigem
+gehässigen
+gehässiger
+gehässiges
+gehätschelt
+gehätschelte
+gehätscheltem
+gehätschelten
+gehätschelter
+gehätscheltes
+gehäuft
+gehäufte
+gehäuftem
+gehäuften
+gehäufter
+gehäuftes
+gehöhnt
+gehöre
+gehören
+gehörend
+gehörende
+gehörendem
+gehörenden
+gehörender
+gehörendes
+gehörig
+gehörige
+gehörigem
+gehörigen
+gehöriger
+gehöriges
+gehörst
+gehört
+gehörte
+gehörtem
+gehörten
+gehörter
+gehörtes
+gehörtest
+gehörtet
+gehüllt
+gehüllte
+gehülltem
+gehüllten
+gehüllter
+gehülltes
+gehütet
+gehütete
+gehütetem
+gehüteten
+gehüteter
+gehütetes
+geil
+geile
+geilem
+geilen
+geiler
+geilere
+geilerem
+geileren
+geilerer
+geileres
+geiles
+geilste
+geilstem
+geilsten
+geilster
+geilstes
+geimpft
+geimpfte
+geimpftem
+geimpften
+geimpfter
+geimpftes
+geirrt
+geistere
+geisterhaft
+geisterhafte
+geisterhaftem
+geisterhaften
+geisterhafter
+geisterhaftere
+geisterhafterem
+geisterhafteren
+geisterhafterer
+geisterhafteres
+geisterhaftes
+geisterhafteste
+geisterhaftestem
+geisterhaftesten
+geisterhaftester
+geisterhaftestes
+geistern
+geisternd
+geisternde
+geisterndem
+geisternden
+geisternder
+geisterndes
+geisterst
+geistert
+geisterte
+geisterten
+geistertest
+geistertet
+geistesabwesend
+geistesabwesende
+geistesabwesendem
+geistesabwesenden
+geistesabwesender
+geistesabwesendes
+geistesgegenwärtig
+geistesgegenwärtige
+geistesgegenwärtigem
+geistesgegenwärtigen
+geistesgegenwärtiger
+geistesgegenwärtiges
+geistesgestört
+geistesgestörte
+geistesgestörtem
+geistesgestörten
+geistesgestörter
+geistesgestörtes
+geisteskrank
+geisteskranke
+geisteskrankem
+geisteskranken
+geisteskranker
+geisteskrankes
+geistesschwach
+geistesschwache
+geistesschwachem
+geistesschwachen
+geistesschwacher
+geistesschwaches
+geistesschwächer
+geistesschwächere
+geistesschwächerem
+geistesschwächeren
+geistesschwächerer
+geistesschwächeres
+geistesschwächste
+geistesschwächstem
+geistesschwächsten
+geistesschwächster
+geistesschwächstes
+geistesverwandt
+geistesverwandte
+geistesverwandtem
+geistesverwandten
+geistesverwandter
+geistesverwandtes
+geisteswissenschaftlich
+geisteswissenschaftliche
+geisteswissenschaftlichem
+geisteswissenschaftlichen
+geisteswissenschaftlicher
+geisteswissenschaftliches
+geistig
+geistige
+geistigem
+geistigen
+geistiger
+geistiges
+geistlich
+geistliche
+geistlichem
+geistlichen
+geistlicher
+geistliches
+geistlos
+geistlose
+geistlosem
+geistlosen
+geistloser
+geistlosere
+geistloserem
+geistloseren
+geistloserer
+geistloseres
+geistloses
+geistloseste
+geistlosestem
+geistlosesten
+geistlosester
+geistlosestes
+geistre
+geistreich
+geistreiche
+geistreichem
+geistreichen
+geistreicher
+geistreichere
+geistreicherem
+geistreicheren
+geistreicherer
+geistreicheres
+geistreiches
+geistreichste
+geistreichstem
+geistreichsten
+geistreichster
+geistreichstes
+geisttötend
+geisttötende
+geisttötendem
+geisttötenden
+geisttötender
+geisttötendes
+geistvoll
+geistvolle
+geistvollem
+geistvollen
+geistvoller
+geistvollere
+geistvollerem
+geistvolleren
+geistvollerer
+geistvolleres
+geistvolles
+geistvollste
+geistvollstem
+geistvollsten
+geistvollster
+geistvollstes
+geize
+geizen
+geizend
+geizende
+geizendem
+geizenden
+geizender
+geizendes
+geizest
+geizig
+geizige
+geizigem
+geizigen
+geiziger
+geizigere
+geizigerem
+geizigeren
+geizigerer
+geizigeres
+geiziges
+geizigste
+geizigstem
+geizigsten
+geizigster
+geizigstes
+geizt
+geizte
+geizten
+geiztest
+geiztet
+geißele
+geißeln
+geißelnd
+geißelnde
+geißelndem
+geißelnden
+geißelnder
+geißelndes
+geißelst
+geißelt
+geißelte
+geißelten
+geißeltest
+geißeltet
+geißle
+gejagt
+gejagte
+gejagtem
+gejagten
+gejagter
+gejagtes
+gejammert
+gejittert
+gejubelt
+gejubelte
+gejubeltem
+gejubelten
+gejubelter
+gejubeltes
+gejuckt
+gekabelt
+gekabelte
+gekabeltem
+gekabelten
+gekabelter
+gekabeltes
+gekannt
+gekannte
+gekanntem
+gekannten
+gekannter
+gekanntes
+gekantet
+gekantete
+gekantetem
+gekanteten
+gekanteter
+gekantetes
+gekappt
+gekappte
+gekapptem
+gekappten
+gekappter
+gekapptes
+gekapselt
+gekapselte
+gekapseltem
+gekapselten
+gekapselter
+gekapseltes
+gekaspert
+gekasperte
+gekaspertem
+gekasperten
+gekasperter
+gekaspertes
+gekaudert
+gekauderte
+gekaudertem
+gekauderten
+gekauderter
+gekaudertes
+gekauert
+gekauerte
+gekauertem
+gekauerten
+gekauerter
+gekauertes
+gekauft
+gekaufte
+gekauftem
+gekauften
+gekaufter
+gekauftes
+gekaut
+gekaute
+gekautem
+gekauten
+gekauter
+gekautes
+gekehrt
+gekehrte
+gekehrtem
+gekehrten
+gekehrter
+gekehrtes
+gekeift
+gekeimt
+gekennzeichnet
+gekennzeichnete
+gekennzeichnetem
+gekennzeichneten
+gekennzeichneter
+gekennzeichnetes
+gekentert
+gekenterte
+gekentertem
+gekenterten
+gekenterter
+gekentertes
+gekerbt
+gekerbte
+gekerbtem
+gekerbten
+gekerbter
+gekerbtes
+gekettet
+gekettete
+gekettetem
+geketteten
+geketteter
+gekettetes
+gekeucht
+gekichert
+gekidnappt
+gekidnappte
+gekidnapptem
+gekidnappten
+gekidnappter
+gekidnapptes
+gekillt
+gekillte
+gekilltem
+gekillten
+gekillter
+gekilltes
+gekippt
+gekippte
+gekipptem
+gekippten
+gekippter
+gekipptes
+gekittet
+gekittete
+gekittetem
+gekitteten
+gekitteter
+gekittetes
+gekitzelt
+gekitzelte
+gekitzeltem
+gekitzelten
+gekitzelter
+gekitzeltes
+geklafft
+geklagt
+geklammert
+geklammerte
+geklammertem
+geklammerten
+geklammerter
+geklammertes
+geklappert
+geklappt
+geklatscht
+geklaut
+geklaute
+geklautem
+geklauten
+geklauter
+geklautes
+geklebt
+geklebte
+geklebtem
+geklebten
+geklebter
+geklebtes
+gekleidet
+gekleidete
+gekleidetem
+gekleideten
+gekleideter
+gekleidetes
+geklemmt
+geklemmte
+geklemmtem
+geklemmten
+geklemmter
+geklemmtes
+geklettert
+geklimpert
+geklingelt
+geklirrt
+geklopft
+gekloppt
+geklungen
+geklungene
+geklungenem
+geklungenen
+geklungener
+geklungenes
+geklärt
+geklärte
+geklärtem
+geklärten
+geklärter
+geklärtes
+geklönt
+geknackt
+geknackte
+geknacktem
+geknackten
+geknackter
+geknacktes
+geknallt
+geknebelt
+geknebelte
+geknebeltem
+geknebelten
+geknebelter
+geknebeltes
+geknechtet
+geknechtete
+geknechtetem
+geknechteten
+geknechteter
+geknechtetes
+geknetet
+geknetete
+geknetetem
+gekneteten
+gekneteter
+geknetetes
+geknickt
+geknickte
+geknicktem
+geknickten
+geknickter
+geknicktes
+gekniet
+geknipst
+geknipste
+geknipstem
+geknipsten
+geknipster
+geknipstes
+geknirscht
+geknistert
+geknurrt
+geknöpft
+geknöpfte
+geknöpftem
+geknöpften
+geknöpfter
+geknöpftes
+geknüpft
+geknüpfte
+geknüpftem
+geknüpften
+geknüpfter
+geknüpftes
+gekocht
+gekochte
+gekochtem
+gekochten
+gekochter
+gekochtes
+gekommen
+gekommene
+gekommenem
+gekommenen
+gekommener
+gekommenes
+gekonnt
+gekonnte
+gekonntem
+gekonnten
+gekonnter
+gekonntes
+gekontert
+gekoppelt
+gekoppelte
+gekoppeltem
+gekoppelten
+gekoppelter
+gekoppeltes
+gekostet
+gekracht
+gekratzt
+gekrault
+gekreischt
+gekreuzigt
+gekreuzigte
+gekreuzigtem
+gekreuzigten
+gekreuzigter
+gekreuzigtes
+gekreuzt
+gekreuzte
+gekreuztem
+gekreuzten
+gekreuzter
+gekreuztes
+gekriegt
+gekritzelt
+gekrochen
+gekrochene
+gekrochenem
+gekrochenen
+gekrochener
+gekrochenes
+gekräftigt
+gekränkt
+gekränkte
+gekränktem
+gekränkten
+gekränkter
+gekränktes
+gekräuselt
+gekräuselte
+gekräuseltem
+gekräuselten
+gekräuselter
+gekräuseltes
+gekrönt
+gekrönte
+gekröntem
+gekrönten
+gekrönter
+gekröntes
+gekrümmt
+gekrümmte
+gekrümmtem
+gekrümmten
+gekrümmter
+gekrümmtes
+gekämmt
+gekämmte
+gekämmtem
+gekämmten
+gekämmter
+gekämmtes
+gekämpft
+geködert
+geköderte
+geködertem
+geköderten
+geköderter
+geködertes
+geköpft
+geköpfte
+geköpftem
+geköpften
+geköpfter
+geköpftes
+gekühlt
+gekühlte
+gekühltem
+gekühlten
+gekühlter
+gekühltes
+gekümmert
+gekündigt
+gekündigte
+gekündigtem
+gekündigten
+gekündigter
+gekündigtes
+gekünstelt
+gekünstelte
+gekünsteltem
+gekünstelten
+gekünstelter
+gekünsteltes
+gekürzt
+gekürzte
+gekürztem
+gekürzten
+gekürzter
+gekürztes
+geküsst
+geküsste
+geküsstem
+geküssten
+geküsster
+geküsstes
+gelabt
+gelabte
+gelabtem
+gelabten
+gelabter
+gelabtes
+gelacht
+geladen
+geladene
+geladenem
+geladenen
+geladener
+geladenes
+gelagert
+gelagerte
+gelagertem
+gelagerten
+gelagerter
+gelagertes
+gelahmt
+gelandet
+gelandete
+gelandetem
+gelandeten
+gelandeter
+gelandetes
+gelang
+gelange
+gelangen
+gelangend
+gelangende
+gelangendem
+gelangenden
+gelangender
+gelangendes
+gelangst
+gelangt
+gelangte
+gelangtem
+gelangten
+gelangter
+gelangtes
+gelangtest
+gelangtet
+gelangweilt
+gelangweilte
+gelangweiltem
+gelangweilten
+gelangweilter
+gelangweiltes
+gelassen
+gelassene
+gelassenem
+gelassenen
+gelassener
+gelassenere
+gelassenerem
+gelasseneren
+gelassenerer
+gelasseneres
+gelassenes
+gelassenste
+gelassenstem
+gelassensten
+gelassenster
+gelassenstes
+gelatcht
+gelatscht
+gelaufen
+gelaufene
+gelaufenem
+gelaufenen
+gelaufener
+gelaufenes
+gelaunt
+gelaunte
+gelauntem
+gelaunten
+gelaunter
+gelauntes
+gelaust
+gelauste
+gelaustem
+gelausten
+gelauster
+gelaustes
+gelb
+gelbe
+gelbem
+gelben
+gelber
+gelbes
+gelbgrün
+gelbgrüne
+gelbgrünem
+gelbgrünen
+gelbgrüner
+gelbgrünes
+gelblich
+gelbliche
+gelblichem
+gelblichen
+gelblicher
+gelbliches
+geldgebend
+geldgebende
+geldgebendem
+geldgebenden
+geldgebender
+geldgebendes
+geldgierig
+geldgierige
+geldgierigem
+geldgierigen
+geldgieriger
+geldgieriges
+geldpolitisch
+geldpolitische
+geldpolitischem
+geldpolitischen
+geldpolitischer
+geldpolitisches
+geldverdiene
+geldverdienen
+geldverdienend
+geldverdienende
+geldverdienendem
+geldverdienenden
+geldverdienender
+geldverdienendes
+geldverdienst
+geldverdient
+geldverdiente
+geldverdienten
+geldverdientest
+geldverdientet
+gelebt
+gelebte
+gelebtem
+gelebten
+gelebter
+gelebtes
+geleckt
+geleckte
+gelecktem
+geleckten
+geleckter
+gelecktes
+geleert
+geleerte
+geleertem
+geleerten
+geleerter
+geleertes
+gelegen
+gelegene
+gelegenem
+gelegenen
+gelegener
+gelegenes
+gelegentlich
+gelegentliche
+gelegentlichem
+gelegentlichen
+gelegentlicher
+gelegentliches
+gelegt
+gelegte
+gelegtem
+gelegten
+gelegter
+gelegtes
+gelehnt
+gelehrig
+gelehrige
+gelehrigem
+gelehrigen
+gelehriger
+gelehrigere
+gelehrigerem
+gelehrigeren
+gelehrigerer
+gelehrigeres
+gelehriges
+gelehrigste
+gelehrigstem
+gelehrigsten
+gelehrigster
+gelehrigstes
+gelehrt
+gelehrte
+gelehrtem
+gelehrten
+gelehrter
+gelehrtere
+gelehrterem
+gelehrteren
+gelehrterer
+gelehrteres
+gelehrtes
+gelehrteste
+gelehrtestem
+gelehrtesten
+gelehrtester
+gelehrtestes
+geleimt
+geleimte
+geleimtem
+geleimten
+geleimter
+geleimtes
+geleistet
+geleistete
+geleistetem
+geleisteten
+geleisteter
+geleistetes
+geleite
+geleiten
+geleitend
+geleitende
+geleitendem
+geleitenden
+geleitender
+geleitendes
+geleitest
+geleitet
+geleitete
+geleitetem
+geleiteten
+geleiteter
+geleitetes
+geleitetest
+geleitetet
+gelenkig
+gelenkige
+gelenkigem
+gelenkigen
+gelenkiger
+gelenkigere
+gelenkigerem
+gelenkigeren
+gelenkigerer
+gelenkigeres
+gelenkiges
+gelenkigste
+gelenkigstem
+gelenkigsten
+gelenkigster
+gelenkigstes
+gelenkt
+gelenkte
+gelenktem
+gelenkten
+gelenkter
+gelenktes
+gelernt
+gelernte
+gelerntem
+gelernten
+gelernter
+gelerntes
+gelesen
+gelesene
+gelesenem
+gelesenen
+gelesener
+gelesenes
+geleugnet
+geleugnete
+geleugnetem
+geleugneten
+geleugneter
+geleugnetes
+gelichtet
+gelichtete
+gelichtetem
+gelichteten
+gelichteter
+gelichtetes
+geliebt
+geliebte
+geliebtem
+geliebten
+geliebter
+geliebtes
+geliefert
+gelieferte
+geliefertem
+gelieferten
+gelieferter
+geliefertes
+geliehen
+geliehene
+geliehenem
+geliehenen
+geliehener
+geliehenes
+geliftet
+geliftete
+geliftetem
+gelifteten
+gelifteter
+geliftetes
+gelindert
+gelinderte
+gelindertem
+gelinderten
+gelinderter
+gelindertes
+gelinge
+gelingen
+gelingend
+gelingende
+gelingendem
+gelingenden
+gelingender
+gelingendes
+gelingst
+gelingt
+gelinkt
+gelinkte
+gelinktem
+gelinkten
+gelinkter
+gelinktes
+gelistet
+gelistete
+gelistetem
+gelisteten
+gelisteter
+gelistetes
+gelitten
+gelittene
+gelittenem
+gelittenen
+gelittener
+gelittenes
+gelle
+gellen
+gellend
+gellende
+gellendem
+gellenden
+gellender
+gellendes
+gellst
+gellt
+gellte
+gellten
+gelltest
+gelltet
+gelobe
+geloben
+gelobend
+gelobende
+gelobendem
+gelobenden
+gelobender
+gelobendes
+gelobst
+gelobt
+gelobte
+gelobtem
+gelobten
+gelobter
+gelobtes
+gelobtest
+gelobtet
+gelocht
+gelochte
+gelochtem
+gelochten
+gelochter
+gelochtes
+gelockert
+gelockerte
+gelockertem
+gelockerten
+gelockerter
+gelockertes
+gelockt
+gelockte
+gelocktem
+gelockten
+gelockter
+gelocktes
+gelogen
+gelogene
+gelogenem
+gelogenen
+gelogener
+gelogenes
+geloggt
+gelohnt
+gelost
+geloste
+gelostem
+gelosten
+geloster
+gelostes
+gelotst
+gelotste
+gelotstem
+gelotsten
+gelotster
+gelotstes
+gelte
+gelten
+geltend
+geltende
+geltendem
+geltenden
+geltender
+geltendes
+geltet
+geltungsbedürftig
+geltungsbedürftige
+geltungsbedürftigem
+geltungsbedürftigen
+geltungsbedürftiger
+geltungsbedürftiges
+gelungen
+gelungene
+gelungenem
+gelungenen
+gelungener
+gelungenes
+gelyncht
+gelähmt
+gelähmte
+gelähmtem
+gelähmten
+gelähmter
+gelähmtes
+gelänge
+gelängen
+gelärmt
+gelärmte
+gelärmtem
+gelärmten
+gelärmter
+gelärmtes
+gelästert
+geläufig
+geläufige
+geläufigem
+geläufigen
+geläufiger
+geläufigere
+geläufigerem
+geläufigeren
+geläufigerer
+geläufigeres
+geläufiges
+geläufigste
+geläufigstem
+geläufigsten
+geläufigster
+geläufigstes
+geläutert
+geläuterte
+geläutertem
+geläuterten
+geläuterter
+geläutertes
+geläutet
+geläutete
+geläutetem
+geläuteten
+geläuteter
+geläutetes
+gelöscht
+gelöschte
+gelöschtem
+gelöschten
+gelöschter
+gelöschtes
+gelöst
+gelöste
+gelöstem
+gelösten
+gelöster
+gelöstes
+gelötet
+gelüftet
+gelüftete
+gelüftetem
+gelüfteten
+gelüfteter
+gelüftetes
+gelüste
+gelüsten
+gelüstend
+gelüstende
+gelüstendem
+gelüstenden
+gelüstender
+gelüstendes
+gelüstest
+gelüstet
+gelüstete
+gelüsteten
+gelüstetest
+gelüstetet
+gemacht
+gemachte
+gemachtem
+gemachten
+gemachter
+gemachtes
+gemahlen
+gemahlene
+gemahlenem
+gemahlenen
+gemahlener
+gemahlenes
+gemahnt
+gemahnte
+gemahntem
+gemahnten
+gemahnter
+gemahntes
+gemalt
+gemalte
+gemaltem
+gemalten
+gemalter
+gemaltes
+gemanagt
+gemanagte
+gemanagtem
+gemanagten
+gemanagter
+gemanagtes
+gemartert
+gemarterte
+gemartertem
+gemarterten
+gemarterter
+gemartertes
+gemauert
+gemauerte
+gemauertem
+gemauerten
+gemauerter
+gemauertes
+gemaßregelt
+gemaßregelte
+gemaßregeltem
+gemaßregelten
+gemaßregelter
+gemaßregeltes
+gemeckert
+gemein
+gemeindlich
+gemeindliche
+gemeindlichem
+gemeindlichen
+gemeindlicher
+gemeindliches
+gemeine
+gemeinem
+gemeinen
+gemeiner
+gemeinere
+gemeinerem
+gemeineren
+gemeinerer
+gemeineres
+gemeinerweise
+gemeines
+gemeingefährlich
+gemeingefährliche
+gemeingefährlichem
+gemeingefährlichen
+gemeingefährlicher
+gemeingefährlichere
+gemeingefährlicherem
+gemeingefährlicheren
+gemeingefährlicherer
+gemeingefährlicheres
+gemeingefährliches
+gemeingefährlichste
+gemeingefährlichstem
+gemeingefährlichsten
+gemeingefährlichster
+gemeingefährlichstes
+gemeingültig
+gemeingültige
+gemeingültigem
+gemeingültigen
+gemeingültiger
+gemeingültiges
+gemeinhin
+gemeinnützig
+gemeinnützige
+gemeinnützigem
+gemeinnützigen
+gemeinnütziger
+gemeinnütziges
+gemeinsam
+gemeinsame
+gemeinsamem
+gemeinsamen
+gemeinsamer
+gemeinsames
+gemeinschaftlich
+gemeinschaftliche
+gemeinschaftlichem
+gemeinschaftlichen
+gemeinschaftlicher
+gemeinschaftliches
+gemeinste
+gemeinstem
+gemeinsten
+gemeinster
+gemeinstes
+gemeint
+gemeinte
+gemeintem
+gemeinten
+gemeinter
+gemeintes
+gemeinverständlich
+gemeinverständliche
+gemeinverständlichem
+gemeinverständlichen
+gemeinverständlicher
+gemeinverständliches
+gemeinwirtschaftlich
+gemeinwirtschaftliche
+gemeinwirtschaftlichem
+gemeinwirtschaftlichen
+gemeinwirtschaftlicher
+gemeinwirtschaftliches
+gemeistert
+gemeisterte
+gemeistertem
+gemeisterten
+gemeisterter
+gemeistertes
+gemeldet
+gemeldete
+gemeldetem
+gemeldeten
+gemeldeter
+gemeldetes
+gemerkt
+gemerkte
+gemerktem
+gemerkten
+gemerkter
+gemerktes
+gemessen
+gemessene
+gemessenem
+gemessenen
+gemessener
+gemessenes
+gemeuchelt
+gemeuchelte
+gemeucheltem
+gemeuchelten
+gemeuchelter
+gemeucheltes
+gemeutert
+gemieden
+gemiedene
+gemiedenem
+gemiedenen
+gemiedener
+gemiedenes
+gemietet
+gemietete
+gemietetem
+gemieteten
+gemieteter
+gemietetes
+gemildert
+gemilderte
+gemildertem
+gemilderten
+gemilderter
+gemildertes
+gemindert
+geminderte
+gemindertem
+geminderten
+geminderter
+gemindertes
+gemischt
+gemischte
+gemischtem
+gemischten
+gemischter
+gemischtere
+gemischterem
+gemischteren
+gemischterer
+gemischteres
+gemischtes
+gemischteste
+gemischtestem
+gemischtesten
+gemischtester
+gemischtestes
+gemisst
+gemisste
+gemisstem
+gemissten
+gemisster
+gemisstes
+gemistet
+gemistete
+gemistetem
+gemisteten
+gemisteter
+gemistetes
+gemixt
+gemixte
+gemixtem
+gemixten
+gemixter
+gemixtes
+gemocht
+gemochte
+gemochtem
+gemochten
+gemochter
+gemochtes
+gemogelt
+gemolken
+gemolkene
+gemolkenem
+gemolkenen
+gemolkener
+gemolkenes
+gemordet
+gemosert
+gemultiplext
+gemunkelt
+gemurmelt
+gemurmelte
+gemurmeltem
+gemurmelten
+gemurmelter
+gemurmeltes
+gemusst
+gemustert
+gemusterte
+gemustertem
+gemusterten
+gemusterter
+gemustertes
+gemächlich
+gemächliche
+gemächlichem
+gemächlichen
+gemächlicher
+gemächliches
+gemäht
+gemähte
+gemähtem
+gemähten
+gemähter
+gemähtes
+gemästet
+gemästete
+gemästetem
+gemästeten
+gemästeter
+gemästetes
+gemäß
+gemäße
+gemäßem
+gemäßen
+gemäßer
+gemäßes
+gemäßigt
+gemäßigte
+gemäßigtem
+gemäßigten
+gemäßigter
+gemäßigtes
+gemündet
+gemündete
+gemündetem
+gemündeten
+gemündeter
+gemündetes
+gemünzt
+gemünzte
+gemünztem
+gemünzten
+gemünzter
+gemünztes
+gemütlich
+gemütliche
+gemütlichem
+gemütlichen
+gemütlicher
+gemütlichere
+gemütlicherem
+gemütlicheren
+gemütlicherer
+gemütlicheres
+gemütliches
+gemütlichste
+gemütlichstem
+gemütlichsten
+gemütlichster
+gemütlichstes
+gemütsfrei
+gemütsfreie
+gemütsfreiem
+gemütsfreien
+gemütsfreier
+gemütsfreies
+gemütskrank
+gemütskranke
+gemütskrankem
+gemütskranken
+gemütskranker
+gemütskrankes
+gemütvoll
+gemütvolle
+gemütvollem
+gemütvollen
+gemütvoller
+gemütvolles
+genagelt
+genagt
+genannt
+genannte
+genanntem
+genannten
+genannter
+genanntes
+genau
+genaue
+genauem
+genauen
+genauer
+genauere
+genauerem
+genaueren
+genauerer
+genaueres
+genaues
+genaueste
+genauestem
+genauesten
+genauester
+genauestes
+genauso
+genauste
+genaustem
+genausten
+genauster
+genaustes
+genaß
+genaßen
+genaßest
+genaßt
+geneckt
+geneckte
+genecktem
+geneckten
+geneckter
+genecktes
+genehm
+genehme
+genehmem
+genehmen
+genehmer
+genehmere
+genehmerem
+genehmeren
+genehmerer
+genehmeres
+genehmes
+genehmige
+genehmigen
+genehmigend
+genehmigende
+genehmigendem
+genehmigenden
+genehmigender
+genehmigendes
+genehmigst
+genehmigt
+genehmigte
+genehmigtem
+genehmigten
+genehmigter
+genehmigtes
+genehmigtest
+genehmigtet
+genehmigungspflichtig
+genehmigungspflichtige
+genehmigungspflichtigem
+genehmigungspflichtigen
+genehmigungspflichtiger
+genehmigungspflichtiges
+genehmste
+genehmstem
+genehmsten
+genehmster
+genehmstes
+geneigt
+geneigte
+geneigtem
+geneigten
+geneigter
+geneigtes
+generalisierbar
+generalisierbare
+generalisierbarem
+generalisierbaren
+generalisierbarer
+generalisierbares
+generalisiere
+generalisieren
+generalisierend
+generalisierende
+generalisierendem
+generalisierenden
+generalisierender
+generalisierendes
+generalisierst
+generalisiert
+generalisierte
+generalisiertem
+generalisierten
+generalisierter
+generalisiertes
+generalisiertest
+generalisiertet
+generationenlang
+generationenlange
+generationenlangem
+generationenlangen
+generationenlanger
+generationenlanges
+generationsübergreifend
+generationsübergreifende
+generationsübergreifendem
+generationsübergreifenden
+generationsübergreifender
+generationsübergreifendes
+generell
+generelle
+generellem
+generellen
+genereller
+generelles
+generierbar
+generierbare
+generierbarem
+generierbaren
+generierbarer
+generierbares
+generiere
+generieren
+generierend
+generierende
+generierendem
+generierenden
+generierender
+generierendes
+generierst
+generiert
+generierte
+generiertem
+generierten
+generierter
+generiertes
+generiertest
+generiertet
+generisch
+generische
+generischem
+generischen
+generischer
+generisches
+genese
+genesen
+genesend
+genesende
+genesendem
+genesenden
+genesender
+genesendes
+genesene
+genesenem
+genesenen
+genesener
+genesenes
+genesest
+genest
+genetisch
+genetische
+genetischem
+genetischen
+genetischer
+genetisches
+genial
+geniale
+genialem
+genialen
+genialer
+genialere
+genialerem
+genialeren
+genialerer
+genialeres
+geniales
+genialste
+genialstem
+genialsten
+genialster
+genialstes
+geniere
+genieren
+genierend
+genierende
+genierendem
+genierenden
+genierender
+genierendes
+genierst
+geniert
+genierte
+geniertem
+genierten
+genierter
+geniertes
+geniertest
+geniertet
+geniest
+genießbar
+genießbare
+genießbarem
+genießbaren
+genießbarer
+genießbares
+genieße
+genießen
+genießend
+genießende
+genießendem
+genießenden
+genießender
+genießendes
+genießerisch
+genießerische
+genießerischem
+genießerischen
+genießerischer
+genießerisches
+genießest
+genießt
+genippt
+genommen
+genommene
+genommenem
+genommenen
+genommener
+genommenes
+genormt
+genormte
+genormtem
+genormten
+genormter
+genormtes
+genoss
+genossen
+genossenschaftlich
+genossenschaftliche
+genossenschaftlichem
+genossenschaftlichen
+genossenschaftlicher
+genossenschaftliches
+genossest
+genosst
+gentechnisch
+gentechnische
+gentechnischem
+gentechnischen
+gentechnischer
+gentechnisches
+gentechnologisch
+gentechnologische
+gentechnologischem
+gentechnologischen
+gentechnologischer
+gentechnologisches
+genug
+genussreich
+genussreiche
+genussreichem
+genussreichen
+genussreicher
+genussreichere
+genussreicherem
+genussreicheren
+genussreicherer
+genussreicheres
+genussreiches
+genussreichste
+genussreichstem
+genussreichsten
+genussreichster
+genussreichstes
+genusssüchtig
+genusssüchtige
+genusssüchtigem
+genusssüchtigen
+genusssüchtiger
+genusssüchtigere
+genusssüchtigerem
+genusssüchtigeren
+genusssüchtigerer
+genusssüchtigeres
+genusssüchtiges
+genusssüchtigste
+genusssüchtigstem
+genusssüchtigsten
+genusssüchtigster
+genusssüchtigstes
+genussvoll
+genussvolle
+genussvollem
+genussvollen
+genussvoller
+genussvolles
+genutzt
+genutzte
+genutztem
+genutzten
+genutzter
+genutztes
+genähert
+genäherte
+genähertem
+genäherten
+genäherter
+genähertes
+genährt
+genährte
+genährtem
+genährten
+genährter
+genährtes
+genäht
+genähte
+genähtem
+genähten
+genähter
+genähtes
+genötigt
+genötigte
+genötigtem
+genötigten
+genötigter
+genötigtes
+genüge
+genügen
+genügend
+genügende
+genügendem
+genügenden
+genügender
+genügendere
+genügenderem
+genügenderen
+genügenderer
+genügenderes
+genügendes
+genügendste
+genügendstem
+genügendsten
+genügendster
+genügendstes
+genügsam
+genügsame
+genügsamem
+genügsamen
+genügsamer
+genügsamere
+genügsamerem
+genügsameren
+genügsamerer
+genügsameres
+genügsames
+genügsamste
+genügsamstem
+genügsamsten
+genügsamster
+genügsamstes
+genügst
+genügt
+genügte
+genügten
+genügtest
+genügtet
+genüsslich
+genüssliche
+genüsslichem
+genüsslichen
+genüsslicher
+genüssliches
+geographisch
+geographische
+geographischem
+geographischen
+geographischer
+geographisches
+geohrfeigt
+geohrfeigte
+geohrfeigtem
+geohrfeigten
+geohrfeigter
+geohrfeigtes
+geologisch
+geologische
+geologischem
+geologischen
+geologischer
+geologisches
+geometrisch
+geometrische
+geometrischem
+geometrischen
+geometrischer
+geometrisches
+geopfert
+geopferte
+geopfertem
+geopferten
+geopferter
+geopfertes
+geophysikalisch
+geophysikalische
+geophysikalischem
+geophysikalischen
+geophysikalischer
+geophysikalisches
+geopolitisch
+geopolitische
+geopolitischem
+geopolitischen
+geopolitischer
+geopolitisches
+geordert
+georderte
+geordertem
+georderten
+georderter
+geordertes
+geordnet
+geordnete
+geordnetem
+geordneten
+geordneter
+geordnetes
+geortet
+geortete
+geortetem
+georteten
+georteter
+geortetes
+geostationär
+geostationäre
+geostationärem
+geostationären
+geostationärer
+geostationäres
+gepaart
+gepachtet
+gepachtete
+gepachtetem
+gepachteten
+gepachteter
+gepachtetes
+gepackt
+gepackte
+gepacktem
+gepackten
+gepackter
+gepacktes
+gepaddelt
+gepanscht
+gepanschte
+gepanschtem
+gepanschten
+gepanschter
+gepanschtes
+gepanzert
+gepanzerte
+gepanzertem
+gepanzerten
+gepanzerter
+gepanzertes
+geparkt
+geparkte
+geparktem
+geparkten
+geparkter
+geparktes
+geparsed
+gepasst
+gepatzt
+gepeichert
+gepeicherte
+gepeichertem
+gepeicherten
+gepeicherter
+gepeichertes
+gepeilt
+gepeinigt
+gepeinigte
+gepeinigtem
+gepeinigten
+gepeinigter
+gepeinigtes
+gepfeffert
+gepfefferte
+gepfeffertem
+gepfefferten
+gepfefferter
+gepfeffertes
+gepfiffen
+gepfiffene
+gepfiffenem
+gepfiffenen
+gepfiffener
+gepfiffenes
+gepflanzt
+gepflanzte
+gepflanztem
+gepflanzten
+gepflanzter
+gepflanztes
+gepflastert
+gepflasterte
+gepflastertem
+gepflasterten
+gepflasterter
+gepflastertes
+gepflegt
+gepflegte
+gepflegtem
+gepflegten
+gepflegter
+gepflegtere
+gepflegterem
+gepflegteren
+gepflegterer
+gepflegteres
+gepflegtes
+gepflegteste
+gepflegtestem
+gepflegtesten
+gepflegtester
+gepflegtestes
+gepflückt
+gepflückte
+gepflücktem
+gepflückten
+gepflückter
+gepflücktes
+gepflügt
+gepflügte
+gepflügtem
+gepflügten
+gepflügter
+gepflügtes
+gepfändet
+gepfändete
+gepfändetem
+gepfändeten
+gepfändeter
+gepfändetes
+gepickt
+gepiesackt
+gepiesackte
+gepiesacktem
+gepiesackten
+gepiesackter
+gepiesacktes
+gepinselt
+geplagt
+geplagte
+geplagtem
+geplagten
+geplagter
+geplagtes
+geplant
+geplante
+geplantem
+geplanten
+geplanter
+geplantes
+geplantscht
+geplatzt
+geplatzte
+geplatztem
+geplatzten
+geplatzter
+geplatztes
+geplaudert
+geplättet
+geplättete
+geplättetem
+geplätteten
+geplätteter
+geplättetes
+geplündert
+geplünderte
+geplündertem
+geplünderten
+geplünderter
+geplündertes
+gepokert
+gepolstert
+gepolsterte
+gepolstertem
+gepolsterten
+gepolsterter
+gepolstertes
+gepolt
+gepolte
+gepoltem
+gepolten
+gepolter
+gepoltes
+geprahlt
+geprallen
+geprallt
+geprallte
+gepralltem
+geprallten
+geprallter
+gepralltes
+geprasst
+gepredigt
+geprellt
+geprellte
+geprelltem
+geprellten
+geprellter
+geprelltes
+gepresst
+gepresste
+gepresstem
+gepressten
+gepresster
+gepresstes
+gepriesen
+gepriesene
+gepriesenem
+gepriesenen
+gepriesener
+gepriesenes
+geprobt
+geprobte
+geprobtem
+geprobten
+geprobter
+geprobtes
+geprotzt
+geprägt
+geprägte
+geprägtem
+geprägten
+geprägter
+geprägtes
+geprüft
+geprüfte
+geprüftem
+geprüften
+geprüfter
+geprüftes
+geprügelt
+geprügelte
+geprügeltem
+geprügelten
+geprügelter
+geprügeltes
+gepuffert
+gepufferte
+gepuffertem
+gepufferten
+gepufferter
+gepuffertes
+gepumpt
+gepumpte
+gepumptem
+gepumpten
+gepumpter
+gepumptes
+gepunktet
+gepunktete
+gepunktetem
+gepunkteten
+gepunkteter
+gepunktetes
+gepuscht
+gepuschte
+gepuschtem
+gepuschten
+gepuschter
+gepuschtes
+gepusht
+gepushte
+gepushtem
+gepushten
+gepushter
+gepushtes
+geputscht
+geputzt
+geputzte
+geputztem
+geputzten
+geputzter
+geputztes
+gequetscht
+gequetschte
+gequetschtem
+gequetschten
+gequetschter
+gequetschtes
+gequietscht
+gequollen
+gequollene
+gequollenem
+gequollenen
+gequollener
+gequollenes
+gequält
+gequälte
+gequältem
+gequälten
+gequälter
+gequältes
+gerad
+gerade
+geradeaus
+geradehin
+geradelt
+geradem
+geraden
+geradenwegs
+gerader
+gerades
+geradewegs
+geradezu
+geradlinig
+geradlinige
+geradlinigem
+geradlinigen
+geradliniger
+geradliniges
+gerafft
+geraffte
+gerafftem
+gerafften
+geraffter
+gerafftes
+geragt
+gerahmt
+gerahmte
+gerahmtem
+gerahmten
+gerahmter
+gerahmtes
+gerammelt
+gerammt
+gerammte
+gerammtem
+gerammten
+gerammter
+gerammtes
+gerannt
+geraschelt
+gerasselt
+gerastet
+gerate
+geraten
+geratene
+geratenem
+geratenen
+geratener
+geratenes
+geratet
+geraubt
+geraubte
+geraubtem
+geraubten
+geraubter
+geraubtes
+geraucht
+gerauchte
+gerauchtem
+gerauchten
+gerauchter
+gerauchtes
+geraum
+geraume
+geraumem
+geraumen
+geraumer
+geraumes
+geraunt
+geraunte
+gerauntem
+geraunten
+geraunter
+gerauntes
+gerbe
+gerben
+gerbend
+gerbende
+gerbendem
+gerbenden
+gerbender
+gerbendes
+gerbst
+gerbt
+gerbte
+gerbten
+gerbtest
+gerbtet
+gerechnet
+gerechnete
+gerechnetem
+gerechneten
+gerechneter
+gerechnetes
+gerecht
+gerechte
+gerechtem
+gerechten
+gerechter
+gerechtere
+gerechterem
+gerechteren
+gerechterer
+gerechteres
+gerechtes
+gerechteste
+gerechtestem
+gerechtesten
+gerechtester
+gerechtestes
+gerechtfertigt
+gerechtfertigte
+gerechtfertigtem
+gerechtfertigten
+gerechtfertigter
+gerechtfertigtere
+gerechtfertigterem
+gerechtfertigteren
+gerechtfertigterer
+gerechtfertigteres
+gerechtfertigtes
+gerechtfertigteste
+gerechtfertigtestem
+gerechtfertigtesten
+gerechtfertigtester
+gerechtfertigtestes
+gereckt
+geredet
+geregelt
+geregelte
+geregeltem
+geregelten
+geregelter
+geregeltes
+geregnet
+gereiche
+gereichen
+gereichend
+gereichende
+gereichendem
+gereichenden
+gereichender
+gereichendes
+gereichst
+gereicht
+gereichte
+gereichtem
+gereichten
+gereichter
+gereichtes
+gereichtest
+gereichtet
+gereift
+gereifte
+gereiftem
+gereiften
+gereifter
+gereiftes
+gereimt
+gereimte
+gereimtem
+gereimten
+gereimter
+gereimtes
+gereinigt
+gereinigte
+gereinigtem
+gereinigten
+gereinigter
+gereinigtes
+gereist
+gereiste
+gereistem
+gereisten
+gereister
+gereistes
+gereizt
+gereizte
+gereiztem
+gereizten
+gereizter
+gereiztere
+gereizterem
+gereizteren
+gereizterer
+gereizteres
+gereiztes
+gereizteste
+gereiztestem
+gereiztesten
+gereiztester
+gereiztestes
+gerempelt
+gerettet
+gerettete
+gerettetem
+geretteten
+geretteter
+gerettetes
+gerichtet
+gerichtete
+gerichtetem
+gerichteten
+gerichteter
+gerichtetes
+gerichtlich
+gerichtliche
+gerichtlichem
+gerichtlichen
+gerichtlicher
+gerichtliches
+gerieben
+geriebene
+geriebenem
+geriebenen
+geriebener
+geriebenes
+geriet
+gerieten
+gerietest
+gerietet
+gerietst
+gerillt
+gerillte
+gerilltem
+gerillten
+gerillter
+gerilltes
+gering
+geringe
+geringem
+geringen
+geringer
+geringere
+geringerem
+geringeren
+geringerer
+geringeres
+geringes
+geringfügig
+geringfügige
+geringfügigem
+geringfügigen
+geringfügiger
+geringfügiges
+geringpreisig
+geringpreisige
+geringpreisigem
+geringpreisigen
+geringpreisiger
+geringpreisiges
+geringschätzig
+geringschätzige
+geringschätzigem
+geringschätzigen
+geringschätziger
+geringschätziges
+geringste
+geringstem
+geringsten
+geringster
+geringstes
+geringwertig
+geringwertige
+geringwertigem
+geringwertigen
+geringwertiger
+geringwertiges
+gerinne
+gerinnen
+gerinnend
+gerinnende
+gerinnendem
+gerinnenden
+gerinnender
+gerinnendes
+gerinnst
+gerinnt
+gerissen
+gerissene
+gerissenem
+gerissenen
+gerissener
+gerissenes
+geritten
+gerittene
+gerittenem
+gerittenen
+gerittener
+gerittenes
+geritzt
+geritzte
+geritztem
+geritzten
+geritzter
+geritztes
+germanisch
+germanische
+germanischem
+germanischen
+germanischer
+germanisches
+gern
+gerne
+gerochen
+gerochene
+gerochenem
+gerochenen
+gerochener
+gerochenes
+gerodet
+gerodete
+gerodetem
+gerodeten
+gerodeter
+gerodetes
+gerollt
+gerollte
+gerolltem
+gerollten
+gerollter
+gerolltes
+geronnen
+geronnene
+geronnenem
+geronnenen
+geronnener
+geronnenes
+gerontologisch
+gerontologische
+gerontologischem
+gerontologischen
+gerontologischer
+gerontologisches
+gertenschlank
+gertenschlanke
+gertenschlankem
+gertenschlanken
+gertenschlanker
+gertenschlankes
+geruchlos
+geruchlose
+geruchlosem
+geruchlosen
+geruchloser
+geruchloses
+geruchsfrei
+geruchsfreie
+geruchsfreiem
+geruchsfreien
+geruchsfreier
+geruchsfreies
+geruchtilgend
+geruchtilgende
+geruchtilgendem
+geruchtilgenden
+geruchtilgender
+geruchtilgendes
+gerudert
+gerufen
+gerufene
+gerufenem
+gerufenen
+gerufener
+gerufenes
+geruhe
+geruhen
+geruhend
+geruhende
+geruhendem
+geruhenden
+geruhender
+geruhendes
+geruhsam
+geruhsame
+geruhsamem
+geruhsamen
+geruhsamer
+geruhsamere
+geruhsamerem
+geruhsameren
+geruhsamerer
+geruhsameres
+geruhsames
+geruhsamste
+geruhsamstem
+geruhsamsten
+geruhsamster
+geruhsamstes
+geruhst
+geruht
+geruhte
+geruhten
+geruhtest
+geruhtet
+gerundet
+gerundete
+gerundetem
+gerundeten
+gerundeter
+gerundetes
+gerungen
+gerungene
+gerungenem
+gerungenen
+gerungener
+gerungenes
+gerunzelt
+gerunzelte
+gerunzeltem
+gerunzelten
+gerunzelter
+gerunzeltes
+gerupft
+gerupfte
+gerupftem
+gerupften
+gerupfter
+gerupftes
+gerutscht
+gerutschte
+gerutschtem
+gerutschten
+gerutschter
+gerutschtes
+gerächt
+gerächte
+gerächtem
+gerächten
+gerächter
+gerächtes
+gerändelt
+gerändelte
+gerändeltem
+gerändelten
+gerändelter
+gerändeltes
+gerät
+gerätetechnisch
+gerätetechnische
+gerätetechnischem
+gerätetechnischen
+gerätetechnischer
+gerätetechnisches
+gerätselt
+gerätst
+geräuchert
+geräucherte
+geräuchertem
+geräucherten
+geräucherter
+geräuchertes
+geräumig
+geräumige
+geräumigem
+geräumigen
+geräumiger
+geräumigere
+geräumigerem
+geräumigeren
+geräumigerer
+geräumigeres
+geräumiges
+geräumigste
+geräumigstem
+geräumigsten
+geräumigster
+geräumigstes
+geräumt
+geräumte
+geräumtem
+geräumten
+geräumter
+geräumtes
+geräuschdämpfend
+geräuschdämpfende
+geräuschdämpfendem
+geräuschdämpfenden
+geräuschdämpfender
+geräuschdämpfendes
+geräuschlos
+geräuschlose
+geräuschlosem
+geräuschlosen
+geräuschloser
+geräuschlosere
+geräuschloserem
+geräuschloseren
+geräuschloserer
+geräuschloseres
+geräuschloses
+geräuschloseste
+geräuschlosestem
+geräuschlosesten
+geräuschlosester
+geräuschlosestes
+geräuschvoll
+geräuschvolle
+geräuschvollem
+geräuschvollen
+geräuschvoller
+geräuschvollere
+geräuschvollerem
+geräuschvolleren
+geräuschvollerer
+geräuschvolleres
+geräuschvolles
+geräuschvollste
+geräuschvollstem
+geräuschvollsten
+geräuschvollster
+geräuschvollstes
+geräuschärmer
+geräuschärmere
+geräuschärmerem
+geräuschärmeren
+geräuschärmerer
+geräuschärmeres
+geräuspert
+geröchelt
+geröchelte
+geröcheltem
+geröchelten
+geröchelter
+geröcheltes
+geröntgt
+geröntgte
+geröntgtem
+geröntgten
+geröntgter
+geröntgtes
+geröstet
+geröstete
+geröstetem
+gerösteten
+gerösteter
+geröstetes
+gerötet
+gerötete
+gerötetem
+geröteten
+geröteter
+gerötetes
+gerüchtweise
+gerückt
+gerückte
+gerücktem
+gerückten
+gerückter
+gerücktes
+gerügt
+gerügte
+gerügtem
+gerügten
+gerügter
+gerügtes
+gerühmt
+gerühmte
+gerühmtem
+gerühmten
+gerühmter
+gerühmtes
+gerührt
+gerührte
+gerührtem
+gerührten
+gerührter
+gerührtes
+gerüstet
+gerüstete
+gerüstetem
+gerüsteten
+gerüsteter
+gerüstetes
+gerüttelt
+gerüttelte
+gerütteltem
+gerüttelten
+gerüttelter
+gerütteltes
+gesackt
+gesackte
+gesacktem
+gesackten
+gesackter
+gesacktes
+gesagt
+gesagte
+gesagtem
+gesagten
+gesagter
+gesagtes
+gesalbt
+gesalbte
+gesalbtem
+gesalbten
+gesalbter
+gesalbtes
+gesalzen
+gesalzene
+gesalzenem
+gesalzenen
+gesalzener
+gesalzenes
+gesammelt
+gesammelte
+gesammeltem
+gesammelten
+gesammelter
+gesammeltes
+gesamt
+gesamtaktiv
+gesamtaktive
+gesamtaktivem
+gesamtaktiven
+gesamtaktiver
+gesamtaktives
+gesamte
+gesamtem
+gesamten
+gesamter
+gesamtes
+gesamthaft
+gesamtheitlich
+gesamtheitliche
+gesamtheitlichem
+gesamtheitlichen
+gesamtheitlicher
+gesamtheitliches
+gesamtkoreanisch
+gesamtkoreanische
+gesamtkoreanischem
+gesamtkoreanischen
+gesamtkoreanischer
+gesamtkoreanisches
+gesamtskandinavisch
+gesamtskandinavische
+gesamtskandinavischem
+gesamtskandinavischen
+gesamtskandinavischer
+gesamtskandinavisches
+gesamtstaatlich
+gesamtstaatliche
+gesamtstaatlichem
+gesamtstaatlichen
+gesamtstaatlicher
+gesamtstaatliches
+gesamtwirtschaftlich
+gesamtwirtschaftliche
+gesamtwirtschaftlichem
+gesamtwirtschaftlichen
+gesamtwirtschaftlicher
+gesamtwirtschaftliches
+gesandt
+gesandte
+gesandtem
+gesandten
+gesandter
+gesandtes
+gesanglich
+gesangliche
+gesanglichem
+gesanglichen
+gesanglicher
+gesangliches
+gesattelt
+gesattelte
+gesatteltem
+gesattelten
+gesattelter
+gesatteltes
+gesaugt
+gesaugte
+gesaugtem
+gesaugten
+gesaugter
+gesaugtes
+gesaust
+gesauste
+gesaustem
+gesausten
+gesauster
+gesaustes
+geschabt
+geschabte
+geschabtem
+geschabten
+geschabter
+geschabtes
+geschachtelt
+geschachtelte
+geschachteltem
+geschachtelten
+geschachtelter
+geschachteltes
+geschadet
+geschadete
+geschadetem
+geschadeten
+geschadeter
+geschadetes
+geschaffen
+geschaffene
+geschaffenem
+geschaffenen
+geschaffener
+geschaffenes
+geschafft
+geschaffte
+geschafftem
+geschafften
+geschaffter
+geschafftes
+geschah
+geschahen
+geschallt
+geschallte
+geschalltem
+geschallten
+geschallter
+geschalltes
+geschaltet
+geschaltete
+geschaltetem
+geschalteten
+geschalteter
+geschaltetes
+geschamig
+geschamige
+geschamigem
+geschamigen
+geschamiger
+geschamiges
+gescharrt
+gescharrte
+gescharrtem
+gescharrten
+gescharrter
+gescharrtes
+geschart
+gescharte
+geschartem
+gescharten
+gescharter
+geschartes
+geschaudert
+geschauderte
+geschaudertem
+geschauderten
+geschauderter
+geschaudertes
+geschauert
+geschauerte
+geschauertem
+geschauerten
+geschauerter
+geschauertes
+geschaufelt
+geschaufelte
+geschaufeltem
+geschaufelten
+geschaufelter
+geschaufeltes
+geschaukelt
+geschaukelte
+geschaukeltem
+geschaukelten
+geschaukelter
+geschaukeltes
+geschaut
+geschaute
+geschautem
+geschauten
+geschauter
+geschautes
+gescheffelt
+gescheffelte
+gescheffeltem
+gescheffelten
+gescheffelter
+gescheffeltes
+geschehen
+geschehene
+geschehenem
+geschehenen
+geschehener
+geschehenes
+gescheit
+gescheite
+gescheitelt
+gescheitelte
+gescheiteltem
+gescheitelten
+gescheitelter
+gescheiteltes
+gescheitem
+gescheiten
+gescheiter
+gescheitere
+gescheiterem
+gescheiteren
+gescheiterer
+gescheiteres
+gescheitert
+gescheiterte
+gescheitertem
+gescheiterten
+gescheiterter
+gescheitertes
+gescheites
+gescheiteste
+gescheitestem
+gescheitesten
+gescheitester
+gescheitestes
+geschellt
+geschellte
+geschelltem
+geschellten
+geschellter
+geschelltes
+geschenkt
+geschenkte
+geschenktem
+geschenkten
+geschenkter
+geschenktes
+gescheppert
+geschepperte
+gescheppertem
+geschepperten
+geschepperter
+gescheppertes
+geschert
+gescherte
+geschertem
+gescherten
+gescherter
+geschertes
+gescherzt
+gescherzte
+gescherztem
+gescherzten
+gescherzter
+gescherztes
+gescheucht
+gescheuchte
+gescheuchtem
+gescheuchten
+gescheuchter
+gescheuchtes
+gescheuert
+gescheuerte
+gescheuertem
+gescheuerten
+gescheuerter
+gescheuertes
+gescheut
+gescheute
+gescheutem
+gescheuten
+gescheuter
+gescheutes
+geschichtet
+geschichtete
+geschichtetem
+geschichteten
+geschichteter
+geschichtetes
+geschichtlich
+geschichtliche
+geschichtlichem
+geschichtlichen
+geschichtlicher
+geschichtliches
+geschichtslos
+geschichtslose
+geschichtslosem
+geschichtslosen
+geschichtsloser
+geschichtsloses
+geschickt
+geschickte
+geschicktem
+geschickten
+geschickter
+geschicktere
+geschickterem
+geschickteren
+geschickterer
+geschickteres
+geschicktes
+geschickteste
+geschicktestem
+geschicktesten
+geschicktester
+geschicktestes
+geschieden
+geschiedene
+geschiedenem
+geschiedenen
+geschiedener
+geschiedenes
+geschieht
+geschielt
+geschielte
+geschieltem
+geschielten
+geschielter
+geschieltes
+geschienen
+geschienene
+geschienenem
+geschienenen
+geschienener
+geschienenes
+geschient
+geschiente
+geschientem
+geschienten
+geschienter
+geschientes
+geschifft
+geschiffte
+geschifftem
+geschifften
+geschiffter
+geschifftes
+geschildert
+geschilderte
+geschildertem
+geschilderten
+geschilderter
+geschildertes
+geschillert
+geschillerte
+geschillertem
+geschillerten
+geschillerter
+geschillertes
+geschimmelt
+geschimmelte
+geschimmeltem
+geschimmelten
+geschimmelter
+geschimmeltes
+geschimmert
+geschimmerte
+geschimmertem
+geschimmerten
+geschimmerter
+geschimmertes
+geschimpft
+geschimpfte
+geschimpftem
+geschimpften
+geschimpfter
+geschimpftes
+geschirmt
+geschirmte
+geschirmtem
+geschirmten
+geschirmter
+geschirmtes
+geschissen
+geschissene
+geschissenem
+geschissenen
+geschissener
+geschissenes
+geschlachtet
+geschlachtete
+geschlachtetem
+geschlachteten
+geschlachteter
+geschlachtetes
+geschlackt
+geschlackte
+geschlacktem
+geschlackten
+geschlackter
+geschlacktes
+geschlafen
+geschlafene
+geschlafenem
+geschlafenen
+geschlafener
+geschlafenes
+geschlagen
+geschlagene
+geschlagenem
+geschlagenen
+geschlagener
+geschlagenes
+geschlaucht
+geschlauchte
+geschlauchtem
+geschlauchten
+geschlauchter
+geschlauchtes
+geschlechtlich
+geschlechtliche
+geschlechtlichem
+geschlechtlichen
+geschlechtlicher
+geschlechtliches
+geschlechtsspezifisch
+geschlechtsspezifische
+geschlechtsspezifischem
+geschlechtsspezifischen
+geschlechtsspezifischer
+geschlechtsspezifisches
+geschleckt
+geschleckte
+geschlecktem
+geschleckten
+geschleckter
+geschlecktes
+geschleift
+geschleifte
+geschleiftem
+geschleiften
+geschleifter
+geschleiftes
+geschlendert
+geschlenkert
+geschleppt
+geschleppte
+geschlepptem
+geschleppten
+geschleppter
+geschlepptes
+geschleudert
+geschleuderte
+geschleudertem
+geschleuderten
+geschleuderter
+geschleudertes
+geschleust
+geschlichen
+geschlichtet
+geschlichtete
+geschlichtetem
+geschlichteten
+geschlichteter
+geschlichtetes
+geschliffen
+geschliffene
+geschliffenem
+geschliffenen
+geschliffener
+geschliffenes
+geschlossen
+geschlossene
+geschlossenem
+geschlossenen
+geschlossener
+geschlossenes
+geschlottert
+geschluckt
+geschluckte
+geschlucktem
+geschluckten
+geschluckter
+geschlucktes
+geschlummert
+geschlungen
+geschlungene
+geschlungenem
+geschlungenen
+geschlungener
+geschlungenes
+geschlurft
+geschlussfolgert
+geschlängelt
+geschlängelte
+geschlängeltem
+geschlängelten
+geschlängelter
+geschlängeltes
+geschlüpft
+geschlüpfte
+geschlüpftem
+geschlüpften
+geschlüpfter
+geschlüpftes
+geschlürft
+geschlürfte
+geschlürftem
+geschlürften
+geschlürfter
+geschlürftes
+geschmackfrei
+geschmackfreie
+geschmackfreiem
+geschmackfreien
+geschmackfreier
+geschmackfreies
+geschmacklich
+geschmackliche
+geschmacklichem
+geschmacklichen
+geschmacklicher
+geschmackliches
+geschmacklos
+geschmacklose
+geschmacklosem
+geschmacklosen
+geschmackloser
+geschmacklosere
+geschmackloserem
+geschmackloseren
+geschmackloserer
+geschmackloseres
+geschmackloses
+geschmackloseste
+geschmacklosestem
+geschmacklosesten
+geschmacklosester
+geschmacklosestes
+geschmackvoll
+geschmackvolle
+geschmackvollem
+geschmackvollen
+geschmackvoller
+geschmackvollere
+geschmackvollerem
+geschmackvolleren
+geschmackvollerer
+geschmackvolleres
+geschmackvolles
+geschmackvollste
+geschmackvollstem
+geschmackvollsten
+geschmackvollster
+geschmackvollstes
+geschmatzt
+geschmeckt
+geschmeichelt
+geschmeichelte
+geschmeicheltem
+geschmeichelten
+geschmeichelter
+geschmeicheltes
+geschmeidig
+geschmeidige
+geschmeidigem
+geschmeidigen
+geschmeidiger
+geschmeidiges
+geschmerzt
+geschmettert
+geschmetterte
+geschmettertem
+geschmetterten
+geschmetterter
+geschmettertes
+geschmiedet
+geschmiedete
+geschmiedetem
+geschmiedeten
+geschmiedeter
+geschmiedetes
+geschmiegt
+geschmiert
+geschmierte
+geschmiertem
+geschmierten
+geschmierter
+geschmiertes
+geschminkt
+geschminkte
+geschminktem
+geschminkten
+geschminkter
+geschminktes
+geschmirgelt
+geschmirgelte
+geschmirgeltem
+geschmirgelten
+geschmirgelter
+geschmirgeltes
+geschmissen
+geschmissene
+geschmissenem
+geschmissenen
+geschmissener
+geschmissenes
+geschmolzen
+geschmolzene
+geschmolzenem
+geschmolzenen
+geschmolzener
+geschmolzenes
+geschmort
+geschmorte
+geschmortem
+geschmorten
+geschmorter
+geschmortes
+geschmuggelt
+geschmuggelte
+geschmuggeltem
+geschmuggelten
+geschmuggelter
+geschmuggeltes
+geschmunzelt
+geschmäht
+geschmähte
+geschmähtem
+geschmähten
+geschmähter
+geschmähtes
+geschmälert
+geschmälerte
+geschmälertem
+geschmälerten
+geschmälerter
+geschmälertes
+geschmückt
+geschmückte
+geschmücktem
+geschmückten
+geschmückter
+geschmücktes
+geschnallt
+geschnallte
+geschnalltem
+geschnallten
+geschnallter
+geschnalltes
+geschnappt
+geschnarcht
+geschnattert
+geschnauft
+geschneidert
+geschneiderte
+geschneidertem
+geschneiderten
+geschneiderter
+geschneidertes
+geschneit
+geschnellt
+geschniegelt
+geschniegelte
+geschniegeltem
+geschniegelten
+geschniegelter
+geschniegeltes
+geschnitten
+geschnittene
+geschnittenem
+geschnittenen
+geschnittener
+geschnittenes
+geschnitzelt
+geschnitzelte
+geschnitzeltem
+geschnitzelten
+geschnitzelter
+geschnitzeltes
+geschnitzt
+geschnitzte
+geschnitztem
+geschnitzten
+geschnitzter
+geschnitztes
+geschnorrt
+geschnorrte
+geschnorrtem
+geschnorrten
+geschnorrter
+geschnorrtes
+geschnupft
+geschnupfte
+geschnupftem
+geschnupften
+geschnupfter
+geschnupftes
+geschnurrt
+geschnäuzt
+geschnörkelt
+geschnörkelte
+geschnörkeltem
+geschnörkelten
+geschnörkelter
+geschnörkeltes
+geschnüffelt
+geschnürt
+geschnürte
+geschnürtem
+geschnürten
+geschnürter
+geschnürtes
+geschoben
+geschobene
+geschobenem
+geschobenen
+geschobener
+geschobenes
+geschockt
+geschockte
+geschocktem
+geschockten
+geschockter
+geschocktes
+gescholten
+gescholtene
+gescholtenem
+gescholtenen
+gescholtener
+gescholtenes
+geschont
+geschonte
+geschontem
+geschonten
+geschonter
+geschontes
+geschossen
+geschossene
+geschossenem
+geschossenen
+geschossener
+geschossenes
+geschrammt
+geschrammte
+geschrammtem
+geschrammten
+geschrammter
+geschrammtes
+geschraubt
+geschraubte
+geschraubtem
+geschraubten
+geschraubter
+geschraubtes
+geschreckt
+geschrieben
+geschriebene
+geschriebenem
+geschriebenen
+geschriebener
+geschriebenes
+geschrieen
+geschrieene
+geschrieenem
+geschrieenen
+geschrieener
+geschrieenes
+geschrien
+geschriene
+geschrienem
+geschrienen
+geschriener
+geschrienes
+geschritt
+geschritte
+geschrittem
+geschritten
+geschritter
+geschrittes
+geschrubbt
+geschrubbte
+geschrubbtem
+geschrubbten
+geschrubbter
+geschrubbtes
+geschrumpft
+geschrumpfte
+geschrumpftem
+geschrumpften
+geschrumpfter
+geschrumpftes
+geschränkt
+geschränkte
+geschränktem
+geschränkten
+geschränkter
+geschränktes
+geschröpft
+geschröpfte
+geschröpftem
+geschröpften
+geschröpfter
+geschröpftes
+geschuldet
+geschuldete
+geschuldetem
+geschuldeten
+geschuldeter
+geschuldetes
+geschult
+geschulte
+geschultem
+geschulten
+geschulter
+geschultes
+geschunden
+geschundene
+geschundenem
+geschundenen
+geschundener
+geschundenes
+geschuppt
+geschuppte
+geschupptem
+geschuppten
+geschuppter
+geschupptes
+geschustert
+geschusterte
+geschustertem
+geschusterten
+geschusterter
+geschustertes
+geschwabbelt
+geschwankt
+geschwappt
+geschwatzt
+geschwefelt
+geschwefelte
+geschwefeltem
+geschwefelten
+geschwefelter
+geschwefeltes
+geschweift
+geschweifte
+geschweiftem
+geschweiften
+geschweifter
+geschweiftes
+geschweige
+geschweißt
+geschweißte
+geschweißtem
+geschweißten
+geschweißter
+geschweißtes
+geschwelgt
+geschwemmt
+geschwenkt
+geschwenkte
+geschwenktem
+geschwenkten
+geschwenkter
+geschwenktes
+geschwiegen
+geschwiegene
+geschwiegenem
+geschwiegenen
+geschwiegener
+geschwiegenes
+geschwind
+geschwinde
+geschwindem
+geschwinden
+geschwinder
+geschwindes
+geschwirrt
+geschwisterlos
+geschwisterlose
+geschwisterlosem
+geschwisterlosen
+geschwisterloser
+geschwisterloses
+geschwitzt
+geschwollen
+geschwollene
+geschwollenem
+geschwollenen
+geschwollener
+geschwollenes
+geschwommen
+geschwommene
+geschwommenem
+geschwommenen
+geschwommener
+geschwommenes
+geschworen
+geschworene
+geschworenem
+geschworenen
+geschworener
+geschworenes
+geschwunden
+geschwundene
+geschwundenem
+geschwundenen
+geschwundener
+geschwundenes
+geschwungen
+geschwungene
+geschwungenem
+geschwungenen
+geschwungener
+geschwungenes
+geschwächt
+geschwächte
+geschwächtem
+geschwächten
+geschwächter
+geschwächtes
+geschwängert
+geschwängerte
+geschwängertem
+geschwängerten
+geschwängerter
+geschwängertes
+geschwänzelt
+geschwänzt
+geschwänzte
+geschwänztem
+geschwänzten
+geschwänzter
+geschwänztes
+geschwärzt
+geschwärzte
+geschwärztem
+geschwärzten
+geschwärzter
+geschwärztes
+geschwätzig
+geschwätzige
+geschwätzigem
+geschwätzigen
+geschwätziger
+geschwätzigere
+geschwätzigerem
+geschwätzigeren
+geschwätzigerer
+geschwätzigeres
+geschwätziges
+geschwätzigste
+geschwätzigstem
+geschwätzigsten
+geschwätzigster
+geschwätzigstes
+geschädigt
+geschädigte
+geschädigtem
+geschädigten
+geschädigter
+geschädigtes
+geschäftig
+geschäftige
+geschäftigem
+geschäftigen
+geschäftiger
+geschäftigere
+geschäftigerem
+geschäftigeren
+geschäftigerer
+geschäftigeres
+geschäftiges
+geschäftigste
+geschäftigstem
+geschäftigsten
+geschäftigster
+geschäftigstes
+geschäftlich
+geschäftliche
+geschäftlichem
+geschäftlichen
+geschäftlicher
+geschäftliches
+geschäftsführend
+geschäftsführende
+geschäftsführendem
+geschäftsführenden
+geschäftsführender
+geschäftsführendes
+geschäftskundig
+geschäftskundige
+geschäftskundigem
+geschäftskundigen
+geschäftskundiger
+geschäftskundigere
+geschäftskundigerem
+geschäftskundigeren
+geschäftskundigerer
+geschäftskundigeres
+geschäftskundiges
+geschäftskundigste
+geschäftskundigstem
+geschäftskundigsten
+geschäftskundigster
+geschäftskundigstes
+geschäftslos
+geschäftsmäßig
+geschäftsmäßige
+geschäftsmäßigem
+geschäftsmäßigen
+geschäftsmäßiger
+geschäftsmäßiges
+geschäftspolitisch
+geschäftspolitische
+geschäftspolitischem
+geschäftspolitischen
+geschäftspolitischer
+geschäftspolitisches
+geschäftstüchtig
+geschäftstüchtige
+geschäftstüchtigem
+geschäftstüchtigen
+geschäftstüchtiger
+geschäftstüchtigere
+geschäftstüchtigerem
+geschäftstüchtigeren
+geschäftstüchtigerer
+geschäftstüchtigeres
+geschäftstüchtiges
+geschäftstüchtigste
+geschäftstüchtigstem
+geschäftstüchtigsten
+geschäftstüchtigster
+geschäftstüchtigstes
+geschähe
+geschähen
+geschäkert
+geschäkerte
+geschäkertem
+geschäkerten
+geschäkerter
+geschäkertes
+geschält
+geschälte
+geschältem
+geschälten
+geschälter
+geschältes
+geschämig
+geschämige
+geschämigem
+geschämigen
+geschämiger
+geschämiges
+geschämt
+geschämte
+geschämtem
+geschämten
+geschämter
+geschämtes
+geschändet
+geschändete
+geschändetem
+geschändeten
+geschändeter
+geschändetes
+geschärft
+geschärfte
+geschärftem
+geschärften
+geschärfter
+geschärftes
+geschätzt
+geschätzte
+geschätztem
+geschätzten
+geschätzter
+geschätztes
+geschäumt
+geschäumte
+geschäumtem
+geschäumten
+geschäumter
+geschäumtes
+geschönt
+geschönte
+geschöntem
+geschönten
+geschönter
+geschöntes
+geschöpft
+geschöpfte
+geschöpftem
+geschöpften
+geschöpfter
+geschöpftes
+geschürft
+geschürfte
+geschürftem
+geschürften
+geschürfter
+geschürftes
+geschürt
+geschürte
+geschürtem
+geschürten
+geschürter
+geschürtes
+geschürzt
+geschüttelt
+geschüttelte
+geschütteltem
+geschüttelten
+geschüttelter
+geschütteltes
+geschüttet
+geschüttete
+geschüttetem
+geschütteten
+geschütteter
+geschüttetes
+geschützt
+geschützte
+geschütztem
+geschützten
+geschützter
+geschütztes
+gesegelt
+gesegnet
+gesegnete
+gesegnetem
+gesegneten
+gesegneter
+gesegnetes
+gesehen
+gesehene
+gesehenem
+gesehenen
+gesehener
+gesehenes
+gesehnt
+gesellig
+gesellige
+geselligem
+geselligen
+geselliger
+geselligere
+geselligerem
+geselligeren
+geselligerer
+geselligeres
+geselliges
+geselligste
+geselligstem
+geselligsten
+geselligster
+geselligstes
+gesellschaftlich
+gesellschaftliche
+gesellschaftlichem
+gesellschaftlichen
+gesellschaftlicher
+gesellschaftliches
+gesellschaftsfähig
+gesellschaftsfähige
+gesellschaftsfähigem
+gesellschaftsfähigen
+gesellschaftsfähiger
+gesellschaftsfähiges
+gesellschaftskritisch
+gesellschaftskritische
+gesellschaftskritischem
+gesellschaftskritischen
+gesellschaftskritischer
+gesellschaftskritisches
+gesellschaftspolitisch
+gesellschaftspolitische
+gesellschaftspolitischem
+gesellschaftspolitischen
+gesellschaftspolitischer
+gesellschaftspolitisches
+gesellt
+gesellte
+geselltem
+gesellten
+gesellter
+geselltes
+gesendet
+gesendete
+gesendetem
+gesendeten
+gesendeter
+gesendetes
+gesengt
+gesengte
+gesengtem
+gesengten
+gesengter
+gesengtes
+gesenkt
+gesenkte
+gesenktem
+gesenkten
+gesenkter
+gesenktes
+gesessen
+gesessene
+gesessenem
+gesessenen
+gesessener
+gesessenes
+gesetzeskonform
+gesetzeskonforme
+gesetzeskonformem
+gesetzeskonformen
+gesetzeskonformer
+gesetzeskonformes
+gesetzgebend
+gesetzgebende
+gesetzgebendem
+gesetzgebenden
+gesetzgebender
+gesetzgebendes
+gesetzgeberisch
+gesetzgeberische
+gesetzgeberischem
+gesetzgeberischen
+gesetzgeberischer
+gesetzgeberisches
+gesetzlich
+gesetzliche
+gesetzlichem
+gesetzlichen
+gesetzlicher
+gesetzliches
+gesetzlos
+gesetzlose
+gesetzlosem
+gesetzlosen
+gesetzloser
+gesetzloses
+gesetzmäßig
+gesetzmäßige
+gesetzmäßigem
+gesetzmäßigen
+gesetzmäßiger
+gesetzmäßiges
+gesetzt
+gesetzte
+gesetztem
+gesetzten
+gesetzter
+gesetztes
+gesetzwidrig
+gesetzwidrige
+gesetzwidrigem
+gesetzwidrigen
+gesetzwidriger
+gesetzwidriges
+geseufzt
+gesichert
+gesicherte
+gesichertem
+gesicherten
+gesicherter
+gesichertes
+gesichtet
+gesichtete
+gesichtetem
+gesichteten
+gesichteter
+gesichtetes
+gesichtslos
+gesichtslose
+gesichtslosem
+gesichtslosen
+gesichtsloser
+gesichtsloses
+gesickert
+gesickerte
+gesickertem
+gesickerten
+gesickerter
+gesickertes
+gesiebt
+gesiebte
+gesiebtem
+gesiebten
+gesiebter
+gesiebtes
+gesiecht
+gesiedelt
+gesiedet
+gesiegelt
+gesiegelte
+gesiegeltem
+gesiegelten
+gesiegelter
+gesiegeltes
+gesiegt
+gesinnt
+gesinnte
+gesinntem
+gesinnten
+gesinnter
+gesinntes
+gesinnungslos
+gesinnungslose
+gesinnungslosem
+gesinnungslosen
+gesinnungsloser
+gesinnungsloses
+gesittet
+gesittete
+gesittetem
+gesitteten
+gesitteter
+gesittetes
+gesoffen
+gesoffene
+gesoffenem
+gesoffenen
+gesoffener
+gesoffenes
+gesogen
+gesogene
+gesogenem
+gesogenen
+gesogener
+gesogenes
+gesondert
+gesonderte
+gesondertem
+gesonderten
+gesonderter
+gesondertes
+gesonnen
+gesonnene
+gesonnenem
+gesonnenen
+gesonnener
+gesonnenes
+gesorgt
+gesotten
+gesottene
+gesottenem
+gesottenen
+gesottener
+gesottenes
+gespachtelt
+gespachtelte
+gespachteltem
+gespachtelten
+gespachtelter
+gespachteltes
+gespalten
+gespaltene
+gespaltenem
+gespaltenen
+gespaltener
+gespaltenes
+gespaltet
+gespaltete
+gespaltetem
+gespalteten
+gespalteter
+gespaltetes
+gespannt
+gespannte
+gespanntem
+gespannten
+gespannter
+gespanntere
+gespannterem
+gespannteren
+gespannterer
+gespannteres
+gespanntes
+gespannteste
+gespanntestem
+gespanntesten
+gespanntester
+gespanntestes
+gespart
+gesparte
+gespartem
+gesparten
+gesparter
+gespartes
+gespaßt
+gespeichert
+gespeicherte
+gespeichertem
+gespeicherten
+gespeicherter
+gespeichertes
+gespeist
+gespeiste
+gespeistem
+gespeisten
+gespeister
+gespeistes
+gespendet
+gespendete
+gespendetem
+gespendeten
+gespendeter
+gespendetes
+gespensterhaft
+gespensterhafte
+gespensterhaftem
+gespensterhaften
+gespensterhafter
+gespensterhaftere
+gespensterhafterem
+gespensterhafteren
+gespensterhafterer
+gespensterhafteres
+gespensterhaftes
+gespensterhafteste
+gespensterhaftestem
+gespensterhaftesten
+gespensterhaftester
+gespensterhaftestes
+gespenstisch
+gespenstische
+gespenstischem
+gespenstischen
+gespenstischer
+gespenstisches
+gesperrt
+gesperrte
+gesperrtem
+gesperrten
+gesperrter
+gesperrtes
+gespickt
+gespickte
+gespicktem
+gespickten
+gespickter
+gespicktes
+gespieben
+gespiegelt
+gespiegelte
+gespiegeltem
+gespiegelten
+gespiegelter
+gespiegeltes
+gespielt
+gespielte
+gespieltem
+gespielten
+gespielter
+gespieltes
+gespien
+gespiene
+gespienem
+gespienen
+gespiener
+gespienes
+gespiesen
+gespiesene
+gespiesenem
+gespiesenen
+gespiesener
+gespiesenes
+gespießt
+gespießte
+gespießtem
+gespießten
+gespießter
+gespießtes
+gespitzt
+gespitzte
+gespitztem
+gespitzten
+gespitzter
+gespitztes
+gesplittert
+gesplitterte
+gesplittertem
+gesplitterten
+gesplitterter
+gesplittertes
+gesponnen
+gesponnene
+gesponnenem
+gesponnenen
+gesponnener
+gesponnenes
+gespornt
+gespornte
+gesporntem
+gespornten
+gespornter
+gesporntes
+gespottet
+gespottete
+gespottetem
+gespotteten
+gespotteter
+gespottetes
+gespreizt
+gespreizte
+gespreiztem
+gespreizten
+gespreizter
+gespreiztes
+gesprengt
+gesprengte
+gesprengtem
+gesprengten
+gesprengter
+gesprengtes
+gesprenkelt
+gesprenkelte
+gesprenkeltem
+gesprenkelten
+gesprenkelter
+gesprenkeltes
+gesprießt
+gesprießte
+gesprießtem
+gesprießten
+gesprießter
+gesprießtes
+gesprintet
+gesprintete
+gesprintetem
+gesprinteten
+gesprinteter
+gesprintetes
+gespritzt
+gespritzte
+gespritztem
+gespritzten
+gespritzter
+gespritztes
+gesprochen
+gesprochene
+gesprochenem
+gesprochenen
+gesprochener
+gesprochenes
+gesprudelt
+gesprudelte
+gesprudeltem
+gesprudelten
+gesprudelter
+gesprudeltes
+gesprungen
+gesprungene
+gesprungenem
+gesprungenen
+gesprungener
+gesprungenes
+gesprächig
+gesprächige
+gesprächigem
+gesprächigen
+gesprächiger
+gesprächigere
+gesprächigerem
+gesprächigeren
+gesprächigerer
+gesprächigeres
+gesprächiges
+gesprächigste
+gesprächigstem
+gesprächigsten
+gesprächigster
+gesprächigstes
+gesprüht
+gesprühte
+gesprühtem
+gesprühten
+gesprühter
+gesprühtes
+gespuckt
+gespuckte
+gespucktem
+gespuckten
+gespuckter
+gespucktes
+gespult
+gespulte
+gespultem
+gespulten
+gespulter
+gespultes
+gespurtet
+gespurtete
+gespurtetem
+gespurteten
+gespurteter
+gespurtetes
+gespöttelt
+gespöttelte
+gespötteltem
+gespöttelten
+gespöttelter
+gespötteltes
+gespült
+gespülte
+gespültem
+gespülten
+gespülter
+gespültes
+gespürt
+gespürte
+gespürtem
+gespürten
+gespürter
+gespürtes
+gestachelt
+gestachelte
+gestacheltem
+gestachelten
+gestachelter
+gestacheltes
+gestaffelt
+gestaffelte
+gestaffeltem
+gestaffelten
+gestaffelter
+gestaffeltes
+gestaltbar
+gestaltbare
+gestaltbarem
+gestaltbaren
+gestaltbarer
+gestaltbares
+gestalte
+gestalten
+gestaltend
+gestaltende
+gestaltendem
+gestaltenden
+gestaltender
+gestaltendes
+gestaltest
+gestaltet
+gestaltete
+gestaltetem
+gestalteten
+gestalteter
+gestaltetes
+gestaltetest
+gestaltetet
+gestammelt
+gestammelte
+gestammeltem
+gestammelten
+gestammelter
+gestammeltes
+gestampft
+gestampfte
+gestampftem
+gestampften
+gestampfter
+gestampftes
+gestand
+gestanden
+gestandene
+gestandenem
+gestandenen
+gestandener
+gestandenes
+gestandest
+gestandet
+gestandst
+gestanzt
+gestanzte
+gestanztem
+gestanzten
+gestanzter
+gestanztes
+gestapelt
+gestapelte
+gestapeltem
+gestapelten
+gestapelter
+gestapeltes
+gestapft
+gestarrt
+gestartet
+gestartete
+gestartetem
+gestarteten
+gestarteter
+gestartetes
+gestatte
+gestatten
+gestattend
+gestattende
+gestattendem
+gestattenden
+gestattender
+gestattendes
+gestattest
+gestattet
+gestattete
+gestatteten
+gestattetest
+gestattetet
+gestaucht
+gestauchte
+gestauchtem
+gestauchten
+gestauchter
+gestauchtes
+gestaunt
+gestaut
+gestaute
+gestautem
+gestauten
+gestauter
+gestautes
+gesteckt
+gesteckte
+gestecktem
+gesteckten
+gesteckter
+gestecktes
+gestehe
+gestehen
+gestehend
+gestehende
+gestehendem
+gestehenden
+gestehender
+gestehendes
+gestehst
+gesteht
+gesteift
+gesteifte
+gesteiftem
+gesteiften
+gesteifter
+gesteiftes
+gesteigert
+gesteigerte
+gesteigertem
+gesteigerten
+gesteigerter
+gesteigertes
+gesteinigt
+gesteinigte
+gesteinigtem
+gesteinigten
+gesteinigter
+gesteinigtes
+gestellt
+gestellte
+gestelltem
+gestellten
+gestellter
+gestelltes
+gestelzt
+gestemmt
+gestemmte
+gestemmtem
+gestemmten
+gestemmter
+gestemmtes
+gestempelt
+gestempelte
+gestempeltem
+gestempelten
+gestempelter
+gestempeltes
+gesteppt
+gesteppte
+gestepptem
+gesteppten
+gesteppter
+gestepptes
+gestern
+gesteuert
+gesteuerte
+gesteuertem
+gesteuerten
+gesteuerter
+gesteuertes
+gestichelt
+gestichelte
+gesticheltem
+gestichelten
+gestichelter
+gesticheltes
+gestickt
+gestickte
+gesticktem
+gestickten
+gestickter
+gesticktes
+gestiefelt
+gestiefelte
+gestiefeltem
+gestiefelten
+gestiefelter
+gestiefeltes
+gestiegen
+gestiegene
+gestiegenem
+gestiegenen
+gestiegener
+gestiegenes
+gestiftet
+gestiftete
+gestiftetem
+gestifteten
+gestifteter
+gestiftetes
+gestikuliere
+gestikulieren
+gestikulierend
+gestikulierende
+gestikulierendem
+gestikulierenden
+gestikulierender
+gestikulierendes
+gestikulierst
+gestikuliert
+gestikulierte
+gestikulierten
+gestikuliertest
+gestikuliertet
+gestillt
+gestillte
+gestilltem
+gestillten
+gestillter
+gestilltes
+gestimmt
+gestimmte
+gestimmtem
+gestimmten
+gestimmter
+gestimmtes
+gestisch
+gestische
+gestischem
+gestischen
+gestischer
+gestisches
+gestochen
+gestochene
+gestochenem
+gestochenen
+gestochener
+gestochenes
+gestochert
+gestocherte
+gestochertem
+gestocherten
+gestocherter
+gestochertes
+gestockt
+gestockte
+gestocktem
+gestockten
+gestockter
+gestocktes
+gestohlen
+gestohlene
+gestohlenem
+gestohlenen
+gestohlener
+gestohlenes
+gestolpert
+gestolperte
+gestolpertem
+gestolperten
+gestolperter
+gestolpertes
+gestopft
+gestopfte
+gestopftem
+gestopften
+gestopfter
+gestopftes
+gestoppelt
+gestoppelte
+gestoppeltem
+gestoppelten
+gestoppelter
+gestoppeltes
+gestoppt
+gestoppte
+gestopptem
+gestoppten
+gestoppter
+gestopptes
+gestorben
+gestorbene
+gestorbenem
+gestorbenen
+gestorbener
+gestorbenes
+gestottert
+gestotterte
+gestottertem
+gestotterten
+gestotterter
+gestottertes
+gestoßen
+gestoßene
+gestoßenem
+gestoßenen
+gestoßener
+gestoßenes
+gestrafft
+gestraffte
+gestrafftem
+gestrafften
+gestraffter
+gestrafftes
+gestraft
+gestrafte
+gestraftem
+gestraften
+gestrafter
+gestraftes
+gestrahlt
+gestrampelt
+gestrandet
+gestrandete
+gestrandetem
+gestrandeten
+gestrandeter
+gestrandetes
+gestrauchelt
+gestrauchelte
+gestraucheltem
+gestrauchelten
+gestrauchelter
+gestraucheltes
+gestrebt
+gestrebte
+gestrebtem
+gestrebten
+gestrebter
+gestrebtes
+gestreckt
+gestreckte
+gestrecktem
+gestreckten
+gestreckter
+gestrecktes
+gestreichelt
+gestreichelte
+gestreicheltem
+gestreichelten
+gestreichelter
+gestreicheltes
+gestreift
+gestreifte
+gestreiftem
+gestreiften
+gestreifter
+gestreiftes
+gestreikt
+gestreng
+gestrenge
+gestrengem
+gestrengen
+gestrenger
+gestrenges
+gestresst
+gestresste
+gestresstem
+gestressten
+gestresster
+gestresstes
+gestreunt
+gestreunte
+gestreuntem
+gestreunten
+gestreunter
+gestreuntes
+gestreut
+gestreute
+gestreutem
+gestreuten
+gestreuter
+gestreutes
+gestrichelt
+gestrichelte
+gestricheltem
+gestrichelten
+gestrichelter
+gestricheltes
+gestrichen
+gestrichene
+gestrichenem
+gestrichenen
+gestrichener
+gestrichenes
+gestrickt
+gestrickte
+gestricktem
+gestrickten
+gestrickter
+gestricktes
+gestriegelt
+gestriegelte
+gestriegeltem
+gestriegelten
+gestriegelter
+gestriegeltes
+gestriemt
+gestriemte
+gestriemtem
+gestriemten
+gestriemter
+gestriemtes
+gestrig
+gestrige
+gestrigem
+gestrigen
+gestriger
+gestriges
+gestritten
+gestrittene
+gestrittenem
+gestrittenen
+gestrittener
+gestrittenes
+gestrolcht
+gestrolchte
+gestrolchtem
+gestrolchten
+gestrolchter
+gestrolchtes
+gestrotzt
+gestrudelt
+gestrudelte
+gestrudeltem
+gestrudelten
+gestrudelter
+gestrudeltes
+gesträubt
+gesträubte
+gesträubtem
+gesträubten
+gesträubter
+gesträubtes
+gestundet
+gestundete
+gestundetem
+gestundeten
+gestundeter
+gestundetes
+gestupst
+gestupste
+gestupstem
+gestupsten
+gestupster
+gestupstes
+gestutzt
+gestutzte
+gestutztem
+gestutzten
+gestutzter
+gestutztes
+geständig
+geständige
+geständigem
+geständigen
+geständiger
+geständiges
+gestärkt
+gestärkte
+gestärktem
+gestärkten
+gestärkter
+gestärktes
+gestäubt
+gestäubte
+gestäubtem
+gestäubten
+gestäubter
+gestäubtes
+gestöbert
+gestöhnt
+gestöpselt
+gestöpselte
+gestöpseltem
+gestöpselten
+gestöpselter
+gestöpseltes
+gestört
+gestörte
+gestörtem
+gestörten
+gestörter
+gestörtes
+gestückelt
+gestückelte
+gestückeltem
+gestückelten
+gestückelter
+gestückeltes
+gestülpt
+gestülpte
+gestülptem
+gestülpten
+gestülpter
+gestülptes
+gestürmt
+gestürmte
+gestürmtem
+gestürmten
+gestürmter
+gestürmtes
+gestürzt
+gestürzte
+gestürztem
+gestürzten
+gestürzter
+gestürztes
+gestützt
+gestützte
+gestütztem
+gestützten
+gestützter
+gestütztes
+gesucht
+gesuchte
+gesuchtem
+gesuchten
+gesuchter
+gesuchtere
+gesuchterem
+gesuchteren
+gesuchterer
+gesuchteres
+gesuchtes
+gesuchteste
+gesuchtestem
+gesuchtesten
+gesuchtester
+gesuchtestes
+gesudelt
+gesudelte
+gesudeltem
+gesudelten
+gesudelter
+gesudeltes
+gesund
+gesunde
+gesundem
+gesunden
+gesundend
+gesundende
+gesundendem
+gesundenden
+gesundender
+gesundendes
+gesunder
+gesundere
+gesunderem
+gesunderen
+gesunderer
+gesunderes
+gesundes
+gesundest
+gesundet
+gesundete
+gesundetem
+gesundeten
+gesundeter
+gesundetes
+gesundetest
+gesundetet
+gesundheitlich
+gesundheitliche
+gesundheitlichem
+gesundheitlichen
+gesundheitlicher
+gesundheitliches
+gesundheitsgefährdend
+gesundheitsgefährdende
+gesundheitsgefährdendem
+gesundheitsgefährdenden
+gesundheitsgefährdender
+gesundheitsgefährdendes
+gesundheitsschädigend
+gesundheitsschädigende
+gesundheitsschädigendem
+gesundheitsschädigenden
+gesundheitsschädigender
+gesundheitsschädigendes
+gesundheitsschädlich
+gesundheitsschädliche
+gesundheitsschädlichem
+gesundheitsschädlichen
+gesundheitsschädlicher
+gesundheitsschädlichere
+gesundheitsschädlicherem
+gesundheitsschädlicheren
+gesundheitsschädlicherer
+gesundheitsschädlicheres
+gesundheitsschädliches
+gesundheitsschädlichste
+gesundheitsschädlichstem
+gesundheitsschädlichsten
+gesundheitsschädlichster
+gesundheitsschädlichstes
+gesundschrumpfe
+gesundschrumpfen
+gesundschrumpfend
+gesundschrumpfende
+gesundschrumpfendem
+gesundschrumpfenden
+gesundschrumpfender
+gesundschrumpfendes
+gesundschrumpfst
+gesundschrumpft
+gesundschrumpfte
+gesundschrumpften
+gesundschrumpftest
+gesundschrumpftet
+gesundste
+gesundstem
+gesundsten
+gesundster
+gesundstes
+gesungen
+gesungene
+gesungenem
+gesungenen
+gesungener
+gesungenes
+gesunken
+gesunkene
+gesunkenem
+gesunkenen
+gesunkener
+gesunkenes
+gesurrt
+gesurrte
+gesurrtem
+gesurrten
+gesurrter
+gesurrtes
+gesägt
+gesägte
+gesägtem
+gesägten
+gesägter
+gesägtes
+gesät
+gesäte
+gesätem
+gesäten
+gesäter
+gesätes
+gesättigt
+gesättigte
+gesättigtem
+gesättigten
+gesättigter
+gesättigtes
+gesäubert
+gesäuberte
+gesäubertem
+gesäuberten
+gesäuberter
+gesäubertes
+gesäugt
+gesäugte
+gesäugtem
+gesäugten
+gesäugter
+gesäugtes
+gesäumt
+gesäumte
+gesäumtem
+gesäumten
+gesäumter
+gesäumtes
+gesäuselt
+gesäuselte
+gesäuseltem
+gesäuselten
+gesäuselter
+gesäuseltes
+gesüffelt
+gesühnt
+gesühnte
+gesühntem
+gesühnten
+gesühnter
+gesühntes
+gesünder
+gesündere
+gesünderem
+gesünderen
+gesünderer
+gesünderes
+gesündeste
+gesündestem
+gesündesten
+gesündester
+gesündestes
+gesündigt
+gesündigte
+gesündigtem
+gesündigten
+gesündigter
+gesündigtes
+gesüßt
+gesüßte
+gesüßtem
+gesüßten
+gesüßter
+gesüßtes
+getadelt
+getadelte
+getadeltem
+getadelten
+getadelter
+getadeltes
+getafelt
+getafelte
+getafeltem
+getafelten
+getafelter
+getafeltes
+getagt
+getagte
+getagtem
+getagten
+getagter
+getagtes
+getakelt
+getakelte
+getakeltem
+getakelten
+getakelter
+getakeltes
+getaktet
+getaktete
+getaktetem
+getakteten
+getakteter
+getaktetes
+getan
+getane
+getanem
+getanen
+getaner
+getanes
+getankt
+getankte
+getanktem
+getankten
+getankter
+getanktes
+getanzt
+getanzte
+getanztem
+getanzten
+getanzter
+getanztes
+getappt
+getappte
+getapptem
+getappten
+getappter
+getapptes
+getapst
+getarnt
+getarnte
+getarntem
+getarnten
+getarnter
+getarntes
+getastet
+getastete
+getastetem
+getasteten
+getasteter
+getastetes
+getaucht
+getauchte
+getauchtem
+getauchten
+getauchter
+getauchtes
+getauft
+getaufte
+getauftem
+getauften
+getaufter
+getauftes
+getaugt
+getaugte
+getaugtem
+getaugten
+getaugter
+getaugtes
+getaumelt
+getaumelte
+getaumeltem
+getaumelten
+getaumelter
+getaumeltes
+getauscht
+getauschte
+getauschtem
+getauschten
+getauschter
+getauschtes
+getaut
+getaute
+getautem
+getauten
+getauter
+getautes
+geteert
+geteerte
+geteertem
+geteerten
+geteerter
+geteertes
+geteilt
+geteilte
+geteiltem
+geteilten
+geteilter
+geteiltes
+getestet
+getestete
+getestetem
+getesteten
+getesteter
+getestetes
+getextet
+getextete
+getextetem
+getexteten
+getexteter
+getextetes
+gethront
+gethronte
+gethrontem
+gethronten
+gethronter
+gethrontes
+getickt
+getickte
+geticktem
+getickten
+getickter
+geticktes
+getilgt
+getilgte
+getilgtem
+getilgten
+getilgter
+getilgtes
+getippelt
+getippelte
+getippeltem
+getippelten
+getippelter
+getippeltes
+getippt
+getippte
+getipptem
+getippten
+getippter
+getipptes
+getischlert
+getischlerte
+getischlertem
+getischlerten
+getischlerter
+getischlertes
+getoastet
+getoastete
+getoastetem
+getoasteten
+getoasteter
+getoastetes
+getobt
+getoggelt
+getollt
+getollte
+getolltem
+getollten
+getollter
+getolltes
+getorkelt
+getorkelte
+getorkeltem
+getorkelten
+getorkelter
+getorkeltes
+getost
+getoste
+getostem
+getosten
+getoster
+getostes
+getragen
+getragene
+getragenem
+getragenen
+getragener
+getragenes
+getrampelt
+getrampelte
+getrampeltem
+getrampelten
+getrampelter
+getrampeltes
+getrappelt
+getrappelte
+getrappeltem
+getrappelten
+getrappelter
+getrappeltes
+getrauert
+getrauerte
+getrauertem
+getrauerten
+getrauerter
+getrauertes
+getraut
+getraute
+getrautem
+getrauten
+getrauter
+getrautes
+getreckt
+getreckte
+getrecktem
+getreckten
+getreckter
+getrecktes
+getreidelt
+getreidelte
+getreideltem
+getreidelten
+getreidelter
+getreideltes
+getrennt
+getrennte
+getrenntem
+getrennten
+getrennter
+getrenntes
+getreten
+getretene
+getretenem
+getretenen
+getretener
+getretenes
+getreu
+getreue
+getreuem
+getreuen
+getreuer
+getreues
+getreulich
+getreuliche
+getreulichem
+getreulichen
+getreulicher
+getreuliches
+getrickst
+getrieben
+getriebene
+getriebenem
+getriebenen
+getriebener
+getriebenes
+getrieft
+getriefte
+getrieftem
+getrieften
+getriefter
+getrieftes
+getriggert
+getrillert
+getrillerte
+getrillertem
+getrillerten
+getrillerter
+getrillertes
+getrimmt
+getrimmte
+getrimmtem
+getrimmten
+getrimmter
+getrimmtes
+getrippelt
+getrippelte
+getrippeltem
+getrippelten
+getrippelter
+getrippeltes
+getrocknet
+getrocknete
+getrocknetem
+getrockneten
+getrockneter
+getrocknetes
+getroffen
+getroffene
+getroffenem
+getroffenen
+getroffener
+getroffenes
+getrommelt
+getrommelte
+getrommeltem
+getrommelten
+getrommelter
+getrommeltes
+getropft
+getropfte
+getropftem
+getropften
+getropfter
+getropftes
+getrost
+getrottet
+getrottete
+getrottetem
+getrotteten
+getrotteter
+getrottetes
+getrotzt
+getrotzte
+getrotztem
+getrotzten
+getrotzter
+getrotztes
+getrudelt
+getrumpft
+getrumpfte
+getrumpftem
+getrumpften
+getrumpfter
+getrumpftes
+getrunken
+getrunkene
+getrunkenem
+getrunkenen
+getrunkener
+getrunkenes
+geträllert
+geträllerte
+geträllertem
+geträllerten
+geträllerter
+geträllertes
+getränkt
+getränkte
+getränktem
+getränkten
+getränkter
+getränktes
+geträufelt
+geträufelte
+geträufeltem
+geträufelten
+geträufelter
+geträufeltes
+geträumt
+geträumte
+geträumtem
+geträumten
+geträumter
+geträumtes
+getrödelt
+getrödelte
+getrödeltem
+getrödelten
+getrödelter
+getrödeltes
+getröpfelt
+getröpfelte
+getröpfeltem
+getröpfelten
+getröpfelter
+getröpfeltes
+getröstet
+getröstete
+getröstetem
+getrösteten
+getrösteter
+getröstetes
+getrübt
+getrübte
+getrübtem
+getrübten
+getrübter
+getrübtes
+getummelt
+getummelte
+getummeltem
+getummelten
+getummelter
+getummeltes
+getunkt
+getunkte
+getunktem
+getunkten
+getunkter
+getunktes
+getupft
+getupfte
+getupftem
+getupften
+getupfter
+getupftes
+geturnt
+geturnte
+geturntem
+geturnten
+geturnter
+geturntes
+getuschelt
+getuschelte
+getuscheltem
+getuschelten
+getuschelter
+getuscheltes
+getuscht
+getuschte
+getuschtem
+getuschten
+getuschter
+getuschtes
+getutet
+getutete
+getutetem
+getuteten
+getuteter
+getutetes
+getypt
+getypte
+getyptem
+getypten
+getypter
+getyptes
+getäfelt
+getäfelte
+getäfeltem
+getäfelten
+getäfelter
+getäfeltes
+getändelt
+getändelte
+getändeltem
+getändelten
+getändelter
+getändeltes
+getänzelt
+getänzelte
+getänzeltem
+getänzelten
+getänzelter
+getänzeltes
+getätigt
+getätigte
+getätigtem
+getätigten
+getätigter
+getätigtes
+getätschelt
+getätschelte
+getätscheltem
+getätschelten
+getätschelter
+getätscheltes
+getäuscht
+getäuschte
+getäuschtem
+getäuschten
+getäuschter
+getäuschtes
+getönt
+getönte
+getöntem
+getönten
+getönter
+getöntes
+getötet
+getötete
+getötetem
+getöteten
+getöteter
+getötetes
+getüftelt
+getüftelte
+getüfteltem
+getüftelten
+getüftelter
+getüfteltes
+getüncht
+getünchte
+getünchtem
+getünchten
+getünchter
+getünchtes
+getürmt
+getürmte
+getürmtem
+getürmten
+getürmter
+getürmtes
+getüttelt
+getüttelte
+getütteltem
+getüttelten
+getüttelter
+getütteltes
+geulkt
+geulkte
+geulktem
+geulkten
+geulkter
+geulktes
+geurteilt
+gevierteilt
+gevierteilte
+gevierteiltem
+gevierteilten
+gevierteilter
+gevierteiltes
+gewachsen
+gewachsene
+gewachsenem
+gewachsenen
+gewachsener
+gewachsenes
+gewacht
+gewachte
+gewachtem
+gewachten
+gewachter
+gewachtes
+gewackelt
+gewackelte
+gewackeltem
+gewackelten
+gewackelter
+gewackeltes
+gewaffnet
+gewaffnete
+gewaffnetem
+gewaffneten
+gewaffneter
+gewaffnetes
+gewagt
+gewagte
+gewagtem
+gewagten
+gewagter
+gewagtere
+gewagterem
+gewagteren
+gewagterer
+gewagteres
+gewagtes
+gewagteste
+gewagtestem
+gewagtesten
+gewagtester
+gewagtestes
+gewahrt
+gewahrte
+gewahrtem
+gewahrten
+gewahrter
+gewahrtes
+gewallt
+gewallte
+gewalltem
+gewallten
+gewallter
+gewalltes
+gewaltet
+gewaltig
+gewaltige
+gewaltigem
+gewaltigen
+gewaltiger
+gewaltigere
+gewaltigerem
+gewaltigeren
+gewaltigerer
+gewaltigeres
+gewaltiges
+gewaltigste
+gewaltigstem
+gewaltigsten
+gewaltigster
+gewaltigstes
+gewaltlos
+gewaltlose
+gewaltlosem
+gewaltlosen
+gewaltloser
+gewaltloses
+gewaltsam
+gewaltsame
+gewaltsamem
+gewaltsamen
+gewaltsamer
+gewaltsamere
+gewaltsamerem
+gewaltsameren
+gewaltsamerer
+gewaltsameres
+gewaltsames
+gewaltsamste
+gewaltsamstem
+gewaltsamsten
+gewaltsamster
+gewaltsamstes
+gewalttätig
+gewalttätige
+gewalttätigem
+gewalttätigen
+gewalttätiger
+gewalttätigere
+gewalttätigerem
+gewalttätigeren
+gewalttätigerer
+gewalttätigeres
+gewalttätiges
+gewalttätigste
+gewalttätigstem
+gewalttätigsten
+gewalttätigster
+gewalttätigstes
+gewalzt
+gewalzte
+gewalztem
+gewalzten
+gewalzter
+gewalztes
+gewandelt
+gewandelte
+gewandeltem
+gewandelten
+gewandelter
+gewandeltes
+gewandert
+gewanderte
+gewandertem
+gewanderten
+gewanderter
+gewandertes
+gewandt
+gewandte
+gewandtem
+gewandten
+gewandter
+gewandtere
+gewandterem
+gewandteren
+gewandterer
+gewandteres
+gewandtes
+gewandteste
+gewandtestem
+gewandtesten
+gewandtester
+gewandtestes
+gewann
+gewannen
+gewannst
+gewannt
+gewappnet
+gewappnete
+gewappnetem
+gewappneten
+gewappneter
+gewappnetes
+gewarnt
+gewarnte
+gewarntem
+gewarnten
+gewarnter
+gewarntes
+gewartet
+gewartete
+gewartetem
+gewarteten
+gewarteter
+gewartetes
+gewaschen
+gewaschene
+gewaschenem
+gewaschenen
+gewaschener
+gewaschenes
+gewassert
+gewasserte
+gewassertem
+gewasserten
+gewasserter
+gewassertes
+gewatet
+gewatete
+gewatetem
+gewateten
+gewateter
+gewatetes
+gewatschelt
+gewatschelte
+gewatscheltem
+gewatschelten
+gewatschelter
+gewatscheltes
+gewebt
+gewebte
+gewebtem
+gewebten
+gewebter
+gewebtes
+gewechselt
+gewechselte
+gewechseltem
+gewechselten
+gewechselter
+gewechseltes
+geweckt
+geweckte
+gewecktem
+geweckten
+geweckter
+gewecktes
+gewedelt
+gewehrt
+geweht
+gewehte
+gewehtem
+gewehten
+gewehter
+gewehtes
+geweidet
+geweidete
+geweidetem
+geweideten
+geweideter
+geweidetes
+geweigert
+geweiht
+geweihte
+geweihtem
+geweihten
+geweihter
+geweihtes
+geweilt
+geweißt
+geweißte
+geweißtem
+geweißten
+geweißter
+geweißtes
+gewelkt
+gewelkte
+gewelktem
+gewelkten
+gewelkter
+gewelktes
+gewellt
+gewellte
+gewelltem
+gewellten
+gewellter
+gewelltes
+gewendet
+gewendete
+gewendetem
+gewendeten
+gewendeter
+gewendetes
+gewerbemäßig
+gewerbemäßige
+gewerbemäßigem
+gewerbemäßigen
+gewerbemäßiger
+gewerbemäßiges
+gewerbetreibend
+gewerbetreibende
+gewerbetreibendem
+gewerbetreibenden
+gewerbetreibender
+gewerbetreibendes
+gewerblich
+gewerbliche
+gewerblichem
+gewerblichen
+gewerblicher
+gewerbliches
+gewerbsmäßig
+gewerbsmäßige
+gewerbsmäßigem
+gewerbsmäßigen
+gewerbsmäßiger
+gewerbsmäßiges
+gewerkschaftlich
+gewerkschaftliche
+gewerkschaftlichem
+gewerkschaftlichen
+gewerkschaftlicher
+gewerkschaftliches
+gewerkt
+gewerkte
+gewerktem
+gewerkten
+gewerkter
+gewerktes
+gewertet
+gewertete
+gewertetem
+gewerteten
+gewerteter
+gewertetes
+gewesen
+gewesene
+gewesenem
+gewesenen
+gewesener
+gewesenes
+gewettet
+gewettete
+gewettetem
+gewetteten
+gewetteter
+gewettetes
+gewetzt
+gewetzte
+gewetztem
+gewetzten
+gewetzter
+gewetztere
+gewetzterem
+gewetzteren
+gewetzterer
+gewetzteres
+gewetztes
+gewetzteste
+gewetztestem
+gewetztesten
+gewetztester
+gewetztestes
+gewichen
+gewichene
+gewichenem
+gewichenen
+gewichener
+gewichenes
+gewichst
+gewichste
+gewichstem
+gewichsten
+gewichster
+gewichstes
+gewichte
+gewichten
+gewichtend
+gewichtende
+gewichtendem
+gewichtenden
+gewichtender
+gewichtendes
+gewichtest
+gewichtet
+gewichtete
+gewichtetem
+gewichteten
+gewichteter
+gewichtetes
+gewichtetest
+gewichtetet
+gewichthebe
+gewichtheben
+gewichthebend
+gewichthebende
+gewichthebendem
+gewichthebenden
+gewichthebender
+gewichthebendes
+gewichthebt
+gewichtig
+gewichtige
+gewichtigem
+gewichtigen
+gewichtiger
+gewichtigere
+gewichtigerem
+gewichtigeren
+gewichtigerer
+gewichtigeres
+gewichtiges
+gewichtigste
+gewichtigstem
+gewichtigsten
+gewichtigster
+gewichtigstes
+gewichtssparend
+gewichtssparende
+gewichtssparendem
+gewichtssparenden
+gewichtssparender
+gewichtssparendes
+gewickelt
+gewickelte
+gewickeltem
+gewickelten
+gewickelter
+gewickeltes
+gewidmet
+gewidmete
+gewidmetem
+gewidmeten
+gewidmeter
+gewidmetes
+gewiegt
+gewiegte
+gewiegtem
+gewiegten
+gewiegter
+gewiegtes
+gewiehert
+gewieherte
+gewiehertem
+gewieherten
+gewieherter
+gewiehertes
+gewiesen
+gewiesene
+gewiesenem
+gewiesenen
+gewiesener
+gewiesenes
+gewillt
+gewillte
+gewilltem
+gewillten
+gewillter
+gewilltes
+gewimmelt
+gewimmelte
+gewimmeltem
+gewimmelten
+gewimmelter
+gewimmeltes
+gewimmert
+gewimmerte
+gewimmertem
+gewimmerten
+gewimmerter
+gewimmertes
+gewinnbringend
+gewinnbringende
+gewinnbringendem
+gewinnbringenden
+gewinnbringender
+gewinnbringendes
+gewinne
+gewinnen
+gewinnend
+gewinnende
+gewinnendem
+gewinnenden
+gewinnender
+gewinnendes
+gewinnst
+gewinnt
+gewinnträchtig
+gewinnträchtige
+gewinnträchtigem
+gewinnträchtigen
+gewinnträchtiger
+gewinnträchtigere
+gewinnträchtigerem
+gewinnträchtigeren
+gewinnträchtigerer
+gewinnträchtigeres
+gewinnträchtiges
+gewinnträchtigste
+gewinnträchtigstem
+gewinnträchtigsten
+gewinnträchtigster
+gewinnträchtigstes
+gewinselt
+gewinselte
+gewinseltem
+gewinselten
+gewinselter
+gewinseltes
+gewippt
+gewippte
+gewipptem
+gewippten
+gewippter
+gewipptes
+gewirbelt
+gewirkt
+gewirkte
+gewirktem
+gewirkten
+gewirkter
+gewirktes
+gewirtschaftet
+gewirtschaftete
+gewirtschaftetem
+gewirtschafteten
+gewirtschafteter
+gewirtschaftetes
+gewischt
+gewischte
+gewischtem
+gewischten
+gewischter
+gewischtes
+gewispert
+gewisperte
+gewispertem
+gewisperten
+gewisperter
+gewispertes
+gewiss
+gewisse
+gewissem
+gewissen
+gewissenhaft
+gewissenhafte
+gewissenhaftem
+gewissenhaften
+gewissenhafter
+gewissenhaftere
+gewissenhafterem
+gewissenhafteren
+gewissenhafterer
+gewissenhafteres
+gewissenhaftes
+gewissenhafteste
+gewissenhaftestem
+gewissenhaftesten
+gewissenhaftester
+gewissenhaftestes
+gewissenlos
+gewissenlose
+gewissenlosem
+gewissenlosen
+gewissenloser
+gewissenlosere
+gewissenloserem
+gewissenloseren
+gewissenloserer
+gewissenloseres
+gewissenloses
+gewissenloseste
+gewissenlosestem
+gewissenlosesten
+gewissenlosester
+gewissenlosestes
+gewisser
+gewissermaßen
+gewisses
+gewisslich
+gewissliche
+gewisslichem
+gewisslichen
+gewisslicher
+gewissliches
+gewitterig
+gewitterige
+gewitterigem
+gewitterigen
+gewitteriger
+gewitteriges
+gewittert
+gewitterte
+gewittertem
+gewitterten
+gewitterter
+gewittertes
+gewittrig
+gewittrige
+gewittrigem
+gewittrigen
+gewittriger
+gewittriges
+gewitzelt
+gewitzelte
+gewitzeltem
+gewitzelten
+gewitzelter
+gewitzeltes
+gewitzt
+gewitzte
+gewitztem
+gewitzten
+gewitzter
+gewitztere
+gewitzterem
+gewitzteren
+gewitzterer
+gewitzteres
+gewitztes
+gewitzteste
+gewitztestem
+gewitztesten
+gewitztester
+gewitztestes
+gewogen
+gewogene
+gewogenem
+gewogenen
+gewogener
+gewogenes
+gewohnheitsmäßig
+gewohnheitsmäßige
+gewohnheitsmäßigem
+gewohnheitsmäßigen
+gewohnheitsmäßiger
+gewohnheitsmäßiges
+gewohnt
+gewohnte
+gewohntem
+gewohnten
+gewohnter
+gewohntes
+gewollt
+gewollte
+gewolltem
+gewollten
+gewollter
+gewolltere
+gewollterem
+gewollteren
+gewollterer
+gewollteres
+gewolltes
+gewollteste
+gewolltestem
+gewolltesten
+gewolltester
+gewolltestes
+gewonnen
+gewonnene
+gewonnenem
+gewonnenen
+gewonnener
+gewonnenes
+geworben
+geworbene
+geworbenem
+geworbenen
+geworbener
+geworbenes
+geworden
+gewordene
+gewordenem
+gewordenen
+gewordener
+gewordenes
+geworfen
+geworfene
+geworfenem
+geworfenen
+geworfener
+geworfenes
+gewringt
+gewringte
+gewringtem
+gewringten
+gewringter
+gewringtere
+gewringterem
+gewringteren
+gewringterer
+gewringteres
+gewringtes
+gewringteste
+gewringtestem
+gewringtesten
+gewringtester
+gewringtestes
+gewrungen
+gewrungene
+gewrungenem
+gewrungenen
+gewrungener
+gewrungenes
+gewuchert
+gewucherte
+gewuchertem
+gewucherten
+gewucherter
+gewuchertes
+gewuchtet
+gewuchtete
+gewuchtetem
+gewuchteten
+gewuchteter
+gewuchtetes
+gewunden
+gewundene
+gewundenem
+gewundenen
+gewundener
+gewundenes
+gewunken
+gewunkene
+gewunkenem
+gewunkenen
+gewunkener
+gewunkenes
+gewurmt
+gewurstelt
+gewurstelte
+gewursteltem
+gewurstelten
+gewurstelter
+gewursteltere
+gewurstelterem
+gewurstelteren
+gewurstelterer
+gewurstelteres
+gewursteltes
+gewurstelteste
+gewursteltestem
+gewursteltesten
+gewursteltester
+gewursteltestes
+gewurzelt
+gewurzelte
+gewurzeltem
+gewurzelten
+gewurzelter
+gewurzeltes
+gewusst
+gewusste
+gewusstem
+gewussten
+gewusster
+gewusstes
+gewählt
+gewählte
+gewähltem
+gewählten
+gewählter
+gewähltere
+gewählterem
+gewählteren
+gewählterer
+gewählteres
+gewähltes
+gewählteste
+gewähltestem
+gewähltesten
+gewähltester
+gewähltestes
+gewähnt
+gewähnte
+gewähntem
+gewähnten
+gewähnter
+gewähntes
+gewährbar
+gewährbare
+gewährbarem
+gewährbaren
+gewährbarer
+gewährbares
+gewähre
+gewähren
+gewährend
+gewährende
+gewährendem
+gewährenden
+gewährender
+gewährendes
+gewährleiste
+gewährleisten
+gewährleistend
+gewährleistende
+gewährleistendem
+gewährleistenden
+gewährleistender
+gewährleistendes
+gewährleistest
+gewährleistet
+gewährleistete
+gewährleistetem
+gewährleisteten
+gewährleisteter
+gewährleistetes
+gewährleistetest
+gewährleistetet
+gewährst
+gewährt
+gewährte
+gewährtem
+gewährten
+gewährter
+gewährtes
+gewährtest
+gewährtet
+gewälzt
+gewälzte
+gewälztem
+gewälzten
+gewälzter
+gewälztes
+gewärmt
+gewärmte
+gewärmtem
+gewärmten
+gewärmter
+gewärmtes
+gewöhne
+gewöhnen
+gewöhnend
+gewöhnende
+gewöhnendem
+gewöhnenden
+gewöhnender
+gewöhnendes
+gewöhnlich
+gewöhnliche
+gewöhnlichem
+gewöhnlichen
+gewöhnlicher
+gewöhnlichere
+gewöhnlicherem
+gewöhnlicheren
+gewöhnlicherer
+gewöhnlicheres
+gewöhnlicherweise
+gewöhnliches
+gewöhnlichste
+gewöhnlichstem
+gewöhnlichsten
+gewöhnlichster
+gewöhnlichstes
+gewöhnst
+gewöhnt
+gewöhnte
+gewöhntem
+gewöhnten
+gewöhnter
+gewöhntes
+gewöhntest
+gewöhntet
+gewöhnungsbedürftig
+gewöhnungsbedürftige
+gewöhnungsbedürftigem
+gewöhnungsbedürftigen
+gewöhnungsbedürftiger
+gewöhnungsbedürftiges
+gewölbt
+gewölbte
+gewölbtem
+gewölbten
+gewölbter
+gewölbtere
+gewölbterem
+gewölbteren
+gewölbterer
+gewölbteres
+gewölbtes
+gewölbteste
+gewölbtestem
+gewölbtesten
+gewölbtester
+gewölbtestes
+gewühlt
+gewühlte
+gewühltem
+gewühlten
+gewühlter
+gewühltes
+gewünscht
+gewünschte
+gewünschtem
+gewünschten
+gewünschter
+gewünschtere
+gewünschterem
+gewünschteren
+gewünschterer
+gewünschteres
+gewünschtes
+gewünschteste
+gewünschtestem
+gewünschtesten
+gewünschtester
+gewünschtestes
+gewürdigt
+gewürdigte
+gewürdigtem
+gewürdigten
+gewürdigter
+gewürdigtes
+gewürfelt
+gewürfelte
+gewürfeltem
+gewürfelten
+gewürfelter
+gewürfeltes
+gewürgt
+gewürgte
+gewürgtem
+gewürgten
+gewürgter
+gewürgtes
+gewürzt
+gewürzte
+gewürztem
+gewürzten
+gewürzter
+gewürztere
+gewürzterem
+gewürzteren
+gewürzterer
+gewürzteres
+gewürztes
+gewürzteste
+gewürztestem
+gewürztesten
+gewürztester
+gewürztestes
+gewütet
+gezahlt
+gezahlte
+gezahltem
+gezahlten
+gezahlter
+gezahltes
+gezahnt
+gezahnte
+gezahntem
+gezahnten
+gezahnter
+gezahntes
+gezankt
+gezapft
+gezapfte
+gezapftem
+gezapften
+gezapfter
+gezapftes
+gezappelt
+gezaubert
+gezauberte
+gezaubertem
+gezauberten
+gezauberter
+gezaubertes
+gezecht
+gezechte
+gezechtem
+gezechten
+gezechter
+gezechtes
+gezeichnet
+gezeichnete
+gezeichnetem
+gezeichneten
+gezeichneter
+gezeichnetes
+gezeigt
+gezeigte
+gezeigtem
+gezeigten
+gezeigter
+gezeigtes
+gezeltet
+gezerrt
+gezerrte
+gezerrtem
+gezerrten
+gezerrter
+gezerrtes
+gezeugt
+gezeugte
+gezeugtem
+gezeugten
+gezeugter
+gezeugtes
+gezielt
+gezielte
+gezieltem
+gezielten
+gezielter
+gezieltere
+gezielterem
+gezielteren
+gezielterer
+gezielteres
+gezieltes
+gezielteste
+gezieltestem
+gezieltesten
+gezieltester
+gezieltestes
+gezieme
+geziemen
+geziemend
+geziemende
+geziemendem
+geziemenden
+geziemender
+geziemendes
+geziemst
+geziemt
+geziemte
+geziemten
+geziemtest
+geziemtet
+geziert
+gezierte
+geziertem
+gezierten
+gezierter
+geziertes
+gezimmert
+gezimmerte
+gezimmertem
+gezimmerten
+gezimmerter
+gezimmertes
+gezinkt
+gezinkte
+gezinktem
+gezinkten
+gezinkter
+gezinktes
+gezirkelt
+gezirkelte
+gezirkeltem
+gezirkelten
+gezirkelter
+gezirkeltes
+gezirpt
+gezirpte
+gezirptem
+gezirpten
+gezirpter
+gezirptes
+gezischelt
+gezischelte
+gezischeltem
+gezischelten
+gezischelter
+gezischeltes
+gezischt
+gezischte
+gezischtem
+gezischten
+gezischter
+gezischtes
+gezittert
+gezogen
+gezogene
+gezogenem
+gezogenen
+gezogener
+gezogenes
+gezollt
+gezollte
+gezolltem
+gezollten
+gezollter
+gezolltes
+gezuckert
+gezuckerte
+gezuckertem
+gezuckerten
+gezuckerter
+gezuckertes
+gezupft
+gezupfte
+gezupftem
+gezupften
+gezupfter
+gezupftes
+gezweifelt
+gezweifelte
+gezweifeltem
+gezweifelten
+gezweifelter
+gezweifeltes
+gezwickt
+gezwickte
+gezwicktem
+gezwickten
+gezwickter
+gezwicktes
+gezwiebelt
+gezwiebelte
+gezwiebeltem
+gezwiebelten
+gezwiebelter
+gezwiebeltes
+gezwinkert
+gezwinkerte
+gezwinkertem
+gezwinkerten
+gezwinkerter
+gezwinkertes
+gezwitschert
+gezwitscherte
+gezwitschertem
+gezwitscherten
+gezwitscherter
+gezwitschertes
+gezwungen
+gezwungene
+gezwungenem
+gezwungenen
+gezwungener
+gezwungenermaßen
+gezwungenes
+gezwängt
+gezwängte
+gezwängtem
+gezwängten
+gezwängter
+gezwängtes
+gezählt
+gezählte
+gezähltem
+gezählten
+gezählter
+gezähltes
+gezähmt
+gezähmte
+gezähmtem
+gezähmten
+gezähmter
+gezähmtes
+gezögert
+gezögerte
+gezögertem
+gezögerten
+gezögerter
+gezögertes
+gezüchtet
+gezüchtete
+gezüchtetem
+gezüchteten
+gezüchteter
+gezüchtetes
+gezüchtigt
+gezüchtigte
+gezüchtigtem
+gezüchtigten
+gezüchtigter
+gezüchtigtes
+gezückt
+gezückte
+gezücktem
+gezückten
+gezückter
+gezücktes
+gezügelt
+gezügelte
+gezügeltem
+gezügelten
+gezügelter
+gezügeltes
+gezündelt
+gezündet
+gezündete
+gezündetem
+gezündeten
+gezündeter
+gezündetes
+gezüngelt
+gezürnt
+gezürnte
+gezürntem
+gezürnten
+gezürnter
+gezürntes
+geächtet
+geächtete
+geächtetem
+geächteten
+geächteter
+geächtetes
+geächzt
+geädert
+geäderte
+geädertem
+geäderten
+geäderter
+geädertes
+geähnelt
+geändert
+geänderte
+geändertem
+geänderten
+geänderter
+geändertes
+geängstigt
+geängstigte
+geängstigtem
+geängstigten
+geängstigter
+geängstigtes
+geätzt
+geätzte
+geätztem
+geätzten
+geätzter
+geätztes
+geäußert
+geäußerte
+geäußertem
+geäußerten
+geäußerter
+geäußertes
+geöffnet
+geöffnete
+geöffnetem
+geöffneten
+geöffneter
+geöffnetes
+geölt
+geölte
+geöltem
+geölten
+geölter
+geöltes
+geübt
+geübte
+geübtem
+geübten
+geübter
+geübtes
+ggf
+gib
+gibst
+gibt
+gierig
+gierige
+gierigem
+gierigen
+gieriger
+gierigere
+gierigerem
+gierigeren
+gierigerer
+gierigeres
+gieriges
+gierigste
+gierigstem
+gierigsten
+gierigster
+gierigstes
+gieße
+gießen
+gießend
+gießende
+gießendem
+gießenden
+gießender
+gießendes
+gießest
+gießt
+gifte
+giften
+giftend
+giftende
+giftendem
+giftenden
+giftender
+giftendes
+giftest
+giftet
+giftete
+gifteten
+giftetest
+giftetet
+giftfrei
+giftfreie
+giftfreiem
+giftfreien
+giftfreier
+giftfreies
+giftgrün
+giftgrüne
+giftgrünem
+giftgrünen
+giftgrüner
+giftgrünes
+giftig
+giftige
+giftigem
+giftigen
+giftiger
+giftigere
+giftigerem
+giftigeren
+giftigerer
+giftigeres
+giftiges
+giftigste
+giftigstem
+giftigsten
+giftigster
+giftigstes
+gigantisch
+gigantische
+gigantischem
+gigantischen
+gigantischer
+gigantisches
+gilt
+giltst
+ging
+ginge
+gingen
+gingst
+gingt
+gipfele
+gipfeln
+gipfelnd
+gipfelnde
+gipfelndem
+gipfelnden
+gipfelnder
+gipfelndes
+gipfelst
+gipfelt
+gipfelte
+gipfelten
+gipfeltest
+gipfeltet
+gipfle
+glanzlos
+glanzlose
+glanzlosem
+glanzlosen
+glanzloser
+glanzloses
+glanzvoll
+glanzvolle
+glanzvollem
+glanzvollen
+glanzvoller
+glanzvolles
+glasiere
+glasieren
+glasierend
+glasierende
+glasierendem
+glasierenden
+glasierender
+glasierendes
+glasierst
+glasiert
+glasierte
+glasiertem
+glasierten
+glasierter
+glasiertes
+glasiertest
+glasiertet
+glasig
+glasige
+glasigem
+glasigen
+glasiger
+glasiges
+glatt
+glatte
+glattem
+glatten
+glatter
+glattere
+glatterem
+glatteren
+glatterer
+glatteres
+glattes
+glatteste
+glattestem
+glattesten
+glattester
+glattestes
+glattstelle
+glattstellen
+glattstellend
+glattstellende
+glattstellendem
+glattstellenden
+glattstellender
+glattstellendes
+glattstellst
+glattstellt
+glattstellte
+glattstellten
+glattstelltest
+glattstelltet
+glattweg
+glaub
+glaube
+glauben
+glaubend
+glaubende
+glaubendem
+glaubenden
+glaubender
+glaubendes
+glaubhaft
+glaubhafte
+glaubhaftem
+glaubhaften
+glaubhafter
+glaubhaftere
+glaubhafterem
+glaubhafteren
+glaubhafterer
+glaubhafteres
+glaubhaftes
+glaubhafteste
+glaubhaftestem
+glaubhaftesten
+glaubhaftester
+glaubhaftestes
+glaubst
+glaubt
+glaubte
+glaubten
+glaubtest
+glaubtet
+glaubwürdig
+glaubwürdige
+glaubwürdigem
+glaubwürdigen
+glaubwürdiger
+glaubwürdigere
+glaubwürdigerem
+glaubwürdigeren
+glaubwürdigerer
+glaubwürdigeres
+glaubwürdiges
+glaubwürdigste
+glaubwürdigstem
+glaubwürdigsten
+glaubwürdigster
+glaubwürdigstes
+gleich
+gleichalterig
+gleichalterige
+gleichalterigem
+gleichalterigen
+gleichalteriger
+gleichalteriges
+gleichaltrig
+gleichaltrige
+gleichaltrigem
+gleichaltrigen
+gleichaltriger
+gleichaltriges
+gleichartig
+gleichartige
+gleichartigem
+gleichartigen
+gleichartiger
+gleichartiges
+gleichbedeutend
+gleichbedeutende
+gleichbedeutendem
+gleichbedeutenden
+gleichbedeutender
+gleichbedeutendes
+gleichberechtigt
+gleichberechtigte
+gleichberechtigtem
+gleichberechtigten
+gleichberechtigter
+gleichberechtigtes
+gleichblieb
+gleichblieben
+gleichbliebst
+gleichbliebt
+gleiche
+gleichem
+gleichen
+gleichend
+gleichende
+gleichendem
+gleichenden
+gleichender
+gleichendes
+gleicher
+gleichere
+gleicherem
+gleicheren
+gleicherer
+gleicheres
+gleichermaßen
+gleicherweise
+gleiches
+gleichfalls
+gleichförmig
+gleichförmige
+gleichförmigem
+gleichförmigen
+gleichförmiger
+gleichförmiges
+gleichgekommen
+gleichgemacht
+gleichgemachte
+gleichgemachtem
+gleichgemachten
+gleichgemachter
+gleichgemachtes
+gleichgeschlechtlich
+gleichgeschlechtliche
+gleichgeschlechtlichem
+gleichgeschlechtlichen
+gleichgeschlechtlicher
+gleichgeschlechtliches
+gleichgesetzt
+gleichgesetzte
+gleichgesetztem
+gleichgesetzten
+gleichgesetzter
+gleichgesetztes
+gleichgesinnt
+gleichgesinnte
+gleichgesinntem
+gleichgesinnten
+gleichgesinnter
+gleichgesinntes
+gleichgestellt
+gleichgestellte
+gleichgestelltem
+gleichgestellten
+gleichgestellter
+gleichgestelltes
+gleichgetan
+gleichgezogen
+gleichgezogene
+gleichgezogenem
+gleichgezogenen
+gleichgezogener
+gleichgezogenes
+gleichgroß
+gleichgroße
+gleichgroßem
+gleichgroßen
+gleichgroßer
+gleichgroßes
+gleichgültig
+gleichgültige
+gleichgültigem
+gleichgültigen
+gleichgültiger
+gleichgültiges
+gleichhoch
+gleichhohe
+gleichhohem
+gleichhohen
+gleichhoher
+gleichhohes
+gleichkam
+gleichkamen
+gleichkamst
+gleichkamt
+gleichkomme
+gleichkommen
+gleichkommend
+gleichkommende
+gleichkommendem
+gleichkommenden
+gleichkommender
+gleichkommendes
+gleichkommst
+gleichkommt
+gleichkäme
+gleichkämen
+gleichlang
+gleichlange
+gleichlangem
+gleichlangen
+gleichlanger
+gleichlanges
+gleichlaufend
+gleichlaufende
+gleichlaufendem
+gleichlaufenden
+gleichlaufender
+gleichlaufendes
+gleichmache
+gleichmachen
+gleichmachend
+gleichmachende
+gleichmachendem
+gleichmachenden
+gleichmachender
+gleichmachendes
+gleichmachst
+gleichmacht
+gleichmachte
+gleichmachten
+gleichmachtest
+gleichmachtet
+gleichmäßig
+gleichmäßige
+gleichmäßigem
+gleichmäßigen
+gleichmäßiger
+gleichmäßigere
+gleichmäßigerem
+gleichmäßigeren
+gleichmäßigerer
+gleichmäßigeres
+gleichmäßiges
+gleichmäßigste
+gleichmäßigstem
+gleichmäßigsten
+gleichmäßigster
+gleichmäßigstes
+gleichmütig
+gleichmütige
+gleichmütigem
+gleichmütigen
+gleichmütiger
+gleichmütiges
+gleichnamig
+gleichnamige
+gleichnamigem
+gleichnamigen
+gleichnamiger
+gleichnamiges
+gleichnishaft
+gleichnishafte
+gleichnishaftem
+gleichnishaften
+gleichnishafter
+gleichnishaftes
+gleichrangig
+gleichrangige
+gleichrangigem
+gleichrangigen
+gleichrangiger
+gleichrangiges
+gleichsam
+gleichseitig
+gleichseitige
+gleichseitigem
+gleichseitigen
+gleichseitiger
+gleichseitiges
+gleichsetze
+gleichsetzen
+gleichsetzend
+gleichsetzende
+gleichsetzendem
+gleichsetzenden
+gleichsetzender
+gleichsetzendes
+gleichsetzest
+gleichsetzt
+gleichsetzte
+gleichsetzten
+gleichsetztest
+gleichsetztet
+gleichspannungsmäßig
+gleichst
+gleichstark
+gleichstarke
+gleichstarkem
+gleichstarken
+gleichstarker
+gleichstarkes
+gleichstehe
+gleichstehen
+gleichstehend
+gleichstehende
+gleichstehendem
+gleichstehenden
+gleichstehender
+gleichstehendes
+gleichstehst
+gleichsteht
+gleichstelle
+gleichstellen
+gleichstellend
+gleichstellende
+gleichstellendem
+gleichstellenden
+gleichstellender
+gleichstellendes
+gleichstellst
+gleichstellt
+gleichstellte
+gleichstellten
+gleichstelltest
+gleichstelltet
+gleicht
+gleichtue
+gleichtun
+gleichtust
+gleichtut
+gleichviel
+gleichviele
+gleichvielem
+gleichvielen
+gleichvieler
+gleichvieles
+gleichwertig
+gleichwertige
+gleichwertigem
+gleichwertigen
+gleichwertiger
+gleichwertiges
+gleichwohl
+gleichzeitig
+gleichzeitige
+gleichzeitigem
+gleichzeitigen
+gleichzeitiger
+gleichzeitiges
+gleichziehe
+gleichziehen
+gleichziehend
+gleichziehende
+gleichziehendem
+gleichziehenden
+gleichziehender
+gleichziehendes
+gleichziehst
+gleichzieht
+gleichzuschalten
+gleichzuschaltend
+gleichzuschaltende
+gleichzuschaltendem
+gleichzuschaltenden
+gleichzuschaltender
+gleichzuschaltendes
+gleichzusetzen
+gleichzusetzend
+gleichzusetzende
+gleichzusetzendem
+gleichzusetzenden
+gleichzusetzender
+gleichzusetzendes
+gleichzutun
+gleichzuziehen
+gleichzuziehend
+gleichzuziehende
+gleichzuziehendem
+gleichzuziehenden
+gleichzuziehender
+gleichzuziehendes
+gleite
+gleiten
+gleitend
+gleitende
+gleitendem
+gleitenden
+gleitender
+gleitendes
+gleitest
+gleitet
+gleitete
+gleiteten
+gleitetest
+gleitetet
+gleißend
+gleißende
+gleißendem
+gleißenden
+gleißender
+gleißendes
+glich
+glichen
+glichest
+glichst
+glicht
+gliedere
+gliedern
+gliedernd
+gliedernde
+gliederndem
+gliedernden
+gliedernder
+gliederndes
+gliederst
+gliedert
+gliederte
+gliederten
+gliedertest
+gliedertet
+gliedre
+glimme
+glimmen
+glimmend
+glimmende
+glimmendem
+glimmenden
+glimmender
+glimmendes
+glimmst
+glimmt
+glimmte
+glimmten
+glimmtest
+glimmtet
+glimpfqqlich
+glimpfqqliche
+glimpfqqlichem
+glimpfqqlichen
+glimpfqqlicher
+glimpfqqliches
+glitschig
+glitschige
+glitschigem
+glitschigen
+glitschiger
+glitschigere
+glitschigerem
+glitschigeren
+glitschigerer
+glitschigeres
+glitschiges
+glitschigste
+glitschigstem
+glitschigsten
+glitschigster
+glitschigstes
+glitt
+glitten
+glittest
+glittet
+glittst
+glitzere
+glitzern
+glitzernd
+glitzernde
+glitzerndem
+glitzernden
+glitzernder
+glitzerndes
+glitzerst
+glitzert
+glitzerte
+glitzerten
+glitzertest
+glitzertet
+glitzre
+global
+globale
+globalem
+globalen
+globaler
+globales
+glockenförmig
+glockenförmige
+glockenförmigem
+glockenförmigen
+glockenförmiger
+glockenförmiges
+glockig
+glockige
+glockigem
+glockigen
+glockiger
+glockiges
+glorreich
+glorreiche
+glorreichem
+glorreichen
+glorreicher
+glorreichere
+glorreicherem
+glorreicheren
+glorreicherer
+glorreicheres
+glorreiches
+glorreichste
+glorreichstem
+glorreichsten
+glorreichster
+glorreichstes
+glotze
+glotzen
+glotzend
+glotzende
+glotzendem
+glotzenden
+glotzender
+glotzendes
+glotzest
+glotzt
+glotzte
+glotzten
+glotztest
+glotztet
+gluckere
+gluckern
+gluckernd
+gluckernde
+gluckerndem
+gluckernden
+gluckernder
+gluckerndes
+gluckerst
+gluckert
+gluckerte
+gluckerten
+gluckertest
+gluckertet
+gluckre
+gluckse
+glucksen
+glucksend
+glucksende
+glucksendem
+glucksenden
+glucksender
+glucksendes
+glucksest
+gluckst
+gluckste
+glucksten
+gluckstest
+gluckstet
+glutäugig
+glutäugige
+glutäugigem
+glutäugigen
+glutäugiger
+glutäugiges
+glänze
+glänzen
+glänzend
+glänzende
+glänzendem
+glänzenden
+glänzender
+glänzendes
+glänzest
+glänzt
+glänzte
+glänzten
+glänztest
+glänztet
+gläsern
+gläserne
+gläsernem
+gläsernen
+gläserner
+gläsernes
+glätte
+glätten
+glättend
+glättende
+glättendem
+glättenden
+glättender
+glättendes
+glättest
+glättet
+glättete
+glätteten
+glättetest
+glättetet
+gläubig
+gläubige
+gläubigem
+gläubigen
+gläubiger
+gläubigere
+gläubigerem
+gläubigeren
+gläubigerer
+gläubigeres
+gläubiges
+gläubigste
+gläubigstem
+gläubigsten
+gläubigster
+gläubigstes
+glückbringend
+glückbringende
+glückbringendem
+glückbringenden
+glückbringender
+glückbringendes
+glücke
+glücken
+glückend
+glückende
+glückendem
+glückenden
+glückender
+glückendes
+glücklich
+glückliche
+glücklichem
+glücklichen
+glücklicher
+glücklichere
+glücklicherem
+glücklicheren
+glücklicherer
+glücklicheres
+glücklicherweise
+glückliches
+glücklichste
+glücklichstem
+glücklichsten
+glücklichster
+glücklichstes
+glücklos
+glücklose
+glücklosem
+glücklosen
+glückloser
+glückloses
+glückselig
+glückselige
+glückseligem
+glückseligen
+glückseliger
+glückseliges
+glückst
+glückstrahlend
+glückstrahlende
+glückstrahlendem
+glückstrahlenden
+glückstrahlender
+glückstrahlendes
+glückt
+glückte
+glückten
+glücktest
+glücktet
+glühe
+glühen
+glühend
+glühende
+glühendem
+glühenden
+glühender
+glühendes
+glühst
+glüht
+glühte
+glühten
+glühtest
+glühtet
+gnadenlos
+gnadenlose
+gnadenlosem
+gnadenlosen
+gnadenloser
+gnadenloses
+gnädig
+gnädige
+gnädigem
+gnädigen
+gnädiger
+gnädigere
+gnädigerem
+gnädigeren
+gnädigerer
+gnädigeres
+gnädigerweise
+gnädiges
+gnädigste
+gnädigstem
+gnädigsten
+gnädigster
+gnädigstes
+goldbedeckt
+goldbedeckte
+goldbedecktem
+goldbedeckten
+goldbedeckter
+goldbedecktes
+goldbesetzt
+goldbesetzte
+goldbesetztem
+goldbesetzten
+goldbesetzter
+goldbesetztes
+goldbestickt
+goldbestickte
+goldbesticktem
+goldbestickten
+goldbestickter
+goldbesticktes
+goldblond
+goldblonde
+goldblondem
+goldblonden
+goldblonder
+goldblondes
+golden
+goldene
+goldenem
+goldenen
+goldener
+goldenes
+goldgelb
+goldgelbe
+goldgelbem
+goldgelben
+goldgelber
+goldgelbes
+goldglänzend
+goldglänzende
+goldglänzendem
+goldglänzenden
+goldglänzender
+goldglänzendes
+goldhaltig
+goldhaltige
+goldhaltigem
+goldhaltigen
+goldhaltiger
+goldhaltiges
+goldig
+goldige
+goldigem
+goldigen
+goldiger
+goldiges
+goldne
+goldnem
+goldnen
+goldner
+goldnes
+goldrichtig
+goldrichtige
+goldrichtigem
+goldrichtigen
+goldrichtiger
+goldrichtiges
+gordisch
+gordische
+gordischem
+gordischen
+gordischer
+gordisches
+goss
+gossen
+gossest
+gosst
+gotisch
+gotische
+gotischem
+gotischen
+gotischer
+gotisches
+gottesfürchtig
+gottesfürchtige
+gottesfürchtigem
+gottesfürchtigen
+gottesfürchtiger
+gottesfürchtiges
+gottgegeben
+gottgegebene
+gottgegebenem
+gottgegebenen
+gottgegebener
+gottgegebenes
+gottgewollt
+gottgewollte
+gottgewolltem
+gottgewollten
+gottgewollter
+gottgewolltes
+gottgewährt
+gottgewährte
+gottgewährtem
+gottgewährten
+gottgewährter
+gottgewährtes
+gottlob
+gottlos
+gottlose
+gottlosem
+gottlosen
+gottloser
+gottloses
+gottverlassen
+gottverlassene
+gottverlassenem
+gottverlassenen
+gottverlassener
+gottverlassenes
+gouvernantenhaft
+gouvernantenhafte
+gouvernantenhaftem
+gouvernantenhaften
+gouvernantenhafter
+gouvernantenhaftes
+grabe
+graben
+grabend
+grabende
+grabendem
+grabenden
+grabender
+grabendes
+grabt
+gradlinig
+gradlinige
+gradlinigem
+gradlinigen
+gradliniger
+gradliniges
+graduell
+graduelle
+graduellem
+graduellen
+gradueller
+graduelles
+grafikfähig
+grafikfähige
+grafikfähigem
+grafikfähigen
+grafikfähiger
+grafikfähiges
+grafisch
+grafische
+grafischem
+grafischen
+grafischer
+grafisches
+grammatikalisch
+grammatikalische
+grammatikalischem
+grammatikalischen
+grammatikalischer
+grammatikalisches
+grammatisch
+grammatische
+grammatischem
+grammatischen
+grammatischer
+grammatisches
+grandios
+grandiose
+grandiosem
+grandiosen
+grandioser
+grandioses
+grantig
+grantige
+grantigem
+grantigen
+grantiger
+grantiges
+graphentheoretisch
+graphentheoretische
+graphentheoretischem
+graphentheoretischen
+graphentheoretischer
+graphentheoretisches
+graphikfähig
+graphikfähige
+graphikfähigem
+graphikfähigen
+graphikfähiger
+graphikfähiges
+graphisch
+graphische
+graphischem
+graphischen
+graphischer
+graphisches
+graphitgrau
+graphitgraue
+graphitgrauem
+graphitgrauen
+graphitgrauer
+graphitgraues
+graphologisch
+graphologische
+graphologischem
+graphologischen
+graphologischer
+graphologisches
+grase
+grasen
+grasend
+grasende
+grasendem
+grasenden
+grasender
+grasendes
+grasest
+grasgrün
+grasgrüne
+grasgrünem
+grasgrünen
+grasgrüner
+grasgrünes
+grast
+graste
+grasten
+grastest
+grastet
+gratis
+gratuliere
+gratulieren
+gratulierend
+gratulierende
+gratulierendem
+gratulierenden
+gratulierender
+gratulierendes
+gratulierst
+gratuliert
+gratulierte
+gratulierten
+gratuliertest
+gratuliertet
+grau
+graue
+grauem
+grauen
+grauenerregend
+grauenerregende
+grauenerregendem
+grauenerregenden
+grauenerregender
+grauenerregendere
+grauenerregenderem
+grauenerregenderen
+grauenerregenderer
+grauenerregenderes
+grauenerregendes
+grauenerregendste
+grauenerregendstem
+grauenerregendsten
+grauenerregendster
+grauenerregendstes
+grauenhaft
+grauenhafte
+grauenhaftem
+grauenhaften
+grauenhafter
+grauenhaftere
+grauenhafterem
+grauenhafteren
+grauenhafterer
+grauenhafteres
+grauenhaftes
+grauenhafteste
+grauenhaftestem
+grauenhaftesten
+grauenhaftester
+grauenhaftestes
+grauenvoll
+grauenvolle
+grauenvollem
+grauenvollen
+grauenvoller
+grauenvollere
+grauenvollerem
+grauenvolleren
+grauenvollerer
+grauenvolleres
+grauenvolles
+grauenvollste
+grauenvollstem
+grauenvollsten
+grauenvollster
+grauenvollstes
+grauer
+graues
+graugrün
+graugrüne
+graugrünem
+graugrünen
+graugrüner
+graugrünes
+grauhaarig
+grauhaarige
+grauhaarigem
+grauhaarigen
+grauhaariger
+grauhaariges
+grausam
+grausame
+grausamem
+grausamen
+grausamer
+grausamere
+grausamerem
+grausameren
+grausamerer
+grausameres
+grausames
+grausamste
+grausamstem
+grausamsten
+grausamster
+grausamstes
+grauschwarz
+grauschwarze
+grauschwarzem
+grauschwarzen
+grauschwarzer
+grauschwarzes
+grause
+grausen
+grausend
+grausende
+grausendem
+grausenden
+grausender
+grausendes
+grausest
+grausig
+grausige
+grausigem
+grausigen
+grausiger
+grausigere
+grausigerem
+grausigeren
+grausigerer
+grausigeres
+grausiges
+grausigste
+grausigstem
+grausigsten
+grausigster
+grausigstes
+grauslich
+grausliche
+grauslichem
+grauslichen
+grauslicher
+grausliches
+graust
+grauste
+grausten
+graustest
+graustet
+graut
+graute
+grauten
+grautest
+grautet
+grautrist
+grautriste
+grautristem
+grautristen
+grautrister
+grautristes
+grauweiß
+grauweiße
+grauweißem
+grauweißen
+grauweißer
+grauweißes
+graviere
+gravieren
+gravierend
+gravierende
+gravierendem
+gravierenden
+gravierender
+gravierendes
+gravierst
+graviert
+gravierte
+graviertem
+gravierten
+gravierter
+graviertes
+graviertest
+graviertet
+graziös
+graziöse
+graziösem
+graziösen
+graziöser
+graziöses
+greifbar
+greifbare
+greifbarem
+greifbaren
+greifbarer
+greifbares
+greife
+greifen
+greifend
+greifende
+greifendem
+greifenden
+greifender
+greifendes
+greifst
+greift
+greise
+greisem
+greisen
+greisenhaft
+greisenhafte
+greisenhaftem
+greisenhaften
+greisenhafter
+greisenhaftes
+greiser
+greises
+grell
+grelle
+grellem
+grellen
+greller
+grelles
+grellweiß
+grellweiße
+grellweißem
+grellweißen
+grellweißer
+grellweißes
+grenzbar
+grenzbare
+grenzbarem
+grenzbaren
+grenzbarer
+grenzbares
+grenze
+grenzen
+grenzend
+grenzende
+grenzendem
+grenzenden
+grenzender
+grenzendes
+grenzenlos
+grenzenlose
+grenzenlosem
+grenzenlosen
+grenzenloser
+grenzenlosere
+grenzenloserem
+grenzenloseren
+grenzenloserer
+grenzenloseres
+grenzenloses
+grenzenloseste
+grenzenlosestem
+grenzenlosesten
+grenzenlosester
+grenzenlosestes
+grenzest
+grenzprovokatorisch
+grenzprovokatorische
+grenzprovokatorischem
+grenzprovokatorischen
+grenzprovokatorischer
+grenzprovokatorisches
+grenzt
+grenzte
+grenzten
+grenztest
+grenztet
+griechisch
+griechische
+griechischem
+griechischen
+griechischer
+griechisches
+griene
+grienen
+grienend
+grienende
+grienendem
+grienenden
+grienender
+grienendes
+grienst
+grient
+griente
+grienten
+grientest
+grientet
+griesgrämig
+griesgrämige
+griesgrämigem
+griesgrämigen
+griesgrämiger
+griesgrämiges
+griff
+griffbereit
+griffbereite
+griffbereitem
+griffbereiten
+griffbereiter
+griffbereites
+griffen
+griffest
+griffig
+griffige
+griffigem
+griffigen
+griffiger
+griffigere
+griffigerem
+griffigeren
+griffigerer
+griffigeres
+griffiges
+griffigste
+griffigstem
+griffigsten
+griffigster
+griffigstes
+griffqqfest
+griffqqfeste
+griffqqfestem
+griffqqfesten
+griffqqfester
+griffqqfestes
+griffst
+grifft
+grille
+grillen
+grillst
+grillt
+grillte
+grillten
+grilltest
+grilltet
+grimmig
+grimmige
+grimmigem
+grimmigen
+grimmiger
+grimmigere
+grimmigerem
+grimmigeren
+grimmigerer
+grimmigeres
+grimmiges
+grimmigste
+grimmigstem
+grimmigsten
+grimmigster
+grimmigstes
+grinse
+grinsen
+grinsend
+grinsende
+grinsendem
+grinsenden
+grinsender
+grinsendes
+grinsest
+grinst
+grinste
+grinsten
+grinstest
+grinstet
+grob
+grobe
+grobem
+groben
+grober
+grobere
+groberem
+groberen
+groberer
+groberes
+grobes
+grobkörnig
+grobkörnige
+grobkörnigem
+grobkörnigen
+grobkörniger
+grobkörniges
+grobmaschig
+grobmaschige
+grobmaschigem
+grobmaschigen
+grobmaschiger
+grobmaschiges
+grobschlächtig
+grobschlächtige
+grobschlächtigem
+grobschlächtigen
+grobschlächtiger
+grobschlächtigere
+grobschlächtigerem
+grobschlächtigeren
+grobschlächtigerer
+grobschlächtigeres
+grobschlächtiges
+grobschlächtigste
+grobschlächtigstem
+grobschlächtigsten
+grobschlächtigster
+grobschlächtigstes
+grobste
+grobstem
+grobsten
+grobster
+grobstes
+grolle
+grollen
+grollend
+grollende
+grollendem
+grollenden
+grollender
+grollendes
+grollst
+grollt
+grollte
+grollten
+grolltest
+grolltet
+gros
+grotesk
+groteske
+groteskem
+grotesken
+grotesker
+groteskere
+groteskerem
+groteskeren
+groteskerer
+groteskeres
+groteskes
+groteskeste
+groteskestem
+groteskesten
+groteskester
+groteskestes
+groß
+großartig
+großartige
+großartigem
+großartigen
+großartiger
+großartigere
+großartigerem
+großartigeren
+großartigerer
+großartigeres
+großartiges
+großartigste
+großartigstem
+großartigsten
+großartigster
+großartigstes
+großbürgerlich
+großbürgerliche
+großbürgerlichem
+großbürgerlichen
+großbürgerlicher
+großbürgerliches
+große
+großem
+großen
+großenteils
+großer
+großes
+großflächig
+großflächige
+großflächigem
+großflächigen
+großflächiger
+großflächiges
+großformatig
+großformatige
+großformatigem
+großformatigen
+großformatiger
+großformatiges
+großgezogen
+großgezogene
+großgezogenem
+großgezogenen
+großgezogener
+großgezogenes
+großherzig
+großherzige
+großherzigem
+großherzigen
+großherziger
+großherzigere
+großherzigerem
+großherzigeren
+großherzigerer
+großherzigeres
+großherziges
+großherzigste
+großherzigstem
+großherzigsten
+großherzigster
+großherzigstes
+großindustriell
+großindustrielle
+großindustriellem
+großindustriellen
+großindustrieller
+großindustrielles
+großjährig
+großjährige
+großjährigem
+großjährigen
+großjähriger
+großjähriges
+großmütig
+großmütige
+großmütigem
+großmütigen
+großmütiger
+großmütiges
+großporig
+großporige
+großporigem
+großporigen
+großporiger
+großporiges
+großsprecherisch
+großsprecherische
+großsprecherischem
+großsprecherischen
+großsprecherischer
+großsprecherisches
+großspurig
+großspurige
+großspurigem
+großspurigen
+großspuriger
+großspuriges
+großstädtisch
+großstädtische
+großstädtischem
+großstädtischen
+großstädtischer
+großstädtisches
+großtechnisch
+großtechnische
+großtechnischem
+großtechnischen
+großtechnischer
+großtechnisches
+großtuerisch
+großtuerische
+großtuerischem
+großtuerischen
+großtuerischer
+großtuerisches
+großväterlich
+großväterliche
+großväterlichem
+großväterlichen
+großväterlicher
+großväterliches
+großziehe
+großziehen
+großziehend
+großziehende
+großziehendem
+großziehenden
+großziehender
+großziehendes
+großziehst
+großzieht
+großzügig
+großzügige
+großzügigem
+großzügigen
+großzügiger
+großzügigere
+großzügigerem
+großzügigeren
+großzügigerer
+großzügigeres
+großzügiges
+großzügigste
+großzügigstem
+großzügigsten
+großzügigster
+großzügigstes
+grub
+gruben
+grubst
+grubt
+grundehrlich
+grundehrliche
+grundehrlichem
+grundehrlichen
+grundehrlicher
+grundehrliches
+grundfalsch
+grundfalsche
+grundfalschem
+grundfalschen
+grundfalscher
+grundfalsches
+grundgesetzlich
+grundgesetzliche
+grundgesetzlichem
+grundgesetzlichen
+grundgesetzlicher
+grundgesetzliches
+grundiere
+grundieren
+grundierend
+grundierende
+grundierendem
+grundierenden
+grundierender
+grundierendes
+grundierst
+grundiert
+grundierte
+grundiertem
+grundierten
+grundierter
+grundiertes
+grundiertest
+grundiertet
+grundlegend
+grundlegende
+grundlegendem
+grundlegenden
+grundlegender
+grundlegendes
+grundlos
+grundlose
+grundlosem
+grundlosen
+grundloser
+grundloses
+grundrechtlich
+grundrechtliche
+grundrechtlichem
+grundrechtlichen
+grundrechtlicher
+grundrechtliches
+grundsolid
+grundsolide
+grundsolidem
+grundsoliden
+grundsolider
+grundsolides
+grundsätzlich
+grundsätzliche
+grundsätzlichem
+grundsätzlichen
+grundsätzlicher
+grundsätzliches
+grundverschieden
+grundverschiedene
+grundverschiedenem
+grundverschiedenen
+grundverschiedener
+grundverschiedenes
+grunze
+grunzen
+grunzend
+grunzende
+grunzendem
+grunzenden
+grunzender
+grunzendes
+grunzest
+grunzt
+grunzte
+grunzten
+grunztest
+grunztet
+gruppiere
+gruppieren
+gruppierend
+gruppierende
+gruppierendem
+gruppierenden
+gruppierender
+gruppierendes
+gruppierst
+gruppiert
+gruppierte
+gruppiertem
+gruppierten
+gruppierter
+gruppiertes
+gruppiertest
+gruppiertet
+grusele
+gruselig
+gruselige
+gruseligem
+gruseligen
+gruseliger
+gruseliges
+gruseln
+gruselnd
+gruselnde
+gruselndem
+gruselnden
+gruselnder
+gruselndes
+gruselst
+gruselt
+gruselte
+gruselten
+gruseltest
+gruseltet
+grusle
+gruslig
+gruslige
+grusligem
+grusligen
+grusliger
+grusliges
+gräbst
+gräbt
+gräme
+grämen
+grämend
+grämende
+grämendem
+grämenden
+grämender
+grämendes
+grämlich
+grämliche
+grämlichem
+grämlichen
+grämlicher
+grämliches
+grämst
+grämt
+grämte
+grämten
+grämtest
+grämtet
+grässlich
+grässliche
+grässlichem
+grässlichen
+grässlicher
+grässlichere
+grässlicherem
+grässlicheren
+grässlicherer
+grässlicheres
+grässliches
+grässlichste
+grässlichstem
+grässlichsten
+grässlichster
+grässlichstes
+grätig
+grätige
+grätigem
+grätigen
+grätiger
+grätiges
+gräulich
+gräuliche
+gräulichem
+gräulichen
+gräulicher
+gräulichere
+gräulicherem
+gräulicheren
+gräulicherer
+gräulicheres
+gräuliches
+gräulichste
+gräulichstem
+gräulichsten
+gräulichster
+gräulichstes
+gröbste
+gröbstem
+gröbsten
+gröbster
+gröbstes
+gröle
+grölen
+grölend
+grölende
+grölendem
+grölenden
+grölender
+grölendes
+grölst
+grölt
+grölte
+grölten
+gröltest
+gröltet
+größer
+größere
+größerem
+größeren
+größerer
+größeres
+größte
+größtem
+größten
+größtenteils
+größter
+größtes
+größtmöglich
+größtmögliche
+größtmöglichem
+größtmöglichen
+größtmöglicher
+größtmögliches
+grübele
+grübeln
+grübelnd
+grübelnde
+grübelndem
+grübelnden
+grübelnder
+grübelndes
+grübelst
+grübelt
+grübelte
+grübelten
+grübeltest
+grübeltet
+grüble
+grün
+gründe
+gründen
+gründend
+gründende
+gründendem
+gründenden
+gründender
+gründendes
+gründest
+gründet
+gründete
+gründeten
+gründetest
+gründetet
+gründlich
+gründliche
+gründlichem
+gründlichen
+gründlicher
+gründlichere
+gründlicherem
+gründlicheren
+gründlicherer
+gründlicheres
+gründliches
+gründlichste
+gründlichstem
+gründlichsten
+gründlichster
+gründlichstes
+grüne
+grünem
+grünen
+grünend
+grünende
+grünendem
+grünenden
+grünender
+grünendes
+grüner
+grünere
+grünerem
+grüneren
+grünerer
+grüneres
+grünes
+grünlich
+grünliche
+grünlichem
+grünlichen
+grünlicher
+grünliches
+grünst
+grünste
+grünstem
+grünsten
+grünster
+grünstes
+grünt
+grünte
+grünten
+grüntest
+grüntet
+grüß
+grüße
+grüßen
+grüßend
+grüßende
+grüßendem
+grüßenden
+grüßender
+grüßendes
+grüßest
+grüßt
+grüßte
+grüßten
+grüßtest
+grüßtet
+gschamig
+gschamige
+gschamigem
+gschamigen
+gschamiger
+gschamiges
+gschämig
+gschämige
+gschämigem
+gschämigen
+gschämiger
+gschämiges
+guck
+gucke
+gucken
+guckend
+guckende
+guckendem
+guckenden
+guckender
+guckendes
+guckst
+guckt
+guckte
+guckten
+gucktest
+gucktet
+gummiartig
+gummiartige
+gummiartigem
+gummiartigen
+gummiartiger
+gummiartiges
+gurgele
+gurgeln
+gurgelnd
+gurgelnde
+gurgelndem
+gurgelnden
+gurgelnder
+gurgelndes
+gurgelst
+gurgelt
+gurgelte
+gurgelten
+gurgeltest
+gurgeltet
+gurgle
+gusseisern
+gusseiserne
+gusseisernem
+gusseisernen
+gusseiserner
+gusseisernes
+gut
+gutartig
+gutartige
+gutartigem
+gutartigen
+gutartiger
+gutartiges
+gutbetucht
+gutbetuchte
+gutbetuchtem
+gutbetuchten
+gutbetuchter
+gutbetuchtes
+gutbürgerlich
+gutbürgerliche
+gutbürgerlichem
+gutbürgerlichen
+gutbürgerlicher
+gutbürgerliches
+gute
+gutem
+guten
+guter
+gutes
+gutfundiert
+gutfundierte
+gutfundiertem
+gutfundierten
+gutfundierter
+gutfundiertes
+gutgegangen
+gutgeheißen
+gutgeheißene
+gutgeheißenem
+gutgeheißenen
+gutgeheißener
+gutgeheißenes
+gutgeschrieben
+gutgeschriebene
+gutgeschriebenem
+gutgeschriebenen
+gutgeschriebener
+gutgeschriebenes
+gutgesinnt
+gutgesinnte
+gutgesinntem
+gutgesinnten
+gutgesinnter
+gutgesinntes
+gutgewachsen
+gutgewachsene
+gutgewachsenem
+gutgewachsenen
+gutgewachsener
+gutgewachsenes
+gutgläubig
+gutgläubige
+gutgläubigem
+gutgläubigen
+gutgläubiger
+gutgläubiges
+gutheißend
+gutheißende
+gutheißendem
+gutheißenden
+gutheißender
+gutheißendes
+gutheißt
+gutherzig
+gutherzige
+gutherzigem
+gutherzigen
+gutherziger
+gutherziges
+gutmachbar
+gutmachbare
+gutmachbarem
+gutmachbaren
+gutmachbarer
+gutmachbares
+gutmache
+gutmachen
+gutmachend
+gutmachende
+gutmachendem
+gutmachenden
+gutmachender
+gutmachendes
+gutmachst
+gutmacht
+gutmachte
+gutmachten
+gutmachtest
+gutmachtet
+gutmütig
+gutmütige
+gutmütigem
+gutmütigen
+gutmütiger
+gutmütigere
+gutmütigerem
+gutmütigeren
+gutmütigerer
+gutmütigeres
+gutmütiges
+gutmütigste
+gutmütigstem
+gutmütigsten
+gutmütigster
+gutmütigstes
+gutnachbarlich
+gutnachbarliche
+gutnachbarlichem
+gutnachbarlichen
+gutnachbarlicher
+gutnachbarliches
+gutschreibe
+gutschreiben
+gutschreibend
+gutschreibende
+gutschreibendem
+gutschreibenden
+gutschreibender
+gutschreibendes
+gutschreibst
+gutschreibt
+gutwillig
+gutwillige
+gutwilligem
+gutwilligen
+gutwilliger
+gutwilligere
+gutwilligerem
+gutwilligeren
+gutwilligerer
+gutwilligeres
+gutwilliges
+gutwilligste
+gutwilligstem
+gutwilligsten
+gutwilligster
+gutwilligstes
+gutzumachen
+gutzumachend
+gutzumachende
+gutzumachendem
+gutzumachenden
+gutzumachender
+gutzumachendes
+gutzuschreiben
+gutzuschreibend
+gutzuschreibende
+gutzuschreibendem
+gutzuschreibenden
+gutzuschreibender
+gutzuschreibendes
+gymnasial
+gymnasiale
+gymnasialem
+gymnasialen
+gymnasialer
+gymnasiales
+gymnastisch
+gymnastische
+gymnastischem
+gymnastischen
+gymnastischer
+gymnastisches
+gynäkologisch
+gynäkologische
+gynäkologischem
+gynäkologischen
+gynäkologischer
+gynäkologisches
+gäb
+gäbe
+gäben
+gäbst
+gäbt
+gähne
+gähnen
+gähnend
+gähnende
+gähnendem
+gähnenden
+gähnender
+gähnendes
+gähnst
+gähnt
+gähnte
+gähnten
+gähntest
+gähntet
+gängele
+gängeln
+gängelnd
+gängelnde
+gängelndem
+gängelnden
+gängelnder
+gängelndes
+gängelst
+gängelt
+gängelte
+gängelten
+gängeltest
+gängeltet
+gängig
+gängige
+gängigem
+gängigen
+gängiger
+gängigere
+gängigerem
+gängigeren
+gängigerer
+gängigeres
+gängiges
+gängigste
+gängigstem
+gängigsten
+gängigster
+gängigstes
+gängle
+gänzlich
+gänzliche
+gänzlichem
+gänzlichen
+gänzlicher
+gänzliches
+gäre
+gären
+gärend
+gärende
+gärendem
+gärenden
+gärender
+gärendes
+gärst
+gärt
+gärte
+gärten
+gärtest
+gärtet
+gärtnerisch
+gärtnerische
+gärtnerischem
+gärtnerischen
+gärtnerischer
+gärtnerisches
+gödelisiert
+gödelisierte
+gödelisiertem
+gödelisierten
+gödelisierter
+gödelisiertes
+gönne
+gönnen
+gönnend
+gönnende
+gönnendem
+gönnenden
+gönnender
+gönnendes
+gönnerhaft
+gönnerhafte
+gönnerhaftem
+gönnerhaften
+gönnerhafter
+gönnerhaftes
+gönnst
+gönnt
+gönnte
+gönnten
+gönntest
+gönntet
+göttlich
+göttliche
+göttlichem
+göttlichen
+göttlicher
+göttlichere
+göttlicherem
+göttlicheren
+göttlicherer
+göttlicheres
+göttliches
+göttlichste
+göttlichstem
+göttlichsten
+göttlichster
+göttlichstes
+gültig
+gültige
+gültigem
+gültigen
+gültiger
+gültiges
+günstig
+günstige
+günstigem
+günstigen
+günstigenfalls
+günstiger
+günstigere
+günstigerem
+günstigeren
+günstigerer
+günstigeres
+günstiges
+günstigst
+günstigste
+günstigstem
+günstigsten
+günstigster
+günstigstes
+gütig
+gütige
+gütigem
+gütigen
+gütiger
+gütigere
+gütigerem
+gütigeren
+gütigerer
+gütigeres
+gütiges
+gütigste
+gütigstem
+gütigsten
+gütigster
+gütigstes
+gütlich
+gütliche
+gütlichem
+gütlichen
+gütlicher
+gütliches
+haargenau
+haargenaue
+haargenauem
+haargenauen
+haargenauer
+haargenaues
+haarig
+haarige
+haarigem
+haarigen
+haariger
+haarigere
+haarigerem
+haarigeren
+haarigerer
+haarigeres
+haariges
+haarigste
+haarigstem
+haarigsten
+haarigster
+haarigstes
+haarscharf
+haarscharfe
+haarscharfem
+haarscharfen
+haarscharfer
+haarscharfes
+haarsträubend
+haarsträubende
+haarsträubendem
+haarsträubenden
+haarsträubender
+haarsträubendere
+haarsträubenderem
+haarsträubenderen
+haarsträubenderer
+haarsträubenderes
+haarsträubendes
+haarsträubendste
+haarsträubendstem
+haarsträubendsten
+haarsträubendster
+haarsträubendstes
+hab
+habe
+haben
+habend
+habende
+habendem
+habenden
+habender
+habendes
+habgierig
+habgierige
+habgierigem
+habgierigen
+habgieriger
+habgierigere
+habgierigerem
+habgierigeren
+habgierigerer
+habgierigeres
+habgieriges
+habgierigste
+habgierigstem
+habgierigsten
+habgierigster
+habgierigstes
+habhaft
+habsburgisch
+habsburgische
+habsburgischem
+habsburgischen
+habsburgischer
+habsburgisches
+habsüchtig
+habsüchtige
+habsüchtigem
+habsüchtigen
+habsüchtiger
+habsüchtiges
+habt
+hacke
+hacken
+hackend
+hackende
+hackendem
+hackenden
+hackender
+hackendes
+hackst
+hackt
+hackte
+hackten
+hacktest
+hacktet
+hadere
+hadern
+hadernd
+hadernde
+haderndem
+hadernden
+hadernder
+haderndes
+haderst
+hadert
+haderte
+haderten
+hadertest
+hadertet
+hadre
+haftbar
+haftbare
+haftbarem
+haftbaren
+haftbarer
+haftbares
+hafte
+haften
+haftend
+haftende
+haftendem
+haftenden
+haftender
+haftendes
+haftest
+haftet
+haftete
+hafteten
+haftetest
+haftetet
+haftpflichtig
+haftpflichtige
+haftpflichtigem
+haftpflichtigen
+haftpflichtiger
+haftpflichtiges
+hagele
+hageln
+hagelnd
+hagelnde
+hagelndem
+hagelnden
+hagelnder
+hagelndes
+hagelst
+hagelt
+hagelte
+hagelten
+hageltest
+hageltet
+hager
+hagere
+hagerem
+hageren
+hagerer
+hagerere
+hagererem
+hagereren
+hagererer
+hagereres
+hageres
+hagerste
+hagerstem
+hagersten
+hagerster
+hagerstes
+hagle
+hake
+haken
+hakend
+hakende
+hakendem
+hakenden
+hakender
+hakendes
+hakst
+hakt
+hakte
+hakten
+haktest
+haktet
+halb
+halbamtlich
+halbamtliche
+halbamtlichem
+halbamtlichen
+halbamtlicher
+halbamtliches
+halbautomatisch
+halbautomatische
+halbautomatischem
+halbautomatischen
+halbautomatischer
+halbautomatisches
+halbdunkel
+halbdunkle
+halbdunklem
+halbdunklen
+halbdunkler
+halbdunkles
+halbe
+halbem
+halben
+halber
+halbes
+halbfertig
+halbfertige
+halbfertigem
+halbfertigen
+halbfertiger
+halbfertiges
+halbhell
+halbhelle
+halbhellem
+halbhellen
+halbheller
+halbhelles
+halbherzig
+halbherzige
+halbherzigem
+halbherzigen
+halbherziger
+halbherziges
+halbhohe
+halbhohem
+halbhohen
+halbhoher
+halbhohes
+halbierbar
+halbierbare
+halbierbarem
+halbierbaren
+halbierbarer
+halbierbares
+halbiere
+halbieren
+halbierend
+halbierende
+halbierendem
+halbierenden
+halbierender
+halbierendes
+halbierst
+halbiert
+halbierte
+halbiertem
+halbierten
+halbierter
+halbiertes
+halbiertest
+halbiertet
+halbjährig
+halbjährige
+halbjährigem
+halbjährigen
+halbjähriger
+halbjähriges
+halbjährlich
+halbjährliche
+halbjährlichem
+halbjährlichen
+halbjährlicher
+halbjährliches
+halblang
+halblange
+halblangem
+halblangen
+halblanger
+halblanges
+halblaut
+halblaute
+halblautem
+halblauten
+halblauter
+halblautes
+halbmast
+halbnackt
+halbnackte
+halbnacktem
+halbnackten
+halbnackter
+halbnacktes
+halboffen
+halboffene
+halboffenem
+halboffenen
+halboffener
+halboffenes
+halbrekursiv
+halbrekursive
+halbrekursivem
+halbrekursiven
+halbrekursiver
+halbrekursives
+halbschlau
+halbschlaue
+halbschlauem
+halbschlauen
+halbschlauer
+halbschlaues
+halbseiden
+halbseidene
+halbseidenem
+halbseidenen
+halbseidener
+halbseidenes
+halbstark
+halbstarke
+halbstarkem
+halbstarken
+halbstarker
+halbstarkes
+halbstündig
+halbstündige
+halbstündigem
+halbstündigen
+halbstündiger
+halbstündiges
+halbtags
+halbtot
+halbtote
+halbtotem
+halbtoten
+halbtoter
+halbtotes
+halbtäglich
+halbtägliche
+halbtäglichem
+halbtäglichen
+halbtäglicher
+halbtägliches
+halbwegs
+halbwüchsig
+halbwüchsige
+halbwüchsigem
+halbwüchsigen
+halbwüchsiger
+halbwüchsiges
+half
+halfen
+halfest
+halfst
+halft
+halftere
+halftern
+halfternd
+halfternde
+halfterndem
+halfternden
+halfternder
+halfterndes
+halfterst
+halftert
+halfterte
+halfterten
+halftertest
+halftertet
+halftre
+halle
+hallen
+hallend
+hallende
+hallendem
+hallenden
+hallender
+hallendes
+hallo
+hallst
+hallt
+hallte
+hallten
+halltest
+halltet
+halluziniere
+halluzinieren
+halluzinierend
+halluzinierende
+halluzinierendem
+halluzinierenden
+halluzinierender
+halluzinierendes
+halluzinierst
+halluziniert
+halluzinierte
+halluzinierten
+halluziniertest
+halluziniertet
+halsbrecherisch
+halsbrecherische
+halsbrecherischem
+halsbrecherischen
+halsbrecherischer
+halsbrecherischere
+halsbrecherischerem
+halsbrecherischeren
+halsbrecherischerer
+halsbrecherischeres
+halsbrecherisches
+halsbrecherischste
+halsbrecherischstem
+halsbrecherischsten
+halsbrecherischster
+halsbrecherischstes
+halsstarrig
+halsstarrige
+halsstarrigem
+halsstarrigen
+halsstarriger
+halsstarriges
+haltbar
+haltbare
+haltbarem
+haltbaren
+haltbarer
+haltbarere
+haltbarerem
+haltbareren
+haltbarerer
+haltbareres
+haltbares
+haltbarste
+haltbarstem
+haltbarsten
+haltbarster
+haltbarstes
+halte
+halten
+haltend
+haltende
+haltendem
+haltenden
+haltender
+haltendes
+haltet
+haltlos
+haltlose
+haltlosem
+haltlosen
+haltloser
+haltlosere
+haltloserem
+haltloseren
+haltloserer
+haltloseres
+haltloses
+haltloseste
+haltlosestem
+haltlosesten
+haltlosester
+haltlosestes
+handbreit
+handbreite
+handbreitem
+handbreiten
+handbreiter
+handbreites
+handelbar
+handelbare
+handelbarem
+handelbaren
+handelbarer
+handelbares
+handele
+handeln
+handelnd
+handelnde
+handelndem
+handelnden
+handelnder
+handelndes
+handelseinig
+handelseinige
+handelseinigem
+handelseinigen
+handelseiniger
+handelseiniges
+handelst
+handelsüblich
+handelsübliche
+handelsüblichem
+handelsüblichen
+handelsüblicher
+handelsübliches
+handelt
+handelte
+handelten
+handeltest
+handeltet
+handfest
+handfeste
+handfestem
+handfesten
+handfester
+handfestere
+handfesterem
+handfesteren
+handfesterer
+handfesteres
+handfestes
+handfesteste
+handfestestem
+handfestesten
+handfestester
+handfestestes
+handgearbeitet
+handgearbeitete
+handgearbeitetem
+handgearbeiteten
+handgearbeiteter
+handgearbeitetes
+handgeknüpft
+handgeknüpfte
+handgeknüpftem
+handgeknüpften
+handgeknüpfter
+handgeknüpftes
+handgeschrieben
+handgeschriebene
+handgeschriebenem
+handgeschriebenen
+handgeschriebener
+handgeschriebenes
+handgewebt
+handgewebte
+handgewebtem
+handgewebten
+handgewebter
+handgewebtes
+handgreifqqlich
+handgreifqqliche
+handgreifqqlichem
+handgreifqqlichen
+handgreifqqlicher
+handgreifqqliches
+handhabbar
+handhabbare
+handhabbarem
+handhabbaren
+handhabbarer
+handhabbares
+handhabe
+handhaben
+handhabend
+handhabende
+handhabendem
+handhabenden
+handhabender
+handhabendes
+handhabt
+handle
+handlich
+handliche
+handlichem
+handlichen
+handlicher
+handlichere
+handlicherem
+handlicheren
+handlicherer
+handlicheres
+handliches
+handlichste
+handlichstem
+handlichsten
+handlichster
+handlichstes
+handlungsfähig
+handlungsfähige
+handlungsfähigem
+handlungsfähigen
+handlungsfähiger
+handlungsfähiges
+handlungsunfähig
+handlungsunfähige
+handlungsunfähigem
+handlungsunfähigen
+handlungsunfähiger
+handlungsunfähiges
+handschriftlich
+handschriftliche
+handschriftlichem
+handschriftlichen
+handschriftlicher
+handschriftliches
+handvoll
+handvolle
+handvollem
+handvollen
+handvoller
+handvolles
+handwerklich
+handwerkliche
+handwerklichem
+handwerklichen
+handwerklicher
+handwerkliches
+hanebüchen
+hanebüchene
+hanebüchenem
+hanebüchenen
+hanebüchener
+hanebüchenes
+hanseatisch
+hanseatische
+hanseatischem
+hanseatischen
+hanseatischer
+hanseatisches
+hantele
+hanteln
+hantelnd
+hantelnde
+hantelndem
+hantelnden
+hantelnder
+hantelndes
+hantelst
+hantelt
+hantelte
+hantelten
+hanteltest
+hanteltet
+hantiere
+hantieren
+hantierend
+hantierende
+hantierendem
+hantierenden
+hantierender
+hantierendes
+hantierst
+hantiert
+hantierte
+hantierten
+hantiertest
+hantiertet
+hantle
+hapere
+hapern
+hapernd
+hapernde
+haperndem
+hapernden
+hapernder
+haperndes
+haperst
+hapert
+haperte
+haperten
+hapertest
+hapertet
+hapre
+hardlock
+hardlockgeschützt
+hardlockgeschützte
+hardlockgeschütztem
+hardlockgeschützten
+hardlockgeschützter
+hardlockgeschütztes
+hardwaregleich
+hardwaregleiche
+hardwaregleichem
+hardwaregleichen
+hardwaregleicher
+hardwaregleiches
+hardwaremäßig
+hardwaremäßige
+hardwaremäßigem
+hardwaremäßigen
+hardwaremäßiger
+hardwaremäßiges
+hardwareseitig
+hardwareseitige
+hardwareseitigem
+hardwareseitigen
+hardwareseitiger
+hardwareseitiges
+hardwarespezifisch
+hardwarespezifische
+hardwarespezifischem
+hardwarespezifischen
+hardwarespezifischer
+hardwarespezifisches
+harke
+harken
+harkst
+harkt
+harkte
+harkten
+harktest
+harktet
+harmlos
+harmlose
+harmlosem
+harmlosen
+harmloser
+harmlosere
+harmloserem
+harmloseren
+harmloserer
+harmloseres
+harmloses
+harmloseste
+harmlosestem
+harmlosesten
+harmlosester
+harmlosestes
+harmoniere
+harmonieren
+harmonierend
+harmonierende
+harmonierendem
+harmonierenden
+harmonierender
+harmonierendes
+harmonierst
+harmoniert
+harmonierte
+harmonierten
+harmoniertest
+harmoniertet
+harmonisch
+harmonische
+harmonischem
+harmonischen
+harmonischer
+harmonischere
+harmonischerem
+harmonischeren
+harmonischerer
+harmonischeres
+harmonisches
+harmonischste
+harmonischstem
+harmonischsten
+harmonischster
+harmonischstes
+harmonisiere
+harmonisieren
+harmonisierend
+harmonisierende
+harmonisierendem
+harmonisierenden
+harmonisierender
+harmonisierendes
+harmonisierst
+harmonisiert
+harmonisierte
+harmonisiertem
+harmonisierten
+harmonisierter
+harmonisiertes
+harmonisiertest
+harmonisiertet
+harre
+harren
+harrend
+harrende
+harrendem
+harrenden
+harrender
+harrendes
+harrst
+harrt
+harrte
+harrten
+harrtest
+harrtet
+harsch
+harsche
+harschem
+harschen
+harscher
+harsches
+hart
+harte
+hartem
+harten
+harter
+hartes
+hartherzig
+hartherzige
+hartherzigem
+hartherzigen
+hartherziger
+hartherzigere
+hartherzigerem
+hartherzigeren
+hartherzigerer
+hartherzigeres
+hartherziges
+hartherzigste
+hartherzigstem
+hartherzigsten
+hartherzigster
+hartherzigstes
+hartnäckig
+hartnäckige
+hartnäckigem
+hartnäckigen
+hartnäckiger
+hartnäckigere
+hartnäckigerem
+hartnäckigeren
+hartnäckigerer
+hartnäckigeres
+hartnäckiges
+hartnäckigste
+hartnäckigstem
+hartnäckigsten
+hartnäckigster
+hartnäckigstes
+hasche
+haschen
+haschend
+haschende
+haschendem
+haschenden
+haschender
+haschendes
+haschest
+haschst
+hascht
+haschte
+haschten
+haschtest
+haschtet
+hasse
+hassen
+hassend
+hassende
+hassendem
+hassenden
+hassender
+hassendes
+hasserfüllt
+hasserfüllte
+hasserfülltem
+hasserfüllten
+hasserfüllter
+hasserfülltes
+hassest
+hasst
+hasste
+hassten
+hasstest
+hasstet
+hast
+haste
+hasten
+hastend
+hastende
+hastendem
+hastenden
+hastender
+hastendes
+hastest
+hastet
+hastete
+hasteten
+hastetest
+hastetet
+hastig
+hastige
+hastigem
+hastigen
+hastiger
+hastiges
+hat
+hatte
+hatten
+hattest
+hattet
+hauchdünn
+hauchdünne
+hauchdünnem
+hauchdünnen
+hauchdünner
+hauchdünnes
+hauche
+hauchen
+hauchend
+hauchende
+hauchendem
+hauchenden
+hauchender
+hauchendes
+hauchfein
+hauchfeine
+hauchfeinem
+hauchfeinen
+hauchfeiner
+hauchfeines
+hauchst
+haucht
+hauchte
+hauchten
+hauchtest
+hauchtet
+hauchzart
+hauchzarte
+hauchzartem
+hauchzarten
+hauchzarter
+hauchzartes
+haue
+hauen
+hauend
+hauende
+hauendem
+hauenden
+hauender
+hauendes
+haufenweise
+hauptamtlich
+hauptamtliche
+hauptamtlichem
+hauptamtlichen
+hauptamtlicher
+hauptamtliches
+hauptberufqqlich
+hauptberufqqliche
+hauptberufqqlichem
+hauptberufqqlichen
+hauptberufqqlicher
+hauptberufqqliches
+hauptbeteiligt
+hauptbeteiligte
+hauptbeteiligtem
+hauptbeteiligten
+hauptbeteiligter
+hauptbeteiligtes
+hauptsächlich
+hauptsächliche
+hauptsächlichem
+hauptsächlichen
+hauptsächlicher
+hauptsächlichere
+hauptsächlicherem
+hauptsächlicheren
+hauptsächlicherer
+hauptsächlicheres
+hauptsächliches
+hauptsächlichste
+hauptsächlichstem
+hauptsächlichsten
+hauptsächlichster
+hauptsächlichstes
+hausbacken
+hausbackene
+hausbackenem
+hausbackenen
+hausbackener
+hausbackenes
+hause
+hauseigen
+hauseigene
+hauseigenem
+hauseigenen
+hauseigener
+hauseigenes
+hausen
+hausend
+hausende
+hausendem
+hausenden
+hausender
+hausendes
+hausest
+hausfraulich
+hausfrauliche
+hausfraulichem
+hausfraulichen
+hausfraulicher
+hausfrauliches
+hausgemacht
+hausgemachte
+hausgemachtem
+hausgemachten
+hausgemachter
+hausgemachtes
+haushalte
+haushalten
+haushaltend
+haushaltende
+haushaltendem
+haushaltenden
+haushaltender
+haushaltendes
+haushaltet
+haushoch
+haushohe
+haushohem
+haushohen
+haushoher
+haushohes
+haushälterisch
+haushälterische
+haushälterischem
+haushälterischen
+haushälterischer
+haushälterisches
+hausiere
+hausieren
+hausierend
+hausierende
+hausierendem
+hausierenden
+hausierender
+hausierendes
+hausierst
+hausiert
+hausierte
+hausierten
+hausiertest
+hausiertet
+haust
+hauste
+hausten
+haustest
+haustet
+hauswirtschaftlich
+hauswirtschaftliche
+hauswirtschaftlichem
+hauswirtschaftlichen
+hauswirtschaftlicher
+hauswirtschaftliches
+haut
+haute
+hauten
+hauteng
+hautenge
+hautengem
+hautengen
+hautenger
+hautenges
+hautest
+hautet
+hautnah
+hautnahe
+hautnahem
+hautnahen
+hautnaher
+hautnahes
+hebe
+hebele
+hebeln
+hebelnd
+hebelnde
+hebelndem
+hebelnden
+hebelnder
+hebelndes
+hebelst
+hebelt
+hebelte
+hebelten
+hebeltest
+hebeltet
+heben
+hebend
+hebende
+hebendem
+hebenden
+hebender
+hebendes
+heble
+hebräisch
+hebräische
+hebräischem
+hebräischen
+hebräischer
+hebräisches
+hebst
+hebt
+hebte
+hebten
+hebtest
+hebtet
+hechele
+hecheln
+hechelnd
+hechelnde
+hechelndem
+hechelnden
+hechelnder
+hechelndes
+hechelst
+hechelt
+hechelte
+hechelten
+hecheltest
+hecheltet
+hechle
+hechte
+hechten
+hechtend
+hechtende
+hechtendem
+hechtenden
+hechtender
+hechtendes
+hechtest
+hechtet
+hechtete
+hechteten
+hechtetest
+hechtetet
+hecke
+hecken
+heckst
+heckt
+heckte
+heckten
+hecktest
+hecktet
+hedonistisch
+hedonistische
+hedonistischem
+hedonistischen
+hedonistischer
+hedonistisches
+hefte
+heften
+heftend
+heftende
+heftendem
+heftenden
+heftender
+heftendes
+heftest
+heftet
+heftete
+hefteten
+heftetest
+heftetet
+heftig
+heftige
+heftigem
+heftigen
+heftiger
+heftigere
+heftigerem
+heftigeren
+heftigerer
+heftigeres
+heftiges
+heftigste
+heftigstem
+heftigsten
+heftigster
+heftigstes
+hege
+hegen
+hegend
+hegende
+hegendem
+hegenden
+hegender
+hegendes
+hegst
+hegt
+hegte
+hegten
+hegtest
+hegtet
+hehle
+hehlen
+hehlend
+hehlende
+hehlendem
+hehlenden
+hehlender
+hehlendes
+hehlst
+hehlt
+hehlte
+hehlten
+hehltest
+hehltet
+heidnisch
+heidnische
+heidnischem
+heidnischen
+heidnischer
+heidnisches
+heikel
+heikelste
+heikelstem
+heikelsten
+heikelster
+heikelstes
+heikle
+heiklem
+heiklen
+heikler
+heiklere
+heiklerem
+heikleren
+heiklerer
+heikleres
+heikles
+heil
+heilbar
+heilbare
+heilbarem
+heilbaren
+heilbarer
+heilbares
+heilbringend
+heilbringende
+heilbringendem
+heilbringenden
+heilbringender
+heilbringendes
+heile
+heilem
+heilen
+heilend
+heilende
+heilendem
+heilenden
+heilender
+heilendes
+heiler
+heilere
+heilerem
+heileren
+heilerer
+heileres
+heiles
+heilfroh
+heilfrohe
+heilfrohem
+heilfrohen
+heilfroher
+heilfrohes
+heilig
+heilige
+heiligem
+heiligen
+heiliger
+heiligere
+heiligerem
+heiligeren
+heiligerer
+heiligeres
+heiliges
+heiligste
+heiligstem
+heiligsten
+heiligster
+heiligstes
+heilkräftig
+heilkräftige
+heilkräftigem
+heilkräftigen
+heilkräftiger
+heilkräftigere
+heilkräftigerem
+heilkräftigeren
+heilkräftigerer
+heilkräftigeres
+heilkräftiges
+heilkräftigste
+heilkräftigstem
+heilkräftigsten
+heilkräftigster
+heilkräftigstes
+heillos
+heillose
+heillosem
+heillosen
+heilloser
+heilloses
+heilpädagogisch
+heilpädagogische
+heilpädagogischem
+heilpädagogischen
+heilpädagogischer
+heilpädagogisches
+heilsam
+heilsame
+heilsamem
+heilsamen
+heilsamer
+heilsamere
+heilsamerem
+heilsameren
+heilsamerer
+heilsameres
+heilsames
+heilsamste
+heilsamstem
+heilsamsten
+heilsamster
+heilsamstes
+heilst
+heilste
+heilstem
+heilsten
+heilster
+heilstes
+heilt
+heilte
+heilten
+heiltest
+heiltet
+heimatlich
+heimatliche
+heimatlichem
+heimatlichen
+heimatlicher
+heimatliches
+heimatlos
+heimatlose
+heimatlosem
+heimatlosen
+heimatloser
+heimatloses
+heimattreu
+heimattreue
+heimattreuem
+heimattreuen
+heimattreuer
+heimattreues
+heimbegleite
+heimbegleiten
+heimbegleitend
+heimbegleitende
+heimbegleitendem
+heimbegleitenden
+heimbegleitender
+heimbegleitendes
+heimbegleitest
+heimbegleitet
+heimbegleitete
+heimbegleitetem
+heimbegleiteten
+heimbegleiteter
+heimbegleitetes
+heimbegleitetest
+heimbegleitetet
+heimbrachte
+heimbrachten
+heimbrachtest
+heimbrachtet
+heimbringe
+heimbringen
+heimbringend
+heimbringende
+heimbringendem
+heimbringenden
+heimbringender
+heimbringendes
+heimbringst
+heimbringt
+heimelig
+heimelige
+heimeligem
+heimeligen
+heimeliger
+heimeligere
+heimeligerem
+heimeligeren
+heimeligerer
+heimeligeres
+heimeliges
+heimeligste
+heimeligstem
+heimeligsten
+heimeligster
+heimeligstes
+heimfahre
+heimfahren
+heimfahrend
+heimfahrende
+heimfahrendem
+heimfahrenden
+heimfahrender
+heimfahrendes
+heimfahrt
+heimgegangen
+heimgegangene
+heimgegangenem
+heimgegangenen
+heimgegangener
+heimgegangenes
+heimgehe
+heimgehen
+heimgehend
+heimgehende
+heimgehendem
+heimgehenden
+heimgehender
+heimgehendes
+heimgehst
+heimgeht
+heimgekehrt
+heimgekehrte
+heimgekehrtem
+heimgekehrten
+heimgekehrter
+heimgekehrtes
+heimgekommen
+heimgekommene
+heimgekommenem
+heimgekommenen
+heimgekommener
+heimgekommenes
+heimgeleuchtet
+heimgeleuchtete
+heimgeleuchtetem
+heimgeleuchteten
+heimgeleuchteter
+heimgeleuchtetes
+heimgesucht
+heimgesuchte
+heimgesuchtem
+heimgesuchten
+heimgesuchter
+heimgesuchtes
+heimgezahlt
+heimgezahlte
+heimgezahltem
+heimgezahlten
+heimgezahlter
+heimgezahltes
+heimisch
+heimische
+heimischem
+heimischen
+heimischer
+heimisches
+heimkam
+heimkamen
+heimkamst
+heimkamt
+heimkehre
+heimkehren
+heimkehrend
+heimkehrende
+heimkehrendem
+heimkehrenden
+heimkehrender
+heimkehrendes
+heimkehrst
+heimkehrt
+heimkehrte
+heimkehrten
+heimkehrtest
+heimkehrtet
+heimkomme
+heimkommen
+heimkommend
+heimkommende
+heimkommendem
+heimkommenden
+heimkommender
+heimkommendes
+heimkommst
+heimkommt
+heimleuchte
+heimleuchten
+heimleuchtend
+heimleuchtende
+heimleuchtendem
+heimleuchtenden
+heimleuchtender
+heimleuchtendes
+heimleuchtest
+heimleuchtet
+heimleuchtete
+heimleuchteten
+heimleuchtetest
+heimleuchtetet
+heimlich
+heimliche
+heimlichem
+heimlichen
+heimlicher
+heimlichere
+heimlicherem
+heimlicheren
+heimlicherer
+heimlicheres
+heimliches
+heimlichste
+heimlichstem
+heimlichsten
+heimlichster
+heimlichstes
+heimse
+heimsen
+heimsend
+heimsende
+heimsendem
+heimsenden
+heimsender
+heimsendes
+heimsest
+heimst
+heimste
+heimsten
+heimstest
+heimstet
+heimsuche
+heimsuchen
+heimsuchend
+heimsuchende
+heimsuchendem
+heimsuchenden
+heimsuchender
+heimsuchendes
+heimsuchst
+heimsucht
+heimsuchte
+heimsuchten
+heimsuchtest
+heimsuchtet
+heimtückisch
+heimtückische
+heimtückischem
+heimtückischen
+heimtückischer
+heimtückischere
+heimtückischerem
+heimtückischeren
+heimtückischerer
+heimtückischeres
+heimtückisches
+heimtückischste
+heimtückischstem
+heimtückischsten
+heimtückischster
+heimtückischstes
+heimwehkrank
+heimwehkranke
+heimwehkrankem
+heimwehkranken
+heimwehkranker
+heimwehkrankes
+heimzahle
+heimzahlen
+heimzahlend
+heimzahlende
+heimzahlendem
+heimzahlenden
+heimzahlender
+heimzahlendes
+heimzahlst
+heimzahlt
+heimzahlte
+heimzahlten
+heimzahltest
+heimzahltet
+heimzuführen
+heimzuführend
+heimzuführende
+heimzuführendem
+heimzuführenden
+heimzuführender
+heimzuführendes
+heimzukehren
+heimzukommen
+heimzureisen
+heimzutragen
+heimzutragend
+heimzutragende
+heimzutragendem
+heimzutragenden
+heimzutragender
+heimzutragendes
+heimzuzahlen
+heimzuzahlend
+heimzuzahlende
+heimzuzahlendem
+heimzuzahlenden
+heimzuzahlender
+heimzuzahlendes
+heirate
+heiraten
+heiratend
+heiratende
+heiratendem
+heiratenden
+heiratender
+heiratendes
+heiratest
+heiratet
+heiratete
+heirateten
+heiratetest
+heiratetet
+heiser
+heisere
+heiserem
+heiseren
+heiserer
+heiseres
+heiter
+heitere
+heiterem
+heiteren
+heiterer
+heiterere
+heitererem
+heitereren
+heitererer
+heitereres
+heiteres
+heiterhell
+heiterhelle
+heiterhellem
+heiterhellen
+heiterheller
+heiterhelles
+heiterste
+heiterstem
+heitersten
+heiterster
+heiterstes
+heizbar
+heizbare
+heizbarem
+heizbaren
+heizbarer
+heizbares
+heize
+heizen
+heizend
+heizende
+heizendem
+heizenden
+heizender
+heizendes
+heizest
+heizt
+heizte
+heizten
+heiztest
+heiztet
+heiß
+heißblütig
+heißblütige
+heißblütigem
+heißblütigen
+heißblütiger
+heißblütigere
+heißblütigerem
+heißblütigeren
+heißblütigerer
+heißblütigeres
+heißblütiges
+heißblütigste
+heißblütigstem
+heißblütigsten
+heißblütigster
+heißblütigstes
+heiße
+heißem
+heißen
+heißend
+heißende
+heißendem
+heißenden
+heißender
+heißendes
+heißer
+heißere
+heißerem
+heißeren
+heißerer
+heißeres
+heißes
+heißest
+heißeste
+heißestem
+heißesten
+heißester
+heißestes
+heißhungrig
+heißhungrige
+heißhungrigem
+heißhungrigen
+heißhungriger
+heißhungriges
+heißlaufe
+heißlaufen
+heißlaufend
+heißlaufende
+heißlaufendem
+heißlaufenden
+heißlaufender
+heißlaufendes
+heißlauft
+heißt
+hektisch
+hektische
+hektischem
+hektischen
+hektischer
+hektischere
+hektischerem
+hektischeren
+hektischerer
+hektischeres
+hektisches
+hektischste
+hektischstem
+hektischsten
+hektischster
+hektischstes
+heldenhaft
+heldenhafte
+heldenhaftem
+heldenhaften
+heldenhafter
+heldenhaftere
+heldenhafterem
+heldenhafteren
+heldenhafterer
+heldenhafteres
+heldenhaftes
+heldenhafteste
+heldenhaftestem
+heldenhaftesten
+heldenhaftester
+heldenhaftestes
+heldenmütig
+heldenmütige
+heldenmütigem
+heldenmütigen
+heldenmütiger
+heldenmütiges
+heldisch
+heldische
+heldischem
+heldischen
+heldischer
+heldisches
+helfe
+helfen
+helfend
+helfende
+helfendem
+helfenden
+helfender
+helfendes
+helft
+hell
+hellbeige
+hellbeigem
+hellbeigen
+hellbeiger
+hellbeiges
+hellblau
+hellblaue
+hellblauem
+hellblauen
+hellblauer
+hellblaues
+hellblond
+hellblonde
+hellblondem
+hellblonden
+hellblonder
+hellblondes
+helle
+hellem
+hellen
+hellend
+hellende
+hellendem
+hellenden
+hellender
+hellendes
+hellenisch
+hellenische
+hellenischem
+hellenischen
+hellenischer
+hellenisches
+hellenistisch
+hellenistische
+hellenistischem
+hellenistischen
+hellenistischer
+hellenistisches
+heller
+hellere
+hellerem
+helleren
+hellerer
+helleres
+helles
+hellgelb
+hellgelbe
+hellgelbem
+hellgelben
+hellgelber
+hellgelbes
+hellgrau
+hellgraue
+hellgrauem
+hellgrauen
+hellgrauer
+hellgraues
+hellgrüner
+hellgrünere
+hellgrünerem
+hellgrüneren
+hellgrünerer
+hellgrüneres
+hellhäutig
+hellhäutige
+hellhäutigem
+hellhäutigen
+hellhäutiger
+hellhäutiges
+hellhörig
+hellhörige
+hellhörigem
+hellhörigen
+hellhöriger
+hellhöriges
+helllicht
+helllichte
+helllichtem
+helllichten
+helllichter
+helllichtes
+hellseherisch
+hellseherische
+hellseherischem
+hellseherischen
+hellseherischer
+hellseherisches
+hellsichtig
+hellsichtige
+hellsichtigem
+hellsichtigen
+hellsichtiger
+hellsichtigere
+hellsichtigerem
+hellsichtigeren
+hellsichtigerer
+hellsichtigeres
+hellsichtiges
+hellsichtigste
+hellsichtigstem
+hellsichtigsten
+hellsichtigster
+hellsichtigstes
+hellst
+hellste
+hellstem
+hellsten
+hellster
+hellstes
+hellt
+hellte
+hellten
+helltest
+helltet
+helltönend
+helltönende
+helltönendem
+helltönenden
+helltönender
+helltönendes
+hellwach
+hellwache
+hellwachem
+hellwachen
+hellwacher
+hellwaches
+helvetisch
+helvetische
+helvetischem
+helvetischen
+helvetischer
+helvetisches
+hemdsärmelig
+hemdsärmelige
+hemdsärmeligem
+hemdsärmeligen
+hemdsärmeliger
+hemdsärmeliges
+hemdsärmeln
+hemdsärmelne
+hemdsärmelnem
+hemdsärmelnen
+hemdsärmelner
+hemdsärmelnes
+hemdsärmlig
+hemdsärmlige
+hemdsärmligem
+hemdsärmligen
+hemdsärmliger
+hemdsärmliges
+hemme
+hemmen
+hemmend
+hemmende
+hemmendem
+hemmenden
+hemmender
+hemmendes
+hemmst
+hemmt
+hemmte
+hemmten
+hemmtest
+hemmtet
+hemmungslos
+hemmungslose
+hemmungslosem
+hemmungslosen
+hemmungsloser
+hemmungslosere
+hemmungsloserem
+hemmungsloseren
+hemmungsloserer
+hemmungsloseres
+hemmungsloses
+hemmungsloseste
+hemmungslosestem
+hemmungslosesten
+hemmungslosester
+hemmungslosestes
+her
+herab
+herabgefallen
+herabgefallene
+herabgefallenem
+herabgefallenen
+herabgefallener
+herabgefallenes
+herabgelassen
+herabgelassene
+herabgelassenem
+herabgelassenen
+herabgelassener
+herabgelassenes
+herabgesetzt
+herabgesetzte
+herabgesetztem
+herabgesetzten
+herabgesetzter
+herabgesetztes
+herabgezogene
+herablasse
+herablassen
+herablassend
+herablassende
+herablassendem
+herablassenden
+herablassender
+herablassendes
+herablasst
+herabrinnst
+herabrinnt
+herabsacke
+herabsacken
+herabsackst
+herabsackt
+herabsackte
+herabsackten
+herabsacktest
+herabsacktet
+herabsetze
+herabsetzen
+herabsetzend
+herabsetzende
+herabsetzendem
+herabsetzenden
+herabsetzender
+herabsetzendes
+herabsetzest
+herabsetzt
+herabsetzte
+herabsetzten
+herabsetztest
+herabsetztet
+heran
+heranbrachte
+heranbrachten
+heranbrachtest
+heranbrachtet
+herandonnern
+herandonnernd
+herandonnernde
+herandonnerndem
+herandonnernden
+herandonnernder
+herandonnerndes
+heranfuhr
+heranfuhren
+heranfuhrst
+heranfuhrt
+herangeführt
+herangeführte
+herangeführtem
+herangeführten
+herangeführter
+herangeführtes
+herangegangen
+herangegangene
+herangegangenem
+herangegangenen
+herangegangener
+herangegangenes
+herangehe
+herangehen
+herangehend
+herangehende
+herangehendem
+herangehenden
+herangehender
+herangehendes
+herangehst
+herangeht
+herangekommen
+herangekommene
+herangekommenem
+herangekommenen
+herangekommener
+herangekommenes
+herangemacht
+herangerückt
+herangerückte
+herangerücktem
+herangerückten
+herangerückter
+herangerücktes
+herangeschleppt
+herangeschleppte
+herangeschlepptem
+herangeschleppten
+herangeschleppter
+herangeschlepptes
+herangeschlichen
+herangeschlichene
+herangeschlichenem
+herangeschlichenen
+herangeschlichener
+herangeschlichenes
+herangetragen
+herangewachsen
+herangewachsene
+herangewachsenem
+herangewachsenen
+herangewachsener
+herangewachsenes
+herangezogen
+herangezogene
+herangezogenem
+herangezogenen
+herangezogener
+herangezogenes
+heranging
+herangingen
+herangingst
+herangingt
+herankam
+herankamen
+herankamst
+herankamt
+herankomme
+herankommen
+herankommend
+herankommende
+herankommendem
+herankommenden
+herankommender
+herankommendes
+herankommst
+herankommt
+heranmache
+heranmachen
+heranmachend
+heranmachende
+heranmachendem
+heranmachenden
+heranmachender
+heranmachendes
+heranmachst
+heranmacht
+heranmachte
+heranmachten
+heranmachtest
+heranmachtet
+herantrage
+herantragen
+herantragend
+herantragende
+herantragendem
+herantragenden
+herantragender
+herantragendes
+herantragt
+herantrat
+herantraten
+herantratest
+herantratet
+herantratst
+herantrete
+herantreten
+herantretend
+herantretende
+herantretendem
+herantretenden
+herantretender
+herantretendes
+herantretet
+herantritt
+herantrittst
+heranwächst
+heranziehe
+heranziehen
+heranziehend
+heranziehende
+heranziehendem
+heranziehenden
+heranziehender
+heranziehendes
+heranziehst
+heranzieht
+heranzog
+heranzogen
+heranzogst
+heranzogt
+heranzuführen
+heranzuführend
+heranzuführende
+heranzuführendem
+heranzuführenden
+heranzuführender
+heranzuführendes
+heranzukommen
+herauf
+heraufbeschwor
+heraufbeschworen
+heraufbeschworst
+heraufbeschwort
+heraufbeschwöre
+heraufbeschwören
+heraufbeschwörend
+heraufbeschwörende
+heraufbeschwörendem
+heraufbeschwörenden
+heraufbeschwörender
+heraufbeschwörendes
+heraufbeschwörst
+heraufbeschwört
+heraufbeschwörte
+heraufbeschwörtem
+heraufbeschwörten
+heraufbeschwörter
+heraufbeschwörtes
+heraufbeschwörtest
+heraufbeschwörtet
+heraufgekommen
+heraufgekommene
+heraufgekommenem
+heraufgekommenen
+heraufgekommener
+heraufgekommenes
+heraufgesetzt
+heraufgesetzte
+heraufgesetztem
+heraufgesetzten
+heraufgesetzter
+heraufgesetztes
+heraufgestiegen
+heraufgestiegene
+heraufgestiegenem
+heraufgestiegenen
+heraufgestiegener
+heraufgestiegenes
+heraufgezogen
+heraufgezogene
+heraufgezogenem
+heraufgezogenen
+heraufgezogener
+heraufgezogenes
+heraufkam
+heraufkams
+heraus
+herausarbeite
+herausarbeiten
+herausarbeitend
+herausarbeitende
+herausarbeitendem
+herausarbeitenden
+herausarbeitender
+herausarbeitendes
+herausarbeitest
+herausarbeitet
+herausarbeitete
+herausarbeiteten
+herausarbeitetest
+herausarbeitetet
+herausbekomme
+herausbekommen
+herausbekommene
+herausbekommenem
+herausbekommenen
+herausbekommener
+herausbekommenes
+herausbekommst
+herausbekommt
+herausdestilliere
+herausdestillieren
+herausdestillierst
+herausdestilliert
+herausdestillierte
+herausdestilliertem
+herausdestillierten
+herausdestillierter
+herausdestilliertes
+herausdestilliertest
+herausdestilliertet
+herausfinde
+herausfinden
+herausfindend
+herausfindende
+herausfindendem
+herausfindenden
+herausfindender
+herausfindendes
+herausfindest
+herausfindet
+herausfordere
+herausfordern
+herausfordernd
+herausfordernde
+herausforderndem
+herausfordernden
+herausfordernder
+herausforderndes
+herausforderst
+herausfordert
+herausforderte
+herausforderten
+herausfordertest
+herausfordertet
+herausfordre
+herausfuhr
+herausfuhren
+herausfuhrst
+herausfuhrt
+herausfällst
+herausfällt
+herausführe
+herausführen
+herausführst
+herausführt
+herausführte
+herausführten
+herausführtest
+herausführtet
+herausgab
+herausgaben
+herausgabst
+herausgabt
+herausgearbeitet
+herausgebe
+herausgeben
+herausgebend
+herausgebende
+herausgebendem
+herausgebenden
+herausgebender
+herausgebendes
+herausgebildet
+herausgebildete
+herausgebildetem
+herausgebildeten
+herausgebildeter
+herausgebildetes
+herausgebracht
+herausgebrachte
+herausgebrachtem
+herausgebrachten
+herausgebrachter
+herausgebrachtes
+herausgebt
+herausgefordert
+herausgeforderte
+herausgefordertem
+herausgeforderten
+herausgeforderter
+herausgefordertes
+herausgefunden
+herausgefundene
+herausgefundenem
+herausgefundenen
+herausgefundener
+herausgefundenes
+herausgefördert
+herausgeförderte
+herausgefördertem
+herausgeförderten
+herausgeförderter
+herausgefördertes
+herausgeführt
+herausgeführte
+herausgeführtem
+herausgeführten
+herausgeführter
+herausgeführtes
+herausgegangen
+herausgegangene
+herausgegangenem
+herausgegangenen
+herausgegangener
+herausgegangenes
+herausgegeben
+herausgegebene
+herausgegebenem
+herausgegebenen
+herausgegebener
+herausgegebenes
+herausgegriffen
+herausgegriffene
+herausgegriffenem
+herausgegriffenen
+herausgegriffener
+herausgegriffenes
+herausgehalten
+herausgehaltene
+herausgehaltenem
+herausgehaltenen
+herausgehaltener
+herausgehaltenes
+herausgehe
+herausgehen
+herausgehend
+herausgehende
+herausgehendem
+herausgehenden
+herausgehender
+herausgehendes
+herausgehoben
+herausgehobene
+herausgehobenem
+herausgehobenen
+herausgehobener
+herausgehobenes
+herausgehst
+herausgeht
+herausgehört
+herausgehörte
+herausgehörtem
+herausgehörten
+herausgehörter
+herausgehörtes
+herausgekommen
+herausgekommene
+herausgekommenem
+herausgekommenen
+herausgekommener
+herausgekommenes
+herausgekriegt
+herausgekriegte
+herausgekriegtem
+herausgekriegten
+herausgekriegter
+herausgekriegtes
+herausgelassen
+herausgelassene
+herausgelassenem
+herausgelassenen
+herausgelassener
+herausgelassenes
+herausgelockt
+herausgelockte
+herausgelocktem
+herausgelockten
+herausgelockter
+herausgelocktes
+herausgeplatzt
+herausgeplatzte
+herausgeplatztem
+herausgeplatzten
+herausgeplatzter
+herausgeplatztes
+herausgeredet
+herausgeredete
+herausgeredetem
+herausgeredeten
+herausgeredeter
+herausgeredetes
+herausgerissen
+herausgerissene
+herausgerissenem
+herausgerissenen
+herausgerissener
+herausgerissenes
+herausgerufen
+herausgerufene
+herausgerufenem
+herausgerufenen
+herausgerufener
+herausgerufenes
+herausgerutscht
+herausgerutschte
+herausgerutschtem
+herausgerutschten
+herausgerutschter
+herausgerutschtes
+herausgerückt
+herausgerückte
+herausgerücktem
+herausgerückten
+herausgerückter
+herausgerücktes
+herausgeschickt
+herausgeschickte
+herausgeschicktem
+herausgeschickten
+herausgeschickter
+herausgeschicktes
+herausgestellt
+herausgestellte
+herausgestelltem
+herausgestellten
+herausgestellter
+herausgestelltes
+herausgestoppt
+herausgestoppte
+herausgestopptem
+herausgestoppten
+herausgestoppter
+herausgestopptes
+herausgestreckt
+herausgestreckte
+herausgestrecktem
+herausgestreckten
+herausgestreckter
+herausgestrecktes
+herausgetreten
+herausgetretene
+herausgetretenem
+herausgetretenen
+herausgetretener
+herausgetretenes
+herausgewagt
+herausgewagte
+herausgewagtem
+herausgewagten
+herausgewagter
+herausgewagtes
+herausgeworfen
+herausgeworfene
+herausgeworfenem
+herausgeworfenen
+herausgeworfener
+herausgeworfenes
+heraushebe
+herausheben
+heraushebend
+heraushebende
+heraushebendem
+heraushebenden
+heraushebender
+heraushebendes
+heraushebst
+heraushebt
+heraushole
+herausholen
+herausholend
+herausholende
+herausholendem
+herausholenden
+herausholender
+herausholendes
+herausholst
+herausholt
+herausholte
+herausholten
+herausholtest
+herausholtet
+herauskam
+herauskamen
+herauskamst
+herauskamt
+herauskomme
+herauskommen
+herauskommend
+herauskommende
+herauskommendem
+herauskommenden
+herauskommender
+herauskommendes
+herauskommst
+herauskommt
+herauskriege
+herauskriegen
+herauskriegend
+herauskriegende
+herauskriegendem
+herauskriegenden
+herauskriegender
+herauskriegendes
+herauskriegst
+herauskriegt
+herauskriegte
+herauskriegten
+herauskriegtest
+herauskriegtet
+herauskristallisiere
+herauskristallisieren
+herauskristallisierst
+herauskristallisiert
+herauskristallisierte
+herauskristallisiertem
+herauskristallisierten
+herauskristallisierter
+herauskristallisiertes
+herauskristallisiertest
+herauskristallisiertet
+herausließ
+herausließen
+herausließest
+herausließt
+herausnehme
+herausnehmen
+herausnehmend
+herausnehmende
+herausnehmendem
+herausnehmenden
+herausnehmender
+herausnehmendes
+herausnehmt
+herausrage
+herausragen
+herausragend
+herausragende
+herausragendem
+herausragenden
+herausragender
+herausragendes
+herausragst
+herausragt
+herausragte
+herausragten
+herausragtest
+herausragtet
+herausriesele
+herausrieseln
+herausrieselst
+herausrieselt
+herausrieselte
+herausrieselten
+herausrieseltest
+herausrieseltet
+herausriesle
+herausspringen
+herausstelle
+herausstellen
+herausstellend
+herausstellende
+herausstellendem
+herausstellenden
+herausstellender
+herausstellendes
+herausstellst
+herausstellt
+herausstellte
+herausstellten
+herausstelltest
+herausstelltet
+heraussuche
+heraussuchen
+heraussuchend
+heraussuchende
+heraussuchendem
+heraussuchenden
+heraussuchender
+heraussuchendes
+heraussuchst
+heraussucht
+heraussuchte
+heraussuchten
+heraussuchtest
+heraussuchtet
+heraustrat
+heraustraten
+heraustratest
+heraustratet
+heraustratst
+herausziehe
+herausziehen
+herausziehend
+herausziehende
+herausziehendem
+herausziehenden
+herausziehender
+herausziehendes
+herausziehst
+herauszieht
+herauszuangeln
+herauszuangelnd
+herauszuangelnde
+herauszuangelndem
+herauszuangelnden
+herauszuangelnder
+herauszuangelndes
+herauszuarbeiten
+herauszuarbeitend
+herauszuarbeitende
+herauszuarbeitendem
+herauszuarbeitenden
+herauszuarbeitender
+herauszuarbeitendes
+herauszubekommen
+herauszubekommend
+herauszubekommende
+herauszubekommendem
+herauszubekommenden
+herauszubekommender
+herauszubekommendes
+herauszufinden
+herauszufindend
+herauszufindende
+herauszufindendem
+herauszufindenden
+herauszufindender
+herauszufindendes
+herauszufordern
+herauszufordernd
+herauszufordernde
+herauszuforderndem
+herauszufordernden
+herauszufordernder
+herauszuforderndes
+herauszugeben
+herauszugebend
+herauszugebende
+herauszugebendem
+herauszugebenden
+herauszugebender
+herauszugebendes
+herauszukriegen
+herauszukriegend
+herauszukriegende
+herauszukriegendem
+herauszukriegenden
+herauszukriegender
+herauszukriegendes
+herauszulösen
+herauszulösend
+herauszulösende
+herauszulösendem
+herauszulösenden
+herauszulösender
+herauszulösendes
+herauszuverstärken
+herauszuverstärkend
+herauszuverstärkende
+herauszuverstärkendem
+herauszuverstärkenden
+herauszuverstärkender
+herauszuverstärkendes
+herauszuziehen
+herauszuziehend
+herauszuziehende
+herauszuziehendem
+herauszuziehenden
+herauszuziehender
+herauszuziehendes
+herb
+herbe
+herbei
+herbeiführe
+herbeiführen
+herbeiführend
+herbeiführende
+herbeiführendem
+herbeiführenden
+herbeiführender
+herbeiführendes
+herbeiführst
+herbeiführt
+herbeiführte
+herbeiführten
+herbeiführtest
+herbeiführtet
+herbeigeführt
+herbeigeführte
+herbeigeführtem
+herbeigeführten
+herbeigeführter
+herbeigeführtes
+herbeigeholt
+herbeigeholte
+herbeigeholtem
+herbeigeholten
+herbeigeholter
+herbeigeholtes
+herbeigeredet
+herbeigeredete
+herbeigeredetem
+herbeigeredeten
+herbeigeredeter
+herbeigeredetes
+herbeigerufen
+herbeigerufene
+herbeigerufenem
+herbeigerufenen
+herbeigerufener
+herbeigerufenes
+herbeigeschafft
+herbeigeschaffte
+herbeigeschafftem
+herbeigeschafften
+herbeigeschaffter
+herbeigeschafftes
+herbeigesehnt
+herbeigesehnte
+herbeigesehntem
+herbeigesehnten
+herbeigesehnter
+herbeigesehntes
+herbeigezogen
+herbeigezogene
+herbeigezogenem
+herbeigezogenen
+herbeigezogener
+herbeigezogenes
+herbeischaffe
+herbeischaffen
+herbeischaffend
+herbeischaffende
+herbeischaffendem
+herbeischaffenden
+herbeischaffender
+herbeischaffendes
+herbeischaffst
+herbeischafft
+herbeischaffte
+herbeischafften
+herbeischafftest
+herbeischafftet
+herbeisehne
+herbeisehnen
+herbeisehnst
+herbeisehnt
+herbeisehnte
+herbeisehnten
+herbeisehntest
+herbeisehntet
+herbem
+herben
+herber
+herbere
+herberem
+herberen
+herberer
+herberes
+herbes
+herbestelle
+herbestellen
+herbestellend
+herbestellende
+herbestellendem
+herbestellenden
+herbestellender
+herbestellendes
+herbestellst
+herbestellt
+herbestellte
+herbestelltem
+herbestellten
+herbestellter
+herbestelltes
+herbestelltest
+herbestelltet
+herblättere
+herblättern
+herblätterst
+herblättert
+herblätterte
+herblätterten
+herblättertest
+herblättertet
+herblättre
+herbringe
+herbringen
+herbringend
+herbringende
+herbringendem
+herbringenden
+herbringender
+herbringendes
+herbringst
+herbringt
+herbste
+herbstem
+herbsten
+herbster
+herbstes
+herbstlich
+herbstliche
+herbstlichem
+herbstlichen
+herbstlicher
+herbstliches
+hereinbitte
+hereinbitten
+hereinbittend
+hereinbittende
+hereinbittendem
+hereinbittenden
+hereinbittender
+hereinbittendes
+hereinbittest
+hereinbittet
+hereinbrichst
+hereinbricht
+hereinfalle
+hereinfallen
+hereinfallend
+hereinfallende
+hereinfallendem
+hereinfallenden
+hereinfallender
+hereinfallendes
+hereinfallt
+hereingebeten
+hereingebetene
+hereingebetenem
+hereingebetenen
+hereingebetener
+hereingebetenes
+hereingebracht
+hereingebrachte
+hereingebrachtem
+hereingebrachten
+hereingebrachter
+hereingebrachtes
+hereingebrochen
+hereingebrochene
+hereingebrochenem
+hereingebrochenen
+hereingebrochener
+hereingebrochenes
+hereingefallen
+hereingefallene
+hereingefallenem
+hereingefallenen
+hereingefallener
+hereingefallenes
+hereingekommen
+hereingekommene
+hereingekommenem
+hereingekommenen
+hereingekommener
+hereingekommenes
+hereingelassen
+hereingelassene
+hereingelassenem
+hereingelassenen
+hereingelassener
+hereingelassenes
+hereingelegt
+hereingelegte
+hereingelegtem
+hereingelegten
+hereingelegter
+hereingelegtes
+hereingeschaut
+hereinkam
+hereinkamen
+hereinkamst
+hereinkamt
+hereinkomme
+hereinkommen
+hereinkommend
+hereinkommende
+hereinkommendem
+hereinkommenden
+hereinkommender
+hereinkommendes
+hereinkommst
+hereinkommt
+hereinlasse
+hereinlassen
+hereinlassend
+hereinlassende
+hereinlassendem
+hereinlassenden
+hereinlassender
+hereinlassendes
+hereinlasst
+hereinlege
+hereinlegen
+hereinlegend
+hereinlegende
+hereinlegendem
+hereinlegenden
+hereinlegender
+hereinlegendes
+hereinlegst
+hereinlegt
+hereinlegte
+hereinlegten
+hereinlegtest
+hereinlegtet
+hereinplatze
+hereinplatzen
+hereinplatzend
+hereinplatzende
+hereinplatzendem
+hereinplatzenden
+hereinplatzender
+hereinplatzendes
+hereinplatzest
+hereinplatzt
+hereinplatzte
+hereinplatzten
+hereinplatztest
+hereinplatztet
+hereinrage
+hereinragen
+hereinragend
+hereinragende
+hereinragendem
+hereinragenden
+hereinragender
+hereinragendes
+hereinragst
+hereinragt
+hereinragte
+hereinragten
+hereinragtest
+hereinragtet
+hereinschaue
+hereinschauen
+hereinschauend
+hereinschauende
+hereinschauendem
+hereinschauenden
+hereinschauender
+hereinschauendes
+hereinschaust
+hereinschaut
+hereinschaute
+hereinschauten
+hereinschautest
+hereinschautet
+hereinzubitten
+hereinzubittend
+hereinzubittende
+hereinzubittendem
+hereinzubittenden
+hereinzubittender
+hereinzubittendes
+hereinzufallen
+hereinzuholen
+hereinzuholend
+hereinzuholende
+hereinzuholendem
+hereinzuholenden
+hereinzuholender
+hereinzuholendes
+herfalle
+herfallen
+herfallend
+herfallende
+herfallendem
+herfallenden
+herfallender
+herfallendes
+herfallt
+herfiel
+herfielen
+herfielst
+herfielt
+herfuhr
+herfuhren
+herfuhrst
+herfuhrt
+hergebe
+hergeben
+hergebend
+hergebende
+hergebendem
+hergebenden
+hergebender
+hergebendes
+hergebracht
+hergebrachte
+hergebrachtem
+hergebrachten
+hergebrachter
+hergebrachtes
+hergebt
+hergefallen
+hergefallene
+hergefallenem
+hergefallenen
+hergefallener
+hergefallenes
+hergegeben
+hergegebene
+hergegebenem
+hergegebenen
+hergegebener
+hergegebenes
+hergehe
+hergehen
+hergehend
+hergehende
+hergehendem
+hergehenden
+hergehender
+hergehendes
+hergehst
+hergeht
+hergekommen
+hergekommene
+hergekommenem
+hergekommenen
+hergekommener
+hergekommenes
+hergelaufen
+hergelaufene
+hergelaufenem
+hergelaufenen
+hergelaufener
+hergelaufenes
+hergeleitet
+hergeleitete
+hergeleitetem
+hergeleiteten
+hergeleiteter
+hergeleitetes
+hergemacht
+hergemachte
+hergemachtem
+hergemachten
+hergemachter
+hergemachtes
+hergenommen
+hergenommene
+hergenommenem
+hergenommenen
+hergenommener
+hergenommenes
+hergerichtet
+hergerichtete
+hergerichtetem
+hergerichteten
+hergerichteter
+hergerichtetes
+hergerufen
+hergerufene
+hergerufenem
+hergerufenen
+hergerufener
+hergerufenes
+hergerührt
+hergerührte
+hergerührtem
+hergerührten
+hergerührter
+hergerührtes
+hergeschaltet
+hergeschickt
+hergeschickte
+hergeschicktem
+hergeschickten
+hergeschickter
+hergeschicktes
+hergeschoben
+hergeschobene
+hergeschobenem
+hergeschobenen
+hergeschobener
+hergeschobenes
+hergeschrieben
+hergeschriebene
+hergeschriebenem
+hergeschriebenen
+hergeschriebener
+hergeschriebenes
+hergesehen
+hergestammt
+hergestellt
+hergestellte
+hergestelltem
+hergestellten
+hergestellter
+hergestelltes
+hergewagt
+hergewagte
+hergewagtem
+hergewagten
+hergewagter
+hergewagtes
+hergezogen
+hergezogene
+hergezogenem
+hergezogenen
+hergezogener
+hergezogenes
+hergibst
+hergibt
+herging
+hergingen
+hergingst
+hergingt
+herhalte
+herhalten
+herhaltend
+herhaltende
+herhaltendem
+herhaltenden
+herhaltender
+herhaltendes
+herhaltet
+herkam
+herkamen
+herkamst
+herkamt
+herkomme
+herkommen
+herkommend
+herkommende
+herkommendem
+herkommenden
+herkommender
+herkommendes
+herkommst
+herkommt
+herkömmlich
+herkömmliche
+herkömmlichem
+herkömmlichen
+herkömmlicher
+herkömmliches
+herlaufe
+herlaufen
+herlaufend
+herlaufende
+herlaufendem
+herlaufenden
+herlaufender
+herlaufendes
+herlauft
+herleitbar
+herleitbare
+herleitbarem
+herleitbaren
+herleitbarer
+herleitbares
+herleite
+herleiten
+herleitend
+herleitende
+herleitendem
+herleitenden
+herleitender
+herleitendes
+herleitest
+herleitet
+herleitete
+herleiteten
+herleitetest
+herleitetet
+herlief
+herliefen
+herliefest
+herliefst
+herlieft
+herlocke
+herlocken
+herlockend
+herlockende
+herlockendem
+herlockenden
+herlockender
+herlockendes
+herlockst
+herlockt
+herlockte
+herlockten
+herlocktest
+herlocktet
+hermache
+hermachen
+hermachend
+hermachende
+hermachendem
+hermachenden
+hermachender
+hermachendes
+hermachst
+hermacht
+hermachte
+hermachten
+hermachtest
+hermachtet
+hermetisch
+hermetische
+hermetischem
+hermetischen
+hermetischer
+hermetisches
+hernach
+hernehme
+hernehmen
+hernehmend
+hernehmende
+hernehmendem
+hernehmenden
+hernehmender
+hernehmendes
+hernehmt
+hernieder
+heroisch
+heroische
+heroischem
+heroischen
+heroischer
+heroisches
+herrenlos
+herrenlose
+herrenlosem
+herrenlosen
+herrenloser
+herrenloses
+herrichte
+herrichten
+herrichtend
+herrichtende
+herrichtendem
+herrichtenden
+herrichtender
+herrichtendes
+herrichtest
+herrichtet
+herrichtete
+herrichteten
+herrichtetest
+herrichtetet
+herrisch
+herrische
+herrischem
+herrischen
+herrischer
+herrischere
+herrischerem
+herrischeren
+herrischerer
+herrischeres
+herrisches
+herrischste
+herrischstem
+herrischsten
+herrischster
+herrischstes
+herrlich
+herrliche
+herrlichem
+herrlichen
+herrlicher
+herrlichere
+herrlicherem
+herrlicheren
+herrlicherer
+herrlicheres
+herrliches
+herrlichste
+herrlichstem
+herrlichsten
+herrlichster
+herrlichstes
+herrschaftlich
+herrschaftliche
+herrschaftlichem
+herrschaftlichen
+herrschaftlicher
+herrschaftliches
+herrsche
+herrschen
+herrschend
+herrschende
+herrschendem
+herrschenden
+herrschender
+herrschendes
+herrschest
+herrschst
+herrscht
+herrschte
+herrschten
+herrschtest
+herrschtet
+herrufe
+herrufen
+herrufend
+herrufende
+herrufendem
+herrufenden
+herrufender
+herrufendes
+herrufst
+herruft
+herrühre
+herrühren
+herrührend
+herrührende
+herrührendem
+herrührenden
+herrührender
+herrührendes
+herrührst
+herrührt
+herrührte
+herrührten
+herrührtest
+herrührtet
+herschiebe
+herschieben
+herschiebend
+herschiebende
+herschiebendem
+herschiebenden
+herschiebender
+herschiebendes
+herschiebst
+herschiebt
+hersehe
+hersehen
+hersehend
+hersehende
+hersehendem
+hersehenden
+hersehender
+hersehendes
+herseht
+herstellbar
+herstellbare
+herstellbarem
+herstellbaren
+herstellbarer
+herstellbares
+herstelle
+herstellen
+herstellend
+herstellende
+herstellendem
+herstellenden
+herstellender
+herstellendes
+herstellst
+herstellt
+herstellte
+herstellten
+herstelltest
+herstelltet
+herum
+herumfuchtele
+herumfuchteln
+herumfuchtelnd
+herumfuchtelnde
+herumfuchtelndem
+herumfuchtelnden
+herumfuchtelnder
+herumfuchtelndes
+herumfuchtelst
+herumfuchtelt
+herumfuchtelte
+herumfuchtelten
+herumfuchteltest
+herumfuchteltet
+herumfuchtle
+herumgedreht
+herumgedrehte
+herumgedrehtem
+herumgedrehten
+herumgedrehter
+herumgedrehtes
+herumgeführt
+herumgeführte
+herumgeführtem
+herumgeführten
+herumgeführter
+herumgeführtes
+herumgelaufen
+herumgelungert
+herumgelungerte
+herumgelungertem
+herumgelungerten
+herumgelungerter
+herumgelungertes
+herumgereicht
+herumgereichte
+herumgereichtem
+herumgereichten
+herumgereichter
+herumgereichtes
+herumgereist
+herumgereiste
+herumgereistem
+herumgereisten
+herumgereister
+herumgereistes
+herumgeritten
+herumgerittene
+herumgerittenem
+herumgerittenen
+herumgerittener
+herumgerittenes
+herumgeschlagen
+herumgeschlagene
+herumgeschlagenem
+herumgeschlagenen
+herumgeschlagener
+herumgeschlagenes
+herumgesprochen
+herumgestanden
+herumgestandene
+herumgestandenem
+herumgestandenen
+herumgestandener
+herumgestandenes
+herumgestoßen
+herumgestoßene
+herumgestoßenem
+herumgestoßenen
+herumgestoßener
+herumgestoßenes
+herumgetrieben
+herumgetriebene
+herumgetriebenem
+herumgetriebenen
+herumgetriebener
+herumgetriebenes
+herumgezogen
+herumgezogene
+herumgezogenem
+herumgezogenen
+herumgezogener
+herumgezogenes
+herumknattere
+herumknattern
+herumknatterst
+herumknattert
+herumknatterte
+herumknatterten
+herumknattertest
+herumknattertet
+herumknattre
+herumkommandiere
+herumkommandieren
+herumkommandierend
+herumkommandierende
+herumkommandierendem
+herumkommandierenden
+herumkommandierender
+herumkommandierendes
+herumkommandierst
+herumkommandiert
+herumkommandierte
+herumkommandiertem
+herumkommandierten
+herumkommandierter
+herumkommandiertes
+herumkommandiertest
+herumkommandiertet
+herumkreuze
+herumkreuzen
+herumkreuzest
+herumkreuzt
+herumkreuzte
+herumkreuzten
+herumkreuztest
+herumkreuztet
+herumkriege
+herumkriegen
+herumkriegend
+herumkriegende
+herumkriegendem
+herumkriegenden
+herumkriegender
+herumkriegendes
+herumkriegst
+herumkriegt
+herumkriegte
+herumkriegten
+herumkriegtest
+herumkriegtet
+herumlaufe
+herumlaufen
+herumlaufend
+herumlaufende
+herumlaufendem
+herumlaufenden
+herumlaufender
+herumlaufendes
+herumlauft
+herumliege
+herumliegen
+herumliegend
+herumliegende
+herumliegendem
+herumliegenden
+herumliegender
+herumliegendes
+herumliegst
+herumliegt
+herumläufst
+herumläuft
+herumnörgele
+herumnörgeln
+herumnörgelnd
+herumnörgelnde
+herumnörgelndem
+herumnörgelnden
+herumnörgelnder
+herumnörgelndes
+herumnörgelst
+herumnörgelt
+herumnörgelte
+herumnörgelten
+herumnörgeltest
+herumnörgeltet
+herumnörgle
+herumreiche
+herumreichen
+herumreichend
+herumreichende
+herumreichendem
+herumreichenden
+herumreichender
+herumreichendes
+herumreichst
+herumreicht
+herumreichte
+herumreichten
+herumreichtest
+herumreichtet
+herumreiße
+herumreißen
+herumreißest
+herumreißt
+herumschlage
+herumschlagen
+herumschlagend
+herumschlagende
+herumschlagendem
+herumschlagenden
+herumschlagender
+herumschlagendes
+herumschlagt
+herumspreche
+herumsprechen
+herumsprechend
+herumsprechende
+herumsprechendem
+herumsprechenden
+herumsprechender
+herumsprechendes
+herumsprecht
+herumstehe
+herumstehen
+herumstehend
+herumstehende
+herumstehendem
+herumstehenden
+herumstehender
+herumstehendes
+herumstehst
+herumsteht
+herumticke
+herumticken
+herumtickend
+herumtickende
+herumtickendem
+herumtickenden
+herumtickender
+herumtickendes
+herumtickst
+herumtickt
+herumtickte
+herumtickten
+herumticktest
+herumticktet
+herumtrage
+herumtragen
+herumtragt
+herumtreibe
+herumtreiben
+herumtreibend
+herumtreibende
+herumtreibendem
+herumtreibenden
+herumtreibender
+herumtreibendes
+herumtreibst
+herumtreibt
+herumwirbele
+herumwirbeln
+herumwirbelst
+herumwirbelt
+herumwirbelte
+herumwirbelten
+herumwirbeltest
+herumwirbeltet
+herumwirble
+herumwirtschafte
+herumwirtschaften
+herumwirtschaftest
+herumwirtschaftet
+herumwirtschaftete
+herumwirtschafteten
+herumwirtschaftetest
+herumwirtschaftetet
+herumzeige
+herumzeigen
+herumzeigend
+herumzeigende
+herumzeigendem
+herumzeigenden
+herumzeigender
+herumzeigendes
+herumzeigst
+herumzeigt
+herumzeigte
+herumzeigten
+herumzeigtest
+herumzeigtet
+herumzulaufen
+herumzuschlagen
+herumzustochern
+herunter
+herunterfalle
+herunterfallen
+herunterfallend
+herunterfallende
+herunterfallendem
+herunterfallenden
+herunterfallender
+herunterfallendes
+herunterfallt
+herunterfällst
+herunterfällt
+heruntergebracht
+heruntergebrachte
+heruntergebrachtem
+heruntergebrachten
+heruntergebrachter
+heruntergebrachtes
+heruntergedrückt
+heruntergefallen
+heruntergefallene
+heruntergefallenem
+heruntergefallenen
+heruntergefallener
+heruntergefallenes
+heruntergeholt
+heruntergeholte
+heruntergeholtem
+heruntergeholten
+heruntergeholter
+heruntergeholtes
+heruntergekommen
+heruntergekommene
+heruntergekommenem
+heruntergekommenen
+heruntergekommener
+heruntergekommenes
+heruntergeschraubt
+heruntergeschraubte
+heruntergeschraubtem
+heruntergeschraubten
+heruntergeschraubter
+heruntergeschraubtes
+heruntergespielt
+heruntergespielte
+heruntergespieltem
+heruntergespielten
+heruntergespielter
+heruntergespieltes
+heruntergewirtschaftet
+heruntergewirtschaftete
+heruntergewirtschaftetem
+heruntergewirtschafteten
+heruntergewirtschafteter
+heruntergewirtschaftetes
+herunterhandele
+herunterhandeln
+herunterhandelnd
+herunterhandelnde
+herunterhandelndem
+herunterhandelnden
+herunterhandelnder
+herunterhandelndes
+herunterhandelst
+herunterhandelt
+herunterhandelte
+herunterhandelten
+herunterhandeltest
+herunterhandeltet
+herunterhandle
+herunterhüpft
+herunterkam
+herunterkamen
+herunterkamst
+herunterkamt
+herunterkomme
+herunterkommen
+herunterkommend
+herunterkommende
+herunterkommendem
+herunterkommenden
+herunterkommender
+herunterkommendes
+herunterkommst
+herunterkommt
+herunterlief
+herunterliefen
+herunterliefest
+herunterliefst
+herunterlieft
+herunterpoltere
+herunterpoltern
+herunterpolternd
+herunterpolternde
+herunterpolterndem
+herunterpolternden
+herunterpolternder
+herunterpolterndes
+herunterpolterst
+herunterpoltert
+herunterpolterte
+herunterpolterten
+herunterpoltertest
+herunterpoltertet
+herunterpoltre
+herunterriss
+herunterrissen
+herunterrissest
+herunterrisst
+herunterspiele
+herunterspielen
+herunterspielend
+herunterspielende
+herunterspielendem
+herunterspielenden
+herunterspielender
+herunterspielendes
+herunterspielst
+herunterspielt
+herunterspielte
+herunterspielten
+herunterspieltest
+herunterspieltet
+herunterzukommen
+herunterzuspielen
+hervor
+hervorbrachte
+hervorbrachten
+hervorbrachtest
+hervorbrachtet
+hervorbringe
+hervorbringen
+hervorbringend
+hervorbringende
+hervorbringendem
+hervorbringenden
+hervorbringender
+hervorbringendes
+hervorbringst
+hervorbringt
+hervorgebracht
+hervorgebrachte
+hervorgebrachtem
+hervorgebrachten
+hervorgebrachter
+hervorgebrachtes
+hervorgegangen
+hervorgegangene
+hervorgegangenem
+hervorgegangenen
+hervorgegangener
+hervorgegangenes
+hervorgehe
+hervorgehen
+hervorgehend
+hervorgehende
+hervorgehendem
+hervorgehenden
+hervorgehender
+hervorgehendes
+hervorgehoben
+hervorgehobene
+hervorgehobenem
+hervorgehobenen
+hervorgehobener
+hervorgehobenes
+hervorgeholt
+hervorgeholte
+hervorgeholtem
+hervorgeholten
+hervorgeholter
+hervorgeholtes
+hervorgehst
+hervorgeht
+hervorgeragt
+hervorgeragte
+hervorgeragtem
+hervorgeragten
+hervorgeragter
+hervorgeragtes
+hervorgerufen
+hervorgerufene
+hervorgerufenem
+hervorgerufenen
+hervorgerufener
+hervorgerufenes
+hervorgesagt
+hervorgesagte
+hervorgesagtem
+hervorgesagten
+hervorgesagter
+hervorgesagtes
+hervorgetan
+hervorging
+hervorgingen
+hervorgingst
+hervorgingt
+hervorhebe
+hervorheben
+hervorhebend
+hervorhebende
+hervorhebendem
+hervorhebenden
+hervorhebender
+hervorhebendes
+hervorhebst
+hervorhebt
+hervorhebte
+hervorhebten
+hervorhebtest
+hervorhebtet
+hervorhob
+hervorhoben
+hervorhobst
+hervorhobt
+hervorrage
+hervorragen
+hervorragend
+hervorragende
+hervorragendem
+hervorragenden
+hervorragender
+hervorragendere
+hervorragenderem
+hervorragenderen
+hervorragenderer
+hervorragenderes
+hervorragendes
+hervorragendste
+hervorragendstem
+hervorragendsten
+hervorragendster
+hervorragendstes
+hervorragst
+hervorragt
+hervorragte
+hervorragten
+hervorragtest
+hervorragtet
+hervorrief
+hervorriefen
+hervorriefest
+hervorriefst
+hervorrieft
+hervorrufe
+hervorrufen
+hervorrufend
+hervorrufende
+hervorrufendem
+hervorrufenden
+hervorrufender
+hervorrufendes
+hervorrufst
+hervorruft
+hervortritt
+hervortrittst
+hervortue
+hervortun
+hervortust
+hervortut
+hervorzubringen
+hervorzubringend
+hervorzubringende
+hervorzubringendem
+hervorzubringenden
+hervorzubringender
+hervorzubringendes
+hervorzuheben
+hervorzuhebend
+hervorzuhebende
+hervorzuhebendem
+hervorzuhebenden
+hervorzuhebender
+hervorzuhebendes
+hervorzurufen
+hervorzurufend
+hervorzurufende
+hervorzurufendem
+hervorzurufenden
+hervorzurufender
+hervorzurufendes
+herwage
+herwagen
+herwagend
+herwagende
+herwagendem
+herwagenden
+herwagender
+herwagendes
+herwagst
+herwagt
+herwagte
+herwagten
+herwagtest
+herwagtet
+herzensgut
+herzensgute
+herzensgutem
+herzensguten
+herzensguter
+herzensgutes
+herzerfrischend
+herzerfrischende
+herzerfrischendem
+herzerfrischenden
+herzerfrischender
+herzerfrischendes
+herzergreifend
+herzergreifende
+herzergreifendem
+herzergreifenden
+herzergreifender
+herzergreifendes
+herzförmig
+herzförmige
+herzförmigem
+herzförmigen
+herzförmiger
+herzförmiges
+herzhaft
+herzhafte
+herzhaftem
+herzhaften
+herzhafter
+herzhaftes
+herziehe
+herziehen
+herziehend
+herziehende
+herziehendem
+herziehenden
+herziehender
+herziehendes
+herziehst
+herzieht
+herzig
+herzige
+herzigem
+herzigen
+herziger
+herzigere
+herzigerem
+herzigeren
+herzigerer
+herzigeres
+herziges
+herzigste
+herzigstem
+herzigsten
+herzigster
+herzigstes
+herzkrank
+herzkranke
+herzkrankem
+herzkranken
+herzkranker
+herzkrankes
+herzlich
+herzliche
+herzlichem
+herzlichen
+herzlicher
+herzlichere
+herzlicherem
+herzlicheren
+herzlicherer
+herzlicheres
+herzliches
+herzlichst
+herzlichste
+herzlichstem
+herzlichsten
+herzlichster
+herzlichstes
+herzlos
+herzlose
+herzlosem
+herzlosen
+herzloser
+herzlosere
+herzloserem
+herzloseren
+herzloserer
+herzloseres
+herzloses
+herzloseste
+herzlosestem
+herzlosesten
+herzlosester
+herzlosestes
+herzog
+herzogen
+herzoglich
+herzogliche
+herzoglichem
+herzoglichen
+herzoglicher
+herzogliches
+herzogst
+herzogt
+herzstärkend
+herzstärkende
+herzstärkendem
+herzstärkenden
+herzstärkender
+herzstärkendes
+herzubitten
+herzubittend
+herzubittende
+herzubittendem
+herzubittenden
+herzubittender
+herzubittendes
+herzufallen
+herzugeben
+herzugebend
+herzugebende
+herzugebendem
+herzugebenden
+herzugebender
+herzugebendes
+herzulaufen
+herzuleiten
+herzuleitend
+herzuleitende
+herzuleitendem
+herzuleitenden
+herzuleitender
+herzuleitendes
+herzustellen
+herzustellend
+herzustellende
+herzustellendem
+herzustellenden
+herzustellender
+herzustellendes
+herüber
+herübergekommen
+herübergekommene
+herübergekommenem
+herübergekommenen
+herübergekommener
+herübergekommenes
+herüberkomme
+herüberkommen
+herüberkommend
+herüberkommende
+herüberkommendem
+herüberkommenden
+herüberkommender
+herüberkommendes
+herüberkommst
+herüberkommt
+herüberscholl
+hessisch
+hessische
+hessischem
+hessischen
+hessischer
+hessisches
+heterogen
+heterogene
+heterogenem
+heterogenen
+heterogener
+heterogenes
+heterosexuell
+heterosexuelle
+heterosexuellem
+heterosexuellen
+heterosexueller
+heterosexuelles
+hetze
+hetzen
+hetzend
+hetzende
+hetzendem
+hetzenden
+hetzender
+hetzendes
+hetzest
+hetzig
+hetzige
+hetzigem
+hetzigen
+hetziger
+hetziges
+hetzt
+hetzte
+hetzten
+hetztest
+hetztet
+heuchele
+heucheln
+heuchelnd
+heuchelnde
+heuchelndem
+heuchelnden
+heuchelnder
+heuchelndes
+heuchelst
+heuchelt
+heuchelte
+heuchelten
+heucheltest
+heucheltet
+heuchle
+heuchlerisch
+heuchlerische
+heuchlerischem
+heuchlerischen
+heuchlerischer
+heuchlerischere
+heuchlerischerem
+heuchlerischeren
+heuchlerischerer
+heuchlerischeres
+heuchlerisches
+heuchlerischste
+heuchlerischstem
+heuchlerischsten
+heuchlerischster
+heuchlerischstes
+heuer
+heuere
+heuern
+heuerst
+heuert
+heuerte
+heuerten
+heuertest
+heuertet
+heule
+heulen
+heulend
+heulende
+heulendem
+heulenden
+heulender
+heulendes
+heulst
+heult
+heulte
+heulten
+heultest
+heultet
+heure
+heureka
+heuristisch
+heuristische
+heuristischem
+heuristischen
+heuristischer
+heuristisches
+heute
+heutig
+heutige
+heutigem
+heutigen
+heutiger
+heutiges
+heutzutage
+hexadezimal
+hexadezimale
+hexadezimalem
+hexadezimalen
+hexadezimaler
+hexadezimales
+hexe
+hexen
+hexend
+hexende
+hexendem
+hexenden
+hexender
+hexendes
+hexest
+hext
+hexte
+hexten
+hextest
+hextet
+hielt
+hielte
+hielten
+hieltest
+hieltet
+hieltst
+hienieden
+hier
+hieran
+hierarchisch
+hierarchische
+hierarchischem
+hierarchischen
+hierarchischer
+hierarchisches
+hierauf
+hieraus
+hierbei
+hierdurch
+hierein
+hierfür
+hiergegen
+hierher
+hierhin
+hierin
+hiermit
+hiernach
+hierunter
+hiervon
+hierzu
+hierzulande
+hierüber
+hiesig
+hiesige
+hiesigem
+hiesigen
+hiesiger
+hiesiges
+hieß
+hieße
+hießen
+hießest
+hießt
+hilf
+hilfebedürftig
+hilfebedürftige
+hilfebedürftigem
+hilfebedürftigen
+hilfebedürftiger
+hilfebedürftiges
+hilfqqlos
+hilfqqlose
+hilfqqlosem
+hilfqqlosen
+hilfqqloser
+hilfqqlosere
+hilfqqloserem
+hilfqqloseren
+hilfqqloserer
+hilfqqloseres
+hilfqqloses
+hilfqqloseste
+hilfqqlosestem
+hilfqqlosesten
+hilfqqlosester
+hilfqqlosestes
+hilfreich
+hilfreiche
+hilfreichem
+hilfreichen
+hilfreicher
+hilfreiches
+hilfsbedürftig
+hilfsbedürftige
+hilfsbedürftigem
+hilfsbedürftigen
+hilfsbedürftiger
+hilfsbedürftiges
+hilfsbereit
+hilfsbereite
+hilfsbereitem
+hilfsbereiten
+hilfsbereiter
+hilfsbereitere
+hilfsbereiterem
+hilfsbereiteren
+hilfsbereiterer
+hilfsbereiteres
+hilfsbereites
+hilfsbereiteste
+hilfsbereitestem
+hilfsbereitesten
+hilfsbereitester
+hilfsbereitestes
+hilfst
+hilft
+himbeerrot
+himbeerrote
+himbeerrotem
+himbeerroten
+himbeerroter
+himbeerrotes
+himmelblau
+himmelblaue
+himmelblauem
+himmelblauen
+himmelblauer
+himmelblaues
+himmelhoch
+himmelweit
+himmelweite
+himmelweitem
+himmelweiten
+himmelweiter
+himmelweitere
+himmelweiterem
+himmelweiteren
+himmelweiterer
+himmelweiteres
+himmelweites
+himmelweiteste
+himmelweitestem
+himmelweitesten
+himmelweitester
+himmelweitestes
+himmelwärts
+himmlisch
+himmlische
+himmlischem
+himmlischen
+himmlischer
+himmlischere
+himmlischerem
+himmlischeren
+himmlischerer
+himmlischeres
+himmlisches
+himmlischste
+himmlischstem
+himmlischsten
+himmlischster
+himmlischstes
+hin
+hinab
+hinabgegangen
+hinabgegangene
+hinabgegangenem
+hinabgegangenen
+hinabgegangener
+hinabgegangenes
+hinabgestiegen
+hinabgestiegene
+hinabgestiegenem
+hinabgestiegenen
+hinabgestiegener
+hinabgestiegenes
+hinan
+hinauf
+hinaufgegangen
+hinaufgegangene
+hinaufgegangenem
+hinaufgegangenen
+hinaufgegangener
+hinaufgegangenes
+hinaufgeklettert
+hinaufgesetzt
+hinaufgesetzte
+hinaufgesetztem
+hinaufgesetzten
+hinaufgesetzter
+hinaufgesetztes
+hinaufqqfuhr
+hinaufqqfuhren
+hinaufqqfuhrst
+hinaufqqfuhrt
+hinaufzuklettern
+hinaus
+hinausbegleite
+hinausbegleiten
+hinausbegleitend
+hinausbegleitende
+hinausbegleitendem
+hinausbegleitenden
+hinausbegleitender
+hinausbegleitendes
+hinausbegleitest
+hinausbegleitet
+hinausbegleitete
+hinausbegleiteten
+hinausbegleitetest
+hinausbegleitetet
+hinausfuhr
+hinausfuhren
+hinausfuhrst
+hinausfuhrt
+hinausführst
+hinausführt
+hinausgehe
+hinausgehen
+hinausgehend
+hinausgehende
+hinausgehendem
+hinausgehenden
+hinausgehender
+hinausgehendes
+hinausgehst
+hinausgeht
+hinausgekommen
+hinausgekommene
+hinausgekommenem
+hinausgekommenen
+hinausgekommener
+hinausgekommenes
+hinausgeleitet
+hinausgeleitete
+hinausgeleitetem
+hinausgeleiteten
+hinausgeleiteter
+hinausgeleitetes
+hinausgeschleudert
+hinausgeschleuderte
+hinausgeschleudertem
+hinausgeschleuderten
+hinausgeschleuderter
+hinausgeschleudertes
+hinausgeschossen
+hinausgeschossene
+hinausgeschossenem
+hinausgeschossenen
+hinausgeschossener
+hinausgeschossenes
+hinausging
+hinausgingen
+hinausgingst
+hinausgingt
+hinaushebe
+hinausheben
+hinaushebend
+hinaushebende
+hinaushebendem
+hinaushebenden
+hinaushebender
+hinaushebendes
+hinaushebst
+hinaushebt
+hinauslaufe
+hinauslaufen
+hinauslaufend
+hinauslaufende
+hinauslaufendem
+hinauslaufenden
+hinauslaufender
+hinauslaufendes
+hinauslauft
+hinauslief
+hinausliefen
+hinausliefest
+hinausliefst
+hinauslieft
+hinausläufst
+hinausläuft
+hinausschiebe
+hinausschieben
+hinausschiebend
+hinausschiebende
+hinausschiebendem
+hinausschiebenden
+hinausschiebender
+hinausschiebendes
+hinausschiebst
+hinausschiebt
+hinaustrat
+hinaustraten
+hinaustratest
+hinaustratet
+hinaustratst
+hinauswerfe
+hinauswerfen
+hinauswerfend
+hinauswerfende
+hinauswerfendem
+hinauswerfenden
+hinauswerfender
+hinauswerfendes
+hinauswerft
+hinauszuschieben
+hinauszuschiebend
+hinauszuschiebende
+hinauszuschiebendem
+hinauszuschiebenden
+hinauszuschiebender
+hinauszuschiebendes
+hinauszuzögern
+hinauszuzögernd
+hinauszuzögernde
+hinauszuzögerndem
+hinauszuzögernden
+hinauszuzögernder
+hinauszuzögerndes
+hinauszögere
+hinauszögern
+hinauszögernd
+hinauszögernde
+hinauszögerndem
+hinauszögernden
+hinauszögernder
+hinauszögerndes
+hinauszögerst
+hinauszögert
+hinauszögerte
+hinauszögerten
+hinauszögertest
+hinauszögertet
+hinauszögre
+hinblicke
+hinblicken
+hinblickst
+hinblickt
+hinblickte
+hinblickten
+hinblicktest
+hinblicktet
+hinbringe
+hinbringen
+hinbringend
+hinbringende
+hinbringendem
+hinbringenden
+hinbringender
+hinbringendes
+hinbringst
+hinbringt
+hindere
+hinderlich
+hinderliche
+hinderlichem
+hinderlichen
+hinderlicher
+hinderlichere
+hinderlicherem
+hinderlicheren
+hinderlicherer
+hinderlicheres
+hinderliches
+hinderlichste
+hinderlichstem
+hinderlichsten
+hinderlichster
+hinderlichstes
+hindern
+hindernd
+hindernde
+hinderndem
+hindernden
+hindernder
+hinderndes
+hinderst
+hindert
+hinderte
+hinderten
+hindertest
+hindertet
+hindeute
+hindeuten
+hindeutend
+hindeutende
+hindeutendem
+hindeutenden
+hindeutender
+hindeutendes
+hindeutest
+hindeutet
+hindeutete
+hindeuteten
+hindeutetest
+hindeutetet
+hindre
+hinduistisch
+hinduistische
+hinduistischem
+hinduistischen
+hinduistischer
+hinduistisches
+hindurch
+hindurchführe
+hindurchführen
+hindurchführend
+hindurchführende
+hindurchführendem
+hindurchführenden
+hindurchführender
+hindurchführendes
+hindurchführst
+hindurchführt
+hindurchführte
+hindurchführten
+hindurchführtest
+hindurchführtet
+hindurchgegangen
+hindurchging
+hindurchgingen
+hindurchgingst
+hindurchgingt
+hindurchsehe
+hindurchsehen
+hindurchsehend
+hindurchsehende
+hindurchsehendem
+hindurchsehenden
+hindurchsehender
+hindurchsehendes
+hindurchseht
+hindurchzuschauen
+hindämmere
+hindämmern
+hindämmernd
+hindämmernde
+hindämmerndem
+hindämmernden
+hindämmernder
+hindämmerndes
+hindämmerst
+hindämmert
+hindämmerte
+hindämmerten
+hindämmertest
+hindämmertet
+hindämmre
+hineile
+hineilen
+hineilend
+hineilende
+hineilendem
+hineilenden
+hineilender
+hineilendes
+hineilst
+hineilt
+hineilte
+hineilten
+hineiltest
+hineiltet
+hinein
+hineindränge
+hineindrängen
+hineindrängend
+hineindrängende
+hineindrängendem
+hineindrängenden
+hineindrängender
+hineindrängendes
+hineindrängst
+hineindrängt
+hineindrängte
+hineindrängten
+hineindrängtest
+hineindrängtet
+hineinfalle
+hineinfallen
+hineinfallend
+hineinfallende
+hineinfallendem
+hineinfallenden
+hineinfallender
+hineinfallendes
+hineinfallt
+hineingearbeitet
+hineingearbeitete
+hineingearbeitetem
+hineingearbeiteten
+hineingearbeiteter
+hineingearbeitetes
+hineingedacht
+hineingedachte
+hineingedachtem
+hineingedachten
+hineingedachter
+hineingedachtes
+hineingefallen
+hineingefallene
+hineingefallenem
+hineingefallenen
+hineingefallener
+hineingefallenes
+hineingegangen
+hineingegangene
+hineingegangenem
+hineingegangenen
+hineingegangener
+hineingegangenes
+hineingehe
+hineingehen
+hineingehend
+hineingehende
+hineingehendem
+hineingehenden
+hineingehender
+hineingehendes
+hineingehst
+hineingeht
+hineingehöre
+hineingehören
+hineingehörend
+hineingehörende
+hineingehörendem
+hineingehörenden
+hineingehörender
+hineingehörendes
+hineingehörst
+hineingehört
+hineingehörte
+hineingehörten
+hineingehörtest
+hineingehörtet
+hineingelegt
+hineingelegte
+hineingelegtem
+hineingelegten
+hineingelegter
+hineingelegtes
+hineingerate
+hineingeraten
+hineingeratend
+hineingeratende
+hineingeratendem
+hineingeratenden
+hineingeratender
+hineingeratendes
+hineingeratene
+hineingeratenem
+hineingeratenen
+hineingeratener
+hineingeratenes
+hineingeratet
+hineingestellt
+hineingestellte
+hineingestelltem
+hineingestellten
+hineingestellter
+hineingestelltes
+hineinlasse
+hineinlassen
+hineinlassend
+hineinlassende
+hineinlassendem
+hineinlassenden
+hineinlassender
+hineinlassendes
+hineinlasst
+hineinlege
+hineinlegen
+hineinlegend
+hineinlegende
+hineinlegendem
+hineinlegenden
+hineinlegender
+hineinlegendes
+hineinlegst
+hineinlegt
+hineinlegte
+hineinlegten
+hineinlegtest
+hineinlegtet
+hineinmünde
+hineinmünden
+hineinmündend
+hineinmündende
+hineinmündendem
+hineinmündenden
+hineinmündender
+hineinmündendes
+hineinmündest
+hineinmündet
+hineinmündete
+hineinmündeten
+hineinmündetest
+hineinmündetet
+hineinpasse
+hineinpassen
+hineinpassest
+hineinpasst
+hineinpasste
+hineinpassten
+hineinpasstest
+hineinpasstet
+hineinplatze
+hineinplatzen
+hineinplatzend
+hineinplatzende
+hineinplatzendem
+hineinplatzenden
+hineinplatzender
+hineinplatzendes
+hineinplatzest
+hineinplatzt
+hineinplatzte
+hineinplatzten
+hineinplatztest
+hineinplatztet
+hineinrufe
+hineinrufen
+hineinrufend
+hineinrufende
+hineinrufendem
+hineinrufenden
+hineinrufender
+hineinrufendes
+hineinrufst
+hineinruft
+hineinschiebe
+hineinschieben
+hineinschiebst
+hineinschiebt
+hineinwirke
+hineinwirken
+hineinwirkend
+hineinwirkende
+hineinwirkendem
+hineinwirkenden
+hineinwirkender
+hineinwirkendes
+hineinwirkst
+hineinwirkt
+hineinwirkte
+hineinwirkten
+hineinwirktest
+hineinwirktet
+hineinzugehen
+hineinzulegen
+hineinzulegend
+hineinzulegende
+hineinzulegendem
+hineinzulegenden
+hineinzulegender
+hineinzulegendes
+hinfahre
+hinfahren
+hinfahrend
+hinfahrende
+hinfahrendem
+hinfahrenden
+hinfahrender
+hinfahrendes
+hinfahrt
+hinfalle
+hinfallen
+hinfallend
+hinfallende
+hinfallendem
+hinfallenden
+hinfallender
+hinfallendes
+hinfallt
+hinfuhr
+hinfuhren
+hinfuhrst
+hinfuhrt
+hinfällig
+hinfällige
+hinfälligem
+hinfälligen
+hinfälliger
+hinfälliges
+hing
+hingab
+hingaben
+hingabst
+hingabt
+hinge
+hingebe
+hingeben
+hingebend
+hingebende
+hingebendem
+hingebenden
+hingebender
+hingebendes
+hingebracht
+hingebrachte
+hingebrachtem
+hingebrachten
+hingebrachter
+hingebrachtes
+hingebt
+hingebungsvoll
+hingebungsvolle
+hingebungsvollem
+hingebungsvollen
+hingebungsvoller
+hingebungsvollere
+hingebungsvollerem
+hingebungsvolleren
+hingebungsvollerer
+hingebungsvolleres
+hingebungsvolles
+hingebungsvollste
+hingebungsvollstem
+hingebungsvollsten
+hingebungsvollster
+hingebungsvollstes
+hingedeutet
+hingedeutete
+hingedeutetem
+hingedeuteten
+hingedeuteter
+hingedeutetes
+hingeduckt
+hingefallen
+hingefallene
+hingefallenem
+hingefallenen
+hingefallener
+hingefallenes
+hingeführt
+hingeführte
+hingeführtem
+hingeführten
+hingeführter
+hingeführtes
+hingegangen
+hingegangene
+hingegangenem
+hingegangenen
+hingegangener
+hingegangenes
+hingegeben
+hingegebene
+hingegebenem
+hingegebenen
+hingegebener
+hingegebenes
+hingegen
+hingehalten
+hingehaltene
+hingehaltenem
+hingehaltenen
+hingehaltener
+hingehaltenes
+hingehe
+hingehen
+hingehend
+hingehende
+hingehendem
+hingehenden
+hingehender
+hingehendes
+hingehst
+hingeht
+hingehöre
+hingehören
+hingehörst
+hingehört
+hingehörte
+hingehörten
+hingehörtest
+hingehörtet
+hingekniet
+hingekniete
+hingeknietem
+hingeknieten
+hingeknieter
+hingeknietes
+hingekommen
+hingekommene
+hingekommenem
+hingekommenen
+hingekommener
+hingekommenes
+hingelegt
+hingelegte
+hingelegtem
+hingelegten
+hingelegter
+hingelegtes
+hingen
+hingenommen
+hingenommene
+hingenommenem
+hingenommenen
+hingenommener
+hingenommenes
+hingeraten
+hingeratene
+hingeratenem
+hingeratenen
+hingeratener
+hingeratenes
+hingerichtet
+hingerichtete
+hingerichtetem
+hingerichteten
+hingerichteter
+hingerichtetes
+hingerissen
+hingerissene
+hingerissenem
+hingerissenen
+hingerissener
+hingerissenes
+hingeschlagen
+hingeschlagene
+hingeschlagenem
+hingeschlagenen
+hingeschlagener
+hingeschlagenes
+hingeschleppt
+hingeschleppte
+hingeschlepptem
+hingeschleppten
+hingeschleppter
+hingeschlepptes
+hingeschrieben
+hingeschriebene
+hingeschriebenem
+hingeschriebenen
+hingeschriebener
+hingeschriebenes
+hingeschwunden
+hingeschwundene
+hingeschwundenem
+hingeschwundenen
+hingeschwundener
+hingeschwundenes
+hingesehen
+hingesetzt
+hingesetzte
+hingesetztem
+hingesetzten
+hingesetzter
+hingesetztes
+hingestellt
+hingestellte
+hingestelltem
+hingestellten
+hingestellter
+hingestelltes
+hingestreckt
+hingestreckte
+hingestrecktem
+hingestreckten
+hingestreckter
+hingestrecktes
+hingewiesen
+hingewiesene
+hingewiesenem
+hingewiesenen
+hingewiesener
+hingewiesenes
+hingewirkt
+hingeworfen
+hingeworfene
+hingeworfenem
+hingeworfenen
+hingeworfener
+hingeworfenes
+hingezogen
+hingezogene
+hingezogenem
+hingezogenen
+hingezogener
+hingezogenes
+hingibst
+hingibt
+hingst
+hingt
+hinhalte
+hinhalten
+hinhaltend
+hinhaltende
+hinhaltendem
+hinhaltenden
+hinhaltender
+hinhaltendes
+hinhaltet
+hinhaue
+hinhauen
+hinhauend
+hinhauende
+hinhauendem
+hinhauenden
+hinhauender
+hinhauendes
+hinhaust
+hinhaut
+hinhaute
+hinhauten
+hinhautest
+hinhautet
+hinhielt
+hinhielten
+hinhieltest
+hinhieltet
+hinhieltst
+hinhöre
+hinhören
+hinhörend
+hinhörende
+hinhörendem
+hinhörenden
+hinhörender
+hinhörendes
+hinhörst
+hinhört
+hinhörte
+hinhörten
+hinhörtest
+hinhörtet
+hinke
+hinken
+hinkend
+hinkende
+hinkendem
+hinkenden
+hinkender
+hinkendes
+hinkomme
+hinkommen
+hinkommend
+hinkommende
+hinkommendem
+hinkommenden
+hinkommender
+hinkommendes
+hinkommst
+hinkommt
+hinkriege
+hinkriegen
+hinkriegend
+hinkriegende
+hinkriegendem
+hinkriegenden
+hinkriegender
+hinkriegendes
+hinkriegst
+hinkriegt
+hinkriegte
+hinkriegten
+hinkriegtest
+hinkriegtet
+hinkst
+hinkt
+hinkte
+hinkten
+hinktest
+hinktet
+hinlege
+hinlegen
+hinlegend
+hinlegende
+hinlegendem
+hinlegenden
+hinlegender
+hinlegendes
+hinlegst
+hinlegt
+hinlegte
+hinlegten
+hinlegtest
+hinlegtet
+hinleite
+hinleiten
+hinleitend
+hinleitende
+hinleitendem
+hinleitenden
+hinleitender
+hinleitendes
+hinleitest
+hinleitet
+hinleitete
+hinleiteten
+hinleitetest
+hinleitetet
+hinlänglich
+hinlängliche
+hinlänglichem
+hinlänglichen
+hinlänglicher
+hinlängliches
+hinnehmbar
+hinnehmbare
+hinnehmbarem
+hinnehmbaren
+hinnehmbarer
+hinnehmbares
+hinnehme
+hinnehmen
+hinnehmend
+hinnehmende
+hinnehmendem
+hinnehmenden
+hinnehmender
+hinnehmendes
+hinnehmt
+hinnimmst
+hinnimmt
+hinpinnen
+hinreiche
+hinreichen
+hinreichend
+hinreichende
+hinreichendem
+hinreichenden
+hinreichender
+hinreichendes
+hinreichst
+hinreicht
+hinreichte
+hinreichten
+hinreichtest
+hinreichtet
+hinreiße
+hinreißen
+hinreißend
+hinreißende
+hinreißendem
+hinreißenden
+hinreißender
+hinreißendes
+hinreißest
+hinreißt
+hinrichte
+hinrichten
+hinrichtend
+hinrichtende
+hinrichtendem
+hinrichtenden
+hinrichtender
+hinrichtendes
+hinrichtest
+hinrichtet
+hinrichtete
+hinrichteten
+hinrichtetest
+hinrichtetet
+hinsah
+hinsahen
+hinsahst
+hinsaht
+hinschaue
+hinschauen
+hinschauend
+hinschauende
+hinschauendem
+hinschauenden
+hinschauender
+hinschauendes
+hinschaust
+hinschaut
+hinschaute
+hinschauten
+hinschautest
+hinschautet
+hinschlage
+hinschlagen
+hinschlagend
+hinschlagende
+hinschlagendem
+hinschlagenden
+hinschlagender
+hinschlagendes
+hinschlagt
+hinschmeiße
+hinschmeißen
+hinschmeißest
+hinschmeißt
+hinschreibe
+hinschreiben
+hinschreibend
+hinschreibende
+hinschreibendem
+hinschreibenden
+hinschreibender
+hinschreibendes
+hinschreibst
+hinschreibt
+hinschwinde
+hinschwinden
+hinschwindend
+hinschwindende
+hinschwindendem
+hinschwindenden
+hinschwindender
+hinschwindendes
+hinschwindest
+hinschwindet
+hinsehe
+hinsehen
+hinsehend
+hinsehende
+hinsehendem
+hinsehenden
+hinsehender
+hinsehendes
+hinseht
+hinsetze
+hinsetzen
+hinsetzend
+hinsetzende
+hinsetzendem
+hinsetzenden
+hinsetzender
+hinsetzendes
+hinsetzest
+hinsetzt
+hinsetzte
+hinsetzten
+hinsetztest
+hinsetztet
+hinsichtlich
+hinsiehst
+hinsieht
+hinstelle
+hinstellen
+hinstellend
+hinstellende
+hinstellendem
+hinstellenden
+hinstellender
+hinstellendes
+hinstellst
+hinstellt
+hinstellte
+hinstellten
+hinstelltest
+hinstelltet
+hinten
+hintenherum
+hinter
+hintere
+hintereinander
+hinterem
+hinteren
+hinterer
+hinteres
+hinterfrage
+hinterfragen
+hinterfragend
+hinterfragende
+hinterfragendem
+hinterfragenden
+hinterfragender
+hinterfragendes
+hinterfragst
+hinterfragt
+hinterfragte
+hinterfragtem
+hinterfragten
+hinterfragter
+hinterfragtes
+hinterfragtest
+hinterfragtet
+hintergangen
+hintergangene
+hintergangenem
+hintergangenen
+hintergangener
+hintergangenes
+hintergehe
+hintergehen
+hintergehend
+hintergehende
+hintergehendem
+hintergehenden
+hintergehender
+hintergehendes
+hintergehst
+hintergeht
+hintergründig
+hintergründige
+hintergründigem
+hintergründigen
+hintergründiger
+hintergründiges
+hinterher
+hinterhältig
+hinterhältige
+hinterhältigem
+hinterhältigen
+hinterhältiger
+hinterhältigere
+hinterhältigerem
+hinterhältigeren
+hinterhältigerer
+hinterhältigeres
+hinterhältiges
+hinterhältigste
+hinterhältigstem
+hinterhältigsten
+hinterhältigster
+hinterhältigstes
+hinterlasse
+hinterlassen
+hinterlassend
+hinterlassende
+hinterlassendem
+hinterlassenden
+hinterlassender
+hinterlassendes
+hinterlassene
+hinterlassenem
+hinterlassenen
+hinterlassener
+hinterlassenes
+hinterlasst
+hinterlege
+hinterlegen
+hinterlegend
+hinterlegende
+hinterlegendem
+hinterlegenden
+hinterlegender
+hinterlegendes
+hinterlegst
+hinterlegt
+hinterlegte
+hinterlegtem
+hinterlegten
+hinterlegter
+hinterlegtes
+hinterlegtest
+hinterlegtet
+hinterleuchtet
+hinterleuchtete
+hinterleuchtetem
+hinterleuchteten
+hinterleuchteter
+hinterleuchtetes
+hinterließ
+hinterließen
+hinterließest
+hinterließt
+hinterlistig
+hinterlistige
+hinterlistigem
+hinterlistigen
+hinterlistiger
+hinterlistigere
+hinterlistigerem
+hinterlistigeren
+hinterlistigerer
+hinterlistigeres
+hinterlistiges
+hinterlistigste
+hinterlistigstem
+hinterlistigsten
+hinterlistigster
+hinterlistigstes
+hinterlässt
+hinterm
+hinterrücks
+hintersinnig
+hintersinnige
+hintersinnigem
+hintersinnigen
+hintersinniger
+hintersinniges
+hinterste
+hinterstem
+hintersten
+hinterster
+hinterstes
+hintertreibe
+hintertreiben
+hintertreibend
+hintertreibende
+hintertreibendem
+hintertreibenden
+hintertreibender
+hintertreibendes
+hintertreibst
+hintertreibt
+hintertrieb
+hintertrieben
+hintertriebst
+hintertriebt
+hinterwäldlerisch
+hinterwäldlerische
+hinterwäldlerischem
+hinterwäldlerischen
+hinterwäldlerischer
+hinterwäldlerisches
+hintrete
+hintreten
+hintretend
+hintretende
+hintretendem
+hintretenden
+hintretender
+hintretendes
+hintretet
+hinunter
+hinunterfalle
+hinunterfallen
+hinunterfallend
+hinunterfallende
+hinunterfallendem
+hinunterfallenden
+hinunterfallender
+hinunterfallendes
+hinunterfallt
+hinunterfuhr
+hinunterfuhren
+hinunterfuhrst
+hinunterfuhrt
+hinuntergegangen
+hinuntergegangene
+hinuntergegangenem
+hinuntergegangenen
+hinuntergegangener
+hinuntergegangenes
+hinuntergeschluckt
+hinuntergeschluckte
+hinuntergeschlucktem
+hinuntergeschluckten
+hinuntergeschluckter
+hinuntergeschlucktes
+hinunterrutsche
+hinunterrutschen
+hinunterrutschest
+hinunterrutschst
+hinunterrutscht
+hinunterrutschte
+hinunterrutschten
+hinunterrutschtest
+hinunterrutschtet
+hinunterschlendere
+hinunterschlendern
+hinunterschlendernd
+hinunterschlendernde
+hinunterschlenderndem
+hinunterschlendernden
+hinunterschlendernder
+hinunterschlenderndes
+hinunterschlenderst
+hinunterschlendert
+hinunterschlenderte
+hinunterschlenderten
+hinunterschlendertest
+hinunterschlendertet
+hinunterschlendre
+hinunterschlich
+hinunterschlichen
+hinunterschlichest
+hinunterschlichst
+hinunterschlicht
+hinunterschlucke
+hinunterschlucken
+hinunterschluckend
+hinunterschluckende
+hinunterschluckendem
+hinunterschluckenden
+hinunterschluckender
+hinunterschluckendes
+hinunterschluckst
+hinunterschluckt
+hinunterschluckte
+hinunterschluckten
+hinunterschlucktest
+hinunterschlucktet
+hinweg
+hinwegbringe
+hinwegbringen
+hinwegbringend
+hinwegbringende
+hinwegbringendem
+hinwegbringenden
+hinwegbringender
+hinwegbringendes
+hinwegbringst
+hinwegbringt
+hinwegbringte
+hinwegbringten
+hinwegbringtest
+hinwegbringtet
+hinweggebraust
+hinweggebrauste
+hinweggebraustem
+hinweggebrausten
+hinweggebrauster
+hinweggebraustes
+hinweggekommen
+hinweggekommene
+hinweggekommenem
+hinweggekommenen
+hinweggekommener
+hinweggekommenes
+hinweggesetzt
+hinweggesetzte
+hinweggesetztem
+hinweggesetzten
+hinweggesetzter
+hinweggesetztes
+hinweggetäuscht
+hinweggetäuschte
+hinweggetäuschtem
+hinweggetäuschten
+hinweggetäuschter
+hinweggetäuschtes
+hinweghelfe
+hinweghelfen
+hinweghelfend
+hinweghelfende
+hinweghelfendem
+hinweghelfenden
+hinweghelfender
+hinweghelfendes
+hinweghelft
+hinwegkomme
+hinwegkommen
+hinwegkommend
+hinwegkommende
+hinwegkommendem
+hinwegkommenden
+hinwegkommender
+hinwegkommendes
+hinwegkommst
+hinwegkommt
+hinwegraffe
+hinwegraffen
+hinwegraffst
+hinwegrafft
+hinwegraffte
+hinwegrafften
+hinwegrafftest
+hinwegrafftet
+hinwegschwemme
+hinwegschwemmen
+hinwegschwemmend
+hinwegschwemmende
+hinwegschwemmendem
+hinwegschwemmenden
+hinwegschwemmender
+hinwegschwemmendes
+hinwegschwemmst
+hinwegschwemmt
+hinwegschwemmte
+hinwegschwemmten
+hinwegschwemmtest
+hinwegschwemmtet
+hinwegsehe
+hinwegsehen
+hinwegsehend
+hinwegsehende
+hinwegsehendem
+hinwegsehenden
+hinwegsehender
+hinwegsehendes
+hinwegseht
+hinwegsetze
+hinwegsetzen
+hinwegsetzend
+hinwegsetzende
+hinwegsetzendem
+hinwegsetzenden
+hinwegsetzender
+hinwegsetzendes
+hinwegsetzest
+hinwegsetzt
+hinwegsetzte
+hinwegsetzten
+hinwegsetztest
+hinwegsetztet
+hinwegtröstet
+hinwegtröstete
+hinwegtröstetem
+hinwegtrösteten
+hinwegtrösteter
+hinwegtröstetes
+hinwegtäusche
+hinwegtäuschen
+hinwegtäuschend
+hinwegtäuschende
+hinwegtäuschendem
+hinwegtäuschenden
+hinwegtäuschender
+hinwegtäuschendes
+hinwegtäuschest
+hinwegtäuschst
+hinwegtäuscht
+hinwegtäuschte
+hinwegtäuschten
+hinwegtäuschtest
+hinwegtäuschtet
+hinwegzureden
+hinwegzuredend
+hinwegzuredende
+hinwegzuredendem
+hinwegzuredenden
+hinwegzuredender
+hinwegzuredendes
+hinwegzusehen
+hinwegzusetzen
+hinweise
+hinweisen
+hinweisend
+hinweisende
+hinweisendem
+hinweisenden
+hinweisender
+hinweisendes
+hinweisest
+hinweist
+hinwende
+hinwenden
+hinwendend
+hinwendende
+hinwendendem
+hinwendenden
+hinwendender
+hinwendendes
+hinwendest
+hinwendet
+hinwendete
+hinwendeten
+hinwendetest
+hinwendetet
+hinwerfe
+hinwerfen
+hinwerfend
+hinwerfende
+hinwerfendem
+hinwerfenden
+hinwerfender
+hinwerfendes
+hinwerft
+hinwies
+hinwiesen
+hinwiesest
+hinwiest
+hinwirke
+hinwirken
+hinwirkend
+hinwirkende
+hinwirkendem
+hinwirkenden
+hinwirkender
+hinwirkendes
+hinwirkst
+hinwirkt
+hinwirkte
+hinwirkten
+hinwirktest
+hinwirktet
+hinziehe
+hinziehen
+hinziehend
+hinziehende
+hinziehendem
+hinziehenden
+hinziehender
+hinziehendes
+hinziehst
+hinzieht
+hinziele
+hinzielen
+hinzielend
+hinzielende
+hinzielendem
+hinzielenden
+hinzielender
+hinzielendes
+hinzielst
+hinzielt
+hinzielte
+hinzielten
+hinzieltest
+hinzieltet
+hinzog
+hinzogen
+hinzogst
+hinzogt
+hinzu
+hinzuarbeiten
+hinzudeuten
+hinzuerfunden
+hinzuerfundene
+hinzuerfundenem
+hinzuerfundenen
+hinzuerfundener
+hinzuerfundenes
+hinzufüge
+hinzufügen
+hinzufügend
+hinzufügende
+hinzufügendem
+hinzufügenden
+hinzufügender
+hinzufügendes
+hinzufügst
+hinzufügt
+hinzufügte
+hinzufügten
+hinzufügtest
+hinzufügtet
+hinzugebe
+hinzugeben
+hinzugebend
+hinzugebende
+hinzugebendem
+hinzugebenden
+hinzugebender
+hinzugebendes
+hinzugebt
+hinzugefügt
+hinzugefügte
+hinzugefügtem
+hinzugefügten
+hinzugefügter
+hinzugefügtes
+hinzugekommen
+hinzugekommene
+hinzugekommenem
+hinzugekommenen
+hinzugekommener
+hinzugekommenes
+hinzugelernt
+hinzugelernte
+hinzugelerntem
+hinzugelernten
+hinzugelernter
+hinzugelerntes
+hinzugenommen
+hinzugerechnet
+hinzugerechnete
+hinzugerechnetem
+hinzugerechneten
+hinzugerechneter
+hinzugerechnetes
+hinzugezogen
+hinzugezogene
+hinzugezogenem
+hinzugezogenen
+hinzugezogener
+hinzugezogenes
+hinzugibst
+hinzugibt
+hinzukam
+hinzukamen
+hinzukamst
+hinzukamt
+hinzukomme
+hinzukommen
+hinzukommend
+hinzukommende
+hinzukommendem
+hinzukommenden
+hinzukommender
+hinzukommendes
+hinzukommst
+hinzukommt
+hinzukriegen
+hinzulade
+hinzuladen
+hinzuladend
+hinzuladende
+hinzuladendem
+hinzuladenden
+hinzuladender
+hinzuladendes
+hinzuladet
+hinzulerne
+hinzulernen
+hinzulernend
+hinzulernende
+hinzulernendem
+hinzulernenden
+hinzulernender
+hinzulernendes
+hinzulernst
+hinzulernt
+hinzulernte
+hinzulernten
+hinzulerntest
+hinzulerntet
+hinzunehme
+hinzunehmen
+hinzunehmt
+hinzunimmst
+hinzunimmt
+hinzurechne
+hinzurechnen
+hinzurechnend
+hinzurechnende
+hinzurechnendem
+hinzurechnenden
+hinzurechnender
+hinzurechnendes
+hinzurechnest
+hinzurechnet
+hinzurechnete
+hinzurechneten
+hinzurechnetest
+hinzurechnetet
+hinzureißen
+hinzurichten
+hinzurichtend
+hinzurichtende
+hinzurichtendem
+hinzurichtenden
+hinzurichtender
+hinzurichtendes
+hinzuschmeißen
+hinzuschmeißend
+hinzuschmeißende
+hinzuschmeißendem
+hinzuschmeißenden
+hinzuschmeißender
+hinzuschmeißendes
+hinzusehen
+hinzustellen
+hinzustellend
+hinzustellende
+hinzustellendem
+hinzustellenden
+hinzustellender
+hinzustellendes
+hinzutrete
+hinzutreten
+hinzutretend
+hinzutretende
+hinzutretendem
+hinzutretenden
+hinzutretender
+hinzutretendes
+hinzutretet
+hinzuweisen
+hinzuwerfen
+hinzuwerfend
+hinzuwerfende
+hinzuwerfendem
+hinzuwerfenden
+hinzuwerfender
+hinzuwerfendes
+hinzuwirken
+hinzuziehe
+hinzuziehen
+hinzuziehend
+hinzuziehende
+hinzuziehendem
+hinzuziehenden
+hinzuziehender
+hinzuziehendes
+hinzuziehst
+hinzuzieht
+hinzuzufügen
+hinzuzufügend
+hinzuzufügende
+hinzuzufügendem
+hinzuzufügenden
+hinzuzufügender
+hinzuzufügendes
+hinzuzurechnen
+hinzuzurechnend
+hinzuzurechnende
+hinzuzurechnendem
+hinzuzurechnenden
+hinzuzurechnender
+hinzuzurechnendes
+hinzuzuziehen
+hinzuzuziehend
+hinzuzuziehende
+hinzuzuziehendem
+hinzuzuziehenden
+hinzuzuziehender
+hinzuzuziehendes
+hinzuzähle
+hinzuzählen
+hinzuzählst
+hinzuzählt
+hinzuzählte
+hinzuzählten
+hinzuzähltest
+hinzuzähltet
+hinüber
+hinüberlenke
+hinüberlenken
+hinüberlenkend
+hinüberlenkende
+hinüberlenkendem
+hinüberlenkenden
+hinüberlenkender
+hinüberlenkendes
+hinüberlenkst
+hinüberlenkt
+hinüberlenkte
+hinüberlenkten
+hinüberlenktest
+hinüberlenktet
+hirnverbrannt
+hirnverbrannte
+hirnverbranntem
+hirnverbrannten
+hirnverbrannter
+hirnverbranntes
+hisse
+hissen
+hissend
+hissende
+hissendem
+hissenden
+hissender
+hissendes
+hissest
+hisst
+hisste
+hissten
+hisstest
+hisstet
+historisch
+historische
+historischem
+historischen
+historischer
+historisches
+historisiere
+historisieren
+historisierend
+historisierende
+historisierendem
+historisierenden
+historisierender
+historisierendes
+historisierst
+historisiert
+historisierte
+historisierten
+historisiertest
+historisiertet
+hitzebeständig
+hitzebeständige
+hitzebeständigem
+hitzebeständigen
+hitzebeständiger
+hitzebeständigere
+hitzebeständigerem
+hitzebeständigeren
+hitzebeständigerer
+hitzebeständigeres
+hitzebeständiges
+hitzebeständigste
+hitzebeständigstem
+hitzebeständigsten
+hitzebeständigster
+hitzebeständigstes
+hitzefrei
+hitzig
+hitzige
+hitzigem
+hitzigen
+hitziger
+hitzigere
+hitzigerem
+hitzigeren
+hitzigerer
+hitzigeres
+hitziges
+hitzigste
+hitzigstem
+hitzigsten
+hitzigster
+hitzigstes
+hnzulädst
+hnzulädt
+hob
+hobele
+hobeln
+hobelnd
+hobelnde
+hobelndem
+hobelnden
+hobelnder
+hobelndes
+hobelst
+hobelt
+hobelte
+hobelten
+hobeltest
+hobeltet
+hoben
+hoble
+hobst
+hobt
+hoch
+hochachte
+hochachten
+hochachtend
+hochachtende
+hochachtendem
+hochachtenden
+hochachtender
+hochachtendes
+hochachtet
+hochachtungsvoll
+hochachtungsvolle
+hochachtungsvollem
+hochachtungsvollen
+hochachtungsvoller
+hochachtungsvollere
+hochachtungsvollerem
+hochachtungsvolleren
+hochachtungsvollerer
+hochachtungsvolleres
+hochachtungsvolles
+hochachtungsvollste
+hochachtungsvollstem
+hochachtungsvollsten
+hochachtungsvollster
+hochachtungsvollstes
+hochalpin
+hochalpine
+hochalpinem
+hochalpinen
+hochalpiner
+hochalpines
+hochamtlich
+hochamtliche
+hochamtlichem
+hochamtlichen
+hochamtlicher
+hochamtliches
+hochanständig
+hochanständige
+hochanständigem
+hochanständigen
+hochanständiger
+hochanständiges
+hochaufgeschossen
+hochaufgeschossene
+hochaufgeschossenem
+hochaufgeschossenen
+hochaufgeschossener
+hochaufgeschossenes
+hochaufqqlösend
+hochaufqqlösende
+hochaufqqlösendem
+hochaufqqlösenden
+hochaufqqlösender
+hochaufqqlösendes
+hochbegabt
+hochbegabte
+hochbegabtem
+hochbegabten
+hochbegabter
+hochbegabtes
+hochbeladen
+hochbeladene
+hochbeladenem
+hochbeladenen
+hochbeladener
+hochbeladenes
+hochbesetzt
+hochbesetzte
+hochbesetztem
+hochbesetzten
+hochbesetzter
+hochbesetztes
+hochbetagt
+hochbetagte
+hochbetagtem
+hochbetagten
+hochbetagter
+hochbetagtes
+hochbrisant
+hochbrisante
+hochbrisantem
+hochbrisanten
+hochbrisanter
+hochbrisantes
+hochdeutsch
+hochdeutsche
+hochdeutschem
+hochdeutschen
+hochdeutscher
+hochdeutsches
+hochdifferenziert
+hochdifferenzierte
+hochdifferenziertem
+hochdifferenzierten
+hochdifferenzierter
+hochdifferenziertes
+hochdramatisch
+hochdramatische
+hochdramatischem
+hochdramatischen
+hochdramatischer
+hochdramatisches
+hochdynamisch
+hochdynamische
+hochdynamischem
+hochdynamischen
+hochdynamischer
+hochdynamisches
+hocheffizient
+hocheffiziente
+hocheffizientem
+hocheffizienten
+hocheffizienter
+hocheffizientes
+hocherfreut
+hocherfreute
+hocherfreutem
+hocherfreuten
+hocherfreuter
+hocherfreutes
+hochexplosiv
+hochexplosive
+hochexplosivem
+hochexplosiven
+hochexplosiver
+hochexplosives
+hochfahre
+hochfahren
+hochfahrend
+hochfahrende
+hochfahrendem
+hochfahrenden
+hochfahrender
+hochfahrendes
+hochfahrt
+hochflexibel
+hochflexible
+hochflexiblem
+hochflexiblen
+hochflexibler
+hochflexibles
+hochgeachtet
+hochgeachtete
+hochgeachtetem
+hochgeachteten
+hochgeachteter
+hochgeachtetes
+hochgearbeitet
+hochgearbeitete
+hochgearbeitetem
+hochgearbeiteten
+hochgearbeiteter
+hochgearbeitetes
+hochgebildet
+hochgebildete
+hochgebildetem
+hochgebildeten
+hochgebildeter
+hochgebildetes
+hochgebracht
+hochgebrachte
+hochgebrachtem
+hochgebrachten
+hochgebrachter
+hochgebrachtes
+hochgegangen
+hochgegangene
+hochgegangenem
+hochgegangenen
+hochgegangener
+hochgegangenes
+hochgehe
+hochgehen
+hochgehend
+hochgehende
+hochgehendem
+hochgehenden
+hochgehender
+hochgehendes
+hochgehst
+hochgeht
+hochgeklappt
+hochgeklappte
+hochgeklapptem
+hochgeklappten
+hochgeklappter
+hochgeklapptes
+hochgekommen
+hochgekommene
+hochgekommenem
+hochgekommenen
+hochgekommener
+hochgekommenes
+hochgelegen
+hochgelegene
+hochgelegenem
+hochgelegenen
+hochgelegener
+hochgelegenes
+hochgelegt
+hochgelegte
+hochgelegtem
+hochgelegten
+hochgelegter
+hochgelegtes
+hochgelobt
+hochgelobte
+hochgelobtem
+hochgelobten
+hochgelobter
+hochgelobtes
+hochgepflegt
+hochgepflegte
+hochgepflegtem
+hochgepflegten
+hochgepflegter
+hochgepflegtes
+hochgepäppelt
+hochgepäppelte
+hochgepäppeltem
+hochgepäppelten
+hochgepäppelter
+hochgepäppeltes
+hochgereckt
+hochgereckte
+hochgerecktem
+hochgereckten
+hochgereckter
+hochgerecktes
+hochgeredet
+hochgerutscht
+hochgerutschte
+hochgerutschtem
+hochgerutschten
+hochgerutschter
+hochgerutschtes
+hochgeschlagen
+hochgeschlagene
+hochgeschlagenem
+hochgeschlagenen
+hochgeschlagener
+hochgeschlagenes
+hochgeschraubt
+hochgeschraubte
+hochgeschraubtem
+hochgeschraubten
+hochgeschraubter
+hochgeschraubtes
+hochgespannt
+hochgespannte
+hochgespanntem
+hochgespannten
+hochgespannter
+hochgespanntes
+hochgespielt
+hochgespielte
+hochgespieltem
+hochgespielten
+hochgespielter
+hochgespieltes
+hochgestellt
+hochgestellte
+hochgestelltem
+hochgestellten
+hochgestellter
+hochgestelltes
+hochgestimmt
+hochgestimmte
+hochgestimmtem
+hochgestimmten
+hochgestimmter
+hochgestimmtes
+hochgestochen
+hochgestochene
+hochgestochenem
+hochgestochenen
+hochgestochener
+hochgestochenes
+hochgewachsen
+hochgewachsene
+hochgewachsenem
+hochgewachsenen
+hochgewachsener
+hochgewachsenes
+hochgewirbelt
+hochgewirbelte
+hochgewirbeltem
+hochgewirbelten
+hochgewirbelter
+hochgewirbeltes
+hochgezählt
+hochgezählte
+hochgezähltem
+hochgezählten
+hochgezählter
+hochgezähltes
+hochglanzpoliert
+hochglanzpolierte
+hochglanzpoliertem
+hochglanzpolierten
+hochglanzpolierter
+hochglanzpoliertes
+hochgradig
+hochgradige
+hochgradigem
+hochgradigen
+hochgradiger
+hochgradiges
+hochherzig
+hochherzige
+hochherzigem
+hochherzigen
+hochherziger
+hochherziges
+hochimpedant
+hochimpedante
+hochimpedantem
+hochimpedanten
+hochimpedanter
+hochimpedantes
+hochkarätig
+hochkarätige
+hochkarätigem
+hochkarätigen
+hochkarätiger
+hochkarätiges
+hochkonzentriert
+hochkonzentrierte
+hochkonzentriertem
+hochkonzentrierten
+hochkonzentrierter
+hochkonzentriertes
+hochleistungsfähig
+hochleistungsfähige
+hochleistungsfähigem
+hochleistungsfähigen
+hochleistungsfähiger
+hochleistungsfähiges
+hochleitfähig
+hochleitfähige
+hochleitfähigem
+hochleitfähigen
+hochleitfähiger
+hochleitfähiges
+hochmodern
+hochmoderne
+hochmodernem
+hochmodernen
+hochmoderner
+hochmodernes
+hochmütig
+hochmütige
+hochmütigem
+hochmütigen
+hochmütiger
+hochmütigere
+hochmütigerem
+hochmütigeren
+hochmütigerer
+hochmütigeres
+hochmütiges
+hochmütigste
+hochmütigstem
+hochmütigsten
+hochmütigster
+hochmütigstes
+hochnäsig
+hochnäsige
+hochnäsigem
+hochnäsigen
+hochnäsiger
+hochnäsigere
+hochnäsigerem
+hochnäsigeren
+hochnäsigerer
+hochnäsigeres
+hochnäsiges
+hochnäsigste
+hochnäsigstem
+hochnäsigsten
+hochnäsigster
+hochnäsigstes
+hochohmig
+hochohmige
+hochohmigem
+hochohmigen
+hochohmiger
+hochohmiges
+hochpersönlich
+hochpersönliche
+hochpersönlichem
+hochpersönlichen
+hochpersönlicher
+hochpersönliches
+hochpolitisch
+hochpolitische
+hochpolitischem
+hochpolitischen
+hochpolitischer
+hochpolitisches
+hochprozentig
+hochprozentige
+hochprozentigem
+hochprozentigen
+hochprozentiger
+hochprozentiges
+hochqualifiziert
+hochqualifizierte
+hochqualifiziertem
+hochqualifizierten
+hochqualifizierter
+hochqualifiziertes
+hochrangig
+hochrangige
+hochrangigem
+hochrangigen
+hochrangiger
+hochrangiges
+hochrot
+hochrote
+hochrotem
+hochroten
+hochroter
+hochrotes
+hochschätze
+hochschätzen
+hochschätzend
+hochschätzende
+hochschätzendem
+hochschätzenden
+hochschätzender
+hochschätzendes
+hochschätzest
+hochschätzt
+hochschätzte
+hochschätzten
+hochschätztest
+hochschätztet
+hochspekulativ
+hochspekulative
+hochspekulativem
+hochspekulativen
+hochspekulativer
+hochspekulatives
+hochspezialisiert
+hochspezialisierte
+hochspezialisiertem
+hochspezialisierten
+hochspezialisierter
+hochspezialisiertes
+hochspezifisch
+hochspezifische
+hochspezifischem
+hochspezifischen
+hochspezifischer
+hochspezifisches
+hochsprachlich
+hochsprachliche
+hochsprachlichem
+hochsprachlichen
+hochsprachlicher
+hochsprachliches
+hochstaplerisch
+hochstaplerische
+hochstaplerischem
+hochstaplerischen
+hochstaplerischer
+hochstaplerisches
+hochstehe
+hochstehen
+hochstehend
+hochstehende
+hochstehendem
+hochstehenden
+hochstehender
+hochstehendes
+hochstehst
+hochsteht
+hochstelle
+hochstellen
+hochstellst
+hochstellt
+hochstellte
+hochstellten
+hochstelltest
+hochstelltet
+hochtalentiert
+hochtalentierte
+hochtalentiertem
+hochtalentierten
+hochtalentierter
+hochtalentiertes
+hochtrabend
+hochtrabende
+hochtrabendem
+hochtrabenden
+hochtrabender
+hochtrabendes
+hochverehrt
+hochverehrte
+hochverehrtem
+hochverehrten
+hochverehrter
+hochverehrtes
+hochwertig
+hochwertige
+hochwertigem
+hochwertigen
+hochwertiger
+hochwertigere
+hochwertigerem
+hochwertigeren
+hochwertigerer
+hochwertigeres
+hochwertiges
+hochwertigste
+hochwertigstem
+hochwertigsten
+hochwertigster
+hochwertigstes
+hochwirksam
+hochwirksame
+hochwirksamem
+hochwirksamen
+hochwirksamer
+hochwirksames
+hochwürdig
+hochwürdige
+hochwürdigem
+hochwürdigen
+hochwürdiger
+hochwürdiges
+hochzujubeln
+hochzujubelnd
+hochzujubelnde
+hochzujubelndem
+hochzujubelnden
+hochzujubelnder
+hochzujubelndes
+hochzuklettern
+hochzukletternd
+hochzukletternde
+hochzukletterndem
+hochzukletternden
+hochzukletternder
+hochzukletterndes
+hochzuverlässig
+hochzuverlässige
+hochzuverlässigem
+hochzuverlässigen
+hochzuverlässiger
+hochzuverlässiges
+hocke
+hocken
+hockend
+hockende
+hockendem
+hockenden
+hockender
+hockendes
+hockst
+hockt
+hockte
+hockten
+hocktest
+hocktet
+hoffe
+hoffen
+hoffend
+hoffende
+hoffendem
+hoffenden
+hoffender
+hoffendes
+hoffentlich
+hoffnungsfroh
+hoffnungsfrohe
+hoffnungsfrohem
+hoffnungsfrohen
+hoffnungsfroher
+hoffnungsfrohes
+hoffnungslos
+hoffnungslose
+hoffnungslosem
+hoffnungslosen
+hoffnungsloser
+hoffnungslosere
+hoffnungsloserem
+hoffnungsloseren
+hoffnungsloserer
+hoffnungsloseres
+hoffnungsloses
+hoffnungsloseste
+hoffnungslosestem
+hoffnungslosesten
+hoffnungslosester
+hoffnungslosestes
+hoffnungsvoll
+hoffnungsvolle
+hoffnungsvollem
+hoffnungsvollen
+hoffnungsvoller
+hoffnungsvollere
+hoffnungsvollerem
+hoffnungsvolleren
+hoffnungsvollerer
+hoffnungsvolleres
+hoffnungsvolles
+hoffnungsvollste
+hoffnungsvollstem
+hoffnungsvollsten
+hoffnungsvollster
+hoffnungsvollstes
+hoffst
+hofft
+hoffte
+hofften
+hofftest
+hofftet
+hohe
+hoheitlich
+hoheitliche
+hoheitlichem
+hoheitlichen
+hoheitlicher
+hoheitliches
+hoheitsvoll
+hoheitsvolle
+hoheitsvollem
+hoheitsvollen
+hoheitsvoller
+hoheitsvollere
+hoheitsvollerem
+hoheitsvolleren
+hoheitsvollerer
+hoheitsvolleres
+hoheitsvolles
+hoheitsvollste
+hoheitsvollstem
+hoheitsvollsten
+hoheitsvollster
+hoheitsvollstes
+hohem
+hohen
+hoher
+hohes
+hohl
+hohle
+hohlem
+hohlen
+hohler
+hohlere
+hohlerem
+hohleren
+hohlerer
+hohleres
+hohles
+hohlste
+hohlstem
+hohlsten
+hohlster
+hohlstes
+hold
+holde
+holdem
+holden
+holder
+holdes
+hole
+holen
+holend
+holende
+holendem
+holenden
+holender
+holendes
+holistisch
+holistische
+holistischem
+holistischen
+holistischer
+holistisches
+holländisch
+holländische
+holländischem
+holländischen
+holländischer
+holländisches
+holografisch
+holografische
+holografischem
+holografischen
+holografischer
+holografisches
+holographisch
+holographische
+holographischem
+holographischen
+holographischer
+holographisches
+holpere
+holperig
+holperige
+holperigem
+holperigen
+holperiger
+holperiges
+holpern
+holpernd
+holpernde
+holperndem
+holpernden
+holpernder
+holperndes
+holperst
+holpert
+holperte
+holperten
+holpertest
+holpertet
+holpre
+holprig
+holprige
+holprigem
+holprigen
+holpriger
+holpriges
+holst
+holsteinisch
+holsteinische
+holsteinischem
+holsteinischen
+holsteinischer
+holsteinisches
+holt
+holte
+holten
+holtest
+holtet
+holzfrei
+holzfreie
+holzfreiem
+holzfreien
+holzfreier
+holzfreies
+holzig
+holzige
+holzigem
+holzigen
+holziger
+holziges
+homerisch
+homerische
+homerischem
+homerischen
+homerischer
+homerisches
+homoerotisch
+homoerotische
+homoerotischem
+homoerotischen
+homoerotischer
+homoerotisches
+homogen
+homogene
+homogenem
+homogenen
+homogener
+homogenes
+homosexuell
+homosexuelle
+homosexuellem
+homosexuellen
+homosexueller
+homosexuelles
+homöopathisch
+homöopathische
+homöopathischem
+homöopathischen
+homöopathischer
+homöopathisches
+honoriere
+honorieren
+honorierend
+honorierende
+honorierendem
+honorierenden
+honorierender
+honorierendes
+honorierst
+honoriert
+honorierte
+honoriertem
+honorierten
+honorierter
+honoriertes
+honoriertest
+honoriertet
+honorig
+honorige
+honorigem
+honorigen
+honoriger
+honoriges
+hoppele
+hoppeln
+hoppelnd
+hoppelnde
+hoppelndem
+hoppelnden
+hoppelnder
+hoppelndes
+hoppelst
+hoppelt
+hoppelte
+hoppelten
+hoppeltest
+hoppeltet
+hopple
+hopse
+hopsen
+hopsend
+hopsende
+hopsendem
+hopsenden
+hopsender
+hopsendes
+hopsest
+hopst
+hopste
+hopsten
+hopstest
+hopstet
+horche
+horchen
+horchend
+horchende
+horchendem
+horchenden
+horchender
+horchendes
+horchst
+horcht
+horchte
+horchten
+horchtest
+horchtet
+hordenweise
+horizontal
+horizontale
+horizontalem
+horizontalen
+horizontaler
+horizontales
+hormonell
+hormonelle
+hormonellem
+hormonellen
+hormoneller
+hormonelles
+horrend
+horrende
+horrendem
+horrenden
+horrender
+horrendes
+horste
+horsten
+horstend
+horstende
+horstendem
+horstenden
+horstender
+horstendes
+horstest
+horstet
+horstete
+horsteten
+horstetest
+horstetet
+horte
+horten
+hortend
+hortende
+hortendem
+hortenden
+hortender
+hortendes
+hortest
+hortet
+hortete
+horteten
+hortetest
+hortetet
+hotelmäßiger
+huckepack
+huldige
+huldigen
+huldigend
+huldigende
+huldigendem
+huldigenden
+huldigender
+huldigendes
+huldigst
+huldigt
+huldigte
+huldigten
+huldigtest
+huldigtet
+huldvoll
+huldvolle
+huldvollem
+huldvollen
+huldvoller
+huldvolles
+human
+humane
+humanem
+humanen
+humaner
+humanere
+humanerem
+humaneren
+humanerer
+humaneres
+humanes
+humanisiere
+humanisieren
+humanisierend
+humanisierende
+humanisierendem
+humanisierenden
+humanisierender
+humanisierendes
+humanisierst
+humanisiert
+humanisierte
+humanisiertem
+humanisierten
+humanisierter
+humanisiertes
+humanisiertest
+humanisiertet
+humanistisch
+humanistische
+humanistischem
+humanistischen
+humanistischer
+humanistisches
+humanitär
+humanitäre
+humanitärem
+humanitären
+humanitärer
+humanitäres
+humanste
+humanstem
+humansten
+humanster
+humanstes
+humoristisch
+humoristische
+humoristischem
+humoristischen
+humoristischer
+humoristisches
+humorlos
+humorlose
+humorlosem
+humorlosen
+humorloser
+humorloses
+humorvoll
+humorvolle
+humorvollem
+humorvollen
+humorvoller
+humorvolles
+humpele
+humpeln
+humpelnd
+humpelnde
+humpelndem
+humpelnden
+humpelnder
+humpelndes
+humpelst
+humpelt
+humpelte
+humpelten
+humpeltest
+humpeltet
+humple
+hundert
+hunderte
+hundertem
+hunderten
+hunderter
+hundertes
+hundertfach
+hundertfache
+hundertfachem
+hundertfachen
+hundertfacher
+hundertfaches
+hundertfältig
+hundertfältige
+hundertfältigem
+hundertfältigen
+hundertfältiger
+hundertfältiges
+hundertjährig
+hundertjährige
+hundertjährigem
+hundertjährigen
+hundertjähriger
+hundertjähriges
+hundertköpfig
+hundertköpfige
+hundertköpfigem
+hundertköpfigen
+hundertköpfiger
+hundertköpfiges
+hundertmal
+hundertprozentig
+hundertprozentige
+hundertprozentigem
+hundertprozentigen
+hundertprozentiger
+hundertprozentiges
+hundertste
+hundertstel
+hundertstem
+hundertsten
+hundertster
+hundertstes
+hunderttausend
+hunderttausende
+hundertzehn
+hundertzwanzig
+hundsmiserabel
+hundsmiserable
+hundsmiserablem
+hundsmiserablen
+hundsmiserabler
+hundsmiserables
+hungere
+hungern
+hungernd
+hungernde
+hungerndem
+hungernden
+hungernder
+hungerndes
+hungerst
+hungert
+hungerte
+hungerten
+hungertest
+hungertet
+hungre
+hungrig
+hungrige
+hungrigem
+hungrigen
+hungriger
+hungrigere
+hungrigerem
+hungrigeren
+hungrigerer
+hungrigeres
+hungriges
+hungrigste
+hungrigstem
+hungrigsten
+hungrigster
+hungrigstes
+hupe
+hupen
+hupend
+hupende
+hupendem
+hupenden
+hupender
+hupendes
+hupst
+hupt
+hupte
+hupten
+huptest
+huptet
+hure
+huren
+hurend
+hurende
+hurendem
+hurenden
+hurender
+hurendes
+hurra
+hurst
+hurt
+hurte
+hurten
+hurtest
+hurtet
+hurtig
+hurtige
+hurtigem
+hurtigen
+hurtiger
+hurtigere
+hurtigerem
+hurtigeren
+hurtigerer
+hurtigeres
+hurtiges
+hurtigste
+hurtigstem
+hurtigsten
+hurtigster
+hurtigstes
+husche
+huschen
+huschest
+huschst
+huscht
+huschte
+huschten
+huschtest
+huschtet
+huste
+husten
+hustend
+hustende
+hustendem
+hustenden
+hustender
+hustendes
+hustest
+hustet
+hustete
+husteten
+hustetest
+hustetet
+hybrid
+hybride
+hybridem
+hybriden
+hybrider
+hybrides
+hydraulisch
+hydraulische
+hydraulischem
+hydraulischen
+hydraulischer
+hydraulisches
+hygienisch
+hygienische
+hygienischem
+hygienischen
+hygienischer
+hygienischere
+hygienischerem
+hygienischeren
+hygienischerer
+hygienischeres
+hygienisches
+hygienischste
+hygienischstem
+hygienischsten
+hygienischster
+hygienischstes
+hyperaktiv
+hyperaktive
+hyperaktivem
+hyperaktiven
+hyperaktiver
+hyperaktives
+hyperbolisch
+hyperbolische
+hyperbolischem
+hyperbolischen
+hyperbolischer
+hyperbolisches
+hyperelegant
+hyperelegante
+hyperelegantem
+hypereleganten
+hypereleganter
+hyperelegantes
+hypnotisierbar
+hypnotisierbare
+hypnotisierbarem
+hypnotisierbaren
+hypnotisierbarer
+hypnotisierbares
+hypnotisiere
+hypnotisieren
+hypnotisierend
+hypnotisierende
+hypnotisierendem
+hypnotisierenden
+hypnotisierender
+hypnotisierendes
+hypnotisierst
+hypnotisiert
+hypnotisierte
+hypnotisiertem
+hypnotisierten
+hypnotisierter
+hypnotisiertes
+hypnotisiertest
+hypnotisiertet
+hypothekarisch
+hypothekarische
+hypothekarischem
+hypothekarischen
+hypothekarischer
+hypothekarisches
+hypothetisch
+hypothetische
+hypothetischem
+hypothetischen
+hypothetischer
+hypothetisches
+hysterisch
+hysterische
+hysterischem
+hysterischen
+hysterischer
+hysterischere
+hysterischerem
+hysterischeren
+hysterischerer
+hysterischeres
+hysterisches
+hysterischste
+hysterischstem
+hysterischsten
+hysterischster
+hysterischstes
+häkele
+häkeln
+häkelnd
+häkelnde
+häkelndem
+häkelnden
+häkelnder
+häkelndes
+häkelst
+häkelt
+häkelte
+häkelten
+häkeltest
+häkeltet
+häkle
+hält
+hältst
+hämisch
+hämische
+hämischem
+hämischen
+hämischer
+hämischere
+hämischerem
+hämischeren
+hämischerer
+hämischeres
+hämisches
+hämischste
+hämischstem
+hämischsten
+hämischster
+hämischstes
+hämmere
+hämmern
+hämmernd
+hämmernde
+hämmerndem
+hämmernden
+hämmernder
+hämmerndes
+hämmerst
+hämmert
+hämmerte
+hämmerten
+hämmertest
+hämmertet
+hämmre
+händige
+händigen
+händigst
+händigt
+händigte
+händigten
+händigtest
+händigtet
+hänge
+hängen
+hängend
+hängende
+hängendem
+hängenden
+hängender
+hängendes
+hängig
+hängige
+hängigem
+hängigen
+hängiger
+hängiges
+hängst
+hängt
+hängte
+hängten
+hängtest
+hängtet
+hänsele
+hänseln
+hänselnd
+hänselnde
+hänselndem
+hänselnden
+hänselnder
+hänselndes
+hänselst
+hänselt
+hänselte
+hänselten
+hänseltest
+hänseltet
+hänsle
+härte
+härten
+härtend
+härtende
+härtendem
+härtenden
+härtender
+härtendes
+härter
+härtere
+härterem
+härteren
+härterer
+härteres
+härtest
+härteste
+härtestem
+härtesten
+härtester
+härtestes
+härtet
+härtete
+härteten
+härtetest
+härtetet
+hässlich
+hässliche
+hässlichem
+hässlichen
+hässlicher
+hässlichere
+hässlicherem
+hässlicheren
+hässlicherer
+hässlicheres
+hässliches
+hässlichste
+hässlichstem
+hässlichsten
+hässlichster
+hässlichstes
+hätschele
+hätscheln
+hätschelnd
+hätschelnde
+hätschelndem
+hätschelnden
+hätschelnder
+hätschelndes
+hätschelst
+hätschelt
+hätschelte
+hätschelten
+hätscheltest
+hätscheltet
+hätschle
+hätte
+hätten
+hättest
+hättet
+häufe
+häufen
+häufend
+häufende
+häufendem
+häufenden
+häufender
+häufendes
+häufig
+häufige
+häufigem
+häufigen
+häufiger
+häufigere
+häufigerem
+häufigeren
+häufigerer
+häufigeres
+häufiges
+häufigste
+häufigstem
+häufigsten
+häufigster
+häufigstes
+häufst
+häuft
+häufte
+häuften
+häuftest
+häuftet
+häuslich
+häusliche
+häuslichem
+häuslichen
+häuslicher
+häuslichere
+häuslicherem
+häuslicheren
+häuslicherer
+häuslicheres
+häusliches
+häuslichste
+häuslichstem
+häuslichsten
+häuslichster
+häuslichstes
+höchst
+höchste
+höchstem
+höchsten
+höchstens
+höchster
+höchstes
+höchstgenau
+höchstgenaue
+höchstgenauem
+höchstgenauen
+höchstgenauer
+höchstgenaues
+höchstmöglich
+höchstmögliche
+höchstmöglichem
+höchstmöglichen
+höchstmöglicher
+höchstmögliches
+höchstwahrscheinlich
+höchstwahrscheinliche
+höchstwahrscheinlichem
+höchstwahrscheinlichen
+höchstwahrscheinlicher
+höchstwahrscheinliches
+höchstzulässig
+höchstzulässige
+höchstzulässigem
+höchstzulässigen
+höchstzulässiger
+höchstzulässiges
+höfqqlich
+höfqqliche
+höfqqlichem
+höfqqlichen
+höfqqlicher
+höfqqlichere
+höfqqlicherem
+höfqqlicheren
+höfqqlicherer
+höfqqlicheres
+höfqqliches
+höfqqlichst
+höfqqlichste
+höfqqlichstem
+höfqqlichsten
+höfqqlichster
+höfqqlichstes
+höhenverstellbar
+höhenverstellbare
+höhenverstellbarem
+höhenverstellbaren
+höhenverstellbarer
+höhenverstellbares
+höher
+höhere
+höherem
+höheren
+höherer
+höheres
+höherfrequent
+höherfrequente
+höherfrequentem
+höherfrequenten
+höherfrequenter
+höherfrequentes
+höherwertig
+höherwertige
+höherwertigem
+höherwertigen
+höherwertiger
+höherwertiges
+höhlst
+höhlt
+höhne
+höhnen
+höhnend
+höhnende
+höhnendem
+höhnenden
+höhnender
+höhnendes
+höhnisch
+höhnische
+höhnischem
+höhnischen
+höhnischer
+höhnischere
+höhnischerem
+höhnischeren
+höhnischerer
+höhnischeres
+höhnisches
+höhnischste
+höhnischstem
+höhnischsten
+höhnischster
+höhnischstes
+höhnst
+höhnt
+höhnte
+höhnten
+höhntest
+höhntet
+höllisch
+höllische
+höllischem
+höllischen
+höllischer
+höllisches
+hölzern
+hölzerne
+hölzernem
+hölzernen
+hölzerner
+hölzernes
+hör
+hörbar
+hörbare
+hörbarem
+hörbaren
+hörbarer
+hörbares
+höre
+hören
+hörend
+hörende
+hörendem
+hörenden
+hörender
+hörendes
+hörig
+hörige
+hörigem
+hörigen
+höriger
+höriges
+hörst
+hört
+hörte
+hörten
+hörtest
+hörtet
+hübsch
+hübsche
+hübschem
+hübschen
+hübscher
+hübschere
+hübscherem
+hübscheren
+hübscherer
+hübscheres
+hübsches
+hübscheste
+hübschestem
+hübschesten
+hübschester
+hübschestes
+hügelig
+hügelige
+hügeligem
+hügeligen
+hügeliger
+hügeliges
+hüglig
+hüglige
+hügligem
+hügligen
+hügliger
+hügliges
+hülle
+hüllen
+hüllend
+hüllende
+hüllendem
+hüllenden
+hüllender
+hüllendes
+hüllst
+hüllt
+hüllte
+hüllten
+hülltest
+hülltet
+hündisch
+hündische
+hündischem
+hündischen
+hündischer
+hündisches
+hünenhaft
+hünenhafte
+hünenhaftem
+hünenhaften
+hünenhafter
+hünenhaftes
+hüpfe
+hüpfen
+hüpfend
+hüpfende
+hüpfendem
+hüpfenden
+hüpfender
+hüpfendes
+hüpfst
+hüpft
+hüpfte
+hüpften
+hüpftest
+hüpftet
+hüstele
+hüsteln
+hüstelnd
+hüstelnde
+hüstelndem
+hüstelnden
+hüstelnder
+hüstelndes
+hüstelst
+hüstelt
+hüstelte
+hüstelten
+hüsteltest
+hüsteltet
+hüstle
+hüte
+hüten
+hütend
+hütende
+hütendem
+hütenden
+hütender
+hütendes
+hütest
+hütet
+hütete
+hüteten
+hütetest
+hütetet
+ich
+ichbewusst
+ichbewusste
+ichbewusstem
+ichbewussten
+ichbewusster
+ichbewusstes
+ichbezogen
+ichbezogene
+ichbezogenem
+ichbezogenen
+ichbezogener
+ichbezogenes
+ideal
+ideale
+idealem
+idealen
+idealer
+idealere
+idealerem
+idealeren
+idealerer
+idealeres
+idealerweise
+ideales
+idealisiere
+idealisieren
+idealisierend
+idealisierende
+idealisierendem
+idealisierenden
+idealisierender
+idealisierendes
+idealisierst
+idealisiert
+idealisierte
+idealisiertem
+idealisierten
+idealisierter
+idealisiertes
+idealisiertest
+idealisiertet
+idealistisch
+idealistische
+idealistischem
+idealistischen
+idealistischer
+idealistischere
+idealistischerem
+idealistischeren
+idealistischerer
+idealistischeres
+idealistisches
+idealistischste
+idealistischstem
+idealistischsten
+idealistischster
+idealistischstes
+idealste
+idealstem
+idealsten
+idealster
+idealstes
+idealtypisch
+idealtypische
+idealtypischem
+idealtypischen
+idealtypischer
+idealtypisches
+ideell
+ideelle
+ideellem
+ideellen
+ideeller
+ideellere
+ideellerem
+ideelleren
+ideellerer
+ideelleres
+ideelles
+ideellste
+ideellstem
+ideellsten
+ideellster
+ideellstes
+ideenarm
+ideenarme
+ideenarmem
+ideenarmen
+ideenarmer
+ideenarmes
+ideenlos
+ideenlose
+ideenlosem
+ideenlosen
+ideenloser
+ideenloses
+ideenreich
+ideenreiche
+ideenreichem
+ideenreichen
+ideenreicher
+ideenreichere
+ideenreicherem
+ideenreicheren
+ideenreicherer
+ideenreicheres
+ideenreiches
+ideenreichste
+ideenreichstem
+ideenreichsten
+ideenreichster
+ideenreichstes
+identifizierbar
+identifizierbare
+identifizierbarem
+identifizierbaren
+identifizierbarer
+identifizierbares
+identifiziere
+identifizieren
+identifizierend
+identifizierende
+identifizierendem
+identifizierenden
+identifizierender
+identifizierendes
+identifizierst
+identifiziert
+identifizierte
+identifiziertem
+identifizierten
+identifizierter
+identifiziertes
+identifiziertest
+identifiziertet
+identisch
+identische
+identischem
+identischen
+identischer
+identisches
+ideologieanfällig
+ideologieanfällige
+ideologieanfälligem
+ideologieanfälligen
+ideologieanfälliger
+ideologieanfälliges
+ideologisch
+ideologische
+ideologischem
+ideologischen
+ideologischer
+ideologisches
+idiomatisch
+idiomatische
+idiomatischem
+idiomatischen
+idiomatischer
+idiomatisches
+idiotisch
+idiotische
+idiotischem
+idiotischen
+idiotischer
+idiotischere
+idiotischerem
+idiotischeren
+idiotischerer
+idiotischeres
+idiotischerweise
+idiotisches
+idiotischste
+idiotischstem
+idiotischsten
+idiotischster
+idiotischstes
+idyllisch
+idyllische
+idyllischem
+idyllischen
+idyllischer
+idyllischere
+idyllischerem
+idyllischeren
+idyllischerer
+idyllischeres
+idyllisches
+idyllischste
+idyllischstem
+idyllischsten
+idyllischster
+idyllischstes
+ignorant
+ignorante
+ignorantem
+ignoranten
+ignoranter
+ignorantes
+ignoriere
+ignorieren
+ignorierend
+ignorierende
+ignorierendem
+ignorierenden
+ignorierender
+ignorierendes
+ignorierst
+ignoriert
+ignorierte
+ignoriertem
+ignorierten
+ignorierter
+ignoriertes
+ignoriertest
+ignoriertet
+ihm
+ihn
+ihnen
+ihr
+ihre
+ihrem
+ihren
+ihrer
+ihrerseits
+ihres
+ihresgleichen
+ihrethalben
+ihretwegen
+ihretwillen
+ihrige
+ihrigem
+ihrigen
+ihriger
+ihriges
+illegal
+illegale
+illegalem
+illegalen
+illegaler
+illegales
+illegitim
+illegitime
+illegitimem
+illegitimen
+illegitimer
+illegitimes
+illiquide
+illiquidem
+illiquiden
+illiquider
+illiquides
+illoyal
+illoyale
+illoyalem
+illoyalen
+illoyaler
+illoyales
+illuminiere
+illuminieren
+illuminierend
+illuminierende
+illuminierendem
+illuminierenden
+illuminierender
+illuminierendes
+illuminierst
+illuminiert
+illuminierte
+illuminiertem
+illuminierten
+illuminierter
+illuminiertes
+illuminiertest
+illuminiertet
+illusionslos
+illusionslose
+illusionslosem
+illusionslosen
+illusionsloser
+illusionsloses
+illusorisch
+illusorische
+illusorischem
+illusorischen
+illusorischer
+illusorisches
+illuster
+illustere
+illusterem
+illusteren
+illusterer
+illusteres
+illustrativ
+illustrative
+illustrativem
+illustrativen
+illustrativer
+illustratives
+illustre
+illustrem
+illustren
+illustrer
+illustres
+illustriere
+illustrieren
+illustrierend
+illustrierende
+illustrierendem
+illustrierenden
+illustrierender
+illustrierendes
+illustrierst
+illustriert
+illustrierte
+illustriertem
+illustrierten
+illustrierter
+illustriertes
+illustriertest
+illustriertet
+im
+imaginativ
+imaginative
+imaginativem
+imaginativen
+imaginativer
+imaginatives
+imaginär
+imaginäre
+imaginärem
+imaginären
+imaginärer
+imaginäres
+imitiere
+imitieren
+imitierend
+imitierende
+imitierendem
+imitierenden
+imitierender
+imitierendes
+imitierst
+imitiert
+imitierte
+imitiertem
+imitierten
+imitierter
+imitiertes
+imitiertest
+imitiertet
+imkere
+imkern
+imkernd
+imkernde
+imkerndem
+imkernden
+imkernder
+imkerndes
+imkerst
+imkert
+imkerte
+imkerten
+imkertest
+imkertet
+imkre
+immanent
+immanente
+immanentem
+immanenten
+immanenter
+immanentes
+immateriell
+immaterielle
+immateriellem
+immateriellen
+immaterieller
+immaterielles
+immatrikuliere
+immatrikulieren
+immatrikulierend
+immatrikulierende
+immatrikulierendem
+immatrikulierenden
+immatrikulierender
+immatrikulierendes
+immatrikulierst
+immatrikuliert
+immatrikulierte
+immatrikuliertem
+immatrikulierten
+immatrikulierter
+immatrikuliertes
+immatrikuliertest
+immatrikuliertet
+immens
+immense
+immensem
+immensen
+immenser
+immenses
+immer
+immerfort
+immergrün
+immergrüne
+immergrünem
+immergrünen
+immergrüner
+immergrünes
+immerhin
+immerwähre
+immerwähren
+immerwährend
+immerwährende
+immerwährendem
+immerwährenden
+immerwährender
+immerwährendes
+immerwährst
+immerwährt
+immerzu
+immun
+immune
+immunem
+immunen
+immuner
+immunes
+immunisiere
+immunisieren
+immunisierend
+immunisierende
+immunisierendem
+immunisierenden
+immunisierender
+immunisierendes
+immunisierst
+immunisiert
+immunisierte
+immunisiertem
+immunisierten
+immunisierter
+immunisiertes
+immunisiertest
+immunisiertet
+imperativ
+imperative
+imperativem
+imperativen
+imperativer
+imperatives
+imperial
+imperiale
+imperialem
+imperialen
+imperialer
+imperiales
+imperialistisch
+imperialistische
+imperialistischem
+imperialistischen
+imperialistischer
+imperialistisches
+impertinent
+impertinente
+impertinentem
+impertinenten
+impertinenter
+impertinentes
+impfbar
+impfbare
+impfbarem
+impfbaren
+impfbarer
+impfbares
+impfe
+impfen
+impfend
+impfende
+impfendem
+impfenden
+impfender
+impfendes
+impfst
+impft
+impfte
+impften
+impftest
+impftet
+implantiere
+implantieren
+implantierend
+implantierende
+implantierendem
+implantierenden
+implantierender
+implantierendes
+implantierst
+implantiert
+implantierte
+implantiertem
+implantierten
+implantierter
+implantiertes
+implantiertest
+implantiertet
+implementationsabhängig
+implementationsabhängige
+implementationsabhängigem
+implementationsabhängigen
+implementationsabhängiger
+implementationsabhängiges
+implementationstechnisch
+implementationstechnische
+implementationstechnischem
+implementationstechnischen
+implementationstechnischer
+implementationstechnisches
+implementierbar
+implementierbare
+implementierbarem
+implementierbaren
+implementierbarer
+implementierbares
+implementiere
+implementieren
+implementierend
+implementierende
+implementierendem
+implementierenden
+implementierender
+implementierendes
+implementierst
+implementiert
+implementierte
+implementiertem
+implementierten
+implementierter
+implementiertes
+implementiertest
+implementiertet
+impliziere
+implizieren
+implizierend
+implizierende
+implizierendem
+implizierenden
+implizierender
+implizierendes
+implizierst
+impliziert
+implizierte
+impliziertem
+implizierten
+implizierter
+impliziertes
+impliziertest
+impliziertet
+implizit
+implizite
+implizitem
+impliziten
+impliziter
+implizites
+implodiere
+implodieren
+implodierend
+implodierende
+implodierendem
+implodierenden
+implodierender
+implodierendes
+implodierst
+implodiert
+implodierte
+implodiertem
+implodierten
+implodierter
+implodiertes
+implodiertest
+implodiertet
+imponiere
+imponieren
+imponierend
+imponierende
+imponierendem
+imponierenden
+imponierender
+imponierendes
+imponierst
+imponiert
+imponierte
+imponierten
+imponiertest
+imponiertet
+importiere
+importieren
+importierend
+importierende
+importierendem
+importierenden
+importierender
+importierendes
+importierst
+importiert
+importierte
+importiertem
+importierten
+importierter
+importiertes
+importiertest
+importiertet
+imposant
+imposante
+imposantem
+imposanten
+imposanter
+imposantere
+imposanterem
+imposanteren
+imposanterer
+imposanteres
+imposantes
+imposanteste
+imposantestem
+imposantesten
+imposantester
+imposantestes
+impotent
+impotente
+impotentem
+impotenten
+impotenter
+impotentere
+impotenterem
+impotenteren
+impotenterer
+impotenteres
+impotentes
+impotenteste
+impotentestem
+impotentesten
+impotentester
+impotentestes
+impressionistisch
+impressionistische
+impressionistischem
+impressionistischen
+impressionistischer
+impressionistisches
+improvisatorisch
+improvisatorische
+improvisatorischem
+improvisatorischen
+improvisatorischer
+improvisatorisches
+improvisierbar
+improvisierbare
+improvisierbarem
+improvisierbaren
+improvisierbarer
+improvisierbares
+improvisiere
+improvisieren
+improvisierend
+improvisierende
+improvisierendem
+improvisierenden
+improvisierender
+improvisierendes
+improvisierst
+improvisiert
+improvisierte
+improvisiertem
+improvisierten
+improvisierter
+improvisiertes
+improvisiertest
+improvisiertet
+imprägniere
+imprägnieren
+imprägnierend
+imprägnierende
+imprägnierendem
+imprägnierenden
+imprägnierender
+imprägnierendes
+imprägnierst
+imprägniert
+imprägnierte
+imprägniertem
+imprägnierten
+imprägnierter
+imprägniertes
+imprägniertest
+imprägniertet
+impulsartig
+impulsartige
+impulsartigem
+impulsartigen
+impulsartiger
+impulsartiges
+impulsiv
+impulsive
+impulsivem
+impulsiven
+impulsiver
+impulsivere
+impulsiverem
+impulsiveren
+impulsiverer
+impulsiveres
+impulsives
+impulsivste
+impulsivstem
+impulsivsten
+impulsivster
+impulsivstes
+imstande
+in
+inadäquat
+inadäquate
+inadäquatem
+inadäquaten
+inadäquater
+inadäquates
+inaktiv
+inaktive
+inaktivem
+inaktiven
+inaktiver
+inaktives
+inaktiviere
+inaktivieren
+inaktivierend
+inaktivierende
+inaktivierendem
+inaktivierenden
+inaktivierender
+inaktivierendes
+inaktivierst
+inaktiviert
+inaktivierte
+inaktiviertem
+inaktivierten
+inaktivierter
+inaktiviertes
+inaktiviertest
+inaktiviertet
+inakzeptabel
+inakzeptable
+inakzeptablem
+inakzeptablen
+inakzeptabler
+inakzeptables
+inbegriffen
+inbegriffene
+inbegriffenem
+inbegriffenen
+inbegriffener
+inbegriffenes
+inbesondere
+inbetriebnehme
+inbetriebnehmen
+inbetriebnehmt
+inbrünstig
+inbrünstige
+inbrünstigem
+inbrünstigen
+inbrünstiger
+inbrünstiges
+incl
+indefinit
+indefinite
+indefinitem
+indefiniten
+indefiniter
+indefinites
+indem
+indes
+indessen
+indexmäßig
+indexmäßige
+indexmäßigem
+indexmäßigen
+indexmäßiger
+indexmäßiges
+indianisch
+indianische
+indianischem
+indianischen
+indianischer
+indianisches
+indifferent
+indifferente
+indifferentem
+indifferenten
+indifferenter
+indifferentes
+indigniere
+indignieren
+indignierend
+indignierende
+indignierendem
+indignierenden
+indignierender
+indignierendes
+indignierst
+indigniert
+indignierte
+indigniertem
+indignierten
+indignierter
+indigniertes
+indigniertest
+indigniertet
+indirekt
+indirekte
+indirektem
+indirekten
+indirekter
+indirektes
+indisch
+indische
+indischem
+indischen
+indischer
+indisches
+indiskret
+indiskrete
+indiskretem
+indiskreten
+indiskreter
+indiskretere
+indiskreterem
+indiskreteren
+indiskreterer
+indiskreteres
+indiskretes
+indiskreteste
+indiskretestem
+indiskretesten
+indiskretester
+indiskretestes
+indiskutabel
+indiskutable
+indiskutablem
+indiskutablen
+indiskutabler
+indiskutables
+individualisiere
+individualisieren
+individualisierend
+individualisierende
+individualisierendem
+individualisierenden
+individualisierender
+individualisierendes
+individualisierst
+individualisiert
+individualisierte
+individualisiertem
+individualisierten
+individualisierter
+individualisiertes
+individualisiertest
+individualisiertet
+individualistisch
+individualistische
+individualistischem
+individualistischen
+individualistischer
+individualistisches
+individuell
+individuelle
+individuellem
+individuellen
+individueller
+individuellere
+individuellerem
+individuelleren
+individuellerer
+individuelleres
+individuelles
+individuellste
+individuellstem
+individuellsten
+individuellster
+individuellstes
+indiziere
+indizieren
+indizierend
+indizierende
+indizierendem
+indizierenden
+indizierender
+indizierendes
+indizierst
+indiziert
+indizierte
+indiziertem
+indizierten
+indizierter
+indiziertes
+indiziertest
+indiziertet
+indoktriniere
+indoktrinieren
+indoktrinierend
+indoktrinierende
+indoktrinierendem
+indoktrinierenden
+indoktrinierender
+indoktrinierendes
+indoktrinierst
+indoktriniert
+indoktrinierte
+indoktriniertem
+indoktrinierten
+indoktrinierter
+indoktriniertes
+indoktriniertest
+indoktriniertet
+indossiere
+indossieren
+indossierend
+indossierende
+indossierendem
+indossierenden
+indossierender
+indossierendes
+indossierst
+indossiert
+indossierte
+indossiertem
+indossierten
+indossierter
+indossiertes
+indossiertest
+indossiertet
+induktiv
+induktive
+induktivem
+induktiven
+induktiver
+induktives
+industrialisiere
+industrialisieren
+industrialisierend
+industrialisierende
+industrialisierendem
+industrialisierenden
+industrialisierender
+industrialisierendes
+industrialisierst
+industrialisiert
+industrialisierte
+industrialisiertem
+industrialisierten
+industrialisierter
+industrialisiertes
+industrialisiertest
+industrialisiertet
+industriell
+industrielle
+industriellem
+industriellen
+industrieller
+industrielles
+industrienah
+industrienahe
+industrienahem
+industrienahen
+industrienaher
+industrienahes
+industrieorientiert
+industrieorientierte
+industrieorientiertem
+industrieorientierten
+industrieorientierter
+industrieorientiertes
+induzierbar
+induzierbare
+induzierbarem
+induzierbaren
+induzierbarer
+induzierbares
+induziere
+induzieren
+induzierst
+induziert
+induzierte
+induziertem
+induzierten
+induzierter
+induziertes
+induziertest
+induziertet
+ineffizient
+ineffiziente
+ineffizientem
+ineffizienten
+ineffizienter
+ineffizientere
+ineffizienterem
+ineffizienteren
+ineffizienterer
+ineffizienteres
+ineffizientes
+ineffizienteste
+ineffizientestem
+ineffizientesten
+ineffizientester
+ineffizientestes
+ineinander
+inessentiell
+inessentielle
+inessentiellem
+inessentiellen
+inessentieller
+inessentielles
+inessenziell
+inessenzielle
+inessenziellem
+inessenziellen
+inessenzieller
+inessenzielles
+infam
+infame
+infamem
+infamen
+infamer
+infames
+infantil
+infantile
+infantilem
+infantilen
+infantiler
+infantiles
+inferierbar
+inferierbare
+inferierbarem
+inferierbaren
+inferierbarer
+inferierbares
+inferiere
+inferieren
+inferierend
+inferierende
+inferierendem
+inferierenden
+inferierender
+inferierendes
+inferierst
+inferiert
+inferierte
+inferiertem
+inferierten
+inferierter
+inferiertes
+inferiertest
+inferiertet
+infiltriere
+infiltrieren
+infiltrierend
+infiltrierende
+infiltrierendem
+infiltrierenden
+infiltrierender
+infiltrierendes
+infiltrierst
+infiltriert
+infiltrierte
+infiltriertem
+infiltrierten
+infiltrierter
+infiltriertes
+infiltriertest
+infiltriertet
+infinitesimal
+infinitesimale
+infinitesimalem
+infinitesimalen
+infinitesimaler
+infinitesimales
+infiziere
+infizieren
+infizierend
+infizierende
+infizierendem
+infizierenden
+infizierender
+infizierendes
+infizierst
+infiziert
+infizierte
+infiziertem
+infizierten
+infizierter
+infiziertes
+infiziertest
+infiziertet
+inflationistisch
+inflationistische
+inflationistischem
+inflationistischen
+inflationistischer
+inflationistisches
+inflationsanfällig
+inflationsanfällige
+inflationsanfälligem
+inflationsanfälligen
+inflationsanfälliger
+inflationsanfälliges
+inflationsbedingt
+inflationsbedingte
+inflationsbedingtem
+inflationsbedingten
+inflationsbedingter
+inflationsbedingtes
+inflationsbereinigt
+inflationsbereinigte
+inflationsbereinigtem
+inflationsbereinigten
+inflationsbereinigter
+inflationsbereinigtes
+inflationär
+inflationäre
+inflationärem
+inflationären
+inflationärer
+inflationäres
+inflatorisch
+inflatorische
+inflatorischem
+inflatorischen
+inflatorischer
+inflatorisches
+infolge
+infolgedessen
+informationstechnisch
+informationstechnische
+informationstechnischem
+informationstechnischen
+informationstechnischer
+informationstechnisches
+informativ
+informative
+informativem
+informativen
+informativer
+informatives
+informatorisch
+informatorische
+informatorischem
+informatorischen
+informatorischer
+informatorisches
+informell
+informelle
+informellem
+informellen
+informeller
+informelles
+informiere
+informieren
+informierend
+informierende
+informierendem
+informierenden
+informierender
+informierendes
+informierst
+informiert
+informierte
+informiertem
+informierten
+informierter
+informiertes
+informiertest
+informiertet
+infrage
+ingenieurmäßig
+ingenieurmäßige
+ingenieurmäßigem
+ingenieurmäßigen
+ingenieurmäßiger
+ingenieurmäßiges
+ingenieurwissenschaftlich
+ingenieurwissenschaftliche
+ingenieurwissenschaftlichem
+ingenieurwissenschaftlichen
+ingenieurwissenschaftlicher
+ingenieurwissenschaftliches
+inhaftiere
+inhaftieren
+inhaftierend
+inhaftierende
+inhaftierendem
+inhaftierenden
+inhaftierender
+inhaftierendes
+inhaftierst
+inhaftiert
+inhaftierte
+inhaftiertem
+inhaftierten
+inhaftierter
+inhaftiertes
+inhaftiertest
+inhaftiertet
+inhalierbar
+inhalierbare
+inhalierbarem
+inhalierbaren
+inhalierbarer
+inhalierbares
+inhaliere
+inhalieren
+inhalierend
+inhalierende
+inhalierendem
+inhalierenden
+inhalierender
+inhalierendes
+inhalierst
+inhaliert
+inhalierte
+inhaliertem
+inhalierten
+inhalierter
+inhaliertes
+inhaliertest
+inhaliertet
+inhaltlich
+inhaltliche
+inhaltlichem
+inhaltlichen
+inhaltlicher
+inhaltliches
+inhaltsabhängig
+inhaltsabhängige
+inhaltsabhängigem
+inhaltsabhängigen
+inhaltsabhängiger
+inhaltsabhängiges
+inhaltslos
+inhaltslose
+inhaltslosem
+inhaltslosen
+inhaltsloser
+inhaltsloses
+inhaltsreich
+inhaltsreiche
+inhaltsreichem
+inhaltsreichen
+inhaltsreicher
+inhaltsreichere
+inhaltsreicherem
+inhaltsreicheren
+inhaltsreicherer
+inhaltsreicheres
+inhaltsreiches
+inhaltsreichste
+inhaltsreichstem
+inhaltsreichsten
+inhaltsreichster
+inhaltsreichstes
+inhomogen
+inhomogene
+inhomogenem
+inhomogenen
+inhomogener
+inhomogenes
+inhuman
+inhumane
+inhumanem
+inhumanen
+inhumaner
+inhumanes
+inhärent
+inhärente
+inhärentem
+inhärenten
+inhärenter
+inhärentes
+initialisierbar
+initialisierbare
+initialisierbarem
+initialisierbaren
+initialisierbarer
+initialisierbares
+initialisiere
+initialisieren
+initialisierend
+initialisierende
+initialisierendem
+initialisierenden
+initialisierender
+initialisierendes
+initialisierst
+initialisiert
+initialisierte
+initialisiertem
+initialisierten
+initialisierter
+initialisiertes
+initialisiertest
+initialisiertet
+initiiere
+initiieren
+initiierend
+initiierende
+initiierendem
+initiierenden
+initiierender
+initiierendes
+initiierst
+initiiert
+initiierte
+initiiertem
+initiierten
+initiierter
+initiiertes
+initiiertest
+initiiertet
+injizierbar
+injizierbare
+injizierbarem
+injizierbaren
+injizierbarer
+injizierbares
+injiziere
+injizieren
+injizierend
+injizierende
+injizierendem
+injizierenden
+injizierender
+injizierendes
+injizierst
+injiziert
+injizierte
+injiziertem
+injizierten
+injizierter
+injiziertes
+injiziertest
+injiziertet
+inkl
+inkludiere
+inkludieren
+inkludierend
+inkludierende
+inkludierendem
+inkludierenden
+inkludierender
+inkludierendes
+inkludierst
+inkludiert
+inkludierte
+inkludiertem
+inkludierten
+inkludierter
+inkludiertes
+inkludiertest
+inkludiertet
+inklusive
+inkompatibel
+inkompatible
+inkompatiblem
+inkompatiblen
+inkompatibler
+inkompatibles
+inkompetent
+inkompetente
+inkompetentem
+inkompetenten
+inkompetenter
+inkompetentes
+inkonsequent
+inkonsequente
+inkonsequentem
+inkonsequenten
+inkonsequenter
+inkonsequentere
+inkonsequenterem
+inkonsequenteren
+inkonsequenterer
+inkonsequenteres
+inkonsequentes
+inkonsequenteste
+inkonsequentestem
+inkonsequentesten
+inkonsequentester
+inkonsequentestes
+inkonsistent
+inkonsistente
+inkonsistentem
+inkonsistenten
+inkonsistenter
+inkonsistentere
+inkonsistenterem
+inkonsistenteren
+inkonsistenterer
+inkonsistenteres
+inkonsistentes
+inkonsistenteste
+inkonsistentestem
+inkonsistentesten
+inkonsistentester
+inkonsistentestes
+inkorrekt
+inkorrekte
+inkorrektem
+inkorrekten
+inkorrekter
+inkorrektere
+inkorrekterem
+inkorrekteren
+inkorrekterer
+inkorrekteres
+inkorrektes
+inkorrekteste
+inkorrektestem
+inkorrektesten
+inkorrektester
+inkorrektestes
+inkrementell
+inkrementelle
+inkrementellem
+inkrementellen
+inkrementeller
+inkrementelles
+inkrementiere
+inkrementieren
+inkrementierend
+inkrementierende
+inkrementierendem
+inkrementierenden
+inkrementierender
+inkrementierendes
+inkrementierst
+inkrementiert
+inkrementierte
+inkrementiertem
+inkrementierten
+inkrementierter
+inkrementiertes
+inkrementiertest
+inkrementiertet
+inliegend
+inliegende
+inliegendem
+inliegenden
+inliegender
+inliegendes
+inländisch
+inländische
+inländischem
+inländischen
+inländischer
+inländisches
+inmitten
+inne
+innegewohnt
+innegewohnte
+innegewohntem
+innegewohnten
+innegewohnter
+innegewohntes
+innen
+innenpolitisch
+innenpolitische
+innenpolitischem
+innenpolitischen
+innenpolitischer
+innenpolitisches
+innerbetrieblich
+innerbetriebliche
+innerbetrieblichem
+innerbetrieblichen
+innerbetrieblicher
+innerbetriebliches
+innerdeutsch
+innerdeutsche
+innerdeutschem
+innerdeutschen
+innerdeutscher
+innerdeutsches
+innere
+innerem
+inneren
+innerer
+inneres
+innerhalb
+innerlich
+innerliche
+innerlichem
+innerlichen
+innerlicher
+innerliches
+innerorganismisch
+innerorganismische
+innerorganismischem
+innerorganismischen
+innerorganismischer
+innerorganismisches
+innerpolitisch
+innerpolitische
+innerpolitischem
+innerpolitischen
+innerpolitischer
+innerpolitisches
+innerrussisch
+innerrussische
+innerrussischem
+innerrussischen
+innerrussischer
+innerrussisches
+innerstaatlich
+innerstaatliche
+innerstaatlichem
+innerstaatlichen
+innerstaatlicher
+innerstaatliches
+innerste
+innerstem
+innersten
+innerster
+innerstes
+innig
+innige
+innigem
+innigen
+inniger
+innigere
+innigerem
+innigeren
+innigerer
+innigeres
+inniges
+innigste
+innigstem
+innigsten
+innigster
+innigstes
+innovativ
+innovative
+innovativem
+innovativen
+innovativer
+innovatives
+innoviere
+innovieren
+innovierend
+innovierende
+innovierendem
+innovierenden
+innovierender
+innovierendes
+innovierst
+innoviert
+innovierte
+innoviertem
+innovierten
+innovierter
+innoviertes
+innoviertest
+innoviertet
+inoffiziell
+inoffizielle
+inoffiziellem
+inoffiziellen
+inoffizieller
+inoffizielles
+inopportun
+inopportune
+inopportunem
+inopportunen
+inopportuner
+inopportunes
+inquisitorisch
+inquisitorische
+inquisitorischem
+inquisitorischen
+inquisitorischer
+inquisitorisches
+ins
+insbes
+insbesondere
+insektenförmig
+insektenförmige
+insektenförmigem
+insektenförmigen
+insektenförmiger
+insektenförmiges
+insektenhaft
+insektenhafte
+insektenhaftem
+insektenhaften
+insektenhafter
+insektenhaftes
+inselartig
+inselartige
+inselartigem
+inselartigen
+inselartiger
+inselartiges
+inseriere
+inserieren
+inserierend
+inserierende
+inserierendem
+inserierenden
+inserierender
+inserierendes
+inserierst
+inseriert
+inserierte
+inseriertem
+inserierten
+inserierter
+inseriertes
+inseriertest
+inseriertet
+insgeheim
+insgeheime
+insgeheimem
+insgeheimen
+insgeheimer
+insgeheimes
+insgesamt
+insistiere
+insistieren
+insistierst
+insistiert
+insistierte
+insistierten
+insistiertest
+insistiertet
+insofern
+insolvent
+insolvente
+insolventem
+insolventen
+insolventer
+insolventes
+insoweit
+inspiriere
+inspirieren
+inspirierend
+inspirierende
+inspirierendem
+inspirierenden
+inspirierender
+inspirierendes
+inspirierst
+inspiriert
+inspirierte
+inspiriertem
+inspirierten
+inspirierter
+inspiriertes
+inspiriertest
+inspiriertet
+inspiziere
+inspizieren
+inspizierend
+inspizierende
+inspizierendem
+inspizierenden
+inspizierender
+inspizierendes
+inspizierst
+inspiziert
+inspizierte
+inspiziertem
+inspizierten
+inspizierter
+inspiziertes
+inspiziertest
+inspiziertet
+instabil
+instabile
+instabilem
+instabilen
+instabiler
+instabiles
+installierbar
+installierbare
+installierbarem
+installierbaren
+installierbarer
+installierbares
+installiere
+installieren
+installierend
+installierende
+installierendem
+installierenden
+installierender
+installierendes
+installierst
+installiert
+installierte
+installiertem
+installierten
+installierter
+installiertes
+installiertest
+installiertet
+instand
+instandsetze
+instandsetzen
+instandsetzend
+instandsetzende
+instandsetzendem
+instandsetzenden
+instandsetzender
+instandsetzendes
+instandsetzest
+instandsetzt
+instandsetzte
+instandsetzten
+instandsetztest
+instandsetztet
+instantiierbar
+instantiierbare
+instantiierbarem
+instantiierbaren
+instantiierbarer
+instantiierbares
+instantiiere
+instantiieren
+instantiierend
+instantiierende
+instantiierendem
+instantiierenden
+instantiierender
+instantiierendes
+instantiierst
+instantiiert
+instantiierte
+instantiiertem
+instantiierten
+instantiierter
+instantiiertes
+instantiiertest
+instantiiertet
+instinktiv
+instinktive
+instinktivem
+instinktiven
+instinktiver
+instinktives
+instinktmäßig
+instinktmäßige
+instinktmäßigem
+instinktmäßigen
+instinktmäßiger
+instinktmäßiges
+institutionalisiere
+institutionalisieren
+institutionalisierst
+institutionalisiert
+institutionalisierte
+institutionalisiertem
+institutionalisierten
+institutionalisierter
+institutionalisiertes
+institutionalisiertest
+institutionalisiertet
+institutionell
+institutionelle
+institutionellem
+institutionellen
+institutioneller
+institutionelles
+institutiv
+institutive
+institutivem
+institutiven
+institutiver
+institutives
+instruiere
+instruieren
+instruierend
+instruierende
+instruierendem
+instruierenden
+instruierender
+instruierendes
+instruierst
+instruiert
+instruierte
+instruiertem
+instruierten
+instruierter
+instruiertes
+instruiertest
+instruiertet
+instruktiv
+instruktive
+instruktivem
+instruktiven
+instruktiver
+instruktives
+instrumental
+instrumentale
+instrumentalem
+instrumentalen
+instrumentaler
+instrumentales
+inständig
+inständige
+inständigem
+inständigen
+inständiger
+inständigere
+inständigerem
+inständigeren
+inständigerer
+inständigeres
+inständiges
+inständigst
+inständigste
+inständigstem
+inständigsten
+inständigster
+inständigstes
+inszenatorisch
+inszenatorische
+inszenatorischem
+inszenatorischen
+inszenatorischer
+inszenatorisches
+inszeniere
+inszenieren
+inszenierend
+inszenierende
+inszenierendem
+inszenierenden
+inszenierender
+inszenierendes
+inszenierst
+inszeniert
+inszenierte
+inszeniertem
+inszenierten
+inszenierter
+inszeniertes
+inszeniertest
+inszeniertet
+intakt
+intakte
+intaktem
+intakten
+intakter
+intaktere
+intakterem
+intakteren
+intakterer
+intakteres
+intaktes
+intakteste
+intaktestem
+intaktesten
+intaktester
+intaktestes
+integral
+integrale
+integralem
+integralen
+integraler
+integrales
+integrationsfähig
+integrationsfähige
+integrationsfähigem
+integrationsfähigen
+integrationsfähiger
+integrationsfähiges
+integrativ
+integrative
+integrativem
+integrativen
+integrativer
+integratives
+integrierbar
+integrierbare
+integrierbarem
+integrierbaren
+integrierbarer
+integrierbares
+integriere
+integrieren
+integrierend
+integrierende
+integrierendem
+integrierenden
+integrierender
+integrierendes
+integrierst
+integriert
+integrierte
+integriertem
+integrierten
+integrierter
+integriertes
+integriertest
+integriertet
+intellektualistisch
+intellektualistische
+intellektualistischem
+intellektualistischen
+intellektualistischer
+intellektualistisches
+intellektuell
+intellektuelle
+intellektuellem
+intellektuellen
+intellektueller
+intellektuelles
+intelligent
+intelligente
+intelligentem
+intelligenten
+intelligenter
+intelligentere
+intelligenterem
+intelligenteren
+intelligenterer
+intelligenteres
+intelligentes
+intelligenteste
+intelligentestem
+intelligentesten
+intelligentester
+intelligentestes
+intendiere
+intendieren
+intendierend
+intendierende
+intendierendem
+intendierenden
+intendierender
+intendierendes
+intendierst
+intendiert
+intendierte
+intendiertem
+intendierten
+intendierter
+intendiertes
+intendiertest
+intendiertet
+intensiv
+intensive
+intensivem
+intensiven
+intensiver
+intensivere
+intensiverem
+intensiveren
+intensiverer
+intensiveres
+intensives
+intensiviere
+intensivieren
+intensivierend
+intensivierende
+intensivierendem
+intensivierenden
+intensivierender
+intensivierendes
+intensivierst
+intensiviert
+intensivierte
+intensiviertem
+intensivierten
+intensivierter
+intensiviertes
+intensiviertest
+intensiviertet
+intensivste
+intensivstem
+intensivsten
+intensivster
+intensivstes
+interagiere
+interagieren
+interagierend
+interagierende
+interagierendem
+interagierenden
+interagierender
+interagierendes
+interagierst
+interagiert
+interagierte
+interagiertem
+interagierten
+interagierter
+interagiertes
+interagiertest
+interagiertet
+interaktiv
+interaktive
+interaktivem
+interaktiven
+interaktiver
+interaktives
+interdisziplinär
+interdisziplinäre
+interdisziplinärem
+interdisziplinären
+interdisziplinärer
+interdisziplinäres
+interessant
+interessante
+interessantem
+interessanten
+interessanter
+interessantere
+interessanterem
+interessanteren
+interessanterer
+interessanteres
+interessanterweise
+interessantes
+interessanteste
+interessantestem
+interessantesten
+interessantester
+interessantestes
+interessenbedingt
+interessenbedingte
+interessenbedingtem
+interessenbedingten
+interessenbedingter
+interessenbedingtes
+interessiere
+interessieren
+interessierend
+interessierende
+interessierendem
+interessierenden
+interessierender
+interessierendes
+interessierst
+interessiert
+interessierte
+interessiertem
+interessierten
+interessierter
+interessiertes
+interessiertest
+interessiertet
+interferiere
+interferieren
+interferierend
+interferierende
+interferierendem
+interferierenden
+interferierender
+interferierendes
+interferierst
+interferiert
+interferierte
+interferiertem
+interferierten
+interferierter
+interferiertes
+interferiertest
+interferiertet
+interfraktionell
+interfraktionelle
+interfraktionellem
+interfraktionellen
+interfraktioneller
+interfraktionelles
+intermediär
+intermediäre
+intermediärem
+intermediären
+intermediärer
+intermediäres
+intern
+international
+internationale
+internationalem
+internationalen
+internationaler
+internationales
+interne
+internem
+internen
+interner
+internes
+interniere
+internieren
+internierst
+interniert
+internierte
+interniertem
+internierten
+internierter
+interniertes
+interniertest
+interniertet
+interpretativ
+interpretative
+interpretativem
+interpretativen
+interpretativer
+interpretatives
+interpretierbar
+interpretierbare
+interpretierbarem
+interpretierbaren
+interpretierbarer
+interpretierbares
+interpretiere
+interpretieren
+interpretierend
+interpretierende
+interpretierendem
+interpretierenden
+interpretierender
+interpretierendes
+interpretierst
+interpretiert
+interpretierte
+interpretiertem
+interpretierten
+interpretierter
+interpretiertes
+interpretiertest
+interpretiertet
+interprozedural
+interprozedurale
+interprozeduralem
+interprozeduralen
+interprozeduraler
+interprozedurales
+intervallabhängig
+intervallabhängige
+intervallabhängigem
+intervallabhängigen
+intervallabhängiger
+intervallabhängiges
+interveniere
+intervenieren
+intervenierend
+intervenierende
+intervenierendem
+intervenierenden
+intervenierender
+intervenierendes
+intervenierst
+interveniert
+intervenierte
+interveniertem
+intervenierten
+intervenierter
+interveniertes
+interveniertest
+interveniertet
+interviewe
+interviewen
+interviewend
+interviewende
+interviewendem
+interviewenden
+interviewender
+interviewendes
+interviewest
+interviewet
+interviewete
+interviewetem
+intervieweten
+intervieweter
+interviewetes
+interviewetest
+interviewetet
+interviewt
+inthronisiere
+inthronisieren
+inthronisierend
+inthronisierende
+inthronisierendem
+inthronisierenden
+inthronisierender
+inthronisierendes
+inthronisierst
+inthronisiert
+inthronisierte
+inthronisiertem
+inthronisierten
+inthronisierter
+inthronisiertes
+inthronisiertest
+inthronisiertet
+intim
+intime
+intimem
+intimen
+intimer
+intimere
+intimerem
+intimeren
+intimerer
+intimeres
+intimes
+intimste
+intimstem
+intimsten
+intimster
+intimstes
+intolerant
+intolerante
+intolerantem
+intoleranten
+intoleranter
+intolerantere
+intoleranterem
+intoleranteren
+intoleranterer
+intoleranteres
+intolerantes
+intoleranteste
+intolerantestem
+intolerantesten
+intolerantester
+intolerantestes
+intoniere
+intonieren
+intonierend
+intonierende
+intonierendem
+intonierenden
+intonierender
+intonierendes
+intonierst
+intoniert
+intonierte
+intoniertem
+intonierten
+intonierter
+intoniertes
+intoniertest
+intoniertet
+intransitiv
+intransitive
+intransitivem
+intransitiven
+intransitiver
+intransitives
+intrapoliere
+intrapolieren
+intrapolierend
+intrapolierende
+intrapolierendem
+intrapolierenden
+intrapolierender
+intrapolierendes
+intrapolierst
+intrapoliert
+intrapolierte
+intrapoliertem
+intrapolierten
+intrapolierter
+intrapoliertes
+intrapoliertest
+intrapoliertet
+intraprozedural
+intraprozedurale
+intraprozeduralem
+intraprozeduralen
+intraprozeduraler
+intraprozedurales
+intraspezifisch
+intraspezifische
+intraspezifischem
+intraspezifischen
+intraspezifischer
+intraspezifisches
+intravenös
+intravenöse
+intravenösem
+intravenösen
+intravenöser
+intravenöses
+intrigiere
+intrigieren
+intrigierend
+intrigierende
+intrigierendem
+intrigierenden
+intrigierender
+intrigierendes
+intrigierst
+intrigiert
+intrigierte
+intrigiertem
+intrigierten
+intrigierter
+intrigiertes
+intrigiertest
+intrigiertet
+intuitiv
+intuitive
+intuitivem
+intuitiven
+intuitiver
+intuitives
+invariant
+invariante
+invariantem
+invarianten
+invarianter
+invariantes
+inventarisiertbar
+inventarisiertbare
+inventarisiertbarem
+inventarisiertbaren
+inventarisiertbarer
+inventarisiertbares
+inventarisierte
+inventarisierten
+inventarisiertest
+inventarisiertet
+inventarisiertete
+inventarisiertetem
+inventarisierteten
+inventarisierteter
+inventarisiertetes
+inventarisiertetest
+inventarisiertetet
+invers
+inverse
+inversem
+inversen
+inverser
+inverses
+invertiere
+invertieren
+invertierend
+invertierende
+invertierendem
+invertierenden
+invertierender
+invertierendes
+invertierst
+invertiert
+invertierte
+invertiertem
+invertierten
+invertierter
+invertiertes
+invertiertest
+invertiertet
+investiere
+investieren
+investierend
+investierende
+investierendem
+investierenden
+investierender
+investierendes
+investierst
+investiert
+investierte
+investiertem
+investierten
+investierter
+investiertes
+investiertest
+investiertet
+involviere
+involvieren
+involvierend
+involvierende
+involvierendem
+involvierenden
+involvierender
+involvierendes
+involvierst
+involviert
+involvierte
+involviertem
+involvierten
+involvierter
+involviertes
+involviertest
+involviertet
+inwendig
+inwendige
+inwendigem
+inwendigen
+inwendiger
+inwendiges
+inwiefern
+inwieweit
+inzwischen
+ionisiere
+ionisieren
+ionisierend
+ionisierende
+ionisierendem
+ionisierenden
+ionisierender
+ionisierendes
+ionisierst
+ionisiert
+ionisierte
+ionisiertem
+ionisierten
+ionisierter
+ionisiertes
+ionisiertest
+ionisiertet
+iota
+ipso
+irakisch
+irakische
+irakischem
+irakischen
+irakischer
+irakisches
+iranisch
+iranische
+iranischem
+iranischen
+iranischer
+iranisches
+irdisch
+irdische
+irdischem
+irdischen
+irdischer
+irdisches
+irgend
+irgendein
+irgendeine
+irgendeinem
+irgendeinen
+irgendeiner
+irgendeines
+irgendeinmal
+irgendetwas
+irgendjemand
+irgendjemande
+irgendjemandem
+irgendjemanden
+irgendjemander
+irgendjemandes
+irgendwann
+irgendwas
+irgendwelche
+irgendwelchem
+irgendwelchen
+irgendwelcher
+irgendwelches
+irgendwem
+irgendwer
+irgendwie
+irgendwo
+irgendwohin
+irisch
+irische
+irischem
+irischen
+irischer
+irisches
+ironisch
+ironische
+ironischem
+ironischen
+ironischer
+ironischere
+ironischerem
+ironischeren
+ironischerer
+ironischeres
+ironisches
+ironischste
+ironischstem
+ironischsten
+ironischster
+ironischstes
+ironisiere
+ironisieren
+ironisierend
+ironisierende
+ironisierendem
+ironisierenden
+ironisierender
+ironisierendes
+ironisierst
+ironisiert
+ironisierte
+ironisierten
+ironisiertest
+ironisiertet
+irr
+irrational
+irrationale
+irrationalem
+irrationalen
+irrationaler
+irrationales
+irre
+irreal
+irreale
+irrealem
+irrealen
+irrealer
+irreales
+irreführe
+irreführen
+irreführend
+irreführende
+irreführendem
+irreführenden
+irreführender
+irreführendes
+irreführst
+irreführt
+irreführte
+irreführten
+irreführtest
+irreführtet
+irregeführt
+irregeführte
+irregeführtem
+irregeführten
+irregeführter
+irregeführtes
+irregulär
+irreguläre
+irregulärem
+irregulären
+irregulärer
+irreguläres
+irrelevant
+irrelevante
+irrelevantem
+irrelevanten
+irrelevanter
+irrelevantes
+irreligiös
+irreligiöse
+irreligiösem
+irreligiösen
+irreligiöser
+irreligiöses
+irrem
+irren
+irrend
+irrende
+irrendem
+irrenden
+irrender
+irrendes
+irreparabel
+irreparable
+irreparablem
+irreparablen
+irreparabler
+irreparables
+irrer
+irrere
+irrerem
+irreren
+irrerer
+irreres
+irres
+irreversibel
+irreversible
+irreversiblem
+irreversiblen
+irreversibler
+irreversibles
+irrezuführen
+irrezuführend
+irrezuführende
+irrezuführendem
+irrezuführenden
+irrezuführender
+irrezuführendes
+irrig
+irrige
+irrigem
+irrigen
+irriger
+irriges
+irritierbar
+irritierbare
+irritierbarem
+irritierbaren
+irritierbarer
+irritierbares
+irritiere
+irritieren
+irritierend
+irritierende
+irritierendem
+irritierenden
+irritierender
+irritierendes
+irritierst
+irritiert
+irritierte
+irritiertem
+irritierten
+irritierter
+irritiertes
+irritiertest
+irritiertet
+irrsinnig
+irrsinnige
+irrsinnigem
+irrsinnigen
+irrsinniger
+irrsinnigere
+irrsinnigerem
+irrsinnigeren
+irrsinnigerer
+irrsinnigeres
+irrsinniges
+irrsinnigste
+irrsinnigstem
+irrsinnigsten
+irrsinnigster
+irrsinnigstes
+irrst
+irrste
+irrstem
+irrsten
+irrster
+irrstes
+irrt
+irrte
+irrten
+irrtest
+irrtet
+irrtümlich
+irrtümliche
+irrtümlichem
+irrtümlichen
+irrtümlicher
+irrtümlicherweise
+irrtümliches
+islamisch
+islamische
+islamischem
+islamischen
+islamischer
+islamisches
+isländisch
+isländische
+isländischem
+isländischen
+isländischer
+isländisches
+isolationistisch
+isolationistische
+isolationistischem
+isolationistischen
+isolationistischer
+isolationistisches
+isolierbar
+isolierbare
+isolierbarem
+isolierbaren
+isolierbarer
+isolierbares
+isoliere
+isolieren
+isolierend
+isolierende
+isolierendem
+isolierenden
+isolierender
+isolierendes
+isolierst
+isoliert
+isolierte
+isoliertem
+isolierten
+isolierter
+isoliertes
+isoliertest
+isoliertet
+isometrisch
+isometrische
+isometrischem
+isometrischen
+isometrischer
+isometrisches
+israelisch
+israelische
+israelischem
+israelischen
+israelischer
+israelisches
+iss
+isst
+ist
+italic
+italienisch
+italienische
+italienischem
+italienischen
+italienischer
+italienisches
+iterativ
+iterative
+iterativem
+iterativen
+iterativer
+iteratives
+iteriere
+iterieren
+iterierend
+iterierende
+iterierendem
+iterierenden
+iterierender
+iterierendes
+iterierst
+iteriert
+iterierte
+iteriertem
+iterierten
+iterierter
+iteriertes
+iteriertest
+iteriertet
+ja
+jagdgrün
+jagdgrüne
+jagdgrünem
+jagdgrünen
+jagdgrüner
+jagdgrünes
+jage
+jagen
+jagend
+jagende
+jagendem
+jagenden
+jagender
+jagendes
+jagst
+jagt
+jagte
+jagten
+jagtest
+jagtet
+jahraus
+jahrein
+jahrelang
+jahrelange
+jahrelangem
+jahrelangen
+jahrelanger
+jahrelanges
+jahreszeitlich
+jahreszeitliche
+jahreszeitlichem
+jahreszeitlichen
+jahreszeitlicher
+jahreszeitliches
+jahrhundertealt
+jahrhundertealte
+jahrhundertealtem
+jahrhundertealten
+jahrhundertealter
+jahrhundertealtes
+jahrhundertelang
+jahrhundertelange
+jahrhundertelangem
+jahrhundertelangen
+jahrhundertelanger
+jahrhundertelanges
+jahrtausendelang
+jahrtausendelange
+jahrtausendelangem
+jahrtausendelangen
+jahrtausendelanger
+jahrtausendelanges
+jahrzehntelang
+jahrzehntelange
+jahrzehntelangem
+jahrzehntelangen
+jahrzehntelanger
+jahrzehntelanges
+jammere
+jammern
+jammernd
+jammernde
+jammerndem
+jammernden
+jammernder
+jammerndes
+jammerst
+jammert
+jammerte
+jammerten
+jammertest
+jammertet
+jammre
+janusköpfig
+janusköpfige
+janusköpfigem
+janusköpfigen
+janusköpfiger
+janusköpfiges
+japanisch
+japanische
+japanischem
+japanischen
+japanischer
+japanisches
+jauchze
+jauchzen
+jauchzend
+jauchzende
+jauchzendem
+jauchzenden
+jauchzender
+jauchzendes
+jauchzest
+jauchzt
+jauchzte
+jauchzten
+jauchztest
+jauchztet
+jaule
+jaulen
+jaulend
+jaulende
+jaulendem
+jaulenden
+jaulender
+jaulendes
+jaulst
+jault
+jaulte
+jaulten
+jaultest
+jaultet
+javanisch
+javanische
+javanischem
+javanischen
+javanischer
+javanisches
+je
+jede
+jedem
+jeden
+jedenfalls
+jeder
+jederlei
+jedermann
+jederzeit
+jederzeitig
+jederzeitige
+jederzeitigem
+jederzeitigen
+jederzeitiger
+jederzeitiges
+jedes
+jedoch
+jedwede
+jedwedem
+jedweden
+jedweder
+jedwedes
+jegliche
+jeglichem
+jeglichen
+jeglicher
+jegliches
+jeher
+jemals
+jemand
+jemandem
+jemanden
+jemandes
+jemehr
+jene
+jenem
+jenen
+jener
+jenes
+jenseits
+jette
+jetten
+jettend
+jettende
+jettendem
+jettenden
+jettender
+jettendes
+jettest
+jettet
+jettete
+jetteten
+jettetest
+jettetet
+jetzige
+jetzigem
+jetzigen
+jetziger
+jetziges
+jetzt
+jeweilig
+jeweilige
+jeweiligem
+jeweiligen
+jeweiliger
+jeweiliges
+jeweils
+jiddisch
+jiddische
+jiddischem
+jiddischen
+jiddischer
+jiddisches
+jmdm
+jobbe
+jobben
+jobbend
+jobbende
+jobbendem
+jobbenden
+jobbender
+jobbendes
+jobbst
+jobbt
+jobbte
+jobbten
+jobbtest
+jobbtet
+jongliere
+jonglieren
+jonglierend
+jonglierende
+jonglierendem
+jonglierenden
+jonglierender
+jonglierendes
+jonglierst
+jongliert
+jonglierte
+jonglierten
+jongliertest
+jongliertet
+jordanisch
+jordanische
+jordanischem
+jordanischen
+jordanischer
+jordanisches
+journalistisch
+journalistische
+journalistischem
+journalistischen
+journalistischer
+journalistisches
+jubele
+jubeln
+jubelnd
+jubelnde
+jubelndem
+jubelnden
+jubelnder
+jubelndes
+jubelst
+jubelt
+jubelte
+jubelten
+jubeltest
+jubeltet
+juble
+jucke
+jucken
+juckend
+juckende
+juckendem
+juckenden
+juckender
+juckendes
+juckst
+juckt
+juckte
+juckten
+jucktest
+jucktet
+judiziere
+judizieren
+judizierend
+judizierende
+judizierendem
+judizierenden
+judizierender
+judizierendes
+judizierst
+judiziert
+judizierte
+judiziertem
+judizierten
+judizierter
+judiziertes
+judiziertest
+judiziertet
+jugendlich
+jugendliche
+jugendlichem
+jugendlichen
+jugendlicher
+jugendliches
+jugoslawisch
+jugoslawische
+jugoslawischem
+jugoslawischen
+jugoslawischer
+jugoslawisches
+jung
+junge
+jungem
+jungen
+jungenhaft
+jungenhafte
+jungenhaftem
+jungenhaften
+jungenhafter
+jungenhaftes
+junger
+junges
+jungfräulich
+jungfräuliche
+jungfräulichem
+jungfräulichen
+jungfräulicher
+jungfräuliches
+junggeblieben
+junggebliebene
+junggebliebenem
+junggebliebenen
+junggebliebener
+junggebliebenes
+jure
+juristisch
+juristische
+juristischem
+juristischen
+juristischer
+juristisches
+juryfrei
+juryfreie
+juryfreiem
+juryfreien
+juryfreier
+juryfreies
+just
+justierbar
+justierbare
+justierbarem
+justierbaren
+justierbarer
+justierbares
+justiere
+justieren
+justierend
+justierende
+justierendem
+justierenden
+justierender
+justierendes
+justierst
+justiert
+justierte
+justiertem
+justierten
+justierter
+justiertes
+justiertest
+justiertet
+jäh
+jähe
+jähem
+jähen
+jäher
+jähes
+jählings
+jähre
+jähren
+jährig
+jährige
+jährigem
+jährigen
+jähriger
+jähriges
+jährlich
+jährliche
+jährlichem
+jährlichen
+jährlicher
+jährliches
+jährst
+jährt
+jährte
+jährten
+jährtest
+jährtet
+jähzornig
+jähzornige
+jähzornigem
+jähzornigen
+jähzorniger
+jähzornigere
+jähzornigerem
+jähzornigeren
+jähzornigerer
+jähzornigeres
+jähzorniges
+jähzornigste
+jähzornigstem
+jähzornigsten
+jähzornigster
+jähzornigstes
+jämmerlich
+jämmerliche
+jämmerlichem
+jämmerlichen
+jämmerlicher
+jämmerlichere
+jämmerlicherem
+jämmerlicheren
+jämmerlicherer
+jämmerlicheres
+jämmerliches
+jämmerlichste
+jämmerlichstem
+jämmerlichsten
+jämmerlichster
+jämmerlichstes
+jäte
+jäten
+jätend
+jätende
+jätendem
+jätenden
+jätender
+jätendes
+jätest
+jätet
+jätete
+jäteten
+jätetest
+jätetet
+jüdisch
+jüdische
+jüdischem
+jüdischen
+jüdischer
+jüdisches
+jünger
+jüngere
+jüngerem
+jüngeren
+jüngerer
+jüngeres
+jüngst
+jüngste
+jüngstem
+jüngsten
+jüngster
+jüngstes
+kHz
+kOhm
+kW
+kabarettistisch
+kabarettistische
+kabarettistischem
+kabarettistischen
+kabarettistischer
+kabarettistisches
+kabbele
+kabbeln
+kabbelnd
+kabbelnde
+kabbelndem
+kabbelnden
+kabbelnder
+kabbelndes
+kabbelst
+kabbelt
+kabbelte
+kabbelten
+kabbeltest
+kabbeltet
+kabble
+kabele
+kabelgerecht
+kabelgerechte
+kabelgerechtem
+kabelgerechten
+kabelgerechter
+kabelgerechtes
+kabeln
+kabelnd
+kabelnde
+kabelndem
+kabelnden
+kabelnder
+kabelndes
+kabelseitig
+kabelseitige
+kabelseitigem
+kabelseitigen
+kabelseitiger
+kabelseitiges
+kabelst
+kabelt
+kabelte
+kabelten
+kabeltest
+kabeltet
+kable
+kahl
+kahle
+kahlem
+kahlen
+kahler
+kahles
+kahlköpfig
+kahlköpfige
+kahlköpfigem
+kahlköpfigen
+kahlköpfiger
+kahlköpfiges
+kahmig
+kahmige
+kahmigem
+kahmigen
+kahmiger
+kahmiges
+kaiserlich
+kaiserliche
+kaiserlichem
+kaiserlichen
+kaiserlicher
+kaiserliches
+kalbere
+kalbern
+kalbernd
+kalbernde
+kalberndem
+kalbernden
+kalbernder
+kalberndes
+kalberst
+kalbert
+kalberte
+kalberten
+kalbertest
+kalbertet
+kalbre
+kalendarisch
+kalendarische
+kalendarischem
+kalendarischen
+kalendarischer
+kalendarisches
+kalibriere
+kalibrieren
+kalibrierend
+kalibrierende
+kalibrierendem
+kalibrierenden
+kalibrierender
+kalibrierendes
+kalibrierst
+kalibriert
+kalibrierte
+kalibriertem
+kalibrierten
+kalibrierter
+kalibriertes
+kalibriertest
+kalibriertet
+kalifornisch
+kalifornische
+kalifornischem
+kalifornischen
+kalifornischer
+kalifornisches
+kalkarm
+kalkarme
+kalkarmem
+kalkarmen
+kalkarmer
+kalkarmes
+kalkartig
+kalkartige
+kalkartigem
+kalkartigen
+kalkartiger
+kalkartiges
+kalkig
+kalkige
+kalkigem
+kalkigen
+kalkiger
+kalkiges
+kalkulatorisch
+kalkulatorische
+kalkulatorischem
+kalkulatorischen
+kalkulatorischer
+kalkulatorisches
+kalkulierbar
+kalkulierbare
+kalkulierbarem
+kalkulierbaren
+kalkulierbarer
+kalkulierbares
+kalkuliere
+kalkulieren
+kalkulierend
+kalkulierende
+kalkulierendem
+kalkulierenden
+kalkulierender
+kalkulierendes
+kalkulierst
+kalkuliert
+kalkulierte
+kalkuliertem
+kalkulierten
+kalkulierter
+kalkuliertes
+kalkuliertest
+kalkuliertet
+kalorienbewusst
+kalorienbewusste
+kalorienbewusstem
+kalorienbewussten
+kalorienbewusster
+kalorienbewusstere
+kalorienbewussterem
+kalorienbewussteren
+kalorienbewussterer
+kalorienbewussteres
+kalorienbewusstes
+kalorienbewussteste
+kalorienbewusstestem
+kalorienbewusstesten
+kalorienbewusstester
+kalorienbewusstestes
+kalorienreich
+kalorienreiche
+kalorienreichem
+kalorienreichen
+kalorienreicher
+kalorienreichere
+kalorienreicherem
+kalorienreicheren
+kalorienreicherer
+kalorienreicheres
+kalorienreiches
+kalorienreichste
+kalorienreichstem
+kalorienreichsten
+kalorienreichster
+kalorienreichstes
+kalt
+kaltblütig
+kaltblütige
+kaltblütigem
+kaltblütigen
+kaltblütiger
+kaltblütigere
+kaltblütigerem
+kaltblütigeren
+kaltblütigerer
+kaltblütigeres
+kaltblütiges
+kaltblütigste
+kaltblütigstem
+kaltblütigsten
+kaltblütigster
+kaltblütigstes
+kaltbrüchig
+kaltbrüchige
+kaltbrüchigem
+kaltbrüchigen
+kaltbrüchiger
+kaltbrüchiges
+kalte
+kaltem
+kalten
+kalter
+kaltes
+kaltfeucht
+kaltfeuchte
+kaltfeuchtem
+kaltfeuchten
+kaltfeuchter
+kaltfeuchtes
+kaltgeblieben
+kaltgebliebene
+kaltgebliebenem
+kaltgebliebenen
+kaltgebliebener
+kaltgebliebenes
+kaltgemacht
+kaltgemachte
+kaltgemachtem
+kaltgemachten
+kaltgemachter
+kaltgemachtes
+kaltgestellt
+kaltgestellte
+kaltgestelltem
+kaltgestellten
+kaltgestellter
+kaltgestelltes
+kaltherzig
+kaltherzige
+kaltherzigem
+kaltherzigen
+kaltherziger
+kaltherzigere
+kaltherzigerem
+kaltherzigeren
+kaltherzigerer
+kaltherzigeres
+kaltherziges
+kaltherzigste
+kaltherzigstem
+kaltherzigsten
+kaltherzigster
+kaltherzigstes
+kalthärte
+kalthärten
+kalthärtend
+kalthärtende
+kalthärtendem
+kalthärtenden
+kalthärtender
+kalthärtendes
+kalthärtest
+kalthärtet
+kalthärtete
+kalthärteten
+kalthärtetest
+kalthärtetet
+kaltmache
+kaltmachen
+kaltmachend
+kaltmachende
+kaltmachendem
+kaltmachenden
+kaltmachender
+kaltmachendes
+kaltmachst
+kaltmacht
+kaltmachte
+kaltmachten
+kaltmachtest
+kaltmachtet
+kaltschnäuzig
+kaltschnäuzige
+kaltschnäuzigem
+kaltschnäuzigen
+kaltschnäuziger
+kaltschnäuzigere
+kaltschnäuzigerem
+kaltschnäuzigeren
+kaltschnäuzigerer
+kaltschnäuzigeres
+kaltschnäuziges
+kaltschnäuzigste
+kaltschnäuzigstem
+kaltschnäuzigsten
+kaltschnäuzigster
+kaltschnäuzigstes
+kaltstelle
+kaltstellen
+kaltstellend
+kaltstellende
+kaltstellendem
+kaltstellenden
+kaltstellender
+kaltstellendes
+kaltstellst
+kaltstellt
+kaltstellte
+kaltstellten
+kaltstelltest
+kaltstelltet
+kaltziehe
+kaltziehen
+kaltziehend
+kaltziehende
+kaltziehendem
+kaltziehenden
+kaltziehender
+kaltziehendes
+kaltziehst
+kaltzieht
+kalvinistisch
+kalvinistische
+kalvinistischem
+kalvinistischen
+kalvinistischer
+kalvinistisches
+kam
+kamen
+kameradschaftlich
+kameradschaftliche
+kameradschaftlichem
+kameradschaftlichen
+kameradschaftlicher
+kameradschaftlichere
+kameradschaftlicherem
+kameradschaftlicheren
+kameradschaftlicherer
+kameradschaftlicheres
+kameradschaftliches
+kameradschaftlichste
+kameradschaftlichstem
+kameradschaftlichsten
+kameradschaftlichster
+kameradschaftlichstes
+kampiere
+kampieren
+kampierend
+kampierende
+kampierendem
+kampierenden
+kampierender
+kampierendes
+kampierst
+kampiert
+kampierte
+kampierten
+kampiertest
+kampiertet
+kamst
+kamt
+kanadisch
+kanadische
+kanadischem
+kanadischen
+kanadischer
+kanadisches
+kanalig
+kanalige
+kanaligem
+kanaligen
+kanaliger
+kanaliges
+kanalisierbar
+kanalisierbare
+kanalisierbarem
+kanalisierbaren
+kanalisierbarer
+kanalisierbares
+kanalisiere
+kanalisieren
+kanalisierend
+kanalisierende
+kanalisierendem
+kanalisierenden
+kanalisierender
+kanalisierendes
+kanalisierst
+kanalisiert
+kanalisierte
+kanalisiertem
+kanalisierten
+kanalisierter
+kanalisiertes
+kanalisiertest
+kanalisiertet
+kanarisch
+kanarische
+kanarischem
+kanarischen
+kanarischer
+kanarisches
+kandidiere
+kandidieren
+kandidierend
+kandidierende
+kandidierendem
+kandidierenden
+kandidierender
+kandidierendes
+kandidierst
+kandidiert
+kandidierte
+kandidierten
+kandidiertest
+kandidiertet
+kandiere
+kandieren
+kandierend
+kandierende
+kandierendem
+kandierenden
+kandierender
+kandierendes
+kandierst
+kandiert
+kandierte
+kandiertem
+kandierten
+kandierter
+kandiertes
+kandiertest
+kandiertet
+kann
+kannibalisch
+kannibalische
+kannibalischem
+kannibalischen
+kannibalischer
+kannibalisches
+kannst
+kannte
+kannten
+kanntest
+kanntet
+kanonisch
+kanonische
+kanonischem
+kanonischen
+kanonischer
+kanonisches
+kante
+kanten
+kantend
+kantende
+kantendem
+kantenden
+kantender
+kantendes
+kantest
+kantet
+kantete
+kanteten
+kantetest
+kantetet
+kantig
+kantige
+kantigem
+kantigen
+kantiger
+kantiges
+kanzele
+kanzeln
+kanzelst
+kanzelt
+kanzelte
+kanzelten
+kanzeltest
+kanzeltet
+kanzle
+kapazitiv
+kapazitive
+kapazitivem
+kapazitiven
+kapazitiver
+kapazitives
+kapazitätsbedingt
+kapazitätsbedingte
+kapazitätsbedingtem
+kapazitätsbedingten
+kapazitätsbedingter
+kapazitätsbedingtes
+kapiere
+kapieren
+kapierend
+kapierende
+kapierendem
+kapierenden
+kapierender
+kapierendes
+kapierst
+kapiert
+kapierte
+kapiertem
+kapierten
+kapierter
+kapiertes
+kapiertest
+kapiertet
+kapital
+kapitale
+kapitalem
+kapitalen
+kapitaler
+kapitales
+kapitalisierbar
+kapitalisierbare
+kapitalisierbarem
+kapitalisierbaren
+kapitalisierbarer
+kapitalisierbares
+kapitalisiere
+kapitalisieren
+kapitalisierend
+kapitalisierende
+kapitalisierendem
+kapitalisierenden
+kapitalisierender
+kapitalisierendes
+kapitalisierst
+kapitalisiert
+kapitalisierte
+kapitalisiertem
+kapitalisierten
+kapitalisierter
+kapitalisiertes
+kapitalisiertest
+kapitalisiertet
+kapitalistisch
+kapitalistische
+kapitalistischem
+kapitalistischen
+kapitalistischer
+kapitalistisches
+kapitalkräftig
+kapitalkräftige
+kapitalkräftigem
+kapitalkräftigen
+kapitalkräftiger
+kapitalkräftigere
+kapitalkräftigerem
+kapitalkräftigeren
+kapitalkräftigerer
+kapitalkräftigeres
+kapitalkräftiges
+kapitalkräftigste
+kapitalkräftigstem
+kapitalkräftigsten
+kapitalkräftigster
+kapitalkräftigstes
+kapitalstark
+kapitalstarke
+kapitalstarkem
+kapitalstarken
+kapitalstarker
+kapitalstarkes
+kapituliere
+kapitulieren
+kapitulierend
+kapitulierende
+kapitulierendem
+kapitulierenden
+kapitulierender
+kapitulierendes
+kapitulierst
+kapituliert
+kapitulierte
+kapituliertem
+kapitulierten
+kapitulierter
+kapituliertes
+kapituliertest
+kapituliertet
+kappa
+kapriziös
+kapriziöse
+kapriziösem
+kapriziösen
+kapriziöser
+kapriziösere
+kapriziöserem
+kapriziöseren
+kapriziöserer
+kapriziöseres
+kapriziöses
+kapriziöseste
+kapriziösestem
+kapriziösesten
+kapriziösester
+kapriziösestes
+kapselbar
+kapselbare
+kapselbarem
+kapselbaren
+kapselbarer
+kapselbares
+kapsele
+kapseln
+kapselnd
+kapselnde
+kapselndem
+kapselnden
+kapselnder
+kapselndes
+kapselst
+kapselt
+kapselte
+kapselten
+kapseltest
+kapseltet
+kapsle
+kaputt
+kaputte
+kaputtem
+kaputten
+kaputter
+kaputtes
+kaputtgegangen
+kaputtgegangene
+kaputtgegangenem
+kaputtgegangenen
+kaputtgegangener
+kaputtgegangenes
+kaputtgehe
+kaputtgehen
+kaputtgehend
+kaputtgehende
+kaputtgehendem
+kaputtgehenden
+kaputtgehender
+kaputtgehendes
+kaputtgehst
+kaputtgeht
+kaputtgemacht
+kaputtgemachte
+kaputtgemachtem
+kaputtgemachten
+kaputtgemachter
+kaputtgemachtes
+kaputtgeschlagen
+kaputtgeschlagene
+kaputtgeschlagenem
+kaputtgeschlagenen
+kaputtgeschlagener
+kaputtgeschlagenes
+kaputtmache
+kaputtmachen
+kaputtmachend
+kaputtmachende
+kaputtmachendem
+kaputtmachenden
+kaputtmachender
+kaputtmachendes
+kaputtmachst
+kaputtmacht
+kaputtmachte
+kaputtmachten
+kaputtmachtest
+kaputtmachtet
+kaputtschlage
+kaputtschlagen
+kaputtschlagend
+kaputtschlagende
+kaputtschlagendem
+kaputtschlagenden
+kaputtschlagender
+kaputtschlagendes
+kaputtschlagt
+karamboliere
+karambolieren
+karambolierend
+karambolierende
+karambolierendem
+karambolierenden
+karambolierender
+karambolierendes
+karambolierst
+karamboliert
+karambolierte
+karamboliertem
+karambolierten
+karambolierter
+karamboliertes
+karamboliertest
+karamboliertet
+kardial
+kardiale
+kardialem
+kardialen
+kardialer
+kardiales
+kardinale
+kardinalem
+kardinalen
+kardinaler
+kardinales
+karg
+karge
+kargem
+kargen
+karger
+kargere
+kargerem
+kargeren
+kargerer
+kargeres
+karges
+kargste
+kargstem
+kargsten
+kargster
+kargstes
+karibisch
+karibische
+karibischem
+karibischen
+karibischer
+karibisches
+kariert
+karierte
+kariertem
+karierten
+karierter
+kariertes
+karikativ
+karikative
+karikativem
+karikativen
+karikativer
+karikatives
+karikiere
+karikieren
+karikierend
+karikierende
+karikierendem
+karikierenden
+karikierender
+karikierendes
+karikierst
+karikiert
+karikierte
+karikiertem
+karikierten
+karikierter
+karikiertes
+karikiertest
+karikiertet
+karitativ
+karitative
+karitativem
+karitativen
+karitativer
+karitativere
+karitativerem
+karitativeren
+karitativerer
+karitativeres
+karitatives
+karitativste
+karitativstem
+karitativsten
+karitativster
+karitativstes
+kariös
+kariöse
+kariösem
+kariösen
+kariöser
+kariöses
+karminrot
+karminrote
+karminrotem
+karminroten
+karminroter
+karminrotes
+karoweise
+karre
+karren
+karrend
+karrende
+karrendem
+karrenden
+karrender
+karrendes
+karrierebedingt
+karrierebedingte
+karrierebedingtem
+karrierebedingten
+karrierebedingter
+karrierebedingtes
+karrst
+karrt
+karrte
+karrten
+karrtest
+karrtet
+kartesisch
+kartesische
+kartesischem
+kartesischen
+kartesischer
+kartesisches
+kartographisch
+kartographische
+kartographischem
+kartographischen
+kartographischer
+kartographisches
+kartoniere
+kartonieren
+kartonierend
+kartonierende
+kartonierendem
+kartonierenden
+kartonierender
+kartonierendes
+kartonierst
+kartoniert
+kartonierte
+kartoniertem
+kartonierten
+kartonierter
+kartoniertes
+kartoniertest
+kartoniertet
+kaschierbar
+kaschierbare
+kaschierbarem
+kaschierbaren
+kaschierbarer
+kaschierbares
+kaschiere
+kaschieren
+kaschierend
+kaschierende
+kaschierendem
+kaschierenden
+kaschierender
+kaschierendes
+kaschierst
+kaschiert
+kaschierte
+kaschiertem
+kaschierten
+kaschierter
+kaschiertes
+kaschiertest
+kaschiertet
+kaserniere
+kasernieren
+kasernierend
+kasernierende
+kasernierendem
+kasernierenden
+kasernierender
+kasernierendes
+kasernierst
+kaserniert
+kasernierte
+kaserniertem
+kasernierten
+kasernierter
+kaserniertes
+kaserniertest
+kaserniertet
+kaskadierbar
+kaskadierbare
+kaskadierbarem
+kaskadierbaren
+kaskadierbarer
+kaskadierbares
+kaskadiere
+kaskadieren
+kaskadierend
+kaskadierende
+kaskadierendem
+kaskadierenden
+kaskadierender
+kaskadierendes
+kaskadierst
+kaskadiert
+kaskadierte
+kaskadiertem
+kaskadierten
+kaskadierter
+kaskadiertes
+kaskadiertest
+kaskadiertet
+kaspere
+kaspern
+kaspernd
+kaspernde
+kasperndem
+kaspernden
+kaspernder
+kasperndes
+kasperst
+kaspert
+kasperte
+kasperten
+kaspertest
+kaspertet
+kaspisch
+kaspische
+kaspischem
+kaspischen
+kaspischer
+kaspisches
+kaspre
+kassiere
+kassieren
+kassierend
+kassierende
+kassierendem
+kassierenden
+kassierender
+kassierendes
+kassierst
+kassiert
+kassierte
+kassiertem
+kassierten
+kassierter
+kassiertes
+kassiertest
+kassiertet
+kasteie
+kasteien
+kasteiend
+kasteiende
+kasteiendem
+kasteienden
+kasteiender
+kasteiendes
+kasteist
+kasteit
+kasteite
+kasteitem
+kasteiten
+kasteiter
+kasteites
+kasteitest
+kasteitet
+kastriere
+kastrieren
+kastrierend
+kastrierende
+kastrierendem
+kastrierenden
+kastrierender
+kastrierendes
+kastrierst
+kastriert
+kastrierte
+kastriertem
+kastrierten
+kastrierter
+kastriertes
+kastriertest
+kastriertet
+katalogisiere
+katalogisieren
+katalogisierend
+katalogisierende
+katalogisierendem
+katalogisierenden
+katalogisierender
+katalogisierendes
+katalogisierst
+katalogisiert
+katalogisierte
+katalogisiertem
+katalogisierten
+katalogisierter
+katalogisiertes
+katalogisiertest
+katalogisiertet
+katalysiere
+katalysieren
+katalysierend
+katalysierende
+katalysierendem
+katalysierenden
+katalysierender
+katalysierendes
+katalysierst
+katalysiert
+katalysierte
+katalysiertem
+katalysierten
+katalysierter
+katalysiertes
+katalysiertest
+katalysiertet
+katalytisch
+katalytische
+katalytischem
+katalytischen
+katalytischer
+katalytisches
+katapultiere
+katapultieren
+katapultierend
+katapultierende
+katapultierendem
+katapultierenden
+katapultierender
+katapultierendes
+katapultierst
+katapultiert
+katapultierte
+katapultiertem
+katapultierten
+katapultierter
+katapultiertes
+katapultiertest
+katapultiertet
+katastrophal
+katastrophale
+katastrophalem
+katastrophalen
+katastrophaler
+katastrophalere
+katastrophalerem
+katastrophaleren
+katastrophalerer
+katastrophaleres
+katastrophales
+katastrophalste
+katastrophalstem
+katastrophalsten
+katastrophalster
+katastrophalstes
+kategorisch
+kategorische
+kategorischem
+kategorischen
+kategorischer
+kategorischere
+kategorischerem
+kategorischeren
+kategorischerer
+kategorischeres
+kategorisches
+kategorischste
+kategorischstem
+kategorischsten
+kategorischster
+kategorischstes
+katholisch
+katholische
+katholischem
+katholischen
+katholischer
+katholischere
+katholischerem
+katholischeren
+katholischerer
+katholischeres
+katholisches
+katholischste
+katholischstem
+katholischsten
+katholischster
+katholischstes
+katzenartig
+katzenartige
+katzenartigem
+katzenartigen
+katzenartiger
+katzenartiges
+katzengewandt
+katzengewandte
+katzengewandtem
+katzengewandten
+katzengewandter
+katzengewandtes
+katzenhaft
+katzenhafte
+katzenhaftem
+katzenhaften
+katzenhafter
+katzenhaftes
+kaudere
+kaudern
+kaudernd
+kaudernde
+kauderndem
+kaudernden
+kaudernder
+kauderndes
+kauderst
+kaudert
+kauderte
+kauderten
+kaudertest
+kaudertet
+kaudre
+kaue
+kauen
+kauend
+kauende
+kauendem
+kauenden
+kauender
+kauendes
+kauere
+kauern
+kauernd
+kauernde
+kauerndem
+kauernden
+kauernder
+kauerndes
+kauerst
+kauert
+kauerte
+kauerten
+kauertest
+kauertet
+kaufbereit
+kaufbereite
+kaufbereitem
+kaufbereiten
+kaufbereiter
+kaufbereites
+kaufe
+kaufen
+kaufend
+kaufende
+kaufendem
+kaufenden
+kaufender
+kaufendes
+kaufkräftig
+kaufkräftige
+kaufkräftigem
+kaufkräftigen
+kaufkräftiger
+kaufkräftigere
+kaufkräftigerem
+kaufkräftigeren
+kaufkräftigerer
+kaufkräftigeres
+kaufkräftiges
+kaufkräftigste
+kaufkräftigstem
+kaufkräftigsten
+kaufkräftigster
+kaufkräftigstes
+kaufmännisch
+kaufmännische
+kaufmännischem
+kaufmännischen
+kaufmännischer
+kaufmännisches
+kaufst
+kaufstark
+kaufstarke
+kaufstarkem
+kaufstarken
+kaufstarker
+kaufstarkes
+kauft
+kaufte
+kauften
+kauftest
+kauftet
+kaum
+kaure
+kausal
+kausale
+kausalem
+kausalen
+kausaler
+kausales
+kaust
+kaustisch
+kaustische
+kaustischem
+kaustischen
+kaustischer
+kaustischere
+kaustischerem
+kaustischeren
+kaustischerer
+kaustischeres
+kaustisches
+kaustischste
+kaustischstem
+kaustischsten
+kaustischster
+kaustischstes
+kaut
+kaute
+kauten
+kautest
+kautet
+kautzig
+kautzige
+kautzigem
+kautzigen
+kautziger
+kautziges
+kauzig
+kauzige
+kauzigem
+kauzigen
+kauziger
+kauziges
+kavitös
+kavitöse
+kavitösem
+kavitösen
+kavitöser
+kavitöses
+keck
+kecke
+keckem
+kecken
+kecker
+keckere
+keckerem
+keckeren
+keckerer
+keckeres
+keckes
+keckeste
+keckestem
+keckesten
+keckester
+keckestes
+kegele
+kegelförmig
+kegelförmige
+kegelförmigem
+kegelförmigen
+kegelförmiger
+kegelförmiges
+kegeln
+kegelnd
+kegelnde
+kegelndem
+kegelnden
+kegelnder
+kegelndes
+kegelst
+kegelt
+kegelte
+kegelten
+kegeltest
+kegeltet
+kegle
+kehre
+kehren
+kehrend
+kehrende
+kehrendem
+kehrenden
+kehrender
+kehrendes
+kehrst
+kehrt
+kehrte
+kehrten
+kehrtest
+kehrtet
+kehrtgemacht
+kehrtgemachte
+kehrtgemachtem
+kehrtgemachten
+kehrtgemachter
+kehrtgemachtes
+kehrtmache
+kehrtmachen
+kehrtmachend
+kehrtmachende
+kehrtmachendem
+kehrtmachenden
+kehrtmachender
+kehrtmachendes
+kehrtmachst
+kehrtmacht
+kehrtmachte
+kehrtmachten
+kehrtmachtest
+kehrtmachtet
+keife
+keifen
+keifend
+keifende
+keifendem
+keifenden
+keifender
+keifendes
+keifst
+keift
+keifte
+keiften
+keiftest
+keiftet
+keile
+keilen
+keilend
+keilende
+keilendem
+keilenden
+keilender
+keilendes
+keilförmig
+keilförmige
+keilförmigem
+keilförmigen
+keilförmiger
+keilförmiges
+keilst
+keilt
+keilte
+keilten
+keiltest
+keiltet
+keime
+keimen
+keimend
+keimende
+keimendem
+keimenden
+keimender
+keimendes
+keimfrei
+keimfreie
+keimfreiem
+keimfreien
+keimfreier
+keimfreies
+keimfähig
+keimfähige
+keimfähigem
+keimfähigen
+keimfähiger
+keimfähiges
+keimst
+keimt
+keimte
+keimten
+keimtest
+keimtet
+keimtötend
+keimtötende
+keimtötendem
+keimtötenden
+keimtötender
+keimtötendes
+kein
+keine
+keinem
+keinen
+keiner
+keinerlei
+keines
+keinesfalls
+keineswegs
+keinmal
+keinwrtquop
+kelchförmig
+kelchförmige
+kelchförmigem
+kelchförmigen
+kelchförmiger
+kelchförmiges
+kellere
+kellern
+kellernd
+kellernde
+kellerndem
+kellernden
+kellernder
+kellerndes
+kellerst
+kellert
+kellerte
+kellerten
+kellertest
+kellertet
+kellre
+keltere
+keltern
+kelternd
+kelternde
+kelterndem
+kelternden
+kelternder
+kelterndes
+kelterst
+keltert
+kelterte
+kelterten
+keltertest
+keltertet
+keltre
+kennbar
+kennbare
+kennbarem
+kennbaren
+kennbarer
+kennbares
+kenne
+kennen
+kennend
+kennende
+kennendem
+kennenden
+kennender
+kennendes
+kennerhaft
+kennerhafte
+kennerhaftem
+kennerhaften
+kennerhafter
+kennerhaftes
+kennst
+kennt
+kenntlich
+kenntliche
+kenntlichem
+kenntlichen
+kenntlicher
+kenntliches
+kenntnisreich
+kenntnisreiche
+kenntnisreichem
+kenntnisreichen
+kenntnisreicher
+kenntnisreichere
+kenntnisreicherem
+kenntnisreicheren
+kenntnisreicherer
+kenntnisreicheres
+kenntnisreiches
+kenntnisreichste
+kenntnisreichstem
+kenntnisreichsten
+kenntnisreichster
+kenntnisreichstes
+kennzeichne
+kennzeichnen
+kennzeichnend
+kennzeichnende
+kennzeichnendem
+kennzeichnenden
+kennzeichnender
+kennzeichnendes
+kennzeichnest
+kennzeichnet
+kennzeichnete
+kennzeichneten
+kennzeichnetest
+kennzeichnetet
+kentere
+kentern
+kenternd
+kenternde
+kenterndem
+kenternden
+kenternder
+kenterndes
+kenterst
+kentert
+kenterte
+kenterten
+kentertest
+kentertet
+kentre
+keramisch
+keramische
+keramischem
+keramischen
+keramischer
+keramisches
+kerbe
+kerben
+kerbend
+kerbende
+kerbendem
+kerbenden
+kerbender
+kerbendes
+kerbst
+kerbt
+kerbte
+kerbten
+kerbtest
+kerbtet
+kerne
+kernen
+kernend
+kernende
+kernendem
+kernenden
+kernender
+kernendes
+kernfaul
+kernfaule
+kernfaulem
+kernfaulen
+kernfauler
+kernfaules
+kerngesund
+kerngesunde
+kerngesundem
+kerngesunden
+kerngesunder
+kerngesundes
+kernig
+kernige
+kernigem
+kernigen
+kerniger
+kernigere
+kernigerem
+kernigeren
+kernigerer
+kernigeres
+kerniges
+kernigste
+kernigstem
+kernigsten
+kernigster
+kernigstes
+kernlos
+kernlose
+kernlosem
+kernlosen
+kernloser
+kernloses
+kernst
+kernt
+kernte
+kernten
+kerntest
+kerntet
+kerzengerad
+kerzengerade
+kerzengeradem
+kerzengeraden
+kerzengerader
+kerzengerades
+kess
+kesse
+kessem
+kessen
+kesser
+kessere
+kesserem
+kesseren
+kesserer
+kesseres
+kesses
+kesseste
+kessestem
+kessesten
+kessester
+kessestes
+kette
+ketten
+kettenartig
+kettenartige
+kettenartigem
+kettenartigen
+kettenartiger
+kettenartiges
+kettend
+kettende
+kettendem
+kettenden
+kettender
+kettendes
+kettenförmig
+kettenförmige
+kettenförmigem
+kettenförmigen
+kettenförmiger
+kettenförmiges
+kettenlos
+kettenlose
+kettenlosem
+kettenlosen
+kettenloser
+kettenloses
+kettest
+kettet
+kettete
+ketteten
+kettetest
+kettetet
+ketzerisch
+ketzerische
+ketzerischem
+ketzerischen
+ketzerischer
+ketzerischere
+ketzerischerem
+ketzerischeren
+ketzerischerer
+ketzerischeres
+ketzerisches
+ketzerischste
+ketzerischstem
+ketzerischsten
+ketzerischster
+ketzerischstes
+keuche
+keuchen
+keuchend
+keuchende
+keuchendem
+keuchenden
+keuchender
+keuchendes
+keuchst
+keucht
+keuchte
+keuchten
+keuchtest
+keuchtet
+keusch
+keusche
+keuschem
+keuschen
+keuscher
+keuschere
+keuscherem
+keuscheren
+keuscherer
+keuscheres
+keusches
+keuschste
+keuschstem
+keuschsten
+keuschster
+keuschstes
+kg
+kichere
+kichern
+kichernd
+kichernde
+kicherndem
+kichernden
+kichernder
+kicherndes
+kicherst
+kichert
+kicherte
+kicherten
+kichertest
+kichertet
+kichre
+kicke
+kicken
+kickend
+kickende
+kickendem
+kickenden
+kickender
+kickendes
+kickst
+kickt
+kickte
+kickten
+kicktest
+kicktet
+kidnappe
+kidnappen
+kidnappend
+kidnappende
+kidnappendem
+kidnappenden
+kidnappender
+kidnappendes
+kidnappst
+kidnappt
+kidnappte
+kidnappten
+kidnapptest
+kidnapptet
+kieselartig
+kieselartige
+kieselartigem
+kieselartigen
+kieselartiger
+kieselartiges
+kieselgrau
+kieselgraue
+kieselgrauem
+kieselgrauen
+kieselgrauer
+kieselgraues
+kieshaltig
+kieshaltige
+kieshaltigem
+kieshaltigen
+kieshaltiger
+kieshaltiges
+kiesig
+kiesige
+kiesigem
+kiesigen
+kiesiger
+kiesiges
+kille
+killen
+killend
+killende
+killendem
+killenden
+killender
+killendes
+killst
+killt
+killte
+killten
+killtest
+killtet
+kindereich
+kindereiche
+kindereichem
+kindereichen
+kindereicher
+kindereiches
+kinderfeindlich
+kinderfeindliche
+kinderfeindlichem
+kinderfeindlichen
+kinderfeindlicher
+kinderfeindliches
+kinderfreundlich
+kinderfreundliche
+kinderfreundlichem
+kinderfreundlichen
+kinderfreundlicher
+kinderfreundlichere
+kinderfreundlicherem
+kinderfreundlicheren
+kinderfreundlicherer
+kinderfreundlicheres
+kinderfreundliches
+kinderfreundlichste
+kinderfreundlichstem
+kinderfreundlichsten
+kinderfreundlichster
+kinderfreundlichstes
+kinderleicht
+kinderleichte
+kinderleichtem
+kinderleichten
+kinderleichter
+kinderleichtes
+kinderlieb
+kinderliebe
+kinderliebem
+kinderlieben
+kinderlieber
+kinderliebes
+kinderlos
+kinderlose
+kinderlosem
+kinderlosen
+kinderloser
+kinderloses
+kinderreich
+kinderreiche
+kinderreichem
+kinderreichen
+kinderreicher
+kinderreichere
+kinderreicherem
+kinderreicheren
+kinderreicherer
+kinderreicheres
+kinderreiches
+kinderreichste
+kinderreichstem
+kinderreichsten
+kinderreichster
+kinderreichstes
+kindisch
+kindische
+kindischem
+kindischen
+kindischer
+kindischere
+kindischerem
+kindischeren
+kindischerer
+kindischeres
+kindisches
+kindischste
+kindischstem
+kindischsten
+kindischster
+kindischstes
+kindlich
+kindliche
+kindlichem
+kindlichen
+kindlicher
+kindlichere
+kindlicherem
+kindlicheren
+kindlicherer
+kindlicheres
+kindliches
+kindlichste
+kindlichstem
+kindlichsten
+kindlichster
+kindlichstes
+kineastisch
+kineastische
+kineastischem
+kineastischen
+kineastischer
+kineastisches
+kinematisch
+kinematische
+kinematischem
+kinematischen
+kinematischer
+kinematisches
+kinetisch
+kinetische
+kinetischem
+kinetischen
+kinetischer
+kinetisches
+kippe
+kippen
+kippend
+kippende
+kippendem
+kippenden
+kippender
+kippendes
+kippst
+kippt
+kippte
+kippten
+kipptest
+kipptet
+kirchentreu
+kirchentreue
+kirchentreuem
+kirchentreuen
+kirchentreuer
+kirchentreues
+kirchlich
+kirchliche
+kirchlichem
+kirchlichen
+kirchlicher
+kirchliches
+kistenweise
+kitschig
+kitschige
+kitschigem
+kitschigen
+kitschiger
+kitschigere
+kitschigerem
+kitschigeren
+kitschigerer
+kitschigeres
+kitschiges
+kitschigste
+kitschigstem
+kitschigsten
+kitschigster
+kitschigstes
+kitte
+kitten
+kittend
+kittende
+kittendem
+kittenden
+kittender
+kittendes
+kittest
+kittet
+kittete
+kitteten
+kittetest
+kittetet
+kitzele
+kitzelig
+kitzelige
+kitzeligem
+kitzeligen
+kitzeliger
+kitzeliges
+kitzeln
+kitzelnd
+kitzelnde
+kitzelndem
+kitzelnden
+kitzelnder
+kitzelndes
+kitzelst
+kitzelt
+kitzelte
+kitzelten
+kitzeltest
+kitzeltet
+kitzle
+kitzlig
+kitzlige
+kitzligem
+kitzligen
+kitzliger
+kitzliges
+klaffe
+klaffen
+klaffend
+klaffende
+klaffendem
+klaffenden
+klaffender
+klaffendes
+klaffst
+klafft
+klaffte
+klafften
+klafftest
+klafftet
+klagbar
+klagbare
+klagbarem
+klagbaren
+klagbarer
+klagbares
+klage
+klagen
+klagend
+klagende
+klagendem
+klagenden
+klagender
+klagendes
+klagst
+klagt
+klagte
+klagten
+klagtest
+klagtet
+klamm
+klamme
+klammem
+klammen
+klammer
+klammere
+klammerem
+klammeren
+klammerer
+klammeres
+klammern
+klammernd
+klammernde
+klammerndem
+klammernden
+klammernder
+klammerndes
+klammerst
+klammert
+klammerte
+klammerten
+klammertest
+klammertet
+klammes
+klammheimlich
+klammheimliche
+klammheimlichem
+klammheimlichen
+klammheimlicher
+klammheimliches
+klammre
+klammste
+klammstem
+klammsten
+klammster
+klammstes
+klang
+klangen
+klanggetreu
+klanggetreue
+klanggetreuem
+klanggetreuen
+klanggetreuer
+klanggetreues
+klanglos
+klanglose
+klanglosem
+klanglosen
+klangloser
+klangloses
+klangst
+klangt
+klangvoll
+klangvolle
+klangvollem
+klangvollen
+klangvoller
+klangvollere
+klangvollerem
+klangvolleren
+klangvollerer
+klangvolleres
+klangvolles
+klangvollste
+klangvollstem
+klangvollsten
+klangvollster
+klangvollstes
+klappbar
+klappbare
+klappbarem
+klappbaren
+klappbarer
+klappbares
+klappe
+klappen
+klappend
+klappende
+klappendem
+klappenden
+klappender
+klappendes
+klappere
+klapperfrei
+klapperfreie
+klapperfreiem
+klapperfreien
+klapperfreier
+klapperfreies
+klapperig
+klapperige
+klapperigem
+klapperigen
+klapperiger
+klapperiges
+klappern
+klappernd
+klappernde
+klapperndem
+klappernden
+klappernder
+klapperndes
+klapperst
+klappert
+klapperte
+klapperten
+klappertest
+klappertet
+klappre
+klapprig
+klapprige
+klapprigem
+klapprigen
+klappriger
+klappriges
+klappst
+klappt
+klappte
+klappten
+klapptest
+klapptet
+klar
+klare
+klarem
+klaren
+klarer
+klarere
+klarerem
+klareren
+klarerer
+klareres
+klarerweise
+klares
+klargekommen
+klargelegt
+klargelegte
+klargelegtem
+klargelegten
+klargelegter
+klargelegtes
+klargemacht
+klargemachte
+klargemachtem
+klargemachten
+klargemachter
+klargemachtes
+klargestellt
+klargestellte
+klargestelltem
+klargestellten
+klargestellter
+klargestelltes
+klarkomme
+klarkommen
+klarkommend
+klarkommende
+klarkommendem
+klarkommenden
+klarkommender
+klarkommendes
+klarkommst
+klarkommt
+klarlege
+klarlegen
+klarlegend
+klarlegende
+klarlegendem
+klarlegenden
+klarlegender
+klarlegendes
+klarlegst
+klarlegt
+klarlegte
+klarlegten
+klarlegtest
+klarlegtet
+klarmache
+klarmachen
+klarmachend
+klarmachende
+klarmachendem
+klarmachenden
+klarmachender
+klarmachendes
+klarmachst
+klarmacht
+klarmachte
+klarmachten
+klarmachtest
+klarmachtet
+klarstand
+klarste
+klarstelle
+klarstellen
+klarstellend
+klarstellende
+klarstellendem
+klarstellenden
+klarstellender
+klarstellendes
+klarstellst
+klarstellt
+klarstellte
+klarstellten
+klarstelltest
+klarstelltet
+klarstem
+klarsten
+klarster
+klarstes
+klassenbewusst
+klassenbewusste
+klassenbewusstem
+klassenbewussten
+klassenbewusster
+klassenbewusstes
+klassenlos
+klassenlose
+klassenlosem
+klassenlosen
+klassenloser
+klassenloses
+klassifizierbar
+klassifizierbare
+klassifizierbarem
+klassifizierbaren
+klassifizierbarer
+klassifizierbares
+klassifiziere
+klassifizieren
+klassifizierend
+klassifizierende
+klassifizierendem
+klassifizierenden
+klassifizierender
+klassifizierendes
+klassifizierst
+klassifiziert
+klassifizierte
+klassifiziertem
+klassifizierten
+klassifizierter
+klassifiziertes
+klassifiziertest
+klassifiziertet
+klassisch
+klassische
+klassischem
+klassischen
+klassischer
+klassischerweise
+klassisches
+klassizistisch
+klassizistische
+klassizistischem
+klassizistischen
+klassizistischer
+klassizistisches
+klatsche
+klatschen
+klatschend
+klatschende
+klatschendem
+klatschenden
+klatschender
+klatschendes
+klatschest
+klatschhaft
+klatschhafte
+klatschhaftem
+klatschhaften
+klatschhafter
+klatschhaftes
+klatschst
+klatscht
+klatschte
+klatschten
+klatschtest
+klatschtet
+klaue
+klauen
+klauend
+klauende
+klauendem
+klauenden
+klauender
+klauendes
+klaust
+klaut
+klaute
+klauten
+klautest
+klautet
+klebe
+kleben
+klebend
+klebende
+klebendem
+klebenden
+klebender
+klebendes
+klebrig
+klebrige
+klebrigem
+klebrigen
+klebriger
+klebrigere
+klebrigerem
+klebrigeren
+klebrigerer
+klebrigeres
+klebriges
+klebrigste
+klebrigstem
+klebrigsten
+klebrigster
+klebrigstes
+klebst
+klebt
+klebte
+klebten
+klebtest
+klebtet
+kleckere
+kleckern
+kleckernd
+kleckernde
+kleckerndem
+kleckernden
+kleckernder
+kleckerndes
+kleckerst
+kleckert
+kleckerte
+kleckerten
+kleckertest
+kleckertet
+kleckre
+kleide
+kleiden
+kleidend
+kleidende
+kleidendem
+kleidenden
+kleidender
+kleidendes
+kleidest
+kleidet
+kleidete
+kleideten
+kleidetest
+kleidetet
+kleidsam
+kleidsame
+kleidsamem
+kleidsamen
+kleidsamer
+kleidsamere
+kleidsamerem
+kleidsameren
+kleidsamerer
+kleidsameres
+kleidsames
+kleidsamste
+kleidsamstem
+kleidsamsten
+kleidsamster
+kleidsamstes
+klein
+kleinbürgerlich
+kleinbürgerliche
+kleinbürgerlichem
+kleinbürgerlichen
+kleinbürgerlicher
+kleinbürgerlichere
+kleinbürgerlicherem
+kleinbürgerlicheren
+kleinbürgerlicherer
+kleinbürgerlicheres
+kleinbürgerliches
+kleinbürgerlichste
+kleinbürgerlichstem
+kleinbürgerlichsten
+kleinbürgerlichster
+kleinbürgerlichstes
+kleine
+kleinem
+kleinen
+kleiner
+kleinere
+kleinerem
+kleineren
+kleinerer
+kleineres
+kleines
+kleinkariert
+kleinkarierte
+kleinkariertem
+kleinkarierten
+kleinkarierter
+kleinkariertere
+kleinkarierterem
+kleinkarierteren
+kleinkarierterer
+kleinkarierteres
+kleinkariertes
+kleinkarierteste
+kleinkariertestem
+kleinkariertesten
+kleinkariertester
+kleinkariertestes
+kleinlich
+kleinliche
+kleinlichem
+kleinlichen
+kleinlicher
+kleinlichere
+kleinlicherem
+kleinlicheren
+kleinlicherer
+kleinlicheres
+kleinliches
+kleinlichste
+kleinlichstem
+kleinlichsten
+kleinlichster
+kleinlichstes
+kleinmütig
+kleinmütige
+kleinmütigem
+kleinmütigen
+kleinmütiger
+kleinmütiges
+kleinste
+kleinstem
+kleinsten
+kleinster
+kleinstes
+kleinstmöglich
+kleinstmögliche
+kleinstmöglichem
+kleinstmöglichen
+kleinstmöglicher
+kleinstmögliches
+kleinstädtisch
+kleinstädtische
+kleinstädtischem
+kleinstädtischen
+kleinstädtischer
+kleinstädtisches
+kleisterig
+kleisterige
+kleisterigem
+kleisterigen
+kleisteriger
+kleisteriges
+kleistrig
+kleistrige
+kleistrigem
+kleistrigen
+kleistriger
+kleistriges
+klemme
+klemmen
+klemmend
+klemmende
+klemmendem
+klemmenden
+klemmender
+klemmendes
+klemmst
+klemmt
+klemmte
+klemmten
+klemmtest
+klemmtet
+kleptomanisch
+kleptomanische
+kleptomanischem
+kleptomanischen
+kleptomanischer
+kleptomanisches
+klerikal
+klerikale
+klerikalem
+klerikalen
+klerikaler
+klerikales
+klettere
+klettern
+kletternd
+kletternde
+kletterndem
+kletternden
+kletternder
+kletterndes
+kletterst
+klettert
+kletterte
+kletterten
+klettertest
+klettertet
+klettre
+klimatisch
+klimatische
+klimatischem
+klimatischen
+klimatischer
+klimatisches
+klimatisierbar
+klimatisierbare
+klimatisierbarem
+klimatisierbaren
+klimatisierbarer
+klimatisierbares
+klimatisiere
+klimatisieren
+klimatisierend
+klimatisierende
+klimatisierendem
+klimatisierenden
+klimatisierender
+klimatisierendes
+klimatisierst
+klimatisiert
+klimatisierte
+klimatisiertem
+klimatisierten
+klimatisierter
+klimatisiertes
+klimatisiertest
+klimatisiertet
+klimpere
+klimpern
+klimpernd
+klimpernde
+klimperndem
+klimpernden
+klimpernder
+klimperndes
+klimperst
+klimpert
+klimperte
+klimperten
+klimpertest
+klimpertet
+klimpre
+klinge
+klingele
+klingeln
+klingelnd
+klingelnde
+klingelndem
+klingelnden
+klingelnder
+klingelndes
+klingelst
+klingelt
+klingelte
+klingelten
+klingeltest
+klingeltet
+klingen
+klingend
+klingende
+klingendem
+klingenden
+klingender
+klingendes
+klingle
+klingst
+klingt
+klinisch
+klinische
+klinischem
+klinischen
+klinischer
+klinisches
+klinke
+klinken
+klinkend
+klinkende
+klinkendem
+klinkenden
+klinkender
+klinkendes
+klinkst
+klinkt
+klinkte
+klinkten
+klinktest
+klinktet
+klipp
+klippenreich
+klippenreiche
+klippenreichem
+klippenreichen
+klippenreicher
+klippenreiches
+klippig
+klippige
+klippigem
+klippigen
+klippiger
+klippiges
+klirre
+klirren
+klirrend
+klirrende
+klirrendem
+klirrenden
+klirrender
+klirrendes
+klirrst
+klirrt
+klirrte
+klirrten
+klirrtest
+klirrtet
+klischeehaft
+klischeehafte
+klischeehaftem
+klischeehaften
+klischeehafter
+klischeehaftes
+klischiere
+klischieren
+klischierend
+klischierende
+klischierendem
+klischierenden
+klischierender
+klischierendes
+klischierst
+klischiert
+klischierte
+klischierten
+klischiertest
+klischiertet
+klitschnass
+klitschnasse
+klitschnassem
+klitschnassen
+klitschnasser
+klitschnasses
+klitzeklein
+klitzekleine
+klitzekleinem
+klitzekleinen
+klitzekleiner
+klitzekleines
+klonbar
+klonbare
+klonbarem
+klonbaren
+klonbarer
+klonbares
+klone
+klonen
+klonend
+klonende
+klonendem
+klonenden
+klonender
+klonendes
+klonst
+klont
+klonte
+klonten
+klontest
+klontet
+klopfe
+klopfen
+klopfend
+klopfende
+klopfendem
+klopfenden
+klopfender
+klopfendes
+klopfst
+klopft
+klopfte
+klopften
+klopftest
+klopftet
+klotzig
+klotzige
+klotzigem
+klotzigen
+klotziger
+klotzigere
+klotzigerem
+klotzigeren
+klotzigerer
+klotzigeres
+klotziges
+klotzigste
+klotzigstem
+klotzigsten
+klotzigster
+klotzigstes
+klug
+kluge
+klugem
+klugen
+kluger
+klugerweise
+kluges
+klumpig
+klumpige
+klumpigem
+klumpigen
+klumpiger
+klumpiges
+klägerisch
+klägerische
+klägerischem
+klägerischen
+klägerischer
+klägerisches
+kläglich
+klägliche
+kläglichem
+kläglichen
+kläglicher
+kläglichere
+kläglicherem
+kläglicheren
+kläglicherer
+kläglicheres
+klägliches
+kläglichste
+kläglichstem
+kläglichsten
+kläglichster
+kläglichstes
+kläre
+klären
+klärend
+klärende
+klärendem
+klärenden
+klärender
+klärendes
+klärst
+klärt
+klärte
+klärten
+klärtest
+klärtet
+klöne
+klönen
+klönend
+klönende
+klönendem
+klönenden
+klönender
+klönendes
+klönst
+klönt
+klönte
+klönten
+klöntest
+klöntet
+klösterlich
+klösterliche
+klösterlichem
+klösterlichen
+klösterlicher
+klösterliches
+klüger
+klügere
+klügerem
+klügeren
+klügerer
+klügeres
+klügste
+klügstem
+klügsten
+klügster
+klügstes
+km
+knabbere
+knabbern
+knabbernd
+knabbernde
+knabberndem
+knabbernden
+knabbernder
+knabberndes
+knabberst
+knabbert
+knabberte
+knabberten
+knabbertest
+knabbertet
+knabbre
+knabenhaft
+knabenhafte
+knabenhaftem
+knabenhaften
+knabenhafter
+knabenhaftes
+knacke
+knacken
+knackend
+knackende
+knackendem
+knackenden
+knackender
+knackendes
+knackst
+knackt
+knackte
+knackten
+knacktest
+knacktet
+knalle
+knallen
+knallend
+knallende
+knallendem
+knallenden
+knallender
+knallendes
+knallfroschartig
+knallfroschartige
+knallfroschartigem
+knallfroschartigen
+knallfroschartiger
+knallfroschartiges
+knallhart
+knallharte
+knallhartem
+knallharten
+knallharter
+knallhartes
+knallig
+knallige
+knalligem
+knalligen
+knalliger
+knalligere
+knalligerem
+knalligeren
+knalligerer
+knalligeres
+knalliges
+knalligste
+knalligstem
+knalligsten
+knalligster
+knalligstes
+knallrot
+knallrote
+knallrotem
+knallroten
+knallroter
+knallrotes
+knallst
+knallt
+knallte
+knallten
+knalltest
+knalltet
+knapp
+knappe
+knappem
+knappen
+knapper
+knappere
+knapperem
+knapperen
+knapperer
+knapperes
+knappes
+knappste
+knappstem
+knappsten
+knappster
+knappstes
+knarre
+knarren
+knarrend
+knarrende
+knarrendem
+knarrenden
+knarrender
+knarrendes
+knarrst
+knarrt
+knarrte
+knarrten
+knarrtest
+knarrtet
+knattere
+knattern
+knatternd
+knatternde
+knatterndem
+knatternden
+knatternder
+knatterndes
+knatterst
+knattert
+knatterte
+knatterten
+knattertest
+knattertet
+knattre
+knausere
+knauserig
+knauserige
+knauserigem
+knauserigen
+knauseriger
+knauserigere
+knauserigerem
+knauserigeren
+knauserigerer
+knauserigeres
+knauseriges
+knauserigste
+knauserigstem
+knauserigsten
+knauserigster
+knauserigstes
+knausern
+knausernd
+knausernde
+knauserndem
+knausernden
+knausernder
+knauserndes
+knauserst
+knausert
+knauserte
+knauserten
+knausertest
+knausertet
+knausre
+knausrig
+knausrige
+knausrigem
+knausrigen
+knausriger
+knausrigere
+knausrigerem
+knausrigeren
+knausrigerer
+knausrigeres
+knausriges
+knausrigste
+knausrigstem
+knausrigsten
+knausrigster
+knausrigstes
+knebele
+knebeln
+knebelnd
+knebelnde
+knebelndem
+knebelnden
+knebelnder
+knebelndes
+knebelst
+knebelt
+knebelte
+knebelten
+knebeltest
+knebeltet
+kneble
+kneife
+kneifen
+kneifend
+kneifende
+kneifendem
+kneifenden
+kneifender
+kneifendes
+kneifst
+kneift
+knetbar
+knetbare
+knetbarem
+knetbaren
+knetbarer
+knetbares
+knete
+kneten
+knetend
+knetende
+knetendem
+knetenden
+knetender
+knetendes
+knetest
+knetet
+knetete
+kneteten
+knetetest
+knetetet
+knie
+knien
+kniend
+kniende
+kniendem
+knienden
+kniender
+kniendes
+kniest
+kniet
+kniete
+knieten
+knietest
+knietet
+knietief
+knietiefe
+knietiefem
+knietiefen
+knietiefer
+knietiefes
+knieweich
+knieweiche
+knieweichem
+knieweichen
+knieweicher
+knieweiches
+kniff
+kniffen
+kniffest
+kniffqqelig
+kniffqqelige
+kniffqqeligem
+kniffqqeligen
+kniffqqeliger
+kniffqqeligere
+kniffqqeligerem
+kniffqqeligeren
+kniffqqeligerer
+kniffqqeligeres
+kniffqqeliges
+kniffqqeligste
+kniffqqeligstem
+kniffqqeligsten
+kniffqqeligster
+kniffqqeligstes
+kniffqqlig
+kniffqqlige
+kniffqqligem
+kniffqqligen
+kniffqqliger
+kniffqqligere
+kniffqqligerem
+kniffqqligeren
+kniffqqligerer
+kniffqqligeres
+kniffqqliges
+kniffqqligste
+kniffqqligstem
+kniffqqligsten
+kniffqqligster
+kniffqqligstes
+kniffst
+knifft
+knipse
+knipsen
+knipsend
+knipsende
+knipsendem
+knipsenden
+knipsender
+knipsendes
+knipsest
+knipst
+knipste
+knipsten
+knipstest
+knipstet
+knirsche
+knirschen
+knirschend
+knirschende
+knirschendem
+knirschenden
+knirschender
+knirschendes
+knirschest
+knirschst
+knirscht
+knirschte
+knirschten
+knirschtest
+knirschtet
+knistere
+knistern
+knisternd
+knisternde
+knisterndem
+knisternden
+knisternder
+knisterndes
+knisterst
+knistert
+knisterte
+knisterten
+knistertest
+knistertet
+knistre
+knitterfrei
+knitterfreie
+knitterfreiem
+knitterfreien
+knitterfreier
+knitterfreiere
+knitterfreierem
+knitterfreieren
+knitterfreierer
+knitterfreieres
+knitterfreies
+knitterfreiste
+knitterfreistem
+knitterfreisten
+knitterfreister
+knitterfreistes
+knobele
+knobeln
+knobelnd
+knobelnde
+knobelndem
+knobelnden
+knobelnder
+knobelndes
+knobelst
+knobelt
+knobelte
+knobelten
+knobeltest
+knobeltet
+knoble
+knochentrocken
+knochentrockene
+knochentrockenem
+knochentrockenen
+knochentrockener
+knochentrockenes
+knochig
+knochige
+knochigem
+knochigen
+knochiger
+knochiges
+knollig
+knollige
+knolligem
+knolligen
+knolliger
+knolliges
+knorpelig
+knorpelige
+knorpeligem
+knorpeligen
+knorpeliger
+knorpeliges
+knorplig
+knorplige
+knorpligem
+knorpligen
+knorpliger
+knorpliges
+knorrig
+knorrige
+knorrigem
+knorrigen
+knorriger
+knorriges
+knospenhaft
+knospenhafte
+knospenhaftem
+knospenhaften
+knospenhafter
+knospenhaftes
+knote
+knoten
+knotend
+knotende
+knotendem
+knotenden
+knotender
+knotendes
+knotest
+knotet
+knotete
+knoteten
+knotetest
+knotetet
+knotig
+knotige
+knotigem
+knotigen
+knotiger
+knotiges
+knurre
+knurren
+knurrend
+knurrende
+knurrendem
+knurrenden
+knurrender
+knurrendes
+knurrst
+knurrt
+knurrte
+knurrten
+knurrtest
+knurrtet
+knusperig
+knusperige
+knusperigem
+knusperigen
+knusperiger
+knusperigere
+knusperigerem
+knusperigeren
+knusperigerer
+knusperigeres
+knusperiges
+knusperigste
+knusperigstem
+knusperigsten
+knusperigster
+knusperigstes
+knusprig
+knusprige
+knusprigem
+knusprigen
+knuspriger
+knusprigere
+knusprigerem
+knusprigeren
+knusprigerer
+knusprigeres
+knuspriges
+knusprigste
+knusprigstem
+knusprigsten
+knusprigster
+knusprigstes
+knöchellang
+knöchellange
+knöchellangem
+knöchellangen
+knöchellanger
+knöchellanges
+knöchern
+knöcherne
+knöchernem
+knöchernen
+knöcherner
+knöchernes
+knöpfe
+knöpfen
+knöpfend
+knöpfende
+knöpfendem
+knöpfenden
+knöpfender
+knöpfendes
+knöpfst
+knöpft
+knöpfte
+knöpften
+knöpftest
+knöpftet
+knüpfe
+knüpfen
+knüpfend
+knüpfende
+knüpfendem
+knüpfenden
+knüpfender
+knüpfendes
+knüpfst
+knüpft
+knüpfte
+knüpften
+knüpftest
+knüpftet
+knüppeldick
+knüppeldicke
+knüppeldickem
+knüppeldicken
+knüppeldicker
+knüppeldickes
+knüppele
+knüppeln
+knüppelnd
+knüppelnde
+knüppelndem
+knüppelnden
+knüppelnder
+knüppelndes
+knüppelst
+knüppelt
+knüppelte
+knüppelten
+knüppeltest
+knüppeltet
+knüpple
+koaliere
+koalieren
+koalierend
+koalierende
+koalierendem
+koalierenden
+koalierender
+koalierendes
+koalierst
+koaliert
+koalierte
+koalierten
+koaliertest
+koaliertet
+koalitionstreu
+koalitionstreue
+koalitionstreuem
+koalitionstreuen
+koalitionstreuer
+koalitionstreues
+koalitionsunfähig
+koalitionsunfähige
+koalitionsunfähigem
+koalitionsunfähigen
+koalitionsunfähiger
+koalitionsunfähiges
+kobaltblaue
+kobaltblauem
+kobaltblauen
+kobaltblauer
+kobaltblaues
+kochbar
+kochbare
+kochbarem
+kochbaren
+kochbarer
+kochbares
+koche
+kochen
+kochend
+kochende
+kochendem
+kochenden
+kochender
+kochendes
+kochst
+kocht
+kochte
+kochten
+kochtest
+kochtet
+kodierbar
+kodierbare
+kodierbarem
+kodierbaren
+kodierbarer
+kodierbares
+kodiere
+kodieren
+kodierend
+kodierende
+kodierendem
+kodierenden
+kodierender
+kodierendes
+kodierst
+kodiert
+kodierte
+kodiertem
+kodierten
+kodierter
+kodiertes
+kodiertest
+kodiertet
+kofferweise
+kognitiv
+kognitive
+kognitivem
+kognitiven
+kognitiver
+kognitives
+kohärent
+kohärente
+kohärentem
+kohärenten
+kohärenter
+kohärentes
+kokett
+kokette
+kokettem
+koketten
+koketter
+kokettere
+koketterem
+koketteren
+koketterer
+koketteres
+kokettes
+koketteste
+kokettestem
+kokettesten
+kokettester
+kokettestes
+kokettiere
+kokettieren
+kokettierend
+kokettierende
+kokettierendem
+kokettierenden
+kokettierender
+kokettierendes
+kokettierst
+kokettiert
+kokettierte
+kokettierten
+kokettiertest
+kokettiertet
+kollaboriere
+kollaborieren
+kollaborierend
+kollaborierende
+kollaborierendem
+kollaborierenden
+kollaborierender
+kollaborierendes
+kollaborierst
+kollaboriert
+kollaborierte
+kollaborierten
+kollaboriertest
+kollaboriertet
+kollegial
+kollegiale
+kollegialem
+kollegialen
+kollegialer
+kollegialere
+kollegialerem
+kollegialeren
+kollegialerer
+kollegialeres
+kollegiales
+kollegialste
+kollegialstem
+kollegialsten
+kollegialster
+kollegialstes
+kollektiv
+kollektive
+kollektivem
+kollektiven
+kollektiver
+kollektives
+kollektiviere
+kollektivieren
+kollektivierend
+kollektivierende
+kollektivierendem
+kollektivierenden
+kollektivierender
+kollektivierendes
+kollektivierst
+kollektiviert
+kollektivierte
+kollektiviertem
+kollektivierten
+kollektivierter
+kollektiviertes
+kollektiviertest
+kollektiviertet
+kollektivistisch
+kollektivistische
+kollektivistischem
+kollektivistischen
+kollektivistischer
+kollektivistisches
+kollere
+kollern
+kollernd
+kollernde
+kollerndem
+kollernden
+kollernder
+kollerndes
+kollerst
+kollert
+kollerte
+kollerten
+kollertest
+kollertet
+kollidiere
+kollidieren
+kollidierend
+kollidierende
+kollidierendem
+kollidierenden
+kollidierender
+kollidierendes
+kollidierst
+kollidiert
+kollidierte
+kollidiertem
+kollidierten
+kollidierter
+kollidiertes
+kollidiertest
+kollidiertet
+kollre
+kolonial
+koloniale
+kolonialem
+kolonialen
+kolonialer
+koloniales
+kolonisiere
+kolonisieren
+kolonisierend
+kolonisierende
+kolonisierendem
+kolonisierenden
+kolonisierender
+kolonisierendes
+kolonisierst
+kolonisiert
+kolonisierte
+kolonisiertem
+kolonisierten
+kolonisierter
+kolonisiertes
+kolonisiertest
+kolonisiertet
+koloriere
+kolorieren
+kolorierst
+koloriert
+kolorierte
+koloriertem
+kolorierten
+kolorierter
+koloriertes
+koloriertest
+koloriertet
+kolossal
+kolossale
+kolossalem
+kolossalen
+kolossaler
+kolossales
+kolumbianisch
+kolumbianische
+kolumbianischem
+kolumbianischen
+kolumbianischer
+kolumbianisches
+kombinatorisch
+kombinatorische
+kombinatorischem
+kombinatorischen
+kombinatorischer
+kombinatorisches
+kombinierbar
+kombinierbare
+kombinierbarem
+kombinierbaren
+kombinierbarer
+kombinierbares
+kombiniere
+kombinieren
+kombinierend
+kombinierende
+kombinierendem
+kombinierenden
+kombinierender
+kombinierendes
+kombinierst
+kombiniert
+kombinierte
+kombiniertem
+kombinierten
+kombinierter
+kombiniertes
+kombiniertest
+kombiniertet
+kometenhaft
+kometenhafte
+kometenhaftem
+kometenhaften
+kometenhafter
+kometenhaftes
+komfortabel
+komfortabelste
+komfortabelstem
+komfortabelsten
+komfortabelster
+komfortabelstes
+komfortable
+komfortablem
+komfortablen
+komfortabler
+komfortablere
+komfortablerem
+komfortableren
+komfortablerer
+komfortableres
+komfortables
+komisch
+komische
+komischem
+komischen
+komischer
+komischere
+komischerem
+komischeren
+komischerer
+komischeres
+komisches
+komischste
+komischstem
+komischsten
+komischster
+komischstes
+komm
+kommandiere
+kommandieren
+kommandierend
+kommandierende
+kommandierendem
+kommandierenden
+kommandierender
+kommandierendes
+kommandierst
+kommandiert
+kommandierte
+kommandiertem
+kommandierten
+kommandierter
+kommandiertes
+kommandiertest
+kommandiertet
+komme
+kommen
+kommend
+kommende
+kommendem
+kommenden
+kommender
+kommendes
+kommentarlos
+kommentarlose
+kommentarlosem
+kommentarlosen
+kommentarloser
+kommentarloses
+kommentiere
+kommentieren
+kommentierend
+kommentierende
+kommentierendem
+kommentierenden
+kommentierender
+kommentierendes
+kommentierst
+kommentiert
+kommentierte
+kommentiertem
+kommentierten
+kommentierter
+kommentiertes
+kommentiertest
+kommentiertet
+kommerzialisiere
+kommerzialisieren
+kommerzialisierend
+kommerzialisierende
+kommerzialisierendem
+kommerzialisierenden
+kommerzialisierender
+kommerzialisierendes
+kommerzialisierst
+kommerzialisiert
+kommerzialisierte
+kommerzialisiertem
+kommerzialisierten
+kommerzialisierter
+kommerzialisiertes
+kommerzialisiertest
+kommerzialisiertet
+kommerziell
+kommerzielle
+kommerziellem
+kommerziellen
+kommerzieller
+kommerziellere
+kommerziellerem
+kommerzielleren
+kommerziellerer
+kommerzielleres
+kommerzielles
+kommerziellste
+kommerziellstem
+kommerziellsten
+kommerziellster
+kommerziellstes
+kommissarisch
+kommissarische
+kommissarischem
+kommissarischen
+kommissarischer
+kommissarisches
+kommst
+kommt
+kommunal
+kommunale
+kommunalem
+kommunalen
+kommunaler
+kommunales
+kommunikationsfähig
+kommunikationsfähige
+kommunikationsfähigem
+kommunikationsfähigen
+kommunikationsfähiger
+kommunikationsfähiges
+kommunikationstechnisch
+kommunikationstechnische
+kommunikationstechnischem
+kommunikationstechnischen
+kommunikationstechnischer
+kommunikationstechnisches
+kommunikativ
+kommunikative
+kommunikativem
+kommunikativen
+kommunikativer
+kommunikatives
+kommunistisch
+kommunistische
+kommunistischem
+kommunistischen
+kommunistischer
+kommunistisches
+kommuniziere
+kommunizieren
+kommunizierend
+kommunizierende
+kommunizierendem
+kommunizierenden
+kommunizierender
+kommunizierendes
+kommunizierst
+kommuniziert
+kommunizierte
+kommunizierten
+kommuniziertest
+kommuniziertet
+kommutiere
+kommutieren
+kommutierend
+kommutierende
+kommutierendem
+kommutierenden
+kommutierender
+kommutierendes
+kommutierst
+kommutiert
+kommutierte
+kommutiertem
+kommutierten
+kommutierter
+kommutiertes
+kommutiertest
+kommutiertet
+kompakt
+kompakte
+kompaktem
+kompakten
+kompakter
+kompaktere
+kompakterem
+kompakteren
+kompakterer
+kompakteres
+kompaktes
+kompakteste
+kompaktestem
+kompaktesten
+kompaktester
+kompaktestes
+kompatibel
+kompatible
+kompatiblem
+kompatiblen
+kompatibler
+kompatibles
+kompensationslos
+kompensationslose
+kompensationslosem
+kompensationslosen
+kompensationsloser
+kompensationsloses
+kompensatorisch
+kompensatorische
+kompensatorischem
+kompensatorischen
+kompensatorischer
+kompensatorisches
+kompensierbar
+kompensierbare
+kompensierbarem
+kompensierbaren
+kompensierbarer
+kompensierbares
+kompensiere
+kompensieren
+kompensierend
+kompensierende
+kompensierendem
+kompensierenden
+kompensierender
+kompensierendes
+kompensierst
+kompensiert
+kompensierte
+kompensiertem
+kompensierten
+kompensierter
+kompensiertes
+kompensiertest
+kompensiertet
+kompetent
+kompetente
+kompetentem
+kompetenten
+kompetenter
+kompetentere
+kompetenterem
+kompetenteren
+kompetenterer
+kompetenteres
+kompetentes
+kompetenteste
+kompetentestem
+kompetentesten
+kompetentester
+kompetentestes
+kompetitiv
+kompetitive
+kompetitivem
+kompetitiven
+kompetitiver
+kompetitives
+kompilierbar
+kompilierbare
+kompilierbarem
+kompilierbaren
+kompilierbarer
+kompilierbares
+kompiliere
+kompilieren
+kompilierend
+kompilierende
+kompilierendem
+kompilierenden
+kompilierender
+kompilierendes
+kompilierst
+kompiliert
+kompilierte
+kompiliertem
+kompilierten
+kompilierter
+kompiliertes
+kompiliertest
+kompiliertet
+komplementär
+komplementäre
+komplementärem
+komplementären
+komplementärer
+komplementäres
+komplett
+komplette
+komplettem
+kompletten
+kompletter
+komplettere
+kompletterem
+kompletteren
+kompletterer
+kompletteres
+komplettes
+kompletteste
+komplettestem
+komplettesten
+komplettester
+komplettestes
+komplettiere
+komplettieren
+komplettierend
+komplettierende
+komplettierendem
+komplettierenden
+komplettierender
+komplettierendes
+komplettierst
+komplettiert
+komplettierte
+komplettiertem
+komplettierten
+komplettierter
+komplettiertes
+komplettiertest
+komplettiertet
+komplex
+komplexe
+komplexem
+komplexen
+komplexer
+komplexere
+komplexerem
+komplexeren
+komplexerer
+komplexeres
+komplexes
+komplexeste
+komplexestem
+komplexesten
+komplexester
+komplexestes
+kompliziere
+komplizieren
+komplizierend
+komplizierende
+komplizierendem
+komplizierenden
+komplizierender
+komplizierendes
+komplizierst
+kompliziert
+komplizierte
+kompliziertem
+komplizierten
+komplizierter
+kompliziertere
+komplizierterem
+komplizierteren
+komplizierterer
+komplizierteres
+kompliziertes
+kompliziertest
+komplizierteste
+kompliziertestem
+kompliziertesten
+kompliziertester
+kompliziertestes
+kompliziertet
+komponentenorientiert
+komponentenorientierte
+komponentenorientiertem
+komponentenorientierten
+komponentenorientierter
+komponentenorientiertes
+komponentenweise
+komponentenweisem
+komponentenweisen
+komponentenweiser
+komponentenweises
+komponentig
+komponentige
+komponentigem
+komponentigen
+komponentiger
+komponentiges
+komponiere
+komponieren
+komponierend
+komponierende
+komponierendem
+komponierenden
+komponierender
+komponierendes
+komponierst
+komponiert
+komponierte
+komponiertem
+komponierten
+komponierter
+komponiertes
+komponiertest
+komponiertet
+kompositorisch
+kompositorische
+kompositorischem
+kompositorischen
+kompositorischer
+kompositorisches
+kompress
+komprimierbar
+komprimierbare
+komprimierbarem
+komprimierbaren
+komprimierbarer
+komprimierbares
+komprimiere
+komprimieren
+komprimierend
+komprimierende
+komprimierendem
+komprimierenden
+komprimierender
+komprimierendes
+komprimierst
+komprimiert
+komprimierte
+komprimiertem
+komprimierten
+komprimierter
+komprimiertes
+komprimiertest
+komprimiertet
+kompromissbereit
+kompromissbereite
+kompromissbereitem
+kompromissbereiten
+kompromissbereiter
+kompromissbereites
+kompromisslos
+kompromisslose
+kompromisslosem
+kompromisslosen
+kompromissloser
+kompromisslosere
+kompromissloserem
+kompromissloseren
+kompromissloserer
+kompromissloseres
+kompromissloses
+kompromissloseste
+kompromisslosestem
+kompromisslosesten
+kompromisslosester
+kompromisslosestes
+kompromittiere
+kompromittieren
+kompromittierend
+kompromittierende
+kompromittierendem
+kompromittierenden
+kompromittierender
+kompromittierendes
+kompromittierst
+kompromittiert
+kompromittierte
+kompromittiertem
+kompromittierten
+kompromittierter
+kompromittiertes
+kompromittiertest
+kompromittiertet
+komödiantisch
+komödiantische
+komödiantischem
+komödiantischen
+komödiantischer
+komödiantisches
+kondensiere
+kondensieren
+kondensierend
+kondensierende
+kondensierendem
+kondensierenden
+kondensierender
+kondensierendes
+kondensierst
+kondensiert
+kondensierte
+kondensiertem
+kondensierten
+kondensierter
+kondensiertes
+kondensiertest
+kondensiertet
+konditionell
+konditioniere
+konditionieren
+konditionierend
+konditionierende
+konditionierendem
+konditionierenden
+konditionierender
+konditionierendes
+konditionierst
+konditioniert
+konditionierte
+konditioniertem
+konditionierten
+konditionierter
+konditioniertes
+konditioniertest
+konditioniertet
+kondoliere
+kondolieren
+kondolierend
+kondolierende
+kondolierendem
+kondolierenden
+kondolierender
+kondolierendes
+kondolierst
+kondoliert
+kondolierte
+kondolierten
+kondoliertest
+kondoliertet
+konfektioniert
+konfektionierte
+konfektioniertem
+konfektionierten
+konfektionierter
+konfektioniertes
+konferiere
+konferieren
+konferierend
+konferierende
+konferierendem
+konferierenden
+konferierender
+konferierendes
+konferierst
+konferiert
+konferierte
+konferierten
+konferiertest
+konferiertet
+konfessionell
+konfessionelle
+konfessionellem
+konfessionellen
+konfessioneller
+konfessionelles
+konfessionslos
+konfessionslose
+konfessionslosem
+konfessionslosen
+konfessionsloser
+konfessionsloses
+konfigurierbar
+konfigurierbare
+konfigurierbarem
+konfigurierbaren
+konfigurierbarer
+konfigurierbares
+konfiguriere
+konfigurieren
+konfigurierend
+konfigurierende
+konfigurierendem
+konfigurierenden
+konfigurierender
+konfigurierendes
+konfigurierst
+konfiguriert
+konfigurierte
+konfiguriertem
+konfigurierten
+konfigurierter
+konfiguriertes
+konfiguriertest
+konfiguriertet
+konfisziere
+konfiszieren
+konfiszierend
+konfiszierende
+konfiszierendem
+konfiszierenden
+konfiszierender
+konfiszierendes
+konfiszierst
+konfisziert
+konfiszierte
+konfisziertem
+konfiszierten
+konfiszierter
+konfisziertes
+konfisziertest
+konfisziertet
+konfliktfrei
+konfliktfreie
+konfliktfreiem
+konfliktfreien
+konfliktfreier
+konfliktfreies
+konflikthaltig
+konflikthaltige
+konflikthaltigem
+konflikthaltigen
+konflikthaltiger
+konflikthaltiges
+konfliktreich
+konfliktreiche
+konfliktreichem
+konfliktreichen
+konfliktreicher
+konfliktreiches
+konfluent
+konfluente
+konfluentem
+konfluenten
+konfluenter
+konfluentes
+konform
+konforme
+konformem
+konformen
+konformer
+konformes
+konfrontiere
+konfrontieren
+konfrontierend
+konfrontierende
+konfrontierendem
+konfrontierenden
+konfrontierender
+konfrontierendes
+konfrontierst
+konfrontiert
+konfrontierte
+konfrontiertem
+konfrontierten
+konfrontierter
+konfrontiertes
+konfrontiertest
+konfrontiertet
+konfus
+konfuse
+konfusem
+konfusen
+konfuser
+konfusere
+konfuserem
+konfuseren
+konfuserer
+konfuseres
+konfuses
+konfuseste
+konfusestem
+konfusesten
+konfusester
+konfusestes
+konfuzianisch
+konfuzianische
+konfuzianischem
+konfuzianischen
+konfuzianischer
+konfuzianisches
+konföderal
+konföderale
+konföderalem
+konföderalen
+konföderaler
+konföderales
+kongenial
+kongeniale
+kongenialem
+kongenialen
+kongenialer
+kongeniales
+kongolesisch
+kongolesische
+kongolesischem
+kongolesischen
+kongolesischer
+kongolesisches
+konisch
+konische
+konischem
+konischen
+konischer
+konisches
+konjugiere
+konjugieren
+konjugierend
+konjugierende
+konjugierendem
+konjugierenden
+konjugierender
+konjugierendes
+konjugierst
+konjugiert
+konjugierte
+konjugiertem
+konjugierten
+konjugierter
+konjugiertes
+konjugiertest
+konjugiertet
+konjunkturell
+konjunkturelle
+konjunkturellem
+konjunkturellen
+konjunktureller
+konjunkturelles
+konjunkturgerecht
+konjunkturgerechte
+konjunkturgerechtem
+konjunkturgerechten
+konjunkturgerechter
+konjunkturgerechtes
+konkateniere
+konkatenieren
+konkatenierst
+konkateniert
+konkatenierte
+konkateniertem
+konkatenierten
+konkatenierter
+konkateniertes
+konkateniertest
+konkateniertet
+konkav
+konkave
+konkavem
+konkaven
+konkaver
+konkaves
+konkret
+konkrete
+konkretem
+konkreten
+konkreter
+konkretere
+konkreterem
+konkreteren
+konkreterer
+konkreteres
+konkretes
+konkreteste
+konkretestem
+konkretesten
+konkretester
+konkretestes
+konkretisierbar
+konkretisierbare
+konkretisierbarem
+konkretisierbaren
+konkretisierbarer
+konkretisierbares
+konkretisiere
+konkretisieren
+konkretisierend
+konkretisierende
+konkretisierendem
+konkretisierenden
+konkretisierender
+konkretisierendes
+konkretisierst
+konkretisiert
+konkretisierte
+konkretisiertem
+konkretisierten
+konkretisierter
+konkretisiertes
+konkretisiertest
+konkretisiertet
+konkurrenzfähig
+konkurrenzfähige
+konkurrenzfähigem
+konkurrenzfähigen
+konkurrenzfähiger
+konkurrenzfähigere
+konkurrenzfähigerem
+konkurrenzfähigeren
+konkurrenzfähigerer
+konkurrenzfähigeres
+konkurrenzfähiges
+konkurrenzfähigste
+konkurrenzfähigstem
+konkurrenzfähigsten
+konkurrenzfähigster
+konkurrenzfähigstes
+konkurrenzlos
+konkurrenzlose
+konkurrenzlosem
+konkurrenzlosen
+konkurrenzloser
+konkurrenzloses
+konkurriere
+konkurrieren
+konkurrierend
+konkurrierende
+konkurrierendem
+konkurrierenden
+konkurrierender
+konkurrierendes
+konkurrierst
+konkurriert
+konkurrierte
+konkurrierten
+konkurriertest
+konkurriertet
+konkursreif
+konkursreife
+konkursreifem
+konkursreifen
+konkursreifer
+konkursreifes
+konnotativ
+konnotative
+konnotativem
+konnotativen
+konnotativer
+konnotatives
+konnte
+konnten
+konntest
+konntet
+konsensfähig
+konsensfähige
+konsensfähigem
+konsensfähigen
+konsensfähiger
+konsensfähiges
+konsensorientiert
+konsensorientierte
+konsensorientiertem
+konsensorientierten
+konsensorientierter
+konsensorientiertes
+konsequent
+konsequente
+konsequentem
+konsequenten
+konsequenter
+konsequentere
+konsequenterem
+konsequenteren
+konsequenterer
+konsequenteres
+konsequenterweise
+konsequentes
+konsequenteste
+konsequentestem
+konsequentesten
+konsequentester
+konsequentestes
+konservativ
+konservative
+konservativem
+konservativen
+konservativer
+konservativere
+konservativerem
+konservativeren
+konservativerer
+konservativeres
+konservatives
+konservativste
+konservativstem
+konservativsten
+konservativster
+konservativstes
+konservierbar
+konservierbare
+konservierbarem
+konservierbaren
+konservierbarer
+konservierbares
+konserviere
+konservieren
+konservierend
+konservierende
+konservierendem
+konservierenden
+konservierender
+konservierendes
+konservierst
+konserviert
+konservierte
+konserviertem
+konservierten
+konservierter
+konserviertes
+konserviertest
+konserviertet
+konsistent
+konsistente
+konsistentem
+konsistenten
+konsistenter
+konsistentes
+konsolidiere
+konsolidieren
+konsolidierend
+konsolidierende
+konsolidierendem
+konsolidierenden
+konsolidierender
+konsolidierendes
+konsolidierst
+konsolidiert
+konsolidierte
+konsolidiertem
+konsolidierten
+konsolidierter
+konsolidiertes
+konsolidiertest
+konsolidiertet
+konspirativ
+konspirative
+konspirativem
+konspirativen
+konspirativer
+konspiratives
+konstant
+konstante
+konstantem
+konstanten
+konstanter
+konstantes
+konstantinisch
+konstantinische
+konstantinischem
+konstantinischen
+konstantinischer
+konstantinisches
+konstatiere
+konstatieren
+konstatierend
+konstatierende
+konstatierendem
+konstatierenden
+konstatierender
+konstatierendes
+konstatierst
+konstatiert
+konstatierte
+konstatiertem
+konstatierten
+konstatierter
+konstatiertes
+konstatiertest
+konstatiertet
+konsterniere
+konsternieren
+konsternierend
+konsternierende
+konsternierendem
+konsternierenden
+konsternierender
+konsternierendes
+konsternierst
+konsterniert
+konsternierte
+konsterniertem
+konsternierten
+konsternierter
+konsterniertes
+konsterniertest
+konsterniertet
+konstituiere
+konstituieren
+konstituierend
+konstituierende
+konstituierendem
+konstituierenden
+konstituierender
+konstituierendes
+konstituierst
+konstituiert
+konstituierte
+konstituiertem
+konstituierten
+konstituierter
+konstituiertes
+konstituiertest
+konstituiertet
+konstitutionell
+konstitutionelle
+konstitutionellem
+konstitutionellen
+konstitutioneller
+konstitutionelles
+konstitutiv
+konstitutive
+konstitutivem
+konstitutiven
+konstitutiver
+konstitutives
+konstruiere
+konstruieren
+konstruierend
+konstruierende
+konstruierendem
+konstruierenden
+konstruierender
+konstruierendes
+konstruierst
+konstruiert
+konstruierte
+konstruiertem
+konstruierten
+konstruierter
+konstruiertes
+konstruiertest
+konstruiertet
+konstruktionsbedingt
+konstruktionsbedingte
+konstruktionsbedingtem
+konstruktionsbedingten
+konstruktionsbedingter
+konstruktionsbedingtes
+konstruktionsreif
+konstruktionsreife
+konstruktionsreifem
+konstruktionsreifen
+konstruktionsreifer
+konstruktionsreifes
+konstruktiv
+konstruktive
+konstruktivem
+konstruktiven
+konstruktiver
+konstruktivere
+konstruktiverem
+konstruktiveren
+konstruktiverer
+konstruktiveres
+konstruktives
+konstruktivste
+konstruktivstem
+konstruktivsten
+konstruktivster
+konstruktivstes
+konsularisch
+konsularische
+konsularischem
+konsularischen
+konsularischer
+konsularisches
+konsultiere
+konsultieren
+konsultierend
+konsultierende
+konsultierendem
+konsultierenden
+konsultierender
+konsultierendes
+konsultierst
+konsultiert
+konsultierte
+konsultiertem
+konsultierten
+konsultierter
+konsultiertes
+konsultiertest
+konsultiertet
+konsumiere
+konsumieren
+konsumierend
+konsumierende
+konsumierendem
+konsumierenden
+konsumierender
+konsumierendes
+konsumierst
+konsumiert
+konsumierte
+konsumiertem
+konsumierten
+konsumierter
+konsumiertes
+konsumiertest
+konsumiertet
+kontaktarm
+kontaktarme
+kontaktarmem
+kontaktarmen
+kontaktarmer
+kontaktarmes
+kontaktfreudig
+kontaktfreudige
+kontaktfreudigem
+kontaktfreudigen
+kontaktfreudiger
+kontaktfreudigere
+kontaktfreudigerem
+kontaktfreudigeren
+kontaktfreudigerer
+kontaktfreudigeres
+kontaktfreudiges
+kontaktfreudigste
+kontaktfreudigstem
+kontaktfreudigsten
+kontaktfreudigster
+kontaktfreudigstes
+kontaktiere
+kontaktieren
+kontaktierend
+kontaktierende
+kontaktierendem
+kontaktierenden
+kontaktierender
+kontaktierendes
+kontaktierst
+kontaktiert
+kontaktierte
+kontaktiertem
+kontaktierten
+kontaktierter
+kontaktiertes
+kontaktiertest
+kontaktiertet
+kontaktschwach
+kontaktschwache
+kontaktschwachem
+kontaktschwachen
+kontaktschwacher
+kontaktschwaches
+kontaminiere
+kontaminieren
+kontaminierend
+kontaminierende
+kontaminierendem
+kontaminierenden
+kontaminierender
+kontaminierendes
+kontaminierst
+kontaminiert
+kontaminierte
+kontaminiertem
+kontaminierten
+kontaminierter
+kontaminiertes
+kontaminiertest
+kontaminiertet
+kontemplativ
+kontemplative
+kontemplativem
+kontemplativen
+kontemplativer
+kontemplatives
+kontere
+konterkariere
+konterkarieren
+konterkarierend
+konterkarierende
+konterkarierendem
+konterkarierenden
+konterkarierender
+konterkarierendes
+konterkarierst
+konterkariert
+konterkarierte
+konterkariertem
+konterkarierten
+konterkarierter
+konterkariertes
+konterkariertest
+konterkariertet
+kontern
+konternd
+konternde
+konterndem
+konternden
+konternder
+konterndes
+konterst
+kontert
+konterte
+konterten
+kontertest
+kontertet
+kontextabhängig
+kontextabhängige
+kontextabhängigem
+kontextabhängigen
+kontextabhängiger
+kontextabhängiges
+kontextfrei
+kontextfreie
+kontextfreiem
+kontextfreien
+kontextfreier
+kontextfreies
+kontextsensitiv
+kontextsensitive
+kontextsensitivem
+kontextsensitiven
+kontextsensitiver
+kontextsensitives
+kontextspezifisch
+kontextspezifische
+kontextspezifischem
+kontextspezifischen
+kontextspezifischer
+kontextspezifisches
+kontextunabhängig
+kontextunabhängige
+kontextunabhängigem
+kontextunabhängigen
+kontextunabhängiger
+kontextunabhängiges
+kontinental
+kontinentale
+kontinentalem
+kontinentalen
+kontinentaler
+kontinentales
+kontinentaleuropäisch
+kontinentaleuropäische
+kontinentaleuropäischem
+kontinentaleuropäischen
+kontinentaleuropäischer
+kontinentaleuropäisches
+kontingentiere
+kontingentieren
+kontingentierend
+kontingentierende
+kontingentierendem
+kontingentierenden
+kontingentierender
+kontingentierendes
+kontingentierst
+kontingentiert
+kontingentierte
+kontingentiertem
+kontingentierten
+kontingentierter
+kontingentiertes
+kontingentiertest
+kontingentiertet
+kontinuierlich
+kontinuierliche
+kontinuierlichem
+kontinuierlichen
+kontinuierlicher
+kontinuierliches
+kontraproduktiv
+kontraproduktive
+kontraproduktivem
+kontraproduktiven
+kontraproduktiver
+kontraproduktives
+kontrastbetont
+kontrastbetonte
+kontrastbetontem
+kontrastbetonten
+kontrastbetonter
+kontrastbetontes
+kontraststärker
+kontraststärkere
+kontraststärkerem
+kontraststärkeren
+kontraststärkerer
+kontraststärkeres
+kontre
+kontrollierbar
+kontrollierbare
+kontrollierbarem
+kontrollierbaren
+kontrollierbarer
+kontrollierbares
+kontrolliere
+kontrollieren
+kontrollierend
+kontrollierende
+kontrollierendem
+kontrollierenden
+kontrollierender
+kontrollierendes
+kontrollierst
+kontrolliert
+kontrollierte
+kontrolliertem
+kontrollierten
+kontrollierter
+kontrolliertes
+kontrolliertest
+kontrolliertet
+kontrovers
+kontroverse
+kontroversem
+kontroversen
+kontroverser
+kontroverses
+konträr
+konträre
+konträrem
+konträren
+konträrer
+konträres
+konventionell
+konventionelle
+konventionellem
+konventionellen
+konventioneller
+konventionelles
+konvergent
+konvergente
+konvergentem
+konvergenten
+konvergenter
+konvergentes
+konvergiere
+konvergieren
+konvergierend
+konvergierende
+konvergierendem
+konvergierenden
+konvergierender
+konvergierendes
+konvergierst
+konvergiert
+konvergierte
+konvergiertem
+konvergierten
+konvergierter
+konvergiertes
+konvergiertest
+konvergiertet
+konvertierbar
+konvertierbare
+konvertierbarem
+konvertierbaren
+konvertierbarer
+konvertierbares
+konvertiere
+konvertieren
+konvertierend
+konvertierende
+konvertierendem
+konvertierenden
+konvertierender
+konvertierendes
+konvertierst
+konvertiert
+konvertierte
+konvertiertem
+konvertierten
+konvertierter
+konvertiertes
+konvertiertest
+konvertiertet
+konvex
+konvexe
+konvexem
+konvexen
+konvexer
+konvexes
+konzentriere
+konzentrieren
+konzentrierend
+konzentrierende
+konzentrierendem
+konzentrierenden
+konzentrierender
+konzentrierendes
+konzentrierst
+konzentriert
+konzentrierte
+konzentriertem
+konzentrierten
+konzentrierter
+konzentriertes
+konzentriertest
+konzentriertet
+konzeptionell
+konzeptionelle
+konzeptionellem
+konzeptionellen
+konzeptioneller
+konzeptionelles
+konzeptionslos
+konzeptionslose
+konzeptionslosem
+konzeptionslosen
+konzeptionsloser
+konzeptionsloses
+konzeptlos
+konzeptlose
+konzeptlosem
+konzeptlosen
+konzeptloser
+konzeptloses
+konzeptuell
+konzeptuelle
+konzeptuellem
+konzeptuellen
+konzeptueller
+konzeptuelles
+konzernartig
+konzernartige
+konzernartigem
+konzernartigen
+konzernartiger
+konzernartiges
+konzernintern
+konzerninterne
+konzerninternem
+konzerninternen
+konzerninterner
+konzerninternes
+konzertant
+konzertante
+konzertantem
+konzertanten
+konzertanter
+konzertantes
+konziliant
+konziliante
+konziliantem
+konzilianten
+konzilianter
+konziliantes
+konzipiere
+konzipieren
+konzipierend
+konzipierende
+konzipierendem
+konzipierenden
+konzipierender
+konzipierendes
+konzipierst
+konzipiert
+konzipierte
+konzipiertem
+konzipierten
+konzipierter
+konzipiertes
+konzipiertest
+konzipiertet
+kooperativ
+kooperative
+kooperativem
+kooperativen
+kooperativer
+kooperatives
+kooperiere
+kooperieren
+kooperierend
+kooperierende
+kooperierendem
+kooperierenden
+kooperierender
+kooperierendes
+kooperierst
+kooperiert
+kooperierte
+kooperierten
+kooperiertest
+kooperiertet
+kooptiere
+kooptieren
+kooptierend
+kooptierende
+kooptierendem
+kooptierenden
+kooptierender
+kooptierendes
+kooptierst
+kooptiert
+kooptierte
+kooptiertem
+kooptierten
+kooptierter
+kooptiertes
+kooptiertest
+kooptiertet
+koordiniere
+koordinieren
+koordinierend
+koordinierende
+koordinierendem
+koordinierenden
+koordinierender
+koordinierendes
+koordinierst
+koordiniert
+koordinierte
+koordiniertem
+koordinierten
+koordinierter
+koordiniertes
+koordiniertest
+koordiniertet
+kopfqqlos
+kopfqqlose
+kopfqqlosem
+kopfqqlosen
+kopfqqloser
+kopfqqlosere
+kopfqqloserem
+kopfqqloseren
+kopfqqloserer
+kopfqqloseres
+kopfqqloses
+kopfqqloseste
+kopfqqlosestem
+kopfqqlosesten
+kopfqqlosester
+kopfqqlosestes
+kopfschüttelnd
+kopfschüttelnde
+kopfschüttelndem
+kopfschüttelnden
+kopfschüttelnder
+kopfschüttelndes
+kopfstehe
+kopfstehen
+kopfstehend
+kopfstehende
+kopfstehendem
+kopfstehenden
+kopfstehender
+kopfstehendes
+kopfstehst
+kopfsteht
+kopfüber
+kopierbar
+kopierbare
+kopierbarem
+kopierbaren
+kopierbarer
+kopierbares
+kopiere
+kopieren
+kopierend
+kopierende
+kopierendem
+kopierenden
+kopierender
+kopierendes
+kopierst
+kopiert
+kopierte
+kopiertem
+kopierten
+kopierter
+kopiertes
+kopiertest
+kopiertet
+koppelbar
+koppelbare
+koppelbarem
+koppelbaren
+koppelbarer
+koppelbares
+koppele
+koppeln
+koppelnd
+koppelnde
+koppelndem
+koppelnden
+koppelnder
+koppelndes
+koppelst
+koppelt
+koppelte
+koppelten
+koppeltest
+koppeltet
+kopple
+koreanisch
+koreanische
+koreanischem
+koreanischen
+koreanischer
+koreanisches
+korrekt
+korrekte
+korrektem
+korrekten
+korrekter
+korrektere
+korrekterem
+korrekteren
+korrekterer
+korrekteres
+korrekterweise
+korrektes
+korrekteste
+korrektestem
+korrektesten
+korrektester
+korrektestes
+korreliere
+korrelieren
+korrelierend
+korrelierende
+korrelierendem
+korrelierenden
+korrelierender
+korrelierendes
+korrelierst
+korreliert
+korrelierte
+korreliertem
+korrelierten
+korrelierter
+korreliertes
+korreliertest
+korreliertet
+korrespondiere
+korrespondieren
+korrespondierend
+korrespondierende
+korrespondierendem
+korrespondierenden
+korrespondierender
+korrespondierendes
+korrespondierst
+korrespondiert
+korrespondierte
+korrespondierten
+korrespondiertest
+korrespondiertet
+korrigierbar
+korrigierbare
+korrigierbarem
+korrigierbaren
+korrigierbarer
+korrigierbares
+korrigiere
+korrigieren
+korrigierend
+korrigierende
+korrigierendem
+korrigierenden
+korrigierender
+korrigierendes
+korrigierst
+korrigiert
+korrigierte
+korrigiertem
+korrigierten
+korrigierter
+korrigiertes
+korrigiertest
+korrigiertet
+korrosionsbeständig
+korrosionsbeständige
+korrosionsbeständigem
+korrosionsbeständigen
+korrosionsbeständiger
+korrosionsbeständiges
+korrumpierbar
+korrumpierbare
+korrumpierbarem
+korrumpierbaren
+korrumpierbarer
+korrumpierbares
+korrumpiere
+korrumpieren
+korrumpierend
+korrumpierende
+korrumpierendem
+korrumpierenden
+korrumpierender
+korrumpierendes
+korrumpierst
+korrumpiert
+korrumpierte
+korrumpiertem
+korrumpierten
+korrumpierter
+korrumpiertes
+korrumpiertest
+korrumpiertet
+korrupt
+korrupte
+korruptem
+korrupten
+korrupter
+korruptes
+koscher
+kosmetisch
+kosmetische
+kosmetischem
+kosmetischen
+kosmetischer
+kosmetisches
+kosmisch
+kosmische
+kosmischem
+kosmischen
+kosmischer
+kosmisches
+kosmopolitisch
+kosmopolitische
+kosmopolitischem
+kosmopolitischen
+kosmopolitischer
+kosmopolitisches
+kostbar
+kostbare
+kostbarem
+kostbaren
+kostbarer
+kostbarere
+kostbarerem
+kostbareren
+kostbarerer
+kostbareres
+kostbares
+kostbarste
+kostbarstem
+kostbarsten
+kostbarster
+kostbarstes
+koste
+kosten
+kostend
+kostende
+kostendem
+kostenden
+kostender
+kostendes
+kostenfrei
+kostenfreie
+kostenfreiem
+kostenfreien
+kostenfreier
+kostenfreies
+kostengünstig
+kostengünstige
+kostengünstigem
+kostengünstigen
+kostengünstiger
+kostengünstigere
+kostengünstigerem
+kostengünstigeren
+kostengünstigerer
+kostengünstigeres
+kostengünstiges
+kostengünstigste
+kostengünstigstem
+kostengünstigsten
+kostengünstigster
+kostengünstigstes
+kostenintensiv
+kostenintensive
+kostenintensivem
+kostenintensiven
+kostenintensiver
+kostenintensives
+kostenlos
+kostenlose
+kostenlosem
+kostenlosen
+kostenloser
+kostenloses
+kostenmäßig
+kostenmäßige
+kostenmäßigem
+kostenmäßigen
+kostenmäßiger
+kostenmäßiges
+kostenpflichtig
+kostenpflichtige
+kostenpflichtigem
+kostenpflichtigen
+kostenpflichtiger
+kostenpflichtiges
+kostenschonend
+kostenschonende
+kostenschonendem
+kostenschonenden
+kostenschonender
+kostenschonendes
+kostensenkend
+kostensenkende
+kostensenkendem
+kostensenkenden
+kostensenkender
+kostensenkendes
+kostensparend
+kostensparende
+kostensparendem
+kostensparenden
+kostensparender
+kostensparendes
+kostest
+kostet
+kostete
+kosteten
+kostetest
+kostetet
+kostspielig
+kostspielige
+kostspieligem
+kostspieligen
+kostspieliger
+kostspieligere
+kostspieligerem
+kostspieligeren
+kostspieligerer
+kostspieligeres
+kostspieliges
+kostspieligste
+kostspieligstem
+kostspieligsten
+kostspieligster
+kostspieligstes
+kostümiere
+kostümieren
+kostümierend
+kostümierende
+kostümierendem
+kostümierenden
+kostümierender
+kostümierendes
+kostümierst
+kostümiert
+kostümierte
+kostümiertem
+kostümierten
+kostümierter
+kostümiertes
+kostümiertest
+kostümiertet
+kotze
+kotzen
+kotzend
+kotzende
+kotzendem
+kotzenden
+kotzender
+kotzendes
+kotzest
+kotzt
+kotzte
+kotzten
+kotztest
+kotztet
+kp
+krabbele
+krabbeln
+krabbelnd
+krabbelnde
+krabbelndem
+krabbelnden
+krabbelnder
+krabbelndes
+krabbelst
+krabbelt
+krabbelte
+krabbelten
+krabbeltest
+krabbeltet
+krabble
+krache
+krachen
+krachend
+krachende
+krachendem
+krachenden
+krachender
+krachendes
+krachst
+kracht
+krachte
+krachten
+krachtest
+krachtet
+kraftlos
+kraftlose
+kraftlosem
+kraftlosen
+kraftloser
+kraftlosere
+kraftloserem
+kraftloseren
+kraftloserer
+kraftloseres
+kraftloses
+kraftloseste
+kraftlosestem
+kraftlosesten
+kraftlosester
+kraftlosestes
+kraftraubend
+kraftraubende
+kraftraubendem
+kraftraubenden
+kraftraubender
+kraftraubendere
+kraftraubenderem
+kraftraubenderen
+kraftraubenderer
+kraftraubenderes
+kraftraubendes
+kraftraubendste
+kraftraubendstem
+kraftraubendsten
+kraftraubendster
+kraftraubendstes
+kraftvoll
+kraftvolle
+kraftvollem
+kraftvollen
+kraftvoller
+kraftvolles
+krakeele
+krakeelen
+krakeelend
+krakeelende
+krakeelendem
+krakeelenden
+krakeelender
+krakeelendes
+krakeelst
+krakeelt
+krakeelte
+krakeelten
+krakeeltest
+krakeeltet
+kralle
+krallen
+krallst
+krallt
+krallte
+krallten
+kralltest
+kralltet
+krame
+kramen
+krampfe
+krampfen
+krampfend
+krampfende
+krampfendem
+krampfenden
+krampfender
+krampfendes
+krampfhaft
+krampfhafte
+krampfhaftem
+krampfhaften
+krampfhafter
+krampfhaftes
+krampfst
+krampft
+krampfte
+krampften
+krampftest
+krampftet
+kramst
+kramt
+kramte
+kramten
+kramtest
+kramtet
+krank
+kranke
+krankem
+kranken
+krankend
+krankende
+krankendem
+krankenden
+krankender
+krankendes
+kranker
+krankes
+krankhaft
+krankhafte
+krankhaftem
+krankhaften
+krankhafter
+krankhaftere
+krankhafterem
+krankhafteren
+krankhafterer
+krankhafteres
+krankhaftes
+krankhafteste
+krankhaftestem
+krankhaftesten
+krankhaftester
+krankhaftestes
+krankschreibe
+krankschreiben
+krankschreibt
+krankst
+krankt
+krankte
+krankten
+kranktest
+kranktet
+krass
+krasse
+krassem
+krassen
+krasser
+krassere
+krasserem
+krasseren
+krasserer
+krasseres
+krasses
+krasseste
+krassestem
+krassesten
+krassester
+krassestes
+kratze
+kratzen
+kratzend
+kratzende
+kratzendem
+kratzenden
+kratzender
+kratzendes
+kratzest
+kratzt
+kratzte
+kratzten
+kratztest
+kratztet
+kraule
+kraulen
+kraulend
+kraulende
+kraulendem
+kraulenden
+kraulender
+kraulendes
+kraulst
+krault
+kraulte
+kraulten
+kraultest
+kraultet
+kraus
+krause
+krausem
+krausen
+krausend
+krausende
+krausendem
+krausenden
+krausender
+krausendes
+krauser
+krausere
+krauserem
+krauseren
+krauserer
+krauseres
+krauses
+krausest
+krauseste
+krausestem
+krausesten
+krausester
+krausestes
+kraushaarig
+kraushaarige
+kraushaarigem
+kraushaarigen
+kraushaariger
+kraushaariges
+kraust
+krauste
+krausten
+kraustest
+kraustet
+kreativ
+kreative
+kreativem
+kreativen
+kreativer
+kreativere
+kreativerem
+kreativeren
+kreativerer
+kreativeres
+kreatives
+kreativste
+kreativstem
+kreativsten
+kreativster
+kreativstes
+kreatürlich
+kreatürliche
+kreatürlichem
+kreatürlichen
+kreatürlicher
+kreatürliches
+krebsartig
+krebsartige
+krebsartigem
+krebsartigen
+krebsartiger
+krebsartiges
+krebskrank
+krebskranke
+krebskrankem
+krebskranken
+krebskranker
+krebskrankes
+kredenze
+kredenzen
+kredenzend
+kredenzende
+kredenzendem
+kredenzenden
+kredenzender
+kredenzendes
+kredenzest
+kredenzt
+kredenzte
+kredenztem
+kredenzten
+kredenzter
+kredenztes
+kredenztest
+kredenztet
+kreditfähig
+kreditfähige
+kreditfähigem
+kreditfähigen
+kreditfähiger
+kreditfähigere
+kreditfähigerem
+kreditfähigeren
+kreditfähigerer
+kreditfähigeres
+kreditfähiges
+kreditfähigste
+kreditfähigstem
+kreditfähigsten
+kreditfähigster
+kreditfähigstes
+kreditiere
+kreditieren
+kreditierend
+kreditierende
+kreditierendem
+kreditierenden
+kreditierender
+kreditierendes
+kreditierst
+kreditiert
+kreditierte
+kreditiertem
+kreditierten
+kreditierter
+kreditiertes
+kreditiertest
+kreditiertet
+kreditunwürdig
+kreditunwürdige
+kreditunwürdigem
+kreditunwürdigen
+kreditunwürdiger
+kreditunwürdiges
+kreditwürdig
+kreditwürdige
+kreditwürdigem
+kreditwürdigen
+kreditwürdiger
+kreditwürdigere
+kreditwürdigerem
+kreditwürdigeren
+kreditwürdigerer
+kreditwürdigeres
+kreditwürdiges
+kreditwürdigste
+kreditwürdigstem
+kreditwürdigsten
+kreditwürdigster
+kreditwürdigstes
+kreide
+kreidebleich
+kreidebleiche
+kreidebleichem
+kreidebleichen
+kreidebleicher
+kreidebleiches
+kreiden
+kreidend
+kreidende
+kreidendem
+kreidenden
+kreidender
+kreidendes
+kreidest
+kreidet
+kreidete
+kreideten
+kreidetest
+kreidetet
+kreideweiß
+kreideweiße
+kreideweißem
+kreideweißen
+kreideweißer
+kreideweißes
+kreiere
+kreieren
+kreierend
+kreierende
+kreierendem
+kreierenden
+kreierender
+kreierendes
+kreierst
+kreiert
+kreierte
+kreiertem
+kreierten
+kreierter
+kreiertes
+kreiertest
+kreiertet
+kreische
+kreischen
+kreischend
+kreischende
+kreischendem
+kreischenden
+kreischender
+kreischendes
+kreischest
+kreischst
+kreischt
+kreischte
+kreischten
+kreischtest
+kreischtet
+kreise
+kreisele
+kreiseln
+kreiselnd
+kreiselnde
+kreiselndem
+kreiselnden
+kreiselnder
+kreiselndes
+kreiselst
+kreiselt
+kreiselte
+kreiselten
+kreiseltest
+kreiseltet
+kreisen
+kreisend
+kreisende
+kreisendem
+kreisenden
+kreisender
+kreisendes
+kreisest
+kreisförmig
+kreisförmige
+kreisförmigem
+kreisförmigen
+kreisförmiger
+kreisförmiges
+kreisle
+kreisrund
+kreisrunde
+kreisrundem
+kreisrunden
+kreisrunder
+kreisrundes
+kreist
+kreiste
+kreisten
+kreistest
+kreistet
+kremieren
+krempig
+krempige
+krempigem
+krempigen
+krempiger
+krempiges
+krepiere
+krepieren
+krepierend
+krepierende
+krepierendem
+krepierenden
+krepierender
+krepierendes
+krepierst
+krepiert
+krepierte
+krepiertem
+krepierten
+krepierter
+krepiertes
+krepiertest
+krepiertet
+kreuze
+kreuzen
+kreuzend
+kreuzende
+kreuzendem
+kreuzenden
+kreuzender
+kreuzendes
+kreuzest
+kreuzige
+kreuzigen
+kreuzigend
+kreuzigende
+kreuzigendem
+kreuzigenden
+kreuzigender
+kreuzigendes
+kreuzigst
+kreuzigt
+kreuzigte
+kreuzigten
+kreuzigtest
+kreuzigtet
+kreuzt
+kreuzte
+kreuzten
+kreuztest
+kreuztet
+kreuzweis
+kreuzweise
+kreuzweisem
+kreuzweisen
+kreuzweiser
+kreuzweises
+kribbele
+kribbelig
+kribbelige
+kribbeligem
+kribbeligen
+kribbeliger
+kribbeliges
+kribbeln
+kribbelnd
+kribbelnde
+kribbelndem
+kribbelnden
+kribbelnder
+kribbelndes
+kribbelst
+kribbelt
+kribbelte
+kribbelten
+kribbeltest
+kribbeltet
+kribble
+kribblig
+kribblige
+kribbligem
+kribbligen
+kribbliger
+kribbliges
+krieche
+kriechen
+kriechend
+kriechende
+kriechendem
+kriechenden
+kriechender
+kriechendes
+kriechst
+kriecht
+kriege
+kriegen
+kriegend
+kriegende
+kriegendem
+kriegenden
+kriegender
+kriegendes
+kriegerisch
+kriegerische
+kriegerischem
+kriegerischen
+kriegerischer
+kriegerisches
+kriegführe
+kriegführen
+kriegführend
+kriegführende
+kriegführendem
+kriegführenden
+kriegführender
+kriegführendes
+kriegführst
+kriegführt
+kriegführte
+kriegführten
+kriegführtest
+kriegführtet
+kriegst
+kriegt
+kriegte
+kriegten
+kriegtest
+kriegtet
+kriminalistisch
+kriminalistische
+kriminalistischem
+kriminalistischen
+kriminalistischer
+kriminalistisches
+kriminell
+kriminelle
+kriminellem
+kriminellen
+krimineller
+kriminellere
+kriminellerem
+kriminelleren
+kriminellerer
+kriminelleres
+kriminelles
+kriminellste
+kriminellstem
+kriminellsten
+kriminellster
+kriminellstes
+kriminologisch
+kriminologische
+kriminologischem
+kriminologischen
+kriminologischer
+kriminologisches
+kriseln
+kriselt
+kriselte
+krisenanfällig
+krisenanfällige
+krisenanfälligem
+krisenanfälligen
+krisenanfälliger
+krisenanfälliges
+krisenfest
+krisenfeste
+krisenfestem
+krisenfesten
+krisenfester
+krisenfestes
+krisenhaft
+krisenhafte
+krisenhaftem
+krisenhaften
+krisenhafter
+krisenhaftes
+krisensicher
+krisensichere
+krisensicherem
+krisensicheren
+krisensicherer
+krisensicheres
+krisenunabhängig
+krisenunabhängige
+krisenunabhängigem
+krisenunabhängigen
+krisenunabhängiger
+krisenunabhängiges
+kristallin
+kristalline
+kristallinem
+kristallinen
+kristalliner
+kristallines
+kristallinisch
+kristallinische
+kristallinischem
+kristallinischen
+kristallinischer
+kristallinisches
+kristallisationsfest
+kristallisationsfeste
+kristallisationsfestem
+kristallisationsfesten
+kristallisationsfester
+kristallisationsfestes
+kristallisiere
+kristallisieren
+kristallisierend
+kristallisierende
+kristallisierendem
+kristallisierenden
+kristallisierender
+kristallisierendes
+kristallisierst
+kristallisiert
+kristallisierte
+kristallisiertem
+kristallisierten
+kristallisierter
+kristallisiertes
+kristallisiertest
+kristallisiertet
+kristallklar
+kristallklare
+kristallklarem
+kristallklaren
+kristallklarer
+kristallklares
+kristallrein
+kristallreine
+kristallreinem
+kristallreinen
+kristallreiner
+kristallreines
+kritiklos
+kritiklose
+kritiklosem
+kritiklosen
+kritikloser
+kritikloses
+kritisch
+kritische
+kritischem
+kritischen
+kritischer
+kritischere
+kritischerem
+kritischeren
+kritischerer
+kritischeres
+kritisches
+kritischste
+kritischstem
+kritischsten
+kritischster
+kritischstes
+kritisiere
+kritisieren
+kritisierend
+kritisierende
+kritisierendem
+kritisierenden
+kritisierender
+kritisierendes
+kritisierst
+kritisiert
+kritisierte
+kritisiertem
+kritisierten
+kritisierter
+kritisiertes
+kritisiertest
+kritisiertet
+kritzele
+kritzeln
+kritzelst
+kritzelt
+kritzelte
+kritzelten
+kritzeltest
+kritzeltet
+kritzle
+kroch
+krochen
+krochest
+krochst
+krocht
+kross
+krosse
+krossem
+krossen
+krosser
+krossere
+krosserem
+krosseren
+krosserer
+krosseres
+krosses
+krosseste
+krossestem
+krossesten
+krossester
+krossestes
+krud
+krude
+krudem
+kruden
+kruder
+krudes
+krumm
+krumme
+krummem
+krummen
+krummer
+krummere
+krummerem
+krummeren
+krummerer
+krummeres
+krummes
+krummste
+krummstem
+krummsten
+krummster
+krummstes
+kryptographisch
+kryptographische
+kryptographischem
+kryptographischen
+kryptographischer
+kryptographisches
+krächze
+krächzen
+krächzend
+krächzende
+krächzendem
+krächzenden
+krächzender
+krächzendes
+krächzest
+krächzt
+krächzte
+krächzten
+krächztest
+krächztet
+kräftezehrend
+kräftezehrende
+kräftezehrendem
+kräftezehrenden
+kräftezehrender
+kräftezehrendes
+kräftig
+kräftige
+kräftigem
+kräftigen
+kräftigend
+kräftigende
+kräftigendem
+kräftigenden
+kräftigender
+kräftigendes
+kräftiger
+kräftigere
+kräftigerem
+kräftigeren
+kräftigerer
+kräftigeres
+kräftiges
+kräftigst
+kräftigste
+kräftigstem
+kräftigsten
+kräftigster
+kräftigstes
+kräftigt
+kräftigte
+kräftigten
+kräftigtest
+kräftigtet
+krähe
+krähen
+krähend
+krähende
+krähendem
+krähenden
+krähender
+krähendes
+krähst
+kräht
+krähte
+krähten
+krähtest
+krähtet
+kränkbar
+kränkbare
+kränkbarem
+kränkbaren
+kränkbarer
+kränkbares
+kränke
+kränken
+kränkend
+kränkende
+kränkendem
+kränkenden
+kränkender
+kränkendes
+kränker
+kränkere
+kränkerem
+kränkeren
+kränkerer
+kränkeres
+kränklich
+kränkliche
+kränklichem
+kränklichen
+kränklicher
+kränklichere
+kränklicherem
+kränklicheren
+kränklicherer
+kränklicheres
+kränkliches
+kränklichste
+kränklichstem
+kränklichsten
+kränklichster
+kränklichstes
+kränkst
+kränkste
+kränkstem
+kränksten
+kränkster
+kränkstes
+kränkt
+kränkte
+kränkten
+kränktest
+kränktet
+kröne
+krönen
+krönend
+krönende
+krönendem
+krönenden
+krönender
+krönendes
+krönst
+krönt
+krönte
+krönten
+kröntest
+kröntet
+krümele
+krümeln
+krümelnd
+krümelnde
+krümelndem
+krümelnden
+krümelnder
+krümelndes
+krümelst
+krümelt
+krümelte
+krümelten
+krümeltest
+krümeltet
+krümle
+krümme
+krümmen
+krümmend
+krümmende
+krümmendem
+krümmenden
+krümmender
+krümmendes
+krümmst
+krümmt
+krümmte
+krümmten
+krümmtest
+krümmtet
+krüppelhaft
+krüppelhafte
+krüppelhaftem
+krüppelhaften
+krüppelhafter
+krüppelhaftes
+kt
+kubanisch
+kubanische
+kubanischem
+kubanischen
+kubanischer
+kubanisches
+kubisch
+kubische
+kubischem
+kubischen
+kubischer
+kubisches
+kubistisch
+kubistische
+kubistischem
+kubistischen
+kubistischer
+kubistisches
+kugele
+kugelförmig
+kugelförmige
+kugelförmigem
+kugelförmigen
+kugelförmiger
+kugelförmiges
+kugelig
+kugelige
+kugeligem
+kugeligen
+kugeliger
+kugeliges
+kugeln
+kugelnd
+kugelnde
+kugelndem
+kugelnden
+kugelnder
+kugelndes
+kugelst
+kugelt
+kugelte
+kugelten
+kugeltest
+kugeltet
+kugle
+kuglig
+kuglige
+kugligem
+kugligen
+kugliger
+kugliges
+kulant
+kulante
+kulantem
+kulanten
+kulanter
+kulantes
+kulanzweise
+kulinarisch
+kulinarische
+kulinarischem
+kulinarischen
+kulinarischer
+kulinarisches
+kullere
+kullern
+kullerst
+kullert
+kullerte
+kullerten
+kullertest
+kullertet
+kullre
+kultisch
+kultische
+kultischem
+kultischen
+kultischer
+kultisches
+kultivierbar
+kultivierbare
+kultivierbarem
+kultivierbaren
+kultivierbarer
+kultivierbares
+kultiviere
+kultivieren
+kultivierend
+kultivierende
+kultivierendem
+kultivierenden
+kultivierender
+kultivierendes
+kultivierst
+kultiviert
+kultivierte
+kultiviertem
+kultivierten
+kultivierter
+kultiviertes
+kultiviertest
+kultiviertet
+kulturell
+kulturelle
+kulturellem
+kulturellen
+kultureller
+kulturellere
+kulturellerem
+kulturelleren
+kulturellerer
+kulturelleres
+kulturelles
+kulturellste
+kulturellstem
+kulturellsten
+kulturellster
+kulturellstes
+kummervoll
+kummervolle
+kummervollem
+kummervollen
+kummervoller
+kummervollere
+kummervollerem
+kummervolleren
+kummervollerer
+kummervolleres
+kummervolles
+kummervollste
+kummervollstem
+kummervollsten
+kummervollster
+kummervollstes
+kumulativ
+kumulative
+kumulativem
+kumulativen
+kumulativer
+kumulatives
+kumuliert
+kumulierte
+kumuliertem
+kumulierten
+kumulierter
+kumuliertes
+kund
+kundenfreundlich
+kundenfreundliche
+kundenfreundlichem
+kundenfreundlichen
+kundenfreundlicher
+kundenfreundliches
+kundenseitig
+kundenseitige
+kundenseitigem
+kundenseitigen
+kundenseitiger
+kundenseitiges
+kundenspezifisch
+kundenspezifische
+kundenspezifischem
+kundenspezifischen
+kundenspezifischer
+kundenspezifisches
+kundgetan
+kundig
+kundige
+kundigem
+kundigen
+kundiger
+kundiges
+kundtat
+kundtaten
+kundtatest
+kundtatet
+kundtatst
+kundtue
+kundtun
+kundtust
+kundtut
+kunstbewusst
+kunstbewusste
+kunstbewusstem
+kunstbewussten
+kunstbewusster
+kunstbewusstes
+kunstlos
+kunstlose
+kunstlosem
+kunstlosen
+kunstloser
+kunstloses
+kunstvoll
+kunstvolle
+kunstvollem
+kunstvollen
+kunstvoller
+kunstvollere
+kunstvollerem
+kunstvolleren
+kunstvollerer
+kunstvolleres
+kunstvolles
+kunstvollste
+kunstvollstem
+kunstvollsten
+kunstvollster
+kunstvollstes
+kunterbunt
+kunterbunte
+kunterbuntem
+kunterbunten
+kunterbunter
+kunterbuntes
+kupfern
+kupferne
+kupfernem
+kupfernen
+kupferner
+kupfernes
+kuppele
+kuppeln
+kuppelnd
+kuppelnde
+kuppelndem
+kuppelnden
+kuppelnder
+kuppelndes
+kuppelst
+kuppelt
+kuppelte
+kuppelten
+kuppeltest
+kuppeltet
+kupple
+kurbele
+kurbeln
+kurbelnd
+kurbelnde
+kurbelndem
+kurbelnden
+kurbelnder
+kurbelndes
+kurbelst
+kurbelt
+kurbelte
+kurbelten
+kurbeltest
+kurbeltet
+kurble
+kurdisch
+kurdische
+kurdischem
+kurdischen
+kurdischer
+kurdisches
+kure
+kuren
+kurend
+kurende
+kurendem
+kurenden
+kurender
+kurendes
+kurierbar
+kurierbare
+kurierbarem
+kurierbaren
+kurierbarer
+kurierbares
+kuriere
+kurieren
+kurierend
+kurierende
+kurierendem
+kurierenden
+kurierender
+kurierendes
+kurierst
+kuriert
+kurierte
+kuriertem
+kurierten
+kurierter
+kuriertes
+kuriertest
+kuriertet
+kurios
+kuriose
+kuriosem
+kuriosen
+kurioser
+kurioserweise
+kurioses
+kursiere
+kursieren
+kursierend
+kursierende
+kursierendem
+kursierenden
+kursierender
+kursierendes
+kursierst
+kursiert
+kursierte
+kursierten
+kursiertest
+kursiertet
+kursiv
+kursive
+kursivem
+kursiven
+kursiver
+kursives
+kurst
+kurt
+kurte
+kurten
+kurtest
+kurtet
+kurve
+kurven
+kurvend
+kurvende
+kurvendem
+kurvenden
+kurvender
+kurvendes
+kurvst
+kurvt
+kurvte
+kurvten
+kurvtest
+kurvtet
+kurz
+kurzatmig
+kurzatmige
+kurzatmigem
+kurzatmigen
+kurzatmiger
+kurzatmiges
+kurzbeinig
+kurzbeinige
+kurzbeinigem
+kurzbeinigen
+kurzbeiniger
+kurzbeiniges
+kurze
+kurzem
+kurzen
+kurzentschlossen
+kurzentschlossene
+kurzentschlossenem
+kurzentschlossenen
+kurzentschlossener
+kurzentschlossenes
+kurzer
+kurzerhand
+kurzes
+kurzfristig
+kurzfristige
+kurzfristigem
+kurzfristigen
+kurzfristiger
+kurzfristiges
+kurzgeschlossen
+kurzgeschlossene
+kurzgeschlossenem
+kurzgeschlossenen
+kurzgeschlossener
+kurzgeschlossenes
+kurzhaarig
+kurzhaarige
+kurzhaarigem
+kurzhaarigen
+kurzhaariger
+kurzhaariges
+kurzlebig
+kurzlebige
+kurzlebigem
+kurzlebigen
+kurzlebiger
+kurzlebiges
+kurzschließe
+kurzschließen
+kurzschließend
+kurzschließende
+kurzschließendem
+kurzschließenden
+kurzschließender
+kurzschließendes
+kurzschließest
+kurzschließt
+kurzschlussfest
+kurzschlussfeste
+kurzschlussfestem
+kurzschlussfesten
+kurzschlussfester
+kurzschlussfestes
+kurzsichtig
+kurzsichtige
+kurzsichtigem
+kurzsichtigen
+kurzsichtiger
+kurzsichtiges
+kurzum
+kurzweilig
+kurzweilige
+kurzweiligem
+kurzweiligen
+kurzweiliger
+kurzweiliges
+kurzzeitig
+kurzzeitige
+kurzzeitigem
+kurzzeitigen
+kurzzeitiger
+kurzzeitiges
+kusche
+kuschen
+kuschend
+kuschende
+kuschendem
+kuschenden
+kuschender
+kuschendes
+kuschest
+kuschst
+kuscht
+kuschte
+kuschten
+kuschtest
+kuschtet
+kussecht
+kussechte
+kussechtem
+kussechten
+kussechter
+kussechtes
+kybernetisch
+kybernetische
+kybernetischem
+kybernetischen
+kybernetischer
+kybernetisches
+kälter
+kältere
+kälterem
+kälteren
+kälterer
+kälteres
+kälteste
+kältestem
+kältesten
+kältester
+kältestes
+käme
+kämen
+kämme
+kämmen
+kämmend
+kämmende
+kämmendem
+kämmenden
+kämmender
+kämmendes
+kämmst
+kämmt
+kämmte
+kämmten
+kämmtest
+kämmtet
+kämpfe
+kämpfen
+kämpfend
+kämpfende
+kämpfendem
+kämpfenden
+kämpfender
+kämpfendes
+kämpferisch
+kämpferische
+kämpferischem
+kämpferischen
+kämpferischer
+kämpferischere
+kämpferischerem
+kämpferischeren
+kämpferischerer
+kämpferischeres
+kämpferisches
+kämpferischste
+kämpferischstem
+kämpferischsten
+kämpferischster
+kämpferischstes
+kämpfst
+kämpft
+kämpfte
+kämpften
+kämpftest
+kämpftet
+kämst
+kämt
+kärglich
+kärgliche
+kärglichem
+kärglichen
+kärglicher
+kärglichere
+kärglicherem
+kärglicheren
+kärglicherer
+kärglicheres
+kärgliches
+kärglichste
+kärglichstem
+kärglichsten
+kärglichster
+kärglichstes
+käufqqlich
+käufqqliche
+käufqqlichem
+käufqqlichen
+käufqqlicher
+käufqqliches
+königlich
+königliche
+königlichem
+königlichen
+königlicher
+königliches
+könne
+können
+könnt
+könnte
+könnten
+könntest
+könntet
+köpfe
+köpfen
+köpfend
+köpfende
+köpfendem
+köpfenden
+köpfender
+köpfendes
+köpfst
+köpft
+köpfte
+köpften
+köpftest
+köpftet
+körnig
+körnige
+körnigem
+körnigen
+körniger
+körnigere
+körnigerem
+körnigeren
+körnigerer
+körnigeres
+körniges
+körnigste
+körnigstem
+körnigsten
+körnigster
+körnigstes
+körperbehindert
+körperbehinderte
+körperbehindertem
+körperbehinderten
+körperbehinderter
+körperbehindertes
+körperlich
+körperliche
+körperlichem
+körperlichen
+körperlicher
+körperliches
+köstlich
+köstliche
+köstlichem
+köstlichen
+köstlicher
+köstlichere
+köstlicherem
+köstlicheren
+köstlicherer
+köstlicheres
+köstliches
+köstlichste
+köstlichstem
+köstlichsten
+köstlichster
+köstlichstes
+kühl
+kühle
+kühlem
+kühlen
+kühlend
+kühlende
+kühlendem
+kühlenden
+kühlender
+kühlendes
+kühler
+kühlere
+kühlerem
+kühleren
+kühlerer
+kühleres
+kühles
+kühlst
+kühlste
+kühlstem
+kühlsten
+kühlster
+kühlstes
+kühlt
+kühlte
+kühlten
+kühltest
+kühltet
+kühn
+kühne
+kühnem
+kühnen
+kühner
+kühnere
+kühnerem
+kühneren
+kühnerer
+kühneres
+kühnes
+kühnste
+kühnstem
+kühnsten
+kühnster
+kühnstes
+kümmere
+kümmerlich
+kümmerliche
+kümmerlichem
+kümmerlichen
+kümmerlicher
+kümmerliches
+kümmern
+kümmernd
+kümmernde
+kümmerndem
+kümmernden
+kümmernder
+kümmerndes
+kümmerst
+kümmert
+kümmerte
+kümmerten
+kümmertest
+kümmertet
+kümmre
+kündbar
+kündbare
+kündbarem
+kündbaren
+kündbarer
+kündbares
+künde
+künden
+kündend
+kündende
+kündendem
+kündenden
+kündender
+kündendes
+kündest
+kündet
+kündete
+kündeten
+kündetest
+kündetet
+kündige
+kündigen
+kündigend
+kündigende
+kündigendem
+kündigenden
+kündigender
+kündigendes
+kündigst
+kündigt
+kündigte
+kündigten
+kündigtest
+kündigtet
+künftig
+künftige
+künftigem
+künftigen
+künftiger
+künftiges
+künstlerisch
+künstlerische
+künstlerischem
+künstlerischen
+künstlerischer
+künstlerisches
+künstlich
+künstliche
+künstlichem
+künstlichen
+künstlicher
+künstlichere
+künstlicherem
+künstlicheren
+künstlicherer
+künstlicheres
+künstliches
+künstlichste
+künstlichstem
+künstlichsten
+künstlichster
+künstlichstes
+küre
+küren
+kürend
+kürende
+kürendem
+kürenden
+kürender
+kürendes
+kürst
+kürt
+kürte
+kürten
+kürtest
+kürtet
+kürze
+kürzen
+kürzend
+kürzende
+kürzendem
+kürzenden
+kürzender
+kürzendes
+kürzer
+kürzere
+kürzerem
+kürzeren
+kürzerer
+kürzeres
+kürzest
+kürzeste
+kürzestem
+kürzesten
+kürzester
+kürzestes
+kürzlich
+kürzliche
+kürzlichem
+kürzlichen
+kürzlicher
+kürzliches
+kürzt
+kürzte
+kürzten
+kürztest
+kürztet
+küss
+küsse
+küssen
+küssend
+küssende
+küssendem
+küssenden
+küssender
+küssendes
+küssest
+küsst
+küsste
+küssten
+küsstest
+küsstet
+labe
+laben
+labend
+labende
+labendem
+labenden
+labender
+labendes
+labil
+labile
+labilem
+labilen
+labiler
+labilere
+labilerem
+labileren
+labilerer
+labileres
+labiles
+labilste
+labilstem
+labilsten
+labilster
+labilstes
+laboriere
+laborieren
+laborierend
+laborierende
+laborierendem
+laborierenden
+laborierender
+laborierendes
+laborierst
+laboriert
+laborierte
+laborierten
+laboriertest
+laboriertet
+labormäßig
+labormäßige
+labormäßigem
+labormäßigen
+labormäßiger
+labormäßiges
+labst
+labt
+labte
+labten
+labtest
+labtet
+lach
+lache
+lachen
+lachend
+lachende
+lachendem
+lachenden
+lachender
+lachendes
+lachst
+lacht
+lachte
+lachten
+lachtest
+lachtet
+lackiere
+lackieren
+lackierend
+lackierende
+lackierendem
+lackierenden
+lackierender
+lackierendes
+lackierst
+lackiert
+lackierte
+lackiertem
+lackierten
+lackierter
+lackiertes
+lackiertest
+lackiertet
+ladbar
+ladbare
+ladbarem
+ladbaren
+ladbarer
+ladbares
+lade
+ladefähig
+ladefähige
+ladefähigem
+ladefähigen
+ladefähiger
+ladefähiges
+laden
+ladend
+ladende
+ladendem
+ladenden
+ladender
+ladendes
+ladet
+lag
+lagebedingt
+lagebedingte
+lagebedingtem
+lagebedingten
+lagebedingter
+lagebedingtes
+lagen
+lagenmäßig
+lagenmäßige
+lagenmäßigem
+lagenmäßigen
+lagenmäßiger
+lagenmäßiges
+lagerbar
+lagerbare
+lagerbarem
+lagerbaren
+lagerbarer
+lagerbares
+lagere
+lagerichtig
+lagerichtige
+lagerichtigem
+lagerichtigen
+lagerichtiger
+lagerichtiges
+lagern
+lagernd
+lagernde
+lagerndem
+lagernden
+lagernder
+lagerndes
+lagerst
+lagert
+lagerte
+lagerten
+lagertest
+lagertet
+lagre
+lagst
+lagt
+lahm
+lahme
+lahmem
+lahmen
+lahmend
+lahmende
+lahmendem
+lahmenden
+lahmender
+lahmendes
+lahmer
+lahmere
+lahmerem
+lahmeren
+lahmerer
+lahmeres
+lahmes
+lahmlege
+lahmlegen
+lahmlegend
+lahmlegende
+lahmlegendem
+lahmlegenden
+lahmlegender
+lahmlegendes
+lahmlegst
+lahmlegt
+lahmlegte
+lahmlegten
+lahmlegtest
+lahmlegtet
+lahmst
+lahmste
+lahmstem
+lahmsten
+lahmster
+lahmstes
+lahmt
+lahmte
+lahmten
+lahmtest
+lahmtet
+lahmzulegen
+lahmzulegend
+lahmzulegende
+lahmzulegendem
+lahmzulegenden
+lahmzulegender
+lahmzulegendes
+laiche
+laichen
+laichend
+laichende
+laichendem
+laichenden
+laichender
+laichendes
+laichst
+laicht
+laichte
+laichten
+laichtest
+laichtet
+laienhaft
+laienhafte
+laienhaftem
+laienhaften
+laienhafter
+laienhaftere
+laienhafterem
+laienhafteren
+laienhafterer
+laienhafteres
+laienhafterweise
+laienhaftes
+laienhafteste
+laienhaftestem
+laienhaftesten
+laienhaftester
+laienhaftestes
+laienmäßig
+laienmäßige
+laienmäßigem
+laienmäßigen
+laienmäßiger
+laienmäßiges
+laizistisch
+laizistische
+laizistischem
+laizistischen
+laizistischer
+laizistisches
+lakonisch
+lakonische
+lakonischem
+lakonischen
+lakonischer
+lakonisches
+lalle
+lallen
+lallend
+lallende
+lallendem
+lallenden
+lallender
+lallendes
+lallst
+lallt
+lallte
+lallten
+lalltest
+lalltet
+lambda
+lamentiere
+lamentieren
+lamentierend
+lamentierende
+lamentierendem
+lamentierenden
+lamentierender
+lamentierendes
+lamentierst
+lamentiert
+lamentierte
+lamentierten
+lamentiertest
+lamentiertet
+lammfromm
+lammfromme
+lammfrommem
+lammfrommen
+lammfrommer
+lammfrommes
+lanciere
+lancieren
+lancierend
+lancierende
+lancierendem
+lancierenden
+lancierender
+lancierendes
+lancierst
+lanciert
+lancierte
+lanciertem
+lancierten
+lancierter
+lanciertes
+lanciertest
+lanciertet
+landab
+lande
+landeinwärts
+landen
+landend
+landende
+landendem
+landenden
+landender
+landendes
+landest
+landesweit
+landesweite
+landesweitem
+landesweiten
+landesweiter
+landesweites
+landet
+landete
+landeten
+landetest
+landetet
+landläufig
+landläufige
+landläufigem
+landläufigen
+landläufiger
+landläufiges
+landschaftlich
+landschaftliche
+landschaftlichem
+landschaftlichen
+landschaftlicher
+landschaftliches
+landwirtschaftlich
+landwirtschaftliche
+landwirtschaftlichem
+landwirtschaftlichen
+landwirtschaftlicher
+landwirtschaftliches
+lang
+langarmig
+langarmige
+langarmigem
+langarmigen
+langarmiger
+langarmiges
+langatmig
+langatmige
+langatmigem
+langatmigen
+langatmiger
+langatmiges
+langbeinig
+langbeinige
+langbeinigem
+langbeinigen
+langbeiniger
+langbeiniges
+lange
+langem
+langen
+langend
+langende
+langendem
+langenden
+langender
+langendes
+langer
+langes
+langfristig
+langfristige
+langfristigem
+langfristigen
+langfristiger
+langfristiges
+langhaarig
+langhaarige
+langhaarigem
+langhaarigen
+langhaariger
+langhaariges
+langhalsig
+langhalsige
+langhalsigem
+langhalsigen
+langhalsiger
+langhalsiges
+langjährig
+langjährige
+langjährigem
+langjährigen
+langjähriger
+langjähriges
+langlaufe
+langlaufen
+langlaufend
+langlaufende
+langlaufendem
+langlaufenden
+langlaufender
+langlaufendes
+langlauft
+langlebig
+langlebige
+langlebigem
+langlebigen
+langlebiger
+langlebiges
+langmütig
+langmütige
+langmütigem
+langmütigen
+langmütiger
+langmütiges
+langsam
+langsame
+langsamem
+langsamen
+langsamer
+langsamere
+langsamerem
+langsameren
+langsamerer
+langsameres
+langsames
+langsamste
+langsamstem
+langsamsten
+langsamster
+langsamstes
+langst
+langt
+langte
+langten
+langtest
+langtet
+langweile
+langweilen
+langweilend
+langweilende
+langweilendem
+langweilenden
+langweilender
+langweilendes
+langweilig
+langweilige
+langweiligem
+langweiligen
+langweiliger
+langweiligere
+langweiligerem
+langweiligeren
+langweiligerer
+langweiligeres
+langweiliges
+langweiligste
+langweiligstem
+langweiligsten
+langweiligster
+langweiligstes
+langweilst
+langweilt
+langweilte
+langweilten
+langweiltest
+langweiltet
+langwierig
+langwierige
+langwierigem
+langwierigen
+langwieriger
+langwieriges
+langwährend
+langwährende
+langwährendem
+langwährenden
+langwährender
+langwährendes
+laotisch
+laotische
+laotischem
+laotischen
+laotischer
+laotisches
+lapidar
+lapidare
+lapidarem
+lapidaren
+lapidarer
+lapidares
+las
+lasen
+lasergedruckt
+lasergedruckte
+lasergedrucktem
+lasergedruckten
+lasergedruckter
+lasergedrucktes
+lasest
+lass
+lasse
+lassen
+lassend
+lassende
+lassendem
+lassenden
+lassender
+lassendes
+lasst
+last
+laste
+lasten
+lastend
+lastende
+lastendem
+lastenden
+lastender
+lastendes
+lastenfrei
+lasterhaft
+lasterhafte
+lasterhaftem
+lasterhaften
+lasterhafter
+lasterhaftere
+lasterhafterem
+lasterhafteren
+lasterhafterer
+lasterhafteres
+lasterhaftes
+lasterhafteste
+lasterhaftestem
+lasterhaftesten
+lasterhaftester
+lasterhaftestes
+lastest
+lastet
+lastete
+lasteten
+lastetest
+lastetet
+lastfrei
+lastfreie
+lastfreiem
+lastfreien
+lastfreier
+lastfreies
+lasziv
+laszive
+laszivem
+lasziven
+lasziver
+laszives
+lateinamerikanisch
+lateinamerikanische
+lateinamerikanischem
+lateinamerikanischen
+lateinamerikanischer
+lateinamerikanisches
+lateinisch
+lateinische
+lateinischem
+lateinischen
+lateinischer
+lateinisches
+latent
+latente
+latentem
+latenten
+latenter
+latentes
+lateral
+laterale
+lateralem
+lateralen
+lateraler
+laterales
+latsche
+latschen
+latschend
+latschende
+latschendem
+latschenden
+latschender
+latschendes
+latschest
+latschst
+latscht
+latschte
+latschten
+latschtest
+latschtet
+lau
+laude
+laue
+lauem
+lauen
+lauer
+lauere
+lauerem
+laueren
+lauerer
+laueres
+lauern
+lauernd
+lauernde
+lauerndem
+lauernden
+lauernder
+lauerndes
+lauerst
+lauert
+lauerte
+lauerten
+lauertest
+lauertet
+laues
+laueste
+lauestem
+lauesten
+lauester
+lauestes
+laufe
+laufen
+laufend
+laufende
+laufendem
+laufenden
+laufender
+laufendes
+laufqqfähig
+laufqqfähige
+laufqqfähigem
+laufqqfähigen
+laufqqfähiger
+laufqqfähiges
+lauft
+lauge
+laugen
+laugend
+laugende
+laugendem
+laugenden
+laugender
+laugendes
+laugst
+laugt
+laugte
+laugten
+laugtest
+laugtet
+launenhaft
+launenhafte
+launenhaftem
+launenhaften
+launenhafter
+launenhaftere
+launenhafterem
+launenhafteren
+launenhafterer
+launenhafteres
+launenhaftes
+launenhafteste
+launenhaftestem
+launenhaftesten
+launenhaftester
+launenhaftestes
+launig
+launige
+launigem
+launigen
+launiger
+launiges
+launisch
+launische
+launischem
+launischen
+launischer
+launischere
+launischerem
+launischeren
+launischerer
+launischeres
+launisches
+launischste
+launischstem
+launischsten
+launischster
+launischstes
+laure
+lausche
+lauschen
+lauschend
+lauschende
+lauschendem
+lauschenden
+lauschender
+lauschendes
+lauschest
+lauschst
+lauscht
+lauschte
+lauschten
+lauschtest
+lauschtet
+lause
+lausen
+lausend
+lausende
+lausendem
+lausenden
+lausender
+lausendes
+lausest
+lausig
+lausige
+lausigem
+lausigen
+lausiger
+lausiges
+laust
+lauste
+laustem
+lausten
+lauster
+laustes
+laustest
+laustet
+laut
+laute
+lautem
+lauten
+lautend
+lautende
+lautendem
+lautenden
+lautender
+lautendes
+lauter
+lautere
+lauterem
+lauteren
+lauterer
+lauteres
+lautes
+lautest
+lauteste
+lautestem
+lautesten
+lautester
+lautestes
+lautet
+lautete
+lauteten
+lautetest
+lautetet
+lautlich
+lautliche
+lautlichem
+lautlichen
+lautlicher
+lautliches
+lautlos
+lautlose
+lautlosem
+lautlosen
+lautloser
+lautlosere
+lautloserem
+lautloseren
+lautloserer
+lautloseres
+lautloses
+lautloseste
+lautlosestem
+lautlosesten
+lautlosester
+lautlosestes
+lautstark
+lautstarke
+lautstarkem
+lautstarken
+lautstarker
+lautstarkes
+lauwarm
+lauwarme
+lauwarmem
+lauwarmen
+lauwarmer
+lauwarmes
+lawinenartig
+lawinenartige
+lawinenartigem
+lawinenartigen
+lawinenartiger
+lawinenartiges
+lax
+laxe
+laxem
+laxen
+laxer
+laxere
+laxerem
+laxeren
+laxerer
+laxeres
+laxes
+laxeste
+laxestem
+laxesten
+laxester
+laxestes
+lease
+leasen
+leasend
+leasende
+leasendem
+leasenden
+leasender
+leasendes
+leasest
+least
+leaste
+leasten
+leastest
+leastet
+lebe
+leben
+lebend
+lebende
+lebendem
+lebenden
+lebender
+lebendes
+lebendig
+lebendige
+lebendigem
+lebendigen
+lebendiger
+lebendigere
+lebendigerem
+lebendigeren
+lebendigerer
+lebendigeres
+lebendiges
+lebendigste
+lebendigstem
+lebendigsten
+lebendigster
+lebendigstes
+lebensfreundlich
+lebensfreundliche
+lebensfreundlichem
+lebensfreundlichen
+lebensfreundlicher
+lebensfreundliches
+lebensfroh
+lebensfrohe
+lebensfrohem
+lebensfrohen
+lebensfroher
+lebensfrohes
+lebensfähig
+lebensfähige
+lebensfähigem
+lebensfähigen
+lebensfähiger
+lebensfähiges
+lebensgefährlich
+lebensgefährliche
+lebensgefährlichem
+lebensgefährlichen
+lebensgefährlicher
+lebensgefährliches
+lebensgewandt
+lebensgewandte
+lebensgewandtem
+lebensgewandten
+lebensgewandter
+lebensgewandtes
+lebensklug
+lebenskluge
+lebensklugem
+lebensklugen
+lebenskluger
+lebenskluges
+lebenslang
+lebenslange
+lebenslangem
+lebenslangen
+lebenslanger
+lebenslanges
+lebenslustig
+lebenslustige
+lebenslustigem
+lebenslustigen
+lebenslustiger
+lebenslustiges
+lebenslänglich
+lebenslängliche
+lebenslänglichem
+lebenslänglichen
+lebenslänglicher
+lebenslängliches
+lebensmüde
+lebensmüdem
+lebensmüden
+lebensmüder
+lebensmüdes
+lebensnah
+lebensnahe
+lebensnahem
+lebensnahen
+lebensnaher
+lebensnahes
+lebensnotwendig
+lebensnotwendige
+lebensnotwendigem
+lebensnotwendigen
+lebensnotwendiger
+lebensnotwendiges
+lebensunfähig
+lebensunfähige
+lebensunfähigem
+lebensunfähigen
+lebensunfähiger
+lebensunfähiges
+lebensuntüchtig
+lebensuntüchtige
+lebensuntüchtigem
+lebensuntüchtigen
+lebensuntüchtiger
+lebensuntüchtiges
+lebensvoll
+lebensvolle
+lebensvollem
+lebensvollen
+lebensvoller
+lebensvolles
+lebenswert
+lebenswerte
+lebenswertem
+lebenswerten
+lebenswerter
+lebenswertere
+lebenswerterem
+lebenswerteren
+lebenswerterer
+lebenswerteres
+lebenswertes
+lebenswerteste
+lebenswertestem
+lebenswertesten
+lebenswertester
+lebenswertestes
+lebenswichtig
+lebenswichtige
+lebenswichtigem
+lebenswichtigen
+lebenswichtiger
+lebenswichtigere
+lebenswichtigerem
+lebenswichtigeren
+lebenswichtigerer
+lebenswichtigeres
+lebenswichtiges
+lebenswichtigste
+lebenswichtigstem
+lebenswichtigsten
+lebenswichtigster
+lebenswichtigstes
+lebhaft
+lebhafte
+lebhaftem
+lebhaften
+lebhafter
+lebhaftere
+lebhafterem
+lebhafteren
+lebhafterer
+lebhafteres
+lebhaftes
+lebhafteste
+lebhaftestem
+lebhaftesten
+lebhaftester
+lebhaftestes
+leblos
+leblose
+leblosem
+leblosen
+lebloser
+lebloses
+lebst
+lebt
+lebte
+lebten
+lebtest
+lebtet
+lechze
+lechzen
+lechzend
+lechzende
+lechzendem
+lechzenden
+lechzender
+lechzendes
+lechzest
+lechzt
+lechzte
+lechzten
+lechztest
+lechztet
+lecke
+lecken
+leckend
+leckende
+leckendem
+leckenden
+leckender
+leckendes
+lecker
+leckere
+leckerem
+leckeren
+leckerer
+leckeres
+leckst
+leckt
+leckte
+leckten
+lecktest
+lecktet
+ledern
+lederne
+ledernem
+ledernen
+lederner
+ledernes
+ledig
+ledige
+ledigem
+ledigen
+lediger
+lediges
+lediglich
+leer
+leere
+leerem
+leeren
+leerend
+leerende
+leerendem
+leerenden
+leerender
+leerendes
+leerer
+leerere
+leererem
+leereren
+leererer
+leereres
+leeres
+leerst
+leerste
+leerstem
+leersten
+leerster
+leerstes
+leert
+leerte
+leerten
+leertest
+leertet
+legal
+legale
+legalem
+legalen
+legaler
+legalere
+legalerem
+legaleren
+legalerer
+legaleres
+legales
+legalisiere
+legalisieren
+legalisierend
+legalisierende
+legalisierendem
+legalisierenden
+legalisierender
+legalisierendes
+legalisierst
+legalisiert
+legalisierte
+legalisiertem
+legalisierten
+legalisierter
+legalisiertes
+legalisiertest
+legalisiertet
+legalste
+legalstem
+legalsten
+legalster
+legalstes
+lege
+legen
+legend
+legende
+legendem
+legenden
+legender
+legendes
+legendär
+legendäre
+legendärem
+legendären
+legendärer
+legendäres
+leger
+legere
+legerem
+legeren
+legerer
+legeres
+legiert
+legierte
+legiertem
+legierten
+legierter
+legiertes
+legislativ
+legislative
+legislativem
+legislativen
+legislativer
+legislatives
+legitim
+legitime
+legitimem
+legitimen
+legitimer
+legitimerweise
+legitimes
+legitimier
+legitimiere
+legitimieren
+legitimierend
+legitimierende
+legitimierendem
+legitimierenden
+legitimierender
+legitimierendes
+legitimierst
+legitimiert
+legitimierte
+legitimiertem
+legitimierten
+legitimierter
+legitimiertes
+legitimiertest
+legitimiertet
+legst
+legt
+legte
+legten
+legtest
+legtet
+lehmig
+lehmige
+lehmigem
+lehmigen
+lehmiger
+lehmiges
+lehne
+lehnen
+lehnend
+lehnende
+lehnendem
+lehnenden
+lehnender
+lehnendes
+lehnst
+lehnt
+lehnte
+lehnten
+lehntest
+lehntet
+lehre
+lehren
+lehrend
+lehrende
+lehrendem
+lehrenden
+lehrender
+lehrendes
+lehrreich
+lehrreiche
+lehrreichem
+lehrreichen
+lehrreicher
+lehrreichere
+lehrreicherem
+lehrreicheren
+lehrreicherer
+lehrreicheres
+lehrreiches
+lehrreichste
+lehrreichstem
+lehrreichsten
+lehrreichster
+lehrreichstes
+lehrst
+lehrt
+lehrte
+lehrten
+lehrtest
+lehrtet
+leibeigen
+leibeigene
+leibeigenem
+leibeigenen
+leibeigener
+leibeigenes
+leibhaftig
+leibhaftige
+leibhaftigem
+leibhaftigen
+leibhaftiger
+leibhaftiges
+leiblich
+leibliche
+leiblichem
+leiblichen
+leiblicher
+leibliches
+leibt
+leichenblass
+leichenblasse
+leichenblassem
+leichenblassen
+leichenblasser
+leichenblasses
+leicht
+leichte
+leichtem
+leichten
+leichter
+leichtere
+leichterem
+leichteren
+leichterer
+leichteres
+leichtes
+leichteste
+leichtestem
+leichtesten
+leichtester
+leichtestes
+leichtfertig
+leichtfertige
+leichtfertigem
+leichtfertigen
+leichtfertiger
+leichtfertigere
+leichtfertigerem
+leichtfertigeren
+leichtfertigerer
+leichtfertigeres
+leichtfertiges
+leichtfertigste
+leichtfertigstem
+leichtfertigsten
+leichtfertigster
+leichtfertigstes
+leichtfüßig
+leichtfüßige
+leichtfüßigem
+leichtfüßigen
+leichtfüßiger
+leichtfüßiges
+leichtgläubig
+leichtgläubige
+leichtgläubigem
+leichtgläubigen
+leichtgläubiger
+leichtgläubigere
+leichtgläubigerem
+leichtgläubigeren
+leichtgläubigerer
+leichtgläubigeres
+leichtgläubiges
+leichtgläubigste
+leichtgläubigstem
+leichtgläubigsten
+leichtgläubigster
+leichtgläubigstes
+leichtgängig
+leichtgängige
+leichtgängigem
+leichtgängigen
+leichtgängiger
+leichtgängiges
+leichthändig
+leichthändige
+leichthändigem
+leichthändigen
+leichthändiger
+leichthändiges
+leichtlebig
+leichtlebige
+leichtlebigem
+leichtlebigen
+leichtlebiger
+leichtlebiges
+leichtsinnig
+leichtsinnige
+leichtsinnigem
+leichtsinnigen
+leichtsinniger
+leichtsinnigere
+leichtsinnigerem
+leichtsinnigeren
+leichtsinnigerer
+leichtsinnigeres
+leichtsinniges
+leichtsinnigste
+leichtsinnigstem
+leichtsinnigsten
+leichtsinnigster
+leichtsinnigstes
+leide
+leiden
+leidend
+leidende
+leidendem
+leidenden
+leidender
+leidendes
+leidenschaftlich
+leidenschaftliche
+leidenschaftlichem
+leidenschaftlichen
+leidenschaftlicher
+leidenschaftlichere
+leidenschaftlicherem
+leidenschaftlicheren
+leidenschaftlicherer
+leidenschaftlicheres
+leidenschaftliches
+leidenschaftlichste
+leidenschaftlichstem
+leidenschaftlichsten
+leidenschaftlichster
+leidenschaftlichstes
+leider
+leidest
+leidet
+leidgeprüft
+leidgeprüfte
+leidgeprüftem
+leidgeprüften
+leidgeprüfter
+leidgeprüftes
+leidige
+leidigem
+leidigen
+leidiger
+leidiges
+leidlich
+leidliche
+leidlichem
+leidlichen
+leidlicher
+leidliches
+leidvoll
+leidvolle
+leidvollem
+leidvollen
+leidvoller
+leidvolles
+leihe
+leihen
+leihend
+leihende
+leihendem
+leihenden
+leihender
+leihendes
+leihst
+leiht
+leihweise
+leime
+leimen
+leimend
+leimende
+leimendem
+leimenden
+leimender
+leimendes
+leimst
+leimt
+leimte
+leimten
+leimtest
+leimtet
+leis
+leise
+leisem
+leisen
+leiser
+leisere
+leiserem
+leiseren
+leiserer
+leiseres
+leises
+leiseste
+leisestem
+leisesten
+leisester
+leisestes
+leiste
+leisten
+leistend
+leistende
+leistendem
+leistenden
+leistender
+leistendes
+leistest
+leistet
+leistete
+leisteten
+leistetest
+leistetet
+leistungsbezogen
+leistungsbezogene
+leistungsbezogenem
+leistungsbezogenen
+leistungsbezogener
+leistungsbezogenes
+leistungsfähig
+leistungsfähige
+leistungsfähigem
+leistungsfähigen
+leistungsfähiger
+leistungsfähigere
+leistungsfähigerem
+leistungsfähigeren
+leistungsfähigerer
+leistungsfähigeres
+leistungsfähiges
+leistungsfähigste
+leistungsfähigstem
+leistungsfähigsten
+leistungsfähigster
+leistungsfähigstes
+leistungsorientiert
+leistungsorientierte
+leistungsorientiertem
+leistungsorientierten
+leistungsorientierter
+leistungsorientiertes
+leistungsstark
+leistungsstarke
+leistungsstarkem
+leistungsstarken
+leistungsstarker
+leistungsstarkes
+leistungssteigernd
+leistungssteigernde
+leistungssteigerndem
+leistungssteigernden
+leistungssteigernder
+leistungssteigerndes
+leistungsstärkste
+leistungsstärkstem
+leistungsstärksten
+leistungsstärkster
+leistungsstärkstes
+leite
+leiten
+leitend
+leitende
+leitendem
+leitenden
+leitender
+leitendes
+leitest
+leitet
+leitete
+leiteten
+leitetest
+leitetet
+leitfähig
+leitfähige
+leitfähigem
+leitfähigen
+leitfähiger
+leitfähiges
+leitungsmäßig
+leitungsmäßige
+leitungsmäßigem
+leitungsmäßigen
+leitungsmäßiger
+leitungsmäßiges
+lemmingartig
+lemmingartige
+lemmingartigem
+lemmingartigen
+lemmingartiger
+lemmingartiges
+lenkbar
+lenkbare
+lenkbarem
+lenkbaren
+lenkbarer
+lenkbares
+lenke
+lenken
+lenkend
+lenkende
+lenkendem
+lenkenden
+lenkender
+lenkendes
+lenkst
+lenkt
+lenkte
+lenkten
+lenktest
+lenktet
+lernbegierig
+lernbegierige
+lernbegierigem
+lernbegierigen
+lernbegieriger
+lernbegierigere
+lernbegierigerem
+lernbegierigeren
+lernbegierigerer
+lernbegierigeres
+lernbegieriges
+lernbegierigste
+lernbegierigstem
+lernbegierigsten
+lernbegierigster
+lernbegierigstes
+lernbehindert
+lernbehinderte
+lernbehindertem
+lernbehinderten
+lernbehinderter
+lernbehindertes
+lerne
+lernen
+lernend
+lernende
+lernendem
+lernenden
+lernender
+lernendes
+lernfähig
+lernfähige
+lernfähigem
+lernfähigen
+lernfähiger
+lernfähiges
+lernst
+lernt
+lernte
+lernten
+lerntest
+lerntet
+lesbar
+lesbare
+lesbarem
+lesbaren
+lesbarer
+lesbares
+lesbisch
+lesbische
+lesbischem
+lesbischen
+lesbischer
+lesbisches
+lese
+lesen
+lesend
+lesende
+lesendem
+lesenden
+lesender
+lesendes
+lesenswert
+lesenswerte
+lesenswertem
+lesenswerten
+lesenswerter
+lesenswertes
+leserlich
+leserliche
+leserlichem
+leserlichen
+leserlicher
+leserlichere
+leserlicherem
+leserlicheren
+leserlicherer
+leserlicheres
+leserliches
+leserlichste
+leserlichstem
+leserlichsten
+leserlichster
+leserlichstes
+lest
+lettisch
+lettische
+lettischem
+lettischen
+lettischer
+lettisches
+letzt
+letzte
+letztem
+letzten
+letztendlich
+letztendliche
+letztendlichem
+letztendlichen
+letztendlicher
+letztendliches
+letzter
+letztere
+letzterem
+letzteren
+letzterer
+letzteres
+letztes
+letzteste
+letztestem
+letztesten
+letztester
+letztestes
+letztgeliefert
+letztgelieferte
+letztgeliefertem
+letztgelieferten
+letztgelieferter
+letztgeliefertes
+letztgenannt
+letztgenannte
+letztgenanntem
+letztgenannten
+letztgenannter
+letztgenanntes
+letzthin
+letztjährige
+letztjährigem
+letztjährigen
+letztjähriger
+letztjähriges
+letztlich
+letztliche
+letztlichem
+letztlichen
+letztlicher
+letztliches
+letztmals
+leuchte
+leuchten
+leuchtend
+leuchtende
+leuchtendem
+leuchtenden
+leuchtender
+leuchtendes
+leuchtest
+leuchtet
+leuchtete
+leuchteten
+leuchtetest
+leuchtetet
+leugne
+leugnen
+leugnend
+leugnende
+leugnendem
+leugnenden
+leugnender
+leugnendes
+leugnest
+leugnet
+leugnete
+leugneten
+leugnetest
+leugnetet
+leutselig
+leutselige
+leutseligem
+leutseligen
+leutseliger
+leutseligere
+leutseligerem
+leutseligeren
+leutseligerer
+leutseligeres
+leutseliges
+leutseligste
+leutseligstem
+leutseligsten
+leutseligster
+leutseligstes
+lexikalisch
+lexikalische
+lexikalischem
+lexikalischen
+lexikalischer
+lexikalisches
+lexikographisch
+lexikographische
+lexikographischem
+lexikographischen
+lexikographischer
+lexikographisches
+lfd
+libanesisch
+libanesische
+libanesischem
+libanesischen
+libanesischer
+libanesisches
+liberal
+liberale
+liberalem
+liberalen
+liberaler
+liberalere
+liberalerem
+liberaleren
+liberalerer
+liberaleres
+liberales
+liberalisiere
+liberalisieren
+liberalisierend
+liberalisierende
+liberalisierendem
+liberalisierenden
+liberalisierender
+liberalisierendes
+liberalisierst
+liberalisiert
+liberalisierte
+liberalisiertem
+liberalisierten
+liberalisierter
+liberalisiertes
+liberalisiertest
+liberalisiertet
+liberalste
+liberalstem
+liberalsten
+liberalster
+liberalstes
+libysch
+libysche
+libyschem
+libyschen
+libyscher
+libysches
+lichtblau
+lichtblaue
+lichtblauem
+lichtblauen
+lichtblauer
+lichtblaues
+lichtdurchlässig
+lichtdurchlässige
+lichtdurchlässigem
+lichtdurchlässigen
+lichtdurchlässiger
+lichtdurchlässigere
+lichtdurchlässigerem
+lichtdurchlässigeren
+lichtdurchlässigerer
+lichtdurchlässigeres
+lichtdurchlässiges
+lichtdurchlässigste
+lichtdurchlässigstem
+lichtdurchlässigsten
+lichtdurchlässigster
+lichtdurchlässigstes
+lichte
+lichtempfindlich
+lichtempfindliche
+lichtempfindlichem
+lichtempfindlichen
+lichtempfindlicher
+lichtempfindlichere
+lichtempfindlicherem
+lichtempfindlicheren
+lichtempfindlicherer
+lichtempfindlicheres
+lichtempfindliches
+lichtempfindlichste
+lichtempfindlichstem
+lichtempfindlichsten
+lichtempfindlichster
+lichtempfindlichstes
+lichten
+lichtend
+lichtende
+lichtendem
+lichtenden
+lichtender
+lichtendes
+lichterloh
+lichterlohe
+lichterlohem
+lichterlohen
+lichterloher
+lichterlohes
+lichtest
+lichtet
+lichtete
+lichteten
+lichtetest
+lichtetet
+lieb
+liebe
+liebem
+lieben
+liebend
+liebende
+liebendem
+liebenden
+liebender
+liebendes
+liebenswert
+liebenswerte
+liebenswertem
+liebenswerten
+liebenswerter
+liebenswertere
+liebenswerterem
+liebenswerteren
+liebenswerterer
+liebenswerteres
+liebenswertes
+liebenswerteste
+liebenswertestem
+liebenswertesten
+liebenswertester
+liebenswertestes
+liebenswürdig
+liebenswürdige
+liebenswürdigem
+liebenswürdigen
+liebenswürdiger
+liebenswürdigere
+liebenswürdigerem
+liebenswürdigeren
+liebenswürdigerer
+liebenswürdigeres
+liebenswürdiges
+liebenswürdigste
+liebenswürdigstem
+liebenswürdigsten
+liebenswürdigster
+liebenswürdigstes
+lieber
+liebere
+lieberem
+lieberen
+lieberer
+lieberes
+liebes
+liebeskrank
+liebeskranke
+liebeskrankem
+liebeskranken
+liebeskranker
+liebeskrankes
+liebevoll
+liebevolle
+liebevollem
+liebevollen
+liebevoller
+liebevollere
+liebevollerem
+liebevolleren
+liebevollerer
+liebevolleres
+liebevolles
+liebevollste
+liebevollstem
+liebevollsten
+liebevollster
+liebevollstes
+liebgeworden
+liebgewordene
+liebgewordenem
+liebgewordenen
+liebgewordener
+liebgewordenes
+liebkose
+liebkosen
+liebkosend
+liebkosende
+liebkosendem
+liebkosenden
+liebkosender
+liebkosendes
+liebkosest
+liebkost
+liebkoste
+liebkosten
+liebkostest
+liebkostet
+lieblich
+liebliche
+lieblichem
+lieblichen
+lieblicher
+lieblichere
+lieblicherem
+lieblicheren
+lieblicherer
+lieblicheres
+liebliches
+lieblichst
+lieblichste
+lieblichstem
+lieblichsten
+lieblichster
+lieblichstes
+lieblos
+lieblose
+lieblosem
+lieblosen
+liebloser
+lieblosere
+liebloserem
+liebloseren
+liebloserer
+liebloseres
+liebloses
+liebloseste
+lieblosestem
+lieblosesten
+lieblosester
+lieblosestes
+liebreizend
+liebreizende
+liebreizendem
+liebreizenden
+liebreizender
+liebreizendes
+liebst
+liebste
+liebstem
+liebsten
+liebster
+liebstes
+liebt
+liebte
+liebten
+liebtest
+liebtet
+liebäugele
+liebäugeln
+liebäugelnd
+liebäugelnde
+liebäugelndem
+liebäugelnden
+liebäugelnder
+liebäugelndes
+liebäugelst
+liebäugelt
+liebäugelte
+liebäugelten
+liebäugeltest
+liebäugeltet
+liebäugle
+liederlich
+liederliche
+liederlichem
+liederlichen
+liederlicher
+liederlichere
+liederlicherem
+liederlicheren
+liederlicherer
+liederlicheres
+liederliches
+liederlichste
+liederlichstem
+liederlichsten
+liederlichster
+liederlichstes
+lief
+liefe
+liefen
+lieferbar
+lieferbare
+lieferbarem
+lieferbaren
+lieferbarer
+lieferbares
+liefere
+lieferfertig
+lieferfertige
+lieferfertigem
+lieferfertigen
+lieferfertiger
+lieferfertiges
+lieferfähig
+lieferfähige
+lieferfähigem
+lieferfähigen
+lieferfähiger
+lieferfähiges
+liefern
+liefernd
+liefernde
+lieferndem
+liefernden
+liefernder
+lieferndes
+lieferst
+liefert
+lieferte
+lieferten
+liefertest
+liefertet
+liefest
+liefre
+liefst
+lieft
+liege
+liegen
+liegend
+liegende
+liegendem
+liegenden
+liegender
+liegendes
+liegst
+liegt
+lieh
+liehen
+liehst
+lieht
+lies
+liest
+ließ
+ließe
+ließen
+ließest
+ließt
+lifte
+liften
+liftest
+liftet
+lila
+limitiere
+limitieren
+limitierend
+limitierende
+limitierendem
+limitierenden
+limitierender
+limitierendes
+limitierst
+limitiert
+limitierte
+limitiertem
+limitierten
+limitierter
+limitiertes
+limitiertest
+limitiertet
+lind
+linde
+lindem
+linden
+linder
+lindere
+lindern
+lindernd
+lindernde
+linderndem
+lindernden
+lindernder
+linderndes
+linderst
+lindert
+linderte
+linderten
+lindertest
+lindertet
+lindes
+lindre
+linear
+lineare
+linearem
+linearen
+linearer
+lineares
+linguistisch
+linguistische
+linguistischem
+linguistischen
+linguistischer
+linguistisches
+linientreu
+linientreue
+linientreuem
+linientreuen
+linientreuer
+linientreues
+linke
+linkem
+linken
+linkend
+linkende
+linkendem
+linkenden
+linkender
+linkendes
+linker
+linkes
+links
+linksbündig
+linksbündige
+linksbündigem
+linksbündigen
+linksbündiger
+linksbündiges
+linksextrem
+linksextreme
+linksextremem
+linksextremen
+linksextremer
+linksextremere
+linksextremerem
+linksextremeren
+linksextremerer
+linksextremeres
+linksextremes
+linksextremste
+linksextremstem
+linksextremsten
+linksextremster
+linksextremstes
+linksgerichtet
+linksgerichtete
+linksgerichtetem
+linksgerichteten
+linksgerichteter
+linksgerichtetes
+linksorientiert
+linksorientierte
+linksorientiertem
+linksorientierten
+linksorientierter
+linksorientiertes
+linksradikal
+linksradikale
+linksradikalem
+linksradikalen
+linksradikaler
+linksradikales
+linksrheinisch
+linksrheinische
+linksrheinischem
+linksrheinischen
+linksrheinischer
+linksrheinisches
+linkst
+linksum
+linksunabhängig
+linksunabhängige
+linksunabhängigem
+linksunabhängigen
+linksunabhängiger
+linksunabhängiges
+linkt
+linkte
+linkten
+linktest
+linktet
+liquid
+liquidationslos
+liquidationslose
+liquidationslosem
+liquidationslosen
+liquidationsloser
+liquidationsloses
+liquide
+liquidem
+liquiden
+liquider
+liquides
+liquidierbar
+liquidierbare
+liquidierbarem
+liquidierbaren
+liquidierbarer
+liquidierbares
+liquidiere
+liquidieren
+liquidierend
+liquidierende
+liquidierendem
+liquidierenden
+liquidierender
+liquidierendes
+liquidierst
+liquidiert
+liquidierte
+liquidiertem
+liquidierten
+liquidierter
+liquidiertes
+liquidiertest
+liquidiertet
+lispele
+lispeln
+lispelnd
+lispelnde
+lispelndem
+lispelnden
+lispelnder
+lispelndes
+lispelst
+lispelt
+lispelte
+lispelten
+lispeltest
+lispeltet
+lisple
+liste
+listen
+listend
+listende
+listendem
+listenden
+listender
+listendes
+listenreich
+listenreiche
+listenreichem
+listenreichen
+listenreicher
+listenreiches
+listest
+listet
+listete
+listeten
+listetest
+listetet
+listig
+listige
+listigem
+listigen
+listiger
+listigere
+listigerem
+listigeren
+listigerer
+listigeres
+listiges
+listigste
+listigstem
+listigsten
+listigster
+listigstes
+litaneiartig
+litaneiartige
+litaneiartigem
+litaneiartigen
+litaneiartiger
+litaneiartiges
+literarisch
+literarische
+literarischem
+literarischen
+literarischer
+literarisches
+literweise
+lithografisch
+lithografische
+lithografischem
+lithografischen
+lithografischer
+lithografisches
+lithographisch
+lithographische
+lithographischem
+lithographischen
+lithographischer
+lithographisches
+litt
+litten
+littest
+littet
+littst
+liturgisch
+liturgische
+liturgischem
+liturgischen
+liturgischer
+liturgisches
+livriert
+livrierte
+livriertem
+livrierten
+livrierter
+livriertes
+lizenziere
+lizenzieren
+lizenzierend
+lizenzierende
+lizenzierendem
+lizenzierenden
+lizenzierender
+lizenzierendes
+lizenzierst
+lizenziert
+lizenzierte
+lizenziertem
+lizenzierten
+lizenzierter
+lizenziertes
+lizenziertest
+lizenziertet
+lobe
+loben
+lobend
+lobende
+lobendem
+lobenden
+lobender
+lobendes
+lobenswert
+lobenswerte
+lobenswertem
+lobenswerten
+lobenswerter
+lobenswertere
+lobenswerterem
+lobenswerteren
+lobenswerterer
+lobenswerteres
+lobenswertes
+lobenswerteste
+lobenswertestem
+lobenswertesten
+lobenswertester
+lobenswertestes
+lobst
+lobt
+lobte
+lobten
+lobtest
+lobtet
+loche
+lochen
+lochend
+lochende
+lochendem
+lochenden
+lochender
+lochendes
+lochst
+locht
+lochte
+lochten
+lochtest
+lochtet
+locke
+locken
+lockend
+lockende
+lockendem
+lockenden
+lockender
+lockendes
+locker
+lockere
+lockerem
+lockeren
+lockerer
+lockerere
+lockererem
+lockereren
+lockererer
+lockereres
+lockeres
+lockern
+lockernd
+lockernde
+lockerndem
+lockernden
+lockernder
+lockerndes
+lockerst
+lockerste
+lockerstem
+lockersten
+lockerster
+lockerstes
+lockert
+lockerte
+lockerten
+lockertest
+lockertet
+lockig
+lockige
+lockigem
+lockigen
+lockiger
+lockiges
+lockre
+lockst
+lockt
+lockte
+lockten
+locktest
+locktet
+lodere
+lodern
+lodernd
+lodernde
+loderndem
+lodernden
+lodernder
+loderndes
+loderst
+lodert
+loderte
+loderten
+lodertest
+lodertet
+lodre
+log
+logarithmisch
+logarithmische
+logarithmischem
+logarithmischen
+logarithmischer
+logarithmisches
+logen
+logge
+loggen
+loggend
+loggende
+loggendem
+loggenden
+loggender
+loggendes
+loggst
+loggt
+loggte
+loggten
+loggtest
+loggtet
+logiere
+logieren
+logierend
+logierende
+logierendem
+logierenden
+logierender
+logierendes
+logierst
+logiert
+logierte
+logierten
+logiertest
+logiertet
+logikbasiert
+logikbasierte
+logikbasiertem
+logikbasierten
+logikbasierter
+logikbasiertes
+logisch
+logische
+logischem
+logischen
+logischer
+logisches
+logst
+logt
+lohnabhängig
+lohnabhängige
+lohnabhängigem
+lohnabhängigen
+lohnabhängiger
+lohnabhängiges
+lohne
+lohnen
+lohnend
+lohnende
+lohnendem
+lohnenden
+lohnender
+lohnendere
+lohnenderem
+lohnenderen
+lohnenderer
+lohnenderes
+lohnendes
+lohnendste
+lohnendstem
+lohnendsten
+lohnendster
+lohnendstes
+lohnenswert
+lohnenswerte
+lohnenswertem
+lohnenswerten
+lohnenswerter
+lohnenswertes
+lohnpolitisch
+lohnpolitische
+lohnpolitischem
+lohnpolitischen
+lohnpolitischer
+lohnpolitisches
+lohnst
+lohnt
+lohnte
+lohnten
+lohntest
+lohntet
+lokal
+lokalbedingt
+lokalbedingte
+lokalbedingtem
+lokalbedingten
+lokalbedingter
+lokalbedingtes
+lokale
+lokalem
+lokalen
+lokaler
+lokales
+lokalisierbar
+lokalisierbare
+lokalisierbarem
+lokalisierbaren
+lokalisierbarer
+lokalisierbares
+lokalisiere
+lokalisieren
+lokalisierend
+lokalisierende
+lokalisierendem
+lokalisierenden
+lokalisierender
+lokalisierendes
+lokalisierst
+lokalisiert
+lokalisierte
+lokalisiertem
+lokalisierten
+lokalisierter
+lokalisiertes
+lokalisiertest
+lokalisiertet
+longitudinal
+longitudinale
+longitudinalem
+longitudinalen
+longitudinaler
+longitudinales
+los
+lose
+losem
+losen
+losend
+losende
+losendem
+losenden
+losender
+losendes
+loser
+losere
+loserem
+loseren
+loserer
+loseres
+loses
+losest
+loseste
+losestem
+losesten
+losester
+losestes
+losfahre
+losfahren
+losfahrend
+losfahrende
+losfahrendem
+losfahrenden
+losfahrender
+losfahrendes
+losfahrt
+losfährst
+losfährt
+losgebunden
+losgebundene
+losgebundenem
+losgebundenen
+losgebundener
+losgebundenes
+losgefahren
+losgefahrene
+losgefahrenem
+losgefahrenen
+losgefahrener
+losgefahrenes
+losgegangen
+losgegangene
+losgegangenem
+losgegangenen
+losgegangener
+losgegangenes
+losgehe
+losgehen
+losgehend
+losgehende
+losgehendem
+losgehenden
+losgehender
+losgehendes
+losgehst
+losgeht
+losgelassen
+losgelassene
+losgelassenem
+losgelassenen
+losgelassener
+losgelassenes
+losgelöst
+losgelöste
+losgelöstem
+losgelösten
+losgelöster
+losgelöstes
+losgemacht
+losgemachte
+losgemachtem
+losgemachten
+losgemachter
+losgemachtes
+losgerast
+losgerissen
+losgerissene
+losgerissenem
+losgerissenen
+losgerissener
+losgerissenes
+losgesagt
+losgesagte
+losgesagtem
+losgesagten
+losgesagter
+losgesagtes
+losgesaust
+losgeschlagen
+losgeworden
+losgewordene
+losgewordenem
+losgewordenen
+losgewordener
+losgewordenes
+loskomme
+loskommen
+loskommend
+loskommende
+loskommendem
+loskommenden
+loskommender
+loskommendes
+loskommst
+loskommt
+loslasse
+loslassen
+loslassend
+loslassende
+loslassendem
+loslassenden
+loslassender
+loslassendes
+loslasst
+losließ
+losließen
+losließest
+losließt
+losreiße
+losreißen
+losreißend
+losreißende
+losreißendem
+losreißenden
+losreißender
+losreißendes
+losreißest
+losreißt
+losrolle
+losrollen
+losrollst
+losrollt
+losrollte
+losrollten
+losrolltest
+losrolltet
+losschlage
+losschlagen
+losschlagend
+losschlagende
+losschlagendem
+losschlagenden
+losschlagender
+losschlagendes
+losschlagt
+lost
+loste
+losten
+lostest
+lostet
+loswerde
+loswerden
+loswerdend
+loswerdende
+loswerdendem
+loswerdenden
+loswerdender
+loswerdendes
+loswerdet
+loswiehere
+loswiehern
+loswiehernd
+loswiehernde
+loswieherndem
+loswiehernden
+loswiehernder
+loswieherndes
+loswieherst
+loswiehert
+loswieherte
+loswieherten
+loswiehertest
+loswiehertet
+loswiehre
+loszureißen
+loszureißend
+loszureißende
+loszureißendem
+loszureißenden
+loszureißender
+loszureißendes
+loszuwerden
+loszuwerdend
+loszuwerdende
+loszuwerdendem
+loszuwerdenden
+loszuwerdender
+loszuwerdendes
+lotse
+lotsen
+lotsest
+lotst
+lotste
+lotsten
+lotstest
+lotstet
+loyal
+loyale
+loyalem
+loyalen
+loyaler
+loyales
+lt
+lud
+luden
+ludest
+ludet
+ludst
+luftdicht
+luftdichte
+luftdichtem
+luftdichten
+luftdichter
+luftdichtere
+luftdichterem
+luftdichteren
+luftdichterer
+luftdichteres
+luftdichtes
+luftdichteste
+luftdichtestem
+luftdichtesten
+luftdichtester
+luftdichtestes
+luftfahrttechnisch
+luftfahrttechnische
+luftfahrttechnischem
+luftfahrttechnischen
+luftfahrttechnischer
+luftfahrttechnisches
+luftförmig
+luftförmige
+luftförmigem
+luftförmigen
+luftförmiger
+luftförmiges
+luftig
+luftige
+luftigem
+luftigen
+luftiger
+luftigere
+luftigerem
+luftigeren
+luftigerer
+luftigeres
+luftiges
+luftigste
+luftigstem
+luftigsten
+luftigster
+luftigstes
+lukrativ
+lukrative
+lukrativem
+lukrativen
+lukrativer
+lukrativere
+lukrativerem
+lukrativeren
+lukrativerer
+lukrativeres
+lukratives
+lukrativste
+lukrativstem
+lukrativsten
+lukrativster
+lukrativstes
+lukullisch
+lukullische
+lukullischem
+lukullischen
+lukullischer
+lukullisches
+lumpig
+lumpige
+lumpigem
+lumpigen
+lumpiger
+lumpiges
+lungere
+lungern
+lungernd
+lungernde
+lungerndem
+lungernden
+lungernder
+lungerndes
+lungerst
+lungert
+lungerte
+lungerten
+lungertest
+lungertet
+lungre
+lupenrein
+lupenreine
+lupenreinem
+lupenreinen
+lupenreiner
+lupenreinere
+lupenreinerem
+lupenreineren
+lupenreinerer
+lupenreineres
+lupenreines
+lupenreinste
+lupenreinstem
+lupenreinsten
+lupenreinster
+lupenreinstes
+lustig
+lustige
+lustigem
+lustigen
+lustiger
+lustigere
+lustigerem
+lustigeren
+lustigerer
+lustigeres
+lustiges
+lustigste
+lustigstem
+lustigsten
+lustigster
+lustigstes
+lustlos
+lustlose
+lustlosem
+lustlosen
+lustloser
+lustlosere
+lustloserem
+lustloseren
+lustloserer
+lustloseres
+lustloses
+lustloseste
+lustlosestem
+lustlosesten
+lustlosester
+lustlosestes
+lustvoll
+lustvolle
+lustvollem
+lustvollen
+lustvoller
+lustvollere
+lustvollerem
+lustvolleren
+lustvollerer
+lustvolleres
+lustvolles
+lustvollste
+lustvollstem
+lustvollsten
+lustvollster
+lustvollstes
+lutherisch
+lutherische
+lutherischem
+lutherischen
+lutherischer
+lutherisches
+lutsche
+lutschen
+lutschend
+lutschende
+lutschendem
+lutschenden
+lutschender
+lutschendes
+lutschest
+lutschst
+lutscht
+lutschte
+lutschten
+lutschtest
+lutschtet
+luxemburgisch
+luxemburgische
+luxemburgischem
+luxemburgischen
+luxemburgischer
+luxemburgisches
+luxuriös
+luxuriöse
+luxuriösem
+luxuriösen
+luxuriöser
+luxuriösere
+luxuriöserem
+luxuriöseren
+luxuriöserer
+luxuriöseres
+luxuriöses
+luxuriöseste
+luxuriösestem
+luxuriösesten
+luxuriösester
+luxuriösestes
+lyrisch
+lyrische
+lyrischem
+lyrischen
+lyrischer
+lyrisches
+lächele
+lächeln
+lächelnd
+lächelnde
+lächelndem
+lächelnden
+lächelnder
+lächelndes
+lächelst
+lächelt
+lächelte
+lächelten
+lächeltest
+lächeltet
+lächerlich
+lächerliche
+lächerlichem
+lächerlichen
+lächerlicher
+lächerliches
+lächle
+lädiere
+lädieren
+lädierend
+lädierende
+lädierendem
+lädierenden
+lädierender
+lädierendes
+lädierst
+lädiert
+lädierte
+lädiertem
+lädierten
+lädierter
+lädiertes
+lädiertest
+lädiertet
+lädst
+lädt
+läge
+lägen
+lägst
+lägt
+lähme
+lähmen
+lähmend
+lähmende
+lähmendem
+lähmenden
+lähmender
+lähmendes
+lähmst
+lähmt
+lähmte
+lähmten
+lähmtest
+lähmtet
+ländermäßig
+ländermäßige
+ländermäßigem
+ländermäßigen
+ländermäßiger
+ländermäßiges
+ländlich
+ländliche
+ländlichem
+ländlichen
+ländlicher
+ländlichere
+ländlicherem
+ländlicheren
+ländlicherer
+ländlicheres
+ländliches
+ländlichste
+ländlichstem
+ländlichsten
+ländlichster
+ländlichstes
+länger
+längerdauernd
+längerdauernde
+längerdauerndem
+längerdauernden
+längerdauernder
+längerdauerndes
+längere
+längerem
+längeren
+längerer
+längeres
+längerfristig
+längerfristige
+längerfristigem
+längerfristigen
+längerfristiger
+längerfristiges
+länglich
+längliche
+länglichem
+länglichen
+länglicher
+länglichere
+länglicherem
+länglicheren
+länglicherer
+länglicheres
+längliches
+länglichste
+länglichstem
+länglichsten
+länglichster
+länglichstes
+längs
+längst
+längste
+längstem
+längsten
+längstens
+längster
+längstes
+lärme
+lärmen
+lärmend
+lärmende
+lärmendem
+lärmenden
+lärmender
+lärmendes
+lärmig
+lärmige
+lärmigem
+lärmigen
+lärmiger
+lärmigere
+lärmigerem
+lärmigeren
+lärmigerer
+lärmigeres
+lärmiges
+lärmigste
+lärmigstem
+lärmigsten
+lärmigster
+lärmigstes
+lärmst
+lärmt
+lärmte
+lärmten
+lärmtest
+lärmtet
+lässig
+lässige
+lässigem
+lässigen
+lässiger
+lässigere
+lässigerem
+lässigeren
+lässigerer
+lässigeres
+lässiges
+lässigste
+lässigstem
+lässigsten
+lässigster
+lässigstes
+lässt
+lästere
+lästern
+lästernd
+lästernde
+lästerndem
+lästernden
+lästernder
+lästerndes
+lästerst
+lästert
+lästerte
+lästerten
+lästertest
+lästertet
+lästig
+lästige
+lästigem
+lästigen
+lästiger
+lästigere
+lästigerem
+lästigeren
+lästigerer
+lästigeres
+lästiges
+lästigste
+lästigstem
+lästigsten
+lästigster
+lästigstes
+lästre
+läufig
+läufige
+läufigem
+läufigen
+läufiger
+läufiges
+läufst
+läuft
+läute
+läuten
+läutend
+läutende
+läutendem
+läutenden
+läutender
+läutendes
+läutest
+läutet
+läutete
+läuteten
+läutetest
+läutetet
+löblich
+löbliche
+löblichem
+löblichen
+löblicher
+löbliches
+löchere
+löchern
+löchernd
+löchernde
+löcherndem
+löchernden
+löchernder
+löcherndes
+löcherst
+löchert
+löcherte
+löcherten
+löchertest
+löchertet
+löchre
+löchrig
+löchrige
+löchrigem
+löchrigen
+löchriger
+löchriges
+löffele
+löffeln
+löffelnd
+löffelnde
+löffelndem
+löffelnden
+löffelnder
+löffelndes
+löffelst
+löffelt
+löffelte
+löffelten
+löffeltest
+löffeltet
+löffle
+löhne
+löhnen
+löhnend
+löhnende
+löhnendem
+löhnenden
+löhnender
+löhnendes
+löhnst
+löhnt
+löhnte
+löhnten
+löhntest
+löhntet
+lösbar
+lösbare
+lösbarem
+lösbaren
+lösbarer
+lösbarere
+lösbarerem
+lösbareren
+lösbarerer
+lösbareres
+lösbares
+lösbarste
+lösbarstem
+lösbarsten
+lösbarster
+lösbarstes
+lösche
+löschen
+löschend
+löschende
+löschendem
+löschenden
+löschender
+löschendes
+löschest
+löschst
+löscht
+löschte
+löschten
+löschtest
+löschtet
+löse
+lösen
+lösend
+lösende
+lösendem
+lösenden
+lösender
+lösendes
+lösest
+löslich
+lösliche
+löslichem
+löslichen
+löslicher
+löslichere
+löslicherem
+löslicheren
+löslicherer
+löslicheres
+lösliches
+löslichste
+löslichstem
+löslichsten
+löslichster
+löslichstes
+löst
+löste
+lösten
+löstest
+löstet
+löte
+löten
+lötend
+lötende
+lötendem
+lötenden
+lötender
+lötendes
+lötest
+lötet
+lötete
+löteten
+lötetest
+lötetet
+lückenhaft
+lückenhafte
+lückenhaftem
+lückenhaften
+lückenhafter
+lückenhaftere
+lückenhafterem
+lückenhafteren
+lückenhafterer
+lückenhafteres
+lückenhaftes
+lückenhafteste
+lückenhaftestem
+lückenhaftesten
+lückenhaftester
+lückenhaftestes
+lückenlos
+lückenlose
+lückenlosem
+lückenlosen
+lückenloser
+lückenlosere
+lückenloserem
+lückenloseren
+lückenloserer
+lückenloseres
+lückenloses
+lückenloseste
+lückenlosestem
+lückenlosesten
+lückenlosester
+lückenlosestes
+lüfte
+lüften
+lüftend
+lüftende
+lüftendem
+lüftenden
+lüftender
+lüftendes
+lüftest
+lüftet
+lüftete
+lüfteten
+lüftetest
+lüftetet
+lüge
+lügen
+lügend
+lügende
+lügendem
+lügenden
+lügender
+lügendes
+lügnerisch
+lügnerische
+lügnerischem
+lügnerischen
+lügnerischer
+lügnerischere
+lügnerischerem
+lügnerischeren
+lügnerischerer
+lügnerischeres
+lügnerisches
+lügnerischste
+lügnerischstem
+lügnerischsten
+lügnerischster
+lügnerischstes
+lügst
+lügt
+lüstern
+lüsterne
+lüsternem
+lüsternen
+lüsterner
+lüsternes
+mA
+machbar
+machbare
+machbarem
+machbaren
+machbarer
+machbares
+mache
+machen
+machend
+machende
+machendem
+machenden
+machender
+machendes
+machst
+macht
+machte
+machten
+machtest
+machtet
+machthaberisch
+machthaberische
+machthaberischem
+machthaberischen
+machthaberischer
+machthaberisches
+machtlos
+machtlose
+machtlosem
+machtlosen
+machtloser
+machtlosere
+machtloserem
+machtloseren
+machtloserer
+machtloseres
+machtloses
+machtloseste
+machtlosestem
+machtlosesten
+machtlosester
+machtlosestes
+machtmäßiger
+machtpolitisch
+machtpolitische
+machtpolitischem
+machtpolitischen
+machtpolitischer
+machtpolitisches
+machtsüchtig
+machtsüchtige
+machtsüchtigem
+machtsüchtigen
+machtsüchtiger
+machtsüchtiges
+machtvoll
+machtvolle
+machtvollem
+machtvollen
+machtvoller
+machtvollere
+machtvollerem
+machtvolleren
+machtvollerer
+machtvolleres
+machtvolles
+machtvollste
+machtvollstem
+machtvollsten
+machtvollster
+machtvollstes
+madig
+madige
+madigem
+madigen
+madiger
+madiges
+mag
+mager
+magere
+magerem
+mageren
+magerer
+magerere
+magererem
+magereren
+magererer
+magereres
+mageres
+magerste
+magerstem
+magersten
+magerster
+magerstes
+magisch
+magische
+magischem
+magischen
+magischer
+magisches
+magnetisch
+magnetische
+magnetischem
+magnetischen
+magnetischer
+magnetisches
+magst
+mahle
+mahlen
+mahlend
+mahlende
+mahlendem
+mahlenden
+mahlender
+mahlendes
+mahlst
+mahlt
+mahlte
+mahlten
+mahltest
+mahltet
+mahne
+mahnen
+mahnend
+mahnende
+mahnendem
+mahnenden
+mahnender
+mahnendes
+mahnst
+mahnt
+mahnte
+mahnten
+mahntest
+mahntet
+majestätisch
+majestätische
+majestätischem
+majestätischen
+majestätischer
+majestätisches
+majorisiere
+majorisieren
+majorisierend
+majorisierende
+majorisierendem
+majorisierenden
+majorisierender
+majorisierendes
+majorisierst
+majorisiert
+majorisierte
+majorisiertem
+majorisierten
+majorisierter
+majorisiertes
+majorisiertest
+majorisiertet
+makaber
+makabere
+makaberem
+makaberen
+makaberer
+makaberere
+makabererem
+makabereren
+makabererer
+makabereres
+makaberes
+makaberste
+makaberstem
+makabersten
+makaberster
+makaberstes
+makellos
+makellose
+makellosem
+makellosen
+makelloser
+makellosere
+makelloserem
+makelloseren
+makelloserer
+makelloseres
+makelloses
+makelloseste
+makellosestem
+makellosesten
+makellosester
+makellosestes
+makroskopisch
+makroskopische
+makroskopischem
+makroskopischen
+makroskopischer
+makroskopisches
+mal
+malaysisch
+malaysische
+malaysischem
+malaysischen
+malaysischer
+malaysisches
+male
+malen
+malend
+malende
+malendem
+malenden
+malender
+malendes
+malerisch
+malerische
+malerischem
+malerischen
+malerischer
+malerisches
+maliziös
+maliziöse
+maliziösem
+maliziösen
+maliziöser
+maliziöses
+malst
+malt
+malte
+malten
+maltest
+maltet
+malträtiere
+malträtieren
+malträtierend
+malträtierende
+malträtierendem
+malträtierenden
+malträtierender
+malträtierendes
+malträtierst
+malträtiert
+malträtierte
+malträtiertem
+malträtierten
+malträtierter
+malträtiertes
+malträtiertest
+malträtiertet
+man
+manage
+managen
+managend
+managende
+managendem
+managenden
+managender
+managendes
+managst
+managt
+managte
+managten
+managtest
+managtet
+manch
+manche
+manchem
+manchen
+mancher
+mancherlei
+manches
+manchmal
+mandelförmig
+mandelförmige
+mandelförmigem
+mandelförmigen
+mandelförmiger
+mandelförmiges
+mangele
+mangelhaft
+mangelhafte
+mangelhaftem
+mangelhaften
+mangelhafter
+mangelhaftes
+mangeln
+mangelnd
+mangelnde
+mangelndem
+mangelnden
+mangelnder
+mangelndes
+mangels
+mangelst
+mangelt
+mangelte
+mangelten
+mangeltest
+mangeltet
+mangle
+manifestiere
+manifestieren
+manifestierend
+manifestierende
+manifestierendem
+manifestierenden
+manifestierender
+manifestierendes
+manifestierst
+manifestiert
+manifestierte
+manifestiertem
+manifestierten
+manifestierter
+manifestiertes
+manifestiertest
+manifestiertet
+manipulierbar
+manipulierbare
+manipulierbarem
+manipulierbaren
+manipulierbarer
+manipulierbares
+manipuliere
+manipulieren
+manipulierend
+manipulierende
+manipulierendem
+manipulierenden
+manipulierender
+manipulierendes
+manipulierst
+manipuliert
+manipulierte
+manipuliertem
+manipulierten
+manipulierter
+manipuliertes
+manipuliertest
+manipuliertet
+manisch
+manische
+manischem
+manischen
+manischer
+manisches
+mannhaft
+mannhafte
+mannhaftem
+mannhaften
+mannhafter
+mannhaftes
+mannigfach
+mannigfache
+mannigfachem
+mannigfachen
+mannigfacher
+mannigfachere
+mannigfacherem
+mannigfacheren
+mannigfacherer
+mannigfacheres
+mannigfaches
+mannigfachste
+mannigfachstem
+mannigfachsten
+mannigfachster
+mannigfachstes
+mannigfaltig
+mannigfaltige
+mannigfaltigem
+mannigfaltigen
+mannigfaltiger
+mannigfaltiges
+mannlos
+mannlose
+mannlosem
+mannlosen
+mannloser
+mannloses
+manuell
+manuelle
+manuellem
+manuellen
+manueller
+manuelles
+manövriere
+manövrieren
+manövrierend
+manövrierende
+manövrierendem
+manövrierenden
+manövrierender
+manövrierendes
+manövrierst
+manövriert
+manövrierte
+manövrierten
+manövriertest
+manövriertet
+manövrierunfähig
+manövrierunfähige
+manövrierunfähigem
+manövrierunfähigen
+manövrierunfähiger
+manövrierunfähiges
+marginal
+marginale
+marginalem
+marginalen
+marginaler
+marginales
+mariniere
+marinieren
+marinierend
+marinierende
+marinierendem
+marinierenden
+marinierender
+marinierendes
+marinierst
+mariniert
+marinierte
+mariniertem
+marinierten
+marinierter
+mariniertes
+mariniertest
+mariniertet
+maritim
+maritime
+maritimem
+maritimen
+maritimer
+maritimes
+markant
+markante
+markantem
+markanten
+markanter
+markantere
+markanterem
+markanteren
+markanterer
+markanteres
+markantes
+markanteste
+markantestem
+markantesten
+markantester
+markantestes
+markenpflichtig
+markenpflichtige
+markenpflichtigem
+markenpflichtigen
+markenpflichtiger
+markenpflichtiges
+markgräfqqlich
+markgräfqqliche
+markgräfqqlichem
+markgräfqqlichen
+markgräfqqlicher
+markgräfqqliches
+markiere
+markieren
+markierend
+markierende
+markierendem
+markierenden
+markierender
+markierendes
+markierst
+markiert
+markierte
+markiertem
+markierten
+markierter
+markiertes
+markiertest
+markiertet
+marktbeherrschend
+marktbeherrschende
+marktbeherrschendem
+marktbeherrschenden
+marktbeherrschender
+marktbeherrschendes
+marktfähig
+marktfähige
+marktfähigem
+marktfähigen
+marktfähiger
+marktfähigere
+marktfähigerem
+marktfähigeren
+marktfähigerer
+marktfähigeres
+marktfähiges
+marktfähigste
+marktfähigstem
+marktfähigsten
+marktfähigster
+marktfähigstes
+marktführend
+marktführende
+marktführendem
+marktführenden
+marktführender
+marktführendes
+marktgerecht
+marktgerechte
+marktgerechtem
+marktgerechten
+marktgerechter
+marktgerechtes
+marktkonform
+marktkonforme
+marktkonformem
+marktkonformen
+marktkonformer
+marktkonformes
+marktorientiert
+marktorientierte
+marktorientiertem
+marktorientierten
+marktorientierter
+marktorientiertes
+marktpolitisch
+marktpolitische
+marktpolitischem
+marktpolitischen
+marktpolitischer
+marktpolitisches
+marktreif
+marktreife
+marktreifem
+marktreifen
+marktreifer
+marktreifes
+marktschreierisch
+marktschreierische
+marktschreierischem
+marktschreierischen
+marktschreierischer
+marktschreierisches
+marktwirtschaftlich
+marktwirtschaftliche
+marktwirtschaftlichem
+marktwirtschaftlichen
+marktwirtschaftlicher
+marktwirtschaftliches
+marktüblich
+marktübliche
+marktüblichem
+marktüblichen
+marktüblicher
+marktübliches
+marokkanisch
+marokkanische
+marokkanischem
+marokkanischen
+marokkanischer
+marokkanisches
+maronistisch
+maronistische
+maronistischem
+maronistischen
+maronistischer
+maronistisches
+marschiere
+marschieren
+marschierend
+marschierende
+marschierendem
+marschierenden
+marschierender
+marschierendes
+marschierst
+marschiert
+marschierte
+marschierten
+marschiertest
+marschiertet
+martere
+martern
+marternd
+marternde
+marterndem
+marternden
+marternder
+marterndes
+marterst
+martert
+marterte
+marterten
+martertest
+martertet
+martialisch
+martialische
+martialischem
+martialischen
+martialischer
+martialisches
+martre
+marxistisch
+marxistische
+marxistischem
+marxistischen
+marxistischer
+marxistisches
+maschinell
+maschinelle
+maschinellem
+maschinellen
+maschineller
+maschinelles
+maschinenabhängig
+maschinenabhängige
+maschinenabhängigem
+maschinenabhängigen
+maschinenabhängiger
+maschinenabhängiges
+maschinenbezogen
+maschinenbezogene
+maschinenbezogenem
+maschinenbezogenen
+maschinenbezogener
+maschinenbezogenes
+maschinenfertig
+maschinenfertige
+maschinenfertigem
+maschinenfertigen
+maschinenfertiger
+maschinenfertiges
+maschinenhaft
+maschinenhafte
+maschinenhaftem
+maschinenhaften
+maschinenhafter
+maschinenhaftes
+maschinenmäßig
+maschinenmäßige
+maschinenmäßigem
+maschinenmäßigen
+maschinenmäßiger
+maschinenmäßiges
+maschinennah
+maschinennahe
+maschinennahem
+maschinennahen
+maschinennaher
+maschinennahes
+maschinennäher
+maschinennähere
+maschinennäherem
+maschinennäheren
+maschinennäherer
+maschinennäheres
+maschinenspezifisch
+maschinenspezifische
+maschinenspezifischem
+maschinenspezifischen
+maschinenspezifischer
+maschinenspezifisches
+maschinensprachlich
+maschinensprachliche
+maschinensprachlichem
+maschinensprachlichen
+maschinensprachlicher
+maschinensprachliches
+maschinenunabhängig
+maschinenunabhängige
+maschinenunabhängigem
+maschinenunabhängigen
+maschinenunabhängiger
+maschinenunabhängigere
+maschinenunabhängigerem
+maschinenunabhängigeren
+maschinenunabhängigerer
+maschinenunabhängigeres
+maschinenunabhängiges
+maschinenunabhängigste
+maschinenunabhängigstem
+maschinenunabhängigsten
+maschinenunabhängigster
+maschinenunabhängigstes
+maschinenunterstützt
+maschinenunterstützte
+maschinenunterstütztem
+maschinenunterstützten
+maschinenunterstützter
+maschinenunterstütztes
+maschinenzugehörig
+maschinenzugehörige
+maschinenzugehörigem
+maschinenzugehörigen
+maschinenzugehöriger
+maschinenzugehöriges
+maskenhaft
+maskenhafte
+maskenhaftem
+maskenhaften
+maskenhafter
+maskenhaftes
+maskenorganisiert
+maskenorganisierte
+maskenorganisiertem
+maskenorganisierten
+maskenorganisierter
+maskenorganisiertes
+maskiere
+maskieren
+maskierend
+maskierende
+maskierendem
+maskierenden
+maskierender
+maskierendes
+maskierst
+maskiert
+maskierte
+maskiertem
+maskierten
+maskierter
+maskiertes
+maskiertest
+maskiertet
+maskulin
+maskuline
+maskulinem
+maskulinen
+maskuliner
+maskulines
+massakriere
+massakrieren
+massakrierend
+massakrierende
+massakrierendem
+massakrierenden
+massakrierender
+massakrierendes
+massakrierst
+massakriert
+massakrierte
+massakriertem
+massakrierten
+massakrierter
+massakriertes
+massakriertest
+massakriertet
+massenhaft
+massenhafte
+massenhaftem
+massenhaften
+massenhafter
+massenhaftes
+massenpsychologisch
+massenpsychologische
+massenpsychologischem
+massenpsychologischen
+massenpsychologischer
+massenpsychologisches
+massenweise
+massiere
+massieren
+massierend
+massierende
+massierendem
+massierenden
+massierender
+massierendes
+massierst
+massiert
+massierte
+massiertem
+massierten
+massierter
+massiertes
+massiertest
+massiertet
+massig
+massige
+massigem
+massigen
+massiger
+massiges
+massiv
+massive
+massivem
+massiven
+massiver
+massivere
+massiverem
+massiveren
+massiverer
+massiveres
+massives
+massivste
+massivstem
+massivsten
+massivster
+massivstes
+masturbier
+masturbiere
+masturbieren
+masturbierend
+masturbierende
+masturbierendem
+masturbierenden
+masturbierender
+masturbierendes
+masturbierst
+masturbiert
+masturbierte
+masturbierten
+masturbiertest
+masturbiertet
+materialgerecht
+materialgerechte
+materialgerechtem
+materialgerechten
+materialgerechter
+materialgerechtes
+materialistisch
+materialistische
+materialistischem
+materialistischen
+materialistischer
+materialistischere
+materialistischerem
+materialistischeren
+materialistischerer
+materialistischeres
+materialistisches
+materialistischste
+materialistischstem
+materialistischsten
+materialistischster
+materialistischstes
+materialspezifisch
+materialspezifische
+materialspezifischem
+materialspezifischen
+materialspezifischer
+materialspezifisches
+materiell
+materielle
+materiellem
+materiellen
+materieller
+materielles
+mathematisch
+mathematische
+mathematischem
+mathematischen
+mathematischer
+mathematisches
+matschig
+matschige
+matschigem
+matschigen
+matschiger
+matschigere
+matschigerem
+matschigeren
+matschigerer
+matschigeres
+matschiges
+matschigste
+matschigstem
+matschigsten
+matschigster
+matschigstes
+matt
+matte
+mattem
+matten
+matter
+mattere
+matterem
+matteren
+matterer
+matteres
+mattes
+matteste
+mattestem
+mattesten
+mattester
+mattestes
+mattiert
+mattierte
+mattiertem
+mattierten
+mattierter
+mattiertes
+maturiere
+maturieren
+maturierend
+maturierende
+maturierendem
+maturierenden
+maturierender
+maturierendes
+maturierst
+maturiert
+maturierte
+maturierten
+maturiertest
+maturiertet
+mauere
+mauern
+mauernd
+mauernde
+mauerndem
+mauernden
+mauernder
+mauerndes
+mauerst
+mauert
+mauerte
+mauerten
+mauertest
+mauertet
+maule
+maulen
+maulend
+maulende
+maulendem
+maulenden
+maulender
+maulendes
+maulst
+mault
+maulte
+maulten
+maultest
+maultet
+maure
+mausere
+mausern
+mausernd
+mausernde
+mauserndem
+mausernden
+mausernder
+mauserndes
+mauserst
+mausert
+mauserte
+mauserten
+mausertest
+mausertet
+mausgrau
+mausgraue
+mausgrauem
+mausgrauen
+mausgrauer
+mausgraues
+mausre
+maximal
+maximale
+maximalem
+maximalen
+maximaler
+maximales
+maximiere
+maximieren
+maximierend
+maximierende
+maximierendem
+maximierenden
+maximierender
+maximierendes
+maximierst
+maximiert
+maximierte
+maximiertem
+maximierten
+maximierter
+maximiertes
+maximiertest
+maximiertet
+maß
+maßen
+maßest
+maßgearbeitet
+maßgearbeitete
+maßgearbeitetem
+maßgearbeiteten
+maßgearbeiteter
+maßgearbeitetes
+maßgebend
+maßgebende
+maßgebendem
+maßgebenden
+maßgebender
+maßgebendere
+maßgebenderem
+maßgebenderen
+maßgebenderer
+maßgebenderes
+maßgebendes
+maßgebendste
+maßgebendstem
+maßgebendsten
+maßgebendster
+maßgebendstes
+maßgeblich
+maßgebliche
+maßgeblichem
+maßgeblichen
+maßgeblicher
+maßgebliches
+maßgerecht
+maßgerechte
+maßgerechtem
+maßgerechten
+maßgerechter
+maßgerechtes
+maßgeschneidert
+maßgeschneiderte
+maßgeschneidertem
+maßgeschneiderten
+maßgeschneiderter
+maßgeschneidertes
+maßlos
+maßlose
+maßlosem
+maßlosen
+maßloser
+maßloses
+maßstabsgetreu
+maßstabsgetreue
+maßstabsgetreuem
+maßstabsgetreuen
+maßstabsgetreuer
+maßstabsgetreues
+maßstäblich
+maßstäbliche
+maßstäblichem
+maßstäblichen
+maßstäblicher
+maßstäbliches
+maßt
+maßvoll
+maßvolle
+maßvollem
+maßvollen
+maßvoller
+maßvolles
+mechanisch
+mechanische
+mechanischem
+mechanischen
+mechanischer
+mechanisches
+mechanisiert
+mechanisierte
+mechanisiertem
+mechanisierten
+mechanisierter
+mechanisiertes
+mechanistisch
+mechanistische
+mechanistischem
+mechanistischen
+mechanistischer
+mechanistisches
+meckere
+meckern
+meckernd
+meckernde
+meckerndem
+meckernden
+meckernder
+meckerndes
+meckerst
+meckert
+meckerte
+meckerten
+meckertest
+meckertet
+meckre
+meditativ
+meditative
+meditativem
+meditativen
+meditativer
+meditatives
+mediterran
+mediterrane
+mediterranem
+mediterranen
+mediterraner
+mediterranes
+meditiere
+meditieren
+meditierend
+meditierende
+meditierendem
+meditierenden
+meditierender
+meditierendes
+meditierst
+meditiert
+meditierte
+meditierten
+meditiertest
+meditiertet
+medizinisch
+medizinische
+medizinischem
+medizinischen
+medizinischer
+medizinisches
+megärenhafte
+mehlig
+mehlige
+mehligem
+mehligen
+mehliger
+mehligere
+mehligerem
+mehligeren
+mehligerer
+mehligeres
+mehliges
+mehligste
+mehligstem
+mehligsten
+mehligster
+mehligstes
+mehr
+mehraderig
+mehraderige
+mehraderigem
+mehraderigen
+mehraderiger
+mehraderiges
+mehradrig
+mehradrige
+mehradrigem
+mehradrigen
+mehradriger
+mehradriges
+mehrdeutig
+mehrdeutige
+mehrdeutigem
+mehrdeutigen
+mehrdeutiger
+mehrdeutigere
+mehrdeutigerem
+mehrdeutigeren
+mehrdeutigerer
+mehrdeutigeres
+mehrdeutiges
+mehrdeutigste
+mehrdeutigstem
+mehrdeutigsten
+mehrdeutigster
+mehrdeutigstes
+mehrdimensional
+mehrdimensionale
+mehrdimensionalem
+mehrdimensionalen
+mehrdimensionaler
+mehrdimensionales
+mehre
+mehreckig
+mehreckige
+mehreckigem
+mehreckigen
+mehreckiger
+mehreckiges
+mehren
+mehrend
+mehrende
+mehrendem
+mehrenden
+mehrender
+mehrendes
+mehrere
+mehrerem
+mehreren
+mehrerer
+mehreres
+mehrfach
+mehrfache
+mehrfachem
+mehrfachen
+mehrfacher
+mehrfaches
+mehrfarbig
+mehrfarbige
+mehrfarbigem
+mehrfarbigen
+mehrfarbiger
+mehrfarbiges
+mehrgeschossig
+mehrgeschossige
+mehrgeschossigem
+mehrgeschossigen
+mehrgeschossiger
+mehrgeschossiges
+mehrgliederig
+mehrgliederige
+mehrgliederigem
+mehrgliederigen
+mehrgliederiger
+mehrgliederiges
+mehrgliedrig
+mehrgliedrige
+mehrgliedrigem
+mehrgliedrigen
+mehrgliedriger
+mehrgliedriges
+mehrheitlich
+mehrheitliche
+mehrheitlichem
+mehrheitlichen
+mehrheitlicher
+mehrheitliches
+mehrjährig
+mehrjährige
+mehrjährigem
+mehrjährigen
+mehrjähriger
+mehrjähriges
+mehrkanalig
+mehrkanalige
+mehrkanaligem
+mehrkanaligen
+mehrkanaliger
+mehrkanaliges
+mehrmalig
+mehrmalige
+mehrmaligem
+mehrmaligen
+mehrmaliger
+mehrmaliges
+mehrmals
+mehrmonatig
+mehrmonatige
+mehrmonatigem
+mehrmonatigen
+mehrmonatiger
+mehrmonatiges
+mehrpolig
+mehrpolige
+mehrpoligem
+mehrpoligen
+mehrpoliger
+mehrpoliges
+mehrprozentig
+mehrprozentige
+mehrprozentigem
+mehrprozentigen
+mehrprozentiger
+mehrprozentiges
+mehrseitig
+mehrseitige
+mehrseitigem
+mehrseitigen
+mehrseitiger
+mehrseitiges
+mehrsilbig
+mehrsilbige
+mehrsilbigem
+mehrsilbigen
+mehrsilbiger
+mehrsilbiges
+mehrsortig
+mehrsortige
+mehrsortigem
+mehrsortigen
+mehrsortiger
+mehrsortiges
+mehrsprachig
+mehrsprachige
+mehrsprachigem
+mehrsprachigen
+mehrsprachiger
+mehrsprachiges
+mehrst
+mehrstellig
+mehrstellige
+mehrstelligem
+mehrstelligen
+mehrstelliger
+mehrstelliges
+mehrstimmig
+mehrstimmige
+mehrstimmigem
+mehrstimmigen
+mehrstimmiger
+mehrstimmiges
+mehrstufig
+mehrstufige
+mehrstufigem
+mehrstufigen
+mehrstufiger
+mehrstufiges
+mehrstöckig
+mehrstöckige
+mehrstöckigem
+mehrstöckigen
+mehrstöckiger
+mehrstöckiges
+mehrstündig
+mehrstündige
+mehrstündigem
+mehrstündigen
+mehrstündiger
+mehrstündiges
+mehrt
+mehrte
+mehrten
+mehrtest
+mehrtet
+mehrtägig
+mehrtägige
+mehrtägigem
+mehrtägigen
+mehrtägiger
+mehrtägiges
+mehrwöchig
+mehrwöchige
+mehrwöchigem
+mehrwöchigen
+mehrwöchiger
+mehrwöchiges
+mehrzeilig
+mehrzeilige
+mehrzeiligem
+mehrzeiligen
+mehrzeiliger
+mehrzeiliges
+meide
+meiden
+meidend
+meidende
+meidendem
+meidenden
+meidender
+meidendes
+meidest
+meidet
+meilenweit
+mein
+meine
+meinem
+meinen
+meinend
+meinende
+meinendem
+meinenden
+meinender
+meinendes
+meiner
+meinerseits
+meines
+meinesgleichen
+meinesteils
+meinethalben
+meinetwegen
+meinetwillen
+meinige
+meinigen
+meinst
+meint
+meinte
+meinten
+meintest
+meintet
+meist
+meistbietend
+meistbietende
+meistbietendem
+meistbietenden
+meistbietender
+meistbietendes
+meiste
+meisten
+meistens
+meistenteils
+meistere
+meisterhaft
+meisterhafte
+meisterhaftem
+meisterhaften
+meisterhafter
+meisterhaftere
+meisterhafterem
+meisterhafteren
+meisterhafterer
+meisterhafteres
+meisterhaftes
+meisterhafteste
+meisterhaftestem
+meisterhaftesten
+meisterhaftester
+meisterhaftestes
+meisterlich
+meisterliche
+meisterlichem
+meisterlichen
+meisterlicher
+meisterliches
+meistern
+meisternd
+meisternde
+meisterndem
+meisternden
+meisternder
+meisterndes
+meisterst
+meistert
+meisterte
+meisterten
+meistertest
+meistertet
+meistgekauft
+meistgekaufte
+meistgekauftem
+meistgekauften
+meistgekaufter
+meistgekauftes
+meistgespielt
+meistgespielte
+meistgespieltem
+meistgespielten
+meistgespielter
+meistgespieltes
+meistre
+meißele
+meißeln
+meißelnd
+meißelnde
+meißelndem
+meißelnden
+meißelnder
+meißelndes
+meißelst
+meißelt
+meißelte
+meißelten
+meißeltest
+meißeltet
+meißle
+melancholisch
+melancholische
+melancholischem
+melancholischen
+melancholischer
+melancholischere
+melancholischerem
+melancholischeren
+melancholischerer
+melancholischeres
+melancholisches
+melancholischste
+melancholischstem
+melancholischsten
+melancholischster
+melancholischstes
+melde
+melden
+meldend
+meldende
+meldendem
+meldenden
+meldender
+meldendes
+meldepflichtig
+meldepflichtige
+meldepflichtigem
+meldepflichtigen
+meldepflichtiger
+meldepflichtiges
+meldest
+meldet
+meldete
+meldeten
+meldetest
+meldetet
+melke
+melken
+melkend
+melkende
+melkendem
+melkenden
+melkender
+melkendes
+melkst
+melkt
+melkte
+melkten
+melktest
+melktet
+melodisch
+melodische
+melodischem
+melodischen
+melodischer
+melodisches
+melodiös
+melodiöse
+melodiösem
+melodiösen
+melodiöser
+melodiöses
+melodramatisch
+melodramatische
+melodramatischem
+melodramatischen
+melodramatischer
+melodramatisches
+memoriere
+memorieren
+memorierend
+memorierende
+memorierendem
+memorierenden
+memorierender
+memorierendes
+memorierst
+memoriert
+memorierte
+memoriertem
+memorierten
+memorierter
+memoriertes
+memoriertest
+memoriertet
+menge
+mengen
+mengenmäßig
+mengenmäßige
+mengenmäßigem
+mengenmäßigen
+mengenmäßiger
+mengenmäßiges
+mengst
+mengt
+mengte
+mengten
+mengtest
+mengtet
+menschenfreundlich
+menschenfreundliche
+menschenfreundlichem
+menschenfreundlichen
+menschenfreundlicher
+menschenfreundliches
+menschenleer
+menschenleere
+menschenleerem
+menschenleeren
+menschenleerer
+menschenleeres
+menschenmöglich
+menschenmögliche
+menschenmöglichem
+menschenmöglichen
+menschenmöglicher
+menschenmögliches
+menschenscheu
+menschenscheue
+menschenscheuem
+menschenscheuen
+menschenscheuer
+menschenscheuere
+menschenscheuerem
+menschenscheueren
+menschenscheuerer
+menschenscheueres
+menschenscheues
+menschenscheueste
+menschenscheuestem
+menschenscheuesten
+menschenscheuester
+menschenscheuestes
+menschenscheuste
+menschenscheustem
+menschenscheusten
+menschenscheuster
+menschenscheustes
+menschenspezifisch
+menschenspezifische
+menschenspezifischem
+menschenspezifischen
+menschenspezifischer
+menschenspezifisches
+menschenunwürdig
+menschenunwürdige
+menschenunwürdigem
+menschenunwürdigen
+menschenunwürdiger
+menschenunwürdigere
+menschenunwürdigerem
+menschenunwürdigeren
+menschenunwürdigerer
+menschenunwürdigeres
+menschenunwürdiges
+menschenunwürdigste
+menschenunwürdigstem
+menschenunwürdigsten
+menschenunwürdigster
+menschenunwürdigstes
+menschenwürdig
+menschenwürdige
+menschenwürdigem
+menschenwürdigen
+menschenwürdiger
+menschenwürdigere
+menschenwürdigerem
+menschenwürdigeren
+menschenwürdigerer
+menschenwürdigeres
+menschenwürdiges
+menschenwürdigste
+menschenwürdigstem
+menschenwürdigsten
+menschenwürdigster
+menschenwürdigstes
+menschenähnlich
+menschenähnliche
+menschenähnlichem
+menschenähnlichen
+menschenähnlicher
+menschenähnliches
+menschlich
+menschliche
+menschlichem
+menschlichen
+menschlicher
+menschlichere
+menschlicherem
+menschlicheren
+menschlicherer
+menschlicheres
+menschliches
+menschlichste
+menschlichstem
+menschlichsten
+menschlichster
+menschlichstes
+menügesteuert
+menügesteuerte
+menügesteuertem
+menügesteuerten
+menügesteuerter
+menügesteuertes
+merk
+merkantil
+merkantile
+merkantilem
+merkantilen
+merkantiler
+merkantiles
+merkbar
+merkbare
+merkbarem
+merkbaren
+merkbarer
+merkbares
+merke
+merken
+merkend
+merkende
+merkendem
+merkenden
+merkender
+merkendes
+merklich
+merkliche
+merklichem
+merklichen
+merklicher
+merkliches
+merkmalsarm
+merkmalsarme
+merkmalsarmem
+merkmalsarmen
+merkmalsarmer
+merkmalsarmes
+merkst
+merkt
+merkte
+merkten
+merktest
+merktet
+merkwürdig
+merkwürdige
+merkwürdigem
+merkwürdigen
+merkwürdiger
+merkwürdigere
+merkwürdigerem
+merkwürdigeren
+merkwürdigerer
+merkwürdigeres
+merkwürdigerweise
+merkwürdiges
+merkwürdigste
+merkwürdigstem
+merkwürdigsten
+merkwürdigster
+merkwürdigstes
+messbar
+messbare
+messbarem
+messbaren
+messbarer
+messbares
+messe
+messen
+messend
+messende
+messendem
+messenden
+messender
+messendes
+messerscharf
+messerscharfe
+messerscharfem
+messerscharfen
+messerscharfer
+messerscharfes
+messt
+messtechnisch
+messtechnische
+messtechnischem
+messtechnischen
+messtechnischer
+messtechnisches
+metabol
+metabolisch
+metabolische
+metabolischem
+metabolischen
+metabolischer
+metabolisches
+metallen
+metallene
+metallenem
+metallenen
+metallener
+metallenes
+metallisch
+metallische
+metallischem
+metallischen
+metallischer
+metallisches
+metallisiert
+metallisierte
+metallisiertem
+metallisierten
+metallisierter
+metallisiertes
+metallurgisch
+metallurgische
+metallurgischem
+metallurgischen
+metallurgischer
+metallurgisches
+metaphysisch
+metaphysische
+metaphysischem
+metaphysischen
+metaphysischer
+metaphysisches
+meteorologisch
+meteorologische
+meteorologischem
+meteorologischen
+meteorologischer
+meteorologisches
+meterweise
+methodisch
+methodische
+methodischem
+methodischen
+methodischer
+methodischere
+methodischerem
+methodischeren
+methodischerer
+methodischeres
+methodisches
+methodischste
+methodischstem
+methodischsten
+methodischster
+methodischstes
+methodologisch
+methodologische
+methodologischem
+methodologischen
+methodologischer
+methodologisches
+metrisch
+metrische
+metrischem
+metrischen
+metrischer
+metrisches
+meuchele
+meucheln
+meuchelnd
+meuchelnde
+meuchelndem
+meuchelnden
+meuchelnder
+meuchelndes
+meuchelst
+meuchelt
+meuchelte
+meuchelten
+meucheltest
+meucheltet
+meuchle
+meuchlerisch
+meuchlerische
+meuchlerischem
+meuchlerischen
+meuchlerischer
+meuchlerisches
+meutere
+meutern
+meuternd
+meuternde
+meuterndem
+meuternden
+meuternder
+meuterndes
+meuterst
+meutert
+meuterte
+meuterten
+meutertest
+meutertet
+meutre
+mexikanisch
+mexikanische
+mexikanischem
+mexikanischen
+mexikanischer
+mexikanisches
+miaue
+miauen
+miauend
+miauende
+miauendem
+miauenden
+miauender
+miauendes
+miaust
+miaut
+miaute
+miauten
+miautest
+miautet
+mich
+mickerig
+mickerige
+mickerigem
+mickerigen
+mickeriger
+mickeriges
+mickrig
+mickrige
+mickrigem
+mickrigen
+mickriger
+mickriges
+mied
+mieden
+miedest
+miedet
+miedst
+mies
+miese
+miesem
+miesen
+mieser
+mieses
+mietbar
+mietbare
+mietbarem
+mietbaren
+mietbarer
+mietbares
+miete
+mieten
+mietend
+mietende
+mietendem
+mietenden
+mietender
+mietendes
+mietest
+mietet
+mietete
+mieteten
+mietetest
+mietetet
+mietähnlich
+mietähnliche
+mietähnlichem
+mietähnlichen
+mietähnlicher
+mietähnliches
+mikrobiologisch
+mikrobiologische
+mikrobiologischem
+mikrobiologischen
+mikrobiologischer
+mikrobiologisches
+mikroelektronisch
+mikroelektronische
+mikroelektronischem
+mikroelektronischen
+mikroelektronischer
+mikroelektronisches
+mikroskopisch
+mikroskopische
+mikroskopischem
+mikroskopischen
+mikroskopischer
+mikroskopisches
+mikroverfilmt
+mikroverfilmte
+mikroverfilmtem
+mikroverfilmten
+mikroverfilmter
+mikroverfilmtes
+milchig
+milchige
+milchigem
+milchigen
+milchiger
+milchiges
+mild
+milde
+mildem
+milden
+milder
+mildere
+milderem
+milderen
+milderer
+milderes
+mildern
+mildernd
+mildernde
+milderndem
+mildernden
+mildernder
+milderndes
+milderst
+mildert
+milderte
+milderten
+mildertest
+mildertet
+mildes
+mildre
+mildste
+mildstem
+mildsten
+mildster
+mildstes
+mildtätig
+mildtätige
+mildtätigem
+mildtätigen
+mildtätiger
+mildtätigere
+mildtätigerem
+mildtätigeren
+mildtätigerer
+mildtätigeres
+mildtätiges
+mildtätigste
+mildtätigstem
+mildtätigsten
+mildtätigster
+mildtätigstes
+milieubedingt
+milieubedingte
+milieubedingtem
+milieubedingten
+milieubedingter
+milieubedingtes
+militant
+militante
+militantem
+militanten
+militanter
+militantes
+militaristisch
+militaristische
+militaristischem
+militaristischen
+militaristischer
+militaristisches
+militärisch
+militärische
+militärischem
+militärischen
+militärischer
+militärisches
+millimeterdünn
+millimeterdünne
+millimeterdünnem
+millimeterdünnen
+millimeterdünner
+millimeterdünnes
+millimeterweise
+millionenfach
+millionenfache
+millionenfachem
+millionenfachen
+millionenfacher
+millionenfaches
+millionenschwer
+millionenschwere
+millionenschwerem
+millionenschweren
+millionenschwerer
+millionenschweres
+millionste
+millionstem
+millionsten
+millionster
+millionstes
+mimisch
+mimische
+mimischem
+mimischen
+mimischer
+mimisches
+minder
+minderbemittelt
+minderbemittelte
+minderbemitteltem
+minderbemittelten
+minderbemittelter
+minderbemitteltes
+mindere
+minderem
+minderen
+minderer
+minderes
+minderjährig
+minderjährige
+minderjährigem
+minderjährigen
+minderjähriger
+minderjähriges
+mindern
+mindernd
+mindernde
+minderndem
+mindernden
+mindernder
+minderndes
+minderst
+mindert
+minderte
+minderten
+mindertest
+mindertet
+minderwertig
+minderwertige
+minderwertigem
+minderwertigen
+minderwertiger
+minderwertigere
+minderwertigerem
+minderwertigeren
+minderwertigerer
+minderwertigeres
+minderwertiges
+minderwertigste
+minderwertigstem
+minderwertigsten
+minderwertigster
+minderwertigstes
+mindestens
+mindre
+mineralisch
+mineralische
+mineralischem
+mineralischen
+mineralischer
+mineralisches
+minimal
+minimale
+minimalem
+minimalen
+minimaler
+minimalere
+minimalerem
+minimaleren
+minimalerer
+minimaleres
+minimales
+minimalisiere
+minimalisieren
+minimalisierend
+minimalisierende
+minimalisierendem
+minimalisierenden
+minimalisierender
+minimalisierendes
+minimalisierst
+minimalisiert
+minimalisierte
+minimalisiertem
+minimalisierten
+minimalisierter
+minimalisiertes
+minimalisiertest
+minimalisiertet
+minimalste
+minimalstem
+minimalsten
+minimalster
+minimalstes
+minimiere
+minimieren
+minimierend
+minimierende
+minimierendem
+minimierenden
+minimierender
+minimierendes
+minimierst
+minimiert
+minimierte
+minimiertem
+minimierten
+minimierter
+minimiertes
+minimiertest
+minimiertet
+minne
+minnen
+minnend
+minnende
+minnendem
+minnenden
+minnender
+minnendes
+minnst
+minnt
+minnte
+minnten
+minntest
+minntet
+minoisch
+minoische
+minoischem
+minoischen
+minoischer
+minoisches
+minus
+minutenlang
+minutenlange
+minutenlangem
+minutenlangen
+minutenlanger
+minutenlanges
+minutenschnell
+minutenschnelle
+minutenschnellem
+minutenschnellen
+minutenschneller
+minutenschnelles
+minutiös
+minutiöse
+minutiösem
+minutiösen
+minutiöser
+minutiöses
+minütig
+minütige
+minütigem
+minütigen
+minütiger
+minütiges
+mir
+mischbar
+mischbare
+mischbarem
+mischbaren
+mischbarer
+mischbares
+mische
+mischen
+mischend
+mischende
+mischendem
+mischenden
+mischender
+mischendes
+mischest
+mischst
+mischt
+mischte
+mischten
+mischtest
+mischtet
+miserabel
+miserabelste
+miserabelstem
+miserabelsten
+miserabelster
+miserabelstes
+miserable
+miserablem
+miserablen
+miserabler
+miserablere
+miserablerem
+miserableren
+miserablerer
+miserableres
+miserables
+miss
+missachte
+missachten
+missachtend
+missachtende
+missachtendem
+missachtenden
+missachtender
+missachtendes
+missachtest
+missachtet
+missachtete
+missachtetem
+missachteten
+missachteter
+missachtetes
+missachtetest
+missachtetet
+missbehage
+missbehagen
+missbehagend
+missbehagende
+missbehagendem
+missbehagenden
+missbehagender
+missbehagendes
+missbehagst
+missbehagt
+missbehagte
+missbehagten
+missbehagtest
+missbehagtet
+missbillige
+missbilligen
+missbilligend
+missbilligende
+missbilligendem
+missbilligenden
+missbilligender
+missbilligendes
+missbilligst
+missbilligt
+missbilligte
+missbilligtem
+missbilligten
+missbilligter
+missbilligtes
+missbilligtest
+missbilligtet
+missbrauche
+missbrauchen
+missbrauchend
+missbrauchende
+missbrauchendem
+missbrauchenden
+missbrauchender
+missbrauchendes
+missbrauchst
+missbraucht
+missbrauchte
+missbrauchtem
+missbrauchten
+missbrauchter
+missbrauchtes
+missbrauchtest
+missbrauchtet
+missbräuchlich
+missbräuchliche
+missbräuchlichem
+missbräuchlichen
+missbräuchlicher
+missbräuchliches
+missdeute
+missdeuten
+missdeutend
+missdeutende
+missdeutendem
+missdeutenden
+missdeutender
+missdeutendes
+missdeutest
+missdeutet
+missdeutete
+missdeutetem
+missdeuteten
+missdeuteter
+missdeutetes
+missdeutetest
+missdeutetet
+misse
+missen
+missend
+missende
+missendem
+missenden
+missender
+missendes
+missest
+missfalle
+missfallen
+missfallend
+missfallende
+missfallendem
+missfallenden
+missfallender
+missfallendes
+missfallt
+missfiel
+missfielen
+missfielst
+missfielt
+missfällst
+missfällt
+missgebildet
+missgebildete
+missgebildetem
+missgebildeten
+missgebildeter
+missgebildetes
+missgelaunt
+missgelaunte
+missgelauntem
+missgelaunten
+missgelaunter
+missgelauntes
+missgestimmt
+missgestimmte
+missgestimmtem
+missgestimmten
+missgestimmter
+missgestimmtes
+missglücke
+missglücken
+missglückend
+missglückende
+missglückendem
+missglückenden
+missglückender
+missglückendes
+missglückst
+missglückt
+missglückte
+missglücktem
+missglückten
+missglückter
+missglücktes
+missglücktest
+missglücktet
+missgönne
+missgönnen
+missgönnend
+missgönnende
+missgönnendem
+missgönnenden
+missgönnender
+missgönnendes
+missgönnst
+missgönnt
+missgönnte
+missgönntem
+missgönnten
+missgönnter
+missgönntes
+missgönntest
+missgönntet
+missgünstig
+missgünstige
+missgünstigem
+missgünstigen
+missgünstiger
+missgünstigere
+missgünstigerem
+missgünstigeren
+missgünstigerer
+missgünstigeres
+missgünstiges
+missgünstigste
+missgünstigstem
+missgünstigsten
+missgünstigster
+missgünstigstes
+misshandele
+misshandeln
+misshandelnd
+misshandelnde
+misshandelndem
+misshandelnden
+misshandelnder
+misshandelndes
+misshandelst
+misshandelt
+misshandelte
+misshandeltem
+misshandelten
+misshandelter
+misshandeltes
+misshandeltest
+misshandeltet
+misshandle
+missioniere
+missionieren
+missionierend
+missionierende
+missionierendem
+missionierenden
+missionierender
+missionierendes
+missionierst
+missioniert
+missionierte
+missioniertem
+missionierten
+missionierter
+missioniertes
+missioniertest
+missioniertet
+misslang
+misslangen
+misslangst
+misslangt
+misslich
+missliche
+misslichem
+misslichen
+misslicher
+missliches
+misslinge
+misslingen
+misslingend
+misslingende
+misslingendem
+misslingenden
+misslingender
+misslingendes
+misslingst
+misslingt
+misslungen
+misslungene
+misslungenem
+misslungenen
+misslungener
+misslungenes
+missmutig
+missmutige
+missmutigem
+missmutigen
+missmutiger
+missmutigere
+missmutigerem
+missmutigeren
+missmutigerer
+missmutigeres
+missmutiges
+missmutigste
+missmutigstem
+missmutigsten
+missmutigster
+missmutigstes
+missraten
+missratene
+missratenem
+missratenen
+missratener
+missratenere
+missratenerem
+missrateneren
+missratenerer
+missrateneres
+missratenes
+missratenste
+missratenstem
+missratensten
+missratenster
+missratenstes
+misst
+misste
+missten
+misstest
+misstet
+misstraue
+misstrauen
+misstrauend
+misstrauende
+misstrauendem
+misstrauenden
+misstrauender
+misstrauendes
+misstrauisch
+misstrauische
+misstrauischem
+misstrauischen
+misstrauischer
+misstrauischere
+misstrauischerem
+misstrauischeren
+misstrauischerer
+misstrauischeres
+misstrauisches
+misstrauischste
+misstrauischstem
+misstrauischsten
+misstrauischster
+misstrauischstes
+misstraust
+misstraut
+misstraute
+misstrauten
+misstrautest
+misstrautet
+misstöne
+misstönen
+misstönend
+misstönende
+misstönendem
+misstönenden
+misstönender
+misstönendes
+misstönst
+misstönt
+misstönte
+misstönten
+misstöntest
+misstöntet
+missvergnügt
+missvergnügte
+missvergnügtem
+missvergnügten
+missvergnügter
+missvergnügtes
+missverstand
+missverstanden
+missverstandene
+missverstandenem
+missverstandenen
+missverstandener
+missverstandenes
+missverstandest
+missverstandet
+missverstehe
+missverstehen
+missverstehend
+missverstehende
+missverstehendem
+missverstehenden
+missverstehender
+missverstehendes
+missverstehst
+missversteht
+missverständlich
+missverständliche
+missverständlichem
+missverständlichen
+missverständlicher
+missverständliches
+misszuverstehen
+misszuverstehend
+misszuverstehende
+misszuverstehendem
+misszuverstehenden
+misszuverstehender
+misszuverstehendes
+miste
+misten
+mistend
+mistende
+mistendem
+mistenden
+mistender
+mistendes
+mistest
+mistet
+mistete
+misteten
+mistetest
+mistetet
+mit
+mitangeklagt
+mitangeklagte
+mitangeklagtem
+mitangeklagten
+mitangeklagter
+mitangeklagtes
+mitangesehen
+mitangesehene
+mitangesehenem
+mitangesehenen
+mitangesehener
+mitangesehenes
+mitarbeite
+mitarbeiten
+mitarbeitend
+mitarbeitende
+mitarbeitendem
+mitarbeitenden
+mitarbeitender
+mitarbeitendes
+mitarbeiterorientiert
+mitarbeiterorientierte
+mitarbeiterorientiertem
+mitarbeiterorientierten
+mitarbeiterorientierter
+mitarbeiterorientiertes
+mitarbeitest
+mitarbeitet
+mitarbeitete
+mitarbeiteten
+mitarbeitetest
+mitarbeitetet
+mitbelastet
+mitbelastete
+mitbelastetem
+mitbelasteten
+mitbelasteter
+mitbelastetes
+mitbenutzt
+mitbenutzte
+mitbenutztem
+mitbenutzten
+mitbenutzter
+mitbenutztes
+mitbeobachtet
+mitbeobachtete
+mitbeobachtetem
+mitbeobachteten
+mitbeobachteter
+mitbeobachtetes
+mitbestellt
+mitbestellte
+mitbestelltem
+mitbestellten
+mitbestellter
+mitbestelltes
+mitbestimme
+mitbestimmen
+mitbestimmend
+mitbestimmende
+mitbestimmendem
+mitbestimmenden
+mitbestimmender
+mitbestimmendes
+mitbestimmst
+mitbestimmt
+mitbestimmte
+mitbestimmtem
+mitbestimmten
+mitbestimmter
+mitbestimmtes
+mitbestimmtest
+mitbestimmtet
+mitbeteiligt
+mitbeteiligte
+mitbeteiligtem
+mitbeteiligten
+mitbeteiligter
+mitbeteiligtes
+mitbetrifft
+mitbewirke
+mitbewirken
+mitbewirkst
+mitbewirkt
+mitbewirkte
+mitbewirkten
+mitbewirktest
+mitbewirktet
+mitbringe
+mitbringen
+mitbringend
+mitbringende
+mitbringendem
+mitbringenden
+mitbringender
+mitbringendes
+mitbringst
+mitbringt
+mitdenke
+mitdenken
+mitdenkend
+mitdenkende
+mitdenkendem
+mitdenkenden
+mitdenkender
+mitdenkendes
+mitdenkst
+mitdenkt
+miteinander
+miteinbezogen
+miteinbezogene
+miteinbezogenem
+miteinbezogenen
+miteinbezogener
+miteinbezogenes
+miteindrucke
+miteindrucken
+miteindruckend
+miteindruckende
+miteindruckendem
+miteindruckenden
+miteindruckender
+miteindruckendes
+miteindruckst
+miteindruckt
+miteindruckte
+miteindruckten
+miteindrucktest
+miteindrucktet
+miteinkalkuliert
+miteinkalkulierte
+miteinkalkuliertem
+miteinkalkulierten
+miteinkalkulierter
+miteinkalkuliertes
+mitempfinde
+mitempfinden
+mitempfindend
+mitempfindende
+mitempfindendem
+mitempfindenden
+mitempfindender
+mitempfindendes
+mitempfindest
+mitempfindet
+mitentwickelt
+mitentwickelte
+mitentwickeltem
+mitentwickelten
+mitentwickelter
+mitentwickeltes
+miterlebbar
+miterlebbare
+miterlebbarem
+miterlebbaren
+miterlebbarer
+miterlebbares
+miterlebe
+miterleben
+miterlebend
+miterlebende
+miterlebendem
+miterlebenden
+miterlebender
+miterlebendes
+miterlebst
+miterlebt
+miterlebte
+miterlebtem
+miterlebten
+miterlebter
+miterlebtes
+miterlebtest
+miterlebtet
+mitfahre
+mitfahren
+mitfahrend
+mitfahrende
+mitfahrendem
+mitfahrenden
+mitfahrender
+mitfahrendes
+mitfahrt
+mitfuhr
+mitfuhren
+mitfuhrst
+mitfuhrt
+mitfühle
+mitfühlen
+mitfühlend
+mitfühlende
+mitfühlendem
+mitfühlenden
+mitfühlender
+mitfühlendes
+mitfühlst
+mitfühlt
+mitfühlte
+mitfühlten
+mitfühltest
+mitfühltet
+mitgab
+mitgaben
+mitgabst
+mitgabt
+mitgearbeitet
+mitgebe
+mitgeben
+mitgebend
+mitgebende
+mitgebendem
+mitgebenden
+mitgebender
+mitgebendes
+mitgebracht
+mitgebrachte
+mitgebrachtem
+mitgebrachten
+mitgebrachter
+mitgebrachtes
+mitgebt
+mitgedruckt
+mitgefahren
+mitgefahrene
+mitgefahrenem
+mitgefahrenen
+mitgefahrener
+mitgefahrenes
+mitgefangen
+mitgefangene
+mitgefangenem
+mitgefangenen
+mitgefangener
+mitgefangenes
+mitgefiebert
+mitgefühlt
+mitgeführt
+mitgeführte
+mitgeführtem
+mitgeführten
+mitgeführter
+mitgeführtes
+mitgegangen
+mitgegangene
+mitgegangenem
+mitgegangenen
+mitgegangener
+mitgegangenes
+mitgegeben
+mitgegebene
+mitgegebenem
+mitgegebenen
+mitgegebener
+mitgegebenes
+mitgehalten
+mitgehaltene
+mitgehaltenem
+mitgehaltenen
+mitgehaltener
+mitgehaltenes
+mitgehe
+mitgehen
+mitgehend
+mitgehende
+mitgehendem
+mitgehenden
+mitgehender
+mitgehendes
+mitgehst
+mitgeht
+mitgehört
+mitgehörte
+mitgehörtem
+mitgehörten
+mitgehörter
+mitgehörtes
+mitgekommen
+mitgekommene
+mitgekommenem
+mitgekommenen
+mitgekommener
+mitgekommenes
+mitgekriegt
+mitgeliefert
+mitgelieferte
+mitgeliefertem
+mitgelieferten
+mitgelieferter
+mitgeliefertes
+mitgemacht
+mitgemachte
+mitgemachtem
+mitgemachten
+mitgemachter
+mitgemachtes
+mitgenommen
+mitgenommene
+mitgenommenem
+mitgenommenen
+mitgenommener
+mitgenommenes
+mitgeprägt
+mitgeredet
+mitgereist
+mitgereiste
+mitgereistem
+mitgereisten
+mitgereister
+mitgereistes
+mitgerissen
+mitgerissene
+mitgerissenem
+mitgerissenen
+mitgerissener
+mitgerissenes
+mitgeschleift
+mitgeschleifte
+mitgeschleiftem
+mitgeschleiften
+mitgeschleifter
+mitgeschleiftes
+mitgeschleppt
+mitgeschleppte
+mitgeschlepptem
+mitgeschleppten
+mitgeschleppter
+mitgeschlepptes
+mitgespielt
+mitgestalte
+mitgestalten
+mitgestaltend
+mitgestaltende
+mitgestaltendem
+mitgestaltenden
+mitgestaltender
+mitgestaltendes
+mitgestaltest
+mitgestaltet
+mitgestaltete
+mitgestaltetem
+mitgestalteten
+mitgestalteter
+mitgestaltetes
+mitgestaltetest
+mitgestaltetet
+mitgesteuert
+mitgeteilt
+mitgeteilte
+mitgeteiltem
+mitgeteilten
+mitgeteilter
+mitgeteiltes
+mitgewirkt
+mitgezählt
+mitgibst
+mitgibt
+mithandele
+mithandeln
+mithandelnd
+mithandelnde
+mithandelndem
+mithandelnden
+mithandelnder
+mithandelndes
+mithandelst
+mithandelt
+mithandelte
+mithandelten
+mithandeltest
+mithandeltet
+mithandle
+mithelfe
+mithelfen
+mithelfend
+mithelfende
+mithelfendem
+mithelfenden
+mithelfender
+mithelfendes
+mithelft
+mithilfe
+mithin
+mitjubele
+mitjubeln
+mitjubelnd
+mitjubelnde
+mitjubelndem
+mitjubelnden
+mitjubelnder
+mitjubelndes
+mitjubelst
+mitjubelt
+mitjubelte
+mitjubelten
+mitjubeltest
+mitjubeltet
+mitjuble
+mitkam
+mitkamen
+mitkamst
+mitkamt
+mitkomme
+mitkommen
+mitkommend
+mitkommende
+mitkommendem
+mitkommenden
+mitkommender
+mitkommendes
+mitkommst
+mitkommt
+mitkriege
+mitkriegen
+mitkriegend
+mitkriegende
+mitkriegendem
+mitkriegenden
+mitkriegender
+mitkriegendes
+mitkriegst
+mitkriegt
+mitkriegte
+mitkriegten
+mitkriegtest
+mitkriegtet
+mitkäme
+mitkämen
+mitkämst
+mitkämt
+mitleide
+mitleiden
+mitleidend
+mitleidende
+mitleidendem
+mitleidenden
+mitleidender
+mitleidendes
+mitleidest
+mitleidet
+mitleidig
+mitleidige
+mitleidigem
+mitleidigen
+mitleidiger
+mitleidiges
+mitleidlos
+mitleidlose
+mitleidlosem
+mitleidlosen
+mitleidloser
+mitleidlosere
+mitleidloserem
+mitleidloseren
+mitleidloserer
+mitleidloseres
+mitleidloses
+mitleidloseste
+mitleidlosestem
+mitleidlosesten
+mitleidlosester
+mitleidlosestes
+mitleidvoll
+mitleidvolle
+mitleidvollem
+mitleidvollen
+mitleidvoller
+mitleidvolles
+mitlese
+mitlesen
+mitlesend
+mitlesende
+mitlesendem
+mitlesenden
+mitlesender
+mitlesendes
+mitlest
+mitliefere
+mitliefern
+mitlieferst
+mitliefert
+mitlieferte
+mitlieferten
+mitliefertest
+mitliefertet
+mitliefre
+mitmache
+mitmachen
+mitmachend
+mitmachende
+mitmachendem
+mitmachenden
+mitmachender
+mitmachendes
+mitmachst
+mitmacht
+mitmachte
+mitmachten
+mitmachtest
+mitmachtet
+mitmenschlich
+mitmenschliche
+mitmenschlichem
+mitmenschlichen
+mitmenschlicher
+mitmenschliches
+mitmische
+mitmischen
+mitmischend
+mitmischende
+mitmischendem
+mitmischenden
+mitmischender
+mitmischendes
+mitmischest
+mitmischst
+mitmischt
+mitmischte
+mitmischten
+mitmischtest
+mitmischtet
+mitnahm
+mitnahmen
+mitnahmst
+mitnahmt
+mitnehme
+mitnehmen
+mitnehmend
+mitnehmende
+mitnehmendem
+mitnehmenden
+mitnehmender
+mitnehmendes
+mitnehmt
+mitrede
+mitreden
+mitredend
+mitredende
+mitredendem
+mitredenden
+mitredender
+mitredendes
+mitredest
+mitredet
+mitredete
+mitredeten
+mitredetest
+mitredetet
+mitreiße
+mitreißen
+mitreißend
+mitreißende
+mitreißendem
+mitreißenden
+mitreißender
+mitreißendes
+mitreißest
+mitreißt
+mitsamt
+mitschuldig
+mitschuldige
+mitschuldigem
+mitschuldigen
+mitschuldiger
+mitschuldiges
+mitspringe
+mitspringen
+mitspringend
+mitspringende
+mitspringendem
+mitspringenden
+mitspringender
+mitspringendes
+mitspringst
+mitspringt
+mittags
+mitteile
+mitteilen
+mitteilend
+mitteilende
+mitteilendem
+mitteilenden
+mitteilender
+mitteilendes
+mitteilsam
+mitteilsame
+mitteilsamem
+mitteilsamen
+mitteilsamer
+mitteilsames
+mitteilst
+mitteilt
+mitteilte
+mitteilten
+mitteiltest
+mitteiltet
+mitteilungsgemäß
+mitteilungsgemäße
+mitteilungsgemäßem
+mitteilungsgemäßen
+mitteilungsgemäßer
+mitteilungsgemäßes
+mittelalterlich
+mittelalterliche
+mittelalterlichem
+mittelalterlichen
+mittelalterlicher
+mittelalterliches
+mittelbar
+mittelbare
+mittelbarem
+mittelbaren
+mittelbarer
+mittelbares
+mittelblau
+mittelblaue
+mittelblauem
+mittelblauen
+mittelblauer
+mittelblaues
+mitteldeutsch
+mitteldeutsche
+mitteldeutschem
+mitteldeutschen
+mitteldeutscher
+mitteldeutsches
+mittele
+mitteleuropäisch
+mitteleuropäische
+mitteleuropäischem
+mitteleuropäischen
+mitteleuropäischer
+mitteleuropäisches
+mittelflach
+mittelflache
+mittelflachem
+mittelflachen
+mittelflacher
+mittelflaches
+mittelfristig
+mittelfristige
+mittelfristigem
+mittelfristigen
+mittelfristiger
+mittelfristiges
+mittelgroß
+mittelgroße
+mittelgroßem
+mittelgroßen
+mittelgroßer
+mittelgroßes
+mittelklassig
+mittelklassige
+mittelklassigem
+mittelklassigen
+mittelklassiger
+mittelklassiges
+mittelkurz
+mittelkurze
+mittelkurzem
+mittelkurzen
+mittelkurzer
+mittelkurzes
+mittellang
+mittellange
+mittellangem
+mittellangen
+mittellanger
+mittellanges
+mittellos
+mittellose
+mittellosem
+mittellosen
+mittelloser
+mittelloses
+mittelminoisch
+mittelminoische
+mittelminoischem
+mittelminoischen
+mittelminoischer
+mittelminoisches
+mittelmykenisch
+mittelmykenische
+mittelmykenischem
+mittelmykenischen
+mittelmykenischer
+mittelmykenisches
+mittelmäßig
+mittelmäßige
+mittelmäßigem
+mittelmäßigen
+mittelmäßiger
+mittelmäßigere
+mittelmäßigerem
+mittelmäßigeren
+mittelmäßigerer
+mittelmäßigeres
+mittelmäßiges
+mittelmäßigste
+mittelmäßigstem
+mittelmäßigsten
+mittelmäßigster
+mittelmäßigstes
+mitteln
+mittelnd
+mittelnde
+mittelndem
+mittelnden
+mittelnder
+mittelndes
+mittels
+mittelschwer
+mittelschwere
+mittelschwerem
+mittelschweren
+mittelschwerer
+mittelschweres
+mittelst
+mittelt
+mittelte
+mittelten
+mitteltest
+mitteltet
+mittelträge
+mittelträgem
+mittelträgen
+mittelträger
+mittelträges
+mitten
+mittendrin
+mittig
+mittige
+mittigem
+mittigen
+mittiger
+mittiges
+mittle
+mittlere
+mittlerem
+mittleren
+mittlerer
+mittleres
+mittlerweile
+mittrage
+mittragen
+mittragend
+mittragende
+mittragendem
+mittragenden
+mittragender
+mittragendes
+mittragt
+mittwochs
+mittäglich
+mittägliche
+mittäglichem
+mittäglichen
+mittäglicher
+mittägliches
+mitunter
+mitverantwortlich
+mitverantwortliche
+mitverantwortlichem
+mitverantwortlichen
+mitverantwortlicher
+mitverantwortliches
+mitverarbeite
+mitverarbeiten
+mitverarbeitend
+mitverarbeitende
+mitverarbeitendem
+mitverarbeitenden
+mitverarbeitender
+mitverarbeitendes
+mitverarbeitest
+mitverarbeitet
+mitverarbeitete
+mitverarbeitetem
+mitverarbeiteten
+mitverarbeiteter
+mitverarbeitetes
+mitverarbeitetest
+mitverarbeitetet
+mitversorge
+mitversorgen
+mitversorgend
+mitversorgende
+mitversorgendem
+mitversorgenden
+mitversorgender
+mitversorgendes
+mitversorgst
+mitversorgt
+mitversorgte
+mitversorgtem
+mitversorgten
+mitversorgter
+mitversorgtes
+mitversorgtest
+mitversorgtet
+mitverwende
+mitverwenden
+mitverwendend
+mitverwendende
+mitverwendendem
+mitverwendenden
+mitverwendender
+mitverwendendes
+mitverwendest
+mitverwendet
+mitverwendete
+mitverwendetem
+mitverwendeten
+mitverwendeter
+mitverwendetes
+mitverwendetest
+mitverwendetet
+mitwirke
+mitwirken
+mitwirkend
+mitwirkende
+mitwirkendem
+mitwirkenden
+mitwirkender
+mitwirkendes
+mitwirkst
+mitwirkt
+mitwirkte
+mitwirkten
+mitwirktest
+mitwirktet
+mitwisse
+mitwissen
+mitwissend
+mitwissende
+mitwissendem
+mitwissenden
+mitwissender
+mitwissendes
+mitwisst
+mitziehe
+mitziehen
+mitziehend
+mitziehende
+mitziehendem
+mitziehenden
+mitziehender
+mitziehendes
+mitziehst
+mitzieht
+mitzuarbeiten
+mitzubringen
+mitzubringend
+mitzubringende
+mitzubringendem
+mitzubringenden
+mitzubringender
+mitzubringendes
+mitzuerleben
+mitzuerlebend
+mitzuerlebende
+mitzuerlebendem
+mitzuerlebenden
+mitzuerlebender
+mitzuerlebendes
+mitzufahren
+mitzugeben
+mitzugebend
+mitzugebende
+mitzugebendem
+mitzugebenden
+mitzugebender
+mitzugebendes
+mitzugestalten
+mitzugestaltend
+mitzugestaltende
+mitzugestaltendem
+mitzugestaltenden
+mitzugestaltender
+mitzugestaltendes
+mitzukommen
+mitzumachen
+mitzumachend
+mitzumachende
+mitzumachendem
+mitzumachenden
+mitzumachender
+mitzumachendes
+mitzunehmen
+mitzunehmend
+mitzunehmende
+mitzunehmendem
+mitzunehmenden
+mitzunehmender
+mitzunehmendes
+mitzureißen
+mitzureißend
+mitzureißende
+mitzureißendem
+mitzureißenden
+mitzureißender
+mitzureißendes
+mitzutragen
+mitzutragend
+mitzutragende
+mitzutragendem
+mitzutragenden
+mitzutragender
+mitzutragendes
+mitzuwirken
+mitzuwirkend
+mitzuwirkende
+mitzuwirkendem
+mitzuwirkenden
+mitzuwirkender
+mitzuwirkendes
+mixe
+mixen
+mixend
+mixende
+mixendem
+mixenden
+mixender
+mixendes
+mixest
+mixt
+mixte
+mixten
+mixtest
+mixtet
+mm
+mnt
+mobil
+mobile
+mobilem
+mobilen
+mobiler
+mobilere
+mobilerem
+mobileren
+mobilerer
+mobileres
+mobiles
+mobilgemacht
+mobilgemachte
+mobilgemachtem
+mobilgemachten
+mobilgemachter
+mobilgemachtes
+mobilisierbar
+mobilisierbare
+mobilisierbarem
+mobilisierbaren
+mobilisierbarer
+mobilisierbares
+mobilisiere
+mobilisieren
+mobilisierend
+mobilisierende
+mobilisierendem
+mobilisierenden
+mobilisierender
+mobilisierendes
+mobilisierst
+mobilisiert
+mobilisierte
+mobilisiertem
+mobilisierten
+mobilisierter
+mobilisiertes
+mobilisiertest
+mobilisiertet
+mobilste
+mobilstem
+mobilsten
+mobilster
+mobilstes
+mochte
+mochten
+mochtest
+mochtet
+modebewusst
+modebewusste
+modebewusstem
+modebewussten
+modebewusster
+modebewusstes
+modellbasiert
+modellbasierte
+modellbasiertem
+modellbasierten
+modellbasierter
+modellbasiertes
+modellgestützt
+modellgestützte
+modellgestütztem
+modellgestützten
+modellgestützter
+modellgestütztes
+modellhaft
+modellhafte
+modellhaftem
+modellhaften
+modellhafter
+modellhaftes
+modellierbar
+modellierbare
+modellierbarem
+modellierbaren
+modellierbarer
+modellierbares
+modelliere
+modellieren
+modellierend
+modellierende
+modellierendem
+modellierenden
+modellierender
+modellierendes
+modellierst
+modelliert
+modellierte
+modelliertem
+modellierten
+modellierter
+modelliertes
+modelliertest
+modelliertet
+modellorientiert
+modellorientierte
+modellorientiertem
+modellorientierten
+modellorientierter
+modellorientiertes
+modelltheoretisch
+modelltheoretische
+modelltheoretischem
+modelltheoretischen
+modelltheoretischer
+modelltheoretisches
+modemfähig
+modemfähige
+modemfähigem
+modemfähigen
+modemfähiger
+modemfähiges
+moderat
+moderate
+moderatem
+moderaten
+moderater
+moderates
+modere
+moderiere
+moderieren
+moderierend
+moderierende
+moderierendem
+moderierenden
+moderierender
+moderierendes
+moderierst
+moderiert
+moderierte
+moderiertem
+moderierten
+moderierter
+moderiertes
+moderiertest
+moderiertet
+moderig
+moderige
+moderigem
+moderigen
+moderiger
+moderiges
+modern
+modernd
+modernde
+moderndem
+modernden
+modernder
+moderndes
+moderne
+modernem
+modernen
+moderner
+modernere
+modernerem
+moderneren
+modernerer
+moderneres
+modernes
+modernisierbar
+modernisierbare
+modernisierbarem
+modernisierbaren
+modernisierbarer
+modernisierbares
+modernisiere
+modernisieren
+modernisierend
+modernisierende
+modernisierendem
+modernisierenden
+modernisierender
+modernisierendes
+modernisierst
+modernisiert
+modernisierte
+modernisiertem
+modernisierten
+modernisierter
+modernisiertes
+modernisiertest
+modernisiertet
+modernste
+modernstem
+modernsten
+modernster
+modernstes
+moderst
+modert
+moderte
+moderten
+modertest
+modertet
+modifizierbar
+modifizierbare
+modifizierbarem
+modifizierbaren
+modifizierbarer
+modifizierbares
+modifiziere
+modifizieren
+modifizierend
+modifizierende
+modifizierendem
+modifizierenden
+modifizierender
+modifizierendes
+modifizierst
+modifiziert
+modifizierte
+modifiziertem
+modifizierten
+modifizierter
+modifiziertes
+modifiziertest
+modifiziertet
+modisch
+modische
+modischem
+modischen
+modischer
+modischere
+modischerem
+modischeren
+modischerer
+modischeres
+modisches
+modischste
+modischstem
+modischsten
+modischster
+modischstes
+modre
+modrig
+modrige
+modrigem
+modrigen
+modriger
+modriges
+modular
+modulare
+modularem
+modularen
+modularer
+modulares
+modularisierbar
+modularisierbare
+modularisierbarem
+modularisierbaren
+modularisierbarer
+modularisierbares
+modularisiere
+modularisieren
+modularisierend
+modularisierende
+modularisierendem
+modularisierenden
+modularisierender
+modularisierendes
+modularisierst
+modularisiert
+modularisierte
+modularisiertem
+modularisierten
+modularisierter
+modularisiertes
+modularisiertest
+modularisiertet
+moduliere
+modulieren
+modulierend
+modulierende
+modulierendem
+modulierenden
+modulierender
+modulierendes
+modulierst
+moduliert
+modulierte
+moduliertem
+modulierten
+modulierter
+moduliertes
+moduliertest
+moduliertet
+modulo
+modulübergreifend
+modulübergreifende
+modulübergreifendem
+modulübergreifenden
+modulübergreifender
+modulübergreifendes
+modulüberschreitend
+modulüberschreitende
+modulüberschreitendem
+modulüberschreitenden
+modulüberschreitender
+modulüberschreitendes
+mogele
+mogeln
+mogelnd
+mogelnde
+mogelndem
+mogelnden
+mogelnder
+mogelndes
+mogelst
+mogelt
+mogelte
+mogelten
+mogeltest
+mogeltet
+mogle
+mohammedanisch
+mohammedanische
+mohammedanischem
+mohammedanischen
+mohammedanischer
+mohammedanisches
+mokiere
+mokieren
+mokierend
+mokierende
+mokierendem
+mokierenden
+mokierender
+mokierendes
+mokierst
+mokiert
+mokierte
+mokierten
+mokiertest
+mokiertet
+molekular
+molekulare
+molekularem
+molekularen
+molekularer
+molekulares
+mollig
+mollige
+molligem
+molligen
+molliger
+molligere
+molligerem
+molligeren
+molligerer
+molligeres
+molliges
+molligste
+molligstem
+molligsten
+molligster
+molligstes
+momentan
+momentane
+momentanem
+momentanen
+momentaner
+momentanes
+monarchisch
+monarchische
+monarchischem
+monarchischen
+monarchischer
+monarchisches
+monatelang
+monatelange
+monatelangem
+monatelangen
+monatelanger
+monatelanges
+monatlich
+monatliche
+monatlichem
+monatlichen
+monatlicher
+monatliches
+monatsweise
+mondän
+mondäne
+mondänem
+mondänen
+mondäner
+mondänes
+monegassisch
+monegassische
+monegassischem
+monegassischen
+monegassischer
+monegassisches
+monetär
+monetäre
+monetärem
+monetären
+monetärer
+monetäres
+mongolisch
+mongolische
+mongolischem
+mongolischen
+mongolischer
+mongolisches
+moniere
+monieren
+monierst
+moniert
+monierte
+moniertem
+monierten
+monierter
+moniertes
+moniertest
+moniertet
+monogam
+monogame
+monogamem
+monogamen
+monogamer
+monogames
+monografisch
+monografische
+monografischem
+monografischen
+monografischer
+monografisches
+monolithisch
+monolithische
+monolithischem
+monolithischen
+monolithischer
+monolithisches
+monopolistisch
+monopolistische
+monopolistischem
+monopolistischen
+monopolistischer
+monopolistisches
+monotheistisch
+monotheistische
+monotheistischem
+monotheistischen
+monotheistischer
+monotheistisches
+monoton
+monotone
+monotonem
+monotonen
+monotoner
+monotones
+monströs
+monströse
+monströsem
+monströsen
+monströser
+monströses
+montags
+montierbar
+montierbare
+montierbarem
+montierbaren
+montierbarer
+montierbares
+montiere
+montieren
+montierend
+montierende
+montierendem
+montierenden
+montierender
+montierendes
+montierst
+montiert
+montierte
+montiertem
+montierten
+montierter
+montiertes
+montiertest
+montiertet
+monumental
+monumentale
+monumentalem
+monumentalen
+monumentaler
+monumentalere
+monumentalerem
+monumentaleren
+monumentalerer
+monumentaleres
+monumentales
+monumentalste
+monumentalstem
+monumentalsten
+monumentalster
+monumentalstes
+moorig
+moorige
+moorigem
+moorigen
+mooriger
+mooriges
+moralisch
+moralische
+moralischem
+moralischen
+moralischer
+moralisches
+moralisiere
+moralisieren
+moralisierend
+moralisierende
+moralisierendem
+moralisierenden
+moralisierender
+moralisierendes
+moralisierst
+moralisiert
+moralisierte
+moralisierten
+moralisiertest
+moralisiertet
+morastig
+morastige
+morastigem
+morastigen
+morastiger
+morastiges
+morde
+morden
+mordend
+mordende
+mordendem
+mordenden
+mordender
+mordendes
+mordest
+mordet
+mordete
+mordeten
+mordetest
+mordetet
+mordsmäßig
+mordsmäßige
+mordsmäßigem
+mordsmäßigen
+mordsmäßiger
+mordsmäßiges
+morgen
+morgenländisch
+morgenländische
+morgenländischem
+morgenländischen
+morgenländischer
+morgenländisches
+morgens
+morgige
+morgigem
+morgigen
+morgiger
+morgiges
+morphologisch
+morphologische
+morphologischem
+morphologischen
+morphologischer
+morphologisches
+morsch
+morsche
+morschem
+morschen
+morscher
+morsches
+mosaikartig
+mosaikartige
+mosaikartigem
+mosaikartigen
+mosaikartiger
+mosaikartiges
+moser
+mosere
+mosern
+mosernd
+mosernde
+moserndem
+mosernden
+mosernder
+moserndes
+moserst
+mosert
+moserte
+moserten
+mosertest
+mosertet
+moskauhörig
+moskauhörige
+moskauhörigem
+moskauhörigen
+moskauhöriger
+moskauhöriges
+moslemisch
+moslemische
+moslemischem
+moslemischen
+moslemischer
+moslemisches
+mosre
+moste
+mosten
+mostend
+mostende
+mostendem
+mostenden
+mostender
+mostendes
+mostest
+mostet
+mostete
+mosteten
+mostetest
+mostetet
+motivierbar
+motivierbare
+motivierbarem
+motivierbaren
+motivierbarer
+motivierbares
+motiviere
+motivieren
+motivierend
+motivierende
+motivierendem
+motivierenden
+motivierender
+motivierendes
+motivierst
+motiviert
+motivierte
+motiviertem
+motivierten
+motivierter
+motiviertes
+motiviertest
+motiviertet
+motorisch
+motorische
+motorischem
+motorischen
+motorischer
+motorisches
+motorisiere
+motorisieren
+motorisierend
+motorisierende
+motorisierendem
+motorisierenden
+motorisierender
+motorisierendes
+motorisierst
+motorisiert
+motorisierte
+motorisiertem
+motorisierten
+motorisierter
+motorisiertes
+motorisiertest
+motorisiertet
+motze
+motzen
+motzend
+motzende
+motzendem
+motzenden
+motzender
+motzendes
+motzest
+motzt
+motzte
+motzten
+motztest
+motztet
+ms
+msec
+muffig
+muffige
+muffigem
+muffigen
+muffiger
+muffiges
+mulmig
+mulmige
+mulmigem
+mulmigen
+mulmiger
+mulmiges
+multifunktional
+multifunktionale
+multifunktionalem
+multifunktionalen
+multifunktionaler
+multifunktionales
+multilateral
+multilaterale
+multilateralem
+multilateralen
+multilateraler
+multilaterales
+multimedial
+multimediale
+multimedialem
+multimedialen
+multimedialer
+multimediales
+multinational
+multinationale
+multinationalem
+multinationalen
+multinationaler
+multinationales
+multipel
+multiple
+multiplem
+multiplen
+multipler
+multiples
+multipliziere
+multiplizieren
+multiplizierend
+multiplizierende
+multiplizierendem
+multiplizierenden
+multiplizierender
+multiplizierendes
+multiplizierst
+multipliziert
+multiplizierte
+multipliziertem
+multiplizierten
+multiplizierter
+multipliziertes
+multipliziertest
+multipliziertet
+mundgerecht
+mundgerechte
+mundgerechtem
+mundgerechten
+mundgerechter
+mundgerechtes
+munkele
+munkeln
+munkelnd
+munkelnde
+munkelndem
+munkelnden
+munkelnder
+munkelndes
+munkelst
+munkelt
+munkelte
+munkelten
+munkeltest
+munkeltet
+munkle
+munter
+muntere
+munterem
+munteren
+munterer
+munterere
+muntererem
+muntereren
+muntererer
+muntereres
+munteres
+munterste
+munterstem
+muntersten
+munterster
+munterstes
+murmele
+murmeln
+murmelnd
+murmelnde
+murmelndem
+murmelnden
+murmelnder
+murmelndes
+murmelst
+murmelt
+murmelte
+murmelten
+murmeltest
+murmeltet
+murmle
+murre
+murren
+murrend
+murrende
+murrendem
+murrenden
+murrender
+murrendes
+murrst
+murrt
+murrte
+murrten
+murrtest
+murrtet
+museumsreif
+museumsreife
+museumsreifem
+museumsreifen
+museumsreifer
+museumsreifes
+musikalisch
+musikalische
+musikalischem
+musikalischen
+musikalischer
+musikalischere
+musikalischerem
+musikalischeren
+musikalischerer
+musikalischeres
+musikalisches
+musikalischste
+musikalischstem
+musikalischsten
+musikalischster
+musikalischstes
+musikliebend
+musikliebende
+musikliebendem
+musikliebenden
+musikliebender
+musikliebendes
+musisch
+musische
+musischem
+musischen
+musischer
+musisches
+musiziere
+musizieren
+musizierend
+musizierende
+musizierendem
+musizierenden
+musizierender
+musizierendes
+musizierst
+musiziert
+musizierte
+musizierten
+musiziertest
+musiziertet
+muss
+musst
+musste
+mussten
+musstest
+musstet
+mustere
+mustergültig
+mustergültige
+mustergültigem
+mustergültigen
+mustergültiger
+mustergültiges
+musterhaft
+musterhafte
+musterhaftem
+musterhaften
+musterhafter
+musterhaftere
+musterhafterem
+musterhafteren
+musterhafterer
+musterhafteres
+musterhaftes
+musterhafteste
+musterhaftestem
+musterhaftesten
+musterhaftester
+musterhaftestes
+mustern
+musternd
+musternde
+musterndem
+musternden
+musternder
+musterndes
+musterst
+mustert
+musterte
+musterten
+mustertest
+mustertet
+mustre
+mute
+muten
+mutend
+mutende
+mutendem
+mutenden
+mutender
+mutendes
+mutest
+mutet
+mutete
+muteten
+mutetest
+mutetet
+mutig
+mutige
+mutigem
+mutigen
+mutiger
+mutigere
+mutigerem
+mutigeren
+mutigerer
+mutigeres
+mutiges
+mutigste
+mutigstem
+mutigsten
+mutigster
+mutigstes
+mutlos
+mutlose
+mutlosem
+mutlosen
+mutloser
+mutlosere
+mutloserem
+mutloseren
+mutloserer
+mutloseres
+mutloses
+mutloseste
+mutlosestem
+mutlosesten
+mutlosester
+mutlosestes
+mutmaße
+mutmaßen
+mutmaßest
+mutmaßlich
+mutmaßliche
+mutmaßlichem
+mutmaßlichen
+mutmaßlicher
+mutmaßliches
+mutmaßt
+mutmaßte
+mutmaßten
+mutmaßtest
+mutmaßtet
+mutterlos
+mutterlose
+mutterlosem
+mutterlosen
+mutterloser
+mutterloses
+mutterseelenallein
+mutwillig
+mutwillige
+mutwilligem
+mutwilligen
+mutwilliger
+mutwilliges
+mysteriös
+mysteriöse
+mysteriösem
+mysteriösen
+mysteriöser
+mysteriöses
+mystisch
+mystische
+mystischem
+mystischen
+mystischer
+mystisches
+mythisch
+mythische
+mythischem
+mythischen
+mythischer
+mythisches
+mythologisch
+mythologische
+mythologischem
+mythologischen
+mythologischer
+mythologisches
+mäanderartig
+mäanderartige
+mäanderartigem
+mäanderartigen
+mäanderartiger
+mäanderartiges
+mäandere
+mäanderförmig
+mäanderförmige
+mäanderförmigem
+mäanderförmigen
+mäanderförmiger
+mäanderförmiges
+mäandern
+mäandernd
+mäandernde
+mäanderndem
+mäandernden
+mäandernder
+mäanderndes
+mäanderst
+mäandert
+mäanderte
+mäanderten
+mäandertest
+mäandertet
+mäandre
+mäandriere
+mäandrieren
+mäandrierend
+mäandrierende
+mäandrierendem
+mäandrierenden
+mäandrierender
+mäandrierendes
+mäandrierst
+mäandriert
+mäandrierte
+mäandriertem
+mäandrierten
+mäandrierter
+mäandriertes
+mäandriertest
+mäandriertet
+mächtig
+mächtige
+mächtigem
+mächtigen
+mächtiger
+mächtigere
+mächtigerem
+mächtigeren
+mächtigerer
+mächtigeres
+mächtiges
+mächtigste
+mächtigstem
+mächtigsten
+mächtigster
+mächtigstes
+mädchenhaft
+mädchenhafte
+mädchenhaftem
+mädchenhaften
+mädchenhafter
+mädchenhaftere
+mädchenhafterem
+mädchenhafteren
+mädchenhafterer
+mädchenhafteres
+mädchenhaftes
+mädchenhafteste
+mädchenhaftestem
+mädchenhaftesten
+mädchenhaftester
+mädchenhaftestes
+mähe
+mähen
+mähend
+mähende
+mähendem
+mähenden
+mähender
+mähendes
+mähst
+mäht
+mähte
+mähten
+mähtest
+mähtet
+männlich
+männliche
+männlichem
+männlichen
+männlicher
+männlichere
+männlicherem
+männlicheren
+männlicherer
+männlicheres
+männliches
+männlichste
+männlichstem
+männlichsten
+männlichster
+männlichstes
+märchenhaft
+märchenhafte
+märchenhaftem
+märchenhaften
+märchenhafter
+märchenhaftere
+märchenhafterem
+märchenhafteren
+märchenhafterer
+märchenhafteres
+märchenhaftes
+märchenhafteste
+märchenhaftestem
+märchenhaftesten
+märchenhaftester
+märchenhaftestes
+mäste
+mästen
+mästend
+mästende
+mästendem
+mästenden
+mästender
+mästendes
+mästest
+mästet
+mästete
+mästeten
+mästetest
+mästetet
+mäßig
+mäßige
+mäßigem
+mäßigen
+mäßigend
+mäßigende
+mäßigendem
+mäßigenden
+mäßigender
+mäßigendes
+mäßiger
+mäßigere
+mäßigerem
+mäßigeren
+mäßigerer
+mäßigeres
+mäßiges
+mäßigst
+mäßigste
+mäßigstem
+mäßigsten
+mäßigster
+mäßigstes
+mäßigt
+mäßigte
+mäßigten
+mäßigtest
+mäßigtet
+möblierbar
+möblierbare
+möblierbarem
+möblierbaren
+möblierbarer
+möblierbares
+möbliere
+möblieren
+möblierend
+möblierende
+möblierendem
+möblierenden
+möblierender
+möblierendes
+möblierst
+möbliert
+möblierte
+möbliertem
+möblierten
+möblierter
+möbliertes
+möbliertest
+möbliertet
+möchte
+möchten
+möchtest
+möchtet
+möge
+mögen
+mögend
+mögende
+mögendem
+mögenden
+mögender
+mögendes
+möglich
+mögliche
+möglichem
+möglichen
+möglicher
+möglichere
+möglicherem
+möglicheren
+möglicherer
+möglicheres
+möglicherweise
+mögliches
+möglichst
+möglichste
+möglichstem
+möglichsten
+möglichster
+möglichstes
+mögt
+mörderisch
+mörderische
+mörderischem
+mörderischen
+mörderischer
+mörderisches
+müd
+müde
+müdem
+müden
+müder
+müdere
+müderem
+müderen
+müderer
+müderes
+müdes
+müdeste
+müdestem
+müdesten
+müdester
+müdestes
+mühe
+mühelos
+mühelose
+mühelosem
+mühelosen
+müheloser
+mühelosere
+müheloserem
+müheloseren
+müheloserer
+müheloseres
+müheloses
+müheloseste
+mühelosestem
+mühelosesten
+mühelosester
+mühelosestes
+mühen
+mühend
+mühende
+mühendem
+mühenden
+mühender
+mühendes
+mühevoll
+mühevolle
+mühevollem
+mühevollen
+mühevoller
+mühevollere
+mühevollerem
+mühevolleren
+mühevollerer
+mühevolleres
+mühevolles
+mühevollste
+mühevollstem
+mühevollsten
+mühevollster
+mühevollstes
+mühsam
+mühsame
+mühsamem
+mühsamen
+mühsamer
+mühsames
+mühselig
+mühselige
+mühseligem
+mühseligen
+mühseliger
+mühseligere
+mühseligerem
+mühseligeren
+mühseligerer
+mühseligeres
+mühseliges
+mühseligste
+mühseligstem
+mühseligsten
+mühseligster
+mühseligstes
+mühst
+müht
+mühte
+mühten
+mühtest
+mühtet
+münde
+münden
+mündend
+mündende
+mündendem
+mündenden
+mündender
+mündendes
+mündest
+mündet
+mündete
+mündeten
+mündetest
+mündetet
+mündig
+mündige
+mündigem
+mündigen
+mündiger
+mündiges
+mündlich
+mündliche
+mündlichem
+mündlichen
+mündlicher
+mündliches
+münze
+münzen
+münzend
+münzende
+münzendem
+münzenden
+münzender
+münzendes
+münzest
+münzt
+münzte
+münzten
+münztest
+münztet
+mürbe
+mürbem
+mürben
+mürber
+mürbes
+mürrisch
+mürrische
+mürrischem
+mürrischen
+mürrischer
+mürrisches
+müsse
+müssen
+müssend
+müssende
+müssendem
+müssenden
+müssender
+müssendes
+müssest
+müsst
+müsste
+müssten
+müsstest
+müsstet
+mütterlich
+mütterliche
+mütterlichem
+mütterlichen
+mütterlicher
+mütterlicherseits
+mütterliches
+müßig
+müßige
+müßigem
+müßigen
+müßiger
+müßiges
+nach
+nachahme
+nachahmen
+nachahmend
+nachahmende
+nachahmendem
+nachahmenden
+nachahmender
+nachahmendes
+nachahmenswert
+nachahmenswerte
+nachahmenswertem
+nachahmenswerten
+nachahmenswerter
+nachahmenswertes
+nachahmst
+nachahmt
+nachahmte
+nachahmten
+nachahmtest
+nachahmtet
+nacharbeite
+nacharbeiten
+nacharbeitend
+nacharbeitende
+nacharbeitendem
+nacharbeitenden
+nacharbeitender
+nacharbeitendes
+nacharbeitest
+nacharbeitet
+nacharbeitete
+nacharbeiteten
+nacharbeitetest
+nacharbeitetet
+nachbarlich
+nachbarliche
+nachbarlichem
+nachbarlichen
+nachbarlicher
+nachbarliches
+nachbaubar
+nachbaubare
+nachbaubarem
+nachbaubaren
+nachbaubarer
+nachbaubares
+nachbaue
+nachbauen
+nachbauend
+nachbauende
+nachbauendem
+nachbauenden
+nachbauender
+nachbauendes
+nachbaust
+nachbaut
+nachbaute
+nachbauten
+nachbautest
+nachbautet
+nachbehandelt
+nachbehandelte
+nachbehandeltem
+nachbehandelten
+nachbehandelter
+nachbehandeltes
+nachbessere
+nachbessern
+nachbessernd
+nachbessernde
+nachbesserndem
+nachbessernden
+nachbessernder
+nachbesserndes
+nachbesserst
+nachbessert
+nachbesserte
+nachbesserten
+nachbessertest
+nachbessertet
+nachbessre
+nachbestellt
+nachbestellte
+nachbestelltem
+nachbestellten
+nachbestellter
+nachbestelltes
+nachbestückt
+nachbestückte
+nachbestücktem
+nachbestückten
+nachbestückter
+nachbestücktes
+nachbezahlt
+nachbezahlte
+nachbezahltem
+nachbezahlten
+nachbezahlter
+nachbezahltes
+nachbilde
+nachbilden
+nachbildest
+nachbildet
+nachbildete
+nachbildeten
+nachbildetest
+nachbildetet
+nachdachte
+nachdachten
+nachdachtest
+nachdachtet
+nachdem
+nachdenke
+nachdenken
+nachdenkend
+nachdenkende
+nachdenkendem
+nachdenkenden
+nachdenkender
+nachdenkendes
+nachdenklich
+nachdenkliche
+nachdenklichem
+nachdenklichen
+nachdenklicher
+nachdenkliches
+nachdenkst
+nachdenkt
+nachdrücklich
+nachdrückliche
+nachdrücklichem
+nachdrücklichen
+nachdrücklicher
+nachdrückliches
+nacheifere
+nacheifern
+nacheifernd
+nacheifernde
+nacheiferndem
+nacheifernden
+nacheifernder
+nacheiferndes
+nacheiferst
+nacheifert
+nacheiferte
+nacheiferten
+nacheifertest
+nacheifertet
+nacheifre
+nacheinander
+nachempfunden
+nachempfundene
+nachempfundenem
+nachempfundenen
+nachempfundener
+nachempfundenes
+nacherzählt
+nacherzählte
+nacherzähltem
+nacherzählten
+nacherzählter
+nacherzähltes
+nachfolge
+nachfolgen
+nachfolgend
+nachfolgende
+nachfolgendem
+nachfolgenden
+nachfolgender
+nachfolgendes
+nachfolgst
+nachfolgt
+nachfolgte
+nachfolgten
+nachfolgtest
+nachfolgtet
+nachfordere
+nachfordern
+nachfordernd
+nachfordernde
+nachforderndem
+nachfordernden
+nachfordernder
+nachforderndes
+nachforderst
+nachfordert
+nachforderte
+nachforderten
+nachfordertest
+nachfordertet
+nachfordre
+nachforsche
+nachforschen
+nachforschend
+nachforschende
+nachforschendem
+nachforschenden
+nachforschender
+nachforschendes
+nachforschest
+nachforschst
+nachforscht
+nachforschte
+nachforschten
+nachforschtest
+nachforschtet
+nachfrage
+nachfragen
+nachfragend
+nachfragende
+nachfragendem
+nachfragenden
+nachfragender
+nachfragendes
+nachfragst
+nachfragt
+nachfragte
+nachfragten
+nachfragtest
+nachfragtet
+nachfühlbar
+nachfühlbare
+nachfühlbarem
+nachfühlbaren
+nachfühlbarer
+nachfühlbares
+nachfühle
+nachfühlen
+nachfühlend
+nachfühlende
+nachfühlendem
+nachfühlenden
+nachfühlender
+nachfühlendes
+nachfühlst
+nachfühlt
+nachfühlte
+nachfühlten
+nachfühltest
+nachfühltet
+nachfüllbar
+nachfüllbare
+nachfüllbarem
+nachfüllbaren
+nachfüllbarer
+nachfüllbares
+nachfülle
+nachfüllen
+nachfüllend
+nachfüllende
+nachfüllendem
+nachfüllenden
+nachfüllender
+nachfüllendes
+nachfüllst
+nachfüllt
+nachfüllte
+nachfüllten
+nachfülltest
+nachfülltet
+nachgab
+nachgaben
+nachgabst
+nachgabt
+nachgeahmt
+nachgeahmte
+nachgeahmtem
+nachgeahmten
+nachgeahmter
+nachgeahmtes
+nachgebe
+nachgeben
+nachgebend
+nachgebende
+nachgebendem
+nachgebenden
+nachgebender
+nachgebendes
+nachgebildet
+nachgebildete
+nachgebildetem
+nachgebildeten
+nachgebildeter
+nachgebildetes
+nachgeblickt
+nachgeblickte
+nachgeblicktem
+nachgeblickten
+nachgeblickter
+nachgeblicktes
+nachgeblättert
+nachgebt
+nachgedacht
+nachgedichtet
+nachgedichtete
+nachgedichtetem
+nachgedichteten
+nachgedichteter
+nachgedichtetes
+nachgedruckt
+nachgedruckte
+nachgedrucktem
+nachgedruckten
+nachgedruckter
+nachgedrucktes
+nachgedrängt
+nachgeeifert
+nachgefolgt
+nachgefolgte
+nachgefolgtem
+nachgefolgten
+nachgefolgter
+nachgefolgtes
+nachgeforscht
+nachgefragt
+nachgefühlt
+nachgefühlte
+nachgefühltem
+nachgefühlten
+nachgefühlter
+nachgefühltes
+nachgeführt
+nachgefüllt
+nachgefüllte
+nachgefülltem
+nachgefüllten
+nachgefüllter
+nachgefülltes
+nachgegangen
+nachgegeben
+nachgehe
+nachgehen
+nachgehend
+nachgehende
+nachgehendem
+nachgehenden
+nachgehender
+nachgehendes
+nachgeholfen
+nachgeholt
+nachgeholte
+nachgeholtem
+nachgeholten
+nachgeholter
+nachgeholtes
+nachgehst
+nachgeht
+nachgekauft
+nachgekaufte
+nachgekauftem
+nachgekauften
+nachgekaufter
+nachgekauftes
+nachgekommen
+nachgekommene
+nachgekommenem
+nachgekommenen
+nachgekommener
+nachgekommenes
+nachgeladen
+nachgeladene
+nachgeladenem
+nachgeladenen
+nachgeladener
+nachgeladenes
+nachgelassen
+nachgelassene
+nachgelassenem
+nachgelassenen
+nachgelassener
+nachgelassenes
+nachgeleiert
+nachgeleierte
+nachgeleiertem
+nachgeleierten
+nachgeleierter
+nachgeleiertes
+nachgelesen
+nachgeliefert
+nachgelieferte
+nachgeliefertem
+nachgelieferten
+nachgelieferter
+nachgeliefertes
+nachgelöst
+nachgelöste
+nachgelöstem
+nachgelösten
+nachgelöster
+nachgelöstes
+nachgemacht
+nachgemachte
+nachgemachtem
+nachgemachten
+nachgemachter
+nachgemachtes
+nachgemessen
+nachgemessene
+nachgemessenem
+nachgemessenen
+nachgemessener
+nachgemessenes
+nachgeordnet
+nachgeordnete
+nachgeordnetem
+nachgeordneten
+nachgeordneter
+nachgeordnetes
+nachgerannt
+nachgerechnet
+nachgerechnete
+nachgerechnetem
+nachgerechneten
+nachgerechneter
+nachgerechnetes
+nachgeredet
+nachgeredete
+nachgeredetem
+nachgeredeten
+nachgeredeter
+nachgeredetes
+nachgereicht
+nachgereichte
+nachgereichtem
+nachgereichten
+nachgereichter
+nachgereichtes
+nachgerückt
+nachgerückte
+nachgerücktem
+nachgerückten
+nachgerückter
+nachgerücktes
+nachgesagt
+nachgesagte
+nachgesagtem
+nachgesagten
+nachgesagter
+nachgesagtes
+nachgesandt
+nachgesandte
+nachgesandtem
+nachgesandten
+nachgesandter
+nachgesandtes
+nachgeschaltet
+nachgeschaltete
+nachgeschaltetem
+nachgeschalteten
+nachgeschalteter
+nachgeschaltetes
+nachgeschaut
+nachgeschickt
+nachgeschickte
+nachgeschicktem
+nachgeschickten
+nachgeschickter
+nachgeschicktes
+nachgeschlagen
+nachgeschlagene
+nachgeschlagenem
+nachgeschlagenen
+nachgeschlagener
+nachgeschlagenes
+nachgeschleppt
+nachgeschleppte
+nachgeschlepptem
+nachgeschleppten
+nachgeschleppter
+nachgeschlepptes
+nachgeschoben
+nachgeschobene
+nachgeschobenem
+nachgeschobenen
+nachgeschobener
+nachgeschobenes
+nachgesehen
+nachgesehene
+nachgesehenem
+nachgesehenen
+nachgesehener
+nachgesehenes
+nachgesendet
+nachgesendete
+nachgesendetem
+nachgesendeten
+nachgesendeter
+nachgesendetes
+nachgesetzt
+nachgesprochen
+nachgesprochene
+nachgesprochenem
+nachgesprochenen
+nachgesprochener
+nachgesprochenes
+nachgespürt
+nachgestanden
+nachgestandene
+nachgestandenem
+nachgestandenen
+nachgestandener
+nachgestandenes
+nachgestellt
+nachgestellte
+nachgestelltem
+nachgestellten
+nachgestellter
+nachgestelltes
+nachgetragen
+nachgetragene
+nachgetragenem
+nachgetragenen
+nachgetragener
+nachgetragenes
+nachgetriggert
+nachgetriggerte
+nachgetriggertem
+nachgetriggerten
+nachgetriggerter
+nachgetriggertes
+nachgewachsen
+nachgewachsene
+nachgewachsenem
+nachgewachsenen
+nachgewachsener
+nachgewachsenes
+nachgeweint
+nachgewiesen
+nachgewiesene
+nachgewiesenem
+nachgewiesenen
+nachgewiesener
+nachgewiesenes
+nachgewirkt
+nachgezogen
+nachgezogene
+nachgezogenem
+nachgezogenen
+nachgezogener
+nachgezogenes
+nachgezählt
+nachgibst
+nachgibt
+nachgiebig
+nachgiebige
+nachgiebigem
+nachgiebigen
+nachgiebiger
+nachgiebigere
+nachgiebigerem
+nachgiebigeren
+nachgiebigerer
+nachgiebigeres
+nachgiebiges
+nachgiebigste
+nachgiebigstem
+nachgiebigsten
+nachgiebigster
+nachgiebigstes
+nachging
+nachgingen
+nachgingst
+nachgingt
+nachhaltig
+nachhaltige
+nachhaltigem
+nachhaltigen
+nachhaltiger
+nachhaltiges
+nachhause
+nachhelfe
+nachhelfen
+nachhelfend
+nachhelfende
+nachhelfendem
+nachhelfenden
+nachhelfender
+nachhelfendes
+nachhelft
+nachher
+nachhole
+nachholen
+nachholend
+nachholende
+nachholendem
+nachholenden
+nachholender
+nachholendes
+nachholst
+nachholt
+nachholte
+nachholten
+nachholtest
+nachholtet
+nachjage
+nachjagen
+nachjagst
+nachjagt
+nachjagte
+nachjagten
+nachjagtest
+nachjagtet
+nachkomme
+nachkommen
+nachkommend
+nachkommende
+nachkommendem
+nachkommenden
+nachkommender
+nachkommendes
+nachkommst
+nachkommt
+nachkäme
+nachkämen
+nachkämest
+nachkämet
+nachladbar
+nachladbare
+nachladbarem
+nachladbaren
+nachladbarer
+nachladbares
+nachlade
+nachladen
+nachladend
+nachladende
+nachladendem
+nachladenden
+nachladender
+nachladendes
+nachladet
+nachlasse
+nachlassen
+nachlassend
+nachlassende
+nachlassendem
+nachlassenden
+nachlassender
+nachlassendes
+nachlasst
+nachlaufe
+nachlaufen
+nachlaufend
+nachlaufende
+nachlaufendem
+nachlaufenden
+nachlaufender
+nachlaufendes
+nachlauft
+nachlese
+nachlesen
+nachlesend
+nachlesende
+nachlesendem
+nachlesenden
+nachlesender
+nachlesendes
+nachlest
+nachliefere
+nachliefern
+nachliefernd
+nachliefernde
+nachlieferndem
+nachliefernden
+nachliefernder
+nachlieferndes
+nachlieferst
+nachliefert
+nachlieferte
+nachlieferten
+nachliefertest
+nachliefertet
+nachliefre
+nachliest
+nachließ
+nachließen
+nachließest
+nachließt
+nachlässig
+nachlässige
+nachlässigem
+nachlässigen
+nachlässiger
+nachlässiges
+nachlässt
+nachmache
+nachmachen
+nachmachend
+nachmachende
+nachmachendem
+nachmachenden
+nachmachender
+nachmachendes
+nachmachst
+nachmacht
+nachmachte
+nachmachten
+nachmachtest
+nachmachtet
+nachmessbar
+nachmessbare
+nachmessbarem
+nachmessbaren
+nachmessbarer
+nachmessbares
+nachmesse
+nachmessen
+nachmessend
+nachmessende
+nachmessendem
+nachmessenden
+nachmessender
+nachmessendes
+nachmesst
+nachmittag
+nachmittags
+nachprüfbar
+nachprüfbare
+nachprüfbarem
+nachprüfbaren
+nachprüfbarer
+nachprüfbares
+nachprüfe
+nachprüfen
+nachprüfend
+nachprüfende
+nachprüfendem
+nachprüfenden
+nachprüfender
+nachprüfendes
+nachprüfst
+nachprüft
+nachprüfte
+nachprüften
+nachprüftest
+nachprüftet
+nachrangig
+nachrangige
+nachrangigem
+nachrangigen
+nachrangiger
+nachrangiges
+nachrechne
+nachrechnen
+nachrechnend
+nachrechnende
+nachrechnendem
+nachrechnenden
+nachrechnender
+nachrechnendes
+nachrechnest
+nachrechnet
+nachrechnete
+nachrechneten
+nachrechnetest
+nachrechnetet
+nachreformatorisch
+nachreformatorische
+nachreformatorischem
+nachreformatorischen
+nachreformatorischer
+nachreformatorisches
+nachrichtentechnisch
+nachrichtentechnische
+nachrichtentechnischem
+nachrichtentechnischen
+nachrichtentechnischer
+nachrichtentechnisches
+nachrühme
+nachrühmen
+nachrühmend
+nachrühmende
+nachrühmendem
+nachrühmenden
+nachrühmender
+nachrühmendes
+nachrühmst
+nachrühmt
+nachrühmte
+nachrühmten
+nachrühmtest
+nachrühmtet
+nachrüstbar
+nachrüstbare
+nachrüstbarem
+nachrüstbaren
+nachrüstbarer
+nachrüstbares
+nachrüste
+nachrüsten
+nachrüstend
+nachrüstende
+nachrüstendem
+nachrüstenden
+nachrüstender
+nachrüstendes
+nachrüstest
+nachrüstet
+nachrüstete
+nachrüsteten
+nachrüstetest
+nachrüstetet
+nachsage
+nachsagen
+nachsagend
+nachsagende
+nachsagendem
+nachsagenden
+nachsagender
+nachsagendes
+nachsagst
+nachsagt
+nachsagte
+nachsagten
+nachsagtest
+nachsagtet
+nachschlage
+nachschlagen
+nachschlagend
+nachschlagende
+nachschlagendem
+nachschlagenden
+nachschlagender
+nachschlagendes
+nachschlagt
+nachsehbar
+nachsehbare
+nachsehbarem
+nachsehbaren
+nachsehbarer
+nachsehbares
+nachsehe
+nachsehen
+nachsehend
+nachsehende
+nachsehendem
+nachsehenden
+nachsehender
+nachsehendes
+nachseht
+nachsende
+nachsenden
+nachsendend
+nachsendende
+nachsendendem
+nachsendenden
+nachsendender
+nachsendendes
+nachsendest
+nachsendet
+nachsendete
+nachsendeten
+nachsendetest
+nachsendetet
+nachsichtig
+nachsichtige
+nachsichtigem
+nachsichtigen
+nachsichtiger
+nachsichtigere
+nachsichtigerem
+nachsichtigeren
+nachsichtigerer
+nachsichtigeres
+nachsichtiges
+nachsichtigste
+nachsichtigstem
+nachsichtigsten
+nachsichtigster
+nachsichtigstes
+nachsinne
+nachsinnen
+nachsinnend
+nachsinnende
+nachsinnendem
+nachsinnenden
+nachsinnender
+nachsinnendes
+nachsinnst
+nachsinnt
+nachspreche
+nachsprechen
+nachsprechend
+nachsprechende
+nachsprechendem
+nachsprechenden
+nachsprechender
+nachsprechendes
+nachsprecht
+nachstehe
+nachstehen
+nachstehend
+nachstehende
+nachstehendem
+nachstehenden
+nachstehender
+nachstehendes
+nachstehst
+nachsteht
+nachsteige
+nachsteigen
+nachsteigend
+nachsteigende
+nachsteigendem
+nachsteigenden
+nachsteigender
+nachsteigendes
+nachsteigst
+nachsteigt
+nachstelle
+nachstellen
+nachstellend
+nachstellende
+nachstellendem
+nachstellenden
+nachstellender
+nachstellendes
+nachstellst
+nachstellt
+nachstellte
+nachstellten
+nachstelltest
+nachstelltet
+nachsuche
+nachsuchen
+nachsuchend
+nachsuchende
+nachsuchendem
+nachsuchenden
+nachsuchender
+nachsuchendes
+nachsuchst
+nachsucht
+nachsuchte
+nachsuchten
+nachsuchtest
+nachsuchtet
+nachtdunkel
+nachtdunkle
+nachtdunklem
+nachtdunklen
+nachtdunkler
+nachtdunkles
+nachteilig
+nachteilige
+nachteiligem
+nachteiligen
+nachteiliger
+nachteiligere
+nachteiligerem
+nachteiligeren
+nachteiligerer
+nachteiligeres
+nachteiliges
+nachteiligste
+nachteiligstem
+nachteiligsten
+nachteiligster
+nachteiligstes
+nachtrage
+nachtragen
+nachtragend
+nachtragende
+nachtragendem
+nachtragenden
+nachtragender
+nachtragendes
+nachtragt
+nachtrauere
+nachtrauern
+nachtrauernd
+nachtrauernde
+nachtrauerndem
+nachtrauernden
+nachtrauernder
+nachtrauerndes
+nachtrauerst
+nachtrauert
+nachtrauerte
+nachtrauerten
+nachtrauertest
+nachtrauertet
+nachtraure
+nachtriggerbar
+nachtriggerbare
+nachtriggerbarem
+nachtriggerbaren
+nachtriggerbarer
+nachtriggerbares
+nachtriggere
+nachtriggern
+nachtriggernd
+nachtriggernde
+nachtriggerndem
+nachtriggernden
+nachtriggernder
+nachtriggerndes
+nachtriggerst
+nachtriggert
+nachtriggerte
+nachtriggerten
+nachtriggertest
+nachtriggertet
+nachtriggre
+nachträglich
+nachträgliche
+nachträglichem
+nachträglichen
+nachträglicher
+nachträgliches
+nachts
+nachtschwarz
+nachtschwarze
+nachtschwarzem
+nachtschwarzen
+nachtschwarzer
+nachtschwarzes
+nachvollziehbar
+nachvollziehbare
+nachvollziehbarem
+nachvollziehbaren
+nachvollziehbarer
+nachvollziehbares
+nachvollziehe
+nachvollziehen
+nachvollziehend
+nachvollziehende
+nachvollziehendem
+nachvollziehenden
+nachvollziehender
+nachvollziehendes
+nachvollziehst
+nachvollzieht
+nachvollzog
+nachvollzogen
+nachvollzogst
+nachvollzogt
+nachwachse
+nachwachsen
+nachwachsend
+nachwachsende
+nachwachsendem
+nachwachsenden
+nachwachsender
+nachwachsendes
+nachwachst
+nachweine
+nachweinen
+nachweinend
+nachweinende
+nachweinendem
+nachweinenden
+nachweinender
+nachweinendes
+nachweinst
+nachweint
+nachweinte
+nachweinten
+nachweintest
+nachweintet
+nachweisbar
+nachweisbare
+nachweisbarem
+nachweisbaren
+nachweisbarer
+nachweisbares
+nachweise
+nachweisen
+nachweisend
+nachweisende
+nachweisendem
+nachweisenden
+nachweisender
+nachweisendes
+nachweisest
+nachweislich
+nachweisliche
+nachweislichem
+nachweislichen
+nachweislicher
+nachweisliches
+nachweist
+nachwirke
+nachwirken
+nachwirkend
+nachwirkende
+nachwirkendem
+nachwirkenden
+nachwirkender
+nachwirkendes
+nachwirkst
+nachwirkt
+nachwirkte
+nachwirkten
+nachwirktest
+nachwirktet
+nachzeichne
+nachzeichnen
+nachzeichnend
+nachzeichnende
+nachzeichnendem
+nachzeichnenden
+nachzeichnender
+nachzeichnendes
+nachzeichnest
+nachzeichnet
+nachzeichnete
+nachzeichneten
+nachzeichnetest
+nachzeichnetet
+nachzuahmen
+nachzuahmend
+nachzuahmende
+nachzuahmendem
+nachzuahmenden
+nachzuahmender
+nachzuahmendes
+nachzuarbeiten
+nachzuarbeitend
+nachzuarbeitende
+nachzuarbeitendem
+nachzuarbeitenden
+nachzuarbeitender
+nachzuarbeitendes
+nachzudenken
+nachzufolgen
+nachzufragen
+nachzugehen
+nachzuholen
+nachzuholend
+nachzuholende
+nachzuholendem
+nachzuholenden
+nachzuholender
+nachzuholendes
+nachzukommen
+nachzuladen
+nachzuladend
+nachzuladende
+nachzuladendem
+nachzuladenden
+nachzuladender
+nachzuladendes
+nachzulassen
+nachzulassend
+nachzulassende
+nachzulassendem
+nachzulassenden
+nachzulassender
+nachzulassendes
+nachzulesen
+nachzulesend
+nachzulesende
+nachzulesendem
+nachzulesenden
+nachzulesender
+nachzulesendes
+nachzumessen
+nachzumessend
+nachzumessende
+nachzumessendem
+nachzumessenden
+nachzumessender
+nachzumessendes
+nachzuprüfen
+nachzuprüfend
+nachzuprüfende
+nachzuprüfendem
+nachzuprüfenden
+nachzuprüfender
+nachzuprüfendes
+nachzuregeln
+nachzuregelnd
+nachzuregelnde
+nachzuregelndem
+nachzuregelnden
+nachzuregelnder
+nachzuregelndes
+nachzureichen
+nachzureichend
+nachzureichende
+nachzureichendem
+nachzureichenden
+nachzureichender
+nachzureichendes
+nachzusagen
+nachzusagend
+nachzusagende
+nachzusagendem
+nachzusagenden
+nachzusagender
+nachzusagendes
+nachzusuchen
+nachzuvollziehen
+nachzuvollziehend
+nachzuvollziehende
+nachzuvollziehendem
+nachzuvollziehenden
+nachzuvollziehender
+nachzuvollziehendes
+nachzuweisen
+nachzuweisend
+nachzuweisende
+nachzuweisendem
+nachzuweisenden
+nachzuweisender
+nachzuweisendes
+nachzuziehen
+nachzuziehend
+nachzuziehende
+nachzuziehendem
+nachzuziehenden
+nachzuziehender
+nachzuziehendes
+nachzählbar
+nachzählbare
+nachzählbarem
+nachzählbaren
+nachzählbarer
+nachzählbares
+nachzähle
+nachzählen
+nachzählend
+nachzählende
+nachzählendem
+nachzählenden
+nachzählender
+nachzählendes
+nachzählst
+nachzählt
+nachzählte
+nachzählten
+nachzähltest
+nachzähltet
+nackend
+nackende
+nackendem
+nackenden
+nackender
+nackendes
+nackig
+nackige
+nackigem
+nackigen
+nackiger
+nackiges
+nackt
+nackte
+nacktem
+nackten
+nackter
+nacktes
+nadelgestreift
+nadelgestreifte
+nadelgestreiftem
+nadelgestreiften
+nadelgestreifter
+nadelgestreiftes
+nage
+nagele
+nageln
+nagelnd
+nagelnde
+nagelndem
+nagelnden
+nagelnder
+nagelndes
+nagelneu
+nagelneue
+nagelneuem
+nagelneuen
+nagelneuer
+nagelneues
+nagelst
+nagelt
+nagelte
+nagelten
+nageltest
+nageltet
+nagen
+nagend
+nagende
+nagendem
+nagenden
+nagender
+nagendes
+nagle
+nagst
+nagt
+nagte
+nagten
+nagtest
+nagtet
+nah
+nahbar
+nahbare
+nahbarem
+nahbaren
+nahbarer
+nahbares
+nahe
+nahem
+nahen
+nahend
+nahende
+nahendem
+nahenden
+nahender
+nahendes
+naher
+nahes
+nahezu
+nahm
+nahmen
+nahmst
+nahmt
+nahrhaft
+nahrhafte
+nahrhaftem
+nahrhaften
+nahrhafter
+nahrhaftere
+nahrhafterem
+nahrhafteren
+nahrhafterer
+nahrhafteres
+nahrhaftes
+nahrhafteste
+nahrhaftestem
+nahrhaftesten
+nahrhaftester
+nahrhaftestes
+nahst
+naht
+nahte
+nahten
+nahtest
+nahtet
+nahtlos
+nahtlose
+nahtlosem
+nahtlosen
+nahtloser
+nahtloses
+nahöstlich
+nahöstliche
+nahöstlichem
+nahöstlichen
+nahöstlicher
+nahöstliches
+naiv
+naive
+naivem
+naiven
+naiver
+naivere
+naiverem
+naiveren
+naiverer
+naiveres
+naives
+naivste
+naivstem
+naivsten
+naivster
+naivstes
+namenlos
+namenlose
+namenlosem
+namenlosen
+namenloser
+namenloses
+namens
+namentlich
+namentliche
+namentlichem
+namentlichen
+namentlicher
+namentliches
+namhaft
+namhafte
+namhaftem
+namhaften
+namhafter
+namhaftere
+namhafterem
+namhafteren
+namhafterer
+namhafteres
+namhaftes
+namhafteste
+namhaftestem
+namhaftesten
+namhaftester
+namhaftestes
+nannte
+nannten
+nanntest
+nanntet
+napoleonisch
+napoleonische
+napoleonischem
+napoleonischen
+napoleonischer
+napoleonisches
+narkotisiere
+narkotisieren
+narkotisierend
+narkotisierende
+narkotisierendem
+narkotisierenden
+narkotisierender
+narkotisierendes
+narkotisierst
+narkotisiert
+narkotisierte
+narkotisiertem
+narkotisierten
+narkotisierter
+narkotisiertes
+narkotisiertest
+narkotisiertet
+narre
+narren
+narrend
+narrende
+narrendem
+narrenden
+narrender
+narrendes
+narrensicher
+narrensichere
+narrensicherem
+narrensicheren
+narrensicherer
+narrensicheres
+narrst
+narrt
+narrte
+narrten
+narrtest
+narrtet
+narzisstisch
+narzisstische
+narzisstischem
+narzisstischen
+narzisstischer
+narzisstisches
+nasche
+naschen
+naschend
+naschende
+naschendem
+naschenden
+naschender
+naschendes
+naschest
+naschst
+nascht
+naschte
+naschten
+naschtest
+naschtet
+nass
+nasse
+nassem
+nassen
+nasser
+nassere
+nasserem
+nasseren
+nasserer
+nasseres
+nasses
+nasseste
+nassestem
+nassesten
+nassester
+nassestes
+nasskalt
+nasskalte
+nasskaltem
+nasskalten
+nasskalter
+nasskaltes
+national
+nationalbewusst
+nationalbewusste
+nationalbewusstem
+nationalbewussten
+nationalbewusster
+nationalbewusstere
+nationalbewussterem
+nationalbewussteren
+nationalbewussterer
+nationalbewussteres
+nationalbewusstes
+nationalbewussteste
+nationalbewusstestem
+nationalbewusstesten
+nationalbewusstester
+nationalbewusstestes
+nationalchinesisch
+nationalchinesische
+nationalchinesischem
+nationalchinesischen
+nationalchinesischer
+nationalchinesisches
+nationale
+nationalem
+nationalen
+nationaler
+nationales
+nationalisiere
+nationalisieren
+nationalisierend
+nationalisierende
+nationalisierendem
+nationalisierenden
+nationalisierender
+nationalisierendes
+nationalisierst
+nationalisiert
+nationalisierte
+nationalisiertem
+nationalisierten
+nationalisierter
+nationalisiertes
+nationalisiertest
+nationalisiertet
+nationalistisch
+nationalistische
+nationalistischem
+nationalistischen
+nationalistischer
+nationalistisches
+nationalsozialistisch
+nationalsozialistische
+nationalsozialistischem
+nationalsozialistischen
+nationalsozialistischer
+nationalsozialistisches
+natura
+naturalisiere
+naturalisieren
+naturalisierend
+naturalisierende
+naturalisierendem
+naturalisierenden
+naturalisierender
+naturalisierendes
+naturalisierst
+naturalisiert
+naturalisierte
+naturalisiertem
+naturalisierten
+naturalisierter
+naturalisiertes
+naturalisiertest
+naturalisiertet
+naturalistisch
+naturalistische
+naturalistischem
+naturalistischen
+naturalistischer
+naturalistisches
+naturblond
+naturblonde
+naturblondem
+naturblonden
+naturblonder
+naturblondes
+naturfrisch
+naturfrische
+naturfrischem
+naturfrischen
+naturfrischer
+naturfrisches
+naturgegeben
+naturgegebene
+naturgegebenem
+naturgegebenen
+naturgegebener
+naturgegebenes
+naturgemäß
+naturgemäße
+naturgemäßem
+naturgemäßen
+naturgemäßer
+naturgemäßere
+naturgemäßerem
+naturgemäßeren
+naturgemäßerer
+naturgemäßeres
+naturgemäßes
+naturgemäßeste
+naturgemäßestem
+naturgemäßesten
+naturgemäßester
+naturgemäßestes
+naturgetreu
+naturgetreue
+naturgetreuem
+naturgetreuen
+naturgetreuer
+naturgetreues
+naturherstellend
+naturherstellende
+naturherstellendem
+naturherstellenden
+naturherstellender
+naturherstellendes
+naturrein
+naturreine
+naturreinem
+naturreinen
+naturreiner
+naturreines
+naturverbunden
+naturverbundene
+naturverbundenem
+naturverbundenen
+naturverbundener
+naturverbundenes
+naturwissenschaftlich
+naturwissenschaftliche
+naturwissenschaftlichem
+naturwissenschaftlichen
+naturwissenschaftlicher
+naturwissenschaftliches
+natürlich
+natürliche
+natürlichem
+natürlichen
+natürlicher
+natürlichere
+natürlicherem
+natürlicheren
+natürlicherer
+natürlicheres
+natürlicherweise
+natürliches
+natürlichste
+natürlichstem
+natürlichsten
+natürlichster
+natürlichstes
+natürlichzahlig
+natürlichzahlige
+natürlichzahligem
+natürlichzahligen
+natürlichzahliger
+natürlichzahliges
+nautisch
+nautische
+nautischem
+nautischen
+nautischer
+nautisches
+navigier
+navigiere
+navigieren
+navigierend
+navigierende
+navigierendem
+navigierenden
+navigierender
+navigierendes
+navigierst
+navigiert
+navigierte
+navigierten
+navigiertest
+navigiertet
+nebelfrei
+nebelfreie
+nebelfreiem
+nebelfreien
+nebelfreier
+nebelfreies
+nebelhaft
+nebelhafte
+nebelhaftem
+nebelhaften
+nebelhafter
+nebelhaftere
+nebelhafterem
+nebelhafteren
+nebelhafterer
+nebelhafteres
+nebelhaftes
+nebelhafteste
+nebelhaftestem
+nebelhaftesten
+nebelhaftester
+nebelhaftestes
+nebelig
+nebelige
+nebeligem
+nebeligen
+nebeliger
+nebeligere
+nebeligerem
+nebeligeren
+nebeligerer
+nebeligeres
+nebeliges
+nebeligste
+nebeligstem
+nebeligsten
+nebeligster
+nebeligstes
+neben
+nebenamtlich
+nebenamtliche
+nebenamtlichem
+nebenamtlichen
+nebenamtlicher
+nebenamtliches
+nebenan
+nebenbei
+nebenberufqqlich
+nebenberufqqliche
+nebenberufqqlichem
+nebenberufqqlichen
+nebenberufqqlicher
+nebenberufqqliches
+nebeneinander
+nebenher
+nebenstehend
+nebenstehende
+nebenstehendem
+nebenstehenden
+nebenstehender
+nebenstehendes
+nebensächlich
+nebensächliche
+nebensächlichem
+nebensächlichen
+nebensächlicher
+nebensächliches
+neblig
+neblige
+nebligem
+nebligen
+nebliger
+nebligere
+nebligerem
+nebligeren
+nebligerer
+nebligeres
+nebliges
+nebligste
+nebligstem
+nebligsten
+nebligster
+nebligstes
+nebst
+necke
+necken
+neckend
+neckende
+neckendem
+neckenden
+neckender
+neckendes
+neckst
+neckt
+neckte
+neckten
+necktest
+necktet
+negativ
+negative
+negativem
+negativen
+negativer
+negativere
+negativerem
+negativeren
+negativerer
+negativeres
+negatives
+negativste
+negativstem
+negativsten
+negativster
+negativstes
+negierbar
+negierbare
+negierbarem
+negierbaren
+negierbarer
+negierbares
+negiere
+negieren
+negierend
+negierende
+negierendem
+negierenden
+negierender
+negierendes
+negierst
+negiert
+negierte
+negiertem
+negierten
+negierter
+negiertes
+negiertest
+negiertet
+nehme
+nehmen
+nehmend
+nehmende
+nehmendem
+nehmenden
+nehmender
+nehmendes
+nehmt
+neide
+neiden
+neidend
+neidende
+neidendem
+neidenden
+neidender
+neidendes
+neidest
+neidet
+neidete
+neideten
+neidetest
+neidetet
+neidisch
+neidische
+neidischem
+neidischen
+neidischer
+neidischere
+neidischerem
+neidischeren
+neidischerer
+neidischeres
+neidisches
+neidischste
+neidischstem
+neidischsten
+neidischster
+neidischstes
+neidlos
+neidlose
+neidlosem
+neidlosen
+neidloser
+neidloses
+neidvoll
+neidvolle
+neidvollem
+neidvollen
+neidvoller
+neidvolles
+neigbar
+neigbare
+neigbarem
+neigbaren
+neigbarer
+neigbares
+neige
+neigen
+neigend
+neigende
+neigendem
+neigenden
+neigender
+neigendes
+neigst
+neigt
+neigte
+neigten
+neigtest
+neigtet
+nein
+nennbar
+nennbare
+nennbarem
+nennbaren
+nennbarer
+nennbares
+nenne
+nennen
+nennend
+nennende
+nennendem
+nennenden
+nennender
+nennendes
+nennenswert
+nennenswerte
+nennenswertem
+nennenswerten
+nennenswerter
+nennenswertere
+nennenswerterem
+nennenswerteren
+nennenswerterer
+nennenswerteres
+nennenswertes
+nennenswerteste
+nennenswertestem
+nennenswertesten
+nennenswertester
+nennenswertestes
+nennst
+nennt
+neofaschistisch
+neofaschistische
+neofaschistischem
+neofaschistischen
+neofaschistischer
+neofaschistisches
+neolythisch
+neolythische
+neolythischem
+neolythischen
+neolythischer
+neolythisches
+neonazistisch
+neonazistische
+neonazistischem
+neonazistischen
+neonazistischer
+neonazistisches
+nepalesisch
+nepalesische
+nepalesischem
+nepalesischen
+nepalesischer
+nepalesisches
+nerve
+nerven
+nervenaufreibend
+nervenaufreibende
+nervenaufreibendem
+nervenaufreibenden
+nervenaufreibender
+nervenaufreibendes
+nervend
+nervende
+nervendem
+nervenden
+nervender
+nervendes
+nervenstark
+nervenstarke
+nervenstarkem
+nervenstarken
+nervenstarker
+nervenstarkes
+nervlich
+nervliche
+nervlichem
+nervlichen
+nervlicher
+nervliches
+nervst
+nervt
+nervte
+nervten
+nervtest
+nervtet
+nervös
+nervöse
+nervösem
+nervösen
+nervöser
+nervösere
+nervöserem
+nervöseren
+nervöserer
+nervöseres
+nervöses
+nervöseste
+nervösestem
+nervösesten
+nervösester
+nervösestes
+nett
+nette
+nettem
+netten
+netter
+nettere
+netterem
+netteren
+netterer
+netteres
+nettes
+netteste
+nettestem
+nettesten
+nettester
+nettestes
+netto
+netzwerkfähig
+netzwerkfähige
+netzwerkfähigem
+netzwerkfähigen
+netzwerkfähiger
+netzwerkfähiges
+neu
+neuartig
+neuartige
+neuartigem
+neuartigen
+neuartiger
+neuartigere
+neuartigerem
+neuartigeren
+neuartigerer
+neuartigeres
+neuartiges
+neuartigste
+neuartigstem
+neuartigsten
+neuartigster
+neuartigstes
+neudeutsch
+neudeutsche
+neudeutschem
+neudeutschen
+neudeutscher
+neudeutsches
+neue
+neuem
+neuen
+neuer
+neuere
+neuerem
+neueren
+neuerer
+neueres
+neuerlich
+neuerliche
+neuerlichem
+neuerlichen
+neuerlicher
+neuerliches
+neues
+neueste
+neuestem
+neuesten
+neuestens
+neuester
+neuestes
+neuformiere
+neuformieren
+neuformierend
+neuformierende
+neuformierendem
+neuformierenden
+neuformierender
+neuformierendes
+neuformierst
+neuformiert
+neuformierte
+neuformiertem
+neuformierten
+neuformierter
+neuformiertes
+neuformiertest
+neuformiertet
+neugeboren
+neugeborene
+neugeborenem
+neugeborenen
+neugeborener
+neugeborenes
+neugierig
+neugierige
+neugierigem
+neugierigen
+neugieriger
+neugierigere
+neugierigerem
+neugierigeren
+neugierigerer
+neugierigeres
+neugieriges
+neugierigste
+neugierigstem
+neugierigsten
+neugierigster
+neugierigstes
+neulich
+neun
+neunfach
+neunfache
+neunfachem
+neunfachen
+neunfacher
+neunfaches
+neunhundert
+neunjährig
+neunjährige
+neunjährigem
+neunjährigen
+neunjähriger
+neunjähriges
+neunmal
+neunt
+neuntausend
+neunte
+neuntem
+neunten
+neunter
+neuntes
+neuntägig
+neuntägige
+neuntägigem
+neuntägigen
+neuntägiger
+neuntägiges
+neunundneunzig
+neunzehn
+neunzehnjährig
+neunzehnjährige
+neunzehnjährigem
+neunzehnjährigen
+neunzehnjähriger
+neunzehnjähriges
+neunzehnte
+neunzehntem
+neunzehnten
+neunzehnter
+neunzehntes
+neunzig
+neunziger
+neunzigern
+neunzigste
+neunzigstem
+neunzigsten
+neunzigster
+neunzigstes
+neuphilologisch
+neuphilologische
+neuphilologischem
+neuphilologischen
+neuphilologischer
+neuphilologisches
+neuralgisch
+neuralgische
+neuralgischem
+neuralgischen
+neuralgischer
+neuralgisches
+neurologisch
+neurologische
+neurologischem
+neurologischen
+neurologischer
+neurologisches
+neurotisch
+neurotische
+neurotischem
+neurotischen
+neurotischer
+neurotisches
+neuseeländisch
+neuseeländische
+neuseeländischem
+neuseeländischen
+neuseeländischer
+neuseeländisches
+neusprachlich
+neusprachliche
+neusprachlichem
+neusprachlichen
+neusprachlicher
+neusprachliches
+neuste
+neustem
+neusten
+neustens
+neuster
+neustes
+neutral
+neutrale
+neutralem
+neutralen
+neutraler
+neutralere
+neutralerem
+neutraleren
+neutralerer
+neutraleres
+neutrales
+neutralisiere
+neutralisieren
+neutralisierend
+neutralisierende
+neutralisierendem
+neutralisierenden
+neutralisierender
+neutralisierendes
+neutralisierst
+neutralisiert
+neutralisierte
+neutralisiertem
+neutralisierten
+neutralisierter
+neutralisiertes
+neutralisiertest
+neutralisiertet
+neutralste
+neutralstem
+neutralsten
+neutralster
+neutralstes
+neuwertig
+neuwertige
+neuwertigem
+neuwertigen
+neuwertiger
+neuwertiges
+neuzeitlich
+neuzeitliche
+neuzeitlichem
+neuzeitlichen
+neuzeitlicher
+neuzeitliches
+newtonsche
+newtonschem
+newtonschen
+newtonscher
+newtonsches
+nicht
+nichtakademisch
+nichtakademische
+nichtakademischem
+nichtakademischen
+nichtakademischer
+nichtakademisches
+nichtamtlich
+nichtamtliche
+nichtamtlichem
+nichtamtlichen
+nichtamtlicher
+nichtamtliches
+nichtatomar
+nichtatomare
+nichtatomarem
+nichtatomaren
+nichtatomarer
+nichtatomares
+nichtberechtigt
+nichtberechtigte
+nichtberechtigtem
+nichtberechtigten
+nichtberechtigter
+nichtberechtigtes
+nichtbestätigt
+nichtbestätigte
+nichtbestätigtem
+nichtbestätigten
+nichtbestätigter
+nichtbestätigtes
+nichtchristlich
+nichtchristliche
+nichtchristlichem
+nichtchristlichen
+nichtchristlicher
+nichtchristliches
+nichtdeterministisch
+nichtdeterministische
+nichtdeterministischem
+nichtdeterministischen
+nichtdeterministischer
+nichtdeterministisches
+nichtdeutsch
+nichtdeutsche
+nichtdeutschem
+nichtdeutschen
+nichtdeutscher
+nichtdeutsches
+nichteingeweiht
+nichteingeweihte
+nichteingeweihtem
+nichteingeweihten
+nichteingeweihter
+nichteingeweihtes
+nichteinverstanden
+nichteinverstandene
+nichteinverstandenem
+nichteinverstandenen
+nichteinverstandener
+nichteinverstandenes
+nichteisenhaltig
+nichteisenhaltige
+nichteisenhaltigem
+nichteisenhaltigen
+nichteisenhaltiger
+nichteisenhaltiges
+nichteuropäisch
+nichteuropäische
+nichteuropäischem
+nichteuropäischen
+nichteuropäischer
+nichteuropäisches
+nichtflüchtig
+nichtflüchtige
+nichtflüchtigem
+nichtflüchtigen
+nichtflüchtiger
+nichtflüchtiges
+nichtgewünscht
+nichtgewünschte
+nichtgewünschtem
+nichtgewünschten
+nichtgewünschter
+nichtgewünschtes
+nichtig
+nichtige
+nichtigem
+nichtigen
+nichtiger
+nichtiges
+nichtjapanisch
+nichtjapanische
+nichtjapanischem
+nichtjapanischen
+nichtjapanischer
+nichtjapanisches
+nichtklassisch
+nichtklassische
+nichtklassischem
+nichtklassischen
+nichtklassischer
+nichtklassisches
+nichtkommunistisch
+nichtkommunistische
+nichtkommunistischem
+nichtkommunistischen
+nichtkommunistischer
+nichtkommunistisches
+nichtlinear
+nichtlineare
+nichtlinearem
+nichtlinearen
+nichtlinearer
+nichtlineares
+nichtoptimierend
+nichtoptimierende
+nichtoptimierendem
+nichtoptimierenden
+nichtoptimierender
+nichtoptimierendes
+nichtproduktiv
+nichtproduktive
+nichtproduktivem
+nichtproduktiven
+nichtproduktiver
+nichtproduktives
+nichtrussisch
+nichtrussische
+nichtrussischem
+nichtrussischen
+nichtrussischer
+nichtrussisches
+nichts
+nichtsdestotrotz
+nichtsdestoweniger
+nichtsequentiell
+nichtsequentielle
+nichtsequentiellem
+nichtsequentiellen
+nichtsequentieller
+nichtsequentielles
+nichtsequenziell
+nichtsequenzielle
+nichtsequenziellem
+nichtsequenziellen
+nichtsequenzieller
+nichtsequenzielles
+nichtsnutzig
+nichtsnutzige
+nichtsnutzigem
+nichtsnutzigen
+nichtsnutziger
+nichtsnutziges
+nichttechnisch
+nichttechnische
+nichttechnischem
+nichttechnischen
+nichttechnischer
+nichttechnisches
+nichtverhandlungsfähig
+nichtverhandlungsfähige
+nichtverhandlungsfähigem
+nichtverhandlungsfähigen
+nichtverhandlungsfähiger
+nichtverhandlungsfähiges
+nichtverwandt
+nichtverwandte
+nichtverwandtem
+nichtverwandten
+nichtverwandter
+nichtverwandtes
+nichtweiß
+nichtweiße
+nichtweißem
+nichtweißen
+nichtweißer
+nichtweißes
+nichtzulässig
+nichtzulässige
+nichtzulässigem
+nichtzulässigen
+nichtzulässiger
+nichtzulässiges
+nichtzutreffend
+nichtzutreffende
+nichtzutreffendem
+nichtzutreffenden
+nichtzutreffender
+nichtzutreffendes
+nichtöffentlich
+nichtöffentliche
+nichtöffentlichem
+nichtöffentlichen
+nichtöffentlicher
+nichtöffentliches
+nicke
+nicken
+nickend
+nickende
+nickendem
+nickenden
+nickender
+nickendes
+nickst
+nickt
+nickte
+nickten
+nicktest
+nicktet
+nie
+nieder
+niederdeutsch
+niederdeutsche
+niederdeutschem
+niederdeutschen
+niederdeutscher
+niederdeutsches
+niedere
+niederem
+niederen
+niederer
+niederes
+niederfrequent
+niederfrequente
+niederfrequentem
+niederfrequenten
+niederfrequenter
+niederfrequentere
+niederfrequenterem
+niederfrequenteren
+niederfrequenterer
+niederfrequenteres
+niederfrequentes
+niederfrequenteste
+niederfrequentestem
+niederfrequentesten
+niederfrequentester
+niederfrequentestes
+niedergebracht
+niedergebrachte
+niedergebrachtem
+niedergebrachten
+niedergebrachter
+niedergebrachtes
+niedergebrannt
+niedergebrannte
+niedergebranntem
+niedergebrannten
+niedergebrannter
+niedergebranntes
+niedergedrückt
+niedergedrückte
+niedergedrücktem
+niedergedrückten
+niedergedrückter
+niedergedrücktere
+niedergedrückterem
+niedergedrückteren
+niedergedrückterer
+niedergedrückteres
+niedergedrücktes
+niedergedrückteste
+niedergedrücktestem
+niedergedrücktesten
+niedergedrücktester
+niedergedrücktestes
+niedergefallen
+niedergefallene
+niedergefallenem
+niedergefallenen
+niedergefallener
+niedergefallenes
+niedergegangen
+niedergegangene
+niedergegangenem
+niedergegangenen
+niedergegangener
+niedergegangenes
+niedergehalten
+niedergehaltene
+niedergehaltenem
+niedergehaltenen
+niedergehaltener
+niedergehaltenes
+niedergehe
+niedergehen
+niedergehend
+niedergehende
+niedergehendem
+niedergehenden
+niedergehender
+niedergehendes
+niedergehst
+niedergeht
+niedergeknüppelt
+niedergeknüppelte
+niedergeknüppeltem
+niedergeknüppelten
+niedergeknüppelter
+niedergeknüppeltes
+niedergekämpft
+niedergekämpfte
+niedergekämpftem
+niedergekämpften
+niedergekämpfter
+niedergekämpftes
+niedergelassen
+niedergelassene
+niedergelassenem
+niedergelassenen
+niedergelassener
+niedergelassenes
+niedergelegt
+niedergelegte
+niedergelegtem
+niedergelegten
+niedergelegter
+niedergelegtes
+niedergemacht
+niedergemachte
+niedergemachtem
+niedergemachten
+niedergemachter
+niedergemachtes
+niedergerissen
+niedergerissene
+niedergerissenem
+niedergerissenen
+niedergerissener
+niedergerissenes
+niedergeschlagen
+niedergeschlagene
+niedergeschlagenem
+niedergeschlagenen
+niedergeschlagener
+niedergeschlagenere
+niedergeschlagenerem
+niedergeschlageneren
+niedergeschlagenerer
+niedergeschlageneres
+niedergeschlagenes
+niedergeschlagenste
+niedergeschlagenstem
+niedergeschlagensten
+niedergeschlagenster
+niedergeschlagenstes
+niedergeschossen
+niedergeschossene
+niedergeschossenem
+niedergeschossenen
+niedergeschossener
+niedergeschossenes
+niedergeschrieben
+niedergeschriebene
+niedergeschriebenem
+niedergeschriebenen
+niedergeschriebener
+niedergeschriebenes
+niedergesetzt
+niedergesetzte
+niedergesetztem
+niedergesetzten
+niedergesetzter
+niedergesetztes
+niederging
+niedergingen
+niedergingst
+niedergingt
+niederlasse
+niederlassen
+niederlassend
+niederlassende
+niederlassendem
+niederlassenden
+niederlassender
+niederlassendes
+niederlasst
+niederlege
+niederlegen
+niederlegst
+niederlegt
+niederlegte
+niederlegten
+niederlegtest
+niederlegtet
+niederließ
+niederließen
+niederließest
+niederließt
+niederländisch
+niederländische
+niederländischem
+niederländischen
+niederländischer
+niederländisches
+niedermache
+niedermachen
+niedermachend
+niedermachende
+niedermachendem
+niedermachenden
+niedermachender
+niedermachendes
+niedermachst
+niedermacht
+niedermachte
+niedermachten
+niedermachtest
+niedermachtet
+niederohmig
+niederohmige
+niederohmigem
+niederohmigen
+niederohmiger
+niederohmiges
+niederreiße
+niederreißen
+niederreißend
+niederreißende
+niederreißendem
+niederreißenden
+niederreißender
+niederreißendes
+niederreißest
+niederreißt
+niederrheinisch
+niederrheinische
+niederrheinischem
+niederrheinischen
+niederrheinischer
+niederrheinisches
+niedersause
+niedersausen
+niedersausend
+niedersausende
+niedersausendem
+niedersausenden
+niedersausender
+niedersausendes
+niedersausest
+niedersaust
+niedersauste
+niedersaustem
+niedersausten
+niedersauster
+niedersaustes
+niedersaustest
+niedersaustet
+niederschlage
+niederschlagen
+niederschlagend
+niederschlagende
+niederschlagendem
+niederschlagenden
+niederschlagender
+niederschlagendes
+niederschlagsfrei
+niederschlagsfreie
+niederschlagsfreiem
+niederschlagsfreien
+niederschlagsfreier
+niederschlagsfreies
+niederschlagt
+niederschlug
+niederschlugen
+niederschlugst
+niederschlugt
+niederschlägst
+niederschlägt
+niederschmettere
+niederschmettern
+niederschmetternd
+niederschmetternde
+niederschmetterndem
+niederschmetternden
+niederschmetternder
+niederschmetterndes
+niederschmetterst
+niederschmettert
+niederschmetterte
+niederschmetterten
+niederschmettertest
+niederschmettertet
+niederschmettre
+niederschreibe
+niederschreiben
+niederschreibend
+niederschreibende
+niederschreibendem
+niederschreibenden
+niederschreibender
+niederschreibendes
+niederschreibst
+niederschreibt
+niederschrieb
+niederschrieben
+niederschriebst
+niederschriebt
+niederste
+niederstem
+niedersten
+niederster
+niederstes
+niedersächsisch
+niedersächsische
+niedersächsischem
+niedersächsischen
+niedersächsischer
+niedersächsisches
+niederträchtig
+niederträchtige
+niederträchtigem
+niederträchtigen
+niederträchtiger
+niederträchtigere
+niederträchtigerem
+niederträchtigeren
+niederträchtigerer
+niederträchtigeres
+niederträchtiges
+niederträchtigste
+niederträchtigstem
+niederträchtigsten
+niederträchtigster
+niederträchtigstes
+niederzubulldozen
+niederzubulldozend
+niederzubulldozende
+niederzubulldozendem
+niederzubulldozenden
+niederzubulldozender
+niederzubulldozendes
+niederzuschlagen
+niederzuschlagend
+niederzuschlagende
+niederzuschlagendem
+niederzuschlagenden
+niederzuschlagender
+niederzuschlagendes
+niedlich
+niedliche
+niedlichem
+niedlichen
+niedlicher
+niedlichere
+niedlicherem
+niedlicheren
+niedlicherer
+niedlicheres
+niedliches
+niedlichste
+niedlichstem
+niedlichsten
+niedlichster
+niedlichstes
+niedrig
+niedrige
+niedrigem
+niedrigen
+niedriger
+niedrigere
+niedrigerem
+niedrigeren
+niedrigerer
+niedrigeres
+niedriges
+niedrigste
+niedrigstem
+niedrigsten
+niedrigster
+niedrigstes
+niemals
+niemand
+niemandem
+niemanden
+niese
+niesele
+nieseln
+nieselnd
+nieselnde
+nieselndem
+nieselnden
+nieselnder
+nieselndes
+nieselst
+nieselt
+nieselte
+nieselten
+nieseltest
+nieseltet
+niesen
+niesend
+niesende
+niesendem
+niesenden
+niesender
+niesendes
+niesest
+niesle
+niest
+nieste
+niesten
+niestest
+niestet
+niet
+nihilistisch
+nihilistische
+nihilistischem
+nihilistischen
+nihilistischer
+nihilistisches
+nimmer
+nimmermüde
+nimmermüdem
+nimmermüden
+nimmermüder
+nimmermüdes
+nimmst
+nimmt
+nippe
+nippen
+nippend
+nippende
+nippendem
+nippenden
+nippender
+nippendes
+nippst
+nippt
+nippte
+nippten
+nipptest
+nipptet
+nirgend
+nirgends
+nirgendwo
+nirgendwohin
+niste
+nisten
+nistend
+nistende
+nistendem
+nistenden
+nistender
+nistendes
+nistest
+nistet
+nistete
+nisteten
+nistetest
+nistetet
+nivelliere
+nivellieren
+nivellierend
+nivellierende
+nivellierendem
+nivellierenden
+nivellierender
+nivellierendes
+nivellierst
+nivelliert
+nivellierte
+nivelliertem
+nivellierten
+nivellierter
+nivelliertes
+nivelliertest
+nivelliertet
+nobel
+noble
+noblem
+noblen
+nobler
+nobles
+noch
+nochmal
+nochmalig
+nochmalige
+nochmaligem
+nochmaligen
+nochmaliger
+nochmaliges
+nochmals
+noethersch
+noethersche
+noetherschem
+noetherschen
+noetherscher
+noethersches
+nominal
+nominale
+nominalem
+nominalen
+nominaler
+nominales
+nominell
+nominelle
+nominellem
+nominellen
+nomineller
+nominelles
+nominiere
+nominieren
+nominierend
+nominierende
+nominierendem
+nominierenden
+nominierender
+nominierendes
+nominierst
+nominiert
+nominierte
+nominiertem
+nominierten
+nominierter
+nominiertes
+nominiertest
+nominiertet
+nonkonformistisch
+nonkonformistische
+nonkonformistischem
+nonkonformistischen
+nonkonformistischer
+nonkonformistisches
+nonstop
+nordamerikanisch
+nordamerikanische
+nordamerikanischem
+nordamerikanischen
+nordamerikanischer
+nordamerikanisches
+nordatlantisch
+nordatlantische
+nordatlantischem
+nordatlantischen
+nordatlantischer
+nordatlantisches
+nordisch
+nordische
+nordischem
+nordischen
+nordischer
+nordisches
+nordostwärts
+nordwestlich
+nordwestliche
+nordwestlichem
+nordwestlichen
+nordwestlicher
+nordwestliches
+nordwärts
+normal
+normale
+normalem
+normalen
+normaler
+normalere
+normalerem
+normaleren
+normalerer
+normaleres
+normalerweise
+normales
+normalisiere
+normalisieren
+normalisierend
+normalisierende
+normalisierendem
+normalisierenden
+normalisierender
+normalisierendes
+normalisierst
+normalisiert
+normalisierte
+normalisiertem
+normalisierten
+normalisierter
+normalisiertes
+normalisiertest
+normalisiertet
+normalste
+normalstem
+normalsten
+normalster
+normalstes
+normannisch
+normannische
+normannischem
+normannischen
+normannischer
+normannisches
+normativ
+normative
+normativem
+normativen
+normativer
+normatives
+norme
+normgerecht
+normgerechte
+normgerechtem
+normgerechten
+normgerechter
+normgerechtes
+normierbar
+normierbare
+normierbarem
+normierbaren
+normierbarer
+normierbares
+normiere
+normieren
+normierend
+normierende
+normierendem
+normierenden
+normierender
+normierendes
+normierst
+normiert
+normierte
+normiertem
+normierten
+normierter
+normiertes
+normiertest
+normiertet
+norwegisch
+norwegische
+norwegischem
+norwegischen
+norwegischer
+norwegisches
+nostalgisch
+nostalgische
+nostalgischem
+nostalgischen
+nostalgischer
+nostalgisches
+notariell
+notarielle
+notariellem
+notariellen
+notarieller
+notarielles
+notdürftig
+notdürftige
+notdürftigem
+notdürftigen
+notdürftiger
+notdürftigere
+notdürftigerem
+notdürftigeren
+notdürftigerer
+notdürftigeres
+notdürftiges
+notdürftigste
+notdürftigstem
+notdürftigsten
+notdürftigster
+notdürftigstes
+notfalls
+notgedrungen
+notgedrungene
+notgedrungenem
+notgedrungenen
+notgedrungener
+notgedrungenerweise
+notgedrungenes
+notgelandet
+notgelandete
+notgelandetem
+notgelandeten
+notgelandeter
+notgelandetes
+notgeschlachtet
+notgeschlachtete
+notgeschlachtetem
+notgeschlachteten
+notgeschlachteter
+notgeschlachtetes
+notiere
+notieren
+notierend
+notierende
+notierendem
+notierenden
+notierender
+notierendes
+notierst
+notiert
+notierte
+notiertem
+notierten
+notierter
+notiertes
+notiertest
+notiertet
+notlande
+notlanden
+notlandend
+notlandende
+notlandendem
+notlandenden
+notlandender
+notlandendes
+notlandest
+notlandet
+notlandete
+notlandeten
+notlandetest
+notlandetet
+notorisch
+notorische
+notorischem
+notorischen
+notorischer
+notorisches
+nottust
+nottut
+notwendig
+notwendige
+notwendigem
+notwendigen
+notwendiger
+notwendigere
+notwendigerem
+notwendigeren
+notwendigerer
+notwendigeres
+notwendigerweise
+notwendiges
+notwendigste
+notwendigstem
+notwendigsten
+notwendigster
+notwendigstes
+nsec
+nuanciere
+nuancieren
+nuancierend
+nuancierende
+nuancierendem
+nuancierenden
+nuancierender
+nuancierendes
+nuancierst
+nuanciert
+nuancierte
+nuanciertem
+nuancierten
+nuancierter
+nuanciertes
+nuanciertest
+nuanciertet
+nuklear
+nukleare
+nuklearem
+nuklearen
+nuklearer
+nukleares
+nullte
+nulltem
+nullten
+nullter
+nulltes
+numerisch
+numerische
+numerischem
+numerischen
+numerischer
+numerisches
+nummere
+nummeriere
+nummerieren
+nummerierend
+nummerierende
+nummerierendem
+nummerierenden
+nummerierender
+nummerierendes
+nummerierst
+nummeriert
+nummerierte
+nummeriertem
+nummerierten
+nummerierter
+nummeriertes
+nummeriertest
+nummeriertet
+nummerisch
+nummerische
+nummerischem
+nummerischen
+nummerischer
+nummerisches
+nummern
+nummernd
+nummernde
+nummerndem
+nummernden
+nummernder
+nummerndes
+nummerst
+nummert
+nummerte
+nummerten
+nummertest
+nummertet
+nummre
+nun
+nunmehr
+nur
+nurmehr
+nutzbar
+nutzbare
+nutzbarem
+nutzbaren
+nutzbarer
+nutzbarere
+nutzbarerem
+nutzbareren
+nutzbarerer
+nutzbareres
+nutzbares
+nutzbarste
+nutzbarstem
+nutzbarsten
+nutzbarster
+nutzbarstes
+nutzbringend
+nutzbringende
+nutzbringendem
+nutzbringenden
+nutzbringender
+nutzbringendes
+nutze
+nutzen
+nutzend
+nutzende
+nutzendem
+nutzenden
+nutzender
+nutzendes
+nutzest
+nutzlos
+nutzlose
+nutzlosem
+nutzlosen
+nutzloser
+nutzlosere
+nutzloserem
+nutzloseren
+nutzloserer
+nutzloseres
+nutzloses
+nutzloseste
+nutzlosestem
+nutzlosesten
+nutzlosester
+nutzlosestes
+nutzt
+nutzte
+nutzten
+nutztest
+nutztet
+nächst
+nächstbeste
+nächstbestem
+nächstbesten
+nächstbester
+nächstbestes
+nächste
+nächstem
+nächsten
+nächster
+nächstes
+nächstgelegen
+nächstgelegene
+nächstgelegenem
+nächstgelegenen
+nächstgelegener
+nächstgelegenes
+nächstgrößere
+nächstgrößerem
+nächstgrößeren
+nächstgrößerer
+nächstgrößeres
+nächstjährig
+nächstjährige
+nächstjährigem
+nächstjährigen
+nächstjähriger
+nächstjähriges
+nächstkleinere
+nächstkleinerem
+nächstkleineren
+nächstkleinerer
+nächstkleineres
+nächstliegend
+nächstliegende
+nächstliegendem
+nächstliegenden
+nächstliegender
+nächstliegendere
+nächstliegenderem
+nächstliegenderen
+nächstliegenderer
+nächstliegenderes
+nächstliegendes
+nächstliegendste
+nächstliegendstem
+nächstliegendsten
+nächstliegendster
+nächstliegendstes
+nächstmöglich
+nächstmögliche
+nächstmöglichem
+nächstmöglichen
+nächstmöglicher
+nächstmögliches
+nächststärkste
+nächststärkstem
+nächststärksten
+nächststärkster
+nächststärkstes
+nächstälteste
+nächstältestem
+nächstältesten
+nächstältester
+nächstältestes
+nächtelang
+nächtelange
+nächtelangem
+nächtelangen
+nächtelanger
+nächtelanges
+nächtige
+nächtigen
+nächtigend
+nächtigende
+nächtigendem
+nächtigenden
+nächtigender
+nächtigendes
+nächtigst
+nächtigt
+nächtigte
+nächtigten
+nächtigtest
+nächtigtet
+nächtlich
+nächtliche
+nächtlichem
+nächtlichen
+nächtlicher
+nächtliches
+nähe
+nähen
+nähend
+nähende
+nähendem
+nähenden
+nähender
+nähendes
+näher
+nähere
+näherem
+näheren
+näherer
+näheres
+nähergekommen
+nähergekommene
+nähergekommenem
+nähergekommenen
+nähergekommener
+nähergekommenes
+nähergerückt
+nähergerückte
+nähergerücktem
+nähergerückten
+nähergerückter
+nähergerücktes
+nähern
+nähernd
+nähernde
+näherndem
+nähernden
+nähernder
+näherndes
+näherst
+nähert
+näherte
+näherten
+nähertest
+nähertet
+näherungsweise
+nähme
+nähmen
+nähmst
+nähmt
+nähre
+nähren
+nährend
+nährende
+nährendem
+nährenden
+nährender
+nährendes
+nährhaft
+nährhafte
+nährhaftem
+nährhaften
+nährhafter
+nährhaftes
+nährst
+nährt
+nährte
+nährten
+nährtest
+nährtet
+nähst
+näht
+nähte
+nähten
+nähtest
+nähtet
+nämlich
+nämliche
+nämlichem
+nämlichen
+nämlicher
+nämliches
+närrisch
+närrische
+närrischem
+närrischen
+närrischer
+närrischere
+närrischerem
+närrischeren
+närrischerer
+närrischeres
+närrisches
+närrischste
+närrischstem
+närrischsten
+närrischster
+närrischstes
+näsele
+näseln
+näselnd
+näselnde
+näselndem
+näselnden
+näselnder
+näselndes
+näselst
+näselt
+näselte
+näselten
+näseltest
+näseltet
+näsle
+nördlich
+nördliche
+nördlichem
+nördlichen
+nördlicher
+nördlichere
+nördlicherem
+nördlicheren
+nördlicherer
+nördlicheres
+nördliches
+nördlichste
+nördlichstem
+nördlichsten
+nördlichster
+nördlichstes
+nörgele
+nörgeln
+nörgelnd
+nörgelnde
+nörgelndem
+nörgelnden
+nörgelnder
+nörgelndes
+nörgelst
+nörgelt
+nörgelte
+nörgelten
+nörgeltest
+nörgeltet
+nörgle
+nötig
+nötige
+nötigem
+nötigen
+nötigend
+nötigende
+nötigendem
+nötigenden
+nötigender
+nötigendes
+nötigenfalls
+nötiger
+nötigere
+nötigerem
+nötigeren
+nötigerer
+nötigeres
+nötiges
+nötigst
+nötigste
+nötigstem
+nötigsten
+nötigster
+nötigstes
+nötigt
+nötigte
+nötigten
+nötigtest
+nötigtet
+nüchtern
+nüchterne
+nüchternem
+nüchternen
+nüchterner
+nüchternere
+nüchternerem
+nüchterneren
+nüchternerer
+nüchterneres
+nüchternes
+nüchternste
+nüchternstem
+nüchternsten
+nüchternster
+nüchternstes
+nütze
+nützen
+nützend
+nützende
+nützendem
+nützenden
+nützender
+nützendes
+nützest
+nützlich
+nützliche
+nützlichem
+nützlichen
+nützlicher
+nützlichere
+nützlicherem
+nützlicheren
+nützlicherer
+nützlicheres
+nützliches
+nützlichste
+nützlichstem
+nützlichsten
+nützlichster
+nützlichstes
+nützt
+nützte
+nützten
+nütztest
+nütztet
+ob
+obdachlos
+obdachlose
+obdachlosem
+obdachlosen
+obdachloser
+obdachloses
+oben
+obenan
+obenauf
+obendrein
+ober
+obere
+oberem
+oberen
+oberer
+oberes
+oberflächlich
+oberflächliche
+oberflächlichem
+oberflächlichen
+oberflächlicher
+oberflächlichere
+oberflächlicherem
+oberflächlicheren
+oberflächlicherer
+oberflächlicheres
+oberflächliches
+oberflächlichste
+oberflächlichstem
+oberflächlichsten
+oberflächlichster
+oberflächlichstes
+oberhalb
+oberst
+oberste
+oberstem
+obersten
+oberster
+oberstes
+obgleich
+obig
+obige
+obigem
+obigen
+obiger
+obiges
+objektiv
+objektive
+objektivem
+objektiven
+objektiver
+objektivere
+objektiverem
+objektiveren
+objektiverer
+objektiveres
+objektives
+objektivierbar
+objektivierbare
+objektivierbarem
+objektivierbaren
+objektivierbarer
+objektivierbares
+objektiviere
+objektivieren
+objektivierend
+objektivierende
+objektivierendem
+objektivierenden
+objektivierender
+objektivierendes
+objektivierst
+objektiviert
+objektivierte
+objektiviertem
+objektivierten
+objektivierter
+objektiviertes
+objektiviertest
+objektiviertet
+objektivste
+objektivstem
+objektivsten
+objektivster
+objektivstes
+objektorientiert
+objektorientierte
+objektorientiertem
+objektorientierten
+objektorientierter
+objektorientiertes
+oblag
+oblagen
+oblagst
+oblagt
+obliege
+obliegen
+obliegend
+obliegende
+obliegendem
+obliegenden
+obliegender
+obliegendes
+obliegst
+obliegt
+obliegte
+obliegten
+obliegtest
+obliegtet
+obligat
+obligate
+obligatem
+obligaten
+obligater
+obligates
+obligatorisch
+obligatorische
+obligatorischem
+obligatorischen
+obligatorischer
+obligatorisches
+obschon
+obskur
+obskure
+obskurem
+obskuren
+obskurer
+obskures
+obsolet
+obsolete
+obsoletem
+obsoleten
+obsoleter
+obsoletes
+obwalte
+obwalten
+obwaltend
+obwaltende
+obwaltendem
+obwaltenden
+obwaltender
+obwaltendes
+obwaltest
+obwaltet
+obwaltete
+obwalteten
+obwaltetest
+obwaltetet
+obwohl
+obzwar
+ocker
+ockergelb
+ockergelbe
+ockergelbem
+ockergelben
+ockergelber
+ockergelbes
+oder
+offen
+offenbar
+offenbare
+offenbarem
+offenbaren
+offenbarend
+offenbarende
+offenbarendem
+offenbarenden
+offenbarender
+offenbarendes
+offenbarer
+offenbares
+offenbarlich
+offenbarliche
+offenbarlichem
+offenbarlichen
+offenbarlicher
+offenbarliches
+offenbarst
+offenbart
+offenbarte
+offenbartem
+offenbarten
+offenbarter
+offenbartes
+offenbartest
+offenbartet
+offene
+offenem
+offenen
+offener
+offenere
+offenerem
+offeneren
+offenerer
+offeneres
+offenes
+offenherzig
+offenherzige
+offenherzigem
+offenherzigen
+offenherziger
+offenherzigere
+offenherzigerem
+offenherzigeren
+offenherzigerer
+offenherzigeres
+offenherziges
+offenherzigste
+offenherzigstem
+offenherzigsten
+offenherzigster
+offenherzigstes
+offenkundig
+offenkundige
+offenkundigem
+offenkundigen
+offenkundiger
+offenkundigere
+offenkundigerem
+offenkundigeren
+offenkundigerer
+offenkundigeres
+offenkundiges
+offenkundigst
+offenkundigste
+offenkundigstem
+offenkundigsten
+offenkundigster
+offenkundigstes
+offensichtlich
+offensichtliche
+offensichtlichem
+offensichtlichen
+offensichtlicher
+offensichtlichere
+offensichtlicherem
+offensichtlicheren
+offensichtlicherer
+offensichtlicheres
+offensichtliches
+offensichtlichste
+offensichtlichstem
+offensichtlichsten
+offensichtlichster
+offensichtlichstes
+offensiv
+offensive
+offensivem
+offensiven
+offensiver
+offensives
+offenste
+offenstem
+offensten
+offenster
+offenstes
+offeriere
+offerieren
+offerierend
+offerierende
+offerierendem
+offerierenden
+offerierender
+offerierendes
+offerierst
+offeriert
+offerierte
+offeriertem
+offerierten
+offerierter
+offeriertes
+offeriertest
+offeriertet
+offiziell
+offizielle
+offiziellem
+offiziellen
+offizieller
+offiziellere
+offiziellerem
+offizielleren
+offiziellerer
+offizielleres
+offizielles
+offiziellste
+offiziellstem
+offiziellsten
+offiziellster
+offiziellstes
+offiziös
+offiziöse
+offiziösem
+offiziösen
+offiziöser
+offiziöses
+offqqline
+offsetgedruckt
+offsetgedruckte
+offsetgedrucktem
+offsetgedruckten
+offsetgedruckter
+offsetgedrucktes
+oft
+oftmalig
+oftmalige
+oftmaligem
+oftmaligen
+oftmaliger
+oftmaliges
+oftmals
+oh
+ohmsch
+ohmsche
+ohmschem
+ohmschen
+ohmscher
+ohmsches
+ohne
+ohnedies
+ohnegleichen
+ohnehin
+ohnmächtig
+ohnmächtige
+ohnmächtigem
+ohnmächtigen
+ohnmächtiger
+ohnmächtiges
+oho
+ohrenbetäubend
+ohrenbetäubende
+ohrenbetäubendem
+ohrenbetäubenden
+ohrenbetäubender
+ohrenbetäubendes
+ohrfeige
+ohrfeigen
+ohrfeigend
+ohrfeigende
+ohrfeigendem
+ohrfeigenden
+ohrfeigender
+ohrfeigendes
+ohrfeigst
+ohrfeigt
+ohrfeigte
+ohrfeigten
+ohrfeigtest
+ohrfeigtet
+ok
+okkult
+okkulte
+okkultem
+okkulten
+okkulter
+okkultes
+okkupiere
+okkupieren
+okkupierend
+okkupierende
+okkupierendem
+okkupierenden
+okkupierender
+okkupierendes
+okkupierst
+okkupiert
+okkupierte
+okkupiertem
+okkupierten
+okkupierter
+okkupiertes
+okkupiertest
+okkupiertet
+oktroyiere
+oktroyieren
+oktroyierend
+oktroyierende
+oktroyierendem
+oktroyierenden
+oktroyierender
+oktroyierendes
+oktroyierst
+oktroyiert
+oktroyierte
+oktroyiertem
+oktroyierten
+oktroyierter
+oktroyiertes
+oktroyiertest
+oktroyiertet
+oligarchisch
+oligarchische
+oligarchischem
+oligarchischen
+oligarchischer
+oligarchisches
+oligopolistisch
+oligopolistische
+oligopolistischem
+oligopolistischen
+oligopolistischer
+oligopolistisches
+olivgrün
+olivgrüne
+olivgrünem
+olivgrünen
+olivgrüner
+olivgrünes
+olympisch
+olympische
+olympischem
+olympischen
+olympischer
+olympisches
+omega
+ominös
+ominöse
+ominösem
+ominösen
+ominöser
+ominöses
+onanier
+onaniere
+onanieren
+onanierend
+onanierende
+onanierendem
+onanierenden
+onanierender
+onanierendes
+onanierst
+onaniert
+onanierte
+onanierten
+onaniertest
+onaniertet
+onkelhaft
+onkelhafte
+onkelhaftem
+onkelhaften
+onkelhafter
+onkelhaftes
+online
+operational
+operationale
+operationalem
+operationalen
+operationaler
+operationales
+operationalisierbar
+operationalisierbare
+operationalisierbarem
+operationalisierbaren
+operationalisierbarer
+operationalisierbares
+operationalisiere
+operationalisieren
+operationalisierst
+operationalisiert
+operationalisierte
+operationalisiertem
+operationalisierten
+operationalisierter
+operationalisiertes
+operationalisiertest
+operationalisiertet
+operativ
+operative
+operativem
+operativen
+operativer
+operatives
+operettenhaft
+operettenhafte
+operettenhaftem
+operettenhaften
+operettenhafter
+operettenhaftes
+operierbar
+operierbare
+operierbarem
+operierbaren
+operierbarer
+operierbares
+operiere
+operieren
+operierend
+operierende
+operierendem
+operierenden
+operierender
+operierendes
+operierst
+operiert
+operierte
+operiertem
+operierten
+operierter
+operiertes
+operiertest
+operiertet
+opferbereit
+opferbereite
+opferbereitem
+opferbereiten
+opferbereiter
+opferbereites
+opfere
+opfern
+opferreich
+opferreiche
+opferreichem
+opferreichen
+opferreicher
+opferreiches
+opferst
+opfert
+opferte
+opferten
+opfertest
+opfertet
+opfre
+opponiere
+opponieren
+opponierend
+opponierende
+opponierendem
+opponierenden
+opponierender
+opponierendes
+opponierst
+opponiert
+opponierte
+opponierten
+opponiertest
+opponiertet
+opportun
+opportune
+opportunem
+opportunen
+opportuner
+opportunes
+opportunistisch
+opportunistische
+opportunistischem
+opportunistischen
+opportunistischer
+opportunistisches
+oppositionell
+oppositionelle
+oppositionellem
+oppositionellen
+oppositioneller
+oppositionelles
+optimal
+optimale
+optimalem
+optimalen
+optimaler
+optimales
+optimierbar
+optimierbare
+optimierbarem
+optimierbaren
+optimierbarer
+optimierbares
+optimiere
+optimieren
+optimierend
+optimierende
+optimierendem
+optimierenden
+optimierender
+optimierendes
+optimierst
+optimiert
+optimierte
+optimiertem
+optimierten
+optimierter
+optimiertes
+optimiertest
+optimiertet
+optimistisch
+optimistische
+optimistischem
+optimistischen
+optimistischer
+optimistischere
+optimistischerem
+optimistischeren
+optimistischerer
+optimistischeres
+optimistisches
+optimistischste
+optimistischstem
+optimistischsten
+optimistischster
+optimistischstes
+optional
+optionale
+optionalem
+optionalen
+optionaler
+optionales
+optisch
+optische
+optischem
+optischen
+optischer
+optisches
+optoelektronisch
+optoelektronische
+optoelektronischem
+optoelektronischen
+optoelektronischer
+optoelektronisches
+optoentkoppelt
+optoentkoppelte
+optoentkoppeltem
+optoentkoppelten
+optoentkoppelter
+optoentkoppeltes
+opulent
+opulente
+opulentem
+opulenten
+opulenter
+opulentes
+orangeroter
+ordentlich
+ordentliche
+ordentlichem
+ordentlichen
+ordentlicher
+ordentlichere
+ordentlicherem
+ordentlicheren
+ordentlicherer
+ordentlicheres
+ordentliches
+ordentlichste
+ordentlichstem
+ordentlichsten
+ordentlichster
+ordentlichstes
+ordere
+ordern
+ordernd
+ordernde
+orderndem
+ordernden
+ordernder
+orderndes
+orderst
+ordert
+orderte
+orderten
+ordertest
+ordertet
+ordinär
+ordinäre
+ordinärem
+ordinären
+ordinärer
+ordinärere
+ordinärerem
+ordinäreren
+ordinärerer
+ordinäreres
+ordinäres
+ordinärste
+ordinärstem
+ordinärsten
+ordinärster
+ordinärstes
+ordne
+ordnen
+ordnend
+ordnende
+ordnendem
+ordnenden
+ordnender
+ordnendes
+ordnest
+ordnet
+ordnete
+ordneten
+ordnetest
+ordnetet
+ordnungsgemäß
+ordnungsgemäße
+ordnungsgemäßem
+ordnungsgemäßen
+ordnungsgemäßer
+ordnungsgemäßes
+ordnungsliebend
+ordnungsliebende
+ordnungsliebendem
+ordnungsliebenden
+ordnungsliebender
+ordnungsliebendere
+ordnungsliebenderem
+ordnungsliebenderen
+ordnungsliebenderer
+ordnungsliebenderes
+ordnungsliebendes
+ordnungsliebendste
+ordnungsliebendstem
+ordnungsliebendsten
+ordnungsliebendster
+ordnungsliebendstes
+ordnungsmäßig
+ordnungsmäßige
+ordnungsmäßigem
+ordnungsmäßigen
+ordnungsmäßiger
+ordnungsmäßiges
+ordnungswidrig
+ordnungswidrige
+ordnungswidrigem
+ordnungswidrigen
+ordnungswidriger
+ordnungswidrigere
+ordnungswidrigerem
+ordnungswidrigeren
+ordnungswidrigerer
+ordnungswidrigeres
+ordnungswidriges
+ordnungswidrigste
+ordnungswidrigstem
+ordnungswidrigsten
+ordnungswidrigster
+ordnungswidrigstes
+ordre
+organisatorisch
+organisatorische
+organisatorischem
+organisatorischen
+organisatorischer
+organisatorisches
+organisch
+organische
+organischem
+organischen
+organischer
+organischere
+organischerem
+organischeren
+organischerer
+organischeres
+organisches
+organischste
+organischstem
+organischsten
+organischster
+organischstes
+organisiere
+organisieren
+organisierend
+organisierende
+organisierendem
+organisierenden
+organisierender
+organisierendes
+organisierst
+organisiert
+organisierte
+organisiertem
+organisierten
+organisierter
+organisiertes
+organisiertest
+organisiertet
+orgiastisch
+orgiastische
+orgiastischem
+orgiastischen
+orgiastischer
+orgiastisches
+orientalisch
+orientalische
+orientalischem
+orientalischen
+orientalischer
+orientalisches
+orientiere
+orientieren
+orientierend
+orientierende
+orientierendem
+orientierenden
+orientierender
+orientierendes
+orientierst
+orientiert
+orientierte
+orientiertem
+orientierten
+orientierter
+orientiertes
+orientiertest
+orientiertet
+originale
+originalem
+originalen
+originaler
+originales
+originalgetreu
+originalgetreue
+originalgetreuem
+originalgetreuen
+originalgetreuer
+originalgetreues
+originell
+originelle
+originellem
+originellen
+origineller
+originelles
+originär
+originäre
+originärem
+originären
+originärer
+originäres
+orkanartig
+orkanartige
+orkanartigem
+orkanartigen
+orkanartiger
+orkanartiges
+orte
+orten
+ortend
+ortende
+ortendem
+ortenden
+ortender
+ortendes
+ortest
+ortet
+ortete
+orteten
+ortetest
+ortetet
+orthodox
+orthodoxe
+orthodoxem
+orthodoxen
+orthodoxer
+orthodoxes
+orthogonal
+orthogonale
+orthogonalem
+orthogonalen
+orthogonaler
+orthogonales
+orthographisch
+orthographische
+orthographischem
+orthographischen
+orthographischer
+orthographisches
+orthopädisch
+orthopädische
+orthopädischem
+orthopädischen
+orthopädischer
+orthopädisches
+ortsabhängig
+ortsabhängige
+ortsabhängigem
+ortsabhängigen
+ortsabhängiger
+ortsabhängiges
+ortsansässig
+ortsansässige
+ortsansässigem
+ortsansässigen
+ortsansässiger
+ortsansässiges
+ortsfest
+ortsfeste
+ortsfestem
+ortsfesten
+ortsfester
+ortsfestes
+ortskundig
+ortskundige
+ortskundigem
+ortskundigen
+ortskundiger
+ortskundigere
+ortskundigerem
+ortskundigeren
+ortskundigerer
+ortskundigeres
+ortskundiges
+ortskundigste
+ortskundigstem
+ortskundigsten
+ortskundigster
+ortskundigstes
+ortsüblich
+ortsübliche
+ortsüblichem
+ortsüblichen
+ortsüblicher
+ortsübliches
+osmotisch
+osmotische
+osmotischem
+osmotischen
+osmotischer
+osmotisches
+ostasiatisch
+ostasiatische
+ostasiatischem
+ostasiatischen
+ostasiatischer
+ostasiatisches
+ostdeutsch
+ostdeutsche
+ostdeutschem
+ostdeutschen
+ostdeutscher
+ostdeutsches
+ostentativ
+ostentative
+ostentativem
+ostentativen
+ostentativer
+ostentatives
+osteuropäisch
+osteuropäische
+osteuropäischem
+osteuropäischen
+osteuropäischer
+osteuropäisches
+ostfriesisch
+ostfriesische
+ostfriesischem
+ostfriesischen
+ostfriesischer
+ostfriesisches
+ostindisch
+ostindische
+ostindischem
+ostindischen
+ostindischer
+ostindisches
+ostpreußisch
+ostpreußische
+ostpreußischem
+ostpreußischen
+ostpreußischer
+ostpreußisches
+ostwärts
+oszilliere
+oszillieren
+oszillierend
+oszillierende
+oszillierendem
+oszillierenden
+oszillierender
+oszillierendes
+oszillierst
+oszilliert
+oszillierte
+oszilliertem
+oszillierten
+oszillierter
+oszilliertes
+oszilliertest
+oszilliertet
+oszillographiere
+oszillographieren
+oszillographierst
+oszillographiert
+oszillographierte
+oszillographierten
+oszillographiertest
+oszillographiertet
+oszillographisch
+oszillographische
+oszillographischem
+oszillographischen
+oszillographischer
+oszillographisches
+oval
+ovale
+ovalem
+ovalen
+ovaler
+ovales
+ovulationshemmend
+ovulationshemmende
+ovulationshemmendem
+ovulationshemmenden
+ovulationshemmender
+ovulationshemmendes
+oxidiere
+oxidieren
+oxidierend
+oxidierende
+oxidierendem
+oxidierenden
+oxidierender
+oxidierendes
+oxidierst
+oxidiert
+oxidierte
+oxidiertem
+oxidierten
+oxidierter
+oxidiertes
+oxidiertest
+oxidiertet
+ozeanographisch
+ozeanographische
+ozeanographischem
+ozeanographischen
+ozeanographischer
+ozeanographisches
+paar
+paare
+paaren
+paarst
+paart
+paarte
+paarten
+paartest
+paartet
+paarweise
+paarweisem
+paarweisen
+paarweiser
+paarweises
+pachte
+pachten
+pachtend
+pachtende
+pachtendem
+pachtenden
+pachtender
+pachtendes
+pachtest
+pachtet
+pachtete
+pachteten
+pachtetest
+pachtetet
+packe
+packen
+packend
+packende
+packendem
+packenden
+packender
+packendes
+packst
+packt
+packte
+packten
+packtest
+packtet
+paddele
+paddeln
+paddelst
+paddelt
+paddelte
+paddelten
+paddeltest
+paddeltet
+paddle
+paffe
+paffen
+paffend
+paffende
+paffendem
+paffenden
+paffender
+paffendes
+paffst
+pafft
+paffte
+pafften
+pafftest
+pafftet
+pakistanisch
+pakistanische
+pakistanischem
+pakistanischen
+pakistanischer
+pakistanisches
+palavere
+palavern
+palavernd
+palavernde
+palaverndem
+palavernden
+palavernder
+palaverndes
+palaverst
+palavert
+palaverte
+palaverten
+palavertest
+palavertet
+palavre
+palästinensisch
+palästinensische
+palästinensischem
+palästinensischen
+palästinensischer
+palästinensisches
+pamphletistisch
+pamphletistische
+pamphletistischem
+pamphletistischen
+pamphletistischer
+pamphletistisches
+panamaisch
+panamaische
+panamaischem
+panamaischen
+panamaischer
+panamaisches
+panamesisch
+panamesische
+panamesischem
+panamesischen
+panamesischer
+panamesisches
+panarabisch
+panarabische
+panarabischem
+panarabischen
+panarabischer
+panarabisches
+paniere
+panieren
+panierend
+panierende
+panierendem
+panierenden
+panierender
+panierendes
+panierst
+paniert
+panierte
+paniertem
+panierten
+panierter
+paniertes
+paniertest
+paniertet
+panikartig
+panikartige
+panikartigem
+panikartigen
+panikartiger
+panikartiges
+panisch
+panische
+panischem
+panischen
+panischer
+panischere
+panischerem
+panischeren
+panischerer
+panischeres
+panisches
+panischste
+panischstem
+panischsten
+panischster
+panischstes
+pantomimisch
+pantomimische
+pantomimischem
+pantomimischen
+pantomimischer
+pantomimisches
+papiern
+papierne
+papiernem
+papiernen
+papierner
+papiernes
+pappig
+pappige
+pappigem
+pappigen
+pappiger
+pappigere
+pappigerem
+pappigeren
+pappigerer
+pappigeres
+pappiges
+pappigste
+pappigstem
+pappigsten
+pappigster
+pappigstes
+parabolisch
+parabolische
+parabolischem
+parabolischen
+parabolischer
+parabolisches
+paradiere
+paradieren
+paradierend
+paradierende
+paradierendem
+paradierenden
+paradierender
+paradierendes
+paradierst
+paradiert
+paradierte
+paradierten
+paradiertest
+paradiertet
+paradiesisch
+paradiesische
+paradiesischem
+paradiesischen
+paradiesischer
+paradiesisches
+paradox
+paradoxe
+paradoxem
+paradoxen
+paradoxer
+paradoxere
+paradoxerem
+paradoxeren
+paradoxerer
+paradoxeres
+paradoxerweise
+paradoxes
+paradoxeste
+paradoxestem
+paradoxesten
+paradoxester
+paradoxestes
+parallel
+parallele
+parallelem
+parallelen
+paralleler
+paralleles
+parallelisiere
+parallelisieren
+parallelisierend
+parallelisierende
+parallelisierendem
+parallelisierenden
+parallelisierender
+parallelisierendes
+parallelisierst
+parallelisiert
+parallelisierte
+parallelisiertem
+parallelisierten
+parallelisierter
+parallelisiertes
+parallelisiertest
+parallelisiertet
+paralysiere
+paralysieren
+paralysierend
+paralysierende
+paralysierendem
+paralysierenden
+paralysierender
+paralysierendes
+paralysierst
+paralysiert
+paralysierte
+paralysiertem
+paralysierten
+paralysierter
+paralysiertes
+paralysiertest
+paralysiertet
+paralytisch
+paralytische
+paralytischem
+paralytischen
+paralytischer
+paralytisches
+parameterlos
+parameterlose
+parameterlosem
+parameterlosen
+parameterloser
+parameterloses
+parametermäßig
+parametermäßige
+parametermäßigem
+parametermäßigen
+parametermäßiger
+parametermäßiges
+parametrierbar
+parametrierbare
+parametrierbarem
+parametrierbaren
+parametrierbarer
+parametrierbares
+parametriere
+parametrieren
+parametrierend
+parametrierende
+parametrierendem
+parametrierenden
+parametrierender
+parametrierendes
+parametrierst
+parametriert
+parametrierte
+parametriertem
+parametrierten
+parametrierter
+parametriertes
+parametriertest
+parametriertet
+parametrisch
+parametrische
+parametrischem
+parametrischen
+parametrischer
+parametrisches
+parametrisiere
+parametrisieren
+parametrisierst
+parametrisiert
+parametrisierte
+parametrisiertem
+parametrisierten
+parametrisierter
+parametrisiertes
+parametrisiertest
+parametrisiertet
+paramilitärisch
+paramilitärische
+paramilitärischem
+paramilitärischen
+paramilitärischer
+paramilitärisches
+paraphiere
+paraphieren
+paraphierst
+paraphiert
+paraphierte
+paraphiertem
+paraphierten
+paraphierter
+paraphiertes
+paraphiertest
+paraphiertet
+parasitisch
+parasitische
+parasitischem
+parasitischen
+parasitischer
+parasitisches
+parasitär
+parasitäre
+parasitärem
+parasitären
+parasitärer
+parasitäres
+parat
+parfümiere
+parfümieren
+parfümierend
+parfümierende
+parfümierendem
+parfümierenden
+parfümierender
+parfümierendes
+parfümierst
+parfümiert
+parfümierte
+parfümiertem
+parfümierten
+parfümierter
+parfümiertes
+parfümiertest
+parfümiertet
+parierbar
+parierbare
+parierbarem
+parierbaren
+parierbarer
+parierbares
+pariere
+parieren
+parierend
+parierende
+parierendem
+parierenden
+parierender
+parierendes
+parierst
+pariert
+parierte
+pariertem
+parierten
+parierter
+pariertes
+pariertest
+pariertet
+paritätisch
+paritätische
+paritätischem
+paritätischen
+paritätischer
+paritätisches
+parke
+parken
+parkend
+parkende
+parkendem
+parkenden
+parkender
+parkendes
+parkst
+parkt
+parkte
+parkten
+parktest
+parktet
+parlamentarisch
+parlamentarische
+parlamentarischem
+parlamentarischen
+parlamentarischer
+parlamentarisches
+parodiere
+parodieren
+parodierend
+parodierende
+parodierendem
+parodierenden
+parodierender
+parodierendes
+parodierst
+parodiert
+parodierte
+parodiertem
+parodierten
+parodierter
+parodiertes
+parodiertest
+parodiertet
+parodistisch
+parodistische
+parodistischem
+parodistischen
+parodistischer
+parodistisches
+parteiintern
+parteiinterne
+parteiinternem
+parteiinternen
+parteiinterner
+parteiinternes
+parteiisch
+parteiische
+parteiischem
+parteiischen
+parteiischer
+parteiischere
+parteiischerem
+parteiischeren
+parteiischerer
+parteiischeres
+parteiisches
+parteiischste
+parteiischstem
+parteiischsten
+parteiischster
+parteiischstes
+parteilich
+parteiliche
+parteilichem
+parteilichen
+parteilicher
+parteiliches
+parteilos
+parteilose
+parteilosem
+parteilosen
+parteiloser
+parteiloses
+parteipolitisch
+parteipolitische
+parteipolitischem
+parteipolitischen
+parteipolitischer
+parteipolitisches
+partiell
+partielle
+partiellem
+partiellen
+partieller
+partiellere
+partiellerem
+partielleren
+partiellerer
+partielleres
+partielles
+partiellste
+partiellstem
+partiellsten
+partiellster
+partiellstes
+partikular
+partikulare
+partikularem
+partikularen
+partikularer
+partikulares
+partikulär
+partikuläre
+partikulärem
+partikulären
+partikulärer
+partikuläres
+partitionierbar
+partitionierbare
+partitionierbarem
+partitionierbaren
+partitionierbarer
+partitionierbares
+partitioniere
+partitionieren
+partitionierend
+partitionierende
+partitionierendem
+partitionierenden
+partitionierender
+partitionierendes
+partitionierst
+partitioniert
+partitionierte
+partitioniertem
+partitionierten
+partitionierter
+partitioniertes
+partitioniertest
+partitioniertet
+partizipiere
+partizipieren
+partizipierend
+partizipierende
+partizipierendem
+partizipierenden
+partizipierender
+partizipierendes
+partizipierst
+partizipiert
+partizipierte
+partizipierten
+partizipiertest
+partizipiertet
+partnerschaftlich
+partnerschaftliche
+partnerschaftlichem
+partnerschaftlichen
+partnerschaftlicher
+partnerschaftliches
+parzelliere
+parzellieren
+parzellierst
+parzelliert
+parzellierte
+parzelliertem
+parzellierten
+parzellierter
+parzelliertes
+parzelliertest
+parzelliertet
+passabel
+passable
+passablem
+passablen
+passabler
+passables
+passe
+passee
+passen
+passend
+passende
+passendem
+passenden
+passender
+passendere
+passenderem
+passenderen
+passenderer
+passenderes
+passendes
+passendste
+passendstem
+passendsten
+passendster
+passendstes
+passest
+passgerecht
+passgerechte
+passgerechtem
+passgerechten
+passgerechter
+passgerechtes
+passierbar
+passierbare
+passierbarem
+passierbaren
+passierbarer
+passierbares
+passiere
+passieren
+passierend
+passierende
+passierendem
+passierenden
+passierender
+passierendes
+passierst
+passiert
+passierte
+passierten
+passiertest
+passiertet
+passioniert
+passionierte
+passioniertem
+passionierten
+passionierter
+passioniertere
+passionierterem
+passionierteren
+passionierterer
+passionierteres
+passioniertes
+passionierteste
+passioniertestem
+passioniertesten
+passioniertester
+passioniertestes
+passiv
+passive
+passivem
+passiven
+passiver
+passivere
+passiverem
+passiveren
+passiverer
+passiveres
+passives
+passiviere
+passivieren
+passivierend
+passivierende
+passivierendem
+passivierenden
+passivierender
+passivierendes
+passivierst
+passiviert
+passivierte
+passiviertem
+passivierten
+passivierter
+passiviertes
+passiviertest
+passiviertet
+passivste
+passivstem
+passivsten
+passivster
+passivstes
+passt
+passte
+passten
+passtest
+passtet
+passé
+pastenförmig
+pastenförmige
+pastenförmigem
+pastenförmigen
+pastenförmiger
+pastenförmiges
+pasteurisiere
+pasteurisieren
+pasteurisierend
+pasteurisierende
+pasteurisierendem
+pasteurisierenden
+pasteurisierender
+pasteurisierendes
+pasteurisierst
+pasteurisiert
+pasteurisierte
+pasteurisiertem
+pasteurisierten
+pasteurisierter
+pasteurisiertes
+pasteurisiertest
+pasteurisiertet
+pastoral
+pastorale
+pastoralem
+pastoralen
+pastoraler
+pastorales
+patent
+patente
+patentem
+patenten
+patenter
+patentes
+patentfähig
+patentfähige
+patentfähigem
+patentfähigen
+patentfähiger
+patentfähigere
+patentfähigerem
+patentfähigeren
+patentfähigerer
+patentfähigeres
+patentfähiges
+patentfähigste
+patentfähigstem
+patentfähigsten
+patentfähigster
+patentfähigstes
+patentierbar
+patentierbare
+patentierbarem
+patentierbaren
+patentierbarer
+patentierbares
+patentiere
+patentieren
+patentierend
+patentierende
+patentierendem
+patentierenden
+patentierender
+patentierendes
+patentierfähig
+patentierfähige
+patentierfähigem
+patentierfähigen
+patentierfähiger
+patentierfähiges
+patentierst
+patentiert
+patentierte
+patentiertem
+patentierten
+patentierter
+patentiertes
+patentiertest
+patentiertet
+patentrechtlich
+patentrechtliche
+patentrechtlichem
+patentrechtlichen
+patentrechtlicher
+patentrechtliches
+pathetisch
+pathetische
+pathetischem
+pathetischen
+pathetischer
+pathetischere
+pathetischerem
+pathetischeren
+pathetischerer
+pathetischeres
+pathetisches
+pathetischste
+pathetischstem
+pathetischsten
+pathetischster
+pathetischstes
+pathologisch
+pathologische
+pathologischem
+pathologischen
+pathologischer
+pathologischere
+pathologischerem
+pathologischeren
+pathologischerer
+pathologischeres
+pathologisches
+pathologischste
+pathologischstem
+pathologischsten
+pathologischster
+pathologischstes
+patriarchalisch
+patriarchalische
+patriarchalischem
+patriarchalischen
+patriarchalischer
+patriarchalisches
+patriotisch
+patriotische
+patriotischem
+patriotischen
+patriotischer
+patriotischere
+patriotischerem
+patriotischeren
+patriotischerer
+patriotischeres
+patriotisches
+patriotischste
+patriotischstem
+patriotischsten
+patriotischster
+patriotischstes
+patrouilliere
+patrouillieren
+patrouillierend
+patrouillierende
+patrouillierendem
+patrouillierenden
+patrouillierender
+patrouillierendes
+patrouillierst
+patrouilliert
+patrouillierte
+patrouillierten
+patrouilliertest
+patrouilliertet
+patschnass
+patschnasse
+patschnassem
+patschnassen
+patschnasser
+patschnasses
+patze
+patzen
+patzend
+patzende
+patzendem
+patzenden
+patzender
+patzendes
+patzest
+patzt
+patzte
+patzten
+patztest
+patztet
+pauke
+pauken
+paukst
+paukt
+paukte
+paukten
+pauktest
+pauktet
+pausbar
+pausbare
+pausbarem
+pausbaren
+pausbarer
+pausbares
+pausbäckig
+pausbäckige
+pausbäckigem
+pausbäckigen
+pausbäckiger
+pausbäckiges
+pauschal
+pauschale
+pauschalem
+pauschalen
+pauschaler
+pauschales
+pause
+pausen
+pausend
+pausende
+pausendem
+pausenden
+pausender
+pausendes
+pausenlos
+pausenlose
+pausenlosem
+pausenlosen
+pausenloser
+pausenloses
+pausest
+pausiere
+pausieren
+pausierend
+pausierende
+pausierendem
+pausierenden
+pausierender
+pausierendes
+pausierst
+pausiert
+pausierte
+pausierten
+pausiertest
+pausiertet
+paust
+pauste
+pausten
+paustest
+paustet
+pazifikblau
+pazifikblaue
+pazifikblauem
+pazifikblauen
+pazifikblauer
+pazifikblaues
+pazifisch
+pazifische
+pazifischem
+pazifischen
+pazifischer
+pazifisches
+pazifistisch
+pazifistische
+pazifistischem
+pazifistischen
+pazifistischer
+pazifistisches
+pechschwarz
+pechschwarze
+pechschwarzem
+pechschwarzen
+pechschwarzer
+pechschwarzes
+pedantisch
+pedantische
+pedantischem
+pedantischen
+pedantischer
+pedantischere
+pedantischerem
+pedantischeren
+pedantischerer
+pedantischeres
+pedantisches
+pedantischste
+pedantischstem
+pedantischsten
+pedantischster
+pedantischstes
+peile
+peilen
+peilend
+peilende
+peilendem
+peilenden
+peilender
+peilendes
+peilst
+peilt
+peilte
+peilten
+peiltest
+peiltet
+peinige
+peinigen
+peinigend
+peinigende
+peinigendem
+peinigenden
+peinigender
+peinigendes
+peinigst
+peinigt
+peinigte
+peinigten
+peinigtest
+peinigtet
+peinlich
+peinliche
+peinlichem
+peinlichen
+peinlicher
+peinlichere
+peinlicherem
+peinlicheren
+peinlicherer
+peinlicheres
+peinliches
+peinlichste
+peinlichstem
+peinlichsten
+peinlichster
+peinlichstes
+peitsche
+peitschen
+peitschend
+peitschende
+peitschendem
+peitschenden
+peitschender
+peitschendes
+peitschest
+peitschst
+peitscht
+peitschte
+peitschten
+peitschtest
+peitschtet
+pendele
+pendeln
+pendelnd
+pendelnde
+pendelndem
+pendelnden
+pendelnder
+pendelndes
+pendelst
+pendelt
+pendelte
+pendelten
+pendeltest
+pendeltet
+pendle
+penetrant
+penetrante
+penetrantem
+penetranten
+penetranter
+penetrantere
+penetranterem
+penetranteren
+penetranterer
+penetranteres
+penetrantes
+penetranteste
+penetrantestem
+penetrantesten
+penetrantester
+penetrantestes
+penibel
+penible
+peniblem
+peniblen
+penibler
+penibles
+pensioniere
+pensionieren
+pensionierend
+pensionierende
+pensionierendem
+pensionierenden
+pensionierender
+pensionierendes
+pensionierst
+pensioniert
+pensionierte
+pensioniertem
+pensionierten
+pensionierter
+pensioniertes
+pensioniertest
+pensioniertet
+pensionsreif
+pensionsreife
+pensionsreifem
+pensionsreifen
+pensionsreifer
+pensionsreifes
+per
+perfekt
+perfekte
+perfektem
+perfekten
+perfekter
+perfektere
+perfekterem
+perfekteren
+perfekterer
+perfekteres
+perfektes
+perfekteste
+perfektestem
+perfektesten
+perfektester
+perfektestes
+perfektioniere
+perfektionieren
+perfektionierend
+perfektionierende
+perfektionierendem
+perfektionierenden
+perfektionierender
+perfektionierendes
+perfektionierst
+perfektioniert
+perfektionierte
+perfektioniertem
+perfektionierten
+perfektionierter
+perfektioniertes
+perfektioniertest
+perfektioniertet
+perfektionistisch
+perfektionistische
+perfektionistischem
+perfektionistischen
+perfektionistischer
+perfektionistisches
+perfid
+perfide
+perfidem
+perfiden
+perfider
+perfidere
+perfiderem
+perfideren
+perfiderer
+perfideres
+perfides
+perfidste
+perfidstem
+perfidsten
+perfidster
+perfidstes
+perforiere
+perforieren
+perforierend
+perforierende
+perforierendem
+perforierenden
+perforierender
+perforierendes
+perforierst
+perforiert
+perforierte
+perforiertem
+perforierten
+perforierter
+perforiertes
+perforiertest
+perforiertet
+periodisch
+periodische
+periodischem
+periodischen
+periodischer
+periodisches
+peripher
+periphere
+peripherem
+peripheren
+peripherer
+peripheres
+perle
+perlen
+perlend
+perlende
+perlendem
+perlenden
+perlender
+perlendes
+perlst
+perlt
+perlte
+perlten
+perltest
+perltet
+permanent
+permanente
+permanentem
+permanenten
+permanenter
+permanentere
+permanenterem
+permanenteren
+permanenterer
+permanenteres
+permanentes
+permanenteste
+permanentestem
+permanentesten
+permanentester
+permanentestes
+permutierbar
+permutierbare
+permutierbarem
+permutierbaren
+permutierbarer
+permutierbares
+permutiere
+permutieren
+permutierend
+permutierende
+permutierendem
+permutierenden
+permutierender
+permutierendes
+permutierst
+permutiert
+permutierte
+permutiertem
+permutierten
+permutierter
+permutiertes
+permutiertest
+permutiertet
+perplex
+perplexe
+perplexem
+perplexen
+perplexer
+perplexes
+persifliere
+persiflieren
+persiflierend
+persiflierende
+persiflierendem
+persiflierenden
+persiflierender
+persiflierendes
+persiflierst
+persifliert
+persiflierte
+persifliertem
+persiflierten
+persiflierter
+persifliertes
+persifliertest
+persifliertet
+persisch
+persische
+persischem
+persischen
+persischer
+persisches
+persistent
+persistente
+persistentem
+persistenten
+persistenter
+persistentes
+personal
+personale
+personalem
+personalen
+personaler
+personales
+personell
+personelle
+personellem
+personellen
+personeller
+personelles
+personifiziere
+personifizieren
+personifizierend
+personifizierende
+personifizierendem
+personifizierenden
+personifizierender
+personifizierendes
+personifizierst
+personifiziert
+personifizierte
+personifiziertem
+personifizierten
+personifizierter
+personifiziertes
+personifiziertest
+personifiziertet
+perspektivisch
+perspektivische
+perspektivischem
+perspektivischen
+perspektivischer
+perspektivisches
+persönlich
+persönliche
+persönlichem
+persönlichen
+persönlicher
+persönlichere
+persönlicherem
+persönlicheren
+persönlicherer
+persönlicheres
+persönliches
+persönlichst
+persönlichste
+persönlichstem
+persönlichsten
+persönlichster
+persönlichstes
+pervers
+perverse
+perversem
+perversen
+perverser
+perverses
+pervertiere
+pervertieren
+pervertierend
+pervertierende
+pervertierendem
+pervertierenden
+pervertierender
+pervertierendes
+pervertierst
+pervertiert
+pervertierte
+pervertiertem
+pervertierten
+pervertierter
+pervertiertes
+pervertiertest
+pervertiertet
+pessimistisch
+pessimistische
+pessimistischem
+pessimistischen
+pessimistischer
+pessimistischere
+pessimistischerem
+pessimistischeren
+pessimistischerer
+pessimistischeres
+pessimistisches
+pessimistischste
+pessimistischstem
+pessimistischsten
+pessimistischster
+pessimistischstes
+petze
+petzen
+petzend
+petzende
+petzendem
+petzenden
+petzender
+petzendes
+petzest
+petzt
+petzte
+petzten
+petztest
+petztet
+peu
+pfeffere
+pfeffern
+pfeffernd
+pfeffernde
+pfefferndem
+pfeffernden
+pfeffernder
+pfefferndes
+pfefferst
+pfeffert
+pfefferte
+pfefferten
+pfeffertest
+pfeffertet
+pfeffre
+pfeife
+pfeifen
+pfeifend
+pfeifende
+pfeifendem
+pfeifenden
+pfeifender
+pfeifendes
+pfeifst
+pfeift
+pfeilschnell
+pfeilschnelle
+pfeilschnellem
+pfeilschnellen
+pfeilschneller
+pfeilschnelles
+pferche
+pferchen
+pferchst
+pfercht
+pferchte
+pferchten
+pferchtest
+pferchtet
+pfiff
+pfiffen
+pfiffest
+pfiffig
+pfiffige
+pfiffigem
+pfiffigen
+pfiffiger
+pfiffiges
+pfiffst
+pfifft
+pflanze
+pflanzen
+pflanzend
+pflanzende
+pflanzendem
+pflanzenden
+pflanzender
+pflanzendes
+pflanzest
+pflanzlich
+pflanzliche
+pflanzlichem
+pflanzlichen
+pflanzlicher
+pflanzliches
+pflanzt
+pflanzte
+pflanzten
+pflanztest
+pflanztet
+pflastere
+pflastern
+pflasternd
+pflasternde
+pflasterndem
+pflasternden
+pflasternder
+pflasterndes
+pflasterst
+pflastert
+pflasterte
+pflasterten
+pflastertest
+pflastertet
+pflastre
+pflege
+pflegebedürftig
+pflegebedürftige
+pflegebedürftigem
+pflegebedürftigen
+pflegebedürftiger
+pflegebedürftiges
+pflegeleicht
+pflegeleichte
+pflegeleichtem
+pflegeleichten
+pflegeleichter
+pflegeleichtere
+pflegeleichterem
+pflegeleichteren
+pflegeleichterer
+pflegeleichteres
+pflegeleichtes
+pflegeleichteste
+pflegeleichtestem
+pflegeleichtesten
+pflegeleichtester
+pflegeleichtestes
+pflegen
+pflegend
+pflegende
+pflegendem
+pflegenden
+pflegender
+pflegendes
+pflegst
+pflegt
+pflegte
+pflegten
+pflegtest
+pflegtet
+pflichtbewusst
+pflichtbewusste
+pflichtbewusstem
+pflichtbewussten
+pflichtbewusster
+pflichtbewusstere
+pflichtbewussterem
+pflichtbewussteren
+pflichtbewussterer
+pflichtbewussteres
+pflichtbewusstes
+pflichtbewussteste
+pflichtbewusstestem
+pflichtbewusstesten
+pflichtbewusstester
+pflichtbewusstestes
+pflichte
+pflichteifrig
+pflichteifrige
+pflichteifrigem
+pflichteifrigen
+pflichteifriger
+pflichteifriges
+pflichten
+pflichtend
+pflichtende
+pflichtendem
+pflichtenden
+pflichtender
+pflichtendes
+pflichtest
+pflichtet
+pflichtete
+pflichteten
+pflichtetest
+pflichtetet
+pflichtgemäß
+pflichtgemäße
+pflichtgemäßem
+pflichtgemäßen
+pflichtgemäßer
+pflichtgemäßes
+pflichtgetreu
+pflichtgetreue
+pflichtgetreuem
+pflichtgetreuen
+pflichtgetreuer
+pflichtgetreues
+pflichtig
+pflichtige
+pflichtigem
+pflichtigen
+pflichtiger
+pflichtiges
+pflichtschuldig
+pflichtschuldige
+pflichtschuldigem
+pflichtschuldigen
+pflichtschuldiger
+pflichtschuldiges
+pflichtwidrig
+pflichtwidrige
+pflichtwidrigem
+pflichtwidrigen
+pflichtwidriger
+pflichtwidrigere
+pflichtwidrigerem
+pflichtwidrigeren
+pflichtwidrigerer
+pflichtwidrigeres
+pflichtwidriges
+pflichtwidrigste
+pflichtwidrigstem
+pflichtwidrigsten
+pflichtwidrigster
+pflichtwidrigstes
+pflückbar
+pflückbare
+pflückbarem
+pflückbaren
+pflückbarer
+pflückbares
+pflücke
+pflücken
+pflückend
+pflückende
+pflückendem
+pflückenden
+pflückender
+pflückendes
+pflückst
+pflückt
+pflückte
+pflückten
+pflücktest
+pflücktet
+pflüge
+pflügen
+pflügend
+pflügende
+pflügendem
+pflügenden
+pflügender
+pflügendes
+pflügst
+pflügt
+pflügte
+pflügten
+pflügtest
+pflügtet
+pfriemeln
+pfundschwer
+pfundschwere
+pfundschwerem
+pfundschweren
+pfundschwerer
+pfundschweres
+pfusche
+pfuschen
+pfuschend
+pfuschende
+pfuschendem
+pfuschenden
+pfuschender
+pfuschendes
+pfuschest
+pfuschig
+pfuschige
+pfuschigem
+pfuschigen
+pfuschiger
+pfuschiges
+pfuschst
+pfuscht
+pfuschte
+pfuschten
+pfuschtest
+pfuschtet
+pfähle
+pfählen
+pfählend
+pfählende
+pfählendem
+pfählenden
+pfählender
+pfählendes
+pfählst
+pfählt
+pfählte
+pfählten
+pfähltest
+pfähltet
+pfälzisch
+pfälzische
+pfälzischem
+pfälzischen
+pfälzischer
+pfälzisches
+pfände
+pfänden
+pfändend
+pfändende
+pfändendem
+pfändenden
+pfändender
+pfändendes
+pfändest
+pfändet
+pfändete
+pfändeten
+pfändetest
+pfändetet
+phantasielos
+phantasielose
+phantasielosem
+phantasielosen
+phantasieloser
+phantasielosere
+phantasieloserem
+phantasieloseren
+phantasieloserer
+phantasieloseres
+phantasieloses
+phantasieloseste
+phantasielosestem
+phantasielosesten
+phantasielosester
+phantasielosestes
+phantasiere
+phantasiereich
+phantasiereiche
+phantasiereichem
+phantasiereichen
+phantasiereicher
+phantasiereichere
+phantasiereicherem
+phantasiereicheren
+phantasiereicherer
+phantasiereicheres
+phantasiereiches
+phantasiereichste
+phantasiereichstem
+phantasiereichsten
+phantasiereichster
+phantasiereichstes
+phantasieren
+phantasierend
+phantasierende
+phantasierendem
+phantasierenden
+phantasierender
+phantasierendes
+phantasierst
+phantasiert
+phantasierte
+phantasierten
+phantasiertest
+phantasiertet
+phantasievoll
+phantasievolle
+phantasievollem
+phantasievollen
+phantasievoller
+phantasievollere
+phantasievollerem
+phantasievolleren
+phantasievollerer
+phantasievolleres
+phantasievolles
+phantasievollste
+phantasievollstem
+phantasievollsten
+phantasievollster
+phantasievollstes
+phantastisch
+phantastische
+phantastischem
+phantastischen
+phantastischer
+phantastischere
+phantastischerem
+phantastischeren
+phantastischerer
+phantastischeres
+phantastisches
+phantastischste
+phantastischstem
+phantastischsten
+phantastischster
+phantastischstes
+pharisäerhaft
+pharisäerhafte
+pharisäerhaftem
+pharisäerhaften
+pharisäerhafter
+pharisäerhaftes
+pharmakologisch
+pharmakologische
+pharmakologischem
+pharmakologischen
+pharmakologischer
+pharmakologisches
+pharmazeutisch
+pharmazeutische
+pharmazeutischem
+pharmazeutischen
+pharmazeutischer
+pharmazeutisches
+phasengenau
+phasengenaue
+phasengenauem
+phasengenauen
+phasengenauer
+phasengenaues
+phi
+phil
+philatelistisch
+philatelistische
+philatelistischem
+philatelistischen
+philatelistischer
+philatelistisches
+philharmonisch
+philharmonische
+philharmonischem
+philharmonischen
+philharmonischer
+philharmonisches
+philippinisch
+philippinische
+philippinischem
+philippinischen
+philippinischer
+philippinisches
+philophisch
+philophische
+philophischem
+philophischen
+philophischer
+philophisches
+philosophiere
+philosophieren
+philosophierend
+philosophierende
+philosophierendem
+philosophierenden
+philosophierender
+philosophierendes
+philosophierst
+philosophiert
+philosophierte
+philosophierten
+philosophiertest
+philosophiertet
+philosophisch
+philosophische
+philosophischem
+philosophischen
+philosophischer
+philosophisches
+phonetisch
+phonetische
+phonetischem
+phonetischen
+phonetischer
+phonetisches
+phosphoresziere
+phosphoreszieren
+phosphoreszierend
+phosphoreszierende
+phosphoreszierendem
+phosphoreszierenden
+phosphoreszierender
+phosphoreszierendes
+phosphoreszierst
+phosphoresziert
+phosphoreszierte
+phosphoreszierten
+phosphoresziertest
+phosphoresziertet
+photochemisch
+photochemische
+photochemischem
+photochemischen
+photochemischer
+photochemisches
+photoelektrisch
+photoelektrische
+photoelektrischem
+photoelektrischen
+photoelektrischer
+photoelektrisches
+photogen
+photogene
+photogenem
+photogenen
+photogener
+photogenere
+photogenerem
+photogeneren
+photogenerer
+photogeneres
+photogenes
+photogenste
+photogenstem
+photogensten
+photogenster
+photogenstes
+photographiere
+photographieren
+photographierend
+photographierende
+photographierendem
+photographierenden
+photographierender
+photographierendes
+photographierst
+photographiert
+photographierte
+photographiertem
+photographierten
+photographierter
+photographiertes
+photographiertest
+photographiertet
+photographisch
+photographische
+photographischem
+photographischen
+photographischer
+photographisches
+photokopierbar
+photokopierbare
+photokopierbarem
+photokopierbaren
+photokopierbarer
+photokopierbares
+photokopiere
+photokopieren
+photokopierst
+photokopiert
+photokopierte
+photokopiertem
+photokopierten
+photokopierter
+photokopiertes
+photokopiertest
+photokopiertet
+phrasenhaft
+phrasenhafte
+phrasenhaftem
+phrasenhaften
+phrasenhafter
+phrasenhaftes
+phylogenetisch
+phylogenetische
+phylogenetischem
+phylogenetischen
+phylogenetischer
+phylogenetisches
+physikalisch
+physikalische
+physikalischem
+physikalischen
+physikalischer
+physikalisches
+physiologisch
+physiologische
+physiologischem
+physiologischen
+physiologischer
+physiologisches
+physisch
+physische
+physischem
+physischen
+physischer
+physisches
+phämomenal
+phämomenale
+phämomenalem
+phämomenalen
+phämomenaler
+phämomenales
+phänomenal
+phänomenale
+phänomenalem
+phänomenalen
+phänomenaler
+phänomenales
+pi
+pianissimo
+piano
+picke
+pickelig
+pickelige
+pickeligem
+pickeligen
+pickeliger
+pickeliges
+picken
+pickend
+pickende
+pickendem
+pickenden
+pickender
+pickendes
+picklig
+picklige
+pickligem
+pickligen
+pickliger
+pickliges
+pickst
+pickt
+pickte
+pickten
+picktest
+picktet
+piekfein
+piekfeine
+piekfeinem
+piekfeinen
+piekfeiner
+piekfeines
+piepe
+piepen
+piepend
+piepende
+piependem
+piependen
+piepender
+piependes
+piepst
+piept
+piepte
+piepten
+pieptest
+pieptet
+pietätvoll
+pietätvolle
+pietätvollem
+pietätvollen
+pietätvoller
+pietätvolles
+piezoelektrisch
+piezoelektrische
+piezoelektrischem
+piezoelektrischen
+piezoelektrischer
+piezoelektrisches
+piezoelektronisch
+piezoelektronische
+piezoelektronischem
+piezoelektronischen
+piezoelektronischer
+piezoelektronisches
+pikant
+pikante
+pikantem
+pikanten
+pikanter
+pikantere
+pikanterem
+pikanteren
+pikanterer
+pikanteres
+pikantes
+pikanteste
+pikantestem
+pikantesten
+pikantester
+pikantestes
+pilgere
+pilgern
+pilgernd
+pilgernde
+pilgerndem
+pilgernden
+pilgernder
+pilgerndes
+pilgerst
+pilgert
+pilgerte
+pilgerten
+pilgertest
+pilgertet
+pilgre
+pilotiere
+pilotieren
+pilotierend
+pilotierende
+pilotierendem
+pilotierenden
+pilotierender
+pilotierendes
+pilotierst
+pilotiert
+pilotierte
+pilotierten
+pilotiertest
+pilotiertet
+pilzförmig
+pilzförmige
+pilzförmigem
+pilzförmigen
+pilzförmiger
+pilzförmiges
+pingelig
+pingelige
+pingeligem
+pingeligen
+pingeliger
+pingeligere
+pingeligerem
+pingeligeren
+pingeligerer
+pingeligeres
+pingeliges
+pingeligste
+pingeligstem
+pingeligsten
+pingeligster
+pingeligstes
+pinsele
+pinseln
+pinselnd
+pinselnde
+pinselndem
+pinselnden
+pinselnder
+pinselndes
+pinselst
+pinselt
+pinselte
+pinselten
+pinseltest
+pinseltet
+pinsle
+pirsche
+pirschen
+pirschest
+pirschst
+pirscht
+pirschte
+pirschten
+pirschtest
+pirschtet
+pisse
+pissen
+pissend
+pissende
+pissendem
+pissenden
+pissender
+pissendes
+pissest
+pisst
+pisste
+pissten
+pisstest
+pisstet
+pitschnass
+pitschnasse
+pitschnassem
+pitschnassen
+pitschnasser
+pitschnasses
+pittoresk
+pittoreske
+pittoreskem
+pittoresken
+pittoresker
+pittoreskes
+plage
+plagen
+plagend
+plagende
+plagendem
+plagenden
+plagender
+plagendes
+plagst
+plagt
+plagte
+plagten
+plagtest
+plagtet
+plakativ
+plakative
+plakativem
+plakativen
+plakativer
+plakatives
+planbar
+planbare
+planbarem
+planbaren
+planbarer
+planbares
+plancksche
+planckschem
+planckschen
+planckscher
+plancksches
+plane
+planen
+planend
+planende
+planendem
+planenden
+planender
+planendes
+planerisch
+planerische
+planerischem
+planerischen
+planerischer
+planerisches
+planetarisch
+planetarische
+planetarischem
+planetarischen
+planetarischer
+planetarisches
+plangemäß
+plangemäße
+plangemäßem
+plangemäßen
+plangemäßer
+plangemäßes
+planlos
+planlose
+planlosem
+planlosen
+planloser
+planlosere
+planloserem
+planloseren
+planloserer
+planloseres
+planloses
+planloseste
+planlosestem
+planlosesten
+planlosester
+planlosestes
+planmäßig
+planmäßige
+planmäßigem
+planmäßigen
+planmäßiger
+planmäßigere
+planmäßigerem
+planmäßigeren
+planmäßigerer
+planmäßigeres
+planmäßiges
+planmäßigste
+planmäßigstem
+planmäßigsten
+planmäßigster
+planmäßigstes
+plansche
+planschen
+planschest
+planschst
+planscht
+planschte
+planschten
+planschtest
+planschtet
+planst
+plant
+plante
+planten
+plantest
+plantet
+plantsche
+plantschen
+plantschend
+plantschende
+plantschendem
+plantschenden
+plantschender
+plantschendes
+plantschest
+plantschst
+plantscht
+plantschte
+plantschten
+plantschtest
+plantschtet
+planvoll
+planvolle
+planvollem
+planvollen
+planvoller
+planvolles
+planwidrig
+planwidrige
+planwidrigem
+planwidrigen
+planwidriger
+planwidriges
+planwirtschaftlich
+planwirtschaftliche
+planwirtschaftlichem
+planwirtschaftlichen
+planwirtschaftlicher
+planwirtschaftliches
+plappere
+plappern
+plappernd
+plappernde
+plapperndem
+plappernden
+plappernder
+plapperndes
+plapperst
+plappert
+plapperte
+plapperten
+plappertest
+plappertet
+plappre
+plastisch
+plastische
+plastischem
+plastischen
+plastischer
+plastisches
+platonisch
+platonische
+platonischem
+platonischen
+platonischer
+platonisches
+platsch
+platt
+plattdeutsch
+plattdeutsche
+plattdeutschem
+plattdeutschen
+plattdeutscher
+plattdeutsches
+platte
+plattem
+platten
+platter
+plattes
+plattfüßig
+plattfüßige
+plattfüßigem
+plattfüßigen
+plattfüßiger
+plattfüßiges
+platze
+platzen
+platzend
+platzende
+platzendem
+platzenden
+platzender
+platzendes
+platzest
+platziere
+platzieren
+platzierend
+platzierende
+platzierendem
+platzierenden
+platzierender
+platzierendes
+platzierst
+platziert
+platzierte
+platziertem
+platzierten
+platzierter
+platziertes
+platziertest
+platziertet
+platzsparend
+platzsparende
+platzsparendem
+platzsparenden
+platzsparender
+platzsparendes
+platzt
+platzte
+platzten
+platztest
+platztet
+plaudere
+plaudern
+plaudernd
+plaudernde
+plauderndem
+plaudernden
+plaudernder
+plauderndes
+plauderst
+plaudert
+plauderte
+plauderten
+plaudertest
+plaudertet
+plaudre
+plausibel
+plausibelste
+plausibelstem
+plausibelsten
+plausibelster
+plausibelstes
+plausible
+plausiblem
+plausiblen
+plausibler
+plausiblere
+plausiblerem
+plausibleren
+plausiblerer
+plausibleres
+plausibles
+pleite
+pleitebedroht
+pleitebedrohte
+pleitebedrohtem
+pleitebedrohten
+pleitebedrohter
+pleitebedrohtes
+plombiere
+plombieren
+plombierend
+plombierende
+plombierendem
+plombierenden
+plombierender
+plombierendes
+plombierst
+plombiert
+plombierte
+plombiertem
+plombierten
+plombierter
+plombiertes
+plombiertest
+plombiertet
+plotte
+plotten
+plottend
+plottende
+plottendem
+plottenden
+plottender
+plottendes
+plottest
+plottet
+plottete
+plotteten
+plottetest
+plottetet
+plump
+plumpe
+plumpem
+plumpen
+plumper
+plumpere
+plumperem
+plumperen
+plumperer
+plumperes
+plumpes
+plumpste
+plumpstem
+plumpsten
+plumpster
+plumpstes
+pluralistisch
+pluralistische
+pluralistischem
+pluralistischen
+pluralistischer
+pluralistisches
+plus
+plädiere
+plädieren
+plädierend
+plädierende
+plädierendem
+plädierenden
+plädierender
+plädierendes
+plädierst
+plädiert
+plädierte
+plädierten
+plädiertest
+plädiertet
+plärre
+plärren
+plärrend
+plärrende
+plärrendem
+plärrenden
+plärrender
+plärrendes
+plärrst
+plärrt
+plärrte
+plärrten
+plärrtest
+plärrtet
+plätschere
+plätschern
+plätscherst
+plätschert
+plätscherte
+plätscherten
+plätschertest
+plätschertet
+plätschre
+plötzlich
+plötzliche
+plötzlichem
+plötzlichen
+plötzlicher
+plötzliches
+plündere
+plündern
+plündernd
+plündernde
+plünderndem
+plündernden
+plündernder
+plünderndes
+plünderst
+plündert
+plünderte
+plünderten
+plündertest
+plündertet
+plündre
+pneumatisch
+pneumatische
+pneumatischem
+pneumatischen
+pneumatischer
+pneumatisches
+poche
+pochen
+pochend
+pochende
+pochendem
+pochenden
+pochender
+pochendes
+pochst
+pocht
+pochte
+pochten
+pochtest
+pochtet
+pockenverdächtig
+pockenverdächtige
+pockenverdächtigem
+pockenverdächtigen
+pockenverdächtiger
+pockenverdächtiges
+poetisch
+poetische
+poetischem
+poetischen
+poetischer
+poetisches
+pointiert
+pointierte
+pointiertem
+pointierten
+pointierter
+pointiertes
+pokere
+pokern
+pokernd
+pokernde
+pokerndem
+pokernden
+pokernder
+pokerndes
+pokerst
+pokert
+pokerte
+pokerten
+pokertest
+pokertet
+pokre
+polar
+polare
+polarem
+polaren
+polarer
+polares
+polarisiere
+polarisieren
+polarisierend
+polarisierende
+polarisierendem
+polarisierenden
+polarisierender
+polarisierendes
+polarisierst
+polarisiert
+polarisierte
+polarisiertem
+polarisierten
+polarisierter
+polarisiertes
+polarisiertest
+polarisiertet
+polemisch
+polemische
+polemischem
+polemischen
+polemischer
+polemisches
+polemisiere
+polemisieren
+polemisierend
+polemisierende
+polemisierendem
+polemisierenden
+polemisierender
+polemisierendes
+polemisierst
+polemisiert
+polemisierte
+polemisiertem
+polemisierten
+polemisierter
+polemisiertes
+polemisiertest
+polemisiertet
+poliere
+polieren
+polierend
+polierende
+polierendem
+polierenden
+polierender
+polierendes
+polierst
+poliert
+polierte
+poliertem
+polierten
+polierter
+poliertes
+poliertest
+poliertet
+polig
+polige
+poligem
+poligen
+poliger
+poliges
+politisch
+politische
+politischem
+politischen
+politischer
+politisches
+politisiere
+politisieren
+politisierend
+politisierende
+politisierendem
+politisierenden
+politisierender
+politisierendes
+politisierst
+politisiert
+politisierte
+politisiertem
+politisierten
+politisierter
+politisiertes
+politisiertest
+politisiertet
+polizeilich
+polizeiliche
+polizeilichem
+polizeilichen
+polizeilicher
+polizeiliches
+polizeiwidrig
+polizeiwidrige
+polizeiwidrigem
+polizeiwidrigen
+polizeiwidriger
+polizeiwidriges
+polnisch
+polnische
+polnischem
+polnischen
+polnischer
+polnisches
+polstere
+polstern
+polsternd
+polsternde
+polsterndem
+polsternden
+polsternder
+polsterndes
+polsterst
+polstert
+polsterte
+polsterten
+polstertest
+polstertet
+polstre
+poltere
+poltern
+polternd
+polternde
+polterndem
+polternden
+polternder
+polterndes
+polterst
+poltert
+polterte
+polterten
+poltertest
+poltertet
+poltre
+polygamisch
+polygamische
+polygamischem
+polygamischen
+polygamischer
+polygamisches
+polymer
+polymere
+polymerem
+polymeren
+polymerer
+polymeres
+polymorph
+polymorphe
+polymorphem
+polymorphen
+polymorpher
+polymorphes
+polyzentrisch
+polyzentrische
+polyzentrischem
+polyzentrischen
+polyzentrischer
+polyzentrisches
+pomadisiere
+pomadisieren
+pomadisierend
+pomadisierende
+pomadisierendem
+pomadisierenden
+pomadisierender
+pomadisierendes
+pomadisierst
+pomadisiert
+pomadisierte
+pomadisiertem
+pomadisierten
+pomadisierter
+pomadisiertes
+pomadisiertest
+pomadisiertet
+pompös
+pompöse
+pompösem
+pompösen
+pompöser
+pompöses
+poppig
+poppige
+poppigem
+poppigen
+poppiger
+poppiges
+popularisiere
+popularisieren
+popularisierend
+popularisierende
+popularisierendem
+popularisierenden
+popularisierender
+popularisierendes
+popularisierst
+popularisiert
+popularisierte
+popularisiertem
+popularisierten
+popularisierter
+popularisiertes
+popularisiertest
+popularisiertet
+populär
+populäre
+populärem
+populären
+populärer
+populärere
+populärerem
+populäreren
+populärerer
+populäreres
+populäres
+populärste
+populärstem
+populärsten
+populärster
+populärstes
+pornografisch
+pornografische
+pornografischem
+pornografischen
+pornografischer
+pornografisches
+pornographisch
+pornographische
+pornographischem
+pornographischen
+pornographischer
+pornographisches
+portabel
+portable
+portablem
+portablen
+portabler
+portables
+portierbar
+portierbare
+portierbarem
+portierbaren
+portierbarer
+portierbares
+portiere
+portieren
+portierend
+portierende
+portierendem
+portierenden
+portierender
+portierendes
+portierst
+portiert
+portierte
+portiertem
+portierten
+portierter
+portiertes
+portiertest
+portiertet
+portionsweise
+portofrei
+portofreie
+portofreiem
+portofreien
+portofreier
+portofreies
+portopflichtig
+portopflichtige
+portopflichtigem
+portopflichtigen
+portopflichtiger
+portopflichtiges
+porträtiere
+porträtieren
+porträtierend
+porträtierende
+porträtierendem
+porträtierenden
+porträtierender
+porträtierendes
+porträtierst
+porträtiert
+porträtierte
+porträtiertem
+porträtierten
+porträtierter
+porträtiertes
+porträtiertest
+porträtiertet
+portugiesisch
+portugiesische
+portugiesischem
+portugiesischen
+portugiesischer
+portugiesisches
+porös
+poröse
+porösem
+porösen
+poröser
+porösere
+poröserem
+poröseren
+poröserer
+poröseres
+poröses
+poröseste
+porösestem
+porösesten
+porösester
+porösestes
+posauniere
+posaunieren
+posaunierst
+posauniert
+posaunierte
+posaunierten
+posauniertest
+posauniertet
+posiere
+posieren
+posierend
+posierende
+posierendem
+posierenden
+posierender
+posierendes
+posierst
+posiert
+posierte
+posierten
+posiertest
+posiertet
+positionell
+positionelle
+positionellem
+positionellen
+positioneller
+positionelles
+positioniere
+positionieren
+positionierend
+positionierende
+positionierendem
+positionierenden
+positionierender
+positionierendes
+positionierst
+positioniert
+positionierte
+positioniertem
+positionierten
+positionierter
+positioniertes
+positioniertest
+positioniertet
+positiv
+positive
+positivem
+positiven
+positiver
+positivere
+positiverem
+positiveren
+positiverer
+positiveres
+positives
+positivistisch
+positivistische
+positivistischem
+positivistischen
+positivistischer
+positivistisches
+positivste
+positivstem
+positivsten
+positivster
+positivstes
+possessiv
+possessive
+possessivem
+possessiven
+possessiver
+possessivere
+possessiverem
+possessiveren
+possessiverer
+possessiveres
+possessives
+possessivste
+possessivstem
+possessivsten
+possessivster
+possessivstes
+possierlich
+possierliche
+possierlichem
+possierlichen
+possierlicher
+possierliches
+postalisch
+postalische
+postalischem
+postalischen
+postalischer
+postalisches
+posteriori
+postiere
+postieren
+postierst
+postiert
+postierte
+postiertem
+postierten
+postierter
+postiertes
+postiertest
+postiertet
+postlagernd
+postlagernde
+postlagerndem
+postlagernden
+postlagernder
+postlagerndes
+postmodern
+postmoderne
+postmodernem
+postmodernen
+postmoderner
+postmodernes
+postscriptfähig
+postscriptfähige
+postscriptfähigem
+postscriptfähigen
+postscriptfähiger
+postscriptfähiges
+postuliere
+postulieren
+postulierend
+postulierende
+postulierendem
+postulierenden
+postulierender
+postulierendes
+postulierst
+postuliert
+postulierte
+postuliertem
+postulierten
+postulierter
+postuliertes
+postuliertest
+postuliertet
+postwendend
+postwendende
+postwendendem
+postwendenden
+postwendender
+postwendendes
+potemkinsch
+potemkinsche
+potemkinschem
+potemkinschen
+potemkinscher
+potemkinsches
+potent
+potente
+potentem
+potenten
+potenter
+potentere
+potenterem
+potenteren
+potenterer
+potenteres
+potentes
+potenteste
+potentestem
+potentesten
+potentester
+potentestes
+potentialfrei
+potentialfreie
+potentialfreiem
+potentialfreien
+potentialfreier
+potentialfreies
+potentiell
+potentielle
+potentiellem
+potentiellen
+potentieller
+potentielles
+potentiometrisch
+potentiometrische
+potentiometrischem
+potentiometrischen
+potentiometrischer
+potentiometrisches
+potenzialfrei
+potenzialfreie
+potenzialfreiem
+potenzialfreien
+potenzialfreier
+potenzialfreies
+potenziell
+potenzielle
+potenziellem
+potenziellen
+potenzieller
+potenzielles
+potenziere
+potenzieren
+potenzierend
+potenzierende
+potenzierendem
+potenzierenden
+potenzierender
+potenzierendes
+potenzierst
+potenziert
+potenzierte
+potenziertem
+potenzierten
+potenzierter
+potenziertere
+potenzierterem
+potenzierteren
+potenzierterer
+potenzierteres
+potenziertes
+potenziertest
+potenzierteste
+potenziertestem
+potenziertesten
+potenziertester
+potenziertestes
+potenziertet
+potthässlich
+potthässliche
+potthässlichem
+potthässlichen
+potthässlicher
+potthässliches
+poussiere
+poussieren
+poussierend
+poussierende
+poussierendem
+poussierenden
+poussierender
+poussierendes
+poussierst
+poussiert
+poussierte
+poussierten
+poussiertest
+poussiertet
+prachtvoll
+prachtvolle
+prachtvollem
+prachtvollen
+prachtvoller
+prachtvolles
+pragmatisch
+pragmatische
+pragmatischem
+pragmatischen
+pragmatischer
+pragmatisches
+prahle
+prahlen
+prahlend
+prahlende
+prahlendem
+prahlenden
+prahlender
+prahlendes
+prahlerisch
+prahlerische
+prahlerischem
+prahlerischen
+prahlerischer
+prahlerisches
+prahlst
+prahlt
+prahlte
+prahlten
+prahltest
+prahltet
+praktikabel
+praktikabelste
+praktikabelstem
+praktikabelsten
+praktikabelster
+praktikabelstes
+praktikable
+praktikablem
+praktikablen
+praktikabler
+praktikablere
+praktikablerem
+praktikableren
+praktikablerer
+praktikableres
+praktikables
+praktisch
+praktische
+praktischem
+praktischen
+praktischer
+praktischere
+praktischerem
+praktischeren
+praktischerer
+praktischeres
+praktisches
+praktischste
+praktischstem
+praktischsten
+praktischster
+praktischstes
+praktizierbar
+praktizierbare
+praktizierbarem
+praktizierbaren
+praktizierbarer
+praktizierbares
+praktiziere
+praktizieren
+praktizierend
+praktizierende
+praktizierendem
+praktizierenden
+praktizierender
+praktizierendes
+praktizierst
+praktiziert
+praktizierte
+praktiziertem
+praktizierten
+praktizierter
+praktiziertes
+praktiziertest
+praktiziertet
+prall
+pralle
+prallem
+prallen
+praller
+prallere
+prallerem
+pralleren
+prallerer
+pralleres
+pralles
+prallst
+prallste
+prallstem
+prallsten
+prallster
+prallstes
+prallt
+prallte
+prallten
+pralltest
+pralltet
+prange
+prangen
+prangend
+prangende
+prangendem
+prangenden
+prangender
+prangendes
+prangst
+prangt
+prangte
+prangten
+prangtest
+prangtet
+prasse
+prassele
+prasseln
+prasselnd
+prasselnde
+prasselndem
+prasselnden
+prasselnder
+prasselndes
+prasselst
+prasselt
+prasselte
+prasselten
+prasseltest
+prasseltet
+prassen
+prassend
+prassende
+prassendem
+prassenden
+prassender
+prassendes
+prassest
+prassle
+prasst
+prasste
+prassten
+prasstest
+prasstet
+praxisbezogen
+praxisbezogene
+praxisbezogenem
+praxisbezogenen
+praxisbezogener
+praxisbezogenes
+praxisfern
+praxisferne
+praxisfernem
+praxisfernen
+praxisferner
+praxisfernes
+praxisfremd
+praxisfremde
+praxisfremdem
+praxisfremden
+praxisfremder
+praxisfremdes
+praxisgerecht
+praxisgerechte
+praxisgerechtem
+praxisgerechten
+praxisgerechter
+praxisgerechtes
+praxistauglich
+praxistaugliche
+praxistauglichem
+praxistauglichen
+praxistauglicher
+praxistaugliches
+predige
+predigen
+predigend
+predigende
+predigendem
+predigenden
+predigender
+predigendes
+predigst
+predigt
+predigte
+predigten
+predigtest
+predigtet
+preisbereinigt
+preisbereinigte
+preisbereinigtem
+preisbereinigten
+preisbereinigter
+preisbereinigtes
+preisbewusst
+preisbewusste
+preisbewusstem
+preisbewussten
+preisbewusster
+preisbewusstes
+preisbrechen
+preisbrechend
+preisbrechende
+preisbrechendem
+preisbrechenden
+preisbrechender
+preisbrechendes
+preise
+preisen
+preisend
+preisende
+preisendem
+preisenden
+preisender
+preisendes
+preisest
+preisgebe
+preisgeben
+preisgebend
+preisgebende
+preisgebendem
+preisgebenden
+preisgebender
+preisgebendes
+preisgebst
+preisgebt
+preisgebunden
+preisgebundene
+preisgebundenem
+preisgebundenen
+preisgebundener
+preisgebundenes
+preisgegeben
+preisgegebene
+preisgegebenem
+preisgegebenen
+preisgegebener
+preisgegebenes
+preisgekrönt
+preisgekrönte
+preisgekröntem
+preisgekrönten
+preisgekrönter
+preisgekröntes
+preisgibst
+preisgibt
+preisgleich
+preisgleiche
+preisgleichem
+preisgleichen
+preisgleicher
+preisgleiches
+preisgünstig
+preisgünstige
+preisgünstigem
+preisgünstigen
+preisgünstiger
+preisgünstigere
+preisgünstigerem
+preisgünstigeren
+preisgünstigerer
+preisgünstigeres
+preisgünstiges
+preisgünstigste
+preisgünstigstem
+preisgünstigsten
+preisgünstigster
+preisgünstigstes
+preiskritisch
+preiskritische
+preiskritischem
+preiskritischen
+preiskritischer
+preiskritisches
+preislich
+preisliche
+preislichem
+preislichen
+preislicher
+preisliches
+preismäßig
+preismäßige
+preismäßigem
+preismäßigen
+preismäßiger
+preismäßiges
+preisneutral
+preisneutrale
+preisneutralem
+preisneutralen
+preisneutraler
+preisneutrales
+preissteigernd
+preissteigernde
+preissteigerndem
+preissteigernden
+preissteigernder
+preissteigerndes
+preist
+preiswert
+preiswerte
+preiswertem
+preiswerten
+preiswerter
+preiswertere
+preiswerterem
+preiswerteren
+preiswerterer
+preiswerteres
+preiswertes
+preiswerteste
+preiswertestem
+preiswertesten
+preiswertester
+preiswertestes
+preiswürdig
+preiswürdige
+preiswürdigem
+preiswürdigen
+preiswürdiger
+preiswürdiges
+prekär
+prekäre
+prekärem
+prekären
+prekärer
+prekäres
+presche
+preschen
+preschend
+preschende
+preschendem
+preschenden
+preschender
+preschendes
+preschest
+preschst
+prescht
+preschte
+preschten
+preschtest
+preschtet
+presse
+pressen
+pressend
+pressende
+pressendem
+pressenden
+pressender
+pressendes
+pressest
+pressiere
+pressieren
+pressierend
+pressierende
+pressierendem
+pressierenden
+pressierender
+pressierendes
+pressierst
+pressiert
+pressierte
+pressiertem
+pressierten
+pressierter
+pressiertes
+pressiertest
+pressiertet
+presst
+presste
+pressten
+presstest
+presstet
+preußisch
+preußische
+preußischem
+preußischen
+preußischer
+preußisches
+prickele
+prickeln
+prickelnd
+prickelnde
+prickelndem
+prickelnden
+prickelnder
+prickelndes
+prickelst
+prickelt
+prickelte
+prickelten
+prickeltest
+prickeltet
+prickle
+pries
+priesen
+priesest
+priest
+priesterlich
+priesterliche
+priesterlichem
+priesterlichen
+priesterlicher
+priesterliches
+prima
+primitiv
+primitive
+primitivem
+primitiven
+primitiver
+primitivere
+primitiverem
+primitiveren
+primitiverer
+primitiveres
+primitives
+primitivste
+primitivstem
+primitivsten
+primitivster
+primitivstes
+primär
+primäre
+primärem
+primären
+primärer
+primäres
+print
+prinzipiell
+prinzipielle
+prinzipiellem
+prinzipiellen
+prinzipieller
+prinzipielles
+prinzlich
+prinzliche
+prinzlichem
+prinzlichen
+prinzlicher
+prinzliches
+priori
+privat
+private
+privatem
+privaten
+privater
+privatere
+privaterem
+privateren
+privaterer
+privateres
+privates
+privateste
+privatestem
+privatesten
+privatester
+privatestes
+privatisiere
+privatisieren
+privatisierend
+privatisierende
+privatisierendem
+privatisierenden
+privatisierender
+privatisierendes
+privatisierst
+privatisiert
+privatisierte
+privatisiertem
+privatisierten
+privatisierter
+privatisiertes
+privatisiertest
+privatisiertet
+privatwirtschaftlich
+privatwirtschaftliche
+privatwirtschaftlichem
+privatwirtschaftlichen
+privatwirtschaftlicher
+privatwirtschaftliches
+privilegiere
+privilegieren
+privilegierend
+privilegierende
+privilegierendem
+privilegierenden
+privilegierender
+privilegierendes
+privilegierst
+privilegiert
+privilegierte
+privilegiertem
+privilegierten
+privilegierter
+privilegiertere
+privilegierterem
+privilegierteren
+privilegierterer
+privilegierteres
+privilegiertes
+privilegiertest
+privilegierteste
+privilegiertestem
+privilegiertesten
+privilegiertester
+privilegiertestes
+privilegiertet
+pro
+probe
+probehalber
+proben
+probend
+probende
+probendem
+probenden
+probender
+probendes
+probeweise
+probiere
+probieren
+probierend
+probierende
+probierendem
+probierenden
+probierender
+probierendes
+probierst
+probiert
+probierte
+probierten
+probiertest
+probiertet
+problematisch
+problematische
+problematischem
+problematischen
+problematischer
+problematischere
+problematischerem
+problematischeren
+problematischerer
+problematischeres
+problematisches
+problematischste
+problematischstem
+problematischsten
+problematischster
+problematischstes
+problematisiere
+problematisieren
+problematisierend
+problematisierende
+problematisierendem
+problematisierenden
+problematisierender
+problematisierendes
+problematisierst
+problematisiert
+problematisierte
+problematisiertem
+problematisierten
+problematisierter
+problematisiertes
+problematisiertest
+problematisiertet
+problembezogen
+problembezogene
+problembezogenem
+problembezogenen
+problembezogener
+problembezogenes
+problemlos
+problemlose
+problemlosem
+problemlosen
+problemloser
+problemloses
+problemlösend
+problemlösende
+problemlösendem
+problemlösenden
+problemlösender
+problemlösendes
+problemorientiert
+problemorientierte
+problemorientiertem
+problemorientierten
+problemorientierter
+problemorientiertes
+problemspezifisch
+problemspezifische
+problemspezifischem
+problemspezifischen
+problemspezifischer
+problemspezifisches
+probst
+probt
+probte
+probten
+probtest
+probtet
+produktiv
+produktive
+produktivem
+produktiven
+produktiver
+produktivere
+produktiverem
+produktiveren
+produktiverer
+produktiveres
+produktives
+produktivste
+produktivstem
+produktivsten
+produktivster
+produktivstes
+produzierbar
+produzierbare
+produzierbarem
+produzierbaren
+produzierbarer
+produzierbares
+produziere
+produzieren
+produzierend
+produzierende
+produzierendem
+produzierenden
+produzierender
+produzierendes
+produzierst
+produziert
+produzierte
+produziertem
+produzierten
+produzierter
+produziertes
+produziertest
+produziertet
+professionell
+professionelle
+professionellem
+professionellen
+professioneller
+professionelles
+profiliere
+profilieren
+profilierend
+profilierende
+profilierendem
+profilierenden
+profilierender
+profilierendes
+profilierst
+profiliert
+profilierte
+profiliertem
+profilierten
+profilierter
+profiliertere
+profilierterem
+profilierteren
+profilierterer
+profilierteres
+profiliertes
+profiliertest
+profilierteste
+profiliertestem
+profiliertesten
+profiliertester
+profiliertestes
+profiliertet
+profitabel
+profitabelste
+profitabelstem
+profitabelsten
+profitabelster
+profitabelstes
+profitable
+profitablem
+profitablen
+profitabler
+profitablere
+profitablerem
+profitableren
+profitablerer
+profitableres
+profitables
+profitiere
+profitieren
+profitierend
+profitierende
+profitierendem
+profitierenden
+profitierender
+profitierendes
+profitierst
+profitiert
+profitierte
+profitierten
+profitiertest
+profitiertet
+profund
+profunde
+profundem
+profunden
+profunder
+profundes
+prognostisch
+prognostische
+prognostischem
+prognostischen
+prognostischer
+prognostisches
+prognostizierbar
+prognostizierbare
+prognostizierbarem
+prognostizierbaren
+prognostizierbarer
+prognostizierbares
+prognostiziere
+prognostizieren
+prognostizierend
+prognostizierende
+prognostizierendem
+prognostizierenden
+prognostizierender
+prognostizierendes
+prognostizierst
+prognostiziert
+prognostizierte
+prognostiziertem
+prognostizierten
+prognostizierter
+prognostiziertes
+prognostiziertest
+prognostiziertet
+programmabhängig
+programmabhängige
+programmabhängigem
+programmabhängigen
+programmabhängiger
+programmabhängiges
+programmatisch
+programmatische
+programmatischem
+programmatischen
+programmatischer
+programmatisches
+programmgemäß
+programmgemäße
+programmgemäßem
+programmgemäßen
+programmgemäßer
+programmgemäßes
+programmgesteuert
+programmgesteuerte
+programmgesteuertem
+programmgesteuerten
+programmgesteuerter
+programmgesteuertes
+programmierbar
+programmierbare
+programmierbarem
+programmierbaren
+programmierbarer
+programmierbares
+programmiere
+programmieren
+programmierend
+programmierende
+programmierendem
+programmierenden
+programmierender
+programmierendes
+programmierst
+programmiert
+programmierte
+programmiertechnisch
+programmiertechnische
+programmiertechnischem
+programmiertechnischen
+programmiertechnischer
+programmiertechnisches
+programmiertem
+programmierten
+programmierter
+programmiertes
+programmiertest
+programmiertet
+progressiv
+progressive
+progressivem
+progressiven
+progressiver
+progressivere
+progressiverem
+progressiveren
+progressiverer
+progressiveres
+progressives
+progressivste
+progressivstem
+progressivsten
+progressivster
+progressivstes
+prohibitiv
+prohibitive
+prohibitivem
+prohibitiven
+prohibitiver
+prohibitives
+projektiere
+projektieren
+projektierend
+projektierende
+projektierendem
+projektierenden
+projektierender
+projektierendes
+projektierst
+projektiert
+projektierte
+projektiertem
+projektierten
+projektierter
+projektiertes
+projektiertest
+projektiertet
+projektspezifisch
+projektspezifische
+projektspezifischem
+projektspezifischen
+projektspezifischer
+projektspezifisches
+projiziere
+projizieren
+projizierend
+projizierende
+projizierendem
+projizierenden
+projizierender
+projizierendes
+projizierst
+projiziert
+projizierte
+projiziertem
+projizierten
+projizierter
+projiziertes
+projiziertest
+projiziertet
+proklamiere
+proklamieren
+proklamierend
+proklamierende
+proklamierendem
+proklamierenden
+proklamierender
+proklamierendes
+proklamierst
+proklamiert
+proklamierte
+proklamiertem
+proklamierten
+proklamierter
+proklamiertes
+proklamiertest
+proklamiertet
+proletarisch
+proletarische
+proletarischem
+proletarischen
+proletarischer
+proletarisches
+promeniere
+promenieren
+promenierend
+promenierende
+promenierendem
+promenierenden
+promenierender
+promenierendes
+promenierst
+promeniert
+promenierte
+promenierten
+promeniertest
+promeniertet
+prominent
+prominente
+prominentem
+prominenten
+prominenter
+prominentere
+prominenterem
+prominenteren
+prominenterer
+prominenteres
+prominentes
+prominenteste
+prominentestem
+prominentesten
+prominentester
+prominentestes
+promoviere
+promovieren
+promovierend
+promovierende
+promovierendem
+promovierenden
+promovierender
+promovierendes
+promovierst
+promoviert
+promovierte
+promoviertem
+promovierten
+promovierter
+promoviertes
+promoviertest
+promoviertet
+prompt
+prompte
+promptem
+prompten
+prompter
+promptes
+promt
+promte
+promtem
+promten
+promter
+promtere
+promterem
+promteren
+promterer
+promteres
+promtes
+promteste
+promtestem
+promtesten
+promtester
+promtestes
+propagandistisch
+propagandistische
+propagandistischem
+propagandistischen
+propagandistischer
+propagandistisches
+propagiere
+propagieren
+propagierend
+propagierende
+propagierendem
+propagierenden
+propagierender
+propagierendes
+propagierst
+propagiert
+propagierte
+propagiertem
+propagierten
+propagierter
+propagiertes
+propagiertest
+propagiertet
+prophetisch
+prophetische
+prophetischem
+prophetischen
+prophetischer
+prophetisches
+prophezeie
+prophezeien
+prophezeiend
+prophezeiende
+prophezeiendem
+prophezeienden
+prophezeiender
+prophezeiendes
+prophezeiht
+prophezeihte
+prophezeihtem
+prophezeihten
+prophezeihter
+prophezeihtes
+prophezeist
+prophezeit
+prophezeite
+prophezeitem
+prophezeiten
+prophezeiter
+prophezeites
+prophezeitest
+prophezeitet
+prophylaktisch
+prophylaktische
+prophylaktischem
+prophylaktischen
+prophylaktischer
+prophylaktisches
+proportional
+proportionale
+proportionalem
+proportionalen
+proportionaler
+proportionales
+proportioniert
+proportionierte
+proportioniertem
+proportionierten
+proportionierter
+proportioniertere
+proportionierterem
+proportionierteren
+proportionierterer
+proportionierteres
+proportioniertes
+proportionierteste
+proportioniertestem
+proportioniertesten
+proportioniertester
+proportioniertestes
+proprietär
+proprietäre
+proprietärem
+proprietären
+proprietärer
+proprietäres
+prosaisch
+prosaische
+prosaischem
+prosaischen
+prosaischer
+prosaisches
+prost
+prostituiere
+prostituieren
+prostituierend
+prostituierende
+prostituierendem
+prostituierenden
+prostituierender
+prostituierendes
+prostituierst
+prostituiert
+prostituierte
+prostituiertem
+prostituierten
+prostituierter
+prostituiertes
+prostituiertest
+prostituiertet
+protegiere
+protegieren
+protegierend
+protegierende
+protegierendem
+protegierenden
+protegierender
+protegierendes
+protegierst
+protegiert
+protegierte
+protegiertem
+protegierten
+protegierter
+protegiertes
+protegiertest
+protegiertet
+protektionistisch
+protektionistische
+protektionistischem
+protektionistischen
+protektionistischer
+protektionistisches
+protestantisch
+protestantische
+protestantischem
+protestantischen
+protestantischer
+protestantisches
+protestiere
+protestieren
+protestierend
+protestierende
+protestierendem
+protestierenden
+protestierender
+protestierendes
+protestierst
+protestiert
+protestierte
+protestierten
+protestiertest
+protestiertet
+protokollarisch
+protokollarische
+protokollarischem
+protokollarischen
+protokollarischer
+protokollarisches
+protokolliere
+protokollieren
+protokollierend
+protokollierende
+protokollierendem
+protokollierenden
+protokollierender
+protokollierendes
+protokollierst
+protokolliert
+protokollierte
+protokolliertem
+protokollierten
+protokollierter
+protokolliertes
+protokolliertest
+protokolliertet
+prototypisch
+prototypische
+prototypischem
+prototypischen
+prototypischer
+prototypisches
+protze
+protzen
+protzend
+protzende
+protzendem
+protzenden
+protzender
+protzendes
+protzest
+protzig
+protzige
+protzigem
+protzigen
+protziger
+protzigere
+protzigerem
+protzigeren
+protzigerer
+protzigeres
+protziges
+protzigste
+protzigstem
+protzigsten
+protzigster
+protzigstes
+protzt
+protzte
+protzten
+protztest
+protztet
+provinziell
+provinzielle
+provinziellem
+provinziellen
+provinzieller
+provinzielles
+provisorisch
+provisorische
+provisorischem
+provisorischen
+provisorischer
+provisorischere
+provisorischerem
+provisorischeren
+provisorischerer
+provisorischeres
+provisorisches
+provisorischste
+provisorischstem
+provisorischsten
+provisorischster
+provisorischstes
+provokativ
+provokative
+provokativem
+provokativen
+provokativer
+provokativere
+provokativerem
+provokativeren
+provokativerer
+provokativeres
+provokatives
+provokativste
+provokativstem
+provokativsten
+provokativster
+provokativstes
+provokatorisch
+provokatorische
+provokatorischem
+provokatorischen
+provokatorischer
+provokatorisches
+provoziere
+provozieren
+provozierend
+provozierende
+provozierendem
+provozierenden
+provozierender
+provozierendes
+provozierst
+provoziert
+provozierte
+provoziertem
+provozierten
+provozierter
+provoziertes
+provoziertest
+provoziertet
+prozedural
+prozedurale
+prozeduralem
+prozeduralen
+prozeduraler
+prozedurales
+prozentig
+prozentige
+prozentigem
+prozentigen
+prozentiger
+prozentiges
+prozentual
+prozentuale
+prozentualem
+prozentualen
+prozentualer
+prozentuales
+prozessführend
+prozessführende
+prozessführendem
+prozessführenden
+prozessführender
+prozessführendes
+prozessiere
+prozessieren
+prozessierend
+prozessierende
+prozessierendem
+prozessierenden
+prozessierender
+prozessierendes
+prozessierst
+prozessiert
+prozessierte
+prozessierten
+prozessiertest
+prozessiertet
+prozessorientiert
+prozessorientierte
+prozessorientiertem
+prozessorientierten
+prozessorientierter
+prozessorientiertes
+prozessorspezifisch
+prozessorspezifische
+prozessorspezifischem
+prozessorspezifischen
+prozessorspezifischer
+prozessorspezifisches
+prunkvoll
+prunkvolle
+prunkvollem
+prunkvollen
+prunkvoller
+prunkvolles
+prächtig
+prächtige
+prächtigem
+prächtigen
+prächtiger
+prächtigere
+prächtigerem
+prächtigeren
+prächtigerer
+prächtigeres
+prächtiges
+prächtigste
+prächtigstem
+prächtigsten
+prächtigster
+prächtigstes
+prädestiniert
+prädestinierte
+prädestiniertem
+prädestinierten
+prädestinierter
+prädestiniertes
+prädisponiere
+prädisponieren
+prädisponierend
+prädisponierende
+prädisponierendem
+prädisponierenden
+prädisponierender
+prädisponierendes
+prädisponierst
+prädisponiert
+prädisponierte
+prädisponiertem
+prädisponierten
+prädisponierter
+prädisponiertes
+prädisponiertest
+prädisponiertet
+präferentiell
+präferentielle
+präferentiellem
+präferentiellen
+präferentieller
+präferentielles
+präferenziell
+präferenzielle
+präferenziellem
+präferenziellen
+präferenzieller
+präferenzielles
+präge
+prägen
+prägend
+prägende
+prägendem
+prägenden
+prägender
+prägendes
+prägnant
+prägnante
+prägnantem
+prägnanten
+prägnanter
+prägnantere
+prägnanterem
+prägnanteren
+prägnanterer
+prägnanteres
+prägnantes
+prägnanteste
+prägnantestem
+prägnantesten
+prägnantester
+prägnantestes
+prägst
+prägt
+prägte
+prägten
+prägtest
+prägtet
+prähistorisch
+prähistorische
+prähistorischem
+prähistorischen
+prähistorischer
+prähistorisches
+präjudiziere
+präjudizieren
+präjudizierend
+präjudizierende
+präjudizierendem
+präjudizierenden
+präjudizierender
+präjudizierendes
+präjudizierst
+präjudiziert
+präjudizierte
+präjudiziertem
+präjudizierten
+präjudizierter
+präjudiziertes
+präjudiziertest
+präjudiziertet
+prämiere
+prämieren
+prämierend
+prämierende
+prämierendem
+prämierenden
+prämierender
+prämierendes
+prämierst
+prämiert
+prämierte
+prämiertem
+prämierten
+prämierter
+prämiertes
+prämiertest
+prämiertet
+prämiiere
+prämiieren
+prämiierend
+prämiierende
+prämiierendem
+prämiierenden
+prämiierender
+prämiierendes
+prämiierst
+prämiiert
+prämiierte
+prämiiertem
+prämiierten
+prämiierter
+prämiiertes
+prämiiertest
+prämiiertet
+präpariere
+präparieren
+präparierend
+präparierende
+präparierendem
+präparierenden
+präparierender
+präparierendes
+präparierst
+präpariert
+präparierte
+präpariertem
+präparierten
+präparierter
+präpariertes
+präpariertest
+präpariertet
+präsent
+präsentabel
+präsentable
+präsentablem
+präsentablen
+präsentabler
+präsentables
+präsente
+präsentem
+präsenten
+präsenter
+präsentes
+präsentierbar
+präsentierbare
+präsentierbarem
+präsentierbaren
+präsentierbarer
+präsentierbares
+präsentiere
+präsentieren
+präsentierend
+präsentierende
+präsentierendem
+präsentierenden
+präsentierender
+präsentierendes
+präsentierst
+präsentiert
+präsentierte
+präsentiertem
+präsentierten
+präsentierter
+präsentiertes
+präsentiertest
+präsentiertet
+präsidentiell
+präsidentielle
+präsidentiellem
+präsidentiellen
+präsidentieller
+präsidentielles
+präsidial
+präsidiale
+präsidialem
+präsidialen
+präsidialer
+präsidiales
+präsidiere
+präsidieren
+präsidierend
+präsidierende
+präsidierendem
+präsidierenden
+präsidierender
+präsidierendes
+präsidierst
+präsidiert
+präsidierte
+präsidierten
+präsidiertest
+präsidiertet
+präskriptiv
+präskriptive
+präskriptivem
+präskriptiven
+präskriptiver
+präskriptives
+prätentiös
+prätentiöse
+prätentiösem
+prätentiösen
+prätentiöser
+prätentiöses
+präventiv
+präventive
+präventivem
+präventiven
+präventiver
+präventives
+präzis
+präzise
+präzisem
+präzisen
+präziser
+präzisere
+präziserem
+präziseren
+präziserer
+präziseres
+präzises
+präziseste
+präzisestem
+präzisesten
+präzisester
+präzisestes
+präzisiere
+präzisieren
+präzisierend
+präzisierende
+präzisierendem
+präzisierenden
+präzisierender
+präzisierendes
+präzisierst
+präzisiert
+präzisierte
+präzisiertem
+präzisierten
+präzisierter
+präzisiertes
+präzisiertest
+präzisiertet
+prüde
+prüdem
+prüden
+prüder
+prüdere
+prüderem
+prüderen
+prüderer
+prüderes
+prüdes
+prüdeste
+prüdestem
+prüdesten
+prüdester
+prüdestes
+prüfbar
+prüfbare
+prüfbarem
+prüfbaren
+prüfbarer
+prüfbares
+prüfe
+prüfen
+prüfend
+prüfende
+prüfendem
+prüfenden
+prüfender
+prüfendes
+prüfenswert
+prüfenswerte
+prüfenswertem
+prüfenswerten
+prüfenswerter
+prüfenswertes
+prüfst
+prüft
+prüfte
+prüften
+prüftest
+prüftet
+prügele
+prügeln
+prügelnd
+prügelnde
+prügelndem
+prügelnden
+prügelnder
+prügelndes
+prügelst
+prügelt
+prügelte
+prügelten
+prügeltest
+prügeltet
+prügle
+psychiatrisch
+psychiatrische
+psychiatrischem
+psychiatrischen
+psychiatrischer
+psychiatrisches
+psychisch
+psychische
+psychischem
+psychischen
+psychischer
+psychisches
+psychogen
+psychogene
+psychogenem
+psychogenen
+psychogener
+psychogenes
+psychologisch
+psychologische
+psychologischem
+psychologischen
+psychologischer
+psychologisches
+psychomotorisch
+psychomotorische
+psychomotorischem
+psychomotorischen
+psychomotorischer
+psychomotorisches
+psychopathisch
+psychopathische
+psychopathischem
+psychopathischen
+psychopathischer
+psychopathisches
+psychophysisch
+psychophysische
+psychophysischem
+psychophysischen
+psychophysischer
+psychophysisches
+psychotherapeutisch
+psychotherapeutische
+psychotherapeutischem
+psychotherapeutischen
+psychotherapeutischer
+psychotherapeutisches
+pubertär
+pubertäre
+pubertärem
+pubertären
+pubertärer
+pubertäres
+publik
+publike
+publikem
+publiken
+publiker
+publikes
+publiziere
+publizieren
+publizierend
+publizierende
+publizierendem
+publizierenden
+publizierender
+publizierendes
+publizierst
+publiziert
+publizierte
+publiziertem
+publizierten
+publizierter
+publiziertes
+publiziertest
+publiziertet
+publizistisch
+publizistische
+publizistischem
+publizistischen
+publizistischer
+publizistisches
+pudelnass
+pudelnasse
+pudelnassem
+pudelnassen
+pudelnasser
+pudelnasses
+pudelwohl
+pudere
+pudern
+puderst
+pudert
+puderte
+puderten
+pudertest
+pudertet
+pudre
+puffere
+puffern
+pufferst
+puffert
+pufferte
+pufferten
+puffertest
+puffertet
+puffre
+pulsiere
+pulsieren
+pulsierend
+pulsierende
+pulsierendem
+pulsierenden
+pulsierender
+pulsierendes
+pulsierst
+pulsiert
+pulsierte
+pulsierten
+pulsiertest
+pulsiertet
+pulvere
+pulverisiere
+pulverisieren
+pulverisierend
+pulverisierende
+pulverisierendem
+pulverisierenden
+pulverisierender
+pulverisierendes
+pulverisierst
+pulverisiert
+pulverisierte
+pulverisiertem
+pulverisierten
+pulverisierter
+pulverisiertes
+pulverisiertest
+pulverisiertet
+pulvern
+pulvernd
+pulvernde
+pulverndem
+pulvernden
+pulvernder
+pulverndes
+pulverst
+pulvert
+pulverte
+pulverten
+pulvertest
+pulvertet
+pulvre
+pumpe
+pumpen
+pumpend
+pumpende
+pumpendem
+pumpenden
+pumpender
+pumpendes
+pumpst
+pumpt
+pumpte
+pumpten
+pumptest
+pumptet
+punisch
+punische
+punischem
+punischen
+punischer
+punisches
+punktgenau
+punktgenaue
+punktgenauem
+punktgenauen
+punktgenauer
+punktgenaues
+punktiere
+punktieren
+punktierst
+punktiert
+punktierte
+punktiertem
+punktierten
+punktierter
+punktiertes
+punktiertest
+punktiertet
+punktuell
+punktuelle
+punktuellem
+punktuellen
+punktueller
+punktuelles
+punktweise
+punktweisem
+punktweisen
+punktweiser
+punktweises
+pur
+pure
+purem
+puren
+purer
+pures
+puritanisch
+puritanische
+puritanischem
+puritanischen
+puritanischer
+puritanisches
+purpurn
+purpurne
+purpurnem
+purpurnen
+purpurner
+purpurnes
+purzele
+purzeln
+purzelnd
+purzelnde
+purzelndem
+purzelnden
+purzelnder
+purzelndes
+purzelst
+purzelt
+purzelte
+purzelten
+purzeltest
+purzeltet
+purzle
+pusche
+puschen
+puschend
+puschende
+puschendem
+puschenden
+puschender
+puschendes
+puschest
+puschst
+puscht
+puschte
+puschten
+puschtest
+puschtet
+pushe
+pushen
+pushend
+pushende
+pushendem
+pushenden
+pushender
+pushendes
+pushst
+pusht
+pushte
+pushten
+pushtest
+pushtet
+puste
+pusten
+pustend
+pustende
+pustendem
+pustenden
+pustender
+pustendes
+pustest
+pustet
+pustete
+pusteten
+pustetest
+pustetet
+putsche
+putschen
+putschest
+putschst
+putscht
+putschte
+putschten
+putschtest
+putschtet
+putze
+putzen
+putzend
+putzende
+putzendem
+putzenden
+putzender
+putzendes
+putzest
+putzig
+putzige
+putzigem
+putzigen
+putziger
+putziges
+putzt
+putzte
+putzten
+putztest
+putztet
+pyramidenförmig
+pyramidenförmige
+pyramidenförmigem
+pyramidenförmigen
+pyramidenförmiger
+pyramidenförmiges
+pädagogisch
+pädagogische
+pädagogischem
+pädagogischen
+pädagogischer
+pädagogisches
+päpstlich
+päpstliche
+päpstlichem
+päpstlichen
+päpstlicher
+päpstliches
+pünktlich
+pünktliche
+pünktlichem
+pünktlichen
+pünktlicher
+pünktlichere
+pünktlicherem
+pünktlicheren
+pünktlicherer
+pünktlicheres
+pünktliches
+pünktlichste
+pünktlichstem
+pünktlichsten
+pünktlichster
+pünktlichstes
+qm
+qmm
+quadratisch
+quadratische
+quadratischem
+quadratischen
+quadratischer
+quadratisches
+qualifizierbar
+qualifizierbare
+qualifizierbarem
+qualifizierbaren
+qualifizierbarer
+qualifizierbares
+qualifiziere
+qualifizieren
+qualifizierend
+qualifizierende
+qualifizierendem
+qualifizierenden
+qualifizierender
+qualifizierendes
+qualifizierst
+qualifiziert
+qualifizierte
+qualifiziertem
+qualifizierten
+qualifizierter
+qualifiziertere
+qualifizierterem
+qualifizierteren
+qualifizierterer
+qualifizierteres
+qualifiziertes
+qualifiziertest
+qualifizierteste
+qualifiziertestem
+qualifiziertesten
+qualifiziertester
+qualifiziertestes
+qualifiziertet
+qualitativ
+qualitative
+qualitativem
+qualitativen
+qualitativer
+qualitatives
+qualitätsbewusst
+qualitätsbewusste
+qualitätsbewusstem
+qualitätsbewussten
+qualitätsbewusster
+qualitätsbewusstes
+qualme
+qualmen
+qualmend
+qualmende
+qualmendem
+qualmenden
+qualmender
+qualmendes
+qualmig
+qualmige
+qualmigem
+qualmigen
+qualmiger
+qualmiges
+qualmst
+qualmt
+qualmte
+qualmten
+qualmtest
+qualmtet
+qualvoll
+qualvolle
+qualvollem
+qualvollen
+qualvoller
+qualvollere
+qualvollerem
+qualvolleren
+qualvollerer
+qualvolleres
+qualvolles
+qualvollste
+qualvollstem
+qualvollsten
+qualvollster
+qualvollstes
+quantenmechanisch
+quantenmechanische
+quantenmechanischem
+quantenmechanischen
+quantenmechanischer
+quantenmechanisches
+quantifizierbar
+quantifizierbare
+quantifizierbarem
+quantifizierbaren
+quantifizierbarer
+quantifizierbares
+quantifiziere
+quantifizieren
+quantifizierend
+quantifizierende
+quantifizierendem
+quantifizierenden
+quantifizierender
+quantifizierendes
+quantifizierst
+quantifiziert
+quantifizierte
+quantifiziertem
+quantifizierten
+quantifizierter
+quantifiziertes
+quantifiziertest
+quantifiziertet
+quantitativ
+quantitative
+quantitativem
+quantitativen
+quantitativer
+quantitatives
+quantorenfrei
+quantorenfreie
+quantorenfreiem
+quantorenfreien
+quantorenfreier
+quantorenfreies
+quartalsweise
+quartalsweisem
+quartalsweisen
+quartalsweiser
+quartalsweises
+quarzgenau
+quarzgenaue
+quarzgenauem
+quarzgenauen
+quarzgenauer
+quarzgenaues
+quarzstabil
+quarzstabile
+quarzstabilem
+quarzstabilen
+quarzstabiler
+quarzstabiles
+quasi
+quasianalog
+quasianaloge
+quasianalogem
+quasianalogen
+quasianaloger
+quasianaloges
+quasiperiodisch
+quasiperiodische
+quasiperiodischem
+quasiperiodischen
+quasiperiodischer
+quasiperiodisches
+quatschig
+quatschige
+quatschigem
+quatschigen
+quatschiger
+quatschiges
+quelle
+quellen
+quellend
+quellende
+quellendem
+quellenden
+quellender
+quellendes
+quellt
+quer
+querschnittgelähmt
+querschnittgelähmte
+querschnittgelähmtem
+querschnittgelähmten
+querschnittgelähmter
+querschnittgelähmtes
+querzustellen
+querzustellend
+querzustellende
+querzustellendem
+querzustellenden
+querzustellender
+querzustellendes
+quetsche
+quetschen
+quetschend
+quetschende
+quetschendem
+quetschenden
+quetschender
+quetschendes
+quetschest
+quetschst
+quetscht
+quetschte
+quetschten
+quetschtest
+quetschtet
+quieke
+quieken
+quiekend
+quiekende
+quiekendem
+quiekenden
+quiekender
+quiekendes
+quiekst
+quiekt
+quiekte
+quiekten
+quiektest
+quiektet
+quietsche
+quietschen
+quietschend
+quietschende
+quietschendem
+quietschenden
+quietschender
+quietschendes
+quietschest
+quietschst
+quietscht
+quietschte
+quietschten
+quietschtest
+quietschtet
+quillst
+quillt
+quirelig
+quirelige
+quireligem
+quireligen
+quireliger
+quireliges
+quirlig
+quirlige
+quirligem
+quirligen
+quirliger
+quirliges
+quitt
+quittiere
+quittieren
+quittierend
+quittierende
+quittierendem
+quittierenden
+quittierender
+quittierendes
+quittierst
+quittiert
+quittierte
+quittiertem
+quittierten
+quittierter
+quittiertes
+quittiertest
+quittiertet
+quivalenzklassenbildung
+quotiere
+quotieren
+quotierend
+quotierende
+quotierendem
+quotierenden
+quotierender
+quotierendes
+quotierst
+quotiert
+quotierte
+quotiertem
+quotierten
+quotierter
+quotiertes
+quotiertest
+quotiertet
+quäle
+quälen
+quälend
+quälende
+quälendem
+quälenden
+quälender
+quälendere
+quälenderem
+quälenderen
+quälenderer
+quälenderes
+quälendes
+quälendste
+quälendstem
+quälendsten
+quälendster
+quälendstes
+quälst
+quält
+quälte
+quälten
+quältest
+quältet
+rabenschwarz
+rabenschwarze
+rabenschwarzem
+rabenschwarzen
+rabenschwarzer
+rabenschwarzes
+rabiat
+rabiate
+rabiatem
+rabiaten
+rabiater
+rabiatere
+rabiaterem
+rabiateren
+rabiaterer
+rabiateres
+rabiates
+rabiateste
+rabiatestem
+rabiatesten
+rabiatester
+rabiatestes
+rachelüstern
+rachelüsterne
+rachelüsternem
+rachelüsternen
+rachelüsterner
+rachelüsternes
+rachgierig
+rachgierige
+rachgierigem
+rachgierigen
+rachgieriger
+rachgieriges
+rachsüchtig
+rachsüchtige
+rachsüchtigem
+rachsüchtigen
+rachsüchtiger
+rachsüchtiges
+radargesteuert
+radargesteuerte
+radargesteuertem
+radargesteuerten
+radargesteuerter
+radargesteuertes
+radebreche
+radebrechen
+radebrechend
+radebrechende
+radebrechendem
+radebrechenden
+radebrechender
+radebrechendes
+radebrecht
+radele
+radeln
+radelnd
+radelnde
+radelndem
+radelnden
+radelnder
+radelndes
+radelst
+radelt
+radelte
+radelten
+radeltest
+radeltet
+radförmig
+radförmige
+radförmigem
+radförmigen
+radförmiger
+radförmiges
+radiere
+radieren
+radierend
+radierende
+radierendem
+radierenden
+radierender
+radierendes
+radierst
+radiert
+radierte
+radiertem
+radierten
+radierter
+radiertes
+radiertest
+radiertet
+radikal
+radikale
+radikalem
+radikalen
+radikaler
+radikalere
+radikalerem
+radikaleren
+radikalerer
+radikaleres
+radikales
+radikalisiere
+radikalisieren
+radikalisierend
+radikalisierende
+radikalisierendem
+radikalisierenden
+radikalisierender
+radikalisierendes
+radikalisierst
+radikalisiert
+radikalisierte
+radikalisiertem
+radikalisierten
+radikalisierter
+radikalisiertes
+radikalisiertest
+radikalisiertet
+radikalste
+radikalstem
+radikalsten
+radikalster
+radikalstes
+radioaktiv
+radioaktive
+radioaktivem
+radioaktiven
+radioaktiver
+radioaktivere
+radioaktiverem
+radioaktiveren
+radioaktiverer
+radioaktiveres
+radioaktives
+radioaktivste
+radioaktivstem
+radioaktivsten
+radioaktivster
+radioaktivstes
+radiologisch
+radiologische
+radiologischem
+radiologischen
+radiologischer
+radiologisches
+radle
+raffe
+raffen
+raffend
+raffende
+raffendem
+raffenden
+raffender
+raffendes
+raffgierig
+raffgierige
+raffgierigem
+raffgierigen
+raffgieriger
+raffgierigere
+raffgierigerem
+raffgierigeren
+raffgierigerer
+raffgierigeres
+raffgieriges
+raffgierigste
+raffgierigstem
+raffgierigsten
+raffgierigster
+raffgierigstes
+raffiniere
+raffinieren
+raffinierend
+raffinierende
+raffinierendem
+raffinierenden
+raffinierender
+raffinierendes
+raffinierst
+raffiniert
+raffinierte
+raffiniertem
+raffinierten
+raffinierter
+raffiniertes
+raffiniertest
+raffiniertet
+raffst
+rafft
+raffte
+rafften
+rafftest
+rafftet
+rage
+ragen
+ragend
+ragende
+ragendem
+ragenden
+ragender
+ragendes
+ragst
+ragt
+ragte
+ragten
+ragtest
+ragtet
+ramme
+rammele
+rammeln
+rammelnd
+rammelnde
+rammelndem
+rammelnden
+rammelnder
+rammelndes
+rammelst
+rammelt
+rammelte
+rammelten
+rammeltest
+rammeltet
+rammen
+rammend
+rammende
+rammendem
+rammenden
+rammender
+rammendes
+rammle
+rammst
+rammt
+rammte
+rammten
+rammtest
+rammtet
+ramponiere
+ramponieren
+ramponierend
+ramponierende
+ramponierendem
+ramponierenden
+ramponierender
+ramponierendes
+ramponierst
+ramponiert
+ramponierte
+ramponiertem
+ramponierten
+ramponierter
+ramponiertes
+ramponiertest
+ramponiertet
+randaliere
+randalieren
+randalierend
+randalierende
+randalierendem
+randalierenden
+randalierender
+randalierendes
+randalierst
+randaliert
+randalierte
+randalierten
+randaliertest
+randaliertet
+randnah
+randnahe
+randnahem
+randnahen
+randnaher
+randnahes
+randvoll
+randvolle
+randvollem
+randvollen
+randvoller
+randvolles
+rang
+rangen
+rangiere
+rangieren
+rangierend
+rangierende
+rangierendem
+rangierenden
+rangierender
+rangierendes
+rangierst
+rangiert
+rangierte
+rangierten
+rangiertest
+rangiertet
+rangst
+rangt
+ranke
+ranken
+rankend
+rankende
+rankendem
+rankenden
+rankender
+rankendes
+rankst
+rankt
+rankte
+rankten
+ranktest
+ranktet
+rannte
+rannten
+ranntest
+ranntet
+rapid
+rapide
+rapidem
+rapiden
+rapider
+rapides
+rapple
+rar
+rare
+rarem
+raren
+rarer
+rarere
+rarerem
+rareren
+rarerer
+rareres
+rares
+rarste
+rarstem
+rarsten
+rarster
+rarstes
+rasa
+rasant
+rasante
+rasantem
+rasanten
+rasanter
+rasantere
+rasanterem
+rasanteren
+rasanterer
+rasanteres
+rasantes
+rasanteste
+rasantestem
+rasantesten
+rasantester
+rasantestes
+rasch
+rasche
+raschele
+rascheln
+raschelnd
+raschelnde
+raschelndem
+raschelnden
+raschelnder
+raschelndes
+raschelst
+raschelt
+raschelte
+raschelten
+rascheltest
+rascheltet
+raschem
+raschen
+rascher
+raschere
+rascherem
+rascheren
+rascherer
+rascheres
+rasches
+rascheste
+raschestem
+raschesten
+raschester
+raschestes
+raschle
+raschste
+raschstem
+raschsten
+raschster
+raschstes
+rase
+rasen
+rasend
+rasende
+rasendem
+rasenden
+rasender
+rasendes
+rasest
+rasiere
+rasieren
+rasierend
+rasierende
+rasierendem
+rasierenden
+rasierender
+rasierendes
+rasierst
+rasiert
+rasierte
+rasiertem
+rasierten
+rasierter
+rasiertes
+rasiertest
+rasiertet
+rassele
+rasseln
+rasselnd
+rasselnde
+rasselndem
+rasselnden
+rasselnder
+rasselndes
+rasselst
+rasselt
+rasselte
+rasselten
+rasseltest
+rasseltet
+rassig
+rassige
+rassigem
+rassigen
+rassiger
+rassiges
+rassisch
+rassische
+rassischem
+rassischen
+rassischer
+rassisches
+rassistisch
+rassistische
+rassistischem
+rassistischen
+rassistischer
+rassistisches
+rassle
+rast
+raste
+rasten
+rastend
+rastende
+rastendem
+rastenden
+rastender
+rastendes
+rastest
+rastet
+rastete
+rasteten
+rastetest
+rastetet
+rastlos
+rastlose
+rastlosem
+rastlosen
+rastloser
+rastloses
+rate
+raten
+ratend
+ratende
+ratendem
+ratenden
+ratender
+ratendes
+ratenweise
+ratet
+ratifiziere
+ratifizieren
+ratifizierend
+ratifizierende
+ratifizierendem
+ratifizierenden
+ratifizierender
+ratifizierendes
+ratifizierst
+ratifiziert
+ratifizierte
+ratifiziertem
+ratifizierten
+ratifizierter
+ratifiziertes
+ratifiziertest
+ratifiziertet
+ratio
+rational
+rationale
+rationalem
+rationalen
+rationaler
+rationales
+rationalisiere
+rationalisieren
+rationalisierend
+rationalisierende
+rationalisierendem
+rationalisierenden
+rationalisierender
+rationalisierendes
+rationalisierst
+rationalisiert
+rationalisierte
+rationalisiertem
+rationalisierten
+rationalisierter
+rationalisiertes
+rationalisiertest
+rationalisiertet
+rationell
+rationelle
+rationellem
+rationellen
+rationeller
+rationellere
+rationellerem
+rationelleren
+rationellerer
+rationelleres
+rationelles
+rationellste
+rationellstem
+rationellsten
+rationellster
+rationellstes
+rationiere
+rationieren
+rationierend
+rationierende
+rationierendem
+rationierenden
+rationierender
+rationierendes
+rationierst
+rationiert
+rationierte
+rationiertem
+rationierten
+rationierter
+rationiertes
+rationiertest
+rationiertet
+ratlos
+ratlose
+ratlosem
+ratlosen
+ratloser
+ratloses
+ratsam
+ratsame
+ratsamem
+ratsamen
+ratsamer
+ratsames
+rattere
+rattern
+ratternd
+ratternde
+ratterndem
+ratternden
+ratternder
+ratterndes
+ratterst
+rattert
+ratterte
+ratterten
+rattertest
+rattertet
+rattre
+ratzekahl
+rau
+raube
+raubeinig
+raubeinige
+raubeinigem
+raubeinigen
+raubeiniger
+raubeiniges
+rauben
+raubend
+raubende
+raubendem
+raubenden
+raubender
+raubendes
+raubkopiere
+raubkopieren
+raubkopierend
+raubkopierende
+raubkopierendem
+raubkopierenden
+raubkopierender
+raubkopierendes
+raubkopierst
+raubkopiert
+raubkopierte
+raubkopiertem
+raubkopierten
+raubkopierter
+raubkopiertes
+raubkopiertest
+raubkopiertet
+raubst
+raubt
+raubte
+raubten
+raubtest
+raubtet
+rauche
+rauchen
+rauchend
+rauchende
+rauchendem
+rauchenden
+rauchender
+rauchendes
+rauchig
+rauchige
+rauchigem
+rauchigen
+rauchiger
+rauchiges
+rauchst
+raucht
+rauchte
+rauchten
+rauchtest
+rauchtet
+raue
+rauem
+rauen
+rauer
+rauere
+rauerem
+raueren
+rauerer
+raueres
+raues
+raueste
+rauestem
+rauesten
+rauester
+rauestes
+raufe
+raufen
+raufend
+raufende
+raufendem
+raufenden
+raufender
+raufendes
+raufqqlustig
+raufqqlustige
+raufqqlustigem
+raufqqlustigen
+raufqqlustiger
+raufqqlustiges
+raufst
+rauft
+raufte
+rauften
+rauftest
+rauftet
+raumkrank
+raumkranke
+raumkrankem
+raumkranken
+raumkranker
+raumkrankes
+raumweit
+raumweite
+raumweitem
+raumweiten
+raumweiter
+raumweites
+raune
+raunen
+raunend
+raunende
+raunendem
+raunenden
+raunender
+raunendes
+raunst
+raunt
+raunte
+raunten
+rauntest
+rauntet
+raunz
+raunze
+raunzen
+raunzend
+raunzende
+raunzendem
+raunzenden
+raunzender
+raunzendes
+raunzest
+raunzt
+raunzte
+raunzten
+raunztest
+raunztet
+raupenartig
+raupenartige
+raupenartigem
+raupenartigen
+raupenartiger
+raupenartiges
+rausche
+rauschen
+rauschend
+rauschende
+rauschendem
+rauschenden
+rauschender
+rauschendes
+rauschest
+rauschgiftsüchtig
+rauschgiftsüchtige
+rauschgiftsüchtigem
+rauschgiftsüchtigen
+rauschgiftsüchtiger
+rauschgiftsüchtiges
+rauschst
+rauscht
+rauschte
+rauschten
+rauschtest
+rauschtet
+rausgesetzt
+rausgesetzte
+rausgesetztem
+rausgesetzten
+rausgesetzter
+rausgesetztes
+rausgesucht
+rausgesuchte
+rausgesuchtem
+rausgesuchten
+rausgesuchter
+rausgesuchtes
+rauste
+raustem
+rausten
+rauster
+raustes
+reagiere
+reagieren
+reagierend
+reagierende
+reagierendem
+reagierenden
+reagierender
+reagierendes
+reagierst
+reagiert
+reagierte
+reagierten
+reagiertest
+reagiertet
+reaktionär
+reaktionäre
+reaktionärem
+reaktionären
+reaktionärer
+reaktionärere
+reaktionärerem
+reaktionäreren
+reaktionärerer
+reaktionäreres
+reaktionäres
+reaktionärste
+reaktionärstem
+reaktionärsten
+reaktionärster
+reaktionärstes
+reaktiv
+reaktive
+reaktivem
+reaktiven
+reaktiver
+reaktives
+real
+reale
+realem
+realen
+realer
+reales
+realisierbar
+realisierbare
+realisierbarem
+realisierbaren
+realisierbarer
+realisierbares
+realisiere
+realisieren
+realisierend
+realisierende
+realisierendem
+realisierenden
+realisierender
+realisierendes
+realisierst
+realisiert
+realisierte
+realisiertem
+realisierten
+realisierter
+realisiertes
+realisiertest
+realisiertet
+realistisch
+realistische
+realistischem
+realistischen
+realistischer
+realistischere
+realistischerem
+realistischeren
+realistischerer
+realistischeres
+realistischerweise
+realistisches
+realistischste
+realistischstem
+realistischsten
+realistischster
+realistischstes
+realiter
+rebelliere
+rebellieren
+rebellierend
+rebellierende
+rebellierendem
+rebellierenden
+rebellierender
+rebellierendes
+rebellierst
+rebelliert
+rebellierte
+rebellierten
+rebelliertest
+rebelliertet
+rebellisch
+rebellische
+rebellischem
+rebellischen
+rebellischer
+rebellisches
+reche
+rechen
+rechend
+rechende
+rechendem
+rechenden
+rechender
+rechendes
+rechenintensiv
+rechenintensive
+rechenintensivem
+rechenintensiven
+rechenintensiver
+rechenintensives
+recherchiere
+recherchieren
+recherchierend
+recherchierende
+recherchierendem
+recherchierenden
+recherchierender
+recherchierendes
+recherchierst
+recherchiert
+recherchierte
+recherchiertem
+recherchierten
+recherchierter
+recherchiertes
+recherchiertest
+recherchiertet
+rechne
+rechnen
+rechnend
+rechnende
+rechnendem
+rechnenden
+rechnender
+rechnendes
+rechnergesteuert
+rechnergesteuerte
+rechnergesteuertem
+rechnergesteuerten
+rechnergesteuerter
+rechnergesteuertes
+rechnergestützt
+rechnergestützte
+rechnergestütztem
+rechnergestützten
+rechnergestützter
+rechnergestütztes
+rechnerisch
+rechnerische
+rechnerischem
+rechnerischen
+rechnerischer
+rechnerisches
+rechnerunterstützt
+rechnerunterstützte
+rechnerunterstütztem
+rechnerunterstützten
+rechnerunterstützter
+rechnerunterstütztes
+rechnest
+rechnet
+rechnete
+rechneten
+rechnetest
+rechnetet
+rechst
+recht
+rechte
+rechteckig
+rechteckige
+rechteckigem
+rechteckigen
+rechteckiger
+rechteckiges
+rechtem
+rechten
+rechtens
+rechter
+rechtes
+rechtest
+rechtet
+rechtfertigbar
+rechtfertigbare
+rechtfertigbarem
+rechtfertigbaren
+rechtfertigbarer
+rechtfertigbares
+rechtfertige
+rechtfertigen
+rechtfertigend
+rechtfertigende
+rechtfertigendem
+rechtfertigenden
+rechtfertigender
+rechtfertigendes
+rechtfertigst
+rechtfertigt
+rechtfertigte
+rechtfertigten
+rechtfertigtest
+rechtfertigtet
+rechthaberisch
+rechthaberische
+rechthaberischem
+rechthaberischen
+rechthaberischer
+rechthaberisches
+rechtlich
+rechtliche
+rechtlichem
+rechtlichen
+rechtlicher
+rechtliches
+rechtlinig
+rechtlinige
+rechtlinigem
+rechtlinigen
+rechtliniger
+rechtliniges
+rechtlos
+rechtlose
+rechtlosem
+rechtlosen
+rechtloser
+rechtloses
+rechtmäßig
+rechtmäßige
+rechtmäßigem
+rechtmäßigen
+rechtmäßiger
+rechtmäßiges
+rechts
+rechtsbündig
+rechtsbündige
+rechtsbündigem
+rechtsbündigen
+rechtsbündiger
+rechtsbündiges
+rechtschaffen
+rechtschaffene
+rechtschaffenem
+rechtschaffenen
+rechtschaffener
+rechtschaffenes
+rechtsextrem
+rechtsextreme
+rechtsextremem
+rechtsextremen
+rechtsextremer
+rechtsextremere
+rechtsextremerem
+rechtsextremeren
+rechtsextremerer
+rechtsextremeres
+rechtsextremes
+rechtsextremistisch
+rechtsextremistische
+rechtsextremistischem
+rechtsextremistischen
+rechtsextremistischer
+rechtsextremistisches
+rechtsextremste
+rechtsextremstem
+rechtsextremsten
+rechtsextremster
+rechtsextremstes
+rechtsgerichtet
+rechtsgerichtete
+rechtsgerichtetem
+rechtsgerichteten
+rechtsgerichteter
+rechtsgerichtetes
+rechtsgängig
+rechtsgängige
+rechtsgängigem
+rechtsgängigen
+rechtsgängiger
+rechtsgängiges
+rechtsgültig
+rechtsgültige
+rechtsgültigem
+rechtsgültigen
+rechtsgültiger
+rechtsgültiges
+rechtsherum
+rechtshändig
+rechtshändige
+rechtshändigem
+rechtshändigen
+rechtshändiger
+rechtshändiges
+rechtskräftig
+rechtskräftige
+rechtskräftigem
+rechtskräftigen
+rechtskräftiger
+rechtskräftiges
+rechtskundig
+rechtskundige
+rechtskundigem
+rechtskundigen
+rechtskundiger
+rechtskundiges
+rechtsradikal
+rechtsradikale
+rechtsradikalem
+rechtsradikalen
+rechtsradikaler
+rechtsradikales
+rechtsstaatlich
+rechtsstaatliche
+rechtsstaatlichem
+rechtsstaatlichen
+rechtsstaatlicher
+rechtsstaatliches
+rechtsum
+rechtsunfähig
+rechtsunfähige
+rechtsunfähigem
+rechtsunfähigen
+rechtsunfähiger
+rechtsunfähiges
+rechtsunwirksam
+rechtsunwirksame
+rechtsunwirksamem
+rechtsunwirksamen
+rechtsunwirksamer
+rechtsunwirksames
+rechtsverbindlich
+rechtsverbindliche
+rechtsverbindlichem
+rechtsverbindlichen
+rechtsverbindlicher
+rechtsverbindliches
+rechtswidrig
+rechtswidrige
+rechtswidrigem
+rechtswidrigen
+rechtswidriger
+rechtswidrigere
+rechtswidrigerem
+rechtswidrigeren
+rechtswidrigerer
+rechtswidrigeres
+rechtswidriges
+rechtswidrigste
+rechtswidrigstem
+rechtswidrigsten
+rechtswidrigster
+rechtswidrigstes
+rechtswirksam
+rechtswirksame
+rechtswirksamem
+rechtswirksamen
+rechtswirksamer
+rechtswirksames
+rechtwinkelig
+rechtwinkelige
+rechtwinkeligem
+rechtwinkeligen
+rechtwinkeliger
+rechtwinkeliges
+rechtwinklig
+rechtwinklige
+rechtwinkligem
+rechtwinkligen
+rechtwinkliger
+rechtwinkliges
+rechtzeitig
+rechtzeitige
+rechtzeitigem
+rechtzeitigen
+rechtzeitiger
+rechtzeitiges
+recke
+recken
+reckend
+reckende
+reckendem
+reckenden
+reckender
+reckendes
+reckst
+reckt
+reckte
+reckten
+recktest
+recktet
+redaktionell
+redaktionelle
+redaktionellem
+redaktionellen
+redaktioneller
+redaktionelles
+rede
+redefinierbar
+redefinierbare
+redefinierbarem
+redefinierbaren
+redefinierbarer
+redefinierbares
+redefiniere
+redefinieren
+redefinierend
+redefinierende
+redefinierendem
+redefinierenden
+redefinierender
+redefinierendes
+redefinierst
+redefiniert
+redefinierte
+redefiniertem
+redefinierten
+redefinierter
+redefiniertes
+redefiniertest
+redefiniertet
+redegewandt
+redegewandte
+redegewandtem
+redegewandten
+redegewandter
+redegewandtere
+redegewandterem
+redegewandteren
+redegewandterer
+redegewandteres
+redegewandtes
+redegewandteste
+redegewandtestem
+redegewandtesten
+redegewandtester
+redegewandtestes
+reden
+redend
+redende
+redendem
+redenden
+redender
+redendes
+redest
+redet
+redete
+redeten
+redetest
+redetet
+redigiere
+redigieren
+redigierst
+redigiert
+redigierte
+redigiertem
+redigierten
+redigierter
+redigiertes
+redigiertest
+redigiertet
+redlich
+redliche
+redlichem
+redlichen
+redlicher
+redlichere
+redlicherem
+redlicheren
+redlicherer
+redlicheres
+redliches
+redlichste
+redlichstem
+redlichsten
+redlichster
+redlichstes
+redselig
+redselige
+redseligem
+redseligen
+redseliger
+redseligere
+redseligerem
+redseligeren
+redseligerer
+redseligeres
+redseliges
+redseligste
+redseligstem
+redseligsten
+redseligster
+redseligstes
+redundant
+redundante
+redundantem
+redundanten
+redundanter
+redundantes
+reduziere
+reduzieren
+reduzierend
+reduzierende
+reduzierendem
+reduzierenden
+reduzierender
+reduzierendes
+reduzierst
+reduziert
+reduzierte
+reduziertem
+reduzierten
+reduzierter
+reduziertes
+reduziertest
+reduziertet
+reell
+reelle
+reellem
+reellen
+reeller
+reellere
+reellerem
+reelleren
+reellerer
+reelleres
+reelles
+reellste
+reellstem
+reellsten
+reellster
+reellstes
+referentiell
+referentielle
+referentiellem
+referentiellen
+referentieller
+referentielles
+referenziell
+referenzielle
+referenziellem
+referenziellen
+referenzieller
+referenzielles
+referenzierbar
+referenzierbare
+referenzierbarem
+referenzierbaren
+referenzierbarer
+referenzierbares
+referenziere
+referenzieren
+referenzierend
+referenzierende
+referenzierendem
+referenzierenden
+referenzierender
+referenzierendes
+referenzierst
+referenziert
+referenzierte
+referenziertem
+referenzierten
+referenzierter
+referenziertes
+referenziertest
+referenziertet
+referiere
+referieren
+referierend
+referierende
+referierendem
+referierenden
+referierender
+referierendes
+referierst
+referiert
+referierte
+referiertem
+referierten
+referierter
+referiertes
+referiertest
+referiertet
+refinanziere
+refinanzieren
+refinanzierend
+refinanzierende
+refinanzierendem
+refinanzierenden
+refinanzierender
+refinanzierendes
+refinanzierst
+refinanziert
+refinanzierte
+refinanziertem
+refinanzierten
+refinanzierter
+refinanziertes
+refinanziertest
+refinanziertet
+reflektiere
+reflektieren
+reflektierend
+reflektierende
+reflektierendem
+reflektierenden
+reflektierender
+reflektierendes
+reflektierst
+reflektiert
+reflektierte
+reflektiertem
+reflektierten
+reflektierter
+reflektiertes
+reflektiertest
+reflektiertet
+reflektiv
+reflektive
+reflektivem
+reflektiven
+reflektiver
+reflektives
+reflexartig
+reflexartige
+reflexartigem
+reflexartigen
+reflexartiger
+reflexartiges
+reflexionsfrei
+reflexionsfreie
+reflexionsfreiem
+reflexionsfreien
+reflexionsfreier
+reflexionsfreies
+reflexiv
+reflexive
+reflexivem
+reflexiven
+reflexiver
+reflexives
+reformatorisch
+reformatorische
+reformatorischem
+reformatorischen
+reformatorischer
+reformatorisches
+reformiere
+reformieren
+reformierend
+reformierende
+reformierendem
+reformierenden
+reformierender
+reformierendes
+reformierst
+reformiert
+reformierte
+reformiertem
+reformierten
+reformierter
+reformiertes
+reformiertest
+reformiertet
+reformpädagogisch
+reformpädagogische
+reformpädagogischem
+reformpädagogischen
+reformpädagogischer
+reformpädagogisches
+reg
+rege
+regelbar
+regelbare
+regelbarem
+regelbaren
+regelbarer
+regelbares
+regelbasiert
+regelbasierte
+regelbasiertem
+regelbasierten
+regelbasierter
+regelbasiertes
+regele
+regelhaft
+regelhafte
+regelhaftem
+regelhaften
+regelhafter
+regelhaftes
+regelmäßig
+regelmäßige
+regelmäßigem
+regelmäßigen
+regelmäßiger
+regelmäßigere
+regelmäßigerem
+regelmäßigeren
+regelmäßigerer
+regelmäßigeres
+regelmäßiges
+regelmäßigste
+regelmäßigstem
+regelmäßigsten
+regelmäßigster
+regelmäßigstes
+regeln
+regelnd
+regelnde
+regelndem
+regelnden
+regelnder
+regelndes
+regelrecht
+regelrechte
+regelrechtem
+regelrechten
+regelrechter
+regelrechtes
+regelst
+regelt
+regelte
+regelten
+regeltest
+regeltet
+regelwidrig
+regelwidrige
+regelwidrigem
+regelwidrigen
+regelwidriger
+regelwidriges
+regem
+regen
+regend
+regende
+regendem
+regenden
+regender
+regendes
+regendicht
+regendichte
+regendichtem
+regendichten
+regendichter
+regendichtes
+regenerativ
+regenerative
+regenerativem
+regenerativen
+regenerativer
+regeneratives
+regeneriere
+regenerieren
+regenerierend
+regenerierende
+regenerierendem
+regenerierenden
+regenerierender
+regenerierendes
+regenerierst
+regeneriert
+regenerierte
+regeneriertem
+regenerierten
+regenerierter
+regeneriertes
+regeneriertest
+regeneriertet
+reger
+regere
+regerem
+regeren
+regerer
+regeres
+reges
+regierbar
+regierbare
+regierbarem
+regierbaren
+regierbarer
+regierbares
+regiere
+regieren
+regierend
+regierende
+regierendem
+regierenden
+regierender
+regierendes
+regierst
+regiert
+regierte
+regierten
+regiertest
+regiertet
+regional
+regionale
+regionalem
+regionalen
+regionaler
+regionales
+registriere
+registrieren
+registrierend
+registrierende
+registrierendem
+registrierenden
+registrierender
+registrierendes
+registrierst
+registriert
+registrierte
+registriertem
+registrierten
+registrierter
+registriertes
+registriertest
+registriertet
+regle
+reglementiere
+reglementieren
+reglementierend
+reglementierende
+reglementierendem
+reglementierenden
+reglementierender
+reglementierendes
+reglementierst
+reglementiert
+reglementierte
+reglementiertem
+reglementierten
+reglementierter
+reglementiertes
+reglementiertest
+reglementiertet
+reglos
+reglose
+reglosem
+reglosen
+regloser
+regloses
+regne
+regnen
+regnend
+regnende
+regnendem
+regnenden
+regnender
+regnendes
+regnerisch
+regnerische
+regnerischem
+regnerischen
+regnerischer
+regnerisches
+regnest
+regnet
+regnete
+regneten
+regnetest
+regnetet
+regresspflichtig
+regresspflichtige
+regresspflichtigem
+regresspflichtigen
+regresspflichtiger
+regresspflichtiges
+regsam
+regsame
+regsamem
+regsamen
+regsamer
+regsamere
+regsamerem
+regsameren
+regsamerer
+regsameres
+regsames
+regsamste
+regsamstem
+regsamsten
+regsamster
+regsamstes
+regst
+regste
+regstem
+regsten
+regster
+regstes
+regt
+regte
+regten
+regtest
+regtet
+regulativ
+regulative
+regulativem
+regulativen
+regulativer
+regulatives
+regulierbar
+regulierbare
+regulierbarem
+regulierbaren
+regulierbarer
+regulierbares
+reguliere
+regulieren
+regulierend
+regulierende
+regulierendem
+regulierenden
+regulierender
+regulierendes
+regulierst
+reguliert
+regulierte
+reguliertem
+regulierten
+regulierter
+reguliertes
+reguliertest
+reguliertet
+regulär
+reguläre
+regulärem
+regulären
+regulärer
+reguläres
+regungslos
+regungslose
+regungslosem
+regungslosen
+regungsloser
+regungsloses
+rehabilitiere
+rehabilitieren
+rehabilitierend
+rehabilitierende
+rehabilitierendem
+rehabilitierenden
+rehabilitierender
+rehabilitierendes
+rehabilitierst
+rehabilitiert
+rehabilitierte
+rehabilitiertem
+rehabilitierten
+rehabilitierter
+rehabilitiertes
+rehabilitiertest
+rehabilitiertet
+reibe
+reiben
+reibend
+reibende
+reibendem
+reibenden
+reibender
+reibendes
+reibst
+reibt
+reibungslos
+reibungslose
+reibungslosem
+reibungslosen
+reibungsloser
+reibungsloses
+reich
+reiche
+reichem
+reichen
+reichend
+reichende
+reichendem
+reichenden
+reichender
+reichendes
+reicher
+reichere
+reicherem
+reicheren
+reicherer
+reicheres
+reiches
+reichhaltig
+reichhaltige
+reichhaltigem
+reichhaltigen
+reichhaltiger
+reichhaltigere
+reichhaltigerem
+reichhaltigeren
+reichhaltigerer
+reichhaltigeres
+reichhaltiges
+reichhaltigste
+reichhaltigstem
+reichhaltigsten
+reichhaltigster
+reichhaltigstes
+reichlich
+reichliche
+reichlichem
+reichlichen
+reichlicher
+reichlichere
+reichlicherem
+reichlicheren
+reichlicherer
+reichlicheres
+reichliches
+reichlichste
+reichlichstem
+reichlichsten
+reichlichster
+reichlichstes
+reichst
+reichste
+reichstem
+reichsten
+reichster
+reichstes
+reichsunmittelbar
+reichsunmittelbare
+reichsunmittelbarem
+reichsunmittelbaren
+reichsunmittelbarer
+reichsunmittelbares
+reicht
+reichte
+reichten
+reichtest
+reichtet
+reif
+reife
+reifem
+reifen
+reifend
+reifende
+reifendem
+reifenden
+reifender
+reifendes
+reifer
+reifere
+reiferem
+reiferen
+reiferer
+reiferes
+reifes
+reifqqlich
+reifqqliche
+reifqqlichem
+reifqqlichen
+reifqqlicher
+reifqqlichere
+reifqqlicherem
+reifqqlicheren
+reifqqlicherer
+reifqqlicheres
+reifqqliches
+reifqqlichste
+reifqqlichstem
+reifqqlichsten
+reifqqlichster
+reifqqlichstes
+reifst
+reifste
+reifstem
+reifsten
+reifster
+reifstes
+reift
+reifte
+reiften
+reiftest
+reiftet
+reihe
+reihen
+reihend
+reihende
+reihendem
+reihenden
+reihender
+reihendes
+reihenweise
+reihst
+reiht
+reihte
+reihten
+reihtest
+reihtet
+reime
+reimen
+reimend
+reimende
+reimendem
+reimenden
+reimender
+reimendes
+reimplementierbar
+reimplementierbare
+reimplementierbarem
+reimplementierbaren
+reimplementierbarer
+reimplementierbares
+reimplementiere
+reimplementieren
+reimplementierend
+reimplementierende
+reimplementierendem
+reimplementierenden
+reimplementierender
+reimplementierendes
+reimplementierst
+reimplementiert
+reimplementierte
+reimplementiertem
+reimplementierten
+reimplementierter
+reimplementiertes
+reimplementiertest
+reimplementiertet
+reimst
+reimt
+reimte
+reimten
+reimtest
+reimtet
+rein
+reine
+reinem
+reinen
+reiner
+reinere
+reinerem
+reineren
+reinerer
+reineres
+reines
+reingefallen
+reingefallene
+reingefallenem
+reingefallenen
+reingefallener
+reingefallenes
+reingehe
+reingehen
+reingehend
+reingehende
+reingehendem
+reingehenden
+reingehender
+reingehendes
+reingehst
+reingeht
+reinige
+reinigen
+reinigend
+reinigende
+reinigendem
+reinigenden
+reinigender
+reinigendes
+reinigst
+reinigt
+reinigte
+reinigten
+reinigtest
+reinigtet
+reinitialisierbar
+reinitialisierbare
+reinitialisierbarem
+reinitialisierbaren
+reinitialisierbarer
+reinitialisierbares
+reinitialisiere
+reinitialisieren
+reinitialisierend
+reinitialisierende
+reinitialisierendem
+reinitialisierenden
+reinitialisierender
+reinitialisierendes
+reinitialisierst
+reinitialisiert
+reinitialisierte
+reinitialisiertem
+reinitialisierten
+reinitialisierter
+reinitialisiertes
+reinitialisiertest
+reinitialisiertet
+reinkomme
+reinkommen
+reinkommend
+reinkommende
+reinkommendem
+reinkommenden
+reinkommender
+reinkommendes
+reinkommst
+reinkommt
+reinlich
+reinliche
+reinlichem
+reinlichen
+reinlicher
+reinlichere
+reinlicherem
+reinlicheren
+reinlicherer
+reinlicheres
+reinliches
+reinlichste
+reinlichstem
+reinlichsten
+reinlichster
+reinlichstes
+reinrassig
+reinrassige
+reinrassigem
+reinrassigen
+reinrassiger
+reinrassiges
+reinschreibe
+reinschreiben
+reinschreibend
+reinschreibende
+reinschreibendem
+reinschreibenden
+reinschreibender
+reinschreibendes
+reinschreibst
+reinschreibt
+reinstalliere
+reinstallieren
+reinstallierend
+reinstallierende
+reinstallierendem
+reinstallierenden
+reinstallierender
+reinstallierendes
+reinstallierst
+reinstalliert
+reinstallierte
+reinstalliertem
+reinstallierten
+reinstallierter
+reinstalliertes
+reinstalliertest
+reinstalliertet
+reinste
+reinstem
+reinsten
+reinster
+reinstes
+reinvestiere
+reinvestieren
+reinvestierend
+reinvestierende
+reinvestierendem
+reinvestierenden
+reinvestierender
+reinvestierendes
+reinvestierst
+reinvestiert
+reinvestierte
+reinvestiertem
+reinvestierten
+reinvestierter
+reinvestiertes
+reinvestiertest
+reinvestiertet
+reinwasche
+reinwaschen
+reinwaschend
+reinwaschende
+reinwaschendem
+reinwaschenden
+reinwaschender
+reinwaschendes
+reinwascht
+reise
+reisefertig
+reisefertige
+reisefertigem
+reisefertigen
+reisefertiger
+reisefertiges
+reiselustig
+reiselustige
+reiselustigem
+reiselustigen
+reiselustiger
+reiselustigere
+reiselustigerem
+reiselustigeren
+reiselustigerer
+reiselustigeres
+reiselustiges
+reiselustigste
+reiselustigstem
+reiselustigsten
+reiselustigster
+reiselustigstes
+reisen
+reisend
+reisende
+reisendem
+reisenden
+reisender
+reisendes
+reisest
+reist
+reiste
+reisten
+reistest
+reistet
+reite
+reiten
+reitend
+reitende
+reitendem
+reitenden
+reitender
+reitendes
+reitest
+reitet
+reizbar
+reizbare
+reizbarem
+reizbaren
+reizbarer
+reizbarere
+reizbarerem
+reizbareren
+reizbarerer
+reizbareres
+reizbares
+reizbarste
+reizbarstem
+reizbarsten
+reizbarster
+reizbarstes
+reize
+reizen
+reizend
+reizende
+reizendem
+reizenden
+reizender
+reizendes
+reizest
+reizlos
+reizlose
+reizlosem
+reizlosen
+reizloser
+reizlosere
+reizloserem
+reizloseren
+reizloserer
+reizloseres
+reizloses
+reizloseste
+reizlosestem
+reizlosesten
+reizlosester
+reizlosestes
+reizt
+reizte
+reizten
+reiztest
+reiztet
+reizvoll
+reizvolle
+reizvollem
+reizvollen
+reizvoller
+reizvollere
+reizvollerem
+reizvolleren
+reizvollerer
+reizvolleres
+reizvolles
+reizvollste
+reizvollstem
+reizvollsten
+reizvollster
+reizvollstes
+reiße
+reißen
+reißend
+reißende
+reißendem
+reißenden
+reißender
+reißendes
+reißerisch
+reißerische
+reißerischem
+reißerischen
+reißerischer
+reißerisches
+reißest
+reißt
+rekapituliere
+rekapitulieren
+rekapitulierend
+rekapitulierende
+rekapitulierendem
+rekapitulierenden
+rekapitulierender
+rekapitulierendes
+rekapitulierst
+rekapituliert
+rekapitulierte
+rekapitulierten
+rekapituliertest
+rekapituliertet
+reklamiere
+reklamieren
+reklamierend
+reklamierende
+reklamierendem
+reklamierenden
+reklamierender
+reklamierendes
+reklamierst
+reklamiert
+reklamierte
+reklamiertem
+reklamierten
+reklamierter
+reklamiertes
+reklamiertest
+reklamiertet
+rekognosziere
+rekognoszieren
+rekognoszierend
+rekognoszierende
+rekognoszierendem
+rekognoszierenden
+rekognoszierender
+rekognoszierendes
+rekognoszierst
+rekognosziert
+rekognoszierte
+rekognosziertem
+rekognoszierten
+rekognoszierter
+rekognosziertes
+rekognosziertest
+rekognosziertet
+rekompilierbar
+rekompilierbare
+rekompilierbarem
+rekompilierbaren
+rekompilierbarer
+rekompilierbares
+rekompiliere
+rekompilieren
+rekompilierend
+rekompilierende
+rekompilierendem
+rekompilierenden
+rekompilierender
+rekompilierendes
+rekompilierst
+rekompiliert
+rekompilierte
+rekompiliertem
+rekompilierten
+rekompilierter
+rekompiliertes
+rekompiliertest
+rekompiliertet
+rekonstruierbar
+rekonstruierbare
+rekonstruierbarem
+rekonstruierbaren
+rekonstruierbarer
+rekonstruierbares
+rekonstruiere
+rekonstruieren
+rekonstruierend
+rekonstruierende
+rekonstruierendem
+rekonstruierenden
+rekonstruierender
+rekonstruierendes
+rekonstruierst
+rekonstruiert
+rekonstruierte
+rekonstruiertem
+rekonstruierten
+rekonstruierter
+rekonstruiertes
+rekonstruiertest
+rekonstruiertet
+rekrutiere
+rekrutieren
+rekrutierend
+rekrutierende
+rekrutierendem
+rekrutierenden
+rekrutierender
+rekrutierendes
+rekrutierst
+rekrutiert
+rekrutierte
+rekrutiertem
+rekrutierten
+rekrutierter
+rekrutiertes
+rekrutiertest
+rekrutiertet
+rekursiv
+rekursive
+rekursivem
+rekursiven
+rekursiver
+rekursives
+relational
+relationale
+relationalem
+relationalen
+relationaler
+relationales
+relativ
+relative
+relativem
+relativen
+relativer
+relativere
+relativerem
+relativeren
+relativerer
+relativeres
+relatives
+relativiere
+relativieren
+relativierend
+relativierende
+relativierendem
+relativierenden
+relativierender
+relativierendes
+relativierst
+relativiert
+relativierte
+relativiertem
+relativierten
+relativierter
+relativiertes
+relativiertest
+relativiertet
+relativste
+relativstem
+relativsten
+relativster
+relativstes
+relegiere
+relegieren
+relegierend
+relegierende
+relegierendem
+relegierenden
+relegierender
+relegierendes
+relegierst
+relegiert
+relegierte
+relegiertem
+relegierten
+relegierter
+relegiertes
+relegiertest
+relegiertet
+relevant
+relevante
+relevantem
+relevanten
+relevanter
+relevantes
+religiös
+religiöse
+religiösem
+religiösen
+religiöser
+religiöses
+remis
+rempele
+rempeln
+rempelst
+rempelt
+rempelte
+rempelten
+rempeltest
+rempeltet
+remple
+renitent
+renitente
+renitentem
+renitenten
+renitenter
+renitentes
+renne
+rennen
+rennend
+rennende
+rennendem
+rennenden
+rennender
+rennendes
+rennst
+rennt
+renommiert
+renommierte
+renommiertem
+renommierten
+renommierter
+renommiertes
+renoviere
+renovieren
+renovierend
+renovierende
+renovierendem
+renovierenden
+renovierender
+renovierendes
+renovierst
+renoviert
+renovierte
+renoviertem
+renovierten
+renovierter
+renoviertes
+renoviertest
+renoviertet
+rentabel
+rentabelste
+rentabelstem
+rentabelsten
+rentabelster
+rentabelstes
+rentable
+rentablem
+rentablen
+rentabler
+rentablere
+rentablerem
+rentableren
+rentablerer
+rentableres
+rentables
+rentiere
+rentieren
+rentierend
+rentierende
+rentierendem
+rentierenden
+rentierender
+rentierendes
+rentierlich
+rentierliche
+rentierlichem
+rentierlichen
+rentierlicher
+rentierliches
+rentierst
+rentiert
+rentierte
+rentierten
+rentiertest
+rentiertet
+reorganisiere
+reorganisieren
+reorganisierend
+reorganisierende
+reorganisierendem
+reorganisierenden
+reorganisierender
+reorganisierendes
+reorganisierst
+reorganisiert
+reorganisierte
+reorganisiertem
+reorganisierten
+reorganisierter
+reorganisiertes
+reorganisiertest
+reorganisiertet
+reparabel
+reparable
+reparablem
+reparablen
+reparabler
+reparables
+reparierbar
+reparierbare
+reparierbarem
+reparierbaren
+reparierbarer
+reparierbares
+repariere
+reparieren
+reparierend
+reparierende
+reparierendem
+reparierenden
+reparierender
+reparierendes
+reparierst
+repariert
+reparierte
+repariertem
+reparierten
+reparierter
+repariertes
+repariertest
+repariertet
+repetiere
+repetieren
+repetierend
+repetierende
+repetierendem
+repetierenden
+repetierender
+repetierendes
+repetierst
+repetiert
+repetierte
+repetiertem
+repetierten
+repetierter
+repetiertes
+repetiertest
+repetiertet
+repressiv
+repressive
+repressivem
+repressiven
+repressiver
+repressivere
+repressiverem
+repressiveren
+repressiverer
+repressiveres
+repressives
+repressivste
+repressivstem
+repressivsten
+repressivster
+repressivstes
+reproduzierbar
+reproduzierbare
+reproduzierbarem
+reproduzierbaren
+reproduzierbarer
+reproduzierbares
+reproduziere
+reproduzieren
+reproduzierend
+reproduzierende
+reproduzierendem
+reproduzierenden
+reproduzierender
+reproduzierendes
+reproduzierst
+reproduziert
+reproduzierte
+reproduziertem
+reproduzierten
+reproduzierter
+reproduziertes
+reproduziertest
+reproduziertet
+repräsentativ
+repräsentative
+repräsentativem
+repräsentativen
+repräsentativer
+repräsentatives
+repräsentiere
+repräsentieren
+repräsentierend
+repräsentierende
+repräsentierendem
+repräsentierenden
+repräsentierender
+repräsentierendes
+repräsentierst
+repräsentiert
+repräsentierte
+repräsentiertem
+repräsentierten
+repräsentierter
+repräsentiertes
+repräsentiertest
+repräsentiertet
+republikanisch
+republikanische
+republikanischem
+republikanischen
+republikanischer
+republikanisches
+resch
+resche
+reschem
+reschen
+rescher
+resches
+reservepflichtig
+reservepflichtige
+reservepflichtigem
+reservepflichtigen
+reservepflichtiger
+reservepflichtiges
+reserviere
+reservieren
+reservierend
+reservierende
+reservierendem
+reservierenden
+reservierender
+reservierendes
+reservierst
+reserviert
+reservierte
+reserviertem
+reservierten
+reservierter
+reserviertes
+reserviertest
+reserviertet
+resident
+residente
+residentem
+residenten
+residenter
+residentes
+residiere
+residieren
+residierend
+residierende
+residierendem
+residierenden
+residierender
+residierendes
+residierst
+residiert
+residierte
+residierten
+residiertest
+residiertet
+resigniere
+resignieren
+resignierend
+resignierende
+resignierendem
+resignierenden
+resignierender
+resignierendes
+resignierst
+resigniert
+resignierte
+resigniertem
+resignierten
+resignierter
+resigniertes
+resigniertest
+resigniertet
+resistent
+resistente
+resistentem
+resistenten
+resistenter
+resistentes
+resolut
+resolute
+resolutem
+resoluten
+resoluter
+resolutes
+resp
+respektabel
+respektabelste
+respektabelstem
+respektabelsten
+respektabelster
+respektabelstes
+respektable
+respektablem
+respektablen
+respektabler
+respektablere
+respektablerem
+respektableren
+respektablerer
+respektableres
+respektables
+respektiere
+respektieren
+respektierend
+respektierende
+respektierendem
+respektierenden
+respektierender
+respektierendes
+respektierst
+respektiert
+respektierte
+respektiertem
+respektierten
+respektierter
+respektiertes
+respektiertest
+respektiertet
+respektive
+respektlos
+respektlose
+respektlosem
+respektlosen
+respektloser
+respektlosere
+respektloserem
+respektloseren
+respektloserer
+respektloseres
+respektloses
+respektloseste
+respektlosestem
+respektlosesten
+respektlosester
+respektlosestes
+respektvoll
+respektvolle
+respektvollem
+respektvollen
+respektvoller
+respektvollere
+respektvollerem
+respektvolleren
+respektvollerer
+respektvolleres
+respektvolles
+respektvollste
+respektvollstem
+respektvollsten
+respektvollster
+respektvollstes
+respektwidrig
+respektwidrige
+respektwidrigem
+respektwidrigen
+respektwidriger
+respektwidriges
+restauriere
+restaurieren
+restaurierend
+restaurierende
+restaurierendem
+restaurierenden
+restaurierender
+restaurierendes
+restaurierst
+restauriert
+restaurierte
+restauriertem
+restaurierten
+restaurierter
+restauriertes
+restauriertest
+restauriertet
+restlich
+restliche
+restlichem
+restlichen
+restlicher
+restliches
+restlos
+restlose
+restlosem
+restlosen
+restloser
+restloses
+restriktiv
+restriktive
+restriktivem
+restriktiven
+restriktiver
+restriktives
+restständig
+restständige
+restständigem
+restständigen
+restständiger
+restständiges
+resultiere
+resultieren
+resultierend
+resultierende
+resultierendem
+resultierenden
+resultierender
+resultierendes
+resultierst
+resultiert
+resultierte
+resultierten
+resultiertest
+resultiertet
+resümiere
+resümieren
+resümierend
+resümierende
+resümierendem
+resümierenden
+resümierender
+resümierendes
+resümierst
+resümiert
+resümierte
+resümiertem
+resümierten
+resümierter
+resümiertes
+resümiertest
+resümiertet
+retournierbar
+retournierbare
+retournierbarem
+retournierbaren
+retournierbarer
+retournierbares
+retourniere
+retournieren
+retournierend
+retournierende
+retournierendem
+retournierenden
+retournierender
+retournierendes
+retournierst
+retourniert
+retournierte
+retourniertem
+retournierten
+retournierter
+retourniertes
+retourniertest
+retourniertet
+rette
+retten
+rettend
+rettende
+rettendem
+rettenden
+rettender
+rettendes
+rettest
+rettet
+rettete
+retteten
+rettetest
+rettetet
+returniere
+returnieren
+returnierend
+returnierende
+returnierendem
+returnierenden
+returnierender
+returnierendes
+returnierst
+returniert
+returnierte
+returniertem
+returnierten
+returnierter
+returniertes
+returniertest
+returniertet
+retuschiere
+retuschieren
+retuschierend
+retuschierende
+retuschierendem
+retuschierenden
+retuschierender
+retuschierendes
+retuschierst
+retuschiert
+retuschierte
+retuschiertem
+retuschierten
+retuschierter
+retuschiertes
+retuschiertest
+retuschiertet
+reuelos
+reuelose
+reuelosem
+reuelosen
+reueloser
+reuelosere
+reueloserem
+reueloseren
+reueloserer
+reueloseres
+reueloses
+reueloseste
+reuelosestem
+reuelosesten
+reuelosester
+reuelosestes
+reuevoll
+reuevolle
+reuevollem
+reuevollen
+reuevoller
+reuevollere
+reuevollerem
+reuevolleren
+reuevollerer
+reuevolleres
+reuevolles
+reuevollste
+reuevollstem
+reuevollsten
+reuevollster
+reuevollstes
+reumütig
+reumütige
+reumütigem
+reumütigen
+reumütiger
+reumütiges
+revanchiere
+revanchieren
+revanchierend
+revanchierende
+revanchierendem
+revanchierenden
+revanchierender
+revanchierendes
+revanchierst
+revanchiert
+revanchierte
+revanchierten
+revanchiertest
+revanchiertet
+revanchistisch
+revanchistische
+revanchistischem
+revanchistischen
+revanchistischer
+revanchistisches
+reversibel
+reversible
+reversiblem
+reversiblen
+reversibler
+reversibles
+reversiere
+reversieren
+reversierend
+reversierende
+reversierendem
+reversierenden
+reversierender
+reversierendes
+reversierst
+reversiert
+reversierte
+reversiertem
+reversierten
+reversierter
+reversiertes
+reversiertest
+reversiertet
+revidiere
+revidieren
+revidierend
+revidierende
+revidierendem
+revidierenden
+revidierender
+revidierendes
+revidierst
+revidiert
+revidierte
+revidiertem
+revidierten
+revidierter
+revidiertes
+revidiertest
+revidiertet
+revisionistisch
+revisionistische
+revisionistischem
+revisionistischen
+revisionistischer
+revisionistisches
+revoltiere
+revoltieren
+revoltierend
+revoltierende
+revoltierendem
+revoltierenden
+revoltierender
+revoltierendes
+revoltierst
+revoltiert
+revoltierte
+revoltierten
+revoltiertest
+revoltiertet
+revolutionär
+revolutionäre
+revolutionärem
+revolutionären
+revolutionärer
+revolutionäres
+reziprok
+reziproke
+reziprokem
+reziproken
+reziproker
+reziprokes
+rezitiere
+rezitieren
+rezitierend
+rezitierende
+rezitierendem
+rezitierenden
+rezitierender
+rezitierendes
+rezitierst
+rezitiert
+rezitierte
+rezitiertem
+rezitierten
+rezitierter
+rezitiertes
+rezitiertest
+rezitiertet
+rheinisch
+rheinische
+rheinischem
+rheinischen
+rheinischer
+rheinisches
+rhetorisch
+rhetorische
+rhetorischem
+rhetorischen
+rhetorischer
+rhetorisches
+rhythmisch
+rhythmische
+rhythmischem
+rhythmischen
+rhythmischer
+rhythmisches
+richte
+richten
+richtend
+richtende
+richtendem
+richtenden
+richtender
+richtendes
+richterlich
+richterliche
+richterlichem
+richterlichen
+richterlicher
+richterliches
+richtest
+richtet
+richtete
+richteten
+richtetest
+richtetet
+richtig
+richtige
+richtigem
+richtigen
+richtiger
+richtigere
+richtigerem
+richtigeren
+richtigerer
+richtigeres
+richtiges
+richtiggehend
+richtigste
+richtigstem
+richtigsten
+richtigster
+richtigstes
+richtungweisend
+richtungweisende
+richtungweisendem
+richtungweisenden
+richtungweisender
+richtungweisendes
+rieb
+rieben
+riebst
+riebt
+rieche
+riechen
+riechend
+riechende
+riechendem
+riechenden
+riechender
+riechendes
+riechst
+riecht
+riechte
+riechten
+riechtest
+riechtet
+rief
+riefen
+riefest
+riefst
+rieft
+riesele
+rieseln
+rieselnd
+rieselnde
+rieselndem
+rieselnden
+rieselnder
+rieselndes
+rieselst
+rieselt
+rieselte
+rieselten
+rieseltest
+rieseltet
+riesengroß
+riesengroße
+riesengroßem
+riesengroßen
+riesengroßer
+riesengroßes
+riesenhaft
+riesenhafte
+riesenhaftem
+riesenhaften
+riesenhafter
+riesenhaftes
+riesig
+riesige
+riesigem
+riesigen
+riesiger
+riesigere
+riesigerem
+riesigeren
+riesigerer
+riesigeres
+riesiges
+riesigste
+riesigstem
+riesigsten
+riesigster
+riesigstes
+riesle
+riet
+riete
+rieten
+rietest
+rietet
+rietst
+rigoros
+rigorose
+rigorosem
+rigorosen
+rigoroser
+rigoroses
+ringe
+ringen
+ringend
+ringende
+ringendem
+ringenden
+ringender
+ringendes
+ringförmig
+ringförmige
+ringförmigem
+ringförmigen
+ringförmiger
+ringförmiges
+ringst
+ringsumher
+ringt
+ringte
+ringten
+ringtest
+ringtet
+rinne
+rinnen
+rinnend
+rinnende
+rinnendem
+rinnenden
+rinnender
+rinnendes
+rinnst
+rinnt
+risikofrei
+risikofreie
+risikofreiem
+risikofreien
+risikofreier
+risikofreies
+risikolos
+risikolose
+risikolosem
+risikolosen
+risikoloser
+risikoloses
+risikoscheu
+risikoscheue
+risikoscheuem
+risikoscheuen
+risikoscheuer
+risikoscheues
+riskant
+riskante
+riskantem
+riskanten
+riskanter
+riskantere
+riskanterem
+riskanteren
+riskanterer
+riskanteres
+riskanterweise
+riskantes
+riskanteste
+riskantestem
+riskantesten
+riskantester
+riskantestes
+riskiere
+riskieren
+riskierend
+riskierende
+riskierendem
+riskierenden
+riskierender
+riskierendes
+riskierst
+riskiert
+riskierte
+riskiertem
+riskierten
+riskierter
+riskiertes
+riskiertest
+riskiertet
+riss
+rissen
+rissest
+rissfest
+rissfeste
+rissfestem
+rissfesten
+rissfester
+rissfestere
+rissfesterem
+rissfesteren
+rissfesterer
+rissfesteres
+rissfestes
+rissfesteste
+rissfestestem
+rissfestesten
+rissfestester
+rissfestestes
+rissig
+rissige
+rissigem
+rissigen
+rissiger
+rissigere
+rissigerem
+rissigeren
+rissigerer
+rissigeres
+rissiges
+rissigste
+rissigstem
+rissigsten
+rissigster
+rissigstes
+risst
+ritt
+ritten
+ritterlich
+ritterliche
+ritterlichem
+ritterlichen
+ritterlicher
+ritterliches
+rittest
+rittet
+rittlings
+rittst
+rituale
+ritualem
+ritualen
+ritualer
+rituales
+ritualisiert
+ritualisierte
+ritualisiertem
+ritualisierten
+ritualisierter
+ritualisiertes
+rituell
+rituelle
+rituellem
+rituellen
+ritueller
+rituelles
+ritze
+ritzen
+ritzend
+ritzende
+ritzendem
+ritzenden
+ritzender
+ritzendes
+ritzest
+ritzt
+ritzte
+ritzten
+ritztest
+ritztet
+rivalisiere
+rivalisieren
+rivalisierend
+rivalisierende
+rivalisierendem
+rivalisierenden
+rivalisierender
+rivalisierendes
+rivalisierst
+rivalisiert
+rivalisierte
+rivalisierten
+rivalisiertest
+rivalisiertet
+robbe
+robben
+robbst
+robbt
+robbte
+robbten
+robbtest
+robbtet
+roboterhaft
+roboterhafte
+roboterhaftem
+roboterhaften
+roboterhafter
+roboterhaftes
+robust
+robuste
+robustem
+robusten
+robuster
+robustere
+robusterem
+robusteren
+robusterer
+robusteres
+robustes
+robusteste
+robustestem
+robustesten
+robustester
+robustestes
+roch
+rochen
+rochest
+rochst
+rocht
+rockig
+rockige
+rockigem
+rockigen
+rockiger
+rockiges
+rode
+rodele
+rodeln
+rodelnd
+rodelnde
+rodelndem
+rodelnden
+rodelnder
+rodelndes
+rodelst
+rodelt
+rodelte
+rodelten
+rodeltest
+rodeltet
+roden
+rodend
+rodende
+rodendem
+rodenden
+rodender
+rodendes
+rodest
+rodet
+rodete
+rodeten
+rodetest
+rodetet
+rodle
+roh
+rohe
+rohem
+rohen
+roher
+rohes
+rolle
+rollen
+rollend
+rollende
+rollendem
+rollenden
+rollender
+rollendes
+rolling
+rollst
+rollt
+rollte
+rollten
+rolltest
+rolltet
+romanisch
+romanische
+romanischem
+romanischen
+romanischer
+romanisches
+romantisch
+romantische
+romantischem
+romantischen
+romantischer
+romantischere
+romantischerem
+romantischeren
+romantischerer
+romantischeres
+romantisches
+romantischste
+romantischstem
+romantischsten
+romantischster
+romantischstes
+rosa
+rosarot
+rosarote
+rosarotem
+rosaroten
+rosaroter
+rosarotes
+rosig
+rosige
+rosigem
+rosigen
+rosiger
+rosigere
+rosigerem
+rosigeren
+rosigerer
+rosigeres
+rosiges
+rosigste
+rosigstem
+rosigsten
+rosigster
+rosigstes
+rostbeständig
+rostbeständige
+rostbeständigem
+rostbeständigen
+rostbeständiger
+rostbeständiges
+roste
+rosten
+rostend
+rostende
+rostendem
+rostenden
+rostender
+rostendes
+rostest
+rostet
+rostete
+rosteten
+rostetest
+rostetet
+rostfrei
+rostfreie
+rostfreiem
+rostfreien
+rostfreier
+rostfreies
+rostig
+rostige
+rostigem
+rostigen
+rostiger
+rostigere
+rostigerem
+rostigeren
+rostigerer
+rostigeres
+rostiges
+rostigste
+rostigstem
+rostigsten
+rostigster
+rostigstes
+rot
+rotbraun
+rotbraune
+rotbraunem
+rotbraunen
+rotbrauner
+rotbraunes
+rote
+rotem
+roten
+roter
+rotes
+rothaarig
+rothaarige
+rothaarigem
+rothaarigen
+rothaariger
+rothaariges
+rotiere
+rotieren
+rotierend
+rotierende
+rotierendem
+rotierenden
+rotierender
+rotierendes
+rotierst
+rotiert
+rotierte
+rotiertem
+rotierten
+rotierter
+rotiertes
+rotiertest
+rotiertet
+rotte
+rotten
+rottend
+rottende
+rottendem
+rottenden
+rottender
+rottendes
+rottest
+rottet
+rottete
+rotteten
+rottetest
+rottetet
+rotze
+rotzen
+rotzend
+rotzende
+rotzendem
+rotzenden
+rotzender
+rotzendes
+rotzest
+rotzt
+rotzte
+rotzten
+rotztest
+rotztet
+routinehaft
+routinehafte
+routinehaftem
+routinehaften
+routinehafter
+routinehaftes
+routinemäßig
+routinemäßige
+routinemäßigem
+routinemäßigen
+routinemäßiger
+routinemäßiges
+routiniert
+routinierte
+routiniertem
+routinierten
+routinierter
+routiniertes
+rubinrot
+rubinrote
+rubinrotem
+rubinroten
+rubinroter
+rubinrotes
+ruchbar
+ruchbare
+ruchbarem
+ruchbaren
+ruchbarer
+ruchbares
+ruckartig
+ruckartige
+ruckartigem
+ruckartigen
+ruckartiger
+ruckartiges
+ruckweise
+ruckweisem
+ruckweisen
+ruckweiser
+ruckweises
+rudere
+rudern
+rudernd
+rudernde
+ruderndem
+rudernden
+rudernder
+ruderndes
+ruderst
+rudert
+ruderte
+ruderten
+rudertest
+rudertet
+rudimentär
+rudimentäre
+rudimentärem
+rudimentären
+rudimentärer
+rudimentäres
+rudre
+rufe
+rufen
+rufend
+rufende
+rufendem
+rufenden
+rufender
+rufendes
+rufst
+ruft
+ruhe
+ruhelos
+ruhelose
+ruhelosem
+ruhelosen
+ruheloser
+ruhelosere
+ruheloserem
+ruheloseren
+ruheloserer
+ruheloseres
+ruheloses
+ruheloseste
+ruhelosestem
+ruhelosesten
+ruhelosester
+ruhelosestes
+ruhen
+ruhend
+ruhende
+ruhendem
+ruhenden
+ruhender
+ruhendes
+ruhig
+ruhige
+ruhigem
+ruhigen
+ruhiger
+ruhigere
+ruhigerem
+ruhigeren
+ruhigerer
+ruhigeres
+ruhiges
+ruhigste
+ruhigstem
+ruhigsten
+ruhigster
+ruhigstes
+ruhmbedeckt
+ruhmbedeckte
+ruhmbedecktem
+ruhmbedeckten
+ruhmbedeckter
+ruhmbedecktes
+ruhmreich
+ruhmreiche
+ruhmreichem
+ruhmreichen
+ruhmreicher
+ruhmreiches
+ruhst
+ruht
+ruhte
+ruhten
+ruhtest
+ruhtet
+ruiniere
+ruinieren
+ruinierend
+ruinierende
+ruinierendem
+ruinierenden
+ruinierender
+ruinierendes
+ruinierst
+ruiniert
+ruinierte
+ruiniertem
+ruinierten
+ruinierter
+ruiniertes
+ruiniertest
+ruiniertet
+ruinös
+ruinöse
+ruinösem
+ruinösen
+ruinöser
+ruinöses
+rumlöte
+rumlöten
+rumlötend
+rumlötende
+rumlötendem
+rumlötenden
+rumlötender
+rumlötendes
+rumlötest
+rumlötet
+rumlötete
+rumlöteten
+rumlötetest
+rumlötetet
+rumänisch
+rumänische
+rumänischem
+rumänischen
+rumänischer
+rumänisches
+rund
+runde
+rundem
+runden
+rundend
+rundende
+rundendem
+rundenden
+rundender
+rundendes
+runder
+rundes
+rundest
+rundet
+rundete
+rundeten
+rundetest
+rundetet
+rundherum
+rundlich
+rundliche
+rundlichem
+rundlichen
+rundlicher
+rundlichere
+rundlicherem
+rundlicheren
+rundlicherer
+rundlicheres
+rundliches
+rundlichste
+rundlichstem
+rundlichsten
+rundlichster
+rundlichstes
+rundum
+runtergeschraubt
+runtergeschraubte
+runtergeschraubtem
+runtergeschraubten
+runtergeschraubter
+runtergeschraubtes
+runtergezählt
+runtergezählte
+runtergezähltem
+runtergezählten
+runtergezählter
+runtergezähltes
+runzele
+runzelig
+runzelige
+runzeligem
+runzeligen
+runzeliger
+runzeliges
+runzeln
+runzelnd
+runzelnde
+runzelndem
+runzelnden
+runzelnder
+runzelndes
+runzelst
+runzelt
+runzelte
+runzelten
+runzeltest
+runzeltet
+runzle
+runzlig
+runzlige
+runzligem
+runzligen
+runzliger
+runzliges
+rupfe
+rupfen
+rupfend
+rupfende
+rupfendem
+rupfenden
+rupfender
+rupfendes
+rupfst
+rupft
+rupfte
+rupften
+rupftest
+rupftet
+russisch
+russische
+russischem
+russischen
+russischer
+russisches
+rustikal
+rustikale
+rustikalem
+rustikalen
+rustikaler
+rustikales
+rutsch
+rutsche
+rutschen
+rutschend
+rutschende
+rutschendem
+rutschenden
+rutschender
+rutschendes
+rutschest
+rutschig
+rutschige
+rutschigem
+rutschigen
+rutschiger
+rutschiges
+rutschst
+rutscht
+rutschte
+rutschten
+rutschtest
+rutschtet
+rußgeschwärzt
+rußgeschwärzte
+rußgeschwärztem
+rußgeschwärzten
+rußgeschwärzter
+rußgeschwärztes
+rußig
+rußige
+rußigem
+rußigen
+rußiger
+rußiges
+räche
+rächen
+rächend
+rächende
+rächendem
+rächenden
+rächender
+rächendes
+rächst
+rächt
+rächte
+rächten
+rächtest
+rächtet
+räkele
+räkeln
+räkelnd
+räkelnde
+räkelndem
+räkelnden
+räkelnder
+räkelndes
+räkelst
+räkelt
+räkelte
+räkelten
+räkeltest
+räkeltet
+räkle
+rändere
+rändern
+rändernd
+rändernde
+ränderndem
+rändernden
+rändernder
+ränderndes
+ränderst
+rändert
+ränderte
+ränderten
+rändertest
+rändertet
+rändre
+rät
+rätsele
+rätselhaft
+rätselhafte
+rätselhaftem
+rätselhaften
+rätselhafter
+rätselhaftes
+rätseln
+rätselnd
+rätselnde
+rätselndem
+rätselnden
+rätselnder
+rätselndes
+rätselst
+rätselt
+rätselte
+rätselten
+rätseltest
+rätseltet
+rätsle
+rätst
+räuchere
+räuchern
+räuchernd
+räuchernde
+räucherndem
+räuchernden
+räuchernder
+räucherndes
+räucherst
+räuchert
+räucherte
+räucherten
+räuchertest
+räuchertet
+räuchre
+räudig
+räudige
+räudigem
+räudigen
+räudiger
+räudiges
+räume
+räumen
+räumend
+räumende
+räumendem
+räumenden
+räumender
+räumendes
+räumlich
+räumliche
+räumlichem
+räumlichen
+räumlicher
+räumliches
+räumst
+räumt
+räumte
+räumten
+räumtest
+räumtet
+räuspere
+räuspern
+räuspernd
+räuspernde
+räusperndem
+räuspernden
+räuspernder
+räusperndes
+räusperst
+räuspert
+räusperte
+räusperten
+räuspertest
+räuspertet
+räuspre
+röchele
+röcheln
+röchelnd
+röchelnde
+röchelndem
+röchelnden
+röchelnder
+röchelndes
+röchelst
+röchelt
+röchelte
+röchelten
+röcheltest
+röcheltet
+röchle
+röhre
+röhren
+röhrend
+röhrende
+röhrendem
+röhrenden
+röhrender
+röhrendes
+röhrenförmig
+röhrenförmige
+röhrenförmigem
+röhrenförmigen
+röhrenförmiger
+röhrenförmiges
+röhrst
+röhrt
+röhrte
+röhrten
+röhrtest
+röhrtet
+römisch
+römische
+römischem
+römischen
+römischer
+römisches
+röntge
+röntgen
+röntgend
+röntgende
+röntgendem
+röntgenden
+röntgender
+röntgendes
+röntgst
+röntgt
+röntgte
+röntgten
+röntgtest
+röntgtet
+röste
+rösten
+röstend
+röstende
+röstendem
+röstenden
+röstender
+röstendes
+röstest
+röstet
+röstete
+rösteten
+röstetest
+röstetet
+röter
+rötlich
+rötliche
+rötlichem
+rötlichen
+rötlicher
+rötliches
+rücke
+rücken
+rückend
+rückende
+rückendem
+rückenden
+rückender
+rückendes
+rückgeliefert
+rückgelieferte
+rückgeliefertem
+rückgelieferten
+rückgelieferter
+rückgeliefertes
+rückgesandt
+rückgesandte
+rückgesandtem
+rückgesandten
+rückgesandter
+rückgesandtes
+rückgesetzt
+rückgesetzte
+rückgesetztem
+rückgesetzten
+rückgesetzter
+rückgesetztes
+rückgängig
+rückgängige
+rückgängigem
+rückgängigen
+rückgängiger
+rückgängiges
+rückhaltlos
+rückhaltlose
+rückhaltlosem
+rückhaltlosen
+rückhaltloser
+rückhaltloses
+rückkopplungsfähig
+rückkopplungsfähige
+rückkopplungsfähigem
+rückkopplungsfähigen
+rückkopplungsfähiger
+rückkopplungsfähiges
+rückschrittlich
+rückschrittliche
+rückschrittlichem
+rückschrittlichen
+rückschrittlicher
+rückschrittliches
+rücksetze
+rücksetzen
+rücksetzend
+rücksetzende
+rücksetzendem
+rücksetzenden
+rücksetzender
+rücksetzendes
+rücksetzest
+rücksetzt
+rücksetzte
+rücksetzten
+rücksetztest
+rücksetztet
+rücksichtslos
+rücksichtslose
+rücksichtslosem
+rücksichtslosen
+rücksichtsloser
+rücksichtsloses
+rücksichtsvoll
+rücksichtsvolle
+rücksichtsvollem
+rücksichtsvollen
+rücksichtsvoller
+rücksichtsvolles
+rückst
+rückständig
+rückständige
+rückständigem
+rückständigen
+rückständiger
+rückständiges
+rückt
+rückte
+rückten
+rücktest
+rücktet
+rückwirkend
+rückwirkende
+rückwirkendem
+rückwirkenden
+rückwirkender
+rückwirkendes
+rückwärtig
+rückwärtige
+rückwärtigem
+rückwärtigen
+rückwärtiger
+rückwärtiges
+rückwärts
+rückzahlbar
+rückzahlbare
+rückzahlbarem
+rückzahlbaren
+rückzahlbarer
+rückzahlbares
+rüge
+rügen
+rügst
+rügt
+rügte
+rügten
+rügtest
+rügtet
+rühme
+rühmen
+rühmend
+rühmende
+rühmendem
+rühmenden
+rühmender
+rühmendes
+rühmenswert
+rühmenswerte
+rühmenswertem
+rühmenswerten
+rühmenswerter
+rühmenswertes
+rühmlich
+rühmliche
+rühmlichem
+rühmlichen
+rühmlicher
+rühmliches
+rühmst
+rühmt
+rühmte
+rühmten
+rühmtest
+rühmtet
+rühre
+rühren
+rührend
+rührende
+rührendem
+rührenden
+rührender
+rührendes
+rührst
+rührt
+rührte
+rührten
+rührtest
+rührtet
+rülpse
+rülpsen
+rülpsend
+rülpsende
+rülpsendem
+rülpsenden
+rülpsender
+rülpsendes
+rülpsest
+rülpst
+rülpste
+rülpsten
+rülpstest
+rülpstet
+rüste
+rüsten
+rüstend
+rüstende
+rüstendem
+rüstenden
+rüstender
+rüstendes
+rüstest
+rüstet
+rüstete
+rüsteten
+rüstetest
+rüstetet
+rüstig
+rüstige
+rüstigem
+rüstigen
+rüstiger
+rüstigere
+rüstigerem
+rüstigeren
+rüstigerer
+rüstigeres
+rüstiges
+rüstigste
+rüstigstem
+rüstigsten
+rüstigster
+rüstigstes
+rüttele
+rüttelfest
+rüttelfeste
+rüttelfestem
+rüttelfesten
+rüttelfester
+rüttelfestes
+rütteln
+rüttelnd
+rüttelnde
+rüttelndem
+rüttelnden
+rüttelnder
+rüttelndes
+rüttelst
+rüttelt
+rüttelte
+rüttelten
+rütteltest
+rütteltet
+rüttle
+sabbere
+sabbern
+sabbernd
+sabbernde
+sabberndem
+sabbernden
+sabbernder
+sabberndes
+sabberst
+sabbert
+sabberte
+sabberten
+sabbertest
+sabbertet
+sabbre
+sabotiere
+sabotieren
+sabotierend
+sabotierende
+sabotierendem
+sabotierenden
+sabotierender
+sabotierendes
+sabotierst
+sabotiert
+sabotierte
+sabotiertem
+sabotierten
+sabotierter
+sabotiertes
+sabotiertest
+sabotiertet
+sachbedingt
+sachbedingte
+sachbedingtem
+sachbedingten
+sachbedingter
+sachbedingtes
+sachbezogen
+sachbezogene
+sachbezogenem
+sachbezogenen
+sachbezogener
+sachbezogenes
+sachdienlich
+sachdienliche
+sachdienlichem
+sachdienlichen
+sachdienlicher
+sachdienliches
+sachgemäß
+sachgemäße
+sachgemäßem
+sachgemäßen
+sachgemäßer
+sachgemäßes
+sachgerecht
+sachgerechte
+sachgerechtem
+sachgerechten
+sachgerechter
+sachgerechtes
+sachkundig
+sachkundige
+sachkundigem
+sachkundigen
+sachkundiger
+sachkundiges
+sachlich
+sachliche
+sachlichem
+sachlichen
+sachlicher
+sachliches
+sacht
+sachte
+sachtem
+sachten
+sachter
+sachtes
+sacke
+sacken
+sackst
+sackt
+sackte
+sackten
+sacktest
+sacktet
+sadistisch
+sadistische
+sadistischem
+sadistischen
+sadistischer
+sadistisches
+saftig
+saftige
+saftigem
+saftigen
+saftiger
+saftiges
+saftlos
+saftlose
+saftlosem
+saftlosen
+saftloser
+saftloses
+sage
+sagen
+sagend
+sagende
+sagendem
+sagenden
+sagender
+sagendes
+sagenhaft
+sagenhafte
+sagenhaftem
+sagenhaften
+sagenhafter
+sagenhaftere
+sagenhafterem
+sagenhafteren
+sagenhafterer
+sagenhafteres
+sagenhaftes
+sagenhafteste
+sagenhaftestem
+sagenhaftesten
+sagenhaftester
+sagenhaftestes
+sagst
+sagt
+sagte
+sagten
+sagtest
+sagtet
+sah
+sahen
+sahnig
+sahnige
+sahnigem
+sahnigen
+sahniger
+sahniges
+sahst
+saht
+saisonal
+saisonale
+saisonalem
+saisonalen
+saisonaler
+saisonales
+saisonbedingt
+saisonbedingte
+saisonbedingtem
+saisonbedingten
+saisonbedingter
+saisonbedingtes
+saisonbereinigt
+saisonbereinigte
+saisonbereinigtem
+saisonbereinigten
+saisonbereinigter
+saisonbereinigtes
+sakral
+sakrale
+sakralem
+sakralen
+sakraler
+sakrales
+salbe
+salben
+salbend
+salbende
+salbendem
+salbenden
+salbender
+salbendes
+salbst
+salbt
+salbte
+salbten
+salbtest
+salbtet
+salbungsvoll
+salbungsvolle
+salbungsvollem
+salbungsvollen
+salbungsvoller
+salbungsvollere
+salbungsvollerem
+salbungsvolleren
+salbungsvollerer
+salbungsvolleres
+salbungsvolles
+salbungsvollste
+salbungsvollstem
+salbungsvollsten
+salbungsvollster
+salbungsvollstes
+saldiere
+saldieren
+saldierend
+saldierende
+saldierendem
+saldierenden
+saldierender
+saldierendes
+saldierst
+saldiert
+saldierte
+saldiertem
+saldierten
+saldierter
+saldiertes
+saldiertest
+saldiertet
+salonfähig
+salonfähige
+salonfähigem
+salonfähigen
+salonfähiger
+salonfähiges
+salopp
+saloppe
+saloppem
+saloppen
+salopper
+saloppere
+salopperem
+salopperen
+salopperer
+salopperes
+saloppes
+saloppste
+saloppstem
+saloppsten
+saloppster
+saloppstes
+salutiere
+salutieren
+salutierend
+salutierende
+salutierendem
+salutierenden
+salutierender
+salutierendes
+salutierst
+salutiert
+salutierte
+salutierten
+salutiertest
+salutiertet
+salze
+salzen
+salzend
+salzende
+salzendem
+salzenden
+salzender
+salzendes
+salzest
+salzig
+salzige
+salzigem
+salzigen
+salziger
+salzigere
+salzigerem
+salzigeren
+salzigerer
+salzigeres
+salziges
+salzigste
+salzigstem
+salzigsten
+salzigster
+salzigstes
+salzlos
+salzlose
+salzlosem
+salzlosen
+salzloser
+salzlosere
+salzloserem
+salzloseren
+salzloserer
+salzloseres
+salzloses
+salzloseste
+salzlosestem
+salzlosesten
+salzlosester
+salzlosestes
+salzt
+salzte
+salzten
+salztest
+salztet
+sammele
+sammeln
+sammelnd
+sammelnde
+sammelndem
+sammelnden
+sammelnder
+sammelndes
+sammelst
+sammelt
+sammelte
+sammelten
+sammeltest
+sammeltet
+sammle
+samstagnachts
+samstags
+samt
+samtartig
+samtartige
+samtartigem
+samtartigen
+samtartiger
+samtartiges
+sandgekapselt
+sandgekapselte
+sandgekapseltem
+sandgekapselten
+sandgekapselter
+sandgekapseltes
+sandig
+sandige
+sandigem
+sandigen
+sandiger
+sandiges
+sandte
+sandten
+sandtest
+sandtet
+sanft
+sanfte
+sanftem
+sanften
+sanfter
+sanftere
+sanfterem
+sanfteren
+sanfterer
+sanfteres
+sanftes
+sanfteste
+sanftestem
+sanftesten
+sanftester
+sanftestes
+sanftmütig
+sanftmütige
+sanftmütigem
+sanftmütigen
+sanftmütiger
+sanftmütiges
+sang
+sangen
+sangst
+sangt
+sanguinisch
+sanguinische
+sanguinischem
+sanguinischen
+sanguinischer
+sanguinisches
+saniere
+sanieren
+sanierend
+sanierende
+sanierendem
+sanierenden
+sanierender
+sanierendes
+sanierst
+saniert
+sanierte
+saniertem
+sanierten
+sanierter
+saniertes
+saniertest
+saniertet
+sanitär
+sanitäre
+sanitärem
+sanitären
+sanitärer
+sanitäres
+sank
+sanken
+sankest
+sankst
+sankt
+sanktioniere
+sanktionieren
+sanktionierend
+sanktionierende
+sanktionierendem
+sanktionierenden
+sanktionierender
+sanktionierendes
+sanktionierst
+sanktioniert
+sanktionierte
+sanktioniertem
+sanktionierten
+sanktionierter
+sanktioniertes
+sanktioniertest
+sanktioniertet
+sann
+sannen
+sannst
+sannt
+sapperlot
+sarkastisch
+sarkastische
+sarkastischem
+sarkastischen
+sarkastischer
+sarkastisches
+satanisch
+satanische
+satanischem
+satanischen
+satanischer
+satanischere
+satanischerem
+satanischeren
+satanischerer
+satanischeres
+satanisches
+satanischste
+satanischstem
+satanischsten
+satanischster
+satanischstes
+satiniere
+satinieren
+satinierend
+satinierende
+satinierendem
+satinierenden
+satinierender
+satinierendes
+satinierst
+satiniert
+satinierte
+satiniertem
+satinierten
+satinierter
+satiniertes
+satiniertest
+satiniertet
+satirisch
+satirische
+satirischem
+satirischen
+satirischer
+satirisches
+satt
+satte
+sattele
+sattelfest
+sattelfeste
+sattelfestem
+sattelfesten
+sattelfester
+sattelfestere
+sattelfesterem
+sattelfesteren
+sattelfesterer
+sattelfesteres
+sattelfestes
+sattelfesteste
+sattelfestestem
+sattelfestesten
+sattelfestester
+sattelfestestes
+satteln
+sattelnd
+sattelnde
+sattelndem
+sattelnden
+sattelnder
+sattelndes
+sattelst
+sattelt
+sattelte
+sattelten
+satteltest
+satteltet
+sattem
+satten
+satter
+sattere
+satterem
+satteren
+satterer
+satteres
+sattes
+satteste
+sattestem
+sattesten
+sattester
+sattestes
+sattle
+sattsam
+saturiere
+saturieren
+saturierend
+saturierende
+saturierendem
+saturierenden
+saturierender
+saturierendes
+saturierst
+saturiert
+saturierte
+saturiertem
+saturierten
+saturierter
+saturiertes
+saturiertest
+saturiertet
+satzungsgemäß
+satzungsgemäße
+satzungsgemäßem
+satzungsgemäßen
+satzungsgemäßer
+satzungsgemäßes
+satzungsmäßig
+satzungsmäßige
+satzungsmäßigem
+satzungsmäßigen
+satzungsmäßiger
+satzungsmäßigere
+satzungsmäßigerem
+satzungsmäßigeren
+satzungsmäßigerer
+satzungsmäßigeres
+satzungsmäßiges
+satzungsmäßigste
+satzungsmäßigstem
+satzungsmäßigsten
+satzungsmäßigster
+satzungsmäßigstes
+sauber
+saubere
+sauberem
+sauberen
+sauberer
+sauberere
+saubererem
+saubereren
+saubererer
+saubereres
+sauberes
+sauberste
+sauberstem
+saubersten
+sauberster
+sauberstes
+saublöd
+saublöde
+saublödem
+saublöden
+saublöder
+saublödes
+saue
+sauen
+sauend
+sauende
+sauendem
+sauenden
+sauender
+sauendes
+sauer
+sauerer
+sauerste
+sauerstem
+sauersten
+sauerster
+sauerstes
+saufe
+saufen
+saufend
+saufende
+saufendem
+saufenden
+saufender
+saufendes
+sauft
+sauge
+saugen
+saugend
+saugende
+saugendem
+saugenden
+saugender
+saugendes
+saugfähig
+saugfähige
+saugfähigem
+saugfähigen
+saugfähiger
+saugfähigere
+saugfähigerem
+saugfähigeren
+saugfähigerer
+saugfähigeres
+saugfähiges
+saugfähigste
+saugfähigstem
+saugfähigsten
+saugfähigster
+saugfähigstes
+saugst
+saugt
+saugte
+saugten
+saugtest
+saugtet
+saumäßig
+saumäßige
+saumäßigem
+saumäßigen
+saumäßiger
+saumäßigere
+saumäßigerem
+saumäßigeren
+saumäßigerer
+saumäßigeres
+saumäßiges
+saumäßigste
+saumäßigstem
+saumäßigsten
+saumäßigster
+saumäßigstes
+saure
+saurem
+sauren
+saurer
+saurere
+saurerem
+saureren
+saurerer
+saureres
+saures
+sause
+sausen
+sausend
+sausende
+sausendem
+sausenden
+sausender
+sausendes
+sausest
+saust
+sauste
+sausten
+saustest
+saustet
+saut
+saute
+sauten
+sautest
+sautet
+saß
+saßen
+saßest
+saßt
+schabe
+schaben
+schabend
+schabende
+schabendem
+schabenden
+schabender
+schabendes
+schablonenhaft
+schablonenhafte
+schablonenhaftem
+schablonenhaften
+schablonenhafter
+schablonenhaftere
+schablonenhafterem
+schablonenhafteren
+schablonenhafterer
+schablonenhafteres
+schablonenhaftes
+schablonenhafteste
+schablonenhaftestem
+schablonenhaftesten
+schablonenhaftester
+schablonenhaftestes
+schabloniere
+schablonieren
+schablonierend
+schablonierende
+schablonierendem
+schablonierenden
+schablonierender
+schablonierendes
+schablonierst
+schabloniert
+schablonierte
+schabloniertem
+schablonierten
+schablonierter
+schabloniertes
+schabloniertest
+schabloniertet
+schabst
+schabt
+schabte
+schabten
+schabtest
+schabtet
+schachmatt
+schachmatte
+schachmattem
+schachmatten
+schachmatter
+schachmattes
+schade
+schaden
+schadend
+schadende
+schadendem
+schadenden
+schadender
+schadendes
+schadenfroh
+schadenfrohe
+schadenfrohem
+schadenfrohen
+schadenfroher
+schadenfrohere
+schadenfroherem
+schadenfroheren
+schadenfroherer
+schadenfroheres
+schadenfrohes
+schadenfrohste
+schadenfrohstem
+schadenfrohsten
+schadenfrohster
+schadenfrohstes
+schadest
+schadet
+schadete
+schadeten
+schadetest
+schadetet
+schadhaft
+schadhafte
+schadhaftem
+schadhaften
+schadhafter
+schadhaftere
+schadhafterem
+schadhafteren
+schadhafterer
+schadhafteres
+schadhaftes
+schadhafteste
+schadhaftestem
+schadhaftesten
+schadhaftester
+schadhaftestes
+schadlos
+schadlose
+schadlosem
+schadlosen
+schadloser
+schadlosere
+schadloserem
+schadloseren
+schadloserer
+schadloseres
+schadloses
+schadloseste
+schadlosestem
+schadlosesten
+schadlosester
+schadlosestes
+schaff
+schaffe
+schaffen
+schaffend
+schaffende
+schaffendem
+schaffenden
+schaffender
+schaffendes
+schaffst
+schafft
+schaffte
+schafften
+schafftest
+schafftet
+schal
+schale
+schalem
+schalen
+schaler
+schalere
+schalerem
+schaleren
+schalerer
+schaleres
+schales
+schalkhaft
+schalkhafte
+schalkhaftem
+schalkhaften
+schalkhafter
+schalkhaftere
+schalkhafterem
+schalkhafteren
+schalkhafterer
+schalkhafteres
+schalkhaftes
+schalkhafteste
+schalkhaftestem
+schalkhaftesten
+schalkhaftester
+schalkhaftestes
+schalldicht
+schalldichte
+schalldichtem
+schalldichten
+schalldichter
+schalldichtes
+schalle
+schallen
+schallend
+schallende
+schallendem
+schallenden
+schallender
+schallendes
+schalloptisch
+schalloptische
+schalloptischem
+schalloptischen
+schalloptischer
+schalloptisches
+schallst
+schallt
+schallte
+schalltechnisch
+schalltechnische
+schalltechnischem
+schalltechnischen
+schalltechnischer
+schalltechnisches
+schallten
+schalltest
+schalltet
+schalste
+schalstem
+schalsten
+schalster
+schalstes
+schalt
+schaltbar
+schaltbare
+schaltbarem
+schaltbaren
+schaltbarer
+schaltbares
+schalte
+schalten
+schaltend
+schaltende
+schaltendem
+schaltenden
+schaltender
+schaltendes
+schaltest
+schaltet
+schaltete
+schalteten
+schaltetest
+schaltetet
+schaltst
+schamhaft
+schamhafte
+schamhaftem
+schamhaften
+schamhafter
+schamhaftere
+schamhafterem
+schamhafteren
+schamhafterer
+schamhafteres
+schamhaftes
+schamhafteste
+schamhaftestem
+schamhaftesten
+schamhaftester
+schamhaftestes
+schamlos
+schamlose
+schamlosem
+schamlosen
+schamloser
+schamlosere
+schamloserem
+schamloseren
+schamloserer
+schamloseres
+schamloses
+schamloseste
+schamlosestem
+schamlosesten
+schamlosester
+schamlosestes
+schamrot
+schamrote
+schamrotem
+schamroten
+schamroter
+schamrotes
+schandbar
+schandbare
+schandbarem
+schandbaren
+schandbarer
+schandbares
+schare
+scharen
+scharend
+scharende
+scharendem
+scharenden
+scharender
+scharendes
+scharf
+scharfe
+scharfem
+scharfen
+scharfer
+scharfes
+scharfgemacht
+scharfgemachte
+scharfgemachtem
+scharfgemachten
+scharfgemachter
+scharfgemachtes
+scharfkantig
+scharfkantige
+scharfkantigem
+scharfkantigen
+scharfkantiger
+scharfkantiges
+scharfmache
+scharfmachen
+scharfmachend
+scharfmachende
+scharfmachendem
+scharfmachenden
+scharfmachender
+scharfmachendes
+scharfmachst
+scharfmacht
+scharfmachte
+scharfmachten
+scharfmachtest
+scharfmachtet
+scharfrandig
+scharfrandige
+scharfrandigem
+scharfrandigen
+scharfrandiger
+scharfrandiges
+scharfsichtig
+scharfsichtige
+scharfsichtigem
+scharfsichtigen
+scharfsichtiger
+scharfsichtigere
+scharfsichtigerem
+scharfsichtigeren
+scharfsichtigerer
+scharfsichtigeres
+scharfsichtiges
+scharfsichtigste
+scharfsichtigstem
+scharfsichtigsten
+scharfsichtigster
+scharfsichtigstes
+scharfsinnig
+scharfsinnige
+scharfsinnigem
+scharfsinnigen
+scharfsinniger
+scharfsinnigere
+scharfsinnigerem
+scharfsinnigeren
+scharfsinnigerer
+scharfsinnigeres
+scharfsinniges
+scharfsinnigste
+scharfsinnigstem
+scharfsinnigsten
+scharfsinnigster
+scharfsinnigstes
+scharmant
+scharmante
+scharmantem
+scharmanten
+scharmanter
+scharmantere
+scharmanterem
+scharmanteren
+scharmanterer
+scharmanteres
+scharmantes
+scharmanteste
+scharmantestem
+scharmantesten
+scharmantester
+scharmantestes
+scharre
+scharren
+scharrend
+scharrende
+scharrendem
+scharrenden
+scharrender
+scharrendes
+scharrst
+scharrt
+scharrte
+scharrten
+scharrtest
+scharrtet
+scharst
+schart
+scharte
+scharten
+schartest
+schartet
+schasse
+schassen
+schassend
+schassende
+schassendem
+schassenden
+schassender
+schassendes
+schassest
+schasst
+schasste
+schassten
+schasstest
+schasstet
+schattenhaft
+schattenhafte
+schattenhaftem
+schattenhaften
+schattenhafter
+schattenhaftere
+schattenhafterem
+schattenhafteren
+schattenhafterer
+schattenhafteres
+schattenhaftes
+schattenhafteste
+schattenhaftestem
+schattenhaftesten
+schattenhaftester
+schattenhaftestes
+schattiere
+schattieren
+schattierend
+schattierende
+schattierendem
+schattierenden
+schattierender
+schattierendes
+schattierst
+schattiert
+schattierte
+schattiertem
+schattierten
+schattierter
+schattiertes
+schattiertest
+schattiertet
+schattig
+schattige
+schattigem
+schattigen
+schattiger
+schattigere
+schattigerem
+schattigeren
+schattigerer
+schattigeres
+schattiges
+schattigste
+schattigstem
+schattigsten
+schattigster
+schattigstes
+schaudere
+schauderhaft
+schauderhafte
+schauderhaftem
+schauderhaften
+schauderhafter
+schauderhaftere
+schauderhafterem
+schauderhafteren
+schauderhafterer
+schauderhafteres
+schauderhaftes
+schauderhafteste
+schauderhaftestem
+schauderhaftesten
+schauderhaftester
+schauderhaftestes
+schaudern
+schaudernd
+schaudernde
+schauderndem
+schaudernden
+schaudernder
+schauderndes
+schauderst
+schaudert
+schauderte
+schauderten
+schaudertest
+schaudertet
+schaudre
+schaue
+schauen
+schauend
+schauende
+schauendem
+schauenden
+schauender
+schauendes
+schauerartig
+schauerartige
+schauerartigem
+schauerartigen
+schauerartiger
+schauerartiges
+schauere
+schauerlich
+schauerliche
+schauerlichem
+schauerlichen
+schauerlicher
+schauerlichere
+schauerlicherem
+schauerlicheren
+schauerlicherer
+schauerlicheres
+schauerliches
+schauerlichste
+schauerlichstem
+schauerlichsten
+schauerlichster
+schauerlichstes
+schauern
+schauernd
+schauernde
+schauerndem
+schauernden
+schauernder
+schauerndes
+schauerst
+schauert
+schauerte
+schauerten
+schauertest
+schauertet
+schaufele
+schaufeln
+schaufelnd
+schaufelnde
+schaufelndem
+schaufelnden
+schaufelnder
+schaufelndes
+schaufelst
+schaufelt
+schaufelte
+schaufelten
+schaufeltest
+schaufeltet
+schaufle
+schaukele
+schaukeln
+schaukelnd
+schaukelnde
+schaukelndem
+schaukelnden
+schaukelnder
+schaukelndes
+schaukelst
+schaukelt
+schaukelte
+schaukelten
+schaukeltest
+schaukeltet
+schaukle
+schaulustig
+schaulustige
+schaulustigem
+schaulustigen
+schaulustiger
+schaulustigere
+schaulustigerem
+schaulustigeren
+schaulustigerer
+schaulustigeres
+schaulustiges
+schaulustigste
+schaulustigstem
+schaulustigsten
+schaulustigster
+schaulustigstes
+schaumig
+schaumige
+schaumigem
+schaumigen
+schaumiger
+schaumigere
+schaumigerem
+schaumigeren
+schaumigerer
+schaumigeres
+schaumiges
+schaumigste
+schaumigstem
+schaumigsten
+schaumigster
+schaumigstes
+schaure
+schaurig
+schaurige
+schaurigem
+schaurigen
+schauriger
+schaurigere
+schaurigerem
+schaurigeren
+schaurigerer
+schaurigeres
+schauriges
+schaurigste
+schaurigstem
+schaurigsten
+schaurigster
+schaurigstes
+schaust
+schaut
+schaute
+schauten
+schautest
+schautet
+scheckig
+scheckige
+scheckigem
+scheckigen
+scheckiger
+scheckiges
+scheel
+scheele
+scheelem
+scheelen
+scheeler
+scheeles
+scheffele
+scheffeln
+scheffelnd
+scheffelnde
+scheffelndem
+scheffelnden
+scheffelnder
+scheffelndes
+scheffelst
+scheffelt
+scheffelte
+scheffelten
+scheffeltest
+scheffeltet
+scheffle
+scheib
+scheibe
+scheiben
+scheibend
+scheibende
+scheibendem
+scheibenden
+scheibender
+scheibendes
+scheibst
+scheibt
+scheide
+scheiden
+scheidend
+scheidende
+scheidendem
+scheidenden
+scheidender
+scheidendes
+scheidest
+scheidet
+scheinbar
+scheinbare
+scheinbarem
+scheinbaren
+scheinbarer
+scheinbarere
+scheinbarerem
+scheinbareren
+scheinbarerer
+scheinbareres
+scheinbares
+scheinbarste
+scheinbarstem
+scheinbarsten
+scheinbarster
+scheinbarstes
+scheine
+scheinen
+scheinend
+scheinende
+scheinendem
+scheinenden
+scheinender
+scheinendes
+scheinheilig
+scheinheilige
+scheinheiligem
+scheinheiligen
+scheinheiliger
+scheinheiligere
+scheinheiligerem
+scheinheiligeren
+scheinheiligerer
+scheinheiligeres
+scheinheiliges
+scheinheiligste
+scheinheiligstem
+scheinheiligsten
+scheinheiligster
+scheinheiligstes
+scheinst
+scheint
+scheinte
+scheinten
+scheintest
+scheintet
+scheintot
+scheintote
+scheintotem
+scheintoten
+scheintoter
+scheintotes
+scheitele
+scheiteln
+scheitelnd
+scheitelnde
+scheitelndem
+scheitelnden
+scheitelnder
+scheitelndes
+scheitelst
+scheitelt
+scheitelte
+scheitelten
+scheiteltest
+scheiteltet
+scheitere
+scheitern
+scheiternd
+scheiternde
+scheiterndem
+scheiternden
+scheiternder
+scheiterndes
+scheiterst
+scheitert
+scheiterte
+scheiterten
+scheitertest
+scheitertet
+scheitle
+scheitre
+scheiße
+scheißen
+scheißend
+scheißende
+scheißendem
+scheißenden
+scheißender
+scheißendes
+scheißest
+scheißt
+schelle
+schellen
+schellend
+schellende
+schellendem
+schellenden
+schellender
+schellendes
+schellst
+schellt
+schellte
+schellten
+schelltest
+schelltet
+schelmig
+schelmige
+schelmigem
+schelmigen
+schelmiger
+schelmiges
+schelmisch
+schelmische
+schelmischem
+schelmischen
+schelmischer
+schelmischere
+schelmischerem
+schelmischeren
+schelmischerer
+schelmischeres
+schelmisches
+schelmischste
+schelmischstem
+schelmischsten
+schelmischster
+schelmischstes
+schelte
+schelten
+scheltend
+scheltende
+scheltendem
+scheltenden
+scheltender
+scheltendes
+scheltet
+schematisch
+schematische
+schematischem
+schematischen
+schematischer
+schematisches
+schematisiere
+schematisieren
+schematisierend
+schematisierende
+schematisierendem
+schematisierenden
+schematisierender
+schematisierendes
+schematisierst
+schematisiert
+schematisierte
+schematisiertem
+schematisierten
+schematisierter
+schematisiertes
+schematisiertest
+schematisiertet
+schemenhaft
+schemenhafte
+schemenhaftem
+schemenhaften
+schemenhafter
+schemenhaftes
+schenke
+schenken
+schenkend
+schenkende
+schenkendem
+schenkenden
+schenkender
+schenkendes
+schenkst
+schenkt
+schenkte
+schenkten
+schenktest
+schenktet
+scheppere
+scheppern
+scheppernd
+scheppernde
+schepperndem
+scheppernden
+scheppernder
+schepperndes
+schepperst
+scheppert
+schepperte
+schepperten
+scheppertest
+scheppertet
+scheppre
+schere
+scheren
+scherend
+scherende
+scherendem
+scherenden
+scherender
+scherendes
+scherst
+schert
+scherte
+scherten
+schertest
+schertet
+scherze
+scherzen
+scherzend
+scherzende
+scherzendem
+scherzenden
+scherzender
+scherzendes
+scherzest
+scherzhaft
+scherzhafte
+scherzhaftem
+scherzhaften
+scherzhafter
+scherzhaftes
+scherzt
+scherzte
+scherzten
+scherztest
+scherztet
+scheu
+scheuche
+scheuchen
+scheuchend
+scheuchende
+scheuchendem
+scheuchenden
+scheuchender
+scheuchendes
+scheuchst
+scheucht
+scheuchte
+scheuchten
+scheuchtest
+scheuchtet
+scheue
+scheuem
+scheuen
+scheuend
+scheuende
+scheuendem
+scheuenden
+scheuender
+scheuendes
+scheuer
+scheuere
+scheuerem
+scheueren
+scheuerer
+scheueres
+scheuern
+scheuernd
+scheuernde
+scheuerndem
+scheuernden
+scheuernder
+scheuerndes
+scheuerst
+scheuert
+scheuerte
+scheuerten
+scheuertest
+scheuertet
+scheues
+scheueste
+scheuestem
+scheuesten
+scheuester
+scheuestes
+scheure
+scheust
+scheuste
+scheustem
+scheusten
+scheuster
+scheustes
+scheut
+scheute
+scheuten
+scheutest
+scheutet
+scheußlich
+scheußliche
+scheußlichem
+scheußlichen
+scheußlicher
+scheußlichere
+scheußlicherem
+scheußlicheren
+scheußlicherer
+scheußlicheres
+scheußliches
+scheußlichste
+scheußlichstem
+scheußlichsten
+scheußlichster
+scheußlichstes
+schichte
+schichten
+schichtend
+schichtende
+schichtendem
+schichtenden
+schichtender
+schichtendes
+schichtest
+schichtet
+schichtete
+schichteten
+schichtetest
+schichtetet
+schicke
+schicken
+schickend
+schickende
+schickendem
+schickenden
+schickender
+schickendes
+schicklich
+schickliche
+schicklichem
+schicklichen
+schicklicher
+schickliches
+schicksalhaft
+schicksalhafte
+schicksalhaftem
+schicksalhaften
+schicksalhafter
+schicksalhaftes
+schickst
+schickt
+schickte
+schickten
+schicktest
+schicktet
+schiebe
+schieben
+schiebend
+schiebende
+schiebendem
+schiebenden
+schiebender
+schiebendes
+schiebst
+schiebt
+schiech
+schieche
+schiechem
+schiechen
+schiecher
+schieches
+schied
+schieden
+schiedest
+schiedet
+schiedst
+schief
+schiefe
+schiefem
+schiefen
+schiefer
+schiefere
+schieferem
+schieferen
+schieferer
+schieferes
+schieferig
+schieferige
+schieferigem
+schieferigen
+schieferiger
+schieferiges
+schiefes
+schiefgelacht
+schiefgelachte
+schiefgelachtem
+schiefgelachten
+schiefgelachter
+schiefgelachtes
+schiefqqlache
+schiefqqlachen
+schiefqqlachend
+schiefqqlachende
+schiefqqlachendem
+schiefqqlachenden
+schiefqqlachender
+schiefqqlachendes
+schiefqqlachst
+schiefqqlacht
+schiefqqlachte
+schiefqqlachten
+schiefqqlachtest
+schiefqqlachtet
+schiefrig
+schiefrige
+schiefrigem
+schiefrigen
+schiefriger
+schiefriges
+schiefste
+schiefstem
+schiefsten
+schiefster
+schiefstes
+schiefwinkelig
+schiefwinkelige
+schiefwinkeligem
+schiefwinkeligen
+schiefwinkeliger
+schiefwinkeliges
+schiefwinklig
+schiefwinklige
+schiefwinkligem
+schiefwinkligen
+schiefwinkliger
+schiefwinkliges
+schiele
+schielen
+schielend
+schielende
+schielendem
+schielenden
+schielender
+schielendes
+schielst
+schielt
+schielte
+schielten
+schieltest
+schieltet
+schien
+schiene
+schienen
+schienend
+schienende
+schienendem
+schienenden
+schienender
+schienendes
+schienst
+schient
+schiente
+schienten
+schientest
+schientet
+schier
+schiere
+schierem
+schieren
+schierer
+schieres
+schieße
+schießen
+schießend
+schießende
+schießendem
+schießenden
+schießender
+schießendes
+schießest
+schießt
+schiffbar
+schiffbare
+schiffbarem
+schiffbaren
+schiffbarer
+schiffbares
+schiffbrüchig
+schiffbrüchige
+schiffbrüchigem
+schiffbrüchigen
+schiffbrüchiger
+schiffbrüchiges
+schiffe
+schiffen
+schiffend
+schiffende
+schiffendem
+schiffenden
+schiffender
+schiffendes
+schiffst
+schifft
+schiffte
+schifften
+schifftest
+schifftet
+schikaniere
+schikanieren
+schikanierend
+schikanierende
+schikanierendem
+schikanierenden
+schikanierender
+schikanierendes
+schikanierst
+schikaniert
+schikanierte
+schikaniertem
+schikanierten
+schikanierter
+schikaniertes
+schikaniertest
+schikaniertet
+schildere
+schildern
+schildernd
+schildernde
+schilderndem
+schildernden
+schildernder
+schilderndes
+schilderst
+schildert
+schilderte
+schilderten
+schildertest
+schildertet
+schildre
+schilfig
+schilfige
+schilfigem
+schilfigen
+schilfiger
+schilfiges
+schillere
+schillern
+schillernd
+schillernde
+schillerndem
+schillernden
+schillernder
+schillerndes
+schillerst
+schillert
+schillerte
+schillerten
+schillertest
+schillertet
+schillre
+schilt
+schiltst
+schimmele
+schimmelig
+schimmelige
+schimmeligem
+schimmeligen
+schimmeliger
+schimmeliges
+schimmeln
+schimmelnd
+schimmelnde
+schimmelndem
+schimmelnden
+schimmelnder
+schimmelndes
+schimmelst
+schimmelt
+schimmelte
+schimmelten
+schimmeltest
+schimmeltet
+schimmere
+schimmern
+schimmernd
+schimmernde
+schimmerndem
+schimmernden
+schimmernder
+schimmerndes
+schimmerst
+schimmert
+schimmerte
+schimmerten
+schimmertest
+schimmertet
+schimmle
+schimmlig
+schimmlige
+schimmligem
+schimmligen
+schimmliger
+schimmliges
+schimmre
+schimpfe
+schimpfen
+schimpfend
+schimpfende
+schimpfendem
+schimpfenden
+schimpfender
+schimpfendes
+schimpfqqlich
+schimpfqqliche
+schimpfqqlichem
+schimpfqqlichen
+schimpfqqlicher
+schimpfqqliches
+schimpfst
+schimpft
+schimpfte
+schimpften
+schimpftest
+schimpftet
+schinde
+schinden
+schindend
+schindende
+schindendem
+schindenden
+schindender
+schindendes
+schindest
+schindet
+schindete
+schindeten
+schindetest
+schindetet
+schirme
+schirmen
+schirmend
+schirmende
+schirmendem
+schirmenden
+schirmender
+schirmendes
+schirmst
+schirmt
+schirmte
+schirmten
+schirmtest
+schirmtet
+schiss
+schissen
+schissest
+schisst
+schizophren
+schizophrene
+schizophrenem
+schizophrenen
+schizophrener
+schizophrenes
+schlachte
+schlachten
+schlachtend
+schlachtende
+schlachtendem
+schlachtenden
+schlachtender
+schlachtendes
+schlachtest
+schlachtet
+schlachtete
+schlachteten
+schlachtetest
+schlachtetet
+schlacke
+schlacken
+schlackend
+schlackende
+schlackendem
+schlackenden
+schlackender
+schlackendes
+schlackere
+schlackern
+schlackernd
+schlackernde
+schlackerndem
+schlackernden
+schlackernder
+schlackerndes
+schlackerst
+schlackert
+schlackerte
+schlackerten
+schlackertest
+schlackertet
+schlackig
+schlackige
+schlackigem
+schlackigen
+schlackiger
+schlackigere
+schlackigerem
+schlackigeren
+schlackigerer
+schlackigeres
+schlackiges
+schlackigste
+schlackigstem
+schlackigsten
+schlackigster
+schlackigstes
+schlackre
+schlackst
+schlackt
+schlackte
+schlackten
+schlacktest
+schlacktet
+schlafe
+schlafen
+schlafend
+schlafende
+schlafendem
+schlafenden
+schlafender
+schlafendes
+schlaff
+schlaffe
+schlaffem
+schlaffen
+schlaffer
+schlaffere
+schlafferem
+schlafferen
+schlafferer
+schlafferes
+schlaffes
+schlaffste
+schlaffstem
+schlaffsten
+schlaffster
+schlaffstes
+schlafqqlos
+schlafqqlose
+schlafqqlosem
+schlafqqlosen
+schlafqqloser
+schlafqqloses
+schlaft
+schlaftrunken
+schlaftrunkene
+schlaftrunkenem
+schlaftrunkenen
+schlaftrunkener
+schlaftrunkenes
+schlafwandele
+schlafwandeln
+schlafwandelnd
+schlafwandelnde
+schlafwandelndem
+schlafwandelnden
+schlafwandelnder
+schlafwandelndes
+schlafwandelst
+schlafwandelt
+schlafwandelte
+schlafwandelten
+schlafwandeltest
+schlafwandeltet
+schlafwandle
+schlafwandlerisch
+schlafwandlerische
+schlafwandlerischem
+schlafwandlerischen
+schlafwandlerischer
+schlafwandlerisches
+schlagartig
+schlagartige
+schlagartigem
+schlagartigen
+schlagartiger
+schlagartigere
+schlagartigerem
+schlagartigeren
+schlagartigerer
+schlagartigeres
+schlagartiges
+schlagartigste
+schlagartigstem
+schlagartigsten
+schlagartigster
+schlagartigstes
+schlage
+schlagen
+schlagend
+schlagende
+schlagendem
+schlagenden
+schlagender
+schlagendes
+schlagfertig
+schlagfertige
+schlagfertigem
+schlagfertigen
+schlagfertiger
+schlagfertiges
+schlagfest
+schlagfeste
+schlagfestem
+schlagfesten
+schlagfester
+schlagfestes
+schlagkräftig
+schlagkräftige
+schlagkräftigem
+schlagkräftigen
+schlagkräftiger
+schlagkräftigere
+schlagkräftigerem
+schlagkräftigeren
+schlagkräftigerer
+schlagkräftigeres
+schlagkräftiges
+schlagkräftigste
+schlagkräftigstem
+schlagkräftigsten
+schlagkräftigster
+schlagkräftigstes
+schlagstark
+schlagstarke
+schlagstarkem
+schlagstarken
+schlagstarker
+schlagstarkes
+schlagt
+schlagwettergefährdet
+schlagwettergefährdete
+schlagwettergefährdetem
+schlagwettergefährdeten
+schlagwettergefährdeter
+schlagwettergefährdetes
+schlagwortartig
+schlagwortartige
+schlagwortartigem
+schlagwortartigen
+schlagwortartiger
+schlagwortartiges
+schlaksig
+schlaksige
+schlaksigem
+schlaksigen
+schlaksiger
+schlaksigere
+schlaksigerem
+schlaksigeren
+schlaksigerer
+schlaksigeres
+schlaksiges
+schlaksigste
+schlaksigstem
+schlaksigsten
+schlaksigster
+schlaksigstes
+schlammig
+schlammige
+schlammigem
+schlammigen
+schlammiger
+schlammiges
+schlampig
+schlampige
+schlampigem
+schlampigen
+schlampiger
+schlampiges
+schlang
+schlangen
+schlangst
+schlangt
+schlank
+schlanke
+schlankem
+schlanken
+schlanker
+schlankere
+schlankerem
+schlankeren
+schlankerer
+schlankeres
+schlankes
+schlankeste
+schlankestem
+schlankesten
+schlankester
+schlankestes
+schlapp
+schlappe
+schlappem
+schlappen
+schlapper
+schlappere
+schlapperem
+schlapperen
+schlapperer
+schlapperes
+schlappes
+schlappgemacht
+schlappgemachte
+schlappgemachtem
+schlappgemachten
+schlappgemachter
+schlappgemachtes
+schlappmache
+schlappmachen
+schlappmachend
+schlappmachende
+schlappmachendem
+schlappmachenden
+schlappmachender
+schlappmachendes
+schlappmachst
+schlappmacht
+schlappmachte
+schlappmachten
+schlappmachtest
+schlappmachtet
+schlappste
+schlappstem
+schlappsten
+schlappster
+schlappstes
+schlau
+schlaue
+schlauem
+schlauen
+schlauer
+schlauere
+schlauerem
+schlaueren
+schlauerer
+schlaueres
+schlaues
+schlaueste
+schlauestem
+schlauesten
+schlauester
+schlauestes
+schlauste
+schlaustem
+schlausten
+schlauster
+schlaustes
+schlecht
+schlechte
+schlechtem
+schlechten
+schlechter
+schlechterdings
+schlechtere
+schlechterem
+schlechteren
+schlechterer
+schlechteres
+schlechtes
+schlechteste
+schlechtestem
+schlechtesten
+schlechtester
+schlechtestes
+schlechthin
+schlecke
+schlecken
+schleckend
+schleckende
+schleckendem
+schleckenden
+schleckender
+schleckendes
+schleckst
+schleckt
+schleckte
+schleckten
+schlecktest
+schlecktet
+schleiche
+schleichen
+schleichend
+schleichende
+schleichendem
+schleichenden
+schleichender
+schleichendes
+schleichst
+schleicht
+schleierhaft
+schleierhafte
+schleierhaftem
+schleierhaften
+schleierhafter
+schleierhaftere
+schleierhafterem
+schleierhafteren
+schleierhafterer
+schleierhafteres
+schleierhaftes
+schleierhafteste
+schleierhaftestem
+schleierhaftesten
+schleierhaftester
+schleierhaftestes
+schleife
+schleifen
+schleifend
+schleifende
+schleifendem
+schleifenden
+schleifender
+schleifendes
+schleifst
+schleift
+schleifte
+schleiften
+schleiftest
+schleiftet
+schleimig
+schleimige
+schleimigem
+schleimigen
+schleimiger
+schleimiges
+schlemme
+schlemmen
+schlemmend
+schlemmende
+schlemmendem
+schlemmenden
+schlemmender
+schlemmendes
+schlemmern
+schlemmst
+schlemmt
+schlemmte
+schlemmten
+schlemmtest
+schlemmtet
+schlendere
+schlendern
+schlendernd
+schlendernde
+schlenderndem
+schlendernden
+schlendernder
+schlenderndes
+schlenderst
+schlendert
+schlenderte
+schlenderten
+schlendertest
+schlendertet
+schlendre
+schlenkere
+schlenkern
+schlenkernd
+schlenkernde
+schlenkerndem
+schlenkernden
+schlenkernder
+schlenkerndes
+schlenkerst
+schlenkert
+schlenkerte
+schlenkerten
+schlenkertest
+schlenkertet
+schlenkre
+schleppe
+schleppen
+schleppend
+schleppende
+schleppendem
+schleppenden
+schleppender
+schleppendes
+schleppst
+schleppt
+schleppte
+schleppten
+schlepptest
+schlepptet
+schlesisch
+schlesische
+schlesischem
+schlesischen
+schlesischer
+schlesisches
+schleudere
+schleudern
+schleuderst
+schleudert
+schleuderte
+schleuderten
+schleudertest
+schleudertet
+schleudre
+schleunig
+schleunige
+schleunigem
+schleunigen
+schleuniger
+schleunigere
+schleunigerem
+schleunigeren
+schleunigerer
+schleunigeres
+schleuniges
+schleunigste
+schleunigstem
+schleunigsten
+schleunigster
+schleunigstes
+schleuse
+schleusen
+schleusest
+schleust
+schleuste
+schleusten
+schleustest
+schleustet
+schlich
+schlichen
+schlichest
+schlichst
+schlicht
+schlichte
+schlichtem
+schlichten
+schlichtend
+schlichtende
+schlichtendem
+schlichtenden
+schlichtender
+schlichtendes
+schlichter
+schlichtere
+schlichterem
+schlichteren
+schlichterer
+schlichteres
+schlichtes
+schlichtest
+schlichteste
+schlichtestem
+schlichtesten
+schlichtester
+schlichtestes
+schlichtet
+schlichtete
+schlichteten
+schlichtetest
+schlichtetet
+schlichtweg
+schlief
+schliefe
+schliefen
+schliefest
+schliefst
+schlieft
+schlierenartig
+schlierenartige
+schlierenartigem
+schlierenartigen
+schlierenartiger
+schlierenartiges
+schließbar
+schließbare
+schließbarem
+schließbaren
+schließbarer
+schließbares
+schließe
+schließen
+schließend
+schließende
+schließendem
+schließenden
+schließender
+schließendes
+schließest
+schließlich
+schließt
+schliff
+schliffen
+schliffest
+schliffst
+schlifft
+schlimm
+schlimme
+schlimmem
+schlimmen
+schlimmer
+schlimmere
+schlimmerem
+schlimmeren
+schlimmerer
+schlimmeres
+schlimmes
+schlimmste
+schlimmstem
+schlimmsten
+schlimmstenfalls
+schlimmster
+schlimmstes
+schlinge
+schlingen
+schlingend
+schlingende
+schlingendem
+schlingenden
+schlingender
+schlingendes
+schlingst
+schlingt
+schlittere
+schlittern
+schlitternd
+schlitternde
+schlitterndem
+schlitternden
+schlitternder
+schlitterndes
+schlitterst
+schlittert
+schlitterte
+schlitterten
+schlittertest
+schlittertet
+schlittre
+schlitzohrig
+schlitzohrige
+schlitzohrigem
+schlitzohrigen
+schlitzohriger
+schlitzohriges
+schlitzäugig
+schlitzäugige
+schlitzäugigem
+schlitzäugigen
+schlitzäugiger
+schlitzäugiges
+schlohweiß
+schlohweiße
+schlohweißem
+schlohweißen
+schlohweißer
+schlohweißes
+schloss
+schlossen
+schlossest
+schlosst
+schlottere
+schlotterig
+schlotterige
+schlotterigem
+schlotterigen
+schlotteriger
+schlotteriges
+schlottern
+schlotternd
+schlotternde
+schlotterndem
+schlotternden
+schlotternder
+schlotterndes
+schlotterst
+schlottert
+schlotterte
+schlotterten
+schlottertest
+schlottertet
+schlottre
+schlottrig
+schlottrige
+schlottrigem
+schlottrigen
+schlottriger
+schlottriges
+schluchze
+schluchzen
+schluchzend
+schluchzende
+schluchzendem
+schluchzenden
+schluchzender
+schluchzendes
+schluchzest
+schluchzt
+schluchzte
+schluchzten
+schluchztest
+schluchztet
+schlucke
+schlucken
+schluckend
+schluckende
+schluckendem
+schluckenden
+schluckender
+schluckendes
+schluckst
+schluckt
+schluckte
+schluckten
+schlucktest
+schlucktet
+schluderig
+schluderige
+schluderigem
+schluderigen
+schluderiger
+schluderiges
+schludrig
+schludrige
+schludrigem
+schludrigen
+schludriger
+schludriges
+schlug
+schlugen
+schlugst
+schlugt
+schlummere
+schlummern
+schlummernd
+schlummernde
+schlummerndem
+schlummernden
+schlummernder
+schlummerndes
+schlummerst
+schlummert
+schlummerte
+schlummerten
+schlummertest
+schlummertet
+schlummre
+schlurfe
+schlurfen
+schlurfend
+schlurfende
+schlurfendem
+schlurfenden
+schlurfender
+schlurfendes
+schlurfst
+schlurft
+schlurfte
+schlurften
+schlurftest
+schlurftet
+schlussendlich
+schlussendliche
+schlussendlichem
+schlussendlichen
+schlussendlicher
+schlussendliches
+schlussfolgere
+schlussfolgern
+schlussfolgernd
+schlussfolgernde
+schlussfolgerndem
+schlussfolgernden
+schlussfolgernder
+schlussfolgerndes
+schlussfolgerst
+schlussfolgert
+schlussfolgerte
+schlussfolgerten
+schlussfolgertest
+schlussfolgertet
+schlussfolgre
+schläfrig
+schläfrige
+schläfrigem
+schläfrigen
+schläfriger
+schläfrigere
+schläfrigerem
+schläfrigeren
+schläfrigerer
+schläfrigeres
+schläfriges
+schläfrigste
+schläfrigstem
+schläfrigsten
+schläfrigster
+schläfrigstes
+schläfst
+schläft
+schlägst
+schlägt
+schlängele
+schlängeln
+schlängelnd
+schlängelnde
+schlängelndem
+schlängelnden
+schlängelnder
+schlängelndes
+schlängelst
+schlängelt
+schlängelte
+schlängelten
+schlängeltest
+schlängeltet
+schlängle
+schlüpfe
+schlüpfen
+schlüpfend
+schlüpfende
+schlüpfendem
+schlüpfenden
+schlüpfender
+schlüpfendes
+schlüpfrig
+schlüpfrige
+schlüpfrigem
+schlüpfrigen
+schlüpfriger
+schlüpfriges
+schlüpfst
+schlüpft
+schlüpfte
+schlüpften
+schlüpftest
+schlüpftet
+schlürfe
+schlürfen
+schlürfend
+schlürfende
+schlürfendem
+schlürfenden
+schlürfender
+schlürfendes
+schlürfst
+schlürft
+schlürfte
+schlürften
+schlürftest
+schlürftet
+schlüsselfertig
+schlüsselfertige
+schlüsselfertigem
+schlüsselfertigen
+schlüsselfertiger
+schlüsselfertiges
+schlüssig
+schlüssige
+schlüssigem
+schlüssigen
+schlüssiger
+schlüssigere
+schlüssigerem
+schlüssigeren
+schlüssigerer
+schlüssigeres
+schlüssiges
+schlüssigste
+schlüssigstem
+schlüssigsten
+schlüssigster
+schlüssigstes
+schmachte
+schmachten
+schmachtend
+schmachtende
+schmachtendem
+schmachtenden
+schmachtender
+schmachtendes
+schmachtest
+schmachtet
+schmachtete
+schmachteten
+schmachtetest
+schmachtetet
+schmachvoll
+schmachvolle
+schmachvollem
+schmachvollen
+schmachvoller
+schmachvollere
+schmachvollerem
+schmachvolleren
+schmachvollerer
+schmachvolleres
+schmachvolles
+schmachvollste
+schmachvollstem
+schmachvollsten
+schmachvollster
+schmachvollstes
+schmackhaft
+schmackhafte
+schmackhaftem
+schmackhaften
+schmackhafter
+schmackhaftere
+schmackhafterem
+schmackhafteren
+schmackhafterer
+schmackhafteres
+schmackhaftes
+schmackhafteste
+schmackhaftestem
+schmackhaftesten
+schmackhaftester
+schmackhaftestes
+schmal
+schmale
+schmalem
+schmalen
+schmaler
+schmales
+schmalspurig
+schmalspurige
+schmalspurigem
+schmalspurigen
+schmalspuriger
+schmalspuriges
+schmalzig
+schmalzige
+schmalzigem
+schmalzigen
+schmalziger
+schmalziges
+schmarotze
+schmarotzen
+schmarotzend
+schmarotzende
+schmarotzendem
+schmarotzenden
+schmarotzender
+schmarotzendes
+schmarotzerisch
+schmarotzerische
+schmarotzerischem
+schmarotzerischen
+schmarotzerischer
+schmarotzerisches
+schmarotzest
+schmarotzt
+schmarotzte
+schmarotzten
+schmarotztest
+schmarotztet
+schmatze
+schmatzen
+schmatzend
+schmatzende
+schmatzendem
+schmatzenden
+schmatzender
+schmatzendes
+schmatzest
+schmatzt
+schmatzte
+schmatzten
+schmatztest
+schmatztet
+schmause
+schmausen
+schmausend
+schmausende
+schmausendem
+schmausenden
+schmausender
+schmausendes
+schmausest
+schmaust
+schmauste
+schmausten
+schmaustest
+schmaustet
+schmeckbar
+schmeckbare
+schmeckbarem
+schmeckbaren
+schmeckbarer
+schmeckbares
+schmecke
+schmecken
+schmeckend
+schmeckende
+schmeckendem
+schmeckenden
+schmeckender
+schmeckendes
+schmeckst
+schmeckt
+schmeckte
+schmeckten
+schmecktest
+schmecktet
+schmeichele
+schmeichelhaft
+schmeichelhafte
+schmeichelhaftem
+schmeichelhaften
+schmeichelhafter
+schmeichelhaftes
+schmeicheln
+schmeichelnd
+schmeichelnde
+schmeichelndem
+schmeichelnden
+schmeichelnder
+schmeichelndes
+schmeichelst
+schmeichelt
+schmeichelte
+schmeichelten
+schmeicheltest
+schmeicheltet
+schmeichle
+schmeichlerisch
+schmeichlerische
+schmeichlerischem
+schmeichlerischen
+schmeichlerischer
+schmeichlerisches
+schmeiße
+schmeißen
+schmeißend
+schmeißende
+schmeißendem
+schmeißenden
+schmeißender
+schmeißendes
+schmeißest
+schmeißt
+schmelzbar
+schmelzbare
+schmelzbarem
+schmelzbaren
+schmelzbarer
+schmelzbares
+schmelze
+schmelzen
+schmelzend
+schmelzende
+schmelzendem
+schmelzenden
+schmelzender
+schmelzendes
+schmelzest
+schmelzt
+schmelzte
+schmelzten
+schmelztest
+schmelztet
+schmerze
+schmerzen
+schmerzend
+schmerzende
+schmerzendem
+schmerzenden
+schmerzender
+schmerzendes
+schmerzerfüllt
+schmerzerfüllte
+schmerzerfülltem
+schmerzerfüllten
+schmerzerfüllter
+schmerzerfülltes
+schmerzest
+schmerzhaft
+schmerzhafte
+schmerzhaftem
+schmerzhaften
+schmerzhafter
+schmerzhaftes
+schmerzlich
+schmerzliche
+schmerzlichem
+schmerzlichen
+schmerzlicher
+schmerzlichere
+schmerzlicherem
+schmerzlicheren
+schmerzlicherer
+schmerzlicheres
+schmerzliches
+schmerzlichste
+schmerzlichstem
+schmerzlichsten
+schmerzlichster
+schmerzlichstes
+schmerzlindernd
+schmerzlindernde
+schmerzlinderndem
+schmerzlindernden
+schmerzlindernder
+schmerzlinderndes
+schmerzlos
+schmerzlose
+schmerzlosem
+schmerzlosen
+schmerzloser
+schmerzloses
+schmerzstillend
+schmerzstillende
+schmerzstillendem
+schmerzstillenden
+schmerzstillender
+schmerzstillendes
+schmerzt
+schmerzte
+schmerzten
+schmerztest
+schmerztet
+schmerzverzerrt
+schmerzverzerrte
+schmerzverzerrtem
+schmerzverzerrten
+schmerzverzerrter
+schmerzverzerrtes
+schmettere
+schmettern
+schmetternd
+schmetternde
+schmetterndem
+schmetternden
+schmetternder
+schmetterndes
+schmetterst
+schmettert
+schmetterte
+schmetterten
+schmettertest
+schmettertet
+schmettre
+schmiedbar
+schmiedbare
+schmiedbarem
+schmiedbaren
+schmiedbarer
+schmiedbares
+schmiede
+schmieden
+schmiedend
+schmiedende
+schmiedendem
+schmiedenden
+schmiedender
+schmiedendes
+schmiedest
+schmiedet
+schmiedete
+schmiedeten
+schmiedetest
+schmiedetet
+schmiege
+schmiegen
+schmiegend
+schmiegende
+schmiegendem
+schmiegenden
+schmiegender
+schmiegendes
+schmiegsam
+schmiegsame
+schmiegsamem
+schmiegsamen
+schmiegsamer
+schmiegsames
+schmiegst
+schmiegt
+schmiegte
+schmiegten
+schmiegtest
+schmiegtet
+schmiere
+schmieren
+schmierend
+schmierende
+schmierendem
+schmierenden
+schmierender
+schmierendes
+schmierig
+schmierige
+schmierigem
+schmierigen
+schmieriger
+schmieriges
+schmierst
+schmiert
+schmierte
+schmierten
+schmiertest
+schmiertet
+schmilzest
+schmilzt
+schminke
+schminken
+schminkend
+schminkende
+schminkendem
+schminkenden
+schminkender
+schminkendes
+schminkst
+schminkt
+schminkte
+schminkten
+schminktest
+schminktet
+schmirgele
+schmirgeln
+schmirgelnd
+schmirgelnde
+schmirgelndem
+schmirgelnden
+schmirgelnder
+schmirgelndes
+schmirgelst
+schmirgelt
+schmirgelte
+schmirgelten
+schmirgeltest
+schmirgeltet
+schmirgle
+schmiss
+schmissen
+schmissest
+schmissig
+schmissige
+schmissigem
+schmissigen
+schmissiger
+schmissiges
+schmisst
+schmolle
+schmollen
+schmollend
+schmollende
+schmollendem
+schmollenden
+schmollender
+schmollendes
+schmollst
+schmollt
+schmollte
+schmollten
+schmolltest
+schmolltet
+schmolz
+schmolzen
+schmolzest
+schmolzt
+schmore
+schmoren
+schmorend
+schmorende
+schmorendem
+schmorenden
+schmorender
+schmorendes
+schmorst
+schmort
+schmorte
+schmorten
+schmortest
+schmortet
+schmuck
+schmucke
+schmuckem
+schmucken
+schmucker
+schmuckere
+schmuckerem
+schmuckeren
+schmuckerer
+schmuckeres
+schmuckes
+schmuckeste
+schmuckestem
+schmuckesten
+schmuckester
+schmuckestes
+schmucklos
+schmucklose
+schmucklosem
+schmucklosen
+schmuckloser
+schmuckloses
+schmuggele
+schmuggeln
+schmuggelnd
+schmuggelnde
+schmuggelndem
+schmuggelnden
+schmuggelnder
+schmuggelndes
+schmuggelst
+schmuggelt
+schmuggelte
+schmuggelten
+schmuggeltest
+schmuggeltet
+schmuggle
+schmunzele
+schmunzeln
+schmunzelnd
+schmunzelnde
+schmunzelndem
+schmunzelnden
+schmunzelnder
+schmunzelndes
+schmunzelst
+schmunzelt
+schmunzelte
+schmunzelten
+schmunzeltest
+schmunzeltet
+schmunzle
+schmuse
+schmusen
+schmusend
+schmusende
+schmusendem
+schmusenden
+schmusender
+schmusendes
+schmusest
+schmust
+schmuste
+schmusten
+schmustest
+schmustet
+schmutze
+schmutzen
+schmutzend
+schmutzende
+schmutzendem
+schmutzenden
+schmutzender
+schmutzendes
+schmutzest
+schmutzig
+schmutzige
+schmutzigem
+schmutzigen
+schmutziger
+schmutzigere
+schmutzigerem
+schmutzigeren
+schmutzigerer
+schmutzigeres
+schmutziges
+schmutzigste
+schmutzigstem
+schmutzigsten
+schmutzigster
+schmutzigstes
+schmutzt
+schmutzte
+schmutzten
+schmutztest
+schmutztet
+schmächtig
+schmächtige
+schmächtigem
+schmächtigen
+schmächtiger
+schmächtiges
+schmähe
+schmähen
+schmähend
+schmähende
+schmähendem
+schmähenden
+schmähender
+schmähendes
+schmählich
+schmähliche
+schmählichem
+schmählichen
+schmählicher
+schmähliches
+schmähst
+schmäht
+schmähte
+schmähten
+schmähtest
+schmähtet
+schmälere
+schmälern
+schmälernd
+schmälernde
+schmälerndem
+schmälernden
+schmälernder
+schmälerndes
+schmälerst
+schmälert
+schmälerte
+schmälerten
+schmälertest
+schmälertet
+schmälre
+schmücke
+schmücken
+schmückend
+schmückende
+schmückendem
+schmückenden
+schmückender
+schmückendes
+schmückst
+schmückt
+schmückte
+schmückten
+schmücktest
+schmücktet
+schnabelförmig
+schnabelförmige
+schnabelförmigem
+schnabelförmigen
+schnabelförmiger
+schnabelförmiges
+schnaksele
+schnakseln
+schnakselst
+schnakselt
+schnakselte
+schnakselten
+schnakseltest
+schnakseltet
+schnaksle
+schnalle
+schnallen
+schnallend
+schnallende
+schnallendem
+schnallenden
+schnallender
+schnallendes
+schnallst
+schnallt
+schnallte
+schnallten
+schnalltest
+schnalltet
+schnalze
+schnalzen
+schnalzend
+schnalzende
+schnalzendem
+schnalzenden
+schnalzender
+schnalzendes
+schnalzest
+schnalzt
+schnalzte
+schnalzten
+schnalztest
+schnalztet
+schnappe
+schnappen
+schnappend
+schnappende
+schnappendem
+schnappenden
+schnappender
+schnappendes
+schnappst
+schnappt
+schnappte
+schnappten
+schnapptest
+schnapptet
+schnarche
+schnarchen
+schnarchend
+schnarchende
+schnarchendem
+schnarchenden
+schnarchender
+schnarchendes
+schnarchst
+schnarcht
+schnarchte
+schnarchten
+schnarchtest
+schnarchtet
+schnarre
+schnarren
+schnarrst
+schnarrt
+schnarrte
+schnarrten
+schnarrtest
+schnarrtet
+schnattere
+schnattern
+schnatternd
+schnatternde
+schnatterndem
+schnatternden
+schnatternder
+schnatterndes
+schnatterst
+schnattert
+schnatterte
+schnatterten
+schnattertest
+schnattertet
+schnattre
+schnaube
+schnauben
+schnaubend
+schnaubende
+schnaubendem
+schnaubenden
+schnaubender
+schnaubendes
+schnaubst
+schnaubt
+schnaubte
+schnaubten
+schnaubtest
+schnaubtet
+schnaufe
+schnaufen
+schnaufend
+schnaufende
+schnaufendem
+schnaufenden
+schnaufender
+schnaufendes
+schnaufst
+schnauft
+schnaufte
+schnauften
+schnauftest
+schnauftet
+schneckenförmig
+schneckenförmige
+schneckenförmigem
+schneckenförmigen
+schneckenförmiger
+schneckenförmiges
+schneebedeckt
+schneebedeckte
+schneebedecktem
+schneebedeckten
+schneebedeckter
+schneebedecktes
+schneeblind
+schneeblinde
+schneeblindem
+schneeblinden
+schneeblinder
+schneeblindes
+schneeig
+schneeige
+schneeigem
+schneeigen
+schneeiger
+schneeiges
+schneeweiß
+schneeweiße
+schneeweißem
+schneeweißen
+schneeweißer
+schneeweißes
+schneide
+schneiden
+schneidend
+schneidende
+schneidendem
+schneidenden
+schneidender
+schneidendes
+schneidere
+schneidern
+schneidernd
+schneidernde
+schneiderndem
+schneidernden
+schneidernder
+schneiderndes
+schneiderst
+schneidert
+schneiderte
+schneiderten
+schneidertest
+schneidertet
+schneidest
+schneidet
+schneidig
+schneidige
+schneidigem
+schneidigen
+schneidiger
+schneidigere
+schneidigerem
+schneidigeren
+schneidigerer
+schneidigeres
+schneidiges
+schneidigste
+schneidigstem
+schneidigsten
+schneidigster
+schneidigstes
+schneidre
+schneie
+schneien
+schneiend
+schneiende
+schneiendem
+schneienden
+schneiender
+schneiendes
+schneist
+schneit
+schneite
+schneiten
+schneitest
+schneitet
+schnell
+schnelle
+schnellem
+schnellen
+schnellend
+schnellende
+schnellendem
+schnellenden
+schnellender
+schnellendes
+schnellentschlossen
+schnellentschlossene
+schnellentschlossenem
+schnellentschlossenen
+schnellentschlossener
+schnellentschlossenes
+schneller
+schnellere
+schnellerem
+schnelleren
+schnellerer
+schnelleres
+schnelles
+schnellfüßig
+schnellfüßige
+schnellfüßigem
+schnellfüßigen
+schnellfüßiger
+schnellfüßiges
+schnelllebig
+schnelllebige
+schnelllebigem
+schnelllebigen
+schnelllebiger
+schnelllebigere
+schnelllebigerem
+schnelllebigeren
+schnelllebigerer
+schnelllebigeres
+schnelllebiges
+schnelllebigste
+schnelllebigstem
+schnelllebigsten
+schnelllebigster
+schnelllebigstes
+schnellst
+schnellste
+schnellstem
+schnellsten
+schnellster
+schnellstes
+schnellstmöglich
+schnellstmögliche
+schnellstmöglichem
+schnellstmöglichen
+schnellstmöglicher
+schnellstmögliches
+schnellt
+schnellte
+schnellten
+schnelltest
+schnelltet
+schnickschnacklos
+schnickschnacklose
+schnickschnacklosem
+schnickschnacklosen
+schnickschnackloser
+schnickschnackloses
+schniefe
+schniefen
+schniefend
+schniefende
+schniefendem
+schniefenden
+schniefender
+schniefendes
+schniefst
+schnieft
+schniefte
+schnieften
+schnieftest
+schnieftet
+schniegele
+schniegeln
+schniegelnd
+schniegelnde
+schniegelndem
+schniegelnden
+schniegelnder
+schniegelndes
+schniegelst
+schniegelt
+schniegelte
+schniegelten
+schniegeltest
+schniegeltet
+schniegle
+schnippe
+schnippele
+schnippeln
+schnippelnd
+schnippelnde
+schnippelndem
+schnippelnden
+schnippelnder
+schnippelndes
+schnippelst
+schnippelt
+schnippelte
+schnippelten
+schnippeltest
+schnippeltet
+schnippen
+schnippend
+schnippende
+schnippendem
+schnippenden
+schnippender
+schnippendes
+schnippisch
+schnippische
+schnippischem
+schnippischen
+schnippischer
+schnippisches
+schnipple
+schnippst
+schnippt
+schnippte
+schnippten
+schnipptest
+schnipptet
+schnitt
+schnitten
+schnittest
+schnittet
+schnittig
+schnittige
+schnittigem
+schnittigen
+schnittiger
+schnittigere
+schnittigerem
+schnittigeren
+schnittigerer
+schnittigeres
+schnittiges
+schnittigste
+schnittigstem
+schnittigsten
+schnittigster
+schnittigstes
+schnittst
+schnitze
+schnitzen
+schnitzend
+schnitzende
+schnitzendem
+schnitzenden
+schnitzender
+schnitzendes
+schnitzest
+schnitzt
+schnitzte
+schnitzten
+schnitztest
+schnitztet
+schnodderig
+schnodderige
+schnodderigem
+schnodderigen
+schnodderiger
+schnodderigere
+schnodderigerem
+schnodderigeren
+schnodderigerer
+schnodderigeres
+schnodderiges
+schnodderigste
+schnodderigstem
+schnodderigsten
+schnodderigster
+schnodderigstes
+schnoddrig
+schnoddrige
+schnoddrigem
+schnoddrigen
+schnoddriger
+schnoddrigere
+schnoddrigerem
+schnoddrigeren
+schnoddrigerer
+schnoddrigeres
+schnoddriges
+schnoddrigste
+schnoddrigstem
+schnoddrigsten
+schnoddrigster
+schnoddrigstes
+schnorre
+schnorren
+schnorrend
+schnorrende
+schnorrendem
+schnorrenden
+schnorrender
+schnorrendes
+schnorrst
+schnorrt
+schnorrte
+schnorrten
+schnorrtest
+schnorrtet
+schnupfe
+schnupfen
+schnupfend
+schnupfende
+schnupfendem
+schnupfenden
+schnupfender
+schnupfendes
+schnupfst
+schnupft
+schnupfte
+schnupften
+schnupftest
+schnupftet
+schnuppere
+schnuppern
+schnuppernd
+schnuppernde
+schnupperndem
+schnuppernden
+schnuppernder
+schnupperndes
+schnupperst
+schnuppert
+schnupperte
+schnupperten
+schnuppertest
+schnuppertet
+schnuppre
+schnurgerad
+schnurgerade
+schnurgeradem
+schnurgeraden
+schnurgerader
+schnurgerades
+schnurre
+schnurren
+schnurrend
+schnurrende
+schnurrendem
+schnurrenden
+schnurrender
+schnurrendes
+schnurrst
+schnurrt
+schnurrte
+schnurrten
+schnurrtest
+schnurrtet
+schnurstracks
+schnäuze
+schnäuzen
+schnäuzend
+schnäuzende
+schnäuzendem
+schnäuzenden
+schnäuzender
+schnäuzendes
+schnäuzest
+schnäuzt
+schnäuzte
+schnäuzten
+schnäuztest
+schnäuztet
+schnöd
+schnöde
+schnödem
+schnöden
+schnöder
+schnödes
+schnörkele
+schnörkelhaft
+schnörkelhafte
+schnörkelhaftem
+schnörkelhaften
+schnörkelhafter
+schnörkelhaftes
+schnörkellos
+schnörkellose
+schnörkellosem
+schnörkellosen
+schnörkelloser
+schnörkelloses
+schnörkeln
+schnörkelnd
+schnörkelnde
+schnörkelndem
+schnörkelnden
+schnörkelnder
+schnörkelndes
+schnörkelst
+schnörkelt
+schnörkelte
+schnörkelten
+schnörkeltest
+schnörkeltet
+schnörkle
+schnüffele
+schnüffeln
+schnüffelnd
+schnüffelnde
+schnüffelndem
+schnüffelnden
+schnüffelnder
+schnüffelndes
+schnüffelst
+schnüffelt
+schnüffelte
+schnüffelten
+schnüffeltest
+schnüffeltet
+schnüffle
+schnüre
+schnüren
+schnürend
+schnürende
+schnürendem
+schnürenden
+schnürender
+schnürendes
+schnürst
+schnürt
+schnürte
+schnürten
+schnürtest
+schnürtet
+schob
+schoben
+schobst
+schobt
+schockiere
+schockieren
+schockierend
+schockierende
+schockierendem
+schockierenden
+schockierender
+schockierendes
+schockierst
+schockiert
+schockierte
+schockiertem
+schockierten
+schockierter
+schockiertes
+schockiertest
+schockiertet
+schon
+schone
+schonen
+schonend
+schonende
+schonendem
+schonenden
+schonender
+schonendes
+schonst
+schont
+schonte
+schonten
+schontest
+schontet
+schonungslos
+schonungslose
+schonungslosem
+schonungslosen
+schonungsloser
+schonungsloses
+schorfig
+schorfige
+schorfigem
+schorfigen
+schorfiger
+schorfiges
+schoss
+schossen
+schossest
+schosst
+schottisch
+schottische
+schottischem
+schottischen
+schottischer
+schottisches
+schraffiere
+schraffieren
+schraffierend
+schraffierende
+schraffierendem
+schraffierenden
+schraffierender
+schraffierendes
+schraffierst
+schraffiert
+schraffierte
+schraffiertem
+schraffierten
+schraffierter
+schraffiertes
+schraffiertest
+schraffiertet
+schramme
+schrammen
+schrammend
+schrammende
+schrammendem
+schrammenden
+schrammender
+schrammendes
+schrammig
+schrammige
+schrammigem
+schrammigen
+schrammiger
+schrammiges
+schrammst
+schrammt
+schrammte
+schrammten
+schrammtest
+schrammtet
+schrankenlos
+schrankenlose
+schrankenlosem
+schrankenlosen
+schrankenloser
+schrankenloses
+schraube
+schrauben
+schraubend
+schraubende
+schraubendem
+schraubenden
+schraubender
+schraubendes
+schraubenförmig
+schraubenförmige
+schraubenförmigem
+schraubenförmigen
+schraubenförmiger
+schraubenförmiges
+schraubst
+schraubt
+schraubte
+schraubten
+schraubtest
+schraubtet
+schrecke
+schrecken
+schreckend
+schreckende
+schreckendem
+schreckenden
+schreckender
+schreckendes
+schreckerregend
+schreckerregende
+schreckerregendem
+schreckerregenden
+schreckerregender
+schreckerregendere
+schreckerregenderem
+schreckerregenderen
+schreckerregenderer
+schreckerregenderes
+schreckerregendes
+schreckerregendste
+schreckerregendstem
+schreckerregendsten
+schreckerregendster
+schreckerregendstes
+schreckhaft
+schreckhafte
+schreckhaftem
+schreckhaften
+schreckhafter
+schreckhaftes
+schrecklich
+schreckliche
+schrecklichem
+schrecklichen
+schrecklicher
+schrecklichere
+schrecklicherem
+schrecklicheren
+schrecklicherer
+schrecklicheres
+schreckliches
+schrecklichste
+schrecklichstem
+schrecklichsten
+schrecklichster
+schrecklichstes
+schreckst
+schreckt
+schreckte
+schreckten
+schrecktest
+schrecktet
+schreibe
+schreiben
+schreibend
+schreibende
+schreibendem
+schreibenden
+schreibender
+schreibendes
+schreibfaul
+schreibfaule
+schreibfaulem
+schreibfaulen
+schreibfauler
+schreibfaules
+schreibgeschützt
+schreibgeschützte
+schreibgeschütztem
+schreibgeschützten
+schreibgeschützter
+schreibgeschütztes
+schreibschützbar
+schreibschützbare
+schreibschützbarem
+schreibschützbaren
+schreibschützbarer
+schreibschützbares
+schreibschütze
+schreibschützen
+schreibschützend
+schreibschützende
+schreibschützendem
+schreibschützenden
+schreibschützender
+schreibschützendes
+schreibschützest
+schreibschützt
+schreibschützte
+schreibschützten
+schreibschütztest
+schreibschütztet
+schreibst
+schreibt
+schreibunkundig
+schreibunkundige
+schreibunkundigem
+schreibunkundigen
+schreibunkundiger
+schreibunkundiges
+schreie
+schreien
+schreiend
+schreiende
+schreiendem
+schreienden
+schreiender
+schreiendes
+schreist
+schreit
+schreite
+schreiten
+schreitend
+schreitende
+schreitendem
+schreitenden
+schreitender
+schreitendes
+schreitest
+schreitet
+schrie
+schrieb
+schrieben
+schriebst
+schriebt
+schrieen
+schrien
+schriest
+schriet
+schriftlich
+schriftliche
+schriftlichem
+schriftlichen
+schriftlicher
+schriftliches
+schriftstellerisch
+schriftstellerische
+schriftstellerischem
+schriftstellerischen
+schriftstellerischer
+schriftstellerisches
+schrill
+schrille
+schrillem
+schrillen
+schrillend
+schrillende
+schrillendem
+schrillenden
+schrillender
+schrillendes
+schriller
+schrillere
+schrillerem
+schrilleren
+schrillerer
+schrilleres
+schrilles
+schrillst
+schrillste
+schrillstem
+schrillsten
+schrillster
+schrillstes
+schrillt
+schrillte
+schrillten
+schrilltest
+schrilltet
+schritt
+schritten
+schrittest
+schrittet
+schritthalte
+schritthalten
+schritthaltet
+schrittst
+schrittweise
+schrittweisem
+schrittweisen
+schrittweiser
+schrittweises
+schrittzuhalten
+schroff
+schroffe
+schroffem
+schroffen
+schroffer
+schroffere
+schrofferem
+schrofferen
+schrofferer
+schrofferes
+schroffes
+schroffste
+schroffstem
+schroffsten
+schroffster
+schroffstes
+schrubbe
+schrubben
+schrubbend
+schrubbende
+schrubbendem
+schrubbenden
+schrubbender
+schrubbendes
+schrubbst
+schrubbt
+schrubbte
+schrubbten
+schrubbtest
+schrubbtet
+schrullenhaft
+schrullenhafte
+schrullenhaftem
+schrullenhaften
+schrullenhafter
+schrullenhaftes
+schrullig
+schrullige
+schrulligem
+schrulligen
+schrulliger
+schrulligere
+schrulligerem
+schrulligeren
+schrulligerer
+schrulligeres
+schrulliges
+schrulligste
+schrulligstem
+schrulligsten
+schrulligster
+schrulligstes
+schrumpelig
+schrumpelige
+schrumpeligem
+schrumpeligen
+schrumpeliger
+schrumpeliges
+schrumpfe
+schrumpfen
+schrumpfend
+schrumpfende
+schrumpfendem
+schrumpfenden
+schrumpfender
+schrumpfendes
+schrumpfst
+schrumpft
+schrumpfte
+schrumpften
+schrumpftest
+schrumpftet
+schrumplig
+schrumplige
+schrumpligem
+schrumpligen
+schrumpliger
+schrumpliges
+schrundig
+schrundige
+schrundigem
+schrundigen
+schrundiger
+schrundiges
+schräg
+schräge
+schrägem
+schrägen
+schräger
+schrägere
+schrägerem
+schrägeren
+schrägerer
+schrägeres
+schräges
+schrägste
+schrägstem
+schrägsten
+schrägster
+schrägstes
+schränke
+schränken
+schränkend
+schränkende
+schränkendem
+schränkenden
+schränkender
+schränkendes
+schränkst
+schränkt
+schränkte
+schränkten
+schränktest
+schränktet
+schröpfe
+schröpfen
+schröpfend
+schröpfende
+schröpfendem
+schröpfenden
+schröpfender
+schröpfendes
+schröpfst
+schröpft
+schröpfte
+schröpften
+schröpftest
+schröpftet
+schubkarrenweise
+schuf
+schufen
+schufest
+schufst
+schuft
+schufte
+schuften
+schuftend
+schuftende
+schuftendem
+schuftenden
+schuftender
+schuftendes
+schuftest
+schuftet
+schuftete
+schufteten
+schuftetest
+schuftetet
+schuftig
+schuftige
+schuftigem
+schuftigen
+schuftiger
+schuftiges
+schuldbeladen
+schuldbeladene
+schuldbeladenem
+schuldbeladenen
+schuldbeladener
+schuldbeladenes
+schuldbewusst
+schuldbewusste
+schuldbewusstem
+schuldbewussten
+schuldbewusster
+schuldbewusstes
+schulde
+schulden
+schuldend
+schuldende
+schuldendem
+schuldenden
+schuldender
+schuldendes
+schuldenfrei
+schuldenfreie
+schuldenfreiem
+schuldenfreien
+schuldenfreier
+schuldenfreies
+schuldest
+schuldet
+schuldete
+schuldeten
+schuldetest
+schuldetet
+schuldhaft
+schuldhafte
+schuldhaftem
+schuldhaften
+schuldhafter
+schuldhaftere
+schuldhafterem
+schuldhafteren
+schuldhafterer
+schuldhafteres
+schuldhaftes
+schuldhafteste
+schuldhaftestem
+schuldhaftesten
+schuldhaftester
+schuldhaftestes
+schuldig
+schuldige
+schuldigem
+schuldigen
+schuldiger
+schuldigere
+schuldigerem
+schuldigeren
+schuldigerer
+schuldigeres
+schuldiges
+schuldigste
+schuldigstem
+schuldigsten
+schuldigster
+schuldigstes
+schuldlos
+schuldlose
+schuldlosem
+schuldlosen
+schuldloser
+schuldloses
+schule
+schulen
+schulend
+schulende
+schulendem
+schulenden
+schulender
+schulendes
+schulfrei
+schulfreie
+schulfreiem
+schulfreien
+schulfreier
+schulfreies
+schulisch
+schulische
+schulischem
+schulischen
+schulischer
+schulisches
+schulmeisterlich
+schulmeisterliche
+schulmeisterlichem
+schulmeisterlichen
+schulmeisterlicher
+schulmeisterliches
+schulpflichtig
+schulpflichtige
+schulpflichtigem
+schulpflichtigen
+schulpflichtiger
+schulpflichtiges
+schulst
+schult
+schulte
+schulten
+schulterfrei
+schulterfreie
+schulterfreiem
+schulterfreien
+schulterfreier
+schulterfreies
+schultest
+schultet
+schummele
+schummeln
+schummelnd
+schummelnde
+schummelndem
+schummelnden
+schummelnder
+schummelndes
+schummelst
+schummelt
+schummelte
+schummelten
+schummeltest
+schummeltet
+schummerig
+schummerige
+schummerigem
+schummerigen
+schummeriger
+schummeriges
+schummle
+schummrig
+schummrige
+schummrigem
+schummrigen
+schummriger
+schummriges
+schuppe
+schuppen
+schuppend
+schuppende
+schuppendem
+schuppenden
+schuppender
+schuppendes
+schuppig
+schuppige
+schuppigem
+schuppigen
+schuppiger
+schuppiges
+schuppst
+schuppt
+schuppte
+schuppten
+schupptest
+schupptet
+schurkisch
+schurkische
+schurkischem
+schurkischen
+schurkischer
+schurkisches
+schussbereit
+schussbereite
+schussbereitem
+schussbereiten
+schussbereiter
+schussbereites
+schusselig
+schusselige
+schusseligem
+schusseligen
+schusseliger
+schusseligere
+schusseligerem
+schusseligeren
+schusseligerer
+schusseligeres
+schusseliges
+schusseligste
+schusseligstem
+schusseligsten
+schusseligster
+schusseligstes
+schussfertig
+schussfertige
+schussfertigem
+schussfertigen
+schussfertiger
+schussfertiges
+schussfest
+schussfeste
+schussfestem
+schussfesten
+schussfester
+schussfestere
+schussfesterem
+schussfesteren
+schussfesterer
+schussfesteres
+schussfestes
+schussfesteste
+schussfestestem
+schussfestesten
+schussfestester
+schussfestestes
+schusslig
+schusslige
+schussligem
+schussligen
+schussliger
+schussligere
+schussligerem
+schussligeren
+schussligerer
+schussligeres
+schussliges
+schussligste
+schussligstem
+schussligsten
+schussligster
+schussligstes
+schustere
+schustern
+schusternd
+schusternde
+schusterndem
+schusternden
+schusternder
+schusterndes
+schusterst
+schustert
+schusterte
+schusterten
+schustertest
+schustertet
+schustre
+schutzbefohlen
+schutzbefohlene
+schutzbefohlenem
+schutzbefohlenen
+schutzbefohlener
+schutzbefohlenes
+schutzlos
+schutzlose
+schutzlosem
+schutzlosen
+schutzloser
+schutzlosere
+schutzloserem
+schutzloseren
+schutzloserer
+schutzloseres
+schutzloses
+schutzloseste
+schutzlosestem
+schutzlosesten
+schutzlosester
+schutzlosestes
+schwabbele
+schwabbelig
+schwabbelige
+schwabbeligem
+schwabbeligen
+schwabbeliger
+schwabbeliges
+schwabbeln
+schwabbelnd
+schwabbelnde
+schwabbelndem
+schwabbelnden
+schwabbelnder
+schwabbelndes
+schwabbelst
+schwabbelt
+schwabbelte
+schwabbelten
+schwabbeltest
+schwabbeltet
+schwabble
+schwabblig
+schwabblige
+schwabbligem
+schwabbligen
+schwabbliger
+schwabbliges
+schwach
+schwache
+schwachem
+schwachen
+schwacher
+schwaches
+schwachköpfig
+schwachköpfige
+schwachköpfigem
+schwachköpfigen
+schwachköpfiger
+schwachköpfiges
+schwachsichtig
+schwachsichtige
+schwachsichtigem
+schwachsichtigen
+schwachsichtiger
+schwachsichtiges
+schwachsinnig
+schwachsinnige
+schwachsinnigem
+schwachsinnigen
+schwachsinniger
+schwachsinniges
+schwadroniere
+schwadronieren
+schwadronierend
+schwadronierende
+schwadronierendem
+schwadronierenden
+schwadronierender
+schwadronierendes
+schwadronierst
+schwadroniert
+schwadronierte
+schwadronierten
+schwadroniertest
+schwadroniertet
+schwafele
+schwafeln
+schwafelnd
+schwafelnde
+schwafelndem
+schwafelnden
+schwafelnder
+schwafelndes
+schwafelst
+schwafelt
+schwafelte
+schwafelten
+schwafeltest
+schwafeltet
+schwafle
+schwamm
+schwammen
+schwammig
+schwammige
+schwammigem
+schwammigen
+schwammiger
+schwammiges
+schwammst
+schwammt
+schwand
+schwanden
+schwandest
+schwandet
+schwandst
+schwang
+schwangen
+schwanger
+schwangere
+schwangerem
+schwangeren
+schwangerer
+schwangeres
+schwangst
+schwangt
+schwanke
+schwanken
+schwankend
+schwankende
+schwankendem
+schwankenden
+schwankender
+schwankendes
+schwankst
+schwankt
+schwankte
+schwankten
+schwanktest
+schwanktet
+schwappe
+schwappen
+schwappend
+schwappende
+schwappendem
+schwappenden
+schwappender
+schwappendes
+schwappst
+schwappt
+schwappte
+schwappten
+schwapptest
+schwapptet
+schwarz
+schwarzblau
+schwarzblaue
+schwarzblauem
+schwarzblauen
+schwarzblauer
+schwarzblaues
+schwarzbraun
+schwarzbraune
+schwarzbraunem
+schwarzbraunen
+schwarzbrauner
+schwarzbraunes
+schwarze
+schwarzem
+schwarzen
+schwarzer
+schwarzes
+schwarzweiß
+schwarzweiße
+schwarzweißem
+schwarzweißen
+schwarzweißer
+schwarzweißes
+schwarzärgere
+schwarzärgern
+schwarzärgernd
+schwarzärgernde
+schwarzärgerndem
+schwarzärgernden
+schwarzärgernder
+schwarzärgerndes
+schwarzärgerst
+schwarzärgert
+schwarzärgerte
+schwarzärgerten
+schwarzärgertest
+schwarzärgertet
+schwarzärgre
+schwatze
+schwatzen
+schwatzend
+schwatzende
+schwatzendem
+schwatzenden
+schwatzender
+schwatzendes
+schwatzest
+schwatzhaft
+schwatzhafte
+schwatzhaftem
+schwatzhaften
+schwatzhafter
+schwatzhaftere
+schwatzhafterem
+schwatzhafteren
+schwatzhafterer
+schwatzhafteres
+schwatzhaftes
+schwatzhafteste
+schwatzhaftestem
+schwatzhaftesten
+schwatzhaftester
+schwatzhaftestes
+schwatzt
+schwatzte
+schwatzten
+schwatztest
+schwatztet
+schwebe
+schweben
+schwebend
+schwebende
+schwebendem
+schwebenden
+schwebender
+schwebendes
+schwebst
+schwebt
+schwebte
+schwebten
+schwebtest
+schwebtet
+schwedisch
+schwedische
+schwedischem
+schwedischen
+schwedischer
+schwedisches
+schwefele
+schwefeln
+schwefelnd
+schwefelnde
+schwefelndem
+schwefelnden
+schwefelnder
+schwefelndes
+schwefelst
+schwefelt
+schwefelte
+schwefelten
+schwefeltest
+schwefeltet
+schwefle
+schwefqqelig
+schwefqqelige
+schwefqqeligem
+schwefqqeligen
+schwefqqeliger
+schwefqqeliges
+schwefqqlig
+schwefqqlige
+schwefqqligem
+schwefqqligen
+schwefqqliger
+schwefqqliges
+schweife
+schweifen
+schweifend
+schweifende
+schweifendem
+schweifenden
+schweifender
+schweifendes
+schweifst
+schweift
+schweifte
+schweiften
+schweiftest
+schweiftet
+schweig
+schweige
+schweigen
+schweigend
+schweigende
+schweigendem
+schweigenden
+schweigender
+schweigendes
+schweigsam
+schweigsame
+schweigsamem
+schweigsamen
+schweigsamer
+schweigsames
+schweigst
+schweigt
+schweinisch
+schweinische
+schweinischem
+schweinischen
+schweinischer
+schweinisches
+schweizerisch
+schweizerische
+schweizerischem
+schweizerischen
+schweizerischer
+schweizerisches
+schweiße
+schweißen
+schweißend
+schweißende
+schweißendem
+schweißenden
+schweißender
+schweißendes
+schweißest
+schweißgebadet
+schweißgebadete
+schweißgebadetem
+schweißgebadeten
+schweißgebadeter
+schweißgebadetes
+schweißig
+schweißige
+schweißigem
+schweißigen
+schweißiger
+schweißiges
+schweißt
+schweißte
+schweißten
+schweißtest
+schweißtet
+schwele
+schwelen
+schwelend
+schwelende
+schwelendem
+schwelenden
+schwelender
+schwelendes
+schwelge
+schwelgen
+schwelgend
+schwelgende
+schwelgendem
+schwelgenden
+schwelgender
+schwelgendes
+schwelgerisch
+schwelgerische
+schwelgerischem
+schwelgerischen
+schwelgerischer
+schwelgerisches
+schwelgst
+schwelgt
+schwelgte
+schwelgten
+schwelgtest
+schwelgtet
+schwelle
+schwellen
+schwellend
+schwellende
+schwellendem
+schwellenden
+schwellender
+schwellendes
+schwellt
+schwelst
+schwelt
+schwelte
+schwelten
+schweltest
+schweltet
+schwemme
+schwemmen
+schwemmend
+schwemmende
+schwemmendem
+schwemmenden
+schwemmender
+schwemmendes
+schwemmst
+schwemmt
+schwemmte
+schwemmten
+schwemmtest
+schwemmtet
+schwenkbar
+schwenkbare
+schwenkbarem
+schwenkbaren
+schwenkbarer
+schwenkbares
+schwenke
+schwenken
+schwenkend
+schwenkende
+schwenkendem
+schwenkenden
+schwenkender
+schwenkendes
+schwenkst
+schwenkt
+schwenkte
+schwenkten
+schwenktest
+schwenktet
+schwer
+schwerblütig
+schwerblütige
+schwerblütigem
+schwerblütigen
+schwerblütiger
+schwerblütiges
+schwere
+schwerem
+schweren
+schwerer
+schwerere
+schwererem
+schwereren
+schwererer
+schwereres
+schweres
+schwergewichtig
+schwergewichtige
+schwergewichtigem
+schwergewichtigen
+schwergewichtiger
+schwergewichtiges
+schwerhörig
+schwerhörige
+schwerhörigem
+schwerhörigen
+schwerhöriger
+schwerhöriges
+schwerlich
+schwermütig
+schwermütige
+schwermütigem
+schwermütigen
+schwermütiger
+schwermütiges
+schwerpunktartig
+schwerpunktartige
+schwerpunktartigem
+schwerpunktartigen
+schwerpunktartiger
+schwerpunktartiges
+schwerste
+schwerstem
+schwersten
+schwerster
+schwerstes
+schwerwiegend
+schwerwiegende
+schwerwiegendem
+schwerwiegenden
+schwerwiegender
+schwerwiegendere
+schwerwiegenderem
+schwerwiegenderen
+schwerwiegenderer
+schwerwiegenderes
+schwerwiegendes
+schwerwiegendste
+schwerwiegendstem
+schwerwiegendsten
+schwerwiegendster
+schwerwiegendstes
+schwesterlich
+schwesterliche
+schwesterlichem
+schwesterlichen
+schwesterlicher
+schwesterliches
+schwieg
+schwiegen
+schwiegst
+schwiegt
+schwielig
+schwielige
+schwieligem
+schwieligen
+schwieliger
+schwieliges
+schwierig
+schwierige
+schwierigem
+schwierigen
+schwieriger
+schwierigere
+schwierigerem
+schwierigeren
+schwierigerer
+schwierigeres
+schwieriges
+schwierigste
+schwierigstem
+schwierigsten
+schwierigster
+schwierigstes
+schwillst
+schwillt
+schwimme
+schwimmen
+schwimmend
+schwimmende
+schwimmendem
+schwimmenden
+schwimmender
+schwimmendes
+schwimmst
+schwimmt
+schwinde
+schwindele
+schwindelerregend
+schwindelerregende
+schwindelerregendem
+schwindelerregenden
+schwindelerregender
+schwindelerregendes
+schwindelfrei
+schwindelfreie
+schwindelfreiem
+schwindelfreien
+schwindelfreier
+schwindelfreies
+schwindelig
+schwindelige
+schwindeligem
+schwindeligen
+schwindeliger
+schwindeliges
+schwindeln
+schwindelnd
+schwindelnde
+schwindelndem
+schwindelnden
+schwindelnder
+schwindelndes
+schwindelst
+schwindelt
+schwindelte
+schwindelten
+schwindeltest
+schwindeltet
+schwinden
+schwindend
+schwindende
+schwindendem
+schwindenden
+schwindender
+schwindendes
+schwindest
+schwindet
+schwindle
+schwindlig
+schwindlige
+schwindligem
+schwindligen
+schwindliger
+schwindliges
+schwindsüchtig
+schwindsüchtige
+schwindsüchtigem
+schwindsüchtigen
+schwindsüchtiger
+schwindsüchtiges
+schwinge
+schwingen
+schwingend
+schwingende
+schwingendem
+schwingenden
+schwingender
+schwingendes
+schwingst
+schwingt
+schwingungsfrei
+schwingungsfreie
+schwingungsfreiem
+schwingungsfreien
+schwingungsfreier
+schwingungsfreies
+schwirre
+schwirren
+schwirrend
+schwirrende
+schwirrendem
+schwirrenden
+schwirrender
+schwirrendes
+schwirrst
+schwirrt
+schwirrte
+schwirrten
+schwirrtest
+schwirrtet
+schwitze
+schwitzen
+schwitzend
+schwitzende
+schwitzendem
+schwitzenden
+schwitzender
+schwitzendes
+schwitzest
+schwitzt
+schwitzte
+schwitzten
+schwitztest
+schwitztet
+schwor
+schworen
+schworst
+schwort
+schwul
+schwule
+schwulem
+schwulen
+schwuler
+schwulere
+schwulerem
+schwuleren
+schwulerer
+schwuleres
+schwules
+schwulste
+schwulstem
+schwulsten
+schwulster
+schwulstes
+schwunghaft
+schwunghafte
+schwunghaftem
+schwunghaften
+schwunghafter
+schwunghaftes
+schwunglos
+schwunglose
+schwunglosem
+schwunglosen
+schwungloser
+schwunglosere
+schwungloserem
+schwungloseren
+schwungloserer
+schwungloseres
+schwungloses
+schwungloseste
+schwunglosestem
+schwunglosesten
+schwunglosester
+schwunglosestes
+schwungvoll
+schwungvolle
+schwungvollem
+schwungvollen
+schwungvoller
+schwungvollere
+schwungvollerem
+schwungvolleren
+schwungvollerer
+schwungvolleres
+schwungvolles
+schwungvollste
+schwungvollstem
+schwungvollsten
+schwungvollster
+schwungvollstes
+schwuppdiwupp
+schwäbisch
+schwäbische
+schwäbischem
+schwäbischen
+schwäbischer
+schwäbisches
+schwäche
+schwächen
+schwächend
+schwächende
+schwächendem
+schwächenden
+schwächender
+schwächendes
+schwächer
+schwächere
+schwächerem
+schwächeren
+schwächerer
+schwächeres
+schwächlich
+schwächliche
+schwächlichem
+schwächlichen
+schwächlicher
+schwächliches
+schwächst
+schwächste
+schwächstem
+schwächsten
+schwächster
+schwächstes
+schwächt
+schwächte
+schwächten
+schwächtest
+schwächtet
+schwängere
+schwängern
+schwängernd
+schwängernde
+schwängerndem
+schwängernden
+schwängernder
+schwängerndes
+schwängerst
+schwängert
+schwängerte
+schwängerten
+schwängertest
+schwängertet
+schwängre
+schwänze
+schwänzele
+schwänzeln
+schwänzelnd
+schwänzelnde
+schwänzelndem
+schwänzelnden
+schwänzelnder
+schwänzelndes
+schwänzelst
+schwänzelt
+schwänzelte
+schwänzelten
+schwänzeltest
+schwänzeltet
+schwänzen
+schwänzend
+schwänzende
+schwänzendem
+schwänzenden
+schwänzender
+schwänzendes
+schwänzest
+schwänzle
+schwänzt
+schwänzte
+schwänzten
+schwänztest
+schwänztet
+schwärme
+schwärmen
+schwärmend
+schwärmende
+schwärmendem
+schwärmenden
+schwärmender
+schwärmendes
+schwärmerisch
+schwärmerische
+schwärmerischem
+schwärmerischen
+schwärmerischer
+schwärmerisches
+schwärmst
+schwärmt
+schwärmte
+schwärmten
+schwärmtest
+schwärmtet
+schwärze
+schwärzen
+schwärzend
+schwärzende
+schwärzendem
+schwärzenden
+schwärzender
+schwärzendes
+schwärzest
+schwärzlich
+schwärzliche
+schwärzlichem
+schwärzlichen
+schwärzlicher
+schwärzliches
+schwärzt
+schwärzte
+schwärzten
+schwärztest
+schwärztet
+schwöre
+schwören
+schwörend
+schwörende
+schwörendem
+schwörenden
+schwörender
+schwörendes
+schwörst
+schwört
+schwül
+schwüle
+schwülem
+schwülen
+schwüler
+schwülere
+schwülerem
+schwüleren
+schwülerer
+schwüleres
+schwüles
+schwülste
+schwülstem
+schwülsten
+schwülster
+schwülstes
+schwülstig
+schwülstige
+schwülstigem
+schwülstigen
+schwülstiger
+schwülstiges
+schäbig
+schäbige
+schäbigem
+schäbigen
+schäbiger
+schäbigere
+schäbigerem
+schäbigeren
+schäbigerer
+schäbigeres
+schäbiges
+schäbigste
+schäbigstem
+schäbigsten
+schäbigster
+schäbigstes
+schädige
+schädigen
+schädigend
+schädigende
+schädigendem
+schädigenden
+schädigender
+schädigendes
+schädigst
+schädigt
+schädigte
+schädigten
+schädigtest
+schädigtet
+schädlich
+schädliche
+schädlichem
+schädlichen
+schädlicher
+schädliches
+schäkere
+schäkern
+schäkernd
+schäkernde
+schäkerndem
+schäkernden
+schäkernder
+schäkerndes
+schäkerst
+schäkert
+schäkerte
+schäkerten
+schäkertest
+schäkertet
+schäkre
+schäle
+schälen
+schälend
+schälende
+schälendem
+schälenden
+schälender
+schälendes
+schälst
+schält
+schälte
+schälten
+schältest
+schältet
+schäme
+schämen
+schämend
+schämende
+schämendem
+schämenden
+schämender
+schämendes
+schämst
+schämt
+schämte
+schämten
+schämtest
+schämtet
+schände
+schänden
+schändend
+schändende
+schändendem
+schändenden
+schändender
+schändendes
+schändest
+schändet
+schändete
+schändeten
+schändetest
+schändetet
+schändlich
+schändliche
+schändlichem
+schändlichen
+schändlicher
+schändlichere
+schändlicherem
+schändlicheren
+schändlicherer
+schändlicheres
+schändliches
+schändlichste
+schändlichstem
+schändlichsten
+schändlichster
+schändlichstes
+schärfe
+schärfen
+schärfend
+schärfende
+schärfendem
+schärfenden
+schärfender
+schärfendes
+schärfer
+schärfere
+schärferem
+schärferen
+schärferer
+schärferes
+schärfst
+schärfste
+schärfstem
+schärfsten
+schärfster
+schärfstes
+schärft
+schärfte
+schärften
+schärftest
+schärftet
+schätzbar
+schätzbare
+schätzbarem
+schätzbaren
+schätzbarer
+schätzbares
+schätze
+schätzen
+schätzend
+schätzende
+schätzendem
+schätzenden
+schätzender
+schätzendes
+schätzenswert
+schätzenswerte
+schätzenswertem
+schätzenswerten
+schätzenswerter
+schätzenswertere
+schätzenswerterem
+schätzenswerteren
+schätzenswerterer
+schätzenswerteres
+schätzenswertes
+schätzenswerteste
+schätzenswertestem
+schätzenswertesten
+schätzenswertester
+schätzenswertestes
+schätzest
+schätzt
+schätzte
+schätzten
+schätztest
+schätztet
+schätzungsweise
+schäume
+schäumen
+schäumend
+schäumende
+schäumendem
+schäumenden
+schäumender
+schäumendes
+schäumst
+schäumt
+schäumte
+schäumten
+schäumtest
+schäumtet
+schön
+schöne
+schönem
+schönen
+schöner
+schönere
+schönerem
+schöneren
+schönerer
+schöneres
+schönes
+schönfärbe
+schönfärben
+schönfärbend
+schönfärbende
+schönfärbendem
+schönfärbenden
+schönfärbender
+schönfärbendes
+schönfärbst
+schönfärbt
+schönfärbte
+schönfärbten
+schönfärbtest
+schönfärbtet
+schönste
+schönstem
+schönsten
+schönster
+schönstes
+schöpfe
+schöpfen
+schöpfend
+schöpfende
+schöpfendem
+schöpfenden
+schöpfender
+schöpfendes
+schöpferisch
+schöpferische
+schöpferischem
+schöpferischen
+schöpferischer
+schöpferisches
+schöpfst
+schöpft
+schöpfte
+schöpften
+schöpftest
+schöpftet
+schüchtern
+schüchterne
+schüchternem
+schüchternen
+schüchterner
+schüchternere
+schüchternerem
+schüchterneren
+schüchternerer
+schüchterneres
+schüchternes
+schüchternste
+schüchternstem
+schüchternsten
+schüchternster
+schüchternstes
+schülerhaft
+schülerhafte
+schülerhaftem
+schülerhaften
+schülerhafter
+schülerhaftes
+schüre
+schüren
+schürend
+schürende
+schürendem
+schürenden
+schürender
+schürendes
+schürfe
+schürfen
+schürfend
+schürfende
+schürfendem
+schürfenden
+schürfender
+schürfendes
+schürfst
+schürft
+schürfte
+schürften
+schürftest
+schürftet
+schürst
+schürt
+schürte
+schürten
+schürtest
+schürtet
+schütte
+schüttele
+schütteln
+schüttelnd
+schüttelnde
+schüttelndem
+schüttelnden
+schüttelnder
+schüttelndes
+schüttelst
+schüttelt
+schüttelte
+schüttelten
+schütteltest
+schütteltet
+schütten
+schüttend
+schüttende
+schüttendem
+schüttenden
+schüttender
+schüttendes
+schüttest
+schüttet
+schüttete
+schütteten
+schüttetest
+schüttetet
+schüttle
+schütze
+schützen
+schützend
+schützende
+schützendem
+schützenden
+schützender
+schützendes
+schützest
+schützt
+schützte
+schützten
+schütztest
+schütztet
+sechs
+sechseckig
+sechseckige
+sechseckigem
+sechseckigen
+sechseckiger
+sechseckiges
+sechseinhalb
+sechsfach
+sechsfache
+sechsfachem
+sechsfachen
+sechsfacher
+sechsfaches
+sechsfältig
+sechsfältige
+sechsfältigem
+sechsfältigen
+sechsfältiger
+sechsfältiges
+sechshundert
+sechsjährig
+sechsjährige
+sechsjährigem
+sechsjährigen
+sechsjähriger
+sechsjähriges
+sechsseitig
+sechsseitige
+sechsseitigem
+sechsseitigen
+sechsseitiger
+sechsseitiges
+sechsstündig
+sechsstündige
+sechsstündigem
+sechsstündigen
+sechsstündiger
+sechsstündiges
+sechst
+sechste
+sechstel
+sechstem
+sechsten
+sechster
+sechstes
+sechzehn
+sechzehnte
+sechzehntel
+sechzehntem
+sechzehnten
+sechzehnter
+sechzehntes
+sechzig
+sechziger
+sechzigern
+sechzigste
+sechzigstem
+sechzigsten
+sechzigster
+sechzigstes
+sedimentiere
+sedimentieren
+sedimentierend
+sedimentierende
+sedimentierendem
+sedimentierenden
+sedimentierender
+sedimentierendes
+sedimentierst
+sedimentiert
+sedimentierte
+sedimentiertem
+sedimentierten
+sedimentierter
+sedimentiertes
+sedimentiertest
+sedimentiertet
+seefahrend
+seefahrende
+seefahrendem
+seefahrenden
+seefahrender
+seefahrendes
+seefest
+seefeste
+seefestem
+seefesten
+seefester
+seefestes
+seeklar
+seeklare
+seeklarem
+seeklaren
+seeklarer
+seeklares
+seekrank
+seekranke
+seekrankem
+seekranken
+seekranker
+seekrankes
+seelenfroh
+seelenfrohe
+seelenfrohem
+seelenfrohen
+seelenfroher
+seelenfrohes
+seelenruhig
+seelenruhige
+seelenruhigem
+seelenruhigen
+seelenruhiger
+seelenruhiges
+seelenvergnügt
+seelenvergnügte
+seelenvergnügtem
+seelenvergnügten
+seelenvergnügter
+seelenvergnügtes
+seelenvoll
+seelenvolle
+seelenvollem
+seelenvollen
+seelenvoller
+seelenvolles
+seelisch
+seelische
+seelischem
+seelischen
+seelischer
+seelisches
+seemännisch
+seemännische
+seemännischem
+seemännischen
+seemännischer
+seemännisches
+seemäßig
+seemäßige
+seemäßigem
+seemäßigen
+seemäßiger
+seemäßiges
+seetüchtig
+seetüchtige
+seetüchtigem
+seetüchtigen
+seetüchtiger
+seetüchtigere
+seetüchtigerem
+seetüchtigeren
+seetüchtigerer
+seetüchtigeres
+seetüchtiges
+seetüchtigste
+seetüchtigstem
+seetüchtigsten
+seetüchtigster
+seetüchtigstes
+segele
+segeln
+segelnd
+segelnde
+segelndem
+segelnden
+segelnder
+segelndes
+segelst
+segelt
+segelte
+segelten
+segeltest
+segeltet
+segensreich
+segensreiche
+segensreichem
+segensreichen
+segensreicher
+segensreiches
+segensvoll
+segensvolle
+segensvollem
+segensvollen
+segensvoller
+segensvolles
+segle
+segne
+segnen
+segnend
+segnende
+segnendem
+segnenden
+segnender
+segnendes
+segnest
+segnet
+segnete
+segneten
+segnetest
+segnetet
+sehe
+sehen
+sehend
+sehende
+sehendem
+sehenden
+sehender
+sehendes
+sehenswert
+sehenswerte
+sehenswertem
+sehenswerten
+sehenswerter
+sehenswertes
+sehenswürdig
+sehenswürdige
+sehenswürdigem
+sehenswürdigen
+sehenswürdiger
+sehenswürdiges
+sehne
+sehnen
+sehnend
+sehnende
+sehnendem
+sehnenden
+sehnender
+sehnendes
+sehnig
+sehnige
+sehnigem
+sehnigen
+sehniger
+sehniges
+sehnlich
+sehnliche
+sehnlichem
+sehnlichen
+sehnlicher
+sehnliches
+sehnlichst
+sehnst
+sehnsüchtig
+sehnsüchtige
+sehnsüchtigem
+sehnsüchtigen
+sehnsüchtiger
+sehnsüchtiges
+sehnt
+sehnte
+sehnten
+sehntest
+sehntet
+sehr
+seht
+sei
+seicht
+seichte
+seichtem
+seichten
+seichter
+seichtes
+seid
+seiden
+seidenartig
+seidenartige
+seidenartigem
+seidenartigen
+seidenartiger
+seidenartiges
+seidene
+seidenem
+seidenen
+seidener
+seidenes
+seidenweich
+seidenweiche
+seidenweichem
+seidenweichen
+seidenweicher
+seidenweiches
+seidig
+seidige
+seidigem
+seidigen
+seidiger
+seidiges
+seien
+seiend
+seiende
+seiendem
+seienden
+seiender
+seiendes
+seife
+seifen
+seifig
+seifige
+seifigem
+seifigen
+seifiger
+seifiges
+seifst
+seift
+seifte
+seiften
+seiftest
+seiftet
+seile
+seilen
+seilst
+seilt
+seilte
+seilten
+seiltest
+seiltet
+seimig
+seimige
+seimigem
+seimigen
+seimiger
+seimiges
+sein
+seine
+seinem
+seinen
+seiner
+seinerseits
+seinerzeit
+seines
+seinesgleichen
+seinetwegen
+seinetwillen
+seinige
+seinigem
+seinigen
+seiniger
+seiniges
+seist
+seit
+seitdem
+seiteneffektfrei
+seiteneffektfreie
+seiteneffektfreiem
+seiteneffektfreien
+seiteneffektfreier
+seiteneffektfreies
+seitenlang
+seitenlange
+seitenlangem
+seitenlangen
+seitenlanger
+seitenlanges
+seitens
+seither
+seitherige
+seitherigem
+seitherigen
+seitheriger
+seitheriges
+seitig
+seitige
+seitigem
+seitigen
+seitiger
+seitiges
+seitlich
+seitliche
+seitlichem
+seitlichen
+seitlicher
+seitliches
+sek
+sekier
+sekiere
+sekieren
+sekierend
+sekierende
+sekierendem
+sekierenden
+sekierender
+sekierendes
+sekierst
+sekiert
+sekierte
+sekierten
+sekiertest
+sekiertet
+sekundenlang
+sekundenlange
+sekundenlangem
+sekundenlangen
+sekundenlanger
+sekundenlanges
+sekundiere
+sekundieren
+sekundierend
+sekundierende
+sekundierendem
+sekundierenden
+sekundierender
+sekundierendes
+sekundierst
+sekundiert
+sekundierte
+sekundiertem
+sekundierten
+sekundierter
+sekundiertes
+sekundiertest
+sekundiertet
+sekundär
+sekundäre
+sekundärem
+sekundären
+sekundärer
+sekundäres
+selbe
+selbem
+selben
+selber
+selbes
+selbig
+selbige
+selbigem
+selbigen
+selbiger
+selbiges
+selbst
+selbstbewusst
+selbstbewusste
+selbstbewusstem
+selbstbewussten
+selbstbewusster
+selbstbewusstes
+selbstbezüglich
+selbstbezügliche
+selbstbezüglichem
+selbstbezüglichen
+selbstbezüglicher
+selbstbezügliches
+selbsterkoren
+selbsterkorene
+selbsterkorenem
+selbsterkorenen
+selbsterkorener
+selbsterkorenes
+selbstevident
+selbstevidente
+selbstevidentem
+selbstevidenten
+selbstevidenter
+selbstevidentes
+selbstgefällig
+selbstgefällige
+selbstgefälligem
+selbstgefälligen
+selbstgefälliger
+selbstgefälliges
+selbstgerecht
+selbstgerechte
+selbstgerechtem
+selbstgerechten
+selbstgerechter
+selbstgerechtes
+selbstherrlich
+selbstherrliche
+selbstherrlichem
+selbstherrlichen
+selbstherrlicher
+selbstherrliches
+selbstlos
+selbstlose
+selbstlosem
+selbstlosen
+selbstloser
+selbstloses
+selbstmörderisch
+selbstmörderische
+selbstmörderischem
+selbstmörderischen
+selbstmörderischer
+selbstmörderisches
+selbstredend
+selbstsicher
+selbstsichere
+selbstsicherem
+selbstsicheren
+selbstsicherer
+selbstsicherere
+selbstsichererem
+selbstsichereren
+selbstsichererer
+selbstsichereres
+selbstsicheres
+selbstsicherste
+selbstsicherstem
+selbstsichersten
+selbstsicherster
+selbstsicherstes
+selbstständig
+selbstständige
+selbstständigem
+selbstständigen
+selbstständiger
+selbstständigere
+selbstständigerem
+selbstständigeren
+selbstständigerer
+selbstständigeres
+selbstständiges
+selbstständigste
+selbstständigstem
+selbstständigsten
+selbstständigster
+selbstständigstes
+selbstsüchtig
+selbstsüchtige
+selbstsüchtigem
+selbstsüchtigen
+selbstsüchtiger
+selbstsüchtiges
+selbsttätig
+selbsttätige
+selbsttätigem
+selbsttätigen
+selbsttätiger
+selbsttätiges
+selbstvergessen
+selbstvergessene
+selbstvergessenem
+selbstvergessenen
+selbstvergessener
+selbstvergessenes
+selbstverständlich
+selbstverständliche
+selbstverständlichem
+selbstverständlichen
+selbstverständlicher
+selbstverständliches
+selbständig
+selbständige
+selbständigem
+selbständigen
+selbständiger
+selbständigere
+selbständigerem
+selbständigeren
+selbständigerer
+selbständigeres
+selbständiges
+selbständigste
+selbständigstem
+selbständigsten
+selbständigster
+selbständigstes
+selch
+selche
+selchen
+selchend
+selchende
+selchendem
+selchenden
+selchender
+selchendes
+selchst
+selcht
+selchte
+selchten
+selchtest
+selchtet
+selektierbar
+selektierbare
+selektierbarem
+selektierbaren
+selektierbarer
+selektierbares
+selektiere
+selektieren
+selektierend
+selektierende
+selektierendem
+selektierenden
+selektierender
+selektierendes
+selektierst
+selektiert
+selektierte
+selektiertem
+selektierten
+selektierter
+selektiertes
+selektiertest
+selektiertet
+selektiv
+selektive
+selektivem
+selektiven
+selektiver
+selektives
+selig
+selige
+seligem
+seligen
+seliger
+seligere
+seligerem
+seligeren
+seligerer
+seligeres
+seliges
+seligste
+seligstem
+seligsten
+seligster
+seligstes
+selten
+seltene
+seltenem
+seltenen
+seltener
+seltenere
+seltenerem
+selteneren
+seltenerer
+selteneres
+seltenes
+seltenste
+seltenstem
+seltensten
+seltenster
+seltenstes
+seltsam
+seltsame
+seltsamem
+seltsamen
+seltsamer
+seltsamere
+seltsamerem
+seltsameren
+seltsamerer
+seltsameres
+seltsamerweise
+seltsames
+seltsamste
+seltsamstem
+seltsamsten
+seltsamster
+seltsamstes
+semantikbasiert
+semantikbasierte
+semantikbasiertem
+semantikbasierten
+semantikbasierter
+semantikbasiertes
+semantikerhaltend
+semantikerhaltende
+semantikerhaltendem
+semantikerhaltenden
+semantikerhaltender
+semantikerhaltendes
+semantisch
+semantische
+semantischem
+semantischen
+semantischer
+semantisches
+semiformal
+semiformale
+semiformalem
+semiformalen
+semiformaler
+semiformales
+semilegal
+semilegale
+semilegalem
+semilegalen
+semilegaler
+semilegales
+semiotisch
+semiotische
+semiotischem
+semiotischen
+semiotischer
+semiotisches
+sende
+sendekopfseitig
+sendekopfseitige
+sendekopfseitigem
+sendekopfseitigen
+sendekopfseitiger
+sendekopfseitiges
+senden
+sendend
+sendende
+sendendem
+sendenden
+sendender
+sendendes
+sendest
+sendet
+sendete
+sendeten
+sendetest
+sendetet
+senge
+sengen
+sengend
+sengende
+sengendem
+sengenden
+sengender
+sengendes
+sengst
+sengt
+sengte
+sengten
+sengtest
+sengtet
+senil
+senile
+senilem
+senilen
+seniler
+senilere
+senilerem
+senileren
+senilerer
+senileres
+seniles
+senilste
+senilstem
+senilsten
+senilster
+senilstes
+senke
+senken
+senkend
+senkende
+senkendem
+senkenden
+senkender
+senkendes
+senkrecht
+senkrechte
+senkrechtem
+senkrechten
+senkrechter
+senkrechtes
+senkst
+senkt
+senkte
+senkten
+senktest
+senktet
+sensationell
+sensationelle
+sensationellem
+sensationellen
+sensationeller
+sensationelles
+sensibel
+sensibelste
+sensibelstem
+sensibelsten
+sensibelster
+sensibelstes
+sensibilisier
+sensibilisiere
+sensibilisieren
+sensibilisierend
+sensibilisierende
+sensibilisierendem
+sensibilisierenden
+sensibilisierender
+sensibilisierendes
+sensibilisierst
+sensibilisiert
+sensibilisierte
+sensibilisiertem
+sensibilisierten
+sensibilisierter
+sensibilisiertes
+sensibilisiertest
+sensibilisiertet
+sensible
+sensiblem
+sensiblen
+sensibler
+sensiblere
+sensiblerem
+sensibleren
+sensiblerer
+sensibleres
+sensibles
+sensitiv
+sensitive
+sensitivem
+sensitiven
+sensitiver
+sensitives
+sensorseitig
+sensorseitige
+sensorseitigem
+sensorseitigen
+sensorseitiger
+sensorseitiges
+sentenziös
+sentenziöse
+sentenziösem
+sentenziösen
+sentenziöser
+sentenziösere
+sentenziöserem
+sentenziöseren
+sentenziöserer
+sentenziöseres
+sentenziöses
+sentenziöseste
+sentenziösestem
+sentenziösesten
+sentenziösester
+sentenziösestes
+sentimental
+sentimentale
+sentimentalem
+sentimentalen
+sentimentaler
+sentimentalere
+sentimentalerem
+sentimentaleren
+sentimentalerer
+sentimentaleres
+sentimentales
+sentimentalste
+sentimentalstem
+sentimentalsten
+sentimentalster
+sentimentalstes
+separat
+separate
+separatem
+separaten
+separater
+separates
+separierbar
+separierbare
+separierbarem
+separierbaren
+separierbarer
+separierbares
+separiere
+separieren
+separierst
+separiert
+separierte
+separiertem
+separierten
+separierter
+separiertes
+separiertest
+separiertet
+septisch
+septische
+septischem
+septischen
+septischer
+septisches
+sequentiell
+sequentielle
+sequentiellem
+sequentiellen
+sequentieller
+sequentielles
+sequenziell
+sequenzielle
+sequenziellem
+sequenziellen
+sequenzieller
+sequenzielles
+serbisch
+serbische
+serbischem
+serbischen
+serbischer
+serbisches
+serbokroatisch
+serbokroatische
+serbokroatischem
+serbokroatischen
+serbokroatischer
+serbokroatisches
+serialisiere
+serialisieren
+serialisierend
+serialisierende
+serialisierendem
+serialisierenden
+serialisierender
+serialisierendes
+serialisierst
+serialisiert
+serialisierte
+serialisiertem
+serialisierten
+serialisierter
+serialisiertes
+serialisiertest
+serialisiertet
+seriell
+serielle
+seriellem
+seriellen
+serieller
+serielles
+serienfertige
+serienfertigen
+serienfertigend
+serienfertigende
+serienfertigendem
+serienfertigenden
+serienfertigender
+serienfertigendes
+serienfertigst
+serienfertigt
+serienfertigte
+serienfertigten
+serienfertigtest
+serienfertigtet
+serienmäßig
+serienmäßige
+serienmäßigem
+serienmäßigen
+serienmäßiger
+serienmäßiges
+serienreif
+serienreife
+serienreifem
+serienreifen
+serienreifer
+serienreifes
+serienweise
+seriös
+seriöse
+seriösem
+seriösen
+seriöser
+seriösere
+seriöserem
+seriöseren
+seriöserer
+seriöseres
+seriöses
+seriöseste
+seriösestem
+seriösesten
+seriösester
+seriösestes
+servicefreundlich
+servicefreundliche
+servicefreundlichem
+servicefreundlichen
+servicefreundlicher
+servicefreundliches
+serviere
+servieren
+servierend
+servierende
+servierendem
+servierenden
+servierender
+servierendes
+servierst
+serviert
+servierte
+serviertem
+servierten
+servierter
+serviertes
+serviertest
+serviertet
+servil
+servile
+servilem
+servilen
+serviler
+servilere
+servilerem
+servileren
+servilerer
+servileres
+serviles
+servilste
+servilstem
+servilsten
+servilster
+servilstes
+sesshaft
+sesshafte
+sesshaftem
+sesshaften
+sesshafter
+sesshaftere
+sesshafterem
+sesshafteren
+sesshafterer
+sesshafteres
+sesshaftes
+sesshafteste
+sesshaftestem
+sesshaftesten
+sesshaftester
+sesshaftestes
+setting
+setzbar
+setzbare
+setzbarem
+setzbaren
+setzbarer
+setzbares
+setze
+setzen
+setzend
+setzende
+setzendem
+setzenden
+setzender
+setzendes
+setzest
+setzt
+setzte
+setzten
+setztest
+setztet
+seuche
+seuchen
+seuchend
+seuchende
+seuchendem
+seuchenden
+seuchender
+seuchendes
+seuchst
+seucht
+seuchte
+seuchten
+seuchtest
+seuchtet
+seufze
+seufzen
+seufzend
+seufzende
+seufzendem
+seufzenden
+seufzender
+seufzendes
+seufzest
+seufzt
+seufzte
+seufzten
+seufztest
+seufztet
+sexistisch
+sexistische
+sexistischem
+sexistischen
+sexistischer
+sexistisches
+sexual
+sexuale
+sexualem
+sexualen
+sexualer
+sexuales
+sexuell
+sexuelle
+sexuellem
+sexuellen
+sexueller
+sexuelles
+seziere
+sezieren
+sezierend
+sezierende
+sezierendem
+sezierenden
+sezierender
+sezierendes
+sezierst
+seziert
+sezierte
+seziertem
+sezierten
+sezierter
+seziertes
+seziertest
+seziertet
+sibirisch
+sibirische
+sibirischem
+sibirischen
+sibirischer
+sibirisches
+sich
+sichelförmig
+sichelförmige
+sichelförmigem
+sichelförmigen
+sichelförmiger
+sichelförmiges
+sicher
+sichere
+sicherem
+sicheren
+sicherer
+sicherere
+sichererem
+sichereren
+sichererer
+sichereres
+sicheres
+sichergehe
+sichergehen
+sichergehend
+sichergehende
+sichergehendem
+sichergehenden
+sichergehender
+sichergehendes
+sichergehst
+sichergeht
+sichergestellt
+sichergestellte
+sichergestelltem
+sichergestellten
+sichergestellter
+sichergestelltes
+sicherheitsgerichtet
+sicherheitsgerichtete
+sicherheitsgerichtetem
+sicherheitsgerichteten
+sicherheitsgerichteter
+sicherheitsgerichtetes
+sicherheitshalber
+sicherheitskritisch
+sicherheitskritische
+sicherheitskritischem
+sicherheitskritischen
+sicherheitskritischer
+sicherheitskritisches
+sicherheitsrelevant
+sicherheitsrelevante
+sicherheitsrelevantem
+sicherheitsrelevanten
+sicherheitsrelevanter
+sicherheitsrelevantes
+sicherheitstechnisch
+sicherheitstechnische
+sicherheitstechnischem
+sicherheitstechnischen
+sicherheitstechnischer
+sicherheitstechnisches
+sicherlich
+sichern
+sichernd
+sichernde
+sicherndem
+sichernden
+sichernder
+sicherndes
+sicherst
+sicherste
+sicherstelle
+sicherstellen
+sicherstellend
+sicherstellende
+sicherstellendem
+sicherstellenden
+sicherstellender
+sicherstellendes
+sicherstellst
+sicherstellt
+sicherstellte
+sicherstellten
+sicherstelltest
+sicherstelltet
+sicherstem
+sichersten
+sicherster
+sicherstes
+sichert
+sicherte
+sicherten
+sichertest
+sichertet
+sicherungsübereignet
+sicherungsübereignete
+sicherungsübereignetem
+sicherungsübereigneten
+sicherungsübereigneter
+sicherungsübereignetes
+sicherzugehen
+sicherzustellen
+sicherzustellend
+sicherzustellende
+sicherzustellendem
+sicherzustellenden
+sicherzustellender
+sicherzustellendes
+sichre
+sichtbar
+sichtbare
+sichtbarem
+sichtbaren
+sichtbarer
+sichtbares
+sichte
+sichten
+sichtend
+sichtende
+sichtendem
+sichtenden
+sichtender
+sichtendes
+sichtest
+sichtet
+sichtete
+sichteten
+sichtetest
+sichtetet
+sichtlich
+sichtliche
+sichtlichem
+sichtlichen
+sichtlicher
+sichtliches
+sickere
+sickern
+sickernd
+sickernde
+sickerndem
+sickernden
+sickernder
+sickerndes
+sickerst
+sickert
+sickerte
+sickerten
+sickertest
+sickertet
+sickre
+sie
+siebe
+sieben
+siebend
+siebende
+siebendem
+siebenden
+siebender
+siebendes
+siebeneinhalb
+siebenfach
+siebenfache
+siebenfachem
+siebenfachen
+siebenfacher
+siebenfaches
+siebenfältig
+siebenfältige
+siebenfältigem
+siebenfältigen
+siebenfältiger
+siebenfältiges
+siebenhundert
+siebenjährig
+siebenjährige
+siebenjährigem
+siebenjährigen
+siebenjähriger
+siebenjähriges
+siebenmal
+siebenmalig
+siebenmalige
+siebenmaligem
+siebenmaligen
+siebenmaliger
+siebenmaliges
+siebent
+siebente
+siebentel
+siebentem
+siebenten
+siebenter
+siebentes
+siebentägig
+siebentägige
+siebentägigem
+siebentägigen
+siebentägiger
+siebentägiges
+siebst
+siebt
+siebte
+siebtel
+siebtem
+siebten
+siebtens
+siebter
+siebtes
+siebtest
+siebtet
+siebzehn
+siebzehnte
+siebzehntel
+siebzehntem
+siebzehnten
+siebzehnter
+siebzehntes
+siebzig
+siebziger
+siebzigern
+siebzigste
+siebzigstem
+siebzigsten
+siebzigster
+siebzigstes
+siech
+sieche
+siechem
+siechen
+siechend
+siechende
+siechendem
+siechenden
+siechender
+siechendes
+siecher
+sieches
+siechst
+siecht
+siechte
+siechten
+siechtest
+siechtet
+siede
+siedele
+siedeln
+siedelnd
+siedelnde
+siedelndem
+siedelnden
+siedelnder
+siedelndes
+siedelst
+siedelt
+siedelte
+siedelten
+siedeltest
+siedeltet
+sieden
+siedend
+siedende
+siedendem
+siedenden
+siedender
+siedendes
+siedest
+siedet
+siedete
+siedeten
+siedetest
+siedetet
+siedle
+siege
+siegele
+siegeln
+siegelnd
+siegelnde
+siegelndem
+siegelnden
+siegelnder
+siegelndes
+siegelst
+siegelt
+siegelte
+siegelten
+siegeltest
+siegeltet
+siegen
+siegend
+siegende
+siegendem
+siegenden
+siegender
+siegendes
+siegesgewiss
+siegesgewisse
+siegesgewissem
+siegesgewissen
+siegesgewisser
+siegesgewisses
+siegestrunken
+siegestrunkene
+siegestrunkenem
+siegestrunkenen
+siegestrunkener
+siegestrunkenes
+sieghaft
+sieghafte
+sieghaftem
+sieghaften
+sieghafter
+sieghaftes
+siegle
+sieglos
+sieglose
+sieglosem
+sieglosen
+siegloser
+siegloses
+siegreich
+siegreiche
+siegreichem
+siegreichen
+siegreicher
+siegreichere
+siegreicherem
+siegreicheren
+siegreicherer
+siegreicheres
+siegreiches
+siegreichste
+siegreichstem
+siegreichsten
+siegreichster
+siegreichstes
+siegst
+siegt
+siegte
+siegten
+siegtest
+siegtet
+sieh
+siehe
+siehst
+sieht
+sigma
+signalisiere
+signalisieren
+signalisierend
+signalisierende
+signalisierendem
+signalisierenden
+signalisierender
+signalisierendes
+signalisierst
+signalisiert
+signalisierte
+signalisiertem
+signalisierten
+signalisierter
+signalisiertes
+signalisiertest
+signalisiertet
+signiere
+signieren
+signierend
+signierende
+signierendem
+signierenden
+signierender
+signierendes
+signierst
+signiert
+signierte
+signiertem
+signierten
+signierter
+signiertes
+signiertest
+signiertet
+signifikant
+signifikante
+signifikantem
+signifikanten
+signifikanter
+signifikantes
+silberhell
+silberhelle
+silberhellem
+silberhellen
+silberheller
+silberhelles
+silbermetallic
+silbern
+silberne
+silbernem
+silbernen
+silberner
+silbernes
+simpel
+simpelste
+simpelstem
+simpelsten
+simpelster
+simpelstes
+simple
+simplem
+simplen
+simpler
+simplere
+simplerem
+simpleren
+simplerer
+simpleres
+simples
+simulierbar
+simulierbare
+simulierbarem
+simulierbaren
+simulierbarer
+simulierbares
+simuliere
+simulieren
+simulierend
+simulierende
+simulierendem
+simulierenden
+simulierender
+simulierendes
+simulierst
+simuliert
+simulierte
+simuliertem
+simulierten
+simulierter
+simuliertes
+simuliertest
+simuliertet
+simultan
+simultane
+simultanem
+simultanen
+simultaner
+simultanes
+sind
+singe
+singen
+singend
+singende
+singendem
+singenden
+singender
+singendes
+singst
+singt
+sinkbar
+sinkbare
+sinkbarem
+sinkbaren
+sinkbarer
+sinkbares
+sinke
+sinken
+sinkend
+sinkende
+sinkendem
+sinkenden
+sinkender
+sinkendes
+sinkst
+sinkt
+sinnbildlich
+sinnbildliche
+sinnbildlichem
+sinnbildlichen
+sinnbildlicher
+sinnbildliches
+sinne
+sinnen
+sinnend
+sinnende
+sinnendem
+sinnenden
+sinnender
+sinnendes
+sinnenfreudig
+sinnenfreudige
+sinnenfreudigem
+sinnenfreudigen
+sinnenfreudiger
+sinnenfreudiges
+sinnfällig
+sinnfällige
+sinnfälligem
+sinnfälligen
+sinnfälliger
+sinnfälliges
+sinngemäß
+sinngemäße
+sinngemäßem
+sinngemäßen
+sinngemäßer
+sinngemäßes
+sinngetreu
+sinngetreue
+sinngetreuem
+sinngetreuen
+sinngetreuer
+sinngetreues
+sinniere
+sinnieren
+sinnierend
+sinnierende
+sinnierendem
+sinnierenden
+sinnierender
+sinnierendes
+sinnierst
+sinniert
+sinnierte
+sinnierten
+sinniertest
+sinniertet
+sinnig
+sinnige
+sinnigem
+sinnigen
+sinniger
+sinnigere
+sinnigerem
+sinnigeren
+sinnigerer
+sinnigeres
+sinnigerweise
+sinniges
+sinnigste
+sinnigstem
+sinnigsten
+sinnigster
+sinnigstes
+sinnlich
+sinnliche
+sinnlichem
+sinnlichen
+sinnlicher
+sinnliches
+sinnlos
+sinnlose
+sinnlosem
+sinnlosen
+sinnloser
+sinnlosere
+sinnloserem
+sinnloseren
+sinnloserer
+sinnloseres
+sinnloses
+sinnloseste
+sinnlosestem
+sinnlosesten
+sinnlosester
+sinnlosestes
+sinnreich
+sinnreiche
+sinnreichem
+sinnreichen
+sinnreicher
+sinnreiches
+sinnst
+sinnt
+sinnverwandt
+sinnverwandte
+sinnverwandtem
+sinnverwandten
+sinnverwandter
+sinnverwandtes
+sinnvoll
+sinnvolle
+sinnvollem
+sinnvollen
+sinnvoller
+sinnvollerweise
+sinnvolles
+sinnwidrig
+sinnwidrige
+sinnwidrigem
+sinnwidrigen
+sinnwidriger
+sinnwidriges
+sintere
+sintern
+sinternd
+sinternde
+sinterndem
+sinternden
+sinternder
+sinterndes
+sinterst
+sintert
+sinterte
+sinterten
+sintertest
+sintertet
+sintre
+sistiere
+sistieren
+sistierend
+sistierende
+sistierendem
+sistierenden
+sistierender
+sistierendes
+sistierst
+sistiert
+sistierte
+sistiertem
+sistierten
+sistierter
+sistiertes
+sistiertest
+sistiertet
+sittenlos
+sittenlose
+sittenlosem
+sittenlosen
+sittenloser
+sittenlosere
+sittenloserem
+sittenloseren
+sittenloserer
+sittenloseres
+sittenloses
+sittenloseste
+sittenlosestem
+sittenlosesten
+sittenlosester
+sittenlosestes
+sittenstreng
+sittenstrenge
+sittenstrengem
+sittenstrengen
+sittenstrenger
+sittenstrenges
+sittig
+sittige
+sittigem
+sittigen
+sittiger
+sittiges
+sittlich
+sittliche
+sittlichem
+sittlichen
+sittlicher
+sittliches
+sittsam
+sittsame
+sittsamem
+sittsamen
+sittsamer
+sittsamere
+sittsamerem
+sittsameren
+sittsamerer
+sittsameres
+sittsames
+sittsamste
+sittsamstem
+sittsamsten
+sittsamster
+sittsamstes
+situationsabhängig
+situationsabhängige
+situationsabhängigem
+situationsabhängigen
+situationsabhängiger
+situationsabhängiges
+situiert
+situierte
+situiertem
+situierten
+situierter
+situiertes
+sitze
+sitzen
+sitzend
+sitzende
+sitzendem
+sitzenden
+sitzender
+sitzendes
+sitzest
+sitzt
+sixtinisch
+sixtinische
+sixtinischem
+sixtinischen
+sixtinischer
+sixtinisches
+sizilianisch
+sizilianische
+sizilianischem
+sizilianischen
+sizilianischer
+sizilianisches
+skaliert
+skalierte
+skaliertem
+skalierten
+skalierter
+skaliertes
+skalpiere
+skalpieren
+skalpierend
+skalpierende
+skalpierendem
+skalpierenden
+skalpierender
+skalpierendes
+skalpierst
+skalpiert
+skalpierte
+skalpiertem
+skalpierten
+skalpierter
+skalpiertes
+skalpiertest
+skalpiertet
+skandalös
+skandalöse
+skandalösem
+skandalösen
+skandalöser
+skandalöses
+skandinavisch
+skandinavische
+skandinavischem
+skandinavischen
+skandinavischer
+skandinavisches
+skeptisch
+skeptische
+skeptischem
+skeptischen
+skeptischer
+skeptisches
+skizzenhaft
+skizzenhafte
+skizzenhaftem
+skizzenhaften
+skizzenhafter
+skizzenhaftes
+skizziere
+skizzieren
+skizzierend
+skizzierende
+skizzierendem
+skizzierenden
+skizzierender
+skizzierendes
+skizzierst
+skizziert
+skizzierte
+skizziertem
+skizzierten
+skizzierter
+skizziertes
+skizziertest
+skizziertet
+sklavisch
+sklavische
+sklavischem
+sklavischen
+sklavischer
+sklavisches
+skrupellos
+skrupellose
+skrupellosem
+skrupellosen
+skrupelloser
+skrupellosere
+skrupelloserem
+skrupelloseren
+skrupelloserer
+skrupelloseres
+skrupelloses
+skrupelloseste
+skrupellosestem
+skrupellosesten
+skrupellosester
+skrupellosestes
+skurril
+skurrile
+skurrilem
+skurrilen
+skurriler
+skurrilere
+skurrilerem
+skurrileren
+skurrilerer
+skurrileres
+skurriles
+skurrilste
+skurrilstem
+skurrilsten
+skurrilster
+skurrilstes
+slawisch
+slawische
+slawischem
+slawischen
+slawischer
+slawisches
+slowakisch
+slowakische
+slowakischem
+slowakischen
+slowakischer
+slowakisches
+slowenisch
+slowenische
+slowenischem
+slowenischen
+slowenischer
+slowenisches
+smart
+smarte
+smartem
+smarten
+smarter
+smartes
+so
+sobald
+sodann
+sodass
+soeben
+sofern
+soff
+soffen
+soffest
+soffst
+sofft
+sofort
+sofortbeziehbar
+sofortbeziehbare
+sofortbeziehbarem
+sofortbeziehbaren
+sofortbeziehbarer
+sofortbeziehbares
+sofortig
+sofortige
+sofortigem
+sofortigen
+sofortiger
+sofortiges
+soft
+softe
+softem
+soften
+softer
+softes
+softwarekompatibel
+softwarekompatible
+softwarekompatiblem
+softwarekompatiblen
+softwarekompatibler
+softwarekompatibles
+softwaremäßig
+softwaremäßige
+softwaremäßigem
+softwaremäßigen
+softwaremäßiger
+softwaremäßiges
+softwaretechnisch
+softwaretechnische
+softwaretechnischem
+softwaretechnischen
+softwaretechnischer
+softwaretechnisches
+softwaretechnologisch
+softwaretechnologische
+softwaretechnologischem
+softwaretechnologischen
+softwaretechnologischer
+softwaretechnologisches
+sog
+sogar
+sogen
+sogleich
+sogst
+sogt
+solang
+solange
+solch
+solche
+solchem
+solchen
+solcher
+solcherart
+solcherlei
+solchermaßen
+solcherweise
+solches
+solidarisch
+solidarische
+solidarischem
+solidarischen
+solidarischer
+solidarisches
+solidarisiere
+solidarisieren
+solidarisierend
+solidarisierende
+solidarisierendem
+solidarisierenden
+solidarisierender
+solidarisierendes
+solidarisierst
+solidarisiert
+solidarisierte
+solidarisiertem
+solidarisierten
+solidarisierter
+solidarisiertes
+solidarisiertest
+solidarisiertet
+solide
+solidem
+soliden
+solider
+solidere
+soliderem
+solideren
+soliderer
+solideres
+solides
+solideste
+solidestem
+solidesten
+solidester
+solidestes
+soll
+solle
+sollen
+sollend
+sollende
+sollendem
+sollenden
+sollender
+sollendes
+sollst
+sollt
+sollte
+sollten
+solltest
+solltet
+solvent
+solvente
+solventem
+solventen
+solventer
+solventes
+somit
+sommerlich
+sommerliche
+sommerlichem
+sommerlichen
+sommerlicher
+sommerliches
+sommersprossig
+sommersprossige
+sommersprossigem
+sommersprossigen
+sommersprossiger
+sommersprossiges
+sonder
+sonderbar
+sonderbare
+sonderbarem
+sonderbaren
+sonderbarer
+sonderbarere
+sonderbarerem
+sonderbareren
+sonderbarerer
+sonderbareres
+sonderbares
+sonderbarste
+sonderbarstem
+sonderbarsten
+sonderbarster
+sonderbarstes
+sondergleichen
+sonderlich
+sonderliche
+sonderlichem
+sonderlichen
+sonderlicher
+sonderliches
+sondern
+sondiere
+sondieren
+sondierend
+sondierende
+sondierendem
+sondierenden
+sondierender
+sondierendes
+sondierst
+sondiert
+sondierte
+sondiertem
+sondierten
+sondierter
+sondiertes
+sondiertest
+sondiertet
+sonnabends
+sonne
+sonnen
+sonnenklar
+sonnenklare
+sonnenklarem
+sonnenklaren
+sonnenklarer
+sonnenklares
+sonnenverbrannt
+sonnenverbrannte
+sonnenverbranntem
+sonnenverbrannten
+sonnenverbrannter
+sonnenverbranntes
+sonnenüberglänzt
+sonnenüberglänzte
+sonnenüberglänztem
+sonnenüberglänzten
+sonnenüberglänzter
+sonnenüberglänztes
+sonnig
+sonnige
+sonnigem
+sonnigen
+sonniger
+sonnigere
+sonnigerem
+sonnigeren
+sonnigerer
+sonnigeres
+sonniges
+sonnigste
+sonnigstem
+sonnigsten
+sonnigster
+sonnigstes
+sonnst
+sonnt
+sonntags
+sonnte
+sonnten
+sonntest
+sonntet
+sonntäglich
+sonntägliche
+sonntäglichem
+sonntäglichen
+sonntäglicher
+sonntägliches
+sonnverbrannt
+sonnverbrannte
+sonnverbranntem
+sonnverbrannten
+sonnverbrannter
+sonnverbranntes
+sonor
+sonore
+sonorem
+sonoren
+sonorer
+sonores
+sonst
+sonstig
+sonstige
+sonstigem
+sonstigen
+sonstiger
+sonstiges
+sonstwas
+sonstwem
+sonstwie
+sonstwo
+sooft
+sophistisch
+sophistische
+sophistischem
+sophistischen
+sophistischer
+sophistisches
+sorge
+sorgen
+sorgend
+sorgende
+sorgendem
+sorgenden
+sorgender
+sorgendes
+sorgenfrei
+sorgenfreie
+sorgenfreiem
+sorgenfreien
+sorgenfreier
+sorgenfreies
+sorgenlos
+sorgenlose
+sorgenlosem
+sorgenlosen
+sorgenloser
+sorgenloses
+sorgenvoll
+sorgenvolle
+sorgenvollem
+sorgenvollen
+sorgenvoller
+sorgenvolles
+sorgfältig
+sorgfältige
+sorgfältigem
+sorgfältigen
+sorgfältiger
+sorgfältigere
+sorgfältigerem
+sorgfältigeren
+sorgfältigerer
+sorgfältigeres
+sorgfältiges
+sorgfältigste
+sorgfältigstem
+sorgfältigsten
+sorgfältigster
+sorgfältigstes
+sorglich
+sorgliche
+sorglichem
+sorglichen
+sorglicher
+sorgliches
+sorglos
+sorglose
+sorglosem
+sorglosen
+sorgloser
+sorgloses
+sorgsam
+sorgsame
+sorgsamem
+sorgsamen
+sorgsamer
+sorgsamere
+sorgsamerem
+sorgsameren
+sorgsamerer
+sorgsameres
+sorgsames
+sorgsamste
+sorgsamstem
+sorgsamsten
+sorgsamster
+sorgsamstes
+sorgst
+sorgt
+sorgte
+sorgten
+sorgtest
+sorgtet
+sortiere
+sortieren
+sortierend
+sortierende
+sortierendem
+sortierenden
+sortierender
+sortierendes
+sortierst
+sortiert
+sortierte
+sortiertem
+sortierten
+sortierter
+sortiertes
+sortiertest
+sortiertet
+soundso
+soundsoviel
+souverän
+souveräne
+souveränem
+souveränen
+souveräner
+souveränes
+soviel
+soviele
+sovielem
+sovielen
+sovieler
+sovieles
+sowas
+soweit
+sowie
+sowieso
+sowjetisch
+sowjetische
+sowjetischem
+sowjetischen
+sowjetischer
+sowjetisches
+sowjetrussisch
+sowjetrussische
+sowjetrussischem
+sowjetrussischen
+sowjetrussischer
+sowjetrussisches
+sowohl
+sozial
+sozialdemokratisch
+sozialdemokratische
+sozialdemokratischem
+sozialdemokratischen
+sozialdemokratischer
+sozialdemokratisches
+soziale
+sozialem
+sozialen
+sozialer
+sozialere
+sozialerem
+sozialeren
+sozialerer
+sozialeres
+soziales
+sozialisiere
+sozialisieren
+sozialisierend
+sozialisierende
+sozialisierendem
+sozialisierenden
+sozialisierender
+sozialisierendes
+sozialisierst
+sozialisiert
+sozialisierte
+sozialisiertem
+sozialisierten
+sozialisierter
+sozialisiertes
+sozialisiertest
+sozialisiertet
+sozialistisch
+sozialistische
+sozialistischem
+sozialistischen
+sozialistischer
+sozialistisches
+sozialkritisch
+sozialkritische
+sozialkritischem
+sozialkritischen
+sozialkritischer
+sozialkritisches
+sozialliberal
+sozialliberale
+sozialliberalem
+sozialliberalen
+sozialliberaler
+sozialliberales
+sozialpolitisch
+sozialpolitische
+sozialpolitischem
+sozialpolitischen
+sozialpolitischer
+sozialpolitisches
+sozialpädagogisch
+sozialpädagogische
+sozialpädagogischem
+sozialpädagogischen
+sozialpädagogischer
+sozialpädagogisches
+sozialste
+sozialstem
+sozialsten
+sozialster
+sozialstes
+sozialwissenschaftlich
+sozialwissenschaftliche
+sozialwissenschaftlichem
+sozialwissenschaftlichen
+sozialwissenschaftlicher
+sozialwissenschaftliches
+sozialökonomisch
+sozialökonomische
+sozialökonomischem
+sozialökonomischen
+sozialökonomischer
+sozialökonomisches
+soziodemografisch
+soziodemografische
+soziodemografischem
+soziodemografischen
+soziodemografischer
+soziodemografisches
+soziographisch
+soziographische
+soziographischem
+soziographischen
+soziographischer
+soziographisches
+soziologisch
+soziologische
+soziologischem
+soziologischen
+soziologischer
+soziologisches
+soziotechnologisch
+soziotechnologische
+soziotechnologischem
+soziotechnologischen
+soziotechnologischer
+soziotechnologisches
+sozusagen
+spachtele
+spachteln
+spachtelnd
+spachtelnde
+spachtelndem
+spachtelnden
+spachtelnder
+spachtelndes
+spachtelst
+spachtelt
+spachtelte
+spachtelten
+spachteltest
+spachteltet
+spachtle
+spaltbar
+spaltbare
+spaltbarem
+spaltbaren
+spaltbarer
+spaltbares
+spalte
+spalten
+spaltend
+spaltende
+spaltendem
+spaltenden
+spaltender
+spaltendes
+spaltenlang
+spaltenlange
+spaltenlangem
+spaltenlangen
+spaltenlanger
+spaltenlanges
+spaltenweise
+spaltenweisem
+spaltenweisen
+spaltenweiser
+spaltenweises
+spaltest
+spaltet
+spaltete
+spalteten
+spaltetest
+spaltetet
+spanabhebend
+spanabhebende
+spanabhebendem
+spanabhebenden
+spanabhebender
+spanabhebendes
+spanisch
+spanische
+spanischem
+spanischen
+spanischer
+spanisches
+spanlos
+spanlose
+spanlosem
+spanlosen
+spanloser
+spanloses
+spanne
+spannen
+spannend
+spannende
+spannendem
+spannenden
+spannender
+spannendere
+spannenderem
+spannenderen
+spannenderer
+spannenderes
+spannendes
+spannendste
+spannendstem
+spannendsten
+spannendster
+spannendstes
+spannkräftig
+spannkräftige
+spannkräftigem
+spannkräftigen
+spannkräftiger
+spannkräftiges
+spannst
+spannt
+spannte
+spannten
+spanntest
+spanntet
+spannungsgeladen
+spannungsgeladene
+spannungsgeladenem
+spannungsgeladenen
+spannungsgeladener
+spannungsgeladenes
+spannungsversorgt
+spannungsversorgte
+spannungsversorgtem
+spannungsversorgten
+spannungsversorgter
+spannungsversorgtes
+spare
+sparen
+sparend
+sparende
+sparendem
+sparenden
+sparender
+sparendes
+sparsam
+sparsame
+sparsamem
+sparsamen
+sparsamer
+sparsamere
+sparsamerem
+sparsameren
+sparsamerer
+sparsameres
+sparsames
+sparsamste
+sparsamstem
+sparsamsten
+sparsamster
+sparsamstes
+sparst
+spart
+sparte
+sparten
+spartest
+spartet
+spaziere
+spazieren
+spazierend
+spazierende
+spazierendem
+spazierenden
+spazierender
+spazierendes
+spazierst
+spaziert
+spazierte
+spazierten
+spaziertest
+spaziertet
+spaße
+spaßen
+spaßend
+spaßende
+spaßendem
+spaßenden
+spaßender
+spaßendes
+spaßeshalber
+spaßest
+spaßhaft
+spaßhafte
+spaßhaftem
+spaßhaften
+spaßhafter
+spaßhaftes
+spaßig
+spaßige
+spaßigem
+spaßigen
+spaßiger
+spaßigere
+spaßigerem
+spaßigeren
+spaßigerer
+spaßigeres
+spaßiges
+spaßigste
+spaßigstem
+spaßigsten
+spaßigster
+spaßigstes
+spaßt
+spaßte
+spaßten
+spaßtest
+spaßtet
+spe
+speckig
+speckige
+speckigem
+speckigen
+speckiger
+speckiges
+spediere
+spedieren
+spedierend
+spedierende
+spedierendem
+spedierenden
+spedierender
+spedierendes
+spedierst
+spediert
+spedierte
+spediertem
+spedierten
+spedierter
+spediertes
+spediertest
+spediertet
+speib
+speibe
+speiben
+speibend
+speibende
+speibendem
+speibenden
+speibender
+speibendes
+speibst
+speibt
+speichere
+speicherintensiv
+speicherintensive
+speicherintensivem
+speicherintensiven
+speicherintensiver
+speicherintensives
+speichern
+speichernd
+speichernde
+speicherndem
+speichernden
+speichernder
+speicherndes
+speicherplatzeffizient
+speicherplatzeffiziente
+speicherplatzeffizientem
+speicherplatzeffizienten
+speicherplatzeffizienter
+speicherplatzeffizientes
+speicherplatzintensiv
+speicherplatzintensive
+speicherplatzintensivem
+speicherplatzintensiven
+speicherplatzintensiver
+speicherplatzintensives
+speicherprogrammierbar
+speicherprogrammierbare
+speicherprogrammierbarem
+speicherprogrammierbaren
+speicherprogrammierbarer
+speicherprogrammierbares
+speicherprogrammiert
+speicherprogrammierte
+speicherprogrammiertem
+speicherprogrammierten
+speicherprogrammierter
+speicherprogrammiertes
+speicherst
+speichert
+speicherte
+speicherten
+speichertest
+speichertet
+speichre
+speie
+speien
+speiend
+speiende
+speiendem
+speienden
+speiender
+speiendes
+speise
+speisen
+speisend
+speisende
+speisendem
+speisenden
+speisender
+speisendes
+speisest
+speist
+speiste
+speisten
+speistest
+speistet
+speit
+spektakulär
+spektakuläre
+spektakulärem
+spektakulären
+spektakulärer
+spektakulärere
+spektakulärerem
+spektakuläreren
+spektakulärerer
+spektakuläreres
+spektakuläres
+spektakulärste
+spektakulärstem
+spektakulärsten
+spektakulärster
+spektakulärstes
+spektral
+spektrale
+spektralem
+spektralen
+spektraler
+spektrales
+spekulativ
+spekulative
+spekulativem
+spekulativen
+spekulativer
+spekulatives
+spekuliere
+spekulieren
+spekulierend
+spekulierende
+spekulierendem
+spekulierenden
+spekulierender
+spekulierendes
+spekulierst
+spekuliert
+spekulierte
+spekulierten
+spekuliertest
+spekuliertet
+spende
+spenden
+spendend
+spendende
+spendendem
+spendenden
+spendender
+spendendes
+spendest
+spendet
+spendete
+spendeten
+spendetest
+spendetet
+spendiere
+spendieren
+spendierend
+spendierende
+spendierendem
+spendierenden
+spendierender
+spendierendes
+spendierst
+spendiert
+spendierte
+spendiertem
+spendierten
+spendierter
+spendiertes
+spendiertest
+spendiertet
+sperrbar
+sperrbare
+sperrbarem
+sperrbaren
+sperrbarer
+sperrbares
+sperre
+sperren
+sperrend
+sperrende
+sperrendem
+sperrenden
+sperrender
+sperrendes
+sperrig
+sperrige
+sperrigem
+sperrigen
+sperriger
+sperriges
+sperrst
+sperrt
+sperrte
+sperrten
+sperrtest
+sperrtet
+spesenfrei
+spesenfreie
+spesenfreiem
+spesenfreien
+spesenfreier
+spesenfreies
+spezial
+speziale
+spezialem
+spezialen
+spezialer
+speziales
+spezialisiere
+spezialisieren
+spezialisierend
+spezialisierende
+spezialisierendem
+spezialisierenden
+spezialisierender
+spezialisierendes
+spezialisierst
+spezialisiert
+spezialisierte
+spezialisiertem
+spezialisierten
+spezialisierter
+spezialisiertes
+spezialisiertest
+spezialisiertet
+speziell
+spezielle
+speziellem
+speziellen
+spezieller
+speziellere
+speziellerem
+spezielleren
+speziellerer
+spezielleres
+spezielles
+speziellste
+speziellstem
+speziellsten
+speziellster
+speziellstes
+spezifisch
+spezifische
+spezifischem
+spezifischen
+spezifischer
+spezifischere
+spezifischerem
+spezifischeren
+spezifischerer
+spezifischeres
+spezifisches
+spezifischste
+spezifischstem
+spezifischsten
+spezifischster
+spezifischstes
+spezifiziere
+spezifizieren
+spezifizierend
+spezifizierende
+spezifizierendem
+spezifizierenden
+spezifizierender
+spezifizierendes
+spezifizierst
+spezifiziert
+spezifizierte
+spezifiziertem
+spezifizierten
+spezifizierter
+spezifiziertes
+spezifiziertest
+spezifiziertet
+sphärisch
+sphärische
+sphärischem
+sphärischen
+sphärischer
+sphärisches
+spie
+spieen
+spiegelblank
+spiegelblanke
+spiegelblankem
+spiegelblanken
+spiegelblanker
+spiegelblankes
+spiegele
+spiegelglatt
+spiegelglatte
+spiegelglattem
+spiegelglatten
+spiegelglatter
+spiegelglattes
+spiegeln
+spiegelnd
+spiegelnde
+spiegelndem
+spiegelnden
+spiegelnder
+spiegelndes
+spiegelst
+spiegelt
+spiegelte
+spiegelten
+spiegeltest
+spiegeltet
+spiegle
+spielbar
+spielbare
+spielbarem
+spielbaren
+spielbarer
+spielbares
+spiele
+spielen
+spielend
+spielende
+spielendem
+spielenden
+spielender
+spielendes
+spielerisch
+spielerische
+spielerischem
+spielerischen
+spielerischer
+spielerisches
+spielfrei
+spielfreie
+spielfreiem
+spielfreien
+spielfreier
+spielfreies
+spielfreudig
+spielfreudige
+spielfreudigem
+spielfreudigen
+spielfreudiger
+spielfreudiges
+spielst
+spielt
+spielte
+spielten
+spieltest
+spieltet
+spien
+spiest
+spiet
+spießbürgerlich
+spießbürgerliche
+spießbürgerlichem
+spießbürgerlichen
+spießbürgerlicher
+spießbürgerliches
+spieße
+spießen
+spießend
+spießende
+spießendem
+spießenden
+spießender
+spießendes
+spießest
+spießig
+spießige
+spießigem
+spießigen
+spießiger
+spießiges
+spießt
+spießte
+spießten
+spießtest
+spießtet
+spindeldürr
+spindeldürre
+spindeldürrem
+spindeldürren
+spindeldürrer
+spindeldürres
+spinne
+spinnen
+spinnend
+spinnende
+spinnendem
+spinnenden
+spinnender
+spinnendes
+spinnst
+spinnt
+spioniere
+spionieren
+spionierend
+spionierende
+spionierendem
+spionierenden
+spionierender
+spionierendes
+spionierst
+spioniert
+spionierte
+spionierten
+spioniertest
+spioniertet
+spiralförmig
+spiralförmige
+spiralförmigem
+spiralförmigen
+spiralförmiger
+spiralförmiges
+spiritistisch
+spiritistische
+spiritistischem
+spiritistischen
+spiritistischer
+spiritistisches
+spitz
+spitzbübisch
+spitzbübische
+spitzbübischem
+spitzbübischen
+spitzbübischer
+spitzbübisches
+spitze
+spitzele
+spitzeln
+spitzelnd
+spitzelnde
+spitzelndem
+spitzelnden
+spitzelnder
+spitzelndes
+spitzelst
+spitzelt
+spitzelte
+spitzelten
+spitzeltest
+spitzeltet
+spitzem
+spitzen
+spitzend
+spitzende
+spitzendem
+spitzenden
+spitzender
+spitzendes
+spitzer
+spitzes
+spitzest
+spitzfindig
+spitzfindige
+spitzfindigem
+spitzfindigen
+spitzfindiger
+spitzfindiges
+spitzig
+spitzige
+spitzigem
+spitzigen
+spitziger
+spitziges
+spitzle
+spitzt
+spitzte
+spitzten
+spitztest
+spitztet
+spitzwinkelig
+spitzwinkelige
+spitzwinkeligem
+spitzwinkeligen
+spitzwinkeliger
+spitzwinkeliges
+spitzwinklig
+spitzwinklige
+spitzwinkligem
+spitzwinkligen
+spitzwinkliger
+spitzwinkliges
+spleenig
+spleenige
+spleenigem
+spleenigen
+spleeniger
+spleeniges
+splitte
+splitten
+splittend
+splittende
+splittendem
+splittenden
+splittender
+splittendes
+splittere
+splitterfrei
+splitterfreie
+splitterfreiem
+splitterfreien
+splitterfreier
+splitterfreies
+splitterig
+splitterige
+splitterigem
+splitterigen
+splitteriger
+splitteriges
+splittern
+splitternackt
+splitternackte
+splitternacktem
+splitternackten
+splitternackter
+splitternacktes
+splitternd
+splitternde
+splitterndem
+splitternden
+splitternder
+splitterndes
+splitterst
+splittert
+splitterte
+splitterten
+splittertest
+splittertet
+splittest
+splittet
+splittete
+splitteten
+splittetest
+splittetet
+splittre
+splittrig
+splittrige
+splittrigem
+splittrigen
+splittriger
+splittriges
+spontan
+spontane
+spontanem
+spontanen
+spontaner
+spontanere
+spontanerem
+spontaneren
+spontanerer
+spontaneres
+spontanes
+spontanste
+spontanstem
+spontansten
+spontanster
+spontanstes
+sporadisch
+sporadische
+sporadischem
+sporadischen
+sporadischer
+sporadisches
+sporne
+spornen
+spornend
+spornende
+spornendem
+spornenden
+spornender
+spornendes
+spornst
+spornstreichs
+spornt
+spornte
+spornten
+sporntest
+sporntet
+sportlich
+sportliche
+sportlichem
+sportlichen
+sportlicher
+sportliches
+sporttreibe
+sporttreiben
+sporttreibend
+sporttreibende
+sporttreibendem
+sporttreibenden
+sporttreibender
+sporttreibendes
+sporttreibt
+spottbillig
+spottbillige
+spottbilligem
+spottbilligen
+spottbilliger
+spottbilliges
+spotte
+spotten
+spottend
+spottende
+spottendem
+spottenden
+spottender
+spottendes
+spottest
+spottet
+spottete
+spotteten
+spottetest
+spottetet
+sprach
+sprachabhängig
+sprachabhängige
+sprachabhängigem
+sprachabhängigen
+sprachabhängiger
+sprachabhängiges
+sprachen
+sprachest
+sprachkundig
+sprachkundige
+sprachkundigem
+sprachkundigen
+sprachkundiger
+sprachkundiges
+sprachlich
+sprachliche
+sprachlichem
+sprachlichen
+sprachlicher
+sprachliches
+sprachlos
+sprachlose
+sprachlosem
+sprachlosen
+sprachloser
+sprachloses
+sprachspezifisch
+sprachspezifische
+sprachspezifischem
+sprachspezifischen
+sprachspezifischer
+sprachspezifisches
+sprachst
+spracht
+sprachunabhängig
+sprachunabhängige
+sprachunabhängigem
+sprachunabhängigen
+sprachunabhängiger
+sprachunabhängiges
+sprang
+sprangen
+sprangst
+sprangt
+spraye
+sprayen
+sprayend
+sprayende
+sprayendem
+sprayenden
+sprayender
+sprayendes
+sprayst
+sprayt
+sprayte
+sprayten
+spraytest
+spraytet
+spreche
+sprechen
+sprechend
+sprechende
+sprechendem
+sprechenden
+sprechender
+sprechendes
+sprecht
+spreize
+spreizen
+spreizend
+spreizende
+spreizendem
+spreizenden
+spreizender
+spreizendes
+spreizest
+spreizt
+spreizte
+spreizten
+spreiztest
+spreiztet
+sprenge
+sprengen
+sprengend
+sprengende
+sprengendem
+sprengenden
+sprengender
+sprengendes
+sprengst
+sprengt
+sprengte
+sprengten
+sprengtest
+sprengtet
+sprenkele
+sprenkeln
+sprenkelnd
+sprenkelnde
+sprenkelndem
+sprenkelnden
+sprenkelnder
+sprenkelndes
+sprenkelst
+sprenkelt
+sprenkelte
+sprenkelten
+sprenkeltest
+sprenkeltet
+sprenkle
+sprich
+sprichst
+spricht
+sprichwörtlich
+sprichwörtliche
+sprichwörtlichem
+sprichwörtlichen
+sprichwörtlicher
+sprichwörtliches
+sprieße
+sprießen
+sprießend
+sprießende
+sprießendem
+sprießenden
+sprießender
+sprießendes
+sprießest
+sprießt
+sprießte
+sprießten
+sprießtest
+sprießtet
+springe
+springen
+springend
+springende
+springendem
+springenden
+springender
+springendes
+springst
+springt
+springte
+springten
+springtest
+springtet
+sprinte
+sprinten
+sprintend
+sprintende
+sprintendem
+sprintenden
+sprintender
+sprintendes
+sprintest
+sprintet
+sprintete
+sprinteten
+sprintetest
+sprintetet
+spritze
+spritzen
+spritzend
+spritzende
+spritzendem
+spritzenden
+spritzender
+spritzendes
+spritzest
+spritzig
+spritzige
+spritzigem
+spritzigen
+spritziger
+spritzigere
+spritzigerem
+spritzigeren
+spritzigerer
+spritzigeres
+spritziges
+spritzigste
+spritzigstem
+spritzigsten
+spritzigster
+spritzigstes
+spritzt
+spritzte
+spritzten
+spritztest
+spritztet
+spritzwassergeschützt
+spritzwassergeschützte
+spritzwassergeschütztem
+spritzwassergeschützten
+spritzwassergeschützter
+spritzwassergeschütztes
+spross
+sprossen
+sprossest
+sprosst
+spruchreif
+spruchreife
+spruchreifem
+spruchreifen
+spruchreifer
+spruchreifes
+sprudele
+sprudeln
+sprudelnd
+sprudelnde
+sprudelndem
+sprudelnden
+sprudelnder
+sprudelndes
+sprudelst
+sprudelt
+sprudelte
+sprudelten
+sprudeltest
+sprudeltet
+sprudle
+sprunghaft
+sprunghafte
+sprunghaftem
+sprunghaften
+sprunghafter
+sprunghaftere
+sprunghafterem
+sprunghafteren
+sprunghafterer
+sprunghafteres
+sprunghaftes
+sprunghafteste
+sprunghaftestem
+sprunghaftesten
+sprunghaftester
+sprunghaftestes
+spräche
+sprächen
+sprächest
+sprächet
+spröd
+spröde
+sprödem
+spröden
+spröder
+sprödere
+spröderem
+spröderen
+spröderer
+spröderes
+sprödes
+sprödste
+sprödstem
+sprödsten
+sprödster
+sprödstes
+sprühe
+sprühen
+sprühend
+sprühende
+sprühendem
+sprühenden
+sprühender
+sprühendes
+sprühst
+sprüht
+sprühte
+sprühten
+sprühtest
+sprühtet
+spucke
+spucken
+spuckend
+spuckende
+spuckendem
+spuckenden
+spuckender
+spuckendes
+spuckst
+spuckt
+spuckte
+spuckten
+spucktest
+spucktet
+spuke
+spuken
+spukend
+spukende
+spukendem
+spukenden
+spukender
+spukendes
+spukhaft
+spukhafte
+spukhaftem
+spukhaften
+spukhafter
+spukhaftes
+spukst
+spukt
+spukte
+spukten
+spuktest
+spuktet
+spule
+spulen
+spulend
+spulende
+spulendem
+spulenden
+spulender
+spulendes
+spulst
+spult
+spulte
+spulten
+spultest
+spultet
+spurlos
+spurlose
+spurlosem
+spurlosen
+spurloser
+spurloses
+spurte
+spurten
+spurtend
+spurtende
+spurtendem
+spurtenden
+spurtender
+spurtendes
+spurtest
+spurtet
+spurtete
+spurteten
+spurtetest
+spurtetet
+spähe
+spähen
+spähend
+spähende
+spähendem
+spähenden
+spähender
+spähendes
+spähst
+späht
+spähte
+spähten
+spähtest
+spähtet
+spärlich
+spärliche
+spärlichem
+spärlichen
+spärlicher
+spärlichere
+spärlicherem
+spärlicheren
+spärlicherer
+spärlicheres
+spärliches
+spärlichste
+spärlichstem
+spärlichsten
+spärlichster
+spärlichstes
+spät
+späte
+spätem
+späten
+später
+spätere
+späterem
+späteren
+späterer
+späteres
+späterhin
+spätes
+späteste
+spätestem
+spätesten
+spätestens
+spätester
+spätestes
+spätminoisch
+spätminoische
+spätminoischem
+spätminoischen
+spätminoischer
+spätminoisches
+spätmykenisch
+spätmykenische
+spätmykenischem
+spätmykenischen
+spätmykenischer
+spätmykenisches
+spöttele
+spötteln
+spöttelnd
+spöttelnde
+spöttelndem
+spöttelnden
+spöttelnder
+spöttelndes
+spöttelst
+spöttelt
+spöttelte
+spöttelten
+spötteltest
+spötteltet
+spöttisch
+spöttische
+spöttischem
+spöttischen
+spöttischer
+spöttisches
+spöttle
+spüle
+spülen
+spülend
+spülende
+spülendem
+spülenden
+spülender
+spülendes
+spülst
+spült
+spülte
+spülten
+spültest
+spültet
+spürbar
+spürbare
+spürbarem
+spürbaren
+spürbarer
+spürbarere
+spürbarerem
+spürbareren
+spürbarerer
+spürbareres
+spürbares
+spürbarste
+spürbarstem
+spürbarsten
+spürbarster
+spürbarstes
+spüre
+spüren
+spürend
+spürende
+spürendem
+spürenden
+spürender
+spürendes
+spürst
+spürt
+spürte
+spürten
+spürtest
+spürtet
+staatenlos
+staatenlose
+staatenlosem
+staatenlosen
+staatenloser
+staatenloses
+staatlich
+staatliche
+staatlichem
+staatlichen
+staatlicher
+staatliches
+staatsbürgerlich
+staatsbürgerliche
+staatsbürgerlichem
+staatsbürgerlichen
+staatsbürgerlicher
+staatsbürgerliches
+staatseigen
+staatseigene
+staatseigenem
+staatseigenen
+staatseigener
+staatseigenes
+staatsfeindlich
+staatsfeindliche
+staatsfeindlichem
+staatsfeindlichen
+staatsfeindlicher
+staatsfeindliches
+staatsklug
+staatskluge
+staatsklugem
+staatsklugen
+staatskluger
+staatskluges
+staatsmännisch
+staatsmännische
+staatsmännischem
+staatsmännischen
+staatsmännischer
+staatsmännisches
+staatsrechtlich
+staatsrechtliche
+staatsrechtlichem
+staatsrechtlichen
+staatsrechtlicher
+staatsrechtliches
+staatsverbürgt
+staatsverbürgte
+staatsverbürgtem
+staatsverbürgten
+staatsverbürgter
+staatsverbürgtes
+stabil
+stabile
+stabilem
+stabilen
+stabiler
+stabilere
+stabilerem
+stabileren
+stabilerer
+stabileres
+stabiles
+stabilisiere
+stabilisieren
+stabilisierend
+stabilisierende
+stabilisierendem
+stabilisierenden
+stabilisierender
+stabilisierendes
+stabilisierst
+stabilisiert
+stabilisierte
+stabilisiertem
+stabilisierten
+stabilisierter
+stabilisiertes
+stabilisiertest
+stabilisiertet
+stabilste
+stabilstem
+stabilsten
+stabilster
+stabilstes
+stach
+stachele
+stacheln
+stachelnd
+stachelnde
+stachelndem
+stachelnden
+stachelnder
+stachelndes
+stachelst
+stachelt
+stachelte
+stachelten
+stacheltest
+stacheltet
+stachen
+stachest
+stachle
+stachlig
+stachlige
+stachligem
+stachligen
+stachliger
+stachligere
+stachligerem
+stachligeren
+stachligerer
+stachligeres
+stachliges
+stachligste
+stachligstem
+stachligsten
+stachligster
+stachligstes
+stachst
+stacht
+stadtbekannt
+stadtbekannte
+stadtbekanntem
+stadtbekannten
+stadtbekannter
+stadtbekanntes
+staffele
+staffelförmig
+staffelförmige
+staffelförmigem
+staffelförmigen
+staffelförmiger
+staffelförmigere
+staffelförmigerem
+staffelförmigeren
+staffelförmigerer
+staffelförmigeres
+staffelförmiges
+staffelförmigste
+staffelförmigstem
+staffelförmigsten
+staffelförmigster
+staffelförmigstes
+staffeln
+staffelnd
+staffelnde
+staffelndem
+staffelnden
+staffelnder
+staffelndes
+staffelst
+staffelt
+staffelte
+staffelten
+staffeltest
+staffeltet
+staffiere
+staffieren
+staffierend
+staffierende
+staffierendem
+staffierenden
+staffierender
+staffierendes
+staffierst
+staffiert
+staffierte
+staffiertem
+staffierten
+staffierter
+staffiertes
+staffiertest
+staffiertet
+staffle
+stagniere
+stagnieren
+stagnierend
+stagnierende
+stagnierendem
+stagnierenden
+stagnierender
+stagnierendes
+stagnierst
+stagniert
+stagnierte
+stagnierten
+stagniertest
+stagniertet
+stahl
+stahlblau
+stahlblaue
+stahlblauem
+stahlblauen
+stahlblauer
+stahlblaues
+stahlen
+stahlhart
+stahlharte
+stahlhartem
+stahlharten
+stahlharter
+stahlhartes
+stahlst
+stahlt
+stak
+staken
+stakest
+stakst
+stakt
+stalinistisch
+stalinistische
+stalinistischem
+stalinistischen
+stalinistischer
+stalinistisches
+stamme
+stammele
+stammeln
+stammelnd
+stammelnde
+stammelndem
+stammelnden
+stammelnder
+stammelndes
+stammelst
+stammelt
+stammelte
+stammelten
+stammeltest
+stammeltet
+stammen
+stammend
+stammende
+stammendem
+stammenden
+stammender
+stammendes
+stammle
+stammst
+stammt
+stammte
+stammten
+stammtest
+stammtet
+stammverwandt
+stammverwandte
+stammverwandtem
+stammverwandten
+stammverwandter
+stammverwandtes
+stampfe
+stampfen
+stampfend
+stampfende
+stampfendem
+stampfenden
+stampfender
+stampfendes
+stampfst
+stampft
+stampfte
+stampften
+stampftest
+stampftet
+stand
+standardisiere
+standardisieren
+standardisierend
+standardisierende
+standardisierendem
+standardisierenden
+standardisierender
+standardisierendes
+standardisierst
+standardisiert
+standardisierte
+standardisiertem
+standardisierten
+standardisierter
+standardisiertes
+standardisiertest
+standardisiertet
+standardmäßig
+standardmäßige
+standardmäßigem
+standardmäßigen
+standardmäßiger
+standardmäßiges
+standen
+standesamtlich
+standesamtliche
+standesamtlichem
+standesamtlichen
+standesamtlicher
+standesamtliches
+standesgemäß
+standesgemäße
+standesgemäßem
+standesgemäßen
+standesgemäßer
+standesgemäßes
+standesmäßig
+standesmäßige
+standesmäßigem
+standesmäßigen
+standesmäßiger
+standesmäßiges
+standest
+standet
+standfest
+standfeste
+standfestem
+standfesten
+standfester
+standfestes
+standgehalten
+standhaft
+standhafte
+standhaftem
+standhaften
+standhafter
+standhaftere
+standhafterem
+standhafteren
+standhafterer
+standhafteres
+standhaftes
+standhafteste
+standhaftestem
+standhaftesten
+standhaftester
+standhaftestes
+standhalte
+standhalten
+standhaltend
+standhaltende
+standhaltendem
+standhaltenden
+standhaltender
+standhaltendes
+standhaltet
+standhielt
+standhielten
+standhieltest
+standhieltet
+standhieltst
+standhält
+standhältst
+standrechtlich
+standrechtliche
+standrechtlichem
+standrechtlichen
+standrechtlicher
+standrechtliches
+standst
+stank
+stanken
+stankest
+stankst
+stankt
+stanze
+stanzen
+stanzend
+stanzende
+stanzendem
+stanzenden
+stanzender
+stanzendes
+stanzest
+stanzt
+stanzte
+stanzten
+stanztest
+stanztet
+stapelbar
+stapelbare
+stapelbarem
+stapelbaren
+stapelbarer
+stapelbares
+stapele
+stapeln
+stapelnd
+stapelnde
+stapelndem
+stapelnden
+stapelnder
+stapelndes
+stapelst
+stapelt
+stapelte
+stapelten
+stapeltest
+stapeltet
+stapfe
+stapfen
+stapfend
+stapfende
+stapfendem
+stapfenden
+stapfender
+stapfendes
+stapfst
+stapft
+stapfte
+stapften
+stapftest
+stapftet
+staple
+starb
+starben
+starbst
+starbt
+stark
+starke
+starkem
+starken
+starker
+starkes
+starr
+starre
+starrem
+starren
+starrend
+starrende
+starrendem
+starrenden
+starrender
+starrendes
+starrer
+starrere
+starrerem
+starreren
+starrerer
+starreres
+starres
+starrköpfig
+starrköpfige
+starrköpfigem
+starrköpfigen
+starrköpfiger
+starrköpfigere
+starrköpfigerem
+starrköpfigeren
+starrköpfigerer
+starrköpfigeres
+starrköpfiges
+starrköpfigste
+starrköpfigstem
+starrköpfigsten
+starrköpfigster
+starrköpfigstes
+starrsinnig
+starrsinnige
+starrsinnigem
+starrsinnigen
+starrsinniger
+starrsinnigere
+starrsinnigerem
+starrsinnigeren
+starrsinnigerer
+starrsinnigeres
+starrsinniges
+starrsinnigste
+starrsinnigstem
+starrsinnigsten
+starrsinnigster
+starrsinnigstes
+starrst
+starrste
+starrstem
+starrsten
+starrster
+starrstes
+starrt
+starrte
+starrten
+starrtest
+starrtet
+startbereit
+startbereite
+startbereitem
+startbereiten
+startbereiter
+startbereites
+starte
+starten
+startend
+startende
+startendem
+startenden
+startender
+startendes
+startest
+startet
+startete
+starteten
+startetest
+startetet
+startklar
+startklare
+startklarem
+startklaren
+startklarer
+startklares
+stationiere
+stationieren
+stationierend
+stationierende
+stationierendem
+stationierenden
+stationierender
+stationierendes
+stationierst
+stationiert
+stationierte
+stationiertem
+stationierten
+stationierter
+stationiertes
+stationiertest
+stationiertet
+stationär
+stationäre
+stationärem
+stationären
+stationärer
+stationäres
+statisch
+statische
+statischem
+statischen
+statischer
+statisches
+statistisch
+statistische
+statistischem
+statistischen
+statistischer
+statistisches
+statt
+stattdessen
+statte
+statten
+stattend
+stattende
+stattendem
+stattenden
+stattender
+stattendes
+stattest
+stattet
+stattete
+statteten
+stattetest
+stattetet
+stattfand
+stattfanden
+stattfandest
+stattfandet
+stattfandst
+stattfinde
+stattfinden
+stattfindend
+stattfindende
+stattfindendem
+stattfindenden
+stattfindender
+stattfindendes
+stattfindest
+stattfindet
+stattfindete
+stattfindeten
+stattfindetest
+stattfindetet
+stattgebe
+stattgeben
+stattgebend
+stattgebende
+stattgebendem
+stattgebenden
+stattgebender
+stattgebendes
+stattgebt
+stattgefunden
+stattgefundene
+stattgefundenem
+stattgefundenen
+stattgefundener
+stattgefundenes
+stattgegeben
+stattgegebene
+stattgegebenem
+stattgegebenen
+stattgegebener
+stattgegebenes
+statthaft
+statthafte
+statthaftem
+statthaften
+statthafter
+statthaftes
+stattlich
+stattliche
+stattlichem
+stattlichen
+stattlicher
+stattlichere
+stattlicherem
+stattlicheren
+stattlicherer
+stattlicheres
+stattliches
+stattlichste
+stattlichstem
+stattlichsten
+stattlichster
+stattlichstes
+statuenhaft
+statuenhafte
+statuenhaftem
+statuenhaften
+statuenhafter
+statuenhaftes
+statuiere
+statuieren
+statuierend
+statuierende
+statuierendem
+statuierenden
+statuierender
+statuierendes
+statuierst
+statuiert
+statuierte
+statuiertem
+statuierten
+statuierter
+statuiertes
+statuiertest
+statuiertet
+staubdicht
+staubdichte
+staubdichtem
+staubdichten
+staubdichter
+staubdichtes
+staube
+stauben
+staubend
+staubende
+staubendem
+staubenden
+staubender
+staubendes
+staubfrei
+staubfreie
+staubfreiem
+staubfreien
+staubfreier
+staubfreies
+staubhaltig
+staubhaltige
+staubhaltigem
+staubhaltigen
+staubhaltiger
+staubhaltigere
+staubhaltigerem
+staubhaltigeren
+staubhaltigerer
+staubhaltigeres
+staubhaltiges
+staubhaltigste
+staubhaltigstem
+staubhaltigsten
+staubhaltigster
+staubhaltigstes
+staubig
+staubige
+staubigem
+staubigen
+staubiger
+staubigere
+staubigerem
+staubigeren
+staubigerer
+staubigeres
+staubiges
+staubigste
+staubigstem
+staubigsten
+staubigster
+staubigstes
+staubst
+staubt
+staubte
+staubten
+staubtest
+staubtet
+stauche
+stauchen
+stauchend
+stauchende
+stauchendem
+stauchenden
+stauchender
+stauchendes
+stauchst
+staucht
+stauchte
+stauchten
+stauchtest
+stauchtet
+staue
+stauen
+stauend
+stauende
+stauendem
+stauenden
+stauender
+stauendes
+staune
+staunen
+staunend
+staunende
+staunendem
+staunenden
+staunender
+staunendes
+staunenswert
+staunenswerte
+staunenswertem
+staunenswerten
+staunenswerter
+staunenswertes
+staunst
+staunt
+staunte
+staunten
+stauntest
+stauntet
+staust
+staut
+staute
+stauten
+stautest
+stautet
+steche
+stechen
+stechend
+stechende
+stechendem
+stechenden
+stechender
+stechendes
+stecht
+steckbar
+steckbare
+steckbarem
+steckbaren
+steckbarer
+steckbares
+steckbriefqqlich
+stecke
+stecken
+steckend
+steckende
+steckendem
+steckenden
+steckender
+steckendes
+steckkompatibel
+steckkompatible
+steckkompatiblem
+steckkompatiblen
+steckkompatibler
+steckkompatibles
+steckst
+steckt
+steckte
+steckten
+stecktest
+stecktet
+stehe
+stehen
+stehend
+stehende
+stehendem
+stehenden
+stehender
+stehendes
+stehle
+stehlen
+stehlend
+stehlende
+stehlendem
+stehlenden
+stehlender
+stehlendes
+stehlt
+stehst
+steht
+steif
+steife
+steifem
+steifen
+steifend
+steifende
+steifendem
+steifenden
+steifender
+steifendes
+steifer
+steifere
+steiferem
+steiferen
+steiferer
+steiferes
+steifes
+steifst
+steifste
+steifstem
+steifsten
+steifster
+steifstes
+steift
+steifte
+steiften
+steiftest
+steiftet
+steige
+steigen
+steigend
+steigende
+steigendem
+steigenden
+steigender
+steigendes
+steigerbar
+steigerbare
+steigerbarem
+steigerbaren
+steigerbarer
+steigerbares
+steigere
+steigern
+steigernd
+steigernde
+steigerndem
+steigernden
+steigernder
+steigerndes
+steigerst
+steigert
+steigerte
+steigerten
+steigertest
+steigertet
+steigre
+steigst
+steigt
+steil
+steile
+steilem
+steilen
+steiler
+steilere
+steilerem
+steileren
+steilerer
+steileres
+steiles
+steilheitsbegrenzt
+steilheitsbegrenzte
+steilheitsbegrenztem
+steilheitsbegrenzten
+steilheitsbegrenzter
+steilheitsbegrenztes
+steilste
+steilstem
+steilsten
+steilster
+steilstes
+steinalt
+steinalte
+steinaltem
+steinalten
+steinalter
+steinaltes
+steinern
+steinerne
+steinernem
+steinernen
+steinerner
+steinernes
+steinhart
+steinharte
+steinhartem
+steinharten
+steinharter
+steinhartes
+steinig
+steinige
+steinigem
+steinigen
+steinigend
+steinigende
+steinigendem
+steinigenden
+steinigender
+steinigendes
+steiniger
+steinigere
+steinigerem
+steinigeren
+steinigerer
+steinigeres
+steiniges
+steinigst
+steinigste
+steinigstem
+steinigsten
+steinigster
+steinigstes
+steinigt
+steinigte
+steinigten
+steinigtest
+steinigtet
+steinreich
+steinreiche
+steinreichem
+steinreichen
+steinreicher
+steinreichere
+steinreicherem
+steinreicheren
+steinreicherer
+steinreicheres
+steinreiches
+steinreichste
+steinreichstem
+steinreichsten
+steinreichster
+steinreichstes
+steinzeitlich
+steinzeitliche
+steinzeitlichem
+steinzeitlichen
+steinzeitlicher
+steinzeitliches
+stelle
+stellen
+stellend
+stellende
+stellendem
+stellenden
+stellender
+stellendes
+stellenlos
+stellenlose
+stellenlosem
+stellenlosen
+stellenloser
+stellenloses
+stellig
+stellige
+stelligem
+stelligen
+stelliger
+stelliges
+stellst
+stellt
+stellte
+stellten
+stelltest
+stelltet
+stellungslos
+stellungslose
+stellungslosem
+stellungslosen
+stellungsloser
+stellungsloses
+stellvertrete
+stellvertreten
+stellvertretend
+stellvertretende
+stellvertretendem
+stellvertretenden
+stellvertretender
+stellvertretendes
+stellvertretet
+stelze
+stelzen
+stelzend
+stelzende
+stelzendem
+stelzenden
+stelzender
+stelzendes
+stelzest
+stelzt
+stelzte
+stelzten
+stelztest
+stelztet
+stemme
+stemmen
+stemmend
+stemmende
+stemmendem
+stemmenden
+stemmender
+stemmendes
+stemmst
+stemmt
+stemmte
+stemmten
+stemmtest
+stemmtet
+stempeldruckabhängig
+stempeldruckabhängige
+stempeldruckabhängigem
+stempeldruckabhängigen
+stempeldruckabhängiger
+stempeldruckabhängiges
+stempele
+stempeln
+stempelnd
+stempelnde
+stempelndem
+stempelnden
+stempelnder
+stempelndes
+stempelst
+stempelt
+stempelte
+stempelten
+stempeltest
+stempeltet
+stemple
+stenografiere
+stenografieren
+stenografierend
+stenografierende
+stenografierendem
+stenografierenden
+stenografierender
+stenografierendes
+stenografierst
+stenografiert
+stenografierte
+stenografiertem
+stenografierten
+stenografierter
+stenografiertes
+stenografiertest
+stenografiertet
+stenografisch
+stenografische
+stenografischem
+stenografischen
+stenografischer
+stenografisches
+stenographiere
+stenographieren
+stenographierend
+stenographierende
+stenographierendem
+stenographierenden
+stenographierender
+stenographierendes
+stenographierst
+stenographiert
+stenographierte
+stenographiertem
+stenographierten
+stenographierter
+stenographiertes
+stenographiertest
+stenographiertet
+stenographisch
+stenographische
+stenographischem
+stenographischen
+stenographischer
+stenographisches
+steppe
+steppen
+steppend
+steppende
+steppendem
+steppenden
+steppender
+steppendes
+steppst
+steppt
+steppte
+steppten
+stepptest
+stepptet
+sterbe
+sterben
+sterbend
+sterbende
+sterbendem
+sterbenden
+sterbender
+sterbendes
+sterbenskrank
+sterbenskranke
+sterbenskrankem
+sterbenskranken
+sterbenskranker
+sterbenskrankes
+sterbensmüd
+sterbensmüde
+sterbensmüdem
+sterbensmüden
+sterbensmüder
+sterbensmüdes
+sterblich
+sterbliche
+sterblichem
+sterblichen
+sterblicher
+sterbliches
+sterbt
+stereotyp
+stereotype
+stereotypem
+stereotypen
+stereotyper
+stereotypes
+stereotypiere
+stereotypieren
+stereotypierend
+stereotypierende
+stereotypierendem
+stereotypierenden
+stereotypierender
+stereotypierendes
+stereotypierst
+stereotypiert
+stereotypierte
+stereotypiertem
+stereotypierten
+stereotypierter
+stereotypiertes
+stereotypiertest
+stereotypiertet
+steril
+sterile
+sterilem
+sterilen
+steriler
+sterilere
+sterilerem
+sterileren
+sterilerer
+sterileres
+steriles
+sterilisiere
+sterilisieren
+sterilisierend
+sterilisierende
+sterilisierendem
+sterilisierenden
+sterilisierender
+sterilisierendes
+sterilisierst
+sterilisiert
+sterilisierte
+sterilisiertem
+sterilisierten
+sterilisierter
+sterilisiertes
+sterilisiertest
+sterilisiertet
+sterilste
+sterilstem
+sterilsten
+sterilster
+sterilstes
+sternenförmig
+sternenförmige
+sternenförmigem
+sternenförmigen
+sternenförmiger
+sternenförmiges
+sternenklar
+sternenklare
+sternenklarem
+sternenklaren
+sternenklarer
+sternenklares
+sternförmig
+sternförmige
+sternförmigem
+sternförmigen
+sternförmiger
+sternförmiges
+sternhagelvoll
+sternhagelvolle
+sternhagelvollem
+sternhagelvollen
+sternhagelvoller
+sternhagelvolles
+sternhell
+sternhelle
+sternhellem
+sternhellen
+sternheller
+sternhellere
+sternhellerem
+sternhelleren
+sternhellerer
+sternhelleres
+sternhelles
+sternhellste
+sternhellstem
+sternhellsten
+sternhellster
+sternhellstes
+sternklar
+sternklare
+sternklarem
+sternklaren
+sternklarer
+sternklares
+stete
+stetem
+steten
+steter
+stetes
+stetig
+stetige
+stetigem
+stetigen
+stetiger
+stetigere
+stetigerem
+stetigeren
+stetigerer
+stetigeres
+stetiges
+stetigste
+stetigstem
+stetigsten
+stetigster
+stetigstes
+stets
+steuerbar
+steuerbare
+steuerbarem
+steuerbaren
+steuerbarer
+steuerbares
+steuerbefreit
+steuerbefreite
+steuerbefreitem
+steuerbefreiten
+steuerbefreiter
+steuerbefreites
+steuerbegünstigt
+steuerbegünstigte
+steuerbegünstigtem
+steuerbegünstigten
+steuerbegünstigter
+steuerbegünstigtes
+steuere
+steuerfrei
+steuerfreie
+steuerfreiem
+steuerfreien
+steuerfreier
+steuerfreies
+steuerlich
+steuerliche
+steuerlichem
+steuerlichen
+steuerlicher
+steuerliches
+steuern
+steuernd
+steuernde
+steuerndem
+steuernden
+steuernder
+steuerndes
+steuerpflichtig
+steuerpflichtige
+steuerpflichtigem
+steuerpflichtigen
+steuerpflichtiger
+steuerpflichtiges
+steuerrechtlich
+steuerrechtliche
+steuerrechtlichem
+steuerrechtlichen
+steuerrechtlicher
+steuerrechtliches
+steuerst
+steuert
+steuerte
+steuerten
+steuertest
+steuertet
+steuerungsseitig
+steuerungsseitige
+steuerungsseitigem
+steuerungsseitigen
+steuerungsseitiger
+steuerungsseitiges
+steuerungstechnisch
+steuerungstechnische
+steuerungstechnischem
+steuerungstechnischen
+steuerungstechnischer
+steuerungstechnisches
+steure
+stibitze
+stibitzen
+stibitzend
+stibitzende
+stibitzendem
+stibitzenden
+stibitzender
+stibitzendes
+stibitzest
+stibitzt
+stibitzte
+stibitztem
+stibitzten
+stibitzter
+stibitztes
+stibitztest
+stibitztet
+stichele
+sticheln
+stichelnd
+stichelnde
+stichelndem
+stichelnden
+stichelnder
+stichelndes
+stichelst
+stichelt
+stichelte
+stichelten
+sticheltest
+sticheltet
+stichfest
+stichfeste
+stichfestem
+stichfesten
+stichfester
+stichfestes
+stichhaltig
+stichhaltige
+stichhaltigem
+stichhaltigen
+stichhaltiger
+stichhaltiges
+stichig
+stichige
+stichigem
+stichigen
+stichiger
+stichiges
+stichle
+stichprobenartig
+stichprobenartige
+stichprobenartigem
+stichprobenartigen
+stichprobenartiger
+stichprobenartiges
+stichpunktartig
+stichpunktartige
+stichpunktartigem
+stichpunktartigen
+stichpunktartiger
+stichpunktartiges
+stichst
+sticht
+sticke
+sticken
+stickend
+stickende
+stickendem
+stickenden
+stickender
+stickendes
+stickig
+stickige
+stickigem
+stickigen
+stickiger
+stickiges
+stickst
+stickstoffhaltig
+stickstoffhaltige
+stickstoffhaltigem
+stickstoffhaltigen
+stickstoffhaltiger
+stickstoffhaltiges
+stickt
+stickte
+stickten
+sticktest
+sticktet
+stiebe
+stieben
+stiebend
+stiebende
+stiebendem
+stiebenden
+stiebender
+stiebendes
+stiebst
+stiebt
+stiebte
+stiebten
+stiebtest
+stiebtet
+stiefele
+stiefeln
+stiefelnd
+stiefelnde
+stiefelndem
+stiefelnden
+stiefelnder
+stiefelndes
+stiefelst
+stiefelt
+stiefelte
+stiefelten
+stiefeltest
+stiefeltet
+stiefle
+stiefmütterlich
+stiefmütterliche
+stiefmütterlichem
+stiefmütterlichen
+stiefmütterlicher
+stiefmütterliches
+stieg
+stiegen
+stiegst
+stiegt
+stiehlst
+stiehlt
+stiere
+stieren
+stierend
+stierende
+stierendem
+stierenden
+stierender
+stierendes
+stiernackig
+stiernackige
+stiernackigem
+stiernackigen
+stiernackiger
+stiernackiges
+stierst
+stiert
+stierte
+stierten
+stiertest
+stiertet
+stieß
+stieße
+stießen
+stießest
+stießet
+stießt
+stifte
+stiften
+stiftend
+stiftende
+stiftendem
+stiftenden
+stiftender
+stiftendes
+stiftest
+stiftet
+stiftete
+stifteten
+stiftetest
+stiftetet
+stilecht
+stilechte
+stilechtem
+stilechten
+stilechter
+stilechtes
+stilgerecht
+stilgerechte
+stilgerechtem
+stilgerechten
+stilgerechter
+stilgerechtes
+stilisiere
+stilisieren
+stilisierend
+stilisierende
+stilisierendem
+stilisierenden
+stilisierender
+stilisierendes
+stilisierst
+stilisiert
+stilisierte
+stilisiertem
+stilisierten
+stilisierter
+stilisiertes
+stilisiertest
+stilisiertet
+stilistisch
+stilistische
+stilistischem
+stilistischen
+stilistischer
+stilistisches
+still
+stille
+stillem
+stillen
+stillend
+stillende
+stillendem
+stillenden
+stillender
+stillendes
+stiller
+stillere
+stillerem
+stilleren
+stillerer
+stilleres
+stilles
+stillgelegt
+stillgelegte
+stillgelegtem
+stillgelegten
+stillgelegter
+stillgelegtes
+stillgestanden
+stillgestandene
+stillgestandenem
+stillgestandenen
+stillgestandener
+stillgestandenes
+stillhalte
+stillhalten
+stillhaltend
+stillhaltende
+stillhaltendem
+stillhaltenden
+stillhaltender
+stillhaltendes
+stillhaltet
+stillhält
+stillhältst
+stilliege
+stilliegen
+stilliegend
+stilliegende
+stilliegendem
+stilliegenden
+stilliegender
+stilliegendes
+stilliegst
+stilliegt
+stilllege
+stilllegen
+stilllegend
+stilllegende
+stilllegendem
+stilllegenden
+stilllegender
+stilllegendes
+stilllegst
+stilllegt
+stilllegte
+stilllegten
+stilllegtest
+stilllegtet
+stillos
+stillose
+stillosem
+stillosen
+stilloser
+stilloses
+stillschweige
+stillschweigen
+stillschweigend
+stillschweigende
+stillschweigendem
+stillschweigenden
+stillschweigender
+stillschweigendes
+stillschweigst
+stillschweigt
+stillst
+stillste
+stillstehe
+stillstehen
+stillstehend
+stillstehende
+stillstehendem
+stillstehenden
+stillstehender
+stillstehendes
+stillstehst
+stillsteht
+stillstem
+stillsten
+stillster
+stillstes
+stillt
+stillte
+stillten
+stilltest
+stilltet
+stillvergnügt
+stillvergnügte
+stillvergnügtem
+stillvergnügten
+stillvergnügter
+stillvergnügtes
+stilvoll
+stilvolle
+stilvollem
+stilvollen
+stilvoller
+stilvolles
+stimmberechtigt
+stimmberechtigte
+stimmberechtigtem
+stimmberechtigten
+stimmberechtigter
+stimmberechtigtes
+stimme
+stimmen
+stimmend
+stimmende
+stimmendem
+stimmenden
+stimmender
+stimmendes
+stimmig
+stimmige
+stimmigem
+stimmigen
+stimmiger
+stimmiges
+stimmst
+stimmt
+stimmte
+stimmten
+stimmtest
+stimmtet
+stimulierbar
+stimulierbare
+stimulierbarem
+stimulierbaren
+stimulierbarer
+stimulierbares
+stimuliere
+stimulieren
+stimulierend
+stimulierende
+stimulierendem
+stimulierenden
+stimulierender
+stimulierendes
+stimulierst
+stimuliert
+stimulierte
+stimuliertem
+stimulierten
+stimulierter
+stimuliertes
+stimuliertest
+stimuliertet
+stinke
+stinken
+stinkend
+stinkende
+stinkendem
+stinkenden
+stinkender
+stinkendes
+stinkst
+stinkt
+stirbst
+stirbt
+stochastisch
+stochastische
+stochastischem
+stochastischen
+stochastischer
+stochastisches
+stochere
+stochern
+stochernd
+stochernde
+stocherndem
+stochernden
+stochernder
+stocherndes
+stocherst
+stochert
+stocherte
+stocherten
+stochertest
+stochertet
+stochre
+stocke
+stocken
+stockend
+stockende
+stockendem
+stockenden
+stockender
+stockendes
+stockst
+stocksteif
+stocksteife
+stocksteifem
+stocksteifen
+stocksteifer
+stocksteifes
+stockt
+stockte
+stockten
+stocktest
+stocktet
+stoisch
+stoische
+stoischem
+stoischen
+stoischer
+stoisches
+stolpere
+stolpern
+stolpernd
+stolpernde
+stolperndem
+stolpernden
+stolpernder
+stolperndes
+stolperst
+stolpert
+stolperte
+stolperten
+stolpertest
+stolpertet
+stolpre
+stolz
+stolze
+stolzem
+stolzen
+stolzer
+stolzes
+stopfe
+stopfen
+stopfend
+stopfende
+stopfendem
+stopfenden
+stopfender
+stopfendes
+stopfst
+stopft
+stopfte
+stopften
+stopftest
+stopftet
+stopp
+stoppe
+stoppen
+stoppend
+stoppende
+stoppendem
+stoppenden
+stoppender
+stoppendes
+stoppst
+stoppt
+stoppte
+stoppten
+stopptest
+stopptet
+storniere
+stornieren
+stornierend
+stornierende
+stornierendem
+stornierenden
+stornierender
+stornierendes
+stornierst
+storniert
+stornierte
+storniertem
+stornierten
+stornierter
+storniertes
+storniertest
+storniertet
+stottere
+stottern
+stotternd
+stotternde
+stotterndem
+stotternden
+stotternder
+stotterndes
+stotterst
+stottert
+stotterte
+stotterten
+stottertest
+stottertet
+stottre
+stoß
+stoßartig
+stoßartige
+stoßartigem
+stoßartigen
+stoßartiger
+stoßartiges
+stoße
+stoßen
+stoßend
+stoßende
+stoßendem
+stoßenden
+stoßender
+stoßendes
+stoßfest
+stoßfeste
+stoßfestem
+stoßfesten
+stoßfester
+stoßfestes
+stoßt
+strabanz
+strabanze
+strabanzen
+strabanzend
+strabanzende
+strabanzendem
+strabanzenden
+strabanzender
+strabanzendes
+strabanzest
+strabanzt
+strabanzte
+strabanzten
+strabanztest
+strabanztet
+strafbar
+strafbare
+strafbarem
+strafbaren
+strafbarer
+strafbares
+strafe
+strafen
+strafend
+strafende
+strafendem
+strafenden
+strafender
+strafendes
+straff
+straffe
+straffem
+straffen
+straffend
+straffende
+straffendem
+straffenden
+straffender
+straffendes
+straffer
+straffes
+straffst
+strafft
+straffte
+strafften
+strafftest
+strafftet
+strafst
+straft
+strafte
+straften
+straftest
+straftet
+strahle
+strahlen
+strahlend
+strahlende
+strahlendem
+strahlenden
+strahlender
+strahlendes
+strahlst
+strahlt
+strahlte
+strahlten
+strahltest
+strahltet
+strampele
+strampeln
+strampelnd
+strampelnde
+strampelndem
+strampelnden
+strampelnder
+strampelndes
+strampelst
+strampelt
+strampelte
+strampelten
+strampeltest
+strampeltet
+strample
+stranguliere
+strangulieren
+strangulierend
+strangulierende
+strangulierendem
+strangulierenden
+strangulierender
+strangulierendes
+strangulierst
+stranguliert
+strangulierte
+stranguliertem
+strangulierten
+strangulierter
+stranguliertes
+stranguliertest
+stranguliertet
+strapaziere
+strapazieren
+strapazierend
+strapazierende
+strapazierendem
+strapazierenden
+strapazierender
+strapazierendes
+strapazierst
+strapaziert
+strapazierte
+strapaziertem
+strapazierten
+strapazierter
+strapaziertes
+strapaziertest
+strapaziertet
+strategisch
+strategische
+strategischem
+strategischen
+strategischer
+strategisches
+strawanz
+strawanze
+strawanzen
+strawanzend
+strawanzende
+strawanzendem
+strawanzenden
+strawanzender
+strawanzendes
+strawanzest
+strawanzt
+strawanzte
+strawanzten
+strawanztest
+strawanztet
+strebe
+streben
+strebend
+strebende
+strebendem
+strebenden
+strebender
+strebendes
+strebst
+strebt
+strebte
+strebten
+strebtest
+strebtet
+strebweit
+strebweite
+strebweitem
+strebweiten
+strebweiter
+strebweites
+strecke
+strecken
+streckend
+streckende
+streckendem
+streckenden
+streckender
+streckendes
+streckst
+streckt
+streckte
+streckten
+strecktest
+strecktet
+streichbar
+streichbare
+streichbarem
+streichbaren
+streichbarer
+streichbares
+streiche
+streichele
+streicheln
+streichelnd
+streichelnde
+streichelndem
+streichelnden
+streichelnder
+streichelndes
+streichelst
+streichelt
+streichelte
+streichelten
+streicheltest
+streicheltet
+streichen
+streichend
+streichende
+streichendem
+streichenden
+streichender
+streichendes
+streichle
+streichst
+streicht
+streife
+streifen
+streifend
+streifende
+streifendem
+streifenden
+streifender
+streifendes
+streifenweise
+streifig
+streifige
+streifigem
+streifigen
+streifiger
+streifiges
+streifst
+streift
+streifte
+streiften
+streiftest
+streiftet
+streike
+streiken
+streikend
+streikende
+streikendem
+streikenden
+streikender
+streikendes
+streikst
+streikt
+streikte
+streikten
+streiktest
+streiktet
+streitbar
+streitbare
+streitbarem
+streitbaren
+streitbarer
+streitbares
+streite
+streiten
+streitend
+streitende
+streitendem
+streitenden
+streitender
+streitendes
+streitest
+streitet
+streitig
+streitige
+streitigem
+streitigen
+streitiger
+streitiges
+streitlustig
+streitlustige
+streitlustigem
+streitlustigen
+streitlustiger
+streitlustiges
+streng
+strenge
+strengem
+strengen
+strenger
+strengere
+strengerem
+strengeren
+strengerer
+strengeres
+strenges
+strengst
+strengste
+strengstem
+strengsten
+strengstens
+strengster
+strengstes
+strengt
+strengte
+strengten
+strengtest
+strengtet
+stresse
+stressen
+stressend
+stressende
+stressendem
+stressenden
+stressender
+stressendes
+stressest
+stressig
+stressige
+stressigem
+stressigen
+stressiger
+stressigere
+stressigerem
+stressigeren
+stressigerer
+stressigeres
+stressiges
+stressigste
+stressigstem
+stressigsten
+stressigster
+stressigstes
+stresst
+stresste
+stressten
+stresstest
+stresstet
+streue
+streuen
+streuend
+streuende
+streuendem
+streuenden
+streuender
+streuendes
+streust
+streut
+streute
+streuten
+streutest
+streutet
+stricke
+stricken
+strickend
+strickende
+strickendem
+strickenden
+strickender
+strickendes
+strickst
+strickt
+strickte
+strickten
+stricktest
+stricktet
+strikt
+strikte
+striktem
+strikten
+strikter
+striktes
+stritt
+stritten
+strittest
+strittet
+strittig
+strittige
+strittigem
+strittigen
+strittiger
+strittiges
+strittst
+strombegrenzt
+strombegrenzte
+strombegrenztem
+strombegrenzten
+strombegrenzter
+strombegrenztes
+stromfressend
+stromfressende
+stromfressendem
+stromfressenden
+stromfressender
+stromfressendes
+stromlos
+stromlose
+stromlosem
+stromlosen
+stromloser
+stromloses
+stromsparend
+stromsparende
+stromsparendem
+stromsparenden
+stromsparender
+stromsparendes
+strotze
+strotzen
+strotzend
+strotzende
+strotzendem
+strotzenden
+strotzender
+strotzendes
+strotzest
+strotzt
+strotzte
+strotzten
+strotztest
+strotztet
+strukturbasiert
+strukturbasierte
+strukturbasiertem
+strukturbasierten
+strukturbasierter
+strukturbasiertes
+strukturell
+strukturelle
+strukturellem
+strukturellen
+struktureller
+strukturelles
+strukturgleich
+strukturgleiche
+strukturgleichem
+strukturgleichen
+strukturgleicher
+strukturgleiches
+strukturiere
+strukturieren
+strukturierend
+strukturierende
+strukturierendem
+strukturierenden
+strukturierender
+strukturierendes
+strukturierst
+strukturiert
+strukturierte
+strukturiertem
+strukturierten
+strukturierter
+strukturiertes
+strukturiertest
+strukturiertet
+sträfqqlich
+sträfqqliche
+sträfqqlichem
+sträfqqlichen
+sträfqqlicher
+sträfqqliches
+sträube
+sträuben
+sträubend
+sträubende
+sträubendem
+sträubenden
+sträubender
+sträubendes
+sträubst
+sträubt
+sträubte
+sträubten
+sträubtest
+sträubtet
+ströme
+strömen
+strömend
+strömende
+strömendem
+strömenden
+strömender
+strömendes
+strömst
+strömt
+strömte
+strömten
+strömtest
+strömtet
+strömungsproportional
+strömungsproportionale
+strömungsproportionalem
+strömungsproportionalen
+strömungsproportionaler
+strömungsproportionales
+stubenrein
+stubenreine
+stubenreinem
+stubenreinen
+stubenreiner
+stubenreines
+studentisch
+studentische
+studentischem
+studentischen
+studentischer
+studentisches
+studiere
+studieren
+studierend
+studierende
+studierendem
+studierenden
+studierender
+studierendes
+studierst
+studiert
+studierte
+studiertem
+studierten
+studierter
+studiertes
+studiertest
+studiertet
+stufenartig
+stufenartige
+stufenartigem
+stufenartigen
+stufenartiger
+stufenartiges
+stufenförmig
+stufenförmige
+stufenförmigem
+stufenförmigen
+stufenförmiger
+stufenförmiges
+stufenlos
+stufenlose
+stufenlosem
+stufenlosen
+stufenloser
+stufenloses
+stufenweise
+stufenweisem
+stufenweisen
+stufenweiser
+stufenweises
+stumm
+stumme
+stummem
+stummen
+stummer
+stummere
+stummerem
+stummeren
+stummerer
+stummeres
+stummes
+stummste
+stummstem
+stummsten
+stummster
+stummstes
+stumpf
+stumpfe
+stumpfem
+stumpfen
+stumpfend
+stumpfende
+stumpfendem
+stumpfenden
+stumpfender
+stumpfendes
+stumpfer
+stumpfere
+stumpferem
+stumpferen
+stumpferer
+stumpferes
+stumpfes
+stumpfsinnig
+stumpfsinnige
+stumpfsinnigem
+stumpfsinnigen
+stumpfsinniger
+stumpfsinnigere
+stumpfsinnigerem
+stumpfsinnigeren
+stumpfsinnigerer
+stumpfsinnigeres
+stumpfsinniges
+stumpfsinnigste
+stumpfsinnigstem
+stumpfsinnigsten
+stumpfsinnigster
+stumpfsinnigstes
+stumpfst
+stumpfste
+stumpfstem
+stumpfsten
+stumpfster
+stumpfstes
+stumpft
+stumpfte
+stumpften
+stumpftest
+stumpftet
+stumpfwinkelig
+stumpfwinkelige
+stumpfwinkeligem
+stumpfwinkeligen
+stumpfwinkeliger
+stumpfwinkeliges
+stumpfwinklig
+stumpfwinklige
+stumpfwinkligem
+stumpfwinkligen
+stumpfwinkliger
+stumpfwinkliges
+stundenlang
+stundenlange
+stundenlangem
+stundenlangen
+stundenlanger
+stundenlanges
+stundenweise
+stundenweisem
+stundenweisen
+stundenweiser
+stundenweises
+stupid
+stupide
+stupidem
+stupiden
+stupider
+stupidere
+stupiderem
+stupideren
+stupiderer
+stupideres
+stupides
+stupidste
+stupidstem
+stupidsten
+stupidster
+stupidstes
+stupse
+stupsen
+stupsend
+stupsende
+stupsendem
+stupsenden
+stupsender
+stupsendes
+stupsest
+stupsnasig
+stupsnasige
+stupsnasigem
+stupsnasigen
+stupsnasiger
+stupsnasiges
+stupst
+stupste
+stupsten
+stupstest
+stupstet
+stur
+sture
+sturem
+sturen
+sturer
+sturere
+sturerem
+stureren
+sturerer
+stureres
+stures
+sturste
+sturstem
+stursten
+sturster
+sturstes
+stutze
+stutzen
+stutzend
+stutzende
+stutzendem
+stutzenden
+stutzender
+stutzendes
+stutzerhaft
+stutzerhafte
+stutzerhaftem
+stutzerhaften
+stutzerhafter
+stutzerhaftes
+stutzest
+stutzig
+stutzige
+stutzigem
+stutzigen
+stutziger
+stutzigere
+stutzigerem
+stutzigeren
+stutzigerer
+stutzigeres
+stutziges
+stutzigste
+stutzigstem
+stutzigsten
+stutzigster
+stutzigstes
+stutzt
+stutzte
+stutzten
+stutztest
+stutztet
+städtebaulich
+städtebauliche
+städtebaulichem
+städtebaulichen
+städtebaulicher
+städtebauliches
+städtisch
+städtische
+städtischem
+städtischen
+städtischer
+städtisches
+stählern
+stählerne
+stählernem
+stählernen
+stählerner
+stählernes
+stämmig
+stämmige
+stämmigem
+stämmigen
+stämmiger
+stämmigere
+stämmigerem
+stämmigeren
+stämmigerer
+stämmigeres
+stämmiges
+stämmigste
+stämmigstem
+stämmigsten
+stämmigster
+stämmigstes
+ständig
+ständige
+ständigem
+ständigen
+ständiger
+ständiges
+stänkere
+stänkern
+stänkernd
+stänkernde
+stänkerndem
+stänkernden
+stänkernder
+stänkerndes
+stänkerst
+stänkert
+stänkerte
+stänkerten
+stänkertest
+stänkertet
+stänkre
+stärke
+stärkehaltig
+stärkehaltige
+stärkehaltigem
+stärkehaltigen
+stärkehaltiger
+stärkehaltiges
+stärken
+stärkend
+stärkende
+stärkendem
+stärkenden
+stärkender
+stärkendes
+stärker
+stärkere
+stärkerem
+stärkeren
+stärkerer
+stärkeres
+stärkst
+stärkste
+stärkstem
+stärksten
+stärkster
+stärkstes
+stärkt
+stärkte
+stärkten
+stärktest
+stärktet
+stäube
+stäuben
+stäubend
+stäubende
+stäubendem
+stäubenden
+stäubender
+stäubendes
+stäubst
+stäubt
+stäubte
+stäubten
+stäubtest
+stäubtet
+stöbere
+stöbern
+stöbernd
+stöbernde
+stöberndem
+stöbernden
+stöbernder
+stöberndes
+stöberst
+stöbert
+stöberte
+stöberten
+stöbertest
+stöbertet
+stöbre
+stöhne
+stöhnen
+stöhnend
+stöhnende
+stöhnendem
+stöhnenden
+stöhnender
+stöhnendes
+stöhnst
+stöhnt
+stöhnte
+stöhnten
+stöhntest
+stöhntet
+stöpsele
+stöpseln
+stöpselnd
+stöpselnde
+stöpselndem
+stöpselnden
+stöpselnder
+stöpselndes
+stöpselst
+stöpselt
+stöpselte
+stöpselten
+stöpseltest
+stöpseltet
+stöpsle
+störanfällig
+störanfällige
+störanfälligem
+störanfälligen
+störanfälliger
+störanfälliges
+störbar
+störbare
+störbarem
+störbaren
+störbarer
+störbares
+störe
+stören
+störend
+störende
+störendem
+störenden
+störender
+störendes
+störfrei
+störfreie
+störfreiem
+störfreien
+störfreier
+störfreies
+störrig
+störrige
+störrigem
+störrigen
+störriger
+störrigere
+störrigerem
+störrigeren
+störrigerer
+störrigeres
+störriges
+störrigste
+störrigstem
+störrigsten
+störrigster
+störrigstes
+störrisch
+störrische
+störrischem
+störrischen
+störrischer
+störrischere
+störrischerem
+störrischeren
+störrischerer
+störrischeres
+störrisches
+störrischste
+störrischstem
+störrischsten
+störrischster
+störrischstes
+störsicher
+störsichere
+störsicherem
+störsicheren
+störsicherer
+störsicheres
+störst
+stört
+störte
+störten
+störtest
+störtet
+störungsfrei
+störungsfreie
+störungsfreiem
+störungsfreien
+störungsfreier
+störungsfreies
+stößt
+stückchenweise
+stückele
+stückeln
+stückelnd
+stückelnde
+stückelndem
+stückelnden
+stückelnder
+stückelndes
+stückelst
+stückelt
+stückelte
+stückelten
+stückeltest
+stückeltet
+stückle
+stückweise
+stülpe
+stülpen
+stülpend
+stülpende
+stülpendem
+stülpenden
+stülpender
+stülpendes
+stülpst
+stülpt
+stülpte
+stülpten
+stülptest
+stülptet
+stümperhaft
+stümperhafte
+stümperhaftem
+stümperhaften
+stümperhafter
+stümperhaftes
+stünde
+stünden
+stündest
+stündet
+stündig
+stündige
+stündigem
+stündigen
+stündiger
+stündiges
+stündlich
+stündliche
+stündlichem
+stündlichen
+stündlicher
+stündliches
+stürme
+stürmen
+stürmend
+stürmende
+stürmendem
+stürmenden
+stürmender
+stürmendes
+stürmisch
+stürmische
+stürmischem
+stürmischen
+stürmischer
+stürmisches
+stürmst
+stürmt
+stürmte
+stürmten
+stürmtest
+stürmtet
+stürze
+stürzen
+stürzend
+stürzende
+stürzendem
+stürzenden
+stürzender
+stürzendes
+stürzest
+stürzt
+stürzte
+stürzten
+stürztest
+stürztet
+stütze
+stützen
+stützend
+stützende
+stützendem
+stützenden
+stützender
+stützendes
+stützest
+stützt
+stützte
+stützten
+stütztest
+stütztet
+subatomar
+subatomare
+subatomarem
+subatomaren
+subatomarer
+subatomares
+subcortikal
+subcortikale
+subcortikalem
+subcortikalen
+subcortikaler
+subcortikales
+subjektiv
+subjektive
+subjektivem
+subjektiven
+subjektiver
+subjektives
+suboptimal
+suboptimale
+suboptimalem
+suboptimalen
+suboptimaler
+suboptimales
+subsequent
+subsequente
+subsequentem
+subsequenten
+subsequenter
+subsequentes
+substantiell
+substantielle
+substantiellem
+substantiellen
+substantieller
+substantiellere
+substantiellerem
+substantielleren
+substantiellerer
+substantielleres
+substantielles
+substantiellste
+substantiellstem
+substantiellsten
+substantiellster
+substantiellstes
+substantivisch
+substantivische
+substantivischem
+substantivischen
+substantivischer
+substantivisches
+substanziell
+substanzielle
+substanziellem
+substanziellen
+substanzieller
+substanziellere
+substanziellerem
+substanzielleren
+substanziellerer
+substanzielleres
+substanzielles
+substanziellste
+substanziellstem
+substanziellsten
+substanziellster
+substanziellstes
+subsumiere
+subsumieren
+subsumierend
+subsumierende
+subsumierendem
+subsumierenden
+subsumierender
+subsumierendes
+subsumierst
+subsumiert
+subsumierte
+subsumiertem
+subsumierten
+subsumierter
+subsumiertes
+subsumiertest
+subsumiertet
+subtil
+subtile
+subtilem
+subtilen
+subtiler
+subtilere
+subtilerem
+subtileren
+subtilerer
+subtileres
+subtiles
+subtilste
+subtilstem
+subtilsten
+subtilster
+subtilstes
+subtrahiere
+subtrahieren
+subtrahierend
+subtrahierende
+subtrahierendem
+subtrahierenden
+subtrahierender
+subtrahierendes
+subtrahierst
+subtrahiert
+subtrahierte
+subtrahiertem
+subtrahierten
+subtrahierter
+subtrahiertes
+subtrahiertest
+subtrahiertet
+subtropisch
+subtropische
+subtropischem
+subtropischen
+subtropischer
+subtropisches
+subventioniere
+subventionieren
+subventionierend
+subventionierende
+subventionierendem
+subventionierenden
+subventionierender
+subventionierendes
+subventionierst
+subventioniert
+subventionierte
+subventioniertem
+subventionierten
+subventionierter
+subventioniertes
+subventioniertest
+subventioniertet
+subversiv
+subversive
+subversivem
+subversiven
+subversiver
+subversives
+suche
+suchen
+suchend
+suchende
+suchendem
+suchenden
+suchender
+suchendes
+suchst
+sucht
+suchte
+suchten
+suchterzeugend
+suchterzeugende
+suchterzeugendem
+suchterzeugenden
+suchterzeugender
+suchterzeugendes
+suchtest
+suchtet
+sudanesisch
+sudanesische
+sudanesischem
+sudanesischen
+sudanesischer
+sudanesisches
+sudele
+sudelig
+sudelige
+sudeligem
+sudeligen
+sudeliger
+sudeliges
+sudeln
+sudelnd
+sudelnde
+sudelndem
+sudelnden
+sudelnder
+sudelndes
+sudelst
+sudelt
+sudelte
+sudelten
+sudeltest
+sudeltet
+suder
+sudere
+sudern
+sudernd
+sudernde
+suderndem
+sudernden
+sudernder
+suderndes
+suderst
+sudert
+suderte
+suderten
+sudertest
+sudertet
+sudle
+sudlig
+sudlige
+sudligem
+sudligen
+sudliger
+sudliges
+sudre
+suggeriere
+suggerieren
+suggerierend
+suggerierende
+suggerierendem
+suggerierenden
+suggerierender
+suggerierendes
+suggerierst
+suggeriert
+suggerierte
+suggeriertem
+suggerierten
+suggerierter
+suggeriertes
+suggeriertest
+suggeriertet
+suggestibel
+suggestible
+suggestiblem
+suggestiblen
+suggestibler
+suggestibles
+suggestionsbereit
+suggestionsbereite
+suggestionsbereitem
+suggestionsbereiten
+suggestionsbereiter
+suggestionsbereites
+suggestiv
+suggestive
+suggestivem
+suggestiven
+suggestiver
+suggestives
+sukzessiv
+sukzessive
+sukzessivem
+sukzessiven
+sukzessiver
+sukzessives
+sulze
+sulzen
+sulzend
+sulzende
+sulzendem
+sulzenden
+sulzender
+sulzendes
+sulzest
+sulzt
+sulzte
+sulzten
+sulztest
+sulztet
+summa
+summarisch
+summarische
+summarischem
+summarischen
+summarischer
+summarisches
+summiere
+summieren
+summierend
+summierende
+summierendem
+summierenden
+summierender
+summierendes
+summierst
+summiert
+summierte
+summiertem
+summierten
+summierter
+summiertes
+summiertest
+summiertet
+sumpfig
+sumpfige
+sumpfigem
+sumpfigen
+sumpfiger
+sumpfigere
+sumpfigerem
+sumpfigeren
+sumpfigerer
+sumpfigeres
+sumpfiges
+sumpfigste
+sumpfigstem
+sumpfigsten
+sumpfigster
+sumpfigstes
+super
+superklug
+superkluge
+superklugem
+superklugen
+superkluger
+superkluges
+superlativisch
+superlativische
+superlativischem
+superlativischen
+superlativischer
+superlativisches
+superspezialisiert
+superspezialisierte
+superspezialisiertem
+superspezialisierten
+superspezialisierter
+superspezialisiertes
+surre
+surrealistisch
+surrealistische
+surrealistischem
+surrealistischen
+surrealistischer
+surrealistisches
+surren
+surrend
+surrende
+surrendem
+surrenden
+surrender
+surrendes
+surrst
+surrt
+surrte
+surrten
+surrtest
+surrtet
+suspekt
+suspekte
+suspektem
+suspekten
+suspekter
+suspektes
+suspendiere
+suspendieren
+suspendierend
+suspendierende
+suspendierendem
+suspendierenden
+suspendierender
+suspendierendes
+suspendierst
+suspendiert
+suspendierte
+suspendiertem
+suspendierten
+suspendierter
+suspendiertes
+suspendiertest
+suspendiertet
+swinge
+swingen
+swingend
+swingende
+swingendem
+swingenden
+swingender
+swingendes
+swingst
+swingt
+sybillinisch
+sybillinische
+sybillinischem
+sybillinischen
+sybillinischer
+sybillinisches
+symbolisch
+symbolische
+symbolischem
+symbolischen
+symbolischer
+symbolisches
+symbolisiere
+symbolisieren
+symbolisierend
+symbolisierende
+symbolisierendem
+symbolisierenden
+symbolisierender
+symbolisierendes
+symbolisierst
+symbolisiert
+symbolisierte
+symbolisiertem
+symbolisierten
+symbolisierter
+symbolisiertes
+symbolisiertest
+symbolisiertet
+symmetrisch
+symmetrische
+symmetrischem
+symmetrischen
+symmetrischer
+symmetrisches
+sympathisch
+sympathische
+sympathischem
+sympathischen
+sympathischer
+sympathischere
+sympathischerem
+sympathischeren
+sympathischerer
+sympathischeres
+sympathisches
+sympathischste
+sympathischstem
+sympathischsten
+sympathischster
+sympathischstes
+sympathisiere
+sympathisieren
+sympathisierend
+sympathisierende
+sympathisierendem
+sympathisierenden
+sympathisierender
+sympathisierendes
+sympathisierst
+sympathisiert
+sympathisierte
+sympathisierten
+sympathisiertest
+sympathisiertet
+symphonisch
+symphonische
+symphonischem
+symphonischen
+symphonischer
+symphonisches
+synchron
+synchrone
+synchronem
+synchronen
+synchroner
+synchrones
+synchronisiere
+synchronisieren
+synchronisierend
+synchronisierende
+synchronisierendem
+synchronisierenden
+synchronisierender
+synchronisierendes
+synchronisierst
+synchronisiert
+synchronisierte
+synchronisiertem
+synchronisierten
+synchronisierter
+synchronisiertes
+synchronisiertest
+synchronisiertet
+synonym
+synonyme
+synonymem
+synonymen
+synonymer
+synonymes
+synonymisch
+synonymische
+synonymischem
+synonymischen
+synonymischer
+synonymisches
+syntaktisch
+syntaktische
+syntaktischem
+syntaktischen
+syntaktischer
+syntaktisches
+syntaxgesteuert
+syntaxgesteuerte
+syntaxgesteuertem
+syntaxgesteuerten
+syntaxgesteuerter
+syntaxgesteuertes
+synthetisch
+synthetische
+synthetischem
+synthetischen
+synthetischer
+synthetisches
+synthetisierbar
+synthetisierbare
+synthetisierbarem
+synthetisierbaren
+synthetisierbarer
+synthetisierbares
+synthetisiere
+synthetisieren
+synthetisierend
+synthetisierende
+synthetisierendem
+synthetisierenden
+synthetisierender
+synthetisierendes
+synthetisierst
+synthetisiert
+synthetisierte
+synthetisiertem
+synthetisierten
+synthetisierter
+synthetisiertes
+synthetisiertest
+synthetisiertet
+syphilitisch
+syphilitische
+syphilitischem
+syphilitischen
+syphilitischer
+syphilitisches
+syrisch
+syrische
+syrischem
+syrischen
+syrischer
+syrisches
+systemar
+systemare
+systemarem
+systemaren
+systemarer
+systemares
+systematisch
+systematische
+systematischem
+systematischen
+systematischer
+systematisches
+systematisier
+systematisiere
+systematisieren
+systematisierend
+systematisierende
+systematisierendem
+systematisierenden
+systematisierender
+systematisierendes
+systematisierst
+systematisiert
+systematisierte
+systematisiertem
+systematisierten
+systematisierter
+systematisiertes
+systematisiertest
+systematisiertet
+systemdefiniert
+systemdefinierte
+systemdefiniertem
+systemdefinierten
+systemdefinierter
+systemdefiniertes
+systemimmanent
+systemimmanente
+systemimmanentem
+systemimmanenten
+systemimmanenter
+systemimmanentes
+systemlos
+systemlose
+systemlosem
+systemlosen
+systemloser
+systemloses
+systemnah
+systemnahe
+systemnahem
+systemnahen
+systemnaher
+systemnahes
+systemunterstützt
+systemunterstützte
+systemunterstütztem
+systemunterstützten
+systemunterstützter
+systemunterstütztes
+szenisch
+szenische
+szenischem
+szenischen
+szenischer
+szenisches
+sächlich
+sächliche
+sächlichem
+sächlichen
+sächlicher
+sächliches
+sächsisch
+sächsische
+sächsischem
+sächsischen
+sächsischer
+sächsisches
+säe
+säen
+säend
+säende
+säendem
+säenden
+säender
+säendes
+säge
+sägen
+sägend
+sägende
+sägendem
+sägenden
+sägender
+sägendes
+sägezahnförmig
+sägezahnförmige
+sägezahnförmigem
+sägezahnförmigen
+sägezahnförmiger
+sägezahnförmiges
+sägst
+sägt
+sägte
+sägten
+sägtest
+sägtet
+sähe
+sähen
+sähest
+sähet
+säkular
+säkulare
+säkularem
+säkularen
+säkularer
+säkulares
+säkularisiere
+säkularisieren
+säkularisierend
+säkularisierende
+säkularisierendem
+säkularisierenden
+säkularisierender
+säkularisierendes
+säkularisierst
+säkularisiert
+säkularisierte
+säkularisiertem
+säkularisierten
+säkularisierter
+säkularisiertes
+säkularisiertest
+säkularisiertet
+sämtlich
+sämtliche
+sämtlichem
+sämtlichen
+sämtlicher
+sämtliches
+säst
+sät
+säte
+säten
+sätest
+sätet
+sättige
+sättigen
+sättigend
+sättigende
+sättigendem
+sättigenden
+sättigender
+sättigendes
+sättigst
+sättigt
+sättigte
+sättigten
+sättigtest
+sättigtet
+säubere
+säuberlich
+säuberliche
+säuberlichem
+säuberlichen
+säuberlicher
+säuberlichere
+säuberlicherem
+säuberlicheren
+säuberlicherer
+säuberlicheres
+säuberliches
+säuberlichste
+säuberlichstem
+säuberlichsten
+säuberlichster
+säuberlichstes
+säubern
+säubernd
+säubernde
+säuberndem
+säubernden
+säubernder
+säuberndes
+säuberst
+säubert
+säuberte
+säuberten
+säubertest
+säubertet
+säubre
+säuerlich
+säuerliche
+säuerlichem
+säuerlichen
+säuerlicher
+säuerlichere
+säuerlicherem
+säuerlicheren
+säuerlicherer
+säuerlicheres
+säuerliches
+säuerlichste
+säuerlichstem
+säuerlichsten
+säuerlichster
+säuerlichstes
+säufst
+säuft
+säuge
+säugen
+säugend
+säugende
+säugendem
+säugenden
+säugender
+säugendes
+säugst
+säugt
+säugte
+säugten
+säugtest
+säugtet
+säume
+säumen
+säumend
+säumende
+säumendem
+säumenden
+säumender
+säumendes
+säumig
+säumige
+säumigem
+säumigen
+säumiger
+säumigere
+säumigerem
+säumigeren
+säumigerer
+säumigeres
+säumiges
+säumigste
+säumigstem
+säumigsten
+säumigster
+säumigstes
+säumst
+säumt
+säumte
+säumten
+säumtest
+säumtet
+säurebeständig
+säurebeständige
+säurebeständigem
+säurebeständigen
+säurebeständiger
+säurebeständigere
+säurebeständigerem
+säurebeständigeren
+säurebeständigerer
+säurebeständigeres
+säurebeständiges
+säurebeständigste
+säurebeständigstem
+säurebeständigsten
+säurebeständigster
+säurebeständigstes
+säurehaltig
+säurehaltige
+säurehaltigem
+säurehaltigen
+säurehaltiger
+säurehaltigere
+säurehaltigerem
+säurehaltigeren
+säurehaltigerer
+säurehaltigeres
+säurehaltiges
+säurehaltigste
+säurehaltigstem
+säurehaltigsten
+säurehaltigster
+säurehaltigstes
+säurelöslich
+säurelösliche
+säurelöslichem
+säurelöslichen
+säurelöslicher
+säurelösliches
+säusele
+säuseln
+säuselnd
+säuselnde
+säuselndem
+säuselnden
+säuselnder
+säuselndes
+säuselst
+säuselt
+säuselte
+säuselten
+säuseltest
+säuseltet
+säusle
+söhne
+söhnen
+söhnend
+söhnende
+söhnendem
+söhnenden
+söhnender
+söhnendes
+söhnst
+söhnt
+söhnte
+söhnten
+söhntest
+söhntet
+süchtig
+süchtige
+süchtigem
+süchtigen
+süchtiger
+süchtiges
+südafrikanisch
+südafrikanische
+südafrikanischem
+südafrikanischen
+südafrikanischer
+südafrikanisches
+südamerikanisch
+südamerikanische
+südamerikanischem
+südamerikanischen
+südamerikanischer
+südamerikanisches
+südchinesisch
+südchinesische
+südchinesischem
+südchinesischen
+südchinesischer
+südchinesisches
+süddeutsch
+süddeutsche
+süddeutschem
+süddeutschen
+süddeutscher
+süddeutsches
+südeuropäisch
+südeuropäische
+südeuropäischem
+südeuropäischen
+südeuropäischer
+südeuropäisches
+südlich
+südliche
+südlichem
+südlichen
+südlicher
+südlichere
+südlicherem
+südlicheren
+südlicherer
+südlicheres
+südliches
+südlichste
+südlichstem
+südlichsten
+südlichster
+südlichstes
+südländisch
+südländische
+südländischem
+südländischen
+südländischer
+südländisches
+südwestlich
+südwestliche
+südwestlichem
+südwestlichen
+südwestlicher
+südwestliches
+südwärts
+südöstlich
+südöstliche
+südöstlichem
+südöstlichen
+südöstlicher
+südöstliches
+süffig
+süffige
+süffigem
+süffigen
+süffiger
+süffiges
+süffisant
+süffisante
+süffisantem
+süffisanten
+süffisanter
+süffisantes
+sühne
+sühnen
+sühnst
+sühnt
+sühnte
+sühnten
+sühntest
+sühntet
+sündenfällig
+sündenfällige
+sündenfälligem
+sündenfälligen
+sündenfälliger
+sündenfälliges
+sündhaft
+sündhafte
+sündhaftem
+sündhaften
+sündhafter
+sündhaftes
+sündig
+sündige
+sündigem
+sündigen
+sündigend
+sündigende
+sündigendem
+sündigenden
+sündigender
+sündigendes
+sündiger
+sündiges
+sündigst
+sündigt
+sündigte
+sündigten
+sündigtest
+sündigtet
+süß
+süße
+süßem
+süßen
+süßend
+süßende
+süßendem
+süßenden
+süßender
+süßendes
+süßer
+süßere
+süßerem
+süßeren
+süßerer
+süßeres
+süßes
+süßest
+süßeste
+süßestem
+süßesten
+süßester
+süßestes
+süßlich
+süßliche
+süßlichem
+süßlichen
+süßlicher
+süßliches
+süßsauer
+süßsaure
+süßsaurem
+süßsauren
+süßsaurer
+süßsaures
+süßt
+süßte
+süßten
+süßtest
+süßtet
+tabellarisch
+tabellarische
+tabellarischem
+tabellarischen
+tabellarischer
+tabellarisches
+tabellarisiere
+tabellarisieren
+tabellarisierend
+tabellarisierende
+tabellarisierendem
+tabellarisierenden
+tabellarisierender
+tabellarisierendes
+tabellarisierst
+tabellarisiert
+tabellarisierte
+tabellarisiertem
+tabellarisierten
+tabellarisierter
+tabellarisiertes
+tabellarisiertest
+tabellarisiertet
+tabellengesteuert
+tabellengesteuerte
+tabellengesteuertem
+tabellengesteuerten
+tabellengesteuerter
+tabellengesteuertes
+tabellengetrieben
+tabellengetriebene
+tabellengetriebenem
+tabellengetriebenen
+tabellengetriebener
+tabellengetriebenes
+tabu
+tabuisiere
+tabuisieren
+tabuisierend
+tabuisierende
+tabuisierendem
+tabuisierenden
+tabuisierender
+tabuisierendes
+tabuisierst
+tabuisiert
+tabuisierte
+tabuisiertem
+tabuisierten
+tabuisierter
+tabuisiertes
+tabuisiertest
+tabuisiertet
+tabula
+tadele
+tadellos
+tadellose
+tadellosem
+tadellosen
+tadelloser
+tadellosere
+tadelloserem
+tadelloseren
+tadelloserer
+tadelloseres
+tadelloses
+tadelloseste
+tadellosestem
+tadellosesten
+tadellosester
+tadellosestes
+tadeln
+tadelnd
+tadelnde
+tadelndem
+tadelnden
+tadelnder
+tadelndes
+tadelnswert
+tadelnswerte
+tadelnswertem
+tadelnswerten
+tadelnswerter
+tadelnswertere
+tadelnswerterem
+tadelnswerteren
+tadelnswerterer
+tadelnswerteres
+tadelnswertes
+tadelnswerteste
+tadelnswertestem
+tadelnswertesten
+tadelnswertester
+tadelnswertestes
+tadelst
+tadelsüchtig
+tadelsüchtige
+tadelsüchtigem
+tadelsüchtigen
+tadelsüchtiger
+tadelsüchtigere
+tadelsüchtigerem
+tadelsüchtigeren
+tadelsüchtigerer
+tadelsüchtigeres
+tadelsüchtiges
+tadelsüchtigste
+tadelsüchtigstem
+tadelsüchtigsten
+tadelsüchtigster
+tadelsüchtigstes
+tadelt
+tadelte
+tadelten
+tadeltest
+tadeltet
+tadle
+tafele
+tafelfertig
+tafelfertige
+tafelfertigem
+tafelfertigen
+tafelfertiger
+tafelfertiges
+tafeln
+tafelnd
+tafelnde
+tafelndem
+tafelnden
+tafelnder
+tafelndes
+tafelst
+tafelt
+tafelte
+tafelten
+tafeltest
+tafeltet
+tafle
+tagaus
+tage
+tagein
+tagelang
+tagelange
+tagelangem
+tagelangen
+tagelanger
+tagelanges
+tagen
+tagend
+tagende
+tagendem
+tagenden
+tagender
+tagendes
+tageweise
+tageweisem
+tageweisen
+tageweiser
+tageweises
+tagst
+tagsüber
+tagt
+tagte
+tagten
+tagtest
+tagtet
+tagtäglich
+tagtägliche
+tagtäglichem
+tagtäglichen
+tagtäglicher
+tagtägliches
+tailliere
+taillieren
+taillierend
+taillierende
+taillierendem
+taillierenden
+taillierender
+taillierendes
+taillierst
+tailliert
+taillierte
+tailliertem
+taillierten
+taillierter
+tailliertes
+tailliertest
+tailliertet
+takele
+takeln
+takelnd
+takelnde
+takelndem
+takelnden
+takelnder
+takelndes
+takelst
+takelt
+takelte
+takelten
+takeltest
+takeltet
+takle
+takte
+takten
+taktend
+taktende
+taktendem
+taktenden
+taktender
+taktendes
+taktest
+taktet
+taktete
+takteten
+taktetest
+taktetet
+taktfest
+taktfeste
+taktfestem
+taktfesten
+taktfester
+taktfestere
+taktfesterem
+taktfesteren
+taktfesterer
+taktfesteres
+taktfestes
+taktfesteste
+taktfestestem
+taktfestesten
+taktfestester
+taktfestestes
+taktiere
+taktieren
+taktierend
+taktierende
+taktierendem
+taktierenden
+taktierender
+taktierendes
+taktierst
+taktiert
+taktierte
+taktierten
+taktiertest
+taktiertet
+taktisch
+taktische
+taktischem
+taktischen
+taktischer
+taktisches
+taktlos
+taktlose
+taktlosem
+taktlosen
+taktloser
+taktlosere
+taktloserem
+taktloseren
+taktloserer
+taktloseres
+taktloses
+taktloseste
+taktlosestem
+taktlosesten
+taktlosester
+taktlosestes
+taktvoll
+taktvolle
+taktvollem
+taktvollen
+taktvoller
+taktvollere
+taktvollerem
+taktvolleren
+taktvollerer
+taktvolleres
+taktvolles
+taktvollste
+taktvollstem
+taktvollsten
+taktvollster
+taktvollstes
+talentiert
+talentierte
+talentiertem
+talentierten
+talentierter
+talentiertere
+talentierterem
+talentierteren
+talentierterer
+talentierteres
+talentiertes
+talentierteste
+talentiertestem
+talentiertesten
+talentiertester
+talentiertestes
+talentlos
+talentlose
+talentlosem
+talentlosen
+talentloser
+talentlosere
+talentloserem
+talentloseren
+talentloserer
+talentloseres
+talentloses
+talentloseste
+talentlosestem
+talentlosesten
+talentlosester
+talentlosestes
+talentvoll
+talentvolle
+talentvollem
+talentvollen
+talentvoller
+talentvollere
+talentvollerem
+talentvolleren
+talentvollerer
+talentvolleres
+talentvolles
+talentvollste
+talentvollstem
+talentvollsten
+talentvollster
+talentvollstes
+talgig
+talgige
+talgigem
+talgigen
+talgiger
+talgiges
+tangiere
+tangieren
+tangierend
+tangierende
+tangierendem
+tangierenden
+tangierender
+tangierendes
+tangierst
+tangiert
+tangierte
+tangiertem
+tangierten
+tangierter
+tangiertes
+tangiertest
+tangiertet
+tanke
+tanken
+tankend
+tankende
+tankendem
+tankenden
+tankender
+tankendes
+tankst
+tankt
+tankte
+tankten
+tanktest
+tanktet
+tantig
+tantige
+tantigem
+tantigen
+tantiger
+tantiges
+tanze
+tanzen
+tanzend
+tanzende
+tanzendem
+tanzenden
+tanzender
+tanzendes
+tanzest
+tanzt
+tanzte
+tanzten
+tanztest
+tanztet
+tapfer
+tapfere
+tapferem
+tapferen
+tapferer
+tapferere
+tapfererem
+tapfereren
+tapfererer
+tapfereres
+tapferes
+tapferste
+tapferstem
+tapfersten
+tapferster
+tapferstes
+tappe
+tappen
+tappend
+tappende
+tappendem
+tappenden
+tappender
+tappendes
+tappst
+tappt
+tappte
+tappten
+tapptest
+tapptet
+tapse
+tapsen
+tapsend
+tapsende
+tapsendem
+tapsenden
+tapsender
+tapsendes
+tapsest
+tapsig
+tapsige
+tapsigem
+tapsigen
+tapsiger
+tapsiges
+tapst
+tapste
+tapsten
+tapstest
+tapstet
+tariere
+tarieren
+tarierend
+tarierende
+tarierendem
+tarierenden
+tarierender
+tarierendes
+tarierst
+tariert
+tarierte
+tariertem
+tarierten
+tarierter
+tariertes
+tariertest
+tariertet
+tarifpolitisch
+tarifpolitische
+tarifpolitischem
+tarifpolitischen
+tarifpolitischer
+tarifpolitisches
+tarifqqlich
+tarifqqliche
+tarifqqlichem
+tarifqqlichen
+tarifqqlicher
+tarifqqliches
+tarne
+tarnen
+tarnend
+tarnende
+tarnendem
+tarnenden
+tarnender
+tarnendes
+tarnst
+tarnt
+tarnte
+tarnten
+tarntest
+tarntet
+taschenrechnergewandt
+taschenrechnergewandte
+taschenrechnergewandtem
+taschenrechnergewandten
+taschenrechnergewandter
+taschenrechnergewandtes
+taste
+tasten
+tastend
+tastende
+tastendem
+tastenden
+tastender
+tastendes
+tastest
+tastet
+tastete
+tasteten
+tastetest
+tastetet
+tat
+taten
+tatendurstig
+tatendurstige
+tatendurstigem
+tatendurstigen
+tatendurstiger
+tatendurstiges
+tatenlos
+tatenlose
+tatenlosem
+tatenlosen
+tatenloser
+tatenloses
+tatest
+tatet
+tatkräftig
+tatkräftige
+tatkräftigem
+tatkräftigen
+tatkräftiger
+tatkräftigere
+tatkräftigerem
+tatkräftigeren
+tatkräftigerer
+tatkräftigeres
+tatkräftiges
+tatkräftigste
+tatkräftigstem
+tatkräftigsten
+tatkräftigster
+tatkräftigstes
+tatst
+tatsächlich
+tatsächliche
+tatsächlichem
+tatsächlichen
+tatsächlicher
+tatsächliches
+taub
+taube
+taubem
+tauben
+taubengrau
+taubengraue
+taubengrauem
+taubengrauen
+taubengrauer
+taubengraues
+tauber
+taubere
+tauberem
+tauberen
+tauberer
+tauberes
+taubes
+taubste
+taubstem
+taubsten
+taubster
+taubstes
+taubstumm
+taubstumme
+taubstummem
+taubstummen
+taubstummer
+taubstummes
+tauche
+tauchen
+tauchend
+tauchende
+tauchendem
+tauchenden
+tauchender
+tauchendes
+tauchst
+taucht
+tauchte
+tauchten
+tauchtest
+tauchtet
+taue
+tauen
+tauend
+tauende
+tauendem
+tauenden
+tauender
+tauendes
+taufe
+taufen
+taufend
+taufende
+taufendem
+taufenden
+taufender
+taufendes
+taufst
+tauft
+taufte
+tauften
+tauftest
+tauftet
+tauge
+taugen
+taugend
+taugende
+taugendem
+taugenden
+taugender
+taugendes
+tauglich
+taugliche
+tauglichem
+tauglichen
+tauglicher
+tauglichere
+tauglicherem
+tauglicheren
+tauglicherer
+tauglicheres
+taugliches
+tauglichste
+tauglichstem
+tauglichsten
+tauglichster
+tauglichstes
+taugst
+taugt
+taugte
+taugten
+taugtest
+taugtet
+taumele
+taumelig
+taumelige
+taumeligem
+taumeligen
+taumeliger
+taumeliges
+taumeln
+taumelnd
+taumelnde
+taumelndem
+taumelnden
+taumelnder
+taumelndes
+taumelst
+taumelt
+taumelte
+taumelten
+taumeltest
+taumeltet
+taumle
+taumlig
+taumlige
+taumligem
+taumligen
+taumliger
+taumliges
+tauschbar
+tauschbare
+tauschbarem
+tauschbaren
+tauschbarer
+tauschbares
+tausche
+tauschen
+tauschend
+tauschende
+tauschendem
+tauschenden
+tauschender
+tauschendes
+tauschest
+tauschst
+tauscht
+tauschte
+tauschten
+tauschtest
+tauschtet
+tausend
+tausende
+tausenden
+tausenderlei
+tausendfach
+tausendfache
+tausendfachem
+tausendfachen
+tausendfacher
+tausendfaches
+tausendfältig
+tausendfältige
+tausendfältigem
+tausendfältigen
+tausendfältiger
+tausendfältiges
+tausendjährig
+tausendjährige
+tausendjährigem
+tausendjährigen
+tausendjähriger
+tausendjähriges
+tausendmal
+tausendste
+tausendstel
+tausendstels
+tausendstem
+tausendsten
+tausendster
+tausendstes
+taust
+taut
+taute
+tauten
+tautest
+tautet
+tautologisch
+tautologische
+tautologischem
+tautologischen
+tautologischer
+tautologisches
+taxiere
+taxieren
+taxierend
+taxierende
+taxierendem
+taxierenden
+taxierender
+taxierendes
+taxierst
+taxiert
+taxierte
+taxiertem
+taxierten
+taxierter
+taxiertes
+taxiertest
+taxiertet
+taylorisierbar
+taylorisierbare
+taylorisierbarem
+taylorisierbaren
+taylorisierbarer
+taylorisierbares
+taylorisiere
+taylorisieren
+taylorisierend
+taylorisierende
+taylorisierendem
+taylorisierenden
+taylorisierender
+taylorisierendes
+taylorisierst
+taylorisiert
+taylorisierte
+taylorisierten
+taylorisiertest
+taylorisiertet
+technisch
+technische
+technischem
+technischen
+technischer
+technischere
+technischerem
+technischeren
+technischerer
+technischeres
+technisches
+technischste
+technischstem
+technischsten
+technischster
+technischstes
+technokratisch
+technokratische
+technokratischem
+technokratischen
+technokratischer
+technokratisches
+technologieinduziert
+technologieinduzierte
+technologieinduziertem
+technologieinduzierten
+technologieinduzierter
+technologieinduziertes
+technologisch
+technologische
+technologischem
+technologischen
+technologischer
+technologisches
+teere
+teeren
+teerend
+teerende
+teerendem
+teerenden
+teerender
+teerendes
+teerst
+teert
+teerte
+teerten
+teertest
+teertet
+teigig
+teigige
+teigigem
+teigigen
+teigiger
+teigigere
+teigigerem
+teigigeren
+teigigerer
+teigigeres
+teigiges
+teigigste
+teigigstem
+teigigsten
+teigigster
+teigigstes
+teil
+teilbar
+teilbare
+teilbarem
+teilbaren
+teilbarer
+teilbarere
+teilbarerem
+teilbareren
+teilbarerer
+teilbareres
+teilbares
+teilbarste
+teilbarstem
+teilbarsten
+teilbarster
+teilbarstes
+teilbestücken
+teilbestückt
+teilbestückte
+teilbestücktem
+teilbestückten
+teilbestückter
+teilbestücktes
+teile
+teilen
+teilend
+teilende
+teilendem
+teilenden
+teilender
+teilendes
+teilgenommen
+teilgenommene
+teilgenommenem
+teilgenommenen
+teilgenommener
+teilgenommenes
+teilhabe
+teilhaben
+teilhabend
+teilhabende
+teilhabendem
+teilhabenden
+teilhabender
+teilhabendes
+teilhabt
+teilhaftig
+teilhaftige
+teilhaftigem
+teilhaftigen
+teilhaftiger
+teilhaftiges
+teilnahm
+teilnahmen
+teilnahmslos
+teilnahmslose
+teilnahmslosem
+teilnahmslosen
+teilnahmsloser
+teilnahmslosere
+teilnahmsloserem
+teilnahmsloseren
+teilnahmsloserer
+teilnahmsloseres
+teilnahmsloses
+teilnahmsloseste
+teilnahmslosestem
+teilnahmslosesten
+teilnahmslosester
+teilnahmslosestes
+teilnahmst
+teilnahmsvoll
+teilnahmsvolle
+teilnahmsvollem
+teilnahmsvollen
+teilnahmsvoller
+teilnahmsvollere
+teilnahmsvollerem
+teilnahmsvolleren
+teilnahmsvollerer
+teilnahmsvolleres
+teilnahmsvolles
+teilnahmsvollste
+teilnahmsvollstem
+teilnahmsvollsten
+teilnahmsvollster
+teilnahmsvollstes
+teilnahmt
+teilnehme
+teilnehmen
+teilnehmend
+teilnehmende
+teilnehmendem
+teilnehmenden
+teilnehmender
+teilnehmendes
+teilnehmt
+teilnimmst
+teilnimmt
+teils
+teilst
+teilt
+teilte
+teilten
+teiltest
+teiltet
+teilweise
+teilweisem
+teilweisen
+teilweiser
+teilweises
+teilzuhaben
+teilzunehmen
+tektonisch
+tektonische
+tektonischem
+tektonischen
+tektonischer
+tektonisches
+tel
+telefoniere
+telefonieren
+telefonierend
+telefonierende
+telefonierendem
+telefonierenden
+telefonierender
+telefonierendes
+telefonierst
+telefoniert
+telefonierte
+telefonierten
+telefoniertest
+telefoniertet
+telefonisch
+telefonische
+telefonischem
+telefonischen
+telefonischer
+telefonisches
+telegrafiere
+telegrafieren
+telegrafierend
+telegrafierende
+telegrafierendem
+telegrafierenden
+telegrafierender
+telegrafierendes
+telegrafierst
+telegrafiert
+telegrafierte
+telegrafierten
+telegrafiertest
+telegrafiertet
+telegrafisch
+telegrafische
+telegrafischem
+telegrafischen
+telegrafischer
+telegrafisches
+telegraphiere
+telegraphieren
+telegraphierend
+telegraphierende
+telegraphierendem
+telegraphierenden
+telegraphierender
+telegraphierendes
+telegraphierst
+telegraphiert
+telegraphierte
+telegraphierten
+telegraphiertest
+telegraphiertet
+telegraphisch
+telegraphische
+telegraphischem
+telegraphischen
+telegraphischer
+telegraphisches
+teleologisch
+teleologische
+teleologischem
+teleologischen
+teleologischer
+teleologisches
+telepathisch
+telepathische
+telepathischem
+telepathischen
+telepathischer
+telepathischere
+telepathischerem
+telepathischeren
+telepathischerer
+telepathischeres
+telepathisches
+telepathischste
+telepathischstem
+telepathischsten
+telepathischster
+telepathischstes
+teleskopisch
+teleskopische
+teleskopischem
+teleskopischen
+teleskopischer
+teleskopisches
+temperamentlos
+temperamentlose
+temperamentlosem
+temperamentlosen
+temperamentloser
+temperamentloses
+temperamentvoll
+temperamentvolle
+temperamentvollem
+temperamentvollen
+temperamentvoller
+temperamentvollere
+temperamentvollerem
+temperamentvolleren
+temperamentvollerer
+temperamentvolleres
+temperamentvolles
+temperamentvollste
+temperamentvollstem
+temperamentvollsten
+temperamentvollster
+temperamentvollstes
+temperaturabhängig
+temperaturabhängige
+temperaturabhängigem
+temperaturabhängigen
+temperaturabhängiger
+temperaturabhängiges
+temperiere
+temperieren
+temperierend
+temperierende
+temperierendem
+temperierenden
+temperierender
+temperierendes
+temperierst
+temperiert
+temperierte
+temperiertem
+temperierten
+temperierter
+temperiertes
+temperiertest
+temperiertet
+temporär
+temporäre
+temporärem
+temporären
+temporärer
+temporäres
+tendenziell
+tendenzielle
+tendenziellem
+tendenziellen
+tendenzieller
+tendenzielles
+tendenziös
+tendenziöse
+tendenziösem
+tendenziösen
+tendenziöser
+tendenziösere
+tendenziöserem
+tendenziöseren
+tendenziöserer
+tendenziöseres
+tendenziöses
+tendenziöseste
+tendenziösestem
+tendenziösesten
+tendenziösester
+tendenziösestes
+tendiere
+tendieren
+tendierend
+tendierende
+tendierendem
+tendierenden
+tendierender
+tendierendes
+tendierst
+tendiert
+tendierte
+tendierten
+tendiertest
+tendiertet
+termingerecht
+termingerechte
+termingerechtem
+termingerechten
+termingerechter
+termingerechtes
+terminiere
+terminieren
+terminierend
+terminierende
+terminierendem
+terminierenden
+terminierender
+terminierendes
+terminierst
+terminiert
+terminierte
+terminiertem
+terminierten
+terminierter
+terminiertes
+terminiertest
+terminiertet
+terminlich
+terminliche
+terminlichem
+terminlichen
+terminlicher
+terminliches
+terrassenförmig
+terrassenförmige
+terrassenförmigem
+terrassenförmigen
+terrassenförmiger
+terrassenförmiges
+terrestrisch
+terrestrische
+terrestrischem
+terrestrischen
+terrestrischer
+terrestrisches
+territorial
+territoriale
+territorialem
+territorialen
+territorialer
+territoriales
+terrorisiere
+terrorisieren
+terrorisierend
+terrorisierende
+terrorisierendem
+terrorisierenden
+terrorisierender
+terrorisierendes
+terrorisierst
+terrorisiert
+terrorisierte
+terrorisiertem
+terrorisierten
+terrorisierter
+terrorisiertes
+terrorisiertest
+terrorisiertet
+tertiär
+tertiäre
+tertiärem
+tertiären
+tertiärer
+tertiäres
+testamentarisch
+testamentarische
+testamentarischem
+testamentarischen
+testamentarischer
+testamentarisches
+testbar
+testbare
+testbarem
+testbaren
+testbarer
+testbares
+teste
+testen
+testend
+testende
+testendem
+testenden
+testender
+testendes
+testest
+testet
+testete
+testeten
+testetest
+testetet
+testiere
+testieren
+testierend
+testierende
+testierendem
+testierenden
+testierender
+testierendes
+testierst
+testiert
+testierte
+testiertem
+testierten
+testierter
+testiertes
+testiertest
+testiertet
+teuer
+teuerste
+teuerstem
+teuersten
+teuerster
+teuerstes
+teufqqlisch
+teufqqlische
+teufqqlischem
+teufqqlischen
+teufqqlischer
+teufqqlischere
+teufqqlischerem
+teufqqlischeren
+teufqqlischerer
+teufqqlischeres
+teufqqlisches
+teufqqlischste
+teufqqlischstem
+teufqqlischsten
+teufqqlischster
+teufqqlischstes
+teure
+teurem
+teuren
+teurer
+teurere
+teurerem
+teureren
+teurerer
+teureres
+teures
+teutonisch
+teutonische
+teutonischem
+teutonischen
+teutonischer
+teutonisches
+texanisch
+texanische
+texanischem
+texanischen
+texanischer
+texanisches
+textkritisch
+textkritische
+textkritischem
+textkritischen
+textkritischer
+textkritisches
+textlich
+textliche
+textlichem
+textlichen
+textlicher
+textliches
+textlinguistisch
+textlinguistische
+textlinguistischem
+textlinguistischen
+textlinguistischer
+textlinguistisches
+textuell
+textuelle
+textuellem
+textuellen
+textueller
+textuelles
+thailändisch
+thailändische
+thailändischem
+thailändischen
+thailändischer
+thailändisches
+theatralisch
+theatralische
+theatralischem
+theatralischen
+theatralischer
+theatralisches
+thematisch
+thematische
+thematischem
+thematischen
+thematischer
+thematisches
+thematisiere
+thematisieren
+thematisierend
+thematisierende
+thematisierendem
+thematisierenden
+thematisierender
+thematisierendes
+thematisierst
+thematisiert
+thematisierte
+thematisiertem
+thematisierten
+thematisierter
+thematisiertes
+thematisiertest
+thematisiertet
+themenverwandt
+themenverwandte
+themenverwandtem
+themenverwandten
+themenverwandter
+themenverwandtes
+theologisch
+theologische
+theologischem
+theologischen
+theologischer
+theologisches
+theoretisch
+theoretische
+theoretischem
+theoretischen
+theoretischer
+theoretischere
+theoretischerem
+theoretischeren
+theoretischerer
+theoretischeres
+theoretisches
+theoretischste
+theoretischstem
+theoretischsten
+theoretischster
+theoretischstes
+theoretisiere
+theoretisieren
+theoretisierend
+theoretisierende
+theoretisierendem
+theoretisierenden
+theoretisierender
+theoretisierendes
+theoretisierst
+theoretisiert
+theoretisierte
+theoretisierten
+theoretisiertest
+theoretisiertet
+therapeutisch
+therapeutische
+therapeutischem
+therapeutischen
+therapeutischer
+therapeutisches
+thermisch
+thermische
+thermischem
+thermischen
+thermischer
+thermisches
+thermometrisch
+thermometrische
+thermometrischem
+thermometrischen
+thermometrischer
+thermometrisches
+thermoplastisch
+thermoplastische
+thermoplastischem
+thermoplastischen
+thermoplastischer
+thermoplastisches
+theta
+throne
+thronen
+thronend
+thronende
+thronendem
+thronenden
+thronender
+thronendes
+thronst
+thront
+thronte
+thronten
+throntest
+throntet
+thüringisch
+thüringische
+thüringischem
+thüringischen
+thüringischer
+thüringisches
+tibetanisch
+tibetanische
+tibetanischem
+tibetanischen
+tibetanischer
+tibetanisches
+tibetisch
+tibetische
+tibetischem
+tibetischen
+tibetischer
+tibetisches
+ticke
+ticken
+tickend
+tickende
+tickendem
+tickenden
+tickender
+tickendes
+tickst
+tickt
+tickte
+tickten
+ticktest
+ticktet
+tief
+tiefblau
+tiefblaue
+tiefblauem
+tiefblauen
+tiefblauer
+tiefblaues
+tiefe
+tiefem
+tiefen
+tiefer
+tiefere
+tieferem
+tieferen
+tieferer
+tieferes
+tiefes
+tiefgekühlt
+tiefgekühlte
+tiefgekühltem
+tiefgekühlten
+tiefgekühlter
+tiefgekühltes
+tiefgeladen
+tiefgeladene
+tiefgeladenem
+tiefgeladenen
+tiefgeladener
+tiefgeladenes
+tiefqqladbar
+tiefqqladbare
+tiefqqladbarem
+tiefqqladbaren
+tiefqqladbarer
+tiefqqladbares
+tiefschwarz
+tiefschwarze
+tiefschwarzem
+tiefschwarzen
+tiefschwarzer
+tiefschwarzes
+tiefsinnig
+tiefsinnige
+tiefsinnigem
+tiefsinnigen
+tiefsinniger
+tiefsinnigere
+tiefsinnigerem
+tiefsinnigeren
+tiefsinnigerer
+tiefsinnigeres
+tiefsinniges
+tiefsinnigste
+tiefsinnigstem
+tiefsinnigsten
+tiefsinnigster
+tiefsinnigstes
+tiefste
+tiefstelle
+tiefstellen
+tiefstellst
+tiefstellt
+tiefstellte
+tiefstellten
+tiefstelltest
+tiefstelltet
+tiefstem
+tiefsten
+tiefster
+tiefstes
+tiefzuladen
+tiefzuladenen
+tierisch
+tierische
+tierischem
+tierischen
+tierischer
+tierisches
+tierlieb
+tierliebe
+tierliebem
+tierlieben
+tierliebend
+tierliebende
+tierliebendem
+tierliebenden
+tierliebender
+tierliebendes
+tierlieber
+tierliebes
+tilgbar
+tilgbare
+tilgbarem
+tilgbaren
+tilgbarer
+tilgbarere
+tilgbarerem
+tilgbareren
+tilgbarerer
+tilgbareres
+tilgbares
+tilgbarste
+tilgbarstem
+tilgbarsten
+tilgbarster
+tilgbarstes
+tilge
+tilgen
+tilgend
+tilgende
+tilgendem
+tilgenden
+tilgender
+tilgendes
+tilgst
+tilgt
+tilgte
+tilgten
+tilgtest
+tilgtet
+tippe
+tippele
+tippeln
+tippelnd
+tippelnde
+tippelndem
+tippelnden
+tippelnder
+tippelndes
+tippelst
+tippelt
+tippelte
+tippelten
+tippeltest
+tippeltet
+tippen
+tippend
+tippende
+tippendem
+tippenden
+tippender
+tippendes
+tipple
+tippst
+tippt
+tippte
+tippten
+tipptest
+tipptet
+tirolerisch
+tirolerische
+tirolerischem
+tirolerischen
+tirolerischer
+tirolerisches
+tischlere
+tischlern
+tischlernd
+tischlernde
+tischlerndem
+tischlernden
+tischlernder
+tischlerndes
+tischlerst
+tischlert
+tischlerte
+tischlerten
+tischlertest
+tischlertet
+tischlre
+titanisch
+titanische
+titanischem
+titanischen
+titanischer
+titanisches
+tituliere
+titulieren
+titulierend
+titulierende
+titulierendem
+titulierenden
+titulierender
+titulierendes
+titulierst
+tituliert
+titulierte
+tituliertem
+titulierten
+titulierter
+tituliertes
+tituliertest
+tituliertet
+toaste
+toasten
+toastend
+toastende
+toastendem
+toastenden
+toastender
+toastendes
+toastest
+toastet
+toastete
+toasteten
+toastetest
+toastetet
+tobe
+toben
+tobend
+tobende
+tobendem
+tobenden
+tobender
+tobendes
+tobst
+tobsüchtig
+tobsüchtige
+tobsüchtigem
+tobsüchtigen
+tobsüchtiger
+tobsüchtiges
+tobt
+tobte
+tobten
+tobtest
+tobtet
+todblass
+todblasse
+todblassem
+todblassen
+todblasser
+todblasses
+todbringend
+todbringende
+todbringendem
+todbringenden
+todbringender
+todbringendes
+todernst
+todernste
+todernstem
+todernsten
+todernster
+todernstes
+todgeweiht
+todgeweihte
+todgeweihtem
+todgeweihten
+todgeweihter
+todgeweihtes
+todkrank
+todkranke
+todkrankem
+todkranken
+todkranker
+todkrankes
+todlangweilig
+todlangweilige
+todlangweiligem
+todlangweiligen
+todlangweiliger
+todlangweiliges
+todmüd
+todmüde
+todmüdem
+todmüden
+todmüder
+todmüdes
+todschick
+todschicke
+todschickem
+todschicken
+todschicker
+todschickes
+todsicher
+todsichere
+todsicherem
+todsicheren
+todsicherer
+todsicheres
+toggele
+toggeln
+toggelnd
+toggelnde
+toggelndem
+toggelnden
+toggelnder
+toggelndes
+toggelst
+toggelt
+toggelte
+toggelten
+toggeltest
+toggeltet
+toggle
+tolerabel
+tolerable
+tolerablem
+tolerablen
+tolerabler
+tolerables
+tolerant
+tolerante
+tolerantem
+toleranten
+toleranter
+tolerantere
+toleranterem
+toleranteren
+toleranterer
+toleranteres
+tolerantes
+toleranteste
+tolerantestem
+tolerantesten
+tolerantester
+tolerantestes
+toleranzbedingt
+toleranzbedingte
+toleranzbedingtem
+toleranzbedingten
+toleranzbedingter
+toleranzbedingtes
+toleriere
+tolerieren
+tolerierend
+tolerierende
+tolerierendem
+tolerierenden
+tolerierender
+tolerierendes
+tolerierst
+toleriert
+tolerierte
+toleriertem
+tolerierten
+tolerierter
+toleriertes
+toleriertest
+toleriertet
+toll
+tolle
+tollem
+tollen
+tollend
+tollende
+tollendem
+tollenden
+tollender
+tollendes
+toller
+tollere
+tollerem
+tolleren
+tollerer
+tolleres
+tolles
+tollkühn
+tollkühne
+tollkühnem
+tollkühnen
+tollkühner
+tollkühnere
+tollkühnerem
+tollkühneren
+tollkühnerer
+tollkühneres
+tollkühnes
+tollkühnste
+tollkühnstem
+tollkühnsten
+tollkühnster
+tollkühnstes
+tollpatschig
+tollpatschige
+tollpatschigem
+tollpatschigen
+tollpatschiger
+tollpatschiges
+tollst
+tollste
+tollstem
+tollsten
+tollster
+tollstes
+tollt
+tollte
+tollten
+tolltest
+tolltet
+tonangebend
+tonangebende
+tonangebendem
+tonangebenden
+tonangebender
+tonangebendes
+tonhaltig
+tonhaltige
+tonhaltigem
+tonhaltigen
+tonhaltiger
+tonhaltiges
+tonlos
+tonlose
+tonlosem
+tonlosen
+tonloser
+tonlosere
+tonloserem
+tonloseren
+tonloserer
+tonloseres
+tonloses
+tonloseste
+tonlosestem
+tonlosesten
+tonlosester
+tonlosestes
+tonnenweise
+topfit
+topfite
+topfitem
+topfiten
+topfiter
+topfites
+topographisch
+topographische
+topographischem
+topographischen
+topographischer
+topographisches
+topologisch
+topologische
+topologischem
+topologischen
+topologischer
+topologisches
+torkele
+torkeln
+torkelnd
+torkelnde
+torkelndem
+torkelnden
+torkelnder
+torkelndes
+torkelst
+torkelt
+torkelte
+torkelten
+torkeltest
+torkeltet
+torkle
+torlos
+torlose
+torlosem
+torlosen
+torloser
+torloses
+torpediere
+torpedieren
+torpedierend
+torpedierende
+torpedierendem
+torpedierenden
+torpedierender
+torpedierendes
+torpedierst
+torpediert
+torpedierte
+torpediertem
+torpedierten
+torpedierter
+torpediertes
+torpediertest
+torpediertet
+tosen
+tosend
+tosende
+tosendem
+tosenden
+tosender
+tosendes
+tosest
+tost
+toste
+tosten
+tostest
+tostet
+tot
+total
+totale
+totalem
+totalen
+totaler
+totales
+totalitär
+totalitäre
+totalitärem
+totalitären
+totalitärer
+totalitärere
+totalitärerem
+totalitäreren
+totalitärerer
+totalitäreres
+totalitäres
+totalitärste
+totalitärstem
+totalitärsten
+totalitärster
+totalitärstes
+tote
+totem
+toten
+totenblass
+totenblasse
+totenblassem
+totenblassen
+totenblasser
+totenblasses
+totenbleich
+totenbleiche
+totenbleichem
+totenbleichen
+totenbleicher
+totenbleiches
+totenstill
+totenstille
+totenstillem
+totenstillen
+totenstiller
+totenstilles
+toter
+totes
+totgearbeitet
+totgearbeitete
+totgearbeitetem
+totgearbeiteten
+totgearbeiteter
+totgearbeitetes
+totgelaufen
+totgelaufene
+totgelaufenem
+totgelaufenen
+totgelaufener
+totgelaufenes
+totgeschlagen
+totgeschlagene
+totgeschlagenem
+totgeschlagenen
+totgeschlagener
+totgeschlagenes
+totgeschossen
+totgeschossene
+totgeschossenem
+totgeschossenen
+totgeschossener
+totgeschossenes
+totgeschwiegen
+totgeschwiegene
+totgeschwiegenem
+totgeschwiegenen
+totgeschwiegener
+totgeschwiegenes
+totgestellt
+totgestellte
+totgestelltem
+totgestellten
+totgestellter
+totgestelltes
+totgestochen
+totgestochene
+totgestochenem
+totgestochenen
+totgestochener
+totgestochenes
+totlache
+totlachen
+totlachend
+totlachende
+totlachendem
+totlachenden
+totlachender
+totlachendes
+totlachst
+totlacht
+totlachte
+totlachten
+totlachtest
+totlachtet
+totschweige
+totschweigen
+totschweigend
+totschweigende
+totschweigendem
+totschweigenden
+totschweigender
+totschweigendes
+totschweigst
+totschweigt
+toupiere
+toupieren
+toupierend
+toupierende
+toupierendem
+toupierenden
+toupierender
+toupierendes
+toupierst
+toupiert
+toupierte
+toupiertem
+toupierten
+toupierter
+toupiertes
+toupiertest
+toupiertet
+touristisch
+touristische
+touristischem
+touristischen
+touristischer
+touristisches
+trabe
+traben
+trabend
+trabende
+trabendem
+trabenden
+trabender
+trabendes
+trabst
+trabt
+trabte
+trabten
+trabtest
+trabtet
+trachte
+trachten
+trachtend
+trachtende
+trachtendem
+trachtenden
+trachtender
+trachtendes
+trachtest
+trachtet
+trachtete
+trachteten
+trachtetest
+trachtetet
+tradieren
+tradiertem
+tradierter
+tradiertes
+traditionell
+traditionelle
+traditionellem
+traditionellen
+traditioneller
+traditionellere
+traditionellerem
+traditionelleren
+traditionellerer
+traditionelleres
+traditionelles
+traditionellste
+traditionellstem
+traditionellsten
+traditionellster
+traditionellstes
+traditionsbewusst
+traditionsbewusste
+traditionsbewusstem
+traditionsbewussten
+traditionsbewusster
+traditionsbewusstes
+traditionsgemäß
+traditionsgemäße
+traditionsgemäßem
+traditionsgemäßen
+traditionsgemäßer
+traditionsgemäßes
+traditionsreich
+traditionsreiche
+traditionsreichem
+traditionsreichen
+traditionsreicher
+traditionsreiches
+traf
+trafen
+trafest
+trafst
+traft
+tragbar
+tragbare
+tragbarem
+tragbaren
+tragbarer
+tragbarere
+tragbarerem
+tragbareren
+tragbarerer
+tragbareres
+tragbares
+tragbarste
+tragbarstem
+tragbarsten
+tragbarster
+tragbarstes
+trage
+tragen
+tragend
+tragende
+tragendem
+tragenden
+tragender
+tragendes
+tragfähig
+tragfähige
+tragfähigem
+tragfähigen
+tragfähiger
+tragfähigere
+tragfähigerem
+tragfähigeren
+tragfähigerer
+tragfähigeres
+tragfähiges
+tragfähigste
+tragfähigstem
+tragfähigsten
+tragfähigster
+tragfähigstes
+tragikomisch
+tragikomische
+tragikomischem
+tragikomischen
+tragikomischer
+tragikomisches
+tragisch
+tragische
+tragischem
+tragischen
+tragischer
+tragischere
+tragischerem
+tragischeren
+tragischerer
+tragischeres
+tragisches
+tragischste
+tragischstem
+tragischsten
+tragischster
+tragischstes
+tragt
+trainiere
+trainieren
+trainierend
+trainierende
+trainierendem
+trainierenden
+trainierender
+trainierendes
+trainierst
+trainiert
+trainierte
+trainiertem
+trainierten
+trainierter
+trainiertes
+trainiertest
+trainiertet
+traktiere
+traktieren
+traktierend
+traktierende
+traktierendem
+traktierenden
+traktierender
+traktierendes
+traktierst
+traktiert
+traktierte
+traktiertem
+traktierten
+traktierter
+traktiertes
+traktiertest
+traktiertet
+trampele
+trampeln
+trampelnd
+trampelnde
+trampelndem
+trampelnden
+trampelnder
+trampelndes
+trampelst
+trampelt
+trampelte
+trampelten
+trampeltest
+trampeltet
+trample
+tranchiere
+tranchieren
+tranchierend
+tranchierende
+tranchierendem
+tranchierenden
+tranchierender
+tranchierendes
+tranchierst
+tranchiert
+tranchierte
+tranchiertem
+tranchierten
+tranchierter
+tranchiertes
+tranchiertest
+tranchiertet
+trank
+tranken
+trankest
+trankst
+trankt
+transatlantisch
+transatlantische
+transatlantischem
+transatlantischen
+transatlantischer
+transatlantisches
+transferiere
+transferieren
+transferierend
+transferierende
+transferierendem
+transferierenden
+transferierender
+transferierendes
+transferierst
+transferiert
+transferierte
+transferiertem
+transferierten
+transferierter
+transferiertes
+transferiertest
+transferiertet
+transformiere
+transformieren
+transformierend
+transformierende
+transformierendem
+transformierenden
+transformierender
+transformierendes
+transformierst
+transformiert
+transformierte
+transformiertem
+transformierten
+transformierter
+transformiertes
+transformiertest
+transformiertet
+transistorisiere
+transistorisieren
+transistorisierend
+transistorisierende
+transistorisierendem
+transistorisierenden
+transistorisierender
+transistorisierendes
+transistorisierst
+transistorisiert
+transistorisierte
+transistorisiertem
+transistorisierten
+transistorisierter
+transistorisiertes
+transistorisiertest
+transistorisiertet
+transitiv
+transitive
+transitivem
+transitiven
+transitiver
+transitives
+transparent
+transparente
+transparentem
+transparenten
+transparenter
+transparentere
+transparenterem
+transparenteren
+transparenterer
+transparenteres
+transparentes
+transparenteste
+transparentestem
+transparentesten
+transparentester
+transparentestes
+transpiriere
+transpirieren
+transpirierend
+transpirierende
+transpirierendem
+transpirierenden
+transpirierender
+transpirierendes
+transpirierst
+transpiriert
+transpirierte
+transpirierten
+transpiriertest
+transpiriertet
+transplantiere
+transplantieren
+transplantierend
+transplantierende
+transplantierendem
+transplantierenden
+transplantierender
+transplantierendes
+transplantierst
+transplantiert
+transplantierte
+transplantiertem
+transplantierten
+transplantierter
+transplantiertes
+transplantiertest
+transplantiertet
+transponierbar
+transponierbare
+transponierbarem
+transponierbaren
+transponierbarer
+transponierbares
+transponiere
+transponieren
+transponierend
+transponierende
+transponierendem
+transponierenden
+transponierender
+transponierendes
+transponierst
+transponiert
+transponierte
+transponiertem
+transponierten
+transponierter
+transponiertes
+transponiertest
+transponiertet
+transportabel
+transportabelste
+transportabelstem
+transportabelsten
+transportabelster
+transportabelstes
+transportable
+transportablem
+transportablen
+transportabler
+transportablere
+transportablerem
+transportableren
+transportablerer
+transportableres
+transportables
+transportiere
+transportieren
+transportierend
+transportierende
+transportierendem
+transportierenden
+transportierender
+transportierendes
+transportierst
+transportiert
+transportierte
+transportiertem
+transportierten
+transportierter
+transportiertes
+transportiertest
+transportiertet
+transversal
+transversale
+transversalem
+transversalen
+transversaler
+transversales
+trapezförmig
+trapezförmige
+trapezförmigem
+trapezförmigen
+trapezförmiger
+trapezförmiges
+trappele
+trappeln
+trappelnd
+trappelnde
+trappelndem
+trappelnden
+trappelnder
+trappelndes
+trappelst
+trappelt
+trappelte
+trappelten
+trappeltest
+trappeltet
+trapple
+trassiere
+trassieren
+trassierend
+trassierende
+trassierendem
+trassierenden
+trassierender
+trassierendes
+trassierst
+trassiert
+trassierte
+trassiertem
+trassierten
+trassierter
+trassiertes
+trassiertest
+trassiertet
+trat
+traten
+tratest
+tratet
+tratschen
+tratst
+traue
+trauen
+trauend
+trauende
+trauendem
+trauenden
+trauender
+trauendes
+trauere
+trauern
+trauernd
+trauernde
+trauerndem
+trauernden
+trauernder
+trauerndes
+trauerst
+trauert
+trauerte
+trauerten
+trauertest
+trauertet
+traulich
+trauliche
+traulichem
+traulichen
+traulicher
+traulichere
+traulicherem
+traulicheren
+traulicherer
+traulicheres
+trauliches
+traulichste
+traulichstem
+traulichsten
+traulichster
+traulichstes
+traumhaft
+traumhafte
+traumhaftem
+traumhaften
+traumhafter
+traumhaftes
+traure
+traurig
+traurige
+traurigem
+traurigen
+trauriger
+traurigere
+traurigerem
+traurigeren
+traurigerer
+traurigeres
+trauriges
+traurigste
+traurigstem
+traurigsten
+traurigster
+traurigstes
+traust
+traut
+traute
+trautem
+trauten
+trauter
+trautes
+trautest
+trautet
+traversierbar
+traversierbare
+traversierbarem
+traversierbaren
+traversierbarer
+traversierbares
+traversiere
+traversieren
+traversierend
+traversierende
+traversierendem
+traversierenden
+traversierender
+traversierendes
+traversierst
+traversiert
+traversierte
+traversiertem
+traversierten
+traversierter
+traversiertes
+traversiertest
+traversiertet
+travestiere
+travestieren
+travestierend
+travestierende
+travestierendem
+travestierenden
+travestierender
+travestierendes
+travestierst
+travestiert
+travestierte
+travestiertem
+travestierten
+travestierter
+travestiertes
+travestiertest
+travestiertet
+trecke
+trecken
+treckend
+treckende
+treckendem
+treckenden
+treckender
+treckendes
+treckst
+treckt
+treckte
+treckten
+trecktest
+trecktet
+treffe
+treffen
+treffend
+treffende
+treffendem
+treffenden
+treffender
+treffendes
+treffqqlich
+treffqqliche
+treffqqlichem
+treffqqlichen
+treffqqlicher
+treffqqlichere
+treffqqlicherem
+treffqqlicheren
+treffqqlicherer
+treffqqlicheres
+treffqqliches
+treffqqlichste
+treffqqlichstem
+treffqqlichsten
+treffqqlichster
+treffqqlichstes
+treffsicher
+treffsichere
+treffsicherem
+treffsicheren
+treffsicherer
+treffsicherere
+treffsichererem
+treffsichereren
+treffsichererer
+treffsichereres
+treffsicheres
+treffsicherste
+treffsicherstem
+treffsichersten
+treffsicherster
+treffsicherstes
+trefft
+treibe
+treiben
+treibend
+treibende
+treibendem
+treibenden
+treibender
+treibendes
+treibst
+treibt
+treidele
+treideln
+treidelnd
+treidelnde
+treidelndem
+treidelnden
+treidelnder
+treidelndes
+treidelst
+treidelt
+treidelte
+treidelten
+treideltest
+treideltet
+treidle
+tremoliere
+tremolieren
+tremolierend
+tremolierende
+tremolierendem
+tremolierenden
+tremolierender
+tremolierendes
+tremolierst
+tremoliert
+tremolierte
+tremoliertem
+tremolierten
+tremolierter
+tremoliertes
+tremoliertest
+tremoliertet
+trennbar
+trennbare
+trennbarem
+trennbaren
+trennbarer
+trennbarere
+trennbarerem
+trennbareren
+trennbarerer
+trennbareres
+trennbares
+trennbarste
+trennbarstem
+trennbarsten
+trennbarster
+trennbarstes
+trenne
+trennen
+trennend
+trennende
+trennendem
+trennenden
+trennender
+trennendere
+trennenderem
+trennenderen
+trennenderer
+trennenderes
+trennendes
+trennendste
+trennendstem
+trennendsten
+trennendster
+trennendstes
+trennscharf
+trennscharfe
+trennscharfem
+trennscharfen
+trennscharfer
+trennscharfes
+trennschärfer
+trennschärfere
+trennschärferem
+trennschärferen
+trennschärferer
+trennschärferes
+trennschärfste
+trennschärfstem
+trennschärfsten
+trennschärfster
+trennschärfstes
+trennst
+trennt
+trennte
+trennten
+trenntest
+trenntet
+trenschärfste
+trenschärfstem
+trenschärfsten
+trenschärfster
+trenschärfstes
+trenz
+trenze
+trenzen
+trenzend
+trenzende
+trenzendem
+trenzenden
+trenzender
+trenzendes
+trenzest
+trenzt
+trenzte
+trenzten
+trenztest
+trenztet
+trete
+treten
+tretend
+tretende
+tretendem
+tretenden
+tretender
+tretendes
+tretet
+treu
+treubrüchig
+treubrüchige
+treubrüchigem
+treubrüchigen
+treubrüchiger
+treubrüchigere
+treubrüchigerem
+treubrüchigeren
+treubrüchigerer
+treubrüchigeres
+treubrüchiges
+treubrüchigste
+treubrüchigstem
+treubrüchigsten
+treubrüchigster
+treubrüchigstes
+treue
+treuem
+treuen
+treuer
+treuere
+treuerem
+treueren
+treuerer
+treueres
+treues
+treueste
+treuestem
+treuesten
+treuester
+treuestes
+treuherzig
+treuherzige
+treuherzigem
+treuherzigen
+treuherziger
+treuherzigere
+treuherzigerem
+treuherzigeren
+treuherzigerer
+treuherzigeres
+treuherziges
+treuherzigste
+treuherzigstem
+treuherzigsten
+treuherzigster
+treuherzigstes
+treuhänderisch
+treuhänderische
+treuhänderischem
+treuhänderischen
+treuhänderischer
+treuhänderisches
+treulich
+treulos
+treulose
+treulosem
+treulosen
+treuloser
+treulosere
+treuloserem
+treuloseren
+treuloserer
+treuloseres
+treuloses
+treuloseste
+treulosestem
+treulosesten
+treulosester
+treulosestes
+treuselig
+treuselige
+treuseligem
+treuseligen
+treuseliger
+treuseliges
+treuste
+treustem
+treusten
+treuster
+treustes
+tributpflichtig
+tributpflichtige
+tributpflichtigem
+tributpflichtigen
+tributpflichtiger
+tributpflichtiges
+trichterförmig
+trichterförmige
+trichterförmigem
+trichterförmigen
+trichterförmiger
+trichterförmiges
+trickreicherweise
+trickse
+tricksen
+tricksest
+trickst
+trickste
+tricksten
+trickstest
+trickstet
+trieb
+trieben
+triebhaft
+triebhafte
+triebhaftem
+triebhaften
+triebhafter
+triebhaftere
+triebhafterem
+triebhafteren
+triebhafterer
+triebhafteres
+triebhaftes
+triebhafteste
+triebhaftestem
+triebhaftesten
+triebhaftester
+triebhaftestes
+triebst
+triebt
+triefe
+triefen
+triefend
+triefende
+triefendem
+triefenden
+triefender
+triefendes
+triefnass
+triefnasse
+triefnassem
+triefnassen
+triefnasser
+triefnasses
+triefst
+trieft
+triefte
+trieften
+trieftest
+trieftet
+triefäugig
+triefäugige
+triefäugigem
+triefäugigen
+triefäugiger
+triefäugiges
+triffst
+trifft
+triftig
+triftige
+triftigem
+triftigen
+triftiger
+triftigere
+triftigerem
+triftigeren
+triftigerer
+triftigeres
+triftiges
+triftigste
+triftigstem
+triftigsten
+triftigster
+triftigstes
+triggerbar
+triggerbare
+triggerbarem
+triggerbaren
+triggerbarer
+triggerbares
+triggere
+triggern
+triggernd
+triggernde
+triggerndem
+triggernden
+triggernder
+triggerndes
+triggerst
+triggert
+triggerte
+triggerten
+triggertest
+triggertet
+triggre
+trigonometrisch
+trigonometrische
+trigonometrischem
+trigonometrischen
+trigonometrischer
+trigonometrisches
+trilateral
+trilaterale
+trilateralem
+trilateralen
+trilateraler
+trilaterales
+trillere
+trillern
+trillernd
+trillernde
+trillerndem
+trillernden
+trillernder
+trillerndes
+trillerst
+trillert
+trillerte
+trillerten
+trillertest
+trillertet
+trillre
+trimme
+trimmen
+trimmend
+trimmende
+trimmendem
+trimmenden
+trimmender
+trimmendes
+trimmst
+trimmt
+trimmte
+trimmten
+trimmtest
+trimmtet
+trink
+trinkbar
+trinkbare
+trinkbarem
+trinkbaren
+trinkbarer
+trinkbares
+trinke
+trinken
+trinkend
+trinkende
+trinkendem
+trinkenden
+trinkender
+trinkendes
+trinkfest
+trinkfeste
+trinkfestem
+trinkfesten
+trinkfester
+trinkfestere
+trinkfesterem
+trinkfesteren
+trinkfesterer
+trinkfesteres
+trinkfestes
+trinkfesteste
+trinkfestestem
+trinkfestesten
+trinkfestester
+trinkfestestes
+trinkst
+trinkt
+trippele
+trippeln
+trippelnd
+trippelnde
+trippelndem
+trippelnden
+trippelnder
+trippelndes
+trippelst
+trippelt
+trippelte
+trippelten
+trippeltest
+trippeltet
+tripple
+trist
+triste
+tristem
+tristen
+trister
+tristere
+tristerem
+tristeren
+tristerer
+tristeres
+tristes
+tristeste
+tristestem
+tristesten
+tristester
+tristestes
+tritt
+trittst
+triumphal
+triumphale
+triumphalem
+triumphalen
+triumphaler
+triumphalere
+triumphalerem
+triumphaleren
+triumphalerer
+triumphaleres
+triumphales
+triumphalste
+triumphalstem
+triumphalsten
+triumphalster
+triumphalstes
+triumphiere
+triumphieren
+triumphierend
+triumphierende
+triumphierendem
+triumphierenden
+triumphierender
+triumphierendes
+triumphierst
+triumphiert
+triumphierte
+triumphierten
+triumphiertest
+triumphiertet
+trivial
+triviale
+trivialem
+trivialen
+trivialer
+trivialere
+trivialerem
+trivialeren
+trivialerer
+trivialeres
+trivialerweise
+triviales
+trivialste
+trivialstem
+trivialsten
+trivialster
+trivialstes
+trocken
+trockene
+trockenem
+trockenen
+trockener
+trockenere
+trockenerem
+trockeneren
+trockenerer
+trockeneres
+trockenes
+trockengelegt
+trockengelegte
+trockengelegtem
+trockengelegten
+trockengelegter
+trockengelegtes
+trockenlege
+trockenlegen
+trockenlegend
+trockenlegende
+trockenlegendem
+trockenlegenden
+trockenlegender
+trockenlegendes
+trockenlegst
+trockenlegt
+trockenlegte
+trockenlegten
+trockenlegtest
+trockenlegtet
+trockenste
+trockenstem
+trockensten
+trockenster
+trockenstes
+trockne
+trocknen
+trocknend
+trocknende
+trocknendem
+trocknenden
+trocknender
+trocknendes
+trocknest
+trocknet
+trocknete
+trockneten
+trocknetest
+trocknetet
+trog
+trogen
+trogst
+trogt
+trojanisch
+trojanische
+trojanischem
+trojanischen
+trojanischer
+trojanisches
+trolle
+trollen
+trollend
+trollende
+trollendem
+trollenden
+trollender
+trollendes
+trollst
+trollt
+trollte
+trollten
+trolltest
+trolltet
+trommele
+trommeln
+trommelnd
+trommelnde
+trommelndem
+trommelnden
+trommelnder
+trommelndes
+trommelst
+trommelt
+trommelte
+trommelten
+trommeltest
+trommeltet
+trommle
+trompete
+trompeten
+trompetend
+trompetende
+trompetendem
+trompetenden
+trompetender
+trompetendes
+trompetest
+trompetet
+trompetete
+trompeteten
+trompetetest
+trompetetet
+tropenfest
+tropenfeste
+tropenfestem
+tropenfesten
+tropenfester
+tropenfestere
+tropenfesterem
+tropenfesteren
+tropenfesterer
+tropenfesteres
+tropenfestes
+tropenfesteste
+tropenfestestem
+tropenfestesten
+tropenfestester
+tropenfestestes
+tropfe
+tropfen
+tropfend
+tropfende
+tropfendem
+tropfenden
+tropfender
+tropfendes
+tropfenförmig
+tropfenförmige
+tropfenförmigem
+tropfenförmigen
+tropfenförmiger
+tropfenförmiges
+tropfnass
+tropfnasse
+tropfnassem
+tropfnassen
+tropfnasser
+tropfnasses
+tropfst
+tropft
+tropfte
+tropften
+tropftest
+tropftet
+tropisch
+tropische
+tropischem
+tropischen
+tropischer
+tropischere
+tropischerem
+tropischeren
+tropischerer
+tropischeres
+tropisches
+tropischste
+tropischstem
+tropischsten
+tropischster
+tropischstes
+trostlos
+trostlose
+trostlosem
+trostlosen
+trostloser
+trostlosere
+trostloserem
+trostloseren
+trostloserer
+trostloseres
+trostloses
+trostloseste
+trostlosestem
+trostlosesten
+trostlosester
+trostlosestes
+trostreich
+trostreiche
+trostreichem
+trostreichen
+trostreicher
+trostreichere
+trostreicherem
+trostreicheren
+trostreicherer
+trostreicheres
+trostreiches
+trostreichste
+trostreichstem
+trostreichsten
+trostreichster
+trostreichstes
+trostvoll
+trostvolle
+trostvollem
+trostvollen
+trostvoller
+trostvolles
+trotte
+trotten
+trottend
+trottende
+trottendem
+trottenden
+trottender
+trottendes
+trottest
+trottet
+trottete
+trotteten
+trottetest
+trottetet
+trotz
+trotzdem
+trotze
+trotzen
+trotzend
+trotzende
+trotzendem
+trotzenden
+trotzender
+trotzendere
+trotzenderem
+trotzenderen
+trotzenderer
+trotzenderes
+trotzendes
+trotzendste
+trotzendstem
+trotzendsten
+trotzendster
+trotzendstes
+trotzest
+trotzig
+trotzige
+trotzigem
+trotzigen
+trotziger
+trotzigere
+trotzigerem
+trotzigeren
+trotzigerer
+trotzigeres
+trotziges
+trotzigste
+trotzigstem
+trotzigsten
+trotzigster
+trotzigstes
+trotzköpfig
+trotzköpfige
+trotzköpfigem
+trotzköpfigen
+trotzköpfiger
+trotzköpfigere
+trotzköpfigerem
+trotzköpfigeren
+trotzköpfigerer
+trotzköpfigeres
+trotzköpfiges
+trotzköpfigste
+trotzköpfigstem
+trotzköpfigsten
+trotzköpfigster
+trotzköpfigstes
+trotzt
+trotzte
+trotzten
+trotztest
+trotztet
+trudele
+trudeln
+trudelnd
+trudelnde
+trudelndem
+trudelnden
+trudelnder
+trudelndes
+trudelst
+trudelt
+trudelte
+trudelten
+trudeltest
+trudeltet
+trudle
+trug
+trugen
+trugst
+trugt
+trumpfe
+trumpfen
+trumpfend
+trumpfende
+trumpfendem
+trumpfenden
+trumpfender
+trumpfendes
+trumpfst
+trumpft
+trumpfte
+trumpften
+trumpftest
+trumpftet
+trunken
+trunkene
+trunkenem
+trunkenen
+trunkener
+trunkenere
+trunkenerem
+trunkeneren
+trunkenerer
+trunkeneres
+trunkenes
+trunkenste
+trunkenstem
+trunkensten
+trunkenster
+trunkenstes
+trunksüchtig
+trunksüchtige
+trunksüchtigem
+trunksüchtigen
+trunksüchtiger
+trunksüchtigere
+trunksüchtigerem
+trunksüchtigeren
+trunksüchtigerer
+trunksüchtigeres
+trunksüchtiges
+trunksüchtigste
+trunksüchtigstem
+trunksüchtigsten
+trunksüchtigster
+trunksüchtigstes
+truppweise
+trächtig
+trächtige
+trächtigem
+trächtigen
+trächtiger
+trächtigere
+trächtigerem
+trächtigeren
+trächtigerer
+trächtigeres
+trächtiges
+trächtigste
+trächtigstem
+trächtigsten
+trächtigster
+trächtigstes
+träfe
+träfen
+träfest
+träfet
+träg
+träge
+trägem
+trägen
+träger
+trägere
+trägerem
+trägeren
+trägerer
+trägeres
+trägerlos
+trägerlose
+trägerlosem
+trägerlosen
+trägerloser
+trägerloses
+träges
+trägst
+trägste
+trägstem
+trägsten
+trägster
+trägstes
+trägt
+trällere
+trällern
+trällernd
+trällernde
+trällerndem
+trällernden
+trällernder
+trällerndes
+trällerst
+trällert
+trällerte
+trällerten
+trällertest
+trällertet
+trällre
+träne
+tränen
+tränend
+tränende
+tränendem
+tränenden
+tränender
+tränendes
+tränennass
+tränennasse
+tränennassem
+tränennassen
+tränennasser
+tränennasses
+tränke
+tränken
+tränkend
+tränkende
+tränkendem
+tränkenden
+tränkender
+tränkendes
+tränkst
+tränkt
+tränkte
+tränkten
+tränktest
+tränktet
+tränst
+tränt
+tränte
+tränten
+träntest
+träntet
+träufele
+träufeln
+träufelnd
+träufelnde
+träufelndem
+träufelnden
+träufelnder
+träufelndes
+träufelst
+träufelt
+träufelte
+träufelten
+träufeltest
+träufeltet
+träufle
+träume
+träumen
+träumend
+träumende
+träumendem
+träumenden
+träumender
+träumendes
+träumerisch
+träumerische
+träumerischem
+träumerischen
+träumerischer
+träumerischere
+träumerischerem
+träumerischeren
+träumerischerer
+träumerischeres
+träumerisches
+träumerischste
+träumerischstem
+träumerischsten
+träumerischster
+träumerischstes
+träumst
+träumt
+träumte
+träumten
+träumtest
+träumtet
+trödele
+trödeln
+trödelnd
+trödelnde
+trödelndem
+trödelnden
+trödelnder
+trödelndes
+trödelst
+trödelt
+trödelte
+trödelten
+trödeltest
+trödeltet
+trödle
+tröpfchenweise
+tröpfele
+tröpfeln
+tröpfelnd
+tröpfelnde
+tröpfelndem
+tröpfelnden
+tröpfelnder
+tröpfelndes
+tröpfelst
+tröpfelt
+tröpfelte
+tröpfelten
+tröpfeltest
+tröpfeltet
+tröpfle
+tröste
+trösten
+tröstend
+tröstende
+tröstendem
+tröstenden
+tröstender
+tröstendes
+tröstest
+tröstet
+tröstete
+trösteten
+tröstetest
+tröstetet
+tröstlich
+tröstliche
+tröstlichem
+tröstlichen
+tröstlicher
+tröstlichere
+tröstlicherem
+tröstlicheren
+tröstlicherer
+tröstlicheres
+tröstliches
+tröstlichste
+tröstlichstem
+tröstlichsten
+tröstlichster
+tröstlichstes
+trüb
+trübe
+trübem
+trüben
+trübend
+trübende
+trübendem
+trübenden
+trübender
+trübendes
+trüber
+trübere
+trüberem
+trüberen
+trüberer
+trüberes
+trübes
+trübselig
+trübselige
+trübseligem
+trübseligen
+trübseliger
+trübseligere
+trübseligerem
+trübseligeren
+trübseligerer
+trübseligeres
+trübseliges
+trübseligste
+trübseligstem
+trübseligsten
+trübseligster
+trübseligstes
+trübsinnig
+trübsinnige
+trübsinnigem
+trübsinnigen
+trübsinniger
+trübsinnigere
+trübsinnigerem
+trübsinnigeren
+trübsinnigerer
+trübsinnigeres
+trübsinniges
+trübsinnigste
+trübsinnigstem
+trübsinnigsten
+trübsinnigster
+trübsinnigstes
+trübst
+trübste
+trübstem
+trübsten
+trübster
+trübstes
+trübt
+trübte
+trübten
+trübtest
+trübtet
+trüge
+trügen
+trügend
+trügende
+trügendem
+trügenden
+trügender
+trügendes
+trügerisch
+trügerische
+trügerischem
+trügerischen
+trügerischer
+trügerischere
+trügerischerem
+trügerischeren
+trügerischerer
+trügerischeres
+trügerisches
+trügerischste
+trügerischstem
+trügerischsten
+trügerischster
+trügerischstes
+trügst
+trügt
+tschechisch
+tschechische
+tschechischem
+tschechischen
+tschechischer
+tschechisches
+tschüs
+tschüss
+tsd
+tuberkulös
+tuberkulöse
+tuberkulösem
+tuberkulösen
+tuberkulöser
+tuberkulöses
+tue
+tuend
+tuende
+tuendem
+tuenden
+tuender
+tuendes
+tugendhaft
+tugendhafte
+tugendhaftem
+tugendhaften
+tugendhafter
+tugendhaftere
+tugendhafterem
+tugendhafteren
+tugendhafterer
+tugendhafteres
+tugendhaftes
+tugendhafteste
+tugendhaftestem
+tugendhaftesten
+tugendhaftester
+tugendhaftestes
+tugendreich
+tugendreiche
+tugendreichem
+tugendreichen
+tugendreicher
+tugendreichere
+tugendreicherem
+tugendreicheren
+tugendreicherer
+tugendreicheres
+tugendreiches
+tugendreichste
+tugendreichstem
+tugendreichsten
+tugendreichster
+tugendreichstes
+tummele
+tummeln
+tummelnd
+tummelnde
+tummelndem
+tummelnden
+tummelnder
+tummelndes
+tummelst
+tummelt
+tummelte
+tummelten
+tummeltest
+tummeltet
+tummle
+tumultuarisch
+tumultuarische
+tumultuarischem
+tumultuarischen
+tumultuarischer
+tumultuarisches
+tun
+tunesisch
+tunesische
+tunesischem
+tunesischen
+tunesischer
+tunesisches
+tunke
+tunken
+tunkend
+tunkende
+tunkendem
+tunkenden
+tunkender
+tunkendes
+tunkst
+tunkt
+tunkte
+tunkten
+tunktest
+tunktet
+tunlich
+tunliche
+tunlichem
+tunlichen
+tunlicher
+tunliches
+tunlichst
+tupfe
+tupfen
+tupfend
+tupfende
+tupfendem
+tupfenden
+tupfender
+tupfendes
+tupfst
+tupft
+tupfte
+tupften
+tupftest
+tupftet
+turbulent
+turbulente
+turbulentem
+turbulenten
+turbulenter
+turbulentes
+turmhoch
+turmhoche
+turmhochem
+turmhochen
+turmhocher
+turmhoches
+turmhohe
+turmhohem
+turmhohen
+turmhoher
+turmhohes
+turne
+turnen
+turnend
+turnende
+turnendem
+turnenden
+turnender
+turnendes
+turnerisch
+turnerische
+turnerischem
+turnerischen
+turnerischer
+turnerisches
+turnst
+turnt
+turnte
+turnten
+turntest
+turntet
+turnusmäßig
+turnusmäßige
+turnusmäßigem
+turnusmäßigen
+turnusmäßiger
+turnusmäßiges
+turtele
+turteln
+turtelnd
+turtelnde
+turtelndem
+turtelnden
+turtelnder
+turtelndes
+turtelst
+turtelt
+turtelte
+turtelten
+turteltest
+turteltet
+turtle
+tusche
+tuschele
+tuscheln
+tuschelnd
+tuschelnde
+tuschelndem
+tuschelnden
+tuschelnder
+tuschelndes
+tuschelst
+tuschelt
+tuschelte
+tuschelten
+tuscheltest
+tuscheltet
+tuschen
+tuschend
+tuschende
+tuschendem
+tuschenden
+tuschender
+tuschendes
+tuschest
+tuschle
+tuschst
+tuscht
+tuschte
+tuschten
+tuschtest
+tuschtet
+tust
+tut
+tute
+tuten
+tutend
+tutende
+tutendem
+tutenden
+tutender
+tutendes
+tutest
+tutet
+tutete
+tuteten
+tutetest
+tutetet
+typinkonsistent
+typinkonsistente
+typinkonsistentem
+typinkonsistenten
+typinkonsistenter
+typinkonsistentes
+typisch
+typische
+typischem
+typischen
+typischer
+typischere
+typischerem
+typischeren
+typischerer
+typischeres
+typischerweise
+typisches
+typischste
+typischstem
+typischsten
+typischster
+typischstes
+typisiere
+typisieren
+typisierend
+typisierende
+typisierendem
+typisierenden
+typisierender
+typisierendes
+typisierst
+typisiert
+typisierte
+typisiertem
+typisierten
+typisierter
+typisiertes
+typisiertest
+typisiertet
+typografisch
+typografische
+typografischem
+typografischen
+typografischer
+typografisches
+typographisch
+typographische
+typographischem
+typographischen
+typographischer
+typographisches
+tyrannisch
+tyrannische
+tyrannischem
+tyrannischen
+tyrannischer
+tyrannischere
+tyrannischerem
+tyrannischeren
+tyrannischerer
+tyrannischeres
+tyrannisches
+tyrannischste
+tyrannischstem
+tyrannischsten
+tyrannischster
+tyrannischstes
+tyrannisiere
+tyrannisieren
+tyrannisierend
+tyrannisierende
+tyrannisierendem
+tyrannisierenden
+tyrannisierender
+tyrannisierendes
+tyrannisierst
+tyrannisiert
+tyrannisierte
+tyrannisiertem
+tyrannisierten
+tyrannisierter
+tyrannisiertes
+tyrannisiertest
+tyrannisiertet
+täfele
+täfeln
+täfelnd
+täfelnde
+täfelndem
+täfelnden
+täfelnder
+täfelndes
+täfelst
+täfelt
+täfelte
+täfelten
+täfeltest
+täfeltet
+täfle
+täglich
+tägliche
+täglichem
+täglichen
+täglicher
+tägliches
+tändele
+tändeln
+tändelnd
+tändelnde
+tändelndem
+tändelnden
+tändelnder
+tändelndes
+tändelst
+tändelt
+tändelte
+tändelten
+tändeltest
+tändeltet
+tändle
+tänzele
+tänzeln
+tänzelnd
+tänzelnde
+tänzelndem
+tänzelnden
+tänzelnder
+tänzelndes
+tänzelst
+tänzelt
+tänzelte
+tänzelten
+tänzeltest
+tänzeltet
+tänzerisch
+tänzerische
+tänzerischem
+tänzerischen
+tänzerischer
+tänzerisches
+tänzle
+täppisch
+täppische
+täppischem
+täppischen
+täppischer
+täppisches
+täte
+täten
+tätest
+tätet
+tätig
+tätige
+tätigem
+tätigen
+tätigend
+tätigende
+tätigendem
+tätigenden
+tätigender
+tätigendes
+tätiger
+tätigere
+tätigerem
+tätigeren
+tätigerer
+tätigeres
+tätiges
+tätigst
+tätigste
+tätigstem
+tätigsten
+tätigster
+tätigstes
+tätigt
+tätigte
+tätigten
+tätigtest
+tätigtet
+tätlich
+tätliche
+tätlichem
+tätlichen
+tätlicher
+tätliches
+tätowiere
+tätowieren
+tätowierend
+tätowierende
+tätowierendem
+tätowierenden
+tätowierender
+tätowierendes
+tätowierst
+tätowiert
+tätowierte
+tätowiertem
+tätowierten
+tätowierter
+tätowiertes
+tätowiertest
+tätowiertet
+tätschele
+tätscheln
+tätschelnd
+tätschelnde
+tätschelndem
+tätschelnden
+tätschelnder
+tätschelndes
+tätschelst
+tätschelt
+tätschelte
+tätschelten
+tätscheltest
+tätscheltet
+tätschle
+täusche
+täuschen
+täuschend
+täuschende
+täuschendem
+täuschenden
+täuschender
+täuschendes
+täuschest
+täuschst
+täuscht
+täuschte
+täuschten
+täuschtest
+täuschtet
+tödlich
+tödliche
+tödlichem
+tödlichen
+tödlicher
+tödlichere
+tödlicherem
+tödlicheren
+tödlicherer
+tödlicheres
+tödliches
+tödlichste
+tödlichstem
+tödlichsten
+tödlichster
+tödlichstes
+tölpelhaft
+tölpelhafte
+tölpelhaftem
+tölpelhaften
+tölpelhafter
+tölpelhaftere
+tölpelhafterem
+tölpelhafteren
+tölpelhafterer
+tölpelhafteres
+tölpelhaftes
+tölpelhafteste
+tölpelhaftestem
+tölpelhaftesten
+tölpelhaftester
+tölpelhaftestes
+töne
+tönen
+tönend
+tönende
+tönendem
+tönenden
+tönender
+tönendes
+tönern
+tönerne
+tönernem
+tönernen
+tönerner
+tönernes
+tönst
+tönt
+tönte
+tönten
+töntest
+töntet
+töpfere
+töpfern
+töpfernd
+töpfernde
+töpferndem
+töpfernden
+töpfernder
+töpferndes
+töpferst
+töpfert
+töpferte
+töpferten
+töpfertest
+töpfertet
+töpfre
+töricht
+törichte
+törichtem
+törichten
+törichter
+törichtere
+törichterem
+törichteren
+törichterer
+törichteres
+törichtes
+törichteste
+törichtestem
+törichtesten
+törichtester
+törichtestes
+töte
+töten
+tötend
+tötende
+tötendem
+tötenden
+tötender
+tötendes
+tötest
+tötet
+tötete
+töteten
+tötetest
+tötetet
+tüchtig
+tüchtige
+tüchtigem
+tüchtigen
+tüchtiger
+tüchtigere
+tüchtigerem
+tüchtigeren
+tüchtigerer
+tüchtigeres
+tüchtiges
+tüchtigste
+tüchtigstem
+tüchtigsten
+tüchtigster
+tüchtigstes
+tückisch
+tückische
+tückischem
+tückischen
+tückischer
+tückischere
+tückischerem
+tückischeren
+tückischerer
+tückischeres
+tückisches
+tückischste
+tückischstem
+tückischsten
+tückischster
+tückischstes
+tüftele
+tüfteln
+tüftelnd
+tüftelnde
+tüftelndem
+tüftelnden
+tüftelnder
+tüftelndes
+tüftelst
+tüftelt
+tüftelte
+tüftelten
+tüfteltest
+tüfteltet
+tüftle
+tünche
+tünchen
+tünchend
+tünchende
+tünchendem
+tünchenden
+tünchender
+tünchendes
+tünchst
+tüncht
+tünchte
+tünchten
+tünchtest
+tünchtet
+türkisch
+türkische
+türkischem
+türkischen
+türkischer
+türkisches
+türme
+türmen
+türmend
+türmende
+türmendem
+türmenden
+türmender
+türmendes
+türmst
+türmt
+türmte
+türmten
+türmtest
+türmtet
+ubiquitär
+ubiquitäre
+ubiquitärem
+ubiquitären
+ubiquitärer
+ubiquitäres
+uferlos
+uferlose
+uferlosem
+uferlosen
+uferloser
+uferloses
+ukrainisch
+ukrainische
+ukrainischem
+ukrainischen
+ukrainischer
+ukrainisches
+ulke
+ulken
+ulkend
+ulkende
+ulkendem
+ulkenden
+ulkender
+ulkendes
+ulkig
+ulkige
+ulkigem
+ulkigen
+ulkiger
+ulkigere
+ulkigerem
+ulkigeren
+ulkigerer
+ulkigeres
+ulkiges
+ulkigste
+ulkigstem
+ulkigsten
+ulkigster
+ulkigstes
+ulkst
+ulkt
+ulkte
+ulkten
+ulktest
+ulktet
+ultima
+ultimativ
+ultimative
+ultimativem
+ultimativen
+ultimativer
+ultimatives
+ultramarin
+ultramarine
+ultramarinem
+ultramarinen
+ultramariner
+ultramarines
+ultraviolett
+ultraviolette
+ultraviolettem
+ultravioletten
+ultravioletter
+ultraviolettes
+um
+umadressiere
+umadressieren
+umadressierend
+umadressierende
+umadressierendem
+umadressierenden
+umadressierender
+umadressierendes
+umadressierst
+umadressiert
+umadressierte
+umadressiertem
+umadressierten
+umadressierter
+umadressiertes
+umadressiertest
+umadressiertet
+umarbeite
+umarbeiten
+umarbeitend
+umarbeitende
+umarbeitendem
+umarbeitenden
+umarbeitender
+umarbeitendes
+umarbeitest
+umarbeitet
+umarbeitete
+umarbeiteten
+umarbeitetest
+umarbeitetet
+umarme
+umarmen
+umarmend
+umarmende
+umarmendem
+umarmenden
+umarmender
+umarmendes
+umarmst
+umarmt
+umarmte
+umarmtem
+umarmten
+umarmter
+umarmtes
+umarmtest
+umarmtet
+umbaue
+umbauen
+umbauend
+umbauende
+umbauendem
+umbauenden
+umbauender
+umbauendes
+umbaust
+umbaut
+umbaute
+umbautem
+umbauten
+umbauter
+umbautes
+umbautest
+umbautet
+umbenannt
+umbenannte
+umbenanntem
+umbenannten
+umbenannter
+umbenanntes
+umbenenne
+umbenennen
+umbenennend
+umbenennende
+umbenennendem
+umbenennenden
+umbenennender
+umbenennendes
+umbenennst
+umbenennt
+umbette
+umbetten
+umbettend
+umbettende
+umbettendem
+umbettenden
+umbettender
+umbettendes
+umbettest
+umbettet
+umbettete
+umbetteten
+umbettetest
+umbettetet
+umbiege
+umbiegen
+umbiegend
+umbiegende
+umbiegendem
+umbiegenden
+umbiegender
+umbiegendes
+umbiegst
+umbiegt
+umbilde
+umbilden
+umbildend
+umbildende
+umbildendem
+umbildenden
+umbildender
+umbildendes
+umbildest
+umbildet
+umbildete
+umbildeten
+umbildetest
+umbildetet
+umblättere
+umblättern
+umblätternd
+umblätternde
+umblätterndem
+umblätternden
+umblätternder
+umblätterndes
+umblätterst
+umblättert
+umblätterte
+umblätterten
+umblättertest
+umblättertet
+umblättre
+umbringe
+umbringen
+umbringend
+umbringende
+umbringendem
+umbringenden
+umbringender
+umbringendes
+umbringst
+umbringt
+umbuche
+umbuchen
+umbuchend
+umbuchende
+umbuchendem
+umbuchenden
+umbuchender
+umbuchendes
+umbuchst
+umbucht
+umbuchte
+umbuchten
+umbuchtest
+umbuchtet
+umdenke
+umdenken
+umdenkend
+umdenkende
+umdenkendem
+umdenkenden
+umdenkender
+umdenkendes
+umdenkst
+umdenkt
+umdenkte
+umdenkten
+umdenktest
+umdenktet
+umdirigiere
+umdirigieren
+umdirigierend
+umdirigierende
+umdirigierendem
+umdirigierenden
+umdirigierender
+umdirigierendes
+umdirigierst
+umdirigiert
+umdirigierte
+umdirigiertem
+umdirigierten
+umdirigierter
+umdirigiertes
+umdirigiertest
+umdirigiertet
+umdisponiere
+umdisponieren
+umdisponierend
+umdisponierende
+umdisponierendem
+umdisponierenden
+umdisponierender
+umdisponierendes
+umdisponierst
+umdisponiert
+umdisponierte
+umdisponiertem
+umdisponierten
+umdisponierter
+umdisponiertes
+umdisponiertest
+umdisponiertet
+umdrehe
+umdrehen
+umdrehend
+umdrehende
+umdrehendem
+umdrehenden
+umdrehender
+umdrehendes
+umdrehst
+umdreht
+umdrehte
+umdrehten
+umdrehtest
+umdrehtet
+umfahre
+umfahren
+umfahrend
+umfahrende
+umfahrendem
+umfahrenden
+umfahrender
+umfahrendes
+umfahrene
+umfahrenem
+umfahrenen
+umfahrener
+umfahrenes
+umfahrt
+umfalle
+umfallen
+umfallend
+umfallende
+umfallendem
+umfallenden
+umfallender
+umfallendes
+umfallt
+umfange
+umfangen
+umfangend
+umfangende
+umfangendem
+umfangenden
+umfangender
+umfangendes
+umfangene
+umfangenem
+umfangenen
+umfangener
+umfangenes
+umfangreich
+umfangreiche
+umfangreichem
+umfangreichen
+umfangreicher
+umfangreichere
+umfangreicherem
+umfangreicheren
+umfangreicherer
+umfangreicheres
+umfangreiches
+umfangreichste
+umfangreichstem
+umfangreichsten
+umfangreichster
+umfangreichstes
+umfangt
+umfasse
+umfassen
+umfassend
+umfassende
+umfassendem
+umfassenden
+umfassender
+umfassendere
+umfassenderem
+umfassenderen
+umfassenderer
+umfassenderes
+umfassendes
+umfassendste
+umfassendstem
+umfassendsten
+umfassendster
+umfassendstes
+umfassest
+umfasst
+umfasste
+umfasstem
+umfassten
+umfasster
+umfasstes
+umfasstest
+umfasstet
+umfing
+umfingen
+umfingst
+umfingt
+umfliege
+umfliegen
+umfliegend
+umfliegende
+umfliegendem
+umfliegenden
+umfliegender
+umfliegendes
+umfliegst
+umfliegt
+umflog
+umflogen
+umflogene
+umflogenem
+umflogenen
+umflogener
+umflogenes
+umflogst
+umflogt
+umflute
+umfluten
+umflutend
+umflutende
+umflutendem
+umflutenden
+umflutender
+umflutendes
+umflutest
+umflutet
+umflutete
+umflutetem
+umfluteten
+umfluteter
+umflutetes
+umflutetest
+umflutetet
+umforme
+umformen
+umformend
+umformende
+umformendem
+umformenden
+umformender
+umformendes
+umformst
+umformt
+umformte
+umformten
+umformtest
+umformtet
+umformuliere
+umformulieren
+umformulierend
+umformulierende
+umformulierendem
+umformulierenden
+umformulierender
+umformulierendes
+umformulierst
+umformuliert
+umformulierte
+umformuliertem
+umformulierten
+umformulierter
+umformuliertes
+umformuliertest
+umformuliertet
+umfunktioniere
+umfunktionieren
+umfunktionierend
+umfunktionierende
+umfunktionierendem
+umfunktionierenden
+umfunktionierender
+umfunktionierendes
+umfunktionierst
+umfunktioniert
+umfunktionierte
+umfunktioniertem
+umfunktionierten
+umfunktionierter
+umfunktioniertes
+umfunktioniertest
+umfunktioniertet
+umfängst
+umfängt
+umfülle
+umfüllen
+umfüllend
+umfüllende
+umfüllendem
+umfüllenden
+umfüllender
+umfüllendes
+umfüllst
+umfüllt
+umfüllte
+umfüllten
+umfülltest
+umfülltet
+umgab
+umgaben
+umgabst
+umgabt
+umgangen
+umgangene
+umgangenem
+umgangenen
+umgangener
+umgangenes
+umgangssprachlich
+umgangssprachliche
+umgangssprachlichem
+umgangssprachlichen
+umgangssprachlicher
+umgangssprachliches
+umgarne
+umgarnen
+umgarnend
+umgarnende
+umgarnendem
+umgarnenden
+umgarnender
+umgarnendes
+umgarnst
+umgarnt
+umgarnte
+umgarntem
+umgarnten
+umgarnter
+umgarntes
+umgarntest
+umgarntet
+umgearbeitet
+umgearbeitete
+umgearbeitetem
+umgearbeiteten
+umgearbeiteter
+umgearbeitetes
+umgebaut
+umgebaute
+umgebautem
+umgebauten
+umgebauter
+umgebautes
+umgebe
+umgeben
+umgebend
+umgebende
+umgebendem
+umgebenden
+umgebender
+umgebendes
+umgebene
+umgebenem
+umgebenen
+umgebener
+umgebenes
+umgebettet
+umgebettete
+umgebettetem
+umgebetteten
+umgebetteter
+umgebettetes
+umgebildet
+umgebildete
+umgebildetem
+umgebildeten
+umgebildeter
+umgebildetes
+umgeblättert
+umgeblätterte
+umgeblättertem
+umgeblätterten
+umgeblätterter
+umgeblättertes
+umgebogen
+umgebogene
+umgebogenem
+umgebogenen
+umgebogener
+umgebogenes
+umgebracht
+umgebrachte
+umgebrachtem
+umgebrachten
+umgebrachter
+umgebrachtes
+umgebrochen
+umgebrochene
+umgebrochenem
+umgebrochenen
+umgebrochener
+umgebrochenes
+umgebt
+umgebucht
+umgebuchte
+umgebuchtem
+umgebuchten
+umgebuchter
+umgebuchtes
+umgebunden
+umgebundene
+umgebundenem
+umgebundenen
+umgebundener
+umgebundenes
+umgedreht
+umgedrehte
+umgedrehtem
+umgedrehten
+umgedrehter
+umgedrehtes
+umgedruckt
+umgedruckte
+umgedrucktem
+umgedruckten
+umgedruckter
+umgedrucktes
+umgefallen
+umgefallene
+umgefallenem
+umgefallenen
+umgefallener
+umgefallenes
+umgeformt
+umgeformte
+umgeformtem
+umgeformten
+umgeformter
+umgeformtes
+umgefüllt
+umgefüllte
+umgefülltem
+umgefüllten
+umgefüllter
+umgefülltes
+umgegangen
+umgegossen
+umgegossene
+umgegossenem
+umgegossenen
+umgegossener
+umgegossenes
+umgegraben
+umgegrabene
+umgegrabenem
+umgegrabenen
+umgegrabener
+umgegrabenes
+umgehabt
+umgehackt
+umgehackte
+umgehacktem
+umgehackten
+umgehackter
+umgehacktes
+umgehalst
+umgehalste
+umgehalstem
+umgehalsten
+umgehalster
+umgehalstes
+umgehauen
+umgehauene
+umgehauenem
+umgehauenen
+umgehauener
+umgehauenes
+umgehaut
+umgehe
+umgehen
+umgehend
+umgehende
+umgehendem
+umgehenden
+umgehender
+umgehendes
+umgehst
+umgeht
+umgehängt
+umgehängte
+umgehängtem
+umgehängten
+umgehängter
+umgehängtes
+umgekehrt
+umgekehrte
+umgekehrtem
+umgekehrten
+umgekehrter
+umgekehrtes
+umgekippt
+umgekippte
+umgekipptem
+umgekippten
+umgekippter
+umgekipptes
+umgeklappt
+umgeklappte
+umgeklapptem
+umgeklappten
+umgeklappter
+umgeklapptes
+umgekleidet
+umgekleidete
+umgekleidetem
+umgekleideten
+umgekleideter
+umgekleidetes
+umgeknickt
+umgeknickte
+umgeknicktem
+umgeknickten
+umgeknickter
+umgeknicktes
+umgekommen
+umgekommene
+umgekommenem
+umgekommenen
+umgekommener
+umgekommenes
+umgekrempelt
+umgekrempelte
+umgekrempeltem
+umgekrempelten
+umgekrempelter
+umgekrempeltes
+umgeladen
+umgeladene
+umgeladenem
+umgeladenen
+umgeladener
+umgeladenes
+umgelagert
+umgelagerte
+umgelagertem
+umgelagerten
+umgelagerter
+umgelagertes
+umgelegt
+umgelegte
+umgelegtem
+umgelegten
+umgelegter
+umgelegtes
+umgeleitet
+umgeleitete
+umgeleitetem
+umgeleiteten
+umgeleiteter
+umgeleitetes
+umgelenkt
+umgelenkte
+umgelenktem
+umgelenkten
+umgelenkter
+umgelenktes
+umgelernt
+umgelernte
+umgelerntem
+umgelernten
+umgelernter
+umgelerntes
+umgemodelt
+umgemodelte
+umgemodeltem
+umgemodelten
+umgemodelter
+umgemodeltes
+umgemünzt
+umgemünzte
+umgemünztem
+umgemünzten
+umgemünzter
+umgemünztes
+umgepackt
+umgepackte
+umgepacktem
+umgepackten
+umgepackter
+umgepacktes
+umgepflanzt
+umgepflanzte
+umgepflanztem
+umgepflanzten
+umgepflanzter
+umgepflanztes
+umgepflügt
+umgepflügte
+umgepflügtem
+umgepflügten
+umgepflügter
+umgepflügtes
+umgepolt
+umgepolte
+umgepoltem
+umgepolten
+umgepolter
+umgepoltes
+umgerechnet
+umgerechnete
+umgerechnetem
+umgerechneten
+umgerechneter
+umgerechnetes
+umgerissen
+umgerissene
+umgerissenem
+umgerissenen
+umgerissener
+umgerissenes
+umgerührt
+umgerührte
+umgerührtem
+umgerührten
+umgerührter
+umgerührtes
+umgerüstet
+umgerüstete
+umgerüstetem
+umgerüsteten
+umgerüsteter
+umgerüstetes
+umgesattelt
+umgesattelte
+umgesatteltem
+umgesattelten
+umgesattelter
+umgesatteltes
+umgeschaltet
+umgeschaltete
+umgeschaltetem
+umgeschalteten
+umgeschalteter
+umgeschaltetes
+umgeschaut
+umgeschichtet
+umgeschichtete
+umgeschichtetem
+umgeschichteten
+umgeschichteter
+umgeschichtetes
+umgeschlagen
+umgeschlagene
+umgeschlagenem
+umgeschlagenen
+umgeschlagener
+umgeschlagenes
+umgeschnallt
+umgeschnallte
+umgeschnalltem
+umgeschnallten
+umgeschnallter
+umgeschnalltes
+umgeschrieben
+umgeschriebene
+umgeschriebenem
+umgeschriebenen
+umgeschriebener
+umgeschriebenes
+umgeschuldet
+umgeschuldete
+umgeschuldetem
+umgeschuldeten
+umgeschuldeter
+umgeschuldetes
+umgeschult
+umgeschulte
+umgeschultem
+umgeschulten
+umgeschulter
+umgeschultes
+umgeschwenkt
+umgeschwenkte
+umgeschwenktem
+umgeschwenkten
+umgeschwenkter
+umgeschwenktes
+umgeschüttelt
+umgeschüttelte
+umgeschütteltem
+umgeschüttelten
+umgeschüttelter
+umgeschütteltes
+umgeschüttet
+umgeschüttete
+umgeschüttetem
+umgeschütteten
+umgeschütteter
+umgeschüttetes
+umgesehen
+umgesehene
+umgesehenem
+umgesehenen
+umgesehener
+umgesehenes
+umgesetzt
+umgesetzte
+umgesetztem
+umgesetzten
+umgesetzter
+umgesetztes
+umgesiedelt
+umgesiedelte
+umgesiedeltem
+umgesiedelten
+umgesiedelter
+umgesiedeltes
+umgesprungen
+umgesprungene
+umgesprungenem
+umgesprungenen
+umgesprungener
+umgesprungenes
+umgespult
+umgespulte
+umgespultem
+umgespulten
+umgespulter
+umgespultes
+umgestalte
+umgestalten
+umgestaltend
+umgestaltende
+umgestaltendem
+umgestaltenden
+umgestaltender
+umgestaltendes
+umgestaltest
+umgestaltet
+umgestaltete
+umgestaltetem
+umgestalteten
+umgestalteter
+umgestaltetes
+umgestaltetest
+umgestaltetet
+umgesteckt
+umgesteckte
+umgestecktem
+umgesteckten
+umgesteckter
+umgestecktes
+umgestellt
+umgestellte
+umgestelltem
+umgestellten
+umgestellter
+umgestelltes
+umgesteuert
+umgesteuerte
+umgesteuertem
+umgesteuerten
+umgesteuerter
+umgesteuertes
+umgestiegen
+umgestiegene
+umgestiegenem
+umgestiegenen
+umgestiegener
+umgestiegenes
+umgestimmt
+umgestimmte
+umgestimmtem
+umgestimmten
+umgestimmter
+umgestimmtes
+umgestoßen
+umgestoßene
+umgestoßenem
+umgestoßenen
+umgestoßener
+umgestoßenes
+umgestrickt
+umgestrickte
+umgestricktem
+umgestrickten
+umgestrickter
+umgestricktes
+umgestürzt
+umgestürzte
+umgestürztem
+umgestürzten
+umgestürzter
+umgestürztes
+umgesunken
+umgesunkene
+umgesunkenem
+umgesunkenen
+umgesunkener
+umgesunkenes
+umgetan
+umgetane
+umgetanem
+umgetanen
+umgetaner
+umgetanes
+umgetauft
+umgetaufte
+umgetauftem
+umgetauften
+umgetaufter
+umgetauftes
+umgetauscht
+umgetauschte
+umgetauschtem
+umgetauschten
+umgetauschter
+umgetauschtes
+umgewandelt
+umgewandelte
+umgewandeltem
+umgewandelten
+umgewandelter
+umgewandeltes
+umgewandt
+umgewandte
+umgewandtem
+umgewandten
+umgewandter
+umgewandtes
+umgewechselt
+umgewechselte
+umgewechseltem
+umgewechselten
+umgewechselter
+umgewechseltes
+umgewendet
+umgewendete
+umgewendetem
+umgewendeten
+umgewendeter
+umgewendetes
+umgewertet
+umgewertete
+umgewertetem
+umgewerteten
+umgewerteter
+umgewertetes
+umgeworfen
+umgeworfene
+umgeworfenem
+umgeworfenen
+umgeworfener
+umgeworfenes
+umgewälzt
+umgewälzte
+umgewälztem
+umgewälzten
+umgewälzter
+umgewälztes
+umgezogen
+umgezogene
+umgezogenem
+umgezogenen
+umgezogener
+umgezogenes
+umgeändert
+umgeänderte
+umgeändertem
+umgeänderten
+umgeänderter
+umgeändertes
+umgibst
+umgibt
+umgieße
+umgießen
+umgießend
+umgießende
+umgießendem
+umgießenden
+umgießender
+umgießendes
+umgießest
+umgießt
+umging
+umgingen
+umgingst
+umgingt
+umgoss
+umgossen
+umgossest
+umgosst
+umgrabe
+umgraben
+umgrabend
+umgrabende
+umgrabendem
+umgrabenden
+umgrabender
+umgrabendes
+umgrabt
+umgrenzend
+umgrenzende
+umgrenzendem
+umgrenzenden
+umgrenzender
+umgrenzendes
+umgrenzt
+umgrenzte
+umgrenztem
+umgrenzten
+umgrenzter
+umgrenztes
+umgruppiere
+umgruppieren
+umgruppierend
+umgruppierende
+umgruppierendem
+umgruppierenden
+umgruppierender
+umgruppierendes
+umgruppierst
+umgruppiert
+umgruppierte
+umgruppiertem
+umgruppierten
+umgruppierter
+umgruppiertes
+umgruppiertest
+umgruppiertet
+umgänglich
+umgängliche
+umgänglichem
+umgänglichen
+umgänglicher
+umgänglichere
+umgänglicherem
+umgänglicheren
+umgänglicherer
+umgänglicheres
+umgängliches
+umgänglichste
+umgänglichstem
+umgänglichsten
+umgänglichster
+umgänglichstes
+umgürte
+umgürten
+umgürtend
+umgürtende
+umgürtendem
+umgürtenden
+umgürtender
+umgürtendes
+umgürtest
+umgürtet
+umgürtete
+umgürtetem
+umgürteten
+umgürteter
+umgürtetes
+umgürtetest
+umgürtetet
+umhabe
+umhaben
+umhabend
+umhabende
+umhabendem
+umhabenden
+umhabender
+umhabendes
+umhabt
+umhacke
+umhacken
+umhackend
+umhackende
+umhackendem
+umhackenden
+umhackender
+umhackendes
+umhackst
+umhackt
+umhackte
+umhackten
+umhacktest
+umhacktet
+umhalse
+umhalsen
+umhalsend
+umhalsende
+umhalsendem
+umhalsenden
+umhalsender
+umhalsendes
+umhalsest
+umhalst
+umhalste
+umhalstem
+umhalsten
+umhalster
+umhalstes
+umhalstest
+umhalstet
+umhaue
+umhauen
+umhauend
+umhauende
+umhauendem
+umhauenden
+umhauender
+umhauendes
+umhaust
+umhaut
+umhaute
+umhauten
+umhautest
+umhautet
+umher
+umhergeirrt
+umhergeschweift
+umhergeschweifte
+umhergeschweiftem
+umhergeschweiften
+umhergeschweifter
+umhergeschweiftes
+umhergestrichen
+umhergestrichene
+umhergestrichenem
+umhergestrichenen
+umhergestrichener
+umhergestrichenes
+umhergewirbelt
+umhergewirbelte
+umhergewirbeltem
+umhergewirbelten
+umhergewirbelter
+umhergewirbeltes
+umhergezogen
+umhergezogene
+umhergezogenem
+umhergezogenen
+umhergezogener
+umhergezogenes
+umhin
+umhinkomme
+umhinkommen
+umhinkommend
+umhinkommende
+umhinkommendem
+umhinkommenden
+umhinkommender
+umhinkommendes
+umhinkommst
+umhinkommt
+umhänge
+umhängen
+umhängend
+umhängende
+umhängendem
+umhängenden
+umhängender
+umhängendes
+umhängst
+umhängt
+umhängte
+umhängtem
+umhängten
+umhängter
+umhängtes
+umhängtest
+umhängtet
+umhülle
+umhüllen
+umhüllend
+umhüllende
+umhüllendem
+umhüllenden
+umhüllender
+umhüllendes
+umhüllst
+umhüllt
+umhüllte
+umhülltem
+umhüllten
+umhüllter
+umhülltes
+umhülltest
+umhülltet
+umkehrbar
+umkehrbare
+umkehrbarem
+umkehrbaren
+umkehrbarer
+umkehrbares
+umkehre
+umkehren
+umkehrend
+umkehrende
+umkehrendem
+umkehrenden
+umkehrender
+umkehrendes
+umkehrst
+umkehrt
+umkehrte
+umkehrten
+umkehrtest
+umkehrtet
+umkippe
+umkippen
+umkippend
+umkippende
+umkippendem
+umkippenden
+umkippender
+umkippendes
+umkippst
+umkippt
+umkippte
+umkippten
+umkipptest
+umkipptet
+umklammere
+umklammern
+umklammernd
+umklammernde
+umklammerndem
+umklammernden
+umklammernder
+umklammerndes
+umklammerst
+umklammert
+umklammerte
+umklammertem
+umklammerten
+umklammerter
+umklammertes
+umklammertest
+umklammertet
+umklammre
+umklappe
+umklappen
+umklappend
+umklappende
+umklappendem
+umklappenden
+umklappender
+umklappendes
+umklappst
+umklappt
+umklappte
+umklappten
+umklapptest
+umklapptet
+umkleide
+umkleiden
+umkleidend
+umkleidende
+umkleidendem
+umkleidenden
+umkleidender
+umkleidendes
+umkleidest
+umkleidet
+umkleidete
+umkleideten
+umkleidetest
+umkleidetet
+umknicke
+umknicken
+umknickend
+umknickende
+umknickendem
+umknickenden
+umknickender
+umknickendes
+umknickst
+umknickt
+umknickte
+umknickten
+umknicktest
+umknicktet
+umkomme
+umkommen
+umkommend
+umkommende
+umkommendem
+umkommenden
+umkommender
+umkommendes
+umkommst
+umkommt
+umkonstruiere
+umkonstruieren
+umkonstruierend
+umkonstruierende
+umkonstruierendem
+umkonstruierenden
+umkonstruierender
+umkonstruierendes
+umkonstruierst
+umkonstruiert
+umkonstruierte
+umkonstruiertem
+umkonstruierten
+umkonstruierter
+umkonstruiertes
+umkonstruiertest
+umkonstruiertet
+umkreise
+umkreisen
+umkreisend
+umkreisende
+umkreisendem
+umkreisenden
+umkreisender
+umkreisendes
+umkreisest
+umkreist
+umkreiste
+umkreistem
+umkreisten
+umkreister
+umkreistes
+umkreistest
+umkreistet
+umkrempele
+umkrempeln
+umkrempelnd
+umkrempelnde
+umkrempelndem
+umkrempelnden
+umkrempelnder
+umkrempelndes
+umkrempelst
+umkrempelt
+umkrempelte
+umkrempelten
+umkrempeltest
+umkrempeltet
+umkremple
+umkämpfe
+umkämpfen
+umkämpfend
+umkämpfende
+umkämpfendem
+umkämpfenden
+umkämpfender
+umkämpfendes
+umkämpfst
+umkämpft
+umkämpfte
+umkämpftem
+umkämpften
+umkämpfter
+umkämpftes
+umkämpftest
+umkämpftet
+umlade
+umladen
+umladend
+umladende
+umladendem
+umladenden
+umladender
+umladendes
+umladet
+umlagere
+umlagern
+umlagernd
+umlagernde
+umlagerndem
+umlagernden
+umlagernder
+umlagerndes
+umlagerst
+umlagert
+umlagerte
+umlagertem
+umlagerten
+umlagerter
+umlagertes
+umlagertest
+umlagertet
+umlagre
+umlaufe
+umlaufen
+umlaufend
+umlaufende
+umlaufendem
+umlaufenden
+umlaufender
+umlaufendes
+umlaufene
+umlaufenem
+umlaufenen
+umlaufener
+umlaufenes
+umlauft
+umlaute
+umlauten
+umlautend
+umlautende
+umlautendem
+umlautenden
+umlautender
+umlautendes
+umlautest
+umlautet
+umlautete
+umlauteten
+umlautetest
+umlautetet
+umlege
+umlegen
+umlegend
+umlegende
+umlegendem
+umlegenden
+umlegender
+umlegendes
+umlegst
+umlegt
+umlegte
+umlegten
+umlegtest
+umlegtet
+umleite
+umleiten
+umleitend
+umleitende
+umleitendem
+umleitenden
+umleitender
+umleitendes
+umleitest
+umleitet
+umleitete
+umleiteten
+umleitetest
+umleitetet
+umlenke
+umlenken
+umlenkend
+umlenkende
+umlenkendem
+umlenkenden
+umlenkender
+umlenkendes
+umlenkst
+umlenkt
+umlenkte
+umlenkten
+umlenktest
+umlenktet
+umlerne
+umlernen
+umlernend
+umlernende
+umlernendem
+umlernenden
+umlernender
+umlernendes
+umlernst
+umlernt
+umlernte
+umlernten
+umlerntest
+umlerntet
+umlief
+umliefen
+umliefest
+umliefst
+umlieft
+umliegend
+umliegende
+umliegendem
+umliegenden
+umliegender
+umliegendes
+umlädst
+umlädt
+umläufst
+umläuft
+ummodele
+ummodeln
+ummodelnd
+ummodelnde
+ummodelndem
+ummodelnden
+ummodelnder
+ummodelndes
+ummodelst
+ummodelt
+ummodelte
+ummodelten
+ummodeltest
+ummodeltet
+ummodle
+umnachtet
+umnachtete
+umnachtetem
+umnachteten
+umnachteter
+umnachtetes
+umnebele
+umnebeln
+umnebelnd
+umnebelnde
+umnebelndem
+umnebelnden
+umnebelnder
+umnebelndes
+umnebelst
+umnebelt
+umnebelte
+umnebeltem
+umnebelten
+umnebelter
+umnebeltes
+umnebeltest
+umnebeltet
+umneble
+umorganisiere
+umorganisieren
+umorganisierend
+umorganisierende
+umorganisierendem
+umorganisierenden
+umorganisierender
+umorganisierendes
+umorganisierst
+umorganisiert
+umorganisierte
+umorganisiertem
+umorganisierten
+umorganisierter
+umorganisiertes
+umorganisiertest
+umorganisiertet
+umpflanze
+umpflanzen
+umpflanzend
+umpflanzende
+umpflanzendem
+umpflanzenden
+umpflanzender
+umpflanzendes
+umpflanzest
+umpflanzt
+umpflanzte
+umpflanzten
+umpflanztest
+umpflanztet
+umpflüge
+umpflügen
+umpflügend
+umpflügende
+umpflügendem
+umpflügenden
+umpflügender
+umpflügendes
+umpflügst
+umpflügt
+umpflügte
+umpflügten
+umpflügtest
+umpflügtet
+umpole
+umpolen
+umpolend
+umpolende
+umpolendem
+umpolenden
+umpolender
+umpolendes
+umpolst
+umpolt
+umpolte
+umpolten
+umpoltest
+umpoltet
+umprogrammierbar
+umprogrammierbare
+umprogrammierbarem
+umprogrammierbaren
+umprogrammierbarer
+umprogrammierbares
+umprogrammiere
+umprogrammieren
+umprogrammierend
+umprogrammierende
+umprogrammierendem
+umprogrammierenden
+umprogrammierender
+umprogrammierendes
+umprogrammierst
+umprogrammiert
+umprogrammierte
+umprogrammiertem
+umprogrammierten
+umprogrammierter
+umprogrammiertes
+umprogrammiertest
+umprogrammiertet
+umquartiere
+umquartieren
+umquartierend
+umquartierende
+umquartierendem
+umquartierenden
+umquartierender
+umquartierendes
+umquartierst
+umquartiert
+umquartierte
+umquartiertem
+umquartierten
+umquartierter
+umquartiertes
+umquartiertest
+umquartiertet
+umrahme
+umrahmen
+umrahmend
+umrahmende
+umrahmendem
+umrahmenden
+umrahmender
+umrahmendes
+umrahmst
+umrahmt
+umrahmte
+umrahmtem
+umrahmten
+umrahmter
+umrahmtes
+umrahmtest
+umrahmtet
+umrande
+umranden
+umrandend
+umrandende
+umrandendem
+umrandenden
+umrandender
+umrandendes
+umrandest
+umrandet
+umrandete
+umrandetem
+umrandeten
+umrandeter
+umrandetes
+umrandetest
+umrandetet
+umranke
+umranken
+umrankend
+umrankende
+umrankendem
+umrankenden
+umrankender
+umrankendes
+umrankst
+umrankt
+umrankte
+umranktem
+umrankten
+umrankter
+umranktes
+umranktest
+umranktet
+umrannt
+umrannten
+umranntest
+umranntet
+umranntst
+umrechne
+umrechnen
+umrechnend
+umrechnende
+umrechnendem
+umrechnenden
+umrechnender
+umrechnendes
+umrechnest
+umrechnet
+umrechnete
+umrechneten
+umrechnetest
+umrechnetet
+umreiße
+umreißen
+umreißend
+umreißende
+umreißendem
+umreißenden
+umreißender
+umreißendes
+umreißest
+umreißt
+umrenne
+umrennen
+umrennend
+umrennende
+umrennendem
+umrennenden
+umrennender
+umrennendes
+umrennst
+umrennt
+umringe
+umringen
+umringend
+umringende
+umringendem
+umringenden
+umringender
+umringendes
+umringst
+umringt
+umringte
+umringtem
+umringten
+umringter
+umringtes
+umringtest
+umringtet
+umriss
+umrissen
+umrissene
+umrissenem
+umrissenen
+umrissener
+umrissenes
+umrissest
+umrisst
+umrunde
+umrunden
+umrundend
+umrundende
+umrundendem
+umrundenden
+umrundender
+umrundendes
+umrundest
+umrundet
+umrundete
+umrundetem
+umrundeten
+umrundeter
+umrundetes
+umrundetest
+umrundetet
+umrühre
+umrühren
+umrührend
+umrührende
+umrührendem
+umrührenden
+umrührender
+umrührendes
+umrührst
+umrührt
+umrührte
+umrührten
+umrührtest
+umrührtet
+umrüste
+umrüsten
+umrüstest
+umrüstet
+umrüstete
+umrüsteten
+umrüstetest
+umrüstetet
+ums
+umsah
+umsahen
+umsahst
+umsaht
+umsattele
+umsatteln
+umsattelnd
+umsattelnde
+umsattelndem
+umsattelnden
+umsattelnder
+umsattelndes
+umsattelst
+umsattelt
+umsattelte
+umsattelten
+umsatteltest
+umsatteltet
+umsattle
+umschaltbar
+umschaltbare
+umschaltbarem
+umschaltbaren
+umschaltbarer
+umschaltbares
+umschalte
+umschalten
+umschaltend
+umschaltende
+umschaltendem
+umschaltenden
+umschaltender
+umschaltendes
+umschaltest
+umschaltet
+umschaltete
+umschalteten
+umschaltetest
+umschaltetet
+umschaue
+umschauen
+umschauend
+umschauende
+umschauendem
+umschauenden
+umschauender
+umschauendes
+umschaust
+umschaut
+umschaute
+umschauten
+umschautest
+umschautet
+umschichte
+umschichten
+umschichtend
+umschichtende
+umschichtendem
+umschichtenden
+umschichtender
+umschichtendes
+umschichtest
+umschichtet
+umschichtete
+umschichteten
+umschichtetest
+umschichtetet
+umschiffe
+umschiffen
+umschiffend
+umschiffende
+umschiffendem
+umschiffenden
+umschiffender
+umschiffendes
+umschiffst
+umschifft
+umschiffte
+umschifftem
+umschifften
+umschiffter
+umschifftes
+umschifftest
+umschifftet
+umschlage
+umschlagen
+umschlagend
+umschlagende
+umschlagendem
+umschlagenden
+umschlagender
+umschlagendes
+umschlagt
+umschlang
+umschlangen
+umschlangst
+umschlangt
+umschließe
+umschließen
+umschließend
+umschließende
+umschließendem
+umschließenden
+umschließender
+umschließendes
+umschließest
+umschließt
+umschlinge
+umschlingen
+umschlingend
+umschlingende
+umschlingendem
+umschlingenden
+umschlingender
+umschlingendes
+umschlingst
+umschlingt
+umschloss
+umschlossen
+umschlossene
+umschlossenem
+umschlossenen
+umschlossener
+umschlossenes
+umschlossest
+umschlosst
+umschlungen
+umschlungene
+umschlungenem
+umschlungenen
+umschlungener
+umschlungenes
+umschmelze
+umschmelzen
+umschmelzend
+umschmelzende
+umschmelzendem
+umschmelzenden
+umschmelzender
+umschmelzendes
+umschmelzt
+umschmolzen
+umschmolzene
+umschmolzenem
+umschmolzenen
+umschmolzener
+umschmolzenes
+umschnalle
+umschnallen
+umschnallend
+umschnallende
+umschnallendem
+umschnallenden
+umschnallender
+umschnallendes
+umschnallst
+umschnallt
+umschnallte
+umschnallten
+umschnalltest
+umschnalltet
+umschreibe
+umschreiben
+umschreibend
+umschreibende
+umschreibendem
+umschreibenden
+umschreibender
+umschreibendes
+umschreibst
+umschreibt
+umschrieb
+umschrieben
+umschriebene
+umschriebenem
+umschriebenen
+umschriebener
+umschriebenes
+umschriebst
+umschriebt
+umschule
+umschulen
+umschulend
+umschulende
+umschulendem
+umschulenden
+umschulender
+umschulendes
+umschulst
+umschult
+umschulte
+umschulten
+umschultest
+umschultet
+umschweifig
+umschweifige
+umschweifigem
+umschweifigen
+umschweifiger
+umschweifiges
+umschwenke
+umschwenken
+umschwenkend
+umschwenkende
+umschwenkendem
+umschwenkenden
+umschwenkender
+umschwenkendes
+umschwenkst
+umschwenkt
+umschwenkte
+umschwenkten
+umschwenktest
+umschwenktet
+umschwärme
+umschwärmen
+umschwärmend
+umschwärmende
+umschwärmendem
+umschwärmenden
+umschwärmender
+umschwärmendes
+umschwärmst
+umschwärmt
+umschwärmte
+umschwärmtem
+umschwärmten
+umschwärmter
+umschwärmtes
+umschwärmtest
+umschwärmtet
+umschütte
+umschüttele
+umschütteln
+umschüttelnd
+umschüttelnde
+umschüttelndem
+umschüttelnden
+umschüttelnder
+umschüttelndes
+umschüttelst
+umschüttelt
+umschüttelte
+umschüttelten
+umschütteltest
+umschütteltet
+umschütten
+umschüttend
+umschüttende
+umschüttendem
+umschüttenden
+umschüttender
+umschüttendes
+umschüttest
+umschüttet
+umschüttete
+umschütteten
+umschüttetest
+umschüttetet
+umschüttle
+umsegele
+umsegeln
+umsegelnd
+umsegelnde
+umsegelndem
+umsegelnden
+umsegelnder
+umsegelndes
+umsegelst
+umsegelt
+umsegelte
+umsegeltem
+umsegelten
+umsegelter
+umsegeltes
+umsegeltest
+umsegeltet
+umsegle
+umsehe
+umsehen
+umsehend
+umsehende
+umsehendem
+umsehenden
+umsehender
+umsehendes
+umseht
+umseitig
+umseitige
+umseitigem
+umseitigen
+umseitiger
+umseitiges
+umsetzbar
+umsetzbare
+umsetzbarem
+umsetzbaren
+umsetzbarer
+umsetzbarere
+umsetzbarerem
+umsetzbareren
+umsetzbarerer
+umsetzbareres
+umsetzbares
+umsetzbarste
+umsetzbarstem
+umsetzbarsten
+umsetzbarster
+umsetzbarstes
+umsetze
+umsetzen
+umsetzend
+umsetzende
+umsetzendem
+umsetzenden
+umsetzender
+umsetzendes
+umsetzest
+umsetzt
+umsetzte
+umsetzten
+umsetztest
+umsetztet
+umsichtig
+umsichtige
+umsichtigem
+umsichtigen
+umsichtiger
+umsichtigere
+umsichtigerem
+umsichtigeren
+umsichtigerer
+umsichtigeres
+umsichtiges
+umsichtigste
+umsichtigstem
+umsichtigsten
+umsichtigster
+umsichtigstes
+umsiedele
+umsiedeln
+umsiedelnd
+umsiedelnde
+umsiedelndem
+umsiedelnden
+umsiedelnder
+umsiedelndes
+umsiedelst
+umsiedelt
+umsiedelte
+umsiedelten
+umsiedeltest
+umsiedeltet
+umsiedle
+umsiehst
+umsieht
+umsinke
+umsinken
+umsinkend
+umsinkende
+umsinkendem
+umsinkenden
+umsinkender
+umsinkendes
+umsinkst
+umsinkt
+umso
+umsonst
+umsorge
+umsorgen
+umsorgend
+umsorgende
+umsorgendem
+umsorgenden
+umsorgender
+umsorgendes
+umsorgst
+umsorgt
+umsorgte
+umsorgtem
+umsorgten
+umsorgter
+umsorgtes
+umsorgtest
+umsorgtet
+umsortierbar
+umsortierbare
+umsortierbarem
+umsortierbaren
+umsortierbarer
+umsortierbares
+umsortiere
+umsortieren
+umsortierend
+umsortierende
+umsortierendem
+umsortierenden
+umsortierender
+umsortierendes
+umsortierst
+umsortiert
+umsortierte
+umsortiertem
+umsortierten
+umsortierter
+umsortiertes
+umsortiertest
+umsortiertet
+umspanne
+umspannen
+umspannend
+umspannende
+umspannendem
+umspannenden
+umspannender
+umspannendes
+umspannst
+umspannt
+umspannte
+umspanntem
+umspannten
+umspannter
+umspanntes
+umspanntest
+umspanntet
+umspielt
+umspielte
+umspieltem
+umspielten
+umspielter
+umspieltes
+umspinne
+umspinnen
+umspinnend
+umspinnende
+umspinnendem
+umspinnenden
+umspinnender
+umspinnendes
+umspinnst
+umspinnt
+umsponnen
+umsponnene
+umsponnenem
+umsponnenen
+umsponnener
+umsponnenes
+umsprang
+umsprangen
+umsprangst
+umsprangt
+umspringe
+umspringen
+umspringend
+umspringende
+umspringendem
+umspringenden
+umspringender
+umspringendes
+umspringst
+umspringt
+umsprungen
+umsprungene
+umsprungenem
+umsprungenen
+umsprungener
+umsprungenes
+umspule
+umspulen
+umspulend
+umspulende
+umspulendem
+umspulenden
+umspulender
+umspulendes
+umspulst
+umspult
+umspulte
+umspulten
+umspultest
+umspultet
+umspüle
+umspülen
+umspülend
+umspülende
+umspülendem
+umspülenden
+umspülender
+umspülendes
+umspülst
+umspült
+umspülte
+umspültem
+umspülten
+umspülter
+umspültes
+umspültest
+umspültet
+umstehend
+umstehende
+umstehendem
+umstehenden
+umstehender
+umstehendes
+umsteige
+umsteigen
+umsteigend
+umsteigende
+umsteigendem
+umsteigenden
+umsteigender
+umsteigendes
+umsteigst
+umsteigt
+umstelle
+umstellen
+umstellend
+umstellende
+umstellendem
+umstellenden
+umstellender
+umstellendes
+umstellst
+umstellt
+umstellte
+umstelltem
+umstellten
+umstellter
+umstelltes
+umstelltest
+umstelltet
+umsteuere
+umsteuern
+umsteuernd
+umsteuernde
+umsteuerndem
+umsteuernden
+umsteuernder
+umsteuerndes
+umsteuerst
+umsteuert
+umsteuerte
+umsteuerten
+umsteuertest
+umsteuertet
+umsteure
+umstimme
+umstimmen
+umstimmend
+umstimmende
+umstimmendem
+umstimmenden
+umstimmender
+umstimmendes
+umstimmst
+umstimmt
+umstimmte
+umstimmten
+umstimmtest
+umstimmtet
+umstoße
+umstoßen
+umstoßend
+umstoßende
+umstoßendem
+umstoßenden
+umstoßender
+umstoßendes
+umstoßt
+umstricke
+umstricken
+umstrickend
+umstrickende
+umstrickendem
+umstrickenden
+umstrickender
+umstrickendes
+umstrickst
+umstrickt
+umstrickte
+umstricktem
+umstrickten
+umstrickter
+umstricktes
+umstricktest
+umstricktet
+umstritten
+umstrittene
+umstrittenem
+umstrittenen
+umstrittener
+umstrittenere
+umstrittenerem
+umstritteneren
+umstrittenerer
+umstritteneres
+umstrittenes
+umstrittenste
+umstrittenstem
+umstrittensten
+umstrittenster
+umstrittenstes
+umständlich
+umständliche
+umständlichem
+umständlichen
+umständlicher
+umständliches
+umstürze
+umstürzen
+umstürzend
+umstürzende
+umstürzendem
+umstürzenden
+umstürzender
+umstürzendes
+umstürzest
+umstürzlerisch
+umstürzlerische
+umstürzlerischem
+umstürzlerischen
+umstürzlerischer
+umstürzlerisches
+umstürzt
+umstürzte
+umstürzten
+umstürztest
+umstürztet
+umsäume
+umsäumen
+umsäumend
+umsäumende
+umsäumendem
+umsäumenden
+umsäumender
+umsäumendes
+umsäumst
+umsäumt
+umsäumte
+umsäumtem
+umsäumten
+umsäumter
+umsäumtes
+umsäumtest
+umsäumtet
+umtaufe
+umtaufen
+umtaufend
+umtaufende
+umtaufendem
+umtaufenden
+umtaufender
+umtaufendes
+umtaufst
+umtauft
+umtaufte
+umtauften
+umtauftest
+umtauftet
+umtauschbar
+umtauschbare
+umtauschbarem
+umtauschbaren
+umtauschbarer
+umtauschbares
+umtausche
+umtauschen
+umtauschend
+umtauschende
+umtauschendem
+umtauschenden
+umtauschender
+umtauschendes
+umtauschest
+umtauschst
+umtauscht
+umtauschte
+umtauschten
+umtauschtest
+umtauschtet
+umtue
+umtuend
+umtuende
+umtuendem
+umtuenden
+umtuender
+umtuendes
+umtun
+umtust
+umtut
+umwandelbar
+umwandelbare
+umwandelbarem
+umwandelbaren
+umwandelbarer
+umwandelbares
+umwandele
+umwandeln
+umwandelnd
+umwandelnde
+umwandelndem
+umwandelnden
+umwandelnder
+umwandelndes
+umwandelst
+umwandelt
+umwandelte
+umwandelten
+umwandeltest
+umwandeltet
+umwandle
+umwarb
+umwarben
+umwarbst
+umwarbt
+umwarf
+umwarfen
+umwarfest
+umwarfst
+umwarft
+umwechsele
+umwechseln
+umwechselnd
+umwechselnde
+umwechselndem
+umwechselnden
+umwechselnder
+umwechselndes
+umwechselst
+umwechselt
+umwechselte
+umwechselten
+umwechseltest
+umwechseltet
+umwechsle
+umweltbedingt
+umweltbedingte
+umweltbedingtem
+umweltbedingten
+umweltbedingter
+umweltbedingtes
+umweltfreundlich
+umweltfreundliche
+umweltfreundlichem
+umweltfreundlichen
+umweltfreundlicher
+umweltfreundliches
+umwende
+umwenden
+umwendend
+umwendende
+umwendendem
+umwendenden
+umwendender
+umwendendes
+umwendest
+umwendet
+umwendete
+umwendeten
+umwendetest
+umwendetet
+umwerbe
+umwerben
+umwerbend
+umwerbende
+umwerbendem
+umwerbenden
+umwerbender
+umwerbendes
+umwerbt
+umwerfe
+umwerfen
+umwerfend
+umwerfende
+umwerfendem
+umwerfenden
+umwerfender
+umwerfendes
+umwerft
+umwerte
+umwerten
+umwertend
+umwertende
+umwertendem
+umwertenden
+umwertender
+umwertendes
+umwertest
+umwertet
+umwertete
+umwerteten
+umwertetest
+umwertetet
+umwickele
+umwickeln
+umwickelnd
+umwickelnde
+umwickelndem
+umwickelnden
+umwickelnder
+umwickelndes
+umwickelst
+umwickelt
+umwickelte
+umwickeltem
+umwickelten
+umwickelter
+umwickeltes
+umwickeltest
+umwickeltet
+umwickle
+umwirbst
+umwirbt
+umwogt
+umwogte
+umwogtem
+umwogten
+umwogter
+umwogtes
+umworben
+umworbene
+umworbenem
+umworbenen
+umworbener
+umworbenes
+umwälze
+umwälzen
+umwälzend
+umwälzende
+umwälzendem
+umwälzenden
+umwälzender
+umwälzendes
+umwälzest
+umwälzt
+umwälzte
+umwälzten
+umwälztest
+umwälztet
+umwölke
+umwölken
+umwölkend
+umwölkende
+umwölkendem
+umwölkenden
+umwölkender
+umwölkendes
+umwölkst
+umwölkt
+umwölkte
+umwölktem
+umwölkten
+umwölkter
+umwölktes
+umwölktest
+umwölktet
+umziehe
+umziehen
+umziehend
+umziehende
+umziehendem
+umziehenden
+umziehender
+umziehendes
+umziehst
+umzieht
+umzingele
+umzingeln
+umzingelnd
+umzingelnde
+umzingelndem
+umzingelnden
+umzingelnder
+umzingelndes
+umzingelst
+umzingelt
+umzingelte
+umzingeltem
+umzingelten
+umzingelter
+umzingeltes
+umzingeltest
+umzingeltet
+umzingle
+umzog
+umzogen
+umzogst
+umzogt
+umzubenennen
+umzubenennend
+umzubenennende
+umzubenennendem
+umzubenennenden
+umzubenennender
+umzubenennendes
+umzubringen
+umzubringend
+umzubringende
+umzubringendem
+umzubringenden
+umzubringender
+umzubringendes
+umzugehen
+umzugswillig
+umzugswillige
+umzugswilligem
+umzugswilligen
+umzugswilliger
+umzugswilliges
+umzukippen
+umzukonstruieren
+umzukonstruierend
+umzukonstruierende
+umzukonstruierendem
+umzukonstruierenden
+umzukonstruierender
+umzukonstruierendes
+umzuprogrammieren
+umzuprogrammierend
+umzuprogrammierende
+umzuprogrammierendem
+umzuprogrammierenden
+umzuprogrammierender
+umzuprogrammierendes
+umzuschalten
+umzuschaltend
+umzuschaltende
+umzuschaltendem
+umzuschaltenden
+umzuschaltender
+umzuschaltendes
+umzuschichten
+umzuschichtend
+umzuschichtende
+umzuschichtendem
+umzuschichtenden
+umzuschichtender
+umzuschichtendes
+umzuschulden
+umzuschuldend
+umzuschuldende
+umzuschuldendem
+umzuschuldenden
+umzuschuldender
+umzuschuldendes
+umzusehen
+umzusetzen
+umzusetzend
+umzusetzende
+umzusetzendem
+umzusetzenden
+umzusetzender
+umzusetzendes
+umzusteigen
+umzustellen
+umzustellend
+umzustellende
+umzustellendem
+umzustellenden
+umzustellender
+umzustellendes
+umzuwandeln
+umzuwandelnd
+umzuwandelnde
+umzuwandelndem
+umzuwandelnden
+umzuwandelnder
+umzuwandelndes
+umzuwerfen
+umzuwerfend
+umzuwerfende
+umzuwerfendem
+umzuwerfenden
+umzuwerfender
+umzuwerfendes
+umzäune
+umzäunen
+umzäunend
+umzäunende
+umzäunendem
+umzäunenden
+umzäunender
+umzäunendes
+umzäunst
+umzäunt
+umzäunte
+umzäuntem
+umzäunten
+umzäunter
+umzäuntes
+umzäuntest
+umzäuntet
+umändere
+umändern
+umändernd
+umändernde
+umänderndem
+umändernden
+umändernder
+umänderndes
+umänderst
+umändert
+umänderte
+umänderten
+umändertest
+umändertet
+umändre
+unabdingbar
+unabdingbare
+unabdingbarem
+unabdingbaren
+unabdingbarer
+unabdingbares
+unabhängig
+unabhängige
+unabhängigem
+unabhängigen
+unabhängiger
+unabhängigere
+unabhängigerem
+unabhängigeren
+unabhängigerer
+unabhängigeres
+unabhängiges
+unabhängigste
+unabhängigstem
+unabhängigsten
+unabhängigster
+unabhängigstes
+unabkömmlich
+unabkömmliche
+unabkömmlichem
+unabkömmlichen
+unabkömmlicher
+unabkömmliches
+unablässig
+unablässige
+unablässigem
+unablässigen
+unablässiger
+unablässiges
+unabsehbar
+unabsehbare
+unabsehbarem
+unabsehbaren
+unabsehbarer
+unabsehbares
+unabsetzbar
+unabsetzbare
+unabsetzbarem
+unabsetzbaren
+unabsetzbarer
+unabsetzbares
+unabsichtlich
+unabsichtliche
+unabsichtlichem
+unabsichtlichen
+unabsichtlicher
+unabsichtliches
+unabwehrbar
+unabwehrbare
+unabwehrbarem
+unabwehrbaren
+unabwehrbarer
+unabwehrbares
+unabweisbar
+unabweisbare
+unabweisbarem
+unabweisbaren
+unabweisbarer
+unabweisbares
+unabweislich
+unabweisliche
+unabweislichem
+unabweislichen
+unabweislicher
+unabweisliches
+unabwendbar
+unabwendbare
+unabwendbarem
+unabwendbaren
+unabwendbarer
+unabwendbares
+unabänderlich
+unabänderliche
+unabänderlichem
+unabänderlichen
+unabänderlicher
+unabänderliches
+unachtsam
+unachtsame
+unachtsamem
+unachtsamen
+unachtsamer
+unachtsames
+unakzeptabel
+unakzeptabelste
+unakzeptabelstem
+unakzeptabelsten
+unakzeptabelster
+unakzeptabelstes
+unakzeptable
+unakzeptablem
+unakzeptablen
+unakzeptabler
+unakzeptablere
+unakzeptablerem
+unakzeptableren
+unakzeptablerer
+unakzeptableres
+unakzeptables
+unanfechtbar
+unanfechtbare
+unanfechtbarem
+unanfechtbaren
+unanfechtbarer
+unanfechtbares
+unangebracht
+unangebrachte
+unangebrachtem
+unangebrachten
+unangebrachter
+unangebrachtere
+unangebrachterem
+unangebrachteren
+unangebrachterer
+unangebrachteres
+unangebrachtes
+unangebrachteste
+unangebrachtestem
+unangebrachtesten
+unangebrachtester
+unangebrachtestes
+unangefochten
+unangefochtene
+unangefochtenem
+unangefochtenen
+unangefochtener
+unangefochtenes
+unangemeldet
+unangemeldete
+unangemeldetem
+unangemeldeten
+unangemeldeter
+unangemeldetes
+unangemessen
+unangemessene
+unangemessenem
+unangemessenen
+unangemessener
+unangemessenere
+unangemessenerem
+unangemesseneren
+unangemessenerer
+unangemesseneres
+unangemessenes
+unangemessenste
+unangemessenstem
+unangemessensten
+unangemessenster
+unangemessenstes
+unangenehm
+unangenehme
+unangenehmem
+unangenehmen
+unangenehmer
+unangenehmere
+unangenehmerem
+unangenehmeren
+unangenehmerer
+unangenehmeres
+unangenehmes
+unangenehmste
+unangenehmstem
+unangenehmsten
+unangenehmster
+unangenehmstes
+unangepasst
+unangepasste
+unangepasstem
+unangepassten
+unangepasster
+unangepasstere
+unangepassterem
+unangepassteren
+unangepassterer
+unangepassteres
+unangepasstes
+unangepassteste
+unangepasstestem
+unangepasstesten
+unangepasstester
+unangepasstestes
+unangetastet
+unangetastete
+unangetastetem
+unangetasteten
+unangetasteter
+unangetastetes
+unangreifbar
+unangreifbare
+unangreifbarem
+unangreifbaren
+unangreifbarer
+unangreifbares
+unannehmbar
+unannehmbare
+unannehmbarem
+unannehmbaren
+unannehmbarer
+unannehmbares
+unansehnlich
+unansehnliche
+unansehnlichem
+unansehnlichen
+unansehnlicher
+unansehnlichere
+unansehnlicherem
+unansehnlicheren
+unansehnlicherer
+unansehnlicheres
+unansehnliches
+unansehnlichste
+unansehnlichstem
+unansehnlichsten
+unansehnlichster
+unansehnlichstes
+unanständig
+unanständige
+unanständigem
+unanständigen
+unanständiger
+unanständigere
+unanständigerem
+unanständigeren
+unanständigerer
+unanständigeres
+unanständiges
+unanständigste
+unanständigstem
+unanständigsten
+unanständigster
+unanständigstes
+unantastbar
+unantastbare
+unantastbarem
+unantastbaren
+unantastbarer
+unantastbares
+unanwendbar
+unanwendbare
+unanwendbarem
+unanwendbaren
+unanwendbarer
+unanwendbares
+unappetitlich
+unappetitliche
+unappetitlichem
+unappetitlichen
+unappetitlicher
+unappetitlichere
+unappetitlicherem
+unappetitlicheren
+unappetitlicherer
+unappetitlicheres
+unappetitliches
+unappetitlichste
+unappetitlichstem
+unappetitlichsten
+unappetitlichster
+unappetitlichstes
+unartig
+unartige
+unartigem
+unartigen
+unartiger
+unartigere
+unartigerem
+unartigeren
+unartigerer
+unartigeres
+unartiges
+unartigste
+unartigstem
+unartigsten
+unartigster
+unartigstes
+unartikuliert
+unartikulierte
+unartikuliertem
+unartikulierten
+unartikulierter
+unartikuliertes
+unattraktiv
+unattraktive
+unattraktivem
+unattraktiven
+unattraktiver
+unattraktivere
+unattraktiverem
+unattraktiveren
+unattraktiverer
+unattraktiveres
+unattraktives
+unattraktivste
+unattraktivstem
+unattraktivsten
+unattraktivster
+unattraktivstes
+unaufdringlich
+unaufdringliche
+unaufdringlichem
+unaufdringlichen
+unaufdringlicher
+unaufdringlichere
+unaufdringlicherem
+unaufdringlicheren
+unaufdringlicherer
+unaufdringlicheres
+unaufdringliches
+unaufdringlichste
+unaufdringlichstem
+unaufdringlichsten
+unaufdringlichster
+unaufdringlichstes
+unaufgearbeitet
+unaufgearbeitete
+unaufgearbeitetem
+unaufgearbeiteten
+unaufgearbeiteter
+unaufgearbeitetes
+unaufgefordert
+unaufgeforderte
+unaufgefordertem
+unaufgeforderten
+unaufgeforderter
+unaufgefordertes
+unaufgeklärt
+unaufgeklärte
+unaufgeklärtem
+unaufgeklärten
+unaufgeklärter
+unaufgeklärtes
+unaufhaltsam
+unaufhaltsame
+unaufhaltsamem
+unaufhaltsamen
+unaufhaltsamer
+unaufhaltsames
+unaufhebbar
+unaufhebbare
+unaufhebbarem
+unaufhebbaren
+unaufhebbarer
+unaufhebbares
+unaufhörlich
+unaufhörliche
+unaufhörlichem
+unaufhörlichen
+unaufhörlicher
+unaufhörliches
+unaufmerksam
+unaufmerksame
+unaufmerksamem
+unaufmerksamen
+unaufmerksamer
+unaufmerksamere
+unaufmerksamerem
+unaufmerksameren
+unaufmerksamerer
+unaufmerksameres
+unaufmerksames
+unaufmerksamste
+unaufmerksamstem
+unaufmerksamsten
+unaufmerksamster
+unaufmerksamstes
+unaufqqfindbar
+unaufqqfindbare
+unaufqqfindbarem
+unaufqqfindbaren
+unaufqqfindbarer
+unaufqqfindbares
+unaufqqfällig
+unaufqqfällige
+unaufqqfälligem
+unaufqqfälligen
+unaufqqfälliger
+unaufqqfälligere
+unaufqqfälligerem
+unaufqqfälligeren
+unaufqqfälligerer
+unaufqqfälligeres
+unaufqqfälliges
+unaufqqfälligste
+unaufqqfälligstem
+unaufqqfälligsten
+unaufqqfälligster
+unaufqqfälligstes
+unaufqqlösbar
+unaufqqlösbare
+unaufqqlösbarem
+unaufqqlösbaren
+unaufqqlösbarer
+unaufqqlösbares
+unaufqqlöslich
+unaufqqlösliche
+unaufqqlöslichem
+unaufqqlöslichen
+unaufqqlöslicher
+unaufqqlösliches
+unaufrichtig
+unaufrichtige
+unaufrichtigem
+unaufrichtigen
+unaufrichtiger
+unaufrichtigere
+unaufrichtigerem
+unaufrichtigeren
+unaufrichtigerer
+unaufrichtigeres
+unaufrichtiges
+unaufrichtigste
+unaufrichtigstem
+unaufrichtigsten
+unaufrichtigster
+unaufrichtigstes
+unaufschiebbar
+unaufschiebbare
+unaufschiebbarem
+unaufschiebbaren
+unaufschiebbarer
+unaufschiebbares
+unausbleiblich
+unausbleibliche
+unausbleiblichem
+unausbleiblichen
+unausbleiblicher
+unausbleibliches
+unausführbar
+unausführbare
+unausführbarem
+unausführbaren
+unausführbarer
+unausführbares
+unausgebildet
+unausgebildete
+unausgebildetem
+unausgebildeten
+unausgebildeter
+unausgebildetes
+unausgefüllt
+unausgefüllte
+unausgefülltem
+unausgefüllten
+unausgefüllter
+unausgefülltes
+unausgeglichen
+unausgeglichene
+unausgeglichenem
+unausgeglichenen
+unausgeglichener
+unausgeglichenere
+unausgeglichenerem
+unausgeglicheneren
+unausgeglichenerer
+unausgeglicheneres
+unausgeglichenes
+unausgeglichenste
+unausgeglichenstem
+unausgeglichensten
+unausgeglichenster
+unausgeglichenstes
+unausgegoren
+unausgegorene
+unausgegorenem
+unausgegorenen
+unausgegorener
+unausgegorenes
+unausgesetzt
+unausgesetzte
+unausgesetztem
+unausgesetzten
+unausgesetzter
+unausgesetztes
+unausgesprochen
+unausgesprochene
+unausgesprochenem
+unausgesprochenen
+unausgesprochener
+unausgesprochenes
+unausgespült
+unausgespülte
+unausgespültem
+unausgespülten
+unausgespülter
+unausgespültes
+unausgewertet
+unausgewertete
+unausgewertetem
+unausgewerteten
+unausgewerteter
+unausgewertetes
+unauslöschlich
+unauslöschliche
+unauslöschlichem
+unauslöschlichen
+unauslöschlicher
+unauslöschliches
+unausrottbar
+unausrottbare
+unausrottbarem
+unausrottbaren
+unausrottbarer
+unausrottbares
+unaussprechlich
+unaussprechliche
+unaussprechlichem
+unaussprechlichen
+unaussprechlicher
+unaussprechliches
+unausstehlich
+unausstehliche
+unausstehlichem
+unausstehlichen
+unausstehlicher
+unausstehliches
+unausweichlich
+unausweichliche
+unausweichlichem
+unausweichlichen
+unausweichlicher
+unausweichliches
+unautorisiert
+unautorisierte
+unautorisiertem
+unautorisierten
+unautorisierter
+unautorisiertes
+unbar
+unbare
+unbarem
+unbaren
+unbarer
+unbares
+unbarmherzig
+unbarmherzige
+unbarmherzigem
+unbarmherzigen
+unbarmherziger
+unbarmherziges
+unbeabsichtigt
+unbeabsichtigte
+unbeabsichtigtem
+unbeabsichtigten
+unbeabsichtigter
+unbeabsichtigtes
+unbeachtet
+unbeachtete
+unbeachtetem
+unbeachteten
+unbeachteter
+unbeachtetes
+unbeanstandet
+unbeanstandete
+unbeanstandetem
+unbeanstandeten
+unbeanstandeter
+unbeanstandetes
+unbeantwortet
+unbeantwortete
+unbeantwortetem
+unbeantworteten
+unbeantworteter
+unbeantwortetes
+unbearbeitet
+unbearbeitete
+unbearbeitetem
+unbearbeiteten
+unbearbeiteter
+unbearbeitetes
+unbebaut
+unbebaute
+unbebautem
+unbebauten
+unbebauter
+unbebautes
+unbedacht
+unbedachte
+unbedachtem
+unbedachten
+unbedachter
+unbedachtere
+unbedachterem
+unbedachteren
+unbedachterer
+unbedachteres
+unbedachtes
+unbedachteste
+unbedachtestem
+unbedachtesten
+unbedachtester
+unbedachtestes
+unbedarft
+unbedarfte
+unbedarftem
+unbedarften
+unbedarfter
+unbedarftes
+unbedenklich
+unbedenkliche
+unbedenklichem
+unbedenklichen
+unbedenklicher
+unbedenklichere
+unbedenklicherem
+unbedenklicheren
+unbedenklicherer
+unbedenklicheres
+unbedenkliches
+unbedenklichste
+unbedenklichstem
+unbedenklichsten
+unbedenklichster
+unbedenklichstes
+unbedeutend
+unbedeutende
+unbedeutendem
+unbedeutenden
+unbedeutender
+unbedeutendere
+unbedeutenderem
+unbedeutenderen
+unbedeutenderer
+unbedeutenderes
+unbedeutendes
+unbedeutendste
+unbedeutendstem
+unbedeutendsten
+unbedeutendster
+unbedeutendstes
+unbedingt
+unbedingte
+unbedingtem
+unbedingten
+unbedingter
+unbedingtes
+unbedruckbar
+unbedruckbare
+unbedruckbarem
+unbedruckbaren
+unbedruckbarer
+unbedruckbares
+unbedruckt
+unbedruckte
+unbedrucktem
+unbedruckten
+unbedruckter
+unbedrucktes
+unbeeinflussbar
+unbeeinflussbare
+unbeeinflussbarem
+unbeeinflussbaren
+unbeeinflussbarer
+unbeeinflussbares
+unbeeinflusst
+unbeeinflusste
+unbeeinflusstem
+unbeeinflussten
+unbeeinflusster
+unbeeinflusstes
+unbefahrbar
+unbefahrbare
+unbefahrbarem
+unbefahrbaren
+unbefahrbarer
+unbefahrbarere
+unbefahrbarerem
+unbefahrbareren
+unbefahrbarerer
+unbefahrbareres
+unbefahrbares
+unbefahrbarste
+unbefahrbarstem
+unbefahrbarsten
+unbefahrbarster
+unbefahrbarstes
+unbefangen
+unbefangene
+unbefangenem
+unbefangenen
+unbefangener
+unbefangenes
+unbefleckt
+unbefleckte
+unbeflecktem
+unbefleckten
+unbefleckter
+unbeflecktes
+unbefriedigend
+unbefriedigende
+unbefriedigendem
+unbefriedigenden
+unbefriedigender
+unbefriedigendere
+unbefriedigenderem
+unbefriedigenderen
+unbefriedigenderer
+unbefriedigenderes
+unbefriedigendes
+unbefriedigendste
+unbefriedigendstem
+unbefriedigendsten
+unbefriedigendster
+unbefriedigendstes
+unbefriedigt
+unbefriedigte
+unbefriedigtem
+unbefriedigten
+unbefriedigter
+unbefriedigtes
+unbefristet
+unbefristete
+unbefristetem
+unbefristeten
+unbefristeter
+unbefristetes
+unbefugt
+unbefugte
+unbefugtem
+unbefugten
+unbefugter
+unbefugtes
+unbegabt
+unbegabte
+unbegabtem
+unbegabten
+unbegabter
+unbegabtere
+unbegabterem
+unbegabteren
+unbegabterer
+unbegabteres
+unbegabtes
+unbegabteste
+unbegabtestem
+unbegabtesten
+unbegabtester
+unbegabtestes
+unbegehbar
+unbegehbare
+unbegehbarem
+unbegehbaren
+unbegehbarer
+unbegehbares
+unbegreifqqlich
+unbegreifqqliche
+unbegreifqqlichem
+unbegreifqqlichen
+unbegreifqqlicher
+unbegreifqqlichere
+unbegreifqqlicherem
+unbegreifqqlicheren
+unbegreifqqlicherer
+unbegreifqqlicheres
+unbegreifqqliches
+unbegreifqqlichste
+unbegreifqqlichstem
+unbegreifqqlichsten
+unbegreifqqlichster
+unbegreifqqlichstes
+unbegrenzt
+unbegrenzte
+unbegrenztem
+unbegrenzten
+unbegrenzter
+unbegrenztere
+unbegrenzterem
+unbegrenzteren
+unbegrenzterer
+unbegrenzteres
+unbegrenztes
+unbegrenzteste
+unbegrenztestem
+unbegrenztesten
+unbegrenztester
+unbegrenztestes
+unbegründet
+unbegründete
+unbegründetem
+unbegründeten
+unbegründeter
+unbegründetes
+unbehaglich
+unbehagliche
+unbehaglichem
+unbehaglichen
+unbehaglicher
+unbehaglichere
+unbehaglicherem
+unbehaglicheren
+unbehaglicherer
+unbehaglicheres
+unbehagliches
+unbehaglichste
+unbehaglichstem
+unbehaglichsten
+unbehaglichster
+unbehaglichstes
+unbehandelt
+unbehandelte
+unbehandeltem
+unbehandelten
+unbehandelter
+unbehandeltes
+unbehelligt
+unbehelligte
+unbehelligtem
+unbehelligten
+unbehelligter
+unbehelligtes
+unbeherrscht
+unbeherrschte
+unbeherrschtem
+unbeherrschten
+unbeherrschter
+unbeherrschtere
+unbeherrschterem
+unbeherrschteren
+unbeherrschterer
+unbeherrschteres
+unbeherrschtes
+unbeherrschteste
+unbeherrschtestem
+unbeherrschtesten
+unbeherrschtester
+unbeherrschtestes
+unbehindert
+unbehinderte
+unbehindertem
+unbehinderten
+unbehinderter
+unbehindertes
+unbeholfen
+unbeholfene
+unbeholfenem
+unbeholfenen
+unbeholfener
+unbeholfenere
+unbeholfenerem
+unbeholfeneren
+unbeholfenerer
+unbeholfeneres
+unbeholfenes
+unbeholfenste
+unbeholfenstem
+unbeholfensten
+unbeholfenster
+unbeholfenstes
+unbeirrbar
+unbeirrbare
+unbeirrbarem
+unbeirrbaren
+unbeirrbarer
+unbeirrbares
+unbeirrt
+unbeirrte
+unbeirrtem
+unbeirrten
+unbeirrter
+unbeirrtes
+unbekannt
+unbekannte
+unbekanntem
+unbekannten
+unbekannter
+unbekanntere
+unbekannterem
+unbekannteren
+unbekannterer
+unbekannteres
+unbekanntes
+unbekannteste
+unbekanntestem
+unbekanntesten
+unbekanntester
+unbekanntestes
+unbekehrbar
+unbekehrbare
+unbekehrbarem
+unbekehrbaren
+unbekehrbarer
+unbekehrbares
+unbekleidet
+unbekleidete
+unbekleidetem
+unbekleideten
+unbekleideter
+unbekleidetes
+unbekümmert
+unbekümmerte
+unbekümmertem
+unbekümmerten
+unbekümmerter
+unbekümmertere
+unbekümmerterem
+unbekümmerteren
+unbekümmerterer
+unbekümmerteres
+unbekümmertes
+unbekümmerteste
+unbekümmertestem
+unbekümmertesten
+unbekümmertester
+unbekümmertestes
+unbelastet
+unbelastete
+unbelastetem
+unbelasteten
+unbelasteter
+unbelastetes
+unbelebt
+unbelebte
+unbelebtem
+unbelebten
+unbelebter
+unbelebtere
+unbelebterem
+unbelebteren
+unbelebterer
+unbelebteres
+unbelebtes
+unbelebteste
+unbelebtestem
+unbelebtesten
+unbelebtester
+unbelebtestes
+unbelehrbar
+unbelehrbare
+unbelehrbarem
+unbelehrbaren
+unbelehrbarer
+unbelehrbarere
+unbelehrbarerem
+unbelehrbareren
+unbelehrbarerer
+unbelehrbareres
+unbelehrbares
+unbelehrbarste
+unbelehrbarstem
+unbelehrbarsten
+unbelehrbarster
+unbelehrbarstes
+unbelichtet
+unbelichtete
+unbelichtetem
+unbelichteten
+unbelichteter
+unbelichtetes
+unbeliebt
+unbeliebte
+unbeliebtem
+unbeliebten
+unbeliebter
+unbeliebtere
+unbeliebterem
+unbeliebteren
+unbeliebterer
+unbeliebteres
+unbeliebtes
+unbeliebteste
+unbeliebtestem
+unbeliebtesten
+unbeliebtester
+unbeliebtestes
+unbelohnt
+unbelohnte
+unbelohntem
+unbelohnten
+unbelohnter
+unbelohntes
+unbemannt
+unbemannte
+unbemanntem
+unbemannten
+unbemannter
+unbemanntes
+unbemerkbar
+unbemerkbare
+unbemerkbarem
+unbemerkbaren
+unbemerkbarer
+unbemerkbarere
+unbemerkbarerem
+unbemerkbareren
+unbemerkbarerer
+unbemerkbareres
+unbemerkbares
+unbemerkbarste
+unbemerkbarstem
+unbemerkbarsten
+unbemerkbarster
+unbemerkbarstes
+unbemerkt
+unbemerkte
+unbemerktem
+unbemerkten
+unbemerkter
+unbemerktes
+unbemittelt
+unbemittelte
+unbemitteltem
+unbemittelten
+unbemittelter
+unbemitteltere
+unbemittelterem
+unbemittelteren
+unbemittelterer
+unbemittelteres
+unbemitteltes
+unbemittelteste
+unbemitteltestem
+unbemitteltesten
+unbemitteltester
+unbemitteltestes
+unbenannt
+unbenannte
+unbenanntem
+unbenannten
+unbenannter
+unbenanntes
+unbenutzt
+unbenutzte
+unbenutztem
+unbenutzten
+unbenutzter
+unbenutztere
+unbenutzterem
+unbenutzteren
+unbenutzterer
+unbenutzteres
+unbenutztes
+unbenutzteste
+unbenutztestem
+unbenutztesten
+unbenutztester
+unbenutztestes
+unbeobachtet
+unbeobachtete
+unbeobachtetem
+unbeobachteten
+unbeobachteter
+unbeobachtetes
+unbequem
+unbequeme
+unbequemem
+unbequemen
+unbequemer
+unbequemere
+unbequemerem
+unbequemeren
+unbequemerer
+unbequemeres
+unbequemes
+unbequemste
+unbequemstem
+unbequemsten
+unbequemster
+unbequemstes
+unberechenbar
+unberechenbare
+unberechenbarem
+unberechenbaren
+unberechenbarer
+unberechenbares
+unberechtigt
+unberechtigte
+unberechtigtem
+unberechtigten
+unberechtigter
+unberechtigtes
+unberufen
+unberufene
+unberufenem
+unberufenen
+unberufener
+unberufenes
+unberücksichtigt
+unberücksichtigte
+unberücksichtigtem
+unberücksichtigten
+unberücksichtigter
+unberücksichtigtes
+unberührt
+unberührte
+unberührtem
+unberührten
+unberührter
+unberührtes
+unbescheiden
+unbescheidene
+unbescheidenem
+unbescheidenen
+unbescheidener
+unbescheidenere
+unbescheidenerem
+unbescheideneren
+unbescheidenerer
+unbescheideneres
+unbescheidenes
+unbescheidenste
+unbescheidenstem
+unbescheidensten
+unbescheidenster
+unbescheidenstes
+unbescholten
+unbescholtene
+unbescholtenem
+unbescholtenen
+unbescholtener
+unbescholtenes
+unbeschreiblich
+unbeschreibliche
+unbeschreiblichem
+unbeschreiblichen
+unbeschreiblicher
+unbeschreibliches
+unbeschrieben
+unbeschriebene
+unbeschriebenem
+unbeschriebenen
+unbeschriebener
+unbeschriebenes
+unbeschränkt
+unbeschränkte
+unbeschränktem
+unbeschränkten
+unbeschränkter
+unbeschränktere
+unbeschränkterem
+unbeschränkteren
+unbeschränkterer
+unbeschränkteres
+unbeschränktes
+unbeschränkteste
+unbeschränktestem
+unbeschränktesten
+unbeschränktester
+unbeschränktestes
+unbeschwert
+unbeschwerte
+unbeschwertem
+unbeschwerten
+unbeschwerter
+unbeschwertes
+unbeschädigt
+unbeschädigte
+unbeschädigtem
+unbeschädigten
+unbeschädigter
+unbeschädigtes
+unbeschäftigt
+unbeschäftigte
+unbeschäftigtem
+unbeschäftigten
+unbeschäftigter
+unbeschäftigtere
+unbeschäftigterem
+unbeschäftigteren
+unbeschäftigterer
+unbeschäftigteres
+unbeschäftigtes
+unbeschäftigteste
+unbeschäftigtestem
+unbeschäftigtesten
+unbeschäftigtester
+unbeschäftigtestes
+unbeseelt
+unbeseelte
+unbeseeltem
+unbeseelten
+unbeseelter
+unbeseeltes
+unbesehen
+unbesehene
+unbesehenem
+unbesehenen
+unbesehener
+unbesehenes
+unbesetzt
+unbesetzte
+unbesetztem
+unbesetzten
+unbesetzter
+unbesetztes
+unbesiegbar
+unbesiegbare
+unbesiegbarem
+unbesiegbaren
+unbesiegbarer
+unbesiegbarere
+unbesiegbarerem
+unbesiegbareren
+unbesiegbarerer
+unbesiegbareres
+unbesiegbares
+unbesiegbarste
+unbesiegbarstem
+unbesiegbarsten
+unbesiegbarster
+unbesiegbarstes
+unbesiegt
+unbesiegte
+unbesiegtem
+unbesiegten
+unbesiegter
+unbesiegtes
+unbesinnlich
+unbesinnliche
+unbesinnlichem
+unbesinnlichen
+unbesinnlicher
+unbesinnlichere
+unbesinnlicherem
+unbesinnlicheren
+unbesinnlicherer
+unbesinnlicheres
+unbesinnliches
+unbesinnlichste
+unbesinnlichstem
+unbesinnlichsten
+unbesinnlichster
+unbesinnlichstes
+unbesoldet
+unbesoldete
+unbesoldetem
+unbesoldeten
+unbesoldeter
+unbesoldetes
+unbesonnen
+unbesonnene
+unbesonnenem
+unbesonnenen
+unbesonnener
+unbesonnenere
+unbesonnenerem
+unbesonneneren
+unbesonnenerer
+unbesonneneres
+unbesonnenes
+unbesonnenste
+unbesonnenstem
+unbesonnensten
+unbesonnenster
+unbesonnenstes
+unbesorgt
+unbesorgte
+unbesorgtem
+unbesorgten
+unbesorgter
+unbesorgtere
+unbesorgterem
+unbesorgteren
+unbesorgterer
+unbesorgteres
+unbesorgtes
+unbesorgteste
+unbesorgtestem
+unbesorgtesten
+unbesorgtester
+unbesorgtestes
+unbestechlich
+unbestechliche
+unbestechlichem
+unbestechlichen
+unbestechlicher
+unbestechlichere
+unbestechlicherem
+unbestechlicheren
+unbestechlicherer
+unbestechlicheres
+unbestechliches
+unbestechlichste
+unbestechlichstem
+unbestechlichsten
+unbestechlichster
+unbestechlichstes
+unbestellt
+unbestellte
+unbestelltem
+unbestellten
+unbestellter
+unbestelltes
+unbestimmt
+unbestimmte
+unbestimmtem
+unbestimmten
+unbestimmter
+unbestimmtes
+unbestraft
+unbestrafte
+unbestraftem
+unbestraften
+unbestrafter
+unbestraftes
+unbestreitbar
+unbestreitbare
+unbestreitbarem
+unbestreitbaren
+unbestreitbarer
+unbestreitbarere
+unbestreitbarerem
+unbestreitbareren
+unbestreitbarerer
+unbestreitbareres
+unbestreitbares
+unbestreitbarste
+unbestreitbarstem
+unbestreitbarsten
+unbestreitbarster
+unbestreitbarstes
+unbestritt
+unbestritten
+unbestrittene
+unbestrittenem
+unbestrittenen
+unbestrittener
+unbestrittenes
+unbestrittest
+unbestrittet
+unbeständig
+unbeständige
+unbeständigem
+unbeständigen
+unbeständiger
+unbeständigere
+unbeständigerem
+unbeständigeren
+unbeständigerer
+unbeständigeres
+unbeständiges
+unbeständigste
+unbeständigstem
+unbeständigsten
+unbeständigster
+unbeständigstes
+unbestätigt
+unbestätigte
+unbestätigtem
+unbestätigten
+unbestätigter
+unbestätigtes
+unbestückt
+unbestückte
+unbestücktem
+unbestückten
+unbestückter
+unbestücktes
+unbeteiligt
+unbeteiligte
+unbeteiligtem
+unbeteiligten
+unbeteiligter
+unbeteiligtere
+unbeteiligterem
+unbeteiligteren
+unbeteiligterer
+unbeteiligteres
+unbeteiligtes
+unbeteiligteste
+unbeteiligtestem
+unbeteiligtesten
+unbeteiligtester
+unbeteiligtestes
+unbetont
+unbetonte
+unbetontem
+unbetonten
+unbetonter
+unbetontes
+unbeträchtlich
+unbeträchtliche
+unbeträchtlichem
+unbeträchtlichen
+unbeträchtlicher
+unbeträchtliches
+unbeugsam
+unbeugsame
+unbeugsamem
+unbeugsamen
+unbeugsamer
+unbeugsamere
+unbeugsamerem
+unbeugsameren
+unbeugsamerer
+unbeugsameres
+unbeugsames
+unbeugsamste
+unbeugsamstem
+unbeugsamsten
+unbeugsamster
+unbeugsamstes
+unbewacht
+unbewachte
+unbewachtem
+unbewachten
+unbewachter
+unbewachtere
+unbewachterem
+unbewachteren
+unbewachterer
+unbewachteres
+unbewachtes
+unbewachteste
+unbewachtestem
+unbewachtesten
+unbewachtester
+unbewachtestes
+unbewaffnet
+unbewaffnete
+unbewaffnetem
+unbewaffneten
+unbewaffneter
+unbewaffnetes
+unbewandert
+unbewanderte
+unbewandertem
+unbewanderten
+unbewanderter
+unbewandertes
+unbeweglich
+unbewegliche
+unbeweglichem
+unbeweglichen
+unbeweglicher
+unbeweglichere
+unbeweglicherem
+unbeweglicheren
+unbeweglicherer
+unbeweglicheres
+unbewegliches
+unbeweglichste
+unbeweglichstem
+unbeweglichsten
+unbeweglichster
+unbeweglichstes
+unbewegt
+unbewegte
+unbewegtem
+unbewegten
+unbewegter
+unbewegtes
+unbeweibt
+unbeweibte
+unbeweibtem
+unbeweibten
+unbeweibter
+unbeweibtes
+unbeweint
+unbeweinte
+unbeweintem
+unbeweinten
+unbeweinter
+unbeweintes
+unbewies
+unbewiesen
+unbewiesene
+unbewiesenem
+unbewiesenen
+unbewiesener
+unbewiesenes
+unbewiesest
+unbewiest
+unbewohnbar
+unbewohnbare
+unbewohnbarem
+unbewohnbaren
+unbewohnbarer
+unbewohnbares
+unbewohnt
+unbewohnte
+unbewohntem
+unbewohnten
+unbewohnter
+unbewohntes
+unbewusst
+unbewusste
+unbewusstem
+unbewussten
+unbewusster
+unbewusstes
+unbewährt
+unbewährte
+unbewährtem
+unbewährten
+unbewährter
+unbewährtes
+unbezahlbar
+unbezahlbare
+unbezahlbarem
+unbezahlbaren
+unbezahlbarer
+unbezahlbarere
+unbezahlbarerem
+unbezahlbareren
+unbezahlbarerer
+unbezahlbareres
+unbezahlbares
+unbezahlbarste
+unbezahlbarstem
+unbezahlbarsten
+unbezahlbarster
+unbezahlbarstes
+unbezahlt
+unbezahlte
+unbezahltem
+unbezahlten
+unbezahlter
+unbezahltes
+unbezweifelbar
+unbezweifelbare
+unbezweifelbarem
+unbezweifelbaren
+unbezweifelbarer
+unbezweifelbares
+unbezwingbar
+unbezwingbare
+unbezwingbarem
+unbezwingbaren
+unbezwingbarer
+unbezwingbarere
+unbezwingbarerem
+unbezwingbareren
+unbezwingbarerer
+unbezwingbareres
+unbezwingbares
+unbezwingbarste
+unbezwingbarstem
+unbezwingbarsten
+unbezwingbarster
+unbezwingbarstes
+unbezähmbar
+unbezähmbare
+unbezähmbarem
+unbezähmbaren
+unbezähmbarer
+unbezähmbarere
+unbezähmbarerem
+unbezähmbareren
+unbezähmbarerer
+unbezähmbareres
+unbezähmbares
+unbezähmbarste
+unbezähmbarstem
+unbezähmbarsten
+unbezähmbarster
+unbezähmbarstes
+unbiegsam
+unbiegsame
+unbiegsamem
+unbiegsamen
+unbiegsamer
+unbiegsamere
+unbiegsamerem
+unbiegsameren
+unbiegsamerer
+unbiegsameres
+unbiegsames
+unbiegsamste
+unbiegsamstem
+unbiegsamsten
+unbiegsamster
+unbiegsamstes
+unblessiert
+unblessierte
+unblessiertem
+unblessierten
+unblessierter
+unblessiertes
+unblutig
+unblutige
+unblutigem
+unblutigen
+unblutiger
+unblutigere
+unblutigerem
+unblutigeren
+unblutigerer
+unblutigeres
+unblutiges
+unblutigste
+unblutigstem
+unblutigsten
+unblutigster
+unblutigstes
+unbotmäßig
+unbotmäßige
+unbotmäßigem
+unbotmäßigen
+unbotmäßiger
+unbotmäßiges
+unbrauchbar
+unbrauchbare
+unbrauchbarem
+unbrauchbaren
+unbrauchbarer
+unbrauchbarere
+unbrauchbarerem
+unbrauchbareren
+unbrauchbarerer
+unbrauchbareres
+unbrauchbares
+unbrauchbarste
+unbrauchbarstem
+unbrauchbarsten
+unbrauchbarster
+unbrauchbarstes
+unbrutal
+unbrutale
+unbrutalem
+unbrutalen
+unbrutaler
+unbrutalere
+unbrutalerem
+unbrutaleren
+unbrutalerer
+unbrutaleres
+unbrutales
+unbrutalste
+unbrutalstem
+unbrutalsten
+unbrutalster
+unbrutalstes
+unbändig
+unbändige
+unbändigem
+unbändigen
+unbändiger
+unbändiges
+unbürokratisch
+unbürokratische
+unbürokratischem
+unbürokratischen
+unbürokratischer
+unbürokratisches
+unchristlich
+unchristliche
+unchristlichem
+unchristlichen
+unchristlicher
+unchristlichere
+unchristlicherem
+unchristlicheren
+unchristlicherer
+unchristlicheres
+unchristliches
+unchristlichste
+unchristlichstem
+unchristlichsten
+unchristlichster
+unchristlichstes
+und
+undankbar
+undankbare
+undankbarem
+undankbaren
+undankbarer
+undankbarere
+undankbarerem
+undankbareren
+undankbarerer
+undankbareres
+undankbares
+undankbarste
+undankbarstem
+undankbarsten
+undankbarster
+undankbarstes
+undatiert
+undatierte
+undatiertem
+undatierten
+undatierter
+undatiertes
+undefinierbar
+undefinierbare
+undefinierbarem
+undefinierbaren
+undefinierbarer
+undefinierbares
+undefiniert
+undefinierte
+undefiniertem
+undefinierten
+undefinierter
+undefiniertes
+undemokratisch
+undemokratische
+undemokratischem
+undemokratischen
+undemokratischer
+undemokratisches
+undenkbar
+undenkbare
+undenkbarem
+undenkbaren
+undenkbarer
+undenkbares
+undenklich
+undenkliche
+undenklichem
+undenklichen
+undenklicher
+undenkliches
+undeutlich
+undeutliche
+undeutlichem
+undeutlichen
+undeutlicher
+undeutlichere
+undeutlicherem
+undeutlicheren
+undeutlicherer
+undeutlicheres
+undeutliches
+undeutlichste
+undeutlichstem
+undeutlichsten
+undeutlichster
+undeutlichstes
+undeutsch
+undeutsche
+undeutschem
+undeutschen
+undeutscher
+undeutschere
+undeutscherem
+undeutscheren
+undeutscherer
+undeutscheres
+undeutsches
+undeutscheste
+undeutschestem
+undeutschesten
+undeutschester
+undeutschestes
+undicht
+undichte
+undichtem
+undichten
+undichter
+undichtere
+undichterem
+undichteren
+undichterer
+undichteres
+undichtes
+undichteste
+undichtestem
+undichtesten
+undichtester
+undichtestes
+undiszipliniert
+undisziplinierte
+undiszipliniertem
+undisziplinierten
+undisziplinierter
+undiszipliniertere
+undisziplinierterem
+undisziplinierteren
+undisziplinierterer
+undisziplinierteres
+undiszipliniertes
+undisziplinierteste
+undiszipliniertestem
+undiszipliniertesten
+undiszipliniertester
+undiszipliniertestes
+unduldsam
+unduldsame
+unduldsamem
+unduldsamen
+unduldsamer
+unduldsamere
+unduldsamerem
+unduldsameren
+unduldsamerer
+unduldsameres
+unduldsames
+unduldsamste
+unduldsamstem
+unduldsamsten
+unduldsamster
+unduldsamstes
+undurchdringbar
+undurchdringbare
+undurchdringbarem
+undurchdringbaren
+undurchdringbarer
+undurchdringbares
+undurchdringlich
+undurchdringliche
+undurchdringlichem
+undurchdringlichen
+undurchdringlicher
+undurchdringlichere
+undurchdringlicherem
+undurchdringlicheren
+undurchdringlicherer
+undurchdringlicheres
+undurchdringliches
+undurchdringlichste
+undurchdringlichstem
+undurchdringlichsten
+undurchdringlichster
+undurchdringlichstes
+undurchführbar
+undurchführbare
+undurchführbarem
+undurchführbaren
+undurchführbarer
+undurchführbares
+undurchlässig
+undurchlässige
+undurchlässigem
+undurchlässigen
+undurchlässiger
+undurchlässigere
+undurchlässigerem
+undurchlässigeren
+undurchlässigerer
+undurchlässigeres
+undurchlässiges
+undurchlässigste
+undurchlässigstem
+undurchlässigsten
+undurchlässigster
+undurchlässigstes
+undurchschaubar
+undurchschaubare
+undurchschaubarem
+undurchschaubaren
+undurchschaubarer
+undurchschaubares
+undurchsichtig
+undurchsichtige
+undurchsichtigem
+undurchsichtigen
+undurchsichtiger
+undurchsichtigere
+undurchsichtigerem
+undurchsichtigeren
+undurchsichtigerer
+undurchsichtigeres
+undurchsichtiges
+undurchsichtigste
+undurchsichtigstem
+undurchsichtigsten
+undurchsichtigster
+undurchsichtigstes
+uneben
+unebene
+unebenem
+unebenen
+unebener
+unebenes
+unecht
+unechte
+unechtem
+unechten
+unechter
+unechtere
+unechterem
+unechteren
+unechterer
+unechteres
+unechtes
+unechteste
+unechtestem
+unechtesten
+unechtester
+unechtestes
+unedel
+unedelste
+unedelstem
+unedelsten
+unedelster
+unedelstes
+unedle
+unedlem
+unedlen
+unedler
+unedlere
+unedlerem
+unedleren
+unedlerer
+unedleres
+unedles
+unehelich
+uneheliche
+unehelichem
+unehelichen
+unehelicher
+uneheliches
+unehrenhaft
+unehrenhafte
+unehrenhaftem
+unehrenhaften
+unehrenhafter
+unehrenhaftere
+unehrenhafterem
+unehrenhafteren
+unehrenhafterer
+unehrenhafteres
+unehrenhaftes
+unehrenhafteste
+unehrenhaftestem
+unehrenhaftesten
+unehrenhaftester
+unehrenhaftestes
+unehrerbietig
+unehrerbietige
+unehrerbietigem
+unehrerbietigen
+unehrerbietiger
+unehrerbietigere
+unehrerbietigerem
+unehrerbietigeren
+unehrerbietigerer
+unehrerbietigeres
+unehrerbietiges
+unehrerbietigste
+unehrerbietigstem
+unehrerbietigsten
+unehrerbietigster
+unehrerbietigstes
+unehrlich
+unehrliche
+unehrlichem
+unehrlichen
+unehrlicher
+unehrlichere
+unehrlicherem
+unehrlicheren
+unehrlicherer
+unehrlicheres
+unehrliches
+unehrlichste
+unehrlichstem
+unehrlichsten
+unehrlichster
+unehrlichstes
+uneigennützig
+uneigennützige
+uneigennützigem
+uneigennützigen
+uneigennütziger
+uneigennützigere
+uneigennützigerem
+uneigennützigeren
+uneigennützigerer
+uneigennützigeres
+uneigennütziges
+uneigennützigste
+uneigennützigstem
+uneigennützigsten
+uneigennützigster
+uneigennützigstes
+uneinbringlich
+uneinbringliche
+uneinbringlichem
+uneinbringlichen
+uneinbringlicher
+uneinbringliches
+uneingelöst
+uneingelöste
+uneingelöstem
+uneingelösten
+uneingelöster
+uneingelöstes
+uneingeschränkt
+uneingeschränkte
+uneingeschränktem
+uneingeschränkten
+uneingeschränkter
+uneingeschränktes
+uneingeweiht
+uneingeweihte
+uneingeweihtem
+uneingeweihten
+uneingeweihter
+uneingeweihtes
+uneinheitlich
+uneinheitliche
+uneinheitlichem
+uneinheitlichen
+uneinheitlicher
+uneinheitlichere
+uneinheitlicherem
+uneinheitlicheren
+uneinheitlicherer
+uneinheitlicheres
+uneinheitliches
+uneinheitlichste
+uneinheitlichstem
+uneinheitlichsten
+uneinheitlichster
+uneinheitlichstes
+uneinig
+uneinige
+uneinigem
+uneinigen
+uneiniger
+uneiniges
+uneinnehmbar
+uneinnehmbare
+uneinnehmbarem
+uneinnehmbaren
+uneinnehmbarer
+uneinnehmbarere
+uneinnehmbarerem
+uneinnehmbareren
+uneinnehmbarerer
+uneinnehmbareres
+uneinnehmbares
+uneinnehmbarste
+uneinnehmbarstem
+uneinnehmbarsten
+uneinnehmbarster
+uneinnehmbarstes
+unempfindlich
+unempfindliche
+unempfindlichem
+unempfindlichen
+unempfindlicher
+unempfindlichere
+unempfindlicherem
+unempfindlicheren
+unempfindlicherer
+unempfindlicheres
+unempfindliches
+unempfindlichste
+unempfindlichstem
+unempfindlichsten
+unempfindlichster
+unempfindlichstes
+unempfänglich
+unempfängliche
+unempfänglichem
+unempfänglichen
+unempfänglicher
+unempfängliches
+unendlich
+unendliche
+unendlichem
+unendlichen
+unendlicher
+unendliches
+unenglisch
+unenglische
+unenglischem
+unenglischen
+unenglischer
+unenglischere
+unenglischerem
+unenglischeren
+unenglischerer
+unenglischeres
+unenglisches
+unenglischste
+unenglischstem
+unenglischsten
+unenglischster
+unenglischstes
+unentbehrlich
+unentbehrliche
+unentbehrlichem
+unentbehrlichen
+unentbehrlicher
+unentbehrlichere
+unentbehrlicherem
+unentbehrlicheren
+unentbehrlicherer
+unentbehrlicheres
+unentbehrliches
+unentbehrlichste
+unentbehrlichstem
+unentbehrlichsten
+unentbehrlichster
+unentbehrlichstes
+unentdeckt
+unentdeckte
+unentdecktem
+unentdeckten
+unentdeckter
+unentdecktes
+unentgeltlich
+unentgeltliche
+unentgeltlichem
+unentgeltlichen
+unentgeltlicher
+unentgeltliches
+unenthaltsam
+unenthaltsame
+unenthaltsamem
+unenthaltsamen
+unenthaltsamer
+unenthaltsamere
+unenthaltsamerem
+unenthaltsameren
+unenthaltsamerer
+unenthaltsameres
+unenthaltsames
+unenthaltsamste
+unenthaltsamstem
+unenthaltsamsten
+unenthaltsamster
+unenthaltsamstes
+unentrinnbar
+unentrinnbare
+unentrinnbarem
+unentrinnbaren
+unentrinnbarer
+unentrinnbares
+unentscheidbar
+unentscheidbare
+unentscheidbarem
+unentscheidbaren
+unentscheidbarer
+unentscheidbares
+unentschieden
+unentschiedene
+unentschiedenem
+unentschiedenen
+unentschiedener
+unentschiedenere
+unentschiedenerem
+unentschiedeneren
+unentschiedenerer
+unentschiedeneres
+unentschiedenes
+unentschiedenste
+unentschiedenstem
+unentschiedensten
+unentschiedenster
+unentschiedenstes
+unentschlossen
+unentschlossene
+unentschlossenem
+unentschlossenen
+unentschlossener
+unentschlossenere
+unentschlossenerem
+unentschlosseneren
+unentschlossenerer
+unentschlosseneres
+unentschlossenes
+unentschlossenste
+unentschlossenstem
+unentschlossensten
+unentschlossenster
+unentschlossenstes
+unentschuldbar
+unentschuldbare
+unentschuldbarem
+unentschuldbaren
+unentschuldbarer
+unentschuldbares
+unentwegt
+unentwegte
+unentwegtem
+unentwegten
+unentwegter
+unentwegtere
+unentwegterem
+unentwegteren
+unentwegterer
+unentwegteres
+unentwegtes
+unentwegteste
+unentwegtestem
+unentwegtesten
+unentwegtester
+unentwegtestes
+unentwickelt
+unentwickelte
+unentwickeltem
+unentwickelten
+unentwickelter
+unentwickeltes
+unentwirrbar
+unentwirrbare
+unentwirrbarem
+unentwirrbaren
+unentwirrbarer
+unentwirrbares
+unerbittlich
+unerbittliche
+unerbittlichem
+unerbittlichen
+unerbittlicher
+unerbittliches
+unerfahren
+unerfahrene
+unerfahrenem
+unerfahrenen
+unerfahrener
+unerfahrenere
+unerfahrenerem
+unerfahreneren
+unerfahrenerer
+unerfahreneres
+unerfahrenes
+unerfahrenste
+unerfahrenstem
+unerfahrensten
+unerfahrenster
+unerfahrenstes
+unerfindlich
+unerfindliche
+unerfindlichem
+unerfindlichen
+unerfindlicher
+unerfindliches
+unerforschlich
+unerforschliche
+unerforschlichem
+unerforschlichen
+unerforschlicher
+unerforschliches
+unerforscht
+unerforschte
+unerforschtem
+unerforschten
+unerforschter
+unerforschtes
+unerfreulich
+unerfreuliche
+unerfreulichem
+unerfreulichen
+unerfreulicher
+unerfreulichere
+unerfreulicherem
+unerfreulicheren
+unerfreulicherer
+unerfreulicheres
+unerfreuliches
+unerfreulichste
+unerfreulichstem
+unerfreulichsten
+unerfreulichster
+unerfreulichstes
+unerfüllbar
+unerfüllbare
+unerfüllbarem
+unerfüllbaren
+unerfüllbarer
+unerfüllbares
+unerfüllt
+unerfüllte
+unerfülltem
+unerfüllten
+unerfüllter
+unerfülltes
+unergiebig
+unergiebige
+unergiebigem
+unergiebigen
+unergiebiger
+unergiebigere
+unergiebigerem
+unergiebigeren
+unergiebigerer
+unergiebigeres
+unergiebiges
+unergiebigste
+unergiebigstem
+unergiebigsten
+unergiebigster
+unergiebigstes
+unergründet
+unergründete
+unergründetem
+unergründeten
+unergründeter
+unergründetes
+unergründlich
+unergründliche
+unergründlichem
+unergründlichen
+unergründlicher
+unergründlichere
+unergründlicherem
+unergründlicheren
+unergründlicherer
+unergründlicheres
+unergründliches
+unergründlichste
+unergründlichstem
+unergründlichsten
+unergründlichster
+unergründlichstes
+unerheblich
+unerhebliche
+unerheblichem
+unerheblichen
+unerheblicher
+unerheblichere
+unerheblicherem
+unerheblicheren
+unerheblicherer
+unerheblicheres
+unerhebliches
+unerheblichste
+unerheblichstem
+unerheblichsten
+unerheblichster
+unerheblichstes
+unerhört
+unerhörte
+unerhörtem
+unerhörten
+unerhörter
+unerhörtere
+unerhörterem
+unerhörteren
+unerhörterer
+unerhörteres
+unerhörtes
+unerhörteste
+unerhörtestem
+unerhörtesten
+unerhörtester
+unerhörtestes
+unerkannt
+unerkannte
+unerkanntem
+unerkannten
+unerkannter
+unerkanntere
+unerkannterem
+unerkannteren
+unerkannterer
+unerkannteres
+unerkanntes
+unerkannteste
+unerkanntestem
+unerkanntesten
+unerkanntester
+unerkanntestes
+unerkennbar
+unerkennbare
+unerkennbarem
+unerkennbaren
+unerkennbarer
+unerkennbares
+unerklärlich
+unerklärliche
+unerklärlichem
+unerklärlichen
+unerklärlicher
+unerklärlichere
+unerklärlicherem
+unerklärlicheren
+unerklärlicherer
+unerklärlicheres
+unerklärliches
+unerklärlichste
+unerklärlichstem
+unerklärlichsten
+unerklärlichster
+unerklärlichstes
+unerlaubt
+unerlaubte
+unerlaubtem
+unerlaubten
+unerlaubter
+unerlaubtere
+unerlaubterem
+unerlaubteren
+unerlaubterer
+unerlaubteres
+unerlaubtes
+unerlaubteste
+unerlaubtestem
+unerlaubtesten
+unerlaubtester
+unerlaubtestes
+unerledigt
+unerledigte
+unerledigtem
+unerledigten
+unerledigter
+unerledigtes
+unerlässlich
+unerlässliche
+unerlässlichem
+unerlässlichen
+unerlässlicher
+unerlässlichere
+unerlässlicherem
+unerlässlicheren
+unerlässlicherer
+unerlässlicheres
+unerlässliches
+unerlässlichste
+unerlässlichstem
+unerlässlichsten
+unerlässlichster
+unerlässlichstes
+unerlöst
+unerlöste
+unerlöstem
+unerlösten
+unerlöster
+unerlöstes
+unermessbar
+unermessbare
+unermessbarem
+unermessbaren
+unermessbarer
+unermessbares
+unermesslich
+unermessliche
+unermesslichem
+unermesslichen
+unermesslicher
+unermesslichere
+unermesslicherem
+unermesslicheren
+unermesslicherer
+unermesslicheres
+unermessliches
+unermesslichste
+unermesslichstem
+unermesslichsten
+unermesslichster
+unermesslichstes
+unermüdlich
+unermüdliche
+unermüdlichem
+unermüdlichen
+unermüdlicher
+unermüdlichere
+unermüdlicherem
+unermüdlicheren
+unermüdlicherer
+unermüdlicheres
+unermüdliches
+unermüdlichste
+unermüdlichstem
+unermüdlichsten
+unermüdlichster
+unermüdlichstes
+unerquicklich
+unerquickliche
+unerquicklichem
+unerquicklichen
+unerquicklicher
+unerquicklichere
+unerquicklicherem
+unerquicklicheren
+unerquicklicherer
+unerquicklicheres
+unerquickliches
+unerquicklichste
+unerquicklichstem
+unerquicklichsten
+unerquicklichster
+unerquicklichstes
+unerreichbar
+unerreichbare
+unerreichbarem
+unerreichbaren
+unerreichbarer
+unerreichbarere
+unerreichbarerem
+unerreichbareren
+unerreichbarerer
+unerreichbareres
+unerreichbares
+unerreichbarste
+unerreichbarstem
+unerreichbarsten
+unerreichbarster
+unerreichbarstes
+unerreicht
+unerreichte
+unerreichtem
+unerreichten
+unerreichter
+unerreichtere
+unerreichterem
+unerreichteren
+unerreichterer
+unerreichteres
+unerreichtes
+unerreichteste
+unerreichtestem
+unerreichtesten
+unerreichtester
+unerreichtestes
+unerschloss
+unerschlossen
+unerschlossene
+unerschlossenem
+unerschlossenen
+unerschlossener
+unerschlossenere
+unerschlossenerem
+unerschlosseneren
+unerschlossenerer
+unerschlosseneres
+unerschlossenes
+unerschlossenste
+unerschlossenstem
+unerschlossensten
+unerschlossenster
+unerschlossenstes
+unerschlossest
+unerschlosst
+unerschrocken
+unerschrockene
+unerschrockenem
+unerschrockenen
+unerschrockener
+unerschrockenere
+unerschrockenerem
+unerschrockeneren
+unerschrockenerer
+unerschrockeneres
+unerschrockenes
+unerschrockenste
+unerschrockenstem
+unerschrockensten
+unerschrockenster
+unerschrockenstes
+unerschwinglich
+unerschwingliche
+unerschwinglichem
+unerschwinglichen
+unerschwinglicher
+unerschwinglichere
+unerschwinglicherem
+unerschwinglicheren
+unerschwinglicherer
+unerschwinglicheres
+unerschwingliches
+unerschwinglichste
+unerschwinglichstem
+unerschwinglichsten
+unerschwinglichster
+unerschwinglichstes
+unerschöpfqqlich
+unerschöpfqqliche
+unerschöpfqqlichem
+unerschöpfqqlichen
+unerschöpfqqlicher
+unerschöpfqqlichere
+unerschöpfqqlicherem
+unerschöpfqqlicheren
+unerschöpfqqlicherer
+unerschöpfqqlicheres
+unerschöpfqqliches
+unerschöpfqqlichste
+unerschöpfqqlichstem
+unerschöpfqqlichsten
+unerschöpfqqlichster
+unerschöpfqqlichstes
+unerschütterlich
+unerschütterliche
+unerschütterlichem
+unerschütterlichen
+unerschütterlicher
+unerschütterlichere
+unerschütterlicherem
+unerschütterlicheren
+unerschütterlicherer
+unerschütterlicheres
+unerschütterliches
+unerschütterlichste
+unerschütterlichstem
+unerschütterlichsten
+unerschütterlichster
+unerschütterlichstes
+unerschüttert
+unerschütterte
+unerschüttertem
+unerschütterten
+unerschütterter
+unerschüttertes
+unersetzlich
+unersetzliche
+unersetzlichem
+unersetzlichen
+unersetzlicher
+unersetzlichere
+unersetzlicherem
+unersetzlicheren
+unersetzlicherer
+unersetzlicheres
+unersetzliches
+unersetzlichste
+unersetzlichstem
+unersetzlichsten
+unersetzlichster
+unersetzlichstes
+unersichtlich
+unersichtliche
+unersichtlichem
+unersichtlichen
+unersichtlicher
+unersichtlichere
+unersichtlicherem
+unersichtlicheren
+unersichtlicherer
+unersichtlicheres
+unersichtliches
+unersichtlichste
+unersichtlichstem
+unersichtlichsten
+unersichtlichster
+unersichtlichstes
+unersprießlich
+unersprießliche
+unersprießlichem
+unersprießlichen
+unersprießlicher
+unersprießlichere
+unersprießlicherem
+unersprießlicheren
+unersprießlicherer
+unersprießlicheres
+unersprießliches
+unersprießlichste
+unersprießlichstem
+unersprießlichsten
+unersprießlichster
+unersprießlichstes
+unersättlich
+unersättliche
+unersättlichem
+unersättlichen
+unersättlicher
+unersättlichere
+unersättlicherem
+unersättlicheren
+unersättlicherer
+unersättlicheres
+unersättliches
+unersättlichste
+unersättlichstem
+unersättlichsten
+unersättlichster
+unersättlichstes
+unerträglich
+unerträgliche
+unerträglichem
+unerträglichen
+unerträglicher
+unerträglichere
+unerträglicherem
+unerträglicheren
+unerträglicherer
+unerträglicheres
+unerträgliches
+unerträglichste
+unerträglichstem
+unerträglichsten
+unerträglichster
+unerträglichstes
+unerwartet
+unerwartete
+unerwartetem
+unerwarteten
+unerwarteter
+unerwartetere
+unerwarteterem
+unerwarteteren
+unerwarteterer
+unerwarteteres
+unerwartetes
+unerwartetste
+unerwartetstem
+unerwartetsten
+unerwartetster
+unerwartetstes
+unerwidert
+unerwiderte
+unerwidertem
+unerwiderten
+unerwiderter
+unerwidertes
+unerwähnt
+unerwähnte
+unerwähntem
+unerwähnten
+unerwähnter
+unerwähntes
+unerwünscht
+unerwünschte
+unerwünschtem
+unerwünschten
+unerwünschter
+unerwünschtere
+unerwünschterem
+unerwünschteren
+unerwünschterer
+unerwünschteres
+unerwünschtes
+unerwünschteste
+unerwünschtestem
+unerwünschtesten
+unerwünschtester
+unerwünschtestes
+unerziehbar
+unerziehbare
+unerziehbarem
+unerziehbaren
+unerziehbarer
+unerziehbares
+unerzog
+unerzogen
+unerzogene
+unerzogenem
+unerzogenen
+unerzogener
+unerzogenes
+unerzogst
+unerzogt
+unerörtert
+unerörterte
+unerörtertem
+unerörterten
+unerörterter
+unerörtertes
+unfahrbar
+unfahrbare
+unfahrbarem
+unfahrbaren
+unfahrbarer
+unfahrbarere
+unfahrbarerem
+unfahrbareren
+unfahrbarerer
+unfahrbareres
+unfahrbares
+unfahrbarste
+unfahrbarstem
+unfahrbarsten
+unfahrbarster
+unfahrbarstes
+unfair
+unfaire
+unfairem
+unfairen
+unfairer
+unfairere
+unfairerem
+unfaireren
+unfairerer
+unfaireres
+unfaires
+unfairste
+unfairstem
+unfairsten
+unfairster
+unfairstes
+unfallfrei
+unfallfreie
+unfallfreiem
+unfallfreien
+unfallfreier
+unfallfreies
+unfallgefährdet
+unfallgefährdete
+unfallgefährdetem
+unfallgefährdeten
+unfallgefährdeter
+unfallgefährdetes
+unfassbar
+unfassbare
+unfassbarem
+unfassbaren
+unfassbarer
+unfassbares
+unfehlbar
+unfehlbare
+unfehlbarem
+unfehlbaren
+unfehlbarer
+unfehlbarere
+unfehlbarerem
+unfehlbareren
+unfehlbarerer
+unfehlbareres
+unfehlbares
+unfehlbarste
+unfehlbarstem
+unfehlbarsten
+unfehlbarster
+unfehlbarstes
+unfein
+unfeine
+unfeinem
+unfeinen
+unfeiner
+unfeinere
+unfeinerem
+unfeineren
+unfeinerer
+unfeineres
+unfeines
+unfeinste
+unfeinstem
+unfeinsten
+unfeinster
+unfeinstes
+unfertig
+unfertige
+unfertigem
+unfertigen
+unfertiger
+unfertigere
+unfertigerem
+unfertigeren
+unfertigerer
+unfertigeres
+unfertiges
+unfertigste
+unfertigstem
+unfertigsten
+unfertigster
+unfertigstes
+unfolgsam
+unfolgsame
+unfolgsamem
+unfolgsamen
+unfolgsamer
+unfolgsamere
+unfolgsamerem
+unfolgsameren
+unfolgsamerer
+unfolgsameres
+unfolgsames
+unfolgsamste
+unfolgsamstem
+unfolgsamsten
+unfolgsamster
+unfolgsamstes
+unfrankiert
+unfrankierte
+unfrankiertem
+unfrankierten
+unfrankierter
+unfrankiertes
+unfrei
+unfreie
+unfreiem
+unfreien
+unfreier
+unfreiere
+unfreierem
+unfreieren
+unfreierer
+unfreieres
+unfreies
+unfreiste
+unfreistem
+unfreisten
+unfreister
+unfreistes
+unfreiwillig
+unfreiwillige
+unfreiwilligem
+unfreiwilligen
+unfreiwilliger
+unfreiwilliges
+unfreundlich
+unfreundliche
+unfreundlichem
+unfreundlichen
+unfreundlicher
+unfreundlichere
+unfreundlicherem
+unfreundlicheren
+unfreundlicherer
+unfreundlicheres
+unfreundliches
+unfreundlichste
+unfreundlichstem
+unfreundlichsten
+unfreundlichster
+unfreundlichstes
+unfruchtbar
+unfruchtbare
+unfruchtbarem
+unfruchtbaren
+unfruchtbarer
+unfruchtbarere
+unfruchtbarerem
+unfruchtbareren
+unfruchtbarerer
+unfruchtbareres
+unfruchtbares
+unfruchtbarste
+unfruchtbarstem
+unfruchtbarsten
+unfruchtbarster
+unfruchtbarstes
+unfähig
+unfähige
+unfähigem
+unfähigen
+unfähiger
+unfähigere
+unfähigerem
+unfähigeren
+unfähigerer
+unfähigeres
+unfähiges
+unfähigste
+unfähigstem
+unfähigsten
+unfähigster
+unfähigstes
+unförmig
+unförmige
+unförmigem
+unförmigen
+unförmiger
+unförmigere
+unförmigerem
+unförmigeren
+unförmigerer
+unförmigeres
+unförmiges
+unförmigste
+unförmigstem
+unförmigsten
+unförmigster
+unförmigstes
+unförmlich
+unförmliche
+unförmlichem
+unförmlichen
+unförmlicher
+unförmlichere
+unförmlicherem
+unförmlicheren
+unförmlicherer
+unförmlicheres
+unförmliches
+unförmlichste
+unförmlichstem
+unförmlichsten
+unförmlichster
+unförmlichstes
+unfügsam
+unfügsame
+unfügsamem
+unfügsamen
+unfügsamer
+unfügsamere
+unfügsamerem
+unfügsameren
+unfügsamerer
+unfügsameres
+unfügsames
+unfügsamste
+unfügsamstem
+unfügsamsten
+unfügsamster
+unfügsamstes
+unfühlbar
+unfühlbare
+unfühlbarem
+unfühlbaren
+unfühlbarer
+unfühlbarere
+unfühlbarerem
+unfühlbareren
+unfühlbarerer
+unfühlbareres
+unfühlbares
+unfühlbarste
+unfühlbarstem
+unfühlbarsten
+unfühlbarster
+unfühlbarstes
+ungangbar
+ungangbare
+ungangbarem
+ungangbaren
+ungangbarer
+ungangbarere
+ungangbarerem
+ungangbareren
+ungangbarerer
+ungangbareres
+ungangbares
+ungangbarste
+ungangbarstem
+ungangbarsten
+ungangbarster
+ungangbarstes
+ungarisch
+ungarische
+ungarischem
+ungarischen
+ungarischer
+ungarisches
+ungastlich
+ungastliche
+ungastlichem
+ungastlichen
+ungastlicher
+ungastlichere
+ungastlicherem
+ungastlicheren
+ungastlicherer
+ungastlicheres
+ungastliches
+ungastlichste
+ungastlichstem
+ungastlichsten
+ungastlichster
+ungastlichstes
+ungeachtet
+ungeachtete
+ungeachtetem
+ungeachteten
+ungeachteter
+ungeachtetere
+ungeachteterem
+ungeachteteren
+ungeachteterer
+ungeachteteres
+ungeachtetes
+ungeachtetste
+ungeachtetstem
+ungeachtetsten
+ungeachtetster
+ungeachtetstes
+ungeahndet
+ungeahndete
+ungeahndetem
+ungeahndeten
+ungeahndeter
+ungeahndetes
+ungeahnt
+ungeahnte
+ungeahntem
+ungeahnten
+ungeahnter
+ungeahntes
+ungebeten
+ungebetene
+ungebetenem
+ungebetenen
+ungebetener
+ungebetenere
+ungebetenerem
+ungebeteneren
+ungebetenerer
+ungebeteneres
+ungebetenes
+ungebetenste
+ungebetenstem
+ungebetensten
+ungebetenster
+ungebetenstes
+ungebildet
+ungebildete
+ungebildetem
+ungebildeten
+ungebildeter
+ungebildetere
+ungebildeterem
+ungebildeteren
+ungebildeterer
+ungebildeteres
+ungebildetes
+ungebildetste
+ungebildetstem
+ungebildetsten
+ungebildetster
+ungebildetstes
+ungeboren
+ungeborene
+ungeborenem
+ungeborenen
+ungeborener
+ungeborenes
+ungebraucht
+ungebrauchte
+ungebrauchtem
+ungebrauchten
+ungebrauchter
+ungebrauchtere
+ungebrauchterem
+ungebrauchteren
+ungebrauchterer
+ungebrauchteres
+ungebrauchtes
+ungebrauchteste
+ungebrauchtestem
+ungebrauchtesten
+ungebrauchtester
+ungebrauchtestes
+ungebremst
+ungebremste
+ungebremstem
+ungebremsten
+ungebremster
+ungebremstes
+ungebrochen
+ungebrochene
+ungebrochenem
+ungebrochenen
+ungebrochener
+ungebrochenes
+ungebräuchlich
+ungebräuchliche
+ungebräuchlichem
+ungebräuchlichen
+ungebräuchlicher
+ungebräuchlichere
+ungebräuchlicherem
+ungebräuchlicheren
+ungebräuchlicherer
+ungebräuchlicheres
+ungebräuchliches
+ungebräuchlichste
+ungebräuchlichstem
+ungebräuchlichsten
+ungebräuchlichster
+ungebräuchlichstes
+ungebunden
+ungebundene
+ungebundenem
+ungebundenen
+ungebundener
+ungebundenes
+ungebärdig
+ungebärdige
+ungebärdigem
+ungebärdigen
+ungebärdiger
+ungebärdigere
+ungebärdigerem
+ungebärdigeren
+ungebärdigerer
+ungebärdigeres
+ungebärdiges
+ungebärdigste
+ungebärdigstem
+ungebärdigsten
+ungebärdigster
+ungebärdigstes
+ungebührlich
+ungebührliche
+ungebührlichem
+ungebührlichen
+ungebührlicher
+ungebührlichere
+ungebührlicherem
+ungebührlicheren
+ungebührlicherer
+ungebührlicheres
+ungebührliches
+ungebührlichste
+ungebührlichstem
+ungebührlichsten
+ungebührlichster
+ungebührlichstes
+ungedeckt
+ungedeckte
+ungedecktem
+ungedeckten
+ungedeckter
+ungedecktere
+ungedeckterem
+ungedeckteren
+ungedeckterer
+ungedeckteres
+ungedecktes
+ungedeckteste
+ungedecktestem
+ungedecktesten
+ungedecktester
+ungedecktestes
+ungeduldig
+ungeduldige
+ungeduldigem
+ungeduldigen
+ungeduldiger
+ungeduldigere
+ungeduldigerem
+ungeduldigeren
+ungeduldigerer
+ungeduldigeres
+ungeduldiges
+ungeduldigste
+ungeduldigstem
+ungeduldigsten
+ungeduldigster
+ungeduldigstes
+ungeeignet
+ungeeignete
+ungeeignetem
+ungeeigneten
+ungeeigneter
+ungeeignetere
+ungeeigneterem
+ungeeigneteren
+ungeeigneterer
+ungeeigneteres
+ungeeignetes
+ungeeignetste
+ungeeignetstem
+ungeeignetsten
+ungeeignetster
+ungeeignetstes
+ungefedert
+ungefederte
+ungefedertem
+ungefederten
+ungefederter
+ungefedertes
+ungefragt
+ungefragte
+ungefragtem
+ungefragten
+ungefragter
+ungefragtes
+ungefähr
+ungefährdet
+ungefährdete
+ungefährdetem
+ungefährdeten
+ungefährdeter
+ungefährdetere
+ungefährdeterem
+ungefährdeteren
+ungefährdeterer
+ungefährdeteres
+ungefährdetes
+ungefährdetste
+ungefährdetstem
+ungefährdetsten
+ungefährdetster
+ungefährdetstes
+ungefähre
+ungefährem
+ungefähren
+ungefährer
+ungefähres
+ungefährlich
+ungefährliche
+ungefährlichem
+ungefährlichen
+ungefährlicher
+ungefährlichere
+ungefährlicherem
+ungefährlicheren
+ungefährlicherer
+ungefährlicheres
+ungefährliches
+ungefährlichste
+ungefährlichstem
+ungefährlichsten
+ungefährlichster
+ungefährlichstes
+ungefällig
+ungefällige
+ungefälligem
+ungefälligen
+ungefälliger
+ungefälligere
+ungefälligerem
+ungefälligeren
+ungefälligerer
+ungefälligeres
+ungefälliges
+ungefälligste
+ungefälligstem
+ungefälligsten
+ungefälligster
+ungefälligstes
+ungefärbt
+ungefärbte
+ungefärbtem
+ungefärbten
+ungefärbter
+ungefärbtes
+ungefügig
+ungefügige
+ungefügigem
+ungefügigen
+ungefügiger
+ungefügigere
+ungefügigerem
+ungefügigeren
+ungefügigerer
+ungefügigeres
+ungefügiges
+ungefügigste
+ungefügigstem
+ungefügigsten
+ungefügigster
+ungefügigstes
+ungehalten
+ungehaltene
+ungehaltenem
+ungehaltenen
+ungehaltener
+ungehaltenes
+ungeheilt
+ungeheilte
+ungeheiltem
+ungeheilten
+ungeheilter
+ungeheiltes
+ungeheizt
+ungeheizte
+ungeheiztem
+ungeheizten
+ungeheizter
+ungeheiztes
+ungeheißen
+ungeheißene
+ungeheißenem
+ungeheißenen
+ungeheißener
+ungeheißenes
+ungehemmt
+ungehemmte
+ungehemmtem
+ungehemmten
+ungehemmter
+ungehemmtere
+ungehemmterem
+ungehemmteren
+ungehemmterer
+ungehemmteres
+ungehemmtes
+ungehemmteste
+ungehemmtestem
+ungehemmtesten
+ungehemmtester
+ungehemmtestes
+ungeheuchelt
+ungeheuchelte
+ungeheucheltem
+ungeheuchelten
+ungeheuchelter
+ungeheucheltes
+ungeheuer
+ungeheuerlich
+ungeheuerliche
+ungeheuerlichem
+ungeheuerlichen
+ungeheuerlicher
+ungeheuerlichere
+ungeheuerlicherem
+ungeheuerlicheren
+ungeheuerlicherer
+ungeheuerlicheres
+ungeheuerliches
+ungeheuerlichste
+ungeheuerlichstem
+ungeheuerlichsten
+ungeheuerlichster
+ungeheuerlichstes
+ungeheuerste
+ungeheuerstem
+ungeheuersten
+ungeheuerster
+ungeheuerstes
+ungeheure
+ungeheurem
+ungeheuren
+ungeheurer
+ungeheurere
+ungeheurerem
+ungeheureren
+ungeheurerer
+ungeheureres
+ungeheures
+ungehindert
+ungehinderte
+ungehindertem
+ungehinderten
+ungehinderter
+ungehindertes
+ungehobelt
+ungehobelte
+ungehobeltem
+ungehobelten
+ungehobelter
+ungehobeltere
+ungehobelterem
+ungehobelteren
+ungehobelterer
+ungehobelteres
+ungehobeltes
+ungehobelteste
+ungehobeltestem
+ungehobeltesten
+ungehobeltester
+ungehobeltestes
+ungehorsam
+ungehorsame
+ungehorsamem
+ungehorsamen
+ungehorsamer
+ungehorsamere
+ungehorsamerem
+ungehorsameren
+ungehorsamerer
+ungehorsameres
+ungehorsames
+ungehorsamste
+ungehorsamstem
+ungehorsamsten
+ungehorsamster
+ungehorsamstes
+ungehörig
+ungehörige
+ungehörigem
+ungehörigen
+ungehöriger
+ungehöriges
+ungehört
+ungehörte
+ungehörtem
+ungehörten
+ungehörter
+ungehörtere
+ungehörterem
+ungehörteren
+ungehörterer
+ungehörteres
+ungehörtes
+ungehörteste
+ungehörtestem
+ungehörtesten
+ungehörtester
+ungehörtestes
+ungekapselt
+ungekapselte
+ungekapseltem
+ungekapselten
+ungekapselter
+ungekapseltes
+ungeklärt
+ungeklärte
+ungeklärtem
+ungeklärten
+ungeklärter
+ungeklärtere
+ungeklärterem
+ungeklärteren
+ungeklärterer
+ungeklärteres
+ungeklärtes
+ungeklärteste
+ungeklärtestem
+ungeklärtesten
+ungeklärtester
+ungeklärtestes
+ungekünstelt
+ungekünstelte
+ungekünsteltem
+ungekünstelten
+ungekünstelter
+ungekünsteltere
+ungekünstelterem
+ungekünstelteren
+ungekünstelterer
+ungekünstelteres
+ungekünsteltes
+ungekünstelteste
+ungekünsteltestem
+ungekünsteltesten
+ungekünsteltester
+ungekünsteltestes
+ungekürzt
+ungekürzte
+ungekürztem
+ungekürzten
+ungekürzter
+ungekürztes
+ungeladen
+ungeladene
+ungeladenem
+ungeladenen
+ungeladener
+ungeladenere
+ungeladenerem
+ungeladeneren
+ungeladenerer
+ungeladeneres
+ungeladenes
+ungeladenste
+ungeladenstem
+ungeladensten
+ungeladenster
+ungeladenstes
+ungelegen
+ungelegene
+ungelegenem
+ungelegenen
+ungelegener
+ungelegenes
+ungelegt
+ungelegte
+ungelegtem
+ungelegten
+ungelegter
+ungelegtes
+ungelehrig
+ungelehrige
+ungelehrigem
+ungelehrigen
+ungelehriger
+ungelehrigere
+ungelehrigerem
+ungelehrigeren
+ungelehrigerer
+ungelehrigeres
+ungelehriges
+ungelehrigste
+ungelehrigstem
+ungelehrigsten
+ungelehrigster
+ungelehrigstes
+ungelehrt
+ungelehrte
+ungelehrtem
+ungelehrten
+ungelehrter
+ungelehrtere
+ungelehrterem
+ungelehrteren
+ungelehrterer
+ungelehrteres
+ungelehrtes
+ungelehrteste
+ungelehrtestem
+ungelehrtesten
+ungelehrtester
+ungelehrtestes
+ungelenk
+ungelenke
+ungelenkem
+ungelenken
+ungelenker
+ungelenkes
+ungelernt
+ungelernte
+ungelerntem
+ungelernten
+ungelernter
+ungelerntere
+ungelernterem
+ungelernteren
+ungelernterer
+ungelernteres
+ungelerntes
+ungelernteste
+ungelerntestem
+ungelerntesten
+ungelerntester
+ungelerntestes
+ungelesen
+ungelesene
+ungelesenem
+ungelesenen
+ungelesener
+ungelesenes
+ungeliebt
+ungeliebte
+ungeliebtem
+ungeliebten
+ungeliebter
+ungeliebtes
+ungeliftet
+ungeliftete
+ungeliftetem
+ungelifteten
+ungelifteter
+ungeliftetes
+ungelöscht
+ungelöschte
+ungelöschtem
+ungelöschten
+ungelöschter
+ungelöschtes
+ungelöst
+ungelöste
+ungelöstem
+ungelösten
+ungelöster
+ungelöstes
+ungemein
+ungemeine
+ungemeinem
+ungemeinen
+ungemeiner
+ungemeinere
+ungemeinerem
+ungemeineren
+ungemeinerer
+ungemeineres
+ungemeines
+ungemeinste
+ungemeinstem
+ungemeinsten
+ungemeinster
+ungemeinstes
+ungemischt
+ungemischte
+ungemischtem
+ungemischten
+ungemischter
+ungemischtere
+ungemischterem
+ungemischteren
+ungemischterer
+ungemischteres
+ungemischtes
+ungemischteste
+ungemischtestem
+ungemischtesten
+ungemischtester
+ungemischtestes
+ungemütlich
+ungemütliche
+ungemütlichem
+ungemütlichen
+ungemütlicher
+ungemütlichere
+ungemütlicherem
+ungemütlicheren
+ungemütlicherer
+ungemütlicheres
+ungemütliches
+ungemütlichste
+ungemütlichstem
+ungemütlichsten
+ungemütlichster
+ungemütlichstes
+ungenannt
+ungenannte
+ungenanntem
+ungenannten
+ungenannter
+ungenanntere
+ungenannterem
+ungenannteren
+ungenannterer
+ungenannteres
+ungenanntes
+ungenannteste
+ungenanntestem
+ungenanntesten
+ungenanntester
+ungenanntestes
+ungenau
+ungenaue
+ungenauem
+ungenauen
+ungenauer
+ungenauere
+ungenauerem
+ungenaueren
+ungenauerer
+ungenaueres
+ungenaues
+ungenaueste
+ungenauestem
+ungenauesten
+ungenauester
+ungenauestes
+ungenauste
+ungenaustem
+ungenausten
+ungenauster
+ungenaustes
+ungenehmigt
+ungenehmigte
+ungenehmigtem
+ungenehmigten
+ungenehmigter
+ungenehmigtes
+ungeniert
+ungenierte
+ungeniertem
+ungenierten
+ungenierter
+ungeniertere
+ungenierterem
+ungenierteren
+ungenierterer
+ungenierteres
+ungeniertes
+ungenierteste
+ungeniertestem
+ungeniertesten
+ungeniertester
+ungeniertestes
+ungenießbar
+ungenießbare
+ungenießbarem
+ungenießbaren
+ungenießbarer
+ungenießbarere
+ungenießbarerem
+ungenießbareren
+ungenießbarerer
+ungenießbareres
+ungenießbares
+ungenießbarste
+ungenießbarstem
+ungenießbarsten
+ungenießbarster
+ungenießbarstes
+ungenutzt
+ungenutzte
+ungenutztem
+ungenutzten
+ungenutzter
+ungenutztes
+ungenügend
+ungenügende
+ungenügendem
+ungenügenden
+ungenügender
+ungenügendere
+ungenügenderem
+ungenügenderen
+ungenügenderer
+ungenügenderes
+ungenügendes
+ungenügendste
+ungenügendstem
+ungenügendsten
+ungenügendster
+ungenügendstes
+ungenügsam
+ungenügsame
+ungenügsamem
+ungenügsamen
+ungenügsamer
+ungenügsamere
+ungenügsamerem
+ungenügsameren
+ungenügsamerer
+ungenügsameres
+ungenügsames
+ungenügsamste
+ungenügsamstem
+ungenügsamsten
+ungenügsamster
+ungenügsamstes
+ungenützt
+ungenützte
+ungenütztem
+ungenützten
+ungenützter
+ungenütztes
+ungeordnet
+ungeordnete
+ungeordnetem
+ungeordneten
+ungeordneter
+ungeordnetes
+ungepflastert
+ungepflasterte
+ungepflastertem
+ungepflasterten
+ungepflasterter
+ungepflastertes
+ungepflegt
+ungepflegte
+ungepflegtem
+ungepflegten
+ungepflegter
+ungepflegtere
+ungepflegterem
+ungepflegteren
+ungepflegterer
+ungepflegteres
+ungepflegtes
+ungepflegteste
+ungepflegtestem
+ungepflegtesten
+ungepflegtester
+ungepflegtestes
+ungeprüft
+ungeprüfte
+ungeprüftem
+ungeprüften
+ungeprüfter
+ungeprüftes
+ungerad
+ungerade
+ungeradem
+ungeraden
+ungerader
+ungerades
+ungeraten
+ungeratene
+ungeratenem
+ungeratenen
+ungeratener
+ungeratenere
+ungeratenerem
+ungerateneren
+ungeratenerer
+ungerateneres
+ungeratenes
+ungeratenste
+ungeratenstem
+ungeratensten
+ungeratenster
+ungeratenstes
+ungerechnet
+ungerechnete
+ungerechnetem
+ungerechneten
+ungerechneter
+ungerechnetes
+ungerecht
+ungerechte
+ungerechtem
+ungerechten
+ungerechter
+ungerechtere
+ungerechterem
+ungerechteren
+ungerechterer
+ungerechteres
+ungerechtes
+ungerechteste
+ungerechtestem
+ungerechtesten
+ungerechtester
+ungerechtestes
+ungerechtfertigt
+ungerechtfertigte
+ungerechtfertigtem
+ungerechtfertigten
+ungerechtfertigter
+ungerechtfertigtere
+ungerechtfertigterem
+ungerechtfertigteren
+ungerechtfertigterer
+ungerechtfertigteres
+ungerechtfertigtes
+ungerechtfertigteste
+ungerechtfertigtestem
+ungerechtfertigtesten
+ungerechtfertigtester
+ungerechtfertigtestes
+ungeregelt
+ungeregelte
+ungeregeltem
+ungeregelten
+ungeregelter
+ungeregeltes
+ungereimt
+ungereimte
+ungereimtem
+ungereimten
+ungereimter
+ungereimtere
+ungereimterem
+ungereimteren
+ungereimterer
+ungereimteres
+ungereimtes
+ungereimteste
+ungereimtestem
+ungereimtesten
+ungereimtester
+ungereimtestes
+ungerichtet
+ungerichtete
+ungerichtetem
+ungerichteten
+ungerichteter
+ungerichtetes
+ungern
+ungerächt
+ungerächte
+ungerächtem
+ungerächten
+ungerächter
+ungerächtere
+ungerächterem
+ungerächteren
+ungerächterer
+ungerächteres
+ungerächtes
+ungerächteste
+ungerächtestem
+ungerächtesten
+ungerächtester
+ungerächtestes
+ungerührt
+ungerührte
+ungerührtem
+ungerührten
+ungerührter
+ungerührtere
+ungerührterem
+ungerührteren
+ungerührterer
+ungerührteres
+ungerührtes
+ungerührteste
+ungerührtestem
+ungerührtesten
+ungerührtester
+ungerührtestes
+ungesagt
+ungesagte
+ungesagtem
+ungesagten
+ungesagter
+ungesagtes
+ungesalzen
+ungesalzene
+ungesalzenem
+ungesalzenen
+ungesalzener
+ungesalzenes
+ungeschehen
+ungeschehene
+ungeschehenem
+ungeschehenen
+ungeschehener
+ungeschehenes
+ungeschichtlich
+ungeschichtliche
+ungeschichtlichem
+ungeschichtlichen
+ungeschichtlicher
+ungeschichtliches
+ungeschickt
+ungeschickte
+ungeschicktem
+ungeschickten
+ungeschickter
+ungeschicktere
+ungeschickterem
+ungeschickteren
+ungeschickterer
+ungeschickteres
+ungeschicktes
+ungeschickteste
+ungeschicktestem
+ungeschicktesten
+ungeschicktester
+ungeschicktestes
+ungeschlagen
+ungeschlagene
+ungeschlagenem
+ungeschlagenen
+ungeschlagener
+ungeschlagenes
+ungeschlechtlich
+ungeschlechtliche
+ungeschlechtlichem
+ungeschlechtlichen
+ungeschlechtlicher
+ungeschlechtliches
+ungeschliffen
+ungeschliffene
+ungeschliffenem
+ungeschliffenen
+ungeschliffener
+ungeschliffenes
+ungeschminkt
+ungeschminkte
+ungeschminktem
+ungeschminkten
+ungeschminkter
+ungeschminktes
+ungeschmälert
+ungeschmälerte
+ungeschmälertem
+ungeschmälerten
+ungeschmälerter
+ungeschmälertes
+ungeschoren
+ungeschorene
+ungeschorenem
+ungeschorenen
+ungeschorener
+ungeschorenes
+ungeschrieben
+ungeschriebene
+ungeschriebenem
+ungeschriebenen
+ungeschriebener
+ungeschriebenes
+ungeschult
+ungeschulte
+ungeschultem
+ungeschulten
+ungeschulter
+ungeschultes
+ungeschönt
+ungeschönte
+ungeschöntem
+ungeschönten
+ungeschönter
+ungeschöntes
+ungeschützt
+ungeschützte
+ungeschütztem
+ungeschützten
+ungeschützter
+ungeschütztes
+ungesehen
+ungesehene
+ungesehenem
+ungesehenen
+ungesehener
+ungesehenes
+ungesellig
+ungesellige
+ungeselligem
+ungeselligen
+ungeselliger
+ungeselligere
+ungeselligerem
+ungeselligeren
+ungeselligerer
+ungeselligeres
+ungeselliges
+ungeselligste
+ungeselligstem
+ungeselligsten
+ungeselligster
+ungeselligstes
+ungesetzlich
+ungesetzliche
+ungesetzlichem
+ungesetzlichen
+ungesetzlicher
+ungesetzliches
+ungesichert
+ungesicherte
+ungesichertem
+ungesicherten
+ungesicherter
+ungesichertes
+ungesittet
+ungesittete
+ungesittetem
+ungesitteten
+ungesitteter
+ungesittetes
+ungestraft
+ungestrafte
+ungestraftem
+ungestraften
+ungestrafter
+ungestraftes
+ungestört
+ungestörte
+ungestörtem
+ungestörten
+ungestörter
+ungestörtes
+ungestüm
+ungestüme
+ungestümem
+ungestümen
+ungestümer
+ungestümes
+ungesund
+ungesunde
+ungesundem
+ungesunden
+ungesunder
+ungesundere
+ungesunderem
+ungesunderen
+ungesunderer
+ungesunderes
+ungesundes
+ungesundste
+ungesundstem
+ungesundsten
+ungesundster
+ungesundstes
+ungesättigt
+ungesättigte
+ungesättigtem
+ungesättigten
+ungesättigter
+ungesättigtes
+ungesäumt
+ungesäumte
+ungesäumtem
+ungesäumten
+ungesäumter
+ungesäumtere
+ungesäumterem
+ungesäumteren
+ungesäumterer
+ungesäumteres
+ungesäumtes
+ungesäumteste
+ungesäumtestem
+ungesäumtesten
+ungesäumtester
+ungesäumtestes
+ungesühnt
+ungesühnte
+ungesühntem
+ungesühnten
+ungesühnter
+ungesühntes
+ungeteilt
+ungeteilte
+ungeteiltem
+ungeteilten
+ungeteilter
+ungeteiltes
+ungetrimmt
+ungetrimmte
+ungetrimmtem
+ungetrimmten
+ungetrimmter
+ungetrimmtes
+ungetrübt
+ungetrübte
+ungetrübtem
+ungetrübten
+ungetrübter
+ungetrübtes
+ungetypt
+ungetypte
+ungetyptem
+ungetypten
+ungetypter
+ungetyptes
+ungewiss
+ungewisse
+ungewissem
+ungewissen
+ungewisser
+ungewisses
+ungewohnt
+ungewohnte
+ungewohntem
+ungewohnten
+ungewohnter
+ungewohntes
+ungewollt
+ungewollte
+ungewolltem
+ungewollten
+ungewollter
+ungewolltere
+ungewollterem
+ungewollteren
+ungewollterer
+ungewollteres
+ungewolltes
+ungewollteste
+ungewolltestem
+ungewolltesten
+ungewolltester
+ungewolltestes
+ungewöhnlich
+ungewöhnliche
+ungewöhnlichem
+ungewöhnlichen
+ungewöhnlicher
+ungewöhnlichere
+ungewöhnlicherem
+ungewöhnlicheren
+ungewöhnlicherer
+ungewöhnlicheres
+ungewöhnliches
+ungewöhnlichste
+ungewöhnlichstem
+ungewöhnlichsten
+ungewöhnlichster
+ungewöhnlichstes
+ungezeichnet
+ungezeichnete
+ungezeichnetem
+ungezeichneten
+ungezeichneter
+ungezeichnetes
+ungezielt
+ungezielte
+ungezieltem
+ungezielten
+ungezielter
+ungezieltere
+ungezielterem
+ungezielteren
+ungezielterer
+ungezielteres
+ungezieltes
+ungezielteste
+ungezieltestem
+ungezieltesten
+ungezieltester
+ungezieltestes
+ungeziemend
+ungeziemende
+ungeziemendem
+ungeziemenden
+ungeziemender
+ungeziemendes
+ungezogen
+ungezogene
+ungezogenem
+ungezogenen
+ungezogener
+ungezogenes
+ungezwungen
+ungezwungene
+ungezwungenem
+ungezwungenen
+ungezwungener
+ungezwungenes
+ungezählt
+ungezählte
+ungezähltem
+ungezählten
+ungezählter
+ungezähltes
+ungezähmt
+ungezähmte
+ungezähmtem
+ungezähmten
+ungezähmter
+ungezähmtes
+ungezügelt
+ungezügelte
+ungezügeltem
+ungezügelten
+ungezügelter
+ungezügeltes
+ungeübt
+ungeübte
+ungeübtem
+ungeübten
+ungeübter
+ungeübtes
+ungiftig
+ungiftige
+ungiftigem
+ungiftigen
+ungiftiger
+ungiftigere
+ungiftigerem
+ungiftigeren
+ungiftigerer
+ungiftigeres
+ungiftiges
+ungiftigste
+ungiftigstem
+ungiftigsten
+ungiftigster
+ungiftigstes
+unglaublich
+unglaubliche
+unglaublichem
+unglaublichen
+unglaublicher
+unglaubliches
+unglaubwürdig
+unglaubwürdige
+unglaubwürdigem
+unglaubwürdigen
+unglaubwürdiger
+unglaubwürdigere
+unglaubwürdigerem
+unglaubwürdigeren
+unglaubwürdigerer
+unglaubwürdigeres
+unglaubwürdiges
+unglaubwürdigste
+unglaubwürdigstem
+unglaubwürdigsten
+unglaubwürdigster
+unglaubwürdigstes
+ungleich
+ungleichartig
+ungleichartige
+ungleichartigem
+ungleichartigen
+ungleichartiger
+ungleichartiges
+ungleiche
+ungleichem
+ungleichen
+ungleicher
+ungleiches
+ungleichförmig
+ungleichförmige
+ungleichförmigem
+ungleichförmigen
+ungleichförmiger
+ungleichförmiges
+ungleichmäßig
+ungleichmäßige
+ungleichmäßigem
+ungleichmäßigen
+ungleichmäßiger
+ungleichmäßigere
+ungleichmäßigerem
+ungleichmäßigeren
+ungleichmäßigerer
+ungleichmäßigeres
+ungleichmäßiges
+ungleichmäßigste
+ungleichmäßigstem
+ungleichmäßigsten
+ungleichmäßigster
+ungleichmäßigstes
+ungleichzeitig
+ungleichzeitige
+ungleichzeitigem
+ungleichzeitigen
+ungleichzeitiger
+ungleichzeitiges
+unglimpfqqlich
+unglimpfqqliche
+unglimpfqqlichem
+unglimpfqqlichen
+unglimpfqqlicher
+unglimpfqqliches
+ungläubig
+ungläubige
+ungläubigem
+ungläubigen
+ungläubiger
+ungläubigere
+ungläubigerem
+ungläubigeren
+ungläubigerer
+ungläubigeres
+ungläubiges
+ungläubigste
+ungläubigstem
+ungläubigsten
+ungläubigster
+ungläubigstes
+unglücklich
+unglückliche
+unglücklichem
+unglücklichen
+unglücklicher
+unglücklichere
+unglücklicherem
+unglücklicheren
+unglücklicherer
+unglücklicheres
+unglücklicherweise
+unglückliches
+unglücklichste
+unglücklichstem
+unglücklichsten
+unglücklichster
+unglücklichstes
+unglückselig
+unglückselige
+unglückseligem
+unglückseligen
+unglückseliger
+unglückseliges
+ungnädig
+ungnädige
+ungnädigem
+ungnädigen
+ungnädiger
+ungnädigere
+ungnädigerem
+ungnädigeren
+ungnädigerer
+ungnädigeres
+ungnädiges
+ungnädigste
+ungnädigstem
+ungnädigsten
+ungnädigster
+ungnädigstes
+ungreifbar
+ungreifbare
+ungreifbarem
+ungreifbaren
+ungreifbarer
+ungreifbares
+ungut
+ungute
+ungutem
+unguten
+unguter
+ungutes
+ungültig
+ungültige
+ungültigem
+ungültigen
+ungültiger
+ungültiges
+ungünstig
+ungünstige
+ungünstigem
+ungünstigen
+ungünstiger
+ungünstigere
+ungünstigerem
+ungünstigeren
+ungünstigerer
+ungünstigeres
+ungünstiges
+ungünstigste
+ungünstigstem
+ungünstigsten
+ungünstigster
+ungünstigstes
+unhaltbar
+unhaltbare
+unhaltbarem
+unhaltbaren
+unhaltbarer
+unhaltbarere
+unhaltbarerem
+unhaltbareren
+unhaltbarerer
+unhaltbareres
+unhaltbares
+unhaltbarste
+unhaltbarstem
+unhaltbarsten
+unhaltbarster
+unhaltbarstes
+unhandlich
+unhandliche
+unhandlichem
+unhandlichen
+unhandlicher
+unhandlichere
+unhandlicherem
+unhandlicheren
+unhandlicherer
+unhandlicheres
+unhandliches
+unhandlichste
+unhandlichstem
+unhandlichsten
+unhandlichster
+unhandlichstes
+unharmonisch
+unharmonische
+unharmonischem
+unharmonischen
+unharmonischer
+unharmonischere
+unharmonischerem
+unharmonischeren
+unharmonischerer
+unharmonischeres
+unharmonisches
+unharmonischste
+unharmonischstem
+unharmonischsten
+unharmonischster
+unharmonischstes
+unheilbar
+unheilbare
+unheilbarem
+unheilbaren
+unheilbarer
+unheilbares
+unheilbringend
+unheilbringende
+unheilbringendem
+unheilbringenden
+unheilbringender
+unheilbringendes
+unheilvoll
+unheilvolle
+unheilvollem
+unheilvollen
+unheilvoller
+unheilvolles
+unheimlich
+unheimliche
+unheimlichem
+unheimlichen
+unheimlicher
+unheimlichere
+unheimlicherem
+unheimlicheren
+unheimlicherer
+unheimlicheres
+unheimliches
+unheimlichste
+unheimlichstem
+unheimlichsten
+unheimlichster
+unheimlichstes
+unhold
+unholde
+unholdem
+unholden
+unholder
+unholdes
+unhygienisch
+unhygienische
+unhygienischem
+unhygienischen
+unhygienischer
+unhygienischere
+unhygienischerem
+unhygienischeren
+unhygienischerer
+unhygienischeres
+unhygienisches
+unhygienischste
+unhygienischstem
+unhygienischsten
+unhygienischster
+unhygienischstes
+unhöfqqlich
+unhöfqqliche
+unhöfqqlichem
+unhöfqqlichen
+unhöfqqlicher
+unhöfqqlichere
+unhöfqqlicherem
+unhöfqqlicheren
+unhöfqqlicherer
+unhöfqqlicheres
+unhöfqqliches
+unhöfqqlichste
+unhöfqqlichstem
+unhöfqqlichsten
+unhöfqqlichster
+unhöfqqlichstes
+unhörbar
+unhörbare
+unhörbarem
+unhörbaren
+unhörbarer
+unhörbares
+unidirektional
+unidirektionale
+unidirektionalem
+unidirektionalen
+unidirektionaler
+unidirektionales
+uniform
+uniforme
+uniformem
+uniformen
+uniformer
+uniformes
+uniformiert
+uniformierte
+uniformiertem
+uniformierten
+uniformierter
+uniformiertes
+unintellektuell
+unintellektuelle
+unintellektuellem
+unintellektuellen
+unintellektueller
+unintellektuelles
+uninteressant
+uninteressante
+uninteressantem
+uninteressanten
+uninteressanter
+uninteressantere
+uninteressanterem
+uninteressanteren
+uninteressanterer
+uninteressanteres
+uninteressantes
+uninteressanteste
+uninteressantestem
+uninteressantesten
+uninteressantester
+uninteressantestes
+uninteressiert
+uninteressierte
+uninteressiertem
+uninteressierten
+uninteressierter
+uninteressiertes
+unipolar
+unipolare
+unipolarem
+unipolaren
+unipolarer
+unipolares
+universal
+universale
+universalem
+universalen
+universaler
+universales
+universalistisch
+universalistische
+universalistischem
+universalistischen
+universalistischer
+universalistisches
+universell
+universelle
+universellem
+universellen
+universeller
+universellere
+universellerem
+universelleren
+universellerer
+universelleres
+universelles
+universellste
+universellstem
+universellsten
+universellster
+universellstes
+universitär
+universitäre
+universitärem
+universitären
+universitärer
+universitäres
+unkenntlich
+unkenntliche
+unkenntlichem
+unkenntlichen
+unkenntlicher
+unkenntliches
+unkeusch
+unkeusche
+unkeuschem
+unkeuschen
+unkeuscher
+unkeuschere
+unkeuscherem
+unkeuscheren
+unkeuscherer
+unkeuscheres
+unkeusches
+unkeuschste
+unkeuschstem
+unkeuschsten
+unkeuschster
+unkeuschstes
+unkindlich
+unkindliche
+unkindlichem
+unkindlichen
+unkindlicher
+unkindlichere
+unkindlicherem
+unkindlicheren
+unkindlicherer
+unkindlicheres
+unkindliches
+unkindlichste
+unkindlichstem
+unkindlichsten
+unkindlichster
+unkindlichstes
+unklar
+unklare
+unklarem
+unklaren
+unklarer
+unklarere
+unklarerem
+unklareren
+unklarerer
+unklareres
+unklares
+unklarste
+unklarstem
+unklarsten
+unklarster
+unklarstes
+unkleidsam
+unkleidsame
+unkleidsamem
+unkleidsamen
+unkleidsamer
+unkleidsamere
+unkleidsamerem
+unkleidsameren
+unkleidsamerer
+unkleidsameres
+unkleidsames
+unkleidsamste
+unkleidsamstem
+unkleidsamsten
+unkleidsamster
+unkleidsamstes
+unklug
+unkluge
+unklugem
+unklugen
+unkluger
+unkluges
+unknackbar
+unknackbare
+unknackbarem
+unknackbaren
+unknackbarer
+unknackbares
+unkollegial
+unkollegiale
+unkollegialem
+unkollegialen
+unkollegialer
+unkollegialere
+unkollegialerem
+unkollegialeren
+unkollegialerer
+unkollegialeres
+unkollegiales
+unkollegialste
+unkollegialstem
+unkollegialsten
+unkollegialster
+unkollegialstes
+unkommentiert
+unkommentierte
+unkommentiertem
+unkommentierten
+unkommentierter
+unkommentiertes
+unkompliziert
+unkomplizierte
+unkompliziertem
+unkomplizierten
+unkomplizierter
+unkompliziertere
+unkomplizierterem
+unkomplizierteren
+unkomplizierterer
+unkomplizierteres
+unkompliziertes
+unkomplizierteste
+unkompliziertestem
+unkompliziertesten
+unkompliziertester
+unkompliziertestes
+unkontrollierbar
+unkontrollierbare
+unkontrollierbarem
+unkontrollierbaren
+unkontrollierbarer
+unkontrollierbares
+unkontrolliert
+unkontrollierte
+unkontrolliertem
+unkontrollierten
+unkontrollierter
+unkontrolliertes
+unkonventionell
+unkonventionelle
+unkonventionellem
+unkonventionellen
+unkonventioneller
+unkonventionelles
+unkorrekt
+unkorrekte
+unkorrektem
+unkorrekten
+unkorrekter
+unkorrektere
+unkorrekterem
+unkorrekteren
+unkorrekterer
+unkorrekteres
+unkorrektes
+unkorrekteste
+unkorrektestem
+unkorrektesten
+unkorrektester
+unkorrektestes
+unkorrigierbar
+unkorrigierbare
+unkorrigierbarem
+unkorrigierbaren
+unkorrigierbarer
+unkorrigierbares
+unkritisch
+unkritische
+unkritischem
+unkritischen
+unkritischer
+unkritischere
+unkritischerem
+unkritischeren
+unkritischerer
+unkritischeres
+unkritisches
+unkritischste
+unkritischstem
+unkritischsten
+unkritischster
+unkritischstes
+unkultiviert
+unkultivierte
+unkultiviertem
+unkultivierten
+unkultivierter
+unkultiviertes
+unkundig
+unkundige
+unkundigem
+unkundigen
+unkundiger
+unkundiges
+unkörperlich
+unkörperliche
+unkörperlichem
+unkörperlichen
+unkörperlicher
+unkörperliches
+unkündbar
+unkündbare
+unkündbarem
+unkündbaren
+unkündbarer
+unkündbares
+unleidlich
+unleidliche
+unleidlichem
+unleidlichen
+unleidlicher
+unleidliches
+unlenksam
+unlenksame
+unlenksamem
+unlenksamen
+unlenksamer
+unlenksames
+unleserlich
+unleserliche
+unleserlichem
+unleserlichen
+unleserlicher
+unleserlichere
+unleserlicherem
+unleserlicheren
+unleserlicherer
+unleserlicheres
+unleserliches
+unleserlichste
+unleserlichstem
+unleserlichsten
+unleserlichster
+unleserlichstes
+unleugbar
+unleugbare
+unleugbarem
+unleugbaren
+unleugbarer
+unleugbares
+unlieb
+unliebe
+unliebem
+unlieben
+unlieber
+unliebere
+unlieberem
+unlieberen
+unlieberer
+unlieberes
+unliebes
+unliebsam
+unliebsame
+unliebsamem
+unliebsamen
+unliebsamer
+unliebsames
+unliebste
+unliebstem
+unliebsten
+unliebster
+unliebstes
+unlimitiert
+unlimitierte
+unlimitiertem
+unlimitierten
+unlimitierter
+unlimitiertes
+unliniert
+unlinierte
+unliniertem
+unlinierten
+unlinierter
+unliniertes
+unliterarisch
+unliterarische
+unliterarischem
+unliterarischen
+unliterarischer
+unliterarisches
+unlogisch
+unlogische
+unlogischem
+unlogischen
+unlogischer
+unlogisches
+unlustig
+unlustige
+unlustigem
+unlustigen
+unlustiger
+unlustigere
+unlustigerem
+unlustigeren
+unlustigerer
+unlustigeres
+unlustiges
+unlustigste
+unlustigstem
+unlustigsten
+unlustigster
+unlustigstes
+unlösbar
+unlösbare
+unlösbarem
+unlösbaren
+unlösbarer
+unlösbarere
+unlösbarerem
+unlösbareren
+unlösbarerer
+unlösbareres
+unlösbares
+unlösbarste
+unlösbarstem
+unlösbarsten
+unlösbarster
+unlösbarstes
+unlöslich
+unlösliche
+unlöslichem
+unlöslichen
+unlöslicher
+unlöslichere
+unlöslicherem
+unlöslicheren
+unlöslicherer
+unlöslicheres
+unlösliches
+unlöslichste
+unlöslichstem
+unlöslichsten
+unlöslichster
+unlöslichstes
+unmanierlich
+unmanierliche
+unmanierlichem
+unmanierlichen
+unmanierlicher
+unmanierliches
+unmarkiert
+unmarkierte
+unmarkiertem
+unmarkierten
+unmarkierter
+unmarkiertes
+unmaskiert
+unmaskierte
+unmaskiertem
+unmaskierten
+unmaskierter
+unmaskiertes
+unmaßgeblich
+unmaßgebliche
+unmaßgeblichem
+unmaßgeblichen
+unmaßgeblicher
+unmaßgebliches
+unmenschlich
+unmenschliche
+unmenschlichem
+unmenschlichen
+unmenschlicher
+unmenschlichere
+unmenschlicherem
+unmenschlicheren
+unmenschlicherer
+unmenschlicheres
+unmenschliches
+unmenschlichste
+unmenschlichstem
+unmenschlichsten
+unmenschlichster
+unmenschlichstes
+unmerklich
+unmerkliche
+unmerklichem
+unmerklichen
+unmerklicher
+unmerkliches
+unmessbar
+unmessbare
+unmessbarem
+unmessbaren
+unmessbarer
+unmessbares
+unmethodisch
+unmethodische
+unmethodischem
+unmethodischen
+unmethodischer
+unmethodischere
+unmethodischerem
+unmethodischeren
+unmethodischerer
+unmethodischeres
+unmethodisches
+unmethodischste
+unmethodischstem
+unmethodischsten
+unmethodischster
+unmethodischstes
+unmilitärisch
+unmilitärische
+unmilitärischem
+unmilitärischen
+unmilitärischer
+unmilitärisches
+unmissverständlich
+unmissverständliche
+unmissverständlichem
+unmissverständlichen
+unmissverständlicher
+unmissverständliches
+unmittelbar
+unmittelbare
+unmittelbarem
+unmittelbaren
+unmittelbarer
+unmittelbares
+unmodern
+unmoderne
+unmodernem
+unmodernen
+unmoderner
+unmodernere
+unmodernerem
+unmoderneren
+unmodernerer
+unmoderneres
+unmodernes
+unmodernste
+unmodernstem
+unmodernsten
+unmodernster
+unmodernstes
+unmodifiziert
+unmodifizierte
+unmodifiziertem
+unmodifizierten
+unmodifizierter
+unmodifiziertes
+unmoralisch
+unmoralische
+unmoralischem
+unmoralischen
+unmoralischer
+unmoralisches
+unmotiviert
+unmotivierte
+unmotiviertem
+unmotivierten
+unmotivierter
+unmotiviertes
+unmusikalisch
+unmusikalische
+unmusikalischem
+unmusikalischen
+unmusikalischer
+unmusikalischere
+unmusikalischerem
+unmusikalischeren
+unmusikalischerer
+unmusikalischeres
+unmusikalisches
+unmusikalischste
+unmusikalischstem
+unmusikalischsten
+unmusikalischster
+unmusikalischstes
+unmutig
+unmutige
+unmutigem
+unmutigen
+unmutiger
+unmutigere
+unmutigerem
+unmutigeren
+unmutigerer
+unmutigeres
+unmutiges
+unmutigste
+unmutigstem
+unmutigsten
+unmutigster
+unmutigstes
+unmännlich
+unmännliche
+unmännlichem
+unmännlichen
+unmännlicher
+unmännlichere
+unmännlicherem
+unmännlicheren
+unmännlicherer
+unmännlicheres
+unmännliches
+unmännlichste
+unmännlichstem
+unmännlichsten
+unmännlichster
+unmännlichstes
+unmäßig
+unmäßige
+unmäßigem
+unmäßigen
+unmäßiger
+unmäßigere
+unmäßigerem
+unmäßigeren
+unmäßigerer
+unmäßigeres
+unmäßiges
+unmäßigste
+unmäßigstem
+unmäßigsten
+unmäßigster
+unmäßigstes
+unmöbliert
+unmöblierte
+unmöbliertem
+unmöblierten
+unmöblierter
+unmöbliertes
+unmöglich
+unmögliche
+unmöglichem
+unmöglichen
+unmöglicher
+unmöglichere
+unmöglicherem
+unmöglicheren
+unmöglicherer
+unmöglicheres
+unmögliches
+unmöglichste
+unmöglichstem
+unmöglichsten
+unmöglichster
+unmöglichstes
+unmündig
+unmündige
+unmündigem
+unmündigen
+unmündiger
+unmündiges
+unnachahmlich
+unnachahmliche
+unnachahmlichem
+unnachahmlichen
+unnachahmlicher
+unnachahmliches
+unnachgiebig
+unnachgiebige
+unnachgiebigem
+unnachgiebigen
+unnachgiebiger
+unnachgiebigere
+unnachgiebigerem
+unnachgiebigeren
+unnachgiebigerer
+unnachgiebigeres
+unnachgiebiges
+unnachgiebigste
+unnachgiebigstem
+unnachgiebigsten
+unnachgiebigster
+unnachgiebigstes
+unnachsichtig
+unnachsichtige
+unnachsichtigem
+unnachsichtigen
+unnachsichtiger
+unnachsichtigere
+unnachsichtigerem
+unnachsichtigeren
+unnachsichtigerer
+unnachsichtigeres
+unnachsichtiges
+unnachsichtigste
+unnachsichtigstem
+unnachsichtigsten
+unnachsichtigster
+unnachsichtigstes
+unnahbar
+unnahbare
+unnahbarem
+unnahbaren
+unnahbarer
+unnahbarere
+unnahbarerem
+unnahbareren
+unnahbarerer
+unnahbareres
+unnahbares
+unnahbarste
+unnahbarstem
+unnahbarsten
+unnahbarster
+unnahbarstes
+unnatürlich
+unnatürliche
+unnatürlichem
+unnatürlichen
+unnatürlicher
+unnatürlichere
+unnatürlicherem
+unnatürlicheren
+unnatürlicherer
+unnatürlicheres
+unnatürliches
+unnatürlichste
+unnatürlichstem
+unnatürlichsten
+unnatürlichster
+unnatürlichstes
+unnennbar
+unnennbare
+unnennbarem
+unnennbaren
+unnennbarer
+unnennbares
+unnötig
+unnötige
+unnötigem
+unnötigen
+unnötiger
+unnötigere
+unnötigerem
+unnötigeren
+unnötigerer
+unnötigeres
+unnötigerweise
+unnötiges
+unnötigste
+unnötigstem
+unnötigsten
+unnötigster
+unnötigstes
+unnütz
+unnütze
+unnützem
+unnützen
+unnützer
+unnützes
+unoptimiert
+unoptimierte
+unoptimiertem
+unoptimierten
+unoptimierter
+unoptimiertes
+unordentlich
+unordentliche
+unordentlichem
+unordentlichen
+unordentlicher
+unordentlichere
+unordentlicherem
+unordentlicheren
+unordentlicherer
+unordentlicheres
+unordentliches
+unordentlichste
+unordentlichstem
+unordentlichsten
+unordentlichster
+unordentlichstes
+unorganisch
+unorganische
+unorganischem
+unorganischen
+unorganischer
+unorganischere
+unorganischerem
+unorganischeren
+unorganischerer
+unorganischeres
+unorganisches
+unorganischste
+unorganischstem
+unorganischsten
+unorganischster
+unorganischstes
+unorthodox
+unorthodoxe
+unorthodoxem
+unorthodoxen
+unorthodoxer
+unorthodoxes
+unpaarig
+unpaarige
+unpaarigem
+unpaarigen
+unpaariger
+unpaariges
+unparteiisch
+unparteiische
+unparteiischem
+unparteiischen
+unparteiischer
+unparteiischere
+unparteiischerem
+unparteiischeren
+unparteiischerer
+unparteiischeres
+unparteiisches
+unparteiischste
+unparteiischstem
+unparteiischsten
+unparteiischster
+unparteiischstes
+unpartitioniert
+unpartitionierte
+unpartitioniertem
+unpartitionierten
+unpartitionierter
+unpartitioniertes
+unpassend
+unpassende
+unpassendem
+unpassenden
+unpassender
+unpassendere
+unpassenderem
+unpassenderen
+unpassenderer
+unpassenderes
+unpassendes
+unpassendste
+unpassendstem
+unpassendsten
+unpassendster
+unpassendstes
+unpassierbar
+unpassierbare
+unpassierbarem
+unpassierbaren
+unpassierbarer
+unpassierbares
+unpatriotisch
+unpatriotische
+unpatriotischem
+unpatriotischen
+unpatriotischer
+unpatriotischere
+unpatriotischerem
+unpatriotischeren
+unpatriotischerer
+unpatriotischeres
+unpatriotisches
+unpatriotischste
+unpatriotischstem
+unpatriotischsten
+unpatriotischster
+unpatriotischstes
+unpersönlich
+unpersönliche
+unpersönlichem
+unpersönlichen
+unpersönlicher
+unpersönlichere
+unpersönlicherem
+unpersönlicheren
+unpersönlicherer
+unpersönlicheres
+unpersönliches
+unpersönlichste
+unpersönlichstem
+unpersönlichsten
+unpersönlichster
+unpersönlichstes
+unpfändbar
+unpfändbare
+unpfändbarem
+unpfändbaren
+unpfändbarer
+unpfändbares
+unphysikalisch
+unphysikalische
+unphysikalischem
+unphysikalischen
+unphysikalischer
+unphysikalisches
+unplatziert
+unplatzierte
+unplatziertem
+unplatzierten
+unplatzierter
+unplatziertes
+unpolitisch
+unpolitische
+unpolitischem
+unpolitischen
+unpolitischer
+unpolitisches
+unpopulär
+unpopuläre
+unpopulärem
+unpopulären
+unpopulärer
+unpopulärere
+unpopulärerem
+unpopuläreren
+unpopulärerer
+unpopuläreres
+unpopuläres
+unpopulärste
+unpopulärstem
+unpopulärsten
+unpopulärster
+unpopulärstes
+unpraktikabel
+unpraktikabelste
+unpraktikabelstem
+unpraktikabelsten
+unpraktikabelster
+unpraktikabelstes
+unpraktikable
+unpraktikablem
+unpraktikablen
+unpraktikabler
+unpraktikablere
+unpraktikablerem
+unpraktikableren
+unpraktikablerer
+unpraktikableres
+unpraktikables
+unpraktisch
+unpraktische
+unpraktischem
+unpraktischen
+unpraktischer
+unpraktischere
+unpraktischerem
+unpraktischeren
+unpraktischerer
+unpraktischeres
+unpraktisches
+unpraktischste
+unpraktischstem
+unpraktischsten
+unpraktischster
+unpraktischstes
+unproblematisch
+unproblematische
+unproblematischem
+unproblematischen
+unproblematischer
+unproblematischere
+unproblematischerem
+unproblematischeren
+unproblematischerer
+unproblematischeres
+unproblematisches
+unproblematischste
+unproblematischstem
+unproblematischsten
+unproblematischster
+unproblematischstes
+unproduktiv
+unproduktive
+unproduktivem
+unproduktiven
+unproduktiver
+unproduktivere
+unproduktiverem
+unproduktiveren
+unproduktiverer
+unproduktiveres
+unproduktives
+unproduktivste
+unproduktivstem
+unproduktivsten
+unproduktivster
+unproduktivstes
+unprofessionell
+unprofessionelle
+unprofessionellem
+unprofessionellen
+unprofessioneller
+unprofessionelles
+unpräzise
+unpräzisem
+unpräzisen
+unpräziser
+unpräzises
+unpädagogisch
+unpädagogische
+unpädagogischem
+unpädagogischen
+unpädagogischer
+unpädagogisches
+unpässlich
+unpässliche
+unpässlichem
+unpässlichen
+unpässlicher
+unpässliches
+unpünktlich
+unpünktliche
+unpünktlichem
+unpünktlichen
+unpünktlicher
+unpünktlichere
+unpünktlicherem
+unpünktlicheren
+unpünktlicherer
+unpünktlicheres
+unpünktliches
+unpünktlichste
+unpünktlichstem
+unpünktlichsten
+unpünktlichster
+unpünktlichstes
+unqualifizierbar
+unqualifizierbare
+unqualifizierbarem
+unqualifizierbaren
+unqualifizierbarer
+unqualifizierbares
+unqualifiziert
+unqualifizierte
+unqualifiziertem
+unqualifizierten
+unqualifizierter
+unqualifiziertere
+unqualifizierterem
+unqualifizierteren
+unqualifizierterer
+unqualifizierteres
+unqualifiziertes
+unqualifizierteste
+unqualifiziertestem
+unqualifiziertesten
+unqualifiziertester
+unqualifiziertestes
+unquantifizierbar
+unquantifizierbare
+unquantifizierbarem
+unquantifizierbaren
+unquantifizierbarer
+unquantifizierbares
+unquittiert
+unquittierte
+unquittiertem
+unquittierten
+unquittierter
+unquittiertes
+unrasiert
+unrasierte
+unrasiertem
+unrasierten
+unrasierter
+unrasiertes
+unrationell
+unrationelle
+unrationellem
+unrationellen
+unrationeller
+unrationellere
+unrationellerem
+unrationelleren
+unrationellerer
+unrationelleres
+unrationelles
+unrationellste
+unrationellstem
+unrationellsten
+unrationellster
+unrationellstes
+unratsam
+unratsame
+unratsamem
+unratsamen
+unratsamer
+unratsames
+unrealistisch
+unrealistische
+unrealistischem
+unrealistischen
+unrealistischer
+unrealistischere
+unrealistischerem
+unrealistischeren
+unrealistischerer
+unrealistischeres
+unrealistisches
+unrealistischste
+unrealistischstem
+unrealistischsten
+unrealistischster
+unrealistischstes
+unrechtlich
+unrechtliche
+unrechtlichem
+unrechtlichen
+unrechtlicher
+unrechtliches
+unrechtmäßig
+unrechtmäßige
+unrechtmäßigem
+unrechtmäßigen
+unrechtmäßiger
+unrechtmäßiges
+unredlich
+unredliche
+unredlichem
+unredlichen
+unredlicher
+unredlichere
+unredlicherem
+unredlicheren
+unredlicherer
+unredlicheres
+unredliches
+unredlichste
+unredlichstem
+unredlichsten
+unredlichster
+unredlichstes
+unreell
+unreelle
+unreellem
+unreellen
+unreeller
+unreellere
+unreellerem
+unreelleren
+unreellerer
+unreelleres
+unreelles
+unreellste
+unreellstem
+unreellsten
+unreellster
+unreellstes
+unreflektiert
+unreflektierte
+unreflektiertem
+unreflektierten
+unreflektierter
+unreflektiertes
+unregelmäßig
+unregelmäßige
+unregelmäßigem
+unregelmäßigen
+unregelmäßiger
+unregelmäßigere
+unregelmäßigerem
+unregelmäßigeren
+unregelmäßigerer
+unregelmäßigeres
+unregelmäßiges
+unregelmäßigste
+unregelmäßigstem
+unregelmäßigsten
+unregelmäßigster
+unregelmäßigstes
+unreif
+unreife
+unreifem
+unreifen
+unreifer
+unreifere
+unreiferem
+unreiferen
+unreiferer
+unreiferes
+unreifes
+unreifste
+unreifstem
+unreifsten
+unreifster
+unreifstes
+unrein
+unreine
+unreinem
+unreinen
+unreiner
+unreinere
+unreinerem
+unreineren
+unreinerer
+unreineres
+unreines
+unreinlich
+unreinliche
+unreinlichem
+unreinlichen
+unreinlicher
+unreinlichere
+unreinlicherem
+unreinlicheren
+unreinlicherer
+unreinlicheres
+unreinliches
+unreinlichste
+unreinlichstem
+unreinlichsten
+unreinlichster
+unreinlichstes
+unreinste
+unreinstem
+unreinsten
+unreinster
+unreinstes
+unrentabel
+unrentabelste
+unrentabelstem
+unrentabelsten
+unrentabelster
+unrentabelstes
+unrentable
+unrentablem
+unrentablen
+unrentabler
+unrentablere
+unrentablerem
+unrentableren
+unrentablerer
+unrentableres
+unrentables
+unreparierbar
+unreparierbare
+unreparierbarem
+unreparierbaren
+unreparierbarer
+unreparierbares
+unretouchiert
+unretouchierte
+unretouchiertem
+unretouchierten
+unretouchierter
+unretouchiertes
+unrettbar
+unrettbare
+unrettbarem
+unrettbaren
+unrettbarer
+unrettbarere
+unrettbarerem
+unrettbareren
+unrettbarerer
+unrettbareres
+unrettbares
+unrettbarste
+unrettbarstem
+unrettbarsten
+unrettbarster
+unrettbarstes
+unrichtig
+unrichtige
+unrichtigem
+unrichtigen
+unrichtiger
+unrichtigere
+unrichtigerem
+unrichtigeren
+unrichtigerer
+unrichtigeres
+unrichtiges
+unrichtigste
+unrichtigstem
+unrichtigsten
+unrichtigster
+unrichtigstes
+unritterlich
+unritterliche
+unritterlichem
+unritterlichen
+unritterlicher
+unritterliches
+unromantisch
+unromantische
+unromantischem
+unromantischen
+unromantischer
+unromantischere
+unromantischerem
+unromantischeren
+unromantischerer
+unromantischeres
+unromantisches
+unromantischste
+unromantischstem
+unromantischsten
+unromantischster
+unromantischstes
+unruhig
+unruhige
+unruhigem
+unruhigen
+unruhiger
+unruhigere
+unruhigerem
+unruhigeren
+unruhigerer
+unruhigeres
+unruhiges
+unruhigste
+unruhigstem
+unruhigsten
+unruhigster
+unruhigstes
+unrühmlich
+unrühmliche
+unrühmlichem
+unrühmlichen
+unrühmlicher
+unrühmlichere
+unrühmlicherem
+unrühmlicheren
+unrühmlicherer
+unrühmlicheres
+unrühmliches
+unrühmlichste
+unrühmlichstem
+unrühmlichsten
+unrühmlichster
+unrühmlichstes
+uns
+unsachgemäß
+unsachgemäße
+unsachgemäßem
+unsachgemäßen
+unsachgemäßer
+unsachgemäßere
+unsachgemäßerem
+unsachgemäßeren
+unsachgemäßerer
+unsachgemäßeres
+unsachgemäßes
+unsachgemäßeste
+unsachgemäßestem
+unsachgemäßesten
+unsachgemäßester
+unsachgemäßestes
+unsachlich
+unsachliche
+unsachlichem
+unsachlichen
+unsachlicher
+unsachlichere
+unsachlicherem
+unsachlicheren
+unsachlicherer
+unsachlicheres
+unsachliches
+unsachlichste
+unsachlichstem
+unsachlichsten
+unsachlichster
+unsachlichstes
+unsagbar
+unsagbare
+unsagbarem
+unsagbaren
+unsagbarer
+unsagbarere
+unsagbarerem
+unsagbareren
+unsagbarerer
+unsagbareres
+unsagbares
+unsagbarste
+unsagbarstem
+unsagbarsten
+unsagbarster
+unsagbarstes
+unsanft
+unsanfte
+unsanftem
+unsanften
+unsanfter
+unsanftere
+unsanfterem
+unsanfteren
+unsanfterer
+unsanfteres
+unsanftes
+unsanfteste
+unsanftestem
+unsanftesten
+unsanftester
+unsanftestes
+unsauber
+unsaubere
+unsauberem
+unsauberen
+unsauberer
+unsauberere
+unsaubererem
+unsaubereren
+unsaubererer
+unsaubereres
+unsauberes
+unsauberste
+unsauberstem
+unsaubersten
+unsauberster
+unsauberstes
+unscharf
+unscharfe
+unscharfem
+unscharfen
+unscharfer
+unscharfes
+unscheinbar
+unscheinbare
+unscheinbarem
+unscheinbaren
+unscheinbarer
+unscheinbarere
+unscheinbarerem
+unscheinbareren
+unscheinbarerer
+unscheinbareres
+unscheinbares
+unscheinbarste
+unscheinbarstem
+unscheinbarsten
+unscheinbarster
+unscheinbarstes
+unschicklich
+unschickliche
+unschicklichem
+unschicklichen
+unschicklicher
+unschicklichere
+unschicklicherem
+unschicklicheren
+unschicklicherer
+unschicklicheres
+unschickliches
+unschicklichste
+unschicklichstem
+unschicklichsten
+unschicklichster
+unschicklichstes
+unschlagbar
+unschlagbare
+unschlagbarem
+unschlagbaren
+unschlagbarer
+unschlagbarere
+unschlagbarerem
+unschlagbareren
+unschlagbarerer
+unschlagbareres
+unschlagbares
+unschlagbarste
+unschlagbarstem
+unschlagbarsten
+unschlagbarster
+unschlagbarstes
+unschlüssig
+unschlüssige
+unschlüssigem
+unschlüssigen
+unschlüssiger
+unschlüssigere
+unschlüssigerem
+unschlüssigeren
+unschlüssigerer
+unschlüssigeres
+unschlüssiges
+unschlüssigste
+unschlüssigstem
+unschlüssigsten
+unschlüssigster
+unschlüssigstes
+unschmackhaft
+unschmackhafte
+unschmackhaftem
+unschmackhaften
+unschmackhafter
+unschmackhaftere
+unschmackhafterem
+unschmackhafteren
+unschmackhafterer
+unschmackhafteres
+unschmackhaftes
+unschmackhafteste
+unschmackhaftestem
+unschmackhaftesten
+unschmackhaftester
+unschmackhaftestes
+unschuldig
+unschuldige
+unschuldigem
+unschuldigen
+unschuldiger
+unschuldigere
+unschuldigerem
+unschuldigeren
+unschuldigerer
+unschuldigeres
+unschuldiges
+unschuldigste
+unschuldigstem
+unschuldigsten
+unschuldigster
+unschuldigstes
+unschwer
+unschwere
+unschwerem
+unschweren
+unschwerer
+unschwerere
+unschwererem
+unschwereren
+unschwererer
+unschwereres
+unschweres
+unschwerste
+unschwerstem
+unschwersten
+unschwerster
+unschwerstes
+unschädlich
+unschädliche
+unschädlichem
+unschädlichen
+unschädlicher
+unschädliches
+unschärfer
+unschärfere
+unschärferem
+unschärferen
+unschärferer
+unschärferes
+unschärfste
+unschärfstem
+unschärfsten
+unschärfster
+unschärfstes
+unschätzbar
+unschätzbare
+unschätzbarem
+unschätzbaren
+unschätzbarer
+unschätzbarere
+unschätzbarerem
+unschätzbareren
+unschätzbarerer
+unschätzbareres
+unschätzbares
+unschätzbarste
+unschätzbarstem
+unschätzbarsten
+unschätzbarster
+unschätzbarstes
+unschön
+unschöne
+unschönem
+unschönen
+unschöner
+unschönere
+unschönerem
+unschöneren
+unschönerer
+unschöneres
+unschönes
+unschönste
+unschönstem
+unschönsten
+unschönster
+unschönstes
+unselbstständig
+unselbstständige
+unselbstständigem
+unselbstständigen
+unselbstständiger
+unselbstständigere
+unselbstständigerem
+unselbstständigeren
+unselbstständigerer
+unselbstständigeres
+unselbstständiges
+unselbstständigste
+unselbstständigstem
+unselbstständigsten
+unselbstständigster
+unselbstständigstes
+unselbständig
+unselbständige
+unselbständigem
+unselbständigen
+unselbständiger
+unselbständigere
+unselbständigerem
+unselbständigeren
+unselbständigerer
+unselbständigeres
+unselbständiges
+unselbständigste
+unselbständigstem
+unselbständigsten
+unselbständigster
+unselbständigstes
+unselig
+unselige
+unseligem
+unseligen
+unseliger
+unseligere
+unseligerem
+unseligeren
+unseligerer
+unseligeres
+unseliges
+unseligste
+unseligstem
+unseligsten
+unseligster
+unseligstes
+unser
+unsere
+unsereiner
+unsereins
+unserem
+unseren
+unserer
+unsererseits
+unseres
+unseresgleichen
+unserseits
+unsersgleichen
+unserthalben
+unsertwegen
+unsicher
+unsichere
+unsicherem
+unsicheren
+unsicherer
+unsicherere
+unsichererem
+unsichereren
+unsichererer
+unsichereres
+unsicheres
+unsicherste
+unsicherstem
+unsichersten
+unsicherster
+unsicherstes
+unsichtbar
+unsichtbare
+unsichtbarem
+unsichtbaren
+unsichtbarer
+unsichtbarere
+unsichtbarerem
+unsichtbareren
+unsichtbarerer
+unsichtbareres
+unsichtbares
+unsichtbarste
+unsichtbarstem
+unsichtbarsten
+unsichtbarster
+unsichtbarstes
+unsinkbar
+unsinkbare
+unsinkbarem
+unsinkbaren
+unsinkbarer
+unsinkbares
+unsinnig
+unsinnige
+unsinnigem
+unsinnigen
+unsinniger
+unsinnigere
+unsinnigerem
+unsinnigeren
+unsinnigerer
+unsinnigeres
+unsinniges
+unsinnigste
+unsinnigstem
+unsinnigsten
+unsinnigster
+unsinnigstes
+unsittlich
+unsittliche
+unsittlichem
+unsittlichen
+unsittlicher
+unsittlichere
+unsittlicherem
+unsittlicheren
+unsittlicherer
+unsittlicheres
+unsittliches
+unsittlichste
+unsittlichstem
+unsittlichsten
+unsittlichster
+unsittlichstes
+unskaliert
+unskalierte
+unskaliertem
+unskalierten
+unskalierter
+unskaliertes
+unsolide
+unsolidem
+unsoliden
+unsolider
+unsolidere
+unsoliderem
+unsolideren
+unsoliderer
+unsolideres
+unsolides
+unsolideste
+unsolidestem
+unsolidesten
+unsolidester
+unsolidestes
+unsouverän
+unsouveräne
+unsouveränem
+unsouveränen
+unsouveräner
+unsouveränes
+unsozial
+unsoziale
+unsozialem
+unsozialen
+unsozialer
+unsozialere
+unsozialerem
+unsozialeren
+unsozialerer
+unsozialeres
+unsoziales
+unsozialste
+unsozialstem
+unsozialsten
+unsozialster
+unsozialstes
+unspezifiziert
+unspezifizierte
+unspezifiziertem
+unspezifizierten
+unspezifizierter
+unspezifiziertes
+unsportlich
+unsportliche
+unsportlichem
+unsportlichen
+unsportlicher
+unsportlichere
+unsportlicherem
+unsportlicheren
+unsportlicherer
+unsportlicheres
+unsportliches
+unsportlichste
+unsportlichstem
+unsportlichsten
+unsportlichster
+unsportlichstes
+unsresgleichen
+unsrig
+unsrige
+unsrigem
+unsrigen
+unsriger
+unsriges
+unstarr
+unstarre
+unstarrem
+unstarren
+unstarrer
+unstarrere
+unstarrerem
+unstarreren
+unstarrerer
+unstarreres
+unstarres
+unstarrste
+unstarrstem
+unstarrsten
+unstarrster
+unstarrstes
+unstatthaft
+unstatthafte
+unstatthaftem
+unstatthaften
+unstatthafter
+unstatthaftes
+unsterblich
+unsterbliche
+unsterblichem
+unsterblichen
+unsterblicher
+unsterbliches
+unstet
+unstete
+unstetem
+unsteten
+unsteter
+unstetes
+unsteteste
+unstetestem
+unstetesten
+unstetester
+unstetestes
+unstillbar
+unstillbare
+unstillbarem
+unstillbaren
+unstillbarer
+unstillbarere
+unstillbarerem
+unstillbareren
+unstillbarerer
+unstillbareres
+unstillbares
+unstillbarste
+unstillbarstem
+unstillbarsten
+unstillbarster
+unstillbarstes
+unstimmig
+unstimmige
+unstimmigem
+unstimmigen
+unstimmiger
+unstimmiges
+unstreitig
+unstreitige
+unstreitigem
+unstreitigen
+unstreitiger
+unstreitigere
+unstreitigerem
+unstreitigeren
+unstreitigerer
+unstreitigeres
+unstreitiges
+unstreitigste
+unstreitigstem
+unstreitigsten
+unstreitigster
+unstreitigstes
+unstrittig
+unstrittige
+unstrittigem
+unstrittigen
+unstrittiger
+unstrittiges
+unsymmetrisch
+unsymmetrische
+unsymmetrischem
+unsymmetrischen
+unsymmetrischer
+unsymmetrischere
+unsymmetrischerem
+unsymmetrischeren
+unsymmetrischerer
+unsymmetrischeres
+unsymmetrisches
+unsymmetrischste
+unsymmetrischstem
+unsymmetrischsten
+unsymmetrischster
+unsymmetrischstes
+unsympathisch
+unsympathische
+unsympathischem
+unsympathischen
+unsympathischer
+unsympathischere
+unsympathischerem
+unsympathischeren
+unsympathischerer
+unsympathischeres
+unsympathisches
+unsympathischste
+unsympathischstem
+unsympathischsten
+unsympathischster
+unsympathischstes
+unsäglich
+unsägliche
+unsäglichem
+unsäglichen
+unsäglicher
+unsäglichere
+unsäglicherem
+unsäglicheren
+unsäglicherer
+unsäglicheres
+unsägliches
+unsäglichste
+unsäglichstem
+unsäglichsten
+unsäglichster
+unsäglichstes
+untadelhaft
+untadelhafte
+untadelhaftem
+untadelhaften
+untadelhafter
+untadelhaftere
+untadelhafterem
+untadelhafteren
+untadelhafterer
+untadelhafteres
+untadelhaftes
+untadelhafteste
+untadelhaftestem
+untadelhaftesten
+untadelhaftester
+untadelhaftestes
+untadelig
+untadelige
+untadeligem
+untadeligen
+untadeliger
+untadeligere
+untadeligerem
+untadeligeren
+untadeligerer
+untadeligeres
+untadeliges
+untadeligste
+untadeligstem
+untadeligsten
+untadeligster
+untadeligstes
+untadlig
+untadlige
+untadligem
+untadligen
+untadliger
+untadligere
+untadligerem
+untadligeren
+untadligerer
+untadligeres
+untadliges
+untadligste
+untadligstem
+untadligsten
+untadligster
+untadligstes
+untauglich
+untaugliche
+untauglichem
+untauglichen
+untauglicher
+untauglichere
+untauglicherem
+untauglicheren
+untauglicherer
+untauglicheres
+untaugliches
+untauglichste
+untauglichstem
+untauglichsten
+untauglichster
+untauglichstes
+unteilbar
+unteilbare
+unteilbarem
+unteilbaren
+unteilbarer
+unteilbarere
+unteilbarerem
+unteilbareren
+unteilbarerer
+unteilbareres
+unteilbares
+unteilbarste
+unteilbarstem
+unteilbarsten
+unteilbarster
+unteilbarstes
+unten
+unter
+unterband
+unterbanden
+unterbandest
+unterbandet
+unterbandst
+unterbaut
+unterbaute
+unterbautem
+unterbauten
+unterbauter
+unterbautes
+unterbelichte
+unterbelichten
+unterbelichtend
+unterbelichtende
+unterbelichtendem
+unterbelichtenden
+unterbelichtender
+unterbelichtendes
+unterbelichtest
+unterbelichtet
+unterbelichtete
+unterbelichtetem
+unterbelichteten
+unterbelichteter
+unterbelichtetes
+unterbelichtetest
+unterbelichtetet
+unterbeschäftigt
+unterbeschäftigte
+unterbeschäftigtem
+unterbeschäftigten
+unterbeschäftigter
+unterbeschäftigtes
+unterbesetzt
+unterbesetzte
+unterbesetztem
+unterbesetzten
+unterbesetzter
+unterbesetztes
+unterbewertet
+unterbewertete
+unterbewertetem
+unterbewerteten
+unterbewerteter
+unterbewertetes
+unterbewusst
+unterbewusste
+unterbewusstem
+unterbewussten
+unterbewusster
+unterbewusstere
+unterbewussterem
+unterbewussteren
+unterbewussterer
+unterbewussteres
+unterbewusstes
+unterbewussteste
+unterbewusstestem
+unterbewusstesten
+unterbewusstester
+unterbewusstestes
+unterbiete
+unterbieten
+unterbietend
+unterbietende
+unterbietendem
+unterbietenden
+unterbietender
+unterbietendes
+unterbietest
+unterbietet
+unterbinde
+unterbinden
+unterbindend
+unterbindende
+unterbindendem
+unterbindenden
+unterbindender
+unterbindendes
+unterbindest
+unterbindet
+unterbleibe
+unterbleiben
+unterbleibend
+unterbleibende
+unterbleibendem
+unterbleibenden
+unterbleibender
+unterbleibendes
+unterbleibst
+unterbleibt
+unterblieb
+unterblieben
+unterbliebst
+unterbliebt
+unterbot
+unterboten
+unterbotene
+unterbotenem
+unterbotenen
+unterbotener
+unterbotenes
+unterbotest
+unterbotet
+unterbrach
+unterbrachen
+unterbrachest
+unterbrachst
+unterbracht
+unterbrechbar
+unterbrechbare
+unterbrechbarem
+unterbrechbaren
+unterbrechbarer
+unterbrechbares
+unterbreche
+unterbrechen
+unterbrechend
+unterbrechende
+unterbrechendem
+unterbrechenden
+unterbrechender
+unterbrechendes
+unterbrecht
+unterbrechungsfrei
+unterbrechungsfreie
+unterbrechungsfreiem
+unterbrechungsfreien
+unterbrechungsfreier
+unterbrechungsfreies
+unterbrechungsgesteuert
+unterbrechungsgesteuerte
+unterbrechungsgesteuertem
+unterbrechungsgesteuerten
+unterbrechungsgesteuerter
+unterbrechungsgesteuertes
+unterbreite
+unterbreiten
+unterbreitend
+unterbreitende
+unterbreitendem
+unterbreitenden
+unterbreitender
+unterbreitendes
+unterbreitest
+unterbreitet
+unterbreitete
+unterbreitetem
+unterbreiteten
+unterbreiteter
+unterbreitetes
+unterbreitetest
+unterbreitetet
+unterbrichst
+unterbricht
+unterbringe
+unterbringen
+unterbringend
+unterbringende
+unterbringendem
+unterbringenden
+unterbringender
+unterbringendes
+unterbringst
+unterbringt
+unterbrochen
+unterbrochene
+unterbrochenem
+unterbrochenen
+unterbrochener
+unterbrochenes
+unterbunden
+unterbundene
+unterbundenem
+unterbundenen
+unterbundener
+unterbundenes
+unterdessen
+unterdrücke
+unterdrücken
+unterdrückend
+unterdrückende
+unterdrückendem
+unterdrückenden
+unterdrückender
+unterdrückendes
+unterdrückst
+unterdrückt
+unterdrückte
+unterdrücktem
+unterdrückten
+unterdrückter
+unterdrücktes
+unterdrücktest
+unterdrücktet
+unterdurchschnittlich
+unterdurchschnittliche
+unterdurchschnittlichem
+unterdurchschnittlichen
+unterdurchschnittlicher
+unterdurchschnittliches
+untere
+untereinander
+unterem
+unteren
+unterentwickelt
+unterentwickelte
+unterentwickeltem
+unterentwickelten
+unterentwickelter
+unterentwickeltere
+unterentwickelterem
+unterentwickelteren
+unterentwickelterer
+unterentwickelteres
+unterentwickeltes
+unterentwickelteste
+unterentwickeltestem
+unterentwickeltesten
+unterentwickeltester
+unterentwickeltestes
+unterer
+unterere
+untererem
+untereren
+untererer
+untereres
+unterernährt
+unterernährte
+unterernährtem
+unterernährten
+unterernährter
+unterernährtere
+unterernährterem
+unterernährteren
+unterernährterer
+unterernährteres
+unterernährtes
+unterernährteste
+unterernährtestem
+unterernährtesten
+unterernährtester
+unterernährtestes
+unteres
+unterfange
+unterfangen
+unterfangend
+unterfangende
+unterfangendem
+unterfangenden
+unterfangender
+unterfangendes
+unterfangene
+unterfangenem
+unterfangenen
+unterfangener
+unterfangenes
+unterfangt
+unterfertige
+unterfertigen
+unterfertigend
+unterfertigende
+unterfertigendem
+unterfertigenden
+unterfertigender
+unterfertigendes
+unterfertigst
+unterfertigt
+unterfertigte
+unterfertigtem
+unterfertigten
+unterfertigter
+unterfertigtes
+unterfertigtest
+unterfertigtet
+unterfing
+unterfingen
+unterfingst
+unterfingt
+unterfängst
+unterfängt
+untergeben
+untergebene
+untergebenem
+untergebenen
+untergebener
+untergebenere
+untergebenerem
+untergebeneren
+untergebenerer
+untergebeneres
+untergebenes
+untergebenste
+untergebenstem
+untergebensten
+untergebenster
+untergebenstes
+untergebracht
+untergebrachte
+untergebrachtem
+untergebrachten
+untergebrachter
+untergebrachtes
+untergegangen
+untergegangene
+untergegangenem
+untergegangenen
+untergegangener
+untergegangenes
+untergegliedert
+untergegliederte
+untergegliedertem
+untergegliederten
+untergegliederter
+untergegliedertes
+untergehe
+untergehen
+untergehend
+untergehende
+untergehendem
+untergehenden
+untergehender
+untergehendes
+untergehst
+untergeht
+untergejubelt
+untergejubelte
+untergejubeltem
+untergejubelten
+untergejubelter
+untergejubeltes
+untergekommen
+untergekommene
+untergekommenem
+untergekommenen
+untergekommener
+untergekommenes
+untergekriegt
+untergekriegte
+untergekriegtem
+untergekriegten
+untergekriegter
+untergekriegtes
+untergeordnet
+untergeordnete
+untergeordnetem
+untergeordneten
+untergeordneter
+untergeordnetere
+untergeordneterem
+untergeordneteren
+untergeordneterer
+untergeordneteres
+untergeordnetes
+untergeordnetste
+untergeordnetstem
+untergeordnetsten
+untergeordnetster
+untergeordnetstes
+untergetaucht
+untergetauchte
+untergetauchtem
+untergetauchten
+untergetauchter
+untergetauchtes
+unterging
+untergingen
+untergingst
+untergingt
+untergliedere
+untergliedern
+untergliedernd
+untergliedernde
+untergliederndem
+untergliedernden
+untergliedernder
+untergliederndes
+untergliederst
+untergliedert
+untergliederte
+untergliedertem
+untergliederten
+untergliederter
+untergliedertes
+untergliedertest
+untergliedertet
+untergliedre
+untergrabe
+untergraben
+untergrabend
+untergrabende
+untergrabendem
+untergrabenden
+untergrabender
+untergrabendes
+untergrabene
+untergrabenem
+untergrabenen
+untergrabener
+untergrabenes
+untergrabt
+untergrub
+untergruben
+untergrubst
+untergrubt
+untergräbst
+untergräbt
+untergründig
+untergründige
+untergründigem
+untergründigen
+untergründiger
+untergründiges
+unterhalb
+unterhalte
+unterhalten
+unterhaltend
+unterhaltende
+unterhaltendem
+unterhaltenden
+unterhaltender
+unterhaltendes
+unterhaltene
+unterhaltenem
+unterhaltenen
+unterhaltener
+unterhaltenes
+unterhaltet
+unterhaltsam
+unterhaltsame
+unterhaltsamem
+unterhaltsamen
+unterhaltsamer
+unterhaltsamere
+unterhaltsamerem
+unterhaltsameren
+unterhaltsamerer
+unterhaltsameres
+unterhaltsames
+unterhaltsamste
+unterhaltsamstem
+unterhaltsamsten
+unterhaltsamster
+unterhaltsamstes
+unterhandele
+unterhandeln
+unterhandelnd
+unterhandelnde
+unterhandelndem
+unterhandelnden
+unterhandelnder
+unterhandelndes
+unterhandelst
+unterhandelt
+unterhandelte
+unterhandeltem
+unterhandelten
+unterhandelter
+unterhandeltes
+unterhandeltest
+unterhandeltet
+unterhandle
+unterhebele
+unterhebeln
+unterhebelnd
+unterhebelnde
+unterhebelndem
+unterhebelnden
+unterhebelnder
+unterhebelndes
+unterhebelst
+unterhebelt
+unterhebelte
+unterhebelten
+unterhebeltest
+unterhebeltet
+unterheble
+unterhielt
+unterhielten
+unterhieltest
+unterhieltet
+unterhieltst
+unterhält
+unterhältst
+unterhöhle
+unterhöhlen
+unterhöhlend
+unterhöhlende
+unterhöhlendem
+unterhöhlenden
+unterhöhlender
+unterhöhlendes
+unterhöhlst
+unterhöhlt
+unterhöhlte
+unterhöhltem
+unterhöhlten
+unterhöhlter
+unterhöhltes
+unterhöhltest
+unterhöhltet
+unterirdisch
+unterirdische
+unterirdischem
+unterirdischen
+unterirdischer
+unterirdisches
+unterjoche
+unterjochen
+unterjochend
+unterjochende
+unterjochendem
+unterjochenden
+unterjochender
+unterjochendes
+unterjochst
+unterjocht
+unterjochte
+unterjochtem
+unterjochten
+unterjochter
+unterjochtes
+unterjochtest
+unterjochtet
+unterkellere
+unterkellern
+unterkellernd
+unterkellernde
+unterkellerndem
+unterkellernden
+unterkellernder
+unterkellerndes
+unterkellerst
+unterkellert
+unterkellerte
+unterkellertem
+unterkellerten
+unterkellerter
+unterkellertes
+unterkellertest
+unterkellertet
+unterkellre
+unterkriege
+unterkriegen
+unterkriegend
+unterkriegende
+unterkriegendem
+unterkriegenden
+unterkriegender
+unterkriegendes
+unterkriegst
+unterkriegt
+unterkriegte
+unterkriegten
+unterkriegtest
+unterkriegtet
+unterlag
+unterlagen
+unterlagst
+unterlagt
+unterlasse
+unterlassen
+unterlassend
+unterlassende
+unterlassendem
+unterlassenden
+unterlassender
+unterlassendes
+unterlassene
+unterlassenem
+unterlassenen
+unterlassener
+unterlassenes
+unterlasst
+unterlaufe
+unterlaufen
+unterlaufend
+unterlaufende
+unterlaufendem
+unterlaufenden
+unterlaufender
+unterlaufendes
+unterlaufene
+unterlaufenem
+unterlaufenen
+unterlaufener
+unterlaufenes
+unterlauft
+unterlege
+unterlegen
+unterlegend
+unterlegende
+unterlegendem
+unterlegenden
+unterlegender
+unterlegendes
+unterlegene
+unterlegenem
+unterlegenen
+unterlegener
+unterlegenes
+unterlegst
+unterlegt
+unterlegte
+unterlegtem
+unterlegten
+unterlegter
+unterlegtes
+unterlegtest
+unterlegtet
+unterlief
+unterliefen
+unterliefest
+unterliefst
+unterlieft
+unterliege
+unterliegen
+unterliegend
+unterliegende
+unterliegendem
+unterliegenden
+unterliegender
+unterliegendes
+unterliegst
+unterliegt
+unterließ
+unterließen
+unterließest
+unterließt
+unterlässt
+unterm
+untermale
+untermalen
+untermalend
+untermalende
+untermalendem
+untermalenden
+untermalender
+untermalendes
+untermalst
+untermalt
+untermalte
+untermalten
+untermaltest
+untermaltet
+untermauere
+untermauern
+untermauernd
+untermauernde
+untermauerndem
+untermauernden
+untermauernder
+untermauerndes
+untermauerst
+untermauert
+untermauerte
+untermauertem
+untermauerten
+untermauerter
+untermauertes
+untermauertest
+untermauertet
+untermaure
+unterminiere
+unterminieren
+unterminierend
+unterminierende
+unterminierendem
+unterminierenden
+unterminierender
+unterminierendes
+unterminierst
+unterminiert
+unterminierte
+unterminiertem
+unterminierten
+unterminierter
+unterminiertes
+unterminiertest
+unterminiertet
+unternahm
+unternahmen
+unternahmst
+unternahmt
+unternehme
+unternehmen
+unternehmend
+unternehmende
+unternehmendem
+unternehmenden
+unternehmender
+unternehmendes
+unternehmerisch
+unternehmerische
+unternehmerischem
+unternehmerischen
+unternehmerischer
+unternehmerisches
+unternehmt
+unternehmungslustig
+unternehmungslustige
+unternehmungslustigem
+unternehmungslustigen
+unternehmungslustiger
+unternehmungslustiges
+unternimmst
+unternimmt
+unternommen
+unternommene
+unternommenem
+unternommenen
+unternommener
+unternommenes
+unternähme
+unternähmen
+unternähmest
+unternähmet
+unterordne
+unterordnen
+unterordnend
+unterordnende
+unterordnendem
+unterordnenden
+unterordnender
+unterordnendes
+unterordnest
+unterordnet
+unterordnete
+unterordneten
+unterordnetest
+unterordnetet
+unterprivilegiert
+unterprivilegierte
+unterprivilegiertem
+unterprivilegierten
+unterprivilegierter
+unterprivilegiertes
+unterrede
+unterreden
+unterredend
+unterredende
+unterredendem
+unterredenden
+unterredender
+unterredendes
+unterredest
+unterredet
+unterredete
+unterredeten
+unterredetest
+unterredetet
+unterrichte
+unterrichten
+unterrichtend
+unterrichtende
+unterrichtendem
+unterrichtenden
+unterrichtender
+unterrichtendes
+unterrichtest
+unterrichtet
+unterrichtete
+unterrichtetem
+unterrichteten
+unterrichteter
+unterrichtetes
+unterrichtetest
+unterrichtetet
+untersage
+untersagen
+untersagend
+untersagende
+untersagendem
+untersagenden
+untersagender
+untersagendes
+untersagst
+untersagt
+untersagte
+untersagtem
+untersagten
+untersagter
+untersagtes
+untersagtest
+untersagtet
+unterscheidbar
+unterscheidbare
+unterscheidbarem
+unterscheidbaren
+unterscheidbarer
+unterscheidbares
+unterscheide
+unterscheiden
+unterscheidend
+unterscheidende
+unterscheidendem
+unterscheidenden
+unterscheidender
+unterscheidendes
+unterscheidest
+unterscheidet
+unterschied
+unterschieden
+unterschiedene
+unterschiedenem
+unterschiedenen
+unterschiedener
+unterschiedenes
+unterschiedest
+unterschiedet
+unterschiedlich
+unterschiedliche
+unterschiedlichem
+unterschiedlichen
+unterschiedlicher
+unterschiedlichere
+unterschiedlicherem
+unterschiedlicheren
+unterschiedlicherer
+unterschiedlicheres
+unterschiedliches
+unterschiedlichste
+unterschiedlichstem
+unterschiedlichsten
+unterschiedlichster
+unterschiedlichstes
+unterschlage
+unterschlagen
+unterschlagend
+unterschlagende
+unterschlagendem
+unterschlagenden
+unterschlagender
+unterschlagendes
+unterschlagene
+unterschlagenem
+unterschlagenen
+unterschlagener
+unterschlagenes
+unterschlagt
+unterschlug
+unterschlugen
+unterschlugst
+unterschlugt
+unterschlägst
+unterschlägt
+unterschreibe
+unterschreiben
+unterschreibend
+unterschreibende
+unterschreibendem
+unterschreibenden
+unterschreibender
+unterschreibendes
+unterschreibst
+unterschreibt
+unterschreite
+unterschreiten
+unterschreitend
+unterschreitende
+unterschreitendem
+unterschreitenden
+unterschreitender
+unterschreitendes
+unterschreitest
+unterschreitet
+unterschrieb
+unterschrieben
+unterschriebene
+unterschriebenem
+unterschriebenen
+unterschriebener
+unterschriebenes
+unterschriebst
+unterschriebt
+unterschritt
+unterschritten
+unterschrittene
+unterschrittenem
+unterschrittenen
+unterschrittener
+unterschrittenes
+unterschrittest
+unterschrittet
+unterschätze
+unterschätzen
+unterschätzend
+unterschätzende
+unterschätzendem
+unterschätzenden
+unterschätzender
+unterschätzendes
+unterschätzest
+unterschätzt
+unterschätzte
+unterschätztem
+unterschätzten
+unterschätzter
+unterschätztes
+unterschätztest
+unterschätztet
+untersetze
+untersetzen
+untersetzend
+untersetzende
+untersetzendem
+untersetzenden
+untersetzender
+untersetzendes
+untersetzest
+untersetzt
+untersetzte
+untersetztem
+untersetzten
+untersetzter
+untersetztere
+untersetzterem
+untersetzteren
+untersetzterer
+untersetzteres
+untersetztes
+untersetztest
+untersetzteste
+untersetztestem
+untersetztesten
+untersetztester
+untersetztestes
+untersetztet
+unterst
+unterstand
+unterstanden
+unterstandest
+unterstandet
+unterstandst
+unterste
+unterstehe
+unterstehen
+unterstehend
+unterstehende
+unterstehendem
+unterstehenden
+unterstehender
+unterstehendes
+unterstehst
+untersteht
+unterstelle
+unterstellen
+unterstellend
+unterstellende
+unterstellendem
+unterstellenden
+unterstellender
+unterstellendes
+unterstellst
+unterstellt
+unterstellte
+unterstelltem
+unterstellten
+unterstellter
+unterstelltes
+unterstelltest
+unterstelltet
+unterstem
+untersten
+unterster
+unterstes
+unterstreiche
+unterstreichen
+unterstreichend
+unterstreichende
+unterstreichendem
+unterstreichenden
+unterstreichender
+unterstreichendes
+unterstreichst
+unterstreicht
+unterstrich
+unterstrichen
+unterstrichene
+unterstrichenem
+unterstrichenen
+unterstrichener
+unterstrichenes
+unterstrichst
+unterstricht
+unterstütze
+unterstützen
+unterstützend
+unterstützende
+unterstützendem
+unterstützenden
+unterstützender
+unterstützendes
+unterstützest
+unterstützt
+unterstützte
+unterstütztem
+unterstützten
+unterstützter
+unterstütztes
+unterstütztest
+unterstütztet
+untersuche
+untersuchen
+untersuchend
+untersuchende
+untersuchendem
+untersuchenden
+untersuchender
+untersuchendes
+untersuchst
+untersucht
+untersuchte
+untersuchtem
+untersuchten
+untersuchter
+untersuchtes
+untersuchtest
+untersuchtet
+untertage
+untertauche
+untertauchen
+untertauchend
+untertauchende
+untertauchendem
+untertauchenden
+untertauchender
+untertauchendes
+untertauchst
+untertaucht
+untertauchte
+untertauchten
+untertauchtest
+untertauchtet
+unterteile
+unterteilen
+unterteilend
+unterteilende
+unterteilendem
+unterteilenden
+unterteilender
+unterteilendes
+unterteilst
+unterteilt
+unterteilte
+unterteiltem
+unterteilten
+unterteilter
+unterteiltes
+unterteiltest
+unterteiltet
+untertägig
+untertägige
+untertägigem
+untertägigen
+untertägiger
+untertägiges
+untervermiete
+untervermieten
+untervermietend
+untervermietende
+untervermietendem
+untervermietenden
+untervermietender
+untervermietendes
+untervermietest
+untervermietet
+untervermietete
+untervermietetem
+untervermieteten
+untervermieteter
+untervermietetes
+untervermietetest
+untervermietetet
+unterwandere
+unterwandern
+unterwandernd
+unterwandernde
+unterwanderndem
+unterwandernden
+unterwandernder
+unterwanderndes
+unterwanderst
+unterwandert
+unterwanderte
+unterwandertem
+unterwanderten
+unterwanderter
+unterwandertes
+unterwandertest
+unterwandertet
+unterwandre
+unterwarf
+unterwarfen
+unterwarfest
+unterwarfst
+unterwarft
+unterwegs
+unterweise
+unterweisen
+unterweisend
+unterweisende
+unterweisendem
+unterweisenden
+unterweisender
+unterweisendes
+unterweisest
+unterweist
+unterwerfe
+unterwerfen
+unterwerfend
+unterwerfende
+unterwerfendem
+unterwerfenden
+unterwerfender
+unterwerfendes
+unterwerft
+unterwies
+unterwiesen
+unterwiesest
+unterwiest
+unterwirfst
+unterwirft
+unterworfen
+unterworfene
+unterworfenem
+unterworfenen
+unterworfener
+unterworfenes
+unterwürfig
+unterwürfige
+unterwürfigem
+unterwürfigen
+unterwürfiger
+unterwürfigere
+unterwürfigerem
+unterwürfigeren
+unterwürfigerer
+unterwürfigeres
+unterwürfiges
+unterwürfigste
+unterwürfigstem
+unterwürfigsten
+unterwürfigster
+unterwürfigstes
+unterzeichne
+unterzeichnen
+unterzeichnend
+unterzeichnende
+unterzeichnendem
+unterzeichnenden
+unterzeichnender
+unterzeichnendes
+unterzeichnest
+unterzeichnet
+unterzeichnete
+unterzeichnetem
+unterzeichneten
+unterzeichneter
+unterzeichnetes
+unterzeichnetest
+unterzeichnetet
+unterziehe
+unterziehen
+unterziehend
+unterziehende
+unterziehendem
+unterziehenden
+unterziehender
+unterziehendes
+unterziehst
+unterzieht
+unterzog
+unterzogen
+unterzogst
+unterzogt
+unterzubringen
+unterzubringend
+unterzubringende
+unterzubringendem
+unterzubringenden
+unterzubringender
+unterzubringendes
+unterzukriegen
+unterzukriegend
+unterzukriegende
+unterzukriegendem
+unterzukriegenden
+unterzukriegender
+unterzukriegendes
+unterzuordnen
+unterzuordnend
+unterzuordnende
+unterzuordnendem
+unterzuordnenden
+unterzuordnender
+unterzuordnendes
+unterzutauchen
+untief
+untiefe
+untiefem
+untiefen
+untiefer
+untiefere
+untieferem
+untieferen
+untieferer
+untieferes
+untiefes
+untiefste
+untiefstem
+untiefsten
+untiefster
+untiefstes
+untilgbar
+untilgbare
+untilgbarem
+untilgbaren
+untilgbarer
+untilgbarere
+untilgbarerem
+untilgbareren
+untilgbarerer
+untilgbareres
+untilgbares
+untilgbarste
+untilgbarstem
+untilgbarsten
+untilgbarster
+untilgbarstes
+untragbar
+untragbare
+untragbarem
+untragbaren
+untragbarer
+untragbarere
+untragbarerem
+untragbareren
+untragbarerer
+untragbareres
+untragbares
+untragbarste
+untragbarstem
+untragbarsten
+untragbarster
+untragbarstes
+untrennbar
+untrennbare
+untrennbarem
+untrennbaren
+untrennbarer
+untrennbarere
+untrennbarerem
+untrennbareren
+untrennbarerer
+untrennbareres
+untrennbares
+untrennbarste
+untrennbarstem
+untrennbarsten
+untrennbarster
+untrennbarstes
+untreu
+untreue
+untreuem
+untreuen
+untreuer
+untreuere
+untreuerem
+untreueren
+untreuerer
+untreueres
+untreues
+untreueste
+untreuestem
+untreuesten
+untreuester
+untreuestes
+untreuste
+untreustem
+untreusten
+untreuster
+untreustes
+untrinkbar
+untrinkbare
+untrinkbarem
+untrinkbaren
+untrinkbarer
+untrinkbares
+untröstlich
+untröstliche
+untröstlichem
+untröstlichen
+untröstlicher
+untröstlichere
+untröstlicherem
+untröstlicheren
+untröstlicherer
+untröstlicheres
+untröstliches
+untröstlichste
+untröstlichstem
+untröstlichsten
+untröstlichster
+untröstlichstes
+untrüglich
+untrügliche
+untrüglichem
+untrüglichen
+untrüglicher
+untrügliches
+untypisch
+untypische
+untypischem
+untypischen
+untypischer
+untypischere
+untypischerem
+untypischeren
+untypischerer
+untypischeres
+untypisches
+untypischste
+untypischstem
+untypischsten
+untypischster
+untypischstes
+untätig
+untätige
+untätigem
+untätigen
+untätiger
+untätigere
+untätigerem
+untätigeren
+untätigerer
+untätigeres
+untätiges
+untätigste
+untätigstem
+untätigsten
+untätigster
+untätigstes
+unumgänglich
+unumgängliche
+unumgänglichem
+unumgänglichen
+unumgänglicher
+unumgänglichere
+unumgänglicherem
+unumgänglicheren
+unumgänglicherer
+unumgänglicheres
+unumgängliches
+unumgänglichste
+unumgänglichstem
+unumgänglichsten
+unumgänglichster
+unumgänglichstes
+unumstritten
+unumstrittene
+unumstrittenem
+unumstrittenen
+unumstrittener
+unumstrittenere
+unumstrittenerem
+unumstritteneren
+unumstrittenerer
+unumstritteneres
+unumstrittenes
+unumstrittenste
+unumstrittenstem
+unumstrittensten
+unumstrittenster
+unumstrittenstes
+unumstößlich
+unumstößliche
+unumstößlichem
+unumstößlichen
+unumstößlicher
+unumstößliches
+unumwunden
+ununterbrochen
+ununterbrochene
+ununterbrochenem
+ununterbrochenen
+ununterbrochener
+ununterbrochenes
+ununtersucht
+ununtersuchte
+ununtersuchtem
+ununtersuchten
+ununtersuchter
+ununtersuchtes
+unverantwortlich
+unverantwortliche
+unverantwortlichem
+unverantwortlichen
+unverantwortlicher
+unverantwortlichere
+unverantwortlicherem
+unverantwortlicheren
+unverantwortlicherer
+unverantwortlicheres
+unverantwortliches
+unverantwortlichste
+unverantwortlichstem
+unverantwortlichsten
+unverantwortlichster
+unverantwortlichstes
+unverarbeitet
+unverarbeitete
+unverarbeitetem
+unverarbeiteten
+unverarbeiteter
+unverarbeitetes
+unverbaubar
+unverbaubare
+unverbaubarem
+unverbaubaren
+unverbaubarer
+unverbaubares
+unverbesserlich
+unverbesserliche
+unverbesserlichem
+unverbesserlichen
+unverbesserlicher
+unverbesserliches
+unverbindlich
+unverbindliche
+unverbindlichem
+unverbindlichen
+unverbindlicher
+unverbindlichere
+unverbindlicherem
+unverbindlicheren
+unverbindlicherer
+unverbindlicheres
+unverbindliches
+unverbindlichste
+unverbindlichstem
+unverbindlichsten
+unverbindlichster
+unverbindlichstes
+unverbunden
+unverbundene
+unverbundenem
+unverbundenen
+unverbundener
+unverbundenes
+unverdaulich
+unverdauliche
+unverdaulichem
+unverdaulichen
+unverdaulicher
+unverdaulichere
+unverdaulicherem
+unverdaulicheren
+unverdaulicherer
+unverdaulicheres
+unverdauliches
+unverdaulichste
+unverdaulichstem
+unverdaulichsten
+unverdaulichster
+unverdaulichstes
+unverderblich
+unverderbliche
+unverderblichem
+unverderblichen
+unverderblicher
+unverderblichere
+unverderblicherem
+unverderblicheren
+unverderblicherer
+unverderblicheres
+unverderbliches
+unverderblichste
+unverderblichstem
+unverderblichsten
+unverderblichster
+unverderblichstes
+unverdient
+unverdiente
+unverdientem
+unverdienten
+unverdienter
+unverdientes
+unverdorben
+unverdorbene
+unverdorbenem
+unverdorbenen
+unverdorbener
+unverdorbenere
+unverdorbenerem
+unverdorbeneren
+unverdorbenerer
+unverdorbeneres
+unverdorbenes
+unverdorbenste
+unverdorbenstem
+unverdorbensten
+unverdorbenster
+unverdorbenstes
+unverdrossen
+unverdrossene
+unverdrossenem
+unverdrossenen
+unverdrossener
+unverdrossenere
+unverdrossenerem
+unverdrosseneren
+unverdrossenerer
+unverdrosseneres
+unverdrossenes
+unverdrossenste
+unverdrossenstem
+unverdrossensten
+unverdrossenster
+unverdrossenstes
+unverdächtig
+unverdächtige
+unverdächtigem
+unverdächtigen
+unverdächtiger
+unverdächtigere
+unverdächtigerem
+unverdächtigeren
+unverdächtigerer
+unverdächtigeres
+unverdächtiges
+unverdächtigste
+unverdächtigstem
+unverdächtigsten
+unverdächtigster
+unverdächtigstes
+unvereinbar
+unvereinbare
+unvereinbarem
+unvereinbaren
+unvereinbarer
+unvereinbares
+unverfälscht
+unverfälschte
+unverfälschtem
+unverfälschten
+unverfälschter
+unverfälschtere
+unverfälschterem
+unverfälschteren
+unverfälschterer
+unverfälschteres
+unverfälschtes
+unverfälschteste
+unverfälschtestem
+unverfälschtesten
+unverfälschtester
+unverfälschtestes
+unverfänglich
+unverfängliche
+unverfänglichem
+unverfänglichen
+unverfänglicher
+unverfänglichere
+unverfänglicherem
+unverfänglicheren
+unverfänglicherer
+unverfänglicheres
+unverfängliches
+unverfänglichste
+unverfänglichstem
+unverfänglichsten
+unverfänglichster
+unverfänglichstes
+unverfügbar
+unverfügbare
+unverfügbarem
+unverfügbaren
+unverfügbarer
+unverfügbares
+unvergessen
+unvergessene
+unvergessenem
+unvergessenen
+unvergessener
+unvergessenes
+unvergesslich
+unvergessliche
+unvergesslichem
+unvergesslichen
+unvergesslicher
+unvergesslichere
+unvergesslicherem
+unvergesslicheren
+unvergesslicherer
+unvergesslicheres
+unvergessliches
+unvergesslichste
+unvergesslichstem
+unvergesslichsten
+unvergesslichster
+unvergesslichstes
+unvergleichbar
+unvergleichbare
+unvergleichbarem
+unvergleichbaren
+unvergleichbarer
+unvergleichbares
+unvergleichlich
+unvergleichliche
+unvergleichlichem
+unvergleichlichen
+unvergleichlicher
+unvergleichliches
+unvergänglich
+unvergängliche
+unvergänglichem
+unvergänglichen
+unvergänglicher
+unvergänglichere
+unvergänglicherem
+unvergänglicheren
+unvergänglicherer
+unvergänglicheres
+unvergängliches
+unvergänglichste
+unvergänglichstem
+unvergänglichsten
+unvergänglichster
+unvergänglichstes
+unverheiratet
+unverheiratete
+unverheiratetem
+unverheirateten
+unverheirateter
+unverheiratetes
+unverhofft
+unverhoffte
+unverhofftem
+unverhofften
+unverhoffter
+unverhofftes
+unverholen
+unverholene
+unverholenem
+unverholenen
+unverholener
+unverholenes
+unverhältnismäßig
+unverhältnismäßige
+unverhältnismäßigem
+unverhältnismäßigen
+unverhältnismäßiger
+unverhältnismäßigere
+unverhältnismäßigerem
+unverhältnismäßigeren
+unverhältnismäßigerer
+unverhältnismäßigeres
+unverhältnismäßiges
+unverhältnismäßigste
+unverhältnismäßigstem
+unverhältnismäßigsten
+unverhältnismäßigster
+unverhältnismäßigstes
+unverhüllt
+unverhüllte
+unverhülltem
+unverhüllten
+unverhüllter
+unverhülltes
+unverifiziert
+unverifizierte
+unverifiziertem
+unverifizierten
+unverifizierter
+unverifiziertes
+unverkauft
+unverkaufte
+unverkauftem
+unverkauften
+unverkaufter
+unverkauftes
+unverkennbar
+unverkennbare
+unverkennbarem
+unverkennbaren
+unverkennbarer
+unverkennbares
+unverletzlich
+unverletzliche
+unverletzlichem
+unverletzlichen
+unverletzlicher
+unverletzlichere
+unverletzlicherem
+unverletzlicheren
+unverletzlicherer
+unverletzlicheres
+unverletzliches
+unverletzlichste
+unverletzlichstem
+unverletzlichsten
+unverletzlichster
+unverletzlichstes
+unverletzt
+unverletzte
+unverletztem
+unverletzten
+unverletzter
+unverletztes
+unverlierbar
+unverlierbare
+unverlierbarem
+unverlierbaren
+unverlierbarer
+unverlierbares
+unverlässlich
+unverlässliche
+unverlässlichem
+unverlässlichen
+unverlässlicher
+unverlässlichere
+unverlässlicherem
+unverlässlicheren
+unverlässlicherer
+unverlässlicheres
+unverlässliches
+unverlässlichste
+unverlässlichstem
+unverlässlichsten
+unverlässlichster
+unverlässlichstes
+unvermeidbar
+unvermeidbare
+unvermeidbarem
+unvermeidbaren
+unvermeidbarer
+unvermeidbares
+unvermeidlich
+unvermeidliche
+unvermeidlichem
+unvermeidlichen
+unvermeidlicher
+unvermeidlichere
+unvermeidlicherem
+unvermeidlicheren
+unvermeidlicherer
+unvermeidlicheres
+unvermeidlicherweise
+unvermeidliches
+unvermeidlichste
+unvermeidlichstem
+unvermeidlichsten
+unvermeidlichster
+unvermeidlichstes
+unvermindert
+unverminderte
+unvermindertem
+unverminderten
+unverminderter
+unvermindertes
+unvermittelt
+unvermittelte
+unvermitteltem
+unvermittelten
+unvermittelter
+unvermitteltes
+unvermutet
+unvermutete
+unvermutetem
+unvermuteten
+unvermuteter
+unvermutetes
+unvermögend
+unvermögende
+unvermögendem
+unvermögenden
+unvermögender
+unvermögendere
+unvermögenderem
+unvermögenderen
+unvermögenderer
+unvermögenderes
+unvermögendes
+unvermögendste
+unvermögendstem
+unvermögendsten
+unvermögendster
+unvermögendstes
+unvernünftig
+unvernünftige
+unvernünftigem
+unvernünftigen
+unvernünftiger
+unvernünftigere
+unvernünftigerem
+unvernünftigeren
+unvernünftigerer
+unvernünftigeres
+unvernünftiges
+unvernünftigste
+unvernünftigstem
+unvernünftigsten
+unvernünftigster
+unvernünftigstes
+unverschämt
+unverschämte
+unverschämtem
+unverschämten
+unverschämter
+unverschämtes
+unversehrt
+unversehrte
+unversehrtem
+unversehrten
+unversehrter
+unversehrtes
+unverstanden
+unverstandene
+unverstandenem
+unverstandenen
+unverstandener
+unverstandenes
+unverstehlich
+unverstellt
+unverstellte
+unverstelltem
+unverstellten
+unverstellter
+unverstelltes
+unversteuert
+unversteuerte
+unversteuertem
+unversteuerten
+unversteuerter
+unversteuertes
+unverständlich
+unverständliche
+unverständlichem
+unverständlichen
+unverständlicher
+unverständlichere
+unverständlicherem
+unverständlicheren
+unverständlicherer
+unverständlicheres
+unverständlicherweise
+unverständliches
+unverständlichste
+unverständlichstem
+unverständlichsten
+unverständlichster
+unverständlichstes
+unverstümmelt
+unverstümmelte
+unverstümmeltem
+unverstümmelten
+unverstümmelter
+unverstümmeltes
+unversöhnlich
+unversöhnliche
+unversöhnlichem
+unversöhnlichen
+unversöhnlicher
+unversöhnliches
+unvertretbar
+unvertretbare
+unvertretbarem
+unvertretbaren
+unvertretbarer
+unvertretbares
+unverträglich
+unverträgliche
+unverträglichem
+unverträglichen
+unverträglicher
+unverträgliches
+unverwechselbar
+unverwechselbare
+unverwechselbarem
+unverwechselbaren
+unverwechselbarer
+unverwechselbares
+unverwertbar
+unverwertbare
+unverwertbarem
+unverwertbaren
+unverwertbarer
+unverwertbares
+unverwundbar
+unverwundbare
+unverwundbarem
+unverwundbaren
+unverwundbarer
+unverwundbares
+unverzeihlich
+unverzeihliche
+unverzeihlichem
+unverzeihlichen
+unverzeihlicher
+unverzeihlichere
+unverzeihlicherem
+unverzeihlicheren
+unverzeihlicherer
+unverzeihlicheres
+unverzeihliches
+unverzeihlichste
+unverzeihlichstem
+unverzeihlichsten
+unverzeihlichster
+unverzeihlichstes
+unverzichtbar
+unverzichtbare
+unverzichtbarem
+unverzichtbaren
+unverzichtbarer
+unverzichtbares
+unverzüglich
+unverzügliche
+unverzüglichem
+unverzüglichen
+unverzüglicher
+unverzügliches
+unveränderbar
+unveränderbare
+unveränderbarem
+unveränderbaren
+unveränderbarer
+unveränderbares
+unveränderlich
+unveränderliche
+unveränderlichem
+unveränderlichen
+unveränderlicher
+unveränderliches
+unverändert
+unveränderte
+unverändertem
+unveränderten
+unveränderter
+unverändertes
+unveräußerlich
+unveräußerliche
+unveräußerlichem
+unveräußerlichen
+unveräußerlicher
+unveräußerliches
+unveröffentlicht
+unveröffentlichte
+unveröffentlichtem
+unveröffentlichten
+unveröffentlichter
+unveröffentlichtes
+unvirtuos
+unvirtuose
+unvirtuosem
+unvirtuosen
+unvirtuoser
+unvirtuosere
+unvirtuoserem
+unvirtuoseren
+unvirtuoserer
+unvirtuoseres
+unvirtuoses
+unvirtuoseste
+unvirtuosestem
+unvirtuosesten
+unvirtuosester
+unvirtuosestes
+unvollendet
+unvollendete
+unvollendetem
+unvollendeten
+unvollendeter
+unvollendetes
+unvollkommen
+unvollkommene
+unvollkommenem
+unvollkommenen
+unvollkommener
+unvollkommenes
+unvollständig
+unvollständige
+unvollständigem
+unvollständigen
+unvollständiger
+unvollständiges
+unvorbereitet
+unvorbereitete
+unvorbereitetem
+unvorbereiteten
+unvorbereiteter
+unvorbereitetes
+unvoreingenommen
+unvoreingenommene
+unvoreingenommenem
+unvoreingenommenen
+unvoreingenommener
+unvoreingenommenes
+unvorhergesehen
+unvorhergesehene
+unvorhergesehenem
+unvorhergesehenen
+unvorhergesehener
+unvorhergesehenes
+unvorhersehbar
+unvorhersehbare
+unvorhersehbarem
+unvorhersehbaren
+unvorhersehbarer
+unvorhersehbares
+unvorschriftsmäßig
+unvorschriftsmäßige
+unvorschriftsmäßigem
+unvorschriftsmäßigen
+unvorschriftsmäßiger
+unvorschriftsmäßiges
+unvorsichtig
+unvorsichtige
+unvorsichtigem
+unvorsichtigen
+unvorsichtiger
+unvorsichtigere
+unvorsichtigerem
+unvorsichtigeren
+unvorsichtigerer
+unvorsichtigeres
+unvorsichtiges
+unvorsichtigste
+unvorsichtigstem
+unvorsichtigsten
+unvorsichtigster
+unvorsichtigstes
+unvorstellbar
+unvorstellbare
+unvorstellbarem
+unvorstellbaren
+unvorstellbarer
+unvorstellbares
+unvorteilhaft
+unvorteilhafte
+unvorteilhaftem
+unvorteilhaften
+unvorteilhafter
+unvorteilhaftere
+unvorteilhafterem
+unvorteilhafteren
+unvorteilhafterer
+unvorteilhafteres
+unvorteilhaftes
+unvorteilhafteste
+unvorteilhaftestem
+unvorteilhaftesten
+unvorteilhaftester
+unvorteilhaftestes
+unwahr
+unwahre
+unwahrem
+unwahren
+unwahrer
+unwahrere
+unwahrerem
+unwahreren
+unwahrerer
+unwahreres
+unwahres
+unwahrscheinlich
+unwahrscheinliche
+unwahrscheinlichem
+unwahrscheinlichen
+unwahrscheinlicher
+unwahrscheinlichere
+unwahrscheinlicherem
+unwahrscheinlicheren
+unwahrscheinlicherer
+unwahrscheinlicheres
+unwahrscheinliches
+unwahrscheinlichste
+unwahrscheinlichstem
+unwahrscheinlichsten
+unwahrscheinlichster
+unwahrscheinlichstes
+unwahrste
+unwahrstem
+unwahrsten
+unwahrster
+unwahrstes
+unwandelbar
+unwandelbare
+unwandelbarem
+unwandelbaren
+unwandelbarer
+unwandelbarere
+unwandelbarerem
+unwandelbareren
+unwandelbarerer
+unwandelbareres
+unwandelbares
+unwandelbarste
+unwandelbarstem
+unwandelbarsten
+unwandelbarster
+unwandelbarstes
+unwegsam
+unwegsame
+unwegsamem
+unwegsamen
+unwegsamer
+unwegsames
+unweigerlich
+unweigerliche
+unweigerlichem
+unweigerlichen
+unweigerlicher
+unweigerliches
+unweit
+unwesentlich
+unwesentliche
+unwesentlichem
+unwesentlichen
+unwesentlicher
+unwesentlichere
+unwesentlicherem
+unwesentlicheren
+unwesentlicherer
+unwesentlicheres
+unwesentliches
+unwesentlichste
+unwesentlichstem
+unwesentlichsten
+unwesentlichster
+unwesentlichstes
+unwichtig
+unwichtige
+unwichtigem
+unwichtigen
+unwichtiger
+unwichtigere
+unwichtigerem
+unwichtigeren
+unwichtigerer
+unwichtigeres
+unwichtiges
+unwichtigste
+unwichtigstem
+unwichtigsten
+unwichtigster
+unwichtigstes
+unwiderlegbar
+unwiderlegbare
+unwiderlegbarem
+unwiderlegbaren
+unwiderlegbarer
+unwiderlegbarere
+unwiderlegbarerem
+unwiderlegbareren
+unwiderlegbarerer
+unwiderlegbareres
+unwiderlegbares
+unwiderlegbarste
+unwiderlegbarstem
+unwiderlegbarsten
+unwiderlegbarster
+unwiderlegbarstes
+unwiderrufqqlich
+unwiderrufqqliche
+unwiderrufqqlichem
+unwiderrufqqlichen
+unwiderrufqqlicher
+unwiderrufqqliches
+unwidersprochen
+unwidersprochene
+unwidersprochenem
+unwidersprochenen
+unwidersprochener
+unwidersprochenes
+unwiderstehlich
+unwiderstehliche
+unwiderstehlichem
+unwiderstehlichen
+unwiderstehlicher
+unwiderstehliches
+unwiederbringlich
+unwiederbringliche
+unwiederbringlichem
+unwiederbringlichen
+unwiederbringlicher
+unwiederbringliches
+unwiederholbar
+unwiederholbare
+unwiederholbarem
+unwiederholbaren
+unwiederholbarer
+unwiederholbares
+unwillig
+unwillige
+unwilligem
+unwilligen
+unwilliger
+unwilligere
+unwilligerem
+unwilligeren
+unwilligerer
+unwilligeres
+unwilliges
+unwilligste
+unwilligstem
+unwilligsten
+unwilligster
+unwilligstes
+unwillkommen
+unwillkommene
+unwillkommenem
+unwillkommenen
+unwillkommener
+unwillkommenere
+unwillkommenerem
+unwillkommeneren
+unwillkommenerer
+unwillkommeneres
+unwillkommenes
+unwillkommenste
+unwillkommenstem
+unwillkommensten
+unwillkommenster
+unwillkommenstes
+unwillkürlich
+unwillkürliche
+unwillkürlichem
+unwillkürlichen
+unwillkürlicher
+unwillkürlichere
+unwillkürlicherem
+unwillkürlicheren
+unwillkürlicherer
+unwillkürlicheres
+unwillkürliches
+unwillkürlichste
+unwillkürlichstem
+unwillkürlichsten
+unwillkürlichster
+unwillkürlichstes
+unwirksam
+unwirksame
+unwirksamem
+unwirksamen
+unwirksamer
+unwirksamere
+unwirksamerem
+unwirksameren
+unwirksamerer
+unwirksameres
+unwirksames
+unwirksamste
+unwirksamstem
+unwirksamsten
+unwirksamster
+unwirksamstes
+unwirtlich
+unwirtliche
+unwirtlichem
+unwirtlichen
+unwirtlicher
+unwirtlichere
+unwirtlicherem
+unwirtlicheren
+unwirtlicherer
+unwirtlicheres
+unwirtliches
+unwirtlichste
+unwirtlichstem
+unwirtlichsten
+unwirtlichster
+unwirtlichstes
+unwissend
+unwissende
+unwissendem
+unwissenden
+unwissender
+unwissendere
+unwissenderem
+unwissenderen
+unwissenderer
+unwissenderes
+unwissendes
+unwissendste
+unwissendstem
+unwissendsten
+unwissendster
+unwissendstes
+unwissentlich
+unwissentliche
+unwissentlichem
+unwissentlichen
+unwissentlicher
+unwissentlichere
+unwissentlicherem
+unwissentlicheren
+unwissentlicherer
+unwissentlicheres
+unwissentliches
+unwissentlichste
+unwissentlichstem
+unwissentlichsten
+unwissentlichster
+unwissentlichstes
+unwohl
+unwohnlich
+unwohnliche
+unwohnlichem
+unwohnlichen
+unwohnlicher
+unwohnlichere
+unwohnlicherem
+unwohnlicheren
+unwohnlicherer
+unwohnlicheres
+unwohnliches
+unwohnlichste
+unwohnlichstem
+unwohnlichsten
+unwohnlichster
+unwohnlichstes
+unwürdig
+unwürdige
+unwürdigem
+unwürdigen
+unwürdiger
+unwürdigere
+unwürdigerem
+unwürdigeren
+unwürdigerer
+unwürdigeres
+unwürdiges
+unwürdigste
+unwürdigstem
+unwürdigsten
+unwürdigster
+unwürdigstes
+unzeitgemäß
+unzeitgemäße
+unzeitgemäßem
+unzeitgemäßen
+unzeitgemäßer
+unzeitgemäßes
+unzensiert
+unzensierte
+unzensiertem
+unzensierten
+unzensierter
+unzensiertes
+unzerbrechlich
+unzerbrechliche
+unzerbrechlichem
+unzerbrechlichen
+unzerbrechlicher
+unzerbrechlichere
+unzerbrechlicherem
+unzerbrechlicheren
+unzerbrechlicherer
+unzerbrechlicheres
+unzerbrechliches
+unzerbrechlichste
+unzerbrechlichstem
+unzerbrechlichsten
+unzerbrechlichster
+unzerbrechlichstes
+unzerreißbar
+unzerreißbare
+unzerreißbarem
+unzerreißbaren
+unzerreißbarer
+unzerreißbares
+unzertrennbar
+unzertrennbare
+unzertrennbarem
+unzertrennbaren
+unzertrennbarer
+unzertrennbares
+unzertrennlich
+unzertrennliche
+unzertrennlichem
+unzertrennlichen
+unzertrennlicher
+unzertrennliches
+unzufrieden
+unzufriedene
+unzufriedenem
+unzufriedenen
+unzufriedener
+unzufriedenere
+unzufriedenerem
+unzufriedeneren
+unzufriedenerer
+unzufriedeneres
+unzufriedenes
+unzufriedenste
+unzufriedenstem
+unzufriedensten
+unzufriedenster
+unzufriedenstes
+unzugänglich
+unzugängliche
+unzugänglichem
+unzugänglichen
+unzugänglicher
+unzugänglichere
+unzugänglicherem
+unzugänglicheren
+unzugänglicherer
+unzugänglicheres
+unzugängliches
+unzugänglichste
+unzugänglichstem
+unzugänglichsten
+unzugänglichster
+unzugänglichstes
+unzulänglich
+unzulängliche
+unzulänglichem
+unzulänglichen
+unzulänglicher
+unzulängliches
+unzulässig
+unzulässige
+unzulässigem
+unzulässigen
+unzulässiger
+unzulässiges
+unzumutbar
+unzumutbare
+unzumutbarem
+unzumutbaren
+unzumutbarer
+unzumutbares
+unzurechnungsfähig
+unzurechnungsfähige
+unzurechnungsfähigem
+unzurechnungsfähigen
+unzurechnungsfähiger
+unzurechnungsfähigere
+unzurechnungsfähigerem
+unzurechnungsfähigeren
+unzurechnungsfähigerer
+unzurechnungsfähigeres
+unzurechnungsfähiges
+unzurechnungsfähigste
+unzurechnungsfähigstem
+unzurechnungsfähigsten
+unzurechnungsfähigster
+unzurechnungsfähigstes
+unzureichend
+unzureichende
+unzureichendem
+unzureichenden
+unzureichender
+unzureichendes
+unzusammenhängend
+unzusammenhängende
+unzusammenhängendem
+unzusammenhängenden
+unzusammenhängender
+unzusammenhängendes
+unzustellbar
+unzustellbare
+unzustellbarem
+unzustellbaren
+unzustellbarer
+unzustellbares
+unzutreffend
+unzutreffende
+unzutreffendem
+unzutreffenden
+unzutreffender
+unzutreffendes
+unzuverlässig
+unzuverlässige
+unzuverlässigem
+unzuverlässigen
+unzuverlässiger
+unzuverlässigere
+unzuverlässigerem
+unzuverlässigeren
+unzuverlässigerer
+unzuverlässigeres
+unzuverlässiges
+unzuverlässigste
+unzuverlässigstem
+unzuverlässigsten
+unzuverlässigster
+unzuverlässigstes
+unzweckmäßig
+unzweckmäßige
+unzweckmäßigem
+unzweckmäßigen
+unzweckmäßiger
+unzweckmäßigere
+unzweckmäßigerem
+unzweckmäßigeren
+unzweckmäßigerer
+unzweckmäßigeres
+unzweckmäßiges
+unzweckmäßigste
+unzweckmäßigstem
+unzweckmäßigsten
+unzweckmäßigster
+unzweckmäßigstes
+unzweideutig
+unzweideutige
+unzweideutigem
+unzweideutigen
+unzweideutiger
+unzweideutigere
+unzweideutigerem
+unzweideutigeren
+unzweideutigerer
+unzweideutigeres
+unzweideutiges
+unzweideutigste
+unzweideutigstem
+unzweideutigsten
+unzweideutigster
+unzweideutigstes
+unzweifelhaft
+unzweifelhafte
+unzweifelhaftem
+unzweifelhaften
+unzweifelhafter
+unzweifelhaftere
+unzweifelhafterem
+unzweifelhafteren
+unzweifelhafterer
+unzweifelhafteres
+unzweifelhaftes
+unzweifelhafteste
+unzweifelhaftestem
+unzweifelhaftesten
+unzweifelhaftester
+unzweifelhaftestes
+unzählig
+unzählige
+unzähligem
+unzähligen
+unzähliger
+unzähliges
+unzüchtig
+unzüchtige
+unzüchtigem
+unzüchtigen
+unzüchtiger
+unzüchtigere
+unzüchtigerem
+unzüchtigeren
+unzüchtigerer
+unzüchtigeres
+unzüchtiges
+unzüchtigste
+unzüchtigstem
+unzüchtigsten
+unzüchtigster
+unzüchtigstes
+unähnlich
+unähnliche
+unähnlichem
+unähnlichen
+unähnlicher
+unähnlichere
+unähnlicherem
+unähnlicheren
+unähnlicherer
+unähnlicheres
+unähnliches
+unähnlichste
+unähnlichstem
+unähnlichsten
+unähnlichster
+unähnlichstes
+unästhetisch
+unästhetische
+unästhetischem
+unästhetischen
+unästhetischer
+unästhetisches
+unüberbietbar
+unüberbietbare
+unüberbietbarem
+unüberbietbaren
+unüberbietbarer
+unüberbietbares
+unüberbrückbar
+unüberbrückbare
+unüberbrückbarem
+unüberbrückbaren
+unüberbrückbarer
+unüberbrückbares
+unüberlegt
+unüberlegte
+unüberlegtem
+unüberlegten
+unüberlegter
+unüberlegtes
+unüberprüfbar
+unüberprüfbare
+unüberprüfbarem
+unüberprüfbaren
+unüberprüfbarer
+unüberprüfbares
+unübersehbar
+unübersehbare
+unübersehbarem
+unübersehbaren
+unübersehbarer
+unübersehbares
+unübersichtlich
+unübersichtliche
+unübersichtlichem
+unübersichtlichen
+unübersichtlicher
+unübersichtlichere
+unübersichtlicherem
+unübersichtlicheren
+unübersichtlicherer
+unübersichtlicheres
+unübersichtliches
+unübersichtlichste
+unübersichtlichstem
+unübersichtlichsten
+unübersichtlichster
+unübersichtlichstes
+unübersteigbar
+unübersteigbare
+unübersteigbarem
+unübersteigbaren
+unübersteigbarer
+unübersteigbares
+unübertragbar
+unübertragbare
+unübertragbarem
+unübertragbaren
+unübertragbarer
+unübertragbares
+unübertroffen
+unübertroffene
+unübertroffenem
+unübertroffenen
+unübertroffener
+unübertroffenes
+unüberwindlich
+unüberwindliche
+unüberwindlichem
+unüberwindlichen
+unüberwindlicher
+unüberwindliches
+unüblich
+unübliche
+unüblichem
+unüblichen
+unüblicher
+unüblichere
+unüblicherem
+unüblicheren
+unüblicherer
+unüblicheres
+unübliches
+unüblichste
+unüblichstem
+unüblichsten
+unüblichster
+unüblichstes
+update
+updatemäßig
+updaten
+updatend
+updatende
+updatendem
+updatenden
+updatender
+updatendes
+updatest
+updatet
+upgedated
+upgedatet
+upgedatete
+upgedatetem
+upgedateten
+upgedateter
+upgedatetes
+upzudaten
+upzudatend
+upzudatende
+upzudatendem
+upzudatenden
+upzudatender
+upzudatendes
+uralt
+uralte
+uraltem
+uralten
+uralter
+uraltes
+uraufgeführt
+uraufgeführte
+uraufgeführtem
+uraufgeführten
+uraufgeführter
+uraufgeführtes
+uraufqqführe
+uraufqqführen
+uraufqqführend
+uraufqqführende
+uraufqqführendem
+uraufqqführenden
+uraufqqführender
+uraufqqführendes
+uraufqqführst
+uraufqqführt
+uraufqqführte
+uraufqqführten
+uraufqqführtest
+uraufqqführtet
+urban
+urbane
+urbanem
+urbanen
+urbaner
+urbanes
+ureigen
+ureigene
+ureigenem
+ureigenen
+ureigener
+ureigenes
+urgeschichtlich
+urgeschichtliche
+urgeschichtlichem
+urgeschichtlichen
+urgeschichtlicher
+urgeschichtliches
+urheberrechtlich
+urheberrechtliche
+urheberrechtlichem
+urheberrechtlichen
+urheberrechtlicher
+urheberrechtliches
+uriniere
+urinieren
+urinierend
+urinierende
+urinierendem
+urinierenden
+urinierender
+urinierendes
+urinierst
+uriniert
+urinierte
+urinierten
+uriniertest
+uriniertet
+urkundlich
+urkundliche
+urkundlichem
+urkundlichen
+urkundlicher
+urkundliches
+urplötzlich
+urplötzliche
+urplötzlichem
+urplötzlichen
+urplötzlicher
+urplötzliches
+ursprünglich
+ursprüngliche
+ursprünglichem
+ursprünglichen
+ursprünglicher
+ursprünglichere
+ursprünglicherem
+ursprünglicheren
+ursprünglicherer
+ursprünglicheres
+ursprüngliches
+ursprünglichste
+ursprünglichstem
+ursprünglichsten
+ursprünglichster
+ursprünglichstes
+ursächlich
+ursächliche
+ursächlichem
+ursächlichen
+ursächlicher
+ursächliches
+urteile
+urteilen
+urteilend
+urteilende
+urteilendem
+urteilenden
+urteilender
+urteilendes
+urteilsfähig
+urteilsfähige
+urteilsfähigem
+urteilsfähigen
+urteilsfähiger
+urteilsfähiges
+urteilst
+urteilt
+urteilte
+urteilten
+urteiltest
+urteiltet
+urtümlich
+urtümliche
+urtümlichem
+urtümlichen
+urtümlicher
+urtümliches
+urälteste
+urältestem
+urältesten
+urältester
+urältestes
+usbekisch
+usbekische
+usbekischem
+usbekischen
+usbekischer
+usbekisches
+usw
+utopisch
+utopische
+utopischem
+utopischen
+utopischer
+utopisches
+utopistisch
+utopistische
+utopistischem
+utopistischen
+utopistischer
+utopistisches
+vag
+vage
+vagem
+vagen
+vager
+vages
+validierbar
+validierbare
+validierbarem
+validierbaren
+validierbarer
+validierbares
+validiere
+validieren
+validierend
+validierende
+validierendem
+validierenden
+validierender
+validierendes
+validierst
+validiert
+validierte
+validiertem
+validierten
+validierter
+validiertes
+validiertest
+validiertet
+van
+variabel
+variabelste
+variabelstem
+variabelsten
+variabelster
+variabelstes
+variable
+variablem
+variablen
+variabler
+variablere
+variablerem
+variableren
+variablerer
+variableres
+variables
+variierbar
+variierbare
+variierbarem
+variierbaren
+variierbarer
+variierbares
+variiere
+variieren
+variierend
+variierende
+variierendem
+variierenden
+variierender
+variierendes
+variierst
+variiert
+variierte
+variiertem
+variierten
+variierter
+variiertes
+variiertest
+variiertet
+vaterlos
+vaterlose
+vaterlosem
+vaterlosen
+vaterloser
+vaterloses
+vaterländisch
+vaterländische
+vaterländischem
+vaterländischen
+vaterländischer
+vaterländischere
+vaterländischerem
+vaterländischeren
+vaterländischerer
+vaterländischeres
+vaterländisches
+vaterländischste
+vaterländischstem
+vaterländischsten
+vaterländischster
+vaterländischstes
+vatikanisch
+vatikanische
+vatikanischem
+vatikanischen
+vatikanischer
+vatikanisches
+vegetabilisch
+vegetabilische
+vegetabilischem
+vegetabilischen
+vegetabilischer
+vegetabilisches
+vegetarisch
+vegetarische
+vegetarischem
+vegetarischen
+vegetarischer
+vegetarisches
+vegetativ
+vegetative
+vegetativem
+vegetativen
+vegetativer
+vegetatives
+vegetiere
+vegetieren
+vegetierend
+vegetierende
+vegetierendem
+vegetierenden
+vegetierender
+vegetierendes
+vegetierst
+vegetiert
+vegetierte
+vegetierten
+vegetiertest
+vegetiertet
+vehement
+vehemente
+vehementem
+vehementen
+vehementer
+vehementes
+veilchenblau
+veilchenblaue
+veilchenblauem
+veilchenblauen
+veilchenblauer
+veilchenblaues
+venerisch
+venerische
+venerischem
+venerischen
+venerischer
+venerischere
+venerischerem
+venerischeren
+venerischerer
+venerischeres
+venerisches
+venerischste
+venerischstem
+venerischsten
+venerischster
+venerischstes
+venezianisch
+venezianische
+venezianischem
+venezianischen
+venezianischer
+venezianisches
+ventiliere
+ventilieren
+ventilierend
+ventilierende
+ventilierendem
+ventilierenden
+ventilierender
+ventilierendes
+ventilierst
+ventiliert
+ventilierte
+ventiliertem
+ventilierten
+ventilierter
+ventiliertes
+ventiliertest
+ventiliertet
+verabfolge
+verabfolgen
+verabfolgend
+verabfolgende
+verabfolgendem
+verabfolgenden
+verabfolgender
+verabfolgendes
+verabfolgst
+verabfolgt
+verabfolgte
+verabfolgtem
+verabfolgten
+verabfolgter
+verabfolgtes
+verabfolgtest
+verabfolgtet
+verabrede
+verabreden
+verabredend
+verabredende
+verabredendem
+verabredenden
+verabredender
+verabredendes
+verabredest
+verabredet
+verabredete
+verabredetem
+verabredeten
+verabredeter
+verabredetes
+verabredetest
+verabredetet
+verabreiche
+verabreichen
+verabreichend
+verabreichende
+verabreichendem
+verabreichenden
+verabreichender
+verabreichendes
+verabreichst
+verabreicht
+verabreichte
+verabreichtem
+verabreichten
+verabreichter
+verabreichtes
+verabreichtest
+verabreichtet
+verabscheue
+verabscheuen
+verabscheuend
+verabscheuende
+verabscheuendem
+verabscheuenden
+verabscheuender
+verabscheuendere
+verabscheuenderem
+verabscheuenderen
+verabscheuenderer
+verabscheuenderes
+verabscheuendes
+verabscheuendste
+verabscheuendstem
+verabscheuendsten
+verabscheuendster
+verabscheuendstes
+verabscheuenswert
+verabscheuenswerte
+verabscheuenswertem
+verabscheuenswerten
+verabscheuenswerter
+verabscheuenswertere
+verabscheuenswerterem
+verabscheuenswerteren
+verabscheuenswerterer
+verabscheuenswerteres
+verabscheuenswertes
+verabscheuenswerteste
+verabscheuenswertestem
+verabscheuenswertesten
+verabscheuenswertester
+verabscheuenswertestes
+verabscheust
+verabscheut
+verabscheute
+verabscheutem
+verabscheuten
+verabscheuter
+verabscheutes
+verabscheutest
+verabscheutet
+verabschiede
+verabschieden
+verabschiedend
+verabschiedende
+verabschiedendem
+verabschiedenden
+verabschiedender
+verabschiedendes
+verabschiedest
+verabschiedet
+verabschiedete
+verabschiedetem
+verabschiedeten
+verabschiedeter
+verabschiedetes
+verabschiedetest
+verabschiedetet
+verabsäume
+verabsäumen
+verabsäumend
+verabsäumende
+verabsäumendem
+verabsäumenden
+verabsäumender
+verabsäumendes
+verabsäumst
+verabsäumt
+verabsäumte
+verabsäumtem
+verabsäumten
+verabsäumter
+verabsäumtes
+verabsäumtest
+verabsäumtet
+verachte
+verachten
+verachtend
+verachtende
+verachtendem
+verachtenden
+verachtender
+verachtendes
+verachtenswert
+verachtenswerte
+verachtenswertem
+verachtenswerten
+verachtenswerter
+verachtenswertes
+verachtest
+verachtet
+verachtete
+verachtetem
+verachteten
+verachteter
+verachtetes
+verachtetest
+verachtetet
+verallgemeinerbar
+verallgemeinerbare
+verallgemeinerbarem
+verallgemeinerbaren
+verallgemeinerbarer
+verallgemeinerbares
+verallgemeinere
+verallgemeinern
+verallgemeinernd
+verallgemeinernde
+verallgemeinerndem
+verallgemeinernden
+verallgemeinernder
+verallgemeinerndes
+verallgemeinerst
+verallgemeinert
+verallgemeinerte
+verallgemeinertem
+verallgemeinerten
+verallgemeinerter
+verallgemeinertes
+verallgemeinertest
+verallgemeinertet
+verallgemeinre
+veralte
+veralten
+veraltend
+veraltende
+veraltendem
+veraltenden
+veraltender
+veraltendes
+veraltest
+veraltet
+veraltete
+veraltetem
+veralteten
+veralteter
+veraltetes
+veraltetest
+veraltetet
+verankere
+verankern
+verankernd
+verankernde
+verankerndem
+verankernden
+verankernder
+verankerndes
+verankerst
+verankert
+verankerte
+verankertem
+verankerten
+verankerter
+verankertes
+verankertest
+verankertet
+verankre
+veranlage
+veranlagen
+veranlagend
+veranlagende
+veranlagendem
+veranlagenden
+veranlagender
+veranlagendes
+veranlagst
+veranlagt
+veranlagte
+veranlagtem
+veranlagten
+veranlagter
+veranlagtes
+veranlagtest
+veranlagtet
+veranlasse
+veranlassen
+veranlassend
+veranlassende
+veranlassendem
+veranlassenden
+veranlassender
+veranlassendes
+veranlassest
+veranlasst
+veranlasste
+veranlasstem
+veranlassten
+veranlasster
+veranlasstes
+veranlasstest
+veranlasstet
+veranschauliche
+veranschaulichen
+veranschaulichend
+veranschaulichende
+veranschaulichendem
+veranschaulichenden
+veranschaulichender
+veranschaulichendes
+veranschaulichst
+veranschaulicht
+veranschaulichte
+veranschaulichtem
+veranschaulichten
+veranschaulichter
+veranschaulichtes
+veranschaulichtest
+veranschaulichtet
+veranschlagbar
+veranschlagbare
+veranschlagbarem
+veranschlagbaren
+veranschlagbarer
+veranschlagbares
+veranschlage
+veranschlagen
+veranschlagend
+veranschlagende
+veranschlagendem
+veranschlagenden
+veranschlagender
+veranschlagendes
+veranschlagst
+veranschlagt
+veranschlagte
+veranschlagtem
+veranschlagten
+veranschlagter
+veranschlagtes
+veranschlagtest
+veranschlagtet
+veranstalte
+veranstalten
+veranstaltend
+veranstaltende
+veranstaltendem
+veranstaltenden
+veranstaltender
+veranstaltendes
+veranstaltest
+veranstaltet
+veranstaltete
+veranstaltetem
+veranstalteten
+veranstalteter
+veranstaltetes
+veranstaltetest
+veranstaltetet
+verantwortbar
+verantwortbare
+verantwortbarem
+verantwortbaren
+verantwortbarer
+verantwortbares
+verantworte
+verantworten
+verantwortend
+verantwortende
+verantwortendem
+verantwortenden
+verantwortender
+verantwortendes
+verantwortest
+verantwortet
+verantwortete
+verantwortetem
+verantworteten
+verantworteter
+verantwortetes
+verantwortetest
+verantwortetet
+verantwortlich
+verantwortliche
+verantwortlichem
+verantwortlichen
+verantwortlicher
+verantwortlichere
+verantwortlicherem
+verantwortlicheren
+verantwortlicherer
+verantwortlicheres
+verantwortliches
+verantwortlichste
+verantwortlichstem
+verantwortlichsten
+verantwortlichster
+verantwortlichstes
+verantwortungsbewusst
+verantwortungsbewusste
+verantwortungsbewusstem
+verantwortungsbewussten
+verantwortungsbewusster
+verantwortungsbewusstere
+verantwortungsbewussterem
+verantwortungsbewussteren
+verantwortungsbewussterer
+verantwortungsbewussteres
+verantwortungsbewusstes
+verantwortungsbewussteste
+verantwortungsbewusstestem
+verantwortungsbewusstesten
+verantwortungsbewusstester
+verantwortungsbewusstestes
+verantwortungslos
+verantwortungslose
+verantwortungslosem
+verantwortungslosen
+verantwortungsloser
+verantwortungslosere
+verantwortungsloserem
+verantwortungsloseren
+verantwortungsloserer
+verantwortungsloseres
+verantwortungsloses
+verantwortungsloseste
+verantwortungslosestem
+verantwortungslosesten
+verantwortungslosester
+verantwortungslosestes
+verantwortungsvoll
+verantwortungsvolle
+verantwortungsvollem
+verantwortungsvollen
+verantwortungsvoller
+verantwortungsvollere
+verantwortungsvollerem
+verantwortungsvolleren
+verantwortungsvollerer
+verantwortungsvolleres
+verantwortungsvolles
+verantwortungsvollste
+verantwortungsvollstem
+verantwortungsvollsten
+verantwortungsvollster
+verantwortungsvollstes
+verarbeite
+verarbeiten
+verarbeitend
+verarbeitende
+verarbeitendem
+verarbeitenden
+verarbeitender
+verarbeitendes
+verarbeitest
+verarbeitet
+verarbeitete
+verarbeitetem
+verarbeiteten
+verarbeiteter
+verarbeitetes
+verarbeitetest
+verarbeitetet
+verarge
+verargen
+verargend
+verargende
+verargendem
+verargenden
+verargender
+verargendes
+verargst
+verargt
+verargte
+verargtem
+verargten
+verargter
+verargtes
+verargtest
+verargtet
+verarme
+verarmen
+verarmend
+verarmende
+verarmendem
+verarmenden
+verarmender
+verarmendes
+verarmst
+verarmt
+verarmte
+verarmtem
+verarmten
+verarmter
+verarmtere
+verarmterem
+verarmteren
+verarmterer
+verarmteres
+verarmtes
+verarmtest
+verarmteste
+verarmtestem
+verarmtesten
+verarmtester
+verarmtestes
+verarmtet
+verarsche
+verarschen
+verarschend
+verarschende
+verarschendem
+verarschenden
+verarschender
+verarschendes
+verarschest
+verarschst
+verarscht
+verarschte
+verarschtem
+verarschten
+verarschter
+verarschtes
+verarschtest
+verarschtet
+verarzte
+verarzten
+verarztend
+verarztende
+verarztendem
+verarztenden
+verarztender
+verarztendes
+verarztest
+verarztet
+verarztete
+verarztetem
+verarzteten
+verarzteter
+verarztetes
+verarztetest
+verarztetet
+verausgabe
+verausgaben
+verausgabend
+verausgabende
+verausgabendem
+verausgabenden
+verausgabender
+verausgabendes
+verausgabst
+verausgabt
+verausgabte
+verausgabtem
+verausgabten
+verausgabter
+verausgabtes
+verausgabtest
+verausgabtet
+verbal
+verbale
+verbalem
+verbalen
+verbaler
+verbalere
+verbalerem
+verbaleren
+verbalerer
+verbaleres
+verbales
+verbalste
+verbalstem
+verbalsten
+verbalster
+verbalstes
+verband
+verbandelt
+verbandelte
+verbandeltem
+verbandelten
+verbandelter
+verbandeltes
+verbanden
+verbandest
+verbandet
+verbandst
+verbanne
+verbannen
+verbannend
+verbannende
+verbannendem
+verbannenden
+verbannender
+verbannendes
+verbannst
+verbannt
+verbannte
+verbanntem
+verbannten
+verbannter
+verbanntes
+verbanntest
+verbanntet
+verbarg
+verbargen
+verbargst
+verbargt
+verbarrikadiere
+verbarrikadieren
+verbarrikadierend
+verbarrikadierende
+verbarrikadierendem
+verbarrikadierenden
+verbarrikadierender
+verbarrikadierendes
+verbarrikadierst
+verbarrikadiert
+verbarrikadierte
+verbarrikadiertem
+verbarrikadierten
+verbarrikadierter
+verbarrikadiertes
+verbarrikadiertest
+verbarrikadiertet
+verbat
+verbaten
+verbatest
+verbatet
+verbatst
+verbaue
+verbauen
+verbauend
+verbauende
+verbauendem
+verbauenden
+verbauender
+verbauendes
+verbauere
+verbauern
+verbauernd
+verbauernde
+verbauerndem
+verbauernden
+verbauernder
+verbauerndes
+verbauerst
+verbauert
+verbauerte
+verbauertem
+verbauerten
+verbauerter
+verbauertes
+verbauertest
+verbauertet
+verbaure
+verbaust
+verbaut
+verbaute
+verbautem
+verbauten
+verbauter
+verbautes
+verbautest
+verbautet
+verbeiße
+verbeißen
+verbeißend
+verbeißende
+verbeißendem
+verbeißenden
+verbeißender
+verbeißendes
+verbeißest
+verbeißt
+verberge
+verbergen
+verbergend
+verbergende
+verbergendem
+verbergenden
+verbergender
+verbergendes
+verbergt
+verbesserbar
+verbesserbare
+verbesserbarem
+verbesserbaren
+verbesserbarer
+verbesserbares
+verbessere
+verbessern
+verbessernd
+verbessernde
+verbesserndem
+verbessernden
+verbessernder
+verbesserndes
+verbesserst
+verbessert
+verbesserte
+verbessertem
+verbesserten
+verbesserter
+verbessertes
+verbessertest
+verbessertet
+verbesserungswürdig
+verbesserungswürdige
+verbesserungswürdigem
+verbesserungswürdigen
+verbesserungswürdiger
+verbesserungswürdiges
+verbessre
+verbeten
+verbetene
+verbetenem
+verbetenen
+verbetener
+verbetenes
+verbeuge
+verbeugen
+verbeugend
+verbeugende
+verbeugendem
+verbeugenden
+verbeugender
+verbeugendes
+verbeugst
+verbeugt
+verbeugte
+verbeugtem
+verbeugten
+verbeugter
+verbeugtes
+verbeugtest
+verbeugtet
+verbeule
+verbeulen
+verbeulend
+verbeulende
+verbeulendem
+verbeulenden
+verbeulender
+verbeulendes
+verbeulst
+verbeult
+verbeulte
+verbeultem
+verbeulten
+verbeulter
+verbeultes
+verbeultest
+verbeultet
+verbiege
+verbiegen
+verbiegend
+verbiegende
+verbiegendem
+verbiegenden
+verbiegender
+verbiegendes
+verbiegst
+verbiegt
+verbiestere
+verbiestern
+verbiesterst
+verbiestert
+verbiesterte
+verbiestertem
+verbiesterten
+verbiesterter
+verbiestertes
+verbiestertest
+verbiestertet
+verbiestre
+verbiete
+verbieten
+verbietend
+verbietende
+verbietendem
+verbietenden
+verbietender
+verbietendes
+verbietest
+verbietet
+verbillige
+verbilligen
+verbilligend
+verbilligende
+verbilligendem
+verbilligenden
+verbilligender
+verbilligendes
+verbilligst
+verbilligt
+verbilligte
+verbilligtem
+verbilligten
+verbilligter
+verbilligtes
+verbilligtest
+verbilligtet
+verbindbar
+verbindbare
+verbindbarem
+verbindbaren
+verbindbarer
+verbindbares
+verbinde
+verbinden
+verbindend
+verbindende
+verbindendem
+verbindenden
+verbindender
+verbindendes
+verbindest
+verbindet
+verbindlich
+verbindliche
+verbindlichem
+verbindlichen
+verbindlicher
+verbindlichere
+verbindlicherem
+verbindlicheren
+verbindlicherer
+verbindlicheres
+verbindliches
+verbindlichste
+verbindlichstem
+verbindlichsten
+verbindlichster
+verbindlichstes
+verbirgst
+verbirgt
+verbis
+verbiss
+verbissen
+verbissene
+verbissenem
+verbissenen
+verbissener
+verbissenere
+verbissenerem
+verbisseneren
+verbissenerer
+verbisseneres
+verbissenes
+verbissenste
+verbissenstem
+verbissensten
+verbissenster
+verbissenstes
+verbissest
+verbisst
+verbitte
+verbitten
+verbittend
+verbittende
+verbittendem
+verbittenden
+verbittender
+verbittendes
+verbittere
+verbittern
+verbitternd
+verbitternde
+verbitterndem
+verbitternden
+verbitternder
+verbitterndes
+verbitterst
+verbittert
+verbitterte
+verbittertem
+verbitterten
+verbitterter
+verbittertere
+verbitterterem
+verbitterteren
+verbitterterer
+verbitterteres
+verbittertes
+verbittertest
+verbitterteste
+verbittertestem
+verbittertesten
+verbittertester
+verbittertestes
+verbittertet
+verbittest
+verbittet
+verbittre
+verblase
+verblasen
+verblasend
+verblasende
+verblasendem
+verblasenden
+verblasender
+verblasendes
+verblasse
+verblassen
+verblassend
+verblassende
+verblassendem
+verblassenden
+verblassender
+verblassendes
+verblassest
+verblasst
+verblasste
+verblasstem
+verblassten
+verblasster
+verblasstere
+verblassterem
+verblassteren
+verblassterer
+verblassteres
+verblasstes
+verblasstest
+verblassteste
+verblasstestem
+verblasstesten
+verblasstester
+verblasstestes
+verblasstet
+verblast
+verbleib
+verbleibe
+verbleiben
+verbleibend
+verbleibende
+verbleibendem
+verbleibenden
+verbleibender
+verbleibendes
+verbleibst
+verbleibt
+verblende
+verblenden
+verblendend
+verblendende
+verblendendem
+verblendenden
+verblendender
+verblendendes
+verblendest
+verblendet
+verblendete
+verblendetem
+verblendeten
+verblendeter
+verblendetere
+verblendeterem
+verblendeteren
+verblendeterer
+verblendeteres
+verblendetes
+verblendetest
+verblendetet
+verblendetste
+verblendetstem
+verblendetsten
+verblendetster
+verblendetstes
+verblichen
+verblichene
+verblichenem
+verblichenen
+verblichener
+verblichenes
+verblieb
+verbliebe
+verblieben
+verbliebene
+verbliebenem
+verbliebenen
+verbliebener
+verbliebenes
+verbliebst
+verbliebt
+verblute
+verbluten
+verblutend
+verblutende
+verblutendem
+verblutenden
+verblutender
+verblutendes
+verblutest
+verblutet
+verblutete
+verblutetem
+verbluteten
+verbluteter
+verblutetes
+verblutetest
+verblutetet
+verblöde
+verblöden
+verblödend
+verblödende
+verblödendem
+verblödenden
+verblödender
+verblödendes
+verblödest
+verblödet
+verblödete
+verblödetem
+verblödeten
+verblödeter
+verblödetes
+verblödetest
+verblödetet
+verblüffe
+verblüffen
+verblüffend
+verblüffende
+verblüffendem
+verblüffenden
+verblüffender
+verblüffendere
+verblüffenderem
+verblüffenderen
+verblüffenderer
+verblüffenderes
+verblüffendes
+verblüffendste
+verblüffendstem
+verblüffendsten
+verblüffendster
+verblüffendstes
+verblüffst
+verblüfft
+verblüffte
+verblüfftem
+verblüfften
+verblüffter
+verblüfftere
+verblüffterem
+verblüffteren
+verblüffterer
+verblüffteres
+verblüfftes
+verblüfftest
+verblüffteste
+verblüfftestem
+verblüfftesten
+verblüfftester
+verblüfftestes
+verblüfftet
+verblühe
+verblühen
+verblühend
+verblühende
+verblühendem
+verblühenden
+verblühender
+verblühendes
+verblühst
+verblüht
+verblühte
+verblühtem
+verblühten
+verblühter
+verblühtes
+verblühtest
+verblühtet
+verblümt
+verblümte
+verblümtem
+verblümten
+verblümter
+verblümtere
+verblümterem
+verblümteren
+verblümterer
+verblümteres
+verblümtes
+verblümteste
+verblümtestem
+verblümtesten
+verblümtester
+verblümtestes
+verbog
+verbogen
+verbogene
+verbogenem
+verbogenen
+verbogener
+verbogenere
+verbogenerem
+verbogeneren
+verbogenerer
+verbogeneres
+verbogenes
+verbogenste
+verbogenstem
+verbogensten
+verbogenster
+verbogenstes
+verbogst
+verbogt
+verbohre
+verbohren
+verbohrend
+verbohrende
+verbohrendem
+verbohrenden
+verbohrender
+verbohrendes
+verbohrst
+verbohrt
+verbohrte
+verbohrtem
+verbohrten
+verbohrter
+verbohrtere
+verbohrterem
+verbohrteren
+verbohrterer
+verbohrteres
+verbohrtes
+verbohrtest
+verbohrteste
+verbohrtestem
+verbohrtesten
+verbohrtester
+verbohrtestes
+verbohrtet
+verborgen
+verborgene
+verborgenem
+verborgenen
+verborgener
+verborgenere
+verborgenerem
+verborgeneren
+verborgenerer
+verborgeneres
+verborgenes
+verborgenste
+verborgenstem
+verborgensten
+verborgenster
+verborgenstes
+verbot
+verboten
+verbotene
+verbotenem
+verbotenen
+verbotener
+verbotenes
+verbotest
+verbotet
+verbotst
+verbracht
+verbrachte
+verbrachtem
+verbrachten
+verbrachter
+verbrachtes
+verbrachtest
+verbrachtet
+verbrannt
+verbrannte
+verbranntem
+verbrannten
+verbrannter
+verbranntes
+verbranntest
+verbranntet
+verbrauche
+verbrauchen
+verbrauchend
+verbrauchende
+verbrauchendem
+verbrauchenden
+verbrauchender
+verbrauchendes
+verbrauchst
+verbraucht
+verbrauchte
+verbrauchtem
+verbrauchten
+verbrauchter
+verbrauchtes
+verbrauchtest
+verbrauchtet
+verbreche
+verbrechen
+verbrechend
+verbrechende
+verbrechendem
+verbrechenden
+verbrechender
+verbrechendes
+verbrecherisch
+verbrecherische
+verbrecherischem
+verbrecherischen
+verbrecherischer
+verbrecherischere
+verbrecherischerem
+verbrecherischeren
+verbrecherischerer
+verbrecherischeres
+verbrecherisches
+verbrecherischste
+verbrecherischstem
+verbrecherischsten
+verbrecherischster
+verbrecherischstes
+verbrecht
+verbreite
+verbreiten
+verbreitend
+verbreitende
+verbreitendem
+verbreitenden
+verbreitender
+verbreitendes
+verbreitere
+verbreitern
+verbreiternd
+verbreiternde
+verbreiterndem
+verbreiternden
+verbreiternder
+verbreiterndes
+verbreiterst
+verbreitert
+verbreiterte
+verbreitertem
+verbreiterten
+verbreiterter
+verbreitertes
+verbreitertest
+verbreitertet
+verbreitest
+verbreitet
+verbreitete
+verbreitetem
+verbreiteten
+verbreiteter
+verbreitetere
+verbreiteterem
+verbreiteteren
+verbreiteterer
+verbreiteteres
+verbreitetes
+verbreitetest
+verbreitetet
+verbreitetste
+verbreitetstem
+verbreitetsten
+verbreitetster
+verbreitetstes
+verbreitre
+verbrenne
+verbrennen
+verbrennend
+verbrennende
+verbrennendem
+verbrennenden
+verbrennender
+verbrennendes
+verbrennst
+verbrennt
+verbrichst
+verbricht
+verbriefe
+verbriefen
+verbriefend
+verbriefende
+verbriefendem
+verbriefenden
+verbriefender
+verbriefendes
+verbriefst
+verbrieft
+verbriefte
+verbrieftem
+verbrieften
+verbriefter
+verbrieftes
+verbrieftest
+verbrieftet
+verbring
+verbringe
+verbringen
+verbringend
+verbringende
+verbringendem
+verbringenden
+verbringender
+verbringendes
+verbringst
+verbringt
+verbrochen
+verbrochene
+verbrochenem
+verbrochenen
+verbrochener
+verbrochenes
+verbrüdere
+verbrüdern
+verbrüdernd
+verbrüdernde
+verbrüderndem
+verbrüdernden
+verbrüdernder
+verbrüderndes
+verbrüderst
+verbrüdert
+verbrüderte
+verbrüdertem
+verbrüderten
+verbrüderter
+verbrüdertes
+verbrüdertest
+verbrüdertet
+verbrüdre
+verbrühe
+verbrühen
+verbrühend
+verbrühende
+verbrühendem
+verbrühenden
+verbrühender
+verbrühendes
+verbrühst
+verbrüht
+verbrühte
+verbrühtem
+verbrühten
+verbrühter
+verbrühtes
+verbrühtest
+verbrühtet
+verbttere
+verbttern
+verbtternd
+verbtternde
+verbtterndem
+verbtternden
+verbtternder
+verbtterndes
+verbtterst
+verbttert
+verbtterte
+verbttertem
+verbtterten
+verbtterter
+verbttertes
+verbttertest
+verbttertet
+verbttre
+verbuche
+verbuchen
+verbuchend
+verbuchende
+verbuchendem
+verbuchenden
+verbuchender
+verbuchendes
+verbuchst
+verbucht
+verbuchte
+verbuchtem
+verbuchten
+verbuchter
+verbuchtes
+verbuchtest
+verbuchtet
+verbummele
+verbummeln
+verbummelnd
+verbummelnde
+verbummelndem
+verbummelnden
+verbummelnder
+verbummelndes
+verbummelst
+verbummelt
+verbummelte
+verbummeltem
+verbummelten
+verbummelter
+verbummeltes
+verbummeltest
+verbummeltet
+verbummle
+verbunden
+verbundene
+verbundenem
+verbundenen
+verbundener
+verbundenes
+verbünde
+verbünden
+verbündend
+verbündende
+verbündendem
+verbündenden
+verbündender
+verbündendes
+verbündest
+verbündet
+verbündete
+verbündetem
+verbündeten
+verbündeter
+verbündetes
+verbündetest
+verbündetet
+verbürge
+verbürgen
+verbürgend
+verbürgende
+verbürgendem
+verbürgenden
+verbürgender
+verbürgendes
+verbürgst
+verbürgt
+verbürgte
+verbürgtem
+verbürgten
+verbürgter
+verbürgtes
+verbürgtest
+verbürgtet
+verbüße
+verbüßen
+verbüßend
+verbüßende
+verbüßendem
+verbüßenden
+verbüßender
+verbüßendes
+verbüßest
+verbüßt
+verbüßte
+verbüßtem
+verbüßten
+verbüßter
+verbüßtes
+verbüßtest
+verbüßtet
+verchromt
+verchromte
+verchromtem
+verchromten
+verchromter
+verchromtes
+verdacht
+verdachte
+verdachtem
+verdachten
+verdachter
+verdachtes
+verdamme
+verdammen
+verdammend
+verdammende
+verdammendem
+verdammenden
+verdammender
+verdammendes
+verdammenswert
+verdammenswerte
+verdammenswertem
+verdammenswerten
+verdammenswerter
+verdammenswertere
+verdammenswerterem
+verdammenswerteren
+verdammenswerterer
+verdammenswerteres
+verdammenswertes
+verdammenswerteste
+verdammenswertestem
+verdammenswertesten
+verdammenswertester
+verdammenswertestes
+verdammlich
+verdammliche
+verdammlichem
+verdammlichen
+verdammlicher
+verdammlichere
+verdammlicherem
+verdammlicheren
+verdammlicherer
+verdammlicheres
+verdammliches
+verdammlichste
+verdammlichstem
+verdammlichsten
+verdammlichster
+verdammlichstes
+verdammst
+verdammt
+verdammte
+verdammtem
+verdammten
+verdammter
+verdammtere
+verdammterem
+verdammteren
+verdammterer
+verdammteres
+verdammtes
+verdammtest
+verdammteste
+verdammtestem
+verdammtesten
+verdammtester
+verdammtestes
+verdammtet
+verdampfe
+verdampfen
+verdampfend
+verdampfende
+verdampfendem
+verdampfenden
+verdampfender
+verdampfendes
+verdampfst
+verdampft
+verdampfte
+verdampftem
+verdampften
+verdampfter
+verdampftes
+verdampftest
+verdampftet
+verdanke
+verdanken
+verdankend
+verdankende
+verdankendem
+verdankenden
+verdankender
+verdankendes
+verdankst
+verdankt
+verdankte
+verdanktem
+verdankten
+verdankter
+verdanktes
+verdanktest
+verdanktet
+verdarb
+verdarben
+verdarbst
+verdarbt
+verdate
+verdaten
+verdatend
+verdatende
+verdatendem
+verdatenden
+verdatender
+verdatendes
+verdatest
+verdatet
+verdatete
+verdatetem
+verdateten
+verdateter
+verdatetes
+verdatetest
+verdatetet
+verdattere
+verdattern
+verdatternd
+verdatternde
+verdatterndem
+verdatternden
+verdatternder
+verdatterndes
+verdatterst
+verdattert
+verdatterte
+verdattertem
+verdatterten
+verdatterter
+verdattertes
+verdattertest
+verdattertet
+verdattre
+verdaue
+verdauen
+verdauend
+verdauende
+verdauendem
+verdauenden
+verdauender
+verdauendes
+verdaulich
+verdauliche
+verdaulichem
+verdaulichen
+verdaulicher
+verdaulichere
+verdaulicherem
+verdaulicheren
+verdaulicherer
+verdaulicheres
+verdauliches
+verdaulichste
+verdaulichstem
+verdaulichsten
+verdaulichster
+verdaulichstes
+verdaust
+verdaut
+verdaute
+verdautem
+verdauten
+verdauter
+verdautes
+verdautest
+verdautet
+verdecke
+verdecken
+verdeckend
+verdeckende
+verdeckendem
+verdeckenden
+verdeckender
+verdeckendes
+verdeckst
+verdeckt
+verdeckte
+verdecktem
+verdeckten
+verdeckter
+verdecktes
+verdecktest
+verdecktet
+verdenke
+verdenken
+verdenkend
+verdenkende
+verdenkendem
+verdenkenden
+verdenkender
+verdenkendes
+verdenkst
+verdenkt
+verderbe
+verderben
+verderbend
+verderbende
+verderbendem
+verderbenden
+verderbender
+verderbendes
+verderblich
+verderbliche
+verderblichem
+verderblichen
+verderblicher
+verderblichere
+verderblicherem
+verderblicheren
+verderblicherer
+verderblicheres
+verderbliches
+verderblichste
+verderblichstem
+verderblichsten
+verderblichster
+verderblichstes
+verderbt
+verderbtem
+verderbter
+verderbtes
+verdeutliche
+verdeutlichen
+verdeutlichend
+verdeutlichende
+verdeutlichendem
+verdeutlichenden
+verdeutlichender
+verdeutlichendes
+verdeutlichst
+verdeutlicht
+verdeutlichte
+verdeutlichtem
+verdeutlichten
+verdeutlichter
+verdeutlichtes
+verdeutlichtest
+verdeutlichtet
+verdeutsche
+verdeutschen
+verdeutschend
+verdeutschende
+verdeutschendem
+verdeutschenden
+verdeutschender
+verdeutschendes
+verdeutschest
+verdeutschst
+verdeutscht
+verdeutschte
+verdeutschtem
+verdeutschten
+verdeutschter
+verdeutschtes
+verdeutschtest
+verdeutschtet
+verdichte
+verdichten
+verdichtend
+verdichtende
+verdichtendem
+verdichtenden
+verdichtender
+verdichtendes
+verdichtest
+verdichtet
+verdichtete
+verdichtetem
+verdichteten
+verdichteter
+verdichtetes
+verdichtetest
+verdichtetet
+verdicke
+verdicken
+verdickend
+verdickende
+verdickendem
+verdickenden
+verdickender
+verdickendes
+verdickst
+verdickt
+verdickte
+verdicktem
+verdickten
+verdickter
+verdicktes
+verdicktest
+verdicktet
+verdiene
+verdienen
+verdienend
+verdienende
+verdienendem
+verdienenden
+verdienender
+verdienendes
+verdienst
+verdienstvoll
+verdienstvolle
+verdienstvollem
+verdienstvollen
+verdienstvoller
+verdienstvollere
+verdienstvollerem
+verdienstvolleren
+verdienstvollerer
+verdienstvolleres
+verdienstvolles
+verdienstvollste
+verdienstvollstem
+verdienstvollsten
+verdienstvollster
+verdienstvollstes
+verdient
+verdiente
+verdientem
+verdienten
+verdienter
+verdientermaßen
+verdienterweise
+verdientes
+verdientest
+verdientet
+verdinge
+verdingen
+verdingend
+verdingende
+verdingendem
+verdingenden
+verdingender
+verdingendes
+verdingst
+verdingt
+verdingte
+verdingtem
+verdingten
+verdingter
+verdingtes
+verdingtest
+verdingtet
+verdolmetsche
+verdolmetschen
+verdolmetschend
+verdolmetschende
+verdolmetschendem
+verdolmetschenden
+verdolmetschender
+verdolmetschendes
+verdolmetschest
+verdolmetschst
+verdolmetscht
+verdolmetschte
+verdolmetschtem
+verdolmetschten
+verdolmetschter
+verdolmetschtes
+verdolmetschtest
+verdolmetschtet
+verdonnere
+verdonnern
+verdonnernd
+verdonnernde
+verdonnerndem
+verdonnernden
+verdonnernder
+verdonnerndes
+verdonnerst
+verdonnert
+verdonnerte
+verdonnertem
+verdonnerten
+verdonnerter
+verdonnertes
+verdonnertest
+verdonnertet
+verdonnre
+verdoppele
+verdoppeln
+verdoppelnd
+verdoppelnde
+verdoppelndem
+verdoppelnden
+verdoppelnder
+verdoppelndes
+verdoppelst
+verdoppelt
+verdoppelte
+verdoppeltem
+verdoppelten
+verdoppelter
+verdoppeltes
+verdoppeltest
+verdoppeltet
+verdopple
+verdorben
+verdorbene
+verdorbenem
+verdorbenen
+verdorbener
+verdorbenere
+verdorbenerem
+verdorbeneren
+verdorbenerer
+verdorbeneres
+verdorbenes
+verdorbenste
+verdorbenstem
+verdorbensten
+verdorbenster
+verdorbenstes
+verdorre
+verdorren
+verdorrend
+verdorrende
+verdorrendem
+verdorrenden
+verdorrender
+verdorrendes
+verdorrst
+verdorrt
+verdorrte
+verdorrtem
+verdorrten
+verdorrter
+verdorrtes
+verdorrtest
+verdorrtet
+verdrahte
+verdrahten
+verdrahtend
+verdrahtende
+verdrahtendem
+verdrahtenden
+verdrahtender
+verdrahtendes
+verdrahtest
+verdrahtet
+verdrahtete
+verdrahtetem
+verdrahteten
+verdrahteter
+verdrahtetes
+verdrahtetest
+verdrahtetet
+verdreckt
+verdreckte
+verdrecktem
+verdreckten
+verdreckter
+verdrecktes
+verdrehe
+verdrehen
+verdrehend
+verdrehende
+verdrehendem
+verdrehenden
+verdrehender
+verdrehendes
+verdrehst
+verdreht
+verdrehte
+verdrehtem
+verdrehten
+verdrehter
+verdrehtes
+verdrehtest
+verdrehtet
+verdreifache
+verdreifachen
+verdreifachend
+verdreifachende
+verdreifachendem
+verdreifachenden
+verdreifachender
+verdreifachendes
+verdreifachst
+verdreifacht
+verdreifachte
+verdreifachtem
+verdreifachten
+verdreifachter
+verdreifachtes
+verdreifachtest
+verdreifachtet
+verdresche
+verdreschen
+verdreschend
+verdreschende
+verdreschendem
+verdreschenden
+verdreschender
+verdreschendes
+verdrescht
+verdrieße
+verdrießen
+verdrießend
+verdrießende
+verdrießendem
+verdrießenden
+verdrießender
+verdrießendes
+verdrießest
+verdrießlich
+verdrießliche
+verdrießlichem
+verdrießlichen
+verdrießlicher
+verdrießlichere
+verdrießlicherem
+verdrießlicheren
+verdrießlicherer
+verdrießlicheres
+verdrießliches
+verdrießlichste
+verdrießlichstem
+verdrießlichsten
+verdrießlichster
+verdrießlichstes
+verdrießt
+verdrießte
+verdrießtem
+verdrießten
+verdrießter
+verdrießtes
+verdrille
+verdrillen
+verdrillend
+verdrillende
+verdrillendem
+verdrillenden
+verdrillender
+verdrillendes
+verdrillst
+verdrillt
+verdrillte
+verdrilltem
+verdrillten
+verdrillter
+verdrilltes
+verdrilltest
+verdrilltet
+verdrosch
+verdroschen
+verdroschene
+verdroschenem
+verdroschenen
+verdroschener
+verdroschenes
+verdroschest
+verdroscht
+verdross
+verdrossen
+verdrossene
+verdrossenem
+verdrossenen
+verdrossener
+verdrossenere
+verdrossenerem
+verdrosseneren
+verdrossenerer
+verdrosseneres
+verdrossenes
+verdrossenste
+verdrossenstem
+verdrossensten
+verdrossenster
+verdrossenstes
+verdrossest
+verdrosst
+verdrucke
+verdrucken
+verdruckend
+verdruckende
+verdruckendem
+verdruckenden
+verdruckender
+verdruckendes
+verdruckst
+verdruckt
+verdruckte
+verdrucktem
+verdruckten
+verdruckter
+verdrucktes
+verdrucktest
+verdrucktet
+verdränge
+verdrängen
+verdrängend
+verdrängende
+verdrängendem
+verdrängenden
+verdrängender
+verdrängendes
+verdrängst
+verdrängt
+verdrängte
+verdrängtem
+verdrängten
+verdrängter
+verdrängtes
+verdrängtest
+verdrängtet
+verdrücke
+verdrücken
+verdrückend
+verdrückende
+verdrückendem
+verdrückenden
+verdrückender
+verdrückendes
+verdrückst
+verdrückt
+verdrückte
+verdrücktem
+verdrückten
+verdrückter
+verdrücktes
+verdrücktest
+verdrücktet
+verdufte
+verduften
+verduftend
+verduftende
+verduftendem
+verduftenden
+verduftender
+verduftendes
+verduftest
+verduftet
+verduftete
+verduftetem
+verdufteten
+verdufteter
+verduftetes
+verduftetest
+verduftetet
+verdumme
+verdummen
+verdummend
+verdummende
+verdummendem
+verdummenden
+verdummender
+verdummendes
+verdummst
+verdummt
+verdummte
+verdummtem
+verdummten
+verdummter
+verdummtes
+verdummtest
+verdummtet
+verdunkele
+verdunkeln
+verdunkelnd
+verdunkelnde
+verdunkelndem
+verdunkelnden
+verdunkelnder
+verdunkelndes
+verdunkelst
+verdunkelt
+verdunkelte
+verdunkeltem
+verdunkelten
+verdunkelter
+verdunkeltes
+verdunkeltest
+verdunkeltet
+verdunkle
+verdunste
+verdunsten
+verdunstend
+verdunstende
+verdunstendem
+verdunstenden
+verdunstender
+verdunstendes
+verdunstest
+verdunstet
+verdunstete
+verdunstetem
+verdunsteten
+verdunsteter
+verdunstetes
+verdunstetest
+verdunstetet
+verdurste
+verdursten
+verdurstend
+verdurstende
+verdurstendem
+verdurstenden
+verdurstender
+verdurstendes
+verdurstest
+verdurstet
+verdurstete
+verdurstetem
+verdursteten
+verdursteter
+verdurstetes
+verdurstetest
+verdurstetet
+verdutze
+verdutzen
+verdutzend
+verdutzende
+verdutzendem
+verdutzenden
+verdutzender
+verdutzendes
+verdutzest
+verdutzt
+verdutzte
+verdutztem
+verdutzten
+verdutzter
+verdutztes
+verdutztest
+verdutztet
+verdächtig
+verdächtige
+verdächtigem
+verdächtigen
+verdächtigend
+verdächtigende
+verdächtigendem
+verdächtigenden
+verdächtigender
+verdächtigendes
+verdächtiger
+verdächtigere
+verdächtigerem
+verdächtigeren
+verdächtigerer
+verdächtigeres
+verdächtiges
+verdächtigst
+verdächtigste
+verdächtigstem
+verdächtigsten
+verdächtigster
+verdächtigstes
+verdächtigt
+verdächtigte
+verdächtigtem
+verdächtigten
+verdächtigter
+verdächtigtes
+verdächtigtest
+verdächtigtet
+verdünne
+verdünnen
+verdünnend
+verdünnende
+verdünnendem
+verdünnenden
+verdünnender
+verdünnendes
+verdünnisiere
+verdünnisieren
+verdünnisierend
+verdünnisierende
+verdünnisierendem
+verdünnisierenden
+verdünnisierender
+verdünnisierendes
+verdünnisierst
+verdünnisiert
+verdünnisierte
+verdünnisiertem
+verdünnisierten
+verdünnisierter
+verdünnisiertes
+verdünnisiertest
+verdünnisiertet
+verdünnst
+verdünnt
+verdünnte
+verdünntem
+verdünnten
+verdünnter
+verdünntere
+verdünnterem
+verdünnteren
+verdünnterer
+verdünnteres
+verdünntes
+verdünntest
+verdünnteste
+verdünntestem
+verdünntesten
+verdünntester
+verdünntestes
+verdünntet
+verdüstere
+verdüstern
+verdüsternd
+verdüsternde
+verdüsterndem
+verdüsternden
+verdüsternder
+verdüsterndes
+verdüsterst
+verdüstert
+verdüsterte
+verdüstertem
+verdüsterten
+verdüsterter
+verdüstertes
+verdüstertest
+verdüstertet
+verdüstre
+verebbe
+verebben
+verebbend
+verebbende
+verebbendem
+verebbenden
+verebbender
+verebbendes
+verebbst
+verebbt
+verebbte
+verebbtem
+verebbten
+verebbter
+verebbtes
+verebbtest
+verebbtet
+veredele
+veredeln
+veredelnd
+veredelnde
+veredelndem
+veredelnden
+veredelnder
+veredelndes
+veredelst
+veredelt
+veredelte
+veredeltem
+veredelten
+veredelter
+veredeltes
+veredeltest
+veredeltet
+veredle
+vereheliche
+verehelichen
+verehelichend
+verehelichende
+verehelichendem
+verehelichenden
+verehelichender
+verehelichendes
+verehelichst
+verehelicht
+verehelichte
+verehelichtem
+verehelichten
+verehelichter
+verehelichtes
+verehelichtest
+verehelichtet
+verehre
+verehren
+verehrend
+verehrende
+verehrendem
+verehrenden
+verehrender
+verehrendes
+verehrenswert
+verehrenswerte
+verehrenswertem
+verehrenswerten
+verehrenswerter
+verehrenswertere
+verehrenswerterem
+verehrenswerteren
+verehrenswerterer
+verehrenswerteres
+verehrenswertes
+verehrenswerteste
+verehrenswertestem
+verehrenswertesten
+verehrenswertester
+verehrenswertestes
+verehrlicht
+verehrlichte
+verehrlichtem
+verehrlichten
+verehrlichter
+verehrlichtes
+verehrst
+verehrt
+verehrte
+verehrtem
+verehrten
+verehrter
+verehrtes
+verehrtest
+verehrtet
+verehrungswürdig
+verehrungswürdige
+verehrungswürdigem
+verehrungswürdigen
+verehrungswürdiger
+verehrungswürdigere
+verehrungswürdigerem
+verehrungswürdigeren
+verehrungswürdigerer
+verehrungswürdigeres
+verehrungswürdiges
+verehrungswürdigste
+verehrungswürdigstem
+verehrungswürdigsten
+verehrungswürdigster
+verehrungswürdigstes
+vereidige
+vereidigen
+vereidigend
+vereidigende
+vereidigendem
+vereidigenden
+vereidigender
+vereidigendes
+vereidigst
+vereidigt
+vereidigte
+vereidigtem
+vereidigten
+vereidigter
+vereidigtes
+vereidigtest
+vereidigtet
+vereinbar
+vereinbare
+vereinbarem
+vereinbaren
+vereinbarend
+vereinbarende
+vereinbarendem
+vereinbarenden
+vereinbarender
+vereinbarendes
+vereinbarer
+vereinbares
+vereinbarst
+vereinbart
+vereinbarte
+vereinbartem
+vereinbarten
+vereinbarter
+vereinbartes
+vereinbartest
+vereinbartet
+vereinbarungsgemäß
+vereinbarungsgemäße
+vereinbarungsgemäßem
+vereinbarungsgemäßen
+vereinbarungsgemäßer
+vereinbarungsgemäßes
+vereine
+vereinen
+vereinend
+vereinende
+vereinendem
+vereinenden
+vereinender
+vereinendes
+vereinfache
+vereinfachen
+vereinfachend
+vereinfachende
+vereinfachendem
+vereinfachenden
+vereinfachender
+vereinfachendes
+vereinfachst
+vereinfacht
+vereinfachte
+vereinfachtem
+vereinfachten
+vereinfachter
+vereinfachtes
+vereinfachtest
+vereinfachtet
+vereinheitliche
+vereinheitlichen
+vereinheitlichend
+vereinheitlichende
+vereinheitlichendem
+vereinheitlichenden
+vereinheitlichender
+vereinheitlichendes
+vereinheitlichst
+vereinheitlicht
+vereinheitlichte
+vereinheitlichtem
+vereinheitlichten
+vereinheitlichter
+vereinheitlichtes
+vereinheitlichtest
+vereinheitlichtet
+vereinige
+vereinigen
+vereinigend
+vereinigende
+vereinigendem
+vereinigenden
+vereinigender
+vereinigendes
+vereinigst
+vereinigt
+vereinigte
+vereinigtem
+vereinigten
+vereinigter
+vereinigtes
+vereinigtest
+vereinigtet
+vereinnahme
+vereinnahmen
+vereinnahmend
+vereinnahmende
+vereinnahmendem
+vereinnahmenden
+vereinnahmender
+vereinnahmendes
+vereinnahmst
+vereinnahmt
+vereinnahmte
+vereinnahmtem
+vereinnahmten
+vereinnahmter
+vereinnahmtes
+vereinnahmtest
+vereinnahmtet
+vereinsame
+vereinsamen
+vereinsamend
+vereinsamende
+vereinsamendem
+vereinsamenden
+vereinsamender
+vereinsamendes
+vereinsamst
+vereinsamt
+vereinsamte
+vereinsamtem
+vereinsamten
+vereinsamter
+vereinsamtere
+vereinsamterem
+vereinsamteren
+vereinsamterer
+vereinsamteres
+vereinsamtes
+vereinsamtest
+vereinsamteste
+vereinsamtestem
+vereinsamtesten
+vereinsamtester
+vereinsamtestes
+vereinsamtet
+vereinst
+vereint
+vereinte
+vereintem
+vereinten
+vereinter
+vereintes
+vereintest
+vereintet
+vereinzele
+vereinzeln
+vereinzelnd
+vereinzelnde
+vereinzelndem
+vereinzelnden
+vereinzelnder
+vereinzelndes
+vereinzelst
+vereinzelt
+vereinzelte
+vereinzeltem
+vereinzelten
+vereinzelter
+vereinzeltes
+vereinzeltest
+vereinzeltet
+vereinzle
+vereise
+vereisen
+vereisend
+vereisende
+vereisendem
+vereisenden
+vereisender
+vereisendes
+vereisest
+vereist
+vereiste
+vereistem
+vereisten
+vereister
+vereistes
+vereistest
+vereistet
+vereitele
+vereiteln
+vereitelnd
+vereitelnde
+vereitelndem
+vereitelnden
+vereitelnder
+vereitelndes
+vereitelst
+vereitelt
+vereitelte
+vereiteltem
+vereitelten
+vereitelter
+vereiteltes
+vereiteltest
+vereiteltet
+vereitere
+vereitern
+vereiternd
+vereiternde
+vereiterndem
+vereiternden
+vereiternder
+vereiterndes
+vereiterst
+vereitert
+vereiterte
+vereitertem
+vereiterten
+vereiterter
+vereitertes
+vereitertest
+vereitertet
+vereitle
+vereitre
+verekele
+verekeln
+verekelnd
+verekelnde
+verekelndem
+verekelnden
+verekelnder
+verekelndes
+verekelst
+verekelt
+verekelte
+verekeltem
+verekelten
+verekelter
+verekeltes
+verekeltest
+verekeltet
+verekle
+verelende
+verelenden
+verelendend
+verelendende
+verelendendem
+verelendenden
+verelendender
+verelendendes
+verelendest
+verelendet
+verelendete
+verelendetem
+verelendeten
+verelendeter
+verelendetes
+verelendetest
+verelendetet
+verende
+verenden
+verendend
+verendende
+verendendem
+verendenden
+verendender
+verendendes
+verendest
+verendet
+verendete
+verendetem
+verendeten
+verendeter
+verendetes
+verendetest
+verendetet
+verenge
+verengen
+verengend
+verengende
+verengendem
+verengenden
+verengender
+verengendes
+verengst
+verengt
+verengte
+verengtem
+verengten
+verengter
+verengtes
+verengtest
+verengtet
+vererbe
+vererben
+vererbend
+vererbende
+vererbendem
+vererbenden
+vererbender
+vererbendes
+vererbst
+vererbt
+vererbte
+vererbtem
+vererbten
+vererbter
+vererbtes
+vererbtest
+vererbtet
+verewige
+verewigen
+verewigend
+verewigende
+verewigendem
+verewigenden
+verewigender
+verewigendes
+verewigst
+verewigt
+verewigte
+verewigtem
+verewigten
+verewigter
+verewigtes
+verewigtest
+verewigtet
+verfahre
+verfahren
+verfahrend
+verfahrende
+verfahrendem
+verfahrenden
+verfahrender
+verfahrendes
+verfahrene
+verfahrenem
+verfahrenen
+verfahrener
+verfahrenes
+verfahrenstechnisch
+verfahrenstechnische
+verfahrenstechnischem
+verfahrenstechnischen
+verfahrenstechnischer
+verfahrenstechnisches
+verfahrt
+verfalle
+verfallen
+verfallend
+verfallende
+verfallendem
+verfallenden
+verfallender
+verfallendes
+verfallene
+verfallenem
+verfallenen
+verfallener
+verfallenes
+verfallt
+verfange
+verfangen
+verfangend
+verfangende
+verfangendem
+verfangenden
+verfangender
+verfangendes
+verfangene
+verfangenem
+verfangenen
+verfangener
+verfangenes
+verfangt
+verfasse
+verfassen
+verfassend
+verfassende
+verfassendem
+verfassenden
+verfassender
+verfassendes
+verfassest
+verfasst
+verfasste
+verfasstem
+verfassten
+verfasster
+verfasstes
+verfasstest
+verfasstet
+verfaule
+verfaulen
+verfaulend
+verfaulende
+verfaulendem
+verfaulenden
+verfaulender
+verfaulendes
+verfaulst
+verfault
+verfaulte
+verfaultem
+verfaulten
+verfaulter
+verfaultere
+verfaulterem
+verfaulteren
+verfaulterer
+verfaulteres
+verfaultes
+verfaultest
+verfaulteste
+verfaultestem
+verfaultesten
+verfaultester
+verfaultestes
+verfaultet
+verfechte
+verfechten
+verfechtend
+verfechtende
+verfechtendem
+verfechtenden
+verfechtender
+verfechtendes
+verfechtest
+verfechtet
+verfehle
+verfehlen
+verfehlend
+verfehlende
+verfehlendem
+verfehlenden
+verfehlender
+verfehlendes
+verfehlst
+verfehlt
+verfehlte
+verfehltem
+verfehlten
+verfehlter
+verfehltes
+verfehltest
+verfehltet
+verfeinde
+verfeinden
+verfeindend
+verfeindende
+verfeindendem
+verfeindenden
+verfeindender
+verfeindendes
+verfeindest
+verfeindet
+verfeindete
+verfeindetem
+verfeindeten
+verfeindeter
+verfeindetes
+verfeindetest
+verfeindetet
+verfeinere
+verfeinern
+verfeinernd
+verfeinernde
+verfeinerndem
+verfeinernden
+verfeinernder
+verfeinerndes
+verfeinerst
+verfeinert
+verfeinerte
+verfeinertem
+verfeinerten
+verfeinerter
+verfeinertes
+verfeinertest
+verfeinertet
+verfeinre
+verfeme
+verfemen
+verfemend
+verfemende
+verfemendem
+verfemenden
+verfemender
+verfemendes
+verfemst
+verfemt
+verfemte
+verfemtem
+verfemten
+verfemter
+verfemtes
+verfemtest
+verfemtet
+verfertige
+verfertigen
+verfertigend
+verfertigende
+verfertigendem
+verfertigenden
+verfertigender
+verfertigendes
+verfertigst
+verfertigt
+verfertigte
+verfertigtem
+verfertigten
+verfertigter
+verfertigtes
+verfertigtest
+verfertigtet
+verfestige
+verfestigen
+verfestigend
+verfestigende
+verfestigendem
+verfestigenden
+verfestigender
+verfestigendes
+verfestigst
+verfestigt
+verfestigte
+verfestigtem
+verfestigten
+verfestigter
+verfestigtes
+verfestigtest
+verfestigtet
+verfeuere
+verfeuern
+verfeuernd
+verfeuernde
+verfeuerndem
+verfeuernden
+verfeuernder
+verfeuerndes
+verfeuerst
+verfeuert
+verfeuerte
+verfeuertem
+verfeuerten
+verfeuerter
+verfeuertes
+verfeuertest
+verfeuertet
+verfeure
+verficht
+verfichtst
+verfiel
+verfiele
+verfielen
+verfielst
+verfielt
+verfilmbar
+verfilmbare
+verfilmbarem
+verfilmbaren
+verfilmbarer
+verfilmbares
+verfilme
+verfilmen
+verfilmend
+verfilmende
+verfilmendem
+verfilmenden
+verfilmender
+verfilmendes
+verfilmst
+verfilmt
+verfilmte
+verfilmtem
+verfilmten
+verfilmter
+verfilmtes
+verfilmtest
+verfilmtet
+verfilze
+verfilzen
+verfilzend
+verfilzende
+verfilzendem
+verfilzenden
+verfilzender
+verfilzendes
+verfilzest
+verfilzt
+verfilzte
+verfilztem
+verfilzten
+verfilzter
+verfilztes
+verfilztest
+verfilztet
+verfing
+verfingen
+verfingst
+verfingt
+verfinstere
+verfinstern
+verfinsternd
+verfinsternde
+verfinsterndem
+verfinsternden
+verfinsternder
+verfinsterndes
+verfinsterst
+verfinstert
+verfinsterte
+verfinstertem
+verfinsterten
+verfinsterter
+verfinstertes
+verfinstertest
+verfinstertet
+verfinstre
+verflache
+verflachen
+verflachend
+verflachende
+verflachendem
+verflachenden
+verflachender
+verflachendes
+verflachst
+verflacht
+verflachte
+verflachtem
+verflachten
+verflachter
+verflachtes
+verflachtest
+verflachtet
+verflechte
+verflechten
+verflechtend
+verflechtende
+verflechtendem
+verflechtenden
+verflechtender
+verflechtendes
+verflechtet
+verflichst
+verflicht
+verfliege
+verfliegen
+verfliegend
+verfliegende
+verfliegendem
+verfliegenden
+verfliegender
+verfliegendes
+verfliegst
+verfliegt
+verfließe
+verfließen
+verfließend
+verfließende
+verfließendem
+verfließenden
+verfließender
+verfließendes
+verfließest
+verfließt
+verflixt
+verflixte
+verflixtem
+verflixten
+verflixter
+verflixtere
+verflixterem
+verflixteren
+verflixterer
+verflixteres
+verflixtes
+verflixteste
+verflixtestem
+verflixtesten
+verflixtester
+verflixtestes
+verflocht
+verflochten
+verflochtene
+verflochtenem
+verflochtenen
+verflochtener
+verflochtenes
+verflochtest
+verflochtet
+verflochtst
+verflog
+verflogen
+verflogene
+verflogenem
+verflogenen
+verflogener
+verflogenes
+verflogst
+verflogt
+verfloss
+verflossen
+verflossene
+verflossenem
+verflossenen
+verflossener
+verflossenes
+verflossest
+verflosst
+verfluche
+verfluchen
+verfluchend
+verfluchende
+verfluchendem
+verfluchenden
+verfluchender
+verfluchendes
+verfluchst
+verflucht
+verfluchte
+verfluchtem
+verfluchten
+verfluchter
+verfluchtere
+verfluchterem
+verfluchteren
+verfluchterer
+verfluchteres
+verfluchtes
+verfluchtest
+verfluchteste
+verfluchtestem
+verfluchtesten
+verfluchtester
+verfluchtestes
+verfluchtet
+verflüchtige
+verflüchtigen
+verflüchtigend
+verflüchtigende
+verflüchtigendem
+verflüchtigenden
+verflüchtigender
+verflüchtigendes
+verflüchtigst
+verflüchtigt
+verflüchtigte
+verflüchtigtem
+verflüchtigten
+verflüchtigter
+verflüchtigtes
+verflüchtigtest
+verflüchtigtet
+verflüssigbar
+verflüssigbare
+verflüssigbarem
+verflüssigbaren
+verflüssigbarer
+verflüssigbares
+verflüssige
+verflüssigen
+verflüssigend
+verflüssigende
+verflüssigendem
+verflüssigenden
+verflüssigender
+verflüssigendes
+verflüssigst
+verflüssigt
+verflüssigte
+verflüssigtem
+verflüssigten
+verflüssigter
+verflüssigtes
+verflüssigtest
+verflüssigtet
+verfocht
+verfochten
+verfochtene
+verfochtenem
+verfochtenen
+verfochtener
+verfochtenes
+verfochtest
+verfochtet
+verfochtst
+verfolge
+verfolgen
+verfolgend
+verfolgende
+verfolgendem
+verfolgenden
+verfolgender
+verfolgendes
+verfolgst
+verfolgt
+verfolgte
+verfolgtem
+verfolgten
+verfolgter
+verfolgtes
+verfolgtest
+verfolgtet
+verformbar
+verformbare
+verformbarem
+verformbaren
+verformbarer
+verformbares
+verforme
+verformen
+verformend
+verformende
+verformendem
+verformenden
+verformender
+verformendes
+verformst
+verformt
+verformte
+verformtem
+verformten
+verformter
+verformtes
+verformtest
+verformtet
+verfrachte
+verfrachten
+verfrachtend
+verfrachtende
+verfrachtendem
+verfrachtenden
+verfrachtender
+verfrachtendes
+verfrachtest
+verfrachtet
+verfrachtete
+verfrachtetem
+verfrachteten
+verfrachteter
+verfrachtetes
+verfrachtetest
+verfrachtetet
+verfraß
+verfraßen
+verfraßest
+verfraßt
+verfremde
+verfremden
+verfremdend
+verfremdende
+verfremdendem
+verfremdenden
+verfremdender
+verfremdendes
+verfremdest
+verfremdet
+verfremdete
+verfremdetem
+verfremdeten
+verfremdeter
+verfremdetes
+verfremdetest
+verfremdetet
+verfriere
+verfrieren
+verfrierend
+verfrierende
+verfrierendem
+verfrierenden
+verfrierender
+verfrierendes
+verfrierst
+verfriert
+verfror
+verfroren
+verfrorene
+verfrorenem
+verfrorenen
+verfrorener
+verfrorenes
+verfrorst
+verfrort
+verfrüht
+verfrühte
+verfrühtem
+verfrühten
+verfrühter
+verfrühtes
+verfuhr
+verfuhren
+verfuhrst
+verfuhrt
+verfährst
+verfährt
+verfälsche
+verfälschen
+verfälschend
+verfälschende
+verfälschendem
+verfälschenden
+verfälschender
+verfälschendes
+verfälschest
+verfälschst
+verfälscht
+verfälschte
+verfälschtem
+verfälschten
+verfälschter
+verfälschtere
+verfälschterem
+verfälschteren
+verfälschterer
+verfälschteres
+verfälschtes
+verfälschtest
+verfälschteste
+verfälschtestem
+verfälschtesten
+verfälschtester
+verfälschtestes
+verfälschtet
+verfänglich
+verfängliche
+verfänglichem
+verfänglichen
+verfänglicher
+verfänglichere
+verfänglicherem
+verfänglicheren
+verfänglicherer
+verfänglicheres
+verfängliches
+verfänglichste
+verfänglichstem
+verfänglichsten
+verfänglichster
+verfänglichstes
+verfängst
+verfängt
+verfärbe
+verfärben
+verfärbend
+verfärbende
+verfärbendem
+verfärbenden
+verfärbender
+verfärbendes
+verfärbst
+verfärbt
+verfärbte
+verfärbtem
+verfärbten
+verfärbter
+verfärbtere
+verfärbterem
+verfärbteren
+verfärbterer
+verfärbteres
+verfärbtes
+verfärbtest
+verfärbteste
+verfärbtestem
+verfärbtesten
+verfärbtester
+verfärbtestes
+verfärbtet
+verfügbar
+verfügbare
+verfügbarem
+verfügbaren
+verfügbarer
+verfügbares
+verfüge
+verfügen
+verfügend
+verfügende
+verfügendem
+verfügenden
+verfügender
+verfügendes
+verfügst
+verfügt
+verfügte
+verfügtem
+verfügten
+verfügter
+verfügtes
+verfügtest
+verfügtet
+verführbar
+verführbare
+verführbarem
+verführbaren
+verführbarer
+verführbares
+verführe
+verführen
+verführend
+verführende
+verführendem
+verführenden
+verführender
+verführendes
+verführerisch
+verführerische
+verführerischem
+verführerischen
+verführerischer
+verführerischere
+verführerischerem
+verführerischeren
+verführerischerer
+verführerischeres
+verführerisches
+verführerischste
+verführerischstem
+verführerischsten
+verführerischster
+verführerischstes
+verführst
+verführt
+verführte
+verführtem
+verführten
+verführter
+verführtes
+verführtest
+verführtet
+verfünfqqfache
+verfünfqqfachen
+verfünfqqfachend
+verfünfqqfachende
+verfünfqqfachendem
+verfünfqqfachenden
+verfünfqqfachender
+verfünfqqfachendes
+verfünfqqfachst
+verfünfqqfacht
+verfünfqqfachte
+verfünfqqfachtem
+verfünfqqfachten
+verfünfqqfachter
+verfünfqqfachtes
+verfünfqqfachtest
+verfünfqqfachtet
+verfüttere
+verfüttern
+verfütternd
+verfütternde
+verfütterndem
+verfütternden
+verfütternder
+verfütterndes
+verfütterst
+verfüttert
+verfütterte
+verfüttertem
+verfütterten
+verfütterter
+verfüttertes
+verfüttertest
+verfüttertet
+verfüttre
+vergab
+vergaben
+vergabst
+vergabt
+vergaffe
+vergaffen
+vergaffend
+vergaffende
+vergaffendem
+vergaffenden
+vergaffender
+vergaffendes
+vergaffst
+vergafft
+vergaffte
+vergafftem
+vergafften
+vergaffter
+vergafftes
+vergafftest
+vergafftet
+vergalt
+vergalten
+vergaltest
+vergaltet
+vergaltst
+vergammele
+vergammeln
+vergammelnd
+vergammelnde
+vergammelndem
+vergammelnden
+vergammelnder
+vergammelndes
+vergammelst
+vergammelt
+vergammelte
+vergammeltem
+vergammelten
+vergammelter
+vergammeltes
+vergammeltest
+vergammeltet
+vergammle
+vergangen
+vergangene
+vergangenem
+vergangenen
+vergangener
+vergangenes
+vergangenheitsbezogen
+vergangenheitsbezogene
+vergangenheitsbezogenem
+vergangenheitsbezogenen
+vergangenheitsbezogener
+vergangenheitsbezogenes
+vergase
+vergasen
+vergasend
+vergasende
+vergasendem
+vergasenden
+vergasender
+vergasendes
+vergasest
+vergast
+vergaste
+vergastem
+vergasten
+vergaster
+vergastes
+vergastest
+vergastet
+vergaß
+vergaßen
+vergaßest
+vergaßt
+vergebbar
+vergebbare
+vergebbarem
+vergebbaren
+vergebbarer
+vergebbares
+vergebe
+vergeben
+vergebend
+vergebende
+vergebendem
+vergebenden
+vergebender
+vergebendes
+vergebens
+vergeblich
+vergebliche
+vergeblichem
+vergeblichen
+vergeblicher
+vergeblichere
+vergeblicherem
+vergeblicheren
+vergeblicherer
+vergeblicheres
+vergebliches
+vergeblichste
+vergeblichstem
+vergeblichsten
+vergeblichster
+vergeblichstes
+vergebt
+vergegenwärtige
+vergegenwärtigen
+vergegenwärtigend
+vergegenwärtigende
+vergegenwärtigendem
+vergegenwärtigenden
+vergegenwärtigender
+vergegenwärtigendes
+vergegenwärtigst
+vergegenwärtigt
+vergegenwärtigte
+vergegenwärtigtem
+vergegenwärtigten
+vergegenwärtigter
+vergegenwärtigtes
+vergegenwärtigtest
+vergegenwärtigtet
+vergehe
+vergehen
+vergehend
+vergehende
+vergehendem
+vergehenden
+vergehender
+vergehendes
+vergehst
+vergeht
+vergeistige
+vergeistigen
+vergeistigend
+vergeistigende
+vergeistigendem
+vergeistigenden
+vergeistigender
+vergeistigendes
+vergeistigst
+vergeistigt
+vergeistigte
+vergeistigtem
+vergeistigten
+vergeistigter
+vergeistigtes
+vergeistigtest
+vergeistigtet
+vergelte
+vergelten
+vergeltend
+vergeltende
+vergeltendem
+vergeltenden
+vergeltender
+vergeltendes
+vergeltet
+vergesse
+vergessen
+vergessend
+vergessende
+vergessendem
+vergessenden
+vergessender
+vergessendes
+vergessene
+vergessenem
+vergessenen
+vergessener
+vergessenes
+vergesslich
+vergessliche
+vergesslichem
+vergesslichen
+vergesslicher
+vergesslichere
+vergesslicherem
+vergesslicheren
+vergesslicherer
+vergesslicheres
+vergessliches
+vergesslichste
+vergesslichstem
+vergesslichsten
+vergesslichster
+vergesslichstes
+vergesst
+vergeude
+vergeuden
+vergeudend
+vergeudende
+vergeudendem
+vergeudenden
+vergeudender
+vergeudendes
+vergeudest
+vergeudet
+vergeudete
+vergeudetem
+vergeudeten
+vergeudeter
+vergeudetes
+vergeudetest
+vergeudetet
+vergewaltige
+vergewaltigen
+vergewaltigend
+vergewaltigende
+vergewaltigendem
+vergewaltigenden
+vergewaltigender
+vergewaltigendes
+vergewaltigst
+vergewaltigt
+vergewaltigte
+vergewaltigtem
+vergewaltigten
+vergewaltigter
+vergewaltigtes
+vergewaltigtest
+vergewaltigtet
+vergewissere
+vergewissern
+vergewissernd
+vergewissernde
+vergewisserndem
+vergewissernden
+vergewissernder
+vergewisserndes
+vergewisserst
+vergewissert
+vergewisserte
+vergewisserten
+vergewissertest
+vergewissertet
+vergewissre
+vergib
+vergibst
+vergibt
+vergieße
+vergießen
+vergießend
+vergießende
+vergießendem
+vergießenden
+vergießender
+vergießendes
+vergießest
+vergießt
+vergifte
+vergiften
+vergiftend
+vergiftende
+vergiftendem
+vergiftenden
+vergiftender
+vergiftendes
+vergiftest
+vergiftet
+vergiftete
+vergiftetem
+vergifteten
+vergifteter
+vergiftetes
+vergiftetest
+vergiftetet
+vergilbt
+vergilbte
+vergilbtem
+vergilbten
+vergilbter
+vergilbtere
+vergilbterem
+vergilbteren
+vergilbterer
+vergilbteres
+vergilbtes
+vergilbteste
+vergilbtestem
+vergilbtesten
+vergilbtester
+vergilbtestes
+vergilt
+vergiltst
+verging
+verginge
+vergingen
+vergingst
+vergingt
+vergiss
+vergisst
+vergittere
+vergittern
+vergitternd
+vergitternde
+vergitterndem
+vergitternden
+vergitternder
+vergitterndes
+vergitterst
+vergittert
+vergitterte
+vergittertem
+vergitterten
+vergitterter
+vergittertes
+vergittertest
+vergittertet
+vergittre
+vergl
+verglase
+verglasen
+verglasend
+verglasende
+verglasendem
+verglasenden
+verglasender
+verglasendes
+verglasest
+verglast
+verglaste
+verglastem
+verglasten
+verglaster
+verglastes
+verglastest
+verglastet
+vergleichbar
+vergleichbare
+vergleichbarem
+vergleichbaren
+vergleichbarer
+vergleichbares
+vergleiche
+vergleichen
+vergleichend
+vergleichende
+vergleichendem
+vergleichenden
+vergleichender
+vergleichendes
+vergleichst
+vergleichsweise
+vergleicht
+verglich
+verglichen
+verglichene
+verglichenem
+verglichenen
+verglichener
+verglichenes
+verglichest
+verglichst
+verglicht
+verglimme
+verglimmen
+verglimmend
+verglimmende
+verglimmendem
+verglimmenden
+verglimmender
+verglimmendes
+verglimmst
+verglimmt
+verglimmte
+verglimmten
+verglimmtest
+verglimmtet
+verglomm
+verglommen
+verglommene
+verglommenem
+verglommenen
+verglommener
+verglommenes
+vergnüge
+vergnügen
+vergnügend
+vergnügende
+vergnügendem
+vergnügenden
+vergnügender
+vergnügendes
+vergnüglich
+vergnügliche
+vergnüglichem
+vergnüglichen
+vergnüglicher
+vergnüglichere
+vergnüglicherem
+vergnüglicheren
+vergnüglicherer
+vergnüglicheres
+vergnügliches
+vergnüglichste
+vergnüglichstem
+vergnüglichsten
+vergnüglichster
+vergnüglichstes
+vergnügst
+vergnügt
+vergnügte
+vergnügtem
+vergnügten
+vergnügter
+vergnügtere
+vergnügterem
+vergnügteren
+vergnügterer
+vergnügteres
+vergnügtes
+vergnügtest
+vergnügteste
+vergnügtestem
+vergnügtesten
+vergnügtester
+vergnügtestes
+vergnügtet
+vergnügungssüchtig
+vergnügungssüchtige
+vergnügungssüchtigem
+vergnügungssüchtigen
+vergnügungssüchtiger
+vergnügungssüchtigere
+vergnügungssüchtigerem
+vergnügungssüchtigeren
+vergnügungssüchtigerer
+vergnügungssüchtigeres
+vergnügungssüchtiges
+vergnügungssüchtigste
+vergnügungssüchtigstem
+vergnügungssüchtigsten
+vergnügungssüchtigster
+vergnügungssüchtigstes
+vergolde
+vergolden
+vergoldend
+vergoldende
+vergoldendem
+vergoldenden
+vergoldender
+vergoldendes
+vergoldest
+vergoldet
+vergoldete
+vergoldetem
+vergoldeten
+vergoldeter
+vergoldetes
+vergoldetest
+vergoldetet
+vergolten
+vergoltene
+vergoltenem
+vergoltenen
+vergoltener
+vergoltenes
+vergoss
+vergossen
+vergossene
+vergossenem
+vergossenen
+vergossener
+vergossenes
+vergossest
+vergosst
+vergrabe
+vergraben
+vergrabend
+vergrabende
+vergrabendem
+vergrabenden
+vergrabender
+vergrabendes
+vergrabene
+vergrabenem
+vergrabenen
+vergrabener
+vergrabenes
+vergrabt
+vergreife
+vergreifen
+vergreifend
+vergreifende
+vergreifendem
+vergreifenden
+vergreifender
+vergreifendes
+vergreifst
+vergreift
+vergreise
+vergreisen
+vergreisend
+vergreisende
+vergreisendem
+vergreisenden
+vergreisender
+vergreisendes
+vergreisest
+vergreist
+vergreiste
+vergreistem
+vergreisten
+vergreister
+vergreistes
+vergreistest
+vergreistet
+vergriff
+vergriffen
+vergriffene
+vergriffenem
+vergriffenen
+vergriffener
+vergriffenes
+vergriffest
+vergriffst
+vergrifft
+vergrub
+vergruben
+vergrubst
+vergrubt
+vergräbst
+vergräbt
+vergräme
+vergrämen
+vergrämend
+vergrämende
+vergrämendem
+vergrämenden
+vergrämender
+vergrämendes
+vergrämst
+vergrämt
+vergrämte
+vergrämtem
+vergrämten
+vergrämter
+vergrämtes
+vergrämtest
+vergrämtet
+vergrößere
+vergrößern
+vergrößernd
+vergrößernde
+vergrößerndem
+vergrößernden
+vergrößernder
+vergrößerndes
+vergrößerst
+vergrößert
+vergrößerte
+vergrößertem
+vergrößerten
+vergrößerter
+vergrößertes
+vergrößertest
+vergrößertet
+vergrößre
+verguck
+vergucke
+vergucken
+verguckend
+verguckende
+verguckendem
+verguckenden
+verguckender
+verguckendes
+verguckst
+verguckt
+verguckte
+verguckten
+vergucktest
+vergucktet
+vergälle
+vergällen
+vergällend
+vergällende
+vergällendem
+vergällenden
+vergällender
+vergällendes
+vergällst
+vergällt
+vergällte
+vergälltem
+vergällten
+vergällter
+vergälltes
+vergälltest
+vergälltet
+vergänglich
+vergängliche
+vergänglichem
+vergänglichen
+vergänglicher
+vergänglichere
+vergänglicherem
+vergänglicheren
+vergänglicherer
+vergänglicheres
+vergängliches
+vergänglichste
+vergänglichstem
+vergänglichsten
+vergänglichster
+vergänglichstes
+vergönne
+vergönnen
+vergönnend
+vergönnende
+vergönnendem
+vergönnenden
+vergönnender
+vergönnendes
+vergönnst
+vergönnt
+vergönnte
+vergönntem
+vergönnten
+vergönnter
+vergönntes
+vergönntest
+vergönntet
+vergöttere
+vergöttern
+vergötternd
+vergötternde
+vergötterndem
+vergötternden
+vergötternder
+vergötterndes
+vergötterst
+vergöttert
+vergötterte
+vergöttertem
+vergötterten
+vergötterter
+vergöttertes
+vergöttertest
+vergöttertet
+vergöttre
+vergütbar
+vergütbare
+vergütbarem
+vergütbaren
+vergütbarer
+vergütbares
+vergüte
+vergüten
+vergütend
+vergütende
+vergütendem
+vergütenden
+vergütender
+vergütendes
+vergütest
+vergütet
+vergütete
+vergütetem
+vergüteten
+vergüteter
+vergütetes
+vergütetest
+vergütetet
+verhafte
+verhaften
+verhaftend
+verhaftende
+verhaftendem
+verhaftenden
+verhaftender
+verhaftendes
+verhaftest
+verhaftet
+verhaftete
+verhaftetem
+verhafteten
+verhafteter
+verhaftetes
+verhaftetest
+verhaftetet
+verhake
+verhaken
+verhakend
+verhakende
+verhakendem
+verhakenden
+verhakender
+verhakendes
+verhakst
+verhakt
+verhakte
+verhaktem
+verhakten
+verhakter
+verhaktes
+verhaktest
+verhaktet
+verhalf
+verhalfen
+verhalfest
+verhalfst
+verhalft
+verhalle
+verhallen
+verhallend
+verhallende
+verhallendem
+verhallenden
+verhallender
+verhallendes
+verhallst
+verhallt
+verhallte
+verhalltem
+verhallten
+verhallter
+verhalltes
+verhalltest
+verhalltet
+verhalte
+verhalten
+verhaltend
+verhaltende
+verhaltendem
+verhaltenden
+verhaltender
+verhaltendes
+verhaltene
+verhaltenem
+verhaltenen
+verhaltener
+verhaltenere
+verhaltenerem
+verhalteneren
+verhaltenerer
+verhalteneres
+verhaltenes
+verhaltenste
+verhaltenstem
+verhaltensten
+verhaltenster
+verhaltenstes
+verhaltet
+verhandelbar
+verhandelbare
+verhandelbarem
+verhandelbaren
+verhandelbarer
+verhandelbares
+verhandele
+verhandeln
+verhandelnd
+verhandelnde
+verhandelndem
+verhandelnden
+verhandelnder
+verhandelndes
+verhandelst
+verhandelt
+verhandelte
+verhandeltem
+verhandelten
+verhandelter
+verhandeltes
+verhandeltest
+verhandeltet
+verhandle
+verhandlungsfähig
+verhandlungsfähige
+verhandlungsfähigem
+verhandlungsfähigen
+verhandlungsfähiger
+verhandlungsfähiges
+verhangen
+verhangene
+verhangenem
+verhangenen
+verhangener
+verhangenes
+verharmlose
+verharmlosen
+verharmlosend
+verharmlosende
+verharmlosendem
+verharmlosenden
+verharmlosender
+verharmlosendes
+verharmlosest
+verharmlost
+verharmloste
+verharmlostem
+verharmlosten
+verharmloster
+verharmlostes
+verharmlostest
+verharmlostet
+verharre
+verharren
+verharrend
+verharrende
+verharrendem
+verharrenden
+verharrender
+verharrendes
+verharrst
+verharrt
+verharrte
+verharrtem
+verharrten
+verharrter
+verharrtes
+verharrtest
+verharrtet
+verhaspele
+verhaspeln
+verhaspelnd
+verhaspelnde
+verhaspelndem
+verhaspelnden
+verhaspelnder
+verhaspelndes
+verhaspelst
+verhaspelt
+verhaspelte
+verhaspeltem
+verhaspelten
+verhaspelter
+verhaspeltes
+verhaspeltest
+verhaspeltet
+verhasple
+verhasst
+verhasste
+verhasstem
+verhassten
+verhasster
+verhasstere
+verhassterem
+verhassteren
+verhassterer
+verhassteres
+verhasstes
+verhassteste
+verhasstestem
+verhasstesten
+verhasstester
+verhasstestes
+verhaue
+verhauen
+verhauend
+verhauende
+verhauendem
+verhauenden
+verhauender
+verhauendes
+verhaust
+verhaut
+verhaute
+verhautem
+verhauten
+verhauter
+verhautes
+verhautest
+verhautet
+verheddere
+verheddern
+verheddernd
+verheddernde
+verhedderndem
+verheddernden
+verheddernder
+verhedderndes
+verhedderst
+verheddert
+verhedderte
+verheddertem
+verhedderten
+verhedderter
+verheddertes
+verheddertest
+verheddertet
+verheddre
+verheere
+verheeren
+verheerend
+verheerende
+verheerendem
+verheerenden
+verheerender
+verheerendes
+verheerst
+verheert
+verheerte
+verheertem
+verheerten
+verheerter
+verheertes
+verheertest
+verheertet
+verhehle
+verhehlen
+verhehlend
+verhehlende
+verhehlendem
+verhehlenden
+verhehlender
+verhehlendes
+verhehlst
+verhehlt
+verhehlte
+verhehltem
+verhehlten
+verhehlter
+verhehltes
+verhehltest
+verhehltet
+verheile
+verheilen
+verheilend
+verheilende
+verheilendem
+verheilenden
+verheilender
+verheilendes
+verheilst
+verheilt
+verheilte
+verheiltem
+verheilten
+verheilter
+verheiltes
+verheiltest
+verheiltet
+verheimliche
+verheimlichen
+verheimlichend
+verheimlichende
+verheimlichendem
+verheimlichenden
+verheimlichender
+verheimlichendes
+verheimlichst
+verheimlicht
+verheimlichte
+verheimlichtem
+verheimlichten
+verheimlichter
+verheimlichtes
+verheimlichtest
+verheimlichtet
+verheirate
+verheiraten
+verheiratend
+verheiratende
+verheiratendem
+verheiratenden
+verheiratender
+verheiratendes
+verheiratest
+verheiratet
+verheiratete
+verheiratetem
+verheirateten
+verheirateter
+verheiratetes
+verheiratetest
+verheiratetet
+verheize
+verheizen
+verheizend
+verheizende
+verheizendem
+verheizenden
+verheizender
+verheizendes
+verheizest
+verheizt
+verheizte
+verheiztem
+verheizten
+verheizter
+verheiztes
+verheiztest
+verheiztet
+verheiße
+verheißen
+verheißend
+verheißende
+verheißendem
+verheißenden
+verheißender
+verheißendes
+verheißene
+verheißenem
+verheißenen
+verheißener
+verheißenes
+verheißest
+verheißt
+verheißungsvoll
+verheißungsvolle
+verheißungsvollem
+verheißungsvollen
+verheißungsvoller
+verheißungsvollere
+verheißungsvollerem
+verheißungsvolleren
+verheißungsvollerer
+verheißungsvolleres
+verheißungsvolles
+verheißungsvollste
+verheißungsvollstem
+verheißungsvollsten
+verheißungsvollster
+verheißungsvollstes
+verhelfe
+verhelfen
+verhelfend
+verhelfende
+verhelfendem
+verhelfenden
+verhelfender
+verhelfendes
+verhelft
+verherrliche
+verherrlichen
+verherrlichend
+verherrlichende
+verherrlichendem
+verherrlichenden
+verherrlichender
+verherrlichendes
+verherrlichst
+verherrlicht
+verherrlichte
+verherrlichtem
+verherrlichten
+verherrlichter
+verherrlichtes
+verherrlichtest
+verherrlichtet
+verhexe
+verhexen
+verhexend
+verhexende
+verhexendem
+verhexenden
+verhexender
+verhexendes
+verhexest
+verhext
+verhexte
+verhextem
+verhexten
+verhexter
+verhextes
+verhextest
+verhextet
+verhielt
+verhielte
+verhielten
+verhieltest
+verhieltet
+verhieltst
+verhieß
+verhieße
+verhießen
+verhießest
+verhießt
+verhilf
+verhilfst
+verhilft
+verhimmele
+verhimmeln
+verhimmelnd
+verhimmelnde
+verhimmelndem
+verhimmelnden
+verhimmelnder
+verhimmelndes
+verhimmelst
+verhimmelt
+verhimmelte
+verhimmeltem
+verhimmelten
+verhimmelter
+verhimmeltes
+verhimmeltest
+verhimmeltet
+verhimmle
+verhindere
+verhindern
+verhindernd
+verhindernde
+verhinderndem
+verhindernden
+verhindernder
+verhinderndes
+verhinderst
+verhindert
+verhinderte
+verhindertem
+verhinderten
+verhinderter
+verhindertes
+verhindertest
+verhindertet
+verhindre
+verholfen
+verholfene
+verholfenem
+verholfenen
+verholfener
+verholfenes
+verhundertfache
+verhundertfachen
+verhundertfachend
+verhundertfachende
+verhundertfachendem
+verhundertfachenden
+verhundertfachender
+verhundertfachendes
+verhundertfachst
+verhundertfacht
+verhundertfachte
+verhundertfachtem
+verhundertfachten
+verhundertfachter
+verhundertfachtes
+verhundertfachtest
+verhundertfachtet
+verhungere
+verhungern
+verhungernd
+verhungernde
+verhungerndem
+verhungernden
+verhungernder
+verhungerndes
+verhungerst
+verhungert
+verhungerte
+verhungertem
+verhungerten
+verhungerter
+verhungertes
+verhungertest
+verhungertet
+verhungre
+verhunze
+verhunzen
+verhunzend
+verhunzende
+verhunzendem
+verhunzenden
+verhunzender
+verhunzendes
+verhunzest
+verhunzt
+verhunzte
+verhunztem
+verhunzten
+verhunzter
+verhunztes
+verhunztest
+verhunztet
+verhält
+verhältnismäßig
+verhältnismäßige
+verhältnismäßigem
+verhältnismäßigen
+verhältnismäßiger
+verhältnismäßigere
+verhältnismäßigerem
+verhältnismäßigeren
+verhältnismäßigerer
+verhältnismäßigeres
+verhältnismäßiges
+verhältnismäßigste
+verhältnismäßigstem
+verhältnismäßigsten
+verhältnismäßigster
+verhältnismäßigstes
+verhältniswidrig
+verhältniswidrige
+verhältniswidrigem
+verhältniswidrigen
+verhältniswidriger
+verhältniswidriges
+verhältst
+verhänge
+verhängen
+verhängend
+verhängende
+verhängendem
+verhängenden
+verhängender
+verhängendes
+verhängnisvoll
+verhängnisvolle
+verhängnisvollem
+verhängnisvollen
+verhängnisvoller
+verhängnisvollere
+verhängnisvollerem
+verhängnisvolleren
+verhängnisvollerer
+verhängnisvolleres
+verhängnisvolles
+verhängnisvollste
+verhängnisvollstem
+verhängnisvollsten
+verhängnisvollster
+verhängnisvollstes
+verhängst
+verhängt
+verhängte
+verhängtem
+verhängten
+verhängter
+verhängtes
+verhängtest
+verhängtet
+verhärmt
+verhärmte
+verhärmtem
+verhärmten
+verhärmter
+verhärmtes
+verhärte
+verhärten
+verhärtend
+verhärtende
+verhärtendem
+verhärtenden
+verhärtender
+verhärtendes
+verhärtest
+verhärtet
+verhärtete
+verhärtetem
+verhärteten
+verhärteter
+verhärtetes
+verhärtetest
+verhärtetet
+verhätschele
+verhätscheln
+verhätschelnd
+verhätschelnde
+verhätschelndem
+verhätschelnden
+verhätschelnder
+verhätschelndes
+verhätschelst
+verhätschelt
+verhätschelte
+verhätscheltem
+verhätschelten
+verhätschelter
+verhätscheltere
+verhätschelterem
+verhätschelteren
+verhätschelterer
+verhätschelteres
+verhätscheltes
+verhätscheltest
+verhätschelteste
+verhätscheltestem
+verhätscheltesten
+verhätscheltester
+verhätscheltestes
+verhätscheltet
+verhätschle
+verhöhne
+verhöhnen
+verhöhnend
+verhöhnende
+verhöhnendem
+verhöhnenden
+verhöhnender
+verhöhnendes
+verhöhnst
+verhöhnt
+verhöhnte
+verhöhntem
+verhöhnten
+verhöhnter
+verhöhntes
+verhöhntest
+verhöhntet
+verhökere
+verhökern
+verhökernd
+verhökernde
+verhökerndem
+verhökernden
+verhökernder
+verhökerndes
+verhökerst
+verhökert
+verhökerte
+verhökertem
+verhökerten
+verhökerter
+verhökertes
+verhökertest
+verhökertet
+verhökre
+verhör
+verhöre
+verhören
+verhörend
+verhörende
+verhörendem
+verhörenden
+verhörender
+verhörendes
+verhörst
+verhört
+verhörte
+verhörtem
+verhörten
+verhörter
+verhörtes
+verhörtest
+verhörtet
+verhülle
+verhüllen
+verhüllend
+verhüllende
+verhüllendem
+verhüllenden
+verhüllender
+verhüllendes
+verhüllst
+verhüllt
+verhüllte
+verhülltem
+verhüllten
+verhüllter
+verhülltes
+verhülltest
+verhülltet
+verhütbar
+verhütbare
+verhütbarem
+verhütbaren
+verhütbarer
+verhütbares
+verhüte
+verhüten
+verhütend
+verhütende
+verhütendem
+verhütenden
+verhütender
+verhütendes
+verhütest
+verhütet
+verhütete
+verhütetem
+verhüteten
+verhüteter
+verhütetes
+verhütetest
+verhütetet
+verifizierbar
+verifizierbare
+verifizierbarem
+verifizierbaren
+verifizierbarer
+verifizierbares
+verifiziere
+verifizieren
+verifizierend
+verifizierende
+verifizierendem
+verifizierenden
+verifizierender
+verifizierendes
+verifizierst
+verifiziert
+verifizierte
+verifiziertem
+verifizierten
+verifizierter
+verifiziertes
+verifiziertest
+verifiziertet
+verinnerliche
+verinnerlichen
+verinnerlichend
+verinnerlichende
+verinnerlichendem
+verinnerlichenden
+verinnerlichender
+verinnerlichendes
+verinnerlichst
+verinnerlicht
+verinnerlichte
+verinnerlichtem
+verinnerlichten
+verinnerlichter
+verinnerlichtes
+verinnerlichtest
+verinnerlichtet
+verirre
+verirren
+verirrend
+verirrende
+verirrendem
+verirrenden
+verirrender
+verirrendes
+verirrst
+verirrt
+verirrte
+verirrtem
+verirrten
+verirrter
+verirrtes
+verirrtest
+verirrtet
+veritabel
+veritable
+veritablem
+veritablen
+veritabler
+veritables
+verjage
+verjagen
+verjagend
+verjagende
+verjagendem
+verjagenden
+verjagender
+verjagendes
+verjagst
+verjagt
+verjagte
+verjagtem
+verjagten
+verjagter
+verjagtes
+verjagtest
+verjagtet
+verjubele
+verjubeln
+verjubelnd
+verjubelnde
+verjubelndem
+verjubelnden
+verjubelnder
+verjubelndes
+verjubelst
+verjubelt
+verjubelte
+verjubeltem
+verjubelten
+verjubelter
+verjubeltes
+verjubeltest
+verjubeltet
+verjuble
+verjähre
+verjähren
+verjährend
+verjährende
+verjährendem
+verjährenden
+verjährender
+verjährendes
+verjährst
+verjährt
+verjährte
+verjährtem
+verjährten
+verjährter
+verjährtes
+verjährtest
+verjährtet
+verjünge
+verjüngen
+verjüngend
+verjüngende
+verjüngendem
+verjüngenden
+verjüngender
+verjüngendes
+verjüngst
+verjüngt
+verjüngte
+verjüngtem
+verjüngten
+verjüngter
+verjüngtes
+verjüngtest
+verjüngtet
+verkabelt
+verkabelte
+verkabeltem
+verkabelten
+verkabelter
+verkabeltes
+verkalke
+verkalken
+verkalkend
+verkalkende
+verkalkendem
+verkalkenden
+verkalkender
+verkalkendes
+verkalkst
+verkalkt
+verkalkte
+verkalktem
+verkalkten
+verkalkter
+verkalktes
+verkalktest
+verkalktet
+verkalkuliere
+verkalkulieren
+verkalkulierend
+verkalkulierende
+verkalkulierendem
+verkalkulierenden
+verkalkulierender
+verkalkulierendes
+verkalkulierst
+verkalkuliert
+verkalkulierte
+verkalkuliertem
+verkalkulierten
+verkalkulierter
+verkalkuliertes
+verkalkuliertest
+verkalkuliertet
+verkam
+verkamen
+verkamst
+verkamt
+verkannt
+verkannte
+verkanntem
+verkannten
+verkannter
+verkanntes
+verkanntest
+verkanntet
+verkanntst
+verkantet
+verkantete
+verkantetem
+verkanteten
+verkanteter
+verkantetes
+verkappe
+verkappen
+verkappend
+verkappende
+verkappendem
+verkappenden
+verkappender
+verkappendes
+verkappst
+verkappt
+verkappte
+verkapptem
+verkappten
+verkappter
+verkapptes
+verkapptest
+verkapptet
+verkapsele
+verkapseln
+verkapselnd
+verkapselnde
+verkapselndem
+verkapselnden
+verkapselnder
+verkapselndes
+verkapselst
+verkapselt
+verkapselte
+verkapseltem
+verkapselten
+verkapselter
+verkapseltes
+verkapseltest
+verkapseltet
+verkapsle
+verkaufe
+verkaufen
+verkaufend
+verkaufende
+verkaufendem
+verkaufenden
+verkaufender
+verkaufendes
+verkaufst
+verkauft
+verkaufte
+verkauftem
+verkauften
+verkaufter
+verkauftes
+verkauftest
+verkauftet
+verkehre
+verkehren
+verkehrend
+verkehrende
+verkehrendem
+verkehrenden
+verkehrender
+verkehrendes
+verkehrst
+verkehrt
+verkehrte
+verkehrtem
+verkehrten
+verkehrter
+verkehrtere
+verkehrterem
+verkehrteren
+verkehrterer
+verkehrteres
+verkehrtes
+verkehrtest
+verkehrteste
+verkehrtestem
+verkehrtesten
+verkehrtester
+verkehrtestes
+verkehrtet
+verkeile
+verkeilen
+verkeilend
+verkeilende
+verkeilendem
+verkeilenden
+verkeilender
+verkeilendes
+verkeilst
+verkeilt
+verkeilte
+verkeiltem
+verkeilten
+verkeilter
+verkeiltes
+verkeiltest
+verkeiltet
+verkenne
+verkennen
+verkennend
+verkennende
+verkennendem
+verkennenden
+verkennender
+verkennendes
+verkennst
+verkennt
+verkettbar
+verkettbare
+verkettbarem
+verkettbaren
+verkettbarer
+verkettbares
+verkette
+verketten
+verkettend
+verkettende
+verkettendem
+verkettenden
+verkettender
+verkettendes
+verkettest
+verkettet
+verkettete
+verkettetem
+verketteten
+verketteter
+verkettetes
+verkettetest
+verkettetet
+verketzere
+verketzern
+verketzernd
+verketzernde
+verketzerndem
+verketzernden
+verketzernder
+verketzerndes
+verketzerst
+verketzert
+verketzerte
+verketzertem
+verketzerten
+verketzerter
+verketzertes
+verketzertest
+verketzertet
+verketzre
+verkippt
+verkitte
+verkitten
+verkittend
+verkittende
+verkittendem
+verkittenden
+verkittender
+verkittendes
+verkittest
+verkittet
+verkittete
+verkittetem
+verkitteten
+verkitteter
+verkittetes
+verkittetest
+verkittetet
+verklage
+verklagen
+verklagend
+verklagende
+verklagendem
+verklagenden
+verklagender
+verklagendes
+verklagst
+verklagt
+verklagte
+verklagtem
+verklagten
+verklagter
+verklagtes
+verklagtest
+verklagtet
+verklang
+verklangen
+verklangst
+verklangt
+verklausuliere
+verklausulieren
+verklausulierend
+verklausulierende
+verklausulierendem
+verklausulierenden
+verklausulierender
+verklausulierendes
+verklausulierst
+verklausuliert
+verklausulierte
+verklausuliertem
+verklausulierten
+verklausulierter
+verklausuliertes
+verklausuliertest
+verklausuliertet
+verklebe
+verkleben
+verklebend
+verklebende
+verklebendem
+verklebenden
+verklebender
+verklebendes
+verklebst
+verklebt
+verklebte
+verklebtem
+verklebten
+verklebter
+verklebtes
+verklebtest
+verklebtet
+verkleide
+verkleiden
+verkleidend
+verkleidende
+verkleidendem
+verkleidenden
+verkleidender
+verkleidendes
+verkleidest
+verkleidet
+verkleidete
+verkleidetem
+verkleideten
+verkleideter
+verkleidetes
+verkleidetest
+verkleidetet
+verkleinere
+verkleinern
+verkleinernd
+verkleinernde
+verkleinerndem
+verkleinernden
+verkleinernder
+verkleinerndes
+verkleinerst
+verkleinert
+verkleinerte
+verkleinertem
+verkleinerten
+verkleinerter
+verkleinertes
+verkleinertest
+verkleinertet
+verkleinre
+verklemme
+verklemmen
+verklemmend
+verklemmende
+verklemmendem
+verklemmenden
+verklemmender
+verklemmendes
+verklemmst
+verklemmt
+verklemmte
+verklemmtem
+verklemmten
+verklemmter
+verklemmtes
+verklemmtest
+verklemmtet
+verklickert
+verklickerte
+verklickertem
+verklickerten
+verklickerter
+verklickertes
+verklinge
+verklingen
+verklingend
+verklingende
+verklingendem
+verklingenden
+verklingender
+verklingendes
+verklingst
+verklingt
+verklungen
+verklungene
+verklungenem
+verklungenen
+verklungener
+verklungenes
+verkläre
+verklären
+verklärend
+verklärende
+verklärendem
+verklärenden
+verklärender
+verklärendes
+verklärst
+verklärt
+verklärte
+verklärtem
+verklärten
+verklärter
+verklärtes
+verklärtest
+verklärtet
+verknalle
+verknallen
+verknallend
+verknallende
+verknallendem
+verknallenden
+verknallender
+verknallendes
+verknallst
+verknallt
+verknallte
+verknalltem
+verknallten
+verknallter
+verknalltes
+verknalltest
+verknalltet
+verknappe
+verknappen
+verknappend
+verknappende
+verknappendem
+verknappenden
+verknappender
+verknappendes
+verknappst
+verknappt
+verknappte
+verknapptem
+verknappten
+verknappter
+verknapptes
+verknapptest
+verknapptet
+verkneife
+verkneifen
+verkneifend
+verkneifende
+verkneifendem
+verkneifenden
+verkneifender
+verkneifendes
+verkneifst
+verkneift
+verkniff
+verkniffen
+verkniffene
+verkniffenem
+verkniffenen
+verkniffener
+verkniffenes
+verkniffest
+verkniffst
+verknifft
+verknote
+verknoten
+verknotend
+verknotende
+verknotendem
+verknotenden
+verknotender
+verknotendes
+verknotest
+verknotet
+verknotete
+verknotetem
+verknoteten
+verknoteter
+verknotetes
+verknotetest
+verknotetet
+verknöchere
+verknöchern
+verknöchernd
+verknöchernde
+verknöcherndem
+verknöchernden
+verknöchernder
+verknöcherndes
+verknöcherst
+verknöchert
+verknöcherte
+verknöchertem
+verknöcherten
+verknöcherter
+verknöchertes
+verknöchertest
+verknöchertet
+verknöchre
+verknüpfbar
+verknüpfbare
+verknüpfbarem
+verknüpfbaren
+verknüpfbarer
+verknüpfbares
+verknüpfe
+verknüpfen
+verknüpfend
+verknüpfende
+verknüpfendem
+verknüpfenden
+verknüpfender
+verknüpfendes
+verknüpfst
+verknüpft
+verknüpfte
+verknüpftem
+verknüpften
+verknüpfter
+verknüpftes
+verknüpftest
+verknüpftet
+verkohle
+verkohlen
+verkohlend
+verkohlende
+verkohlendem
+verkohlenden
+verkohlender
+verkohlendes
+verkohlst
+verkohlt
+verkohlte
+verkohltem
+verkohlten
+verkohlter
+verkohltes
+verkohltest
+verkohltet
+verkomm
+verkomme
+verkommen
+verkommend
+verkommende
+verkommendem
+verkommenden
+verkommender
+verkommendes
+verkommene
+verkommenem
+verkommenen
+verkommener
+verkommenes
+verkommst
+verkommt
+verkompliziere
+verkomplizieren
+verkomplizierend
+verkomplizierende
+verkomplizierendem
+verkomplizierenden
+verkomplizierender
+verkomplizierendes
+verkomplizierst
+verkompliziert
+verkomplizierte
+verkompliziertem
+verkomplizierten
+verkomplizierter
+verkompliziertes
+verkompliziertest
+verkompliziertet
+verkoppele
+verkoppeln
+verkoppelnd
+verkoppelnde
+verkoppelndem
+verkoppelnden
+verkoppelnder
+verkoppelndes
+verkoppelst
+verkoppelt
+verkoppelte
+verkoppeltem
+verkoppelten
+verkoppelter
+verkoppeltes
+verkoppeltest
+verkoppeltet
+verkopple
+verkorkst
+verkorkste
+verkorkstem
+verkorksten
+verkorkster
+verkorkstes
+verkrache
+verkrachen
+verkrachend
+verkrachende
+verkrachendem
+verkrachenden
+verkrachender
+verkrachendes
+verkrachst
+verkracht
+verkrachte
+verkrachtem
+verkrachten
+verkrachter
+verkrachtes
+verkrachtest
+verkrachtet
+verkrafte
+verkraften
+verkraftend
+verkraftende
+verkraftendem
+verkraftenden
+verkraftender
+verkraftendes
+verkraftest
+verkraftet
+verkraftete
+verkraftetem
+verkrafteten
+verkrafteter
+verkraftetes
+verkraftetest
+verkraftetet
+verkrampfe
+verkrampfen
+verkrampfend
+verkrampfende
+verkrampfendem
+verkrampfenden
+verkrampfender
+verkrampfendes
+verkrampfst
+verkrampft
+verkrampfte
+verkrampftem
+verkrampften
+verkrampfter
+verkrampftes
+verkrampftest
+verkrampftet
+verkrieche
+verkriechen
+verkriechend
+verkriechende
+verkriechendem
+verkriechenden
+verkriechender
+verkriechendes
+verkriechst
+verkriecht
+verkroch
+verkrochen
+verkrochene
+verkrochenem
+verkrochenen
+verkrochener
+verkrochenes
+verkrochest
+verkrochst
+verkrocht
+verkruste
+verkrusten
+verkrustend
+verkrustende
+verkrustendem
+verkrustenden
+verkrustender
+verkrustendes
+verkrustest
+verkrustet
+verkrustete
+verkrustetem
+verkrusteten
+verkrusteter
+verkrustetes
+verkrustetest
+verkrustetet
+verkrümele
+verkrümeln
+verkrümelnd
+verkrümelnde
+verkrümelndem
+verkrümelnden
+verkrümelnder
+verkrümelndes
+verkrümelst
+verkrümelt
+verkrümelte
+verkrümeltem
+verkrümelten
+verkrümelter
+verkrümeltes
+verkrümeltest
+verkrümeltet
+verkrümle
+verkrümme
+verkrümmen
+verkrümmend
+verkrümmende
+verkrümmendem
+verkrümmenden
+verkrümmender
+verkrümmendes
+verkrümmst
+verkrümmt
+verkrümmte
+verkrümmtem
+verkrümmten
+verkrümmter
+verkrümmtes
+verkrümmtest
+verkrümmtet
+verkrüppele
+verkrüppeln
+verkrüppelnd
+verkrüppelnde
+verkrüppelndem
+verkrüppelnden
+verkrüppelnder
+verkrüppelndes
+verkrüppelst
+verkrüppelt
+verkrüppelte
+verkrüppeltem
+verkrüppelten
+verkrüppelter
+verkrüppeltes
+verkrüppeltest
+verkrüppeltet
+verkrüpple
+verkupfere
+verkupfern
+verkupfernd
+verkupfernde
+verkupferndem
+verkupfernden
+verkupfernder
+verkupferndes
+verkupferst
+verkupfert
+verkupferte
+verkupfertem
+verkupferten
+verkupferter
+verkupfertes
+verkupfertest
+verkupfertet
+verkupfre
+verkuppele
+verkuppeln
+verkuppelnd
+verkuppelnde
+verkuppelndem
+verkuppelnden
+verkuppelnder
+verkuppelndes
+verkuppelst
+verkuppelt
+verkuppelte
+verkuppeltem
+verkuppelten
+verkuppelter
+verkuppeltes
+verkuppeltest
+verkuppeltet
+verkupple
+verkäufqqlich
+verkäufqqliche
+verkäufqqlichem
+verkäufqqlichen
+verkäufqqlicher
+verkäufqqliches
+verkörpere
+verkörpern
+verkörpernd
+verkörpernde
+verkörperndem
+verkörpernden
+verkörpernder
+verkörperndes
+verkörperst
+verkörpert
+verkörperte
+verkörpertem
+verkörperten
+verkörperter
+verkörpertes
+verkörpertest
+verkörpertet
+verkörpre
+verköstige
+verköstigen
+verköstigend
+verköstigende
+verköstigendem
+verköstigenden
+verköstigender
+verköstigendes
+verköstigst
+verköstigt
+verköstigte
+verköstigtem
+verköstigten
+verköstigter
+verköstigtes
+verköstigtest
+verköstigtet
+verkümmere
+verkümmern
+verkümmernd
+verkümmernde
+verkümmerndem
+verkümmernden
+verkümmernder
+verkümmerndes
+verkümmerst
+verkümmert
+verkümmerte
+verkümmertem
+verkümmerten
+verkümmerter
+verkümmertes
+verkümmertest
+verkümmertet
+verkümmre
+verkünde
+verkünden
+verkündend
+verkündende
+verkündendem
+verkündenden
+verkündender
+verkündendes
+verkündest
+verkündet
+verkündete
+verkündetem
+verkündeten
+verkündeter
+verkündetes
+verkündetest
+verkündetet
+verkündige
+verkündigen
+verkündigend
+verkündigende
+verkündigendem
+verkündigenden
+verkündigender
+verkündigendes
+verkündigst
+verkündigt
+verkündigte
+verkündigtem
+verkündigten
+verkündigter
+verkündigtes
+verkündigtest
+verkündigtet
+verkürzbar
+verkürzbare
+verkürzbarem
+verkürzbaren
+verkürzbarer
+verkürzbares
+verkürze
+verkürzen
+verkürzend
+verkürzende
+verkürzendem
+verkürzenden
+verkürzender
+verkürzendes
+verkürzest
+verkürzt
+verkürzte
+verkürztem
+verkürzten
+verkürzter
+verkürztes
+verkürztest
+verkürztet
+verlache
+verlachen
+verlachend
+verlachende
+verlachendem
+verlachenden
+verlachender
+verlachendes
+verlachst
+verlacht
+verlachte
+verlachtem
+verlachten
+verlachter
+verlachtes
+verlachtest
+verlachtet
+verlade
+verladen
+verladend
+verladende
+verladendem
+verladenden
+verladender
+verladendes
+verladene
+verladenem
+verladenen
+verladener
+verladenes
+verladet
+verlagere
+verlagern
+verlagernd
+verlagernde
+verlagerndem
+verlagernden
+verlagernder
+verlagerndes
+verlagerst
+verlagert
+verlagerte
+verlagertem
+verlagerten
+verlagerter
+verlagertes
+verlagertest
+verlagertet
+verlagre
+verlange
+verlangen
+verlangend
+verlangende
+verlangendem
+verlangenden
+verlangender
+verlangendes
+verlangsame
+verlangsamen
+verlangsamend
+verlangsamende
+verlangsamendem
+verlangsamenden
+verlangsamender
+verlangsamendes
+verlangsamst
+verlangsamt
+verlangsamte
+verlangsamtem
+verlangsamten
+verlangsamter
+verlangsamtes
+verlangsamtest
+verlangsamtet
+verlangst
+verlangt
+verlangte
+verlangtem
+verlangten
+verlangter
+verlangtes
+verlangtest
+verlangtet
+verlas
+verlasen
+verlasest
+verlass
+verlasse
+verlassen
+verlassend
+verlassende
+verlassendem
+verlassenden
+verlassender
+verlassendes
+verlassene
+verlassenem
+verlassenen
+verlassener
+verlassenes
+verlasst
+verlast
+verlaufe
+verlaufen
+verlaufend
+verlaufende
+verlaufendem
+verlaufenden
+verlaufender
+verlaufendes
+verlaufene
+verlaufenem
+verlaufenen
+verlaufener
+verlaufenes
+verlauft
+verlaust
+verlauste
+verlaustem
+verlausten
+verlauster
+verlaustes
+verlautbare
+verlautbaren
+verlautbarend
+verlautbarende
+verlautbarendem
+verlautbarenden
+verlautbarender
+verlautbarendes
+verlautbarst
+verlautbart
+verlautbarte
+verlautbartem
+verlautbarten
+verlautbarter
+verlautbartes
+verlautbartest
+verlautbartet
+verlaute
+verlauten
+verlautend
+verlautende
+verlautendem
+verlautenden
+verlautender
+verlautendes
+verlautest
+verlautet
+verlautete
+verlautetem
+verlauteten
+verlauteter
+verlautetes
+verlautetest
+verlautetet
+verlebe
+verleben
+verlebend
+verlebende
+verlebendem
+verlebenden
+verlebender
+verlebendes
+verlebst
+verlebt
+verlebte
+verlebtem
+verlebten
+verlebter
+verlebtes
+verlebtest
+verlebtet
+verlege
+verlegen
+verlegend
+verlegende
+verlegendem
+verlegenden
+verlegender
+verlegendes
+verlegene
+verlegenem
+verlegenen
+verlegener
+verlegenes
+verlegst
+verlegt
+verlegte
+verlegtem
+verlegten
+verlegter
+verlegtes
+verlegtest
+verlegtet
+verleide
+verleiden
+verleidend
+verleidende
+verleidendem
+verleidenden
+verleidender
+verleidendes
+verleidest
+verleidet
+verleidete
+verleidetem
+verleideten
+verleideter
+verleidetes
+verleidetest
+verleidetet
+verleihe
+verleihen
+verleihend
+verleihende
+verleihendem
+verleihenden
+verleihender
+verleihendes
+verleihst
+verleiht
+verleime
+verleimen
+verleimend
+verleimende
+verleimendem
+verleimenden
+verleimender
+verleimendes
+verleimst
+verleimt
+verleimte
+verleimtem
+verleimten
+verleimter
+verleimtes
+verleimtest
+verleimtet
+verleite
+verleiten
+verleitend
+verleitende
+verleitendem
+verleitenden
+verleitender
+verleitendere
+verleitenderem
+verleitenderen
+verleitenderer
+verleitenderes
+verleitendes
+verleitendste
+verleitendstem
+verleitendsten
+verleitendster
+verleitendstes
+verleitest
+verleitet
+verleitete
+verleitetem
+verleiteten
+verleiteter
+verleitetes
+verleitetest
+verleitetet
+verlerne
+verlernen
+verlernend
+verlernende
+verlernendem
+verlernenden
+verlernender
+verlernendes
+verlernst
+verlernt
+verlernte
+verlerntem
+verlernten
+verlernter
+verlerntes
+verlerntest
+verlerntet
+verlese
+verlesen
+verlesend
+verlesende
+verlesendem
+verlesenden
+verlesender
+verlesendes
+verlesene
+verlesenem
+verlesenen
+verlesener
+verlesenes
+verlest
+verletzbar
+verletzbare
+verletzbarem
+verletzbaren
+verletzbarer
+verletzbarere
+verletzbarerem
+verletzbareren
+verletzbarerer
+verletzbareres
+verletzbares
+verletzbarste
+verletzbarstem
+verletzbarsten
+verletzbarster
+verletzbarstes
+verletze
+verletzen
+verletzend
+verletzende
+verletzendem
+verletzenden
+verletzender
+verletzendere
+verletzenderem
+verletzenderen
+verletzenderer
+verletzenderes
+verletzendes
+verletzendste
+verletzendstem
+verletzendsten
+verletzendster
+verletzendstes
+verletzest
+verletzlich
+verletzliche
+verletzlichem
+verletzlichen
+verletzlicher
+verletzlichere
+verletzlicherem
+verletzlicheren
+verletzlicherer
+verletzlicheres
+verletzliches
+verletzlichste
+verletzlichstem
+verletzlichsten
+verletzlichster
+verletzlichstes
+verletzt
+verletzte
+verletztem
+verletzten
+verletzter
+verletztes
+verletztest
+verletztet
+verleugne
+verleugnen
+verleugnend
+verleugnende
+verleugnendem
+verleugnenden
+verleugnender
+verleugnendes
+verleugnest
+verleugnet
+verleugnete
+verleugnetem
+verleugneten
+verleugneter
+verleugnetes
+verleugnetest
+verleugnetet
+verleumde
+verleumden
+verleumdend
+verleumdende
+verleumdendem
+verleumdenden
+verleumdender
+verleumdendes
+verleumderisch
+verleumderische
+verleumderischem
+verleumderischen
+verleumderischer
+verleumderisches
+verleumdest
+verleumdet
+verleumdete
+verleumdetem
+verleumdeten
+verleumdeter
+verleumdetes
+verleumdetest
+verleumdetet
+verliebe
+verlieben
+verliebend
+verliebende
+verliebendem
+verliebenden
+verliebender
+verliebendes
+verliebst
+verliebt
+verliebte
+verliebtem
+verliebten
+verliebter
+verliebtes
+verliebtest
+verliebtet
+verlief
+verliefe
+verliefen
+verliefest
+verliefst
+verlieft
+verlieh
+verliehen
+verliehene
+verliehenem
+verliehenen
+verliehener
+verliehenes
+verliehst
+verlieht
+verliere
+verlieren
+verlierend
+verlierende
+verlierendem
+verlierenden
+verlierender
+verlierendes
+verlierst
+verliert
+verliest
+verließ
+verließe
+verließen
+verließest
+verließt
+verlobe
+verloben
+verlobend
+verlobende
+verlobendem
+verlobenden
+verlobender
+verlobendes
+verlobst
+verlobt
+verlobte
+verlobtem
+verlobten
+verlobter
+verlobtes
+verlobtest
+verlobtet
+verlocke
+verlocken
+verlockend
+verlockende
+verlockendem
+verlockenden
+verlockender
+verlockendere
+verlockenderem
+verlockenderen
+verlockenderer
+verlockenderes
+verlockendes
+verlockendste
+verlockendstem
+verlockendsten
+verlockendster
+verlockendstes
+verlockst
+verlockt
+verlockte
+verlocktem
+verlockten
+verlockter
+verlocktes
+verlocktest
+verlocktet
+verlogen
+verlogene
+verlogenem
+verlogenen
+verlogener
+verlogenere
+verlogenerem
+verlogeneren
+verlogenerer
+verlogeneres
+verlogenes
+verlogenste
+verlogenstem
+verlogensten
+verlogenster
+verlogenstes
+verlor
+verloren
+verlorene
+verlorenem
+verlorenen
+verlorener
+verlorenes
+verlorst
+verlort
+verlose
+verlosen
+verlosend
+verlosende
+verlosendem
+verlosenden
+verlosender
+verlosendes
+verlosest
+verlost
+verloste
+verlostem
+verlosten
+verloster
+verlostes
+verlostest
+verlostet
+verlottere
+verlottern
+verlotternd
+verlotternde
+verlotterndem
+verlotternden
+verlotternder
+verlotterndes
+verlotterst
+verlottert
+verlotterte
+verlottertem
+verlotterten
+verlotterter
+verlottertes
+verlottertest
+verlottertet
+verlottre
+verlud
+verluden
+verludest
+verludet
+verludst
+verlustbehaftet
+verlustbehaftete
+verlustbehaftetem
+verlustbehafteten
+verlustbehafteter
+verlustbehaftetes
+verlustreich
+verlustreiche
+verlustreichem
+verlustreichen
+verlustreicher
+verlustreiches
+verlädst
+verlädt
+verlängere
+verlängern
+verlängernd
+verlängernde
+verlängerndem
+verlängernden
+verlängernder
+verlängerndes
+verlängerst
+verlängert
+verlängerte
+verlängertem
+verlängerten
+verlängerter
+verlängertes
+verlängertest
+verlängertet
+verlängre
+verlässlich
+verlässliche
+verlässlichem
+verlässlichen
+verlässlicher
+verlässlichere
+verlässlicherem
+verlässlicheren
+verlässlicherer
+verlässlicheres
+verlässliches
+verlässlichste
+verlässlichstem
+verlässlichsten
+verlässlichster
+verlässlichstes
+verlässt
+verlästere
+verlästern
+verlästernd
+verlästernde
+verlästerndem
+verlästernden
+verlästernder
+verlästerndes
+verlästerst
+verlästert
+verlästerte
+verlästertem
+verlästerten
+verlästerter
+verlästertes
+verlästertest
+verlästertet
+verlästre
+verläufst
+verläuft
+verlösche
+verlöschen
+verlöschend
+verlöschende
+verlöschendem
+verlöschenden
+verlöschender
+verlöschendes
+verlöschest
+verlöschst
+verlöscht
+verlöschte
+verlöschtem
+verlöschten
+verlöschter
+verlöschtes
+verlöschtest
+verlöschtet
+verlöte
+verlöten
+verlötend
+verlötende
+verlötendem
+verlötenden
+verlötender
+verlötendes
+verlötest
+verlötet
+verlötete
+verlötetem
+verlöteten
+verlöteter
+verlötetes
+verlötetest
+verlötetet
+vermache
+vermachen
+vermachend
+vermachende
+vermachendem
+vermachenden
+vermachender
+vermachendes
+vermachst
+vermacht
+vermachte
+vermachtem
+vermachten
+vermachter
+vermachtes
+vermachtest
+vermachtet
+vermag
+vermagst
+vermarktbar
+vermarktbare
+vermarktbarem
+vermarktbaren
+vermarktbarer
+vermarktbares
+vermarkte
+vermarkten
+vermarktend
+vermarktende
+vermarktendem
+vermarktenden
+vermarktender
+vermarktendes
+vermarktest
+vermarktet
+vermarktete
+vermarktetem
+vermarkteten
+vermarkteter
+vermarktetes
+vermarktetest
+vermarktetet
+vermassele
+vermasseln
+vermasselnd
+vermasselnde
+vermasselndem
+vermasselnden
+vermasselnder
+vermasselndes
+vermasselst
+vermasselt
+vermasselte
+vermasseltem
+vermasselten
+vermasselter
+vermasseltes
+vermasseltest
+vermasseltet
+vermassle
+vermauere
+vermauern
+vermauernd
+vermauernde
+vermauerndem
+vermauernden
+vermauernder
+vermauerndes
+vermauerst
+vermauert
+vermauerte
+vermauertem
+vermauerten
+vermauerter
+vermauertes
+vermauertest
+vermauertet
+vermaure
+vermaß
+vermaßen
+vermaßest
+vermaßt
+vermehre
+vermehren
+vermehrend
+vermehrende
+vermehrendem
+vermehrenden
+vermehrender
+vermehrendes
+vermehrst
+vermehrt
+vermehrte
+vermehrtem
+vermehrten
+vermehrter
+vermehrtes
+vermehrtest
+vermehrtet
+vermeidbar
+vermeidbare
+vermeidbarem
+vermeidbaren
+vermeidbarer
+vermeidbares
+vermeide
+vermeiden
+vermeidend
+vermeidende
+vermeidendem
+vermeidenden
+vermeidender
+vermeidendes
+vermeidest
+vermeidet
+vermeidete
+vermeideten
+vermeidetest
+vermeidetet
+vermeidlich
+vermeidliche
+vermeidlichem
+vermeidlichen
+vermeidlicher
+vermeidliches
+vermeine
+vermeinen
+vermeinend
+vermeinende
+vermeinendem
+vermeinenden
+vermeinender
+vermeinendes
+vermeinst
+vermeint
+vermeinte
+vermeintem
+vermeinten
+vermeinter
+vermeintes
+vermeintest
+vermeintet
+vermeintlich
+vermeintliche
+vermeintlichem
+vermeintlichen
+vermeintlicher
+vermeintliches
+vermelde
+vermelden
+vermeldend
+vermeldende
+vermeldendem
+vermeldenden
+vermeldender
+vermeldendes
+vermeldest
+vermeldet
+vermeldete
+vermeldetem
+vermeldeten
+vermeldeter
+vermeldetes
+vermeldetest
+vermeldetet
+vermenge
+vermengen
+vermengend
+vermengende
+vermengendem
+vermengenden
+vermengender
+vermengendes
+vermengst
+vermengt
+vermengte
+vermengtem
+vermengten
+vermengter
+vermengtes
+vermengtest
+vermengtet
+vermenschliche
+vermenschlichen
+vermenschlichend
+vermenschlichende
+vermenschlichendem
+vermenschlichenden
+vermenschlichender
+vermenschlichendes
+vermenschlichst
+vermenschlicht
+vermenschlichte
+vermenschlichtem
+vermenschlichten
+vermenschlichter
+vermenschlichtes
+vermenschlichtest
+vermenschlichtet
+vermerk
+vermerke
+vermerken
+vermerkend
+vermerkende
+vermerkendem
+vermerkenden
+vermerkender
+vermerkendes
+vermerkst
+vermerkt
+vermerkte
+vermerktem
+vermerkten
+vermerkter
+vermerktes
+vermerktest
+vermerktet
+vermesse
+vermessen
+vermessend
+vermessende
+vermessendem
+vermessenden
+vermessender
+vermessendes
+vermessene
+vermessenem
+vermessenen
+vermessener
+vermessenes
+vermesst
+vermied
+vermieden
+vermiedene
+vermiedenem
+vermiedenen
+vermiedener
+vermiedenes
+vermiedest
+vermiedet
+vermiedst
+vermietbar
+vermietbare
+vermietbarem
+vermietbaren
+vermietbarer
+vermietbares
+vermiete
+vermieten
+vermietend
+vermietende
+vermietendem
+vermietenden
+vermietender
+vermietendes
+vermietest
+vermietet
+vermietete
+vermietetem
+vermieteten
+vermieteter
+vermietetes
+vermietetest
+vermietetet
+vermindere
+vermindern
+vermindernd
+vermindernde
+verminderndem
+vermindernden
+vermindernder
+verminderndes
+verminderst
+vermindert
+verminderte
+vermindertem
+verminderten
+verminderter
+vermindertes
+vermindertest
+vermindertet
+vermindre
+vermint
+verminte
+vermintem
+verminten
+verminter
+vermintes
+vermische
+vermischen
+vermischend
+vermischende
+vermischendem
+vermischenden
+vermischender
+vermischendes
+vermischest
+vermischst
+vermischt
+vermischte
+vermischtem
+vermischten
+vermischter
+vermischtes
+vermischtest
+vermischtet
+vermiss
+vermisse
+vermissen
+vermissend
+vermissende
+vermissendem
+vermissenden
+vermissender
+vermissendes
+vermissest
+vermisst
+vermisste
+vermisstem
+vermissten
+vermisster
+vermisstes
+vermisstest
+vermisstet
+vermittelbar
+vermittelbare
+vermittelbarem
+vermittelbaren
+vermittelbarer
+vermittelbares
+vermittele
+vermitteln
+vermittelnd
+vermittelnde
+vermittelndem
+vermittelnden
+vermittelnder
+vermittelndes
+vermittels
+vermittelst
+vermittelt
+vermittelte
+vermitteltem
+vermittelten
+vermittelter
+vermitteltes
+vermitteltest
+vermitteltet
+vermittle
+vermochte
+vermochten
+vermochtest
+vermochtet
+vermodere
+vermodern
+vermodernd
+vermodernde
+vermoderndem
+vermodernden
+vermodernder
+vermoderndes
+vermoderst
+vermodert
+vermoderte
+vermodertem
+vermoderten
+vermoderter
+vermodertes
+vermodertest
+vermodertet
+vermodre
+vermute
+vermuten
+vermutend
+vermutende
+vermutendem
+vermutenden
+vermutender
+vermutendes
+vermutest
+vermutet
+vermutete
+vermutetem
+vermuteten
+vermuteter
+vermutetes
+vermutetest
+vermutetet
+vermutlich
+vermutliche
+vermutlichem
+vermutlichen
+vermutlicher
+vermutliches
+vermähle
+vermählen
+vermählend
+vermählende
+vermählendem
+vermählenden
+vermählender
+vermählendes
+vermählst
+vermählt
+vermählte
+vermähltem
+vermählten
+vermählter
+vermähltes
+vermähltest
+vermähltet
+vermöge
+vermögen
+vermögend
+vermögende
+vermögendem
+vermögenden
+vermögender
+vermögendere
+vermögenderem
+vermögenderen
+vermögenderer
+vermögenderes
+vermögendes
+vermögendste
+vermögendstem
+vermögendsten
+vermögendster
+vermögendstes
+vermögenswirksam
+vermögenswirksame
+vermögenswirksamem
+vermögenswirksamen
+vermögenswirksamer
+vermögenswirksames
+vermögt
+vernachlässigbar
+vernachlässigbare
+vernachlässigbarem
+vernachlässigbaren
+vernachlässigbarer
+vernachlässigbares
+vernachlässige
+vernachlässigen
+vernachlässigend
+vernachlässigende
+vernachlässigendem
+vernachlässigenden
+vernachlässigender
+vernachlässigendes
+vernachlässigst
+vernachlässigt
+vernachlässigte
+vernachlässigtem
+vernachlässigten
+vernachlässigter
+vernachlässigtes
+vernachlässigtest
+vernachlässigtet
+vernagele
+vernageln
+vernagelnd
+vernagelnde
+vernagelndem
+vernagelnden
+vernagelnder
+vernagelndes
+vernagelst
+vernagelt
+vernagelte
+vernageltem
+vernagelten
+vernagelter
+vernageltes
+vernageltest
+vernageltet
+vernagle
+vernahm
+vernahmen
+vernahmst
+vernahmt
+vernarbe
+vernarben
+vernarbend
+vernarbende
+vernarbendem
+vernarbenden
+vernarbender
+vernarbendes
+vernarbst
+vernarbt
+vernarbte
+vernarbtem
+vernarbten
+vernarbter
+vernarbtes
+vernarbtest
+vernarbtet
+vernarre
+vernarren
+vernarrend
+vernarrende
+vernarrendem
+vernarrenden
+vernarrender
+vernarrendes
+vernarrst
+vernarrt
+vernarrte
+vernarrtem
+vernarrten
+vernarrter
+vernarrtes
+vernarrtest
+vernarrtet
+vernasche
+vernaschen
+vernaschend
+vernaschende
+vernaschendem
+vernaschenden
+vernaschender
+vernaschendes
+vernaschest
+vernaschst
+vernascht
+vernaschte
+vernaschtem
+vernaschten
+vernaschter
+vernaschtes
+vernaschtest
+vernaschtet
+vernebele
+vernebeln
+vernebelnd
+vernebelnde
+vernebelndem
+vernebelnden
+vernebelnder
+vernebelndes
+vernebelst
+vernebelt
+vernebelte
+vernebeltem
+vernebelten
+vernebelter
+vernebeltes
+vernebeltest
+vernebeltet
+verneble
+vernehmbar
+vernehmbare
+vernehmbarem
+vernehmbaren
+vernehmbarer
+vernehmbares
+vernehme
+vernehmen
+vernehmend
+vernehmende
+vernehmendem
+vernehmenden
+vernehmender
+vernehmendes
+vernehmlich
+vernehmliche
+vernehmlichem
+vernehmlichen
+vernehmlicher
+vernehmliches
+vernehmt
+verneige
+verneigen
+verneigend
+verneigende
+verneigendem
+verneigenden
+verneigender
+verneigendes
+verneigst
+verneigt
+verneigte
+verneigtem
+verneigten
+verneigter
+verneigtes
+verneigtest
+verneigtet
+verneine
+verneinen
+verneinend
+verneinende
+verneinendem
+verneinenden
+verneinender
+verneinendes
+verneinst
+verneint
+verneinte
+verneintem
+verneinten
+verneinter
+verneintes
+verneintest
+verneintet
+vernetzbar
+vernetzbare
+vernetzbarem
+vernetzbaren
+vernetzbarer
+vernetzbares
+vernetze
+vernetzen
+vernetzend
+vernetzende
+vernetzendem
+vernetzenden
+vernetzender
+vernetzendes
+vernetzest
+vernetzt
+vernetzte
+vernetztem
+vernetzten
+vernetzter
+vernetztes
+vernetztest
+vernetztet
+vernichte
+vernichten
+vernichtend
+vernichtende
+vernichtendem
+vernichtenden
+vernichtender
+vernichtendes
+vernichtest
+vernichtet
+vernichtete
+vernichtetem
+vernichteten
+vernichteter
+vernichtetes
+vernichtetest
+vernichtetet
+vernickele
+vernickeln
+vernickelnd
+vernickelnde
+vernickelndem
+vernickelnden
+vernickelnder
+vernickelndes
+vernickelst
+vernickelt
+vernickelte
+vernickeltem
+vernickelten
+vernickelter
+vernickeltes
+vernickeltest
+vernickeltet
+vernickle
+verniedliche
+verniedlichen
+verniedlichend
+verniedlichende
+verniedlichendem
+verniedlichenden
+verniedlichender
+verniedlichendes
+verniedlichst
+verniedlicht
+verniedlichte
+verniedlichtem
+verniedlichten
+verniedlichter
+verniedlichtes
+verniedlichtest
+verniedlichtet
+vernimmst
+vernimmt
+vernommen
+vernommene
+vernommenem
+vernommenen
+vernommener
+vernommenes
+vernunftlos
+vernunftlose
+vernunftlosem
+vernunftlosen
+vernunftloser
+vernunftloses
+vernunftmäßig
+vernunftmäßige
+vernunftmäßigem
+vernunftmäßigen
+vernunftmäßiger
+vernunftmäßiges
+vernunftwidrig
+vernunftwidrige
+vernunftwidrigem
+vernunftwidrigen
+vernunftwidriger
+vernunftwidriges
+vernähe
+vernähen
+vernähend
+vernähende
+vernähendem
+vernähenden
+vernähender
+vernähendes
+vernähst
+vernäht
+vernähte
+vernähtem
+vernähten
+vernähter
+vernähtes
+vernähtest
+vernähtet
+vernünftig
+vernünftige
+vernünftigem
+vernünftigen
+vernünftiger
+vernünftigere
+vernünftigerem
+vernünftigeren
+vernünftigerer
+vernünftigeres
+vernünftigerweise
+vernünftiges
+vernünftigste
+vernünftigstem
+vernünftigsten
+vernünftigster
+vernünftigstes
+verordne
+verordnen
+verordnend
+verordnende
+verordnendem
+verordnenden
+verordnender
+verordnendes
+verordnest
+verordnet
+verordnete
+verordnetem
+verordneten
+verordneter
+verordnetes
+verordnetest
+verordnetet
+verpachte
+verpachten
+verpachtend
+verpachtende
+verpachtendem
+verpachtenden
+verpachtender
+verpachtendes
+verpachtest
+verpachtet
+verpachtete
+verpachtetem
+verpachteten
+verpachteter
+verpachtetes
+verpachtetest
+verpachtetet
+verpacke
+verpacken
+verpackend
+verpackende
+verpackendem
+verpackenden
+verpackender
+verpackendes
+verpackst
+verpackt
+verpackte
+verpacktem
+verpackten
+verpackter
+verpacktes
+verpacktest
+verpacktet
+verpasse
+verpassen
+verpassend
+verpassende
+verpassendem
+verpassenden
+verpassender
+verpassendes
+verpassest
+verpasst
+verpasste
+verpasstem
+verpassten
+verpasster
+verpasstes
+verpasstest
+verpasstet
+verpatze
+verpatzen
+verpatzend
+verpatzende
+verpatzendem
+verpatzenden
+verpatzender
+verpatzendes
+verpatzest
+verpatzt
+verpatzte
+verpatztem
+verpatzten
+verpatzter
+verpatztes
+verpatztest
+verpatztet
+verpetze
+verpetzen
+verpetzend
+verpetzende
+verpetzendem
+verpetzenden
+verpetzender
+verpetzendes
+verpetzest
+verpetzt
+verpetzte
+verpetztem
+verpetzten
+verpetzter
+verpetztes
+verpetztest
+verpetztet
+verpflanze
+verpflanzen
+verpflanzend
+verpflanzende
+verpflanzendem
+verpflanzenden
+verpflanzender
+verpflanzendes
+verpflanzest
+verpflanzt
+verpflanzte
+verpflanztem
+verpflanzten
+verpflanzter
+verpflanztes
+verpflanztest
+verpflanztet
+verpflege
+verpflegen
+verpflegend
+verpflegende
+verpflegendem
+verpflegenden
+verpflegender
+verpflegendes
+verpflegst
+verpflegt
+verpflegte
+verpflegtem
+verpflegten
+verpflegter
+verpflegtes
+verpflegtest
+verpflegtet
+verpflichte
+verpflichten
+verpflichtend
+verpflichtende
+verpflichtendem
+verpflichtenden
+verpflichtender
+verpflichtendes
+verpflichtest
+verpflichtet
+verpflichtete
+verpflichtetem
+verpflichteten
+verpflichteter
+verpflichtetes
+verpflichtetest
+verpflichtetet
+verpfusche
+verpfuschen
+verpfuschend
+verpfuschende
+verpfuschendem
+verpfuschenden
+verpfuschender
+verpfuschendes
+verpfuschest
+verpfuschst
+verpfuscht
+verpfuschte
+verpfuschtem
+verpfuschten
+verpfuschter
+verpfuschtes
+verpfuschtest
+verpfuschtet
+verpfände
+verpfänden
+verpfändend
+verpfändende
+verpfändendem
+verpfändenden
+verpfändender
+verpfändendes
+verpfändest
+verpfändet
+verpfändete
+verpfändetem
+verpfändeten
+verpfändeter
+verpfändetes
+verpfändetest
+verpfändetet
+verplappere
+verplappern
+verplappernd
+verplappernde
+verplapperndem
+verplappernden
+verplappernder
+verplapperndes
+verplapperst
+verplappert
+verplapperte
+verplappertem
+verplapperten
+verplapperter
+verplappertes
+verplappertest
+verplappertet
+verplappre
+verplaudere
+verplaudern
+verplaudernd
+verplaudernde
+verplauderndem
+verplaudernden
+verplaudernder
+verplauderndes
+verplauderst
+verplaudert
+verplauderte
+verplaudertem
+verplauderten
+verplauderter
+verplaudertes
+verplaudertest
+verplaudertet
+verplaudre
+verplempere
+verplempern
+verplempernd
+verplempernde
+verplemperndem
+verplempernden
+verplempernder
+verplemperndes
+verplemperst
+verplempert
+verplemperte
+verplempertem
+verplemperten
+verplemperter
+verplempertes
+verplempertest
+verplempertet
+verplempre
+verpolsicher
+verpolsichere
+verpolsicherem
+verpolsicheren
+verpolsicherer
+verpolsicheres
+verpolt
+verpolte
+verpoltem
+verpolten
+verpolter
+verpoltes
+verpolungssicher
+verpolungssichere
+verpolungssicherem
+verpolungssicheren
+verpolungssicherer
+verpolungssicheres
+verprasse
+verprassen
+verprassend
+verprassende
+verprassendem
+verprassenden
+verprassender
+verprassendes
+verprassest
+verprasst
+verprasste
+verprasstem
+verprassten
+verprasster
+verprasstes
+verprasstest
+verprasstet
+verprivatisiere
+verprivatisieren
+verprivatisierend
+verprivatisierende
+verprivatisierendem
+verprivatisierenden
+verprivatisierender
+verprivatisierendes
+verprivatisierst
+verprivatisiert
+verprivatisierte
+verprivatisiertem
+verprivatisierten
+verprivatisierter
+verprivatisiertes
+verprivatisiertest
+verprivatisiertet
+verprügele
+verprügeln
+verprügelnd
+verprügelnde
+verprügelndem
+verprügelnden
+verprügelnder
+verprügelndes
+verprügelst
+verprügelt
+verprügelte
+verprügeltem
+verprügelten
+verprügelter
+verprügeltes
+verprügeltest
+verprügeltet
+verprügle
+verpuffe
+verpuffen
+verpuffend
+verpuffende
+verpuffendem
+verpuffenden
+verpuffender
+verpuffendes
+verpuffst
+verpufft
+verpuffte
+verpufftem
+verpufften
+verpuffter
+verpufftes
+verpufftest
+verpufftet
+verpulvere
+verpulvern
+verpulvernd
+verpulvernde
+verpulverndem
+verpulvernden
+verpulvernder
+verpulverndes
+verpulverst
+verpulvert
+verpulverte
+verpulvertem
+verpulverten
+verpulverter
+verpulvertes
+verpulvertest
+verpulvertet
+verpulvre
+verpumpe
+verpumpen
+verpumpend
+verpumpende
+verpumpendem
+verpumpenden
+verpumpender
+verpumpendes
+verpumpst
+verpumpt
+verpumpte
+verpumptem
+verpumpten
+verpumpter
+verpumptes
+verpumptest
+verpumptet
+verpuppe
+verpuppen
+verpuppend
+verpuppende
+verpuppendem
+verpuppenden
+verpuppender
+verpuppendes
+verpuppst
+verpuppt
+verpuppte
+verpupptem
+verpuppten
+verpuppter
+verpupptes
+verpupptest
+verpupptet
+verpuste
+verpusten
+verpustend
+verpustende
+verpustendem
+verpustenden
+verpustender
+verpustendes
+verpustest
+verpustet
+verpustete
+verpustetem
+verpusteten
+verpusteter
+verpustetes
+verpustetest
+verpustetet
+verputze
+verputzen
+verputzend
+verputzende
+verputzendem
+verputzenden
+verputzender
+verputzendes
+verputzest
+verputzt
+verputzte
+verputztem
+verputzten
+verputzter
+verputztes
+verputztest
+verputztet
+verpönt
+verpönte
+verpöntem
+verpönten
+verpönter
+verpöntes
+verqualme
+verqualmen
+verqualmend
+verqualmende
+verqualmendem
+verqualmenden
+verqualmender
+verqualmendes
+verqualmst
+verqualmt
+verqualmte
+verqualmtem
+verqualmten
+verqualmter
+verqualmtes
+verqualmtest
+verqualmtet
+verquicke
+verquicken
+verquickend
+verquickende
+verquickendem
+verquickenden
+verquickender
+verquickendes
+verquickst
+verquickt
+verquickte
+verquicktem
+verquickten
+verquickter
+verquicktes
+verquicktest
+verquicktet
+verquollen
+verquollene
+verquollenem
+verquollenen
+verquollener
+verquollenes
+verrammele
+verrammeln
+verrammelnd
+verrammelnde
+verrammelndem
+verrammelnden
+verrammelnder
+verrammelndes
+verrammelst
+verrammelt
+verrammelte
+verrammeltem
+verrammelten
+verrammelter
+verrammeltes
+verrammeltest
+verrammeltet
+verrammle
+verramsche
+verramschen
+verramschend
+verramschende
+verramschendem
+verramschenden
+verramschender
+verramschendes
+verramschest
+verramschst
+verramscht
+verramschte
+verramschtem
+verramschten
+verramschter
+verramschtes
+verramschtest
+verramschtet
+verrann
+verrannt
+verrannte
+verranntem
+verrannten
+verrannter
+verranntes
+verranntest
+verranntet
+verranntst
+verrate
+verraten
+verratend
+verratende
+verratendem
+verratenden
+verratender
+verratendes
+verratene
+verratenem
+verratenen
+verratener
+verratenes
+verratet
+verrauche
+verrauchen
+verrauchend
+verrauchende
+verrauchendem
+verrauchenden
+verrauchender
+verrauchendes
+verrauchst
+verraucht
+verrauchte
+verrauchtem
+verrauchten
+verrauchter
+verrauchtes
+verrauchtest
+verrauchtet
+verrechne
+verrechnen
+verrechnend
+verrechnende
+verrechnendem
+verrechnenden
+verrechnender
+verrechnendes
+verrechnest
+verrechnet
+verrechnete
+verrechnetem
+verrechneten
+verrechneter
+verrechnetes
+verrechnetest
+verrechnetet
+verrecke
+verrecken
+verreckend
+verreckende
+verreckendem
+verreckenden
+verreckender
+verreckendes
+verreckst
+verreckt
+verreckte
+verrecktem
+verreckten
+verreckter
+verrecktes
+verrecktest
+verrecktet
+verregne
+verregnen
+verregnend
+verregnende
+verregnendem
+verregnenden
+verregnender
+verregnendes
+verregnest
+verregnet
+verregnete
+verregnetem
+verregneten
+verregneter
+verregnetes
+verregnetest
+verregnetet
+verreise
+verreisen
+verreisend
+verreisende
+verreisendem
+verreisenden
+verreisender
+verreisendes
+verreisest
+verreist
+verreiste
+verreistem
+verreisten
+verreister
+verreistes
+verreistest
+verreistet
+verreiße
+verreißen
+verreißend
+verreißende
+verreißendem
+verreißenden
+verreißender
+verreißendes
+verreißest
+verreißt
+verrenke
+verrenken
+verrenkend
+verrenkende
+verrenkendem
+verrenkenden
+verrenkender
+verrenkendes
+verrenkst
+verrenkt
+verrenkte
+verrenktem
+verrenkten
+verrenkter
+verrenktes
+verrenktest
+verrenktet
+verrenne
+verrennen
+verrennend
+verrennende
+verrennendem
+verrennenden
+verrennender
+verrennendes
+verrennst
+verrennt
+verrichte
+verrichten
+verrichtend
+verrichtende
+verrichtendem
+verrichtenden
+verrichtender
+verrichtendes
+verrichtest
+verrichtet
+verrichtete
+verrichtetem
+verrichteten
+verrichteter
+verrichtetes
+verrichtetest
+verrichtetet
+verriegele
+verriegeln
+verriegelnd
+verriegelnde
+verriegelndem
+verriegelnden
+verriegelnder
+verriegelndes
+verriegelst
+verriegelt
+verriegelte
+verriegeltem
+verriegelten
+verriegelter
+verriegeltes
+verriegeltest
+verriegeltet
+verriegle
+verriet
+verriete
+verrieten
+verrietest
+verrietet
+verrietst
+verringere
+verringern
+verringernd
+verringernde
+verringerndem
+verringernden
+verringernder
+verringerndes
+verringerst
+verringert
+verringerte
+verringertem
+verringerten
+verringerter
+verringertes
+verringertest
+verringertet
+verringre
+verrinne
+verrinnen
+verrinnend
+verrinnende
+verrinnendem
+verrinnenden
+verrinnender
+verrinnendes
+verrinnst
+verrinnt
+verriss
+verrissen
+verrissene
+verrissenem
+verrissenen
+verrissener
+verrissenes
+verrissest
+verrisst
+verrohe
+verrohen
+verrohend
+verrohende
+verrohendem
+verrohenden
+verrohender
+verrohendes
+verrohst
+verroht
+verrohte
+verrohtem
+verrohten
+verrohter
+verrohtes
+verrohtest
+verrohtet
+verronnen
+verronnene
+verronnenem
+verronnenen
+verronnener
+verronnenes
+verroste
+verrosten
+verrostend
+verrostende
+verrostendem
+verrostenden
+verrostender
+verrostendes
+verrostest
+verrostet
+verrostete
+verrostetem
+verrosteten
+verrosteter
+verrostetes
+verrostetest
+verrostetet
+verrotte
+verrotten
+verrottend
+verrottende
+verrottendem
+verrottenden
+verrottender
+verrottendes
+verrottest
+verrottet
+verrottete
+verrottetem
+verrotteten
+verrotteter
+verrottetes
+verrottetest
+verrottetet
+verrucht
+verruchte
+verruchtem
+verruchten
+verruchter
+verruchtes
+verrufen
+verrufene
+verrufenem
+verrufenen
+verrufener
+verrufenes
+verrutsch
+verrutsche
+verrutschen
+verrutschend
+verrutschende
+verrutschendem
+verrutschenden
+verrutschender
+verrutschendes
+verrutschest
+verrutschst
+verrutscht
+verrutschte
+verrutschtem
+verrutschten
+verrutschter
+verrutschtes
+verrutschtest
+verrutschtet
+verrät
+verräterisch
+verräterische
+verräterischem
+verräterischen
+verräterischer
+verräterisches
+verrätst
+verräuchere
+verräuchern
+verräuchernd
+verräuchernde
+verräucherndem
+verräuchernden
+verräuchernder
+verräucherndes
+verräucherst
+verräuchert
+verräucherte
+verräuchertem
+verräucherten
+verräucherter
+verräuchertes
+verräuchertest
+verräuchertet
+verräuchre
+verrücke
+verrücken
+verrückend
+verrückende
+verrückendem
+verrückenden
+verrückender
+verrückendes
+verrückst
+verrückt
+verrückte
+verrücktem
+verrückten
+verrückter
+verrücktes
+verrücktest
+verrücktet
+versage
+versagen
+versagend
+versagende
+versagendem
+versagenden
+versagender
+versagendes
+versagst
+versagt
+versagte
+versagtem
+versagten
+versagter
+versagtes
+versagtest
+versagtet
+versah
+versahen
+versahst
+versaht
+versalze
+versalzen
+versalzend
+versalzende
+versalzendem
+versalzenden
+versalzender
+versalzendes
+versalzene
+versalzenem
+versalzenen
+versalzener
+versalzenes
+versalzest
+versalzt
+versalzte
+versalztem
+versalzten
+versalzter
+versalztes
+versalztest
+versalztet
+versammele
+versammeln
+versammelnd
+versammelnde
+versammelndem
+versammelnden
+versammelnder
+versammelndes
+versammelst
+versammelt
+versammelte
+versammeltem
+versammelten
+versammelter
+versammeltes
+versammeltest
+versammeltet
+versammle
+versandbereit
+versandbereite
+versandbereitem
+versandbereiten
+versandbereiter
+versandbereites
+versande
+versanden
+versandend
+versandende
+versandendem
+versandenden
+versandender
+versandendes
+versandest
+versandet
+versandete
+versandetem
+versandeten
+versandeter
+versandetes
+versandetest
+versandetet
+versandfertig
+versandfertige
+versandfertigem
+versandfertigen
+versandfertiger
+versandfertiges
+versandt
+versandte
+versandtem
+versandten
+versandter
+versandtes
+versandtest
+versandtet
+versank
+versanken
+versankest
+versankst
+versankt
+versaue
+versauen
+versauend
+versauende
+versauendem
+versauenden
+versauender
+versauendes
+versauere
+versauern
+versauernd
+versauernde
+versauerndem
+versauernden
+versauernder
+versauerndes
+versauerst
+versauert
+versauerte
+versauertem
+versauerten
+versauerter
+versauertes
+versauertest
+versauertet
+versaufe
+versaufen
+versaufend
+versaufende
+versaufendem
+versaufenden
+versaufender
+versaufendes
+versauft
+versaure
+versaust
+versaut
+versaute
+versautem
+versauten
+versauter
+versautes
+versautest
+versautet
+verschachere
+verschachern
+verschachernd
+verschachernde
+verschacherndem
+verschachernden
+verschachernder
+verschacherndes
+verschacherst
+verschachert
+verschacherte
+verschachertem
+verschacherten
+verschacherter
+verschachertes
+verschachertest
+verschachertet
+verschachre
+verschachtelbar
+verschachtelbare
+verschachtelbarem
+verschachtelbaren
+verschachtelbarer
+verschachtelbares
+verschachtele
+verschachteln
+verschachtelnd
+verschachtelnde
+verschachtelndem
+verschachtelnden
+verschachtelnder
+verschachtelndes
+verschachtelst
+verschachtelt
+verschachtelte
+verschachteltem
+verschachtelten
+verschachtelter
+verschachteltes
+verschachteltest
+verschachteltet
+verschachtle
+verschaff
+verschaffe
+verschaffen
+verschaffend
+verschaffende
+verschaffendem
+verschaffenden
+verschaffender
+verschaffendes
+verschaffst
+verschafft
+verschaffte
+verschafftem
+verschafften
+verschaffter
+verschafftes
+verschafftest
+verschafftet
+verschale
+verschalen
+verschalend
+verschalende
+verschalendem
+verschalenden
+verschalender
+verschalendes
+verschalst
+verschalt
+verschalte
+verschaltem
+verschalten
+verschalter
+verschaltes
+verschaltest
+verschaltet
+verschandele
+verschandeln
+verschandelnd
+verschandelnde
+verschandelndem
+verschandelnden
+verschandelnder
+verschandelndes
+verschandelst
+verschandelt
+verschandelte
+verschandeltem
+verschandelten
+verschandelter
+verschandeltes
+verschandeltest
+verschandeltet
+verschandle
+verschanze
+verschanzen
+verschanzend
+verschanzende
+verschanzendem
+verschanzenden
+verschanzender
+verschanzendes
+verschanzest
+verschanzt
+verschanzte
+verschanztem
+verschanzten
+verschanzter
+verschanztes
+verschanztest
+verschanztet
+verscharre
+verscharren
+verscharrend
+verscharrende
+verscharrendem
+verscharrenden
+verscharrender
+verscharrendes
+verscharrst
+verscharrt
+verscharrte
+verscharrtem
+verscharrten
+verscharrter
+verscharrtes
+verscharrtest
+verscharrtet
+verschaukele
+verschaukeln
+verschaukelst
+verschaukelt
+verschaukelte
+verschaukeltem
+verschaukelten
+verschaukelter
+verschaukeltes
+verschaukeltest
+verschaukeltet
+verschaukle
+verscheide
+verscheiden
+verscheidend
+verscheidende
+verscheidendem
+verscheidenden
+verscheidender
+verscheidendes
+verscheidest
+verscheidet
+verschenke
+verschenken
+verschenkend
+verschenkende
+verschenkendem
+verschenkenden
+verschenkender
+verschenkendes
+verschenkst
+verschenkt
+verschenkte
+verschenktem
+verschenkten
+verschenkter
+verschenktes
+verschenktest
+verschenktet
+verscherbele
+verscherbeln
+verscherbelnd
+verscherbelnde
+verscherbelndem
+verscherbelnden
+verscherbelnder
+verscherbelndes
+verscherbelst
+verscherbelt
+verscherbelte
+verscherbeltem
+verscherbelten
+verscherbelter
+verscherbeltes
+verscherbeltest
+verscherbeltet
+verscherble
+verscherze
+verscherzen
+verscherzend
+verscherzende
+verscherzendem
+verscherzenden
+verscherzender
+verscherzendes
+verscherzest
+verscherzt
+verscherzte
+verscherztem
+verscherzten
+verscherzter
+verscherztes
+verscherztest
+verscherztet
+verscheuche
+verscheuchen
+verscheuchend
+verscheuchende
+verscheuchendem
+verscheuchenden
+verscheuchender
+verscheuchendes
+verscheuchst
+verscheucht
+verscheuchte
+verscheuchtem
+verscheuchten
+verscheuchter
+verscheuchtes
+verscheuchtest
+verscheuchtet
+verscheuere
+verscheuern
+verscheuernd
+verscheuernde
+verscheuerndem
+verscheuernden
+verscheuernder
+verscheuerndes
+verscheuerst
+verscheuert
+verscheuerte
+verscheuertem
+verscheuerten
+verscheuerter
+verscheuertes
+verscheuertest
+verscheuertet
+verscheure
+verschicke
+verschicken
+verschickend
+verschickende
+verschickendem
+verschickenden
+verschickender
+verschickendes
+verschickst
+verschickt
+verschickte
+verschicktem
+verschickten
+verschickter
+verschicktes
+verschicktest
+verschicktet
+verschiebbar
+verschiebbare
+verschiebbarem
+verschiebbaren
+verschiebbarer
+verschiebbares
+verschiebe
+verschieben
+verschiebend
+verschiebende
+verschiebendem
+verschiebenden
+verschiebender
+verschiebendes
+verschiebst
+verschiebt
+verschied
+verschieden
+verschiedenartig
+verschiedenartige
+verschiedenartigem
+verschiedenartigen
+verschiedenartiger
+verschiedenartigere
+verschiedenartigerem
+verschiedenartigeren
+verschiedenartigerer
+verschiedenartigeres
+verschiedenartiges
+verschiedenartigste
+verschiedenartigstem
+verschiedenartigsten
+verschiedenartigster
+verschiedenartigstes
+verschiedene
+verschiedenem
+verschiedenen
+verschiedener
+verschiedenere
+verschiedenerem
+verschiedeneren
+verschiedenerer
+verschiedeneres
+verschiedenerlei
+verschiedenes
+verschiedenfarbig
+verschiedenfarbige
+verschiedenfarbigem
+verschiedenfarbigen
+verschiedenfarbiger
+verschiedenfarbiges
+verschiedenste
+verschiedenstem
+verschiedensten
+verschiedenster
+verschiedenstes
+verschiedentlich
+verschiedentliche
+verschiedentlichem
+verschiedentlichen
+verschiedentlicher
+verschiedentliches
+verschiedentlichst
+verschiedest
+verschiedet
+verschiedst
+verschieße
+verschießen
+verschießend
+verschießende
+verschießendem
+verschießenden
+verschießender
+verschießendes
+verschießest
+verschießt
+verschiffe
+verschiffen
+verschiffend
+verschiffende
+verschiffendem
+verschiffenden
+verschiffender
+verschiffendes
+verschiffst
+verschifft
+verschiffte
+verschifftem
+verschifften
+verschiffter
+verschifftes
+verschifftest
+verschifftet
+verschimmele
+verschimmeln
+verschimmelnd
+verschimmelnde
+verschimmelndem
+verschimmelnden
+verschimmelnder
+verschimmelndes
+verschimmelst
+verschimmelt
+verschimmelte
+verschimmeltem
+verschimmelten
+verschimmelter
+verschimmeltes
+verschimmeltest
+verschimmeltet
+verschimmle
+verschiss
+verschissen
+verschissest
+verschisst
+verschlafe
+verschlafen
+verschlafend
+verschlafende
+verschlafendem
+verschlafenden
+verschlafender
+verschlafendes
+verschlafene
+verschlafenem
+verschlafenen
+verschlafener
+verschlafenes
+verschlaft
+verschlage
+verschlagen
+verschlagend
+verschlagende
+verschlagendem
+verschlagenden
+verschlagender
+verschlagendes
+verschlagene
+verschlagenem
+verschlagenen
+verschlagener
+verschlagenes
+verschlagt
+verschlamme
+verschlammen
+verschlammend
+verschlammende
+verschlammendem
+verschlammenden
+verschlammender
+verschlammendes
+verschlammst
+verschlammt
+verschlammte
+verschlammtem
+verschlammten
+verschlammter
+verschlammtes
+verschlammtest
+verschlammtet
+verschlampe
+verschlampen
+verschlampend
+verschlampende
+verschlampendem
+verschlampenden
+verschlampender
+verschlampendes
+verschlampst
+verschlampt
+verschlampte
+verschlamptem
+verschlampten
+verschlampter
+verschlamptes
+verschlamptest
+verschlamptet
+verschlang
+verschlangen
+verschlangst
+verschlangt
+verschlechtere
+verschlechtern
+verschlechternd
+verschlechternde
+verschlechterndem
+verschlechternden
+verschlechternder
+verschlechterndes
+verschlechterst
+verschlechtert
+verschlechterte
+verschlechtertem
+verschlechterten
+verschlechterter
+verschlechtertes
+verschlechtertest
+verschlechtertet
+verschlechtre
+verschleiere
+verschleiern
+verschleiernd
+verschleiernde
+verschleierndem
+verschleiernden
+verschleiernder
+verschleierndes
+verschleierst
+verschleiert
+verschleierte
+verschleiertem
+verschleierten
+verschleierter
+verschleiertes
+verschleiertest
+verschleiertet
+verschleife
+verschleifen
+verschleifend
+verschleifende
+verschleifendem
+verschleifenden
+verschleifender
+verschleifendes
+verschleifst
+verschleift
+verschleifte
+verschleiftem
+verschleiften
+verschleifter
+verschleiftes
+verschleiftest
+verschleiftet
+verschleire
+verschleiße
+verschleißen
+verschleißend
+verschleißende
+verschleißendem
+verschleißenden
+verschleißender
+verschleißendes
+verschleißest
+verschleißt
+verschleißte
+verschleißtem
+verschleißten
+verschleißter
+verschleißtes
+verschleißtest
+verschleißtet
+verschleppe
+verschleppen
+verschleppend
+verschleppende
+verschleppendem
+verschleppenden
+verschleppender
+verschleppendes
+verschleppst
+verschleppt
+verschleppte
+verschlepptem
+verschleppten
+verschleppter
+verschlepptes
+verschlepptest
+verschlepptet
+verschleudere
+verschleudern
+verschleudernd
+verschleudernde
+verschleuderndem
+verschleudernden
+verschleudernder
+verschleuderndes
+verschleuderst
+verschleudert
+verschleuderte
+verschleudertem
+verschleuderten
+verschleuderter
+verschleudertes
+verschleudertest
+verschleudertet
+verschleudre
+verschlief
+verschliefe
+verschliefen
+verschliefest
+verschliefst
+verschlieft
+verschließbar
+verschließbare
+verschließbarem
+verschließbaren
+verschließbarer
+verschließbares
+verschließe
+verschließen
+verschließend
+verschließende
+verschließendem
+verschließenden
+verschließender
+verschließendes
+verschließest
+verschließt
+verschlimmere
+verschlimmern
+verschlimmernd
+verschlimmernde
+verschlimmerndem
+verschlimmernden
+verschlimmernder
+verschlimmerndes
+verschlimmerst
+verschlimmert
+verschlimmerte
+verschlimmertem
+verschlimmerten
+verschlimmerter
+verschlimmertes
+verschlimmertest
+verschlimmertet
+verschlimmre
+verschlinge
+verschlingen
+verschlingend
+verschlingende
+verschlingendem
+verschlingenden
+verschlingender
+verschlingendes
+verschlingst
+verschlingt
+verschloss
+verschlossen
+verschlossene
+verschlossenem
+verschlossenen
+verschlossener
+verschlossenes
+verschlossest
+verschlosst
+verschlucke
+verschlucken
+verschluckend
+verschluckende
+verschluckendem
+verschluckenden
+verschluckender
+verschluckendes
+verschluckst
+verschluckt
+verschluckte
+verschlucktem
+verschluckten
+verschluckter
+verschlucktes
+verschlucktest
+verschlucktet
+verschlug
+verschlugen
+verschlugst
+verschlugt
+verschlungen
+verschlungene
+verschlungenem
+verschlungenen
+verschlungener
+verschlungenes
+verschläfst
+verschläft
+verschlägst
+verschlägt
+verschlüssele
+verschlüsseln
+verschlüsselnd
+verschlüsselnde
+verschlüsselndem
+verschlüsselnden
+verschlüsselnder
+verschlüsselndes
+verschlüsselst
+verschlüsselt
+verschlüsselte
+verschlüsseltem
+verschlüsselten
+verschlüsselter
+verschlüsseltes
+verschlüsseltest
+verschlüsseltet
+verschlüssle
+verschmachte
+verschmachten
+verschmachtend
+verschmachtende
+verschmachtendem
+verschmachtenden
+verschmachtender
+verschmachtendes
+verschmachtest
+verschmachtet
+verschmachtete
+verschmachtetem
+verschmachteten
+verschmachteter
+verschmachtetes
+verschmachtetest
+verschmachtetet
+verschmelze
+verschmelzen
+verschmelzend
+verschmelzende
+verschmelzendem
+verschmelzenden
+verschmelzender
+verschmelzendes
+verschmelzest
+verschmelzt
+verschmelzte
+verschmelzten
+verschmelztest
+verschmelztet
+verschmerzbar
+verschmerzbare
+verschmerzbarem
+verschmerzbaren
+verschmerzbarer
+verschmerzbares
+verschmerze
+verschmerzen
+verschmerzend
+verschmerzende
+verschmerzendem
+verschmerzenden
+verschmerzender
+verschmerzendes
+verschmerzest
+verschmerzt
+verschmerzte
+verschmerztem
+verschmerzten
+verschmerzter
+verschmerztes
+verschmerztest
+verschmerztet
+verschmiere
+verschmieren
+verschmierend
+verschmierende
+verschmierendem
+verschmierenden
+verschmierender
+verschmierendes
+verschmierst
+verschmiert
+verschmierte
+verschmiertem
+verschmierten
+verschmierter
+verschmiertes
+verschmiertest
+verschmiertet
+verschmilzest
+verschmilzt
+verschmitzt
+verschmitzte
+verschmitztem
+verschmitzten
+verschmitzter
+verschmitztes
+verschmolz
+verschmolzen
+verschmolzene
+verschmolzenem
+verschmolzenen
+verschmolzener
+verschmolzenes
+verschmolzest
+verschmolzt
+verschmutze
+verschmutzen
+verschmutzend
+verschmutzende
+verschmutzendem
+verschmutzenden
+verschmutzender
+verschmutzendes
+verschmutzest
+verschmutzt
+verschmutzte
+verschmutztem
+verschmutzten
+verschmutzter
+verschmutztes
+verschmutztest
+verschmutztet
+verschmähe
+verschmähen
+verschmähend
+verschmähende
+verschmähendem
+verschmähenden
+verschmähender
+verschmähendes
+verschmähst
+verschmäht
+verschmähte
+verschmähtem
+verschmähten
+verschmähter
+verschmähtes
+verschmähtest
+verschmähtet
+verschnaufe
+verschnaufen
+verschnaufend
+verschnaufende
+verschnaufendem
+verschnaufenden
+verschnaufender
+verschnaufendes
+verschnaufst
+verschnauft
+verschnaufte
+verschnauftem
+verschnauften
+verschnaufter
+verschnauftes
+verschnauftest
+verschnauftet
+verschneide
+verschneiden
+verschneidend
+verschneidende
+verschneidendem
+verschneidenden
+verschneidender
+verschneidendes
+verschneidest
+verschneidet
+verschneit
+verschneite
+verschneitem
+verschneiten
+verschneiter
+verschneites
+verschnitt
+verschnitten
+verschnittene
+verschnittenem
+verschnittenen
+verschnittener
+verschnittenes
+verschnittest
+verschnittet
+verschnittst
+verschnupfe
+verschnupfen
+verschnupfend
+verschnupfende
+verschnupfendem
+verschnupfenden
+verschnupfender
+verschnupfendes
+verschnupfst
+verschnupft
+verschnupfte
+verschnupftem
+verschnupften
+verschnupfter
+verschnupftes
+verschnupftest
+verschnupftet
+verschnörkelt
+verschnörkelte
+verschnörkeltem
+verschnörkelten
+verschnörkelter
+verschnörkeltes
+verschnüre
+verschnüren
+verschnürend
+verschnürende
+verschnürendem
+verschnürenden
+verschnürender
+verschnürendes
+verschnürst
+verschnürt
+verschnürte
+verschnürtem
+verschnürten
+verschnürter
+verschnürtes
+verschnürtest
+verschnürtet
+verschob
+verschoben
+verschobene
+verschobenem
+verschobenen
+verschobener
+verschobenes
+verschobst
+verschobt
+verschollen
+verschollene
+verschollenem
+verschollenen
+verschollener
+verschollenes
+verschone
+verschonen
+verschonend
+verschonende
+verschonendem
+verschonenden
+verschonender
+verschonendes
+verschonst
+verschont
+verschonte
+verschontem
+verschonten
+verschonter
+verschontes
+verschontest
+verschontet
+verschoss
+verschossen
+verschossene
+verschossenem
+verschossenen
+verschossener
+verschossenes
+verschossest
+verschosst
+verschraube
+verschrauben
+verschraubend
+verschraubende
+verschraubendem
+verschraubenden
+verschraubender
+verschraubendes
+verschraubst
+verschraubt
+verschraubte
+verschraubtem
+verschraubten
+verschraubter
+verschraubtes
+verschraubtest
+verschraubtet
+verschrecke
+verschrecken
+verschreckend
+verschreckende
+verschreckendem
+verschreckenden
+verschreckender
+verschreckendes
+verschreckst
+verschreckt
+verschreckte
+verschrecktem
+verschreckten
+verschreckter
+verschrecktes
+verschrecktest
+verschrecktet
+verschreibe
+verschreiben
+verschreibend
+verschreibende
+verschreibendem
+verschreibenden
+verschreibender
+verschreibendes
+verschreibst
+verschreibt
+verschrie
+verschrieb
+verschrieben
+verschriebene
+verschriebenem
+verschriebenen
+verschriebener
+verschriebenes
+verschriebst
+verschriebt
+verschrieen
+verschrieene
+verschrieenem
+verschrieenen
+verschrieener
+verschrieenes
+verschrien
+verschriest
+verschriet
+verschroben
+verschrobene
+verschrobenem
+verschrobenen
+verschrobener
+verschrobenes
+verschrotte
+verschrotten
+verschrottend
+verschrottende
+verschrottendem
+verschrottenden
+verschrottender
+verschrottendes
+verschrottest
+verschrottet
+verschrottete
+verschrottetem
+verschrotteten
+verschrotteter
+verschrottetes
+verschrottetest
+verschrottetet
+verschränke
+verschränken
+verschränkend
+verschränkende
+verschränkendem
+verschränkenden
+verschränkender
+verschränkendes
+verschränkst
+verschränkt
+verschränkte
+verschränktem
+verschränkten
+verschränkter
+verschränktes
+verschränktest
+verschränktet
+verschulde
+verschulden
+verschuldend
+verschuldende
+verschuldendem
+verschuldenden
+verschuldender
+verschuldendes
+verschuldest
+verschuldet
+verschuldete
+verschuldetem
+verschuldeten
+verschuldeter
+verschuldetes
+verschuldetest
+verschuldetet
+verschwamm
+verschwammen
+verschwammst
+verschwammt
+verschwand
+verschwanden
+verschwandest
+verschwandet
+verschwandst
+verschweig
+verschweige
+verschweigen
+verschweigend
+verschweigende
+verschweigendem
+verschweigenden
+verschweigender
+verschweigendes
+verschweigst
+verschweigt
+verschwende
+verschwenden
+verschwendend
+verschwendende
+verschwendendem
+verschwendenden
+verschwendender
+verschwendendes
+verschwenderisch
+verschwenderische
+verschwenderischem
+verschwenderischen
+verschwenderischer
+verschwenderisches
+verschwendest
+verschwendet
+verschwendete
+verschwendetem
+verschwendeten
+verschwendeter
+verschwendetes
+verschwendetest
+verschwendetet
+verschwieg
+verschwiegen
+verschwiegene
+verschwiegenem
+verschwiegenen
+verschwiegener
+verschwiegenes
+verschwiegst
+verschwiegt
+verschwimme
+verschwimmen
+verschwimmend
+verschwimmende
+verschwimmendem
+verschwimmenden
+verschwimmender
+verschwimmendes
+verschwimmst
+verschwimmt
+verschwinde
+verschwinden
+verschwindend
+verschwindende
+verschwindendem
+verschwindenden
+verschwindender
+verschwindendes
+verschwindest
+verschwindet
+verschwistert
+verschwisterte
+verschwistertem
+verschwisterten
+verschwisterter
+verschwistertes
+verschwitze
+verschwitzen
+verschwitzend
+verschwitzende
+verschwitzendem
+verschwitzenden
+verschwitzender
+verschwitzendes
+verschwitzest
+verschwitzt
+verschwitzte
+verschwitztem
+verschwitzten
+verschwitzter
+verschwitztes
+verschwitztest
+verschwitztet
+verschwollen
+verschwollene
+verschwollenem
+verschwollenen
+verschwollener
+verschwollenes
+verschwommen
+verschwommene
+verschwommenem
+verschwommenen
+verschwommener
+verschwommenes
+verschwor
+verschworen
+verschworene
+verschworenem
+verschworenen
+verschworener
+verschworenes
+verschworst
+verschwort
+verschwunden
+verschwundene
+verschwundenem
+verschwundenen
+verschwundener
+verschwundenes
+verschwägert
+verschwägerte
+verschwägertem
+verschwägerten
+verschwägerter
+verschwägertes
+verschwöre
+verschwören
+verschwörend
+verschwörende
+verschwörendem
+verschwörenden
+verschwörender
+verschwörendes
+verschwörerisch
+verschwörerische
+verschwörerischem
+verschwörerischen
+verschwörerischer
+verschwörerisches
+verschwörst
+verschwört
+verschämt
+verschämte
+verschämtem
+verschämten
+verschämter
+verschämtes
+verschärfe
+verschärfen
+verschärfend
+verschärfende
+verschärfendem
+verschärfenden
+verschärfender
+verschärfendes
+verschärfst
+verschärft
+verschärfte
+verschärftem
+verschärften
+verschärfter
+verschärftes
+verschärftest
+verschärftet
+verschätze
+verschätzen
+verschätzest
+verschätzt
+verschätzte
+verschätzten
+verschätztest
+verschätztet
+verschönere
+verschönern
+verschönernd
+verschönernde
+verschönerndem
+verschönernden
+verschönernder
+verschönerndes
+verschönerst
+verschönert
+verschönerte
+verschönertem
+verschönerten
+verschönerter
+verschönertes
+verschönertest
+verschönertet
+verschönre
+verschüchtere
+verschüchtern
+verschüchternd
+verschüchternde
+verschüchterndem
+verschüchternden
+verschüchternder
+verschüchterndes
+verschüchterst
+verschüchtert
+verschüchterte
+verschüchtertem
+verschüchterten
+verschüchterter
+verschüchtertes
+verschüchtertest
+verschüchtertet
+verschüchtre
+verschütte
+verschütten
+verschüttend
+verschüttende
+verschüttendem
+verschüttenden
+verschüttender
+verschüttendes
+verschüttest
+verschüttet
+verschüttete
+verschüttetem
+verschütteten
+verschütteter
+verschüttetes
+verschüttetest
+verschüttetet
+versehe
+versehen
+versehend
+versehende
+versehendem
+versehenden
+versehender
+versehendes
+versehene
+versehenem
+versehenen
+versehener
+versehenes
+versehentlich
+versehentliche
+versehentlichem
+versehentlichen
+versehentlicher
+versehentliches
+versehre
+versehren
+versehrend
+versehrende
+versehrendem
+versehrenden
+versehrender
+versehrendes
+versehrst
+versehrt
+versehrte
+versehrtem
+versehrten
+versehrter
+versehrtes
+versehrtest
+versehrtet
+verseht
+verselbstständige
+verselbstständigen
+verselbstständigst
+verselbstständigt
+verselbstständigte
+verselbstständigtem
+verselbstständigten
+verselbstständigter
+verselbstständigtes
+verselbstständigtest
+verselbstständigtet
+verselbständige
+verselbständigen
+verselbständigst
+verselbständigt
+verselbständigte
+verselbständigtem
+verselbständigten
+verselbständigter
+verselbständigtes
+verselbständigtest
+verselbständigtet
+versende
+versenden
+versendend
+versendende
+versendendem
+versendenden
+versendender
+versendendes
+versendest
+versendet
+versendete
+versendetem
+versendeten
+versendeter
+versendetes
+versendetest
+versendetet
+versenge
+versengen
+versengend
+versengende
+versengendem
+versengenden
+versengender
+versengendes
+versengst
+versengt
+versengte
+versengtem
+versengten
+versengter
+versengtes
+versengtest
+versengtet
+versenke
+versenken
+versenkend
+versenkende
+versenkendem
+versenkenden
+versenkender
+versenkendes
+versenkst
+versenkt
+versenkte
+versenktem
+versenkten
+versenkter
+versenktes
+versenktest
+versenktet
+versessen
+versessene
+versessenem
+versessenen
+versessener
+versessenes
+versetze
+versetzen
+versetzend
+versetzende
+versetzendem
+versetzenden
+versetzender
+versetzendes
+versetzest
+versetzt
+versetzte
+versetztem
+versetzten
+versetzter
+versetztes
+versetztest
+versetztet
+verseuche
+verseuchen
+verseuchend
+verseuchende
+verseuchendem
+verseuchenden
+verseuchender
+verseuchendes
+verseuchst
+verseucht
+verseuchte
+verseuchtem
+verseuchten
+verseuchter
+verseuchtes
+verseuchtest
+verseuchtet
+versichere
+versichern
+versichernd
+versichernde
+versicherndem
+versichernden
+versichernder
+versicherndes
+versicherst
+versichert
+versicherte
+versichertem
+versicherten
+versicherter
+versichertes
+versichertest
+versichertet
+versicherungspflichtig
+versicherungspflichtige
+versicherungspflichtigem
+versicherungspflichtigen
+versicherungspflichtiger
+versicherungspflichtiges
+versichre
+versickert
+versickerte
+versickertem
+versickerten
+versickerter
+versickertes
+versiege
+versiegele
+versiegeln
+versiegelnd
+versiegelnde
+versiegelndem
+versiegelnden
+versiegelnder
+versiegelndes
+versiegelst
+versiegelt
+versiegelte
+versiegeltem
+versiegelten
+versiegelter
+versiegeltes
+versiegeltest
+versiegeltet
+versiegen
+versiegend
+versiegende
+versiegendem
+versiegenden
+versiegender
+versiegendes
+versiegle
+versiegst
+versiegt
+versiegte
+versiegtem
+versiegten
+versiegter
+versiegtes
+versiegtest
+versiegtet
+versiehst
+versieht
+versiert
+versierte
+versiertem
+versierten
+versierter
+versiertes
+versilbere
+versilbern
+versilbernd
+versilbernde
+versilberndem
+versilbernden
+versilbernder
+versilberndes
+versilberst
+versilbert
+versilberte
+versilbertem
+versilberten
+versilberter
+versilbertes
+versilbertest
+versilbertet
+versilbre
+versinke
+versinken
+versinkend
+versinkende
+versinkendem
+versinkenden
+versinkender
+versinkendes
+versinkst
+versinkt
+versinnbildliche
+versinnbildlichen
+versinnbildlichend
+versinnbildlichende
+versinnbildlichendem
+versinnbildlichenden
+versinnbildlichender
+versinnbildlichendes
+versinnbildlichst
+versinnbildlicht
+versinnbildlichte
+versinnbildlichtem
+versinnbildlichten
+versinnbildlichter
+versinnbildlichtes
+versinnbildlichtest
+versinnbildlichtet
+versklave
+versklaven
+versklavend
+versklavende
+versklavendem
+versklavenden
+versklavender
+versklavendes
+versklavst
+versklavt
+versklavte
+versklavtem
+versklavten
+versklavter
+versklavtes
+versklavtest
+versklavtet
+versnobt
+versnobte
+versnobtem
+versnobten
+versnobter
+versnobtes
+versoff
+versoffen
+versoffene
+versoffenem
+versoffenen
+versoffener
+versoffenes
+versoffest
+versoffst
+versofft
+versonnen
+versonnene
+versonnenem
+versonnenen
+versonnener
+versonnenes
+versorge
+versorgen
+versorgend
+versorgende
+versorgendem
+versorgenden
+versorgender
+versorgendes
+versorgst
+versorgt
+versorgte
+versorgtem
+versorgten
+versorgter
+versorgtes
+versorgtest
+versorgtet
+verspanne
+verspannen
+verspannend
+verspannende
+verspannendem
+verspannenden
+verspannender
+verspannendes
+verspannst
+verspannt
+verspannte
+verspanntem
+verspannten
+verspannter
+verspanntes
+verspanntest
+verspanntet
+verspaße
+verspaßen
+verspaßend
+verspaßende
+verspaßendem
+verspaßenden
+verspaßender
+verspaßendes
+verspaßest
+verspaßt
+verspaßte
+verspaßten
+verspaßtest
+verspaßtet
+verspeise
+verspeisen
+verspeisend
+verspeisende
+verspeisendem
+verspeisenden
+verspeisender
+verspeisendes
+verspeisest
+verspeist
+verspeiste
+verspeistem
+verspeisten
+verspeister
+verspeistes
+verspeistest
+verspeistet
+verspekuliere
+verspekulieren
+verspekulierend
+verspekulierende
+verspekulierendem
+verspekulierenden
+verspekulierender
+verspekulierendes
+verspekulierst
+verspekuliert
+verspekulierte
+verspekuliertem
+verspekulierten
+verspekulierter
+verspekuliertes
+verspekuliertest
+verspekuliertet
+versperre
+versperren
+versperrend
+versperrende
+versperrendem
+versperrenden
+versperrender
+versperrendes
+versperrst
+versperrt
+versperrte
+versperrtem
+versperrten
+versperrter
+versperrtes
+versperrtest
+versperrtet
+verspiele
+verspielen
+verspielend
+verspielende
+verspielendem
+verspielenden
+verspielender
+verspielendes
+verspielst
+verspielt
+verspielte
+verspieltem
+verspielten
+verspielter
+verspieltes
+verspieltest
+verspieltet
+verspinnbar
+verspinnbare
+verspinnbarem
+verspinnbaren
+verspinnbarer
+verspinnbares
+verspinne
+verspinnen
+verspinnend
+verspinnende
+verspinnendem
+verspinnenden
+verspinnender
+verspinnendes
+verspinnst
+verspinnt
+versponnen
+versponnene
+versponnenem
+versponnenen
+versponnener
+versponnenes
+verspotte
+verspotten
+verspottend
+verspottende
+verspottendem
+verspottenden
+verspottender
+verspottendes
+verspottest
+verspottet
+verspottete
+verspottetem
+verspotteten
+verspotteter
+verspottetes
+verspottetest
+verspottetet
+versprach
+versprachen
+versprachest
+versprachst
+verspracht
+verspreche
+versprechen
+versprechend
+versprechende
+versprechendem
+versprechenden
+versprechender
+versprechendes
+versprecht
+versprenge
+versprengen
+versprengend
+versprengende
+versprengendem
+versprengenden
+versprengender
+versprengendes
+versprengst
+versprengt
+versprengte
+versprengtem
+versprengten
+versprengter
+versprengtes
+versprengtest
+versprengtet
+versprich
+versprichst
+verspricht
+verspritze
+verspritzen
+verspritzend
+verspritzende
+verspritzendem
+verspritzenden
+verspritzender
+verspritzendes
+verspritzest
+verspritzt
+verspritzte
+verspritztem
+verspritzten
+verspritzter
+verspritztes
+verspritztest
+verspritztet
+versprochen
+versprochene
+versprochenem
+versprochenen
+versprochener
+versprochenes
+versprühe
+versprühen
+versprühend
+versprühende
+versprühendem
+versprühenden
+versprühender
+versprühendes
+versprühst
+versprüht
+versprühte
+versprühtem
+versprühten
+versprühter
+versprühtes
+versprühtest
+versprühtet
+verspäte
+verspäten
+verspätend
+verspätende
+verspätendem
+verspätenden
+verspätender
+verspätendes
+verspätest
+verspätet
+verspätete
+verspätetem
+verspäteten
+verspäteter
+verspätetes
+verspätetest
+verspätetet
+verspüre
+verspüren
+verspürend
+verspürende
+verspürendem
+verspürenden
+verspürender
+verspürendes
+verspürst
+verspürt
+verspürte
+verspürtem
+verspürten
+verspürter
+verspürtes
+verspürtest
+verspürtet
+verstaatliche
+verstaatlichen
+verstaatlichend
+verstaatlichende
+verstaatlichendem
+verstaatlichenden
+verstaatlichender
+verstaatlichendes
+verstaatlichst
+verstaatlicht
+verstaatlichte
+verstaatlichtem
+verstaatlichten
+verstaatlichter
+verstaatlichtes
+verstaatlichtest
+verstaatlichtet
+verstand
+verstanden
+verstandene
+verstandenem
+verstandenen
+verstandener
+verstandenes
+verstandesmäßig
+verstandesmäßige
+verstandesmäßigem
+verstandesmäßigen
+verstandesmäßiger
+verstandesmäßiges
+verstandest
+verstandet
+verstandst
+verstarb
+verstarben
+verstarbst
+verstarbt
+verstaube
+verstauben
+verstaubend
+verstaubende
+verstaubendem
+verstaubenden
+verstaubender
+verstaubendes
+verstaubst
+verstaubt
+verstaubte
+verstaubtem
+verstaubten
+verstaubter
+verstaubtes
+verstaubtest
+verstaubtet
+verstauche
+verstauchen
+verstauchend
+verstauchende
+verstauchendem
+verstauchenden
+verstauchender
+verstauchendes
+verstauchst
+verstaucht
+verstauchte
+verstauchtem
+verstauchten
+verstauchter
+verstauchtes
+verstauchtest
+verstauchtet
+verstaue
+verstauen
+verstauend
+verstauende
+verstauendem
+verstauenden
+verstauender
+verstauendes
+verstaust
+verstaut
+verstaute
+verstautem
+verstauten
+verstauter
+verstautes
+verstautest
+verstautet
+verstecke
+verstecken
+versteckend
+versteckende
+versteckendem
+versteckenden
+versteckender
+versteckendes
+versteckst
+versteckt
+versteckte
+verstecktem
+versteckten
+versteckter
+verstecktere
+versteckterem
+versteckteren
+versteckterer
+versteckteres
+verstecktes
+verstecktest
+versteckteste
+verstecktestem
+verstecktesten
+verstecktester
+verstecktestes
+verstecktet
+verstehe
+verstehen
+verstehend
+verstehende
+verstehendem
+verstehenden
+verstehender
+verstehendes
+verstehst
+versteht
+versteife
+versteifen
+versteifend
+versteifende
+versteifendem
+versteifenden
+versteifender
+versteifendes
+versteifst
+versteift
+versteifte
+versteiftem
+versteiften
+versteifter
+versteiftes
+versteiftest
+versteiftet
+versteigere
+versteigern
+versteigernd
+versteigernde
+versteigerndem
+versteigernden
+versteigernder
+versteigerndes
+versteigerst
+versteigert
+versteigerte
+versteigertem
+versteigerten
+versteigerter
+versteigertes
+versteigertest
+versteigertet
+versteigre
+versteinere
+versteinern
+versteinernd
+versteinernde
+versteinerndem
+versteinernden
+versteinernder
+versteinerndes
+versteinerst
+versteinert
+versteinerte
+versteinertem
+versteinerten
+versteinerter
+versteinertes
+versteinertest
+versteinertet
+versteinre
+verstellbar
+verstellbare
+verstellbarem
+verstellbaren
+verstellbarer
+verstellbares
+verstelle
+verstellen
+verstellend
+verstellende
+verstellendem
+verstellenden
+verstellender
+verstellendes
+verstellst
+verstellt
+verstellte
+verstelltem
+verstellten
+verstellter
+verstelltes
+verstelltest
+verstelltet
+versteuerbar
+versteuerbare
+versteuerbarem
+versteuerbaren
+versteuerbarer
+versteuerbares
+versteuere
+versteuern
+versteuernd
+versteuernde
+versteuerndem
+versteuernden
+versteuernder
+versteuerndes
+versteuerst
+versteuert
+versteuerte
+versteuertem
+versteuerten
+versteuerter
+versteuertes
+versteuertest
+versteuertet
+versteure
+verstieg
+verstiegen
+verstiegene
+verstiegenem
+verstiegenen
+verstiegener
+verstiegenes
+verstiegst
+verstiegt
+verstieß
+verstieße
+verstießen
+verstießest
+verstießet
+verstießt
+verstimme
+verstimmen
+verstimmend
+verstimmende
+verstimmendem
+verstimmenden
+verstimmender
+verstimmendes
+verstimmst
+verstimmt
+verstimmte
+verstimmtem
+verstimmten
+verstimmter
+verstimmtes
+verstimmtest
+verstimmtet
+verstirbst
+verstirbt
+verstockt
+verstockte
+verstocktem
+verstockten
+verstockter
+verstocktes
+verstohlen
+verstohlene
+verstohlenem
+verstohlenen
+verstohlener
+verstohlenes
+verstopfe
+verstopfen
+verstopfend
+verstopfende
+verstopfendem
+verstopfenden
+verstopfender
+verstopfendes
+verstopfst
+verstopft
+verstopfte
+verstopftem
+verstopften
+verstopfter
+verstopftes
+verstopftest
+verstopftet
+verstorben
+verstorbene
+verstorbenem
+verstorbenen
+verstorbener
+verstorbenes
+verstoß
+verstoße
+verstoßen
+verstoßend
+verstoßende
+verstoßendem
+verstoßenden
+verstoßender
+verstoßendes
+verstoßene
+verstoßenem
+verstoßenen
+verstoßener
+verstoßenes
+verstoßt
+verstrebe
+verstreben
+verstrebend
+verstrebende
+verstrebendem
+verstrebenden
+verstrebender
+verstrebendes
+verstrebst
+verstrebt
+verstrebte
+verstrebtem
+verstrebten
+verstrebter
+verstrebtes
+verstrebtest
+verstrebtet
+verstreiche
+verstreichen
+verstreichend
+verstreichende
+verstreichendem
+verstreichenden
+verstreichender
+verstreichendes
+verstreichst
+verstreicht
+verstreue
+verstreuen
+verstreuend
+verstreuende
+verstreuendem
+verstreuenden
+verstreuender
+verstreuendes
+verstreust
+verstreut
+verstreute
+verstreutem
+verstreuten
+verstreuter
+verstreutes
+verstreutest
+verstreutet
+verstrich
+verstrichen
+verstrichene
+verstrichenem
+verstrichenen
+verstrichener
+verstrichenes
+verstrichst
+verstricht
+verstricke
+verstricken
+verstrickend
+verstrickende
+verstrickendem
+verstrickenden
+verstrickender
+verstrickendes
+verstrickst
+verstrickt
+verstrickte
+verstricktem
+verstrickten
+verstrickter
+verstricktere
+verstrickterem
+verstrickteren
+verstrickterer
+verstrickteres
+verstricktes
+verstricktest
+verstrickteste
+verstricktestem
+verstricktesten
+verstricktester
+verstricktestes
+verstricktet
+verstumme
+verstummen
+verstummend
+verstummende
+verstummendem
+verstummenden
+verstummender
+verstummendes
+verstummst
+verstummt
+verstummte
+verstummtem
+verstummten
+verstummter
+verstummtes
+verstummtest
+verstummtet
+verstädtert
+verstädterte
+verstädtertem
+verstädterten
+verstädterter
+verstädtertes
+verständig
+verständige
+verständigem
+verständigen
+verständigend
+verständigende
+verständigendem
+verständigenden
+verständigender
+verständigendes
+verständiger
+verständigere
+verständigerem
+verständigeren
+verständigerer
+verständigeres
+verständiges
+verständigst
+verständigste
+verständigstem
+verständigsten
+verständigster
+verständigstes
+verständigt
+verständigte
+verständigtem
+verständigten
+verständigter
+verständigtes
+verständigtest
+verständigtet
+verständlich
+verständliche
+verständlichem
+verständlichen
+verständlicher
+verständlichere
+verständlicherem
+verständlicheren
+verständlicherer
+verständlicheres
+verständlicherweise
+verständliches
+verständlichste
+verständlichstem
+verständlichsten
+verständlichster
+verständlichstes
+verständnisinnig
+verständnisinnige
+verständnisinnigem
+verständnisinnigen
+verständnisinniger
+verständnisinniges
+verständnislos
+verständnislose
+verständnislosem
+verständnislosen
+verständnisloser
+verständnisloses
+verständnisvoll
+verständnisvolle
+verständnisvollem
+verständnisvollen
+verständnisvoller
+verständnisvollere
+verständnisvollerem
+verständnisvolleren
+verständnisvollerer
+verständnisvolleres
+verständnisvolles
+verständnisvollste
+verständnisvollstem
+verständnisvollsten
+verständnisvollster
+verständnisvollstes
+verstärke
+verstärken
+verstärkend
+verstärkende
+verstärkendem
+verstärkenden
+verstärkender
+verstärkendes
+verstärkst
+verstärkt
+verstärkte
+verstärktem
+verstärkten
+verstärkter
+verstärktes
+verstärktest
+verstärktet
+verstöre
+verstören
+verstörend
+verstörende
+verstörendem
+verstörenden
+verstörender
+verstörendes
+verstörst
+verstört
+verstörte
+verstörtem
+verstörten
+verstörter
+verstörtes
+verstörtest
+verstörtet
+verstößt
+verstümmele
+verstümmeln
+verstümmelnd
+verstümmelnde
+verstümmelndem
+verstümmelnden
+verstümmelnder
+verstümmelndes
+verstümmelst
+verstümmelt
+verstümmelte
+verstümmeltem
+verstümmelten
+verstümmelter
+verstümmeltes
+verstümmeltest
+verstümmeltet
+verstümmle
+verstünde
+verstünden
+verstündest
+verstündet
+versuche
+versuchen
+versuchend
+versuchende
+versuchendem
+versuchenden
+versuchender
+versuchendes
+versuchst
+versuchsweise
+versucht
+versuchte
+versuchtem
+versuchten
+versuchter
+versuchtes
+versuchtest
+versuchtet
+versumpfe
+versumpfen
+versumpfend
+versumpfende
+versumpfendem
+versumpfenden
+versumpfender
+versumpfendes
+versumpfst
+versumpft
+versumpfte
+versumpftem
+versumpften
+versumpfter
+versumpftes
+versumpftest
+versumpftet
+versunken
+versunkene
+versunkenem
+versunkenen
+versunkener
+versunkenes
+versus
+verswinge
+verswingen
+verswingend
+verswingende
+verswingendem
+verswingenden
+verswingender
+verswingendes
+verswingst
+verswingt
+versäufst
+versäuft
+versäume
+versäumen
+versäumend
+versäumende
+versäumendem
+versäumenden
+versäumender
+versäumendes
+versäumst
+versäumt
+versäumte
+versäumtem
+versäumten
+versäumter
+versäumtes
+versäumtest
+versäumtet
+versöhne
+versöhnen
+versöhnend
+versöhnende
+versöhnendem
+versöhnenden
+versöhnender
+versöhnendes
+versöhnlich
+versöhnliche
+versöhnlichem
+versöhnlichen
+versöhnlicher
+versöhnliches
+versöhnst
+versöhnt
+versöhnte
+versöhntem
+versöhnten
+versöhnter
+versöhntes
+versöhntest
+versöhntet
+versündige
+versündigen
+versündigend
+versündigende
+versündigendem
+versündigenden
+versündigender
+versündigendes
+versündigst
+versündigt
+versündigte
+versündigtem
+versündigten
+versündigter
+versündigtes
+versündigtest
+versündigtet
+versüße
+versüßen
+versüßend
+versüßende
+versüßendem
+versüßenden
+versüßender
+versüßendes
+versüßest
+versüßt
+versüßte
+versüßtem
+versüßten
+versüßter
+versüßtes
+versüßtest
+versüßtet
+vertage
+vertagen
+vertagend
+vertagende
+vertagendem
+vertagenden
+vertagender
+vertagendes
+vertagst
+vertagt
+vertagte
+vertagtem
+vertagten
+vertagter
+vertagtes
+vertagtest
+vertagtet
+vertauschbar
+vertauschbare
+vertauschbarem
+vertauschbaren
+vertauschbarer
+vertauschbares
+vertausche
+vertauschen
+vertauschend
+vertauschende
+vertauschendem
+vertauschenden
+vertauschender
+vertauschendes
+vertauschest
+vertauschst
+vertauscht
+vertauschte
+vertauschtem
+vertauschten
+vertauschter
+vertauschtes
+vertauschtest
+vertauschtet
+verteidige
+verteidigen
+verteidigend
+verteidigende
+verteidigendem
+verteidigenden
+verteidigender
+verteidigendes
+verteidigst
+verteidigt
+verteidigte
+verteidigtem
+verteidigten
+verteidigter
+verteidigtes
+verteidigtest
+verteidigtet
+verteile
+verteilen
+verteilend
+verteilende
+verteilendem
+verteilenden
+verteilender
+verteilendes
+verteilst
+verteilt
+verteilte
+verteiltem
+verteilten
+verteilter
+verteiltes
+verteiltest
+verteiltet
+verteuere
+verteuern
+verteuernd
+verteuernde
+verteuerndem
+verteuernden
+verteuernder
+verteuerndes
+verteuerst
+verteuert
+verteuerte
+verteuertem
+verteuerten
+verteuerter
+verteuertes
+verteuertest
+verteuertet
+verteufele
+verteufeln
+verteufelnd
+verteufelnde
+verteufelndem
+verteufelnden
+verteufelnder
+verteufelndes
+verteufelst
+verteufelt
+verteufelte
+verteufeltem
+verteufelten
+verteufelter
+verteufeltes
+verteufeltest
+verteufeltet
+verteufle
+verteure
+vertiefe
+vertiefen
+vertiefend
+vertiefende
+vertiefendem
+vertiefenden
+vertiefender
+vertiefendes
+vertiefst
+vertieft
+vertiefte
+vertieftem
+vertieften
+vertiefter
+vertieftes
+vertieftest
+vertieftet
+vertikal
+vertikale
+vertikalem
+vertikalen
+vertikaler
+vertikales
+vertilge
+vertilgen
+vertilgend
+vertilgende
+vertilgendem
+vertilgenden
+vertilgender
+vertilgendes
+vertilgst
+vertilgt
+vertilgte
+vertilgtem
+vertilgten
+vertilgter
+vertilgtes
+vertilgtest
+vertilgtet
+vertippe
+vertippen
+vertippend
+vertippende
+vertippendem
+vertippenden
+vertippender
+vertippendes
+vertippst
+vertippt
+vertippte
+vertipptem
+vertippten
+vertippter
+vertipptes
+vertipptest
+vertipptet
+vertone
+vertonen
+vertonend
+vertonende
+vertonendem
+vertonenden
+vertonender
+vertonendes
+vertonst
+vertont
+vertonte
+vertontem
+vertonten
+vertonter
+vertontes
+vertontest
+vertontet
+vertrackt
+vertrackte
+vertracktem
+vertrackten
+vertrackter
+vertracktes
+vertrage
+vertragen
+vertragend
+vertragende
+vertragendem
+vertragenden
+vertragender
+vertragendes
+vertraglich
+vertragliche
+vertraglichem
+vertraglichen
+vertraglicher
+vertragliches
+vertragsbrüchig
+vertragsbrüchige
+vertragsbrüchigem
+vertragsbrüchigen
+vertragsbrüchiger
+vertragsbrüchiges
+vertragsgemäß
+vertragsgemäße
+vertragsgemäßem
+vertragsgemäßen
+vertragsgemäßer
+vertragsgemäßes
+vertragslos
+vertragslose
+vertragslosem
+vertragslosen
+vertragsloser
+vertragsloses
+vertragsmäßig
+vertragsmäßige
+vertragsmäßigem
+vertragsmäßigen
+vertragsmäßiger
+vertragsmäßiges
+vertragstreu
+vertragstreue
+vertragstreuem
+vertragstreuen
+vertragstreuer
+vertragstreues
+vertragswidrig
+vertragswidrige
+vertragswidrigem
+vertragswidrigen
+vertragswidriger
+vertragswidriges
+vertragt
+vertrank
+vertranken
+vertrankest
+vertrankst
+vertrankt
+vertrat
+vertraten
+vertratest
+vertratet
+vertratst
+vertraue
+vertrauen
+vertrauend
+vertrauende
+vertrauendem
+vertrauenden
+vertrauender
+vertrauendes
+vertrauensselig
+vertrauensselige
+vertrauensseligem
+vertrauensseligen
+vertrauensseliger
+vertrauensseligere
+vertrauensseligerem
+vertrauensseligeren
+vertrauensseligerer
+vertrauensseligeres
+vertrauensseliges
+vertrauensseligste
+vertrauensseligstem
+vertrauensseligsten
+vertrauensseligster
+vertrauensseligstes
+vertrauensvoll
+vertrauensvolle
+vertrauensvollem
+vertrauensvollen
+vertrauensvoller
+vertrauensvolles
+vertrauenswürdig
+vertrauenswürdige
+vertrauenswürdigem
+vertrauenswürdigen
+vertrauenswürdiger
+vertrauenswürdiges
+vertrauert
+vertrauerte
+vertrauertem
+vertrauerten
+vertrauerter
+vertrauertes
+vertraulich
+vertrauliche
+vertraulichem
+vertraulichen
+vertraulicher
+vertraulichere
+vertraulicherem
+vertraulicheren
+vertraulicherer
+vertraulicheres
+vertrauliches
+vertraulichste
+vertraulichstem
+vertraulichsten
+vertraulichster
+vertraulichstes
+vertraust
+vertraut
+vertraute
+vertrautem
+vertrauten
+vertrauter
+vertrautere
+vertrauterem
+vertrauteren
+vertrauterer
+vertrauteres
+vertrautes
+vertrautest
+vertrauteste
+vertrautestem
+vertrautesten
+vertrautester
+vertrautestes
+vertrautet
+vertreibe
+vertreiben
+vertreibend
+vertreibende
+vertreibendem
+vertreibenden
+vertreibender
+vertreibendes
+vertreibst
+vertreibt
+vertretbar
+vertretbare
+vertretbarem
+vertretbaren
+vertretbarer
+vertretbares
+vertrete
+vertreten
+vertretend
+vertretende
+vertretendem
+vertretenden
+vertretender
+vertretendes
+vertretene
+vertretenem
+vertretenen
+vertretener
+vertretenes
+vertretet
+vertretungsberechtigt
+vertretungsberechtigte
+vertretungsberechtigtem
+vertretungsberechtigten
+vertretungsberechtigter
+vertretungsberechtigtes
+vertrieb
+vertrieben
+vertriebene
+vertriebenem
+vertriebenen
+vertriebener
+vertriebenes
+vertriebst
+vertriebt
+vertrink
+vertrinke
+vertrinken
+vertrinkend
+vertrinkende
+vertrinkendem
+vertrinkenden
+vertrinkender
+vertrinkendes
+vertrinkst
+vertrinkt
+vertritt
+vertrittst
+vertrockne
+vertrocknen
+vertrocknend
+vertrocknende
+vertrocknendem
+vertrocknenden
+vertrocknender
+vertrocknendes
+vertrocknest
+vertrocknet
+vertrocknete
+vertrocknetem
+vertrockneten
+vertrockneter
+vertrocknetes
+vertrocknetest
+vertrocknetet
+vertrottele
+vertrotteln
+vertrottelnd
+vertrottelnde
+vertrottelndem
+vertrottelnden
+vertrottelnder
+vertrottelndes
+vertrottelst
+vertrottelt
+vertrottelte
+vertrottelten
+vertrotteltest
+vertrotteltet
+vertrottle
+vertrug
+vertrugen
+vertrugst
+vertrugt
+vertrunken
+vertrunkene
+vertrunkenem
+vertrunkenen
+vertrunkener
+vertrunkenes
+verträglich
+verträgliche
+verträglichem
+verträglichen
+verträglicher
+verträgliches
+verträgst
+verträgt
+verträume
+verträumen
+verträumend
+verträumende
+verträumendem
+verträumenden
+verträumender
+verträumendes
+verträumst
+verträumt
+verträumte
+verträumtem
+verträumten
+verträumter
+verträumtes
+verträumtest
+verträumtet
+vertrödele
+vertrödeln
+vertrödelnd
+vertrödelnde
+vertrödelndem
+vertrödelnden
+vertrödelnder
+vertrödelndes
+vertrödelst
+vertrödelt
+vertrödelte
+vertrödeltem
+vertrödelten
+vertrödelter
+vertrödeltes
+vertrödeltest
+vertrödeltet
+vertrödle
+vertröste
+vertrösten
+vertröstend
+vertröstende
+vertröstendem
+vertröstenden
+vertröstender
+vertröstendes
+vertröstest
+vertröstet
+vertröstete
+vertröstetem
+vertrösteten
+vertrösteter
+vertröstetes
+vertröstetest
+vertröstetet
+vertusche
+vertuschen
+vertuschend
+vertuschende
+vertuschendem
+vertuschenden
+vertuschender
+vertuschendes
+vertuschest
+vertuschst
+vertuscht
+vertuschte
+vertuschtem
+vertuschten
+vertuschter
+vertuschtes
+vertuschtest
+vertuschtet
+verunglimpfe
+verunglimpfen
+verunglimpfend
+verunglimpfende
+verunglimpfendem
+verunglimpfenden
+verunglimpfender
+verunglimpfendes
+verunglimpfst
+verunglimpft
+verunglimpfte
+verunglimpftem
+verunglimpften
+verunglimpfter
+verunglimpftes
+verunglimpftest
+verunglimpftet
+verunglücke
+verunglücken
+verunglückend
+verunglückende
+verunglückendem
+verunglückenden
+verunglückender
+verunglückendes
+verunglückst
+verunglückt
+verunglückte
+verunglücktem
+verunglückten
+verunglückter
+verunglücktes
+verunglücktest
+verunglücktet
+verunreinige
+verunreinigen
+verunreinigend
+verunreinigende
+verunreinigendem
+verunreinigenden
+verunreinigender
+verunreinigendes
+verunreinigst
+verunreinigt
+verunreinigte
+verunreinigtem
+verunreinigten
+verunreinigter
+verunreinigtes
+verunreinigtest
+verunreinigtet
+verunsichere
+verunsichern
+verunsichernd
+verunsichernde
+verunsicherndem
+verunsichernden
+verunsichernder
+verunsicherndes
+verunsicherst
+verunsichert
+verunsicherte
+verunsichertem
+verunsicherten
+verunsicherter
+verunsichertes
+verunsichertest
+verunsichertet
+verunsichre
+verunstalte
+verunstalten
+verunstaltend
+verunstaltende
+verunstaltendem
+verunstaltenden
+verunstaltender
+verunstaltendes
+verunstaltest
+verunstaltet
+verunstaltete
+verunstaltetem
+verunstalteten
+verunstalteter
+verunstaltetes
+verunstaltetest
+verunstaltetet
+veruntreue
+veruntreuen
+veruntreuend
+veruntreuende
+veruntreuendem
+veruntreuenden
+veruntreuender
+veruntreuendes
+veruntreust
+veruntreut
+veruntreute
+veruntreutem
+veruntreuten
+veruntreuter
+veruntreutes
+veruntreutest
+veruntreutet
+verursache
+verursachen
+verursachend
+verursachende
+verursachendem
+verursachenden
+verursachender
+verursachendes
+verursachst
+verursacht
+verursachte
+verursachtem
+verursachten
+verursachter
+verursachtes
+verursachtest
+verursachtet
+verurteile
+verurteilen
+verurteilend
+verurteilende
+verurteilendem
+verurteilenden
+verurteilender
+verurteilendes
+verurteilst
+verurteilt
+verurteilte
+verurteiltem
+verurteilten
+verurteilter
+verurteiltes
+verurteiltest
+verurteiltet
+vervielfacht
+vervielfachte
+vervielfachtem
+vervielfachten
+vervielfachter
+vervielfachtes
+vervielfältige
+vervielfältigen
+vervielfältigend
+vervielfältigende
+vervielfältigendem
+vervielfältigenden
+vervielfältigender
+vervielfältigendes
+vervielfältigst
+vervielfältigt
+vervielfältigte
+vervielfältigtem
+vervielfältigten
+vervielfältigter
+vervielfältigtes
+vervielfältigtest
+vervielfältigtet
+vervierfache
+vervierfachen
+vervierfachend
+vervierfachende
+vervierfachendem
+vervierfachenden
+vervierfachender
+vervierfachendes
+vervierfachst
+vervierfacht
+vervierfachte
+vervierfachtem
+vervierfachten
+vervierfachter
+vervierfachtes
+vervierfachtest
+vervierfachtet
+vervollkommne
+vervollkommnen
+vervollkommnend
+vervollkommnende
+vervollkommnendem
+vervollkommnenden
+vervollkommnender
+vervollkommnendes
+vervollkommnet
+vervollkommnete
+vervollkommnetem
+vervollkommneten
+vervollkommneter
+vervollkommnetes
+vervollkommnst
+vervollkommnt
+vervollkommnte
+vervollkommntem
+vervollkommnten
+vervollkommnter
+vervollkommntes
+vervollkommntest
+vervollkommntet
+vervollständige
+vervollständigen
+vervollständigend
+vervollständigende
+vervollständigendem
+vervollständigenden
+vervollständigender
+vervollständigendes
+vervollständigst
+vervollständigt
+vervollständigte
+vervollständigtem
+vervollständigten
+vervollständigter
+vervollständigtes
+vervollständigtest
+vervollständigtet
+verwachse
+verwachsen
+verwachsend
+verwachsende
+verwachsendem
+verwachsenden
+verwachsender
+verwachsendes
+verwachsene
+verwachsenem
+verwachsenen
+verwachsener
+verwachsenes
+verwachst
+verwackelt
+verwackelte
+verwackeltem
+verwackelten
+verwackelter
+verwackeltes
+verwahre
+verwahren
+verwahrend
+verwahrende
+verwahrendem
+verwahrenden
+verwahrender
+verwahrendes
+verwahrlose
+verwahrlosen
+verwahrlosend
+verwahrlosende
+verwahrlosendem
+verwahrlosenden
+verwahrlosender
+verwahrlosendes
+verwahrlosest
+verwahrlost
+verwahrloste
+verwahrlostem
+verwahrlosten
+verwahrloster
+verwahrlostes
+verwahrlostest
+verwahrlostet
+verwahrst
+verwahrt
+verwahrte
+verwahrtem
+verwahrten
+verwahrter
+verwahrtes
+verwahrtest
+verwahrtet
+verwaise
+verwaisen
+verwaisend
+verwaisende
+verwaisendem
+verwaisenden
+verwaisender
+verwaisendes
+verwaisest
+verwaist
+verwaiste
+verwaistem
+verwaisten
+verwaister
+verwaistes
+verwaistest
+verwaistet
+verwalte
+verwalten
+verwaltend
+verwaltende
+verwaltendem
+verwaltenden
+verwaltender
+verwaltendes
+verwaltest
+verwaltet
+verwaltete
+verwaltetem
+verwalteten
+verwalteter
+verwaltetes
+verwaltetest
+verwaltetet
+verwaltungstechnisch
+verwaltungstechnische
+verwaltungstechnischem
+verwaltungstechnischen
+verwaltungstechnischer
+verwaltungstechnisches
+verwandele
+verwandeln
+verwandelnd
+verwandelnde
+verwandelndem
+verwandelnden
+verwandelnder
+verwandelndes
+verwandelst
+verwandelt
+verwandelte
+verwandeltem
+verwandelten
+verwandelter
+verwandeltes
+verwandeltest
+verwandeltet
+verwandle
+verwandt
+verwandte
+verwandtem
+verwandten
+verwandter
+verwandtere
+verwandterem
+verwandteren
+verwandterer
+verwandteres
+verwandtes
+verwandteste
+verwandtestem
+verwandtesten
+verwandtester
+verwandtestes
+verwandtschaftlich
+verwandtschaftliche
+verwandtschaftlichem
+verwandtschaftlichen
+verwandtschaftlicher
+verwandtschaftliches
+verwarf
+verwarfen
+verwarfest
+verwarfst
+verwarft
+verwarne
+verwarnen
+verwarnend
+verwarnende
+verwarnendem
+verwarnenden
+verwarnender
+verwarnendes
+verwarnst
+verwarnt
+verwarnte
+verwarntem
+verwarnten
+verwarnter
+verwarntes
+verwarntest
+verwarntet
+verwaschen
+verwaschene
+verwaschenem
+verwaschenen
+verwaschener
+verwaschenes
+verwechsele
+verwechseln
+verwechselnd
+verwechselnde
+verwechselndem
+verwechselnden
+verwechselnder
+verwechselndes
+verwechselst
+verwechselt
+verwechselte
+verwechseltem
+verwechselten
+verwechselter
+verwechseltes
+verwechseltest
+verwechseltet
+verwechsle
+verwegen
+verwegene
+verwegenem
+verwegenen
+verwegener
+verwegenere
+verwegenerem
+verwegeneren
+verwegenerer
+verwegeneres
+verwegenes
+verwegenste
+verwegenstem
+verwegensten
+verwegenster
+verwegenstes
+verwehe
+verwehen
+verwehend
+verwehende
+verwehendem
+verwehenden
+verwehender
+verwehendes
+verwehre
+verwehren
+verwehrend
+verwehrende
+verwehrendem
+verwehrenden
+verwehrender
+verwehrendes
+verwehrst
+verwehrt
+verwehrte
+verwehrtem
+verwehrten
+verwehrter
+verwehrtes
+verwehrtest
+verwehrtet
+verwehst
+verweht
+verwehte
+verwehtem
+verwehten
+verwehter
+verwehtes
+verwehtest
+verwehtet
+verweichliche
+verweichlichen
+verweichlichend
+verweichlichende
+verweichlichendem
+verweichlichenden
+verweichlichender
+verweichlichendes
+verweichlichst
+verweichlicht
+verweichlichte
+verweichlichtem
+verweichlichten
+verweichlichter
+verweichlichtes
+verweichlichtest
+verweichlichtet
+verweigere
+verweigern
+verweigernd
+verweigernde
+verweigerndem
+verweigernden
+verweigernder
+verweigerndes
+verweigerst
+verweigert
+verweigerte
+verweigertem
+verweigerten
+verweigerter
+verweigertes
+verweigertest
+verweigertet
+verweigre
+verweile
+verweilen
+verweilend
+verweilende
+verweilendem
+verweilenden
+verweilender
+verweilendes
+verweilst
+verweilt
+verweilte
+verweiltem
+verweilten
+verweilter
+verweiltes
+verweiltest
+verweiltet
+verweint
+verweinte
+verweintem
+verweinten
+verweinter
+verweintes
+verweise
+verweisen
+verweisend
+verweisende
+verweisendem
+verweisenden
+verweisender
+verweisendes
+verweisest
+verweist
+verwelke
+verwelken
+verwelkend
+verwelkende
+verwelkendem
+verwelkenden
+verwelkender
+verwelkendes
+verwelkst
+verwelkt
+verwelkte
+verwelktem
+verwelkten
+verwelkter
+verwelktes
+verwelktest
+verwelktet
+verweltliche
+verweltlichen
+verweltlichend
+verweltlichende
+verweltlichendem
+verweltlichenden
+verweltlichender
+verweltlichendes
+verweltlichst
+verweltlicht
+verweltlichte
+verweltlichtem
+verweltlichten
+verweltlichter
+verweltlichtes
+verweltlichtest
+verweltlichtet
+verwendbar
+verwendbare
+verwendbarem
+verwendbaren
+verwendbarer
+verwendbares
+verwende
+verwenden
+verwendend
+verwendende
+verwendendem
+verwendenden
+verwendender
+verwendendes
+verwendest
+verwendet
+verwendete
+verwendetem
+verwendeten
+verwendeter
+verwendetes
+verwendetest
+verwendetet
+verwendungsfähig
+verwendungsfähige
+verwendungsfähigem
+verwendungsfähigen
+verwendungsfähiger
+verwendungsfähiges
+verwerfe
+verwerfen
+verwerfend
+verwerfende
+verwerfendem
+verwerfenden
+verwerfender
+verwerfendes
+verwerfqqlich
+verwerfqqliche
+verwerfqqlichem
+verwerfqqlichen
+verwerfqqlicher
+verwerfqqliches
+verwerft
+verwertbar
+verwertbare
+verwertbarem
+verwertbaren
+verwertbarer
+verwertbares
+verwerte
+verwerten
+verwertend
+verwertende
+verwertendem
+verwertenden
+verwertender
+verwertendes
+verwertest
+verwertet
+verwertete
+verwertetem
+verwerteten
+verwerteter
+verwertetes
+verwertetest
+verwertetet
+verwese
+verwesen
+verwesend
+verwesende
+verwesendem
+verwesenden
+verwesender
+verwesendes
+verwesest
+verweslich
+verwesliche
+verweslichem
+verweslichen
+verweslicher
+verwesliches
+verwest
+verweste
+verwestem
+verwesten
+verwester
+verwestes
+verwestest
+verwestet
+verwette
+verwetten
+verwettend
+verwettende
+verwettendem
+verwettenden
+verwettender
+verwettendes
+verwettest
+verwettet
+verwettete
+verwettetem
+verwetteten
+verwetteter
+verwettetes
+verwettetest
+verwettetet
+verwickele
+verwickeln
+verwickelnd
+verwickelnde
+verwickelndem
+verwickelnden
+verwickelnder
+verwickelndes
+verwickelst
+verwickelt
+verwickelte
+verwickeltem
+verwickelten
+verwickelter
+verwickeltes
+verwickeltest
+verwickeltet
+verwickle
+verwies
+verwiesen
+verwiesene
+verwiesenem
+verwiesenen
+verwiesener
+verwiesenes
+verwiesest
+verwiest
+verwildere
+verwildern
+verwildernd
+verwildernde
+verwilderndem
+verwildernden
+verwildernder
+verwilderndes
+verwilderst
+verwildert
+verwilderte
+verwildertem
+verwilderten
+verwilderter
+verwildertes
+verwildertest
+verwildertet
+verwildre
+verwinde
+verwinden
+verwindend
+verwindende
+verwindendem
+verwindenden
+verwindender
+verwindendes
+verwindest
+verwindet
+verwinkelt
+verwinkelte
+verwinkeltem
+verwinkelten
+verwinkelter
+verwinkeltes
+verwirfst
+verwirft
+verwirke
+verwirken
+verwirkend
+verwirkende
+verwirkendem
+verwirkenden
+verwirkender
+verwirkendes
+verwirkliche
+verwirklichen
+verwirklichend
+verwirklichende
+verwirklichendem
+verwirklichenden
+verwirklichender
+verwirklichendes
+verwirklichst
+verwirklicht
+verwirklichte
+verwirklichtem
+verwirklichten
+verwirklichter
+verwirklichtes
+verwirklichtest
+verwirklichtet
+verwirkst
+verwirkt
+verwirkte
+verwirktem
+verwirkten
+verwirkter
+verwirktes
+verwirktest
+verwirktet
+verwirre
+verwirren
+verwirrend
+verwirrende
+verwirrendem
+verwirrenden
+verwirrender
+verwirrendes
+verwirrst
+verwirrt
+verwirrte
+verwirrtem
+verwirrten
+verwirrter
+verwirrtes
+verwirrtest
+verwirrtet
+verwirtschafte
+verwirtschaften
+verwirtschaftend
+verwirtschaftende
+verwirtschaftendem
+verwirtschaftenden
+verwirtschaftender
+verwirtschaftendes
+verwirtschaftest
+verwirtschaftet
+verwirtschaftete
+verwirtschaftetem
+verwirtschafteten
+verwirtschafteter
+verwirtschaftetes
+verwirtschaftetest
+verwirtschaftetet
+verwische
+verwischen
+verwischend
+verwischende
+verwischendem
+verwischenden
+verwischender
+verwischendes
+verwischest
+verwischst
+verwischt
+verwischte
+verwischtem
+verwischten
+verwischter
+verwischtes
+verwischtest
+verwischtet
+verwittere
+verwittern
+verwitternd
+verwitternde
+verwitterndem
+verwitternden
+verwitternder
+verwitterndes
+verwitterst
+verwittert
+verwitterte
+verwittertem
+verwitterten
+verwitterter
+verwittertes
+verwittertest
+verwittertet
+verwittre
+verwitwe
+verwitwen
+verwitwend
+verwitwende
+verwitwendem
+verwitwenden
+verwitwender
+verwitwendes
+verwitwest
+verwitwet
+verwitwete
+verwitwetem
+verwitweten
+verwitweter
+verwitwetes
+verwitwetest
+verwitwetet
+verwitwt
+verwoben
+verwobene
+verwobenem
+verwobenen
+verwobener
+verwobenes
+verworfen
+verworfene
+verworfenem
+verworfenen
+verworfener
+verworfenes
+verworren
+verworrene
+verworrenem
+verworrenen
+verworrener
+verworrenes
+verwuchs
+verwuchsen
+verwuchsest
+verwuchst
+verwundbar
+verwundbare
+verwundbarem
+verwundbaren
+verwundbarer
+verwundbares
+verwunde
+verwunden
+verwundend
+verwundende
+verwundendem
+verwundenden
+verwundender
+verwundendes
+verwundere
+verwunderlich
+verwunderliche
+verwunderlichem
+verwunderlichen
+verwunderlicher
+verwunderlichere
+verwunderlicherem
+verwunderlicheren
+verwunderlicherer
+verwunderlicheres
+verwunderliches
+verwunderlichste
+verwunderlichstem
+verwunderlichsten
+verwunderlichster
+verwunderlichstes
+verwundern
+verwundernd
+verwundernde
+verwunderndem
+verwundernden
+verwundernder
+verwunderndes
+verwunderst
+verwundert
+verwunderte
+verwundertem
+verwunderten
+verwunderter
+verwundertes
+verwundertest
+verwundertet
+verwundest
+verwundet
+verwundete
+verwundetem
+verwundeten
+verwundeter
+verwundetes
+verwundetest
+verwundetet
+verwundre
+verwurstet
+verwurstete
+verwurstetem
+verwursteten
+verwursteter
+verwurstetes
+verwurzele
+verwurzeln
+verwurzelnd
+verwurzelnde
+verwurzelndem
+verwurzelnden
+verwurzelnder
+verwurzelndes
+verwurzelst
+verwurzelt
+verwurzelte
+verwurzeltem
+verwurzelten
+verwurzelter
+verwurzeltes
+verwurzeltest
+verwurzeltet
+verwurzle
+verwächst
+verwässere
+verwässern
+verwässernd
+verwässernde
+verwässerndem
+verwässernden
+verwässernder
+verwässerndes
+verwässerst
+verwässert
+verwässerte
+verwässertem
+verwässerten
+verwässerter
+verwässertes
+verwässertest
+verwässertet
+verwässre
+verwöhne
+verwöhnen
+verwöhnend
+verwöhnende
+verwöhnendem
+verwöhnenden
+verwöhnender
+verwöhnendes
+verwöhnst
+verwöhnt
+verwöhnte
+verwöhntem
+verwöhnten
+verwöhnter
+verwöhntere
+verwöhnterem
+verwöhnteren
+verwöhnterer
+verwöhnteres
+verwöhntes
+verwöhntest
+verwöhnteste
+verwöhntestem
+verwöhntesten
+verwöhntester
+verwöhntestes
+verwöhntet
+verwünsche
+verwünschen
+verwünschend
+verwünschende
+verwünschendem
+verwünschenden
+verwünschender
+verwünschendes
+verwünschest
+verwünschst
+verwünscht
+verwünschte
+verwünschtem
+verwünschten
+verwünschter
+verwünschtes
+verwünschtest
+verwünschtet
+verwüste
+verwüsten
+verwüstend
+verwüstende
+verwüstendem
+verwüstenden
+verwüstender
+verwüstendes
+verwüstest
+verwüstet
+verwüstete
+verwüstetem
+verwüsteten
+verwüsteter
+verwüstetes
+verwüstetest
+verwüstetet
+verzage
+verzagen
+verzagend
+verzagende
+verzagendem
+verzagenden
+verzagender
+verzagendes
+verzagst
+verzagt
+verzagte
+verzagtem
+verzagten
+verzagter
+verzagtes
+verzagtest
+verzagtet
+verzahnt
+verzahnte
+verzahntem
+verzahnten
+verzahnter
+verzahntes
+verzanke
+verzanken
+verzankend
+verzankende
+verzankendem
+verzankenden
+verzankender
+verzankendes
+verzankst
+verzankt
+verzankte
+verzanktem
+verzankten
+verzankter
+verzanktes
+verzanktest
+verzanktet
+verzapfe
+verzapfen
+verzapfend
+verzapfende
+verzapfendem
+verzapfenden
+verzapfender
+verzapfendes
+verzapfst
+verzapft
+verzapfte
+verzapftem
+verzapften
+verzapfter
+verzapftes
+verzapftest
+verzapftet
+verzaubere
+verzaubern
+verzaubernd
+verzaubernde
+verzauberndem
+verzaubernden
+verzaubernder
+verzauberndes
+verzauberst
+verzaubert
+verzauberte
+verzaubertem
+verzauberten
+verzauberter
+verzaubertes
+verzaubertest
+verzaubertet
+verzaubre
+verzehnfache
+verzehnfachen
+verzehnfachend
+verzehnfachende
+verzehnfachendem
+verzehnfachenden
+verzehnfachender
+verzehnfachendes
+verzehnfachst
+verzehnfacht
+verzehnfachte
+verzehnfachtem
+verzehnfachten
+verzehnfachter
+verzehnfachtes
+verzehnfachtest
+verzehnfachtet
+verzehrbar
+verzehrbare
+verzehrbarem
+verzehrbaren
+verzehrbarer
+verzehrbares
+verzehre
+verzehren
+verzehrend
+verzehrende
+verzehrendem
+verzehrenden
+verzehrender
+verzehrendes
+verzehrst
+verzehrt
+verzehrte
+verzehrtem
+verzehrten
+verzehrter
+verzehrtes
+verzehrtest
+verzehrtet
+verzeichne
+verzeichnen
+verzeichnend
+verzeichnende
+verzeichnendem
+verzeichnenden
+verzeichnender
+verzeichnendes
+verzeichnest
+verzeichnet
+verzeichnete
+verzeichnetem
+verzeichneten
+verzeichneter
+verzeichnetes
+verzeichnetest
+verzeichnetet
+verzeihe
+verzeihen
+verzeihend
+verzeihende
+verzeihendem
+verzeihenden
+verzeihender
+verzeihendes
+verzeihlich
+verzeihliche
+verzeihlichem
+verzeihlichen
+verzeihlicher
+verzeihliches
+verzeihst
+verzeiht
+verzerre
+verzerren
+verzerrend
+verzerrende
+verzerrendem
+verzerrenden
+verzerrender
+verzerrendes
+verzerrst
+verzerrt
+verzerrte
+verzerrtem
+verzerrten
+verzerrter
+verzerrtes
+verzerrtest
+verzerrtet
+verzettele
+verzetteln
+verzettelnd
+verzettelnde
+verzettelndem
+verzettelnden
+verzettelnder
+verzettelndes
+verzettelst
+verzettelt
+verzettelte
+verzetteltem
+verzettelten
+verzettelter
+verzetteltes
+verzetteltest
+verzetteltet
+verzettle
+verzichtbar
+verzichtbare
+verzichtbarem
+verzichtbaren
+verzichtbarer
+verzichtbares
+verzichte
+verzichten
+verzichtend
+verzichtende
+verzichtendem
+verzichtenden
+verzichtender
+verzichtendes
+verzichtest
+verzichtet
+verzichtete
+verzichtetem
+verzichteten
+verzichteter
+verzichtetes
+verzichtetest
+verzichtetet
+verzieh
+verziehe
+verziehen
+verziehend
+verziehende
+verziehendem
+verziehenden
+verziehender
+verziehendes
+verziehene
+verziehenem
+verziehenen
+verziehener
+verziehenes
+verziehst
+verzieht
+verziere
+verzieren
+verzierend
+verzierende
+verzierendem
+verzierenden
+verzierender
+verzierendes
+verzierst
+verziert
+verzierte
+verziertem
+verzierten
+verzierter
+verziertes
+verziertest
+verziertet
+verzigfache
+verzigfachen
+verzigfachend
+verzigfachende
+verzigfachendem
+verzigfachenden
+verzigfachender
+verzigfachendes
+verzigfachst
+verzigfacht
+verzigfachte
+verzigfachtem
+verzigfachten
+verzigfachter
+verzigfachtes
+verzigfachtest
+verzigfachtet
+verzinke
+verzinken
+verzinkst
+verzinkt
+verzinkte
+verzinktem
+verzinkten
+verzinkter
+verzinktes
+verzinktest
+verzinktet
+verzinne
+verzinnen
+verzinnst
+verzinnt
+verzinnte
+verzinntem
+verzinnten
+verzinnter
+verzinntes
+verzinntest
+verzinntet
+verzinse
+verzinsen
+verzinsend
+verzinsende
+verzinsendem
+verzinsenden
+verzinsender
+verzinsendes
+verzinsest
+verzinslich
+verzinsliche
+verzinslichem
+verzinslichen
+verzinslicher
+verzinsliches
+verzinst
+verzinste
+verzinstem
+verzinsten
+verzinster
+verzinstes
+verzinstest
+verzinstet
+verzog
+verzogen
+verzogene
+verzogenem
+verzogenen
+verzogener
+verzogenes
+verzogst
+verzogt
+verzollbar
+verzollbare
+verzollbarem
+verzollbaren
+verzollbarer
+verzollbares
+verzolle
+verzollen
+verzollend
+verzollende
+verzollendem
+verzollenden
+verzollender
+verzollendes
+verzollst
+verzollt
+verzollte
+verzolltem
+verzollten
+verzollter
+verzolltes
+verzolltest
+verzolltet
+verzuckere
+verzuckern
+verzuckernd
+verzuckernde
+verzuckerndem
+verzuckernden
+verzuckernder
+verzuckerndes
+verzuckerst
+verzuckert
+verzuckerte
+verzuckertem
+verzuckerten
+verzuckerter
+verzuckertes
+verzuckertest
+verzuckertet
+verzuckre
+verzweifele
+verzweifeln
+verzweifelnd
+verzweifelnde
+verzweifelndem
+verzweifelnden
+verzweifelnder
+verzweifelndes
+verzweifelst
+verzweifelt
+verzweifelte
+verzweifeltem
+verzweifelten
+verzweifelter
+verzweifeltes
+verzweifeltest
+verzweifeltet
+verzweifle
+verzweige
+verzweigen
+verzweigend
+verzweigende
+verzweigendem
+verzweigenden
+verzweigender
+verzweigendes
+verzweigst
+verzweigt
+verzweigte
+verzweigtem
+verzweigten
+verzweigter
+verzweigtes
+verzweigtest
+verzweigtet
+verzwickt
+verzwickte
+verzwicktem
+verzwickten
+verzwickter
+verzwicktes
+verzähle
+verzählen
+verzählend
+verzählende
+verzählendem
+verzählenden
+verzählender
+verzählendes
+verzählst
+verzählt
+verzählte
+verzähltem
+verzählten
+verzählter
+verzähltes
+verzähltest
+verzähltet
+verzärtele
+verzärteln
+verzärtelnd
+verzärtelnde
+verzärtelndem
+verzärtelnden
+verzärtelnder
+verzärtelndes
+verzärtelst
+verzärtelt
+verzärtelte
+verzärteltem
+verzärtelten
+verzärtelter
+verzärteltes
+verzärteltest
+verzärteltet
+verzärtle
+verzögere
+verzögern
+verzögernd
+verzögernde
+verzögerndem
+verzögernden
+verzögernder
+verzögerndes
+verzögerst
+verzögert
+verzögerte
+verzögertem
+verzögerten
+verzögerter
+verzögertes
+verzögertest
+verzögertet
+verzögre
+verzücke
+verzücken
+verzückend
+verzückende
+verzückendem
+verzückenden
+verzückender
+verzückendes
+verzückst
+verzückt
+verzückte
+verzücktem
+verzückten
+verzückter
+verzücktes
+verzücktest
+verzücktet
+verächtlich
+verächtliche
+verächtlichem
+verächtlichen
+verächtlicher
+verächtlichere
+verächtlicherem
+verächtlicheren
+verächtlicherer
+verächtlicheres
+verächtliches
+verächtlichste
+verächtlichstem
+verächtlichsten
+verächtlichster
+verächtlichstes
+veränderbar
+veränderbare
+veränderbarem
+veränderbaren
+veränderbarer
+veränderbares
+verändere
+veränderlich
+veränderliche
+veränderlichem
+veränderlichen
+veränderlicher
+veränderliches
+verändern
+verändernd
+verändernde
+veränderndem
+verändernden
+verändernder
+veränderndes
+veränderst
+verändert
+veränderte
+verändertem
+veränderten
+veränderter
+verändertes
+verändertest
+verändertet
+verändre
+verängstige
+verängstigen
+verängstigend
+verängstigende
+verängstigendem
+verängstigenden
+verängstigender
+verängstigendes
+verängstigst
+verängstigt
+verängstigte
+verängstigtem
+verängstigten
+verängstigter
+verängstigtere
+verängstigterem
+verängstigteren
+verängstigterer
+verängstigteres
+verängstigtes
+verängstigtest
+verängstigteste
+verängstigtestem
+verängstigtesten
+verängstigtester
+verängstigtestes
+verängstigtet
+veräppele
+veräppeln
+veräppelnd
+veräppelnde
+veräppelndem
+veräppelnden
+veräppelnder
+veräppelndes
+veräppelst
+veräppelt
+veräppelte
+veräppeltem
+veräppelten
+veräppelter
+veräppeltes
+veräppeltest
+veräppeltet
+veräpple
+verärgere
+verärgern
+verärgernd
+verärgernde
+verärgerndem
+verärgernden
+verärgernder
+verärgerndes
+verärgerst
+verärgert
+verärgerte
+verärgertem
+verärgerten
+verärgerter
+verärgertes
+verärgertest
+verärgertet
+verärgre
+verästele
+verästeln
+verästelnd
+verästelnde
+verästelndem
+verästelnden
+verästelnder
+verästelndes
+verästelst
+verästelt
+verästelte
+verästeltem
+verästelten
+verästelter
+verästeltere
+verästelterem
+verästelteren
+verästelterer
+verästelteres
+verästeltes
+verästeltest
+verästelteste
+verästeltestem
+verästeltesten
+verästeltester
+verästeltestes
+verästeltet
+verästle
+veräußere
+veräußerliche
+veräußerlichen
+veräußerlichend
+veräußerlichende
+veräußerlichendem
+veräußerlichenden
+veräußerlichender
+veräußerlichendes
+veräußerlichst
+veräußerlicht
+veräußerlichte
+veräußerlichtem
+veräußerlichten
+veräußerlichter
+veräußerlichtes
+veräußerlichtest
+veräußerlichtet
+veräußern
+veräußernd
+veräußernde
+veräußerndem
+veräußernden
+veräußernder
+veräußerndes
+veräußerst
+veräußert
+veräußerte
+veräußertem
+veräußerten
+veräußerter
+veräußertes
+veräußertest
+veräußertet
+veräußre
+veröde
+veröden
+verödend
+verödende
+verödendem
+verödenden
+verödender
+verödendes
+verödest
+verödet
+verödete
+verödetem
+verödeten
+verödeter
+verödetes
+verödetest
+verödetet
+veröffentliche
+veröffentlichen
+veröffentlichend
+veröffentlichende
+veröffentlichendem
+veröffentlichenden
+veröffentlichender
+veröffentlichendes
+veröffentlichst
+veröffentlicht
+veröffentlichte
+veröffentlichtem
+veröffentlichten
+veröffentlichter
+veröffentlichtes
+veröffentlichtest
+veröffentlichtet
+verübe
+verübele
+verübeln
+verübelnd
+verübelnde
+verübelndem
+verübelnden
+verübelnder
+verübelndes
+verübelst
+verübelt
+verübelte
+verübeltem
+verübelten
+verübelter
+verübeltes
+verübeltest
+verübeltet
+verüben
+verübend
+verübende
+verübendem
+verübenden
+verübender
+verübendes
+verüble
+verübst
+verübt
+verübte
+verübtem
+verübten
+verübter
+verübtes
+verübtest
+verübtet
+vespere
+vespern
+vespernd
+vespernde
+vesperndem
+vespernden
+vespernder
+vesperndes
+vesperst
+vespert
+vesperte
+vesperten
+vespertest
+vespertet
+vespre
+vgl
+via
+vibriere
+vibrieren
+vibrierend
+vibrierende
+vibrierendem
+vibrierenden
+vibrierender
+vibrierendes
+vibrierst
+vibriert
+vibrierte
+vibrierten
+vibriertest
+vibriertet
+viehisch
+viehische
+viehischem
+viehischen
+viehischer
+viehisches
+viel
+vieladerig
+vieladerige
+vieladerigem
+vieladerigen
+vieladeriger
+vieladeriges
+vieladrig
+vieladrige
+vieladrigem
+vieladrigen
+vieladriger
+vieladriges
+vieldeutig
+vieldeutige
+vieldeutigem
+vieldeutigen
+vieldeutiger
+vieldeutiges
+viele
+vielem
+vielen
+vieler
+vielerlei
+vielerorts
+vieles
+vielfach
+vielfache
+vielfachem
+vielfachen
+vielfacher
+vielfaches
+vielfarbig
+vielfarbige
+vielfarbigem
+vielfarbigen
+vielfarbiger
+vielfarbiges
+vielfältig
+vielfältige
+vielfältigem
+vielfältigen
+vielfältiger
+vielfältiges
+vielgestaltig
+vielgestaltige
+vielgestaltigem
+vielgestaltigen
+vielgestaltiger
+vielgestaltiges
+vieljährig
+vieljährige
+vieljährigem
+vieljährigen
+vieljähriger
+vieljähriges
+vielleicht
+vielmalig
+vielmalige
+vielmaligem
+vielmaligen
+vielmaliger
+vielmaliges
+vielmals
+vielmehr
+vielschichtig
+vielschichtige
+vielschichtigem
+vielschichtigen
+vielschichtiger
+vielschichtiges
+vielseitig
+vielseitige
+vielseitigem
+vielseitigen
+vielseitiger
+vielseitigere
+vielseitigerem
+vielseitigeren
+vielseitigerer
+vielseitigeres
+vielseitiges
+vielseitigste
+vielseitigstem
+vielseitigsten
+vielseitigster
+vielseitigstes
+vielsilbig
+vielsilbige
+vielsilbigem
+vielsilbigen
+vielsilbiger
+vielsilbiges
+vielstimmig
+vielstimmige
+vielstimmigem
+vielstimmigen
+vielstimmiger
+vielstimmiges
+vielzellig
+vielzellige
+vielzelligem
+vielzelligen
+vielzelliger
+vielzelliges
+vielzählig
+vielzählige
+vielzähligem
+vielzähligen
+vielzähliger
+vielzähliges
+vier
+vieraderig
+vieraderige
+vieraderigem
+vieraderigen
+vieraderiger
+vieraderiges
+vieradrig
+vieradrige
+vieradrigem
+vieradrigen
+vieradriger
+vieradriges
+vierbeinig
+vierbeinige
+vierbeinigem
+vierbeinigen
+vierbeiniger
+vierbeiniges
+vierblätterig
+vierblätterige
+vierblätterigem
+vierblätterigen
+vierblätteriger
+vierblätteriges
+vierblättrig
+vierblättrige
+vierblättrigem
+vierblättrigen
+vierblättriger
+vierblättriges
+vierdimensional
+vierdimensionale
+vierdimensionalem
+vierdimensionalen
+vierdimensionaler
+vierdimensionales
+viereckig
+viereckige
+viereckigem
+viereckigen
+viereckiger
+viereckiges
+viereinhalb
+vierfach
+vierfache
+vierfachem
+vierfachen
+vierfacher
+vierfaches
+vierfarbig
+vierfarbige
+vierfarbigem
+vierfarbigen
+vierfarbiger
+vierfarbiges
+vierfüßig
+vierfüßige
+vierfüßigem
+vierfüßigen
+vierfüßiger
+vierfüßiges
+vierhundert
+vierhändig
+vierhändige
+vierhändigem
+vierhändigen
+vierhändiger
+vierhändiges
+vierjährig
+vierjährige
+vierjährigem
+vierjährigen
+vierjähriger
+vierjähriges
+vierkantig
+vierkantige
+vierkantigem
+vierkantigen
+vierkantiger
+vierkantiges
+viermal
+viermalig
+viermalige
+viermaligem
+viermaligen
+viermaliger
+viermaliges
+vierpolig
+vierpolige
+vierpoligem
+vierpoligen
+vierpoliger
+vierpoliges
+vierrädig
+vierrädige
+vierrädigem
+vierrädigen
+vierrädiger
+vierrädiges
+vierschrötig
+vierschrötige
+vierschrötigem
+vierschrötigen
+vierschrötiger
+vierschrötiges
+vierseitig
+vierseitige
+vierseitigem
+vierseitigen
+vierseitiger
+vierseitiges
+viersilbig
+viersilbige
+viersilbigem
+viersilbigen
+viersilbiger
+viersilbiges
+vierspännig
+vierspännige
+vierspännigem
+vierspännigen
+vierspänniger
+vierspänniges
+vierstellig
+vierstellige
+vierstelligem
+vierstelligen
+vierstelliger
+vierstelliges
+vierstöckig
+vierstöckige
+vierstöckigem
+vierstöckigen
+vierstöckiger
+vierstöckiges
+vierstündig
+vierstündige
+vierstündigem
+vierstündigen
+vierstündiger
+vierstündiges
+viert
+viertausend
+vierte
+vierteile
+vierteilen
+vierteilend
+vierteilende
+vierteilendem
+vierteilenden
+vierteilender
+vierteilendes
+vierteilst
+vierteilt
+vierteilte
+vierteilten
+vierteiltest
+vierteiltet
+viertel
+vierteljährig
+vierteljährige
+vierteljährigem
+vierteljährigen
+vierteljähriger
+vierteljähriges
+vierteljährlich
+vierteljährliche
+vierteljährlichem
+vierteljährlichen
+vierteljährlicher
+vierteljährliches
+viertelstündlich
+viertelstündliche
+viertelstündlichem
+viertelstündlichen
+viertelstündlicher
+viertelstündliches
+viertem
+vierten
+viertens
+vierter
+viertes
+viertägig
+viertägige
+viertägigem
+viertägigen
+viertägiger
+viertägiges
+vierwöchig
+vierwöchige
+vierwöchigem
+vierwöchigen
+vierwöchiger
+vierwöchiges
+vierzehn
+vierzehnte
+vierzehntem
+vierzehnten
+vierzehnter
+vierzehntes
+vierzehntägig
+vierzehntägige
+vierzehntägigem
+vierzehntägigen
+vierzehntägiger
+vierzehntägiges
+vierzig
+vierziger
+vierzigern
+vierzigjährig
+vierzigjährige
+vierzigjährigem
+vierzigjährigen
+vierzigjähriger
+vierzigjähriges
+vierzigste
+vierzigstem
+vierzigsten
+vierzigster
+vierzigstes
+violett
+violette
+violettem
+violetten
+violetter
+violettes
+virtuell
+virtuelle
+virtuellem
+virtuellen
+virtueller
+virtuelles
+virtuos
+virtuose
+virtuosem
+virtuosen
+virtuoser
+virtuosere
+virtuoserem
+virtuoseren
+virtuoserer
+virtuoseres
+virtuoses
+virtuoseste
+virtuosestem
+virtuosesten
+virtuosester
+virtuosestes
+virulent
+virulente
+virulentem
+virulenten
+virulenter
+virulentere
+virulenterem
+virulenteren
+virulenterer
+virulenteres
+virulentes
+virulenteste
+virulentestem
+virulentesten
+virulentester
+virulentestes
+visiere
+visieren
+visierend
+visierende
+visierendem
+visierenden
+visierender
+visierendes
+visierst
+visiert
+visierte
+visiertem
+visierten
+visierter
+visiertes
+visiertest
+visiertet
+visitiere
+visitieren
+visitierend
+visitierende
+visitierendem
+visitierenden
+visitierender
+visitierendes
+visitierst
+visitiert
+visitierte
+visitiertem
+visitierten
+visitierter
+visitiertes
+visitiertest
+visitiertet
+visualisiere
+visualisieren
+visualisierend
+visualisierende
+visualisierendem
+visualisierenden
+visualisierender
+visualisierendes
+visualisierst
+visualisiert
+visualisierte
+visualisiertem
+visualisierten
+visualisierter
+visualisiertes
+visualisiertest
+visualisiertet
+visuell
+visuelle
+visuellem
+visuellen
+visueller
+visuelles
+vital
+vitale
+vitalem
+vitalen
+vitaler
+vitalere
+vitalerem
+vitaleren
+vitalerer
+vitaleres
+vitales
+vitalste
+vitalstem
+vitalsten
+vitalster
+vitalstes
+vitaminisiere
+vitaminisieren
+vitaminisierend
+vitaminisierende
+vitaminisierendem
+vitaminisierenden
+vitaminisierender
+vitaminisierendes
+vitaminisierst
+vitaminisiert
+vitaminisierte
+vitaminisiertem
+vitaminisierten
+vitaminisierter
+vitaminisiertes
+vitaminisiertest
+vitaminisiertet
+vivendi
+volatil
+volatile
+volatilem
+volatilen
+volatiler
+volatilere
+volatilerem
+volatileren
+volatilerer
+volatileres
+volatiles
+volatilste
+volatilstem
+volatilsten
+volatilster
+volatilstes
+volkreich
+volkreiche
+volkreichem
+volkreichen
+volkreicher
+volkreiches
+volkstümlich
+volkstümliche
+volkstümlichem
+volkstümlichen
+volkstümlicher
+volkstümliches
+volksverdummte
+volksverdummtem
+volksverdummten
+volksverdummter
+volksverdummtes
+volkswirtschaftlich
+volkswirtschaftliche
+volkswirtschaftlichem
+volkswirtschaftlichen
+volkswirtschaftlicher
+volkswirtschaftliches
+voll
+vollauf
+vollautomatisch
+vollautomatische
+vollautomatischem
+vollautomatischen
+vollautomatischer
+vollautomatisches
+vollbeschäftigt
+vollbeschäftigte
+vollbeschäftigtem
+vollbeschäftigten
+vollbeschäftigter
+vollbeschäftigtes
+vollbesetzt
+vollbesetzte
+vollbesetztem
+vollbesetzten
+vollbesetzter
+vollbesetztes
+vollblütig
+vollblütige
+vollblütigem
+vollblütigen
+vollblütiger
+vollblütiges
+vollbracht
+vollbrachte
+vollbrachtem
+vollbrachten
+vollbrachter
+vollbrachtes
+vollbrachtest
+vollbrachtet
+vollbringe
+vollbringen
+vollbringend
+vollbringende
+vollbringendem
+vollbringenden
+vollbringender
+vollbringendes
+vollbringst
+vollbringt
+vollbusig
+vollbusige
+vollbusigem
+vollbusigen
+vollbusiger
+vollbusiges
+volle
+vollem
+vollen
+vollende
+vollenden
+vollendend
+vollendende
+vollendendem
+vollendenden
+vollendender
+vollendendes
+vollendest
+vollendet
+vollendete
+vollendetem
+vollendeten
+vollendeter
+vollendetes
+vollendetest
+vollendetet
+vollends
+voller
+vollere
+vollerem
+volleren
+vollerer
+volleres
+volles
+vollführe
+vollführen
+vollführend
+vollführende
+vollführendem
+vollführenden
+vollführender
+vollführendes
+vollführst
+vollführt
+vollführte
+vollführtem
+vollführten
+vollführter
+vollführtes
+vollführtest
+vollführtet
+vollgefüllt
+vollgefüllte
+vollgefülltem
+vollgefüllten
+vollgefüllter
+vollgefülltes
+vollgültig
+vollgültige
+vollgültigem
+vollgültigen
+vollgültiger
+vollgültiges
+volljährig
+volljährige
+volljährigem
+volljährigen
+volljähriger
+volljähriges
+vollkommen
+vollkommene
+vollkommenem
+vollkommenen
+vollkommener
+vollkommenes
+vollmundig
+vollmundige
+vollmundigem
+vollmundigen
+vollmundiger
+vollmundiges
+vollschlank
+vollschlanke
+vollschlankem
+vollschlanken
+vollschlanker
+vollschlankes
+vollste
+vollstem
+vollsten
+vollster
+vollstes
+vollstopfe
+vollstopfen
+vollstopfend
+vollstopfende
+vollstopfendem
+vollstopfenden
+vollstopfender
+vollstopfendes
+vollstopfst
+vollstopft
+vollstopfte
+vollstopften
+vollstopftest
+vollstopftet
+vollstreckbar
+vollstreckbare
+vollstreckbarem
+vollstreckbaren
+vollstreckbarer
+vollstreckbares
+vollstrecke
+vollstrecken
+vollstreckend
+vollstreckende
+vollstreckendem
+vollstreckenden
+vollstreckender
+vollstreckendes
+vollstreckst
+vollstreckt
+vollstreckte
+vollstrecktem
+vollstreckten
+vollstreckter
+vollstrecktes
+vollstrecktest
+vollstrecktet
+vollständig
+vollständige
+vollständigem
+vollständigen
+vollständiger
+vollständiges
+volltanke
+volltanken
+volltankend
+volltankende
+volltankendem
+volltankenden
+volltankender
+volltankendes
+volltankst
+volltankt
+volltankte
+volltankten
+volltanktest
+volltanktet
+vollwertig
+vollwertige
+vollwertigem
+vollwertigen
+vollwertiger
+vollwertiges
+vollziehe
+vollziehen
+vollziehend
+vollziehende
+vollziehendem
+vollziehenden
+vollziehender
+vollziehendes
+vollziehst
+vollzieht
+vollzog
+vollzogen
+vollzogene
+vollzogenem
+vollzogenen
+vollzogener
+vollzogenes
+vollzogst
+vollzogt
+vollzählig
+vollzählige
+vollzähligem
+vollzähligen
+vollzähliger
+vollzähliges
+vom
+von
+voneinander
+vonnöten
+vonseiten
+vonstatten
+vor
+vorab
+vorahne
+vorahnen
+vorahnend
+vorahnende
+vorahnendem
+vorahnenden
+vorahnender
+vorahnendes
+vorahnst
+vorahnt
+vorahnte
+vorahnten
+vorahntest
+vorahntet
+voran
+voranbringe
+voranbringen
+voranbringend
+voranbringende
+voranbringendem
+voranbringenden
+voranbringender
+voranbringendes
+voranbringst
+voranbringt
+vorangebracht
+vorangegangen
+vorangegangene
+vorangegangenem
+vorangegangenen
+vorangegangener
+vorangegangenes
+vorangehe
+vorangehen
+vorangehend
+vorangehende
+vorangehendem
+vorangehenden
+vorangehender
+vorangehendes
+vorangehst
+vorangeht
+vorangekommen
+vorangekommene
+vorangekommenem
+vorangekommenen
+vorangekommener
+vorangekommenes
+vorangestellt
+vorangestellte
+vorangestelltem
+vorangestellten
+vorangestellter
+vorangestelltes
+vorangetrieben
+vorankomme
+vorankommen
+vorankommend
+vorankommende
+vorankommendem
+vorankommenden
+vorankommender
+vorankommendes
+vorankommst
+vorankommt
+voranschreite
+voranschreiten
+voranschreitend
+voranschreitende
+voranschreitendem
+voranschreitenden
+voranschreitender
+voranschreitendes
+voranschreitest
+voranschreitet
+voranstelle
+voranstellen
+voranstellend
+voranstellende
+voranstellendem
+voranstellenden
+voranstellender
+voranstellendes
+voranstellst
+voranstellt
+voranstellte
+voranstellten
+voranstelltest
+voranstelltet
+vorantreibe
+vorantreiben
+vorantreibend
+vorantreibende
+vorantreibendem
+vorantreibenden
+vorantreibender
+vorantreibendes
+vorantreibst
+vorantreibt
+vorantreibte
+vorantreibten
+vorantreibtest
+vorantreibtet
+voranzubringen
+voranzugehen
+voranzukommen
+vorarbeite
+vorarbeiten
+vorarbeitend
+vorarbeitende
+vorarbeitendem
+vorarbeitenden
+vorarbeitender
+vorarbeitendes
+vorarbeitest
+vorarbeitet
+vorarbeitete
+vorarbeiteten
+vorarbeitetest
+vorarbeitetet
+voraus
+vorausbedingt
+vorausbedingte
+vorausbedingtem
+vorausbedingten
+vorausbedingter
+vorausbedingtes
+vorausgeahnt
+vorausgeahnte
+vorausgeahntem
+vorausgeahnten
+vorausgeahnter
+vorausgeahntes
+vorausgedacht
+vorausgedachte
+vorausgedachtem
+vorausgedachten
+vorausgedachter
+vorausgedachtes
+vorausgegangen
+vorausgegangene
+vorausgegangenem
+vorausgegangenen
+vorausgegangener
+vorausgegangenes
+vorausgehe
+vorausgehen
+vorausgehend
+vorausgehende
+vorausgehendem
+vorausgehenden
+vorausgehender
+vorausgehendes
+vorausgehst
+vorausgeht
+vorausgesagt
+vorausgesagte
+vorausgesagtem
+vorausgesagten
+vorausgesagter
+vorausgesagtes
+vorausgeschickt
+vorausgeschickte
+vorausgeschicktem
+vorausgeschickten
+vorausgeschickter
+vorausgeschicktes
+vorausgesehen
+vorausgesehene
+vorausgesehenem
+vorausgesehenen
+vorausgesehener
+vorausgesehenes
+vorausgesetzt
+vorausgesetzte
+vorausgesetztem
+vorausgesetzten
+vorausgesetzter
+vorausgesetztes
+voraussagbar
+voraussagbare
+voraussagbarem
+voraussagbaren
+voraussagbarer
+voraussagbares
+voraussage
+voraussagen
+voraussagend
+voraussagende
+voraussagendem
+voraussagenden
+voraussagender
+voraussagendes
+voraussagst
+voraussagt
+voraussagte
+voraussagten
+voraussagtest
+voraussagtet
+vorausschaue
+vorausschauen
+vorausschauend
+vorausschauende
+vorausschauendem
+vorausschauenden
+vorausschauender
+vorausschauendes
+vorausschaust
+vorausschaut
+vorausschaute
+vorausschauten
+vorausschautest
+vorausschautet
+voraussehbar
+voraussehbare
+voraussehbarem
+voraussehbaren
+voraussehbarer
+voraussehbares
+voraussehe
+voraussehen
+voraussehend
+voraussehende
+voraussehendem
+voraussehenden
+voraussehender
+voraussehendes
+vorausseht
+voraussetze
+voraussetzen
+voraussetzend
+voraussetzende
+voraussetzendem
+voraussetzenden
+voraussetzender
+voraussetzendes
+voraussetzest
+voraussetzt
+voraussetzte
+voraussetzten
+voraussetztest
+voraussetztet
+voraussichtlich
+voraussichtliche
+voraussichtlichem
+voraussichtlichen
+voraussichtlicher
+voraussichtliches
+vorauszuberechnen
+vorauszusagen
+vorauszusagend
+vorauszusagende
+vorauszusagendem
+vorauszusagenden
+vorauszusagender
+vorauszusagendes
+vorauszusehen
+vorauszusehend
+vorauszusehende
+vorauszusehendem
+vorauszusehenden
+vorauszusehender
+vorauszusehendes
+vorbedruckt
+vorbedruckte
+vorbedrucktem
+vorbedruckten
+vorbedruckter
+vorbedrucktes
+vorbehalten
+vorbehaltene
+vorbehaltenem
+vorbehaltenen
+vorbehaltener
+vorbehaltenes
+vorbehaltlich
+vorbehaltliche
+vorbehaltlichem
+vorbehaltlichen
+vorbehaltlicher
+vorbehaltliches
+vorbehaltlos
+vorbehält
+vorbehältst
+vorbei
+vorbeiflimmernd
+vorbeiflimmernde
+vorbeiflimmerndem
+vorbeiflimmernden
+vorbeiflimmernder
+vorbeiflimmerndes
+vorbeifährst
+vorbeifährt
+vorbeigefahren
+vorbeigefahrene
+vorbeigefahrenem
+vorbeigefahrenen
+vorbeigefahrener
+vorbeigefahrenes
+vorbeigegangen
+vorbeigegangene
+vorbeigegangenem
+vorbeigegangenen
+vorbeigegangener
+vorbeigegangenes
+vorbeigehe
+vorbeigehen
+vorbeigehend
+vorbeigehende
+vorbeigehendem
+vorbeigehenden
+vorbeigehender
+vorbeigehendes
+vorbeigehst
+vorbeigeht
+vorbeigekommen
+vorbeigeredet
+vorbeigeschossen
+vorbeigeschossene
+vorbeigeschossenem
+vorbeigeschossenen
+vorbeigeschossener
+vorbeigeschossenes
+vorbeiging
+vorbeigingen
+vorbeigingst
+vorbeigingt
+vorbeikomme
+vorbeikommen
+vorbeikommend
+vorbeikommende
+vorbeikommendem
+vorbeikommenden
+vorbeikommender
+vorbeikommendes
+vorbeikommst
+vorbeikommt
+vorbeiziehe
+vorbeiziehen
+vorbeiziehend
+vorbeiziehende
+vorbeiziehendem
+vorbeiziehenden
+vorbeiziehender
+vorbeiziehendes
+vorbeiziehst
+vorbeizieht
+vorbeiziehte
+vorbeiziehten
+vorbeiziehtest
+vorbeiziehtet
+vorbeizog
+vorbeizogen
+vorbeizogst
+vorbeizogt
+vorbeizukommen
+vorbelastet
+vorbelastete
+vorbelastetem
+vorbelasteten
+vorbelasteter
+vorbelastetes
+vorbenannt
+vorbenannte
+vorbenanntem
+vorbenannten
+vorbenannter
+vorbenanntes
+vorbereite
+vorbereiten
+vorbereitend
+vorbereitende
+vorbereitendem
+vorbereitenden
+vorbereitender
+vorbereitendes
+vorbereitest
+vorbereitet
+vorbereitete
+vorbereitetem
+vorbereiteten
+vorbereiteter
+vorbereitetes
+vorbereitetest
+vorbereitetet
+vorberufqqlich
+vorberufqqliche
+vorberufqqlichem
+vorberufqqlichen
+vorberufqqlicher
+vorberufqqliches
+vorbesetzt
+vorbesetzte
+vorbesetztem
+vorbesetzten
+vorbesetzter
+vorbesetztes
+vorbestelle
+vorbestellen
+vorbestellend
+vorbestellende
+vorbestellendem
+vorbestellenden
+vorbestellender
+vorbestellendes
+vorbestellst
+vorbestellt
+vorbestellte
+vorbestelltem
+vorbestellten
+vorbestellter
+vorbestelltes
+vorbestelltest
+vorbestelltet
+vorbestimmt
+vorbestimmte
+vorbestimmtem
+vorbestimmten
+vorbestimmter
+vorbestimmtes
+vorbestraft
+vorbestrafte
+vorbestraftem
+vorbestraften
+vorbestrafter
+vorbestraftes
+vorbeuge
+vorbeugen
+vorbeugend
+vorbeugende
+vorbeugendem
+vorbeugenden
+vorbeugender
+vorbeugendes
+vorbeugst
+vorbeugt
+vorbeugte
+vorbeugten
+vorbeugtest
+vorbeugtet
+vorbildlich
+vorbildliche
+vorbildlichem
+vorbildlichen
+vorbildlicher
+vorbildliches
+vorbringe
+vorbringen
+vorbringend
+vorbringende
+vorbringendem
+vorbringenden
+vorbringender
+vorbringendes
+vorbringst
+vorbringt
+vordatiere
+vordatieren
+vordatierend
+vordatierende
+vordatierendem
+vordatierenden
+vordatierender
+vordatierendes
+vordatierst
+vordatiert
+vordatierte
+vordatiertem
+vordatierten
+vordatierter
+vordatiertes
+vordatiertest
+vordatiertet
+vordefiniere
+vordefinieren
+vordefinierend
+vordefinierende
+vordefinierendem
+vordefinierenden
+vordefinierender
+vordefinierendes
+vordefinierst
+vordefiniert
+vordefinierte
+vordefiniertem
+vordefinierten
+vordefinierter
+vordefiniertes
+vordefiniertest
+vordefiniertet
+vordem
+vordere
+vorderem
+vorderen
+vorderer
+vorderes
+vordergründig
+vordergründige
+vordergründigem
+vordergründigen
+vordergründiger
+vordergründiges
+vorderste
+vorderstem
+vordersten
+vorderster
+vorderstes
+vordringlich
+vordringliche
+vordringlichem
+vordringlichen
+vordringlicher
+vordringlichere
+vordringlicherem
+vordringlicheren
+vordringlicherer
+vordringlicheres
+vordringliches
+vordringlichste
+vordringlichstem
+vordringlichsten
+vordringlichster
+vordringlichstes
+vordränge
+vordrängen
+vordrängend
+vordrängende
+vordrängendem
+vordrängenden
+vordrängender
+vordrängendes
+vordrängst
+vordrängt
+vordrängte
+vordrängten
+vordrängtest
+vordrängtet
+vordrücke
+vordrücken
+vordrückend
+vordrückende
+vordrückendem
+vordrückenden
+vordrückender
+vordrückendes
+vordrückst
+vordrückt
+vordrückte
+vordrückten
+vordrücktest
+vordrücktet
+vorehelich
+voreheliche
+vorehelichem
+vorehelichen
+vorehelicher
+voreheliches
+voreile
+voreilen
+voreilend
+voreilende
+voreilendem
+voreilenden
+voreilender
+voreilendes
+voreilig
+voreilige
+voreiligem
+voreiligen
+voreiliger
+voreiliges
+voreilst
+voreilt
+voreilte
+voreilten
+voreiltest
+voreiltet
+voreinander
+voreingenommen
+voreingenommene
+voreingenommenem
+voreingenommenen
+voreingenommener
+voreingenommenes
+vorenthalte
+vorenthalten
+vorenthaltend
+vorenthaltende
+vorenthaltendem
+vorenthaltenden
+vorenthaltender
+vorenthaltendes
+vorenthaltene
+vorenthaltenem
+vorenthaltenen
+vorenthaltener
+vorenthaltenes
+vorenthaltet
+vorentscheide
+vorentscheiden
+vorentscheidend
+vorentscheidende
+vorentscheidendem
+vorentscheidenden
+vorentscheidender
+vorentscheidendes
+vorentscheidest
+vorentscheidet
+vorerst
+vorerwähnt
+vorerwähnte
+vorerwähntem
+vorerwähnten
+vorerwähnter
+vorerwähntes
+vorexerziere
+vorexerzieren
+vorexerzierend
+vorexerzierende
+vorexerzierendem
+vorexerzierenden
+vorexerzierender
+vorexerzierendes
+vorexerzierst
+vorexerziert
+vorexerzierte
+vorexerziertem
+vorexerzierten
+vorexerzierter
+vorexerziertes
+vorexerziertest
+vorexerziertet
+vorfabriziert
+vorfabrizierte
+vorfabriziertem
+vorfabrizierten
+vorfabrizierter
+vorfabriziertes
+vorfahre
+vorfahren
+vorfahrend
+vorfahrende
+vorfahrendem
+vorfahrenden
+vorfahrender
+vorfahrendes
+vorfahrt
+vorfinde
+vorfinden
+vorfindend
+vorfindende
+vorfindendem
+vorfindenden
+vorfindender
+vorfindendes
+vorfindest
+vorfindet
+vorformatiere
+vorformatieren
+vorformatierend
+vorformatierende
+vorformatierendem
+vorformatierenden
+vorformatierender
+vorformatierendes
+vorformatierst
+vorformatiert
+vorformatierte
+vorformatiertem
+vorformatierten
+vorformatierter
+vorformatiertes
+vorformatiertest
+vorformatiertet
+vorführe
+vorführen
+vorführend
+vorführende
+vorführendem
+vorführenden
+vorführender
+vorführendes
+vorführst
+vorführt
+vorführte
+vorführten
+vorführtest
+vorführtet
+vorgaukele
+vorgaukeln
+vorgaukelnd
+vorgaukelnde
+vorgaukelndem
+vorgaukelnden
+vorgaukelnder
+vorgaukelndes
+vorgaukelst
+vorgaukelt
+vorgaukelte
+vorgaukelten
+vorgaukeltest
+vorgaukeltet
+vorgaukle
+vorgeahnt
+vorgeahnte
+vorgeahntem
+vorgeahnten
+vorgeahnter
+vorgeahntes
+vorgearbeitet
+vorgebbar
+vorgebbare
+vorgebbarem
+vorgebbaren
+vorgebbarer
+vorgebbares
+vorgebe
+vorgeben
+vorgebend
+vorgebende
+vorgebendem
+vorgebenden
+vorgebender
+vorgebendes
+vorgebetet
+vorgebetete
+vorgebetetem
+vorgebeteten
+vorgebeteter
+vorgebetetes
+vorgebeugt
+vorgebeugte
+vorgebeugtem
+vorgebeugten
+vorgebeugter
+vorgebeugtes
+vorgebildet
+vorgebildete
+vorgebildetem
+vorgebildeten
+vorgebildeter
+vorgebildetes
+vorgeblich
+vorgebliche
+vorgeblichem
+vorgeblichen
+vorgeblicher
+vorgebliches
+vorgebracht
+vorgebrachte
+vorgebrachtem
+vorgebrachten
+vorgebrachter
+vorgebrachtes
+vorgebt
+vorgedrungen
+vorgedrungene
+vorgedrungenem
+vorgedrungenen
+vorgedrungener
+vorgedrungenes
+vorgedrängt
+vorgedrängte
+vorgedrängtem
+vorgedrängten
+vorgedrängter
+vorgedrängtes
+vorgefahren
+vorgefahrene
+vorgefahrenem
+vorgefahrenen
+vorgefahrener
+vorgefahrenes
+vorgefallen
+vorgefallene
+vorgefallenem
+vorgefallenen
+vorgefallener
+vorgefallenes
+vorgefasst
+vorgefasste
+vorgefasstem
+vorgefassten
+vorgefasster
+vorgefasstes
+vorgefertigt
+vorgefertigte
+vorgefertigtem
+vorgefertigten
+vorgefertigter
+vorgefertigtes
+vorgeformt
+vorgeformte
+vorgeformtem
+vorgeformten
+vorgeformter
+vorgeformtes
+vorgefunden
+vorgefundene
+vorgefundenem
+vorgefundenen
+vorgefundener
+vorgefundenes
+vorgeführt
+vorgeführte
+vorgeführtem
+vorgeführten
+vorgeführter
+vorgeführtes
+vorgegangen
+vorgegaukelt
+vorgegaukelte
+vorgegaukeltem
+vorgegaukelten
+vorgegaukelter
+vorgegaukeltes
+vorgegeben
+vorgegebene
+vorgegebenem
+vorgegebenen
+vorgegebener
+vorgegebenes
+vorgegen
+vorgegriffen
+vorgegriffene
+vorgegriffenem
+vorgegriffenen
+vorgegriffener
+vorgegriffenes
+vorgehabt
+vorgehabte
+vorgehabtem
+vorgehabten
+vorgehabter
+vorgehabtes
+vorgehalten
+vorgehaltene
+vorgehaltenem
+vorgehaltenen
+vorgehaltener
+vorgehaltenes
+vorgehe
+vorgehen
+vorgehend
+vorgehende
+vorgehendem
+vorgehenden
+vorgehender
+vorgehendes
+vorgeherrscht
+vorgehst
+vorgeht
+vorgekaut
+vorgekaute
+vorgekautem
+vorgekauten
+vorgekauter
+vorgekautes
+vorgelagert
+vorgelagerte
+vorgelagertem
+vorgelagerten
+vorgelagerter
+vorgelagertes
+vorgelassen
+vorgelassene
+vorgelassenem
+vorgelassenen
+vorgelassener
+vorgelassenes
+vorgelegen
+vorgelegene
+vorgelegenem
+vorgelegenen
+vorgelegener
+vorgelegenes
+vorgelegt
+vorgelegte
+vorgelegtem
+vorgelegten
+vorgelegter
+vorgelegtes
+vorgelesen
+vorgelesene
+vorgelesenem
+vorgelesenen
+vorgelesener
+vorgelesenes
+vorgelogen
+vorgelogene
+vorgelogenem
+vorgelogenen
+vorgelogener
+vorgelogenes
+vorgemacht
+vorgemachte
+vorgemachtem
+vorgemachten
+vorgemachter
+vorgemachtes
+vorgemerkt
+vorgemerkte
+vorgemerktem
+vorgemerkten
+vorgemerkter
+vorgemerktes
+vorgenannt
+vorgenannte
+vorgenanntem
+vorgenannten
+vorgenannter
+vorgenanntes
+vorgenommen
+vorgenommene
+vorgenommenem
+vorgenommenen
+vorgenommener
+vorgenommenes
+vorgerechnet
+vorgerechnete
+vorgerechnetem
+vorgerechneten
+vorgerechneter
+vorgerechnetes
+vorgeredet
+vorgeredete
+vorgeredetem
+vorgeredeten
+vorgeredeter
+vorgeredetes
+vorgerichtet
+vorgerückt
+vorgerückte
+vorgerücktem
+vorgerückten
+vorgerückter
+vorgerücktes
+vorgesagt
+vorgesagte
+vorgesagtem
+vorgesagten
+vorgesagter
+vorgesagtes
+vorgeschlagen
+vorgeschlagene
+vorgeschlagenem
+vorgeschlagenen
+vorgeschlagener
+vorgeschlagenes
+vorgeschoben
+vorgeschobene
+vorgeschobenem
+vorgeschobenen
+vorgeschobener
+vorgeschobenes
+vorgeschossen
+vorgeschossene
+vorgeschossenem
+vorgeschossenen
+vorgeschossener
+vorgeschossenes
+vorgeschrieben
+vorgeschriebene
+vorgeschriebenem
+vorgeschriebenen
+vorgeschriebener
+vorgeschriebenes
+vorgeschwindelt
+vorgeschwindelte
+vorgeschwindeltem
+vorgeschwindelten
+vorgeschwindelter
+vorgeschwindeltes
+vorgeschützt
+vorgeschützte
+vorgeschütztem
+vorgeschützten
+vorgeschützter
+vorgeschütztes
+vorgesehen
+vorgesehene
+vorgesehenem
+vorgesehenen
+vorgesehener
+vorgesehenes
+vorgesetzt
+vorgesetzte
+vorgesetztem
+vorgesetzten
+vorgesetzter
+vorgesetztes
+vorgesorgt
+vorgesorgte
+vorgesorgtem
+vorgesorgten
+vorgesorgter
+vorgesorgtes
+vorgespannt
+vorgespannte
+vorgespanntem
+vorgespannten
+vorgespannter
+vorgespanntes
+vorgespiegelt
+vorgespiegelte
+vorgespiegeltem
+vorgespiegelten
+vorgespiegelter
+vorgespiegeltes
+vorgespielt
+vorgespielte
+vorgespieltem
+vorgespielten
+vorgespielter
+vorgespieltes
+vorgestanden
+vorgesteckt
+vorgesteckte
+vorgestecktem
+vorgesteckten
+vorgesteckter
+vorgestecktes
+vorgestellt
+vorgestellte
+vorgestelltem
+vorgestellten
+vorgestellter
+vorgestelltes
+vorgestern
+vorgestoßen
+vorgestoßene
+vorgestoßenem
+vorgestoßenen
+vorgestoßener
+vorgestoßenes
+vorgestreckt
+vorgestreckte
+vorgestrecktem
+vorgestreckten
+vorgestreckter
+vorgestrecktes
+vorgestrig
+vorgestrige
+vorgestrigem
+vorgestrigen
+vorgestriger
+vorgestriges
+vorgestürmt
+vorgesungen
+vorgesungene
+vorgesungenem
+vorgesungenen
+vorgesungener
+vorgesungenes
+vorgetanzt
+vorgetanzte
+vorgetanztem
+vorgetanzten
+vorgetanzter
+vorgetanztes
+vorgetragen
+vorgetragene
+vorgetragenem
+vorgetragenen
+vorgetragener
+vorgetragenes
+vorgetreten
+vorgetretene
+vorgetretenem
+vorgetretenen
+vorgetretener
+vorgetretenes
+vorgetriffen
+vorgetriffene
+vorgetriffenem
+vorgetriffenen
+vorgetriffener
+vorgetriffenes
+vorgetäuscht
+vorgetäuschte
+vorgetäuschtem
+vorgetäuschten
+vorgetäuschter
+vorgetäuschtes
+vorgewiesen
+vorgewiesene
+vorgewiesenem
+vorgewiesenen
+vorgewiesener
+vorgewiesenes
+vorgeworfen
+vorgeworfene
+vorgeworfenem
+vorgeworfenen
+vorgeworfener
+vorgeworfenes
+vorgewählt
+vorgewählte
+vorgewähltem
+vorgewählten
+vorgewählter
+vorgewähltes
+vorgewärmt
+vorgewärmte
+vorgewärmtem
+vorgewärmten
+vorgewärmter
+vorgewärmtes
+vorgezeichnet
+vorgezeichnete
+vorgezeichnetem
+vorgezeichneten
+vorgezeichneter
+vorgezeichnetes
+vorgezeigt
+vorgezeigte
+vorgezeigtem
+vorgezeigten
+vorgezeigter
+vorgezeigtes
+vorgezogen
+vorgezogene
+vorgezogenem
+vorgezogenen
+vorgezogener
+vorgezogenes
+vorgibst
+vorgibt
+vorging
+vorgingen
+vorgingst
+vorgingt
+vorgreife
+vorgreifen
+vorgreifend
+vorgreifende
+vorgreifendem
+vorgreifenden
+vorgreifender
+vorgreifendes
+vorgreifst
+vorgreift
+vorhabe
+vorhaben
+vorhabt
+vorhalte
+vorhalten
+vorhaltend
+vorhaltende
+vorhaltendem
+vorhaltenden
+vorhaltender
+vorhaltendes
+vorhaltet
+vorhanden
+vorhandene
+vorhandenem
+vorhandenen
+vorhandener
+vorhandenes
+vorhast
+vorhat
+vorher
+vorherbestellt
+vorherbestellte
+vorherbestelltem
+vorherbestellten
+vorherbestellter
+vorherbestelltes
+vorherbestimmt
+vorherbestimmte
+vorherbestimmtem
+vorherbestimmten
+vorherbestimmter
+vorherbestimmtes
+vorhergegangen
+vorhergegangene
+vorhergegangenem
+vorhergegangenen
+vorhergegangener
+vorhergegangenes
+vorhergehe
+vorhergehen
+vorhergehend
+vorhergehende
+vorhergehendem
+vorhergehenden
+vorhergehender
+vorhergehendes
+vorhergehst
+vorhergeht
+vorhergesagt
+vorhergesagte
+vorhergesagtem
+vorhergesagten
+vorhergesagter
+vorhergesagtes
+vorhergesehen
+vorhergesehene
+vorhergesehenem
+vorhergesehenen
+vorhergesehener
+vorhergesehenes
+vorherig
+vorherige
+vorherigem
+vorherigen
+vorheriger
+vorheriges
+vorherrsche
+vorherrschen
+vorherrschend
+vorherrschende
+vorherrschendem
+vorherrschenden
+vorherrschender
+vorherrschendes
+vorherrschest
+vorherrschst
+vorherrscht
+vorherrschte
+vorherrschten
+vorherrschtest
+vorherrschtet
+vorherzusehen
+vorherzusehend
+vorherzusehende
+vorherzusehendem
+vorherzusehenden
+vorherzusehender
+vorherzusehendes
+vorhin
+vorig
+vorige
+vorigem
+vorigen
+voriger
+voriges
+vorinstalliert
+vorinstallierte
+vorinstalliertem
+vorinstallierten
+vorinstallierter
+vorinstalliertes
+vorjährig
+vorjährige
+vorjährigem
+vorjährigen
+vorjähriger
+vorjähriges
+vorkaue
+vorkauen
+vorkauend
+vorkauende
+vorkauendem
+vorkauenden
+vorkauender
+vorkauendes
+vorkaust
+vorkaut
+vorkaute
+vorkauten
+vorkautest
+vorkautet
+vorknöpfe
+vorknöpfen
+vorknöpfend
+vorknöpfende
+vorknöpfendem
+vorknöpfenden
+vorknöpfender
+vorknöpfendes
+vorknöpfst
+vorknöpft
+vorknöpfte
+vorknöpften
+vorknöpftest
+vorknöpftet
+vorkomme
+vorkommen
+vorkommend
+vorkommende
+vorkommendem
+vorkommenden
+vorkommender
+vorkommendes
+vorkommst
+vorkommt
+vorl
+vorlade
+vorladen
+vorladend
+vorladende
+vorladendem
+vorladenden
+vorladender
+vorladendes
+vorladet
+vorlag
+vorlagen
+vorlagst
+vorlagt
+vorlas
+vorlasen
+vorlasest
+vorlasse
+vorlassen
+vorlassend
+vorlassende
+vorlassendem
+vorlassenden
+vorlassender
+vorlassendes
+vorlasst
+vorlast
+vorlaut
+vorlaute
+vorlautem
+vorlauten
+vorlauter
+vorlautes
+vorlege
+vorlegen
+vorlegend
+vorlegende
+vorlegendem
+vorlegenden
+vorlegender
+vorlegendes
+vorlegst
+vorlegt
+vorlegte
+vorlegten
+vorlegtest
+vorlegtet
+vorlese
+vorlesen
+vorlesend
+vorlesende
+vorlesendem
+vorlesenden
+vorlesender
+vorlesendes
+vorlest
+vorletzte
+vorletztem
+vorletzten
+vorletzter
+vorletztes
+vorlieb
+vorliege
+vorliegen
+vorliegend
+vorliegende
+vorliegendem
+vorliegenden
+vorliegender
+vorliegendes
+vorliegst
+vorliegt
+vorlädst
+vorlädt
+vorläufig
+vorläufige
+vorläufigem
+vorläufigen
+vorläufiger
+vorläufiges
+vorlüge
+vorlügen
+vorlügend
+vorlügende
+vorlügendem
+vorlügenden
+vorlügender
+vorlügendes
+vorlügst
+vorlügt
+vorm
+vormache
+vormachen
+vormachend
+vormachende
+vormachendem
+vormachenden
+vormachender
+vormachendes
+vormachst
+vormacht
+vormachte
+vormachten
+vormachtest
+vormachtet
+vormalig
+vormalige
+vormaligem
+vormaligen
+vormaliger
+vormaliges
+vormenschlich
+vormenschliche
+vormenschlichem
+vormenschlichen
+vormenschlicher
+vormenschliches
+vormerke
+vormerken
+vormerkend
+vormerkende
+vormerkendem
+vormerkenden
+vormerkender
+vormerkendes
+vormerkst
+vormerkt
+vormerkte
+vormerkten
+vormerktest
+vormerktet
+vormodern
+vormoderne
+vormodernem
+vormodernen
+vormoderner
+vormodernes
+vormontiere
+vormontieren
+vormontierend
+vormontierende
+vormontierendem
+vormontierenden
+vormontierender
+vormontierendes
+vormontierst
+vormontiert
+vormontierte
+vormontiertem
+vormontierten
+vormontierter
+vormontiertes
+vormontiertest
+vormontiertet
+vormundschaftlich
+vormundschaftliche
+vormundschaftlichem
+vormundschaftlichen
+vormundschaftlicher
+vormundschaftliches
+vorn
+vornahm
+vornahmen
+vornahmst
+vornahmt
+vorne
+vornehm
+vornehme
+vornehmem
+vornehmen
+vornehmer
+vornehmere
+vornehmerem
+vornehmeren
+vornehmerer
+vornehmeres
+vornehmes
+vornehmlich
+vornehmliche
+vornehmlichem
+vornehmlichen
+vornehmlicher
+vornehmliches
+vornehmste
+vornehmstem
+vornehmsten
+vornehmster
+vornehmstes
+vorneweg
+vornherein
+vornimmst
+vornimmt
+vornweg
+vorolympisch
+vorolympische
+vorolympischem
+vorolympischen
+vorolympischer
+vorolympisches
+vorperforiert
+vorperforierte
+vorperforiertem
+vorperforierten
+vorperforierter
+vorperforiertes
+vorprelle
+vorprellen
+vorprellend
+vorprellende
+vorprellendem
+vorprellenden
+vorprellender
+vorprellendes
+vorprellst
+vorprellt
+vorprellte
+vorprellten
+vorprelltest
+vorprelltet
+vorprogrammiert
+vorprogrammierte
+vorprogrammiertem
+vorprogrammierten
+vorprogrammierter
+vorprogrammiertes
+vorrangig
+vorrangige
+vorrangigem
+vorrangigen
+vorrangiger
+vorrangiges
+vorrechne
+vorrechnen
+vorrechnend
+vorrechnende
+vorrechnendem
+vorrechnenden
+vorrechnender
+vorrechnendes
+vorrechnest
+vorrechnet
+vorrechnete
+vorrechneten
+vorrechnetest
+vorrechnetet
+vorrechtlich
+vorrechtliche
+vorrechtlichem
+vorrechtlichen
+vorrechtlicher
+vorrechtliches
+vorrichte
+vorrichten
+vorrichtend
+vorrichtende
+vorrichtendem
+vorrichtenden
+vorrichtender
+vorrichtendes
+vorrichtest
+vorrichtet
+vorrichtete
+vorrichteten
+vorrichtetest
+vorrichtetet
+vorrätig
+vorrätige
+vorrätigem
+vorrätigen
+vorrätiger
+vorrätiges
+vorrücke
+vorrücken
+vorrückend
+vorrückende
+vorrückendem
+vorrückenden
+vorrückender
+vorrückendes
+vorrückst
+vorrückt
+vorrückte
+vorrückten
+vorrücktest
+vorrücktet
+vorsah
+vorsahen
+vorsahst
+vorsaht
+vorschiebst
+vorschiebt
+vorschieße
+vorschießen
+vorschießend
+vorschießende
+vorschießendem
+vorschießenden
+vorschießender
+vorschießendes
+vorschießest
+vorschießt
+vorschlage
+vorschlagen
+vorschlagend
+vorschlagende
+vorschlagendem
+vorschlagenden
+vorschlagender
+vorschlagendes
+vorschlagt
+vorschlug
+vorschlugen
+vorschlugst
+vorschlugt
+vorschlägst
+vorschlägt
+vorschnell
+vorschnelle
+vorschnellem
+vorschnellen
+vorschneller
+vorschnelles
+vorschreibe
+vorschreiben
+vorschreibend
+vorschreibende
+vorschreibendem
+vorschreibenden
+vorschreibender
+vorschreibendes
+vorschreibst
+vorschreibt
+vorschriftsmäßig
+vorschriftsmäßige
+vorschriftsmäßigem
+vorschriftsmäßigen
+vorschriftsmäßiger
+vorschriftsmäßiges
+vorschriftswidrig
+vorschriftswidrige
+vorschriftswidrigem
+vorschriftswidrigen
+vorschriftswidriger
+vorschriftswidriges
+vorschwebe
+vorschweben
+vorschwebend
+vorschwebende
+vorschwebendem
+vorschwebenden
+vorschwebender
+vorschwebendes
+vorschwebst
+vorschwebt
+vorschwebte
+vorschwebtem
+vorschwebten
+vorschwebter
+vorschwebtes
+vorschwebtest
+vorschwebtet
+vorschwindele
+vorschwindeln
+vorschwindelnd
+vorschwindelnde
+vorschwindelndem
+vorschwindelnden
+vorschwindelnder
+vorschwindelndes
+vorschwindelst
+vorschwindelt
+vorschwindelte
+vorschwindelten
+vorschwindeltest
+vorschwindeltet
+vorschwindle
+vorschütze
+vorschützen
+vorschützend
+vorschützende
+vorschützendem
+vorschützenden
+vorschützender
+vorschützendes
+vorschützest
+vorschützt
+vorschützte
+vorschützten
+vorschütztest
+vorschütztet
+vorsehe
+vorsehen
+vorsehend
+vorsehende
+vorsehendem
+vorsehenden
+vorsehender
+vorsehendes
+vorseht
+vorsetze
+vorsetzen
+vorsetzend
+vorsetzende
+vorsetzendem
+vorsetzenden
+vorsetzender
+vorsetzendes
+vorsetzest
+vorsetzt
+vorsetzte
+vorsetzten
+vorsetztest
+vorsetztet
+vorsichtig
+vorsichtige
+vorsichtigem
+vorsichtigen
+vorsichtiger
+vorsichtigere
+vorsichtigerem
+vorsichtigeren
+vorsichtigerer
+vorsichtigeres
+vorsichtiges
+vorsichtigste
+vorsichtigstem
+vorsichtigsten
+vorsichtigster
+vorsichtigstes
+vorsichtshalber
+vorsiehst
+vorsieht
+vorsinge
+vorsingen
+vorsingend
+vorsingende
+vorsingendem
+vorsingenden
+vorsingender
+vorsingendes
+vorsingst
+vorsingt
+vorsintflutlich
+vorsintflutliche
+vorsintflutlichem
+vorsintflutlichen
+vorsintflutlicher
+vorsintflutliches
+vorsitze
+vorsitzen
+vorsitzend
+vorsitzende
+vorsitzendem
+vorsitzenden
+vorsitzender
+vorsitzendes
+vorsitzest
+vorsitzt
+vorsorge
+vorsorgen
+vorsorgend
+vorsorgende
+vorsorgendem
+vorsorgenden
+vorsorgender
+vorsorgendes
+vorsorglich
+vorsorgliche
+vorsorglichem
+vorsorglichen
+vorsorglicher
+vorsorgliches
+vorsorgst
+vorsorgt
+vorsorgte
+vorsorgten
+vorsorgtest
+vorsorgtet
+vorspalte
+vorspalten
+vorspaltend
+vorspaltende
+vorspaltendem
+vorspaltenden
+vorspaltender
+vorspaltendes
+vorspaltest
+vorspaltet
+vorspaltete
+vorspalteten
+vorspaltetest
+vorspaltetet
+vorspanne
+vorspannen
+vorspannend
+vorspannende
+vorspannendem
+vorspannenden
+vorspannender
+vorspannendes
+vorspannst
+vorspannt
+vorspannte
+vorspannten
+vorspanntest
+vorspanntet
+vorspiegele
+vorspiegeln
+vorspiegelnd
+vorspiegelnde
+vorspiegelndem
+vorspiegelnden
+vorspiegelnder
+vorspiegelndes
+vorspiegelst
+vorspiegelt
+vorspiegelte
+vorspiegelten
+vorspiegeltest
+vorspiegeltet
+vorspiegle
+vorspreche
+vorsprechen
+vorsprechend
+vorsprechende
+vorsprechendem
+vorsprechenden
+vorsprechender
+vorsprechendes
+vorsprecht
+vorspringe
+vorspringen
+vorspringend
+vorspringende
+vorspringendem
+vorspringenden
+vorspringender
+vorspringendes
+vorspringst
+vorspringt
+vorstehe
+vorstehen
+vorstehend
+vorstehende
+vorstehendem
+vorstehenden
+vorstehender
+vorstehendes
+vorstehst
+vorsteht
+vorstellbar
+vorstellbare
+vorstellbarem
+vorstellbaren
+vorstellbarer
+vorstellbares
+vorstelle
+vorstellen
+vorstellend
+vorstellende
+vorstellendem
+vorstellenden
+vorstellender
+vorstellendes
+vorstellst
+vorstellt
+vorstellte
+vorstellten
+vorstelltest
+vorstelltet
+vorstoße
+vorstoßen
+vorstoßend
+vorstoßende
+vorstoßendem
+vorstoßenden
+vorstoßender
+vorstoßendes
+vorstoßt
+vorstädtisch
+vorstädtische
+vorstädtischem
+vorstädtischen
+vorstädtischer
+vorstädtisches
+vorstürme
+vorstürmen
+vorstürmend
+vorstürmende
+vorstürmendem
+vorstürmenden
+vorstürmender
+vorstürmendes
+vorstürmst
+vorstürmt
+vorstürmte
+vorstürmten
+vorstürmtest
+vorstürmtet
+vorsätzlich
+vorsätzliche
+vorsätzlichem
+vorsätzlichen
+vorsätzlicher
+vorsätzliches
+vorteilhaft
+vorteilhafte
+vorteilhaftem
+vorteilhaften
+vorteilhafter
+vorteilhaftere
+vorteilhafterem
+vorteilhafteren
+vorteilhafterer
+vorteilhafteres
+vorteilhaftes
+vorteilhafteste
+vorteilhaftestem
+vorteilhaftesten
+vorteilhaftester
+vorteilhaftestes
+vortrage
+vortragen
+vortragend
+vortragende
+vortragendem
+vortragenden
+vortragender
+vortragendes
+vortragt
+vortreffqqlich
+vortreffqqliche
+vortreffqqlichem
+vortreffqqlichen
+vortreffqqlicher
+vortreffqqliches
+vortrete
+vortreten
+vortretend
+vortretende
+vortretendem
+vortretenden
+vortretender
+vortretendes
+vortretet
+vorträgst
+vorträgt
+vortäusche
+vortäuschen
+vortäuschend
+vortäuschende
+vortäuschendem
+vortäuschenden
+vortäuschender
+vortäuschendes
+vortäuschest
+vortäuschst
+vortäuscht
+vortäuschte
+vortäuschten
+vortäuschtest
+vortäuschtet
+vorurteilsfrei
+vorurteilsfreie
+vorurteilsfreiem
+vorurteilsfreien
+vorurteilsfreier
+vorurteilsfreies
+vorurteilslos
+vorurteilslose
+vorurteilslosem
+vorurteilslosen
+vorurteilsloser
+vorurteilsloses
+vorverkauft
+vorverkaufte
+vorverkauftem
+vorverkauften
+vorverkaufter
+vorverkauftes
+vorverlege
+vorverlegen
+vorverlegend
+vorverlegende
+vorverlegendem
+vorverlegenden
+vorverlegender
+vorverlegendes
+vorverlegst
+vorverlegt
+vorverlegte
+vorverlegtem
+vorverlegten
+vorverlegter
+vorverlegtes
+vorverlegtest
+vorverlegtet
+vorverstärke
+vorverstärken
+vorverstärkend
+vorverstärkende
+vorverstärkendem
+vorverstärkenden
+vorverstärkender
+vorverstärkendes
+vorverstärkst
+vorverstärkt
+vorverstärkte
+vorverstärktem
+vorverstärkten
+vorverstärkter
+vorverstärktes
+vorverstärktest
+vorverstärktet
+vorvorgestern
+vorvorig
+vorvorige
+vorvorigem
+vorvorigen
+vorvoriger
+vorvoriges
+vorwarf
+vorwarfen
+vorwarfest
+vorwarfst
+vorwarft
+vorweg
+vorweise
+vorweisen
+vorweisend
+vorweisende
+vorweisendem
+vorweisenden
+vorweisender
+vorweisendes
+vorweisest
+vorweist
+vorwerfe
+vorwerfen
+vorwerfend
+vorwerfende
+vorwerfendem
+vorwerfenden
+vorwerfender
+vorwerfendes
+vorwerft
+vorwiegend
+vorwirfst
+vorwirft
+vorwurfsvoll
+vorwurfsvolle
+vorwurfsvollem
+vorwurfsvollen
+vorwurfsvoller
+vorwurfsvolles
+vorwärme
+vorwärmen
+vorwärmend
+vorwärmende
+vorwärmendem
+vorwärmenden
+vorwärmender
+vorwärmendes
+vorwärmst
+vorwärmt
+vorwärmte
+vorwärmten
+vorwärmtest
+vorwärmtet
+vorwärts
+vorzeichenrichtig
+vorzeichenrichtige
+vorzeichenrichtigem
+vorzeichenrichtigen
+vorzeichenrichtiger
+vorzeichenrichtiges
+vorzeige
+vorzeigen
+vorzeigend
+vorzeigende
+vorzeigendem
+vorzeigenden
+vorzeigender
+vorzeigendes
+vorzeigst
+vorzeigt
+vorzeigte
+vorzeigten
+vorzeigtest
+vorzeigtet
+vorzeiten
+vorzeitig
+vorzeitige
+vorzeitigem
+vorzeitigen
+vorzeitiger
+vorzeitiges
+vorziehe
+vorziehen
+vorziehend
+vorziehende
+vorziehendem
+vorziehenden
+vorziehender
+vorziehendes
+vorziehst
+vorzieht
+vorzubereiten
+vorzubereitend
+vorzubereitende
+vorzubereitendem
+vorzubereitenden
+vorzubereitender
+vorzubereitendes
+vorzubesetzen
+vorzubeten
+vorzubetend
+vorzubetende
+vorzubetendem
+vorzubetenden
+vorzubetender
+vorzubetendes
+vorzubeugen
+vorzubeugend
+vorzubeugende
+vorzubeugendem
+vorzubeugenden
+vorzubeugender
+vorzubeugendes
+vorzubringen
+vorzubringend
+vorzubringende
+vorzubringendem
+vorzubringenden
+vorzubringender
+vorzubringendes
+vorzudringen
+vorzuführen
+vorzuführend
+vorzuführende
+vorzuführendem
+vorzuführenden
+vorzuführender
+vorzuführendes
+vorzugeben
+vorzugebend
+vorzugebende
+vorzugebendem
+vorzugebenden
+vorzugebender
+vorzugebendes
+vorzugehen
+vorzugsweise
+vorzulegen
+vorzulegend
+vorzulegende
+vorzulegendem
+vorzulegenden
+vorzulegender
+vorzulegendes
+vorzumerken
+vorzumerkend
+vorzumerkende
+vorzumerkendem
+vorzumerkenden
+vorzumerkender
+vorzumerkendes
+vorzunehmen
+vorzunehmend
+vorzunehmende
+vorzunehmendem
+vorzunehmenden
+vorzunehmender
+vorzunehmendes
+vorzuschlagen
+vorzuschlagend
+vorzuschlagende
+vorzuschlagendem
+vorzuschlagenden
+vorzuschlagender
+vorzuschlagendes
+vorzuschreiben
+vorzuschreibend
+vorzuschreibende
+vorzuschreibendem
+vorzuschreibenden
+vorzuschreibender
+vorzuschreibendes
+vorzusehen
+vorzusehend
+vorzusehende
+vorzusehendem
+vorzusehenden
+vorzusehender
+vorzusehendes
+vorzusprechen
+vorzusprechend
+vorzusprechende
+vorzusprechendem
+vorzusprechenden
+vorzusprechender
+vorzusprechendes
+vorzustellen
+vorzustellend
+vorzustellende
+vorzustellendem
+vorzustellenden
+vorzustellender
+vorzustellendes
+vorzustoßen
+vorzutragen
+vorzutragend
+vorzutragende
+vorzutragendem
+vorzutragenden
+vorzutragender
+vorzutragendes
+vorzuweisen
+vorzuweisend
+vorzuweisende
+vorzuweisendem
+vorzuweisenden
+vorzuweisender
+vorzuweisendes
+vorzuwerfen
+vorzuwerfend
+vorzuwerfende
+vorzuwerfendem
+vorzuwerfenden
+vorzuwerfender
+vorzuwerfendes
+vorzuziehen
+vorzuziehend
+vorzuziehende
+vorzuziehendem
+vorzuziehenden
+vorzuziehender
+vorzuziehendes
+vorzüglich
+vorzügliche
+vorzüglichem
+vorzüglichen
+vorzüglicher
+vorzügliches
+vorüber
+vorübergehe
+vorübergehen
+vorübergehend
+vorübergehende
+vorübergehendem
+vorübergehenden
+vorübergehender
+vorübergehendes
+vorübergehst
+vorübergeht
+vorüberziehe
+vorüberziehen
+vorüberziehend
+vorüberziehende
+vorüberziehendem
+vorüberziehenden
+vorüberziehender
+vorüberziehendes
+vorüberziehst
+vorüberzieht
+vs
+vulgär
+vulgäre
+vulgärem
+vulgären
+vulgärer
+vulgärere
+vulgärerem
+vulgäreren
+vulgärerer
+vulgäreres
+vulgäres
+vulgärste
+vulgärstem
+vulgärsten
+vulgärster
+vulgärstes
+vulkanisch
+vulkanische
+vulkanischem
+vulkanischen
+vulkanischer
+vulkanisches
+väterlich
+väterliche
+väterlichem
+väterlichen
+väterlicher
+väterlichere
+väterlicherem
+väterlicheren
+väterlicherer
+väterlicheres
+väterlicherseits
+väterliches
+väterlichste
+väterlichstem
+väterlichsten
+väterlichster
+väterlichstes
+vögele
+vögeln
+vögelnd
+vögelnde
+vögelndem
+vögelnden
+vögelnder
+vögelndes
+vögelst
+vögelt
+vögelte
+vögelten
+vögeltest
+vögeltet
+vögle
+völlig
+völlige
+völligem
+völligen
+völliger
+völliges
+waagerecht
+waagerechte
+waagerechtem
+waagerechten
+waagerechter
+waagerechtere
+waagerechterem
+waagerechteren
+waagerechterer
+waagerechteres
+waagerechtes
+waagerechteste
+waagerechtestem
+waagerechtesten
+waagerechtester
+waagerechtestes
+waagrecht
+waagrechte
+waagrechtem
+waagrechten
+waagrechter
+waagrechtere
+waagrechterem
+waagrechteren
+waagrechterer
+waagrechteres
+waagrechtes
+waagrechteste
+waagrechtestem
+waagrechtesten
+waagrechtester
+waagrechtestes
+wabbelig
+wabbelige
+wabbeligem
+wabbeligen
+wabbeliger
+wabbeligere
+wabbeligerem
+wabbeligeren
+wabbeligerer
+wabbeligeres
+wabbeliges
+wabbeligste
+wabbeligstem
+wabbeligsten
+wabbeligster
+wabbeligstes
+wabblig
+wabblige
+wabbligem
+wabbligen
+wabbliger
+wabbligere
+wabbligerem
+wabbligeren
+wabbligerer
+wabbligeres
+wabbliges
+wabbligste
+wabbligstem
+wabbligsten
+wabbligster
+wabbligstes
+wach
+wache
+wachem
+wachen
+wachend
+wachende
+wachendem
+wachenden
+wachender
+wachendes
+wacher
+wachere
+wacherem
+wacheren
+wacherer
+wacheres
+waches
+wachgerufen
+wachgerufene
+wachgerufenem
+wachgerufenen
+wachgerufener
+wachgerufenes
+wachgerüttelt
+wachgerüttelte
+wachgerütteltem
+wachgerüttelten
+wachgerüttelter
+wachgerütteltes
+wachrufe
+wachrufen
+wachrufend
+wachrufende
+wachrufendem
+wachrufenden
+wachrufender
+wachrufendes
+wachrufst
+wachruft
+wachrüttele
+wachrütteln
+wachrüttelnd
+wachrüttelnde
+wachrüttelndem
+wachrüttelnden
+wachrüttelnder
+wachrüttelndes
+wachrüttelst
+wachrüttelt
+wachrüttelte
+wachrüttelten
+wachrütteltest
+wachrütteltet
+wachrüttle
+wachsam
+wachsame
+wachsamem
+wachsamen
+wachsamer
+wachsamere
+wachsamerem
+wachsameren
+wachsamerer
+wachsameres
+wachsames
+wachsamste
+wachsamstem
+wachsamsten
+wachsamster
+wachsamstes
+wachsartig
+wachsartige
+wachsartigem
+wachsartigen
+wachsartiger
+wachsartiges
+wachse
+wachsen
+wachsend
+wachsende
+wachsendem
+wachsenden
+wachsender
+wachsendes
+wachst
+wachste
+wachstem
+wachsten
+wachster
+wachstes
+wacht
+wachte
+wachten
+wachtest
+wachtet
+wachzuhalten
+wachzuhaltend
+wachzuhaltende
+wachzuhaltendem
+wachzuhaltenden
+wachzuhaltender
+wachzuhaltendes
+wackele
+wackelig
+wackelige
+wackeligem
+wackeligen
+wackeliger
+wackeligere
+wackeligerem
+wackeligeren
+wackeligerer
+wackeligeres
+wackeliges
+wackeligste
+wackeligstem
+wackeligsten
+wackeligster
+wackeligstes
+wackeln
+wackelnd
+wackelnde
+wackelndem
+wackelnden
+wackelnder
+wackelndes
+wackelst
+wackelt
+wackelte
+wackelten
+wackeltest
+wackeltet
+wacker
+wackere
+wackerem
+wackeren
+wackerer
+wackerere
+wackererem
+wackereren
+wackererer
+wackereres
+wackeres
+wackerste
+wackerstem
+wackersten
+wackerster
+wackerstes
+wackle
+wacklig
+wacklige
+wackligem
+wackligen
+wackliger
+wackligere
+wackligerem
+wackligeren
+wackligerer
+wackligeres
+wackliges
+wackligste
+wackligstem
+wackligsten
+wackligster
+wackligstes
+waffenfähig
+waffenfähige
+waffenfähigem
+waffenfähigen
+waffenfähiger
+waffenfähigere
+waffenfähigerem
+waffenfähigeren
+waffenfähigerer
+waffenfähigeres
+waffenfähiges
+waffenfähigste
+waffenfähigstem
+waffenfähigsten
+waffenfähigster
+waffenfähigstes
+waffenlos
+waffenlose
+waffenlosem
+waffenlosen
+waffenloser
+waffenlosere
+waffenloserem
+waffenloseren
+waffenloserer
+waffenloseres
+waffenloses
+waffenloseste
+waffenlosestem
+waffenlosesten
+waffenlosester
+waffenlosestes
+waffne
+waffnen
+waffnend
+waffnende
+waffnendem
+waffnenden
+waffnender
+waffnendes
+waffnest
+waffnet
+waffnete
+waffneten
+waffnetest
+waffnetet
+wage
+wagemutig
+wagemutige
+wagemutigem
+wagemutigen
+wagemutiger
+wagemutigere
+wagemutigerem
+wagemutigeren
+wagemutigerer
+wagemutigeres
+wagemutiges
+wagemutigste
+wagemutigstem
+wagemutigsten
+wagemutigster
+wagemutigstes
+wagen
+wagend
+wagende
+wagendem
+wagenden
+wagender
+wagendes
+waghalsig
+waghalsige
+waghalsigem
+waghalsigen
+waghalsiger
+waghalsigere
+waghalsigerem
+waghalsigeren
+waghalsigerer
+waghalsigeres
+waghalsiges
+waghalsigste
+waghalsigstem
+waghalsigsten
+waghalsigster
+waghalsigstes
+wagst
+wagt
+wagte
+wagten
+wagtest
+wagtet
+wahlberechtigt
+wahlberechtigte
+wahlberechtigtem
+wahlberechtigten
+wahlberechtigter
+wahlberechtigtes
+wahlfrei
+wahlfreie
+wahlfreiem
+wahlfreien
+wahlfreier
+wahlfreiere
+wahlfreierem
+wahlfreieren
+wahlfreierer
+wahlfreieres
+wahlfreies
+wahlfreiste
+wahlfreistem
+wahlfreisten
+wahlfreister
+wahlfreistes
+wahlfähig
+wahlfähige
+wahlfähigem
+wahlfähigen
+wahlfähiger
+wahlfähigere
+wahlfähigerem
+wahlfähigeren
+wahlfähigerer
+wahlfähigeres
+wahlfähiges
+wahlfähigste
+wahlfähigstem
+wahlfähigsten
+wahlfähigster
+wahlfähigstes
+wahllos
+wahllose
+wahllosem
+wahllosen
+wahlloser
+wahllosere
+wahlloserem
+wahlloseren
+wahlloserer
+wahlloseres
+wahlloses
+wahlloseste
+wahllosestem
+wahllosesten
+wahllosester
+wahllosestes
+wahlweise
+wahnsinnig
+wahnsinnige
+wahnsinnigem
+wahnsinnigen
+wahnsinniger
+wahnsinnigere
+wahnsinnigerem
+wahnsinnigeren
+wahnsinnigerer
+wahnsinnigeres
+wahnsinniges
+wahnsinnigste
+wahnsinnigstem
+wahnsinnigsten
+wahnsinnigster
+wahnsinnigstes
+wahnwitzig
+wahnwitzige
+wahnwitzigem
+wahnwitzigen
+wahnwitziger
+wahnwitzigere
+wahnwitzigerem
+wahnwitzigeren
+wahnwitzigerer
+wahnwitzigeres
+wahnwitziges
+wahnwitzigste
+wahnwitzigstem
+wahnwitzigsten
+wahnwitzigster
+wahnwitzigstes
+wahr
+wahre
+wahrem
+wahren
+wahrer
+wahrere
+wahrerem
+wahreren
+wahrerer
+wahreres
+wahres
+wahrgehabt
+wahrgehabte
+wahrgehabtem
+wahrgehabten
+wahrgehabter
+wahrgehabtes
+wahrgenommen
+wahrgenommene
+wahrgenommenem
+wahrgenommenen
+wahrgenommener
+wahrgenommenes
+wahrgesagt
+wahrgesagte
+wahrgesagtem
+wahrgesagten
+wahrgesagter
+wahrgesagtes
+wahrhaben
+wahrhabend
+wahrhabende
+wahrhabendem
+wahrhabenden
+wahrhabender
+wahrhabendes
+wahrhaft
+wahrhafte
+wahrhaftem
+wahrhaften
+wahrhafter
+wahrhaftere
+wahrhafterem
+wahrhafteren
+wahrhafterer
+wahrhafteres
+wahrhaftes
+wahrhafteste
+wahrhaftestem
+wahrhaftesten
+wahrhaftester
+wahrhaftestes
+wahrhaftig
+wahrhaftige
+wahrhaftigem
+wahrhaftigen
+wahrhaftiger
+wahrhaftigere
+wahrhaftigerem
+wahrhaftigeren
+wahrhaftigerer
+wahrhaftigeres
+wahrhaftiges
+wahrhaftigste
+wahrhaftigstem
+wahrhaftigsten
+wahrhaftigster
+wahrhaftigstes
+wahrheitsgemäß
+wahrheitsgemäße
+wahrheitsgemäßem
+wahrheitsgemäßen
+wahrheitsgemäßer
+wahrheitsgemäßere
+wahrheitsgemäßerem
+wahrheitsgemäßeren
+wahrheitsgemäßerer
+wahrheitsgemäßeres
+wahrheitsgemäßes
+wahrheitsgemäßeste
+wahrheitsgemäßestem
+wahrheitsgemäßesten
+wahrheitsgemäßester
+wahrheitsgemäßestes
+wahrheitsgetreu
+wahrheitsgetreue
+wahrheitsgetreuem
+wahrheitsgetreuen
+wahrheitsgetreuer
+wahrheitsgetreuere
+wahrheitsgetreuerem
+wahrheitsgetreueren
+wahrheitsgetreuerer
+wahrheitsgetreueres
+wahrheitsgetreues
+wahrheitsgetreueste
+wahrheitsgetreuestem
+wahrheitsgetreuesten
+wahrheitsgetreuester
+wahrheitsgetreuestes
+wahrheitsgetreuste
+wahrheitsgetreustem
+wahrheitsgetreusten
+wahrheitsgetreuster
+wahrheitsgetreustes
+wahrheitsliebend
+wahrheitsliebende
+wahrheitsliebendem
+wahrheitsliebenden
+wahrheitsliebender
+wahrheitsliebendere
+wahrheitsliebenderem
+wahrheitsliebenderen
+wahrheitsliebenderer
+wahrheitsliebenderes
+wahrheitsliebendes
+wahrheitsliebendste
+wahrheitsliebendstem
+wahrheitsliebendsten
+wahrheitsliebendster
+wahrheitsliebendstes
+wahrheitswidrig
+wahrheitswidrige
+wahrheitswidrigem
+wahrheitswidrigen
+wahrheitswidriger
+wahrheitswidrigere
+wahrheitswidrigerem
+wahrheitswidrigeren
+wahrheitswidrigerer
+wahrheitswidrigeres
+wahrheitswidriges
+wahrheitswidrigste
+wahrheitswidrigstem
+wahrheitswidrigsten
+wahrheitswidrigster
+wahrheitswidrigstes
+wahrlich
+wahrliche
+wahrlichem
+wahrlichen
+wahrlicher
+wahrliches
+wahrnehmbar
+wahrnehmbare
+wahrnehmbarem
+wahrnehmbaren
+wahrnehmbarer
+wahrnehmbarere
+wahrnehmbarerem
+wahrnehmbareren
+wahrnehmbarerer
+wahrnehmbareres
+wahrnehmbares
+wahrnehmbarste
+wahrnehmbarstem
+wahrnehmbarsten
+wahrnehmbarster
+wahrnehmbarstes
+wahrnehme
+wahrnehmen
+wahrnehmend
+wahrnehmende
+wahrnehmendem
+wahrnehmenden
+wahrnehmender
+wahrnehmendes
+wahrnehmt
+wahrnimmst
+wahrnimmt
+wahrsage
+wahrsagen
+wahrsagend
+wahrsagende
+wahrsagendem
+wahrsagenden
+wahrsagender
+wahrsagendes
+wahrsagst
+wahrsagt
+wahrsagte
+wahrsagten
+wahrsagtest
+wahrsagtet
+wahrscheinlich
+wahrscheinliche
+wahrscheinlichem
+wahrscheinlichen
+wahrscheinlicher
+wahrscheinlichere
+wahrscheinlicherem
+wahrscheinlicheren
+wahrscheinlicherer
+wahrscheinlicheres
+wahrscheinliches
+wahrscheinlichkeitstheoretisch
+wahrscheinlichkeitstheoretische
+wahrscheinlichkeitstheoretischem
+wahrscheinlichkeitstheoretischen
+wahrscheinlichkeitstheoretischer
+wahrscheinlichkeitstheoretisches
+wahrscheinlichste
+wahrscheinlichstem
+wahrscheinlichsten
+wahrscheinlichster
+wahrscheinlichstes
+wahrste
+wahrstem
+wahrsten
+wahrster
+wahrstes
+wahrzunehmen
+wahrzunehmend
+wahrzunehmende
+wahrzunehmendem
+wahrzunehmenden
+wahrzunehmender
+wahrzunehmendes
+waldarm
+waldarme
+waldarmem
+waldarmen
+waldarmer
+waldarmes
+waldig
+waldige
+waldigem
+waldigen
+waldiger
+waldigere
+waldigerem
+waldigeren
+waldigerer
+waldigeres
+waldiges
+waldigste
+waldigstem
+waldigsten
+waldigster
+waldigstes
+waldreich
+waldreiche
+waldreichem
+waldreichen
+waldreicher
+waldreichere
+waldreicherem
+waldreicheren
+waldreicherer
+waldreicheres
+waldreiches
+waldreichste
+waldreichstem
+waldreichsten
+waldreichster
+waldreichstes
+waldärmer
+waldärmere
+waldärmerem
+waldärmeren
+waldärmerer
+waldärmeres
+waldärmste
+waldärmstem
+waldärmsten
+waldärmster
+waldärmstes
+walle
+wallen
+wallend
+wallende
+wallendem
+wallenden
+wallender
+wallendes
+wallfahre
+wallfahren
+wallfahrend
+wallfahrende
+wallfahrendem
+wallfahrenden
+wallfahrender
+wallfahrendes
+wallfahrt
+wallgefahren
+wallgefahrene
+wallgefahrenem
+wallgefahrenen
+wallgefahrener
+wallgefahrenes
+wallonisch
+wallonische
+wallonischem
+wallonischen
+wallonischer
+wallonisches
+wallst
+wallt
+wallte
+wallten
+walltest
+walltet
+walte
+walten
+waltend
+waltende
+waltendem
+waltenden
+waltender
+waltendes
+waltest
+waltet
+waltete
+walteten
+waltetest
+waltetet
+walze
+walzen
+walzend
+walzende
+walzendem
+walzenden
+walzender
+walzendes
+walzest
+walzt
+walzte
+walzten
+walztest
+walztet
+wand
+wandelbar
+wandelbare
+wandelbarem
+wandelbaren
+wandelbarer
+wandelbarere
+wandelbarerem
+wandelbareren
+wandelbarerer
+wandelbareres
+wandelbares
+wandelbarste
+wandelbarstem
+wandelbarsten
+wandelbarster
+wandelbarstes
+wandele
+wandeln
+wandelnd
+wandelnde
+wandelndem
+wandelnden
+wandelnder
+wandelndes
+wandelst
+wandelt
+wandelte
+wandelten
+wandeltest
+wandeltet
+wanden
+wandere
+wandern
+wandernd
+wandernde
+wanderndem
+wandernden
+wandernder
+wanderndes
+wanderst
+wandert
+wanderte
+wanderten
+wandertest
+wandertet
+wandest
+wandet
+wandle
+wandre
+wandst
+wandte
+wandten
+wandtest
+wandtet
+wanke
+wankelmütig
+wankelmütige
+wankelmütigem
+wankelmütigen
+wankelmütiger
+wankelmütigere
+wankelmütigerem
+wankelmütigeren
+wankelmütigerer
+wankelmütigeres
+wankelmütiges
+wankelmütigste
+wankelmütigstem
+wankelmütigsten
+wankelmütigster
+wankelmütigstes
+wanken
+wankend
+wankende
+wankendem
+wankenden
+wankender
+wankendes
+wankst
+wankt
+wankte
+wankten
+wanktest
+wanktet
+wann
+wappne
+wappnen
+wappnend
+wappnende
+wappnendem
+wappnenden
+wappnender
+wappnendes
+wappnest
+wappnet
+wappnete
+wappneten
+wappnetest
+wappnetet
+war
+warb
+warben
+warbst
+warbt
+ward
+waren
+warf
+warfen
+warfest
+warfst
+warft
+warm
+warme
+warmem
+warmen
+warmer
+warmes
+warmgehalten
+warmgehaltene
+warmgehaltenem
+warmgehaltenen
+warmgehaltener
+warmgehaltenes
+warmhalte
+warmhalten
+warmhaltend
+warmhaltende
+warmhaltendem
+warmhaltenden
+warmhaltender
+warmhaltendes
+warmhaltet
+warmherzig
+warmherzige
+warmherzigem
+warmherzigen
+warmherziger
+warmherzigere
+warmherzigerem
+warmherzigeren
+warmherzigerer
+warmherzigeres
+warmherziges
+warmherzigste
+warmherzigstem
+warmherzigsten
+warmherzigster
+warmherzigstes
+warne
+warnen
+warnend
+warnende
+warnendem
+warnenden
+warnender
+warnendes
+warnst
+warnt
+warnte
+warnten
+warntest
+warntet
+warst
+wart
+wartbar
+wartbare
+wartbarem
+wartbaren
+wartbarer
+wartbares
+warte
+warten
+wartend
+wartende
+wartendem
+wartenden
+wartender
+wartendes
+wartest
+wartet
+wartete
+warteten
+wartetest
+wartetet
+wartungsfrei
+wartungsfreie
+wartungsfreiem
+wartungsfreien
+wartungsfreier
+wartungsfreies
+wartungsfreundlich
+wartungsfreundliche
+wartungsfreundlichem
+wartungsfreundlichen
+wartungsfreundlicher
+wartungsfreundliches
+warum
+warzig
+warzige
+warzigem
+warzigen
+warziger
+warziges
+was
+waschbar
+waschbare
+waschbarem
+waschbaren
+waschbarer
+waschbares
+wasche
+waschecht
+waschechte
+waschechtem
+waschechten
+waschechter
+waschechtes
+waschen
+waschend
+waschende
+waschendem
+waschenden
+waschender
+waschendes
+wascht
+wasserdicht
+wasserdichte
+wasserdichtem
+wasserdichten
+wasserdichter
+wasserdichtes
+wassere
+wasserlöslich
+wasserlösliche
+wasserlöslichem
+wasserlöslichen
+wasserlöslicher
+wasserlöslichere
+wasserlöslicherem
+wasserlöslicheren
+wasserlöslicherer
+wasserlöslicheres
+wasserlösliches
+wasserlöslichste
+wasserlöslichstem
+wasserlöslichsten
+wasserlöslichster
+wasserlöslichstes
+wassern
+wassernd
+wassernde
+wasserndem
+wassernden
+wassernder
+wasserndes
+wasserst
+wassert
+wasserte
+wasserten
+wassertest
+wassertet
+wassre
+wate
+waten
+watend
+watende
+watendem
+watenden
+watender
+watendes
+watest
+watet
+watete
+wateten
+watetest
+watetet
+watsch
+watsche
+watschele
+watscheln
+watschelnd
+watschelnde
+watschelndem
+watschelnden
+watschelnder
+watschelndes
+watschelst
+watschelt
+watschelte
+watschelten
+watscheltest
+watscheltet
+watschen
+watschest
+watschle
+watschst
+watscht
+watschte
+watschten
+watschtest
+watschtet
+wattiere
+wattieren
+wattierend
+wattierende
+wattierendem
+wattierenden
+wattierender
+wattierendes
+wattierst
+wattiert
+wattierte
+wattiertem
+wattierten
+wattierter
+wattiertes
+wattiertest
+wattiertet
+webe
+weben
+webend
+webende
+webendem
+webenden
+webender
+webendes
+webst
+webt
+webte
+webten
+webtest
+webtet
+wechsele
+wechselhaft
+wechselhafte
+wechselhaftem
+wechselhaften
+wechselhafter
+wechselhaftere
+wechselhafterem
+wechselhafteren
+wechselhafterer
+wechselhafteres
+wechselhaftes
+wechselhafteste
+wechselhaftestem
+wechselhaftesten
+wechselhaftester
+wechselhaftestes
+wechseln
+wechselnd
+wechselnde
+wechselndem
+wechselnden
+wechselnder
+wechselndes
+wechselseitig
+wechselseitige
+wechselseitigem
+wechselseitigen
+wechselseitiger
+wechselseitiges
+wechselst
+wechselt
+wechselte
+wechselten
+wechseltest
+wechseltet
+wechselvoll
+wechselvolle
+wechselvollem
+wechselvollen
+wechselvoller
+wechselvollere
+wechselvollerem
+wechselvolleren
+wechselvollerer
+wechselvolleres
+wechselvolles
+wechselvollste
+wechselvollstem
+wechselvollsten
+wechselvollster
+wechselvollstes
+wechselweise
+wechselweisem
+wechselweisen
+wechselweiser
+wechselweises
+wechselwirke
+wechselwirken
+wechselwirkend
+wechselwirkende
+wechselwirkendem
+wechselwirkenden
+wechselwirkender
+wechselwirkendes
+wechselwirkst
+wechselwirkt
+wechselwirkte
+wechselwirkten
+wechselwirktest
+wechselwirktet
+wechsle
+wecke
+wecken
+weckend
+weckende
+weckendem
+weckenden
+weckender
+weckendes
+weckst
+weckt
+weckte
+weckten
+wecktest
+wecktet
+wedele
+wedeln
+wedelnd
+wedelnde
+wedelndem
+wedelnden
+wedelnder
+wedelndes
+wedelst
+wedelt
+wedelte
+wedelten
+wedeltest
+wedeltet
+weder
+wedle
+weg
+wegbeförderte
+wegbekommen
+wegbekommene
+wegbekommenem
+wegbekommenen
+wegbekommener
+wegbekommenes
+wegbereiten
+wegbereitend
+wegbereitende
+wegbereitendem
+wegbereitenden
+wegbereitender
+wegbereitendes
+wegbewege
+wegbewegen
+wegbewegend
+wegbewegende
+wegbewegendem
+wegbewegenden
+wegbewegender
+wegbewegendes
+wegbewegst
+wegbewegt
+wegbewegte
+wegbewegten
+wegbewegtest
+wegbewegtet
+wegblase
+wegblasen
+wegblasend
+wegblasende
+wegblasendem
+wegblasenden
+wegblasender
+wegblasendes
+wegblasest
+wegblast
+wegbleibe
+wegbleiben
+wegbleibend
+wegbleibende
+wegbleibendem
+wegbleibenden
+wegbleibender
+wegbleibendes
+wegbleibst
+wegbleibt
+wegblicke
+wegblicken
+wegblickend
+wegblickende
+wegblickendem
+wegblickenden
+wegblickender
+wegblickendes
+wegblickst
+wegblickt
+wegblickte
+wegblickten
+wegblicktest
+wegblicktet
+wegbringe
+wegbringen
+wegbringend
+wegbringende
+wegbringendem
+wegbringenden
+wegbringender
+wegbringendes
+wegbringst
+wegbringt
+wegdiskutiere
+wegdiskutieren
+wegdiskutierend
+wegdiskutierende
+wegdiskutierendem
+wegdiskutierenden
+wegdiskutierender
+wegdiskutierendes
+wegdiskutierst
+wegdiskutiert
+wegdiskutierte
+wegdiskutiertem
+wegdiskutierten
+wegdiskutierter
+wegdiskutiertes
+wegdiskutiertest
+wegdiskutiertet
+wegen
+wegfahre
+wegfahren
+wegfahrend
+wegfahrende
+wegfahrendem
+wegfahrenden
+wegfahrender
+wegfahrendes
+wegfahrt
+wegfalle
+wegfallen
+wegfallend
+wegfallende
+wegfallendem
+wegfallenden
+wegfallender
+wegfallendes
+wegfallt
+wegfege
+wegfegen
+wegfegend
+wegfegende
+wegfegendem
+wegfegenden
+wegfegender
+wegfegendes
+wegfegst
+wegfegt
+wegfegte
+wegfegten
+wegfegtest
+wegfegtet
+wegfiel
+wegfielen
+wegfielst
+wegfielt
+wegfährst
+wegfährt
+wegföhne
+wegföhnen
+wegföhnend
+wegföhnende
+wegföhnendem
+wegföhnenden
+wegföhnender
+wegföhnendes
+wegföhnst
+wegföhnt
+wegföhnte
+wegföhnten
+wegföhntest
+wegföhntet
+wegführe
+wegführen
+wegführend
+wegführende
+wegführendem
+wegführenden
+wegführender
+wegführendes
+wegführst
+wegführt
+wegführte
+wegführten
+wegführtest
+wegführtet
+weggebe
+weggeben
+weggebend
+weggebende
+weggebendem
+weggebenden
+weggebender
+weggebendes
+weggeblasen
+weggeblasene
+weggeblasenem
+weggeblasenen
+weggeblasener
+weggeblasenes
+weggeblickt
+weggeblieben
+weggebliebene
+weggebliebenem
+weggebliebenen
+weggebliebener
+weggebliebenes
+weggebracht
+weggebrachte
+weggebrachtem
+weggebrachten
+weggebrachter
+weggebrachtes
+weggebt
+weggefahren
+weggefahrene
+weggefahrenem
+weggefahrenen
+weggefahrener
+weggefahrenes
+weggefallen
+weggefallene
+weggefallenem
+weggefallenen
+weggefallener
+weggefallenes
+weggefangen
+weggefangene
+weggefangenem
+weggefangenen
+weggefangener
+weggefangenes
+weggefegt
+weggefegte
+weggefegtem
+weggefegten
+weggefegter
+weggefegtes
+weggefischt
+weggefischte
+weggefischtem
+weggefischten
+weggefischter
+weggefischtes
+weggeführt
+weggeführte
+weggeführtem
+weggeführten
+weggeführter
+weggeführtes
+weggegangen
+weggegangene
+weggegangenem
+weggegangenen
+weggegangener
+weggegangenes
+weggegeben
+weggegebene
+weggegebenem
+weggegebenen
+weggegebener
+weggegebenes
+weggehe
+weggehen
+weggehend
+weggehende
+weggehendem
+weggehenden
+weggehender
+weggehendes
+weggeholt
+weggeholte
+weggeholtem
+weggeholten
+weggeholter
+weggeholtes
+weggehst
+weggeht
+weggejagt
+weggejagte
+weggejagtem
+weggejagten
+weggejagter
+weggejagtes
+weggekommen
+weggekommene
+weggekommenem
+weggekommenen
+weggekommener
+weggekommenes
+weggelassen
+weggelassene
+weggelassenem
+weggelassenen
+weggelassener
+weggelassenes
+weggelaufen
+weggelaufene
+weggelaufenem
+weggelaufenen
+weggelaufener
+weggelaufenes
+weggelegt
+weggelegte
+weggelegtem
+weggelegten
+weggelegter
+weggelegtes
+weggemacht
+weggemachte
+weggemachtem
+weggemachten
+weggemachter
+weggemachtes
+weggemusst
+weggenommen
+weggenommene
+weggenommenem
+weggenommenen
+weggenommener
+weggenommenes
+weggepackt
+weggepackte
+weggepacktem
+weggepackten
+weggepackter
+weggepacktes
+weggeputzt
+weggeputzte
+weggeputztem
+weggeputzten
+weggeputzter
+weggeputztes
+weggerafft
+weggeraffte
+weggerafftem
+weggerafften
+weggeraffter
+weggerafftes
+weggeredet
+weggereist
+weggereiste
+weggereistem
+weggereisten
+weggereister
+weggereistes
+weggerissen
+weggerissene
+weggerissenem
+weggerissenen
+weggerissener
+weggerissenes
+weggeräumt
+weggeräumte
+weggeräumtem
+weggeräumten
+weggeräumter
+weggeräumtes
+weggerückt
+weggerückte
+weggerücktem
+weggerückten
+weggerückter
+weggerücktes
+weggeschafft
+weggeschaffte
+weggeschafftem
+weggeschafften
+weggeschaffter
+weggeschafftes
+weggeschaltet
+weggeschert
+weggeschickt
+weggeschickte
+weggeschicktem
+weggeschickten
+weggeschickter
+weggeschicktes
+weggeschleppt
+weggeschleppte
+weggeschlepptem
+weggeschleppten
+weggeschleppter
+weggeschlepptes
+weggeschlichen
+weggeschlichene
+weggeschlichenem
+weggeschlichenen
+weggeschlichener
+weggeschlichenes
+weggeschlossen
+weggeschlossene
+weggeschlossenem
+weggeschlossenen
+weggeschlossener
+weggeschlossenes
+weggeschmissen
+weggeschmissene
+weggeschmissenem
+weggeschmissenen
+weggeschmissener
+weggeschmissenes
+weggeschnappt
+weggeschnappte
+weggeschnapptem
+weggeschnappten
+weggeschnappter
+weggeschnapptes
+weggesehen
+weggesetzt
+weggesetzte
+weggesetztem
+weggesetzten
+weggesetzter
+weggesetztes
+weggestorben
+weggestorbene
+weggestorbenem
+weggestorbenen
+weggestorbener
+weggestorbenes
+weggestrichen
+weggestrichene
+weggestrichenem
+weggestrichenen
+weggestrichener
+weggestrichenes
+weggetan
+weggetane
+weggetanem
+weggetanen
+weggetaner
+weggetanes
+weggetragen
+weggetragene
+weggetragenem
+weggetragenen
+weggetragener
+weggetragenes
+weggetreten
+weggetretene
+weggetretenem
+weggetretenen
+weggetretener
+weggetretenes
+weggewendet
+weggewendete
+weggewendetem
+weggewendeten
+weggewendeter
+weggewendetes
+weggewischt
+weggewischte
+weggewischtem
+weggewischten
+weggewischter
+weggewischtes
+weggeworfen
+weggeworfene
+weggeworfenem
+weggeworfenen
+weggeworfener
+weggeworfenes
+weggezaubert
+weggezauberte
+weggezaubertem
+weggezauberten
+weggezauberter
+weggezaubertes
+weggezogen
+weggezogene
+weggezogenem
+weggezogenen
+weggezogener
+weggezogenes
+wegging
+weggingen
+weggingst
+weggingt
+weglassbar
+weglassbare
+weglassbarem
+weglassbaren
+weglassbarer
+weglassbares
+weglasse
+weglassen
+weglassend
+weglassende
+weglassendem
+weglassenden
+weglassender
+weglassendes
+weglasst
+weglaufe
+weglaufen
+weglaufend
+weglaufende
+weglaufendem
+weglaufenden
+weglaufender
+weglaufendes
+weglauft
+weglege
+weglegen
+weglegend
+weglegende
+weglegendem
+weglegenden
+weglegender
+weglegendes
+weglegst
+weglegt
+weglegte
+weglegten
+weglegtest
+weglegtet
+wegmache
+wegmachen
+wegmachend
+wegmachende
+wegmachendem
+wegmachenden
+wegmachender
+wegmachendes
+wegmachst
+wegmacht
+wegmachte
+wegmachten
+wegmachtest
+wegmachtet
+wegmüssen
+wegmüssend
+wegmüssende
+wegmüssendem
+wegmüssenden
+wegmüssender
+wegmüssendes
+wegnehme
+wegnehmen
+wegnehmend
+wegnehmende
+wegnehmendem
+wegnehmenden
+wegnehmender
+wegnehmendes
+wegnehmt
+wegschmeiße
+wegschmeißen
+wegschmeißend
+wegschmeißende
+wegschmeißendem
+wegschmeißenden
+wegschmeißender
+wegschmeißendes
+wegschmeißest
+wegschmeißt
+wegsehe
+wegsehen
+wegsehend
+wegsehende
+wegsehendem
+wegsehenden
+wegsehender
+wegsehendes
+wegseht
+wegtue
+wegtuend
+wegtuende
+wegtuendem
+wegtuenden
+wegtuender
+wegtuendes
+wegtun
+wegtust
+wegtut
+wegweisend
+wegweisende
+wegweisendem
+wegweisenden
+wegweisender
+wegweisendes
+wegwerfe
+wegwerfen
+wegwerfend
+wegwerfende
+wegwerfendem
+wegwerfenden
+wegwerfender
+wegwerfendes
+wegwerft
+wegzudenken
+wegzudenkend
+wegzudenkende
+wegzudenkendem
+wegzudenkenden
+wegzudenkender
+wegzudenkendes
+wegzudiskutieren
+wegzudiskutierend
+wegzudiskutierende
+wegzudiskutierendem
+wegzudiskutierenden
+wegzudiskutierender
+wegzudiskutierendes
+wegzufahren
+wegzugehen
+wegzulassen
+wegzulassend
+wegzulassende
+wegzulassendem
+wegzulassenden
+wegzulassender
+wegzulassendes
+wegzunehmen
+wegzunehmend
+wegzunehmende
+wegzunehmendem
+wegzunehmenden
+wegzunehmender
+wegzunehmendes
+wegzuziehen
+weh
+wehe
+wehen
+wehend
+wehende
+wehendem
+wehenden
+wehender
+wehendes
+wehklage
+wehklagen
+wehklagend
+wehklagende
+wehklagendem
+wehklagenden
+wehklagender
+wehklagendes
+wehklagst
+wehklagt
+wehklagte
+wehklagten
+wehklagtest
+wehklagtet
+wehleidig
+wehleidige
+wehleidigem
+wehleidigen
+wehleidiger
+wehleidigere
+wehleidigerem
+wehleidigeren
+wehleidigerer
+wehleidigeres
+wehleidiges
+wehleidigste
+wehleidigstem
+wehleidigsten
+wehleidigster
+wehleidigstes
+wehmütig
+wehmütige
+wehmütigem
+wehmütigen
+wehmütiger
+wehmütigere
+wehmütigerem
+wehmütigeren
+wehmütigerer
+wehmütigeres
+wehmütiges
+wehmütigste
+wehmütigstem
+wehmütigsten
+wehmütigster
+wehmütigstes
+wehre
+wehren
+wehrend
+wehrende
+wehrendem
+wehrenden
+wehrender
+wehrendes
+wehrfähig
+wehrfähige
+wehrfähigem
+wehrfähigen
+wehrfähiger
+wehrfähigere
+wehrfähigerem
+wehrfähigeren
+wehrfähigerer
+wehrfähigeres
+wehrfähiges
+wehrfähigste
+wehrfähigstem
+wehrfähigsten
+wehrfähigster
+wehrfähigstes
+wehrlos
+wehrlose
+wehrlosem
+wehrlosen
+wehrloser
+wehrlosere
+wehrloserem
+wehrloseren
+wehrloserer
+wehrloseres
+wehrloses
+wehrloseste
+wehrlosestem
+wehrlosesten
+wehrlosester
+wehrlosestes
+wehrpflichtig
+wehrpflichtige
+wehrpflichtigem
+wehrpflichtigen
+wehrpflichtiger
+wehrpflichtiges
+wehrst
+wehrt
+wehrte
+wehrten
+wehrtest
+wehrtet
+wehst
+weht
+wehte
+wehten
+wehtest
+wehtet
+wehtue
+wehtun
+wehtust
+wehtut
+weibchenhaft
+weibchenhafte
+weibchenhaftem
+weibchenhaften
+weibchenhafter
+weibchenhaftes
+weiblich
+weibliche
+weiblichem
+weiblichen
+weiblicher
+weiblichere
+weiblicherem
+weiblicheren
+weiblicherer
+weiblicheres
+weibliches
+weiblichste
+weiblichstem
+weiblichsten
+weiblichster
+weiblichstes
+weich
+weiche
+weichem
+weichen
+weichend
+weichende
+weichendem
+weichenden
+weichender
+weichendes
+weicher
+weichere
+weicherem
+weicheren
+weicherer
+weicheres
+weiches
+weichherzig
+weichherzige
+weichherzigem
+weichherzigen
+weichherziger
+weichherzigere
+weichherzigerem
+weichherzigeren
+weichherzigerer
+weichherzigeres
+weichherziges
+weichherzigste
+weichherzigstem
+weichherzigsten
+weichherzigster
+weichherzigstes
+weichlich
+weichliche
+weichlichem
+weichlichen
+weichlicher
+weichlichere
+weichlicherem
+weichlicheren
+weichlicherer
+weichlicheres
+weichliches
+weichlichste
+weichlichstem
+weichlichsten
+weichlichster
+weichlichstes
+weichlöte
+weichlöten
+weichlötend
+weichlötende
+weichlötendem
+weichlötenden
+weichlötender
+weichlötendes
+weichlötest
+weichlötet
+weichlötete
+weichlöteten
+weichlötetest
+weichlötetet
+weichmache
+weichmachen
+weichmachend
+weichmachende
+weichmachendem
+weichmachenden
+weichmachender
+weichmachendes
+weichmachst
+weichmacht
+weichmachte
+weichmachten
+weichmachtest
+weichmachtet
+weichst
+weichste
+weichstem
+weichsten
+weichster
+weichstes
+weicht
+weichte
+weichten
+weichtest
+weichtet
+weide
+weiden
+weidend
+weidende
+weidendem
+weidenden
+weidender
+weidendes
+weidest
+weidet
+weidete
+weideten
+weidetest
+weidetet
+weidgerecht
+weidgerechte
+weidgerechtem
+weidgerechten
+weidgerechter
+weidgerechtere
+weidgerechterem
+weidgerechteren
+weidgerechterer
+weidgerechteres
+weidgerechtes
+weidgerechteste
+weidgerechtestem
+weidgerechtesten
+weidgerechtester
+weidgerechtestes
+weidlich
+weidliche
+weidlichem
+weidlichen
+weidlicher
+weidliches
+weidmännisch
+weidmännische
+weidmännischem
+weidmännischen
+weidmännischer
+weidmännisches
+weigere
+weigern
+weigernd
+weigernde
+weigerndem
+weigernden
+weigernder
+weigerndes
+weigerst
+weigert
+weigerte
+weigerten
+weigertest
+weigertet
+weigre
+weihevoll
+weihevolle
+weihevollem
+weihevollen
+weihevoller
+weihevolles
+weihnachtlich
+weihnachtliche
+weihnachtlichem
+weihnachtlichen
+weihnachtlicher
+weihnachtlichere
+weihnachtlicherem
+weihnachtlicheren
+weihnachtlicherer
+weihnachtlicheres
+weihnachtliches
+weihnachtlichste
+weihnachtlichstem
+weihnachtlichsten
+weihnachtlichster
+weihnachtlichstes
+weil
+weiland
+weile
+weilen
+weilend
+weilende
+weilendem
+weilenden
+weilender
+weilendes
+weilst
+weilt
+weilte
+weilten
+weiltest
+weiltet
+weine
+weinen
+weinend
+weinende
+weinendem
+weinenden
+weinender
+weinendes
+weinerlich
+weinerliche
+weinerlichem
+weinerlichen
+weinerlicher
+weinerliches
+weinrot
+weinrote
+weinrotem
+weinroten
+weinroter
+weinrotes
+weinst
+weint
+weinte
+weinten
+weintest
+weintet
+weise
+weisem
+weisen
+weisend
+weisende
+weisendem
+weisenden
+weisender
+weisendes
+weiser
+weisere
+weiserem
+weiseren
+weiserer
+weiseres
+weises
+weisest
+weiseste
+weisestem
+weisesten
+weisester
+weisestes
+weisgemacht
+weisgesagt
+weisgesagte
+weisgesagtem
+weisgesagten
+weisgesagter
+weisgesagtes
+weislich
+weisliche
+weislichem
+weislichen
+weislicher
+weisliches
+weismache
+weismachen
+weismachend
+weismachende
+weismachendem
+weismachenden
+weismachender
+weismachendes
+weismachst
+weismacht
+weismachte
+weismachten
+weismachtest
+weismachtet
+weissage
+weissagen
+weissagend
+weissagende
+weissagendem
+weissagenden
+weissagender
+weissagendes
+weissagst
+weissagt
+weissagte
+weissagten
+weissagtest
+weissagtet
+weist
+weisungsgemäß
+weisungsgemäße
+weisungsgemäßem
+weisungsgemäßen
+weisungsgemäßer
+weisungsgemäßes
+weiszumachen
+weit
+weitab
+weitaus
+weitblickend
+weitblickende
+weitblickendem
+weitblickenden
+weitblickender
+weitblickendere
+weitblickenderem
+weitblickenderen
+weitblickenderer
+weitblickenderes
+weitblickendes
+weitblickendste
+weitblickendstem
+weitblickendsten
+weitblickendster
+weitblickendstes
+weite
+weitem
+weiten
+weiter
+weiterbefördert
+weiterbeförderte
+weiterbefördertem
+weiterbeförderten
+weiterbeförderter
+weiterbefördertes
+weiterbestanden
+weiterbestandene
+weiterbestandenem
+weiterbestandenen
+weiterbestandener
+weiterbestandenes
+weitere
+weiterem
+weiteren
+weiterentwickele
+weiterentwickeln
+weiterentwickelnd
+weiterentwickelnde
+weiterentwickelndem
+weiterentwickelnden
+weiterentwickelnder
+weiterentwickelndes
+weiterentwickelst
+weiterentwickelt
+weiterentwickelte
+weiterentwickelten
+weiterentwickeltest
+weiterentwickeltet
+weiterentwickle
+weiterer
+weiteres
+weiterführend
+weiterführende
+weiterführendem
+weiterführenden
+weiterführender
+weiterführendes
+weitergab
+weitergaben
+weitergabst
+weitergabt
+weitergebe
+weitergeben
+weitergebend
+weitergebende
+weitergebendem
+weitergebenden
+weitergebender
+weitergebendes
+weitergebracht
+weitergebrachte
+weitergebrachtem
+weitergebrachten
+weitergebrachter
+weitergebrachtes
+weitergebt
+weitergeführt
+weitergeführte
+weitergeführtem
+weitergeführten
+weitergeführter
+weitergeführtes
+weitergegeben
+weitergegebene
+weitergegebenem
+weitergegebenen
+weitergegebener
+weitergegebenes
+weitergehe
+weitergehen
+weitergehend
+weitergehende
+weitergehendem
+weitergehenden
+weitergehender
+weitergehendes
+weitergehst
+weitergeht
+weitergekommen
+weitergekommene
+weitergekommenem
+weitergekommenen
+weitergekommener
+weitergekommenes
+weitergeleitet
+weitergeleitete
+weitergeleitetem
+weitergeleiteten
+weitergeleiteter
+weitergeleitetes
+weitergereicht
+weitergereichte
+weitergereichtem
+weitergereichten
+weitergereichter
+weitergereichtes
+weitergesagt
+weitergesagte
+weitergesagtem
+weitergesagten
+weitergesagter
+weitergesagtes
+weiterging
+weitergingen
+weitergingst
+weitergingt
+weiterhin
+weiterreiche
+weiterreichen
+weiterreichend
+weiterreichende
+weiterreichendem
+weiterreichenden
+weiterreichender
+weiterreichendes
+weiterreichst
+weiterreicht
+weiterreichte
+weiterreichten
+weiterreichtest
+weiterreichtet
+weiterverwendbar
+weiterverwendbare
+weiterverwendbarem
+weiterverwendbaren
+weiterverwendbarer
+weiterverwendbares
+weiterverwende
+weiterverwenden
+weiterverwendend
+weiterverwendende
+weiterverwendendem
+weiterverwendenden
+weiterverwendender
+weiterverwendendes
+weiterverwendest
+weiterverwendet
+weiterverwendete
+weiterverwendetem
+weiterverwendeten
+weiterverwendeter
+weiterverwendetes
+weiterverwendetest
+weiterverwendetet
+weites
+weitest
+weiteste
+weitestem
+weitesten
+weitester
+weitestes
+weitestgehend
+weitestgehende
+weitestgehendem
+weitestgehenden
+weitestgehender
+weitestgehendes
+weitet
+weitete
+weiteten
+weitetest
+weitetet
+weitflächig
+weitflächige
+weitflächigem
+weitflächigen
+weitflächiger
+weitflächiges
+weitgehend
+weitgehende
+weitgehendem
+weitgehenden
+weitgehender
+weitgehendere
+weitgehenderem
+weitgehenderen
+weitgehenderer
+weitgehenderes
+weitgehendes
+weitgehendste
+weitgehendstem
+weitgehendsten
+weitgehendster
+weitgehendstes
+weitgreifend
+weitgreifende
+weitgreifendem
+weitgreifenden
+weitgreifender
+weitgreifendes
+weither
+weitherzig
+weitherzige
+weitherzigem
+weitherzigen
+weitherziger
+weitherzigere
+weitherzigerem
+weitherzigeren
+weitherzigerer
+weitherzigeres
+weitherziges
+weitherzigste
+weitherzigstem
+weitherzigsten
+weitherzigster
+weitherzigstes
+weithin
+weitläufig
+weitläufige
+weitläufigem
+weitläufigen
+weitläufiger
+weitläufigere
+weitläufigerem
+weitläufigeren
+weitläufigerer
+weitläufigeres
+weitläufiges
+weitläufigste
+weitläufigstem
+weitläufigsten
+weitläufigster
+weitläufigstes
+weitmaschig
+weitmaschige
+weitmaschigem
+weitmaschigen
+weitmaschiger
+weitmaschigere
+weitmaschigerem
+weitmaschigeren
+weitmaschigerer
+weitmaschigeres
+weitmaschiges
+weitmaschigste
+weitmaschigstem
+weitmaschigsten
+weitmaschigster
+weitmaschigstes
+weitreichend
+weitreichende
+weitreichendem
+weitreichenden
+weitreichender
+weitreichendes
+weiträumig
+weiträumige
+weiträumigem
+weiträumigen
+weiträumiger
+weiträumiges
+weitschweifig
+weitschweifige
+weitschweifigem
+weitschweifigen
+weitschweifiger
+weitschweifigere
+weitschweifigerem
+weitschweifigeren
+weitschweifigerer
+weitschweifigeres
+weitschweifiges
+weitschweifigste
+weitschweifigstem
+weitschweifigsten
+weitschweifigster
+weitschweifigstes
+weitsichtig
+weitsichtige
+weitsichtigem
+weitsichtigen
+weitsichtiger
+weitsichtigere
+weitsichtigerem
+weitsichtigeren
+weitsichtigerer
+weitsichtigeres
+weitsichtiges
+weitsichtigste
+weitsichtigstem
+weitsichtigsten
+weitsichtigster
+weitsichtigstes
+weittragend
+weittragende
+weittragendem
+weittragenden
+weittragender
+weittragendes
+weitverzweigt
+weitverzweigte
+weitverzweigtem
+weitverzweigten
+weitverzweigter
+weitverzweigtes
+weiß
+weiße
+weißem
+weißen
+weißer
+weißes
+weißlich
+weißliche
+weißlichem
+weißlichen
+weißlicher
+weißliches
+weißt
+welch
+welche
+welchem
+welchen
+welcher
+welches
+welk
+welke
+welkem
+welken
+welkend
+welkende
+welkendem
+welkenden
+welkender
+welkendes
+welker
+welkere
+welkerem
+welkeren
+welkerer
+welkeres
+welkes
+welkeste
+welkestem
+welkesten
+welkester
+welkestes
+welkst
+welkt
+welkte
+welkten
+welktest
+welktet
+welle
+wellen
+wellend
+wellende
+wellendem
+wellenden
+wellender
+wellendes
+wellenförmig
+wellenförmige
+wellenförmigem
+wellenförmigen
+wellenförmiger
+wellenförmigere
+wellenförmigerem
+wellenförmigeren
+wellenförmigerer
+wellenförmigeres
+wellenförmiges
+wellenförmigste
+wellenförmigstem
+wellenförmigsten
+wellenförmigster
+wellenförmigstes
+wellig
+wellige
+welligem
+welligen
+welliger
+welliges
+wellst
+wellt
+wellte
+wellten
+welltest
+welltet
+weltabgeschieden
+weltabgeschiedene
+weltabgeschiedenem
+weltabgeschiedenen
+weltabgeschiedener
+weltabgeschiedenes
+weltabgewandt
+weltabgewandte
+weltabgewandtem
+weltabgewandten
+weltabgewandter
+weltabgewandtere
+weltabgewandterem
+weltabgewandteren
+weltabgewandterer
+weltabgewandteres
+weltabgewandtes
+weltabgewandteste
+weltabgewandtestem
+weltabgewandtesten
+weltabgewandtester
+weltabgewandtestes
+weltanschaulich
+weltanschauliche
+weltanschaulichem
+weltanschaulichen
+weltanschaulicher
+weltanschauliches
+weltbekannt
+weltbekannte
+weltbekanntem
+weltbekannten
+weltbekannter
+weltbekanntes
+weltberühmt
+weltberühmte
+weltberühmtem
+weltberühmten
+weltberühmter
+weltberühmtes
+weltbeste
+weltbestem
+weltbesten
+weltbester
+weltbestes
+weltbewegend
+weltbewegende
+weltbewegendem
+weltbewegenden
+weltbewegender
+weltbewegendere
+weltbewegenderem
+weltbewegenderen
+weltbewegenderer
+weltbewegenderes
+weltbewegendes
+weltbewegendste
+weltbewegendstem
+weltbewegendsten
+weltbewegendster
+weltbewegendstes
+welterfahren
+welterfahrene
+welterfahrenem
+welterfahrenen
+welterfahrener
+welterfahrenere
+welterfahrenerem
+welterfahreneren
+welterfahrenerer
+welterfahreneres
+welterfahrenes
+welterfahrenste
+welterfahrenstem
+welterfahrensten
+welterfahrenster
+welterfahrenstes
+welterschütternd
+welterschütternde
+welterschütterndem
+welterschütternden
+welterschütternder
+welterschütterndes
+weltfremd
+weltfremde
+weltfremdem
+weltfremden
+weltfremder
+weltfremdes
+weltgeschichtlich
+weltgeschichtliche
+weltgeschichtlichem
+weltgeschichtlichen
+weltgeschichtlicher
+weltgeschichtliches
+weltgewandt
+weltgewandte
+weltgewandtem
+weltgewandten
+weltgewandter
+weltgewandtere
+weltgewandterem
+weltgewandteren
+weltgewandterer
+weltgewandteres
+weltgewandtes
+weltgewandteste
+weltgewandtestem
+weltgewandtesten
+weltgewandtester
+weltgewandtestes
+weltklug
+weltkluge
+weltklugem
+weltklugen
+weltkluger
+weltkluges
+weltlich
+weltliche
+weltlichem
+weltlichen
+weltlicher
+weltlichere
+weltlicherem
+weltlicheren
+weltlicherer
+weltlicheres
+weltliches
+weltlichste
+weltlichstem
+weltlichsten
+weltlichster
+weltlichstes
+weltmännisch
+weltmännische
+weltmännischem
+weltmännischen
+weltmännischer
+weltmännischere
+weltmännischerem
+weltmännischeren
+weltmännischerer
+weltmännischeres
+weltmännisches
+weltmännischste
+weltmännischstem
+weltmännischsten
+weltmännischster
+weltmännischstes
+weltoffen
+weltoffene
+weltoffenem
+weltoffenen
+weltoffener
+weltoffenes
+weltpolitisch
+weltpolitische
+weltpolitischem
+weltpolitischen
+weltpolitischer
+weltpolitisches
+weltumkrempelnd
+weltumkrempelnde
+weltumkrempelndem
+weltumkrempelnden
+weltumkrempelnder
+weltumkrempelndes
+weltweit
+weltweite
+weltweitem
+weltweiten
+weltweiter
+weltweites
+weltwirtschaftlich
+weltwirtschaftliche
+weltwirtschaftlichem
+weltwirtschaftlichen
+weltwirtschaftlicher
+weltwirtschaftliches
+wem
+wen
+wende
+wenden
+wendend
+wendende
+wendendem
+wendenden
+wendender
+wendendes
+wendest
+wendet
+wendete
+wendeten
+wendetest
+wendetet
+wendig
+wendige
+wendigem
+wendigen
+wendiger
+wendigere
+wendigerem
+wendigeren
+wendigerer
+wendigeres
+wendiges
+wendigste
+wendigstem
+wendigsten
+wendigster
+wendigstes
+wenig
+wenige
+wenigem
+wenigen
+weniger
+wenigere
+wenigerem
+wenigeren
+wenigerer
+wenigeres
+weniges
+wenigste
+wenigstem
+wenigsten
+wenigstens
+wenigster
+wenigstes
+wenn
+wenngleich
+wer
+werbe
+werben
+werbend
+werbende
+werbendem
+werbenden
+werbender
+werbendes
+werblich
+werbliche
+werblichem
+werblichen
+werblicher
+werbliches
+werbt
+werde
+werden
+werdend
+werdende
+werdendem
+werdenden
+werdender
+werdendes
+werdet
+werfe
+werfen
+werfend
+werfende
+werfendem
+werfenden
+werfender
+werfendes
+werft
+werke
+werkele
+werkeln
+werkelnd
+werkelnde
+werkelndem
+werkelnden
+werkelnder
+werkelndes
+werkelst
+werkelt
+werkelte
+werkelten
+werkeltest
+werkeltet
+werken
+werkend
+werkende
+werkendem
+werkenden
+werkender
+werkendes
+werkle
+werksseitig
+werksseitige
+werksseitigem
+werksseitigen
+werksseitiger
+werksseitiges
+werkst
+werkt
+werktags
+werkte
+werkten
+werktest
+werktet
+werktätig
+werktätige
+werktätigem
+werktätigen
+werktätiger
+werktätiges
+wert
+wertbeständig
+wertbeständige
+wertbeständigem
+wertbeständigen
+wertbeständiger
+wertbeständiges
+werte
+wertem
+werten
+wertend
+wertende
+wertendem
+wertenden
+wertender
+wertendes
+werter
+wertere
+werterem
+werteren
+werterer
+werteres
+werterhaltend
+werterhaltende
+werterhaltendem
+werterhaltenden
+werterhaltender
+werterhaltendes
+wertes
+wertest
+werteste
+wertestem
+wertesten
+wertester
+wertestes
+wertet
+wertete
+werteten
+wertetest
+wertetet
+wertfrei
+wertfreie
+wertfreiem
+wertfreien
+wertfreier
+wertfreies
+wertgeschätzt
+wertgeschätzte
+wertgeschätztem
+wertgeschätzten
+wertgeschätzter
+wertgeschätztes
+wertlos
+wertlose
+wertlosem
+wertlosen
+wertloser
+wertlosere
+wertloserem
+wertloseren
+wertloserer
+wertloseres
+wertloses
+wertloseste
+wertlosestem
+wertlosesten
+wertlosester
+wertlosestes
+wertmäßig
+wertmäßige
+wertmäßigem
+wertmäßigen
+wertmäßiger
+wertmäßiges
+wertneutral
+wertneutrale
+wertneutralem
+wertneutralen
+wertneutraler
+wertneutrales
+wertschätze
+wertschätzen
+wertschätzend
+wertschätzende
+wertschätzendem
+wertschätzenden
+wertschätzender
+wertschätzendes
+wertschätzest
+wertschätzt
+wertschätzte
+wertschätzten
+wertschätztest
+wertschätztet
+wertvoll
+wertvolle
+wertvollem
+wertvollen
+wertvoller
+wertvollere
+wertvollerem
+wertvolleren
+wertvollerer
+wertvolleres
+wertvolles
+wertvollste
+wertvollstem
+wertvollsten
+wertvollster
+wertvollstes
+wesenlos
+wesenlose
+wesenlosem
+wesenlosen
+wesenloser
+wesenlosere
+wesenloserem
+wesenloseren
+wesenloserer
+wesenloseres
+wesenloses
+wesenloseste
+wesenlosestem
+wesenlosesten
+wesenlosester
+wesenlosestes
+wesensfremd
+wesensfremde
+wesensfremdem
+wesensfremden
+wesensfremder
+wesensfremdes
+wesensgleich
+wesensgleiche
+wesensgleichem
+wesensgleichen
+wesensgleicher
+wesensgleiches
+wesentlich
+wesentliche
+wesentlichem
+wesentlichen
+wesentlicher
+wesentlichere
+wesentlicherem
+wesentlicheren
+wesentlicherer
+wesentlicheres
+wesentliches
+wesentlichste
+wesentlichstem
+wesentlichsten
+wesentlichster
+wesentlichstes
+weshalb
+wessen
+westdeutsch
+westdeutsche
+westdeutschem
+westdeutschen
+westdeutscher
+westdeutsches
+westeuropäisch
+westeuropäische
+westeuropäischem
+westeuropäischen
+westeuropäischer
+westeuropäisches
+westfälisch
+westfälische
+westfälischem
+westfälischen
+westfälischer
+westfälisches
+westlich
+westliche
+westlichem
+westlichen
+westlicher
+westlichere
+westlicherem
+westlicheren
+westlicherer
+westlicheres
+westliches
+westlichste
+westlichstem
+westlichsten
+westlichster
+westlichstes
+westwärts
+weswegen
+wettbewerblich
+wettbewerbliche
+wettbewerblichem
+wettbewerblichen
+wettbewerblicher
+wettbewerbliches
+wettbewerbsfähig
+wettbewerbsfähige
+wettbewerbsfähigem
+wettbewerbsfähigen
+wettbewerbsfähiger
+wettbewerbsfähiges
+wettbewerbsneutral
+wettbewerbsneutrale
+wettbewerbsneutralem
+wettbewerbsneutralen
+wettbewerbsneutraler
+wettbewerbsneutrales
+wette
+wetteifere
+wetteifern
+wetteifernd
+wetteifernde
+wetteiferndem
+wetteifernden
+wetteifernder
+wetteiferndes
+wetteiferst
+wetteifert
+wetteiferte
+wetteiferten
+wetteifertest
+wetteifertet
+wetteifre
+wetten
+wettend
+wettende
+wettendem
+wettenden
+wettender
+wettendes
+wettere
+wetterfest
+wetterfeste
+wetterfestem
+wetterfesten
+wetterfester
+wetterfestere
+wetterfesterem
+wetterfesteren
+wetterfesterer
+wetterfesteres
+wetterfestes
+wetterfesteste
+wetterfestestem
+wetterfestesten
+wetterfestester
+wetterfestestes
+wetterfühlig
+wetterfühlige
+wetterfühligem
+wetterfühligen
+wetterfühliger
+wetterfühligere
+wetterfühligerem
+wetterfühligeren
+wetterfühligerer
+wetterfühligeres
+wetterfühliges
+wetterfühligste
+wetterfühligstem
+wetterfühligsten
+wetterfühligster
+wetterfühligstes
+wetterhart
+wetterharte
+wetterhartem
+wetterharten
+wetterharter
+wetterhartes
+wetterhärter
+wetterhärtere
+wetterhärterem
+wetterhärteren
+wetterhärterer
+wetterhärteres
+wetterhärteste
+wetterhärtestem
+wetterhärtesten
+wetterhärtester
+wetterhärtestes
+wettern
+wetternd
+wetternde
+wetterndem
+wetternden
+wetternder
+wetterndes
+wetterst
+wettert
+wetterte
+wetterten
+wettertest
+wettertet
+wetterwendisch
+wetterwendische
+wetterwendischem
+wetterwendischen
+wetterwendischer
+wetterwendischere
+wetterwendischerem
+wetterwendischeren
+wetterwendischerer
+wetterwendischeres
+wetterwendisches
+wetterwendischste
+wetterwendischstem
+wetterwendischsten
+wetterwendischster
+wetterwendischstes
+wettest
+wettet
+wettete
+wetteten
+wettetest
+wettetet
+wettmache
+wettmachen
+wettmachend
+wettmachende
+wettmachendem
+wettmachenden
+wettmachender
+wettmachendes
+wettmachst
+wettmacht
+wettmachte
+wettmachten
+wettmachtest
+wettmachtet
+wettre
+wettrüste
+wettrüsten
+wettrüstend
+wettrüstende
+wettrüstendem
+wettrüstenden
+wettrüstender
+wettrüstendes
+wettrüstest
+wettrüstet
+wettrüstete
+wettrüsteten
+wettrüstetest
+wettrüstetet
+wetze
+wetzen
+wetzend
+wetzende
+wetzendem
+wetzenden
+wetzender
+wetzendes
+wetzest
+wetzt
+wetzte
+wetzten
+wetztest
+wetztet
+wg
+wich
+wichen
+wichest
+wichse
+wichsen
+wichsend
+wichsende
+wichsendem
+wichsenden
+wichsender
+wichsendes
+wichsest
+wichst
+wichste
+wichsten
+wichstest
+wichstet
+wicht
+wichtig
+wichtige
+wichtigem
+wichtigen
+wichtiger
+wichtigere
+wichtigerem
+wichtigeren
+wichtigerer
+wichtigeres
+wichtiges
+wichtigste
+wichtigstem
+wichtigsten
+wichtigster
+wichtigstes
+wickele
+wickeln
+wickelnd
+wickelnde
+wickelndem
+wickelnden
+wickelnder
+wickelndes
+wickelst
+wickelt
+wickelte
+wickelten
+wickeltest
+wickeltet
+wickle
+wider
+widerborstig
+widerborstige
+widerborstigem
+widerborstigen
+widerborstiger
+widerborstigere
+widerborstigerem
+widerborstigeren
+widerborstigerer
+widerborstigeres
+widerborstiges
+widerborstigste
+widerborstigstem
+widerborstigsten
+widerborstigster
+widerborstigstes
+widere
+widerfahre
+widerfahren
+widerfahrend
+widerfahrende
+widerfahrendem
+widerfahrenden
+widerfahrender
+widerfahrendes
+widerfahrene
+widerfahrenem
+widerfahrenen
+widerfahrener
+widerfahrenes
+widerfahrt
+widerfuhr
+widerfährt
+widergehallt
+widergehallte
+widergehalltem
+widergehallten
+widergehallter
+widergehalltes
+widergespiegelt
+widergespiegelte
+widergespiegeltem
+widergespiegelten
+widergespiegelter
+widergespiegeltes
+widerlegbar
+widerlegbare
+widerlegbarem
+widerlegbaren
+widerlegbarer
+widerlegbarere
+widerlegbarerem
+widerlegbareren
+widerlegbarerer
+widerlegbareres
+widerlegbares
+widerlegbarste
+widerlegbarstem
+widerlegbarsten
+widerlegbarster
+widerlegbarstes
+widerlege
+widerlegen
+widerlegend
+widerlegende
+widerlegendem
+widerlegenden
+widerlegender
+widerlegendes
+widerlegst
+widerlegt
+widerlegte
+widerlegtem
+widerlegten
+widerlegter
+widerlegtere
+widerlegterem
+widerlegteren
+widerlegterer
+widerlegteres
+widerlegtes
+widerlegtest
+widerlegteste
+widerlegtestem
+widerlegtesten
+widerlegtester
+widerlegtestes
+widerlegtet
+widerlich
+widerliche
+widerlichem
+widerlichen
+widerlicher
+widerlichere
+widerlicherem
+widerlicheren
+widerlicherer
+widerlicheres
+widerliches
+widerlichste
+widerlichstem
+widerlichsten
+widerlichster
+widerlichstes
+widern
+widernatürlich
+widernatürliche
+widernatürlichem
+widernatürlichen
+widernatürlicher
+widernatürlichere
+widernatürlicherem
+widernatürlicheren
+widernatürlicherer
+widernatürlicheres
+widernatürliches
+widernatürlichste
+widernatürlichstem
+widernatürlichsten
+widernatürlichster
+widernatürlichstes
+widernd
+widernde
+widerndem
+widernden
+widernder
+widerndes
+widerrechtlich
+widerrechtliche
+widerrechtlichem
+widerrechtlichen
+widerrechtlicher
+widerrechtlichere
+widerrechtlicherem
+widerrechtlicheren
+widerrechtlicherer
+widerrechtlicheres
+widerrechtliches
+widerrechtlichste
+widerrechtlichstem
+widerrechtlichsten
+widerrechtlichster
+widerrechtlichstes
+widerrief
+widerriefen
+widerriefest
+widerriefst
+widerrieft
+widerriet
+widerrieten
+widerrietest
+widerrietet
+widerrietst
+widerrufe
+widerrufen
+widerrufend
+widerrufende
+widerrufendem
+widerrufenden
+widerrufender
+widerrufendes
+widerrufene
+widerrufenem
+widerrufenen
+widerrufener
+widerrufenes
+widerrufqqlich
+widerrufqqliche
+widerrufqqlichem
+widerrufqqlichen
+widerrufqqlicher
+widerrufqqliches
+widerrufst
+widerruft
+widerrät
+widerrätst
+widersetze
+widersetzen
+widersetzend
+widersetzende
+widersetzendem
+widersetzenden
+widersetzender
+widersetzendes
+widersetzest
+widersetzlich
+widersetzliche
+widersetzlichem
+widersetzlichen
+widersetzlicher
+widersetzliches
+widersetzt
+widersetzte
+widersetzten
+widersetztest
+widersetztet
+widersinnig
+widersinnige
+widersinnigem
+widersinnigen
+widersinniger
+widersinnigere
+widersinnigerem
+widersinnigeren
+widersinnigerer
+widersinnigeres
+widersinniges
+widersinnigste
+widersinnigstem
+widersinnigsten
+widersinnigster
+widersinnigstes
+widerspenstig
+widerspenstige
+widerspenstigem
+widerspenstigen
+widerspenstiger
+widerspenstigere
+widerspenstigerem
+widerspenstigeren
+widerspenstigerer
+widerspenstigeres
+widerspenstiges
+widerspenstigste
+widerspenstigstem
+widerspenstigsten
+widerspenstigster
+widerspenstigstes
+widerspiegele
+widerspiegeln
+widerspiegelnd
+widerspiegelnde
+widerspiegelndem
+widerspiegelnden
+widerspiegelnder
+widerspiegelndes
+widerspiegelst
+widerspiegelt
+widerspiegelte
+widerspiegelten
+widerspiegeltest
+widerspiegeltet
+widerspiegle
+widersprach
+widersprachen
+widersprachest
+widersprachst
+widerspracht
+widerspreche
+widersprechen
+widersprechend
+widersprechende
+widersprechendem
+widersprechenden
+widersprechender
+widersprechendes
+widersprecht
+widersprichst
+widerspricht
+widersprochen
+widersprochene
+widersprochenem
+widersprochenen
+widersprochener
+widersprochenes
+widerspruchsfrei
+widerspruchsfreie
+widerspruchsfreiem
+widerspruchsfreien
+widerspruchsfreier
+widerspruchsfreies
+widerspruchslos
+widerspruchslose
+widerspruchslosem
+widerspruchslosen
+widerspruchsloser
+widerspruchslosere
+widerspruchsloserem
+widerspruchsloseren
+widerspruchsloserer
+widerspruchsloseres
+widerspruchsloses
+widerspruchsloseste
+widerspruchslosestem
+widerspruchslosesten
+widerspruchslosester
+widerspruchslosestes
+widerspruchsvoll
+widerspruchsvolle
+widerspruchsvollem
+widerspruchsvollen
+widerspruchsvoller
+widerspruchsvollere
+widerspruchsvollerem
+widerspruchsvolleren
+widerspruchsvollerer
+widerspruchsvolleres
+widerspruchsvolles
+widerspruchsvollste
+widerspruchsvollstem
+widerspruchsvollsten
+widerspruchsvollster
+widerspruchsvollstes
+widerspräche
+widersprächen
+widersprächest
+widersprächet
+widersprüchlich
+widersprüchliche
+widersprüchlichem
+widersprüchlichen
+widersprüchlicher
+widersprüchlichere
+widersprüchlicherem
+widersprüchlicheren
+widersprüchlicherer
+widersprüchlicheres
+widersprüchliches
+widersprüchlichste
+widersprüchlichstem
+widersprüchlichsten
+widersprüchlichster
+widersprüchlichstes
+widerst
+widerstand
+widerstanden
+widerstandest
+widerstandet
+widerstandsfähig
+widerstandsfähige
+widerstandsfähigem
+widerstandsfähigen
+widerstandsfähiger
+widerstandsfähigere
+widerstandsfähigerem
+widerstandsfähigeren
+widerstandsfähigerer
+widerstandsfähigeres
+widerstandsfähiges
+widerstandsfähigste
+widerstandsfähigstem
+widerstandsfähigsten
+widerstandsfähigster
+widerstandsfähigstes
+widerstandslos
+widerstandslose
+widerstandslosem
+widerstandslosen
+widerstandsloser
+widerstandslosere
+widerstandsloserem
+widerstandsloseren
+widerstandsloserer
+widerstandsloseres
+widerstandsloses
+widerstandsloseste
+widerstandslosestem
+widerstandslosesten
+widerstandslosester
+widerstandslosestes
+widerstandst
+widerstehe
+widerstehen
+widerstehend
+widerstehende
+widerstehendem
+widerstehenden
+widerstehender
+widerstehendes
+widerstehst
+widersteht
+widerstrebe
+widerstreben
+widerstrebend
+widerstrebende
+widerstrebendem
+widerstrebenden
+widerstrebender
+widerstrebendere
+widerstrebenderem
+widerstrebenderen
+widerstrebenderer
+widerstrebenderes
+widerstrebendes
+widerstrebendste
+widerstrebendstem
+widerstrebendsten
+widerstrebendster
+widerstrebendstes
+widerstrebst
+widerstrebt
+widerstrebte
+widerstrebten
+widerstrebtest
+widerstrebtet
+widert
+widerte
+widerten
+widertest
+widertet
+widerwillig
+widerwillige
+widerwilligem
+widerwilligen
+widerwilliger
+widerwilligere
+widerwilligerem
+widerwilligeren
+widerwilligerer
+widerwilligeres
+widerwilliges
+widerwilligste
+widerwilligstem
+widerwilligsten
+widerwilligster
+widerwilligstes
+widerwärtig
+widerwärtige
+widerwärtigem
+widerwärtigen
+widerwärtiger
+widerwärtigere
+widerwärtigerem
+widerwärtigeren
+widerwärtigerer
+widerwärtigeres
+widerwärtiges
+widerwärtigste
+widerwärtigstem
+widerwärtigsten
+widerwärtigster
+widerwärtigstes
+widerzuspiegeln
+widerzuspiegelnd
+widerzuspiegelnde
+widerzuspiegelndem
+widerzuspiegelnden
+widerzuspiegelnder
+widerzuspiegelndes
+widme
+widmen
+widmend
+widmende
+widmendem
+widmenden
+widmender
+widmendes
+widmest
+widmet
+widmete
+widmeten
+widmetest
+widmetet
+widre
+widrig
+widrige
+widrigem
+widrigen
+widrigenfalls
+widriger
+widrigere
+widrigerem
+widrigeren
+widrigerer
+widrigeres
+widriges
+widrigste
+widrigstem
+widrigsten
+widrigster
+widrigstes
+wie
+wieder
+wiederangeknüpft
+wiederangeknüpfte
+wiederangeknüpftem
+wiederangeknüpften
+wiederangeknüpfter
+wiederangeknüpftes
+wiederangestellt
+wiederangestellte
+wiederangestelltem
+wiederangestellten
+wiederangestellter
+wiederangestelltes
+wiederauferstanden
+wiederauferstandene
+wiederauferstandenem
+wiederauferstandenen
+wiederauferstandener
+wiederauferstandenes
+wiederaufgebaut
+wiederaufgebaute
+wiederaufgebautem
+wiederaufgebauten
+wiederaufgebauter
+wiederaufgebautes
+wiederaufgeblüht
+wiederaufgeblühte
+wiederaufgeblühtem
+wiederaufgeblühten
+wiederaufgeblühter
+wiederaufgeblühtes
+wiederaufgekommen
+wiederaufgekommene
+wiederaufgekommenem
+wiederaufgekommenen
+wiederaufgekommener
+wiederaufgekommenes
+wiederaufgelebt
+wiederaufgelebte
+wiederaufgelebtem
+wiederaufgelebten
+wiederaufgelebter
+wiederaufgelebtes
+wiederaufgenommen
+wiederaufgenommene
+wiederaufgenommenem
+wiederaufgenommenen
+wiederaufgenommener
+wiederaufgenommenes
+wiederaufgetreten
+wiederaufgetretene
+wiederaufgetretenem
+wiederaufgetretenen
+wiederaufgetretener
+wiederaufgetretenes
+wiedereingebracht
+wiedereingebrachte
+wiedereingebrachtem
+wiedereingebrachten
+wiedereingebrachter
+wiedereingebrachtes
+wiedereingeführt
+wiedereingeführte
+wiedereingeführtem
+wiedereingeführten
+wiedereingeführter
+wiedereingeführtes
+wiedereingelöst
+wiedereingelöste
+wiedereingelöstem
+wiedereingelösten
+wiedereingelöster
+wiedereingelöstes
+wiedereingenommen
+wiedereingenommene
+wiedereingenommenem
+wiedereingenommenen
+wiedereingenommener
+wiedereingenommenes
+wiedereingesetzt
+wiedereingesetzte
+wiedereingesetztem
+wiedereingesetzten
+wiedereingesetzter
+wiedereingesetztes
+wiedereingestellt
+wiedereingestellte
+wiedereingestelltem
+wiedereingestellten
+wiedereingestellter
+wiedereingestelltes
+wiedereingliedere
+wiedereingliedern
+wiedereingliedernd
+wiedereingliedernde
+wiedereingliederndem
+wiedereingliedernden
+wiedereingliedernder
+wiedereingliederndes
+wiedereingliederst
+wiedereingliedert
+wiedereingliederte
+wiedereingliederten
+wiedereingliedertest
+wiedereingliedertet
+wiedereingliedre
+wiedereinmal
+wiederergriffen
+wiederergriffene
+wiederergriffenem
+wiederergriffenen
+wiederergriffener
+wiederergriffenes
+wiedererkannt
+wiedererkannte
+wiedererkanntem
+wiedererkannten
+wiedererkannter
+wiedererkanntes
+wiederfand
+wiederfanden
+wiederfandest
+wiederfandet
+wiederfandst
+wiederfinde
+wiederfinden
+wiederfindend
+wiederfindende
+wiederfindendem
+wiederfindenden
+wiederfindender
+wiederfindendes
+wiederfindest
+wiederfindet
+wiedergab
+wiedergaben
+wiedergabst
+wiedergabt
+wiedergebe
+wiedergeben
+wiedergebend
+wiedergebende
+wiedergebendem
+wiedergebenden
+wiedergebender
+wiedergebendes
+wiedergebracht
+wiedergebrachte
+wiedergebrachtem
+wiedergebrachten
+wiedergebrachter
+wiedergebrachtes
+wiedergebt
+wiedergefunden
+wiedergefundene
+wiedergefundenem
+wiedergefundenen
+wiedergefundener
+wiedergefundenes
+wiedergegeben
+wiedergegebene
+wiedergegebenem
+wiedergegebenen
+wiedergegebener
+wiedergegebenes
+wiedergekehrt
+wiedergekehrte
+wiedergekehrtem
+wiedergekehrten
+wiedergekehrter
+wiedergekehrtes
+wiedergekommen
+wiedergekommene
+wiedergekommenem
+wiedergekommenen
+wiedergekommener
+wiedergekommenes
+wiedergekäut
+wiedergekäute
+wiedergekäutem
+wiedergekäuten
+wiedergekäuter
+wiedergekäutes
+wiedergesehen
+wiedergesehene
+wiedergesehenem
+wiedergesehenen
+wiedergesehener
+wiedergesehenes
+wiedergewonnen
+wiedergewonnene
+wiedergewonnenem
+wiedergewonnenen
+wiedergewonnener
+wiedergewonnenes
+wiedergewählt
+wiedergewählte
+wiedergewähltem
+wiedergewählten
+wiedergewählter
+wiedergewähltes
+wiedergibst
+wiedergibt
+wiedergutgemacht
+wiedergutgemachte
+wiedergutgemachtem
+wiedergutgemachten
+wiedergutgemachter
+wiedergutgemachtes
+wiedergutmache
+wiedergutmachen
+wiedergutmachend
+wiedergutmachende
+wiedergutmachendem
+wiedergutmachenden
+wiedergutmachender
+wiedergutmachendes
+wiedergutmachst
+wiedergutmacht
+wiedergutmachte
+wiedergutmachten
+wiedergutmachtest
+wiedergutmachtet
+wiedergutzumachen
+wiedergutzumachend
+wiedergutzumachende
+wiedergutzumachendem
+wiedergutzumachenden
+wiedergutzumachender
+wiedergutzumachendes
+wiederhergestellt
+wiederhergestellte
+wiederhergestelltem
+wiederhergestellten
+wiederhergestellter
+wiederhergestelltes
+wiederholbar
+wiederholbare
+wiederholbarem
+wiederholbaren
+wiederholbarer
+wiederholbares
+wiederhole
+wiederholen
+wiederholend
+wiederholende
+wiederholendem
+wiederholenden
+wiederholender
+wiederholendes
+wiederholst
+wiederholt
+wiederholte
+wiederholtem
+wiederholten
+wiederholter
+wiederholtes
+wiederholtest
+wiederholtet
+wiederkehre
+wiederkehren
+wiederkehrend
+wiederkehrende
+wiederkehrendem
+wiederkehrenden
+wiederkehrender
+wiederkehrendes
+wiederkehrst
+wiederkehrt
+wiederkehrte
+wiederkehrten
+wiederkehrtest
+wiederkehrtet
+wiederkomme
+wiederkommen
+wiederkommend
+wiederkommende
+wiederkommendem
+wiederkommenden
+wiederkommender
+wiederkommendes
+wiederkommst
+wiederkommt
+wiedermal
+wiedersehe
+wiedersehen
+wiedersehend
+wiedersehende
+wiedersehendem
+wiedersehenden
+wiedersehender
+wiedersehendes
+wiederseht
+wiederum
+wiederverwendbar
+wiederverwendbare
+wiederverwendbarem
+wiederverwendbaren
+wiederverwendbarer
+wiederverwendbares
+wiederverwende
+wiederverwenden
+wiederverwendest
+wiederverwendet
+wiederverwendete
+wiederverwendetem
+wiederverwendeten
+wiederverwendeter
+wiederverwendetes
+wiederverwendetest
+wiederverwendetet
+wiederzufinden
+wiederzufindend
+wiederzufindende
+wiederzufindendem
+wiederzufindenden
+wiederzufindender
+wiederzufindendes
+wiederzugeben
+wiederzugebend
+wiederzugebende
+wiederzugebendem
+wiederzugebenden
+wiederzugebender
+wiederzugebendes
+wiederzugelassen
+wiederzugelassene
+wiederzugelassenem
+wiederzugelassenen
+wiederzugelassener
+wiederzugelassenes
+wiederzukommen
+wiederzulassen
+wiederzulassend
+wiederzulassende
+wiederzulassendem
+wiederzulassenden
+wiederzulassender
+wiederzulassendes
+wiederzusehen
+wiederzuverwenden
+wiederzuverwendend
+wiederzuverwendende
+wiederzuverwendendem
+wiederzuverwendenden
+wiederzuverwendender
+wiederzuverwendendes
+wiege
+wiegen
+wiegend
+wiegende
+wiegendem
+wiegenden
+wiegender
+wiegendes
+wiegst
+wiegt
+wiegte
+wiegten
+wiegtest
+wiegtet
+wiehere
+wiehern
+wiehernd
+wiehernde
+wieherndem
+wiehernden
+wiehernder
+wieherndes
+wieherst
+wiehert
+wieherte
+wieherten
+wiehertest
+wiehertet
+wiehre
+wienerisch
+wienerische
+wienerischem
+wienerischen
+wienerischer
+wienerischere
+wienerischerem
+wienerischeren
+wienerischerer
+wienerischeres
+wienerisches
+wienerischste
+wienerischstem
+wienerischsten
+wienerischster
+wienerischstes
+wies
+wieselflink
+wieselflinke
+wieselflinkem
+wieselflinken
+wieselflinker
+wieselflinkes
+wiesen
+wiesest
+wieso
+wiest
+wieweit
+wild
+wilde
+wildem
+wilden
+wilder
+wildere
+wilderem
+wilderen
+wilderer
+wilderes
+wildern
+wildernd
+wildernde
+wilderndem
+wildernden
+wildernder
+wilderndes
+wilderst
+wildert
+wilderte
+wilderten
+wildertest
+wildertet
+wildes
+wildfremd
+wildfremde
+wildfremdem
+wildfremden
+wildfremder
+wildfremdes
+wildledern
+wildlederne
+wildledernem
+wildledernen
+wildlederner
+wildledernes
+wildre
+wildste
+wildstem
+wildsten
+wildster
+wildstes
+will
+willen
+willenlos
+willenlose
+willenlosem
+willenlosen
+willenloser
+willenlosere
+willenloserem
+willenloseren
+willenloserer
+willenloseres
+willenloses
+willenloseste
+willenlosestem
+willenlosesten
+willenlosester
+willenlosestes
+willens
+willensschwach
+willensschwache
+willensschwachem
+willensschwachen
+willensschwacher
+willensschwaches
+willensschwächer
+willensschwächere
+willensschwächerem
+willensschwächeren
+willensschwächerer
+willensschwächeres
+willensschwächste
+willensschwächstem
+willensschwächsten
+willensschwächster
+willensschwächstes
+willensstark
+willensstarke
+willensstarkem
+willensstarken
+willensstarker
+willensstarkes
+willensstärker
+willensstärkere
+willensstärkerem
+willensstärkeren
+willensstärkerer
+willensstärkeres
+willensstärkste
+willensstärkstem
+willensstärksten
+willensstärkster
+willensstärkstes
+willig
+willige
+willigem
+willigen
+williger
+willigere
+willigerem
+willigeren
+willigerer
+willigeres
+williges
+willigst
+willigste
+willigstem
+willigsten
+willigster
+willigstes
+willigt
+willigte
+willigten
+willigtest
+willigtet
+willkommen
+willkommene
+willkommenem
+willkommenen
+willkommener
+willkommenere
+willkommenerem
+willkommeneren
+willkommenerer
+willkommeneres
+willkommenes
+willkommenste
+willkommenstem
+willkommensten
+willkommenster
+willkommenstes
+willkürlich
+willkürliche
+willkürlichem
+willkürlichen
+willkürlicher
+willkürlichere
+willkürlicherem
+willkürlicheren
+willkürlicherer
+willkürlicheres
+willkürliches
+willkürlichste
+willkürlichstem
+willkürlichsten
+willkürlichster
+willkürlichstes
+willst
+wimmele
+wimmeln
+wimmelnd
+wimmelnde
+wimmelndem
+wimmelnden
+wimmelnder
+wimmelndes
+wimmelst
+wimmelt
+wimmelte
+wimmelten
+wimmeltest
+wimmeltet
+wimmere
+wimmern
+wimmernd
+wimmernde
+wimmerndem
+wimmernden
+wimmernder
+wimmerndes
+wimmerst
+wimmert
+wimmerte
+wimmerten
+wimmertest
+wimmertet
+wimmle
+wimmre
+winde
+windelweich
+windelweiche
+windelweichem
+windelweichen
+windelweicher
+windelweiches
+winden
+windend
+windende
+windendem
+windenden
+windender
+windendes
+windest
+windet
+windgeschützt
+windgeschützte
+windgeschütztem
+windgeschützten
+windgeschützter
+windgeschütztere
+windgeschützterem
+windgeschützteren
+windgeschützterer
+windgeschützteres
+windgeschütztes
+windgeschützteste
+windgeschütztestem
+windgeschütztesten
+windgeschütztester
+windgeschütztestes
+windig
+windige
+windigem
+windigen
+windiger
+windigere
+windigerem
+windigeren
+windigerer
+windigeres
+windiges
+windigste
+windigstem
+windigsten
+windigster
+windigstes
+windschief
+windschiefe
+windschiefem
+windschiefen
+windschiefer
+windschiefere
+windschieferem
+windschieferen
+windschieferer
+windschieferes
+windschiefes
+windschiefste
+windschiefstem
+windschiefsten
+windschiefster
+windschiefstes
+windschlüpfig
+windschlüpfige
+windschlüpfigem
+windschlüpfigen
+windschlüpfiger
+windschlüpfigere
+windschlüpfigerem
+windschlüpfigeren
+windschlüpfigerer
+windschlüpfigeres
+windschlüpfiges
+windschlüpfigste
+windschlüpfigstem
+windschlüpfigsten
+windschlüpfigster
+windschlüpfigstes
+windstill
+windstille
+windstillem
+windstillen
+windstiller
+windstilles
+winke
+winkelförmig
+winkelförmige
+winkelförmigem
+winkelförmigen
+winkelförmiger
+winkelförmiges
+winkelig
+winkelige
+winkeligem
+winkeligen
+winkeliger
+winkeliges
+winken
+winkend
+winkende
+winkendem
+winkenden
+winkender
+winkendes
+winklig
+winklige
+winkligem
+winkligen
+winkliger
+winkliges
+winkst
+winkt
+winkte
+winkten
+winktest
+winktet
+winsele
+winseln
+winselnd
+winselnde
+winselndem
+winselnden
+winselnder
+winselndes
+winselst
+winselt
+winselte
+winselten
+winseltest
+winseltet
+winsle
+winterfest
+winterfeste
+winterfestem
+winterfesten
+winterfester
+winterfestes
+winterlich
+winterliche
+winterlichem
+winterlichen
+winterlicher
+winterlichere
+winterlicherem
+winterlicheren
+winterlicherer
+winterlicheres
+winterliches
+winterlichste
+winterlichstem
+winterlichsten
+winterlichster
+winterlichstes
+winzig
+winzige
+winzigem
+winzigen
+winziger
+winzigere
+winzigerem
+winzigeren
+winzigerer
+winzigeres
+winziges
+winzigste
+winzigstem
+winzigsten
+winzigster
+winzigstes
+wippe
+wippen
+wippend
+wippende
+wippendem
+wippenden
+wippender
+wippendes
+wippst
+wippt
+wippte
+wippten
+wipptest
+wipptet
+wir
+wirbele
+wirbellos
+wirbellose
+wirbellosem
+wirbellosen
+wirbelloser
+wirbelloses
+wirbeln
+wirbelnd
+wirbelnde
+wirbelndem
+wirbelnden
+wirbelnder
+wirbelndes
+wirbelst
+wirbelt
+wirbelte
+wirbelten
+wirbeltest
+wirbeltet
+wirble
+wirbst
+wirbt
+wird
+wirfst
+wirft
+wirke
+wirken
+wirkend
+wirkende
+wirkendem
+wirkenden
+wirkender
+wirkendes
+wirklich
+wirkliche
+wirklichem
+wirklichen
+wirklicher
+wirklichere
+wirklicherem
+wirklicheren
+wirklicherer
+wirklicheres
+wirkliches
+wirklichkeitsfremd
+wirklichkeitsfremde
+wirklichkeitsfremdem
+wirklichkeitsfremden
+wirklichkeitsfremder
+wirklichkeitsfremdere
+wirklichkeitsfremderem
+wirklichkeitsfremderen
+wirklichkeitsfremderer
+wirklichkeitsfremderes
+wirklichkeitsfremdes
+wirklichkeitsfremdste
+wirklichkeitsfremdstem
+wirklichkeitsfremdsten
+wirklichkeitsfremdster
+wirklichkeitsfremdstes
+wirklichkeitsgetreu
+wirklichkeitsgetreue
+wirklichkeitsgetreuem
+wirklichkeitsgetreuen
+wirklichkeitsgetreuer
+wirklichkeitsgetreues
+wirklichkeitsnah
+wirklichkeitsnahe
+wirklichkeitsnahem
+wirklichkeitsnahen
+wirklichkeitsnaher
+wirklichkeitsnahes
+wirklichkeitsnächste
+wirklichkeitsnächstem
+wirklichkeitsnächsten
+wirklichkeitsnächster
+wirklichkeitsnächstes
+wirklichkeitsnäher
+wirklichkeitsnähere
+wirklichkeitsnäherem
+wirklichkeitsnäheren
+wirklichkeitsnäherer
+wirklichkeitsnäheres
+wirklichste
+wirklichstem
+wirklichsten
+wirklichster
+wirklichstes
+wirksam
+wirksame
+wirksamem
+wirksamen
+wirksamer
+wirksamere
+wirksamerem
+wirksameren
+wirksamerer
+wirksameres
+wirksames
+wirksamste
+wirksamstem
+wirksamsten
+wirksamster
+wirksamstes
+wirkst
+wirkt
+wirkte
+wirkten
+wirktest
+wirktet
+wirkungslos
+wirkungslose
+wirkungslosem
+wirkungslosen
+wirkungsloser
+wirkungslosere
+wirkungsloserem
+wirkungsloseren
+wirkungsloserer
+wirkungsloseres
+wirkungsloses
+wirkungsloseste
+wirkungslosestem
+wirkungslosesten
+wirkungslosester
+wirkungslosestes
+wirkungsvoll
+wirkungsvolle
+wirkungsvollem
+wirkungsvollen
+wirkungsvoller
+wirkungsvollere
+wirkungsvollerem
+wirkungsvolleren
+wirkungsvollerer
+wirkungsvolleres
+wirkungsvolles
+wirkungsvollste
+wirkungsvollstem
+wirkungsvollsten
+wirkungsvollster
+wirkungsvollstes
+wirr
+wirre
+wirrem
+wirren
+wirrend
+wirrende
+wirrendem
+wirrenden
+wirrender
+wirrendes
+wirrer
+wirrere
+wirrerem
+wirreren
+wirrerer
+wirreres
+wirres
+wirrst
+wirrste
+wirrstem
+wirrsten
+wirrster
+wirrstes
+wirrt
+wirrte
+wirrten
+wirrtest
+wirrtet
+wirst
+wirtlich
+wirtliche
+wirtlichem
+wirtlichen
+wirtlicher
+wirtlichere
+wirtlicherem
+wirtlicheren
+wirtlicherer
+wirtlicheres
+wirtliches
+wirtlichste
+wirtlichstem
+wirtlichsten
+wirtlichster
+wirtlichstes
+wirtschafte
+wirtschaften
+wirtschaftend
+wirtschaftende
+wirtschaftendem
+wirtschaftenden
+wirtschaftender
+wirtschaftendes
+wirtschaftest
+wirtschaftet
+wirtschaftete
+wirtschafteten
+wirtschaftetest
+wirtschaftetet
+wirtschaftlich
+wirtschaftliche
+wirtschaftlichem
+wirtschaftlichen
+wirtschaftlicher
+wirtschaftlichere
+wirtschaftlicherem
+wirtschaftlicheren
+wirtschaftlicherer
+wirtschaftlicheres
+wirtschaftliches
+wirtschaftlichste
+wirtschaftlichstem
+wirtschaftlichsten
+wirtschaftlichster
+wirtschaftlichstes
+wirtschaftspolitisch
+wirtschaftspolitische
+wirtschaftspolitischem
+wirtschaftspolitischen
+wirtschaftspolitischer
+wirtschaftspolitisches
+wische
+wischen
+wischend
+wischende
+wischendem
+wischenden
+wischender
+wischendes
+wischest
+wischfest
+wischfeste
+wischfestem
+wischfesten
+wischfester
+wischfestes
+wischst
+wischt
+wischte
+wischten
+wischtest
+wischtet
+wispere
+wispern
+wispernd
+wispernde
+wisperndem
+wispernden
+wispernder
+wisperndes
+wisperst
+wispert
+wisperte
+wisperten
+wispertest
+wispertet
+wispre
+wissbegierig
+wissbegierige
+wissbegierigem
+wissbegierigen
+wissbegieriger
+wissbegierigere
+wissbegierigerem
+wissbegierigeren
+wissbegierigerer
+wissbegierigeres
+wissbegieriges
+wissbegierigste
+wissbegierigstem
+wissbegierigsten
+wissbegierigster
+wissbegierigstes
+wisse
+wissen
+wissend
+wissende
+wissendem
+wissenden
+wissender
+wissendere
+wissenderem
+wissenderen
+wissenderer
+wissenderes
+wissendes
+wissendste
+wissendstem
+wissendsten
+wissendster
+wissendstes
+wissensbasiert
+wissensbasierte
+wissensbasiertem
+wissensbasierten
+wissensbasierter
+wissensbasiertes
+wissenschaftlich
+wissenschaftliche
+wissenschaftlichem
+wissenschaftlichen
+wissenschaftlicher
+wissenschaftlichere
+wissenschaftlicherem
+wissenschaftlicheren
+wissenschaftlicherer
+wissenschaftlicheres
+wissenschaftliches
+wissenschaftlichste
+wissenschaftlichstem
+wissenschaftlichsten
+wissenschaftlichster
+wissenschaftlichstes
+wissenswert
+wissenswerte
+wissenswertem
+wissenswerten
+wissenswerter
+wissenswertere
+wissenswerterem
+wissenswerteren
+wissenswerterer
+wissenswerteres
+wissenswertes
+wissenswerteste
+wissenswertestem
+wissenswertesten
+wissenswertester
+wissenswertestes
+wissentlich
+wissentliche
+wissentlichem
+wissentlichen
+wissentlicher
+wissentlichere
+wissentlicherem
+wissentlicheren
+wissentlicherer
+wissentlicheres
+wissentliches
+wissentlichste
+wissentlichstem
+wissentlichsten
+wissentlichster
+wissentlichstes
+wisst
+wittere
+wittern
+witternd
+witternde
+witterndem
+witternden
+witternder
+witterndes
+witterst
+wittert
+witterte
+witterten
+wittertest
+wittertet
+witterungsbeständig
+witterungsbeständige
+witterungsbeständigem
+witterungsbeständigen
+witterungsbeständiger
+witterungsbeständigere
+witterungsbeständigerem
+witterungsbeständigeren
+witterungsbeständigerer
+witterungsbeständigeres
+witterungsbeständiges
+witterungsbeständigste
+witterungsbeständigstem
+witterungsbeständigsten
+witterungsbeständigster
+witterungsbeständigstes
+wittre
+witzele
+witzeln
+witzelnd
+witzelnde
+witzelndem
+witzelnden
+witzelnder
+witzelndes
+witzelst
+witzelt
+witzelte
+witzelten
+witzeltest
+witzeltet
+witzig
+witzige
+witzigem
+witzigen
+witziger
+witzigere
+witzigerem
+witzigeren
+witzigerer
+witzigeres
+witziges
+witzigste
+witzigstem
+witzigsten
+witzigster
+witzigstes
+witzle
+wo
+woanders
+wobei
+wochenlang
+wochenlange
+wochenlangem
+wochenlangen
+wochenlanger
+wochenlanges
+wochenweise
+wochenweisem
+wochenweisen
+wochenweiser
+wochenweises
+wodurch
+wofern
+wofür
+wog
+wogegen
+wogen
+wogst
+wogt
+woher
+wohin
+wohingegen
+wohinter
+wohl
+wohlangebracht
+wohlangebrachte
+wohlangebrachtem
+wohlangebrachten
+wohlangebrachter
+wohlangebrachtere
+wohlangebrachterem
+wohlangebrachteren
+wohlangebrachterer
+wohlangebrachteres
+wohlangebrachtes
+wohlangebrachteste
+wohlangebrachtestem
+wohlangebrachtesten
+wohlangebrachtester
+wohlangebrachtestes
+wohlanständig
+wohlanständige
+wohlanständigem
+wohlanständigen
+wohlanständiger
+wohlanständigere
+wohlanständigerem
+wohlanständigeren
+wohlanständigerer
+wohlanständigeres
+wohlanständiges
+wohlanständigste
+wohlanständigstem
+wohlanständigsten
+wohlanständigster
+wohlanständigstes
+wohlauf
+wohlbehalten
+wohlbehaltene
+wohlbehaltenem
+wohlbehaltenen
+wohlbehaltener
+wohlbehaltenere
+wohlbehaltenerem
+wohlbehalteneren
+wohlbehaltenerer
+wohlbehalteneres
+wohlbehaltenes
+wohlbehaltenste
+wohlbehaltenstem
+wohlbehaltensten
+wohlbehaltenster
+wohlbehaltenstes
+wohlbeleibt
+wohlbeleibte
+wohlbeleibtem
+wohlbeleibten
+wohlbeleibter
+wohlbeleibtere
+wohlbeleibterem
+wohlbeleibteren
+wohlbeleibterer
+wohlbeleibteres
+wohlbeleibtes
+wohlbeleibteste
+wohlbeleibtestem
+wohlbeleibtesten
+wohlbeleibtester
+wohlbeleibtestes
+wohlbetucht
+wohlbetuchte
+wohlbetuchtem
+wohlbetuchten
+wohlbetuchter
+wohlbetuchtes
+wohldefiniert
+wohldefinierte
+wohldefiniertem
+wohldefinierten
+wohldefinierter
+wohldefiniertes
+wohle
+wohlem
+wohlen
+wohler
+wohlere
+wohlerem
+wohleren
+wohlerer
+wohleres
+wohlerwogen
+wohlerwogene
+wohlerwogenem
+wohlerwogenen
+wohlerwogener
+wohlerwogenes
+wohlerzogen
+wohlerzogene
+wohlerzogenem
+wohlerzogenen
+wohlerzogener
+wohlerzogenere
+wohlerzogenerem
+wohlerzogeneren
+wohlerzogenerer
+wohlerzogeneres
+wohlerzogenes
+wohlerzogenste
+wohlerzogenstem
+wohlerzogensten
+wohlerzogenster
+wohlerzogenstes
+wohles
+wohlfeil
+wohlfeile
+wohlfeilem
+wohlfeilen
+wohlfeiler
+wohlfeilere
+wohlfeilerem
+wohlfeileren
+wohlfeilerer
+wohlfeileres
+wohlfeiles
+wohlfeilste
+wohlfeilstem
+wohlfeilsten
+wohlfeilster
+wohlfeilstes
+wohlgefällig
+wohlgefällige
+wohlgefälligem
+wohlgefälligen
+wohlgefälliger
+wohlgefälligere
+wohlgefälligerem
+wohlgefälligeren
+wohlgefälligerer
+wohlgefälligeres
+wohlgefälliges
+wohlgefälligste
+wohlgefälligstem
+wohlgefälligsten
+wohlgefälligster
+wohlgefälligstes
+wohlgefühlt
+wohlgemerkt
+wohlgemerkte
+wohlgemerktem
+wohlgemerkten
+wohlgemerkter
+wohlgemerktes
+wohlgemut
+wohlgenährt
+wohlgenährte
+wohlgenährtem
+wohlgenährten
+wohlgenährter
+wohlgenährtere
+wohlgenährterem
+wohlgenährteren
+wohlgenährterer
+wohlgenährteres
+wohlgenährtes
+wohlgenährteste
+wohlgenährtestem
+wohlgenährtesten
+wohlgenährtester
+wohlgenährtestes
+wohlgeplant
+wohlgeplante
+wohlgeplantem
+wohlgeplanten
+wohlgeplanter
+wohlgeplantes
+wohlgeraten
+wohlgeratene
+wohlgeratenem
+wohlgeratenen
+wohlgeratener
+wohlgeratenere
+wohlgeratenerem
+wohlgerateneren
+wohlgeratenerer
+wohlgerateneres
+wohlgeratenes
+wohlgeratenste
+wohlgeratenstem
+wohlgeratensten
+wohlgeratenster
+wohlgeratenstes
+wohlgesinnt
+wohlgesinnte
+wohlgesinntem
+wohlgesinnten
+wohlgesinnter
+wohlgesinntere
+wohlgesinnterem
+wohlgesinnteren
+wohlgesinnterer
+wohlgesinnteres
+wohlgesinntes
+wohlgesinnteste
+wohlgesinntestem
+wohlgesinntesten
+wohlgesinntester
+wohlgesinntestes
+wohlgesittet
+wohlgesittete
+wohlgesittetem
+wohlgesitteten
+wohlgesitteter
+wohlgesittetere
+wohlgesitteterem
+wohlgesitteteren
+wohlgesitteterer
+wohlgesitteteres
+wohlgesittetes
+wohlgesittetste
+wohlgesittetstem
+wohlgesittetsten
+wohlgesittetster
+wohlgesittetstes
+wohlgestaltet
+wohlgestaltete
+wohlgestaltetem
+wohlgestalteten
+wohlgestalteter
+wohlgestaltetere
+wohlgestalteterem
+wohlgestalteteren
+wohlgestalteterer
+wohlgestalteteres
+wohlgestaltetes
+wohlgestaltetste
+wohlgestaltetstem
+wohlgestaltetsten
+wohlgestaltetster
+wohlgestaltetstes
+wohlhabend
+wohlhabende
+wohlhabendem
+wohlhabenden
+wohlhabender
+wohlhabendere
+wohlhabenderem
+wohlhabenderen
+wohlhabenderer
+wohlhabenderes
+wohlhabendes
+wohlhabendste
+wohlhabendstem
+wohlhabendsten
+wohlhabendster
+wohlhabendstes
+wohlig
+wohlige
+wohligem
+wohligen
+wohliger
+wohligere
+wohligerem
+wohligeren
+wohligerer
+wohligeres
+wohliges
+wohligste
+wohligstem
+wohligsten
+wohligster
+wohligstes
+wohlklingend
+wohlklingende
+wohlklingendem
+wohlklingenden
+wohlklingender
+wohlklingendere
+wohlklingenderem
+wohlklingenderen
+wohlklingenderer
+wohlklingenderes
+wohlklingendes
+wohlklingendste
+wohlklingendstem
+wohlklingendsten
+wohlklingendster
+wohlklingendstes
+wohlmeinend
+wohlmeinende
+wohlmeinendem
+wohlmeinenden
+wohlmeinender
+wohlmeinendere
+wohlmeinenderem
+wohlmeinenderen
+wohlmeinenderer
+wohlmeinenderes
+wohlmeinendes
+wohlmeinendste
+wohlmeinendstem
+wohlmeinendsten
+wohlmeinendster
+wohlmeinendstes
+wohlorganisiert
+wohlorganisierte
+wohlorganisiertem
+wohlorganisierten
+wohlorganisierter
+wohlorganisiertes
+wohlriechend
+wohlriechende
+wohlriechendem
+wohlriechenden
+wohlriechender
+wohlriechendere
+wohlriechenderem
+wohlriechenderen
+wohlriechenderer
+wohlriechenderes
+wohlriechendes
+wohlriechendste
+wohlriechendstem
+wohlriechendsten
+wohlriechendster
+wohlriechendstes
+wohlschmeckend
+wohlschmeckende
+wohlschmeckendem
+wohlschmeckenden
+wohlschmeckender
+wohlschmeckendere
+wohlschmeckenderem
+wohlschmeckenderen
+wohlschmeckenderer
+wohlschmeckenderes
+wohlschmeckendes
+wohlschmeckendste
+wohlschmeckendstem
+wohlschmeckendsten
+wohlschmeckendster
+wohlschmeckendstes
+wohlste
+wohlstem
+wohlsten
+wohlster
+wohlstes
+wohltue
+wohltuend
+wohltuende
+wohltuendem
+wohltuenden
+wohltuender
+wohltuendere
+wohltuenderem
+wohltuenderen
+wohltuenderer
+wohltuenderes
+wohltuendes
+wohltuendste
+wohltuendstem
+wohltuendsten
+wohltuendster
+wohltuendstes
+wohltun
+wohltust
+wohltut
+wohltätig
+wohltätige
+wohltätigem
+wohltätigen
+wohltätiger
+wohltätiges
+wohlverdient
+wohlverdiente
+wohlverdientem
+wohlverdienten
+wohlverdienter
+wohlverdientere
+wohlverdienterem
+wohlverdienteren
+wohlverdienterer
+wohlverdienteres
+wohlverdientes
+wohlverdienteste
+wohlverdientestem
+wohlverdientesten
+wohlverdientester
+wohlverdientestes
+wohlverstanden
+wohlverstandene
+wohlverstandenem
+wohlverstandenen
+wohlverstandener
+wohlverstandenes
+wohlweislich
+wohlweisliche
+wohlweislichem
+wohlweislichen
+wohlweislicher
+wohlweislichere
+wohlweislicherem
+wohlweislicheren
+wohlweislicherer
+wohlweislicheres
+wohlweisliches
+wohlweislichste
+wohlweislichstem
+wohlweislichsten
+wohlweislichster
+wohlweislichstes
+wohlwollend
+wohlwollende
+wohlwollendem
+wohlwollenden
+wohlwollender
+wohlwollendes
+wohne
+wohnen
+wohnend
+wohnende
+wohnendem
+wohnenden
+wohnender
+wohnendes
+wohnhaft
+wohnhafte
+wohnhaftem
+wohnhaften
+wohnhafter
+wohnhaftes
+wohnlich
+wohnliche
+wohnlichem
+wohnlichen
+wohnlicher
+wohnlichere
+wohnlicherem
+wohnlicheren
+wohnlicherer
+wohnlicheres
+wohnliches
+wohnlichste
+wohnlichstem
+wohnlichsten
+wohnlichster
+wohnlichstes
+wohnst
+wohnt
+wohnte
+wohnten
+wohntest
+wohntet
+wohnungslos
+wohnungslose
+wohnungslosem
+wohnungslosen
+wohnungsloser
+wohnungsloses
+wolkenlos
+wolkenlose
+wolkenlosem
+wolkenlosen
+wolkenloser
+wolkenlosere
+wolkenloserem
+wolkenloseren
+wolkenloserer
+wolkenloseres
+wolkenloses
+wolkenloseste
+wolkenlosestem
+wolkenlosesten
+wolkenlosester
+wolkenlosestes
+wolkig
+wolkige
+wolkigem
+wolkigen
+wolkiger
+wolkigere
+wolkigerem
+wolkigeren
+wolkigerer
+wolkigeres
+wolkiges
+wolkigste
+wolkigstem
+wolkigsten
+wolkigster
+wolkigstes
+wolle
+wollen
+wollend
+wollende
+wollendem
+wollenden
+wollender
+wollendes
+wollene
+wollenem
+wollenen
+wollener
+wollenes
+wollig
+wollige
+wolligem
+wolligen
+wolliger
+wolligere
+wolligerem
+wolligeren
+wolligerer
+wolligeres
+wolliges
+wolligste
+wolligstem
+wolligsten
+wolligster
+wolligstes
+wollt
+wollte
+wollten
+wolltest
+wolltet
+wollüstig
+wollüstige
+wollüstigem
+wollüstigen
+wollüstiger
+wollüstigere
+wollüstigerem
+wollüstigeren
+wollüstigerer
+wollüstigeres
+wollüstiges
+wollüstigste
+wollüstigstem
+wollüstigsten
+wollüstigster
+wollüstigstes
+womit
+womöglich
+womögliche
+womöglichem
+womöglichen
+womöglicher
+womögliches
+wonach
+wonnetrunken
+wonnetrunkene
+wonnetrunkenem
+wonnetrunkenen
+wonnetrunkener
+wonnetrunkenere
+wonnetrunkenerem
+wonnetrunkeneren
+wonnetrunkenerer
+wonnetrunkeneres
+wonnetrunkenes
+wonnetrunkenste
+wonnetrunkenstem
+wonnetrunkensten
+wonnetrunkenster
+wonnetrunkenstes
+wonnig
+wonnige
+wonnigem
+wonnigen
+wonniger
+wonnigere
+wonnigerem
+wonnigeren
+wonnigerer
+wonnigeres
+wonniges
+wonnigste
+wonnigstem
+wonnigsten
+wonnigster
+wonnigstes
+woran
+worauf
+woraufhin
+woraus
+worden
+worin
+wortarm
+wortarme
+wortarmem
+wortarmen
+wortarmer
+wortarmes
+wortbrüchig
+wortbrüchige
+wortbrüchigem
+wortbrüchigen
+wortbrüchiger
+wortbrüchigere
+wortbrüchigerem
+wortbrüchigeren
+wortbrüchigerer
+wortbrüchigeres
+wortbrüchiges
+wortbrüchigste
+wortbrüchigstem
+wortbrüchigsten
+wortbrüchigster
+wortbrüchigstes
+wortgetreu
+wortgetreue
+wortgetreuem
+wortgetreuen
+wortgetreuer
+wortgetreuere
+wortgetreuerem
+wortgetreueren
+wortgetreuerer
+wortgetreueres
+wortgetreues
+wortgetreueste
+wortgetreuestem
+wortgetreuesten
+wortgetreuester
+wortgetreuestes
+wortgetreuste
+wortgetreustem
+wortgetreusten
+wortgetreuster
+wortgetreustes
+wortgewandt
+wortgewandte
+wortgewandtem
+wortgewandten
+wortgewandter
+wortgewandtere
+wortgewandterem
+wortgewandteren
+wortgewandterer
+wortgewandteres
+wortgewandtes
+wortgewandteste
+wortgewandtestem
+wortgewandtesten
+wortgewandtester
+wortgewandtestes
+wortkarg
+wortkarge
+wortkargem
+wortkargen
+wortkarger
+wortkargere
+wortkargerem
+wortkargeren
+wortkargerer
+wortkargeres
+wortkarges
+wortkargste
+wortkargstem
+wortkargsten
+wortkargster
+wortkargstes
+wortlos
+wortlose
+wortlosem
+wortlosen
+wortloser
+wortlosere
+wortloserem
+wortloseren
+wortloserer
+wortloseres
+wortloses
+wortloseste
+wortlosestem
+wortlosesten
+wortlosester
+wortlosestes
+wortreich
+wortreiche
+wortreichem
+wortreichen
+wortreicher
+wortreichere
+wortreicherem
+wortreicheren
+wortreicherer
+wortreicheres
+wortreiches
+wortreichste
+wortreichstem
+wortreichsten
+wortreichster
+wortreichstes
+wortweise
+wortwörtlich
+wortwörtliche
+wortwörtlichem
+wortwörtlichen
+wortwörtlicher
+wortwörtliches
+wortärmer
+wortärmere
+wortärmerem
+wortärmeren
+wortärmerer
+wortärmeres
+wortärmste
+wortärmstem
+wortärmsten
+wortärmster
+wortärmstes
+worum
+worunter
+worüber
+wovon
+wovor
+wozu
+wrang
+wrangen
+wrangst
+wrangt
+wringe
+wringen
+wringend
+wringende
+wringendem
+wringenden
+wringender
+wringendes
+wringst
+wringt
+wuchere
+wucherhaft
+wucherhafte
+wucherhaftem
+wucherhaften
+wucherhafter
+wucherhaftere
+wucherhafterem
+wucherhafteren
+wucherhafterer
+wucherhafteres
+wucherhaftes
+wucherhafteste
+wucherhaftestem
+wucherhaftesten
+wucherhaftester
+wucherhaftestes
+wucherisch
+wucherische
+wucherischem
+wucherischen
+wucherischer
+wucherischere
+wucherischerem
+wucherischeren
+wucherischerer
+wucherischeres
+wucherisches
+wucherischste
+wucherischstem
+wucherischsten
+wucherischster
+wucherischstes
+wuchern
+wuchernd
+wuchernde
+wucherndem
+wuchernden
+wuchernder
+wucherndere
+wuchernderem
+wuchernderen
+wuchernderer
+wuchernderes
+wucherndes
+wucherndste
+wucherndstem
+wucherndsten
+wucherndster
+wucherndstes
+wucherst
+wuchert
+wucherte
+wucherten
+wuchertest
+wuchertet
+wuchre
+wuchs
+wuchsen
+wuchsest
+wuchst
+wuchte
+wuchten
+wuchtend
+wuchtende
+wuchtendem
+wuchtenden
+wuchtender
+wuchtendes
+wuchtest
+wuchtet
+wuchtete
+wuchteten
+wuchtetest
+wuchtetet
+wuchtig
+wuchtige
+wuchtigem
+wuchtigen
+wuchtiger
+wuchtigere
+wuchtigerem
+wuchtigeren
+wuchtigerer
+wuchtigeres
+wuchtiges
+wuchtigste
+wuchtigstem
+wuchtigsten
+wuchtigster
+wuchtigstes
+wulstig
+wulstige
+wulstigem
+wulstigen
+wulstiger
+wulstigere
+wulstigerem
+wulstigeren
+wulstigerer
+wulstigeres
+wulstiges
+wulstigste
+wulstigstem
+wulstigsten
+wulstigster
+wulstigstes
+wund
+wunde
+wundem
+wunden
+wunder
+wunderbar
+wunderbare
+wunderbarem
+wunderbaren
+wunderbarer
+wunderbarere
+wunderbarerem
+wunderbareren
+wunderbarerer
+wunderbareres
+wunderbares
+wunderbarste
+wunderbarstem
+wunderbarsten
+wunderbarster
+wunderbarstes
+wundere
+wunderem
+wunderen
+wunderer
+wunderes
+wunderlich
+wunderliche
+wunderlichem
+wunderlichen
+wunderlicher
+wunderlichere
+wunderlicherem
+wunderlicheren
+wunderlicherer
+wunderlicheres
+wunderliches
+wunderlichste
+wunderlichstem
+wunderlichsten
+wunderlichster
+wunderlichstes
+wundern
+wundernd
+wundernde
+wunderndem
+wundernden
+wundernder
+wunderndes
+wundernehmen
+wundernehmend
+wundernehmende
+wundernehmendem
+wundernehmenden
+wundernehmender
+wundernehmendes
+wundersam
+wundersame
+wundersamem
+wundersamen
+wundersamer
+wundersamere
+wundersamerem
+wundersameren
+wundersamerer
+wundersameres
+wundersames
+wundersamste
+wundersamstem
+wundersamsten
+wundersamster
+wundersamstes
+wunderschön
+wunderschöne
+wunderschönem
+wunderschönen
+wunderschöner
+wunderschönes
+wunderst
+wundert
+wunderte
+wunderten
+wundertest
+wundertet
+wundertätig
+wundertätige
+wundertätigem
+wundertätigen
+wundertätiger
+wundertätigere
+wundertätigerem
+wundertätigeren
+wundertätigerer
+wundertätigeres
+wundertätiges
+wundertätigste
+wundertätigstem
+wundertätigsten
+wundertätigster
+wundertätigstes
+wundervoll
+wundervolle
+wundervollem
+wundervollen
+wundervoller
+wundervollere
+wundervollerem
+wundervolleren
+wundervollerer
+wundervolleres
+wundervolles
+wundervollste
+wundervollstem
+wundervollsten
+wundervollster
+wundervollstes
+wundes
+wundre
+wundste
+wundstem
+wundsten
+wundster
+wundstes
+wunschgemäß
+wunschgemäße
+wunschgemäßem
+wunschgemäßen
+wunschgemäßer
+wunschgemäßere
+wunschgemäßerem
+wunschgemäßeren
+wunschgemäßerer
+wunschgemäßeres
+wunschgemäßes
+wunschgemäßeste
+wunschgemäßestem
+wunschgemäßesten
+wunschgemäßester
+wunschgemäßestes
+wunschlos
+wunschlose
+wunschlosem
+wunschlosen
+wunschloser
+wunschlosere
+wunschloserem
+wunschloseren
+wunschloserer
+wunschloseres
+wunschloses
+wunschloseste
+wunschlosestem
+wunschlosesten
+wunschlosester
+wunschlosestes
+wurde
+wurden
+wurdest
+wurdet
+wurme
+wurmen
+wurmend
+wurmende
+wurmendem
+wurmenden
+wurmender
+wurmendes
+wurmförmig
+wurmförmige
+wurmförmigem
+wurmförmigen
+wurmförmiger
+wurmförmigere
+wurmförmigerem
+wurmförmigeren
+wurmförmigerer
+wurmförmigeres
+wurmförmiges
+wurmförmigste
+wurmförmigstem
+wurmförmigsten
+wurmförmigster
+wurmförmigstes
+wurmkrank
+wurmkranke
+wurmkrankem
+wurmkranken
+wurmkranker
+wurmkrankere
+wurmkrankerem
+wurmkrankeren
+wurmkrankerer
+wurmkrankeres
+wurmkrankes
+wurmkrankeste
+wurmkrankestem
+wurmkrankesten
+wurmkrankester
+wurmkrankestes
+wurmst
+wurmstichig
+wurmstichige
+wurmstichigem
+wurmstichigen
+wurmstichiger
+wurmstichigere
+wurmstichigerem
+wurmstichigeren
+wurmstichigerer
+wurmstichigeres
+wurmstichiges
+wurmstichigste
+wurmstichigstem
+wurmstichigsten
+wurmstichigster
+wurmstichigstes
+wurmt
+wurmte
+wurmten
+wurmtest
+wurmtet
+wurschtele
+wurschteln
+wurschtelnd
+wurschtelnde
+wurschtelndem
+wurschtelnden
+wurschtelnder
+wurschtelndes
+wurschtelst
+wurschtelt
+wurschtelte
+wurschtelten
+wurschteltest
+wurschteltet
+wurschtle
+wurstele
+wursteln
+wurstelnd
+wurstelnde
+wurstelndem
+wurstelnden
+wurstelnder
+wurstelndere
+wurstelnderem
+wurstelnderen
+wurstelnderer
+wurstelnderes
+wurstelndes
+wurstelndste
+wurstelndstem
+wurstelndsten
+wurstelndster
+wurstelndstes
+wurstelst
+wurstelt
+wurstelte
+wurstelten
+wursteltest
+wursteltet
+wurstig
+wurstige
+wurstigem
+wurstigen
+wurstiger
+wurstigere
+wurstigerem
+wurstigeren
+wurstigerer
+wurstigeres
+wurstiges
+wurstigste
+wurstigstem
+wurstigsten
+wurstigster
+wurstigstes
+wurstle
+wurzele
+wurzeln
+wurzelnd
+wurzelnde
+wurzelndem
+wurzelnden
+wurzelnder
+wurzelndes
+wurzelst
+wurzelt
+wurzelte
+wurzelten
+wurzeltest
+wurzeltet
+wurzle
+wusch
+wuschen
+wuschest
+wuscht
+wusele
+wuseln
+wuselnd
+wuselnde
+wuselndem
+wuselnden
+wuselnder
+wuselndes
+wuselst
+wuselt
+wuselte
+wuselten
+wuseltest
+wuseltet
+wusle
+wusste
+wussten
+wusstest
+wusstet
+wutentbrannt
+wutentbrannte
+wutentbranntem
+wutentbrannten
+wutentbrannter
+wutentbranntere
+wutentbrannterem
+wutentbrannteren
+wutentbrannterer
+wutentbrannteres
+wutentbranntes
+wutentbrannteste
+wutentbranntestem
+wutentbranntesten
+wutentbranntester
+wutentbranntestes
+wutschnaubend
+wutschnaubende
+wutschnaubendem
+wutschnaubenden
+wutschnaubender
+wutschnaubendere
+wutschnaubenderem
+wutschnaubenderen
+wutschnaubenderer
+wutschnaubenderes
+wutschnaubendes
+wutschnaubendste
+wutschnaubendstem
+wutschnaubendsten
+wutschnaubendster
+wutschnaubendstes
+wutschäumend
+wutschäumende
+wutschäumendem
+wutschäumenden
+wutschäumender
+wutschäumendere
+wutschäumenderem
+wutschäumenderen
+wutschäumenderer
+wutschäumenderes
+wutschäumendes
+wutschäumendste
+wutschäumendstem
+wutschäumendsten
+wutschäumendster
+wutschäumendstes
+wächst
+wägbar
+wägbare
+wägbarem
+wägbaren
+wägbarer
+wägbarere
+wägbarerem
+wägbareren
+wägbarerer
+wägbareres
+wägbares
+wägbarste
+wägbarstem
+wägbarsten
+wägbarster
+wägbarstes
+wäge
+wägen
+wägend
+wägende
+wägendem
+wägenden
+wägender
+wägendes
+wägst
+wägt
+wägte
+wägten
+wägtest
+wägtet
+wählbar
+wählbare
+wählbarem
+wählbaren
+wählbarer
+wählbarere
+wählbarerem
+wählbareren
+wählbarerer
+wählbareres
+wählbares
+wählbarste
+wählbarstem
+wählbarsten
+wählbarster
+wählbarstes
+wähle
+wählen
+wählend
+wählende
+wählendem
+wählenden
+wählender
+wählendes
+wählerisch
+wählerische
+wählerischem
+wählerischen
+wählerischer
+wählerischere
+wählerischerem
+wählerischeren
+wählerischerer
+wählerischeres
+wählerisches
+wählerischste
+wählerischstem
+wählerischsten
+wählerischster
+wählerischstes
+wählfähig
+wählfähige
+wählfähigem
+wählfähigen
+wählfähiger
+wählfähiges
+wählst
+wählt
+wählte
+wählten
+wähltest
+wähltet
+wähne
+wähnen
+wähnend
+wähnende
+wähnendem
+wähnenden
+wähnender
+wähnendes
+wähnst
+wähnt
+wähnte
+wähnten
+wähntest
+wähntet
+währe
+währen
+während
+währenddessen
+währende
+währendem
+währenden
+währender
+währendes
+währst
+währt
+währte
+währten
+währtest
+währtet
+wälze
+wälzen
+wälzend
+wälzende
+wälzendem
+wälzenden
+wälzender
+wälzendes
+wälzest
+wälzt
+wälzte
+wälzten
+wälztest
+wälztet
+wär
+wäre
+wären
+wärest
+wäret
+wärme
+wärmebeständig
+wärmebeständige
+wärmebeständigem
+wärmebeständigen
+wärmebeständiger
+wärmebeständigere
+wärmebeständigerem
+wärmebeständigeren
+wärmebeständigerer
+wärmebeständigeres
+wärmebeständiges
+wärmebeständigste
+wärmebeständigstem
+wärmebeständigsten
+wärmebeständigster
+wärmebeständigstes
+wärmen
+wärmend
+wärmende
+wärmendem
+wärmenden
+wärmender
+wärmendes
+wärmer
+wärmere
+wärmerem
+wärmeren
+wärmerer
+wärmeres
+wärmst
+wärmste
+wärmstem
+wärmsten
+wärmster
+wärmstes
+wärmt
+wärmte
+wärmten
+wärmtest
+wärmtet
+wärst
+wärt
+wäschst
+wäscht
+wässerig
+wässerige
+wässerigem
+wässerigen
+wässeriger
+wässerigere
+wässerigerem
+wässerigeren
+wässerigerer
+wässerigeres
+wässeriges
+wässerigste
+wässerigstem
+wässerigsten
+wässerigster
+wässerigstes
+wässrig
+wässrige
+wässrigem
+wässrigen
+wässriger
+wässrigere
+wässrigerem
+wässrigeren
+wässrigerer
+wässrigeres
+wässriges
+wässrigste
+wässrigstem
+wässrigsten
+wässrigster
+wässrigstes
+wöchentlich
+wöchentliche
+wöchentlichem
+wöchentlichen
+wöchentlicher
+wöchentliches
+wölbe
+wölben
+wölbend
+wölbende
+wölbendem
+wölbenden
+wölbender
+wölbendes
+wölbst
+wölbt
+wölbte
+wölbten
+wölbtest
+wölbtet
+wörtlich
+wörtliche
+wörtlichem
+wörtlichen
+wörtlicher
+wörtlichere
+wörtlicherem
+wörtlicheren
+wörtlicherer
+wörtlicheres
+wörtliches
+wörtlichste
+wörtlichstem
+wörtlichsten
+wörtlichster
+wörtlichstes
+wühle
+wühlen
+wühlend
+wühlende
+wühlendem
+wühlenden
+wühlender
+wühlendes
+wühlerisch
+wühlerische
+wühlerischem
+wühlerischen
+wühlerischer
+wühlerischere
+wühlerischerem
+wühlerischeren
+wühlerischerer
+wühlerischeres
+wühlerisches
+wühlerischste
+wühlerischstem
+wühlerischsten
+wühlerischster
+wühlerischstes
+wühlst
+wühlt
+wühlte
+wühlten
+wühltest
+wühltet
+wünschbar
+wünschbare
+wünschbarem
+wünschbaren
+wünschbarer
+wünschbares
+wünsche
+wünschen
+wünschend
+wünschende
+wünschendem
+wünschenden
+wünschender
+wünschendes
+wünschenswert
+wünschenswerte
+wünschenswertem
+wünschenswerten
+wünschenswerter
+wünschenswertere
+wünschenswerterem
+wünschenswerteren
+wünschenswerterer
+wünschenswerteres
+wünschenswertes
+wünschenswerteste
+wünschenswertestem
+wünschenswertesten
+wünschenswertester
+wünschenswertestes
+wünschest
+wünschst
+wünscht
+wünschte
+wünschten
+wünschtest
+wünschtet
+würde
+würden
+würdest
+würdet
+würdevoll
+würdevolle
+würdevollem
+würdevollen
+würdevoller
+würdevollere
+würdevollerem
+würdevolleren
+würdevollerer
+würdevolleres
+würdevolles
+würdevollste
+würdevollstem
+würdevollsten
+würdevollster
+würdevollstes
+würdig
+würdige
+würdigem
+würdigen
+würdigend
+würdigende
+würdigendem
+würdigenden
+würdigender
+würdigendes
+würdiger
+würdigere
+würdigerem
+würdigeren
+würdigerer
+würdigeres
+würdiges
+würdigst
+würdigste
+würdigstem
+würdigsten
+würdigster
+würdigstes
+würdigt
+würdigte
+würdigten
+würdigtest
+würdigtet
+würfele
+würfeln
+würfelnd
+würfelnde
+würfelndem
+würfelnden
+würfelnder
+würfelndes
+würfelst
+würfelt
+würfelte
+würfelten
+würfeltest
+würfeltet
+würfle
+würfqqelig
+würfqqelige
+würfqqeligem
+würfqqeligen
+würfqqeliger
+würfqqeliges
+würfqqlig
+würfqqlige
+würfqqligem
+würfqqligen
+würfqqliger
+würfqqliges
+würge
+würgen
+würgend
+würgende
+würgendem
+würgenden
+würgender
+würgendes
+würgst
+würgt
+würgte
+würgten
+würgtest
+würgtet
+würze
+würzen
+würzend
+würzende
+würzendem
+würzenden
+würzender
+würzendes
+würzest
+würzig
+würzige
+würzigem
+würzigen
+würziger
+würzigere
+würzigerem
+würzigeren
+würzigerer
+würzigeres
+würziges
+würzigste
+würzigstem
+würzigsten
+würzigster
+würzigstes
+würzt
+würzte
+würzten
+würztest
+würztet
+wüsste
+wüssten
+wüsstest
+wüsstet
+wüst
+wüste
+wüstem
+wüsten
+wüstend
+wüstende
+wüstendem
+wüstenden
+wüstender
+wüstendes
+wüster
+wüstere
+wüsterem
+wüsteren
+wüsterer
+wüsteres
+wüstes
+wüstest
+wüsteste
+wüstestem
+wüstesten
+wüstester
+wüstestes
+wüstet
+wüstete
+wüsteten
+wüstetest
+wüstetet
+wüte
+wüten
+wütend
+wütende
+wütendem
+wütenden
+wütender
+wütendere
+wütenderem
+wütenderen
+wütenderer
+wütenderes
+wütendes
+wütendste
+wütendstem
+wütendsten
+wütendster
+wütendstes
+wütest
+wütet
+wütete
+wüteten
+wütetest
+wütetet
+xerographiere
+xerographieren
+xerographierst
+xerographiert
+xerographierte
+xerographiertem
+xerographierten
+xerographierter
+xerographiertes
+xerographiertest
+xerographiertet
+xi
+zackig
+zackige
+zackigem
+zackigen
+zackiger
+zackiges
+zaghaft
+zaghafte
+zaghaftem
+zaghaften
+zaghafter
+zaghaftes
+zahlbar
+zahlbare
+zahlbarem
+zahlbaren
+zahlbarer
+zahlbares
+zahle
+zahlen
+zahlend
+zahlende
+zahlendem
+zahlenden
+zahlender
+zahlendes
+zahlenmäßig
+zahlenmäßige
+zahlenmäßigem
+zahlenmäßigen
+zahlenmäßiger
+zahlenmäßiges
+zahlentheoretisch
+zahlentheoretische
+zahlentheoretischem
+zahlentheoretischen
+zahlentheoretischer
+zahlentheoretisches
+zahllos
+zahllose
+zahllosem
+zahllosen
+zahlloser
+zahlloses
+zahlreich
+zahlreiche
+zahlreichem
+zahlreichen
+zahlreicher
+zahlreichere
+zahlreicherem
+zahlreicheren
+zahlreicherer
+zahlreicheres
+zahlreiches
+zahlreichste
+zahlreichstem
+zahlreichsten
+zahlreichster
+zahlreichstes
+zahlst
+zahlt
+zahlte
+zahlten
+zahltest
+zahltet
+zahlungsfähig
+zahlungsfähige
+zahlungsfähigem
+zahlungsfähigen
+zahlungsfähiger
+zahlungsfähigere
+zahlungsfähigerem
+zahlungsfähigeren
+zahlungsfähigerer
+zahlungsfähigeres
+zahlungsfähiges
+zahlungsfähigste
+zahlungsfähigstem
+zahlungsfähigsten
+zahlungsfähigster
+zahlungsfähigstes
+zahlungskräftig
+zahlungskräftige
+zahlungskräftigem
+zahlungskräftigen
+zahlungskräftiger
+zahlungskräftiges
+zahlungsunfähig
+zahlungsunfähige
+zahlungsunfähigem
+zahlungsunfähigen
+zahlungsunfähiger
+zahlungsunfähigere
+zahlungsunfähigerem
+zahlungsunfähigeren
+zahlungsunfähigerer
+zahlungsunfähigeres
+zahlungsunfähiges
+zahlungsunfähigste
+zahlungsunfähigstem
+zahlungsunfähigsten
+zahlungsunfähigster
+zahlungsunfähigstes
+zahlungsunwillig
+zahlungsunwillige
+zahlungsunwilligem
+zahlungsunwilligen
+zahlungsunwilliger
+zahlungsunwilliges
+zahm
+zahme
+zahmem
+zahmen
+zahmer
+zahmere
+zahmerem
+zahmeren
+zahmerer
+zahmeres
+zahmes
+zahmste
+zahmstem
+zahmsten
+zahmster
+zahmstes
+zahnlos
+zahnlose
+zahnlosem
+zahnlosen
+zahnloser
+zahnloses
+zahnärztlich
+zahnärztliche
+zahnärztlichem
+zahnärztlichen
+zahnärztlicher
+zahnärztliches
+zanke
+zanken
+zankend
+zankende
+zankendem
+zankenden
+zankender
+zankendes
+zankst
+zankt
+zankte
+zankten
+zanktest
+zanktet
+zapfe
+zapfen
+zapfend
+zapfende
+zapfendem
+zapfenden
+zapfender
+zapfendes
+zapfst
+zapft
+zapfte
+zapften
+zapftest
+zapftet
+zappele
+zappelig
+zappelige
+zappeligem
+zappeligen
+zappeliger
+zappeligere
+zappeligerem
+zappeligeren
+zappeligerer
+zappeligeres
+zappeliges
+zappeligste
+zappeligstem
+zappeligsten
+zappeligster
+zappeligstes
+zappeln
+zappelnd
+zappelnde
+zappelndem
+zappelnden
+zappelnder
+zappelndes
+zappelst
+zappelt
+zappelte
+zappelten
+zappeltest
+zappeltet
+zappenduster
+zapple
+zapplig
+zapplige
+zappligem
+zappligen
+zappliger
+zappligere
+zappligerem
+zappligeren
+zappligerer
+zappligeres
+zappliges
+zappligste
+zappligstem
+zappligsten
+zappligster
+zappligstes
+zart
+zarte
+zartem
+zarten
+zarter
+zartere
+zarterem
+zarteren
+zarterer
+zarteres
+zartes
+zarteste
+zartestem
+zartesten
+zartester
+zartestes
+zaubere
+zauberhaft
+zauberhafte
+zauberhaftem
+zauberhaften
+zauberhafter
+zauberhaftere
+zauberhafterem
+zauberhafteren
+zauberhafterer
+zauberhafteres
+zauberhaftes
+zauberhafteste
+zauberhaftestem
+zauberhaftesten
+zauberhaftester
+zauberhaftestes
+zaubern
+zaubernd
+zaubernde
+zauberndem
+zaubernden
+zaubernder
+zauberndes
+zauberst
+zaubert
+zauberte
+zauberten
+zaubertest
+zaubertet
+zaubre
+zaudere
+zaudern
+zaudernd
+zaudernde
+zauderndem
+zaudernden
+zaudernder
+zauderndes
+zauderst
+zaudert
+zauderte
+zauderten
+zaudertest
+zaudertet
+zaudre
+zehn
+zehnfach
+zehnfache
+zehnfachem
+zehnfachen
+zehnfacher
+zehnfaches
+zehnjährig
+zehnjährige
+zehnjährigem
+zehnjährigen
+zehnjähriger
+zehnjähriges
+zehnmalig
+zehnmalige
+zehnmaligem
+zehnmaligen
+zehnmaliger
+zehnmaliges
+zehnprozentig
+zehnprozentige
+zehnprozentigem
+zehnprozentigen
+zehnprozentiger
+zehnprozentiges
+zehnt
+zehntausend
+zehntausende
+zehntausenden
+zehnte
+zehntels
+zehntem
+zehnten
+zehntens
+zehnter
+zehntes
+zehntägig
+zehntägige
+zehntägigem
+zehntägigen
+zehntägiger
+zehntägiges
+zehnwöchig
+zehnwöchige
+zehnwöchigem
+zehnwöchigen
+zehnwöchiger
+zehnwöchiges
+zehre
+zehren
+zehrend
+zehrende
+zehrendem
+zehrenden
+zehrender
+zehrendes
+zehrst
+zehrt
+zehrte
+zehrten
+zehrtest
+zehrtet
+zeichengetreu
+zeichengetreue
+zeichengetreuem
+zeichengetreuen
+zeichengetreuer
+zeichengetreues
+zeichne
+zeichnen
+zeichnend
+zeichnende
+zeichnendem
+zeichnenden
+zeichnender
+zeichnendes
+zeichnerisch
+zeichnerische
+zeichnerischem
+zeichnerischen
+zeichnerischer
+zeichnerisches
+zeichnest
+zeichnet
+zeichnete
+zeichneten
+zeichnetest
+zeichnetet
+zeichnungsberechtigt
+zeichnungsberechtigte
+zeichnungsberechtigtem
+zeichnungsberechtigten
+zeichnungsberechtigter
+zeichnungsberechtigtes
+zeig
+zeige
+zeigen
+zeigend
+zeigende
+zeigendem
+zeigenden
+zeigender
+zeigendes
+zeigst
+zeigt
+zeigte
+zeigten
+zeigtest
+zeigtet
+zeilenweise
+zeitabhängig
+zeitabhängige
+zeitabhängigem
+zeitabhängigen
+zeitabhängiger
+zeitabhängiges
+zeitaufwendig
+zeitaufwendige
+zeitaufwendigem
+zeitaufwendigen
+zeitaufwendiger
+zeitaufwendiges
+zeitaufwändig
+zeitaufwändige
+zeitaufwändigem
+zeitaufwändigen
+zeitaufwändiger
+zeitaufwändigere
+zeitaufwändigerem
+zeitaufwändigeren
+zeitaufwändigerer
+zeitaufwändigeres
+zeitaufwändiges
+zeitaufwändigste
+zeitaufwändigstem
+zeitaufwändigsten
+zeitaufwändigster
+zeitaufwändigstes
+zeitgemäß
+zeitgemäße
+zeitgemäßem
+zeitgemäßen
+zeitgemäßer
+zeitgemäßes
+zeitgenössisch
+zeitgenössische
+zeitgenössischem
+zeitgenössischen
+zeitgenössischer
+zeitgenössisches
+zeitig
+zeitige
+zeitigem
+zeitigen
+zeitiger
+zeitiges
+zeitigst
+zeitigt
+zeitkritisch
+zeitkritische
+zeitkritischem
+zeitkritischen
+zeitkritischer
+zeitkritisches
+zeitlebens
+zeitlich
+zeitliche
+zeitlichem
+zeitlichen
+zeitlicher
+zeitliches
+zeitlos
+zeitlose
+zeitlosem
+zeitlosen
+zeitloser
+zeitloses
+zeitnah
+zeitnahe
+zeitnahem
+zeitnahen
+zeitnaher
+zeitnahes
+zeitraubend
+zeitraubende
+zeitraubendem
+zeitraubenden
+zeitraubender
+zeitraubendes
+zeitspare
+zeitsparen
+zeitsparend
+zeitsparende
+zeitsparendem
+zeitsparenden
+zeitsparender
+zeitsparendes
+zeitsparst
+zeitspart
+zeitunabhängig
+zeitunabhängige
+zeitunabhängigem
+zeitunabhängigen
+zeitunabhängiger
+zeitunabhängiges
+zeitweilig
+zeitweilige
+zeitweiligem
+zeitweiligen
+zeitweiliger
+zeitweiliges
+zeitweise
+zeitweisem
+zeitweisen
+zeitweiser
+zeitweises
+zelebriere
+zelebrieren
+zelebrierend
+zelebrierende
+zelebrierendem
+zelebrierenden
+zelebrierender
+zelebrierendes
+zelebrierst
+zelebriert
+zelebrierte
+zelebriertem
+zelebrierten
+zelebrierter
+zelebriertes
+zelebriertest
+zelebriertet
+zellenförmig
+zellenförmige
+zellenförmigem
+zellenförmigen
+zellenförmiger
+zellenförmiges
+zellstoffhaltig
+zellstoffhaltige
+zellstoffhaltigem
+zellstoffhaltigen
+zellstoffhaltiger
+zellstoffhaltiges
+zelte
+zelten
+zeltend
+zeltende
+zeltendem
+zeltenden
+zeltender
+zeltendes
+zeltest
+zeltet
+zeltete
+zelteten
+zeltetest
+zeltetet
+zementiere
+zementieren
+zementierend
+zementierende
+zementierendem
+zementierenden
+zementierender
+zementierendes
+zementierst
+zementiert
+zementierte
+zementiertem
+zementierten
+zementierter
+zementiertes
+zementiertest
+zementiertet
+zensiere
+zensieren
+zensierend
+zensierende
+zensierendem
+zensierenden
+zensierender
+zensierendes
+zensierst
+zensiert
+zensierte
+zensiertem
+zensierten
+zensierter
+zensiertes
+zensiertest
+zensiertet
+zentnerschwer
+zentnerschwere
+zentnerschwerem
+zentnerschweren
+zentnerschwerer
+zentnerschweres
+zentral
+zentralamerikanisch
+zentralamerikanische
+zentralamerikanischem
+zentralamerikanischen
+zentralamerikanischer
+zentralamerikanisches
+zentrale
+zentralem
+zentralen
+zentraler
+zentralere
+zentralerem
+zentraleren
+zentralerer
+zentraleres
+zentrales
+zentralisiere
+zentralisieren
+zentralisierend
+zentralisierende
+zentralisierendem
+zentralisierenden
+zentralisierender
+zentralisierendes
+zentralisierst
+zentralisiert
+zentralisierte
+zentralisiertem
+zentralisierten
+zentralisierter
+zentralisiertere
+zentralisierterem
+zentralisierteren
+zentralisierterer
+zentralisierteres
+zentralisiertes
+zentralisiertest
+zentralisierteste
+zentralisiertestem
+zentralisiertesten
+zentralisiertester
+zentralisiertestes
+zentralisiertet
+zentralistisch
+zentralistische
+zentralistischem
+zentralistischen
+zentralistischer
+zentralistisches
+zentralste
+zentralstem
+zentralsten
+zentralster
+zentralstes
+zentriere
+zentrieren
+zentrierend
+zentrierende
+zentrierendem
+zentrierenden
+zentrierender
+zentrierendes
+zentrierst
+zentriert
+zentrierte
+zentriertem
+zentrierten
+zentrierter
+zentriertes
+zentriertest
+zentriertet
+zentrifugal
+zentrifugale
+zentrifugalem
+zentrifugalen
+zentrifugaler
+zentrifugales
+zentripetal
+zentripetale
+zentripetalem
+zentripetalen
+zentripetaler
+zentripetales
+zentrisch
+zentrische
+zentrischem
+zentrischen
+zentrischer
+zentrisches
+zerbarst
+zerbarsten
+zerbarstest
+zerbarstet
+zerbarstst
+zerbeiße
+zerbeißen
+zerbeißend
+zerbeißende
+zerbeißendem
+zerbeißenden
+zerbeißender
+zerbeißendes
+zerbeißest
+zerbeißt
+zerberste
+zerbersten
+zerberstend
+zerberstende
+zerberstendem
+zerberstenden
+zerberstender
+zerberstendes
+zerberstet
+zerbirst
+zerbissen
+zerbissene
+zerbissenem
+zerbissenen
+zerbissener
+zerbissenes
+zerbombt
+zerbombte
+zerbombtem
+zerbombten
+zerbombter
+zerbombtes
+zerborsten
+zerborstene
+zerborstenem
+zerborstenen
+zerborstener
+zerborstenes
+zerbrach
+zerbrachen
+zerbrachest
+zerbrachst
+zerbracht
+zerbreche
+zerbrechen
+zerbrechend
+zerbrechende
+zerbrechendem
+zerbrechenden
+zerbrechender
+zerbrechendes
+zerbrechlich
+zerbrechliche
+zerbrechlichem
+zerbrechlichen
+zerbrechlicher
+zerbrechlichere
+zerbrechlicherem
+zerbrechlicheren
+zerbrechlicherer
+zerbrechlicheres
+zerbrechliches
+zerbrechlichste
+zerbrechlichstem
+zerbrechlichsten
+zerbrechlichster
+zerbrechlichstes
+zerbrecht
+zerbrichst
+zerbricht
+zerbrochen
+zerbrochene
+zerbrochenem
+zerbrochenen
+zerbrochener
+zerbrochenes
+zerbröckele
+zerbröckeln
+zerbröckelnd
+zerbröckelnde
+zerbröckelndem
+zerbröckelnden
+zerbröckelnder
+zerbröckelndes
+zerbröckelst
+zerbröckelt
+zerbröckelte
+zerbröckeltem
+zerbröckelten
+zerbröckelter
+zerbröckeltes
+zerbröckeltest
+zerbröckeltet
+zerbröckle
+zerdeppere
+zerdeppern
+zerdeppernd
+zerdeppernde
+zerdepperndem
+zerdeppernden
+zerdeppernder
+zerdepperndes
+zerdepperst
+zerdeppert
+zerdepperte
+zerdeppertem
+zerdepperten
+zerdepperter
+zerdeppertes
+zerdeppertest
+zerdeppertet
+zerdeppre
+zerdrücke
+zerdrücken
+zerdrückend
+zerdrückende
+zerdrückendem
+zerdrückenden
+zerdrückender
+zerdrückendes
+zerdrückst
+zerdrückt
+zerdrückte
+zerdrücktem
+zerdrückten
+zerdrückter
+zerdrücktere
+zerdrückterem
+zerdrückteren
+zerdrückterer
+zerdrückteres
+zerdrücktes
+zerdrücktest
+zerdrückteste
+zerdrücktestem
+zerdrücktesten
+zerdrücktester
+zerdrücktestes
+zerdrücktet
+zeremoniell
+zeremonielle
+zeremoniellem
+zeremoniellen
+zeremonieller
+zeremonielles
+zeremoniös
+zeremoniöse
+zeremoniösem
+zeremoniösen
+zeremoniöser
+zeremoniösere
+zeremoniöserem
+zeremoniöseren
+zeremoniöserer
+zeremoniöseres
+zeremoniöses
+zeremoniöseste
+zeremoniösestem
+zeremoniösesten
+zeremoniösester
+zeremoniösestes
+zerfahren
+zerfahrene
+zerfahrenem
+zerfahrenen
+zerfahrener
+zerfahrenere
+zerfahrenerem
+zerfahreneren
+zerfahrenerer
+zerfahreneres
+zerfahrenes
+zerfahrenste
+zerfahrenstem
+zerfahrensten
+zerfahrenster
+zerfahrenstes
+zerfalle
+zerfallen
+zerfallend
+zerfallende
+zerfallendem
+zerfallenden
+zerfallender
+zerfallendes
+zerfallene
+zerfallenem
+zerfallenen
+zerfallener
+zerfallenere
+zerfallenerem
+zerfalleneren
+zerfallenerer
+zerfalleneres
+zerfallenes
+zerfallenste
+zerfallenstem
+zerfallensten
+zerfallenster
+zerfallenstes
+zerfallt
+zerfetze
+zerfetzen
+zerfetzend
+zerfetzende
+zerfetzendem
+zerfetzenden
+zerfetzender
+zerfetzendes
+zerfetzest
+zerfetzt
+zerfetzte
+zerfetztem
+zerfetzten
+zerfetzter
+zerfetztere
+zerfetzterem
+zerfetzteren
+zerfetzterer
+zerfetzteres
+zerfetztes
+zerfetztest
+zerfetzteste
+zerfetztestem
+zerfetztesten
+zerfetztester
+zerfetztestes
+zerfetztet
+zerfiel
+zerfielen
+zerfielst
+zerfielt
+zerflattere
+zerflattern
+zerflatternd
+zerflatternde
+zerflatterndem
+zerflatternden
+zerflatternder
+zerflatterndes
+zerflatterst
+zerflattert
+zerflatterte
+zerflatterten
+zerflattertest
+zerflattertet
+zerflattre
+zerfleische
+zerfleischen
+zerfleischend
+zerfleischende
+zerfleischendem
+zerfleischenden
+zerfleischender
+zerfleischendes
+zerfleischest
+zerfleischst
+zerfleischt
+zerfleischte
+zerfleischtem
+zerfleischten
+zerfleischter
+zerfleischtes
+zerfleischtest
+zerfleischtet
+zerfließe
+zerfließen
+zerfließend
+zerfließende
+zerfließendem
+zerfließenden
+zerfließender
+zerfließendes
+zerfließest
+zerfließt
+zerfloss
+zerflossen
+zerflossene
+zerflossenem
+zerflossenen
+zerflossener
+zerflossenes
+zerflossest
+zerflosst
+zerfresse
+zerfressen
+zerfressend
+zerfressende
+zerfressendem
+zerfressenden
+zerfressender
+zerfressendes
+zerfressene
+zerfressenem
+zerfressenen
+zerfressener
+zerfressenes
+zerfresst
+zerfällst
+zerfällt
+zergangen
+zergangene
+zergangenem
+zergangenen
+zergangener
+zergangenes
+zergehe
+zergehen
+zergehend
+zergehende
+zergehendem
+zergehenden
+zergehender
+zergehendes
+zergehst
+zergeht
+zerging
+zergingen
+zergingst
+zergingt
+zergliedere
+zergliedern
+zergliedernd
+zergliedernde
+zergliederndem
+zergliedernden
+zergliedernder
+zergliederndes
+zergliederst
+zergliedert
+zergliederte
+zergliedertem
+zergliederten
+zergliederter
+zergliedertes
+zergliedertest
+zergliedertet
+zergliedre
+zerhacke
+zerhacken
+zerhackend
+zerhackende
+zerhackendem
+zerhackenden
+zerhackender
+zerhackendes
+zerhackst
+zerhackt
+zerhackte
+zerhacktem
+zerhackten
+zerhackter
+zerhacktes
+zerhacktest
+zerhacktet
+zerkaue
+zerkauen
+zerkauend
+zerkauende
+zerkauendem
+zerkauenden
+zerkauender
+zerkauendes
+zerkaust
+zerkaut
+zerkaute
+zerkautem
+zerkauten
+zerkauter
+zerkautes
+zerkautest
+zerkautet
+zerkleinere
+zerkleinern
+zerkleinernd
+zerkleinernde
+zerkleinerndem
+zerkleinernden
+zerkleinernder
+zerkleinerndes
+zerkleinerst
+zerkleinert
+zerkleinerte
+zerkleinertem
+zerkleinerten
+zerkleinerter
+zerkleinertes
+zerkleinertest
+zerkleinertet
+zerkleinre
+zerklüftet
+zerklüftete
+zerklüftetem
+zerklüfteten
+zerklüfteter
+zerklüftetere
+zerklüfteterem
+zerklüfteteren
+zerklüfteterer
+zerklüfteteres
+zerklüftetes
+zerklüftetste
+zerklüftetstem
+zerklüftetsten
+zerklüftetster
+zerklüftetstes
+zerknirscht
+zerknirschte
+zerknirschtem
+zerknirschten
+zerknirschter
+zerknirschtere
+zerknirschterem
+zerknirschteren
+zerknirschterer
+zerknirschteres
+zerknirschtes
+zerknirschteste
+zerknirschtestem
+zerknirschtesten
+zerknirschtester
+zerknirschtestes
+zerknittere
+zerknittern
+zerknitternd
+zerknitternde
+zerknitterndem
+zerknitternden
+zerknitternder
+zerknitterndes
+zerknitterst
+zerknittert
+zerknitterte
+zerknittertem
+zerknitterten
+zerknitterter
+zerknittertere
+zerknitterterem
+zerknitterteren
+zerknitterterer
+zerknitterteres
+zerknittertes
+zerknittertest
+zerknitterteste
+zerknittertestem
+zerknittertesten
+zerknittertester
+zerknittertestes
+zerknittertet
+zerknittre
+zerknülle
+zerknüllen
+zerknüllend
+zerknüllende
+zerknüllendem
+zerknüllenden
+zerknüllender
+zerknüllendes
+zerknüllst
+zerknüllt
+zerknüllte
+zerknülltem
+zerknüllten
+zerknüllter
+zerknülltes
+zerknülltest
+zerknülltet
+zerkoche
+zerkochen
+zerkochend
+zerkochende
+zerkochendem
+zerkochenden
+zerkochender
+zerkochendes
+zerkochst
+zerkocht
+zerkochte
+zerkochtem
+zerkochten
+zerkochter
+zerkochtes
+zerkochtest
+zerkochtet
+zerkratze
+zerkratzen
+zerkratzend
+zerkratzende
+zerkratzendem
+zerkratzenden
+zerkratzender
+zerkratzendes
+zerkratzest
+zerkratzt
+zerkratzte
+zerkratztem
+zerkratzten
+zerkratzter
+zerkratztes
+zerkratztest
+zerkratztet
+zerlasse
+zerlassen
+zerlassend
+zerlassende
+zerlassendem
+zerlassenden
+zerlassender
+zerlassendes
+zerlassene
+zerlassenem
+zerlassenen
+zerlassener
+zerlassenes
+zerlasst
+zerlegbar
+zerlegbare
+zerlegbarem
+zerlegbaren
+zerlegbarer
+zerlegbares
+zerlege
+zerlegen
+zerlegend
+zerlegende
+zerlegendem
+zerlegenden
+zerlegender
+zerlegendes
+zerlegst
+zerlegt
+zerlegte
+zerlegtem
+zerlegten
+zerlegter
+zerlegtes
+zerlegtest
+zerlegtet
+zerlesen
+zerlesene
+zerlesenem
+zerlesenen
+zerlesener
+zerlesenes
+zerließ
+zerließen
+zerließest
+zerließt
+zerlumpt
+zerlumpte
+zerlumptem
+zerlumpten
+zerlumpter
+zerlumptere
+zerlumpterem
+zerlumpteren
+zerlumpterer
+zerlumpteres
+zerlumptes
+zerlumpteste
+zerlumptestem
+zerlumptesten
+zerlumptester
+zerlumptestes
+zerlässt
+zermahle
+zermahlen
+zermahlend
+zermahlende
+zermahlendem
+zermahlenden
+zermahlender
+zermahlendes
+zermahlene
+zermahlenem
+zermahlenen
+zermahlener
+zermahlenes
+zermahlst
+zermahlt
+zermahlte
+zermahlten
+zermahltest
+zermahltet
+zermalme
+zermalmen
+zermalmend
+zermalmende
+zermalmendem
+zermalmenden
+zermalmender
+zermalmendes
+zermalmst
+zermalmt
+zermalmte
+zermalmtem
+zermalmten
+zermalmter
+zermalmtes
+zermalmtest
+zermalmtet
+zermartere
+zermartern
+zermarternd
+zermarternde
+zermarterndem
+zermarternden
+zermarternder
+zermarterndes
+zermarterst
+zermartert
+zermarterte
+zermartertem
+zermarterten
+zermarterter
+zermartertes
+zermartertest
+zermartertet
+zermartre
+zermürbe
+zermürben
+zermürbend
+zermürbende
+zermürbendem
+zermürbenden
+zermürbender
+zermürbendere
+zermürbenderem
+zermürbenderen
+zermürbenderer
+zermürbenderes
+zermürbendes
+zermürbendste
+zermürbendstem
+zermürbendsten
+zermürbendster
+zermürbendstes
+zermürbst
+zermürbt
+zermürbte
+zermürbtem
+zermürbten
+zermürbter
+zermürbtes
+zermürbtest
+zermürbtet
+zernage
+zernagen
+zernagend
+zernagende
+zernagendem
+zernagenden
+zernagender
+zernagendes
+zernagst
+zernagt
+zernagte
+zernagtem
+zernagten
+zernagter
+zernagtes
+zernagtest
+zernagtet
+zerpflücke
+zerpflücken
+zerpflückend
+zerpflückende
+zerpflückendem
+zerpflückenden
+zerpflückender
+zerpflückendes
+zerpflückst
+zerpflückt
+zerpflückte
+zerpflücktem
+zerpflückten
+zerpflückter
+zerpflücktes
+zerpflücktest
+zerpflücktet
+zerplatze
+zerplatzen
+zerplatzend
+zerplatzende
+zerplatzendem
+zerplatzenden
+zerplatzender
+zerplatzendes
+zerplatzest
+zerplatzt
+zerplatzte
+zerplatztem
+zerplatzten
+zerplatzter
+zerplatztes
+zerplatztest
+zerplatztet
+zerquetsche
+zerquetschen
+zerquetschend
+zerquetschende
+zerquetschendem
+zerquetschenden
+zerquetschender
+zerquetschendes
+zerquetschest
+zerquetschst
+zerquetscht
+zerquetschte
+zerquetschtem
+zerquetschten
+zerquetschter
+zerquetschtes
+zerquetschtest
+zerquetschtet
+zerrann
+zerrannen
+zerrannst
+zerrannt
+zerre
+zerrede
+zerreden
+zerredend
+zerredende
+zerredendem
+zerredenden
+zerredender
+zerredendes
+zerredest
+zerredet
+zerredete
+zerredetem
+zerredeten
+zerredeter
+zerredetes
+zerredetest
+zerredetet
+zerreibe
+zerreiben
+zerreibend
+zerreibende
+zerreibendem
+zerreibenden
+zerreibender
+zerreibendes
+zerreibst
+zerreibt
+zerreißbar
+zerreißbare
+zerreißbarem
+zerreißbaren
+zerreißbarer
+zerreißbares
+zerreiße
+zerreißen
+zerreißend
+zerreißende
+zerreißendem
+zerreißenden
+zerreißender
+zerreißendes
+zerreißest
+zerreißt
+zerren
+zerrend
+zerrende
+zerrendem
+zerrenden
+zerrender
+zerrendes
+zerrieb
+zerrieben
+zerriebene
+zerriebenem
+zerriebenen
+zerriebener
+zerriebenes
+zerriebst
+zerriebt
+zerrinne
+zerrinnen
+zerrinnend
+zerrinnende
+zerrinnendem
+zerrinnenden
+zerrinnender
+zerrinnendes
+zerrinnst
+zerrinnt
+zerriss
+zerrissen
+zerrissene
+zerrissenem
+zerrissenen
+zerrissener
+zerrissenes
+zerrissest
+zerrisst
+zerronnen
+zerronnene
+zerronnenem
+zerronnenen
+zerronnener
+zerronnenes
+zerrst
+zerrt
+zerrte
+zerrten
+zerrtest
+zerrtet
+zerrütte
+zerrütten
+zerrüttend
+zerrüttende
+zerrüttendem
+zerrüttenden
+zerrüttender
+zerrüttendes
+zerrüttest
+zerrüttet
+zerrüttete
+zerrüttetem
+zerrütteten
+zerrütteter
+zerrüttetes
+zerrüttetest
+zerrüttetet
+zerschelle
+zerschellen
+zerschellend
+zerschellende
+zerschellendem
+zerschellenden
+zerschellender
+zerschellendes
+zerschellst
+zerschellt
+zerschellte
+zerschelltem
+zerschellten
+zerschellter
+zerschelltes
+zerschelltest
+zerschelltet
+zerschieße
+zerschießen
+zerschießend
+zerschießende
+zerschießendem
+zerschießenden
+zerschießender
+zerschießendes
+zerschießest
+zerschießt
+zerschlage
+zerschlagen
+zerschlagend
+zerschlagende
+zerschlagendem
+zerschlagenden
+zerschlagender
+zerschlagendes
+zerschlagene
+zerschlagenem
+zerschlagenen
+zerschlagener
+zerschlagenes
+zerschlagst
+zerschlagt
+zerschlug
+zerschlugen
+zerschlugst
+zerschlugt
+zerschlägst
+zerschlägt
+zerschmelze
+zerschmelzen
+zerschmelzend
+zerschmelzende
+zerschmelzendem
+zerschmelzenden
+zerschmelzender
+zerschmelzendes
+zerschmelzt
+zerschmettere
+zerschmettern
+zerschmetternd
+zerschmetternde
+zerschmetterndem
+zerschmetternden
+zerschmetternder
+zerschmetterndes
+zerschmetterst
+zerschmettert
+zerschmetterte
+zerschmettertem
+zerschmetterten
+zerschmetterter
+zerschmettertes
+zerschmettertest
+zerschmettertet
+zerschmettre
+zerschmilzest
+zerschmilzt
+zerschmolz
+zerschmolzen
+zerschmolzene
+zerschmolzenem
+zerschmolzenen
+zerschmolzener
+zerschmolzenes
+zerschmolzest
+zerschmolzt
+zerschneide
+zerschneiden
+zerschneidend
+zerschneidende
+zerschneidendem
+zerschneidenden
+zerschneidender
+zerschneidendes
+zerschneidest
+zerschneidet
+zerschnitt
+zerschnitten
+zerschnittene
+zerschnittenem
+zerschnittenen
+zerschnittener
+zerschnittenes
+zerschnittest
+zerschnittet
+zerschnittst
+zerschoss
+zerschossen
+zerschossene
+zerschossenem
+zerschossenen
+zerschossener
+zerschossenes
+zerschossest
+zerschosst
+zerschramme
+zerschrammen
+zerschrammend
+zerschrammende
+zerschrammendem
+zerschrammenden
+zerschrammender
+zerschrammendes
+zerschrammst
+zerschrammt
+zerschrammte
+zerschrammtem
+zerschrammten
+zerschrammter
+zerschrammtere
+zerschrammterem
+zerschrammteren
+zerschrammterer
+zerschrammteres
+zerschrammtes
+zerschrammtest
+zerschrammteste
+zerschrammtestem
+zerschrammtesten
+zerschrammtester
+zerschrammtestes
+zerschrammtet
+zersetze
+zersetzen
+zersetzend
+zersetzende
+zersetzendem
+zersetzenden
+zersetzender
+zersetzendere
+zersetzenderem
+zersetzenderen
+zersetzenderer
+zersetzenderes
+zersetzendes
+zersetzest
+zersetzt
+zersetzte
+zersetztem
+zersetzten
+zersetzter
+zersetztes
+zersetztest
+zersetztet
+zerspalte
+zerspalten
+zerspaltend
+zerspaltende
+zerspaltendem
+zerspaltenden
+zerspaltender
+zerspaltendes
+zerspaltene
+zerspaltenem
+zerspaltenen
+zerspaltener
+zerspaltenes
+zerspaltest
+zerspaltet
+zerspaltete
+zerspalteten
+zerspaltetest
+zerspaltetet
+zerspane
+zerspanen
+zerspanend
+zerspanende
+zerspanendem
+zerspanenden
+zerspanender
+zerspanendes
+zerspanst
+zerspant
+zerspante
+zerspantem
+zerspanten
+zerspanter
+zerspantes
+zerspantest
+zerspantet
+zersplittere
+zersplittern
+zersplitternd
+zersplitternde
+zersplitterndem
+zersplitternden
+zersplitternder
+zersplitterndes
+zersplitterst
+zersplittert
+zersplitterte
+zersplittertem
+zersplitterten
+zersplitterter
+zersplittertes
+zersplittertest
+zersplittertet
+zersplittre
+zersprang
+zersprangen
+zersprangst
+zersprangt
+zersprenge
+zersprengen
+zersprengend
+zersprengende
+zersprengendem
+zersprengenden
+zersprengender
+zersprengendes
+zersprengst
+zersprengt
+zersprengte
+zersprengtem
+zersprengten
+zersprengter
+zersprengtes
+zersprengtest
+zersprengtet
+zerspringe
+zerspringen
+zerspringend
+zerspringende
+zerspringendem
+zerspringenden
+zerspringender
+zerspringendes
+zerspringst
+zerspringt
+zersprungen
+zersprungene
+zersprungenem
+zersprungenen
+zersprungener
+zersprungenes
+zerstach
+zerstachen
+zerstachest
+zerstachst
+zerstacht
+zerstampfe
+zerstampfen
+zerstampfend
+zerstampfende
+zerstampfendem
+zerstampfenden
+zerstampfender
+zerstampfendes
+zerstampfst
+zerstampft
+zerstampfte
+zerstampftem
+zerstampften
+zerstampfter
+zerstampftes
+zerstampftest
+zerstampftet
+zersteche
+zerstechen
+zerstechend
+zerstechende
+zerstechendem
+zerstechenden
+zerstechender
+zerstechendes
+zerstecht
+zerstichst
+zersticht
+zerstiebe
+zerstieben
+zerstiebend
+zerstiebende
+zerstiebendem
+zerstiebenden
+zerstiebender
+zerstiebendes
+zerstiebene
+zerstiebenem
+zerstiebenen
+zerstiebener
+zerstiebenes
+zerstiebst
+zerstiebt
+zerstieß
+zerstießen
+zerstießest
+zerstießt
+zerstochen
+zerstochene
+zerstochenem
+zerstochenen
+zerstochener
+zerstochenes
+zerstoße
+zerstoßen
+zerstoßend
+zerstoßende
+zerstoßendem
+zerstoßenden
+zerstoßender
+zerstoßendes
+zerstoßene
+zerstoßenem
+zerstoßenen
+zerstoßener
+zerstoßenes
+zerstoßt
+zerstreite
+zerstreiten
+zerstreitend
+zerstreitende
+zerstreitendem
+zerstreitenden
+zerstreitender
+zerstreitendes
+zerstreitest
+zerstreitet
+zerstreue
+zerstreuen
+zerstreuend
+zerstreuende
+zerstreuendem
+zerstreuenden
+zerstreuender
+zerstreuendes
+zerstreust
+zerstreut
+zerstreute
+zerstreutem
+zerstreuten
+zerstreuter
+zerstreutere
+zerstreuterem
+zerstreuteren
+zerstreuterer
+zerstreuteres
+zerstreutes
+zerstreutest
+zerstreuteste
+zerstreutestem
+zerstreutesten
+zerstreutester
+zerstreutestes
+zerstreutet
+zerstritt
+zerstritten
+zerstrittene
+zerstrittenem
+zerstrittenen
+zerstrittener
+zerstrittenes
+zerstrittest
+zerstrittet
+zerstrittst
+zerstäube
+zerstäuben
+zerstäubend
+zerstäubende
+zerstäubendem
+zerstäubenden
+zerstäubender
+zerstäubendes
+zerstäubst
+zerstäubt
+zerstäubte
+zerstäubtem
+zerstäubten
+zerstäubter
+zerstäubtes
+zerstäubtest
+zerstäubtet
+zerstörbar
+zerstörbare
+zerstörbarem
+zerstörbaren
+zerstörbarer
+zerstörbarere
+zerstörbarerem
+zerstörbareren
+zerstörbarerer
+zerstörbareres
+zerstörbares
+zerstörbarste
+zerstörbarstem
+zerstörbarsten
+zerstörbarster
+zerstörbarstes
+zerstöre
+zerstören
+zerstörend
+zerstörende
+zerstörendem
+zerstörenden
+zerstörender
+zerstörendes
+zerstörerisch
+zerstörerische
+zerstörerischem
+zerstörerischen
+zerstörerischer
+zerstörerischere
+zerstörerischerem
+zerstörerischeren
+zerstörerischerer
+zerstörerischeres
+zerstörerisches
+zerstörerischste
+zerstörerischstem
+zerstörerischsten
+zerstörerischster
+zerstörerischstes
+zerstörst
+zerstört
+zerstörte
+zerstörtem
+zerstörten
+zerstörter
+zerstörtes
+zerstörtest
+zerstörtet
+zerstößt
+zerstückele
+zerstückeln
+zerstückelnd
+zerstückelnde
+zerstückelndem
+zerstückelnden
+zerstückelnder
+zerstückelndes
+zerstückelst
+zerstückelt
+zerstückelte
+zerstückeltem
+zerstückelten
+zerstückelter
+zerstückeltes
+zerstückeltest
+zerstückeltet
+zerstückle
+zersäge
+zersägen
+zersägend
+zersägende
+zersägendem
+zersägenden
+zersägender
+zersägendes
+zersägst
+zersägt
+zersägte
+zersägtem
+zersägten
+zersägter
+zersägtes
+zersägtest
+zersägtet
+zerteile
+zerteilen
+zerteilend
+zerteilende
+zerteilendem
+zerteilenden
+zerteilender
+zerteilendes
+zerteilst
+zerteilt
+zerteilte
+zerteiltem
+zerteilten
+zerteilter
+zerteiltes
+zerteiltest
+zerteiltet
+zertifiziere
+zertifizieren
+zertifizierend
+zertifizierende
+zertifizierendem
+zertifizierenden
+zertifizierender
+zertifizierendes
+zertifizierst
+zertifiziert
+zertifizierte
+zertifiziertem
+zertifizierten
+zertifizierter
+zertifiziertes
+zertifiziertest
+zertifiziertet
+zertrampele
+zertrampeln
+zertrampelnd
+zertrampelnde
+zertrampelndem
+zertrampelnden
+zertrampelnder
+zertrampelndes
+zertrampelst
+zertrampelt
+zertrampelte
+zertrampeltem
+zertrampelten
+zertrampelter
+zertrampeltes
+zertrampeltest
+zertrampeltet
+zertrample
+zertrat
+zertraten
+zertratest
+zertratet
+zertratst
+zertrete
+zertreten
+zertretend
+zertretende
+zertretendem
+zertretenden
+zertretender
+zertretendes
+zertretene
+zertretenem
+zertretenen
+zertretener
+zertretenes
+zertretet
+zertritt
+zertrittst
+zertrümmere
+zertrümmern
+zertrümmernd
+zertrümmernde
+zertrümmerndem
+zertrümmernden
+zertrümmernder
+zertrümmerndes
+zertrümmerst
+zertrümmert
+zertrümmerte
+zertrümmertem
+zertrümmerten
+zertrümmerter
+zertrümmertes
+zertrümmertest
+zertrümmertet
+zertrümmre
+zerwühle
+zerwühlen
+zerwühlend
+zerwühlende
+zerwühlendem
+zerwühlenden
+zerwühlender
+zerwühlendes
+zerwühlst
+zerwühlt
+zerwühlte
+zerwühltem
+zerwühlten
+zerwühlter
+zerwühltere
+zerwühlterem
+zerwühlteren
+zerwühlterer
+zerwühlteres
+zerwühltes
+zerwühltest
+zerwühlteste
+zerwühltestem
+zerwühltesten
+zerwühltester
+zerwühltestes
+zerwühltet
+zerzause
+zerzausen
+zerzausend
+zerzausende
+zerzausendem
+zerzausenden
+zerzausender
+zerzausendes
+zerzausest
+zerzaust
+zerzauste
+zerzaustem
+zerzausten
+zerzauster
+zerzaustere
+zerzausterem
+zerzausteren
+zerzausterer
+zerzausteres
+zerzaustes
+zerzaustest
+zerzausteste
+zerzaustestem
+zerzaustesten
+zerzaustester
+zerzaustestes
+zerzaustet
+zeta
+zetere
+zetern
+zeternd
+zeternde
+zeterndem
+zeternden
+zeternder
+zeterndes
+zeterst
+zetert
+zeterte
+zeterten
+zetertest
+zetertet
+zetre
+zettele
+zetteln
+zettelnd
+zettelnde
+zettelndem
+zettelnden
+zettelnder
+zettelndes
+zettelst
+zettelt
+zettelte
+zettelten
+zetteltest
+zetteltet
+zettle
+zeuge
+zeugen
+zeugend
+zeugende
+zeugendem
+zeugenden
+zeugender
+zeugendes
+zeugst
+zeugt
+zeugte
+zeugten
+zeugtest
+zeugtet
+zeugungsfähig
+zeugungsfähige
+zeugungsfähigem
+zeugungsfähigen
+zeugungsfähiger
+zeugungsfähigere
+zeugungsfähigerem
+zeugungsfähigeren
+zeugungsfähigerer
+zeugungsfähigeres
+zeugungsfähiges
+zeugungsfähigste
+zeugungsfähigstem
+zeugungsfähigsten
+zeugungsfähigster
+zeugungsfähigstes
+zeugungsunfähig
+zeugungsunfähige
+zeugungsunfähigem
+zeugungsunfähigen
+zeugungsunfähiger
+zeugungsunfähiges
+zickig
+zickige
+zickigem
+zickigen
+zickiger
+zickiges
+ziehe
+ziehen
+ziehend
+ziehende
+ziehendem
+ziehenden
+ziehender
+ziehendes
+ziehst
+zieht
+zielbewusst
+zielbewusste
+zielbewusstem
+zielbewussten
+zielbewusster
+zielbewusstere
+zielbewussterem
+zielbewussteren
+zielbewussterer
+zielbewussteres
+zielbewusstes
+zielbewussteste
+zielbewusstestem
+zielbewusstesten
+zielbewusstester
+zielbewusstestes
+ziele
+zielen
+zielend
+zielende
+zielendem
+zielenden
+zielender
+zielendes
+zielgenau
+zielgenaue
+zielgenauem
+zielgenauen
+zielgenauer
+zielgenauere
+zielgenauerem
+zielgenaueren
+zielgenauerer
+zielgenaueres
+zielgenaues
+zielgenaueste
+zielgenauestem
+zielgenauesten
+zielgenauester
+zielgenauestes
+zielgenauste
+zielgenaustem
+zielgenausten
+zielgenauster
+zielgenaustes
+zielgerichtet
+zielgerichtete
+zielgerichtetem
+zielgerichteten
+zielgerichteter
+zielgerichtetere
+zielgerichteterem
+zielgerichteteren
+zielgerichteterer
+zielgerichteteres
+zielgerichtetes
+zielgerichtetste
+zielgerichtetstem
+zielgerichtetsten
+zielgerichtetster
+zielgerichtetstes
+ziellos
+ziellose
+ziellosem
+ziellosen
+zielloser
+ziellosere
+zielloserem
+zielloseren
+zielloserer
+zielloseres
+zielloses
+zielloseste
+ziellosestem
+ziellosesten
+ziellosester
+ziellosestes
+zielsicher
+zielsichere
+zielsicherem
+zielsicheren
+zielsicherer
+zielsicherere
+zielsichererem
+zielsichereren
+zielsichererer
+zielsichereres
+zielsicheres
+zielsicherste
+zielsicherstem
+zielsichersten
+zielsicherster
+zielsicherstes
+zielst
+zielstrebig
+zielstrebige
+zielstrebigem
+zielstrebigen
+zielstrebiger
+zielstrebigere
+zielstrebigerem
+zielstrebigeren
+zielstrebigerer
+zielstrebigeres
+zielstrebiges
+zielstrebigste
+zielstrebigstem
+zielstrebigsten
+zielstrebigster
+zielstrebigstes
+zielt
+zielte
+zielten
+zieltest
+zieltet
+zieme
+ziemen
+ziemend
+ziemende
+ziemendem
+ziemenden
+ziemender
+ziemendes
+ziemlich
+ziemliche
+ziemlichem
+ziemlichen
+ziemlicher
+ziemliches
+ziemst
+ziemt
+ziemte
+ziemten
+ziemtest
+ziemtet
+ziere
+zieren
+zierend
+zierende
+zierendem
+zierenden
+zierender
+zierendes
+zierlich
+zierliche
+zierlichem
+zierlichen
+zierlicher
+zierlichere
+zierlicherem
+zierlicheren
+zierlicherer
+zierlicheres
+zierliches
+zierlichste
+zierlichstem
+zierlichsten
+zierlichster
+zierlichstes
+zierst
+ziert
+zierte
+zierten
+ziertest
+ziertet
+ziffrig
+ziffrige
+ziffrigem
+ziffrigen
+ziffriger
+ziffriges
+zigste
+zigstem
+zigsten
+zigster
+zigstes
+zigtausend
+zigtausende
+zimmere
+zimmerig
+zimmerige
+zimmerigem
+zimmerigen
+zimmeriger
+zimmeriges
+zimmern
+zimmernd
+zimmernde
+zimmerndem
+zimmernden
+zimmernder
+zimmerndes
+zimmerst
+zimmert
+zimmerte
+zimmerten
+zimmertest
+zimmertet
+zimmre
+zimmrig
+zimmrige
+zimmrigem
+zimmrigen
+zimmriger
+zimmriges
+zimperlich
+zimperliche
+zimperlichem
+zimperlichen
+zimperlicher
+zimperlichere
+zimperlicherem
+zimperlicheren
+zimperlicherer
+zimperlicheres
+zimperliches
+zimperlichste
+zimperlichstem
+zimperlichsten
+zimperlichster
+zimperlichstes
+zinkig
+zinkige
+zinkigem
+zinkigen
+zinkiger
+zinkiges
+zinnern
+zinnerne
+zinnernem
+zinnernen
+zinnerner
+zinnernes
+zinsesverzinst
+zinsfrei
+zinsfreie
+zinsfreiem
+zinsfreien
+zinsfreier
+zinsfreies
+zinslos
+zinslose
+zinslosem
+zinslosen
+zinsloser
+zinsloses
+zionistisch
+zionistische
+zionistischem
+zionistischen
+zionistischer
+zionistisches
+zirka
+zirkele
+zirkeln
+zirkelnd
+zirkelnde
+zirkelndem
+zirkelnden
+zirkelnder
+zirkelndes
+zirkelst
+zirkelt
+zirkelte
+zirkelten
+zirkeltest
+zirkeltet
+zirkle
+zirkuliere
+zirkulieren
+zirkulierend
+zirkulierende
+zirkulierendem
+zirkulierenden
+zirkulierender
+zirkulierendes
+zirkulierst
+zirkuliert
+zirkulierte
+zirkuliertem
+zirkulierten
+zirkulierter
+zirkuliertes
+zirkuliertest
+zirkuliertet
+zirpe
+zirpen
+zirpend
+zirpende
+zirpendem
+zirpenden
+zirpender
+zirpendes
+zirpst
+zirpt
+zirpte
+zirpten
+zirptest
+zirptet
+zische
+zischele
+zischeln
+zischelnd
+zischelnde
+zischelndem
+zischelnden
+zischelnder
+zischelndes
+zischelst
+zischelt
+zischelte
+zischelten
+zischeltest
+zischeltet
+zischen
+zischend
+zischende
+zischendem
+zischenden
+zischender
+zischendes
+zischest
+zischle
+zischst
+zischt
+zischte
+zischten
+zischtest
+zischtet
+ziseliere
+ziselieren
+ziselierend
+ziselierende
+ziselierendem
+ziselierenden
+ziselierender
+ziselierendes
+ziselierst
+ziseliert
+ziselierte
+ziseliertem
+ziselierten
+ziselierter
+ziseliertes
+ziseliertest
+ziseliertet
+zitiere
+zitieren
+zitierend
+zitierende
+zitierendem
+zitierenden
+zitierender
+zitierendes
+zitierst
+zitiert
+zitierte
+zitiertem
+zitierten
+zitierter
+zitiertes
+zitiertest
+zitiertet
+zittere
+zitterig
+zitterige
+zitterigem
+zitterigen
+zitteriger
+zitterigere
+zitterigerem
+zitterigeren
+zitterigerer
+zitterigeres
+zitteriges
+zitterigste
+zitterigstem
+zitterigsten
+zitterigster
+zitterigstes
+zittern
+zitternd
+zitternde
+zitterndem
+zitternden
+zitternder
+zitterndes
+zitterst
+zittert
+zitterte
+zitterten
+zittertest
+zittertet
+zittre
+zittrig
+zittrige
+zittrigem
+zittrigen
+zittriger
+zittrigere
+zittrigerem
+zittrigeren
+zittrigerer
+zittrigeres
+zittriges
+zittrigste
+zittrigstem
+zittrigsten
+zittrigster
+zittrigstes
+zivil
+zivile
+zivilem
+zivilen
+ziviler
+ziviles
+zivilisatorisch
+zivilisatorische
+zivilisatorischem
+zivilisatorischen
+zivilisatorischer
+zivilisatorisches
+zivilisiere
+zivilisieren
+zivilisierend
+zivilisierende
+zivilisierendem
+zivilisierenden
+zivilisierender
+zivilisierendes
+zivilisierst
+zivilisiert
+zivilisierte
+zivilisiertem
+zivilisierten
+zivilisierter
+zivilisiertere
+zivilisierterem
+zivilisierteren
+zivilisierterer
+zivilisierteres
+zivilisiertes
+zivilisiertest
+zivilisierteste
+zivilisiertestem
+zivilisiertesten
+zivilisiertester
+zivilisiertestes
+zivilisiertet
+zog
+zogen
+zogst
+zogt
+zolle
+zollen
+zollend
+zollende
+zollendem
+zollenden
+zollender
+zollendes
+zollfrei
+zollfreie
+zollfreiem
+zollfreien
+zollfreier
+zollfreies
+zollpflichtig
+zollpflichtige
+zollpflichtigem
+zollpflichtigen
+zollpflichtiger
+zollpflichtiges
+zollst
+zollt
+zollte
+zollten
+zolltest
+zolltet
+zoologisch
+zoologische
+zoologischem
+zoologischen
+zoologischer
+zoologisches
+zoom
+zoome
+zoomen
+zoomend
+zoomende
+zoomendem
+zoomenden
+zoomender
+zoomendes
+zoomst
+zoomt
+zoomte
+zoomten
+zoomtest
+zoomtet
+zopfig
+zopfige
+zopfigem
+zopfigen
+zopfiger
+zopfiges
+zornentbrannt
+zornentbrannte
+zornentbranntem
+zornentbrannten
+zornentbrannter
+zornentbranntere
+zornentbrannterem
+zornentbrannteren
+zornentbrannterer
+zornentbrannteres
+zornentbranntes
+zornentbrannteste
+zornentbranntestem
+zornentbranntesten
+zornentbranntester
+zornentbranntestes
+zornfunkelnd
+zornfunkelnde
+zornfunkelndem
+zornfunkelnden
+zornfunkelnder
+zornfunkelndes
+zornig
+zornige
+zornigem
+zornigen
+zorniger
+zornigere
+zornigerem
+zornigeren
+zornigerer
+zornigeres
+zorniges
+zornigste
+zornigstem
+zornigsten
+zornigster
+zornigstes
+zotig
+zotige
+zotigem
+zotigen
+zotiger
+zotiges
+zottig
+zottige
+zottigem
+zottigen
+zottiger
+zottiges
+zu
+zuallererst
+zuallerletzt
+zuarbeite
+zuarbeiten
+zuarbeitend
+zuarbeitende
+zuarbeitendem
+zuarbeitenden
+zuarbeitender
+zuarbeitendes
+zuarbeitest
+zuarbeitet
+zuarbeitete
+zuarbeiteten
+zuarbeitetest
+zuarbeitetet
+zubaue
+zubauen
+zubauend
+zubauende
+zubauendem
+zubauenden
+zubauender
+zubauendes
+zubaust
+zubaut
+zubaute
+zubauten
+zubautest
+zubautet
+zubeiße
+zubeißen
+zubeißend
+zubeißende
+zubeißendem
+zubeißenden
+zubeißender
+zubeißendes
+zubeißest
+zubeißt
+zubereite
+zubereiten
+zubereitend
+zubereitende
+zubereitendem
+zubereitenden
+zubereitender
+zubereitendes
+zubereitest
+zubereitet
+zubereitete
+zubereitetem
+zubereiteten
+zubereiteter
+zubereitetes
+zubereitetest
+zubereitetet
+zubillige
+zubilligen
+zubilligend
+zubilligende
+zubilligendem
+zubilligenden
+zubilligender
+zubilligendes
+zubilligst
+zubilligt
+zubilligte
+zubilligten
+zubilligtest
+zubilligtet
+zubinde
+zubinden
+zubindend
+zubindende
+zubindendem
+zubindenden
+zubindender
+zubindendes
+zubindest
+zubindet
+zubleibe
+zubleiben
+zubleibend
+zubleibende
+zubleibendem
+zubleibenden
+zubleibender
+zubleibendes
+zubleibst
+zubleibt
+zublinzele
+zublinzeln
+zublinzelnd
+zublinzelnde
+zublinzelndem
+zublinzelnden
+zublinzelnder
+zublinzelndes
+zublinzelst
+zublinzelt
+zublinzelte
+zublinzelten
+zublinzeltest
+zublinzeltet
+zublinzle
+zubringe
+zubringen
+zubringend
+zubringende
+zubringendem
+zubringenden
+zubringender
+zubringendes
+zubringst
+zubringt
+zuchtlos
+zuchtlose
+zuchtlosem
+zuchtlosen
+zuchtloser
+zuchtlosere
+zuchtloserem
+zuchtloseren
+zuchtloserer
+zuchtloseres
+zuchtloses
+zuchtloseste
+zuchtlosestem
+zuchtlosesten
+zuchtlosester
+zuchtlosestes
+zucke
+zucken
+zuckend
+zuckende
+zuckendem
+zuckenden
+zuckender
+zuckendes
+zuckere
+zuckerig
+zuckerige
+zuckerigem
+zuckerigen
+zuckeriger
+zuckerigere
+zuckerigerem
+zuckerigeren
+zuckerigerer
+zuckerigeres
+zuckeriges
+zuckerigste
+zuckerigstem
+zuckerigsten
+zuckerigster
+zuckerigstes
+zuckerkrank
+zuckerkranke
+zuckerkrankem
+zuckerkranken
+zuckerkranker
+zuckerkrankes
+zuckern
+zuckernd
+zuckernde
+zuckerndem
+zuckernden
+zuckernder
+zuckerndes
+zuckerst
+zuckersüß
+zuckersüße
+zuckersüßem
+zuckersüßen
+zuckersüßer
+zuckersüßes
+zuckert
+zuckerte
+zuckerten
+zuckertest
+zuckertet
+zuckre
+zuckrig
+zuckrige
+zuckrigem
+zuckrigen
+zuckriger
+zuckrigere
+zuckrigerem
+zuckrigeren
+zuckrigerer
+zuckrigeres
+zuckriges
+zuckrigste
+zuckrigstem
+zuckrigsten
+zuckrigster
+zuckrigstes
+zuckst
+zuckt
+zuckte
+zuckten
+zucktest
+zucktet
+zudecke
+zudecken
+zudeckend
+zudeckende
+zudeckendem
+zudeckenden
+zudeckender
+zudeckendes
+zudeckst
+zudeckt
+zudeckte
+zudeckten
+zudecktest
+zudecktet
+zudem
+zudrehe
+zudrehen
+zudrehend
+zudrehende
+zudrehendem
+zudrehenden
+zudrehender
+zudrehendes
+zudrehst
+zudreht
+zudrehte
+zudrehten
+zudrehtest
+zudrehtet
+zudringlich
+zudringliche
+zudringlichem
+zudringlichen
+zudringlicher
+zudringlichere
+zudringlicherem
+zudringlicheren
+zudringlicherer
+zudringlicheres
+zudringliches
+zudringlichste
+zudringlichstem
+zudringlichsten
+zudringlichster
+zudringlichstes
+zudrucke
+zudrucken
+zudruckend
+zudruckende
+zudruckendem
+zudruckenden
+zudruckender
+zudruckendes
+zudruckst
+zudruckt
+zudruckte
+zudruckten
+zudrucktest
+zudrucktet
+zudrücke
+zudrücken
+zudrückend
+zudrückende
+zudrückendem
+zudrückenden
+zudrückender
+zudrückendes
+zudrückst
+zudrückt
+zudrückte
+zudrückten
+zudrücktest
+zudrücktet
+zueigne
+zueignen
+zueignend
+zueignende
+zueignendem
+zueignenden
+zueignender
+zueignendes
+zueignest
+zueignet
+zueignete
+zueigneten
+zueignetest
+zueignetet
+zueinander
+zuerkannt
+zuerkannte
+zuerkanntem
+zuerkannten
+zuerkannter
+zuerkanntes
+zuerkenne
+zuerkennen
+zuerkennend
+zuerkennende
+zuerkennendem
+zuerkennenden
+zuerkennender
+zuerkennendes
+zuerkennst
+zuerkennt
+zuerst
+zufalle
+zufallen
+zufallend
+zufallende
+zufallendem
+zufallenden
+zufallender
+zufallendes
+zufallsbedingt
+zufallsbedingte
+zufallsbedingtem
+zufallsbedingten
+zufallsbedingter
+zufallsbedingtes
+zufallt
+zufasse
+zufassen
+zufassend
+zufassende
+zufassendem
+zufassenden
+zufassender
+zufassendes
+zufassest
+zufasst
+zufasste
+zufassten
+zufasstest
+zufasstet
+zufiel
+zufielen
+zufliege
+zufliegen
+zufliegend
+zufliegende
+zufliegendem
+zufliegenden
+zufliegender
+zufliegendes
+zufliegst
+zufliegt
+zufließe
+zufließen
+zufließend
+zufließende
+zufließendem
+zufließenden
+zufließender
+zufließendes
+zufließest
+zufließt
+zufloss
+zuflüstere
+zuflüstern
+zuflüsternd
+zuflüsternde
+zuflüsterndem
+zuflüsternden
+zuflüsternder
+zuflüsterndes
+zuflüsterst
+zuflüstert
+zuflüsterte
+zuflüsterten
+zuflüstertest
+zuflüstertet
+zuflüstre
+zufolge
+zufrieden
+zufriedene
+zufriedenem
+zufriedenen
+zufriedener
+zufriedenere
+zufriedenerem
+zufriedeneren
+zufriedenerer
+zufriedeneres
+zufriedenes
+zufriedenste
+zufriedenstem
+zufriedensten
+zufriedenster
+zufriedenstes
+zufriere
+zufrieren
+zufrierend
+zufrierende
+zufrierendem
+zufrierenden
+zufrierender
+zufrierendes
+zufrierst
+zufriert
+zufällig
+zufällige
+zufälligem
+zufälligen
+zufälliger
+zufälligere
+zufälligerem
+zufälligeren
+zufälligerer
+zufälligeres
+zufälligerweise
+zufälliges
+zufälligste
+zufälligstem
+zufälligsten
+zufälligster
+zufälligstes
+zufällst
+zufällt
+zufüge
+zufügen
+zufügend
+zufügende
+zufügendem
+zufügenden
+zufügender
+zufügendes
+zufügst
+zufügt
+zufügte
+zufügten
+zufügtest
+zufügtet
+zuführe
+zuführen
+zuführend
+zuführende
+zuführendem
+zuführenden
+zuführender
+zuführendes
+zuführst
+zuführt
+zuführte
+zuführten
+zuführtest
+zuführtet
+zufülle
+zufüllen
+zufüllend
+zufüllende
+zufüllendem
+zufüllenden
+zufüllender
+zufüllendes
+zufüllst
+zufüllt
+zufüllte
+zufüllten
+zufülltest
+zufülltet
+zugab
+zugaben
+zugabst
+zugabt
+zugebaut
+zugebaute
+zugebautem
+zugebauten
+zugebauter
+zugebautes
+zugebe
+zugeben
+zugebend
+zugebende
+zugebendem
+zugebenden
+zugebender
+zugebendes
+zugebilligt
+zugebilligte
+zugebilligtem
+zugebilligten
+zugebilligter
+zugebilligtes
+zugebissen
+zugebissene
+zugebissenem
+zugebissenen
+zugebissener
+zugebissenes
+zugeblieben
+zugebliebene
+zugebliebenem
+zugebliebenen
+zugebliebener
+zugebliebenes
+zugeblinzelt
+zugeblinzelte
+zugeblinzeltem
+zugeblinzelten
+zugeblinzelter
+zugeblinzeltes
+zugebracht
+zugebrachte
+zugebrachtem
+zugebrachten
+zugebrachter
+zugebrachtes
+zugebt
+zugebunden
+zugebundene
+zugebundenem
+zugebundenen
+zugebundener
+zugebundenes
+zugedacht
+zugedachte
+zugedachtem
+zugedachten
+zugedachter
+zugedachtes
+zugedeckt
+zugedeckte
+zugedecktem
+zugedeckten
+zugedeckter
+zugedecktes
+zugedreht
+zugedrehte
+zugedrehtem
+zugedrehten
+zugedrehter
+zugedrehtes
+zugedrückt
+zugedrückte
+zugedrücktem
+zugedrückten
+zugedrückter
+zugedrücktes
+zugedämmt
+zugedämmte
+zugedämmtem
+zugedämmten
+zugedämmter
+zugedämmtes
+zugeeignet
+zugeeignete
+zugeeignetem
+zugeeigneten
+zugeeigneter
+zugeeignetes
+zugeeilt
+zugeeilte
+zugeeiltem
+zugeeilten
+zugeeilter
+zugeeiltes
+zugefallen
+zugefallene
+zugefallenem
+zugefallenen
+zugefallener
+zugefallenes
+zugefasst
+zugefasste
+zugefasstem
+zugefassten
+zugefasster
+zugefasstes
+zugeflogen
+zugeflogene
+zugeflogenem
+zugeflogenen
+zugeflogener
+zugeflogenes
+zugeflossen
+zugeflossene
+zugeflossenem
+zugeflossenen
+zugeflossener
+zugeflossenes
+zugeflüstert
+zugeflüsterte
+zugeflüstertem
+zugeflüsterten
+zugeflüsterter
+zugeflüstertes
+zugefroren
+zugefrorene
+zugefrorenem
+zugefrorenen
+zugefrorener
+zugefrorenes
+zugefügt
+zugefügte
+zugefügtem
+zugefügten
+zugefügter
+zugefügtes
+zugeführt
+zugeführte
+zugeführtem
+zugeführten
+zugeführter
+zugeführtes
+zugefüllt
+zugefüllte
+zugefülltem
+zugefüllten
+zugefüllter
+zugefülltes
+zugegangen
+zugegangene
+zugegangenem
+zugegangenen
+zugegangener
+zugegangenes
+zugegeben
+zugegebene
+zugegebenem
+zugegebenen
+zugegebener
+zugegebenermaßen
+zugegebenes
+zugegen
+zugegossen
+zugegossene
+zugegossenem
+zugegossenen
+zugegossener
+zugegossenes
+zugegriffen
+zugeguckt
+zugehabt
+zugehabte
+zugehabtem
+zugehabten
+zugehabter
+zugehabtes
+zugehalten
+zugehaltene
+zugehaltenem
+zugehaltenen
+zugehaltener
+zugehaltenes
+zugehe
+zugeheftet
+zugeheftete
+zugeheftetem
+zugehefteten
+zugehefteter
+zugeheftetes
+zugeheilt
+zugeheilte
+zugeheiltem
+zugeheilten
+zugeheilter
+zugeheiltes
+zugehen
+zugehend
+zugehende
+zugehendem
+zugehenden
+zugehender
+zugehendes
+zugehst
+zugeht
+zugehängt
+zugehängte
+zugehängtem
+zugehängten
+zugehängter
+zugehängtes
+zugehöre
+zugehören
+zugehörend
+zugehörende
+zugehörendem
+zugehörenden
+zugehörender
+zugehörendes
+zugehörig
+zugehörige
+zugehörigem
+zugehörigen
+zugehöriger
+zugehöriges
+zugehörst
+zugehört
+zugehörte
+zugehörten
+zugehörtest
+zugehörtet
+zugejubelt
+zugekauft
+zugekaufte
+zugekauftem
+zugekauften
+zugekaufter
+zugekauftes
+zugekehrt
+zugekehrte
+zugekehrtem
+zugekehrten
+zugekehrter
+zugekehrtes
+zugeklappt
+zugeklappte
+zugeklapptem
+zugeklappten
+zugeklappter
+zugeklapptes
+zugeklebt
+zugeklebte
+zugeklebtem
+zugeklebten
+zugeklebter
+zugeklebtes
+zugeknallt
+zugeknallte
+zugeknalltem
+zugeknallten
+zugeknallter
+zugeknalltes
+zugeknöpft
+zugeknöpfte
+zugeknöpftem
+zugeknöpften
+zugeknöpfter
+zugeknöpftes
+zugeknüpft
+zugeknüpfte
+zugeknüpftem
+zugeknüpften
+zugeknüpfter
+zugeknüpftes
+zugekommen
+zugekommene
+zugekommenem
+zugekommenen
+zugekommener
+zugekommenes
+zugekorkt
+zugekorkte
+zugekorktem
+zugekorkten
+zugekorkter
+zugekorktes
+zugelangt
+zugelassen
+zugelassene
+zugelassenem
+zugelassenen
+zugelassener
+zugelassenes
+zugelaufen
+zugelaufene
+zugelaufenem
+zugelaufenen
+zugelaufener
+zugelaufenes
+zugelegt
+zugelegte
+zugelegtem
+zugelegten
+zugelegter
+zugelegtes
+zugeleitet
+zugeleitete
+zugeleitetem
+zugeleiteten
+zugeleiteter
+zugeleitetes
+zugemacht
+zugemachte
+zugemachtem
+zugemachten
+zugemachter
+zugemachtes
+zugemauert
+zugemauerte
+zugemauertem
+zugemauerten
+zugemauerter
+zugemauertes
+zugemessen
+zugemessene
+zugemessenem
+zugemessenen
+zugemessener
+zugemessenes
+zugemutet
+zugemutete
+zugemutetem
+zugemuteten
+zugemuteter
+zugemutetes
+zugenagelt
+zugenagelte
+zugenageltem
+zugenagelten
+zugenagelter
+zugenageltes
+zugeneigt
+zugeneigte
+zugeneigtem
+zugeneigten
+zugeneigter
+zugeneigtes
+zugenickt
+zugenickte
+zugenicktem
+zugenickten
+zugenickter
+zugenicktes
+zugenommen
+zugenommene
+zugenommenem
+zugenommenen
+zugenommener
+zugenommenes
+zugenäht
+zugenähte
+zugenähtem
+zugenähten
+zugenähter
+zugenähtes
+zugeordnet
+zugeordnete
+zugeordnetem
+zugeordneten
+zugeordneter
+zugeordnetes
+zugepackt
+zugepackte
+zugepacktem
+zugepackten
+zugepackter
+zugepacktes
+zugeraten
+zugeratene
+zugeratenem
+zugeratenen
+zugeratener
+zugeratenes
+zugerechnet
+zugerechnete
+zugerechnetem
+zugerechneten
+zugerechneter
+zugerechnetes
+zugeredet
+zugeredete
+zugeredetem
+zugeredeten
+zugeredeter
+zugeredetes
+zugereicht
+zugereichte
+zugereichtem
+zugereichten
+zugereichter
+zugereichtes
+zugerichtet
+zugerichtete
+zugerichtetem
+zugerichteten
+zugerichteter
+zugerichtetes
+zugeritten
+zugerittene
+zugerittenem
+zugerittenen
+zugerittener
+zugerittenes
+zugerufen
+zugerufene
+zugerufenem
+zugerufenen
+zugerufener
+zugerufenes
+zugerüstet
+zugerüstete
+zugerüstetem
+zugerüsteten
+zugerüsteter
+zugerüstetes
+zugesagt
+zugesagte
+zugesagtem
+zugesagten
+zugesagter
+zugesagtes
+zugesandt
+zugesandte
+zugesandtem
+zugesandten
+zugesandter
+zugesandtes
+zugeschaltet
+zugeschaltete
+zugeschaltetem
+zugeschalteten
+zugeschalteter
+zugeschaltetes
+zugeschaut
+zugeschickt
+zugeschickte
+zugeschicktem
+zugeschickten
+zugeschickter
+zugeschicktes
+zugeschlagen
+zugeschlagene
+zugeschlagenem
+zugeschlagenen
+zugeschlagener
+zugeschlagenes
+zugeschlossen
+zugeschlossene
+zugeschlossenem
+zugeschlossenen
+zugeschlossener
+zugeschlossenes
+zugeschmiert
+zugeschmierte
+zugeschmiertem
+zugeschmierten
+zugeschmierter
+zugeschmiertes
+zugeschmissen
+zugeschmissene
+zugeschmissenem
+zugeschmissenen
+zugeschmissener
+zugeschmissenes
+zugeschnallt
+zugeschnallte
+zugeschnalltem
+zugeschnallten
+zugeschnallter
+zugeschnalltes
+zugeschnappt
+zugeschnappte
+zugeschnapptem
+zugeschnappten
+zugeschnappter
+zugeschnapptes
+zugeschnitten
+zugeschnittene
+zugeschnittenem
+zugeschnittenen
+zugeschnittener
+zugeschnittenes
+zugeschnürt
+zugeschnürte
+zugeschnürtem
+zugeschnürten
+zugeschnürter
+zugeschnürtes
+zugeschoben
+zugeschobene
+zugeschobenem
+zugeschobenen
+zugeschobener
+zugeschobenes
+zugeschossen
+zugeschossene
+zugeschossenem
+zugeschossenen
+zugeschossener
+zugeschossenes
+zugeschraubt
+zugeschraubte
+zugeschraubtem
+zugeschraubten
+zugeschraubter
+zugeschraubtes
+zugeschrieben
+zugeschriebene
+zugeschriebenem
+zugeschriebenen
+zugeschriebener
+zugeschriebenes
+zugeschrien
+zugeschriene
+zugeschrienem
+zugeschrienen
+zugeschriener
+zugeschrienes
+zugeschweißt
+zugeschweißte
+zugeschweißtem
+zugeschweißten
+zugeschweißter
+zugeschweißtes
+zugeschüttet
+zugeschüttete
+zugeschüttetem
+zugeschütteten
+zugeschütteter
+zugeschüttetes
+zugesehen
+zugesellt
+zugesellte
+zugeselltem
+zugesellten
+zugesellter
+zugeselltes
+zugesetzt
+zugesetzte
+zugesetztem
+zugesetzten
+zugesetzter
+zugesetztes
+zugesichert
+zugesicherte
+zugesichertem
+zugesicherten
+zugesicherter
+zugesichertes
+zugesiegelt
+zugesiegelte
+zugesiegeltem
+zugesiegelten
+zugesiegelter
+zugesiegeltes
+zugespielt
+zugespielte
+zugespieltem
+zugespielten
+zugespielter
+zugespieltes
+zugespitzt
+zugespitzte
+zugespitztem
+zugespitzten
+zugespitzter
+zugespitztes
+zugesprochen
+zugesprochene
+zugesprochenem
+zugesprochenen
+zugesprochener
+zugesprochenes
+zugesprungen
+zugesprungene
+zugesprungenem
+zugesprungenen
+zugesprungener
+zugesprungenes
+zugestanden
+zugestandene
+zugestandenem
+zugestandenen
+zugestandener
+zugestandenes
+zugesteckt
+zugesteckte
+zugestecktem
+zugesteckten
+zugesteckter
+zugestecktes
+zugestehe
+zugestehen
+zugestehend
+zugestehende
+zugestehendem
+zugestehenden
+zugestehender
+zugestehendes
+zugestehst
+zugesteht
+zugestellt
+zugestellte
+zugestelltem
+zugestellten
+zugestellter
+zugestelltes
+zugestiegen
+zugestiegene
+zugestiegenem
+zugestiegenen
+zugestiegener
+zugestiegenes
+zugestimmt
+zugestimmte
+zugestimmtem
+zugestimmten
+zugestimmter
+zugestimmtes
+zugestochen
+zugestopft
+zugestopfte
+zugestopftem
+zugestopften
+zugestopfter
+zugestopftes
+zugestoßen
+zugeströmt
+zugeströmte
+zugeströmtem
+zugeströmten
+zugeströmter
+zugeströmtes
+zugestürzt
+zugestürzte
+zugestürztem
+zugestürzten
+zugestürzter
+zugestürztes
+zugetan
+zugetane
+zugetanem
+zugetanen
+zugetaner
+zugetanere
+zugetanerem
+zugetaneren
+zugetanerer
+zugetaneres
+zugetanes
+zugetanste
+zugetanstem
+zugetansten
+zugetanster
+zugetanstes
+zugeteilt
+zugeteilte
+zugeteiltem
+zugeteilten
+zugeteilter
+zugeteiltes
+zugetragen
+zugetraut
+zugetroffen
+zugewachsen
+zugewachsene
+zugewachsenem
+zugewachsenen
+zugewachsener
+zugewachsenes
+zugewandert
+zugewanderte
+zugewandertem
+zugewanderten
+zugewanderter
+zugewandertes
+zugewandt
+zugewandte
+zugewandtem
+zugewandten
+zugewandter
+zugewandtes
+zugewartet
+zugeweht
+zugewehte
+zugewehtem
+zugewehten
+zugewehter
+zugewehtes
+zugewendet
+zugewiesen
+zugewiesene
+zugewiesenem
+zugewiesenen
+zugewiesener
+zugewiesenes
+zugeworfen
+zugeworfene
+zugeworfenem
+zugeworfenen
+zugeworfener
+zugeworfenes
+zugewunken
+zugewunkene
+zugewunkenem
+zugewunkenen
+zugewunkener
+zugewunkenes
+zugezahlt
+zugezahlte
+zugezahltem
+zugezahlten
+zugezahlter
+zugezahltes
+zugezogen
+zugezogene
+zugezogenem
+zugezogenen
+zugezogener
+zugezogenes
+zugezwinkert
+zugezählt
+zugezählte
+zugezähltem
+zugezählten
+zugezählter
+zugezähltes
+zugieße
+zugießen
+zugießend
+zugießende
+zugießendem
+zugießenden
+zugießender
+zugießendes
+zugießest
+zugießt
+zugig
+zugige
+zugigem
+zugigen
+zugiger
+zugigere
+zugigerem
+zugigeren
+zugigerer
+zugigeres
+zugiges
+zugigste
+zugigstem
+zugigsten
+zugigster
+zugigstes
+zuging
+zugingen
+zugingst
+zugingt
+zugkräftig
+zugkräftige
+zugkräftigem
+zugkräftigen
+zugkräftiger
+zugkräftigere
+zugkräftigerem
+zugkräftigeren
+zugkräftigerer
+zugkräftigeres
+zugkräftiges
+zugkräftigste
+zugkräftigstem
+zugkräftigsten
+zugkräftigster
+zugkräftigstes
+zugleich
+zugreifbar
+zugreifbare
+zugreifbarem
+zugreifbaren
+zugreifbarer
+zugreifbares
+zugreife
+zugreifen
+zugreifend
+zugreifende
+zugreifendem
+zugreifenden
+zugreifender
+zugreifendes
+zugreifst
+zugreift
+zugrunde
+zugucke
+zugucken
+zuguckend
+zuguckende
+zuguckendem
+zuguckenden
+zuguckender
+zuguckendes
+zuguckst
+zuguckt
+zuguckte
+zuguckten
+zugucktest
+zugucktet
+zugunsten
+zugute
+zugänglich
+zugängliche
+zugänglichem
+zugänglichen
+zugänglicher
+zugänglichere
+zugänglicherem
+zugänglicheren
+zugänglicherer
+zugänglicheres
+zugängliches
+zugänglichste
+zugänglichstem
+zugänglichsten
+zugänglichster
+zugänglichstes
+zuhalte
+zuhalten
+zuhaltend
+zuhaltende
+zuhaltendem
+zuhaltenden
+zuhaltender
+zuhaltendes
+zuhaltet
+zuhanden
+zuhaue
+zuhauen
+zuhauend
+zuhauende
+zuhauendem
+zuhauenden
+zuhauender
+zuhauendes
+zuhause
+zuhaust
+zuhaut
+zuhaute
+zuhauten
+zuhautest
+zuhautet
+zuhefte
+zuheften
+zuheftend
+zuheftende
+zuheftendem
+zuheftenden
+zuheftender
+zuheftendes
+zuheftest
+zuheftet
+zuheftete
+zuhefteten
+zuheftetest
+zuheftetet
+zuhinterst
+zuhänge
+zuhängen
+zuhängend
+zuhängende
+zuhängendem
+zuhängenden
+zuhängender
+zuhängendes
+zuhängst
+zuhängt
+zuhängte
+zuhängten
+zuhängtest
+zuhängtet
+zuhöre
+zuhören
+zuhörend
+zuhörende
+zuhörendem
+zuhörenden
+zuhörender
+zuhörendes
+zuhörst
+zuhört
+zuhörte
+zuhörten
+zuhörtest
+zuhörtet
+zuinnerst
+zujubele
+zujubeln
+zujubelnd
+zujubelnde
+zujubelndem
+zujubelnden
+zujubelnder
+zujubelndes
+zujubelst
+zujubelt
+zujubelte
+zujubelten
+zujubeltest
+zujubeltet
+zujuble
+zukaufe
+zukaufen
+zukaufend
+zukaufende
+zukaufendem
+zukaufenden
+zukaufender
+zukaufendes
+zukaufst
+zukauft
+zukaufte
+zukauften
+zukauftest
+zukauftet
+zukehre
+zukehren
+zukehrend
+zukehrende
+zukehrendem
+zukehrenden
+zukehrender
+zukehrendes
+zukehrst
+zukehrt
+zukehrte
+zukehrten
+zukehrtest
+zukehrtet
+zuklappe
+zuklappen
+zuklappend
+zuklappende
+zuklappendem
+zuklappenden
+zuklappender
+zuklappendes
+zuklappst
+zuklappt
+zuklappte
+zuklappten
+zuklapptest
+zuklapptet
+zuklebe
+zukleben
+zuklebend
+zuklebende
+zuklebendem
+zuklebenden
+zuklebender
+zuklebendes
+zuklebst
+zuklebt
+zuklebte
+zuklebten
+zuklebtest
+zuklebtet
+zuknalle
+zuknallen
+zuknallend
+zuknallende
+zuknallendem
+zuknallenden
+zuknallender
+zuknallendes
+zuknallst
+zuknallt
+zuknallte
+zuknallten
+zuknalltest
+zuknalltet
+zukneife
+zukneifen
+zukneifend
+zukneifende
+zukneifendem
+zukneifenden
+zukneifender
+zukneifendes
+zukneifst
+zukneift
+zuknöpfe
+zuknöpfen
+zuknöpfend
+zuknöpfende
+zuknöpfendem
+zuknöpfenden
+zuknöpfender
+zuknöpfendes
+zuknöpfst
+zuknöpft
+zuknöpfte
+zuknöpften
+zuknöpftest
+zuknöpftet
+zuknüpfe
+zuknüpfen
+zuknüpfend
+zuknüpfende
+zuknüpfendem
+zuknüpfenden
+zuknüpfender
+zuknüpfendes
+zuknüpfst
+zuknüpft
+zuknüpfte
+zuknüpften
+zuknüpftest
+zuknüpftet
+zukomme
+zukommen
+zukommend
+zukommende
+zukommendem
+zukommenden
+zukommender
+zukommendes
+zukommst
+zukommt
+zukorke
+zukorken
+zukorkend
+zukorkende
+zukorkendem
+zukorkenden
+zukorkender
+zukorkendes
+zukorkst
+zukorkt
+zukorkte
+zukorkten
+zukorktest
+zukorktet
+zukunftbezogen
+zukunftbezogene
+zukunftbezogenem
+zukunftbezogenen
+zukunftbezogener
+zukunftbezogenes
+zukunftsorientiert
+zukunftsorientierte
+zukunftsorientiertem
+zukunftsorientierten
+zukunftsorientierter
+zukunftsorientiertes
+zukunftsreich
+zukunftsreiche
+zukunftsreichem
+zukunftsreichen
+zukunftsreicher
+zukunftsreichere
+zukunftsreicherem
+zukunftsreicheren
+zukunftsreicherer
+zukunftsreicheres
+zukunftsreiches
+zukunftsreichste
+zukunftsreichstem
+zukunftsreichsten
+zukunftsreichster
+zukunftsreichstes
+zukunftssicher
+zukunftssichere
+zukunftssicherem
+zukunftssicheren
+zukunftssicherer
+zukunftssicheres
+zukunftsweisend
+zukunftsweisende
+zukunftsweisendem
+zukunftsweisenden
+zukunftsweisender
+zukunftsweisendes
+zukünftig
+zukünftige
+zukünftigem
+zukünftigen
+zukünftiger
+zukünftiges
+zulange
+zulangen
+zulangend
+zulangende
+zulangendem
+zulangenden
+zulangender
+zulangendes
+zulangst
+zulangt
+zulangte
+zulangten
+zulangtest
+zulangtet
+zulassbar
+zulassbare
+zulassbarem
+zulassbaren
+zulassbarer
+zulassbares
+zulasse
+zulassen
+zulassend
+zulassende
+zulassendem
+zulassenden
+zulassender
+zulassendes
+zulasst
+zulasten
+zulaufe
+zulaufen
+zulaufend
+zulaufende
+zulaufendem
+zulaufenden
+zulaufender
+zulaufendes
+zulauft
+zulege
+zulegen
+zulegend
+zulegende
+zulegendem
+zulegenden
+zulegender
+zulegendes
+zulegst
+zulegt
+zulegte
+zulegten
+zulegtest
+zulegtet
+zuleide
+zuleite
+zuleiten
+zuleitend
+zuleitende
+zuleitendem
+zuleitenden
+zuleitender
+zuleitendes
+zuleitest
+zuleitet
+zuleitete
+zuleiteten
+zuleitetest
+zuleitetet
+zuletzt
+zuließ
+zuließen
+zuließest
+zuließt
+zulächele
+zulächeln
+zulächelnd
+zulächelnde
+zulächelndem
+zulächelnden
+zulächelnder
+zulächelndes
+zulächelst
+zulächelt
+zulächelte
+zulächelten
+zulächeltest
+zulächeltet
+zulächle
+zulänglich
+zulängliche
+zulänglichem
+zulänglichen
+zulänglicher
+zulängliches
+zulässig
+zulässige
+zulässigem
+zulässigen
+zulässiger
+zulässiges
+zulässt
+zulötbar
+zulötbare
+zulötbarem
+zulötbaren
+zulötbarer
+zulötbares
+zulöte
+zulöten
+zulötend
+zulötende
+zulötendem
+zulötenden
+zulötender
+zulötendes
+zulötest
+zulötet
+zulötete
+zulöteten
+zulötetest
+zulötetet
+zum
+zumache
+zumachen
+zumachend
+zumachende
+zumachendem
+zumachenden
+zumachender
+zumachendes
+zumachst
+zumacht
+zumal
+zumauere
+zumauern
+zumauernd
+zumauernde
+zumauerndem
+zumauernden
+zumauernder
+zumauerndes
+zumauerst
+zumauert
+zumauerte
+zumauerten
+zumauertest
+zumauertet
+zumaure
+zumeist
+zumesse
+zumessen
+zumessend
+zumessende
+zumessendem
+zumessenden
+zumessender
+zumessendes
+zumesst
+zumindest
+zumutbar
+zumutbare
+zumutbarem
+zumutbaren
+zumutbarer
+zumutbares
+zumute
+zumuten
+zumutend
+zumutende
+zumutendem
+zumutenden
+zumutender
+zumutendes
+zumutest
+zumutet
+zumutete
+zumuteten
+zumutetest
+zumutetet
+zunageln
+zunagelnd
+zunagelnde
+zunagelndem
+zunagelnden
+zunagelnder
+zunagelndes
+zunehme
+zunehmen
+zunehmend
+zunehmende
+zunehmendem
+zunehmenden
+zunehmender
+zunehmendes
+zunehmends
+zunehmt
+zuneige
+zuneigen
+zuneigend
+zuneigende
+zuneigendem
+zuneigenden
+zuneigender
+zuneigendes
+zuneigst
+zuneigt
+zuneigte
+zuneigten
+zuneigtest
+zuneigtet
+zungenfertig
+zungenfertige
+zungenfertigem
+zungenfertigen
+zungenfertiger
+zungenfertigere
+zungenfertigerem
+zungenfertigeren
+zungenfertigerer
+zungenfertigeres
+zungenfertiges
+zungenfertigste
+zungenfertigstem
+zungenfertigsten
+zungenfertigster
+zungenfertigstes
+zungenförmig
+zungenförmige
+zungenförmigem
+zungenförmigen
+zungenförmiger
+zungenförmiges
+zunichte
+zunicke
+zunicken
+zunickend
+zunickende
+zunickendem
+zunickenden
+zunickender
+zunickendes
+zunickst
+zunickt
+zunickte
+zunickten
+zunicktest
+zunicktet
+zunimmst
+zunimmt
+zunutze
+zunächst
+zunähe
+zunähen
+zunähend
+zunähende
+zunähendem
+zunähenden
+zunähender
+zunähendes
+zunähst
+zunäht
+zunähte
+zunähten
+zunähtest
+zunähtet
+zuoberst
+zuordne
+zuordnen
+zuordnend
+zuordnende
+zuordnendem
+zuordnenden
+zuordnender
+zuordnendes
+zuordnest
+zuordnet
+zuordnete
+zuordneten
+zuordnetest
+zuordnetet
+zupacke
+zupacken
+zupackend
+zupackende
+zupackendem
+zupackenden
+zupackender
+zupackendes
+zupackst
+zupackt
+zupackte
+zupackten
+zupacktest
+zupacktet
+zupass
+zupasse
+zupfe
+zupfen
+zupfend
+zupfende
+zupfendem
+zupfenden
+zupfender
+zupfendes
+zupfst
+zupft
+zupfte
+zupften
+zupftest
+zupftet
+zur
+zurande
+zurate
+zuraten
+zuratend
+zuratende
+zuratendem
+zuratenden
+zuratender
+zuratendes
+zuratet
+zurechenbar
+zurechenbare
+zurechenbarem
+zurechenbaren
+zurechenbarer
+zurechenbares
+zurechne
+zurechnen
+zurechnend
+zurechnende
+zurechnendem
+zurechnenden
+zurechnender
+zurechnendes
+zurechnest
+zurechnet
+zurechnete
+zurechneten
+zurechnetest
+zurechnetet
+zurechnungsfähig
+zurechnungsfähige
+zurechnungsfähigem
+zurechnungsfähigen
+zurechnungsfähiger
+zurechnungsfähigere
+zurechnungsfähigerem
+zurechnungsfähigeren
+zurechnungsfähigerer
+zurechnungsfähigeres
+zurechnungsfähiges
+zurechnungsfähigste
+zurechnungsfähigstem
+zurechnungsfähigsten
+zurechnungsfähigster
+zurechnungsfähigstes
+zurecht
+zurechtgebracht
+zurechtgebrachte
+zurechtgebrachtem
+zurechtgebrachten
+zurechtgebrachter
+zurechtgebrachtes
+zurechtgekommen
+zurechtgekommene
+zurechtgekommenem
+zurechtgekommenen
+zurechtgekommener
+zurechtgekommenes
+zurechtgemacht
+zurechtgemachte
+zurechtgemachtem
+zurechtgemachten
+zurechtgemachter
+zurechtgemachtes
+zurede
+zureden
+zuredend
+zuredende
+zuredendem
+zuredenden
+zuredender
+zuredendes
+zuredest
+zuredet
+zuredete
+zuredeten
+zuredetest
+zuredetet
+zureiche
+zureichen
+zureichend
+zureichende
+zureichendem
+zureichenden
+zureichender
+zureichendes
+zureichst
+zureicht
+zureichte
+zureichten
+zureichtest
+zureichtet
+zureite
+zureiten
+zureitend
+zureitende
+zureitendem
+zureitenden
+zureitender
+zureitendes
+zureitest
+zureitet
+zurichte
+zurichten
+zurichtend
+zurichtende
+zurichtendem
+zurichtenden
+zurichtender
+zurichtendes
+zurichtest
+zurichtet
+zurichtete
+zurichteten
+zurichtetest
+zurichtetet
+zurufe
+zurufen
+zurufend
+zurufende
+zurufendem
+zurufenden
+zurufender
+zurufendes
+zurufst
+zuruft
+zurzeit
+zurück
+zurückbleibe
+zurückbleiben
+zurückbleibend
+zurückbleibende
+zurückbleibendem
+zurückbleibenden
+zurückbleibender
+zurückbleibendes
+zurückbleibst
+zurückbleibt
+zurückblieb
+zurückblieben
+zurückbliebst
+zurückbliebt
+zurückfordere
+zurückfordern
+zurückfordernd
+zurückfordernde
+zurückforderndem
+zurückfordernden
+zurückfordernder
+zurückforderndes
+zurückforderst
+zurückfordert
+zurückforderte
+zurückforderten
+zurückfordertest
+zurückfordertet
+zurückfordre
+zurückgab
+zurückgaben
+zurückgabst
+zurückgabt
+zurückgebe
+zurückgeben
+zurückgebend
+zurückgebende
+zurückgebendem
+zurückgebenden
+zurückgebender
+zurückgebendes
+zurückgeblieben
+zurückgebliebene
+zurückgebliebenem
+zurückgebliebenen
+zurückgebliebener
+zurückgebliebenes
+zurückgebt
+zurückgedacht
+zurückgedachte
+zurückgedachtem
+zurückgedachten
+zurückgedachter
+zurückgedachtes
+zurückgefunden
+zurückgefundene
+zurückgefundenem
+zurückgefundenen
+zurückgefundener
+zurückgefundenes
+zurückgeführt
+zurückgeführte
+zurückgeführtem
+zurückgeführten
+zurückgeführter
+zurückgeführtes
+zurückgegeben
+zurückgegebene
+zurückgegebenem
+zurückgegebenen
+zurückgegebener
+zurückgegebenes
+zurückgegriffen
+zurückgegriffene
+zurückgegriffenem
+zurückgegriffenen
+zurückgegriffener
+zurückgegriffenes
+zurückgehalten
+zurückgehaltene
+zurückgehaltenem
+zurückgehaltenen
+zurückgehaltener
+zurückgehaltenes
+zurückgehe
+zurückgehen
+zurückgehend
+zurückgehende
+zurückgehendem
+zurückgehenden
+zurückgehender
+zurückgehendes
+zurückgeholt
+zurückgeholte
+zurückgeholtem
+zurückgeholten
+zurückgeholter
+zurückgeholtes
+zurückgehst
+zurückgeht
+zurückgelegen
+zurückgelegene
+zurückgelegenem
+zurückgelegenen
+zurückgelegener
+zurückgelegenes
+zurückgeliefert
+zurückgelieferte
+zurückgeliefertem
+zurückgelieferten
+zurückgelieferter
+zurückgeliefertes
+zurückgemeldet
+zurückgemeldete
+zurückgemeldetem
+zurückgemeldeten
+zurückgemeldeter
+zurückgemeldetes
+zurückgeprallt
+zurückgeprallte
+zurückgepralltem
+zurückgeprallten
+zurückgeprallter
+zurückgepralltes
+zurückgerufen
+zurückgerufene
+zurückgerufenem
+zurückgerufenen
+zurückgerufener
+zurückgerufenes
+zurückgesetzt
+zurückgesetzte
+zurückgesetztem
+zurückgesetzten
+zurückgesetzter
+zurückgesetztes
+zurückgestanden
+zurückgestandene
+zurückgestandenem
+zurückgestandenen
+zurückgestandener
+zurückgestandenes
+zurückgestellt
+zurückgestellte
+zurückgestelltem
+zurückgestellten
+zurückgestellter
+zurückgestelltes
+zurückgestrahlt
+zurückgestrahlte
+zurückgestrahltem
+zurückgestrahlten
+zurückgestrahlter
+zurückgestrahltes
+zurückgetreten
+zurückgetretene
+zurückgetretenem
+zurückgetretenen
+zurückgetretener
+zurückgetretenes
+zurückgewichen
+zurückgewichene
+zurückgewichenem
+zurückgewichenen
+zurückgewichener
+zurückgewichenes
+zurückgewonnen
+zurückgewonnene
+zurückgewonnenem
+zurückgewonnenen
+zurückgewonnener
+zurückgewonnenes
+zurückgewünscht
+zurückgewünschte
+zurückgewünschtem
+zurückgewünschten
+zurückgewünschter
+zurückgewünschtes
+zurückgezahlt
+zurückgezahlte
+zurückgezahltem
+zurückgezahlten
+zurückgezahlter
+zurückgezahltes
+zurückgezogen
+zurückgezogene
+zurückgezogenem
+zurückgezogenen
+zurückgezogener
+zurückgezogenere
+zurückgezogenerem
+zurückgezogeneren
+zurückgezogenerer
+zurückgezogeneres
+zurückgezogenes
+zurückgezogenste
+zurückgezogenstem
+zurückgezogensten
+zurückgezogenster
+zurückgezogenstes
+zurückging
+zurückgingen
+zurückgingst
+zurückgingt
+zurückgreife
+zurückgreifen
+zurückgreifend
+zurückgreifende
+zurückgreifendem
+zurückgreifenden
+zurückgreifender
+zurückgreifendes
+zurückgreifst
+zurückgreift
+zurückgriff
+zurückgriffen
+zurückgriffest
+zurückgriffst
+zurückgrifft
+zurückhaltend
+zurückhaltende
+zurückhaltendem
+zurückhaltenden
+zurückhaltender
+zurückhaltendere
+zurückhaltenderem
+zurückhaltenderen
+zurückhaltenderer
+zurückhaltenderes
+zurückhaltendes
+zurückhaltendste
+zurückhaltendstem
+zurückhaltendsten
+zurückhaltendster
+zurückhaltendstes
+zurückhielt
+zurückhielten
+zurückhieltest
+zurückhieltet
+zurückhieltst
+zurückkomme
+zurückkommen
+zurückkommend
+zurückkommende
+zurückkommendem
+zurückkommenden
+zurückkommender
+zurückkommendes
+zurückkommst
+zurückkommt
+zurücklag
+zurücklagen
+zurücklagst
+zurücklagt
+zurückliege
+zurückliegen
+zurückliegend
+zurückliegende
+zurückliegendem
+zurückliegenden
+zurückliegender
+zurückliegendes
+zurückliegst
+zurückliegt
+zurücksetze
+zurücksetzen
+zurücksetzend
+zurücksetzende
+zurücksetzendem
+zurücksetzenden
+zurücksetzender
+zurücksetzendes
+zurücksetzest
+zurücksetzt
+zurücksetzte
+zurücksetzten
+zurücksetztest
+zurücksetztet
+zurückwies
+zurückwiesen
+zurückwiesest
+zurückwiest
+zurückzog
+zurückzogen
+zurückzogst
+zurückzogt
+zurückzugeben
+zurückzugebend
+zurückzugebende
+zurückzugebendem
+zurückzugebenden
+zurückzugebender
+zurückzugebendes
+zurückzugreifen
+zurückzukommen
+zurückzusenden
+zurückzusendend
+zurückzusendende
+zurückzusendendem
+zurückzusendenden
+zurückzusendender
+zurückzusendendes
+zurückzusetzen
+zurückzutreten
+zurüste
+zurüsten
+zurüstend
+zurüstende
+zurüstendem
+zurüstenden
+zurüstender
+zurüstendes
+zurüstest
+zurüstet
+zurüstete
+zurüsteten
+zurüstetest
+zurüstetet
+zus
+zusage
+zusagen
+zusagend
+zusagende
+zusagendem
+zusagenden
+zusagender
+zusagendes
+zusagst
+zusagt
+zusagte
+zusagten
+zusagtest
+zusagtet
+zusah
+zusahen
+zusahst
+zusaht
+zusammen
+zusammenarbeite
+zusammenarbeiten
+zusammenarbeitend
+zusammenarbeitende
+zusammenarbeitendem
+zusammenarbeitenden
+zusammenarbeitender
+zusammenarbeitendes
+zusammenarbeitest
+zusammenarbeitet
+zusammenarbeitete
+zusammenarbeiteten
+zusammenarbeitetest
+zusammenarbeitetet
+zusammenbaue
+zusammenbauen
+zusammenbauend
+zusammenbauende
+zusammenbauendem
+zusammenbauenden
+zusammenbauender
+zusammenbauendes
+zusammenbaust
+zusammenbaut
+zusammenbaute
+zusammenbauten
+zusammenbautest
+zusammenbautet
+zusammenberufe
+zusammenberufen
+zusammenberufend
+zusammenberufende
+zusammenberufendem
+zusammenberufenden
+zusammenberufender
+zusammenberufendes
+zusammenberufene
+zusammenberufenem
+zusammenberufenen
+zusammenberufener
+zusammenberufenes
+zusammenberufst
+zusammenberuft
+zusammenbrach
+zusammenbrachen
+zusammenbrachest
+zusammenbrachst
+zusammenbracht
+zusammenbrachte
+zusammenbrachten
+zusammenbrachtest
+zusammenbrachtet
+zusammenbringe
+zusammenbringen
+zusammenbringend
+zusammenbringende
+zusammenbringendem
+zusammenbringenden
+zusammenbringender
+zusammenbringendes
+zusammenbringst
+zusammenbringt
+zusammenfasse
+zusammenfassen
+zusammenfassend
+zusammenfassende
+zusammenfassendem
+zusammenfassenden
+zusammenfassender
+zusammenfassendes
+zusammenfassest
+zusammenfasst
+zusammenfasste
+zusammenfassten
+zusammenfasstest
+zusammenfasstet
+zusammenfiel
+zusammenfielen
+zusammenfielst
+zusammenfielt
+zusammenfüge
+zusammenfügen
+zusammenfügend
+zusammenfügende
+zusammenfügendem
+zusammenfügenden
+zusammenfügender
+zusammenfügendes
+zusammenfügst
+zusammenfügt
+zusammenfügte
+zusammenfügten
+zusammenfügtest
+zusammenfügtet
+zusammenführe
+zusammenführen
+zusammenführend
+zusammenführende
+zusammenführendem
+zusammenführenden
+zusammenführender
+zusammenführendes
+zusammenführst
+zusammenführt
+zusammenführte
+zusammenführten
+zusammenführtest
+zusammenführtet
+zusammengearbeitet
+zusammengearbeitete
+zusammengearbeitetem
+zusammengearbeiteten
+zusammengearbeiteter
+zusammengearbeitetes
+zusammengebrochen
+zusammengebrochene
+zusammengebrochenem
+zusammengebrochenen
+zusammengebrochener
+zusammengebrochenes
+zusammengedrängt
+zusammengedrängte
+zusammengedrängtem
+zusammengedrängten
+zusammengedrängter
+zusammengedrängtes
+zusammengefasst
+zusammengefasste
+zusammengefasstem
+zusammengefassten
+zusammengefasster
+zusammengefasstes
+zusammengefügt
+zusammengefügte
+zusammengefügtem
+zusammengefügten
+zusammengefügter
+zusammengefügtes
+zusammengeführt
+zusammengeführte
+zusammengeführtem
+zusammengeführten
+zusammengeführter
+zusammengeführtes
+zusammengehalten
+zusammengehaltene
+zusammengehaltenem
+zusammengehaltenen
+zusammengehaltener
+zusammengehaltenes
+zusammengeklebt
+zusammengeklebte
+zusammengeklebtem
+zusammengeklebten
+zusammengeklebter
+zusammengeklebtes
+zusammengekoppelt
+zusammengekoppelte
+zusammengekoppeltem
+zusammengekoppelten
+zusammengekoppelter
+zusammengekoppeltes
+zusammengepresst
+zusammengepresste
+zusammengepresstem
+zusammengepressten
+zusammengepresster
+zusammengepresstes
+zusammengerechnet
+zusammengerechnete
+zusammengerechnetem
+zusammengerechneten
+zusammengerechneter
+zusammengerechnetes
+zusammengeschustert
+zusammengeschusterte
+zusammengeschustertem
+zusammengeschusterten
+zusammengeschusterter
+zusammengeschustertes
+zusammengesetzt
+zusammengesetzte
+zusammengesetztem
+zusammengesetzten
+zusammengesetzter
+zusammengesetztes
+zusammengesteckt
+zusammengesteckte
+zusammengestecktem
+zusammengesteckten
+zusammengesteckter
+zusammengestecktes
+zusammengestellt
+zusammengestellte
+zusammengestelltem
+zusammengestellten
+zusammengestellter
+zusammengestelltes
+zusammengestoßen
+zusammengestoßene
+zusammengestoßenem
+zusammengestoßenen
+zusammengestoßener
+zusammengestoßenes
+zusammengeströmt
+zusammengeströmte
+zusammengeströmtem
+zusammengeströmten
+zusammengeströmter
+zusammengeströmtes
+zusammengestürzt
+zusammengestürzte
+zusammengestürztem
+zusammengestürzten
+zusammengestürzter
+zusammengestürztes
+zusammengesucht
+zusammengesuchte
+zusammengesuchtem
+zusammengesuchten
+zusammengesuchter
+zusammengesuchtes
+zusammengetan
+zusammengetane
+zusammengetanem
+zusammengetanen
+zusammengetaner
+zusammengetanes
+zusammengetragen
+zusammengetragene
+zusammengetragenem
+zusammengetragenen
+zusammengetragener
+zusammengetragenes
+zusammengetreten
+zusammengetretene
+zusammengetretenem
+zusammengetretenen
+zusammengetretener
+zusammengetretenes
+zusammengetrommelt
+zusammengetrommelte
+zusammengetrommeltem
+zusammengetrommelten
+zusammengetrommelter
+zusammengetrommeltes
+zusammengewachsen
+zusammengewachsene
+zusammengewachsenem
+zusammengewachsenen
+zusammengewachsener
+zusammengewachsenes
+zusammenhanglos
+zusammenhanglose
+zusammenhanglosem
+zusammenhanglosen
+zusammenhangloser
+zusammenhanglosere
+zusammenhangloserem
+zusammenhangloseren
+zusammenhangloserer
+zusammenhangloseres
+zusammenhangloses
+zusammenhangloseste
+zusammenhanglosestem
+zusammenhanglosesten
+zusammenhanglosester
+zusammenhanglosestes
+zusammenhänge
+zusammenhängen
+zusammenhängend
+zusammenhängende
+zusammenhängendem
+zusammenhängenden
+zusammenhängender
+zusammenhängendes
+zusammenhängst
+zusammenhängt
+zusammenklappbar
+zusammenklappbare
+zusammenklappbarem
+zusammenklappbaren
+zusammenklappbarer
+zusammenklappbares
+zusammenläppere
+zusammenläppern
+zusammenläppernd
+zusammenläppernde
+zusammenläpperndem
+zusammenläppernden
+zusammenläppernder
+zusammenläpperndes
+zusammenläpperst
+zusammenläppert
+zusammenläpperte
+zusammenläpperten
+zusammenläppertest
+zusammenläppertet
+zusammenläppre
+zusammensetze
+zusammensetzen
+zusammensetzend
+zusammensetzende
+zusammensetzendem
+zusammensetzenden
+zusammensetzender
+zusammensetzendes
+zusammensetzest
+zusammensetzt
+zusammensetzte
+zusammensetzten
+zusammensetztest
+zusammensetztet
+zusammenstellbar
+zusammenstellbare
+zusammenstellbarem
+zusammenstellbaren
+zusammenstellbarer
+zusammenstellbares
+zusammenstelle
+zusammenstellen
+zusammenstellend
+zusammenstellende
+zusammenstellendem
+zusammenstellenden
+zusammenstellender
+zusammenstellendes
+zusammenstellst
+zusammenstellt
+zusammenstellte
+zusammenstellten
+zusammenstelltest
+zusammenstelltet
+zusammentrage
+zusammentragen
+zusammentragend
+zusammentragende
+zusammentragendem
+zusammentragenden
+zusammentragender
+zusammentragendes
+zusammentragt
+zusammenzusetzen
+zusammenzutragen
+zusammenzutragend
+zusammenzutragende
+zusammenzutragendem
+zusammenzutragenden
+zusammenzutragender
+zusammenzutragendes
+zuschaltbar
+zuschaltbare
+zuschaltbarem
+zuschaltbaren
+zuschaltbarer
+zuschaltbares
+zuschalte
+zuschalten
+zuschaltend
+zuschaltende
+zuschaltendem
+zuschaltenden
+zuschaltender
+zuschaltendes
+zuschaltest
+zuschaltet
+zuschaltete
+zuschalteten
+zuschaltetest
+zuschaltetet
+zuschaue
+zuschauen
+zuschauend
+zuschauende
+zuschauendem
+zuschauenden
+zuschauender
+zuschauendes
+zuschaust
+zuschaut
+zuschaute
+zuschauten
+zuschautest
+zuschautet
+zuschicke
+zuschicken
+zuschickend
+zuschickende
+zuschickendem
+zuschickenden
+zuschickender
+zuschickendes
+zuschickst
+zuschickt
+zuschickte
+zuschickten
+zuschicktest
+zuschicktet
+zuschiebe
+zuschieben
+zuschiebend
+zuschiebende
+zuschiebendem
+zuschiebenden
+zuschiebender
+zuschiebendes
+zuschiebst
+zuschiebt
+zuschieße
+zuschießen
+zuschießend
+zuschießende
+zuschießendem
+zuschießenden
+zuschießender
+zuschießendes
+zuschießest
+zuschießt
+zuschlage
+zuschlagen
+zuschlagend
+zuschlagende
+zuschlagendem
+zuschlagenden
+zuschlagender
+zuschlagendes
+zuschlagsfrei
+zuschlagsfreie
+zuschlagsfreiem
+zuschlagsfreien
+zuschlagsfreier
+zuschlagsfreies
+zuschlagt
+zuschließe
+zuschließen
+zuschließend
+zuschließende
+zuschließendem
+zuschließenden
+zuschließender
+zuschließendes
+zuschließest
+zuschließt
+zuschlägst
+zuschlägt
+zuschmeiße
+zuschmeißen
+zuschmeißend
+zuschmeißende
+zuschmeißendem
+zuschmeißenden
+zuschmeißender
+zuschmeißendes
+zuschmeißest
+zuschmeißt
+zuschmiere
+zuschmieren
+zuschmierend
+zuschmierende
+zuschmierendem
+zuschmierenden
+zuschmierender
+zuschmierendes
+zuschmierst
+zuschmiert
+zuschmierte
+zuschmierten
+zuschmiertest
+zuschmiertet
+zuschnalle
+zuschnallen
+zuschnallend
+zuschnallende
+zuschnallendem
+zuschnallenden
+zuschnallender
+zuschnallendes
+zuschnallst
+zuschnallt
+zuschnallte
+zuschnallten
+zuschnalltest
+zuschnalltet
+zuschnappe
+zuschnappen
+zuschnappend
+zuschnappende
+zuschnappendem
+zuschnappenden
+zuschnappender
+zuschnappendes
+zuschnappst
+zuschnappt
+zuschnappte
+zuschnappten
+zuschnapptest
+zuschnapptet
+zuschneide
+zuschneiden
+zuschneidend
+zuschneidende
+zuschneidendem
+zuschneidenden
+zuschneidender
+zuschneidendes
+zuschneidest
+zuschneidet
+zuschnüre
+zuschnüren
+zuschnürend
+zuschnürende
+zuschnürendem
+zuschnürenden
+zuschnürender
+zuschnürendes
+zuschnürst
+zuschnürt
+zuschnürte
+zuschnürten
+zuschnürtest
+zuschnürtet
+zuschraube
+zuschrauben
+zuschraubend
+zuschraubende
+zuschraubendem
+zuschraubenden
+zuschraubender
+zuschraubendes
+zuschraubst
+zuschraubt
+zuschraubte
+zuschraubten
+zuschraubtest
+zuschraubtet
+zuschreibe
+zuschreiben
+zuschreibend
+zuschreibende
+zuschreibendem
+zuschreibenden
+zuschreibender
+zuschreibendes
+zuschreibst
+zuschreibt
+zuschulden
+zuschütte
+zuschütten
+zuschüttend
+zuschüttende
+zuschüttendem
+zuschüttenden
+zuschüttender
+zuschüttendes
+zuschüttest
+zuschüttet
+zuschüttete
+zuschütteten
+zuschüttetest
+zuschüttetet
+zusehe
+zusehen
+zusehend
+zusehende
+zusehendem
+zusehenden
+zusehender
+zusehendes
+zusehends
+zuseht
+zusende
+zusenden
+zusendend
+zusendende
+zusendendem
+zusendenden
+zusendender
+zusendendes
+zusendest
+zusendet
+zusendete
+zusendeten
+zusendetest
+zusendetet
+zusetze
+zusetzen
+zusetzend
+zusetzende
+zusetzendem
+zusetzenden
+zusetzender
+zusetzendes
+zusetzest
+zusetzt
+zusetzte
+zusetzten
+zusetztest
+zusetztet
+zusichere
+zusichern
+zusichernd
+zusichernde
+zusicherndem
+zusichernden
+zusichernder
+zusicherndes
+zusicherst
+zusichert
+zusicherte
+zusicherten
+zusichertest
+zusichertet
+zusichre
+zusiegele
+zusiegeln
+zusiegelnd
+zusiegelnde
+zusiegelndem
+zusiegelnden
+zusiegelnder
+zusiegelndes
+zusiegelst
+zusiegelt
+zusiegelte
+zusiegelten
+zusiegeltest
+zusiegeltet
+zusiegle
+zusiehst
+zusieht
+zuspiele
+zuspielen
+zuspielend
+zuspielende
+zuspielendem
+zuspielenden
+zuspielender
+zuspielendes
+zuspielst
+zuspielt
+zuspielte
+zuspielten
+zuspieltest
+zuspieltet
+zuspitze
+zuspitzen
+zuspitzend
+zuspitzende
+zuspitzendem
+zuspitzenden
+zuspitzender
+zuspitzendes
+zuspitzest
+zuspitzt
+zuspitzte
+zuspitzten
+zuspitztest
+zuspitztet
+zuspreche
+zusprechen
+zusprechend
+zusprechende
+zusprechendem
+zusprechenden
+zusprechender
+zusprechendes
+zusprecht
+zuspringe
+zuspringen
+zuspringend
+zuspringende
+zuspringendem
+zuspringenden
+zuspringender
+zuspringendes
+zuspringst
+zuspringt
+zuspringte
+zuspringten
+zuspringtest
+zuspringtet
+zuspätkomme
+zuspätkommen
+zuspätkommend
+zuspätkommende
+zuspätkommendem
+zuspätkommenden
+zuspätkommender
+zuspätkommendes
+zuspätkommst
+zuspätkommt
+zustande
+zustandebrachte
+zustandebrachten
+zustandebrachtest
+zustandebrachtet
+zustandebringe
+zustandebringen
+zustandebringend
+zustandebringende
+zustandebringendem
+zustandebringenden
+zustandebringender
+zustandebringendes
+zustandebringst
+zustandebringt
+zustandegekommen
+zustandegekommene
+zustandegekommenem
+zustandegekommenen
+zustandegekommener
+zustandegekommenes
+zustandekomme
+zustandekommen
+zustandekommend
+zustandekommende
+zustandekommendem
+zustandekommenden
+zustandekommender
+zustandekommendes
+zustandekommst
+zustandekommt
+zustandsabhängig
+zustandsabhängige
+zustandsabhängigem
+zustandsabhängigen
+zustandsabhängiger
+zustandsabhängiges
+zustandsorientiert
+zustandsorientierte
+zustandsorientiertem
+zustandsorientierten
+zustandsorientierter
+zustandsorientiertes
+zustatten
+zustecke
+zustecken
+zusteckend
+zusteckende
+zusteckendem
+zusteckenden
+zusteckender
+zusteckendes
+zusteckst
+zusteckt
+zusteckte
+zusteckten
+zustecktest
+zustecktet
+zustehen
+zustehend
+zustehende
+zustehendem
+zustehenden
+zustehender
+zustehendes
+zusteht
+zustelle
+zustellen
+zustellend
+zustellende
+zustellendem
+zustellenden
+zustellender
+zustellendes
+zustellst
+zustellt
+zustellte
+zustellten
+zustelltest
+zustelltet
+zusteuere
+zusteuern
+zusteuernd
+zusteuernde
+zusteuerndem
+zusteuernden
+zusteuernder
+zusteuerndes
+zusteuerst
+zusteuert
+zusteuerte
+zusteuerten
+zusteuertest
+zusteuertet
+zusteure
+zustimme
+zustimmen
+zustimmend
+zustimmende
+zustimmendem
+zustimmenden
+zustimmender
+zustimmendes
+zustimmst
+zustimmt
+zustimmte
+zustimmten
+zustimmtest
+zustimmtet
+zustopfe
+zustopfen
+zustopfend
+zustopfende
+zustopfendem
+zustopfenden
+zustopfender
+zustopfendes
+zustopfst
+zustopft
+zustopfte
+zustopften
+zustopftest
+zustopftet
+zustoße
+zustoßen
+zustoßend
+zustoßende
+zustoßendem
+zustoßenden
+zustoßender
+zustoßendes
+zustoßt
+zuständig
+zuständige
+zuständigem
+zuständigen
+zuständiger
+zuständiges
+zuständlich
+zuständliche
+zuständlichem
+zuständlichen
+zuständlicher
+zuständliches
+zustößt
+zusätzlich
+zusätzliche
+zusätzlichem
+zusätzlichen
+zusätzlicher
+zusätzliches
+zutage
+zuteil
+zuteile
+zuteilen
+zuteilend
+zuteilende
+zuteilendem
+zuteilenden
+zuteilender
+zuteilendes
+zuteilst
+zuteilt
+zuteilte
+zuteilten
+zuteiltest
+zuteiltet
+zutiefst
+zutrage
+zutragen
+zutragend
+zutragende
+zutragendem
+zutragenden
+zutragender
+zutragendes
+zutragt
+zutraue
+zutrauen
+zutrauend
+zutrauende
+zutrauendem
+zutrauenden
+zutrauender
+zutrauendes
+zutraulich
+zutrauliche
+zutraulichem
+zutraulichen
+zutraulicher
+zutraulichere
+zutraulicherem
+zutraulicheren
+zutraulicherer
+zutraulicheres
+zutrauliches
+zutraulichste
+zutraulichstem
+zutraulichsten
+zutraulichster
+zutraulichstes
+zutraust
+zutraut
+zutraute
+zutrauten
+zutrautest
+zutrautet
+zutreffe
+zutreffen
+zutreffend
+zutreffende
+zutreffendem
+zutreffenden
+zutreffender
+zutreffendes
+zutrefft
+zutriffst
+zutrifft
+zutrinke
+zutrinken
+zutrinkend
+zutrinkende
+zutrinkendem
+zutrinkenden
+zutrinkender
+zutrinkendes
+zutrinkst
+zutrinkt
+zuträglich
+zuträgliche
+zuträglichem
+zuträglichen
+zuträglicher
+zuträglichere
+zuträglicherem
+zuträglicheren
+zuträglicherer
+zuträglicheres
+zuträgliches
+zuträglichste
+zuträglichstem
+zuträglichsten
+zuträglichster
+zuträglichstes
+zutuend
+zutuende
+zutuendem
+zutuenden
+zutuender
+zutuendes
+zuungunsten
+zuunterst
+zuverlässig
+zuverlässige
+zuverlässigem
+zuverlässigen
+zuverlässiger
+zuverlässigere
+zuverlässigerem
+zuverlässigeren
+zuverlässigerer
+zuverlässigeres
+zuverlässiges
+zuverlässigste
+zuverlässigstem
+zuverlässigsten
+zuverlässigster
+zuverlässigstes
+zuversichtlich
+zuversichtliche
+zuversichtlichem
+zuversichtlichen
+zuversichtlicher
+zuversichtlichere
+zuversichtlicherem
+zuversichtlicheren
+zuversichtlicherer
+zuversichtlicheres
+zuversichtliches
+zuversichtlichste
+zuversichtlichstem
+zuversichtlichsten
+zuversichtlichster
+zuversichtlichstes
+zuvor
+zuvorderst
+zuvorgekommen
+zuvorgekommene
+zuvorgekommenem
+zuvorgekommenen
+zuvorgekommener
+zuvorgekommenes
+zuvorkomme
+zuvorkommen
+zuvorkommend
+zuvorkommende
+zuvorkommendem
+zuvorkommenden
+zuvorkommender
+zuvorkommendere
+zuvorkommenderem
+zuvorkommenderen
+zuvorkommenderer
+zuvorkommenderes
+zuvorkommendes
+zuvorkommendste
+zuvorkommendstem
+zuvorkommendsten
+zuvorkommendster
+zuvorkommendstes
+zuvorkommst
+zuvorkommt
+zuvortue
+zuvortun
+zuvortust
+zuvortut
+zuvorzukommen
+zuwachse
+zuwachsen
+zuwachsend
+zuwachsende
+zuwachsendem
+zuwachsenden
+zuwachsender
+zuwachsendes
+zuwachst
+zuwandere
+zuwandern
+zuwandernd
+zuwandernde
+zuwanderndem
+zuwandernden
+zuwandernder
+zuwanderndes
+zuwanderst
+zuwandert
+zuwanderte
+zuwanderten
+zuwandertest
+zuwandertet
+zuwandre
+zuwarte
+zuwarten
+zuwartend
+zuwartende
+zuwartendem
+zuwartenden
+zuwartender
+zuwartendes
+zuwartest
+zuwartet
+zuwartete
+zuwarteten
+zuwartetest
+zuwartetet
+zuwehe
+zuwehen
+zuwehend
+zuwehende
+zuwehendem
+zuwehenden
+zuwehender
+zuwehendes
+zuwehst
+zuweht
+zuwehte
+zuwehten
+zuwehtest
+zuwehtet
+zuweilen
+zuweise
+zuweisen
+zuweisend
+zuweisende
+zuweisendem
+zuweisenden
+zuweisender
+zuweisendes
+zuweisest
+zuweist
+zuwende
+zuwenden
+zuwendend
+zuwendende
+zuwendendem
+zuwendenden
+zuwendender
+zuwendendes
+zuwendest
+zuwendet
+zuwendete
+zuwendeten
+zuwendetest
+zuwendetet
+zuwerfe
+zuwerfen
+zuwerfend
+zuwerfende
+zuwerfendem
+zuwerfenden
+zuwerfender
+zuwerfendes
+zuwerft
+zuwider
+zuwidergehandelt
+zuwidergehandelte
+zuwidergehandeltem
+zuwidergehandelten
+zuwidergehandelter
+zuwidergehandeltes
+zuwidergelaufen
+zuwidergelaufene
+zuwidergelaufenem
+zuwidergelaufenen
+zuwidergelaufener
+zuwidergelaufenes
+zuwiderhandele
+zuwiderhandeln
+zuwiderhandelnd
+zuwiderhandelnde
+zuwiderhandelndem
+zuwiderhandelnden
+zuwiderhandelnder
+zuwiderhandelndes
+zuwiderhandelst
+zuwiderhandelt
+zuwiderhandelte
+zuwiderhandelten
+zuwiderhandeltest
+zuwiderhandeltet
+zuwiderhandle
+zuwiderlaufe
+zuwiderlaufen
+zuwiderlaufend
+zuwiderlaufende
+zuwiderlaufendem
+zuwiderlaufenden
+zuwiderlaufender
+zuwiderlaufendes
+zuwiderlauft
+zuwinke
+zuwinken
+zuwinkend
+zuwinkende
+zuwinkendem
+zuwinkenden
+zuwinkender
+zuwinkendes
+zuwinkst
+zuwinkt
+zuwinkte
+zuwinkten
+zuwinktest
+zuwinktet
+zuzahle
+zuzahlen
+zuzahlend
+zuzahlende
+zuzahlendem
+zuzahlenden
+zuzahlender
+zuzahlendes
+zuzahlst
+zuzahlt
+zuzahlte
+zuzahlten
+zuzahltest
+zuzahltet
+zuzeiten
+zuziehe
+zuziehen
+zuziehend
+zuziehende
+zuziehendem
+zuziehenden
+zuziehender
+zuziehendes
+zuziehst
+zuzieht
+zuzubilligen
+zuzubilligend
+zuzubilligende
+zuzubilligendem
+zuzubilligenden
+zuzubilligender
+zuzubilligendes
+zuzudrücken
+zuzudrückend
+zuzudrückende
+zuzudrückendem
+zuzudrückenden
+zuzudrückender
+zuzudrückendes
+zuzufügen
+zuzufügend
+zuzufügende
+zuzufügendem
+zuzufügenden
+zuzufügender
+zuzufügendes
+zuzuführen
+zuzuführend
+zuzuführende
+zuzuführendem
+zuzuführenden
+zuzuführender
+zuzuführendes
+zuzugeben
+zuzugebend
+zuzugebende
+zuzugebendem
+zuzugebenden
+zuzugebender
+zuzugebendes
+zuzugestehen
+zuzugestehend
+zuzugestehende
+zuzugestehendem
+zuzugestehenden
+zuzugestehender
+zuzugestehendes
+zuzugreifen
+zuzuhören
+zuzulassen
+zuzulassend
+zuzulassende
+zuzulassendem
+zuzulassenden
+zuzulassender
+zuzulassendes
+zuzuleiten
+zuzuleitend
+zuzuleitende
+zuzuleitendem
+zuzuleitenden
+zuzuleitender
+zuzuleitendes
+zuzumuten
+zuzumutend
+zuzumutende
+zuzumutendem
+zuzumutenden
+zuzumutender
+zuzumutendes
+zuzuordnen
+zuzuordnend
+zuzuordnende
+zuzuordnendem
+zuzuordnenden
+zuzuordnender
+zuzuordnendes
+zuzurechnen
+zuzurechnend
+zuzurechnende
+zuzurechnendem
+zuzurechnenden
+zuzurechnender
+zuzurechnendes
+zuzureden
+zuzuschicken
+zuzuschickend
+zuzuschickende
+zuzuschickendem
+zuzuschickenden
+zuzuschickender
+zuzuschickendes
+zuzuschieben
+zuzuschiebend
+zuzuschiebende
+zuzuschiebendem
+zuzuschiebenden
+zuzuschiebender
+zuzuschiebendes
+zuzuschlagen
+zuzuschlagend
+zuzuschlagende
+zuzuschlagendem
+zuzuschlagenden
+zuzuschlagender
+zuzuschlagendes
+zuzuschreiben
+zuzuschreibend
+zuzuschreibende
+zuzuschreibendem
+zuzuschreibenden
+zuzuschreibender
+zuzuschreibendes
+zuzusichern
+zuzusichernd
+zuzusichernde
+zuzusicherndem
+zuzusichernden
+zuzusichernder
+zuzusicherndes
+zuzustellen
+zuzustellend
+zuzustellende
+zuzustellendem
+zuzustellenden
+zuzustellender
+zuzustellendes
+zuzustimmen
+zuzuweisen
+zuzuweisend
+zuzuweisende
+zuzuweisendem
+zuzuweisenden
+zuzuweisender
+zuzuweisendes
+zuzuwenden
+zuzuwendend
+zuzuwendende
+zuzuwendendem
+zuzuwendenden
+zuzuwendender
+zuzuwendendes
+zuzüglich
+zuzügliche
+zuzüglichem
+zuzüglichen
+zuzüglicher
+zuzügliches
+zwang
+zwangen
+zwanghaft
+zwanghafte
+zwanghaftem
+zwanghaften
+zwanghafter
+zwanghaftere
+zwanghafterem
+zwanghafteren
+zwanghafterer
+zwanghafteres
+zwanghaftes
+zwanghafteste
+zwanghaftestem
+zwanghaftesten
+zwanghaftester
+zwanghaftestes
+zwanglos
+zwanglose
+zwanglosem
+zwanglosen
+zwangloser
+zwanglosere
+zwangloserem
+zwangloseren
+zwangloserer
+zwangloseres
+zwangloses
+zwangloseste
+zwanglosestem
+zwanglosesten
+zwanglosester
+zwanglosestes
+zwangsläufig
+zwangsläufige
+zwangsläufigem
+zwangsläufigen
+zwangsläufiger
+zwangsläufigere
+zwangsläufigerem
+zwangsläufigeren
+zwangsläufigerer
+zwangsläufigeres
+zwangsläufiges
+zwangsläufigste
+zwangsläufigstem
+zwangsläufigsten
+zwangsläufigster
+zwangsläufigstes
+zwangst
+zwangsweise
+zwangt
+zwanzig
+zwanziger
+zwanzigerlei
+zwanzigern
+zwanzigfach
+zwanzigfache
+zwanzigfachem
+zwanzigfachen
+zwanzigfacher
+zwanzigfaches
+zwanzigjährig
+zwanzigjährige
+zwanzigjährigem
+zwanzigjährigen
+zwanzigjähriger
+zwanzigjähriges
+zwanzigste
+zwanzigstel
+zwanzigstem
+zwanzigsten
+zwanzigster
+zwanzigstes
+zwanzigtausend
+zwar
+zweckbestimmt
+zweckbestimmte
+zweckbestimmtem
+zweckbestimmten
+zweckbestimmter
+zweckbestimmtes
+zweckdienlich
+zweckdienliche
+zweckdienlichem
+zweckdienlichen
+zweckdienlicher
+zweckdienlichere
+zweckdienlicherem
+zweckdienlicheren
+zweckdienlicherer
+zweckdienlicheres
+zweckdienliches
+zweckdienlichste
+zweckdienlichstem
+zweckdienlichsten
+zweckdienlichster
+zweckdienlichstes
+zweckentfremdet
+zweckentfremdete
+zweckentfremdetem
+zweckentfremdeten
+zweckentfremdeter
+zweckentfremdetere
+zweckentfremdeterem
+zweckentfremdeteren
+zweckentfremdeterer
+zweckentfremdeteres
+zweckentfremdetes
+zweckentfremdetste
+zweckentfremdetstem
+zweckentfremdetsten
+zweckentfremdetster
+zweckentfremdetstes
+zweckentsprechend
+zweckentsprechende
+zweckentsprechendem
+zweckentsprechenden
+zweckentsprechender
+zweckentsprechendes
+zweckgebunden
+zweckgebundene
+zweckgebundenem
+zweckgebundenen
+zweckgebundener
+zweckgebundenes
+zwecklos
+zwecklose
+zwecklosem
+zwecklosen
+zweckloser
+zwecklosere
+zweckloserem
+zweckloseren
+zweckloserer
+zweckloseres
+zweckloses
+zweckloseste
+zwecklosestem
+zwecklosesten
+zwecklosester
+zwecklosestes
+zweckmäßig
+zweckmäßige
+zweckmäßigem
+zweckmäßigen
+zweckmäßiger
+zweckmäßigere
+zweckmäßigerem
+zweckmäßigeren
+zweckmäßigerer
+zweckmäßigeres
+zweckmäßigerweise
+zweckmäßiges
+zweckmäßigste
+zweckmäßigstem
+zweckmäßigsten
+zweckmäßigster
+zweckmäßigstes
+zwecks
+zweckwidrig
+zweckwidrige
+zweckwidrigem
+zweckwidrigen
+zweckwidriger
+zweckwidrigere
+zweckwidrigerem
+zweckwidrigeren
+zweckwidrigerer
+zweckwidrigeres
+zweckwidriges
+zweckwidrigste
+zweckwidrigstem
+zweckwidrigsten
+zweckwidrigster
+zweckwidrigstes
+zwei
+zweiaderig
+zweiaderige
+zweiaderigem
+zweiaderigen
+zweiaderiger
+zweiaderiges
+zweiadrig
+zweiadrige
+zweiadrigem
+zweiadrigen
+zweiadriger
+zweiadriges
+zweiarmig
+zweiarmige
+zweiarmigem
+zweiarmigen
+zweiarmiger
+zweiarmiges
+zweibeinig
+zweibeinige
+zweibeinigem
+zweibeinigen
+zweibeiniger
+zweibeiniges
+zweibändig
+zweibändige
+zweibändigem
+zweibändigen
+zweibändiger
+zweibändiges
+zweideutig
+zweideutige
+zweideutigem
+zweideutigen
+zweideutiger
+zweideutigere
+zweideutigerem
+zweideutigeren
+zweideutigerer
+zweideutigeres
+zweideutiges
+zweideutigste
+zweideutigstem
+zweideutigsten
+zweideutigster
+zweideutigstes
+zweidimensional
+zweidimensionale
+zweidimensionalem
+zweidimensionalen
+zweidimensionaler
+zweidimensionales
+zweidrittel
+zweieinhalb
+zweier
+zweierlei
+zweifach
+zweifache
+zweifachem
+zweifachen
+zweifacher
+zweifaches
+zweifarbig
+zweifarbige
+zweifarbigem
+zweifarbigen
+zweifarbiger
+zweifarbiges
+zweifele
+zweifelhaft
+zweifelhafte
+zweifelhaftem
+zweifelhaften
+zweifelhafter
+zweifelhaftere
+zweifelhafterem
+zweifelhafteren
+zweifelhafterer
+zweifelhafteres
+zweifelhaftes
+zweifelhafteste
+zweifelhaftestem
+zweifelhaftesten
+zweifelhaftester
+zweifelhaftestes
+zweifellos
+zweifellose
+zweifellosem
+zweifellosen
+zweifelloser
+zweifellosere
+zweifelloserem
+zweifelloseren
+zweifelloserer
+zweifelloseres
+zweifelloses
+zweifelloseste
+zweifellosestem
+zweifellosesten
+zweifellosester
+zweifellosestes
+zweifeln
+zweifelnd
+zweifelnde
+zweifelndem
+zweifelnden
+zweifelnder
+zweifelndere
+zweifelnderem
+zweifelnderen
+zweifelnderer
+zweifelnderes
+zweifelndes
+zweifelndste
+zweifelndstem
+zweifelndsten
+zweifelndster
+zweifelndstes
+zweifelsfrei
+zweifelsfreie
+zweifelsfreiem
+zweifelsfreien
+zweifelsfreier
+zweifelsfreies
+zweifelsohne
+zweifelst
+zweifelt
+zweifelte
+zweifelten
+zweifeltest
+zweifeltet
+zweifle
+zweifältig
+zweifältige
+zweifältigem
+zweifältigen
+zweifältiger
+zweifältiges
+zweige
+zweigen
+zweigeteilt
+zweigeteilte
+zweigeteiltem
+zweigeteilten
+zweigeteilter
+zweigeteiltes
+zweigleisig
+zweigleisige
+zweigleisigem
+zweigleisigen
+zweigleisiger
+zweigleisiges
+zweigst
+zweigt
+zweigte
+zweigten
+zweigtest
+zweigtet
+zweihundert
+zweihändig
+zweihändige
+zweihändigem
+zweihändigen
+zweihändiger
+zweihändiges
+zweijährig
+zweijährige
+zweijährigem
+zweijährigen
+zweijähriger
+zweijähriges
+zweijährlich
+zweijährliche
+zweijährlichem
+zweijährlichen
+zweijährlicher
+zweijährliches
+zweimal
+zweimalig
+zweimalige
+zweimaligem
+zweimaligen
+zweimaliger
+zweimaliges
+zweipolig
+zweipolige
+zweipoligem
+zweipoligen
+zweipoliger
+zweipoliges
+zweireihig
+zweireihige
+zweireihigem
+zweireihigen
+zweireihiger
+zweireihiges
+zweischneidig
+zweischneidige
+zweischneidigem
+zweischneidigen
+zweischneidiger
+zweischneidiges
+zweiseitig
+zweiseitige
+zweiseitigem
+zweiseitigen
+zweiseitiger
+zweiseitiges
+zweisilbig
+zweisilbige
+zweisilbigem
+zweisilbigen
+zweisilbiger
+zweisilbiges
+zweisitzig
+zweisitzige
+zweisitzigem
+zweisitzigen
+zweisitziger
+zweisitziges
+zweispaltig
+zweispaltige
+zweispaltigem
+zweispaltigen
+zweispaltiger
+zweispaltiges
+zweisprachig
+zweisprachige
+zweisprachigem
+zweisprachigen
+zweisprachiger
+zweisprachiges
+zweistellig
+zweistellige
+zweistelligem
+zweistelligen
+zweistelliger
+zweistelliges
+zweistimmig
+zweistimmige
+zweistimmigem
+zweistimmigen
+zweistimmiger
+zweistimmiges
+zweistufig
+zweistufige
+zweistufigem
+zweistufigen
+zweistufiger
+zweistufiges
+zweistöckig
+zweistöckige
+zweistöckigem
+zweistöckigen
+zweistöckiger
+zweistöckiges
+zweistündig
+zweistündige
+zweistündigem
+zweistündigen
+zweistündiger
+zweistündiges
+zweistündlich
+zweistündliche
+zweistündlichem
+zweistündlichen
+zweistündlicher
+zweistündliches
+zweit
+zweitausend
+zweitbeste
+zweitbestem
+zweitbesten
+zweitbester
+zweitbestes
+zweite
+zweiteilig
+zweiteilige
+zweiteiligem
+zweiteiligen
+zweiteiliger
+zweiteiliges
+zweitem
+zweiten
+zweitens
+zweiter
+zweites
+zweitgrößte
+zweitgrößtem
+zweitgrößten
+zweitgrößter
+zweitgrößtes
+zweitjüngste
+zweitjüngstem
+zweitjüngsten
+zweitjüngster
+zweitjüngstes
+zweitklassig
+zweitklassige
+zweitklassigem
+zweitklassigen
+zweitklassiger
+zweitklassiges
+zweitletzte
+zweitletztem
+zweitletzten
+zweitletzter
+zweitletztes
+zweitmächtigste
+zweitmächtigstem
+zweitmächtigsten
+zweitmächtigster
+zweitmächtigstes
+zweitrangig
+zweitrangige
+zweitrangigem
+zweitrangigen
+zweitrangiger
+zweitrangiges
+zweitstärkste
+zweitstärkstem
+zweitstärksten
+zweitstärkster
+zweitstärkstes
+zweitägig
+zweitägige
+zweitägigem
+zweitägigen
+zweitägiger
+zweitägiges
+zweitälteste
+zweitältestem
+zweitältesten
+zweitältester
+zweitältestes
+zweiwöchig
+zweiwöchige
+zweiwöchigem
+zweiwöchigen
+zweiwöchiger
+zweiwöchiges
+zweizackig
+zweizackige
+zweizackigem
+zweizackigen
+zweizackiger
+zweizackiges
+zweizeilig
+zweizeilige
+zweizeiligem
+zweizeiligen
+zweizeiliger
+zweizeiliges
+zwergenhaft
+zwergenhafte
+zwergenhaftem
+zwergenhaften
+zwergenhafter
+zwergenhaftere
+zwergenhafterem
+zwergenhafteren
+zwergenhafterer
+zwergenhafteres
+zwergenhaftes
+zwergenhafteste
+zwergenhaftestem
+zwergenhaftesten
+zwergenhaftester
+zwergenhaftestes
+zwicke
+zwickelförmig
+zwickelförmige
+zwickelförmigem
+zwickelförmigen
+zwickelförmiger
+zwickelförmiges
+zwicken
+zwickend
+zwickende
+zwickendem
+zwickenden
+zwickender
+zwickendes
+zwickst
+zwickt
+zwickte
+zwickten
+zwicktest
+zwicktet
+zwiebelförmig
+zwiebelförmige
+zwiebelförmigem
+zwiebelförmigen
+zwiebelförmiger
+zwiebelförmiges
+zwiefach
+zwiefache
+zwiefachem
+zwiefachen
+zwiefacher
+zwiefaches
+zwielichtig
+zwielichtige
+zwielichtigem
+zwielichtigen
+zwielichtiger
+zwielichtiges
+zwiespältig
+zwiespältige
+zwiespältigem
+zwiespältigen
+zwiespältiger
+zwiespältigere
+zwiespältigerem
+zwiespältigeren
+zwiespältigerer
+zwiespältigeres
+zwiespältiges
+zwiespältigste
+zwiespältigstem
+zwiespältigsten
+zwiespältigster
+zwiespältigstes
+zwieträchtig
+zwieträchtige
+zwieträchtigem
+zwieträchtigen
+zwieträchtiger
+zwieträchtiges
+zwinge
+zwingen
+zwingend
+zwingende
+zwingendem
+zwingenden
+zwingender
+zwingendes
+zwingst
+zwingt
+zwinkere
+zwinkern
+zwinkernd
+zwinkernde
+zwinkerndem
+zwinkernden
+zwinkernder
+zwinkerndes
+zwinkerst
+zwinkert
+zwinkerte
+zwinkerten
+zwinkertest
+zwinkertet
+zwinkre
+zwirne
+zwirnen
+zwirnend
+zwirnende
+zwirnendem
+zwirnenden
+zwirnender
+zwirnendes
+zwirnst
+zwirnt
+zwirnte
+zwirnten
+zwirntest
+zwirntet
+zwischen
+zwischenartlich
+zwischenartliche
+zwischenartlichem
+zwischenartlichen
+zwischenartlicher
+zwischenartliches
+zwischendurch
+zwischengeschoben
+zwischengeschobene
+zwischengeschobenem
+zwischengeschobenen
+zwischengeschobener
+zwischengeschobenes
+zwischengespeichert
+zwischengespeicherte
+zwischengespeichertem
+zwischengespeicherten
+zwischengespeicherter
+zwischengespeichertes
+zwischenparteilich
+zwischenparteiliche
+zwischenparteilichem
+zwischenparteilichen
+zwischenparteilicher
+zwischenparteiliches
+zwischenspeichere
+zwischenspeichern
+zwischenspeicherst
+zwischenspeichert
+zwischenspeichre
+zwischenstaatlich
+zwischenstaatliche
+zwischenstaatlichem
+zwischenstaatlichen
+zwischenstaatlicher
+zwischenstaatliches
+zwischenzeitlich
+zwischenzeitliche
+zwischenzeitlichem
+zwischenzeitlichen
+zwischenzeitlicher
+zwischenzeitliches
+zwischenzuspeichern
+zwitschere
+zwitschern
+zwitschernd
+zwitschernde
+zwitscherndem
+zwitschernden
+zwitschernder
+zwitscherndes
+zwitscherst
+zwitschert
+zwitscherte
+zwitscherten
+zwitschertest
+zwitschertet
+zwitschre
+zwitterhaft
+zwitterhafte
+zwitterhaftem
+zwitterhaften
+zwitterhafter
+zwitterhaftes
+zwänge
+zwängen
+zwängend
+zwängende
+zwängendem
+zwängenden
+zwängender
+zwängendes
+zwängst
+zwängt
+zwängte
+zwängten
+zwängtest
+zwängtet
+zwölf
+zwölfeckig
+zwölfeckige
+zwölfeckigem
+zwölfeckigen
+zwölfeckiger
+zwölfeckiges
+zwölferlei
+zwölfhundert
+zwölfjährig
+zwölfjährige
+zwölfjährigem
+zwölfjährigen
+zwölfjähriger
+zwölfjähriges
+zwölfqqfach
+zwölfqqfache
+zwölfqqfachem
+zwölfqqfachen
+zwölfqqfacher
+zwölfqqfaches
+zwölfstämmig
+zwölfstämmige
+zwölfstämmigem
+zwölfstämmigen
+zwölfstämmiger
+zwölfstämmiges
+zwölfstündig
+zwölfstündige
+zwölfstündigem
+zwölfstündigen
+zwölfstündiger
+zwölfstündiges
+zwölft
+zwölftausend
+zwölfte
+zwölftel
+zwölftem
+zwölften
+zwölftens
+zwölfter
+zwölftes
+zwölftägig
+zwölftägige
+zwölftägigem
+zwölftägigen
+zwölftägiger
+zwölftägiges
+zyklisch
+zyklische
+zyklischem
+zyklischen
+zyklischer
+zyklisches
+zyklopisch
+zyklopische
+zyklopischem
+zyklopischen
+zyklopischer
+zyklopisches
+zylinderförmig
+zylinderförmige
+zylinderförmigem
+zylinderförmigen
+zylinderförmiger
+zylinderförmiges
+zylindrisch
+zylindrische
+zylindrischem
+zylindrischen
+zylindrischer
+zylindrisches
+zynisch
+zynische
+zynischem
+zynischen
+zynischer
+zynischere
+zynischerem
+zynischeren
+zynischerer
+zynischeres
+zynisches
+zynischste
+zynischstem
+zynischsten
+zynischster
+zynischstes
+zynismusfördernd
+zynismusfördernde
+zynismusförderndem
+zynismusfördernden
+zynismusfördernder
+zynismusförderndes
+zzgl
+zäh
+zähe
+zähem
+zähen
+zäher
+zähere
+zäherem
+zäheren
+zäherer
+zäheres
+zähes
+zähflüssig
+zähflüssige
+zähflüssigem
+zähflüssigen
+zähflüssiger
+zähflüssiges
+zählbar
+zählbare
+zählbarem
+zählbaren
+zählbarer
+zählbares
+zähle
+zählebig
+zählebige
+zählebigem
+zählebigen
+zählebiger
+zählebiges
+zählen
+zählend
+zählende
+zählendem
+zählenden
+zählender
+zählendes
+zählst
+zählt
+zählte
+zählten
+zähltest
+zähltet
+zähmbar
+zähmbare
+zähmbarem
+zähmbaren
+zähmbarer
+zähmbares
+zähme
+zähmen
+zähmend
+zähmende
+zähmendem
+zähmenden
+zähmender
+zähmendes
+zähmst
+zähmt
+zähmte
+zähmten
+zähmtest
+zähmtet
+zähneknirschend
+zähneknirschende
+zähneknirschendem
+zähneknirschenden
+zähneknirschender
+zähneknirschendes
+zärtlich
+zärtliche
+zärtlichem
+zärtlichen
+zärtlicher
+zärtlichere
+zärtlicherem
+zärtlicheren
+zärtlicherer
+zärtlicheres
+zärtliches
+zärtlichste
+zärtlichstem
+zärtlichsten
+zärtlichster
+zärtlichstes
+zögere
+zögerlich
+zögerliche
+zögerlichem
+zögerlichen
+zögerlicher
+zögerliches
+zögern
+zögernd
+zögernde
+zögerndem
+zögernden
+zögernder
+zögerndere
+zögernderem
+zögernderen
+zögernderer
+zögernderes
+zögerndes
+zögerndste
+zögerndstem
+zögerndsten
+zögerndster
+zögerndstes
+zögerst
+zögert
+zögerte
+zögerten
+zögertest
+zögertet
+zögre
+zöllig
+zöllige
+zölligem
+zölligen
+zölliger
+zölliges
+züchte
+züchten
+züchtend
+züchtende
+züchtendem
+züchtenden
+züchtender
+züchtendes
+züchtest
+züchtet
+züchtete
+züchteten
+züchtetest
+züchtetet
+züchtig
+züchtige
+züchtigem
+züchtigen
+züchtigend
+züchtigende
+züchtigendem
+züchtigenden
+züchtigender
+züchtigendes
+züchtiger
+züchtigere
+züchtigerem
+züchtigeren
+züchtigerer
+züchtigeres
+züchtiges
+züchtigst
+züchtigste
+züchtigstem
+züchtigsten
+züchtigster
+züchtigstes
+züchtigt
+züchtigte
+züchtigten
+züchtigtest
+züchtigtet
+zücke
+zücken
+zückend
+zückende
+zückendem
+zückenden
+zückender
+zückendes
+zückst
+zückt
+zückte
+zückten
+zücktest
+zücktet
+zügele
+zügellos
+zügellose
+zügellosem
+zügellosen
+zügelloser
+zügellosere
+zügelloserem
+zügelloseren
+zügelloserer
+zügelloseres
+zügelloses
+zügelloseste
+zügellosestem
+zügellosesten
+zügellosester
+zügellosestes
+zügeln
+zügelnd
+zügelnde
+zügelndem
+zügelnden
+zügelnder
+zügelndes
+zügelst
+zügelt
+zügelte
+zügelten
+zügeltest
+zügeltet
+zügig
+zügige
+zügigem
+zügigen
+zügiger
+zügiges
+zügle
+zünde
+zündele
+zündeln
+zündelnd
+zündelnde
+zündelndem
+zündelnden
+zündelnder
+zündelndes
+zündelst
+zündelt
+zündelte
+zündelten
+zündeltest
+zündeltet
+zünden
+zündend
+zündende
+zündendem
+zündenden
+zündender
+zündendes
+zündest
+zündet
+zündete
+zündeten
+zündetest
+zündetet
+zündle
+züngele
+züngeln
+züngelnd
+züngelnde
+züngelndem
+züngelnden
+züngelnder
+züngelndes
+züngelst
+züngelt
+züngelte
+züngelten
+züngeltest
+züngeltet
+züngle
+zürcherisch
+zürcherische
+zürcherischem
+zürcherischen
+zürcherischer
+zürcherisches
+zürne
+zürnen
+zürnend
+zürnende
+zürnendem
+zürnenden
+zürnender
+zürnendes
+zürnst
+zürnt
+zürnte
+zürnten
+zürntest
+zürntet
+Äbte
+Äbten
+Äbtissin
+Äbtissinnen
+Ächtung
+Ächtungen
+Äcker
+Äckern
+Äderchen
+Äderchens
+Äffin
+Äffinnen
+Ägide
+Ägypten
+Ägypter
+Ägypterin
+Ägypterinnen
+Ägyptern
+Ägypters
+Ähnlichkeit
+Ähnlichkeiten
+Ähre
+Ähren
+Ältestenrat
+Ältestenrates
+Ämter
+Ämtern
+Änderung
+Änderungen
+Änderungsantrag
+Änderungsantrages
+Änderungsantrags
+Änderungsanträge
+Änderungsanträgen
+Änderungswunsch
+Änderungswunsches
+Änderungswunschs
+Änderungswünsche
+Änderungswünschen
+Änderungszeit
+Änderungszeiten
+Ängste
+Ängsten
+Ängstlichkeit
+Äpfel
+Äpfeln
+Äquator
+Äquators
+Äquivalenz
+Äquivalenzen
+Äquivalenzklasse
+Äquivalenzklassen
+Äquivalenzrelation
+Äquivalenzrelationen
+Ära
+Ärger
+Ärgernis
+Ärgernisse
+Ärgernissen
+Ärgernisses
+Ärgers
+Ärmel
+Ärmelkanal
+Ärmelkanals
+Ärmeln
+Ärmels
+Ärsche
+Ärschen
+Ärzte
+Ärzten
+Ärztin
+Ärztinnen
+Ästhet
+Ästheten
+Ästhetik
+Äther
+Äthers
+Äthiopien
+Äthiopier
+Äthiopierin
+Äthiopierinnen
+Äthiopiern
+Äthiopiers
+Äthyl
+Ätna
+Ätzung
+Ätzungen
+Äugelchen
+Äugelchens
+Äußerlichkeit
+Äußerlichkeiten
+Äußerung
+Äußerungen
+Äxte
+Äxten
+ÖTV
+Öfen
+Öffentlichkeit
+Öffentlichkeitsarbeit
+Öffner
+Öffnung
+Öffnungen
+Ökologie
+Ökonom
+Ökonomen
+Ökonomie
+Ökosystem
+Ökosysteme
+Ökosystemen
+Ökosystems
+Ökumene
+Öl
+Öls
+Örtlichkeit
+Örtlichkeiten
+Öse
+Ösen
+Österreich
+Österreicher
+Österreicherin
+Österreicherinnen
+Österreichern
+Österreichers
+Österreichs
+Übel
+Übelbefinden
+Übelbefindens
+Übeln
+Übels
+Übelstand
+Übelstands
+Übelstände
+Übelständen
+Übeltat
+Übeltäter
+Übeltäterin
+Übeltäterinnen
+Übeltätern
+Übeltäters
+Überangebot
+Überangebote
+Überangeboten
+Überangebotes
+Überangebots
+Überanstrengung
+Überanstrengungen
+Überarbeitung
+Überarbeitungen
+Überbau
+Überbaus
+Überbauten
+Überbeanspruchung
+Überbelastung
+Überbelegung
+Überbewertung
+Überbewertungen
+Überbleibsel
+Überbleibseln
+Überbleibsels
+Überblick
+Überblicks
+Überbringer
+Überbringerin
+Überbringerinnen
+Überbringern
+Überbringers
+Überbringung
+Überbringungen
+Überbrückung
+Überdruck
+Überdrucks
+Überdruss
+Überdrusses
+Übereifer
+Übereifers
+Übereignung
+Übereignungen
+Übereilung
+Übereilungen
+Übereinkünfte
+Übereinkünften
+Übereinstimmung
+Übereinstimmungen
+Überfahrt
+Überfahrten
+Überfall
+Überfalls
+Überfluss
+Überflusses
+Überflüsse
+Überflüssen
+Überfremdung
+Überfunktion
+Überfunktionen
+Überfälle
+Überfällen
+Überführung
+Überführungen
+Überfüllung
+Überfüllungen
+Übergabe
+Übergang
+Übergangs
+Übergangsperiode
+Übergangsperioden
+Übergangsstadium
+Übergangsstadiums
+Übergangszeit
+Übergangszeiten
+Übergewicht
+Übergewichte
+Übergewichten
+Übergewichts
+Übergriff
+Übergriffe
+Übergriffen
+Übergriffs
+Übergröße
+Übergrößen
+Übergänge
+Übergängen
+Überhang
+Überhangs
+Überinterpretation
+Überinterpretationen
+Überkapazität
+Überlagerung
+Überlagerungen
+Überlappung
+Überlassung
+Überlassungen
+Überlast
+Überlastung
+Überlastungen
+Überlauf
+Überlaufs
+Überlegenheit
+Überlegenheitsgefühl
+Überlegung
+Überlegungen
+Überlieferung
+Überlieferungen
+Überläufe
+Überläufen
+Überläufer
+Überläufern
+Übermaß
+Übermaße
+Übermaßen
+Übermaßes
+Übermittlung
+Übermittlungen
+Übermut
+Übermuts
+Übermächte
+Übermächten
+Übermüdung
+Übermüdungen
+Übernachtung
+Übernachtungen
+Übernachtungsmöglichkeit
+Übernachtungsmöglichkeiten
+Übernahme
+Übernahmeangebot
+Übernahmebedingung
+Übernahmebedingungen
+Überproduktion
+Überproduktionen
+Überprüfbarkeit
+Überprüfung
+Überprüfungen
+Überraschung
+Überraschungen
+Überredung
+Überredungskunst
+Überredungskünste
+Überredungskünsten
+Überreichung
+Überreichungen
+Überrest
+Überreste
+Überresten
+Überrestes
+Überrests
+Überrumpelung
+Überrumpelungen
+Überschlag
+Überschlags
+Überschlagsrechnung
+Überschlagsrechnungen
+Überschläge
+Überschlägen
+Überschneidung
+Überschneidungen
+Überschnitt
+Überschnitts
+Überschreitung
+Überschrift
+Überschriften
+Überschuss
+Überschusses
+Überschwang
+Überschwangs
+Überschwemmung
+Überschwänglichkeit
+Überschätzung
+Überschätzungen
+Überschüsse
+Überschüssen
+Übersee
+Übersetzens
+Übersetzer
+Übersetzerbau
+Übersetzerbauer
+Übersetzerbauern
+Übersetzerbauers
+Übersetzerbaus
+Übersetzerin
+Übersetzerinnen
+Übersetzern
+Übersetzers
+Übersetzung
+Übersetzungen
+Übersetzungslauf
+Übersetzungslaufs
+Übersetzungsläufe
+Übersetzungsläufen
+Übersetzungsphase
+Übersetzungsphasen
+Übersetzungszeit
+Übersetzungszeiten
+Übersicht
+Übersichten
+Übersichtlichkeit
+Übersiedelung
+Übersiedelungen
+Übersiedler
+Überspanntheit
+Überspannung
+Überspannungen
+Übersteuerung
+Überstunde
+Überstunden
+Überstürzung
+Überstürzungen
+Übersättigung
+Übersättigungen
+Übertrag
+Übertragbarkeit
+Übertrags
+Übertragung
+Übertragungsfehler
+Übertragungsfehlern
+Übertragungsgeschwindigkeit
+Übertragungsgeschwindigkeiten
+Übertragungsmedien
+Übertragungsprogramm
+Übertragungsprotokoll
+Übertragungsrate
+Übertragungsraten
+Übertragungsrichtung
+Übertragungsrichtungen
+Übertragungsstrecke
+Übertragungsstrecken
+Übertragungszeit
+Übertreibung
+Übertreibungen
+Übertreter
+Übertreterin
+Übertreterinnen
+Übertretern
+Übertreters
+Übertretung
+Übertretungen
+Übertritt
+Übertritte
+Übertritten
+Übertritts
+Überträge
+Überträgen
+Übervorteilung
+Übervorteilungen
+Überwachung
+Überwachungen
+Überweisung
+Überweisungen
+Überwinder
+Überwindern
+Überwinders
+Überwindung
+Überwindungen
+Überzahl
+Überzeugung
+Überzeugungen
+Überzeugungskraft
+Überzeugungskräfte
+Überzeugungskräften
+Überzieher
+Überziehern
+Überziehers
+Überziehung
+Überzug
+Überzugs
+Überzüge
+Überzügen
+Übrige
+Übrigen
+Übriges
+Übung
+Übungen
+Übungsaufgabe
+Übungsaufgaben
+Übungsbetrieb
+Übungsbetriebs
+Übungsgruppe
+Übungsgruppen
+Übungsplatz
+Übungsplatzes
+Übungsplätze
+Übungsplätzen
+Übungsraum
+Übungsraumes
+Übungsraums
+Übungsräume
+Übungsräumen
+Übungszweck
+Übungszwecke
+Übungszwecken
+Übungszwecks
+Üppigkeit
+ächte
+ächten
+ächtend
+ächtende
+ächtendem
+ächtenden
+ächtender
+ächtendes
+ächtest
+ächtet
+ächtete
+ächteten
+ächtetest
+ächtetet
+ächze
+ächzen
+ächzend
+ächzende
+ächzendem
+ächzenden
+ächzender
+ächzendes
+ächzest
+ächzt
+ächzte
+ächzten
+ächztest
+ächztet
+äffe
+äffen
+äffend
+äffende
+äffendem
+äffenden
+äffender
+äffendes
+äffst
+äfft
+äffte
+äfften
+äfftest
+äfftet
+ägyptisch
+ägyptische
+ägyptischem
+ägyptischen
+ägyptischer
+ägyptisches
+ägäisch
+ägäische
+ägäischem
+ägäischen
+ägäischer
+ägäisches
+ähnele
+ähneln
+ähnelnd
+ähnelnde
+ähnelndem
+ähnelnden
+ähnelnder
+ähnelndes
+ähnelst
+ähnelt
+ähnelte
+ähnelten
+ähneltest
+ähneltet
+ähnle
+ähnlich
+ähnliche
+ähnlichem
+ähnlichen
+ähnlicher
+ähnlichere
+ähnlicherem
+ähnlicheren
+ähnlicherer
+ähnlicheres
+ähnliches
+ähnlichste
+ähnlichstem
+ähnlichsten
+ähnlichster
+ähnlichstes
+älter
+ältere
+älterem
+älteren
+älterer
+älteres
+älteste
+ältestem
+ältesten
+ältester
+ältestes
+ältlich
+ältliche
+ältlichem
+ältlichen
+ältlicher
+ältliches
+änderbar
+änderbare
+änderbarem
+änderbaren
+änderbarer
+änderbares
+ändere
+ändern
+ändernd
+ändernde
+änderndem
+ändernden
+ändernder
+änderndes
+änderst
+ändert
+änderte
+änderten
+ändertest
+ändertet
+ändre
+ängstige
+ängstigen
+ängstigend
+ängstigende
+ängstigendem
+ängstigenden
+ängstigender
+ängstigendes
+ängstigst
+ängstigt
+ängstigte
+ängstigten
+ängstigtest
+ängstigtet
+ängstlich
+ängstliche
+ängstlichem
+ängstlichen
+ängstlicher
+ängstlichere
+ängstlicherem
+ängstlicheren
+ängstlicherer
+ängstlicheres
+ängstliches
+ängstlichste
+ängstlichstem
+ängstlichsten
+ängstlichster
+ängstlichstes
+äquidistant
+äquidistante
+äquidistantem
+äquidistanten
+äquidistanter
+äquidistantes
+äquifunktional
+äquifunktionale
+äquifunktionalem
+äquifunktionalen
+äquifunktionaler
+äquifunktionales
+äquivalent
+äquivalente
+äquivalentem
+äquivalenten
+äquivalenter
+äquivalentes
+ärger
+ärgere
+ärgerem
+ärgeren
+ärgerer
+ärgeres
+ärgerlich
+ärgerliche
+ärgerlichem
+ärgerlichen
+ärgerlicher
+ärgerlichere
+ärgerlicherem
+ärgerlicheren
+ärgerlicherer
+ärgerlicheres
+ärgerlicherweise
+ärgerliches
+ärgerlichste
+ärgerlichstem
+ärgerlichsten
+ärgerlichster
+ärgerlichstes
+ärgern
+ärgernd
+ärgernde
+ärgerndem
+ärgernden
+ärgernder
+ärgerndes
+ärgerst
+ärgert
+ärgerte
+ärgerten
+ärgertest
+ärgertet
+ärgre
+ärgste
+ärgstem
+ärgsten
+ärgster
+ärgstes
+ärmer
+ärmere
+ärmerem
+ärmeren
+ärmerer
+ärmeres
+ärmlich
+ärmliche
+ärmlichem
+ärmlichen
+ärmlicher
+ärmlichere
+ärmlicherem
+ärmlicheren
+ärmlicherer
+ärmlicheres
+ärmliches
+ärmlichste
+ärmlichstem
+ärmlichsten
+ärmlichster
+ärmlichstes
+ärmste
+ärmstem
+ärmsten
+ärmster
+ärmstes
+ärztlich
+ärztliche
+ärztlichem
+ärztlichen
+ärztlicher
+ärztliches
+äse
+äsen
+äsend
+äsende
+äsendem
+äsenden
+äsender
+äsendes
+äsest
+äst
+äste
+ästen
+ästest
+ästet
+ästhetisch
+ästhetische
+ästhetischem
+ästhetischen
+ästhetischer
+ästhetisches
+ätherisch
+ätherische
+ätherischem
+ätherischen
+ätherischer
+ätherisches
+äthiopisch
+äthiopische
+äthiopischem
+äthiopischen
+äthiopischer
+äthiopisches
+ätsch
+ätze
+ätzen
+ätzend
+ätzende
+ätzendem
+ätzenden
+ätzender
+ätzendes
+ätzest
+ätzt
+ätzte
+ätzten
+ätztest
+ätztet
+äuge
+äugen
+äugend
+äugende
+äugendem
+äugenden
+äugender
+äugendes
+äugst
+äugt
+äugte
+äugten
+äugtest
+äugtet
+äußere
+äußerem
+äußeren
+äußerer
+äußeres
+äußerlich
+äußerliche
+äußerlichem
+äußerlichen
+äußerlicher
+äußerliches
+äußern
+äußernd
+äußernde
+äußerndem
+äußernden
+äußernder
+äußerndes
+äußerst
+äußerste
+äußerstem
+äußersten
+äußerster
+äußerstes
+äußert
+äußerte
+äußerten
+äußertest
+äußertet
+äußre
+öd
+öde
+ödem
+öden
+öder
+ödere
+öderem
+öderen
+öderer
+öderes
+ödes
+ödste
+ödstem
+ödsten
+ödster
+ödstes
+öffentlich
+öffentliche
+öffentlichem
+öffentlichen
+öffentlicher
+öffentlichere
+öffentlicherem
+öffentlicheren
+öffentlicherer
+öffentlicheres
+öffentliches
+öffentlichste
+öffentlichstem
+öffentlichsten
+öffentlichster
+öffentlichstes
+öffne
+öffnen
+öffnend
+öffnende
+öffnendem
+öffnenden
+öffnender
+öffnendes
+öffnest
+öffnet
+öffnete
+öffneten
+öffnetest
+öffnetet
+öfter
+öfteren
+öfters
+öftesten
+ökologisch
+ökologische
+ökologischem
+ökologischen
+ökologischer
+ökologisches
+ökonometrisch
+ökonometrische
+ökonometrischem
+ökonometrischen
+ökonometrischer
+ökonometrisches
+ökonomisch
+ökonomische
+ökonomischem
+ökonomischen
+ökonomischer
+ökonomisches
+ökumenisch
+ökumenische
+ökumenischem
+ökumenischen
+ökumenischer
+ökumenisches
+öle
+ölen
+ölend
+ölende
+ölendem
+ölenden
+ölender
+ölendes
+ölig
+ölige
+öligem
+öligen
+öliger
+öligere
+öligerem
+öligeren
+öligerer
+öligeres
+öliges
+öligste
+öligstem
+öligsten
+öligster
+öligstes
+ölst
+ölt
+ölte
+ölten
+öltest
+öltet
+örtlich
+örtliche
+örtlichem
+örtlichen
+örtlicher
+örtliches
+österlich
+österliche
+österlichem
+österlichen
+österlicher
+österliches
+österreichisch
+österreichische
+österreichischem
+österreichischen
+österreichischer
+österreichisches
+östlich
+östliche
+östlichem
+östlichen
+östlicher
+östlichere
+östlicherem
+östlicheren
+östlicherer
+östlicheres
+östliches
+östlichste
+östlichstem
+östlichsten
+östlichster
+östlichstes
+übe
+übel
+übellaunig
+übellaunige
+übellaunigem
+übellaunigen
+übellauniger
+übellauniges
+übelnehme
+übelnehmen
+übelnehmend
+übelnehmende
+übelnehmendem
+übelnehmenden
+übelnehmender
+übelnehmendes
+übelnehmt
+übelste
+übelstem
+übelsten
+übelster
+übelstes
+üben
+übend
+übende
+übendem
+übenden
+übender
+übendes
+über
+überall
+überaltert
+überalterte
+überaltertem
+überalterten
+überalterter
+überaltertes
+überanstrenge
+überanstrengen
+überanstrengend
+überanstrengende
+überanstrengendem
+überanstrengenden
+überanstrengender
+überanstrengendes
+überanstrengst
+überanstrengt
+überanstrengte
+überanstrengtem
+überanstrengten
+überanstrengter
+überanstrengtes
+überanstrengtest
+überanstrengtet
+überantworte
+überantworten
+überantwortend
+überantwortende
+überantwortendem
+überantwortenden
+überantwortender
+überantwortendes
+überantwortest
+überantwortet
+überantwortete
+überantwortetem
+überantworteten
+überantworteter
+überantwortetes
+überantwortetest
+überantwortetet
+überarbeite
+überarbeiten
+überarbeitend
+überarbeitende
+überarbeitendem
+überarbeitenden
+überarbeitender
+überarbeitendes
+überarbeitest
+überarbeitet
+überarbeitete
+überarbeitetem
+überarbeiteten
+überarbeiteter
+überarbeitetes
+überarbeitetest
+überarbeitetet
+überaus
+überaß
+überaßen
+überaßest
+überaßt
+überbegabt
+überbegabte
+überbegabtem
+überbegabten
+überbegabter
+überbegabtes
+überbeladen
+überbeladene
+überbeladenem
+überbeladenen
+überbeladener
+überbeladenes
+überbelichte
+überbelichten
+überbelichtend
+überbelichtende
+überbelichtendem
+überbelichtenden
+überbelichtender
+überbelichtendes
+überbelichtest
+überbelichtet
+überbelichtete
+überbelichtetem
+überbelichteten
+überbelichteter
+überbelichtetes
+überbelichtetest
+überbelichtetet
+überbesetzt
+überbesetzte
+überbesetztem
+überbesetzten
+überbesetzter
+überbesetztes
+überbevölkert
+überbevölkerte
+überbevölkertem
+überbevölkerten
+überbevölkerter
+überbevölkertes
+überbewerte
+überbewerten
+überbewertend
+überbewertende
+überbewertendem
+überbewertenden
+überbewertender
+überbewertendes
+überbewertest
+überbewertet
+überbewertete
+überbewertetem
+überbewerteten
+überbewerteter
+überbewertetes
+überbewertetest
+überbewertetet
+überbiete
+überbieten
+überbietend
+überbietende
+überbietendem
+überbietenden
+überbietender
+überbietendes
+überbietest
+überbietet
+überblendet
+überblendete
+überblendetem
+überblendeten
+überblendeter
+überblendetes
+überblicke
+überblicken
+überblickend
+überblickende
+überblickendem
+überblickenden
+überblickender
+überblickendes
+überblickst
+überblickt
+überblickte
+überblicktem
+überblickten
+überblickter
+überblicktes
+überblicktest
+überblicktet
+überblättere
+überblättern
+überblätternd
+überblätternde
+überblätterndem
+überblätternden
+überblätternder
+überblätterndes
+überblätterst
+überblättert
+überblätterte
+überblättertem
+überblätterten
+überblätterter
+überblättertes
+überblättertest
+überblättertet
+überblättre
+überbot
+überboten
+überbotene
+überbotenem
+überbotenen
+überbotener
+überbotenes
+überbotest
+überbotet
+überbracht
+überbrachte
+überbrachtem
+überbrachten
+überbrachter
+überbrachtes
+überbrachtest
+überbrachtet
+überbrachtst
+überbreit
+überbreite
+überbreitem
+überbreiten
+überbreiter
+überbreites
+überbringe
+überbringen
+überbringend
+überbringende
+überbringendem
+überbringenden
+überbringender
+überbringendes
+überbringst
+überbringt
+überbrückbar
+überbrückbare
+überbrückbarem
+überbrückbaren
+überbrückbarer
+überbrückbares
+überbrücke
+überbrücken
+überbrückend
+überbrückende
+überbrückendem
+überbrückenden
+überbrückender
+überbrückendes
+überbrückst
+überbrückt
+überbrückte
+überbrücktem
+überbrückten
+überbrückter
+überbrücktes
+überbrücktest
+überbrücktet
+überdacht
+überdachte
+überdachtem
+überdachten
+überdachter
+überdachtes
+überdauere
+überdauern
+überdauernd
+überdauernde
+überdauerndem
+überdauernden
+überdauernder
+überdauerndes
+überdauerst
+überdauert
+überdauerte
+überdauertem
+überdauerten
+überdauerter
+überdauertes
+überdauertest
+überdauertet
+überdaure
+überdecke
+überdecken
+überdeckend
+überdeckende
+überdeckendem
+überdeckenden
+überdeckender
+überdeckendes
+überdeckst
+überdeckt
+überdeckte
+überdecktem
+überdeckten
+überdeckter
+überdecktes
+überdecktest
+überdecktet
+überdenke
+überdenken
+überdenkend
+überdenkende
+überdenkendem
+überdenkenden
+überdenkender
+überdenkendes
+überdenkst
+überdenkt
+überdies
+überdimensional
+überdimensionale
+überdimensionalem
+überdimensionalen
+überdimensionaler
+überdimensionales
+überdimensioniert
+überdimensionierte
+überdimensioniertem
+überdimensionierten
+überdimensionierter
+überdimensioniertes
+überdreht
+überdrehte
+überdrehtem
+überdrehten
+überdrehter
+überdrehtes
+überdruckt
+überdruckte
+überdrucktem
+überdruckten
+überdruckter
+überdrucktes
+überdrüssig
+überdrüssige
+überdrüssigem
+überdrüssigen
+überdrüssiger
+überdrüssigere
+überdrüssigerem
+überdrüssigeren
+überdrüssigerer
+überdrüssigeres
+überdrüssiges
+überdrüssigste
+überdrüssigstem
+überdrüssigsten
+überdrüssigster
+überdrüssigstes
+überdurchschnittlich
+überdurchschnittliche
+überdurchschnittlichem
+überdurchschnittlichen
+überdurchschnittlicher
+überdurchschnittlichere
+überdurchschnittlicherem
+überdurchschnittlicheren
+überdurchschnittlicherer
+überdurchschnittlicheres
+überdurchschnittliches
+überdurchschnittlichste
+überdurchschnittlichstem
+überdurchschnittlichsten
+überdurchschnittlichster
+überdurchschnittlichstes
+übereifrig
+übereifrige
+übereifrigem
+übereifrigen
+übereifriger
+übereifrigere
+übereifrigerem
+übereifrigeren
+übereifrigerer
+übereifrigeres
+übereifriges
+übereifrigste
+übereifrigstem
+übereifrigsten
+übereifrigster
+übereifrigstes
+übereigne
+übereignen
+übereignend
+übereignende
+übereignendem
+übereignenden
+übereignender
+übereignendes
+übereignest
+übereignet
+übereignete
+übereignetem
+übereigneten
+übereigneter
+übereignetes
+übereignetest
+übereignetet
+übereile
+übereilen
+übereilend
+übereilende
+übereilendem
+übereilenden
+übereilender
+übereilendes
+übereilst
+übereilt
+übereilte
+übereiltem
+übereilten
+übereilter
+übereiltes
+übereiltest
+übereiltet
+überein
+übereinander
+übereinandergelagert
+übereinandergelagerte
+übereinandergelagertem
+übereinandergelagerten
+übereinandergelagerter
+übereinandergelagertes
+übereinandergelegt
+übereinandergelegte
+übereinandergelegtem
+übereinandergelegten
+übereinandergelegter
+übereinandergelegtes
+übereingekommen
+übereingekommene
+übereingekommenem
+übereingekommenen
+übereingekommener
+übereingekommenes
+übereingestimmt
+übereingestimmte
+übereingestimmtem
+übereingestimmten
+übereingestimmter
+übereingestimmtes
+übereinkomme
+übereinkommen
+übereinkommend
+übereinkommende
+übereinkommendem
+übereinkommenden
+übereinkommender
+übereinkommendes
+übereinkommst
+übereinkommt
+übereinstimme
+übereinstimmen
+übereinstimmend
+übereinstimmende
+übereinstimmendem
+übereinstimmenden
+übereinstimmender
+übereinstimmendes
+übereinstimmst
+übereinstimmt
+übereinstimmte
+übereinstimmten
+übereinstimmtest
+übereinstimmtet
+übereinzustimmen
+überempfindlich
+überempfindliche
+überempfindlichem
+überempfindlichen
+überempfindlicher
+überempfindlichere
+überempfindlicherem
+überempfindlicheren
+überempfindlicherer
+überempfindlicheres
+überempfindliches
+überempfindlichste
+überempfindlichstem
+überempfindlichsten
+überempfindlichster
+überempfindlichstes
+überesse
+überessen
+überessend
+überessende
+überessendem
+überessenden
+überessender
+überessendes
+überessene
+überessenem
+überessenen
+überessener
+überessenes
+überesst
+überfahre
+überfahren
+überfahrend
+überfahrende
+überfahrendem
+überfahrenden
+überfahrender
+überfahrendes
+überfahrene
+überfahrenem
+überfahrenen
+überfahrener
+überfahrenes
+überfahrt
+überfalle
+überfallen
+überfallend
+überfallende
+überfallendem
+überfallenden
+überfallender
+überfallendes
+überfallene
+überfallenem
+überfallenen
+überfallener
+überfallenes
+überfallt
+überfiel
+überfielen
+überfielst
+überfielt
+überfliege
+überfliegen
+überfliegend
+überfliegende
+überfliegendem
+überfliegenden
+überfliegender
+überfliegendes
+überfliegst
+überfliegt
+überflog
+überflogen
+überflogene
+überflogenem
+überflogenen
+überflogener
+überflogenes
+überflogst
+überflogt
+überflute
+überfluten
+überflutend
+überflutende
+überflutendem
+überflutenden
+überflutender
+überflutendes
+überflutest
+überflutet
+überflutete
+überflutetem
+überfluteten
+überfluteter
+überflutetes
+überflutetest
+überflutetet
+überflügele
+überflügeln
+überflügelnd
+überflügelnde
+überflügelndem
+überflügelnden
+überflügelnder
+überflügelndes
+überflügelst
+überflügelt
+überflügelte
+überflügeltem
+überflügelten
+überflügelter
+überflügeltes
+überflügeltest
+überflügeltet
+überflügle
+überflüssig
+überflüssige
+überflüssigem
+überflüssigen
+überflüssiger
+überflüssigere
+überflüssigerem
+überflüssigeren
+überflüssigerer
+überflüssigeres
+überflüssigerweise
+überflüssiges
+überflüssigste
+überflüssigstem
+überflüssigsten
+überflüssigster
+überflüssigstes
+überfordere
+überfordern
+überfordernd
+überfordernde
+überforderndem
+überfordernden
+überfordernder
+überforderndes
+überforderst
+überfordert
+überforderte
+überfordertem
+überforderten
+überforderter
+überfordertes
+überfordertest
+überfordertet
+überfordre
+überfrage
+überfragen
+überfragend
+überfragende
+überfragendem
+überfragenden
+überfragender
+überfragendes
+überfragst
+überfragt
+überfragte
+überfragten
+überfragtest
+überfragtet
+überfreundlich
+überfreundliche
+überfreundlichem
+überfreundlichen
+überfreundlicher
+überfreundliches
+überfuhr
+überfuhren
+überfuhrst
+überfuhrt
+überfährst
+überfährt
+überfällig
+überfällige
+überfälligem
+überfälligen
+überfälliger
+überfälligere
+überfälligerem
+überfälligeren
+überfälligerer
+überfälligeres
+überfälliges
+überfälligste
+überfälligstem
+überfälligsten
+überfälligster
+überfälligstes
+überfällst
+überfällt
+überführe
+überführen
+überführend
+überführende
+überführendem
+überführenden
+überführender
+überführendes
+überführst
+überführt
+überführte
+überführtem
+überführten
+überführter
+überführtes
+überführtest
+überführtet
+überfülle
+überfüllen
+überfüllend
+überfüllende
+überfüllendem
+überfüllenden
+überfüllender
+überfüllendes
+überfüllst
+überfüllt
+überfüllte
+überfülltem
+überfüllten
+überfüllter
+überfülltes
+überfülltest
+überfülltet
+übergab
+übergaben
+übergabst
+übergabt
+übergangen
+übergangene
+übergangenem
+übergangenen
+übergangener
+übergangenes
+übergangslos
+übergangslose
+übergangslosem
+übergangslosen
+übergangsloser
+übergangsloses
+übergebe
+übergeben
+übergebend
+übergebende
+übergebendem
+übergebenden
+übergebender
+übergebendes
+übergebene
+übergebenem
+übergebenen
+übergebener
+übergebenes
+übergebt
+übergeflossen
+übergeflossene
+übergeflossenem
+übergeflossenen
+übergeflossener
+übergeflossenes
+übergeführt
+übergeführte
+übergeführtem
+übergeführten
+übergeführter
+übergeführtes
+übergegangen
+übergegangene
+übergegangenem
+übergegangenen
+übergegangener
+übergegangenes
+übergegriffen
+übergegriffene
+übergegriffenem
+übergegriffenen
+übergegriffener
+übergegriffenes
+übergehe
+übergehen
+übergehend
+übergehende
+übergehendem
+übergehenden
+übergehender
+übergehendes
+übergehst
+übergeht
+übergekippt
+übergekippte
+übergekipptem
+übergekippten
+übergekippter
+übergekipptes
+übergekocht
+übergekochte
+übergekochtem
+übergekochten
+übergekochter
+übergekochtes
+übergelaufen
+übergelaufene
+übergelaufenem
+übergelaufenen
+übergelaufener
+übergelaufenes
+übergeleitet
+übergeleitete
+übergeleitetem
+übergeleiteten
+übergeleiteter
+übergeleitetes
+übergeordnet
+übergeordnete
+übergeordnetem
+übergeordneten
+übergeordneter
+übergeordnetes
+übergeschnappt
+übergeschnappte
+übergeschnapptem
+übergeschnappten
+übergeschnappter
+übergeschnapptes
+übergesiedelt
+übergesiedelte
+übergesiedeltem
+übergesiedelten
+übergesiedelter
+übergesiedeltes
+übergestreift
+übergestreifte
+übergestreiftem
+übergestreiften
+übergestreifter
+übergestreiftes
+übergeworfen
+übergeworfene
+übergeworfenem
+übergeworfenen
+übergeworfener
+übergeworfenes
+übergibst
+übergibt
+überging
+übergingen
+übergingst
+übergingt
+überglast
+überglaste
+überglastem
+überglasten
+überglaster
+überglastes
+überglücklich
+überglückliche
+überglücklichem
+überglücklichen
+überglücklicher
+überglücklichere
+überglücklicherem
+überglücklicheren
+überglücklicherer
+überglücklicheres
+überglückliches
+überglücklichste
+überglücklichstem
+überglücklichsten
+überglücklichster
+überglücklichstes
+übergoss
+übergossen
+übergossene
+übergossenem
+übergossenen
+übergossener
+übergossenes
+übergossest
+übergosst
+übergreife
+übergreifen
+übergreifend
+übergreifende
+übergreifendem
+übergreifenden
+übergreifender
+übergreifendes
+übergreifst
+übergreift
+übergriff
+übergriffen
+übergriffest
+übergriffst
+übergrifft
+übergroß
+übergroße
+übergroßem
+übergroßen
+übergroßer
+übergroßes
+übergroßzügig
+übergroßzügige
+übergroßzügigem
+übergroßzügigen
+übergroßzügiger
+übergroßzügiges
+überhand
+überhastet
+überhastete
+überhastetem
+überhasteten
+überhasteter
+überhastetes
+überhaupt
+überhebe
+überheben
+überhebend
+überhebende
+überhebendem
+überhebenden
+überhebender
+überhebendes
+überheblich
+überhebliche
+überheblichem
+überheblichen
+überheblicher
+überheblichere
+überheblicherem
+überheblicheren
+überheblicherer
+überheblicheres
+überhebliches
+überheblichste
+überheblichstem
+überheblichsten
+überheblichster
+überheblichstes
+überhebst
+überhebt
+überhin
+überhitze
+überhitzen
+überhitzend
+überhitzende
+überhitzendem
+überhitzenden
+überhitzender
+überhitzendes
+überhitzest
+überhitzt
+überhitzte
+überhitztem
+überhitzten
+überhitzter
+überhitztes
+überhitztest
+überhitztet
+überhob
+überhoben
+überhobene
+überhobenem
+überhobenen
+überhobener
+überhobenes
+überhobst
+überhobt
+überhole
+überholen
+überholend
+überholende
+überholendem
+überholenden
+überholender
+überholendes
+überholst
+überholt
+überholte
+überholtem
+überholten
+überholter
+überholtes
+überholtest
+überholtet
+überholungsbedürftig
+überholungsbedürftige
+überholungsbedürftigem
+überholungsbedürftigen
+überholungsbedürftiger
+überholungsbedürftiges
+überhänge
+überhängen
+überhängend
+überhängende
+überhängendem
+überhängenden
+überhängender
+überhängendes
+überhängst
+überhängt
+überhängtem
+überhängter
+überhängtes
+überhöht
+überhöhte
+überhöhtem
+überhöhten
+überhöhter
+überhöhtere
+überhöhterem
+überhöhteren
+überhöhterer
+überhöhteres
+überhöhtes
+überhöhteste
+überhöhtestem
+überhöhtesten
+überhöhtester
+überhöhtestes
+überhörbar
+überhörbare
+überhörbarem
+überhörbaren
+überhörbarer
+überhörbares
+überhöre
+überhören
+überhörend
+überhörende
+überhörendem
+überhörenden
+überhörender
+überhörendes
+überhörst
+überhört
+überhörte
+überhörtem
+überhörten
+überhörter
+überhörtes
+überhörtest
+überhörtet
+überinterpretiere
+überinterpretieren
+überinterpretierend
+überinterpretierende
+überinterpretierendem
+überinterpretierenden
+überinterpretierender
+überinterpretierendes
+überinterpretierst
+überinterpretiert
+überinterpretierte
+überinterpretiertem
+überinterpretierten
+überinterpretierter
+überinterpretiertes
+überinterpretiertest
+überinterpretiertet
+überirdisch
+überirdische
+überirdischem
+überirdischen
+überirdischer
+überirdischere
+überirdischerem
+überirdischeren
+überirdischerer
+überirdischeres
+überirdisches
+überirdischste
+überirdischstem
+überirdischsten
+überirdischster
+überirdischstes
+überklebe
+überkleben
+überklebend
+überklebende
+überklebendem
+überklebenden
+überklebender
+überklebendes
+überklebst
+überklebt
+überklebte
+überklebtem
+überklebten
+überklebter
+überklebtes
+überklebtest
+überklebtet
+überklug
+überkluge
+überklugem
+überklugen
+überkluger
+überklugere
+überklugerem
+überklugeren
+überklugerer
+überklugeres
+überkluges
+überklugste
+überklugstem
+überklugsten
+überklugster
+überklugstes
+überkoche
+überkochen
+überkochend
+überkochende
+überkochendem
+überkochenden
+überkochender
+überkochendes
+überkochst
+überkocht
+überkochte
+überkochten
+überkochtest
+überkochtet
+überkomme
+überkommen
+überkommend
+überkommende
+überkommendem
+überkommenden
+überkommender
+überkommendes
+überkommene
+überkommenem
+überkommenen
+überkommener
+überkommenes
+überkommst
+überkommt
+überkrustet
+überkrustete
+überkrustetem
+überkrusteten
+überkrusteter
+überkrustetes
+überladen
+überlagere
+überlagern
+überlagernd
+überlagernde
+überlagerndem
+überlagernden
+überlagernder
+überlagerndes
+überlagerst
+überlagert
+überlagerte
+überlagertem
+überlagerten
+überlagerter
+überlagertes
+überlagertest
+überlagertet
+überlagre
+überlang
+überlange
+überlangem
+überlangen
+überlanger
+überlanges
+überlappend
+überlappende
+überlappendem
+überlappenden
+überlappender
+überlappendes
+überlas
+überlasen
+überlasest
+überlasse
+überlassen
+überlassend
+überlassende
+überlassendem
+überlassenden
+überlassender
+überlassendes
+überlassene
+überlassenem
+überlassenen
+überlassener
+überlassenes
+überlasst
+überlast
+überlaste
+überlasten
+überlastend
+überlastende
+überlastendem
+überlastenden
+überlastender
+überlastendes
+überlastest
+überlastet
+überlastete
+überlastetem
+überlasteten
+überlasteter
+überlastetes
+überlastetest
+überlastetet
+überlastfest
+überlastfeste
+überlastfestem
+überlastfesten
+überlastfester
+überlastfestes
+überlastgeschützt
+überlastgeschützte
+überlastgeschütztem
+überlastgeschützten
+überlastgeschützter
+überlastgeschütztes
+überlaufe
+überlaufen
+überlaufend
+überlaufende
+überlaufendem
+überlaufenden
+überlaufender
+überlaufendes
+überlaufene
+überlaufenem
+überlaufenen
+überlaufener
+überlaufenes
+überlauft
+überlaut
+überlaute
+überlautem
+überlauten
+überlauter
+überlautes
+überlebe
+überleben
+überlebend
+überlebende
+überlebendem
+überlebenden
+überlebender
+überlebendes
+überlebensgroß
+überlebensgroße
+überlebensgroßem
+überlebensgroßen
+überlebensgroßer
+überlebensgroßes
+überlebst
+überlebt
+überlebte
+überlebtem
+überlebten
+überlebter
+überlebtes
+überlebtest
+überlebtet
+überlege
+überlegen
+überlegend
+überlegende
+überlegendem
+überlegenden
+überlegender
+überlegendes
+überlegene
+überlegenem
+überlegenen
+überlegener
+überlegenes
+überlegst
+überlegt
+überlegte
+überlegtem
+überlegten
+überlegter
+überlegtes
+überlegtest
+überlegtet
+überlese
+überlesen
+überlesend
+überlesende
+überlesendem
+überlesenden
+überlesender
+überlesendes
+überlesene
+überlesenem
+überlesenen
+überlesener
+überlesenes
+überlest
+überlief
+überliefen
+überliefere
+überliefern
+überliefernd
+überliefernde
+überlieferndem
+überliefernden
+überliefernder
+überlieferndes
+überlieferst
+überliefert
+überlieferte
+überliefertem
+überlieferten
+überlieferter
+überliefertes
+überliefertest
+überliefertet
+überliefest
+überliefre
+überliefst
+überlieft
+überliegend
+überliegende
+überliegendem
+überliegenden
+überliegender
+überliegendes
+überliest
+überließ
+überließen
+überließest
+überließt
+überliste
+überlisten
+überlistend
+überlistende
+überlistendem
+überlistenden
+überlistender
+überlistendes
+überlistest
+überlistet
+überlistete
+überlistetem
+überlisteten
+überlisteter
+überlistetes
+überlistetest
+überlistetet
+überlädst
+überlädt
+überlässt
+überläufst
+überläuft
+übermache
+übermachen
+übermachend
+übermachende
+übermachendem
+übermachenden
+übermachender
+übermachendes
+übermachst
+übermacht
+übermachte
+übermachtem
+übermachten
+übermachter
+übermachtes
+übermachtest
+übermachtet
+übermale
+übermalen
+übermalend
+übermalende
+übermalendem
+übermalenden
+übermalender
+übermalendes
+übermalst
+übermalt
+übermalte
+übermaltem
+übermalten
+übermalter
+übermaltes
+übermaltest
+übermaltet
+übermanne
+übermannen
+übermannend
+übermannende
+übermannendem
+übermannenden
+übermannender
+übermannendes
+übermannst
+übermannt
+übermannte
+übermanntem
+übermannten
+übermannter
+übermanntes
+übermanntest
+übermanntet
+übermenschlich
+übermenschliche
+übermenschlichem
+übermenschlichen
+übermenschlicher
+übermenschliches
+übermittele
+übermitteln
+übermittelnd
+übermittelnde
+übermittelndem
+übermittelnden
+übermittelnder
+übermittelndes
+übermittelst
+übermittelt
+übermittelte
+übermitteltem
+übermittelten
+übermittelter
+übermitteltes
+übermitteltest
+übermitteltet
+übermittle
+übermodern
+übermorgen
+übermächtig
+übermächtige
+übermächtigem
+übermächtigen
+übermächtiger
+übermächtiges
+übermäßig
+übermäßige
+übermäßigem
+übermäßigen
+übermäßiger
+übermäßigere
+übermäßigerem
+übermäßigeren
+übermäßigerer
+übermäßigeres
+übermäßiges
+übermäßigste
+übermäßigstem
+übermäßigsten
+übermäßigster
+übermäßigstes
+übermüdet
+übermüdete
+übermüdetem
+übermüdeten
+übermüdeter
+übermüdetes
+übermütig
+übermütige
+übermütigem
+übermütigen
+übermütiger
+übermütigere
+übermütigerem
+übermütigeren
+übermütigerer
+übermütigeres
+übermütiges
+übermütigste
+übermütigstem
+übermütigsten
+übermütigster
+übermütigstes
+übernachte
+übernachten
+übernachtend
+übernachtende
+übernachtendem
+übernachtenden
+übernachtender
+übernachtendes
+übernachtest
+übernachtet
+übernachtete
+übernachtetem
+übernachteten
+übernachteter
+übernachtetes
+übernachtetest
+übernachtetet
+übernahm
+übernahmen
+übernahmst
+übernahmt
+übernational
+übernationale
+übernationalem
+übernationalen
+übernationaler
+übernationales
+übernatürlich
+übernatürliche
+übernatürlichem
+übernatürlichen
+übernatürlicher
+übernatürliches
+übernehme
+übernehmen
+übernehmend
+übernehmende
+übernehmendem
+übernehmenden
+übernehmender
+übernehmendes
+übernehmt
+übernervös
+übernervöse
+übernervösem
+übernervösen
+übernervöser
+übernervöses
+übernimmst
+übernimmt
+übernommen
+übernommene
+übernommenem
+übernommenen
+übernommener
+übernommenes
+übernächste
+übernächstem
+übernächsten
+übernächster
+übernächstes
+übernächtigt
+übernächtigte
+übernächtigtem
+übernächtigten
+übernächtigter
+übernächtigtes
+überordne
+überordnen
+überordnend
+überordnende
+überordnendem
+überordnenden
+überordnender
+überordnendes
+überordnest
+überordnet
+überordnete
+überordneten
+überordnetest
+überordnetet
+überparteilich
+überparteiliche
+überparteilichem
+überparteilichen
+überparteilicher
+überparteiliches
+überproportional
+überproportionale
+überproportionalem
+überproportionalen
+überproportionaler
+überproportionales
+überprüfbar
+überprüfbare
+überprüfbarem
+überprüfbaren
+überprüfbarer
+überprüfbares
+überprüfe
+überprüfen
+überprüfend
+überprüfende
+überprüfendem
+überprüfenden
+überprüfender
+überprüfendes
+überprüfst
+überprüft
+überprüfte
+überprüftem
+überprüften
+überprüfter
+überprüftes
+überprüftest
+überprüftet
+überquelle
+überquellen
+überquellend
+überquellende
+überquellendem
+überquellenden
+überquellender
+überquellendes
+überquellt
+überquere
+überqueren
+überquerend
+überquerende
+überquerendem
+überquerenden
+überquerender
+überquerendes
+überquerst
+überquert
+überquerte
+überquertem
+überquerten
+überquerter
+überquertes
+überquertest
+überquertet
+überquillst
+überquillt
+überquoll
+überquollen
+überquollst
+überquollt
+überrage
+überragen
+überragend
+überragende
+überragendem
+überragenden
+überragender
+überragendes
+überragst
+überragt
+überragte
+überragtem
+überragten
+überragter
+überragtes
+überragtest
+überragtet
+überrannt
+überrannte
+überranntem
+überrannten
+überrannter
+überranntes
+überranntest
+überranntet
+überranntst
+überrasche
+überraschen
+überraschend
+überraschende
+überraschendem
+überraschenden
+überraschender
+überraschenderweise
+überraschendes
+überraschest
+überraschst
+überrascht
+überraschte
+überraschtem
+überraschten
+überraschter
+überraschtes
+überraschtest
+überraschtet
+überrede
+überreden
+überredend
+überredende
+überredendem
+überredenden
+überredender
+überredendes
+überredest
+überredet
+überredete
+überredetem
+überredeten
+überredeter
+überredetes
+überredetest
+überredetet
+überregional
+überregionale
+überregionalem
+überregionalen
+überregionaler
+überregionales
+überreich
+überreiche
+überreichem
+überreichen
+überreichend
+überreichende
+überreichendem
+überreichenden
+überreichender
+überreichendes
+überreicher
+überreiches
+überreichlich
+überreichliche
+überreichlichem
+überreichlichen
+überreichlicher
+überreichliches
+überreichst
+überreicht
+überreichte
+überreichtem
+überreichten
+überreichter
+überreichtes
+überreichtest
+überreichtet
+überreif
+überreife
+überreifem
+überreifen
+überreifer
+überreifes
+überrumpele
+überrumpeln
+überrumpelnd
+überrumpelnde
+überrumpelndem
+überrumpelnden
+überrumpelnder
+überrumpelndes
+überrumpelst
+überrumpelt
+überrumpelte
+überrumpeltem
+überrumpelten
+überrumpelter
+überrumpeltes
+überrumpeltest
+überrumpeltet
+überrumple
+übersah
+übersahen
+übersahst
+übersaht
+übersandt
+übersandte
+übersandtem
+übersandten
+übersandter
+übersandtes
+übersandtest
+übersandtet
+übersandtst
+übersatt
+übersatte
+übersattem
+übersatten
+übersatter
+übersattes
+überschaubar
+überschaubare
+überschaubarem
+überschaubaren
+überschaubarer
+überschaubares
+überschaue
+überschauen
+überschauend
+überschauende
+überschauendem
+überschauenden
+überschauender
+überschauendes
+überschaust
+überschaut
+überschaute
+überschautem
+überschauten
+überschauter
+überschautes
+überschautest
+überschautet
+überschieße
+überschießen
+überschießend
+überschießende
+überschießendem
+überschießenden
+überschießender
+überschießendes
+überschießest
+überschießt
+überschlafe
+überschlafen
+überschlafend
+überschlafende
+überschlafendem
+überschlafenden
+überschlafender
+überschlafendes
+überschlafene
+überschlafenem
+überschlafenen
+überschlafener
+überschlafenes
+überschlaft
+überschlage
+überschlagen
+überschlagend
+überschlagende
+überschlagendem
+überschlagenden
+überschlagender
+überschlagendes
+überschlagene
+überschlagenem
+überschlagenen
+überschlagener
+überschlagenes
+überschlagt
+überschlief
+überschliefen
+überschliefest
+überschliefst
+überschlieft
+überschlug
+überschlugen
+überschlugst
+überschlugt
+überschläfst
+überschläft
+überschlägig
+überschlägige
+überschlägigem
+überschlägigen
+überschlägiger
+überschlägiges
+überschlägst
+überschlägt
+überschmiere
+überschmieren
+überschmierend
+überschmierende
+überschmierendem
+überschmierenden
+überschmierender
+überschmierendes
+überschmierst
+überschmiert
+überschmierte
+überschmiertem
+überschmierten
+überschmierter
+überschmiertes
+überschmiertest
+überschmiertet
+überschneide
+überschneiden
+überschneidend
+überschneidende
+überschneidendem
+überschneidenden
+überschneidender
+überschneidendes
+überschneidest
+überschneidet
+überschneidungsfrei
+überschneidungsfreie
+überschneidungsfreiem
+überschneidungsfreien
+überschneidungsfreier
+überschneidungsfreies
+überschnitt
+überschnitten
+überschnittene
+überschnittenem
+überschnittenen
+überschnittener
+überschnittenes
+überschnittest
+überschnittet
+überschreite
+überschreiten
+überschreitend
+überschreitende
+überschreitendem
+überschreitenden
+überschreitender
+überschreitendes
+überschreitest
+überschreitet
+überschrieb
+überschrieben
+überschriebene
+überschriebenem
+überschriebenen
+überschriebener
+überschriebenes
+überschriebst
+überschriebt
+überschritt
+überschritten
+überschrittene
+überschrittenem
+überschrittenen
+überschrittener
+überschrittenes
+überschrittest
+überschrittet
+überschuldet
+überschuldete
+überschuldetem
+überschuldeten
+überschuldeter
+überschuldetes
+überschwemme
+überschwemmen
+überschwemmend
+überschwemmende
+überschwemmendem
+überschwemmenden
+überschwemmender
+überschwemmendes
+überschwemmst
+überschwemmt
+überschwemmte
+überschwemmtem
+überschwemmten
+überschwemmter
+überschwemmtes
+überschwemmtest
+überschwemmtet
+überschwänglich
+überschwängliche
+überschwänglichem
+überschwänglichen
+überschwänglicher
+überschwänglichere
+überschwänglicherem
+überschwänglicheren
+überschwänglicherer
+überschwänglicheres
+überschwängliches
+überschwänglichste
+überschwänglichstem
+überschwänglichsten
+überschwänglichster
+überschwänglichstes
+überschätze
+überschätzen
+überschätzend
+überschätzende
+überschätzendem
+überschätzenden
+überschätzender
+überschätzendes
+überschätzest
+überschätzt
+überschätzte
+überschätztem
+überschätzten
+überschätzter
+überschätztes
+überschätztest
+überschätztet
+überschäumt
+überschäumte
+überschäumtem
+überschäumten
+überschäumter
+überschäumtes
+überschüssig
+überschüssige
+überschüssigem
+überschüssigen
+überschüssiger
+überschüssiges
+überseeisch
+überseeische
+überseeischem
+überseeischen
+überseeischer
+überseeisches
+übersehbar
+übersehbare
+übersehbarem
+übersehbaren
+übersehbarer
+übersehbares
+übersehe
+übersehen
+übersehend
+übersehende
+übersehendem
+übersehenden
+übersehender
+übersehendes
+übersehene
+übersehenem
+übersehenen
+übersehener
+übersehenes
+überseht
+übersende
+übersenden
+übersendend
+übersendende
+übersendendem
+übersendenden
+übersendender
+übersendendes
+übersendest
+übersendet
+übersendete
+übersendeten
+übersendetest
+übersendetet
+übersetzbar
+übersetzbare
+übersetzbarem
+übersetzbaren
+übersetzbarer
+übersetzbares
+übersetze
+übersetzen
+übersetzend
+übersetzende
+übersetzendem
+übersetzenden
+übersetzender
+übersetzendes
+übersetzest
+übersetzt
+übersetzte
+übersetztem
+übersetzten
+übersetzter
+übersetztes
+übersetztest
+übersetztet
+übersichtlich
+übersichtliche
+übersichtlichem
+übersichtlichen
+übersichtlicher
+übersichtlichere
+übersichtlicherem
+übersichtlicheren
+übersichtlicherer
+übersichtlicheres
+übersichtliches
+übersichtlichste
+übersichtlichstem
+übersichtlichsten
+übersichtlichster
+übersichtlichstes
+übersiedele
+übersiedeln
+übersiedelnd
+übersiedelnde
+übersiedelndem
+übersiedelnden
+übersiedelnder
+übersiedelndes
+übersiedelst
+übersiedelt
+übersiedelte
+übersiedeltem
+übersiedelten
+übersiedelter
+übersiedeltes
+übersiedeltest
+übersiedeltet
+übersiedle
+übersiehst
+übersieht
+übersinnlich
+übersinnliche
+übersinnlichem
+übersinnlichen
+übersinnlicher
+übersinnliches
+überspannungsfest
+überspannungsfeste
+überspannungsfestem
+überspannungsfesten
+überspannungsfester
+überspannungsfestes
+überspannungsgeschützt
+überspannungsgeschützte
+überspannungsgeschütztem
+überspannungsgeschützten
+überspannungsgeschützter
+überspannungsgeschütztes
+überspannungssicher
+überspannungssichere
+überspannungssicherem
+überspannungssicheren
+überspannungssicherer
+überspannungssicheres
+überspiele
+überspielen
+überspielend
+überspielende
+überspielendem
+überspielenden
+überspielender
+überspielendes
+überspielst
+überspielt
+überspielte
+überspieltem
+überspielten
+überspielter
+überspieltes
+überspieltest
+überspieltet
+überspitze
+überspitzen
+überspitzend
+überspitzende
+überspitzendem
+überspitzenden
+überspitzender
+überspitzendes
+überspitzest
+überspitzt
+überspitzte
+überspitztem
+überspitzten
+überspitzter
+überspitztes
+überspitztest
+überspitztet
+übersprang
+übersprangen
+übersprangst
+übersprangt
+überspringe
+überspringen
+überspringend
+überspringende
+überspringendem
+überspringenden
+überspringender
+überspringendes
+überspringst
+überspringt
+übersprudele
+übersprudeln
+übersprudelnd
+übersprudelnde
+übersprudelndem
+übersprudelnden
+übersprudelnder
+übersprudelndes
+übersprudelst
+übersprudelt
+übersprudelte
+übersprudelten
+übersprudeltest
+übersprudeltet
+übersprudle
+übersprungen
+übersprungene
+übersprungenem
+übersprungenen
+übersprungener
+übersprungenes
+überstaatlich
+überstaatliche
+überstaatlichem
+überstaatlichen
+überstaatlicher
+überstaatliches
+überstand
+überstanden
+überstandene
+überstandenem
+überstandenen
+überstandener
+überstandenes
+überstandest
+überstandet
+überstehe
+überstehen
+überstehend
+überstehende
+überstehendem
+überstehenden
+überstehender
+überstehendes
+überstehst
+übersteht
+übersteige
+übersteigen
+übersteigend
+übersteigende
+übersteigendem
+übersteigenden
+übersteigender
+übersteigendes
+übersteigere
+übersteigern
+übersteigernd
+übersteigernde
+übersteigerndem
+übersteigernden
+übersteigernder
+übersteigerndes
+übersteigerst
+übersteigert
+übersteigerte
+übersteigertem
+übersteigerten
+übersteigerter
+übersteigertes
+übersteigertest
+übersteigertet
+übersteigre
+übersteigst
+übersteigt
+überstieg
+überstiegen
+überstiegene
+überstiegenem
+überstiegenen
+überstiegener
+überstiegenes
+überstiegst
+überstiegt
+überstimme
+überstimmen
+überstimmend
+überstimmende
+überstimmendem
+überstimmenden
+überstimmender
+überstimmendes
+überstimmst
+überstimmt
+überstimmte
+überstimmtem
+überstimmten
+überstimmter
+überstimmtes
+überstimmtest
+überstimmtet
+überstrich
+überstrichen
+überstrichene
+überstrichenem
+überstrichenen
+überstrichener
+überstrichenes
+überstrichst
+überstricht
+überstürze
+überstürzen
+überstürzend
+überstürzende
+überstürzendem
+überstürzenden
+überstürzender
+überstürzendes
+überstürzest
+überstürzt
+überstürzte
+überstürztem
+überstürzten
+überstürzter
+überstürztes
+überstürztest
+überstürztet
+übersät
+übersäte
+übersätem
+übersäten
+übersäter
+übersätes
+übertage
+übertarifqqlich
+übertarifqqliche
+übertarifqqlichem
+übertarifqqlichen
+übertarifqqlicher
+übertarifqqliches
+überteuert
+überteuerte
+überteuertem
+überteuerten
+überteuerter
+überteuertes
+übertraf
+übertrafen
+übertrafest
+übertrafst
+übertraft
+übertragbar
+übertragbare
+übertragbarem
+übertragbaren
+übertragbarer
+übertragbares
+übertrage
+übertragen
+übertragend
+übertragende
+übertragendem
+übertragenden
+übertragender
+übertragendes
+übertragene
+übertragenem
+übertragenen
+übertragener
+übertragenes
+übertragt
+übertrat
+übertraten
+übertratest
+übertratet
+übertratst
+übertreffe
+übertreffen
+übertreffend
+übertreffende
+übertreffendem
+übertreffenden
+übertreffender
+übertreffendes
+übertrefft
+übertreibe
+übertreiben
+übertreibend
+übertreibende
+übertreibendem
+übertreibenden
+übertreibender
+übertreibendes
+übertreibst
+übertreibt
+übertrete
+übertreten
+übertretend
+übertretende
+übertretendem
+übertretenden
+übertretender
+übertretendes
+übertretene
+übertretenem
+übertretenen
+übertretener
+übertretenes
+übertretet
+übertrieb
+übertrieben
+übertriebene
+übertriebenem
+übertriebenen
+übertriebener
+übertriebenes
+übertriebst
+übertriebt
+übertriffst
+übertrifft
+übertritt
+übertrittst
+übertroffen
+übertroffene
+übertroffenem
+übertroffenen
+übertroffener
+übertroffenes
+übertrug
+übertrugen
+übertrugst
+übertrugt
+überträgst
+überträgt
+übertölpele
+übertölpeln
+übertölpelnd
+übertölpelnde
+übertölpelndem
+übertölpelnden
+übertölpelnder
+übertölpelndes
+übertölpelst
+übertölpelt
+übertölpelte
+übertölpeltem
+übertölpelten
+übertölpelter
+übertölpeltes
+übertölpeltest
+übertölpeltet
+übertölple
+übertöne
+übertönen
+übertönend
+übertönende
+übertönendem
+übertönenden
+übertönender
+übertönendes
+übertönst
+übertönt
+übertönte
+übertöntem
+übertönten
+übertönter
+übertöntes
+übertöntest
+übertöntet
+übervoll
+übervolle
+übervollem
+übervollen
+übervoller
+übervolles
+übervorteile
+übervorteilen
+übervorteilend
+übervorteilende
+übervorteilendem
+übervorteilenden
+übervorteilender
+übervorteilendes
+übervorteilst
+übervorteilt
+übervorteilte
+übervorteiltem
+übervorteilten
+übervorteilter
+übervorteiltes
+übervorteiltest
+übervorteiltet
+übervölkere
+übervölkern
+übervölkernd
+übervölkernde
+übervölkerndem
+übervölkernden
+übervölkernder
+übervölkerndes
+übervölkerst
+übervölkert
+übervölkerte
+übervölkertem
+übervölkerten
+übervölkerter
+übervölkertes
+übervölkertest
+übervölkertet
+übervölkre
+überwache
+überwachen
+überwachend
+überwachende
+überwachendem
+überwachenden
+überwachender
+überwachendes
+überwachst
+überwacht
+überwachte
+überwachtem
+überwachten
+überwachter
+überwachtes
+überwachtest
+überwachtet
+überwand
+überwanden
+überwandest
+überwandet
+überwandst
+überwechsele
+überwechseln
+überwechselst
+überwechselt
+überwechselte
+überwechselten
+überwechseltest
+überwechseltet
+überwechsle
+überweise
+überweisen
+überweisend
+überweisende
+überweisendem
+überweisenden
+überweisender
+überweisendes
+überweisest
+überweist
+überwiege
+überwiegen
+überwiegend
+überwiegende
+überwiegendem
+überwiegenden
+überwiegender
+überwiegendes
+überwiegst
+überwiegt
+überwies
+überwiesen
+überwiesene
+überwiesenem
+überwiesenen
+überwiesener
+überwiesenes
+überwiesest
+überwiest
+überwindbar
+überwindbare
+überwindbarem
+überwindbaren
+überwindbarer
+überwindbares
+überwinde
+überwinden
+überwindend
+überwindende
+überwindendem
+überwindenden
+überwindender
+überwindendes
+überwindest
+überwindet
+überwintere
+überwintern
+überwinternd
+überwinternde
+überwinterndem
+überwinternden
+überwinternder
+überwinterndes
+überwinterst
+überwintert
+überwinterte
+überwintertem
+überwinterten
+überwinterter
+überwintertes
+überwintertest
+überwintertet
+überwintre
+überwog
+überwogen
+überwogst
+überwogt
+überwuchere
+überwuchern
+überwuchernd
+überwuchernde
+überwucherndem
+überwuchernden
+überwuchernder
+überwucherndes
+überwucherst
+überwuchert
+überwucherte
+überwuchertem
+überwucherten
+überwucherter
+überwuchertes
+überwuchertest
+überwuchertet
+überwuchre
+überwunden
+überwundene
+überwundenem
+überwundenen
+überwundener
+überwundenes
+überwältige
+überwältigen
+überwältigend
+überwältigende
+überwältigendem
+überwältigenden
+überwältigender
+überwältigendes
+überwältigst
+überwältigt
+überwältigte
+überwältigtem
+überwältigten
+überwältigter
+überwältigtes
+überwältigtest
+überwältigtet
+überzeichne
+überzeichnen
+überzeichnend
+überzeichnende
+überzeichnendem
+überzeichnenden
+überzeichnender
+überzeichnendes
+überzeichnest
+überzeichnet
+überzeichnete
+überzeichnetem
+überzeichneten
+überzeichneter
+überzeichnetes
+überzeichnetest
+überzeichnetet
+überzeuge
+überzeugen
+überzeugend
+überzeugende
+überzeugendem
+überzeugenden
+überzeugender
+überzeugendes
+überzeugst
+überzeugt
+überzeugte
+überzeugtem
+überzeugten
+überzeugter
+überzeugtes
+überzeugtest
+überzeugtet
+überziehe
+überziehen
+überziehend
+überziehende
+überziehendem
+überziehenden
+überziehender
+überziehendes
+überziehst
+überzieht
+überzog
+überzogen
+überzogene
+überzogenem
+überzogenen
+überzogener
+überzogenes
+überzogst
+überzogt
+überzugehen
+überzugreifen
+überzuwechseln
+überzähle
+überzählen
+überzählend
+überzählende
+überzählendem
+überzählenden
+überzählender
+überzählendes
+überzählig
+überzählige
+überzähligem
+überzähligen
+überzähliger
+überzähliges
+überzählst
+überzählt
+überzählte
+überzähltem
+überzählten
+überzählter
+überzähltes
+überzähltest
+überzähltet
+überängstlich
+überängstliche
+überängstlichem
+überängstlichen
+überängstlicher
+überängstliches
+überörtlich
+überörtliche
+überörtlichem
+überörtlichen
+überörtlicher
+überörtliches
+üble
+üblem
+üblen
+übler
+üblere
+üblerem
+übleren
+üblerer
+übleres
+übles
+üblich
+übliche
+üblichem
+üblichen
+üblicher
+üblichere
+üblicherem
+üblicheren
+üblicherer
+üblicheres
+üblicherweise
+übliches
+üblichste
+üblichstem
+üblichsten
+üblichster
+üblichstes
+übrig
+übrige
+übrigem
+übrigen
+übrigens
+übriger
+übriges
+übst
+übt
+übte
+übten
+übtest
+übtet
+üppig
+üppige
+üppigem
+üppigen
+üppiger
+üppigere
+üppigerem
+üppigeren
+üppigerer
+üppigeres
+üppiges
+üppigste
+üppigstem
+üppigsten
+üppigster
+üppigstes
diff --git a/etc/dict/words.hu b/etc/dict/words.hu
new file mode 100644
index 0000000..04dfb00
--- a/dev/null
+++ b/etc/dict/words.hu
@@ -0,0 +1,68370 @@
+A-dúr
+A-moll
+Addison-kór
+Afganisztán
+Afrika
+Albánia
+Algéria
+Algír
+András-kereszt
+Anglia
+Angliában
+Angliából
+Anna
+Ariadne
+Atalanta-lepke
+Atlanti-óceánon
+Atlanti-óceánt
+Ausztria
+Ausztrália
+Ausztráliába
+Ausztráliában
+Balaton
+Baltimore
+Beethoven
+Belgium
+Bengália
+Biblia
+Biblia-felolvasó
+Bibliában
+Bibliára
+Birmingham
+Birodalom
+Boldogasszony
+Borneó
+Brazília
+Brown
+Budapest
+Bulgária
+Bunsen-égõ
+Burgundia
+Burgundiából
+Bécs
+Bözsi
+C-hang
+Caesar
+Chile
+Cincinnati
+Connecticut
+Csehszlovák
+Csehszlovákia
+Csáki
+Davy-lámpa
+Descartes-féle
+Doveron
+Duna
+Dunába
+Dyke
+Dávid-csillag
+Dél-Afrikai
+Déli-sarkkör
+ENSZ
+Edison-effektus
+Edward-korabeli
+Edwardok-korabeli
+Egyenlítõ
+Elsõ
+Erichsen-benyomódás
+Esterházy-kockaminta
+Eurázsia
+Európa-bajnok
+Európában
+Felsõ-Skócia
+Fülöp-szigetek
+Georgia
+Gergely-naptár
+Getszemáné-kert
+Gram-pozitív
+Gramot
+György
+György-tallér
+Gyümölcsoltó
+Göncölszekér
+Habsburg-dinasztia
+Habsburgok
+Hamletet
+Harlekin
+Hawaii
+Hawaii-szigetek
+Helsingör
+Hispánia
+Hispániai
+Homéroszt
+Honduras
+Horn-fok
+I-vas
+IX.
+Igazságügyi
+Indonézia
+Iván
+Izrael
+Izraelbõl
+Jakab
+Japán
+Jeruzsálem
+John
+Jugoszlávia
+Julián-naptár
+Jupiter
+János
+Jób
+Jónás
+Jóska
+KRESZ
+Kalifornia
+Kambodzsa
+Kanada
+Kanadában
+Kansas
+Karib-szigetek
+Karib-tenger
+Kaukázus
+Kelet-Ázsia
+Kenya
+Keresztelõ
+King's
+Kisázsia
+Korea
+Korzikán
+Korán
+Krisztus
+Káin
+Kína
+Kínával
+Köln
+Köztársaság
+Közép-Európa
+LSD
+Laosz
+Latin
+Lettország
+Litvánia
+London
+London-Edinburghi
+London-Exeteri
+Londonba
+Londonba?
+Londonban
+Londonból
+Louis
+Magas
+Magyarország
+Malaja
+Malaysia
+Maláj
+Maláj-félsziget
+Malájföld
+Manche
+Manche-csatorna
+Manila
+Marci
+Marokkó
+Massachusetts
+Merkúr
+Merkúrral
+Mexikó
+Mississippi
+Missouri
+Monarchia
+Mária
+Máté-passió
+Mózes
+Nagy-Britannia,
+Nagy-Britanniában
+Nagy-Britanniát
+Neander-völgy
+Nepál
+Nobel-díj
+Norvégia
+Németalföld
+Nílus
+Ohio
+Osztrák-Magyar
+Oxfordban
+Pakisztán
+Palota
+Pató
+Perzsia
+Petõfi
+Pilátushoz
+Pittsburgh
+Platón
+Plátó
+Plátónt
+Plátót
+Polinézia
+Poncius
+Ponciustól
+Porta
+Portugália
+Poulsen-ív
+Pythagoras
+Pythagoras-tétel
+Pál
+Párizsban
+Péter
+Quartier
+Queen's
+R-ben
+Rajna
+Rajna-vidék
+Richard
+Rodézia
+Róma
+S-kanyar
+Scott
+Shakespeare
+Sion
+Smith
+Smithék
+Spanyolország
+St.
+Stuart-ellenes
+Svédország
+Szent
+Sziám
+Szíria
+Szûz
+Sárkányölõ
+T-alakú
+T-armatura
+T-betû
+T-idom
+T-illesztés
+Taylor
+Temze
+Tennessee
+Terpszihoré
+Tirol
+Tower-ban
+Trója
+Távol-Kelet
+U-alakú
+U-görbület
+U-hajlás
+U-hajlítás
+Ukrajna
+Unió
+Utah
+V-alakban
+Vermont
+Viktória-kereszt
+Visnu
+Vénusz
+Water-fonógép
+Wellington
+Westminsteri
+Wilson
+X-et
+X-nél
+Zuluföld
+abakusz
+abaposztó
+abba
+abba!
+abbahagy
+abbahagyja
+abbahagyás
+abbamarad
+abban
+abban,
+abból
+abból,
+abcúg!
+abcúgol
+aberráció
+aberrált
+abiogenetikus
+abiogenézis
+ablak
+ablakbélés
+ablakból
+ablakdúc
+ablakfelsõrész
+ablakfélfa
+ablakfülke
+ablakgitt
+ablakhoz
+ablakkeret
+ablakköz
+ablakmosó
+ablaknyílás
+ablakokkal
+ablakon
+ablakos
+ablakot
+ablakpárkány
+ablakragasz
+ablakredõny
+ablakrács
+ablaksor
+ablakszárny
+ablaktalan
+ablaktekerõ
+ablaktisztító
+ablaktok
+ablaktoküreg
+ablaktábla
+ablaktörlõ
+ablakú
+ablaküveg
+ablatívusz
+abnormális
+abortusz
+abradál
+abrak
+abrakoltat
+abroncs
+abroncsoz
+abroncsozás
+abroncsszoknya
+abrosz
+abszolutizmus
+abszolút
+abszolúte
+abszorbens
+abszorbeál
+abszorbeálás
+abszorbeáló
+abszorpció
+abszorpciós
+absztinencia
+absztrahál
+absztrakció
+abszurd
+abszurditás
+abszurdum
+acetil
+acetilgyök
+acetilszalicilsav
+acetilszám
+acetilén
+achát
+acre
+acta
+actionis
+acél
+acél-
+acél-élvetõ
+acélból
+acéldrót
+acélhuzal
+acélizmú
+acélkalapács
+acéllal
+acéllemez
+acélos
+acéloz
+acélozott
+acélsisak
+acélszalag
+acélt
+acélvázas
+acélöntvény
+ad-vesz
+adag
+adagol
+adagoló
+adagológarat
+adagológép
+adagolótölcsér
+adagonként
+adakozik
+adakozás
+adakozó
+adalék
+adalékanyag
+adalékolás
+adalékos
+adandó
+adapter
+adat
+adatai
+adatbáziskezelõ
+adatelemzés
+adatfeldolgozás
+adatgyûjtés
+adatközlõ
+adatok
+adatokat
+adatokkal
+adatállomány
+add
+addig
+addig,
+addigra
+additivitás
+additív
+addsza-nesze
+adekvát
+adenoid
+adeptus
+adható
+adhéziós
+adiabatikus
+adipinsav
+adj
+adja
+adja,
+adjon
+adjunktus
+adjusztál
+adjusztálás
+adják
+adminisztratív
+adminisztráció
+adminisztrációs
+adminisztrálni
+adminisztrátor
+admiralitás
+admirális
+admittancia
+adnak
+adnak?
+adni
+adná
+adnám,
+adogat?
+adogatott
+adogatás
+adogatáshoz
+adogatási
+adogató
+adogatónál
+adogatóudvar
+adogatóvonal
+adok
+adok-kapok
+adom
+adoma
+adomány
+adománylevél
+adományokat
+adományokból
+adományoz
+adományozott
+adományozás
+adományozása
+adományozási
+adományozó
+adoptál
+adoptálás
+adott
+adottság
+adottságok
+adrenalin
+adszorbeál
+adszorpció
+adszorpciós
+adta
+adtad
+adtak
+adtam
+adták
+adu
+aduja
+adunk
+aduval
+adva
+adás
+adása
+adásban
+adások
+adásokat
+adásszünet
+adást
+adásvétel
+adását
+adó
+adóantenna
+adóbevételek
+adócsökkentés
+adódik
+adódnék
+adódott
+adódó
+adófelügyelõ
+adófizetõ
+adóhivatal
+adók
+adókivetés
+adókkal
+adókészülék
+adókötelezettségeit
+adóleszállítás
+adómentes
+adómérséklés
+adós
+adóslevél
+adósok
+adósság
+adósság-átütemezés
+adóssága
+adósságban
+adósságcsinálás
+adósságmentes
+adósságot
+adósságát
+adóstól
+adószedés
+adót
+adóteher
+adótorony
+adóval
+adózik
+adózás
+adózástól
+adóállományban
+adóállomás
+aeroszol
+afelõl,
+affektál
+affektált
+affektáltan
+affektáltság
+affektálva
+affektálás
+affektáló
+affektív
+affinitás
+afféle
+afgán
+aforizma
+afrikai
+agancs
+agancs-só
+agancshegy
+agancsváltó
+agancságú
+agancsát
+agancsú
+agarakkal!
+agavébor
+agg
+aggaszt
+aggasztja
+aggasztó
+aggasztóan
+aggkor
+aggkori
+agglegény
+agglegénybõl
+agglegények
+agglegényéletet
+agglomeráció
+agglomerál
+agglomerált
+agglomerálás
+agglomerálódik
+agglomerálódás
+agglomerátum
+aggodalmait
+aggodalmamra
+aggodalmas
+aggodalmaskodjék
+aggodalmaskodásra
+aggodalmaskodó
+aggodalmat
+aggodalom
+aggregátum
+aggszûz
+aggyal
+aggály
+aggályai
+aggályait
+aggályosan
+aggályoskodik
+aggályoskodás
+aggályoskodó
+aggályosság
+aggódik
+aggódj
+aggódj!
+aggódjál!
+aggódni
+aggódva
+aggódás
+aggódó
+aggódót
+aggófû
+agilis
+agilitás
+agitáció
+agitál
+agitátor
+agresszió
+agresszor
+agresszív
+agresszívan
+agresszíven
+agronómus
+agrotechnika
+agrár
+agrár-
+agrárreform
+aguti
+agy
+agy-
+agya
+agyafúrt
+agyafúrtan
+agyafúrtság
+agyag
+agyag-
+agyagedény
+agyaggal
+agyaggalamb
+agyaggalambdobó
+agyaggörgeteg
+agyagkeverék
+agyagkorsó
+agyagmárga
+agyagos
+agyagpala
+agyagpaszta
+agyagpép
+agyagtálka
+agyagáru
+agyal
+agyalapi
+agyar
+agyarú
+agyat
+agyba-fõbe
+agyhártyagyulladás
+agyi
+agymosás
+agymozgású
+agyoncsap
+agyoncsigáz
+agyoncsépel
+agyoncsépelt
+agyondicsér
+agyondicsérés
+agyondolgozott
+agyondolgoztat
+agyondolgozza
+agyondíszít
+agyonfogdosott
+agyonfáradt
+agyonfáraszt
+agyongyötör
+agyonhajszol
+agyonhajszolja
+agyonhajszolt
+agyonhajszoltság
+agyonhallgat
+agyonhallgatás
+agyonhalmoz
+agyonhasznál
+agyonhasznált
+agyonhasználás
+agyonkínoz
+agyonlõ
+agyonrak
+agyonreklámoz
+agyonstrapált
+agyonszúr
+agyontapos
+agyontámogat
+agyonver
+agyonvert
+agyonvertnek
+agyonzabálja
+agyonéheztet
+agyonüt
+agyonüti
+agyonütni
+agyonütöttnek
+agyrázkódás
+agyrázkódási
+agyrázkódást
+agyrém
+agysejt
+agyszülemény
+agysérv
+agytekervény
+agytekervény-rendszer
+agytröszt
+agyvelejét
+agyvelõ
+agyvelõgyulladás
+agyvize
+agyvérzés
+agyába
+agyában
+agyára
+agyát
+agyérelmeszesedés
+agyú
+agár
+agárhas
+agárverseny
+agárversenyzés
+agónia
+aha
+aha!
+ahhoz
+ahhoz,
+ahogy
+ahogyan
+ahogyan...
+ahol
+ahonnan
+ahova
+aisz
+ajak
+ajakbiggyesztés
+ajakfény
+ajakról
+ajakrúzs
+ajakír
+ajk
+ajkai
+ajkait
+ajkak
+ajkat
+ajkbiggyesztés
+ajkbiggyesztõ
+ajkára
+ajkát
+ajkú
+ajtó
+ajtóból
+ajtódúc
+ajtófélfa
+ajtófülke
+ajtóhoz
+ajtóig
+ajtók
+ajtókeret
+ajtón
+ajtónyílás
+ajtónál
+ajtónálló
+ajtóra
+ajtóretesz
+ajtórács
+ajtóról
+ajtósarok
+ajtószeg
+ajtószárny
+ajtót
+ajtótábla
+ajtóval
+ajtóveretszeg
+ajtózáró
+ajzószer
+ajándék
+ajándékba
+ajándékként
+ajándékküldemények
+ajándékoz
+ajándékozás
+ajándékozásra
+ajándékszelvény
+ajándéktárgy
+ajándéktárgyak
+ajándékutalvány
+ajánl
+ajánlanod
+ajánlat
+ajánlatos
+ajánlatosság
+ajánlatot
+ajánlattevõ
+ajánlható
+ajánlja
+ajánlkozik
+ajánlott
+ajánlottként
+ajánlva
+ajánlás
+ajánlási
+ajánlással
+ajánló
+ajánlólevél
+ajóka
+akad
+akadozik
+akadozva
+akadozó
+akadva
+akadály
+akadálya
+akadályai
+akadályba
+akadálymentes
+akadályok
+akadályokat
+akadályon
+akadályoz
+akadályozatlan
+akadályozott
+akadályoztatás
+akadályozza
+akadályozzák
+akadályozás
+akadályozó
+akadályt
+akadálytalan
+akadálytalanul
+akadályverseny
+akadályversenyen
+akadék
+akadékoskodik
+akadékoskodj!
+akadékoskodás
+akadékoskodó
+akadémia
+akadémiai
+akadémikus
+akadémikusan
+akar
+akar?
+akarat
+akaratból
+akaraterõ
+akaratgyengeség
+akarathoz
+akarati
+akaratlagos
+akaratlagosan
+akaratlan
+akaratlanul
+akaratod!
+akaratos
+akaratosan
+akaratosság
+akarattal
+akaratának
+akaratát
+akaratú
+akard
+akarja
+akarlak
+akarna
+akarnok
+akarná
+akarod
+akarod!
+akarok
+akarsz
+akarsz?
+akart
+akarta
+akartam
+akartam,
+akarva
+akarás
+akaró
+akaródzik
+akaródzva
+akaszt
+akasztja
+akasztott
+akasztás
+akasztó
+akasztófa
+akasztófahumor
+akasztófakötél
+akasztófavirág
+akasztófán
+akasztófára
+akasztófáravaló
+akasztógyûrû
+akasztóhorog
+akasztókapocs
+akasztós
+akcentus
+akció
+akcióba
+akcióra
+akciórádiusz
+akciót
+aki
+akiben
+akik
+akiket
+akiknek
+akikrõl
+akinek
+akire
+akirõl
+akit
+akivel
+akklimatizál
+akklimatizálás
+akklimatizálódik
+akklimatizálódás
+akkor
+akkord
+akkordban
+akkordmunka
+akkordmunkás
+akkori
+akkorra
+akkortól
+akkorára
+akkreditáció
+akkreditál
+akkreditált
+akkreditálás
+akku
+akkulemez
+akkumulátor
+akkumulátortelep
+akkurátus
+akként
+akna
+aknabillenõkas
+aknacsatlós
+aknafolyosó
+aknafúró
+aknagádor
+aknakamra
+aknakas
+aknakeresõ
+aknakutató
+aknamerevítõ
+aknamezõ
+aknamélység-mutató
+aknamélyítõ
+aknarakó
+aknarács
+aknaszedõ
+aknaszáj
+aknaszén
+aknataposó
+aknatorok
+aknatorony
+aknavetõ
+aknavetõs
+aknazár
+aknász
+aknásít
+aknát
+akol
+akolba
+akolnyi
+akona
+akonadugó
+akridin
+akril-
+akrilát
+akrobata
+akrobatika
+akt
+akta
+aktacsomó
+aktatologatás
+aktatáska
+aktaösszekötõ
+aktivista
+aktivitás
+aktivál
+aktot
+aktualitását
+aktus
+aktuális
+aktuálisa
+aktuálisan
+aktázás
+aktív
+aktíva
+aktívák
+akupunkturista
+akupunktúra
+akusztika
+akusztikai
+akusztikus
+akusztikusan
+akusztikája
+akut
+akvamarin
+akvarell
+akvarellfesték
+akvarellfestés
+akvarellfestészet
+akvarellfestõ
+akvarellista
+akvizíció
+akvárium
+akác
+akácfa
+akár
+akár...
+akárcsak
+akárhogy
+akárhogyan
+akárhol
+akárhova
+akárhány
+akárhányan
+akárki
+akárkinek
+akárkit
+akármelyik
+akármi
+akármiként
+akármiképpen
+akármilyen
+akármilyent
+akármit
+akóz
+akörül
+al-
+alabárd
+alabástrom
+alabástromgipsz
+alacsony
+alacsonyabb
+alacsonyabban
+alacsonyak
+alacsonyan
+alacsonyra
+alacsonyrendû
+alagcsõ
+alagcsövez
+alagcsövezés
+alagsor
+alagutat
+alagút
+alagút-mintaív
+alagútfúró
+alagúthajtás
+alagútszelvény
+alak
+alak!
+alakba
+alakban
+alakesztergálás
+alaki
+alakiság
+alakja
+alakjában
+alakjára
+alakját
+alakmás
+alaknak
+alakokat
+alakoskodó
+alakot
+alakozás
+alakozó
+alakra
+alaktalan
+alaktalanság
+alakul
+alakulat
+alakulatban
+alakulatok
+alakulatoké)
+alakulatot
+alakulnak
+alakult
+alakulás
+alakulása
+alakutánzás
+alakvas
+alakverõ
+alakváltozás
+alakváltozási
+alakzat
+alakít
+alakítható
+alakíthatóság
+alakítja
+alakított
+alakítás
+alakító
+alakú
+alakú?
+alakúvá
+alamizsna
+alant
+alantas
+alantasabb
+alany
+alanya
+alanyeset
+alanyeseti
+alanyi
+alap
+alap-
+alapanyag
+alapanyaga
+alapbér
+alapdeszka
+alapelemek
+alapelgondolás
+alapelv
+alapelvek
+alapeszme
+alapfal
+alapfestés
+alapfok
+alapfokú
+alapformája
+alapfém
+alapgondolat
+alaphang
+alaphegység
+alapigazság
+alapismeretek
+alapismeretekkel
+alapja
+alapjaiban
+alapjaira
+alapjában
+alapján
+alapján,
+alapját
+alapjául
+alapkõ
+alapkõréteg
+alaplap
+alaplemez
+alapmázolás
+alapnak
+alapok
+alapokmánya
+alapokra
+alapon
+alapon,
+alapon?
+alapos
+alaposan
+alaposság
+alapossággal
+alapot
+alapoz
+alapozás
+alapozási
+alapozó
+alapozófesték
+alapozóréteg
+alapozót
+alappillér
+alappont
+alappontot
+alapposztó
+alapra
+alaprajz
+alaprajzot
+alaprezgésmód
+alaprács
+alapréteg
+alapréteget
+alapszabály
+alapszerûen
+alapszik
+alapszint
+alapszín
+alapszínt
+alapszó
+alapszövet
+alapszövezet
+alaptalaj
+alaptalan
+alaptalanul
+alaptermészet
+alapterület
+alaptárgy
+alaptétel
+alaptételek
+alaptõke
+alaptõke-csökkentés
+alaptõkecsökkentés
+alaptörvény
+alapul
+alapuló
+alapvetõ
+alapvetõen
+alapvizsga
+alapvonal-fejlesztés
+alapvonala
+alapvágat
+alapzat
+alapállás
+alapáramkör
+alapárok
+alapít
+alapítvány
+alapítványi
+alapítványozás
+alapítványt
+alapítás
+alapítási
+alapító
+alapú
+alarmíroz
+alatt
+alatta
+alatti
+alattomban
+alattomos
+alattomosan
+alattomosság
+alattunk
+alattvaló
+alba
+albatrosz
+albizottság
+album
+albán
+albániai
+albérlet
+albérletbe
+albérletben
+albérleti
+albérlõ
+albérlõket
+albérlõt
+albínó
+alchimista
+alcsalád
+alcsoport
+alcím
+aldershoti
+aldetermináns
+alelnök
+alemelet
+alezredes
+alfaj
+alfejezet
+alfele
+alfél
+alföld
+alga
+algebra
+algebrai
+algebrailag
+algebrikusan
+algoritmus
+algériai
+algíri
+alhadnagy
+alhadnagyi
+alhaszonbérlet
+alhaszonbérletbe
+alibi
+alibit
+alifás
+alig
+aligha
+alighanem
+alighogy
+alioszos
+alizarin
+alizarinvörös
+alj
+alja
+aljas
+aljasság
+aljassága
+aljasul
+aljnövényzet
+aljvíz
+aljzat
+alján
+alkalitás
+alkalma
+alkalmakkor
+alkalmas
+alkalmasan
+alkalmasnak
+alkalmassá
+alkalmasság
+alkalmassági
+alkalmat
+alkalmatlan
+alkalmatlankodik
+alkalmatlankodás
+alkalmatlankodó
+alkalmatlanként
+alkalmatlannak
+alkalmatlanná
+alkalmatlanság
+alkalmatlanságot
+alkalmatlanul
+alkalmaz
+alkalmazhatatlan
+alkalmazható
+alkalmazhatóság
+alkalmazhatósága
+alkalmazkodik
+alkalmazkodás
+alkalmazkodásra
+alkalmazkodó
+alkalmazkodóan
+alkalmazkodóképesség
+alkalmazott
+alkalmazottak
+alkalmazottja
+alkalmaztatás
+alkalmazás
+alkalmazása
+alkalmazási
+alkalmazásában
+alkalmazó
+alkalmazója
+alkalmi
+alkalmilag
+alkalmon
+alkalmából
+alkalmával
+alkalom
+alkalomadtán
+alkalomból
+alkalomhoz
+alkalommal
+alkalomra
+alkalomszerû
+alkalomszerûség
+alkar
+alkat
+alkatrész
+alkatrésze
+alkatrészek
+alkatú
+alkimista
+alkohol
+alkoholból
+alkoholcsempész
+alkoholellenes
+alkoholfogyasztást
+alkoholista
+alkoholizmus
+alkoholmentes
+alkoholos
+alkoholpróba
+alkoholról
+alkoholszonda
+alkoholt
+alkoholtilalom-ellenes
+alkoholtól
+alkony
+alkonyat
+alkonyatkor
+alkonyi
+alkonyodik
+alkonyulóban
+alkormányzó
+alkot
+alkotmány
+alkotmányba
+alkotmányellenes
+alkotmányos
+alkotmányosság
+alkotmányozó
+alkotnak
+alkotott
+alkotta
+alkotás
+alkotása
+alkotó
+alkotóelem
+alkotóelemek
+alkotókészség
+alkotórész
+alkotószabadság
+alku
+alku!
+alku?
+alkuban
+alkudozik
+alkudozás
+alkura
+alkusz
+alkuszdíj
+alkuszik
+alkuszság
+alkut
+alkuvás
+alkuvó
+alkáli
+alkália
+alkímia
+alkóv
+allegorikus
+allegorikusan
+allegória
+allegóriával
+allelopatikus
+allergia
+allergiás
+alligátor
+alligátorteknõs
+alliterál
+alliteráló
+allodiális
+allomer
+alloméria
+allonzs
+alluvium
+alluviális
+allé
+allövet
+alma
+almabor
+almabor-készítõ
+almabor-prés
+almabor-törköly
+almaborból
+almabornak
+almadaráló
+almaecet
+almakompót
+almamust
+almanach
+almot
+almoz
+almába
+almás!
+almáspite
+almásszürke
+alnémet
+alom
+alomnyi
+alosztály
+alosztályokra
+alperes
+alpesi
+alpi
+alpinista
+alpinizmus
+alpont
+alszanak
+alszik
+alsó
+alsóbb
+alsóbbrendû
+alsóbbrendûség
+alsófedélzet
+alsóház
+alsóháza
+alsóháznak
+alsóing
+alsónadrág
+alsónemû
+alsónál
+alsópályás
+alsóruha
+alsóruházat
+alsószoknya
+alsóéves
+altalaj
+altató
+altatódal
+altatószer
+altemplom
+altengernagy
+alteregó
+alternatív
+alternatíva
+alternáló
+altest
+altestmosó
+altiszt
+altiszti
+altruista
+altábornagy
+altáj
+altéma
+aludni
+aludt
+aludtam
+aludttej
+aludva
+alufólia
+alul
+alulcsapott
+alulhívott
+aluli
+alulig
+alulinak
+aluljáró
+alulmarad
+alulra
+alulról
+alulteljesít
+alultáplál
+alultáplált
+alumínium
+alumíniumipar
+alunit
+alunogén
+alussza
+aluszékony
+alva
+alvadt
+alvadtság
+alvadék
+alvajárás
+alvajáró
+alvaszt
+alvasztás
+alvilág
+alvilági
+alvállalatba
+alvállalati
+alvállalkozásba
+alvállalkozó
+alvás
+alváshoz
+alváson
+alvással
+alvást
+alváz
+alvó
+alvóhely
+alá
+alá!
+aláaknáz
+alább
+alábbhagy
+alábbhagyott
+alábbhagyása
+alábbi
+alábbiakban
+alábbvaló
+alábecsül
+alábukik
+alábuktatás
+alábukás
+alácsatornáz
+aládúcol
+aládúcolás
+aláesik
+aláfalaz
+aláfestés
+aláfestést
+alágyújtós
+aláhanyatlik
+aláhúz
+alájátszik
+alámerít
+alámerítés
+alámerítéssel
+alámerítõ
+alámerül
+alámerülés
+alámos
+alámûvelés
+aláosztó
+alárak
+alárendel
+alárendelt
+alárendeltek
+alárendeltje
+alárendeltjei
+alárendeltség
+alárendelés
+alárésel
+alászáll
+alászállt
+alászállása
+alászánt
+alászór
+alátart
+alátámaszt
+alátámasztható
+alátámasztott
+alátámasztás
+alátámasztására
+alátámasztó
+alátét
+alátétgyûrû
+alátétlemez
+alátétszerszám
+alátéttel
+alátétvas
+alátûr
+alávaló
+alávalóság
+aláver
+alávet
+alávetettség
+aláveti
+alávetés
+alávág
+aláváj
+alázatos
+alázatosan
+alázatoskodás
+alázatosság
+alázúduló
+aláás
+aláássa
+aláír
+aláírt
+aláírás
+aláírásod
+aláírással
+aláírásával
+aláíró
+alélt
+aléltan
+aléltság
+alépítmény
+alól
+alól)
+alóla
+ama
+amalgám
+amarant
+amatõr
+amaz
+amazonhangya
+ambiciózus
+ambivalens
+ambrózia
+ambrózia-
+ambulatórium
+ambíció
+ambíciói
+ameddig
+amellett
+amely
+amelyben
+amelyet
+amelyik
+amelyiket
+amennyi
+amennyiben
+amennyire
+amennyit
+amerikai
+amerikaiakra
+amerikáner
+amerikázó
+amerre
+ametiszt
+ametiszt-
+ametisztbõl
+ametisztszerû
+amfibol
+amfiteátrum
+amfiteátrum-szerû
+amfiteátrumban
+amfiteátrumi
+amfora
+ami
+amiatt
+amibe
+amiben
+amibõl
+amidokénsav
+amidoszulfonsav
+amikor
+amikorra
+amilyen
+amilyennek
+amim
+amin
+aminek
+amint
+aminõ
+amire
+amirõl
+amit
+amitózis
+amitõl
+amivel
+amiért
+ammónia
+ammónia-
+ammónium-alumínium
+ammóniumkarbonát
+ammóniák-
+amnesztia
+amnézia
+amorf
+amortizáció
+amortizál
+amott
+amper
+amperszám
+amplitúdó
+ampulla
+ampullagömb
+amputál
+amputálás
+amulett
+amíg
+amõba
+anagramma
+anagrammacsináló
+anagrammakészítés
+anagrammákat
+anagrammás
+anagrammásan
+anakoréta
+anakreóni
+anakronisztikus
+anakronizmus
+analfabéta
+analgézia
+analitikai
+analizál
+analízis
+analóg
+analógia
+analógiája
+analógiájára
+ananász
+anarchia
+anarchisztikus
+anasztigmatikus
+anatómia
+anatómiai
+anatómiailag
+anatómus
+andalító
+anekdota
+anekdotázó
+anemosztát
+anemóna
+aneroidszelence
+aneszteziológus
+aneurizma
+angin
+anglia
+angliai
+anglikán
+angol
+angol-búr
+angol-indiai
+angolbarát
+angolhoz
+angolkór
+angolkóros
+angolna
+angolnavarsa
+angolok
+angolosan
+angolspárga
+angolság
+angolsága
+angolsággal
+angolt
+angoltapasz
+angolul
+angolvörös
+angyal
+angyalarc
+angyalarcú
+angyalbõr
+angyalbõrbe
+angyalcápa
+angyalgyökér
+angyali
+angyalos
+angóragyapjú-szövet
+animista
+animisztikus
+animizmus
+animációs
+annak
+annak,
+annyi
+annyi,
+annyian
+annyinak
+annyira
+annyira,
+annyira...
+annyit
+annyival
+annál
+anomália
+anorák
+antagonisztikus
+antagonizmus
+antantszíj
+antedatál
+antenna
+antennaelem
+anti-
+antialkoholista
+antibiotikum
+antibiotikus
+antibiózis
+antibébi
+anticiklonális
+antigonit
+antik
+antikatód
+antiklimax
+antikvitás
+antikvitások
+antikvárius
+antilop
+antimilitarista
+antimilitarizmus
+antimon
+antimon-
+antimonid
+antimonit
+antimoniát
+antimonnal
+antimonos
+antimonszulfid
+antimonérc
+antipatikus
+antipátia
+antipódus
+antiszemita
+antiszemitizmus
+antiszeptikum
+antiszeptikus
+antiszociális
+antitest
+antitézis
+antiutópia
+antológia
+antracit
+antracén
+antrakinon
+antrakózis
+antropológia
+antropológiai
+antropológus
+anus
+anya
+anya-
+anyacsavar
+anyadisznó
+anyaelem
+anyaforma
+anyaföld
+anyag
+anyaga
+anyagbeszerzõ
+anyagból
+anyagcsata
+anyagcsere
+anyagellátó
+anyagelosztó
+anyagfelfutó
+anyagfelhasználás
+anyagfeloldó
+anyagfoszlató
+anyaggal
+anyagi
+anyagiak
+anyagiakkal
+anyagias
+anyagiasságát
+anyagigényesség
+anyagilag
+anyagkifáradás
+anyagok
+anyagraktár
+anyagtalanná
+anyagtalanít
+anyagutánpótlási
+anyagvizsgálat
+anyahajó
+anyai
+anyaian
+anyaintézet
+anyait
+anyajegy
+anyajogi
+anyajogú
+anyajuh
+anyakikötõ
+anyakirályné
+anyakõzet
+anyakönyv
+anyakönyvez
+anyakönyveztet
+anyakönyvi
+anyakönyvvezetés
+anyakönyvvezetõ
+anyalemez
+anyalúg
+anyanyelv
+anyanövény
+anyaország
+anyaországbeli
+anyaszült
+anyaság
+anyavállalat
+anyaállat
+anyjukom
+anyu
+anyádba!
+anyák
+anyámasszony
+anyányi
+anyáskodik
+anyáskodó
+anyátlan
+anyával
+anyázik
+anyós
+anyósülés
+análisan
+anélkül
+anélkül,
+anémia
+anémiás
+anód
+anódkör
+anódáramkör
+apa
+apacsgallér
+apad
+apadás
+apadó
+apai
+apait
+apaként
+apamén
+apaszt
+apasztás
+apaság
+apaságot
+apatikus
+apatikusan
+apaállat
+apellál
+apja
+apjára
+apjával
+apodiktikus
+apokalipszis
+apokrif
+apologetika
+apologetikus
+apologéta
+apostol
+apostoli
+apostolkodás
+apostolok
+aposztróf
+apropó
+apropóján
+apropójától
+apropójával
+apránként
+aprít
+aprítani
+aprítás
+aprítógép
+aprítómalom
+apró
+apró-cseprõ
+apróbb
+aprócsalán
+apród
+apródként
+apródnak
+apródonként
+aprófa
+aprógyémánt
+apróhal
+apróhirdetés
+apróka
+aprókat
+aprólék
+aprólékos
+aprólékosan
+aprólékoskodik
+aprólékoskodás
+aprólékoskodó
+aprólékosság
+aprópénz
+apróra
+aprószén
+apróság
+apróságok
+apróságokat
+aprót
+aprót!
+apróvad
+aprózza
+apu
+apuci
+apuka
+apus
+apáca
+apáca-fejedelemasszony
+apácafátyol
+apácafõnöknõ
+apácazárda
+apád
+apád!
+apához
+apály
+apát
+apátia
+apátlan
+apátság
+apától
+apó
+após
+arab
+arabeszk
+arabos
+arak
+arannyal
+arany
+arany,
+arany-
+aranyat
+aranyba
+aranybányász
+aranycsinálás
+aranycsináló
+aranyesõ
+aranyfeltárási
+aranyfólia
+aranyfürtös
+aranyfüst
+aranygallérosok
+aranyhajú
+aranyhal
+aranyifjú
+aranyifjút
+aranykitermelési
+aranykor
+aranyköpés
+aranylelõhely
+aranyláz
+aranymetszés
+aranymezõ
+aranymezõket
+aranymezõkre
+aranymosás
+aranymosó
+aranymûves
+aranynyúl
+aranyom
+aranyos
+aranyosan
+aranyosfejû
+aranyoskám
+aranyoz
+aranyozott
+aranyozás
+aranyport
+aranypénz
+aranyrojt
+aranyrög
+aranyszarv
+aranyszér
+aranyszín
+aranyszõke
+aranytartalmú
+aranyvályú
+aranyzab
+aranyásó
+aranyér
+aranyér-
+aranyérme
+arapapagáj
+arasszal
+arasz
+araszoló
+arat
+aratott
+aratás
+arató
+aratógép
+arbitrázs
+arbor
+arc
+arc!
+arca
+arcba
+arcbõr
+arcbõrû
+arccal
+arccsont
+arcfesték
+arcfintor
+arcfintorgatás
+arcfintorítást
+archeológia
+archeológiai
+archeológus
+archetípus
+archidiakónus
+architráv
+archívum
+arcidegzsába
+arcizma
+arcizomvonaglás
+arcjáték
+arckifejezés
+arckifejezése
+arckifejezéssel
+arckifejezést
+arckrém
+arckép
+arcképet
+arcképfestés
+arcképfestõ
+arcképvázlat
+arcképét
+arclemosó
+arcmás
+arcokat
+arcon
+arcot
+arcpirosító
+arcplasztika
+arcplasztikai
+arcra
+arcrándulás
+arcrángatódzás
+arcrángás
+arcszesz
+arcszín
+arcszínt
+arcszögû
+arctisztító
+arctámadás
+arcul
+arculat
+arculcsapás
+arculütés
+arcvonal
+arcvonalba
+arcvonalban
+arcvonás
+arcvonásai
+arcvonások
+arcába
+arcán
+arcára
+arcát
+arcátlan
+arcátlankodik
+arcátlanság
+arcátlanul
+arcél
+arcú
+arisztokrata
+arisztokratikus
+arisztokratikusan
+arisztokrácia
+aritmetika
+aritmetikai
+arkangyal
+arkusz
+armada
+armatúra
+aroma
+aromás
+arpeggio
+arpeggiál
+arpeggiált
+arpeggióban
+arpeggiót
+arra
+arra!
+arra,
+arrafelé
+arretáló
+arrogancia
+arrogáns
+arrogánsan
+arról
+arról,
+arthritis
+articsóka
+artifiola
+artikuláció
+artikulációs
+artikulál
+artikulálás
+artikulátlan
+artritizmus
+artéria
+artériás
+artézi
+arzenál
+arzén
+arábiai
+arány
+arány-meghatározás
+arányba
+arányban
+aránykiszámítás
+aránykörzõ
+aránylag
+aránylagos
+aránylik
+arányokban
+arányos
+arányosan
+arányosság
+arányossági
+arányosít
+arányosítás
+arányszám
+aránytalan
+aránytalanság
+aránytalanul
+arányában
+arányú
+aréka-dió
+aréka-pálma
+aréna
+arénázik
+arénázás
+asszimetrikus
+asszimiláció
+asszimilál
+asszimiláló
+asszimilálódik
+asszimilálódott
+asszimilálódás
+asszisztens
+asszociáció
+asszociál
+asszonnyá
+asszony
+asszonybolond
+asszonyhoz
+asszonyi
+asszonyiság
+asszonyok
+asszonyom
+asszonyos
+asszonyossá
+asszonyt
+asszonánc
+asz
+aszal
+aszalt
+aszalódás
+aszbolit
+aszbolán
+aszfalt
+aszfaltos
+aszfaltoz
+aszfaltozott
+aszfaltszõnyeg
+aszfaltút
+aszimmetria
+aszimmetrikus
+aszimptota
+aszimptotikus
+aszkéta
+aszociális
+aszott
+aszpirin
+asztag
+asztagba
+asztagot
+asztal
+asztala
+asztaldísz
+asztalfutó
+asztalfõhöz
+asztalfõn
+asztalhoz
+asztali
+asztalitenisz
+asztalka
+asztalkendõ
+asztallap
+asztalnál
+asztalok
+asztalomnál
+asztalon
+asztalos
+asztalosmesterség
+asztalosmunka
+asztalra
+asztalra?
+asztalról
+asztalt
+asztaltárs
+asztaltársaság
+asztaltól
+aszteroida
+asztma
+asztmás
+asztrahán
+asztrofizikus
+aszály
+atavisztikus
+atavizmus
+ateista
+ateistának
+ateizmus
+atka
+atlanti-óceáni
+atlasz
+atlasz-kötésminta
+atlasz-selyemanyag
+atlasz-szövet
+atlaszcsigolya
+atlaszfényt
+atlaszfényû
+atlaszselyem
+atléta
+atlétaing
+atlétika
+atlétikai
+atlétát
+atmoszferikus
+atmoszféra
+atmoszférikus
+atoll
+atom
+atom-
+atombiztos
+atombomba
+atombomba-robbanás
+atombombázó
+atombomlás
+atombontás
+atomcsapadék
+atomcsapás
+atomcsend
+atomcsoport
+atomelmélet
+atomenergia
+atomerõmû
+atomerõvel
+atomfegyver
+atomhajtású
+atomhajtómûves
+atomhatalom
+atomháború
+atomhõ
+atomizmus
+atomizál
+atomkorszak
+atomkutatás
+atomkörsugár
+atomlövedék
+atommag
+atommaghasadás
+atommaghasítás
+atommagkutatás
+atommeghajtású
+atommáglya
+atomokból
+atomokkal
+atomokra
+atomreaktor
+atomrendszám
+atomrobbantás
+atomrobbanás
+atomrobbanásnál
+atomrombolás
+atomromboló
+atomsugár
+atomsugárzás
+atomszerkezet
+atomszám
+atomszáma
+atomsúly
+atomtömeg
+atonalitás
+atonális
+atrocitás
+atrocitásoknak
+atropin
+attasé
+attika-csatorna
+attikai
+attrakció
+attól
+attól,
+atya
+atyafiság
+atyafiság-pártoló
+atyafiságpártolás
+atyai
+atyailag
+atyám!
+augur
+augusztus
+aukció
+aura
+ausztráliai
+autentikus
+autogejzír
+autogram
+autogénvágás
+autokláv
+autoklávban
+autokrata
+automata
+automatafegyver
+automataként
+automataérme
+automatikus
+automatikusan
+automatizál
+automatizálás
+automobil-
+autonomista
+autonóm
+autonómia
+autoptikus
+autoszifon
+autotípiai
+autó
+autó-
+autóbusszal
+autóbusz
+autóbuszjegy
+autóbuszjárat
+autóbuszkalauz
+autóbuszon
+autóbuszváróhely
+autóduda
+autóemelõ
+autógumi
+autógyár
+autóipar
+autójavító
+autók
+autókölcsönzõ
+autóköpeny
+autókürt
+autómentõ
+autómosó
+autómérnök
+autón
+autóparkoló
+autópálya
+autópálya-gyûrû
+autópályagyûrû
+autóra
+autós
+autósiskola
+autóskesztyû
+autósszemüveg
+autóstoppal
+autóstoppol
+autóstoppot
+autószerelõ
+autószállító
+autót
+autótaxi
+autótranszformátor
+autóval
+autóversenyen
+autóvezetõi
+autóvezetõt
+autózgat
+autózik
+autózni
+autózás
+autóút
+autóútra
+avantgard
+avantgardista
+avantgárd
+avarmezõ
+avas
+avasodni
+avat
+avatandó
+avatatlan
+avatják
+avatkozás
+avatott
+avatva
+avatás
+avatási
+averbója
+aviatika
+aviatikus
+avizó
+avoirdupois
+avulás
+avuló
+avval
+avégbõl,
+axiomatikus
+axiális
+axióma
+az!
+az,
+az?
+azaz
+azbeszt
+azelõtt
+azelõtti
+azeotróp
+aznap
+azok
+azokat
+azon
+azonban
+azonfelül
+azonkívül
+azonkívül,
+azonmód
+azonnal
+azonnali
+azonnaliság
+azonos
+azonosnak
+azonosság
+azonosságot
+azonosít
+azonosítatlan
+azonosíthatatlan
+azonosítja
+azonosítom
+azonosítás
+azonosító
+azsúrozott
+azt
+azt!
+azt,
+aztán
+aztán!
+aztán?
+azték
+azurit
+azután
+azután,
+azutáni
+azzal
+azzal!
+azzal,
+azzal?
+azáltal
+azért
+azért,
+azóta
+b-hez,
+bab
+baba
+babaarcú
+babahintõpor
+babaház
+babakocsi
+babbal
+babcsírás
+babilóniai
+babona
+babonás
+babrál
+babrálás
+babráló
+babszár
+babusgat
+babuska
+babuskám
+babája
+babér
+babérait
+babérfa
+babérkoszorú
+babérkoszorús
+babérlevél
+babérokat
+babérokra
+babérral
+babért
+baccalaureus
+baccalaureusa
+baccalaureátusi
+bacilus
+badar
+badarság
+badarságokat
+bagatell
+bagatellizál
+bagoly
+bagolyhuhogás
+bagolynál
+bagolyvár
+bagzik
+bagázs
+bagó
+bagóhiten
+bagólesõ
+bagót
+bagózik
+bagóért
+baj
+baj!
+baj,
+baj?
+baja
+baja?
+bajait
+bajba
+bajban
+bajból
+bajjal
+bajkeverõ
+bajlódik
+bajnok
+bajnoki
+bajnokság
+bajod
+bajod?
+bajodat!
+bajok
+bajokkal
+bajokon
+bajokra
+bajom
+bajonett
+bajonett-kapcsolás
+bajos
+bajosan
+bajszerzõ
+bajszos
+bajt
+bajtárs
+bajtársi
+bajtársiasság
+bajtársiság
+bajukat
+bajunk
+bajusz
+bajusza
+bajuszos
+bajvívó
+baját
+bak
+baka
+bakafántoskodó
+bakancs
+bakancsszeg
+bakelit
+bakelitlakk
+bakelitoz
+bakelizál
+bakfis
+bakfiskodó
+bakfiskor
+bakhát
+baki
+bakizik
+bakkal
+bakkara
+bakkecske
+baklövés
+baklövések
+baklövést
+bakot
+bakszakáll
+baktat
+baktatás
+baktérium
+baktérium-szélesztés
+baktériummal
+baktériumtenyészet
+baktériumtörzs
+baktérítõ
+bakugrás
+bakállvány
+bakó
+bal
+balcsillagzat
+baldachin
+baldachint
+balek
+baleknak
+balerina
+baleset
+baleset-elhárítás
+balesetbõl
+balesetek
+balesetet
+baleseti
+balesetmentesen
+balesettõl
+balett
+balett-trikó
+balett-táncos
+balett-táncosnõ
+balettkar
+balettrajongó
+balfasz
+balfedezet
+balfogás
+balfácán
+balfék
+balharántpólya
+balhátvéd
+balhé
+balhés
+balhét
+balhézik
+baljós
+baljóslatú
+baljóslatúan
+balkezes
+balkon
+ballada
+ballag
+ballaszt
+ballerinanadrág
+ballisztika
+ballisztikus
+ballon
+ballépés
+baloldali
+balos
+balra
+balraforgatás
+balraforgató
+balról
+balsafa
+balsejtelem
+balsejtelmek
+balsiker
+balsikerû
+balsors
+balszerelõ
+balszerencse
+balszerencsés
+balszerencsét
+balszélsõ
+balta
+baltacim
+balul
+balvégzet
+balzsam
+balzsamként
+balzsamos
+balzsamozó
+balösszekötõ
+bamba
+bambusz
+bambuszbot
+bambusznád
+bambuszrügy
+banalitás
+banda
+bandita
+banditaság
+bandukol
+bandzsa
+bandzsít
+bandzsítás
+bandába
+bandában
+bandája
+bandázs
+bank
+bankba
+bankban
+bankbetétjéhez
+bankból
+bankelfogadvány
+bankett
+bankettet
+bankettezés
+bankfiók
+bankfolyószámla
+bankhitel
+banki
+bankigazgató
+bankintézvény
+bankjegy
+bankjegyhamisító
+bankjegyköteg
+bankkövetelés
+banknak
+bankot
+bankpénz
+bankpénztáros
+bankrészvény
+bankszámla
+banktisztviselõ
+bankár
+bankátutalás
+bantam
+bantamsúly
+banya
+banzáj
+banális
+banálissá
+banán
+banánfürt
+banánt
+baptista
+bar
+barack
+barakk
+barakktábor
+barancsolgatni
+barangol
+barangolás
+barangoló
+barbarizmus
+barbár
+barbárság
+barett
+bari
+barika
+barikád
+barit
+bariton
+baritonista
+baritonkürt
+baritontuba
+barka
+barkahasíték
+barkasajtolás
+barkácsol
+barkáz
+barkó
+barlang
+barlangjába
+barlangkutató
+barlanglakó
+barlangászkodás
+barmul
+barna
+barnabõrûség
+barnaingesek
+barnaszén
+barnás
+barnássárga
+barokk
+barom
+baromfi
+baromfi-
+baromfi-kifutó
+baromfiudvar
+baromi
+baromság
+barométer
+barracuda
+barrakuda
+barrister
+barristerek
+barristernek
+barát
+barátai
+barátaik
+barátaiknak
+barátait
+barátcsuha
+baráti
+barátian
+barátilag
+barátja
+barátjánál
+barátkozik
+barátkozó
+barátkötés
+barátnõ
+barátnõje
+barátok
+barátokká
+barátokra
+barátom
+barátság
+barátsága,
+barátsági
+barátságos
+barátságosan
+barátságosság
+barátságot
+barátságtalan
+barátságtalanság
+barátságtalanul
+barázda
+barázdákat
+barázdál
+barázdált
+barázdás
+barázdát
+baró
+baseball
+baseball-játékos
+baseball-pálya
+baseballban
+baseballcsapat
+bassza
+basszameg!
+basszista
+basszus
+basszushang
+basszuskulcs
+basszussípja
+baszakodik
+baszhatja
+baszik
+baszk
+baszogass!
+baszogat
+baszott
+baszva
+baszás
+baszást
+basáskodik
+basáskodó
+battéria
+batyu
+batyuba
+batyubál
+batyuja
+batyusbál
+batár
+bauxit
+bauxitbánya
+bauxitmûvek
+bayerit
+bazalt
+bazaltburkolat
+bazaltkõzet
+bazaltláva
+bazaltos
+bazaltszerû
+bazalttufa
+be!
+be,
+be?
+bead
+beadja
+beadvány
+beadványpapír
+beadás
+beadása
+beadó
+beajánl
+beajánlás
+beakad
+beakaszt
+beakasztás
+beakasztó
+beakasztója
+bearanyoz
+beatnemzedék
+beatnikek
+beavat
+beavatatlan
+beavatkozik
+beavatkozás
+beavatkozó
+beavatott
+beavatottak
+beavatás
+bebalzsamoz
+bebalzsamoztatás
+bebalzsamozás
+bebalzsamozó
+bebarangol
+bebarangolja
+bebeszél
+bebeszéli
+bebizonyosodás
+bebizonyosodását
+bebizonyít
+bebizonyítható
+bebizonyítja
+bebizonyított
+bebizonyítás
+bebizonyító
+bebiztosít
+bebiztosított
+bebocsát
+bebocsátás
+bebocsátási
+bebocsátást
+bebocsátását
+bebocsátó
+beboltoz
+beborul
+beborult
+beborít
+beborító
+bebugyolál
+bebugyolálja
+beburkol
+beburkolja
+beburkolózik
+bebábozódik
+bebábozódás
+bebörtönzés
+bebörtönzött
+bebörtönöz
+bebörtönöztet
+bebújik
+bebújás
+bebútoroz
+becenevén
+becenév
+becenéven
+becikkelyez
+becikkelyezés
+becinkez
+becipel
+becs
+becsap
+becsapható
+becsapják
+becsapni
+becsapolás
+becsapott
+becsaptak
+becsaptak!
+becsapás
+becsapó
+becsapódik
+becsapódás
+becsapódó
+becsatol
+becsattant
+becsavar
+becsavarja
+becsavarodik
+becsavarodott
+becsavart
+becsavarás
+becsempész
+becsempészett
+becsempészi
+becserél
+becses
+becsiccsentett
+becslés
+becslésem
+becsléssel
+becslõ
+becsmérel
+becsmérlés
+becsmérlõ
+becsmérlõen
+becsomagol
+becsomagolás
+becsoszog
+becstelen
+becstelenség
+becstelenül
+becsuk
+becsukja
+becsuknia
+becsukódik
+becsvágy
+becsvágyak
+becsvágyás
+becsvágyó
+becsíp
+becsípett
+becsípettség
+becsíptet
+becsípés
+becsúszik
+becsúsztat
+becsúsztatnunk
+becsül
+becsület
+becsületbeli
+becsületbíróság
+becsületedre
+becsületemre
+becsületemre!
+becsületes
+becsületesen
+becsületesség
+becsületet
+becsületkódex
+becsületrend
+becsületszavamra
+becsületszavát
+becsületszó
+becsületsértés
+becsülettel
+becsületébe
+becsületén
+becsületére
+becsületérzetére
+becsületét
+becsülik
+becsüljük
+becsült
+becsülöm
+becsüs
+becukroz
+becéz
+becézgetés
+becézés
+becézõ
+becõ
+bedagad
+bedagadt
+bedeszkáz
+bediffundáltatás
+bedilizett
+bedilizik
+bedob
+bedobja
+bedolgoz
+bedolgozott
+bedolgozó
+bedolgozórendszer
+bedrótoz
+bedug
+bedugaszol
+bedugaszolja
+bedugaszolt
+bedugaszolás
+bedugja
+bedugul
+bedugult
+bedugás
+bedutyiz
+bedíszletez
+bedõl
+bedõlt
+bedõlési
+bedöf
+bedöglik
+bedöglött
+bedönt
+bedörgöl
+bedörzsöl
+bedörzsölés
+bedühödik
+bee!
+beenged
+beengedhetõ
+beengedés
+beerdõsít
+beereszt
+beeresztett
+beereszti
+beesett
+beesik
+beeszik
+beesés
+beesési
+beesõ
+beetet
+beevett
+beevez
+befagy
+befagyaszt
+befagyott
+befagyás
+befal
+befalaz
+befecskendez
+befecskendezés
+befed
+befedez
+befejez
+befejezetlen
+befejezetlenség
+befejezetlenül
+befejezett
+befejezi
+befejezni!
+befejezte
+befejezted?
+befejeztével
+befejezés
+befejezéshez
+befejezéséhez
+befejezõ
+befejezõdik
+befejezõdés
+befejezõdött
+befejezõje
+befeketít
+befeketített
+befeketítés
+befeketítõ
+befektet
+befektetett
+befektetés
+befektetése
+befektetési
+befektetõ
+befelhõsödik
+befellegzett
+befelé
+befelé-kancsalítás
+befest
+befirniszol
+befizet
+befizetett
+befizetéséhez
+beflúgol
+befog
+befogad
+befogadás
+befogadó
+befogadóképesség
+befogadóképessége
+befogadóképességû
+befogja
+befoglal
+befoglalt
+befoglalás
+befoglalása
+befogni
+befogott
+befogva
+befogás
+befogó
+befogófej
+befogókészülék
+befogópofa
+befogószerkezet
+befogótokmány
+befoltoz
+befolyik
+befolyás
+befolyása
+befolyási
+befolyásol
+befolyásolható
+befolyásolhatóan
+befolyásolhatóság
+befolyásolja
+befolyásolni
+befolyásolt
+befolyásoló
+befolyásos
+befolyásosabb
+befolyásra
+befolyással
+befolyást
+befolyását
+befolyó
+befon
+befordul
+befordulni
+befordulás
+beforr
+beforraszt
+beforrasztás
+beforrás
+befröcsköl
+befröcskölés
+befuccsol
+befulladt
+befurakodik
+befurakszik
+befut
+befutott
+befuttat
+befutás
+befutó
+befáradni
+befásított
+befékez
+beférkõzik
+befészkeli
+befészkelte
+befészkelõdve
+befõtt
+befõz
+befõzés
+befú
+befúj
+befúvott
+befúvószerkezet
+befûrészel
+befût
+befûtök
+befûz
+befûzi
+befûzõdés
+befûzõmunkás
+befûzött
+befüggönyöz
+befüstöl
+befüstölt
+befüvesít
+begerjed
+begerjedt
+begerjedés
+begerjedési
+begipszel
+begipszez
+begittel
+begolyózik
+begombol
+begubózik
+begubózás
+begurul
+begurít
+begurítás
+begurítása
+begy
+begyakorlott
+begyakorolja
+begyakoroltat
+begyakoroltatás
+begyemben
+begyepesedett
+begyepesít
+begyullad
+begyulladás
+begyulladós
+begyullaszt
+begyógyul
+begyógyult
+begyógyítja
+begyömöszöl
+begyöpösödött
+begyújt
+begyújtás
+begyújtókészülék
+begyûjt
+begyûjtés
+begyûjtõ
+begyûr
+begónia
+begöngyöl
+begörbít
+begörbített
+begörbül
+begördít
+begördül
+behabarja
+behabzsol
+behajlik
+behajlás
+behajlít
+behajlítja
+behajt
+behajtani
+behajthatatlan
+behajtja
+behajtott
+behajtás
+behajóz
+behajózni
+behajózza
+behajózás
+behallgat
+behangol
+behangolás
+beharangoz
+behatol
+behatolt
+behatolás
+behatárol
+behatárolt
+behatárolás
+behatás
+beható
+behatóan
+behavaz
+behaviorizmus
+beheged
+behegeszt
+behelyettesít
+behelyettesíthetõ
+behelyettesítés
+behelyez
+behelyezi
+behemót
+behint
+behintés
+behintése
+behord
+behordja
+behordás
+behorganyoz
+behorpad
+behorpadás
+behorpaszt
+behoz
+behozatal
+behozatali
+behozni
+behozza
+behullás
+behunyt
+behurcolkodik
+behálóz
+behéderel
+behív
+behívat
+behívható
+behívott
+behívás
+behívó
+behízelegni
+behízelgi
+behízelgés
+behízelgõ
+behódol
+behódolás
+behódoló
+behúz
+behúzható
+behúzni!
+behúzott
+behúzva
+behúzza
+behúzás
+behúzó
+behúzódik
+behût
+behûtés
+beidéz
+beigazolás
+beigazoló
+beigazolódik
+beigazolódás
+beigazít
+beigazítja
+beigazítás
+beijedt
+beijedve
+beijedõs
+beiktat
+beiktatás
+beilleszkedik
+beilleszkedés
+beilleszkedõ
+beilleszt
+beillesztenünk
+beillesztett
+beilleszthetõ
+beillesztés
+beindul
+beindulás
+beindít
+beindíthatóság
+beindítás
+beintés
+beinvitál
+beiratkozik
+beiratkozottak
+beiratkozás
+beiratkozási
+beirányozás
+beirányít
+beirányító
+beismer
+beismeri
+beismerten
+beismerés
+beivódás
+bejegel
+bejegyez
+bejegyeztet
+bejegyzett
+bejegyzés
+bejelent
+bejelenteti
+bejelenti
+bejelentkezik
+bejelentkezés
+bejelentés
+bejelentõ
+bejelentõje
+bejelentõlap
+bejelentõt!
+bejut
+bejutnia
+bejutás
+bejár
+bejárat
+bejárata
+bejárati
+bejáratos
+bejáratot
+bejáratul
+bejáratás
+bejáratása
+bejárja
+bejárás
+bejárása
+bejárást
+bejárónõ
+bejön
+bejöttem
+bejövetel
+bejövõ
+bekacsol
+bekandikál
+bekap
+bekapcsol
+bekapcsolja
+bekapcsolt
+bekapcsolva
+bekapcsoló
+bekapcsolódik
+bekapja
+bekaptároz
+bekarikáz
+bekaszniz
+bekasztliz
+bekattanás
+bekattint
+bekebelez
+bekebelezett
+bekebelezés
+beken
+bekenés
+bekeretez
+bekeretezetlen
+bekeretezett
+bekeretezés
+bekerít
+bekerített
+bekerítés
+bekerül
+bekezdés
+bekezdéssel
+bekezdõ
+bekonferál
+bekopírozott
+bekormoz
+bekormozott
+bekormozza
+bekrachol
+bekrepál
+bekrémez
+bekrétáz
+bekukkant
+bekukucskál
+bekurbliz
+bekvártélyoz
+bekvártélyozza
+bekvártélyozás
+bekátrányoz
+bekávézott
+beképzel
+beképzeli
+beképzelt
+beképzelten
+beképzeltség
+beképzeltté
+bekér
+bekéret
+bekísér
+bekódol
+beköltözik
+beköp
+beköpi
+beköszöntõ
+beköt
+beköti
+bekötõ
+bekötõút
+bekötött
+bekötöz
+bekövetkezik
+bekövetkezés
+bekövetkezése
+bekövetkezõ
+beküld
+bel-
+belakatol
+belakhat
+belakik
+belakkoz
+belakkozás
+belakott
+belapátol
+belbecs
+belbiztonsági
+bele
+bele!
+bele?
+beleadja
+beleadva
+beleakad
+beleavatkozik
+belebocsátkozik
+belebolondul
+belebolondulás
+belebonyolít
+belebonyolódik
+belebotlik
+belebújik
+belecsap
+belecsepegtet
+belecsikordul
+belecsíp
+belecsúsztat
+belediktál
+beledob
+beledolgoz
+beledolgozza
+beledug
+beledugja
+beledumál
+beledöf
+beleegyezem,
+beleegyezett
+beleegyezik
+beleegyezés
+beleegyezése
+beleegyezõ
+beleejt
+beleereszt
+beleerõszakol
+beleesik
+belefekszik
+belefeledkezett
+belefeledkezés
+belefog
+belefoglal
+belefoglalás
+belefojtja
+belefárad
+belefáradt
+belefáradtam
+belefér
+belefúródik
+belegabalyodik
+belegyakorolja
+belegyalogol
+belegyömöszöl
+belehabarodik
+belehajszol
+belehajt
+belehal
+beleharap
+belehel
+belehelt
+belehelyez
+belehelés
+beleilleszkedik
+beleilleszt
+beleillik
+beleillõ
+beleivódni
+beleivódott
+belejön
+belejössz
+belek
+belekalkulál
+belekap
+belekapaszkodik
+belekapcsolódik
+belekarol
+belekever
+belekeveredik
+belekeveredtek
+belekeveredés
+belekeverés
+belekezd
+belekontárkodik
+belekukkant
+belekukucskál
+belekényszerít
+beleképzeli
+belekóstolt
+beleköp
+belekössenek
+beleköt
+belekötõ
+belelapoz
+belelendül
+beleloval
+belelát
+belelép
+belelõ
+belem!
+belemagyaráz
+belemar
+belemegy
+belemelegedett
+belemelegedik
+belemelegszik
+belement
+belemenõs
+belemerít
+belemerül
+belemerülés
+belemerülõ
+belemárt
+belemászik
+belemélyed
+belemélyedt
+belemélyedés
+belemélyeszti
+belendül
+belenevel
+belenyom
+belenyugszik
+belenyugvás
+belenyúl
+belenéz
+beleolvad
+belep
+belepottyan
+beleragad
+belerak
+belerogy
+belerohan
+belerángat
+belerángatják
+belerázódik
+belerúg
+belesik
+belesodor
+beleszagolt
+beleszalad
+beleszaladt
+beleszeret
+beleszokik
+beleszámol
+beleszámít
+beleszámított
+beleszámítva
+beleszámítás
+beleszánt
+beleszól
+beleszólása
+beleszõ
+belesül
+belesüpped
+beletanul
+beletaszít
+beletesz
+beletorkollik
+beletrafál
+beletölt
+beletöm
+beletörõdik
+beletörõdés
+beletûz
+beleugratják
+beleugrik
+beleun
+beleunt
+belevaló
+belevegyít
+belever
+belevesz
+beleveti
+belevisz
+belevonás
+belevág
+belevágja
+belevásik
+belevés
+belevésõdik
+belevéve
+belezavarodik
+belezuhan
+belezökken
+beleéli
+beleélés
+beleért
+beleértett
+beleértve
+beleértés
+beleértõen
+beleérzés
+beleönt
+beleüti
+beleütközik
+beleütõdik
+belforgalom
+belföld
+belföldi
+belföldön
+belga
+belganyúl
+belgiumi
+belgyógyász
+belgyógyászat
+belgyógyászati
+belharc
+belibeg
+beljebb
+beljebb!
+belkereskedelem
+belmisszió
+belocsolás
+belopakodik
+belopódzik
+belovagol
+belpolitika
+belseje
+belsejébe
+belsejében
+belsejébõl
+belsejével
+belszolgálat
+belsõ
+belsõleg
+belsõség
+belsõségek
+belsõépítészet
+beltag
+beltenger
+beltenyésztésû
+belterület
+belvizek
+belvizes
+belváros
+belvárosban
+belvárosi
+belvíz
+belvízi
+belvízártér
+belát
+beláthatatlan
+belátható
+belátja,
+belátogat
+belátás
+belátása
+belátásod
+belátásra
+belátással!
+belázasodik
+belázasít
+beléd!
+beléd?
+beléfojtja
+belégzés
+beléje?
+belélegez
+belélegzett
+belélegzik
+belélegzés
+belép
+belépni
+belépni!
+beléptem
+belépti
+belépés
+belépése
+belépési
+belépõ
+belépõdíj
+belépõél
+belét
+beléállt
+belóg
+belógat
+belógás
+belõ
+belõle
+belõle!
+belõle,
+belõled
+belõled!
+belök
+belövellés
+belövi
+belövés
+belügyek
+belügyminiszter
+belügyminisztérium
+belül
+belüli
+belülrõl
+belülsõ
+bemagol
+bemagoltat
+bemarat
+bemaródik
+bemaródás
+bemaszatol
+bemasíroz
+bemegy
+bemelegszik
+bemelegít
+bemelegíti
+bemelegítõ
+bemenet
+bemenetel
+bement
+bemenõ
+bemerít
+bemerítés
+bemerítéssel
+bemeszel
+bemesél
+bemeséli
+bemesélni!
+bemetsz
+bemetszett
+bemetszés
+bemetszést
+bemocskol
+bemocskolhatatlan
+bemocskoló
+bemond
+bemondja
+bemondás
+bemondásokkal
+bemondást
+bemondó
+bemos
+bemutat
+bemutatja
+bemutatkozva
+bemutatkozás
+bemutatott
+bemutatás
+bemutatása
+bemutatásra
+bemutató
+bemutatója
+bemárt
+bemártás
+bemásolt
+bemászik
+bemázol
+bemélyedés
+bemélyít
+bemért
+bemérési
+bemérõ
+bemész
+bemószerol
+bencés
+bendzsó
+bendzsón
+bendõ
+bendõjét
+benedekrendi
+benediktiner
+benedvesít
+benevez
+benevezés
+bengáli
+benn
+benne
+benne,
+bennem
+bennfentes
+bennfentesek
+bennlakó
+bennmarad
+bennragad
+bennszülött
+bennszülöttek
+bennülõ
+bennünket
+bennünket!
+benszülött
+bensõ
+bensõséges
+bent
+bentlakásos
+bentlakó
+bentonit
+bentosz
+benyakal
+benyalja
+benyisszant
+benyom
+benyomul
+benyomulás
+benyomás
+benyomást
+benyomódás
+benyálaz
+benyálkáz
+benyújt
+benyújtja
+benyújtó
+benyúl
+benyúlik
+benzin
+benzindús
+benzinfogyasztás
+benzinkutas
+benzinkút
+benzint
+benzintartály
+benzintöltõ
+benzinért!
+benzol
+benépesít
+benépesítés
+benéz
+benézett
+benõ
+benõtt
+beo
+beolt
+beoltó
+beolvad
+beolvadás
+beolvadó
+beolvas
+beolvaszt
+beolvasztani
+beolvasztás
+beomlik
+beomlás
+beomlásveszélyes
+beoson
+beoszt
+beosztja
+beosztott
+beosztályoz
+beosztás
+beosztásban
+beosztási
+beosztásos
+beosztással
+beosztást
+beosztású
+beosztó
+bepacáz
+bepakol
+bepakolás
+bepaliz
+bepalánkol
+bepancsol
+beparaffinoz
+beperel
+bepermetez
+bepettyegetett
+bepillantás
+bepiszkol
+bepiszkoló
+bepiszkolódik
+bepiszkít
+bepiszkított
+bepiszkító
+bepiál
+bepiálva
+bepofázik
+bepolitúroz
+beporoz
+beprésel
+bepréseli
+bepucol
+bepárlás
+bepárol
+bepárolt
+bepászít
+bepólyáz
+bepótol
+bepúderoz
+beragad
+beragaszt
+beragasztására
+beragasztására)
+beragyog
+berajzol
+berak
+berakatja
+berakja
+berakodik
+berakodás
+berakott
+beraktároz
+berakás
+berakásos
+berakással
+berakásánál
+berakógép
+berakómunkát
+berber
+bereffel
+bereffeli
+berek
+berekeszt
+berendel
+berendez
+berendezetlen
+berendezett
+berendezkedik
+berendezés
+berendezések
+berendezési
+berendezéssel
+berendezésû
+berepedezett
+bereteszel
+berezgés
+berill
+berillium
+berkenye
+berkenyefa
+berlini
+berobban
+berobbant
+berobbanás
+berohan
+beront
+berontás
+beroskad
+berosál
+berovátkol
+berozsdásodik
+berozsdásodott
+berozsdásít
+berreg
+berregés
+berregõ
+berugdal
+berugdos
+beruház
+beruházott
+beruházás
+beruházási
+berzsenyfa
+berzsenyfesték
+berzsenyszín
+berágódik
+berágódás
+beráncol
+beránt
+berántja
+berésel
+berúg
+berúgja
+berúgott
+berúgókar
+besajtol
+besajtolás
+besavanyodik
+besavanyodott
+besavanyodva
+besavanyít
+besegít
+besiklik
+besilózás
+beskatulyáz
+besmúzol
+besodor
+besodrás
+besomfordál
+besompolyog
+besorol
+besorolható
+besorolás
+besorolása
+besorolási
+besoroz
+besorozott
+besorozzák
+besorozás
+besrófol
+besszjátékos
+bestialitás
+besugároz
+besugárzás
+besulykol
+besulykolás
+besurran
+beszabályoz
+beszabályozás
+beszajkóztat
+beszakad
+beszakadás
+beszappanoz
+beszappanozás
+beszari
+beszarik
+beszarás!
+beszed
+beszedés
+beszeg
+beszegecselés
+beszegetlen
+beszegez
+beszegezi
+beszemez
+beszenez
+beszennyez
+beszennyezetlen
+beszennyezés
+beszennyezõ
+beszennyezõdik
+beszentel
+beszentelt
+beszentelés
+beszerel
+beszerelt
+beszerelteti
+beszerez
+beszerezhetetlen
+beszerezhetõ
+beszervez
+beszerzi
+beszerzés
+beszerzési
+beszeszelt
+beszivárgás
+beszivárog
+beszolgáltat
+beszolgáltatás
+beszorul
+beszorulás
+beszorít
+beszurkoz
+beszáll
+beszállás
+beszállás!
+beszállási
+beszállásol
+beszállásolja
+beszállásolás
+beszállásolási
+beszállít
+beszállókártya
+beszámol
+beszámolás
+beszámolási
+beszámoló
+beszámolót
+beszámít
+beszámíthatatlan
+beszámíthatatlannak
+beszámíthatatlanság
+beszámíthatatlanságot
+beszámítás
+beszánt
+beszéd
+beszéd!
+beszédalakzat
+beszédbe
+beszéde
+beszédes
+beszédesség
+beszédet
+beszédet!
+beszédfordulat
+beszédhang
+beszédhiba
+beszédhibás
+beszédhibások
+beszédképességû
+beszédkészség
+beszédmodor
+beszédmód
+beszédre
+beszédrészek
+beszédrõl
+beszédtárgy
+beszédtéma
+beszédében
+beszédét
+beszédû
+beszél
+beszél!
+beszél,
+beszélek
+beszélez
+beszélget
+beszélgetni
+beszélgetés
+beszélgetésre
+beszélgetéssel
+beszélgetést
+beszélgetést?
+beszélhetek
+beszélhetõ
+beszélik
+beszélik,
+beszélj
+beszélj!
+beszéljen
+beszélne
+beszélni
+beszélnie
+beszélsz
+beszélsz,
+beszélsz?
+beszélt
+beszélt!
+beszéltem
+beszéltél
+beszélve
+beszélõ
+beszélõke
+beszélõkéje
+beszélõszerv
+beszélünk
+beszíjaz
+beszív
+beszívja
+beszívott
+beszívás
+beszívó
+beszívódás
+beszól
+beszólít
+beszór
+beszõ
+beszõnyegezés
+beszögellés
+beszövés
+beszúr
+beszúrás
+beszûkít
+beszûkülés
+beszûkülõ
+beszûrõdés
+beszûrõdött
+beszüntet
+beszünteti
+beszüntetni!
+beszüntetés
+besároz
+besározott
+besétálni!
+besóz
+besózott
+besózás
+besózó
+besöprõ
+besöpör
+besötétedik
+besötétül
+besúg
+besúgja
+besúgó
+besûrít
+besûrítés
+besûrûsödik
+besûrûsödés
+besül
+besüllyedés
+besüpped
+besüppedés
+betakar
+betakarít
+betakarítja
+betakarítás
+betakarózva
+betanul
+betanulás
+betanít
+betanított
+betanítás
+betapad
+betapaszt
+betapasztott
+betapasztása
+betapos
+betart
+betartás
+betartó
+beteg
+betegek
+betegellátás
+betegen
+beteges
+betegesen
+betegeskedett
+betegeskedik
+betegeskedés
+betegeskedõ
+betegesség
+beteget
+beteggondozó
+beteggé
+betegkoszt
+betegnek
+betegre
+betegsegélyezés
+betegszabadság
+betegszoba
+betegség
+betegsége
+betegségeirõl
+betegségek
+betegséget
+betegséghordozó
+betegségi
+betegségnek
+betegségre
+betegágy
+beteker
+betekintés
+betekintést
+betelepszik
+betelepít
+betelepítés
+betelepülõ
+beteljesedés
+beteljesítés
+beteljesületlen
+beteljesülés
+betemet
+betennie
+beterelés
+beterjesztés
+betermel
+betervezett
+betesz
+beteszi
+betett
+betetéz
+betetõz
+betetõzés
+betetõzõ
+betetõzött
+betevése
+betevõ
+betilt
+betiltja
+betiltás
+betintáz
+betojik
+betokosodik
+betol
+betolakodik
+betolakodás
+betolakodó
+betolakszik
+betold
+betoldott
+betolással
+betoló
+beton
+beton-
+betonba
+betonerõd
+betonfedezék
+betonkapocs
+betonkeverõ
+betonkezelés
+betonos
+betonréteg
+betonvasháló
+betonút
+betoppan
+betorkollás
+betudása
+betuszkol
+betyár
+betyár!
+betáblázás
+betájol
+betáplált
+betáplálás
+betér
+betét
+betétdarab
+betétel
+betétes
+betétfogas
+betétgumi
+betétje
+betétkönyv
+betétlemez
+betétszalag
+betéttest
+betéttuskó
+betódul
+betódulás
+betölt
+betölti
+betöltés
+betöltése
+betöltõ
+betöltõje
+betöm
+betömeti
+betömi
+betömés
+betömõdik
+betömõdés
+betör
+betördel
+betöri
+betörik
+betörve
+betörés
+betöréses
+betörõ
+betörõarca
+betörõt
+betû
+betûanyag
+betûanyagminta
+betûbeütõ
+betûfaj
+betûfej
+betûfém
+betûfémsalak
+betûibõl
+betûje
+betûk
+betûkbõl
+betûkilökõ
+betûkkel
+betûkép
+betûkészlet
+betûkölyû
+betûköz
+betûköztag
+betûmagas
+betûnagyság
+betûrajzoló
+betûrend
+betûrendes
+betûrágó
+betûrímes
+betûs
+betûsorja
+betûszedés
+betûszedõ
+betûszó
+betût
+betûtest
+betûtípus
+betûtörzs
+betûvetés
+betûz
+betûzés
+betûzõ
+beugrat
+beugratás
+beugrató
+beugrik
+beugrom
+beugrás
+beugrásra
+beugró
+beutal
+beutaz
+beutazik
+beutaztat
+beutazza
+bevagdal
+bevagdos
+bevagoníroz
+bevakol
+bevakolt
+bevall
+bevallja
+bevallott
+bevallottan
+bevallás
+bevallása
+bevarasodik
+bevarr
+bevarrást
+bevehetetlen
+bever
+beveri
+beverés
+beverése
+bevesz
+beveszi
+bevet
+bevetett
+bevethetõ
+beveti
+bevett
+bevetés
+bevezet
+bevezeti
+bevezetik
+bevezetteti
+bevezetés
+bevezetésként
+bevezetésképpen
+bevezetõ
+bevezetõi
+bevezetõt
+beviharzik
+bevilágít
+bevilágító
+bevisz
+beviszi
+bevitel
+bevon
+bevonat
+bevonható
+bevonja
+bevont
+bevonul
+bevonulás
+bevonulási
+bevonás
+bevonó
+bevonódik
+bevádol
+bevádolás
+bevág
+bevágja
+bevágott
+bevágás
+bevágása
+bevágási
+bevágást
+bevágó
+bevágódik
+bevájás
+beválasztható
+beválasztják
+beválik
+bevált
+beválthatatlan
+beváltható
+beváltja
+beváltás
+beváltási
+beváltását
+bevándorlás
+bevándorlási
+bevándorló
+bevándorol
+bevándorolt
+bevásárlás
+bevásárló
+bevásárló-központ
+bevásárlókocsi
+bevásárlókosár
+bevásárlóközpont
+bevásárol
+bevásárolni
+bevégez
+bevégzetlen
+bevégzés
+bevégzõdik
+bevégzõdés
+bevérzett
+bevés
+bevésett
+bevésés
+bevésõzár
+bevétel
+bevételek
+bevételezés
+bevételezési
+bevörösít
+bezabál
+bezabált
+bezabálás
+bezománcoz
+bezsebel
+bezsilipel
+bezsong
+bezsíroz
+bezsúfol
+bezár
+bezárja
+bezárkózik
+bezárt
+bezárul
+bezárult
+bezárva
+bezárás
+bezáródik
+bezáródás
+bezárólag
+bezúz
+beácsolt
+beágyaz
+beágyazó
+beágyazódik
+beágyazódás
+beáll
+beálltakor
+beállít
+beállított
+beállítottság
+beállítottságú
+beállítás
+beállítása
+beállításban
+beállítási
+beállításon
+beállítást
+beállítású
+beállító
+beállítógyûrû
+beáramlik
+beáramlás
+beáraz
+beárnyékol
+beárnyékolás
+beárnyékoló
+beárul
+beássa
+beázik
+beáztat
+beáztatás
+beéget
+beégetett
+beégetés
+beégetéssel
+beékel
+beékelt
+beékelõdés
+beépít
+beépített
+beépítési
+beérett
+beéri
+beérkezett
+beérkezik
+beérkezés
+beérkezõ
+beérni
+beír
+beírás
+beível
+beöblösödés
+beöltöztet
+beömlesztés
+beömlik
+beömlés
+beömlõ
+beömlõnyílás
+beönt
+beöntés
+beözönlik
+beözönlés
+beültet
+beültetett
+beültetés
+beültetésre
+beüt
+beütemezés
+beüti
+beütés
+beütése
+beüvegez
+beüvegezetlen
+beüvegezett
+biankó
+bibe
+bibeszáj
+bibeszál
+bibi!
+bibircsók
+bibit
+biblia
+bibliai
+bibliakritika
+bibliapapír
+bibliaterjesztõ
+bibliaóra
+bibliofil
+bibliofília
+bibliában
+bibliája
+bibliára
+bibliás
+bicaj
+bicajos
+biccent
+biccentés
+biccentéssel
+bicebóca
+biceg
+bicegni
+bicegés
+bicegõ
+bicepsz
+bicikli
+biciklista
+bicikliszerelõ
+biciklitúra
+biciklizik
+biciklizés
+bicska
+bidé
+bifláz
+biflázik
+biflázás
+biflázó
+bifokális
+bifsztek
+bige
+biggyeszt
+biggyeszti
+bigott
+bigyó
+bigámia
+bigámista
+bigámiás
+bika
+bikafejû
+bikaszarv
+bikavadító
+bikaviadal
+bikini
+bikinialsó
+bikinifelsõ
+bikonvex
+bikromátos
+bikának
+bili
+bilincs
+bilincsbe
+bilincseitõl
+bilincsel
+bilincstelen
+bilire
+bilizteti
+biliárd
+biliárdasztal
+biliárddákó
+biliárdgolyó
+biliárdjátszma
+biliárdozik
+billeg
+billeget
+billegõ
+billencs
+billent
+billenthetõ
+billenti
+billentyû
+billentyûkötõ
+billentyûs
+billentyûsorral
+billentyûzet
+billentés
+billentõ
+billentõcsille
+billentõkocsi
+billenés
+billenõ
+billenõcsille
+billenõgémes
+billenõkapcsoló
+billenõkocsi
+billog
+billér
+bimbó
+bimbóudvar
+bimbózik
+bimbózó
+bingó
+binom
+binomiális
+biokémia
+biokémiai
+biokémikus
+biológia
+biológiai
+biomassza
+bioszféra
+biotikus
+bipoláris
+birka
+birka-
+birkafaggyú
+birkagulyás
+birkahús
+birkaláb
+birkanyírás
+birkanyírást
+birkanyíró
+birkanyírók
+birkaterelõ
+birkaúsztató
+birkát
+birkózik
+birkózás
+birkózó
+birkózószõnyeg
+birodalma
+birodalmat
+birodalmi
+birodalom
+birs
+birsalma
+birsalmabor
+birsalmafa
+birsalmalekvár
+birslekvár
+birtok
+birtoka
+birtokba
+birtokbajutás
+birtokban
+birtokbavétel
+birtokfosztás
+birtokháborítás
+birtokháborító
+birtokkereset
+birtoklevél
+birtoklás
+birtoklási
+birtokló
+birtokol
+birtokolt
+birtokon
+birtokos
+birtokosa
+birtokosi
+birtokot
+birtokába
+birtokában
+birtokát
+bison
+bisz-basz
+biszbasz
+bitang
+bitorlás
+bitorló
+bitorol
+bitorolja
+bitumen
+bitumenbarna
+bitumenes
+bitumenez
+bitumenezés
+bitumennel
+bitó
+bitófa
+bitófán
+bitóra
+bivaly
+bivalybõr
+bivalycsorda
+bivalyhárító
+bivalynyak
+biz
+bizakodás
+bizakodással
+bizakodó
+bizakodóan
+bizalmadat
+bizalmas
+bizalmasa
+bizalmasan
+bizalmaskodik
+bizalmaskodva
+bizalmaskodás
+bizalmaskodó
+bizalmasság
+bizalmatlan
+bizalmatlanság
+bizalmatlansági
+bizalmi
+bizalmába
+bizalmát
+bizalom
+bizalomgerjesztõ
+bizalomgerjesztõen
+bizalommal
+bizalomra
+bizalomteljes
+bizarr
+bizarrság
+bizgentyû
+bizodalom
+bizomány
+bizományba
+bizományban
+bizományi
+bizományos
+bizonnyal
+bizony
+bizony!
+bizonygat
+bizonygatja
+bizonygató
+bizonylat
+bizonyos
+bizonyosan
+bizonyosodott
+bizonyosság
+bizonyság
+bizonyságot
+bizonyságul
+bizonytalan
+bizonytalankodó
+bizonytalannak
+bizonytalanság
+bizonytalanságban
+bizonytalanul
+bizonyul
+bizonyulás
+bizonyuló
+bizonyára
+bizonyít
+bizonyítani
+bizonyítatlan
+bizonyítható
+bizonyíthatóan
+bizonyíthatóság
+bizonyítja,
+bizonyított
+bizonyítvány
+bizonyítvány-
+bizonyítványosztó
+bizonyítás
+bizonyítása
+bizonyítására
+bizonyíték
+bizonyítéka
+bizonyítékaképp
+bizonyítékok
+bizonyítékokon
+bizonyítékokra
+bizonyítékot
+bizonyítékul
+bizonyítékát
+bizonyító
+bizottság
+bizottsághoz
+bizottsági
+bizottságnak
+bizsereg
+bizsergés
+bizsergõ
+bizsu
+biztat
+biztatták
+biztató
+biztatóan
+biztonság
+biztonságba
+biztonságban
+biztonsági
+biztonságos
+biztos
+biztos,
+biztosan
+biztosra
+biztosság
+biztosít
+biztosítja
+biztosított
+biztosítva
+biztosítás
+biztosítása
+biztosítási
+biztosításra
+biztosításról
+biztosítással
+biztosítást
+biztosíték
+biztosítéka
+biztosítékdoboz
+biztosítékot
+biztosítékszekrény
+biztosító
+biztosítóaljzat
+biztosítógyûrû
+biztosítókötél
+biztosítósapka
+biztosítószerkezet
+biztosítószorító
+biztosítótû
+bióta
+blabla
+blamálja
+blanketta
+blazírt
+bliccel
+bliccelés
+bliccelõ
+blicclámpa
+blokk
+blokkház
+blokkol
+blokkolás
+blokáció
+blokád
+blokált
+blokálás
+blues
+bláz
+blézer
+blöff
+blöfföl
+blúz
+blúzpótló
+bobnak
+boci
+bocskor
+bocsánat
+bocsánat,
+bocsánatkérés
+bocsánatos
+bocsánatosság
+bocsánatot
+bocsásd
+bocsáss!
+bocsát
+bocsátkozik
+bocsátott
+bocsátás
+bocsátó
+bodega
+bodnármester
+bodorodik
+bodorít
+bodorított
+bodros
+bodza
+boehmit
+bog
+bogara
+bogarakhoz
+bogaras
+bogarasság
+boglya
+boglyába
+boglyát
+boglárfa
+boglárka
+bogot
+bogyózó
+bogácsol
+bogáncs
+bogár
+bogárhát
+bogárhátú
+bohém
+bohémmé
+bohémség
+bohémvilág
+bohéméletet
+bohó
+bohóc
+bohócjelmezes
+bohóckodik
+bohóckodás
+bohóckodó
+bohócruha
+bohócsapka
+bohócvirág
+bohókás
+bohóskodás
+bohóság
+bohózat
+bojkottál
+bojler
+bojt
+bojtorján
+bojtos
+boka
+bokafix
+bokaperec
+bokapántos
+bokaszõr
+bokaszõrzet
+bokavédõ
+bokazokni
+bokaízület
+bokkol
+bokkolás
+bokor
+bokorban
+bokorból
+bokorugró
+bokorültetvény
+bokrok
+bokrokkal
+bokros
+bokrétafa
+boksz
+bokszer
+bokszkesztyû
+bokszmeccs
+bokszmérkõzés
+bokszokkal
+bokszol
+bokszolás
+bokszolási
+bokszoló
+bokszolók
+bokszolóként
+bokszring
+bokszállásba
+bokáján
+bokáját
+bokázás
+boldog
+boldog-boldogtalan
+boldogabb
+boldogan
+boldoggá
+boldogság
+boldogságnak
+boldogságtól
+boldogságát
+boldogtalan
+boldogtalanság
+boldogul
+boldogul,
+boldogulni
+boldogulnod
+boldogultam
+boldogulás
+boldoguló
+boldogít
+boldogító
+bolgár
+bolgárkertész
+bolha
+bolhajáték
+bolhapiac
+bolhát
+bolond
+bolonddá
+bolondja
+bolondját
+bolondnak
+bolondnak!
+bolondokháza
+bolondos
+bolondot
+bolondozik
+bolondozva
+bolondozz
+bolondozás
+bolondozó
+bolondság
+bolondságot
+bolondul
+bolondéria
+bolondít
+bolsevik
+bolsevizmus
+bolsevizál
+bolsevizálás
+bolsi
+bolt
+bolthajtás
+boltja
+boltokat
+boltos
+boltossegéd
+boltost
+boltot
+boltoz
+boltozat
+boltozatos
+boltozatot
+boltozatívelés
+boltozva
+boltozó
+boltozódik
+boltrész
+bolttetõ
+boltváll
+boltív
+boltíves
+boltívet
+boltívmagasság
+boly
+bolyfa
+bolygassuk
+bolygat
+bolygatórostély
+bolygó
+bolygó-
+bolygómû-külsõgyûrû
+bolyh
+bolyhok
+bolyhos
+bolyhosság
+bolyhosít
+bolyhosító
+bolyhoz
+bolyhozott
+bolyhozás
+bolyhozó
+bolyong
+bomba
+bombabiztos
+bombakioldó
+bombakráter
+bombaként
+bombamerénylet
+bombasiker
+bombaszerva
+bombasztikus
+bombatalálatot
+bombatámadás
+bombavetés
+bombaüzlet
+bombák
+bombát
+bombával
+bombáz
+bombázás
+bombázása
+bombázással
+bombázó
+bombázógép
+bomlasztó
+bomlik
+bomlás
+bomlást
+bomlástermék
+bomlófélben
+bomol
+bon
+bonbon
+bonc
+bonckés
+boncol
+boncolgat
+boncolgatás
+boncolgató
+boncolás
+boncolást
+boncoló
+boncoló-terem
+bonctan
+bonctani
+bonctanilag
+boncterem
+bongó
+bont
+bontok
+bontott
+bontás
+bontási
+bontásnak
+bontó
+bontófésû
+bontórúd
+bontóvas
+bontóítélet
+bonyodalom
+bonyolult
+bonyolultan
+bonyolultság
+bonyolít
+bonyolítható
+bor
+boralma
+borbély
+borbélycégér
+borda
+bordafáz
+bordaközökre
+bordal
+bordaláda
+bordaszelet
+bordavonala
+bordája
+bordák
+bordákkal
+bordás
+bordásfal
+bordáz
+bordázat
+bordázott
+bordázás
+bordély
+bordélyház
+bordélyházakat
+bordó
+bordói
+bordûr
+boreális
+borfajta
+borfiú
+borgõzös
+borissza
+borjazik
+borjú
+borjúbõr
+borjúbõrkötés
+borjúbõrök
+borjúcomb
+borjúfejleves
+borjúhoz
+borjúhús
+borjúmirigy
+borjúnyúzó
+borjúszelet
+borkereskedés
+borkõ
+borkõsav
+borközi
+borlap
+bormuslinca
+borneói
+borogat
+borogatás
+borok
+borona
+borongó
+borongós
+boronál
+boros
+borospohár
+borospohárnyi
+borospohárral
+borostyán
+borostyánkoszorús
+borostyánkõ
+borostyánkõsav
+borostyánnal
+borostyánszín
+borostyánág
+borostás
+borotva
+borotvafenõ
+borotvakés
+borotvapamacs
+borotvapenge
+borotvaszíj
+borotvaélen
+borotvaéles
+borotvaélesítõ
+borotvál
+borotválatlan
+borotválkozik
+borotválkozás
+borotválkozásnál
+borotvált
+borotválás
+borotváló
+borpárlat
+borral
+borravaló
+borravalórendszer
+borravalót
+borravalózás
+bors
+borscserje
+borsdaráló
+borseprõ
+borsfû
+borsmenta
+borsos
+borsosmenta
+borsot
+borsoz
+borssal
+borsszem
+borsszóró
+borstartó
+borszínû
+borsó
+borsódzik
+borsószem
+borsót
+borsótripsz
+borsózik
+bort
+bort?
+bortermés
+bortól
+bortömlõ
+borul
+borult
+borulva
+borulás
+borvirágos
+borz
+borzadok
+borzadás
+borzadó
+borzalmai
+borzalmas
+borzalmasan
+borzalmasság
+borzalom
+borzas
+borzasztó
+borzasztóan
+borzeb
+borzol
+borzolás
+borzolódik
+borzolódó
+borzong
+borzongató
+borzongva
+borzongás
+borzongó
+borzongós
+borzsák
+borít
+borított
+borította
+borítottak
+borítsunk
+borítás
+borításhoz
+boríték
+borítékban
+borítékkal
+borító
+borítólap
+borítólemez
+borízû
+boróka
+borókafenyõ
+borókapálinka
+ború
+borúlátás
+borúlátó
+borúra
+borús
+bosszankodik
+bosszankodott
+bosszankodva
+bosszankodó
+bosszant
+bosszantja
+bosszantotta
+bosszantás
+bosszantó
+bosszantóan
+bosszú
+bosszúból
+bosszúját
+bosszús
+bosszúsan
+bosszúszomj
+bosszúszomjas
+bosszúság
+bosszúságok
+bosszúságot
+bosszúságára
+bosszút
+bosszúterveket
+bosszúvágyó
+bosszúállás
+bosszúálló
+bosszúért
+boszorka
+boszorkány
+boszorkánykonyha
+boszorkánymesterség
+boszorkányok
+boszorkánypróbát
+boszorkányseprû
+boszorkányszerû
+boszorkányság
+boszorkánysággal
+boszorkányüldözés
+boszorkányüldözõ
+bot
+botanika
+botanikus
+botanizál
+botfülû
+botja
+botladozik
+botladozás
+botladozó
+botlik
+botlottunk
+botlás
+botlások
+botló
+botorkál
+botorkálás
+botorkáló
+botos
+botrány
+botrányos
+botrányosan
+botrányt
+botszék
+bottal
+botvívás
+botvívásban
+bourdon-csõ
+box
+boxer
+boxos
+boxosbence
+bozont
+bozontos
+bozót
+bozótban
+bozótos
+bozótot
+brahizás
+brahmanista
+brandy
+brandys
+bratyizik
+bratyizás
+bratyizó
+bravó!
+bravózás
+bravúrosan
+brazil
+brazíliai
+breccsa
+brekeg
+brekegés
+bricsesz
+bricska
+bridzs
+bridzseztünk
+brig
+briganti
+brigg
+brigád
+brigádmunka
+brigádvezetõ
+brikett
+briliáns
+brillantin
+brilliáns
+bringa
+bringázik
+brit
+britek
+broki
+brokkoli
+brokát
+brokátselyem
+brontosaurus
+bronz
+bronz-
+bronzból
+bronzkor
+bronzkór
+bronzozás
+bronzszínû
+bronzszínûre
+bronztárgy
+bronzvörös
+bronzzal
+bronzöntõ
+bross
+brosúra
+brunyál
+brunzol
+brutalitás
+bruttó
+brutális
+brutálisan
+brácsa
+brága
+brámin
+brómzselatin
+bubi
+bubifrizura
+bubisra
+buborék
+buborékfújó
+buborékol
+bubópestis
+buca
+bucka
+buckás
+buddhista
+budi
+budoár
+buffa
+buga
+buggyant
+buggyantott
+buggyos
+bugris
+bugyborékol
+bugyborékoltat
+bugyborékolás
+bugyi
+bugyog
+bugyogás
+bugyogó
+buja
+bujakór
+bujaság
+bujdosó
+bujkál
+bujkált
+bujtogató
+bujtvány
+bujtás
+bujtóág
+bujálkodik
+bujálkodás
+bujálkodó
+buján
+bukdácsol
+bukdácsolás
+bukdácsoló
+bukfenc
+bukfencet
+bukfencezik
+bukfencezés
+bukfencezõ
+bukik
+bukkan
+bukmékerek
+bukott
+bukrám
+bukszus
+bukta
+buktat
+buktató
+buktatócsille
+buktatószerkezet
+bukva
+bukás
+bukásra
+bukást
+buké
+bukógalamb
+bukógát
+bukóhullám
+bukósisak
+bula
+bulgáriai
+buli
+buliban
+buliból
+bulla
+bulldogkölyök
+bulldózer
+bulldózeres
+bulvársajtó
+bumeráng
+bumfordi
+bumm!
+bumtõ
+bumvilla
+bunda
+bundapálinka
+bundájú
+bundásalma
+bundáskenyér
+bungaló
+bunker
+bunkó
+bunkós
+bunkósbot
+bunkósbottal
+bunsen-állvány
+bunyó
+bunyós
+bunyózik
+burgonya
+burgonyabogár
+burgonyaforgács
+burgonyaszirom
+burgonyaverem
+burgonyát
+burgundi
+burgundiai
+burjánzik
+burjánzás
+burjánzó
+burkol
+burkolat
+burkolathoz
+burkolatkõ
+burkolt
+burkoltan
+burkolva
+burkolás
+burkoló
+burkolóanyag
+burkolófal
+burkológörbe
+burkolótégla
+burkot
+burleszk
+burmai
+burnót
+burnótozik
+burok
+burokráma
+burzsoá
+burzsoázia
+burzsuj
+busman
+busszal
+busz
+buszon
+buszvezetõ
+busásan
+buta
+butaság
+butaságok
+butaságokat
+butik
+butil
+butul
+butus
+butuska
+bután
+butít
+buzdít
+buzdítás
+buzdító
+buzeralökés
+buzerál
+buzeráns
+buzeráról
+buzgalom
+buzgalommal
+buzgalomról
+buzgott
+buzgó
+buzgólkodik
+buzgómócsing
+buzgón
+buzgóság
+buzi
+buzis
+buzisan
+buziskodik
+buzit
+buzog
+buzogány
+buzogányhoz
+buzogás
+buzuki
+buzul
+buzérvörös
+báb
+bába
+bábavarangy
+bábbá
+bábeli
+bábkirály
+bábkormány
+bábszínház
+bábu
+bádog
+bádogdoboz
+bádogdobozba
+bádogedény
+bádoggal
+bádoghangú
+bádogkanna
+bádoglapátka
+bádogos
+bádogvágó
+bágyad
+bágyadt
+bágyadtan
+bágyadtnak
+bágyadtság
+bágyasztó
+báj
+bájaitól
+bájak
+bájital
+bájolás
+bájos
+bájosan
+bájosság
+bájtalan
+bájtalanság
+bál
+bála
+báli
+báljára
+bálkirálynõ
+bálna
+bálnadaraboló
+bálnafej
+bálnafióka
+bálnahalász
+bálnahalászhajó
+bálnavadász
+bálnavadászat
+bálnavelõ
+bálnazsír
+bálnaállkapocs
+bálnára
+bálozó
+bálterem
+bálvány
+bálványa
+bálványfa
+bálványimádás
+bálványimádó
+bálványkép
+bálványoz
+bálványozás
+bálványozó
+bálába
+báláz
+bálázó
+bámia
+bámul
+bámulat
+bámulatba
+bámulatos
+bámulatosan
+bámulatot
+bámulás
+bámuló
+bámulója
+bámész
+bámészkodik
+bámészkodás
+bámészkodó
+bánat
+bánata
+bánatomra
+bánatos
+bánatosan
+bánatosság
+bánatot
+bánatpénz
+bánattól
+bánatában
+bánatát
+bánik
+bánja
+bánkódik
+bánkódás
+bánni
+bánom
+bánt
+bántalmaz
+bántalmazás
+bántalom
+bántja
+bántó
+bántóan
+bánya
+bányaaknát
+bányabér
+bányakombájn
+bányakutató
+bányakõ
+bányalevegõ
+bányaléges
+bányameddõ
+bányamester
+bányamezõ
+bányamozdony
+bányamunkás
+bányamûvelés
+bányaomlás
+bányarém
+bányaudvar
+bányaács
+bányában
+bányász
+bányászati
+bányászcsákány
+bányászik
+bányásztüdõ
+bányát
+bánásmód
+bánó
+bár
+bár-törzsvendég
+bárca
+bárcsak
+bárcsak!
+bárd
+bárd-
+bárdol
+bárdolatlan
+bárdolatlanság
+bárdolatlanul
+bárgyú
+bárgyúság
+bárhogy
+bárhol
+bárhova
+bárhová
+bárium
+bárja
+bárka
+bárki
+bárkinek
+bárkit
+bárkivel
+bárkához
+bárkák
+bármely
+bármelyik
+bármennyi
+bármennyibe
+bármennyire
+bármi
+bármibe
+bármiféle
+bármikor
+bármilyen
+bármilyent
+bármit
+bárpult
+bársony
+bársonyos
+bársonyossá
+bársonyosság
+bárszekrény
+bárszék
+bárány
+báránybunda
+báránybõrbe
+báránybõrbunda
+bárányfelhõ
+bárányfelhõs
+bárányhimlõ
+bárányhús
+bárányka
+báránylapocka
+bárányoz
+bárányt
+báró
+bástya
+bástyakör
+bástyát
+bátor
+bátorkodik
+bátorkodom
+bátorság
+bátorság!
+bátorsága
+bátorságban
+bátorságot
+bátorságát
+bátortalan
+bátortalanság
+bátortalanul
+bátorít
+bátorítás
+bátorító
+bátorítóan
+bátraké
+bátran
+báty
+bátyja
+bázikus
+bázis
+bécsi
+bécsiek
+béget
+bégetés
+bégetõ
+béka
+békaember
+békaevõ
+békaláb
+békanyelv
+békaporonty
+békaszerûen
+békatalp
+békaügetés
+béke
+béke!
+békebontó
+békebíró
+békecsók
+békeegyezmény
+békeidõ
+békekötés
+békekülönítmény
+békemozgalom
+békesség
+békeszeretõ
+békeszerzõ
+béketábla
+béketárgyalás
+béketûrés
+béketûrõ
+béketûrõen
+békezászló
+béklyó
+béklyói
+béklyója
+béklyóz
+békácska
+békát
+békával
+békében
+békében!
+békéje
+békéltetés
+békéltetõ
+békén
+békén!
+békés
+békésen
+békét
+békítõ
+bél
+bél-
+bélel
+béleletlen
+bélelt
+bélfonalszövet
+bélférges
+bélfürdõ
+bélgiliszta
+bélgilisztája
+bélgyulladás
+bélhurut
+bélhúr
+béllel
+bélmûködés
+bélpoklos
+bélszín
+béltraktus
+bélyeg
+bélyege
+bélyeges
+bélyeget
+bélyegez
+bélyeggyûjtés
+bélyeggyûjtési
+bélyegnedvesítõ
+bélyegzés
+bélyegzõ
+bélyegzõpárna
+bélyegzõt
+bélés
+béléscsõ-rakat
+bélésdeszka
+bélésfal
+béléslemez
+béléspapír
+bélést
+béna
+bénaság
+bénult
+bénultan
+bénulás
+bénulása
+bénává
+bénázik
+bénít
+bénító
+bénítóan
+bér
+bérbe
+bérbeadás
+bérbevétel
+bérc
+bércsökkentés
+bércsökkentést
+bérek
+bérel
+bérelhetõ
+bérelt
+bérelés
+béremelés
+béremelést
+bérenc
+bérence
+bérfizetési
+bérgyilkos
+bérház
+béristálló
+bérjövedelem
+bérkaszárnya
+bérkocsi
+bérkocsi-állomás
+bérkocsis
+bérlajstrom
+bérlemény
+bérleszállítás
+bérlet
+bérlet-meghosszabbítási
+bérleti
+bérlettulajdonos
+bérlista
+bérlõ
+bérlõtárs
+bérmentesen
+bérmentesség
+bérmentességet
+bérmentesít
+bérmentesített
+bérmentesítõ
+bérmentve
+bérmunka
+bérmált
+bérnegyed
+bérpalota
+bérszint
+bértollnok
+bértüntetés
+bérösszeg
+bétel
+bétel-dió
+bételborsfa
+bételdió
+bételpálma
+bézs
+bíbelõdik
+bíbelõdés
+bíbic
+bíbictojás
+bíbor
+bíborcsiga-faj
+bíbornoki
+bíboros
+bíborosi
+bíborszín
+bír
+bírja
+bírják
+bírlalás
+bírni
+bírom
+bírság
+bírságcédula
+bírsággal
+bírságolási
+bírságot
+bírt
+bírta
+bírtam
+bírvágy
+bírája
+bírák
+bírál
+bírálat
+bírálatnak
+bírálatot
+bírálatát
+bírálgató
+bíráló
+bírálóan
+bírálóbizottság
+bírás
+bíráskodik
+bíráskodás
+bírásvágy
+bíró
+bírói
+bíróság
+bírósághoz
+bírósági
+bíróságot
+bíróé)
+bíz
+bízik
+bízni
+bízom
+bíztat
+bízva
+bízza
+bízzák
+bízzál
+bízó
+bóbiskol
+bóbita
+bóbitás
+bóbitával
+bódulat
+bódult
+bódultan
+bódultság
+bódé
+bódít
+bódító
+bódítószer
+bódítószerrel
+bója
+bójákkal
+bók
+bókok
+bókokat
+bókol
+bókony
+bólint
+bólintás
+bólintó
+bólogat
+bór
+bórsav
+bóvli
+bõbeszédû
+bõbeszédûen
+bõbeszédûség
+bõg
+bõgni
+bõgés
+bõgése
+bõgõ
+bõgõmasina
+bõkezû
+bõkezûen
+bõkezûség
+bõr
+bõr-
+bõrbe
+bõrben
+bõrbetegség
+bõrbõl
+bõrdíszmûáru
+bõre
+bõrerszény
+bõrfelület
+bõrgyógyász
+bõrhajú
+bõrharmonika
+bõrhatás
+bõrhiba
+bõrig
+bõring
+bõripar
+bõrkabát
+bõrkeményedés
+bõrkeményedéses
+bõrkikészítõ
+bõrkárpitozás
+bõrlebernyeg
+bõrlehámlás
+bõrlemez
+bõrmandzsetta
+bõrnyelv
+bõrolaj
+bõrpikkelyesedés
+bõrrel
+bõrsarok
+bõrszakáll
+bõrszeg
+bõrszerû
+bõrszín
+bõrt
+bõrtömlõ
+bõrutánzat
+bõrviszketegség
+bõrvágó
+bõrápoló
+bõrébe
+bõrében
+bõrébõl
+bõrére
+bõrét
+bõrönd
+bõröz
+bõrû
+bõsz
+bõszít
+bõség
+bõségben
+bõsége
+bõséges
+bõségesen
+bõségesség
+bõséggel
+bõségszaru
+bõségû
+bõvebben
+bõvelkedik
+bõvelkedve
+bõvelkedés
+bõvelkedõ
+bõven
+bõvérû
+bõvérûség
+bõvít
+bõvítmény
+bõvítés
+bõvítõcsõ
+bõvül
+bõvülés
+bödön
+bödönkészítõ
+bödönökkel
+böffenés
+böfög
+böfögés
+bögre
+bögy
+bögyödben
+bögyös
+bögöly
+böjt
+böjtfû
+böjtöl
+bök
+bökd
+bökkenõ
+bökkenõ!
+bökés
+bölcs
+bölcsebb
+bölcsek
+bölcsekké
+bölcseleti
+bölcselõ
+bölcsen
+bölcsesség
+bölcsességfog
+bölcsész
+bölcsészet
+bölcsészeti
+bölcsészettudomány
+bölcsészettudományi
+bölcsészhallgató
+bölcsészkar
+bölcsésztudományi
+bölcsõ
+bölcsõben
+böllér
+bölény
+bölényhárító
+bölömbika
+bömböl
+bömbölés
+bömbölése
+böngészik
+börtön
+börtönbe
+börtönben
+börtönbõl
+börtönbüntetés
+börtönbüntetését
+börtönlakók
+börtönparancsnok
+börtöntöltelék
+börtönõr
+börzsönyfa
+búb
+búbjáig
+búbos
+búbánatos
+búbánatosan
+búcsú
+búcsúbeszéd
+búcsúest
+búcsút
+búcsúzkodás
+búcsúzott
+búcsúztat
+búcsúztatás
+búcsúztató
+búg
+búgat
+búgás
+búgó
+búgócsiga
+bújhat
+bújik
+bújj
+bújja
+bújni
+bújt
+bújtat
+bújtatott
+bújócska
+bújócskázik
+búr
+búra
+bús
+búsan
+búsba!
+búskomor
+búskomorság
+búslakodik
+búslakodó
+búsul
+bútor
+bútordarab
+bútorgarnitúra
+bútorgörgõ
+bútorkefe
+bútorkocsi
+bútorkreton
+bútorláb
+bútorozatlan
+bútorozatlanul
+bútorozott
+bútorral
+bútorszállító
+bútorvédõ
+bútorzat
+búvár
+búvárdugattyú
+búvárkodik
+búvárkodás
+búvárkötél
+búvármadár
+búvárpipa
+búvárszemüveg
+búvófülke
+búvóhely
+búvólyuk
+búvónyílás
+búvóöböl
+búza
+búzacsíra
+búzaköszvény
+búzaliszt
+búzatábla
+búzaérõ
+búzával
+bûbáj
+bûbájolás
+bûbájos
+bûbájossá
+bûbájosság
+bûbájt
+bûn
+bûnbak
+bûnbe
+bûnbeesés
+bûnbocsánat
+bûnbocsánati
+bûnbocsánatárus
+bûnbánat
+bûnbánati
+bûnbánó
+bûnbánóan
+bûncselekmény
+bûncselekmények
+bûncselekményre
+bûnei
+bûneit
+bûnhõdik
+bûnhõdés
+bûnhöz
+bûnjel
+bûnpalástolás
+bûnpalástolást
+bûnper
+bûnpártolás
+bûnpártolást
+bûnpártoló
+bûnre
+bûnrészes
+bûnrészesség
+bûnsegéd
+bûnszövetkezet
+bûnt
+bûntelen
+bûntett
+bûntettes
+bûntettnek
+bûntudat
+bûntudatos
+bûntudatosan
+bûntárs
+bûntársa
+bûntõl
+bûnvádi
+bûnére
+bûnét
+bûnéül
+bûnök
+bûnös
+bûnösnek
+bûnösség
+bûnösségét
+bûnözik
+bûnözés
+bûnözési
+bûnözõ
+bûnözõkbõl
+bûnözõnek
+bûnözõt
+bûnügyi
+bûvige
+bûvkörébe
+bûvész
+bûvészet
+bûvészkedik
+bûvészkedés
+bûvészkellék
+bûvészláda
+bûvészmutatvány
+bûvészmutatványokat
+bûvölet
+bûvöletében
+bûvös
+bûz
+bûz!
+bûzbomba
+bûzelzáró
+bûzlik
+bûzlõ
+bûzös
+bûzöslazac
+bûzösség
+büdzsé
+büdös
+büdöske
+büdösség
+büfé
+bükk
+bükkfa
+bükköny
+bülbül
+büntet
+büntetendõ
+büntetendõen
+büntetendõnek
+büntetett
+büntethetõ
+büntethetõség
+büntetlen
+büntetlenség
+büntetlenül
+büntetés
+büntetése
+büntetések
+büntetéseket
+büntetési
+büntetésre
+büntetéssel
+büntetést
+büntetését
+büntetésül
+büntetõ
+büntetõjog
+büntetõjogi
+büntetõper
+bürokrata
+bürokratikus
+bürokrácia
+büszke
+büszkeség
+büszkeségtõl
+büszkeségén
+büszkeségét
+büszkeségük
+büszkélkedik
+büszkélkedve
+büszkélkedés
+büszkén
+büszkévé
+bütyköl
+bütykölés
+bütykös
+bütyök
+bütü
+bütüben
+bütüillesztés
+bütüzõ
+cactaceae-család
+cafat
+cafatos
+cafka
+cajgvászon
+cakk
+cakkos
+cakkoz
+cakkozott
+cakkozás
+cakumpakk
+cambridge-henger
+cambridge-i
+cammog
+cammogás
+cammogó
+candra
+capistráng
+cech
+cech?
+cedál
+cefetül
+cegél
+ceibafa
+cejgruha
+celebrálás
+cella
+cellonlakk
+cellulóz
+cellux
+celofán
+cement
+cement-befecskendezés
+cementabroncs
+cementez
+cementhabarcs
+cementkarika
+cementlé
+cementtel
+cementál
+cementálás
+cementáló
+cent
+centenárium
+centenáriumi
+centes
+centilis
+centralizáció
+centralizál
+centrifuga
+centrifugál
+centrifugális
+centrifugálás
+centrista
+centrum
+centíroz
+cenzor
+cenzori
+cenzúra
+cenzúrán
+cenzúrát
+cenzúráz
+cenzúrázzák
+cenzúrázás
+cenzúrázó
+cerberus
+ceremónia
+ceremóniamestere
+cerusszit
+ceruza
+ceruzabél
+ceruzahegy
+ceruzahegyezõ
+ceruzalámpa
+ceruzarajz
+ceruzarajzot
+ceruzatartó
+ceruzatoldó
+ceruzavég
+ceruzával
+cet
+cethalász
+cethalászhajó
+cetli
+cetvadász
+cetvelõ
+cezúra
+chilei
+chiliasta
+chiliaszta
+chiropraxis
+cianid
+cianózissal
+cibet
+cibethiéna
+cibál
+cica
+cicababa
+cicamica
+cicamosdás
+cicamosdást
+cici
+cicik
+cickány
+cicoma
+cicomás
+cicomátlan
+cicomázza
+cicus
+cidrizés
+cifra
+cifraság
+cifrán
+cifrázat
+cifrázzuk
+cifrázás
+cigaretta
+cigarettacsutka
+cigarettafajta
+cigarettanyomó
+cigarettaszünetet
+cigarettavég
+cigarettavég-szedegetõ
+cigarettám
+cigarettát
+cigarettát?
+cigarettázás
+cigi
+cigit!
+cigány
+cigányhal
+cigánykereket
+cigánypetrezselyem
+cigányélet
+cigányútra
+ciha
+cikcakk
+cikcakkban
+cikcakkos
+ciki
+cikis
+cikk
+cikkcakk
+cikkcakkban
+cikkek
+cikkely
+cikket
+cikknek
+cikkíró
+ciklikus
+ciklon
+ciklopropán
+ciklopsz
+ciklus
+ciklusos
+ciklust
+cikornya
+cikornyás
+cikornyásan
+cikornyáz
+cilinder
+cilinderbõl
+cimbalom
+cimbora
+cimborák!
+cimborákkal
+cimborálnak
+cimpa
+cincog
+cincogás
+cinege
+cingár
+cinikus
+cinikusan
+cinizmus
+cink
+cinke
+cinkel
+cinkelt
+cinkes
+cinket
+cinkez
+cinkezés
+cinkfehér
+cinkit
+cinkkel
+cinkkenõcs
+cinkklisé
+cinkmaratás
+cinkográfia
+cinkográfiai
+cinkos
+cinkosa
+cinkosként
+cinkostárs
+cinkoxid
+cinkpor
+cinkvirág
+cintányér
+cintárgy
+cionista
+cionizmus
+cipel
+ciprus
+ciprusfa
+ciprusliget
+ciprusültetvény
+cipzár
+cipzárat
+cipész
+cipészfonal
+cipó
+cipõ
+cipõfelsõrész
+cipõfényesítés
+cipõfénymáz
+cipõfûzõ
+cipõfûzõt
+cipõfüzõ
+cipõgyáros
+cipõhúzó
+cipõje
+cipõjét
+cipõkanál
+cipõkenõcs
+cipõkrém
+cipõorr
+cipõs
+cipõsarkú
+cipõszár
+cipõt
+cipõtalp
+cipõtisztító
+cipõvarró-fonal
+cipõvas
+cipõvel
+circulus
+ciripel
+ciripelés
+cirka
+cirkalmas
+cirkalmaz
+cirkalom
+cirkasszia
+cirkon
+cirkusz
+cirkuszolás
+cirkuszt
+cirkál
+cirkálás
+cirkáló
+cirmos
+cirpel
+cirpelõ
+cirógat
+cirógatás
+cirógató
+cisz
+ciszterna
+ciszternavagon
+citerázás
+citoplazma
+citoplazma-
+citrom
+citromfajta
+citromfajtát
+citromfû
+citromlé
+citromlébõl
+citromnyomó
+citromos
+citrusfa
+citrusfélék
+city
+civakodik
+civakodva
+civakodás
+civakodó
+civil
+civilizáció
+civilizál
+civilizálatlan
+civilizálatlanság
+civilizált
+civillista
+civódik
+civódás
+civódó
+civódós
+cizellál
+cizellált
+cizellálás
+clipper
+cocotte
+cocotte-ban
+code
+collage-készítõ
+colstok
+comb
+combcsont
+combcsonti
+combcsontmélyedés
+combközépig
+combtövi
+compó
+copf
+copfba
+cornwalli
+corpus
+corti-szerv
+coulé
+counsel
+covenant
+csacsi
+csacska
+csacskamadár
+csacsog
+csacsogás
+csahol
+csaholva
+csaholás
+csaj
+csajka
+csak
+csak!
+csakhamar
+csakis
+csaknem
+csakugyan
+csakugyan?
+csakúgy,
+csal
+csalafinta
+csalafintaság
+csalatkozhatatlan
+csalatkozhatatlanság
+csalfa
+csalfaság
+csalhatatlan
+csalhatatlannak
+csalhatatlanság
+csalhatatlanul
+csali
+csalimadár
+csalinger
+csalit
+csalitos
+csalja
+csalni
+csalogat
+csalogató
+család
+család-
+családanya
+családapa
+családban
+családból
+családfa
+családfõ
+családhoz
+családi
+családias
+családiasan
+családja
+családoknál
+családom
+családos
+családot
+családregény
+családtag
+családtagnak
+csalán
+csalánba
+csalánkiütés
+csalánnal
+csalánszövet
+csalárd
+csalárdság
+csalárdul
+csalás
+csalási
+csalétek
+csalétket
+csalétkül
+csaló
+csalódik
+csalódott
+csalódottság
+csalódás
+csalódást
+csalóka
+csap
+csapa
+csapadék
+csapadékra
+csapat
+csapata
+csapatba
+csapaterõsítéseket
+csapaterõsítésrõl
+csapatgyülekezés
+csapatkapitány
+csapatmunka
+csapatnak
+csapatok
+csapatokat
+csapatokból
+csapatot
+csapatszellem
+csapatszállító
+csapattest
+csapattiszt
+csapda
+csapdos
+csapdába
+csapdájába
+csapdát
+csapdával
+csapfészek
+csapfúró
+csapfûrész
+csaphajlat
+csapj
+csapja
+csapkod
+csapkodja
+csapkodás
+csapkodó
+csapkoszorús
+csapkötés
+csaplyuk
+csaplyukat
+csaplyukfúró
+csaplyukvésõ
+csapmélyedés
+csapnivaló
+csapnivalóan
+csapodár
+csapok
+csapol
+csapolt
+csapolva
+csapolás
+csapolással
+csapoló
+csapolóvályú
+csapong
+csapongva
+csapongás
+csapongása
+csapongó
+csapos
+csaposlegény
+csaposnõ
+csapot
+csapott
+csapozó
+csappal
+csappan
+csappantyú
+csapra
+csapszeg
+csapszegek
+csapszegekkel
+csapszeggel
+csapszáj
+csapszék
+csaptak
+csapváll
+csapvíz
+csapágy
+csapágyba
+csapágybélés
+csapágycsésze
+csapágyfém
+csapágyfészek
+csapágyház
+csapágypajzs
+csapágypersely
+csapágytest
+csapágyállvány
+csapás
+csapása
+csapásai
+csapásirány
+csapások
+csapásokkal
+csapásra
+csapással
+csapást
+csapásvonal
+csapáz
+csapó
+csapóajtó
+csapóajtós
+csapóasztal
+csapódeszka
+csapódik
+csapódás
+csapódó
+csapófedél
+csapórács
+csapósudár
+csapóülés
+csarab
+csarabos
+csarnak
+csarnakolás
+csarnakzat
+csarnok
+csarnokrész
+csaszi
+csat
+csata
+csatabárdot
+csatahajó
+csatakiáltás
+csatakiáltást
+csatakos
+csatangol
+csatangolás
+csatarend
+csatarendbe
+csatasor
+csatasorba
+csatatér
+csatavonal
+csatlakozik
+csatlakozni?
+csatlakoztatva
+csatlakozás
+csatlakozásnál
+csatlakozást
+csatlakozó
+csatlakozócsavar
+csatlakozódugasz
+csatlakozókábel
+csatlakozópont
+csatlakozóvég
+csatló
+csatlós
+csatol
+csatolt
+csatolás
+csatolásmentesítés
+csatolóhorog
+csatolószerkezet
+csatorna
+csatornafedõ
+csatornahálózat
+csatornaiszap
+csatornarész
+csatornaszem
+csatornatisztító
+csatornaválasztó
+csatornán
+csatornáz
+csatornázás
+csattan
+csattant
+csattanás
+csattanó
+csattanós
+csattintás
+csattog
+csattogott
+csattogtat
+csattogtatás
+csattogtató
+csattogás
+csattogása
+csattogó
+csatában
+csatár
+csatárok
+csatározik
+csatározás
+csatársor
+csatát
+csau
+csavar
+csavaralátét
+csavaranya
+csavarfogó
+csavargat
+csavargás
+csavargó
+csavargótanya
+csavargótábor
+csavargóúton
+csavargõzös
+csavarhajtó
+csavarhúzó
+csavarkulcs
+csavarmenet
+csavarmenetes
+csavarmenetet
+csavarmenetvágó
+csavarmetszés
+csavarodik
+csavarodás
+csavarodó
+csavarog
+csavarogva
+csavarorsó
+csavaros
+csavarosan
+csavaroz
+csavarral
+csavarszeg
+csavarszorító
+csavart
+csavarugrás
+csavarvonal
+csavarvonalas
+csavarvonalban
+csavarvágás
+csavarás
+csavaró
+csavarófa
+csaó!
+csecs
+csecsebecse
+csecsemõ
+csecsemõgondozó
+csecsemõhalandóság
+csecsemõkor
+csecsemõmirigy
+csecsemõtápszer
+csegely
+cseh
+csehország
+csehországi
+csehszlovák
+csehó
+csekk
+csekk-könyv
+csekkel
+csekket
+csekkfüzet
+csekkpénz
+csekkszámla
+csekkszámla-követelés
+csekély
+csekélyebb
+csekélység
+csekélységem
+csel
+cselbõl
+cselekedet
+cselekedete
+cselekedetek
+cselekedettõl
+cselekedetének
+cselekedj
+cselekedtél
+cselekmény
+cselekmények
+cselekszik
+cselekszik,
+cselekvés
+cselekvési
+cselekvésképtelenség
+cselekvõ
+cselekvõképesség
+cselekvõképességtõl
+cselekvõképtelen
+cselekvõképtelenség
+cselez
+cselezve
+cselezés
+cselfogás
+cselgáncs
+cselhez
+cselle
+csellel
+cselleng
+csellengés
+csellista
+cselló
+cselszövény
+cselszövés
+cselszövésen
+cselszövõ
+cselt
+cseléd
+cselédlány
+cselédszobában
+cselédség
+csembaló
+csemege
+csemegebolt
+csemegekukorica
+csemegeáru
+csemegeüzlet
+csemete
+csempe
+csempeborítás
+csempész
+csempészet
+csempészett
+csempészhajó
+csempészik
+csempészkereskedelmet
+csempészáru
+csempészés
+csempéz
+csempézõ
+csen
+csencsel
+csend
+csend!
+csendben
+csendes
+csendes,
+csendes-óceán
+csendes-óceáni
+csendesebben
+csendesen
+csendeskamra
+csendesség
+csendestárs
+csendesít
+csendet
+csendháborítás
+csendjében
+csendjén
+csendre
+csendít
+csendõr
+csendõrség
+csendõrtiszt-helyettes
+csendül
+csenevésszé
+csenevész
+cseng
+cseng-bong
+csengess!
+csenget
+csengetnek
+csengett
+csengettek
+csengettyû
+csengettyûszó
+csengetés
+csengetésre
+csengetést
+csengetõ
+csengés
+csengés-bongás
+csengésû
+csengõ
+csengõen
+csengõhúzó
+csengõkõ
+csengõszalag
+csengõt
+csengõzsinór
+csenés
+csepeg
+csepegtet
+csepegtetõ
+csepegtetõs
+csepegés
+csepegõ
+csepp
+cseppecske
+cseppenként
+cseppent
+cseppentél
+cseppet
+cseppfolyós
+cseppfolyósodik
+cseppfolyósodás
+cseppfolyóssá
+cseppfolyósít
+cseppfolyósítás
+cseppfolyósító
+cseppig
+cseppláng
+cseppnyi
+csepû
+csepûrágás
+csepût
+cserben
+cserbenhagy
+cserbenhagyott
+cserbenhagyás
+cserbenhagyásos
+csere
+cserebere
+csereberél
+csereberélget
+cserebogár
+cserebomlás
+cserediák
+csereeszköz
+csereforgalom
+cserekereskedelem
+cserekereskedelmet
+cserekereskedik
+cserekereskedés
+cserepes
+cseresznye
+cseresznyefa
+cseresznyelégy
+cseresznyepiros
+cseretárgy
+cserez
+csereérték
+csereüzlet
+cserfa
+cserfõzet
+cserje
+cserjékkel
+cserjés
+cserkesz
+cserkeszföld
+cserkész
+cserkészfiú
+cserkészik
+cserkészparancsnok
+cserkésztiszt
+cserkészés
+csermely
+csert
+cserzett
+cserzés
+cserzésû
+cserzõmûhely
+cserzõvarga
+cserébe
+cserében
+cserél
+cserélhetnék
+cserélhetõ
+cserélnek
+cserélés
+cserélõdik
+cserény
+cserénybe
+cserép
+cserépbe
+cserépbura
+cserépbödön
+cserépdarab
+cserépedény
+cserépkályha
+cserépszavazás
+cserépszavazással
+cseréptetõ
+cserépáru
+cserét
+cseszeget
+csetepaté
+csetepatézik
+csettentés
+csettint
+csettintés
+cseveg
+csevegve
+csevegés
+csevegõ
+csibe
+csibém
+csibész
+csibész!
+csibésznyelv
+csibészség
+csicsereg
+csicsergés
+csicsergõ
+csicseriborsó
+csicskás
+csicsás
+csiga
+csigaevõ
+csigafajta
+csigafordulat
+csigafúró
+csigaház
+csigakerék
+csigakerékhajtás
+csigalassúsággal
+csigalépcsõ
+csigamenet
+csigamû
+csigasor
+csigasor-felszerelés
+csigatárcsa
+csigavonal
+csigavonalakkal
+csigavonalat
+csigavonalban
+csigavonalú
+csigavérû
+csigolya
+csigolyája
+csigába
+csigás
+csigát
+csihipuhi
+csiki-csuki
+csikk
+csikkszedõ
+csiklandik
+csiklandoz
+csiklandozza
+csiklandozás
+csiklandozó
+csiklandó
+csiklandós
+csikló
+csikordul
+csikorgat
+csikorgatja
+csikorgatás
+csikorgás
+csikorgó
+csikorgós
+csikorgósan
+csikorgósság
+csikorog
+csikorogva
+csikó
+csikófogait
+csikófrizurára
+csikóhal
+csikós
+csikósként
+csilingel
+csilingelés
+csilingelõ
+csilipaprika
+csillag
+csillag-
+csillaga
+csillagfényes
+csillagfürt
+csillaggal
+csillaggá
+csillagjós
+csillagkerék
+csillagkép
+csillagköd
+csillagközi
+csillagocska
+csillagok
+csillagokkal
+csillagos
+csillagos-sávos
+csillagpor
+csillagszemû
+csillagszerû
+csillagszóró
+csillagvizsgálás
+csillagvizsgáló
+csillagvizsgálóhal
+csillagzat
+csillagász
+csillagászat
+csillagászattal
+csillan
+csillanás
+csillapodik
+csillapodj!
+csillapodása
+csillapul
+csillapít
+csillapítás
+csillapító
+csillapítólag
+csillapítótekercs
+csille
+csilleadagoló
+csillealváz
+csillebuktató
+csillefogó
+csillefék
+csillejárat
+csillekísérõ
+csillepálya
+csillesor
+csilletoló
+csilletávköz
+csillog
+csillogtatás
+csillogás
+csillogó
+csillogóan
+csillám
+csillámlik
+csillámlás
+csillámló
+csillámpala
+csillár
+csilláron
+csilléket
+csillés
+csimpánz
+csini
+csinibaba
+csinnadratta
+csinnadrattával
+csinos
+csinos,
+csinosan
+csinosság
+csinosítja
+csinosítsd
+csintalan
+csintalankodik
+csintalankodás
+csintalanság
+csinvat
+csinál
+csináld
+csináld!
+csinálj
+csinálja
+csináljak?
+csináljon
+csináljunk?
+csinálna
+csinálni
+csinálni!
+csinálnod
+csinálod
+csinálsz?
+csinált
+csinálta
+csináltam
+csináltam,
+csináltat
+csináló
+csip-csup
+csipa
+csipdes
+csipeget
+csipegetõ
+csipesz
+csipeszes
+csipet
+csipetke
+csipetnyi
+csipisz
+csipke
+csipke-
+csipke-alapkitöltés
+csipkebetét
+csipkebogyó
+csipkebokor
+csipked
+csipkedi
+csipkefinom
+csipkefüggöny
+csipkegallér
+csipkelõdik
+csipkelõdve
+csipkelõdés
+csipkelõdõ
+csipkeminta-részeket
+csipkemintázat
+csipkerózsa
+csipkerózsika
+csipkeszalag
+csipkeszerû
+csipketömeg
+csipkeverõ
+csipkeverõpárna
+csipkés
+csipkével
+csipkéz
+csipkézet
+csipkézett
+csipkézés
+csipog
+csipogás
+csipogó
+csipáját
+csipás
+csipásan
+csiricsáré
+csiripel
+csiripelte
+csiripelés
+csiripelõ
+csiriz
+csirizel
+csirizes
+csirke
+csirkecomb
+csirkefogó
+csirkefogó!
+csirág
+csiröge
+csiszol
+csiszolatlan
+csiszolatlanság
+csiszolt
+csiszoltság
+csiszolás
+csiszoló
+csiszolóanyag
+csiszológép
+csiszolópapír
+csiszolópor
+csiszát
+csitri
+csitt!
+csitt-csatt!
+csizma
+csizmája
+csizmáját
+csizmák
+csizmás
+csizmát
+csobog
+csobogás
+csoda
+csoda-
+csoda?
+csodabogár
+csodagyerek
+csodajel
+csodaország
+csodaszer
+csodatevõ
+csodatévõ
+csodák
+csodákat
+csodál
+csodálat
+csodálatos
+csodálatosan
+csodálatosképpen
+csodálatot
+csodálatra
+csodálattal
+csodálatában
+csodálkozik
+csodálkozva
+csodálkozás
+csodálkozástól
+csodálkozására
+csodálkozó
+csodáló
+csodálója
+csodás
+csodásan
+csodát
+csokifagyi
+csokoládé
+csokor
+csokornyakkendõ
+csomag
+csomagháló
+csomagkötözõ
+csomagmegõrzõ
+csomagol
+csomagolt
+csomagolás
+csomagoló
+csomagolóanyag
+csomagológép
+csomagolópapír
+csomagolóvászon
+csomagot
+csomagposta
+csomagszállító
+csomagtartó
+csomagért
+csombord
+csomor
+csomó
+csomóba
+csomóból
+csomócska
+csomómentes
+csomópont
+csomóponti
+csomóra
+csomós
+csomósodik
+csomósodás
+csomósít
+csomósítás
+csomót
+csomóz
+csomózású
+csonk
+csonka
+csonkakötél
+csonkakötél-húzószál
+csonkakúp
+csonkol
+csonkolás
+csonkít
+csonkítatlan
+csonkítás
+csont
+csontenyv
+csontfekete
+csontheg
+csonthártyaletoló
+csonthéjas
+csontja
+csontjai
+csontjaiban
+csontkamra
+csontkaparó
+csontkemény
+csontkeménységû
+csontkollekció
+csontliszt
+csontok
+csontomig
+csontos
+csontosan
+csontot
+csontrakó
+csontrendszer
+csontrák
+csontrészeg
+csontrészegre
+csontszáraz
+csontszén
+csontszövet
+csonttal
+csonttollú
+csonttá-bõrré
+csonttörés
+csonttürkiz
+csontvelõ
+csontváz
+csontváz-
+csontvázas
+csontvésõ
+csontú
+csontüszök
+csoport
+csoportba
+csoportja
+csoportkép
+csoportmunka
+csoportnyelv
+csoportokba
+csoportokra
+csoportonként
+csoportos
+csoportosan
+csoportosul
+csoportosulás
+csoportosít
+csoportosítatlan
+csoportosított
+csoportosítás
+csoportozat
+csoportterápia
+csoportvezetõ
+csorba
+csorbulás
+csorbát
+csorbátlan
+csorbít
+csorbítja
+csorbító
+csorda
+csordultig
+csordás
+csorgott
+csorgás
+csorgó
+csorog
+csoroszlya
+csoszog
+csoszogva
+csoszogás
+csoszogó
+csotrogány
+csucsor
+csuda
+csuhás
+csuk
+csuka
+csuklik
+csuklya
+csuklyás
+csuklás
+csukló
+csuklócsap
+csuklógyakorlat
+csuklókötõ
+csuklópántos
+csuklórudazatos
+csuklós
+csuklóspánt
+csukott
+csukva
+csukából
+csukódik
+csukóka
+csupa
+csupasszá
+csupasz
+csupaszoló
+csupaszárny
+csupaszított
+csupán
+csurgó
+csurgókõ
+csurgóval
+csurog
+csuromvizes
+csuromvizesen
+csuromvíz
+csusszanás
+csuszamlás
+csuszka
+csutak
+csutakolás
+csutka
+csutora
+csáb
+csábfürt
+csábos
+csábászfürt
+csábít
+csábítás
+csábítása
+csábító
+csábítóan
+csáklya
+csáklyázó
+csákánnyal
+csákány
+csákányos
+csákányozással
+csákányozó
+csákányütésekkel
+csákó
+csámcsogva
+csámcsogás
+csámcsogó
+csánk
+csánkpók
+csáp
+csápú
+csárda
+császkál
+császár
+császári
+császárkörte
+császármetszés
+császárnak,
+császárné
+császárszakáll
+császárzsemle
+császáré
+csáva
+csávába
+csávában
+csávában!
+csávából
+csáváz
+csávó
+csélcsap
+csép
+csépel
+csépelés
+cséphadaró
+cséplés
+cséplõ
+cséplõgép
+cséplõhely
+csépszalag
+csér
+csésze
+csészealakú
+csészealj
+csészényi
+csészét
+cséve
+csévefonal
+csévehüvely
+csévélõ
+csévélõdik
+cséza
+csík
+csíkokra
+csíkolt
+csíkos
+csíkosra
+csíkot
+csíkoz
+csíkozott
+csín
+csínja-bínja
+csínján
+csínját-bínját
+csíny
+csínyt
+csínytevései
+csínytevéseirõl
+csíp
+csípd
+csípi
+csípte
+csíptet
+csíptetõ
+csíptetõs
+csípve
+csípés
+csípéstõl
+csípõ
+csípõ-
+csípõbõség
+csípõcsont
+csípõficam
+csípõfogó
+csípõjû
+csípõre
+csípõs
+csípõsen
+csípõssé
+csípõsség
+csípõszorító
+csípõvas
+csíra
+csíra-
+csírafolt
+csíramentesítés
+csírasejt
+csíraszem
+csíraölõ
+csírában
+csírájában
+csírátlanít
+csírátlanítás
+csírázik
+csíráztat
+csíráztató
+csírázás
+csíz
+csíziót
+csók
+csók-
+csóka
+csókol
+csókolgat
+csókolás
+csókolódzik
+csókolódzás
+csókolózik
+csókolózás
+csókot
+csókálló
+csónak
+csónakbérbeadó
+csónakcsáklya
+csónakdaru
+csónakfelügyelõ
+csónakház
+csónakon
+csónakot
+csónakról
+csónaktartó
+csónakázik
+csónakázni
+csónakázás
+csónakázó
+csónaképítõ
+csónakõr
+csónakülés
+csór
+csórás
+csóró
+csótány
+csóvál
+csóválja
+csóválás
+csõ
+csõbarométer
+csõbe
+csõbevezetés
+csõbilincs
+csõburkolat
+csõcsatlakozás
+csõcselék
+csõcselék-
+csõcsonk
+csõd
+csõdbe
+csõdbejelentés
+csõdindítvány
+csõdjük
+csõdkérelem
+csõdnyitás
+csõdnyitási
+csõdtömeggondnok
+csõdtömeggondnokság
+csõdör
+csõdöt
+csõdül
+csõdület
+csõelágazó
+csõfejelõ
+csõfektetõ
+csõhálózat
+csõillesztés
+csõkapcsoló
+csõkulcs
+csõkígyó
+csõkötés
+csõkötõ
+csõköz
+csõkút
+csõlíra
+csõposta
+csõpréselés
+csõpánt
+csõr
+csõrakat
+csõrkáva
+csõrös
+csõröspohár
+csõrû
+csõsajtó
+csõsatu
+csõszorító
+csõtok
+csõtoldat
+csõtorkolat
+csõtészta
+csõvezeték
+csõvezetõ
+csõvég
+csõág
+csöbör
+csöcs
+csökevény
+csökken
+csökkennek
+csökkent
+csökkenteni
+csökkentett
+csökkenthetõ
+csökkenti
+csökkents!
+csökkentés
+csökkentése
+csökkentõ
+csökkenés
+csökkenése
+csökkenõ
+csökkenõben
+csökönyös
+csökönyös,
+csökönyösen
+csökönyösködik
+csökönyösség
+csömör
+csömöszöl
+csömöszölõ
+csöndben!
+csöndesség
+csöngettek
+csöngés
+csöngõ
+csöpp
+csöppnyi
+csöppszámláló
+csöppség
+csöpög
+csöpögtet
+csöpögve
+csöpögés
+csöpögõ
+csöpögõs
+csörfös
+csörgedezik
+csörgedeztetõ
+csörgedezés
+csörget
+csörgés
+csörgõ
+csörgõdob
+csörgõkígyó
+csörgõs
+csörgõsipka
+csörgõvadkacsa
+csörlõ
+csörlõdob
+csörlõs
+csörlõvel
+csörren
+csörrent
+csörte
+csörtet
+csörög
+csörögve
+csörömpöl
+csörömpöltet
+csörömpölve
+csörömpölés
+csörömpölõ
+csöve
+csövek
+csöves
+csövesedik
+csövezik
+csövezés
+csövön
+csövû
+csúccsal
+csúcs
+csúcsa
+csúcsban
+csúcsdivat
+csúcsdísze
+csúcsesztergapad
+csúcsforgalmi
+csúcsforgalom
+csúcsfény
+csúcsfények
+csúcshajtás
+csúcsig
+csúcsmagasság
+csúcsos
+csúcsot
+csúcspont
+csúcspontját
+csúcsrügy
+csúcsszög
+csúcstalálkozó
+csúcsteljesítmény
+csúcsterhelés
+csúcsvitorla
+csúcsvállalat
+csúcsárboc
+csúcsárbocon
+csúcsát
+csúcsérték
+csúcsív
+csúcsíves
+csúf
+csúffá
+csúfnév
+csúfol
+csúfolni
+csúfolás
+csúfolódik
+csúfolódás
+csúfolódó
+csúfos
+csúfosan
+csúfot
+csúfsága
+csúnya
+csúnyaság
+csúnyácska
+csúnyán
+csúszda
+csúszik
+csúszik-mászik
+csúszka
+csúszkál
+csúszkálva
+csúszkáló
+csúszott
+csúsztat
+csúsztatható
+csúsztató
+csúsztatógyûrû
+csúszás
+csúszásának
+csúszó
+csúszó-mászó
+csúszógyûrû
+csúszómászó
+csúszómászó-szerû
+csúszópálya
+csúszópénz
+csúszórész
+csúszós
+csúszószán
+csúszószánja
+csúszósín
+csúszótalp
+csúz
+csúzban
+csúzli
+csúzos
+csûr
+csûr-csavar
+csûrbe
+csûri-csavarja
+csûrés-csavarás
+csûrõlap
+csücske
+csücskös
+csücsökkötelét
+csücsül
+csüdszõrzet
+csüdízület
+csügged
+csüggedetlen
+csüggedj!
+csüggedt
+csüggedten
+csüggedtnek
+csüggedtség
+csüggedés
+csüggedésnek
+csüggeszt
+csüggesztõ
+csüggesztõen
+csüggeteg
+csülleng
+csülök
+csüng
+csüngõ
+csürhe
+csütörtök
+csütörtökig
+csütörtökönként
+csütörtököt
+cucc
+cucca
+cucli
+cuclisüveg
+cuclisüvegen
+cudar
+cukkol
+cukor
+cukorba
+cukorban
+cukorbevonat
+cukorból
+cukorgyári
+cukorjuhar
+cukorka
+cukorkabolt
+cukorkák
+cukormáz
+cukormázzal
+cukornád
+cukorral
+cukorrépa
+cukorszóró
+cukortalanít
+cukortartó
+cukra
+cukros
+cukrot
+cukrozd
+cukrozott
+cukrász
+cukrászat
+cukrászda
+cukrászkülönlegesség
+cukrászsütemény
+cumi
+cuppan
+cuppant
+cuppantás
+cuppanás
+cuppanása
+cuppanós
+cuppog
+cuppogás
+cuppogó
+curry
+currys
+curryvel
+cvikker
+cvikli
+cáfol
+cáfolat
+cáfolhatatlan
+cáfolhatatlanul
+cáfoló
+cájg
+cápa
+cár
+cécó
+cédrusfa
+cédrusfenyõ
+cédula
+cédulagyûjtemény
+cédulakatalógus
+cédulát
+céduláz
+cég
+cégbíróság
+cégen
+céget
+cégjegyzék
+cégjegyzéki
+cégjegyzés
+cégjelzés
+cégkártya
+cégnél
+cégnév
+cégszerû
+cégtábla
+cégér
+céh
+céhtag
+cékla
+cél
+célba
+célbavétel
+célból
+célból,
+célból...
+célból?
+célegyenes
+célfekete
+célfelderítés
+célgömb
+célhoz
+célig
+célja
+célja,
+célja?
+céljait
+céljuk
+céljából
+céljára
+célját
+célkitûzés
+célkitûzésüket
+célkövetõ
+céllal,
+céllövészet
+céllövõ
+célnak
+célnál
+célod?
+célokat
+célon
+céloz
+célozgat
+célozgatás
+célpont
+célponton
+célpontot
+célpontra
+célra
+célravezetõ
+célrepülés
+célrepülõgép
+célszalag
+célszalagot
+célszerû
+célszerûen
+célszerûnek
+célszerûség
+célszerûtlen
+célszerûtlenül
+célt
+céltalan
+céltalanság
+céltalanul
+céltudatos
+céltudatosan
+céltudatosság
+céltábla
+céltáblája
+céltól
+céltûz
+célvagyon
+célvagyonrendelés
+célvázlat
+célzatos
+célzatosság
+célzok
+célzol?
+célzott
+célzsák
+célzás
+célzások
+célzást
+célzó
+célállomás
+célállomási
+célú
+cérna
+cérnahang
+cérnahangocska
+cérnázott
+cézár
+cézári
+cím
+címe
+címeken
+címen
+címen?
+címer
+címere
+címernegyed
+címerpajzs
+címerpólya
+címerrel
+címet
+címez
+címezve
+címfej
+címirat
+címke
+címkekészítõ
+címkét
+címkével
+címkéz
+címkézés
+címlap
+címlet
+címmel
+címoldal
+címrajz
+címsor
+címszerep
+címszó
+címszöveg
+címtábla
+címtár
+címzetes
+címzetlen
+címzett
+címzés
+címzése
+cókmók
+cölöp
+cölöpfal
+cölöpfej-toldás
+cölöpgát
+cölöpkerítés
+cölöpmû
+cölöpsorokkal
+cölöpveréshez
+cölöpverõ
+cölöpverõgép
+cölöpverõkos
+cölöpépítmény
+cölöpöz
+cölöpözés
+cönk
+cövek
+cövekbeverés
+cövekel
+cúgos
+d-hez
+dac
+dacol
+dacolva
+dacos
+dacosan
+dacára
+dada
+dadog
+dadogás
+dadogós
+dagad
+dagadozott
+dagadt
+dagadás
+dagadó
+daganat
+dagaszt
+dagasztó
+dagi
+dagonya
+dagály
+dagálymérce
+dagályos
+dagályosan
+dagályosság
+dajka
+dajkabér
+dajkamese
+dajkamese!
+dajkaság
+dajkaságba
+dajkál
+daják
+dakszli
+dal
+dalciklus
+daljáték
+dalkör
+dallam
+dallamos
+dallamosan
+dallamossá
+dallamtalan
+dalnok
+dalocska
+dalok
+dalol
+dalolt,
+dalolás
+daloló
+dalos
+dalszöveg
+dalszöveg-jelölési
+dalszövegíró
+dalt
+damaszkuszi
+damil
+dandár
+dandártábornok
+danúbia
+dara
+darab
+darabba
+darabban
+darabbérben
+darabból
+darabig
+darabja
+darabjai
+darabjainak
+darabjaira
+darabjait
+darabka
+darabkák
+darabmunka
+darabméret
+darabnak
+darabok
+darabokat
+darabokra
+darabol
+darabonként
+darabos
+darabosan
+darabosít
+darabot
+darabszám
+darabszámra
+darabtól
+darabáruk
+darabáruként
+darakeverék
+darakorpa
+daraszerû
+daraszén
+daratisztító
+darazsaktól
+daru
+daru-futómacska
+darucsörlõ
+darufutó-macska
+darugerenda
+darugém
+daruhíd
+darukar
+daruval
+darál
+darált
+darálás
+daráló
+darálógép
+darázs
+darázsderék
+darázsfészek
+darázsszerû
+daróc
+datolya
+dauer
+dauerolt
+daueroltat
+dauervíz
+de!
+debütál
+debütáns
+decentralizáció
+decentralizálás
+dedikáció
+dedikál
+dedikálás
+dedukció
+defekt
+defektet
+defektje
+defekáció
+defenzív
+defenzíva
+defenzívában
+deferál
+deficit
+deficitje
+definiál
+definíció
+deflektor
+deflorál
+deflorálás
+defláció
+deflációs
+deflál
+defoliáns
+deformans
+deformált
+deformáltság
+deformálódik
+degeneráció
+degenerál
+degenerált
+degeneráltság
+degenerálódik
+degenerálódás
+degeszre
+dehidratizál
+dehidratizálás
+dehidratál
+dehidratálás
+dehidrogénez
+dehidrogénezés
+dehidráció
+dehidrál
+dehidrálás
+dehogy
+dehogy!
+dehogyis
+dekadencia
+dekadens
+dekantál
+dekantálás
+dekkol
+deklarál
+deklasszálódik
+deklináció
+deklinációs
+dekoltázs
+dekompressziós
+dekonjunktúra
+dekoratív
+dekoráció
+dekorációs
+dekrétum
+dekóder
+dekódol
+dekódolás
+dekódoló
+dekórum
+delegáció
+delegál
+delejez
+delektrikum
+delektálás
+delel
+delelés
+delet
+deleál
+delfin
+delirál
+delizsánsz
+delta
+deltaizom
+deltatorkolat
+deltás
+delén
+delírium
+demagóg
+demagógia
+demarkációs
+demencia
+demo
+demodulálás
+demográfia
+demográfiai
+demokrata
+demokratikus
+demokratizál
+demokrácia
+demonstráció
+demonstrátor
+dendi
+dendrit
+denevér
+denunciál
+denunciáns
+deponál
+deportál
+deportált
+deportálás
+depresszió
+depresszióban
+depressziós
+deprimál
+deprimáltság
+depó
+derce
+dereglye
+dereglyén
+dereglyés
+dereka
+derekas
+derekasan
+derekat
+derekán
+derekára
+derekát
+derekú
+dereng
+derengeni
+derengés
+derengésbõl
+derengõ
+deres
+deresre
+derivált
+deriválás
+derma
+dermed
+dermedt
+dermedten
+dermedtség
+dermedési
+dermeszt
+dermesztõ
+dermesztõen
+dervis
+derék
+derék!
+derékba
+derékban
+derékbõség
+derékig
+derékméret
+derékon
+derékrész
+derékrésze
+derékszalag
+derékszíj
+derékszög
+derékszögben
+derékszöget
+derékszögmérõ
+derékszögvonalzó
+derékszögû
+derékszögûre
+deréktól
+derékvonal
+derékzsába
+derékzsábás
+derít
+derített
+derítés
+derítõ
+derítõanyag
+derítõedény
+derítõföld
+derítõgép
+derítõkád
+derítõkészülék
+derítõtartály
+derítõtavas
+derítõtelep
+derû
+derûlátás
+derûlátó
+derûs
+derûsebbé
+derûsen
+derûssé
+derûsség
+derût
+derül
+derült
+derültség
+derültséget
+despota
+desszert
+deszant
+deszka
+deszka-közfal
+deszkaburkolat
+deszkaburkolattal
+deszkadarabok
+deszkakerítés
+deszkalap
+deszkapadló
+deszkaválaszfal
+deszkaágy
+deszkák
+deszkát
+deszkával
+deszkáz
+deszkázat
+deszkázás
+deszkázó
+desztilláció
+desztillál
+desztilláló
+desztillátum
+detektoros
+detektálás
+detektív
+detektívregény
+detergens
+determinizmus
+determináns
+detonáció
+detto
+dettó
+dettójel
+deutérium
+devalváció
+devalvál
+devalválás
+devalválódik
+deviza
+devizaengedély
+devizaközpont
+deviáns
+dezertál
+dezertálás
+dezertálásra
+dezintegrátor
+dezodor
+deákflastrom
+dia
+diadal
+diadalemlék
+diadalittas
+diadalittasan
+diadalittasság
+diadalmas
+diadalmasan
+diadalmaskodik
+diadalmaskodva
+diadalmaskodás
+diadalmaskodó
+diadalmenet
+diadalmenetet
+diadalmámor
+diadalt
+diadalének
+diadém
+diafilm
+diafilmcsík
+diafragma
+diagnózis
+diagonál
+diagonális
+diagram
+diagram-papír
+diagrampapír
+diagramszerû
+diakeret
+diakonissza
+diakritikus
+diakónus
+dialektikus
+dialektus
+dialógus
+diapozitív
+diaszpóra
+diavetítõ
+diaváltó
+dica
+dicsekedõ
+dicsekszik
+dicsekvés
+dicsekvõ
+dicsfénnyel
+dicsfény
+dicshimnusz
+dicshimnuszokat
+dicstelen
+dicsér
+dicséret
+dicséretes
+dicséretet
+dicséretre
+dicsérettel
+dicséretét
+dicséri
+dicsérni
+dicsérés
+dicsérõ
+dicsõ
+dicsõség
+dicsõsége
+dicsõséges
+dicsõséget
+dicsõségre
+dicsõít
+dicsõítés
+dicsõítõ
+didaktika
+didaktikus
+didaktikusan
+didereg
+didergés
+didergõ
+didergõs
+didi
+didik
+didkó
+dielektromos
+dietetika
+differenciák
+differenciál-kereszt
+differenciálhányados
+differenciálhányadosa
+differenciális
+differenciálmû
+differenciálszámítás
+differenciálás
+diffrakció
+diffrakció-sáv
+diffrakciós
+diffundál
+diffundálás
+diffuzõr
+diffuzõrberendezés
+diffúz
+diffúzió
+diffúziós
+diffúzor
+diftéria
+diftériás
+digitális
+dignitárius
+digresszió
+digó
+dikciózik
+dikromát
+dikrómsav
+diktatórikus
+diktatúra
+diktál
+diktálja
+diktált,
+diktálás
+diktátor
+dilatáció
+dilemma
+dilemmában
+dilettáns
+dili
+diliház
+diliházba
+dilije
+dilinyós
+dilinós
+dilis
+dilisen
+dilisség
+dilizik
+dimbes-dombos
+dimenziós
+dinamikai
+dinamikus
+dinamizmus
+dinamó
+dinasztia
+dingi
+dingy
+dinka
+dinnye
+dinoszaurusz
+dinsztel
+dinsztelt
+diopter
+dioptométer
+dioptria
+dioptrikus
+dioptriás
+dioxi-borostyánkõsav
+diploma
+diplomamunka
+diplomaosztó
+diplomata
+diplomatatáska
+diplomaterv
+diplomatikus
+diplomatikusan
+diplomáciai
+diplomás
+diplomások
+diplomát
+diplópia
+diptichon
+dipól
+dipólnyomaték
+dipólus
+dipólusmomentum
+direkt
+direktrix
+direktíva
+direktórium
+diskurál
+disszenter
+disszertáció
+disszidens
+disszidál
+disszidálás
+disszimilációs
+disszociáció
+disszociálás
+disszonancia
+disszonáns
+diszharmonikus
+diszharmónia
+diszkontál
+diszkoszvetés
+diszkrecionális
+diszkrimináció
+diszkréció
+diszkrét
+diszkréten
+diszkurzív
+diszkvalifikál
+diszkvalifikálás
+diszkó
+diszleksziás
+disznó
+disznó-
+disznóbab
+disznóbõr
+disznócsülök
+disznódagadó
+disznóhizlaló
+disznóhús
+disznólkodás
+disznóláb
+disznópásztor
+disznósajt
+disznószerû
+disznóság
+disznót
+disznózsír
+disznóól
+diszpenzáció
+diszperzió
+diszponált
+diszpozíció
+diszpécser
+disztichon
+disztribúció
+disztális
+divat
+divatba
+divatban
+divatbáb
+divatból
+divatdiktátor
+divathõs
+divatjamúlt
+divatkellékek
+divatkreáció
+divatmajom
+divatnak
+divatos
+divatosan
+divatosság
+divatrajongó
+divatszínekben
+divatáru
+divatékszer
+divatú
+diverzitás
+diák
+diákbál
+diákfiú
+diáklány
+diáklány-egyesület
+diákmenza
+diáknyelv
+diákotthon
+diákszerelem
+diákszálló
+diákszövetség
+diákság
+diákélet
+diákévek
+diéta
+diétaspecialista
+diétára
+diétás
+diétát
+diétázik
+diétázni
+dió
+dióban
+dióbél
+diófa-erezet
+dióhéj
+dióhéjban
+diós
+diószedés
+diószén
+diótörõ
+dióverés
+dióízû
+dob
+dobbal
+dobban
+dobbant
+dobbantás
+dobbanás
+dobbõr
+dobhártya
+dobhártyaüreg
+dobja
+dobkályha
+dobkötél-horony
+dobog
+dobogott
+dobogva
+dobogás
+dobogó
+dobogókõ
+dobol
+dobolás
+dobos
+dobosgalamb
+dobot
+dobott
+doboz
+dobozba
+dobozhoz
+doboznak
+dobozol
+dobozolás
+dobozos
+dobpergés
+dobrosta
+dobszita
+dobva
+dobál
+dobálja
+dobálva
+dobálás
+dobálódzik
+dobálódzás
+dobás
+dobásra
+dobó
+dobó-
+dobódva
+dobóhorgászásra
+dobójátékos
+dobókocka
+dobókorong
+dobószámok
+dobótávolság
+dobüreg
+dobütés
+docens
+dodzsem
+dodó
+dog
+dogma
+dogmatika
+dogmatikus
+dohog
+dohos
+dohosság
+dohány
+dohányfüstös
+dohánylevél
+dohánylevélcsomó
+dohányos
+dohánytekercs
+dohánytripsz
+dohánytömb
+dohányzik
+dohányzás
+dohányzással
+dohányzást
+dohányzó
+dohányzóasztal
+doki
+dokk
+dokkba
+dokkmunkás
+dokkol
+doktor
+doktora
+doktori
+doktorod
+doktorrá
+doktorátus
+doktriner
+doktrína
+dokumentum
+dokumentumfilm
+dokumentumgyûjtemény
+dokumentáció
+dokumentációs
+dokumentál
+dolcsi
+dolga
+dolgai
+dolgaid?
+dolgaidról
+dolgairól
+dolgait
+dolgavégezetlenül
+dolgod
+dolgod,
+dolgod?
+dolgodban
+dolgok
+dolgok!
+dolgok?
+dolgokat
+dolgokat,
+dolgokba
+dolgokban
+dolgokból!
+dolgokkal
+dolgokon
+dolgokról
+dolgom
+dolgom!
+dolgon
+dolgos
+dolgot
+dolgot!
+dolgot?
+dolgoz
+dolgozat
+dolgozatot
+dolgozik
+dolgozik,
+dolgozni
+dolgozott
+dolgoztam,
+dolgoztat
+dolgozunk
+dolgozó
+dolgozószoba
+dolgába
+dolgában
+dolgához
+dolgát
+dolgával
+dollár
+dollárba
+dollárbankjegy
+dollárra
+dollárral
+dollárt
+dolog
+dolog!
+dolog,
+dolog?
+dologba
+dologban
+dologgal
+dologhoz
+dologház
+dologi
+dologkerülés
+dolognak
+dologra
+dologtalan
+dologtalanság
+dologtalanul
+dolomit
+domb
+dombja
+dombnyúlvány
+dombocska
+dombok
+dombor-
+dombormû
+dombormûvel
+dombormûves
+dombormûvesen
+dombormûvet
+dombormûvû
+dombornyomás
+dombornyomásos
+dombornyomást
+dombornyomású
+domborodik
+domborodás
+domborszövésû
+domborulat
+domborzat
+domborzati
+domborít
+domborított
+domborítás
+domború
+domborúra
+domborúság
+domborúvá
+dombos
+dombtetõ
+domesztikált
+dominancia
+dominikánus
+dominál
+domináló
+domináns
+dominó
+dominójáték
+dominókocka
+dominókockák
+dominókõ
+dominózik
+dominózás
+domolykó
+domonkosrendi
+domén
+domínium
+dong
+donga
+dongaboltozat
+dongahajtás
+dongaláb
+dongával
+dongó
+donor
+dopping
+doppingol
+doppingszer
+doppingvizsgálat
+dorbézol
+dorbézolás
+dorbézoló
+dorgál
+dorgálás
+dorgálásban
+dorombol
+dorombolás
+dorong
+dorongút
+doroszol
+dorozmál
+dorozsmál
+dosszié
+dotáció
+dotációja
+dotálás
+douglas
+dragonyos
+dragonyosok
+dragóner
+dramatizál
+drapp
+drapéria
+drasztikus
+drasztikusan
+dratva
+drinápolyi
+drog
+drogok
+drogélmény
+drogéria
+dromedár
+drozofilia
+drukker
+drukkol
+drága
+drágakõ
+drágakõutánzat
+drágakõvésés
+drágaság
+drágicám
+drágább
+drágám
+drágám!
+drágán
+drákói
+dráma
+drámai
+drámaian
+drámaírás
+drámaíró
+drámaírói
+dréncsõ
+drót
+drót-
+drótakadály
+drótakadályok
+drótbetétes
+drótból
+drótfogó
+dróthuzal
+drótháló
+dróthálóval
+drótkerítéssel
+drótkötél
+drótkötélpálya
+drótnélküli
+dróton
+drótostót
+drótot
+drótozott
+drótra
+drótszerû
+drótszõrû
+drótsövénnyel
+drótvágó
+drótvég
+dubiózus
+dublé
+dublõz
+duda
+dudor
+dudorodás
+dudoros
+dudva
+dudvától
+dudák
+dudál
+dudálni
+dudálás
+dudás
+duett
+dug
+dugasz
+dugaszalj
+dugaszban
+dugaszhely
+dugaszol
+dugaszolás
+dugaszoló
+dugattyú
+dugattyúagy
+dugattyúfej
+dugattyúfenék
+dugattyúrúd
+dugattyús
+dugattyúvég
+duggat
+dugig
+dugja
+dugong
+dugulj
+dugult
+dugulás
+dugulása
+dugulást
+dugvány
+dugványoz
+dugába
+dugás
+dugó
+dugóhúzó
+dugós
+dugószagú
+dugót
+dugóval
+dugóízû
+duhaj
+duhajság
+dukkozólakk
+dukkóz
+dukkózó
+dulakodik
+dulakodás
+dum-dum
+dum-pálma
+duma
+dumcsizik
+dummy
+dumából!
+dumája
+dumájú
+dumál
+dumálgat
+dumálás
+dumás
+dumát
+dundi
+dunsztom
+dunsztos
+dunyha
+dupla
+duplacsövû
+duplaszövésû
+duplex
+duplexel
+duplikát
+duplikátot
+duplikátum
+duplája
+duplán
+duralumínium
+durchmarsot
+durcás
+durcásan
+durcáskodik
+durcásság
+durhami
+durmol
+durr!
+durran
+durrant
+durranás
+durranó
+durranó-
+durrdefekt
+durva
+durvaszövésû
+durvaság
+durván
+durvává
+dutyi
+dutyiban
+duzzad
+duzzadt
+duzzadás
+duzzadó
+duzzanat
+duzzaszt
+duzzasztott
+duzzasztás
+duzzasztó
+duzzasztógát
+duzzog
+duzzogva
+duzzogás
+duzzogó
+dzseki
+dzsem
+dzsentri
+dzsessz
+dzsessz-stílusban
+dzsessz-szerû
+dzsessz-szóló
+dzsesszegyüttes
+dzsesszfajta
+dzsesszklub
+dzsesszt
+dzsesszzenekar
+dzsigg
+dzsiggel
+dzsiggelés
+dzsiggelõ
+dzsigget
+dzsinn
+dzsip
+dzsiu-dzsicu
+dzsungel
+dzsunka
+dzsóker
+dzsömper
+dákoska
+dákó
+dália
+dáma
+dámajáték
+dámának
+dán
+dárda
+dárdajáték
+dárdanyél
+dárdaszerû
+dárdavivõ
+dárdás
+dárdával
+dáridó
+dáridót
+dáridózik
+dáridózás
+dáridózó
+dátum
+dédelget
+dédelgetett
+dédelgetés
+dédelgetõ
+dékán
+dékánhelyettes
+dél
+dél-afrikai
+dél-amerikai
+délben
+délebéd
+délelõtt
+délelõtti
+délelõttöt
+déli
+déli-sark
+délibáb
+délibábos
+délidõ
+délkör
+délkörön
+délnek
+délnyugat
+délnyugati
+délnyugatra
+délnyugatról
+délre
+délrõl
+délszaki
+déltájban
+délután
+délutáni
+délutánja
+démon
+dér
+dérrel-dúrral
+dévaj
+dévajkodik
+dévajkodás
+dévajság
+dévajul
+dévérkeszeg
+dézsa
+dézsma
+dézsmál
+dézsmálás
+dézsába
+dézsából
+dézsányi
+díj
+díjat
+díjaz
+díjazatlan
+díjazott
+díjazás
+díjazásban
+díjjal
+díjmentesen
+díjnok
+díjnyertes
+díjra
+díjrészlet
+díjszabás
+díjszabással
+díjtalan
+díjtalanul
+díjtétel
+díjügylet
+dínomdánom
+dísszel
+dísz
+dísz-
+díszben
+díszcsat
+díszcsempe
+díszcserje
+díszcserép
+dísze
+díszebéd
+díszebédet
+díszegyenruhában
+díszekkel
+díszeleg
+díszelvonulás
+díszemlék
+díszes
+díszesség
+díszfogat
+díszgomb
+díszhintó
+díszkivilágítás
+díszkoporsó
+díszkíséret
+díszlet
+díszletezõ
+díszléc
+díszlépés
+díszlövés
+díszlövést
+díszmûáru
+díszpárna
+díszruha
+díszruhába
+díszruhában
+díszszemle
+díszszemlét
+dísztelen
+dísztelenség
+díszterem
+dísztoll
+dísztornyocska
+dísztábla
+dísztárcsa
+dísztárgy
+dísztárgyak
+dísztér
+dísztû
+díszvacsora
+díszvakolat
+díszágy
+díszállat
+díszít
+díszítetlen
+díszített
+díszítmény
+díszítmények
+díszítés
+díszítése
+díszítõ
+díszítõcérna
+díszõrség
+díszöltözet
+díszünnepély
+dívik
+dívány
+díványrugó
+dízelmozdony
+dóm
+dóma
+dór
+dózer
+dõl
+dõlt
+dõlve
+dõlés
+dõlése
+dõlési
+dõlésmutató
+dõlésszög
+dõlésû
+dõreség
+dõzsöl
+dõzsölés
+dõzsölõ
+döbbenetes
+döbbent
+döcög
+döcögtet
+döcögõ
+döcögõs
+döf
+döfi!
+döfköd
+döfés
+döfõ
+dög
+dögcédula
+dögevõ
+dögfáradt
+döggyapjú
+döglesztõ
+dögletes
+dögnyúzó
+dögunalom
+dögvész
+dögvészes
+dögölj
+dögölve
+dögönyöz
+dögös
+dölyf
+dölyfös
+dölyfösen
+dölyfösség
+dömper
+dömping
+dömpingel
+dömpingelve
+dömpingexportot
+dömpingár
+dönget
+döngeti
+döngicsél
+döngve
+döngés
+döngõ
+döngöl
+döngölt
+döngölõ
+dönt
+dönteni
+dönteni,
+döntetlen
+döntetlenre
+döntetlent
+döntetlenül
+dönts,
+döntvény
+döntvénytár
+döntés
+döntése
+döntéshozatal
+döntéshozó
+döntésig
+döntésre
+döntést
+döntésének
+döntõ
+döntõbíráskodás
+döntõbíró
+döntõbírói
+döntött
+dördülés
+dörej
+dörgedelmes
+dörgés
+dörgést
+dörgõ
+dörgöl
+dörgölõdzik
+dörgölõzik
+dörmög
+dörmögés
+dörmögõ
+dörrenés
+dörzskesztyû
+dörzspapír
+dörzstárcsás
+dörzstörülközõ
+dörzsár
+dörzsöl
+dörzsölgeti
+dörzsölt
+dörzsölés
+dörzsölõ
+dörzsölõdés
+dörög
+dörögve
+dörömböl
+dörömbölve
+dörömbölés
+dúc
+dúcfa
+dúcgerendát
+dúcnak
+dúcol
+dúcolt
+dúcolás
+dúcsüveg
+dúdol
+dúl-fúl
+dúlva
+dúló
+dúr
+dús
+dúsan
+dúsgazdag
+dúslakodó
+dústermék
+dúsít
+dúsított
+dúsítás
+dúsító
+dûl
+dûlõ
+dûlõre
+dûlõút
+dûne
+dübörög
+dübörögve
+düftin
+düh
+dühbe
+dühkitörés
+dühroham
+dühtõl
+dühvel
+dühében
+dühét
+dühít
+dühítõ
+dühítõen
+dühödt
+dühöng
+dühöngve
+dühöngés
+dühöngõ
+dühös
+dühösen
+düledezõ
+dülledt
+dülöngél
+dülöngélés
+dülöngés
+dünnyög
+dürgés
+dürög
+düsessz
+e-alapú
+ebadó
+ebben
+ebbõl
+ebbõl?
+ebek
+ebet
+ebfojtó
+ebihal
+ebkopírozás
+ebszõlõ
+ebszõr
+ebulliométer
+ebullioszkóp
+ebéd
+ebédel
+ebédelni!
+ebédeltet
+ebédet
+ebédhez
+ebédidõ
+ebédje
+ebédjegy
+ebédjét
+ebédlõ
+ebédlõasztal
+ebédlõje
+ebédmaradékát
+ebédre
+ebédszünet
+ebédtárs
+ebül
+ecet
+ecet-olajtartó
+ecetbe
+ecetben
+ecetes
+ecetsavgyök
+ecettel
+ecetágy
+ecset
+ecsetelt
+ecsetet
+ecsetkezelés
+ecsettál
+ecsetvezetése
+ecsetvonás
+edd
+eddegél
+eddig
+eddigi
+eddigiek
+eddigiekben
+ediktum
+edz
+edzeni
+edzett
+edzettség
+edzetté
+edzés
+edzõ
+edzõcipõ
+edzõgyógymód
+edzõmérkõzés
+edzõtárs
+edzõtársa
+edzõzsák
+edény
+edénybõl)
+edények
+edényes
+edényfogó
+edénykészítés
+edényszárító
+effajta
+effektcérna
+effektus
+effektív
+effeminált
+effúziós
+egek
+egekig
+egekre
+egereket
+egerekkel
+egerészik
+eget
+egetverõ
+eggyel
+eggyé
+ego
+egocentrikus
+egocentrizmus
+egoista
+egoizmus
+egotista
+egres
+egy
+egy-
+egy-kettõ!
+egyaránt
+egyatomos
+egybe
+egybecsavar
+egybecsengés
+egybecsengõ
+egybeeresztés
+egybeesik
+egybeesés
+egybeesése
+egybeesõ
+egybeesõen
+egybefoglal
+egybefolyik
+egybefolyó
+egybefon
+egybefonódik
+egybefõtt
+egybefûz
+egybefûzés
+egybefûzõdik
+egybegyûjt
+egybehangzik
+egybehangzó
+egybehívás
+egybekapcsolt
+egybekel
+egybekelt
+egybekelés
+egybeköt
+egybekötve
+egyben
+egybeolvad
+egybeolvadás
+egybeolvaszt
+egybeolvasztás
+egybesodor
+egybesült
+egybevet
+egybevetve
+egybevetés
+egybevág
+egybevágás
+egybevágó
+egybevágóan
+egybevágóság
+egybevágósága
+egybeépített
+egybeírt
+egybeöntött
+egycentes
+egye
+egyebet
+egyebet,
+egyedi
+egyedárus
+egyedáruság
+egyedárusító
+egyedül
+egyedüli
+egyedüllét
+egyedülálló
+egyedülállóság
+egyel
+egyelõre
+egyen
+egyenes
+egyenesbe
+egyenesben
+egyenesen
+egyenesre
+egyenesszög
+egyenessé
+egyenesség
+egyenestõl
+egyenesít
+egyenesítés
+egyenetlen
+egyenetlenség
+egyenetlenül
+egyenget
+egyengeti
+egyengetés
+egyengetését
+egyengetõ
+egyengetõfa
+egyenirányít
+egyenirányítás
+egyenirányító
+egyenirányítós
+egyenjogúság
+egyenjogúságért
+egyenként
+egyenköz
+egyenleg
+egyenleget
+egyenlegátvitel
+egyenlet
+egyenletes
+egyenletesen
+egyenletessé
+egyenletesség
+egyenlít
+egyenlítõ
+egyenlítõ-
+egyenlítõi
+egyenlõ
+egyenlõen
+egyenlõre
+egyenlõség
+egyenlõségjel
+egyenlõségre
+egyenlõtlen
+egyenlõtlenség
+egyenlõtlenül
+egyenlõvé
+egyenrangú
+egyenrangúság
+egyenruha
+egyenruhás
+egyensúly
+egyensúlya
+egyensúlyba
+egyensúlyban
+egyensúlyhiány
+egyensúlyi
+egyensúlyoz
+egyensúlyozó
+egyensúlyvesztett
+egyensúlyvesztés
+egyensúlyából
+egyensúlyát
+egyensúlyú
+egyenáram
+egyenáramú
+egyenérték
+egyenértékes
+egyenértékû
+egyenértékûség
+egyes
+egyesben
+egyessége
+egyest
+egyesével
+egyesít
+egyesített
+egyesíti
+egyesítik
+egyesítve
+egyesítés
+egyesítõ
+egyesül
+egyesület
+egyesületi
+egyesülnek
+egyesült
+egyesült-államokbeli
+egyesülés
+egyesülõ
+egyet
+egyet!
+egyet,
+egyetek!
+egyetem
+egyetemen
+egyetemes
+egyetemesen
+egyetemessé
+egyetemesség
+egyetemesít
+egyetemesítés
+egyetemet
+egyetemi
+egyetemiek
+egyetemisták
+egyetemleges
+egyetemre
+egyetemrõl
+egyetemváros
+egyetlen
+egyetlenegy
+egyetért
+egyetértek
+egyetértés
+egyetértésben
+egyetértõ
+egyetértõen
+egyezik
+egyezkedik
+egyezkedés
+egyezmény
+egyezményes
+egyezség
+egyezséget
+egyezséggel
+egyezségi
+egyeztet
+egyeztetett
+egyeztetés
+egyeztetõ
+egyezés
+egyezõ
+egyezõen
+egyfajta
+egyfelõl
+egyfogatú
+egyfolytában
+egyforma
+egyformaság
+egyformán
+egyfázisú
+egyhamar
+egyhangú
+egyhangúan
+egyhangúlag
+egyhangúság
+egyhasi
+egyhuzamban
+egyház
+egyházfegyelmi
+egyházfi
+egyházi
+egyházjavadalmat
+egyházkerület
+egyházkerületi
+egyházközség
+egyházközségi
+egyházmegye
+egyházmegyei
+egyházszakadás
+egyháztag
+egyidejû
+egyidejûleg
+egyidejûség
+egyidõsek
+egyig
+egyik
+egyike
+egyiket
+egyikteknek
+egyikõtöknek
+egyikük
+egyikünk
+egyiptomi
+egyirányú
+egyismeretlenes
+egyjelentésû
+egykarú
+egyke
+egykedvû
+egykedvûen
+egykedvûség
+egykerekû
+egykomponens-sáv
+egykor
+egykori
+egykutya
+egylakásos
+egylapos
+egylet
+egylovas
+egylábú
+egylövetû
+egymaga
+egymilliós
+egymás
+egymásba
+egymáshoz
+egymásnak
+egymásra
+egymásrautaltság
+egymással
+egymást
+egymástól
+egymásutáni
+egymérföldes
+egynapi
+egynek
+egynemû
+egynemûen
+egynemûség
+egynyelvû
+egynyom-szélességû
+egynyári
+egynéhány
+egyoldalas
+egyoldali
+egyoldalú
+egyoldalúan
+egyoldalúság
+egypályás
+egypár
+egypúpú
+egyre
+egyrészt
+egyrétegû
+egysejtû
+egysoros
+egyszemélyes
+egyszer
+egyszer-egyszer
+egyszer-másszor
+egyszeregy
+egyszeri
+egyszerre
+egyszerû
+egyszerûbb
+egyszerûen
+egyszerûség
+egyszerûsége
+egyszerûsít
+egyszerûsített
+egyszerûsíthetõ
+egyszerûsíti
+egyszerûsítés
+egyszintû
+egyszárnyú
+egyszínû
+egyszólamú
+egyszótagos
+egyszótagú
+egyszóval
+egyszóval...
+egység
+egységbe
+egységben
+egységbõl
+egysége
+egységek
+egységeket
+egységes
+egységesen
+egységesség
+egységesít
+egységesítés
+egységet
+egységnyi
+egytagú
+egytõl
+egyujjas
+egyveleg
+egyvitorlás
+egyágyas
+egyágú
+egyáltalában
+egyáltalán
+egyárbocos
+egyéb
+egyébként
+egyén
+egyének
+egyéni
+egyénileg
+egyéniség
+egyéniségének
+egyénivé
+egyértelmû
+egyértelmûen
+egyéves
+egyórai
+egyöntetû
+egyöntetûség
+egyúttal
+együgyû
+együgyûség
+együnk
+együtemû
+együtt
+együttemlítés
+együttes
+együttese
+együttesen
+együtthangzás
+együtthangzó
+együttható
+együttjáró
+együttlét
+együttlétezés
+együttmûködik
+együttmûködni
+együttmûködés
+együttmûködési
+együttmûködõ
+együttvéve
+együttzengés
+együttállása)
+együttélés
+együttérez
+együttérzés
+együttérzésérõl
+együttérzõ
+együttérzõen
+együvé
+egzakt
+egzaltáció
+egzaltál
+egzisztencializmus
+egzotikus
+egér
+egérfogó
+egérszerû
+egérszürke
+egérutat
+egérárpa
+egész
+egész!
+egészben
+egésze
+egészen
+egészen!
+egészet
+egészlapos
+egésznek
+egészség
+egészségben
+egészségbuzi
+egészsége
+egészségedre
+egészségedre!
+egészséges
+egészségesen
+egészségesség
+egészséget
+egészségi
+egészségileg
+egészségnek
+egészségre
+egészségtan
+egészségtelen
+egészségtelenség
+egészségtõl
+egészségére
+egészségére!
+egészségét
+egészségével
+egészségû
+egészségügy
+egészségügyi
+egészében
+eh!
+ehet,
+ehetetlen
+ehetõ
+ehetõség
+ehhez
+ehhez?
+ejakulál
+ejektor
+ejha!
+ejnye-ejnye!
+ejnyézik
+ejt
+ejtett
+ejthetõ
+ejti
+ejti,
+ejtés
+ejtésû
+ejtõ
+ejtõcsõ
+ejtõen
+ejtõernyõ
+ejtõernyõ-bekötõ
+ejtõernyõs
+ejtõernyõsök
+ejtõernyõvel
+ejtõfúró
+ejtõkötelet
+ekcéma
+eke
+ekevas
+ekevasas
+ekhós
+ekkora
+ekrü
+eksztatikus
+eksztázis
+ektoplazma
+ekvatoriális
+ekvipázs
+ekvivalencia
+ekvivalens
+ekvátor
+ekével
+el!
+el,
+el-
+el-elkalandozva
+elad
+eladatlan
+eladhatatlan
+eladhatatlanság
+eladható
+eladhatóság
+eladja
+eladogat
+eladott
+eladás
+eladási
+eladásra
+eladását
+eladó
+eladóhelyiség
+eladók
+eladónõ
+eladósodott
+eladósodás
+eladószámla
+elaggott
+elaggottság
+elaggás
+elagyabugyál
+elagyabugyálás
+elajándékoz
+elakad
+elakadt
+elakadás
+elakadása
+elakadásjelzõ
+elaknásít
+elalszik
+elaltat
+elaltatja
+elaludni
+elalussza
+elalvása
+elalél
+elalélt
+elaléló
+elamerikaiasodott
+elandalog
+elangolosodott
+elapad
+elapadt
+elapadtak
+elapadás
+elapasztott
+elapróz
+elasztikus
+elasztomer
+elaszás
+elatera
+elaterit
+elavulni
+elavult
+elavulás
+elavulófélben
+elbabrál
+elbabráló
+elbagatellizál
+elballag
+elbarikádoz
+elbasz
+elbaszás
+elbaszódott
+elbeszél
+elbeszélget
+elbeszéli
+elbeszélés
+elbeszélõ
+elbiceg
+elbitangol
+elbizakodott
+elbizakodottan
+elbizakodottság
+elbizakodottá
+elbocsát
+elbocsátható
+elbocsátják
+elbocsátott
+elbocsátás
+elbolondozza
+elbolondít
+elbont
+elboronál
+elborozgat
+elborul
+elborult
+elborulás
+elborzad
+elborzaszt
+elborít
+elborítás
+elbotlik
+elbotlás
+elbotorkál
+elbukik
+elbuktat
+elbukás
+elburjánzik
+elburjánzott
+elburjánzás
+elbutul
+elbutult
+elbutít
+elbágyad
+elbágyaszt
+elbágyasztó
+elbájol
+elbájolás
+elbájoló
+elbájolóan
+elbámészkodik
+elbánik
+elbánnak
+elbánás
+elbánásban
+elbátortalanodik
+elbátortalanodott
+elbátortalanít
+elbátortalanító
+elbátortalanítóan
+elbátorít
+elbír
+elbírál
+elbírálás
+elbóbiskol
+elbódult
+elbódít
+elbódított
+elbódítás
+elbúcsúzik
+elbúcsúztat
+elbúcsúzás
+elbújik
+elbújtat
+elbûvöl
+elbûvöli
+elbûvölt
+elbûvölve
+elbûvölõ
+elbûvölõen
+elcsakliz
+elcsaklizás
+elcsap
+elcsapják
+elcsatangol
+elcsatangoló
+elcsattan
+elcsattanó
+elcsavar
+elcsavarja
+elcsavarodás
+elcsavarog
+elcsavart
+elcsavarás
+elcsen
+elcsendesedett
+elcsendesít
+elcsenevészesedés
+elcseni
+elcsenés
+elcsenõ
+elcserél
+elcserélték
+elcsesz
+elcseveg
+elcsigáz
+elcsigázott
+elcsitul
+elcsitult
+elcsitulás
+elcsitít
+elcsodálkozott
+elcsodálkozva
+elcsoszog
+elcsuklás
+elcsuklása
+elcsábít
+elcsábította
+elcsábítás
+elcsábítása
+elcsépel
+elcsépelt
+elcsépeltség
+elcsíp
+elcsípik
+elcsípjük
+elcsípnek
+elcsíptek!
+elcsór
+elcsökevényesedik
+elcsökevényesedés
+elcsúfít
+elcsúfított
+elcsúfítás
+elcsúszik
+elcsúszás
+elcsúszása
+elcsügged
+elcsüggedt
+elcsüggeszt
+elcsüggesztõ
+elcsüggesztõen
+eldadog
+eldalol
+eldarál
+eldob
+eldobható
+eldobja
+eldobott
+eldobál
+eldolgoz
+eldorbézolja
+eldorádó
+eldudvásodott
+eldug
+eldugaszol
+eldugaszolás
+eldugott
+eldugul
+eldugult
+eldugulás
+eldugít
+eldugított
+eldugítás
+eldumál
+eldumálgat
+eldurran
+eldurrant
+eldurvít
+eldurvítás
+eldönget
+eldöngetés
+eldönt
+eldöntetlen
+eldöntetlenül
+eldönthetetlen
+eldöntött
+eldörzsöl
+eledele
+elefánt
+elefántcsont
+elefántcsontszínû
+elefántszerû
+elegancia
+elege
+elegem
+elegendõ
+eleget
+elegy
+elegyedik
+elegyedõ
+elegyenget
+elegyít
+elegyített
+elegyíthetetlen
+elegyíthetõ
+elegyítés
+elegáns
+elegánsan
+eleinte
+eleje
+eleji
+elejt
+elejtett
+elejtés
+elejtése
+elején
+elején)
+elejét
+elejétõl
+elejû
+elektrifikál
+elektrifikálás
+elektrifikálódik
+elektrizálás
+elektrizálódás
+elektrodialízis
+elektroforetikus
+elektrolit
+elektrolitikus
+elektrolitos
+elektrolizáló
+elektrolumineszcencia
+elektromos
+elektromossá
+elektromosság
+elektromotoros
+elektromágnes
+elektromágneses
+elektrométer
+elektroncsõ
+elektroncsõbura
+elektronfelesleg
+elektronika
+elektronkamera
+elektrosokk
+elektród
+elektródpólus
+elem
+eleme
+elemei
+elemek
+elemel
+elemeli
+elemez
+elemezhetõ
+elemi
+elemisták
+elemivel
+elemlámpa
+elemzés
+elemzése
+elemzési
+elemében
+elenged
+elengedett
+elengedhetetlen
+elengedi
+elengedve
+elengedés
+elenyészik
+elenyészés
+elenyészõ
+elenyészõen
+elereszt
+elereszti
+eleresztés
+elernyed
+elernyedt
+elernyedve
+elernyedés
+elernyeszt
+elernyesztés
+elerõtlenedett
+elerõtlenedik
+elerõtlenedés
+elerõtlenít
+elerõtlenítés
+elerõtlenítõ
+elesett
+elesik
+elestek
+eleség
+eleve
+eleven
+elevenek
+elevenen
+elevenjére
+elevenszülõ
+elevenség
+elevenébe
+elevenére
+elevenít
+elevez
+elevátor
+elfacsarodott
+elfagy
+elfagyás
+elfajul
+elfajult
+elfajultság
+elfajulás
+elfajzik
+elfajzott
+elfajzás
+elfakul
+elfakít
+elfalaz
+elfecseg
+elfecsérel
+elfecséreli
+elfecsérelés
+elfecsérli
+elfecsérlõdik
+elfed
+elfehéredik
+elfeketedik
+elfektet
+elfekvõ
+elfekélyesedik
+elfeledettség
+elfeledkeztem
+elfeledtet
+elfelejt
+elfelejteném
+elfelejtett
+elfelejtettem
+elfelejtsük
+elfelejtés
+elfenekel
+elfenekelés
+elferdít
+elferdített
+elferdítés
+elferdítõ
+elferdül
+elferdült
+elferdülve
+elferdülés
+elfintorított
+elfog
+elfogad
+elfogadhatatlan
+elfogadhatatlanság
+elfogadható
+elfogadhatóság
+elfogadott
+elfogadtat
+elfogadtatja
+elfogadták
+elfogadvány
+elfogadás
+elfogadási
+elfogadására
+elfogadó
+elfogatási
+elfogatóparancs
+elfogja
+elfoglal
+elfoglalja
+elfoglalt
+elfoglaltság
+elfoglaltsága
+elfoglalás
+elfoglaló
+elfognak
+elfogott
+elfogta
+elfogulatlan
+elfogulatlanság
+elfogulatlanul
+elfogult
+elfogultság
+elfogulttá
+elfogy
+elfogyaszt
+elfogyasztható
+elfogyasztott
+elfogyasztás
+elfogyott
+elfogás
+elfogó
+elfogódott
+elfogódottság
+elfogódottá
+elfogóhorog
+elfojt
+elfojthatatlan
+elfojtja
+elfojtott
+elfojtás
+elfojtó
+elfojtódik
+elfojtódás
+elfolyat
+elfolyik
+elfolyás
+elfolyó
+elfolyósodás
+elfolyósít
+elfolyósítás
+elfonnyad
+elfonnyaszt
+elfordul
+elfordult
+elfordulás
+elfordít
+elfordíthatóság
+elfordítja
+elfordított
+elforgat
+elforgatható
+elforgácsol
+elforgácsolódik
+elformátlanodik
+elformátlanodott
+elfullad
+elfulladt
+elfulladás
+elfuserál
+elfut
+elfutás
+elfutó
+elfárad
+elfáradás
+elfáraszt
+elfásult
+elfátyoloz
+elfátyolozott
+elfátyolozás
+elfátyolozódás
+elfér
+elférfiatlanodás
+elföldel
+elföldelés
+elfúj
+elfúló
+elfûrészel
+elfüggönyöz
+elfütyül
+elgatyázza
+elgazosodik
+elgazosodott
+elgennyed
+elgennyeszt
+elgennyesít
+elgondol
+elgondolható
+elgondolkodva
+elgondolkodás
+elgondolkodó
+elgondolkozik
+elgondolkoztató
+elgondolkozva
+elgondolás
+elgondolását
+elgurul
+elgurít
+elgyengít
+elgyengítés
+elgyengül
+elgyengülés
+elgyöngít
+elgyöngített
+elgyötört
+elgáncsol
+elgáncsolják
+elgázol
+elgázosít
+elgázosítás
+elgépiesít
+elgótosít
+elgõzölög
+elgõzölögtet
+elgõzölögtetés
+elgõzölögtetõ
+elgörbít
+elgörbül
+elgörbült
+elgörbülés
+elgördít
+elgördíti
+elgördül
+elhadar
+elhagy
+elhagyatott
+elhagyatottan
+elhagyatottság
+elhagyja
+elhagyom
+elhagyott
+elhagyottan
+elhagyottság
+elhagyta
+elhagyás
+elhagyása
+elhagyására
+elhagyó
+elhajlik
+elhajlás
+elhajlási
+elhajlásának
+elhajlít
+elhajlítás
+elhajló
+elhajolt
+elhajt
+elhajít
+elhajózik
+elhajózási
+elhal
+elhalad
+elhaladt
+elhaladás
+elhalaszt
+elhalasztás
+elhalasztódik
+elhalkul
+elhallgat
+elhallgattat
+elhallgattatja
+elhallgatás
+elhalmoz
+elhalványodik
+elhalványul
+elhalványulás
+elhalványít
+elhalás
+elhalász
+elhaló
+elhalóan
+elhamarkodja
+elhamarkodott
+elhamarkodottan
+elhamarkodottság
+elhamvadt
+elhamvaszt
+elhamvasztás
+elhangol
+elhangzottakhoz
+elhantol
+elhanyagol
+elhanyagolható
+elhanyagolt
+elhanyagoltan
+elhanyagoltság
+elhanyagolás
+elhanyagolása
+elhappolás
+elharap
+elharapja
+elharapódzik
+elhasad
+elhasadás
+elhasal
+elhasalás
+elhasznál
+elhasználható
+elhasznált
+elhasználás
+elhasználódik
+elhasználódás
+elhasználódása
+elhasználódó
+elhasít
+elhasítás
+elhatárol
+elhatárolt
+elhatárolás
+elhatároz
+elhatározott
+elhatározottság
+elhatározza
+elhatározza,
+elhatározás
+elhatározást
+elhatározó
+elhebeg
+elhelyez
+elhelyezett
+elhelyezhetõ
+elhelyezkedik
+elhelyezkedés
+elhelyezés
+elhelyezésben
+elhelyezése
+elhelyezésénél
+elhelyezõ
+elhemperget
+elhenceg
+elherdál
+elhervad
+elhervadt
+elhervaszt
+elhesseget
+elhessent
+elhibáz
+elhibázott
+elhibázza
+elhibázás
+elhidegül
+elhidegült
+elhidegülés
+elhiheted
+elhihetõ
+elhinni
+elhint
+elhisz
+elhiszik
+elhiteti
+elhivatottság
+elhomokosodás
+elhomályosodik
+elhomályosodás
+elhomályosul
+elhomályosult
+elhomályosulás
+elhomályosít
+elhomályosították
+elhomályosítás
+elhomályosító
+elhord
+elhordja
+elhordott
+elhordás
+elhordása
+elhoz
+elhullat
+elhullatja
+elhullatott
+elhullatta
+elhullás
+elhuny
+elhunyt
+elhunyta
+elhunytak
+elhurcol
+elhurcolkodik
+elhurcolkodás
+elhurcolás
+elhájasodik
+elhál
+elhálás
+elhány
+elhányja
+elhányta
+elhányás
+elhárít
+elháríthatatlan
+elhárítható
+elhárítás
+elhárításáról
+elhárító
+elhíresztel
+elhíresztelés
+elhív
+elhízik
+elhízott
+elhízottság
+elhízásra
+elhömpölyög
+elhúz
+elhúzza
+elhúzás
+elhúzódik
+elhúzódás
+elhülyüli
+eliddogál
+elidegenedik
+elidegenedés
+elidegenít
+elidegeníthetetlen
+elidegeníthetetlenség
+elidegeníthetõ
+elidegenítés
+elidegenülés
+elidõz
+elidõzik
+eligazodik
+eligazodni
+eligazodás
+eligazít
+eligazítás
+eligazításon
+eligazítást
+elijeszt
+elillan
+elillanás
+elillósítás
+elinal
+elinalás
+elindul
+elinduljon
+elindulás
+elindít
+elindítja
+elindítás
+elindító
+elintéz
+elintézem
+elintézetlen
+elintézetlenül
+elintézettnek
+elintézi
+elintézik
+elintézni
+elintézni?
+elintéznivalója
+elintéztem
+elintéztettem
+elintézték
+elintézés
+elintézési
+elintézésre
+elintézésébe
+elintézésének
+eliramodik
+eliramodás
+elismer
+elismerem
+elismeri
+elismeri,
+elismert
+elismerten
+elismertet
+elismervény
+elismerés
+elismerésben
+elismerésre
+elismeréssel
+elismerõ
+elismerõen
+elismerõleg
+elismétel
+elismétlés
+elissza
+eliszapolódás
+eliszaposodik
+eliszaposodás
+eliszaposít
+eliszkol
+eliszlámosít
+elit
+elitista
+elitta
+elixír
+eljegesedés
+eljegyez
+eljegyzett
+eljegyzi
+eljegyzés
+eljegyzést
+eljut
+eljutott
+eljuttat
+eljár
+eljárt
+eljárás
+eljáráshoz
+eljárási
+eljárásjogi
+eljárásmód
+eljárást
+eljátssza
+eljátszik
+eljátszott
+eljátszás
+eljátszása
+eljöjj
+eljön
+eljönni
+eljönnöd
+eljössz!
+eljöttél
+eljövendõ
+eljövendõre
+eljövetel
+eljövök
+elkalandozik
+elkalandoztál
+elkalandozás
+elkalapál
+elkallódás
+elkanadaiasít
+elkanyarodik
+elkanyarodás
+elkanászosodik
+elkap
+elkapat
+elkapatta
+elkapja
+elkapják
+elkapkod
+elkapott
+elkaptalak!
+elkapás
+elkapó
+elkarikázik
+elkedvetlenedett
+elkedvetlenedésnek
+elkedvetlenít
+elkedvetlenítés
+elkedvetlenítõ
+elkedvetlenítõen
+elkel
+elkelt
+elken
+elkendõz
+elkendõzi
+elkerekített
+elkerget
+elkergetik
+elkerít
+elkerített
+elkerül
+elkerülhetetlen
+elkerülhetetlenség
+elkerülhetetlensége
+elkerülhetetlenül
+elkerüli
+elkerülte
+elkerülés
+elkerülõ
+elkeseredett
+elkeseredetten
+elkeseredik
+elkeseredve
+elkeseredés
+elkeseredésbe
+elkeserít
+elkeserítés
+elkeserítõ
+elkeserítõen
+elkeskenyedõ
+elkeskenyít
+elkeskenyítés
+elkeveredik
+elkeveredés
+elkezd
+elkezdés
+elkezdõdik
+elkezdõdött
+elkoboz
+elkobozhatóvá
+elkobzott
+elkobzás
+elkocsonyásodik
+elkocsonyásít
+elkomorodik
+elkomorul
+elkomorít
+elkopik
+elkopott
+elkoppant
+elkoptat
+elkoptatott
+elkoptatás
+elkopás
+elkopó
+elkorcsosodás
+elkorcsosul
+elkorcsosulás
+elkorhad
+elkorhaszt
+elkormányoz
+elkotródik
+elkottyant
+elkullog
+elkvártélyoz
+elkábult
+elkábulás
+elkábít
+elkábított
+elkábítás
+elkábító
+elkápráztat
+elkápráztatott
+elkápráztató
+elkáprázás
+elkárhozás
+elkártyázza
+elkékül
+elkékült
+elkékülés
+elkényeztet
+elkényeztetett
+elképed
+elképedt
+elképedés
+elképeszt
+elképesztés
+elképesztõ
+elképesztõen
+elképzel
+elképzelhetetlen
+elképzelhetetlenül
+elképzelhetõ
+elképzelhetõen
+elképzelt
+elképzelés
+elképzelése
+elképzelések
+elképzelésem
+elképzelésében
+elkésett
+elkésettség
+elkésik
+elkészít
+elkészített
+elkészíthetõ
+elkészíti
+elkészítés
+elkészül
+elkészülni,
+elkészült
+elkészült?
+elkészültével
+elkínzott
+elkísér
+elkísérlek
+elkóborló
+elkóborol
+elkóborolt
+elkótyavetyél
+elkótyavetyélés
+elködösít
+elködösítés
+elkölt
+elköltés
+elköltött
+elköltözik
+elköltözködik
+elköltözködés
+elköltözés
+elköltözöttek
+elkönyvel
+elköp
+elköszön
+elköt
+elkötelez
+elkötelezettség
+elkötelezi
+elkötelezte
+elkötelezés
+elkötése
+elkötöz
+elkövesít
+elkövet
+elkövet,
+elkövetés
+elkövetése
+elkövetésében
+elkövetésétõl
+elkövetõ
+elkúr
+elküld
+elküldik
+elküldés
+elkülönít
+elkülönített
+elkülönítetten
+elkülöníti
+elkülönítés
+elkülönítésére
+elkülönítõ
+elkülönül
+elkülönült
+elkülönülés
+elküszködik
+ellankad
+ellankadva
+ellankaszt
+ellaposodik
+ellazított
+ellen
+ellen-
+ellenajánlat
+ellenajánlatot
+ellenanyag
+ellenben
+ellendarab
+ellene
+ellenem
+ellenez
+ellenfal
+ellenfele
+ellenfeleinek
+ellenfelek
+ellenfeleket
+ellenfelet
+ellenfelének
+ellenfelét
+ellenfogadást
+ellenforradalmi
+ellenfél
+ellenféllel
+ellenfélnek
+ellenfényszûrõ
+ellenhatás
+elleni
+elleni-
+ellenigényt
+ellenintézkedés
+ellenintézkedést
+ellenirányban
+ellenjavaslat
+ellenjegyez
+ellenjegyzés
+ellenjegyzése
+ellenjelölt
+ellenkezik
+ellenkezzél
+ellenkezés
+ellenkezõ
+ellenkezõje
+ellenkezõjét
+ellenkezõleg
+ellenkövetelés
+ellenlábasok
+ellenmenetelés
+ellenméreg
+ellenoldali
+ellenpont
+ellenpontozott
+ellenpontozva
+ellenpontozó
+ellenpárja
+ellenpélda
+ellenpéldány
+ellenszavazat
+ellenszegül
+ellenszegülés
+ellenszegülõ
+ellenszenv
+ellenszenvek
+ellenszenves
+ellenszenvesen
+ellenszenvesség
+ellenszenvet
+ellenszenvvel
+ellenszer
+ellenszolgáltatás
+ellenszolgáltatásképpen
+ellenszámla
+ellenszél
+ellenség
+ellensége
+ellenséges
+ellenségesen
+ellenségeskedés
+ellenségeskedésben
+ellenségeskedések
+ellenségesség
+ellenséget
+ellenséggel
+ellenséghez
+ellenségnek
+ellenségre
+ellensúllyal
+ellensúly
+ellensúlyos
+ellensúlyoz
+ellensúlyozás
+ellensúlyozó
+ellensúlytömb
+ellentart
+ellentartás
+ellentartó
+ellentengernagy
+ellentest
+ellentett
+ellentettség
+ellentmond
+ellentmondás
+ellentmondásba
+ellentmondásra
+ellentmondást
+ellentmondó
+ellentámadás
+ellentámadást
+ellentámasz
+ellentét
+ellentétbe
+ellentétben
+ellentétek
+ellentétel
+ellentételezés
+ellentételként
+ellentétes
+ellentétesen
+ellentüntetõ
+ellenvetés
+ellenvetést
+ellenvád
+ellenvádat
+ellenzett
+ellenzi
+ellenzék
+ellenzéki
+ellenzés
+ellenzõ
+ellenáll
+ellenállhatatlan
+ellenállhatatlanul
+ellenállás
+ellenállási
+ellenállásos
+ellenállásra
+ellenállást
+ellenálló
+ellenállóerõ
+ellenállóképesség
+ellenállóság
+ellenállóság-vizsgálat
+ellenállóvá
+ellenáram
+ellenáramlat
+ellenáramú
+ellenében
+ellenérdekû
+ellenére
+ellenére,
+ellenérték
+ellenértékét
+ellenérv
+ellenérzés
+ellenõr
+ellenõriz
+ellenõrizetlen
+ellenõrizetlenül
+ellenõrizhetetlen
+ellenõrizhetetlenül
+ellenõrizhetõ
+ellenõrség
+ellenõrzi
+ellenõrzés
+ellenõrzése
+ellenõrzési
+ellenõrzõ
+ellenõrzõmûszer
+ellenõrzõóra
+ellenõrzött
+ellep
+ellepett
+elleplez
+ellesi
+ellet
+ellik
+ellipszis
+ellipszoid
+ellondoniasít
+ellop
+ellopja
+ellopták
+ellovagol
+ellát
+ellátatlan
+ellátja
+ellátjuk
+ellátmány
+ellátmányi
+ellátogat
+ellátom
+ellátott
+ellátottság
+ellátva
+ellátás
+ellátásról
+ellátással
+ellátást
+ellátó
+ellép
+elléptet
+ellésnyi
+ellésû
+ellódít
+ellógja
+ellóversenyez
+ellõ
+ellõtt
+ellök
+ellöki
+ellövöldöz
+elmakacsol
+elmakacsolás
+elmarad
+elmaradhatatlan
+elmaradhatatlanul
+elmaradozik
+elmaradozó
+elmaradt
+elmaradás
+elmaradása
+elmaradó
+elmarasztal
+elmarhulja
+elmaszatol
+elmaszatolódik
+elmatat
+elme
+elmebaj
+elmebajos
+elmebajosnak
+elmebeli
+elmebeteg
+elmebetegség
+elmegy
+elmegyógyintézet
+elmehetnél
+elmenekül
+elmenekülés
+elmenetel
+elmenned
+elmenni
+elment
+elmenõ
+elmeorvos
+elmeorvostan
+elmeorvostani
+elmereng
+elmerít
+elmerül
+elmerült
+elmerülve
+elmerülés
+elmerüléssel
+elmeszakértõ
+elmeszesedett
+elmesél
+elmesélés
+elmetsz
+elmetszi
+elmetszés
+elmezavar
+elmocsarasodott
+elmond
+elmondatlan
+elmondhatatlan
+elmondja
+elmondott
+elmondás
+elmorzsol
+elmorzsolódó
+elmos
+elmosatlan
+elmosogat
+elmosás
+elmosódik
+elmosódott
+elmosódottan
+elmosódottság
+elmosódó
+elmotyog
+elmozdul
+elmozdulás
+elmozdít
+elmozdítható
+elmozdítás
+elmozdító
+elmulaszt
+elmulasztás
+elmulasztó
+elmállaszt
+elmállik
+elmállás
+elmázol
+elmázolt
+elméje
+elméjébe
+elméjû
+elméjûen
+elmélet
+elméletbe
+elméletben
+elméleteit
+elméleteket
+elméleti
+elméletileg
+elméletét
+elmélkedik
+elmélkedés
+elmélkedésre
+elmélkedõ
+elmélkedõen
+elmélyed
+elmélyedt
+elmélyedve
+elmélyedés
+elmélyít
+elmélyülés
+elmélyülést
+elméláz
+elmélázó
+elmérgesedett
+elmérgesedik
+elmérgesedés
+elmérgesít
+elmérgesítés
+elmés
+elmésség
+elmész
+elmúlhatatlan
+elmúlik
+elmúlt
+elmúlás
+elnadrágol
+elnadrágolás
+elnagyol
+elnagyolt
+elnapol
+elnapolás
+elnehezedett
+elnehezült
+elnevez
+elnevezés
+elnevezésre
+elnyargal
+elnyel
+elnyelnek
+elnyelés
+elnyelési
+elnyelõ
+elnyer
+elnyerhetetlen
+elnyeri
+elnyerni
+elnyert
+elnyerés
+elnyeréséért
+elnyerõ
+elnyom
+elnyomja
+elnyomorodás
+elnyomott
+elnyomva
+elnyomás
+elnyomó
+elnyugatosít
+elnyújt
+elnyújtás
+elnyúlik
+elnyúlt
+elnyúlva
+elnyúló
+elnyû
+elnyûtt
+elnáspángol
+elnáspángolás
+elnémult
+elnémít
+elnémítja
+elnémított
+elnéptelenedik
+elnéptelenedés
+elnéptelenít
+elnéptelenített
+elnéz
+elnézhetõ
+elnézés
+elnézésbõl
+elnézést
+elnézõ
+elnõiesedett
+elnõiesedés
+elnõiesít
+elnõiesítõ
+elnök
+elnöke
+elnöki
+elnökjelölõ
+elnökké
+elnöklés
+elnöklõ
+elnökség
+elnökségének
+elnökválasztási
+elnökválasztó
+elnökének
+elnököl
+elodázó
+elokádja
+elolaszosodott
+elolaszosodás
+elolaszosít
+elolaszosítás
+elold
+eloldalog
+eloldott
+eloldoz
+eloldozott
+eloldódik
+elolt
+eloltja
+eloltás
+elolvad
+elolvadni
+elolvas
+elolvasandó
+elolvastam
+elolvaszt
+elongáció
+eloson
+eloszlat
+eloszlatja
+eloszlatott
+eloszlatás
+eloszlik
+eloszlik,
+eloszlás
+eloszlásgörbe
+eloszlási
+eloszt
+elosztható
+elosztott
+elosztás
+elosztó
+elosztófej
+elosztóvas
+elpalástol
+elpanaszol
+elparancsol
+elpaterol
+elpatkol
+elpattan
+elpattant
+elpattanás
+elpazarlódik
+elpazarol
+elpazarolt
+elperzsel
+elpilled
+elpirul
+elpirulás
+elpiszkolódott
+elpiszmog
+elpocsékol
+elpocsékolás
+elpocsékolódik
+elporladás
+elporlaszt
+elporlik
+elporol
+elposványosodik
+elprédál
+elprédálás
+elpróbál
+elpucol
+elpufogtat
+elpuhul
+elpuhult
+elpuhultság
+elpuhulttá
+elpuhulás
+elpuhít
+elpuhítás
+elpuhító
+elpukkan
+elpukkaszt
+elpuskáz
+elpusztul
+elpusztult
+elpusztulás
+elpusztít
+elpusztíthatatlan
+elpusztíthatatlanság
+elpusztítható
+elpusztított
+elpusztította
+elpusztítás
+elpusztító
+elpáhol
+elpáholás
+elpárolgás
+elpárolog
+elpárologtat
+elpárologtatás
+elpártol
+elpártolás
+elpöfög
+elpüföl
+elpüfölés
+elrablás
+elrabol
+elrabolja
+elragad
+elragadtak
+elragadtat
+elragadtatja
+elragadtatott
+elragadtatva
+elragadtatás
+elragadtatással
+elragadták
+elragadó
+elragadóan
+elrak
+elrakodás
+elraktároz
+elraktározás
+elrejt
+elrejtett
+elrejtés
+elrejtõzik
+elrejtõzködik
+elrejtõzés
+elrekedés
+elrekeszt
+elrekesztett
+elrekesztés
+elrendel
+elrendeli
+elrendelt
+elrendelés
+elrendelõ
+elrendez
+elrendezett
+elrendezi
+elrendezés
+elrendezésben
+elrendezése
+elreped
+elrepedés
+elrepeszt
+elrepesztett
+elrepül
+elrepülés
+elreteszel
+elreteszeli
+elreteszelt
+elreteszelés
+elreteszelõ
+elrettent
+elrettentõ
+elrettentõen
+elriaszt
+elringat
+elritkul
+elrohan
+elrohanás
+elromlik
+elromlott
+elromlás
+elrongyolódott
+elront
+elrontja
+elrontott
+elrontás
+elroppant
+elroppanás
+elrothad
+elrág
+elrémít
+elrémítõ
+elröhögi
+elröppen
+elröppenõ
+elröpít
+elrúg
+elrútít
+elrútítás
+elsajtosodás
+elsajátít
+elsajátítható
+elsalakosodik
+elsalakosít
+elsatnyul
+elsatnyult
+elsatnyulás
+elsatnyuló
+elsatnyít
+elseje
+elsejei
+elsekélyesedik
+elsenyved
+elsiet
+elsietett
+elsietetten
+elsietve
+elsietõ
+elsikkaszt
+elsikkasztás
+elsimul
+elsimít
+elsimítás
+elsinkófál
+elsivít
+elskatulyáz
+elsodor
+elsodorja
+elsodródás
+elsomfordál
+elsompolyog
+elsorvad
+elsorvadt
+elsorvaszt
+elspórol
+elsuhan
+elsuhanó
+elsumákol
+elsurran
+elszabadul
+elszabadult
+elszabadulás
+elszabadít
+elszabotál
+elszaggat
+elszakad
+elszakadni
+elszakadt
+elszakadás
+elszakadó
+elszakít
+elszakítja
+elszakítás
+elszalad
+elszalaszt
+elszalasztja
+elszaporodik
+elszar
+elszarja
+elszaval
+elszegényedés
+elszegényesítés
+elszegényít
+elszegényítés
+elszegényítõ
+elszelel
+elszenderedik
+elszenesedett
+elszenesedik
+elszenesedés
+elszenesít
+elszenesítés
+elszenved
+elszenvedõ
+elszenítés
+elszigetel
+elszigetelt
+elszigeteltség
+elszipkáz
+elszivárgás
+elszivárog
+elszokik
+elszomorodik
+elszomorodott
+elszomorít
+elszomorító
+elszontyolodik
+elszontyolodott
+elszontyolodva
+elszorul
+elszorult
+elszundít
+elszunyókál
+elszáguld
+elszáguldás
+elszáll
+elszállt
+elszállásol
+elszállásolás
+elszállít
+elszállítás
+elszámlál
+elszámol
+elszámolnivalója
+elszámolás
+elszámolásban
+elszámolási
+elszámolások
+elszámolásra
+elszámolópénz
+elszámítja
+elszánja
+elszánt
+elszántan
+elszántság
+elszárad
+elszáradt
+elszáradás
+elszárít
+elszédít
+elszédül
+elszéled
+elszínezõdött
+elszíntelenedett
+elszív
+elszívott
+elszólja
+elszólás
+elszólít
+elszór
+elszórt
+elszórtan
+elszórva
+elszóródik
+elszökik
+elszökés
+elszökött
+elszöszmötöl
+elszövegel
+elszúrja
+elszûkít
+elsántikál
+elsápad
+elsápaszt
+elsárgult
+elsétál
+elsóz
+elsózott
+elsózza
+elsõ
+elsõbbség
+elsõbbségadás
+elsõbbsége
+elsõbbséget
+elsõbbségi
+elsõbálos
+elsõdleges
+elsõfokú
+elsõhegedûs
+elsõkerék-imbolygás
+elsõkerék-kígyózás
+elsõként
+elsõnapi
+elsõnek
+elsõosztályú
+elsõpéldánya
+elsõrangú
+elsõre
+elsõrendû
+elsõs
+elsõsegély-doboz
+elsõsegély-készlet
+elsõsorban
+elsõszülött
+elsõszülöttség
+elsõszülöttségi
+elsõség
+elsõéves
+elsöprõ
+elsöpör
+elsötétedik
+elsötétedés
+elsötétít
+elsötétítés
+elsötétítõ
+elsötétül
+elsül
+elsüllyed
+elsüllyedt
+elsüllyedés
+elsüllyedése
+elsüllyeszt
+elsüllyeszthetõ
+elsüllyesztés
+elsülés
+elsüt
+elsütõ
+elsütõbillentyû
+elsüvít
+eltakar
+eltakarja
+eltakarodik
+eltakart
+eltakarás
+eltakarít
+eltalál
+eltalálja
+eltaláltad
+eltaláltad!
+eltanácsol
+eltapos
+eltaposás
+eltart
+eltartott
+eltartottak
+eltartottja
+eltartás
+eltaszít
+eltaszítás
+eltekereg
+eltekint
+eltekintve
+eltelik
+eltelni
+eltelt
+eltemet
+eltemették
+eltemetés
+eltengõdik
+elterebélyesedik
+elterel
+elterelhetõ
+eltereli
+elterelés
+elterelõ
+elterelõdik
+elterjed
+elterjedt
+elterjedtség
+elterjedtségi
+elterjedve
+elterjedés
+elterjedési
+elterjeszt
+elterjesztés
+elterpeszkedik
+elterpeszkedõ
+eltervezés
+elterít
+elterül
+elterült
+elterültség
+eltesped
+eltesz
+eltett
+eltikkad
+eltilt
+eltiltás
+eltipor
+eltiprás
+eltipró
+eltitkol
+eltitkolja
+eltitkolt
+eltitkolás
+eltol
+eltolható
+eltolja
+eltolt
+eltolás
+eltoló
+eltolódik
+eltolódott
+eltolódás
+eltolódása
+eltompul
+eltompult
+eltompít
+eltompítja
+eltompítás
+eltompító
+eltorlaszol
+eltorlaszolt
+eltorlaszolás
+eltorzul
+eltorzult
+eltorzulás
+eltorzít
+eltorzított
+eltorzítás
+eltulajdonít
+eltulajdonítás
+eltussol
+eltángál
+eltársalog
+eltávolodik
+eltávolít
+eltávolítja
+eltávolíttat
+eltávolítás
+eltávolítása
+eltávolító
+eltávozik
+eltávozás
+eltávozási
+eltávozó
+eltékozlás
+eltékozol
+eltélakol
+eltép
+eltér
+eltérnek
+eltérsz
+eltértél
+eltérés
+eltérése
+eltérít
+eltérítés
+eltérítõ
+eltérõ
+eltérõen
+eltérülés-mutató
+eltéved
+eltévedt
+eltévelyedett
+eltévelyedés
+eltéveszt
+eltévesztettem
+eltéveszti
+eltévesztés
+eltökélt
+eltökélten
+eltökéltség
+eltökít
+eltölt
+eltölti
+eltöltõ
+eltöltött
+eltöm
+eltömés
+eltömõdik
+eltömõdés
+eltömõdött
+eltör
+eltöri
+eltörik
+eltörlés
+eltörlése
+eltörpít
+eltörpül
+eltörés
+eltöröl
+eltörölget
+eltörött
+eltúloz
+eltúlzott
+eltúlzására
+eltûnik
+eltûnik,
+eltûnt
+eltûntet
+eltûnés
+eltûnõ
+eltûnõdik
+eltûr
+eltûrés
+eltûrõ
+eltüntet
+eltünteti
+eltüntetése
+elugrik
+elugrás
+elundorít
+elutasít
+elutasított
+elutasítás
+elutasító
+elutasítóan
+elutazik
+elutazás
+elutazásom
+elutriálás
+eluviális
+elv
+elvacakol
+elvadul
+elvadult
+elvakult
+elvakultan
+elvakulás
+elvakít
+elvakított
+elvakítás
+elvakító
+elvarázsol
+elvarázsolt
+elvben
+elvbõl
+elve
+elvegyül
+elvei
+elveihez
+elveinek
+elveit
+elvekkel
+elver
+elvergõdik
+elveri
+elverik
+elvermel
+elverés
+elvesz
+elveszett
+elveszettnek
+elveszi
+elveszik
+elveszt
+elveszteget
+elvesztegeti
+elvesztegetés
+elvesztett
+elvesztette
+elveszthetõ
+elveszti
+elvesztés
+elvesztése
+elvesztésén
+elveszés
+elveszít
+elveszítette
+elveszíti
+elveszõ
+elveszõdik
+elvet
+elvetemülten
+elvetemültség
+elvetett
+elveti
+elvette
+elvetél
+elvetéli
+elvetélt
+elvetélés
+elvetés
+elvetése
+elvetõdik
+elvezet
+elvezetés
+elvezetõ
+elvhez
+elvhû
+elvi
+elviharzik
+elvileg
+elvirágzik
+elvirágzott
+elvirágzó
+elvisel
+elviselhetetlen
+elviselhetetlenül
+elviselhetõ
+elviseli
+elviselni
+elviselt
+elviselés
+elvisz
+elviszem
+elviszi
+elviszik
+elvitat
+elvitathatatlan
+elvitathatatlanság
+elvként
+elvon
+elvonatkoztatott
+elvont
+elvontan
+elvontat
+elvontatás
+elvontság
+elvonul
+elvonult
+elvonultat
+elvonultság
+elvonulás
+elvonuló
+elvonás
+elvonókúra
+elvszerûen
+elvtelen
+elvtelenség
+elvtárs
+elvtársiasság
+elvág
+elvágja
+elvágás
+elvágódik
+elválaszt
+elválaszthatatlan
+elválaszthatatlanul
+elválasztható
+elválasztott
+elválasztva
+elválasztás
+elválasztású
+elválasztó
+elválasztórúd
+elválasztóvágat
+elválik
+elválik!
+elvállal
+elvállalható
+elvált
+elváltoztatás
+elváltozás
+elváltozása
+elválás
+elvámolva
+elvámolás
+elvár
+elvárosiasodott
+elvárás
+elvásik
+elvégez
+elvégezhetõ
+elvégezni
+elvégeztet
+elvégezve
+elvégre
+elvégzett
+elvégzi
+elvégzés
+elvégzésére
+elvégzõdik
+elvékonyodik
+elvékonyodott
+elvékonyodó
+elvékonyult
+elvékonyít
+elvékonyítás
+elvének
+elvérzik
+elvész
+elvész,
+elvét
+elvéti
+elvétés
+elvörösödik
+elvörösödés
+elvû
+elvül
+elzavar
+elzavarják
+elzokog
+elzongorázik
+elzsibbad
+elzsibbadt
+elzsibbaszt
+elzsongít
+elzálogosít
+elzálogosított
+elzár
+elzárható
+elzárják
+elzárkózik
+elzárkózott
+elzárkózottság
+elzárkózás
+elzárt
+elzártság
+elzárul
+elzárva
+elzárás
+elzáró
+elzáródik
+elzáródás
+elzáródó
+elzárószelep
+elzárószer
+elzátonyosodik
+elzöldül
+elzúg
+elzúgat
+elzülleszt
+elzülleszthetõ
+elzüllesztõ
+elzüllik
+elábrándozik
+elágazik
+elágaztatott
+elágazás
+elágazási
+elájul
+elájulás
+eláll
+elállja
+elállt
+elállás
+elállít
+elállítja
+elállítás
+elálló
+elálmosít
+elámít
+elán
+eláraszt
+elárasztható
+elárasztott
+elárasztotta
+elárasztás
+elárul
+elárul!
+elárulja
+elárulás
+eláruló
+elárusítás
+elárusító
+elárusítóhely
+elárusítónõ
+elárverez
+elárverezik
+elárverezték
+elás
+elássa
+elátkoz
+elátkozott
+elátkozás
+elázott
+elé
+elébe
+elébevágás
+elég
+elég!
+elégedetlen
+elégedetlenkedik
+elégedetlenkedés
+elégedetlenkedõ
+elégedetlenné
+elégedetlenség
+elégedetlenségtõl
+elégedetlenül
+elégedett
+elégedetten
+elégedettség
+elégedve
+eléget
+elégethetõ
+elégetés
+eléggé
+elégia
+elégikus
+elégnek
+elégséges
+elégtelen
+elégtelenség
+elégtelenül
+elégtétel
+elégtételt
+elégtételül
+elégés
+elégít
+elégítõ
+elégõ
+eléje
+elékelt
+eléktelenít
+eléldegél
+elélvez
+elénekel
+elér
+elérhetetlen
+elérhetõ
+elérhetõség
+eléri
+elérjék
+elérkezett
+elérkezõ
+elérni
+elérte
+elérti
+elértéktelenedik
+elértéktelenedés
+elértéktelenít
+elérzékenyít
+elérzékenyülve
+elérzékenyülés
+elérés
+elérésére
+elévág
+elévül
+elévült
+elévülés
+elévülési
+elírás
+elítél
+elítélendõ
+elítélt
+elítélés
+elítélõ
+elítélõen
+elódalog
+elõ
+elõ!
+elõ-felsõsudárvitorla
+elõad
+elõadhatatlan
+elõadja
+elõadás
+elõadása
+elõadási
+elõadásmód
+elõadásnak
+elõadásokat
+elõadásra
+elõadásról
+elõadássorozat
+elõadást
+elõadó
+elõadódik
+elõadója
+elõadómûvész
+elõadóterem
+elõagy
+elõbb
+elõbb-utóbb
+elõbbi
+elõbbre
+elõbevonat
+elõbukkanás
+elõbújik
+elõcsal
+elõcsapat
+elõcsarnok
+elõcsatározó
+elõd
+elõest
+elõestje
+elõestéje
+elõestéjén
+elõfedélzet
+elõfeltétel
+elõfizet
+elõfizetés
+elõfizetõ
+elõfizetõi
+elõfogat-erõsítõ
+elõfogatba
+elõfok
+elõfonat
+elõfonnyasztott
+elõfonó
+elõfonógép
+elõfordul
+elõfordulni
+elõfordulás
+elõfordulási
+elõforduló
+elõfutam
+elõfutár
+elõfutó
+elõfõzés
+elõfõzõ
+elõfúró
+elõgyomor
+elõgyújtást
+elõhad
+elõharcos
+elõharcosa
+elõhasi
+elõhegy
+elõhegység
+elõhenger
+elõhengerel
+elõhevít
+elõhevítés
+elõhoz
+elõhozakodik
+elõhírnök
+elõhív
+elõhívott
+elõhívás
+elõhívószer
+elõhívótál-himbáló
+elõhívótál-rázó
+elõidéz
+elõidézett
+elõidézni
+elõidézés
+elõidézõ
+elõimádkozó
+elõirányoz
+elõirányzata
+elõirányzott
+elõjegyez
+elõjegyeztet
+elõjegyzék
+elõjegyzés
+elõjegyzésbe
+elõjegyzési
+elõjel
+elõjelek
+elõjelként
+elõjelszabály
+elõjelzõ
+elõjog
+elõjogok
+elõjáték
+elõjön
+elõkalkuláció
+elõke
+elõkelõ
+elõkelõen
+elõkelõnek
+elõkelõsködõ
+elõkelõség
+elõkelõségei
+elõkelõségek
+elõkelõt
+elõkert
+elõkerít
+elõkerül
+elõkezel
+elõkezelés
+elõkikötõ
+elõkotor
+elõképzettséggel
+elõképzõ
+elõkészít
+elõkészített
+elõkészíti
+elõkészítés
+elõkészítéséül
+elõkészítõ
+elõkészül
+elõkészület
+elõkészületek
+elõkészületeket
+elõl
+elõlap
+elõleg
+elõlegben
+elõleget
+elõlegez
+elõlegezett
+elõlegezés
+elõleggel
+elõlegképpen
+elõlegzett
+elõlép
+elõléptet
+elõléptetés
+elõléptetési
+elõlépés
+elõlépési
+elõlünk
+elõmelegít
+elõmelegítõ
+elõmenetel
+elõmenetelû
+elõmozdít
+elõmozdítás
+elõmozdító
+elõmunkás
+elõmutat
+elõméretes
+elõméretez
+elõny
+elõnyben
+elõnye
+elõnyomul
+elõnyomulás
+elõnyt
+elõnytelen
+elõnyére
+elõnyökre
+elõnyös
+elõnyösebb
+elõnyösen
+elõrajzol
+elõrajzolás
+elõrajzoló
+elõre
+elõre!
+elõre)
+elõre-hátra
+elõrebillent
+elõrebillenése
+elõrebocsát
+elõrebukfencezés
+elõredõl
+elõreesik
+elõregurul
+elõrehajlás
+elõrehajol
+elõrehajtás
+elõrehajtó
+elõrehajít
+elõrehalad
+elõrehaladott
+elõrehaladottsága
+elõrehaladás
+elõrehaladást
+elõrehaladó
+elõrehoz
+elõreigazít
+elõreigazítja
+elõreigazítva
+elõrejelzés
+elõrejelzõ
+elõrejut
+elõrelendül
+elõrelát
+elõrelátott
+elõrelátás
+elõrelátásban
+elõrelátó
+elõremegy
+elõrenyomakodik
+elõrenyomul
+elõrenyomulás
+elõrenyomulási
+elõrenyomuló
+elõrenéz
+elõrerohan
+elõresegít
+elõresietõ
+elõreszökken
+elõretart
+elõretartás
+elõreteker
+elõretol
+elõretolt
+elõretódul
+elõretör
+elõretörés
+elõreugrik
+elõreugrás
+elõreugrása
+elõreugró
+elõreveti
+elõreáll
+elõreállás
+elõreálló
+elõreözönlik
+elõront
+elõráncigál
+elõránt
+elõrész
+elõrésze
+elõrészén
+elõsegít
+elõsegítés
+elõsegítõ
+elõsudárvitorla
+elõszed
+elõszedett
+elõszele
+elõszeretet
+elõszoba
+elõszobafal
+elõszobázik
+elõszámla
+elõszél
+elõszín
+elõszó
+elõszót
+elõször
+elõszûrés
+elõszûrõ
+elõtag
+elõteremt
+elõteremteni
+elõteremti
+elõterjeszt
+elõterjesztés
+elõtetõ
+elõtolás
+elõtt
+elõtte
+elõtte!
+elõttem
+elõtti
+elõtér
+elõtérbe
+elõtérben
+elõtérhez
+elõtét
+elõtétel
+elõtételbõl
+elõtételként
+elõtételt
+elõtör
+elõtörés
+elõtörõgép
+elõtûnik
+elõudvar
+elõugrik
+elõvarázsol
+elõvesz
+elõveszi
+elõvette
+elõvették
+elõvezetési
+elõvigyázat
+elõvigyázatból
+elõvigyázatlan
+elõvigyázatlanná
+elõvigyázatlanul
+elõvigyázatos
+elõvigyázatosság
+elõvigyázatra
+elõvizsga
+elõvágat
+elõvágás
+elõvájási
+elõvájó
+elõvételi
+elõz
+elõzetes
+elõzetesen
+elõzmény
+elõzni
+elõzápfog
+elõzékeny
+elõzékenyen
+elõzékenység
+elõzékenységbõl
+elõzékenysége
+elõzékenységet
+elõzéklap
+elõzõ
+elõzõleg
+elõáll
+elõállít
+elõállított
+elõállítás
+elõállítási
+elõárboc-felsõsudárvitorla
+elõárboc-sudárvitorla
+elõás
+elõélet
+elõéletû
+elõérzet
+elõérzete
+elõérzeteket
+elõérzetû
+elõérzés
+elõétel
+elõír
+elõírt
+elõírtnál
+elõírás
+elõírásellenes
+elõírások
+elõírásoknak
+elõírásos
+elõírásosan
+elõírásszerû
+elõírást
+elõíró
+elõítélet
+elõítéletektõl
+elõítéletes
+elõítéletet
+elõítéletmentes
+elõítéletmentesen
+elõítélettel
+elõítélettõl
+elõõrs
+elõöltés
+elöl
+elöljáró
+elöljáróban
+elölnézet
+elölrõl
+elönt
+elönti
+elöntés
+elöntött
+elöntötte
+elöregedett
+elözönlötte
+elözönöl
+elûz
+elûzi
+elügyetlenkedik
+elül
+elülsõ
+elült
+elüszkösödik
+elüszkösödés
+elüt
+elüti
+elütési
+elütõ
+elütötte
+elüzletiesít
+elüzletiesítés
+emailírozás
+emancipáció
+emancipál
+emanáció
+embargó
+ember
+ember,
+emberalak
+emberbarát
+emberbaráti
+emberbarátiság
+emberbõl
+embercentrikus
+embere
+emberek
+emberek?
+emberekbõl
+embereket
+emberekkel
+emberemlékezet
+emberevés
+emberevõ
+emberfeletti
+emberfia
+emberfölötti
+embergyûlölet
+embergyûlölõ
+emberhez
+emberi
+emberibbé
+emberien
+emberiesebbé
+emberiessé
+emberiesség
+emberig
+emberismeret
+emberiség
+emberivé
+emberke
+emberkerülés
+emberkerülõ
+emberként
+emberközpontú
+embernek
+embernek,
+embernyúzó
+emberrablás
+emberrabló
+emberre
+emberrel
+emberroncs
+emberré
+emberszabású
+emberszeretet
+emberszeretõ
+emberséges
+emberségesebbé
+emberségesen
+embert
+embertan
+embertani
+embertelen
+embertelenség
+embertelenül
+embertõl
+embertömeg
+embervadász
+embervadászat
+emberére
+emberölés
+emberölési
+embléma
+embriogenezis
+embriológia
+embriológiai
+embrionális
+embrió
+embrió-
+embrióma
+embrióval
+eme
+emel
+emel?
+emelet
+emelete
+emeletes
+emeletet
+emeletfedélzet
+emeleti
+emeletsor
+emelgetve
+emelgetõ
+emeli
+emelkedett
+emelkedettség
+emelkedik
+emelkedés
+emelkedése
+emelkedésû
+emelkedõ
+emelkedõben
+emellett
+emelt
+emeltyû
+emeltyûje
+emeltyûrendszer
+emelvény
+emelvényre
+emelvényt
+emelés
+emelõ
+emelõbak
+emelõdob
+emelõerõ
+emelõhatás
+emelõhorog
+emelõjû
+emelõk
+emelõkar
+emelõkart
+emelõkészüléke
+emelõmûves
+emelõrúd
+emelõrúddal
+emelõs
+emelõszerkezet
+emelõvas
+emelõvel
+emelõvilla
+emelõvillás
+emelõütés
+eminencia
+eminenciád
+eminenciája
+eminenciás
+eminens
+emirátus
+emisszió
+emitter
+emittáló
+emlegetik
+emlék
+emlékanyag
+emlékeirõl
+emlékeit
+emlékek
+emléket
+emlékezet
+emlékezetbe
+emlékezetben
+emlékezetem
+emlékezeterõsítõ
+emlékezetes
+emlékezetessé
+emlékezeti
+emlékezetkiesés
+emlékezetvesztés
+emlékezetébe
+emlékezetében
+emlékezetébõl
+emlékezetét
+emlékezetû
+emlékezik
+emlékezni
+emlékeztet
+emlékeztetõ
+emlékezés
+emlékezések
+emlékezõ
+emlékezõtehetség
+emlékezõtehetsége
+emlékezõtehetségéhez
+emlékezõtehetségére
+emlékezõtehetségét
+emlékiratait
+emlékiratok
+emlékkép
+emlékmû
+emlékmûvi
+emléknapja
+emlékpark
+emlékszem
+emlékszik
+emléktábla
+emléktárgy
+emlékének
+emlékére
+emlékérem
+emlékét
+emlékû
+emlékünnepe
+említ
+említeni
+említett
+említettük
+említés
+említésre
+emlõ
+emlõbimbó
+emlõs
+empirikus
+empirista
+empátia
+emse
+emu
+emulgeált
+emulgeálás
+emulgálás
+emulzió
+emészt
+emészteni
+emészthetõ
+emészti
+emésztés
+emésztési
+emésztést
+emésztésû
+emésztõ
+emésztõdik
+emésztõgödör
+emésztõrendszer
+emésztõszervek
+emír
+emóció
+encephalitis
+enciklopédia
+enciklopédikus
+endemikus
+endokrin
+endoterm
+energia
+energia-sajátfüggvény
+energia-sajátmegoldás
+energia-sajátérték
+energia-visszanyerés
+energiamegmaradás
+energiatároló
+energiaveszteség
+energiavisszanyeréssel
+energikus
+energikusan
+energiáját
+energiátlan
+enervált
+enerváltság
+enerváló
+enerválódás
+enged
+engedd
+engedelmes
+engedelmesen
+engedelmeskedik
+engedelmeskedés
+engedelmeskedõ
+engedelmesség
+engedelmességet
+engedelmével
+engedetlen
+engedetlenség
+engedett
+engedhetõ
+engedi
+engedjek
+engedjen
+engedjétek
+engedmény
+engedmények
+engedményen
+engedményes
+engedményez
+engedményezhetõ
+engedményezés
+engedményezési
+engedményezõ
+engedményt
+engedni
+engedékeny
+engedékenyen
+engedékenység
+engedéllyel
+engedély
+engedélyen
+engedélyes
+engedélyez
+engedélyezett
+engedélyezés
+engedélyezési
+engedélyt
+engedélytõl
+engem
+engem!
+engesztel
+engesztelhetetlen
+engesztelhetetlenség
+engesztelhetetlenül
+engesztelt
+engesztelés
+engesztelõ
+engesztelõdik
+enklitikus
+ennek
+ennek?
+enni
+ennivaló
+ennivalók
+ennivalót
+ennyi
+ennyiben
+ennyire
+ennyit
+ennél
+ennélfogva
+ennünk
+entalpia
+entitás
+entrechat
+entrópia
+enunciál
+enyeleg
+enyelgés
+enyh
+enyhe
+enyhely
+enyheség
+enyhébb
+enyhén
+enyhít
+enyhítené
+enyhített
+enyhíti
+enyhítés
+enyhítõ
+enyhül
+enyhült
+enyhülés
+enyhülése
+enyhülést
+enyv
+enyves
+enyveskezû
+enyvez
+enyvezett
+enyvezés
+enyvezõ
+enyvfelhordó
+enyvképzõ
+enyvvel
+enyéim
+enyém
+enzim
+epe
+epebeteg
+epebántalomban
+eped
+epedez
+epedezõ
+epedõ
+epegörcs
+epehólyag
+epekedik
+epekedve
+epekedés
+epekedõ
+epekõ
+eper
+eperfa
+eperlánlazac
+eperoham
+epeömlés
+epeömléssel
+epidermisz
+epidermofitózis
+epifánia
+epigasztrium
+epiglottis
+epigramma
+epikranon
+epikureus
+epikus
+epilepszia
+epileptikus
+epilál
+epilógus
+episzkopális
+episzkopátus
+epizód
+epizódszerepekben
+epizódszerû
+epizódszínész
+epolett
+eposz
+epoxi-gyök
+epoxid
+epoxigyök
+epsomi
+epés
+epésség
+epével
+erdei
+erdeje
+erdész
+erdészet
+erdészeti
+erdõ
+erdõcske
+erdõfelújítás
+erdõgazdaság
+erdõgazdálkodás
+erdõhatár
+erdõk
+erdõlakó
+erdõmûvelés
+erdõs
+erdõszél
+erdõsáv
+erdõség
+erdõségbe
+erdõsít
+erdõsítés
+erdõt
+erdõtûznél
+erdõvágás
+erdõállomány
+erdõõr
+erecske
+ered
+eredendõ
+eredet
+eredete
+eredeti
+eredetien
+eredetileg
+eredetinek
+eredetiség
+eredetit
+eredetivel
+eredettel
+eredeténél
+eredetû
+eredeztet
+eredj
+eredj!
+eredménnyel
+eredmény
+eredmény-kimutatás
+eredménye
+eredményeit
+eredmények
+eredményeképpen
+eredményes
+eredményesen
+eredményesség
+eredményez
+eredményjelzõ
+eredményre
+eredményt
+eredménytelen
+eredménytelenség
+eredménytelenül
+eredõ
+ereget
+ereiben
+ereje
+erejébõl
+erejéhez
+erejéig
+erején
+erejének
+erejét
+erejétõl
+erejével
+erejû
+erek
+erekció
+ereklye
+ereklyetartó
+eres
+eresz
+ereszcsatorna
+ereszcsöpögõ
+ereszke
+ereszkedik
+ereszkedés
+ereszkedõ
+ereszsátor
+ereszt
+eresztett
+ereszti
+eresztik
+ereszték
+eresztékesen
+eresztés
+eresztõgyalu
+eresztõpad
+eret
+eretnek
+eretnekek
+eretnekség
+erez
+erezet
+erezett
+eridj
+eridj!
+eriggy
+erjed
+erjedt
+erjedés
+erjeszt
+erjesztetlenül
+erjesztett
+erjesztés
+erjesztõ
+erjesztõkádba
+erkély
+erkélyt
+erkölcs
+erkölcsbíró
+erkölcsbölcselõ
+erkölcsi
+erkölcsileg
+erkölcsiség
+erkölcsprédikációt
+erkölcsprédikáló
+erkölcsprédikátor
+erkölcsrontás
+erkölcstan
+erkölcstanító
+erkölcstelen
+erkölcstelenség
+erkölcsök
+erkölcsökre
+erkölcsös
+erkölcsösen
+erkölcsössé
+erkölcsösség
+erkölcsû
+ernyedt
+ernyedten
+ernyedtség
+ernyõ
+ernyõs
+ernyõz
+erodál
+erogén
+erotika
+erotikus
+erotizmus
+erotománia
+erotomániás
+errata
+erre
+erre-arra
+erre?
+errõl
+erszény
+erszénye
+erszényes
+erudíció
+erély
+erélyes
+erélyesen
+erélyeskedik
+erélyesség
+erélytelen
+erélytelenség
+erélytelenül
+erény
+erényes
+erényt
+erényöv
+erózió
+eróziót
+erõ
+erõbedobással
+erõben
+erõbevetésû
+erõbõl
+erõd
+erõddel
+erõdház
+erõdvonal
+erõdített
+erõdítmény
+erõdítmények
+erõdítés
+erõdítési
+erõdök
+erõdöt
+erõegyenköz
+erõfeszítés
+erõfeszítéseimet
+erõfeszítéseit
+erõfeszítések
+erõfeszítéssel
+erõfeszítést
+erõforrás
+erõforrások
+erõgép
+erõiket
+erõk
+erõkifejtés
+erõleves
+erõlködik
+erõlködni!
+erõlködés
+erõltesd
+erõltet
+erõltetett
+erõltetetten
+erõlteti
+erõltetés
+erõmet
+erõmû
+erõnek
+erõnlét
+erõnlétben
+erõparalelogramma-tétel
+erõpróbára
+erõpár
+erõre
+erõs
+erõs,
+erõsebb
+erõsebben
+erõsebbet?
+erõsebbnek
+erõsen
+erõsnek
+erõssé
+erõsség
+erõssége
+erõszak
+erõszakhoz
+erõszakkal
+erõszakmentesség
+erõszaknak
+erõszakol
+erõszakolt
+erõszakos
+erõszakosan
+erõszakoskodik
+erõszakoskodás
+erõszakoskodó
+erõszakosság
+erõszakot
+erõszaktól
+erõsít
+erõsíteni
+erõsített
+erõsíthetõ
+erõsíti
+erõsítve
+erõsítés
+erõsítõ
+erõsödik
+erõsödés
+erõsödõ
+erõt
+erõteljes
+erõteljesen
+erõteljesség
+erõtlen
+erõtlennek
+erõtlenné
+erõtlenség
+erõtlenítõ
+erõtlenül
+erõtér
+erõtõl
+erõvel
+erõviszonyok
+erõvonal
+erõátvitel
+erõátviteli
+esdekel
+esdekelve
+esedezik
+esedezés
+esedékes
+esedékessé
+esedékesség
+eselék
+esemény
+eseménydús
+eseménye
+eseményei
+eseményeit
+események
+események?
+eseményekbõl?
+eseményekre
+eseményre
+eseménysorozat
+eseményszámba
+eseménytelen
+eseménytelenül
+eseménytõl
+esendõ
+esendõség
+esernyõ
+esernyõborda
+esernyõtartó
+eset
+esetben
+esetben,
+esete
+esetek
+esetekben
+esetem
+esetenként
+esetenkénti
+esetet
+esetleg
+esetleges
+esetlegesen
+esetlen
+esetlenség
+esetlenül
+esetnapló
+esetre
+esett
+esettanulmány
+esetén
+esetére
+eshetõség
+esik
+esik,
+esik...
+esketési
+eskór
+eskü
+esküdt
+esküdtbíróság
+esküdtek
+esküdtek!
+esküdtnévsor
+esküdtszék
+esküdtszéki
+esküjét
+esküszik
+esküszöm
+esküszöm,
+esküt
+eskütevés
+esküvel
+esküvés
+esküvõ
+esküvõi
+esnek
+esni
+essen
+essetek
+esszé
+esszéista
+essünk
+est
+este
+este?
+estebéd
+estek
+esteledik
+estem
+esthajnal
+esti
+estig
+estéjén
+estély
+estélyi
+estélyt
+estére
+estét
+estét!
+esve
+esze
+eszed
+eszed!
+eszedbe
+eszedbe?
+eszednél!
+eszeget
+eszel
+eszelõs
+eszem
+eszem!
+eszem-iszom
+eszem-iszommal
+eszembe
+eszembe,
+eszemben
+eszemen
+eszencia
+eszerint
+eszes
+eszesen
+eszesség
+eszeveszett
+eszeveszetten
+eszi
+eszik
+eszik-iszik
+eszkaláció
+eszkimó
+eszkimófordulás
+eszképista
+eszképizmus
+eszköz
+eszköze
+eszközei
+eszközként
+eszközt
+eszközök
+eszközökhöz
+eszközöl
+eszme
+eszmecsere
+eszmei
+eszmeszegény
+eszméivel
+eszmék
+eszmékben
+eszmékhez
+eszméletlen
+eszméletlenség
+eszméletlenséggel
+eszméletlenül
+eszméletre
+eszméletvesztés
+eszméletét
+eszményi
+eszményien
+eszménykép
+eszményít
+eszpresszó
+esztelen
+esztelenül
+esztendõ
+esztendõk
+eszterga
+esztergaforgács
+esztergakés
+esztergamenesztõ
+esztergapad
+esztergaszíj
+esztergaszív
+esztergál
+esztergált
+esztergályos
+esztergályoz
+esztergályozatlan
+esztergályozott
+esztergályozás
+esztergályozó
+esztergálás
+eszterhéj
+esztrádmûsor
+esztéta
+esztétikai
+eszébe
+eszén
+eszénél
+eszét
+eszét,
+eszû
+esély
+esélye
+esélyeit
+esélyem
+esélyes
+esélytelenebb
+esélyük
+esés
+esésveszteség
+esésû
+esõ
+esõben
+esõcsatorna
+esõcsepp
+esõcseppek
+esõerdõ
+esõfelhõ
+esõgyûjtõ
+esõkabát
+esõkalap
+esõköpeny
+esõre
+esõs
+esõsapka
+esõt
+esõtõl
+esõvizes
+esõvíz
+esõvíz-csatorna
+esõvízcsatorna
+esõvízgyûjtõ
+esõvízgödör
+esõálló
+etamin
+etap
+etet
+eteti
+etetés
+etetésû
+etetõ
+etetõ-görgõs
+etetõtölcsér
+etetõvályú
+etika
+etikátlan
+etilbenzol
+etilén
+etnikai
+etnológiai
+etnológus
+ette
+ettem!
+ettõl
+etyepetye
+etán
+etén
+etûd
+eufemisztikus
+eufonikus
+euforiás
+eufémizmus
+eufónia
+eufória
+eufórikus
+eugenetika
+euritmia
+eurázsiai
+európai
+eutektikum
+eutektikus
+eutektoid
+eutektoidos
+euthanázia
+eutrofizáció
+eutrofizálódás
+eutróf
+eutrófia
+evakuál
+evakuált
+evakuálás
+evakuálása
+evangelizál
+evangelizátor
+evangélikus
+evangélista
+evangélium
+evangéliumi
+evangéliumot
+evez
+evezni
+evezés
+evezésben
+evezést
+evezõ
+evezõcsapás
+evezõcsapást
+evezõket
+evezõlapát
+evezõlapát-kengyel
+evezõláb
+evezõnyél
+evezõrúd
+evezõs
+evezõsor
+evezõspad
+evezõt
+evezõtoll
+evezõtollak
+evezõvel
+evezõversenyen
+evezõvilla
+evickél
+evidenciában
+evidens
+evilági
+evolúció
+evolúciós
+evégbõl
+evés
+evés-ivás
+evés-ivással
+evésre
+evéssel
+evést
+evést-ivást
+evészet
+evõ
+evõeszköz
+evõeszköz-
+evõeszköztartó
+evõeszköztámasz
+evõeszközök
+evõkanál
+evõkanálnyi
+evõpálcikák
+excenter
+excenteres
+excenterprés
+excentertengely
+excentertárcsa
+excentricitás
+excentrikus
+exergonikus
+exhibicionista
+exhibicionizmus
+exhumál
+exhumálás
+exkavátor
+exoterm
+exotermikus
+expanzionista
+expanzió
+expanziójú
+expanziós
+expanzív
+expeditív
+expedíció
+expedíciós
+exponens
+exponál
+exponált
+export
+exportból
+exportra
+exporttámogatás
+exportál
+expozé
+expozíció
+expressz
+expresszvonat
+expresszáruk
+exszikkáció
+extinkció
+extra
+extrahál
+extrahálható
+extrahálás
+extrakció
+extrakt
+extraktum
+extrapoláció
+extrapolál
+extrapolált
+extrapolálás
+extravagáns
+extremális
+extrovertált
+extrudálás
+extrém
+extázis
+extázisban
+ez!
+ez,
+ez-az
+ez?
+ezek
+ezekben
+ezekbõl
+ezeket
+ezekkel
+ezelõtt
+ezen
+ezenfelül
+ezenkívül
+ezennel
+ezentúl
+ezer
+ezerbõl
+ezerfontos
+ezerhez
+ezermester
+ezerszer
+ezideig
+ezoterikus
+ezred
+ezred-
+ezredbeosztás
+ezredes
+ezredet
+ezrediroda
+ezredparancsnok
+ezredrésze
+ezredtörzs
+ezredzenekar
+ezredév
+ezredéves
+ezrest
+ezret
+ezt
+ezt!
+ezt?
+ezután
+ezzel
+ezáltal
+ezért
+ezúttal
+ezüst
+ezüstdollár
+ezüstfehér
+ezüstfenyõ
+ezüstkicsapás
+ezüstlazac
+ezüstlevelû
+ezüstmoly
+ezüstnemû
+ezüstnitrát
+ezüstpénz
+ezüstróka
+ezüstszín
+ezüsttel
+ezüstvesszõ
+ezüstérc
+ezüstérme
+ezüstös
+ezüstösen
+ezüstöz
+ezüstözés
+ezüstözött
+eón
+f-kulcs
+fa-
+faalakban
+faalakot
+faanyag
+faanyaga
+faarc
+fabatka
+fabatkát
+faberakás
+fabetét
+faborítás
+faburkolat
+faburkolattal
+faburkolatú
+fabél
+fabödön
+facile
+facipõ
+facipõs
+facsar
+facsarás
+facsavar
+facsemete
+facsúszda
+facér
+fadarab
+fadugó
+faeper
+faerezés
+fafaragás
+fafaragó
+fafej
+fafejû
+fafejûség
+fafoggyalu
+faforgács
+faforgácslap
+faforgácslemez
+fafoszlató
+fafúvós
+fafúvósok
+faggyú
+faggyúdaganat
+faggyúfa
+faggyús
+faggyúz
+fagolyó
+fagott
+fagy
+fagyal
+fagyalbokor
+fagyapot
+fagyaszt
+fagyasztott
+fagyasztás
+fagyasztó
+fagydaganat
+fagylalt
+fagylaltféle
+fagylaltgombóc
+fagylaltos
+fagylaltréteg
+fagylalttölcsér
+fagymentesítõ
+fagyok
+fagyos
+fagyott
+fagypont
+fagyálló
+fagyás
+fagyáspont
+fagyáspontcsökkenés
+fagyöngy
+fahang
+fahasáb
+fahorog
+fahulladék
+faháncs
+faház
+fahéj
+faillesztés
+fair
+faiskola
+faj
+faj-
+fajankó
+fajansz
+fajanszedény
+fajanszáru
+fajdtyúk
+fajegészségtan
+fajgyûlölet
+fajhoz
+faji
+fajirtás
+fajkeresztezõdés
+fajlagos
+fajnemesítés
+fajok
+fajsúly
+fajta
+fajta)
+fajtaazonos
+fajtalan
+fajtalankodás
+fajtalankodó
+fajtalanság
+fajtiszta
+fajtája
+fajtájú
+fajták
+fajtázott
+fajtázás
+fajvédõ
+fajállat
+fajállattenyészet
+fajállattenyésztõ
+fajú
+fakad
+fakadás
+fakadó
+fakalapács
+fakanál
+fakapocs
+fakardja
+fakeretbe
+fakopács
+fakopáncs
+fakorong
+fakszimile
+faksznizás
+fakul
+fakult
+fakultatív
+fakultás
+fakulás
+fakuló
+faképnél
+fakéreg
+fakír
+fakít
+fakó
+fakóan
+fakóra
+faköpeny
+fal
+fala
+falain
+falak
+falakat
+falakon
+falanx
+falanyag
+falapát
+falat
+falatka
+falatnyi
+falatokat
+falatot
+falatozás
+falatozó
+falaz
+falazat
+falazott
+falazás
+falazó
+falba
+falba)
+falban
+falbedõlés
+falburkolat
+falburkoló
+falc
+falcli
+falcnyílás
+falcolás
+falemez
+falemezzel
+faleveleket
+falfehér
+falfehéren
+falfestmény
+falfirka
+falfülke
+falgyámoszlop
+falhorony
+fali
+falikárpit
+falikút
+falinaptár
+faliszekrény
+faliszõnyeg
+falióra
+faliújság
+falka
+falkakopó
+falkapocs
+falkavadász
+falkavadász-sapka
+falkavadászat
+falkavadászatra
+falkiszögellés
+falkiugrás
+falkárpitozás
+falkát
+falköz
+fallal
+fallosz
+falmezõ
+falmélyedés
+falnak
+falnyílás
+falombozat
+falpillér
+falra
+falragasz
+falragaszokkal
+falragaszon
+falragasztás
+fals
+falsos
+falsot
+falszegély
+falsík
+faltni
+faltól-falig
+faltörõ
+falu
+falucska
+faluhely
+falusi
+falusias
+falusiasság
+faluvége
+falvak
+falvastagság
+falvastagítás
+faláb
+falábazat
+faláda
+falánk
+falánkság
+falás
+falépítõ
+faló
+fametszet
+fametszés
+fametszõ
+famozaik
+famunka
+fanatikus
+fanatizmus
+fanfár
+fanosodás
+fanszõr
+fanszõrzet
+fantaszta
+fantasztikus
+fantasztikusan
+fantazmagória
+fantom
+fantom-
+fantomszerû
+fantázia
+fantázianév
+fantáziaszülte
+fantáziája
+fantáziák
+fantáziál
+fantáziálás
+fantáziátlan
+fanyalgás
+fanyar
+fanyarság
+fanyarul
+fanyesés
+faodú
+faoszlop
+fapadló
+fapalánkos
+fapárkány
+fapárkányos
+far
+far-
+fara
+farablás
+farad
+faraday
+faradizál
+faradizálás
+faradék
+farag
+faragatlan
+faragatlanság
+faragatlanul
+faragott
+faragták
+faragvány
+faragás
+faragással
+faragókasza
+farborda
+farevezõ
+farevezõvel
+farfa
+fari
+faridegzsába
+farigcsál
+farizeus
+farizeusi
+fark
+fark-
+farka
+farkas
+farkas-természetû
+farkasbab
+farkascápa
+farkasember
+farkasfog
+farkashal
+farkaskutya
+farkaskuvasz
+farkaskölyök
+farkasol
+farkasoló
+farkasordító
+farkasszerû
+farkasszõlõ
+farkastorok
+farkaséhes
+farkaséhség
+farkasétvágy
+farkasétvágya
+farkasétvágyú
+farkcsóválás
+farkhoz
+farkuszony
+farkvég
+farkát
+farkú
+farlapátkerekes
+farlámpa
+farm
+farmer
+farmerkodik
+farmernadrág
+farmervászon
+farmház
+farmmunkás
+farok
+farok-
+farokbálint
+farokgéppuska-torony
+farokhoz
+farokkal
+farokrész
+faroktájon
+farol
+farolt
+farolva
+farolás
+farontó
+farostlemez
+farral
+farsang
+farsangi
+fartájon
+fartõhegy
+faruszony
+farvitorla
+farvégi
+farzseb
+farzsába
+farádos
+faráig
+farán
+farával
+farönk
+farönk-fûrészelési
+farönkfûrészelõ
+farönköt
+farú
+farúd
+fasiszta
+fasizmus
+fasor
+fasz
+fasza
+faszeg
+faszeggel
+faszenet
+faszfej
+faszi
+faszikám
+faszilánk
+faszkalap
+faszobrot
+faszol
+faszszopó
+faszság
+faszállító
+faszárító
+faszén
+faszénesítés
+faszénégetés
+faszénítés
+fasíroz
+fasírozott
+fatalista
+fatalizmus
+fatalpú
+fatelep
+fatelepi
+fater
+fatetõ
+fattyaz
+fattyú
+fattyúhajtás
+fattyúhering
+fattyúzsineg
+fatuskó
+fatábla
+fatál
+fatális
+fatányér
+fatányéros
+fatömegfelvétel
+fatönk
+fatörzs
+fatörzs-lökés
+fatörzsbõl
+fatörzsvédõ
+fauna
+favorit
+favágó
+faváz
+favázas
+favödör
+fazekas
+fazekasagyag
+fazekaspad
+fazekasság
+fazekasáru
+fazekat
+fazetta
+fazettaalátét
+fazettál
+fazon
+fazék
+fazékba
+fazéknyi
+faág
+faágmintával
+faállomány
+faék
+faél
+faúsztató
+faúszóval
+februári
+fecsavarodik
+fecseg
+fecsegés
+fecsegõ
+fecske
+fecskefark
+fecskefark-csapolás
+fecskefark-csapolással
+fecskefark-illesztés
+fecskefarkkötés
+fecskefarkkötéssel
+fecskefarkú
+fecskefarok
+fecskendez
+fecskendezett
+fecskendõ
+fecskendõben
+fecskendõrózsa
+fecskendõt
+fecskendõvel
+fecsérel
+fecsérlés
+fecsérlõ
+fecsérlõen
+fed
+fedd
+feddhetetlen
+feddhetetlenség
+feddés
+fedele
+fedeles
+fedelesszárnyú
+fedelet
+fedelét
+fedetlen
+fedett
+fedez
+fedezet
+fedezetek
+fedezetlen
+fedezetlenül
+fedezett
+fedezettel
+fedezetéül
+fedeztet
+fedeztetés
+fedezzük
+fedezék
+fedezés
+fedezõ
+fedi
+fedél
+fedélborító
+fedéllel
+fedéllemez
+fedéllemezzel
+fedélprés
+fedélszék
+fedélzet
+fedélzeten
+fedélzetet
+fedélzeti
+fedélzetmester
+fedélzetpárkány
+fedélzetre
+fedélzetre!
+fedélzetrész
+fedélzetrõl
+fedélzettartó
+fedélzettel
+fedélzetén
+fedélzetére
+fedélzetív
+fedélzetívelés
+fedélzetû
+fedés
+fedõ
+fedõkõ
+fedõlap
+fedõlapja
+fedõnév
+fedõréteg
+fedõszerv
+fegyelem
+fegyelemsértés
+fegyelmet
+fegyelmez
+fegyelmezetlen
+fegyelmezetlenné
+fegyelmezetlenség
+fegyelmezetlenül
+fegyelmezett
+fegyelmezhetõ
+fegyelmezés
+fegyelmezõ
+fegyelmi
+fegyenc
+fegyenctelep
+fegyház
+fegyházõr
+fegyintézet
+fegyver
+fegyverbe
+fegyverbe!
+fegyverben
+fegyvercsattogás
+fegyvercsõ
+fegyvereit
+fegyverek
+fegyveres
+fegyvergyakorlat
+fegyvergyár
+fegyverhez
+fegyverkezik
+fegyverkezés
+fegyverkezési
+fegyverkovács
+fegyverként
+fegyverkísérlet
+fegyvermester
+fegyvernem
+fegyvernemekbõl
+fegyvernemhez
+fegyvernök
+fegyverraktár
+fegyverrel
+fegyverszünet
+fegyvert
+fegyvertelen
+fegyvertelenül
+fegyvertár
+fegyverviselés
+fegyverzet
+fegyverzetû
+fegyverzörej
+fegyverállvány
+fegyverével
+fegyõr
+fehér
+fehér-
+fehérbe
+fehérbádog
+fehércsalán
+fehéredik
+fehéreperfa
+fehéres
+fehérfejû
+fehérfoltos
+fehérfolyás
+fehérfém
+fehérfûz
+fehérgyümölcsûség
+fehérhanga-bokor
+fehérhere
+fehérhús
+fehérizzási
+fehérizzó
+fehérje
+fehérjelszint
+fehérjuhar
+fehérkorall
+fehérlevelû
+fehérmályva
+fehérmész
+fehérnemû
+fehérnemû-szekrény
+fehérnemûs
+fehérnyárfa
+fehérorosz
+fehérpettyes
+fehérruhás
+fehérré
+fehérrépa
+fehérszint
+fehérség
+fehérségek
+fehérsömör
+fehértölgy
+fehérvérsejt
+fehéráru
+fehérít
+fehérítetlen
+fehérítés
+fehérítõ
+fehérítõföld
+fehérítõkád
+fehérítõmûhely
+fehérítõszer
+fehérítõtartály
+fehérítõüzem
+fehérötvözet
+fej
+fej,
+fej-fej
+fejadag
+fejadagokra
+fejbe
+fejbecsapás
+fejben
+fejbeütés
+fejbiccentés
+fejbólintás
+fejbólintással
+fejbólintó
+fejbõr
+fejbúb
+fejbúbi
+fejcsóválás
+fejcsõ
+fejdísz
+feje
+fejed
+fejedbe?
+fejedelem
+fejedelemasszony
+fejedelemség
+fejedelmi
+fejel
+fejelés
+fejelõtégla
+fejem
+fejem!
+fejembõl
+fejembõl,
+fejemet!
+fejen
+fejenként
+fejenállás
+fejes
+fejesedik
+fejest
+fejesugrás
+fejet
+fejetlen
+fejetlenség
+fejetlenül
+fejez
+fejezet
+fejezetdísz
+fejezett
+fejezhetõ
+fejezi
+fejezte
+fejezõ
+fejfa
+fejfedõ
+fejfogás
+fejfájás
+fejfájása
+fejfátyol
+fejgerenda
+fejgörcs
+fejhallgató
+fejhang
+fejhosszal
+fejjel
+fejjel!
+fejkendõ
+fejkötõ
+fejkötõs
+fejlemény
+fejlemények
+fejleményeket
+fejleszt
+fejleszti
+fejlesztés
+fejlesztõ
+fejletlen
+fejletlenség
+fejlett
+fejlettség
+fejlábú
+fejléc
+fejlécrajzoló
+fejlõdik
+fejlõdnek
+fejlõdés
+fejlõdésben
+fejlõdése
+fejlõdési
+fejlõdésképes
+fejlõdésnek
+fejlõdéssel
+fejlõdését
+fejlõdõ
+fejlõdött
+fejmosás
+fejmozdulat
+fejnehéz
+fejoldal
+fejpályaudvar
+fejpánt
+fejrevaló
+fejsajt
+fejsze
+fejszerszám
+fejszéjét
+fejszöveg
+fejt
+fejtartó
+fejteget
+fejtegetés
+fejtetõ
+fejtetõi
+fejtetõre
+fejthetõ
+fejti
+fejtsd
+fejtámla
+fejtés
+fejtéshomlok
+fejtési
+fejtõ
+fejtõgödör
+fejtõkalapács
+fejtörés
+fejtörést
+fejtörõ
+fejvadász
+fejvadászat
+fejvesztett
+fejvesztetten
+fejvesztettség
+fejvesztettséget
+fejvesztés
+fejzömítõ
+fejébe
+fejében
+fejébõl
+fejéhez
+fején
+fejére
+fejés
+fejét
+fejét,
+fejével
+fejõgulyás
+fejõlegény
+fejõlány
+fejõstehén
+fejõszék
+fejõsök
+fejû
+fejüket
+fejünk
+fejünket
+fejünkre
+feka
+fekete
+fekete-erdõ
+fekete-tenger
+feketebors
+feketefejû
+feketefenyõ
+feketekávé
+feketekávézás
+feketekönyv
+feketelista
+feketelistán
+feketelistára
+feketepiac
+feketepofájú
+feketepontos
+feketeribiszke-likõr
+feketeribizli-likõrrel
+feketerigó
+feketeszemû
+feketeszén
+feketeség
+feketeségek
+feketesügér
+feketevasárnap
+feketeüszög
+feketében
+feketén
+feketére
+feketézik
+feketézõ
+feketítés
+fekhely
+fekhelye
+fekhelyes
+fekszik
+fektet
+fekteti
+fekve
+fekvés
+fekvése
+fekvésû
+fekvõ
+fekvõhely
+fekvõhengeres
+fekvõrendõr
+fekvõtámasz
+fekvõtámaszt
+fekáliák
+fekély
+fekélyekkel
+fekélyes
+fekélyesedés
+fekélyesség
+fekélyesítõ
+fekélyszerû
+fekélyt
+fekü
+feküdj!
+fekükõzet
+feküsznek
+fel
+fel!
+fel,
+fel-alá
+fel-felvillanás
+fel-le
+felad
+feladat
+feladata
+feladatkör
+feladatlap
+feladatnak
+feladatok
+feladatot
+feladattal
+feladatának
+feladatát
+feladja
+feladogat
+feladom
+feladott
+feladványt
+feladás
+feladási
+feladó
+feladóvevény
+felajz
+felajzott
+felajzottság
+felajánl
+felajánlja
+felajánlás
+felajánlást
+felakaszt
+felakasztják
+felakasztás
+felaprítás
+felavat
+felavatás
+felavatása
+felbecsül
+felbecsülhetetlen
+felbecsülhetetlenül
+felbecsülés
+felbillen
+felbillent
+felbirizgál
+felbiztat
+felbocsát
+felbolydulás
+felbomlaszt
+felbomlik
+felbomlott
+felbomlás
+felboncol
+felboncolás
+felbont
+felbontatlan
+felbontott
+felbontás
+felbontóképesség
+felborul
+felborultak
+felborulás
+felborzol
+felborzolja
+felborzolás
+felborzolódik
+felborít
+felborítható
+felborítja
+felborítás
+felborító
+felbosszant
+felbosszantás
+felbuggyanás
+felbugyog
+felbugyogás
+felbujt
+felbujtás
+felbujtó
+felbujtója
+felbukfencezett
+felbukfencezik
+felbukfencezés
+felbukik
+felbukkan
+felbukkanás
+felbukkanó
+felbuktat
+felbukás
+felbuzdul
+felbuzog
+felbátorodik
+felbátorít
+felbátorítás
+felbélyegez
+felbérelhetõ
+felbõr
+felbõszít
+felbõszítés
+felbõszül
+felbõszült
+felböfög
+felbújt
+felcicomáz
+felcicomázott
+felcicomázza
+felcicomázás
+felcipel
+felcsaliz
+felcsap
+felcsapható
+felcsapott
+felcsapó
+felcsarnakol
+felcsarnakolás
+felcsatol
+felcsatolja
+felcsavar
+felcsavarodik
+felcsavart
+felcseperedik
+felcser
+felcserél
+felcserélhetõ
+felcserélés
+felcserélése
+felcserélõdtek
+felcsigáz
+felcsillan
+felcsillanás
+felcsillanó
+felcsinál
+felcsipeget
+felcsákányoz
+felcsévél
+felcsévéz
+felcsíp
+felcsípett
+felcsörget
+felcsörög
+felcsúszik
+felcímkéz
+feldarabol
+feldarabolás
+felderít
+felderíti
+felderítés
+felderítést
+felderítõ
+felderül
+feldicsér
+feldicsérés
+feldicsérõ
+feldob
+feldobás
+feldobódik
+feldolgoz
+feldolgozatlan
+feldolgozott
+feldolgozás
+feldolgozása
+feldolgozó
+feldolgozódik
+feldolgozóegység
+feldolgozóipar
+feldombol
+feldrótoz
+felduzzaszt
+feldíszít
+feldíszítés
+feldõl
+feldõltek
+feldönt
+feldönthetõ
+feldörzsöl
+feldúcol
+feldúl
+feldúlt
+feldúsulás
+feldúsított
+feldúsítás
+feldûlés
+feldühít
+feldühíti
+feldühödik
+feldühödve
+feldühödött
+feldühösít
+fele
+felebarát
+felebaráti
+felebarátok
+feledkezik
+feledébe
+feledékeny
+feledékenység
+feledés
+feledésbe
+feledéstõl
+felegyenesedik
+felegyenesít
+felejt
+felejthetetlen
+felejts
+felejtse!
+felejtsem
+felejtsen
+felek
+felekezet
+felekezeti
+felel
+felelet
+felelete
+feleletet
+felelettel
+felelevenedik
+felelevenedés
+felelevenít
+felelevenítés
+felelevenítése
+felelget
+felelt
+feleltet
+felelés
+felelõ
+felelõs
+felelõse
+felelõssé
+felelõsség
+felelõsséget
+felelõsséggel
+felelõsségre
+felelõsségére
+felelõsségû
+felelõtlen
+felelõtlenség
+felemel
+felemeli
+felemelkedett
+felemelkedik
+felemelkedés
+felemelkedõ
+felemelt
+felemelés
+felemelõ
+felemelõdik
+felemleget
+felemás
+felemészt
+felemésztenek
+felenged
+felengedi
+felereszt
+felerész
+felerõsít
+felerõsítésû
+felerõsítõ
+felesben
+felesel
+feleselj!
+feleselés
+feleselõ
+felesket
+felesküdött
+felesleg
+felesleges
+feleslegesen
+feleslegessé
+feleslegesség
+feleség
+felesége
+feleségem
+feleségül
+felet
+felett
+felette
+felettes
+felettest
+feletti
+felettébb
+felez
+felezzünk!
+felezési
+felezõ
+felezõpont
+felezõvonal
+feleúton
+felfakad
+felfal
+felfalazás
+felfalás
+felfed
+felfedez
+felfedezett
+felfedezhetõ
+felfedezi
+felfedezés
+felfedezõ
+felfedezõdik
+felfedezõje
+felfedi
+felfedés
+felfedése
+felfedõ
+felfegyverez
+felfegyverezve
+felfegyverkezve
+felfegyverzett
+felfegyverzés
+felfejlõdik
+felfejlõdtet
+felfejlõdés
+felfejt
+felfekszik
+felfekvés
+felfekvési
+felfelé
+felfelé!
+felfeslett
+felfeslik
+felfeszít
+felfigyel
+felfog
+felfogad
+felfogadható
+felfoghatatlan
+felfoghatatlanság
+felfogható
+felfoghatóság
+felfogja
+felfogni
+felfogott
+felfogás
+felfogása
+felfogása,
+felfogásbeli
+felfogást
+felfogásában
+felfogását
+felfogású
+felfogó
+felfogóedény
+felfogóképesség
+felfokoz
+felfokozott
+felfordul
+felfordult
+felfordulás
+felfordulást
+felfordít
+felfordítható
+felfordított
+felfordítás
+felforgat
+felforgatott
+felforgatás
+felforgató
+felforr
+felforral
+felforralás
+felforrt
+felforrás
+felforró
+felfortyan
+felfrissít
+felfrissíti
+felfrissítõ
+felfrissül
+felfrissülés
+felfut
+felfuttat
+felfuttatott
+felfuttatás
+felfutó
+felfuvalkodik
+felfuvalkodott
+felfuvalkodottá
+felföld
+felföldi
+felfúj
+felfújható
+felfújja
+felfújt
+felfújás
+felfújódik
+felfúvódik
+felfúvódott
+felfúvódás
+felfúvódása
+felfûrészel
+felfûz
+felfûzött
+felfüggeszt
+felfüggesztett
+felfüggeszti
+felfüggesztik
+felfüggesztve
+felfüggesztés
+felfüggesztése
+felfüggesztõ
+felfüstölés
+felgerjed
+felgerjedt
+felgerjeszt
+felgombolyodik
+felgombolyít
+felgyorsul
+felgyorsulás
+felgyorsulási
+felgyorsít
+felgyullad
+felgyógyul
+felgyógyulás
+felgyújt
+felgyûr
+felgyûri
+felgyülemlett
+felgyülemlik
+felgöngyöl
+felgöngyölhetõ
+felgöngyölít
+felgöngyölõdik
+felgöngyölõdés
+felgördülése
+felhabosítás
+felhagy
+felhajlik
+felhajlás
+felhajlása
+felhajló
+felhajt
+felhajtható
+felhajtott
+felhajtás
+felhajtást
+felhajtó
+felhajtósáv
+felhajít
+felhalmoz
+felhalmozott
+felhalmozás
+felhalmozódik
+felhalmozódás
+felhang
+felhangol
+felhangosít
+felhangot
+felhantol
+felhasad
+felhasadás
+felhasogat
+felhasznál
+felhasználatlan
+felhasználhatatlan
+felhasználható
+felhasználhatóság
+felhasználja
+felhasznált
+felhasználás
+felhasít
+felhatalmaz
+felhatalmazott
+felhatalmazás
+felhevít
+felhevül
+felhevült
+felhevülve
+felhevülés
+felhigítatlan
+felhint
+felhizlal
+felhord
+felhordó
+felhorgosít
+felhorkan
+felhorkant
+felhorzsol
+felhorzsolja
+felhorzsolás
+felhorzsolása
+felhorzsolódik
+felhorzsolódás
+felhorzsolódása
+felhoz
+felhozni
+felhozott
+felhurcol
+felháborodik
+felháborodott
+felháborodás
+felháborodástól
+felháborodásában
+felháborodásának
+felháborít
+felháborító
+felháborítóan
+felhám
+felhám-
+felhány
+felhánytorgat
+felhígít
+felhígított
+felhív
+felhívat
+felhívja
+felhívlak
+felhívás
+felhívást
+felhólyagosodott
+felhólyagosodás
+felhólyagzik
+felhólyagzás
+felhõ
+felhõbe
+felhõfoszlány
+felhõfoszlányok
+felhõk
+felhõkakukkvár
+felhõkarcoló
+felhõket
+felhõktõl
+felhõkön
+felhõnukleálás
+felhõpad
+felhõs
+felhõssé
+felhõszakadás
+felhõszakadással
+felhõsödik
+felhõtaraj
+felhõtlen
+felhörpint
+felhúroz
+felhúrozó
+felhúz
+felhúzott
+felhúzza
+felhúzás
+felhúzása
+felhúzó
+felhúzódzkodik
+felhúzódás
+felhúzókötél
+felhúzós
+felidegesít
+felidéz
+felidézi
+felidézés
+felidézõ
+felijed
+felindulás
+felingerel
+felingerli
+felingerlés
+felingerlõdik
+felinja
+felirat
+felirata
+feliratkozik
+feliratos
+feliratot
+feliratoz
+felirattal
+felismer
+felismerhetetlen
+felismerhetõ
+felismerhetõség
+felismeri
+felismert
+felismerés
+feliszapol
+feliszapolással
+feliszapolódás
+felitat
+felizgat
+felizgatható
+felizgatja
+felizgatta
+felizgatás
+felizgató
+felizgul
+felizgult
+felizgulás
+feljajdulnak
+feljavul
+feljavít
+feljavítás
+feljebb
+feljebbvaló
+feljegyez
+feljegyezteti
+feljegyzik
+feljegyzés
+feljegyzések
+feljegyzést
+feljelent
+feljelenti
+feljelentés
+feljelentést
+feljelentéstõl
+feljelentõ
+feljogosít
+feljogosított
+feljut
+feljuttat
+feljáró
+feljõdésben
+feljön
+feljött
+felkampósít
+felkantároz
+felkap
+felkapaszkodik
+felkapaszkodni
+felkapaszkodott
+felkapja
+felkapott
+felkapottá
+felkar
+felkarcolás
+felkattintja
+felkavar
+felkavarja
+felkavarodik
+felkavarodó
+felkavart
+felkavartan
+felkavaró
+felkavaróan
+felkefél
+felkefélés
+felkel
+felkelni
+felkelt
+felkelti
+felkelés
+felkelési
+felkelõ
+felken
+felkent
+felkenés
+felkerekít
+felkeres
+felkever
+felkeveri
+felkiált
+felkiáltás
+felkiáltójel
+felkoncolásán
+felkopik
+felkorbácsolja
+felkunkorodik
+felkunkorodó
+felkurbliz
+felkutat
+felkutatás
+felkutatására
+felkér
+felkéredzkedik
+felkérés
+felkérõdzött
+felkészít
+felkészített
+felkészítés
+felkészül
+felkészült
+felkészültség
+felkészültséggel
+felkészülve
+felkészülés
+felkínál
+felkínált
+felköhög
+felköszönt
+felköszöntõ
+felköszöntött
+felköt
+felköti
+felkötött
+felkúszik
+felküld
+felküzdi
+fellazít
+fellazítja
+fellebbenti
+fellebbez
+fellebbezés
+fellebbezésnek
+fellebbezõ
+fellebbviteli
+felleg
+fellegekben
+fellegvár
+fellelkesedik
+fellelkesedés
+fellelkesít
+fellelkesítette
+fellelkesült
+fellendít
+fellendítés
+fellendül
+fellendülés
+fellendülést
+fellengzõs
+fellengzõsség
+fellobban
+fellobbant
+fellobbanás
+fellobog
+fellobogóz
+fellobogózott
+fellobogózva
+fellobogózás
+fellovagol
+felloval
+felluvol
+felláció
+fellációt
+fellángol
+fellángolás
+fellármáz
+fellázad
+fellázadás
+fellázítja
+fellélegzik
+fellép
+felléptet
+fellépés
+fellépéssel
+fellépését
+fellépõ
+fellök
+fellövés
+felmagasztal
+felmagasztalás
+felmagasztosít
+felmagasít
+felmagzott
+felmar
+felmarkol
+felmegy
+felmelegedik
+felmelegedés
+felmelegszik
+felmelegít
+felmelegített
+felmelegítette
+felmelegíti
+felment
+felmentett
+felmentés
+felmentõ
+felmenõ
+felmered
+felmerül
+felmerülés
+felmerülõ
+felmetsz
+felminõsít
+felmond
+felmondanak
+felmondta
+felmondták
+felmondás
+felmordul
+felmorzsol
+felmos
+felmosó
+felmosórongy
+felmosóval
+felmotolláló
+felmozdonyoz
+felmutat
+felmutatás
+felmutatása
+felmutatására
+felmáglyáz
+felmászik
+felmászás
+felmér
+felmérgesít
+felméri
+felmérés
+felmérése
+felmérõ
+felnagyít
+felnagyított
+felnagyítva
+felnevel
+felnyal
+felnyergel
+felnyerít
+felnyit
+felnyitható
+felnyitja
+felnyitotta
+felnyitója
+felnyom
+felnyomul
+felnyurgul
+felnyársal
+felnyílik
+felnyúl
+felnyúlt
+felnyúló
+felnégyel
+felnémet
+felnéz
+felnõ
+felnõtt
+felnõttek
+felnõttkor
+felocsúdik
+felokosít
+felold
+feloldható
+feloldja
+feloldott
+feloldoz
+feloldozás
+feloldás
+feloldó
+feloldódik
+feloldódás
+feloldójel
+felolvad
+felolvasott
+felolvaszt
+felolvasás
+felolvasása
+felolvasást
+felolvasó
+felorsóz
+feloszlat
+feloszlatás
+feloszlik
+feloszlás
+feloszt
+felosztályoz
+felosztás
+felosztása
+felparcelláz
+felparcellázás
+felpattan
+felpattant
+felpattanás
+felpattogzik
+felpeckel
+felperes
+felperzselt
+felperzselés
+felpezsdít
+felpezsdíti
+felpezsdítés
+felpezsdítõ
+felpezseg
+felpiperéz
+felpiszkál
+felpiszkált
+felpofoz
+felpróbál
+felpuffad
+felpuffadt
+felpuffadás
+felpuffaszt
+felpumpál
+felpáncéloz
+felpénz
+felpócol
+felpörget
+felpúposodik
+felragad
+felragaszt
+felragasztás
+felragyog
+felragyogott
+felrajzol
+felrak
+felrakás
+felrakó
+felrakógép
+felravataloz
+felravatalozták
+felreped
+felrepedezett
+felrepedés
+felrepeszt
+felrepített
+felrepül
+felriad
+felriaszt
+felriasztott
+felrobban
+felrobbant
+felrobbantható
+felrobbanás
+felrohan
+felruház
+felruházás
+felránt
+felrántás
+felráz
+felrázta
+felrázza
+felrázó
+felrázódik
+felró
+felróható
+felröffen
+felröfög
+felröppen
+felröppenés
+felröpít
+felrúg
+felsebez
+felsegít
+felserken
+felserkent
+felslankolással
+felsorakozik
+felsorakoztat
+felsorakoztatás
+felsorakozva
+felsorakozás
+felsorol
+felsorolatlan
+felsorolás
+felsorolási
+felsrófol
+felsudárvitorla
+felszabadul
+felszabadult
+felszabadulás
+felszabadít
+felszabadítható
+felszabadított
+felszabadítás
+felszabadító
+felszabályoz
+felszaggat
+felszakad
+felszakadás
+felszakít
+felszakító
+felszalad
+felszaporodik
+felszarvaz
+felszarvazott
+felszed
+felszedeget
+felszedett
+felszedi
+felszedve
+felszedés
+felszedõ
+felszegez
+felszel
+felszeletel
+felszentel
+felszentelt
+felszentelés
+felszentelõ
+felszerel
+felszereletlen
+felszereli
+felszerelt
+felszerelés
+felszerelések
+felszerelési
+felszereléssel
+felszerelõ
+felszerszámoz
+felszippant
+felszivattyúz
+felszolgál
+felszolgálás
+felszolgáló
+felszáguld
+felszáll
+felszállás
+felszállási
+felszállást
+felszálló
+felszállócsõ
+felszállóhely
+felszámol
+felszámolás
+felszámolása
+felszámoló
+felszámít
+felszámítható
+felszámításával
+felszánt
+felszántatlan
+felszárad
+felszárnyal
+felszín
+felszíne
+felszínen
+felszínes
+felszínesen
+felszíngörbület
+felszíni
+felszínre
+felszínén
+felszínére
+felszítja
+felszív
+felszívás
+felszívó
+felszívóanyag
+felszívódik
+felszívódás
+felszólal
+felszólalás
+felszólít
+felszólítás
+felszólításra
+felszólító
+felszökik
+felszökken
+felszöktek
+felszöktet
+felszúr
+felsámfáz
+felség
+felsége
+felségeik
+felséges
+felségesen
+felségjel
+felségjog
+felségjogok
+felségterület
+felségvizek
+felségárulás
+felségül
+felsért
+felsértés
+felsóhajt
+felsõ
+felsõ-skóciai
+felsõbb
+felsõbbrendû
+felsõbbrendûség
+felsõbbrendûségét
+felsõbbség
+felsõfok
+felsõfokú
+felsõhang
+felsõház
+felsõkabát
+felsõlégkör
+felsõoktatás
+felsõoktatási
+felsõosztályos
+felsõpályás
+felsõrész
+felsõrész-sámfa
+felsõsudár-tarcsvitorla
+felsõsudárvitorla
+felsõtest
+felsõvetülék
+felsõvezeték
+felsõvezeték-szorító
+felsõvezeték-tartó
+felsõárboc-merevítõ
+felsúrol
+felsült
+felsülés
+feltalál
+feltalálja
+feltalálás
+feltaláló
+feltart
+feltartani
+feltartás
+feltartóztat
+feltartóztatják
+feltartóztatás
+feltartóztató
+feltehetõ
+feltehetõen
+felteker
+feltekercsel
+feltekeredik
+felterjesztés
+felterjesztést
+feltesz
+felteszi
+feltett
+feltevés
+feltevése
+feltevésen
+feltevést
+feltisztul
+feltol
+feltollaz
+feltolul
+feltorlaszol
+feltorlódás
+feltornyosodik
+feltornyosul
+feltornyoz
+feltornássza
+feltrancsíroz
+feltálal
+feltámad
+feltámadás
+feltámadása
+feltámaszt
+feltámasztja
+feltámasztott
+feltámasztva
+feltámasztás
+feltámasztó
+feltápászkodik
+feltár
+feltárja
+feltárás
+feltárása
+feltáró
+feltép
+feltérképez
+feltétel
+feltételei
+feltételek
+feltételeket
+feltételekhez
+feltételekkel
+feltételes
+feltételesen
+feltételez
+feltételezett
+feltételezhetõ
+feltételezhetõen
+feltételezve
+feltételezés
+feltétellel,
+feltételt
+feltétlen
+feltétlenség
+feltétlenül
+feltétlenül!
+feltéve
+feltéve,
+feltölt
+feltölti
+feltöltés
+feltöltõ
+feltöltõdik
+feltöltöttség
+feltör
+feltöri
+feltörlõrongy
+feltörés
+feltörõ
+feltörõje
+feltöröl
+feltúr
+feltúráztat
+feltûnik
+feltûnni
+feltûnés
+feltûnéskeltés
+feltûnést
+feltûnõ
+feltûnõen
+feltûnõség
+feltûnõvé
+feltûr
+feltûrt
+feltûz
+feltûzi
+feltûzésére
+feltûzött
+feltünedezõ
+feltüntet
+feltüntetni
+feltüntetés
+feltüzel
+felugrat
+felugrik
+feluszít
+felvarr
+felvarratja
+felvehetõ
+felver
+felveri
+felvert
+felvesz
+felveszi
+felveszik
+felveszünk
+felvet
+felveti
+felvett
+felvetõborda
+felvetõdik
+felvetõgép
+felvetõhenger
+felvevés
+felvevõ
+felvevõcsõ
+felvevõgép
+felvevõgépet
+felvevõkocsi
+felvevõképesség
+felvevõkészülék
+felvezetõ
+felvidul
+felvidámít
+felvidék
+felvidéki
+felvidít
+felvidítás
+felvidító
+felvigyázó
+felvillan
+felvillant
+felvillanyoz
+felvillanyozott
+felvillanyozás
+felvillanyozódik
+felvillanyozódás
+felvillanás
+felvillanó
+felvilágosodás
+felvilágosult
+felvilágosít
+felvilágosítás
+felvilágosítással
+felvilágosítást
+felvilágosító
+felvirrad
+felvirágoztat
+felvirágzik
+felvirágzás
+felvisz
+felvitte
+felvizez
+felvon
+felvonja
+felvonszol
+felvont
+felvontat
+felvonul
+felvonultat
+felvonulás
+felvonulásban
+felvonás
+felvonásköz
+felvonásvégi
+felvonó
+felvonóbak
+felvonóhíd
+felvonóveder
+felvág
+felvágatlan
+felvágott
+felvágták
+felvágás
+felvágása
+felvágó
+felvágós
+felvágósan
+felvált
+felváltja
+felváltva
+felváltás
+felváltó
+felvásárlás
+felvásárlással
+felvásárló
+felvásárol
+felvásárolja
+felvázol
+felvázolás
+felvértez
+felvértezett
+felvértezi
+felvétel
+felvétele
+felvételi
+felvételt
+felvételét
+felvétet
+felvéteti
+felvíz
+felvíz-oldali
+felvízcsatorna
+felvízi
+felzaklat
+felzavar
+felzavart
+felzet
+felzárkózik
+felzúdul
+felzúdulás
+felágaskodó
+feláldoz
+feláldozható
+feláldozza
+feláll
+felállás
+felállít
+felállított
+felállítva
+felállítás
+felállítása
+felálló
+felár
+feláramlás
+felárbocoz
+felárral
+felás
+felásás
+felázott
+felé
+felében
+felébred
+felébredek
+felébredt
+felébredt,
+felébreszt
+felébresztett
+felégetett
+felégeti
+feléje
+felékel
+felékelés
+felékesít
+felékesítve
+felékszerez
+felékszerezett
+felél
+feléled
+feléledés
+feléleszt
+felélesztés
+felélesztõ
+felélénkít
+felélénkítés
+felélénkül
+felélénkült
+felélés
+felénk
+felépít
+felépített
+felépítmény
+felépítménye
+felépítés
+felépítése
+felépítésû
+felépítõ
+felépül
+felépülés
+felér
+feléred
+felérni
+felértékel
+felével
+felír
+felírja
+felírás
+felírásra
+felõl
+felõle
+felõli
+felõrli
+felõrlõdése
+felöklel
+felöklendez
+felölel
+felölelõ
+felölez
+felölt
+felöltõ
+felöltõszövet
+felöltözik
+felöltöztet
+felönt
+felöntés
+felötlik
+felötlött
+felövez
+felújul
+felújult
+felújuló
+felújít
+felújítható
+felújított
+felújítás
+felújítása
+felújítási
+felújító
+felúszó
+felüdít
+felüdítés
+felüdítõ
+felüdülés
+felügyel
+felügyelet
+felügyelete
+felügyeleti
+felügyelés
+felügyelõ
+felügyelõje
+felügyelõnõ
+felügyelõnõi
+felügyelõség
+felül
+felülcsapó
+felület
+felület-megmunkálás
+felületaktív
+felületbõl
+felületen
+felületes
+felületesen
+felületesség
+felületességgel
+felületet
+felületi
+felületközi
+felületrezgés
+felületén
+felületét
+felületû
+felüli
+felüljáró
+felülkerekedik
+felülmúl
+felülmúlhatatlan
+felülmúlhatatlanul
+felülmúlni
+felülmúló
+felülmúlóan
+felülni
+felülnézet
+felülrõl
+felülsõ
+felült
+felülterhes
+felültet
+felülvezérelt
+felülvilágító
+felülvizsgál
+felülvizsgálat
+felülvizsgálás
+felülvonás
+felülúszó
+felüt
+felüti
+felütés
+feminista
+fen
+fene
+fene!
+feneette
+fenegyerek
+feneke
+feneket
+feneketlen
+feneketlenül
+fenekébe
+fenekén
+fenekére
+fenekét
+fenekével
+fenekû
+fenemód
+fenevad
+fenevadak
+feni
+fenn
+fennakad
+fennakadás
+fennhangon
+fennhatóság
+fennhordja
+fennhéjazva
+fennhéjazás
+fennhéjazó
+fennhéjazóan
+fennhéjázás
+fennhéjázó
+fennhéjázóan
+fennkölt
+fennkölten
+fennköltség
+fennmarad
+fennmaradni
+fennmaradás
+fennmaradása
+fennmaradó
+fennsík
+fennsõbbség
+fenntart
+fenntartja
+fenntartott
+fenntartva
+fenntartás
+fenntartási
+fenntartással
+fenntartásához
+fenntartó
+fennáll
+fennállás
+fennálló
+fenol
+fenolgyanta-anyag
+fenomenális
+fenség
+fensége
+fenséged
+fenséges
+fenségesen
+fensõbbséges
+fent
+fentebb
+fenti
+fentiek
+fentiekben
+fentrõl
+fenyeget
+fenyegeti
+fenyegetés
+fenyegetésekkel
+fenyegetésnek
+fenyegetéstõl
+fenyegetõ
+fenyegetõen
+fenyegetõzik
+fenyves
+fenyér
+fenyít
+fenyíték
+fenyítés
+fenyítõ
+fenyõ
+fenyõerdõ
+fenyõfa
+fenyõgyantás
+fenyõtoboz
+fenyõtû
+fenébe
+fenébe!
+fenék
+fenékbe
+fenékborítást
+fenéken
+fenékhossz-merevítõ
+fenékháló
+fenékhálós
+fenékhálóval
+fenéki
+fenékig
+fenékkaparó
+fenékkel
+fenékkotró
+fenékkötél
+fenéklap
+fenékmérõ
+fenékre
+fenéksúly
+fenéktalaj
+fenéktér
+fenékvonóháló
+fenékvíz
+fenés
+fenét
+fenét!
+fenõacél
+fenõkõ
+fenõszíj
+ferde
+ferdeszög
+ferdeszögben
+ferdeség
+ferdén
+ferdére
+ferdéz
+ferdít
+ferdül
+ferencesek
+fergeteges
+fergetegesen
+fermata
+fertály
+fertálya
+fertálymester
+fertõtlenít
+fertõtlenítés
+fertõtlenítõszer
+fertõz
+fertõzés
+fertõzéses
+fertõzésgátló
+fertõzési
+fertõzésmentes
+fertõzésre
+fertõzõ
+fertõzõdik
+fertõzött
+feslett
+feslettség
+fess
+fest
+festetlen
+festett
+festi
+festmény
+festék
+festék-
+festékes
+festéket
+festékez
+festékezõ
+festékezõhenger
+festékkel
+festékpárna
+festékréteg
+festékszóró
+festéktál
+festékárus
+festés
+festészet
+festésû
+festõ
+festõanyag
+festõdik
+festõdés
+festõfa
+festõfû
+festõhenger
+festõi
+festõk
+festõkád
+festõmûvész
+festõpác
+festõsablon
+festõállvány
+feszeng
+feszengés
+feszengéssel
+feszes
+feszesebbé
+feszesen
+feszesre
+feszesség
+feszke
+feszmérõ
+fesztelen
+fesztelenség
+fesztelenítés
+fesztelenül
+fesztáv
+fesztávolság
+feszélyez
+feszélyezett
+feszélyezettség
+feszélyezve
+feszít
+feszítetlen
+feszített
+feszítés
+feszítéslazulás
+feszítõ
+feszítõcsavar
+feszítõcsavar-anya
+feszítõerejû
+feszítõerõ
+feszítõgyûrû
+feszítõgörgõ
+feszítõizom
+feszítõkészülék
+feszítõkötél
+feszítõrúd
+feszítõrúddal
+feszítõszerkezet
+feszítõvas
+feszítõvassal
+feszül
+feszület
+feszült
+feszültek
+feszülten
+feszültség
+feszültségcsökkentõ
+feszültségemelkedés
+feszültségesés
+feszültséget
+feszültséggel
+feszültséghiány
+feszültségmentesítés
+feszültségmérõ
+feszültségnövelõ
+feszültségosztó
+feszülés
+feszülõ
+fetisizmus
+fetisizálás
+fetisizáló
+fetreng
+fetrengés
+fett
+feudális
+fez
+fia
+fiacskám
+fiam
+fiaskó
+fiatal
+fiatalabb
+fiatalabb,
+fiatalabbak
+fiatalabbik
+fiatalasszony
+fiatalember
+fiatalkori
+fiatalkorú
+fiatalnak
+fiatalok
+fiatalokat
+fiatalon
+fiatalos
+fiatalság
+fiatalságnak
+fiatalító
+fiatalúr
+fibrillálás
+ficam
+fickándozik
+fickándozás
+fickó
+fickó!
+fickós
+ficánkol
+ficánkolás
+fidibusz
+fifikával
+figura
+figyel
+figyelem
+figyelem!
+figyelembe
+figyelembevétel
+figyelembõl
+figyelemfelkeltõ
+figyelemmel
+figyelemre
+figyeli
+figyelj
+figyelj!
+figyeljen!
+figyeljenek
+figyelmemet
+figyelmen
+figyelmes
+figyelmesen
+figyelmesség
+figyelmességekkel
+figyelmet
+figyelmetlen
+figyelmetlenség
+figyelmetlenségbõl
+figyelmetlenül
+figyelmeztet
+figyelmeztetett
+figyelmeztetik
+figyelmeztetés
+figyelmeztetésemnek
+figyelmeztetésül
+figyelmeztetõ
+figyelmét
+figyelés
+figyelése
+figyelési
+figyelõ
+figyelõegység
+figyelõnyílása
+figyelõosztag
+fikció
+fiktív
+filagória
+filantróp
+filantrópia
+filantrópus
+filatélia
+filc
+filctoll
+filigrán
+filiszter
+filiszteri
+filiszterség
+filiszteus
+fillér
+fillérekért
+filléres
+fillért
+film
+filmben
+filmbõl
+filmek
+filmelõzetes
+filmen
+filmet
+filmez
+filmezés
+filmfelirat
+filmfelvevõ
+filmfelvétel
+filmhíradó
+filmipar
+filmjelenet
+filmkocka
+filmkópia
+filmmûvészet
+filmnovella
+filmoperatõr
+filmre
+filmrepríz
+filmretus-eljárás
+filmszalag
+filmtekercs
+filmtrükk
+filmvágó
+filodendron
+filozófiai
+filozófikus
+filozófikusan
+filozófus
+filozófusi
+filteres
+filé
+filézik
+filézés
+filózik
+finanszíroz
+finanszírozó
+finesz
+fing
+fingik
+finn
+finnyás
+finnyásan
+finnyáskodik
+finnyásság
+finom
+finoman
+finoman!
+finombeállító
+finomkodik
+finomkodva
+finomkodás
+finomkodó
+finomlemez
+finommechanika
+finomodik
+finomra
+finomság
+finomsági
+finomságú
+finomul
+finomít
+finomítatlan
+finomított
+finomítvány
+finomítás
+finomító
+fintor
+fintorgatja
+fintorog
+fintorokat
+fintort
+fintorít
+fintorítja
+finálé
+finánc
+fiola
+fioritúra
+firka
+firkant
+firkantás
+firkál
+firkálgat
+firkálgatás
+firkálás
+firkáló
+firkász
+firnisz
+firniszfa
+firniszol
+firniszszömörce
+firtassuk
+firtat
+fitogtat
+fitogtatja
+fitogtatás
+fitos
+fitt
+fittyet
+fityeg
+fityegõ
+fitying
+fityingje
+fityiszt
+fitymál
+fitymálás
+fityula
+fivér
+fix
+fixatõr
+fixköltség
+fixáció
+fixál
+fixálás
+fixáló
+fixírfürdõ
+fixíroz
+fixírozás
+fizesd
+fizess!
+fizessen
+fizet
+fizetek!
+fizetem
+fizetendõ
+fizetetlen
+fizetett
+fizeti
+fizetik
+fizetni!
+fizetség
+fizettet
+fizetve
+fizetés
+fizetéscsökkentés
+fizetése
+fizetése?
+fizetések
+fizetésemelés
+fizetésemelést
+fizetési
+fizetésképtelen
+fizetésképtelenség
+fizetésképtelenségi
+fizetésletiltási
+fizetést
+fizetéstelen
+fizetésébõl
+fizetését
+fizetõ
+fizetõ-autópálya
+fizetõdik
+fizetõeszköz
+fizetõeszközzé
+fizetõképes
+fizetõképesség
+fizetõtiszt
+fizika
+fizikai
+fizikailag
+fizikoterápia
+fizikus
+fizikához
+fizikával
+fizimiska
+fiziológia
+fiziológiai
+fiának
+fiók
+fiókban
+fiókgerenda
+fiókgomb
+fiókhúzó
+fiókmajor
+fiókos
+fiókot
+fiókvállalat
+fiú
+fiúcska
+fiúi
+fiúkor
+fiúnak
+fiús
+fiúszerelem
+fiút
+fiútestvér
+fiúunoka
+fjord
+flakon
+flamand
+flamingó
+flanc
+flancol
+flancos
+flanell
+flanellmellény
+flanellnadrág
+flangál
+flaska
+flastrom
+flastromot
+flegma
+flegmatikus
+flegmatikusan
+flemm
+flexibilis
+flexitömlõ
+flinta
+flintkõ
+flintüveg
+flipper
+flitter
+flitterarany
+flitterez
+flitterrel
+flokkuláció
+flokkulál
+floridai
+flotta
+flottakapitány
+flottatengernagy
+fluiditás
+fluidizáció
+fluidizál
+fluidizálás
+fluoreszcencia
+fluoreszkálás
+fluoreszkáló
+fluorid
+fluxus
+flóderezett
+flóderozás
+flóra
+flótás
+flört
+flörtöl
+flörtölés
+flörtölés!
+flörtölõs
+flörtös
+flöss
+flúg
+flúgos
+foci
+focizik
+fodor
+fodorbél
+fodormenta
+fodormentacseppek
+fodorral
+fodorít
+fodorítás
+fodorító
+fodros
+fodrosít
+fodroz
+fodrozás
+fodrozódik
+fodrozódás
+fodrozódó
+fodrozógép
+fodrász
+fodrászat
+fog
+foga
+fogad
+fogadalma
+fogadalmak
+fogadalmat
+fogadalmát
+fogadalom
+fogadalommal
+fogadatlan
+fogadhatatlan
+fogadható
+fogadkozik
+fogadni
+fogadok
+fogadott
+fogadott?
+fogadtatás
+fogadtatásban
+fogadtatásra
+fogadták
+fogadás
+fogadási
+fogadást
+fogadó
+fogadóbizottság
+fogadónapja
+fogadónál
+fogadós
+fogadószoba
+fogadóterem
+fogadóépület
+fogadóórák
+fogai
+fogait
+fogak
+fogakat
+fogakkal
+fogalma
+fogalmak
+fogalmam
+fogalmat
+fogalmaz
+fogalmazott
+fogalmazvány
+fogalmazás
+fogalmazó
+fogalmazópapír
+fogalmi
+fogalom
+fogalomkör
+fogalomköri
+fogalomra
+fogalomról
+fogalomszó
+fogam
+fogamzás
+fogamzásgátló
+fogamzásgátlók
+foganatosít
+foganatosítás
+fogantyú
+fogantyúval
+fogas
+fogasgyalu
+fogaskerekek
+fogaskerék
+fogaskerék-meghajtás
+fogaskerék-merevítõ
+fogaskerék-sorozat
+fogaskerék-áttétel
+fogasléc
+fogasrúd
+fogasrúddal
+fogasív
+fogat
+fogatlan
+fogaz
+fogazat
+fogazata
+fogazott
+fogazás
+fogcement
+fogcsikorgatva
+fogcsikorgatás
+fogd
+fogda
+fogdos
+fogfájás
+fogfúró
+foggal-körömmel
+fogható
+fogház
+fogházõr
+foghíjas
+foghús
+foghúzás
+foghúzó
+fogja
+fogjam
+fogjuk
+fogkefe
+fogkezelés
+fogkrém
+fogkõ
+foglal
+foglalat
+foglalatba
+foglalatból
+foglalatlan
+foglalatoskodik
+foglalatából
+foglalja
+foglaljanak
+foglaljon
+foglalkozik
+foglalkozik?
+foglalkozni
+foglalkozom
+foglalkoztat
+foglalkozás
+foglalkozása?
+foglalkozási
+foglalkozásszerûen
+foglalkozást
+foglalkozásának
+foglalkozására
+foglalkozását
+foglalkozású
+foglalkozó
+foglalni
+foglalni!
+foglalt
+foglaltatik
+foglalva
+foglalás
+foglalási
+foglaló
+foglalót
+foglyot
+foglyul
+fogmosó
+fognak
+fogni
+fogod
+fogok
+fogoly
+fogolytábor
+fogolytáborban
+fogom
+fogorvos
+fogorvosi
+fogorvoslás
+fogorvoslástan
+fogosztás
+fogott
+fogpiszkáló
+fogpótlás
+fogpótlástan
+fogsebész
+fogselyem
+fogsz
+fogszabályozás
+fogszabályozástan
+fogszabályozó
+fogszabályzó
+fogság
+fogságba
+fogságban
+fogságból
+fogságába
+fogtam
+fogtam,
+fogtisztító
+fogtömés
+fogunk
+fogva
+fogvatartás
+fogvicsorítás
+fogvájó
+fogy
+fogyaszt
+fogyasztandó
+fogyasztható
+fogyasztja
+fogyasztott
+fogyasztás
+fogyasztása
+fogyasztási
+fogyasztásmérõ
+fogyasztásra
+fogyasztást
+fogyasztó
+fogyasztói
+fogyatkozik
+fogyatkozás
+fogyatékos
+fogyatékosság
+fogytán
+fogyás
+fogyó
+fogyóban
+fogyókúra
+fogyókúrát
+fogyókúrázik
+fogyókúrázni
+fogzik
+fogzománc
+fogzás
+fogzási
+fogához
+fogápoló
+fogás
+fogás!
+fogáskötél
+fogásmélység
+fogásol
+fogáson
+fogást
+fogász
+fogászasszisztens
+fogászat
+fogászati
+fogát
+fogékonnyá
+fogékony
+fogékonyság
+fogért
+fogínytályog
+fogó
+fogó-készülék
+fogócska
+fogócskajáték
+fogócskában
+fogócskát
+fogócskázik
+fogódzó
+fogóhorog
+fogójáték
+fogójátékos
+fogólap
+fogós
+fogú
+fohász
+fojt
+fojtani
+fojtja
+fojtogat
+fojtogatás
+fojtogató
+fojtás
+fojtáskivevõ
+fojtással
+fojtást
+fojtó
+fojtóanyag
+fojtószelep
+fojtótekercs
+fok
+foka
+fokbeosztás
+fokbeosztással
+fokhagyma
+fokhagymanyomó
+fokig
+fokkal
+fokokra
+fokon
+fokonként
+fokos
+fokot
+fokoz
+fokozat
+fokozaterõsítõ
+fokozatok
+fokozatokra
+fokozatos
+fokozatosan
+fokozatossá
+fokozatot
+fokozott
+fokozottan
+fokozza
+fokozás
+fokozódik
+fokozódás
+fokozódó
+fokra
+fokról
+fokára
+fokú
+folpack
+folt
+foltfestészet
+foltok
+foltos
+foltossá
+foltosság
+foltot
+foltoz
+foltozatlan
+foltozott
+foltozás
+foltozónõ
+foltozóvarga
+foltozóvarrónõ
+folttalan
+folttisztítás
+folttisztító
+folyadék
+folyadékcsepp
+folyadékfelragadás
+folyadékfék
+folyadékkal
+folyadékmozgás
+folyadéknyomásos
+folyadékon
+folyadéksugár
+folyadékszûrõ
+folyadékvezeték
+folyam
+folyamat
+folyamata
+folyamatba
+folyamatban
+folyamatos
+folyamatosan
+folyamatosság
+folyamatot
+folyamatábra
+folyami
+folyamkavics
+folyammedence
+folyammedri
+folyamodik
+folyamodvány
+folyamodványt
+folyamodás
+folyamodó
+folyampart
+folyamrendõrség
+folyamán
+folyasztott
+folyat
+folyik
+folyomány
+folyománya
+folyondár
+folyosó
+folyosópalánk
+folyt
+folytacél
+folytasd!
+folytat
+folytatja
+folytatás
+folytatásos
+folytató
+folytatódik
+folytatódó
+folytatólagos
+folyton
+folyton!
+folytonos
+folytonosan
+folytonosság
+folytonossági
+folytán
+folyvást
+folyás
+folyási
+folyásirányba
+folyást
+folyásánál
+folyású
+folyékony
+folyékonyan
+folyékonyság
+folyó
+folyó-
+folyócska
+folyóhajlat
+folyói
+folyóirat
+folyóka
+folyókanyar
+folyókanyar-átvágás
+folyókanyart
+folyóképesség
+folyólábanként
+folyómeder
+folyón
+folyónak
+folyópart
+folyóparti
+folyós
+folyószabályozás
+folyószakasz
+folyószám
+folyószámla
+folyószámlád?
+folyószámlára
+folyószûkület
+folyósít
+folyósítható
+folyósító
+folyót
+folyótorkolat
+folyóvizes
+folyóvizet
+folyóvágány
+folyóvíz
+folyóvízi
+folyóág
+folyóírás
+fon
+fonadék
+fonal
+fonala
+fonalak
+fonalas
+fonalból
+fonalcsomó
+fonalfektetõ
+fonalgombolyag
+fonalhulladék
+fonalkereszt
+fonalorsó
+fonalszakadás
+fonalszerû
+fonalszám
+fonalvastagodás
+fonalvéget
+fonat
+fonatkészítõ
+fonatos
+fondorkodik
+fondorkodás
+fondorlat
+fondorlatos
+fondorlatosan
+fondorlatosság
+fondorlattal
+fondü
+fonendoszkóp
+fonja
+fonnyad
+fonnyadozik
+fonnyadt
+fonnyadó
+fonnyaszt
+fonnyasztó
+fonoda
+fonográf
+fonott
+font
+fontból
+fontig
+fontja
+fontnál
+fontolgat
+fontolt
+fontolóra
+fontom
+fontos
+fontos!
+fontosabb
+fontoskodik
+fontoskodj!
+fontoskodva
+fontoskodás
+fontoskodó
+fontosnak
+fontosság
+fontosságot
+fontosságát
+fontosságával
+fontosságú
+fontot
+fontszám
+fontszámra
+fonttal
+fontövezet
+fonák
+fonákja
+fonákjára
+fonákság
+fonákul
+fonál
+fonálban
+fonálból
+fonálkereszt
+fonódik
+fonógép
+fordul
+fordulat
+fordulatok
+fordulatos
+fordulatszám
+fordulatszámmal
+forduljak
+forduljon
+fordulnak
+fordulnom
+fordult
+fordulás
+fordulása
+fordulásjelzõ
+fordulékonyság
+forduló
+fordulóban
+fordulópont
+fordít
+fordítani
+fordítani!
+fordítható
+fordítja
+fordított
+fordítottja
+fordítottság
+fordíts!
+fordítva
+fordítás
+fordítást
+fordító
+fordítókötele
+fordítókötél
+forgalma
+forgalmas
+forgalmat
+forgalmaz
+forgalmi
+forgalmista
+forgalmú
+forgalom
+forgalom-kimutatás
+forgalomba
+forgalomba-hozhatóság
+forgalomban
+forgalomból
+forgalomelterelõ
+forgalomképes
+forgalomszámlálás
+forgandósága
+forgat
+forgatag
+forgatható
+forgatja
+forgatmány
+forgatmányos
+forgatmányoz
+forgatmányozás
+forgatott
+forgattyú
+forgattyúház
+forgattyúkar
+forgattyús
+forgattyúszekrény
+forgattyúval
+forgatás
+forgató
+forgatóhoz
+forgatókapa
+forgatókönyv
+forgatókönyvíró
+forgatónyomaték
+forgatópont
+forgolódik
+forgolódó
+forgott
+forgács
+forgácsol
+forgácsolható
+forgácsolhatóság
+forgácsolás
+forgácsoló
+forgácsot
+forgácsterelõ
+forgás
+forgáscsap
+forgási
+forgáspont
+forgástest
+forgásának
+forgó
+forgóajtó
+forgóalváz
+forgóalvázas
+forgóantennája
+forgócsap
+forgócsapos
+forgócsappal
+forgócsapra
+forgócsukló
+forgófej
+forgógyûrû
+forgóhenger
+forgóhorog
+forgóhíd-pillér
+forgókampó
+forgókampóval
+forgókereszt
+forgókondenzátor
+forgólapát
+forgólemez
+forgómû
+forgópisztoly
+forgópánt
+forgórész
+forgószárny
+forgószárnyas
+forgószék
+forgószél
+forgótalpas
+forgótengely
+forgótengelycsap
+forgótõke
+forgóváz
+forgózsámoly
+forint
+forintom
+forintot
+forinttal
+forma
+formai
+formailag
+formaldehid
+formalista
+formalitástól
+formamid
+formaruha
+formaszekrény
+formaszerûség
+formaság
+formasághoz
+formaságok
+formaságokhoz
+formazáró
+formula
+formuláré
+formába
+formában
+formája
+formájában
+formájából
+formáját
+formájú
+formájú?
+formák
+formákhoz
+formál
+formál,
+formálható
+formálhatóság
+formális
+formálisan
+formálissá
+formálás
+formáló
+formás
+formásság
+formát
+formátlan
+formátlanság
+formátum
+formáz
+formázás
+formázó
+forog
+forr
+forradalmasít
+forradalmi
+forradalmár
+forradalom
+forradás
+forradásos
+forradást
+forral
+forralás
+forrasz
+forraszt
+forrasztja
+forrasztás
+forrasztóanyag
+forrasztócsõ
+forrasztócsúcs
+forrasztódrót
+forrasztófém
+forrasztólámpa
+forrasztóón
+forrasztóón-pálca
+forrong
+forrongott
+forrongás
+forrongó
+forrpont
+forrpontra
+forrpontú
+forrás
+forrása
+forrásban
+forrásból
+forrásfoglalás
+forrásmegjelölés
+forrásmû
+forráspont
+forráspont-emelkedést
+forráz
+forrázat
+forrázás
+forrázási
+forró
+forrócsöves
+forrón
+forróság
+forróvá
+forróvérû
+forsz
+fortyogás
+fortéllyal
+fortély
+fortélyos
+fortélyosan
+fortélyoskodik
+fortélyosság
+fortélyt
+fos
+fosik
+fosszilis
+fosva
+foszfor
+foszfor-
+foszforeszkálás
+foszforeszkáló
+foszforhidrogének
+foszfornerkózis
+foszforos
+foszforossav
+foszforsav
+foszfát
+foszlat
+foszlató
+foszlatógép
+foszlik
+foszlott
+foszlány
+foszlányok
+foszlányos
+foszlós
+fosztogat
+fosztogatás
+fosztogató
+fosztogatója
+fosztva
+fosztógép
+fosztólepárlás
+fosóhomok
+fotel
+fotogravure
+fotokémia
+fotokópia
+fotokópiát
+fotolitográfia
+fotóriporter
+foxtrott
+frakcionál
+frakcionálás
+frakció
+frakcióvezetõ
+frakk
+frakking
+frakkját
+frakkot
+frakkszárny
+franc
+francba!
+francia
+franciakulcs
+francianégyes
+francianégyest
+franciaország
+franciaországba
+franciaágy
+franciából
+franciául
+franciául,
+francos
+frank
+frankó
+frazeológia
+frazeológiai
+frazírozottság
+fregatt
+fregattmadár
+frekvencia
+frekvenciahintázás
+frekvenciamoduláció
+frekvenciazavar
+frekvenciája
+frekventál
+frenetikus
+freskó
+fricc
+fricska
+fricskát
+fricskáz
+frigid
+frigiditás
+frigy
+frigyláda
+frigyszekrény
+friss
+frissen
+frissensültek
+frissességét
+frisseség
+frissítés
+frissítõ
+frittelõ
+fritz
+frivol
+frivolság
+frizsider
+frizura
+frizuracsinálás
+frizuráját
+frizurát
+front
+fronthossz
+frontlógós
+fronton
+frontra
+frontvonalra
+frontális
+frottírkesztyû
+frottírszövet
+frottírtörülközõ
+frottíráruk
+frufru
+frugalitás
+frugális
+fruska
+fránya
+frász
+frásza
+frászt
+frászt!
+fráter
+frázis
+frázisember
+frázisok
+frázisokat
+frézia
+fríz
+frízszövet
+frízékítmény
+fröccsen
+fröccsenés
+fröccsenést
+fröccsöntés
+fröccsöt
+fröcsköl
+fröcskölés
+fröcsög
+fröcsögés
+fuccs
+fuga
+fugacitás
+fugáz
+fugázás
+fugázó
+fukar
+fukarkodik
+fukarság
+fukarul
+fuldoklik
+fuldoklás
+fullad
+fulladozik
+fulladt
+fulladva
+fulladás
+fullajtár
+fullasztó
+fullánk
+fullánkja
+fullánkos
+fulminát
+fumársav
+fundamentalista
+fundamentum
+funkcionális
+funkcionáló
+funkcionárius
+funkció
+fura
+furadék-kanál
+furakodik
+furat
+furatmérés
+furatos
+furcsa
+furcsa!
+furcsa,
+furcsaság
+furcsán
+furda
+furdalja
+furdaló
+furdancs
+furfang
+furfangos
+furfangosság
+furgon
+furikázik
+furkó
+furnér
+furnérenyvezõ
+furnérlemez
+furnéroz
+furorét
+furulya
+furulyalyuk
+furulyázik
+furulyázás
+furunkulus
+furunkulusféle
+fuser
+fusermunka
+fuss,
+fusson
+fusson,
+fussunk
+fussunk!
+fut
+fut,
+futam
+futamban
+futamok
+futball
+futball-labda
+futballban)
+futballbelsõ
+futballcipõ
+futballista
+futballjátékos
+futballozik
+futballpálya
+futballszélsõ
+futja
+futkos
+futkározik
+futni
+futott
+futottak
+futtat
+futtatja
+futtatás
+futtató
+futurisztikus
+futurológia
+futva
+futár
+futárt
+futás
+futás!
+futásban
+futásnak
+futással
+futástól
+futó
+futó,
+futócipõ
+futódaru
+futófelület
+futófelületet
+futóhomok
+futóhíd
+futók
+futókakukk
+futókerék
+futókocsi
+futókötélzet
+futólag
+futólagos
+futólagosan
+futóléc
+futólépés
+futólépés!
+futólépésbe
+futólépésben
+futómacska
+futómû
+futónövény
+futópálya
+futórózsa
+futósorba
+futószalag
+futószerkezet
+futószámok
+futószár
+futószõnyeg
+futósáv
+futótûz
+futóvendég
+futóverseny
+futóz
+futózott
+futózás
+futóárok
+fuvallat
+fuvalom
+fuvar
+fuvardíj
+fuvarforduló
+fuvarkocsi
+fuvarlevél
+fuvaros
+fuvaroz
+fuvarozás
+fuvarozási
+fuvarozó
+fuvolázik
+fux
+fuxolótû
+fuzionál
+fuzionáltat
+fuzionáltatás
+fuzionálás
+fába
+fából
+fácán
+fácános
+fához
+fáj
+fáj?
+fája
+fájdalmai
+fájdalmas
+fájdalmas,
+fájdalmasan
+fájdalmassá
+fájdalmat
+fájdalmatlan
+fájdalmára
+fájdalom
+fájdalom!
+fájdalomcsillapító
+fájdalomdíj
+fájdalommal
+fájdalommentes
+fájdalomtalan
+fájdalomtól
+fájdalomérzés
+fájlal
+fájás
+fájó
+fájós
+fák
+fákat
+fáklya
+fáklyafény
+fáklyafényes
+fáklyahordozó
+fáklyavilág
+fáklyavivõ
+fáklyáját
+fáklyásmenet
+fáma
+fánk
+fára
+fárad
+fáradhatatlan
+fáradhatatlanul
+fáradozik
+fáradozás
+fáradozásom
+fáradozását
+fáradság
+fáradsággal
+fáradságomba
+fáradságos
+fáradságot
+fáradságot,
+fáradt
+fáradtan
+fáradtnak
+fáradtság
+fáradtságot
+fáradtságtól
+fáradásvizsgálat
+fáraszt
+fárasztja
+fárasztó
+fárasztógép
+fárasztópróba
+fárasztóság
+fáraó
+fás
+fáskamra
+fásli
+fásult
+fásultan
+fásultság
+fásulttá
+fásítás
+fát
+fátlan
+fátylat
+fátyol
+fátyollal
+fátyolos
+fátyolosan
+fátyolossá
+fátyolszalag
+fátyolszerû
+fátyolszövet
+fátyolt
+fátyoltánc
+fátyolvirág
+fával
+fázik
+fázis
+fázisbahozás
+fázisban
+fázisállítás
+fázisátalakulás
+fázisátmenet
+fázol
+fécesz
+fék
+fékbak
+fékcsat
+fékcsattal
+féken
+féket
+fékez
+fékezhetetlen
+fékezi
+fékezés
+fékezésére)
+fékezõ
+fékezõrakéta
+fékezõszerkezet
+fékkulcs
+fékkötele
+fékkötélbog
+féknyomás
+fékpofa
+fékpofaszorító
+féksaru
+fékszárny
+féktelen
+féktelenkedik
+féktelenkedõ
+féktelenség
+féktelenül
+féktuskó
+fél
+fél-
+fél?
+félautomata
+félbe
+félbemaradó
+félbeszakít
+félbeszakítja
+félbeszakítás
+félbeszakításokkal
+félbeszakító
+félbolond
+félbolondos
+félbársony
+félcipõ
+félcédulás
+félderékszög-mérõ
+félderékszögû
+féldombormû
+féldrága
+féldrágakõ
+féldrágakõ-vésés
+féldrágakövek
+féle
+félelem
+félelembe
+félelemben
+félelembõl
+félelemnek
+félelemtõl
+félelemérzés
+félelmek
+félelmes
+félelmesség
+félelmet
+félelmetes
+félelmetesen
+félelmetesség
+félelmét
+félemelet
+féleszû
+féleség
+félfa
+félfehér
+félfülke
+félgömb
+félgömbi
+félgömbölyû
+félhang
+félhanggal
+félhangon
+félhivatalos
+félhold
+félholtra
+félhomály
+félhomályos
+félig
+féligazság
+félisten
+félj!
+félj,
+félkaromat
+félkegyelmû
+félkezû
+félként
+félkész
+félkézzel
+félkótya
+félkör
+félkörben
+félkövér
+féllábbal
+féllábon
+féllábra
+félmagasság
+félmajom
+félmegoldás
+félmegoldások
+félmunkát
+félnehézsúly
+félnek
+félni
+félnyeregtetõ
+félnótás
+féloldalas
+féloldali
+féloldalra
+félpennys
+félporoszka
+félre
+félrebeszél
+félrebeszélés
+félrebeszélõ
+félrecsapja
+félrecsúszik
+félredob
+félredobott
+félredug
+félreesõ
+félrefordul
+félrefordít
+félrefordított
+félregereblyéz
+félrehajlít
+félrehív
+félrehúzott
+félrehúzza
+félrehúzódik
+félreismerhetetlen
+félreismerhetetlenül
+félreismeri
+félrekapkodása
+félrelép
+félrelök
+félremagyaráz
+félremagyarázható
+félremegy
+félrerak
+félresikerül
+félresikerült
+félreszól
+félreszólás
+félresöpör
+félretaposott
+félretesz
+félretett
+félretol
+félretétel
+félretétet
+félreugrik
+félreugrás
+félreveri
+félrevezet
+félrevezetett
+félrevezetés
+félrevezetõ
+félrevon
+félrevonul
+félrevonult
+félrevonultan
+félrevonuló
+félreáll
+félreállás
+félreállít
+félreállítják
+félreért
+félreértesz
+félreértett
+félreérthetetlen
+félreérthetetlenség
+félreérthetetlenül
+félreérthetõ
+félreérthetõség
+félreértés
+félsz
+félszeg
+félszegen
+félszegség
+félszegúszó
+félszembilincs
+félszemû
+félszemüveg
+félsziget
+félszigeti
+félszél
+félt
+félteke
+féltengely
+félteni
+féltestvér
+féltetõ
+félti
+féltudás
+féltudós
+féltékeny
+féltékenykedés
+féltékenység
+féltékenységbõl
+féltékenységtõl
+féltónus
+féltõ
+félvad
+félve
+félve,
+félvezetõ
+félvilági
+félvér
+félábra
+félállati
+félárbocra
+félénk
+félénken
+félénkség
+félénkségén
+félév
+félévenként
+félévi
+félóra
+félõ
+félõ,
+félõrült
+félõrülten
+félönmûködõ
+félúton
+fém
+fém-
+fémbevonat
+fémbevonás
+fémbõl
+fémcsap
+fémdarab
+fémekre
+fémes
+fémesít
+fémet
+fémfesték
+fémforgács
+fémfûrész
+fémfüst
+fémgyûrû
+fémhab
+fémhulladék
+fémháló
+fémjelzetlen
+fémjelzés
+fémkapocs
+fémkarika
+fémkinyerés
+fémkupa
+fémkupakot
+fémlap
+fémlapokkal
+fémlecsapás
+fémlemez
+fémlemezvég
+fémmel
+fémmunka
+fémorganikus
+fémpénz
+fémreszelék
+fémrovátkolás
+fémréteggel
+fémrúd
+fémszeg
+fémszilánk
+fémtartalmú
+fémtömegcikkek
+fémtömítés
+fémvég
+fémvéggel
+fémáruk
+fémárú
+fémétkészlet
+fémöntvény
+fémötvözet
+fémötöde
+fémüst
+fénnyel
+fény
+fény-
+fénycsóvája
+fénycsõvilágítás
+fénye
+fényelhajlás
+fényellenzõ
+fényerõsség
+fényes
+fényesebb
+fényesen
+fényesre
+fényesség
+fényesít
+fényesített
+fényesítés
+fényesítõ
+fényez
+fényezet
+fényezetlen
+fényezett
+fényezés
+fényezõ
+fényezõanyag
+fényfolt
+fényforrás
+fényhatás
+fényhatások
+fényjel
+fényjeladó
+fényjeleket
+fényjelt
+fényjelzés
+fényjelzõ
+fényjátékos
+fénykoszorú
+fénykép
+fényképez
+fényképezés
+fényképezõ
+fényképezõgép
+fényképezõállvány
+fényképkivágó
+fényképész
+fénykéve
+fénylik
+fénylés
+fénylõ
+fénylõhal
+fénymásol
+fénymásoló
+fénymáz
+fénynek
+fénynyaláb
+fénynyomat
+fénynyomás
+fénynél
+fénypontja
+fényre
+fényrekesz
+fényreklám
+fényrend
+fénysugarak
+fénysugár
+fénysugárnyaláb
+fénysugárzó
+fényszedés
+fényszedõgép
+fényszóró
+fényszórótól
+fénysáv
+fényt
+fényt!
+fénytan
+fénytelen
+fénytelenít
+fénytörés
+fénytörésmérõ
+fénytöréstan
+fénytörõ
+fényudvar
+fényvisszaverõdés
+fényálló
+fényállóság
+fényárba
+fényében
+fényérzet
+fényérzékennyé
+fényérzékeny
+fényérzékenység
+fényét
+fényév
+fényû
+fényûzés
+fényûzést
+fényûzõ
+fényûzõen
+fényûzõn
+fér
+fércel
+fércelés
+fércmunka
+fércmû
+féreg
+féregirtó
+féregmintás
+féregnyúlvány
+féregnyúlványlob
+férek
+férfi
+férfi!
+férfiak
+férfiak!
+férfias
+férfias!
+férfiasan
+férfiasság
+férfiatlanná
+férfiatlanít
+férficipõ
+férfidivatáru
+férfidivatárus
+férfigyûlölõ
+férfikor
+férfikorában
+férfinép
+férfinépség
+férfit
+férfitársaságba
+férfivá
+férfiág
+férgek
+férgektõl
+férges
+férj
+férje
+férjes
+férjet
+férjezett
+férjhez
+férji
+férjnek)
+férjre
+férjét
+férkõzz
+férõhely
+fészek
+fészekalja
+fészekaljnyi
+fészekbe
+fészekrakó
+fészer
+fészer-garázs
+fészerbe
+fészkel
+fészkelés
+fészkelõ
+fészkelõdik
+fészkelõdés
+fészkelõhely
+fészken
+fészkes
+fészket
+fésû
+fésûgyapjú-szövet
+fésûkagyló
+fésûsgyapjú
+fésûsgyapjúfonál
+fésül
+fésületlen
+fésüli
+fésülködik
+fésült
+fésülés
+fétis
+fétis-
+fétises
+fétiskultusz
+fétisszerû
+fóka
+fókabõr
+fókatelep
+fókavadászat
+fókusz
+fókuszol
+fólia
+fólió
+fórum
+fórumhoz
+fószer
+fõ-
+fõ-felsõsudárvitorla
+fõ-fõ
+fõ-sudárvitorla
+fõbejárat
+fõbelövés
+fõbenjáró
+fõbiztos
+fõbonc
+fõborda
+fõbérleti
+fõbérlõ
+fõbõl
+fõcsapat
+fõcsapágy
+fõcsõ
+fõcím
+fõcímsor
+fõdíszletmester
+fõellenõr
+fõelõadó
+fõemlõsök
+fõesküt
+fõesperes
+fõesperesi
+fõesperesség
+fõfasorral
+fõfedélzet
+fõfedélzetig
+fõfelügyelõ
+fõforgalmi
+fõgerenda
+fõhadiszállás
+fõhadnagy
+fõhadnagyi
+fõhadnagyság
+fõhajtás
+fõhajó
+fõhely
+fõherceg
+fõhercegasszony
+fõhercegi
+fõhercegné
+fõhercegnõ
+fõhercegség
+fõhõs
+fõiskola
+fõiskolai
+fõispán
+fõjegyzõ
+fõkalauz
+fõkamarás
+fõkancellár
+fõkolompos
+fõkomornyik
+fõkonzul
+fõként
+fõkönyv
+fõkönyvbe
+fõkönyvi
+fõkötõ
+fõközlekedési
+fõleg
+fõlépcsõ
+fõmagasságod
+fõmagasságú
+fõmufti
+fõméltóságod
+fõméltóságú
+fõmérnök
+fõmû
+fõmûsoridõ
+fõnemes
+fõnemesek
+fõnemesi
+fõnemesség
+fõnix
+fõnixmadár
+fõnyereményt
+fõnyomócsõ
+fõnév
+fõnévragozás
+fõnõvér
+fõnök
+fõnökasszony
+fõnökség
+fõnököm
+fõoltár
+fõpap
+fõpapi
+fõparancsnok
+fõparancsnoka
+fõparancsnokság
+fõpincér
+fõpolgármester
+fõposta
+fõpróba
+fõrangúak
+fõre
+fõrend
+fõrendek
+fõrendezõ
+fõrendi
+fõrendiház
+fõrugó
+fõrész
+fõrészvényes
+fõsudárvitorla
+fõszakács
+fõszerep
+fõszerepben
+fõszerepet
+fõszereplõ
+fõszereplõvel
+fõszolga
+fõszám
+fõszámvevõ
+fõtantárgy
+fõtartó
+fõtengely
+fõteomlás
+fõtepergés
+fõtepászta-fejtés
+fõtepásztafejtés
+fõtermény
+fõtermény-kereskedõ
+fõtesüllyedés
+fõtesüllyesztés
+fõtetartó
+fõtetörés
+fõteutánszedés
+fõtezáródmány
+fõteácsolat
+fõtisztelendõ
+fõtiszteletû
+fõtisztviselõ
+fõtt
+fõtámasz
+fõtárgynak
+fõtétel
+fõutca
+fõvel
+fõvezeték
+fõvezetõ
+fõvezér
+fõvitorla
+fõvonal
+fõvágány
+fõváros
+fõvárosba
+fõvárosi
+fõz
+fõzelék
+fõzelékféle
+fõzet
+fõzés
+fõzõ
+fõzõcskézik
+fõzõedény
+fõzõfazék
+fõzõkészülék
+fõzõlap
+fõzõláda
+fõzõpohár
+fõzõüveg
+fõzött
+fõág
+fõállamügyész
+fõápolónõ
+fõápolónõi
+fõárboc-felsõsudárvitorla
+fõárboc-sudárvitorla
+fõárboctarcs
+fõösszeg
+fõúr,
+fõúri
+fõút
+fõútvonal
+föderalizmus
+födémgerenda
+födémgerendát
+födémterület
+föl
+fölavató
+föld
+föld-
+földadó
+földalatti
+földbaba
+földbe
+földbirtok
+földbirtokkönyve
+földbirtoklási
+földbirtokos
+földbirtokügyi
+földbõl
+földcsuszamlás
+földdarab
+földdel
+földegyengetés
+földek
+földel
+földelés
+földes
+földesúr
+földet
+földfoglaló
+földfok
+földfúró
+földgolyó
+földgát
+földgáz
+földgömb
+földhányás
+földhöz
+földi
+földig
+földigiliszta
+földimogyoró
+földje
+földkiemelõ
+földkupac
+földkéreg
+földközi-tenger
+földközi-tengeri
+földlakó
+földlökés
+földmozgatás
+földmunka
+földmunkálatok
+földmunkás
+földmágneses
+földmérés
+földmérési
+földmérõ
+földmûvelés
+földmûvelõ
+földmûves
+földnek
+földnyelv
+földomlás
+földosztás
+földpát
+földrajz
+földrajzi
+földrajztudós
+földre
+földreborultság
+földreform
+földrengés
+földrengés-tektonikai
+földrengési
+földrengésjelzés
+földrengésjelzõ
+földrengéskutató
+földrengésmérõ
+földrengést
+földrengéstan
+földrengéstani
+földrengéstudós
+földreszállás
+földrész
+földrészek
+földréteg
+földrõl
+földszaga
+földszerû
+földszint
+földszintes
+földszinti
+földszurok
+földszállítás
+földsánc
+földsáv
+földtan
+földtani
+földteknõ
+földterítõ
+földterület
+földtoló
+földtöltés
+földtörténeti
+földzárlat
+földön
+földönfutó
+földönkívüli
+földöntúli
+földöv
+földút
+fölemelkedés
+fölemészt
+fölfejt
+fölfelé
+följavítás
+fölkap
+fölkentje
+fölsõ
+fölveszi
+fölállás
+fölé
+fölébe
+föléhajlik
+föléje
+fölélénkít
+fölény
+fölénybe
+fölényes
+fölényesen
+fölényeskedik
+fölényeskedés
+fölényeskedõ
+fölényét
+fölös
+fölösleg
+fölösleges
+fölöslegesen
+fölösödik
+fölösödni
+fölött
+fölötte
+fölöttem
+fölöttesem
+fölötti
+fölöttünk
+fölözõedény
+fölözõgép
+fölözõkanál
+fölözött
+fönséges
+förgeteg
+förmedvény
+förtelmes
+förtelmesen
+fösvény
+fösvénység
+föveg
+föveny
+fövenyes
+fövenytorlódás
+fúga
+fúj
+fújdogál
+fújtat
+fújtatott
+fújtató
+fújás
+fújó
+fújódva
+fúl
+fúr
+fúria
+fúrt
+fúrás
+fúrásiránya
+fúrást
+fúró
+fúróacél
+fúrócsúcs
+fúródik
+fúrófej
+fúrógyár
+fúrógyártás
+fúrógyártó
+fúrógép
+fúróhegy
+fúróiszap
+fúrókalapács
+fúrókapcsoló
+fúrókerep
+fúrókészítõ
+fúrólyuk
+fúrólyuk-fojtás
+fúrólyukszelvény
+fúrómester
+fúrórudazat
+fúrórúd
+fúrószerszám
+fúrótokmány
+fúrótorony
+fúróvég
+fúróállvány
+fúvat
+fúvatás
+fúvott
+fúvás
+fúvó
+fúvócsõ
+fúvóka
+fúvókás
+fúvós
+fúvósok
+fúvószenekar
+fúvószél
+fúvózörej
+fúzió
+fúziós
+fûbe
+fûcsomó
+fûfajta
+fûlik
+fûmag
+fûnyíró
+fûnövényzet
+fûre
+fûrésszerû
+fûrész
+fûrészbak
+fûrészel
+fûrészelhetõ
+fûrészelt
+fûrészelés
+fûrészelõ
+fûrészes
+fûrészfog
+fûrészfogú
+fûrészkeret
+fûrészkészítõ
+fûrészlap
+fûrészmalom
+fûrészpor
+fûrésztelep
+fûrészáru
+fûrõl!
+fûszer
+fûszeres
+fûszeresen
+fûszeresnél
+fûszerez
+fûszerezetlen
+fûszerezett
+fûszerezés
+fûszerfélékben
+fûszernövény
+fûszernövények
+fûszernövényekben
+fûszersajt
+fûszeráru
+fûszerüzlet
+fûszerüzletben
+fûszál
+fût
+fûts
+fûtve
+fûtés
+fûtõ
+fûtõanyag
+fûtõházba
+fûtõolaj
+fûtõszál
+fûtõtelep
+fûtõtest
+fûtõtér
+fûtött
+fûvel
+fûvel-fával
+fûz
+fûzbarka
+fûzfa
+fûzfapoéta
+fûzfavers
+fûzi
+fûzõ
+fûzõdik
+fûzõfonal
+fûzõgép
+fûzõheggyel
+fûzõhegy
+fûzõkapocs
+fûzõkarika
+fûzõmerevítõ
+fûzõs
+fûzõszalag
+fûzõt
+fûzõtû
+fûzõzsinór
+fûzött
+fûútvonalak
+füge
+fügefa
+fügekaktusz
+függ
+függ!
+függelék
+függesztett
+függesztõ
+független
+függetlenség
+függetleníti
+függetlenül
+függvény
+függvényváltozó
+függvényábra
+függvényévé
+függés
+függõ
+függõben
+függõcímke
+függõkert
+függõkosár
+függõleges
+függõlegesbe
+függõlegesen
+függõlegesre
+függõlegesség
+függõlegestõl
+függõség
+függõveder
+függõvé
+függõágy
+függõón
+függönnyel
+függöny
+függönyanyag
+függönyrúd
+függönyt
+függönytartó
+függönyöket
+függönyös
+fügét
+fül
+fül-
+fülbaj
+fülbe
+fülbemászó
+fülbevaló
+fülbevalót
+fülbélyeg
+fülcimpa
+fülcsengés
+füle
+füle,
+fülecske
+füleit
+fülek
+fülel
+fülem
+fülembe
+fülemüle
+füles
+fülesbagoly
+fülescsavar
+fület
+fülfecskendõ
+fülgyógyász
+fülhallgató
+fülhasogató
+füli
+fülig
+fülik
+fülkagyló
+fülkaparó
+fülkaparó-kanál
+fülke
+fülkéje
+fülkét
+fülledt
+fülledtség
+füllel
+füllent
+füllentés
+füllentõ
+füllevágás
+fülnyílás
+fülorvos
+fülpanasz
+fülsiketítõ
+fülszerû
+fülsértõ
+fültincs
+fültornáchoz
+fültépõ
+fültépõen
+fültõmirigy-gyulladás
+fültõmirigylob
+fülvédõ
+fülzsír
+fülzúgás
+fülé
+fülébe
+fülén
+fülére
+fülész
+fülét
+fülét-farkát
+fülön
+fülönfogás
+fülönfüggõ
+fülöp-szigeti
+fülû
+fürdet
+fürdetés
+fürdik
+fürdés
+fürdõ
+fürdõhely
+fürdõkád
+fürdõkályha
+fürdõköpeny
+fürdõkúrát
+fürdõlepedõ
+fürdõmedence
+fürdõnadrág
+fürdõruha
+fürdõsapka
+fürdõszoba
+fürdõszoba-használat
+fürdõszobaszekrény
+fürdõszobaszõnyeg
+fürdõt
+fürdõzõ
+fürge
+fürgeség
+fürgén
+fürj
+fürkész
+fürkészik
+fürkészõ
+fürt
+fürtök
+fürtökbe
+fürtöket
+fürtös
+füröszt
+füst
+füstbe
+füstbetûk
+füstbomba
+füstcsatorna
+füstcsiga
+füstcsík
+füstcsõ
+füstemésztés
+füsternyõ
+füstfal
+füstfejlesztõ
+füstfátyol
+füstfüggöny
+füstgomolyag
+füstgáz
+füstgázcsatorna
+füstjárat
+füstkvarc
+füstkürtõ
+füstpászma
+füstszínû
+füstszûrõ
+füstszûrõs
+füsttel
+füsttelenítés
+füsttõl
+füstírás
+füstöl
+füstölgõ
+füstölt
+füstölés
+füstölõ
+füstölõszer
+füstölög
+füstölögve
+füstös
+füstöt
+fütty
+füttyentés
+füttypont
+füttyszóval
+fütyi
+fütykös
+fütyül
+fütyülés
+fütyülõ
+fütyülõréce
+fütyülök
+füve
+füvekbõl
+füves
+füvesít
+füvezet
+füvészkert
+füvészkönyv
+füzet
+füzér
+füzérdíszítés
+füzérrel
+füzértánc
+füzértáncot
+füzérvirágzat
+füzérvirágzatot
+g-kulcs
+gabalyodva
+gabardin
+gabona
+gabonaféreg
+gabonakereszt
+gabonanemû
+gabonanövény
+gabonapehely
+gabonarend
+gabonarendek
+gabonarosta
+gabonaszem
+gabonatermés
+gabonatõzsde
+gabonazsizsik
+gabonaüszög
+gabonaüszöggel
+gabonában
+gabonával
+gadolinium
+gagyog
+gagyogás
+gagyogó
+gagát
+gagátfekete
+galacsin
+galagonya
+galagonyabokor
+galamb
+galambcsapat
+galambdúc
+galambdúcban
+galambfióka
+galambházban
+galambocskám
+galambom
+galambraj
+galandféreg
+galaxis
+galaxisok
+galeri
+gall
+gallon
+gallonmennyiség
+gallonokban
+gally
+gallyacska
+gallyak
+gallyfa
+gallér
+gallércsomó
+galléron
+gallérral
+gallért
+gallérvédõ
+galopp
+galuska
+galvanizál
+galvanizált
+galvanizálás
+galvanoszkóp
+galván
+galvánelem
+galvánelemes
+galvános
+galvánosság
+galvánúton
+galád
+galádság
+galádul
+galéria
+galóca
+ganaj
+ganajlé
+ganajozik
+ganglion
+gangos
+gangréna
+gané
+ganéj
+ganés
+garancia
+garancialevél
+garantál
+garas
+garasa
+garasos
+garasosan
+garast
+garat
+garatmandula-gyulladás
+garatra
+garazsírozás
+garbó
+garbónyak
+garcinia
+garde!
+gardedám
+gardénia
+gardíroz
+gargalizál
+garmond
+garnitúra
+garnéla
+garnélarák
+garral
+garzonlakás
+garzonéletet
+garázda
+garázdaság
+garázdálkodás
+garázdálkodó
+garázs
+garázsba
+garázzsal
+gasztritisz
+gasztronómia
+gasztronómiai
+gatya
+gatyaszaggató
+gatyába
+gatyád!
+gatyája
+gatyáját
+gatyázik
+gatyó
+gauss-féle
+gavallér
+gavallérosan
+gaz
+gazda
+gazdaember
+gazdag
+gazdag,
+gazdagabb
+gazdaggá
+gazdagodik
+gazdagodás
+gazdagok
+gazdagoknak
+gazdagon
+gazdagszik
+gazdagság
+gazdagságban
+gazdagítás
+gazdaság
+gazdasági
+gazdaságilag
+gazdaságos
+gazdaságosság
+gazdaságtalan
+gazdaságtan
+gazdaságtudomány
+gazdájának
+gazdáját
+gazdálkodik
+gazdálkodnak
+gazdálkodás
+gazdálkodásra
+gazdálkodó
+gazdászati
+gazdát
+gazdátlan
+gazdátlanul
+gazella
+gazember
+gazember!
+gazemberség
+gazfickó
+gazfickó!
+gazométer
+gazos
+gazság
+gaztett
+gaztettéért
+gaztól
+gebasz
+gebe
+geci
+gejzerit
+gejzirit
+gejzír
+gekko
+gelignit
+geller
+gellert
+gemkapocs
+genealógia
+genealógus
+generikus
+generáció
+generálbasszus
+generáljavítás
+generáloz
+generálás
+generátor
+genetika
+genetikus
+gengszter
+gengszterbanda
+gengszterek
+gengszterség
+genitívuszban
+genny
+genny-
+gennyed
+gennyedzik
+gennyedzõ
+gennyedés
+gennyedõ
+gennyes
+gennyesedik
+gennyesedés
+gennyesedést
+gennyesít
+gennyezik
+genova
+genus
+genus-
+genyó
+geodéta
+geológus
+geometria
+geometriai
+geopolitika
+geopolitikai
+gepárd
+gereben
+gerebenez
+gerebenezõ
+gereblye
+gereblyéz
+gereblyézés
+gerely
+gerelyhajítás
+gerenda
+gerendacsatlakozás
+gerendaeleme
+gerendaház
+gerendaköz
+gerendamezõ
+gerendasor
+gerendaszerkezet
+gerendavég
+gerendely
+gerendája
+gerendát
+gerendával
+gerendázat
+gerendázatra
+gerezd
+gerilla
+gerilla-harcos
+gerillaharcos
+gerinc
+gerinc-
+gerincagy
+gerincagyi
+gerincbántalom
+gerinccsapolás
+gerince
+gerinces
+gerincgörbület
+gerincingerlõ
+gerinclemeze
+gerincoszlop
+gerincoszlop-
+gerinctelen
+gerinctetõ
+gerinctövi
+gerincvelõ
+gerjed
+gerjedve
+gerjedõ
+gerjeszt
+gerjesztés
+gerjesztõ
+gerle
+gerlice
+germán
+germó
+gerontokrata
+gerontokrácia
+gerontológia
+gersli
+gesztenye
+gesztenyebarna
+gesztikulál
+gesztikulálás
+gesztus
+gettó
+gettóba
+gibbon
+giccs
+giccses
+giccsgyártó
+gida
+gigantizmus
+gigerli
+gigászi
+gikszer
+gikszert
+giliszta
+gilisztája
+gilisztás
+gilisztát
+gimnasztikai
+gimnázium
+gin
+gines
+ginszeng
+gipsszel
+gipsz
+gipszbe
+gipszel
+gipszelve
+gipszes
+gipszhabarcs
+gipszkötés
+gipszmider
+gipszminta
+gipszszerû
+gipsztábla
+gipszvakolat
+gipszöntvény
+gipszöntõ
+girhes
+girhesség
+girland
+giroszkóp
+gitt
+gitár
+gitáros
+gitárt
+gizgaz
+glaciális
+gladiátor
+gladiátori
+gladiólusz
+glandula
+glaszé
+glaszékesztyû
+glazúr
+glazúrfesték
+glazúrfestékkel
+glazúrral
+gleccser
+gleccserszakadék
+gleccserturzás
+gleccsertó
+glicínia
+gliptika
+gliptodon
+gliptográfia
+glissando
+globalizálás
+globális
+globálisan
+glossza
+glosszál
+glosszárium
+glutaminsav
+gluteális
+glutársav
+glóbusz
+glória
+glükóz
+gnóm
+gnú
+gobelin
+gobelinöltés
+golf
+golf-klubház
+golf-zsák
+golfban
+golffelszerelés
+golfjátékos
+golfklub
+golflabda
+golfot
+golfozik
+golfozó
+golfpavilon
+golfpálya
+golfruha
+golföltöny
+golfütõ
+golgotavirág
+golyva
+golyvás
+golyó
+golyócska
+golyófogó
+golyós
+golyóstoll
+golyószóró
+golyót
+golyóvá
+golyózik
+golyózápor
+golyózás
+golyóálló
+gomb
+gomba
+gombaféle
+gombaszerû
+gombaszerûen
+gombaölõ
+gombdísz
+gombfejû
+gomblyuk
+gomblyukaz
+gomblyukba
+gomblyukfedõ
+gomblyukretesz
+gomblyukzáró
+gombol
+gombolyag
+gombolyagba
+gombolyít
+gombolyítatlan
+gombolyító
+gombolás
+gombolódik
+gombos
+gombostû
+gombostûfej
+gombot
+gombszemû
+gombás
+gombászik
+gombával
+gombó
+gombóc
+gomolyfelhõ
+gomolyog
+gond
+gondatlan
+gondatlanság
+gondatlanságból
+gondatlanságon
+gondatlanul
+gonddal
+gondja
+gondjai
+gondjaiba
+gondjaira
+gondjait
+gondját
+gondnok
+gondnoknõ
+gondnoknõi
+gondnokság
+gondok
+gondokkal
+gondol
+gondol,
+gondola
+gondolat
+gondolat,
+gondolata
+gondolata,
+gondolatai
+gondolataiba
+gondolataiban
+gondolataim
+gondolatait
+gondolatban
+gondolatjel
+gondolatmenet
+gondolatnyi
+gondolatnyival
+gondolatok
+gondolatokba
+gondolatokban
+gondolatokkal
+gondolatolvasás
+gondolatolvasó
+gondolaton
+gondolatot
+gondolatra?
+gondolatsor
+gondolatszegény
+gondolatszegénység
+gondolattal
+gondolatvilág
+gondolatának
+gondolatára
+gondolatát
+gondolatától
+gondolatébresztõ
+gondold
+gondolj
+gondolja
+gondolja,
+gondolják
+gondolkodik
+gondolkodva
+gondolkodás
+gondolkodási
+gondolkodásmód
+gondolkodásra
+gondolkodású
+gondolkodó
+gondolkodóba
+gondolkodóképesség
+gondolkozik
+gondolkozz!
+gondolkozású
+gondolnak
+gondolni
+gondolok?
+gondolom
+gondolom!
+gondolsz
+gondolt
+gondoltam
+gondoltam,
+gondolva
+gondolás
+gondom
+gondos
+gondosan
+gondoskodik
+gondoskodj
+gondoskodjék
+gondoskodás
+gondoskodó
+gondosság
+gondot
+gondot!
+gondoz
+gondozatlan
+gondozott
+gondozás
+gondozása
+gondozó
+gondozónõ
+gondtalan
+gondtalanság
+gondtalanul
+gondterhelt
+gondterhes
+gondviselés-küldötte
+gong
+gonorrea
+gonosz
+gonoszan
+gonoszat
+gonoszkodás
+gonoszkodó
+gonoszság
+gonoszsága
+gonosztett
+gonosztevõ
+gonoszul
+gordonka
+gorilla
+goromba
+gorombaság
+gorombaságokkal
+gorombán
+gorombáskodik
+gradiens
+grafika
+grafikon
+grafikonba
+grafikonosan
+grafikont
+grafikus
+grafikusan
+grafit
+grafitceruza
+grafitpor
+gramm
+gramofon
+gramofont
+gramofontû
+grandiózus
+grapefruit
+grasszál
+gratuláció
+gratulál
+gratuláló
+gravitáció
+gravitációs
+gravitál
+gravíroz
+gravírozás
+gravírozó
+gravírozógép
+gregorián
+grenadin
+griff
+griffmadár
+grill
+grillsütõ
+grimasz
+grimaszokat
+grimaszol
+grimaszt
+grimbuszt
+grossz
+groteszk
+groteszkség
+grotta
+grácia
+gráciák
+grádicsosan
+gráf
+gránit
+gránát
+gránátalma
+gránátkõ
+gránátnyomás
+gránátnyomásos
+gránátokkal
+gránátszilánk-fogó
+gránáttûz
+gróf
+grófné
+grófnõ
+grófság
+grüberli
+grüberlis
+guajáva
+guajávafa
+guba
+gubacs
+gubanc
+gubancos
+guberál
+guberálás
+guberáló
+gubó
+gubóselyem
+gubószál
+guga
+guggol
+guggolva
+guggoló
+gugora
+gugorafej
+guillotine
+guillotine-nel
+guinea
+gulipán
+gulya
+gulyás
+gulyásleves
+gumi
+gumiabroncs
+gumiabroncs-elcsúszás
+gumiabroncs-tapasz
+gumiabroncsot
+gumiban
+gumibelsõ
+gumibeszövéses
+gumibetét
+gumibetétes
+gumibot
+gumibugyi
+gumibélyegzõ
+gumicsizma
+gumicsónak
+gumicsõ
+gumicsúzli
+gumicucli
+gumicukor
+gumidefekt
+gumiember
+gumifa
+gumifûzõ
+gumihengerrel
+gumik
+gumikerék
+gumikötél
+gumilencse
+gumilencsével
+gumimatrac
+gumiobjektív
+gumiperem
+gumiperemes
+gumipólya
+gumis
+gumisarok
+gumiszalag
+gumiszerû
+gumiszárító
+gumiszövet
+gumitalpú
+gumitömlõ
+gumival
+gumivulkanizálás
+gumiz
+gumizott
+gumizsinór
+gumíroz
+gumírozott
+gumó
+gumós
+gunyoros
+gurka
+gurkráma
+gurtni
+guru
+gurul
+gurulva
+gurulás
+guruló
+gurulópálya
+gurulóút
+gurulóülés
+gurít
+gurítható
+gurítás
+gurító
+gurítódomb
+gurítókerék
+gusztus
+gusztustalan
+guta
+gutaütés
+gutaütéses
+gutaütésre
+guvrírozás
+gyagya
+gyakori
+gyakoriság
+gyakorisága
+gyakorlat
+gyakorlatba
+gyakorlatban
+gyakorlatból
+gyakorlati
+gyakorlatias
+gyakorlatiasság
+gyakorlatilag
+gyakorlatlan
+gyakorlatlanság
+gyakorlatok
+gyakorlatot
+gyakorlatozik
+gyakorlatoztat
+gyakorlatozás
+gyakorlatozó
+gyakorlott
+gyakorlottan
+gyakorlás
+gyakorlása
+gyakorló
+gyakorlórepülés
+gyakorlóruha
+gyakorlótér
+gyakorlóéves
+gyakornok
+gyakorol
+gyakorolt
+gyakoroltat
+gyakorta
+gyakorító
+gyakran
+gyalog
+gyalogezred
+gyaloghintó
+gyaloghíd
+gyalogjáró
+gyaloglás
+gyaloglást
+gyalogló
+gyalogol
+gyalogos
+gyalogszerrel
+gyalogság
+gyalogtávolság
+gyalogtõr
+gyalogtõrrel
+gyalogtúra
+gyalogtúrán
+gyalogtúrázik
+gyalogátkelõhely
+gyalogösvény
+gyalogút
+gyalom
+gyalu
+gyaluforgács
+gyalukés
+gyalul
+gyalult
+gyalulás
+gyaluval
+gyaluvas
+gyaláz
+gyalázat
+gyalázat!
+gyalázatban
+gyalázatos
+gyalázatosan
+gyalázatosság
+gyalázkodik
+gyalázkodás
+gyalázkodó
+gyalázó
+gyanakodik
+gyanakodva
+gyanakvás
+gyanakvó
+gyanta
+gyantaképzõ
+gyantás
+gyantát
+gyanánt
+gyanít
+gyanítani
+gyanítható
+gyanított
+gyanítás
+gyanú
+gyanúba
+gyanúja
+gyanúja,
+gyanúm,
+gyanún
+gyanúnak
+gyanús
+gyanúsan
+gyanúsat
+gyanúsít
+gyanúsított
+gyanúsítás
+gyanúsítást
+gyanúsító
+gyanút
+gyanútlan
+gyanútlanul
+gyapjas
+gyapjasság
+gyapjasítás
+gyapjú
+gyapjú-
+gyapjúanyag
+gyapjúfa
+gyapjúflanell
+gyapjúfonál
+gyapjúfésû
+gyapjúfürt
+gyapjúholmi
+gyapjúhozama
+gyapjúkasa
+gyapjúnyíró
+gyapjúpihe
+gyapjúszál
+gyapjúszövet
+gyapjút
+gyapjúvelúrszövet
+gyapjúzsír
+gyapjúáru
+gyapot
+gyapotmagtalanító
+gyapotszedõ
+gyapotszál
+gyapotárak
+gyarapodik
+gyarapodás
+gyarapodó
+gyarapszik
+gyarapít
+gyarapítja
+gyarló
+gyarlóság
+gyarmat
+gyarmati
+gyarmatok
+gyarmatos
+gyarmatosít
+gyarmatosítás
+gyarmatosító
+gyatra
+gyenge
+gyengeelméjû
+gyengeelméjûség
+gyengeség
+gyengeségekkel
+gyengeségtõl
+gyengeségét
+gyengébb
+gyengéd
+gyengéden
+gyengédség
+gyengédtelenül
+gyengéje
+gyengélkedik
+gyengélkedés
+gyengélkedõ
+gyengén
+gyengének
+gyengít
+gyengíti
+gyengítés
+gyengítõ
+gyengül
+gyengülés
+gyengülõ
+gyep
+gyepen
+gyepes
+gyepesít
+gyepet
+gyephengerlõ
+gyeplõ
+gyeplõn
+gyeplõt
+gyepmester
+gyepmesteri
+gyepszínvágó
+gyeptégla
+gyeptéglából
+gyeptéglával
+gyere
+gyerek
+gyerek!
+gyerek?
+gyerekarcú
+gyerekcipõben
+gyerekdal
+gyerekded
+gyereke
+gyerekek
+gyerekeket
+gyerekes
+gyerekesen
+gyerekesség
+gyereket
+gyerekjáték
+gyerekkel
+gyerekkor
+gyerekkori
+gyerekszoba
+gyerekszobája
+gyerektartás
+gyerekvers
+gyerkõc
+gyermek
+gyermek-
+gyermek-kártyajáték
+gyermekded
+gyermeke
+gyermekei?
+gyermekeinek
+gyermekek
+gyermekeknek
+gyermekes
+gyermekesen
+gyermeket
+gyermekgondozó
+gyermekgondozónõ
+gyermekgyilkos
+gyermekgyilkosság
+gyermekhordozó
+gyermeki
+gyermekies
+gyermekkocsi
+gyermekkor
+gyermekkora
+gyermekkorban
+gyermekkorában
+gyermekkorától
+gyermekkötény
+gyermekláncfû
+gyermeklány
+gyermekszoba
+gyermekszülésben
+gyermektartásra
+gyermektelen
+gyermektársasjáték
+gyermekágy
+gyermekágyban
+gyermeteg
+gyermetegség
+gyertek
+gyertya
+gyertyabél
+gyertyafény
+gyertyafényes
+gyertyakoppantó
+gyertyaszentelõ
+gyertyatartó
+gyertyaöntõ
+gyertyánfa
+gyertyát
+gyerünk
+gyerünk!
+gyerünk-gyerünk!
+gyilkol
+gyilkolás
+gyilkos
+gyilkosa
+gyilkosság
+gyilkossági
+gyilkosságon
+gyilkosságot
+gyom
+gyomirtó
+gyomlál
+gyomlálás
+gyomor
+gyomor-
+gyomorfalrétegek
+gyomorfekély
+gyomorfájás
+gyomorhurut
+gyomorkeserû
+gyomormosás
+gyomormosó
+gyomornedv
+gyomorra
+gyomorral
+gyomorrontás
+gyomorrontást
+gyomorsav
+gyomorsavtúltengés
+gyomorszáj
+gyomorszájon
+gyomorégés
+gyomos
+gyomra
+gyomrocs
+gyomrom
+gyomrot
+gyomrot)
+gyomrát
+gyomrú
+gyomtalanít
+gyomtól
+gyomverte
+gyopár
+gyors
+gyors,
+gyors-
+gyorsabb
+gyorsabban
+gyorsabbá
+gyorsan
+gyorsan!
+gyorsaság
+gyorsasággal
+gyorsaságmérõ
+gyorsbüfé
+gyorscsévél
+gyorsforraló
+gyorsfutár
+gyorsgõzös
+gyorshajtó
+gyorshír
+gyorshûtés
+gyorsjáratú
+gyorsjárõr
+gyorskazán
+gyorskocsi
+gyorsküldönc
+gyorslépésben
+gyorsmérleg
+gyorssajtó
+gyorstalpaló
+gyorstapasz
+gyorsteherkocsi
+gyorstüzelés
+gyorstüzelõ
+gyorsul
+gyorsulás
+gyorsuló
+gyorsvonat
+gyorsvonati
+gyorsvonatra
+gyorsáru
+gyorsáru-teherhajó
+gyorsáruk
+gyorsárut
+gyorsételek
+gyorsétkezés
+gyorsétkezõ
+gyorsírás
+gyorsírással
+gyorsíró
+gyorsírófüzet
+gyorsírógép
+gyorsít
+gyorsítja
+gyorsított
+gyorsítás
+gyorsító
+gyorsítórakéta
+gyorsúszás
+gyufa
+gyufa?
+gyufaszál
+gyufád?
+gyufásdoboz
+gyufát
+gyullad
+gyulladt
+gyulladtá
+gyulladva
+gyulladás
+gyulladásba
+gyulladásos
+gyulladáspont
+gyulladást
+gyulladó
+gyurma
+gyutacs
+gyutacsot
+gyám
+gyámfa
+gyámfal
+gyámfallal
+gyámfával
+gyámkodnak
+gyámkodás
+gyámlyukakba
+gyámolt
+gyámoltalan
+gyámoltalanság
+gyámoltalanul
+gyámolít
+gyámoszlop
+gyámság
+gyámsági
+gyámív
+gyár
+gyáregység
+gyári
+gyáron
+gyáros
+gyárt
+gyártelep
+gyártmány
+gyártmányú
+gyártott
+gyártás
+gyártási
+gyártású
+gyártó
+gyárépület
+gyász
+gyászban
+gyászdal
+gyászeset
+gyászfátyol
+gyászházon
+gyászjelentés
+gyászjelentések
+gyászkarszalag
+gyászkeretes
+gyászlepel
+gyászlepke
+gyászlégy
+gyászmise
+gyászmisedíj
+gyászol
+gyászolva
+gyászoló
+gyászos
+gyászosan
+gyászruha
+gyászruhában
+gyászszalag
+gyászszertartás
+gyászszertartáson
+gyászt
+gyászének
+gyáva
+gyáva,
+gyávaság
+gyáván
+gyávává
+gyékény
+gyékényen
+gyékényfonat
+gyékénykosár
+gyékényszõnyeg
+gyémánt
+gyémántboglár
+gyémántdiadém
+gyémántforgács
+gyémántkeménységû
+gyémántot
+gyémántszilánk
+gyér
+gyéren
+gyérség
+gyérül
+gyí!
+gyík
+gyíkpohár
+gyíktól
+gyógy-
+gyógyanyaggal
+gyógycseppek
+gyógydíj
+gyógyfõzet
+gyógyfûkereskedõ
+gyógyfûzõ
+gyógyfürdõ
+gyógyfürdõ-kezelés
+gyógyfürdõket
+gyógyfürdõtan
+gyógyfüvek
+gyógyhatás
+gyógyhatású
+gyógyintézete
+gyógykenõccsel
+gyógykenõcs
+gyógykezel
+gyógykezelés
+gyógykezelés)
+gyógymód
+gyógynövény
+gyógyszer
+gyógyszer-alkalmazás
+gyógyszeradag
+gyógyszerbevétel
+gyógyszerek
+gyógyszerel
+gyógyszereli
+gyógyszerelés
+gyógyszeres
+gyógyszerkönyv
+gyógyszerlevél
+gyógyszeroldat
+gyógyszerszekrény
+gyógyszertár
+gyógyszertári
+gyógyszerész
+gyógyszeríz-javító
+gyógytea
+gyógyul
+gyógyult
+gyógyulás
+gyógyvizek
+gyógyvizet
+gyógyvíz
+gyógyáru
+gyógyászat
+gyógyászati
+gyógyír
+gyógyírral
+gyógyít
+gyógyíthatatlan
+gyógyítás
+gyógyító
+gyógyüdülés
+gyógyüdülõ
+gyón
+gyónató
+gyóntat
+gyóntató
+gyóntatószék
+gyónás
+gyónási
+gyõz
+gyõzedelmes
+gyõzedelmesen
+gyõzedelmeskedik
+gyõzedelmeskedés
+gyõzelem
+gyõzelemtõl
+gyõzelmes
+gyõzelmesen
+gyõzelmet
+gyõzelmi
+gyõztes
+gyõztesek
+gyõztesen
+gyõztesnek
+gyõztessé
+gyõztesség
+gyõzõ
+gyõzõdj
+gyõzõdjék
+gyõzõdve
+gyõzöm
+gyõzött
+gyök
+gyökerek
+gyökereken
+gyökereket
+gyökerektõl
+gyökeres
+gyökeresedik
+gyökeresen
+gyökerestõl
+gyökerestül
+gyökeret
+gyökerezett
+gyökerezik
+gyökereznek
+gyökerezõ
+gyökerére
+gyökjel
+gyökszó
+gyökvonás
+gyökér
+gyökérben
+gyökércsatorna-tisztító
+gyökérdús
+gyökérfúró
+gyökérhajtás
+gyökérhajtásoktól
+gyökérnyak
+gyökérsarj
+gyökérsarjakat
+gyökérsarjaktól
+gyökérszerû
+gyökértelen
+gyökértelenség
+gyökérterpeszes
+gyökértõsarjakat
+gyököt
+gyömbér
+gyömbérgyökér
+gyömbérkenyér
+gyömbérsör
+gyömbérsütemény
+gyönge
+gyöngeség
+gyöngy
+gyöngydíszítés
+gyöngye
+gyöngyhalász
+gyöngyházból
+gyöngyléc
+gyöngymenta
+gyöngynyakék
+gyöngysor
+gyöngyszem
+gyöngyszerû
+gyöngyvesszõ
+gyöngyvirág
+gyöngyélete
+gyöngyökkel
+gyöngyözik
+gyöngyözés
+gyöngyözéssel
+gyöngyözõ
+gyöngyözött
+gyöngéden
+gyöngédség
+gyöngén
+gyöngített
+gyönyör
+gyönyörködtet
+gyönyörködtetés
+gyönyörködés
+gyönyörök
+gyönyörû
+gyönyörûen
+gyönyörûség
+gyönyörûséges
+gyötrelem
+gyötrelmes
+gyötrelmesen
+gyötri
+gyötrik
+gyötrés
+gyötrésre
+gyötrõ
+gyötrõdik
+gyötrõdés
+gyötör
+gyújt
+gyújtható
+gyújtogatás
+gyújtogató
+gyújtott
+gyújtva
+gyújtás
+gyújtáselosztó
+gyújtáshiba
+gyújtási
+gyújtásidõzítõ
+gyújtáskihagyás
+gyújtásszabályozó
+gyújtást
+gyújtó
+gyújtóbomba
+gyújtófej
+gyújtókupak
+gyújtókészülék
+gyújtókészülékkel
+gyújtólyuk
+gyújtóláng
+gyújtómágnes
+gyújtónyílás
+gyújtópont
+gyújtópontba
+gyújtóponti
+gyújtópontú
+gyújtós
+gyújtószerkezet
+gyújtótekercs
+gyújtótávolság
+gyújtótöltet
+gyújtózsinór
+gyúlékony
+gyúlékonyság
+gyúr
+gyúrja
+gyúrás
+gyúró
+gyûjt
+gyûjtemény
+gyûjteménye
+gyûjteményes
+gyûjts,
+gyûjtés
+gyûjtési
+gyûjtést
+gyûjtõ
+gyûjtõcsatorna
+gyûjtõhely
+gyûjtõkocsi-szolgálat
+gyûjtõlencse
+gyûjtõmedence
+gyûjtõnév
+gyûjtõtábor
+gyûjtõív
+gyûjtõívet
+gyûlik
+gyûlés
+gyûlésen
+gyûlési
+gyûlésre
+gyûlöl
+gyûlölet
+gyûlöletes
+gyûlöletesen
+gyûlöletesség
+gyûlölettel
+gyûlölködés
+gyûlölködõ
+gyûr
+gyûri
+gyûrõdik
+gyûrõdés
+gyûrõdése
+gyûrõdõ
+gyûrõdött
+gyûrött
+gyûrû
+gyûrû-
+gyûrûbe
+gyûrûcske
+gyûrûs
+gyûrûskála
+gyûrûskönyv-betét
+gyûrûsujj
+gyûrûvel
+gyûrûz
+gyûrûzik
+gyûrûzés
+gyûrûzõ
+gyûszû
+gyülekezet
+gyülekezete
+gyülekezetet
+gyülekezik
+gyülekezés
+gyülekezési
+gyülekezõhely
+gyülekszik
+gyülevész
+gyümölccsel
+gyümölcs
+gyümölcsbeérés
+gyümölcse
+gyümölcsevõ
+gyümölcsfa
+gyümölcsfákat
+gyümölcsjoghurt
+gyümölcskenyér
+gyümölcskocsonya
+gyümölcskosár
+gyümölcskrém
+gyümölcslepény
+gyümölcslé
+gyümölcslégy
+gyümölcsmag
+gyümölcsmoly
+gyümölcspép
+gyümölcsrothadás
+gyümölcssajt
+gyümölcsszedés
+gyümölcsszedõ
+gyümölcsszárító
+gyümölcstermõ
+gyümölcstest
+gyümölcstorta
+gyümölcsvelõ
+gyümölcsáruk
+gyümölcsárus
+gyümölcsérõl
+gyümölcsét
+gyümölcsíz
+gyümölcsízes
+gyümölcsös
+gyümölcsösbõl
+gyümölcsöskert
+gyümölcsösöket
+gyümölcsöt
+gyümölcsözik
+gyümölcsözteti
+gyümölcsözés
+gyümölcsözõ
+gácsér
+gádorkáva
+gágog
+gágogás
+gála
+gála-
+gálma
+gálya
+gályarab
+gáláns
+gáncs
+gáncsol
+gáncsolás
+gáncsoló
+gáncsoskodik
+gáncsoskodó
+gáncsot
+gáncsvetés
+gány
+gárda
+gárdaezred
+gárdista
+gárdisták
+gárdából
+gárdája
+gát
+gátak
+gátat
+gátfutás
+gátfutásban
+gátfutó
+gátkorona-magasság
+gátlás
+gátlása
+gátlásoktól
+gátlástalan
+gátlástalanul
+gátló
+gátlómû
+gátlószer
+gátol
+gátolja
+gátolt
+gátoltatás
+gátolás
+gáttal
+gáttalan
+gáz
+gázadagoló
+gázalakú
+gázba
+gázbenzin
+gázbuborék-fejlõdés
+gázcsatorna
+gázeltávolítás
+gázelvonás
+gázfejlesztés
+gázfejlõdés
+gázfertõtlenítõ
+gázgyári
+gázharang
+gázharisnya
+gázhegesztés
+gázjelzõ
+gázkamra
+gázkandalló
+gázkályha
+gázláng
+gázló
+gázlómadár
+gázmentesít
+gázmentesítés
+gázmérgezés
+gázmérés
+gázmérõtartály
+gáznemû
+gázok
+gázol
+gázolaj
+gázolható
+gázolás
+gázoló
+gázosodás
+gázosítás
+gázpedál
+gázsit
+gázsugár
+gázsugár-hajtómû
+gázsugárhajtómû
+gázszerelõ
+gázszén
+gázsütõ
+gázt
+gáztalanít
+gáztalanítás
+gáztartály
+gáztisztítás
+gáztisztító
+gáztámadás
+gáztûzhely
+gáztüzelésû
+gázvédõ
+gázzal
+gázálarc
+gázégõ
+gébics
+gége
+gége-
+gégefedõ
+gégefedõ-
+gégefedõre
+gégefedõvel
+gégefõ
+gégegyulladás
+gégetükör
+gégészet
+gél
+géllé
+gém
+gémeskút
+gémmozgató
+gémorfaj
+gén
+génua
+gép
+gép-alapterület
+gépasztal
+gépbehelyezés
+gépcsarnok
+gépcsoport
+gépegység
+gépek
+gépel
+gépelem
+gépelt
+gépeltérítõ
+gépelés
+gépember
+gépesít
+gépesített
+gépesítés
+gépet
+gépezet
+gépezetben
+gépezetet
+gépfegyver
+gépfegyver-megfigyelõ
+gépfegyveres
+gépfegyverkezelõ
+gépfûrész
+géphajtású
+gépház
+gépi
+gépies
+gépiesen
+gépiessé
+gépipari
+gépjármû
+gépjármûre
+gépjármûvek
+gépkarabély
+gépkenõcs
+gépkenõzsír
+gépkezelõ
+gépkocsi
+gépkocsi-
+gépkocsi-igazolvány
+gépkocsi-kölcsönzés
+gépkocsigyártás
+gépkocsikíséret
+gépkocsivezetést
+gépkocsivezetõ
+gépkocsivezetõi
+gépkocsizó
+géplakatos
+gépmûhely
+gépmûködés
+gépnapló
+gépolaj
+gépolló
+géppapír
+géppel
+géppisztoly
+géppuska
+géppuska-heveder
+géppuskás
+géppuskáz
+gépraj
+géprevízió
+gépromboló
+géprészek
+gépselyem
+gépszalag
+gépszedõ
+gépszerelõ
+gépszerkesztés
+gépszíj
+gépszín
+gépszínbe
+géptan
+gépterem
+gépvezetõ
+gépzene
+gépzongora
+gépágy
+gépágyú
+gépállvány
+gépész
+gépészet
+gépír
+gépíró
+gépírónõ
+géz
+gézcsomó
+gézkötés
+gézkötõcsomó
+gézpólya
+gímnyelv
+góc
+gócképzõdés
+gócpont
+gógyizik
+gól
+gólhelyzetet
+góllal
+gólszám
+gólt
+gólvonal
+gólya
+gólyahír
+gólyaláb
+gólyalábon
+gólyaorr
+góré
+gót
+gótikus
+gõg
+gõgicsél
+gõgicsélés
+gõgicsélõ
+gõgös
+gõgösen
+gõgösség
+gõte
+gõz
+gõzdóm
+gõze
+gõzerõvel
+gõzfátyol
+gõzfürdõ
+gõzgép
+gõzhajó
+gõzhajón
+gõzkalapács
+gõzmozdony
+gõznyomás
+gõzpuffer
+gõzpárna
+gõzsugár
+gõzsíp
+gõzt
+gõzzel
+gõzzé
+gõzért!
+gõzöd
+gõzöl
+gõzölgõ
+gõzölõ
+gõzölög
+gõzölögni
+gõzölögtet
+gõzöm
+gõzön
+gõzös
+gõzüzemû
+göb
+göcsörtös
+göcsös
+gödröcske
+gödröcskés
+gödröcskét
+gödröket
+gödrös
+gödrössé
+gödrösödés
+gödény
+gödölye
+gödör
+gödörbe
+gödörkézettség
+gömb
+gömbcsap
+gömbcsukló
+gömbfa
+gömbfejû
+gömbfát
+gömbháromszög
+gömbháromszögtan
+gömbkilincs
+gömbmértan
+gömbászka
+gömböc
+gömböcske
+gömbölyded
+gömbölydedség
+gömbölyít
+gömbölyítés
+gömbölyödik
+gömbölyû
+gömbölyûség
+gömbúszó
+gönc
+göndör
+göndörszõrû
+göndörít
+göndörített
+göndörítés
+göndörítõ
+göndörödik
+göndörödõ
+göngyöl
+göngyöleg
+göngyölt
+göngyölít
+göngyölõdik
+görbe
+görbeszelet
+görbeség
+görbék
+görbékkel
+görbén
+görbét
+görbévé
+görbít
+görbített
+görbíthetetlen
+görbíthetõ
+görbítés
+görbül
+görbület
+görbületi
+görbülés
+görccsel
+görcs
+görcsei
+görcsös
+görcsösen
+görcsösség
+görcsöt
+gördeszka
+gördeszkázik
+gördít
+gördíthetõ
+gördítés
+gördül
+gördülékeny
+gördülékenység
+gördülés
+gördülõ
+görfüggöny
+görget
+görgeteg
+görgõ
+görgõjárat
+görgõkerék
+görgõláb
+görgõs
+görgõvihar
+görkorcsolya
+görkorcsolyapálya
+görkorcsolyaverseny
+görkorcsolyázik
+görl
+görnyed
+görnyedt
+görnyedten
+görnyedtség
+görvélyes
+görvélykór
+görvélykóros
+görény
+görög
+görögdinnye
+görögtûz
+görögös
+göröngy
+göröngyök
+göröngyös
+göröngyösség
+göthös
+gúla
+gúlába
+gúlába!
+gúnnyal
+gúny
+gúnyirat
+gúnyiratban
+gúnyiratot
+gúnykacaj
+gúnyképet
+gúnyképrajzoló
+gúnynevet
+gúnynév
+gúnyol
+gúnyolás
+gúnyoló
+gúnyolódik
+gúnyolódva
+gúnyolódás
+gúnyolódó
+gúnyos
+gúnyosan
+gúnyrajz
+gúnyrajzot
+gúnyt
+gúnár
+gügye
+gügyög
+gügyögés
+gügyögõ
+gümõkór
+gümõkóros
+gümõs
+gürcöl
+gürcölés
+gürcölõ
+güzül
+h-hang
+h-t
+ha...
+hab
+habarccsal
+habarcs
+habarcsba
+habarcshordó
+habarcslövellés
+habarcsot
+habarcsréteg
+habarcssimító
+habarcsterítõ
+habarodva
+habbal
+habcsók
+habfürdõ
+habgumi
+habitus
+habja
+habját
+habjával
+habkiszedõ-kanál
+habkõ
+habkõvel
+habkönnyû
+hableány
+habok
+haboltó
+habos
+habosra
+habosítás
+habot
+habozik
+habozva
+habozás
+habozásra
+habozó
+habszedõ
+habszerû
+habsütemény
+habverõ
+habvetõ
+habzik
+habzsol
+habzás
+habzása
+habzó
+habár
+hacsak
+had
+hadakozik
+hadapród
+hadar
+hadarva
+hadarás
+hadaró
+hadat
+hadba
+hadbiztos
+hadbiztosság
+hadbíróság
+hadd
+haddal
+haderõ
+haderõnél
+hadfelszerelési
+hadgyakorlat
+hadi
+hadiadó
+hadianyag
+hadianyag-utánpótlás
+hadianyaggal
+hadianyaggyár
+hadianyaggyárban
+hadianyaggyári
+hadianyagraktár
+hadianyagügyi
+hadicsel
+hadiflotta
+hadifogoly
+hadifogolycsere
+hadifogolytábor
+hadigépezet
+hadihajó
+hadihajó-építõ
+hadihajón
+hadihajót
+hadiipar
+hadijelentésben
+hadijog
+hadikölcsön
+hadilobogó
+hadilábon
+hadilétszámon
+hadirokkant
+hadirokkantak
+hadisarc
+hadisten
+hadiszolgálatban
+hadiszállás
+haditanács
+haditengerész
+haditengerészet
+haditengerészeti
+haditudósító
+haditörvényszék
+hadizsákmány
+hadiállapotban
+hadiékítmény
+hadiüzem
+hadjárat
+hadjáratba
+hadjáratban
+hadkiegészítõ
+hadköteles
+hadkötelezettség
+hadmozdulat
+hadmérnök
+hadmérnökség
+hadmûvelet
+hadmûveletek
+hadmûveleti
+hadnagy
+hadnagyi
+hadnagyocska
+hadonászik
+hadonászás
+hadosztály
+hadosztályjelvény
+hadosztályparancsnok
+hadova
+hadra
+hadrendbe
+hadsereg
+hadsereg-ellenesség
+hadseregparancsnok
+hadszíntér
+hadtest
+hadtáp
+hadtáp-
+hadtápos
+hadtáposzlop
+hadtápszolgálat
+hadtápterület
+hadvezetõség
+hadvezér
+hadvezéri
+hadviselés
+hadviselõ
+hadügyminiszter
+hadügyminisztérium
+hadüzenet
+hagy
+hagyatkozik
+hagyatkozó
+hagyatott
+hagyaték
+hagyatéki
+hagyd
+hagyd!
+hagyhatja
+hagyható
+hagyj
+hagyja
+hagyja,
+hagyjuk
+hagyjuk,
+hagymahéj
+hagymatetõ
+hagymaágy
+hagymával
+hagymáz
+hagyni
+hagyomány
+hagyományok
+hagyományokhoz
+hagyományokon
+hagyományos
+hagyományosan
+hagyományoz
+hagyott
+hagyva
+hagyva,
+hagyás
+hagyó
+hahota
+hahotázik
+hahotázás
+haj
+haj-
+haja
+hajadon
+hajadonfõtt
+hajadonfõvel
+hajadra!
+hajas
+hajat
+hajba
+hajbalzsam
+hajbetét
+hajbóbitával
+hajbókol
+hajbókoló
+hajcsavaró
+hajcsipesz
+hajcsomó
+hajcsár
+hajdan
+hajdani
+hajdanában
+hajdanán
+hajfesték
+hajfodor
+hajfonat
+hajformáló
+hajfürt
+hajgumi
+hajhullámosítás
+hajhász
+hajhászó
+hajkefe
+hajkondicionáló
+hajkoszorú
+hajladozik
+hajladozó
+hajlakk
+hajlam
+hajlama
+hajlamos
+hajlamosság
+hajlamú
+hajlandó
+hajlandóság
+hajlandósága
+hajlandóvá
+hajlat
+hajlattal
+hajlatú
+hajlekötõ
+hajlik
+hajlong
+hajlongva
+hajlongás
+hajlongó
+hajlott
+hajlás
+hajlása
+hajlásszög
+hajlásszöge
+hajlást
+hajlásvonala
+hajlású
+hajlék
+hajlékonnyá
+hajlékony
+hajlékonyan
+hajlékonyság
+hajléktalan
+hajléktalanok
+hajléktalanság
+hajlít
+hajlíthatatlan
+hajlíthatatlanság
+hajlítható
+hajlíthatóság
+hajlított
+hajlítottfa-
+hajlítottság
+hajlítás
+hajlító
+hajlítóberendezés
+hajlítógép
+hajlítóprés
+hajló
+hajmeresztõ
+hajnal
+hajnalban
+hajnalcsillag
+hajnalhasadás
+hajnalka
+hajnalodik
+hajnalpír
+hajnyíró
+hajol
+hajolt
+hajpánt
+hajrá
+hajrát
+hajrázik
+hajsza
+hajszalag
+hajszesz
+hajszol
+hajszolja
+hajszolni
+hajszolt
+hajszolás
+hajszolása
+hajszál
+hajszál-
+hajszálat
+hajszálcsík
+hajszálcsõ
+hajszálcsöves
+hajszálcsövesség
+hajszáldrót
+hajszálfinom
+hajszálkereszt
+hajszálnyi
+hajszálnyira
+hajszálon
+hajszálpontos
+hajszálpontosan
+hajszálpontosság
+hajszálra
+hajszálrepedés
+hajszálrugó
+hajszálvonal
+hajszálvonal-hálózatos
+hajszálvékony
+hajszálér
+hajszárító
+hajsütés
+hajsütõvas
+hajt
+hajtani
+hajtat
+hajtatás
+hajthatatlan
+hajthatatlanná
+hajthatatlanság
+hajthatatlanul
+hajtincs
+hajtja
+hajtogat
+hajtogatott
+hajtogatás
+hajtott
+hajts!
+hajtva
+hajtás
+hajtása
+hajtásban
+hajtást
+hajtású
+hajtépázás
+hajtó
+hajtó-
+hajtóanyag
+hajtóerõ
+hajtófa
+hajtógép
+hajtója
+hajtóka
+hajtókar
+hajtóló
+hajtómû
+hajtómûleállás
+hajtómûvel
+hajtószíj
+hajtószíjak
+hajtóvadászat
+hajtóvadászati
+hajviselet
+hajvágás
+hajvágó
+hajvíz
+hajzat
+hajápolás
+haját
+hajít
+hajított
+hajítás
+hajításnyira
+hajításra
+hajító
+hajítódárda
+hajítórúd
+hajó
+hajóablak
+hajóalj
+hajóba
+hajóbiztosítás
+hajóbiztosítást
+hajóbiztosító
+hajóbordák
+hajóbordázatot
+hajóbérlet
+hajóbérleti
+hajóból
+hajóbörtön
+hajócsavar
+hajócsavartengely
+hajóderék
+hajófalon
+hajófar
+hajófaron
+hajófedélzet
+hajófedélzetre
+hajófelszerelési
+hajófenék
+hajófenékrész
+hajógazda
+hajógerendázat
+hajógerinc
+hajógyár
+hajógépész
+hajóhad
+hajóhely-meghatározás
+hajóhelyzet
+hajóhidat
+hajóhoz
+hajóhíd
+hajóhídon
+hajóinkhoz
+hajójavító
+hajójárat
+hajójáratok
+hajók
+hajókaraván
+hajókerék
+hajókikötõbak
+hajókirándulás
+hajókirándulást
+hajókonyha
+hajókukta
+hajókár
+hajókár-biztosítás
+hajókórház
+hajókötél
+hajókötélzet
+hajókötélzettel
+hajóközép
+hajóközéprõl
+hajólegénység
+hajólocsolófej
+hajólánc
+hajólépcsõ
+hajómûhely
+hajón
+hajónak
+hajónapló
+hajónaplóba
+hajóoldal
+hajóoldal-magasság
+hajóoldalfal
+hajóorr
+hajóorrtípus
+hajóorvos
+hajóosztály
+hajópadló
+hajópalló
+hajópalánk
+hajópalánk,
+hajópalánkolás
+hajópalánkot
+hajóparancsnok
+hajóperem
+hajóra
+hajóraj
+hajórakomány
+hajóraszállás
+hajóroncs
+hajóroncs-fosztogató
+hajóroncsok
+hajóroncsrabló
+hajórács
+hajórészvényes
+hajóról
+hajós
+hajósfütyülõ
+hajósinas
+hajóskapitány
+hajóslegény
+hajósmadár
+hajósnemzet
+hajósodor
+hajóstárs
+hajószakács
+hajószélesség
+hajósíppal
+hajósúly
+hajót
+hajót)
+hajótat
+hajótaton
+hajótest
+hajótestnek
+hajótárs
+hajótársaság
+hajótér
+hajótõkének
+hajótõkét
+hajótörés
+hajótörést
+hajótörött
+hajótüzér
+hajóutas
+hajóval
+hajóvezetõ
+hajóvontatás
+hajóvontató
+hajózható
+hajózik
+hajózsilip
+hajózsilippel
+hajózár
+hajózás
+hajózási
+hajózásra
+hajózászló
+hajózó
+hajóágyú
+hajóállás
+hajóélelemre
+hajóépítõ
+hajóóra
+hajóút
+hajóüdvözlés
+hajú
+hal
+hal-
+hal-tartály
+hala
+halad
+halad,
+haladnak
+haladnunk
+haladt
+haladtunk
+haladvány
+haladás
+haladása
+haladásellenes
+haladási
+haladását
+haladék
+haladékot
+haladéktalan
+haladéktalanul
+haladó
+halak
+halakat
+halandzsa
+halandzsázik
+halandzsázó
+halandó
+halandóság
+halaskofa
+halaskosár
+halastó
+halaszt
+halasztás
+halasztási
+halasztást
+halat
+halból
+halcsont
+haldarabka
+haldoklik
+haldokló
+halevõk
+halfajták
+halfarkas
+halfarok
+halfogás
+halfüstölõ
+halgazdaság
+halhatatlan
+halhatatlanná
+halhatatlanság
+halikra
+halivadék
+halk
+halkan
+halkeltetõ
+halkonzerv
+halkra
+halkult
+halkít
+hall
+hallal
+hallani
+hallat
+hallatja
+hallatlan
+hallatlan!
+hallatszik
+hallatára
+hallató
+hallgasd
+hallgass
+hallgass!
+hallgass,
+hallgassanak
+hallgasson
+hallgat
+hallgatag
+hallgatagság
+hallgatni
+hallgatott
+hallgatás
+hallgatásba
+hallgatásra
+hallgató
+hallgatódzik
+hallgatódzó
+hallgatókat
+hallgatólagos
+hallgatólagosan
+hallgatónõ
+hallgatóság
+hallgatóságot
+hallgatóságához
+hallgatózik
+hallgatózás
+hallgatózással
+hallgatózó
+hallható
+hallhatóan
+hallhatóság
+hallja
+halljak
+halljon
+halljuk!
+hallomás
+hallomásból
+hallott
+hallottam
+hallottam,
+hallottuk
+hallottál
+hallucinogén
+hallucináció
+hallucinációs
+hallucinál
+hallás
+hallás-
+hallása
+hallási
+hallásjavító
+hallással
+hallásterjedelem
+hallásérzetet
+hallású
+halló
+halló!
+halló-
+hallócsõ
+hallóideg
+hallójárat
+hallóképesség
+hallókészülék
+hallótávolság
+hallótávolságon
+halmaz
+halmaza
+halmazállapot
+halmocska
+halmoz
+halmozott
+halmozza
+halmozás
+halmozásával
+halmozó
+halmozódás
+halmozódó
+halnemû
+halogat
+halogatás
+halogató
+halogenid
+halogén
+halogénezett
+halom
+halomba
+halomra
+halotrichit
+halott
+halottaiból
+halottak
+halottakat
+halottas
+halottasház
+halottaskocsi
+halottat)
+halottgyalázás
+halotthalovány
+halotthalvány
+halotthamvasztás
+halotthamvasztási
+halotthamvasztó
+halotti
+halottkém
+halottkémlés
+halottnak
+halottszemle
+halottszemlét
+halottsápadt
+halottsápadttá
+halottvirrasztás
+halottvivõk
+halottégetõ
+halovány
+halpénz
+halpénzbetegség
+halraj
+halszerû
+halt
+haltartó
+haltenyészet
+halunk
+halva
+halvaszületett
+halvilla
+halvány
+halványan
+halványkék
+halványság
+halványsárga
+halványult
+halványulás
+halványuló
+halványít
+halál
+halál,
+halál-
+halála
+halálba
+halálbüntetés
+halálbüntetését
+haláleset
+halálesetek
+halálfej
+halálfélelem
+haláli
+halálkomolyan
+halállal
+halálnál
+halálos
+halálosan
+halálozás
+halálozási
+halálpontosan
+halálra
+halálraítélt
+halálsápadt
+halálsápadtan
+halált
+haláltusa
+haláltábor
+haláltól
+halálugrás
+halálugrást
+halálát
+halánték
+halántékcsont
+halántékfürt
+halász
+halászat
+halászati
+halászbárka
+halászhajó
+halászhorog
+halászháló
+halászhálókat
+halászik
+halászkampó
+halászkosár
+halászlé
+halászsas
+halászszigony
+halászterület
+halászás
+halászó
+hamar
+hamar?
+hamari
+hamarjában
+hamarosan
+hamburger
+hamis
+hamisan
+hamisgyöngy
+hamisjátékos
+hamiskártyás
+hamisság
+hamisít
+hamisítatlan
+hamisított
+hamisítvány
+hamisítás
+hamisító
+hamu
+hamu-
+hamuból
+hamuesõ
+hamukivonás
+hamulúg
+hamulúg-oldat
+hamuszerû
+hamuszínû
+hamuszürke
+hamuszürkévé
+hamutartó
+hamutlanítás
+hamutálca
+hamuval
+hamuzik
+hamuzsír
+hamva
+hamvad
+hamvadozó
+hamvas
+hamvasság
+hamvát
+hancúrozik
+hancúrozás
+handabandázás
+handzsár
+hanem
+hang
+hang-
+hanga
+hangadó
+hangafa
+hangafüves
+hangagyökér
+hangapipa
+hangbarázda
+hangbicsaklás
+hangcsúsztatás
+hangdoboz
+hangeffektusokkal
+hangelnyelõ
+hangeltolódás
+hangerõ
+hangerõsítõ
+hangfal
+hangfelvevõ
+hangfelvétel
+hangfelvételek
+hangfelvételrõl
+hangfelvételt
+hangfogó
+hangfogós
+hangfogót
+hanggal
+hanggátlás
+hanggátló
+hanghatár
+hanghatáson
+hanghatásra
+hanghatású
+hanghordozás
+hanghordozással
+hanghullám
+hanghullámokkal
+hanghûség
+hangja
+hangjegy
+hangjel
+hangjelzés
+hangjában
+hangját
+hangképzés
+hangköz
+hanglejtés
+hanglejátszó
+hanglemez
+hanglemezborító
+hanglemeztányér
+hangleszedõ
+hanglokátor
+hangmagasság
+hangmennyiség
+hangmérés
+hangnak
+hangnem
+hangnembe
+hangnemnélküliség
+hangnemváltozás
+hangnyaláb
+hangocskáját
+hangok
+hangokat
+hangol
+hangolt
+hangolva
+hangolvasás
+hangoló
+hangolókulcs
+hangon
+hangos
+hangosan
+hangosfilm
+hangoskocsi
+hangoskodás
+hangoskodó
+hangosság
+hangot
+hangot!
+hangoztat
+hangradar
+hangregiszter
+hangrendi
+hangrezegtetés
+hangrezgés
+hangrobbanás
+hangrés
+hangrés-
+hangrögzítõ
+hangsebesség
+hangsebességi
+hangsiklás
+hangsor
+hangszalag
+hangszalag-zárhang
+hangszedõ
+hangszer
+hangszer)
+hangszerel
+hangszerelés
+hangszerelõ
+hangszeren
+hangszeren)
+hangszeres
+hangszerhangoló
+hangszerre
+hangszerszekrény
+hangszigetelt
+hangszigetelés
+hangszigetelõ
+hangszál
+hangszálak
+hangszín
+hangszínezet
+hangszínt
+hangszóró
+hangszóró-berendezés
+hangszórómembrán
+hangszórós
+hangsáv
+hangsúly
+hangsúlyjel
+hangsúlyos
+hangsúlyoz
+hangsúlyozni
+hangsúlyozott
+hangsúlyozottan
+hangsúlyozza
+hangsúlyozás
+hangsúlyt
+hangsúlytalan
+hangtalan
+hangtalanul
+hangtan
+hangtani
+hangtartomány
+hangterjedelem
+hangtoldás
+hangtompító
+hangtompítós
+hangtompítót
+hangtölcsér
+hangtörés
+hangugratás
+hangulat
+hangulata
+hangulatban
+hangulathullámzás
+hangulatot
+hangulatvilágítás
+hangulatát
+hangulatú
+hangutánzó
+hangverseny
+hangversenymester
+hangversenyt
+hangversenyterem
+hangversenyzongora
+hangváltozás
+hangváltás
+hangvétel
+hangya
+hangyaboly
+hangyasav
+hangyasavamid
+hangyasavas
+hangyás
+hangyász
+hangzat
+hangzatos
+hangzatosság
+hangzavar
+hangzik
+hangzottak
+hangzás
+hangzású
+hangzásúvá
+hangzó
+hangzókihagyás
+hangár
+hangás
+hangú
+hangûr
+hant
+hanta
+hantázik
+hanyag
+hanyagság
+hanyagságból
+hanyagul
+hanyatlik
+hanyatlás
+hanyatló
+hanyatlóban
+hanyatt
+hanyatt-homlok
+hanyattfekvés
+hapci!
+happol
+hapsi
+hapsija
+hapták!
+harag
+harag!
+haragban
+haragjában
+haragjának
+haragját
+haragos
+haragosan
+haragot
+haragra
+haragszik
+haragszol?
+haragtartó
+haragtól
+haragudj
+haragudjék
+haragudjék!
+haragvó
+haragítani
+haragú
+harakiri
+haramia
+haramiafészek
+harang
+haranggal
+harangjáték
+harangjátékkal
+harangjátékmû
+harangkötelet
+harangláb
+harangnyelv
+harangokat
+harangot
+harangoz
+harangozik
+harangozás
+harangozó
+harangozódik
+harangrugó
+harangszigetelõ
+harangszék
+harangszó
+harangtartó
+harangtorony
+harangvirág
+harangzúgás
+harangzúgással
+harangöntõ
+harangütés
+harap
+harapd
+harapdál
+harapdálja
+harapni
+harapnivaló
+harapás
+harapásnyi
+harapásra
+harapással
+harapófogó
+harapós
+haraszt,
+harasztos
+harc
+harc-elõõrs
+harca
+harcba
+harcban
+harccsoport
+harcfeladat
+harcfelderítés
+harci
+harcias
+harciasan
+harciasság
+harciasságból
+harcjármû
+harcjátékban
+harckiképzés
+harckocsi
+harckocsivezetõ
+harckocsiárok
+harcképes
+harcképesség
+harcképtelen
+harcképtelenné
+harclépcsõ
+harcol
+harcolni
+harcoltak
+harcoló
+harcos
+harcosa
+harcosé)
+harcot
+harcra
+harcrend
+harcrendet
+harcsa
+harctevékenység
+harctéren
+harctéri
+harcvonal
+harcállás
+harcálláspont
+harcász
+harcászat
+harcászati
+harcérintkezés
+haris
+harisnya
+harisnya-kötöttáru
+harisnyakötõ
+harisnyanadrág
+harisnyaszegély
+harisnyaszár
+harisnyatartó
+harisnyában
+harisnyáján
+harisnyáját
+harisnyán
+harisnyát
+harkály
+harlekin
+harmadfokú
+harmadik
+harmadkézbõl
+harmadnap
+harmadol
+harmadpéldány
+harmadrangú
+harmadéves
+harmat
+harmathullás
+harmatos
+harmatossá
+harmatozik
+harmatpont
+harmatsúly
+harminc
+harmincadjára
+harmincon
+harmonika
+harmonikamûvész
+harmonikaszerûen
+harmonikus
+harmonikás
+harmonizál
+harmonizálása
+harmonizáló
+harmónia
+harmónium
+harsog
+harsogott
+harsogva
+harsogás
+harsogó
+harsona
+harsonamûvész
+harsonaszó
+harsonaszóval
+harsonája
+harsonás
+harsány
+harsányan
+harácsol
+harácsoló
+haránt
+harántcsapású
+harántcsíkolt
+harántcsíkos
+harántdomborulat
+harántgát
+harántmerevítõ
+harántos
+harántpólya
+harántterhelés
+has
+has-
+hasa
+hasad
+hasadozik
+hasadt
+hasadás
+hasadásos
+hasadék
+hasadó
+hasadótárcsa
+hasal
+hasalj
+hasalás
+hasas
+hasasodik
+hasba
+hasbeszéd
+hasbeszélés
+hasbeszélõ
+hascsikarás
+hascsikarása
+hasejtõernyõ
+hasfájás
+hashajtó
+hashajtót
+hashártyagyulladás
+hasi
+hasis
+hasizom
+haskó
+haskötõ
+haslábú
+hasló
+hasmenés
+hasmenéses
+hasmenést
+hasmánt
+hasnyálmirigy
+hasogat
+hasogatja
+hasogatott
+hasogatás
+hasogató
+hason
+hasonfekvés
+hasonfekvõ
+hasonlat
+hasonlatok
+hasonlatos
+hasonlatosság
+hasonlatosságot
+hasonlít
+hasonlít?
+hasonlíthatatlan
+hasonlíthatatlanul
+hasonlítható
+hasonlító
+hasonló
+hasonlóan
+hasonlók
+hasonlóképpen
+hasonlóképpen!
+hasonlóság
+hasonlóval
+hasonlóvá
+hasonmás
+hasonszenvi
+hasonszõrû
+hasonul
+hasonulás
+hasonélû
+haspuffadás
+haspárti
+haspók
+hasra
+hasraesés
+hastáj
+hastífusz
+hasuszony
+haszna
+haszna?
+hasznavehetetlen
+hasznavehetõ
+hasznavehetõség
+hasznod!
+hasznodra
+hasznom
+hasznon
+hasznos
+hasznosság
+hasznossági
+hasznosít
+hasznosítható
+hasznosíthatóság
+hasznosított
+hasznosítás
+hasznosítása
+hasznot
+használ
+használ,
+használ?
+használat
+használata
+használatba
+használatban
+használatból
+használati
+használatlan
+használatlanul
+használaton
+használatos
+használatra
+használattal
+használatával
+használhatatlan
+használhatatlanná
+használhatjuk
+használható
+használhatóság
+használja
+használni
+használt
+használás
+hasznára
+hasznát
+haszon
+haszon!
+haszonbérbe
+haszonbérlet
+haszonbérleti
+haszonbérlõ
+haszonelvû
+haszonelvûség
+haszonfa
+haszonlesés
+haszonlesõ
+haszonra
+haszontalan
+haszontalanság
+haszontalanságokat
+haszontalanságokkal
+haszontalanul
+haszonállatok
+haszonélvezet
+haszonélvezete
+haszonélvezeti
+haszonélvezõ
+haszonért
+hasztalan
+hasztalanul
+hasáb
+hasába
+hasábburgonya
+hasábfa
+hasábkorrektúra
+hasáblevonat
+hasábos
+hasát
+hasé
+hasít
+hasított
+hasítás
+hasíték
+hasító
+hasítókés
+hasú
+hasüregi
+hat
+hatalma
+hatalmak
+hatalmas
+hatalmaskodik
+hatalmaskodás
+hatalmaskodó
+hatalmasság
+hatalmat
+hatalmazva
+hatalmi
+hatalmon
+hatalmába
+hatalmában
+hatalmát
+hatalmú
+hatalom
+hatalomittas
+hatalommal
+hatalomra
+hatalomtól
+hatalomvágy
+hathatós
+hathatósan
+hathatósság
+hathatóság
+hatja
+hatlap
+hatlapfejû
+hatlapú
+hatni
+hatodfél
+hatol
+hatoldalú
+hatos
+hatosági
+hatott
+hatotta
+hatpennys
+hatsoros
+hatszor
+hatszoros
+hatszoroz
+hatszög
+hatszögekkel
+hatszögletû
+hatszögû
+hattyú
+hattyúnyak
+hattyúraj
+hatvan
+hatvanas
+hatvanhoz
+hatvanon
+hatvantól
+hatvanéves
+hatvány
+hatványkitevõ
+hatványoz
+hatványozás
+hatványsor
+hatágú
+hatállyal
+hatály
+hatályba
+hatálybalépés
+hatályban
+hatályon
+hatályos
+hatálytalan
+hatálytalanít
+hatálytalanított
+hatálytalanítás
+hatálytalanító
+hatályánál
+hatályú
+határ
+határ-
+határa!
+határai
+határain
+határait
+határellenállás
+határeset
+határfelület
+határfelületi
+határhaszon
+határhelyzet
+határidõ
+határidõ-
+határidõnapló
+határidõre
+határidõs
+határidõügylet
+határidõüzlet
+határjelek
+határkõ
+határkövek
+határmegállapítás
+határmezsgye
+határmezsgyéje
+határmérték-idomszer
+határnap
+határok
+határokon
+határol
+határolja
+határolás
+határoló
+határon
+határos
+határosság
+határoszlop
+határoz
+határoz?
+határozat
+határozatba
+határozati
+határozatképesség
+határozatképességhez
+határozatképtelenség
+határozatlan
+határozatlanság
+határozatlanul
+határozatot
+határozni
+határozott
+határozottan
+határozottság
+határozottsággal
+határozottságot
+határozza
+határozói
+határozók
+határpillér
+határszél
+határszéleket
+határszög
+határsáv
+határsávot
+határt
+határtalan
+határtalanul
+határterület
+határtól
+határvidék
+határvidéki
+határvonal
+határában
+határáig
+határállomás
+határán
+határát
+határátkelõhely
+határátlépõ
+határérték
+határértékek
+határõr
+hatás
+hatása
+hatásfok
+hatáskeresztmetszet
+hatáskör
+hatásköre
+hatáskörzet
+hatáskörébe
+hatáskörén
+hatáskörét
+hatáskörömbe
+hatáskörömben
+hatáskörömön
+hatások
+hatásos
+hatásosan
+hatásosság
+hatásra
+hatással
+hatást
+hatástalan
+hatástalanná
+hatástalanság
+hatástalanul
+hatástalanít
+hatásterület
+hatásvadászat
+hatásvadászó
+hatásvadászóan
+hatásvilágító
+hatására
+hatását
+hatású
+hatékonnyá
+hatékony
+hatékonyan
+hatékonyság
+ható
+hatóanyag
+hatóanyaga
+hatódik
+hatódva
+hatóerõ
+hatóerõhatár
+hatókör
+hatókörzet
+hatósugara
+hatósugár
+hatóság
+hatósághoz
+hatósági
+hatótávolság
+hatótávolságú
+hatökör
+havas
+havasi
+havazik
+havazás
+havazást
+haver
+haverkodik
+haverkodó
+havi
+havibaj
+havon
+havária
+hawaii
+haza
+haza-
+hazabeszél!
+hazafelé
+hazafi
+hazafias
+hazafiasság
+hazafiúi
+hazafutás
+hazai
+hazairányít
+hazait
+hazajár
+hazajáró
+hazajön
+hazakísér
+hazaküld
+hazaküldés
+hazamegy
+hazamenet
+hazamenni
+hazardíroz
+hazardírozó
+hazardõr
+hazarepül
+hazaszalad
+hazaszeretet
+hazatelepít
+hazatelepített
+hazatelepítés
+hazatér
+hazatérés
+hazatérõ
+hazautazás
+hazavezet
+hazavisz
+hazavág
+hazavágyódó
+hazaárulás
+hazaáruló
+hazaér
+hazaérkezett
+hazaérkezik
+hazaút
+hazudik
+hazudni
+hazudozik
+hazudozás
+hazudozásra
+hazudozó
+hazudós
+hazudós!
+hazug
+hazugság
+hazugságot
+hazugságra
+hazugságvizsgáló
+hazulról
+hazáig
+hazája
+hazája?
+hazájából
+hazárdjáték
+hazárdjátékos
+hazárdjátékot
+hazárdul
+hebeg
+hebegés
+hebehurgya
+hebehurgyaság
+hebehurgyán
+hecc
+heccbõl
+heccel
+heccelés
+heccelõ
+heccelõdõ
+hederít
+hedonista
+hefti
+heg
+heg-
+hegedt
+hegedû
+hegedûfejet
+hegedûiskola
+hegedûláb
+hegedûmûvész
+hegedûn
+hegedûs
+hegedût
+hegedül
+hegedülgetõ
+hegedülõ
+heges
+hegesedés
+hegeszt
+hegeszthetõ
+hegeszthetõség
+hegesztés
+hegesztési
+hegesztõ
+hegesztõpisztoly
+hegesztõív
+hegszövet
+hegy
+hegycsúcs
+hegydomborulat
+hegye
+hegyek
+hegyes
+hegyes-völgyes
+hegyesszög
+hegyesszöget
+hegyesszögû
+hegyet
+hegyetlen
+hegyez
+hegyezi
+hegyezés
+hegyezése
+hegyezõ
+hegyezõgép
+hegyfok
+hegygerinc
+hegyhát
+hegyi
+hegyibetegség
+hegyikristály
+hegyikék
+hegyire
+hegykoszorú
+hegylakó
+hegylánc
+hegymagasságú
+hegymenet
+hegymászás
+hegymászó
+hegynek
+hegynyereg
+hegynyúlvány
+hegyoldal
+hegyoldalon
+hegyorom
+hegyre
+hegyszakadék
+hegyszoros
+hegyszorosnak
+hegyszorost
+hegytetõ
+hegytorok
+hegyvidék
+hegyvidéki
+hegyvonulatos
+hegyén-hátán
+hegyével
+hegyû
+hehezet
+hehezetes
+hehezetesen
+hektográfiai
+hektár
+hekus
+helikopter
+helikopter-leszállóhely
+helikopter-repülõtér
+heliogravure
+hellyel-közzel
+hellén
+hellénista
+hely
+helybeli
+helyben
+helybenhagy
+helybenhagyták
+helybenjárás
+helybõl
+helycsere
+helycsere!
+helycserés
+helye
+helyedben
+helyein
+helyembe
+helyen
+helyenkénti
+helyes
+helyes!
+helyes,
+helyesbít
+helyesbített
+helyesbítés
+helyesebben
+helyesel
+helyeselhetõ
+helyesen
+helyeslem
+helyeslés
+helyeslõ
+helyeslõen
+helyeslõleg
+helyesnek
+helyesnek,
+helyesség
+helyesírás
+helyesírási
+helyet
+helyet!
+helyet)
+helyett
+helyettem
+helyettes
+helyettes-
+helyettesi
+helyettesként
+helyettest
+helyettesít
+helyettesítteti
+helyettesítés
+helyettesítésre
+helyettesítõ
+helyez
+helyezd
+helyezetlenek
+helyezett
+helyezhetõ
+helyezi
+helyezik
+helyezkedett
+helyezkedik
+helyezkednek
+helyezkedve
+helyezkedõ
+helyezve
+helyezés
+helyezõ
+helyfenntartás
+helyfoglalás
+helyhatósági
+helyhez
+helyi
+helyileg
+helyiség
+helyiségbõl
+helyisége
+helyiségek
+helyiségeket
+helyiségét
+helyiérdekû
+helyjegy
+helyjegyet
+helyjegyváltás
+helykén
+helylemondás
+helyleírás
+helyleíró
+helymeghatározás
+helyrajz
+helyrajzi
+helyre
+helyrehoz
+helyrehozhatatlan
+helyrehozhatatlanul
+helyrehozható
+helyrehozza
+helyrehozás
+helyrehozó
+helyreigazít
+helyrejön
+helyrepofoz
+helyrerakás
+helyretesz
+helyreállít
+helyreállítható
+helyreállítás
+helyrõl
+helyszín
+helyszínen
+helyszíni
+helyszínrajz-készítés
+helyszûke
+helyszûkében
+helység
+helyt
+helytartó
+helytartói
+helytartóság
+helytelen
+helytelenség
+helytelenít
+helytelenítés
+helytelenítõ
+helytelenítõen
+helytelenül
+helytáll
+helytálló
+helytállóság
+helytállósága
+helyválasztás
+helyváltoztatás
+helyzet
+helyzet!
+helyzet-megállapítás
+helyzetbe
+helyzetben
+helyzetbeállító
+helyzetbõl
+helyzete
+helyzeten
+helyzetet
+helyzethez
+helyzeti
+helyzetjelentést
+helyzetlámpa
+helyzetmegítélés
+helyzetpont
+helyzetpont-bemérés
+helyzetpont-meghatározás
+helyzettel
+helyzetteremtés
+helyzetvígjáték
+helyzetértékelés
+helyzetét
+helyzetû
+helyébe
+helyében
+helyén
+helyének
+helyénvaló
+helyére
+helyére!
+helyét
+helyõrség
+helyõrséget
+helyõrségi
+helyükre
+hematit
+hempereg
+hemzseg
+hemzsegnek
+hemzsegõ
+henceg
+hencegj!
+hencegni
+hencegés
+hencegõ
+hendikep
+henger
+hengerbetét
+hengercsaprózsa
+hengerel
+hengerelt
+hengeres
+hengerfej
+hengerfejüreg
+hengerfurat
+hengerjárat
+hengerkerék
+hengerlés
+hengerléssel
+hengerlõgép
+hengerlõmunkás
+hengermalom
+hengermû
+hengernyomás
+hengerpersely
+hengerpár
+hengersor
+hengersoron
+hengerszék
+hengerész
+hengerít
+hengerûrtartalom
+hengerüreg
+hentereg
+hentes
+hentes-szakma
+henteskés
+hentesüzlet
+henye
+henyeség
+henyél
+henyélés
+henyélõ
+hepaj
+hepciás
+hepciáskodik
+hepciáskodás
+hepciáskodó
+hepehupa
+hepehupaság
+hepehupák
+hepehupás
+hepp
+heppes
+herbatea
+herceg
+hercegecske
+hercegekben
+hercegi
+hercegné
+hercegnõ
+hercegség
+hercegségek
+here
+heresó
+herezacskó
+hering
+heringfüstölõ
+hermafrodita
+hermafroditaság
+hermelin
+hermelinnyúl
+hermetikusan
+hernyó
+hernyóbél
+hernyóselyem
+hernyótalp
+heroin
+heroinos
+hervad
+hervadhatatlan
+hervadozik
+hervadozó
+hervadt
+hervadás
+hervadási
+hervadó
+hervasztó
+herék
+herél
+herélt
+hess!
+hesseni
+hesszeni
+hete
+heted
+hetedhét
+hetedik
+hetente
+heterodin
+heterodox
+hetes
+hetet-havat
+heti
+hetven
+hetvenes
+hetvenkedik
+hetvenkedve
+hetvenkedés
+hetvenkedõ
+hetvenéves
+hetyke
+hetykeség
+hetykén
+heveder
+hevederes
+hevederfával
+hevedergerenda
+hevederpánt
+heveny
+hevenyében
+hevenyész
+hevenyészett
+hevenyészve
+hever
+hevertetés
+heverõ
+heves
+hevesebbé
+hevesen
+hevesen!
+hevessé
+hevesség
+hevít
+hevített
+hevítés
+hevül
+hevület
+hexensussz
+hezitál
+hiba
+hibahatár
+hibajavító
+hibajegyzék
+hibakeresõ
+hibamentes
+hibapont
+hibbant
+hibernáló
+hibiszkusz
+hibrid
+hibridizál
+hibád!
+hibáit
+hibája
+hibájából
+hibájára
+hibáját
+hibájául
+hibák
+hibákat
+hibákkal
+hibákra
+hibám,
+hibámból
+hibán
+hibás
+hibás!
+hibás?
+hibásan
+hibásnak
+hibássá
+hibát
+hibátlan
+hibátlanul
+hibázik
+hibáztat
+hibáztatható
+hibáért
+hidakat
+hidat
+hidd
+hideg
+hideg,
+hideg-
+hidegben
+hidegen
+hidegháború
+hidegre
+hidegrázás
+hidegség
+hidegtál
+hidegtõl
+hidegvacsora
+hidegvágó
+hidegvér
+hidegvér!
+hidegvérrel
+hidegvérét
+hidegvérû
+hidegvérûen
+hidegérzet
+hidra
+hidra-féle
+hidrargillit
+hidratáció
+hidratál
+hidratálás
+hidratáló
+hidraulika
+hidraulikus
+hidraulikusan
+hidrodinamikai
+hidrofon
+hidrogénbomba
+hidrogénez
+hidrogénezés
+hidrogénion
+hidrogénszulfát
+hidrometrálás
+hidrál
+hidrálás
+hidráns
+hidrát
+hidászalakulat
+hidászosztag
+hierarchia
+hierarchikus
+hieratikus
+hifi
+higany
+higany-
+higanyos
+higgadt
+higgadtan
+higgadtság
+higgadtságát
+higiénia
+higiénikus
+higiénikussá
+higroszkópos
+higított
+higító
+hihetetlen
+hihetetlen!
+hihetetlenkedve
+hihetetlenül
+hihetõ
+hihetõség
+himalájai
+himba
+himbacsapágy
+himbafûrész
+himbál
+himbálás
+himbálódzik
+himbálódzás
+himbálódzó
+himbálózik
+himbálózás
+himlõ
+himlõhely
+himlõhelyes
+himlõhelyessé
+himlõhólyag
+himnusz
+himpellér
+hindu
+hinduk
+hinnem,
+hinni
+hinni,
+hinné
+hint
+hinta
+hintaló
+hintapolitika
+hintaszék
+hintázik
+hintáztat
+hintáztatás
+hintázás
+hintázó
+hintó
+hintón
+hintõpor
+hiperbola
+hiperbolaszerûen
+hiperbolikus
+hiperbolikusan
+hiperboloid
+hipermodern
+hipertrófia
+hipnotikus
+hipnotizmus
+hipnotizál
+hipnotizálás
+hipnotizáló
+hipnotizõr
+hipnózis
+hipoallergén
+hipochondria
+hipofízis
+hipokrita
+hipokrízis
+hipotetikus
+hippi
+hirdet
+hirdetett
+hirdeti
+hirdetik
+hirdetmény
+hirdetés
+hirdetése
+hirdetésekkel
+hirdetési
+hirdetésnek
+hirdetésszöveg
+hirdetést
+hirdetõ
+hirdetõoszlop
+hirdetõtábla
+hirdopulper
+hirdopulperezés
+hirig
+hirtelen
+hirtelenkedés
+hirtelenkedõ
+hirtelenszõke
+hirtelenség
+hirtelenséggel
+hispanicismus
+história
+históriát?
+hisz
+hiszed,
+hiszek
+hiszekegy
+hiszem
+hiszem,
+hiszi
+hiszi,
+hiszterézis
+hiszterézishurok
+hiszti
+hisztizik
+hisztizés
+hisztéria
+hisztérikus
+hisztériás
+hiszékeny
+hiszékenyen
+hiszékenység
+hiszékenységét
+hit
+hitbizomány
+hitbizományt
+hitbizományul
+hitbuzgalmi
+hiteget
+hitehagyott
+hitehagyás
+hitel
+hitelbe
+hitelben
+hitelek
+hiteles
+hitelesen
+hitelesség
+hitelességét
+hitelességû
+hitelesít
+hitelesített
+hitelesítés
+hitelesítõ
+hitelezõ
+hitelezõk
+hitelkeret
+hitelkártya
+hitelképes
+hitelképesség
+hitelkövetelés
+hitellel
+hitellevelünk
+hitellevél
+hitelre
+hitelszámla
+hitelszövetkezet
+hitelt
+hiteltelen
+hiteltúllépést
+hitelveket
+hitelét
+hitelétõl
+hiteléül
+hitelû
+hitemre
+hitemre!
+hites
+hitet
+hitetlen
+hitetlenkedik
+hitetlenség
+hitetni,
+hithû
+hitoktatás
+hitre
+hitrege
+hitsorsos
+hitszakadás
+hitszegés
+hitszegõ
+hitszónok
+hitszónoklat
+hitszónokok
+hittan
+hittanóra
+hitterjesztési
+hittestvér
+hittestvéreim
+hittestvérek
+hittitok
+hittudomány
+hittudományi
+hittudományok
+hittudós
+hittérítõ
+hittétel
+hitvallás
+hitvalló
+hitves
+hitvese
+hitvesi
+hitvesi-
+hitvestárs
+hitvány
+hitványság
+hitványul
+hitvédelem
+hitvédõ
+hitújítás
+hitújító
+hivalkodik
+hivalkodás
+hivalkodó
+hivalkodóan
+hivatal
+hivatalba
+hivatalból
+hivatalcserével
+hivatali
+hivatalnok
+hivatalnoka
+hivatalnoknõ
+hivatalnokoskodik
+hivatalnokszellem
+hivatalos
+hivatalosan
+hivatalsegéd
+hivatalt
+hivatalviselés
+hivataláról
+hivatalát
+hivatkozhatsz
+hivatkozik
+hivatkozni
+hivatkozom
+hivatkozás
+hivatkozási
+hivatkozással
+hivatott
+hivatottság
+hivatás
+hivatásgyakorlás
+hivatásos
+hivatásszerûen
+hivatásérzet
+hizlal
+hizlalt
+hizlaló
+hizlalóketrec-sorozat
+hiába
+hiábavaló
+hiábavalóan
+hiábavalóság
+hiány
+hiánya
+hiánycikk
+hiányjel
+hiányjelzõ
+hiányol
+hiányos
+hiányosan
+hiányosnak
+hiányosság
+hiányt
+hiánytalan
+hiánytalanul
+hiányzik
+hiányzott!
+hiányzó
+hiányában
+hiátus
+hiéna
+hiú
+hiún
+hiúság
+hiúságát
+hiúz
+hm!
+hobbi
+hobó
+hoc
+hoci-nesze
+hogy
+hogy!
+hogy...?
+hogyan
+hogyan?
+hogyha
+hogyishívják
+hogyne
+hogyne!
+hojsza
+hokedli
+hokiütõ
+hol
+hol?
+hold
+hold-
+holdas
+holdat
+holdbab
+holdciklus
+holdfogyatkozás
+holdfény
+holdfényes
+holdfényhatás
+holdfölkelte
+holdhal
+holdhoz
+holdhónap
+holding-társaság
+holdjármû
+holdkocsi
+holdkóros
+holdkõ
+holdnap
+holdnegyed
+holdraszállás
+holdrepülés
+holdsarló
+holdsugár
+holdséta
+holdsütötte
+holdtalan
+holdtól
+holdtölte
+holdudvar
+holdutazás
+holdvilág
+holdvilágos
+holi
+holisztikus
+holland
+hollandi
+hollandok
+hollandusok
+hollét
+holló
+hollófekete
+hollófélék
+hollónak
+holmi
+holmijait
+holmiját
+holmik
+holmink
+holmit
+holnap
+holnap!
+holnapra
+holnapután
+holt
+holt-tenger
+holta
+holtak
+holtan
+holtbiztos
+holtbiztos!
+holtcsalán
+holtfej
+holtfuvar
+holtfáradt
+holtfáradtan
+holtjáték
+holtjátékot
+holtkéz
+holtpont
+holtpontra
+holtra
+holtrészeg
+holtrészegen
+holtszezon
+holtszámla
+holtsápadt
+holtsúly
+holtsúlytartály
+holtteher
+holttengely
+holttest
+holttestet
+holttá
+holttér
+holtverseny
+holtversenyben
+holtversenyt
+holtvágány
+holtvíz
+holtzóna
+holtág
+holyva
+hombre
+hombár
+homeopata
+homlok
+homlok-
+homloka
+homlokba
+homlokegyenest
+homlokfal
+homlokkötõ
+homloklap
+homloklebeny-metszés
+homlokmoréna
+homlokrajz
+homlokszalag
+homlokszíj
+homlokzat
+homlokzatot
+homlokzatrészlet
+homlokán
+homlokán)
+homlokára
+homlokát
+homlokív
+homlokú
+homloküreg
+homogenitás
+homogenizálás
+homogén
+homok
+homokba
+homokbucka
+homokdomb
+homokfogó
+homokfutó
+homokfúvó
+homokgödör
+homokkal
+homokkõ
+homokos
+homokot
+homokozik
+homokozó
+homokpad
+homokréteggel
+homokszem
+homokszínû
+homokszóró
+homoksütemény
+homoktorta
+homokverés
+homokvár
+homokzsák
+homokzsákkal
+homokzsákokból
+homokzátony
+homokóra
+homorulat
+homorít
+homorítás
+homorító
+homorú
+homorúan
+homoszexualitás
+homoszexuális
+homály
+homálya
+homályba
+homályos
+homályosan
+homályosodó
+homályosság
+homályosul
+homályosult
+homályosít
+homályosítható
+homályosító
+homályába
+homár
+homéroszi
+hon
+hondurasi
+honfitárs
+honi
+honnan
+honnét
+honorál
+honorárium
+honosít
+honosított
+honosítás
+hontalan
+honvágy
+honvágya
+honvédelem
+honvédelmi
+honvédõ
+honállomás
+hopp,
+hoppá!
+hord
+horda
+hordalék
+hordalékföld
+hordalékot
+hordalékpad
+hordalékterület
+hordd
+horderõ
+hordfelület
+hordható
+hordja
+hordképesség
+hordott
+hordoz
+hordozható
+hordozza
+hordozó
+hordozórakéta
+hordszék
+hordtengely
+hordtávolság
+hordágy
+hordágyvivõ
+hordár
+hordás
+hordó
+hordó-dugasz
+hordóakasztó
+hordóakona
+hordóba
+hordóban
+hordócsap
+hordócska
+hordódonga
+hordók
+hordónyi
+hordós
+hordószónok
+hordót
+hordóz
+hordóállvány
+horgannyal
+horgany
+horganycink
+horganyfehér
+horganylemezzel
+horganyoz
+horganyozás
+horgas
+horgokkal
+horgol
+horgolás
+horgolótû
+horgonnyal
+horgony
+horgonybója
+horgonyemelõ-gerenda
+horgonyfedélzet
+horgonyhegy
+horgonyköröm
+horgonykötél
+horgonylánc
+horgonyláncnyílás
+horgonyláncvezetõ
+horgonyokat
+horgonyoz
+horgonyra
+horgonyt
+horgonyzás
+horgonyzási
+horgonyzásra
+horgonyzó
+horgonyzóbér
+horgonyzóhely
+horgonyzóhely-változtatás
+horgonyzóhelyet
+horgonyán
+horgos
+horgot
+horgász
+horgászat
+horgászbot
+horgászik
+horgászkészség
+horgászzsinór
+horgászzsinórral
+horgászás
+horizont
+horizontális
+horkan
+horkant
+horkantás
+horkol
+horkolás
+horkoló
+hormon
+hornblende
+hornyol
+hornyolat
+hornyolt
+hornyolás
+hornyolású
+hornyoló
+hornyológyalu
+hornyos
+hornyosan
+hornyozás
+horog
+horoggal
+horogkarom
+horogkereszt
+horognyelv
+horognyelv-terelõ
+horogról
+horogvassal
+horogzsinór
+horony
+horonyba
+horonygyalu
+horonyvágó
+horoszkóp
+horoszkópkészítõ
+horoszkópot
+horpadás
+horpadást
+horpasz
+horpaszt
+hortyog
+hortyogás
+hortyogó
+horvát
+horzsol
+horzsolt
+horzsolás
+horzsolódás
+hossz
+hossz-szelvény
+hossza
+hosszabb
+hosszabbodik
+hosszabbodás
+hosszabbít
+hosszabbítás
+hosszabbító
+hosszadalmas
+hosszadalmasan
+hosszadalmasság
+hosszaljzat
+hosszan
+hosszant
+hosszanti
+hosszas
+hosszasan
+hosszat
+hosszesztergályozás
+hosszgerenda
+hosszhajó
+hosszirányban
+hosszirányra
+hosszirányú
+hosszjelzõ
+hosszmetszet
+hosszmetszet-szelvény
+hosszméret
+hosszmérték
+hosszmértékek
+hosszpántok
+hosszra
+hossztartó
+hosszában
+hosszáig
+hosszított
+hosszú
+hosszú,
+hosszúhullám
+hosszúkás
+hosszúlángú
+hosszúlélegzetû
+hosszúnadrág
+hosszúnyelû
+hosszúra
+hosszúszálú
+hosszúszõrû
+hosszúság
+hosszúsági
+hosszútávú
+hotel
+hova
+hovatartozás
+hovatartozást
+hová
+hoz
+hozadék
+hozakodik
+hozam
+hozamképes
+hozamú
+hozat
+hozatal
+hozd
+hozható
+hoznak
+hozni
+hozná
+hozod
+hozol
+hozománnyal
+hozomány
+hozott
+hozott!
+hozta
+hozta!
+hozz
+hozza
+hozzá
+hozzá!
+hozzá,
+hozzá?
+hozzáad
+hozzáadott
+hozzáadva
+hozzáadás
+hozzáadása
+hozzáakaszt
+hozzáalkalmaz
+hozzáalkalmazás
+hozzábújik
+hozzácsatol
+hozzácsatolás
+hozzád
+hozzád,
+hozzád?
+hozzádörgölõdzik
+hozzádörgölõzik
+hozzádörzsöli
+hozzáedz
+hozzáedzõdik
+hozzáedzõdött
+hozzáerõsít
+hozzáerõsítés
+hozzáfog
+hozzáfér
+hozzáférhetetlen
+hozzáférhetõ
+hozzáférhetõen
+hozzáférhetõség
+hozzáférhetõvé
+hozzáférni
+hozzáférés
+hozzáfûz
+hozzáfûzés
+hozzáfüggeszt
+hozzágondol
+hozzáidomulni
+hozzáidomít
+hozzáigazít
+hozzáigazítás
+hozzáilleszt
+hozzáilleszthetõ
+hozzáillesztés
+hozzáillik
+hozzáillõ
+hozzájuk
+hozzájut
+hozzájutni
+hozzájuttat
+hozzájutás
+hozzájárul
+hozzájárulás
+hozzájárulása
+hozzájárulását
+hozzájáruló
+hozzájön
+hozzákapcsol
+hozzákapcsolt
+hozzákapcsolás
+hozzákever
+hozzákeverés
+hozzákezd
+hozzáköt
+hozzákötött
+hozzálát
+hozzám
+hozzámegy
+hozzámér
+hozzánk
+hozzányúl
+hozzáragad
+hozzáragadó
+hozzáragaszt
+hozzárendezés
+hozzásimul
+hozzásimuló
+hozzászokik
+hozzászokott
+hozzászoktat
+hozzászoktatás
+hozzászokva
+hozzászámít
+hozzászól
+hozzátapad
+hozzátartozik
+hozzátartozó
+hozzátartozói
+hozzátartozóim
+hozzátartozók
+hozzátesz
+hozzátette,
+hozzátold
+hozzávaló
+hozzávalók
+hozzávalókból
+hozzávetõleg
+hozzávetõleges
+hozzávetõlegesek
+hozzávetõlegesen
+hozzávág
+hozzáállás
+hozzáépít
+hozzáépített
+hozzáépítés
+hozzáér
+hozzáért
+hozzáértés
+hozzáértéssel
+hozzáértõ
+hozzáértõen
+hozzáír
+hozás
+hozó
+huanakó-kéreg
+hugyozik
+hugyozás
+huhog
+huhogás
+huj!
+huj-hujozással
+hujjogatás
+huligán
+huligánság
+hull
+hulla
+hullaboncolás
+hullaboncolást
+hulladék
+hulladék-
+hulladékanyag
+hulladékból
+hulladékok
+hulladékos
+hulladékpapír
+hulladéksav
+hulladékszén
+hulladéktermék
+hulladékudvar
+hulladékégetõ
+hullafáradt
+hullaház
+hullakamra
+hullamerevség
+hullamosó
+hullanak
+hullarabló
+hullarészeg
+hullaszemle
+hullaszerû
+hullaszerûen
+hullat
+hullatja
+hullatolvaj
+hullató
+hullik
+hulllám
+hullott
+hullám
+hullám-
+hulláma
+hullámbádog
+hullámcsat
+hullámcsúcs
+hullámelmélet
+hullámjel
+hullámkrepp
+hullámlemez
+hullámlovagol
+hullámléc
+hullámmechanika
+hullámminta
+hullámmozgás
+hullámmozgások
+hullámocska
+hullámok
+hullámokat
+hullámokkal
+hullámokon
+hullámoktól
+hullámon
+hullámos
+hullámossá
+hullámosság
+hullámosít
+hullámosítás
+hullámosító
+hullámpapír
+hullámrajzoló
+hullámsor
+hullámszám
+hullámszûrõ
+hullámsáv
+hullámsávot
+hullámsírban
+hullámtaréj
+hullámtér
+hullámtörés
+hullámtörõ
+hullámtörõgát
+hullámvaslemez
+hullámvasút
+hullámverés
+hullámváltó
+hullámvölgy
+hullámzik
+hullámzás
+hullámzó
+hullás
+hullát
+hulló
+hullócsillag
+hullórostély
+humanizmus
+humanizált
+humanizálás
+humanizálódás
+humbug
+humor
+humorista
+humoros
+humortalan
+humortalanság
+humorérzéke
+humusz
+humuszos
+humuszréteg
+humán
+humánus
+humánusan
+huncut
+huncut!
+huncutka
+huncutkodás
+huncutkodó
+huncutság
+huncutul
+hungarocell
+huny
+hunyni
+hunyor
+hunyorgás
+hunyorog
+hunyorít
+hunyorítás
+hunyorítással
+hunyás
+hunyó
+huppan
+huppanva
+huppanás
+huppanók
+huppot
+hurcol
+hurcolkodik
+hurka
+hurkabél
+hurkagyuri
+hurkol
+hurkolt
+hurkolás
+hurkolódik
+hurkos
+hurkot
+hurok
+hurokcsomó
+hurokkal
+hurrikán
+hurrá
+hurrá!
+hurrát
+hurráz
+hurrázás
+hurukkol
+hurukkolás
+hurut
+hurutot
+huszadik
+huszita
+huszonegy
+huszonegyedik
+huszonegyes
+huszonegyezik
+huszonkét
+huszonnégy
+huszár
+huszárezred
+husáng
+huzag
+huzagol
+huzagolt
+huzagolás
+huzakodás
+huzal
+huzalcsíptetõ
+huzalkapocs
+huzalszorító
+huzalszövet
+huzalvég
+huzalvég-szigetelõ
+huzalvégzõdés
+huzat
+huzata
+huzatfogó
+huzatos
+huzatszabályozó
+háborgat
+háborgatott
+háborgatás
+háborgás
+háborgó
+háborodott
+háborodva
+háborog
+háborít
+háborítatlan
+háború
+háborúba
+háborúban
+háborúellenes
+háborúk
+háborúkat
+háborús
+háborúskodik
+háborút
+háborúzik
+hág
+hágcsó
+hágott
+hágó
+háj
+hájas
+hájasság
+hájfej
+hájjal
+hál
+hála
+hálaadás
+hálaadó
+hálaének
+hályog
+hályoggal
+hályogos
+hálából
+háládatlan
+hálálkodásban
+hálálkodásának
+hálált
+hálás
+hálásan
+hálásnak
+hálát
+hálátlan
+hálátlanság
+hálátlansággal
+hálátlanságot
+hálátlanul
+hálával
+háló
+hálóba
+hálóból
+hálócsomózás
+hálófülke
+hálóhely
+hálóhelye
+hálóhelyet
+hálóhelyiségek
+hálóholmi
+hálóing
+hálóját
+hálókocsi
+hálókocsi-fülke
+hálókocsi-kalauz
+hálókocsifülke
+hálókocsijegyet
+hálókészítés
+hálóköntös
+hálókötõ
+hálópizsama
+hálóruha
+hálós
+hálósapka
+hálószatyor
+hálószem
+hálószerû
+hálószerûen
+hálószoba
+hálószobában
+hálószövet
+hálót
+hálóterem
+hálóval
+hálózat
+hálózata
+hálózati
+hálózatot
+hálózsák
+hálóöltöny
+hám
+hámból
+hámiga
+hámlik
+hámlás
+hámló
+hámoz
+hámozható
+hámozott
+hámozás
+hámtalanított
+háncs
+háncsfonat
+háncskosár
+háncsrost
+háncsszõnyeg
+hánt
+hántol
+hántolatlan
+hántolt
+hántolás
+hántolókés
+hány
+hány-vet
+hány?
+hányad
+hányadik
+hányadika
+hányados
+hányadék
+hányan
+hányatott
+hányattatás
+hányaveti
+hányavetin
+hányinger
+hányingere
+hányingerrel
+hányja
+hányja-veti
+hánykolódik
+hánykolódás
+hánykolódó
+hányok
+hányszor
+hányszor?
+hányt
+hánytató
+hánytatószer
+hányva
+hányás
+hányó
+hányódik
+hányódik-vetõdik
+hányódni
+hányódva
+hányódás
+hányódó
+hányóeke
+hányófelújítás
+hányózacskó
+hápog
+hápogás
+háramlik
+háramlás
+hárem
+háremrendszer
+hárfa
+hárfajátékos
+hárfás
+hárfázik
+hárijánoskodik
+hármas
+hármashangzat
+hármasszabály
+hármasugrás
+három
+három,
+három-null
+háromajtós
+hárombázisú
+háromcolos
+háromdimenziójú
+háromfejû
+háromfokozatú
+háromhónapi
+háromkirályok
+háromkor
+háromköves
+háromláb
+háromlábú
+háromlépcsõs
+háromnapos
+háromnegyed
+háromoldalú
+háromosztású
+hárompontos
+hárompárevezõs
+háromrészes
+háromrétegû
+háromrétû
+háromról
+háromsoros
+háromszor
+háromszoros
+háromszorosa
+háromszorosan
+háromszoroz
+háromszorozódik
+háromszálú
+háromszázöt
+háromszög
+háromszögek
+háromszögelés
+háromszögletû
+háromszögnadrág
+háromszögnek
+háromszögtan
+háromszögvitorla
+háromszögû
+háromság
+háromvegyértékû
+háromágú
+háromélû
+háromüléses
+hárpia
+hárs
+hársfa
+hársfaháncs
+hársfatea
+hártya
+hártyapapír
+hártyás
+hártyásodik
+hártyásszárnyú
+hártyával
+hárul
+hárulnak
+háruló
+háryjános
+háryjánoskodás
+háryjánoskodó
+hárít
+hárítja
+hárítás
+hát
+hát!
+hát-
+háta
+hátam
+hátamat
+hátasló
+hátat
+hátba
+hátbatámadás
+hátbaveregetõ
+hátborzongató
+hátborzongatóan
+hátborzongatóság
+hátcsigolya
+hátegyenesítõ
+hátfalazása
+hátfélszél
+hátgerinc
+hátgerincmasszázs
+hátgerincmasszázzsal
+hátgerincmasszõr
+hátgyapjú
+hátgörbesztõ
+háti
+hátirat
+hátirattal
+hátitáska
+hátizsák
+hátlap
+hátlapon
+hátlapra
+hátoldal
+háton
+hátország
+hátra
+hátra!
+hátra,
+hátra-turbina
+hátraarc
+hátraarcot
+hátradõl
+hátradõlt
+hátradõlõ
+hátradönthetõ
+hátraesett
+hátraesik
+hátraesztergálás
+hátrafelé
+hátrafordul
+hátrafut
+hátrafutás
+hátrafésült
+hátragurul
+hátrahagy
+hátrahagyott
+hátrahajlott
+hátrahajlított
+hátrahajítás
+hátrahanyatlik
+hátraható
+hátrahõköl
+hátrahõkölés
+hátrahúz
+hátrahúzás
+hátrakötik
+hátralevõ
+hátralék
+hátralékba
+hátralékban
+hátralékos
+hátralékot
+hátramarad
+hátramaradott
+hátramaradottak
+hátramaradozik
+hátramaradt
+hátramenet
+hátramozdító
+hátramunkálás
+hátranéz
+hátrasiklik
+hátrasiklás
+hátrasiklás-csökkentõ
+hátrasiklást
+hátrasodort
+hátratesz
+hátratámaszt
+hátratûz
+hátraugrik
+hátravetés
+hátravonul
+hátravonulás
+hátrább
+hátrál
+hátráltat
+hátráltatás
+hátrálás
+hátráló
+hátrány
+hátrányos
+hátrányt
+hátrész
+hátrésze
+hátszalonna
+hátszél
+hátszélbõl
+hátszéllel
+hátszín
+hátszínszelet
+hátszög
+hátság
+hátsó
+hátsó-felsõsudárvitorla
+hátsófogás
+hátsókert
+hátsórész
+hátsóárboc-felsõsudárvitorla
+hátsóárboc-sudárvitorla
+háttal
+háttere
+hátterébe
+hátterébõl
+hátterét
+háttámasz
+háttér
+háttérbe
+háttérben
+háttérben?
+háttérbõl
+háttérfüggöny
+hátul
+hátulja
+hátuljával
+hátulról
+hátulsó
+hátulütõ
+hátvéd
+hátvédek
+hátvédet
+hátvédsor
+hátán
+hátára
+hátát
+hátú
+hátúszás
+ház
+háza
+házadó
+házaik
+házaknak
+házal
+házalás
+házaló
+házam
+házamban
+házas
+házas-
+házasodik
+házasok
+házaspár
+házasság
+házasságban
+házasságból
+házassággal
+házassági
+házasságképes
+házasságkötés
+házasságkötési
+házasságközvetítõ
+házasságlevél
+házasságon
+házasságot
+házasságra
+házasságtörés
+házasságtörõ
+házastárs
+házastársi
+házasulandó
+házasulási
+házasélet
+házat
+házatlan
+házba
+házban
+házbérleti
+házból
+házfelügyelõ
+házfõnök
+házhely
+házhoz
+házi
+házias
+háziasszony
+háziasság
+háziasít
+háziasított
+házibál
+házicipõ
+házig
+házigalamb
+házigazda
+háziipar
+házikabát
+házikó
+házilag
+házilégy
+házimunka
+házinyúl
+házinéni
+háziorvos
+házipatika
+házirend
+háziruha
+házisapka
+háziszolga
+háziszõttes
+háziszõttesbõl
+házivászon
+háziállat
+háziállati
+háziúr
+házkutatási
+házmester
+házmesternõ
+háznak
+háznál
+háznép
+házon
+házra
+házról
+házsor
+házszabályok
+házszám
+házsártos
+házsártosság
+háztartás
+háztartása
+háztartásban
+háztartási
+háztartást
+háztartástan
+háztartását
+háztulajdonos
+háztáji
+háztól
+háztömb
+házuk
+házunkba
+házunkhoz
+házvezetõnõi
+házzal
+házába
+házának
+házát
+házõrzõ
+hé!
+hébe-hóba
+héber
+hébér
+héj
+héja
+héjas
+héjazat
+héjlemezelés
+héjszerkezet
+héjában
+héját
+héjától
+hét
+hétalvó
+héten
+hétfõ
+hétfõtõl
+hétig
+hétkor!
+hétköznap
+hétköznapi
+hétköznapian
+hétköznapias
+hétköznapiság
+hétköznapivá
+hétmérföldes
+hétpecsétes
+hétpróbás
+hétre
+hétre?
+héttel
+hétvégét
+hév
+hévvel
+hévíz
+hézag
+hézagkikenés
+hézagkiöntés
+hézagkiöntõ
+hézagmentes
+hézagmérés
+hézagmérõ
+hézagol
+hézagolás
+hézagoló
+hézagolóhabarcs
+hézagos
+hézagtakaró
+hézagzáróléc
+híd
+híddaru
+hídfõ
+hídja
+hídképzõdés
+hídlábköz
+hídlás
+hídmérleg
+hídnyílás
+hídon
+hídoszlop
+hídpadlózat
+hídpillér
+hídpálya
+hídverés
+hídvám
+hídív
+híg
+hígfolyósság
+hígját
+hígság
+hígtrágya
+hígul
+hígulás
+hígvelejû
+hígít
+hígítás
+hígító
+híja
+híja,
+híján
+híjával
+hím
+hímes
+hímez
+hímez-hámoz
+hímezés-hámozás
+hímnemû
+hímnõs
+hímpor
+hímrím
+hímvesszõ
+hímzés
+hímzéshez
+hímzõcérna
+hínár
+hír
+híradás
+híradó
+híradós
+híradósok
+híranyag
+híranyagközlés
+híranyagot
+hírbe
+hírben
+hírbõl
+hírcsatorna
+híre
+híred
+híred?
+hírek
+híres
+híressé
+híresség
+hírességek
+híresztel
+híresztelik,
+híresztelés
+hírhedt
+hírhedtség
+hírig
+hírközlemény
+hírközlési
+hírközlõ
+hírközpont
+hírlap
+hírlapi
+hírlik
+hírlik,
+hírmagyarázó
+hírneve
+hírneves
+hírnevén
+hírnevének
+hírnevérõl
+hírnevét
+hírnév
+hírnévnek
+hírnévre
+hírnök
+hírolvasó
+hírrovat
+hírszerzés
+hírszerzõ
+hírszerzõket
+hírszolgálati
+hírt
+hírverés
+hírverõ
+hírvivõ
+hírzárlat
+hírértékû
+hírét
+hírû
+hírügynökség
+hírül
+hív
+híva
+hívat
+hívatlan
+hívd
+híve
+híveit
+hívek
+híven
+hívja
+hívják
+hívják?
+hívlak
+hívogató
+hívogatóan
+hívott
+hívságok
+hívságos
+hívás
+hívéül
+hívó
+hívócsengõ
+hívójel
+hívójelzés
+hívótávolságon
+hívõ
+hízeleg
+hízelegve
+hízelgés
+hízelgéssel
+hízelgõ
+hízelgõen
+hízelkedik
+hízelkedés
+hízelkedõ
+hízelkedõn
+hízik
+hízlal
+hízlalja
+hízlalt
+hízlalás
+hízlaló
+hízott
+hízás
+hízásra
+hízó
+hó!
+hó-rukk!
+hóbort
+hóbortos
+hóborította
+hócipõ
+hócipõje
+hócsizma
+hód
+hódbõr
+hódol
+hódolat
+hódolattal
+hódolatteljes
+hódolatteljesen
+hódoltság
+hódolás
+hódoló
+hódprém
+hódpézsma
+hódszõr
+hódzsír
+hódít
+hódítás
+hódító
+hóeke
+hóember
+hóesés
+hófajd
+hófehér
+hófuvat
+hófúvás
+hógolyó
+hóhér
+hóhérkötél
+hóka
+hókuszpókusz
+hólapát
+hólyag
+hólyag!
+hólyagok
+hólyagossá
+hólyagot
+hólé
+hólétõl
+hómentes
+hóna
+hónalj
+hónaljban
+hónaljszárny
+hónap
+hónapban
+hónapig
+hónapja
+hónapja,
+hónapnál
+hónapokig
+hónapokon
+hónapos
+hópehely
+hópelyhekkel
+hópihe
+hópárduc
+hórihorgas
+hórukk!
+hósapkás
+hószállingózás
+hótakaró
+hótalp
+hótaposó
+hótiszta
+hótorlasz
+hóvihar
+hóvirág
+hõ!
+hõ-
+hõbontása
+hõbörödött
+hõcserementes
+hõelnyelõ
+hõemelkedés
+hõerõmû
+hõfejlesztéssel
+hõfokszabályzó
+hõguta
+hõhatásfok
+hõje
+hõkapacitás
+hõközpont
+hõleadás
+hõleadó
+hõlégsugár
+hõmennyiség-mérés
+hõmennyiség-mérõ
+hõmennyiségmérõ
+hõmérséklet
+hõmérsékletugrás
+hõmérsékletû
+hõmérõ
+hõn
+hõnek
+hõnfut
+hõnfuttatott
+hõnfutás
+hõpalack
+hõs
+hõs,
+hõse
+hõsi
+hõsies
+hõsiesen
+hõsiesség
+hõsködés
+hõsködõ
+hõsnõ
+hõsszerelmes
+hõstett
+hõstettek
+hõsugárzás
+hõsugárzó
+hõszabályozó
+hõszabályzó
+hõszállítás
+hõség
+hõségben
+hõségtõl
+hõsök
+hõteljesítmény
+hõtermelõ
+hõtágulás
+hõvel
+hõvezetés
+hõvezetési
+hõvezetõ
+hõvisszanyerés
+hõálló
+hõáram
+hõátadás
+hõátszármaztatás
+hölgy
+hölgyeké
+hölgymenyét
+hölgyválasz
+hömpölyget
+hömpölygés
+hömpölygõ
+hömpölyög
+hörcsög
+hörg-
+hörghurut
+hörghurutos
+hörgés
+hörgõ-
+hörgõk
+hörpent
+hörpint
+hörpintés
+hörög
+húg
+húgy
+húgyagyú
+húgycsõ
+húgycsõ-
+húgyhólyag
+húr
+húrfeszítõ
+húrokat
+húron
+húros
+húroz
+húrozó
+húrt
+hús
+hús,
+húsa
+húsban
+húsbolt
+húsburjánzás
+húsbárd
+húsból
+húsdaganat
+húsdaráló
+húsdarálógép
+húsevõ
+húsfeldolgozó
+húsgombóc
+húshagyó
+húshorog
+húsklopfoló
+húskonzerv
+húsleves
+húslevesfazék
+húsleveskocka
+húsliszt
+húslé
+húslégy
+húsol
+húsoldal
+húsoldali
+húson
+húsos
+húsosodik
+húspogácsa
+húspástétom
+húsragu
+hússzelet
+húst
+hústalan
+hústalanít
+húsverõ
+húsvágó
+húsvásár
+húsvét
+húsvéthétfõ
+húsvéthétfõt
+húsz
+húszan
+húszfilléres
+húsából,
+húsáru
+húsétel
+húz
+húzat
+húzgál
+húzható
+húzott
+húzta
+húzva
+húzz
+húzz!
+húzza
+húzás
+húzás-halasztás
+húzó
+húzóablak
+húzócsont
+húzódik
+húzódozik
+húzódozva
+húzódozó
+húzódás
+húzódása
+húzódást
+húzódó
+húzóerõ
+húzóeszköz
+húzófeszültség
+húzófogantyú
+húzógyalu
+húzóhorog
+húzóháló
+húzókút
+húzólánc
+húzómágnes
+húzópad
+húzós
+húzószilárdság
+húzószálú
+húzóteljesítmény
+húzózár
+hûbelebalázs
+hûbér
+hûbéradó
+hûbérbirtok
+hûbéres
+hûbéreskü
+hûbéri
+hûbérúr
+hûbérúrnak
+hûdés
+hûen
+hûhó
+hûhót
+hûl
+hûlve
+hûség
+hûséges
+hûségesen
+hûsít
+hûsítõ
+hût
+hûtlen
+hûtlenség
+hûtlenül
+hûtés
+hûtésre
+hûtõ
+hûtõ-
+hûtõanyag
+hûtõborda
+hûtõgép
+hûtõhajó
+hûtõház
+hûtõházi
+hûtõkeverék
+hûtõkocsi
+hûtõkészülék
+hûtõközeg
+hûtõraktár-helyiség
+hûtõrács
+hûtõszekrény
+hûtõszer
+hûtõtorony
+hûtõtáska
+hûtõvíz
+hûtött
+hûvös
+hûvösebb
+hûvösen
+hûvösre
+hûvösség
+hûvösön
+hüledezés
+hüledezõ
+hüllõ
+hülye
+hülye!
+hülyegyerek
+hülyeség
+hülyeség!
+hülyeségek
+hülyeségeket
+hülyeséget
+hülyeséget!
+hülyéknek
+hülyén
+hülyének
+hülyének!
+hülyéskedik
+hülyéskedj!
+hülyéskedés
+hülyét
+hülyít
+hülyül
+hümmög
+hümmögés
+hüvely
+hüvelyben
+hüvelyes
+hüvelyesek
+hüvelyez
+hüvelyi
+hüvelyk
+hüvelykkel
+hüvelykszorító
+hüvelykujj
+hüvelykujjpárna
+hüvelyként
+hüvelylabdacs
+hüvelytelen
+hüvelytõl
+hüvelytükör
+hüvelyébe
+hüvelyébõl
+hüvelyöblítés
+ibolya
+ibolyakék
+ibolyántúli
+ibolyát
+ichthyosaurus
+ichtiol
+ichtiózis
+ici-pici
+icipici
+icipicit
+iddogál
+ide
+ide!
+ide,
+ide-oda
+ide?
+idealista
+idealizmus
+idealizál
+idealizált
+idecsatolva
+ideg
+ideg-
+idegbaj
+idegbajos
+idegbeteg
+idegbetegség
+idegdúc
+idegei
+idegeim
+idegeimet
+idegeire
+idegeit
+idegek
+idegekre
+idegen
+idegenek
+idegenes
+idegenforgalom
+idegengyûlölet
+idegengyûlölõ
+idegenkedik
+idegenkedés
+idegenkedõ
+idegenként
+idegenszerû
+idegenszerûség
+idegenvezetõ
+idegenül
+ideges
+idegesen
+idegeskedik
+idegeskedésre
+idegesség
+idegesít
+idegesítés
+idegesítõ
+idegesítõen
+idegfájdalom
+idegfájás
+ideggyök
+ideggáz
+idegháború
+idegi
+idegizgalom
+idegkezelés
+idegkimerítõ
+idegkimerültség
+idegnyugtató
+idegpálya
+idegrendszer
+idegroham
+idegrohamot
+idegroncs
+idegrost
+idegsejt
+idegsokk
+idegsokkos
+idegszálát
+idegtépõ
+idegtörzs
+idegvég
+idegvégzõdés
+idegzetû
+idegzsába
+idegzsábás
+idegállapot
+idegállapotban
+idegét
+idegösszehúzódás
+idegösszeomlás
+idegösszeroppanás
+idei
+ideig
+ideig,
+ideiglenes
+ideiglenesen
+ideiglenesség
+ideje
+ideje!
+ideje,
+idejében
+idején
+idejét
+idejétmúlt
+idejével
+idejû
+ideküld
+idelök
+identitászavar
+ideológia
+ideológiai
+ideológiailag
+ideológus
+idepasszol
+idetartozó
+idevalósi
+ideál
+ideális
+idill
+idillikus
+idiomatizmus
+idioszinkrázia
+idióta
+idom
+idommaró
+idomok
+idomokat
+idomszer
+idomszerkörzõ
+idomtalan
+idomtalanság
+idomtégla
+idomvas
+idomít
+idomítani
+idomítatlan
+idomított
+idomítás
+idomító
+idomú
+idus
+idáig
+idény
+idétlen
+idétlenkedik
+idéz
+idézet
+idézetekkel
+idézett
+idézgetõ
+idézhetõ
+idéztet
+idézve
+idézés
+idézésre
+idézést
+idézõ
+idézõjel
+idézõjelek
+idõ
+idõ,
+idõbeli
+idõben
+idõben?
+idõd!
+idõfecsérlés
+idõfüggõ
+idõhaladék
+idõhúzás
+idõhúzó
+idõjelzõ
+idõjárás
+idõjárás-változás
+idõjárásban
+idõjárási
+idõjárásjelentés
+idõjárásnak
+idõjárástani
+idõk
+idõkben
+idõket
+idõkig
+idõköz
+idõközben
+idõközökben
+idõközönként
+idõleges
+idõlegesen
+idõm
+idõmarta
+idõmegállapítás
+idõmérték
+idõmértékes
+idõmértékhiba
+idõmérés
+idõmérõ
+idõn
+idõnként
+idõnkénti
+idõpazarlás
+idõpocsékolás
+idõpont
+idõpontban
+idõponton
+idõpontot
+idõponttól
+idõpontú
+idõre
+idõrelé
+idõrend
+idõrendi
+idõréscsatoló
+idõrõl-idõre
+idõrögzítõ
+idõs
+idõs,
+idõsebb
+idõszak
+idõszakban
+idõszakhoz
+idõszaki
+idõszakiság
+idõszakos
+idõszakosan
+idõszakosság
+idõszerû
+idõszerûen
+idõszerûség
+idõszerûtlen
+idõszámítás
+idõszámításunk
+idõszûkében
+idõszükséglete
+idõt
+idõtartam
+idõtartam-kapcsoló
+idõtartama
+idõtartamát
+idõtlen
+idõtõl
+idõtöltés
+idõvel
+idõveszteség
+idõváltozás
+idõz
+idõzik
+idõzés
+idõzését
+idõzít
+idõzített
+idõzítés
+idõzítõ
+idõérzék
+idült
+ifjabb
+ifjonc
+ifjonti
+ifjító
+ifjú
+ifjúi
+ifjúkor
+ifjúkori
+ifjúkoromtól
+ifjúkoron
+ifjúság
+ifjúsága
+ifjúsági
+iga
+igabélés
+igaszságszolgáltatás
+igavánkos
+igaz
+igaz!
+igaz,
+igaz?
+igaza
+igazad
+igazak
+igazat
+igazat!
+igazat,
+igazgat
+igazgatás
+igazgatása
+igazgató
+igazgatói
+igazgatóság
+igazgatósági
+igazgatóságának
+igazgatót
+igazhitûség
+igazi
+igazi!
+igazmondás
+igazmondó
+igazmondóan
+igaznak
+igazodik
+igazodás
+igazol
+igazolható
+igazolja
+igazolom,
+igazolt
+igazoltatás
+igazolvány
+igazolás
+igazolása
+igazolásaképpen
+igazolásra
+igazolást
+igazolására
+igazolásául
+igazoló
+igazság
+igazságnak
+igazságok
+igazságokat
+igazságos
+igazságosak
+igazságosan
+igazságosság
+igazságot
+igazságra
+igazságszolgáltatás
+igazságtalan
+igazságtalanság
+igazságtalanságot
+igazságtalanul
+igazságtól
+igazul
+igazultságban
+igazán
+igazán!
+igazít
+igazítható
+igazítás
+ige
+igealak
+igehirdetõ
+igei
+igeidõ
+igemód
+igen
+igen!
+igenis
+igenis!
+igenlés
+igenlõ
+igenlõen
+igent
+igent,
+igenév
+igeragozás
+igeragozási
+iguána
+igyekezet
+igyekezetében
+igyekezzünk!
+igyekszik
+igyekvés
+igyekvõ
+igyon
+igyál
+igyék
+igába
+igája
+igásló
+igát
+igénnyel
+igény
+igénybe
+igénybejelentés
+igénybevétel
+igénybevétele
+igénybevételére
+igények
+igényeket
+igényeknek
+igényel
+igényelhetõ
+igényelt
+igényes
+igényjogosult
+igényli
+igénylõ
+igényper
+igényt
+igénytelen
+igénytelenség
+igénytelenül
+igényét
+igényû
+igét
+igézet
+igézetében
+igézõ
+ihaj-csuhaj!
+ihatatlan
+iható
+ihlet
+ihletett
+ihlettelen
+ihletve
+ijedelem
+ijedelmet
+ijedezõ
+ijedség
+ijedt
+ijedtség
+ijedtségre
+ijedtében
+ijedve
+ijedõs
+ijedõsség
+ijeszt
+ijesztõ
+ijesztõen
+iker
+iker-
+ikercsatorna
+ikerelágazású
+ikergyermek
+ikergõzgép
+ikerkeverõ
+ikerpár
+ikertestvér
+ikervilla
+ikervillás
+ikerágy
+ikerágyak
+ikerágyas
+iklandó
+ikon
+ikra
+ikrek
+ikráit
+ikrát
+ikszedik
+iktat
+iktatás
+iktató
+iktatóhivatal
+iktusz
+ildomos
+illanó
+illat
+illata
+illatfoszlány
+illatokkal
+illatos
+illatossá
+illatosít
+illatosított
+illatosító
+illatot
+illatszer
+illatú
+illedelmes
+illedelmesen
+illegeti
+illegális
+illegálisan
+illem
+illemen
+illemhely
+illemrõl
+illemszabályok
+illemtan
+illemtudó
+illendõ
+illendõen
+illendõség
+illendõségnek
+illene
+illenek
+illeszkedik
+illeszkednek
+illeszkedés
+illeszkedõ
+illeszt
+illeszteni
+illesztett
+illesztve
+illeszték
+illesztés
+illesztési
+illesztõegység
+illesztõfûrész
+illesztõszeg
+illet
+illeti
+illetlen
+illetlenség
+illetlenséghez
+illetlenül
+illetmény
+illetszti
+illett
+illetve
+illeték
+illetékek
+illetékes
+illetékesség
+illetékességébe
+illetéket
+illetéktelen
+illetéktelenség
+illetéktelenül
+illetõ
+illetõen
+illetõleg
+illetõségi
+illik
+illogikus
+illuminátusok
+illusztráció
+illusztrációs
+illusztrált
+illusztrátor
+illékony
+illékonyság
+illés
+illó
+illósítás
+illõ
+illõen
+illõt
+illúzió
+illúziót
+ilvait
+ily
+ilyen
+ilyenfajta
+ilyenformán
+ilyenkor
+ilyenképpen
+ilyent!
+ilyesféle
+ilyesmi
+ilyesmit
+ilyesmit!
+ilyet!
+ima
+imadoboz
+imaginárius
+imagista
+imagizmus
+imaház
+imakönyv
+imaszíj
+imbecilis
+imbisz
+imbolygás
+imbolygó
+imbolyog
+imitál
+imitálása
+imitátor
+imminens
+immisszió
+immunitáskutatás
+immunitástudomány
+immunizál
+immunizálás
+immunizáló
+immúnis
+impassz
+impasszol
+impasszt
+impedancia
+imperativus
+imperátor
+imperátori
+imponderábiliák
+imponáló
+import
+importál
+importálás
+importõr
+impotencia
+impotens
+impozáns
+impregnál
+impregnált
+impregnálás
+impregnáló
+impresszionista
+impresszionizmus
+impresszum
+impresszárió
+imprimatúra
+imprimál
+improduktív
+improvizáció
+improvizál
+improvizátor
+impulzus
+impulzusadó
+impulzuscsúcs
+impulzussorozat
+impulzív
+imád
+imádat
+imádattal
+imádkozik
+imádkozó
+imádni
+imádott
+imádság
+imádságos
+imádás
+imádó
+imádóan
+imáit
+imát
+imént
+inadekvát
+inai
+inak
+inaktivál
+inaktív
+inas
+inasság
+inasülés
+inch
+incidens
+incselkedik
+incselkedés
+incselkedõ
+incselkedõen
+inda
+indadísz
+index
+indexlámpa
+indexre
+indexszel
+indexszám
+indiai
+indifferens
+indigó
+indigómásolat
+indikáció
+indikátor
+indirekt
+indiszkréció
+indiszkrét
+individuális
+indiában
+indián
+indoeurópai
+indok
+indoklás
+indokló
+indokol
+indokolatlan
+indokolatlanul
+indokolható
+indokolt
+indokoltság
+indokolás
+indolencia
+indolens
+indonéz
+indonéziai
+indukció
+indukciós
+indukciótényezõ
+induktancia
+induktivitás
+induktor
+induktív
+indukál
+indul
+indulat
+indulatba
+indulatban
+indulati
+indulatkitörés
+indulatos
+indulatosan
+indulatosság
+indulatú
+indulhatunk
+indulni
+indult
+indulva
+indulás
+indulás!
+induláshoz
+indulási
+indulásra
+induló
+indus
+indás
+indát
+indít
+indítja
+indított
+indította
+indíts!
+indítvány
+indítványoz
+indítványozás
+indítványozó
+indítványt
+indítás
+indíték
+indító
+indítógomb
+indítókar
+indítókatód
+indítókorlát
+indítókészülék
+indítómotor
+indítóoka
+indítópedál
+indítórakéta
+indítótárcsa
+inerciás
+inert
+infantilis
+infiltrációs
+inflexiós
+influenza
+influenzában
+influenzás
+influenzával
+infláció
+inflációt
+informatív
+információ
+információt
+informál
+informált
+informáltság
+infrastruktúra
+infravörös
+infúzió
+ing
+inga
+ingadozik
+ingadozás
+ingadozó
+ingaforgalom
+ingafûrész
+ingajárat
+ingajáratban
+ingalengés
+inganyag
+ingat
+ingatag
+ingatagság
+ingatest
+ingatlan
+ingatlanon
+ingatlanper
+ingatlant
+ingatlanvagyon
+ingatlanárverés
+ingatlanügynök
+ingavonat
+ingaóra
+ingbe
+ingben
+ingblúz
+inge
+inger
+ingerel
+ingerkedik
+ingerlékeny
+ingerlékenyen
+ingerlékenység
+ingerlés
+ingerlése
+ingerlõ
+ingerült
+ingerülten
+ingerültség
+ingerültté
+inges
+inget
+inggallér
+inggomb
+inggombok
+ingmell
+ingnek
+ingnyak
+ingola
+ingott
+ingovány
+ingoványos
+ingruha
+ingujj
+ingujjas
+ingujjban
+ingujjra
+ingujját
+ingváll
+ingyen
+ingyenes
+ingyenesen
+ingyenpublikum
+ingyenélõ
+ingája
+ingás
+ingázik
+ingázás
+ingázó
+ingó
+ingóság
+ingósága
+ingóságok
+inhalálásra
+inhibitor
+inhomogén
+iniciálékkal
+injekció
+injekciós
+injekciót
+injektál
+injektálás
+inklináció
+inkognitóban
+inkompatibilis
+inkorrektül
+inkubáció
+inkubációs
+inkubátor
+inkvizíció
+inkvizítor
+inkább
+inkább,
+inkább...
+innen
+innen!
+innensõ
+inni
+innivaló
+innovatív
+innék
+inog
+inspiráció
+inspirál
+instabilitás
+inszoláció
+inszurgens
+int
+intarzia
+intarziás
+intarziát
+integet
+integetõ
+integráció
+integrál
+integrálszámítás
+integrált
+integrálás
+intelem
+intellektualizál
+intellektus
+intellektuális
+intelligencia
+intelligenciateszt
+intelligenciavizsgálat
+intelligens
+intelmek
+intenzitás
+intenzív
+intenzíven
+interdiktum
+interferencia
+interferenciacsíkok
+interferenciasávok
+interferenciás
+interferáló
+interjú
+interjúvoló
+interkontinentális
+intermittens
+internacionálé
+internál
+internált
+internálás
+internátus
+internátusi
+internódium
+interparlamentáris
+interpoláció
+interpolál
+interpretáció
+interpretál
+interpretálás
+interpunkció
+interurbán
+intervallum
+intervenció
+intim
+intonáció
+intranzigens
+intravénás
+intrika
+intrikus
+intrikákon
+intrikál
+intuitív
+intuíció
+intve
+intés
+intéz
+intézd
+intézet
+intézetbeadás
+intézetben
+intézeti
+intézett
+intézi
+intézkedik
+intézkedés
+intézkedések
+intézkedéseket
+intézkedést
+intézmény
+intézménybõl
+intézmények
+intézményes
+intézményesített
+intézményezõ
+intézményi
+intézményrendszer
+intézni
+intézve
+intézve!
+intézvény
+intézvényes
+intézvényez
+intézés
+intézésében
+intézését
+intézõ
+intézõbizottság
+intézõje
+intézõség
+intõ
+invalidus
+invariáns
+invenciózus
+inverter
+inverz
+invesztál
+invitál
+invázió
+inába
+ion
+ion-
+ionizációs
+ionizál
+ionizálható
+ionizálás
+ionizáló
+ionokkal
+ionos
+ionoszféra
+iota
+ipar
+iparbáró
+iparengedéllyel
+iparengedélyes
+ipari
+ipariskola
+iparkodva
+iparkodás
+iparkodó
+iparmágnás
+iparmûtani
+iparmûvészet
+iparos
+ipart
+iparvágány
+iparág
+ipse
+iram
+iramban
+iramlik
+iramodik
+iramodás
+iramot
+iramú
+irat
+iratcsomó
+iratgyûjtõ
+iratjegyzék
+iratkapocs
+iratok
+iratrendezõ
+iratszekrény
+irattartó
+irattálca
+irattár
+irattárba
+irattáros
+irattároz
+irattáska
+irdaló
+irgalmas
+irgalmasan
+irgalmasság
+irgalmatlan
+irgalmatlanul
+irgalom
+irha
+irhazsírral
+irháját
+irhás
+irigy
+irigyel
+irigykedve
+irigykedõ
+irigylésre
+irigység
+irigységtõl
+irizálás
+irizáló
+irka
+irkafirka
+irkafirkál
+irkál
+iroda
+irodafõnök
+irodaház
+irodai
+irodalmi
+irodalmilag
+irodalmár
+irodalom
+irodalomtörténet
+irodaszerek
+irodatiszt
+irodavezetõ
+irodaépület
+irodista
+irodája
+ironikus
+ironikusan
+irradiáció
+irrealitás
+irreguláris
+irreleváns
+irreális
+irrigál
+irrigálás
+irrigátor
+irritál
+irritálás
+irt
+irtás
+irtó
+irtóeke
+irtóra
+irtószer
+irtózatos
+irtózatosan
+irtózik
+irtózás
+irtózó
+iránt
+iránta
+iránti
+irány
+iránya
+irányadó
+irányai
+irányba
+irányba?
+irányban
+irányban?
+irányból
+irányelv
+irányelvek
+irányfény
+irányhelyzet
+irányhiba
+irányjel
+irányjelzõ
+iránykeresõ
+iránylat
+iránylata?
+irányleadó
+iránymagasság
+iránymeghatározás
+iránymutató
+irányoló
+irányoz
+iránypont
+iránysugár
+iránysugárral
+irányszög
+iránysáv
+irányt
+iránytartás
+iránytartó
+iránytû
+iránytûház
+iránytûtartó
+iránytûtok
+irányul
+irányulnak
+irányuló
+irányvevõ
+irányvonal
+irányváltoztatás
+irányváltozás
+irányváltozása
+irányzat
+irányzata
+irányzatot
+irányzatú
+irányzású
+irányzék
+irányzéklemez
+irányzékskála
+irányzó
+irányzóhelyettes
+irányzótárcsa
+irányába
+irányában
+irányát
+irányától
+irányít
+irányítható
+irányíthatóság
+irányítja
+irányított
+irányítás
+irányítása
+irányítást
+irányítására
+irányítását
+irányításával
+irányító
+irányító-vonal
+irányítófej
+irányítója
+irányítóközpont
+irányítólap
+irányítószám
+irányítóterem
+irányítótorony
+irányú
+irídium
+irónia
+is!
+is,
+isiász
+iskola
+iskolahajó
+iskolai
+iskolakerülõ
+iskolaköpeny
+iskolaköteles
+iskolalátogatás
+iskolaorvos
+iskolapad
+iskolaszereket
+iskolatáska
+iskolaudvar
+iskolazászlóalj
+iskolaépület
+iskolaépületek
+iskolába
+iskolába?
+iskolában
+iskolából
+iskolája
+iskolán
+iskolás
+iskolásfiú
+iskoláskor
+iskoláskoromban
+iskolások
+iskolát
+iskoláz
+iskolázott
+iskolázottaknak
+iskoláztat
+ismer
+ismered
+ismerem
+ismeret
+ismeretei
+ismeretek
+ismereteket
+ismeretkör
+ismeretlen
+ismeretlennel
+ismeretlenség
+ismeretség
+ismeretségbe
+ismeretségben
+ismeretséget
+ismerettár
+ismeretében
+ismeretét
+ismeri
+ismerik
+ismerjük
+ismerkedési
+ismerni!
+ismert
+ismertelek
+ismertet
+ismertetés
+ismertetése
+ismertetést
+ismertetõ
+ismertetõjel
+ismertté
+ismerés
+ismerõ
+ismerõs
+ismerõsének
+ismérv
+ismét
+ismét!
+ismétel
+ismételget
+ismételgetés
+ismételni
+ismételt
+ismételten
+ismétlés
+ismétlésre
+ismétlõ
+ismétlõdik
+ismétlõdés
+ismétlõdõ
+ismétlõjel
+issza
+isten
+isten!
+istencsapása
+istenek
+istenem!
+istenes
+istenfélelem
+istenfélõ
+istenfélõen
+istenhez
+istenhozzád
+isteni
+istenit!
+istenkáromlás
+istenkáromló
+istenként
+istennek
+istennek!
+istenné
+istennõ
+istennõi
+istennõje
+istenség
+istenségi
+istent
+istentelen
+istentelenség
+istentisztelet
+istentiszteleti
+istenverte
+istenverése
+istenáldotta
+istenért!
+istenít
+istenítélet
+istráng
+istálló
+istállóba
+istállóban
+istállófiú
+istállók
+istállómester
+istállósor
+istállószolga
+istállótelep
+istállózás
+istápol
+istókját!
+iszalag
+iszap
+iszapcsatorna
+iszapfürdõ
+iszapkanál
+iszapkanális
+iszapkotró
+iszaplerakódás
+iszapol
+iszapolás
+iszapomlás
+iszapos
+iszaposság
+iszappehely
+iszapszínû
+iszapteknõ
+iszapvulkán
+iszapvályú
+iszapágy
+iszik
+iszik,
+iszkol
+iszlamizmus
+iszlám
+iszlámhívõ
+iszlámtudós
+iszogat
+iszol
+iszom
+iszonyat
+iszonyatos
+iszonyatosság
+iszonyodik
+iszonyodom
+iszonyodás
+iszonyodó
+iszonyú
+iszonyúan
+iszonyúság
+iszákos
+iszákosság
+iszákosságtól
+ital
+italba)
+italbolt
+italboltban
+italcechet
+italfogyasztást
+italféle
+italianizmus
+itallal
+itallap
+italmaradék
+italmérés
+italmérési
+italmérõ
+italnak
+italok
+italos
+italoslány
+italozik
+italozás
+italt
+italtól
+italáru
+itat
+itatja
+itatott
+itatásra
+itatóhoz
+itatós
+itatóvályú
+itt
+itt,
+itt-ott
+itt?
+ittas
+ittasan
+itthon
+ivadék
+ivadékok
+ivartalanít
+ivarterméke
+ivarú
+ivarúság
+ivott
+ivás
+ivástól
+ivászat
+ivó
+ivó-kantin
+ivócimbora
+ivókúrát
+ivókút
+ivókürt
+ivópalack
+ivópohár
+ivótárs
+ivótök
+ivóvizes
+ivóvizet
+ivóvíz
+ivóvíz-tartály
+ivóvíztároló
+ixedik
+izeg-mozog
+izgalmas
+izgalmat
+izgalmi
+izgalmának
+izgalom
+izgalom!
+izgalomba
+izgalomban
+izgalommal
+izgasd
+izgat
+izgatja
+izgatott
+izgatottan
+izgatottság
+izgatottságának
+izgatás
+izgató
+izgatószer
+izgi
+izgul
+izgulj!
+izgulékony
+izgulékonyan
+izgulós
+izgága
+izgékony
+izgés-mozgás
+izgõ-mozgó
+izma
+izmait
+izmok
+izmos
+izmosság
+izmú
+izobután
+izobár
+izoentalpiás
+izoklin
+izoklina
+izoklinavonal
+izoklinális
+izom
+izom-összehúzódás
+izomelõrevarrás
+izomer
+izomerõ
+izomfeszültség
+izomláz
+izomláza
+izomrost
+izomzat
+izomzatú
+izopropilalkohol
+izotermikus
+izotóp
+izraeli
+izraelita
+izzad
+izzadmányos
+izzadság
+izzadsággal
+izzadsággátló
+izzadságszag
+izzadságszaga
+izzadt
+izzadás
+izzadó
+izzasztó
+izzik
+izzás
+izzásig
+izzít
+izzítás
+izzítócsésze
+izzó
+izzóan
+izzófejes
+izzólámpa
+izzószál
+izé
+izél
+ióta
+jacht
+jachtozó
+jade
+jaguár
+jaj
+jaj!
+jajgat
+jajgatás
+jajong
+jajveszékel
+jajveszékelés
+jajveszékelõ
+jak
+jamaikai
+jambikus
+jambus
+jambusi
+jambusos
+jambósapka
+jampec
+jampecos
+jampecosan
+jancsiszeg
+január
+japán
+japánlakk
+japánpapír
+japánsav
+jard
+jasszvilág
+java
+javadalma
+javadalmas
+javadalom
+javadalommal
+javadra
+javak
+javall
+javallat
+javallhatóság
+javaslat
+javaslatokkal
+javaslatom
+javaslatomhoz?
+javaslatot
+javaslattal
+javaslattételi
+javasol
+javasolható
+javul
+javulnak
+javulás
+javuló
+javulóban
+javunkra
+javában
+javán
+javára
+javát
+javít
+javítgatás
+javíthatatlan
+javítható
+javított
+javítás
+javításba
+javításhoz
+javítási
+javításkor
+javítások
+javítását
+javító
+javító-nevelõ
+javítóakna
+javítóintézet
+javítómûhely
+javítómûhelybe
+javítóvizsga
+jegeccukor
+jegel
+jegelt
+jegelés
+jeges
+jegesedés
+jegesmedve
+jeget
+jegy
+jegybank
+jegybanktörvény
+jegycsíptetõ
+jegyeket
+jegyeladás
+jegyeladó
+jegyellenõr
+jegyelõvétel
+jegyes
+jegyesek
+jegyespár
+jegyesség
+jegyet
+jegyez
+jegyezhetõ
+jegyezve
+jegyezze
+jegygyûrû
+jegykezelés
+jegykiadás
+jegykiadó
+jegylyukasztás
+jegylyukasztó
+jegymentes
+jegypénztár
+jegypénztáros
+jegyre
+jegyszedõ
+jegyszedõnõ
+jegyzem
+jegyzet
+jegyzetblokk
+jegyzetek
+jegyzeteket
+jegyzetekkel
+jegyzetel
+jegyzetet
+jegyzetfüzet
+jegyzetkönyv
+jegyzett
+jegyzettömb
+jegyzi
+jegyzik
+jegyzék
+jegyzékbe
+jegyzéke
+jegyzéket
+jegyzékében
+jegyzékére
+jegyzés
+jegyzési
+jegyzõkönyv
+jegyzõkönyvbe
+jegyzõkönyvet
+jegyzõkönyvvezetõ
+jegyárusítás
+jegyében
+jegyüzér
+jehu
+jel
+jeladás
+jeladással
+jelbeszéd
+jele
+jelei
+jelek
+jelel
+jelen
+jelen!
+jelenet
+jeleneteket
+jelenetet
+jelenik
+jelenkezik
+jelenkor
+jelenleg
+jelenlegi
+jelenlevõ
+jelenlevõk
+jelenlét
+jelenlétemben
+jelenléti
+jelenlétében
+jelennek
+jelenség
+jelensége
+jelenségek
+jelent
+jelentek
+jelentesz
+jelentett
+jelentették
+jelenthetek
+jelenti,
+jelentkezett
+jelentkezik
+jelentkeztek
+jelentkezés
+jelentkezõ
+jelentse,
+jelentsen
+jelentékeny
+jelentékenyen
+jelentéktelen
+jelentéktelennek
+jelentéktelenség
+jelentés
+jelentések
+jelentést
+jelentésárnyalat
+jelentõ
+jelentõs
+jelentõség
+jelentõsége
+jelentõséget
+jelentõségteljes
+jelentõségteljesen
+jelentõségét
+jelentõségével
+jelentõségû
+jelenvalóság
+jelenés
+jelenése
+jelenésszerû
+jelenõ
+jelerõsség
+jeles
+jeleskedik
+jelez
+jeleznek
+jelfogó
+jelige
+jelintenzitás
+jelkulcsba
+jelkulcsátíró
+jelkép
+jelképe
+jelképes
+jelképesen
+jelképez
+jelképrendszer
+jelképtõl
+jelleg
+jellege
+jelleget
+jellegtelen
+jellegzetes
+jellegzetesség
+jellegzetességük
+jellegét
+jellegû
+jellegûvé
+jellel
+jellem
+jellembeli
+jellemez
+jellemezhetõ
+jellemformálás
+jellemgyengeség
+jellemileg
+jellemszilárdság
+jellemtelen
+jellemvonás
+jellemzés
+jellemzõ
+jellemzõket
+jellemábrázolás
+jellemében
+jellemû
+jelmagyarázat
+jelmez
+jelmezbál
+jelmezes
+jelmeztervezõ
+jelmondat
+jelolvasó
+jelszalag
+jelszó
+jelt
+jeltorzulás
+jeltorzítás
+jelvény
+jelvénye
+jelvények
+jelzet
+jelzett
+jelzi
+jelzálog
+jelzálog-
+jelzálog-tulajdonos
+jelzáloggal
+jelzálogi
+jelzálogkötvény
+jelzáloglevél
+jelzálogos
+jelzés
+jelzése
+jelzésekkel
+jelzésekért
+jelzésrendszer
+jelzést
+jelzõ
+jelzõberendezés
+jelzõberendezések
+jelzõberendezéseket
+jelzõbódé
+jelzõbója
+jelzõcsap
+jelzõcsengõ
+jelzõdobás
+jelzõdurrantyú
+jelzõfény
+jelzõgyûrû
+jelzõharang
+jelzõkar
+jelzõkaró
+jelzõkészülék
+jelzõkõ
+jelzõkönyv
+jelzõkürt
+jelzõlámpa
+jelzõlámpák
+jelzõmûszer
+jelzõpont
+jelzõrakéta
+jelzõreflektor
+jelzõréteg
+jelzõszolgálat
+jelzõszolgálatos
+jelzõszám
+jelzõt
+jelzõtorony
+jelzõtábla
+jelzõtáblácska
+jelzõtárcsa
+jelzõtûz
+jelzõtûztorony
+jelzõtüzeket
+jelzõvilágítás
+jelzõzászló
+jelzõállomás
+jelzõállító-mû
+jelzõõr
+jeléül
+jelöl
+jelöletlen
+jelölik
+jelölt
+jelöltet
+jelölteti
+jelöltként
+jelöltnek
+jelöltnévsor
+jelöltre
+jelöltség
+jelöltséget
+jelölés
+jelölési
+jelölõlista
+jenki
+jenkik
+jenkivilág
+jerikói
+jerkebárány
+jesszusmária!
+jiddis
+jobb
+jobb,
+jobban
+jobbat
+jobbfedezet
+jobbhátvéd
+jobbik
+jobbján
+jobbkezes
+jobbmenetes
+jobbnál
+jobboldal
+jobboldali
+jobbos
+jobbra
+jobbra-balra
+jobbról
+jobbról-balról
+jobbszerelõ
+jobbszárny
+jobbszárnyuk
+jobbszélsõ
+jobbulás
+jobbulást!
+jobbá
+jobbágy
+jobbágyság
+jobbágytelek
+jobbára
+jobbít
+jobbösszekötõ
+jog
+joga
+jogaiban
+jogaihoz
+jogainak
+jogait
+jogar
+jogarhordozó
+jogbitorlás
+jogcím
+jogcímen?
+jogdíj
+jogellenes
+jogellenesen
+jogellenessé
+jogesetek
+jogfeladás
+jogfenntartással
+jogfosztott
+joggal
+joggyakorlat
+joghatósága
+joghurt
+jogi
+jogi-
+jogigény
+jogilag
+jogkorlátozás
+jogképesség
+jogképességtõl
+jogkör
+jogkörét
+jogod
+jogok
+jogon
+jogon?
+jogorvoslat
+jogos
+jogosan
+jogosság
+jogosulatlan
+jogosult
+jogosultság
+jogosultsággal
+jogosultságának
+jogosít
+jogosítatlan
+jogosított
+jogosítvány
+jogosító
+jogot
+jogrend
+jogrendszer
+jogszabály
+jogszabályt
+jogszerû
+jogszerûség
+jogsérelem
+jogsértés
+jogsértõ
+jogtalan
+jogtalanság
+jogtalanságot
+jogtalanul
+jogtanácsos
+jogtudomány
+jogtudományban
+jogtudományi
+jogtudományra
+jogtudós
+jogtól
+jogutód
+jogutódok
+jogvédõ
+jogában
+jogán
+jogász
+jogászember
+jogászi
+jogásznyelv
+jogászság
+jogászvilág
+jogát
+jogátruházás
+jogától
+jogérvényes
+jogú
+jogügyi
+jogügylet
+johannita
+jojó
+jonquille-nárcisz
+jotta
+jottányi
+jottányit
+jovialitás
+joviális
+joviálisan
+jubileum
+judícium
+jugoszláv
+jugoszláviai
+juh
+juh-
+juhar
+juharfa
+juhhimlõ
+juhnyírás
+juhnyírási
+juhok
+juhot
+juhról
+juhász
+juhászkutya
+jukka
+jumbó
+jura
+jura-
+jura-réteg
+juris
+juss
+jut
+juta
+jutafonal
+jutagyártás
+jutahulladék
+jutaipar
+jutalmakat
+jutalmat
+jutalmaz
+jutalmazatlan
+jutalmazó
+jutalmát
+jutalom
+jutalomban
+jutalomdíj
+jutalomként
+jutalomosztás
+jutalék
+jutalékot
+jutavászon
+jutaáru
+jutnak
+jutni
+jutok
+jutott
+jutott,
+jutottak
+jutottál
+juttassam
+juttat
+juttatja
+juttatják
+juttatás
+juttató
+jutányosan
+jutás
+jutó
+jácint
+jácintkõ
+jámbor
+jámboran
+jámborság
+jámborul
+jános
+jár
+jár,
+jár-kel
+járadék
+járadékkötvény
+járadékot
+járandóság
+járat
+járata
+járatban
+járatja
+járatlan
+járatos
+járatás
+járatú
+járda
+járdakõ
+járdaszegély
+járdasziget
+járgány
+járgányba
+járgányhajtású
+járgányhajtó
+járhat
+járhatatlan
+járható
+járhatóbbá
+járhatóság
+járj
+járja
+járja,
+járkál
+járkálás
+jármû
+jármûforgalom
+jármûkaraván
+jármûnek
+jármûre
+jármûvekhez
+jármûvel
+jármûvet
+jármûvön
+járnak
+járni
+járom
+járomba
+járomcsont
+járomfa
+járt
+járta
+jártam
+jártas
+jártassa
+jártasság
+jártatja
+jártató
+jártál
+jártányi
+járul
+járulék
+járulékos
+járvány
+járványos
+járványt
+járás
+járásmód
+járással
+járású
+járó
+járóan
+járóbeteg
+járógép
+járóka
+járókelõ
+járókerék
+járókötélzet
+járópalló
+járórács
+járószalag
+járószerkezet
+járõr
+járõrkocsi
+jász
+jászkeszeg
+jászol
+jászolgát
+jászolrács
+jászolrácshoz
+jászolrácsot
+játssza
+játsszák
+játszadozik
+játszadozott
+játszanak
+játszanak?
+játszat
+játszható
+játszi
+játszik
+játszma
+játszmát
+játszott
+játszva
+játszástól
+játszó
+játszócsontocska
+játszódik
+játszópajtás
+játszóruha
+játszószelep
+játszótárs
+játszótér
+játék
+játék-
+játék?
+játéka
+játékasztal
+játékautomata
+játékba
+játékbaba
+játékban
+játékban)
+játékbank
+játékbarlang
+játékbarlangban
+játékbiztosítás
+játékból
+játékcsiga
+játékcsigát
+játékfilm
+játékhoz
+játékkaszinó
+játékkatona
+játékkocka
+játékkockák
+játékkártyák
+játékmester
+játéknak
+játékok
+játékon
+játékos
+játékos,
+játékosai
+játékosan
+játékosok
+játékosság
+játékot
+játékpuska
+játékpénz
+játékra
+játékrend
+játékszer
+játékszere
+játéksárkány
+játékterem
+játékvezetõ
+játékállat
+játékállás
+játékának
+jávai
+jávor
+jávorantilop
+jávorfa
+jávorszarvas
+jázmin
+jé!
+jég
+jégakku
+jégbe
+jégcsap
+jégcsákány
+jégdarab
+jégdarabokkal
+jégen
+jéger
+jégesõ
+jégesõszem
+jéggel
+jéggé
+jéggörgeteg
+jéghegy
+jéghideg
+jégkocka
+jégkori
+jégkorong
+jégkorongcsapat
+jégkorongpálya
+jégkorszak
+jégkrém
+jégkunyhó
+jégképzõdés
+jégképzõdést
+jégmadár
+jégmentes
+jégpálya
+jégszeg
+jégszekrény
+jégszem
+jégtelenít
+jégtelenítõ
+jégtorlasz
+jégtorlaszok
+jégtábla
+jégtörmelék
+jégtörõ
+jégvas
+jégvirág
+jégvirágos
+jégzajlás
+jégártól
+jérce
+jézus
+jézuspapír
+jó!
+jó,
+jó?
+jóakarat
+jóakaratának
+jóakaratát
+jóakaratú
+jóakaratúlag
+jóakaró
+jóakarója
+jóakaróm
+jóarcú
+jóba
+jóban
+jóban-rosszban
+jóbarátok
+jóból
+jóból!
+jócskán
+jód
+jódli
+jódlizik
+jódlizás
+jóformán
+jóhangzás
+jóhiszemû
+jóhiszemûen
+jóhiszemûség
+jóhiszemûségének
+jóhírnevét
+jóhírét
+jóhírûség
+jóindulat
+jóindulatból
+jóindulattal
+jóindulatát
+jóindulatú
+jóindulatúan
+jók
+jókat
+jókedv
+jókedvre
+jókedvében
+jókedvét
+jókedvû
+jókedvûen
+jókor
+jókora
+jóképû
+jókívánság
+jókívánságaink
+jókívánságok
+jól
+jól!
+jólelkû
+jólesik!
+jólesõ
+jóllakat
+jóllakató
+jóllakik
+jóllakni
+jóllakott
+jóllakottság
+jóllaktam!
+jóllaktál?
+jóllehet
+jólneveltség
+jólét
+jólétben
+jóléti
+jómodorú
+jómód
+jómódba
+jómódban
+jómódú
+jón
+jónak
+jópofa
+jóra
+jós
+jóshely
+jóslat
+jóslatszerû
+jóslás
+jósló
+jósnõ
+jósol
+jószagú
+jószagú!
+jószerencse
+jószomszédi
+jószomszédság
+jószág
+jószágállásokkal
+jószándék
+jószántából
+jószív
+jószívû
+jóság
+jóságos
+jóságával
+jót
+jótett
+jótevõ
+jótáll
+jótállás
+jótállási
+jótállást
+jótálló
+jótékony
+jótékonyabbá
+jótékonyság
+jótékonyságból
+jótékonysági
+jótét
+jótétemény
+jóval
+jóvoltából
+jóvá
+jóvágású
+jóváhagy
+jóváhagyott
+jóváhagyva
+jóváhagyás
+jóváhagyólag
+jóvátehetetlen
+jóvátesz
+jóváteszi
+jóvátevõ
+jóvátétel
+jóváír
+jóváírás
+jóváírási
+józan
+józanság
+józanul
+jóéjszakát
+jóérzés
+jóízû
+jóízûen
+jöhet!
+jöhet?
+jöjjön
+jön
+jön-megy
+jön?
+jönne
+jönnek
+jönni
+jönnie
+jönnöm
+jössz
+jössz?
+jött
+jött,
+jöttek
+jöttem
+jöttment
+jöttél
+jöttünk
+jövedelem
+jövedelem-bevallás
+jövedelemadó
+jövedelemkategóriák
+jövedelemtöbblet-adó
+jövedelmet
+jövedelmez
+jövedelmezni
+jövedelmezõ
+jövedelmezõség
+jövedelmébõl
+jövedelmû
+jövedelmûek
+jövendõ
+jövendõbeli
+jövendõbelijét
+jövendõmondás
+jövendõmondó
+jövendõt
+jövendöl
+jövendölés
+jövendölõ
+jöveszt
+jövesztés
+jövetel
+jövevény
+jövevényszó
+jövés-menés
+jövõ
+jövõbe
+jövõbeli
+jövõbelátó
+jövõben
+jövõen
+jövõidejûség
+jövõje
+jövõkutatás
+jövõre
+jövök
+jövök!
+június
+kabala
+kabaré
+kabaréban
+kabarémûsor
+kabin
+kabinet
+kabinja
+kabinlejárat
+kabinlépcsõ
+kabinok
+kabát
+kabátakasztó
+kabátba
+kabátfogas
+kabátgombnál
+kabáthoz
+kabátját
+kabátot
+kabátra
+kabátszövet
+kabátujj
+kabátzseb
+kabóca
+kacag
+kacagtató
+kacagás
+kacagó
+kacaj
+kacarászik
+kacarászás
+kacat
+kackiás
+kacs
+kacsa
+kacsafarok
+kacsahívó
+kacsakagyló
+kacsint
+kacsintva
+kacsintás
+kacskaringó
+kacskaringós
+kacskaringózik
+kacsozó
+kacsázik
+kacsáztat
+kacsázás
+kacsázó
+kacér
+kacérkodik
+kacérkodás
+kacérság
+kadencia
+kadmium
+kaduceus
+kadét
+kaftán
+kagyló
+kagylóban
+kagylóból
+kagylóhéj
+kagylóhéjban
+kagylók
+kagylópénz
+kagylós
+kagylósütés
+kagylót
+kagylóteknõ
+kaja
+kajak
+kajakevezõ
+kajakevezõvel
+kajmán
+kajszi
+kajtászeb
+kajál
+kajálda
+kaján
+kajánul
+kajás
+kajütös
+kaka
+kakadu
+kakas
+kakashágás
+kakaskukorékolás
+kakassal
+kakasviadal
+kakasát
+kakaó
+kakaóbab
+kakaócserje
+kakaófa
+kakaót
+kakilás
+kakofónia
+kaktusz
+kaktuszféle
+kakukk
+kakukkfû
+kakukkmécsvirág
+kakukkol
+kakukkszegfû
+kakál
+kalabárbab
+kalamajka
+kalamajka!
+kalamit
+kalamájó
+kalamájó-csalival
+kaland
+kalander
+kalandja
+kalandor
+kalandornõ
+kalandos
+kalandozik
+kalandozás
+kalandozó
+kalap
+kalap-átalakító
+kalapban
+kalapdivat
+kalapfogas
+kalapja
+kalapjukat
+kalapját
+kalapját!
+kalapkarima
+kalapkészítéshez
+kalaplevéve
+kalapmutatvány
+kalapomat,
+kalapos
+kalapot
+kalappal
+kalappal!
+kalapskatulya
+kalapszalag
+kalaptartó
+kalaptetõ
+kalapács
+kalapácscsont
+kalapácsnyelet
+kalapácsszerû
+kalapácstompító
+kalapácsvetés
+kalapál
+kalapált
+kalapálás
+kalauz
+kalauzkocsi
+kalauzol
+kalauzolás
+kalauzoló
+kalauztérkép
+kalcinál
+kalcinált
+kalcinálás
+kalcináló
+kalcium
+kalciumhidroxid
+kalciumkarbid
+kaliba
+kaliber
+kaliberû
+kalibrál
+kalibrálás
+kaliforniai
+kalikó
+kalimpál
+kalimpálás
+kalimpáló
+kalitka
+kalkopirit
+kalkuláció
+kalkulál
+kalkulátor
+kallantyú
+kalligráfia
+kalligráfus
+kallós
+kallóz
+kallózott
+kallózás
+kalmár
+kalmárkodik
+kalmárszellem
+kalmárszellemû
+kalocsni
+kaloda
+kalodába
+kalorimetria
+kalorimetrikus
+kalucsni
+kalyiba
+kalács
+kalácstánc
+kalácstáncot
+kalász
+kalászba
+kalászol
+kalászos
+kalászt
+kalászvágó
+kalória
+kalóz
+kalózhajó
+kalózkiadás
+kalózkiadásban
+kalózkiadású
+kalózkodik
+kalózkodás
+kalózlobogó
+kamara
+kamarába
+kamarából
+kamarás
+kamasz
+kamaszkor
+kamaszkori
+kamaszkorú
+kamat
+kamatláb
+kamatmentes
+kamatok
+kamatos
+kamatostul
+kamatot
+kamatozik
+kamatoztatja
+kamatozó
+kamatra
+kamatyol
+kambodzsai
+kamera
+kamerát
+kamerával
+kamgarn
+kamgarnipar
+kamikaze
+kamikáze
+kamilla
+kamillatea
+kamion
+kampec
+kampány
+kampánykörút
+kampó
+kampós
+kampósbot
+kampósrúd
+kampósszeg
+kampószeg
+kampóval
+kamra
+kamrába
+kamrácska
+kamásli
+kaméleon
+kamélia
+kan
+kanadai
+kanadaivá
+kanalas
+kanalaz
+kanalazás
+kanalazó
+kanapé
+kanaszta
+kanavász
+kanca
+kancacsikó
+kancellár
+kancsal
+kancsalság
+kancsalít
+kancsó
+kancsónak
+kancát
+kandalló
+kandallóborítás
+kandallóburkolat
+kandallópárkány
+kandallórács
+kandallószõnyeg
+kandi
+kandidátus
+kandidátusa
+kandikál
+kandiscukor
+kandíroz
+kandúr
+kanfarkas
+kangörcs
+kankalin
+kankutya
+kankó
+kanmuri
+kanna
+kannatej
+kannibalizmus
+kannibál
+kannányi
+kanonok
+kanonoki
+kanos
+kantin
+kantinos
+kantni
+kanton
+kantár
+kantárbõr
+kantárszár
+kantárszárat
+kanyar
+kanyarban
+kanyargás
+kanyargó
+kanyargóan
+kanyargós
+kanyargósan
+kanyargósság
+kanyarnak
+kanyarodik
+kanyarodj!
+kanyarodni
+kanyarodás
+kanyarodó
+kanyarog
+kanyart
+kanyarulat
+kanyarulatok
+kanyarulatot
+kanyarító
+kanyarítófûrésszel
+kanyaró
+kanyaróba
+kanyarót
+kanyon
+kanál
+kanálfúró
+kanálhorog
+kanális
+kanállal
+kanálnyi
+kanálvillantó
+kanári
+kanárifajta
+kanárimadár
+kanárisárga
+kanóc
+kanócanyag
+kanócos
+kaolin
+kaotikus
+kap
+kapa
+kapacitás
+kapacitásmérõ
+kapacitív
+kapar
+kaparintani
+kaparás
+kaparék
+kaparó
+kaparókanál
+kaparókés
+kaparólapát
+kaparóvas
+kapaszkodik
+kapaszkodva
+kapaszkodás
+kapaszkodó
+kapatos
+kapatosság
+kapcabetyár
+kapcsokat
+kapcsol
+kapcsolat
+kapcsolata
+kapcsolatba
+kapcsolatban
+kapcsolatlétesítés
+kapcsolatok
+kapcsolatokat
+kapcsolatos
+kapcsolatot
+kapcsolatszervezés
+kapcsolattal
+kapcsolj
+kapcsolja
+kapcsolt
+kapcsoltuk
+kapcsolták
+kapcsolva
+kapcsolás
+kapcsolási
+kapcsolást
+kapcsoló
+kapcsolóasztal
+kapcsolódik
+kapcsolódnak
+kapcsolódás
+kapcsolódó
+kapcsológomb
+kapcsolóhorog
+kapcsolóhüvely
+kapcsolójel
+kapcsolókar
+kapcsolókarmantyú
+kapcsolókart
+kapcsolólemez
+kapcsolómû
+kapcsolómûhely
+kapcsolószekrény
+kapcsolószerkezet
+kapcsolószó
+kapcsolót
+kapcsolótábla
+kapcsolótábláról
+kapcsolózsinór
+kapcsos
+kapcsán
+kapható
+kapiskál
+kapiskálod?
+kapituláció
+kapitulál
+kapitális
+kapitány
+kapitánya
+kapitányi
+kapitányság
+kapja
+kapkod
+kapkodja
+kapkodott
+kapkodták
+kapkodva
+kapkodás
+kapkodó
+kapli
+kapni
+kapni!
+kapnál,
+kapocs
+kapocskarika
+kapocsvas
+kapok
+kapor
+kapott
+kapott,
+kappan
+kapribogyó
+kapszula
+kaptafa
+kaptafájánál
+kaptafánál
+kaptafára
+kaptam
+kaptár
+kaptárt
+kapu
+kapualj
+kapualjban
+kapubejárat
+kapubálvány
+kapucni
+kapucnis
+kapucsere
+kapufa
+kapufák
+kapuheveder-csavar
+kapuit
+kapujából
+kapukulcs
+kapumaszk
+kapunk
+kapupántcsavar
+kapus
+kapusfülke
+kapusnõ
+kapuszín
+kaput
+kapuõr
+kapva
+kapva-kap
+kapzsi
+kapzsin
+kapzsiság
+kapál
+kapálódzik
+kapálógép
+kapás
+kapásból
+kapócsáklya
+kapóra
+kapós
+kar
+kar-
+karabiner
+karabély
+karabélyos
+karakán
+karakánul
+karakül
+karaláb
+karalábé
+karambol
+karambolozik
+karambolszéria
+karamell
+karamella
+karantén
+karanténba
+karattyol
+karattyolj!
+karattyolás
+karavánkocsi
+karavánszeráj
+karavánszállás
+karavánállomás
+karba
+karbamid
+karban
+karbantart
+karbantartott
+karbantartás
+karbantartási
+karbantartó
+karbid
+karbolos
+karbolsav
+karbolsavas
+karbolsavval
+karbonizáció
+karbonizál
+karbonizálás
+karbonpapír
+karbonádó
+karbonát
+karbonátdús
+karbunkulus
+karburátor
+karburátorba
+karc
+karcer
+karcinogén
+karcol
+karcolat
+karcolás
+karcolótû
+karcos
+karcsapás
+karcsú
+karcsúság
+karcsúsít
+karcsúvá
+kard
+kardal
+kardalos
+kardalosnõ
+kardcsapás
+kardcsörgés
+kardcsörtetés
+karddal
+kardfogú
+kardgomb
+kardhal
+kardhegy
+kardigán
+kardját
+kardkötõ
+kardmarkolat
+kardos
+kardot
+kardotok?
+kardszárnyú
+kardszíj
+kardvirág
+kardánkereszt
+kardélre
+karfa
+karfelkötõ
+karfiol
+karfával
+karhatalom
+karhossz
+kariatid
+kariatída
+karib
+karibi
+karika
+karikacsapás
+karikadobó-játék
+karikagyûrû
+karikalábú
+karikaturista
+karikatúra
+karikatúrát
+karikába
+karikában
+karikás
+karikát
+karikával
+karikázik
+karima
+karimájú
+karimás
+karimátlan
+karitatív
+karizma
+karizmatikus
+karja
+karjaiba
+karjait
+karjelzés
+karjelzõ
+karján
+karjára
+karját
+karjával
+karkulcs
+karkötõ
+karkötõóra
+karmai
+karmantyú
+karmantyúba
+karmazsin
+karmelita
+karmester
+karmestere
+karmesteri
+karminpiros
+karmol
+karmolják
+karnagy
+karnevál
+karnis
+karom
+karon
+karos
+karosszék
+karosszékbe
+karosszéria
+karosszérialakatos
+karosszérialemezek
+karosszériájú
+karottázs-szelvény
+karperec
+karra
+karral
+karrier
+karrierista
+karrierizmus
+karrierjét
+karriert
+karszalag
+karszt
+karsztbarlang
+karsztos
+karsztosodás
+kartell
+kartempó
+karter
+kartográfiai
+karton
+kartondoboz
+kartonkötés
+kartonkötésû
+kartonnyelv
+kartonozó
+kartonpapír
+kartonált
+kartoték
+kartotékdoboz
+kartotéklap
+kartotékok
+kartus
+kartács
+kartámla
+kartávolságban
+kartávolságra
+karusszel-eszterga
+karvaly
+karvezetõ
+karzat
+karzatnak
+karzatvilágító
+karácsony
+karácsonyest
+karácsonyeste
+karácsonyi
+karácsonyig
+karám
+karámba
+karámban
+karámmal
+karámot
+karát
+karátos
+karéj
+karének
+karénekes
+karénekesnõ
+karó
+karóba
+karóbab
+karóhoz
+karóra
+karórépa
+karóz
+karózás
+karú
+kas
+kasa
+kasanadrág
+kasazakó
+kasba
+kasfogó
+kasmír
+kasmírminta
+kasmírszövet
+kaspó
+kassza
+kasszadarab
+kasszava
+kasszia
+kasszia-fa
+kasszát
+kasszék
+kastély
+kasu
+kasza
+kaszabol
+kaszakõ
+kaszinó
+kaszinói
+kaszkadõr
+kaszkadõrnõ
+kaszkád
+kaszkádba
+kaszkádkapcsolás
+kaszni
+kaszt
+kasztjából
+kaszton
+kasztoreum
+kasztorin
+kasztrál
+kasztrált
+kasztrálás
+kaszál
+kaszálás
+kaszáló
+kaszálógép
+kaszárnyafogságra
+kaszás
+kasírozás
+kat-vitorlázatú
+kataklizma
+katakomba
+katalitikus
+katalizál
+katalizátor
+katalizátor-hordozó
+katalogizál
+katalízis
+katalógus
+katamarán
+katapult
+katapult-kapcsoló
+katapultál
+katapultülés
+katarzis
+katasztrofális
+katasztrofálisan
+katasztrófa
+katasztrófától
+katatónia
+katedra
+kategorikus
+kategorizál
+kategorizáló
+kategória
+kategóriába
+kategóriája
+kategóriákhoz
+kategóriákra
+katekizmus
+katekézis
+katicabogár
+katlan
+katolicizmus
+katolikus
+katona
+katonai
+katonailag
+katonaköpeny
+katonaköteles
+katonaláda
+katonaorvos
+katonaszökevény
+katonaszöktetés
+katonaság
+katonaságot
+katonatiszt
+katonazene
+katonazenekar
+katonazubbony
+katonaállítás
+katonához
+katonája
+katonák
+katonákat
+katonának
+katonás
+katonásdit
+katonáskodik
+kattan
+kattant
+kattanás
+kattog
+kattogás
+katzenjammer
+katzenjammeros
+katód
+kaucsuk
+kaucsukleválasztás
+kaukázusi
+kauterizál
+kauterizálás
+kauzalitás
+kauzális
+kavar
+kavargás
+kavargó
+kavarodás
+kavarodásba
+kavarodást
+kavarog
+kavarognak
+kavarogva
+kavarva
+kavarás
+kavarólapát
+kaviccsal
+kavics
+kavicsol
+kavicsolt
+kavicsos
+kavicsozás
+kavicságy
+kaviár
+kazal
+kazalba
+kazamata
+kazetta
+kazettából
+kazlat
+kazuárfa
+kazán
+kazándob
+kazánfûtõ
+kazánház
+kazánkovács
+kazánkõ
+kazánkõvel
+kazánköves
+kazánkövet
+kazánt
+kazántér
+kb.
+kcal
+kebel
+kebelbarát
+kebelbarátságban
+keblemre!
+keblére
+kecsegtet
+kecsegtetõ
+kecses
+kecsesen
+kecsesség
+kecske
+kecskebak
+kecskebéka
+kecskebõr
+kecskedarázs
+kecskefélék
+kecskegida
+kecskeláb
+kecskeláb-vésõ
+kecskelábú
+kecsketestû
+kecskére
+kedd
+kedden
+kedv
+kedvben
+kedve
+kedved
+kedvel
+kedvelem
+kedvelt
+kedvelése
+kedvelõ
+kedvelõje
+kedvem
+kedvemben
+kedvemre
+kedvemért
+kedvemért!
+kedvenc
+kedves
+kedvesem
+kedvesem!
+kedvesemet
+kedvesen
+kedveskedés
+kedveskedéssel
+kedveskedõ
+kedvesség
+kedvességével
+kedveséhez
+kedvet
+kedvetlen
+kedvetlenség
+kedvetlenül
+kedvez
+kedvezmény
+kedvezményben
+kedvezményes
+kedvezés
+kedvezõ
+kedvezõen
+kedvezõség
+kedvezõtlen
+kedvezõtlenül
+kedvre
+kedvtelés
+kedvteléseként
+kedvvel!
+kedvébe
+kedvében
+kedvére
+kedvét
+kedvéért
+kedvû
+kedély
+kedélyeket
+kedélyes
+kedélyesen
+kedélyeskedés
+kedélyeskedõ
+kedélyesség
+kedélytelen
+kedélyállapot
+kedélyállapotban
+kedélyét
+kefe
+kefehaj
+kefekötõ
+kefelevonat
+kefelevonatot
+kefetartó
+kefevisszaállítás
+kefél
+kefélés
+kefével
+kegy
+kegyben
+kegydíj
+kegye
+kegyeibe
+kegyeit
+kegyeivel
+kegyelem
+kegyelemadás
+kegyelemdöfés
+kegyelemre
+kegyelemtrón
+kegyelemállapotban
+kegyelemért
+kegyelet
+kegyelettel
+kegyelme
+kegyelmes
+kegyelmet
+kegyelmi
+kegyelmébõl
+kegyelmére
+kegyenc
+kegyencnõ
+kegyencnõuralom
+kegyes
+kegyesen
+kegyeskedik
+kegyeskedõ
+kegyesség
+kegyetlen
+kegyetlenkedik
+kegyetlenkedése
+kegyetlenkedéseknek
+kegyetlenség
+kegyetlenül
+kegyhely
+kegyszerek
+kegyuraság
+kegyvesztett
+kegyvesztettség
+kegyvesztetté
+kegyébõl
+kegyét
+kegyúr
+kegyúri
+kehely
+kekec
+kekeckedõ
+keksz
+keksze
+kel
+kelbimbó
+kele
+kelekótya
+kelendõ
+kelendõség
+kelengye
+kelengyére
+kelengyével
+kelepce
+kelepcébe
+kelepcében
+kelepcéjébe
+kelet
+kelet-európai
+kelete
+keletel
+keletelés
+keleti
+keletkezik
+keletkeznek
+keletkezés
+keletkezõben
+keletû
+kelevény
+kell
+kell,
+kell-e
+kellem
+kellemes
+kellemesen
+kellemessé
+kellemesség
+kellemetlen
+kellemetlen!
+kellemetlenkedik
+kellemetlenkedõ
+kellemetlenség
+kellemetlenségeket
+kellemetlenséget
+kellemetlent
+kellemetlenül
+kellemnélküliség
+kellene
+kellet
+kelleti
+kelletlen
+kelletlenség
+kelletlenül
+kellett
+kellett!
+kelletve
+kelleténél
+kellék
+kellékek
+kellõ
+kellõképpen
+kellõs
+kelme
+kelmefestõ
+kelt
+kelta
+kelteni,
+keltett
+keltetés
+keltetõ
+keltetõgép
+keltez
+keltezetlen
+keltezett
+keltezhetõ
+keltezés
+kelti
+kelts
+keltsd
+keltés
+keltõ
+keltõen
+kelve
+kelvin-hatás
+kelés
+kelõ
+kemence
+kemencetapadék
+kemping
+kempingasztal
+kempingezik
+kempingezés
+kempingezõ
+kempingfõzõ
+kempingszék
+kempingágy
+kemény
+keményedik
+keményedés
+keményen
+keményfa
+keményfejû
+keményforrasz
+keményfém
+keménykalap
+keménykedik
+keménykötésû
+keménypapír
+keményre
+keményszárú
+keményszívû
+keménység
+keménységû
+keményvíz
+keményít
+keményített
+keményítõ
+keményítõben
+keményítõcukor
+keményöklû
+ken
+kencézés
+kend
+kender
+kenderike
+kenderkóc
+kendermagos
+kendervászon
+kendõ
+kendõt
+kendõvel
+kendõz
+kendõzetlen
+kendõzött
+kenet
+kenetekkel
+kenetes
+kenetesség
+kenetteljes
+kenetteljesség
+kenguru
+kengyel
+kengyeles
+kengyellel
+kengyelszár-aggató
+kengyelszíj
+kengyelvas
+kenhetõ
+keni
+kent
+kenterben
+kenu
+kenuevezõ
+kenuzik
+kenyai
+kenyere
+kenyered!
+kenyeresbolt
+kenyeret
+kenyeret!
+kenyerét
+kenyér
+kenyéradagokat
+kenyéradóit
+kenyérbolt
+kenyérbuci
+kenyérbél
+kenyérdagasztás
+kenyérdagasztó
+kenyéren
+kenyérhéjat
+kenyérhéjdarabkák
+kenyérhéjon
+kenyérkeresõ
+kenyérmorzsa
+kenyérpirító
+kenyérpusztító
+kenyérre
+kenyérszeletelõ
+kenyérsütés
+kenyértartó
+kenyérvég
+kenyérzsák
+kenyérért
+kenés
+kenésre
+kenõ
+kenõanyag
+kenõccsel
+kenõcs
+kenõdve
+kenõgép
+kenõkanóc
+kenõmájas
+kenõolaj
+kenõpénz
+kenõszappan
+kenõszelence
+kenõzsír
+kepél
+keramit
+kerceréce
+kerek
+kerekded
+kereke
+kerekedik
+kerekek
+kerekeken
+kerekekre
+kereken
+kerekes
+kereket
+kereket!
+kerekezik
+kerekezés
+kereklevelû
+kerekség
+kerekít
+kerekített
+kerekítés
+kerekû
+kerengõ
+kerep
+kerepel
+kereplõ
+keres
+keresd
+keresek
+kereset
+keresetet
+keresethez
+kereseti
+keresetlen
+keresetlenség
+keresetnek
+keresett
+keresettel
+keresettség
+keresetébõl
+keresgél
+keresgéltek
+keresi
+keresi,
+keresik
+kereskedelem
+kereskedelemre
+kereskedelemügyi
+kereskedelmi
+kereskedik
+kereskedés
+kereskedõ
+kereskedõk
+kereskedõsegéd
+kereslet
+keresni
+keresnivalód
+kerestet
+keresve
+kereszt
+kereszt-
+keresztanya
+keresztapa
+keresztbe
+keresztben
+keresztbeporzás
+keresztbetesz
+keresztboltozatok
+keresztcsigolya
+keresztcsont-fájdalmak
+keresztcsont-fájás
+keresztdeszka
+keresztekkel
+keresztel
+keresztelés
+keresztelési
+keresztelõ
+keresztelõkápolna
+keresztes
+keresztet
+keresztez
+keresztezett
+keresztezhetõ
+keresztezi
+keresztezés
+keresztezõ
+keresztezõdik
+keresztezõdnek
+keresztezõdés
+keresztezõdésre
+keresztezõdõ
+keresztezõdött
+keresztfa
+keresztfartõ
+keresztfej
+keresztfejsze
+keresztfurat
+keresztgerenda
+kereszthajó
+kereszthúros
+keresztidom
+keresztirányban
+keresztirányú
+keresztje
+keresztjáró
+keresztjét
+keresztkérdezés
+keresztkérdés
+keresztkérdések
+keresztkérdéseket
+keresztkötél
+keresztkötés
+keresztkötésû
+keresztkút
+keresztlabdákkal
+keresztlevétel
+keresztléc
+keresztmerevítõ
+keresztmetszet
+keresztmetszetet
+keresztnév
+keresztre
+keresztrejtvény
+keresztrejtvény-láz
+keresztrejtvényláz
+keresztrudas
+keresztrúd
+keresztszellõzés
+keresztszelvény
+keresztszán
+keresztszél
+keresztszövésû
+keresztszülõ
+keresztsánc
+keresztség
+kereszttartó
+kereszttel
+kereszttengely
+kereszttûz
+keresztutca
+keresztvas
+keresztvitorla
+keresztvonás
+keresztáram
+keresztáramú
+keresztárboc
+keresztátadás
+keresztény
+kereszténydemokrata
+kereszténynek
+kereszténység
+keresztút
+keresztúton
+keresztül
+keresztül!
+keresztül-kasul
+keresztüldöf
+keresztülerõszakol
+keresztülfurakodik
+keresztülhajszol
+keresztülhajt
+keresztülhaladó
+keresztülhatol
+keresztülhúz
+keresztülhúzza
+keresztüljuttat
+keresztüljutás
+keresztüllát
+keresztüllõ
+keresztülmegy
+keresztülnéz
+keresztülszúr
+keresztültolakszik
+keresztülverekszi
+keresztülvergõdik
+keresztülvihetõ
+keresztülvisz
+keresztülviszi
+keresztülvitelében
+keresztütés
+keresés
+keresésére
+keresõ
+keresõképesség
+keresõlap
+keresõlámpa
+keresünk
+keret
+keretbe
+keretein
+keretek
+keretes
+keretez
+keretlábas
+keretszervezet
+kerevet
+kerge
+kerget
+kergetik
+kergetése
+kergetõ
+kergülten
+kering
+keringés
+keringési
+keringõ
+keringõzik
+kerozin
+kert
+kertben
+kertel
+kertelés
+kertelõ
+kertes
+kerti
+kertje
+kertjét
+kertmûvelés
+kertnek
+kertrõl
+kertész
+kertészet
+kertészeti
+kertészkedés
+kertészkedéshez
+kertésznek
+kertünket
+kerub
+kerubi
+kerubszerû
+kerámia
+kerámiai
+kerék
+kerékabroncs
+kerékagy
+kerékcsapás
+kerékdob
+kerékdõlés
+kerékfelfüggesztés
+kerékgyártó
+kerékkel
+kerékkötõ
+kerékkötõje
+keréklapát
+keréknyom
+keréknyomos
+kerékpár
+kerékpár-versenypálya
+kerékpárgumi
+kerékpárkormány
+kerékpáron
+kerékpáros
+kerékpározik
+kerékpározás
+kerékpárversenyzõ
+kerékpárváz
+kerékpárút
+keréktalp
+keréktárcsa
+keréktávolság
+kerékvágás
+kerékvágásba
+kerékvágásban
+kerékvágásból
+kerít
+keríti
+kerítés
+kerítésfal
+kerítéssel
+kerítõ
+kerítõnõ
+kerül
+kerül?
+kerület
+kerületi
+kerületünk
+kerülgeti
+kerülgetés
+kerülgetõ
+kerülheti
+kerüli
+kerüljön
+kerülnek
+kerülni
+kerülnie
+kerülsz
+került
+kerülés
+kerülése
+kerülõ
+kerülõt
+kerülõút
+keselyû
+kesereg
+kesernyés
+kesernyésen
+kesernyésség
+keserves
+keservesen
+keserédes
+keserû
+keserûen
+keserûség
+keshedt
+keskeny
+keskenyedõ
+keskenység
+keskenyvágányú
+keskenyít
+keszeg
+keszon
+keszonbetegség
+kesztyû
+kesztyûbe
+kesztyûs
+kesztyût
+kesztyûtartó
+ketchup
+ketrec
+ketrecbe
+ketrecek
+ketten
+kettes
+kettesbe
+kettesben
+kettesével
+kettyenés
+kettyint
+kettyintés
+ketté
+kettéhasított
+kettéoszlás
+kettéoszt
+kettéosztható
+kettéosztott
+kettéroppan
+kettészakad
+kettészakít
+kettétör
+kettétörik
+kettétörés
+kettévág
+kettévágott
+kettéválaszt
+kettéválasztás
+kettéválás
+kettõ
+kettõs
+kettõsen
+kettõshangzó
+kettõskanyar
+kettõspont
+kettõsség
+kettõt
+kettõzõdés
+kettõzött
+ketyeg
+ketyegés
+ketyegõ
+ketyere
+kever
+keveredik
+keveredés
+keveri
+kevert
+keverék
+keverékszén
+keverés
+keverõ
+keverõedény
+keverõgép
+keverõlapát
+keverõtál
+kevesbedik
+kevesbít
+kevesebb
+kevesebbet
+kevesen
+keveset
+kevély
+kevélység
+kevés
+kevésbé
+kevésbõl
+kevésen
+kevéske
+kevésre
+kevéssel
+kevéssé
+kezd
+kezd?
+kezdem
+kezdemény
+kezdeményez
+kezdeményezés
+kezdeményezési
+kezdeményezést
+kezdeményezésébõl
+kezdeményezésére
+kezdeményezõ
+kezdeményezõje
+kezdeményezõképes
+kezdeményezõkészség
+kezdet
+kezdetben
+kezdete
+kezdeten
+kezdeti
+kezdetleges
+kezdetlegesség
+kezdett
+kezdettõl
+kezdetén
+kezdi
+kezdik
+kezdjen
+kezdjük
+kezdtek
+kezdtem
+kezdve
+kezdve,
+kezdés
+kezdõ
+kezdõbetûi
+kezdõbetûinek
+kezdõbetûvel
+kezdõdik
+kezdõdõ
+kezdõkori
+kezdõpont
+kezdõrúgás
+kezdõrúgást
+kezdõsebessége
+kezdõvonala
+keze
+kezed
+kezeimet
+kezeit
+kezeivel
+kezek
+kezekben
+kezekkel
+kezekkel!
+kezel
+kezeletlen
+kezelhetetlen
+kezelhetõ
+kezelhetõség
+kezeli
+kezelt
+kezelés
+kezelésbe
+kezelésben
+kezelése
+kezeléses
+kezelési
+kezelésmód
+kezelésre
+kezelõ
+kezelõfülke
+kezelõhíd
+kezelõje
+kezelõorvos
+kezelõszemélyzete
+kezem
+kezem!
+kezembe
+kezemrõl
+kezes
+kezeskedik
+kezeslábas
+kezesség
+kezességet
+kezességi
+kezességvállalás
+kezest
+kezet
+kezezés
+kezébe
+kezében
+kezébõl
+kezénél-lábánál
+kezére
+kezét
+kezét-lábát
+kezével
+kezû
+khakiszínû
+khakiszövet
+ki!
+ki,
+ki-be
+ki-ki
+ki?
+kiabál
+kiabálás
+kiabáló
+kiad
+kiadagol
+kiadatott
+kiadatás
+kiadja
+kiadják
+kiadmány
+kiadott
+kiadvány
+kiadványok
+kiadás
+kiadása
+kiadásait
+kiadásba
+kiadások
+kiadásokat
+kiadásokra
+kiadásokra!
+kiadásomban
+kiadástól
+kiadásának
+kiadású
+kiadó
+kiadói
+kiadós
+kiadósan
+kiagyal
+kiagyalt
+kiagyalás
+kiagyalója
+kiakad
+kiakaszt
+kiaknáz
+kiaknázatlan
+kiaknázás
+kialakul
+kialakult
+kialakulás
+kialakít
+kialakított
+kialakító
+kialszik
+kialudni
+kialudt
+kialussza
+kialvás
+kialvóban
+kiapad
+kiapadhatatlan
+kiaszott
+kibabrál
+kibaszik
+kibaszott
+kibaszás
+kibe
+kibelez
+kibelezett
+kibelezés
+kibelezõ
+kibernetika
+kibernetikai
+kibernetikus
+kibeszéli
+kibeszélés
+kibetûz
+kibetûzhetetlen
+kibetûzhetõ
+kibic
+kibicel
+kibicsaklik
+kibillen
+kibillent
+kibillenés
+kibocsát
+kibocsátott
+kibocsátás
+kibocsátású
+kibocsátó
+kibocsátóhoz
+kibogoz
+kibogozhatatlan
+kibogozhatatlanul
+kibogozás
+kibogozásába
+kibogozódik
+kibombáz
+kibombázott
+kibomlik
+kibomlott
+kibont
+kibontakozik
+kibontakoztat
+kibontja
+kibontott
+kibontás
+kibonyolódik
+kiborul
+kiborult
+kiborít
+kibuggyan
+kibuggyanás
+kibugyolál
+kibujdosás
+kibukkan
+kibukkanás
+kibuktat
+kibuliz
+kibulizik
+kibékít
+kibékítés
+kibékül
+kibékülés
+kibélel
+kibérel
+kibérelés
+kibérlése
+kibír
+kibírhatatlan
+kibírhatatlanul
+kibírható
+kibõvít
+kibõvítés
+kibõvül
+kiböffent
+kibök
+kibújik
+kibúvik
+kibúvás
+kibúvó
+kibúvót
+kicakkoz
+kicentiz
+kicenzúráz
+kicicomáz
+kicicomázva
+kicicomázza
+kicirkalmazott
+kicsal
+kicsap
+kicsapong
+kicsapongás
+kicsapongásra
+kicsapongó
+kicsapó
+kicsapódik
+kicsapódott
+kicsapódás
+kicsatol
+kicsattan
+kicsattanó
+kicsattint
+kicsavar
+kicsavarja
+kicsavarodik
+kicsavarodott
+kicsavarás
+kicsen
+kicsendül
+kicsendülõ
+kicsenget
+kicsepeg
+kicsepegtet
+kicsepegés
+kicserepesedett
+kicserzetlen
+kicserzett
+kicserzi
+kicserél
+kicserélhetõ
+kicseréli
+kicserélés
+kicsi
+kicsi?
+kicsibe
+kicsiben
+kicsicsáz
+kicsicsázza
+kicsihol
+kicsik
+kicsikar
+kicsikét
+kicsinosít
+kicsinosítja
+kicsinosított
+kicsinosítás
+kicsiny
+kicsinyek
+kicsinyel
+kicsinyes
+kicsinyesen
+kicsinyeskedik
+kicsinyeskedõ
+kicsinyesség
+kicsinylõ
+kicsinyítés
+kicsinyítõ
+kicsinál
+kicsinált
+kicsipeget
+kicsipkedés
+kicsipkéz
+kicsipkézett
+kicsiszol
+kicsit
+kicsit!
+kicsodának?
+kicsodát?
+kicsomagol
+kicsomagolás
+kicsontoz
+kicsontozott
+kicsorbul
+kicsorbult
+kicsorbulás
+kicsorbít
+kicsordul
+kicsorduló
+kicsorgó
+kicsoszog
+kicsuk
+kicsurgás
+kicsépel
+kicsípett
+kicsípi
+kicsípte
+kicsírázás
+kicsõdül
+kicsúfol
+kicsúfolás
+kicsúszik
+kicsúszkált
+kicövekel
+kidagad
+kidagadás
+kidagaszt
+kiderít
+kiderül
+kiderült
+kidicsér
+kidob
+kidobja
+kidobott
+kidobás
+kidobása
+kidobó
+kidobólegény
+kidolgoz
+kidolgozatlan
+kidolgozatlanul
+kidolgozott
+kidolgozottság
+kidolgozás
+kidomborodik
+kidomborodás
+kidomborodó
+kidomborít
+kidomborított
+kidomborító
+kidudorodik
+kidudorodás
+kidudorodó
+kidug
+kiduzzad
+kiduzzaszt
+kidíszít
+kidõl
+kidõlt
+kidögleszt
+kidöglött
+kidönt
+kidörzsöl
+kidörzsölt
+kidörzsölés
+kidúcol
+kidülled
+kidülledt
+kidülledés
+kidülleszt
+kidülleszti
+kiegyenesedik
+kiegyenesít
+kiegyenesítés
+kiegyenget
+kiegyengetés
+kiegyenlít
+kiegyenlített
+kiegyenlíti
+kiegyenlítés
+kiegyenlítõ
+kiegyenlítõdik
+kiegyenlítõdés
+kiegyenlítõlap
+kiegyenlítõmû
+kiegyensúlyoz
+kiegyensúlyozatlan
+kiegyensúlyozatlanság
+kiegyensúlyozott
+kiegyensúlyozottan
+kiegyensúlyozottság
+kiegyensúlyozás
+kiegyensúlyozása
+kiegyensúlyozó
+kiegyezik
+kiegyezés
+kiegészít
+kiegészíti
+kiegészítés
+kiegészítõ
+kiegészítõk
+kiegészítõként
+kiegészítõképpen
+kiejt
+kiejtett
+kiejthetetlen
+kiejthetõ
+kiejti
+kiejtés
+kiejtésmód
+kiejtésre
+kiejtéssel
+kiejtésû
+kielégít
+kielégítendõ
+kielégíteni
+kielégítetlen
+kielégítetlenség
+kielégíthetetlen
+kielégíthetõ
+kielégíti
+kielégítés
+kielégítése
+kielégítési
+kielégítésére
+kielégítõ
+kielégítõen
+kielégül
+kielégült
+kielégültség
+kielégülés
+kielégülést
+kiemel
+kiemeli
+kiemelkedik
+kiemelkedés
+kiemelkedõ
+kiemelkedõen
+kiemelt
+kiemelten
+kiemelve
+kiemelés
+kienged
+kiengedés
+kiengesztel
+kiengeszteletlen
+kiengesztelhetetlen
+kiengesztelhetetlenség
+kiengesztelhetõ
+kiengesztelt
+kiengesztelés
+kiengesztelõ
+kiereszkedik
+kiereszt
+kieresztés
+kierezett
+kierõszakol
+kierõszakolja
+kierõszakolt
+kierõszakoltan
+kierõszakolás
+kies
+kiesik
+kiessé
+kiesz
+kieszel
+kieszik
+kieszközöl
+kiesztergált
+kiesés
+kietlen
+kietlenség
+kietlenül
+kievez
+kievickél
+kifacsar
+kifacsarodott
+kifakad
+kifakadás
+kifakul
+kifakult
+kifakít
+kifalazás
+kifarag
+kifecseg
+kifecsegés
+kifecsegõ
+kifecskendezés
+kifehéredik
+kifehérít
+kifejez
+kifejezetlen
+kifejezett
+kifejezetten
+kifejezhetetlen
+kifejezhetetlenül
+kifejezi
+kifejeznem
+kifejezve
+kifejezés
+kifejezésbeli
+kifejezése
+kifejezések
+kifejezéskészlet
+kifejezésmód
+kifejezésmódjával
+kifejezésre
+kifejezést
+kifejezéstelen
+kifejezéstelenség
+kifejezéstelenül
+kifejezésteljes
+kifejezésére
+kifejezõ
+kifejleszt
+kifejlesztett
+kifejlesztés
+kifejlett
+kifejlik
+kifejlés
+kifejlõdik
+kifejlõdés
+kifejt
+kifejtett
+kifejti
+kifejtés
+kifejtése
+kifektet
+kifekvõ
+kifelejt
+kifelé
+kifelé!
+kifen
+kifenés
+kifest
+kifestett
+kifesti
+kifestés
+kifeszít
+kifeszítet
+kifeszített
+kifeszítés
+kifeszítése
+kifeszül
+kificamodik
+kificamodott
+kificamodás
+kificamít
+kificamítja
+kifiguráz
+kifigurázás
+kifingik
+kifinomult
+kifinomultság
+kifinomít
+kifizet
+kifizetetlen
+kifizetett
+kifizeti
+kifizetni
+kifizetve
+kifizetõdik
+kifizetõdõ
+kifli
+kifog
+kifogja
+kifogott
+kifogtad!
+kifogtam
+kifogy
+kifogyhatatlan
+kifogyott
+kifogyva
+kifogás
+kifogás!
+kifogása
+kifogásként
+kifogások
+kifogásokkal
+kifogásol
+kifogásolható
+kifogásolnivalót
+kifogásolás
+kifogásoló
+kifogásom
+kifogást
+kifogástalan
+kifogástalanság
+kifogástalanul
+kifogásuk
+kifoltoz
+kifolyat
+kifolyik
+kifolyás
+kifolyásos
+kifolyó
+kifolyócsap
+kifolyócsõ
+kifolyólag
+kifolyószelep
+kifordul
+kifordult
+kifordít
+kifordítható
+kifordított
+kifordítva
+kifordítás
+kiforgat
+kiforgatja
+kiforgatás
+kiforgatása
+kiforgató
+kiformál
+kiformálás
+kiforral
+kiforratlan
+kiforrott
+kifoszlik
+kifoszlott
+kifoszt
+kifosztja
+kifosztás
+kifröccsen
+kifröcskölt
+kifulladt
+kifulladás
+kifulladó
+kifullaszt
+kifullasztó
+kifurakodik
+kifut
+kifutás
+kifutó
+kifutóban
+kifutófiú
+kifutókarám
+kifutópálya
+kifárad
+kifáradt
+kifáradás
+kifáradás-vizsgálat
+kifáradási
+kifáradásig
+kifáraszt
+kifékez
+kifényesedett
+kifényesedik
+kifényesít
+kifényesített
+kifésül
+kifõz
+kifõzés
+kifõzött
+kifúj
+kifújja
+kifújják
+kifúr
+kifúrásával
+kifúvat
+kifúvatás
+kifúvás
+kifúvása
+kifûz
+kifûzõdik
+kifüggesztés
+kifürkész
+kifürkészetlen
+kifürkészhetetlen
+kifürkészhetetlenség
+kifüstöl
+kifüstölés
+kifütyül
+kifütyülés
+kiganajoz
+kiglancolt
+kigolyóz
+kigombol
+kigombolyít
+kigombolódik
+kigondol
+kigubancolódik
+kiguberál
+kigurul
+kigyomlál
+kigyullad
+kigyulladt
+kigyulladva
+kigyógyít
+kigázosodik
+kigázosodás
+kigázosítás
+kigõzölgés
+kigõzölt
+kigõzölög
+kigömbölyödik
+kigöngyöl
+kigöngyölít
+kigöngyölõdik
+kigöngyölõdött
+kigörbít
+kigördül
+kigördülés
+kigúnyol
+kigúnyolás
+kihagy
+kihagyható
+kihagyja
+kihagyott
+kihagyás
+kihagyásokkal
+kihagyó
+kihajigál
+kihajlik
+kihajlás
+kihajlít
+kihajlított
+kihajló
+kihajol
+kihajt
+kihajtott
+kihajtották
+kihajtás
+kihajtós
+kihajtósáv
+kihajít
+kihajózik
+kihal
+kihallgat
+kihallgatja
+kihallgatják
+kihallgatás
+kihallgatási
+kihallgatásra
+kihallgatást
+kihallgató
+kihalt
+kihalás
+kihalász
+kihangol
+kihangsúlyoz
+kihangsúlyozott
+kihangsúlyozás
+kihangzik
+kihantol
+kihantolás
+kiharcol
+kihasasodik
+kihasasodás
+kihasasít
+kihasznál
+kihasználatlan
+kihasználja
+kihasználás
+kihasználási
+kihat
+kihatás
+kihegyez
+kihegyezett
+kihegyezés
+kihelyez
+kiherél
+kiherélt
+kiherélés
+kihever
+kiheveri
+kiheverni
+kiheverés
+kihevül
+kihevülés
+kihez
+kihirdet
+kihirdetés
+kihirdetése
+kihord
+kihorgonyzás
+kihorgonyzó
+kihornyol
+kihoz
+kihozatal
+kihozás
+kihullás
+kihágások
+kihámoz
+kihámozza
+kihámozás
+kihány
+kihányja
+kihátrál
+kiházasít
+kiházasítás
+kihézagol
+kihézagolás
+kihímez
+kihív
+kihívat
+kihívja
+kihívás
+kihívást
+kihívó
+kihívóan
+kihízlal
+kihúz
+kihúzatja
+kihúzható
+kihúzni
+kihúzott
+kihúzva
+kihúzza
+kihúzás
+kihúzó
+kihúzótoll
+kihûl
+kihûlt
+kihüvelyez
+kihüvelyezés
+kiigazít
+kiigazítás
+kiigazítására
+kiigazító
+kiiktat
+kiindul
+kiindulás
+kiindulási
+kiinduló
+kiindulópont
+kiirrigál
+kiirt
+kiirthatatlan
+kiirthatatlanul
+kiirtás
+kiirtója
+kiismer
+kiismeri
+kiismerni
+kiiszapol
+kiiszik
+kiizzad
+kijavít
+kijavítható
+kijavítás
+kijavítása
+kijavító
+kijelent
+kijelentette,
+kijelenti
+kijelentkezés
+kijelentés
+kijelentéseket
+kijelentést
+kijelentését
+kijelzõ
+kijelzõs
+kijelöl
+kijelöli
+kijelölt
+kijelölés
+kijelölõ
+kijjebb
+kijut
+kijutás
+kijár
+kijárat
+kijárási
+kijáró
+kijátssza
+kijátszik
+kijátszás
+kijátszó
+kijózanodik
+kijózanít
+kijózanító
+kijön
+kijönne
+kijönnek
+kijönni
+kijött
+kijövetel
+kikalapál
+kikalapált
+kikalkulálja
+kikalászol
+kikanalaz
+kikandikál
+kikap
+kikapar
+kikapcsol
+kikapcsolt
+kikapcsolva
+kikapcsolás
+kikapcsolási
+kikapcsoló
+kikapcsolódik
+kikapcsolódás
+kikapcsolódást
+kikapcsolókar
+kikapás
+kikapós
+kikattintás
+kikecmereg
+kikel
+kikelet
+kikelt
+kikelés
+kikeményít
+kikeményített
+kikeményítés
+kiken
+kikent-kifent
+kikerekedett
+kikerekedik
+kikerekít
+kikeres
+kikerget
+kikerics
+kikerül
+kikerülhetetlen
+kikerülhetetlenbe
+kikerülhetetlenség
+kikerülés
+kikerülési
+kiket?
+kikezd
+kikiabál
+kikiabálja
+kikiált
+kikiáltja
+kikiáltási
+kikiáltó
+kiknek?
+kikocsányolt
+kikopik
+kikopog
+kikopogja
+kikopogtat
+kikopott
+kikopás
+kikosaraz
+kikosarazzák
+kikotor
+kikottyant
+kikottyantás
+kikotyog
+kikotyogás
+kikristályosodik
+kikristályosodás
+kikristályosít
+kikristályosítás
+kikunyerál
+kikuplungoz
+kikutat
+kikutatja
+kikutató
+kikémlel
+kikényszerít
+kikényszeríthetetlen
+kikényszerítés
+kiképez
+kiképzett
+kiképzés
+kiképzõ
+kikérdez
+kikérdezi
+kikérdezés
+kikérdezõ
+kikészít
+kikészítetlen
+kikészített
+kikészíti
+kikészítés
+kikészítõ
+kikészül
+kikészült
+kikísér
+kiköhög
+kikölcsönöz
+kikölt
+kiköltés
+kiköltözik
+kiköltözködik
+kiköp
+kiköpött
+kiköszörüli
+kiköt
+kikötés
+kikötése
+kikötések
+kikötéshez
+kikötési
+kikötéssel,
+kikötõ
+kikötõ-medence
+kikötõbak
+kikötõbakhoz
+kikötõbe
+kikötõbejárat
+kikötõben
+kikötõberendezések
+kikötõbója
+kikötõbõl
+kikötõdíj
+kikötõgát
+kikötõhatóság
+kikötõhely
+kikötõhíd
+kikötõhöz
+kikötõi
+kikötõilleték
+kikötõk
+kikötõkötél
+kikötõmunkás
+kikötõmûhely
+kikötõt
+kikötõtorony
+kikötõvel
+kikötõvám
+kikötõváros
+kikötõárboc
+kikötõépítkezések
+kikötõúszók
+kikötött
+kikövetkeztet
+kikövetkeztetett
+kikövetkeztetve
+kikövez
+kikövezett
+kikövezõ
+kiközösít
+kiközösített
+kiközösítés
+kiközösítéssel
+kikúr
+kikúrál
+kiküld
+kiküldetés
+kiküldött
+kikülönít
+kikülönített
+kikürtöl
+kiküszöböl
+kilakoltat
+kilakoltatott
+kilakoltatás
+kilapátol
+kilehel
+kileheli
+kilehelés
+kilejt
+kilenc
+kilencedfokú
+kilences
+kilencven
+kileng
+kilengés
+kilengése
+kilengési
+kilengõ
+kilevelesedik
+kilincs
+kilincskerék
+kilincsmû
+kilincsre
+kiloccsan
+kiloccsant
+kiloccsantja
+kiloccsantott
+kilociklus
+kilombosodik
+kilométer
+kilométeres
+kilop
+kilopódzik
+kilottyan
+kilottyant
+kilovagol
+kilyuggat
+kilyukad
+kilyukadni
+kilyukadni?
+kilyukadt
+kilyukadás
+kilyukaszt
+kilyukasztja
+kilyukasztás
+kilátszik
+kilátás
+kilátása
+kilátásai
+kilátások
+kilátásokkal
+kilátásom,
+kilátást
+kilátókocsi
+kilégzés
+kilélegzik
+kilép
+kilépett
+kilépve
+kilépés
+kilépõ
+kilódít
+kilóg
+kilógat
+kilõ
+kilök
+kilökés
+kilökõdés
+kilökõdött
+kilöttyent
+kilövell
+kilövellés
+kilövellései
+kilövellõ
+kilövi
+kilövés
+kilúgoz
+kilúgozás
+kilúgozódás
+kimagaslik
+kimagasló
+kimagaslóan
+kimagoz
+kimagozott
+kimagozó
+kimagyaráz
+kimar
+kimarad
+kimaradt
+kimaradási
+kimarat
+kimarja
+kimart
+kimarás
+kimaródást
+kimazsoláz
+kimegy
+kimelegedtem
+kimelegszik
+kimenet
+kimenetel
+kimenetelû
+kimenetoldal
+kiment
+kimenti
+kimentés
+kimenõ
+kimer
+kimereget
+kimerevít
+kimerni
+kimerít
+kimeríthetetlen
+kimerítés
+kimerítõ
+kimerítõen
+kimerül
+kimerült
+kimerültség
+kimerültségtõl
+kimerülés
+kimeszel
+kimeszelés
+kimetsz
+kimetszés
+kimond
+kimondhatatlan
+kimondhatatlanul
+kimondjuk
+kimondott
+kimondottan
+kimondva
+kimondás
+kimondása
+kimonó
+kimos
+kimosott
+kimosás
+kimosási
+kimosódás
+kimozdul
+kimozdulás
+kimozdít
+kimulatja
+kimunkált
+kimustrál
+kimustrált
+kimutat
+kimutatható
+kimutathatóan
+kimutathatóság
+kimutatás
+kimutató
+kimásol
+kimászik
+kimászó
+kimélyít
+kimér
+kiméra
+kimért
+kimérten
+kimértség
+kiméréssel
+kimérésére
+kimúlik
+kimûvel
+kimûvelt
+kinagyol
+kincs
+kincsek
+kincsem
+kincsesház
+kincsként
+kincslelet
+kincstár
+kincstári
+kincstáros
+kinek
+kinek?
+kinetika
+kinetikai
+kinetikus
+kinevet
+kinevetik
+kinevetteti
+kinevez
+kinevezett
+kinevezhetõ
+kinevezi
+kinevezteti
+kinevezés
+kinin
+kinn
+kinnlevõ
+kinnlevõség
+kinnlevõségek
+kint
+kintlévõségek
+kintornás
+kinyer
+kinyerés
+kinyiffan
+kinyiffant
+kinyilatkoztatás
+kinyilvánít
+kinyilvánítja
+kinyilvánítás
+kinyit
+kinyitható
+kinyitja
+kinyitni
+kinyitott
+kinyitottam
+kinyitva
+kinyom
+kinyomja
+kinyomoz
+kinyomozható
+kinyomtatta
+kinyuvaszt
+kinyílik
+kinyílt
+kinyílás
+kinyír
+kinyög
+kinyögni,
+kinyögte,
+kinyújt
+kinyújtja
+kinyújtott
+kinyújtás
+kinyúlik
+kinyúlt
+kinyúlás
+kinyúló
+kinéz
+kinézés
+kinõ
+kinõtt
+kinövés
+kiokosodni
+kiokosít
+kiokosítás
+kioktat
+kioktatás
+kiokád
+kiold
+kioldott
+kioldoz
+kioldozott
+kioldozódik
+kioldás
+kioldása
+kioldó
+kioldódik
+kioldógomb
+kioldókötél
+kioldószerkezet
+kiolt
+kioltás
+kioltó
+kiolvad
+kiolvadt
+kiolvas
+kiolvasott
+kiolvastad?
+kiolvaszt
+kiolvasztott
+kiolvasztás
+kiolvasás
+kiordítja
+kioson
+kioszk
+kioszt
+kiosztott
+kiosztás
+kipakol
+kipanamáz
+kiparancsol
+kiparíroz
+kipaterol
+kipattan
+kipattogzás
+kipbõr
+kipellengérez
+kipenderít
+kipenderül
+kipenget
+kiperdül
+kipereg
+kiperemez
+kiperselyezés
+kipiheni
+kipipál
+kipipálás
+kipirosodik
+kipirosít
+kipirul
+kipirult
+kipirultság
+kipirulva
+kipirulás
+kipisszeg
+kipisszegés
+kipiszkál
+kiplakátoz
+kipletykál
+kipofozás
+kipontoz
+kipontozás
+kipontozó
+kiporcióz
+kiporol
+kiporolja
+kiporszívóz
+kiprovokál
+kiprédikál
+kiprésel
+kipréselt
+kipróbál
+kipróbálatlan
+kipróbálja
+kipróbált
+kipróbálás
+kipufogás
+kipufogó
+kipufogócsõ
+kipufogócsõ-kémény
+kipufogódob
+kipufogógáz
+kipuhatol
+kipuhatolható
+kipuhatolja
+kipukkadás
+kipukkant
+kipukkaszt
+kipurcan
+kipurcant
+kipusztulás
+kipusztít
+kipusztítás
+kipállás
+kipányváz
+kipányvázott
+kipárnáz
+kipárnázás
+kipárolgás
+kipárolog
+kipárologtat
+kipécézi
+kipólyáz
+kipótol
+kipöfög
+kipúposodott
+kirablás
+kirabol
+kirabolt
+kiradíroz
+kiradírozás
+kiragad
+kiragaszt
+kirajzik
+kirajzol
+kirajzolt
+kirajzolódik
+kirajzolódó
+kirajzás
+kirajzó
+kirak
+kirakat
+kirakati
+kirakatrendezõ
+kirakatüvegbe
+kirakatüveget
+kirakja
+kirakják
+kirakodik
+kirakodás
+kirakodó
+kirakodóhíd
+kirakott
+kirakás
+kirakása
+kirakóhajó
+kirakós
+kire
+kireffel
+kirejtjelez
+kirekeszt
+kirekesztés
+kirekesztõ
+kirendel
+kirendelik
+kirendelési
+kirepedés
+kirepít
+kirepítés
+kireteszel
+kirezgés
+kiritkít
+kirittyent
+kirittyenti
+kirobban
+kirobbant
+kirobbanás
+kirobbanó
+kirohan
+kirohanás
+kirojtosodik
+kirojtosodott
+kirojtosodás
+kirojtosít
+kirongyosodás
+kiront
+kirostál
+kirovás
+kiruccan
+kiruccanás
+kiruccanó
+kirukkol
+királlyá
+király
+királyhoz
+királyi
+királykék
+királymadár
+királyné
+királynõ
+királynõi
+királynõje
+királynõként
+királynõnk
+királynõt
+királynõvé
+királyomra
+királypáfrány
+királypálma
+királypárti
+királypártiság
+királyság
+királyságot
+királyt
+királytigris
+királyért
+kirámol
+kiráncigál
+kirándul
+kirándulás
+kirándulást
+kiránduló
+kirándulóbusz
+kirándulókocsi
+kirángat
+kirángathatók
+kirángatni
+kiránt
+kirántott
+kiráz
+kirí
+kirívó
+kirívóan
+kiró
+kiröhög
+kiröppent
+kiröpít
+kirúg
+kirúgja
+kirúgják
+kirúgás
+kirúzsoz
+kirúzsozza
+kirügyezik
+kis
+kis-belt
+kisagy
+kisajtol
+kisajtolt
+kisajtolás
+kisajtó
+kisajátít
+kisajátítja
+kisajátítás
+kisajátítási
+kisasszony
+kisatlasz
+kisautó
+kisbetû
+kisbirtok
+kisbirtokok
+kisbirtokos
+kisbirtokosi
+kisbirtokosság
+kisbolt
+kisbolygó
+kisbéres
+kisbérlet
+kisbérlõ
+kisbíró
+kiscica
+kiscipõ
+kiscserkész
+kiscsirke
+kiscsomag
+kisdedeket
+kisdolog
+kisebb
+kisebbedik
+kisebbedés
+kisebbfajta
+kisebbik
+kisebbre
+kisebbrendûségi
+kisebbség
+kisebbséget
+kisebbségi
+kisebbít
+kisebbíthetõ
+kisebbíti
+kisebbítés
+kisebbítõ
+kisegít
+kisegítés
+kisegítõ
+kisegítõ-
+kiselejtez
+kiselejtezett
+kisember
+kisemberek
+kisemmiz
+kisemmizett
+kiserõd
+kisfiam
+kisfilm
+kisfizetésûek
+kisfiú
+kisfiús
+kisfrekvencia
+kisfuvola
+kisgazda
+kisgazda-
+kisgyerek
+kisgyerekek
+kisgyermek
+kisgyûjtõ
+kishajó-kikötõ-medence
+kisharang
+kishitû
+kishitûen
+kisiet
+kisigényû
+kisiklat
+kisiklatás
+kisiklik
+kisiklott
+kisilabizál
+kisimít
+kisimítás
+kisinas
+kising
+kisipar
+kisiskola
+kisisten
+kiskabát
+kiskacsa
+kiskapu
+kiskassza
+kiskatona
+kiskedden
+kiskereskedelem
+kiskereskedelmi
+kiskirály
+kiskocsi
+kiskocsma
+kiskorú
+kiskorúak
+kiskorúság
+kiskutya
+kislelkû
+kislelkûen
+kislemez
+kisleány
+kislány
+kislányos
+kismacska
+kismadár
+kismalac
+kismiska!
+kismutató
+kisméretû
+kisodor
+kisokos
+kisomfordál
+kisompolyog
+kisorsolás
+kispartitúra
+kispolgár
+kispolgári
+kisportolt
+kispénzû
+kisregény
+kissebségi
+kisseprû
+kissrác
+kisstílû
+kisszerû
+kisszámú
+kissé
+kisteherautó
+kistermetû
+kistestû
+kistisztviselõ
+kistányér
+kisugároz
+kisugárzás
+kisugárzó
+kisujj
+kisujjad
+kisujjában
+kisujját
+kisvasúti
+kisváros
+kiszab
+kiszabadul
+kiszabadulás
+kiszabadít
+kiszabadítani
+kiszabadítás
+kiszabott
+kiszabás
+kiszaglász
+kiszagol
+kiszagoltad
+kiszakít
+kiszakított
+kiszakítás
+kiszalad
+kiszanál
+kiszed
+kiszedi
+kiszedés
+kiszellõzteti
+kiszemel
+kiszemelt
+kiszenel
+kiszerel
+kiszerelés
+kiszimatol
+kiszipolyoz
+kiszipolyozás
+kiszipolyozó
+kiszitál
+kiszitálja
+kiszivattyúz
+kiszivattyúzás
+kiszivárgott
+kiszivárgás
+kiszivárgása
+kiszivárog
+kiszivárogtat
+kiszivárogtatás
+kiszolgál
+kiszolgált
+kiszolgáltat
+kiszolgáltatva
+kiszolgáltatás
+kiszolgáltató
+kiszolgálás
+kiszolgálási
+kiszolgálással
+kiszolgáló
+kiszorul
+kiszorít
+kiszorítják
+kiszorítás
+kiszorító
+kiszuperál
+kiszurkol
+kiszáguld
+kiszálasodik
+kiszálaz
+kiszáll
+kiszállás
+kiszálló
+kiszállóhíd
+kiszámol
+kiszámít
+kiszámíthatatlan
+kiszámítható
+kiszámított
+kiszámítva
+kiszámítás
+kiszánt
+kiszárad
+kiszáradt
+kiszáradás
+kiszáradó
+kiszárít
+kiszárított
+kiszárítás
+kiszélesedik
+kiszélesedés
+kiszélesít
+kiszélesített
+kiszínez
+kiszínezett
+kiszív
+kiszórás
+kiszóródás
+kiszögell
+kiszögellik
+kiszögellés
+kiszögellõ
+kiszökell
+kiszökken
+kiszökkenés
+kiszúr
+kiszúrja
+kiszûr
+kiságy
+kisállat
+kisámfáz
+kisétkû
+kisírja
+kisöblû
+kisúrol
+kisült
+kisülés
+kisülési
+kisüsti
+kisüt
+kisütteti
+kisütött
+kit
+kit?
+kitagad
+kitakar
+kitakarít
+kitakarítás
+kitaláció
+kitalál
+kitalálhatatlan
+kitalálni
+kitalált
+kitaláltad!
+kitalálás
+kitaláló
+kitalálós
+kitalálósdi
+kitanulja
+kitanult
+kitanít
+kitaníttat
+kitanítás
+kitapaszt
+kitapint
+kitapintható
+kitapinthatóság
+kitapintja
+kitapogat
+kitaposott
+kitart
+kitartott
+kitartás
+kitartás!
+kitartó
+kitartóan
+kitartóvá
+kitaszít
+kitaszított
+kitaszítás
+kiteker
+kitekeri
+kitekert
+kitelepít
+kitelepített
+kitelepítés
+kitelik
+kitereget
+kiteregeti
+kiteregetés
+kiterjed
+kiterjedik
+kiterjedt
+kiterjedés
+kiterjedése
+kiterjedésû
+kiterjedõ
+kiterjedõen
+kiterjeszt
+kiterjesztett
+kiterjeszti
+kiterjesztés
+kitermel
+kitermelt
+kitermelés
+kitermelõipar
+kitervel
+kitervelt
+kitervelés
+kitervez
+kitervezés
+kiterít
+kiterített
+kiteríti
+kitesz
+kiteszi
+kiteszik
+kitett
+kitettség
+kitevés
+kitevõ
+kitikkadt
+kitilt
+kitiltották
+kitiltás
+kitinváz
+kitipeg
+kitisztul
+kitisztít
+kitol
+kitolatják
+kitold
+kitoloncolás
+kitolulás
+kitolókezelõ
+kitombolja
+kitombolta
+kitombolás
+kitorlódás
+kitudódik
+kitudódott
+kituszkol
+kitágul
+kitágult
+kitágulás
+kitágít
+kitágítás
+kitálal
+kitámaszt
+kitámasztó
+kitár
+kitárgyal
+kitárja
+kitárt
+kitárul
+kitárva
+kitáró
+kitép
+kitépett
+kitépni
+kitépés
+kitépõdnek
+kitér
+kitérdelt
+kitért
+kitérés
+kitérések
+kitérést
+kitérít
+kitérõ
+kitérõbe
+kitérõdés
+kitérõen
+kitérõvágány
+kitérõvágányra
+kitérõút
+kitétel
+kitéve
+kitódul
+kitódulásos
+kitõl
+kitölt
+kitöltetlen
+kitölti
+kitöltés
+kitöltése
+kitöltõ
+kitöltõfal
+kitöltött
+kitöm
+kitömés
+kitömött
+kitör
+kitörlés
+kitörés
+kitöréssel
+kitörõ
+kitörõen
+kitöröl
+kitörölhetetlen
+kitörölhetetlenül
+kitörölhetõ
+kitúr
+kitûnik
+kitûnõ
+kitûnõ!
+kitûnõen
+kitûnõség
+kitûnõt
+kitûr
+kitûz
+kitûzés
+kitûzése
+kitûzõ
+kitûzött
+kitüntet
+kitüntetett
+kitünteti
+kitüntetik
+kitüntetés
+kitüntetések
+kitüntetéses
+kitüntetéssel
+kitüntetõ
+kitüremkedése
+kitüremlés
+kiugorva
+kiugraszt
+kiugrasztja
+kiugrik
+kiugrás
+kiugrása
+kiugró
+kiutal
+kiutalás
+kiutasít
+kiutasítás
+kiutazásra
+kiutál
+kiuzsoráz
+kiuzsorázás
+kivakar
+kivakol
+kivan
+kivarr
+kivasal
+kivehetõ
+kivehetõen
+kivel
+kiver
+kiverekszi
+kiveri
+kivert
+kiverte
+kiverése
+kivesz
+kiveszi
+kivet
+kivetett
+kiveti
+kivetkõzni
+kivette
+kivetés
+kivetít
+kivetítés
+kivetõ
+kivezet
+kivezetett
+kivezetés
+kivezetés-szigetelõ
+kivezetõ
+kivezényel
+kivezényli
+kiviharzik
+kivihetetlen
+kivihetõ
+kivilágosodik
+kivilágosodni
+kivilágít
+kivilágítatlan
+kivilágított
+kivilágítás
+kivinni
+kivirul
+kivisz
+kivitel
+kivitelez
+kivitelezés
+kivitelezõ
+kiviteli
+kivizsgál
+kivizsgálás
+kivon
+kivonat
+kivonatol
+kivonatolás
+kivonatos
+kivonatot
+kivonható
+kivonja
+kivont
+kivontatják
+kivonul
+kivonulás
+kivonva
+kivonás
+kivonásjel
+kivonó
+kivág
+kivágja
+kivágott
+kivágás
+kivágódik
+kivágódott
+kiváj
+kivájja
+kivájkál
+kivájt
+kivájás
+kiválaszt
+kiválaszthatóság
+kiválasztott
+kiválasztás
+kiválasztó
+kiválasztóképesség
+kiválasztórendszer
+kiválik
+kiválogat
+kiválogatja
+kiválogatott
+kiválogatás
+kivált
+kiválthatatlan
+kiváltja
+kiváltképp
+kiváltképpen
+kiváltott
+kiváltság
+kiváltságlevél
+kiváltságok
+kiváltás
+kiváltó
+kiváltógerenda
+kiválás
+kiváló
+kiválóak
+kiválóan
+kiválóbb
+kiválóság
+kiválóságai
+kivándorlás
+kivándorol
+kivár
+kivárja
+kivéd
+kivédés
+kivégez
+kivégzik
+kivégzés
+kivégzése
+kivégzõosztag
+kivénhedt
+kivés
+kivét
+kivétel
+kivétele
+kivételek
+kivételes
+kivételesen
+kivételezés
+kivétellel
+kivételt
+kivételével
+kivéve
+kivéve,
+kivív
+kizsaluz
+kizsaluzás
+kizsarol
+kizsigerel
+kizsigerelt
+kizsigerelés
+kizsákmányol
+kizsákmányolás
+kizuhan
+kizár
+kizárják
+kizárt
+kizárás
+kizárásos
+kizárására
+kizárásával
+kizáró
+kizáródott
+kizáródásos
+kizárólag
+kizárólagos
+kizárólagosan
+kizárólagosság
+kizökkent
+kizökkentett
+kizökkenés
+kizöldül
+kiábrándult
+kiábrándultság
+kiábrándulás
+kiábrándít
+kiábrándítás
+kiáll
+kiállja
+kiállva
+kiállás
+kiállása
+kiállású
+kiállít
+kiállítja
+kiállított
+kiállítás
+kiállítása
+kiállítási
+kiállítást
+kiállítású
+kiállító
+kiálló
+kiált
+kiáltoz
+kiáltozó
+kiáltva
+kiáltvány
+kiáltványt
+kiáltás
+kiáltásokat
+kiáltásokkal
+kiáltást
+kiáltó
+kiárad
+kiáradás
+kiáradása
+kiáradó
+kiáramlik
+kiáramlás
+kiáramlási
+kiáramló
+kiáraszt
+kiárusít
+kiárusítás
+kiárusítása
+kiárusító
+kiás
+kiásás
+kiátkozás
+kiáztat
+kiég
+kiéget
+kiégetett
+kiégeti
+kiégett
+kiégetés
+kiégés
+kiéhezett
+kiéhezettnek
+kiéhezettség
+kiéheztet
+kiékel
+kiékelõ
+kiékelõdik
+kiékelõdés
+kiélesít
+kiélesítés
+kiélez
+kiélezett
+kiélezés
+kiéli
+kiélvez
+kiépít
+kiépített
+kiér
+kiérdemel
+kiérdemelt
+kiérdemesül
+kiérdemesült
+kiérlelõdik
+kiértékel
+kiértékelés
+kiérzik
+kiír
+kiírja
+kiírt
+kiírás
+kiírása
+kiókumlál
+kiöblít
+kiöblítés
+kiöblösít
+kiöblösödés
+kiöblösödõ
+kiöklendett
+kiöklendezett
+kiöl
+kiöltözik
+kiöltözködik
+kiöltözködés
+kiöltöztet
+kiöltöztél
+kiöltözve
+kiöltözött
+kiöltözöttség
+kiömlik
+kiömlés
+kiömléses
+kiömlési
+kiömlõ
+kiömlõfokozat
+kiömlõnyílás
+kiönt
+kiönti
+kiöntés
+kiöntõ
+kiöntõcsõ
+kiöregedett
+kiöregszik
+kiözönlik
+kiújul
+kiújulás
+kiút
+kiûz
+kiûzése
+kiügyeskedik
+kiügyeskedése
+kiül
+kiüldöz
+kiültet
+kiürít
+kiürített
+kiüríti
+kiürítés
+kiürítése
+kiürül
+kiürült
+kiürülés
+kiüt
+kiütik
+kiütköznek
+kiütés
+kiütéses
+kiütõ
+kiütõs
+kiütötte
+klakszon
+klapancia
+klarinét
+klassz
+klassz!
+klasszikus
+klasszikusok
+klasszis
+klassziskülönbséggel
+klasszisokkal
+klasszist
+klastromi
+klausztrofóbia
+klaviatúra
+kleptomániás
+klerikális
+kliens
+klientéla
+klikk
+klikkjének
+klimaktérium
+klimaktériumos
+klimax
+klimaxos
+klimpíroz
+klimpírozás
+klinika
+klinikai
+klinker
+klinkertégla
+klipsz
+klisé
+klisékészítés
+klisékészítõ
+klisíroz
+klisírozás
+klorid
+klorofil
+klorofil-
+klorofiles
+klorofilszerû
+klorál
+klotyó
+klotûr
+klotûrt
+klozet
+klozett
+klub
+klubhelyiség
+klubház
+klubja
+klubtagságra
+klumpa
+klán
+klánjához
+klémor
+klérus
+klíma
+klímát
+klíringintézet
+klónoz
+klór
+klórbenzol
+klórozott
+klórzselatin
+koadjutor
+koaguláció
+koagulál
+koagulálás
+koala
+koalíció
+koalícióra
+koalíciós
+kobak
+kobalt
+kobold
+kobra
+kobzos
+koca
+koccanás
+koccint
+kocka
+kockacukor
+kockajáték
+kockakõ
+kockaszén
+kockavetés
+kockák
+kockákra
+kockán
+kockára
+kockás
+kockásan
+kockázat
+kockázatos
+kockázatosság
+kockázatot
+kockázatra
+kockázatát
+kockázik
+kockáztat
+kockáztatja
+kockáztatva
+kockáztatásával
+kockázás
+kocog
+kocogás
+kocsi
+kocsi-elõszólító
+kocsiba
+kocsibejárat
+kocsibuktató
+kocsicsatoló
+kocsielõtér
+kocsiemelõ
+kocsifelhajtó
+kocsiforduló
+kocsifékezõ
+kocsifüggöny
+kocsihajtó
+kocsija
+kocsijával
+kocsikapu
+kocsikerék
+kocsikázik
+kocsikázni
+kocsikázás
+kocsikísérõ
+kocsiláda
+kocsiló
+kocsin
+kocsioldal
+kocsira
+kocsirésze
+kocsirúd
+kocsis
+kocsisor
+kocsiszekrény
+kocsiszekrény-lakatos
+kocsiszerkezet
+kocsiszélességnyi
+kocsiszín
+kocsiszínbe
+kocsisülés
+kocsit
+kocsival
+kocsivesztegetés
+kocsivezetés
+kocsizik
+kocsizás
+kocsiátjáró
+kocsiút
+kocsiülés
+kocsma
+kocsmatöltelék
+kocsmába
+kocsmában
+kocsmáros
+kocsonya
+kocsonyaszerû
+kocsonyás
+kocsonyásodik
+kocsonyásodni
+kocsonyásít
+kocsány
+kocsányon
+kodifikálás
+kodácsol
+kodácsolás
+koedukációs
+koefficiens
+koffein
+koffeinmentes
+koffeinmentesít
+koffeintalanít
+koffer
+kohol
+koholmány
+koholt
+koholás
+koholó
+kohász
+kohászat
+kohászati
+kohézió
+kohézióképesség
+kohézióra
+kohéziós
+kohéziósan
+kohó
+kohómunkás
+kohósalak
+kokain
+kokainszedõ
+kokett
+kokettál
+kokilla
+kokillaedzés
+kokit
+kokott
+kokottban
+koksz
+koksz-szén
+kokszdara
+kokszkályha
+kokszol
+kokszolás
+kokszolódik
+kokszolódás
+kokszosodás
+kokszosít
+kokszosítás
+koktél
+koktélbár
+koktélkeverõ
+koktélparti
+koktélt
+kokárda
+kokárdás
+kokó
+kokós
+kolbász
+koldul
+koldulásból
+kolduló
+koldus
+koldusbotra
+koldustanya
+koldustetû
+kolera
+koleszterin
+kolibri
+kolkotar
+kollaboráns
+kollacionáló
+kollagén
+kollaterális
+kollegalitás
+kollegalitásról
+kollegák
+kollektivizmus
+kollektív
+kollektíva
+kolligátum
+kolloid
+kolloid-
+kollokviumok
+kollázs
+kollázs-készítõ
+kollázst
+kollégium
+kollégiumhoz
+kollégiumon
+kollégám
+kolomp
+kolompár
+kolonc
+koloncos
+kolonialista
+koloniál
+kolorádófenyõ
+kolosszeum
+kolosszális
+kolosszális!
+kolostor
+kolostorba
+kolostori
+kolumbárium
+kolumnás
+kolónia
+koma
+kombattáns
+kombi
+kombináció
+kombinált
+kombiné
+kombájn
+kombájnvezetõ
+komcsi
+komfort
+komika
+komikum
+komikus
+komikusan
+komisz
+komiszan
+komiszkenyér
+komiszság
+komló
+kommandó
+kommemoráció
+kommentál
+kommentár
+kommuna
+kommunikáció
+kommunikál
+kommunista
+kommunistaellenes
+kommunizmus
+kommunális
+kommutátor
+kommüniké
+komollyá
+komoly
+komoly?
+komolyabb
+komolyan
+komolyan!
+komolyra
+komolyság
+komolyságát
+komolytalan
+komolytalanság
+komolytalanul
+komor
+komoran
+komorna
+komornak
+komornyik
+komorrá
+komorság
+komp
+kompasz
+kompaundál
+kompendium
+kompenzációs
+kompenzál
+kompenzálás
+kompenzáló
+komphajó
+kompiláció
+kompkikötõ
+komplett
+komplex
+komplexus
+komplikál
+komplikált
+komplikáltan
+komponens
+komponál
+komposzt
+komposztál
+kompozit
+kompozíció
+kompozíció-
+kompressz
+kompresszibilitás
+kompresszor
+kompromisszum
+kompromisszumot
+kompromittál
+kompromittálja
+kompánia
+komál
+komédia
+komédia!
+komédiának
+komédiás
+komédiázó
+komód
+komótos
+komótosan
+konc
+koncedál
+koncentrikus
+koncentrikusság
+koncentráció
+koncentrációs
+koncentrál
+koncentrált
+koncentrálás
+koncentrátum
+koncert
+koncesszionárius
+koncesszió
+konda
+kondenzcsík
+kondenzedény
+kondenzor
+kondenzoros
+kondenzvíz
+kondenzáció
+kondenzál
+kondenzálás
+kondenzálódik
+kondenzátor
+kondi
+kondicionál
+kondicionálás
+kondiktancia
+kondoleál
+kondom
+kondor
+kondorkeselyû
+kondulás
+kondíció
+kondícióban
+konfekciós
+konfekcióáru
+konferanszié
+konferencia
+konferencián
+konferenciát
+konferenciázik
+konfetti
+konfirmált
+konfliktus
+konfliktusok
+konflis
+konformista
+konföderáció
+konfúzió
+konfúzus
+kong
+konga
+kongregáció
+kongregációja
+kongresszus
+kongresszusi
+kongás
+kongó
+kongótégla
+konjugált
+konjunktívusz
+konjunktúra
+konjunktúralovag
+konkordancia
+konkrét
+konkurencia
+konkurens
+konkurrens
+konkurál
+konkvisztádor
+konkáv
+konnektor
+konnektoraljzat
+konok
+konokság
+konokul
+konstans
+konstitúció
+konstrukció
+konstruktõr
+konstruál
+konstruáló
+konszenzus
+konszern
+konszolidál
+konszonáns
+kontaktlencse
+kontaktmásolat
+kontaktor
+kontemplative
+kontinens
+kontinensek
+kontinensen
+kontinensre
+kontinensrõl
+kontinentális
+kontingens
+kontingenslistán
+kontingentálás
+kontingentálása
+kontinuum
+kontra
+kontrabasszus
+kontrafals
+kontrafék
+kontrapunktista
+kontraszt
+kontrasztpép
+kontremin
+kontreminál
+kontreminõr
+kontrája
+kontrázik
+konty
+kontyba
+kontyvirág
+kontár
+kontárkodik
+kontárkodás
+kontárkodó
+kontármunka
+kontármunkát
+konténer
+konténerhajó
+kontúr
+kontúros
+kontúrrajzolás
+konvekció
+konvektor
+konvencionális
+konvenció
+konvenciók
+konvenciókhoz
+konvenciókra!
+konvergencia
+konvergens
+konvergál
+konvergáló
+konverter
+konvertibilis
+konvertál
+konvertálás
+konvex
+konvex-konkáv
+konviktus
+konvoj
+konyak
+konyha
+konyhabútorok
+konyhaedények
+konyhaeszközök
+konyhafelszerelés
+konyhafelszerelési
+konyhafelügyelõ
+konyhafõnök
+konyhahasználattal
+konyhai
+konyhakert
+konyhakerti
+konyhamalac
+konyhamûvészet
+konyhamûvészeti
+konyharuha
+konyhaszekrény
+konyhasó
+konyhája
+konyhára
+konyít
+konzerv
+konzerv-
+konzervativizmus
+konzervatív
+konzervdoboz
+konzervgyár
+konzervgyáros
+konzervgyártás
+konzervipar
+konzervnyitó
+konzervál
+konzervált
+konzerválás
+konzisztencia
+konzisztenciája
+konzol
+konzolgerenda
+konzolos
+konzorcium
+konzul
+konzulens
+konzultatív
+konzultáció
+konzultáló
+konzultáns
+konzumálás
+konzílium
+kooperációs
+kooperáló
+koordinál
+koordináta
+koordinátarendszer
+kopasz
+kopaszodó
+kopaszra
+kopaszság
+kopaszt
+kopj
+koplal
+koplaltat
+kopog
+kopognak
+kopogtak
+kopogtat
+kopogtatja
+kopogtatnak
+kopogtatsz
+kopogtatás
+kopogtatási
+kopogtató
+kopogás
+kopogása
+kopogásgátló
+kopogásmentes
+kopogó
+kopogós
+kopogózás
+kopoltyú
+kopoltyúfedõ
+kopoltyús
+koponya
+koponyadudor
+koponyatetõ
+koponyatetõi
+koponyája
+koporsó
+koporsója
+koporsóját
+koporsólepel
+koporsót
+koporsóvivõk
+kopott
+kopottas
+kopottság
+kopp
+koppantás
+koppint
+koppintás
+kopra
+kopsz
+koptat
+koptatja
+koptatott
+koptató
+koptatóanyag
+koptatógép
+kopula
+kopácsol
+kopár
+kopárság
+kopás
+kopása
+kopásvizsgálat
+kopásálló
+kopírozó
+kopírpapír
+kopó
+kopóval
+kor
+kora
+korabeli
+korai
+korall
+korallsziget
+korallszirt
+korallzátony
+koraszülés
+koraszülése
+koravén
+koravénen
+koraérett
+koraéretten
+koraérettség
+koraérés
+koraérõ
+korban
+korbáccsal
+korbács
+korbácsol
+korbácsolás
+korbácsoló
+korbácsütés
+korc
+korcba
+korcol
+korcs
+korcsolya
+korcsolyapálya
+korcsolyázik
+korcsolyázás
+korcsolyázó
+kordbársony
+kordit
+kordnadrág
+kordon
+kordonmûvelésû
+kordonnal
+kordában
+kordé
+koreai
+korelnök
+koreográfia
+koreográfiai
+koreográfiáját
+koreográfus
+korgás
+korhad
+korhadni
+korhadt
+korhadtság
+korhadás
+korhadó
+korhaszt
+korhasztó
+korhely
+korhelykedik
+korhelykedés
+korhol
+korholás
+korhû
+kori
+koriander
+koriandermag
+korinthuszi
+korlát
+korlátai
+korlátbáb
+korlátja
+korlátlan
+korlátlanul
+korlátok
+korlátolt
+korlátoltság
+korlátoszlop
+korlátoz
+korlátozatlan
+korlátozatlanul
+korlátozott
+korlátozottság
+korlátozza
+korlátozás
+korlátozások
+korlátozásokat
+korlátozó
+korlátozódik
+korlátpillér
+korláttal
+kormorán
+kormos
+kormosság
+kormoz
+kormozó
+kormány
+kormánya
+kormányalakítás
+kormányevezõ
+kormányfejrés
+kormányhivatal
+kormánykerék
+kormánykiadvány
+kormánylapát
+kormánylista
+kormánylista-tervezet
+kormánymû
+kormánynak
+kormányok
+kormányon
+kormányos
+kormányosmester
+kormányoz
+kormányozhatatlan
+kormányozható
+kormányozhatóság
+kormányozhatósági
+kormányozza
+kormányozódik
+kormánypálca
+kormánypárt
+kormányrendelet
+kormányrúd
+kormányszervek
+kormányszervezet
+kormánysörény
+kormányt
+kormánytagok
+kormányuszony
+kormányválság
+kormányzat
+kormányzott
+kormányzás
+kormányzó
+kormányzópárt
+kormányát
+korner
+kornerrúgás
+kornert
+kornyikál
+korog
+korom
+koromban
+koromfekete
+koromfesték
+koromfolt
+koromfoltot
+koromlenyomata
+koromszem
+koromsötét
+koron,
+korona
+koronabirtok
+koronafelhúzású
+koronagyarmat
+koronapárkányzat
+koronatanú
+koronauradalom
+koronaékszerek
+korong
+korongcsapda
+korongon
+koronája
+koronájának
+koronáját
+koronára
+koronás
+koronát
+koronáz
+koronázott
+koronázta
+koronázás
+koronázási
+koronázó
+koros
+korosodás
+korosodó
+korosztály
+korpa
+korpaszerû
+korporatív
+korpuszkula
+korpás
+korpát
+korral
+korrekt
+korrektor
+korrektori
+korrektség
+korrektúra
+korrektúra-olvasás
+korrektúrajel
+korrektúraolvasás
+korrektúraív
+korrektúrát
+korrektúrázik
+korrektúrázás
+korrektül
+korrelatív
+korreláció
+korrelációs
+korrepetitor
+korrepetál
+korrepetálás
+korrigál
+korrigálás
+korrodál
+korrodált
+korrodálódik
+korrozivitás
+korrozív
+korrumpáló
+korrupció
+korrupt
+korruptság
+korróziópont
+korróziót
+korszak
+korszaka
+korszakot
+korszellem
+korszerû
+korszerûség
+korszerûsít
+korszerûsített
+korszerûsítés
+korszerûtlen
+korszerûtlenség
+korszerûvé
+korsó
+kort
+kortalan
+kortes
+kortesbeszédet
+korteskedik
+korteskedés
+korteskörutat
+korty
+kortyint
+kortyokban
+kortyol
+kortyolgat
+kortyot
+kortyra
+kortárs
+kortévesztés
+kortévesztõ
+kortól
+korund
+korunkat
+korunkban
+korvett
+korvettkapitány
+korzó
+korzózik
+korzózás
+korában
+korábban
+korábbi
+korábbra
+korál
+korán
+korán?
+koráni
+korántsem
+korát
+korú
+kos
+kosara
+kosarak
+kosarat
+kosbor
+koslat
+koslatás
+kosz
+koszinusz
+koszlott
+koszorú
+koszorúba
+koszorúja
+koszorús
+koszorúval
+koszorúz
+koszorúzott
+koszos
+koszt
+kosztba
+kosztkamat
+kosztol
+koszton
+kosztosokat
+kosztot
+kosztpénz
+kosztra
+kosztüm
+kosztümkabát
+kosztümös
+kosár
+kosárfonás
+kosárka
+kosárkocsi
+kosárlabda
+kosáráru
+kotkodácsol
+kotlett
+kotlik
+kotlás
+kotló
+kotlós
+kotlóstyúk
+kotnyeles
+kotnyelesség
+koton
+kotor
+kotorász
+kotorászik
+kotorászás
+kotorék
+kotró
+kotróberendezés
+kotródj!
+kotrógép
+kotróháló
+kotrólapát
+kotróléc
+kotróserleg
+kotróvas
+kotróvödör
+kotta
+kottatartó
+kottaállvány
+kottát
+kotyog
+kotyogás
+kotyogó
+kotyvalék
+kotyvaszt
+kova
+kova-
+kovaföld
+kovakõ
+kovellin
+kovács
+kovácsfújtató
+kovácsmunka
+kovácsmûhely
+kovácsol
+kovácsolt
+kovácsolás
+kovácsoló
+kovácsreve
+kovácsszén
+kovácstûzhely
+kovás
+kovász
+kovásztalan
+kozmetika
+kozmetikai
+kozmetikus
+kozmikus
+kozmopolita
+kozmopolitikai
+kozmopolitizmus
+kozmosz
+kozmálva
+kozmás
+krach
+kraft
+krajcároskodik
+krajcároskodó
+krakkol
+krakéler
+krakélerkedik
+krall
+krallozás
+kramanc
+krampusz
+krampácsoló
+krapek
+kravátli
+kreativitás
+kreatív
+kreatúrája
+krecc
+kredenc
+krekk
+krematórium
+kreol
+kreozot
+kreozottal
+krepp
+krepp-papír
+kreppelt
+kreppnylon
+krepptalp
+kreton
+kretén
+krezol
+krikett
+krikettjátékos
+krikettkapu
+krikettlabda
+krikettpálcika
+krikettpálya
+krikettrács
+krimi
+kriminális
+krinolin
+kriogén
+kripta
+kriptaszerû
+kriptaszökevény
+kriptikus
+kripton
+kristallit
+kristály
+kristály-
+kristálycsíra
+kristálydetektor
+kristálydísz
+kristályfizika
+kristálygömb
+kristálygömbbõl
+kristályképzõdés
+kristályképzõdéstan
+kristálymérés
+kristályméréstan
+kristálynézõ
+kristályos
+kristályosodik
+kristályosodás
+kristályosodó
+kristályosít
+kristályosítható
+kristályosított
+kristályosítás
+kristályparaméter
+kristályrács
+kristályszemû
+kristályszerû
+kristályszóda
+kristálytan
+kristálytani
+kristálytiszta
+kristálytál
+kristályvizet
+kristályüveg
+krisztalloid
+kritika
+kritikai
+kritikus
+kritikusan
+kritikát
+kritikátlan
+kritizál
+kritizálását
+kritizáló
+kritérium
+krizantém
+krizokalk
+krokett
+krokettezik
+krokettkapu
+kroki
+krokodil
+kromatikus
+kromoszféra
+kromoszóma
+kronologikus
+kronológia
+kronométer
+krumpli
+krumplihámozó
+krumplihéj
+krumplipüré
+krumplit
+krumplival
+krupon
+kruponbõr
+krákog
+krákogás
+král
+kráter
+krédó
+krém
+krémes
+krémleves
+krémmé
+krémsajt
+kréta
+krétacsík
+krétakor
+krétakori
+krétakorszak
+krétarajz
+krétaszerû
+krétás
+krétával
+krétázott
+krízis
+krízisen
+króm
+krómacél
+krómkáliszulfát
+krómozott
+krómsav
+krómtimsó
+krómtrioxid
+krómvörös
+krónika
+krónikus
+krónikában
+krónikás
+krúda
+kubatúra
+kubikos
+kubikus
+kubista
+kubizmus
+kuckó
+kucorog
+kucsma
+kucséberzacskó
+kudarc
+kudarcba
+kudarcot
+kudarcra
+kufár
+kugli
+kuglibábu
+kuglizik
+kuglizó
+kujon
+kujtorog
+kuka
+kukac
+kukacok
+kukacos
+kuki
+kukkantás
+kukkol
+kukkoló
+kukorica
+kukoricacsuhé
+kukoricacsutka
+kukoricacsõ
+kukoricacsõtörõ-
+kukoricafosztás
+kukoricagóré
+kukoricahaj
+kukoricakása
+kukoricaliszt
+kukoricalisztbõl
+kukoricanadrág
+kukoricapehely
+kukoricapálinka
+kukoricaszemek
+kukoricaszár
+kukoricatermõ
+kukoricatábla
+kukoricaüszög
+kukoricát
+kukorékol
+kukorékolás
+kuksol
+kukta
+kuktafazék
+kuktáskodik
+kuktáskodó
+kukucskál
+kukucskálás
+kukucskáló
+kula
+kulacs
+kulccsal
+kulcs
+kulcs-
+kulcsa
+kulcscsont
+kulcsember
+kulcsipar
+kulcskarika
+kulcskészítés
+kulcslyuk
+kulcslyukon
+kulcslyukpajzs
+kulcsmásolás
+kulcsodat
+kulcsos
+kulcsot
+kulcspontok
+kulcspozíció
+kulcspozícióban
+kulcsra
+kulcstoll
+kulcsátadásos
+kuli
+kulipintyó
+kulissza
+kulisszatitkokat
+kulisszatologató
+kulisszák
+kulizik
+kullancs
+kullog
+kulminál
+kulminálás
+kulmináló
+kultivál
+kultiválás
+kultivátor
+kulturális
+kulturált
+kultusz
+kultúra
+kultúrnövény
+kultúrsmokk
+kultúrsznob
+kultúrálatlan
+kultúrával
+kulán
+kulázik
+kulázás
+kuncog
+kuncogás
+kuncogó
+kuncsaft
+kunkorodik
+kunszt
+kunyerál
+kunyhó
+kupa
+kupac
+kupadöntõ
+kupak
+kupakoló
+kupakos
+kupamérkõzés
+kupi
+kupica
+kupleráj
+kuplung
+kuplungol
+kuplungot
+kuplé
+kupola
+kupolakapcsolás
+kupolával
+kupon
+kuporog
+kuporogva
+kuprit
+kupán
+kupás
+kurafi
+kuratórium
+kurbarilfa
+kurbli
+kurblizik
+kurjantás
+kuro-sivo
+kurta
+kurtina
+kurtizán
+kurtán
+kurtán-furcsán
+kurtírozott
+kurtít
+kurtítja
+kurtított
+kurtózis
+kuruzslás
+kuruzslással
+kuruzsló
+kuruzsol
+kurva
+kurvahajcsár
+kurválkodik
+kurválkodás
+kurvás
+kurzor
+kurzora
+kurzus
+kurzív
+kurátor
+kushad
+kuss!
+kusza
+kuszaság
+kuszált
+kutasd
+kutasz
+kutat
+kutatja
+kutatott
+kutatva
+kutatás
+kutatási
+kutatások
+kutatásról
+kutatására
+kutató
+kutatóakna
+kutatóan
+kutatófúrás
+kutatóhorgony
+kutatóközpont
+kutatómunkát
+kutatószoba
+kutatóév
+kutter
+kutya
+kutya,
+kutya-
+kutyabárca
+kutyacápa
+kutyafaj
+kutyafalka
+kutyafogat
+kutyafuttában
+kutyafáját!
+kutyaféle
+kutyagol
+kutyagolva
+kutyagumit
+kutyaharapást
+kutyaházi!
+kutyaként
+kutyaszar
+kutyaszerû
+kutyaszorító
+kutyaszorítóban
+kutyaszánon
+kutyaszánutazás
+kutyaszíj
+kutyatenyészet
+kutyaélete
+kutyaól
+kutyaõrség
+kutyaúszás
+kutyus
+kutyuska
+kutyájának
+kutyák
+kutyákat
+kutyákkal
+kutyáknak
+kutyának
+kutyát
+kutyául
+kutyával
+kutyáé
+kuveros
+kuvik
+kuvikol
+kvadriplégia
+kvadrál
+kvadráns
+kvalifikálhatatlan
+kvantilis
+kvantitás
+kvantum
+kvantumelmélet
+kvantummechanika
+kvantummechanikai
+kvarc
+kvarcjáték
+kvarckavics
+kvarckristály
+kvarcóra
+kvark
+kvart
+kvartálás
+kvazár
+kvintesszencia
+kvinteszencia
+kvintett
+kvintszext
+kvittek
+kvártély
+kvártélyoz
+kvártélyozva
+kvártélyt
+kvéker
+kvóta
+kábel
+kábelakna
+kábelez
+kábelkés
+kábelrögzítõ
+kábelsaru
+kábelvezeték
+kábelvitlás
+kábelárok
+kábelér
+kábszer
+kábulat
+kábult
+kábultan
+kábultság
+kábultsággal
+kábít
+kábító
+kábítószer
+kábítószer-injekció
+kábítószer-kereskedõ
+kábítószer-pirula
+kábítószer-élvezõ
+kábítószerek
+kábítószeres
+kábítószerrel
+kábítószert
+kábítószerárus
+kábítószerárusok
+kád
+kádba
+kádban
+kádelõ
+káder
+káderezés
+kádfestékkel
+kádmedence
+kádnyi
+kádárgyalu
+káka
+kákán
+kálilúg
+káliszappan
+kálium-alumínium
+kálium-hidroxid
+kálium-karbonát
+káliumbioxalát
+káliumhipermangán
+káliumpermanganát
+káliumtetroxalát
+kálmos
+kálomista
+kálvária
+kálváriát
+kályha
+kályhacsõ
+kályhaellenzõ
+kályhaszelelõ
+kályhába
+kályhára
+káló
+káma
+kámfor
+kámzsa
+kámzsás
+kán
+kánaán
+káni
+kánikula
+kánikulai
+kánon
+kánont
+kánság
+kántor
+kántorböjt
+kántorböjti
+kántál
+kántálás
+kántáló
+kánya
+kányafa
+kányazsombor
+káosz
+káplán
+káplár
+kápolna
+káposzta
+káposztaföld
+káposztasaláta
+káposztát
+káprázat
+káprázatos
+káprázik
+káprázott
+kápráztató
+kápráztatóan
+káptalan
+káptalani
+kár
+kár!
+kár,
+kárba
+kárbecslõ
+káreset
+kárhozat
+kárhozatos
+kárhoztat
+kárhoztatott
+kárhoztatás
+kárhoztató
+kárhozzon
+kárigény
+kárminimum
+károd
+károg
+károgás
+károk
+káromkodik
+káromkodik,
+káromkodás
+káromkodó
+káromol
+káros
+károsan
+károsodás
+kárpit
+kárpitos
+kárpitosmunka
+kárpitoz
+kárpitozás
+kárpitszövet
+kárpitszövés
+kárpittal
+kárpótlás
+kárpótlásban
+kárpótlást
+kárpótol
+kárpótolja
+kárt
+kártalanít
+kártalanítják
+kártalanítás
+kártalanítási
+kártevõ
+kártol
+kártoló
+kártológép
+kártszalag
+kárttisztító
+kártya
+kártyaasztal
+kártyabarlang
+kártyacsomag
+kártyajárás
+kártyajáték
+kártyajáték-fajta
+kártyalap
+kártyalapok
+kártyaleosztás
+kártyamutatvány
+kártyaosztás
+kártyaosztó
+kártyapakli
+kártyasarkokat
+kártyavár
+kártyáit
+kártyák
+kártyákat
+kártyám
+kártyára
+kártyás
+kártyát
+kártyával
+kártyázik
+kártyázás
+kártyázó
+kártékony
+kártérítés
+kártérítési
+kártérítést
+kártétel
+kárán
+kárára
+kárát
+káró
+kárókatona
+kárörvendõ
+kárörvendõen
+kárörömmel
+kása
+kásás
+kását
+kátránnyal
+kátrány
+kátránykenõ
+kátránymakadám
+kátrányos
+kátrányoz
+kátrányozás
+kátránypapír
+kátránytartalmú
+kátyúba
+káté
+káva
+kávé
+kávébab
+kávébab-hántoló
+kávécserje
+kávédaráló
+kávéfõzõ
+kávéház
+kávékiöntõ
+kávépótló
+kávésbögre
+kávéscsésze
+kávéskancsó
+kávéskanál
+kávéskészlet
+kávészem
+kávét
+kávét,
+kávéval
+kávézó
+kégli
+kéj
+kéjadó
+kéjeleg
+kéjelgés
+kéjelgõ
+kéjenc
+kéjes
+kéjgáz
+kéjhajhász
+kéjnõ
+kéjsóvár
+kéjutazás
+kéjvágy
+kéjvágyó
+kéjvágyóan
+kéjérzet
+kéjérzést
+kék
+kék-zöld
+kékbetegségben
+kékcsóka
+kékebb
+kékes
+kékesszürke
+kékeszöld
+kékgáz
+kékkór
+kékkõoldat
+kéklõ
+kékpettyes
+kékpor
+kékporral
+kékre
+kékre-zöldre
+kékróka
+kéksav
+kékít
+kékítõ
+kél
+kém
+kémcsõ
+kémcsõtartó
+kémeim
+kémhatás
+kémia
+kémiai
+kémiaóra
+kémiája
+kémkedik
+kémkedõ
+kémlel
+kémlelés
+kémlelõ
+kémlelõablak
+kémlelõdik
+kémlelõnyílás
+kémlõ
+kémlõpapír
+kémény
+kéményben
+kéményfedõ-sapka
+kéményfej
+kéményjavító
+kéményseprõ
+kéménysisak
+kéménysor
+kéménytoldat
+kén
+kéne
+kénes
+kénes-
+kéneskõ
+kénessavas
+kénez
+kénezõ
+kénhidrogén
+kénkõ
+kénmentes
+kénsav
+kénvirág
+kényelem
+kényelembe
+kényelembe!
+kényelemben
+kényelemmel
+kényelmes
+kényelmesebb
+kényelmesen
+kényelmesség
+kényelmetlen
+kényelmetlenség
+kényelmetlenséget
+kényelmetlenül
+kényes
+kényesen
+kényeskedik
+kényeskedve
+kényeskedés
+kényeskedõ
+kényesség
+kényeztet
+kényeztetõ
+kényszer
+kényszerbõl
+kényszeredett
+kényszeredetten
+kényszeredettség
+kényszeregyezséget
+kényszerhelyzet
+kényszerhelyzetben
+kényszerhuzat
+kényszerkitelepít
+kényszerképzet
+kényszerképzetek
+kényszerképzetes
+kényszerleszállás
+kényszerleszállást
+kényszermunka
+kényszernek
+kényszerzubbony
+kényszerárfolyam
+kényszerít
+kényszerített
+kényszeríti
+kényszerítve
+kényszerítés
+kényszerítõ
+kényszerû
+kényszerûség
+kényszerül,
+kénytelen
+kénytelen-kelletlen
+kényének
+kényúr
+kép
+képaláírás
+képcsarnok
+képcsõ
+képcsöves
+képe
+képek
+képeket
+képekkel
+képellenõrzõ
+képen
+képernyõ
+képes
+képeslap
+képeslapból
+képesnek
+képessé
+képesség
+képessége
+képességeimet
+képességein
+képességeit
+képességek
+képességekkel
+képességtõl
+képességét
+képességû
+képest
+képest,
+képesít
+képesített
+képesítés
+képesítést
+képesítõ
+képesítõvizsga
+képet
+képez
+képezi
+képezik
+képezõ
+képfaragó
+képhullám
+képkeresõ
+képkocka
+képlet
+képletapogatás
+képletbe
+képletes
+képletesen
+képlékennyé
+képlékeny
+képlékenység
+képmezõ
+képmutatás
+képmutató
+képmás
+képmélység
+képpont
+képregény
+képrész
+képsor
+képsorozat
+képszalag
+képszöveg
+képtelen
+képtelenné
+képtelenség
+képtranszformálás
+képtranszformátor
+képtár
+képtávirat
+képtávirati
+képtáviratozás
+képtávíró
+képtávíró-
+képtávírón
+képvisel
+képviselet
+képviseleti
+képviseletében
+képviseltetve
+képviselõ
+képviselõ-választás
+képviselõfánk
+képviselõház
+képviselõházban
+képviselõházi
+képviselõi
+képviselõje
+képviselõjelölt
+képviselõjelöltet
+képviselõjelöltként
+képviselõnek
+képviselõnk
+képviselõtársam
+képviselõválasztás
+képviselõválasztáson
+képvisszafordító
+képzavar
+képzel
+képzeld
+képzelet
+képzeletbeli
+képzeletben
+képzeletbõl
+képzeletet
+képzeletszõtte
+képzeletének
+képzeletét
+képzelgés
+képzelgõ
+képzeli
+képzeli,
+képzelt
+képzelõ
+képzelõdés
+képzelõdõ
+képzelõerõ
+képzelõtehetség
+képzelõtehetsége
+képzelõtehetségét
+képzelõtehetségû
+képzet
+képzetes
+képzetlen
+képzetsor
+képzett
+képzettség
+képzettségû
+képzettársítás
+képzés
+képzése
+képzõ
+képzõdik
+képzõdmény
+képzõdés
+képzõelem
+képzõmûvészet
+képzõmûvészeti
+képátmenet
+képélesség
+képét
+képû
+kér
+kérdez
+kérdezett
+kérdezgetés
+kérdezze
+kérdezés
+kérdezõ
+kérdezõsködik
+kérdezõsködés
+kérdezõsködõ
+kérdés
+kérdésben
+kérdése
+kérdései
+kérdések
+kérdéseket
+kérdésekkel
+kérdésen
+kérdéses
+kérdésessé
+kérdéshez
+kérdésre
+kérdéssel
+kérdést
+kérdésében
+kérdésére
+kérdõ
+kérdõjel
+kérdõn
+kérdõre
+kérdõszó
+kérdõív
+kéredzkedik
+kéreg
+kéreget
+kéregetés
+kéregetõ
+kéreggel
+kéregként
+kéregállomány
+kérek
+kérek!
+kérelem
+kérelemkönyv
+kérelmet
+kérelmez
+kérelmezõ
+kérelmére
+kérem
+kérem!
+kérem,
+kérem?
+kéret
+kéretlen
+kéretlenül
+kéretve
+kérges
+kérgesedés
+kérgesség
+kérgét
+kérhetõ
+kéri
+kérik
+kérjük
+kérked
+kérkedik
+kérkedés
+kérkedõ
+kérkedõen
+kérlek
+kérlek!
+kérlel
+kérlelhetetlen
+kérlelhetetlenség
+kérlelhetetlenül
+kérned
+kérnem
+kérve
+kérve-kér
+kérvény
+kérvénybenyújtás
+kérvényezõ
+kérvényt
+kérés
+kérésekkel
+kérésre
+kérést
+kérész
+kérésére
+kérését
+kérõ
+kérõdzik
+kérõdzés
+kérõdzõ
+kés
+késedelem
+késedelembe
+késedelmes
+késedelmesen
+késedelmeskedés
+késedelmi
+kései
+késel
+késelés
+késes
+késhegyig
+késik
+késirányító
+késlekedik
+késlekedés
+késlekedõ
+késleltet
+késleltetett
+késlelteti
+késleltetés
+késleltetõ
+késsel
+kést
+késtartó
+késte
+késtámasz
+kész
+kész!
+kész,
+készakarva
+készen
+készenlét
+készenlétbe
+készenlétben
+készenléti
+készenlétre
+készlet
+készletek
+készleteken
+készleten
+készletet
+készletez
+készletezés
+készletezõ
+készletgyûjtés
+készletnek
+készletromlás
+készlettel
+készpénz
+készpénzfizetés
+készpénzfizetési
+készpénzjuttatás
+készpénzjáradék
+készpénzkassza
+készpénzre
+készpénztöbblet
+készpénzzé
+készpénzért
+készruha
+készruhát
+készség
+készséges
+készségesen
+készségesség
+készséggel
+késztet
+készteti
+késztetõ
+készáru
+készárupiac
+készáruügylet
+készít
+készített
+készítmény
+készítményû
+készítés
+készítése
+készítéséhez
+készítõ
+készül
+készületlenül
+készülni
+készülsz
+készült
+készültség
+készültségben
+készülve
+készülék
+készülékek
+készülékkel
+készülés
+készülõ
+készülõben
+készülõdik
+késél
+késélvégzõdés
+késés
+késõ
+késõbb
+késõbben
+késõbbi
+késõbbre
+késõi
+késõn
+késõn,
+késõre
+két
+két-
+kétajtós
+kétannyi
+kétbalkezes
+kétballábas
+kétbázisos
+kétcsöves
+kétcsövû
+kétcsúcsú
+kétdimenziós
+kételkedik
+kételkedsz
+kételkedve
+kételkedés
+kételkedõ
+kétes
+kétesen
+kétevezõs
+kétezer
+kétfedelû
+kétfejes
+kétfejû
+kétfelé
+kétfogatú
+kétféle
+kétférjû
+kétférjûség
+kétfókuszú
+kéthegyû
+kéthéjú
+kétirányú
+kétirányúvá
+kétivarú
+kétkagylós
+kétkar-lengõkalapács
+kétkedés
+kétkedéssel
+kétkedõ
+kétkedõen
+kétkerekû
+kétkezes
+kétkezi
+kétkulacsos
+kétkulacsosság
+kétkéses
+kétlakásos
+kétlem
+kétlem!
+kétlovas
+kétlábú
+kétnaponként
+kétnejû
+kétnejûség
+kétnemû
+kétnemûség
+kétnyelvû
+kétnyiratú
+kétoldalas
+kétoldali
+kétoldalt
+kétoldalú
+kétosztályos
+kétperces
+kétpárevezõs
+kétpólus
+kétpólusú
+kétrét
+kétrétû
+kétrétûre
+kétsarkú
+kétshillinges
+kétsoros
+kétszemélyes
+kétszer
+kétszeres
+kétszerese
+kétszeresen
+kétszeresét
+kétszeri
+kétszersült
+kétszersültje
+kétszobás
+kétszárnyú
+kétszínû
+kétszínûség
+kétszínûséget
+kétsávos
+kétség
+kétségbe
+kétségbeejtõ
+kétségbeejtõ,
+kétségbeejtõen
+kétségbeesett
+kétségbeesetten
+kétségbeesik
+kétségbeesés
+kétségbeesésbe
+kétségbeesésben
+kétségbeesésemet
+kétségbeesésemre
+kétségbeesésnek
+kétségbeeséstõl
+kétségben
+kétségbevonhatatlan
+kétségbevonhatatlanul
+kétségbevonható
+kétségbevonás
+kétségei
+kétséges
+kétségesség
+kétségkívül
+kétségnek
+kétségtelen
+kétségtelenség
+kétségtelenül
+kéttag
+kéttagú
+kétteknõs
+kéttollú
+kétujjú
+kétágyas
+kétágú
+kétárbocos
+kétéltû
+kétélû
+kétértelmû
+kétértelmûség
+kétértékû
+kétüléses
+kétütemû
+kéve
+kévekötõ
+kévébe
+kévékben
+kévéz
+kéz
+kézbe
+kézben
+kézbesít
+kézbesítendõ
+kézbesítetlen
+kézbesített
+kézbesíthetetlen
+kézbesítés
+kézbesítési
+kézbesítõ
+kézbilincs
+kézbõl
+kézcsukló
+kézelõ
+kézelõgomb
+kézelõgombok
+kézen
+kézen-közön
+kézenfekvõ
+kézenfogva
+kézenállás
+kézfej
+kézfogás
+kézfogó
+kézhez
+kézi
+kézibeszélõ
+kézidinamó
+kézifegyver
+kézifék
+kézifúró
+kézifûrésszel
+kézifûrész
+kézigránát
+kézigránáttal
+kézihajtás
+kézikocsi
+kézikönyv
+kézikönyvtár
+kézilabda
+kézilámpa
+kézimunka
+kézimunkaasztal
+kézimunkát
+kézimunkával
+kézimunkázik
+kézimérleg
+kézipoggyász
+kézirat
+kézirata
+kéziratot
+kézirattekercs
+kéziratát
+kézisajtó
+kéziszerszám
+kézisöprû
+kézitusába
+kézitusát
+kézitáska
+kézizáloggal
+kézjegy
+kézjel
+kézlegyintés
+kézmosó
+kézmozdulat
+kézmozdulattal
+kézmûves
+kézmûvesség
+kéznél
+kézpénzben
+kézre
+kézrázás
+kézrõl
+kézrõl-kézre
+kézszorítás
+kézszorítása
+kézzel
+kézzel-lábbal
+kézzelfogható
+kézzelfoghatóan
+kézzelfoghatóság
+kézápolás
+kézápoló
+kézírás
+kézírása
+kézöblítés
+kézöblítõ
+kézügyesség
+kígyó
+kígyócsomó
+kígyócsõ
+kígyóember
+kígyófarkú
+kígyógyökerû
+kígyógyökér
+kígyónyelvfû
+kígyórakás
+kígyóröppentyû
+kígyós
+kígyóshûtõ
+kígyószerû
+kígyót-békát
+kígyóvonalban
+kígyózik
+kígyózás
+kígyózó
+kímél
+kímélek
+kímélet
+kíméletesen
+kíméleti
+kíméletlen
+kíméletlenség
+kíméletlenül
+kíméli
+kímélni
+kín
+kínabor
+kínaezüst
+kínai
+kínban
+kínjait
+kínlódik
+kínokat
+kínos
+kínosan
+kínoz
+kínpad
+kínpadra
+kínszenvedés
+kínszenvedése
+kínvallatás
+kínzás
+kínzásoknak
+kínzásra
+kínzó
+kínzókamra
+kínál
+kínálat
+kínálkozik
+kínálkozó
+kínált
+kírnerez
+kísér
+kísérel
+kíséret
+kíséretében
+kísérget
+kíséri
+kísérjenek
+kísérlet
+kísérleteit
+kísérletet
+kísérletez
+kísérletezik
+kísérletezõ
+kísérleti
+kísérletileg
+kísérletre
+kísért
+kísértet
+kísértet-
+kísérteti
+kísérteties
+kísértetiesen
+kísértetiesség
+kísértetjárta
+kísértetszerû
+kísérthetõ
+kísérti
+kísértés
+kísértései
+kísértésnek
+kísértõ
+kísérõ
+kísérõbárca
+kísérõhajó
+kísérõk
+kísérõzene
+kíván
+kívánalom
+kívánalomnak
+kívánatos
+kívánatos,
+kívánatosnak
+kívánatosság
+kívánatra
+kíváncsi
+kíváncsi,
+kíváncsian
+kíváncsiskodik
+kíváncsiskodó
+kíváncsiság
+kíváncsiságból
+kíváncsiságot
+kíváncsiságtól
+kíváncsiságát
+kíváncsivá
+kívánja
+kívánjuk
+kívánkozó
+kívánni
+kívánok
+kívánok!
+kívánom!
+kívánom,
+kívánság
+kívánsága
+kívánságom,
+kívánságot
+kívánságának
+kívánságára
+kívánságát
+kívánt
+kívánunk
+kívánó
+kívül
+kívül-belül
+kívüli
+kívüliség
+kívülre
+kívülrõl
+kívülálló
+kóbor
+kóborlás
+kóborló
+kóborol
+kóc
+kóccal
+kóccsomó
+kócos
+kócosság
+kócot
+kócsag
+kócsagforgó
+kócsagtoll
+kód
+kódfejtés
+kódjel-átalakító
+kódmegoldó
+kódol
+kódoltjel-átalakító
+kódorgás
+kódorog
+kódtörés
+kókadozik
+kókadozás
+kókadt
+kókler
+kókusz
+kókuszdió
+kóla
+kólika
+kóma
+kópia
+kópé
+kópé!
+kópéskodik
+kópéság
+kór
+kóranyag
+kórbonctan
+kórboncterem
+kórház
+kórházba
+kórházhajó
+kórházi
+kórházigazgatás
+kórista
+kóristafiú
+kórjóslat
+kórlap
+kórmeghatározás
+kóros
+kórosan
+kórtan
+kórterem
+kórtermi
+kórus
+kórus-
+kórusban
+kórusegylet
+kórusmû
+kórustag
+kórusülés
+kóser
+kósernek
+kóstol
+kóstolgat
+kóstolgatás
+kóstoló
+kóstál
+kósza
+kószál
+kószálni
+kószálás
+kószáló
+kószálók
+kóter
+kótyagos
+kóvályog
+kõ-
+kõagyagáru
+kõalapozás
+kõboltozat
+kõbánya
+kõbányász
+kõbõl
+kõcsepp
+kõcsipkézet
+kõdaganat
+kõdarab
+kõdobásnyira
+kõedény
+kõepe
+kõfal
+kõfalazat
+kõfaragás
+kõfaragó
+kõfejtés
+kõfejtõ
+kõforgács
+kõfû
+kõgát
+kõhajítás
+kõhajításnyi
+kõhajításnyira
+kõhalom
+kõhányás
+kõkapocs
+kõkemény
+kõkocka
+kõkorszak
+kõkorszakbeli
+kõlap
+kõmag
+kõmarkoló
+kõmosott
+kõmûtét
+kõmûves
+kõmûves-saroglya
+kõmûveskanál
+kõmûvesmunka
+kõmûvesség
+kõnyomat
+kõnyomtatás
+kõnyomás
+kõolaj
+kõolajforrás
+kõolajtartály-telep
+kõpor
+kõr
+kõrajz
+kõrakás
+kõrbõl
+kõrecézõ
+kõris
+kõrisfa-
+kõrisfából
+kõszilánk
+kõszirt
+kõszén
+kõszénbánya
+kõszénmedence
+kõszénsáv
+kõszív
+kõszíve
+kõszívû
+kõszívûen
+kõszívûség
+kõszórás
+kõsó
+kõtöltés
+kõtömbbõl
+kõtörmelék
+kõtörmelékkel
+kõtörõ
+kõvel
+kõvé
+kõzet
+kõzetben
+kõzete
+kõzetek
+kõzetkihullás
+kõzetleválás
+kõzetrégió
+kõzetréteg
+kõzetrétegek
+kõzettörmelék
+kõzetágy
+kõzápor
+kõzúzalékkal
+kõzúzó
+kõépítménye
+köb
+köb-
+köbgyök
+köbláb
+köbmértékek
+köbre
+köbtartalmát
+köbtartalom
+köböz
+köbözés
+köcsög
+köcsögnyi
+köcsögszárító
+köd
+ködbe
+ködbomba
+ködfal
+ködfelhõ
+ködfolt
+ködfoltos
+ködfoltosság
+ködfoltszerû
+ködfátyol
+ködfüggöny
+ködkürt
+ködlámpa
+ködsziréna
+ködös
+ködösen
+ködösség
+ködösít
+ködösített
+ködösítés
+köhint
+köhintett
+köhintés
+köhintéssel
+köhécsel
+köhécselés
+köhög
+köhögés
+köhögésbe
+köhögésem
+köhögési
+köhögésoldó
+köhögéssel
+köhögök
+kökény
+kökörcsin
+kölcsön
+kölcsönad
+kölcsönadás
+kölcsönadó
+kölcsönbiztosíték
+kölcsönbérlet
+kölcsönhatás
+kölcsönkér
+kölcsönkönyvtár
+kölcsönszó
+kölcsönt
+kölcsöntartozás
+kölcsönvett
+kölcsönvevés
+kölcsönviszony
+kölcsönviszonyban
+kölcsönvétel
+kölcsönzés
+kölcsönzési
+kölcsönzõ
+kölcsönökbõl
+kölcsönös
+kölcsönösen
+kölcsönösség
+kölcsönöz
+kölcsönözhetõk
+köldök
+köldök-
+köldöke
+köldöki
+köldöksérv
+köldökzsinór
+köldököl
+köldökös
+köles
+kölesfajta
+kölni
+kölnisüveg
+kölnivíz
+költ
+költekezik
+költekezés
+költekezést
+költekezõ
+költemény
+költemények
+költeni
+költi
+költség
+költség-visszatérítés
+költségbe
+költsége
+költségei
+költségeim
+költségeit
+költségek
+költségekbe
+költségeket
+költségeket!
+költségektõl
+költségelõirányzat
+költségelõirányzatot
+költségemre
+költséges
+költségesen
+költséget
+költségjegyzék
+költségmentes
+költségmentesen
+költségre
+költségtérítés
+költségtétel
+költségtõl
+költségvetés
+költségvetési
+költségvetést
+költségén
+költségére
+költségét
+költés
+költési
+költészet
+költészetre
+költészettan
+költõ
+költõi
+költõiesség
+költõiség
+költõnõ
+költõpénz
+költõvé
+költött
+költözik
+költözködik
+költözködés
+költözés
+költözési
+költözõ
+kölykeit
+kölykezik
+kölykök
+kölyköt
+kölyök
+kölyökkutya
+kölyökészjárás
+kölök
+kölönc
+kölönce
+kölönte
+köménymag
+könny
+könnybelábadt
+könnyben
+könnycsepp
+könnycsepphez
+könnye
+könnyebb
+könnyebben
+könnyebbség
+könnyebbséget
+könnyebbé
+könnyebbít
+könnyebbül
+könnyed
+könnyedség
+könnyedséggel
+könnyedén
+könnyei
+könnyeit
+könnyek
+könnyekben
+könnyeket
+könnyekig
+könnyekre
+könnyektõl
+könnyelmû
+könnyelmûen
+könnyelmûség
+könnyen
+könnyes
+könnyezik
+könnyezve
+könnyezõ
+könnyfakasztó
+könnyfoltos
+könnyfû
+könnygáz
+könnygázgránát
+könnyzacskó
+könnyékkel
+könnyít
+könnyíts!
+könnyítés
+könnyítésül
+könnyû
+könnyû,
+könnyûbenzin
+könnyûbúvár
+könnyûbúvár-sport
+könnyûlovasság
+könnyûnek
+könnyûség
+könnyûtüzérség
+könnyûvérû
+könnyûvérûség
+köntörfalaz
+köntörfalazás
+köntörfalazó
+köntös
+könyv
+könyv?
+könyvaranyozó
+könyvbarát
+könyvbe
+könyvben
+könyvborító
+könyvbõl
+könyvdráma
+könyve
+könyvecske
+könyvek
+könyvekben
+könyveket
+könyvekkel
+könyvel
+könyvelés
+könyvelési
+könyvelõ
+könyvelõi
+könyvelõség
+könyvem
+könyvesbolt
+könyvespolc
+könyvet
+könyvgerinc
+könyvgyûjtõ
+könyvismertetést
+könyvjelzõ
+könyvkereskedelem
+könyvkereskedés
+könyvkereskedõ
+könyvkiadó
+könyvkiadói
+könyvklub
+könyvkötészet
+könyvkötõ
+könyvnyomdász
+könyvnyomtatás
+könyvre
+könyvszakértõ
+könyvszekrény
+könyvszeretet
+könyvtartozás
+könyvtok
+könyvtár
+könyvtárba
+könyvutalvány
+könyvvitel
+könyvvizsgálat
+könyvvizsgáló
+könyvvásár
+könyvégetés
+könyvön
+könyök
+könyökcsuklós
+könyökcsõ
+könyöke
+könyökemeltyû
+könyökemeltyûs
+könyökhajlat
+könyökidom
+könyökig
+könyökkel
+könyöklõ
+könyöklõfal
+könyöklõje
+könyökvédõ
+könyökét
+könyökével
+könyökízület
+könyököm
+könyökös
+könyökösre
+könyörgés
+könyörgési
+könyörgéssel
+könyörgõ
+könyörtelen
+könyörtelenség
+könyörtelenül
+könyörög
+könyörögve
+könyörület
+könyörületbõl
+könyörületes
+könyörületesen
+könyörületesség
+könyörületi
+könyörülettel
+könyörülj!
+köp
+köpcös
+köpd
+köpeny
+köpenye
+köpenyen
+köpenyes
+köpenyfeszítõ
+köpet
+köpettel
+köpi
+köpköd
+köpködve
+köpködés
+köpködõ
+köpni
+köptetõ
+köptetõszer
+köpés
+köpõcsésze
+köpõláda
+köpöly
+köpölyöz
+köpönyeg
+köpönyeget
+köpönyegforgatás
+köpönyegforgató
+köpû
+köpül
+köpülés
+köpülõ
+köpülõfa
+köpülõgép
+kör
+kör-
+körablak
+köralakúság
+körbe
+körbe-körbe
+körbead
+körbefordul
+körbefutás
+körbefutó
+körbejár
+körbemegy
+körben
+körbenforgás
+körberáncolt
+körcikk
+köre
+köret
+körfolyamat
+körfolyosó
+körfordulat
+körforgalom
+körforgás
+körforgásba
+körfûrész
+körgallér
+körgyalu
+körgyûrû
+körhagyó
+körhagyós
+körhinta
+körhintázik
+körintegrál
+körirat
+köriratos
+körjárat
+körjárati
+körkilátás
+körkép
+körképfestõ
+körképszerû
+körkörös
+körkörösség
+körlet
+körletrend
+körme
+körmenet
+körmenetben
+körmondat
+körmondatokban
+körmozgás
+körmozgása
+körmére
+körméret
+körmérkõzés
+körmérõl
+körmét
+körmönfont
+körmönfontan
+körmönfontság
+körmös
+körmöt
+körmû
+körnegyed
+körnegyedosztó
+környezet
+környezetbarát
+környezetgazdálkodás
+környezetvédõ
+környezetébe
+környezõ
+környék
+környéke
+környéki
+körpálya
+körszínház
+körszínházban
+körséta
+kört
+körte
+körtánc
+körtér
+körutat
+körutazás
+körutazást
+körutazó
+körvasút
+körvonal
+körvonalak
+körvonalakban
+körvonalas
+körvonalaz
+körvonalazza
+körvonalazás
+körvonalrajz
+körvonalú
+körzet
+körzeten
+körzetenként
+körzetet
+körzeti
+körzetvezetõ
+körzõ
+köré
+körébe
+körén
+körének
+körít
+körítés
+körív
+körök
+körökben
+körökre
+köröm
+köröm-lakklemosó
+körömbe
+körömepe
+körömfájás
+körömkefe
+körömkés
+körömlakk
+körömmel
+körömméreg
+körömreszelõ
+körömszakadtáig
+körömvirág
+körömágy-gyulladás
+körömápolás
+körömápoló
+körönd
+körös-körül
+köröz
+köröztek
+körözés
+körözõlevél
+körözött
+körút
+körúton
+körútra
+körû
+körül
+körülbelül
+körülbelüli
+körülcsavar
+körüldeszkázás
+körülfalazás
+körülfarag
+körülfog
+körülfogják
+körülfogás
+körülfon
+körülforgás
+körülgátol
+körülhajóz
+körülhatárol
+körülhatárolt
+körülhordoz
+körülhízeleg
+körüli
+körüljár
+körülkerít
+körülkerített
+körülkerítés
+körülkerüli
+körülmény
+körülmények
+körülményekbõl
+körülményekkel
+körülményektõl
+körülményes
+körülményesen
+körülményesség
+körülményre
+körülményt
+körülnyal
+körülnyes
+körülnyirbál
+körülnyír
+körülnéz
+körülnéztem,
+körülszaglász
+körülteker
+körültekint
+körültekintés
+körültekintõ
+körültekintõen
+körüludvarol
+körülutaz
+körülutazza
+körülvesz
+körülvett
+körülvevés
+körülvevõ
+körülvezet
+körülvág
+körülvágás
+körülvágó
+körülzár
+körülzárt
+körülzáró
+körülállványozott
+körülír
+körülírt
+körülírás
+körülíró
+körülölel
+körülötte
+körülöttünk
+körülövez
+kösd
+köszvény
+köszvénytõl
+köszön
+köszönet
+köszönet!
+köszönetet
+köszönetnyilvánítás
+köszönheted!
+köszönhette
+köszönhetõen
+köszönt
+köszönti
+köszöntés
+köszöntéssel
+köszönés
+köszönõ
+köszönöm
+köszönöm!
+köszönöm,
+köszörûkorong-egyengetõ
+köszörûkõ
+köszörûnek
+köszörûs
+köszörül
+köszörüli
+köszörülés
+köszörülõ
+köszörülõanyag
+köt
+kötbér
+köteg
+kötegbe
+kötegelt
+kötekedik
+kötekedve
+kötekedés
+kötekedõ
+kötekedõen
+kötekedõk
+kötele
+köteleirõl
+kötelekrõl
+kötelem
+köteles
+kötelesség
+kötelessége
+kötelességeit
+kötelességem
+kötelességemnek
+kötelességként
+kötelességmulasztás
+kötelességmulasztó
+kötelességszegés
+kötelességszerûen
+kötelességteljesítéstõl
+kötelességtudat
+kötelességtudó
+kötelességtudóan
+kötelességének
+kötelességét
+kötelet
+kötelez
+kötelezett
+kötelezettség
+kötelezettségeihez
+kötelezettségeinek
+kötelezettségek
+kötelezettségeket
+kötelezettségekkel
+kötelezettségektõl
+kötelezettséget
+kötelezettségvállalás
+kötelezettségének
+kötelezettségét
+kötelezi
+köteleztem
+kötelezve
+kötelezvény
+kötelezés
+kötelezõ
+kötelezõ!
+kötelezõvé
+kötelék
+kötelékek
+kötet
+kötetes
+kötetlen
+kötetlenség
+kötetlenül
+köthessen
+köti
+kötnivaló
+kötszer
+kötszövött
+kötve
+kötvény
+kötvények
+kötvényesített
+kötvénytartozás
+kötvénytulajdonos
+kötél
+kötélbak
+kötélbakhoz
+kötélbog
+kötélboggal
+kötélbújtatás
+kötélcsiga
+kötélcsigasor
+kötélcsisza
+kötélcsomó
+kötélcsomót
+kötélcsoportban
+kötéldarabkák
+kötéldob
+kötélen
+kötélfelszerelés
+kötélfogó
+kötélfogó-szeg
+kötélfogó-szeggel
+kötélfüge
+kötélgyártó
+kötélgyûrû
+kötélgömb
+kötélgörcs
+kötélhajtás
+kötélhez
+kötélhurok
+kötélhágcsó
+kötélhám
+kötélhúzás
+kötélkarika
+kötélkorong
+kötélkóc-seprû
+kötéllel
+kötélnek
+kötéloszlop
+kötélre
+kötélrögzítõ
+kötéltekercs
+kötéltoldás
+kötéltáncos
+kötéltárcsa
+kötélugrás
+kötélverõ
+kötélvég
+kötélvégek
+kötélzet
+kötélzettel
+kötény
+kötényruha
+kötés
+kötésben
+kötésgyorsító
+kötésidõ
+kötésmargó
+kötésnél)
+kötéssel
+kötést
+kötésterv
+kötésû
+kötõ
+kötõ-
+kötõanyag
+kötõanyaggal
+kötõdik
+kötõfonal
+kötõfék
+kötõfékkel
+kötõgerenda
+kötõgép
+kötõjel
+kötõjeles
+kötõjelet
+kötõjellel
+kötõlap
+kötõmód
+kötõnõ
+kötõoszlop
+kötõpont
+kötõszó
+kötõszövet-rák
+kötõtégla
+kötõtû
+kötõtûk
+kötõvas
+kötõív
+kötött
+kötöttség
+kötöttáru
+kötöttárukhoz
+kötöz
+kötözni
+kötözve
+kötözõ
+kötözõvesszõ
+köve
+kövecses
+kövek
+kövekbõl
+köveket
+köves
+kövesztett
+követ
+követel
+követelegyenleg
+követelhetõ
+követeli
+követelmény
+követelmények
+követelményeknek
+követelményként
+követelménynek
+követelt
+követelés
+követeléseiknek
+követeléseinek
+követeléseit
+követelések
+követelésekkel
+követeléssel
+követelést
+követeléséhez
+követelõ
+követelõdzés
+követelõdzõ
+követett
+követhetõ
+követi
+követi,
+követik
+következem!
+következetes
+következetesen
+következetesség
+következetlen
+következetlenség
+következik
+következik,
+következik?
+következménnyel
+következmény
+következménye
+következményeit
+következményeket
+következményekkel
+következni
+következtet
+következtetett
+következtethetõ
+következtetni
+következtetés
+következtetéseket
+következtetésképpen
+következtetést
+következtetõ
+következtében
+következés
+következésképpen
+következõ
+következõkben
+következõképpen
+követni
+követségi
+követte
+követték
+követve
+követés
+követési
+követõ
+követõen
+követõfelvételt
+követõit
+követõje
+követõk
+kövez
+kövezet
+kövezett
+kövezés
+kövezõ
+kövezõkocka
+kövér
+kövér,
+kövérje
+kövérkés
+kövérkésség
+kövérség
+kövön
+kövület
+köz
+köz-
+közadakozásból
+közalkalmazott
+közbeesik
+közbeesõ
+közbehelyez
+közbeiktat
+közbeiktatott
+közbeiktató
+közbejön
+közbejött
+közbejötte
+közbejövetel
+közbelép
+közbelépés
+közbelépõ
+közben
+közbeni
+közbenjár
+közbenjárás
+közbenjáró
+közbensõ
+közbeszéd
+közbeszól
+közbeszólás
+közbeszóló
+közbetelepült
+közbetelepülés
+közbetesz
+közbetold
+közbevet
+közbevetett
+közbeveti
+közbevetõleg
+közbevág
+közbeékelés
+közbirtokossági
+közbül
+közbülsõ
+közcél
+közdarab
+köze
+közeg
+közegészségügy
+közel
+közel-kelet
+közelbe
+közelben
+közelebb
+közelebbi
+közelebbrõl
+közeledem
+közeledett
+közeledik
+közeledni
+közeledte
+közeledtét
+közeledés
+közeledést
+közeledõ
+közeleg
+közelgõ
+közelharc
+közelharcot
+közeli
+közeliség
+közeljövõ
+közeljövõben
+közelkép
+közellenség
+közellátó
+közelrõl
+közelség
+közelségben
+közelségi
+közelálló
+közelébe
+közelébe!
+közelében
+közelít
+közelíteni
+közelíti
+közelítés
+közelítésre
+közelítõ
+közember
+közepe
+közepelés
+közepelõ
+közepes
+közepesen
+közepesnél
+közepesre
+közepesség
+közepette
+közepébe
+közepében
+közepén
+közepén)
+közfal
+közgazdaság
+közgazdasági
+közgazdaságtan
+közgyám
+közgyûlés
+közhasználatban
+közhasználatra
+közhasználatú
+közhasznú
+közhely
+közhelyek
+közhelyszerû
+közhivatalnok
+közhivatalt
+közháborítás
+közhír
+közhírré
+közigazgatás
+közigazgatási
+közirat
+közismert
+közismerten
+közismertté
+közjegyzõ
+közjegyzõi
+közjegyzõileg
+közjáték
+közjó
+közjólét
+közkapcsolat-szervezés
+közkatona
+közkatonából
+közkatonák
+közkedvelt
+közkegyelem
+közkeletû
+közkézen
+közkívánatra
+közkönyvtár
+közlegelõ
+közlegény
+közlegények
+közlekedik
+közlekedtet
+közlekedés
+közlekedési
+közlekedésre
+közlekedésrendészet
+közlekedést
+közlekedéstõl
+közlekedõ
+közlemény
+közli
+közlik
+közlékeny
+közlékenység
+közlés
+közlése
+közlésre
+közlésével
+közlétesítmény-hálózat
+közlõ
+közlõmû-tengely
+közlõmûtengely
+közlõtengely
+közlöm
+közlöny
+közmegbecsülés
+közmegvetés
+közmondás
+közmondásos
+közmunka
+közmunkaügyi
+közmû
+közmûhálózat
+közmûvek
+közmûvi
+köznapi
+köznapiság
+köznemesi
+köznemesség
+köznevetség
+köznyelv
+köznyelvi
+köznép
+köznépbõl
+köznév
+közoktatásügyi
+központ
+központban
+központi
+központifûtés-szerelõ
+központilag
+központjában
+központosul
+központosít
+központosítás
+központozás
+központtól
+központú
+közpénzek
+közraktári
+közrefog
+közremûködik
+közremûködés
+közremûködését
+közremûködõ
+közrend
+közrendet
+közrendészeti
+közrendõr
+közsegély
+közsegélyben
+közsegélybõl
+közsegélyhez
+közsegélyre
+közszellem
+közszemlére
+közszolgálat
+közszolgáltatási
+közszolgáltatások
+község
+községi
+községpolitika
+községpolitikai
+közsérelem
+közt
+köztartásban
+köztelekrész
+közterület
+közterületen
+köztes
+közti
+köztisztasági
+köztiszteletben
+köztisztviselõ
+köztisztviselõi
+köztudatban
+köztudomású
+köztudomásúvá
+köztulajdon
+köztulajdonban
+köztársaság
+köztársasági
+köztársaságpárti
+köztér
+köztünk
+közvetett
+közvetlen
+közvetlenség
+közvetlenül
+közvetve
+közvetít
+közvetíti
+közvetítés
+közvetítésével
+közvetítõ
+közvetítõi
+közvetítõje
+közvetítõállomás
+közvád
+közvádló
+közvélemény
+közvélemény-kutató
+közvéleménykutatás
+közvéleményt
+közzé
+közzétesz
+közzététel
+közé
+közé!
+közébe
+közélet
+közép
+közép-
+középarányos
+középcsatár
+középen
+középfedezet
+középfedélzet
+középfinom
+középfok
+középfokú
+középfül
+középfülgyulladás
+középgerenda
+középhullám
+középidõ
+középiskola
+középiskolai
+középkor
+középkori
+középkorias
+középkorú
+középmeleg
+középosztály
+középosztálybeli
+középosztályszerûség
+középpont
+középpont-meghatározás
+középpontba
+középpontja
+középpontjába
+középpontjában
+középpontos
+középpályás
+középpályások
+középre
+középrész
+középszerû
+középszerûség
+középsõ
+középsõujj
+középsúly
+középutat
+középvonal
+középvonalból
+középága
+középépület
+középérték
+középértékû
+középút
+középület
+középületek
+középütt
+közérdek
+közérdekbe
+közérdekû
+közérzet
+közöd
+közöl
+közölhetetlen
+közölhetõ
+közöljem
+közölni
+közölnöm
+közölt
+közöltetnie
+közömbös
+közömbösen
+közömbösség
+közömbösít
+közömbösítés
+közönség
+közönsége
+közönséges
+közönségesen
+közönségeshez
+közönségesség
+közönséggel
+közönségsiker
+közönségszolgálat
+közöny
+közönyös
+közönyösen
+közönyösség
+közös
+közösek
+közösen
+közösködik
+közösség
+közösségben
+közössége
+közösséghez
+közösségi
+közösül
+közösülés
+közösülési
+közösülõképes
+között
+között)
+közötti
+közöttük
+közöttünk
+közút
+közúti
+közük
+közül
+közülük
+közülünk
+közüzem
+kúp
+kúpfogaskerekes
+kúpfogaskerék
+kúpgörgõs
+kúpja
+kúpkerék
+kúpos
+kúposan
+kúposodás
+kúposság
+kúpostörõ
+kúpszeletek
+kúpvirág
+kúr
+kúra
+kúria
+kúrtaksa
+kúrál
+kúrás
+kúszik
+kúszva
+kúszás
+kúszó
+kúszóhere
+kúszómadár
+kúszónövény
+kúszóvas
+kút
+kútba
+kútfõ
+kútgém
+kútkoszorú
+kútmellvéd
+kútszerû
+kútszivattyúba
+kútvíz
+kútásó
+küklopsz
+kül-
+külalak
+külcsín
+küld
+küldd
+küldemény
+küldemények
+küldendõ
+küldetés
+küldi
+küldés
+küldése
+küldönc
+küldönccel
+küldönciroda
+küldött
+küldöttség
+küldözget
+küldözgetés
+küldözés
+küldünk
+külfejtés
+külfejtésû
+külfelszínre
+külföldi
+külföldies
+külföldre
+külföldrõl
+külföldön
+külhéjazata
+külkereskedelem
+külkereskedelmi
+külleme
+küllõ
+küllõkulcs
+küllõs
+külméretek
+külmûvelés
+külországi
+külpolitikánk
+külpontos
+külpontosság
+külseje
+külsejû
+külszín
+külszíni
+külsõ
+külsõleg
+külsõleg!
+külsõleges
+külsõség
+külsõségek
+külsõséget
+kültelek
+kültelki
+külterjes
+külterület
+külvilla
+külvilág
+külváros
+külvárosi
+külvárosiak
+külvárosias
+külön
+külön-külön
+különb
+különben
+különbet
+különbség
+különbséget
+különbségtétel
+különbözet
+különbözik
+különbözés
+különbözõ
+különbözõség
+különc
+különcködés
+különcség
+különféle
+különféleség
+különjárat
+különkiadás
+különleges
+különlegesen
+különlegesség
+különlegességek
+különszoba
+különterem
+különtudósító
+különtérítés
+különvonat
+különválaszt
+különválasztás
+különválik
+különváltan
+különválás
+különváló
+különvélemény
+különálló
+különállóan
+különélés
+különélési
+különítmény
+különös
+különös,
+különösebb
+különösen
+különösképp
+különösképpen
+különösség
+külügyminisztérium
+künn
+kürt
+kürtcsiga
+kürtjel
+kürtjelet
+kürtszava
+kürtszó
+kürtõ
+kürtõkalap
+kürtöl
+kürtös
+kürtöt
+küsz
+küszködik
+küszködve
+küszködés
+küszíni
+küszöb
+küszöbe
+küszöbfa
+küszöbén
+küszöbét
+küszöbét!
+küszöbön
+küszöbönálló
+küzd
+küzdelem
+küzdelembe
+küzdelemben
+küzdelemre
+küzdelmei
+küzdelmes
+küzdelmesen
+küzdelmet
+küzdeni
+küzdi
+küzdõ
+küzdõtere
+küzdõtér
+l'art
+labda
+labdacs
+labdafejelés
+labdajáték
+labdamenet
+labdarúgó
+labdaszedõ
+labdaátadás
+labdaütés
+labdaütõ
+labdát
+labdázik
+labilis
+labirintszerû
+labirintus
+labor
+laboratórium
+laborköpeny
+laborméretû
+laboráns
+ladik
+lagymatag
+lagúna
+lagúnát
+laikus
+lajhár
+lajhármedve
+lajstrom
+lajstromoz
+lajstromozás
+lajstromozási
+lak
+lakat
+lakatkengyel
+lakatlan
+lakatlanná
+lakatos
+lakatot
+lakatra
+lakatretesz
+lakberendezõ
+lakbér
+lakbérfizetés
+lakbérhátralék
+lakhatatlan
+lakható
+lakhely
+lakik
+lakk
+lakk-kence
+lakkal
+lakkbenzin
+lakkbõr
+lakklemosó
+lakkmunka
+lakkolit
+lakkoz
+lakkozott
+lakkozás
+lakkozó
+lakkréteg
+lakli
+lakmuszzuzmó
+lakmároz
+lakmározik
+lakmározás
+lakmározással
+lakmározó
+laknak
+lakodalmas
+lakodalmi
+lakodalom
+lakol
+lakoma
+lakomaasztal
+lakomán
+lakomát
+lakomázik
+lakomázás
+lakonikus
+lakonikusan
+lakos
+lakosság
+lakossága
+lakossági
+lakosztály
+lakott
+lakozik
+laktanyarend
+laktanyában
+laktató
+lakáj
+lakás
+lakásadó
+lakásban
+lakáscím
+lakáshiány
+lakásjegyzék
+lakáskulcs
+lakáskérdés
+lakásra
+lakással
+lakást
+lakástulajdonos
+lakásváltoztatás
+lakásába
+lakásán
+lakásépítkezési
+lakásépítés
+lakásépítõ
+lakó
+lakó-
+lakóautó
+lakócsónak
+lakóhely
+lakóház
+lakóháztömb
+lakóházépítõ
+lakója
+lakók
+lakókocsi
+lakónegyed
+lakónegyede
+lakópavilon
+lakótelep
+lakótelepek
+lakóterület
+lakótárs
+lakótér
+lambéria
+lamentáció
+lamentál
+lamentálás
+lamináris
+lamúr
+lancasteri
+landol
+langaléta
+languszta
+langymeleg
+langymelegség
+langyos
+langyosság
+lankad
+lankadatlanul
+lankadt
+lankadtság
+lankadás
+lankás
+lanolin
+lant
+lantmadár
+lanton
+lantos
+lantot
+lanyha
+lanyhaság
+lanyhul
+lanyhulás
+laoszi
+lap
+lapicka
+lapis
+lapja
+lapjait)
+lapján
+lapjára
+lapjárás
+lapját
+lapjával
+lapka
+lapkivágat
+lapközpontos
+lapocka
+lapockacsont
+lapockacsontok
+lapogatás
+lapok
+lapokat
+lapokból
+lapokra
+lapol
+lapolás
+lapolással
+lapolású
+lapom
+lapon
+lapos
+laposakat
+laposan
+laposfogó
+laposhal
+laposra
+laposszárú
+laposság
+lapostetû
+lapostányér
+laposít
+lapot
+lapoz
+lapozgat
+lapozgatás
+lapozás
+lappal
+lappang
+lappangás
+lappangási
+lappangó
+lappéldány
+lapra
+laprugó
+lapszámmal
+lapszámoz
+lapszél
+lapszélen
+lapszéli
+lapszög
+lapterjesztõ
+lapul
+lapzárta
+lapály
+lapát
+lapátja
+lapátkerekes
+lapátkerék
+lapátkezû
+lapátnyi
+lapátol
+lapátolás
+lapátoló
+lapáton
+lapátos
+lapátot
+lapátra
+lapáttal
+lapít
+lapított
+lapú
+lassacskán
+lassan
+lassan!
+lassanként
+lassul
+lassulás
+lasszó
+lasszóval
+lassít
+lassítani
+lassítja
+lassított
+lassíts!
+lassítva
+lassítás
+lassító
+lassú
+lassúbb
+lassúság
+laszkár
+laszt
+lasztex
+latba
+latens
+laterit
+laterna
+laterális
+latin
+latin-amerikai
+latolgat
+latolgatás
+latrina
+latyak
+latyakos
+latyaktól
+laureátus
+lavina
+lavinafogó
+lavíroz
+lavírozva
+lavírozás
+lavírozásnál
+laza
+lazac
+lazacfajta
+lazaclépcsõ
+lazacvarsa
+lazaság
+lazsál
+lazsálás
+lazsáló
+lazul
+lazuli
+lazulás
+lazurit
+lazán
+lazára
+lazít
+lazítás
+lazítószer
+le!
+le,
+le-
+le-lemarad
+lead
+leadja
+leadott
+leadás
+leadást
+leadó
+leakaszt
+lealacsonyodik
+lealacsonyodás
+lealacsonyít
+lealacsonyítja
+lealacsonyítás
+lealacsonyító
+lealjasodás
+lealjasít
+lealjasítás
+lealkonyult
+lealkuszik
+lealáz
+lealázza
+lealázás
+lealázó
+leapad
+leapaszt
+learat
+lebaltáz
+lebarnult
+lebarnít
+lebecsmérel
+lebecsül
+lebecsülés
+lebecsülõ
+lebeg
+lebegtet
+lebegtetés
+lebegve
+lebegés
+lebegési
+lebegõ
+lebegõkõ
+lebeny
+lebenyes
+lebernyeg
+lebeszél
+lebeszélés
+lebetegedés
+lebetegszik
+lebetûzés
+lebilincselõ
+lebiztosít
+leblokkol
+lebocsát
+lebocsátás
+lebombáz
+lebomlás
+lebont
+lebontja
+lebontás
+lebonyolít
+lebonyolítás
+lebonyolítási
+leborotvált
+leborult
+lebuj
+lebukik
+lebukott
+lebuktat
+lebukás
+lebzsel
+lebélyegez
+lebélyegzett
+lebélyegzés
+lebír
+lecke
+leckeoldal
+leckét
+lecsap
+lecsapható
+lecsapja
+lecsapol
+lecsapolás
+lecsapoló
+lecsapott
+lecsappant
+lecsapta
+lecsapás
+lecsapó
+lecsapódik
+lecsapódás
+lecsatol
+lecsavar
+lecsavarható
+lecsavarodik
+lecsavart
+lecsendesedik
+lecsendesedés
+lecsendesít
+lecsendesíti
+lecsendesítés
+lecsendesül
+lecsenget
+lecsepegés
+lecserél
+lecsillapodik
+lecsillapodás
+lecsillapul
+lecsillapulás
+lecsillapít
+lecsillapítja
+lecsillapítás
+lecsillapításra
+lecsiszol
+lecsonkol
+lecsordul
+lecsuk
+lecsupaszít
+lecsurgás
+lecsutakol
+lecsutkáz
+lecsíp
+lecsöndesítés
+lecsúszik
+lecsúszott
+lecsúszva
+lecsúszás
+lecsüng
+lecsüngõ
+lecövekel
+ledarál
+ledarálja
+lednek
+ledob
+ledobja
+ledobott
+ledolgoz
+ledorongol
+ledorongolás
+ledorongoló
+ledrótozott
+ledurrant
+ledér
+ledózerol
+ledõl
+ledöbbent
+ledöf
+ledöglik
+ledöngöl
+ledöngölt
+ledönt
+ledörgölõdik
+ledörzsöl
+ledörzsölés
+ledörzsölõ
+ledörzsölõdik
+ledörzsölõdés
+leegyszerûsít
+leegyszerûsített
+leejt
+leelõlegez
+leemel
+leendõ
+leenged
+leengedett
+leengedi
+leengedtek
+leengedés
+leengedése
+leereszkedik
+leereszkedés
+leereszkedõ
+leereszkedõen
+leereszt
+leeresztett
+leereszti
+leeresztés
+leeresztése
+leeresztõcsap
+leerõsít
+leesett
+leesik
+leesés
+lefagyaszt
+lefarag
+lefaragja
+lefaragás
+lefattyaz
+lefedett
+lefedez
+lefedése
+lefegyverez
+lefegyverzés
+lefegyverzõ
+lefejez
+lefejezés
+lefejt
+lefejtõ
+lefekszik
+lefektet
+lefektetett
+lefekteti
+lefekvés
+lefeküdni
+lefeküdtem
+lefelé
+lefelé!
+lefest
+lefestették
+lefestés
+lefestõdik
+leffentyû
+lefirkant
+lefitymál
+lefizet
+lefog
+lefogja
+lefoglal
+lefoglalja
+lefoglalt
+lefoglalás
+lefoglalási
+lefoglalóz
+lefogy
+lefogyaszt
+lefogyott
+lefogás
+lefogó
+lefojt
+lefokoz
+lefokozás
+lefolyik
+lefolytat
+lefolyás
+lefolyású
+lefolyó
+lefolyócsõ
+lefolyólyuk
+lefordít
+lefordítható
+lefordított
+leforráz
+leforrázás
+lefoszlás
+lefoszt
+lefosztás
+lefricskáz
+lefut
+lefutás
+lefutása
+lefutó
+lefutókötél
+lefátyoloz
+lefékez
+lefényképez
+lefõz
+lefölöz
+lefölözés
+lefölözõ
+lefölözött
+lefúj
+lefújása
+lefúvat
+lefúvatás
+lefúvató
+lefûrészel
+lefûz
+lefüggönyöz
+lefülel
+lefülelte
+legalacsonyabb
+legalitás
+legalkalmasabbak
+legallyaz
+legalsó
+legalul
+legaluli
+legalulra
+legalább
+legalábbis
+legazemberez
+legbelsõ
+legcsekélyebb
+legderekabb
+legdivatosabb
+legegyszerûbb
+legel
+legeldugottabb
+legelején
+legelni
+legelnyomottabb
+legelsõ
+legelsõnek
+legelsõsorban
+legeltet
+legeltetési
+legelõ
+legelõkelõbb
+legelõnyösebb
+legelõnyösebben
+legelöl
+legenda
+legendagyûjtemény
+legendák
+legendás
+legerjesztés
+legerõsebbek
+legeslegjobb
+legfeljebb
+legfelkapottabb
+legfelsõ
+legfelsõbb
+legfelül
+legfinomabb
+legfontosabb
+legfrissebb
+legfényesebb
+legfõbb
+legfõként
+legfõképp
+legfõképpen
+leggazdagabbak
+leggyorsabban
+leghaladóbb
+leghatározottabb
+leghatározottabban
+leghosszabb
+leghosszabban
+leghátul
+legidõsebb
+leginkább
+legionárius
+legitimista
+legitimitás
+legitimizmus
+legjava
+legjavát
+legjelentéktelenebb
+legjobb
+legjobb!
+legjobbak
+legjobbakat
+legjobban
+legjobbnak
+legkedvesebb
+legkedvezõbb
+legkeletebbre
+legkeletibb
+legkeményebb
+legkevesebb
+legkevésbé
+legkisebb
+legkiválóbb
+legkésõbb
+legkésõbben
+legkönnyebb
+legközelebb
+legközelebbi
+legkülsõ
+legkülönb
+leglassabban
+leglényegesebb
+legmagasabb
+legmegrögzöttebb
+legmesszebbmenõ
+legmodernebb
+legmulatságosabb
+legmélyebb
+legnagyobb
+legnyugatibb
+legokosabb
+legombolható
+legombolyodik
+legombolyodott
+legombolyít
+legombolyítás
+legrosszabb
+legrosszabbra
+legrosszabbtól
+legrosszabbul
+legrövidebb
+legszebb
+legszerényebb
+legszigorúbb
+legszorosabb
+legszélesebb
+legszélsõ
+legszükségesebbek
+legsötétebb
+legteljesebb
+legteljesebben
+legtetején
+legtávolabb
+legtávolabbi
+legtávolabbra
+legtöbb
+legtöbbet
+legtökéletesebb
+leguggol
+legurul
+legurít
+legutolsó
+legutóbb
+legutóbbi
+legvastagabb
+legvégsõ
+legvégsõkig
+legvégéig
+legvégén
+legyalul
+legyalulás
+legyek
+legyek,
+legyen
+legyen!
+legyen?
+legyenek
+legyengít
+legyengítés
+legyengítõ
+legyengül
+legyengült
+legyengülés
+legyeskedik
+legyeskedés
+legyet
+legyez
+legyezget
+legyezgeti
+legyezi
+legyezõ
+legyezõs
+legyezõszerûen
+legyintés
+legyintéssel
+legyõz
+legyõzetés
+legyõzhetetlen
+legyõzhetetlenség
+legyõzhetõ
+legyõzi
+legyõzik
+legyõztetés
+legyõzés
+legyõzött
+legyöngít
+legyûr
+legyûrhetõ
+legyûri
+legyünk
+legális
+legázol
+legázosítás
+legázosító
+legény
+legények
+legényke
+legénylakás
+legénység
+legénysége
+legénységet
+legénységgel
+legénységi
+legényéletet
+legömbölyít
+legömbölyített
+legöngyölít
+legöngyölõdik
+legörbít
+legörbül
+legördül
+legördült
+legújabb
+lehagy
+lehagyja
+lehagyják
+lehajlik
+lehajlás
+lehajlít
+lehajlítható
+lehajló
+lehajol
+lehajt
+lehajtania
+lehajtható
+lehajtott
+lehajtás
+lehajtósáv
+lehalkít
+lehallgat
+lehallgatja
+lehallgatott
+lehallgatás
+lehallgató
+lehallgató-készülék
+lehallgatója
+lehallgatókészülék
+lehallgatókészüléket
+lehangol
+lehangolja
+lehangolt
+lehangoltan
+lehangoltnak
+lehangoltság
+lehangoló
+lehangolóan
+lehanyatlik
+lehanyatló
+lehanyatlóban
+leharap
+lehasad
+lehasít
+lehasított
+lehatárolás
+lehel
+lehelet
+leheletnyi
+leheletszerû
+leheletszerûen
+leheletvékony
+leheletéig
+lehelyez
+lehengerel
+lehervad
+lehet
+lehetetlen
+lehetetlen!
+lehetetlenné
+lehetetlenre
+lehetetlenség
+lehetetlenül
+lehetett
+lehetne
+lehetnék
+lehetnék!
+lehetsz
+lehetséges
+lehetséges?
+lehetségesen
+lehetõ
+lehetõség
+lehetõsége
+lehetõségeit
+lehetõségek
+lehetõségeken
+lehetõségeket
+lehetõségen
+lehetõséget
+lehetõséggel
+lehetõséghez
+lehetõségére
+lehetõt
+lehetõvé
+leheveredik
+lehiggad
+lehiggadás
+lehord
+lehordják
+lehordott
+lehordás
+lehorgaszt
+lehorgasztja
+lehorgonyoz
+lehorgonyzás
+lehorzsol
+lehorzsolja
+lehorzsolt
+lehorzsolódik
+lehoz
+lehozat
+lehull
+lehullott
+lehullás
+lehulló
+lehunyás
+lehuppan
+lehurrog
+lehurrogás
+lehuzatot
+lehámlik
+lehámlás
+lehámló
+lehámoz
+lehámozott
+lehámozás
+lehánt
+lehántja
+lehántol
+lehántolt
+lehántolás
+lehántolása
+lehántás
+lehány
+lehéjaz
+lehív
+lehívat
+lehörpint
+lehörpintett
+lehúsol
+lehúz
+lehúzza
+lehúzás
+lehúzása
+lehúzó
+lehúzódik
+lehúzódás
+lehúzókép
+lehûl
+lehûlés
+lehût
+lehûti
+lehûtés
+lehûtéssel
+leigáz
+leigázható
+leigázott
+leigázottság
+leigázás
+leint
+leitat
+lejegyez
+lejjebb
+lejmol
+lejmoló
+lejt
+lejtés
+lejtése
+lejtésû
+lejtõ
+lejtõirány
+lejtõs
+lejtõsen
+lejtõssé
+lejtõsség
+lejtõsödik
+lejtõsödõ
+lejtõvasút
+lejár
+lejárat
+lejáratja
+lejáratú
+lejárja
+lejárt
+lejárt!
+lejárta
+lejáró
+lejárók
+lejárónyílás
+lejátszható
+lejátszik
+lejátszás
+lejátszása
+lejátszásához
+lejátszódik
+lejátszófej
+lejön
+lekap
+lekapar
+lekaparás
+lekapcsol
+lekapcsolás
+lekapcsolási
+lekapják
+lekapása
+lekaszabol
+lekaszál
+lekaszált
+lekefél
+leken
+lekenyerezés
+lekerekít
+lekerekített
+lekezel
+lekezelõ
+lekicsinyel
+lekicsinylés
+lekicsinylõ
+lekonyul
+lekonyulás
+lekonyít
+lekopaszt
+lekopasztott
+lekopaszít
+lekopaszított
+lekopik
+lekopog
+lekopogni!
+lekopott
+lekoptat
+lekopás
+lekozmál
+lekritizál
+lektor
+lektorság
+lektorál
+lektorátus
+lekucorodik
+lekuporodik
+lekuporodás
+lekvár
+lekváros
+lekáderez
+lekászálódik
+lekér
+lekérgez
+lekésett
+lekési
+lekésik
+lekéste
+lekísér
+lekókad
+leköp
+leköröz
+leköszön
+leköszönés
+leköt
+lekötelez
+lekötelezett
+lekötelezettje
+lekötelezettség
+lekötelezés
+lekötelezõ
+lekötelezõen
+leköti
+lekötni
+lekötés
+lekötõ
+lekötött
+lekötözi
+leküzd
+leküzdhetetlen
+leküzdhetõ
+leküzdhetõség
+leküzdésére
+lel
+lelassul
+lelassulás
+lelassít
+lelassítja
+lelegel
+lelegelt
+lelejmol
+lelemény
+leleményes
+leleményesség
+leleményességet
+lelenc
+lelencek
+lelencház
+leleplez
+leleplezi
+leleplezés
+leleplezõ
+leleplezõdik
+lelet
+leli
+lelke
+lelked?
+lelkendezik
+lelkendezés
+lelkes
+lelkesedik
+lelkesedni
+lelkesedés
+lelkesedést
+lelkesedését
+lelkesen
+lelkesít
+lelkesítõ
+lelkesültség
+lelkesültté
+lelket
+lelki
+lelkiatya
+lelkibeteg
+lelkierõ
+lelkifurdalás
+lelkigyakorlat
+lelkiismeret
+lelkiismeret-furdalás
+lelkiismeret-vizsgálat
+lelkiismeret-vizsgálatot
+lelkiismerete
+lelkiismeretes
+lelkiismeretesen
+lelkiismeretesség
+lelkiismeretfurdalás
+lelkiismeretfurdalási
+lelkiismereti
+lelkiismeretlen
+lelkiismeretlenség
+lelkiismeretlenül
+lelkiismerettel
+lelkiismeretével
+lelkileg
+lelkipásztor
+lelkipásztorkodás
+lelkiállapot
+lelkébe
+lelkében
+lelkén
+lelkének
+lelkére
+lelkész
+lelkészi
+lelkészkedés
+lelkészlakás
+lelkét
+lelkû
+lelkület
+lelleg
+lelocsolás
+lelohad
+lelohadás
+lelohaszt
+lelohasztja
+lelt?
+lelte?
+leltár
+leltári
+leltároz
+leltározás
+lelátó
+lelécel
+lelép
+leléptet
+lelépés
+lelépõ
+lelóg
+lelógás
+lelógó
+lelõ
+lelõhely
+lelök
+lelöki
+lelövés
+lelövöldöz
+lemarad
+lemaradozik
+lemaradt
+lemaradva
+lemaradás
+lemaradását
+lemarat
+lemaratás
+lemegy
+lemenõ
+lemerít
+lemerítés
+lemerül
+lemerülés
+lemetsz
+lemetszett
+lemetszés
+lemez
+lemezborító
+lemezburkolat
+lemeze
+lemezekre
+lemezekrõl
+lemezel
+lemezelt
+lemezelés
+lemezes
+lemezipari
+lemezjátszó
+lemezjátszós
+lemezke
+lemezlakatos
+lemezrõl
+lemezsor
+lemeztelenít
+lemezvágó
+lemezzel
+lemezöntvényt
+lemezöntésû
+leminõsít
+lemond
+lemondat
+lemondtak
+lemondás
+lemondó
+lemondóan
+lemondólevél
+lemorzsolódik
+lemorzsolódott
+lemorzsolódás
+lemos
+lemosás
+lemunkál
+lemágnesez
+lemágnesezés
+lemágnesezõ
+lemágnesezõdik
+lemállik
+lemásol
+lemásolás
+lemászik
+lemér
+leméreti
+leméri
+lemért
+lemérés
+lemészárlás
+lemészárol
+len
+len-
+lenanyag
+lencse
+lencserendszer-készlet
+lencsés
+lendkerék
+lendkerékkorlát
+lendít
+lendítés
+lendítõerõ
+lendítõkerék
+lendül
+lendület
+lendületbe
+lendületben
+lendületes
+lendületesen
+lendületet
+lendülettel
+lendülettelen
+lendületvétel
+lendületû
+lendülés
+lenfonal
+leng
+lengedez
+lenget
+lengetés
+lengyel
+lengés
+lengéscsillapító
+lengése
+lengésmérõ
+lengésszabályozó
+lengéstágasság
+lengõ
+lengõajtó
+lengõcsapágy
+lengõcsúszda
+lengõfûrész
+lengõkar
+lengõrész
+lengõállvány
+lengõíves
+lenipar
+lenkóc
+lenmag
+lenmagliszt
+lenmaglisztes
+lenn
+lenne
+lenne,
+lenned
+lennem
+lenni
+lenni,
+lennie
+lennék
+lenolaj
+lenolajkence
+lenpozdorja
+lenszõke
+lent
+lenti
+lenulláz
+lenvászon
+lenyakaz
+lenyakazás
+lenyal
+lenyalja
+lenyel
+lenyeli
+lenyelés
+lenyes
+lenyisszant
+lenyom
+lenyomat
+lenyomatot
+lenyomja
+lenyomott
+lenyomoz
+lenyomtat
+lenyugszik
+lenyugvás
+lenyugvó
+lenyír
+lenyíratja
+lenyírt
+lenyírás
+lenyúl
+lenyúlik
+lenyúz
+lenyúzott
+lenyúzza
+lenyúzás
+lenyû
+lenyûgöz
+lenyûgözve
+lenyûgözõ
+lenyûgözött
+lenéz
+lenézi
+lenézés
+lenézõ
+lenézõen
+leold
+leoldozódik
+leolvadás
+leolvas
+leolvasás
+leolvasó
+leomlik
+leomló
+leoperálás
+leopárd
+leoszt
+leosztás
+lep
+lepasszol
+lepattan
+lepattog
+lepattogzik
+lepattogzott
+lepattogzás
+lepecsétel
+lepedék
+lepedékes
+lepedékessé
+lepedõ
+lepedõvel
+lepel
+lepelbe
+lepellel
+lepereg
+leperkál
+leperzsel
+lepett
+lepihen
+lepihentet
+lepikkelyez
+lepikkelyezés
+lepipál
+lepisszeg
+lepisálják
+lepke
+lepkegyûjtõ
+lepkekutató
+leple
+leplet
+leplez
+leplezetlen
+leplezett
+leplezés
+leplombál
+lepne
+lepocskondiáz
+lepontoz
+leporelló
+leporol
+lepottyan
+lepottyant
+lepra
+lepratelep
+lepriorál
+leprás
+lepuffant
+lepusztult
+lepusztulás
+lepve
+lepárlás
+lepárló
+lepárlókészülék
+lepárol
+lepárolt
+lepárolás
+lepény
+lepényhal
+lepénzel
+leradíroz
+leragad
+leragaszt
+lerajzol
+lerak
+lerakat
+lerakja
+lerakodik
+lerakodógép
+lerakodóhely
+lerakott
+lerakás
+lerakó
+lerakódik
+lerakódott
+lerakódás
+lerakódásos
+lerakóhely
+lerendez
+lereped
+lerepeszt
+lereszel
+lereszelés
+lernai
+lerobban
+lerobbant
+lerogy
+lerohad
+lerohan
+lerohanás
+lerombol
+lerombolás
+leromlik
+leromlott
+leromlás
+lerongyolódott
+leront
+lerontás
+leroskad
+lerovatlan
+lerág
+leránt
+lerántás
+leráz
+lerázhatatlanul
+lerázható
+lerázni
+lerázza,
+lerézsel
+lerí
+lerögzít
+lerögzítés
+lerövidít
+lerövidített
+lerövidíthetetlen
+lerövidítés
+lerúg
+les
+lesarkít
+lesarkított
+lesbe
+lesben
+lesbõl
+lesegít
+leselkedik
+leselkedés
+leselkedõ
+lesen
+leshely
+lesheted!
+lesi
+lesiklik
+lesimít
+lesimítja
+leskelõdik
+leskiccel
+lesorjáz
+lesoványodik
+lesoványodott
+lesoványodás
+lesoványít
+lesre
+lestrapál
+lestrapált
+lesunyítja
+lesz
+lesz!
+lesz,
+lesz?
+leszabott
+leszakad
+leszakít
+leszakítás
+leszalad
+leszaladt
+leszaladás
+leszaladó
+leszalasztása
+leszavaz
+leszavaztat
+leszavazás
+leszbia
+leszbikus
+leszboszi
+leszed
+leszedetlen
+leszedett
+leszedheti
+leszedi
+leszedõfésû
+leszegett
+leszegez
+leszegi
+leszek
+leszel
+leszerel
+leszerelhetõ
+leszerelt
+leszerelés
+leszerepelt
+leszerzõdik
+leszerzõdtet
+leszerzõdött
+leszid
+leszidás
+lesznek
+leszokik
+leszoktat
+leszorít
+leszorítja
+leszorítás
+leszorító
+leszurkol
+leszáll
+leszállnia
+leszállás
+leszállási
+leszállásra
+leszállással
+leszállását
+leszállít
+leszállított
+leszállítás
+leszállítása
+leszálló
+leszállóban
+leszállólap
+leszállópálya
+leszámol
+leszámolás
+leszámít
+leszámítol
+leszámítolható
+leszámítolhatóság
+leszámítolás
+leszámítolási
+leszármazik
+leszármazott
+leszármazottak
+leszármazottja
+leszármaztat
+leszármaztatás
+leszármaztatása
+leszármazás
+leszármazási
+leszélez
+leszíjaz
+leszívós
+leszól
+leszólja
+leszólás
+leszólít
+leszóló
+leszögez
+leszögezi
+leszögezi,
+leszúr
+leszúrt
+leszûkít
+leszûr
+leszûrés
+lesállást
+lesántul
+lesántít
+lesóz
+lesötétít
+lesújt
+lesújtott
+lesújtva
+lesújtó
+lesúrol
+lesüllyed
+lesüllyeszt
+lesült
+lesülés
+lesüpped
+lesüppedés
+lesüt
+lesüti
+lesütött
+lesütötte
+letagad
+letagadhatatlan
+letaglóz
+letakar
+letakart
+letakarítás
+letapaszt
+letapogat
+letapogatás
+letapogató
+letapos
+letaposott
+letargia
+letargikus
+letarol
+letarolt
+letarolás
+letartóztat
+letartóztatják
+letartóztatott
+letartóztatás
+letartóztatásba
+letartóztatási
+letartóztatását
+letartóztató
+letaszít
+leteker
+letekercsel
+letekeredett
+letekeredik
+letelepedik
+letelepedés
+letelepszik
+letelepít
+letelepítés
+letelepülõ
+letelik
+leteper
+leteremtik
+leterrorizál
+leterít
+leterítés
+leterítése
+letesz
+leteszem
+leteszi
+letevés
+letevõ
+lethargica
+letilt
+letiltatja
+letiltja
+letiltás
+letipor
+letiport
+letisztul
+letisztult
+letisztulás
+letisztáz
+letisztázás
+letisztázó
+letisztít
+letol
+letolják
+letolás
+letompul
+letompít
+letompított
+letorkol
+letorkolás
+letottyan
+letromfol
+letromfolás
+lett
+lettem
+lettországi
+letud
+letusol
+letáboroz
+letámad
+letárgyal
+letép
+letépdes
+letéphetõ
+letépés
+letér
+letérdel
+letért
+letérít
+letét
+letétbank
+letétbe
+letétbehelyezés
+letétel
+letéteményes
+letéteményese
+letétet
+letör
+letöredezik
+letöri
+letörik
+letörleszt
+letörlesztetlen
+letörlesztés
+letörli
+letörlés
+letört
+letörtség
+letörve
+letörés
+letörésére
+letöröl
+letûnt
+letûnõben
+letûri
+letûz
+leugrik
+leugrás
+leukoplaszt
+levackol
+levakar
+levakarás
+levakaró
+levantei
+levantéval
+levedlett
+levedli
+levedlik
+levegõ
+levegõ-gáz
+levegõbe
+levegõbefúvó
+levegõben
+levegõbuborék
+levegõbõl
+levegõhiány
+levegõn
+levegõnek
+levegõre
+levegõréteg
+levegõs
+levegõszabályozó
+levegõszelep
+levegõt
+levegõtlen
+levegõvel
+levegõzik
+levegõztet
+levegõztetés
+levegõzés
+levegõzõ
+levegõátömlés-gátló
+levegõért
+levehetõ
+levele
+leveled
+levelek
+leveleket
+levelemben
+leveles
+levelesedés
+levelesen
+levelet
+levelez
+levelezés
+levelezéshez
+levelezési
+levelezéssel
+levelezését
+levelezõ
+levelezõlap
+levelére
+levelû
+levelükre
+levendula
+levenni
+lever
+leverhetetlen
+leveri
+levert
+leverten
+levertnek
+levertség
+leverõ
+leves
+leveses
+levesesség
+levesestál
+levesestányér
+levesfazék
+leveshús
+leveskocka
+levespor
+levesség
+levest
+levestészta
+levesz
+leveszi
+leveszik
+levesébe
+levet
+levetett
+leveti
+levetkõz
+levetkõzik
+levetkõztet
+levett
+levetés
+levevés
+levezekel
+levezeklés
+levezet
+levezetés
+levezetése
+levezetésének
+levezetõ
+levezetõcsõ
+levezetõje
+levitézlett
+levizsgázás
+levon
+levonat
+levonatot
+levonja
+levont
+levonul
+levonva
+levonás
+levonása
+levonókép
+levág
+levágatja
+levágja
+levágott
+levágva
+levágás
+levágása
+leválaszt
+leválasztható
+leválasztás
+leválik
+levált
+leváltja
+leválás
+leválási
+leváló
+levél
+levél,
+levélbeli
+levélben
+levélboríték
+levélburok
+levélcsoportosító
+levéldísz
+levélen
+levélgyufa
+levélgyûjtõ
+levélke
+levélkoszorúja
+levélkézbesítõ
+levélminták
+levélnehezék
+levélnyílás
+levélpapír
+levélpostai
+levélre
+levélregény
+levélripacs
+levélszekrény
+levéltelen
+levéltetû
+levéltár
+levéltárca
+levéltáros
+levéltávirat
+levélváltás
+levélzöld
+levélíró
+levét
+levétel
+levõ
+levõnek
+lex
+lexikon
+lexikális
+lezajlik
+lezajlási
+lezajló
+lezser
+lezserség
+lezuhan
+lezuhant
+lezuhantat
+lezuhanyoz
+lezuhanás
+lezár
+lezárt
+lezárul
+lezárva
+lezárás
+lezáró
+lezökkenés
+lezöttyen
+lezúdít
+lezülleszt
+lezüllesztés
+lezüllik
+lezüllés
+lezüllött
+leágaztatás
+leágazás
+leágazási
+leáll
+leállt
+leállás
+leállít
+leállított
+leállítás
+leállítására
+leállító
+leállósáv
+leány
+leánya
+leánycserkész
+leányiskola
+leányka
+leánykereskedelem
+leánykor
+leánykori
+leánykép
+leánykérés
+leánynevelõ
+leányok
+leányos
+leánysereg
+leányszövetség
+leányvállalat
+leányzó
+leápol
+leég
+leégett
+leégve
+leégés
+leélez
+leélezés
+leélezõ
+leépít
+leépítik
+leépítés
+leér
+leértékel
+leértékelés
+leétet
+leétetés
+leír
+leírhatatlan
+leírhatatlanul
+leírható
+leírja
+leírt
+leírás
+leírása
+leíró
+leöblít
+leöblíti
+leöl
+leölt
+leölés
+leönt
+leönti
+leöntés
+leúszik
+leûzõcsésze
+leül
+leülepedett
+leülepedik
+leülepedés
+leülepedõ
+leülepszik
+leülepít
+leüli
+leültem
+leültet
+leültetés
+leültetési
+leüt
+leüti
+leütés
+leütõ
+leütött
+liba
+libabõr
+libabõrös
+libafalka
+libahús
+libamájpástétom
+libanyak
+libasorban
+libeg-lobog
+libegés
+libegõ
+libelárisan
+liberalizmus
+liberalizál
+libertinus
+liberális
+liberálisan
+libidó
+libikóka
+libikókázik
+libitum
+libuc
+libuska
+libácska
+libéria
+libériás
+licenc
+licit
+licitet
+licitál
+licitálsz
+licitálás
+licitáló
+lidérc
+lidércfény
+lidércnyomás
+lidércnyomásos
+lidércnyomásszerû
+lievrit
+lift
+liftakna
+liftes
+liftesfiú
+liftkezelõ
+liga
+ligandum
+ligatúra
+liget
+lignifikált
+lignit
+lignites
+lignocerin
+liheg
+lihegve
+lihegõ
+likacs
+likacsos
+likacsossá
+likvid
+likvidál
+likõr
+likõrkoktél
+likõröspohár
+lile
+liliom
+lilás
+limabab
+limes
+limfa
+limlom
+limlommal
+limonit
+limonádé
+limonádéirodalom
+limonádés
+limuzin
+lincsel
+lincselés
+linea
+linearitás
+lineáris
+link
+lino-type
+linóleum
+linóleummal
+lista
+listája
+listán
+listára
+listáról
+listát
+liszinka
+liszt
+lisztbogár
+lisztbõl
+lisztes
+liszteszsák
+lisztharmat
+lisztmoly
+lisztszerû
+liszttermék
+liter
+literátus
+litográfia
+litográfiai
+litológia
+litotész
+liturgia
+liturgiakutató
+liturgikus
+liturgista
+liturgiához
+litván
+litzehuzal
+litánia
+liziméter
+lián
+lobban
+lobbant
+lobbanás
+lobbanékony
+lobbanékonyság
+lobbizik
+lobbizás
+lobog
+lobogtat
+lobogtatás
+lobogva
+lobogás
+lobogó
+lobogók
+lobogót
+lobogóval
+loccsan
+loccsant
+loccsanás
+locsifecsi
+locsog
+locsogás
+locsogó
+locsol
+locsolja
+locsoló
+locsolófej
+locsolókanna
+locspocs
+logaritmus
+logarléc
+logika
+logikai
+logikus
+logikusan
+logikátlan
+logikátlanság
+logtábla
+lojalitás
+lojális
+lojálisan
+lokalizáció
+lokalizál
+lokalizálás
+lokni
+loknis
+lokálpatriotizmus
+lokátor
+lomb
+lombardkölcsön
+lombfûrész
+lombfûrészmunka
+lombhullató
+lombik
+lombkorona
+lombos
+lombozat
+lombozatú
+lombtalan
+lombtalanító
+lomha
+lomhaság
+lomhán
+lompos
+lompos,
+lomposság
+lompost
+lomtár
+lonc
+lonclepke
+loncsos
+londiner
+londonból
+londoni
+londoniak
+lop
+lopakodik
+lopakodás
+lopakodó
+lopja
+lopkod
+lopott
+lopva
+lopás
+lopási
+lopások
+lopásokat
+lopással
+lopást
+lopó
+lopódzik
+lopós
+lopótök
+lord
+lord,
+lordkancellár
+lordok
+lordpecsétõr
+lornyon
+lottyadt
+lottó
+lotyog
+lotyó
+lovag
+lovaggá
+lovagi
+lovagias
+lovagiasság
+lovagja
+lovagkor
+lovaglás
+lovaglási
+lovagló
+lovaglócsizma
+lovaglóostor
+lovaglópálca
+lovaglóösvény
+lovaglóút
+lovaglóülés
+lovaglóülésben
+lovagol
+lovagolnak
+lovagoltat
+lovagregény
+lovagrend
+lovai
+lovak
+lovakat
+lovakkal
+lovaknak
+lovas
+lovas-
+lovaskatona
+lovaskocsi
+lovasmutatvány
+lovaspóló
+lovasrendõr
+lovasrendõrség
+lovasszázad
+lovasság
+lovassága
+lovassági
+lovast)
+lovasított
+lovat
+lovon
+lovász
+lovászfiúja
+lovászgyerek
+lovászinas
+lovászkodik
+lovászmester
+lovát
+lovával
+lubickol
+lubickolni
+lubickolás
+lucerna
+lucfenyõ
+lucfenyõ-rúd
+lucskos
+luffaszivacs
+lugas
+lugasra
+luk
+lukratív
+lumbálpunkció
+lumineszcens
+lumma
+lump
+lumpol
+lumpolni
+lumpolás
+lumpoló
+lunetta
+lupa
+lurkó
+lusta
+lustaság
+lustálkodik
+lustálkodás
+lustán
+lutri
+lutrit
+luvharcot
+luvoldal
+luxus
+luxus-
+luxuscikkek
+luxusfülke
+luxushajó
+luxuskabin
+luxuskocsi
+luxusos
+luxuspalotákban
+luxusvonat
+lyssa
+lyuggató
+lyuk
+lyuka
+lyukacsos
+lyukakkal
+lyukas
+lyukasra
+lyukaszt
+lyukasztás
+lyukasztó
+lyukasztógép
+lyukasztóvas
+lyukat
+lyukazókerékkel
+lyukba
+lyukból
+lyukbõség
+lyukfolyadék
+lyukfûrész
+lyukjelzõ
+lyukkártya
+lyukra
+lyuksajtoló
+lyukszalag
+lyukszelvény
+lyuktágító
+lyukvágó
+lyukvésõ
+láb
+lába
+lábad!
+lábad?
+lábadozik
+lábadozás
+lábadozó
+lábai
+lábain
+lábainak
+lábait
+lábaival
+lábak
+lábakat
+lábakkal
+lábam
+lábas
+lábasjószág
+lábatlan
+lábazat
+lábazati
+lábbal
+lábbeli
+lábbilincs
+lábbokszolás
+lábdobogás
+lábdübörgés
+lábfej
+lábfejét
+lábfájós
+lábfék
+lábhoz!
+lábikra
+lábjegyzet
+lábköz
+lábmunka
+lábnyom
+lábnyomát
+lábnál
+lábon
+lábra
+lábszár
+lábszárak
+lábszárcsontok
+lábszárharisnya
+lábszárhús
+lábszárvédõ
+lábszíj
+lábtartás
+lábtartó
+lábtekercs
+lábtámasz
+lábtámasztó
+lábtõ
+lábtörlõ
+lábujj
+lábujja
+lábujjak
+lábujjhegy
+lábujjhegyen
+lábzsámoly
+lábán
+lábán)
+lábápolás
+lábápoló
+lábára
+lábáról
+lábát
+lábával)
+lábú
+láda
+ládapad
+ládika
+ládába
+ládához
+ládák
+ládáz
+lágy
+lágyacél
+lágyan
+lágyfekély
+lágyforrasz
+lágyhús
+lágykõzet
+lágyszárú
+lágyszívû
+lágyság
+lágytojás
+lágyul
+lágyára
+lágyék
+lágyék-
+lágyékkötõ
+lágyéksérv
+lágyéktáj
+lágyéktáji
+lágyít
+lágyító
+lám
+láma
+lámagyapjúszövet
+lámaszõr
+lámpa
+lámpabelet
+lámpabél
+lámpaernyõ
+lámpafény
+lámpagyújtogató
+lámpagyújtó
+lámpaláz
+lámpaolaj
+lámpaoltás
+lámpaoszlop
+lámpatisztító
+lámpák
+lámpás
+lámpáshordó
+lámpát
+lánc
+láncatlasz
+láncbak
+lánccal
+lánccsörgés
+lánccsúsztató
+láncdió
+láncdohányos
+láncfonal
+láncfonalat
+láncfonalcséve
+láncfonalõr
+láncfonat
+láncfonál
+láncforgó
+láncfék
+láncfûrész
+lánchenger
+lánchurkolt
+lánckerék
+lánckerékdob
+láncolat
+láncolatos
+láncon
+láncos
+láncpecek
+láncra
+láncreakciót
+láncszabály
+láncszem
+lánctag
+lánctekercs
+láncvezetõ
+láncvédõ-hüvely
+láncvégszem
+láncöltés
+láncú
+lándzsa
+lándzsanyél
+lándzsás
+lándzsát
+lándzsával
+láng
+lángba
+lángban
+lángcsóva
+lángedzés
+lánggal
+lángkemence
+lángkemence-fenék
+lángkicsapódás
+lángkéve
+lángok
+lángokban
+lángol
+lángolnak
+lángolva
+lángolás
+lángoló
+lángolóan
+lángos
+lángra
+lángsugár
+lángszerû
+lángszóró
+lángterelõ
+lángvisszacsapás
+lángvörös
+lány
+lánya
+lányba
+lánycserkész
+lányok
+lányoknak
+lányos
+lányt
+lánytestvér
+lányunoka
+lányát
+láp
+lápföld
+lápos
+lárifári
+lárma
+lármás
+lármásan
+lármásság
+lármát
+lármáz
+lármázik
+lármázni
+lármázás
+lármázó
+lárva
+lárvaállapot
+lárvája
+lássam
+lássam!
+lássam,
+lássatok
+lássuk,
+lássunk
+lát
+lát!
+látatlanul
+látcsõ
+láthatatlan
+láthatatlanság
+láthatja,
+láthatjuk
+láthatnálak
+láthatod,
+láthatom
+láthatár
+láthatári
+láthatáron
+látható
+láthatóan
+láthatók
+láthatólag
+láthatóság
+láthatóvá
+látja
+látja,
+látjelzõ
+látkép
+látni
+látni,
+látnivaló
+látnivalói
+látnivalókat
+látnivalókon
+látnok
+látnoki
+látod
+látogass
+látogassatok
+látogat
+látogatható
+látogatott
+látogatottság
+látogatás
+látogatások
+látogatást
+látogatásának
+látogató
+látogatóba
+látogatóban
+látom
+látom,
+látomás
+látomása
+látomásszerû
+látott
+látra
+látszani
+látszat
+látszat-
+látszata
+látszatkeltés
+látszatot
+látszatra
+látszatát
+látszerész
+látszik
+látszott
+látszott,
+látszólag
+látszólagos
+láttalak
+láttam
+láttamoz
+láttamozás
+láttat
+látták
+láttán
+láttára
+látva
+látvány
+látványon
+látványos
+látványosan
+látványosság
+látványosságai
+látványosságait
+látványt
+látványtól
+látás
+látási
+látásra
+látást
+látástól
+látású
+látó
+látó-
+látóhatár
+látóhatári
+látóhatáron
+látóideg
+látóképesség
+látókör
+látóköri
+látókörû
+látómezõ
+látósugár
+látószögû
+látótengely
+látótávolban
+látótávolság
+látótávolságon
+látótér
+látóvá
+láva
+lávafolyam
+lávafolyás
+lávakõ
+láz
+láza
+lázad
+lázadás
+lázadási
+lázadó
+lázadóvá
+lázas
+lázasan
+lázat
+lázba
+lázban
+lázlap
+lázmentes
+lázmérõ
+lázongás
+lázroham
+lázt
+láztalan
+lázító
+lébe
+lében
+lébõl
+léc
+léccel
+lécekkel
+lécet
+lécezet
+lécezett
+lécezõ
+lécgyalu
+léckerítés
+léckészítõ
+lécláb
+lécroletta
+lécsoros
+lédús
+lédússág
+lég
+lég-
+légabroncs
+légabroncsos
+légajtó
+légakna
+légbeszívás
+légbuborék
+légbõl
+légcsavar
+légcsavarhajtású
+légcsavarsugár
+légcsavarszél
+légcsavarágynál
+légcsere
+légcsákány
+légcsõ
+légcsõférges
+légdaganat
+légedény
+légelhárítás
+légelhárító
+légellenállás
+légelzáró
+légembólia
+légen
+légfegyver
+légfék
+légfúvóka
+légfüggöny
+léggyökerû
+léggyökér
+léggömb
+léggömbrepülés
+léggömböt
+léghajó
+léghajós
+léghajóvezetés
+léghajózás
+léghajózástan
+léghuzatos
+léghólyag
+léghûtés
+légi
+légi-
+légibetegség
+légibusz
+légicél
+légierõ
+légierõk
+légies
+légiessé
+légifolyosó
+légihíd
+légihídon
+légikatasztrófa
+légikisasszony
+légiposta
+légiposta-boríték
+légiposta-levél
+légipostai
+légiriadó
+légiszemélyzet
+légitámadás
+légitámadást
+légitársaság
+légió
+légió-
+légiós
+légjárat
+légkalapács
+légkamra
+légkompresszor
+légkondicionáló
+légkábel
+légköbméter-tér
+légkör
+légkörbe
+légköri
+légkúra
+léglökés
+léglökéses
+légmentesen
+légnedvesítõ
+légnemû
+légnyomás
+légnyomása
+légnyomásmérõ
+légnyomással
+légnyomású
+légnyílás
+légoltalmi
+légoltalom
+légpangás
+légpuska
+légpuskagolyó
+légpárnás
+légroham
+légrés
+légsugaras
+légszekrény
+légszennyezés
+légszeparátor
+légszerelés
+légszigetelt
+légszigeteltség
+légszigetelõ
+légszivattyú
+légszomj
+légszárító
+légszér
+légszûrõ
+légszûrõbetét
+légsúlymérõ
+légsûrítõ
+légtartály
+légtelenítés
+légtelenítõ
+légterében
+légtornász
+légtér
+légtömeg
+légtömlõs
+légutak
+légvezeték
+légvonalban
+légvonatelzáró
+légvágat
+légvár
+légvárak
+légvárépítés
+légvédelem
+légvédelmi
+légy
+légy)
+légybeköpte
+légycsapó
+légyirtás
+légykapó
+légyköpés
+légyott
+légyottot
+légypiszok
+légyölõ
+légzsilip
+légzsák
+légzés
+légzési
+légzõcsõ
+légzõkészülék
+légzõsejt
+légáramlat
+légáramlás
+légáramlásos
+légó
+légörvény
+légösszekötõ
+légûr
+légügy
+légügyi
+légügyi-
+légüres
+léha
+léhaság
+léháskodik
+léhûtõ
+lék
+léket
+lélegezhetõ
+lélegeztetés
+lélegzet
+lélegzet-visszafojtva
+lélegzete
+lélegzetelállító
+lélegzetet
+lélegzethez
+lélegzetre
+lélegzettel
+lélegzetvétel
+lélegzetvételnyi
+lélegzetét
+lélegzik
+lélegzés
+lélegzõ
+lélek
+lélekbõl
+lélekbúvár
+lélekelemzés
+lélekelemzési
+lélekelemzést
+lélekelemzõ
+lélekharang
+lélekharangot
+lélekjelenlét
+lélekjelenlétét
+lélekkel
+lélekmentõ
+lélekszakadva
+lélektelen
+lélektelenül
+lélekölõ
+lény
+lényeg
+lényegbeni
+lényegbevágó
+lényege
+lényeges
+lényegesen
+lényeget
+lényeget!
+lényeggel
+lényeghez
+lényegi
+lényegre
+lényegtelen
+lényegtelenség
+lényegében
+lények
+lép
+lépcsõ
+lépcsõ!
+lépcsõfok
+lépcsõfokai
+lépcsõfokait
+lépcsõforduló
+lépcsõház
+lépcsõje
+lépcsõkar-pofa
+lépcsõkarfa
+lépcsõkifalazás
+lépcsõkorlát
+lépcsõköz
+lépcsõn
+lépcsõorsó
+lépcsõpihenõ
+lépcsõpofa
+lépcsõs
+lépcsõsen
+lépcsõsor
+lépcsõz
+lépcsõzet
+lépcsõzetes
+lépcsõzetesen
+lépcsõzug
+lépdel
+lépegetve
+lépes
+lépesméz
+lépfene
+lépfenés
+léphet
+lépi
+lépj
+lépked
+lépkedve
+lépkedés
+lépnek
+lépni
+léppel
+lépre
+lépsejt
+lépsejtszerûen
+lépsz!
+lépteit
+léptek
+léptekkel
+léptet
+léptetik
+léptetés
+lépték
+léptéket
+léptékmódosítás
+léptû
+lépve
+lépés
+lépésben
+lépéseit
+lépések
+lépéseket
+lépésekkel
+lépésnyire
+lépésre
+lépésrõl
+lépéssel
+lépésszám
+lépést
+lépéséhez
+lépését
+lépésütem
+lépõ
+lére
+lét
+létcsõ
+létesít
+létesítmény
+létesítmények
+létesítés
+létesítése
+létesült
+létezik
+létezés
+létezésen
+létezõ
+létfenntartás
+létfontosságú
+létforma
+létige
+létminimum
+létminimumot
+létmód
+létra
+létrafok
+létre
+létrehoz
+létrehozott
+létrehozás
+létrehozó
+létrejön
+létrejött
+létrán
+létráról
+létrás
+létrával
+létszám
+létszáma
+létszámban
+létszámcsökkentés
+létszámfelettinek
+létszámleépítés
+létszámú
+létszükséglet
+létszükségleti
+létért
+lévõ
+lévõk
+lézeng
+lézengés
+lézengõ
+líra
+lírai
+líraiság
+lírikus
+lírához
+lóbab
+lóbál
+lóbálás
+lóbõr
+lóbõrt
+lóca
+lócsimbe
+lódarázs
+lódoktor
+lódulj!
+lódít
+lódítás
+lóerõ
+lófarok
+lófasz
+lófogú
+lófrál
+lóg
+lógasd
+lógat
+lógatja
+lógott
+lógás
+lógó
+lógós
+lóhalálában
+lóhere
+lóherelevél
+lóháton
+lóistálló
+lókefe
+lókereskedõ
+lólap
+lónak
+lónak,
+lópokróc
+lópáncél
+lóra
+lóra!
+lóri
+lórimajom
+lóról
+lószar
+lószerszám
+lószõrszita
+lót-fut
+lótakaró
+lótusz
+lóutánpótlási
+lóvakaró
+lóval
+lóvasút
+lóverseny
+lóversenyen
+lóversenyfogadásokat
+lóversenypálya
+lóversenytippek
+lóversenytippeket
+lóversenyzés
+lóvá
+lóvásárló
+lóvásártér
+lóvért
+lóállomány
+lóállományt
+lóápoló
+lõdd
+lõdörgés
+lõdörög
+lõelemképzõ
+lõfegyver
+lõgyakorlat
+lõiskola
+lõjáték
+lõkiképzés
+lõn
+lõoktató
+lõpor
+lõporadagoló
+lõporral
+lõporserpenyõ
+lõportöltet
+lõre
+lõrés
+lõrésekkel
+lõréses
+lõszer
+lõszerellátás
+lõszerfelügyelõ
+lõszergyár
+lõszergyárban
+lõszergyári
+lõszerkezelõ
+lõszerkiméreten
+lõszerkészletünk
+lõszerraktár
+lõszerrel
+lõszerszekrény
+lõszerszállító
+lõszertáros
+lõttek
+lõtáv
+lõtávolság
+lõtávolság-beosztásos
+lõtávolságban
+lõtávolságon
+lõtávolságot
+lõtávon
+lõtér
+lõzsák
+lõállásba
+lök
+lökd
+lökdös
+lökdösi
+lökdöss!
+lökdösõdik
+lökdösõdés
+lökdösõdõ
+löket
+lökettérfogat
+lökhajtás
+lökhajtásos
+lökhárító
+lökhárítók
+löki
+löktárcsa
+lökés
+lökéscsillapítás
+lökéscsillapító
+lökéscsökkentõ
+lökése
+lökésgátló
+lökéshullám
+lökésmérséklõ
+lökésszerû
+lökésszerûen
+lökõerõ
+lökõkar
+lökött
+löncs
+löncshús
+löncsöl
+lösz
+lötty
+lötyög
+lötyögés
+lötyögõ
+lötyögõs
+lövedék
+lövedéket
+lövedékröppálya
+löveg
+lövegcsõvakaró
+löveget
+lövegirányzék
+lövegirányzó
+lövegkezelõ
+lövegmozdony
+lövegtalp
+lövegtalpazat
+lövegállás
+lövell
+lövelli
+lövellt
+lövet
+lövettyû
+lövik
+lövés
+lövésnyire
+lövéssel
+lövést
+lövész
+lövészegyesület
+lövészet
+lövészezred
+lövészgyalogság
+lövészgödör
+lövészverseny
+lövészállás
+lövészárkokat
+lövészárkokba
+lövészárkot
+lövészárok
+lövészárok-háború
+lövészárokban
+lövõ
+lövõlegény
+lövölde
+lövöldöz
+lövöldözés
+lúd
+lúdbõr
+lúdbõrzés
+lúdtalp
+lúdtalpas
+lúdtalpbetét
+lúdtoll
+lúg
+lúgkõ
+lúgosság
+lúgoz
+lúgozó
+lúgálló
+lüke
+lüktet
+lüktetve
+lüktetés
+lüktetõ
+lüszter
+lüsztermáz
+lüszterszerû
+m/óra
+ma!
+maca
+macerál
+machináció
+mackó
+macska
+macska-
+macska-egér
+macskaajtó
+macskaeledel
+macskaevõ
+macskafajta
+macskafejes
+macskaféle
+macskajaj
+macskajajos
+macskakaparás
+macskakõ
+macskakõvel
+macskakölyök
+macskaköröm
+macskamenta
+macskamosdást
+macskaszem
+macskaszerû
+macskatermészetû
+macskazene
+macskazenét
+macskák
+madagaszkári
+madarai
+madarak
+madarakat
+madarat
+madarászik
+madrasz
+madrigál
+madzag
+madár
+madár-
+madárcsapat
+madárdal
+madárenyv
+madárfióka
+madárfészket
+madárfürdõ
+madárfütty
+madárhoz
+madárház
+madárijesztõ
+madárjós
+madárka
+madárkalitka
+madárlábak
+madárlép
+madárra
+madárszerû
+madártan
+madártani
+madártojás
+madártoll
+madártudós
+madárvágta
+madáré)
+madárének
+madárétkû
+maffia
+mafla
+maflaság
+maflácska
+maflán
+maflás
+mag
+mag-
+maga
+magabiztos
+magabiztosan
+magabiztosság
+magabízás
+magabízó
+magad
+magad!
+magad?
+magadat
+magadnak
+magadra
+magadra!
+magadét!
+magafajta
+magam
+magam,
+magamfajta
+magammal
+magamnak
+magamutogatás
+magamutogató
+magas
+magas!
+magas,
+magas?
+magasabb
+magasabbra
+magasabbrendû
+magasak
+magasan
+magasantenna
+magasba
+magasban
+magasföldszint
+magasiskola
+magaslat
+magaslatra
+magaslatára
+magasnyakú
+magasnyomás
+magasnyomó
+magasra
+magasról
+magasröptû
+magasröptûség
+magasság
+magassága
+magasságban
+magasságbeli
+magasságból
+magassági
+magasságmeghatározás
+magasságmérés
+magasságmérõ
+magasságú
+magasugrás
+magasvasút
+magasztal
+magasztalás
+magasztaló
+magasztos
+magasztosan
+magasztossá
+magasztosság
+magasít
+magasított
+magatartás
+magatartása
+magatartású
+magatatás
+magatehetetlen
+magaviselet
+magaviseletre
+magaviseletû
+magazin
+magba
+magban
+magbuga
+magburok
+magenergia
+magfizika
+magfúzió
+maghasadás
+maghasítás
+magház
+magica
+magisztrális
+magja
+magkutatás
+magnetofon
+magnetofonról
+magnetofonszalagról
+magnezit
+magnézia
+magnézium-aluminát
+magnólia
+magnóliafa
+magnóra
+magnószalag
+magol
+magolás
+magoló
+magonc
+magostól
+magot
+magról
+magrögzítõ
+magspin
+magtalan
+magtalanító-gép
+magtechnika
+magtermõ
+magtok
+magtár
+magtárba
+magtári
+maguk
+magukat
+magunkat
+magva
+magvas
+magvevõ
+magyar
+magyarország
+magyarán
+magyaráz
+magyarázat
+magyarázata
+magyarázatul
+magyarázd
+magyarázható
+magyarázkodik
+magyarázott
+magyarázza
+magyarázás
+magyarázása
+magyarázó
+magzat
+magzatdarabolás
+magzati
+magába
+magában
+magából
+magához
+magáhoztérés
+magán
+magán-
+magának
+magának,
+magánakvaló
+magánbeszéd
+magánbeteg
+magándetektív
+magánhangzó
+magánhangzói
+magánhangzós
+magániskola
+magánjellegû
+magánjog
+magánjogi
+magánjáró
+magánkezdeményezés
+magánkívül
+magánkórház
+magánlakosztály
+magánlakosztálya
+magánlaksértés
+magánlevél
+magánpénztára
+magánszemély
+magántermészetû
+magánterület
+magántitkár
+magántulajdonban
+magánutat
+magánvagyon
+magány
+magányban
+magányos
+magányosan
+magányosság
+magánzálogolás
+magánzárka
+magánzók
+magánál
+magánélet
+magánéletben
+magánértesülés
+magánórák
+magánórákat
+magánúton
+magánügyben
+magánügyek
+magára
+magáról
+magáról!
+magáról,
+magát
+magát,
+magát?
+magától
+magával
+magával,
+magáé!
+magáénak
+magáért
+magáét
+magáévá
+magömlés
+mahagóni
+maharadzsa
+mai
+maiság
+majd
+majdhogy
+majdnem
+majmok
+majmol
+majmolás
+majom
+majomember
+majomkenyérfa
+majomszeretet
+majomszeretettel
+majomszerû
+majonéz
+major
+majoranna
+majorsági
+majoránna
+majré
+majrés
+majszol
+majszolás
+makacs
+makacsság
+makacssági
+makacsul
+makadám
+makadámutat
+makadámút
+makaron-puszedli
+makaróni
+makett
+maki
+makimajom
+makk
+makkegészséges
+makrahal
+makrahalfogásra
+makramé
+makrancos
+makrapipa
+makrorészecske
+makroszkopikus
+makréla
+makrélafaj
+makulatúra
+makulátlan
+makulátlanság
+makulátlanul
+makákus
+malabár-kardamomum
+malabár-kardamóm
+malac
+malaca
+malacbõr
+malackodás
+malackodóan
+malacozó
+malacságokat
+malaszt
+malaysiai
+maleinsav
+maligánfok
+malljátszótér
+malljáték
+malmozik
+malom
+malomjáték
+malomkõ
+malomkõ-rovátkoló
+malomkõlyukat
+malomkõnek
+malomrosta
+malomszita
+malomárok
+malonsav
+malter
+malterral
+malterréteg
+maláj
+maláji
+malária
+maláriazónák
+maláriás
+maláta
+malátával
+malátáz
+malícia
+mama
+mami
+mamlasz
+mammut
+mammut-
+mamusz
+manakin
+manapság
+mancs
+mandarin
+mandiner
+mandinerrõl
+mandragóra
+mandrill
+mandula
+mandulagyulladás
+mandulakacs
+mandulaszemû
+mandulás
+mandzsetta
+mandzsettagomb
+mandzsettagombok
+mandzsetták
+mandátum
+mandátumi
+maneken
+mangosztán
+mangrove
+mangán
+mangános
+mangánérc
+mangó
+mangófa
+manifesztálódás
+manikûr
+manikûrolló
+manikûrös
+manikûröz
+manikûrözés
+manila
+manilai
+manillaszivar
+manipuláció
+manipulációs
+manipulál
+manipulálás
+manipulátor
+manióka
+maniókalepény
+maniókaliszt
+mankó
+mankón
+mankós
+manna
+manométer
+mans
+manserõ
+manus
+manzárd
+manzárdablak
+manzárdtetõ
+maníros
+manó
+manó!
+manóba
+manószerû
+manõver
+manõverez
+manõverezõ
+manöken
+manövríroz
+maori
+mappa
+mar
+marad
+marad,
+maradandó
+maradandóan
+maradandóság
+maradhat
+maradi
+maradiság
+maradj
+maradjon
+maradjon!
+maradjunk
+maradna
+maradnak
+maradni
+maradott
+maradt
+maradva
+maradvány
+maradványainak
+maradványait
+maradványok
+maradás
+maradása
+maradására
+maradék
+maradék-
+maradékok
+maradéktalan
+maradéktalanul
+maradó
+marakodik
+marasztal
+marasztaló
+marat
+maratoni
+maratott
+maratás
+maratással
+marató
+maratófürdõ
+maratószer
+marcangol
+marcipán
+marcona
+marconaság
+mardossa
+mardosó
+mareográf
+margarin
+margarinkeverék
+margó
+margóján
+margón
+marha
+marhabõr
+marhadoktor
+marhafaggyú
+marhafartõ
+marhahajcsár
+marhahús
+marhahúskivonat
+marhahúskonzerv
+marhakorlát
+marhapecsenye
+marhaság
+marhaság!
+marhaságot!
+marhasült
+marhatarja
+marhatenyésztõ
+marhatolvaj
+marhazsírból
+marhazsírt
+marhaállás
+marhul
+marháskodik
+marhát
+marihuána
+marihuánás
+marimba
+mariníroz
+marinírozott
+marionett
+marja
+marják
+marka
+markazit
+markecol
+markolat
+markolatkosár
+markolatszíj
+markolattüske
+markolás
+markoló
+markológép
+markomba
+markos
+markotányos
+markába
+markában
+markáns
+markõr
+marmonkanna
+marok
+maroken
+marokkal
+marokkói
+marokkörzõ
+maroknyi
+marokszedõ
+marokszám
+marokszámra
+mars
+mars!
+mars-
+marsall
+marsallja
+marsbeli
+marsi
+marslakó
+martalék
+martaléka
+martalóc
+martini
+marás
+maréknyi
+maró
+maróan
+maróanyag
+marófúró
+marógép
+marókáli
+marós
+marószerszám
+maróvá
+masinéria
+maskara
+massza
+masszázs
+masszíroz
+masszírozás
+masszírozó
+masszív
+masszívan
+masszívság
+masszõr
+masszõz
+maszat
+maszatos
+maszk
+maszka
+maszkol
+maszkíroz
+maszkírozás
+maszlag
+maszlagoló
+maszturbáció
+maszturbál
+masírozik
+masíroztat
+matador
+matek
+matematika
+matematikai
+matematikát
+mater
+materializmus
+materiális
+matrac
+matracágy
+matriarcha
+matriarchális
+matriarchátus
+matrica
+matróna
+matrónaság
+matrónához
+matrónák
+matróz
+matróza
+matrózblúz
+matrózcsajka
+matrózdal
+matrózgallér
+matrózként
+matrózok
+matrózruha
+matrózsapka
+matrózzsák
+matrózzubbony
+matrózúszás
+matrózúszással
+matt
+mattot
+mauzóleum
+maximalista
+maximalizál
+maximalizálás
+maximalizáló
+maximum
+maximális
+maximálisan
+mazochista
+mazochizmus
+mazsola
+mazsolás
+meccs
+mechanika
+mechanikai
+mechanikus
+mechanizmus
+mecset
+meddig
+meddõ
+meddõhányó
+meddõkõzet-zárvány
+meddõlapátoló
+meddõség
+meddõtörmelék
+medence
+medence-
+medencében)
+medencéjû
+medencényi
+meder
+mederfelvétel
+mederpillér
+mediatizált
+medikus
+mediterrán
+meditál
+medián
+mediáns
+medre
+medrébe
+medve
+medvecukor
+medál
+medúza
+medúza-
+medúzaszerû
+medúzákhoz
+meg
+meg!
+meg,
+meg-
+meg-megszakít
+meg-megszakítva
+megacéloz
+megacélozza
+megad
+megadja
+megadnék
+megadott
+megadva
+megadás
+megadása
+megadással
+megadást
+megadó
+megadóztat
+megafon
+megajándékoz
+megajándékozott
+megakad
+megakadt
+megakadályoz
+megakadályozható
+megakadályozza
+megakadályozás
+megakadályozó
+megakadása
+megakaszt
+megakasztás
+megakasztó
+megalakul
+megalakít
+megalakítás
+megalapoz
+megalapozatlan
+megalapozott
+megalapozottnak
+megalapozottság
+megalkot
+megalkotott
+megalkuszik
+megalkuvás
+megalkuvó
+megalszik
+megaltat
+megalvad
+megalvadt
+megalvadás
+megalvaszt
+megalvasztás
+megaláz
+megalázatlan
+megalázkodik
+megalázkodni
+megalázkodás
+megalázkodó
+megalázott
+megalázottság
+megaláztatás
+megalázza
+megalázás
+megalázó
+megalázóan
+megaszal
+megaszalódik
+megaszalódás
+megbabonáz
+megbabonázott
+megbabonázva
+megbabonázó
+megbarnul
+megbarátkozik
+megbasz
+megbecstelenít
+megbecstelenítés
+megbecstelenítõ
+megbecsül
+megbecsült
+megbecsülés
+megbecsülõ
+megbeszél
+megbeszélt
+megbeszélés
+megbeszélésre
+megbeszélést
+megbetegedett
+megbetegedik
+megbetegedés
+megbetegedések
+megbetegedési
+megbetegszik
+megbilincsel
+megbillen
+megbillent
+megbillenti
+megbirkózik
+megbirkózni
+megbirkózás
+megbizonyosodik
+megbocsát
+megbocsáthatatlan
+megbocsátható
+megbocsáthatóan
+megbocsáthatóság
+megbocsátás
+megbocsátó
+megbokrosodik
+megbokrosodás
+megbokrosodó
+megbolondul
+megbolondít
+megbolydulás
+megbolygat
+megbombáz
+megbomlik
+megbomlott
+megbont
+megbontja
+megbontás
+megbontása
+megborotvál
+megborotválkozik
+megborotvált
+megborsoz
+megborzadva
+megborzaszt
+megborzong
+megborzongat
+megborzongatott
+megborzongott
+megborzongtam
+megborzongtat
+megbosszul
+megbosszulja
+megbotlik
+megbotlás
+megbotló
+megbotoz
+megbotránkozik
+megbotránkoztat
+megbotránkoztató
+megbotránkozás
+megbotránkozásának
+megbuggyan
+megbuggyant
+megbukik
+megbukott
+megbuktat
+megbuktatás
+megbuktatását
+megbukás
+megbuliz
+megbundáz
+megbunyóz
+megbámul
+megbán
+megbánja
+megbánt
+megbántja
+megbántva
+megbántás
+megbántódás
+megbánás
+megbéklyóz
+megbéklyózva
+megbékélve
+megbékélés
+megbékít
+megbékített
+megbékítés
+megbékítõ
+megbékülés
+megbélyegez
+megbélyegzett
+megbélyegzés
+megbélyegzõ
+megbénulás
+megbénít
+megbénítás
+megbérmált
+megbírságol
+megbírságolja
+megbírál
+megbíz
+megbízatás
+megbízatást
+megbízhatatlan
+megbízhatatlanul
+megbízható
+megbízható,
+megbízhatóan
+megbízhatóság
+megbízhatósági
+megbízik
+megbízni
+megbízott
+megbízzák
+megbízás
+megbízásból
+megbízások
+megbízásokat
+megbízást
+megbízó
+megbízólevél
+megbízólevéllel
+megbök
+megbújik
+megbújó
+megbúvik
+megbúvó
+megbûnhõdik
+megbûnhõdés
+megbûvöl
+megbûvölés
+megbüntet
+megbüntetik
+megbüntetés
+megcenzúráz
+megcibálja
+megcirógat
+megcsal
+megcsalja
+megcsalt
+megcsap
+megcsapol
+megcsapolás
+megcsappan
+megcsavar
+megcsavarja
+megcsavarás
+megcsendesedett
+megcsendít
+megcsendül
+megcserél
+megcsiklandoz
+megcsiklandozás
+megcsinál
+megcsinálhasson
+megcsinálja
+megcsinálja!
+megcsináljam-e
+megcsinálni
+megcsinálnod
+megcsinálom
+megcsinált
+megcsináltad
+megcsináltad!
+megcsináltat
+megcsinálva
+megcsipked
+megcsonkít
+megcsonkított
+megcsonkítva
+megcsonkítás
+megcsonkító
+megcsorbítás
+megcsutakol
+megcsíp
+megcsípi
+megcsípik
+megcsípte
+megcsípés
+megcsókol
+megcsömörlik
+megcsömörlés
+megcsömörlésig
+megcsömörlött
+megcsúfol
+megcsúnyul
+megcsúszik
+megcsúszás
+megcukroz
+megcáfol
+megcáfolhatatlan
+megcáfolás
+megcéloz
+megcímkéz
+megcímzetlen
+megdagad
+megdagadt
+megdagadás
+megdagaszt
+megdarál
+megdarálás
+megdermed
+megdermedt
+megdermedve
+megdermedés
+megdermeszt
+megdicsérve
+megdicsõülés
+megdob
+megdobogtatta
+megdobál
+megdobás
+megdolgoz
+megdolgozik
+megdolgoztat
+megdolgoztatva
+megdorgál
+megdug
+megdupláz
+megduplázás
+megduzzad
+megduzzadt
+megduzzadás
+megdézsmál
+megdézsmált
+megdézsmálás
+megdõl
+megdõlés
+megdöbben
+megdöbbent
+megdöbbenti
+megdöbbentõ
+megdöbbentõen
+megdöbbenés
+megdöbbenéssel
+megdöf
+megdögönyöz
+megdönt
+megdönthetetlen
+megdönti
+megdöntés
+megdöntõje
+megdühödik
+megebédel
+megebédeltet
+megecetesedik
+megedz
+megedzõdik
+megegyezik
+megegyezni!
+megegyeztünk!
+megegyezés
+megegyezési
+megegyezéstõl
+megegyezõ
+megelevenedik
+megelevenít
+megellet
+megellik
+megelégedett
+megelégedetten
+megelégedettség
+megelégedés
+megelégszik
+megelõz
+megelõzhetõ
+megelõzi
+megelõztelek
+megelõztünk
+megelõzve
+megelõzés
+megelõzõ
+megelõzõen
+megelõzõleg
+megembereli
+megemel
+megemelt
+megemeléssel
+megemlékezik
+megemlékezõ
+megemlít
+megemlítés
+megemészt
+megemésztés
+megenged
+megengedett
+megengedettnél
+megengedhetetlen
+megengedhetetlenség
+megengedhetõ
+megengedhetõs
+megengedhetõség
+megengedi
+megengedik
+megengedni
+megengedné
+megengedve
+megengedés
+megengedõ
+megenyhül
+megenyhülve
+megered
+megereszkedett
+megereszkedik
+megereszkedés
+megereszt
+megereszti
+megeresztés
+megerjed
+megerjeszt
+megerõltet
+megerõlteti
+megerõltetés
+megerõltetõ
+megerõszakol
+megerõszakolás
+megerõsít
+megerõsítetlen
+megerõsített
+megerõsíthetõ
+megerõsíti
+megerõsítés
+megerõsítések
+megerõsítését
+megerõsítõ
+megerõsödik
+megerõsödsz
+megerõsödés
+megesett
+megesik
+megeskedtet
+megesket
+megesküszik
+megesküszik,
+megesküvés
+megesz
+megeszem
+megeszi
+megeszik
+megetet
+megette
+megfagy
+megfagyaszt
+megfagyott
+megfagyás
+megfakul
+megfakít
+megfarag
+megfarol
+megfedd
+megfeddés
+megfehéredik
+megfej
+megfejel
+megfejt
+megfejthetetlen
+megfejthetõ
+megfejthetõség
+megfejtés
+megfejtõ
+megfeketedik
+megfeketedés
+megfekszi
+megfeledkezik
+megfeledkezõ
+megfelel
+megfelel!
+megfelelni
+megfelelés
+megfelelõ
+megfelelõen
+megfelelõje
+megfelez
+megfellebezhetetlen
+megfen
+megfenekeltet
+megfeneklett
+megfeneklik
+megfeneklés
+megfenyeget
+megfenyít
+megfenyítés
+megfenyítõ
+megfertõz
+megfertõzõdik
+megfertõzött
+megfest
+megfestett
+megfeszít
+megfeszített
+megfeszítetten
+megfeszítettség
+megfeszíti
+megfeszítve
+megfeszítés
+megfeszül
+megfigyel
+megfigyelhetõ
+megfigyelhetõség
+megfigyelt
+megfigyeltet
+megfigyelés
+megfigyelése
+megfigyelési
+megfigyelést
+megfigyelõ
+megfigyelõként
+megfigyelõképesség
+megfigyelõléggömb
+megfigyelõállás
+megfilmesít
+megfizet
+megfizethetetlen
+megfizethetetlenül
+megfizeti
+megfizettet
+megfog
+megfogad
+megfogadja
+megfogadja,
+megfogadta,
+megfogadtat
+megfogalmaz
+megfogalmazott
+megfogalmazás
+megfogalmazásba
+megfogalmazással
+megfogamzik
+megfogan
+megfoghatatlan
+megfoghatatlanság
+megfogható
+megfogja
+megfogott
+megfogtál!
+megfogyatkozik
+megfogás
+megfogódzik
+megfojt
+megfojtás
+megfoltosodik
+megfoltoz
+megfoltozás
+megfolyt
+megfolyósodik
+megfolyósodás
+megfon
+megfonnyad
+megfonnyadás
+megfonnyaszt
+megfontol
+megfontolandó
+megfontolatlan
+megfontolja
+megfontolja,
+megfontolt
+megfontoltan
+megfontoltság
+megfontolva
+megfontolás
+megfordul
+megfordulás
+megfordulása
+megfordulási
+megfordít
+megfordítható
+megfordítja
+megfordított
+megfordítottság
+megfordítás
+megfordítása
+megforgat
+megforgatás
+megformál
+megforraszt
+megfoszt
+megfosztott
+megfosztás
+megfricskáz
+megfullad
+megfulladás
+megfullaszt
+megfutamodik
+megfutamodás
+megfutamít
+megfuttat
+megfázik
+megfázás
+megfázással
+megfékez
+megfékezi
+megfékezik
+megfékezés
+megfélemlít
+megfélemlített
+megfélemlíthetetlen
+megfélemlítés
+megfélemlítése
+megfélemlítési
+megfélemlítést
+megfélemlítõ
+megfér
+megférfiatlanít
+megférnek
+megfésülködik
+megfésült
+megfõtt
+megfõz
+megfúj
+megfújja
+megfújás
+megfúr
+megfûz
+megfürdet
+megfürödve
+megfüröszt
+megfüstöl
+meggazdagodik
+meggazdagodás
+meggazdagszik
+meggereblyéz
+meggondol
+meggondolandó
+meggondolatlan
+meggondolatlanság
+meggondolatlanul
+meggondolja
+meggondolja,
+meggondolom
+meggondolt
+meggondoltan
+meggondoltság
+meggondolva
+meggondolás
+meggy
+meggyalul
+meggyaláz
+meggyalázás
+meggyalázó
+meggyanúsít
+meggyanúsítás
+meggyengít
+meggyfa
+meggyilkol
+meggyilkolás
+meggyorsul
+meggyorsít
+meggyorsítja
+meggyorsítás
+meggypiros
+meggyullad
+meggyulladás
+meggyvörös
+meggyászol
+meggyógyul
+meggyógyít
+meggyón
+meggyõz
+meggyõzhetetlen
+meggyõzés
+meggyõzõ
+meggyõzõdik
+meggyõzõdés
+meggyõzõdése
+meggyõzõdéses
+meggyõzõdéssel
+meggyõzõen
+meggyökeresedett
+meggyökereztet
+meggyötört
+meggyötörtség
+meggyötörve
+meggyújt
+meggyújtja
+meggyújtás
+meggyûlik
+meggyûlés
+meggyûrûz
+meggátlás
+meggátló
+meggátol
+meggátolás
+meggémberedett
+meggémberedve
+meggörbedve
+meggörbít
+meggörbül
+meggörbült
+meggörbülés
+meggörnyed
+meggörnyedt
+meggörnyedés
+meggörnyeszt
+meghagy
+meghagyják
+meghagyás
+meghagyó
+meghajigál
+meghajlik
+meghajlás
+meghajlással
+meghajlít
+meghajlítás
+meghajol
+meghajolni,
+meghajolt
+meghajt
+meghajtott
+meghajtás
+meghajtású
+meghajtó
+meghajít
+meghal
+meghalad
+meghaladja
+meghaladó
+meghaladóan
+meghall
+meghallgat
+meghallgatja
+meghallgatás
+meghallgatásra
+meghallgatást
+meghalni
+meghalok,
+meghalt
+meghaltam
+meghamisít
+meghamisított
+meghamisítás
+meghamisítása
+meghamisító
+megharagszik
+megharagít
+megharap
+megharapják
+megharcol
+meghasad
+meghasonlottság
+meghasonlás
+meghat
+meghatalmaz
+meghatalmazott
+meghatalmazás
+meghatott
+meghatottság
+meghatszoroz
+meghatároz
+meghatározatlan
+meghatározhatatlan
+meghatározható
+meghatározott
+meghatározottság
+meghatározza
+meghatározás
+meghatározása
+meghatározásai
+meghatározó
+megható
+meghatóan
+meghazudtol
+meghegeszt
+meghemperget
+meghengerget
+meghibban
+meghibbant
+meghibásodik
+meghibásodott
+meghibásodás
+meghint
+meghintáztat
+meghirdet
+meghiszem
+meghitt
+meghitten
+meghittség
+meghizlal
+meghiúsul
+meghiúsulnak
+meghiúsult
+meghiúsulás
+meghiúsít
+meghiúsítja
+meghonosodik
+meghonosodott
+meghonosodás
+meghonosít
+meghonosítás
+meghosszabbodik
+meghosszabbodott
+meghosszabbodás
+meghosszabbít
+meghosszabbított
+meghosszabbítás
+meghosszabbítása
+meghoz
+meghozott
+meghozza
+meghunyászkodik
+meghunyászkodó
+meghunyászkodóvá
+meghurcol
+megháborodott
+meghág
+meghágás
+meghámoz
+meghánt
+meghány-vet
+meghánytuk-vetettük
+megháromszoroz
+megháromszorozódik
+meghátrál
+meghátrálásra
+megházasodik
+megházasít
+meghív
+meghívatlan
+meghívás
+meghívása
+meghízik
+meghízni
+meghódol
+meghódolás
+meghódít
+meghódítás
+meghõmérõz
+meghökkent
+meghökkenten
+meghökkenti
+meghökkentés
+meghökkentõ
+meghökkentõen
+meghökkenés
+meghúz
+meghúzni
+meghúzott
+meghúzva
+meghúzza
+meghúzás
+meghúzó
+meghúzódik
+meghúzódott
+meghúzója
+meghûl
+meghûlt
+meghûlés
+meghülyül
+megidéz
+megidézés
+megifjul
+megifjít
+megigazul
+megigazít
+megigazítja
+megigéz
+megigézett
+megigézi
+megigézés
+megihassuk
+megihlet
+megijed
+megijedni!
+megijeszt
+megillet
+megilleti
+megilletõ
+megilletõdve
+megindokol
+megindokolt
+megindul
+megindult
+megindultság
+megindultságtól
+megindulás
+megindít
+megindíthatatlan
+megindítja
+megindítás
+megindítása
+megindító
+megindítóan
+megingat
+megingathatatlan
+megingás
+meginog
+megint
+meginterjúvolt
+megintés
+meginvitál
+megirigyeltet
+megismer
+megismerhetetlen
+megismeri
+megismerkedik
+megismerkednie
+megismertet
+megismertetés
+megismerés
+megismerõ
+megismétel
+megismételt
+megismételtet
+megismétlés
+megismétlõdik
+megismétlõdni
+megismétlõdés
+megismétlõdõ
+megissza
+megiszik
+megitat
+megittasult
+megizzadt
+megizzaszt
+megjavul
+megjavulás
+megjavít
+megjavítja
+megjavítás
+megjavításáért
+megjegyez
+megjegyezni
+megjegyezve
+megjegyzem
+megjegyzés
+megjegyzéseivel
+megjegyzések
+megjegyzéseket
+megjegyzésekkel
+megjegyzést
+megjegyzéstevés
+megjelenik
+megjelent
+megjelentet
+megjelenés
+megjelenésre
+megjelenését
+megjelenésû
+megjelenít
+megjelenítõ
+megjelöl
+megjelöli
+megjelölni
+megjelölés
+megjutalmaz
+megjutalmazott
+megjárat
+megjárja
+megjátssza
+megjátssza,
+megjátszik
+megjátszott
+megjátszva
+megjátszás
+megjósol
+megjósolhatatlan
+megjósolható
+megjósoltam
+megjön
+megjött
+megjövendöl
+megjövendölés
+megkajáltat
+megkamatyol
+megkap
+megkaparint
+megkaparintása
+megkapható
+megkapja
+megkapni
+megkapod!
+megkapta
+megkaptad
+megkaptad!
+megkapó
+megkarcol
+megkarmol
+megkavar
+megkedvel
+megkedveltet
+megkedvelteti
+megkefél
+megkegyelmez
+megkegyelmezés
+megkel
+megkeleszti
+megkeményedett
+megkeményedik
+megkeményedése
+megkeményszik
+megkeményít
+megken
+megkent
+megkenés
+megkeres
+megkeresem
+megkeresett
+megkeresi
+megkeresztel
+megkereszteli
+megkeresés
+megkerget
+megkerít
+megkerül
+megkerülés
+megkerülésével
+megkerülõ
+megkeserít
+megkeserül
+megkeserülöd!
+megkettyint
+megkettõz
+megkettõzés
+megkettõzõdik
+megkettõzött
+megkever
+megkeveri
+megkezd
+megkezdett
+megkezdi
+megkezdés
+megkezdésekor
+megkezdõdik
+megkockáztat
+megkocsonyásodik
+megkocsonyásodás
+megkocsonyásít
+megkomolyodik
+megkondul
+megkondítja
+megkopaszodik
+megkopaszt
+megkopasztott
+megkopik
+megkopogtat
+megkopott
+megkoppint
+megkorbácsol
+megkorbácsolás
+megkoronáz
+megkoronázás
+megkoszorúz
+megkotlik
+megkritizál
+megkritizálás
+megkukkol
+megkurtít
+megkurtított
+megkuruzsol
+megkárosít
+megkárosítja
+megkárosított
+megkárosítás
+megkártyáz
+megkér
+megkérdez
+megkérdezem
+megkérdezése
+megkérdõjelez
+megkérgesedett
+megkéri
+megkésel
+megkésett
+megkímél
+megkíméli
+megkínoz
+megkínzott
+megkísérel
+megkísérlése
+megkísért
+megkíván
+megkívánja
+megkívánt
+megkóstol
+megkölykedzik
+megkölykezik
+megkönnyebbít
+megkönnyebbül
+megkönnyebbült
+megkönnyebbülten
+megkönnyebbülve
+megkönnyebbülés
+megkönnyebbülést
+megkönnyeztet
+megkönnyít
+megkönnyített
+megkönnyíti
+megkönnyítés
+megkönnyítése
+megkönnyül
+megkönyörül
+megköszön
+megköszörül
+megköt
+megkötés
+megkötésére
+megkötõ
+megkötött
+megkötöttségek
+megkötöttségektõl
+megkötöz
+megkövesedett
+megkövesedik
+megkövesedés
+megkövesít
+megkövetel
+megkövetelt
+megkövez
+megkövül
+megkövült
+megkövülten
+megközelít
+megközelíthetetlen
+megközelíthetõ
+megközelíthetõség
+megközelítés
+megközelítõ
+megközelítõleg
+megkülönböztet
+megkülönböztetett
+megkülönböztethetetlen
+megkülönböztethetõ
+megkülönböztetés
+megkülönböztetések
+megkülönböztetõ
+megküzd
+megküzdeni
+megküzdés
+meglangyosít
+meglapul
+meglapuló
+meglasszóz
+meglassítja
+meglazul
+meglazult
+meglazulás
+meglazít
+meglazítás
+megleckéztet
+megleckéztetés
+meglegyint
+meglegyintés
+meglehetõs
+meglehetõsen
+meglel
+meglenni
+meglep
+meglepett
+meglepetten
+meglepetés
+meglepetésemben
+meglepetésemre
+meglepetésszerû
+meglepetésszerûen
+meglepetést
+meglepetéstõl
+meglepetésébõl
+meglepetésére
+meglepi
+meglepve
+meglepõ
+meglepõdik
+meglepõdve
+meglepõdés
+meglepõdött
+meglepõdött,
+meglepõen
+megles
+meglevõ
+meglibabõröztet
+meglincsel
+meglocsol
+meglocsolás
+meglop
+meglovasít
+meglágyul
+meglágyít
+meglágyítja
+meglágyítás
+meglát
+meglátjuk
+meglátjuk!
+meglátod!
+meglátod,
+meglátogat
+meglátogatni
+meglátogattam
+meglátom
+meglátszanak
+meglékel
+meglép
+meglévõ
+meglóbál
+meglóbálás
+meglóg
+meglógva
+meglógás
+meglógó
+meglõ
+meglök
+meglövés
+meglövése
+megmagyaráz
+megmagyarázatlan
+megmagyarázhatatlan
+megmagyarázható
+megmagyarázás
+megmagyarázó
+megmakacsolja
+megmar
+megmarad
+megmaradt
+megmaradás
+megmaradó
+megmarják
+megmarkol
+megmarkolás
+megmart,
+megmattol
+megmelegít
+megmelleszt
+megmenekül
+megmenekült
+megmenekülés
+megment
+megmentett
+megmenti
+megmentés
+megmentõ
+megmeredve
+megmerevedett
+megmerevedettség
+megmerevedik
+megmerevedés
+megmerevít
+megmerít
+megmetsz
+megmintáz
+megmintázás
+megmond
+megmond!
+megmondani
+megmondhattad
+megmondja
+megmondjuk
+megmondom
+megmondtam
+megmondtam!
+megmondva
+megmos
+megmosakodik
+megmosakszik
+megmosdik
+megmosolyog
+megmosolyogtat
+megmossa
+megmotoz
+megmozdul
+megmozdít
+megmozdíthatatlan
+megmozgat
+megmozgató
+megmunkál
+megmunkálatlan
+megmunkálhatatlan
+megmunkálható
+megmunkált
+megmunkálás
+megmunkálási
+megmunkáló
+megmutat
+megmutatja
+megmutatja,
+megmutatkozik
+megmutatkozni
+megmutató
+megmámorosodott
+megmártja
+megmártás
+megmártózás
+megmássza
+megmászik
+megmászás
+megmásít
+megmásíthatatlan
+megmásíthatatlanság
+megmásíthatatlanul
+megmázsál
+megmázsálás
+megmér
+megméretett
+megméretlen
+megmérgez
+megmérhetetlen
+megmérkõzik
+megmért
+megmérés
+megmételyez
+megmûvel
+megmûveletlen
+megmûvelhetetlen
+megmûvelhetõ
+megmûvelt
+megmûvelés
+megmûvelõje
+megnagyobbodik
+megnagyobbít
+megnedvesedik
+megnedvesít
+megneheztel
+megnehezít
+megnehezíti
+megnehezítõ
+megnemesít
+megneszel
+megnevettet
+megnevez
+megnevezett
+megnevezni
+megnevezés
+megnyal
+megnyalja
+megnyalás
+megnyer
+megnyergel
+megnyerhetõ
+megnyeri
+megnyerni
+megnyert
+megnyerés
+megnyerése
+megnyerõ
+megnyerõen
+megnyes
+megnyesés
+megnyilatkozik
+megnyilatkozás
+megnyilvánulása
+megnyilvánulási
+megnyiratkozik
+megnyirbál
+megnyirbálja
+megnyirbálás
+megnyit
+megnyitás
+megnyitó
+megnyom
+megnyomja
+megnyomorít
+megnyomorított
+megnyugszik
+megnyugtat
+megnyugtatja
+megnyugtatott
+megnyugtatás
+megnyugtatásra
+megnyugtatására
+megnyugtatásául
+megnyugtató
+megnyugtatóan
+megnyugvás
+megnyugvást
+megnyurgult
+megnyílik
+megnyír
+megnyírás
+megnyújtja
+megnyújtott
+megnyújtás
+megnyúlik
+megnyúlt
+megnyúlás
+megnyúlósodott
+megnyúz
+megnégyszerezõdik
+megnémul
+megnémult
+megnémította
+megnéz
+megnézi
+megnézni
+megnõsít
+megnõsül
+megnõtt
+megnövekedett
+megnövel
+megokol
+megokolás
+megolajoz
+megold
+megoldhatatlan
+megoldható
+megoldhatóság
+megoldott
+megoldoz
+megoldozott
+megoldás
+megoldásként
+megoldások
+megoldást
+megoldódik
+megoldója
+megolvad
+megolvaszt
+megolvasztott
+megolvasás
+megoperálható
+megostorozás
+megoszlik
+megoszlás
+megoszlási
+megoszt
+megoszthatatlan
+megosztja
+megosztott
+megosztozik
+megosztva
+megosztás
+megosztó
+megparancsol
+megpatinásodott
+megpatkol
+megpattan
+megpattanás
+megpecsételi
+megpenderül
+megpendít
+megpenészedik
+megpenészedés
+megpenészít
+megperdít
+megperdítés
+megperdül
+megperdülés
+megperzsel
+megperzselt
+megperzselés
+megperzselõdik
+megperzselõdés
+megpihen
+megpihentet
+megpillant
+megpillantja
+megpillantása
+megpipál
+megpipázás
+megpirongat
+megpirosodik
+megpirul
+megpiszkálja
+megpofoz
+megpontoz
+megposhad
+megpróbál
+megpróbálkozik
+megpróbálni
+megpróbálom
+megpróbálta
+megpróbáltam
+megpróbáltatás
+megpróbáltatást
+megpróbálás
+megpuhul
+megpuhít
+megpukkad
+megpumpol
+megpuszil
+megpuszilja
+megpányváz
+megpöccint
+megpörget
+megpörköl
+megpörkölés
+megpörkölõdik
+megpörkölõdés
+megrabol
+megragad
+megragadja
+megragadt
+megragadás
+megragadó
+megragaszt
+megrajzol
+megrajzolója
+megrak
+megrakja
+megrakott
+megrakás
+megrebben
+megreformál
+megreformált
+megreformálás
+megregényesít
+megreked
+megrekedés
+megrekontráz
+megremeg
+megremegtet
+megrendel
+megrendelés
+megrendelést
+megrendelõi
+megrendelõlap
+megrendez
+megrendezett
+megrendít
+megrendítette
+megrendíthetetlenül
+megrendíti
+megrendítõ
+megrendítõen
+megrendült
+megrendülten
+megrendülés
+megrenget
+megreped
+megrepedt
+megrepedés
+megrepeszt
+megrepesztett
+megreszkíroz
+megrettent
+megrezzen
+megrezzenés
+megriad
+megriadás
+megriaszt
+megritkul
+megritkít
+megroggyant
+megrohamoz
+megrohan
+megrohanja
+megrohanták
+megrohanás
+megrohaszt
+megrokkan
+megromlani
+megromlik
+megromlott
+megromlás
+megromlásának
+megrongál
+megrongáltság
+megrongálás
+megrongálódott
+megrongálódás
+megront
+megrontható
+megrontott
+megrontotta
+megrontás
+megrontó
+megrostál
+megrothad
+megrothaszt
+megrovás
+megrovást
+megrozsdásodik
+megrozsdásít
+megrugdal
+megruház
+megrág
+megrágalmaz
+megráncosodik
+megráncosodás
+megráncosít
+megrándul
+megrándult
+megrándulás
+megrándít
+megrángat
+megránt
+megrántja
+megrántás
+megráz
+megrázkódik
+megrázkódtat
+megrázkódtatás
+megrázkódtató
+megrázkódás
+megrázza
+megrázás
+megrázó
+megrázóan
+megrémít
+megrémül
+megrémült
+megrészegít
+megró
+megrögzít
+megrögzött
+megrögzöttség
+megrökönyödés
+megrökönyödött
+megrökönyödöttség
+megrövidít
+megrövidített
+megrövidíti
+megrövidülés
+megrúg
+megsajnál
+megsarkal
+megsarkalás
+megsarkantyúz
+megsavanyodik
+megsavanyodva
+megsavanyít
+megsebesít
+megsebesített
+megsebesül
+megsebesült
+megsebez
+megsebzett
+megsebzi
+megsegít
+megsegítés
+megsegítésére
+megsejt
+megsejtés
+megsemmisít
+megsemmisített
+megsemmisítés
+megsemmisítõ
+megsemmisülés
+megsimogat
+megsirat
+megskalpol
+megsokszoroz
+megsokszorozódik
+megspékel
+megspórol
+megstoppol
+megstíröl
+megsuhint
+megsuhogtat
+megsuhogtatás
+megszab
+megszabadul
+megszabadulni
+megszabadult
+megszabadulás
+megszabadít
+megszabadítás
+megszabadító
+megszabott
+megszaggat
+megszagol
+megszakad
+megszakadt
+megszakadás
+megszakadása
+megszakít
+megszakítatlan
+megszakítja
+megszakított
+megszakítva
+megszakítás
+megszakítása
+megszakításokkal
+megszakításos
+megszakításának
+megszakításával
+megszakító
+megszalad
+megszalaszt
+megszaporázza
+megszavaz
+megszavaztat
+megszavazták
+megszavazását
+megszedi
+megszedte
+megszeg
+megszegel
+megszegez
+megszegi
+megszegés
+megszegése
+megszegõ
+megszelídít
+megszelídítetlen
+megszelídített
+megszelídíthetetlen
+megszelídíthetõ
+megszelídül
+megszemlél
+megszemélyesít
+megszemélyesített
+megszemélyesítés
+megszemélyesítõ
+megszentel
+megszentelt
+megszentelés
+megszentelõ
+megszentesülés
+megszentségtelenít
+megszentségtelenített
+megszentségtelenítés
+megszentségtelenítõ
+megszeplõsödik
+megszeret
+megszerettem
+megszerettet
+megszerez
+megszerezhetetlen
+megszerezhetõ
+megszerezni
+megszerezzen
+megszerkeszt
+megszerkesztve
+megszerkesztés
+megszerkesztõ
+megszervez
+megszerzi
+megszerzés
+megszerzése
+megszerzésén
+megszerzésére
+megszid
+megszigonyoz
+megszigorít
+megszilenciumoz
+megszilárdul
+megszilárdult
+megszilárdulás
+megszilárdít
+megszilárdítás
+megszimatol
+megszitál
+megszokik
+megszokja
+megszokni
+megszokott
+megszokottá
+megszoktam
+megszoktat
+megszokás
+megszokásból
+megszomorít
+megszoptat
+megszorult
+megszorultság
+megszorít
+megszorítás
+megszorítások
+megszáll
+megszállott
+megszállottan
+megszállottja
+megszállottság
+megszálló
+megszállók
+megszámlál
+megszámlálatlan
+megszámlálhatatlan
+megszámlálás
+megszámol
+megszámolatlan
+megszámolhatatlan
+megszámolja
+megszámolás
+megszámoz
+megszán
+megszárad
+megszárnyaz
+megszárnyazott
+megszédít
+megszédült
+megszégyenít
+megszégyenítve
+megszégyenítés
+megszégyenítõ
+megszégyenítõen
+megszégyenül
+megszégyenülve
+megszépít
+megszívat
+megszívlel
+megszól
+megszólal
+megszólaltat
+megszólaltatja
+megszólalásig
+megszólít
+megszólítás
+megszólítás)
+megszólító
+megszór
+megszórás
+megszõ
+megszökik
+megszöktet
+megszöktetés
+megszökés
+megszökött
+megszövegez
+megszövegezés
+megszúr
+megszûnik
+megszûnés
+megszûnése
+megszûr
+megszûrt
+megszületik
+megszülettem
+megszüntet
+megszünteti
+megszüntetés
+megszüntetése
+megszürkül
+megsárgul
+megsárgít
+megsért
+megsértett
+megsérthetõ
+megsérti
+megsértés
+megsértése
+megsértõdik
+megsértõdött
+megsérül
+megsóderol
+megsóz
+megsörétez
+megsötétedett
+megsötétedik
+megsúrol
+megsûrûsödik
+megsüketít
+megsüketült
+megsüketülés
+megsül
+megsürgönyöz
+megsüt
+megtagad
+megtagadja
+megtagadni
+megtagadás
+megtagadása
+megtagadó
+megtakarít
+megtakarított
+megtakarítás
+megtakarító
+megtalpal
+megtalál
+megtalálja
+megtalálni
+megtalálás
+megtaláló
+megtanul
+megtanulja
+megtanulás
+megtanít
+megtapint
+megtapintható
+megtapinthatóság
+megtapintás
+megtapogat
+megtapos
+megtapsol
+megtart
+megtartja
+megtartott
+megtartás
+megtartására
+megtartó
+megtaszít
+megtedd
+megtedd!
+megtegyen
+megtehessen
+megtehetem
+megteheti
+megtehetném
+megtehetném!
+megtekint
+megtekintés
+megtelepedés
+megtelepszik
+megtelepül
+megtelik
+megtelt
+megtelõ
+megtennem
+megtenni
+megtennie
+megteremt
+megterhel
+megterheli
+megterhelt
+megterhelés
+megterhelést
+megterhelését
+megtermett
+megtermékenyít
+megtermékenyítés
+megtermékenyítõ
+megtermékenyül
+megtermékenyülés
+megtervez
+megterít
+megterített
+megteríti
+megtestesít
+megtestesítés
+megtestesült
+megtestesülés
+megtestesülése
+megtesz
+megtesz,
+megteszek
+megteszi
+megteszi,
+megtetszenek
+megtetszik
+megtett
+megtetted
+megtevése
+megtilt
+megtiltja
+megtiltom,
+megtiltás
+megtisztel
+megtiszteltetés
+megtisztelõ
+megtisztul
+megtisztulás
+megtisztít
+megtisztított
+megtisztítás
+megtisztítása
+megtizedel
+megtizedelés
+megtold
+megtollasodik
+megtorlás
+megtorlást
+megtorló
+megtorol
+megtorpan
+megtorpanás
+megtorpedóz
+megtrágyáz
+megtréfál
+megtud
+megtudakol
+megtudja
+megtudjátok
+megtudom
+megtámad
+megtámadhatatlan
+megtámadhatóvá
+megtámadja
+megtámadás
+megtámadó
+megtámaszt
+megtámasztott
+megtámasztás
+megtáncoltat
+megtáncoltatlak!
+megtántorodás
+megtántorít
+megtárgyal
+megtáviratoz
+megtébolyodik
+megtébolyodott
+megtép
+megtér
+megtért
+megtérés
+megtérít
+megtérítés
+megtérültek
+megtétele
+megtételéhez
+megtételére
+megtételérõl
+megtételét
+megtételétõl
+megtéved
+megtévedt
+megtéveszt
+megtévesztettek
+megtévesztik
+megtévesztés
+megtévesztõ
+megtévesztõen
+megtölt
+megtölti
+megtöltés
+megtöltõdik
+megtöm
+megtömött
+megtör
+megtörhetõ
+megtöri
+megtörik
+megtörli
+megtörni
+megtört
+megtörte
+megtörten
+megtörténik
+megtörténnék
+megtörtént
+megtörténtnek
+megtörténés
+megtörõ
+megtöröl
+megtûrés
+megtûz
+megtûzdel
+megugat
+megugraszt
+megugrik
+megugrás
+megun
+megutál
+megvacsoráztat
+megvadul
+megvadult
+megvagy!
+megvajaz
+megvakar
+megvakul
+megvakulás
+megvakít
+megvakítás
+megvall
+megvallva
+megvalósul
+megvalósulás
+megvalósít
+megvalósítható
+megvalósíthatóság
+megvalósítás
+megvalósításáért
+megvan
+megvan!
+megvan,
+megvannak
+megvasal
+megvasalt
+megvendégel
+megvendégelés
+megver
+megvereget
+megveregeti
+megveregetése
+megverekedik
+megverekedni
+megverhetetlen
+megversel
+megversesít
+megvert
+megvertél
+megverés
+megvesszõz
+megvesszõzik
+megvesszõzés
+megvesz
+megveszi
+megveszik
+megveszteget
+megvesztegetett
+megvesztegethetetlen
+megvesztegethetõ
+megvesztegethetõség
+megvesztegetés
+megvesztegetése
+megvesztegetési
+megvesztegetõ
+megvet
+megvetemedett
+megvetemedik
+megvetemedve
+megvetemedés
+megvetemít
+megvetendõ
+megvetendõen
+megvetett
+megveti
+megvetés
+megvetésre
+megvetést
+megvetõ
+megvetõen
+megviccel
+megvigasztal
+megvilágosodott
+megvilágosodás
+megvilágosít
+megvilágít
+megvilágított
+megvilágítás
+megvilágításba
+megvilágítási
+megvisel
+megviselt
+megvitat
+megvitatás
+megvitatásra
+megvizsgál
+megvizsgálhatatlan
+megvizsgálja
+megvizsgálva
+megvizsgálás
+megvolt
+megvon
+megvonalaz
+megvonja
+megvádol
+megvádolás
+megvág
+megvágja
+megvágott
+megvágás
+megválaszol
+megválaszolatlan
+megválaszolhatatlan
+megválaszolását
+megválaszt
+megválasztják
+megválasztás
+megválasztása
+megválik
+megválogat
+megválogatja
+megválogatás
+megvált
+megváltható
+megváltja
+megváltott
+megváltozhatatlan
+megváltozhatatlanság
+megváltozik
+megváltozni
+megváltoztat
+megváltoztathatatlan
+megváltoztathatatlanba
+megváltoztathatatlanul
+megváltoztatható
+megváltoztatja
+megváltoztatás
+megváltoztatása
+megváltozás
+megváltozása
+megváltás
+megváltó
+megvárakoztat
+megvárakoztatnak
+megvárja
+megvásárlása
+megvásárol
+megvásárolható
+megvásárolhatóság
+megvéd
+megvédelmezés
+megvédhetõ
+megvédés
+megvénül
+megvétóz
+megvív
+megy
+megy!
+megy,
+megy?
+megye
+megyei
+megyek
+megyeszékhely
+megyék
+megyék,
+megyéspüspök
+megyünk
+megzaboláz
+megzabolázás
+megzabál
+megzavar
+megzavarhatatlan
+megzavarhatatlanság
+megzavarhatatlanul
+megzavarja
+megzavarodik
+megzavarodott
+megzavarodottnak
+megzavarodás
+megzavart
+megzavarás
+megzavarása
+megzenésít
+megzenésítés
+megzsarol
+megzsarolás
+megzsíroz
+megzápul
+megzápult
+megzápít
+megzöldít
+megzörget
+megágyaz
+megáld
+megáldozik
+megáll
+megállapodik
+megállapodott
+megállapodás
+megállapodásra
+megállapodásszerû
+megállapodást
+megállapodástól
+megállapít
+megállapítatlan
+megállapíthatatlan
+megállapítható
+megállapítja
+megállapított
+megállapítás
+megállapítása
+megállapítások
+megállapítást
+megállapító
+megállj!
+megállja
+megállni
+megállni!
+megállt
+megálltam
+megállás
+megállásnyi
+megállásra
+megállít
+megállíthatatlan
+megállítás
+megállító
+megálló
+megállóhely
+megáporodik
+megárt
+megártani
+megás
+megátalkodott
+megátalkodottság
+megátkoz
+megátkozott
+megátkozás
+megédesít
+megédesíti
+megég
+megéget
+megégett
+megégés
+megéhezett
+megéhezik
+megékel
+megél
+megélesít
+megélhetés
+megélhetése
+megélhetéshez
+megélhetési
+megélhetésre
+megélhetést
+megélhetését
+megéljenez
+megélni
+megélénkül
+megélénkült
+megélés
+megélünk
+megénekel
+megépítõ
+megér
+megérdeklõdik
+megérdemel
+megérdemelt
+megérdemelten
+megérez
+megérezted
+megéreztem
+megéri
+megéri?
+megérik
+megérint
+megérintés
+megérjük
+megérkezett
+megérkezhet
+megérkezik
+megérkeztünk
+megérkezés
+megérkezéskor
+megérkezéséig
+megérlel
+megérlelés
+megért
+megérteni
+megértet
+megértetted?
+megérthetõ
+megérti
+megértik
+megértés
+megértõ
+megértõen
+megérzi
+megérzés
+megérés
+megérõ
+megígér
+megígért
+megígértet
+megír
+megírt
+megítél
+megítélés
+megítélése
+megítélésem
+megítélésére
+megízesít
+megízlel
+megízlelés
+megóv
+megóvás
+megõriz
+megõrizni
+megõrjít
+megõrli
+megõrzi
+megõrzés
+megõrzésre
+megõrzésére
+megõrzõ
+megõrzõhely
+megõröl
+megõrül
+megõrült
+megõszít
+megõszül
+megöl
+megölel
+megölelés
+megöli
+megölték
+megölés
+megölése
+megömleszt
+megömlesztés
+megöntöz
+megöntözi
+megöregedés
+megöregszel
+megöregszik
+megörvendeztet
+megörvendeztetett
+megörvendezteti
+megörökít
+megörökítés
+megötszöröz
+megötszörözõdik
+megözvegyült
+megújhodik
+megújhodott
+megújhodás
+megújráztat
+megújul
+megújult
+megújulás
+megújít
+megújítható
+megújított
+megújítás
+megújítása
+megújító
+megússza
+megúszik
+megúszta
+megül
+megüli
+megültet
+megülése
+megünnepel
+megünneplés
+megünneplése
+megüresedett
+megüresedik
+megüresedés
+megüt
+megüti
+megütközik
+megütközés
+megütése
+megütõdik
+megütöm
+megüvegesedik
+megüzen
+mehet
+mehetnék
+mehetsz
+mekeg
+mekegés
+mekegõ
+mekkora
+melankólia
+melankóliás
+melasszal
+melasz
+melaszos
+meleg
+meleg,
+melege
+melegedik
+melegedj
+melegedve
+melegedés
+melegen
+meleggé
+melegháború
+melegház
+melegszik
+melegszívû
+melegség
+melegvérû
+melegágy
+melegében
+melegít
+melegíti
+melegítõ
+melegítõfelsõ
+melegítõnadrág
+mell
+mell-
+mell-lap
+mellbaj
+mellbetegség
+mellbevágó
+mellbimbó
+mellbántalmak
+mellbõség
+mellcsont
+melldísz
+mellehúsa
+mellek
+melles
+mellesleg
+mellett
+mellette
+mellettem
+melletti
+mellfurdancs
+mellfátyol
+mellhártyagyulladás
+mellizmok
+mellizom
+mellkas
+mellkasgyulladás
+mellkast
+mellkendõ
+mellkereszt
+mellkép
+mellképet
+mellkõ
+mellre
+mellre!
+mellrész
+mellszobor
+mellsõ
+melltartó
+melltartós
+melltû
+melluszony
+mellvéd
+mellvédfal
+mellvédõ
+mellvért
+mellé
+mellébeszél
+mellébeszélés
+melléfog
+melléfogás
+melléje
+mellék
+mellék-
+mellék-üzemág
+mellékajtó
+mellékbolygó
+mellékcselekmény
+mellékel
+mellékelt
+mellékelten
+mellékelve
+mellékes
+mellékesemény
+mellékesen
+mellékfoglalkozás
+mellékfolyó
+mellékfolyók
+mellékgondolat
+melléki
+mellékjuttatás
+mellékjövedelem
+mellékjövedelmet
+mellékkereset
+mellékkiállítás
+mellékköltségeket
+mellékkörülmény
+mellékkörülmények
+melléklet
+mellékletek
+mellékmegfejtés
+mellékmegfejtést
+mellékmondat
+melléknap
+melléknév
+melléknévi
+mellékszerepekben
+mellékszerzõdés
+mellékszoba
+melléktantárgy
+melléktermék
+mellékterületei
+mellékutca
+mellékvese
+mellékvonal
+mellékvágány
+mellékvágányra
+mellékzörejek
+mellékág
+mellékállomás
+mellékáram
+mellékáramkör
+melléképület
+mellékíz
+mellékíze
+mellékút
+mellékútvonal
+melléküzemek
+mellélépés
+mellélõ
+mellémegy
+mellének
+mellény
+mellénye
+mellényke
+mellérendelt
+mellérúgás
+mellét
+mellétalálat
+melléütés
+mellõz
+mellõzik
+mellõzés
+mellõzöm
+mellõzött
+mellúszás
+mellû
+melodikus
+melodráma
+melodrámai
+mely
+melybe
+melybõl
+melyek
+melyek?
+melyeket?
+melyet
+melyik
+melyik?
+melyiket
+melyiket?
+melák
+meló
+melóra
+melózik
+membrán
+membránlemez
+membránszivattyú
+mementó
+memorandum
+memorizál
+memória
+memóriája
+memóriáját
+menazséria
+mendegél
+mendemonda
+mendemondák
+menedék
+menedéket
+menedékfülke
+menedékhely
+menedékhelyen
+menedékház
+menedékjog
+menedékjogot
+menedékkikötõ
+menedéklevél
+menekül
+menekülnünk
+menekült
+menekültet
+menekültnek
+menekülve
+menekülés
+menekülési
+menekülõ
+menesztik
+menesztés
+menesztõ
+menesztõs
+menet
+menet!
+menetben
+menete
+menetel
+meneteltet
+menetelés
+menetelõ
+menetet
+menetfúrás
+menetfúró
+menethorony
+menetidõ
+menetirányítás
+menetirányító
+menetjegy
+menetjegyet
+menetjegyvizsgáló
+menetközbeni
+menetlevél
+menetlépés
+menetmángorló
+menetmélység
+menetnapló
+menetokmány
+menetoszlop
+menetparancs
+menetrend
+menetrendszerû
+menetsebesség
+menetszabályozó
+menetvonal
+menetvágás
+menhaden
+menhely
+menhelye
+menhir
+meniszkusz
+menj
+menjek
+menjek?
+menjen
+menjen,
+menjen-e,
+menjenek
+menjo
+menjünk
+menlevél
+menned
+mennek
+mennem
+menni
+menni!
+mennie
+mennie?
+menny
+mennybemenetel
+mennybolt
+mennydörgés
+mennydörgõ
+mennydörög
+mennyei
+mennyezet
+mennyezetburkolat
+mennyezetes
+mennyezeti
+mennyezetsimító
+mennyezetvilágítás
+mennyezetû
+mennyi
+mennyi?
+mennyibe
+mennyiben?
+mennyire
+mennyire!
+mennyiség
+mennyiségben
+mennyisége
+mennyiséget
+mennyiségi
+mennyiségû
+mennyit
+mennykõ
+mennykõcsapás
+mennyország
+mennyországban
+mennél
+mennünk
+menstruáció
+ment
+menta
+mentacukorka
+mentalitás
+menteget
+mentegeti
+mentegetés
+mentegetõ
+mentegetõdzik
+mentegetõdzés
+mentegetõzik
+mentegetõzés
+mentek?
+mentes
+mentesség
+mentesít
+mentesítés
+mentesítõ
+mentesülés
+mentezsinór
+menthetetlen
+menthetetlenül
+menthetõ
+menti
+mentol
+mentolos
+mentor
+ments!
+mentsvár
+mentsvárként
+mentség
+mentségedre?
+mentséget
+mentségére
+mentségül
+mentálisan
+mentás
+mentében
+mentén
+mentés
+mentési
+mentõ
+mentõautó
+mentõautót
+mentõautóval
+mentõcsapat
+mentõcsónak
+mentõkabin
+mentõkocsi
+mentõkötél
+mentõláda
+mentõlánc
+mentõlétra
+mentõmellény
+mentõmunka
+mentõrév
+mentõs
+mentõszolgálat
+mentõöv
+meny
+menyasszony
+menyasszonyi
+menyecske
+menyegzõ
+menyegzõi
+menyét
+menyéttel
+menza
+menés
+menõ
+menõen
+menü
+mer
+mer,
+mercerizál
+mercerizált
+mered
+meredek
+meredeken
+meredekség
+meredeksége
+meredt
+meredtség
+meredély
+mereng
+merengés
+merengõ
+mereszt
+mereszti
+merev
+mereven
+merevgörcs
+merevkór
+merevrészeg
+merevség
+merevít
+merevítés
+merevítõ
+merevítõelem
+merevítõvel
+meri
+meridiánon
+merinó
+merisztéma
+merje
+merjek-e
+merkaptán
+mernék
+merre
+merre?
+merrefelé?
+merrõl
+mersz
+mersz-e
+mersze
+mert
+merénylet
+merényletet
+merénylõ
+merész
+merészel
+merészel?
+merészeled?
+merészen
+merészkedik
+merészség
+merít
+merített
+merítés
+merítõ
+merítõháló
+merítõkanál
+merítõkerék
+merítõvödör
+merõ
+merõben
+merõedény
+merõkanál
+merõleges
+merõlegesen
+merül
+merült
+merülten
+merülve
+merülési
+merüléskülönbözet
+merülõ
+merülõfal
+merülõforraló
+mese
+mesebeli
+mesebeszéd
+mesemondó
+meseszövés
+mesevilág
+meskál
+mesothelium
+messiás
+messiási
+messze
+messzebb
+messzebbi
+messzehangzó
+messzeható
+messzelátó
+messzelátós
+messzemenõ
+messzemenõen
+messzenyúló
+messzeség
+messzi
+messzire
+messzirõl
+mester
+mestere
+mesterember
+mesteremberek
+mestergerenda
+mesterhármas
+mesteri
+mesterkedik
+mesterkedve
+mesterkedés
+mesterkedése
+mesterkedései
+mesterkéletlen
+mesterkéletlenség
+mesterkéletlenül
+mesterkélt
+mesterkélten
+mesterkéltség
+mesterkéltté
+mesterlövész
+mestermû
+mesterpilóta
+mesterség
+mesterségbeli
+mestersége?
+mesterséges
+mesterségesen
+mesterségesség
+mesterséget
+mesterségéhez
+mestert
+meszel
+meszelt
+meszelés
+meszes
+meszesbe
+meszesgödör
+meszez
+mesél
+mesél!
+mesélik
+mesélj!
+mesélni?
+mesés
+mesésen
+mesét
+mesüge
+meta-ügylet
+metafora
+metalimnion
+metallokerámia
+metamorfózis
+metapszichika
+metastabilis
+meteor
+meteor-
+meteorikus
+meteorkõ
+meteorológiai
+metilbenzol
+metodista
+metodizmus
+metopé
+metrikai
+metrikus
+metronóm
+metropolita
+metrum
+metró-megálló
+metsz
+metszet
+metszet-
+metszetben
+metszetes
+metszetet
+metszetrajz
+metszett
+metszék
+metszés
+metszéspont
+metszésíve
+metszésû
+metszõ
+metszõen
+metszõfog
+metszõolló
+metszõpont
+metszõsík
+metán
+metánosítás
+metélt
+metélõhagyma
+meténg
+mexikói
+mez
+mezbe
+mezben
+mezei
+mezejére
+mezozoikum
+mezsgye
+mezsgyekaró
+meztelen
+meztelenre
+meztelenség
+meztelenül
+mezítelenség
+mezítláb
+mezítlábas
+mezõ
+mezõgazdaság
+mezõgazdasági
+mezõgazdálkodás
+mezõkre
+mezõn
+mezõny
+mezõnyben
+mezõnyhatárjel
+mezõnyt
+mezõvédõ
+mgmerevít
+mialatt
+mianeve
+miatt
+miatta!
+miattad
+miattam
+miatyánk
+miazma
+miazmás
+mibe
+miben?
+mibõl
+mibõl?
+micsoda
+mielõbb
+mielõtt
+mifelénk
+miféle
+miféle?
+mignon
+migrén
+migrénes
+migrénszerû
+mihaszna
+mihelyt
+mihez
+miket
+mikor
+mikorra
+mikrofilm
+mikrofilm-lemez
+mikrofilm-leolvasó
+mikrofilmes
+mikrofilmet
+mikrofilmez
+mikrofilmtartó
+mikrofon
+mikrofondugattyú
+mikrofonképesség
+mikrofonszerûség
+mikrogravírozó
+mikrográf
+mikrohullámú
+mikrokamera
+mikrométercsavar
+mikroszkopikus
+mikroszkopikusan
+mikroszkóp
+miként
+miközben
+milady-nek
+milicista
+militarista
+militarizmus
+militarizál
+militarizálás
+miliõ
+millennista
+millennium
+millenniumra
+millennárius
+milligramm
+milliméter
+milliméterpapír
+milliomos
+milpoen
+milyen
+milyen?
+milícia
+mimika
+mimikri
+mimóza
+min
+minap
+minaret
+mind
+mindaddig,
+mindahányan
+mindamellett
+mindannyian
+mindannyiunk
+mindaz
+mindazok
+mindazonáltal
+mindeddig
+mindegy
+mindegy!
+mindegy?
+mindegyik
+mindegyikünk
+minden
+minden!
+minden,
+mindenbe
+mindenben
+mindenbõl
+mindene
+mindenek
+mindenekelõtt
+mindenem,
+mindenen
+mindenes
+mindenesetre
+mindenestõl
+mindenestül
+mindenfelé
+mindenfelõl
+mindenféle
+mindenfélét
+mindenható
+mindenhez
+mindenhol
+mindenhonnan
+mindenhova
+mindenhová
+mindenirányú
+mindenit!
+mindenki
+mindenki,
+mindenkihez
+mindenkinek
+mindenkinek!
+mindenkinél
+mindenkire
+mindenkirõl
+mindenkit
+mindenkor
+mindenkori
+mindenkorra
+mindenképp
+mindenképpen
+mindennap
+mindennapi
+mindennapos
+mindennek
+mindennek!
+mindennél
+mindenre
+mindenre,
+mindenszentek
+mindenség
+mindent
+mindentudó
+mindentõl
+mindenáron
+mindenért
+mindenórás
+mindenünnen
+mindenütt
+mindezek
+mindezeken
+mindezt
+mindezzel
+mindig
+mindinkább
+mindjárt
+mindketten
+mindkettõ
+mindkét
+mindnyájan
+minduntalan
+mindvégig
+mindörökké
+mindörökre
+mindössze
+minek
+mineralizál
+miniaturista
+miniatúra
+miniatûr
+miniatûrfestõ
+miniatürizál
+minimalista
+minimalizál
+minimális
+minimálisra
+miniszoknya
+miniszter
+miniszterelnök
+miniszterelnöki
+miniszterelnökség
+miniszterhelyettes
+miniszteri
+miniszterpapír
+miniszteré
+minisztérium
+minisztériuma
+minor
+mint
+minta
+mintadarab
+mintadeszka
+mintafonál
+mintahímzés
+mintakép
+mintaképnek
+mintaképül
+mintakészítés
+mintakészítõ
+mintapréselés
+mintapéldány
+mintaszalag
+mintaszerû
+mintaszerûen
+mintaszerûség
+mintaterem
+mintatáska
+mintavevõ
+mintavétel
+mintavételi
+mintegy
+mintha
+minthogy
+mintsem
+mintájára
+mintájú
+mintára
+mintás
+mintásan
+mintát
+mintával
+mintáz
+mintázat
+mintázatú
+mintázás
+mintázó
+mintázóvas
+minuciózus
+minuciózusan
+minálunk
+minél
+minõség
+minõségben
+minõsége
+minõségemben
+minõséget
+minõségi
+minõségû
+minõsít
+minõsített
+minõsíthetetlen
+minõsítés
+minõsül
+minõsülõ
+mirabolan
+mire
+mirigy
+mirigy-
+mirigybántalom
+mirigydaganat
+mirigyduzzanat
+mirigyeltávolítás
+mirigyes
+mirigyfájdalom
+mirigygyomor
+mirigygyulladás
+mirigyrák
+mirigyszerû
+mirigyszövet
+mirigytan
+mirigytúltengés
+mirtusz
+mirõl
+mise
+misekönyv
+misemondás
+misemondó
+miseszövetsége
+misetilalom
+miskulancia
+mismás
+missouri
+misszionárius
+misztikus
+misztérium
+misére
+misét
+misézés
+misézéstõl
+misézõ
+mit
+mit!
+mit?
+mitesszer
+mitikus
+mitológia
+mitra
+mitugrász
+mitévõ
+miután
+mivel
+mivel?
+mivolta
+mivoltát
+miákol
+miért
+miért?
+mnemonika
+mnemonikusan
+moaré
+moaréselyem
+moarészövet
+moarírozás
+mobile
+mobilitás
+moccan
+moccanj!
+moccanj,
+moccansz,
+moccanás
+mocorog
+mocsaras
+mocskol
+mocskoló
+mocskolódik
+mocskolódás
+mocskos
+mocskosság
+mocsok
+mocsokfészek
+mocsoktalan
+mocsár
+mocsárba
+mocsári
+mocsárlakó
+mocsárláz
+mocsárlázzónák
+mocsárvidék
+modell
+modellként
+modellt
+modellál
+modern
+modernizmus
+modernizáció
+modernizál
+modernség
+modor
+modora
+modorban
+modoros
+modorosan
+modorosság
+modorral
+modortalan
+modortalanság
+modorában
+modorú
+modulusos
+modulusz
+moduláció
+modulál
+modulálatlan
+modus
+modális
+mogorva
+mogorvaság
+mogorván
+mogyoró
+mogyoróbarna
+mogyoróbokor
+mogyoróhagyma
+mogyorók
+mogyorós
+mogyoróvaj
+moha
+mohair
+mohalepte
+mohamedán
+mohamedánizmus
+moher
+mohikán
+mohó
+mohón
+mohóság
+mokasszin
+mokány
+molalitás
+molaritás
+molekula
+molekulaszerkezet
+molekuláris
+molesztál
+molesztálás
+molett
+moll
+moll-hangsor
+molla
+molluszkák
+molnár
+molnárevezõ
+molnármesterség
+molnárszínû
+molnárság
+molochgyík
+molton
+moly
+molyirtó
+molylepke
+molyálló
+mond
+mond!
+monda
+mondabeli
+mondai
+mondakör
+mondani
+mondani!
+mondani,
+mondani?
+mondanivaló
+mondanivalója
+mondanivalóját
+mondanod
+mondanom
+mondasz
+mondasz,
+mondat
+mondatok
+mondattan
+mondd
+mondhatja
+mondhatni
+mondhatnánk,
+mondhatom!
+mondható
+mondj
+mondja
+mondjak
+mondjam
+mondjon
+mondják
+mondják,
+mondod
+mondod?
+mondok
+mondom
+mondom!
+mondom,
+mondott
+mondott!
+mondott,
+mondott?
+mondotta
+mondottakra
+mondta
+mondta,
+mondtam
+mondták!
+mondtál
+mondtál?
+mondva
+mondás
+mondása
+mondén
+mondó
+mondókából
+mondókájában
+mondókájában,
+mongol
+mongúz
+monitor
+monitor-programrendszer
+monitoros
+monitorrendszer
+monogram
+monogramra
+monográfia
+monográfiaíró
+monohidrát
+monokli
+monoklinális
+monoklit
+monokróm
+monolit
+monologizál
+monológ
+monománia
+monomániákus
+monomániás
+monopolista
+monopolizál
+monopólium
+monopóliumot
+monotip
+monoton
+monszinyor
+monszinyore
+monszun
+montíroz
+montírozás
+monumentális
+moníliás
+moped
+mopszli
+moraj
+morajlik
+morajlás
+moralitás
+moralizál
+morbiditás
+morc
+morcos
+morcosan
+morcosság
+mord
+mordály
+morfin
+morfium
+morfondíroz
+morféma
+morgolódás
+morgás
+morgást
+morgó
+morgóhal
+mormog
+mormogó
+mormol
+mormolás
+mormota
+morog
+morrantás
+morze
+morzejelek
+morzeábécé
+morzsa
+morzsaképzõdés
+morzsoló
+morzsolódik
+morzsolódás
+morzsolódó
+morzsológép
+morzsál
+morál
+morális
+moréna
+morózus
+morózusan
+mos
+mosakodás
+mosakodó
+mosakszik
+mosatlan
+mosdatlan
+mosdás
+mosdó
+mosdócsésze
+mosdófülke
+mosdófülkés
+mosdóhelyiség
+mosdókagyló
+mosdókesztyû
+mosdóruha
+mosdótál
+mosdóval
+mosdóvíz
+mosdóállvány
+moslék
+mosoda
+mosodai
+mosogat
+mosogatás
+mosogató
+mosogatógép
+mosogatóhelyiség
+mosogatólány
+mosogatólé
+mosogatórongy
+mosogatóvíz
+mosollyal
+mosoly
+mosolygó
+mosolygós
+mosolyog
+mosolyogj
+mosolyogva
+mosolyt
+mosolytalan
+mosolytalanul
+mosom
+mosott
+mossa
+most
+most!
+mostani
+mostanra
+mostantól
+mostanában
+mostanáig
+mostanára
+mostohaanya
+mostohaapa
+mostohafiú
+mostohalány
+mostohatestvér
+moszat
+moszkitó
+moszkitóháló
+moszkító
+mosás
+mosási
+mosást
+mosó-
+mosódik
+mosógép
+mosókonyha
+mosólap
+mosólapicka
+mosólúg
+mosómedve
+mosómedveprém
+mosónõ
+mosópad
+mosópor
+mosószer
+mosószér
+motel
+motiváció
+motivációs
+motivál
+motokerékpár-pótülés
+motolla
+motollában
+motollál
+motor
+motor-gyorsulás
+motorban)
+motorbenzin
+motorburkolat
+motorcsónak
+motorhiba
+motorháztetõ
+motorizál
+motorizált
+motorja
+motorjacht
+motorkerékpár
+motorkerékpár-versenypálya
+motorkocsi
+motorokban
+motoros
+motorozik
+motort
+motorvédõ
+motorüzemanyag
+motoszkál
+motoz
+motozás
+motozó
+motring
+mottó
+motyog
+motyogás
+motyogó
+motyó
+motívum
+mozaik
+mozaikjáték
+mozaikkép
+mozaiklap
+mozaikos
+mozaikrejtvény
+mozaikszerûen
+mozarab
+mozdony
+mozdonyhóeke
+mozdonyvezetõ
+mozdul
+mozdulat
+mozdulatait
+mozdulatlan
+mozdulatlanság
+mozdulatlanul
+mozdulatmûvészet
+mozdulatokat,
+mozdulatokkal
+mozdulatot
+mozdulj!
+mozdulni
+mozdulok!
+mozdít
+mozdítaná
+mozdítható
+mozdítja
+mozdított
+mozdítása
+mozgalmas
+mozgalmasság
+mozgalom
+mozgat
+mozgatható
+mozgatja
+mozgatott
+mozgatás
+mozgató
+mozgatója
+mozgolódik
+mozgolódó
+mozgás
+mozgás!
+mozgása
+mozgásba
+mozgásban
+mozgásdiagramm
+mozgáshiány
+mozgási
+mozgásképesség
+mozgásképtelenné
+mozgásmennyiség
+mozgást
+mozgástan
+mozgástér
+mozgását
+mozgású
+mozgékony
+mozgékonyság
+mozgó
+mozgódaru
+mozgókonyha
+mozgókép
+mozgóképességétõl
+mozgókötélzet
+mozgólépcsõ
+mozgósít
+mozgósítás
+mozgósító
+mozi
+moziba
+moziban?
+mozibérlõ
+mozifilm
+mozigép
+mozigépház
+mozigépész
+moziplakát
+mozis
+mozitulajdonos
+mozivászon
+mozog
+mozog,
+mozogj!
+mozogni
+mozsár
+mozsárban
+mozsártörõ
+mozsárágyú
+mozzanat
+mucikám
+mucsa
+mucsai
+muff
+mufti
+muhar
+muki
+mukkanni
+muksó
+mulandó
+mulandóak
+mulandóság
+mulaszt
+mulasztás
+mulasztási
+mulasztást
+mulat
+mulatozik
+mulatozás
+mulatozó
+mulatság
+mulatságból
+mulatságos
+mulatságosan
+mulatságosság
+mulatt
+mulattat
+mulattatás
+mulattató
+mulattunk
+mulatás
+mulató
+mulatós
+mullah
+mullpólya
+multimilliomos
+mulya
+mumifikálódik
+mumpsz
+mumus
+munka
+munkaasztal
+munkabefejezés
+munkabeszüntetés
+munkabuzi
+munkabér
+munkaciklus
+munkacsoport
+munkadarab
+munkadarabba
+munkadarabot
+munkadíj
+munkaerõ
+munkaerõ-felvétel
+munkaerõ-toborzás
+munkaerõ-áramlás
+munkaerõ-összeírás
+munkaerõ-özönlés
+munkaeszközök
+munkafeladat
+munkafelfüggesztés
+munkafeltételek
+munkafelügyelõ
+munkafüzet
+munkahely
+munkahelyet
+munkaidõ
+munkaidõ-ellenõr
+munkaidõvel
+munkaigényes
+munkakerék
+munkakerülés
+munkakerülõ
+munkaképes
+munkaképesség
+munkaképtelen
+munkaképtelenné
+munkaképtelenség
+munkaköpeny
+munkakör
+munkakörû
+munkaközvetítõ
+munkaközösség
+munkalap
+munkalehetõség
+munkaléc
+munkamegosztás
+munkamenet
+munkanemek
+munkanélküli
+munkanélküliség
+munkaokmány
+munkapad
+munkaruha
+munkaszakasz
+munkaszervezési
+munkaszint
+munkaszintek
+munkaszolgálat
+munkaszünet
+munkaszüneteltetés
+munkaszüneti
+munkateljesítõ
+munkatempót
+munkaterhelés
+munkaterv
+munkaterület
+munkatárs
+munkatársak
+munkaverseny
+munkavezetõ
+munkavállaló
+munkavégzés
+munkazubbony
+munkaállomás
+munkaállvány
+munkaállás
+munkaíró
+munkaõrült
+munkaügyi
+munkaütem
+munkába
+munkában
+munkából
+munkádban?
+munkához
+munkája
+munkájába
+munkáját
+munkájától
+munkájával
+munkák
+munkákat
+munkákból
+munkál
+munkálat
+munkálatok
+munkálkodik
+munkált
+munkán
+munkának
+munkára
+munkás
+munkása
+munkásanyag
+munkásbakancs
+munkásbrigád
+munkáscsapat
+munkáselbocsátás
+munkásellenõrzõ
+munkásfelvétel
+munkáslaktanya
+munkáslétszám
+munkásnyúzó
+munkások
+munkásokat
+munkásosztály
+munkással
+munkásvonat
+munkásüdülõ
+munkát
+munkával
+muníció
+muri
+murit
+murok
+murva
+murvás
+musical
+muskátli
+muskéta
+muskétás
+muskétások
+must
+mustra
+mustrál
+mustár
+mustárfû
+mustárliszt
+mustárrepcsény
+muszlin
+muszlinüveg
+muszáj
+mutagén
+mutasd
+mutat
+mutatja,
+mutatkozik
+mutatkoznak
+mutatkozott
+mutatkozó
+mutatni
+mutatod
+mutatvány
+mutatványok
+mutatványos
+mutatás
+mutató
+mutatóit
+mutatómûszer
+mutatópálca
+mutatós
+mutatószám
+mutatóujj
+mutatóujjával
+mutogat
+mutogatja
+mutogatás
+mutogatása
+mutter
+mutyizik
+mutáció
+mutál
+mutálás
+mutáns
+muzeális
+muzikális
+mágia
+mágikus
+mágiában
+mágiával
+máglya
+máglyahalál
+mágnes
+mágneses
+mágnesesség
+mágnesez
+mágneskapcsoló
+mágnestû
+mágnesvasérc
+mágnesvasút-
+mágnesvasúttal
+mágnás
+mágus
+mához
+máig
+máj
+mája
+májas
+májfolt
+májgombóc
+májmételykór
+május
+májvértolulás
+májzsugorodás
+mák
+mákfej
+mákja
+mákszemek
+máktok
+málha
+málhakocsi
+málhazsák
+málhás
+mállott
+mállás
+mállási
+málna
+málnabokor
+málnaecet
+málnafaj
+málnaszörp
+mált
+máltai
+mályva
+mályvacukor
+mályvarózsa
+málé
+málészájú
+máma
+mámor
+mámoros
+mámorosan
+mámorossá
+mámort
+mámorító
+mángorlás
+mángorló
+mángorlófa
+mángorol
+mánia
+mániákus
+mániás
+mániás-depressziós
+már
+már!
+már,
+már-már
+mára
+március
+márga
+márgával
+márgáz
+máriaüveg
+máris
+márka
+márt
+mártogat
+mártogató
+mártott
+mártás
+mártásnak
+mártásos
+mártásoscsésze
+mártással
+mártássá
+mártást
+mártír
+mártíromság
+mártírt
+mártófolyadék
+márvány
+márványborítású
+márványos
+márványozott
+máról
+máról-holnapra
+más
+más,
+mása
+másfelé
+másfelõl
+másformán
+másfél
+másféle
+másféleség
+másfélszer
+máshitû
+máshogyan
+máshol
+máshollét
+máshova
+máshová
+másik
+másik?
+másikat
+másikba
+másikig
+másikon
+másikra
+máskor
+másként
+másképp
+másképpen
+máskülönben
+másmilyen
+másnak
+másnap
+másnaponként
+másnapos
+másnaposság
+másnapra
+másnál
+másod
+másod-vitorlamester
+másodcsónak
+másodfokon
+másodfokú
+második
+másodiknak
+másodikon
+másodkapitány
+másodkézbõl
+másodlagos
+másodlat
+másodnaponként
+másodnyersanyag
+másodosztályon
+másodosztályú
+másodparancsnok
+másodperc
+másodpercmutató
+másodpercre
+másodpilóta
+másodpéldány
+másodrangú
+másodrendû
+másodszor
+másodszorra
+másodtengely
+másodtiszt
+másodvirágzás
+másodállás
+másodéves
+mások
+másokat
+másokhoz
+másokkal
+másoknak
+másokra
+másol
+másolat
+másolata
+másolatot
+másolattal
+másolás
+másoló
+másolóeljárás
+másológép
+másolókeret
+másolókeretbe
+másolópapír
+másolóüveglap
+máson
+másra
+másrészt
+másról
+mással
+mássalhangzó
+mássalhangzó-rendszer
+mássalhangzó-változás
+mássalhangzói
+mássalhangzók
+mássza
+másszor
+mást
+mást,
+mástól
+másutt
+másvilág
+másvilággal
+másvilágra
+mászik
+mászkál
+mászva
+mászás
+mászást
+mászó
+mászóka
+mászórúd
+mászóvas
+másállapot
+másállapotban
+másé
+másért
+másét
+máséval
+mátka
+mátkapár
+mátkaság
+mátrix
+mától
+máz
+mázas
+mázatlan
+mázli
+mázlija
+mázlis
+mázlista
+mázol
+mázolva!
+mázolás
+mázoló
+mázológép
+mázsa
+mázsál
+mázzal
+mécsbél
+mécsvirág
+méd
+médium
+médiumból
+még
+még,
+még?
+méghozzá
+mégis
+mégiscsak
+mégpedig
+mégse!
+mégsem!
+mégy
+méh
+méhcsalád
+méhfû
+méhhurok
+méhkas
+méhmagzat
+méhmagzattal
+méhpempõ
+méhraj
+méhrajt
+méhsejt
+méhsejthûtõ
+méhtetû
+méhviasz
+mélabú
+mélabús
+méltat
+méltatlan
+méltatlankodik
+méltatlankodva
+méltatlankodás
+méltatlankodó
+méltatlanra
+méltatlanság
+méltatlanul
+méltatott
+méltatás
+méltán
+méltánylás
+méltányló
+méltányol
+méltányos
+méltányosak
+méltányosan
+méltányosság
+méltánytalan
+méltánytalanság
+méltánytalanul
+méltó
+méltó,
+méltóan
+méltóság
+méltósága
+méltósággal
+méltóságod
+méltóságos
+méltóságot
+méltóságteljes
+méltóságteljesen
+méltóságteljesség
+méltóságához
+méltóságán
+méltóságának
+méltóztatik
+mély
+mélye
+mélyebb
+mélyebbre
+mélyebbé
+mélyed
+mélyedés
+mélyedésben
+mélyedésképzõdés
+mélyen
+mélyfúrás
+mélyhangszóró
+mélyhegedû
+mélyhût
+mélyhûtés
+mélyhûtõ
+mélyhûtõbe
+mélylélektan
+mélymûvelés
+mélynyomás
+mélynyomóforma-készítõ
+mélynövésû
+mélypont
+mélypontot
+mélyre
+mélyreható
+mélység
+mélységben
+mélységes
+mélységesen
+mélységet
+mélységjelzõ
+mélységmérés
+mélységmérõ
+mélységélesség
+mélytányér
+mélyvízi
+mélyéig
+mélyén
+mélyépítés
+mélyére
+mélyérõl
+mélyít
+mélyített
+mélyítés
+mélyút
+mélyül
+mélyütés
+mélázva
+mélázó
+mén
+ménes
+ménkû
+ménkû!
+méntelep
+mér
+mérce
+méreg
+méregbe
+méregdrága
+méregelvonás
+méreget
+méregfog
+méregfogát
+méregtelenít
+méregtelenítés
+méregzsák
+méret
+méretadat
+méretben
+méretcsoportosítás
+méretcsökkentés
+méretek
+méretekben
+méreteket
+méretellenõrzés
+méreten
+méretet
+méretez
+méretezés
+mérethez
+mérethitelesítés
+méretkimutatás
+méretkimutatást
+méretre
+mérettûrések
+méretû
+mérföld
+mérföldeket
+mérföldes
+mérföldet
+mérgelõdik
+mérgelõdõ
+mérges
+mérgesek
+mérgesen
+mérgespók
+mérgesít
+mérgesítette
+mérget
+mérgezett
+mérgezés
+mérgezõ
+mérgében
+mérgére
+mérgét
+mérhetetlen
+mérhetetlenség
+mérhetetlenül
+mérhetõ
+méri
+mérkõzik
+mérkõzés
+mérkõzést
+mérleg
+mérlegcsésze
+mérlegel
+mérlegelés
+mérleget
+mérleghinta
+mérleghintázik
+mérlegkar
+mérlegkimutatás
+mérlegnyelv
+mérlegpálca
+mérlegrúd
+mérlegszámla
+mérlegállás
+mérmû
+mérnök
+mérnöki
+mérnökszakértõ
+mérnökség
+mérnökök
+mérsékel
+mérsékeletlen
+mérsékelt
+mérsékelten
+mérséklet
+mérsékletes
+mérsékletesen
+mérsékletesség
+mérsékli
+mérséklés
+mérséklõ
+mérséklõdik
+mért
+mértan
+mértani
+mérten
+mértében
+mérték
+mértékadó
+mértékben
+mértékben,
+mértéke
+mértékegység
+mértékegysége
+mértéken
+mértékes
+mértéket
+mértékig
+mértékkel
+mértékletes
+mértékletesen
+mértéknélküliség
+mértékre
+mértékrendszer
+mértékszabóság
+mértéktartó
+mértéktelen
+mértéktelenség
+mértéktelenül
+mértékét
+mértékû
+mérv
+mérvadó
+mérés
+mérések
+mérésnél
+mérõ
+mérõedény
+mérõelektróda
+mérõeszköz
+mérõeszközök
+mérõhenger
+mérõkészülék
+mérõlombik
+mérõláda
+mérõléc
+mérõmûszer
+mérõpad
+mérõrúd
+mérõszalag
+mérõszonda
+mérõszám
+mérõzsinór
+mérõón
+mérõónnal
+mérõónt
+mérõóra
+mésszel
+mész
+mész?
+mészfesték
+mészhabarcs
+mészhidrát
+mészhéj
+mészhéjú
+mésziszap
+mészkõ
+mészoltó
+mészszerû
+mésztartalmú
+mésztej
+mésztufa
+mészvízzel
+mészárlás
+mészárol
+mészáros
+mészáros-szakma
+mészároshorog
+mészárszék
+mészégetõ
+métely
+méter
+méter-
+méteres
+métermázsa
+métermérték
+méterrel
+méterrendszer
+méterrendszerû
+méteráru
+méz
+mézes
+mézes-mázos
+mézesmázos
+mézesmázosság
+mézfû
+mézga
+mézgagolyó
+mézgalabdacs
+mézgás
+mézgásfa
+mézharmat
+mézzel
+mézédes
+mézédesség
+míg
+mímel
+mímes
+mínium
+míniumfesték
+mínusz
+mínuszjel
+mísz
+mísze
+mítosz
+mód
+módban
+módbeli
+módbeliség
+módfelett
+módi
+módja
+módjában
+módjára
+módját
+módok
+módon
+módosul
+módosulás
+módosuló
+módosít
+módosítható
+módosított
+módosítás
+módosító
+módot
+módozat
+módra
+módszer
+módszere
+módszeres
+módszeresen
+módszert
+módszertelen
+módus
+móka
+mókuci
+mókus
+mókuskerék
+mókusom
+mókához
+mókák
+mókás
+mókázik
+mókázás
+mókázó
+mól
+móló
+mólófej
+mór
+móresre
+mószerol
+mózesi
+mózeskosár
+mögé
+mögött
+mögötte
+mögöttem
+mögöttes
+mögötti
+múlandó
+múlandóan
+múlandóság
+múlhatatlan
+múlhatatlanul
+múlható
+múlik
+múlik,
+múlt
+múlt,
+múltat
+múltba
+múltját
+múltra
+múltán
+múlté
+múltú
+múlva
+múlás
+múlékony
+múlékonyság
+múló
+múlóban
+múmia
+múmiává
+múzeum
+múzeumi
+múzeumvezetõ
+múzsa
+múzsája
+mû-
+mûalkotás
+mûanya
+mûanyag
+mûanyagdugó
+mûanyaggal
+mûanyagzacskó
+mûarany
+mûasztalos
+mûbíráló
+mûbõr
+mûbútorasztalos
+mûcsarnok
+mûemlék
+mûemléki
+mûfaj
+mûfog
+mûfogak
+mûfogsor
+mûfogás
+mûhely
+mûhelyi
+mûhelykocsi
+mûhelyrajz
+mûhold
+mûjég
+mûjégpálya
+mûkedvelõ
+mûkertész
+mûkertészet
+mûkifejezés
+mûkincs
+mûkõ
+mûködik
+mûködni
+mûködtet
+mûködtetés
+mûködtetõ
+mûködés
+mûködésbe
+mûködésben
+mûködése
+mûködéshez
+mûködési
+mûködészavar
+mûködését
+mûködésû
+mûködõ
+mûködõképes
+mûködõképesség
+mûlegyet
+mûlesiklás
+mûlovaglási
+mûlovagló
+mûlovaglónõ
+mûlovar
+mûlovarnõ
+mûláb
+mûlégy
+mûmellékletek
+mûmárvány
+mûnyelven
+mûnyomópapír
+mûremek
+mûrepülés
+mûrepülést
+mûselyem
+mûselyemanyag
+mûselyemszál
+mûsor
+mûsordarab
+mûsorközlés
+mûsoron
+mûsoros
+mûsorra
+mûsorról
+mûsorszám
+mûsorszórás
+mûsort
+mûsorvezetõ
+mûstoppolás
+mûszabadgyakorlat
+mûszak
+mûszakbeosztás
+mûszaki
+mûszakilag
+mûszakon
+mûszer
+mûszerasztal
+mûszerek
+mûszereket
+mûszerekkel
+mûszeres
+mûszerezés
+mûszerfal
+mûszerhasználat
+mûszerkészlet
+mûszerrel
+mûszert
+mûszertábla
+mûszerv
+mûszerállás
+mûszerész
+mûszerészeszterga
+mûszív
+mûszó
+mûtag
+mûtani
+mûterem
+mûteremlakás
+mûtermék
+mûtrágya
+mûtárgy
+mûtárgyak
+mûtét
+mûtétet
+mûtéti
+mûtétileg
+mûtõ
+mûtõasztal
+mûtõlámpa
+mûtõs
+mûtõsnõ
+mûtõsruha
+mûtõszolga
+mûugrás
+mûugró
+mûugróbajnokság
+mûvaj
+mûve
+mûve!
+mûvei
+mûveit
+mûvek
+mûvel
+mûvelet
+mûveletelem
+mûveleti
+mûveletlen
+mûvelhetõ
+mûvelni
+mûvelt
+mûveltetõ
+mûveltség
+mûvelés
+mûvelésfejlesztés
+mûvelési
+mûvelésre
+mûvelésû
+mûvelõdés
+mûvelõdési
+mûvet)
+mûvezetõ
+mûvi
+mûvégtag
+mûvész
+mûvészet
+mûvészetben
+mûvészete
+mûvészetek
+mûvészeti
+mûvészetéhez
+mûvészi
+mûvészieskedõ
+mûvésziesnek
+mûvészietlen
+mûvészkedõ
+mûvésznév
+mûvészvilág
+mûzsír
+mûértés
+mûértõ
+mûút
+müge
+mütyürke
+müzli
+na!
+na-na!
+nacionalista
+nacionalizmus
+nadragulya
+nadrág
+nadrágba
+nadrágfelhajtás
+nadrághajtóka
+nadrágjába
+nadrágjából
+nadrágjának
+nadrágkosztüm
+nadrágot
+nadrágra
+nadrágszár
+nadrágszíj
+nadrágszíjat
+nadrágszíjjal
+nadrágtartó
+nadrágzseb
+nadálytõ
+nadír
+naftalin
+naftamaradék
+naggyá
+nagy
+nagy,
+nagy-belt
+nagyagy
+nagyanya
+nagyapa
+nagyapai
+nagyarányú
+nagyasszony
+nagyban
+nagybani
+nagybecskerek
+nagybeszédû
+nagybetû
+nagybetûs
+nagybirtokos
+nagybácsi
+nagybélû
+nagybérlõ
+nagybõgõ
+nagydarab
+nagydobra
+nagydolgozik
+nagydolog
+nagydíj
+nagyevõ
+nagyfejû
+nagyfejûek
+nagyfokú
+nagyfrekvencia
+nagyfrekvenciás
+nagygalléros
+nagygazda
+nagygyûlés
+nagyhangú
+nagyhangúan
+nagyhangúság
+nagyharang
+nagyhasú
+nagyhét
+nagyhüvelyû
+nagyi
+nagyigényû
+nagyiparos
+nagyivó
+nagyjavítás
+nagyjavítást
+nagyjutalom
+nagyjában
+nagyjából
+nagykabát
+nagykalapács
+nagykapu
+nagykendõ
+nagykerekû
+nagykereskedelmi
+nagykereskedõ
+nagykereszt
+nagykeresztese
+nagykeservesen
+nagykorú
+nagykorúság
+nagykutya
+nagyképû
+nagyképûen
+nagyképûsködik
+nagyképûség
+nagykés
+nagykövet
+nagykövetség
+nagyközönség
+nagylelkû
+nagylelkûen
+nagylelkûség
+nagylelkûségi
+nagylemez
+nagylevelû
+nagylábon
+nagylátószögû
+nagymama
+nagymellû
+nagymenõ
+nagymestere
+nagymise
+nagyméretû
+nagymértékben
+nagymérvû
+nagynak
+nagynehezen
+nagynyomású
+nagynéni
+nagyobb
+nagyobbacska
+nagyobbik
+nagyobbodik
+nagyobbodás
+nagyobbra
+nagyobbít
+nagyobbítás
+nagyok
+nagyokat
+nagyokos
+nagyol
+nagyolló
+nagyolva
+nagyolvasztó
+nagyolvasztó-torokgáz
+nagyológyalu
+nagyon
+nagyopera
+nagyorrú
+nagyot
+nagyothalló
+nagypapi
+nagypéntek
+nagyra
+nagyrabecsülés
+nagyravágyás
+nagyravágyó
+nagyrészt
+nagyszabású
+nagyszabásúan
+nagyszemû
+nagyszerû
+nagyszerû!
+nagyszerûen
+nagyszerûség
+nagyszájú
+nagyszájúság
+nagyszámú
+nagyszótár
+nagyszülõk
+nagyság
+nagysága
+nagyságingadozási
+nagyságok
+nagyságrend
+nagyságrendû
+nagyságát
+nagyságú
+nagytakarítás
+nagytehetségû
+nagyterem
+nagytiszteletû
+nagytucat
+nagytörvényû
+nagyurakba
+nagyurat
+nagyvad
+nagyvilági
+nagyvilágiak
+nagyvitorlát
+nagyvonalú
+nagyvonalúan
+nagyvonalúság
+nagyváros
+nagyvárosi
+nagyzol
+nagyzolás
+nagyzoló
+nagyzolóan
+nagyzási
+nagyágyú
+nagyétkû
+nagyít
+nagyítandó
+nagyítás
+nagyító
+nagyúr
+nagyúri
+nahát
+nahát!
+naiv
+naiv,
+naiva
+naivan
+naivitás
+naivság
+naná!
+nap
+nap!
+nap-
+napalm
+napban
+napbarnított
+napellenzõ
+napernyõ
+napfelkelte
+napfelkeltétõl
+napfogyatkozás
+napfolt
+napforduló
+napfáklya
+napfény
+napfénybesugárzás
+napfényelõhívás
+napfényes
+napfényre
+napfényt
+napfénytelen
+napfénytetõ
+napfürdõzõ
+napgyûrû
+naphal
+napi
+napig
+napilap
+napimádó
+napiparancs
+napiparancsban
+napirend
+napirendi
+napirányba
+napja
+napjai
+napjainkban
+napjának
+napját
+napkelet
+napkelte
+napkeltekor
+napkitörés
+napkorona
+napkorongnyúlvány
+napközben
+napközi
+napköziotthonos
+napközis
+napkúrázik
+naplemente
+naplementéig
+naplopással
+naplopó
+napló
+naplója
+naplóíró
+napmagasságot
+napnyugta
+napnyugtakor
+napnál
+napok
+napokat
+napokban
+napokra
+napolaj
+napon
+naponkénti
+naponta
+napos
+naposcsibe
+napot
+napot!
+napozik
+napozó
+napozóruha
+nappal
+nappali
+nappallá
+napra
+napraforgó
+naprakész
+napról
+napspektrum
+napsugarakban
+napsugár
+napsztratoszféra
+napszálltakor
+napszám
+napszámba
+napszámos
+napszúrást
+napsütés
+napsütésben
+napsütötte
+naptej
+naptájolás
+naptár
+naptár-karóra
+naptári
+napudvar
+napvilág
+napvilágra
+napvédõ
+napóleon
+napóleon-arany
+napóra
+narancs
+narancsgerezd
+narancshéj
+narancslekvár
+narancslé
+narancslégy
+narancsvirág
+narcisszizmus
+narkomániás
+narkotikum
+narkotikumot
+narkotizál
+narkó
+narkós
+narkózik
+narkózis
+narrátor
+narvál
+naspolya
+naszád
+naturalista
+naturalisztikus
+naturalizmus
+natúrkürt
+natúrszelet
+navigál
+navigátor
+nazalizál
+neander-völgyi
+nebáncsvirág
+nedv
+nedv-elvágó
+nedvbõség
+nedvdús
+nedvek
+nedves
+nedvesedik
+nedvesen
+nedvesség
+nedvességfok
+nedvességtartalom
+nedvességtõl
+nedvességálló
+nedvesít
+nedvesítés
+nedvezõ
+nedvszívó
+nefelejcs
+nefrit
+negatív
+negatívon
+negatívum
+negligál
+neglizsé
+negrilisztika
+negrológia
+negyed
+negyedannyiért
+negyeddolláros
+negyede
+negyedelés
+negyedes
+negyedhang
+negyedik
+negyediknek
+negyedkor
+negyedlõ
+negyedmérföldes
+negyedre
+negyedrész
+negyedrésze
+negyedáron
+negyedében
+negyedév
+negyedévenként
+negyedéves
+negyedévi
+negyedóra
+negyedórában
+negyedórákat
+negyedütõ
+negyven
+negyvennyolcból
+negyvenöt
+negédes
+negédesen
+neheze
+neheze!
+nehezebb
+nehezebbé
+nehezedik
+nehezemre
+nehezen
+nehezet
+nehezményez
+neheztel
+neheztelve
+neheztelés
+neheztelõ
+nehezék
+nehezékkel
+nehezén
+nehezét
+nehezít
+nehezítõ
+nehogy
+nehéz
+nehézbenzin
+nehézfegyverzetû
+nehézfejû
+nehézhidrogén
+nehézipar
+nehézkes
+nehézkesen
+nehézkesség
+nehézlövedék
+nehéznek
+nehézszagú
+nehézség
+nehézségbe
+nehézségei
+nehézségeit
+nehézségek
+nehézségeken
+nehézségeket
+nehézségekkel
+nehézségen
+nehézséget
+nehézségi
+nehézségtõl
+nehézsúly
+nehézsúlyú
+nehéztüzérség
+nehézvíz
+nehézzé
+neje
+nejem
+neked
+neked!
+neked,
+neked?
+nekem
+nekem!
+nekem,
+neki
+neki!
+neki,
+nekibátorodik
+nekicsap
+nekicsapódik
+nekidob
+nekidurálja
+nekidõl
+nekiereszt
+nekiesik
+nekiestek
+nekifekszik
+nekifeszül
+nekifog
+nekifogott,
+nekifogás
+nekifut
+nekifutás
+nekifutásból
+nekifutással
+nekigyürkõzik
+nekihevül
+nekihevültek
+nekiiramodik
+nekiiramodás
+nekikezd
+nekikezdés
+nekikoccan
+nekikészül
+nekilelkesedik
+nekilendül
+nekilendülés
+nekilát
+nekilódul
+nekimegy
+nekirohan
+nekiront
+nekirontás
+nekiszalad
+nekiszegez
+nekiszegeztem
+nekiszorít
+nekitámad
+nekitámaszkodik
+nekitámaszt
+nekiugrik
+nekivadul
+nekiverõdik
+nekivág
+nekivágódik
+nekiüt
+nekiütközik
+nekiütõdik
+nekiütõdés
+nekrofília
+nekrológ
+nekünk
+nem
+nem!
+nem,
+nem-
+nemben
+nembánom
+nembánomság
+nemek
+nemes
+nemesebb
+nemesember
+nemesen
+nemesfajta
+nemesfém
+nemesfémmel
+nemesi
+nemeslelkûségéhez
+nemesopál
+nemessé
+nemesség
+nemeszisz
+nemesít
+nemesítés
+nemesítõ
+nemet
+nemez
+nemezanyag
+nemezel
+nemezelt
+nemezelés
+nemezelõ
+nemezelõdik
+nemezis
+nemezkalap
+nemezkalapfajta
+nemezlap
+nemezzel
+nemhez
+nemi
+nemileg
+nemiség
+nemiséget
+nemiséggel
+nemkívánatos
+nemleges
+nemlét
+nemlétezés
+nemlétében
+nemmel
+nemrég
+nemrégiben
+nemsokára
+nemtelen
+nemtetszés
+nemtörõdöm
+nemtörõdömség
+nemtörõdömséggel
+nemulass!
+nemz
+nemzedék
+nemzedékek
+nemzedékrend
+nemzedékrendi
+nemzet
+nemzetek
+nemzetgazdasági
+nemzetgazdaságtan
+nemzetgyûlés
+nemzeti
+nemzetiségi
+nemzetközi
+nemzetközösség
+nemzetség
+nemzetárulás
+nemzetõr
+nemzetõrség
+nemzés
+nemzési
+nemzõ
+nemzõszervek
+nemében
+nemû
+neologizmus
+neon
+neoncsõ
+neoncsõvilágítás
+neonfény
+neongáz
+neonreklám
+neoplazma
+neoprén
+nepotizmus
+nepáli
+nercprém
+nercszõrme
+nesze
+nesze!
+neszez
+nesztelen
+netalán
+netovábbja
+nettó
+netz
+netán
+neuralgia
+neuralgiás
+neurotikus
+neurózis
+neutron
+neutronbomba
+neutronokkal
+neutrínó
+nevada
+neve
+neve?
+neved
+nevek
+nevekkel
+nevel
+neveletlen
+neveletlenség
+neveletlenül
+nevelhetõ
+nevelik
+nevelt
+nevelés
+nevelési
+nevelésû
+nevelõ
+nevelõanya
+nevelõapa
+nevelõintézet
+nevelõnõ
+nevelõotthon
+nevelõszülõ
+nevelõszülõkhöz
+neves
+nevess
+nevet
+neveti
+nevetnek
+nevetni
+nevetség
+nevetséges
+nevetségesen
+nevetségessé
+nevetségesség
+nevettet
+nevettetõ
+nevettében
+nevetve
+nevetés
+nevetésben
+nevetéssel
+nevetéstõl
+nevetõ
+nevetõorkánt
+nevetõs
+nevez
+nevezem
+nevezem!
+nevezetes
+nevezetesen
+nevezetesség
+nevezetességei
+nevezetességeit
+nevezetességeken
+nevezetességeket
+nevezett
+nevezhetõ
+nevezi
+nevezik
+nevezni
+nevezve
+nevezõ
+nevében
+nevébõl
+nevén
+nevére
+nevét
+nevû
+nigger
+nihilista
+nihilizmus
+nikkel
+nikotin
+nimbusz
+nimbuszt
+nimfa
+nimfománia
+nimfomániás
+nimfácska
+nincs
+nincs!
+nincs.
+nincsen
+nincsenek
+nincstelen
+nincstelenek
+nindzsa
+nini
+nipp
+nippek
+nippli
+nirvána
+nitrit
+nitroglicerin
+nitrogén
+nitrát
+no!
+no,
+no-no!
+nocsak
+noha
+nohát!
+nokedlivel
+nomen
+nominatívusz
+nominálbérek
+nominális
+nomogram
+nomád
+nonkomformista
+nonkonformista
+nonkonformizmus
+nono
+noppos
+norma
+normalizál
+normalizált
+normalizálás
+normalizáló
+normalizálódik
+normalizálódás
+normatív
+normatíva
+normáktól
+normál
+normális
+normálisa
+normálishoz
+normálisnál
+normálméreten
+normált
+norvég
+norvégiai
+nos
+nosza!
+noszogat
+nosztalgia
+nosztalgikus
+nosztalgikusan
+nosztalgiázva
+nosztalgiázó
+notabilitás
+notesz
+noteszlap
+notórius
+novella
+novokain
+nudizmus
+nudli
+nukleonika
+nukleáció
+nukleáris
+null
+null-null
+nulla
+nulla-
+nulla-leolvasás
+nullafok
+nullapont
+nullfok
+nullkörzõ
+nullpont
+nullpontra
+nullszéria
+nullvonala
+nullára
+nullás
+nullásliszt
+nullázó
+numera
+numerikus
+numerus
+numerát
+nutria
+nyafka
+nyafkán
+nyafog
+nyafogva
+nyafogás
+nyafogó
+nyaggat
+nyak
+nyaka
+nyakadra
+nyakal
+nyakalja
+nyakas
+nyakasság
+nyakba
+nyakban
+nyakbõség
+nyakferdülés
+nyakfájás
+nyakhám
+nyaki
+nyakig
+nyakigláb
+nyakkal
+nyakkendõ
+nyakkendõjét
+nyakkendõs
+nyakkendõt
+nyakkivágás
+nyakleves
+nyaklevest
+nyaklánc
+nyakló
+nyakon
+nyakoncsíp
+nyakpánt
+nyakpántos
+nyakra-fõre
+nyakravaló
+nyakrész
+nyakszalag
+nyakszirt
+nyakszorító
+nyakszõrzet
+nyaksál
+nyaktekercs
+nyaktiló
+nyaktilóz
+nyaktilózás
+nyaktoll
+nyaktollazat
+nyaktól
+nyakunkba
+nyakába
+nyakán
+nyakánál
+nyakára
+nyakát
+nyakívelés
+nyakörv
+nyakú
+nyal
+nyal-fal
+nyalakodik
+nyalakodás
+nyalató
+nyaldos
+nyaldosott
+nyalintás
+nyalizik
+nyalja
+nyaláb
+nyalábba
+nyalábnyi
+nyalánkság
+nyalás
+nyalás-falás
+nyalásnyi
+nyaló
+nyalóhenger
+nyalóka
+nyalókapénz
+nyamvadt
+nyamvadék
+nyaral
+nyaraló
+nyaralóház
+nyargal
+nyargaló
+nyavalygás
+nyavalygó
+nyavalyog
+nyavalyás
+nyavalyásan
+nyavalyásnak
+nyegle
+nyegleség
+nyeglén
+nyekerget
+nyekergetés
+nyekergetõ
+nyekergés
+nyekergõ
+nyel
+nyele
+nyeles
+nyeletlen
+nyeli
+nyelik
+nyelni,
+nyelt
+nyelv
+nyelv,
+nyelvbe
+nyelvbotlás
+nyelvbotlást
+nyelvcsalád
+nyelvcsoport
+nyelve
+nyelvek
+nyelvekhez
+nyelvemlék
+nyelven
+nyelves
+nyelvet
+nyelvezet
+nyelvhasználat
+nyelvhibák
+nyelvhibás
+nyelvi
+nyelvismeret
+nyelvjárás
+nyelvjárási
+nyelvjárásra
+nyelvközösség
+nyelvre
+nyelvre)
+nyelvrontás
+nyelvsziget
+nyelvtan
+nyelvtani
+nyelvtanilag
+nyelvtehetség
+nyelvterület
+nyelvtudományi
+nyelvtudás
+nyelvtudása
+nyelvtörõ
+nyelvvel
+nyelvére
+nyelvérzéke
+nyelvész
+nyelvészeti
+nyelvét
+nyelvével
+nyelvújítás
+nyelvújító
+nyelvû
+nyelés
+nyelét
+nyelõcsõ
+nyelû
+nyer
+nyereg
+nyeregbe
+nyeregbõl
+nyeregfa
+nyeregfára
+nyeregheveder
+nyeregkápagomb
+nyeregpárna
+nyeregszeg
+nyeregtakaró
+nyeregtetejû
+nyeregtetõ
+nyeregtáska
+nyeregváz
+nyeregállvány
+nyerek,
+nyeremény
+nyereménybetétkönyv
+nyereményhúzás
+nyereménykölcsön
+nyereménykötvény
+nyereménytárgy
+nyereség
+nyereség-veszteség
+nyereségbõl
+nyereséges
+nyereséget
+nyereségrészesedés
+nyereségvágy
+nyereségvágyó
+nyeretlen
+nyeretlen,
+nyergelésre
+nyergelõ
+nyerges
+nyergesbõr
+nyergesen
+nyerni
+nyers
+nyersanyag
+nyersbevétel
+nyersbõr
+nyersbõr-konzerválás
+nyersbõrt
+nyersen
+nyerseség
+nyersfordítás
+nyersgyapjú
+nyershozam
+nyersméret
+nyersolaj
+nyersselyem-szövet
+nyersvas
+nyert
+nyert,
+nyertes
+nyertesek
+nyerés
+nyerésre
+nyerészkedik
+nyerészkedés
+nyerészkedõ
+nyerít
+nyerítve
+nyerítés
+nyerõ
+nyerõdobás
+nyerõket
+nyes
+nyesett
+nyesi
+nyest
+nyesés
+nyesõ
+nyesõkés
+nyesõolló
+nyihog
+nyihogás
+nyikkan
+nyikkanás
+nyikorgás
+nyikorgó
+nyikorgós
+nyikorgósan
+nyikorog
+nyikorogva
+nyiladék
+nyilai
+nyilallás
+nyilat
+nyilatkozat
+nyilatkozatot
+nyilatkozik
+nyilvános
+nyilvánosan
+nyilvánossá
+nyilvánosság
+nyilvánosságot
+nyilvánosságra
+nyilvántart
+nyilvántartott
+nyilvántartás
+nyilvántartásba
+nyilvántartási
+nyilvántartást
+nyilvántartó
+nyilvánul
+nyilvánuló
+nyilvánvaló
+nyilvánvaló,
+nyilvánvalóan
+nyilvánvalóság
+nyilvánvalóvá
+nyilvánít
+nyilvánítja
+nyilvánított
+nyilvánították
+nyilvánítás
+nyiradék
+nyiratkozik
+nyiratkoznod
+nyirkos
+nyirkosan
+nyirkosság
+nyirok
+nyirokcsomó-daganat
+nyirokcsomó-duzzanat
+nyisszant
+nyisszantás
+nyiszlett
+nyiszál
+nyit
+nyitható
+nyitja
+nyitjára
+nyitját
+nyitott
+nyitva
+nyitvatartás
+nyitány
+nyitás
+nyitási
+nyitású
+nyitó
+nyivákol
+nyivákolás
+nylon
+nylonharisnya
+nyolc
+nyolcad
+nyolcadik
+nyolcas
+nyolcevezõs
+nyolckor
+nyolcsoros
+nyolcszoros
+nyolcszorosan
+nyolcszög
+nyolcszögû
+nyolcvan
+nyolcvanadik
+nyolcvanas
+nyolcvanéves
+nyolcéves
+nyolcórás
+nyom
+nyoma
+nyomai
+nyomainak
+nyomait
+nyomasztó
+nyomasztóan
+nyomasztólag
+nyomat
+nyomatszél
+nyomaték
+nyomatéka
+nyomatéki
+nyomatékkal
+nyomatékos
+nyomatékosan
+nyomatékváltó
+nyomban
+nyombél
+nyombélfekély
+nyomcsatorna
+nyomda
+nyomdafestékkel
+nyomdahiba
+nyomdai
+nyomdailag
+nyomdok
+nyomdokaiba
+nyomdokait
+nyomdokol
+nyomdokvonal
+nyomdokvíz
+nyomdokában
+nyomdába
+nyomdában)
+nyomdász
+nyomdászat
+nyomdászati
+nyomdászatilag
+nyomelem
+nyomható
+nyomja
+nyomjelzõ
+nyomkövetés
+nyomköz
+nyomköztágító
+nyomogat
+nyomokat
+nyomon
+nyomor
+nyomorba
+nyomorban
+nyomorból
+nyomorenyhítés
+nyomorenyhítõ
+nyomorgat
+nyomorgatott
+nyomorgó
+nyomorgók
+nyomornegyed
+nyomornegyedeket
+nyomorog
+nyomort
+nyomortanya
+nyomorult
+nyomorultan
+nyomorultul
+nyomorék
+nyomorékká
+nyomorúság
+nyomorúságba
+nyomorúságos
+nyomorúságosan
+nyomorúságot
+nyomot
+nyomott
+nyomoz
+nyomozott
+nyomozás
+nyomozással
+nyomozó
+nyomra
+nyomravezetõ
+nyomról
+nyomtat
+nyomtatott
+nyomtatvány
+nyomtatványokat
+nyomtatás
+nyomtatásban
+nyomtató
+nyomtáv
+nyomul
+nyomvonal
+nyomába
+nyomában
+nyomára
+nyomás
+nyomás!
+nyomáscsökkentés
+nyomáscsökkentõ
+nyomáscsökkenés
+nyomásesés
+nyomási
+nyomáskorlátozó
+nyomásmagasság
+nyomásmérés
+nyomásmérõ
+nyomásnak
+nyomáson
+nyomást
+nyomásérzés
+nyomású
+nyomát
+nyomát!
+nyomó
+nyomócsapágy
+nyomócsatorna
+nyomódik
+nyomódúc
+nyomófelület
+nyomófogó
+nyomóforma
+nyomóforma-fedél
+nyomóformát
+nyomógombja
+nyomógép
+nyomóhenger
+nyomóhengerre
+nyomókar
+nyomólap
+nyomólemez
+nyomólemez-készítés
+nyomómagasság
+nyomómagasság-veszteség
+nyomópapír
+nyomórúd
+nyomós
+nyomótégelyre
+nyomóvezeték
+nyoszolya
+nyoszolyólány
+nyugalmadat!
+nyugalmas
+nyugalmat
+nyugalmazott
+nyugalmi
+nyugalmát
+nyugalmú
+nyugalom
+nyugalom!
+nyugat
+nyugat-afrikai
+nyugat-római
+nyugat-ázsiai
+nyugati
+nyugatimádat
+nyugatimádó
+nyugatmánia
+nyugatra
+nyugdíj
+nyugdíjas
+nyugdíjaz
+nyugdíjazható
+nyugdíjazás
+nyugdíjba
+nyugdíjban
+nyugdíjjogosult
+nyughatatlan
+nyughely
+nyugi!
+nyugis
+nyugodalmas
+nyugodj
+nyugodjék
+nyugodt
+nyugodt!
+nyugodtan
+nyugodtan!
+nyugodtság
+nyugszik
+nyugta
+nyugtabélyeg
+nyugtakönyv
+nyugtalan
+nyugtalankodik
+nyugtalankodj
+nyugtalankodás
+nyugtalankodó
+nyugtalanság
+nyugtalanságot
+nyugtalanuk
+nyugtalanul
+nyugtalanít
+nyugtalanítás
+nyugtalanító
+nyugtalanítóan
+nyugtat
+nyugtatvány
+nyugtatás
+nyugtató
+nyugtatószer
+nyugton
+nyugtáz
+nyugvó
+nyugvóhely
+nyugvójárat
+nyugágy
+nyulat
+nyulászni
+nyurga
+nyurgul
+nyuszi
+nyuszikám
+nyáj
+nyája
+nyájas
+nyájasan
+nyájaskodik
+nyájasság
+nyájasságtól
+nyájban
+nyál
+nyál-
+nyála
+nyáladzik
+nyáladzva
+nyáladzás
+nyálam
+nyálas
+nyálfolyás
+nyálka
+nyálkás
+nyálkássá
+nyálkásság
+nyálképzõdés
+nyálmirigyek
+nyáltermelõ
+nyám-nyám
+nyápic
+nyár
+nyárfa
+nyári
+nyárias
+nyáridõ
+nyárközép
+nyáron
+nyárs
+nyársat
+nyársorrú
+nyárspolgár
+nyárspolgári
+nyárspolgárság
+nyársra
+nyávog
+nyávogás
+nyél
+nyélbe
+nyélbeillesztés
+nyélcsap
+nyéllel
+nyérc
+nyíl
+nyílegyenes
+nyílegyenesen
+nyílfû
+nyílhegy
+nyílik
+nyílkilövõ
+nyíllal
+nyílt
+nyíltan
+nyíltszívû
+nyíltság
+nyílttengeri
+nyílvesszõ
+nyílzápor
+nyílás
+nyílása
+nyíláshidalás
+nyílásokkal
+nyílást
+nyíló
+nyír
+nyíratlan
+nyírfa
+nyírfajd
+nyírfakéreg
+nyírfavesszõ
+nyírott
+nyírrothadás
+nyírt
+nyírás
+nyírást
+nyíró
+nyírófelület
+nyírófeszültség
+nyíróolló
+nyög
+nyögd
+nyögdécselés
+nyögve
+nyögés
+nyögést
+nyöszörgés
+nyöszörög
+nyújt
+nyújtható
+nyújthatóság
+nyújtja
+nyújtogat
+nyújtott
+nyújtás
+nyújtása
+nyújtó
+nyújtó-munkás
+nyújtófa
+nyújtógép
+nyújtón
+nyújtózik
+nyújtózkodik,
+nyújtózkodás
+nyújtóállvány
+nyúl
+nyúlbéla
+nyúlfarknyi
+nyúlhal
+nyúlhús
+nyúlik
+nyúlj
+nyúlmagassága
+nyúlpörkölt
+nyúlra
+nyúlragu
+nyúlszáj
+nyúlszívû
+nyúlszívûbõl
+nyúlszõr
+nyúlt
+nyúltagy
+nyúlva
+nyúlvány
+nyúlánk
+nyúlás
+nyúlásmérõ
+nyúlékony
+nyúlékonyság
+nyúlékonysága
+nyúlós
+nyúlóssá
+nyúlósság
+nyúz
+nyúzza
+nyúzó
+nyû
+nyûg
+nyûgös
+nyûgösen
+nyûgösködik
+nyûgösködõ
+nyüst
+nyüstbojt
+nyüstbojttal
+nyüstfonál
+nyüstgép
+nyüstszem
+nyüstszerelés
+nyüszít
+nyüszítés
+nyüszítõ
+nyüves
+nyüvi
+nyüzsgés
+nyüzsgõ
+nyüzsgölõdik
+nyüzsög
+nyüzsögnek
+nád
+nádas
+nádcukor
+náddal
+nádfedél
+nádfonat
+nádi
+nádméznyaló
+nádnyelv
+nádpálca
+nádpálma
+nádszelet
+nádszék
+nádsíp
+nádtetõ
+nádvágó
+nála
+nálad
+nálad?
+nálam
+nálunk
+nárcisz
+nárcizmus
+nász
+nász-
+nászajándék
+nászdal
+násznép
+nászruha
+nászutasok
+nászágy
+nászút
+nátha
+náthaláz
+náthás
+náthásan
+nátrium
+nátriumklorid
+nátriumszulfát
+nátronpapír
+néger
+négerdob
+négerek
+négerez
+négerkedik
+négerkérdés
+négerlakta
+négernegyed
+négerprobléma
+négertánc
+négerzóna
+négy
+négyajtós
+négyelés
+négyes
+négyesben
+négyesfogat
+négyfelé
+négyig
+négyjegyû
+négykezes
+négykézláb
+négykézlábra
+négylapú
+négylevelû
+négylábú
+négylábúak
+négyoldalúra
+négyszemû
+négyszeres
+négyszáz
+négyszög
+négyszöges
+négyszögesíti
+négyszögletes
+négyszögletesre
+négyszögletûség
+négyszögû
+négyzet
+négyzeten
+négyzetes
+négyzetgyök
+négyzetkeresztmetszet
+négyzetkilométer
+négyzetmérföld
+négyzetméter
+négyzetre
+négyzetyard
+négyélû
+négyórás
+négyüléses
+néha
+néhai
+néhanapján
+néhány
+néhányan
+néhányszor
+nélkül
+nélkül!
+nélküli
+nélküliség
+nélkülöz
+nélkülözhetetlen
+nélkülözhetetlenség
+nélkülözhetõ
+nélkülözni
+nélkülözés
+nélkülözésen
+nélkülözéstõl
+nélkülözõ
+néma
+néma,
+némajáték
+némajátékkal
+némajátékos
+némaszerep
+némaság
+némely
+némelyikük
+német
+németalföld
+németalföldi
+németalföldiek
+némi
+némiképp
+némileg
+némán
+néni
+nénike
+nép
+nép-
+népbetegség
+népbõl
+népe
+népek
+népes
+népesség
+népességi
+népfelkelõ
+népfront
+népi
+népies
+népieskedõ
+népiesség
+népirtás
+népköztársaság
+népközösség
+népmese
+népmozgalmi
+népnyelvi
+néprajz
+néprajzi
+néprétegek
+népszavazás
+népszerû
+népszerû,
+népszerûbb
+népszerûség
+népszerûséget
+népszerûségnek
+népszerûsít
+népszerûsítés
+népszerûtlen
+népszámlálás
+népszónok
+népség
+népség-katonaság
+néptelen
+néptribün
+néptömeg
+néptömegek
+néptörzs
+népvagyon
+népvezér
+népzene
+népámítás
+népámító
+népítélet
+név
+név,
+név-
+névaláírás
+névcédula
+névcédulával
+névelõ
+néven
+néven,
+névhez
+névjegy
+névjegykártya
+névjegyzék
+névjegyzékbõl
+névjegyzéke
+névjegyét
+névjel
+névjelre
+névkártya
+névleg
+névleges
+névlegesen
+névmutató
+névmutatóval
+névmás
+névnap
+névre
+névrokon
+névrõl
+névsor
+névsora
+névsorban
+névsorolvasás
+névsorolvasást
+névsort
+névszói
+névszók
+névtelen
+névtelenség
+névtelenül
+névtábla
+névtáblával
+névutó
+névutói
+névérték
+névünnepe
+néz
+nézd
+nézd!
+nézd,
+nézel?
+nézet
+nézete
+nézetei
+nézetek
+nézeteket
+nézeteltérés
+nézeteltérése
+nézeteltéréseikre
+nézeteltérést
+nézetem
+nézeten
+nézetletérés
+nézetletérést
+nézetnek
+nézetre
+nézetéhez
+nézetét
+nézetû
+nézi
+nézik
+nézned
+néznem
+nézni
+nézve
+nézz
+nézz!
+nézzen
+nézzenek
+nézés
+nézõ
+nézõke
+nézõpont
+nézõtér
+nézõtérnek
+nézõvonal
+nézünk
+nívó
+nívón
+nívótlan
+nógat
+nógatja
+nógatás
+nóna
+nóta
+nótázó
+nõbolondító
+nõcske
+nõcsábász
+nõgyógyász
+nõgyógyászati
+nõi
+nõies
+nõiessé
+nõiesség
+nõietlen
+nõiruha
+nõk
+nõket
+nõmet
+nõnek
+nõnemû
+nõni
+nõrablás
+nõs
+nõstény
+nõsténybárány
+nõsténykecske
+nõszemély
+nõszirom
+nõsül
+nõt
+nõtlen
+nõtlenség
+nõtlenségben
+nõtlenségi
+nõtlenül
+nõtt
+nõtõl
+nõuralom
+nõvel
+nõvér
+nõvérke
+nõzik
+nõzés
+nõül
+növedék
+növekedett
+növekedés
+növekedési
+növekmény
+növekszik
+növekvés
+növekvõ
+növel
+növeli
+növelje
+növelés
+növelése
+növelõ
+növendék
+növendéket
+növeszt
+növény
+növénybõl
+növények
+növényekhez
+növényevõ
+növénygyûjtemény
+növénygyûjtõ
+növényi
+növényszegély
+növényt
+növénytan
+növénytani
+növénytannal
+növénytermesztés
+növényvilág
+növényvédelem
+növényvédõszer
+növényvõ
+növényzet
+növényállomány
+növés
+növést
+növését
+növésû
+növõ
+nüansz
+nüánsz
+obeliszk
+objektivitás
+objektivál
+objektív
+objektíven
+objektívtartó
+obligát
+obsitos
+obstrukcionista
+obstrukció
+obstruktív
+obstruktívan
+obstruál
+obstruáló
+obszcén
+obszervatórium
+obturátor
+oceanográfia
+oceanográfiai
+oceanográfus
+ocelot
+ocsmány
+ocsmányság
+oda
+oda,
+oda-vissza
+oda?
+odaad
+odaadja
+odaadnám
+odaadás
+odaadással
+odaadó
+odaadóan
+odaajándékoz
+odabiccent
+odabiggyeszt
+odabújik
+odacsal
+odacsap
+odacsönget
+odacsörög
+odadobott
+odadõl
+odaerõsít
+odaerõsítés
+odafenn
+odafent
+odafentrõl
+odafut
+odafönt
+odahajt
+odahaza
+odahív
+odahúz
+odahúzódik
+odaillesztett
+odaillik
+odaillõ
+odaillõség
+odajön
+odakap
+odakapás
+odakerül
+odakiált
+odakukkant
+odakuporodik
+odakínál
+odaköszön
+odaköt
+odakötõ
+odakötött
+odakötöz
+odakúszik
+odaküld
+odalent
+odalent!
+odales
+odalovagol
+odalép
+odalök
+odamegy
+odamond
+odamondogat
+odamondogató
+odamondogatós
+odanézz!
+odapasszol
+odaragaszt
+odarak
+odarohan
+odarögzít
+odasiet
+odasimul
+odaszalad
+odaszegez
+odaszögez
+odatapad
+odatapadó
+odatapaszt
+odatesz
+odatolakodik
+odatárcsáz
+odatódul
+odatûz
+odaugrik
+odavaló
+odavan
+odavet
+odavetett
+odavetõdik
+odavezetés
+odavezetõ
+odavág
+odaáll
+odaállít
+odaát
+odaég
+odaéget
+odaér
+odaérünk
+odaítél
+odaítélt
+odaítélés
+odaüssön
+odaüt
+odontolit
+odvas
+odvasodás
+odvasodó
+odáig
+odébb
+odébb!
+odébbáll
+odú
+odüsszea
+offenzíva
+offertórium
+offset-eljárás
+offset-gumikendõ
+offset-lap
+offset-nyomtatás
+offset-nyomtatógép
+offset-nyomókendõ
+ohmos
+ojt
+ok-
+oka
+oka?
+okadatol
+okadatolás
+okbeli
+okbeliség
+okból
+okból?
+okcidentális
+okfejtés
+okfejtõ
+okhatározói
+oki
+okirat
+okirati
+okiratra
+okirattal
+okirattartó
+okker
+okkerföld
+okkerrel
+okkult
+okkultizmus
+okleveles
+oklevél
+okmánnyal
+okmány
+okmányok
+okmányokkal
+okmányon
+okmányt
+oknyomozó
+oknál
+okok
+okol
+okolás
+okom
+okos
+okosabb
+okosan
+okosjános
+okoskodik
+okoskodás
+okoskodó
+okosnak
+okosság
+okossága
+okostóni
+okot
+okoz
+okozat
+okozati
+okozhat
+okozott
+okozta
+okozza
+okozás
+okozó
+okozója
+okság
+oktalan
+oktalanul
+oktat
+oktatja
+oktatni
+oktatás
+oktatáselmélet
+oktatási
+oktatástan
+oktatásügyi
+oktató
+oktett
+oktogon
+oktondi
+oktáv
+október
+okul
+okulárfedõ
+okulás
+okvetetlenkedik
+okvetetlenkedés
+okvetetlenkedõ
+okvetlenül
+okvetlenül!
+okviszony
+okából
+okád
+okádik
+okádás
+okádék
+okán
+okát
+okáért
+oké!
+olaj
+olajadagoló
+olajat
+olajbarna
+olajbogyó
+olajelzáró
+olajfestmény
+olajfestés
+olajfinomító
+olajfogó
+olajfoltos
+olajfúró
+olajjal
+olajkamra
+olajkence
+olajkitermelés
+olajkútfúrás
+olajleválasztó
+olajmargarin
+olajos
+olajosan
+olajosság
+olajosvászon
+olajoz
+olajozatlan
+olajozó
+olajpréselõ
+olajra
+olajra!
+olajréteg
+olajszállító
+olajtartály
+olajtartó
+olajteknõ
+olajtól
+olajtüzelésû
+olajvisszatartó
+olajvállalati
+olajár-robbanás
+olajüledék
+olasz
+olaszország
+olaszos
+olaszosság
+olaszosít
+olcsó
+olcsóbb
+olcsóbbá
+olcsójános
+olcsón
+olcsóság
+old
+oldal
+oldal-
+oldala
+oldalai
+oldalajtó
+oldalakra
+oldalazva
+oldalazó
+oldalba
+oldalbavágás
+oldalbejárat
+oldalborda
+oldalbástya
+oldaleltérés
+oldalfal
+oldalfasor
+oldalfegyver
+oldalfegyverek
+oldalfekvés
+oldalfelezõ
+oldalfeszíték
+oldalfolyosó
+oldalfájás
+oldalfék
+oldalgás
+oldalhajó
+oldalhajós
+oldalhajóval
+oldalhelyzet
+oldalhomlokzat
+oldalhozzáfolyások
+oldalhullám
+oldalhullámverés
+oldali
+oldalirányban
+oldalirányzás
+oldalirányzással
+oldalirányít
+oldalirányú
+oldaljárda
+oldalkarzat
+oldalkocsi
+oldalkocsis
+oldallap
+oldallengés
+oldalléc
+oldallégcsavar
+oldallépés
+oldalmenet
+oldalmozgás
+oldalnyilallás
+oldalnyílás-fedél
+oldalnézet
+oldalnézetben
+oldalog
+oldalon
+oldaloz
+oldalozás
+oldalozó
+oldalpillantás
+oldalra
+oldalrés
+oldalrész
+oldalról
+oldalrügy
+oldalsortûz
+oldalsortüzet
+oldalszakáll
+oldalszalonna
+oldalszárnnyal
+oldalszárny
+oldalszárnya
+oldalszárnyat
+oldalszél
+oldalszéllel
+oldalszóródás
+oldalsánc
+oldalsó
+oldalt
+oldaltetõ
+oldaltámadás
+oldaltámasz
+oldaltér
+oldaltól
+oldaltûz
+oldalunkon
+oldalvezetékág
+oldalvilágítás
+oldalvonal
+oldalvonala
+oldalvágat
+oldalvágás
+oldalvást
+oldalvéd
+oldalzsák
+oldalában
+oldalági
+oldalán
+oldalánál
+oldalára
+oldaláról
+oldalát
+oldalával
+oldalépület
+oldalösvény
+oldalú
+oldalütés
+oldat
+oldatállandósító
+oldhatatlan
+oldható
+oldhatóság
+oldhatóvá
+oldj
+oldja
+oldott
+oldva
+oldás
+oldó
+oldódik
+oldódása
+oldódó
+oldóképes
+oldószer
+oldószerrel
+olein-
+oleomargarin
+olló
+ollócsõrû
+ollópenge
+olt
+oltalmaz
+oltalmazás
+oltalmazó
+oltalmába
+oltalom
+oltatlan
+olthatatlan
+oltott
+oltvány
+oltár
+oltári
+oltárterítõ
+oltás
+oltógyomor
+oltókupak
+oltószem
+oltóág
+olvad
+olvadt
+olvadás
+olvadáspont
+olvadékony
+olvadó
+olvadóbiztosító
+olvas
+olvasandó
+olvasat
+olvasgat
+olvashatatlan
+olvashatatlanná
+olvashatatlanság
+olvashatatlanul
+olvasható
+olvashatóan
+olvashatóság
+olvasmány
+olvasmányon
+olvasmányos
+olvasnivaló
+olvasott
+olvasottság
+olvasottsága
+olvasottsággal
+olvasottságú
+olvassa,
+olvassák
+olvastasd
+olvaszt
+olvasztható
+olvasztott
+olvasztár
+olvasztás
+olvasztó
+olvasztókemence
+olvasztómunkás
+olvasztómáz
+olvasztómûhely
+olvasztótégely
+olvasztóöv
+olvasás
+olvasásmód
+olvasásra
+olvasással
+olvasást,
+olvasó
+olvasóhoz
+olvasójel
+olvasók
+olvasókönyv
+olvasókör
+olvasóközönség
+olvasóközönsége
+olvasólámpa
+olvasópolc
+olvasópróba
+olvasószoba
+olvasóterem
+olvasóteremben
+olvasóterembõl
+olvasótávolság
+olvasóállvány
+oly
+olyan
+olyan,
+olyannyira,
+olyanokat
+olyant
+olyasvalahogy
+olykor
+olykor-olykor
+ominózus
+omladozó
+omladék
+omladékkupola
+omlasztás
+omlett
+omlik
+omlás
+omlós
+omnibusz
+onanizál
+ondolál
+ondoláltatja
+ondolálás
+ondó
+ondóvezeték
+onnan
+onnét
+ont
+ontás
+opalizáló
+opció
+opera
+opera-
+opera-buffa
+operaelõadás
+operaház
+operai
+operatív
+operaénekes
+operaénekesnõ
+operett
+operáció
+operációs
+operál
+operálható
+operálhatóság
+operátor
+oposszum
+opportunista
+opportunizmus
+optika
+optikai
+optikus
+optimalitás
+optimalizál
+optimalizálás
+optimista
+optimum
+optimumot
+optimális
+optimálás
+opál
+opálfényû
+opálos
+opálüveg
+orangután
+orbitális
+orca
+orchidea
+orcája
+orcátlan
+ordenáré
+ordenáréság
+ordináré
+ordináta
+ordinátatengely-metszet
+ordít
+ordítja
+ordítozik
+ordítozó
+ordítva
+ordítás
+ordító
+organizmus
+organtin
+organzin
+organzint
+orgazda
+orgazdaság
+orgazdaságot
+orgazdának
+orgazdánál
+orgazmus
+orgazmus-
+orgazmussal
+orgia
+orgiában
+orgián
+orgiát
+orgona
+orgonaszóló
+orgonasíp
+orgonaépítõ
+orgonista
+orgonán
+orgonát
+orgyilkos
+orgánum
+orientalista
+orientalisztika
+orientáció
+orientálódik
+origami
+origó
+orkán
+orkándzseki
+ormány
+ormányos
+ormányrúd
+ormánytarcs
+ormányával
+ormótlan
+ornitológia
+ornitológiai
+ornitológus
+ornátus
+orom
+oromfal
+orommezõ
+oromzat
+orosz
+oroszlán
+oroszlánbõrbe
+oroszlánfejû
+oroszlánként
+oroszlános
+oroszlánrész
+oroszlánrészét
+oroszlánt
+oroz
+orr
+orr-
+orr-melléküregek
+orr-résszárny
+orr-segédszárny
+orra
+orra?
+orral
+orrba
+orrba-szájba
+orrcimpa
+orrcsont
+orrcsíptetõ
+orrdugulás
+orrevezõs
+orrfa
+orrfacsaró
+orrfelépítmény
+orrhang
+orrhangon
+orrhangú
+orrhegy
+orrhossz
+orrhosszal
+orrkabin
+orrkarika
+orrkarikájába
+orrlevágás
+orrlövész
+orrnehéz
+orrnyereg
+orrod
+orrod!
+orron
+orrot
+orrpolip
+orrszarvú
+orrszobor
+orrsövény
+orrtõke
+orrtükör
+orrvitorla
+orrvitorla-feszítõkötél
+orrvitorlarudat
+orrvitorlarúd
+orrvitorlát
+orrvédõ
+orrvérzést
+orrába
+orrában
+orráig
+orrán
+orrán)
+orránál
+orrárboc-zászló
+orrát
+orrától
+orrával
+orrú
+ország
+ország-világjáró
+országalma
+országba
+országban
+országgyûlés
+országgyûléshez
+országgyûlési
+országgyûlésnek
+országhatár
+országház
+országlása
+országok
+országon
+országos
+országosan
+országot
+országrész
+országutat
+országút
+országúti
+országútmenti
+orsó
+orsócsont
+orsóhal
+orsójú
+orsók
+orsópillér
+orsószán
+orsószár
+orsózás
+orsózó
+ortodox
+ortofoszforossav
+ortopéd
+ortopédia
+ortopédiai
+orvhalász
+orvhalászat
+orvhalászik
+orvhalászás
+orvlövész
+orvlövész-lövés
+orvlövészkedik
+orvos
+orvoshoz
+orvosi
+orvoslás
+orvoslásra
+orvosnövendék
+orvosol
+orvosolható
+orvosszeres
+orvosság
+orvossággal
+orvosságos
+orvosságot
+orvost
+orvost!
+orvostan
+orvostanhallgató
+orvostani
+orvostudomány
+orvostudományi
+orvosért!
+orvul
+orvvadász
+orvvadászat
+orvvadászik
+orákulum
+orális
+orángután
+osculatorium
+oson
+osonás!
+ostoba
+ostobaság
+ostobaság!
+ostobasággal
+ostobaságok
+ostobaságokat
+ostobaságokkal
+ostobaságot
+ostobaságot!
+ostobaságának
+ostobák
+ostobán
+ostobát
+ostobát!
+ostor
+ostorcsapás
+ostorcsattanás
+ostorhegy
+ostorhegyesen
+ostorkalapács
+ostornyél
+ostoros
+ostoroz
+ostorozás
+ostorozó
+ostorral
+ostorszíj
+ostort
+ostorvég
+ostorzsinór
+ostorával
+ostrom
+ostroma
+ostromlás
+ostromlétra
+ostromló
+ostromol
+ostromot
+ostromtüzérség
+ostromzár
+ostromzárat
+ostromzáron
+ostromárok
+ostya
+ostyaréteg
+ostábla
+ostáblajáték
+oszcillográf
+oszcilloszkóp
+oszcillál
+oszcillálás
+oszcilláló
+oszcillátor
+oszd
+oszkulatorium
+oszkuláció
+oszkulációs
+oszkulál
+oszkulálás
+oszkuláló
+oszlat
+oszlik
+oszlop
+oszlopa
+oszlopban
+oszlopbefedés
+oszlopborda
+oszlopcsarnok
+oszlopcsarnokos
+oszlopfa
+oszlopfej
+oszlopfeje
+oszlopfõ
+oszlopkaloda
+oszlopköpeny
+oszlopköz
+oszlopnyak
+oszlopok
+oszlopos
+oszloprend
+oszlopsor
+oszloptalapzat
+oszloptalplemez
+oszloptartó
+oszloptámasztó
+oszloptörzs
+oszloptörzs-befedés
+oszlás
+oszlásnak
+oszló
+oszolj!
+oszoljanak!
+oszt
+osztag
+osztaga
+osztagot
+osztalék
+osztalékadó
+osztalékon
+osztandó
+osztatlan
+oszthatatlan
+osztható
+osztogató
+osztott
+osztozik
+osztozkodás
+osztoznak
+osztozzunk!
+osztozás
+osztriga
+osztrigaikra
+osztrigatelep
+osztrigát
+osztrák
+osztrák-magyar
+osztály
+osztálya
+osztályba
+osztályellenség
+osztályellentét
+osztályelsõ
+osztályelõítélet
+osztálygõg
+osztályharc
+osztályhelyzet
+osztályháttér
+osztályjelentés
+osztálykönyv
+osztálymérnök
+osztályok
+osztályokba
+osztályokbeli
+osztályokra
+osztályon
+osztályos
+osztályoz
+osztályozatlan
+osztályozható
+osztályozott
+osztályozás
+osztályozáshoz
+osztályozási
+osztályozástan
+osztályozástani
+osztályozó
+osztályozógép
+osztályrész
+osztályrészül
+osztályt
+osztálytartalom
+osztályterem
+osztálytárs
+osztályvezetõ
+osztályvizsga
+osztályzat
+osztályérdek
+osztályú
+osztás
+osztása
+osztásjel
+osztásmezõ
+osztásos
+osztású
+osztó
+osztódik
+osztódás
+osztódással
+osztófa
+osztójel
+osztókörlap
+osztókörzõ
+osztóköz
+osztóléc
+osztópárkány
+osztót
+osztóérték
+otromba
+otrombán
+ott
+ottani
+ottfelejt
+otthagy
+otthagyja
+otthagyni
+otthagyták
+otthon
+otthon!
+otthona
+otthona,
+otthonba
+otthoni
+otthonias
+otthonka
+otthonomban
+otthonos
+otthonosan
+otthonról
+otthont
+otthontalan
+otthontalanság
+otthonába
+otthonából
+otthonülõ
+ottmarad
+ottreked
+overall
+ovum
+ováció
+ovális
+oxalit
+oxalát
+oxfordi
+oxidréteg
+oxidáció
+oxidál
+oxidálható
+oxidált
+oxidálás
+oxidálószer
+oxigenál
+oxigén
+oxigénez
+oxigénnel
+oxigénsav
+oxálsav
+oázis
+paca
+pacal
+paci
+pacientúra
+pacifista
+pacifizmus
+packázik
+pacsirta
+pacsirtacsattogás
+pacsirtadal
+pacsirtatrillázás
+pacsit!
+pacskol
+pacskolás
+pacsuliszagú
+pacák
+pacás
+pacát
+pad
+paddy-asztal
+paddy-gép
+padja
+padka
+padlizsán
+padlás
+padlásmûhely
+padlásszoba
+padlásteret
+padlástér
+padló
+padlóbevonat
+padlóburkolat
+padlóburkoló
+padlócsempe
+padlódeszka
+padlódeszkák
+padlóemelvény
+padlófénymáz
+padlóhasíték
+padlón
+padlóra
+padlóruha
+padlószõnyeg
+padlót
+padlótartó
+padlóterület
+padlóval
+padlóz
+padlózat
+padlózás
+padozat
+padozata
+padozattartó
+padsorai
+padsorok
+padszolga
+paff
+paginál
+pagoda
+pajesz
+pajkos
+pajkosan
+pajkoskodik
+pajkoskodás
+pajkosság
+pajta
+pajtikám!
+pajtás
+pajtáskodik
+pajtáskodó
+pajzs
+pajzsdudor
+pajzsfej
+pajzshordó
+pajzsmirigy
+pajzán
+pajzánság
+pakisztáni
+pakli
+paklikocsi
+paksi
+paktum
+pakura
+pakuratüzelésû
+pala
+palack
+palackból
+palackdugó
+palacknyak
+palackos
+palackoz
+palackozott
+palackozó
+palackzöld
+palacsinta
+palaelógus
+palahordó
+palatetõ
+palatábla
+palaválogató
+palazöld
+paleo-
+paleoantropológia
+paleobotanika
+paleocén
+paleogeográfia
+paleográfia
+paleográfiai
+paleográfus
+paleolit
+paleontológia
+paleontológiai
+paleontológus
+paleozoikum
+paleozoikus
+paletta
+pali
+palifogáson
+palimadár
+palira
+palládium
+pallér
+palléroz
+pallérozatlan
+palló
+pallóhíd
+pallóz
+pallózat
+palota
+palotagrófi
+palotaszerû
+palozsna
+palánk
+palánkkerítés
+palánkolás
+palánkolást
+palánkolású
+palánkon
+palánksor
+palánksoros
+palánta
+palántákat
+palántát
+palás
+palást
+palástba
+palástban
+palástol
+palástolja
+palástolt
+palástot
+palástú
+palával
+pamaccsal
+pamacs
+pamflet
+pamlag
+pampa
+pamut
+pamutanyag
+pamutbársony
+pamutflanell
+pamutfonal
+pamutkártoló
+pamutkásmir
+pamutpaszomány
+pamutszalag
+pamutszegõszalag
+pamutszövet
+pamutvelúrszövet
+pamutvászon
+pamutzsinór
+pamutzsávoly-szövet
+pamutáru
+panama
+panamázás
+panasz
+panaszelhárító
+panaszkodik
+panaszkodva
+panaszkodás
+panaszkodásra
+panaszkodó
+panaszokon
+panaszos
+panaszosan
+panaszt
+panasztevõ
+panasztétel
+pancser
+pancsol
+pancsolt
+pandant
+pandit
+panegirikus
+panel
+pang
+pangás
+pangást
+pangó
+pankráció
+panoráma
+panoráma-
+panorámafelvétel
+panorámafelvételt
+panorámaszerû
+pantaleone
+pantalló
+pantomim
+pantomimszínész
+panzió
+paníroz
+pap
+pap)
+papa
+papagáj
+papaya
+papi
+papiros
+papirosba
+papiroson
+papja
+paplak
+paplan
+papnevelde
+papneveldéjének
+papol
+papoló
+pappá
+paprika
+paprikajancsi
+papság
+papucs
+papucscipõ
+papucsférj
+papundeklidoboz
+papír
+papír-törlõrongy
+papíralak
+papírból
+papírból)
+papírcsákó
+papírdarab
+papírfajta
+papírfecni
+papírforgó
+papírformátum
+papírgalacsin
+papírgyûrû
+papírhulladék
+papírjai
+papírkereskedõ
+papírkosár
+papírkárpit
+papírkárpitozás
+papírkúp
+papírlap
+papírlemez
+papírmalom
+papírmunka
+papírok
+papírpecsét
+papírpelenka
+papírpénz
+papírra
+papírszalag
+papírszelvény
+papírsárkány
+papírtapéta
+papírtekercs
+papírtáblába
+papírtölcsér
+papírtörölközõ
+papírvágó
+papírválogató
+papírzacskó
+papírzsebkendõ
+papírzsepi
+papírzúzda
+papíráru
+parabola
+parabolikus
+paradicsom
+paradicsomi
+paradicsomkonzerv
+paradicsommal
+paradox
+paradoxon
+parafa
+parafa-
+parafa-mentõmellény
+parafadarab
+parafadugó
+parafadugókkal
+parafadugóval
+parafakéreg
+parafalemez
+parafaszerû
+parafaúszó
+paraffin
+paraffin-sor
+paraffinbázisú
+paraffingyertya
+paraffinmentes
+paraffinmentesített
+paraffinnal
+paraffinolaj
+paraffinos
+paraffinosság
+parafin
+parafinbázisú
+parafingyertya
+parafinolaj
+parafinsor
+parafrázis
+parafából
+parafás
+paragrafus
+paragrafusjel
+paragrafusrágás
+paragrafusrágó
+paralelepipedon
+paralelogramma
+paralelogramma-tétel
+paralitikus
+parallelszféra
+paralízis
+paralízises
+parametrikus
+paramágneses
+paramágnesesség
+paraméter
+paraméteres
+parancs
+parancsai
+parancskiosztás
+parancskönyv
+parancsmegszegés
+parancsmegtagadás
+parancsnak
+parancsnok
+parancsnok-helyettes
+parancsnoka
+parancsnokhelyettes
+parancsnoki
+parancsnokká
+parancsnoklás
+parancsnokló
+parancsnokol
+parancsnokoló
+parancsnokság
+parancsnoksága
+parancsnokságon
+parancsnokságot
+parancsokat
+parancsol
+parancsol?
+parancsolat
+parancsolatai
+parancsolatára
+parancsolgat
+parancsolgatás
+parancsolgató
+parancsolj
+parancsolja
+parancsolja!
+parancsolás
+parancsoló
+parancsot
+parancsszó
+parancsuralmi
+parancsvivõ
+parancsára
+parancsõrtiszt
+paranoia
+paranoiás
+paraszt
+parasztfelkelés
+paraszthajszálnyira
+parasztház
+paraszti
+parasztlegény
+parasztlány
+parasztlázadás
+parasztos
+parasztosan
+parasztosság
+parasztság
+parasztságot
+paratífusz
+paratölgy
+parazita
+parazita-
+parazitaelem
+parcella
+parcellák
+parcelláz
+parcellázás
+parciális
+parfüm
+pari
+parin
+paripa
+parittya
+parittyakõ
+parittyából
+paritás
+paritása
+paritásos
+park
+parkett-táncos
+parketta
+parkettáz
+parkjai
+parkol
+parkolni
+parkolás
+parkolási
+parkoló
+parkolóhely
+parkolóház
+parkolóóra
+parkos
+parkosít
+parkosítás
+parkõr
+parlag
+parlagfû
+parlagi
+parlagon
+parlament
+parlamenterzászló
+parlamenti
+parlamentje
+parlamentáris
+parodista
+parodizál
+paroli
+part
+partburkolat
+partdobás
+partedli
+partfal
+partfutó
+parthajózás
+parthoz
+parthullám
+parti
+participium
+partiképes
+partiképesség
+partitúra
+partizán
+partizáncsapatok
+partizánhajó
+partjelzõ
+partjelzõfény
+partján
+partközelben
+partmenti
+partmeredély
+partner
+partnere
+partnerként
+partnert
+partnyesés
+partomlás
+parton
+partot
+partra
+partraszállás
+partraszállási
+partraszálló
+partraszállóhely
+partraérés
+partszakadás
+parttalan
+parttól
+partvidék
+partvidékén
+partvis
+partvonal
+party
+partõr
+parvenü
+parádé
+parádés
+parádézik
+parány
+parányi
+paráználkodik
+paráználkodás
+parázs
+parázslik
+parázslás
+parázsló
+parázstartó
+paródia
+paróka
+parókia
+parókás
+pasas
+pasi
+passió
+passz
+passzban
+passzivitás
+passzió
+passziójára
+passzol
+passzolás
+passzolót
+passzus
+passzátszelek
+passzátszél
+passzív
+passzívák
+pasziánsz
+paszománnyal
+paszomány
+paszományáru
+paszta
+pasztell
+pasztellceruza
+pasztellceruzával
+pasztellkréta
+pasztellkép
+pasztellrajz
+paszternák
+pasztilláz
+pasztillázó
+pasztinák
+pasztõröz
+pasztõrözhetõség
+pasztõrözés
+pasztõrözõ
+pasztörizál
+paszuly
+pata
+patagyulladás
+patak
+patakkal
+pataknyelõ
+patakocska
+patakot
+patakzik
+patapárta
+patavérfolt
+patent
+patentkapocs
+patentál
+patentíroz
+patetikus
+patika
+patikamérleg
+patikamérték
+patina
+patinás
+patinát
+patkolt
+patkolókovács
+patkánnyal
+patkány
+patkányfogó
+patkányfészek
+patkányokra
+patkányoktól
+patkányszerû
+patkányt
+patkó
+patkóbél
+patkóit
+patkósarok
+patkószeg
+patkót
+patológia
+patológikus
+patológus
+patrica
+patrimoniális
+patrimónium
+patriotizmus
+patrióta
+patron
+patronimikon
+patronál
+patronáló
+patrícius
+patríciusi
+patrónus
+patt
+pattan
+pattant
+pattanás
+pattanásig
+pattanások
+pattanásos
+pattanó
+pattanóbogár
+pattint
+pattintás
+pattog
+pattogj!
+pattogtat
+pattogva
+pattogó
+patvaristáskodik
+patyolatfehér
+patájú
+patália
+patás
+pauperizmus
+pauperizáció
+pauza
+pavilon
+pazar
+pazarlás
+pazarlásra
+pazarló
+pazarlóan
+pazarol
+pazarolj
+pazarolja
+pazarolt
+pazarolta
+pazarul
+peca
+pecek
+pech
+pech!
+peches
+pechesen
+pechet!
+pechje
+pechsorozat
+pechszéria
+peckes
+peckesen
+pecsenye
+pecsenyelé
+pecsenyéstál
+pecsét
+pecsétel
+pecsételés
+pecsétes
+pecsétjével
+pedagógus
+pedantéria
+pedellus
+pederaszta
+pederasztia
+pedig
+pedigré
+pedigrés
+pedikûr
+pedikûrös
+pedál
+pedálos
+pedáloz
+pedáns
+pedánsan
+pedánsság
+pegazus
+pehely
+pehelykicsapódás
+pehelykiválás
+pehelykönnyû
+pehelypaplan
+pehelyszerû
+pehelysúly
+pehelysúlyú
+pej
+pejoratív
+pelenka
+pelenkáz
+pelenkázóasztal
+pelerin
+pelikán
+pelletez
+pelyhek
+pelyhekben
+pelyhes
+pelyhesedik
+pelyhesedés
+pelyhesít
+pelyhesítés
+pelyhezõdik
+pelyhezõdés
+pelyva
+pelyvapikkely
+pemet
+pempõ
+pendül
+pendülnek
+peng
+penge
+pengesor
+penget
+pengetni
+pengetés
+pengeéles
+pengéjét)
+pengéjû
+pengés
+pengõ
+penitencia
+penitenciát
+penna
+penny
+pennyért
+pentagram
+pentameter
+penzió
+penzióba
+penzióban
+penész
+penészes
+penészesedik
+penészesség
+penészség
+penészít
+pepecsel
+pepecselés
+pepecselõ
+pepita
+per
+peranyag
+perbe
+perbeidézés
+perbeli
+perben
+perbeszéd
+perbeszédet
+perc
+percben
+perccel
+perce
+percek
+perceket
+percenként
+percig!
+percipiálható
+perckor
+percmutató
+percnyi
+percre
+perctõl
+perdít
+perdöntõ
+perdül
+perdülete
+perdülés
+perec
+pereg
+perek
+perel
+perelhetõ
+perem
+pereme
+peremes
+peremez
+peremfa
+peremhegység
+peremrece
+peremrecézõ
+peremtelepülés
+peremvidék
+peremén
+peremének
+peren
+pereputty
+peres
+pereskedik
+pereskedés
+pereskedõ
+peresített
+perforál
+perfúzió
+pergamen
+pergamenszerû
+pergament
+pergamentekercs
+perget
+pergetett
+pergés
+pergésû
+pergõ
+pergõfúró
+pergõhúr
+pergõtûz
+pergõtüzében
+periferikus
+periféria
+periférikus
+perifériás
+perihélium
+periodikus
+periszkóp
+periódus
+periódusa
+periódusos
+perje
+perjel
+perklórsav
+perkál
+perköltségben
+perköltségek
+perlekedõ
+perlés
+permanenciában
+permanens
+permanensen
+permanganát
+permangánsavas
+permet
+permetez
+permetezik
+permetezõ
+permetezõpalack
+permetezõrózsa
+permetlé
+permetszerû
+permeábilis
+permeátum
+permutáció
+pernye
+peron
+peronja
+peroxid
+perpatvar
+persely
+perselyez
+perselyezés
+perspektíva
+persze
+persze!
+persze,
+pert
+perveltált
+perverz
+perverzitás
+perverzió
+perverzség
+perváta
+perzsa
+perzsaprém
+perzsaszõnyeg
+perzsel
+perzselés
+perzselõ
+perzsiai
+perózus
+pesszimista
+pesszimizmus
+pestis
+pestist
+pesztra
+pete
+petefészek
+petefészek-gyulladás
+petitio
+petrezselyem
+petrezselyemgyökér
+petróleum
+petróleum-
+petróleumlámpa
+petróleummal
+petróleummotor
+petróleumot
+petróleumpárlat
+petty
+pettyegetett
+pettyek
+pettyes
+pettyez
+petyhüdt
+petyhüdten
+petyhüdtség
+petyhüdté
+petárda
+petéket
+petérõl
+petét
+petézik
+petíció
+petíciós
+petúnia
+pezsdít
+pezsdítõ
+pezsdülõ
+pezseg
+pezsegõ
+pezsgés
+pezsgésbe
+pezsgõ
+pezsgõsvödör
+pf.
+pfuj
+pfuj!
+pia
+piac
+piaci
+piackutatás
+piacképes
+piacképesség
+piacot
+piacra
+piactér
+piano
+pianínó
+piaszter
+pici
+picike
+piciny
+picinyke
+picsa
+picsába
+picsába!
+picsáját
+picula
+picur
+picurka
+piedesztál
+piedesztálra
+piezoelektromosság
+piezometrikus
+piezométer
+piezométercsõ
+piff-puff!
+pigmeus
+pihe
+piheg
+pihegve
+pihegõ
+pihen
+pihenj!
+pihenjben
+pihenjállásban
+pihentet
+pihenteti
+pihentetés
+pihentetõ
+pihenés
+pihenésbõl
+pihenést
+pihenõ
+pihenõhely
+pihenõhelyiség
+pihenõszoba
+pihenõt
+pihenõállomás
+pihenünk
+piheszõr
+pihés
+pika
+pikantéria
+pikanyél
+pikk
+pikkel
+pikkely
+pikkelybetegség
+pikkelyes
+pikkelyesen
+pikkelyesszárnyú
+pikkelyképzõdés
+pikkelylemezekkel
+pikker
+pikkerbõr
+pikkerrel
+piknik
+piknikel
+pikraminsav
+pikrinsav
+pikrotoxin
+pikrát
+piktor
+pikáns
+pikánsan
+pikánssá
+pikás
+piké
+pikét
+pikírozó
+pikó
+pilaszter
+pillanat
+pillanat-
+pillanatban
+pillanatban,
+pillanatfelvétel
+pillanatfelvételt
+pillanatgyújtó
+pillanatig
+pillanatnyi
+pillanatnyilag
+pillanatok
+pillanatokon
+pillanatot
+pillanatra
+pillanatra!
+pillanatában
+pillangó
+pillangó-fa
+pillangócsavar
+pillangófa
+pillangóvitorla
+pillangóvitorla-fa
+pillangóúszás
+pillant
+pillantás
+pillantásból
+pillantásokat
+pillantásra
+pillantást
+pille
+pilledt
+pilledtség
+pillér
+pillére
+pillérképzés
+pillértörzs
+pillérvédõ
+pilóta
+pilótabekötõ
+pilótafülke
+pilótaiskola
+pilótajelvény
+pilótaruha
+pilótasisak
+pilótavizsga
+pilótavizsgát
+pilótaülés
+pilótája
+pilótáját
+pimasz
+pimaszkodik
+pimaszság
+pimaszul
+pimpinella
+pimpós
+pina
+pince
+pinceablak
+pincehelyiség
+pincelejáró
+pinceváltó
+pincében
+pincér
+pincérnõ
+pincértanuló
+pindur
+pinduri
+ping-pong
+pingpong
+pingpongütõ
+pingvin
+pingvintelep
+pingál
+pinka
+pint
+pinttyel
+pinty
+pionír
+pipa
+pipacs
+pipafej
+pipaszutyok
+pipaszárlába
+pipaszárlábak
+pipere
+pipere-vasalónõ
+piperecikkek
+pipereszekrény
+piperetáska
+piperkõc
+piperkõcös
+pipetta
+pipi
+pipilés
+pipiskedõ
+pipogya
+pipájából
+pipáját
+pipáló
+pipát!
+pipázik
+pipázás
+piramis
+piranja
+pirit
+pirkad
+pirkadat
+pirkadatkor
+pirkadás
+piro-
+pirogallol
+pirogallussav
+pirolízis
+piromániás
+pirongat
+pirongatás
+piroplazmózis
+piros
+pirosan
+pirosas
+piroslik
+pirospozsgás
+pirosra
+pirosszemû
+pirosság
+pirosít
+pirotechnika
+pirotechnikai
+pirotechnikus
+piruett
+piruettezik
+pirul
+pirula
+pirulás
+pirulásra
+pirulát
+pirít
+pirított
+pirító
+pirítólap
+pirítós
+pirítósállvány
+pisa
+pisi
+pisil
+pisilni
+pisilés
+piskóta
+piskótatészta
+pislant
+pislantás
+pislog
+pislogás
+pislákol
+pislákolás
+pislákoló
+pisszeg
+pisszegés
+pistulva
+pisze
+piszi!
+piszkavas
+piszkolt
+piszkoló
+piszkolódik
+piszkolódó
+piszkos
+piszkos-sárga
+piszkosan
+piszkosfehér
+piszkosság
+piszkozat
+piszkozatot
+piszkál
+piszkálja
+piszkálódik
+piszkító
+piszmog
+piszmogva
+piszmogás
+piszmogó
+piszok
+piszokban
+piszokfolt
+piszokfészek
+piszoktól
+pisztoly
+pisztolyharc
+pisztolylövések
+pisztolylövéssel
+pisztolyt
+pisztolytáska
+pisztráng
+pisztrángsügér
+pisál
+pitagorikus
+pite
+pithagorasi
+pithagoreizmus
+piti
+pitiáner
+pityeregni
+pityergés
+pitymallat
+pitymallatkor
+pitymallik
+pitypang
+pityókos
+pityókás
+pizsama
+pizsamakabát
+pizsamanadrág
+pizza
+piál
+piálás
+piás
+piásan
+pióca
+piócákat
+piócát
+plafon
+plafonon
+plagizál
+plagizálás
+plagizáló
+plagizátor
+plakatíroz
+plakát
+plakátokkal
+plakáton
+plakátragasztó
+plakátrajzoló
+plan
+planetárium
+planíroz
+plasztikai
+plasztikdugó
+plasztikus
+plasztikusság
+plasztilin
+plasztron
+platform
+platformja
+platina
+platonikus
+platonikusan
+platonista
+platonizmus
+platonizál
+plattni
+plattnémet
+platán
+platánfa
+platánlébõl
+plató
+plazma
+plazmát
+plebejus
+pleonasztikus
+pleonazmus
+pletyka
+pletykafészek
+pletykahordó
+pletykaság
+pletykaéhes
+pletykák
+pletykál
+pletykálkodás
+pletykálkodó
+pletykáló
+pletykás
+pletykát
+pletykázik
+pletykázás
+pletykázó
+plimsoll
+pliszé
+pliszíroz
+pliszírozás
+pliszírozógép
+plomba
+plusz
+pluszjel
+plutokrata
+plutokrácia
+plutónium
+pluviálé
+plágium
+plátói
+plátóian
+plébánia
+plébániai
+plébániatemplom
+plébános
+pléd
+pléh
+pléhpofa
+pléhpofával
+plüss
+plüss-szõnyeg
+plüsszerûvé
+pneumatik
+pneumatikus
+pocak
+pocakos
+pocakosság
+pocakot
+poci
+pocskol
+pocskondiáz
+pocsolya
+pocsolyaízû
+pocsolyában
+pocsék
+pocsékol
+pocsékolás
+pocsékra
+pocsékul
+pofa
+pofacsont
+pofacsontok
+pofafürdõt
+pofaszakáll
+pofaszakállas
+pofon
+pofonegyszerû
+pofoz
+pofádat!
+pofája
+pofájába
+pofáját
+pofájú
+pofákat
+pofán
+pofánverés
+pofára
+pofát
+pofátlan
+pofátlankodik
+pofátlanság
+pofátlanul
+pofázik
+pofázmány
+pofázmánya
+pofázás
+poggyász
+poggyászcímke
+poggyászfeladás
+poggyászháló
+poggyászjegy
+poggyászkezelõ
+poggyászkocsi
+poggyászleadás
+poggyászt
+poggyásztartó
+poggyásztúlsúly
+poggyászvonat
+poggyászzsák
+pogrom
+pogácsa
+pogánnyá
+pogány
+pogányforrasz
+pogánykodik
+pogányság
+pohara
+poharak!
+poharat
+pohár
+poháralátét
+pohárba
+pohárka
+pohárköszöntõ
+pohárköszöntõk
+pohárköszöntõt
+pohárnok
+pohárral
+pohárszék
+poháráru
+poise
+pojáca
+pokol
+pokolba
+pokolba!
+pokolgépes
+pokoli
+pokoli!
+pokolian
+pokollá
+pokolra
+pokolvar
+pokróc
+pokrócok
+pokrócozás
+pokrócról
+polaritás
+polarizáció
+polarizálhatóság
+polc
+polcok
+polcokat
+polcokkal
+polcokra
+polcos
+polcsor
+polder
+polgár
+polgár-
+polgárháború
+polgári
+polgárjog
+polgárjogi
+polgárjogok
+polgárjogokból
+polgárjogot
+polgármester
+polgármesteri
+polgármesterné
+polgármesternõ
+polgárok
+polgárság
+polgárõr
+polgárõrség
+policiklusos
+polietilén
+polimerizáció
+polimerizál
+polimerizált
+polimerizálás
+polimerizálódik
+polimerizálódás
+polinom
+polinéziai
+polip
+polip-kacs
+polisztirol
+polisztirén
+politika
+politikai
+politikus
+politikusan
+politikája
+politikájának
+politikára
+politikát
+politúr
+politúroz
+politúrozott
+politúrozás
+poliuretán
+poliészter
+polka
+pollen
+poloska
+poloskás
+polyvával
+polyák
+poláris
+polároz
+políroz
+polírozatlan
+polírozás
+polírozó
+pom-pom
+pompa
+pompano
+pompon
+pomponrózsa
+pompában
+pompájában
+pompás
+pompás!
+pompásan
+pompával
+pomádé
+pomádézza
+poncsó
+pondró
+pondrók
+pongyola
+pongyolaság
+pont
+pont-vonal
+pont-vonás
+pontarány
+pontatlan
+pontatlanság
+pontatlanul
+pontban
+pontbekötõ
+pontbombázás
+pontedéria
+ponteredmény
+pontifikál
+pontig
+pontja
+pontjelzõ
+pontjához
+pontján
+pontjára
+pontját
+pontkorrózió
+pontok
+pontokat
+ponton
+pontonhidat
+pontonhíd
+pontonhídon
+pontonos
+pontos
+pontosabb
+pontosabban
+pontosan
+pontosság
+pontossága
+pontossággal
+pontosságú
+pontosvesszõ
+pontot
+pontoz
+pontozott
+pontozás
+pontozással
+pontozó
+pontozókerékkel
+pontozókészülék
+pontra
+pontról
+pontszerzés
+pontszám
+pontszúró
+pontvésõ
+ponty
+pontyféle
+pontállás
+pontérték
+ponyva
+ponyvairodalmi
+ponyvairodalom
+ponyvaregény
+ponyvatetõ
+ponyváját
+ponyvával
+pop-
+popsi
+popó
+por
+porban
+porbelégzéstõl
+porból
+porc
+porcelán
+porcelán-
+porcelánedények
+porcelánfigurák
+porcelánföld
+porcelánnadrág
+porcikájában
+porció
+porcogó
+porcogós
+porcos
+porcsin
+poresõ
+porfelhõ
+porfogó
+porfészek
+porgrafit
+porhanyós
+porhintés
+porhüvely
+porhüvelyét
+porkoláb
+porlad
+porladó
+porlaszt
+porlasztás
+porlasztó
+porlepte
+porló
+pornográf
+pornográfia
+pornó
+porolás
+porond
+poronty
+poros
+porosan
+porosz
+poroszka
+poroszkál
+poroszkálás
+poroszló
+poroszlók
+poroszország
+porozitás
+porozó
+porral
+porrongy
+porrá
+porráõrlõ
+porszemecske
+porszemek
+porszerû
+porszívó
+porszívóz
+port
+porta
+portalanít
+portalanító
+portamento
+portré
+portugál
+portulakka
+portya
+portyázik
+portyázás
+portyázása
+portyázó
+portáján
+portáldaru
+portás
+portásfülke
+portáslakás
+portásnõ
+portékáját
+portó
+portói
+portómentes
+portómentességet
+portörlés
+portörlõ
+porvédõ
+porzsoló
+porzás
+porzó
+porzószál
+porzószálak
+porzótartó
+porát
+porít
+porított
+porítás
+porózus
+poshad
+poshadt
+poshadtság
+poshadó
+posta
+posta-takarékpénztár
+postabélyegzõ
+postacsomag
+postafiók
+postafordultával
+postahajó
+postahivatal
+postai
+postakocsi
+postakocsin
+postakocsis
+postakézbesítés
+postaköltség
+postaláda
+postaló
+postamester
+postamunka
+postatisztviselõ
+postazsák
+postán
+postára
+postás
+postával
+postáz
+postázás
+posvány
+posványosodik
+poszméh
+poszt
+poszter
+poszthumusz
+poszthumuszan
+posztpozíció
+posztpozíciós
+posztra
+posztulál
+posztulátum
+posztumusz
+posztó
+posztókikészítõ
+posztószél
+posztóval
+posztózubbony
+poszáta
+potencia
+potenciál
+potenciális
+potens
+potentát
+potom
+potroh
+potrohos
+pottyan
+pottyant
+pottyantál
+pottyanva
+pottyanás
+potya
+potyautas
+potyog
+potyán
+potyázik
+potyázás
+potyázó
+pour
+pozdorjává
+pozitivista
+pozitivizmus
+pozitív
+pozsgás
+pozsgásság
+pozíció
+pozícióban
+pozícióját
+pozõr
+poén
+poézis
+pracli
+praclidat!
+praetor
+praetorianus
+praetoriánus
+praetorságot
+pragmatika
+pragmatikus
+pragmatizmus
+praktikus
+praktikák
+praktizál
+praxis
+precarium
+precedens
+precedensek
+precedenst
+precizitás
+precíz
+precíziós
+precízség
+predesztináció
+predesztinál
+prediszponál
+premier
+premissza
+premisszaként
+premisszának
+premisszát
+premoláris
+preparál
+preparálás
+preparátum
+presbiter
+presbiteri
+presbiteriánus
+presbitérium
+presszógép
+presztizsveszteséget
+presztízs
+preterál
+prevenció
+preventív
+priccs
+prima
+primadonna
+primitivizmus
+primitív
+primitívség
+primum
+primõrök
+princessz-fûzõ
+principii
+prior
+prioritás
+prioritási
+priorálás
+priusz
+priusza
+privata
+privilegizál
+privilégium
+privát
+prizma
+prizmás
+prizmáz
+priznic
+pro
+pro-forma
+probabilista
+probabilizmus
+problematikus
+probléma
+problémamentes
+problémája
+problémának
+problémát
+proccolás
+processzió
+processzor
+produkálja
+profanitás
+profanizál
+professzor
+professzori
+professzoros
+profi
+profil
+profilaktikus
+profilaxis
+profilba
+profilban
+profilellenállás
+profilmaró
+profilvas
+profilírozó
+profirendszer
+profit
+profitráta
+prognathia
+prognát
+prognózis
+program
+programfutások
+programja
+programozás
+programpont
+progresszív
+prohibicionista
+projekció
+proklamáció
+proktológia
+proktológiai
+proktológiával
+proktológus
+proletariátus
+proletár
+proli
+prolongáció
+prolongál
+prolongált
+prolongálása
+prológus
+propaganda
+propagandabeszéd
+propagandafogás
+propagandaszerû
+propagandatevékenységet
+propagandaízû
+propagandista
+propagandisztikus
+propagandának
+propagandát
+propagál
+propagálás
+propagáló
+propagátor
+propeller
+prorektor
+prospektus
+prosperál
+prosperálás
+prosperáló
+prosti
+prostituál
+prostituált
+prostituáltnak
+prostitúció
+prostitúcióról
+prostitúciót
+proszcénium
+proszcéniumpáholy
+proszcéniumív
+proszit!
+prosztata
+prosztetikus
+prosztó
+protekcionizmus
+protekció
+protekciója
+protekciót
+protekcióval
+protestáns
+protezsál
+prothetika
+protkó
+protokoll
+proton
+protont
+protoplazma
+protoplazmaréteg
+prototípus
+prototípusnak
+protozoa
+protozoa-
+protozoaszerû
+protozoonok
+protézis
+proustit
+provokatív
+provokatívan
+provokáció
+provokál
+provokátor
+provoszti
+provosztság
+prozelita
+prozelitizmus
+prozódiai
+préda
+prédikáció
+prédikál
+prédikálás
+prédikáló
+prédikátor
+prédikátori
+prédikátorok
+prém
+prémekbe
+prémes
+prémez
+prémium
+prémiumrendszer
+prémje
+prémmel
+prémruha
+prémvadász
+prépost
+prépostság
+préri
+prérifarkas
+prérikutya
+prérityúk
+prés
+présel
+préselt
+préselés
+préselési
+préseléssel
+présfogó
+préslap
+préslég-
+prétori
+prézli
+prím
+príma
+prímaváltó
+prímhegedû
+prímhegedûs
+prímán
+prímás
+prímási
+prímásság
+próba
+próba-
+próbababa
+próbabábu
+próbadarab
+próbafelvétel
+próbafúrás
+próbagödör
+próbaházasság
+próbaidejét
+próbaidõ
+próbaidõs
+próbajárat
+próbajáték
+próbaképp
+próbaképpen
+próbakõ
+próbalevonatot
+próbamásolat
+próbanyomat
+próbaper
+próbarepülés
+próbaterem
+próbatégely
+próbatétel
+próbavállalkozás
+próbavétel
+próbaéneklés
+próbaút
+próbáját
+próbál
+próbáld
+próbálgatja
+próbálgatva
+próbálgatásait
+próbálj
+próbáljuk
+próbálkozik
+próbálkozás
+próbálkozások
+próbálkozásra
+próbálkozók
+próbált
+próbáltam
+próbának
+próbára
+próbát
+próbázás
+prófécia
+próféta
+prófétai
+prófétanõ
+prókátor
+próza
+prózai
+prózaian
+prózaias
+prózaiság
+prózaíró
+prûd
+prüdéria
+prüszköl
+prüszkölés
+prüszkölõ
+pszeudo-
+pszichikai
+pszichiáter
+pszichiátria
+pszichiátriai
+pszichoanalitikai
+pszichoanalitikus
+pszichoanalizál
+pszichoanalízis
+pszichológia
+pszichológus
+pszichopata
+pszichoszomatikus
+pszichotróp
+psziché
+pszichózis
+pszichózissal
+pszt!
+pubertás
+pubertásban
+publicitás
+puccs
+pucer
+pucolhatnék
+pucolj!
+pucér
+puding
+pudli
+puff
+puff!
+puffadt
+puffadás
+puffan
+puffanás
+puffanással
+puffanó
+puffaszt
+puffer-
+puffjáték
+puffog
+puffogás
+puffos
+pufi
+pufogtat
+pufók
+puha
+puhafa
+puhakalap
+puhaszájú
+puhaság
+puhatestû
+puhatestûek
+puhatolt
+puhatolódzás
+puhatolózás
+puhul
+puhány
+puhára
+puhít
+puhított
+pukedli
+pukk
+pukkadni
+pukkan
+pukkant
+pukkantó
+pukkanás
+pukkanó
+puliszka
+pulpitus
+pult
+pulyka
+pulykakakas
+pulzus
+pulzusát
+pulzál
+pulzálva
+pulzálás
+pulóver
+pulóvernyak
+puma
+pumpa
+pumpol
+pumpoló
+pumpája
+pumpál
+punci
+puncs
+puncsos
+punk
+pupilla
+purgatórium
+purgál
+purgáló
+puritanizmus
+puritán
+puska
+puskaagy
+puskacsõ
+puskafogások
+puskagolyó
+puskaheveder
+puskakarika
+puskalövés
+puskamûves
+puskapor
+puskapormalmi
+puskatus
+puskatûz
+puskatüzet
+puskavesszõ
+puskavégre
+puskás
+puskát
+puskázik
+pusszíroz
+puszi
+puszpáng
+puszta
+pusztaság
+pusztul
+pusztulj!
+pusztuljon
+pusztulás
+pusztulásnak
+pusztulásra
+pusztulást
+pusztuló
+pusztán
+pusztít
+pusztítás
+pusztításai
+pusztító
+puttony
+puttonyemelõ
+puzdra
+pác
+pácba
+pácban
+pácban!
+pácból
+pácfesték
+pácfolyadék
+páciens
+páclé
+páclébe
+pácol
+pácolatlan
+pácolt
+pácolás
+pácolófürdõ
+pácolószer
+páfrány
+páfránylevél
+páholy
+páholyból
+páholyülés
+pálca
+pálcasoros
+pálcavivõ
+pálcika
+pálcával
+pálfordulás
+pálha
+pálhalevél
+pálinka
+pálinkafélék
+pálinkafõzõ
+pálinkamérés
+pálinkásüveg
+pálinkát!
+pálma
+pálmafajta
+pálmaház
+pálmalevél
+pálmát
+pálya
+pálya!
+pálya-
+pályadíj
+pályadíjat
+pályaelõnybe
+pályafelvigyázó
+pályafelügyelõ
+pályafenntartó
+pályafutás
+pályafutását
+pályagörbe
+pályakarbantartási
+pályakezdés
+pályakezdõ
+pályamenti
+pályamunkás
+pályamunkás-osztag
+pályarongálódás
+pályarész
+pályaszakasz
+pályatest
+pályatestet
+pályatévesztett
+pályaudvar
+pályaudvari
+pályaudvart
+pályaválasztási
+pályaváz-szerkezet
+pályája
+pályájú
+pályán
+pályára
+pályát
+pályázati
+pályázatot
+pályázik
+pályázó
+páncél
+páncélautó
+páncélba
+páncéling
+páncélkesztyû
+páncélkocsi
+páncéllemez
+páncéllemezes
+páncélos
+páncéloz
+páncélozott
+páncélruha
+páncélszekrény
+páncélterem
+páncéltörõ
+páncéltörõs
+páncélzat
+páncélzattal
+páncélököl
+páncélöv
+páni
+pánik
+pánikba
+pánikkeltõ
+pánikot
+pánikra
+pánikszerû
+pánikszerûen
+pánsíp
+pánt
+pántlika
+pántlikaféreg
+pántokból
+pányva
+pápai
+pápaszemes
+pápista
+pápistaság
+pár
+pára
+páramentesítõ
+páratartalom
+páratlan
+páratlanság
+páratlanul
+párba
+párbaj
+párbajban
+párbajozik
+párbajozó
+párbajra
+párbajsegéd
+párban
+párbeszéd
+párduc
+párducmacska
+párevezõ
+párevezõvel
+párhuzam
+párhuzamba
+párhuzamos
+párhuzamosan
+párhuzamosság
+párhuzamost
+párhuzamot
+pária
+párizsi
+párizsig
+párja
+párja?
+párját
+párkák
+párkány
+párkánya
+párkánydísz
+párkánygerenda
+párkánygyalu
+párkánymezõ
+párkányszelvény
+párkánytartó
+párkányzat
+párlat
+párna
+párnafa
+párnahuzat
+párnakõ
+párnatag
+párnácska
+párnákkal
+párnára
+párnázat
+párnázott
+párnázás
+párok
+párol
+párolgás
+párolgása
+párolgó
+párolog
+párologtat
+párologtatás
+párologtató
+párolt
+párolás
+párolódik
+páros
+párosan
+pároslapát
+párosodik
+párosodás
+párosodó
+párosul
+párosával
+pároséltû
+párosít
+párosított
+párosítás
+pároztat
+pároztatás
+párt
+párta
+pártatlan
+pártatlanság
+pártatlanul
+pártból
+pártcsoport
+pártfogol
+pártfogolt
+pártfogás
+pártfogásába
+pártfogását
+pártfogó
+pártfél
+pártgyûlés
+párthoz
+párthívek
+párthíveket
+párthûség
+párti
+pártjára
+pártját
+pártkassza
+pártmunkás
+pártnak
+pártol
+pártolója
+párton
+pártonkívüli
+pártosság
+pártot
+pártpolitikai
+pártprogram
+párttöredék
+pártunkon
+pártvezetõségi
+pártvezér
+pártviszály
+pártvonalat
+pártválasztmány
+pártában
+pártáruló
+pártázat
+párviadal
+párviadalra
+párzik
+párzás
+párzási
+párás
+párátlanít
+párátlanító
+pástétom
+pászma
+pászmákkal
+pászmás
+pászta
+pásztadõlés
+pásztor
+pásztor-
+pásztorbot
+pásztordal
+pásztorgyûrû
+pásztori
+pásztorköltemény
+pásztorlegény
+pásztorlevél
+pásztormadár
+pásztorsíp
+pásztortáska
+pásztás
+pásztáz
+pásztázás
+pát
+páter
+pátosszal
+pátosz
+pátriája?
+páva
+pávafark-égõ
+pávagalamb
+pávián
+páváskodik
+pázsit
+pázsitos
+pázsitoz
+péce
+pécéket
+pécéz
+pék
+pékbolt
+pékinas
+péklapát
+péklegény
+pékmesterség
+péksegéd
+pékség
+péküzlet
+példa
+példaadó
+példaadóan
+példabeszéd
+példabeszédbe
+példaként
+példakép
+példamutatás
+példaszerû
+példaszerûség
+példája
+példának
+példány
+példányban
+példányok
+példányonként
+példányszám
+példányszámú
+példányt
+példás
+példásan
+példásság
+példát
+példátlan
+példátlanság
+például
+példáz
+példázat
+pénisz
+pénteken
+péntekig
+pénz
+pénz-
+pénzadomány
+pénzalap
+pénzbe
+pénzbedobós
+pénzbeli
+pénzben
+pénzbeszedõ
+pénzbeváltás
+pénzbírsággal
+pénzbüntetés
+pénzbüntetésre
+pénzbüntetéssel
+pénzdarab
+pénzdolgok
+pénze
+pénze,
+pénzecske
+pénzed
+pénzedet?
+pénzegység
+pénzel
+pénzellátmány
+pénzem
+pénzember
+pénzembõl
+pénzemet!
+pénzes
+pénzeslevelû
+pénzesutalvány
+pénzeszsák
+pénzesítés
+pénzfedezet
+pénzfeldobás
+pénzfeldobással
+pénzgyûjtõ
+pénzhamisító
+pénzhez
+pénzintézet
+pénzjegy
+pénzjutalom
+pénzkibocsátással
+pénzkicsikarás
+pénzkészlet
+pénzkölcsönzés
+pénzkölcsönzõ
+pénzkölcsönzõkhöz
+pénzmag
+pénznek
+pénznem
+pénznemek
+pénzpazarlás
+pénzpocsékoló
+pénzre
+pénzrendszer
+pénzszekrény
+pénzszûke
+pénzszûkében
+pénzsóvár
+pénzsóváran
+pénzsóvárság
+pénzt
+pénzt,
+pénzt?
+pénztelen
+pénztelenség
+pénztár
+pénztárablak
+pénztárca
+pénztárcáját
+pénztárcájától
+pénztárcámnak
+pénztárgép
+pénztárnál
+pénztáros
+pénztárpult
+pénztõke
+pénzuralmi
+pénzuralom
+pénzverde
+pénzverés
+pénzverési
+pénzverõ
+pénzvágy
+pénzváltás
+pénzváltó
+pénzváltóügynök
+pénzzavarban
+pénzzel
+pénzzé
+pénzátutaló
+pénzébõl
+pénzéhes
+pénzéhez
+pénzének
+pénzérme
+pénzérmék
+pénzérméket
+pénzért
+pénzért!
+pénzét
+pénzével
+pénzéért
+pénzösszeg
+pénzösszegek
+pénzügy
+pénzügyeidet?
+pénzügyek
+pénzügyi
+pénzügyileg
+pénzügyminiszter
+pénzügyminisztérium
+pénzügyõr
+pénzügyõrség
+pénzüzletek
+pép
+pépes
+pépesít
+pépesítés
+péppé
+pépszerû
+pészách
+pézsma
+pézsmagyöngyike
+pézsmaillat
+pézsmaillatú
+pézsmaszagú
+pézsmaszarvas
+pézsmaszínû
+pír
+pírlepte
+pódium
+pók
+póker
+pókerarc
+pókhasú
+pókháló
+pókokkal
+pókos
+pókszerû
+pólus
+pólusai
+pólusvégzõdések
+pólya
+pólyakötõ
+pólyatekercs
+póló
+póni
+póniló
+pórul
+pórus
+póráz
+pórázon
+pórázra
+pórázról
+póréhagyma
+pót
+pót-
+pótadag
+pótalkatrész
+pótalkatrészek
+pótanyag
+pótanyagból
+pótbíró
+pótdinamó
+pótdíj
+pótdíjat
+pótejtõernyõ
+póthitel
+pótilleték
+pótkeret
+pótkerék
+pótkocsi
+pótkávé
+pótköltségvetés
+pótkötet
+pótlás
+pótlási
+pótlástan
+pótlék
+pótló
+pótlólagos
+pótmotor
+pótol
+pótolhatatlan
+pótolható
+pótolja
+pótszer
+pótszerelvény
+pótvonalak
+pótválasztás
+pótágy
+pótülés
+póz
+pózba
+pózna
+pózol
+pózolva
+pózolás
+pózoló
+pózt
+põre
+põrekocsi
+põreség
+pöccintés
+pöcegödör
+pöcköl
+pöcs
+pöcögtet
+pödrés
+pödör
+pöffeszkedik
+pöffeszkedés
+pöffeszkedõ
+pöfékel
+pöfékelés
+pöfög
+pöfögés
+pök
+pökhendi
+pökhendiség
+pöndörítve
+pör
+pörget
+pörgettyû
+pörgetve
+pörgetés
+pörgés
+pörgési
+pörgõ
+pörk
+pörköl
+pörkölt
+pörkölés
+pörkölési
+pörkölõ
+pörkölõkemence
+pörkölõtál
+pörlekedik
+pörlekedés
+pörlekedõ
+pörsenés
+pörsenéses
+pörzsöléssel
+pörög
+pörögni
+pöröly
+pörölymû
+pörölyözés
+pörölyözõ
+pötty
+pöttyös
+pöttöm
+pötyögtet
+pötyögtetés
+pötyögõ
+púder
+púderdoboz-betét
+púderpamacs
+púdertartó
+púp
+púpos
+púpossá
+púposság
+púpossága
+púpozott
+püffedt
+püföl
+püfölés
+püh!
+pünkösd
+pünkösdhétfõ
+pünkösdi
+pünkösdvasárnap
+püré
+püspök
+püspökbot
+püspökföveg
+püspöki
+püspökké
+püspökség
+püspöksüveg
+quo
+r-ben
+r-hang
+rab
+rabbi
+rabiga
+rabigába
+rabja
+rabjává
+rablott
+rablás
+rablásai
+rablást
+rabló
+rabló-pandúrt
+rablóhadjárat
+rablók
+rablókirály
+rablótámadás
+rablótámadást
+rabnõ
+rabol
+rabomobil
+rabruha
+rabszolga
+rabszolgahajó
+rabszolgai
+rabszolgakereskedõ
+rabszolgamunka
+rabszolgaszállító
+rabszolgaság
+rabszolgaságban
+rabszolgatartó
+rabszolgává
+rabszállító
+rabság
+rabul
+raccsol
+raccsoló
+racionalizmus
+racionalizáció
+racionalizál
+racionalizálás
+racionális
+racionálás
+radar
+radarberendezés
+radarelhárítás
+radarernyõ
+radarhálózat
+radarjel
+radarral
+radarzavaró
+radarállomás
+radikalizmus
+radikalizálódik
+radikalizálódás
+radikális
+radikálisan
+radio-
+radioaktivitás
+radioaktív
+radioaktívvá
+radiológia
+radioszkópia
+radioterápia
+radiál
+radiális
+radiátor
+radír
+radírgumi
+raffináló
+raffinátum
+rafinált
+rafinõr
+rag
+ragacs
+ragacsos
+ragad
+ragadja
+ragadni
+ragadozó
+ragadozók
+ragadozószerûen
+ragadt
+ragadtatva
+ragadó
+ragadós
+ragadóssá
+ragadósság
+ragaszkodik
+ragaszkodva
+ragaszkodás
+ragaszkodó
+ragaszt
+ragasztott
+ragasztás
+ragasztékszó
+ragasztó
+ragasztó-szalag
+ragasztóanyag
+ragasztós
+ragasztószalag
+ragasztószalaggal
+ragasztószer
+ragasztószerrel
+raglán
+ragoz
+ragozatlan
+ragozott
+ragozás
+ragozásában
+ragtapasszal
+ragtapasz
+ragtime
+ragu
+ragya
+ragyog
+ragyogás
+ragyogó
+ragyogóan
+ragyogóbb
+ragyogóvá
+ragály
+ragályos
+rahát
+raj
+rajnai
+rajon
+rajong
+rajongva
+rajongás
+rajongásig
+rajongással
+rajongó
+rajongója
+rajongók
+rajt
+rajt!
+rajta
+rajta!
+rajta?
+rajtacsíp
+rajtad
+rajtakap
+rajtakapják
+rajtakaptak!
+rajtakapva
+rajtakapás
+rajtam
+rajtatok
+rajtaüt
+rajtaütés
+rajtaütéssel
+rajtaütésszerû
+rajtaütésszerûen
+rajtaütést
+rajtgép
+rajthely
+rajthoz
+rajtol
+rajtpózna
+rajtuk
+rajtvonal
+rajvezetõ
+rajz
+rajzfilm
+rajzfilmkészítés
+rajzik
+rajzkréta
+rajzlap
+rajzlapot
+rajzmásoló
+rajzol
+rajzolt
+rajzolás
+rajzoló
+rajzolóként
+rajzot
+rajzpadlás
+rajzpapír
+rajzsorozat
+rajzszeg
+rajzszegez
+rajzszegezi
+rajzszeggel
+rajzszén
+rajzszén-tartó
+rajzszög
+rajztoll
+rajztábla
+rajzvázlat
+rajzás
+rajzó
+rajzóra
+rajzú
+rak
+rakat
+rakfelület
+rakja
+raklap
+raknám
+rakodik
+rakodás
+rakodási
+rakodó
+rakodócsillés
+rakodógép
+rakodóhajó
+rakodóhely
+rakodóhíd
+rakodóképesség
+rakodónyílás
+rakodópart
+rakodótér
+rakomány
+rakomány-elrendezõ
+rakományelrendezõ
+rakományjegyzék
+rakonca
+rakoncátlan
+rakott
+rakpart
+rakparthasználat
+rakparti
+rakpartilleték
+rakpartnál
+rakparton
+rakpartõr
+raksúly
+raktár
+raktára
+raktárba
+raktárdíj
+raktárfelügyelõ
+raktárhelyiség
+raktári
+raktárkészlet
+raktárkönyv
+raktárnok
+raktárnyílás
+raktáron
+raktáros
+raktároz
+raktározás
+raktárral
+raktárt
+raktárállomány
+raktárépület
+raktér
+rakva
+rakás
+rakéta
+rakétacukorka
+rakétafej
+rakétahajtómû
+rakétajelzés
+rakétakilövõ
+rakétalövedék
+rakétameghajtás
+rakétasiló
+rakétasugár
+rakétatechnika
+rakétatudomány
+rakétákkal
+rakétázás
+ramazúri
+ramazúrit
+rand
+randalírozó
+randevú
+randevúhely
+randevúzik
+randi
+randizik
+ranettalma
+rang
+rangban
+rangelsõ
+rangidõs
+rangidõsség
+rangja
+rangjelzés
+rangjelzõ
+rangjához
+rangjára
+rangjával
+ranglétra
+rangon
+rangos
+rangot
+rangra
+rangrejtett
+rangrejtve
+rangsor
+rangsorba
+rangsorol
+rangsorolandó
+rangsorolt
+rangszervezet
+rangtól
+rangú
+rangúság
+rapityára
+rapszodikus
+rapszodikusan
+rapszódia
+raritások
+rasszista
+rasszizmus
+raszter-mélynyomás
+ratifikál
+ratifikálás
+ravasz
+ravaszkodik
+ravaszkodás
+ravaszkás
+ravaszkásan
+ravaszság
+ravaszt
+ravaszul
+ravaszvédõ
+razzia
+razziát
+razziázik
+reagens
+reagál
+reagálás
+reagálásra
+reagáló
+reakció
+reakcióhõ
+reakciókerék
+reakcióképesség
+reakciós
+reakciót
+reaktivitás
+reaktivált
+reaktor
+reaktív
+realista
+realisztikus
+realitás
+realizmus
+rebarbara
+rebarbaragyökér
+rebben
+rebbent
+rebbenés
+rebellis
+rebesgetik
+rebesgetik,
+reccs!
+reccsen
+reccsenés
+recehártya
+recehártyán
+recenzió
+recenziós
+recepció
+recept
+receptje
+receptre
+recesszus
+reciprok
+recitáló
+recseg
+recseg-ropog
+recsegtet
+recsegve
+recsegés
+recsegés-ropogás
+recsegõ
+recsegõ-ropogó
+recsegõsség
+recés
+recésgyomor
+recéz
+redukció
+redukál
+redukált
+redukálás
+redukáló
+redut
+redõ
+redõkbe
+redõny
+redõnyheveder
+redõnyt
+redõnyzár
+redõnyös
+redõs
+redõt
+redõtlen
+redõz
+redõzés
+redõzõdik
+redõzöttség
+refektórium
+refektóriumi
+referencia
+referens
+referálás
+reff
+reffel
+reffeli
+reffelõ
+reflektor
+reflektorfény
+reflektorsorozat
+reflex
+reflexek
+reflexió
+reflexként
+reform
+reform-
+reformáció
+reformál
+reformálás
+reformáló
+reformátor
+református
+refrakció
+refrén
+refrént
+rege
+regeneráció
+regenerálás
+regeneráló
+regenerálódik
+regenerálódás
+regenerátor
+reggel
+reggeli
+reggelig
+reggelit
+reggelizik
+reggelt
+reggelt!
+reggeltõl
+regionális
+regiszter
+regiszterszelep
+regisztert
+regisztrál
+regisztráló
+regressziós
+regresszív
+regruta
+regulátor
+regulázás
+regény
+regény-
+regényes
+regényirodalom
+regénymûfaj
+regényrovat
+regényt
+regényíró
+rehabilitáció
+rehabilitál
+reinkarnáció
+rejlik
+rejlõ
+rejlõen
+rejszol
+rejt
+rejteget
+rejtegetett
+rejtegetés
+rejtek
+rejtekfû
+rejtekhely
+rejtekhelyre
+rejtekhelyrõl
+rejtekében
+rejtekébõl
+rejtelem
+rejtelmessé
+rejtet
+rejtett
+rejtetten
+rejti
+rejtjel
+rejtjeles
+rejtjelez
+rejtjelezés
+rejtjelkulcs
+rejtjelkódex
+rejtjeltávirat
+rejtjelzés
+rejtjelzõ
+rejtvény
+rejtvényt
+rejtély
+rejtélyes
+rejtélyesen
+rejtélyességétõl
+rejtélyt
+rejtõzik
+rejtõzködik
+rejtõztet
+rejtõztetõ
+rejtõzve
+rejtõzõ
+rekamié
+reked
+rekedt
+rekedten
+rekedtes
+rekedtesen
+rekedtre
+rekedtség
+rekedés
+rekesz
+rekeszbe
+rekeszekkel
+rekeszekre
+rekeszes
+rekeszfal
+rekeszhártya
+rekeszizom
+rekesztõtábla
+rekettye
+rekettyés
+rekkenõ
+reklamáció
+reklám
+reklámcikk
+reklámcikke
+reklámcsináló
+reklámcédula
+reklámeszköz
+reklámfõnök
+reklámja
+reklámkocsi
+reklámmelléklet
+reklámnak
+reklámot
+reklámoz
+reklámozás
+reklámozó
+reklámröplap
+reklámszakma
+reklámszakértõ
+reklámszöveg
+reklámáruja
+rekognoszkál
+rekonstrukció
+rekonstruál
+rekonstruálás
+rekonstruálása
+rekonszideráció
+rekontráz
+rekonvaleszcens
+rekord
+rekordot
+rekordtermés
+rektifikáció
+rektifikál
+rektifikálás
+rektifikáló
+rektifikátor
+rektor
+rektorhelyettes
+rekuperáció
+rekuperációval
+rekurzív
+rekvirál
+rekvirálás
+relativisztikus
+relativitás
+relatív
+relaxáció
+relaxációs
+relief
+reluxa
+relé
+remeg
+remegtet
+remegve
+remegés
+remegõ
+remegõs
+remek
+remek!
+remekbe
+remekel
+remekmû
+remekíró
+remekül
+remete
+remetebarlang
+remetelak
+remetenõ
+remeterák
+remi
+reminiszcencia
+reminiszkáló
+remittenda
+remonda
+remél
+remélem
+remélem,
+remélt
+reméltem
+remélõ
+reménnyel
+remény
+reménye
+reményeit
+remények
+reményekbe
+reményeket
+reményekre
+reménykedik
+reménykedve
+reménykedõ
+reménysugár
+reménység
+reményt
+reménytelen
+reménytelenség
+reménytelenül
+reményteljes
+reményvesztett
+reményvesztetten
+reményében
+reményében,
+reményét
+remízbe
+rend
+rend-
+rendbe
+rendbehoz
+rendbehozás
+rendbehozó
+rendben
+rendben!
+rendbentartás
+rendberakás
+rendbontás
+rendbontó
+rendbontók
+rendcsinálás
+rendek
+rendel
+rendelet
+rendeleti
+rendeletére
+rendelik
+rendelkezik
+rendelkezés
+rendelkezésedre
+rendelkezések
+rendelkezéseknek
+rendelkezési
+rendelkezésre
+rendelkezéssel
+rendelkezésére
+rendelkezõ
+rendellenes
+rendellenesen
+rendellenesség
+rendelt
+rendeltetés
+rendeltetési
+rendelvényes
+rendelés
+rendelési
+rendelésre
+rendelést
+rendelõ
+rendelõintézet
+rendelõlap
+rendes
+rendesen
+rendesen!
+rendesnél
+rendesség
+rendet
+rendetlen
+rendetlenség
+rendetlenséget
+rendetlenül
+rendez
+rendezetlen
+rendezetlenül
+rendezett
+rendezi
+rendezkedett
+rendezkedik
+rendezés
+rendezése
+rendezési
+rendezõ
+rendezõ-pályaudvar
+rendezõi
+rendezõje
+rendezõként
+rendezõpályaudvar
+rendezõség
+rendfelszedõ
+rendfokozat
+rendfokozati
+rendhagyó
+rendház
+rendicsek!
+rendje
+rendjel
+rendjelszalag
+rendjén
+rendkívül
+rendkívüli
+rendkívülien
+rendkívüliség
+rendrakó
+rendre
+rendre!
+rendreforgató
+rendreutasít
+rendreutasítják
+rendreutasítás
+rendsodrás
+rendszabály
+rendszabályok
+rendszabályoz
+rendszalag
+rendszer
+rendszer-
+rendszere
+rendszeres
+rendszeresen
+rendszeresség
+rendszeretet
+rendszeretõ
+rendszerez
+rendszerint
+rendszerszerû
+rendszert
+rendszertan
+rendszertani
+rendszertannal
+rendszertelen
+rendszertelenség
+rendszertelenül
+rendszerû
+rendszám
+rendszámot
+rendszámtábla
+rendszámát
+rendtag
+rendtartás
+rendzavarás
+rendzavaró
+rendészet
+rendészeti
+rendíthetetlen
+rendíthetetlenség
+rendíthetetlenül
+rendíti
+rendõr
+rendõrautó
+rendõrbíró
+rendõrbíróság
+rendõrcsapat
+rendõrfelügyelõ
+rendõrfõnök
+rendõrhajsza
+rendõri
+rendõrileg
+rendõrjárõrök
+rendõrkapitány
+rendõrkopó
+rendõrkordon
+rendõrkutya
+rendõrkém
+rendõrkülönítmény
+rendõrosztag
+rendõrspicli
+rendõrszakasz
+rendõrség
+rendõrségen
+rendõrséget
+rendõrségi
+rendõrségnek
+rendõrállam
+rendõrõrmester
+rendõrõrs
+rendõrõrszoba
+rendû
+rendül
+rendületlen
+rendületlenség
+rendületlenül
+rendült
+renegát
+reneszánsz
+reng
+renget
+rengeteg
+rengeteget
+rengetegszer
+rengetõ
+rengés
+rengéses
+rengésálló
+renomé
+renonsz
+renonszot
+renovál
+rentábilis
+renyhe
+renyheség
+reológia
+repatriál
+repatriálás
+repce
+reped
+repedezett
+repedezik
+repedezés
+repedt
+repedtté
+repedés
+repedések
+repedéseket
+repedéskitöltõ
+repedésvizsgáló
+repertoár
+repesett
+repesz
+repeszbiztos
+repeszbomba
+repeszdarab
+repeszek
+repeszgránát
+repeszhatás
+repeszt
+repesztett
+repesztés
+repeta
+repetázik
+repkény
+reprezentációs
+reprodukció
+reproduktív
+reprodukál
+reprodukálás
+reptér
+reptéren
+reptéri
+republikanizmus
+republikánus
+repít
+repül
+repülni
+repült
+repülés
+repülésben
+repüléshez
+repülési
+repülésre
+repüléssel
+repülést
+repüléstan
+repülésügy
+repülésügyi
+repülõ
+repülõ-irányfényeket
+repülõbaleset
+repülõbenzin
+repülõbomba
+repülõdandár-parancsnok
+repülõezredes
+repülõfedélzet
+repülõfelszerelés
+repülõforgalommal
+repülõfõhadnagy
+repülõgép
+repülõgép-anyahajó
+repülõgép-eltérítés
+repülõgép-szerelõ
+repülõgép-szerencsétlenség
+repülõgépanyahajó-cirkáló
+repülõgépbõl
+repülõgépek
+repülõgépen
+repülõgépet
+repülõgéppel
+repülõgéprõl
+repülõgépé)
+repülõhal
+repülõiskola
+repülõjegy
+repülõjárat
+repülõjáratok
+repülõmarsall
+repülõn
+repülõnek
+repülõosztály
+repülõpróba
+repülõraj
+repülõrajt
+repülõszerencsétlenség
+repülõszolgálat
+repülõszonda
+repülõszázad
+repülõsó
+repülõtere
+repülõtiszt
+repülõtiszt-helyettes
+repülõtiszti
+repülõtábornok
+repülõtámadás
+repülõtányér
+repülõtér
+repülõtéri
+repülõutas
+repülõutat!
+repülõvel
+repülõõrnagy
+repülõút
+respektál
+rest
+restancia
+restaurál
+restaurálás
+restelli
+restség
+reszel
+reszeli
+reszelék
+reszelés
+reszelõ
+reszelõkagyló
+reszelõs
+reszket
+reszket,
+reszketeg
+reszketve
+reszketve,
+reszketés
+reszketése
+reszketõ
+reszketõen
+reszketõs
+reszkíroz
+retek
+retesz
+reteszel
+reteszelés
+reteszelõ
+retesznyelv
+reteszt
+reteszzár
+retikül
+retkes
+retorta
+retortacsoport
+retortafedõ
+retortaszén
+retrográd
+retteg
+retteg,
+rettegett
+rettegés
+rettegéstõl
+rettenetes
+rettenetesen
+rettenthetetlen
+rettenthetetlenség
+rettentõ
+rettentõen
+retus
+retusfesték
+retusál
+retusálás
+retyi
+reuma
+reumaszerû
+reumatikus
+reumában
+reumás
+reumát
+reumától
+reve
+reveláció
+reverberáció
+reverenda
+reverzibilis
+reverzíbilis
+reveréteg
+reves
+revesedni
+revideál
+revideálás
+revizionista
+revizionizmus
+revizor
+revolver
+revolvergolyó
+revolverharc
+revolverlövések
+revolverlövéssel
+revolvermarkolat
+revolvert
+revízió
+revü
+revügörl
+rezdül
+rezeda
+rezeg
+rezegtet
+rezegteti
+rezelve
+rezerváció
+rezervációs
+rezervált
+rezerváltság
+rezes
+rezez
+rezgés
+rezgéscsillapító
+rezgési
+rezgéskeltõ
+rezgésmentes
+rezgésmód
+rezgésszám
+rezgõ
+rezgõfû
+rezgõkör
+rezgõmozgás
+rezgõnyárfa
+rezgõpázsit
+rezidencia
+rezidens
+reziduum
+rezignáció
+rezignált
+rezignáltan
+rezisztencia
+rezisztív
+rezonancia
+rezonál
+rezonáló
+rezonáns
+rezsi
+rezsiköltség
+rezsiköltségek
+rezsim
+rezzent
+rezümé
+reá
+reális
+reálisan
+reánk
+riad
+riadalmat
+riadalom
+riadt
+riadó
+riadócsengõ
+riadókészültséget
+riadót
+riaszt
+riasztó
+riasztóan
+riasztóberendezés
+riasztócsengõ
+ribanc
+ribi
+ribiszke
+ribiszkebokor
+ribizli
+ribizlibokor
+ricinusbokor
+ricinusmag
+ricsaj
+ricsajjal
+ricsajozás
+rideg
+ridegen
+rideggé
+ridegség
+rigli
+rigolya
+rigolyás
+rigyet
+rigyetés
+rigó
+rikkancs
+rikolt
+rikoltozás
+rikoltás
+riksa
+rikácsol
+rikácsolás
+rikácsoló
+rikít
+rikító
+rikítóan
+rikítóság
+ring
+ringat
+ringatja
+ringatás
+ringató
+ringlispíl
+ringló
+ringy-rongy
+ringyó
+ringás
+ringó
+ringókõ
+rinyál
+ripacs
+ripacskodik
+ripacsos
+ripityára
+riport
+riporter
+riporteri
+riporterstílus
+riportfénykép
+riportot
+riportstílus
+riportázs
+ripsz
+ripõk
+riszt
+riszálja
+ritka
+ritkaság
+ritkul
+ritkulás
+ritkán
+ritkás
+ritkásan
+ritkít
+ritkítható
+ritkítja
+ritkítva
+ritkítás
+ritkító
+ritmikus
+ritmikusan
+ritmus
+ritmusa
+ritmusos
+ritmusrész
+ritualizmus
+rituálé
+rivaldafény
+rivalg
+rivall
+rivális
+rizalit
+rizikó
+rizikós
+rizs
+rizsa
+rizses
+rizsfelfújt
+rizsföld
+rizsma
+rizspapír
+rizspálinka
+rizsszalma
+rizsát
+robaj
+robajjal
+robban
+robbant
+robbantja
+robbantás
+robbantó
+robbantóanyag
+robbantógyutacs
+robbantógyújtó
+robbantólyuk
+robbantótöltény
+robbantózsinór
+robbanva
+robbanás
+robbanása
+robbanásbiztos
+robbanási
+robbanásig
+robbanásszerû
+robbanékony
+robbanékonyságot
+robbanó
+robbanóanyag
+robbanófej
+robbanószer
+robbanótöltet
+robber
+robog
+robogó
+roboráló
+roboráns
+robot
+robotautomata
+robotgép
+robotol
+robotolás
+robotpilóta
+robusztus
+rockzene
+rockzenekar
+rodázik
+rodéziai
+rogy
+rogyadozik
+rogyadozni
+rogyva
+rohadt
+roham
+rohama
+rohambrigád
+rohamcsapat
+rohamkés
+rohamkészültség
+rohamléptekkel
+rohammal
+rohammentõs
+rohammunka
+rohammunkamódszer
+rohamos
+rohamosan
+rohamot
+rohamoz
+rohampuska
+rohampáholy
+rohamra
+rohamsisak
+rohamszíj
+rohan
+rohan,
+rohangál
+rohangászik
+rohanni
+rohant
+rohanva
+rohanás
+rohanó
+rojt
+rojtos
+rojtosodás
+rojtoz
+rojtozott
+rojtozás
+rojttal
+rokkant
+rokkantság
+rokkantsági
+rokkanttá
+rokokó
+rokon
+rokonai
+rokoni
+rokonlelkûség
+rokonok
+rokonszenvek
+rokonszenves
+rokonszenvez
+rokonszenvezve
+rokonszenvezõ
+rokonszenvvel
+rokonság
+rokonságban
+rokonsági
+rokonságot
+rokonának
+roletta
+roller
+rollerozik
+rollert
+rolád
+roló
+rom
+romanticizmus
+romantika
+romantikus
+romantikusan
+romantikussá
+romantizál
+romba
+rombikus
+romboedrikus
+rombolás
+rombolásai
+romboló
+romboéderes
+rombusz
+romhalmaz
+romlandó
+romlatlan
+romlik
+romlott
+romlottság
+romlás
+romlása
+romlásnak
+romlást
+romlásához
+romlását
+romló
+rommá
+romok
+romokban
+romos
+román
+románc
+roncs
+roncskocsi
+roncsol
+roncsolás
+roncsolásos
+roncsszállító
+roncstelep
+ronda
+rondaság
+ronggyá
+rongy
+rongybaba
+rongycsomó
+rongyember
+rongyfecni
+rongykorong
+rongykoronggal
+rongyok
+rongyos
+rongyosodás
+rongyosság
+rongyszõnyeg
+rongyválogató
+rongál
+rongálja
+rongálás
+rongálódás
+ront
+rontja
+rontás
+ropi
+ropog
+ropogtat
+ropogtatott
+ropogtatva
+ropogtatás
+ropogás
+ropogó
+ropogós
+ropogósra
+roppan
+roppant
+roppantul
+roppanás
+roskad
+roskadozik
+roskadozó
+roskatag
+roskatagság
+rossebb
+rossz
+rossz!
+rossz,
+rosszabb
+rosszabbnál
+rosszabbodik
+rosszabbodás
+rosszabbodó
+rosszabbul
+rosszabbít
+rosszabbítás
+rosszakarat
+rosszakaratú
+rosszakaratúság
+rosszakarója
+rosszaktól
+rosszalkodik
+rosszall
+rosszallás
+rosszalló
+rosszallóan
+rosszarcú
+rosszat
+rosszban
+rosszhiszemû
+rosszhiszemûen
+rosszhiszemûség
+rosszindulat
+rosszindulattal
+rosszindulatú
+rosszindulatúan
+rosszindulatúság
+rosszkedv
+rosszkedve
+rosszkedvet
+rosszkedvét
+rosszkedvû
+rosszkedvûen
+rosszkedvûnek
+rosszkedvûség
+rosszkor
+rosszmodorú
+rosszmájú
+rosszmájúság
+rossznéven
+rosszra
+rosszul
+rost
+rosta
+rostaalja
+rostaalji
+rostanyag
+rostokol
+roston
+rostonsült
+rostos
+rostosodás
+rostossá
+rostosság
+rostál
+rostált
+rostálás
+rostálási
+rostáló
+rostán
+rostély
+rostélyos
+roszogó
+rothad
+rothadt
+rothadtság
+rothadás
+rothadó
+rothaszt
+rothasztó
+rotunda
+rotyog
+rotációs
+rotál
+rotángpálma
+rovancs
+rovancsol
+rovancsolás
+rovar
+rovar-
+rovarfertõzés
+rovarkártevõ
+rovarok
+rovarokat
+rovarokból
+rovarriasztó
+rovarszerû
+rovat
+rovata
+rovatban
+rovatvezetõ
+rovatvezetõje
+rovott
+rovás
+rovásadó
+rovásomra
+rovásos
+rováspálca
+rovással
+rovására
+rovásírás
+rovásírásos
+rovásírással
+rovátka
+rovátkol
+rovátkolt
+rovátkolás
+rovátkoló
+rovátkájába
+rovátkált
+rovátkás
+rovátkát
+rovátkával
+rovátkáz
+rovó
+rozettás
+rozmaring
+rozmár
+rozoga
+rozogaság
+rozs
+rozsda
+rozsdabarna
+rozsdafoltos
+rozsdagátló
+rozsdaszínû
+rozsdavörös
+rozsdás
+rozsdásodik
+rozsdásodás
+rozsdát
+rozsomák
+rozzant
+rubel
+rubeóla
+rubin
+rubinvörös
+rubrika
+ruca
+ruci
+rudacska
+rudacskája
+rudacskával
+rudak
+rudas
+rudazat
+rugalmas
+rugalmasan
+rugalmassá
+rugalmasság
+rugalmassági
+ruganyos
+ruganyosan
+ruganyossá
+ruganyosság
+rugby
+rugdalódzik
+rugdalózó
+rugó
+rugós
+rugóshorog
+rugót
+rugótartó
+rugótok
+rugóval
+rugóz
+rugózat
+rugózás
+ruha
+ruha,
+ruhaakasztó
+ruhaanyag
+ruhacsipesz
+ruhadarab
+ruhadarabok
+ruhaderék
+ruhadísz
+ruhadíszítõ
+ruhafestõ
+ruhafogas
+ruhaipar
+ruhanemû
+ruhapróba
+ruhaszárító
+ruhatartó
+ruhatetû
+ruhatár
+ruhatárba
+ruhatári
+ruhatáros
+ruhaujj
+ruhában
+ruháinak
+ruháit
+ruhája
+ruhájába
+ruhájának
+ruháját
+ruhájú
+ruhák
+ruhákkal
+ruhás
+ruhásszekrény
+ruhát
+ruhátlan
+ruházat
+ruházati
+ruházható
+rulett
+rulírozó
+rum
+rumadagot
+rumbatök
+rumból,
+rumli
+rumos
+rumpli
+rund
+rundot
+runikus
+ruta
+rutin
+rutin-
+rutinmunka
+rutinos
+rutinszerûvé
+rutinvizsgálat
+rá!
+ráad
+ráadás
+ráadás-ív
+ráadásul
+ráakad
+ráakaszt
+ráakasztás
+rábeszél
+rábeszélés
+rábeszéléssel
+rábeszélõ
+rábizonyít
+rábizonyítani
+rábizonyítás
+rábocsát
+ráborít
+rábukik
+rábukkan
+rábámul
+rábámulás
+rábélyegez
+rábír
+rábíz
+rábízza
+ráccsal
+rács
+rács-mélynyomás
+rácsa
+rácsajtó
+rácsap
+rácsapás
+rácsavar
+rácskerítés
+rácskör
+rácsos
+rácsoz
+rácsozat
+rácsra
+rácsszemétaprító
+rácsszemétdaráló
+rácssûrûség
+rácáfol
+rácéloz
+rád
+rád!
+rádiusz
+rádiuszvektor
+rádió
+rádió-
+rádió-goniométer
+rádió-irányleadó
+rádió-kapcsolási
+rádió-távirányítású
+rádió-összeköttetés
+rádióadás
+rádióadók
+rádióadóval
+rádióamatõr
+rádióban
+rádiócsõ
+rádiócsõbura
+rádiófrekvencia
+rádiógram
+rádiógramofon
+rádióhullámok
+rádióhíradás
+rádióirányítás
+rádióirányításos
+rádióirányítással
+rádióirányítású
+rádiójáték
+rádiókezelõ
+rádiókészülék
+rádióközvetítés
+rádiókülönítmény
+rádióleadó
+rádiólokáció
+rádiólokátor-zavarás
+rádiómûsor
+rádión
+rádiós
+rádióstiszt
+rádiószögmérõ
+rádiótelefon
+rádióteleszkóp
+rádiótávbeszélés
+rádiótávbeszélõ
+rádiótávirat
+rádiótáviratot
+rádiótávírász
+rádióval
+rádióvevõ
+rádióvezérelt
+rádióvezérlés
+rádióállomás
+rádióüzenet
+rádióüzenetet
+rádli
+rádob
+rádolgozott
+rádumál
+rádupláz
+rádöbben
+rádöbbentem,
+ráenged
+ráerõltet
+ráerõlteti
+ráerõszakol
+ráerõszakolja
+ráerõszakolás
+ráerõsít
+ráerõsített
+ráerõsítés
+ráesik
+ráesteledett
+ráeszmél
+ráeszmélés
+ráesõ
+ráfalazás
+ráfanyalodik
+ráfilmezett
+ráfilmezés
+ráfizet
+ráfizetett
+ráfizetni
+ráfizetéses
+ráfog
+ráfordít
+ráfordítás
+ráfordítások
+ráfröccsent
+ráfröcsköl
+ráfázol!
+ráförmed
+ráfúvó
+rág
+rágalmakat
+rágalmakkal
+rágalmaz
+rágalmazás
+rágalmazó
+rágalom
+rágalomhadjárat
+rágcsál
+rágcsálás
+rágcsáló
+rágja
+rágnivaló
+rágyújt
+rágyújtani?
+rágás
+rágó
+rágódik
+rágófelület
+rágógumi
+rágóizom
+rágóizomgörcs
+rágós
+rágósság
+ráhagy
+ráhagyás
+ráhajlik
+ráhajt
+ráhangol
+ráhangzó
+ráharap
+ráhelyez
+ráhibázik
+ráhozza
+ráhull
+ráhurkol
+ráhágnak
+ráhímez
+ráhúz
+ráhúzás
+ráijesztéssel
+ráilleszt
+ráirányít
+ráirányítja
+ráismer
+rája
+rájár
+rájön
+rájöttem,
+rák
+rákacsint
+rákap
+rákapcsol
+rákattint
+rákból
+ráken
+rákenik
+rákerül
+rákezd
+rákfogó
+rákfélék
+rákháló
+rákiabál
+rákiált
+rákja
+rákkeltõ
+rákkutatás
+rákolló
+rákoppint
+rákos
+rákot
+rákra
+ráktérítõ
+rákényszerít
+rákényszeríti
+rákölteni
+ráköt
+rákötöz
+rálapolás
+rálegyintés
+rálel
+ráles
+rálicitál
+rálép
+rálõ
+rálõdöz
+rám
+rám!
+ráma
+rámar
+rámegy
+rámenõs
+rámenõsen
+rámenõsség
+rámordul
+rámosolyog
+rámpa
+rámutat
+rámutatás
+rámán
+rámászik
+rámáz
+ránc
+ráncait
+ráncigál
+ráncol
+ráncolja
+ráncolt
+ráncolás
+ráncolódik
+ráncolódás
+ráncos
+ráncosodik
+ráncossá
+ráncot
+ránctalan
+ráncvetés
+rándul
+rándulás
+ránehezedik
+rángat
+rángatja
+rángatott
+rángatás
+rángató
+rángatódzás
+rángatódzó
+rángatózik
+rángatózva
+rángatózás
+rángás
+rángó
+rángógörcs
+ránk
+ránt
+rántani
+rántotta
+rántás
+rányit
+rányitja
+rányom
+rányomás
+rányomása
+ránézésre
+ráolvas
+ráolvasás
+ráolvasással
+ráordítanak
+ráparancsol
+rápillant
+ráprésel
+ráragad
+ráragaszt
+ráragasztás
+rárak
+rárakja
+rárakás
+rárakódás
+rárepül
+ráripakodik
+rárivall
+rárohan
+rárohanás
+ráront
+ráruház
+ráránt
+ráró
+ráspoly
+ráspolyoz
+ráspolyozó
+rászed
+rászedhetõ
+rászedhetõség
+rászedik
+rászedés
+rászegez
+rászegezi
+rászegezõdött
+rászerel
+rászokik
+rászoktat
+rászorul
+rászoruló
+rászorít
+rászáll
+rászánja
+rászáradt
+rászól
+rásóz
+rásújt
+rásülés
+ráta
+rátalál
+rátapad
+rátapint
+rátapos
+rátarti
+rátartiság
+rátartozik
+ráterel
+rátereli
+rátermett
+rátermettség
+rátesz
+ráteszi
+rátolódás
+rátukmál
+rátukmálja
+rátámad
+rátámadtak
+rátér
+rátét
+rátétel
+rátör
+rátörés
+rátûz
+ráugrik
+ráuszít
+ráuszítja
+rávakkant
+rávall
+rávall!
+rávarrt
+rávehetõ
+rávenni
+ráver
+ráveri
+ráverõdõ
+rávesz
+ráveszi
+ráveti
+rávezet
+rávezetés
+rávilágít
+rávisz
+rávág
+ráz
+rázendít
+rázkódik
+rázkódtat
+rázkódtatás
+rázkódás
+rázkódási
+rázkódásmentes
+rázkódó
+rázogat
+rázott
+rázta
+rázza
+rázás
+rázással
+rázásálló
+rázó
+rázóasztal
+rázócsúszda
+rázógép
+rázórosta
+rázórostás
+rázós
+rázószekrény
+rázószita
+rááll
+ráébred
+ráépítmény
+ráépítés
+ráér
+ráérõ
+ráérõsen
+ráígér
+ráígérés
+ráígérõ
+ráönt
+ráönti
+ráül
+ráüt
+ráüzen
+réce
+rég
+régebben
+régebben,
+régebbi
+régen
+régensherceg
+régenskirályné
+régenstárs
+régente
+réges-rég
+régi
+régi,
+régies
+régimódi
+régiség
+régiségek
+régiségû
+régiói
+régmúlt
+régész
+régészet
+régészeti
+régóta
+rém
+rém-
+rémdráma
+réme
+rémes
+rémesen
+rémesség
+rémhír
+rémhírterjesztés
+rémhírterjesztõ
+rémisztõ
+rémisztõen
+rémkép
+rémlátomás
+rémregény
+rémséges
+rémtett
+rémtetteknek
+rémét
+rémít
+rémítõ
+rémítõen
+rémül
+rémüldözik
+rémüldözõ
+rémület
+rémületben
+rémületemre
+rémületes
+rémületet
+rémülettõl
+rémült
+rémültek
+rémülve
+rénszarvas
+répa
+répával
+rés
+résel
+réselés
+réselõ
+réselõgép
+réselõkar
+réselõlap
+résen
+résen!
+réshang
+réslövõ
+résnyire
+rést
+rész
+rész-
+részarányos
+részarányosság
+részbeli
+részben
+részbeni
+részbõl
+része
+részecske
+részecskegyorsító
+részecskékbõl
+részed
+részedrõl
+részeg
+részeges
+részegeskedik
+részegeskedés
+részegesség
+részegség
+részegít
+részegítõ
+részeire
+részeit
+részek
+részeket
+részekre
+részemrõl
+részen
+részeredõ
+részes
+részesedik
+részesedés
+részesedést
+részeshatározó
+részesség
+részesít
+részesítés
+részesítõ
+részesül
+részesült
+részesülõ
+részesülõk
+részfoglalkozás
+részhalmaz
+részhang
+részi
+részidõs
+részleg
+részlege
+részleges
+részlegesen
+részlegparancsnok
+részlet
+részlet-
+részletben
+részlete
+részletek
+részletekbe
+részletekben
+részleteket
+részleteket!
+részletekkel
+részletekre
+részletes
+részletesen
+részletesség
+részletességgel
+részletez
+részletezett
+részletezve
+részletezés
+részletezõ
+részletfizetés
+részletfizetésre
+részletkérdés
+részletkérdések
+részletletagadásra
+részletrajz
+részletre
+részletében
+részletüzlet
+részpárlat
+részre
+részrehajlás
+részrehajlástól
+részrehajló
+részsorozat
+részszállítás
+részt
+résztulajdonos
+résztvevõ
+résztvevõje
+résztvevõk
+részvevõ
+részvevõk
+részvény
+részvények
+részvényes
+részvényese
+részvényjegyzõ
+részvénykibocsátás
+részvénypakett
+részvénytársaság
+részvénytõke
+részvényügynök
+részvét
+részvétel
+részvételi
+részvétellel
+részvétet
+részvétlen
+részvétlátogatásra
+részvétnyilvánítás
+részvéttel
+részvétérõl
+részvétét
+részében
+részén
+részének
+részére
+részérõl
+részét
+részösszeg
+részû
+részünkrõl
+rét
+réteg
+réteg-leválás
+rétegben
+rétegdõlés
+rétege
+rétegei
+rétegek
+rétegekre
+rétegelt
+rétegeltolódás
+réteges
+rétegesen
+rétegez
+rétegezés
+rétegezésû
+réteggel
+réteghiány
+rétegkialakítás
+rétegképzõdés
+rétegsor
+rétegszint
+rétegsüllyedés
+rétegtan
+rétegvölgy
+rétegzetlen
+rétegzõdik
+rétegzõdés
+réti
+rév
+révbe
+révben
+révedezõ
+réven
+révkalauz
+révkalauzhajó
+révkalauzolás
+révkalauzt
+révkalauzzal
+révkapitány
+révén
+révész
+réz
+réz-
+rézbánya-részvények
+rézbõl
+rézbõrû
+rézcent
+rézedény
+rézedények
+rézfoszfid
+rézfúvós
+rézfúvósok
+rézkarc
+rézkovand
+rézkovács
+rézlemezekkel
+rézmetszet
+rézmetszés
+rézmûves
+rézmûáru
+rézpénzdarab
+rézrozsda
+rézszerelvények
+rézszulfát
+rézszínû
+rézsút
+rézsútos
+rézsútosan
+rézsútosság
+rézsû
+rézsûben
+rézsûje
+rézsûmérõmûszer
+rézsûpad
+rézsûs
+rézsûsödés
+rézsût
+rézsûz
+rézsûzés
+rézsüborítás
+réztábla
+rézvésetet
+rézvörös
+rézzel
+rézérc
+rézüst
+rím
+rímeket
+rímel
+rímelés
+rímelõ
+rímes
+rímû
+rítus
+ródium
+ródlipálya
+ródolás
+rója
+róka
+rókafarkú
+rókalyuk
+rókaszerû
+rókatorok
+rókákkal
+rókákra
+rókázik
+róla
+róla!
+róla,
+rólam!
+római
+rósejbni
+rótt
+rózsa
+rózsacsokor
+rózsafüzér
+rózsafüzért
+rózsakeresztes
+rózsakert
+rózsaláz
+rózsaolaj
+rózsaszín
+rózsaszínû
+rózsaujjú
+rózsavíz
+rózsaágy
+rózsás
+rózsásan
+rózsáskert
+rózsásság
+rõfös
+rõt
+rõtes
+rõtvad
+rõzse
+rõzsefonatból
+rõzsefonattal
+rõzsekolbász
+rõzsemû
+rõzsenyaláb
+röffen
+röfög
+röfögés
+röfögést
+rög
+rögbi
+rögbiben
+rögbijátékost
+rögbipálya
+rögeszme
+rögeszméje
+rögeszmés
+rögeszmével
+rögtön
+rögtöni
+rögtönzés
+rögtönzõ
+rögtönzött
+rögtönzötten
+rögtönzöttség
+rögtönítélõ
+rögtönöz
+rögtönözve
+rögvest
+rögzít
+rögzített
+rögzítettség
+rögzítés
+rögzítõ
+rögzítõbilincs
+rögzítõcsap
+rögzítõcsavar
+rögzítõelem
+rögzítõgyûrû
+rögzítõhorog
+rögzítõkampó
+rögzítõkötél
+rögzítõlemez
+rögzítõléc
+rögzítõpecek
+rögzítõszer
+rögzítõtüske
+rögzítõék
+rögösödik
+röhög
+röhögve
+röhögés
+rönk
+rönkfa
+rönkfûrészelési
+rönkfûrészelõ
+rönkökkel
+rönköktõl
+rönköt
+röntgen
+röntgenezés
+röntgenfelvétel
+röntgenfelvételt
+röntgengép
+röntgenkapu
+röntgenkép
+röntgenográfia
+röntgensugár
+röntgenszoba
+röpcédulaszórás
+röpdösés
+röpirat
+röpiratíró
+röpke
+röpképtelen
+röpköd
+röpködés
+röplabda
+röplap
+röppentyû
+röppálya
+röpte
+röptáv
+röptávolság
+röptében
+röptét
+röptézik
+röptû
+röpít
+röpítõ
+röpül
+rövid
+röviddel
+rövidebb
+rövidebbet
+rövidebbre
+röviden
+rövidesen
+rövidfilm
+rövidhullám
+rövidhullámú
+rövidlátás
+rövidlátó
+rövidlátóan
+rövidnadrág
+rövidre
+rövidszõrû
+rövidség
+rövidtávon
+rövidtávú
+rövidzárlat
+rövidzárlat-keresõ
+rövidzárlatot
+rövidáru
+rövidáru-kereskedõ
+rövidít
+rövidített
+rövidíthetetlen
+rövidítve
+rövidítés
+rövidítõ
+rövidülnek
+rövidülésben
+rúd
+rúdarany
+rúddal
+rúdezüst
+rúdfa
+rúdfúró
+rúdhengersor-kezelõ
+rúdhoz
+rúdmágnes
+rúdpár
+rúdsajtolás
+rúdsajtó
+rúdugrás
+rúdugró
+rúg
+rúgja
+rúgkapál
+rúgva
+rúgás
+rúgó
+rúgós
+rúna
+rúnákkal
+rúpia
+rút
+rútság
+rútul
+rúzs
+rúzsoz
+rúzst
+rücskös
+rügy
+rügyez
+rügyezik
+rügyezõ
+rüh
+rühes
+rühesség
+rühös
+rühösség
+rüszt
+s.o.s.
+sablon
+sablonmunka
+sablonnal
+sablonos
+sablonossá
+sablont
+sahib
+sajgás
+sajgása
+sajgó
+sajna
+sajna!
+sajnos
+sajnál
+sajnálat
+sajnálatomra
+sajnálatos
+sajnálatosabb
+sajnálatosan
+sajnálatra
+sajnálattal
+sajnálja
+sajnálják
+sajnálkozik
+sajnálkozva
+sajnálkozás
+sajnálkozással
+sajnálkozó
+sajnálnálak
+sajnálok
+sajnálom
+sajnálom,
+sajt
+sajtfa
+sajtkukac
+sajtmártás
+sajtol
+sajtolható
+sajtolt
+sajtolás
+sajtolási
+sajtoló
+sajtos
+sajtszagú
+sajtszerû
+sajttal
+sajtvég
+sajtó
+sajtó-
+sajtóbeszámoló
+sajtócenzúra
+sajtóhiba
+sajtóhibajegyzék
+sajtója
+sajtókonferencia
+sajtóközlemény
+sajtószabadság
+sajtót
+sajtótudósítás
+sajtótájékoztató
+sajtóügynökség
+saját
+sajátja
+sajátkezû
+sajátmaga
+sajátmegoldás
+sajátos
+sajátosan
+sajátosság
+sajátossággal
+sajátperiódus
+sajátszerû
+sajátság
+sajátságok
+sajátságos
+sajátságosan
+sajátvektor
+sajátállapot
+sajátérték
+sakk
+sakk!
+sakk-készlet
+sakk-matt
+sakkban
+sakkfigura
+sakkhúzás
+sakkjáték
+sakkjátékos
+sakkot
+sakkozik
+sakktábla
+sakktáblaszerû
+salabakter
+salak
+salakanyagok
+salakdugasz
+salakhabbal
+salakja
+salakkimaródás
+salakkotró
+salakkõ
+salaklehúzás
+salaklehúzó
+salaknyílás
+salakol
+salakos
+salakosodik
+salakosít
+salakosító
+salakot
+salakréteg
+salakszerû
+salakválogató
+salamoni
+saldo
+sallang
+sallangmentes
+sallangmentesen
+sallangos
+saller
+saláta
+salátabakszakáll
+salátaöntet
+salátástál
+salátástányér
+salétromsav
+samoa
+sampon
+sanda
+sandán
+sandítás
+sankerfekély
+sansz
+sanszát
+sanyargat
+sanyargatja
+sanyargatás
+sanyarú
+sanzonénekes
+sapka
+sapkacsavar
+sapkámat,
+sapkával
+sarabol
+saraboló
+sarabolókapa
+sarat
+sarc
+sarcol
+sarj
+sarja
+sarjad
+sarjadzik
+sarjadzó
+sarjadás
+sarjadék
+sarjú
+sark
+sark-
+sarka
+sarkadat
+sarkaiba
+sarkal
+sarkalatos
+sarkall
+sarkalló
+sarkalás
+sarkantyú
+sarkantyúcsont
+sarkantyúit
+sarkantyúvirág
+sarkantyúz
+sarkantyúzás
+sarkat
+sarkatlan
+sarkcsap
+sarkcsillag
+sarki
+sarkigazság
+sarkkör
+sarkon
+sarkos
+sarkozás
+sarkpont
+sarktétel
+sarkvidék
+sarkvidéki
+sarkában
+sarkában)
+sarkából
+sarkára
+sarkát
+sarkával
+sarkít
+sarkíthatóság
+sarkú
+sarlatán
+sarló
+sarlóalak
+sarlós
+saroglya
+saroglyába
+sarok
+sarokba
+sarokfelszegezés
+sarokház
+sarokig
+sarokkal
+saroklemez
+sarokoszlopos
+sarokvas
+sarokvasalás
+sarokülés
+saru
+sarzsi
+sas
+sasbérc
+sasfának
+sasfészek
+sashal
+saslengés
+sasnak
+saspáfrány
+sasszeg
+sasszeme
+sasszemû
+sasszé
+sasszézik
+sasvésõ
+sasíroz
+satnya
+satnyanövés
+satnyul
+satrafa
+satu
+satupofa
+satöbbi
+sav
+sava-borsa
+savanykás
+savanyodni
+savanyodó
+savanyít
+savanyú
+savanyúan
+savanyúcukor
+savanyúság
+savas
+savasság
+savaz
+savgyanta
+savgyök
+savkátrány
+savmentes
+savpróba
+savtartalom
+savval
+savó
+savóképû
+scott
+scull-lapát
+se!
+seb
+sebaj!
+sebbõl
+sebeit
+sebek
+sebekre
+sebes
+sebesen
+sebesség
+sebesség-magasság
+sebességbe
+sebessége
+sebességek
+sebességet
+sebességfokozat
+sebességgel
+sebességhatárok
+sebességmérõ
+sebességre
+sebességvesztés
+sebességvesztésben
+sebességváltás
+sebességváltó
+sebességét
+sebességû
+sebesült
+sebesültek
+sebesültszállítás
+sebesültszállító
+sebesülés
+sebesülésébe
+sebet
+sebezhetetlen
+sebezhetetlenség
+sebezhetõ
+sebezhetõség
+sebfertõtlenítõ
+sebhely
+sebhelyek
+sebhelyekkel
+sebhelyes
+sebhelyet
+sebhelyszerû
+sebkampó
+sebkötés
+sebkötõ
+sebláz
+sebpara
+sebszáj
+sebtiben
+sebtében
+sebváltó
+sebész
+sebészet
+sebészeti
+sebészi
+sebészkés
+sedatio
+seft
+seftel
+seftelõ
+segg
+seggbe
+segge
+seggedbe!
+seggfej
+seggluk
+segglyuk
+seggnyaló
+seggreesés
+seggét
+segéd
+segéd-
+segéd-házfelügyelõ
+segédcirkáló
+segédcsapatok
+segédelektród
+segéderõ
+segédeszköz
+segédeszközök
+segédgép
+segédhajó
+segédige
+segédindító
+segédkazán
+segédkezet
+segédkezik
+segédkezés
+segédkönyv
+segédlelkész
+segédlet
+segédlevelet
+segédmennyiség
+segédmotor
+segédmotoros
+segédmozdony
+segédmunkás
+segédmunkások
+segédmágnes
+segédnyelv
+segédpilóta
+segédpüspök
+segédrakéta
+segédrendezõ
+segédrács
+segédszárny
+segédtisztviselõ
+segédvonalak
+segédvágat
+segédváltozó
+segély
+segélycsapatok
+segélyegylet
+segélyen
+segélyez
+segélyezés
+segélyforrás
+segélyhely
+segélykiáltás
+segélykocsi
+segélykérõ
+segélyvonat
+segít
+segítek
+segíteni
+segíthet
+segíthetne
+segítség
+segítség!
+segítséget
+segítségére
+segítségét
+segítségével
+segítségéért
+segítségül
+segítsünk
+segítés
+segítõ
+segítõeszköz
+segítõkész
+segítõtárs
+segítõtársa
+sehogy
+sehogyan
+sehol
+sehonnai
+sehova
+sehová
+sejk
+sejt
+sejtburjánzás
+sejtekbõl
+sejtelem
+sejtelmem
+sejtem,
+sejteni
+sejtet
+sejtett
+sejtetés
+sejtetõ
+sejtforma
+sejti
+sejti,
+sejtkötés
+sejtközi
+sejtmagot
+sejtosztódás
+sejtszerû
+sejtés
+sejtõ
+sekk!
+sekkben
+sekrestye
+sekrestyés
+sekély
+sekélyes
+sekélyesen
+sekélysége
+selejt
+selejtanyag
+selejtanyagból
+selejtes
+selejtezõ
+selejtgyártó
+selejtkiküszöbölés
+selejtpapír
+selejtáru
+sellõ
+sellõs
+selyem
+selyembõl
+selyembõl)
+selyemdamaszt
+selyemfa
+selyemfiú
+selyemgubó
+selyemgubószál
+selyemhernyó
+selyemhez
+selyemkendõ
+selyemkóc
+selyemmajom
+selyempapír
+selyemszál
+selyemszövet
+selyemsálat
+selyemzsinór
+selyemöv
+selymes
+selymesség
+selypít
+selypítés
+sem
+sem!
+sem...
+sem?
+sematikus
+sematikusan
+sematizál
+semennyit
+semhogy
+semleges
+semlegesen
+semlegesség
+semlegesít
+semlegesítik
+semlegesítés
+semmi
+semmi!
+semmibe
+semmiben
+semmibevevés
+semmibõl
+semmiféle
+semmiféleképpen
+semmihez
+semmiházi
+semmije
+semmikor
+semmiképpen
+semmilyen
+semmint
+semmire
+semmire?
+semmirekellõ
+semmirevaló
+semmirõl
+semmis
+semmisnek
+semmisség
+semmiség
+semmiségeken
+semmiséggel
+semmiségért
+semmit
+semmit!
+semmit,
+semmit?
+semmitmondó
+semmitmondóan
+semmittevés
+semmittevéssel
+semmittevõ
+semmitõl
+semmivel
+semmivé
+semmiért
+senki
+senkiházi
+senkinek
+senkinek,
+senkire
+senkit
+senkivel
+senyved
+senyvesztõ
+seper
+sepregetõ
+sepri
+seprõ
+seprõgép
+seprõt
+seprû
+seprûcske
+seprûnyél
+seprûs
+serceg
+sercegés
+sercegõ
+sercli
+serdülés
+serdüléses
+serdülõ
+serdülõkor
+serdülõkorba
+serdülõkorú
+sereg
+seregek
+sereget
+sereghajtó
+seregé)
+seregély
+serkent
+serkentés
+serkentõ
+serkentõen
+serleg
+serlegalakú
+serpenyõ
+serpenyõjét
+serte
+sertés
+sertés-
+sertés-borsókakór
+sertésborsóka-kór
+sertéscomb
+sertéshizlalda
+sertésszelet
+sertésszerû
+sertéstenyésztés
+sertésól
+serény
+serényen
+serénykedik
+serénység
+serénységre
+setteng
+settenkedik
+settenkedés
+settenkedõ
+sevró
+sevrókesztyû
+sherry
+sherrys
+shilling
+shillingen
+shillingjét
+sicc!
+siesd
+siess!
+siessünk!
+siet
+sietni!
+sietség
+siettessék
+siettet
+sietteti
+siettetni
+siettében
+sietve
+sietés
+sietõ
+sietõs
+sietõsen
+sifon
+sifrekulcs
+sifrekódex
+sifreszakértõ
+sifríroz
+sifrírozatlan
+sifrírozott
+sifrírozás
+sifrírozó
+siheder
+sikamlós
+sikamlósság
+sikattyú
+siker
+siker!
+sikerben
+sikere
+sikereket
+sikeres
+sikeresen
+sikernek!
+sikerre
+sikerrel
+sikerrõl
+sikersorozat
+sikert
+sikertelen
+sikertelenség
+sikertelenül
+sikeréhez
+sikerének
+sikerét
+sikerû
+sikerül
+sikerülni
+sikerült
+sikk
+sikkaszt
+sikkasztás
+sikkasztó
+sikkes
+siklatás
+siklik
+siklás
+sikló
+siklóhajó
+siklórepülés
+siklórepüléssel
+sikolt
+sikoltozik
+sikoltás
+sikoltó
+sikoly
+sikongat
+sikongatás
+sikál
+sikálás
+sikátor
+sikít
+sikítok
+sikítás
+sikító
+sillabusz
+silány
+silányság
+siló
+silóban
+silózott
+sima
+sima,
+simafenyõ
+simaszõrû
+simaság
+simi
+simlis
+simliskedik
+simogat
+simogatás
+simul
+simulás
+simulékony
+simulékonyan
+simulékonyság
+simuló
+simán
+simára
+simává
+simít
+simítatlan
+simított
+simítás
+simítások
+simításokat
+simítást
+simító
+simítógyalu
+simítóhenger
+simítókés
+simítólap
+simítóz
+sincs
+sinológia
+sinológus
+sintér
+sintértelep
+sipít
+sipító
+siralmas
+siralmasan
+siralomház
+siralomvölgy
+sirat
+siratott
+siratva
+siratófal
+sirály
+sirám
+siránkozik
+siránkozva
+siránkozás
+siránkozó
+sisak
+sisakbokréta
+sisakforgó
+sisakos
+sisakrostély
+sistereg
+sistergés
+siti
+sitkó
+sitt
+sitten
+sivatag
+sivatagi
+sivatagosodó
+sivár
+sivárság
+sivít
+sivítva
+sivítás
+skalp
+skalpol
+skalpvadász
+skaláris
+skandináv
+skandál
+skandálható
+skandálás
+skandáló
+skarlát
+skarlátpiros
+skatulya
+skicc
+skizma
+skizofrén
+skizofrénia
+skorbut
+skorbutos
+skorpióhal
+skribler
+skrofula
+skrofulás
+skrofulózis
+skurcban
+skála
+skálája
+skálázik
+skóciai
+skót
+skótok
+skótokból
+skótszoknyás
+slag
+slamasztika
+slamasztikában
+slampos
+slejm
+slejmet
+slejmmel
+slejmos
+slendrián
+slepp
+slicc
+slingelt
+slingelés
+slukk
+sláger
+slágerparádé
+slágersor
+slágfertigség
+smacizik
+smacizás
+smafu
+smaltin
+smaragd
+smaragdzöld
+smasszer
+smink
+sminkek
+sminkel
+smirgli
+smirglipapír
+smokk
+smucig
+smuzol
+smárol
+smárolás
+smúzol
+snidling
+sodor
+sodormérõ
+sodorta
+sodorvíz
+sodra
+sodrat
+sodronnyal
+sodrony
+sodronyfonat
+sodronyháló
+sodronyhálózat
+sodronykötél
+sodronyra
+sodronyszövet
+sodronyzománc
+sodrott
+sodrába
+sodrából
+sodrás
+sodrása
+sodró
+sodródik
+sodródva
+sodródás
+sodrófa
+sodó
+sofõr
+soha
+sohanapja
+sohanapjáig
+sohanapjára
+sohase
+sohasem
+sok
+sok!
+sok,
+sokadalom
+sokadik
+sokan
+sokasodik
+sokaság
+sokat
+sokat!
+sokat,
+sokatmondó
+sokba
+sokcsaládos
+sokcsöves
+sokféle
+sokféleképpen
+sokféleség
+sokk
+sokk-gyógymód
+sokkal
+sokkalta
+sokkos
+sokkot
+sokkötetes
+sokmagvú
+sokmagú
+soknyelvû
+soknál
+sokoldalú
+sokoldalúan
+sokoldalúság
+sokra
+sokrétû
+sokszavú
+sokszemû
+sokszor
+sokszoros
+sokszorosan
+sokszorosít
+sokszorosított
+sokszorosítás
+sokszorosító
+sokszorosítógép
+sokszoroz
+sokszínû
+sokszínûség
+sokszög
+sokszögel
+sokszögelés
+soká
+sokágú
+sokáig
+sokáig!
+sokáig,
+sokáig?
+sokára
+sokért
+solymászik
+som
+sombreró
+sommás
+sommásan
+sompolyog
+sonka
+sonkás
+sonkával
+sopf
+sopánkodik
+sopánkodás
+sopánkodó
+sor
+sor-
+sora
+sorain
+sorakozik
+sorakoztat
+sorakozz!
+sorakozó
+sorakozót
+sorba
+sorban
+sorbaállás
+sorbaállítás
+sorból
+sordély
+soregyent
+sorfal
+sorhajó
+sorhosszabbító
+sorja
+sorjában
+sorját
+sorjázó
+sorkatonaság
+sorkizárás
+sorköz
+sorközt
+sorköztag
+sorod?
+sorok
+sorokat
+sorokban
+sorol
+sorolja
+sorolva
+sorompó
+sorompórúd
+soron
+soron!
+soros
+soroz
+sorozat
+sorozata
+sorozatgyártás
+sorozaton
+sorozatos
+sorozatosan
+sorozatot
+sorozatszám
+sorozattûz
+sorozás
+sorozásra
+sorozó
+sorozóbizottság
+sorra
+sorrend
+sorrendben
+sorrendet
+sorrendi
+sorrendjében
+sorrendjének
+sors
+sorsa
+sorscsapás
+sorscsapások
+sorsfordulat
+sorshúzás
+sorsjegy
+sorsjegyhúzás
+sorsjáték
+sorsolás
+sorsot
+sorsszerû
+sorstársak
+sorszedõgép
+sorszám
+sorszámnév
+sorsába
+sorsában
+sorsán
+sorsára
+sorsát
+sorsú
+sorsüldözött
+sort
+sortöltõ
+sortûz
+sortûzzel
+sortüzelés
+sortüzet
+sorvad
+sorvadozik
+sorvadás
+sorvadó
+sorvasztó
+sorvetõgép
+sorvezetõ
+sorvégi
+sorzár
+sorából
+sorállás
+során
+sose
+sosem
+sotto
+soviniszta
+sovinizmus
+sovánnyá
+sovány
+sovány,
+soványa
+soványan
+soványodik
+soványodás
+soványság
+soványít
+soványítás
+spagetti
+spaletta
+spanyol
+spanyol-amerikai
+spanyolcsizma
+spanyolcsizmával
+spanyolfal
+spanyollovas
+spanyolos
+sparhert
+spatulyázó
+specialista
+specializálja
+specializálódik
+specializálódás
+specifikus
+specifikáció
+speciális
+speciálisan
+spejz
+spekk
+spekkes
+spektroszkóp
+spektroszkópia
+spektrum
+spektrumsávok
+spekulatív
+spekuláció
+spekulációra
+spekulációs
+spekulál
+spekuláló
+spekuláns
+spenót
+sperma
+spermaceti
+spiccel
+spiccelés
+spicces
+spiccevezõs
+spicli
+spicliskedik
+spicliskedés
+spinakerrúd
+spinakker-rúd
+spinalgia
+spinans
+spinell
+spion
+spiritiszta
+spiritizmus
+spiritualizmus
+spiritusz
+spirituálé
+spirál
+spirálcsõ
+spirálfúró
+spirális
+spirálisan
+spirálmenet
+spiráltekercs
+spirálvonal
+splitter
+spongya
+spontán
+sport
+sport-
+sportalsó
+sportautó
+sportbajnok
+sportcipõ
+sportcsapat
+sportcsapatába
+sportcsarnok
+sportegyesület
+sportember
+sporteredmények
+sportesemény
+sportjelvényeinek
+sportkabát
+sportkedvelõ
+sportkerékpár
+sportklubház
+sportkocsi
+sportnadrág
+sportok
+sportol
+sportoló
+sportos
+sportpálya
+sportrepülõgép
+sportszatyor
+sportszeretõ
+sportszerû
+sportszerûen
+sportszerûség
+sportszövet
+sporttáska
+sportvezetõ
+sportág
+sportújságíró
+spotlámpa
+spray
+spriccel
+sprintel
+sprintúszás
+spulni
+spuma
+spáciumoz
+spániel
+spárga
+spárgakel
+spárgát
+spártai
+spékel
+spíler
+spóra
+spóraképzõdés
+spórol
+spórolt
+spórolós
+sraffoz
+srapnel
+srapneltöltet
+srenk
+srác
+srófol
+stabil
+stabilan
+stabilizál
+stabilizálás
+stabilizáló
+stabilizátor
+staccato
+staccatoval
+stadion
+staféta
+stagnál
+stagnálás
+stagnáló
+stallum
+stampedli
+stand
+standard
+standardizálás
+standja
+stanicli
+stanicliban
+start
+starthoz
+startol
+startrakéta
+startvonal
+statika
+statikai
+statikailag
+statikus
+statikusan
+statiszta
+statisztaszerep
+statisztika
+statisztikai
+statisztikailag
+statisztikus
+statiszták
+status
+statutum
+statárium
+statútum
+staub
+stb.
+steksz
+stellázs-ügylet
+stelázsi
+stencil
+stenciles
+stencilez
+stencilezett
+steppel
+steppelés
+steril
+sterilitás
+sterilizál
+sterilizálás
+sterling
+sterling-övezet
+stewardess
+stigma
+stigmás
+stikkes
+stikli
+stikában
+stilizált
+stiláris
+stilét
+stimmel
+stimulál
+stimuláló
+stimuláns
+stingel
+stokkolás
+stopli
+stoplis
+stoplámpa
+stopper
+stopperel
+stopperóra
+stoppol
+stoppolja
+stoppolás
+stoppolófa
+stoppos
+stoppot
+stoptábla
+stopvonal
+storníroz
+stornírozás
+stramm
+strand
+strandkalap
+strandok
+strandol
+strandoló
+strandpapucs
+strapa
+strapabíró
+strapál
+strapálja
+strapálva
+strapás
+strassz
+stratégia
+stressz
+strichel
+strichelõ
+strici
+stroboszkopikus
+stroboszkóp
+strucc
+struktúra
+stráfkocsi
+stréber
+strófa
+stróman
+stukker
+stukkó
+stukkóval
+stádium
+stádiumba
+stádiumban
+státus
+státusszimbólum
+státusz
+stég
+stíl-
+stílbútor
+stílus
+stílusa
+stílusban
+stílusbeli
+stílustalanság
+stílusára
+stílusát
+stílusú
+stílusúvá
+stíröl
+stószol
+stúdió
+suba
+sublót
+sudarlósság
+sudár
+sudár-tarcsvitorla
+sudárba
+sudárzattal
+suffraganeus
+sugall
+sugallat
+sugallja
+sugalmaz
+sugalmazott
+sugalmazás
+sugalmazó
+sugara
+sugarait
+sugaras
+sugdosás
+sugár
+sugár-befecskendezéses
+sugárban
+sugárbiológia
+sugárelhajlás
+sugáreltérítés
+sugárhajtás
+sugárhajtású
+sugárhajtómû
+sugárirányú
+sugárka
+sugárkezelés
+sugárkéve
+sugárlemez
+sugárnyaláb
+sugároz
+sugározás
+sugárral
+sugárterápia
+sugártörés
+sugártörõ
+sugárveszély
+sugárzik
+sugárzás
+sugárzása
+sugárzásdetektor
+sugárzási
+sugárzó
+sugárzóvá
+sugárártalom
+sugárút
+suhan
+suhanc
+suhanás
+suhint
+suhintás
+suhog
+suhogtat
+suhogtatás
+suhogás
+suhogó
+suháng
+sujtás
+sulykol
+sulykolás
+sulykoló
+sulykot
+sulyok
+sumák
+sumákol
+sunyi
+sunyiba!
+sunyít
+surmó
+surran
+surrantó
+surranás
+surranó
+suska
+suskus
+susog
+susogás
+susogó
+suszter
+suszterhétfõ
+suta
+sutaság
+sutba
+suttog
+suttogva
+suttogás
+suttogássá
+suttogó
+suttyó
+sutyerák
+suvadás
+svindler
+svindli
+svindlizik
+sváb
+svábbogár
+svájci
+svájciak
+svájcisapka
+svéd
+svédasztal
+sydneyi
+szab
+szabad
+szabad!
+szabad?
+szabadalmas
+szabadalmaz
+szabadalmazott
+szabadalmaztat
+szabadalmi
+szabadalom
+szabadalombitorlás
+szabadalomlevél
+szabadban
+szabaddá
+szabadegyház
+szabadelvû
+szabadelvûség
+szabadesés
+szabadfogás
+szabadfogású
+szabadföldi
+szabadgondolkodó
+szabadhajózást
+szabadidõ
+szabadidõruha
+szabadjegy
+szabadjára
+szabadjárat
+szabadkikötõ
+szabadkõmûves
+szabadkõmûves-páholy
+szabadkõmûvesség
+szabadláb
+szabadlábon
+szabadlábra
+szabadna
+szabadnap
+szabadnapja
+szabadon
+szabadon,
+szabadonbocsátás
+szabadonfutó
+szabadonfutóval
+szabados
+szabadosan
+szabadosság
+szabadpiac
+szabadra
+szabadrúgás
+szabadszájú
+szabadszájúan
+szabadság
+szabadságfok
+szabadságfokát
+szabadságharc
+szabadságidõ
+szabadságidõt
+szabadságjog
+szabadságod?
+szabadságon
+szabadságot
+szabadságra
+szabadtéri
+szabadul
+szabadult
+szabadulás
+szabadvezeték
+szabadúszó
+szabadúszóként
+szabatos
+szabatosan
+szabatosság
+szabdal
+szabja
+szablya
+szabott
+szabotál
+szabotálás
+szabotáló
+szabotázs
+szabta
+szabták
+szabvány
+szabvány-
+szabványméret
+szabványos
+szabványosít
+szabványosítás
+szabály
+szabályai
+szabályba
+szabályellenes
+szabálynak
+szabályok
+szabályokat
+szabályokba
+szabályoknak
+szabályoktól
+szabályos
+szabályosan
+szabályossá
+szabályosság
+szabályoz
+szabályozatlan
+szabályozható
+szabályozott
+szabályozás
+szabályozási
+szabályozó
+szabályozókészülék
+szabályrendelet
+szabályszerû
+szabályszerûen
+szabályszerûség
+szabálysértés
+szabálysértõ
+szabályt
+szabálytalan
+szabálytalannak
+szabálytalanság
+szabálytalanságot
+szabálytalanul
+szabályzat
+szabályzatnak
+szabás
+szabász
+szabású
+szabó
+szabóhoz
+szabórádli
+szabórádlival
+szabóvasaló
+szadista
+szadizmus
+szafari
+szaft
+szafári
+szag
+szaga
+szagelszívó
+szagelzáró
+szagfogó
+szagfogóval
+szaggat
+szaggatja
+szaggatott
+szaggatottan
+szaggatottság
+szaggatás
+szaggató
+szaglás
+szaglász
+szaglászik
+szaglászás
+szagló-
+szaglószervi
+szagol
+szagolja
+szagoltató
+szagos
+szagot
+szagról
+szagtalan
+szagtalanító
+szagzáró
+szagát
+szagú
+szaharin
+szajha
+szajhaság
+szajkó
+szajré
+szajrézás
+szak
+szak-
+szakad
+szakadatlan
+szakadatlanság
+szakadatlanul
+szakadozott
+szakadozó
+szakadt
+szakadtából
+szakadár
+szakadárság
+szakadás
+szakadási
+szakadék
+szakadó
+szakadós
+szakasz
+szakasza
+szakaszait
+szakaszban
+szakaszos
+szakaszosan
+szakaszosság
+szakaszparancsnok
+szakasztott
+szakaszvezetõ
+szakaszának
+szakavatott
+szakember
+szakemberek
+szakfolyóirat
+szaki
+szakiskola
+szakjelzet
+szakkifejezés
+szakképzetlen
+szakképzett
+szakképzettség
+szakképzettséget
+szakképzettséggel
+szakma
+szakmabeli
+szakmabeliek
+szakmai
+szakmailag
+szakmunka
+szakmunkástanuló
+szakmában
+szakmája?
+szakmájában
+szakmám
+szakmámba
+szakmány
+szakmánymunka
+szakmánymunkás
+szakmára
+szakmát!
+szaknyelv
+szaknyelven
+szaknévsor
+szakoktatás
+szakorvos
+szakosodik
+szakosodás
+szakosít
+szakosított
+szakra
+szakrendelõ
+szakszervezet
+szakszervezetbe
+szakszerû
+szakszerûen
+szakszerûség
+szakszerûtlen
+szakszerûtlenség
+szakszó
+szaktanács
+szaktanácsadó
+szaktanácsot
+szaktekintély
+szakterület
+szaktestület
+szaktudás
+szaktudással
+szaktárgy
+szaktárgynak
+szaktárs
+szaktársak
+szakvezetõ
+szakvélemény
+szakvéleményt
+szakzsargon
+szakács
+szakácskönyv
+szakácsmester
+szakácsmûvész
+szakácsmûvészet
+szakácsnõ
+szakácssegéd
+szakáll
+szakálla
+szakállal
+szakállas
+szakállka
+szakállára
+szakállát
+szaké
+szakértelem
+szakértelmet
+szakértõ
+szakértõcsoport
+szakértõi
+szakértõje
+szakértõk
+szakít
+szakítani
+szakítok
+szakított
+szakítás
+szakító
+szakítólemez
+szakóca
+szalad
+szaladgál
+szaladt
+szaladtunk
+szaladás
+szaladó
+szalag
+szalagablak
+szalagcsokor
+szalagcím
+szalagfeszítõ
+szalagféreg
+szalagfûrésszel
+szalagfûrész
+szalaggal
+szalaghal
+szalaghengermû
+szalagmikrofon
+szalagorsó
+szalagos
+szalagozógép
+szalagra
+szalagrózsa
+szalagszerû
+szalagszövõ
+szalagtag
+szalagterítõ
+szalagtársulat
+szalagvas
+szalagváros
+szalagépítkezés
+szalakóta
+szalalkáli
+szalamandra
+szalamandraszerû
+szalamandrákhoz
+szaldó
+szaldókontó
+szaldóátvitel
+szaletli
+szalicilsav
+szalma
+szalmaburgonya
+szalmabáb
+szalmacsomó
+szalmacsutak
+szalmai
+szalmakalap
+szalmakazal
+szalmakrumpli
+szalmaköteget
+szalmakötél
+szalmaláng
+szalmaszál
+szalmaszálat
+szalmazsák
+szalmaágy
+szalmiák-
+szalmiákszesz
+szalmája
+szalmát
+szalmával
+szalon
+szalonagár
+szalonka
+szalonkacsõrû
+szalonkocsi
+szalonkocsi-pincér
+szalonkára
+szalonkázik
+szalonképes
+szalonna
+szalonnaszelet
+szalonnás
+szalonnával
+szalonzene
+szalve
+szalvéta
+szalámi
+szamarak
+szamovár
+szampan
+szamuráj
+szamár
+szamárbogáncs
+szamárbõgés
+szamárcsikó
+szamárfogat
+szamárfül
+szamárfüles
+szamárfület
+szamárhurut
+szamárhurutja
+szamárkodás
+szamárköhögés
+szamárköhögéssel
+szamárlétrán
+szamárordítás
+szamárság
+szamárság!
+szamárságot
+szamársüveg
+szamárvezetõ
+szanaszéjjel
+szanaszét
+szanatórium
+szandolin
+szandál
+szangvinikus
+szanitéc
+szankció
+szankciókat
+szankciókhoz
+szantálfa
+szanálás
+szapoly
+szapora
+szapora,
+szaporaság
+szaporasága
+szaporodik
+szaporodás
+szaporodási
+szaporodó
+szaporulat
+szaporán
+szaporán!
+szaporázza
+szaporít
+szaporítás
+szappan
+szappanalj
+szappanbuborékot
+szappangyökér
+szappanhab
+szappanhabos
+szappanhabot
+szappanlé
+szappanos
+szappanoz
+szappanozás
+szappantartó
+szapul
+szapó
+szar
+szarakodik
+szarcsimbók
+szardellapaszta
+szardínia
+szarfaszú
+szarfészek
+szarházi
+szarik
+szarjankó
+szarka
+szarkalábas
+szarkasztikus
+szarkazmus
+szarkeverõ
+szarkofág
+szaroda
+szarong
+szaros
+szarozik
+szart
+szart!
+szaru
+szaru-
+szarufa
+szarufal
+szarufaék
+szarufolt
+szarufésû
+szaruhártya
+szarul
+szarus
+szarv
+szarva
+szarva!
+szarvas
+szarvasagancs
+szarvasbika
+szarvasbogár
+szarvasborjú
+szarvasbõgés
+szarvasbõgést
+szarvasbõr
+szarvasgomba
+szarvashús
+szarvasmarha
+szarvasmarhaféle
+szarvasmarhafélék
+szarvasszarv-só
+szarvast
+szarvastehén
+szarvasvadász-vezetõ
+szarvasvadászat
+szarvasállományú
+szarvaz
+szarvcsõrû
+szarvkötél
+szarvszár
+szarvval
+szarvát
+szarvával
+szarzsák
+szarás
+szatirikus
+szattyán
+szattyánbõr
+szattyánbõrbe
+szattyánpapír
+szatyor
+szatén
+szaténszövet
+szatír
+szatíra
+szatíraíró
+szatírát
+szatócs
+szatócsüzlet
+szauna
+szava
+szavad
+szavahihetõ
+szavahihetõség
+szavahihetõségét
+szavai
+szavainak
+szavait
+szavak
+szavakat
+szavakat!
+szavakba
+szavakban
+szavakkal
+szaval
+szavalat
+szavalatba
+szavalás
+szavaló
+szavalókórus
+szavam
+szavamat
+szavamra
+szavamra!
+szavanna
+szavatartó
+szavatol
+szavatolás
+szavatos
+szavatosság
+szavatosságot
+szavaz
+szavazat
+szavazatai
+szavazati
+szavazatok
+szavazatszámlálás
+szavazatszámláló
+szavazattöbbség
+szavazatát
+szavazva
+szavazás
+szavazása
+szavazásra
+szavazást
+szavazástól
+szavazó
+szavazóbíró
+szavazócédula
+szavazócédulákkal
+szavazófülke
+szavazóhelyiség
+szavazók
+szavában
+szaván
+szavának
+szavát
+szavú
+szaxofon
+szcenárium
+szebb
+szecska
+szecskavágó
+szecskáz
+szed
+szedatívum
+szedd
+szedeget
+szedendõ
+szeder
+szederfa
+szederjes
+szedett
+szedett-vedett
+szedi
+szedtek
+szedtevette!
+szedálás
+szedán
+szedán-kabriolet
+szedés
+szedésben
+szedési
+szedést
+szedésû
+szedõ
+szedõgépsor
+szedõlapát
+szedõszekrény
+szeg
+szegecs
+szegecsel
+szegecselés
+szegecselõ
+szegecselõgép-matrica
+szegecselõrúd
+szegecset
+szegecsfejezõ
+szegecskiverõ
+szegedilla
+szegekkel
+szeges
+szeget
+szegetlen
+szegett
+szegez
+szegeztem
+szegfû
+szegfûszeg
+szegfûszegolaj
+szeggel
+szegi
+szegmens
+szegycsont
+szegycsontvelõ
+szegéllyel
+szegély
+szegélybevarró
+szegélydísszel
+szegélydísz
+szegélydöntés
+szegélye
+szegélyez
+szegélyezett
+szegélyezés
+szegélyezõ
+szegélyezõgép
+szegélyléc
+szegélyárok
+szegélyû
+szegény
+szegényadó
+szegények
+szegényellátás
+szegényes
+szegényesen
+szegényesség
+szegénygondozás
+szegénygondozó
+szegényház
+szegényjogon
+szegényjogos
+szegénylegény
+szegénynegyed
+szegénysegélyezés
+szegénység
+szegénységi
+szegés
+szegõ
+szegõdik
+szegõdtet
+szegõszalag
+szegõszalaggal
+szegõzsinór
+szeizmikus
+szeizmofón
+szeizmográf
+szeizmográfia
+szeizmológia
+szeizmológiai
+szeizmológus
+szeizmométer
+szeizmotektonikai
+szekerce
+szekereket
+szekreter
+szekréció
+szekrény
+szekrénye
+szekrényes
+szekrényrész
+szekta
+szektor
+szekularizáció
+szekvencia
+szekál
+szekér
+szekérerõdöt
+szekéroldal
+szekérrúd
+szekértábor
+szekértábort
+szel
+szeleburdi
+szeleburdiság
+szelek
+szelektivitás
+szelektor
+szelektív
+szelel
+szelelõakna
+szelelõlapát
+szelelõlyuk
+szelelõrosta
+szelemen
+szelence
+szelep
+szelepcsappantyú
+szelepemelõ
+szelepen
+szelepes
+szelephimba-emelõ
+szelephimba-mûködtetõ
+szelepszár
+szeles
+szelet
+szeletekre
+szeletel
+szeletelt
+szeletelés
+szeletelõkés
+szeletke
+szeli
+szelindek
+szelindekdenevér
+szellem
+szellemes
+szellemeskedik
+szellemeskedés
+szellemeskedõ
+szellemesnek
+szellemesség
+szellemet
+szellemi
+szellemidézés
+szellemidézõ
+szellemileg
+szellemke
+szellemrõl
+szellemtelen
+szellemvasút
+szellemében
+szellemû
+szellent
+szellentés
+szellõ
+szellõrózsa
+szellõs
+szellõt
+szellõzetlen
+szellõztet
+szellõztetett
+szellõztethetõ
+szellõztetés
+szellõztetõ
+szellõztetõablak
+szellõztetõcsõ
+szellõztetõkészülék
+szellõztetõkürtõ
+szellõzés
+szellõzéssel
+szellõzõ
+szellõzõajtó
+szellõzõakna
+szellõzõcsõ
+szellõzõjárat
+szellõzõkerék
+szellõzõlyuk
+szellõzõnyílás
+szelvény
+szelvényekre
+szelvényes
+szelvényutalvány
+szelvényvas
+szelén
+szelíd
+szelídebb
+szelídebbé
+szelíden
+szelídgesztenyefa
+szelídség
+szelídítés
+szelídítõ
+szem
+szem-
+szemafor
+szemafor-
+szemaforjeladás
+szemaforjelzés
+szemaforkar
+szemaforkezelõ
+szemaforral
+szemafort
+szembe
+szembefordul
+szembefordít
+szembefordítható
+szembehelyezkedik
+szembehelyezkedõ
+szembejövõ
+szembekerülõ
+szembekötõsdi
+szemben
+szemben!
+szembenáll
+szembenállás
+szembenéz
+szemberánc
+szembeszegül
+szembeszáll
+szembeszökõ
+szembesít
+szembesítés
+szembesítõ
+szembetalálkozik
+szembetûnõ
+szembetûnõen
+szembeállít
+szembeállítható
+szembeállított
+szembeállítás
+szembeötlik
+szembeötlõ
+szembogár
+szemceruza
+szemcsapágy
+szemcse
+szemcseszerkezet-mérés
+szemcséjû
+szemcsés
+szemcsésség
+szemcsésít
+szemcséz
+szemcsézés
+szeme
+szeme,
+szemei
+szemeiben
+szemeivel
+szemek
+szemeket
+szemelget
+szemellenzõ
+szemellenzõs
+szemelt
+szemelvény
+szemelvények
+szemem
+szememmel
+szemen
+szemenszedett
+szemer
+szemerkél
+szemerkélõ
+szemernyi
+szemernyit
+szemes
+szemesbab
+szemesedik
+szemesnek
+szemeszter
+szemet
+szemete
+szemetelés
+szemetes
+szemeteskocsi
+szemetesláda
+szemez
+szemfedél
+szemfedõ
+szemfedõvel
+szemfehérje
+szemfog
+szemforgatás
+szemforgató
+szemfényvesztés
+szemfényvesztést
+szemfüles
+szemfülesen
+szemgolyó
+szemgyulladás
+szemgödör
+szemhatár
+szemhegyezés
+szemhunyásnyit
+szemhéj
+szemhéjak
+szemhéjfesték
+szeminárium
+szemita
+szemitizmus
+szemkötõ
+szemközt
+szemközti
+szemle
+szemlefutás
+szemlencse
+szemlencse-
+szemleív
+szemleút
+szemlél
+szemlélet
+szemléletes
+szemléletesen
+szemléletmód
+szemléltet
+szemléltetés
+szemléltetõ
+szemlélés
+szemlélõ
+szemlélõdés
+szemlélõdõ
+szemlére
+szemlét
+szemmagasságban
+szemmel
+szemmozgás
+szemmérték
+szemnagyság
+szemnek
+szemnyitogató
+szempilla
+szempillafesték
+szempillantás
+szempillája
+szempont
+szempontból
+szempontjai
+szempontjából
+szempontok
+szemrebbenés
+szemrehányás
+szemrehányásokat
+szemrehányást
+szemrehányó
+szemrehányóan
+szemrevaló
+szemrevételez
+szemsarok
+szemszög
+szemszögbõl
+szemsérülés
+szemtanú
+szemtanúja
+szemtelen
+szemtelenkedik
+szemtelenkedj!
+szemtelenség
+szemtelenség!
+szemtelenségeket
+szemtelenül
+szemtermés
+szemtõl
+szemtükör
+szemvillanás
+szemvíz
+szemzug
+szemébe
+szemében
+szemébõl
+személlyé
+személy
+személy)
+személy,
+személy-
+személyazonosság
+személyazonosságot
+személybe
+személyenként
+személyes
+személyesen
+személyeskedik
+személyeskedés
+személyeskedõ
+személygépkocsi
+személyhez
+személyi
+személyiség
+személyiséget
+személyiséggel
+személyiségnek
+személyivé
+személyleírás
+személypoggyász
+személyre
+személyszállító
+személyt
+személyvonat
+személyzet
+személyzete
+személyzeti
+személyzettel
+személyzetét
+személyzetû
+személyét)
+szemére
+szemérem-
+szeméremajkak
+szeméremrés
+szeméremsértõ
+szeméremtest
+szemérmes
+szemérmesen
+szemérmesség
+szemérmetlen
+szemért
+szemérõl
+szemészet
+szemészeti
+szemét
+szemét-
+szemétdomb
+szemételtávolítás
+szemétemésztés
+szemétgyûjtõ
+szemétgödör
+szemétkedik
+szemétkosár
+szemétlapát
+szemétledobó
+szemétlerakó
+szemétláda
+szemétrakás
+szemétre
+szemétszállító
+szeméttartó
+szeméttelep
+szemétégetõ
+szemével
+szemölcs
+szemöldök
+szemöldökcsontok
+szemöldökfa
+szemöldökfesték
+szemöldökráncolás
+szemöldökét
+szemöldököt
+szemû
+szemügyre
+szemüreg
+szemüregi
+szemüveg
+szemüveges
+szende
+szendereg
+szendergés
+szendergõ
+szendvics
+szenel
+szenelõ
+szenelõnyílás
+szenesedik
+szenesedés
+szeneskanna
+szenesláda
+szenesvödör
+szenesít
+szenesítés
+szenet
+szenilis
+szenilitás
+szenny
+szennyes
+szennyeskosár
+szennyestartó
+szennyesét
+szennyez
+szennyezetlen
+szennyezett
+szennyezettség
+szennyezés
+szennyezõ
+szennyezõdik
+szennyezõdés
+szennyezõdésektõl
+szennyezõdést
+szennyirodalom
+szennylé
+szennyvíz
+szennyvízcsõ
+szennyvízlevezetõ
+szennyvíztisztítás
+szent
+szent,
+szentbeszéd
+szentbeszédet
+szentek
+szenteknek
+szentel
+szenteli
+szentelmények
+szentelt
+szenteltessék
+szenteltség
+szenteltvizet
+szenteltvíz
+szenteltvíztartó
+szentelve
+szentelés
+szentelõ
+szenteskedés
+szenteskedõ
+szenteste
+szentesít
+szentesített
+szentesíti
+szentesítés
+szentföld
+szentheverdel
+szenthez
+szentháromság
+szentháromság-vasárnap
+szentimentalizmus
+szentimentális
+szentjánosbogár
+szentjánoskenyér
+szentjánoskenyérfa
+szentkép
+szentlecke
+szentlélek
+szentszék
+szentség
+szentsége
+szentségek
+szentségektõl
+szentségel
+szentséges
+szentségi
+szentségit!
+szentségtartó
+szentségtörés
+szentségtörõ
+szentségében
+szentté
+szentáldozás
+szentéletûség
+szentély
+szentélybeli
+szentélyrekesztõ
+szentírás
+szentírásban
+szentírási
+szentírásra
+szentül
+szenved
+szenvedett
+szenvedhetem
+szenvedni
+szenvedéllyel
+szenvedély
+szenvedélye
+szenvedélyeit
+szenvedélyeket
+szenvedélyes
+szenvedélyesen
+szenvedélyesség
+szenvedélymentes
+szenvedélymentesség
+szenvedélynek
+szenvedélytelen
+szenvedélyére
+szenvedélyét
+szenvedés
+szenvedéseit
+szenvedések
+szenvedéseket
+szenvedéssel
+szenvedõ
+szenvedõhöz
+szenvelgés
+szenvelgõ
+szenvtelen
+szenvtelenség
+szenvtelenül
+szenzualista
+szenzualizmus
+szenzáció
+szenzációhajhászás
+szenzációhajhászó
+szenzációkat
+szenzációra
+szenzációs
+szenzációs!
+szenzációt
+szenzációtól
+szenátus
+szenítés
+szeparatista
+szeparatizmus
+szeparál
+szeparálódik
+szeparátor
+szeplõ
+szeplõkkel
+szeplõs
+szeplõssé
+szeplõtlen
+szeplõtlenség
+szeptikus
+szer
+szerb
+szerdára
+szerecsen
+szerecsendió
+szerecsenmosdatás
+szerek
+szerel
+szerelem
+szerelembõl
+szerelemgyerek
+szerelemgyermek
+szerelemre
+szerelemrõl
+szerelme
+szerelmemet
+szerelmes
+szerelmese
+szerelmesek
+szerelmesen
+szerelmeskedik
+szerelmeskedés
+szerelmeskedõ
+szerelmeslevél
+szerelmespár
+szerelmi
+szerelmében
+szerelmére
+szerelmére!
+szerelmét
+szerelni
+szerelt
+szerelve
+szerelvény
+szerelvények
+szerelvényfal
+szerelvényfalon
+szerelvényvizsgálat
+szerelvényzsák
+szerelék
+szerelés
+szerelési
+szerelõ
+szerelõasztal
+szerelõberendezés
+szerelõcsarnok
+szerelõgépkocsi
+szerelõgödör
+szerelõkészülék
+szerelõmûhely
+szerelõpad
+szerelõállvány
+szerencse
+szerencse,
+szerencsecsillaga
+szerencsejáték
+szerencsejátékban
+szerencsekarperec
+szerencsekerék
+szerencsekívánat
+szerencselovag
+szerencsepénz
+szerencsesorozat
+szerencseszerzõdés
+szerencseszám
+szerencsetalizmán
+szerencsetárgy
+szerencsevadász
+szerencsében
+szerencsében!
+szerencséje
+szerencséjét
+szerencsém
+szerencsére
+szerencsés
+szerencsésebb
+szerencsésen
+szerencsésség
+szerencsét
+szerencsét!
+szerencsétlen
+szerencsétlen!
+szerencsétlenség
+szerencsétlenségben
+szerencsétlensége
+szerencsétlenségtõl
+szerencsétlenül
+szerenád
+szerenádokat
+szerenádot
+szerenádozó
+szerep
+szerepbe
+szerepben
+szerepe
+szerepek
+szerepel
+szerepelt
+szerepeltek
+szerepeltet
+szerepem?
+szerepemet
+szerepet
+szerepjátszás
+szerepkönyv
+szerepkör
+szerepkört
+szereplés
+szereplési
+szereplõ
+szereplõk
+szereposztás
+szereppéldány
+szerepre
+szerepében
+szerepét
+szeret
+szeretek
+szeretem
+szeretet
+szeretete
+szeretetet
+szeretetlen
+szeretetmegnyilvánulás
+szeretetre
+szeretetreméltó
+szeretetreméltóság
+szeretett
+szeretettel
+szeretetvendégség
+szeretetét
+szereti
+szeretik
+szeretkezik
+szeretkezés
+szeretne
+szeretné
+szeretnék
+szeretném,
+szerettem
+szeretõ
+szeretõen
+szeretõje
+szerez
+szerezni
+szerfa
+szerfelett
+szerfölött
+szerfölötti
+szerint
+szerint)
+szerintem
+szerinti
+szerkentyû
+szerkeszt
+szerkesztés
+szerkesztésében
+szerkesztõ
+szerkesztõi
+szerkesztõje
+szerkesztõség
+szerkesztõségi
+szerkezet
+szerkezete
+szerkezetet
+szerkezeti
+szerkezetû
+szerkocsi
+szerkó
+szerológia
+szerológiai
+szerpentin
+szerpentinszalag
+szerpentinösvény
+szerpentinút
+szerszám
+szerszám-csésze
+szerszámbefogó
+szerszámfogó
+szerszámgép
+szerszámkamra
+szerszámkészlet
+szerszámkészítés
+szerszámkészítõ
+szerszámláda
+szerszámnyél
+szerszámok
+szerszámokkal
+szerszámoskamra
+szerszámot
+szerszámozás
+szerszámsorozat
+szerszámtartó
+szerszámtáska
+szert
+szertartányos
+szertartás
+szertartási
+szertartáskönyv
+szertartásmester
+szertartásos
+szertartásosan
+szertartásoskodás
+szertartásosság
+szertartásrend
+szertartást
+szerte
+szertefoszlat
+szertefoszlatja
+szertefoszlik
+szertefoszló
+szertelen
+szertelenség
+szertelenül
+szerteszéjjel
+szerteágazó
+szertári
+szerv
+szerva
+szerve
+szervek
+szerves
+szervesen
+szervet)
+szervetlen
+szervez
+szervezet
+szervezet,
+szervezetbõl
+szervezeti
+szervezetlen
+szervezett
+szervezetû
+szervezkedés
+szervezés
+szervezési
+szervhez
+szervi
+szervilis
+szervilizmus
+szerviz
+szervizel
+szervizelés
+szervizre
+szervizállomás
+szervomotor
+szervusz!
+szervusztok!
+szervál
+szervál?
+szerválás
+szerváló
+szervátültetés
+szervíz
+szerzemény
+szerzeményezés
+szerzet
+szerzetes
+szerzetesház
+szerzetesi
+szerzetesnek
+szerzetesrend
+szerzetesrendbõl
+szerzetesség
+szerzett
+szerzés
+szerzõ
+szerzõdik
+szerzõdtet
+szerzõdtetett
+szerzõdtetés
+szerzõdés
+szerzõdésben
+szerzõdéses
+szerzõdési
+szerzõdésileg
+szerzõdéskötés
+szerzõdéssel
+szerzõdésszegés
+szerzõdésszegõ
+szerzõdésszerû
+szerzõdést
+szerzõdéstervezet
+szerzõdõ
+szerzõi
+szerzõje
+szerzõség
+szerzõséget
+szerény
+szerényebb
+szerényen
+szerénység
+szerénysége
+szerénytelenség
+szerét
+szerû
+szesz
+szeszadagot
+szeszes
+szeszfogyasztás
+szeszfok
+szeszfõzde
+szeszfõzõ
+szeszkazán
+szeszkereskedelem
+szesztartalmú
+szesztartalom
+szesztilalmas
+szesztilalmat
+szesztilalom
+szesztõl
+szeszély
+szeszélyeinek
+szeszélyeit
+szeszélyes
+szeszélyesen
+szeszélyesség
+szeszélyének
+szeszélyét
+szett
+szetter
+szex
+szexbomba
+szexepil
+szexepilje
+szexi
+szexis
+szexista
+szexizmus
+szexológia
+szexológus
+szexpróba
+szextett
+szextáns
+szexualitású
+szexuális
+szexuálisan
+szexuáltudomány
+szexvizsgálat
+szezon
+szezonja
+szezámcsont
+szezámfû
+szezámfûfélék
+szeánsz
+szféra
+szia
+szia!
+sziamang
+szid
+szidalmak
+szidalmakat
+szidalmakkal
+szidalmaz
+szidalmazva
+szidalmazás
+szidalmazó
+szidalom
+szidás
+szidást
+szieszta
+sziesztázik
+szifilisz
+szifiliszes
+szifon
+szifoncsövön
+szifonszerû
+szifonzár
+szifó
+sziget
+sziget-
+szigetecske
+szigetel
+szigetelt
+szigetelés
+szigetelõ
+szigetelõanyag
+szigetelõhüvely
+szigetelõlakk
+szigetelõlemez
+szigetelõláncon
+szigetelõszalag
+szigeti
+szigetlakó
+szigetre
+szigetvilág
+szignatúrát
+szignál
+szignálás
+szignó
+szigony
+szigonyozó
+szigonyágyú
+szigor
+szigorlat
+szigorlatra
+szigorítás
+szigorú
+szigorúan
+szigorúság
+szike
+szikes
+szikesség
+sziki
+szikkaszt
+szikla
+sziklabérc
+sziklacsúcs
+szikladarab
+sziklafal
+sziklafok
+sziklakert
+sziklamászás
+sziklaorom
+sziklapad
+sziklazátony
+sziklából
+sziklák
+sziklákat
+sziklás
+szikopál
+szikra
+szikracsillapító
+szikrafrekvencia
+szikragyakoriság
+szikragyújtás
+szikragyújtó
+szikraközön
+szikraoltó
+szikraszínkép
+szikratávirat
+szikratávírás
+szikratávírász
+szikratávíró
+szikrácska
+szikrákat
+szikrányi
+szikrát
+szikrával
+szikrázik
+szikrázás
+szikrázó
+sziksó
+szikvíz
+szikvója
+szikvója-fenyõ
+szikár
+szilaj
+szilajság
+szilfa
+szillogisztikus
+szillogizmus
+szillogizmusba
+szillogizmusokban
+sziluett
+szilva
+szilvafa
+szilvaszínû
+szilveszter
+szilveszterest
+szilveszterezik
+szilveszteri
+szilánk
+szilánkbiztos
+szilánkfogó
+szilánkmentesen
+szilánkok
+szilánkokká
+szilánkokra
+szilánkos
+szilánkosan
+szilánkosodás
+szilánkosra
+szilánkot
+szilánktöltet
+szilárd
+szilárdan
+szilárdság
+szilárdsági
+szilárdságtan
+szilárdít
+sziléziai
+szimat
+szimata
+szimatja
+szimatol
+szimatolás
+szimatú
+szimbiotikus
+szimbiózis
+szimbiózisban
+szimbolika
+szimbolikus
+szimbolikusan
+szimbolizmus
+szimbolizál
+szimbólum
+szimfónia
+szimfóniája
+szimmetria
+szimmetrikus
+szimpatizál
+szimpla
+szimuláció
+szimulál
+szimulálás
+szimuláns
+szimulátor
+szinarchia
+szindikátus
+szindikátusba
+szindikátusban
+szindróma
+szinekúra
+szinergikus
+szinergizmusa
+szinezék
+szingli
+szingulett
+szinguláris
+szinklinális
+szinkopálás
+szinkron
+szinkronban
+szinkronizál
+szinkronizált
+szinkronozás
+szinkópa
+szinonim
+szinopszis
+szint
+szintazonosítási
+szinte
+szinten
+szinterel
+szinterelt
+szinterelés
+szintes
+szintetikus
+szintetikusan
+szintetizál
+szintez
+szintezett
+szintezõ
+szintezõléc
+szintezõs
+szintje
+szintjel
+szintjele
+szintre
+szintvonal
+szintvonalas
+szintvonaljelzés
+szintén
+szintézis
+szinusz
+szipka
+szipog
+szipogás
+szipolyozó
+sziporka
+sziporkázik
+sziporkázás
+sziporkázó
+szippant
+szippantás
+szipákol
+szipákolás
+szipózik
+szir-szar
+szirom
+szirt
+szirtes
+szirtfal
+szirtfok
+szirup
+szirupos
+sziruppal
+szirén
+sziréna
+szirénabúgás
+szirénát
+szirénával
+szirénázás
+sziszeg
+sziszegve
+sziszegés
+sziszegõ
+szisztematikus
+szita
+szitahenger
+szitakötõ
+szitaszekrény
+szitaszerkezet
+szitaszövet
+szitavászon
+szitkok
+szitkokat
+szitkozódik
+szitkozódás
+szitkozódó
+szitok
+szitokáradat
+szittyó
+szittyózva
+szitál
+szitálás
+szitáló
+szitálókamra
+szitálókészülék
+szitán
+szitává
+szivaccsal
+szivacs
+szivacsos
+szivacsosság
+szivacsszerû
+szivar
+szivarfajta
+szivarkapapír
+szivart?
+szivarvég-szedegetõ
+szivattyú
+szivattyúkamra
+szivattyúkar
+szivattyúz
+szivattyúzás
+szivató
+szivi
+szivikém
+szivornya
+szivornyamûködés
+szivornyaszerû
+szivárgás
+szivárgásmentesen
+szivárgó
+szivárog
+szivárogtat
+szivárvány
+szivárványhártya
+szivárványszínek
+szivárványszínekben
+szizálkender
+sziámi
+szkafander
+szkepticizmus
+szkeptikus
+szkiff
+szkin-hatás
+szkip
+szkippálya
+szkipszállításos
+szkipvezeték
+szklerotikus
+szklerotiniás
+szkunksz
+szkéma
+szkúner
+szlalom
+szlapál
+szlem
+szleng
+szlogen
+szlopál
+szlovák
+szláv
+szlúp
+szmirnaszõnyeg
+szmoking
+szmokingba
+sznob
+sznobizmus
+sznobság
+sznobéria
+szoba
+szobaantenna
+szobafestés
+szobafestõ
+szobafoglalás
+szobafogság
+szobafogságra
+szobalány
+szobamagasság
+szobanövények
+szobarend
+szobasor
+szobatiszta
+szobatisztaságra
+szobatudós
+szobatárs
+szobautalvány
+szobaûrszék
+szobor
+szobor-
+szoborbronz
+szoborfaragó
+szoborfém
+szobormûvek
+szobornak
+szoborral
+szoborszerû
+szoborszerûség
+szoborszépségû
+szobortalapzat
+szobrocska
+szobrok
+szobrot
+szobrász
+szobrász-
+szobrászat
+szobrászmunkát
+szobrászmárvány
+szobrászmûvészet
+szobába
+szobában
+szobából
+szobácska
+szobák
+szobákban
+szobányi
+szobára
+szobáról
+szobát
+szocialista
+szocializmus
+szocializál
+szocializálás
+szociológia
+szociológiai
+szociológus
+szociáldemokrata
+szociális
+szodómiát
+szofista
+szofisztikus
+szofizma
+szofizmákban
+szokatlan
+szokatlanság
+szokatlanul
+szokni
+szoknya
+szoknyabolond
+szoknyafelkötõ
+szoknyafogó
+szoknyavadász
+szoknyáját
+szoknyák
+szokott
+szokta
+szoktam
+szoktat
+szoktatás
+szokva
+szokvány
+szokványos
+szokás
+szokása
+szokásjog
+szokásnak
+szokások
+szokásoknak
+szokásom
+szokásos
+szokásostól
+szokásszerû
+szokásszerûen
+szokást
+szokásává
+szolga
+szolgai
+szolgalelkû
+szolgalelkûen
+szolgalelkûség
+szolgalmi
+szolgalom
+szolgaság
+szolgaságban
+szolgál
+szolgálat
+szolgálata
+szolgálatait
+szolgálataiért
+szolgálatba
+szolgálatban
+szolgálatból
+szolgálati
+szolgálatkész
+szolgálatkészség
+szolgálaton
+szolgálatos
+szolgálatot
+szolgálatra
+szolgálatszegés
+szolgálattevõ
+szolgálattól
+szolgálatvezetõ
+szolgálatába
+szolgálatában
+szolgálatára
+szolgálatát
+szolgálatért
+szolgálja
+szolgáltat
+szolgáltatva
+szolgáltatás
+szolgáltatások
+szolgáltató
+szolgáló
+szolgálólány
+szolid
+szolidaritás
+szolidaritást
+szolidáris
+szolipszista
+szolipszizmus
+szolmizáció
+szolváció
+szombat-
+szombati
+szombatot
+szombatév
+szomjas
+szomjazik
+szomjúhozza
+szomjúság
+szomorkodik
+szomorít
+szomorú
+szomorúan
+szomorújátékban
+szomorújátékkal
+szomorúnak
+szomorúság
+szomorúvá
+szomszéd
+szomszédainak
+szomszédait
+szomszédban
+szomszédja
+szomszédok
+szomszédos
+szomszédosság
+szomszédság
+szomszédságában
+szonda
+szondáz
+szondázás
+szonett
+szonettköltõ
+szonár
+szop
+szopik
+szopogat
+szopogató
+szoprán
+szoptat
+szoptatás
+szoptató
+szoptatós
+szopás
+szopó
+szopógép
+szopóka
+szopós
+szordínó
+szordínós
+szorgalmas
+szorgalmas,
+szorgalmasan
+szorgalmaz
+szorgalmazza
+szorgalom
+szorgoskodik
+szorong
+szorongat
+szorongatott
+szorongatottság
+szorongatás
+szorongató
+szorongás
+szoros
+szorosabbra
+szorosabbá
+szorosan
+szorosra
+szorosság
+szoroz
+szortyog
+szortyogás
+szortyogó
+szortíroz
+szortírozás
+szortírozó
+szorul
+szorulok
+szorult
+szorultság
+szorulás
+szorulása
+szoruló
+szorzat
+szorzás
+szorzótényezõ
+szorít
+szorítja
+szorítkozhatunk
+szorítkozik
+szorított
+szorítva
+szorítás
+szorító
+szorítóbilincs
+szorítóbéka
+szorítócsavar
+szorítófog
+szorítófogó
+szorítógyûrû
+szorítókapocs
+szorítókarika
+szorítókengyel
+szorítókeret
+szorítókészülék
+szorítókötél
+szorítószerkezet
+szotyakos
+szponzor
+szponzorál
+szpré
+szpáhi
+sztearin
+sztentori
+sztepptáncos
+sztereo-
+sztereofónikus
+sztereoszkópikus
+sztereotip
+sztereotipál
+sztereotipált
+sztereotípia
+sztereotípia-papír
+sztetoszkóp
+sztirol
+sztoa
+sztochasztikus
+sztoicizmus
+sztoikus
+sztori
+sztratigráfia
+sztratoszféra
+sztrippelés
+sztriptíz
+sztrájk
+sztrájkba
+sztrájkol
+sztrájkolnak
+sztrájkoló
+sztrájktörõ
+sztrájkõr
+sztrájkõrség
+sztrájkõrséget
+sztár
+sztár-szereposztás
+sztárjelölt
+sztárok
+sztárrendszer
+sztárszerep
+sztárszerepet
+sztárság
+sztátor
+sztöchiometria
+sztöchiometrikus
+szuahéli
+szubarktikus
+szubjektivizmus
+szubjektív
+szubkután
+szublimál
+szublimálás
+szublimáló
+szublimálódik
+szubpoláris
+szubsztrátum
+szubvencionál
+szubvenció
+szuflát
+szuflé
+szuggerál
+szuggerálható
+szuggerálhatóság
+szuggeráló
+szuggesztív
+szuka
+szukkulencia
+szula
+szulfaminsav
+szulfid
+szulfit
+szulfiteljárás
+szulfosó
+szulfát
+szultán
+szultánkenyér
+szulák
+szundikál
+szundikálás
+szundit
+szundít
+szundítás
+szunnyadozás
+szunnyadó
+szunyál
+szunyálni
+szunyát
+szunyókál
+szunyókálás
+szuper
+szuper-
+szuperbenzin
+szuperklasszisú
+szuperpozíció
+szupport
+szurdok
+szurdokos
+szurkol
+szurkolás
+szurkoló
+szurkolók
+szurkos
+szurkál
+szurkálja
+szurok
+szurokfekete
+szurokkal
+szurokszén
+szurokérc
+szurony
+szuronypapucs
+szuronytüske
+szurtos
+szurtosság
+szurát
+szuráti
+szusszal
+szusszanás
+szuszog
+szuszog,
+szuszogás
+szuszpenzió
+szuszra
+szutykos
+szuvasodik
+szuvasodás
+szuvasodó
+szuvasság
+szuverenitás
+szuverén
+szvasztika
+szvetter
+szving
+szvingtánc
+szvingzene
+szvit
+szád!
+szádalás
+szádcölöp
+szádfal
+szádja
+száguin
+száguld
+száguldva
+száguldás
+száguldó
+szágó
+szágópálma
+száj
+száj-
+szája
+szájbiggyesztést
+szájhagyomány
+szájharmonika
+szájhõs
+szájhõsködik
+szájhõsködés
+szájhõsködõ
+szájjal
+szájkosarat
+szájkosár
+szájnyílás
+szájnyílása
+szájon
+szájpad
+szájpad-elzáró
+szájpadlás
+szájpecek
+szájpenész
+szájra
+szájrész
+szájról
+szájsebészet
+szájszag
+szájszöglet
+szájtáti
+szájtátva
+szájtátás
+szájtépés
+szájvíz
+szájzár
+szájába
+szájából
+száján
+szájára
+száját
+szájával
+szájú
+szál
+szála
+szálakra
+szálanként
+szálas
+szálasság
+szálfa
+szálfatorlódás
+szálfát
+szálhúzásos
+szálig
+szálka
+szálkeresztgyûrû
+szálkás
+szálkát
+száll
+szállaszt
+szállasztó
+szállazulás
+szálldos
+szállingózik
+szállj
+szálloda
+szállodai
+szállodaigazgató
+szállodatulajdonos
+szállodába
+szállt
+szállás
+szállása
+szállásadó
+szálláshely
+szálláshelyét
+szálláskörlet
+szállásmester
+szállásmesteri
+szállásolva
+szállást
+szállásutalvány
+szállít
+szállíthatatlan
+szállítható
+szállítmány
+szállítmányirányítás
+szállítmányoz
+szállítmányozás
+szállítmányozási
+szállítmányozó
+szállított
+szállítva
+szállítás
+szállítása
+szállítási
+szállítású
+szállító
+szállítócsiga
+szállítócsúszda
+szállítócég
+szállítóeszköz
+szállítóeszközök
+szállítóhajó
+szállítója
+szállítók
+szállítókas
+szállítómunkás
+szállítószalag
+szállítótér
+szállítóvágat
+szállítóvájat
+szállítóvállalat
+szállítóvályú
+szállítóvödör
+szállítóállványra
+szálló
+szálmente
+szálosztályozó
+szálsajtolás
+szálú
+szám
+szám,
+szám-
+száma
+számadás
+számadásra
+számba
+számban
+számbavétel
+számbeli
+számbelileg
+számbeütõ
+számegysége
+számelmélet
+számfejtés
+számig
+számjegy
+számjegyet
+számjegyû
+számkivet
+számkivetett
+számkivetettet
+számkivetettnek
+számkivetés
+számkivetésbe
+számla
+számlabirtokos
+számlakivonat
+számlap
+számlaviszonyban
+számlája
+számlájára
+számlák
+számlál
+számlálj!
+számlálva
+számlálás
+számláló
+számlálókészülék
+számlán
+számlára
+számláról
+számlát
+számláz
+számlázható
+számlázás
+számlázógép
+számmisztika
+számnév
+számodra
+számok
+számokból
+számol
+számolni
+számolunk
+számolás
+számolásban
+számolási
+számolásnál
+számolást
+számoló
+számológép
+számolókönyv
+számolópénz
+számolószerkezet
+számomra
+számomra,
+számomra...
+számon
+számontartás
+számos
+számot
+számottevõ
+számoz
+számozott
+számrendszer
+számsor
+számszeríj
+számszerû
+számszerûen
+számszerûleg
+számtalan
+számtalanszor
+számtan
+számtani
+számtanpélda
+számtanpéldát
+számtábla
+számtárcsa
+számunkra
+számvetés
+számvetést
+számvevõ
+számvevõszék
+számvivõ
+számvivõtiszt
+számára
+számát
+számérték
+számértékû
+számít
+számít!
+számíthatsz
+számítják
+számítottam
+számíts!
+számítva
+számítva,
+számítás
+számításait
+számításba
+számítási
+számításokat
+számítással
+számítást
+számítását
+számító
+számítógép
+számítógép-terminál
+számítógéphez
+számú
+számûz
+számûzetés
+számûzetésbe
+számûzés
+számûzött
+szán
+szánakozik
+szánakozva
+szánakozó
+szánalmas
+szánalmasan
+szánalmasság
+szánalmat
+szánalom
+szánalomra
+szándék
+szándéka
+szándéka,
+szándékaiban
+szándékait
+szándékkal
+szándékok
+szándékol
+szándékolatlan
+szándékolatlanul
+szándékolt
+szándékolás
+szándékomban
+szándékos
+szándékosan
+szándékosság
+szándékozik
+szándékuk
+szándékában
+szándékát
+szándékú
+szánhúzó
+szánja
+szánjam
+szánkó
+szánkózik
+szánkózó
+szánt
+szánt-vet
+szántalp
+szántható
+szántott
+szántszándékkal
+szántás
+szántással
+szántó
+szántóföld
+szántófölddarab
+szántóvetõ
+szánutazás
+szár
+szárad
+száradjon
+száradt
+száradás
+száradó
+szárai
+száraz
+száraz-fúrás
+szárazan
+szárazat
+szárazbab
+szárazbab-fõzelék
+szárazdajka
+szárazdokk
+szárazelem
+szárazföld
+szárazfölddé
+szárazföldek
+szárazföldet
+szárazföldi
+szárazföldre
+szárazföldrõl
+szárazföldön
+szárazkotró
+szárazon
+szárazra
+szárazszülés
+szárazság
+szárazsúly
+szárba
+szárbél
+szárcsa
+szárcsont
+szárfogyasztás
+szári
+szárkapocs-csont
+szármaró
+származik
+származtat
+származtatás
+származás
+származási
+származástan
+származású
+származék
+származó
+szárnnyal
+szárny
+szárnya
+szárnyai
+szárnyait
+szárnyaival
+szárnyak
+szárnyal
+szárnyalt
+szárnyaló
+szárnyas
+szárnyasaprólék
+szárnyascsavar
+szárnyashajó
+szárnyashús
+szárnyasra
+szárnyast
+szárnyasvad
+szárnyat
+szárnyatlan
+szárnybõr
+szárnycsapkodás
+szárnycsapás
+szárnycsattogtatva
+szárnyelcsavarodás
+szárnyfedél
+szárnyfelület
+szárnyhegy
+szárnyra
+szárnyrezegtetés
+szárnysegéd
+szárnyszelvény
+szárnyszélesség
+szárnyterhelés
+szárnytámadás
+szárnytávolság
+szárnyverdesés
+szárnyvitorlafa
+szárnyvitorlarudat
+szárnyvonal
+szárnyvég
+szárnyvégi
+szárnyát
+szárnyával
+szárnyépület
+szárnyú
+szárrész
+szártetõzõ
+szártépõ
+szárát
+szárít
+szárított
+szárítás
+szárító
+szárítókamra
+szárítókas
+szárítókemence
+szárítóra
+szárítórakásra
+szárítóállvány
+szárú
+száz
+század
+században
+századforduló
+századig
+századik
+századiroda
+százados
+századosi
+századossá
+századparancsnok
+századrésze
+századunkban
+századvégi
+százalék
+százalékos
+százalékosnak
+százalékot
+százdolláros
+százezer
+százlábú
+száznál
+százrétû
+százszor
+százszorszép
+százéves
+szédeleg
+szédelegve
+szédelgés
+szédelgést
+szédelgõ
+szédelgõen
+szédít
+szédítés
+szédítõ
+szédítõen
+szédül
+szédületes
+szédülni
+szédült
+szédülve
+szédülékeny
+szédülés
+szédüléssel
+szédülõ
+szédülök
+széf
+szégyeldd
+szégyell
+szégyelld
+szégyen
+szégyenbe
+szégyenbélyeg
+szégyene
+szégyenfolt
+szégyenfoltja
+szégyenkezik
+szégyenkezve
+szégyenkezés
+szégyenkezõ
+szégyenletes
+szégyenlõs
+szégyenlõsen
+szégyenlõsség
+szégyenpad
+szégyentelen
+szégyentelenül
+szégyenteljes
+szégyenére
+széjjeldörzsölés
+széjjelhány
+széjjelhúz
+széjjelhúznak
+széjjelmegy
+szék
+székek
+székel
+székelés
+székelõ
+székestõl
+székfoglaló
+székfû
+székhely
+székház
+széklet
+székláb
+székrekedés
+székrekedése
+székrekedéses
+székrekedést
+székrõl
+székét
+szél
+szél?
+szélbe
+szélben
+szélcsatorna
+szélcsend
+szélcsendes
+szélcsendzóna
+szélcsipkézett
+széldeszka
+széldzseki
+széle
+széleit
+széleken
+széleltérítés-jelzõ
+szélerõk
+széles
+széles,
+szélesedik
+szélesedõ
+szélesedõen
+szélesen
+széleskörû
+széleskörûen
+széleskörûség
+szélesre
+szélesség
+szélessége
+szélességet
+szélességi
+széleszt
+szélesztett
+szélesít
+szélet
+szélez
+szélfelõli
+szélfeszítõ
+szélfogó
+szélfél
+szélfútta
+szélfúvás
+szélhajtó
+szélhámos
+szélhámoskodik
+szélhámoskodás
+szélhámosság
+szélhûdés
+szélhûdéses
+széliránnyal
+szélirány
+szélirányba
+szélirányban
+szélirányjelzõ
+széliránymutató
+széljegyzet
+széljegyzetekkel
+széljegyzetel
+széljelzõ
+széljárat
+széljárta
+széljárás
+szélkakas
+szélkerék
+széllel
+széllelbélelt
+széllovas
+széllökés
+szélmalmokban
+szélmalom
+szélmalomharcot
+szélmalomkar
+szélmalomkerék
+szélmalommal
+szélmalomvitorla
+szélmentes
+szélnek
+széloldal
+széloldali
+szélragasztás
+szélre
+szélroham
+szélrózsa
+szélsebesen
+szélszorulás
+szélsõ
+szélsõbaloldali
+szélsõfedezet
+szélsõjobb
+szélsõjobboldali
+szélsõk
+szélsõség
+szélsõségbe
+szélsõségbõl
+szélsõségek
+szélsõséges
+szélsõségesek
+szélsõségesen
+szélsõérték-feladat
+széltoló
+széltében
+széltében-hosszában
+széltépte
+széltõl
+szélugrás
+szélvihar
+szélviharos
+szélváltozás
+szélvédõ
+szélvész
+szélzsák
+szélárnyék
+szélárnyékos
+széléig
+szélén
+szélét
+szélû
+szélütés
+szélütött
+szén
+széna
+szénaboglya
+szénakazal
+szénaköteg
+szénakötözõ
+szénalazító
+szénanátha
+szénapadlás
+szénapajta
+szénapor
+szénarend
+szénarendek
+szénatörek
+szénavilla
+szénben
+szénbánya
+szénbányász
+széndarab
+széndarabok
+széndioxid
+széndiszulfid
+szénegyengetõ
+széneljárás
+szénelõkészítés
+szénfejtõ
+szénfekete
+szénfogyasztás
+szénfront
+széngáz
+széngázzal
+szénhidrogének
+szénhiány
+szénhordó
+széniszap
+szénjegy
+szénkamra
+szénkereskedés
+szénkéneg
+szénkészlet
+szénlerakódás
+szénmeddõ
+szénmedence
+szénmezõ
+szénmonoxid
+szénmosó
+szénmásolás
+szénnel
+szénné
+szénpad
+szénpor
+szénrajz
+szénraktár
+szénréteg
+szénréteget
+szénrúd
+szénsavas
+szénsavpatron
+szénserpenyõ
+szénszennyezõdés
+szénszál
+szénszálas
+szénszállító
+szénsáv
+széntelep
+széntermelés
+szénterület
+széntetraklorid
+széntörmelék
+szénutalvány
+szénvagyon-csökkenés
+szénzsinór
+szénát
+szénövezet
+szép
+szép,
+szépen
+szépet
+szépfiú
+szépia
+szépirodalom
+szépmûvészet
+szépmûvészeti
+szépnem
+széppróza
+szépség
+szépségei
+szépségeivel
+szépséges
+szépségflastrom
+szépségfolt
+szépséghiba
+szépséghibája
+szépségnek
+szépségtapasz
+szépségtapaszt
+szépségverseny
+szépségébõl
+szépségén
+szépségének
+szépségét
+szépségétõl
+széptevés
+széptevõ
+széptudományok
+szépírás
+szépíró
+szépít
+szépített
+szépítget
+szépítgeti
+szépítgetés
+szépítgetõ
+szépíti
+szépítés
+szépítõ
+szépítõszer
+szépítõszerek
+széria
+szériagyártás
+szérke
+szérum
+szérumbetegség
+szérumkiütés
+szérumterápia
+szérû
+szérûskert
+szét
+szétbomlik
+szétbomlás
+szétbont
+szétbontás
+szétbontásra
+szétbontó
+szétcsatolás
+szétdarabol
+szétdarabolás
+szétdaraboló
+szétdobott
+szétdobál
+szétdörzsölés
+szétesik
+szétesés
+szétesõ
+szétfeszíti
+szétfeszítés
+szétfolyik
+szétforgácsol
+szétforgácsolódik
+szétfoszlik
+szétfutó
+széthajigál
+széthajtogat
+széthasad
+széthasadás
+széthasít
+széthint
+széthull
+széthullás
+széthány
+széthúz
+széthúzza
+széthúzás
+szétkapcsol
+szétkapcsolás
+szétkapcsolódik
+szétkotorja
+szétküld
+szétlapul
+szétlapít
+szétlõtt
+szétmar
+szétmarcangol
+szétmegy
+szétmorzsol
+szétmorzsolás
+szétmálladó
+szétmállott
+szétmállás
+szétmálló
+szétnyit
+szétnyom
+szétnyomás
+szétnyílik
+szétoszlat
+szétoszlik
+szétoszlásra
+szétoszt
+szétosztott
+szétosztás
+szétosztó
+szétpattan
+szétpattanás
+szétpattanó
+szétpermetezett
+szétporlad
+szétporlaszt
+szétpukkadás
+szétpukkadó
+szétrak
+szétreped
+szétrepedezés
+szétrepedés
+szétrepedõ
+szétrepeszt
+szétrobban
+szétrobbant
+szétrobbanás
+szétrobbanó
+szétrombol
+szétroncsol
+szétrostálás
+szétrág
+szétráz
+szétsodor
+szétsugároz
+szétszabdalás
+szétszaggat
+szétszaggatás
+szétszakad
+szétszakadozó
+szétszakadás
+szétszakít
+szétszakítás
+szétszalaszt
+szétszed
+szétszedhetõ
+szétszedés
+szétszedése
+szétszedõ
+szétszerel
+szétszerelés
+szétszéledés
+szétszór
+szétszórt
+szétszórtság
+szétszórás
+szétszóródik
+szétszóródott
+szétszóródás
+széttagol
+széttapos
+széttartó
+széttekeredett
+széttekeredik
+szétterjed
+szétterjedt
+szétterjedés
+szétterjedõ
+szétterjesztett
+szétterpeszt
+szétterpesztett
+szétterpeszti
+szétterpesztése
+szétterít
+szétterítés
+szétterítõ
+széttolható
+széttárt
+széttép
+széttépés
+szétver
+szétvet
+szétvetett
+szétvetve
+szétvetés
+szétvetése
+szétvágott
+szétválaszt
+szétválaszthatatlan
+szétválasztja
+szétválasztás
+szétválik
+szétválogat
+szétválás
+szétzilál
+szétzúz
+szétzúzott
+szétzúzza
+szétágazik
+szétágazó
+szétálló
+szézámfûfélék
+szíj
+szíjak
+szíjazat
+szíjazata
+szíjcsúszás
+szíjfeszítõ
+szíjfeszültség
+szíjjal
+szíjon
+szíjról
+szín
+szín-
+színarany
+színben
+színbõl
+színbõr
+színdarab
+színdarabot
+színe
+színe-java
+színe-javát
+színe-virága
+színebn
+színehagyott
+színei
+színek
+színekben
+színeket
+színelõadás
+színes
+színesedik
+színesen
+színesfém
+színeváltozása
+színez
+színezet
+színezetet
+színezetlen
+színezett
+színezetû
+színezés
+színezõ
+színezõdik
+színezõdés
+színfal
+színfalak
+színfalhasogatóan
+színfolt
+színfoltok
+színhely
+színhelye
+színhelyére
+színhiánya
+színház
+színházba
+színházi
+színházlátogató
+színházrajongó
+színi
+színielõadás
+színielõadást
+színikritika
+színjeles
+színjátszás
+színjátszó
+színjózan
+színkép
+színképelemzés
+színképsávok
+színképtartomány
+színképvonal
+színlapot
+színleges
+színlegesen
+színlel
+színlelt
+színlelés
+színlelõ
+színmû
+színmûirodalom
+színmûvész
+színmûvészet
+színnel
+színoldal
+színpad
+színpadi
+színpadias
+színpadiaskodás
+színpadkép
+színpadon
+színpadra
+színpadról
+színpompa
+színpompás
+színpompásan
+színre
+színre-szemre
+színrehozás
+színskála
+színszappan
+színszûrõk
+színt
+színtartó
+színtartóan
+színtartóság
+színtelen
+színtelenítés
+színtelenül
+színtársulat
+színtér
+színvak
+színvakság
+színvallásra
+színvonal
+színvonalas
+színvonalat
+színvonalon
+színvonalra
+színvonalsüllyedés
+színvonalát
+színvonalú
+színárnyalat
+színárnyalatot
+színén
+színérõl
+színész
+színészbejáró
+színészet
+színészetre
+színészi
+színészies
+színészkedik
+színészkedve
+színésznek
+színésznõ
+színét
+színû
+színû?
+színûvé
+színültig
+szír
+szíriai
+szírus
+szít
+szítja
+szítás
+szív
+szívbaj
+szívbajt
+szívbe
+szívbemarkoló
+szívbõl
+szívd
+szívderítõ
+szívdobogva
+szívdobogás
+szíve
+szívecském
+szívedre
+szívek
+szívelhetem
+szívelégtelenség
+szívem
+szíverõsítõ
+szíves
+szívesebben
+szívesen
+szívesen!
+szíveskedjék
+szívesség
+szívességbõl
+szívessége
+szívességet
+szívességi
+szívességért
+szívességét
+szívet
+szívfacsaró
+szívfájdalom
+szívfájdító
+szívhez
+szívizom
+szívja
+szívjunk
+szívjóság
+szívkirálynõ
+szívkoszorúér
+szívlevelû
+szívni
+szívnivaló
+szívogatja
+szívpanasz
+szívpanaszok
+szívpitvar
+szívroham
+szívszaggató
+szívszerelem
+szívtelen
+szívtelenül
+szívtipró
+szívvel
+szívvel-lélekkel
+szívverés
+szívvirág
+szívzörej
+szívás
+szívátültetés
+szívébe
+szívében
+szívélyes
+szívélyesen
+szívélyesség
+szívén
+szívén,
+szívére
+szívét
+szívét,
+szívó
+szívó-
+szívócsõ
+szívócsõvel
+szívóka
+szívókorong
+szívókotró
+szívós
+szívósan
+szívóssá
+szívósság
+szívószerv
+szívószál
+szívû
+szó
+szó!
+szó,
+szóalak
+szóalakzat
+szóalkotás
+szóba
+szóban
+szóbanforgó
+szóbeli
+szóbelileg
+szóbeszéd
+szóból
+szóbõ
+szóbõség
+szócsata
+szócsatát
+szócsavarás
+szócsavaró
+szócska
+szócséplés
+szócséplõ
+szócsõ
+szóda
+szódabikarbóna
+szódabikarbónás
+szódavizes
+szódavíz
+szódavízzel
+szódás
+szódásüveg
+szódával
+szófa
+szófogadatlanság
+szófogadás
+szófogadó
+szófogadóan
+szófosó
+szófukar
+szófukarság
+szógyakorisági
+szóhalmozás
+szóhasználat
+szóhoz
+szójabab
+szójababból
+szójababolaj
+szójegyzék
+szójáték
+szójátékot
+szókapcsolat
+szókimondás
+szókimondó
+szókincs
+szókép
+szóképek
+szókölcsönzés
+szóköz
+szóközbillentyû
+szól
+szólal
+szólam
+szólamban
+szólista
+szólj
+szóljon
+szólnak!
+szólni
+szólt
+szólt!
+szólva
+szólás
+szólásgyûjtemény
+szólásmondás
+szólásmód
+szólásszabadság
+szólít
+szólítja
+szólítják
+szólítás
+szóló
+szólóest
+szólóhangverseny
+szólóénekes
+szómutató
+szónikus
+szónok
+szónoka
+szónoki
+szónokian
+szónokias
+szónokiasság
+szónoklat
+szónoklatok
+szónoklatot
+szónoklás
+szónokol
+szónokot
+szónál
+szópár
+szór
+szóra
+szóra!
+szórakozik
+szórakozni
+szórakozott
+szórakozottan
+szórakozottnak
+szórakozottság
+szórakoztat
+szórakoztatás
+szórakoztató
+szórakoztunk
+szórakozás
+szórakozásból
+szórakozási
+szórakozásnak
+szórakozások
+szórakozást
+szórakozó
+szórakozó-móló
+szórakozóhely
+szórend
+szórja
+szórt
+szórvavetõ
+szórványos
+szórványosan
+szórás
+szórástényezõ
+szóró
+szóródik
+szóródás
+szóróernyõ
+szórófej
+szórófelület
+szórógép
+szóról
+szóról-szóra
+szórólap
+szórópisztoly
+szórórózsa
+szórótest
+szórótükör
+szósz
+szószaporítás
+szószban
+szószegés
+szószegõ
+szószátyár
+szószátyárkodás
+szószátyárság
+szószék
+szószékre
+szószóló
+szószólója
+szót
+szót)
+szótag
+szótaghangsúly
+szótagol
+szótagot
+szótlan
+szótlanul
+szótár
+szótári
+szótõ
+szótöbbség
+szóval
+szóvirág
+szóvirágokkal
+szóvivõ
+szóvá
+szóváltás
+szóváltása
+szóváltásba
+szóváltásra
+szóvégeket
+szóvégi
+szóáradat
+szóért
+szóért!
+szóösszetételek
+szóözön
+szõ
+szõke
+szõkít
+szõkítõ
+szõlõ
+szõlõcukor
+szõlõfürt
+szõlõlevéldísz
+szõlõskert
+szõlõszedés
+szõlõt
+szõlõtõ
+szõlõtõke
+szõnyeg
+szõnyeganyag
+szõnyegbombázás
+szõnyegbombázást
+szõnyegen
+szõnyeget
+szõnyegezés
+szõnyeggel
+szõnyegseprû
+szõr
+szõr-
+szõrcsomó
+szõre
+szõrme
+szõrmekabát
+szõrmekereskedõ
+szõrmesapka
+szõrmeárus
+szõrmés
+szõrmével
+szõroldala
+szõrre
+szõrrel
+szõrszál
+szõrszálak
+szõrszálat
+szõrszálhasogatás
+szõrszálhasogató
+szõrtelen
+szõrtelenít
+szõrtelenítõ
+szõrzet
+szõrét
+szõrével
+szõrök
+szõrös
+szõrösség
+szõröstalpú
+szõröstül-bõröstül
+szõröz
+szõrözõ
+szõrû
+szõtt
+szõtte
+szöcske
+szög
+szög-visszagörbítõ
+szögalakban
+szögbe
+szögben
+szöge
+szögek
+szögekkel
+szögemelõ
+szögesdrót
+szöget
+szöggel
+szöghúzó
+szöglet
+szöglete
+szögletes
+szögletrúgás
+szögmérõ
+szögperc
+szögrögzítés
+szögtávolság
+szögvas-felerõsítõ
+szögvágó
+szökdelés
+szökdécsel
+szökdécselve
+szökdécselés
+szökdécselõ
+szökell
+szökellés
+szökellõ
+szökevény
+szökik
+szökjél!
+szökken
+szökkent
+szökkenés
+szöktet
+szökve
+szökés
+szökési
+szökésre
+szökést
+szökõ
+szökõkút
+szökõár
+szökõév
+szökött
+szömörcsög
+szörbet
+szörf
+szörfdeszka
+szörfözik
+szörfözõ
+szörny
+szörnye
+szörnyen
+szörnyeteg
+szörnyetege
+szörnyethal
+szörnyhöz
+szörnyszülött
+szörnyû
+szörnyû,
+szörnyûen
+szörnyûség
+szörnyûségeknek
+szörnyûséges
+szörnyûségesség
+szörp
+szörtyög
+szörtyögés
+szösz
+szöszke
+szöszmötöl
+szöszös
+szövedék
+szöveg
+szövegbe
+szövege
+szövegegyeztetõ
+szövegel
+szövegelget
+szövegelés
+szövegelõ
+szöveget
+szövegezésû
+szövegezõ
+szövegfilmezés
+szöveggel
+szöveghez
+szöveghû
+szövegismétlés
+szövegismétlõdés
+szövegkommentár
+szövegkönyv
+szövegkörnyezet
+szövegmagyarázat
+szövegpár
+szövegrendezés
+szövegrész
+szövegszerkesztés
+szövegszerkesztõ
+szövegváltozat
+szövegértelmezés
+szövegét
+szövegíró
+szövegû
+szövet
+szövetanyag
+szövetdarab
+szövetek
+szövetelhalás
+szövetfelület
+szövetfestés
+szövetfeszítõ
+szövetgumizó
+szövetgumizógép
+szövethiba
+szövethulladék
+szövetháló
+szövetkenõgép
+szövetkezet
+szövetkezeti
+szövetkezik
+szövetkezés
+szövetképzõdmény
+szövetlepel
+szövetminta
+szövetnyíró
+szövetszegély
+szövetszél
+szövetség
+szövetségben
+szövetségen
+szövetséges
+szövetséget
+szövetségi
+szövetségének
+szövettalár
+szövettel
+szövettenyésztés
+szövetteregetõ
+szövetû
+szövevény
+szövevényes
+szövés
+szövési
+szövésmód
+szövésû
+szövõdik
+szövõke
+szövõlepke
+szövõszék
+szú
+szúnyog
+szúnyogháló
+szúnyogirtó
+szúr
+szúrt
+szúrás
+szúró
+szúró-
+szúrófegyverek
+szúrólopó
+szúróláng
+szúrós
+szúróvésõ
+szûcs
+szûk
+szûke
+szûkebb
+szûkebbre
+szûken
+szûklátókörû
+szûklátókörûség
+szûkmarkú
+szûkmarkúan
+szûkmarkúság
+szûkre
+szûkszavú
+szûkszavúan
+szûkszavúság
+szûkszájú
+szûkében
+szûkít
+szûkített
+szûkítés
+szûkítõ
+szûköl
+szûkölködik
+szûkölködés
+szûkölködõ
+szûkölés
+szûkös
+szûkösen
+szûkösködni
+szûkösség
+szûkül
+szûkület
+szûkületes
+szûkülés
+szûkülõ
+szûnj
+szûnjetek
+szûnni
+szûntelen
+szûr
+szûrt
+szûrés
+szûrét
+szûrõ
+szûrõbetét
+szûrõdik
+szûrõkendõ
+szûrõként
+szûrõlap
+szûrõpapír
+szûrõprésiszap
+szûrõréteg
+szûrõszövet
+szûz
+szûz-
+szûzhártya
+szûzi
+szûzies
+szûziesen
+szûziesség
+szûzkurva
+szüfrazsett
+szügy
+szügyelõ
+szükség
+szükség-
+szükségbeli
+szükségben
+szükségbõl
+szüksége
+szükségem
+szükséges
+szükségeset
+szükségesnek
+szükségesnél
+szükségessé
+szükségesség
+szükséget
+szükségkormány
+szükségképpen
+szükséglet
+szükségletei
+szükségletek
+szükségleti
+szükségmegoldás
+szükségmunka
+szükségpénz
+szükségrepülõtér
+szükségszerû
+szükségszerûen
+szükségszerûség
+szükségtelen
+szükségtelenül
+szükségvitorlázat
+szükségvágány
+szükségágy
+szükségállapot
+szükségárboc
+szükségét
+szül
+szüleim
+szüleit
+született
+születetten
+születik
+születés
+születése
+születésemkor
+születési
+születésnap
+születésnél
+születésszabályozás
+születésû
+születõ
+szülhetne
+szülni
+szülte
+szülés
+szülésben
+szülési
+szülésnél
+szülést
+szülész
+szülészet
+szülészeti
+szülésznõ
+szülészorvos
+szülõ
+szülõanya
+szülõföld
+szülõi
+szülõk
+szülõotthon
+szülõszoba
+szülõváros
+szülöttjének
+szünet
+szünete
+szünetel
+szünetelteti
+szünetelés
+szünetelõ
+szünetet
+szünetjel
+szünidõ
+szünnap
+szüntelen
+szüntelenül
+szürcsöl
+szürcsölve
+szürcsölés
+szüret
+szüret!
+szüretel
+szüretelés
+szüretelõ
+szürke
+szürkediófa
+szürkemedve
+szürkeség
+szürkeállomány
+szürkésbarna
+szürkéssbarna
+szürkület
+szürkületi
+szürrealista
+szürrealisztikus
+szürrealizmus
+szürreális
+szüzesség
+sáfrány
+sáfrányszín
+sáfár
+sáfára
+sáfárkodás
+sál
+sálak
+sálat
+sálkendõ
+sám
+sámfa
+sámli
+sánc
+sáncerõd
+sáncfalat
+sánckerítés
+sáncol
+sáncot
+sánctöltés
+sáncárok
+sánker
+sánta
+sántaság
+sántikál
+sántikálni
+sántán
+sántít
+sántítás
+sántító
+sáp
+sápadozik
+sápadt
+sápadtan
+sápadtság
+sápaszt
+sár
+sárba
+sárban
+sárcipõ
+sárfogólap
+sárfolt
+sárga
+sárga,
+sárga-tenger
+sárgabarack
+sárgabõrû
+sárgadinnye
+sárgafolt
+sárgalátás
+sárgaláz
+sárgarigó
+sárgarépa
+sárgaréz
+sárgaréztábla
+sárgarézáru
+sárgaság
+sárgaságban
+sárgul
+sárgállik
+sárgás
+sárgásbarna
+sárgásfakó
+sárgásfehér
+sárgásszürke
+sárgásvörös
+sárgával
+sárgít
+sárhányó
+sárhányókötény
+sárjáró
+sárkaparó
+sárkány
+sárkányt
+sárlik
+sármány
+sáron
+sáros
+sárvédõ
+sáska
+sátor
+sátoralj
+sátorfedélzet
+sátorfáját
+sátorként
+sátorlap
+sátoros
+sátorozik
+sátorozó
+sátortábor
+sátorvas
+sátorverés
+sátorütés
+sátrat
+sátán
+sátáni
+sátánista
+sátánizmus
+sáv
+sávelosztó
+sávirányt
+sávnyújtás
+sávok
+sávokra
+sávon
+sávos
+sávot
+sávoz
+sávozás
+sávozó
+sédbúza
+séf
+séker
+séker-szektabeli
+séma
+sémi
+sémába
+sérelem
+sérelmekért
+sérelmes
+sérelmet
+sért
+sérteget
+sértegetés
+sértegetõ
+sértetlen
+sértetlenség
+sértetlenül
+sértett
+sérthetetlen
+sérthetetlenség
+sérti
+sértés
+sértéseket
+sértésekkel
+sértésre
+sértéssel
+sértést
+sértõ
+sértõdékeny
+sértõdékenység
+sértõdés
+sértõdõ
+sértõdõs
+sértõdött
+sértõdötten
+sértõdöttség
+sérv
+sérvben
+sérves
+sérvkötõ
+sérült
+sérülés
+sérülése
+sérüléseibe
+sérülések
+sérüléses
+sérülési
+séta
+sétabot
+sétabotba
+sétafedélzet
+sétafikálva
+sétahajó
+sétahangverseny
+sétahely
+sétakocsikázás
+sétalovaglás
+sétapálca
+sétatér
+sétaudvar
+sétál
+sétálni
+sétáltat
+sétálás
+sétáló
+sétálóutca
+sétány
+sétára
+sétát
+síbolás
+síbot
+síel
+síelés
+síelõ
+sík
+sík,
+síkba
+síkban
+síkbeli
+síkdombormû
+síkfelület
+síkfilm
+síkfutás
+síkháromszögtan
+síkidom
+síkidomszer
+síkja
+síkköszörû
+síklap
+síkmetszet
+síkmértan
+síkok
+síkon
+síkos
+síkosító
+síkot
+síkpor
+síkra
+síkraszáll
+síkraszállás
+síkság
+síktárcsa
+síküveg
+síléc
+sín
+sínautó
+sínbe
+sínbõl
+síncsavar
+sínek
+sínen
+sínfektetõ
+sínféksaru
+síngyalu
+sínheveder
+sínhevederrel
+sínillesztés
+sínkeresztezés
+sínpár
+sínpólyába
+sínre
+sínvándorlás
+sínütközés
+síp
+sípcsont
+sípcsont-
+sípcsonti
+sípcsonton
+sípjel
+sípjelet
+sípjellel
+sípjelzést
+sípol
+sípolás
+sípoló
+sípolóréce
+sípot
+sípsor
+sípszó
+sír
+sír!
+sír-rí
+sírba
+sírban
+sírbolt
+sírdomb
+síremlék
+síremlék-szobrász
+síremléklap
+sírfelirat
+sírgödör
+sírhalom
+sírhant
+síri
+sírkert
+sírkõ
+sírkõfaragó
+sírkõfaragó-mester
+sírni
+sírul
+sírva
+sírás
+sírásra
+sírásó
+síró
+síró-rívó
+sírógörcs
+sírós
+sísapka
+sóba
+sóban
+sóbálvánnyá
+sóbányász
+sóder
+sóderel
+sóderol
+sódert
+sófõzde
+sógor
+sógornõ
+sógornõk
+sóhaj
+sóhajt
+sóhajtozik
+sóhajtozva
+sóhajtás
+sóher
+sója
+sók
+sókemence
+sókert
+sólelõhely
+sólepárló
+sólerakódás
+sólya
+sólyagerendára
+sólyapálya-csúsztatógerenda
+sólyatér
+sólyom
+sólyomcsalogató
+sólyomkalitka
+sólyompár
+sólyomszerû
+sólyára
+sómunkás
+sóréteg
+sós
+sósav
+sóska
+sóskasav
+sóskasó
+sósperec
+sósrúd
+sósság
+sósvizi
+sósvíz
+sószemcse
+sószóró
+sót
+sótartalmú
+sótartalom
+sótartó
+sótelep
+sótermelõ
+sótermõ
+sóval
+sóvirág
+sóvár
+sóvárgás
+sóvárgó
+sóvárog
+sóvárogva
+sóvárság
+sóz
+sózott
+sózotthús
+sózva
+sózó
+sózódézsa
+sóágy
+sóárus
+sóér
+sõt
+sömör
+söntés
+söntölés
+söpredék
+söpredéke
+söprés
+söprögetõ
+söpör
+sör
+söralátét
+sörbet
+sörfõzde
+sörfõzés
+sörfõzõ
+sörgyári
+sörgyáros
+sörgyárosok
+sörhab
+sörmennyiség
+sörnyitó
+sörrel
+sörszerû
+sört
+sörte
+sörtehaj
+sörtehajviselet
+sörény
+sörét
+söröskocsi
+söröskorsó
+söröskupakban
+sörözõ
+sötét
+sötét,
+sötétbarna
+sötétbe
+sötétebb
+sötétebbé
+sötétedett
+sötéten
+sötétes
+sötétkék
+sötétpiros
+sötétség
+sötétségbe
+sötétvörös
+sötétzárka
+sötétzárkában
+sötétít
+sötétített
+sötétítõfüggöny
+sötétül
+sövénnyel
+sövénnyé
+sövény
+sövényen
+sövényfonadék
+sövényfonatból
+sövényfonattal
+sövénykerítés
+súg
+súgja
+súgta
+súgva
+súgás
+súgás-búgás
+súgó
+súgógép
+súgólyuk
+sújt
+sújtott
+sújtotta
+sújtottan
+sújtóléges
+súly
+súlya
+súlyban
+súlydobás
+súlyegység
+súlyemelés
+súlyemelõ
+súlygolyó
+súlygyarapodás
+súlyhatár
+súlykiegészítés
+súlylökés
+súlymértékrendszer
+súlyos
+súlyosabb
+súlyosabbá
+súlyosan
+súlyosbodás
+súlyosbít
+súlyosbítás
+súlyosbító
+súlyosbítóan
+súlyosra
+súlyosság
+súlyozott
+súlypont
+súlypát
+súlyt
+súlytalan
+súlytöbblet
+súlyveszteség
+súlyvetés
+súlyvonal
+súlyzsinór
+súlyzó
+súlyát
+súlyú
+súrlódás
+súrlódási
+súrol
+súrolja
+súrolás
+súroló
+súrolókefe
+súrolópor
+sûrít
+sûrített
+sûríthetõ
+sûrítés
+sûrítõ
+sûrítõtelep
+sûrû
+sûrûbe
+sûrûjében
+sûrûn
+sûrûn?
+sûrûség
+sûrûsége
+sûrûsödik
+sûrûsödés
+sügér
+süket
+süket,
+süketel
+süketelés
+süketkamra
+süketség
+süketít
+sül
+sületlen
+sületlenség
+sületlenségeket
+süllyed
+süllyedjek
+süllyedt
+süllyedés
+süllyedõ
+süllyeszt
+süllyesztett
+süllyeszthetõ
+süllyesztékmaró
+süllyesztés
+süllyesztõ
+süllyesztõszekrény
+süllõ
+sült
+sültek
+sülve
+sülés
+sülõ
+sün
+sündisznó
+süpped
+süppedés
+sürgess!
+sürget
+sürgeti
+sürgetni
+sürgetés
+sürgetõ
+sürgetõen
+sürgés-forgás
+sürgõs
+sürgõs!
+sürgõsen
+sürgõsség
+sürgölõdik
+sürgölõdve-forgolódva
+sürgölõdés
+sürgölõdõ
+sürgöny
+sürgönypózna
+sürgönystílus
+sürgönyöz
+sürgönyünk
+sürény-petrezselyemgomba
+sürénygomba
+sürénypetrezselyemgomba
+sürög-forog
+sürögve-forogva
+süsü
+süt
+süt-fõz
+sütemény
+süti
+sütkérezik
+sütnivaló
+sütés
+sütésre
+sütõ
+sütõforma
+sütõipari
+sütõiparos
+sütõkemence-tisztogató
+sütõlap
+sütõlapát
+sütõpor
+sütõrostély
+sütõteknõ
+sütõtepsi
+sütõtök
+sütött
+süveg
+süvegfa
+süveggel
+süvít
+süvítés
+süvölt
+tabella
+tabletta
+tablettáz
+tablettázó
+tabu
+tabulátor
+taccsot
+taccsvonal
+tachion
+tacskó
+taft
+tag
+tag-
+tagad
+tagadhatatlan
+tagadhatatlanul
+tagadható
+tagadja
+tagadás
+tagadás,
+tagadó
+tagadólag
+tagadószó
+tagbaszakadt
+tagdíj
+taggá
+tagja
+tagjai
+tagjelölt
+tagjelöltnek
+tagként
+taglal
+taglalat
+taglalás
+taglejtés
+taglejtésekkel
+tagok
+tagol
+tagolt
+tagoltan
+tagoltság
+tagolás
+tagozat
+tagozata
+tagság
+tagsága
+tagsági
+tagságra
+tagul
+tagállam
+tahó
+tajga
+tajtrészeg
+tajték
+tajtékkal
+tajtékkõ
+tajtékkõpor
+tajtékos
+tajtékot
+tajtékszerû
+tajtékzik
+tajtékzás
+tajtékzó
+takar
+takargat
+takarmánnyal
+takarmány
+takarmányoz
+takarmányozás
+takarmánypogácsa
+takarmánypépesítés
+takarmányrépa
+takarmánysiló
+takarmányszállító
+takarmányt
+takarodj
+takarodj!
+takarodó
+takarodót
+takaros
+takarosan
+takarosság
+takart
+takarta
+takarás
+takarékbetét
+takarékbetétkönyv
+takarékláng
+takarékos
+takarékosan
+takarékoskodik
+takarékosság
+takarékpénztár
+takarékra!
+takaréktûzhely
+takarít
+takarított
+takarítva
+takarítás
+takarító
+takarítónõ
+takarítóvas
+takaró
+takaróanyag
+takarója
+takarók
+takarót
+takaróval
+taknyos
+takony
+takonykór
+taksál
+taktika
+taktikai
+taktikus
+taktikája
+taktikát
+taktus
+taktust
+taktusvonal
+takács
+takácsmácsonya
+talaj
+talajegyenetlenség
+talajegyengetés
+talajegyengetõ
+talajfények
+talajfúrás
+talajfúró
+talajgyalu
+talajhorpadás
+talajjavítás
+talajjavításért
+talajjavító
+talajkutató
+talajlazító
+talajlúgosság
+talajmegmunkáló
+talajmenti
+talajmélyedés
+talajon
+talajporhanyító
+talajrészecske
+talajréteg
+talajszint
+talajsüllyedés
+talajt
+talajtakarás
+talajtakarást
+talajtakaró
+talajtan
+talajtani
+talajtorna
+talajtávolság
+talajvíz
+talajvízbõl
+talajvízszivárgás
+talajvízzel
+talapzat
+talentum
+talicska
+taliga
+taligához
+taligányi
+taligát
+talizmán
+talkit
+talkos-csillámos
+talkpala
+talkszteatit
+talkum
+talkummal
+tallium
+tallér
+tallóz
+talmi
+talon
+talonba
+talp
+talpa
+talpal
+talpalatnyi
+talpalló
+talpalló-hajókötél
+talpalás
+talpas
+talpazat
+talpbetét
+talpbélés
+talpbõr
+talpcsapágy
+talpduzzadás
+talpfa
+talpfabeigazító
+talpfaszárítás
+talpgerenda
+talpig
+talpkõ
+talplemez
+talpnyalás
+talpnyaló
+talpon
+talpra
+talpraesett
+talpraesetten
+talpraesettség
+talpraállni
+talpraállás
+talpszegõ
+talpán
+talpára
+talpát
+talál
+találat
+találata
+találati
+találatjelzõ
+találatot
+találgat
+találgatni
+találgatás
+található
+találja
+találják
+találka
+találkahely
+találkozik
+találkoznak
+találkozni
+találkozol
+találkoztam
+találkoztunk
+találkozás
+találkozó
+találkozóharc
+találkozóhely
+találkozót
+találkát
+találmány
+találni?
+találok
+találompróba
+találomra
+talált
+találtak
+találtam
+találtam!
+találtatott
+találékony
+találékonyság
+találékonyságot
+találó
+találóan
+találós
+talán
+talány
+talányokban
+talár
+talárja
+tam-tam
+tambura
+tamburindob
+tamil
+tampon
+tamponoz
+tamás
+tan
+tana
+tanait
+tanaival
+tanakodik
+tananyag
+tananyagon
+tanbábu
+tandem
+tandemben
+tandemelrendezésû
+tandemúthenger
+tandíj
+tanfolyam
+tangenciális
+tangens
+tangens-galvanométer
+tangense
+tangensskála
+tangensérintõpont
+tangó
+tangóharmonika
+tank
+tankcsapda
+tankelhárító
+tanker
+tankhajó
+tankol
+tankolás
+tanksapka
+tanköltészet
+tankönyv
+tanköteles
+tanmenet
+tanmese
+tanok
+tanonc
+tanoncidejét
+tanoncidõ
+tanoncnak
+tanoncszerzõdés
+tanoncság
+tanszék
+tantaluszi
+tanterem
+tanterv
+tanterven
+tantestület
+tantusz
+tantárgy
+tantétel
+tanul
+tanulatlan
+tanulmány
+tanulmányait
+tanulmányi
+tanulmányok
+tanulmányokat
+tanulmányoz
+tanulmányozott
+tanulmányozás
+tanulmányozó
+tanulmányozója
+tanulmányíró
+tanulság
+tanulságos
+tanulságra
+tanult
+tanultság
+tanulás
+tanulékony
+tanulékonyság
+tanuló
+tanulóidõ
+tanulója
+tanulók
+tanulónak
+tanulószoba
+tanulóvezetõ
+tanya
+tanyavilág
+tanyaépülethez
+tanyája
+tanyázik
+tanács
+tanács-
+tanácsadás
+tanácsadó
+tanácsadói
+tanácsadóját
+tanácsháza
+tanácskozik
+tanácskozás
+tanácskozása
+tanácskozáson
+tanácskozással
+tanácskozó
+tanácskérés
+tanácskérõ
+tanácsnok
+tanácsnoki
+tanácsnokság
+tanácsok
+tanácsokat
+tanácsol
+tanácsos
+tanácsot
+tanácstag
+tanácstagság
+tanácstalan
+tanácstalanság
+tanácstalanságot
+tanácsterem
+tanácstestület
+tanácsát
+tanácsülés
+tanár
+tanári
+tanárkodik
+tanárnak?
+tanárnõ
+tanárok
+tanáros
+tanársegéd
+tanával
+tanév
+tanévet
+tanévzáró
+tanít
+tanított
+tanítsd
+tanítvány
+tanítványa
+tanítványok
+tanítás
+tanítási
+tanítástan
+tanító
+tanítónénisen
+tanítónõ
+tanítóskodik
+tanóra
+tanú
+tanúbizonyságot
+tanúidézés
+tanúja
+tanújel
+tanújeleként
+tanújelét
+tanúk
+tanúként
+tanúskodik
+tanúskodás
+tanúskodó
+tanúság
+tanúságot
+tanúságtétel
+tanúsít
+tanúsított
+tanúsítottak
+tanúsító
+tanút
+tanúvallomás
+tanúvallomások
+tanúvallomáson
+tanúvallomásra
+tanúvallomást
+tanúzásra
+tapad
+tapadt
+tapadás
+tapadása
+tapadási
+tapadásra
+tapadó
+tapadóabroncs
+tapadóan
+tapadókagyló
+tapadókorong
+tapadós
+tapasz
+tapaszt
+tapasztal
+tapasztalat
+tapasztalat,
+tapasztalatainak
+tapasztalati
+tapasztalatilag
+tapasztalatlan
+tapasztalatlan,
+tapasztalatlanság
+tapasztalatok
+tapasztalatokat
+tapasztalatra
+tapasztalattól
+tapasztalt
+tapint
+tapintat
+tapintatlan
+tapintatlanság
+tapintatlanságot
+tapintatlanul
+tapintatos
+tapintatosan
+tapintható
+tapinthatóság
+tapintás
+tapintási
+tapintású
+tapintó
+tapintó-
+tapintókörzõ
+tapintóérzék
+tapióka
+tapló
+taplógomba
+taplós
+tapodtat
+tapogat
+tapogatja
+tapogatva
+tapogató
+tapogatódzás
+tapogatózik
+tapogatózva
+tapogatózás
+tapogatózó
+tapos
+tapossa
+taposómalom
+taps
+tapsol
+tapsolnak
+tapsolás
+tapsorkán
+tapsot
+tapsvihar
+tapéta
+tapétáz
+tapétázás
+tapétázó
+tapír
+tar
+tarack
+tarackbúza
+taraj
+tarajos
+tarajú
+targonca
+targoncán
+tarhál
+tarháló
+tarifa
+tarisznya
+tarisznyarák
+tarka
+tarkabarka
+tarkabarkává
+tarkaság
+tarkán
+tarkánfoltos
+tarkáz
+tarkázott
+tarkázás
+tarkít
+tarkított
+tarkó
+tarkóbõr
+tarló
+tarmak-burkolat
+tarsolyában
+tart
+tartalma
+tartalmas
+tartalmasság
+tartalmatlan
+tartalmaz
+tartalmazó
+tartalmi
+tartalmú
+tartalom
+tartalomjegyzék
+tartalomjegyzékbe
+tartalommutató
+tartalék
+tartalék-
+tartalékadag
+tartalékalap
+tartalékalkatrészek
+tartalékban
+tartalékelem
+tartalékgép
+tartalékjátékos
+tartalékkazán
+tartalékkormány
+tartalékkészlet
+tartaléklánc
+tartalékol
+tartalékos
+tartalékot
+tartalékpéldány
+tartaléksereg
+tartalékárboc
+tartam
+tartam-pasztõrözés
+tartama
+tartanak
+tartandó
+tartani
+tartani?
+tartasz
+tartasz?
+tarthatatlan
+tartható
+tartja
+tartja,
+tartjuk
+tartják
+tartod
+tartogat
+tartok,
+tartom
+tartom,
+tartomány
+tartott
+tartozik
+tartozik-egyenleg
+tartozás
+tartozásainak
+tartozások
+tartozásokat
+tartozásomat!
+tartozást
+tartozását
+tartozék
+tartozékok
+tartozékos
+tartozó
+tartozóság
+tarts
+tarts!
+tartsa
+tartsd
+tartva
+tartály
+tartályba
+tartályhajó
+tartálykocsi
+tartálymegtöltés
+tartályos
+tartálytöltés
+tartán
+tartármártás
+tartás
+tartása
+tartásdíj
+tartásdíjat
+tartásra
+tartását
+tartású
+tartó
+tartógerenda
+tartógyûrû
+tartók
+tartókeret
+tartókoszorú
+tartókészülék
+tartólemeze
+tartóléc
+tartóoszlop
+tartópillérei
+tartóra
+tartórúd
+tartós
+tartósan
+tartósnak
+tartósság
+tartóssági
+tartószerkezet
+tartósít
+tartósítatlan
+tartósított
+tartósítás
+tartózkodik
+tartózkodás
+tartózkodási
+tartózkodó
+tartózkodóan
+tartóztat
+tartóztatás
+taráta
+taréj
+taszigál
+taszigálj!
+taszigálás
+taszít
+taszítás
+taszító
+tat
+tata
+tataroz
+tatarozás
+tatfedélzet
+tatja
+tatján
+tatlámpa
+tatu
+tatár
+tautológia
+tautológiai
+tavacska
+tavaly
+tavalyi
+tavasz
+tavaszi
+tavirózsa
+taxi
+taxiba
+taxik
+taxin
+taxis
+taxisofõr
+taxit
+taxizik
+taxiállomás
+taxonómia
+taxonómikus
+taxonómus
+tbc-je
+te?
+tea
+teababa
+teadélután
+teaszárító
+teasütemény
+teavaj
+technicus
+technika
+technikai
+technikailag
+technikum
+technikus
+technokrata
+technokrácia
+technológia
+technológiai
+tedd
+tedd!
+tedd-ide-tedd-oda
+teddide-teddoda
+teendõ
+teendõ?
+teendõk
+teendõkbe
+tegez
+tegnap
+tegnapelõtt
+tegye
+tegyek
+tegyen
+tegyük
+tehenek
+teher
+teher-személy
+teherautó
+teherautó-sofõr
+teherautón
+teherbe
+teherben
+teherbírás
+teherbírású
+teherbíró
+teherelosztó
+teherforgalom
+tehergépkocsi
+tehergépkocsi-vezetõ
+teherhajó
+teherhordásra
+teherhordó
+teherkocsi
+teherkocsi-rakomány
+teherkocsin
+teherkocsis
+teherlap
+teherlift
+tehermentes
+tehermentesít
+tehermentesítés
+tehermentesítõ
+teherpályaudvar
+teherszállító
+tehertétel
+tehervagon
+tehervonat
+tehervonatba
+tehervonaton
+tehervonattal
+teheráru
+teheráru-forgalmú
+teheráruként
+teherárú
+tehessen
+tehet
+teheted
+tehetek
+tehetetlen
+tehetetlenné
+tehetetlenség
+tehetetlenségi
+tehetetlenül
+tehetség
+tehetsége
+tehetségek
+tehetséges
+tehetségesség
+tehetséget
+tehetségtelen
+tehetségét
+tehette
+tehettem
+tehetõ
+tehetõs
+tehát
+tehén
+tehénbõgés
+tehénbõr
+tehénhimlõ
+tehénistálló
+tehénlepény
+tehénpásztor
+tehéntejen
+tehéntúró
+tej
+tej-
+tejbe
+tejbetök
+tejcsarnok
+tejcsárda
+teje
+tejel
+tejes
+tejesember
+tejeshal
+tejeskanna
+tejeskocsi
+tejeskávé
+tejet
+tejfel
+tejfeldolgozó
+tejfelesszájú
+tejfogak
+tejföl
+tejföllel
+tejfölösszájú
+tejfölözõ
+tejgazdaság
+tejhordó
+tejivó
+tejjel-mézzel
+tejkaramella
+tejkeverék
+tejkihordó
+tejkrém
+tejleves
+tejosztó
+tejpor
+tejsav
+tejsodó
+tejszerû
+tejszín
+tejszínesedény
+tejszínhab
+tejszínszerû
+tejszínt
+tejtermék
+tejtestvér
+tejárus
+tejút
+tejútrendszer
+tejüveg
+tejüzem
+teke
+tekebábu
+tekegolyó
+tekejáték
+tekepálya
+teker
+tekercs
+tekercsel
+tekercselés
+tekercselõdob
+tekeredik
+tekeredés
+tekeredõ
+tekereg
+tekergõzik
+tekergõzés
+tekert
+tekerve
+tekervény
+tekervényes
+tekervényesen
+tekervényesség
+teketória
+teketóriázik
+teketóriázó
+tekint
+tekinteni
+tekintet
+tekintetbe
+tekintetben
+tekintetbevétel
+tekintete
+tekintetet
+tekintetre
+tekintett
+tekintettel
+tekintetében
+tekintetét
+tekintetével
+tekintetû
+tekinti
+tekintsd
+tekintve
+tekintve,
+tekintély
+tekintélye
+tekintélyelvû
+tekintélyes
+tekintélyesség
+tekintélyre
+tekintélyét
+teknõ
+teknõc
+teknõckeretes
+teknõfa
+teknõnyi
+teknõs
+teknõsbéka
+teknõsbéka-halászattal
+teknõsbékaleves
+teknõsbékapáncél
+teknõsbékára
+teknõszelvényû
+teknõszerûség
+teknõsödés
+tektonia
+tektonikai
+tektonikus
+tekézik
+tekézés
+tekézõ
+tele
+teleaggat
+teleaggatott
+telebeszéli
+teleeszi
+teleette
+telefon
+telefon-elõfizetési
+telefonbeszélgetés
+telefonbeszélgetést
+telefonbeszélgetését
+telefonfülke
+telefonhoz
+telefonhívás
+telefonkagyló
+telefonkezelõ
+telefonkönyv
+telefonközpont
+telefonközpontos
+telefonon
+telefonos
+telefont
+telefonvezetékkel
+telefonvonal
+telefonzsinór
+telefonál
+telefonüzenet
+telefotografikus
+telefotografálás
+telefotográfia
+telefotográfiai
+telefüstölt
+teleharsogja
+telehint
+telehintett
+teleivódott
+telek
+telekadósság
+telekkel
+telekkönyvezés
+telekkönyvi
+telekrész
+telel
+telelés
+telelõ
+teleméter
+teleobjektív
+teleológia
+teleológiai
+telep
+telepata
+telepatikus
+telepben
+telepe
+telepedett
+telepedik
+telepes
+telephely
+telephelyen
+teleptöltés
+telepátia
+telepít
+telepítés
+települ
+település
+teleragaszt
+telerak
+teleszkópos
+teleszkópszerûen
+teleszívja
+teleszór
+telet
+teletölt
+teletöltés
+teletöm
+teletömi
+teletömött
+teletûzdel
+teletûzdeli
+televízió
+televízión
+televíziós
+televíziót
+telex
+telexgép
+telezabálja
+telezsúfol
+telhetetlen
+telhetetlenül
+telhetõt
+teli
+telibe
+telihold
+telik
+telis-teli
+telitalp
+telitalálat
+telivér
+telje
+teljes
+teljesen
+teljeskörû
+teljesnek
+teljessé
+teljesség
+teljesít
+teljesítetlen
+teljesített
+teljesíthetetlen
+teljesíthetõ
+teljesíti
+teljesítmény
+teljesítményt
+teljesítményû
+teljesítés
+teljesítése
+teljesítési
+teljesítését
+teljesítõ
+teljesítõképességgel
+teljesül
+teljesülés
+teljhatalmú
+teljhatalom
+teljében
+telke
+tellett
+tellúr
+telt
+teltség
+teltté
+telve
+telér
+telérelvékonyodás
+telérvonulat
+telít
+telítetlen
+telített
+telítettség
+telítés
+telítõdik
+tematikus
+temet
+temetkezési
+temetés
+temetésen
+temetési
+temetõ
+temetõben
+temetõbogár
+temperamentum
+temperamentumos
+temperál
+templom
+templomból
+templombúcsú
+templomhajó
+templomi
+templomszentelés
+templomszolga
+templomtorony
+tempore
+tempó
+tempóban
+tempófokozás
+tempójelzés
+tempót
+temérdek
+tendencia
+tengely
+tengely-végcsap
+tengelybõl
+tengelycsap
+tengelycsapágy
+tengelycsonk
+tengelye
+tengelyek
+tengelyen
+tengelygyûrû
+tengelyhüvely
+tengelykapcsoló
+tengelykarima
+tengelykötés
+tengelyközéprész
+tengelynyak
+tengelynyomás
+tengelyszög
+tengelytok
+tengelytömlõ
+tengelyvastagodás
+tengelyvonal
+tengelyváll
+tengelyvég
+tengelyvég-csap
+tengelyébõl
+tengelyû
+tenger
+tengeralattjáró
+tengeralattjárós
+tengerbe
+tengerben
+tengerbiztos
+tengerbírás
+tengerbíró
+tengere
+tengerek
+tengereken
+tengereket
+tengeren
+tengerentúli
+tengerentúlról
+tengerfenék
+tengerfenéki
+tengerhajózási
+tengerhez
+tengeri
+tengeriangyal
+tengeribeteg
+tengeribetegség
+tengerig
+tengerimalac
+tengerjelzés
+tengerjárás
+tengerjáró
+tengerkutatás
+tengerkutatástan
+tengerkék
+tengermelléki
+tengermozgás
+tengernagy
+tengernagyi
+tengernyi
+tengerpart
+tengerparti
+tengerpartot
+tengerpartra
+tengerparttól
+tengerre
+tengerrész
+tengerrõl
+tengerszem
+tengerszint
+tengerszintre
+tengerszoros
+tengert
+tengervíz
+tengervízben
+tengerág
+tengerágy
+tengerálló
+tengerész
+tengerész-
+tengerészaltiszt
+tengerésze
+tengerészek
+tengerészet
+tengerészeti
+tengerészetnél
+tengerészgyalogos
+tengerészgyalogság
+tengerészhadapród
+tengerészhez
+tengerészkabát
+tengerészkadét
+tengerészkedik
+tengerészkék
+tengerészként
+tengerészköpeny
+tengerészközlegény
+tengerészközlegényként
+tengerészlegénység
+tengerészmunkadal
+tengerésznek
+tengerésznemzet
+tengerészpályán
+tengerészsapka
+tengerészszolgálatot
+tengerésztiszt
+tengerésztiszti
+tengerészzubbony
+tengerészzászlós
+tengerészzászlósi
+tengerészújonc
+tengeröböl
+tengeröv
+tengõdik
+tenisz
+teniszcipõ
+teniszezik
+teniszjátékos
+teniszlabda
+tenisznadrág
+teniszpálya
+teniszütõ
+tenne
+tenned
+tenned,
+tenni
+tenni?
+tennie
+tennivaló
+tennivalókba
+tennéd,
+tenor
+tenorista
+tenyeres
+tenyerében
+tenyerébõl
+tenyerét
+tenyerével
+tenyerû
+tenyér
+tenyérbe
+tenyérbõl
+tenyérhossz
+tenyérjós
+tenyérjóslás
+tenyérre
+tenyérrel
+tenyérszélesség
+tenyészcélokra
+tenyészet
+tenyészidõ
+tenyészik
+tenyészkanca
+tenyészkos
+tenyészt
+tenyésztés
+tenyésztési
+tenyésztõ
+tenyészállatok
+tenyészõ
+tenzió
+teológia
+teológiai
+teológus
+teoretikus
+teozófia
+teozófiai
+teozófus
+teper
+tepsi
+terapeutika
+terasz
+teraszos
+teratogén
+terc
+tercia
+tercier
+tere
+terebra-csiga
+terefere
+tereferél
+terei
+terel
+tereli
+terelõ
+terelõfal
+terelõgyûrû
+terelõlap
+terelõlapát
+terelõostor
+terelõpálya
+terelõsín
+terelõvonal
+terelõút
+terem
+terembiztos
+teremszolga
+teremt
+teremtett
+teremtette
+teremtette!
+teremtmény
+teremtve
+teremtés
+teremtésit!
+teremtõ
+teremtõje
+teremtõképesség
+teremõr
+terep
+terepakadály
+terepalakulat
+terepasztal
+terepdomborzat
+terepen
+terepet
+terepfelvétel
+terepjáró
+terepkiértékelés
+terepkutató
+terepmodell
+terepmunka
+tereppont
+tereprajz
+tereprendezés
+terepsportok
+terepszakasz
+terepszoros
+tereptárgy
+terepviszonyok
+teret
+terhe
+terhek
+terhekkel
+terhel
+terheli
+terhelt
+terhelés
+terhelési
+terhelését
+terhelõ
+terhes
+terhesen
+terhesség
+terhességet
+terhességi
+terhet
+terhén
+terhére
+terhét
+terhétõl
+teringette!
+teringettét!
+terjed
+terjedelem
+terjedelemben
+terjedelmes
+terjedelmesen
+terjedelmében
+terjedelmû
+terjedékeny
+terjedékenység
+terjedés
+terjedõ
+terjengõs
+terjengõsen
+terjengõssé
+terjengõsség
+terjeszkedik
+terjeszkedés
+terjeszkedési
+terjeszt
+terjesztett
+terjesztés
+terjesztõ
+terjesztõje
+termel
+termelni
+termelékeny
+termelékenység
+termelés
+termelési
+termelést
+termelõ
+termelõképesség
+termelõnél
+termelõszövetkezet
+termes
+termesz
+termeszt
+termesztési
+termesztésû
+termesztõ
+termet
+termetes
+termetére
+termetû
+termikus
+terminológia
+terminus
+terminál
+terminális
+termit
+termo-
+termodinamikai
+termoelem
+termonukleáris
+termosz
+termoszbelsõ
+termoszbetét
+termoszifon
+termosztatikus
+termosztát
+termék
+termékek
+termékennyé
+termékeny
+termékenyen
+termékenység
+termékenyítõ
+terméketlen
+terméketlenség
+termény
+terményadó
+termények
+termés
+termés)
+termésben
+terméseredmény
+termésfém
+terméshozam
+terméskõ
+terméskõburkolat
+terméskõfalazat
+terméskõvel
+termést
+természet
+természet-
+természetadta
+természetben
+természetbeni
+természetbõl
+természetbölcselõ
+természetbúvár
+természete
+természetellenes
+természetellenesen
+természetellenesség
+természetes
+természetesen
+természetesen!
+természetesnek
+természetesség
+természetfeletti
+természetfelettien
+természetfölötti
+természetfölöttiség
+természethû
+természeti
+természetjárás
+természetjáró
+természetleírás
+természetrajz
+természetrajza
+természetre
+természetszerû
+természetszerûleg
+természetszerûség
+természettan
+természettani
+természettanilag
+természettudomány
+természettudományok
+természettudományos
+természettudós
+természettõl
+természetvédelem
+természetvédelmi
+természetvédõ
+természeténél
+természetû
+termõ
+termõfelület
+termõföld
+termõképesség
+termõréteg
+termõtalaj
+termõtalajréteg
+termõterület
+termû
+terpeszkedik
+terpeszkedés
+terpeszkedõ
+terpesztávolság
+terpeszállás
+terpeszállásban
+terrakotta
+terrier
+territoriális
+territórium
+terror
+terrorista
+terrorizál
+terrorizálás
+terrorizáló
+terv
+tervbe
+tervbõl
+terve,
+terveimmel
+terveinek
+terveirõl
+terveit
+tervek?
+terveket
+tervel
+tervet
+tervez
+tervezet
+tervezetet
+tervezett
+tervezget
+tervezik,
+tervezés
+tervezésû
+tervezõ
+tervezõként
+tervgazdaság
+tervgazdálkodás
+tervrajz
+tervrajzot
+tervrõl
+tervszerû
+tervszerûen
+tervszerûtlen
+tervértekezlet
+tervérõl
+tervét
+tervünk
+terzina
+terápia
+terápiai
+terében
+terén
+terére
+terít
+terített
+teríték
+terítés
+terítõ
+terület
+területbér
+területcsapolás
+területe
+területek
+területemre
+területen
+területet
+területhatárok
+területi
+területmérték
+területre
+területén
+tesped
+tespedt
+tespedés
+tessék
+tessék!
+tessék-lássék
+tessék?
+test
+testalkat
+testalkatú
+testamentum
+testben
+testbõl
+teste
+teste-lelke
+testecske
+testedzés
+testedzõ
+testegyenészet
+testegyenészeti
+testek
+testeket
+testemen
+testes
+testesedik
+testesség
+testessége
+testestõl-lelkestõl
+testet
+testetlen
+testfordulat
+testgyakorlat
+testgyakorlás
+testhez
+testhezálló
+testi
+testileg
+testközépre
+testmozgás
+testnedv
+testnevelés
+testnevelési
+testrész
+testrésztõl
+testszag
+testszínû
+testszög
+testszövet
+testsúly
+testtartás
+testtartású
+testtel
+testtel!
+testtel-lélekkel
+testté
+testvér
+testvéreim
+testvérek
+testvérgyilkos
+testvéri
+testvéries
+testvériesség
+testvériség
+testál
+testápolás
+testápoló
+testében
+testén
+testének,
+testét
+testõr
+testõrség
+testõrök
+testû
+testület
+testületbõl
+testülete
+testületi
+testületileg
+testületté
+testüreg
+tesz
+tesz,
+tesz-vesz
+tesze-tosza
+teszi
+teszi!
+teszi,
+teszik
+tesznek
+teszt
+tesztelés
+tetanusz
+teteje
+teteje!
+tetejez
+tetejébe
+tetejében
+tetején
+tetejére
+tetejét?
+tetejû
+tetem
+tetemes
+tetemnézõ
+tetemvizsgálat
+teteti
+tetovál
+tetoválás
+tetováló
+tetraklorid
+tetraklóretil
+tetraklóretán
+tetraklórmetán
+tetraéderes
+tetszeleg
+tetszelgõ
+tetszenek
+tetszetõs
+tetszik
+tetszik!
+tetszik,
+tetszik?
+tetszés
+tetszése
+tetszésnyilvánítás
+tetszéssel
+tetszést
+tetszésére
+tetszését
+tetszõ
+tetszõen
+tetszõleges
+tett
+tett,
+tett?
+tettben
+tette
+tetted
+tettek
+tettekben
+tettem
+tettem,
+tetten
+tettenérés
+tetterõ
+tetterõs
+tettes
+tettesd
+tettestárs
+tettet
+tettetett
+tetteti
+tettetés
+tettetõ
+tettleg
+tettleges
+tettlegesség
+tettre
+tettvágyó
+tetves
+tetvetlenítés
+tetánia
+tetéz
+tetõ
+tetõablak
+tetõalátámasztás
+tetõcserép
+tetõfedõ
+tetõfok
+tetõfoka
+tetõgerenda
+tetõgerinc
+tetõhajlás
+tetõjáró
+tetõkert
+tetõkibúvó
+tetõn
+tetõpont
+tetõponthoz
+tetõpontjára
+tetõpontra
+tetõszerkezet
+tetõt
+tetõteret
+tetõtoldat
+tetõtér
+tetõtõl
+tetõvel
+tetõvilágítás
+tetõvilágító
+tetõz
+tetõzõ
+tetõél
+tetõív
+tetû
+tetûlégy
+teve
+tevékeny
+tevékenyen
+tevékenykedik
+tevékenység
+tevékenységi
+tevékenységre
+tevékenységében
+tevékenységének
+tevékenységét
+tevés
+tevõ
+texasi
+text
+textil
+textil-
+textilanyag
+textilgyár
+textilipari
+teás
+teáscsésze
+teáscsészényi
+teáskanna
+teáskészlet
+teát
+teát!
+teát?
+teázik
+teérted
+teória
+theriáka
+ti.
+tiara
+tied
+tigris
+tikfa
+tikfa-
+tikfából
+tikkad
+tikkadtság
+tikkadás
+tikkasztó
+tikszem
+tiktak
+tikász
+tilalmas
+tilalom
+tilalommal
+tilde
+tilinkózik
+tilolt
+tiloló
+tilos
+tilos!
+tilosban
+tilosra
+tilt
+tiltakozik
+tiltakozva
+tiltakozás
+tiltakozó
+tiltott
+tiltás
+tiltó
+tiltótábla
+timföld
+timpanon
+timsó
+timsófõzõ
+timsófürdõ
+timsógyár
+timsógyáros
+timsóoldat
+timsórudacska
+timsós
+timsóval
+timsóz
+tincs
+tini
+tinktúra
+tinta
+tintaceruza
+tintafekete
+tintafolt
+tintafoltos
+tintahal
+tintatartó
+tintás
+tintát,
+tintával
+tinédzser
+tipeg
+tipeg-topog
+tipegés
+tipegõ
+tipegõkõ
+tipikus
+tipizál
+tipizálás
+tiplizés
+tipográfia
+tipológia
+tipor
+tipp
+tipp-topp
+tippadás
+tippeket
+tippet
+tippje
+tirannus
+tiroli
+tiráda
+tiszafa
+tiszavirág
+tiszt
+tiszta
+tisztafajú
+tisztalelkû
+tisztaság
+tisztasága
+tisztaságú
+tisztatûz
+tisztavérû
+tisztecske
+tisztek
+tisztekkel
+tisztel
+tiszteleg
+tisztelendõ
+tisztelet
+tisztelet-
+tiszteletadás
+tiszteletbeli
+tiszteletben
+tiszteletbõl
+tiszteletdíj
+tiszteletdíjban
+tiszteletet
+tiszteleti
+tiszteletlen
+tiszteletlenség
+tiszteletpéldány
+tiszteletre
+tiszteletreméltó
+tiszteletreméltóság
+tisztelettel
+tiszteletteljes
+tiszteletteljesen
+tisztelettudás
+tisztelettudó
+tiszteletére
+tiszteletét
+tisztelgés
+tisztelik
+tisztelt
+tisztelés
+tisztelõ
+tisztes
+tisztesség
+tisztességes
+tisztességes!
+tisztességesen
+tisztességesség
+tisztességgel
+tisztességtelen
+tisztességtelenség
+tisztességtelenül
+tisztességtudás
+tisztességtudó
+tisztességtudóan
+tiszthelyettes
+tiszti
+tisztikar
+tisztiorvos
+tisztiszolga
+tisztje
+tisztjelölt
+tisztképzõ
+tisztogat
+tisztogatás
+tisztogató
+tisztség
+tisztsége
+tisztségviselõ
+tisztségérõl
+tiszttartó
+tisztul
+tisztviselõ
+tisztviselõje
+tisztviselõnõ
+tisztába
+tisztában
+tisztán
+tisztánlátás
+tisztánlátással
+tisztánlátó
+tisztántartás
+tisztára
+tisztás
+tisztátalan
+tisztátalanság
+tisztátlan
+tisztátlanság
+tisztáz
+tisztázat
+tisztázatlan
+tisztázva
+tisztázza
+tisztázása
+tisztázódnak
+tisztít
+tisztítatlan
+tisztított
+tisztítsad
+tisztítás
+tisztítása
+tisztító
+tisztítórongy
+tisztítószer
+tisztítószerek
+tisztítótûz
+tisztítóvesszõ-tartó
+tisztítóüzem
+titkai
+titkolja
+titkolt
+titkoló
+titkolózás
+titkolózó
+titkom!
+titkon
+titkos
+titkosan
+titkosrendõr
+titkosság
+titkosírás
+titkosírással
+titkot
+titkár
+titkára
+titkárhoz
+titkári
+titkárként
+titkárnõ
+titkárnõk
+titkárság
+titkársága
+titkát
+titok
+titokba
+titokban
+titoktartás
+titoktartó
+titokzatos
+titokzatosan
+titokzatoskodó
+titokzatossá
+titokzatosság
+titrimetria
+titrálás
+titán
+tivoli
+tivornya
+tivornyázik
+tivornyázás
+tivornyázó
+tized
+tizedel
+tizedelés
+tizedes
+tizedespont
+tizedest
+tizedik
+tizedrész
+tizenegy
+tizenegyben
+tizenegyes
+tizenhat
+tizenhatod
+tizenhetedik
+tizenhárom
+tizenhét
+tizenkettes
+tizenkettõ
+tizenkilenc
+tizenkilenc,
+tizenkét
+tizenkétszemélyes
+tizennyolc
+tizennyolcadik
+tizennégy
+tizenéves
+tizenöt
+tizenötödik
+tizes
+tizian-vörös
+tiéd
+tiéid
+toalett
+toalettasztal
+toalettszõnyeg
+tobogán
+tobogánozik
+tobogánozó
+tobogánpálya
+toboroz
+toborzás
+toborzó
+toboz
+tobozos
+toboztermõ
+tobzoska
+tobzódik
+tobzódás
+tocsakos
+tocsog
+tocsogás
+tocsogó
+tojik
+tojva
+tojás
+tojásalak
+tojásba
+tojásbrikett
+tojásdad
+tojásfehérje
+tojáshab
+tojáshabbal
+tojáskrém
+tojáslepény
+tojásléc
+tojások
+tojásokat
+tojásokon
+tojáspor
+tojásrakó
+tojásrántotta
+tojásról
+tojással
+tojásszeletelõ
+tojássárgája
+tojást
+tojástartó
+tojó
+tojófészek-sorozat
+tojóláda
+tok
+toka
+tokba
+tokban
+tokja!
+tokjába
+tokmány
+tokos
+tokozás
+tokány
+tokás
+tol
+tolakodik
+tolakodás
+tolakodásnak,
+tolakodó
+tolakodóan
+tolakszik
+tolat
+tolattyú
+tolattyúnyílás
+tolatás
+tolatásvezetõ
+tolató
+tolatómester
+tolatómozdony
+tolatóvágány
+told
+toldalék
+toldaléka
+toldalékként
+toldalékot
+toldaléktetõ
+toldaléképület
+toldat
+toldja
+toldoz
+toldozott-foldozott
+toldás
+tolerancia
+toleranciák
+toleráns
+tolható
+tolja
+tolják
+toll
+tolla
+tollacska
+tollad!
+tollak
+tollakat
+tollakkal
+tollal
+tollas
+tollaslabda
+tollasodik
+tollat
+tollatlan
+tollazat
+tollba
+tollbamondás
+tollban
+tollbokréta
+tollbóbita
+tolldísz
+tolldíszes
+tollforgó
+tollhegy
+tollrajz
+tollrost
+tollszerû
+tollszár
+tolltartó
+tollvonás
+tollából
+tollászkodik
+tollát
+tollú
+tolmácsként
+tolmácsol
+tolmácsolás
+tolmácsoló
+tolni!
+tologat
+tologatós
+tolong
+tolongás
+tolultak
+toluol
+tolvaj
+tolvajkodik
+tolvajkodó
+tolvajlámpa
+tolvajlás
+tolvajlási
+tolvajnyelv
+tolvajt
+tolás
+toló
+tolóablak
+tolóablak-ellensúly
+tolóajtó
+tolócsõ
+tolódás
+tológyûrû
+tolóka
+tolókapa
+tolólétra
+tolómérce
+tolópad
+tolórúd
+tolósugár-hajtómû
+tolószék
+tolósúly
+tolózár
+tombak
+tombol
+tombola
+tombola-kártyajáték
+tombolafajta
+tombolva
+tombolás
+tombolával
+tomboló
+tompa
+tompaeszû
+tompaszög
+tompaság
+tompor
+tompul
+tompult
+tompultság
+tompán
+tompává
+tompít
+tompított
+tompító
+tonhal
+tonik
+tonika
+tonna
+tonnatartalom
+tonnánkénti
+tonzúrás
+topis
+toplák
+topog
+topográfia
+topográfiai
+topográfus
+topogás
+toporog
+toporzékol
+toporzékolás
+toprongyos
+topáz
+tor
+torka
+torkig
+torkolat
+torkolati
+torkolattûz
+torkolatzár
+torkollik
+torkon
+torkos
+torkosborz
+torkosság
+torkot
+torkretozás
+torkrétoz
+torkában
+torkán
+torkára
+torkát
+torkú
+torlasz
+torlaszoló
+torlaszt
+torló
+torlódás
+torlógyûrû
+torlószelep
+torma
+torna
+torna-
+tornacipõ
+tornacsarnok
+tornaculum
+tornanadrág
+tornaterem
+tornatermi
+tornya
+tornyocska
+tornyosul
+tornác
+tornáca
+tornádó
+tornász
+tornászik
+tornázik
+torok
+torok-
+torokból
+torokfájás
+torokgyulladás
+torokgyík
+torokgáz-elvezetõ
+torokhang
+torokhangon
+torokhangú
+torokmandula
+torokreszelés
+toroköblítõ
+torolt
+torony
+toronycsúcs
+toronyház
+toronysisak
+toronyugrás
+toronyállványozó
+toronyóra
+toronyõr
+torpedó
+torpedó-védõháló
+torpedókamra
+torpedókilövõ
+torpedónaszád
+torpedónaszádon
+torpedóraktár
+torpedóromboló
+torpedót
+torpedóvetõ
+torta
+torz
+torzalak
+torzalakúság
+torziós
+torzkép
+torzképrajzoló
+torzonborz
+torzrajzoló
+torzszülés
+torzszülött
+torzult
+torzulás
+torzít
+torzítatlan
+torzítás
+torzó
+toszakodás
+toszik
+toszogat
+totalitárius
+totalizatõr
+totemoszlop
+totojázik
+totojázó
+tottyanás
+totyog
+totyogás
+totyogó
+totális
+totálkáros
+totálrészeg
+totó
+tovacsoszog
+tovahajt
+tovaröppenõ
+tovasiklás
+tovasuhan
+tovaszáguld
+tovaterjed
+tovatûnés
+tovatûnõ
+tovább
+tovább!
+tovább,
+továbbad
+továbbadja
+továbbgurul
+továbbhajt
+továbbhalad
+továbbhömpölyög
+további
+továbbiakban
+továbbiakra
+továbbjut
+továbbjutás
+továbbmegy
+továbbmenjünk
+továbbmenni!
+továbbmenve
+továbbmond
+továbbsiet
+továbbvisz
+továbbá
+továbbálljunk
+továbbélés
+továbbít
+továbbítható
+továbbított
+továbbítás
+toxikus
+trafó
+tragacs
+tragikum
+tragikus
+tragikusan
+tragédia
+tragédiaíró
+tragédiában
+tragédiával
+trakta
+traktor
+traktoros
+traktorra
+traktátus
+tralala
+trambulin
+transz
+transzcendencia
+transzcendens
+transzcendentális
+transzform
+transzformáció
+transzformációs
+transzformál
+transzformálás
+transzformátor
+transzformátorolaj
+transzfúzió
+transzlációs
+transzparens
+transzponál
+transzponálás
+transzponáló
+transzverzális
+tranzakció
+tranzisztor
+tranzisztorizál
+tranzisztoros
+tranzit
+tranzit-
+tranzitivitás
+trapéz
+trapéznadrág
+trauma
+traumaticin
+traumatizmus
+traumatológia
+traumás
+traverz
+travesztia
+treff
+trehány
+tremens
+tremense
+tremoló
+tremolózik
+tremolózó
+trend
+treníroz
+trenírozás
+triangulum
+tribün
+triceps
+tricikli
+triglif
+trigonometria
+triklóretilén
+triktrak
+trikó
+trikó-szövet
+trikókötés
+trikóruha
+trilla
+trilláz
+trillázik
+trillázás
+trillázó
+trimetilén
+trimmelése
+trimmlap
+trinitro-fenol
+triola
+triplett
+triplán
+tripper
+triptik
+triumvir
+triumvirátus
+trivialitások
+trió
+trofitásfok
+trojka
+trombita
+trombitahang
+trombitaharsogás
+trombitajelt
+trombitarecsegés
+trombitaszó
+trombitaszóval
+trombitál
+trombitás
+trombitát
+tromf
+tropa
+tropikus
+tropinsav
+tropára
+trotli
+trubadúr
+trubadúr-
+trubadúr-divat
+trupp
+trutyi
+trutyis
+trutymó
+trágya
+trágyadomb
+trágyalé
+trágyalé-kanál
+trágyaszórás
+trágyás
+trágyát
+trágyával
+trágyáz
+trágyázás
+trágár
+trágárság
+tré
+trébel
+trébelt
+trébelés
+trécsel
+tréfa
+tréfacsináló
+tréfli
+tréfából
+tréfából!
+tréfákat
+tréfákkal
+tréfál
+tréfálkozik
+tréfálkozás
+tréfálkozással
+tréfálkozó
+tréfán
+tréfának
+tréfás
+tréfásan
+tréfát
+tréfával
+trén
+tréning
+tréningben
+tréningruha
+trófea
+tróger
+trójai
+trón
+trónbeszéd
+trónján
+trónkövetelõ
+trónol
+trónolás
+trónra
+trónt
+trónörökös
+trópusi
+trópusok
+tröszt
+trükk
+trükkel
+trükknek
+trükkös
+tsa.
+tsz
+tuberkulózis
+tubicám
+tubus
+tubák
+tubákol
+tucat
+tucatszám
+tucatszámra
+tucatáru
+tud
+tudakozó
+tudakozódik
+tudakozódás
+tudat
+tudata
+tudatalatti
+tudathasadás
+tudathasadásos
+tudatküszöb
+tudatlan
+tudatlanság
+tudatlanságban
+tudatlanságból
+tudatlanságot
+tudatlanságára
+tudatlanságát
+tudatlant
+tudatlanul
+tudatos
+tudatosan
+tudatosság
+tudattalan
+tudatában
+tudatára
+tudja
+tudja,
+tudja?
+tudna
+tudnak
+tudni
+tudniillik
+tudnád
+tudnál
+tudod
+tudok
+tudom
+tudom,
+tudomány
+tudománya
+tudományok
+tudományos
+tudományosan
+tudományszomjas
+tudománytalan
+tudományág
+tudományú
+tudomás
+tudomása
+tudomása,
+tudomásból
+tudomásom
+tudomásomra
+tudomással
+tudomást
+tudomásul
+tudomására
+tudott
+tudsz
+tudsz!
+tudta
+tudtak
+tudtam
+tudtommal
+tudtul
+tudtán
+tudtával
+tudva
+tudálékos
+tudálékosság
+tudás
+tudása
+tudásra
+tudásról
+tudással
+tudásszomj
+tudást
+tudásvágy
+tudását
+tudásával
+tudású
+tudó
+tudós
+tudós,
+tudóscsábítás
+tudósnak
+tudósít
+tudósítás
+tudósítást
+tudósító
+tudósítója
+tufa
+tulaj
+tulajdon
+tulajdon-átruházás
+tulajdon-átruházási
+tulajdona
+tulajdonba
+tulajdonban
+tulajdonjog
+tulajdonjogát
+tulajdonképpen
+tulajdonképpen?
+tulajdonképpeni
+tulajdonnév
+tulajdonnévbõl
+tulajdonos
+tulajdonosa
+tulajdonosi
+tulajdonost
+tulajdonostárs
+tulajdonság
+tulajdonsága
+tulajdonságok
+tulajdonul
+tulajdonát
+tulajdonít
+tulajdonítható
+tulajdonítja
+tulajdonítás
+tulipán
+tulipánfa
+tumbler-kapcsoló
+tumbler-szárítógép
+tumor
+tumultus
+tundra
+tunika
+tunkol
+tunya
+tunyaság
+tunyán
+tupfer
+turbina
+turbinatárcsa
+turbulencia
+turbulens
+turbán
+turbékol
+turbékolás
+turbógenerátor
+turbólégcsavaros
+turcsi
+turf
+turfa
+turha
+turista
+turista-felszerelés
+turistajelzés
+turistaosztály
+turistáskodik
+turistáskodás
+turisztika
+turizmus
+turkál
+turkálás
+turkálós
+turmalin
+turmalinizáció
+turmix
+turmixgép
+turnus
+turné
+turnézik
+turnûr
+turpisságnak
+turzófúró
+tus
+tusa
+tusakodik
+tusanyak
+tuskihúzó
+tuskó
+tuskóbak
+tuskóláb
+tusol
+tusolás
+tusrajz
+tusrajzot
+tussal
+tusszakselyem
+tutaj
+tutajon
+tutajos
+tutajoz
+tuti
+tutul
+tutyi
+tutyi-mutyi
+tv-szerelõ
+tv-torony
+tweed
+tweed-öltöny
+tyuhaj!
+tyúk
+tyúkesze
+tyúkeszû
+tyúkhúr
+tyúkketrec
+tyúknak
+tyúknál
+tyúkokkal
+tyúkot
+tyúkszem
+tyúkszemes
+tyúkszemgyûrû
+tyúkszemirtó
+tyúkszemtapasz
+tyúkól
+tyûh!
+tyûha!
+tábla
+táblakép
+táblalemezolló
+táblaprés
+táblatörlõ
+táblavidék
+táblaüveg
+táblája
+táblákra
+táblára
+táblás
+táblát
+tábláz
+táblázat
+táblázatba
+táblázatok
+táblázatos
+táblázatot
+tábor
+táborhely
+tábori
+tábornagy
+táboroz
+táborozik
+táborozás
+táborozó
+táborrend
+tábort
+tábortûz
+táborütés
+tág
+tágabb
+tágan
+tágas
+tágasság
+tágra
+tágul
+tágulat
+tágulás
+tágulásszabályozó
+tágulékony
+tágulékonyság
+táguló
+tágít
+tágított
+tágítás
+tágító
+táj
+tájat
+tájba
+tájban
+tájfun
+tájfutás
+tájfutó
+tájjellegû
+tájkép
+tájnyelvi
+tájol
+tájolat
+tájolatot
+tájolva
+tájoló
+tájon
+tájra
+tájról
+tájszólás
+tájszólási
+tájt
+tájunkon
+táján
+tájék
+tájéka
+tájékozatlan
+tájékozott
+tájékoztass
+tájékoztat
+tájékoztatva
+tájékoztatás
+tájékoztatást
+tájékoztatására
+tájékoztató
+tájékozódik
+tájékozódni
+tájékozódás
+tájékozódása
+tájékozódásban
+tájékozódási
+tájékozódó
+tákolmány
+tál
+tálal
+tálalás
+tálaló
+tálalóasztal
+tálat
+tálból
+tálca
+tálon
+tályog
+tályogot
+tám
+tám-
+támad
+támad,
+támadható
+támadja
+támadnak
+támadt
+támadás
+támadása
+támadásba
+támadási
+támadások
+támadásra
+támadást
+támadó
+támadóeszközök
+támadóhullám
+támadójátékos
+támadójátékosok
+támadólag
+támasz
+támasza
+támaszfeszítõ
+támaszkodik
+támaszkodni
+támaszkodás
+támaszkodó
+támaszkör
+támaszköz
+támaszpillér
+támaszpont
+támaszpontú
+támaszrésze
+támaszt
+támasztja
+támasztott
+támasztás
+támaszték
+támasztékkal
+támasztó
+támasztóbak
+támasztófal
+támasztógerenda
+támasztógyûrû
+támasztólappal
+támasztólemez
+támasztóláb
+támasztómû
+támasztóoszlop
+támasztórúd
+támasztóék
+támfa
+támfal
+támfelület
+támkar
+támla
+támlájú
+támlás
+támlátlan
+támogat
+támogatja
+támogatva
+támogatás
+támogatást
+támogatására
+támogatásával
+támogató
+támogatóan
+támogatók
+támolygás
+támolygásmérõ
+támolygó
+támolygókorong
+támolygótárcsa
+támolyog
+támolyogva
+támoszlop
+támpillér
+támpillérrel
+támpont
+támvas
+támív
+tánc
+tánc-
+táncfajta
+táncfordulat
+táncjáték
+tánckar
+táncmulatság
+táncmulatságra
+táncol
+táncolni
+táncolt
+táncoltat
+táncolás
+táncoló
+táncos
+táncosnõ
+táncosnõnek
+táncot
+táncpartner
+táncra
+táncverseny
+tánczenekar
+tántorgat
+tántorgás
+tántorgó
+tántorog
+tántorogva
+tántoríthatatlan
+tányér
+tányéralátét
+tányérkarika
+tányérnyaló
+tányérok
+tányéroz
+tányérrögzítõ
+táp
+tápanyagban
+tápcsatorna
+tápegység
+táplál
+táplálatlan
+táplálja
+táplálkozik
+táplálkozás
+táplálkozási
+táplálkozástudomány
+táplálkozástudós
+táplálkozók
+táplált
+tápláltság
+táplálás
+táplálék
+tápláléka
+tápláló
+tápot
+tápszer
+táptalaj
+tápvezeték
+tápérték
+tár
+tárca
+tárcarovat
+tárcsa
+tárcsaív
+tárcsás
+tárcsáz
+tárgy
+tárgya
+tárgyak
+tárgyal
+tárgyalja
+tárgyalják
+tárgyalt
+tárgyalás
+tárgyalása
+tárgyalások
+tárgyalásokba
+tárgyaláson
+tárgyalásra
+tárgyalásról
+tárgyalóképesség
+tárgyalóterem
+tárgyas
+tárgyat
+tárgyba
+tárgyeset
+tárgyhoz
+tárgyi
+tárgyiasít
+tárgyilagos
+tárgyilagosan
+tárgyilagosság
+tárgykör
+tárgykörben
+tárgykörbõl
+tárgykört
+tárgykörébe
+tárgylemez
+tárgymutató
+tárgymutatót
+tárgymutatóval
+tárgyon
+tárgypontok
+tárgyra
+tárgyra!
+tárgyról
+tárgyszó
+tárgytalan
+tárgytalan!
+tárgytalanná
+tárgytól
+tárgyát
+tárgyául
+tárgyává
+tárház
+tárháza
+tárlat
+tárló
+tárna
+tárnalejárat
+tárnát
+tárol
+tárolt
+tárolás
+tárolási
+tárolására
+tároló
+tárolóhely
+tározó
+társ
+társ-
+társa
+társadalmasít
+társadalmasítás
+társadalmi
+társadalmilag
+társadalom
+társadalombiztosítás
+társadalomtudomány
+társadalomtörténet
+társait
+társaitól
+társalapító
+társalgás
+társalgási
+társalgást
+társalgó
+társalkodónõ
+társalog
+társas
+társasjáték
+társasjátékféle
+társaskocsi
+társaskör
+társasutazás
+társaság
+társasága
+társaságba
+társaságban
+társaságból
+társasági
+társaságkedvelõ
+társaságot
+társaságtól
+társaságunk
+társbérlõ
+társbíró
+társrégens
+társszerzõ
+társtalan
+társtulajdonos
+társul
+társulat
+társulás
+társuralkodás
+társít
+társítás
+társügyvéd
+tárt
+tárul
+tárva-nyitva
+táró
+táska
+táskagramofon
+táskány
+tátja
+tátog
+tátong
+tátongó
+tátott
+táv
+távbeszélés
+távbeszélõ
+távbeszélõ-vezeték
+távbeszélõközpont
+távbeszélõnévsor
+távbeszélõrendszer
+távbeszélõvonal
+távcsõ
+távcélpont
+távfelvétel
+távfelvételi
+távfénykép
+távfénykép-
+távfényképezés
+távfényképezési
+távgépíró
+távgépíró-kocsi
+távházasság
+távirat
+távirati
+táviratkézbesítõ
+táviratoz
+táviratozik
+táviratozás
+távirdász
+távirányított
+távirányítás
+távirányítással
+távirányítású
+távirányító
+távjelzõ
+távkapcsolású
+távköztartó
+távlat
+távlati
+távlatpont
+távlatából
+távmérés
+távmérési
+távmérõ
+távmérõs
+távol
+távol-
+távolabb
+távolabbi
+távolba
+távolbalátás
+távolbalátó
+távolban
+távolbaérzés
+távolfekvõ
+távoli
+távoliság
+távollátó
+távolléti
+távollétében
+távollétével
+távollévõ
+távolmaradás
+távolmaradása
+távolmaradó
+távolodó
+távolról
+távolság
+távolsága
+távolságban
+távolságbecslés
+távolsági
+távolságmérés
+távolságmérési
+távolságmérõ
+távolságokra
+távolságot
+távolságra
+távolságtartó
+távolugrás
+távolálló
+távon
+távozik
+távozni
+távozott
+távozás
+távozása
+távozási
+távozáskor
+távozásomat
+távozásra
+távozást
+távozó
+távra
+távrecsegõ
+távtartó
+távvezeték
+távvezérelt
+távírda
+távírás
+távírász
+távíró
+távíró-adókészülék
+távírógép
+távíróhivatal
+távírókezelõ
+távírókészülék
+távírón
+távíróoszlop
+távírószalag
+távú
+téboly
+tébolyda
+tébolyodott
+tébolyodottan
+tébolyodottság
+tébolyult
+tébécé
+téged
+téged?
+tégely
+tégla
+tégladarab
+téglafal
+téglahordó
+téglalap
+téglasor
+téglaszínû
+téglatörmelék
+téglaépítménye
+téglástrogli
+téglával
+tégy
+tékozlás
+tékozlásra
+tékozló
+tékozlóan
+tékozol
+tél
+télben
+télen
+télen-nyáron
+téli
+télidõ
+télies
+télikabát
+télikert
+télire
+télizöld
+télközép
+télre
+télvíz
+téma
+témavezetõ
+témában
+témákat
+témán
+témára
+témáról
+témát
+témától
+témával
+ténfereg
+tény
+tényei
+tények
+tényeken
+tényeket
+tényekhez
+tényekkel
+tényekre
+tényezõ
+tényezõje
+tényezõkre
+ténykedik
+ténykedés
+ténykérdés
+ténykörülmény
+tényleg
+tényleg?
+tényleges
+ténylegesen
+ténylegesség
+ténymegállapítás
+ténynél
+tényre
+tényt
+tényálladék
+tényállás
+tényállásból
+tényállást
+tép
+tépdes
+tépelõdik
+tépelõdve
+tépelõdés
+tépelõdõ
+tépett
+tépi
+tépik
+tépés
+tépõ
+tépõfarkas
+tépõfog
+tépõgép
+tépõzár
+tér
+tér-
+térbeli
+térbelileg
+térbeosztás
+térd
+térddel
+térde
+térdel
+térden
+térdhajlítással
+térdharisnya
+térdig
+térdizület
+térdkalács
+térdkalácson
+térdnadrág
+térdpárna
+térdre
+térdreflex
+térdszalagrend
+térdvédõ
+térdzokni
+térdéig
+térdén
+térdínt
+térdízület
+térek
+térelõnybe
+térerõsség
+téres
+térfogat
+térfogat-
+térfogat-elemzési
+térfogati
+térfogatmérték
+térfogatmérési
+térfogatmérõ
+térfogatnövelés
+térfogatos
+térhanghatású
+térhatás
+térhatású
+téridom
+térjen
+térkitöltõ
+térkép
+térképbe
+térképen
+térképet
+térképez
+térképezetlen
+térképezés
+térképfüzet
+térképgyûjtemény
+térképhálózat
+térképre
+térképész
+térképészet
+térképészeti
+térköz
+térközbiztosítás
+térközállító
+térközökkel
+térmértan
+térnyerés
+térszerkezet
+térszín
+térség
+tért
+térzene
+térzõ
+térés
+térít
+térítené
+téríthetõ
+térítés
+térítõ
+térítõi
+térõ
+tészta
+tésztaféle
+tésztaszerû
+tésztában
+tésztás
+tésztát
+tét
+tétben
+tétekben
+tétel
+tételben
+tételbõl
+tétele
+tételek
+tételekben
+tételeket!
+tételekre
+tételenkénti
+tételezzük
+tételt
+tétet
+tétetik,
+tétlen
+tétlenkedik
+tétlenség
+tétlenül
+tétova
+tétovaság
+tétován
+tétovázik
+tétovázás
+tétovázó
+téve
+téve!
+téved
+tévedek
+tévedhetetlen
+tévedhetetlenség
+tévedhetetlenül
+tévedni
+tévedsz
+tévedés
+tévedésbõl
+tévedésen
+tévedését
+tévedõ
+tévelyeg
+tévelygés
+tévelygõ
+téves
+tévesen
+téveszme
+téveszt
+tévesztett
+tévhit
+tévhitû
+tévhitûség
+tévtan
+tévében
+tévékép
+tévét
+tévútra
+tífusz
+tímár
+tímártõke
+típus
+típus-
+típusbútor
+típusruha
+típust
+típusáru
+típusú
+tíz
+tíz-tíz
+tízcentes
+tízen
+tízes
+tízezer
+tízig
+tízparancsolat
+tízpennys
+tízperc
+tízre
+tízszeres
+tízéves
+tízórai
+tóba
+tócsa
+tódul
+tódult
+tódultak
+tóga
+tónus
+tónusban
+tópart
+tóparti
+tószt
+tót
+tótbab
+tótumfaktum
+tõcsavar
+tõgy
+tõgyét
+tõhajtás
+tõhajtásokat
+tõke
+tõkeberuházás
+tõkecsoport
+tõkeexport
+tõkefelesleg
+tõkefelhalmozás
+tõkehal
+tõkejavak
+tõkekoncentráció
+tõkerész
+tõkeszámla
+tõkesúly
+tõketartalék
+tõkeérték
+tõkés
+tõkéstárs
+tõkésít
+tõkésítés
+tõkét
+tõle
+tõled
+tõled,
+tõlem
+tõlem,
+tõperec
+tõr
+tõrbe
+tõrrel
+tõrvetései
+tõrõlmetszett
+tõrösbot
+tõröz
+tõrözés
+tõszám
+tõszó
+tõzeg
+tõzeges
+tõzegláp
+tõzegtelep
+tõzegtégla
+tõzegáfonya
+tõzsde
+tõzsdei
+tõzsdeképes
+tõzsdepalota
+tõzsdespekuláns
+tõzsdeügynök
+tõzsdén
+tõzsdés
+tõzsdések
+tõzsdézés
+tõzsdézõ
+több
+több,
+többcsonkos
+többe
+többedmagatokkal
+többek
+többeknek
+többem
+többemeletes
+többen
+többes
+többesélyes
+többet
+többet!
+többfokozatú
+többféle
+többféleképpen
+többhasábos
+többi
+többiek
+többieket
+többinél
+többje
+többlet
+többlet-
+többletei
+többletkiadás
+többletterhelés
+többletív
+többnapos
+többpengés
+többperiódusú
+többre
+többrétegû
+többsoros
+többször
+többszörös
+többszörösen
+többsávos
+többség
+többségében
+többtag
+többtagú
+többtokos
+többtámaszú
+többé
+többé!
+többé-kevésbé
+töfög
+tök
+töketlenkedés
+töketlenség
+tökfedõ
+tökfej
+tökfejû
+tökfilkó
+tökfélék
+tökkelütött
+tökkopasz
+töklámpás
+tökmag
+tökrészeg
+tökéleten
+tökéletes
+tökéletes!
+tökéletesen
+tökéletesen!
+tökéletessé
+tökéletesség
+tökéletesít
+tökéletesíthetõ
+tökéletesítés
+tökéletlen
+tökéletlenség
+tökély
+tököl
+tökölõdik
+tökös
+tölcsér
+tölcsérrel
+tölcsérszerûen
+tölcsért
+tölcsértorkolat
+tölgy
+tölgy-
+tölgybõl
+tölgyek
+tölgyfa
+tölgyfa-
+tölgyfagubacs
+tölgyfából
+tölt
+töltelék
+töltelékanyag
+töltelékként
+töltelékszó
+tölteni
+töltet
+töltetenként
+tölti
+töltik
+töltény
+töltényheveder
+töltényhüvely
+tölténykarima
+tölténykeret
+tölténykivetõ
+töltényszalag
+tölténytár
+töltényûr
+töltés
+töltéskapcsoló
+töltéspadka
+töltéssel
+töltésszabályozó
+töltésút
+töltésû
+töltõ
+töltõanyag
+töltõkezelõ
+töltõmedence
+töltõnyak
+töltõnyílás
+töltõpisztoly
+töltõrúd
+töltõtoll
+töltõvesszõ
+töltõállomás
+töltõáram
+töltögetõ
+töltött
+töltötte
+töm
+tömb
+tömedék
+tömedékelõ
+tömedékvájár
+tömeg
+tömegbe
+tömegben
+tömegei
+tömegek
+tömegen
+tömeges
+tömegesen
+tömegestõl
+tömeget
+tömeggyilkos
+tömeggyártás
+tömeggyártási
+tömeggyûlés
+tömeghipnózis
+tömegkommunikációs
+tömegközlekedés
+tömegközlekedési
+tömegmészárlás
+tömegnyomor
+tömegpszichózis
+tömegszórakoztató
+tömegtermelés
+tömegtájékoztatási
+tömegverekedés
+tömi
+tömjén
+tömjénez
+tömjénezés
+tömjénezõ
+tömlõ
+tömlõfoltozó
+tömlõsbelû
+tömlõvel
+tömlõzés
+tömlöc
+tömpe
+tömve
+tömzsi
+töméntelen
+töméntelenül
+tömény
+töménységi
+tömérdek
+tömés
+tömít
+tömítetlen
+tömítetlenség
+tömítés
+tömítõ
+tömítõ-elem
+tömítõanyag
+tömítõbõr
+tömítõcement
+tömítõelem
+tömítõfilc
+tömítõgyûrû
+tömítõlemez
+tömítõnemez
+tömítõszer
+tömõanyag
+tömõrúd
+tömöntvény
+tömöntvényrõl
+tömöntés
+tömöntési
+tömöntést
+tömöntésû
+tömöntõ
+tömöntõlemezek
+tömöntõpapír
+tömöntöde
+tömöntött
+tömör
+tömören
+tömörség
+tömörít
+tömörített
+tömörítés
+tömörítõ
+tömörödik
+tömörödött
+tömörül
+tömött
+tömöttség
+tönk
+tönkre
+tönkreeszik
+tönkrejutott
+tönkrejutás
+tönkremegy
+tönkremenetele
+tönkremenni
+tönkrement
+tönkrementek
+tönkrementél
+tönkremenés
+tönkremenést
+tönkretenne
+tönkretesz
+tönkreteszi
+tönkretett
+tönkretevés
+tönkretétel
+tönkrever
+tönkreveri
+tönkrevert
+tönkrezúz
+tönkrezúzás
+tönkökkel
+töpreng
+töprengve
+töprengés
+töprengõ
+töpörödik
+töpörödött
+tör
+tördel
+tördelt
+tördelés
+tördelõ
+töredelem
+töredelmesen
+töredezett
+töredezés
+töredék
+töredékcsoport
+töredékeit
+töredékek
+töredékes
+törekszel?
+törekszik
+törekvés
+törekvéseimet
+törekvõ
+töretlen
+törhetetlen
+töri
+törik
+törik,
+törköly
+törlendõ
+törleszt
+törlesztetlen
+törlesztett
+törleszthetetlen
+törleszthetõ
+törlesztés
+törli
+törlés
+törlõ
+törlõmágnes
+törlõrongy
+törlõrongyanyag
+törlõvel
+törmelék
+törmelék-lerakóhely
+törmelékhalmok
+törmelékkúp
+törpe
+törpebirtokos
+törpeharcsa
+törpepapagáj
+törpepuszpáng
+tört
+tört-
+törtalakú
+törtekre
+törtet
+törtetés
+törtetõ
+törtrész
+törtszerû
+törtszám
+történelem
+történelemben
+történelemhez
+történelemtudomány
+történelmen
+történelmet
+történelmi
+történet
+történet!
+története
+történetek
+történeteket
+történetesen
+történetet
+történetnek
+történetét
+történhet
+történik
+történik!
+történik?
+történjék
+történt
+történt,
+történt?
+történteket
+történtté
+történés
+történések
+történész
+történõ
+törve
+törvénnyel
+törvény
+törvényalkotás
+törvényalkotó
+törvénybe
+törvénybeiktatás
+törvényben
+törvénye
+törvények
+törvényellenes
+törvényellenesség
+törvényen
+törvényerejû
+törvényerõre
+törvényes
+törvényesen
+törvényessé
+törvényesség
+törvényesít
+törvényesítés
+törvényhatóság
+törvényhatósági
+törvényhozás
+törvényhozó
+törvényhozói
+törvényjavaslat
+törvényjavaslatot
+törvénykezés
+törvénykezési
+törvénykönyv
+törvényszegés
+törvényszegõ
+törvényszerû
+törvényszolga
+törvényszék
+törvényszéki
+törvénysértés
+törvénysértõ
+törvényt
+törvénytelen
+törvénytelenség
+törvénytisztelet
+törvénytisztelõ
+törvénytudós
+törvénytáblák
+törvénytár
+törzs
+törzsalakjai
+törzsborda
+törzsdöntés
+törzse
+törzsfõ
+törzsfõnök
+törzshajlítás
+törzshajtás
+törzshely
+törzsi
+törzskönyvezésére
+törzsmajortól
+törzsrészvény
+törzsszám
+törzstag
+törzstiszt
+törzstiszti
+törzsvagyon
+törzsvendég
+törzsvevõ
+törzsvezér
+törzsállomány
+törzsét
+törzsõrmester
+törékeny
+törékenység
+törés
+törésbiztosítás
+törési
+töréskár
+törésmutató
+töréspont
+töréspróba
+törésszöge
+törésû
+törõ
+törõdik
+törõdj
+törõdjünk
+törõdnek
+törõdsz
+törõdés
+törõdõ
+törõdöm
+törõdött
+törõgép
+törõmalom
+törõterhelés
+török
+törökbab
+törökbúza
+törökkávé
+törökország
+törökvörös
+törököt
+törökülés
+töröl
+törölget
+törölhetõ
+törölközik
+törölközõt
+törölnek
+törött
+törülközik
+törülközõ
+törülközõt
+törülközõtartó
+törülközõvel
+töve
+tövig
+tövirõl
+tövis
+tövis-
+tövises
+tövissel
+tövisszúró
+tövén
+tövön
+túl
+túlad
+túladagolás
+túladás
+túladóztat
+túlbecsül
+túlbeszél
+túlbonyolított
+túlbuzgó
+túlbuzgón
+túlbuzgóság
+túlbõség
+túlcsavar
+túlcsordul
+túlcsordulás
+túlcsorduló
+túldobott
+túldolgoztat
+túledz
+túledzett
+túlemelt
+túlemelése
+túlerõ
+túlerõltet
+túlerõlteti
+túlerõltetés
+túlerõnek
+túlerõvel
+túlexponált
+túlexponálás
+túlfejlesztés
+túlfejlettség
+túlfestett
+túlfeszít
+túlfeszített
+túlfeszítés
+túlfeszültség
+túlfeszültség-levezetõ
+túlfizetett
+túlfizettet
+túlfolyik
+túlfolyás
+túlfolyó
+túlfolyócsõ
+túlforr
+túlforrás
+túlfut
+túlfutó
+túlfõtt
+túlfût
+túlfûtés
+túlfûtött
+túlfûtöttség
+túlhabzik
+túlhabzó
+túlhajtott
+túlhalad
+túlhaladott
+túlhalmoz
+túlhangsúlyoz
+túlhevít
+túlhevített
+túlhevítés
+túlhevítõ
+túlhevül
+túlhív
+túlhívás
+túlhúzott
+túlhûtés
+túlhûtött
+túli
+túlingereltség
+túlingerlés
+túljegyez
+túljut
+túljár
+túljárt
+túljátssza
+túljátszik
+túlkapás
+túlkapást
+túlkiabál
+túlkompenzál
+túlkompenzálás
+túlkoros
+túllegeltetés
+túlliheg
+túllép
+túllépi
+túllépés
+túllõ
+túlmegy
+túlmelegedik
+túlmelegedés
+túlmelegszik
+túlmenõ
+túlmenõen
+túlmunka
+túlméret
+túlméretez
+túlméretezett
+túlnyomást
+túlnyomó
+túlnyúlik
+túlnyúlás
+túlnépesedett
+túlnépesedés
+túlnövekedés
+túloldalon
+túlontúl
+túloz
+túlozni
+túlozva
+túlozza
+túlragyog
+túlreagál
+túlreagálás
+túlról
+túlszabályozás
+túlszárnyal
+túlszínez
+túlságos
+túlságosan
+túlsó
+túlsúly
+túlsúlyban
+túlsúlyos
+túlteljesített
+túltelít
+túlteng
+túltengés
+túltengõ
+túltenni
+túlterhel
+túlterheltség
+túlterhelés
+túlterhelési
+túlterjeng
+túltermelés
+túltesz
+túltesz!
+túlteszi
+túltáplál
+túltáplált
+túltölt
+túltöltés
+túltöm
+túlvilág
+túlvilági
+túlvisz
+túlzott
+túlzottan
+túlzottság
+túlzsúfol
+túlzsúfolt
+túlzsúfoltság
+túlzás
+túlzásba
+túlzó
+túlzóan
+túlárad
+túláradva
+túláradás
+túláradó
+túláradóan
+túlédesség
+túlél
+túlélhetõ
+túlélés
+túlélésre
+túlélõ
+túlértékel
+túlérzékeny
+túlóra
+túlórázik
+túlórázás
+túlöltözött
+túr
+túra
+túramotorcsónak
+túraverseny
+túrázik
+túráztat
+túráztatja
+túrázás
+túró
+túrós
+túrót
+túrót!
+túsz
+túszul
+túzok
+tûfok
+tûgyógyítás
+tûhegy
+tûkiszélesedés
+tûkön
+tûlevelû
+tûlevél
+tûnik
+tûnj
+tûnés
+tûnés!
+tûnõ
+tûnõdik
+tûnõdve
+tûnõdés
+tûnõdõ
+tûnõdöm,
+tûperem
+tûpárna
+tûr
+tûrhetetlen
+tûrhetetlenül
+tûrhetõ
+tûrhetõen
+tûrt
+tûrés
+tûrõ
+tûrõen
+tûröm
+tûröm!
+tûszúrás
+tûvel
+tûvé
+tûz
+tûz!
+tûz-
+tûzbe
+tûzben
+tûzbiztos
+tûzcsap
+tûzcsap-szekrény
+tûzdel
+tûzdelt
+tûzelzáró
+tûzeset
+tûzevõ
+tûzforró
+tûzfészek
+tûzfüggöny
+tûzgyorsaság
+tûzgyík
+tûzharc
+tûzhely
+tûzhányó
+tûzhányókürtõ
+tûzifa
+tûzijáték
+tûzikutya
+tûzjelzõ
+tûzkaparó
+tûzkereszt
+tûzkeresztség
+tûzkicsapódás
+tûzkosár
+tûzkár
+tûzkésszé
+tûzkígyó
+tûzkõ
+tûzlépcsõ
+tûzlétra
+tûznyelõ
+tûznél
+tûznél!
+tûzoltás
+tûzoltó
+tûzoltóautó
+tûzoltócsõ
+tûzoltók
+tûzoltókocsi
+tûzoltólétra
+tûzoltósisak
+tûzoltóság
+tûzpart
+tûzpiros
+tûzpróba
+tûzre
+tûzrostély
+tûzszekrényt
+tûzszerszám
+tûzszõnyeg
+tûzszünet
+tûzveszély
+tûzveszélyes
+tûzveszélyesség
+tûzvezetõ
+tûzvonal
+tûzvonó
+tûzvédelem
+tûzvész
+tûzvörös
+tûzzel-vassal
+tûzáldozat
+tûzálló
+tûzés
+tûzõgép
+tûzõr
+tûzön
+tûzön-vízen
+tûzött
+tücsök
+tüdeje
+tüdejét
+tüdejû
+tüdõ
+tüdõ-
+tüdõalveolus
+tüdõbaj
+tüdõbetegség
+tüdõbõl
+tüdõcsúcs
+tüdõfû
+tüdõgondozó
+tüdõgyulladás
+tüdõshal
+tüdõtágulás
+tüdõtágulásos
+tüdõvel
+tüdõvizenyõ
+tüdõvész
+tüdõvészes
+tükre
+tükrös
+tükröz
+tükrözõ
+tükrözõdik
+tükör
+tükörasztal
+tükörfordítás
+tükörfényesítõ
+tükörkép
+tükörradiál
+tükörreflexes
+tükörsima
+tükörszerû
+tükörszó
+tükörtojás
+tükörüveg
+tülekedik
+tülekedés
+tülköl
+tülkölés
+tüll
+tüllszoknya
+tülök
+tündér
+tündér-
+tündérek
+tündérforma
+tündérfüst
+tündéri
+tündérke
+tündérkirályné
+tündérkirálynõ
+tündérmese
+tündérország
+tündérszerû
+tündöklés
+tündöklõ
+tündököl
+tüneményes
+tünet
+tünetcsoport
+tünetek
+tüneti
+tüntet
+tünteti
+tüntetés
+tüntetõ
+tüntetõen
+tünékeny
+tünékenység
+türelem
+türelem!
+türelemjáték
+türelme
+türelmes
+türelmesen
+türelmesség
+türelmetlen
+türelmetlenkedik
+türelmetlenkedés
+türelmetlenség
+türelmetlenségében
+türelmetlenségét
+türelmetlenül
+türelmét
+türelmével
+türemlik
+türkiz
+türkizkék
+türtõztet
+türtõzteti
+türtõztetni
+tüske
+tüskebokor
+tüskés
+tüskéssé
+tüskétlen
+tüskéz
+tüsszent
+tüsszentés
+tüstént
+tütü
+tütüt
+tüze
+tüzed?
+tüzel
+tüzelés
+tüzelõanyag
+tüzelõanyag-elegy
+tüzelõanyaggal
+tüzelõberendezés
+tüzelõfa
+tüzelõnyílás
+tüzelõt
+tüzelõtér
+tüzes
+tüzesség
+tüzet
+tüzetes
+tüzetesen
+tüzér
+tüzérbemérõ
+tüzérség
+tüzérségi
+tüzértiszt
+tüzérüteg
+uborka
+uborkafára
+uborkagyalu
+uborkaorr
+uborkaszeletelõ
+uborkaszezon
+uccu
+udvar
+udvara
+udvara)
+udvarhölgy
+udvari
+udvarias
+udvariasan
+udvariaskodások
+udvariasság
+udvariasság,
+udvariassági
+udvariasságú
+udvariatlan
+udvariatlanság
+udvariatlanul
+udvarlás
+udvarló
+udvarlós
+udvarmester
+udvarnál
+udvarol
+udvarolni
+udvaronc
+udvartartás
+ufó
+ugar
+ugaroltatás
+ugat
+ugatja
+ugatás
+ugatásszerû
+ugorj
+ugorka
+ugrabugra
+ugrabugrál
+ugrabugrálás
+ugrani
+ugrani?
+ugrasztja
+ugrat
+ugratás
+ugrató
+ugrik
+ugrál
+ugrálás
+ugrándozik
+ugrándozva
+ugrándozás
+ugrándozó
+ugrás
+ugrásnyira
+ugrásra
+ugrással
+ugrásszerûen
+ugró
+ugróakadály
+ugróakrobata
+ugródeszka
+ugróiskola
+ugrókötél
+ugrómérce
+ugrórúd
+ugrószámok
+ugyan
+ugyan!
+ugyan,
+ugyan-ugyan!
+ugyanabban
+ugyanabból
+ugyanakkor
+ugyanannyi
+ugyanannyira,
+ugyanannyit
+ugyanaz
+ugyanazon
+ugyanazt
+ugyanezen
+ugyanezért
+ugyanis
+ugyanolyan
+ugyanúgy
+ugyanúgy,
+ugye
+ugye!
+ugye?
+ujj
+ujja
+ujjait
+ujjaival
+ujjak
+ujjakkal
+ujjal
+ujjas
+ujjat
+ujjatlan
+ujjbegy
+ujjizület
+ujjlenyomat
+ujjmaró
+ujjnyomokat
+ujjong
+ujjongva
+ujjongás
+ujjongó
+ujjperc
+ujjperec
+ujját
+ujjával
+ujjíz
+ujjú
+ukrajnai
+ukrán
+ukulele
+ultraibolya
+ultramikroszkóppal
+umbulda
+umlaut
+unalmas
+unalmasan
+unalmassá
+unalmasság
+unalmast
+unalmát
+unalom
+unalomig
+unatkozik
+unatkozás
+unatkozó
+uncia
+uncsi
+undok
+undokság
+undor
+undorodik
+undorodom
+undorodás
+undorom
+undort
+undortól
+undorít
+undorító
+undorítóan
+unható
+unintelligens
+uniszex
+uniszónó
+unitárius
+univerzum
+univerzális
+unió
+unja
+unoka
+unokabátya
+unokahúg
+unokanõvér
+unokatestvér
+unokatestvérek
+unokatestvéri
+unokatestvéries
+unokatestvérség
+unokaöccs
+unokaöcs
+unom
+unott
+unszol
+unszolás
+untat
+untatott
+untatsz!
+untató
+ura
+uradalom
+urak!
+uraként
+ural
+uralkodik
+uralkodj
+uralkodni
+uralkodott
+uralkodás
+uralkodása
+uralkodásra
+uralkodásával
+uralkodó
+uralkodóban
+uralkodóház
+uralkodóhûség
+uralkodói
+uralkodóvá
+uralma
+uralmon
+uralmát
+uralom
+uram
+uram!
+uraninit
+urasági
+uraságoktól
+urat
+uratlan
+urbanizáció
+urh-adó-vevõ
+urh-kocsi
+urinál
+urna
+urnatartó
+urnához
+urnát
+urához
+urán
+uránszurokérc
+uszkár
+uszoda
+uszony
+uszonyokat
+uszonyokkal
+uszály
+uszályhajó
+uszálykormányos
+uszályként
+uszályos
+uszályába
+uszít
+uszítás
+uszító
+utak
+utakat
+utal
+utalni
+utalok
+utalt
+utalva
+utalvány
+utalványoz
+utalás
+utaló
+utalójel
+utas
+utasbiztosítás
+utasellátás
+utasfelvétel
+utashíd
+utaskísérõ
+utaskísérõnõ
+utaslépcsõ
+utasok
+utasokat
+utasra
+utasszállító
+utastér
+utasít
+utasítottam
+utasítás
+utasítások
+utasításokat
+utasításokhoz
+utasításokkal
+utasítást
+utasítására
+utat
+utazgat
+utazgatás
+utazik
+utazott
+utazás
+utazási
+utazások
+utazásra
+utazással
+utazást
+utazó
+utazóközönség
+utazóláda
+utazómagasság
+utazótáska
+utazózsák
+utca
+utcagyerek
+utcai
+utcakõ
+utcalámpa
+utcalány
+utcanévtábla
+utcarongya
+utcaseprés
+utcaseprõ
+utcaszûkület
+utcákat
+utcán
+utcán,
+utcára
+utcát
+utilitarianizmus
+utilitarista
+utilitarizmus
+utoljára
+utolsó
+utolsó,
+utolsókat
+utolsónak
+utolsósorban
+utolér
+utolérhetetlen
+utoléri
+utál
+utál,
+utálat
+utálatos
+utálatosan
+utálatosság
+utálni
+utált
+után
+után!
+utána
+utána!
+utánaengedi
+utánaengedés
+utánaereszt
+utánaigazít
+utánairányít
+utánajár
+utánakap
+utánaküld
+utánaküldés
+utánanyúl
+utánanéz
+utánatétel
+utánengedés
+utánfutó
+utánhangoló
+utánhangzik
+utánhangzó
+utáni
+utánirányítás
+utánnyomás
+utánoz
+utánozhatatlan
+utánozás
+utánpótlás
+utánrendelés
+utánrezgõ
+utántétel
+utántölt
+utántöltés
+utántöltõ
+utánvételcsomag
+utánvételezett
+utánvételezve
+utánvéttel
+utánzat
+utánzott
+utánzás
+utánzása
+utánzással
+utánzó
+utánzókészülék
+utánállít
+utánégetés
+utánégõ
+utász
+utó
+utó-
+utóbaj
+utóbb
+utóbbi
+utócsapat
+utód
+utódlás
+utódlási
+utódok
+utógondolat
+utógondozás
+utógyújtás
+utóhad
+utóhatás
+utóhatása
+utóhatások
+utója
+utókezel
+utókezelés
+utókor
+utókorra
+utókép
+utólag
+utólagos
+utólagosan
+utólökés
+utónév
+utópia
+utópista
+utópisztikus
+utópiák
+utópiákat
+utópiákban
+utórezgés
+utószó
+utószülött
+utótag
+utótõzsde
+utóvéd
+utóvédharc
+utózengés
+utózengõ
+utóégetés
+utóégés
+utóélet
+utóörökösödési
+uvuláris
+uzsonna
+uzsonna-vacsora
+uzsonnadoboz
+uzsonnatáska
+uzsora
+uzsorabér
+uzsorabérrel
+uzsorakamat
+uzsoratõke
+uzsoraár
+uzsorából
+uzsorás
+uzsoráskodik
+uzsorával
+v-alakban
+v-nyakú
+vacak
+vacakol
+vacakolj!
+vacakolás
+vacakul
+vacillál
+vacillálás
+vackor
+vackáról
+vacog
+vacogtat
+vacogás
+vacok
+vacsora
+vacsoraidõ
+vacsorához
+vacsorának
+vacsorát
+vacsorázik
+vacsoráztat
+vad
+vadalma
+vadaskert
+vadat
+vadcsapás
+vadcseresznyefa
+vaddisznó
+vadember
+vadetetõ
+vadgalamb
+vadgesztenye
+vadgesztenyefa
+vadházasságban
+vadhús
+vadkacsa
+vadkacsacsapat
+vadkan
+vadkereskedõ
+vadliba
+vadlibagágogás
+vadludak!
+vadlúd
+vadnyugati
+vadon
+vadonatúj
+vadonatújan
+vadonban
+vadorzó
+vadpecsenye
+vadrepce
+vadrezgés
+vadrózsa
+vadrózsa-bokor
+vadspenót
+vadszamár
+vadszõlõ
+vadság
+vadul
+vadvilág
+vadállat
+vadállati
+vadállatiasság
+vadárvácska
+vadász
+vadász-
+vadászat
+vadászati
+vadászatokat
+vadászaton
+vadászatra
+vadászbombázó
+vadászcsizma
+vadászdal
+vadászelhárítás
+vadászember
+vadászexpedíció
+vadászgat
+vadászház
+vadászidény
+vadászik
+vadászinas
+vadászkabát
+vadászkalap
+vadászkaraván
+vadászkifejezések
+vadászkirándulás
+vadászkiáltás
+vadászkopó
+vadászkutya
+vadászkutyával
+vadászkés
+vadászkürt
+vadászlak
+vadászmenyét
+vadászni
+vadásznyelv
+vadászpuska
+vadászrepülõgép
+vadászsapka
+vadászszék
+vadásztacskó
+vadászterület
+vadászterületté
+vadásztrófea
+vadásztársaság
+vadászva
+vadászvizsla
+vadászzsákmány
+vadászó
+vadászöv
+vadóc
+vadózus
+vadõr
+vagdal
+vagdalkozik
+vagdalt
+vagdalthús-pogácsa
+vagdalék
+vagdaló
+vagdos
+vagina
+vagon
+vagonba
+vagontetõ
+vagy
+vagy!
+vagy,
+vagy...
+vagy?
+vagyis
+vagylagos
+vagylagosan
+vagyok
+vagyok!
+vagyok,
+vagyon
+vagyona
+vagyona?
+vagyonadó
+vagyonba
+vagyonbukott
+vagyonbukottnak
+vagyondézsma
+vagyongyûjtés
+vagyonkezelés
+vagyonkezelõ
+vagyonkáját
+vagyonközösség
+vagyonom
+vagyonos
+vagyonosok
+vagyonrész
+vagyont
+vagyontárgy
+vagyontárgyak
+vagyonváltság
+vagyonvédelem
+vagyonából
+vagyonának
+vagyonát
+vagytok
+vagyunk
+vagyunk!
+vagyunk?
+vagány
+vagánykodás
+vaj
+vajas
+vajaskenyér
+vajastészta-kosárka
+vajban
+vajcsomó
+vajdió
+vajjal
+vajköteg
+vajmérõ
+vajon
+vajpapír
+vajréteg
+vajákos
+vajúdik
+vajúdás
+vak
+vak-
+vakablak
+vakakna
+vakar
+vakarcs
+vakarás
+vakarék
+vakaró
+vakaródzik
+vakaródzás
+vakaródzó
+vakaróvas
+vakbarázda
+vakbuzgó
+vakbuzgóság
+vakbél
+vakbélgyulladás
+vakbélmûtét
+vaker
+vakerál
+vakeset
+vakfolt
+vakfurat
+vakkarima
+vakkeret
+vakleszállás
+vaklárma
+vaklármát
+vakmerõ
+vakmerõen
+vakmerõség
+vaknyomás
+vaknyomást
+vakok
+vakol
+vakolat
+vakolattal
+vakolás
+vakolókanál
+vakolókanálnyi
+vakon
+vakond
+vakondlyuk
+vakondtúrás
+vakpadló
+vakrepülés
+vakráma
+vakrémület
+vaksi
+vaksi!
+vakszerencse
+vakszerencsére
+vakság
+vakságot
+vaksötétbe
+vaktában
+vaktöltény
+vaktöltés
+vaku
+vakulásig
+vakvezetõ
+vakvájat
+vakvéletlen
+vakáció
+vakáció!
+vakációs
+vakációt
+vakírás
+vakít
+vakítás
+vakító
+vakítóan
+valag
+valagravaló
+valaha
+valahogy
+valahogyan
+valahol
+valahova
+valahová
+valahány
+valahányszor
+valahára
+valaki
+valaki?
+valakinek
+valakire
+valakit
+valamelyik
+valamelyiket
+valamelyikünk
+valamennyi
+valamennyien
+valamennyire
+valami
+valami!
+valami,
+valami?
+valamibõl
+valamicskével
+valamiféle
+valamihez
+valamikor
+valamiként
+valamiképpen
+valamilyen
+valamin
+valaminek
+valamint
+valamire
+valamirevaló
+valamit
+valamit!
+valamit?
+valamivel
+valcer
+valencia-elektronok
+vall
+vall,
+vallat
+vallatás
+vallató
+vallja
+vallomás
+vallomása
+vallomásra
+vallomást
+vallott
+vallás
+vallás-
+vallásfelekezet
+vallási
+vallásoktató
+vallásos
+vallásosan
+vallásosság
+vallásszabadság
+vallástalan
+vallástalanság
+valló
+valorizál
+valuta
+valutaalap
+valutafelár
+valutakorlátozás
+valutapénz
+valutaárfolyam
+valutaárfolyam-lap
+valutaügyi
+valutaüzlet
+valutázó
+való
+való?
+valóban
+valódi
+valódiság
+valója
+valójában
+valójából
+valóját
+valók
+valónak
+valóra
+valós
+valósi
+valósi?
+valósuló
+valószerû
+valószerûen
+valószerûség
+valószerûtlenség
+valószínû
+valószínû,
+valószínûen
+valószínûleg
+valószínûnek
+valószínûség
+valószínûsége
+valószínûségen
+valószínûségi
+valószínûségére
+valószínûsít
+valószínûtlen
+valószínûtlenség
+valószínûtlenül
+valóság
+valóságban
+valósággal
+valóságnak
+valóságos
+valóságot
+valóságtól
+valóságábrázoló
+valótlan
+valótlanság
+vamzer
+van
+van!
+van,
+van?
+vandalizmus
+vandál
+vannak
+vanádium
+vanília
+vaníliakrém
+vaníliaturmix
+var
+varangy
+varangyos
+varas
+varasodik
+varasodás
+varasság
+vargabetû
+vargabetût
+varieté
+variáció
+variációkkal
+variációs
+variál
+variálható
+variáns
+varjakkal
+varjú
+varjúháj
+varjútanya
+varkocs
+varr
+varrat
+varratos
+varrja
+varrott
+varrás
+varrásos
+varrással
+varrást
+varróasztal
+varrófonal
+varrógép
+varrógéphajtó
+varrókeret
+varrónõ
+varróráma
+varrótalp-keret
+varrótû
+varázs
+varázs-
+varázsa
+varázserejû
+varázserõ
+varázsige
+varázsital
+varázsjel
+varázslat
+varázslatban
+varázslatos
+varázslatosan
+varázslatot
+varázslattal
+varázslás
+varázsló
+varázslófû
+varázslónõ
+varázsol
+varázspálca
+varázst
+varázstükör
+varázsvesszõ
+vas
+vasa
+vasakaratú
+vasal
+vasaljon
+vasalt
+vasalás
+vasaló
+vasalódeszka
+vasam
+vasas
+vasat
+vasat,
+vasbeton
+vasbika
+vasbordájú
+vasbordájúak
+vasbordás
+vasburkolatú
+vasból
+vasedény
+vasektómia
+vaseszterga
+vasfejû
+vasforgács
+vasfüggöny
+vasgyár
+vasgálic
+vashabbal
+vasheggyel
+vashegy
+vashegyû
+vashidroxid
+vasháló
+vasháromláb
+vasidegzete
+vasipari
+vaskalapos
+vaskapoccsal
+vaskapocs
+vaskarika
+vaskazetta
+vaskereskedés
+vaskereskedõ
+vaskezû
+vaskor
+vaskorszak
+vaskos
+vaskosan
+vaskossá
+vaskosság
+vaskosár
+vaskönyök
+vaslakk
+vaslemezt
+vaslépcsõ
+vasmacska
+vasmag
+vasmarka
+vasmarok
+vasmû
+vasokker
+vasolvasztó
+vasoszlop
+vasoxid
+vasparipa
+vaspánt
+vaspát
+vasreve
+vasrudak
+vassal
+vasszûz
+vastag
+vastagabb
+vastagbél
+vastagbél-
+vastagbõrû
+vastagbõrûek
+vastagodás
+vastagon
+vastagság
+vastagsága
+vastagít
+vastapsot
+vastartalmú
+vastartalék
+vastimsó
+vastüdõ
+vasutas
+vasveret
+vasvilla
+vasvillával
+vasvázas
+vasárnap
+vasárnap?
+vasárnapi
+vasárnapot
+vasárnapot?
+vasáru
+vasárú
+vasérc
+vasút
+vasúti
+vasúton
+vasúttársaság
+vasútvonal
+vasútvégállomás
+vasútállomás
+vasüst
+vatelinezett
+vatelinnel
+vatta
+vattacsomó
+vattapaplan
+vattaszerû
+vattát
+vattával
+vattáz
+vattázott
+vattázás
+vazelin
+vazelinolaj
+vecsernye
+vecsernyepalást
+vedd
+vedel
+vedelés
+veder
+vedlett
+vedlik
+vedlés
+vedlésben
+vedres
+veendõ
+vegetatív
+vegetál
+vegetáriánus
+vegye
+vegyem,
+vegyes
+vegyesvonat
+vegyesüzemû
+vegyi
+vegytinta
+vegyvédelmi
+vegyél!
+vegyérték
+vegyérték-elektronok
+vegyértékûség
+vegyész
+vegyészet
+vegyít
+vegyítetlen
+vegyített
+vegyíthetetlen
+vegyíthetõ
+vegyítés
+vegyül
+vegyület
+vegyülék
+vegyülési
+vegyünk
+vegzál
+vehemens
+veheted
+vehetsz
+vehetõ
+vej
+vekker
+vekni
+vektor
+vektoriális
+vele
+vele!
+vele,
+vele?
+veled
+veled!
+veleje
+velejár
+velejáró
+velejárója
+velejéig
+velekóstolt
+velem
+velem!
+velem?
+velencei
+veletek!
+velin
+velinpapír
+velum
+veláris
+velõ
+velõs
+velõsen
+velõsen!
+velõsség
+velõtrázó
+velúr
+velünk
+velünk!
+vemhes
+vendetta
+vendég
+vendége
+vendégei
+vendégek
+vendégeket
+vendégfogadó
+vendéghallgató
+vendégháló
+vendéglátás
+vendéglátó
+vendéglõ
+vendéglõ,
+vendéglõs
+vendégoldal
+vendégotthon
+vendégszerepel
+vendégszereplés
+vendégszeretet
+vendégszeretetét
+vendégszeretõ
+vendégszeretõen
+vendégszoba
+vendégség
+vendégágy
+vendégül
+venni
+ventil
+ventillátor
+ventillátorszárny
+ver
+veranda
+verbuvál
+verbuváló
+verbéna
+verdefényû
+verdes
+verdikt
+verebekre
+vereget
+veregetés
+verejték
+verejtékezik
+verejtékezés
+verejtékezõ
+verejtéktõl
+verejtékével
+verekedik
+verekednek
+verekedni
+verekedés
+verekedésre
+verekedõ
+verekedõen
+verekedõs
+verekszik
+verem
+veres
+vereség
+vereséget
+veret
+veretez
+veretlen
+veretés
+vergõdik
+verhetetlen
+veri
+verik
+verklis
+vermel
+vermet
+vermikulit
+vermut
+verni
+verniszázs
+vers
+versbe
+versben
+verseit
+versek
+versel
+verselés
+verselési
+verselõ
+verseng
+versengés
+versengõ
+verseny
+verseny-
+versenyautó
+versenyben
+versenybírói
+versenybíróság
+versenycsónak
+versenydíj
+versenye
+versenyen
+versenyez
+versenyezhet
+versenyezzen
+versenyezzünk!
+versenyhajó
+versenyistálló
+versenyképes
+versenylovakat
+versenyló
+versenylóra
+versenymû
+versenypálya
+versenyre
+versenyszekér
+versenyszám
+versenyszámok
+versenyt
+versenyt!
+versenytitkárság
+versenytárgyalás
+versenytárgyalási
+versenytárgyalást
+versenytárs
+versenytársa
+versenytársat
+versenyvitorla
+versenyzés
+versenyzõ
+verses
+verset
+versfaragó
+versforma
+versfüzér
+versláb
+versmérték
+versmértékes
+verspár
+verspótló
+versregény
+verssor
+versszak
+versíró
+vert
+vertikális
+verve
+verzió
+verzátus
+veréb
+veréb,
+verébfing
+verébnek,
+verés
+veríték
+verítékezik
+verítékezõ
+verõ
+verõdik
+verõfa
+verõfej
+verõkos
+verõlabda
+verõpárna
+vese
+vese)
+vesekõ
+vesepecsenye
+vessen
+vesszõ
+vesszõbõl
+vesszõfonadék-akadály
+vesszõfonat
+vesszõfonás
+vesszõhüvely
+vesszõkerítés
+vesszõköteg
+vesszõparipa
+vesszõt
+vesszõvel
+vesz
+veszed?
+veszedelem
+veszedelmes
+veszekedik
+veszekedés
+veszekedést
+veszekedõ
+veszekedõs
+veszekedõsség
+veszekszik
+veszem
+veszendõbe
+veszett
+veszettség
+veszettségi
+veszettül
+veszi
+veszi,
+veszik
+veszik,
+veszt
+veszte
+vesztegel
+veszteget
+vesztegeti
+vesztegetni
+vesztegetni!
+vesztegetés
+vesztegetési
+vesztegetõ
+veszteglés
+vesztegzár
+vesztegzárhajó
+vesztes
+veszteség
+veszteségeit
+veszteségeiért
+veszteségek
+veszteségek,
+veszteségeket
+veszteségem
+veszteséget
+veszteségfeltöltés
+veszteséggel
+veszteséglista
+vesztett
+veszti
+vesztébe
+vesztés
+vesztésre
+vesztést
+vesztét
+vesztõ
+vesztõhely
+veszve
+veszzük
+veszéllyel
+veszély
+veszélybe
+veszélyben
+veszélyei
+veszélyen
+veszélyes
+veszélyesen
+veszélyességi
+veszélyeztet
+veszélyeztetett
+veszélyjelzés
+veszélynek
+veszélyt
+veszélytelen
+veszélytõl
+veszélyzóna
+veszélyére
+veszít
+veszítesz
+veszõdik
+veszõdség
+veszõdséggel
+vet
+vet,
+vetekszik
+vetemedik
+vetemedés
+vetemények
+veteményes
+veteményeskert
+veterán
+vetet
+vetett
+vethetsz
+veti
+vetkõzik
+vetkõzõ
+vetkõzött
+vett
+vetted
+vettem
+vették,
+vettél
+vetve
+vetélkedik
+vetélkedés
+vetélkedõ
+vetélés
+vetélõ
+vetélõpálya
+vetés
+vetésforgó
+vetésforgóba
+vetési
+vetít
+vetített
+vetítettképes
+vetítik
+vetítés
+vetítõ
+vetítõfülke
+vetítõgép
+vetítõkamara
+vetítõkészülék
+vetítõlámpa
+vetítõlámpa-kezelõ
+vetítõterem
+vetõ
+vetõbarázda
+vetõdik
+vetõdés
+vetõdéses
+vetõsor
+vetület
+vetületet
+vetületszerkesztõ
+vetülék
+vetülékcséve
+vetülékfonal
+vevés
+vevõ
+vevõ!
+vevõantenna
+vevõk
+vevõket
+vevõkészülék
+vevõkör
+vevõközönség
+vevõszolgálat
+vevõt
+vezekel
+vezeklés
+vezeklõ
+vezet
+vezetett
+vezethetõ
+vezeti
+vezetik
+vezetnek
+vezetve
+vezeték
+vezetékes
+vezetéket
+vezetékfenntartó
+vezetékhiba
+vezetékló
+vezetékmegcsapolás
+vezetéknév
+vezetékoszlop
+vezetékszár
+vezetéktartó
+vezetékvonal
+vezetékû
+vezetés
+vezetése
+vezetést
+vezetését
+vezetésével
+vezetõ
+vezetõ-
+vezetõcsõ
+vezetõen
+vezetõfals
+vezetõhüvely
+vezetõi
+vezetõje
+vezetõkerék
+vezetõképes
+vezetõképesség
+vezetõkészülék
+vezetõléc
+vezetõrúd
+vezetõszár
+vezetõszárral
+vezetõség
+vezetõségi
+vezetõsín
+vezetõülés
+vezényel
+vezénylés
+vezénylõhíd
+vezényszó
+vezér
+vezércikk
+vezércikk-stílus
+vezércsillag
+vezércsõ
+vezére
+vezéregyenes
+vezérel
+vezérelhetõ
+vezérelhetõség
+vezéreljen!
+vezérelt
+vezérelv
+vezérevezõs
+vezérevezõsként
+vezérfonal
+vezérhajó
+vezérhang
+vezérkar
+vezérkari
+vezérképviselõ
+vezérlet
+vezérlés
+vezérlõ
+vezérlõasztal
+vezérlõberendezés
+vezérlõcsap
+vezérlõfülke
+vezérlõkapcsoló
+vezérlõmû
+vezérlõorsó
+vezérlõtengely
+vezérlõterem
+vezérmotívum
+vezérnek
+vezérorsó
+vezérprogram
+vezérré
+vezérsugár
+vezérszerep
+vezérszurkoló
+vezérszó
+vezérsík
+vezérvonal
+vezérárok
+vezérénekes
+vezérõrnagy
+vezérürü
+vhogy
+vhogyan
+vhol
+vhonnan
+vhonnan)
+vhova
+vhová
+vi.
+viadal
+viaskodik
+viaskodás
+viasszal
+viasz
+viaszmerevség
+viasznyomat
+viaszol
+viaszosvászon
+vibráció
+vibrációs
+vibrál
+vibrálás
+vibráló
+vibrátoros
+vibrátorzörej
+vicc
+vicce
+vicceket
+viccelek!
+viccelõ
+viccelõdés
+viccelõdõ
+vicces
+viccesen
+viccet
+viccnek
+viccrovat
+vicik-vacak
+vicinális
+vicomte
+vicomte-i
+vicsorgat
+vicsorgatja
+vicsorgás
+vicsorgó
+vicsorítja
+vicsorítva
+vidra
+vidám
+vidám,
+vidáman
+vidámság
+vidék
+vidék,
+vidéke
+vidékek
+vidéken
+vidéket
+vidéki
+vidékies
+vidékrõl
+vidít
+vietkong
+vietnami
+vigad
+vigalom
+vigasz
+vigaszdíj
+vigaszt
+vigasztal
+vigasztalan
+vigasztalanul
+vigasztalhatatlan
+vigasztalhatatlanul
+vigasztalható
+vigasztalás
+vigasztalást
+vigasztaló
+vignetta
+vignettázó
+vigye
+vigyen
+vigyorgás
+vigyorgó
+vigyorog
+vigyorogva
+vigyáz
+vigyázat
+vigyázat!
+vigyázat,
+vigyázatlan
+vigyázatlanság
+vigyázatlanul
+vigyázz!
+vigyázz,
+vigyázza
+vigyázzban
+vigyázzon
+vigyázó
+vigéc
+vihar
+vihara
+viharba
+viharedzett
+viharfecske
+viharfelhõ
+viharfrizura
+viharkabát
+viharkalap
+viharmadara
+viharmadár
+viharmentes
+viharnak
+viharos
+viharosan
+viharosság
+viharra
+vihart
+viharvert
+viharzik
+vihog
+vihogás
+viháncol
+vijjog
+vijjogás
+vikomt
+vikomtessz
+villa
+villacsont
+villafog
+villaház
+villamos
+villamosenergia-ellátás
+villamosenergia-szolgáltatás
+villamosjegy
+villamosmegálló
+villamosszék
+villamosszékben
+villamosság
+villamossággal
+villamosvágány
+villamosít
+villamosítás
+villan
+villanegyed
+villant
+villantó
+villantókanál
+villantós
+villanyborotva
+villanycsengõ
+villanyerõre
+villanyfúró
+villanyfûrész
+villanyfürdõ
+villanykapcsoló
+villanykörte
+villanymozdony
+villanyoszlop
+villanyoz
+villanyozás
+villanyozó
+villanyrendõr
+villanyszerelõ
+villanyt
+villanytermofor
+villanyvonat
+villanyáram
+villanás
+villanásnyit
+villanó
+villanófény
+villanófényes
+villanólámpa
+villlámsebesen
+villog
+villogtat
+villogtatás
+villogás
+villogó
+villája
+villáját
+villám
+villámcsapás
+villámellenõrzés
+villámgyorsan
+villámháború
+villámháború-szerû
+villámháborúból
+villámháborús
+villámháborút
+villámháborúval
+villámhárító
+villámlik
+villámlás
+villámolvasó
+villámsebesen
+villámsztrájk
+villámtisztogatás
+villámzár
+villányi
+villás
+villásan
+villásdugó
+villáskulcs
+villásreggeli
+villásreggelizik
+villásrúd
+villástargonca
+villásvég
+villódzik
+villódzás
+villódzó
+világ
+világ-
+világa
+világban
+világegyetem
+világfelfordulás
+világfi
+világfájdalom
+világgal
+világgyûlölet
+világgá
+világhoz
+világhír
+világhíres
+világhírû
+világi
+világias
+világiasság
+világkatasztrófa
+világklasszis
+világmindenség
+világméretû
+világnyelv
+világnézet
+világon
+világos
+világos!
+világos,
+világos?
+világosabb
+világosabban
+világosabbá
+világosan
+világosbarna
+világoskék
+világossá
+világosság
+világosságban
+világosságot
+világosvörös
+világot
+világpiac
+világpiacok
+világpolgár
+világpolgári
+világpolgáriasság
+világra
+világrahozatala
+világranglista
+világraszóló
+világrekord
+világrész
+világszerte
+világtalan
+világtáj
+világtájak
+világtól
+világuralmi
+világválság
+világváros
+világvége
+világában
+világát
+világéletében
+világít
+világítva
+világítás
+világítási
+világításra
+világítást
+világító
+világítóbója
+világítórakéta
+világítótornyokat
+világítótorony
+világítótábla
+világítóudvar
+világûr
+világûri
+vindikál
+vinil
+vinilbenzol
+vinilgyök
+vinkli
+vinni
+vinnyog
+vinnyogó
+viola
+violinkulcs
+vipera
+vipera-
+viperafélék
+viperasikló
+viperaszerû
+viperatermészet
+virginál
+virgonc
+virgoncság
+virgula
+virgács
+virgácsos
+virrad
+virradat
+virradatkor
+virraszt
+virrasztás
+virrasztó
+virsli
+virtuozitás
+virtus
+virtuskodás
+virtuskodásból
+virtuálisan
+virtuóz
+virul
+virulens
+virulás
+viruló
+virzsínia
+virzsíniadohány
+virág
+virág-
+virágban
+virágcserép
+virágcsokor
+virágdíszes
+virágföld
+virágfüzér
+virágfüzérdísz
+virágfüzért
+virághagyma
+virágja
+virágjában
+virágkehely
+virágkor
+virágkorát
+virágláda
+virágmintával
+virágokat
+virágokkal
+virágos
+virágot
+virágpor
+virágtál
+virágvasárnap
+virágváza
+virágzat
+virágzik
+virágzás
+virágzó
+virágágy
+virágállvány
+virágárus
+virágú
+vis
+visel
+viselet
+viselhetõ
+viseli
+viselik
+viseljük
+viselkedett
+viselkedett!
+viselkedik
+viselkedik,
+viselkedj
+viselkedj!
+viselkedjenek!
+viselkedned!
+viselkedsz?
+viselkedés
+viselkedés!
+viselkedés-lélektan
+viselkedése
+viselkedési
+viselkedésmód
+viselkedését
+viselkedésû
+viselkedõ
+viselni
+viselnie
+viselt
+viseltes
+viseltetik
+viseltetni
+viselve
+viselés
+viselése
+viselésébõl
+viselõ
+viselõs
+viselõsség
+viskó
+vissz-
+vissza
+vissza!
+vissza-
+visszaad
+visszaadja
+visszaadás
+visszabeszél
+visszabeszélés
+visszaborzad
+visszaborzadás
+visszacsalogat
+visszacsapó
+visszacsapó-szelep
+visszacsapódik
+visszacsatolás
+visszacsinál
+visszadob
+visszaemlékezett
+visszaemlékezik
+visszaemlékezés
+visszaemlékezõ
+visszaemlékszik
+visszaenged
+visszaengedi
+visszaesik
+visszaesés
+visszaesõ
+visszafajzás
+visszafejlõdik
+visszafejlõdés
+visszafejlõdõ
+visszafelel
+visszafelesel
+visszafelé
+visszafizet
+visszafizethetõ
+visszafizeti
+visszafizetés
+visszafizetéskor
+visszafog
+visszafogad
+visszafogadása
+visszafoglal
+visszafoglalás
+visszafogott
+visszafogottan
+visszafojt
+visszafojtani
+visszafojtja
+visszafojtott
+visszafojtva
+visszafolyik
+visszafordul
+visszafordulás
+visszafordít
+visszafordíthatatlanság
+visszafordítás
+visszaforgat
+visszafut
+visszafutás
+visszagondol
+visszagondoló
+visszagurul
+visszagurít
+visszagurító
+visszagyújtás
+visszagörbített
+visszahagy
+visszahajlik
+visszahajt
+visszahajtott
+visszahajtás
+visszahajtása
+visszahajít
+visszahanyatlik
+visszahat
+visszahatás
+visszaható
+visszahelyez
+visszahelyezés
+visszahonosít
+visszahonosítás
+visszahoz
+visszaháramlik
+visszaháramlás
+visszahív
+visszahívás
+visszahõköl
+visszahõkölés
+visszahúz
+visszahúzás
+visszahúzódik
+visszahúzódás
+visszahúzódása
+visszahúzódó
+visszaidéz
+visszaigazoló
+visszaigazít
+visszailleszt
+visszajuttat
+visszajár
+visszajár,
+visszajátszik
+visszajátszás
+visszajön
+visszajött.
+visszajöttél,
+visszajöttél?
+visszajövök?
+visszakanyarodik
+visszakap
+visszakapcsol
+visszakapás
+visszakeresés
+visszakerül
+visszakiált
+visszakozik
+visszakozz!
+visszakényszerít
+visszakövetel
+visszakövetelés
+visszakövetelési
+visszaküld
+visszaküldés
+visszalendül
+visszalovagol
+visszalép
+visszalépés
+visszalök
+visszalökés
+visszalökõdik
+visszalökõdés
+visszamarad
+visszamaradt
+visszamaradó
+visszamegy
+visszamenõ
+visszamenõleg
+visszametsz
+visszametszés
+visszamondás
+visszanyer
+visszanyerhetõ
+visszanyeri
+visszanyerés
+visszanyom
+visszanyúlik
+visszanéz
+visszaoldódik
+visszapattan
+visszapattanás
+visszapillant
+visszapillantás
+visszapillantó
+visszapofázik
+visszapofázás
+visszarak
+visszarepül
+visszaretten
+visszarettenés
+visszariad
+visszarohan
+visszaránt
+visszarántás
+visszarúg
+visszarúgás
+visszasugárzó
+visszaszerel
+visszaszerez
+visszaszerezhetõ
+visszaszerezhetõség
+visszaszerzi
+visszaszerzés
+visszaszerzése
+visszaszerzõ
+visszaszolgáltatás
+visszaszorít
+visszaszorított
+visszaszáll
+visszaszállítás
+visszaszálló
+visszaszámlálás
+visszaszámol
+visszaszító
+visszaszív
+visszaszívja
+visszaszívás
+visszaszól
+visszasüllyed
+visszatart
+visszatartani
+visszatartja
+visszatartott
+visszatartás
+visszatartása
+visszatartó
+visszataszít
+visszataszító
+visszataszítóan
+visszatekint
+visszatekintve
+visszatekintés
+visszatekintõ
+visszatelepülõ
+visszatesz
+visszatetszik
+visszatetszés
+visszatetszõ
+visszatetszõen
+visszatevés
+visszatol
+visszatolat
+visszatáncol
+visszatáncolás
+visszatáplálással
+visszatér
+visszatérve
+visszatérés
+visszatérésre
+visszatérít
+visszatérítés
+visszatérõ
+visszatükröz
+visszatükrözés
+visszatükrözõ
+visszatükrözõdés
+visszaugrik
+visszaugrás
+visszautasít
+visszautasítani
+visszautasított
+visszautasítás
+visszaver
+visszavert
+visszaverés
+visszaverõ
+visszaverõ-képesség
+visszaverõdik
+visszaverõdés
+visszaverõdési
+visszaverõdõ
+visszavesz
+visszavet
+visszavetett
+visszavevés
+visszavezet
+visszavezethetõ
+visszavezetõ
+visszavisz
+visszavon
+visszavonhatatlan
+visszavonhatatlanság
+visszavonhatatlanul
+visszavonható
+visszavonhatóan
+visszavonja
+visszavonul
+visszavonult
+visszavonultság
+visszavonultságban
+visszavonulás
+visszavonulása
+visszavonulásra
+visszavonuló
+visszavonás
+visszavonásig
+visszavág
+visszavágás
+visszavágással
+visszavágó
+visszavágós
+visszavásárlás
+visszavásárol
+visszavétel
+visszaállít
+visszaállítja
+visszaállítás
+visszaáramlás-gátló
+visszaél
+visszaélés
+visszaélések
+visszaélést
+visszaélõ
+visszaér
+visszaérkezik
+visszaérkezés
+visszaút
+visszaûz
+visszaül
+visszaülés
+visszaüt
+visszaütés
+visszaütõ
+visszfény
+visszhang
+visszhangot
+visszhangoz
+visszhangra
+visszhangzik
+visszhangzott
+visszhangzás
+visszhangzó
+visszhangzóan
+visszkereseti
+visszteher
+visszterhes
+visszváltó
+visszája
+visszájára
+visszás
+visszásság
+visszásságot
+visz
+viszem
+viszi
+viszik
+viszket
+viszketés
+viszketést
+viszketõ
+viszketõs
+viszkozitás
+viszkózus
+viszlát!
+viszonos
+viszonosság
+viszonoz
+viszonozatlan
+viszonozhatatlan
+viszonozza
+viszont
+viszontagság
+viszontagságai
+viszontagságok
+viszontagságos
+viszontbiztosít
+viszontbiztosítás
+viszontbiztosítást
+viszontkeresettel
+viszontlátni
+viszontlátásra!
+viszontszeret
+viszontválaszt
+viszonvád
+viszonvádat
+viszonvádló
+viszonvádol
+viszony
+viszonya
+viszonyba
+viszonyban
+viszonylag
+viszonylagos
+viszonylagosság
+viszonylatban
+viszonyok
+viszonyokkal
+viszonyt
+viszonyulás
+viszonyít
+viszonzott
+viszonzás
+viszonzásul
+viszály
+viszálykodás
+viszályt
+visít
+visítás
+visító
+vita
+vitae
+vitafórum
+vitaindító
+vitakedvelõ
+vitalitás
+vitalitását
+vitamin
+vitapont
+vitapontban
+vitat
+vitathatatlan
+vitathatatlanság
+vitathatatlanul
+vitatható
+vitathatóan
+vitatja
+vitatkozik
+vitatkozni
+vitatkozás
+vitatkozó
+vitatott
+vitatottság
+vitatás
+vitató
+vitel
+viteldíj
+vitiosus
+vitla
+vitorla
+vitorla-feszítõkötél
+vitorlafa
+vitorlakivonó
+vitorlakészítõ
+vitorlalyukasztó
+vitorlaléc
+vitorlamester
+vitorlamû-mester
+vitorlarudakat
+vitorlarúd
+vitorlarúd-hámkötél
+vitorlarúd-szilárdító
+vitorlarúd-támasz
+vitorlarúdsín
+vitorlarúdvég
+vitorlaszélesség
+vitorlavezeték
+vitorlavásznat
+vitorlavásznon
+vitorlavászon
+vitorlavászonba
+vitorlái
+vitorlák
+vitorlákat
+vitorlákkal
+vitorlás
+vitorlásból
+vitorláshajó
+vitorláshal
+vitorláskomp
+vitorláson
+vitorlát
+vitorlával
+vitorlázat
+vitorlázatú
+vitorlázik
+vitorlázni!
+vitorlázás
+vitorlázó
+vitorlázógép
+vitorlázógépek
+vitorlázórepülés
+vitorlázórepülést
+vitorlázórepülõ
+vitrin
+vitriol
+vitriolos
+vitt
+vitte
+vityilló
+vitába
+vitában
+vitája
+vitán
+vitás
+vitásság
+vitát
+vitázik
+vitázni
+vitázó
+vitéz
+vitézek
+vitézség
+vitézül
+vivendi
+viviszekció
+vivés
+vivõ
+vivõanyag
+vivõhullám-teljesítménye
+vize
+vizeken
+vizel
+vizelde
+vizelet
+vizeletvizsgálat
+vizelni!
+vizelés
+vizelési
+vizelõedény
+vizenyõs
+vizes
+vizeshordó
+vizeskancsó
+vizesnyolcas
+vizespohár
+vizeszsemle
+vizesárok
+vizet
+vizez
+vizezett
+vizibicikli
+vizionáló
+vizitorma
+vizsga
+vizsgabizottság
+vizsgadíj
+vizsgaengedély
+vizsgafelelet
+vizsgafelelés
+vizsgafelügyelõ
+vizsgahalasztást
+vizsgakérdések
+vizsgaláz
+vizsgaszemmel
+vizsgák
+vizsgál
+vizsgálat
+vizsgálata
+vizsgálati
+vizsgálatok
+vizsgálatot
+vizsgálattal
+vizsgálgatás
+vizsgálva
+vizsgálás
+vizsgáló
+vizsgálóbizottság
+vizsgálóbíró
+vizsgálóbírói
+vizsgálódik
+vizsgálódva
+vizsgálódás
+vizsgálódó
+vizsgán
+vizsgának
+vizsgára
+vizsgára!
+vizsgát
+vizsgázik
+vizsgázni
+vizsgáztat
+vizsgáztatás
+vizsgáztató
+vizsgáztató-
+vizsla
+vizuális
+vizuálisan
+vizének
+vizét
+vizû
+vki
+vki?
+vkibe
+vkiben
+vkibõl
+vkihez
+vkik
+vkin
+vkin)
+vkinek
+vkinek)
+vkinek,
+vkinél
+vkire
+vkire)
+vkirõl
+vkit
+vkit,
+vkitõl
+vkivel
+vkivel,
+vkiért
+vkiétõl
+vmeddig
+vmekkora
+vmely
+vmennyi
+vmennyibe
+vmennyire
+vmennyit
+vmerre
+vmi
+vmibe
+vmiben
+vmibõl
+vmiféle
+vmihez
+vmije
+vmijébõl
+vmikor
+vmiként
+vmiképpen
+vmilyen
+vmilyennek
+vmilyenné
+vmin
+vminek
+vminél
+vmire
+vmire,
+vmirõl
+vmit
+vmit,
+vmitõl
+vmivel
+vmivé
+vmiért
+voce
+vokális
+volna
+volna,
+volnál
+volnánk
+volnánk!
+volnék
+volt
+volt!
+volt,
+volt?
+volta
+voltak
+voltam
+voltunk
+voltál
+voltának
+volumetrikus
+voluta
+volutadísz
+volátot
+von
+vonaglik
+vonaglás
+vonagló
+vonakodik
+vonakodva
+vonakodás
+vonakodó
+vonal
+vonal)
+vonala
+vonalacska
+vonalai
+vonalak
+vonalakat
+vonalakban
+vonalakkal
+vonalas
+vonalat
+vonalat!
+vonalaz
+vonalazott
+vonalazás
+vonalba
+vonalban
+vonalból
+vonalerõsítõ
+vonalfenntartó
+vonalhasználati
+vonaljelzés
+vonalka
+vonalkáz
+vonalkázás
+vonallal
+vonalon
+vonalrendszer
+vonalszakasz
+vonalterv
+vonaltávlat
+vonaltól
+vonalzott
+vonalzó
+vonalzótolókája
+vonalán
+vonalú
+vonat
+vonatba
+vonatkozik
+vonatkoztat
+vonatkoztatási
+vonatkoztató
+vonatkozás
+vonatkozásban
+vonatkozással
+vonatkozó
+vonatkozóan
+vonatkozólag
+vonatkísérõ
+vonatok
+vonaton
+vonatosztaga
+vonatosztály
+vonatot
+vonatra
+vonatrakomány
+vonatról
+vonattal
+vonatterhelés
+vonatvezetõ
+vonható
+vonhatóság
+vonja
+vonogatja
+vonszol
+vonszolja
+vonszolás
+vonszoló
+vonszolója
+vonszolótag
+vont
+vontat
+vontatmány
+vontatott
+vontatottan
+vontatás
+vontatási
+vontató
+vontató-repülõgép
+vontatóerõ
+vontatógõzös
+vontatóhajó
+vontatókocsi
+vontatókábel
+vontatókötél
+vontatókötélre
+vontatókötélrõl
+vontatólánc
+vontatórúd
+vontatóval
+vontatóút
+vontcsövû
+vonul
+vonulat
+vonulás
+vonulási
+vonuló
+vonyít
+vonyítás
+vonz
+vonzalmat
+vonzalom
+vonzerejébõl
+vonzerejét
+vonzerõ
+vonzerõt
+vonzott
+vonzás
+vonzása
+vonzást
+vonzó
+vonzódik
+vonzódás
+vonzódó
+vonzóerõ
+vonzóerõt
+vonzóság
+vonás
+vonásai
+vonások
+vonásokban
+vonásuk
+vonásának
+vonít
+vonítás
+vonó
+vonóerõ
+vonóháló
+vonóhálót
+vonóhálóval
+vonóhúzás
+vonókerék
+vonóköteles
+vonókötél
+vonólánc
+vonós
+vonósnégyes
+vonósok
+vonószenekar
+vonószõr
+vonót
+vonóteljesítmény
+vonóvezetés
+vulgarizmus
+vulgarizál
+vulgarizálás
+vulgáris
+vulkanikus
+vulkanizáció
+vulkanizál
+vulkanizálható
+vulkanizált
+vulkanizálás
+vulkanizáló-készülék
+vulkanizálódik
+vulkanizálóforma
+vulkán
+vulkáncsatorna
+vulkáni
+vulkánoz
+vulkánozás
+vulkántorok
+vurstli
+vurstli-rész
+vurstliba!
+vurstlirész
+vád
+vádat
+váddal
+vádemelés
+vádemelõ
+vádesküdtszék
+vádhatározat
+vádirat
+vádja
+vádli
+vádlott
+vádlottak
+vádló
+vádlón
+vádol
+vádolható
+vádolják
+vádoló
+vádpont
+vádpontok
+vág
+vág!
+vágat
+vágathajtás
+vágatkihajtás
+vágatlan
+vágattal
+vágd,
+vágja
+vágjunk
+vágják
+vágni
+vágott
+vágta
+vágtat
+vágtában
+vágtázik
+vágva
+vágy
+vágy,
+vágyai
+vágyaiban
+vágyainak
+vágyakozik
+vágyakozva
+vágyakozás
+vágyakozó
+vágyat
+vágyi
+vágyik
+vágytól
+vágytól,
+vágyálom
+vágyó
+vágyódik
+vágyódás
+vágyódó
+vágány
+vágánykotró
+vágányköz
+vágányokra
+vágányra
+vágányrendszer
+vágányszint-kifutás
+vágányt
+vágánytalan
+vágányvégzõdés
+vágányzat
+vágányú
+vágás
+vágási
+vágásmélység
+vágásterület
+vágásérettség
+vágású
+vágó
+vágóasztal
+vágódeszka
+vágódik
+vágódurbincs
+vágódva
+vágófegyver
+vágófegyverek
+vágógép
+vágóhíd
+vágóhídi
+vágólegény
+vágómarha
+vágópisztoly
+vágósarkantyú
+vágószerkezet
+vágószerszám
+vágótû
+vágóállat
+vágóél
+váj
+vájat
+vájatmezõi
+vájatot
+vájatvég
+vájdling
+vájja
+vájolat
+vájt
+vájvég
+vájár
+vájóvésõ
+vákuum
+vákuumcsõ
+vákuummal
+váladék
+váladékkal
+váladékot
+válassz
+válasszal
+válasz
+válasza
+válaszadás
+válaszadó
+válaszfal
+válaszfala
+válaszképpen
+válaszol
+válaszoljon
+válaszolt
+válaszolva
+válaszolás
+válaszoló
+választ
+választani
+választható
+választhatóság
+választják
+választmány
+választmányi
+választott
+választottja
+választás
+választási
+választások
+választásokat
+választásom
+választásom,
+választáson
+választásra
+választást
+választék
+választékos
+választékosan
+választékosság
+választó
+választófal
+választófejedelem
+választófejedelemség
+választói
+választójel
+választójog
+választójoggal
+választójogot
+választójogért
+választók
+választókerület
+választókerületet
+választópolgár
+választórúd
+választóvonal
+válaszul
+válaszát
+válaszúton
+válfaj
+válik
+váll
+váll-lap
+válla
+vállak
+vállal
+vállalat
+vállalati
+vállalatnak
+vállalatvezetõ
+vállalatvezetõség
+vállalj
+vállalja
+vállalkozik
+vállalkozás
+vállalkozásba
+vállalkozó
+vállalni
+vállalt
+vállaltam,
+vállaló
+vállat
+válldobás
+vállfa
+vállhoz
+vállizom
+vállkendõ
+vállkõ
+vállon
+vállpánt
+vállra
+vállra!
+vállrándítás
+vállrándítással
+vállrész
+vállszalag
+vállszélesség
+vállszíj
+válltámasz
+válltáska
+vállveregetés
+vállvetve
+vállvonás
+vállához
+vállára
+válláról
+vállát
+vállával
+vállú
+válnak
+válni
+válogat
+válogatott
+válogatottba
+válogatás
+válogató
+válogatóasztal
+válogatógép
+válogatós
+válogatósan
+válogatósság
+válság
+válságos
+válságosra
+válságossá
+vált
+váltakozik
+váltakoztat
+váltakozva
+váltakozás
+váltakozása
+váltakozó
+váltan
+váltani
+váltható
+váltja
+váltják
+váltogat
+váltogatja
+váltogatják
+váltogatott
+váltott
+váltotta
+változat
+változatban
+változatlan
+változatlanság
+változatlanul
+változatos
+változatossá
+változatosság
+változhatatlan
+változhatatlanság
+változik
+változtat
+változtathatatlan
+változtatható
+változtatja
+változtatás
+változtató
+változás
+változásakor
+változási
+változások
+változékony
+változékonyság
+változó
+váltságdíj
+váltságdíjat
+váltás
+váltása
+váltásokkal
+váltással
+váltó
+váltó-
+váltóarbitrázs
+váltóesedékesség
+váltófutás
+váltógazdaságot
+váltóhely
+váltóház
+váltójog
+váltók
+váltókar
+váltókerék-állító
+váltókibocsátó
+váltóláda-himba
+váltóláda-tengely
+váltóláz
+váltópilóta
+váltópénz
+váltót
+váltótárs
+váltóállítás
+váltóállító
+váltóügynök
+váltóüzlet
+válva
+vályog
+vályú
+vályúnyi
+vályús
+vályúszerû
+válás
+válása
+váló
+válópert
+vám
+vámalakiságok
+vámbehozatali
+vámbejelentés
+vámbárca
+vámbódé
+vámcsalás
+vámcsaló
+vámdíjszabás
+vámeljárás
+vámhatár
+vámhatárral
+vámhivatal
+vámhivatalnok
+vámház
+vámhíd
+vámilleték
+vámjegy
+vámkezeltet
+vámkezelés
+vámkezelési
+vámkirendeltség
+vámköteles
+vámlevél
+vámmentes
+vámmentesen
+vámnyilatkozat
+vámnyugta
+vámok
+vámolás
+vámon
+vámos
+vámot
+vámpolitika
+vámpír
+vámpírok
+vámpírokban
+vámpírszerû
+vámraktár
+vámrendszer
+vámsorompó
+vámsorompók
+vámszabad
+vámszabályok
+vámszabályzat
+vámszedési
+vámszedõ
+vámszerzõdés
+vámtarifa
+vámtarifát
+vámterület
+vámtiszt
+vámtisztviselõ
+vámtétel
+vámunió
+vámvisszatérítési
+vámvizsgálat
+vámvizsgálaton
+vámvizsgáló
+vámzár
+vámárunyilatkozat
+vámõr
+vámõrhajó
+vámõrizet
+vámõrség
+vámút
+vándor
+vándor-
+vándora
+vándorcirkusz
+vándordíj
+vándorkobzos
+vándorkõ
+vándorlantos
+vándorlás
+vándorlási
+vándorló
+vándormadár
+vándormunkás
+vándorol
+vándorregös
+vándorszínész
+vándorszínészkedés
+vándorzenész
+vándorénekes
+vándorúton
+vánkos
+vánkosa
+vánkosfa
+vánkosra
+vánszorgás
+vánszorog
+ványadt
+ványol
+ványolás
+ványoló
+vápa
+vár
+várakozik
+várakozni
+várakoztak
+várakozás
+várakozásban
+várakozásnak
+várakozáson
+várakozással
+várakozásának
+várakozó
+várakozóhely
+várakozólista
+várandós
+váratlan
+váratlanság
+váratlanul
+váratott
+várbevétel
+várbörtön
+várd
+várhatsz
+várhatsz!
+várható
+várhatóan
+várhányás
+várj
+várja
+várja,
+várjon
+várjuk
+várjunk
+várkapitány
+várnak
+várnod
+várok
+váromány
+várományos
+várományosa
+város
+városa
+városatya
+városatyai
+városatyaság
+városba
+városban
+városhalmaz
+városhoz
+városháza
+városi
+városiak
+városiasodás
+városkapu
+városközi
+városközpont
+városlakó
+városnak
+városnegyed
+városnézõ
+városokba
+városokban
+városon
+városrengeteg
+városrész
+várossziluett
+várost
+várostól
+városépítészet
+várral
+várt
+vártalak!
+vártam
+várthoz
+vártorony
+várva
+várárok
+váró
+várócsarnok
+várószoba
+váróterem
+várõrség
+vásott
+vászna
+vászon
+vászonajtó
+vászonbetét
+vászonfehérítõ
+vászonfüggöny
+vászonipar
+vászonkötés
+vászonkötésû
+vászonnadrág
+vászonnemû
+vászonpólya
+vászonra
+vászonroletta
+vászonroló
+vászonszalag
+vászonszegõszalag
+vászontetõ
+vászonzsák
+vásár
+vására
+vásári
+vásárlás
+vásárlási
+vásárló
+vásárlóerõ
+vásárlója
+vásárlóközönség
+vásárol
+vásárolható
+vásárolni
+vásároz
+vásározás
+vásárt
+vásít
+váz
+váza
+vázlat
+vázlatfüzet
+vázlatkészítés
+vázlatkönyv
+vázlatos
+vázlatosan
+vázlatot
+vázlattömb
+vázol
+vázolt
+vázolás
+vázszerkezet
+vázú
+vécé
+vécécsésze
+vécéelõke
+vécékefe
+vécépapír
+vécépumpa
+vécétartály
+véd
+védekezik
+védekezni
+védekezés
+védekezésben
+védekezési
+védekezésre
+védekezõ
+védekezõen
+védelem
+védelemre
+védelme
+védelmez
+védelmezi
+védelmezés
+védelmezõ
+védelmi
+védelmében
+védenc
+véderõ
+védett
+védettnek
+védettség
+védetté
+védhetetlen
+védhetõ
+védi
+védjegy
+védjegyet
+védnök
+védnöknõ
+védnökség
+védtelen
+védtelenül
+védés
+védõ
+védõ-
+védõ-oltóanyag
+védõanyag
+védõberendezés
+védõbeszéd
+védõbevonattal
+védõborítás
+védõburkolat
+védõburkolattal
+védõburok
+védõbástya
+védõellenzõ
+védõernyõ
+védõeszközök
+védõfal
+védõfegyverzet
+védõgát
+védõhuzat
+védõháló
+védõjátékos
+védõjátékosok
+védõkarmantyú
+védõkesztyû
+védõkezelése
+védõkorlát
+védõkíséret
+védõkíséretet
+védõlap
+védõlemez
+védõmaszk
+védõoltás
+védõponyva
+védõpánt
+védõruházat
+védõrács
+védõrácsa
+védõszelence
+védõszemüveg
+védõszent
+védõszer
+védõszerkezet
+védõtest
+védõtetõ
+védõtorlasz
+védõvám
+védõvámmal
+védõvámrendszer
+védõálarc
+védõügyvéd
+vég
+vég-
+végbemegy
+végbizonyítványt
+végbél
+végbélkúp
+végbélnyílás
+végcél
+vége
+vége!
+vége,
+végem
+végeredmény
+végeredményben
+végerõsítõ
+véges
+véges-végig
+végesben
+végestelen
+végesvégig
+véget
+végett
+végetvetés
+végez
+végezetéig
+végezetül
+végezni
+végeztek
+végeztem
+végeztet
+végeztével
+végeztünk
+végezz!
+végeérhetetlen
+végeérhetetlenül
+végfokozat
+végforrpont
+véghangsúly
+véghangsúlyú
+véghatározat
+véghezvisz
+véghezvitel
+véghezvitele
+véghorogkötél
+végi
+végig
+végig-folyosós
+végigcsinál
+végigevez
+végigfolyik
+végigfosztogat
+végigfut
+végigfutott
+végighajt
+végighallgat
+végighúz
+végigjáratja
+végigjárja
+végigjátszik
+végigjátszás
+végigkalauzol
+végigkocsizik
+végigkísér
+végigküzd
+végiglapoz
+végigmegy
+végigmér
+végignéz
+végigolvas
+végigpróbál
+végigpusztít
+végigpásztáz
+végigpörget
+végigrabol
+végigrohan
+végigseprõ
+végigsimít
+végigszenved
+végigszáguld
+végigsétál
+végigsétáltatja
+végigsöpör
+végigtapint
+végigtapogat
+végigvezet
+végigvisz
+végigvág
+végigvágódik
+végigzörög
+végigérõ
+végigül
+végjáték
+végkielégítés
+végkimerülés
+végleg
+végleges
+véglegesen
+véglegesség
+véglet
+végletbe
+végletbõl
+végletek
+végletekbe
+végletekig
+végletes
+végletesség
+véglény
+véglények
+véglényi
+véglényszerû
+végmoréna
+végpont
+végpózna
+végre
+végre!
+végrehajt
+végrehajtat
+végrehajtja
+végrehajtott
+végrehajtás
+végrehajtása
+végrehajtási
+végrehajtást
+végrehajtásának
+végrehajtó
+végrehajtói
+végrehajtót
+végrendelet
+végrendeletet
+végrendeleti
+végrendeletileg
+végrendelkezik
+végrendelkezés
+végrendelkezési
+végromlás
+végszó
+végszót
+végszükség
+végsõ
+végsõkig
+végtag
+végtagbénulás
+végtagok
+végtagot
+végtagpótlás
+végtelen
+végtelenség
+végtelenségig
+végtelenségéig
+végtelenül
+végtermék
+végtetõzõ
+végtisztesség
+végtére
+végtõl
+végveszedelemben
+végveszély
+végy
+végzet
+végzetbe
+végzete
+végzetes
+végzetesen
+végzetszerû
+végzett
+végzettség
+végzetébe
+végzi
+végzik
+végzés
+végzése
+végzést
+végzõ
+végzõdik
+végzõdés
+végzõdéssel
+végzõdõ
+végzõs
+végállomás
+végállomás!
+végéhez
+végéig
+végén
+végének
+végére
+végérvényes
+végérvényesen
+végérvényesség
+végét
+végét!
+végével
+végítélet
+végösszeg
+végû
+végül
+végül,
+végütközõ
+véka
+vékonnyá
+vékony
+vékonyan
+vékonybél
+vékonydongájú
+vékonyfalemez
+vékonyodik
+vékonyodó
+vékonypénzû
+vékonyra
+vékonyság
+vékonyul
+vékonyult
+vékonyuló
+vékonyít
+vél
+vélekedik
+vélekedés
+vélelem
+vélelme
+vélelmezett
+vélem
+véleménnyel
+vélemény
+véleményalakító
+véleménye
+vélemények
+véleményeltérés
+véleményem
+véleményen
+véleményezés
+véleményformáló
+véleménynek
+véleménynyilvánítás
+véleményt
+véleményváltozás
+véleményéhez
+véleményét
+véleményû
+véletlen
+véletlenre
+véletlenszerûség
+véletlenség
+véletlenségbõl
+véletlenül
+véli,
+vélt
+vén
+véna
+vénasszony
+vének
+vénkisasszony
+vénkisasszonyos
+vénlány
+vénlányként
+vénlányos
+vénség
+vényre
+vénás
+vénülõ
+vér
+véradó
+véralkoholszint
+véraláfutásos
+vérbaj
+vérbajos
+vérbeli
+vérben
+vérbosszú
+vérbõ
+vérbõl
+vérbõség
+vércsepp
+vércsomó
+vércsoporthoz
+vércukor
+vércukortartalom
+vércukorvizsgálat
+vérderes
+vérdíj
+vére
+véreb
+vérebet
+véredény
+véredény-
+véredények
+vérengzõ
+véreres
+véres
+véreshurka
+véreztet
+vérfagyasztó
+vérfertõzés
+vérfertõzõ
+vérfürdõ
+vérhas
+vérhasi
+vérhassal
+vérhez
+vérhányás
+vérkeringés
+vérkép
+vérlázító
+vérmes
+vérmesség
+vérmérgezés
+vérmérséklet
+vérnyomás
+vérontás
+vérpad
+vérpadra
+vérpezsdítõ
+vérplazma
+vérpálya
+vérrel
+vérrokonság
+vérrög
+vérsavó
+vérsejt
+vérsejtek
+vérszegény
+vérszegénység
+vérszivárgás
+vérszomj
+vérszomjas
+vérszomjassá
+vérszopó
+vérszívása
+vérszívó
+vért
+vértanú
+vértanúhalál
+vértanúhalállal
+vértanúk
+vértanúság
+vértanúságot
+vértanút
+vértelen
+vértelenség
+vértes
+vértestecske
+vértestecskék
+vértez
+vértezet
+vértezett
+vértezés
+vértolulás
+vértolulásos
+vértócsa
+vértõl
+vérveszteség
+vérvizsgálat
+vérvörös
+vérzik
+vérzékeny
+vérzés
+vérzõ
+vérátömlesztés
+vérátömlesztést
+vérébõl
+vérét
+vérözön
+vérükig
+vés
+véset
+vésett
+vésettel
+vésnök
+vész
+vészcsap
+vészcsengõt
+vészes
+vészfék
+vészfény
+vészhírnök
+vészjel
+vészjelet
+vészjelzés
+vészjelzõ
+vészjelzõcsengõ
+vészjósló
+vészjóslóan
+vészkijárati
+vészkijáratzár
+vészmadár
+vészt
+vésztartalék
+vészterhes
+vészvillogó
+vésés
+vésõ
+vésõgép
+vésõt
+vésõtû
+vésõvel
+vét
+vétek
+vétel
+vétele
+vételen
+vételez
+vételi
+vételár
+vételárba
+vétet
+vétkeinket
+vétkem
+vétkes
+vétkesnek
+vétkesség
+vétkezik
+vétkét
+vétség
+vétó
+vétójog
+vétójoga
+vétójogot
+vétót
+véve
+vézna
+víg
+vígan
+vígan!
+vígjáték
+vígjátéki
+vígjátékszínész
+vígjátékszínésznõ
+vígjátékíró
+vígopera
+vígság
+víkendház
+vírus
+vírushordozó
+vív
+vívmány
+vívás
+vívó
+vívótõr
+vívóállásba
+víz
+víz-
+víz-odavezetés
+vízagyú
+vízalámosás
+vízbe
+vízbeesés
+vízbemerülés
+vízben
+vízben!
+vízbeszerzés
+vízbeugrás
+vízbevetése
+vízbõ
+vízbõl
+vízcsap
+vízcsapot
+vízduzzasztó
+vízellátás
+vízellátó
+vízelvezetõ
+vízelvonás
+vízelõcsõ
+vízemelõ
+vízen
+vízen)
+vízerõmû
+vízerõmûbõl
+vízerõtan
+vízesés
+vízfej
+vízfejû
+vízfejûség
+vízfelszín-szabályozó
+vízfelvevõ
+vízfelvétel
+vízfelület
+vízfelületet
+vízfestmény
+vízfesték
+vízfestékkel
+vízfestés
+vízfodrozódás
+vízfogó
+vízfolyás
+vízfolyásokban
+vízfolyáson
+vízfolyással
+vízforraló
+vízfüggöny
+vízgyûjtõ
+vízgépészet
+vízhatlan
+vízhatlanná
+vízhatlanság
+vízhatlanít
+vízhatlanítás
+vízhordta
+vízhordó
+vízhozam
+vízhullám
+vízhálózata
+vízhányó
+vízháztartás
+vízhûtésû
+vízi
+vízibicikli
+vízibusz
+vízikerék
+vízikerék-lapát
+vízikígyó
+vízililiom
+víziló
+vízimadár
+vízinövény-kert
+vízipipa
+vízipisztoly
+vízipoloska
+víziszellem
+víziszony
+vízisí
+vízisíel
+vízisíelõ
+vízitorma
+vízityúk
+vízió
+vízjel
+vízjeles
+vízjellel
+vízkamra
+vízkereszt
+vízkiemelés
+vízkieresztõ
+vízkimerés
+vízkiszorítás
+vízkiszorítása?
+vízkivezetõ
+vízkészlet
+vízkór
+vízkórosság
+vízkõ
+vízkõ-eltávolítás
+vízkõképzõdés
+vízkõtõl
+vízkõvel
+vízköpõ
+vízköves
+vízleeresztõ
+vízlevezetõ
+vízlépcsõ
+vízmagasság
+vízmedence
+vízmelegítõ
+vízmelléki
+vízmennyiség-mérõ
+vízmentes
+vízmerítõ
+vízmerítõ-emelõ
+vízmerõ
+vízmosta
+vízmosás
+vízmosás-kötés
+vízmosásos
+vízmosásossá
+vízmélység
+vízmûtan
+vízmûtani
+vízmûvek
+víznyelõ
+víznyomásos
+vízokozta
+vízoszlop
+vízpart
+vízre
+vízreszállás
+vízréteg
+vízsajtó
+vízsodorta
+vízsugaras
+vízsugár
+vízsugárfejtõ
+vízsugárral
+vízszakasz
+vízszint
+vízszintes
+vízszintesen
+vízszintessé
+vízszintesség
+vízszintezõ
+vízszintszabályzó
+vízszolgáltatás
+vízszám
+vízszínû
+víztartalmú
+víztartály
+víztartálya
+víztartályokat
+víztartó
+víztaszító
+víztelen
+víztelenít
+víztelenítés
+víztelenítõ
+víztisztaság
+víztisztító
+víztorony
+víztároló
+víztározó
+víztér
+víztõl
+víztölcsér
+víztömeg
+vízum
+vízummal
+vízumot
+vízvezeték
+vízvezetéket
+vízvirágzás
+vízvonal
+vízválasztó
+vízzel
+vízzel)
+vízzárás
+vízzáró
+vízzé
+vízágyú
+vízállás
+vízálló
+vízállóság
+vízáteresztõ
+vízépítés
+vízépítési
+vízépítéstan
+vízépítõ
+vízóra
+vízöblítés
+vízöblítéses
+vízöblítõ
+vízöntõ
+vízüveg
+võfély
+võlegény
+võlegénybaj
+vödör
+völgy
+völgyelõ
+völgykatlan
+völgyszoros
+völgytorkolat
+völgytorok
+vörheny
+vörhenyes
+vörös
+vörösbarna
+vörösbe
+vörösbegy
+vörösbor
+vörösbor-fröccs
+vörösen
+vöröses
+vörösesbarna
+vöröseskék
+vörösesszõke
+vörösessárga
+vörösfa
+vörösfenyõ
+vörösfenyõbõl
+vöröshagyma
+vöröshajú
+vöröshasú
+vöröskereszt
+vöröskorhadás
+vöröslik
+vörösokker
+vörösre
+vörösréz
+vörösrézdrót
+vörösrézsodrony
+vörösrézérc
+vörösszemû
+vörössé
+vörösség
+vörösvaskõ
+vörösvasérc
+vörösvérsejt-halmaz
+vörösöntvény
+wales-i
+watt
+watt-áram
+western
+whisky
+whiskyhez
+whistjáték
+whistverseny
+wigwam
+wolfram
+wolframacél
+wolframit
+wolframszálas
+wurlitzer
+x-edik
+xeresi
+xerox-gép
+xeroxozik
+xilofonszerû
+xilol
+yamgyökér
+yard
+yardos
+yorkshiri
+zab
+zabagép
+zabdara
+zabkása
+zabkásaleves
+zabla
+zablarúd
+zablepény
+zabliszt
+zabláját
+zablát
+zabnyák
+zabnyákleves
+zabolátlan
+zabolátlanság
+zabolátlanul
+zaboláz
+zabos
+zabpehely
+zabrál
+zabszem
+zabál
+zabálda
+zabáltat
+zabálás
+zabáló
+zabálós
+zacc
+zaciba
+zaciban
+zacskó
+zafír
+zafírkék
+zagyva
+zagyvalék
+zagyvaság
+zaj
+zaja
+zajcsökkentõ
+zajgó
+zajjal
+zajlani
+zajlik
+zajló
+zajmentes
+zajong
+zajongás
+zajongó
+zajos
+zajosan
+zajosság
+zajszint
+zajt
+zajtalan
+zajtalanítja
+zajártalom
+zajától
+zaklass!
+zaklat
+zaklatott
+zaklatottság
+zaklatás
+zaklatással
+zaklató
+zakó
+zakókabát
+zamat
+zamata
+zamatos
+zamatosság
+zamatát
+zanót
+zarándok
+zarándoklat
+zavar
+zavara
+zavarba
+zavarbaejtõ
+zavarban
+zavargás
+zavargó
+zavarja
+zavarkeltés
+zavarmentes
+zavarodott
+zavarodottság
+zavarok
+zavarokra
+zavaros
+zavarosan
+zavarosban
+zavarossá
+zavarosság
+zavarszûrõ
+zavart
+zavartalan
+zavartan
+zavartasd
+zavartatja
+zavarás
+zavaró
+zavaróan
+zavarólag
+zebra
+zebu
+zecchino
+zeg-zug
+zegzug
+zegzugos
+zegzugosan
+zegzugát
+zeke
+zeller
+zelleres
+zellerszár
+zen
+zendül
+zendülés
+zendülést
+zendülõ
+zene
+zenebona
+zenebonát
+zenedarab
+zenedarabot
+zenedráma
+zenedélután
+zenegép
+zenei
+zeneietlen
+zenekar
+zenekari
+zenekarra
+zenekedvelõ
+zenekioszk
+zenemû
+zenepavilon
+zeneszerzés
+zeneszerzõ
+zeneszóval
+zeneértõ
+zeng
+zengett
+zengi
+zengzetes
+zengzetesség
+zengés
+zengõ
+zenit
+zenit-
+zeniten
+zeniti
+zenélni
+zenélõ
+zenélõdoboz
+zenés
+zenész
+zenészek
+zenét
+zenével
+zeolit
+zeppelin
+zerge
+zergebõr
+zergebõrszín
+ziccer
+zigomorf
+zihál
+zihálva
+zihálás
+ziháló
+ziliz
+zilált
+ziláltan
+zimankós
+zipzár
+zipzáras
+zipzárat
+zivatar
+zizeg
+zizegés
+zodiákus
+zokni
+zoknitartó
+zokog
+zokogás
+zokogó
+zokon
+zokszó
+zománc
+zománcedény
+zománcfestmény
+zománcfesték
+zománcfestékkel
+zománcfestés
+zománcfestõ
+zománclakkozás
+zománclábas
+zománcmunka
+zománcmáz
+zománcmázas
+zománcmûvész
+zománcmûvészet
+zománcos
+zománcoz
+zománcozott
+zománcozás
+zománcozó
+zománcáru
+zongora
+zongorabillentés
+zongoradarab
+zongoradarabok
+zongorahúr
+zongorakivonat
+zongorakísérõ
+zongoramûvész
+zongoraverseny
+zongoraátirat
+zongorista
+zongorán
+zongorázik
+zoológia
+zoológiai
+zoológus
+zord
+zordon
+zordság
+zordul
+zrí
+zrít
+zsakett
+zsakettkabát
+zsalu
+zsaluban)
+zsalugáterlap
+zsalugáterléc
+zsalus
+zsaluzás
+zsaluzóléc
+zsanér
+zsanérokat
+zsaponlakk
+zsargon
+zsargon-kifejezés
+zsarnok
+zsarnoki
+zsarnokian
+zsarnokoskodik
+zsarnokoskodás
+zsarnokság
+zsarol
+zsarolás
+zsaroló
+zsaru
+zsaruk
+zsarátnok
+zseb
+zsebedbõl!
+zsebeit
+zsebel
+zsebfedõ
+zsebhegedû
+zsebkendõ
+zsebkés
+zsebkönyv
+zseblámpa
+zsebmetszõ
+zsebpartitúra
+zsebpénz
+zsebpénzt
+zsebre
+zsebszámológép
+zsebtolvaj
+zsebtolvajnak
+zsebtolvajok
+zsebébe
+zsebében
+zsebébõl
+zsebóra
+zselatin
+zselatinszerû
+zsellér
+zselé
+zsemle
+zsemlemorzsa
+zsemlye
+zsendül
+zsenge
+zseni
+zsenilia
+zseninek
+zseton
+zsett
+zsettfekete
+zsibbad
+zsibbadt
+zsibbadtan
+zsibbadtság
+zsibbadtsága
+zsibbadás
+zsibbadó
+zsibbasztó
+zsibbasztóan
+zsibongás
+zsibvásár
+zsibáru
+zsibárus
+zsidó
+zsidócsillag
+zsidógyûlölet
+zsidógyûlölõ
+zsidók
+zsidómészárlás
+zsidónegyed
+zsidóverés
+zsigerek
+zsigeri
+zsigerizom
+zsigerlõ
+zsilip
+zsilipel
+zsilipen
+zsilipkapu
+zsilipköz
+zsilippel
+zsiliptartó
+zsiliptábla
+zsindely
+zsindelyez
+zsineg
+zsinór
+zsinóregyenes
+zsinórkerék
+zsinóron
+zsinóroz
+zsinórpadlás
+zsinórral
+zsinórról
+zsiradék
+zsirardi
+zsirardikalap
+zsiráf
+zsivaj
+zsivajgó
+zsivajt
+zsivány
+zsizsik
+zsizsikes
+zsoké
+zsoldjegyzék
+zsoldos
+zsolozsma
+zsolozsmája
+zsolozsmák
+zsolozsmáz
+zsoltár
+zsoltárai
+zsoltárköltõ
+zsoltárkönyv
+zsoltárok
+zsoltáros
+zsoltároz
+zsoltárt
+zsoltáréneklés
+zsoltáréneklõ
+zsoltárénekszerû
+zsoltáríró
+zsombékos
+zsomp
+zsonglõr
+zsongva
+zsongás
+zsozsó
+zsuga
+zsugori
+zsugorian
+zsugoriság
+zsugorodás
+zsugorít
+zsugorított
+zsugorítás
+zsupsz
+zsupsz,
+zsuzsu
+zsák
+zsákba
+zsákbamacska
+zsákhordó
+zsákháló
+zsákkabát
+zsákmánnyal
+zsákmány
+zsákmánybíróság
+zsákmányol
+zsákmányolt
+zsákmányolás
+zsákmányoló
+zsákmányra
+zsákmányt
+zsákmányul
+zsákmányává
+zsákol
+zsákos
+zsákruha
+zsákutca
+zsákutcába
+zsákvászon
+zsálya
+zsámoly
+zsáner
+zsánerkép
+zsávoly
+zsázsa
+zsémbel
+zsémbelés
+zsémbes
+zsémbesen
+zsémbeskedik
+zsémbesség
+zsír
+zsírdaganat
+zsírfolt
+zsírfény
+zsírjában
+zsírját
+zsírkréta
+zsírkõ
+zsírkõszerû
+zsírlerakódás
+zsíros
+zsírosodik
+zsírosszén
+zsírosság
+zsíroz
+zsírozó
+zsírozószer
+zsírpacni
+zsírpapír
+zsírpecsétes
+zsírpárna
+zsírral
+zsírréteget
+zsírtalan
+zsírtalanít
+zsírtalanítás
+zsírtalanító
+zsírtól
+zsírzófej
+zsöllye
+zsörtölõdik
+zsörtölõdõ
+zsúfol
+zsúfolt
+zsúfoltság
+zsúfolódik
+zsúpfedél
+zsúpol
+zsúppal
+zsúptetõ
+zsúrkocsi
+zsúrszendvics
+zsúrt
+zsúrterítõ
+zsûri-emelvény
+zsüri
+zsüritag
+zubog
+zubogás
+zuboly
+zug
+zuga
+zugaiban
+zugoly
+zugprókátor
+zugtõzsde
+zugárus
+zugát
+zugíró
+zuhan
+zuhany
+zuhanyfürdõ
+zuhanyoz
+zuhanyozik
+zuhanyozás
+zuhanyozó
+zuhanyrózsa
+zuhanyzófüggöny
+zuhanyátkapcsoló
+zuhanás
+zuhanásszerûen
+zuhanóbombázás
+zuhanóbombázást
+zuhanóbombázó
+zuhanórepülés
+zuhanórepüléssel
+zuhanórepülést
+zuhatag
+zuhog
+zuhog,
+zuhogott
+zuhogó
+zuhé
+zulu
+zuppan
+zuzmó
+zálog
+záloga
+zálogba
+zálogban
+zálogból
+zálogház
+zálogházban
+zálogjog
+zálogjogot
+zálogkölcsönzõ
+záloglekötés
+záloglevél
+záloglevél-tartozás
+záloglevél-tulajdonos
+zálogolás
+zálogosdi
+zálogtárgyak
+zálogául
+záp
+zápfog
+zápor
+záporesõ
+záporfelhõ
+záporfelhõk
+záporfront
+záporoz
+záporozó
+záptojás
+záptojásokkal
+zár
+záradék
+záralkotás
+záralkotással
+zárat
+zárba
+zárda
+zárdai
+zárgondnok
+zárható
+zárja
+zárka
+zárkózott
+zárkózottság
+zárkózz!
+zárlat
+zárlatot
+zárnyelv
+zárol
+zárszó
+zárt
+zárta
+zárthely-iszony
+zárthelyi
+zártkörû
+zárul
+zárva
+zárva!
+zárvatartás
+zárvány
+zárás
+zárása
+záró
+zárócsavar
+záródik
+záródísz
+záródíszrajzoló
+záródó
+záróharang
+záróizom
+záróizom-
+zárójel
+zárójelbe
+zárójelenet
+zárókapcsoló
+zárókilincs
+zárókõ
+zárólapja
+zárólemez
+záróléc
+zárópecek
+zárópecekkel
+záróponton
+záróretesz
+záróretesze
+zárószelep
+zárószerkezet
+zárótûz
+záróvezeték
+záróvizsga
+záróvonal
+záróöv
+zászló
+zászlóalj
+zászlóaljparancsnok
+zászlóba
+zászlócska
+zászlódísz
+zászlódíszbe
+zászlódíszben
+zászlógomb
+zászlójeleket
+zászlójelzés
+zászlójú
+zászlók
+zászlókkal
+zászlórúd
+zászlós
+zászlóshajó
+zászlósi
+zászlót
+zászlótartó
+zászlóval
+zászlóvivõ
+zászlóõr
+zátony
+zátonyok
+zátonyon
+zátonyra
+zátonyról
+závár
+závárzat
+zérus
+zérusfok
+zéruspont
+zéró
+zéróra
+zóna
+zónák
+zökken
+zökkent
+zökkenés
+zökkenésszerû
+zökkenõ
+zökkenõk
+zökkenõkkel
+zökkenõmentes
+zökkenõmentesen
+zöld
+zöld-
+zöldbab
+zöldbe
+zöldellõ
+zöldes
+zöldesszürke
+zöldfõzelék
+zöldfülû
+zöldfülûség
+zöldhasú
+zöldje
+zöldpaprika
+zöldre
+zöldség
+zöldség-
+zöldséges
+zöldségféle
+zöldségfélék
+zöldségkertész
+zöldségleves
+zöldségszeletelõ
+zöldtakarmány
+zöldtakarmányfélék
+zöldtrágya
+zöldövezet
+zöldül
+zöm
+zöme
+zömít
+zömített
+zömítés
+zömök
+zönge
+zöngés
+zöngésen
+zöngésít
+zöngétlen
+zörej
+zörejmentes
+zörejmentesíti
+zörejmentesítés
+zörejvágó
+zörget
+zörgés
+zörgõ
+zörren
+zörög
+zörögnek
+zörögve
+zörömböl
+zörömbölés
+zöttyen
+zötykölõdik
+zötykölõdtet
+zötykölõdés
+zötyög
+zötyögtet
+zötyögve
+zúdít
+zúg
+zúgolódik
+zúgolódva
+zúgolódás
+zúgolódó
+zúgott
+zúgva
+zúgás
+zúgó
+zúgója
+zúgón
+zúz
+zúzalék
+zúzda
+zúzmara
+zúzmaraképzõdés
+zúzmarás
+zúzott
+zúzza
+zúzás
+zúzó
+zúzódik
+zúzódás
+zúzódást
+zúzógép
+zúzómalom
+zúzómû
+zûr
+zûrzavar
+zûrzavara
+zûrzavaros
+zûrzavart
+zülleszthetõ
+züllesztõ
+züllik
+züllés
+züllött
+züllötten
+züllöttség
+zümmög
+zümmögés
+zümmögõ
diff --git a/etc/dict/words.no b/etc/dict/words.no
new file mode 100644
index 0000000..54c2a85
--- a/dev/null
+++ b/etc/dict/words.no
@@ -0,0 +1,104810 @@
+Aberdeen
+Adresseavisen
+Adresseavisens
+Afghanistan
+Afrika
+Afrikas
+Afrodite
+Aftenposten
+Aftenpostens
+Agder
+Agders
+Aker
+Akergruppen
+Akergruppens
+Akersbanene
+Akersgata
+Akershus
+Akilles
+Akropolis
+Alabama
+Alabamas
+Alaska
+Albania
+Albert
+Alberta
+Aleksander
+Alexandria
+Algerie
+Alladin
+Allah
+Alnabru
+Alnesgard
+Alnor
+Alsace
+Alstad
+Alstahaug
+Alta
+Alvdal
+Amazonas
+Amerika
+Amerikas
+Amnesty
+Amsterdam
+Amunds
+Amundsen
+Amundsens
+Anchorage
+Anders
+Andersen
+Andersens
+Anderssen
+Anderssens
+Andorra
+Andreas
+Andreassen
+Andreassens
+Andøya
+Angelikk
+Angels
+Angelsen
+Angelsens
+Angola
+Anita
+Ankara
+Ankenes
+Anne
+Antarktis
+Antillene
+Antoinette
+Anton
+Antwerpen
+Antwerpens
+Apollon
+Appenninene
+Arabia
+Arabias
+Ararat
+Arbeiderpartiet
+Arbeiderpartiets
+Arendal
+Argentina
+Argentinas
+Argus
+Arilds
+Aristoteles
+Arizona
+Arkansas
+Arkhangelsk
+Arktis
+Arna
+Arnardo
+Arnulf
+Arnulv
+Asbjørg
+Asbjørn
+Aschehoug
+Aschehougs
+Asgaut
+Asgeir
+Asia
+Askim
+Askøy
+Aslak
+Aslaug
+Asle
+Asmund
+Astrid
+Astrup
+Aswan
+Aten
+Atens
+Athen
+Athens
+Atlanteren
+Atlanterens
+Atlanterhavet
+Atlanterhavets
+Atlanterhavs
+Atlantic
+Aud
+Augsburg
+Aukra
+Aurland
+Aurskog
+Austevoll
+Australia
+Avaldsnes
+Axel
+Azorene
+Babylon
+Babyloner
+Bach
+Bagdad
+Bahamas
+Bahrain
+Baktus
+Balaton
+Balder
+Baldre
+Balestrand
+Bali
+Balkanlandene
+Baltimore
+Bamble
+Bangkok
+Bangladesh
+Barbados
+Barcelona
+Bardu
+Bardufoss
+Barentshavet
+Barentshavets
+Baudelaire
+Bayern
+Beatles
+Beauforthavet
+Beauforthavets
+Beaufortskala
+Beaufortskalaen
+Beaufortskalaens
+Beirut
+Bekkelaget
+Bekkelagets
+Belfast
+Belgia
+Bellevue
+Belvedere
+Benelux
+Bengal
+Bengaler
+Beograd
+Bergen
+Bergens
+Bergensbanen
+Bergensbanens
+Bergenshallen
+Bergenshallens
+Bergenshalvøens
+Bergensregion
+Bergensregionen
+Bergensregionens
+Bergprekenen
+Bergprekenens
+Beringstredet
+Beringstredets
+Berlin
+Bermuda
+Bern
+Bhutan
+Biafra
+Bill
+Biscaya
+Bislett
+Bjørgvin
+Blindern
+Blitz
+Blitzer
+Bømlo
+Bodø
+Boeing
+Bokn
+Bolivia
+Bologna
+Bordeaux
+Borre
+Borrene
+Boston
+Botswana
+Brasil
+Brasilia
+Brasils
+Bristol
+Broadway
+Brooklyn
+Bærum
+Brussel
+Bruxelles
+Bucuresti
+Budapest
+Buddha
+Buenos
+Bulgaria
+Bull
+Bunnefjorden
+Bunnefjordens
+Burma
+Burundi
+Buskerud
+Bygdøy
+California
+Canada
+Cannes
+Cape
+Capen
+Capene
+Capens
+Caper
+Cern
+Ceylon
+Chamonix
+Chicago
+Chile
+Chopin
+Cicero
+Cobol
+Coca
+Colombia
+Colorado
+Colosseum
+Columbus
+Costa
+Cæsar
+Cuba
+Dakota
+Dalane
+Danmark
+Danmarks
+Dardanellene
+Debussy
+Delhi
+Detroit
+Deutschland
+Dionysos
+Djakarta
+Djibouti
+Dombås
+Dominica
+Dovre
+Drøbak
+Dublin
+Durban
+EURATOM
+Ecuador
+Edinburgh
+Efta
+Egersund
+Eggedal
+Egypt
+Eidsivating
+Eidsvoll
+Eidsvollsmann
+Eidsvollsmannen
+Eidsvollsmannens
+Eidsvollsmenn
+Eidsvollsmennene
+Eidsvollsmennenes
+Eidsvollsmenns
+Eigersund
+Elfenbeinskysten
+Elfenbeinskystens
+Elsa
+Else
+Elverum
+Emil
+England
+Englands
+Eriks
+Eriksen
+Eriksens
+Escort
+Estland
+Etiopia
+Europa
+Europarådet
+Europarådets
+Europas
+Farsund
+Fiat
+Fiji
+Filippinene
+Fillefjell
+Finansdepartementet
+Finansdepartementets
+Finland
+Finlands
+Finnmark
+Finnmarken
+Finnmarkens
+Finnmarkskysten
+Finnmarkskystens
+Finnmarksvidda
+Finse
+Firenze
+Five
+Fjordane
+Flekkefjord
+Flesland
+Florida
+Fm
+Folldal
+Ford
+Fornebu
+Fortran
+Foundland
+Francisco
+Frankfurt
+Frankrike
+Frankrikes
+Førde
+Fredrikstad
+Frelsesarmeen
+Frionor
+Frognerparken
+Frognerparkens
+Frostating
+Færøyene
+Fusa
+Ga
+Galdhøpiggen
+Galdhøpiggens
+Galilea
+Gambia
+Gardermoen
+Gardermoens
+Gausta
+Geilo
+Geiranger
+Gestapo
+Ghana
+Gibraltar
+Gjøvik
+Glomma
+Godthåb
+Goethe
+Golfstrømmen
+Golfstrømmens
+Gotland
+Granvin
+Greenwich
+Grefsen
+Grefsens
+Grenada
+Grenoble
+Grieg
+Grimstad
+Grønland
+Grønlands
+Groa
+Guatemala
+Gudbrandsdalen
+Gudbrandsdalens
+Guinea
+Gular
+Gulating
+Guyana
+Gyldendal
+Gynt
+Haag
+Hadeland
+Hafrsfjord
+Haiti
+Haitier
+Hakadal
+Halden
+Haldens
+Hallingdal
+Hallingdalen
+Hallingdalens
+Haltenbanken
+Haltenbankens
+Halvdan
+Hammerfest
+Hanoi
+Harald
+Hardanger
+Hardangervidda
+Harstad
+Harvard
+Haugesund
+Haukelifjell
+Haukeligrend
+Havanna
+Hebridene
+Hedmark
+Heimskringla
+Hellas
+Helsingfors
+Helsinki
+Hemnes
+Hemsedal
+Hilton
+Hiroshima
+Hitler
+Hjaltland
+Hjerkinn
+Håkon
+Hålogaland
+Hønefoss
+Hokksund
+Holland
+Hollywood
+Holmenkolldagen
+Holmenkolldagens
+Holmenkollen
+Holmenkollens
+Holmestrand
+Honduras
+Honningsvåg
+Hordaland
+Hort
+Horte
+Horten
+Hortens
+Hundorp
+Hurum
+Huseby
+Høyanger
+Hydros
+Høyres
+Iata
+Ibsen
+Ibsens
+Inderøy
+India
+Indias
+Indonesia
+Inge
+Inger
+Inntrøndelag
+Irak
+Iran
+Irland
+Island
+Islands
+Israel
+Israels
+Istanbul
+Italia
+Jamaica
+Jan
+Janeiro
+Japan
+Jens
+Jensen
+Jensens
+Jerusalem
+Jessheim
+Jesu
+Jesus
+Jevnaker
+Jæger
+Jordan
+Jotunheimen
+Jotunheimens
+Jæren
+Jærens
+Juan
+Jugoslavia
+Julius
+Jylland
+Kairo
+Kalevala
+Kambodsja
+Kamerun
+Kanariøyene
+Kansas
+Karasjok
+Karelen
+Karelens
+Karibia
+Karmøy
+Kashmir
+Kastrup
+Kattegat
+Kaukasus
+Kautokeino
+København
+Københavns
+Kennedy
+Kennedys
+Kenya
+Kenyas
+Kerala
+Khartoum
+Kina
+Kiribati
+Kiruna
+Klæbu
+Kobe
+Kolsås
+Komorene
+Kongsberg
+Kongsvinger
+Kopervik
+Koppang
+Korea
+Kornsjø
+Kragerø
+Krødsherad
+Kreml
+Kristiansand
+Kristiansund
+Kristus
+Kuwait
+Kvam
+Kvammen
+Kvammens
+Kvinesdal
+Kvinnherad
+Kvitsøy
+Kypros
+Kyrre
+Langfjella
+Lanka
+Laos
+Lappland
+Lars
+Larsen
+Larsens
+Larvik
+Latvia
+Leirvik
+Lenin
+Leningrad
+Lervik
+Lesja
+Levang
+Levanger
+Libanon
+Liberia
+Libya
+Liechtenstein
+Lillehammer
+Lillestrøm
+Lindesnes
+Lindås
+Lisboa
+Litauen
+Litauens
+Liverpool
+Lloyd
+Lofoten
+Lofotens
+Lofotposten
+Lofotpostens
+Lommedalen
+Lommedalens
+London
+Londons
+Longyearbyen
+Longyearbyens
+Lørenskog
+Løten
+Løtens
+Luther
+Luxembourg
+Luxemburg
+Madagaskar
+Madrid
+Magnus
+Malawi
+Malaysia
+Maldivene
+Mali
+Mallorca
+Malta
+Manchester
+Manchuria
+Mandal
+Mandsjuria
+Manhattan
+Manila
+Mao
+Marienlyst
+Marino
+Markus
+Marokko
+Marshalløyene
+Maryland
+Masi
+Mayen
+Mayens
+Medhus
+Melbu
+Melhus
+Memphis
+Mercedes
+Meråker
+Messias
+Messiasene
+Messiaser
+Mexico
+Mexicos
+Miami
+Middelhavet
+Middelhavets
+Midtøsten
+Midtøstens
+Mikkel
+Mikronesiasambandet
+Mikronesiasambandets
+Milano
+Minerva
+Minneapolis
+Minnesota
+Mississippi
+Mjøndalen
+Mjøndalens
+Mjøsa
+Måløy
+Moldjord
+Monaco
+Mongolia
+Monsen
+Monsens
+Montevideo
+Montreal
+Montreux
+Morgenbladet
+Morgenbladets
+Morgenposten
+Morgenpostens
+Mosambik
+Mosambiker
+Mosjøen
+Mosjøens
+Moskva
+Moss
+Mosterøy
+Mozart
+Mozarts
+Mørekysten
+Mørekystens
+Møsvatn
+Munch
+Murmansk
+Mussolini
+Nairobi
+Namdalen
+Namdalens
+Namibia
+Namsos
+Napoleon
+Napoleons
+Napoli
+Narvesens
+Narvik
+Nations
+Nato
+Natos
+Nederland
+Nepal
+Nesbyen
+Nesbyens
+Nesttun
+Nevada
+New
+Newfoundland
+Newsweek
+Nicaragua
+Nidaros
+Nidarosdomen
+Nidarosdomens
+Nietzsche
+Niger
+Nigeria
+Nils
+Nilsen
+Nilsens
+Nittedal
+Nora
+Norden
+Nordens
+Nordfjord
+Nordhordland
+Nordkalotten
+Nordkalottens
+Nordkapp
+Nordland
+Nordlands
+Nordmarka
+Nordmøre
+Nordostpassasjen
+Nordostpassasjens
+Nordsjøen
+Nordsjøens
+Nordstrand
+Nore
+Norefjell
+Norge
+Norges
+Normandie
+Norsjø
+Norskehavet
+Norskehavets
+Norskerenna
+Norway
+Norwegian
+Notodden
+Notoddens
+Nøtterøy
+Numedal
+Odda
+Odense
+Ofotbanen
+Ofotbanens
+Ohio
+Oklahoma
+Oksidenten
+Oksidentens
+Olav
+Oman
+Omholt
+Onsager
+Opel
+Opelen
+Opelens
+Oppdal
+Oppsal
+Oregon
+Orkanger
+Orkdal
+Orkla
+Orknøyene
+Orleans
+Osaka
+Oslo
+Oslofjord
+Oslofjorden
+Oslofjordens
+Oslos
+Ottawa
+Oxford
+Pakistan
+Palestina
+Palmas
+Panama
+Paris
+Persia
+Persiabukta
+Peru
+Philadelphia
+Picasso
+Porsche
+Porsgrunn
+Porsgrunns
+Portugal
+Praha
+Pravda
+Preussen
+Preussens
+Prisdirektoratet
+Prisdirektoratets
+Prix
+Programbladet
+Programbladets
+Pyreneene
+Rakkestad
+Randesund
+Raufoss
+Rauland
+Rauma
+Rena
+Renault
+Rendal
+Rendalen
+Rendalens
+Rennebu
+Rennesøy
+Reuter
+Reuters
+Reykjavik
+Rhodesia
+Richmond
+Rico
+Riga
+Rikskonsertene
+Ringebu
+Ringerike
+Rio
+Risør
+Rjukan
+Rockefeller
+Rodos
+Rogaland
+Rogalands
+Roma
+Romania
+Romeo
+Romerike
+Romerriket
+Romerrikets
+Romsdal
+Romsdals
+Roosevelt
+Rosenborg
+Rosenborgs
+Røros
+Rørosbanen
+Rørosbanens
+Rubbestadneset
+Rubbestadnesets
+Russland
+Ruth
+Saab
+Sahara
+Saigon
+Salisbury
+Salomonøyene
+Saloniki
+Saltdal
+Saltdalen
+Saltdalens
+Saltfjellet
+Saltfjellets
+Salvador
+Samnanger
+San
+Sandane
+Sandefjord
+Sandefjords
+Sandnes
+Sandnessjøen
+Sandnessjøens
+Sandved
+Saner
+Santa
+Santalistan
+Santiago
+Sarpsborg
+Sauda
+Scandinavian
+Schubert
+Seattle
+Selbu
+Seljord
+Senegal
+Senja
+Setesdal
+Seychellene
+Søgne
+Shakespeare
+Sheffield
+Shell
+Shells
+Shetland
+Sibir
+Sicilia
+Sidney
+Sierra
+Sigdal
+Sigurd
+Singapore
+Singaporer
+Singsaker
+Singsås
+Sira
+Sirdal
+Sjælland
+Sjølyst
+Skaga
+Skage
+Skagen
+Skagens
+Skagerrak
+Skandinavia
+Skjåk
+Skogn
+Skottland
+Skudeneshavn
+Smøla
+Småland
+Snarøya
+Snorre
+Snåsa
+Sogndal
+Sogndalen
+Sogndalens
+Solem
+Solør
+Solund
+Somalia
+Sotra
+Southampton
+Sovjetunionen
+Sovjetunionens
+Spania
+Spanias
+Spitsbergen
+Spitsbergens
+Spydeberg
+Sri
+Sørishavet
+Sørishavets
+Sørlandet
+Sørlandets
+Sørlandsbanen
+Sørlandsbanens
+Sørum
+Sørumsand
+Stabekk
+Stalin
+Stamnes
+Stangeland
+Stavang
+Stavanger
+Stavangers
+Stavern
+Steinkjer
+Steinkjers
+Stiklestad
+Stillehavet
+Stillehavets
+Stjørdal
+Stockholm
+Stockholms
+Stokmarknes
+Storbritannia
+Storbritannias
+Stord
+Storebrand
+Strasbourg
+Strindheim
+Strømsgodset
+Strømsgodsets
+Stryn
+Stuttgart
+Sudan
+Suderøyene
+Suez
+Suezkanalen
+Suezkanalens
+Suldal
+Sunndal
+Sunndalsøra
+Sunnfjord
+Sunnhordland
+Sunnmøre
+Sunnmørsposten
+Sunnmørspostens
+Sunnylven
+Sunnylvens
+Suomi
+Surinam
+Surnadal
+Svalbard
+Sveio
+Sveits
+Sverige
+Sveriges
+Svolvær
+Swaziland
+Sydkorset
+Sydkorsets
+Sykkylven
+Sykkylvens
+Syria
+Tahiti
+Taiwan
+Tallinn
+Tananger
+Tandberg
+Tanganyika
+Tanzania
+Tchad
+Teheran
+Telemark
+Tennessee
+Texaco
+Texas
+Thailand
+Tibet
+Tibets
+Tønsberg
+Tønsbergs
+Togo
+Tokyo
+Toronto
+Torshavn
+Toten
+Totens
+Trinidad
+Trøndelag
+Trøndelags
+Troja
+Troms
+Tromsø
+Trondheim
+Trondheims
+Trondheimsfjorden
+Trondheimsfjordens
+Trysil
+Tryvasshøgda
+Tsjaikovskij
+Tsjekkoslovakia
+Tunis
+Tunisia
+Tunsberg
+Tuvalu
+Tvedestrand
+Tynset
+Tynsets
+Tyrifjorden
+Tyrifjordens
+Tyrkia
+Tyskland
+Tysklands
+Tysnes
+Uganda
+Ukraina
+Ullensaker
+Ullevål
+Ulriken
+Ulrikens
+Ulvik
+Ulysses
+Umeå
+Unesco
+Ungarn
+Universitetsforlaget
+Universitetsforlagets
+Unix
+Uppsala
+Uruguay
+Ustaoset
+Ustaosets
+Utvik
+Vadsø
+Vaksdal
+Valdres
+Valhall
+Vannylven
+Vannylvens
+Varanger
+Vardø
+Vassfaret
+Vassfarets
+Vatikanet
+Vatikanets
+Vatikanstaten
+Vatikanstatens
+Vauxhall
+Vegas
+Veitrafikkloven
+Venezia
+Venezuela
+Vennesla
+Verdal
+Veritas
+Vesterålen
+Vesterålens
+Vestfold
+Vestindia
+Vestlandet
+Vestlandets
+Vestmaktene
+Vestvågøy
+Vågå
+Vietnam
+Vikersund
+Vinje
+Vinstra
+Virginia
+Vål
+Våler
+Vålerengen
+Vålerengens
+Volda
+Volkswagen
+Volkswagens
+Volvo
+Voss
+Vossevangen
+Vossevangens
+Vårherre
+Værnes
+Værøy
+Wales
+Walesa
+Warszawa
+Washington
+Wien
+Wiens
+Winge
+Winger
+Wisconsin
+Xerxes
+Yemen
+Yemens
+Yggdrasil
+York
+Yorkshire
+Zaire
+Zambia
+Zanzibar
+Zeus
+Zevs
+Zimbabwe
+Zimbabwer
+Zululand
+åa
+abakus
+abakusen
+abakusene
+abakusens
+abakuser
+abandon
+abbed
+abbeden
+abbedene
+abbedens
+abbeder
+abbedi
+abbedia
+abbediene
+abbediet
+abbediets
+abbedissa
+abbedisse
+abbedissen
+abbedissene
+abbedissens
+abbedisser
+abbor
+abboren
+abborene
+abborens
+abborer
+abbreviasjon
+abbreviasjonen
+abbreviasjonene
+abbreviasjonens
+abbreviasjoner
+abc
+abdikasjon
+abdikasjonen
+abdikasjonene
+abdikasjonens
+abdikasjoner
+abdisere
+abdiserer
+abdisert
+aber
+abere
+aberet
+ablativ
+ablativen
+ablativene
+ablativens
+ablativer
+ablegøye
+ablegøyen
+ablegøyene
+ablegøyens
+ablegøyer
+abnorm
+abnorme
+abnormitet
+abnormiteten
+abnormitetene
+abnormitetens
+abnormiteter
+abnormt
+abonnement
+abonnementa
+abonnementene
+abonnementer
+abonnementet
+abonnementets
+abonnementsavdeling
+abonnementsavdelinga
+abonnementsavdelingen
+abonnementsavdelingene
+abonnementsavdelingens
+abonnementsavdelinger
+abonnementskonsert
+abonnementskonserten
+abonnementskonsertene
+abonnementskonsertens
+abonnementskonserter
+abonnent
+abonnenten
+abonnentene
+abonnentens
+abonnenter
+abonnenttall
+abonnenttalla
+abonnenttallene
+abonnenttallet
+abonnenttallets
+abonnere
+abonnerer
+abonnert
+abonnerte
+abort
+aborten
+abortene
+abortens
+aborter
+abortere
+aborterer
+abortert
+aborterte
+abortpraksis
+abortpraksisen
+abortpraksisene
+abortpraksisens
+abortpraksiser
+abortsøknad
+abortsøknaden
+abortsøknadene
+abortsøknadens
+abortsøknader
+abrakadabra
+abrakadabraet
+abrakadabraets
+abrupt
+abscisse
+abscissen
+abscissens
+absint
+absinten
+absintens
+absolusjon
+absolusjonen
+absolusjonene
+absolusjonens
+absolusjoner
+absolutisme
+absolutismen
+absolutismens
+absolutt
+absolutte
+absolutter
+absoluttet
+absorber
+absorbere
+absorberer
+absorberes
+absorbert
+absorpsjon
+absorpsjonen
+absorpsjonene
+absorpsjonens
+absorpsjoner
+abstrahere
+abstraherer
+abstrahert
+abstraherte
+abstraksjon
+abstraksjonen
+abstraksjonene
+abstraksjonens
+abstraksjoner
+abstrakt
+abstrakte
+abstraktet
+absurd
+absurde
+absurdist
+absurdisten
+absurdistens
+absurdum
+acetylen
+acetylenet
+acetylenets
+actinium
+actiniumet
+actiniumets
+actionfilm
+actionfilmen
+actionfilmene
+actionfilmens
+actionfilmer
+ad
+adagio
+adagioen
+adagioene
+adagioens
+adagioer
+adamseple
+adamseplet
+adapsjon
+adapsjonen
+adapsjonene
+adapsjonens
+adapsjoner
+adaptasjon
+adaptasjonen
+adaptasjonene
+adaptasjonens
+adaptasjoner
+adaptasjonsevne
+adaptasjonsevnen
+adaptasjonsevnene
+adaptasjonsevnens
+adaptasjonsevner
+addend
+addenda
+addenden
+addendene
+addendens
+addender
+adder
+addere
+adderer
+adderes
+addert
+addisjon
+addisjonen
+addisjonene
+addisjonens
+addisjoner
+adekvat
+adekvate
+adel
+adelen
+adelens
+adelig
+adelige
+adelsfamilie
+adelsfamilien
+adelsfamiliene
+adelsfamiliens
+adelsfamilier
+adelskap
+adelskapet
+adelskapets
+adelsmann
+adelsmannen
+adelsmannens
+adelsmenn
+adelsmennene
+adelsmennenes
+adelsmenns
+adelsperson
+adelspersonen
+adelspersonene
+adelspersonens
+adelspersoner
+adelsstand
+adelsstanden
+adelsstandens
+adferd
+adferden
+adferdens
+adgang
+adgangen
+adgangens
+adgangsbillett
+adgangsbilletten
+adgangsbillettene
+adgangsbillettens
+adgangsbilletter
+adgangskort
+adgangskorta
+adgangskortene
+adgangskortet
+adgangskortets
+adgangstegn
+adgangstegnet
+adgangstegnets
+adhesjon
+adhesjonen
+adhesjonene
+adhesjonens
+adhesjoner
+adiafora
+adjø
+adjøa
+adjektiv
+adjektiva
+adjektivene
+adjektiver
+adjektivet
+adjektivets
+adjektivisk
+adjøene
+adjøet
+adjøets
+adjunkt
+adjunkten
+adjunktene
+adjunktens
+adjunkter
+adjutant
+adjutanten
+adjutantene
+adjutantens
+adjutanter
+adjutantstab
+adjutantstaben
+adjutantstabene
+adjutantstabens
+adjutantstaber
+adla
+adlød
+adle
+adler
+adlet
+adlyde
+adlyder
+administrasjon
+administrasjonen
+administrasjonene
+administrasjonens
+administrasjoner
+administrasjonsapparat
+administrasjonsapparata
+administrasjonsapparatene
+administrasjonsapparatet
+administrasjonsapparatets
+administrasjonsbygg
+administrasjonsbygga
+administrasjonsbyggene
+administrasjonsbygget
+administrasjonsbyggets
+administrasjonsbygning
+administrasjonsbygningen
+administrasjonsbygningene
+administrasjonsbygningens
+administrasjonsbygninger
+administrasjonsfløy
+administrasjonsfløyen
+administrasjonsfløyene
+administrasjonsfløyens
+administrasjonsfløyer
+administrasjonshus
+administrasjonshusa
+administrasjonshusene
+administrasjonshuset
+administrasjonshusets
+administrasjonskomité
+administrasjonskomiteen
+administrasjonskomiteene
+administrasjonskomiteens
+administrasjonskomiteer
+administrasjonskontor
+administrasjonskontorene
+administrasjonskontorer
+administrasjonskontoret
+administrasjonskontorets
+administrasjonsmessig
+administrasjonsordning
+administrasjonsordningen
+administrasjonsordningens
+administrasjonsskole
+administrasjonsskolen
+administrasjonsskolene
+administrasjonsskolens
+administrasjonsskoler
+administrasjonsutgift
+administrasjonsutgiften
+administrasjonsutgiftene
+administrasjonsutgiftens
+administrasjonsutgifter
+administrativ
+administrative
+administrativt
+administrator
+administratoren
+administratorene
+administratorens
+administratorer
+administrere
+administrerende
+administrerer
+administreres
+administrering
+administreringa
+administreringen
+administreringens
+administrert
+admiral
+admiralen
+admiralene
+admiralens
+admiraler
+admiralstab
+admiralstaben
+admiralstabene
+admiralstabens
+admiralstaber
+adopsjon
+adopsjonen
+adopsjonene
+adopsjonens
+adopsjoner
+adoptere
+adopterer
+adoptert
+adopterte
+adoptivbarn
+adoptivbarna
+adoptivbarnet
+adoptivbarnets
+adoptivdatter
+adoptivdatteren
+adoptivdatterens
+adressa
+adressat
+adressaten
+adressatene
+adressatens
+adressater
+adresse
+adresseangivelse
+adresseangivelsen
+adresseangivelsene
+adresseangivelsens
+adresseangivelser
+adresseforandring
+adresseforandringen
+adresseforandringene
+adresseforandringens
+adresseforandringer
+adressen
+adressene
+adressens
+adresser
+adressere
+adresseringsmaskin
+adresseringsmaskina
+adresseringsmaskinen
+adresseringsmaskinene
+adresseringsmaskinens
+adresseringsmaskiner
+adressert
+adstadig
+advar
+advare
+advarende
+advarer
+advares
+advaring
+advaringa
+advaringen
+advaringens
+advarsel
+advarselen
+advarselens
+advarslene
+advarsler
+advart
+advarte
+advent
+adventen
+adventens
+adventist
+adventisten
+adventistene
+adventistens
+adventister
+adventskalender
+adventskalenderen
+adventskalenderens
+adventskalendrene
+adverb
+adverba
+adverbene
+adverber
+adverbet
+adverbets
+adverbia
+adverbial
+adverbialet
+adverbialets
+adverbialt
+adverbiene
+adverbier
+adverbium
+advis
+advisen
+advisens
+adviser
+advisere
+adviserer
+advisert
+adviserte
+advokat
+advokaten
+advokatene
+advokatens
+advokater
+advokatfirma
+advokatfirmaene
+advokatfirmaer
+advokatfirmaet
+advokatfirmaets
+advokatforening
+advokatforeninga
+advokatforeningen
+advokatforeningene
+advokatforeningens
+advokatforeninger
+advokatforretning
+advokatforretninga
+advokatforretningen
+advokatforretningene
+advokatforretningens
+advokatforretninger
+advokatur
+advokaturen
+advokaturene
+advokaturens
+advokaturer
+aerodynamikk
+aerodynamikken
+aerodynamikkens
+aerodynamisk
+aerogram
+aerogramma
+aerogrammene
+aerogrammer
+aerogrammet
+aerogrammets
+aeronaut
+aeronauten
+aeronautene
+aeronautens
+aeronauter
+aeroplan
+aeroplana
+aeroplanene
+aeroplaner
+aeroplanet
+aeroplanets
+aerosol
+aerosolboks
+aerosolboksen
+aerosolboksene
+aerosolboksens
+aerosolbokser
+aerosolen
+aerosolens
+aerosolet
+aerosolets
+aerosolforbund
+aerosolforbundet
+aerosolforbundets
+afasiforening
+afasiforeninga
+afasiforeningen
+afasiforeningene
+afasiforeningens
+afasiforeninger
+afatikerne
+affeksjon
+affeksjonen
+affeksjonene
+affeksjonens
+affeksjoner
+affeksjonsverdi
+affeksjonsverdien
+affeksjonsverdiens
+affekt
+affektasjon
+affektasjonen
+affektasjonene
+affektasjonens
+affektasjoner
+affekten
+affektene
+affektens
+affekter
+affektere
+affektert
+affinitet
+affiniteten
+affinitetene
+affinitetens
+affiniteter
+affisere
+affiserer
+affisert
+affære
+affæren
+affærene
+affærens
+affærer
+afghaner
+afghanere
+afghaneren
+afghanerens
+afghaneres
+afghanerne
+afghanernes
+afghansk
+aforisme
+aforismen
+aforismens
+afrikaner
+afrikanere
+afrikaneren
+afrikanerens
+afrikaneres
+afrikanerne
+afrikanernes
+afrikansk
+afrikanske
+afroasiatisk
+aften
+aftenblad
+aftenbladene
+aftenblader
+aftenbladet
+aftenbladets
+aftenen
+aftenens
+aftener
+aftenkjole
+aftenkjolen
+aftenkjolene
+aftenkjolens
+aftenkjoler
+aftenkonsert
+aftenkonserten
+aftenkonsertene
+aftenkonsertens
+aftenkonserter
+aftenkurs
+aftenkursene
+aftenkurser
+aftenkurset
+aftenkursets
+aftennummer
+aftennummeret
+aftennummerets
+aftennumre
+aftennumrene
+aftens
+aftensammenkomst
+aftensammenkomsten
+aftensammenkomstene
+aftensammenkomstens
+aftensammenkomster
+aftenselskap
+aftenselskapa
+aftenselskapene
+aftenselskaper
+aftenselskapet
+aftenselskapets
+aftensmat
+aftensmaten
+aftensmatens
+aftensolens
+aftentur
+aftenturen
+aftenturene
+aftenturens
+aftenturer
+aftenutgava
+aftenutgave
+aftenutgaven
+aftenutgavene
+aftenutgavens
+aftenutgaver
+aga
+age
+agelaus
+ageløysa
+ageløyse
+agen
+agens
+agent
+agenten
+agentene
+agentens
+agenter
+agentur
+agentura
+agenturene
+agenturer
+agenturet
+agenturets
+agenturfirma
+agenturfirmaene
+agenturfirmaer
+agenturfirmaet
+agenturfirmaets
+agenturforretning
+agenturforretninga
+agenturforretningen
+agenturforretningene
+agenturforretningens
+agenturforretninger
+agenturvirksomhet
+agenturvirksomheten
+agenturvirksomhetens
+ager
+agere
+agert
+agerte
+aggregat
+aggregata
+aggregatene
+aggregater
+aggregatet
+aggregatets
+aggresjon
+aggresjonen
+aggresjonene
+aggresjonens
+aggresjoner
+aggresjonsinstinkt
+aggresjonsinstinktet
+aggresjonsinstinktets
+aggresjonspolitikk
+aggresjonspolitikken
+aggresjonspolitikkens
+aggressiv
+aggressive
+aggressivitet
+aggressiviteten
+aggressivitetens
+aggressivt
+aggressor
+aggressoren
+aggressorens
+agitasjon
+agitasjonen
+agitasjonene
+agitasjonens
+agitasjoner
+agitasjonskomité
+agitasjonskomiteen
+agitasjonskomiteene
+agitasjonskomiteens
+agitasjonskomiteer
+agitator
+agitatoren
+agitatorene
+agitatorens
+agitatorer
+agitere
+agiterer
+agitert
+agiterte
+agn
+agnatisk
+agne
+agnet
+agnostiker
+agnostikere
+agnostikeren
+agnostikerens
+agnostikeres
+agnostikerne
+agnostikernes
+agnostisk
+agrar
+agraren
+agrarene
+agrarens
+agrarer
+agronom
+agronomen
+agronomene
+agronomens
+agronomer
+agronomutdanning
+agronomutdanninga
+agronomutdanningen
+agronomutdanningens
+agurk
+agurkdyrking
+agurkdyrkinga
+agurkdyrkingen
+agurkdyrkingens
+agurken
+agurkene
+agurkens
+agurker
+agurkpris
+agurkprisen
+agurkprisene
+agurkprisens
+agurkpriser
+ah
+aha
+ai
+ajourfør
+ajourføre
+ajourføring
+ajourføringa
+ajourføringen
+ajourføringens
+ajourføringer
+ajourført
+akademi
+akademia
+akademiene
+akademier
+akademiet
+akademiets
+akademiker
+akademikerbrev
+akademikerbreva
+akademikerbrevene
+akademikerbrever
+akademikerbrevet
+akademikerbrevets
+akademikere
+akademikeren
+akademikerens
+akademikeres
+akademikerne
+akademikernes
+akademikertype
+akademikertypen
+akademikertypens
+akademisk
+akademiske
+akantusranke
+akantusranken
+akantusrankene
+akantusrankens
+akantusranker
+akasie
+akasien
+akasiens
+ake
+akebakke
+akebakken
+akebakkens
+akebrett
+akebretta
+akebrettene
+akebrettet
+akebrettets
+akevitt
+akevitten
+akevittene
+akevittens
+akevitter
+akilleshæl
+akilleshælen
+akilleshælene
+akilleshælens
+akilleshæler
+akk
+akkar
+akkaren
+akkarene
+akkarens
+akkarer
+akke
+akklamasjon
+akklamasjonen
+akklamasjonene
+akklamasjonens
+akklamasjoner
+akklimatisere
+akklimatiserer
+akklimatiseringsperiode
+akklimatiseringsperioden
+akklimatiseringsperiodens
+akklimatisert
+akkommodasjon
+akkommodasjonen
+akkommodasjonene
+akkommodasjonens
+akkommodasjoner
+akkommodere
+akkommoderer
+akkommodert
+akkommoderte
+akkompagnatør
+akkompagnatøren
+akkompagnatørene
+akkompagnatørens
+akkompagnatører
+akkompagnement
+akkompagnementa
+akkompagnementene
+akkompagnementer
+akkompagnementet
+akkompagnementets
+akkompagner
+akkompagnere
+akkompagnerer
+akkompagneres
+akkompagnert
+akkompagnerte
+akkord
+akkordarbeid
+akkordarbeidene
+akkordarbeider
+akkordarbeidet
+akkordarbeidets
+akkordavsavn
+akkordavsavnet
+akkordavsavnets
+akkordavtale
+akkordavtalen
+akkordavtalene
+akkordavtalens
+akkordavtaler
+akkorddokument
+akkorddokumenta
+akkorddokumentene
+akkorddokumenter
+akkorddokumentet
+akkorddokumentets
+akkorden
+akkordene
+akkordens
+akkorder
+akkordere
+akkorderer
+akkordert
+akkorderte
+akkordforhandling
+akkordforhandlinga
+akkordforhandlingen
+akkordforhandlingene
+akkordforhandlingens
+akkordforhandlinger
+akkordkommisær
+akkordkommisæren
+akkordkommisærene
+akkordkommisærens
+akkordkommisærer
+akkordlønn
+akkordlønna
+akkordlønnede
+akkordlønnen
+akkordlønnene
+akkordlønnens
+akkordlønner
+akkordlønnet
+akkordstyra
+akkordstyre
+akkordstyrene
+akkordstyrer
+akkordstyret
+akkordstyrets
+akkordtilbud
+akkordtilbuda
+akkordtilbudene
+akkordtilbudet
+akkordtilbudets
+akkreditere
+akkrediterer
+akkreditering
+akkrediteringa
+akkrediteringen
+akkrediteringens
+akkreditert
+akkrediterte
+akkreditiv
+akkreditiva
+akkreditivene
+akkreditiver
+akkreditivet
+akkreditivets
+akkumulator
+akkumulatoren
+akkumulatorene
+akkumulatorens
+akkumulatorer
+akkumulere
+akkumulering
+akkumuleringa
+akkumuleringen
+akkumuleringens
+akkumulert
+akkumulerte
+akkurat
+akkuratesse
+akkuratessen
+akkuratessens
+akkusativ
+akkusativen
+akkusativene
+akkusativens
+akkusativer
+akkvisisjon
+akkvisisjonen
+akkvisisjonene
+akkvisisjonens
+akkvisisjoner
+akrobat
+akrobaten
+akrobatene
+akrobatens
+akrobater
+akrobatisk
+akronym
+akronyma
+akronymene
+akronymer
+akronymet
+akronymets
+akryl
+akrylen
+akrylens
+akrylet
+akrylets
+aks
+akse
+aksel
+akselavstand
+akselavstanden
+akselavstandens
+akselblad
+akselbladene
+akselblader
+akselbladet
+akselbladets
+akselen
+akselens
+akselerasjon
+akselerasjonen
+akselerasjonene
+akselerasjonens
+akselerasjoner
+akselerer
+akselerere
+akselererende
+akselereres
+akselerert
+akseltrykk
+akseltrykkbestemmelse
+akseltrykkbestemmelsen
+akseltrykkbestemmelsene
+akseltrykkbestemmelsens
+akseltrykkbestemmelser
+akseltrykket
+akseltrykkets
+aksen
+aksene
+aksens
+aksent
+aksenten
+aksentene
+aksentens
+aksenter
+aksentuere
+aksentuerer
+aksentuering
+aksentueringa
+aksentueringen
+aksentueringens
+aksentuert
+aksentuerte
+aksept
+akseptabel
+akseptabelt
+akseptable
+akseptant
+akseptanten
+akseptantene
+akseptantens
+akseptanter
+aksepten
+akseptene
+akseptens
+aksepter
+akseptere
+aksepterer
+aksepteres
+akseptering
+aksepteringa
+aksepteringen
+aksepteringens
+akseptert
+aksepterte
+akser
+akset
+aksial
+aksidens
+aksidensen
+aksidensene
+aksidensens
+aksidenser
+aksidenstrykkeri
+aksidenstrykkeriet
+aksidenstrykkeriets
+aksiell
+aksielle
+aksiom
+aksioma
+aksiomene
+aksiomer
+aksiomet
+aksiomets
+aksise
+aksisen
+aksisens
+aksje
+aksjebank
+aksjebanken
+aksjebankene
+aksjebankens
+aksjebanker
+aksjebesittelse
+aksjebesittelsen
+aksjebesittelsens
+aksjebrev
+aksjebreva
+aksjebrevene
+aksjebrever
+aksjebrevet
+aksjebrevets
+aksjeeier
+aksjeeiere
+aksjeeieren
+aksjeeierens
+aksjeeieres
+aksjeeierne
+aksjeeiernes
+aksjeemisjon
+aksjeemisjonen
+aksjeemisjonene
+aksjeemisjonens
+aksjeemisjoner
+aksjefullmakt
+aksjefullmakten
+aksjefullmaktene
+aksjefullmaktens
+aksjefullmakter
+aksjeinnbydelse
+aksjeinnbydelsen
+aksjeinnbydelsene
+aksjeinnbydelsens
+aksjeinnbydelser
+aksjekapital
+aksjekapitalen
+aksjekapitalene
+aksjekapitalens
+aksjekapitaler
+aksjekapitalutvidelse
+aksjekapitalutvidelsen
+aksjekapitalutvidelsene
+aksjekapitalutvidelsens
+aksjekapitalutvidelser
+aksjekjøp
+aksjekjøpa
+aksjekjøpene
+aksjekjøpet
+aksjekjøpets
+aksjekurs
+aksjekursen
+aksjekursene
+aksjekursens
+aksjekurser
+aksjeleilighet
+aksjeleiligheten
+aksjeleilighetene
+aksjeleilighetens
+aksjeleiligheter
+aksjelov
+aksjelova
+aksjeloven
+aksjelovene
+aksjelovens
+aksjelover
+aksjemajoritet
+aksjemajoriteten
+aksjemajoritetens
+aksjemarked
+aksjemarkeda
+aksjemarkedene
+aksjemarkeder
+aksjemarkedet
+aksjemarkedets
+aksjemasse
+aksjemassen
+aksjemassens
+aksjemekler
+aksjemeklere
+aksjemekleren
+aksjemeklerens
+aksjemekleres
+aksjemeklerne
+aksjemeklernes
+aksjen
+aksjene
+aksjenes
+aksjenotering
+aksjenoteringa
+aksjenoteringen
+aksjenoteringene
+aksjenoteringens
+aksjenoteringer
+aksjeomsetning
+aksjeomsetningen
+aksjeomsetningene
+aksjeomsetningens
+aksjeomsetninger
+aksjeprotokoll
+aksjeprotokollen
+aksjeprotokollens
+aksjer
+aksjeselskap
+aksjeselskapa
+aksjeselskapene
+aksjeselskaper
+aksjeselskapet
+aksjeselskapets
+aksjespørsmål
+aksjespørsmålene
+aksjespørsmålet
+aksjespørsmålets
+aksjetegning
+aksjetegninga
+aksjetegningen
+aksjetegningene
+aksjetegningens
+aksjetegninger
+aksjeutbytte
+aksjeutbyttene
+aksjeutbyttet
+aksjeutvidelse
+aksjeutvidelsen
+aksjeutvidelsens
+aksjon
+aksjonen
+aksjonene
+aksjonens
+aksjoner
+aksjonere
+aksjonert
+aksjonær
+aksjonæren
+aksjonærene
+aksjonærens
+aksjonærer
+aksjonærgruppa
+aksjonærgruppe
+aksjonærgruppen
+aksjonærgruppene
+aksjonærgruppens
+aksjonærgrupper
+aksjonærregister
+aksjonærregisteret
+aksjonærregisterets
+aksjonærregistra
+aksjonærregistre
+aksjonærregistrene
+aksjonærregistret
+aksjonærregistrets
+aksjonsbevegelse
+aksjonsbevegelsen
+aksjonsbevegelsene
+aksjonsbevegelsens
+aksjonsbevegelser
+aksjonsevne
+aksjonsevnen
+aksjonsevnene
+aksjonsevnens
+aksjonsevner
+aksjonsgruppa
+aksjonsgruppe
+aksjonsgruppen
+aksjonsgruppene
+aksjonsgruppens
+aksjonsgrupper
+aksjonskomité
+aksjonskomiteen
+aksjonskomiteene
+aksjonskomiteens
+aksjonskomiteer
+aksjonsledelse
+aksjonsledelsen
+aksjonsledelsene
+aksjonsledelsens
+aksjonsledelser
+aksjonslinje
+aksjonslinjen
+aksjonslinjens
+aksjonsplan
+aksjonsplanen
+aksjonsplanens
+aksjonsplaner
+aksjonsplanet
+aksjonsplanets
+aksjonsradius
+aksjonsradiusen
+aksjonsradiusens
+aksjonsutvalg
+aksjonsutvalga
+aksjonsutvalgene
+aksjonsutvalget
+aksjonsutvalgets
+aksla
+aksle
+akslen
+akslene
+akslens
+aksler
+akslet
+akt
+akte
+aktelse
+aktelsen
+aktelsens
+akten
+aktenfor
+akter
+akterdekk
+akterdekka
+akterdekkene
+akterdekket
+akterdekkets
+akterkant
+akterkanten
+akterkantene
+akterkantens
+akterkanter
+akterover
+akters
+akterut
+akterutseilt
+aktet
+aktiv
+aktive
+aktivere
+aktiveres
+aktivert
+aktivisere
+aktiviseres
+aktivisering
+aktiviseringa
+aktiviseringen
+aktiviseringens
+aktiviseringsgruppa
+aktiviseringsgruppe
+aktiviseringsgruppen
+aktiviseringsgruppene
+aktiviseringsgruppens
+aktiviseringsgrupper
+aktivisert
+aktivist
+aktivisten
+aktivistene
+aktivistens
+aktivister
+aktivistgruppa
+aktivistgruppe
+aktivistgruppen
+aktivistgruppene
+aktivistgruppens
+aktivistgrupper
+aktivistisk
+aktivitet
+aktiviteten
+aktivitetene
+aktivitetens
+aktiviteter
+aktivitetsbygg
+aktivitetsbygga
+aktivitetsbyggene
+aktivitetsbygget
+aktivitetsbyggets
+aktivitetshus
+aktivitetshusa
+aktivitetshusene
+aktivitetshuset
+aktivitetshusets
+aktivitetsområda
+aktivitetsområde
+aktivitetsområdene
+aktivitetsområder
+aktivitetsområdet
+aktivitetsområdets
+aktivitetsuka
+aktivitetsuke
+aktivitetsuken
+aktivitetsukene
+aktivitetsukens
+aktivitetsuker
+aktivt
+aktivum
+aktivumet
+aktivumets
+aktmodell
+aktmodellen
+aktmodellene
+aktmodellens
+aktmodeller
+aktor
+aktorat
+aktorata
+aktoratene
+aktorater
+aktoratet
+aktoratets
+aktoren
+aktorene
+aktorens
+aktorer
+aktpågivende
+aktpågivenhet
+aktpågivenheten
+aktpågivenhetens
+aktør
+aktøren
+aktørene
+aktørens
+aktører
+aktrise
+aktrisen
+aktrisene
+aktrisens
+aktriser
+aktsom
+aktsomhetsbestemmelse
+aktsomhetsbestemmelsen
+aktsomhetsbestemmelsene
+aktsomhetsbestemmelsens
+aktsomhetsbestemmelser
+aktsomme
+aktsomt
+aktualiser
+aktualisere
+aktualiserer
+aktualiseres
+aktualisert
+aktualiserte
+aktualitet
+aktualiteten
+aktualitetens
+aktualitetsrekka
+aktualitetsrekke
+aktualitetsrekken
+aktualitetsrekkene
+aktualitetsrekkens
+aktuar
+aktuaren
+aktuarene
+aktuarens
+aktuarer
+aktuell
+aktuelle
+aktuelt
+aktueltsending
+aktueltsendinga
+aktueltsendingen
+aktueltsendingene
+aktueltsendingens
+aktueltsendinger
+aktverdig
+aktverdige
+akupunktur
+akupunkturen
+akupunkturens
+akustikk
+akustikken
+akustikkens
+akustisk
+akustiske
+akutt
+akutte
+akvakultur
+akvakulturen
+akvakulturens
+akvaplaning
+akvaplaningen
+akvaplaningens
+akvarell
+akvarellen
+akvarellene
+akvarellens
+akvareller
+akvaria
+akvariene
+akvarier
+akvariet
+akvariets
+akvarium
+akvedukt
+akvedukten
+akveduktene
+akveduktens
+akvedukter
+al
+alarm
+alarmanlegg
+alarmen
+alarmene
+alarmens
+alarmer
+alarmere
+alarmerende
+alarmert
+alarmerte
+alarmklokka
+alarmklokke
+alarmklokken
+alarmklokkene
+alarmklokkens
+alarmklokker
+alarmsignal
+alarmsignalene
+alarmsignaler
+alarmsignalet
+alarmsignalets
+alarmsystem
+alarmsystema
+alarmsystemene
+alarmsystemer
+alarmsystemet
+alarmsystemets
+albaner
+albanere
+albaneren
+albanerens
+albaneres
+albanerne
+albanernes
+albansk
+albatross
+albatrossen
+albatrossene
+albatrossens
+albatrosser
+albino
+albinoen
+albinoene
+albinoens
+albinoer
+alboge
+albogeledd
+albogeleddet
+albogeleddets
+albogen
+albogene
+albogens
+alboger
+albue
+albueledd
+albueleddet
+albueleddets
+albuen
+albuene
+albuens
+albuer
+albuerom
+albuerommet
+albuerommets
+album
+albuma
+albumene
+albumer
+albumet
+albumets
+alburom
+alburommet
+alburommets
+aldeles
+alder
+alderdom
+alderdommelig
+alderdommen
+alderdommens
+alderdomsforsikring
+alderdomsforsikringa
+alderdomsforsikringen
+alderdomsforsikringens
+alderdomsforsikringer
+alderdomsforsker
+alderdomsforskere
+alderdomsforskeren
+alderdomsforskerens
+alderdomsforskeres
+alderdomsforskerne
+alderdomsforskernes
+alderdomspensjon
+alderdomspensjonen
+alderdomspensjonene
+alderdomspensjonens
+alderdomspensjoner
+alderen
+alderens
+alders
+aldersbolig
+aldersboligen
+aldersboligene
+aldersboligens
+aldersboliger
+aldersfordeling
+aldersfordelinga
+aldersfordelingen
+aldersfordelingens
+aldersforskjell
+aldersforskjellen
+aldersforskjellene
+aldersforskjellens
+aldersforskjeller
+aldersgrensa
+aldersgrense
+aldersgrensebestemmelse
+aldersgrensebestemmelsen
+aldersgrensebestemmelsene
+aldersgrensebestemmelsens
+aldersgrensebestemmelser
+aldersgrensen
+aldersgrensene
+aldersgrensens
+aldersgrenser
+aldersgruppa
+aldersgruppe
+aldersgruppen
+aldersgruppene
+aldersgruppens
+aldersgrupper
+aldersheim
+aldersheimen
+aldersheimene
+aldersheimens
+aldersheimer
+aldershjem
+aldershjemma
+aldershjemmene
+aldershjemmet
+aldershjemmets
+aldersklasse
+aldersklassen
+aldersklassene
+aldersklassens
+aldersklasser
+alderskonstellasjon
+alderskonstellasjonen
+alderskonstellasjonene
+alderskonstellasjonens
+alderskonstellasjoner
+alderspensjon
+alderspensjonen
+alderspensjonene
+alderspensjonens
+alderspensjoner
+alderssammensetning
+alderssammensetningen
+alderssammensetningene
+alderssammensetningens
+alderssammensetninger
+alderstegen
+alderstillegg
+alderstilleggene
+alderstillegget
+alderstilleggets
+alderstrinn
+alderstrinna
+alderstrinnene
+alderstrinnet
+alderstrinnets
+alderstrygd
+alderstrygda
+alderstrygdede
+alderstrygden
+alderstrygdene
+alderstrygdens
+alderstrygdet
+alderstøtte
+alderstøtten
+alderstøttens
+aldre
+aldrende
+aldrer
+aldri
+aldring
+aldringa
+aldringen
+aldringens
+ale
+aleine
+alene
+aler
+alfa
+alfabet
+alfabeta
+alfabetene
+alfabeter
+alfabetet
+alfabetets
+alfabetiser
+alfabetisere
+alfabetiserer
+alfabetiseres
+alfabetisering
+alfabetiseringa
+alfabetiseringen
+alfabetiseringens
+alfabetisert
+alfabetisk
+alfabetiske
+alg
+alge
+algebra
+algebraen
+algebraene
+algebraens
+algebraer
+algebraisk
+algebraiske
+algen
+algene
+alger
+algerier
+algeriere
+algerieren
+algerierens
+algerieres
+algerierne
+algeriernes
+algerisk
+algin
+alginat
+alginata
+alginatene
+alginater
+alginattilsetning
+alginattilsetningen
+alginattilsetningens
+algoritme
+algoritmen
+algoritmene
+algoritmens
+algoritmer
+alias
+alibi
+alibia
+alibiene
+alibier
+alibiet
+alibiets
+alienasjon
+alienasjonen
+alienasjonene
+alienasjonens
+alienasjoner
+alka
+alkali
+alkalia
+alkaliene
+alkalier
+alkaliet
+alkaliets
+alkalisk
+alke
+alken
+alkene
+alker
+alkohol
+alkoholbruk
+alkoholbruken
+alkoholbrukens
+alkoholen
+alkoholene
+alkoholens
+alkoholer
+alkoholforbruk
+alkoholforbruket
+alkoholforbrukets
+alkoholforskning
+alkoholforskningen
+alkoholforskningens
+alkoholfri
+alkoholholdig
+alkoholholdige
+alkoholiker
+alkoholikere
+alkoholikeren
+alkoholikerens
+alkoholikeres
+alkoholikerklinikk
+alkoholikerklinikken
+alkoholikerklinikkene
+alkoholikerklinikkens
+alkoholikerklinikker
+alkoholikerne
+alkoholikernes
+alkoholisk
+alkoholiske
+alkoholisme
+alkoholismen
+alkoholismens
+alkoholistomsorg
+alkoholistomsorgen
+alkoholistomsorgens
+alkoholklinikk
+alkoholklinikken
+alkoholklinikkene
+alkoholklinikkens
+alkoholklinikker
+alkohollovgivning
+alkohollovgivninga
+alkohollovgivningen
+alkohollovgivningene
+alkohollovgivningens
+alkohollovgivninger
+alkoholmisbruk
+alkoholmisbruken
+alkoholmisbrukens
+alkoholmisbruker
+alkoholmisbrukere
+alkoholmisbrukeren
+alkoholmisbrukerens
+alkoholmisbrukeres
+alkoholmisbrukerne
+alkoholmisbrukernes
+alkoholmisbruket
+alkoholmisbrukets
+alkoholomsetning
+alkoholomsetningen
+alkoholomsetningens
+alkoholpåvirket
+alkoholrestriksjon
+alkoholrestriksjonen
+alkoholrestriksjonene
+alkoholrestriksjonens
+alkoholrestriksjoner
+alkoholskadd
+alkoholskadde
+alkoholtilvenning
+alkoholtilvenningen
+alkoholtilvenningens
+alkoholvanskelighet
+alkoholvanskeligheten
+alkoholvanskelighetene
+alkoholvanskelighetens
+alkoholvanskeligheter
+alkotest
+alkotesten
+alkotestene
+alkotestens
+alkotester
+alkove
+alkoven
+alkovens
+alkydmaling
+alkydmalinga
+alkydmalingen
+alkydmalingens
+alkymi
+alkymien
+alkymiens
+alkymist
+alkymisten
+alkymistene
+alkymistens
+alkymister
+all
+alle
+alleer
+allegori
+allegorien
+allegoriene
+allegoriens
+allegorier
+allegorisk
+allegoriske
+allegro
+allegroa
+allegroen
+allegroene
+allegroens
+allegroer
+allegroet
+allegroets
+allehelgensdag
+allehånde
+allehånden
+allehåndens
+allemannsarbeid
+allemannsarbeidet
+allemannsarbeidets
+allemannseie
+allemannseiet
+allemannsrett
+allemannsretten
+allemannsrettens
+aller
+allerede
+allergi
+allergien
+allergiene
+allergiens
+allergier
+allergiker
+allergikere
+allergikeren
+allergikerens
+allergikeres
+allergikerne
+allergikernes
+allergisk
+allergiske
+alles
+allesteds
+allestedsfra
+allestedsnærværende
+allfader
+allfaderen
+allfaderens
+allfarveg
+allfarvegen
+allfarvegens
+allfarvei
+allfarveien
+allfarveiens
+allianse
+alliansefellesskap
+alliansefellesskapet
+alliansefellesskapets
+alliansefri
+alliansefrie
+alliansefrihet
+alliansefriheten
+alliansefrihetens
+alliansefritt
+alliansen
+alliansene
+alliansenes
+alliansens
+alliansepartnere
+alliansepolitikk
+alliansepolitikken
+alliansepolitikkens
+allianser
+alliere
+alliert
+allierte
+alliertes
+alligator
+alligatoren
+alligatorens
+alligators
+allikevel
+allitterasjon
+allitterasjonen
+allitterasjonene
+allitterasjonens
+allitterasjoner
+allitterere
+allittererer
+allitterert
+allittererte
+allmakt
+allmakta
+allmakten
+allmaktens
+allmannamøta
+allmannamøte
+allmannamøtene
+allmannamøter
+allmannamøtet
+allmannamøtets
+allmektig
+allmektige
+allmenn
+allmenndannelse
+allmenndannelsen
+allmenndannelsens
+allmenndannende
+allmenne
+allmenneuropeiske
+allmenngyldig
+allmenngyldige
+allmenngyldighet
+allmenngyldigheten
+allmenngyldighetens
+allmennhet
+allmennheten
+allmennhetens
+allmenning
+allmenningen
+allmenningene
+allmenningens
+allmenninger
+allmennmedisin
+allmennmedisinen
+allmennmedisinens
+allmennmenneskelig
+allmennmenneskelige
+allmennpraksis
+allmennpraktiserende
+allmennpreventive
+allmennskole
+allmennskolen
+allmennskolene
+allmennskolens
+allmennskoler
+allmenntilstand
+allmenntilstanden
+allmenntilstandens
+allmennutdannelse
+allmennutdannelsen
+allmennutdannelsens
+allmennutdanning
+allmennutdanninga
+allmennutdanningen
+allmennutdanningens
+allmennvitenskapelige
+allment
+allmøte
+allmøtet
+allmue
+allmuen
+allmuens
+allmuge
+allmugen
+allmugene
+allmugens
+allmuger
+allokere
+allokerer
+allokering
+allokeringa
+allokeringen
+allokeringens
+allokert
+allokerte
+allround
+allrounder
+allsang
+allsangen
+allsangene
+allsangens
+allsanger
+allsidig
+allsidige
+allsidighet
+allsidigheten
+allsidighetens
+allslags
+allstøtt
+alltid
+allting
+alltinga
+alltingene
+alltinget
+alltingets
+alludere
+alluderer
+alludert
+alluderte
+allusjon
+allusjonen
+allusjonene
+allusjonens
+allusjoner
+allvis
+allvist
+allvitende
+allvitenhet
+allvitenheten
+allvitenhetens
+alm
+almanakk
+almanakken
+almanakkene
+almanakkens
+almanakker
+almer
+alminnelig
+alminnelige
+alminnelighet
+alminneligheten
+alminnelighetene
+alminnelighetens
+alminneligheter
+almissa
+almisse
+almissen
+almissene
+almissens
+almisser
+alna
+alne
+alnene
+alner
+alpakka
+alpelua
+alpelue
+alpeluen
+alpeluene
+alpeluens
+alpeluer
+alpin
+alpine
+alpinist
+alpinisten
+alpinistene
+alpinistens
+alpinister
+alpinklubb
+alpinklubben
+alpinklubbene
+alpinklubbens
+alpinklubber
+alpinsk
+alpinsport
+alpinsporten
+alpinsportens
+alpint
+alrune
+alsikekløver
+alsikekløveren
+alsikekløverens
+alskens
+alt
+altan
+altandør
+altandøra
+altandøren
+altandørene
+altandørens
+altandører
+altanen
+altanene
+altanens
+altaner
+altanvindu
+altanvinduene
+altanvinduer
+altanvinduet
+altanvinduets
+altblokkfløyte
+altblokkfløyten
+altblokkfløytene
+altblokkfløytens
+altblokkfløyter
+alte
+alten
+altens
+alter
+alterasjon
+alterasjonen
+alterasjonene
+alterasjonens
+alterasjoner
+altere
+alterere
+altererer
+alterert
+altererte
+alteret
+altergang
+altergangen
+altergangens
+alternativ
+alternative
+alternativene
+alternativer
+alternativet
+alternativt
+alternere
+alternerer
+alternert
+alterring
+alterringen
+alterringens
+alters
+altertavla
+altertavle
+altertavlen
+altertavlene
+altertavlens
+altertavler
+altertjeneste
+altertjenesten
+altertjenestens
+altervin
+altervinen
+altervinens
+altet
+altetende
+altfor
+altomfattende
+altoppslukende
+altoverskyggende
+altre
+altret
+altruisme
+altruismen
+altruismens
+altruist
+altruisten
+altruistene
+altruistens
+altruister
+altruistisk
+altså
+altsaksofon
+altsaksofonen
+altsaksofonene
+altsaksofonens
+altsaksofoner
+altsangerinne
+altsangerinnen
+altsangerinnens
+altseende
+aluminat
+aluminium
+aluminiumen
+aluminiumens
+aluminiumet
+aluminiumets
+aluminiumforbruk
+aluminiumforbruket
+aluminiumforbrukets
+aluminiumsektor
+aluminiumsektoren
+aluminiumsektorens
+aluminiumsfabrikk
+aluminiumsfabrikken
+aluminiumsfabrikkene
+aluminiumsfabrikkens
+aluminiumsfabrikker
+aluminiumsfolie
+aluminiumsfolien
+aluminiumsfoliens
+aluminiumsindustri
+aluminiumsindustrien
+aluminiumsindustriens
+aluminiumslegering
+aluminiumslegeringen
+aluminiumslegeringens
+aluminiumsprodukt
+aluminiumsproduktene
+aluminiumsprodukter
+aluminiumsproduktet
+aluminiumsproduktets
+aluminiumsprofil
+aluminiumsprofilen
+aluminiumsprofilene
+aluminiumsprofilens
+aluminiumsprofiler
+aluminiumsrør
+aluminiumsrøra
+aluminiumsrørene
+aluminiumsrøret
+aluminiumsrørets
+aluminiumsverk
+aluminiumsverka
+aluminiumsverkene
+aluminiumsverket
+aluminiumsverkets
+aluminiumsvindu
+aluminiumsvindua
+aluminiumsvinduene
+aluminiumsvinduer
+aluminiumsvinduet
+aluminiumsvinduets
+alun
+alunen
+alunene
+alunens
+aluner
+alunet
+alunets
+alv
+alvedans
+alvedansen
+alvedansens
+alven
+alvene
+alvens
+alver
+alvor
+alvoret
+alvorets
+alvorlig
+alvorlige
+alvorligere
+alvorligst
+alvorligste
+alvorsam
+alvorsamme
+alvorsamt
+alvorsfylt
+alvorsfylte
+alvorsmann
+alvorsmannen
+alvorsmannens
+alvorsmenn
+alvorsmennene
+alvorsmennenes
+alvorsmenns
+alvorsord
+alvorsorda
+alvorsordene
+alvorsordet
+alvorsordets
+alvorstung
+amabel
+amabile
+amalgam
+amalgamasjon
+amalgamasjonen
+amalgamasjonene
+amalgamasjonens
+amalgamasjoner
+amalgamet
+amanuens
+amanuensen
+amanuensene
+amanuensens
+amanuenser
+amanuensis
+amaryll
+amaryllis
+amaryllisen
+amaryllisene
+amaryllisens
+amarylliser
+amasone
+amasonen
+amasonene
+amasonens
+amasoner
+amatør
+amatørbestemmelse
+amatørbestemmelsen
+amatørbestemmelsene
+amatørbestemmelsens
+amatørbestemmelser
+amatørdykkere
+amatørdykkeren
+amatørdykkerens
+amatøren
+amatørene
+amatørenes
+amatører
+amatørfotograf
+amatørfotografen
+amatørfotografene
+amatørfotografens
+amatørfotografer
+amatørkarriere
+amatørkarrieren
+amatørkarrierens
+amatørkjører
+amatørkjørere
+amatørkjøreren
+amatørkjørerens
+amatørkjøreres
+amatørkjørerne
+amatørkjørernes
+amatørkonkurranse
+amatørkonkurransen
+amatørkonkurransene
+amatørkonkurransens
+amatørkonkurranser
+amatørkorps
+amatørkorpsa
+amatørkorpsene
+amatørkorpset
+amatørkorpsets
+amatørkrefter
+amatørlag
+amatørlaga
+amatørlagene
+amatørlaget
+amatørlagets
+amatørliga
+amatørligaen
+amatørligaens
+amatørmusiker
+amatørmusikere
+amatørmusikeren
+amatørmusikerens
+amatørmusikeres
+amatørmusikerne
+amatørmusikernes
+amatøropptak
+amatøropptaka
+amatøropptakene
+amatøropptaket
+amatøropptakets
+amatørorkester
+amatørorkesteret
+amatørorkesterets
+amatørorkestra
+amatørorkestre
+amatørorkestrene
+amatørorkestret
+amatørorkestrets
+amatørpreg
+amatørpreget
+amatørpregets
+amatørprinsipp
+amatørprinsippene
+amatørprinsipper
+amatørprinsippet
+amatørprinsippets
+amatørreglement
+amatørreglementa
+amatørreglementene
+amatørreglementer
+amatørreglementet
+amatørreglementets
+amatørreglene
+amatørregler
+amatørrevy
+amatørrevyen
+amatørrevyene
+amatørrevyens
+amatørrevyer
+amatørrytter
+amatørryttere
+amatørrytteren
+amatørrytterens
+amatørrytteres
+amatørrytterne
+amatørrytternes
+amatørspillere
+amatørspilleren
+amatørspillerens
+amatørstatus
+amatørstevna
+amatørstevne
+amatørstevnene
+amatørstevner
+amatørstevnet
+amatørstevnets
+amatørteater
+amatørteateret
+amatørteaterets
+amatørteatre
+amatørteatrene
+amatørteatret
+amatørteatrets
+amatørvirksomhet
+amatørvirksomheten
+amatørvirksomhetens
+ambar
+ambaren
+ambarens
+ambassade
+ambassadebolig
+ambassadeboligen
+ambassadeboligene
+ambassadeboligens
+ambassadeboliger
+ambassaden
+ambassadene
+ambassader
+ambassaderåd
+ambassaderåden
+ambassaderådens
+ambassaderåder
+ambassaderådet
+ambassaderådets
+ambassaders
+ambassadesekretær
+ambassadesekretæren
+ambassadesekretærene
+ambassadesekretærens
+ambassadesekretærer
+ambassadør
+ambassadørbolig
+ambassadørboligen
+ambassadørboligene
+ambassadørboligens
+ambassadørboliger
+ambassadøren
+ambassadørene
+ambassadørens
+ambassadører
+amøbe
+amøben
+amøbens
+ambisiøs
+ambisiøse
+ambisiøst
+ambisjon
+ambisjonen
+ambisjonene
+ambisjonens
+ambisjoner
+ambivalens
+ambivalensen
+ambivalensens
+ambivalent
+ambivalente
+ambod
+amboda
+amboden
+ambodens
+ambolt
+ambolten
+amboltene
+amboltens
+ambolter
+ambra
+ambraen
+ambraens
+ambulanse
+ambulansebåt
+ambulansebåten
+ambulansebåtene
+ambulansebåtens
+ambulansebåter
+ambulansefly
+ambulanseflya
+ambulanseflyene
+ambulanseflyet
+ambulanseflyets
+ambulansen
+ambulansene
+ambulansens
+ambulanser
+ambulansereisa
+ambulansereise
+ambulansereisen
+ambulansereisene
+ambulansereisens
+ambulansereiser
+ambulansetransport
+ambulansetransporten
+ambulansetransportens
+ambuler
+ambulere
+ambulerende
+ambulerer
+ambulert
+americium
+americiumet
+americiumets
+amerikafarere
+amerikafareren
+amerikafarerens
+amerikaner
+amerikanere
+amerikaneren
+amerikanerens
+amerikaneres
+amerikanerinna
+amerikanerinne
+amerikanerinnen
+amerikanerinnene
+amerikanerinnens
+amerikanerinner
+amerikanerne
+amerikanernes
+amerikanisme
+amerikanismen
+amerikanismens
+amerikansk
+amerikanske
+amerikanskeide
+amerikapost
+amerikaposten
+amerikapostens
+ametyst
+ametysten
+ametystene
+ametystens
+ametyster
+amfetamin
+amfetaminet
+amfetaminets
+amfetaminsak
+amfetaminsaken
+amfetaminsakens
+amfi
+amfibia
+amfibiefly
+amfibieflya
+amfibieflyet
+amfibieflyets
+amfibiene
+amfibier
+amfibiet
+amfibiets
+amfibium
+amfibrakk
+amfiet
+amfiets
+amfiteater
+amfiteateret
+amfiteaterets
+amfiteatra
+amfiteatre
+amfiteatrene
+amfiteatret
+amfiteatrets
+amma
+amme
+ammen
+ammens
+ammet
+amming
+amminga
+ammingen
+ammingens
+ammoniakk
+ammoniakken
+ammoniakkens
+ammoniakkgass
+ammoniakkgassen
+ammoniakkgassene
+ammoniakkgassens
+ammoniakkgasser
+ammoniakkholdig
+ammunisjon
+ammunisjonen
+ammunisjonens
+ammunisjons
+ammunisjonsfabrikk
+ammunisjonsfabrikken
+ammunisjonsfabrikkene
+ammunisjonsfabrikkens
+ammunisjonsfabrikker
+ammunisjonslager
+ammunisjonslageret
+ammunisjonslagerets
+ammunisjonslagra
+ammunisjonslagre
+ammunisjonslagrene
+amnesti
+amnestia
+amnestiene
+amnestier
+amnestiet
+amnestiets
+amningsmerke
+amningsmerket
+amok
+amontillado
+amor
+amoralsk
+amoren
+amorens
+amortisasjon
+amortisasjonen
+amortisasjonene
+amortisasjonens
+amortisasjoner
+amortisere
+amortiseres
+amortisering
+amortiseringa
+amortiseringen
+amortiseringens
+amortisert
+amp
+ampel
+ampelen
+ampelens
+amper
+ampere
+amperemeter
+amperemeteret
+amperemeterets
+amperemetra
+amperemetre
+amperemetrene
+amperemetret
+amperemetrets
+amperen
+amperens
+ampert
+amplene
+ampler
+amplitude
+amplituden
+amplitudene
+amplitudens
+amplituder
+ampre
+ampulle
+ampullen
+ampullens
+amputasjon
+amputasjonen
+amputasjonene
+amputasjonens
+amputasjoner
+amputere
+amputerer
+amputert
+amputerte
+amt
+amta
+amtene
+amter
+amtet
+amtets
+amtmann
+amtmannen
+amtmannens
+amtmenn
+amtmennene
+amtmennenes
+amtmenns
+amulett
+amuletten
+amulettene
+amulettens
+amuletter
+amusert
+an
+anagram
+anagrammet
+anagrammets
+anakronisme
+anakronismen
+anakronismene
+anakronismens
+anakronismer
+anal
+analfabet
+analfabeten
+analfabetene
+analfabetens
+analfabeter
+analfabetisme
+analfabetismen
+analfabetismens
+analog
+analoge
+analogi
+analogien
+analogiene
+analogiens
+analogier
+analogisk
+analogt
+analyse
+analysen
+analysene
+analysens
+analyser
+analysere
+analyserende
+analyseres
+analysert
+analysetjeneste
+analysetjenesten
+analysetjenestens
+analytisk
+analytiske
+anamnese
+anamnesen
+anamnesene
+anamnesens
+anamneser
+ananas
+ananasen
+ananasene
+ananasens
+ananaser
+anapest
+anapesten
+anapestene
+anapestens
+anapester
+anarki
+anarkia
+anarkiene
+anarkier
+anarkiet
+anarkiets
+anarkisme
+anarkismen
+anarkismens
+anarkist
+anarkisten
+anarkistene
+anarkistens
+anarkister
+anarkistisk
+anarkistiske
+anatom
+anatomen
+anatomene
+anatomens
+anatomer
+anatomi
+anatomien
+anatomiene
+anatomiens
+anatomier
+anatomisk
+anbefal
+anbefale
+anbefalelsesverdig
+anbefaler
+anbefales
+anbefaling
+anbefalinga
+anbefalingen
+anbefalingene
+anbefalingens
+anbefalinger
+anbefalingsbrev
+anbefalt
+anbefalte
+anbrakt
+anbrakte
+anbringe
+anbringelse
+anbringelsen
+anbringelsens
+anbringes
+anbud
+anbuda
+anbudene
+anbudet
+anbudets
+anbudsarbeider
+anbudsarbeidere
+anbudsarbeideren
+anbudsarbeiderens
+anbudsarbeideres
+anbudsarbeiderne
+anbudsarbeidernes
+anbudsbefaring
+anbudsbefaringa
+anbudsbefaringen
+anbudsbefaringens
+anbudsdokument
+anbudsdokumentene
+anbudsdokumenter
+anbudsdokumentet
+anbudsdokumentets
+anbudsfrist
+anbudsfristen
+anbudsfristene
+anbudsfristens
+anbudsfrister
+anbudsinnbydelse
+anbudsinnbydelsen
+anbudsinnbydelsens
+anbyder
+anbydere
+anbyderen
+anbyderens
+anbyderes
+anbyderne
+anbydernes
+and
+anda
+andakt
+andakta
+andakten
+andaktene
+andaktens
+andakter
+andaktsform
+andaktsforma
+andaktsformen
+andaktsformene
+andaktsformens
+andaktsformer
+andaktssending
+andaktssendingen
+andaktssendingene
+andaktssendingens
+andaktssendinger
+andaktsstemning
+andaktsstemningen
+andaktsstemningens
+andante
+andanten
+andantene
+andantens
+andanter
+ande
+andedam
+andedammen
+andedammene
+andedammens
+andedammer
+andektig
+andel
+andelen
+andelene
+andelens
+andeler
+andelslag
+andelslaga
+andelslagene
+andelslaget
+andelslagets
+anden
+andens
+andføttes
+andlet
+andleta
+andletene
+andletet
+andletets
+andorraner
+andorranere
+andorraneren
+andorranerens
+andorraneres
+andorranerne
+andorranernes
+andorransk
+andpusten
+andpustne
+andra
+andragende
+andragendet
+andre
+andres
+andrik
+andriken
+andrikene
+andrikens
+andriker
+andror
+androren
+androrens
+andunge
+andungen
+andungens
+andøvd
+andøvde
+andøve
+ane
+anekdote
+anekdoten
+anekdotens
+anekdotisk
+anekdotiske
+anelse
+anelsen
+anelsene
+anelsens
+anelser
+anemi
+anemien
+anemiene
+anemiens
+anemier
+anemisk
+anemiske
+anemone
+anemonen
+anemonens
+aner
+anerkjenne
+anerkjennelse
+anerkjennelsen
+anerkjennelsens
+anerkjennende
+anerkjenner
+anerkjennes
+anerkjent
+anerkjente
+anes
+anestesi
+anestesien
+anestesiens
+anfall
+anfalle
+anfaller
+anfallet
+anfalt
+anfekta
+anfekte
+anfektelse
+anfektelsen
+anfektelsens
+anfekter
+anfektet
+anfør
+anføre
+anfører
+anførere
+anføreren
+anførerens
+anføreres
+anførerne
+anførernes
+anførsel
+anførselen
+anførselens
+anførselstegn
+anførselstegna
+anførselstegnene
+anførselstegnet
+anførselstegnets
+anførslene
+anførsler
+anført
+anførte
+ang
+angå
+angav
+ange
+angel
+angelegen
+angelen
+angelens
+angelsakserne
+angelsaksisk
+angelsaksiske
+angeltrøa
+angen
+angående
+angenem
+angens
+anger
+angeren
+angerens
+angerfull
+anget
+angi
+angikk
+angina
+anginaen
+anginaens
+angir
+angis
+angitt
+angitte
+angivelig
+angivelige
+angivelse
+angivelsen
+angivelsene
+angivelsens
+angivelser
+angiver
+angivere
+angiveren
+angiverens
+angiveres
+angiveri
+angiveria
+angiveriene
+angiverier
+angiveriet
+angiveriets
+angiverne
+angivernes
+angjeldende
+angle
+angler
+anglere
+angleren
+anglerens
+angleres
+anglerne
+anglernes
+anglikaner
+anglikanere
+anglikaneren
+anglikanerens
+anglikaneres
+anglikanerne
+anglikanernes
+anglist
+anglisten
+anglistene
+anglistens
+anglister
+angloamerikaner
+angloamerikanere
+angloamerikaneren
+angloamerikanerens
+angloamerikaneres
+angloamerikanerne
+angloamerikanernes
+angloaraber
+angloarabere
+angloaraberen
+angloaraberens
+angloaraberes
+angloaraberne
+angloarabernes
+angolaner
+angolanere
+angolaneren
+angolanerens
+angolaneres
+angolanerne
+angolanernes
+angolansk
+angora
+angoraen
+angoraens
+angorakatt
+angorakatten
+angorakattene
+angorakattens
+angorakatter
+angostura
+angår
+angra
+angre
+angrende
+angrep
+angrepa
+angrepene
+angrepet
+angrepets
+angrepskrig
+angrepskrigen
+angrepskrigene
+angrepskrigens
+angrepskriger
+angrepsrekke
+angrepsrekken
+angrepsrekkens
+angrepsspill
+angrepsspiller
+angrepsspillet
+angrepsspillets
+angrer
+angret
+angrip
+angripe
+angriper
+angripere
+angriperen
+angriperens
+angriperes
+angriperne
+angripernes
+angripes
+angst
+angstbitere
+angstbiteren
+angstbiterens
+angsten
+angstene
+angstens
+angster
+anhang
+anholde
+anholdelse
+anholdelsen
+anholdelsene
+anholdelsens
+anholder
+anholdt
+anholdte
+anilin
+anilinet
+anilinets
+animalsk
+animere
+animerer
+animert
+animerte
+animositet
+animositeten
+animositetens
+aning
+aninga
+aningen
+aningene
+aningens
+aninger
+anion
+anionet
+anionets
+anis
+anisen
+anisens
+anisette
+anisetten
+anisettens
+ank
+anka
+anke
+ankedomstol
+ankedomstolen
+ankedomstolene
+ankedomstolens
+ankedomstoler
+ankeinstans
+ankeinstansen
+ankeinstansene
+ankeinstansens
+ankeinstanser
+ankel
+ankelen
+ankelens
+ankelskade
+ankelskaden
+ankelskadene
+ankelskadens
+ankelskader
+ankelskadet
+ankemål
+ankemålet
+ankemålets
+anken
+ankene
+ankenemnd
+ankenemnda
+ankens
+ankepunkt
+ankepunkta
+ankepunktene
+ankepunkter
+ankepunktet
+ankepunktets
+anker
+ankerbolt
+ankerbolten
+ankerboltens
+ankerbøye
+ankerbøyen
+ankerbøyene
+ankerbøyens
+ankerbøyer
+ankere
+ankeret
+ankermann
+ankermannen
+ankermannens
+ankermenn
+ankermennene
+ankermennenes
+ankermenns
+ankerplass
+ankerplassen
+ankerplassens
+ankervinsj
+ankervinsjene
+ankervinsjet
+ankervinsjets
+ankesak
+ankesaka
+ankesaken
+ankesakens
+ankesaker
+anket
+anklage
+anklagede
+anklagen
+anklagene
+anklager
+anklages
+anklaget
+anklene
+ankler
+ankom
+ankomme
+ankommende
+ankommer
+ankommet
+ankomst
+ankomsten
+ankomstene
+ankomstens
+ankomster
+ankomstmelding
+ankomstmeldinga
+ankomstmeldingen
+ankomstmeldingene
+ankomstmeldingens
+ankomstmeldinger
+ankomsttid
+ankomsttida
+ankomsttiden
+ankomsttidens
+ankomsttider
+ankra
+ankre
+ankrene
+ankret
+anla
+anlagt
+anlagte
+anledning
+anledningen
+anledningene
+anledningens
+anledninger
+anlegg
+anlegge
+anleggelse
+anleggelsen
+anleggelsens
+anleggene
+anlegges
+anlegget
+anleggets
+anleggs
+anleggsarbeid
+anleggsarbeidene
+anleggsarbeider
+anleggsarbeidet
+anleggsarbeidets
+anleggsavdeling
+anleggsavdelinga
+anleggsavdelingen
+anleggsavdelingene
+anleggsavdelingens
+anleggsavdelinger
+anleggsbrakke
+anleggsbrakken
+anleggsbrakkene
+anleggsbrakkens
+anleggsbrakker
+anleggsbudsjett
+anleggsbudsjetta
+anleggsbudsjettene
+anleggsbudsjettet
+anleggsbudsjettets
+anleggsdrift
+anleggsdrifta
+anleggsdriften
+anleggsdriftens
+anleggsfolk
+anleggsfolka
+anleggsfolkene
+anleggslager
+anleggslageret
+anleggslagerets
+anleggslagra
+anleggslagrene
+anleggsleder
+anleggsledere
+anleggslederen
+anleggslederens
+anleggslederes
+anleggslederne
+anleggsledernes
+anleggsomkostning
+anleggsomkostningen
+anleggsomkostningene
+anleggsomkostningens
+anleggsomkostninger
+anleggsoppgave
+anleggsoppgaven
+anleggsoppgavene
+anleggsoppgavens
+anleggsoppgaver
+anleggsperiode
+anleggsperioden
+anleggsperiodene
+anleggsperiodens
+anleggsperioder
+anleggsplass
+anleggsplassen
+anleggsplassene
+anleggsplassens
+anleggsplasser
+anleggspris
+anleggsprisen
+anleggsprisens
+anleggssektor
+anleggssektoren
+anleggssektorens
+anleggsstab
+anleggsstaben
+anleggsstabene
+anleggsstabens
+anleggsstaber
+anleggstid
+anleggstida
+anleggstiden
+anleggstidens
+anleggstransport
+anleggstransporten
+anleggstransportene
+anleggstransportens
+anleggstransporter
+anleggsutgift
+anleggsutgiften
+anleggsutgiftene
+anleggsutgiftens
+anleggsutgifter
+anleggsvei
+anleggsveien
+anleggsveiene
+anleggsveiens
+anleggsveier
+anleggsvirksomhet
+anleggsvirksomheten
+anleggsvirksomhetens
+anliggende
+anliggender
+anliggendet
+anløp
+anløpe
+anløpene
+anløper
+anløpet
+anløpshavn
+anløpshavnen
+anløpshavnene
+anløpshavnens
+anløpshavner
+anløpssted
+anløpsstedene
+anløpssteder
+anløpsstedet
+anløpsstedets
+anmarsj
+anmarsjen
+anmarsjens
+anmelde
+anmeldelse
+anmeldelsen
+anmeldelsene
+anmeldelsens
+anmeldelser
+anmeldelsesfrist
+anmeldelsesfristen
+anmeldelsesfristene
+anmeldelsesfristens
+anmeldelsesfrister
+anmelder
+anmeldere
+anmelderen
+anmelderens
+anmelderes
+anmelderne
+anmeldernes
+anmeldes
+anmeldt
+anmeldte
+anmerka
+anmerke
+anmerket
+anmerkning
+anmerkningen
+anmerkningens
+anmoda
+anmode
+anmoder
+anmodes
+anmodet
+anmodning
+anmodningen
+anmodningene
+anmodningens
+anmodninger
+anna
+annal
+annalen
+annalene
+annalens
+annaler
+annalforfatter
+annalforfattere
+annalforfatteren
+annalforfatterens
+annalforfatteres
+annalforfatterne
+annalforfatternes
+annamma
+annamme
+annammer
+annammet
+anneks
+anneksa
+anneksbygning
+anneksbygningen
+anneksbygningens
+anneksene
+annekser
+annekset
+anneksets
+anneksjon
+anneksjonen
+anneksjonene
+anneksjonens
+anneksjoner
+annektere
+annektert
+annekterte
+annen
+annengradsligning
+annengradsligningen
+annengradsligningene
+annengradsligningens
+annengradsligninger
+annengradslikning
+annengradslikningen
+annengradslikningene
+annengradslikningens
+annengradslikninger
+annenhånds
+annenhver
+annenmann
+annenmannen
+annenmannens
+annenmaskinist
+annenmaskinisten
+annenmaskinistens
+annenplass
+annenplassen
+annenplassene
+annenplassens
+annenplasser
+annenrangs
+annens
+annensteds
+annenstedsfra
+annenstyrmann
+annenstyrmannen
+annenstyrmannens
+annenstyrmenn
+annenstyrmennene
+annenstyrmennenes
+annenstyrmenns
+annenutgave
+annenutgaven
+annenutgavens
+annerledes
+annerledestroende
+annet
+annethvert
+annetlag
+annetlaget
+annetlagets
+annetsteds
+annetstedsfra
+annleis
+anno
+annonse
+annonseavis
+annonseavisen
+annonseavisens
+annonsebyrå
+annonsebyråa
+annonsebyråene
+annonsebyråer
+annonsebyrået
+annonsebyråets
+annonsen
+annonsene
+annonsens
+annonseomkostning
+annonseomkostningen
+annonseomkostningene
+annonseomkostningens
+annonseomkostninger
+annonsepris
+annonseprisen
+annonseprisene
+annonseprisens
+annonsepriser
+annonser
+annonsere
+annonserer
+annonseres
+annonsering
+annonseringa
+annonseringen
+annonseringens
+annonseringer
+annonsert
+annonserte
+annonsesida
+annonseside
+annonsesiden
+annonsesidene
+annonsesidens
+annonsesider
+annonsør
+annonsøren
+annonsørene
+annonsørens
+annonsører
+annotasjon
+annotasjonen
+annotasjonene
+annotasjonens
+annotasjoner
+annotere
+annoterer
+annotert
+annoterte
+annuitet
+annuiteten
+annuitetene
+annuitetens
+annuiteter
+annuller
+annullere
+annullert
+annvinn
+annvint
+anode
+anoden
+anodens
+anomali
+anomalien
+anomaliene
+anomaliens
+anomalier
+anonym
+anonyme
+anonymitet
+anonymiteten
+anonymitetens
+anonymitetsprinsipp
+anonymitetsprinsippet
+anonymitetsprinsippets
+anonymt
+anorakk
+anorakken
+anorakkene
+anorakkens
+anorakker
+anorakklomma
+anorakklomme
+anorakklommen
+anorakklommene
+anorakklommens
+anorakklommer
+anordne
+anordner
+anordnet
+anordning
+anordninga
+anordningen
+anordningene
+anordningens
+anordninger
+anorganisk
+anpasning
+anpasningen
+anpasningens
+anpassa
+anpasse
+anpasser
+anpasset
+anretning
+anretningen
+anretningene
+anretningens
+anretninger
+anrette
+anretter
+anrettet
+anrike
+anriker
+anriket
+anrop
+anrope
+anropt
+ans
+anså
+ansamle
+ansamling
+ansamlinga
+ansamlingen
+ansamlingene
+ansamlingens
+ansamlinger
+ansats
+ansatsen
+ansatsene
+ansatsens
+ansatser
+ansatt
+ansatte
+ansattes
+anse
+anseelig
+anseelige
+anseelse
+anseelsen
+anseelsens
+ansees
+anselig
+anselige
+anser
+anses
+ansett
+ansette
+ansettelse
+ansettelsen
+ansettelsene
+ansettelsens
+ansettelser
+ansettelsespolitikk
+ansettelsespolitikken
+ansettelsespolitikkens
+ansettelsesprosedyre
+ansettelsesprosedyren
+ansettelsesprosedyrene
+ansettelsesprosedyrens
+ansettelsesprosedyrer
+ansettelsesvilkår
+ansettelsesvilkåra
+ansettelsesvilkårene
+ansettelsesvilkåret
+ansettelsesvilkårets
+ansetter
+ansettes
+ansiennitet
+ansienniteten
+ansiennitetens
+ansig
+ansikt
+ansikter
+ansiktet
+ansiktets
+ansikts
+ansiktsdrag
+ansiktsdraga
+ansiktsdragene
+ansiktsdraget
+ansiktsdragets
+ansiktsfarge
+ansiktsfargen
+ansiktsfargene
+ansiktsfargens
+ansiktsfarger
+ansiktsløftning
+ansiktsløftningen
+ansiktsløftningene
+ansiktsløftningens
+ansiktsløftninger
+ansiktsmaska
+ansiktsmaske
+ansiktsmasken
+ansiktsmaskens
+ansiktsmasker
+ansiktstrekk
+ansiktstrekka
+ansiktstrekkene
+ansiktstrekket
+ansiktstrekkets
+ansiktsuttrykk
+ansiktsuttrykka
+ansiktsuttrykkene
+ansiktsuttrykket
+ansiktsuttrykkets
+ansjos
+ansjosboks
+ansjosboksen
+ansjosboksene
+ansjosboksens
+ansjosbokser
+ansjosen
+ansjosene
+ansjosens
+ansjoser
+anskaffe
+anskaffelse
+anskaffelsen
+anskaffelsens
+anskaffer
+anskaffes
+anskaffet
+ansøke
+ansøker
+ansøkerland
+ansøkerlanda
+ansøkerlandene
+ansøkerlandet
+ansøkerlandets
+ansøkernasjon
+ansøkernasjonen
+ansøkernasjonene
+ansøkernasjonens
+ansøkernasjoner
+ansøkning
+ansøkningen
+ansøkningene
+ansøkningens
+ansøkninger
+ansøkningsblankett
+ansøkningsblanketten
+ansøkningsblankettene
+ansøkningsblankettens
+ansøkningsblanketter
+ansøkningsformular
+ansøkningsformularet
+ansøkningsformularets
+anskreven
+anskrevet
+anskrevne
+anskrik
+anskriket
+anskrikets
+ansøkt
+ansøkte
+anskua
+anskue
+anskuelig
+anskueliggjort
+anskueliggjøre
+anskueliggjørelse
+anskueliggjørelsen
+anskueliggjørelsens
+anskuelse
+anskuelsen
+anskuelsene
+anskuelsens
+anskuelser
+anskuelsesundervisning
+anskuelsesundervisninga
+anskuer
+anskuet
+anslå
+anslag
+anslaga
+anslagene
+anslaget
+anslagets
+anslagsvis
+anslagsvise
+anslo
+anslår
+anslås
+anslått
+anslutning
+anslutningen
+anslutningene
+anslutningens
+anslutninger
+anslutte
+ansluttet
+anspenne
+anspennelse
+anspennelsen
+anspennelsene
+anspennelsens
+anspennelser
+anspent
+anspente
+anspore
+ansporelse
+ansporelsen
+ansporelsene
+ansporelsens
+ansporelser
+ansporet
+anstalt
+anstalten
+anstaltene
+anstaltens
+anstalter
+anstalthusholdning
+anstalthusholdningen
+anstalthusholdningene
+anstalthusholdningens
+anstalthusholdninger
+anstaltmakeri
+anstaltmakeriet
+anstaltmakeriets
+anstand
+anstanden
+anstandens
+anstendig
+anstendige
+anstendighet
+anstendigheten
+anstendighetens
+anstendigvis
+anstifte
+anstifter
+anstiftet
+anstille
+anstiller
+anstilt
+anstilte
+anstrenge
+anstrengelse
+anstrengelsen
+anstrengelsene
+anstrengelsens
+anstrengelser
+anstrengende
+anstrenger
+anstrengt
+anstrengte
+anstrøk
+anstrøket
+anstrøkets
+anstryke
+anstryker
+anstøt
+anstøta
+anstøtelig
+anstøtene
+anstøtet
+anstøtets
+anstøtsstein
+anstøtssteinen
+anstøtssteinens
+anstøtssten
+anstøtsstenen
+anstøtsstenens
+ansvar
+ansvaret
+ansvarets
+ansvarlig
+ansvarlige
+ansvarlighet
+ansvarligheten
+ansvarlighetens
+ansvarlighetslov
+ansvarlighetsloven
+ansvarlighetslovens
+ansvarsbevisst
+ansvarsbevisste
+ansvarsfølelse
+ansvarsfølelsen
+ansvarsfølelsens
+ansvarsforhold
+ansvarsforholda
+ansvarsforholdene
+ansvarsforholdet
+ansvarsforholdets
+ansvarsforsikring
+ansvarsforsikringa
+ansvarsforsikringen
+ansvarsforsikringens
+ansvarsfraskrivelse
+ansvarsfraskrivelsen
+ansvarsfraskrivelsens
+ansvarsfrihet
+ansvarsfriheten
+ansvarsfrihetens
+ansvarsfulle
+ansvarsfullt
+ansvarshavende
+ansvarskjensla
+ansvarskjensle
+ansvarslaus
+ansvarsløs
+ansvarsløse
+ansvarsløshet
+ansvarsløsheten
+ansvarsløshetens
+ansvarsløst
+ansvarsløysa
+ansvarsløyse
+ansvarsområda
+ansvarsområde
+ansvarsområdene
+ansvarsområder
+ansvarsområdet
+ansvarsområdets
+anta
+antabus
+antabusen
+antabusens
+antagelse
+antagelsen
+antagelsene
+antagelsens
+antagelser
+antagonisme
+antagonismen
+antagonismens
+antagonist
+antagonisten
+antagonistene
+antagonistens
+antagonister
+antakelig
+antakelse
+antakelsen
+antakelsene
+antakelsens
+antakelser
+antall
+antalla
+antallene
+antallet
+antallets
+antar
+antarktisk
+antarktiske
+antas
+antaste
+antastelse
+antastelsen
+antastelsene
+antastelsens
+antastelser
+antastet
+antatt
+antatte
+ante
+antecedens
+antecedensen
+antecedensene
+antecedensens
+antecedenser
+antedatere
+antedaterer
+antedatering
+antedateringa
+antedateringen
+antedateringens
+antedatert
+antedaterte
+antegne
+antegnelse
+antegnelsen
+antegnelsene
+antegnelsens
+antegnelser
+antegnet
+antemensale
+antemensalet
+antennbar
+antenne
+antennelig
+antennelse
+antennelsen
+antennelsens
+antennen
+antennens
+antenner
+antennes
+antennetilkobling
+antennetilkoblinga
+antennetilkoblingen
+antennetilkoblingens
+antennetråd
+antenneuttak
+antent
+antente
+antesipasjon
+antesipasjonen
+antesipasjonene
+antesipasjonens
+antesipasjoner
+antesipere
+antesipert
+antesiperte
+anti
+antiamerikansk
+antibiotika
+antibiotikaene
+antibiotikum
+antibiotikumet
+antibiotikumets
+antidemokratiske
+antidemonstrasjon
+antidemonstrasjonen
+antidemonstrasjonene
+antidemonstrasjonens
+antidemonstrasjoner
+antigen
+antigena
+antigenen
+antigenene
+antigenens
+antigener
+antigenet
+antigenets
+antihelt
+antihelten
+antiheltene
+antiheltens
+antihelter
+antikk
+antikken
+antikkens
+antiklimaks
+antiklimakset
+antiklimaksets
+antikoaguleringsmiddel
+antikoaguleringsmiddelet
+antikoaguleringsmiddelets
+antikoaguleringsmidla
+antikoaguleringsmidlene
+antikoaguleringsmidler
+antikoaguleringsmidlet
+antikoaguleringsmidlets
+antikommunisme
+antikommunismen
+antikommunismens
+antikonsepsjon
+antikonsepsjonsmidler
+antikonsepsjonspille
+antikonsepsjonspillen
+antikonsepsjonspillene
+antikonsepsjonspillens
+antikonsepsjonspiller
+antikrist
+antikristen
+antikristene
+antikristens
+antikrister
+antikt
+antikva
+antikvaen
+antikvaens
+antikvar
+antikvarbokhandler
+antikvarbokhandlere
+antikvarbokhandleren
+antikvarbokhandlerens
+antikvarbokhandleres
+antikvarbokhandlerforening
+antikvarbokhandlerforeninga
+antikvarbokhandlerforeningen
+antikvarbokhandlerforeningene
+antikvarbokhandlerforeningens
+antikvarbokhandlerforeninger
+antikvarbokhandlerne
+antikvarbokhandlernes
+antikvaren
+antikvarene
+antikvarens
+antikvarer
+antikvariat
+antikvariata
+antikvariatene
+antikvariater
+antikvariatet
+antikvariatets
+antikvarisk
+antikvariske
+antikveres
+antikvert
+antikvitet
+antikviteten
+antikvitetens
+antikviteter
+antikvitets
+antikvitetshandler
+antikvitetshandlere
+antikvitetshandleren
+antikvitetshandlerens
+antikvitetshandleres
+antikvitetshandlerne
+antikvitetshandlernes
+antikvitetsmarked
+antikvitetsmarkeda
+antikvitetsmarkedene
+antikvitetsmarkeder
+antikvitetsmarkedet
+antikvitetsmarkedets
+antilope
+antilopen
+antilopens
+antimarxistiske
+antimenneskelige
+antimon
+antimonet
+antimonets
+antiparasitt
+antiparasitten
+antiparasittens
+antipati
+antipatien
+antipatiene
+antipatiens
+antipatier
+antipatisk
+antipluralistisk
+antipode
+antipoden
+antipodens
+antirakett
+antiraketten
+antirakettene
+antirakettens
+antiraketter
+antirakettforsvar
+antisemitt
+antisemitten
+antisemittene
+antisemittens
+antisemitter
+antisemittisk
+antisemittisme
+antisemittismen
+antisemittismens
+antiseptisk
+antistatbehandling
+antistatbehandlinga
+antistatbehandlingen
+antistatbehandlingens
+antistatisk
+antistatiske
+antistoff
+antistoffa
+antistoffene
+antistoffer
+antistoffet
+antistoffets
+antitrust
+antitrustlov
+antok
+antologi
+antologien
+antologiene
+antologiens
+antologier
+antonym
+antonyma
+antonymene
+antonymer
+antonymet
+antonymi
+antonymien
+antonymiens
+antrasitt
+antrasitten
+antrasittens
+antrekk
+antrekka
+antrekkene
+antrekket
+antrekkets
+antropofobi
+antropofobien
+antropofobiens
+antropolog
+antropologen
+antropologene
+antropologens
+antropologer
+antropologi
+antropologien
+antropologiens
+antropologisk
+antroposof
+antroposofen
+antroposofene
+antroposofens
+antroposofer
+antroposofi
+antroposofien
+antroposofiens
+antroposofisk
+antrukket
+antrukne
+antyde
+antydende
+antyder
+antydes
+antydet
+antydning
+antydningen
+antydningene
+antydningens
+antydninger
+antydningsvis
+anus
+anvendbar
+anvendbarhet
+anvendbarheten
+anvendbarhetens
+anvende
+anvendelig
+anvendelige
+anvendelighet
+anvendeligheten
+anvendelighetens
+anvendelse
+anvendelsen
+anvendelsens
+anvendelsesmulighet
+anvendelsesmuligheten
+anvendelsesmulighetene
+anvendelsesmulighetens
+anvendelsesmuligheter
+anvendelsesområda
+anvendelsesområde
+anvendelsesområdene
+anvendelsesområder
+anvendelsesområdet
+anvendelsesområdets
+anvender
+anvendes
+anvendt
+anvendte
+anvise
+anviser
+anvises
+anvisning
+anvisningen
+anvisningene
+anvisningens
+anvisninger
+anvisningsrett
+anvisningsretten
+anvisningsrettens
+anvist
+aorta
+aortaen
+aortaens
+ap
+apal
+apalen
+apalene
+apalens
+apaler
+apanasje
+apanasjen
+apanasjens
+aparte
+apartheid
+apartheiden
+apartheidens
+apartheidlov
+apartheidloven
+apartheidlovene
+apartheidlovens
+apartheidlover
+apartheidpolitikk
+apartheidpolitikken
+apartheidpolitikkens
+apartheids
+apasje
+apasjen
+apasjene
+apasjens
+apasjer
+apati
+apatien
+apatiens
+apatisk
+apatiske
+apatitt
+apatitten
+apatittens
+ape
+apebesøk
+apefjes
+apefjesene
+apefjeset
+apefjesets
+apekatt
+apekatten
+apekattene
+apekattens
+apekatter
+apen
+apens
+aper
+aperitiff
+aperitiffen
+aperitiffene
+aperitiffens
+aperitiffer
+apet
+aplomb
+aplomben
+aplombens
+apokalypse
+apokalypsen
+apokalypsens
+apokalyptisk
+apokope
+apokopen
+apokopens
+apokryf
+apokryfe
+apokryfisk
+apokryft
+apollinaris
+apollinarisen
+apollinarisens
+apologi
+apologien
+apologiene
+apologiens
+apologier
+apopleksi
+apopleksien
+apopleksiens
+apoplektisk
+apostel
+apostelen
+apostelens
+aposteltid
+aposteltida
+aposteltiden
+aposteltidens
+apostlene
+apostlenes
+apostler
+apostolisk
+apostrof
+apostrofen
+apostrofene
+apostrofens
+apostrofer
+apostrofere
+apotek
+apoteka
+apotekene
+apoteker
+apotekere
+apotekeren
+apotekerens
+apotekeres
+apotekermedhjelper
+apotekermedhjelpere
+apotekermedhjelperen
+apotekermedhjelperens
+apotekermedhjelperes
+apotekermedhjelperne
+apotekermedhjelpernes
+apotekerne
+apotekernes
+apoteket
+apotekets
+apotekvakt
+apotekvakten
+apotekvaktene
+apotekvaktens
+apotekvakter
+apotekvare
+apotekvaren
+apotekvarene
+apotekvarens
+apotekvarer
+apparat
+apparata
+apparatene
+apparater
+apparatet
+apparatets
+apparatur
+apparaturen
+apparaturene
+apparaturens
+apparaturer
+apparens
+apparensen
+apparensens
+apparent
+apparisjon
+apparisjonen
+apparisjonene
+apparisjonens
+apparisjoner
+appartement
+appartementa
+appartementene
+appartementer
+appartementet
+appartementets
+appassionato
+appeal
+appell
+appellabel
+appellant
+appellanten
+appellantene
+appellantens
+appellanter
+appellativ
+appellativa
+appellativene
+appellativer
+appellativet
+appellativets
+appellen
+appellene
+appellens
+appeller
+appellere
+appellerer
+appellert
+appellerte
+appellinstans
+appellinstansen
+appellinstansene
+appellinstansens
+appellinstanser
+appellrett
+appellretten
+appellrettens
+appelsin
+appelsinen
+appelsinene
+appelsinens
+appelsiner
+appelsinmarmelade
+appelsinmarmeladen
+appelsinmarmeladens
+appelsinskall
+appendiks
+appendiksa
+appendiksen
+appendiksene
+appendiksens
+appendikser
+appendikset
+appendiksets
+appendisitt
+appendisitten
+appendisittene
+appendisittens
+appendisitter
+appersepsjon
+appersepsjonen
+appersepsjonene
+appersepsjonens
+appersepsjoner
+appersipere
+appersiperer
+appersipert
+appersiperte
+appetitt
+appetitten
+appetittens
+appetittlig
+appetittvekkende
+applaudere
+applaudert
+applauderte
+applaus
+applausen
+applausene
+applausens
+applauser
+applikasjon
+applikasjonen
+applikasjonene
+applikasjonens
+applikasjoner
+applikere
+applikert
+applikerte
+applisere
+appliserer
+applisert
+appliserte
+apport
+apporten
+apportens
+apporter
+apportere
+apporterer
+apportert
+apporterte
+apportør
+apportøren
+apportørene
+apportørens
+apportører
+apposisjon
+apposisjonen
+apposisjonene
+apposisjonens
+apposisjoner
+appretur
+appreturen
+appreturens
+approbasjon
+approbasjonen
+approbasjonene
+approbasjonens
+approbasjoner
+approbere
+approberer
+approbert
+approberte
+approksimere
+approksimerer
+approksimeres
+approksimert
+approksimerte
+appropriasjon
+appropriasjonen
+appropriasjonene
+appropriasjonens
+appropriasjoner
+appropriere
+approprierer
+appropriert
+approprierte
+aprikos
+aprikosen
+aprikosene
+aprikosens
+aprikoser
+april
+aprildag
+aprildagen
+aprildagene
+aprildagens
+aprildager
+aprilsnarr
+aprilspøk
+aprilspøken
+aprilspøkens
+apriorisk
+aprioriske
+apropos
+aproposa
+aproposene
+aproposer
+aproposet
+aproposets
+apt
+apte
+aqua
+ar
+araber
+arabere
+araberen
+araberens
+araberes
+araberhest
+araberhesten
+araberhestene
+araberhestens
+araberhester
+araberland
+araberlanda
+araberlandene
+araberne
+arabernes
+araberstat
+araberstaten
+araberstatene
+araberstatens
+araberstater
+araberverdenen
+araberverdenens
+arabesk
+arabesken
+arabeskene
+arabeskens
+arabesker
+arabisk
+arabiske
+arak
+araken
+arakens
+arameer
+arameere
+arameeren
+arameerens
+arameeres
+arameerne
+arameernes
+arameiske
+arbeid
+arbeida
+arbeidd
+arbeidde
+arbeide
+arbeidende
+arbeidene
+arbeider
+arbeideravis
+arbeideravisa
+arbeideravisen
+arbeideravisene
+arbeideravisens
+arbeideraviser
+arbeiderbefolkningens
+arbeiderbevegelse
+arbeiderbevegelsen
+arbeiderbevegelsens
+arbeiderblad
+arbeiderbladet
+arbeiderbladets
+arbeiderblads
+arbeiderdemonstrasjon
+arbeiderdemonstrasjonen
+arbeiderdemonstrasjonene
+arbeiderdemonstrasjonens
+arbeiderdemonstrasjoner
+arbeidere
+arbeideren
+arbeiderens
+arbeideres
+arbeiderfamilie
+arbeiderfamilien
+arbeiderfamiliene
+arbeiderfamiliens
+arbeiderfamilier
+arbeiderforbund
+arbeiderforbunda
+arbeiderforbundene
+arbeiderforbundet
+arbeiderforbundets
+arbeiderforening
+arbeiderforeninga
+arbeiderforeningen
+arbeiderforeningene
+arbeiderforeningens
+arbeiderforeninger
+arbeiderhjem
+arbeiderhjemmet
+arbeiderhjemmets
+arbeiderklasse
+arbeiderklassen
+arbeiderklassens
+arbeiderkomité
+arbeiderkomiteen
+arbeiderkomiteene
+arbeiderkomiteens
+arbeiderkomiteer
+arbeiderkonflikt
+arbeiderkonflikten
+arbeiderkonfliktene
+arbeiderkonfliktens
+arbeiderkonflikter
+arbeiderlag
+arbeiderlaga
+arbeiderlagene
+arbeiderlaget
+arbeiderlagets
+arbeidermakt
+arbeidermakta
+arbeidermakten
+arbeidermaktens
+arbeiderne
+arbeidernes
+arbeidernivå
+arbeidernivået
+arbeidernivåets
+arbeiderparti
+arbeiderpartiene
+arbeiderpartier
+arbeiderpartiregjering
+arbeiderpartiregjeringa
+arbeiderpartiregjeringen
+arbeiderpartiregjeringene
+arbeiderpartiregjeringens
+arbeiderpartiregjeringer
+arbeiderpartis
+arbeiderpartivelgere
+arbeiderpartivelgeren
+arbeiderpartivelgerens
+arbeidersamfunn
+arbeidersamfunna
+arbeidersamfunnene
+arbeidersamfunnet
+arbeidersamfunnets
+arbeiderstreik
+arbeiderstreiken
+arbeiderstreikene
+arbeiderstreikens
+arbeiderstreiker
+arbeidervernlovens
+arbeides
+arbeidet
+arbeidets
+arbeids
+arbeidsbelastning
+arbeidsbelastningen
+arbeidsbelastningene
+arbeidsbelastningens
+arbeidsbelastninger
+arbeidsbelysning
+arbeidsbelysningen
+arbeidsbelysningene
+arbeidsbelysningens
+arbeidsbelysninger
+arbeidsbord
+arbeidsborda
+arbeidsbordene
+arbeidsbordet
+arbeidsbordets
+arbeidsbrakka
+arbeidsbrakke
+arbeidsbrakken
+arbeidsbrakkene
+arbeidsbrakkens
+arbeidsbrakker
+arbeidsbredde
+arbeidsbredden
+arbeidsbreddens
+arbeidsbrille
+arbeidsbrillen
+arbeidsbrillene
+arbeidsbrillens
+arbeidsbriller
+arbeidsbyrde
+arbeidsbyrden
+arbeidsbyrdens
+arbeidsdag
+arbeidsdagen
+arbeidsdagene
+arbeidsdagens
+arbeidsdager
+arbeidsdeling
+arbeidsdelinga
+arbeidsdelingen
+arbeidsdelingene
+arbeidsdelingens
+arbeidsdepartement
+arbeidsdepartementa
+arbeidsdepartementene
+arbeidsdepartementet
+arbeidsdepartementets
+arbeidsdirektorat
+arbeidsdirektoratet
+arbeidsdirektoratets
+arbeidsdirektør
+arbeidsdirektøren
+arbeidsdirektørene
+arbeidsdirektørens
+arbeidsdirektører
+arbeidseffektivitet
+arbeidseffektiviteten
+arbeidseffektivitetens
+arbeidsenhet
+arbeidsenheten
+arbeidsenhetene
+arbeidsenhetens
+arbeidsenheter
+arbeidsevna
+arbeidsevne
+arbeidsevnen
+arbeidsevnene
+arbeidsevnens
+arbeidsevner
+arbeidsfellesskap
+arbeidsfellesskapene
+arbeidsfellesskapet
+arbeidsfellesskapets
+arbeidsfelt
+arbeidsfelta
+arbeidsfeltene
+arbeidsfeltet
+arbeidsfeltets
+arbeidsfolk
+arbeidsfolka
+arbeidsfolkene
+arbeidsfolket
+arbeidsfolkets
+arbeidsfordeling
+arbeidsfordelinga
+arbeidsfordelingen
+arbeidsfordelingene
+arbeidsfordelingens
+arbeidsforhold
+arbeidsforholda
+arbeidsforholdene
+arbeidsforholdet
+arbeidsforholdets
+arbeidsforkortelse
+arbeidsforkortelsen
+arbeidsforkortelsene
+arbeidsforkortelsens
+arbeidsforkortelser
+arbeidsform
+arbeidsforma
+arbeidsformann
+arbeidsformannen
+arbeidsformannens
+arbeidsformen
+arbeidsformene
+arbeidsformenn
+arbeidsformennene
+arbeidsformennenes
+arbeidsformenns
+arbeidsformens
+arbeidsformer
+arbeidsformidling
+arbeidsformidlinga
+arbeidsformidlingen
+arbeidsformidlingene
+arbeidsformidlingens
+arbeidsformidlinger
+arbeidsfør
+arbeidsføre
+arbeidsfred
+arbeidsfreden
+arbeidsfredens
+arbeidsført
+arbeidsfysiologiske
+arbeidsgiver
+arbeidsgiveravgift
+arbeidsgiveravgifta
+arbeidsgiveravgiften
+arbeidsgiveravgiftens
+arbeidsgivere
+arbeidsgiveren
+arbeidsgiverens
+arbeidsgiveres
+arbeidsgiverforening
+arbeidsgiverforeninga
+arbeidsgiverforeningen
+arbeidsgiverforeningene
+arbeidsgiverforeningens
+arbeidsgiverforeninger
+arbeidsgiverhold
+arbeidsgiverne
+arbeidsgivernes
+arbeidsgivers
+arbeidsgjeng
+arbeidsgjengen
+arbeidsgjengene
+arbeidsgjengens
+arbeidsgjenger
+arbeidsglad
+arbeidsgleda
+arbeidsglede
+arbeidsgleden
+arbeidsgledens
+arbeidsgrunnlag
+arbeidsgrunnlagene
+arbeidsgrunnlaget
+arbeidsgrunnlagets
+arbeidsgruppa
+arbeidsgruppe
+arbeidsgruppen
+arbeidsgruppene
+arbeidsgruppens
+arbeidsgrupper
+arbeidsherre
+arbeidsherres
+arbeidshest
+arbeidshesten
+arbeidshestene
+arbeidshestens
+arbeidshester
+arbeidshjelp
+arbeidshjelpa
+arbeidshjelpen
+arbeidshjelpens
+arbeidshug
+arbeidshugen
+arbeidshugens
+arbeidsinnsats
+arbeidsinnsatsen
+arbeidsinnsatsens
+arbeidsinntekt
+arbeidsinntekta
+arbeidsinntekten
+arbeidsinntektene
+arbeidsinntektens
+arbeidsinntekter
+arbeidsinspektør
+arbeidsinspektøren
+arbeidsinspektørene
+arbeidsinspektørens
+arbeidsinspektører
+arbeidskamerat
+arbeidskameraten
+arbeidskameratene
+arbeidskameratens
+arbeidskamerater
+arbeidskapital
+arbeidskapitalen
+arbeidskapitalene
+arbeidskapitalens
+arbeidskapitaler
+arbeidskar
+arbeidskaren
+arbeidskarene
+arbeidskarens
+arbeidskarer
+arbeidskirke
+arbeidskirken
+arbeidskirkens
+arbeidsklær
+arbeidskollega
+arbeidskollegaen
+arbeidskollegaene
+arbeidskollegaens
+arbeidskollegaer
+arbeidskolleger
+arbeidskonflikt
+arbeidskonflikten
+arbeidskonfliktene
+arbeidskonfliktens
+arbeidskonflikter
+arbeidskonsulent
+arbeidskonsulenten
+arbeidskonsulentene
+arbeidskonsulentens
+arbeidskonsulenter
+arbeidskontor
+arbeidskontorene
+arbeidskontorer
+arbeidskontoret
+arbeidskontorets
+arbeidskraft
+arbeidskrafta
+arbeidskraften
+arbeidskraftens
+arbeidskraftreserve
+arbeidskraftreserven
+arbeidskraftreservens
+arbeidskraftsituasjon
+arbeidskraftsituasjonen
+arbeidskraftsituasjonene
+arbeidskraftsituasjonens
+arbeidskraftsituasjoner
+arbeidskrets
+arbeidskretsen
+arbeidskretsene
+arbeidskretsens
+arbeidskretser
+arbeidskrevende
+arbeidskrok
+arbeidskroken
+arbeidskrokene
+arbeidskrokens
+arbeidskroker
+arbeidskvinna
+arbeidskvinne
+arbeidskvinnen
+arbeidskvinnene
+arbeidskvinnens
+arbeidskvinner
+arbeidslag
+arbeidslaga
+arbeidslagene
+arbeidslager
+arbeidslaget
+arbeidslagets
+arbeidslampa
+arbeidslampe
+arbeidslampen
+arbeidslampene
+arbeidslampens
+arbeidslamper
+arbeidsledelse
+arbeidsledelsen
+arbeidsledelsens
+arbeidsledere
+arbeidslederen
+arbeidslederens
+arbeidslederforbund
+arbeidslederforbundet
+arbeidslederforbundets
+arbeidsledig
+arbeidsledige
+arbeidsledighet
+arbeidsledigheten
+arbeidsledighetens
+arbeidslinja
+arbeidslinje
+arbeidslinjen
+arbeidslinjene
+arbeidslinjens
+arbeidslinjer
+arbeidsliv
+arbeidslivet
+arbeidslivets
+arbeidsløse
+arbeidsløshet
+arbeidsløsheten
+arbeidsløshetens
+arbeidsløshetstrygd
+arbeidsløshetstrygda
+arbeidsløshetstrygden
+arbeidsløshetstrygdens
+arbeidsløst
+arbeidslunsj
+arbeidslunsjen
+arbeidslunsjene
+arbeidslunsjens
+arbeidslunsjer
+arbeidslys
+arbeidsløysa
+arbeidsløyse
+arbeidslyset
+arbeidsløysetrygd
+arbeidsløysetrygda
+arbeidslysets
+arbeidslyst
+arbeidslysten
+arbeidslystens
+arbeidsmann
+arbeidsmannen
+arbeidsmannens
+arbeidsmarked
+arbeidsmarkedet
+arbeidsmarkedets
+arbeidsmarkeds
+arbeidsmateriala
+arbeidsmateriale
+arbeidsmaterialene
+arbeidsmaterialet
+arbeidsmaur
+arbeidsmauren
+arbeidsmaurene
+arbeidsmaurens
+arbeidsmenn
+arbeidsmennene
+arbeidsmennenes
+arbeidsmenns
+arbeidsmessig
+arbeidsmessige
+arbeidsmetode
+arbeidsmetoden
+arbeidsmetodene
+arbeidsmetodens
+arbeidsmetoder
+arbeidsmiljø
+arbeidsmiljøa
+arbeidsmiljøene
+arbeidsmiljøer
+arbeidsmiljøet
+arbeidsmiljøets
+arbeidsminister
+arbeidsministeren
+arbeidsministerens
+arbeidsministrene
+arbeidsmoral
+arbeidsmoralen
+arbeidsmoralens
+arbeidsmåte
+arbeidsmåten
+arbeidsmåtene
+arbeidsmåtens
+arbeidsmåter
+arbeidsmulighet
+arbeidsmuligheten
+arbeidsmulighetene
+arbeidsmulighetens
+arbeidsmuligheter
+arbeidsnedleggelse
+arbeidsnedleggelsen
+arbeidsnedleggelsene
+arbeidsnedleggelsens
+arbeidsnedleggelser
+arbeidsom
+arbeidsomhet
+arbeidsomheten
+arbeidsomhetens
+arbeidsomkostning
+arbeidsomkostningen
+arbeidsomkostningene
+arbeidsomkostningens
+arbeidsomkostninger
+arbeidsomme
+arbeidsområde
+arbeidsområder
+arbeidsområdet
+arbeidsomt
+arbeidsoppgave
+arbeidsoppgaven
+arbeidsoppgavene
+arbeidsoppgavenes
+arbeidsoppgavens
+arbeidsoppgaver
+arbeidsopplegg
+arbeidsopplegga
+arbeidsoppleggene
+arbeidsopplegget
+arbeidsoppleggets
+arbeidsordning
+arbeidsordninga
+arbeidsordningen
+arbeidsordningene
+arbeidsordningens
+arbeidsordninger
+arbeidsorganisasjon
+arbeidsorganisasjonen
+arbeidsorganisasjonene
+arbeidsorganisasjonens
+arbeidsorganisasjoner
+arbeidsplass
+arbeidsplassen
+arbeidsplassene
+arbeidsplassens
+arbeidsplasser
+arbeidspress
+arbeidspresset
+arbeidspressets
+arbeidsprinsipp
+arbeidsprinsippa
+arbeidsprinsippene
+arbeidsprinsipper
+arbeidsprinsippet
+arbeidsprinsippets
+arbeidsproduktivitet
+arbeidsproduktiviteten
+arbeidsproduktivitetens
+arbeidsprogram
+arbeidsprogrammene
+arbeidsprogrammer
+arbeidsprogrammet
+arbeidsprogrammets
+arbeidsprosess
+arbeidsprosessen
+arbeidsprosessene
+arbeidsprosessens
+arbeidsprosesser
+arbeidsår
+arbeidsredskap
+arbeidsredskapa
+arbeidsredskapene
+arbeidsredskaper
+arbeidsredskapet
+arbeidsredskapets
+arbeidsreisa
+arbeidsreise
+arbeidsreisen
+arbeidsreisene
+arbeidsreisens
+arbeidsreiser
+arbeidsressurs
+arbeidsressursen
+arbeidsressursene
+arbeidsressursens
+arbeidsressurser
+arbeidsåret
+arbeidsårets
+arbeidsrett
+arbeidsretten
+arbeidsrettene
+arbeidsrettens
+arbeidsro
+arbeidsroen
+arbeidsroens
+arbeidsrom
+arbeidsrommene
+arbeidsrommet
+arbeidsrommets
+arbeidsrutine
+arbeidsrutinen
+arbeidsrutinene
+arbeidsrutinens
+arbeidsrutiner
+arbeidsrytme
+arbeidsrytmen
+arbeidsrytmens
+arbeidssituasjon
+arbeidssituasjonen
+arbeidssituasjonene
+arbeidssituasjonens
+arbeidssituasjoner
+arbeidssky
+arbeidsslag
+arbeidsslaga
+arbeidsslagene
+arbeidsslaget
+arbeidsslagets
+arbeidsstans
+arbeidsstansen
+arbeidsstansens
+arbeidsstasjon
+arbeidsstasjonen
+arbeidsstasjonene
+arbeidsstasjonens
+arbeidsstasjoner
+arbeidssted
+arbeidsstedene
+arbeidssteder
+arbeidsstedet
+arbeidsstedets
+arbeidsstilling
+arbeidsstillinga
+arbeidsstillingen
+arbeidsstillingene
+arbeidsstillingens
+arbeidsstillinger
+arbeidsstipend
+arbeidsstipendet
+arbeidsstipendets
+arbeidsstokk
+arbeidsstokken
+arbeidsstokkene
+arbeidsstokkens
+arbeidsstokker
+arbeidsstol
+arbeidsstolen
+arbeidsstolene
+arbeidsstolens
+arbeidsstoler
+arbeidsstua
+arbeidsstue
+arbeidsstuen
+arbeidsstuene
+arbeidsstuens
+arbeidsstuer
+arbeidsstyre
+arbeidsstyret
+arbeidsstyrke
+arbeidsstyrken
+arbeidsstyrkens
+arbeidstaker
+arbeidstakere
+arbeidstakeren
+arbeidstakerens
+arbeidstakeres
+arbeidstakerne
+arbeidstakernes
+arbeidstakerorganisasjon
+arbeidstakerorganisasjonen
+arbeidstakerorganisasjonene
+arbeidstakerorganisasjonens
+arbeidstakerorganisasjoner
+arbeidstakersida
+arbeidstakerside
+arbeidstakersiden
+arbeidstakersidens
+arbeidsteam
+arbeidsteamet
+arbeidsteamets
+arbeidstemperatur
+arbeidstemperaturen
+arbeidstemperaturens
+arbeidsterapi
+arbeidsterapien
+arbeidsterapiene
+arbeidsterapiens
+arbeidsterapier
+arbeidstid
+arbeidstida
+arbeidstiden
+arbeidstidens
+arbeidstids
+arbeidstidsavtale
+arbeidstidsavtalen
+arbeidstidsavtalens
+arbeidstidsforkortelse
+arbeidstidsforkortelsen
+arbeidstidsforkortelsene
+arbeidstidsforkortelsens
+arbeidstidsforkortelser
+arbeidstidsnedsettelse
+arbeidstidsnedsettelsen
+arbeidstidsnedsettelsene
+arbeidstidsnedsettelsens
+arbeidstidsnedsettelser
+arbeidstilbud
+arbeidstilbuda
+arbeidstilbudene
+arbeidstilbudet
+arbeidstilbudets
+arbeidstilsyn
+arbeidstilsynet
+arbeidstilsynets
+arbeidstime
+arbeidstimen
+arbeidstimene
+arbeidstimens
+arbeidstimer
+arbeidstitlene
+arbeidstitler
+arbeidstittel
+arbeidstittelen
+arbeidstittelens
+arbeidstrykk
+arbeidstrykket
+arbeidstrykkets
+arbeidstvist
+arbeidstvisten
+arbeidstvistene
+arbeidstvistens
+arbeidstvister
+arbeidsuka
+arbeidsuke
+arbeidsuken
+arbeidsukene
+arbeidsukens
+arbeidsuker
+arbeidsulykka
+arbeidsulykke
+arbeidsulykken
+arbeidsulykkene
+arbeidsulykkens
+arbeidsulykker
+arbeidsutvalg
+arbeidsutvalga
+arbeidsutvalgene
+arbeidsutvalget
+arbeidsutvalgets
+arbeidsutøver
+arbeidsutøvere
+arbeidsutøveren
+arbeidsutøverens
+arbeidsutøveres
+arbeidsutøverne
+arbeidsutøvernes
+arbeidsvant
+arbeidsvante
+arbeidsvanter
+arbeidsveg
+arbeidsvegen
+arbeidsvegene
+arbeidsvegens
+arbeidsveger
+arbeidsvei
+arbeidsveien
+arbeidsveiene
+arbeidsveiens
+arbeidsveier
+arbeidsvilkår
+arbeidsvilkåra
+arbeidsvilkårene
+arbeidsvilkåret
+arbeidsvilkårets
+arbeidsvillig
+arbeidsvillige
+arbeidsvogn
+arbeidsvogna
+arbeidsvognen
+arbeidsvognene
+arbeidsvognens
+arbeidsvogner
+arbeidsværelsa
+arbeidsværelse
+arbeidsværelsene
+arbeidsværelser
+arbeidsværelset
+arbitrær
+arboret
+arboreta
+arboretene
+arboreter
+arboretet
+arboretets
+arboretum
+arboretuma
+arboretumene
+arboretumer
+arboretumet
+arboretumets
+ard
+arde
+arden
+ardens
+are
+areal
+areala
+arealbegrensning
+arealbegrensningen
+arealbegrensningene
+arealbegrensningens
+arealbegrensninger
+arealbehov
+arealbehova
+arealbehovene
+arealbehovet
+arealbehovets
+arealdisponering
+arealdisponeringa
+arealdisponeringen
+arealdisponeringene
+arealdisponeringens
+arealdisponeringer
+arealene
+arealer
+arealet
+arealets
+arealgrense
+arealgrensen
+arealgrensene
+arealgrensens
+arealgrenser
+arealinngrep
+arealinngrepet
+arealinngrepets
+arealplanlegging
+arealplanlegginga
+arealplanleggingen
+arealplanleggingens
+arealutnyttelse
+arealutnyttelsen
+arealutnyttelsens
+arena
+arenaen
+arenaene
+arenaens
+arenaer
+arendalitt
+arendalitten
+arendalittene
+arendalittens
+arendalitter
+aret
+arg
+arge
+argentiner
+argentinere
+argentineren
+argentinerens
+argentineres
+argentinerne
+argentinernes
+argentinsk
+argentinske
+arget
+argon
+argonet
+argonets
+argot
+argoten
+argotens
+argskap
+argt
+argument
+argumenta
+argumentasjon
+argumentasjonen
+argumentasjonene
+argumentasjonens
+argumentasjoner
+argumentene
+argumenter
+argumentere
+argumenterer
+argumenteres
+argumentering
+argumenteringa
+argumenteringen
+argumenteringens
+argumentert
+argumenterte
+argumentet
+argumentets
+argumentlista
+argumentliste
+argumentlisten
+argumentlistene
+argumentlistens
+argumentlister
+argusblikk
+argusblikket
+argusblikkets
+arie
+arien
+ariene
+arienes
+ariens
+arier
+arisk
+ariske
+aristokrat
+aristokraten
+aristokratenes
+aristokratens
+aristokrater
+aristokrati
+aristokratia
+aristokratiene
+aristokratier
+aristokratiet
+aristokratiets
+aristokratisk
+aristokratiske
+aritmetikk
+aritmetikken
+aritmetikkens
+aritmetisk
+ark
+arka
+arkade
+arkaden
+arkadene
+arkadens
+arkader
+arkaisere
+arkaiserer
+arkaisert
+arkaiserte
+arkaisk
+arkaisme
+arkaismen
+arkaismens
+arken
+arkene
+arkens
+arkeolog
+arkeologen
+arkeologene
+arkeologens
+arkeologer
+arkeologi
+arkeologien
+arkeologiens
+arkeologisk
+arkeologiske
+arket
+arkets
+arketyp
+arketypen
+arketypene
+arketypens
+arketyper
+arketypisk
+arkimedisk
+arkimediske
+arkipel
+arkipelet
+arkipelets
+arkitekt
+arkitekten
+arkitektene
+arkitektens
+arkitekter
+arkitektkontor
+arkitektkontorene
+arkitektkontorer
+arkitektkontoret
+arkitektkontorets
+arkitektonisk
+arkitektoniske
+arkitektskole
+arkitektskolen
+arkitektskolene
+arkitektskolens
+arkitektskoler
+arkitektstudiene
+arkitektstudier
+arkitektstudiet
+arkitektstudiets
+arkitektur
+arkitekturen
+arkitekturene
+arkitekturens
+arkitekturer
+arkiv
+arkiva
+arkivalia
+arkivalie
+arkivaliene
+arkivalier
+arkivar
+arkivaren
+arkivarens
+arkivene
+arkiver
+arkivere
+arkiverer
+arkivert
+arkivet
+arkivets
+arkivopptak
+arkivopptaka
+arkivopptakene
+arkivopptaket
+arkivopptakets
+arkivsjef
+arkivsjefen
+arkivsjefene
+arkivsjefens
+arkivsjefer
+arktisk
+arktiske
+arm
+armagnac
+armatur
+armaturen
+armaturene
+armaturens
+armaturer
+armband
+armbandsur
+armbandsura
+armbandsurene
+armbandsuret
+armbandsurets
+armbånd
+armbånda
+armbåndene
+armbåndet
+armbåndets
+armbåndsur
+armbåndsura
+armbåndsurene
+armbåndsuret
+armbåndsurets
+armbrøst
+armbrøsten
+armbrøstene
+armbrøstens
+armbrøster
+armbruk
+armbruken
+armbrukens
+arme
+armen
+armene
+armenier
+armeniere
+armenieren
+armenierens
+armenieres
+armenierne
+armeniernes
+armens
+armer
+armere
+armert
+armerte
+armhola
+armhole
+armholene
+armholer
+armhula
+armhule
+armhulen
+armhulene
+armhulens
+armhuler
+arming
+armingen
+armingene
+armingens
+arminger
+armlengda
+armlengde
+armlengden
+armlengdene
+armlengdens
+armlengder
+armlenka
+armlenke
+armlenken
+armlenkene
+armlenkens
+armlenker
+armod
+armoda
+armoden
+armodens
+armodsdom
+armodsdommen
+armodsdommens
+armodslig
+armslag
+armslaget
+armslagets
+armstøtta
+armstøtte
+armstøtten
+armstøttene
+armstøttens
+armstøtter
+arne
+aroma
+aromaen
+aromaens
+aromatisk
+arr
+arra
+arrangement
+arrangementa
+arrangementene
+arrangementer
+arrangementet
+arrangementets
+arrangementskomité
+arrangementskomiteen
+arrangementskomiteene
+arrangementskomiteens
+arrangementskomiteer
+arranger
+arrangere
+arrangerende
+arrangerer
+arrangeres
+arrangert
+arrangerte
+arrangør
+arrangøren
+arrangørene
+arrangørenes
+arrangørens
+arrangører
+arrangørklubb
+arrangørklubben
+arrangørklubbene
+arrangørklubbens
+arrangørklubber
+arrene
+arrest
+arrestant
+arrestanten
+arrestantene
+arrestantens
+arrestanter
+arrestasjon
+arrestasjonen
+arrestasjonene
+arrestasjonens
+arrestasjoner
+arreste
+arresten
+arrestens
+arrester
+arrestere
+arresterer
+arresteres
+arrestert
+arresterte
+arrestlokala
+arrestlokale
+arrestlokalene
+arrestlokaler
+arrestlokalet
+arrestlokalets
+arrestordre
+arrestordren
+arrestordrene
+arrestordrens
+arrestordrer
+arret
+arrete
+arrets
+arrig
+arrighet
+arrigheten
+arrighetens
+arrivere
+arrivert
+arriverte
+arroganse
+arrogansen
+arrogansens
+arrogant
+arrondering
+arronderinga
+arronderingen
+arronderingens
+ars
+arsen
+arsenal
+arsenala
+arsenalene
+arsenaler
+arsenalet
+arsenalets
+arsenet
+arsenets
+arsenikk
+arsenikken
+arsenikkens
+art
+arta
+arte
+arten
+artene
+artens
+arter
+arterie
+arterien
+arteriens
+arteriosklerose
+arteriosklerosen
+arteriosklerosens
+artesisk
+artet
+artianer
+artianere
+artianeren
+artianerens
+artianeres
+artianerne
+artianernes
+artifisiell
+artig
+artige
+artighet
+artigheten
+artighetene
+artighetens
+artigheter
+artikkel
+artikkelen
+artikkelens
+artikkelforfatter
+artikkelforfattere
+artikkelforfatteren
+artikkelforfatterens
+artikkelforfatteres
+artikkelforfatterne
+artikkelforfatternes
+artikkelform
+artikkelforma
+artikkelformen
+artikkelformene
+artikkelformens
+artikkelformer
+artikkelkonkurranse
+artikkelkonkurransen
+artikkelkonkurransene
+artikkelkonkurransens
+artikkelkonkurranser
+artikkelsamling
+artikkelsamlinga
+artikkelsamlingen
+artikkelsamlingene
+artikkelsamlingens
+artikkelsamlinger
+artikkelskribent
+artikkelskribenten
+artikkelskribentene
+artikkelskribentens
+artikkelskribenter
+artikkelskriving
+artikkelskrivinga
+artikkelskrivingen
+artikkelskrivingens
+artiklene
+artikler
+artikulasjon
+artikulasjonen
+artikulasjonene
+artikulasjonens
+artikulasjoner
+artikuler
+artikulere
+artikulerer
+artikulering
+artikuleringa
+artikuleringen
+artikuleringens
+artikulert
+artikulerte
+artilleri
+artilleria
+artilleriduell
+artilleriduellen
+artilleriduellene
+artilleriduellens
+artilleridueller
+artilleriene
+artillerier
+artilleriet
+artilleriets
+artillerist
+artilleristen
+artilleristene
+artilleristens
+artillerister
+artilleristilling
+artilleristillinga
+artilleristillingen
+artilleristillingens
+artisjokk
+artisjokken
+artisjokkene
+artisjokkens
+artisjokker
+artisjokkhjerte
+artisjokkhjerter
+artisjokkhjertet
+artiskokk
+artiskokken
+artiskokkene
+artiskokkens
+artiskokker
+artiskokkhjerte
+artiskokkhjerter
+artiskokkhjertet
+artist
+artisten
+artistene
+artistens
+artister
+artisteri
+artisteria
+artisteriene
+artisterier
+artisteriet
+artisteriets
+artistisk
+artistiske
+artistnavn
+artistnavna
+artistnavnene
+artistnavnet
+artistnavnets
+artium
+artiumen
+artiumens
+artiumskarakter
+artiumskarakteren
+artiumskarakterene
+artiumskarakterenes
+artiumskarakterens
+artiumskarakterer
+artiumskarakterers
+artiumskull
+artiumskulla
+artiumskullene
+artiumskullet
+artiumskullets
+artiumsoppgava
+artiumsoppgave
+artiumsoppgaven
+artiumsoppgavene
+artiumsoppgavens
+artiumsoppgaver
+artiumspoeng
+artiumspoenga
+artiumspoengene
+artiumspoenget
+artiumspoengets
+artiumssensur
+artiumssensuren
+artiumssensurens
+artsbetegnelse
+artsbetegnelsen
+artsbetegnelsene
+artsbetegnelsens
+artsbetegnelser
+artsfelle
+artsfellen
+artsfellene
+artsfellens
+artsfeller
+arv
+arve
+arveegenskap
+arveegenskapen
+arveegenskapene
+arveegenskapens
+arveegenskaper
+arvefiende
+arvefienden
+arvefiendene
+arvefiendens
+arvefiender
+arvefølge
+arvefølgen
+arvefølgens
+arvelater
+arvelatere
+arvelateren
+arvelaterens
+arvelateres
+arvelaterne
+arvelaternes
+arvelaus
+arvelige
+arvelighet
+arveligheten
+arvelighetens
+arvelighetsforskere
+arvelighetsforskeren
+arvelighetsforskerens
+arvemønster
+arvemønsteret
+arvemønsterets
+arvemønstra
+arvemønstre
+arvemønstrene
+arvemønstret
+arvemønstrets
+arven
+arvens
+arveprins
+arveprinsen
+arveprinsene
+arveprinsens
+arveprinser
+arvesak
+arvesaken
+arvesakene
+arvesakens
+arvesaker
+arvet
+arving
+arvingen
+arvingene
+arvingens
+arvinger
+arvtaker
+arvtakere
+arvtakeren
+arvtakerens
+arvtakeres
+arvtakerne
+arvtakernes
+asal
+asalea
+asaleaen
+asaleaene
+asaleaens
+asaleaer
+asalen
+asalene
+asalens
+asaler
+asbest
+asbestduk
+asbestduken
+asbestdukene
+asbestdukens
+asbestduker
+asbesten
+asbestens
+asbester
+asbestose
+asbestosen
+asbestosens
+ascii
+asdic
+asdicen
+asdicens
+ase
+asen
+asenet
+asenets
+aseptisk
+aser
+aset
+asete
+asfalt
+asfaltbane
+asfaltbanen
+asfaltbanene
+asfaltbanens
+asfaltbaner
+asfalten
+asfaltens
+asfalter
+asfaltere
+asfaltering
+asfalteringa
+asfalteringen
+asfalteringens
+asfalteringsarbeid
+asfalteringsarbeider
+asfalteringsarbeidet
+asfalteringsarbeidets
+asfalteringsmaskin
+asfalteringsmaskina
+asfalteringsmaskinen
+asfalteringsmaskinene
+asfalteringsmaskinens
+asfalteringsmaskiner
+asfaltert
+asfaltveg
+asfaltvegen
+asfaltvegene
+asfaltvegens
+asfaltveger
+asfaltvei
+asfaltveien
+asfaltveiene
+asfaltveiens
+asfaltveier
+asfaltverk
+asfaltverka
+asfaltverkene
+asfaltverket
+asfaltverkets
+asiat
+asiaten
+asiatene
+asiatens
+asiater
+asiatisk
+asiatiske
+asimut
+asimutal
+asimuten
+asimutene
+asimutens
+asimuter
+asjett
+asjetten
+asjettene
+asjettens
+asjetter
+ask
+aska
+aske
+askebeger
+askebegeret
+askebegerets
+askebegra
+askebegre
+askebegrene
+askeladd
+askeladden
+askeladdene
+askeladdens
+askeladder
+asken
+askens
+asker
+askese
+askesen
+askesens
+askeskuff
+askeskuffen
+askeskuffene
+askeskuffens
+askeskuffer
+asket
+asketen
+asketene
+asketens
+asketer
+asketisk
+asketiske
+askorbinsyra
+askorbinsyre
+askorbinsyren
+askorbinsyrens
+asosial
+asosiale
+asp
+aspa
+asparges
+aspargesen
+aspargesene
+aspargesens
+aspargeser
+aspargessuppa
+aspargessuppe
+aspargessuppen
+aspargessuppene
+aspargessuppens
+aspargessupper
+aspekt
+aspekta
+aspekten
+aspektene
+aspektens
+aspekter
+aspektet
+aspektets
+aspen
+aspene
+aspens
+asper
+asperere
+aspererer
+asperert
+aspererte
+aspik
+aspiken
+aspikens
+aspirant
+aspiranten
+aspirantene
+aspirantens
+aspiranter
+aspirantlønn
+aspirantlønna
+aspirantlønnen
+aspirantlønnene
+aspirantlønnens
+aspiranttjeneste
+aspiranttjenesten
+aspiranttjenestens
+aspirasjon
+aspirasjonen
+aspirasjonene
+aspirasjonens
+aspirasjoner
+aspirer
+aspirere
+aspirerer
+aspirert
+aspirerte
+assemblée
+assembléet
+assement
+assessor
+assessoren
+assessorene
+assessorens
+assessorer
+assimilasjon
+assimilasjonen
+assimilasjonene
+assimilasjonens
+assimilasjoner
+assimiler
+assimilere
+assimilerer
+assimilert
+assistanse
+assistansen
+assistansene
+assistansens
+assistanser
+assistent
+assistenten
+assistentene
+assistentens
+assistenter
+assistentlege
+assistentlegen
+assistentlegene
+assistentlegens
+assistentleger
+assistere
+assisterende
+assistert
+assisterte
+assonans
+assonansen
+assonansene
+assonansens
+assonanser
+assortere
+assortert
+assorterte
+assortiment
+assortimenta
+assortimentene
+assortimenter
+assortimentet
+assortimentets
+assosiasjon
+assosiasjonen
+assosiasjonene
+assosiasjonens
+assosiasjoner
+assosiasjonsrikdom
+assosiativ
+assosiere
+assosiering
+assosieringa
+assosieringen
+assosieringens
+assosieringer
+assosiert
+assosierte
+assosiertes
+assumpsjon
+assumpsjonen
+assumpsjonene
+assumpsjonens
+assumpsjoner
+assurandør
+assurandøren
+assurandørene
+assurandørens
+assurandører
+assuranse
+assuransen
+assuransens
+assuransesvik
+assuransesvindel
+assuransesvindelen
+assuransesvindelens
+assurere
+assurerer
+assurert
+assurerte
+assyrer
+assyrere
+assyreren
+assyrerens
+assyreres
+assyrerne
+assyrernes
+astat
+astatet
+astatets
+asterisk
+asterisken
+asteriskene
+asteriskens
+asterisker
+asters
+astersen
+astersene
+astersens
+asterser
+astigmatiker
+astigmatikere
+astigmatikeren
+astigmatikerens
+astigmatikeres
+astigmatikerne
+astigmatikernes
+astigmatisk
+astma
+astmaen
+astmaens
+astmatisk
+astmatiske
+astral
+astrofysikk
+astrofysikken
+astrofysikkens
+astrofysisk
+astrolog
+astrologen
+astrologene
+astrologens
+astrologer
+astrologi
+astrologien
+astrologiens
+astrologisk
+astronaut
+astronauten
+astronautene
+astronautens
+astronauter
+astronom
+astronomen
+astronomene
+astronomens
+astronomer
+astronomi
+astronomien
+astronomiens
+astronomisk
+astronomiske
+asur
+asurblå
+asurblått
+asyl
+asyla
+asylene
+asyler
+asylet
+asylets
+asylrett
+asylretten
+asylrettens
+asymmetri
+asymmetrien
+asymmetriens
+asymmetrisk
+asymptote
+asymptoten
+asymptotene
+asymptotens
+asymptoter
+asyndese
+asyndesen
+asyndesens
+asynkron
+asynkrone
+asynkronmotor
+asynkronmotoren
+asynkronmotorens
+asynkront
+at
+atal
+atale
+atalt
+atavisme
+atavismen
+atavismens
+atavistisk
+ateisme
+ateismen
+ateismens
+ateist
+ateisten
+ateistene
+ateistens
+ateister
+ateistisk
+atelier
+atelieret
+atelierets
+atener
+atenere
+ateneren
+atenerens
+ateneres
+atenerne
+atenernes
+atensk
+atferd
+atferda
+atferden
+atferdens
+atferdsmønster
+atferdsmønsteret
+atferdsmønsterets
+atferdsmønstra
+atferdsmønstre
+atferdsmønstrene
+atferdsmønstret
+atferdsmønstrets
+athenske
+atkomst
+atkomsten
+atkomstene
+atkomstens
+atkomster
+atkomstforhold
+atkomstforholdene
+atkomstmulighet
+atkomstmuligheten
+atkomstmulighetene
+atkomstmulighetens
+atkomstmuligheter
+atkomstproblem
+atkomstproblema
+atkomstproblemene
+atkomstproblemer
+atkomstproblemet
+atkomstproblemets
+atkomstvei
+atkomstveien
+atkomstveiene
+atkomstveiens
+atkomstveier
+atlantisk
+atlantiske
+atlas
+atlasa
+atlasene
+atlaser
+atlaset
+atlasets
+atlask
+atlasken
+atlaskens
+atlet
+atleten
+atletene
+atletens
+atleter
+atletisk
+atm
+atma
+atmosfære
+atmosfæren
+atmosfærens
+atmosfærisk
+atmosfæriske
+atoll
+atollen
+atollene
+atollens
+atoller
+atom
+atoma
+atomalder
+atomalderen
+atomalderens
+atombomba
+atombombe
+atombomben
+atombombene
+atombombens
+atombomber
+atomdød
+atomdøden
+atomdødens
+atomdrevne
+atomdrift
+atomdrifta
+atomdriften
+atomdriftene
+atomdriftens
+atomdrifter
+atomene
+atomenergi
+atomenergien
+atomenergiens
+atomer
+atomet
+atomets
+atomfellesskap
+atomforskning
+atomforskningen
+atomforskningens
+atomisere
+atomiserende
+atomisert
+atomistiske
+atomkraft
+atomkraften
+atomkraftens
+atomkraftverk
+atomkraftverka
+atomkraftverkene
+atomkraftverket
+atomkraftverkets
+atomkraftverkstasjon
+atomkraftverkstasjonen
+atomkraftverkstasjonene
+atomkraftverkstasjonens
+atomkraftverkstasjoner
+atomkrig
+atomkrigen
+atomkrigene
+atomkrigens
+atomkriger
+atomreaktor
+atomreaktoren
+atomreaktorene
+atomreaktorens
+atomreaktorer
+atomvekt
+atomvekta
+atomvekten
+atomvektens
+atomvekter
+atomvåpen
+atomvåpenet
+atomvåpenets
+atomvåpnene
+atomvåpnenes
+atonal
+atonalt
+atriehus
+atriene
+atrier
+atriet
+atriets
+atrium
+atriumhus
+atriumhusa
+atriumhusene
+atriumhuset
+atriumhusets
+atrofi
+atrofien
+atrofiens
+atrofier
+atskille
+atskillelse
+atskillelsen
+atskillelsens
+atskiller
+atskillig
+atskillige
+atskilt
+atskilte
+atspre
+atspredd
+atspredde
+atsprede
+atspredelse
+atspredelsen
+atspredelsens
+atspredt
+atspredte
+atstadige
+att
+attaché
+attacheen
+attacheene
+attacheens
+attacheer
+attakk
+attakka
+attakkene
+attakker
+attakkere
+attakkerer
+attakkert
+attakkerte
+attakket
+attakkets
+atten
+attende
+attendel
+attendelen
+attendelene
+attendelens
+attendeler
+attenåring
+attenåringen
+attenåringene
+attenåringens
+attenåringer
+attentat
+attentata
+attentatene
+attentater
+attentatet
+attentatets
+attentatmann
+attentatmannen
+attentatmannens
+attentatmenn
+attentatmennene
+attentatmennenes
+attentatmenns
+attentattrusler
+atter
+attergløyma
+attergløyme
+atterhald
+atterhaldet
+atterhaldets
+attersyn
+attest
+attestasjon
+attestasjonen
+attestasjonene
+attestasjonens
+attestasjoner
+attestavskrift
+attestavskrifta
+attestavskriften
+attestavskriftene
+attestavskriftens
+attestavskrifter
+attesten
+attestene
+attestens
+attester
+attestere
+attesterer
+attestert
+attesterte
+attføre
+attføring
+attføringa
+attføringen
+attføringens
+attføringsapparat
+attføringsapparatet
+attføringsapparatets
+attføringsinstitusjon
+attføringsinstitusjonen
+attføringsinstitusjonene
+attføringsinstitusjonens
+attføringsinstitusjoner
+attføringskonsulent
+attføringskonsulenten
+attføringskonsulentene
+attføringskonsulentens
+attføringskonsulenter
+attføringssektor
+attføringssektoren
+attføringssektorens
+attføringstjeneste
+attføringstjenesten
+attføringstjenestens
+attføringsutvalg
+attføringsutvalget
+attføringsutvalgets
+attført
+attityde
+attityden
+attitydens
+attlege
+attmed
+attom
+attover
+attpå
+attpåtil
+attrå
+attrahere
+attraherer
+attrahert
+attraherte
+attraksjon
+attraksjonen
+attraksjonene
+attraksjonens
+attraksjoner
+attraktiv
+attraktive
+attraktivt
+attrapp
+attrappen
+attrappene
+attrappens
+attrapper
+attrappere
+attrapperer
+attrappert
+attrapperte
+attre
+attråen
+attråens
+attribusjon
+attribusjonen
+attribusjonene
+attribusjonens
+attribusjoner
+attributiv
+attributivt
+attributt
+attributta
+attributtene
+attributter
+attributtet
+attributtets
+attråverdig
+attåt
+attåtnæring
+attåtnæringa
+attåtnæringen
+attåtnæringene
+attåtnæringens
+attved
+atypisk
+au
+aubergine
+auberginen
+auberginene
+auberginens
+auberginer
+audi
+audiens
+audiensen
+audiensene
+audiensens
+audienser
+audio
+audiogram
+audiogrammet
+audiogrammets
+audiolog
+audiologen
+audiologene
+audiologens
+audiologer
+audiologisk
+audiometer
+audiometeret
+audiometerets
+audiometra
+audiometre
+audiometrene
+audiometret
+audiometrets
+audiovisuell
+audiovisuelle
+auditiv
+auditive
+auditivt
+auditoria
+auditoriene
+auditorier
+auditoriet
+auditoriets
+auditorium
+audsynlig
+aue
+aug
+augiasstall
+augiasstallen
+augiasstallens
+august
+auk
+auke
+auken
+aukens
+auker
+auksjon
+auksjonarius
+auksjonariusen
+auksjonariusens
+auksjonen
+auksjonene
+auksjonens
+auksjoner
+auksjonere
+auksjonert
+aukt
+aukte
+aul
+aula
+aulaen
+aulaene
+aulaens
+aulaer
+aulasal
+aulasalen
+aulasalens
+aule
+auler
+aur
+aura
+auraen
+auraens
+aure
+auregarn
+auren
+aurens
+aureomycin
+aureomycinet
+aureomycinets
+aureoppdrett
+aurer
+aurestang
+aurestanga
+auret
+aurevatn
+aurevatnet
+aurevatnets
+aurikkel
+aurikkelen
+aurikkelens
+auriklene
+aurikler
+aurlendt
+aurora
+ause
+auser
+auspisie
+auspisier
+auspisiet
+aust
+austafjells
+austafjelsk
+austafor
+austavind
+austavinden
+austavindens
+auste
+austerveg
+austlandsk
+austlending
+austlendingen
+austlendingene
+austlendingens
+austlendinger
+austlig
+australier
+australiere
+australieren
+australierens
+australieres
+australierne
+australiernes
+australsk
+austre
+autentisk
+autentiske
+autisme
+autismen
+autismens
+autistisk
+auto
+autodafeen
+autodafeens
+autodidakt
+autodidakten
+autodidaktene
+autodidaktens
+autodidakter
+autodiesel
+autodieselen
+autodieselens
+autogen
+autogengass
+autogensveising
+autogensveisinga
+autogensveisingen
+autogensveisingens
+autogent
+autogne
+autograf
+autografen
+autografene
+autografens
+autografer
+autokrat
+autokraten
+autokratene
+autokratens
+autokrater
+autokratisk
+autokratiske
+automasjon
+automasjonen
+automasjonene
+automasjonens
+automasjoner
+automat
+automaten
+automatene
+automatens
+automater
+automatgear
+automatikk
+automatikken
+automatikkens
+automatisere
+automatisering
+automatiseringa
+automatiseringen
+automatiseringens
+automatisert
+automatisk
+automatiske
+automobil
+automobilen
+automobilene
+automobilens
+automobiler
+automobilforbund
+automobilforbundet
+automobilforbundets
+autonom
+autonomi
+autonomien
+autonomiens
+autonomt
+autopilot
+autopiloten
+autopilotene
+autopilotens
+autopiloter
+autopsi
+autopsien
+autopsiene
+autopsiens
+autopsier
+autorativt
+autorisasjon
+autorisasjonen
+autorisasjonene
+autorisasjonens
+autorisasjoner
+autorisere
+autorisert
+autoriserte
+autoritativ
+autoritative
+autoritativt
+autoritet
+autoriteten
+autoritetene
+autoritetens
+autoriteter
+autoritær
+autoritære
+autoritært
+autostrada
+autostradaen
+autostradaene
+autostradaens
+autostradaer
+av
+aval
+avalen
+avalens
+avaler
+avanse
+avanseforhøyelse
+avanseforhøyelsen
+avanseforhøyelsene
+avanseforhøyelsens
+avanseforhøyelser
+avansement
+avansementa
+avansementene
+avansementer
+avansementet
+avansementets
+avansementsordning
+avansementsordninga
+avansementsordningen
+avansementsordningene
+avansementsordningens
+avansementsordninger
+avansementsstopp
+avansementsstoppen
+avansementsstoppens
+avansen
+avansene
+avansens
+avanser
+avansere
+avanserer
+avansert
+avanserte
+avantgarde
+avantgarden
+avantgardens
+avantgardistisk
+avart
+avarta
+avarten
+avartene
+avartens
+avarter
+avbaklig
+avbalanser
+avbalansere
+avbalanserer
+avbalanseres
+avbalansering
+avbalanseringa
+avbalanseringen
+avbalanseringens
+avbalansert
+avbalanserte
+avbenyttelse
+avbestille
+avbestiller
+avbestilling
+avbestillinga
+avbestillingen
+avbestillingene
+avbestillingens
+avbestillinger
+avbestilt
+avbestilte
+avbetale
+avbetaler
+avbetaling
+avbetalinga
+avbetalingen
+avbetalingene
+avbetalinger
+avbetalingskontrakt
+avbetalingskontrakten
+avbetalingskontraktene
+avbetalingskontraktens
+avbetalingskontrakter
+avbetalingsvilkår
+avbetalingsvilkåra
+avbetalingsvilkårene
+avbetalingsvilkårer
+avbetalingsvilkåret
+avbetalingsvilkårets
+avbetalt
+avbetalte
+avbikt
+avbikten
+avbiktens
+avbilda
+avbilde
+avbildene
+avbilder
+avbildet
+avbildning
+avbildningen
+avbildningene
+avbildningens
+avbildninger
+avblomstra
+avblomstre
+avblomstrede
+avblomstret
+avblomstring
+avblåse
+avblåses
+avblåsing
+avblåsinga
+avblåsingen
+avblåsingens
+avblåsning
+avblåsningen
+avblåsningens
+avblåst
+avbrekk
+avbrekka
+avbrekkene
+avbrekket
+avbrenning
+avbrenninga
+avbrott
+avbrottet
+avbrottets
+avbrøt
+avbrudd
+avbruddstid
+avbruddstiden
+avbruddstidens
+avbrukken
+avbrukket
+avbrutt
+avbrutte
+avbryt
+avbryte
+avbrytelse
+avbrytelsen
+avbrytelsene
+avbrytelsens
+avbrytelser
+avbryter
+avbrytes
+avbryting
+avbrytingen
+avbrytingens
+avbøte
+avbøtt
+avbud
+avbuda
+avbudene
+avbudet
+avbudets
+avbøyning
+avbøyningen
+avbøyningens
+avdal
+avdalen
+avdalens
+avdanka
+avdanke
+avdankede
+avdanket
+avdød
+avdøde
+avdødes
+avdødt
+avdekke
+avdekkende
+avdekker
+avdekkes
+avdekket
+avdekking
+avdekkinga
+avdekkingen
+avdekning
+avdeling
+avdelinga
+avdelingen
+avdelingene
+avdelingens
+avdelinger
+avdelingers
+avdelings
+avdelingsbestyrer
+avdelingsbestyrere
+avdelingsbestyreren
+avdelingsbestyrerens
+avdelingsbestyreres
+avdelingsbestyrerne
+avdelingsbestyrernes
+avdelingsdirektør
+avdelingsdirektøren
+avdelingsdirektørene
+avdelingsdirektørens
+avdelingsdirektører
+avdelingsingeniør
+avdelingsingeniøren
+avdelingsingeniørene
+avdelingsingeniørens
+avdelingsingeniører
+avdelingskontor
+avdelingskontorene
+avdelingskontorer
+avdelingskontoret
+avdelingskontorets
+avdelingsleder
+avdelingsledere
+avdelingslederen
+avdelingslederens
+avdelingslederes
+avdelingslederne
+avdelingsledernes
+avdelingsnavn
+avdelingsnavna
+avdelingsnavnene
+avdelingsnavnet
+avdelingsnavnets
+avdelingssjef
+avdelingssjefen
+avdelingssjefene
+avdelingssjefens
+avdelingssjefer
+avdempa
+avdempe
+avdemper
+avdempet
+avdra
+avdrag
+avdraga
+avdragene
+avdraget
+avdragets
+avdragsfri
+avdragsfrie
+avdragsfrihet
+avdragsfriheten
+avdragsfrihetens
+avdragsfritt
+avdras
+avdrift
+avdrifta
+avdriften
+avdriftens
+avdrog
+avdrått
+avduka
+avduke
+avduker
+avduket
+avduking
+avdukinga
+avdukingen
+avdukingens
+ave
+aveny
+avenyen
+avenyene
+avenyens
+avenyer
+averbobøying
+averbobøyinga
+averbobøyingen
+averbobøyingens
+aversjon
+aversjonen
+aversjonene
+aversjonens
+aversjoner
+avertere
+avertert
+averterte
+avertissement
+avertissementa
+avertissementene
+avertissementer
+avertissementet
+avertissementets
+avfall
+avfallet
+avfallets
+avfallsplass
+avfallsplassen
+avfallsplassene
+avfallsplassens
+avfallsplasser
+avfallsstoff
+avfallsstoffa
+avfallsstoffene
+avfallsstoffer
+avfallsstoffet
+avfallsstoffets
+avfant
+avfatta
+avfatte
+avfatter
+avfattet
+avfeie
+avfeier
+avfeiet
+avfeldig
+avferdige
+avferdiget
+avfinne
+avfinner
+avfjære
+avfjæret
+avfjæring
+avfjæringa
+avfjæringen
+avfjæringens
+avfolke
+avfolkes
+avfolket
+avfolking
+avfolkinga
+avfolkingen
+avfolkingens
+avfolkning
+avfolkningen
+avfolkningens
+avfotografert
+avfotograferte
+avføring
+avføringa
+avfyre
+avfyrt
+avfyrte
+avgå
+avga
+avgang
+avgangen
+avgangene
+avganger
+avgangs
+avgangseksamen
+avgangseksamens
+avgangsklasse
+avgangsklassen
+avgangsklassene
+avgangsklassens
+avgangsklasser
+avgass
+avgassen
+avgassene
+avgassens
+avgasser
+avgassing
+avgassingen
+avgassingens
+avgav
+avgi
+avgift
+avgifta
+avgiften
+avgiftene
+avgiftens
+avgifter
+avgiftsfond
+avgiftsforhøyelse
+avgiftsforhøyelsen
+avgiftsforhøyelsene
+avgiftsforhøyelsens
+avgiftsforhøyelser
+avgiftsfritt
+avgiftspliktige
+avgiftspolitikk
+avgiftspolitikken
+avgiftspolitikkens
+avgiftssystem
+avgiftssystema
+avgiftssystemene
+avgiftssystemer
+avgiftssystemet
+avgiftssystemets
+avgikk
+avgir
+avgis
+avgitt
+avgitte
+avgjerd
+avgjerda
+avgjerdene
+avgjerder
+avgjersla
+avgjersle
+avgjerslene
+avgjersler
+avgjorde
+avgjort
+avgjorte
+avgjør
+avgjøre
+avgjørelse
+avgjørelsen
+avgjørelsene
+avgjørelsens
+avgjørelser
+avgjørende
+avgjøres
+avglans
+avglansen
+avglansens
+avglemt
+avglømt
+avgnagd
+avgår
+avgrensa
+avgrense
+avgrensede
+avgrensende
+avgrenser
+avgrenset
+avgrensing
+avgrensinga
+avgrensingen
+avgrensingene
+avgrensingens
+avgrensinger
+avgrensning
+avgrensningen
+avgrensningene
+avgrensningens
+avgrensninger
+avgrunn
+avgrunnen
+avgrunnene
+avgrunnens
+avgrunner
+avgrunnsdype
+avgått
+avgud
+avguden
+avgudene
+avgudens
+avguder
+avguds
+avgudsbilda
+avgudsbilde
+avgudsbildene
+avgudsbilder
+avgudsbildet
+avhandling
+avhandlinga
+avhandlingen
+avhandlingene
+avhandlingens
+avhandlinger
+avhang
+avhenda
+avhende
+avhendelsen
+avhendelsens
+avhender
+avhendet
+avhending
+avhendinga
+avhendingen
+avhenge
+avhengende
+avhenger
+avhengig
+avhengige
+avhengighet
+avhengigheten
+avhengighetens
+avhengighetsforhold
+avhengighetsforholda
+avhengighetsforholdene
+avhengighetsforholdet
+avhengighetsforholdets
+avhengt
+avhente
+avhenter
+avhentes
+avhentet
+avhenting
+avhentinga
+avhentingen
+avhentingens
+avhjelp
+avhjelpa
+avhjelpe
+avhjelper
+avhjelpes
+avhold
+avholde
+avholdelse
+avholdelsen
+avholdelsens
+avholdenhet
+avholdenheten
+avholdenhetens
+avholder
+avholdes
+avholdet
+avholdsbevegelse
+avholdsbevegelsen
+avholdsbevegelsens
+avholdsfolk
+avholdsfolka
+avholdsfolkene
+avholdsfolket
+avholdsfolkets
+avholdsforbund
+avholdsforbundet
+avholdsforbundets
+avholdskafé
+avholdskafeen
+avholdskafeene
+avholdskafeens
+avholdskafeer
+avholdslag
+avholdslaget
+avholdslagets
+avholdsorganisasjon
+avholdsorganisasjonen
+avholdsorganisasjonene
+avholdsorganisasjonens
+avholdsorganisasjoner
+avholdssak
+avholdssaka
+avholdssaken
+avholdssakens
+avholdt
+avholdte
+avhopper
+avhoppere
+avhopperen
+avhopperens
+avhopperes
+avhopperne
+avhoppernes
+avhopping
+avhoppingen
+avhoppingens
+avhør
+avhøre
+avhørene
+avhøres
+avhøret
+avhøring
+avhøringa
+avhøringen
+avhøringene
+avhøringens
+avhøringer
+avhørt
+avhørte
+avhugget
+aviatiker
+aviatikere
+aviatikeren
+aviatikerens
+aviatikeres
+aviatikerne
+aviatikernes
+avind
+avinden
+avindens
+avindsjuk
+avindsyk
+avindsyke
+avindsykt
+avis
+avisa
+avisartikkel
+avisartikkelen
+avisartikkelens
+avisartiklene
+avisartikler
+aviseier
+aviseiere
+aviseieren
+aviseierens
+aviseieres
+aviseierne
+aviseiernes
+avisen
+avisene
+avisenes
+avisens
+aviser
+avisers
+avisinnlegg
+avisinnlegga
+avisinnleggene
+avisinnlegget
+avisinnleggets
+avismelding
+avismeldinga
+avismeldingen
+avismeldingene
+avismeldingens
+avismeldinger
+avispapir
+avispapiret
+avispapirets
+avisredaksjon
+avisredaksjonen
+avisredaksjonene
+avisredaksjonens
+avisredaksjoner
+avisreferat
+avisreferata
+avisreferatene
+avisreferater
+avisreferatet
+avisreferatets
+avisreportasje
+avisreportasjen
+avisreportasjene
+avisreportasjens
+avisreportasjer
+avissida
+avisside
+avissiden
+avissidene
+avissidens
+avissider
+avisspalta
+avisspalte
+avisspalten
+avisspaltene
+avisspaltens
+avisspalter
+avisutklipp
+avisutklippa
+avisutklippene
+avisutklippet
+avisutklippets
+avkall
+avkalla
+avkallene
+avkallet
+avkallets
+avkasting
+avkastinga
+avkastingen
+avkastingens
+avkastning
+avkastninga
+avkastningen
+avkastningene
+avkastningens
+avkastninger
+avkjøl
+avkjøle
+avkjøler
+avkjøles
+avkjølet
+avkjøling
+avkjølt
+avkjøring
+avkjøringa
+avkjøringen
+avkjøringene
+avkjøringens
+avkjøringer
+avkjørsel
+avkjørselen
+avkjørselens
+avkjørsla
+avkjørslene
+avkjørsler
+avklare
+avklarende
+avklarer
+avklarere
+avklarerer
+avklarering
+avklareringa
+avklarert
+avklares
+avklaret
+avklaring
+avklaringa
+avklart
+avklarte
+avkledd
+avkledde
+avkledning
+avkledningen
+avkledningens
+avkledningsrom
+avkledningsrommene
+avkledningsrommet
+avkledningsrommets
+avkles
+avklipt
+avklipte
+avkobling
+avkok
+avkoket
+avkokets
+avkokt
+avkom
+avkommet
+avkopling
+avkort
+avkorte
+avkortes
+avkortet
+avkorting
+avkortinga
+avkortingen
+avkortingens
+avkrefta
+avkrefte
+avkreftelse
+avkreftelsen
+avkreftelsene
+avkreftelsens
+avkreftelser
+avkreftet
+avkrevd
+avkrevde
+avkreve
+avkrever
+avkreves
+avkrok
+avkroken
+avkrokene
+avkrokens
+avkroker
+avkutte
+avkuttede
+avkuttet
+avl
+avla
+avlagt
+avlagte
+avlangt
+avlasta
+avlaste
+avlaster
+avlastes
+avlastet
+avlasting
+avlastingen
+avlastingens
+avlastning
+avlastningen
+avlastningens
+avlat
+avlaten
+avlatens
+avlatt
+avle
+avlede
+avledede
+avledende
+avleder
+avledes
+avledet
+avledning
+avledningen
+avledningens
+avlegge
+avlegger
+avleggerne
+avlegges
+avleggs
+avleide
+avleie
+avleiing
+avleiinga
+avleiingen
+avleira
+avleire
+avleiret
+avleiring
+avleiringa
+avleiringen
+avleiringene
+avleiringens
+avleiringer
+avlen
+avlens
+avler
+avles
+avlese
+avleser
+avleses
+avlesing
+avlesinga
+avlesingen
+avlesning
+avlesningen
+avlesningene
+avlesningens
+avlesninger
+avlest
+avleste
+avlet
+avlevere
+avleverer
+avlevering
+avleveringa
+avleveringen
+avleveringene
+avleveringens
+avleveringer
+avlevert
+avleverte
+avling
+avlinga
+avlingen
+avlingene
+avlingens
+avlinger
+avlira
+avlire
+avliret
+avliva
+avlive
+avlivelse
+avlivelsen
+avlivelsens
+avlives
+avlivet
+avliving
+avlivinga
+avlivingen
+avlivingens
+avlønne
+avlønnes
+avlønnet
+avlønning
+avlønninga
+avlønningen
+avlønningens
+avlokke
+avlokker
+avlokket
+avløp
+avløpa
+avløpene
+avløpet
+avløpets
+avløpstunnel
+avløpstunnelen
+avløpstunnelene
+avløpstunnelens
+avløpstunneler
+avløpsvann
+avløpsvannet
+avløpsvannets
+avløpsvatn
+avløpsvatnet
+avløpsvatnets
+avlsdyr
+avlsdyra
+avlsdyrene
+avlsdyret
+avlsdyrets
+avlåse
+avløse
+avlåser
+avløser
+avløsere
+avløseren
+avløserens
+avløseres
+avløserne
+avløsernes
+avløses
+avlshingst
+avlshingsten
+avlshingstene
+avlshingstens
+avlshingster
+avlåsing
+avløsing
+avlåsinga
+avløsinga
+avlåsingen
+avløsingen
+avlåsingens
+avløsingens
+avløsning
+avløsningen
+avløsningens
+avlsokse
+avlsoksen
+avlsoksene
+avlsoksens
+avlsokser
+avlspurka
+avlspurke
+avlspurkene
+avlspurker
+avlåst
+avløst
+avlåste
+avløste
+avlukka
+avlukke
+avlukkede
+avlukkene
+avlukker
+avlukket
+avlure
+avlurer
+avlurt
+avlurte
+avlusa
+avluse
+avlusning
+avlusningen
+avlusningens
+avlut
+avluta
+avlute
+avlyd
+avlyden
+avlydens
+avlyse
+avløyse
+avlyser
+avløyser
+avløysere
+avløyseren
+avløyserens
+avløyseres
+avløyserne
+avløysernes
+avlyses
+avlysing
+avløysing
+avlysinga
+avløysinga
+avløysingen
+avløysingens
+avlysning
+avlysninga
+avlysningen
+avlysningene
+avlysningens
+avlysninger
+avlyst
+avløyst
+avlyste
+avlyttes
+avlytting
+avlyttinga
+avlyttingen
+avlyttingens
+avlyttinger
+avmagnetisere
+avmagnetiserer
+avmagnetisert
+avmagring
+avmagringa
+avmagringen
+avmagringens
+avmakt
+avmakta
+avmakten
+avmaktens
+avmarsj
+avmarsjer
+avmarsjere
+avmarsjerer
+avmarsjert
+avmarsjerte
+avmektig
+avmektige
+avmektiges
+avmerke
+avmerket
+avmålt
+avmønstra
+avmønstre
+avmønstret
+avmønstring
+avmønstringa
+avmønstringen
+avmønstringens
+avmytologisere
+avmytologiserer
+avmytologisert
+avmytologiserte
+avnorske
+avpanele
+avpaneler
+avpanelt
+avpanelte
+avparere
+avparert
+avpassa
+avpasse
+avpasser
+avpasset
+avpatruljer
+avpatruljere
+avpatruljert
+avpelsing
+avpelsinga
+avpelsingen
+avpelsingens
+avpolitisert
+avreagere
+avreagerer
+avreageres
+avreagering
+avreageringa
+avreageringen
+avreageringens
+avreagert
+avreagerte
+avregistrert
+avregistrerte
+avregne
+avregner
+avregnes
+avregnet
+avregning
+avregninga
+avregningen
+avregningene
+avreis
+avreisa
+avreise
+avreisen
+avreisende
+avreisens
+avreiser
+avreises
+avreising
+avreisinga
+avreisingen
+avreist
+avreiste
+avrekning
+avrekninga
+avrekningen
+avrette
+avretter
+avrettere
+avretteren
+avretterens
+avretteres
+avretterne
+avretternes
+avrettes
+avrettet
+avretting
+avrettinga
+avrettingen
+avrettingens
+avrigging
+avrigginga
+avriggingen
+avriggingens
+avrime
+avrimet
+avriming
+avriminga
+avrimingen
+avrimingens
+avringing
+avringinga
+avringingen
+avringning
+avringningen
+avringningene
+avringningens
+avringninger
+avriss
+avrissa
+avrissene
+avrisset
+avrive
+avriving
+avrivinga
+avrivingen
+avrivingens
+avrivning
+avrivningen
+avrivningens
+avrunda
+avrunde
+avrunder
+avrundes
+avrundet
+avrundete
+avrunding
+avrundinga
+avrundingen
+avrundingens
+avrundinger
+avrusting
+avrustinga
+avrustingen
+avrustingens
+avrustning
+avrustningen
+avrustningens
+avrustninger
+avrøysting
+avrøystinga
+avrøystingen
+avrøystingene
+avrøystingens
+avrøystinger
+avs
+avså
+avsa
+avsaga
+avsagd
+avsagde
+avsaget
+avsagt
+avsanne
+avsannet
+avsats
+avsatsen
+avsatsene
+avsatsens
+avsatser
+avsatt
+avsatte
+avsavn
+avsavnet
+avsavnets
+avse
+avsende
+avsender
+avsendere
+avsenderen
+avsenderens
+avsenderes
+avsenderne
+avsendernes
+avser
+avsetning
+avsetninga
+avsetningen
+avsetningene
+avsetninger
+avsetningsforhold
+avsetningsforholdene
+avsetningsvanske
+avsetningsvansken
+avsetningsvanskene
+avsetningsvanskens
+avsetningsvansker
+avsett
+avsette
+avsettelse
+avsettelsen
+avsettelsens
+avsetter
+avsettes
+avsetting
+avsettinga
+avsettingen
+avsettingens
+avsi
+avsides
+avsidesliggende
+avsier
+avsies
+avsigelse
+avsigelsen
+avsigelsens
+avsindig
+avsindige
+avsitting
+avsivilisere
+avsivilisert
+avsiviliserte
+avsjela
+avsjelet
+avsjelt
+avskaff
+avskaffe
+avskaffelse
+avskaffelsen
+avskaffelsens
+avskaffer
+avskaffes
+avskaffet
+avskalling
+avskallinga
+avskallingen
+avskallingens
+avskallinger
+avsøke
+avsøker
+avskilta
+avskilte
+avskiltet
+avskiping
+avskipinga
+avskipingen
+avskipingens
+avskipning
+avskipningen
+avskipningene
+avskipningens
+avskipninger
+avskjed
+avskjeden
+avskjedene
+avskjedens
+avskjeder
+avskjediga
+avskjedige
+avskjediget
+avskjedsforestilling
+avskjedsforestillinga
+avskjedsforestillingen
+avskjedsforestillingene
+avskjedsforestillingens
+avskjedsforestillinger
+avskjedshilsen
+avskjedshilsenen
+avskjedshilsenene
+avskjedshilsenens
+avskjedshilsener
+avskjedsord
+avskjedsorda
+avskjedsordene
+avskjedspresang
+avskjedspresangen
+avskjedspresangene
+avskjedspresangens
+avskjedspresanger
+avskjedssøknad
+avskjedssøknaden
+avskjedssøknadene
+avskjedssøknadens
+avskjedssøknader
+avskjerme
+avskjermer
+avskjermet
+avskjerming
+avskjerminga
+avskjermingen
+avskjermingens
+avskjerminger
+avskjær
+avskjære
+avskjærende
+avskjærer
+avskjæret
+avsøkning
+avskoging
+avskoginga
+avskogingen
+avskogingens
+avskrekk
+avskrekke
+avskrekkelses
+avskrekkende
+avskrekkes
+avskrekket
+avskåret
+avskrev
+avskrevet
+avskrift
+avskrifta
+avskriften
+avskriftene
+avskriftens
+avskrifter
+avskriv
+avskrive
+avskriver
+avskrives
+avskriving
+avskrivinga
+avskrivingen
+avskrivning
+avskrivningen
+avskrivningene
+avskrivningens
+avskrivninger
+avskrivningsbyrå
+avskrivningsbyråa
+avskrivningsbyråene
+avskrivningsbyrået
+avskrivningsbyråets
+avskrudd
+avsøkt
+avsøkte
+avskum
+avskummet
+avsky
+avskydd
+avskydde
+avskyelig
+avskyelige
+avskyen
+avskygning
+avskygningen
+avskygningene
+avskygningens
+avskygninger
+avskyr
+avskytning
+avskytninga
+avskytningen
+avskytningens
+avskytninger
+avslå
+avslag
+avslaga
+avslagene
+avslaget
+avslagets
+avslapning
+avslapningen
+avslapningens
+avslappede
+avslappende
+avslappet
+avslo
+avslår
+avslør
+avsløre
+avslørende
+avslører
+avsløres
+avsløret
+avsløring
+avsløringa
+avsløringen
+avsløringene
+avsløringens
+avsløringer
+avslørt
+avslørte
+avslått
+avslutning
+avslutninga
+avslutningen
+avslutningene
+avslutningens
+avslutninger
+avslutningsfest
+avslutningsfesten
+avslutningsfestene
+avslutningsfestens
+avslutningsfester
+avslutningshøytidelighet
+avslutningshøytideligheten
+avslutningshøytidelighetene
+avslutningshøytidelighetens
+avslutningshøytideligheter
+avslutningsseremoni
+avslutningsseremonien
+avslutningsseremoniene
+avslutningsseremoniens
+avslutningsseremonier
+avslutt
+avslutta
+avslutte
+avsluttede
+avsluttende
+avslutter
+avsluttes
+avsluttet
+avsmak
+avsmaken
+avsminket
+avsnitt
+avsnitta
+avsnittene
+avsnittet
+avsnittets
+avsona
+avsondre
+avsondret
+avsone
+avsoner
+avsonet
+avsoning
+avsoninga
+avsoningen
+avsont
+avspark
+avsparkene
+avsparket
+avsparkets
+avspaser
+avspasere
+avspaserer
+avspasering
+avspaseringa
+avspaseringen
+avspaseringens
+avspeile
+avspeiler
+avspeiles
+avspeilet
+avspenning
+avspenningen
+avspenningens
+avspenningspolitikk
+avspenningspolitikken
+avspenningspolitikkens
+avspille
+avspiller
+avspillerutstyr
+avspillerutstyret
+avspillerutstyrets
+avspilling
+avspillinga
+avspillingen
+avspillingene
+avspillingens
+avspillinger
+avspise
+avspiser
+avspist
+avspiste
+avspore
+avsporer
+avspores
+avsporet
+avsporing
+avsporinga
+avsporingen
+avsporingene
+avsporingens
+avsporinger
+avstå
+avstamning
+avstamningen
+avstamningene
+avstamningens
+avstamninger
+avstand
+avstanden
+avstandene
+avstander
+avstands
+avstandtagen
+avstedkomme
+avstedkommer
+avstedkommet
+avståelse
+avståelsen
+avståelsene
+avståelsens
+avståelser
+avstemming
+avstemminga
+avstemmingen
+avstemmingens
+avstemminger
+avstemning
+avstemningen
+avstemningene
+avstemningens
+avstemninger
+avstemningsresultat
+avstemningsresultata
+avstemningsresultatene
+avstemningsresultatet
+avstemningsresultatets
+avstemt
+avstemte
+avstengning
+avstengningen
+avstengningene
+avstengningens
+avstengninger
+avstengt
+avstengte
+avstiging
+avstiginga
+avstigingen
+avstigingens
+avstigning
+avstigninga
+avstigningen
+avstigningene
+avstigningens
+avstigninger
+avstikkende
+avstikker
+avstikkere
+avstikkeren
+avstikkerens
+avstikkeres
+avstikkerne
+avstikkernes
+avstive
+avstivet
+avstivning
+avstivninga
+avstivningen
+avstivningene
+avstivningens
+avstivninger
+avstod
+avstøping
+avstøpinga
+avstøpingen
+avstøpingens
+avstøpning
+avstøpningen
+avstøpningene
+avstøpningens
+avstøpninger
+avstår
+avstraffelse
+avstraffelsen
+avstraffelsene
+avstraffelsens
+avstraffelser
+avstresse
+avstressende
+avstresset
+avstått
+avstumpe
+avstumpende
+avstumpet
+avsvekke
+avsvekker
+avsvekket
+avsvidd
+avsvidde
+avta
+avtagende
+avtak
+avtaka
+avtakbar
+avtakende
+avtakene
+avtaker
+avtakere
+avtakeren
+avtakerens
+avtakeres
+avtakerne
+avtakernes
+avtaket
+avtal
+avtala
+avtale
+avtalebestemmelse
+avtalebestemmelsen
+avtalebestemmelsene
+avtalebestemmelsens
+avtalebestemmelser
+avtalebestemt
+avtalebestemte
+avtaleforhandling
+avtaleforhandlinga
+avtaleforhandlingen
+avtaleforhandlingene
+avtaleforhandlingens
+avtaleforhandlinger
+avtaleform
+avtaleforma
+avtaleformen
+avtaleformene
+avtaleformens
+avtaleformer
+avtaleforslag
+avtaleforslaga
+avtaleforslagene
+avtaleforslaget
+avtaleforslagets
+avtalegrunnlag
+avtalegrunnlaga
+avtalegrunnlagene
+avtalegrunnlaget
+avtalegrunnlagets
+avtalen
+avtalene
+avtalens
+avtaler
+avtales
+avtaleutkast
+avtaleutkasta
+avtaleutkastene
+avtaleutkastet
+avtaleutkastets
+avtaleverk
+avtaleverka
+avtaleverket
+avtaleverkets
+avtalt
+avtalte
+avtar
+avtas
+avtatt
+avtegn
+avtegne
+avtegner
+avtegning
+avtegninga
+avtegningen
+avtegningene
+avtegningens
+avtegninger
+avtjening
+avtjeninga
+avtjeningen
+avtjeningens
+avtjent
+avtjente
+avtok
+avtrappa
+avtrappe
+avtrapper
+avtrappet
+avtrapping
+avtrappinga
+avtrappingen
+avtrappingens
+avtrede
+avtredende
+avtrekk
+avtrekker
+avtrekkere
+avtrekkeren
+avtrekkerens
+avtrekkeres
+avtrekkerne
+avtrekkernes
+avtrekket
+avtrekkets
+avtrekkssystem
+avtrekkssystema
+avtrekkssystemene
+avtrekkssystemer
+avtrekkssystemet
+avtrekkssystemets
+avtrykk
+avtrykka
+avtrykkene
+avtrykket
+avtrykkets
+avtvang
+avtvinge
+avtvinger
+avtvunget
+avtvungne
+avund
+avunda
+avunde
+avunden
+avundens
+avundet
+avundsjuk
+avundsjuke
+avundsjukt
+avvant
+avvante
+avveg
+avvegen
+avvegene
+avveger
+avvei
+avveid
+avveide
+avveie
+avveien
+avveiene
+avveiens
+avveier
+avveies
+avveik
+avveining
+avveiningen
+avveiningene
+avveiningens
+avveininger
+avvek
+avveken
+avveket
+avvekslende
+avveksling
+avvekslinga
+avvekslingen
+avvekslingens
+avvekslinger
+avvende
+avvendelig
+avvendelighet
+avvendeligheten
+avvendelighetens
+avvender
+avvendt
+avvendte
+avvenne
+avvent
+avventa
+avvente
+avventende
+avventer
+avventes
+avventet
+avverge
+avverget
+avverja
+avverje
+avverjer
+avverjet
+avvik
+avvika
+avvike
+avvikelse
+avvikelsen
+avvikelsene
+avvikelsens
+avvikelser
+avvikende
+avviker
+avvikere
+avvikeren
+avvikerens
+avvikeres
+avvikerne
+avvikernes
+avviket
+avvikla
+avvikle
+avvikler
+avvikles
+avviklet
+avvikling
+avviklinga
+avviklingen
+avviklinger
+avviklingsstyre
+avviklingsstyret
+avvirke
+avvirket
+avvirkning
+avvirkningen
+avvirkningene
+avvirkningens
+avvirkninger
+avvise
+avvisende
+avviser
+avvisere
+avvises
+avvisning
+avvisningen
+avvisningens
+avvist
+avviste
+avvæpna
+avvæpne
+avvæpnende
+avvæpnes
+avvæpnet
+avvæpning
+avvæpninga
+avvæpningen
+avvæpningens
+azeotrop
+azorisk
+azteker
+aztekere
+aztekeren
+aztekerens
+aztekeres
+aztekerne
+aztekernes
+aztekisk
+b
+bø
+ba
+babbel
+babbelet
+babbelets
+babelsk
+babl
+bable
+babler
+bablet
+babord
+baby
+babyen
+babyene
+babyens
+babyer
+babylonier
+babyloniere
+babylonieren
+babylonierens
+babylonieres
+babylonierne
+babyloniernes
+babystol
+babystolen
+babystolene
+babystolens
+babystoler
+bacalao
+bacalaoen
+bacalaoens
+baccardi
+back
+backen
+backene
+backens
+backer
+backers
+backfisch
+backfischen
+backfischene
+backfischens
+backfischer
+backhand
+backhanden
+backhandene
+backhandens
+backhander
+backing
+backingen
+backingens
+backkjede
+backkjeden
+backkjedene
+backkjedens
+backkjeder
+backnut
+backnuten
+backnutene
+backnutens
+backnuter
+backplass
+backplassen
+backplassene
+backplassens
+backplasser
+backrekke
+backrekken
+backrekkene
+backrekkens
+backrekker
+backs
+backspill
+backspiller
+backspillet
+backspillets
+bacon
+baconet
+baconets
+bad
+bada
+bade
+badebasseng
+badebassenga
+badebassengene
+badebassenger
+badebassenget
+badebassengets
+badebatteri
+badebatteriene
+badebatterier
+badebatteriet
+badebatteriets
+badedrakt
+badedrakta
+badedrakten
+badedraktene
+badedraktens
+badedrakter
+badegjest
+badegjesten
+badegjestene
+badegjestens
+badegjester
+badehetta
+badehette
+badehetten
+badehettene
+badehettens
+badehetter
+badekar
+badekara
+badekarene
+badekaret
+badekarets
+badekott
+badekottet
+badekottets
+bademulighet
+bademuligheten
+bademulighetene
+bademulighetens
+bademuligheter
+badene
+badeplass
+badeplassen
+badeplassene
+badeplassens
+badeplasser
+bader
+baderom
+baderommene
+baderommet
+baderommets
+badesesong
+badesesongen
+badesesongens
+badeshorts
+badeshortsen
+badeshortsene
+badeshortsens
+badeshortser
+badested
+badestedene
+badesteder
+badestedet
+badestedets
+badestrand
+badestranda
+badestranden
+badestrandens
+badet
+badevann
+badevannet
+badevannets
+badeværelse
+badeværelser
+badeværelset
+bading
+badinga
+badingen
+badingens
+badminton
+badmintonbane
+badmintonbanen
+badmintonbanene
+badmintonbanens
+badmintonbaner
+badmintonen
+badmintonens
+badstua
+badstubad
+badstubadet
+badstubadets
+badstue
+badstuen
+badstuene
+badstuens
+badstuer
+badstuovn
+badstuovnen
+badstuovnene
+badstuovnens
+badstuovner
+badstuved
+badstuveden
+badstuvedens
+bag
+bagasje
+bagasjegrind
+bagasjegrinda
+bagasjegrindene
+bagasjegrinder
+bagasjen
+bagasjens
+bagasjeplass
+bagasjeplassen
+bagasjeplassene
+bagasjeplassens
+bagasjeplasser
+bagasjerom
+bagasjerommene
+bagasjerommet
+bagasjerommets
+bagatell
+bagatellen
+bagatellens
+bagateller
+bagatelliser
+bagatellisere
+bagatelliserer
+bagatellisering
+bagatelliseringa
+bagatelliseringen
+bagatelliseringens
+bagatellisert
+bagatelliserte
+bagatellmessig
+bagatellmessige
+bagen
+bagene
+bagens
+bager
+bagler
+baglere
+bagleren
+baglerens
+bagleres
+baglerne
+baglernes
+bagvogn
+bagvogna
+bagvognen
+bagvognene
+bagvognens
+bagvogner
+bahaisme
+bahaismen
+bahaismens
+bahamaner
+bahamanere
+bahamaneren
+bahamanerens
+bahamaneres
+bahamanerne
+bahamanernes
+bahamansk
+bahrainer
+bahrainere
+bahraineren
+bahrainerens
+bahraineres
+bahrainerne
+bahrainernes
+bahrainsk
+bai
+baien
+baiene
+baiens
+baier
+baisse
+baissen
+baissens
+bajas
+bajasen
+bajasene
+bajasens
+bajaser
+bajonett
+bajonetten
+bajonettene
+bajonettens
+bajonetter
+bak
+bakaksel
+bakakselen
+bakakselens
+bakakslene
+bakaksler
+bakbein
+bakbeina
+bakbeinet
+bakbeinets
+bakbundne
+bakdør
+bakdøra
+bakdøren
+bakdørene
+bakdørens
+bakdører
+bake
+bakelitt
+bakelitten
+bakelittens
+baken
+bakenfor
+bakenforliggende
+bakens
+baker
+bakeren
+bakerens
+bakeri
+bakeria
+bakeriene
+bakerier
+bakeriet
+bakeriets
+bakerlaug
+bakerlauget
+bakerlaugets
+bakermester
+bakermesteren
+bakermesterens
+bakermestrene
+bakerst
+bakerste
+bakes
+baketter
+bakevje
+bakevjen
+bakevjens
+bakfra
+bakgård
+bakgården
+bakgårdene
+bakgårdens
+bakgårder
+bakgrunn
+bakgrunnen
+bakgrunnene
+bakgrunnens
+bakgrunner
+bakgrunnshandling
+bakgrunnshandlinga
+bakgrunnshandlingen
+bakgrunnshandlingens
+bakgrunnsmateriale
+bakgrunnsmaterialet
+bakgrunnsmusikk
+bakgrunnsmusikken
+bakgrunnsmusikkens
+bakgrunnsopplysning
+bakgrunnsopplysningen
+bakgrunnsopplysningene
+bakgrunnsopplysningens
+bakgrunnsopplysninger
+bakhand
+bakhjul
+bakhjula
+bakhjulene
+bakhjulet
+bakhjulets
+bakhjulsoppheng
+bakhjulsopphenget
+bakhjulsopphengets
+bakhode
+bakhodet
+bakhold
+bakholdet
+bakholdets
+bakhun
+bakhunen
+bakhunens
+baki
+bakk
+bakka
+bakkanal
+bakkanala
+bakkanalene
+bakkanaler
+bakkanalet
+bakkanalets
+bakkant
+bakkanten
+bakkantens
+bakke
+bakkehell
+bakkehellet
+bakkehellets
+bakkekontakt
+bakkekontakten
+bakkekontaktens
+bakkekontroll
+bakkekontrollen
+bakkekontrollens
+bakkels
+bakkelsen
+bakkelsene
+bakkelsens
+bakkemåling
+bakkemålingen
+bakkemålingene
+bakkemålingens
+bakkemålinger
+bakken
+bakkene
+bakkenivå
+bakkenivået
+bakkenivåets
+bakkeplanering
+bakkeplaneringen
+bakkeplaneringens
+bakker
+bakkestasjon
+bakkestasjonen
+bakkestasjonene
+bakkestasjonens
+bakkestasjoner
+bakket
+bakkete
+bakketopp
+bakketoppen
+bakketoppene
+bakketoppens
+bakketopper
+bakkusdyrker
+bakkusdyrkere
+bakkusdyrkeren
+bakkusdyrkerens
+bakkusdyrkeres
+bakkusdyrkerne
+bakkusdyrkernes
+bakleksa
+baklekse
+baklengs
+baklomma
+baklomme
+baklommen
+baklommene
+baklommens
+baklommer
+bakmeis
+bakmeisa
+bakmeisen
+bakmeisens
+bakmontert
+bakom
+bakover
+bakoverliggende
+bakovervendt
+bakpart
+bakparten
+bakpartene
+bakpartens
+bakparter
+bakre
+bakrus
+bakrusen
+bakrusens
+bakruta
+bakrute
+bakruten
+bakrutene
+bakrutens
+bakruter
+baks
+baksa
+bakse
+bakset
+baksete
+baksetet
+baksida
+bakside
+baksiden
+baksidene
+baksidens
+baksider
+bakskott
+bakskotten
+bakskottens
+bakskut
+bakskuten
+bakskutens
+baksmell
+baksmellen
+baksmellene
+baksmellens
+baksmeller
+baksmellet
+baksmellets
+bakspeil
+bakspeila
+bakspeilene
+bakspeilet
+bakspeilets
+bakst
+bakste
+bakstehella
+bakstehelle
+bakstehellen
+bakstehellene
+bakstehellens
+baksteheller
+bakstekjerring
+bakstekjerringa
+bakstekjerringene
+bakstekjerringer
+baksten
+bakstens
+bakster
+bakstilling
+bakstillingen
+bakstillingens
+bakstrev
+bakstrever
+bakt
+baktale
+baktaler
+baktalt
+baktalte
+baktanke
+baktanken
+baktankene
+baktankens
+baktanker
+bakteppe
+bakteppet
+baktericid
+baktericida
+baktericidene
+baktericider
+baktericidet
+baktericidets
+bakterie
+bakterieangrep
+bakterieangrepet
+bakterieangrepets
+bakteriefri
+bakterieinfeksjon
+bakterieinfeksjonen
+bakterieinfeksjonene
+bakterieinfeksjonens
+bakterieinfeksjoner
+bakterien
+bakteriene
+bakteriens
+bakterier
+bakteriolog
+bakteriologen
+bakteriologene
+bakteriologens
+bakteriologer
+bakteriologi
+bakteriologien
+bakteriologiens
+bakteriologisk
+bakvask
+bakvaska
+bakvaske
+bakvaskelse
+bakvaskelsen
+bakvaskelsene
+bakvaskelsens
+bakvaskelser
+bakvasket
+bakvei
+bakveien
+bakveiene
+bakveiens
+bakveier
+bakvendt
+bakvendte
+bakverk
+bakverket
+bakverkets
+bal
+balalaika
+balalaikaen
+balalaikaene
+balalaikaens
+balalaikaer
+balanse
+balansegang
+balansegangen
+balansegangene
+balansegangens
+balanseganger
+balansekonto
+balansekontoen
+balansekontoens
+balansekunstner
+balansekunstnere
+balansekunstneren
+balansekunstnerens
+balansekunstneres
+balansekunstnerne
+balansekunstnernes
+balansen
+balansens
+balansere
+balanserer
+balanseres
+balansert
+balanserte
+balderbrå
+balderbråa
+balderbråen
+balderbråene
+balderbråens
+balderbråer
+bale
+balet
+balg
+balgen
+balgene
+balgens
+balger
+balje
+baljen
+baljens
+balkong
+balkongen
+balkongene
+balkongens
+balkonger
+ball
+balla
+ballade
+balladen
+balladens
+ballast
+ballasta
+ballaste
+ballasten
+ballastens
+ballasttank
+ballasttanken
+ballasttankene
+ballasttankens
+ballasttanker
+ballblom
+ballblommen
+ballblommene
+ballblommens
+ballblommer
+balle
+ballen
+ballene
+ballens
+baller
+ballerina
+ballerinaen
+ballerinaene
+ballerinaens
+ballerinaer
+ballet
+ballett
+balletten
+ballettene
+ballettens
+balletter
+ballettfilm
+ballettfilmen
+ballettfilmene
+ballettfilmens
+ballettfilmer
+ballklubb
+ballklubben
+ballklubbene
+ballklubbens
+ballklubber
+ballong
+ballongen
+ballongene
+ballongens
+ballonger
+ballongferd
+ballongferda
+ballongferden
+ballongferdene
+ballongferdens
+ballongferder
+balloptikon
+balloptikona
+balloptikonene
+balloptikonet
+balloptikonets
+ballsal
+ballsalen
+ballsalene
+ballsalens
+ballsaler
+ballvirtuos
+ballvirtuosen
+ballvirtuosens
+balsam
+balsamere
+balsamert
+balsamerte
+balsammen
+balsammens
+balstyrig
+baltisk
+baltiske
+balustrade
+balustraden
+balustradene
+balustradens
+balustrader
+bambi
+bambus
+bambusen
+bambusens
+bambusstenger
+bamse
+bamsen
+bamsens
+banal
+banale
+banalisere
+banaliserer
+banalisert
+banaliserte
+banalitet
+banaliteten
+banalitetens
+banalt
+banan
+bananen
+bananene
+bananens
+bananer
+band
+banda
+bandasje
+bandasjen
+bandasjens
+bandasjere
+bandasjert
+bandasjerte
+bandasjist
+bandasjisten
+bandasjistene
+bandasjistens
+bandasjister
+bandbredde
+bandbredden
+bandbreddene
+bandbreddens
+bandbredder
+bande
+banden
+bandene
+bandens
+bander
+bandet
+banditt
+banditten
+bandittene
+bandittens
+banditter
+bandolær
+bandolæra
+bandolærene
+bandolærer
+bandolæret
+bandolærets
+bandt
+bandy
+bandyen
+bandyens
+bane
+banebil
+banebilen
+banebilene
+banebilens
+banebiler
+banebrytende
+banebryter
+banebrytere
+banebryteren
+banebryterens
+banebryteres
+banebryterne
+banebryternes
+banedekke
+banedekket
+baneforhold
+baneforholda
+baneforholdene
+banehalvdel
+banehalvdelen
+banehalvdelens
+baneinspektør
+baneinspektøren
+baneinspektørens
+banekarusell
+baneleia
+baneleie
+baneleien
+baneleiens
+banen
+banene
+banenes
+banens
+baner
+banerekord
+banerekorden
+banerekordene
+banerekordens
+banerekorder
+baneritt
+baneritta
+banerittene
+banerittet
+banerittets
+banespill
+banespillet
+banespillets
+banesport
+banesporten
+banesportens
+banesår
+banesåret
+banesårets
+banet
+bang
+bange
+bangladesher
+bangladeshere
+bangladesheren
+bangladesherens
+bangladesheres
+bangladesherne
+bangladeshernes
+bangladeshisk
+banjer
+banjere
+banjeren
+banjerens
+banjeres
+banjerne
+banjernes
+banjo
+banjoen
+banjoene
+banjoens
+banjoer
+bank
+banka
+bankaksje
+bankaksjen
+bankaksjene
+bankaksjens
+bankaksjer
+bankassistent
+bankassistenten
+bankassistentene
+bankassistentens
+bankassistenter
+bankbok
+bankboka
+bankboken
+bankbokens
+bankdireksjon
+bankdireksjonen
+bankdireksjonene
+bankdireksjonens
+bankdireksjoner
+bankdirektør
+bankdirektøren
+bankdirektørene
+bankdirektørens
+bankdirektører
+banke
+bankefisk
+bankefisken
+bankefiskens
+banken
+bankene
+bankenes
+bankens
+banker
+bankerott
+bankerotten
+bankerottene
+bankerottens
+bankerotter
+bankers
+bankes
+banket
+bankett
+banketten
+bankettene
+bankettens
+banketter
+bankfiske
+bankfisket
+bankfiskets
+bankforbindelse
+bankforbindelsen
+bankforbindelsene
+bankforbindelsens
+bankforbindelser
+bankfunksjonær
+bankfunksjonærers
+bankhold
+bankhvelv
+bankhvelva
+bankhvelvene
+bankhvelvet
+bankhvelvets
+bankier
+bankieren
+bankierens
+bankinnskudd
+bankinnskudda
+bankinnskuddene
+bankinnskuddet
+bankinnskuddets
+bankinspeksjon
+bankinspeksjonen
+bankinspeksjonene
+bankinspeksjonens
+bankinspeksjoner
+bankkasserer
+bankkasserere
+bankkassereren
+bankkassererens
+bankkassereres
+bankkassererne
+bankkasserernes
+bankkonti
+bankkontiene
+bankkonto
+bankkontoen
+bankkontoens
+bankkreditt
+bankkreditten
+bankkredittens
+bankledelse
+bankledelsen
+bankledelsens
+bankmann
+bankmannen
+bankmannens
+bankmenn
+bankmennene
+bankmennenes
+bankmenns
+bankmessige
+banko
+bankoen
+bankoens
+bankran
+bankrana
+bankranene
+bankraner
+bankranere
+bankraneren
+bankranerens
+bankraneres
+bankranerne
+bankranernes
+bankranet
+bankranets
+bankregnskap
+bankregnskapene
+bankregnskaper
+bankregnskapet
+bankregnskapets
+banksamarbeid
+banksamarbeidet
+banksamarbeidets
+banksammenslutning
+banksammenslutningen
+banksammenslutningene
+banksammenslutningens
+banksammenslutninger
+banksjef
+banksjefen
+banksjefene
+banksjefens
+banksjefer
+bankskole
+bankskolen
+bankskolene
+bankskolens
+bankskoler
+banksparere
+bankspareren
+banksparerens
+banksparing
+banksparinga
+banksparingen
+banksparingens
+bankvesen
+bankvesenet
+bankvesenets
+bankvirksomhet
+bankvirksomheten
+bankvirksomhetens
+bann
+bannbulle
+bannbullen
+bannbullens
+bannbulletin
+bannbulletinen
+bannbulletinens
+banne
+banneord
+banneorda
+banneordene
+banneordet
+banneordets
+banner
+bannera
+bannere
+banneret
+bannerfører
+bannerførere
+bannerføreren
+bannerførerens
+bannerføreres
+bannerførerne
+bannerførernes
+bannet
+banning
+banninga
+banningen
+banningens
+bannlyse
+bannlyses
+bannlyst
+bannlyste
+bannskap
+bannskapen
+bannskapens
+bantam
+bantamvekt
+bantamvekten
+bantamvektene
+bantamvektens
+bantamvekter
+bantu
+bantuen
+bantuene
+bantuens
+bantuer
+baptist
+baptisten
+baptistene
+baptistens
+baptister
+baptistkirka
+baptistkirke
+baptistkirken
+baptistkirkene
+baptistkirkens
+baptistkirker
+bar
+barakke
+barakken
+barakkens
+barbadier
+barbadiere
+barbadieren
+barbadierens
+barbadieres
+barbadierne
+barbadiernes
+barbadisk
+barbar
+barbaren
+barbarene
+barbarens
+barbarer
+barbari
+barbariet
+barbariets
+barbarisere
+barbariserer
+barbarisert
+barbariserte
+barbarisk
+barbariske
+barbecue
+barbecuen
+barbecuens
+barbeint
+barbent
+barber
+barbere
+barberen
+barberens
+barberer
+barberere
+barbereren
+barbererens
+barbereres
+barbererne
+barberernes
+barberes
+barbermaskin
+barbermaskina
+barbermaskinen
+barbermaskinene
+barbermaskinens
+barbermaskiner
+barbiturat
+barbiturata
+barbituratene
+barbiturater
+barbituratet
+barbituratets
+barde
+bardehval
+bardehvalen
+bardehvalene
+bardehvalens
+bardehvaler
+barden
+bardene
+bardens
+barder
+bardisk
+bardisken
+bardiskene
+bardiskens
+bardisker
+bardun
+bardunen
+bardunene
+bardunens
+barduner
+bardunere
+bardunerer
+bardunert
+bardunerte
+bardus
+bare
+baren
+barens
+barer
+barett
+baretten
+barettene
+barettens
+baretter
+barfrost
+barfrosten
+barfrostens
+barføtt
+barhoda
+barhodet
+barium
+bark
+barkarole
+barkarolen
+barkarolene
+barkarolens
+barkaroler
+barkass
+barkassen
+barkassene
+barkassens
+barkasser
+barkbilla
+barkbille
+barkbillene
+barkbiller
+barke
+barken
+barkens
+barker
+barket
+barkete
+barkstykke
+barkstykket
+barkstykkets
+barkved
+barkveden
+barkvedens
+barlind
+barlinda
+barlinden
+barlindens
+barm
+barmen
+barmene
+barmens
+barmer
+barmfagre
+barmhjertig
+barmhjertige
+barmhjertighet
+barmhjertigheten
+barmhjertighetens
+barn
+barna
+barnaktig
+barnas
+barndom
+barndommen
+barndommene
+barndommens
+barndommer
+barndomsheim
+barndomsheimen
+barndomsheimens
+barndomshjem
+barndomshjemmet
+barndomshjemmets
+barne
+barnearbeid
+barnearbeidet
+barnearbeidets
+barneavdeling
+barneavdelinga
+barneavdelingen
+barneavdelingene
+barneavdelingens
+barneavdelinger
+barnebarn
+barnebarna
+barnebarnene
+barnebarnet
+barnebarnets
+barnebøker
+barnebok
+barneboka
+barneboken
+barnebokens
+barnedåp
+barnedåpen
+barnedåpens
+barnefamilie
+barnefamilien
+barnefamiliene
+barnefamiliens
+barnefamilier
+barnefar
+barnefaren
+barnefarens
+barneflokk
+barneflokken
+barneflokkene
+barneflokkens
+barneflokker
+barnefortelling
+barnefortellinga
+barnefortellingen
+barnefortellingene
+barnefortellingens
+barnefortellinger
+barnehage
+barnehageassistent
+barnehageassistenten
+barnehageassistentene
+barnehageassistentens
+barnehageassistenter
+barnehagelærere
+barnehagelæreren
+barnehagelærerens
+barnehagelærerne
+barnehagen
+barnehagene
+barnehagens
+barnehageplass
+barnehageplassen
+barnehageplassene
+barnehageplassens
+barnehageplasser
+barnehager
+barneheim
+barneheimen
+barneheimene
+barneheimens
+barneheimer
+barnehjelp
+barnehjelpen
+barnehjelpens
+barnehjem
+barnehjemmene
+barnehjemmet
+barnehjemmets
+barnehode
+barnehodene
+barnehoder
+barnehodet
+barnehodets
+barneinstitusjon
+barneinstitusjonen
+barneinstitusjonene
+barneinstitusjonens
+barneinstitusjoner
+barnekjole
+barnekjolen
+barnekjolene
+barnekjolens
+barnekjoler
+barnekjær
+barneklubb
+barneklubben
+barneklubbene
+barneklubbens
+barneklubber
+barnekor
+barnekora
+barnekorene
+barnekoret
+barnekorets
+barneleik
+barneleike
+barneleiker
+barnelitteratur
+barnelitteraturen
+barnelitteraturens
+barneoppdragelse
+barneoppdragelsen
+barneoppdragelsens
+barnepark
+barneparken
+barneparkene
+barneparkens
+barneparker
+barneparkering
+barneparkeringa
+barneparkeringen
+barneparkeringens
+barnepass
+barnepasser
+barnepasset
+barnepassets
+barnepleierske
+barnepleiersken
+barnepleierskene
+barnepleierskens
+barnepleiersker
+barneprogrammene
+barneprogrammer
+barneprogrammet
+barneprogrammets
+barnepsykolog
+barnepsykologen
+barnepsykologene
+barnepsykologens
+barnepsykologer
+barnepsykologi
+barnepsykologien
+barnepsykologiens
+barneår
+barneåra
+barneårene
+barneåret
+barneårets
+barnerim
+barnerima
+barnerimene
+barnerimet
+barnerimets
+barneserie
+barneserien
+barneseriene
+barneseriens
+barneserier
+barneseta
+barnesete
+barnesetene
+barneseter
+barnesetet
+barnesetets
+barnesinn
+barnesinnet
+barnesinnets
+barneskole
+barneskolen
+barneskolens
+barneskoler
+barneskoles
+barnestol
+barnestolen
+barnestolene
+barnestolens
+barnestoler
+barnestykke
+barnestykket
+barnesykdom
+barnesykdommen
+barnesykdommene
+barnesykdommens
+barnesykdommer
+barnesykehus
+barnesykehusa
+barnesykehusene
+barnesykehuset
+barnesykehusets
+barnesykler
+barnet
+barnetall
+barnetallene
+barnetallet
+barnetallets
+barneteater
+barneteateret
+barneteaterets
+barneteatra
+barneteatre
+barneteatrene
+barneteatret
+barneteatrets
+barnetilvekst
+barnetilveksten
+barnetilvekstens
+barnetime
+barnetimen
+barnetimene
+barnetimens
+barnetimer
+barnetrygd
+barnetrygda
+barnetrygden
+barnetrygdens
+barnets
+barnevennlig
+barnevern
+barnevernet
+barnevernets
+barnevernsarbeid
+barnevernsarbeidet
+barnevernsarbeidets
+barnevernsnemnd
+barnevernsnemnda
+barnevernsnemndene
+barnevernsnemnder
+barnevisa
+barnevise
+barnevisen
+barnevisene
+barnevisens
+barneviser
+barnevogn
+barnevogna
+barnevognen
+barnevognene
+barnevognens
+barnevogner
+barneværelse
+barneværelsene
+barneværelser
+barneværelset
+barnål
+barnåla
+barnålen
+barnålene
+barnålens
+barnåler
+barnlig
+barnlige
+barnløse
+barnløst
+barns
+barnsbein
+barnsbeina
+barnslig
+barnslige
+barokk
+barokkaften
+barokkaftenen
+barokkaftenens
+barokken
+barokkens
+barokkmusikk
+barokkmusikken
+barokkmusikkens
+barokktidens
+barokt
+barometer
+barometeret
+barometerets
+barometra
+barometre
+barometrene
+barometret
+barometrets
+barometriske
+baron
+baronen
+baronene
+baronens
+baroner
+baronesse
+baronessen
+baronessens
+baronesses
+barre
+barren
+barrens
+barriere
+barrieren
+barrierene
+barrierens
+barrierer
+barrikade
+barrikaden
+barrikadene
+barrikadens
+barrikader
+barrikadere
+barrikadert
+barrikaderte
+barsel
+barselet
+barselets
+barselpengene
+barselpenger
+barselseng
+barselsenga
+barselsengen
+barselsengens
+barsk
+barskap
+barskapa
+barskapene
+barskapet
+barskapets
+barske
+barsking
+barskingen
+barskingene
+barskingens
+barskinger
+barskog
+barskogen
+barskogene
+barskogens
+barskoger
+barskt
+barsle
+barsler
+barslet
+bart
+barten
+bartender
+bartendere
+bartenderen
+bartenderens
+bartenderes
+bartenderne
+bartendernes
+bartene
+bartens
+barter
+baryton
+barytonen
+barytonene
+barytonens
+barytoner
+barytonsanger
+barytonsangere
+barytonsangeren
+barytonsangerens
+barytonsangeres
+barytonsangerne
+barytonsangernes
+bas
+basal
+basale
+basar
+basaren
+basarene
+basarens
+basarer
+basarinnslag
+base
+basen
+basene
+basens
+baseområde
+baseområdet
+basepolitikk
+basepolitikken
+basepolitikkens
+baser
+basere
+baserer
+baseres
+basert
+baserte
+basilisk
+basill
+basillen
+basillene
+basillens
+basiller
+basis
+basisen
+basisene
+basisens
+basiser
+basisk
+basisordlista
+basisordliste
+basisordlisten
+basisordlistene
+basisordlistens
+basisordlister
+bask
+baska
+baske
+basker
+basket
+basketak
+basketaka
+basketakene
+basketaket
+basketakets
+basketball
+basketballen
+basketballens
+basketballspillere
+basketballspilleren
+basketballspillerens
+bass
+bassanlegg
+bassanlegget
+bassanleggets
+bassen
+bassene
+basseng
+bassenga
+bassengene
+bassenger
+bassenget
+bassengets
+bassens
+basser
+bassgitarist
+bassgitaristen
+bassgitaristene
+bassgitaristens
+bassgitarister
+bassist
+bassisten
+bassistene
+bassistens
+bassister
+bast
+basta
+bastant
+bastante
+bastard
+bastarden
+bastardene
+bastardens
+bastarder
+baste
+basten
+bastens
+bastet
+bastion
+bastionen
+bastionene
+bastionens
+bastioner
+basun
+basunen
+basunene
+basunens
+basuner
+bat
+bata
+batalje
+bataljen
+bataljens
+bataljon
+bataljonen
+bataljonene
+bataljonens
+bataljoner
+bataljonssjef
+bataljonssjefen
+bataljonssjefene
+bataljonssjefens
+bataljonssjefer
+bate
+baten
+batet
+batikk
+batikken
+batikkens
+batna
+batne
+batnet
+batong
+batongen
+batongene
+batongens
+batonger
+batteri
+batteria
+batteridrevet
+batteriene
+batterier
+batteriet
+batteriets
+batterisjef
+batterisjefen
+batterisjefene
+batterisjefens
+batterisjefer
+battledress
+battledressen
+battledressene
+battledressens
+battledresser
+baud
+bauden
+baudens
+baufil
+baufila
+baufilen
+baufilens
+baug
+baugen
+baugene
+baugens
+bauger
+baugspryd
+baugsprydet
+baugsprydets
+baugtau
+baugtauet
+baugtauets
+bauksitt
+bauksitten
+bauksittens
+baule
+bauler
+bauling
+baulinga
+baulingen
+baulingens
+bault
+baulte
+baun
+baunen
+baunene
+baunens
+bauner
+baus
+bausag
+bausaga
+bausagen
+bausagens
+bause
+bausen
+bausens
+baut
+bauta
+bautastein
+bautasteinen
+bautasteinene
+bautasteinens
+bautasteiner
+baute
+bauten
+bautens
+bautet
+bauting
+bautinga
+bautingen
+bautingens
+bauxitt
+bauxitten
+bauxittens
+bavian
+bavianen
+bavianene
+bavianens
+bavianer
+bavl
+bavle
+bayer
+bayere
+bayeren
+bayerens
+bayeres
+bayerøl
+bayerølet
+bayerølets
+bayerne
+bayernes
+bayerske
+bayolje
+bayoljen
+bayoljene
+bayoljens
+bayoljer
+bayonneskinka
+bayonneskinke
+bayonneskinken
+bayonneskinkene
+bayonneskinkens
+bayonneskinker
+bazooka
+bazookaen
+bazookaene
+bazookaens
+bazookaer
+bød
+bøddel
+bøddelen
+bøddelens
+både
+bødlene
+bødler
+be
+båe
+beagle
+beaglen
+beaglene
+beaglens
+beagler
+beakta
+beakte
+beakter
+beaktet
+bearbeid
+bearbeide
+bearbeidelse
+bearbeidelsen
+bearbeidelsene
+bearbeidelsens
+bearbeidelser
+bearbeider
+bearbeides
+bearbeidet
+bearbeiding
+bearbeidinga
+bearbeidingen
+bearbeidingene
+bearbeidingens
+bearbeidinger
+beat
+beaten
+beatens
+beatnik
+beatniken
+beatnikene
+beatnikens
+beatniker
+beatrise
+beatrisen
+beatrisens
+beaujolais
+beautybag
+beautybagen
+beautybagene
+beautybagens
+beautybager
+beautyboks
+beautyboksen
+beautyboksene
+beautyboksens
+beautybokser
+bebo
+bebodd
+bebodde
+beboelig
+beboelse
+beboelsen
+beboelsens
+beboelseshus
+beboelseshusa
+beboelseshusene
+beboelseshuset
+beboelseshusets
+beboer
+beboere
+beboeren
+beboerens
+beboeres
+beboerne
+beboernes
+bebor
+bebos
+bebreida
+bebreide
+bebreidelse
+bebreidelsen
+bebreidelsene
+bebreidelsens
+bebreidelser
+bebreider
+bebreides
+bebreidet
+bebrilla
+bebrillet
+bebude
+bebudet
+bebygd
+bebygde
+bebygge
+bebyggelse
+bebyggelsen
+bebyggelsens
+bebygges
+bebygget
+bebyrde
+bebyrdet
+bed
+bedage
+bedagelig
+bedaget
+bedding
+beddinga
+beddingen
+beddingene
+beddingens
+beddinger
+bede
+bededag
+bededagen
+bededagens
+bedehus
+bedehusa
+bedehusene
+bedehuset
+bedehusets
+bedekke
+bedekkes
+bedekket
+bedekning
+bedekningen
+bedekningene
+bedekningens
+bedekninger
+bedende
+bedene
+bedenes
+bederva
+bederve
+bedervet
+bedet
+bedømme
+bedømmelse
+bedømmelsen
+bedømmelsene
+bedømmelsens
+bedømmelser
+bedømmer
+bedømmes
+bedømt
+bedra
+bedåra
+bedradd
+bedrag
+bedraga
+bedragene
+bedrager
+bedragere
+bedrageren
+bedragerens
+bedrageres
+bedrageri
+bedrageria
+bedrageriene
+bedragerier
+bedrageriet
+bedrageriets
+bedragerisk
+bedragerne
+bedragernes
+bedragersk
+bedraget
+bedragets
+bedrar
+bedratt
+bedratte
+bedre
+bedåre
+bedrede
+bedremannsbarn
+bedrer
+bedårer
+bedres
+bedret
+bedåret
+bedrev
+bedrevet
+bedrift
+bedriften
+bedriftene
+bedriftenes
+bedriftens
+bedrifter
+bedrifters
+bedrifts
+bedriftsandakt
+bedriftsandakta
+bedriftsandakten
+bedriftsandaktene
+bedriftsandaktens
+bedriftsandakter
+bedriftsblad
+bedriftsbladene
+bedriftsblader
+bedriftsbladet
+bedriftsbladets
+bedriftsdemokrati
+bedriftsdemokratiet
+bedriftsdemokratiets
+bedriftseier
+bedriftseiere
+bedriftseieren
+bedriftseierens
+bedriftseieres
+bedriftseierne
+bedriftseiernes
+bedriftsforsamling
+bedriftsforsamlinga
+bedriftsforsamlingen
+bedriftsforsamlingens
+bedriftsforsamlinger
+bedriftsfotball
+bedriftsfotballen
+bedriftsfotballens
+bedriftsidrett
+bedriftsidretten
+bedriftsidrettens
+bedriftsklasse
+bedriftsklassen
+bedriftsklassene
+bedriftsklassens
+bedriftsklasser
+bedriftsklubb
+bedriftsklubben
+bedriftsklubbene
+bedriftsklubbens
+bedriftsklubber
+bedriftsøkonomi
+bedriftsøkonomien
+bedriftsøkonomiens
+bedriftsøkonomisk
+bedriftsøkonomiske
+bedriftslag
+bedriftslaga
+bedriftslagene
+bedriftslaget
+bedriftslagets
+bedriftsledelse
+bedriftsledelsen
+bedriftsledelsens
+bedriftsledere
+bedriftslederen
+bedriftslederens
+bedriftslege
+bedriftslegen
+bedriftslegene
+bedriftslegens
+bedriftsleger
+bedriftsliv
+bedriftslivet
+bedriftslivets
+bedriftsmiljø
+bedriftsmiljøet
+bedriftsmiljøets
+bedriftsorgan
+bedriftsorganet
+bedriftsorganets
+bedriftsutvalg
+bedriftsutvalga
+bedriftsutvalgene
+bedriftsutvalget
+bedriftsutvalgets
+bedring
+bedringa
+bedringen
+bedringer
+bedrive
+bedriver
+bedrives
+bedro
+bedrøva
+bedrøve
+bedrøvelig
+bedrøvet
+bedt
+bedugga
+bedugge
+beduggede
+bedugget
+beduin
+beduinen
+beduinene
+beduinens
+beduiner
+bedøve
+bedøvelse
+bedøvelsen
+bedøvelsens
+bedøvende
+bedøvet
+bedyre
+bedyrer
+bedyret
+beefeaters
+befal
+befale
+befaler
+befalet
+befalets
+befaling
+befalinga
+befalingen
+befalingens
+befalingsmann
+befalingsmannen
+befalingsmannens
+befalingsmenn
+befalingsmennene
+befalingsmennenes
+befalingsmenns
+befalslag
+befalslaget
+befalslagets
+befalsmesse
+befalsmessen
+befalsmessens
+befalsopplæring
+befalsopplæringa
+befalsopplæringen
+befalsopplæringens
+befalsordning
+befalsordninga
+befalsordningen
+befalsordningens
+befalsskole
+befalsskolen
+befalsskolens
+befalsyrke
+befalsyrket
+befalt
+befalte
+befant
+befares
+befaring
+befaringa
+befaringen
+befaringene
+befaringens
+befaringer
+befatning
+befatningen
+befatningens
+befatte
+befatter
+befengt
+beferda
+beferde
+beferdede
+beferdet
+befeste
+befestes
+befestet
+befinne
+befinnende
+befinner
+befippelse
+befippelsen
+befippelsens
+beføle
+beføler
+beflitte
+beflittet
+befølt
+befølte
+befolka
+befolke
+befolkede
+befolker
+befolket
+befolkning
+befolkningen
+befolkningens
+befolknings
+befolkningsgruppa
+befolkningsgruppe
+befolkningsgruppen
+befolkningsgruppene
+befolkningsgruppens
+befolkningsgrupper
+befolkningsøkning
+befolkningsøkningen
+befolkningsøkningens
+befolkningskonsentrasjon
+befolkningskonsentrasjonen
+befolkningskonsentrasjonene
+befolkningskonsentrasjonens
+befolkningskonsentrasjoner
+befolkningslag
+befolkningsunderlag
+befolkningsunderlaget
+befolkningsunderlagets
+befolkningsvekst
+befolkningsveksten
+befolkningsvekstens
+befordre
+befordrer
+befordring
+befordringa
+befordringen
+befordringens
+befordringsmiddel
+befordringsmiddelet
+befordringsmiddelets
+befordringsmidla
+befordringsmidlene
+befordringsmidler
+befordringsmidlet
+befordringsmidlets
+befrakta
+befrakte
+befrakter
+befraktere
+befrakteren
+befrakterens
+befrakteres
+befrakterne
+befrakternes
+befraktet
+befraktningsavtale
+befraktningsavtalen
+befraktningsavtalene
+befraktningsavtalens
+befraktningsavtaler
+befraktningssjef
+befraktningssjefen
+befraktningssjefene
+befraktningssjefens
+befraktningssjefer
+befri
+befridd
+befrielse
+befrielsen
+befrielsens
+befriende
+befrier
+befriere
+befrieren
+befrierens
+befrieres
+befrierne
+befriernes
+befrir
+befrukta
+befrukte
+befrukter
+befruktet
+befruktning
+befruktningen
+befruktningens
+befunnet
+beføyelse
+beføyelsen
+beføyelsene
+beføyelsens
+beføyelser
+beføyet
+begå
+begav
+begava
+begave
+begavede
+begavelse
+begavelsen
+begavelsene
+begavelsens
+begavelser
+begavet
+begeistra
+begeistre
+begeistrede
+begeistret
+begeistring
+begeistringa
+begeistringen
+begeistringens
+beger
+begeret
+begerets
+begersvinger
+begersvingere
+begersvingeren
+begersvingerens
+begersvingeres
+begersvingerne
+begersvingernes
+begge
+begi
+begikk
+begir
+begivenhet
+begivenheten
+begivenhetene
+begivenhetens
+begivenheter
+begivenhetslaus
+begivenhetsløst
+begivenhetsrike
+begivenhetsrikt
+begjær
+begjære
+begjæres
+begjæret
+begjæring
+begjæringa
+begjæringen
+begjæringene
+begjæringens
+begjæringer
+begjærlige
+begjærlighet
+begjærligheten
+begjærlighetens
+begjært
+begjærte
+beglo
+beglodd
+begonia
+begoniaen
+begoniaene
+begoniaens
+begoniaer
+begår
+begra
+begravd
+begravde
+begrave
+begravelse
+begravelsen
+begravelsene
+begravelsens
+begravelser
+begravelsesbyrå
+begravelsesbyråenes
+begravelsesdag
+begravelsesdagen
+begravelsesdagens
+begravelsesform
+begravelsesforma
+begravelsesformen
+begravelsesformene
+begravelsesformens
+begravelsesformer
+begravelseshøgtidelighet
+begravelseshøgtideligheten
+begravelseshøgtidelighetens
+begraver
+begraves
+begravet
+begre
+begredelig
+begreip
+begrene
+begrening
+begreningen
+begreningens
+begrens
+begrensa
+begrense
+begrensede
+begrenser
+begrenses
+begrenset
+begrensing
+begrensinga
+begrensingen
+begrensingens
+begrensinger
+begrensning
+begrensningen
+begrensningene
+begrensningens
+begrensninger
+begrep
+begrepa
+begrepene
+begreper
+begrepet
+begrepets
+begrepsdannelse
+begrepsdannelsen
+begrepsdannelsens
+begrepsforvirring
+begrepsforvirringa
+begrepsforvirringen
+begrepsforvirringens
+begripe
+begripelig
+begriper
+begrov
+begrunne
+begrunnede
+begrunnelse
+begrunnelsen
+begrunnelsene
+begrunnelsens
+begrunnelser
+begrunner
+begrunnes
+begrunnet
+begrunnete
+begås
+begått
+begåtte
+begunstige
+begunstigelse
+begunstigelsen
+begunstigelsene
+begunstigelsens
+begunstigelser
+begunstiget
+begynn
+begynne
+begynnelse
+begynnelsen
+begynnelsens
+begynnende
+begynner
+begynnerfeil
+begynnerfeilen
+begynnerfeilene
+begynnerfeilens
+begynnerkurs
+begynnerkursene
+begynnerkurser
+begynnerkurset
+begynnerkursets
+begynnerlønn
+begynnerlønna
+begynnerlønnen
+begynnerlønnene
+begynnerlønnens
+begynnernes
+begynneropplæring
+begynneropplæringa
+begynneropplæringen
+begynneropplæringens
+begynnerskole
+begynnerskolen
+begynnerskolene
+begynnerskolens
+begynnerskoler
+begynt
+begynte
+behå
+behag
+behage
+behagelig
+behagelige
+behageligere
+behagelighet
+behageligheten
+behagelighetene
+behagelighetens
+behageligheter
+behaget
+behandla
+behandle
+behandler
+behandles
+behandlet
+behandling
+behandlinga
+behandlingen
+behandlingene
+behandlingens
+behandlinger
+behandlingsheim
+behandlingsheimen
+behandlingsheimene
+behandlingsheimens
+behandlingsheimer
+behandlingshjem
+behandlingshjemma
+behandlingshjemmene
+behandlingshjemmet
+behandlingshjemmets
+behandlingsklar
+behandlingsmåte
+behandlingsmåten
+behandlingsmåtens
+behandlingsprogram
+behandlingsprogrammene
+behandlingsprogrammer
+behandlingsprogrammet
+behandlingsprogrammets
+behandlingsresultat
+behandlingsresultata
+behandlingsresultatene
+behandlingsresultater
+behandlingsresultatet
+behandlingsresultatets
+behandlingstid
+behandlingstida
+behandlingstiden
+behandlingstidens
+behandlingstilbud
+behandlingstilbuda
+behandlingstilbudene
+behandlingstilbudet
+behandlingstilbudets
+behaviorisme
+behaviorismen
+behaviorismens
+behavioristisk
+behefte
+beheftede
+beheftelse
+beheftelsen
+beheftelsene
+beheftelsens
+beheftelser
+beheftet
+behåen
+behendig
+behendighet
+behendigheten
+behendighetens
+behåene
+behåens
+behåer
+beherska
+beherske
+beherskelse
+beherskelsen
+beherskelsens
+behersker
+behersket
+behjelpelig
+behjelpelighet
+behjelpeligheten
+behjelpelighetens
+behjerta
+behjertet
+behold
+beholden
+beholder
+beholdere
+beholderen
+beholderens
+beholderes
+beholderne
+beholdernes
+beholdes
+beholdning
+beholdningen
+beholdningene
+beholdningens
+beholdninger
+beholdt
+behov
+behova
+behovene
+behovet
+behovets
+behovsanalyse
+behovsanalysen
+behovsanalysene
+behovsanalysens
+behovsanalyser
+behovsprøve
+behovsprøver
+behovsprøvet
+behovsprøving
+behovsprøvinga
+behovsprøvingen
+behovsprøvingene
+behovsprøvingens
+behovsprøvinger
+behåra
+behåret
+behørig
+behøvd
+behøvde
+behøvdes
+behøve
+behøver
+behøves
+beige
+beile
+beiler
+beilt
+beilte
+bein
+beina
+beinbrott
+beinbrottet
+beinbrottets
+beinbrudd
+beinbrudda
+beinbruddene
+beinbruddet
+beinbruddets
+beinbygning
+beinbygningen
+beinbygningens
+beine
+beinet
+beinete
+beinfly
+beinhard
+beinharde
+beinhardt
+beinke
+beinket
+beinklær
+beinkløyvd
+beinlaus
+beinlause
+beinlaust
+beinløs
+beinløse
+beinløst
+beinparade
+beinparaden
+beinparadens
+beinrad
+beinradet
+beinradets
+beinrangel
+beinrangelet
+beinrangelets
+beinranglet
+beinranglets
+beins
+beinsam
+beinsmerte
+beinsmerten
+beinsmertene
+beinsmertens
+beinsmerter
+beinsom
+beint
+beintfram
+beinveg
+beinvegen
+beinvegens
+beinveges
+beinvei
+beinveien
+beinveiene
+beinveiens
+beinveier
+beinvev
+beinvevet
+beinvevets
+beis
+beise
+beisen
+beisens
+beiser
+beiset
+beising
+beisinga
+beisingen
+beisingens
+beisk
+beiske
+beiskne
+beiskt
+beist
+beiste
+beistet
+beit
+beita
+beite
+beitemark
+beitemarka
+beitemarken
+beitemarkene
+beitemarkens
+beitemarker
+beitene
+beiter
+beitet
+beiting
+beitinga
+beitingen
+beitingens
+bejae
+bejaet
+bejaing
+bejainga
+bejaingen
+bejaingens
+bek
+bekaktig
+beke
+bekende
+beket
+bekete
+bekgryta
+bekgryte
+bekgryten
+bekgrytens
+bekjempa
+bekjempe
+bekjempelse
+bekjempelsen
+bekjempelsens
+bekjemper
+bekjempes
+bekjempet
+bekjemping
+bekjempinga
+bekjempingen
+bekjempingens
+bekjenne
+bekjennelse
+bekjennelsen
+bekjennelsene
+bekjennelsens
+bekjennelser
+bekjennelsestro
+bekjenner
+bekjent
+bekjente
+bekjentgjort
+bekjentgjørelse
+bekjentgjørelsen
+bekjentgjørelsens
+bekjentgjøres
+bekjenthet
+bekjentheten
+bekjenthetens
+bekjentskap
+bekjentskapa
+bekjentskapene
+bekjentskaper
+bekjentskapet
+bekjentskapets
+bekk
+bekkasin
+bekkasinen
+bekkasinene
+bekkasinens
+bekkasiner
+bekkaure
+bekkauren
+bekkaurene
+bekkaurens
+bekkaurer
+bekkefar
+bekkefaret
+bekkefarets
+bekken
+bekkenbein
+bekkenbeinet
+bekkenbeinets
+bekkene
+bekkenet
+bekker
+bekkerøya
+bekkerøye
+beklag
+beklage
+beklagelig
+beklagelige
+beklageligvis
+beklagelse
+beklagelsen
+beklagelsene
+beklagelsens
+beklagelser
+beklagende
+beklager
+beklaget
+bekle
+bekledd
+bekledde
+beklede
+bekledning
+bekledningen
+bekledningens
+bekledningsindustri
+bekledningsindustrien
+bekledningsindustriens
+bekledningsvare
+bekledningsvaren
+bekledningsvarene
+bekledningsvarens
+bekledningsvarer
+beklemmende
+beklemt
+beklemthet
+beklemtheten
+beklemthetens
+beklippa
+beklippe
+beklipper
+beklippet
+bekmørk
+bekmørke
+bekmørkt
+beknip
+bekomme
+bekommer
+bekommet
+bekomst
+bekoste
+bekoster
+bekostes
+bekostet
+bekostning
+bekostningen
+bekostningene
+bekostningens
+bekostninger
+bekransa
+bekranse
+bekranser
+bekranset
+bekransning
+bekransningen
+bekransningene
+bekransningens
+bekransninger
+bekre
+bekreft
+bekrefte
+bekreftede
+bekreftelse
+bekreftelsen
+bekreftelsene
+bekreftelsens
+bekreftelser
+bekreftende
+bekrefter
+bekreftes
+bekreftet
+bekren
+bekrene
+bekrens
+bekrer
+bekrone
+bekroner
+bekroning
+bekroninga
+bekroningen
+bekroningens
+bekront
+bekronte
+beksel
+bekselet
+bekselets
+beksle
+beksler
+bekslet
+bekslets
+beksøm
+beksømmen
+beksømmens
+beksømstøvler
+bekvem
+bekvemme
+bekvemmelige
+bekvemmelighet
+bekvemmeligheten
+bekvemmelighetene
+bekvemmelighetens
+bekvemmeligheter
+bekvemt
+bekymra
+bekymre
+bekymrer
+bekymret
+bekymring
+bekymringa
+bekymringen
+bekymringene
+bekymringens
+bekymringer
+bekymringsfull
+bekymringsfulle
+bekymringsfullt
+bekymringslaus
+bekymringsløs
+bel
+belagd
+belagde
+belage
+belaget
+belagt
+belaste
+belastede
+belaster
+belastes
+belastet
+belastning
+belastninga
+belastningen
+belastningene
+belastningens
+belastninger
+belastningssjukdom
+belastningssjukdommen
+belastningssjukdommene
+belastningssjukdommens
+belastningssjukdommer
+belastningssykdom
+belastningssykdommen
+belastningssykdommene
+belastningssykdommens
+belastningssykdommer
+belegg
+belegge
+belegger
+belegget
+beleggsfaktor
+beleilig
+beleire
+beleirede
+beleirer
+beleirerne
+beleiret
+beleiring
+beleiringa
+beleiringen
+beleiringene
+beleiringens
+beleiringer
+belemre
+belemret
+belesse
+belesset
+belest
+beleste
+beleven
+belg
+belgen
+belgene
+belgens
+belger
+belgier
+belgiere
+belgieren
+belgierens
+belgieres
+belgierne
+belgiernes
+belgisk
+belgiske
+belgmørk
+belgmørkt
+beliggende
+beliggenhet
+beliggenheten
+beliggenhetene
+beliggenhetens
+beliggenheter
+beliva
+belive
+belivet
+belj
+belja
+belje
+beljet
+belladonna
+belladonnaen
+belladonnaene
+belladonnaens
+belladonnaer
+belling
+bellingen
+bellingene
+bellingens
+bellinger
+belma
+belme
+belmer
+belmet
+belåne
+belåner
+belåning
+belåninga
+belåningen
+belåningens
+belønna
+belønne
+belønnet
+belønning
+belønninga
+belønningen
+belønningene
+belønningens
+belønninger
+belånt
+belånte
+beløp
+beløpe
+beløpene
+beløper
+beløpet
+belære
+belærende
+belærer
+belæring
+belæringa
+belæringen
+belæringens
+belært
+belærte
+belt
+belte
+beltebil
+beltebilen
+beltebilene
+beltebilens
+beltebiler
+beltedekk
+beltedekket
+beltedekkets
+beltene
+belter
+beltestropp
+beltestroppen
+beltestroppene
+beltestroppens
+beltestropper
+beltet
+belyse
+belyser
+belysning
+belysningen
+belysningens
+belysningsstyrke
+belysningsstyrken
+belysningsstyrkens
+belysningsteknikk
+belysningsutstyr
+belysningsutstyret
+belysningsutstyrets
+belyst
+belyste
+bemalt
+bemanna
+bemanne
+bemannet
+bemanning
+bemanninga
+bemanningen
+bemanningene
+bemanningens
+bemanninger
+bemanningslista
+bemanningsliste
+bemanningslisten
+bemanningslistene
+bemanningslistens
+bemanningslister
+bemanningssituasjon
+bemanningssituasjonen
+bemanningssituasjonene
+bemanningssituasjonens
+bemanningssituasjoner
+bemektige
+bemektiget
+bemerk
+bemerka
+bemerke
+bemerkelsesverdig
+bemerkelsesverdige
+bemerker
+bemerkes
+bemerket
+bemerkning
+bemerkningen
+bemerkningene
+bemerkningens
+bemerkninger
+bemidlet
+bemyndigelse
+bemyndigelsen
+bemyndigelsene
+bemyndigelsens
+bemyndigelser
+ben
+båen
+bend
+benda
+benåda
+beånda
+bende
+benåde
+beånde
+bendel
+bendelen
+bendelens
+bendet
+benådet
+beåndet
+bendler
+benådning
+benådningen
+benådningene
+benådningens
+benådninger
+bendsel
+bendselet
+bendselets
+bendsle
+bendsler
+bendslet
+bendslets
+båene
+benediksjon
+benediksjonen
+benediksjonene
+benediksjonens
+benediksjoner
+benediktiner
+benediktinere
+benediktineren
+benediktinerens
+benediktineres
+benediktinerne
+benediktinernes
+benefice
+beneficen
+beneficens
+beneficia
+beneficiene
+beneficier
+beneficium
+benefisert
+benekta
+benekte
+benektelse
+benektelsen
+benektelsene
+benektelsens
+benektelser
+benektende
+benekter
+benektes
+benektet
+benevne
+benevnelse
+benevnelsen
+benevnelsens
+benevner
+benevnes
+benevning
+benevninga
+benevningen
+benevningene
+benevningens
+benevninger
+benevnt
+bengel
+bengelen
+bengelens
+benglene
+bengler
+benk
+benka
+benke
+benkeforslag
+benkeforslaga
+benkeforslagene
+benkeforslaget
+benkeforslagets
+benken
+benkene
+benker
+benkerad
+benkeraden
+benkeradene
+benkeradens
+benkerader
+benket
+benklær
+bens
+båens
+bensin
+bensinblanding
+bensinblandinga
+bensinblandingen
+bensinblandingens
+bensinblandinger
+bensinbomba
+bensinbombe
+bensinbomben
+bensinbombene
+bensinbombens
+bensinbomber
+bensindamp
+bensindampen
+bensindampens
+bensindrevne
+bensinen
+bensinens
+bensinforbruk
+bensinforbruket
+bensinforbrukets
+bensinkanna
+bensinkanne
+bensinkannen
+bensinkannene
+bensinkannens
+bensinkanner
+bensinmangel
+bensinmangelen
+bensinmangelens
+bensinmotor
+bensinmotoren
+bensinmotorene
+bensinmotorens
+bensinmotorer
+bensinpumpa
+bensinpumpe
+bensinpumpen
+bensinpumpene
+bensinpumpens
+bensinpumper
+bensinslange
+bensinslangen
+bensinslangene
+bensinslangens
+bensinslanger
+bensinstasjon
+bensinstasjonen
+bensinstasjonene
+bensinstasjonens
+bensinstasjoner
+bensintank
+bensintanken
+bensintankene
+bensintankens
+bensintanker
+bent
+bentfrem
+benvei
+benveien
+benveiene
+benveiens
+benveier
+benytt
+benytte
+benyttede
+benyttelse
+benytter
+benyttes
+benyttet
+benzen
+benzenet
+benzenets
+benzyl
+benzylet
+benzylets
+beordra
+beordre
+beordres
+beordret
+beordring
+beordringa
+beordringen
+beordringene
+beordringens
+beordringer
+beplante
+beplantet
+beplanting
+beplantinga
+beplantingen
+beplantingens
+beplantning
+beplantningen
+beplantningene
+beplantningens
+beplantninger
+ber
+berå
+båer
+beramma
+beramme
+berammes
+berammet
+berber
+berbere
+berberen
+berberens
+berberes
+berberis
+berberisene
+berberiser
+berberiset
+berberisets
+berberne
+berbernes
+berceuse
+berceusen
+berceusene
+berceusens
+berceuser
+beråd
+berådde
+beære
+bered
+berede
+bereder
+beredet
+beredskap
+beredskapslager
+beredskapslageret
+beredskapslagerets
+beredskapslagra
+beredskapslagre
+beredskapslagrene
+beredskapsmateriell
+beredskapsordning
+beredskapsordninga
+beredskapsordningen
+beredskapsordningens
+beredskapsvakt
+beredskapsvakten
+beredskapsvaktene
+beredskapsvaktens
+beredskapsvakter
+beredt
+beredvillig
+beregn
+beregne
+beregnede
+beregnende
+beregner
+beregnes
+beregnet
+beregning
+beregningen
+beregningene
+beregningens
+beregninger
+beregningsarbeid
+beregningsarbeidet
+beregningsarbeidets
+beregningsgrunnlag
+beregningsgrunnlaga
+beregningsgrunnlagene
+beregningsgrunnlaget
+beregningsgrunnlagets
+beregningsmetode
+beregningsmetoden
+beregningsmetodene
+beregningsmetodens
+beregningsmetoder
+beregningsoppgave
+beregningsoppgaven
+beregningsoppgavene
+beregningsoppgavens
+beregningsoppgaver
+bereist
+bereiste
+berekna
+berekne
+berekner
+bereknet
+berekning
+berekninga
+berekningen
+berekningene
+berekningens
+berekninger
+berekningsgrunnlag
+berekningsgrunnlaga
+berekningsgrunnlagene
+berekningsgrunnlaget
+berekningsgrunnlagets
+beret
+beæret
+bereten
+beretene
+beretens
+bereter
+beretning
+beretningen
+beretningene
+beretningens
+beretninger
+beretningsår
+beretningsåret
+beretningsårets
+beretta
+berette
+beretter
+berettes
+berettet
+berettiga
+berettige
+berettigede
+berettigelse
+berettigelsen
+berettigelsens
+berettiger
+berettiget
+berg
+berga
+bergart
+bergarten
+bergartene
+bergartens
+bergarter
+berge
+bergebragd
+bergebragden
+bergebragdene
+bergebragdens
+bergebragder
+bergelønn
+bergelønna
+bergelønnen
+bergelønnens
+bergenser
+bergensere
+bergenseren
+bergenserens
+bergenseres
+bergenserinna
+bergenserinne
+bergenserinnen
+bergenserinnene
+bergenserinnens
+bergenserinner
+bergenserne
+bergensernes
+bergensk
+bergenske
+berger
+berges
+berget
+bergfru
+bergfrue
+berggylta
+berggylte
+berggylten
+berggyltene
+berggyltens
+berggylter
+berging
+berginga
+bergingen
+bergingeniør
+bergingeniøren
+bergingeniørene
+bergingeniørens
+bergingeniører
+bergingens
+bergingsbåt
+bergingsbåten
+bergingsbåtene
+bergingsbåtens
+bergingsbåter
+bergingsfartøy
+bergingsfartøys
+bergingslønn
+bergingslønna
+bergingslønnen
+bergingslønnens
+bergkrystall
+bergkrystallen
+bergkrystallene
+bergkrystallens
+bergkrystaller
+bergkrystallet
+bergkrystallets
+berglendt
+bergrygg
+bergryggen
+bergryggens
+bergs
+bergverk
+bergverket
+bergverkets
+bergverks
+berika
+berike
+berikelse
+berikelsen
+berikelsens
+beriker
+beriket
+beriktige
+beriktiget
+berkelium
+berkeliumet
+berkeliumets
+berliner
+berlinere
+berlineren
+berlinerens
+berlineres
+berlinerne
+berlinernes
+berme
+bermen
+bermens
+berømme
+berømmelig
+berømmelige
+berømmelse
+berømmelsen
+berømmelsens
+berømmer
+berømmes
+berømmet
+berømt
+berømte
+berømthet
+berømtheten
+berømthetene
+berømthetens
+berømtheter
+bermudashorts
+bermudashortsen
+bermudashortsene
+bermudashortsens
+bero
+berodde
+beroende
+beroliga
+berolige
+beroligende
+beroliger
+beroliget
+beror
+berøre
+berører
+berøres
+berøring
+berøringa
+berøringen
+berøringene
+berøringens
+berøringer
+berøringsassosiasjon
+berøringsassosiasjonen
+berøringsassosiasjonene
+berøringsassosiasjonens
+berøringsassosiasjoner
+berøringsflata
+berøringsflate
+berøringsflaten
+berøringsflatene
+berøringsflatens
+berøringsflater
+berøringspunkt
+berøringspunkta
+berøringspunktene
+berøringspunkter
+berøringspunktet
+berøringspunktets
+berørt
+berørte
+berørtes
+berserk
+berserken
+berserkene
+berserkens
+berserker
+berserksgang
+berserksgangen
+berserksgangens
+bert
+berte
+bertram
+beruse
+berusede
+berusende
+beruset
+berust
+beruste
+berøve
+berøvelse
+berøvelsen
+berøvelsens
+berøves
+berøvet
+berykta
+beryktede
+beryktet
+beryll
+beryllen
+beryllene
+beryllens
+beryller
+beryllium
+berylliumet
+berylliumets
+besatt
+besatte
+bese
+besees
+besegla
+besegle
+beseglet
+beseire
+beseiret
+besetning
+besetningen
+besetningene
+besetningens
+besetninger
+besette
+besettelse
+besettelsen
+besettelsens
+besettende
+besifra
+besifre
+besifret
+besifring
+besifringa
+besifringen
+besifringens
+besikta
+besikte
+besiktelse
+besiktelsen
+besiktelsene
+besiktelsens
+besiktelser
+besiktet
+besiktiga
+besiktige
+besiktigelse
+besiktigelsen
+besiktigelsens
+besiktiget
+besindig
+besindighet
+besindigheten
+besindighetens
+besinna
+besinne
+besinnelse
+besinnelsen
+besinnelsens
+besinnet
+besitte
+besittelse
+besittelsen
+besittelsene
+besittelsens
+besitter
+besittet
+besjele
+besjelet
+besk
+besøk
+beskadiga
+beskadige
+beskadigelse
+beskadigelsen
+beskadigelsens
+beskadiget
+beskaffen
+beskaffenhet
+beskaffenheten
+beskaffenhetens
+beskar
+beskatning
+beskatningen
+beskatningens
+beskatta
+beskatte
+beskattes
+beskattet
+beske
+besøke
+besøkende
+besøkene
+besøker
+besøkes
+besøket
+beskhet
+beskheten
+beskhetens
+beskikka
+beskikke
+beskikkelse
+beskikkelsen
+beskikkelsens
+beskikker
+beskikkes
+beskikket
+beskitt
+beskjed
+beskjeden
+beskjedene
+beskjedenhet
+beskjedenheten
+beskjedenhetens
+beskjedens
+beskjedent
+beskjeder
+beskjedne
+beskjednere
+beskjeftige
+beskjeftigede
+beskjeftigelse
+beskjeftigelsen
+beskjeftigelsens
+beskjeftiger
+beskjeftiget
+beskjemmende
+beskjenke
+beskjenker
+beskjenking
+beskjenkinga
+beskjenkingen
+beskjenkingens
+beskjenkt
+beskjenkte
+beskjære
+beskjæres
+beskjæring
+beskjæringa
+beskjæringen
+beskjæringene
+beskjæringens
+beskjæringer
+beskjøt
+beskna
+beskne
+beskner
+besknet
+beskåret
+beskrev
+beskreven
+beskrevet
+beskrevne
+beskriv
+beskrive
+beskrivelse
+beskrivelsen
+beskrivelsene
+beskrivelsens
+beskrivelser
+beskrivende
+beskriver
+beskrives
+besøksdag
+besøksdagen
+besøksdagene
+besøksdagens
+besøksdager
+besøkstid
+besøkstida
+besøkstiden
+besøkstidens
+beskt
+besøkt
+besøkte
+beskue
+beskuer
+beskuet
+beskutt
+beskylde
+beskylder
+beskyldes
+beskyldning
+beskyldningen
+beskyldningene
+beskyldningens
+beskyldninger
+beskyldt
+beskyldte
+beskøyt
+beskyte
+beskøyten
+beskøytene
+beskøytens
+beskyter
+beskøyter
+beskyting
+beskytinga
+beskytingen
+beskytingens
+beskytt
+beskytta
+beskytte
+beskyttelse
+beskyttelsen
+beskyttelsens
+beskyttelsesrom
+beskyttelsesrommene
+beskyttelsesrommet
+beskyttelsesrommets
+beskyttende
+beskytter
+beskytterinstinkt
+beskytterinstinktet
+beskytterinstinktets
+beskyttes
+beskyttet
+beslå
+beslag
+beslaga
+beslagene
+beslaget
+beslagets
+beslagla
+beslaglagt
+beslaglegge
+beslagleggelse
+beslagleggelsen
+beslagleggelsene
+beslagleggelsens
+beslagleggelser
+beslaglegger
+beslaglegges
+beslekta
+beslektede
+beslektet
+beslo
+beslått
+beslutning
+beslutningen
+beslutningene
+beslutningens
+beslutninger
+beslutningsprosess
+beslutningsprosessen
+beslutningsprosessene
+beslutningsprosessens
+beslutningsprosesser
+beslutningstaker
+beslutningstakere
+beslutningstakeren
+beslutningstakerens
+beslutningstakeres
+beslutningstakerne
+beslutningstakernes
+beslutningsteori
+beslutta
+beslutte
+besluttede
+besluttende
+beslutter
+besluttet
+besluttsom
+besluttsomhet
+besluttsomheten
+besluttsomhetens
+besluttsomme
+besluttsomt
+besmitte
+besmittelse
+besmittelsen
+besmittelsens
+besmittet
+besmykka
+besmykke
+besmykker
+besmykket
+besmykking
+besmykkinga
+besmykkingen
+besmykkingens
+besna
+besne
+besnet
+besnære
+besnærende
+besnuse
+besnuser
+besnust
+besnuste
+besove
+besover
+besovet
+bespare
+besparelse
+besparelsen
+besparelsene
+besparelsens
+besparelser
+besparer
+besparing
+besparinga
+besparingen
+besparingene
+besparingens
+besparinger
+bespart
+besparte
+bespise
+bespiser
+bespisning
+bespisningen
+bespisningens
+bespist
+bespiste
+bespotte
+bespottelig
+bespottelse
+bespottelsen
+bespottelsene
+bespottelsens
+bespottelser
+bespottet
+besørga
+besørge
+besørger
+besørges
+besørget
+bessemerjern
+bessemerjernet
+bessemerjernets
+bessemermetode
+bessemermetoden
+bessemermetodens
+bessemerprosess
+bessemerprosessen
+bessemerprosessens
+best
+bestå
+bestakk
+bestand
+bestanddel
+bestanddelen
+bestanddelens
+bestanddeler
+bestanden
+bestandene
+bestandens
+bestander
+bestandig
+beste
+besteborgere
+besteborgerlige
+besteborgerskap
+bestefar
+bestefaren
+bestefarens
+bestefars
+besteforeldra
+besteforeldre
+besteforeldrene
+bestelag
+bestelaget
+bestelagets
+bestem
+bestemann
+bestemannen
+bestemannens
+bestemannspremie
+bestemannspremien
+bestemannspremiene
+bestemannspremiens
+bestemannspremier
+bestemenn
+bestemennene
+bestemennenes
+bestemenns
+bestemme
+bestemmelse
+bestemmelsen
+bestemmelsene
+bestemmelsens
+bestemmelser
+bestemmelsesrett
+bestemmelsessted
+bestemmelsessteder
+bestemmelsesstedet
+bestemmelsesstedets
+bestemmende
+bestemmer
+bestemmes
+bestemming
+bestemminga
+bestemmingen
+bestemmingens
+bestemor
+bestemora
+bestemoren
+bestemorens
+bestemors
+bestemt
+bestemte
+bestående
+bestenotering
+bestenoteringa
+bestenoteringen
+bestenoteringens
+bestet
+bestetid
+bestevenn
+bestevennen
+bestevennene
+bestevennens
+bestevenner
+bestialsk
+bestialske
+bestialskt
+bestige
+bestiger
+bestikk
+bestikke
+bestikkelse
+bestikkelsen
+bestikkelsene
+bestikkelsens
+bestikkelser
+bestikket
+bestill
+bestille
+bestiller
+bestilles
+bestilling
+bestillinga
+bestillingen
+bestillingene
+bestillingens
+bestillinger
+bestillingsverk
+bestillingsverka
+bestillingsverkene
+bestillingsverker
+bestillingsverket
+bestillingsverkets
+bestilt
+bestilte
+bestjal
+bestjele
+bestjeler
+bestjålet
+besto
+bestod
+bestorma
+bestorme
+bestormer
+bestormet
+består
+bestreba
+bestrebe
+bestrebelse
+bestrebelsen
+bestrebelsene
+bestrebelsens
+bestrebelser
+bestreber
+bestrebet
+bestrides
+bestråle
+bestråling
+bestrålinga
+bestrålingen
+bestrålingens
+bestrålt
+bestrålte
+bestselger
+bestselgere
+bestselgeren
+bestselgerens
+bestselgeres
+bestselgerne
+bestselgernes
+bestått
+bestøving
+bestøvinga
+bestøvingen
+bestøvingens
+bestøvning
+bestøvningen
+bestøvningens
+bestykka
+bestykke
+bestykker
+bestykket
+bestykning
+bestykningen
+bestykningene
+bestykningens
+bestykninger
+bestyr
+bestyre
+bestyrelse
+bestyrelsen
+bestyrelsens
+bestyrer
+bestyrere
+bestyreren
+bestyrerens
+bestyreres
+bestyrerinna
+bestyrerinne
+bestyrerinnen
+bestyrerinnene
+bestyrerinnens
+bestyrerinner
+bestyrerne
+bestyrernes
+bestyrt
+bestyrte
+bestyrtelse
+bestyrtelsen
+bestyrtelsens
+besvangre
+besvangret
+besvar
+besvare
+besvarer
+besvares
+besvart
+besvarte
+besverga
+besverge
+besverger
+besverget
+besvime
+besvimelse
+besvimelsen
+besvimelsens
+besvimt
+besvimte
+besvær
+besvære
+besværet
+besværlig
+besværlige
+besynderlig
+besynderlige
+besynderligst
+besynderligste
+bet
+beta
+betagende
+betakende
+betakka
+betakke
+betakker
+betakket
+betal
+betale
+betalende
+betaler
+betalere
+betaleren
+betalerens
+betaleres
+betalerne
+betalernes
+betales
+betaling
+betalinga
+betalingen
+betalingene
+betalinger
+betalingsbalanse
+betalingsbalansen
+betalingsbalansens
+betalingsform
+betalingsforma
+betalingsformen
+betalingsformene
+betalingsformens
+betalingsformer
+betalingskort
+betalingskorta
+betalingskortene
+betalingskortet
+betalingskortets
+betalingsmiddel
+betalingsmiddelet
+betalingsmiddelets
+betalingsmidla
+betalingsmidlene
+betalingsmidler
+betalingsmidlet
+betalingsmidlets
+betalingsordning
+betalingsordninga
+betalingsordningen
+betalingsordningene
+betalingsordningens
+betalingsordninger
+betalingssystem
+betalingssystema
+betalingssystemene
+betalingssystemer
+betalingssystemet
+betalingssystemets
+betalingsunderskudd
+betalingsunderskuddet
+betalingsunderskuddets
+betalt
+betalte
+betasuppa
+betasuppe
+betasuppen
+betasuppens
+betatt
+betegna
+betegne
+betegnelse
+betegnelsen
+betegnelsene
+betegnelsens
+betegnelser
+betegnende
+betegner
+betegnes
+betegnet
+beten
+betenk
+betenke
+betenkelig
+betenkelige
+betenkelighet
+betenkeligheten
+betenkelighetene
+betenkelighetens
+betenkeligheter
+betenkning
+betenkningen
+betenkningens
+betenkningstid
+betenkningstida
+betenkningstiden
+betenkningstidens
+betenksom
+betenksomme
+betenksomt
+betenkt
+betenkte
+betennelse
+betennelsen
+betennelsens
+betent
+betids
+betimelig
+betinga
+betinge
+betingede
+betingelse
+betingelsen
+betingelsene
+betingelsens
+betingelser
+betingelseslaus
+betingelseslause
+betingelseslaust
+betingelsesløs
+betingelsesløse
+betingelsesløst
+betinger
+betinget
+betjene
+betjener
+betjenes
+betjening
+betjeninga
+betjeningen
+betjeningens
+betjent
+betjente
+betjenten
+betjentene
+betjentens
+betjenter
+betla
+betle
+betler
+betlere
+betleren
+betlerens
+betleres
+betleri
+betleriet
+betleriets
+betlerne
+betlernes
+betlet
+betling
+betlinga
+betlingen
+betlingens
+betok
+betone
+betoner
+betones
+betonet
+betong
+betongbygg
+betongbygga
+betongbyggene
+betongbygget
+betongbyggets
+betongelement
+betongelementa
+betongelementene
+betongelementer
+betongelementet
+betongelementets
+betongen
+betongens
+betonghus
+betonghusa
+betonghusene
+betonghuset
+betonghusets
+betongkonstruksjon
+betongkonstruksjonen
+betongkonstruksjonene
+betongkonstruksjonens
+betongkonstruksjoner
+betongmast
+betongmasta
+betongmastene
+betongmaster
+betongstruktur
+betongstrukturen
+betongstrukturens
+betoning
+betoninga
+betoningen
+betoningens
+betont
+betonte
+betrakt
+betrakta
+betrakte
+betraktelig
+betrakter
+betraktes
+betraktet
+betraktning
+betraktningen
+betraktningene
+betraktningens
+betraktninger
+betrodd
+betrodde
+betroelse
+betroelsen
+betroelsene
+betroelsens
+betroelser
+betryggelse
+betryggelsen
+betryggelsens
+betryggende
+betvile
+betviler
+betviles
+bety
+betydd
+betydde
+betydelig
+betydelige
+betydeligere
+betydeligste
+betydning
+betydningen
+betydningene
+betydningens
+betydninger
+betydningsfull
+betydningsfulle
+betydningsfullt
+betyr
+beundra
+beundre
+beundrer
+beundrere
+beundreren
+beundrerens
+beundreres
+beundrerne
+beundrernes
+beundrerskare
+beundrerskaren
+beundrerskarens
+beundret
+beundring
+beundringa
+beundringen
+beundringens
+beundringsverdig
+beundringsverdige
+bevandret
+bevar
+bevare
+bevarelse
+bevarelsen
+bevarelsens
+bevaremegvel
+bevarer
+bevares
+bevaring
+bevaringa
+bevaringen
+bevaringens
+bevaringsverdi
+bevaringsverdien
+bevaringsverdiens
+bevart
+bevarte
+beve
+bevegd
+bevege
+bevegede
+bevegelig
+bevegelige
+bevegelighet
+bevegeligheten
+bevegelighetens
+bevegelse
+bevegelsen
+bevegelsene
+bevegelsens
+bevegelser
+bevegelses
+bevegelsesfrihet
+bevegelsesfriheten
+bevegelsesfrihetens
+bevegelseshemma
+bevegelseshemmede
+bevegende
+beveger
+beveges
+beveget
+beveggrunn
+beveggrunnen
+beveggrunnene
+beveggrunnens
+beveggrunner
+beven
+bevende
+bevendt
+bevenen
+bevenens
+bever
+beveren
+beverens
+beverta
+beverte
+beverter
+bevertet
+bevertning
+bevertningen
+bevertningens
+bevet
+bevilga
+bevilge
+bevilgede
+bevilgende
+bevilger
+bevilges
+bevilget
+bevilgning
+bevilgningen
+bevilgningene
+bevilgningens
+bevilgninger
+bevilling
+bevillingen
+bevillingene
+bevillingens
+bevillinger
+bevillingshaver
+bevillingshavere
+bevillingshaveren
+bevillingshaverens
+bevillingshaveres
+bevillingshaverne
+bevillingshavernes
+bevillingsutsteder
+bevillingsutstedere
+bevillingsutstederen
+bevillingsutstederens
+bevillingsutstederes
+bevillingsutstederne
+bevillingsutstedernes
+bevingede
+bevinget
+bevirka
+bevirke
+bevirker
+bevirket
+bevis
+bevisbyrde
+bevisbyrden
+bevisbyrdens
+bevise
+beviselig
+bevisene
+beviser
+bevises
+beviset
+bevisets
+bevisførsel
+bevisførselen
+bevisførselens
+bevislig
+bevismateriale
+bevismaterialet
+bevisning
+bevisninger
+bevisopptak
+bevisopptaka
+bevisopptakene
+bevisopptaket
+bevisopptakets
+bevisst
+bevisste
+bevisstgjøring
+bevisstgjøringa
+bevisstgjøringen
+bevisstgjøringens
+bevissthet
+bevisstheten
+bevissthetens
+bevissthetstap
+bevissthetstapet
+bevissthetstapets
+bevisstlaus
+bevisstlause
+bevisstløs
+bevisstløse
+bevist
+beviste
+bevitna
+bevitne
+bevitnelse
+bevitnelsen
+bevitnelsens
+bevitnet
+bevokte
+bevoktede
+bevoktet
+bevoktning
+bevoktningen
+bevoktningene
+bevoktningens
+bevoktninger
+bevæpna
+bevæpne
+bevæpnede
+bevæpner
+bevæpnet
+bevra
+bevre
+bevrene
+bevrer
+bevret
+bøffel
+bøffelen
+bøffelens
+bøflene
+bøfler
+bh
+bøhmisk
+bhutaner
+bhutanere
+bhutaneren
+bhutanerens
+bhutaneres
+bhutanerne
+bhutanernes
+bhutansk
+bi
+bia
+biarbeid
+biarbeidet
+biarbeidets
+bibeholde
+bibeholdes
+bibel
+bibelen
+bibelens
+bibelske
+bibemerkning
+bibemerkningen
+bibemerkningens
+bibetydning
+bibetydningen
+bibetydningens
+biblene
+bibler
+bibliograf
+bibliografen
+bibliografene
+bibliografens
+bibliografer
+bibliografi
+bibliografien
+bibliografiene
+bibliografiens
+bibliografier
+bibliotek
+biblioteka
+bibliotekar
+bibliotekaren
+bibliotekarene
+bibliotekarens
+bibliotekarer
+bibliotekene
+biblioteker
+biblioteket
+bibliotekets
+bibringe
+bibringen
+bibringene
+bibringens
+bibringer
+bidé
+bidde
+bideene
+bideer
+bideet
+bideets
+bidevind
+bidevinden
+bidevindens
+bidig
+bidige
+bidra
+bidradd
+bidrag
+bidraga
+bidragene
+bidraget
+bidragets
+bidragsplikt
+bidragsplikta
+bidragsplikten
+bidragspliktens
+bidrar
+bidratt
+bidro
+bidrog
+bidronning
+bidronninga
+bidronningen
+bidronningens
+bie
+biedermeier
+biedermeieren
+biedermeierens
+biene
+biennal
+biennalen
+biennalene
+biennalens
+biennaler
+bier
+biet
+bifag
+bifaga
+bifagene
+bifaget
+bifagets
+bifall
+bifalle
+bifallende
+bifaller
+bifallet
+bifalt
+biff
+biffen
+biffene
+biffens
+biffer
+biffkjøtt
+biffkjøttet
+biffkjøttets
+biffsteik
+biffsteika
+biffsteiken
+biffsteikens
+bifokal
+bigami
+bigamiet
+bigamiets
+bigott
+bihensikt
+bihensyn
+bihensynene
+bihensynet
+bihensynets
+bihole
+biholebetennelse
+biholebetennelsen
+biholebetennelsene
+biholebetennelsens
+biholebetennelser
+biholen
+biholens
+bihula
+bihule
+bihulebetennelse
+bihulebetennelsen
+bihulebetennelsene
+bihulebetennelsens
+bihulebetennelser
+bihulen
+bihulene
+bihulens
+bihuler
+biinntekt
+biinntekta
+biinntekten
+biinntektene
+biinntektens
+biinntekter
+biinteresse
+biinteressen
+biinteressene
+biinteressens
+biinteresser
+bijouterivare
+bijouterivaren
+bijouterivarene
+bijouterivarens
+bijouterivarer
+bikini
+bikinien
+bikiniene
+bikiniens
+bikinier
+bikk
+bikka
+bikke
+bikken
+bikkens
+bikket
+bikkja
+bikkje
+bikkjeleven
+bikkjen
+bikkjene
+bikkjens
+bikkjer
+biklang
+biklangen
+biklangens
+bikonkav
+bikonveks
+bikube
+bikuben
+bikubens
+bil
+bilag
+bilagene
+bilaget
+bilagets
+bilagt
+bilassuranse
+bilassuransen
+bilassuransene
+bilassuransens
+bilassuranser
+bilateral
+bilaterale
+bilbelte
+bilbeltene
+bilbelter
+bilbeltet
+bilbeltets
+bilbensin
+bilbransje
+bilbransjen
+bilbransjens
+bild
+bilde
+bildebok
+bildeboka
+bildeboken
+bildebokens
+bildehogger
+bildehoggere
+bildehoggeren
+bildehoggerens
+bildehoggeres
+bildehoggerne
+bildehoggernes
+bildekk
+bildekka
+bildekkene
+bildekket
+bildekkets
+bildekunst
+bildel
+bildelen
+bildelene
+bildelens
+bildeler
+bildende
+bildene
+bilder
+bildet
+bildeteppa
+bildeteppe
+bildeteppene
+bildetepper
+bildeteppet
+bildeteppets
+bildevev
+bildeveven
+bildevevene
+bildevevens
+bildevever
+bile
+bilegge
+bilegger
+bileier
+bileiere
+bileieren
+bileierens
+bileieres
+bileierne
+bileiernes
+bilen
+bilene
+bilenes
+bilens
+biler
+bilfabrikk
+bilfabrikken
+bilfabrikkene
+bilfabrikkens
+bilfabrikker
+bilfører
+bilførere
+bilføreren
+bilførerens
+bilføreres
+bilførerne
+bilførernes
+bilgodtgjørelse
+bilgodtgjørelsen
+bilgodtgjørelsens
+bilindustri
+bilindustrien
+bilindustriens
+bilingval
+bilingvisme
+bilingvismen
+bilingvismens
+bilist
+bilisten
+bilistene
+bilistens
+bilister
+biljard
+biljarden
+biljardene
+biljardens
+biljarder
+bilkø
+bilkøen
+bilkøene
+bilkøens
+bilkøer
+bilkjøp
+bilkjøpa
+bilkjøpene
+bilkjøper
+bilkjøpet
+bilkjøpets
+bilkjøring
+bilkjøringa
+bilkjøringen
+bilkjøringens
+bilkollisjon
+bilkollisjonen
+bilkollisjonene
+bilkollisjonens
+bilkollisjoner
+bille
+billedbok
+billedboka
+billedboken
+billedbokens
+billedhogger
+billedhoggere
+billedhoggeren
+billedhoggerens
+billedhoggeres
+billedhoggerne
+billedhoggernes
+billedkunst
+billedkunsten
+billedkunstens
+billedlig
+billedteppa
+billedteppe
+billedteppene
+billedtepper
+billedteppet
+billedvev
+billedveven
+billedvevene
+billedvevens
+billedvever
+billen
+billene
+billens
+biller
+billett
+billetten
+billettene
+billettens
+billetter
+billettkjøp
+billettpris
+billettprisen
+billettprisene
+billettprisens
+billettpriser
+billettør
+billettøren
+billettørene
+billettørens
+billettører
+billettsalg
+billettsalget
+billettsalgets
+billig
+billiga
+billige
+billigere
+billiget
+billigst
+billigste
+billion
+billionen
+billionene
+billionens
+billioner
+billøp
+billøpa
+billøpene
+billøpet
+billøpets
+bilmarked
+bilmarkeda
+bilmarkedene
+bilmarkeder
+bilmarkedet
+bilmarkedets
+bilmerke
+bilmerkene
+bilmerker
+bilmerket
+bilmerkets
+bilmotor
+bilmotoren
+bilmotorene
+bilmotorens
+bilmotorer
+bilpark
+bilparken
+bilparkene
+bilparkens
+bilparker
+bilproduksjon
+bilproduksjonen
+bilproduksjonene
+bilproduksjonens
+bilproduksjoner
+bilprodusent
+bilprodusenten
+bilprodusentene
+bilprodusentens
+bilprodusenter
+bilsakkyndig
+bilsakkyndige
+bilsentral
+bilsentralen
+bilsentralene
+bilsentralens
+bilsentraler
+bilsport
+bilsporten
+bilsportens
+bilt
+bilte
+biltetthet
+biltettheten
+biltetthetens
+biltjuv
+biltjuven
+biltjuvene
+biltjuvens
+biltjuver
+biltjuveri
+biltjuveria
+biltjuveriene
+biltjuverier
+biltjuveriet
+biltjuveriets
+biltur
+bilturen
+bilturene
+bilturens
+bilturer
+biltyv
+biltyven
+biltyvene
+biltyvens
+biltyver
+biltyveri
+biltyveria
+biltyveriene
+biltyverier
+biltyveriet
+biltyveriets
+bilulykka
+bilulykke
+bilulykken
+bilulykkene
+bilulykkens
+bilulykker
+bilvei
+bilveien
+bilveiene
+bilveiens
+bilveier
+bilyd
+bilyden
+bilydens
+bimetall
+bimetallet
+bimetallets
+bimetallisk
+bimotiv
+bimotivet
+bimotivets
+bind
+binde
+bindeledd
+bindeledda
+bindeleddene
+bindeleddet
+bindeleddets
+bindende
+bindeord
+bindeorda
+bindeordene
+bindeordet
+bindeordets
+binder
+binders
+bindersen
+bindersene
+bindersens
+binderser
+bindestrek
+bindestreken
+bindestrekene
+bindestrekens
+bindestreker
+bindet
+binding
+bindinga
+bindingen
+bindingene
+bindingens
+bindinger
+bindingsverk
+bindingsverket
+bindingsverkets
+bindsel
+bindselet
+bindselets
+bindsla
+bindslene
+bindsler
+bindslet
+bindslets
+bing
+bingen
+bingene
+bingens
+binger
+bingo
+bingoen
+bingoene
+bingoens
+bingoer
+binna
+binne
+binnene
+binner
+binnsåle
+binnsålen
+binnsålens
+binær
+binære
+binæring
+binæringa
+binæringen
+binæringene
+binæringens
+binæringer
+binærkode
+binærkoden
+binærkodene
+binærkodens
+binærkoder
+binært
+binærverdi
+binærverdien
+binærverdiene
+binærverdiens
+binærverdier
+binyra
+binyre
+binyren
+binyrene
+binyrens
+binyrer
+biocid
+biocida
+biocidene
+biocider
+biocidet
+biocidets
+biodynamikk
+biofysikk
+biograf
+biografen
+biografene
+biografens
+biografer
+biografi
+biografien
+biografiene
+biografiens
+biografier
+biografisk
+biografiske
+biokjemi
+biokjemien
+biokjemiens
+biokjemisk
+biolog
+biologen
+biologene
+biologens
+biologer
+biologi
+biologien
+biologiens
+biologisk
+biologiske
+biprodukt
+biproduktene
+biprodukter
+biproduktet
+biproduktets
+birgittiner
+birgittinere
+birgittineren
+birgittinerens
+birgittineres
+birgittinerne
+birgittinernes
+birkebeiner
+birkebeinere
+birkebeineren
+birkebeinerens
+birkebeineres
+birkebeinerne
+birkebeinernes
+birolla
+birolle
+birollen
+birollens
+bisak
+bisaka
+bisaken
+bisakens
+bisam
+bisamkåpa
+bisamkåpe
+bisamkåpen
+bisamkåpene
+bisamkåpens
+bisamkåper
+bisarr
+bisarre
+bisart
+bisatt
+biseksualitet
+biseksualiteten
+biseksualitetens
+biseksuell
+bisette
+bisettelse
+bisettelsen
+bisettelsens
+bisetter
+bisk
+bisken
+biskens
+biskop
+biskopen
+biskopene
+biskopens
+biskoper
+biskoppelig
+biskt
+biskuit
+biskuiten
+biskuitene
+biskuitens
+biskuiter
+bisla
+bislag
+bislaga
+bislagene
+bislaget
+bislagets
+bisle
+bislene
+bisler
+bismer
+bismere
+bismeren
+bismerens
+bismeres
+bismerne
+bismernes
+bisonokse
+bisonoksen
+bisonoksens
+bisp
+bispedømma
+bispedømme
+bispedømmene
+bispedømmer
+bispedømmeråd
+bispedømmeråda
+bispedømmerådene
+bispedømmerådet
+bispedømmerådets
+bispedømmet
+bispedømmets
+bispen
+bispene
+bispens
+bisper
+bispesete
+bispesetet
+bistå
+bistand
+bistanden
+bistandens
+bister
+bistert
+bistre
+bit
+åbit
+bite
+biten
+åbiten
+bitende
+bitene
+bitens
+åbitens
+biter
+bitre
+bitrere
+bitrest
+bitreste
+bitt
+bitte
+bitter
+bitterhet
+bitterheten
+bitterhetens
+bittert
+bittesmå
+bittet
+bivåne
+bivånet
+bivra
+bivre
+bivret
+bivuakk
+bivuakken
+bivuakkene
+bivuakkens
+bivuakker
+bjart
+bjeff
+bjeffa
+bjeffe
+bjeffet
+bjelke
+bjelkelag
+bjelkelagene
+bjelkelagenes
+bjelken
+bjelkene
+bjelkens
+bjelker
+bjella
+bjelle
+bjellen
+bjellene
+bjellens
+bjeller
+bjerk
+bjerka
+bjerken
+bjerkene
+bjerkens
+bjerker
+bjerkeskog
+bjerkeskogen
+bjerkeskogens
+bjølla
+bjølle
+bjøllen
+bjøllene
+bjøllens
+bjøller
+bjor
+bjoren
+bjorene
+bjorens
+bjorer
+bjørk
+bjørka
+bjørkeallé
+bjørkealleen
+bjørkealleene
+bjørkealleens
+bjørkealleer
+bjørkelauv
+bjørkelauvet
+bjørkelauvets
+bjørkeløv
+bjørkeløvet
+bjørkeløvets
+bjørken
+bjørkene
+bjørkens
+bjørker
+bjørkeskog
+bjørkeskogen
+bjørkeskogene
+bjørkeskogens
+bjørkeskoger
+bjørn
+bjørnebær
+bjørnebæra
+bjørnebærene
+bjørnebæret
+bjørnebærets
+bjørnen
+bjørnene
+bjørnens
+bjørner
+båk
+bøk
+båken
+bøken
+bøkene
+bøkenes
+båkens
+bøkens
+bøker
+bøketre
+bøkker
+bøkkere
+bøkkeren
+bøkkerens
+bøkkeres
+bøkkerne
+bøkkernes
+bøkling
+bøklingen
+bøklingene
+bøklingens
+bøklinger
+blå
+blø
+bål
+bla
+båla
+blad
+blada
+bladan
+bladene
+blader
+bladet
+bladets
+bladgrønt
+blaff
+blaffa
+blaffene
+blaffer
+blaffet
+blaffets
+blafra
+blafre
+blafret
+blakk
+blakken
+blakkens
+blakra
+blakre
+blakret
+blakt
+blåaktig
+blamasje
+blamasjen
+blamasjens
+blamere
+blamert
+blamerte
+bland
+blanda
+blandbare
+blandbart
+blande
+blandede
+blander
+blandes
+blandet
+blanding
+blandinga
+blandingen
+blandingene
+blank
+blanke
+blankett
+blanketten
+blankettene
+blankettens
+blanketter
+blanko
+blankt
+blant
+blar
+blasert
+blaserthet
+blasertheten
+blaserthetens
+blasfemi
+blasfemien
+blasfemiene
+blasfemiens
+blasfemier
+blasfemisk
+blass
+blasse
+blast
+blaut
+blaute
+blautmyr
+blautmyra
+blautmyrene
+blautmyrer
+blautt
+blazer
+blazere
+blazeren
+blazerens
+blazeres
+blazerne
+blazernes
+blåbær
+blåbæra
+blåbærene
+blåbæret
+blåbærets
+blødd
+blødde
+bløde
+blødende
+blødme
+blødmen
+blødmene
+blødmens
+blødmer
+blødning
+blødningen
+blødningene
+blødningens
+blødninger
+ble
+bøle
+blei
+bleia
+bleien
+bleiene
+bleiens
+bleier
+bleiet
+bleig
+bleigen
+bleigens
+bleik
+bleika
+bleike
+bleikna
+bleikne
+bleikner
+bleiknet
+bleikt
+bleikte
+bleiv
+blek
+bleke
+blekk
+blekket
+blekkets
+blekkhus
+blekkhusa
+blekkhusene
+blekkhuset
+blekkhusets
+blekkslager
+blekkslagere
+blekkslageren
+blekkslagerens
+blekkslageres
+blekkslagerne
+blekkslagernes
+blekksprut
+blekkspruten
+blekksprutene
+blekksprutens
+blekkspruter
+blekna
+blekne
+blekner
+bleknet
+blekt
+blemma
+blemme
+blemmen
+blemmene
+blemmens
+blemmer
+blemmet
+blend
+blenda
+blende
+blenden
+blendende
+blendet
+blending
+blendinga
+blendingen
+blendingene
+blendingens
+blendinger
+blendverk
+blendverket
+blendverkets
+bålene
+blenke
+blenkt
+blenkte
+bles
+blese
+bleset
+blest
+bleste
+blesten
+bålet
+bølet
+bålets
+bålferd
+bålferda
+bålferden
+bålferdens
+bløff
+bløffa
+bløffe
+bløffen
+bløffens
+bløffet
+bølga
+bølge
+bølgedal
+bølgedalene
+bølgen
+bølgende
+bølgens
+bølger
+bølget
+bølgja
+bølgje
+bølgjeblekk
+bølgjeblekket
+bølgjeblekkets
+bølgjen
+bølgjene
+bølgjens
+bølgjer
+bølgjet
+blågul
+blågule
+bli
+blid
+blide
+blidt
+blikk
+blikkboks
+blikkboksen
+blikkboksene
+blikkboksens
+blikkbokser
+blikkenslager
+blikkenslagere
+blikkenslageren
+blikkenslagerens
+blikkenslageres
+blikkenslagerne
+blikkenslagernes
+blikket
+blikkfang
+blikkfanger
+blikkfanget
+blikkfangets
+blikkstille
+blind
+blinda
+blinde
+blindebukk
+blindebukken
+blindebukkens
+blindeforbund
+blindeforbundene
+blindeforbundenes
+blindeskrift
+blindeskrifta
+blindeskriften
+blindeskriftens
+blindeskriftet
+blindeskriftets
+blindgata
+blindgate
+blindgaten
+blindgatene
+blindgatens
+blindgater
+blindhet
+blindheten
+blindhetens
+blindt
+blindtarm
+blindtarmen
+blindtarmene
+blindtarmens
+blindtarmer
+blindtarmsbetennelse
+blindtarmsbetennelsen
+blindtarmsbetennelsens
+bøling
+bølingen
+bølingene
+bølingens
+bølinger
+blings
+blingsa
+blingse
+blingsen
+blingsens
+blingset
+blink
+blinka
+blinke
+blinker
+blinket
+blir
+blistra
+blistre
+blistrer
+blistret
+blistrets
+blitt
+blive
+blivende
+blåklokka
+blåklokke
+blåklokken
+blåklokkene
+blåklokkens
+blåklokker
+blåkopi
+blåkopiene
+bølle
+bøllen
+bøllens
+bøllet
+bøllete
+blåne
+blånen
+blånens
+blånet
+bloc
+blod
+blodappelsin
+blodappelsinen
+blodappelsinene
+blodappelsinens
+blodappelsiner
+blodbad
+blodbadet
+blodbadets
+blodet
+blodete
+blodets
+blodfulle
+blodig
+blodige
+blodpropp
+blodproppen
+blodproppens
+blodprøva
+blodprøve
+blodprøven
+blodprøvene
+blodprøvens
+blodprøver
+blodåra
+blodåre
+blodåren
+blodårene
+blodårens
+blodårer
+blodsdråpe
+blodsdråpen
+blodsdråpens
+blodsenkning
+blodsenkningen
+blodsenkningens
+blodtrykk
+blodtrykket
+blodtrykkets
+blogge
+blogger
+blokade
+blokaden
+blokadens
+blokk
+blokka
+blokke
+blokkebær
+blokkebæret
+blokkebærets
+blokken
+blokkene
+blokker
+blokkere
+blokkert
+blokkerte
+blokket
+blokkfløyte
+blokkfløyten
+blokkfløytens
+blom
+blomkål
+blomkålen
+blomkålens
+blommen
+blommene
+blommens
+blommer
+blomst
+blomsten
+blomstene
+blomstens
+blomster
+blomsteren
+blomsterens
+blomsterhjerte
+blomsterhjertet
+blomsterhjertets
+blomsterstand
+blomsterstanden
+blomsterstandens
+blomstra
+blomstre
+blomstrende
+blomstrene
+blomstrer
+blomstret
+blomstring
+blomstringstid
+blomstringstida
+blomstringstiden
+blomstringstidens
+blond
+blonden
+blondens
+blondina
+blondine
+blondinen
+blondinene
+blondinens
+blondiner
+blondt
+blot
+blota
+blote
+blotet
+blott
+blotta
+blotte
+blotter
+blottet
+blår
+blør
+blæra
+blære
+blæret
+blærete
+blås
+blåse
+blåser
+blåskjell
+blåskjella
+blåskjellene
+blåskjellet
+blåskjellets
+blåst
+blåste
+blåsten
+blåstens
+blåstrømpe
+blåstrømpen
+blåstrømpens
+blåsymra
+blåsymre
+blåsymren
+blåsymrene
+blåsymrens
+blåsymrer
+blåsyra
+blåsyre
+blåsyren
+blåsyrens
+bløt
+bløtaktig
+bløtdyr
+bløtdyra
+bløtdyrene
+bløtdyret
+bløtdyrets
+bløte
+bløten
+bløtkaka
+bløtkake
+bløtkaken
+bløtkakene
+bløtkakens
+bløtkaker
+blått
+bløtt
+bløtte
+blues
+bluesen
+bluesens
+bluferdig
+blund
+blunda
+blunde
+blunden
+blundens
+blunder
+blundere
+blunderen
+blunderens
+blunderes
+blunderne
+blundernes
+blundet
+blunk
+blunka
+blunke
+blunket
+blusa
+bluse
+blusen
+blusene
+blusens
+bluser
+bluss
+blussa
+blusse
+blussel
+blusselen
+blusselens
+blusset
+blåveis
+blåveisen
+blåveisene
+blåveisens
+blåveiser
+bly
+blyant
+blyanten
+blyantene
+blyantens
+blyanter
+blåøyd
+blyet
+blyets
+blyg
+blygd
+blygda
+blygdes
+blyges
+blyghet
+blygheten
+blyghetens
+blygsel
+blygselen
+blygselens
+blygsla
+blygt
+bløyt
+bløyte
+bløytt
+bløytte
+bånd
+bånda
+båndbredda
+båndbredde
+båndbredden
+båndbreddene
+båndbreddens
+båndbredder
+båndene
+bøndene
+bønder
+båndet
+båndets
+bønn
+bønna
+bønne
+bønnebok
+bønneboka
+bønneboken
+bønnebokens
+bønnen
+bønner
+bønnfalle
+bønnfaller
+bønnlig
+bånsull
+bånsullen
+bånsullene
+bånsullens
+bånsuller
+bo
+boa
+boaen
+boaene
+boaens
+boaer
+boarding
+boardingen
+boardingens
+bobla
+boble
+boblejakka
+boblejakke
+boblejakken
+boblejakkene
+boblejakkens
+boblejakker
+boblet
+bobsleigh
+bobsleighen
+bobsleighene
+bobsleighens
+bobsleigher
+boccia
+bocciaen
+bocciaens
+bod
+bodd
+bodde
+boden
+bodene
+bodens
+boder
+body
+bodybuilding
+bodybuildingen
+bodybuildingens
+bodyen
+bodyens
+boer
+boet
+bog
+boge
+bogen
+bogene
+bogens
+boger
+bogne
+bohem
+bohemen
+bohemene
+bohemens
+bohemer
+boikott
+boikotte
+boikotten
+boikottens
+boikotter
+boikottet
+bok
+boka
+boken
+bokens
+bokfink
+bokfinken
+bokfinkene
+bokfinkens
+bokfinker
+bokføre
+bokføring
+bokføringa
+bokføringen
+bokføringens
+bokførsel
+bokførselen
+bokførselens
+bokført
+bokførte
+bokhandel
+bokhandelen
+bokhandelens
+bokhandler
+bokhandlere
+bokhandleren
+bokhandlerens
+bokhandleres
+bokhandlerne
+bokhandlernes
+bokheim
+bokheimen
+bokheimene
+bokheimens
+bokheimer
+bokholder
+bokholdere
+bokholderen
+bokholderens
+bokholderes
+bokholderi
+bokholderia
+bokholderiene
+bokholderier
+bokholderiet
+bokholderiets
+bokholderne
+bokholdernes
+bokhvete
+bokhveten
+bokhvetens
+bokhylla
+bokhylle
+bokhyllen
+bokhyllene
+bokhyllens
+bokhyller
+bokkafé
+bokkafeen
+bokkafeene
+bokkafeens
+bokkafeer
+bokkøl
+bokkølet
+bokkølets
+boklig
+bokmelding
+bokmeldinga
+bokmeldingen
+bokmeldingene
+bokmeldingens
+bokmeldinger
+bokmål
+bokmålet
+bokmålets
+bokmålsuttale
+bokmålsuttalen
+bokmålsuttalens
+boks
+boksa
+bokse
+boksen
+boksens
+bokser
+boksere
+bokseren
+bokserens
+bokseres
+bokserne
+boksernes
+bokset
+boksing
+boksinga
+boksingen
+boksingens
+bokskalv
+bokstav
+bokstavelig
+bokstaven
+bokstavene
+bokstavens
+bokstaver
+bokstavere
+bokstavkombinasjon
+bokstavkombinasjonen
+bokstavkombinasjonene
+bokstavkombinasjonens
+bokstavkombinasjoner
+bokstavmønster
+bokstavmønsteret
+bokstavmønsterets
+bokstavmønstra
+bokstavmønstre
+bokstavmønstrene
+bokstavmønstret
+bokstavmønstrets
+bokstavstreng
+bokstavstrengen
+bokstavstrengene
+bokstavstrengens
+bokstavstrenger
+bokstavtype
+bokstavtypen
+bokstavtypene
+bokstavtypens
+bokstavtyper
+boktrykk
+boktrykken
+boktrykkens
+boktrykker
+bol
+bold
+boldt
+bolen
+bolet
+bolig
+boligblokk
+boligblokka
+boligblokken
+boligblokkene
+boligblokkens
+boligblokker
+boligbygg
+boligbygga
+boligbyggelag
+boligbyggelaga
+boligbyggelagene
+boligbyggelaget
+boligbyggelagets
+boligbyggene
+boligbygger
+boligbygget
+boligbyggets
+boligbygging
+boligbygginga
+boligbyggingen
+boligbyggingens
+boligen
+boligene
+boligens
+boliger
+boligfelt
+boligfelta
+boligfeltene
+boligfelter
+boligfeltet
+boligfeltets
+boligformål
+boligformåla
+boligformålene
+boligformålet
+boligformålets
+bolighus
+bolighusa
+bolighusene
+bolighuset
+bolighusets
+boligmangel
+boligmangelen
+boligmangelens
+boligmiljø
+boligmiljøa
+boligmiljøene
+boligmiljøer
+boligmiljøet
+boligmiljøets
+boligområde
+boligområdet
+boligpolitikk
+boligpolitikken
+boligpolitikkens
+boligproblem
+boligproblema
+boligproblemene
+boligproblemer
+boligproblemet
+boligproblemets
+boligprogram
+boligprogrammene
+boligprogrammer
+boligprogrammet
+boligprogrammets
+boligreisning
+boligreisningen
+boligreisningens
+boligsøkende
+boligstandard
+boligstandarden
+boligstandardens
+boligstrøk
+boligstrøka
+boligstrøkene
+boligstrøket
+boligstrøkets
+bolivianer
+bolivianere
+bolivianeren
+bolivianerens
+bolivianeres
+bolivianerne
+bolivianernes
+boliviansk
+bolk
+bolka
+bolken
+bolkene
+bolkens
+bolker
+bolket
+bolle
+bollen
+bollene
+bollens
+boller
+bolna
+bolne
+bolnet
+bolsjevik
+bolsjeviken
+bolsjevikene
+bolsjevikens
+bolsjeviker
+bolster
+bolsteret
+bolsterets
+bolstra
+bolstre
+bolstrene
+bolstret
+bolstrets
+bolt
+bolten
+boltene
+boltens
+bolter
+boltet
+boltra
+boltre
+boltrer
+boltret
+bolverk
+bolverka
+bolverkene
+bolverker
+bolverket
+bolverkets
+bom
+bomba
+bombardement
+bombardementa
+bombardementene
+bombardementer
+bombardementet
+bombardementets
+bombardere
+bombardert
+bombarderte
+bombastisk
+bombe
+bomben
+bombens
+bomber
+bombet
+bombing
+bombinga
+bombingen
+bombingens
+bomme
+bommen
+bommens
+bommer
+bommert
+bommerten
+bommertene
+bommertens
+bommerter
+bommesi
+bommesien
+bommesiene
+bommesiens
+bommesier
+bommet
+bompenge
+bompengene
+bompenger
+boms
+bomskudd
+bomskudda
+bomskuddene
+bomskuddet
+bomskuddets
+bomull
+bomulla
+bomullen
+bomullens
+bomuller
+bomullsgarn
+bomullsgarnet
+bomullsgarnets
+bon
+bonbon
+bonbonen
+bonbonene
+bonbonens
+bonboner
+bond
+bonde
+bondegård
+bondegården
+bondegårdene
+bondegårdens
+bondegårder
+bondekultur
+bondekulturen
+bondekulturens
+bondelag
+bondelaga
+bondelagene
+bondelaget
+bondelagets
+bonden
+bondens
+bondsk
+bone
+bonet
+bong
+bonga
+bongen
+bongene
+bongens
+bonger
+bonget
+bonitet
+boniteten
+bonitetene
+bonitetens
+boniteter
+bonjour
+bonjouren
+bonjourene
+bonjourens
+bonjourer
+bonn
+bonus
+bonusen
+bonusene
+bonusens
+bonuser
+bonusregler
+boom
+boomen
+boomene
+boomens
+boomer
+bopel
+bopelen
+bopelens
+boplass
+boplassen
+boplassene
+boplassens
+boplasser
+bor
+åbor
+bora
+boraks
+boraksen
+boraksens
+bord
+borda
+bordduk
+bordduken
+borddukene
+borddukens
+bordduker
+borde
+bordell
+bordella
+bordellen
+bordellene
+bordellens
+bordeller
+bordellet
+bordellets
+borden
+bordene
+bordet
+bordkledning
+bordkledningen
+bordkledningens
+bords
+bordtak
+bordtaket
+bordtakets
+bore
+boremaskin
+boremaskina
+boremaskinen
+boremaskinene
+boremaskinens
+boremaskiner
+boren
+åboren
+åborene
+borens
+åborens
+boreplattform
+boreplattforma
+boreplattformen
+boreplattformene
+boreplattformens
+boreplattformer
+borer
+åborer
+borerigg
+boreriggen
+boreriggene
+boreriggens
+borerigger
+boret
+borettslag
+borettslaga
+borettslagene
+borettslaget
+borettslagets
+borg
+borga
+borge
+borgen
+borgens
+borger
+borgere
+borgeren
+borgerens
+borgerklasse
+borgerklassen
+borgerklassene
+borgerklassens
+borgerklasser
+borgerkrig
+borgerkrigen
+borgerkrigene
+borgerkrigens
+borgerkriger
+borgerlig
+borgerlige
+borgermester
+borgermesteren
+borgermesterens
+borgermestrene
+borgerne
+borgerskapets
+borget
+boring
+boringa
+boringen
+boringene
+boringens
+boringer
+bork
+borken
+borkens
+borket
+borkete
+bornert
+bort
+bortafor
+borte
+bortenfor
+borterst
+bortetter
+bortfall
+bortfalle
+bortfaller
+bortfalt
+bortforklare
+bortgang
+bortgangen
+bortgangens
+bortgjemt
+bortgjemte
+borti
+bortimot
+bortkastet
+bortkommet
+bortkomne
+bortover
+bortre
+bortsett
+bortskjemt
+borvann
+borvannet
+borvannets
+borvinda
+borvinde
+bosatt
+bosatte
+bosetning
+bosetninga
+bosetningen
+bosetningene
+bosetningens
+bosetninger
+bosette
+bosetter
+bosetting
+bosettinga
+bosettingen
+bosettingens
+boso
+bosoa
+bosoene
+bosoer
+boss
+bossekop
+bossen
+bossene
+bossens
+bosser
+bosset
+bossets
+bosted
+bostedene
+bosteder
+bostedet
+bostedets
+bostedskommune
+bostedskommunen
+bostedskommunens
+bot
+bota
+botaniker
+botanikere
+botanikeren
+botanikerens
+botanikeres
+botanikerne
+botanikernes
+botanikk
+botanikken
+botanikkens
+botanisere
+botanisert
+botaniserte
+botanisk
+botaniske
+bote
+botemiddel
+botemiddelet
+botemiddelets
+botemidla
+botemidlene
+botemidler
+botemidlet
+botemidlets
+boten
+boteråd
+boteråda
+boterådene
+boterådet
+boterådets
+botevona
+botferdig
+botlegge
+botlegger
+botn
+botne
+botnen
+botnens
+botnet
+botnfall
+botnfallet
+botnfallets
+botns
+botsfengsel
+botsfengselet
+botsfengselets
+botsfengsla
+botsfengslene
+botsfengsler
+botsfengslet
+botsfengslets
+botswaner
+botswanere
+botswaneren
+botswanerens
+botswaneres
+botswanerne
+botswanernes
+botswansk
+botulisme
+botulismen
+botulismens
+botvon
+botvona
+bourbon
+bourbonen
+bourbonene
+bourbonens
+bourboner
+bourgeois
+bourgeoisen
+bourgeoisens
+bowl
+bowle
+bowling
+bowlinga
+bowlingen
+bowlingens
+brå
+bår
+bær
+bør
+bra
+båra
+børa
+bragd
+bragda
+bragden
+bragdene
+bragdens
+bragder
+brageløfte
+brageløftet
+braille
+braillen
+braillens
+brailleskrift
+brak
+brake
+braket
+brakk
+brakka
+brakke
+brakken
+brakkene
+brakkens
+brakker
+brakkvann
+brakkvannet
+brakkvannets
+brakt
+brakte
+bram
+bramma
+bramme
+brammet
+brandy
+brandyen
+brandyene
+brandyens
+brandyer
+brann
+branne
+brannen
+brannens
+branner
+brannet
+brannete
+brannfare
+brannfaren
+brannfarens
+brannfarlige
+brannforsikring
+brannforsikringa
+brannforsikringen
+brannforsikringens
+brannårsak
+brannårsaken
+brannårsakene
+brannårsakens
+brannårsaker
+brannsikring
+brannsikringa
+brannsikringen
+brannsikringens
+brannsjef
+brannsjefen
+brannsjefene
+brannsjefens
+brannsjefer
+branntekniske
+brannulykka
+brannulykke
+brannulykken
+brannulykkene
+brannulykkens
+brannulykker
+brannvern
+brannvernet
+brannvernets
+brannvesen
+brannvesenet
+brannvesenets
+bransje
+bransjen
+bransjene
+bransjens
+bransjeorientert
+bransjeorienterte
+bransjer
+brant
+brase
+braser
+brasilianer
+brasilianere
+brasilianeren
+brasilianerens
+brasilianeres
+brasilianerne
+brasilianernes
+brasiliansk
+brasilianske
+brask
+braske
+brasket
+brasma
+brasme
+brasmen
+brasmene
+brasmens
+brast
+braste
+bratna
+bratne
+bratnet
+bratsj
+bratsjen
+bratsjene
+bratsjens
+bratsjer
+bratsjist
+bratsjisten
+bratsjistene
+bratsjistens
+bratsjister
+bratt
+bratte
+brattlende
+brattlendet
+brattlendt
+braut
+brauta
+braute
+brautet
+bravere
+bravert
+braverte
+bravo
+bravoa
+bravoene
+bravoer
+bravoet
+bravoets
+bravur
+bravuren
+bravurens
+bærbar
+bærbare
+bærbart
+brød
+brødbakke
+brødbakken
+brødbakkens
+brødblings
+brødblingsen
+brødblingsene
+brødblingsens
+brødblingser
+brådød
+brådøden
+brådødens
+brøde
+brøden
+brødens
+brødet
+brødre
+brødrene
+brødrenes
+bre
+bråe
+båre
+bære
+børe
+bred
+bredd
+bredda
+bredde
+breddegrad
+breddegraden
+breddegradene
+breddegradens
+breddegrader
+bredden
+breddens
+bredder
+breddfull
+brede
+bredere
+bredest
+bredsel
+bredselet
+bredselets
+bredsla
+bredslede
+bredsleden
+bredsledens
+bredslene
+bredsler
+bredslet
+bredslets
+bredt
+breen
+breens
+bæreevne
+bæreevnen
+bæreevnens
+bæreflate
+bæreflaten
+bæreflatens
+bregna
+bregne
+bregnen
+bregnene
+bregnens
+bregner
+brei
+breid
+breidd
+breidda
+breidde
+breide
+breie
+breiflabb
+breiflabben
+breiflabbene
+breiflabbens
+breiflabber
+breifokk
+breifokka
+breislede
+breisleden
+breisledens
+breit
+breitt
+breivokst
+brek
+breke
+breker
+breket
+brekk
+brekkasje
+brekkasjen
+brekkasjens
+brekke
+brekken
+brekkens
+brekket
+brekning
+brekningen
+brekningens
+bærekonstruksjon
+bærekonstruksjonen
+bærekonstruksjonene
+bærekonstruksjonens
+bærekonstruksjoner
+bærekraft
+bærekraften
+bærekraftens
+brekt
+brekte
+brem
+bremmen
+bremmens
+brems
+bremsa
+bremse
+bremsen
+bremsene
+bremsens
+bremset
+båren
+børen
+bærende
+brenn
+brennaktuelle
+brennbar
+brennbare
+brennbart
+brenne
+brennende
+brennenesla
+brennenesle
+brenneneslen
+brenneneslene
+brenneneslens
+brennenesler
+brenner
+brenneri
+brenneria
+brenneriene
+brennerier
+brenneriet
+brenneriets
+brennes
+brennevin
+brennevinene
+brenneviner
+brennevinet
+brennevinets
+brennheit
+brennhet
+brenning
+brenninga
+brenningen
+brennmanet
+brennmaneta
+brennmaneten
+brennmanetens
+brennmanets
+brennstoff
+brennstoffet
+brennstoffets
+bårens
+børens
+brensel
+brenselet
+brenselets
+brenslet
+brenslets
+brent
+brente
+bærepilar
+bærepilaren
+bærepilarene
+bærepilarens
+bærepilarer
+brer
+bærer
+bæres
+bresje
+bresjen
+bresjens
+brest
+bresta
+breste
+bresten
+brestens
+brestet
+bærestol
+bærestolen
+bærestolene
+bærestolens
+bærestoler
+båret
+bæret
+brett
+brette
+bretten
+brettens
+brettes
+brettet
+brettsegler
+brettseglere
+brettsegleren
+brettseglerens
+brettsegleres
+brettseglerne
+brettseglernes
+brettspel
+brettspelet
+brettspelets
+brettspill
+brettspilla
+brettspillene
+brettsplet
+brettsplets
+brev
+breva
+brevann
+brevannet
+brevannets
+brevark
+brevarka
+brevarkene
+brevarket
+brevarkets
+brevatn
+brevatnet
+brevatnets
+brevene
+brever
+brevet
+brevets
+brevporto
+brevportoen
+brevportoens
+bråhast
+bråhasten
+bråhastens
+bråhaster
+bridge
+bridgen
+bridgens
+brie
+brien
+briens
+brife
+brifet
+brigade
+brigaden
+brigadens
+brigg
+briggen
+briggene
+briggens
+brigger
+brikett
+briketten
+brikettene
+brikettens
+briketter
+brikka
+brikke
+brikken
+brikkene
+brikkens
+brikker
+briljans
+briljansen
+briljansens
+briljant
+briljanten
+briljantene
+briljantens
+briljanter
+briljantnål
+briljantnåla
+briljantnålen
+briljantnålene
+briljantnålens
+briljantnåler
+briljere
+briljert
+briljerte
+brilla
+brille
+brilleglas
+brilleglasa
+brilleglasene
+brilleglaset
+brilleglasets
+brilleglass
+brilleglassa
+brilleglassene
+brilleglasset
+brilleglassets
+brilleinnfatning
+brilleinnfatningen
+brilleinnfatningens
+brillen
+brillene
+brillens
+briller
+brilleslange
+brilleslangen
+brilleslangens
+brinellhardhet
+brinellhardheten
+brinellhardhetens
+bring
+bringe
+bringebær
+bringebæra
+bringebærene
+bringebæret
+bringebærets
+bringen
+bringens
+bringer
+bringes
+brink
+brinken
+brinkene
+brinkens
+brinker
+bris
+brisen
+brisens
+brising
+brisingen
+brisingene
+brisingens
+brisinger
+brisk
+briska
+brisken
+briskene
+briskens
+brisker
+brisket
+brisling
+brislingen
+brislingene
+brislingens
+brislinger
+brist
+briste
+bristen
+bristens
+bristet
+brite
+briten
+britene
+britenes
+britens
+briter
+britisk
+britiske
+bråk
+brøk
+brøkdel
+brøkdelen
+brøkdelene
+brøkdelens
+brøkdeler
+bråke
+brøken
+brøkene
+brøkens
+bråker
+brøker
+bråket
+bråkete
+bråkjekk
+brøl
+brøle
+brøler
+brølet
+brølt
+brølte
+bråne
+brånet
+brønn
+brønnen
+brønnene
+brønnens
+brønner
+brønnlokk
+børnskap
+børnskapen
+børnskapens
+bro
+broa
+brodd
+brodden
+broddene
+broddens
+brodder
+broder
+brodere
+broderi
+broderia
+broderiarbeid
+broderiarbeidene
+broderiarbeidet
+broderiarbeidets
+broderiene
+broderier
+broderiet
+broderiets
+brodering
+broderinga
+broderingen
+broderingens
+broderistoff
+broderistoffene
+broderistoffer
+broderistoffet
+broderistoffets
+broderlig
+brodert
+broderte
+broen
+broens
+broiler
+broilere
+broileren
+broilerens
+broileres
+broilerne
+broilernes
+brok
+broka
+brokade
+brokaden
+brokadens
+broket
+brokete
+brokk
+brokke
+brokken
+brokkens
+brokker
+brokkoli
+brokkolien
+brokkoliens
+brolegge
+brolegging
+brolegginga
+broleggingen
+broleggingens
+brolegning
+brolegningen
+brolegningens
+brom
+bromkalium
+bromkaliumet
+bromkaliumets
+bromma
+brommet
+bronkie
+bronkien
+bronkiene
+bronkiens
+bronkier
+bronkitt
+bronkitten
+bronkittene
+bronkittens
+bronkitter
+bronse
+bronsemedalje
+bronsemedaljen
+bronsemedaljene
+bronsemedaljens
+bronsemedaljer
+bronsen
+bronsene
+bronsens
+bronser
+bror
+broren
+brorens
+brorskap
+brorskapen
+brorskapens
+brorskapet
+brorskapets
+brosja
+brosje
+brosjen
+brosjene
+brosjens
+brosjer
+brosjyre
+brosjyren
+brosjyrene
+brosjyrens
+brosjyrer
+brosma
+brosme
+brosmen
+brosmene
+brosmens
+brosmer
+brotna
+brotne
+brotnet
+brotsj
+brotsja
+brotsjen
+brotsjene
+brotsjens
+brotsjer
+brotsjet
+brott
+brottet
+brottets
+brottsjø
+brottsjøen
+brottsjøens
+brottsverk
+brottsverka
+brottsverkene
+brottsverket
+brottsverkets
+børs
+børsa
+børsen
+børsens
+børst
+børsta
+børste
+børsten
+børstens
+børstet
+brøstfeldig
+brøt
+børt
+bråte
+bråten
+bråtens
+brått
+bru
+brua
+brud
+bruda
+brudd
+brudden
+bruddent
+bruddet
+brudeferd
+brudeferda
+brudeferden
+brudeferdens
+bruden
+brudene
+brudens
+brudepar
+brudepara
+brudeparene
+brudeparet
+brudeparets
+bruder
+brudgom
+brudgommen
+brudgommene
+brudgommens
+brudgommer
+brudne
+brudulje
+bruduljen
+bruduljens
+bruene
+bruer
+brugda
+brugde
+brugden
+brugdene
+brugdens
+brugder
+bruk
+brukbar
+brukbare
+brukbarhet
+brukbarheten
+brukbarhetens
+brukbart
+bruke
+brukelig
+bruken
+bruker
+brukere
+brukeren
+brukerens
+brukeres
+brukerhåndbøker
+brukerleksikon
+brukerleksikonene
+brukerleksikonet
+brukerleksikonets
+brukerne
+brukernes
+brukervennlig
+brukes
+bruket
+brukket
+bruksanvisning
+bruksanvisningen
+bruksanvisningene
+bruksanvisningens
+bruksanvisninger
+bruksareal
+bruksarealene
+bruksarealer
+bruksarealet
+bruksarealets
+bruksenhet
+bruksenheten
+bruksenhetene
+bruksenhetens
+bruksenheter
+bruksforhold
+bruksforholda
+bruksforholdene
+bruksfrekvens
+bruksfrekvensen
+bruksfrekvensens
+brukskunst
+brukskunsten
+brukskunstens
+brukskunstnere
+brukskunstneren
+brukskunstnerens
+bruksområda
+bruksområde
+bruksområdene
+bruksområder
+bruksområdet
+bruksområdets
+bruksrett
+bruksretta
+bruksretten
+bruksrettens
+bruksrettet
+brukt
+bruktbil
+bruktbilen
+bruktbilene
+bruktbilens
+bruktbiler
+brukte
+bruktes
+brulegge
+brulegging
+brulegginga
+bruleggingen
+bruleggingens
+brulegning
+brulegningen
+brulegningens
+brumla
+brumle
+brumlet
+brumma
+brumme
+brummet
+brun
+bruna
+brune
+brunet
+brunett
+brunette
+brunfarga
+brunfarge
+brunfargen
+brunfargens
+brunfarget
+brunlig
+brunst
+brunsten
+brunt
+brur
+brura
+brureferd
+brureferda
+brureferden
+brureferdens
+brurene
+brurer
+brus
+bruse
+brusen
+brusens
+bruset
+brusflaska
+brusflaske
+brusflasken
+brusflaskene
+brusflaskens
+brusflasker
+brusk
+brusken
+bruskene
+bruskens
+brusker
+brust
+bruste
+brustet
+brutal
+brutale
+brutalitet
+brutaliteten
+brutalitetens
+brutalt
+brutt
+brutto
+bruttoareal
+bruttoarealet
+bruttoarealets
+bruttoen
+bruttoens
+bruttoinntekt
+bruttoinntekta
+bruttoinntekten
+bruttoinntektens
+bruttoinntekter
+bruttonasjonalprodukt
+bruttonasjonalproduktene
+bruttonasjonalprodukter
+bruttonasjonalproduktet
+bruttonasjonalproduktets
+bruttotonn
+bråvakker
+bråvakkert
+bråvending
+bråvendinga
+bråvendingen
+bråvendingens
+bry
+åbry
+brydd
+brydda
+brydde
+bryderi
+bryderiet
+bryderiets
+bryet
+åbryet
+åbryets
+brygg
+brygga
+brygge
+bryggene
+bryggens
+bryggerhus
+bryggerhuset
+bryggerhusets
+bryggeri
+bryggeria
+bryggeriene
+bryggerier
+bryggeriet
+bryggeriets
+brygget
+bryllup
+bryllupa
+bryllupene
+brylluper
+bryllupet
+bryllupets
+bryllupsdag
+bryllupsdagen
+bryllupsdagens
+bryllupsreisa
+bryllupsreise
+bryllupsreisen
+bryllupsreisens
+bryllupsreiser
+bryllupssang
+bryllupssangen
+bryllupssangens
+bryn
+bryne
+brynet
+brynja
+brynje
+brynjen
+brynjene
+brynjens
+brynjer
+brynt
+brynte
+bryr
+brysk
+brysom
+brysomme
+brysomt
+bryst
+brysta
+brystene
+bryster
+brystet
+brystets
+brystholder
+brystholdere
+brystholderen
+brystholderens
+brystholderes
+brystholderne
+brystholdernes
+brystkreft
+brøyt
+bryte
+brøyte
+brøytebil
+brøytebilen
+brøytebilene
+brøytebilens
+brøytebiler
+bryter
+brytere
+bryteren
+bryterens
+bryterne
+brytes
+brøytet
+bryting
+brøyting
+brytinga
+brøytinga
+brytingen
+brøytingen
+brøytingens
+brytning
+brytningen
+brytningene
+brytningens
+brytninger
+bås
+bøs
+båsen
+båsene
+båsens
+båser
+bæsj
+bæsja
+bæsje
+bæsjen
+bæsjens
+bæsjet
+bøss
+bøsse
+bøsset
+båt
+bøt
+båtbygger
+båtbyggere
+båtbyggeren
+båtbyggerens
+båtbyggeres
+båtbyggeri
+båtbyggeriene
+båtbyggerier
+båtbyggeriet
+båtbyggeriets
+båtbyggerne
+båtbyggernes
+bøte
+båteier
+båteiere
+båteieren
+båteierens
+båteieres
+båteierne
+båteiernes
+bøtelegge
+båten
+båtene
+båtens
+båter
+bøter
+båtforening
+båtforeninga
+båtforeningen
+båtforeningene
+båtforeningens
+båtforeninger
+båthvelv
+båthvelva
+båthvelvet
+båthvelvets
+båtkvelv
+båtkvelven
+båtkvelvens
+båtnaust
+båtnaustet
+båtnaustets
+båtreisa
+båtreise
+båtreisen
+båtreisens
+båtreiser
+båtrip
+båtripa
+båtripen
+båtripens
+båtshake
+båtshaken
+båtshakens
+båtsmann
+båtsmannen
+båtsmannens
+båtsmenn
+båtsmennene
+båtsmennenes
+båtsmenns
+båtstø
+båtstøa
+båtstøen
+båtstøene
+båtstøens
+båtstøer
+bøtt
+bøtta
+bøtte
+bøttekott
+bøttekottene
+bøttekottet
+bøttekottets
+båttur
+båtturen
+båtturene
+båtturens
+båtturer
+båttype
+båttypen
+båttypene
+båttypens
+båttyper
+bu
+bua
+bud
+budd
+buddhisme
+buddhismen
+buddhismens
+buddhist
+buddhisten
+buddhistene
+buddhistens
+buddhister
+buddhistisk
+budeia
+budeie
+budeien
+budeiene
+budeiens
+budeier
+budet
+budne
+budoar
+budoaret
+budoarets
+budsjett
+budsjetta
+budsjettbehandling
+budsjettbehandlinga
+budsjettbehandlingen
+budsjettbehandlingens
+budsjettbehandlinger
+budsjettene
+budsjetter
+budsjettere
+budsjettert
+budsjettet
+budsjettets
+budsjettforslag
+budsjettforslaga
+budsjettforslagene
+budsjettforslaget
+budsjettforslagets
+budsjettmessig
+budsjettår
+budsjettåret
+budsjettårets
+budskap
+budskapa
+budskapet
+budskapets
+budt
+bue
+buen
+buens
+buer
+buet
+bufardag
+bufardagen
+bufardagens
+bufe
+buffalo
+buffer
+buffere
+bufferen
+bufferens
+bufferes
+bufferne
+buffernes
+bugne
+bugner
+buhund
+buhunden
+buhundens
+buk
+buken
+bukens
+bukett
+buketten
+bukettene
+bukettens
+buketter
+bukk
+bukke
+bukken
+bukkens
+bukker
+bukket
+bukse
+buksere
+buksereim
+buksert
+bukserte
+bukt
+bukta
+bukten
+buktene
+buktens
+bukter
+buktet
+bulder
+bulderet
+bulderets
+buldra
+buldre
+buldrende
+buldret
+bule
+buler
+bulet
+bulevard
+bulevarden
+bulevardene
+bulevardens
+bulevarder
+bulgarer
+bulgarere
+bulgareren
+bulgarerens
+bulgareres
+bulgarerne
+bulgarernes
+bulgarsk
+buljong
+buljongen
+buljongens
+bulk
+bulka
+bulkcarrier
+bulkcarriere
+bulkcarrieren
+bulkcarrierens
+bulkcarrieres
+bulkcarrierne
+bulkcarriernes
+bulke
+bulken
+bulkens
+bulket
+bulkskip
+bulkskipet
+bulkskipets
+bulldogg
+bulldoggen
+bulldoggens
+bulldoser
+bulldosere
+bulldoseren
+bulldoserens
+bulldoseres
+bulldoserne
+bulldosernes
+bulle
+bullen
+bullens
+bulletin
+bulletinen
+bulletinene
+bulletinens
+bulletiner
+bulter
+bultere
+bulteren
+bulterens
+bulteres
+bulterne
+bulternes
+bumerang
+bumerangen
+bumerangens
+bumerke
+bumerket
+bums
+bumsen
+bumsens
+bumset
+bumsete
+bunad
+bunaden
+bunadene
+bunadens
+bunader
+bundel
+bundelen
+bundelens
+bunden
+bundet
+bunding
+bundingen
+bundingens
+bundle
+bundler
+bundne
+bundsforvandt
+bungalow
+bungalowen
+bungalowene
+bungalowens
+bungalower
+bunk
+bunken
+bunkens
+bunkers
+bunkersen
+bunkersens
+bunkra
+bunkre
+bunkret
+bunn
+bunne
+bunnen
+bunnens
+bunner
+bunnet
+bunnfall
+bunnfallet
+bunnfallets
+bunnlag
+bunnlaga
+bunnlagene
+bunnlaget
+bunnlagets
+bunns
+bunnvann
+bunnvannet
+bunnvannets
+bunt
+bunte
+bunten
+buntens
+bunter
+buntmaker
+buntmakere
+buntmakeren
+buntmakerens
+buntmakeres
+buntmakerne
+buntmakernes
+buorm
+buormen
+buormene
+buormens
+buormer
+bur
+burde
+burdet
+bure
+bureising
+bureisinga
+bureisingen
+bureisingens
+buret
+burgunder
+burlesk
+burmaner
+burmanere
+burmaneren
+burmanerens
+burmaneres
+burmanerne
+burmanernes
+burmansk
+burot
+burota
+buroten
+burotens
+bursdag
+bursdagen
+bursdagene
+bursdagens
+bursjoa
+bursjoaen
+bursjoaens
+burundier
+burundieren
+burundierens
+burundisk
+bus
+busatt
+buse
+busemann
+busemannen
+busemannens
+busemenn
+busemennene
+busemennenes
+busemenns
+buset
+busetning
+busetningen
+busetningens
+busetting
+busettinga
+busettingen
+busettingens
+busk
+buskap
+buskapen
+buskapene
+buskapens
+buskaper
+buskas
+buskasa
+buskasene
+buskaser
+buskaset
+buskasets
+buske
+busken
+buskens
+busker
+buss
+bussa
+busse
+bussen
+bussene
+bussenes
+bussens
+busser
+busserull
+busserullen
+busserullene
+busserullens
+busseruller
+bussfører
+bussførere
+bussføreren
+bussførerens
+bussføreres
+bussførerne
+bussførernes
+bussholdeplass
+bussholdeplassen
+bussholdeplassene
+bussholdeplassens
+bussholdeplasser
+busslomma
+busslomme
+busslommen
+busslommene
+busslommens
+busslommer
+bussreise
+bussreisen
+bussreisene
+bussreisens
+bussreiser
+bussrute
+bussruten
+bussrutene
+bussrutens
+bussruter
+busstur
+bussturen
+bussturene
+bussturens
+bussturer
+bust
+busta
+bustad
+bustaden
+bustadene
+bustadens
+bustader
+buste
+busten
+bustens
+bustet
+bustete
+butelje
+butikk
+butikken
+butikkene
+butikkens
+butikker
+butler
+butlere
+butleren
+butlerens
+butleres
+butlerne
+butlernes
+butt
+butta
+butte
+butten
+butterdeig
+butterdeigen
+butterdeigens
+butterfly
+buttet
+by
+bøy
+bøyd
+bydd
+bydde
+byde
+bøyde
+bydel
+bydelen
+bydelene
+bydelens
+bydeler
+bydende
+bye
+bøye
+bøyelig
+bøyelighet
+bøyeligheten
+bøyelighetens
+byen
+bøyen
+byene
+byens
+bøyens
+byer
+bøyer
+bøyes
+byet
+bøyet
+byete
+bøyete
+byfogd
+byfogden
+byfogdene
+byfogdens
+byfogder
+byfolk
+byfolket
+byfolkets
+bøyg
+bygd
+bygda
+bygdas
+bygde
+bygdefolk
+bygdefolket
+bygdefolkets
+bygdelag
+bygdelaga
+bygdelagene
+bygdelaget
+bygdelagets
+bygdemuseene
+bygdemuseer
+bygdemuseet
+bygdemuseets
+bygdemuseum
+bygden
+bygdene
+bygdens
+bygder
+bygdeveg
+bygdevegen
+bygdevegene
+bygdevegens
+bygdeveger
+bygdevei
+bygdeveien
+bygdeveiene
+bygdeveiens
+bygdeveier
+bygds
+byge
+bøygen
+bøygene
+bøygens
+bøyger
+bygg
+bygge
+byggefelt
+byggefelta
+byggefeltene
+byggeklar
+byggeleder
+byggeledere
+byggelederen
+byggelederens
+byggelederes
+byggelederne
+byggeledernes
+byggelån
+byggelånene
+byggelånet
+byggelånets
+byggeløyva
+byggeløyve
+byggeløyvene
+byggeløyver
+byggen
+byggende
+byggene
+byggenummer
+byggenummeret
+byggenummerets
+byggenumre
+byggenumrene
+byggeomkostning
+byggeomkostningen
+byggeomkostningene
+byggeomkostningens
+byggeomkostninger
+byggeplan
+byggeplanen
+byggeplanene
+byggeplanens
+byggeplaner
+byggeplass
+byggeplassen
+byggeplassene
+byggeplassens
+byggeplasser
+byggeprosjekt
+byggeprosjekta
+byggeprosjektene
+byggeprosjekter
+byggeprosjektet
+byggeprosjektets
+bygger
+bygges
+byggesett
+byggesettet
+byggesettets
+bygget
+byggetekniske
+byggetid
+byggetida
+byggetiden
+byggetidens
+byggetillatelse
+byggetillatelsen
+byggetillatelsene
+byggetillatelsens
+byggetillatelser
+byggetrinn
+byggetrinnet
+byggetrinnets
+byggets
+byggevirksomhet
+byggevirksomheten
+byggevirksomhetens
+byggforskningsinstitutt
+byggforskningsinstituttet
+byggforskningsinstituttets
+byggherre
+byggherren
+byggherrens
+bygging
+bygginga
+byggingen
+byggmester
+byggmestere
+byggmesteren
+byggmesterens
+byggmesteres
+byggmesterne
+byggmesternes
+byggverk
+byggverka
+byggverkene
+byggverket
+byggverkets
+bygning
+bygningen
+bygningene
+bygningens
+bygninger
+bygningslov
+bygningsloven
+bygningslovens
+bygningsmessig
+bygningsmessige
+bygningsråd
+bygningsrådet
+bygningsrådets
+bygningstekniske
+bygsel
+bygselen
+bygselens
+bygsla
+bygsle
+bygslet
+bygsling
+bygslinga
+bygslingen
+bygslingens
+bøying
+bøyinga
+bøyingen
+bøyingens
+bykjerne
+bykjernen
+bykjernens
+byks
+bykse
+bykser
+bykset
+bykst
+bykste
+bøyle
+bøylen
+bøylens
+byll
+byllen
+byllens
+bylt
+bylten
+byltene
+byltens
+bylter
+bymessig
+bøyning
+bøyningen
+bøyningens
+bøyningsform
+bøyningsforma
+bøyningsformen
+bøyningsformene
+bøyningsformens
+bøyningsformer
+bøyningsklasse
+bøyningsklassen
+bøyningsklassene
+bøyningsklassens
+bøyningsklasser
+byområda
+byområde
+byområdene
+byområder
+byområdet
+byområdets
+byplankontor
+byplankontorene
+byplankontorer
+byplankontoret
+byplankontorets
+byr
+byrå
+byråa
+byrd
+byrde
+byrden
+byrdene
+byrdens
+byrder
+byråene
+byråer
+byrået
+byråets
+byrett
+byretten
+byrettens
+byrettsdommer
+byrettsdommere
+byrettsdommeren
+byrettsdommerens
+byrettsdommeres
+byrettsdommerne
+byrettsdommernes
+byrg
+byrge
+byrgt
+byråkrat
+byråkraten
+byråkratene
+byråkratens
+byråkrater
+byråkrati
+byråkratier
+byråkratiet
+byråkratiets
+byråkratisk
+byråkratiske
+byråsjef
+byråsjefen
+byråsjefene
+byråsjefens
+byråsjefer
+bys
+bysamfunn
+bysamfunnet
+bysamfunnets
+byssa
+bysse
+bysset
+byste
+bysten
+bystens
+bystyre
+bystyret
+bystyrets
+byte
+bytes
+bytrafikk
+bytrafikken
+bytrafikkens
+bytt
+bytta
+byttbar
+bytte
+bytter
+byttes
+byttet
+bytting
+byttingen
+byttingens
+bytur
+byturen
+byturene
+byturens
+byturer
+ca
+cabin
+cabincruiser
+cabincruisere
+cabincruiseren
+cabincruiserens
+cabincruiseres
+cabincruiserne
+cabincruisernes
+cabinen
+cabinene
+cabinens
+cabiner
+californier
+californiere
+californieren
+californierens
+californieres
+californierne
+californiernes
+californisk
+californium
+californiumet
+californiumets
+calling
+callingen
+callingens
+calypso
+calypsoen
+calypsoene
+calypsoens
+calypsoer
+camp
+campa
+campe
+campet
+camping
+campinga
+campingen
+campingens
+campinghytta
+campinghytte
+campinghytten
+campinghyttene
+campinghyttens
+campinghytter
+campingplass
+campingplassen
+campingplassene
+campingplassens
+campingplasser
+campingvogn
+campingvogna
+campingvognen
+campingvognene
+campingvognens
+campingvogner
+canadier
+canadiere
+canadieren
+canadierens
+canadieres
+canadierne
+canadiernes
+canadisk
+cancan
+cancanen
+cancanens
+cancer
+canceren
+cancerens
+cand
+cannabis
+cannabisen
+cannabisens
+canyon
+canyonen
+canyonene
+canyonens
+canyoner
+caravan
+caravanen
+caravanene
+caravanens
+caravaner
+cardigan
+cardiganen
+cardiganens
+carmen
+carnet
+carnets
+carport
+carporten
+carportene
+carportens
+carporter
+carte
+casa
+case
+casene
+caser
+caset
+casets
+cash
+casting
+castingen
+castingens
+catering
+cateringen
+cateringens
+cateringer
+caterpillar
+caterpillaren
+caterpillarene
+caterpillarens
+caterpillarer
+causa
+ccm
+cd
+celeber
+celebert
+celebre
+cella
+celle
+cellen
+cellene
+cellens
+celler
+cellist
+cellisten
+cellistene
+cellistens
+cellister
+cello
+celloen
+celloene
+celloens
+celloer
+cellofan
+cellofanen
+cellofanens
+cellofaner
+celluloid
+celluloiden
+celluloidens
+cellulose
+cellulosefabrikk
+cellulosefabrikken
+cellulosefabrikkene
+cellulosefabrikkens
+cellulosefabrikker
+cellulosen
+cellulosens
+celsius
+cembalo
+cembaloen
+cembaloene
+cembaloens
+cembaloer
+cent
+centen
+centene
+centens
+center
+centigram
+centigrammet
+centigrammets
+centime
+centimen
+centimens
+centimeter
+centimetere
+centimeteren
+centimeterens
+centimeteres
+centimeterne
+centimeternes
+centner
+centnere
+centneren
+centnerens
+centneres
+centnerne
+centnernes
+centum
+cerebral
+cerebralt
+cerium
+certeparti
+certepartia
+certepartiene
+certepartier
+certepartiet
+certepartiets
+cesium
+cesiumet
+cesiumets
+cetera
+ceyloner
+ceyloneren
+ceylonerens
+ceylonsk
+chablis
+chablisen
+chablisens
+champagne
+champagnen
+champagnens
+champion
+championen
+championene
+championens
+championer
+charge
+chargen
+chargens
+charmeuse
+charmeusen
+charmeusens
+charter
+charteret
+charterets
+charterfly
+charterflya
+charterflyene
+charterflyet
+charterflyets
+chartertrafikk
+chartertrafikken
+chartertrafikkens
+chartra
+chartre
+chartrene
+chartrer
+chartret
+chassis
+chassisa
+chassisene
+chassiser
+chassiset
+chassisets
+chateaubriand
+chateaubrianden
+chateaubriandene
+chateaubriandens
+chateaubriander
+chausseen
+chausseens
+cheddar
+cheddaren
+cheddarens
+chemise
+chemisen
+chemisens
+chesterfieldmøbler
+chevaleresk
+chianti
+chiantien
+chiantiens
+chic
+chice
+chict
+chief
+chiefen
+chiefene
+chiefens
+chiefer
+chiffoniere
+chiffonieren
+chiffonierens
+chignon
+chignonen
+chignonene
+chignonens
+chignoner
+chilener
+chilenere
+chileneren
+chilenerens
+chileneres
+chilenerne
+chilenernes
+chilensk
+chippendale
+chips
+chipsen
+chipsens
+choka
+choke
+choken
+chokene
+chokens
+choker
+choket
+chuck
+chucken
+chuckene
+chuckens
+chucker
+cicerone
+ciceronen
+ciceronens
+cinemascope
+cinemascopet
+cinemascopets
+cirka
+cirkumfleks
+cirkumfleksen
+cirkumfleksene
+cirkumfleksens
+cirkumflekser
+ciss
+cissen
+cissens
+cisterna
+cisterne
+cisternen
+cisternene
+cisternens
+cisterner
+citadell
+citadella
+citadellene
+citadeller
+citadellet
+citadellets
+citrus
+city
+clairvoyance
+clairvoyancen
+clairvoyancens
+clearing
+clearingen
+clearingens
+clinch
+clinchen
+clinchene
+clinchens
+clincher
+clou
+cloua
+clouen
+clouene
+clouens
+clouet
+clouets
+clutch
+clutcha
+clutchen
+clutchene
+clutchens
+clutcher
+clutchet
+cm
+co
+cockney
+cockneyen
+cockneyene
+cockneyens
+cockneyer
+cockpit
+cockpiten
+cockpitene
+cockpitens
+cockpiter
+cocktail
+cocktailen
+cocktailene
+cocktailens
+cocktailer
+coitus
+coitusen
+coitusens
+cola
+colaen
+colaens
+collage
+collagen
+collagene
+collagens
+collager
+college
+colleget
+collie
+collien
+colliene
+colliens
+collier
+cologne
+colognen
+colognens
+colombianer
+colombianere
+colombianeren
+colombianerens
+colombianeres
+colombianerne
+colombianernes
+colombiansk
+colon
+colt
+colten
+coltene
+coltens
+colter
+comeback
+comebacka
+comebacken
+comebackene
+comebackens
+comebacket
+comebackets
+computer
+computere
+computeren
+computerens
+computeres
+computerne
+computernes
+connaisseur
+connaisseuren
+connaisseurene
+connaisseurens
+connaisseurer
+container
+containere
+containeren
+containerens
+containeres
+containerne
+containernes
+copyright
+copyrighten
+copyrightens
+corner
+cornere
+corneren
+cornerens
+corneres
+cornerne
+cornernes
+cornflakes
+cornflakesen
+cornflakesens
+corny
+corpus
+cos
+cosi
+cosinus
+costaricaner
+costaricanere
+costaricaneren
+costaricanerens
+costaricaneres
+costaricanerne
+costaricanernes
+costaricansk
+cotangens
+country
+couronne
+couronnen
+couronnens
+couture
+cowboy
+cowboyen
+cowboyene
+cowboyens
+cowboyer
+cox
+coxen
+coxene
+coxens
+coxer
+crazy
+credo
+credoa
+credoene
+credoet
+credoets
+crepe
+crepen
+crepens
+crescendo
+crescendoa
+crescendoen
+crescendoene
+crescendoens
+crescendoer
+crescendoet
+crescendoets
+cricket
+cricketen
+cricketens
+cruise
+cruiseskip
+cruiseskipa
+cruiseskipene
+cruiseskipet
+cruiseskipets
+cruiset
+crux
+cruxa
+cruxene
+cruxet
+cruxets
+csardas
+csardasen
+csardasene
+csardasens
+csardaser
+cubaner
+cubanere
+cubaneren
+cubanerens
+cubaneres
+cubanerne
+cubanernes
+cubansk
+cup
+cupen
+cupene
+cupens
+cuper
+curium
+curling
+curlingen
+curlingens
+cutting
+cuttingen
+cuttingene
+cuttingens
+cuttinger
+cyanid
+cyaniden
+cyanidene
+cyanidens
+cyanider
+cyanidet
+cyanidets
+cyankalium
+cyankaliumet
+cyankaliumets
+cymbal
+cymbalen
+cymbalene
+cymbalens
+cymbaler
+d
+dø
+da
+dabbe
+dabbet
+daddel
+daddelen
+daddelens
+daddelpalme
+daddelpalmen
+daddelpalmens
+dadla
+dadle
+dadlene
+dadler
+dadlet
+daff
+daffa
+daffe
+daffet
+dafne
+dafnen
+dafnene
+dafnens
+dafner
+dag
+dagblad
+dagbladene
+dagblader
+dagbladet
+dagbladets
+dagbok
+dagboka
+dagboken
+dagbokens
+dagdriver
+dagdrivere
+dagdriveren
+dagdriverens
+dagdriveres
+dagdriveri
+dagdriveriet
+dagdriveriets
+dagdriverne
+dagdrivernes
+dagdrøm
+dagdrømmen
+dagdrømmene
+dagdrømmens
+dagdrømmer
+dagdrømmere
+dagdrømmeren
+dagdrømmerens
+dagdrømmeres
+dagdrømmerne
+dagdrømmernes
+dage
+dagedes
+dagen
+dagene
+dagens
+dager
+dagers
+dages
+dagevis
+daggry
+daggryet
+daggryets
+daghjem
+daghjemma
+daghjemmene
+daghjemmet
+daghjemmets
+daginstitusjon
+daginstitusjonen
+daginstitusjonene
+daginstitusjonens
+daginstitusjoner
+daglig
+dagligdags
+dagligdagse
+daglige
+daglønn
+daglønna
+daglønnen
+daglønnens
+daglønner
+dagmamma
+dagmammaen
+dagmammaene
+dagmammaens
+dagmammaer
+dags
+dagsaktuelle
+dagsavis
+dagsavisa
+dagsavisen
+dagsavisene
+dagsavisens
+dagsaviser
+dagslys
+dagslyset
+dagslysets
+dagsorden
+dagsordenen
+dagsordenens
+dagspresse
+dagspressen
+dagspressens
+dagsprett
+dagspretten
+dagsprettens
+dagsrevy
+dagsrevyen
+dagsrevyene
+dagsrevyens
+dagsrevyer
+dagstøtt
+dagsverk
+dagsverka
+dagsverkene
+dagsverker
+dagsverket
+dagsverkets
+dakapo
+dakapoa
+dakapoene
+dakapoer
+dakapoet
+dakapoets
+daktyl
+daktylen
+daktylene
+daktylens
+daktyler
+dal
+dalbotn
+dalbotnen
+dalbotnens
+dalbunn
+dalbunnen
+dalbunnens
+dale
+dalen
+dalens
+daler
+dalere
+daleren
+dalerens
+daleres
+dalerne
+dalernes
+dalføre
+dalføret
+dall
+dallen
+dallens
+dalt
+dalten
+daltens
+dam
+damask
+damasken
+damaskene
+damaskens
+damasker
+dame
+dameklasse
+dameklassen
+dameklassens
+damen
+damene
+damenes
+damens
+damer
+damers
+dammen
+dammene
+dammens
+dammer
+damp
+dampa
+dampe
+dampen
+dampens
+damper
+dampet
+dampmaskin
+dampmaskina
+dampmaskinen
+dampmaskinene
+dampmaskinens
+dampmaskiner
+dandere
+danderer
+dandert
+danderte
+dandy
+dandyen
+dandyene
+dandyens
+dandyer
+danna
+danne
+dannebrog
+dannebroget
+dannebrogets
+dannede
+dannelse
+dannelsen
+dannelsens
+danner
+dannes
+dannet
+danning
+danninga
+danningen
+danoman
+danomanen
+danomanens
+dans
+dansa
+danse
+dansekonkurranse
+dansekonkurransen
+dansekonkurransens
+dansemoro
+dansemoroa
+dansemoroen
+dansemoroene
+dansemoroens
+dansemoroer
+dansen
+dansende
+dansens
+danser
+danserinna
+danserinne
+danserinnen
+danserinnene
+danserinnens
+danserinner
+danseskole
+danseskolen
+danseskolene
+danseskolens
+danseskoler
+danset
+dansk
+danske
+danskebåt
+danskebåten
+danskebåtene
+danskebåtens
+danskebåter
+dansken
+danskene
+danskenes
+dansker
+dansketida
+danskfødt
+darre
+darren
+darrens
+darwinisme
+darwinismen
+darwinismens
+darwinist
+darwinisten
+darwinistene
+darwinistens
+darwinister
+darwinistisk
+dashbord
+dashbordet
+dashbordets
+dask
+daska
+daske
+dasken
+daskens
+dasker
+dasket
+dasking
+daskinga
+daskingen
+daskingens
+dass
+dassen
+dassene
+dassens
+dasser
+data
+dataarkiv
+dataarkiva
+dataarkivene
+dataarkivet
+dataarkivets
+database
+databasen
+databasene
+databasens
+databaser
+databehandle
+databehandler
+databehandling
+databehandlinga
+databehandlingen
+databehandlingens
+databehandlingsfunksjon
+databehandlingsfunksjonen
+databehandlingsfunksjonene
+databehandlingsfunksjonens
+databehandlingsfunksjoner
+databehandlingsutstyr
+databehandlingsutstyret
+databehandlingsutstyrets
+dataene
+datafil
+datafila
+datafilen
+datafilene
+datafilens
+datafiler
+datakraft
+datakraften
+datakraftens
+datalista
+dataliste
+datalisten
+datalistene
+datalistens
+datalister
+datalov
+dataloven
+datalovene
+datalovens
+datalover
+datamaskin
+datamaskinell
+datamaskinelle
+datamaskinelt
+datamaskinen
+datamaskinene
+datamaskinens
+datamaskiner
+datamaskinstøtte
+datamaskinstøttet
+datamaskinsystem
+datamaskinsystema
+datamaskinsystemene
+datamaskinsystemer
+datamaskinsystemet
+datamaskinsystemets
+datanett
+datanettet
+datanettets
+dataoperatør
+dataoperatøren
+dataoperatørene
+dataoperatørens
+dataoperatører
+dataoverføring
+dataoverføringa
+dataoverføringen
+dataoverføringens
+dataoverføringer
+dataprogrammer
+dataregister
+dataregisteret
+dataregisterets
+dataregistra
+dataregistre
+dataregistrene
+dataregistrere
+dataregistrerer
+dataregistrert
+dataregistrerte
+dataregistret
+dataregistrets
+datasenter
+datasenteret
+datasenterets
+datasentra
+datasentral
+datasentralen
+datasentralene
+datasentralens
+datasentraler
+datasentre
+datasentrene
+datasentret
+datasentrets
+datasett
+dataskjerm
+dataskjermen
+dataskjermene
+dataskjermens
+dataskjermer
+datastyrt
+datasystem
+datasystema
+datasystemene
+datasystemer
+datasystemet
+datasystemets
+datateknikk
+datateknikken
+datateknikkene
+datateknikkens
+datateknikker
+datateknisk
+datateknologi
+datateknologien
+datateknologiens
+dataterminal
+dataterminalen
+dataterminalene
+dataterminalens
+dataterminaler
+datatransmisjon
+datatransmisjonen
+datatransmisjonene
+datatransmisjonens
+datatransmisjoner
+datautlisting
+datautlistingen
+datautlistingens
+datavern
+datavernet
+datavernets
+dateltjeneste
+dateltjenesten
+dateltjenestens
+datere
+daterer
+dateres
+datering
+datert
+daterte
+datidens
+dativ
+dativen
+dativene
+dativens
+dativer
+dato
+datoen
+datoene
+datoens
+datoer
+datoparkering
+datoparkeringa
+datoparkeringen
+datoparkeringens
+datt
+datten
+datter
+dattera
+datteren
+datterens
+datters
+datterselskap
+datterselskapa
+datterselskapene
+datterselskaper
+datterselskapet
+datterselskapets
+datum
+datumen
+datumens
+datumet
+datumets
+datumgrense
+datumgrensen
+datumgrensens
+dau
+daublod
+daud
+daudblod
+daude
+dauding
+daudingen
+daudingene
+daudingens
+daudinger
+daudkjøtt
+daudkjøttet
+daudkjøttets
+daudt
+daue
+dauing
+dauinga
+dauingen
+dauingens
+daukjøtt
+daukjøttet
+daukjøttets
+dauphin
+dauphinen
+dauphinene
+dauphinens
+dauphiner
+daut
+davit
+daviten
+davitene
+davitens
+daviter
+daværende
+db
+dåd
+død
+dødbringende
+dødd
+dødde
+døde
+dødelig
+dødelige
+dødelighet
+dødeligheten
+dødelighetens
+dåden
+døden
+dådene
+dådens
+dødens
+dåder
+dødes
+dødfødd
+dødfødt
+dødgang
+dødgangen
+dødgangens
+dødning
+dødningen
+dødningens
+dødpunkt
+dødpunkter
+dødpunktet
+dødpunktets
+dødsdømt
+dødsdommer
+dødsens
+dødsfall
+dødsfalla
+dødsfallene
+dødsfallet
+dødsfallets
+dødsleie
+dødsleiet
+dødsoffer
+dødsofferet
+dødsofferets
+dødsofra
+dødsofre
+dødsofrene
+dødsstraff
+dødsstraffa
+dødsstraffen
+dødsstraffens
+dødsstund
+dødsstunda
+dødsstunden
+dødsstundens
+dødt
+dødvekt
+dødvekta
+dødvekten
+dødvektens
+dådyr
+dådyra
+dådyrene
+dådyret
+dådyrets
+de
+øde
+deadline
+deadlinen
+deadlinene
+deadlinens
+deadliner
+dean
+deanen
+deanene
+deanens
+deaner
+debankere
+debankerer
+debankert
+debankerte
+debarkere
+debarkerer
+debarkert
+debarkerte
+debatt
+debattant
+debattanten
+debattantene
+debattantens
+debattanter
+debatten
+debattene
+debattens
+debatter
+debattere
+debattert
+debatterte
+debattinnlegg
+debattinnlegga
+debattinnleggene
+debattinnlegget
+debattinnleggets
+debet
+debeten
+debetene
+debetens
+debeter
+debetpost
+debetposten
+debetpostens
+debetsaldo
+debetsaldoen
+debetsaldoens
+debetsida
+debetside
+debetsiden
+debetsidens
+debitere
+debiterer
+debitert
+debiterte
+debitor
+debitoren
+debitorene
+debitorens
+debitorer
+debut
+debutant
+debutanten
+debutantene
+debutantens
+debutanter
+debuten
+debutene
+debutens
+debuter
+debutere
+debuterer
+debutert
+debuterte
+decca
+decem
+decennia
+decenniene
+decennier
+decenniet
+decennium
+decharge
+dechargen
+dechargene
+dechargens
+decharger
+dechiffrere
+dechiffrert
+dechiffrerte
+dedikasjon
+dedikasjonen
+dedikasjonene
+dedikasjonens
+dedikasjoner
+dedisere
+dedisert
+dediserte
+deduksjon
+deduksjonen
+deduksjonene
+deduksjonens
+deduksjoner
+deduktiv
+deduserbar
+dedusere
+dedusert
+deduserte
+defaitisme
+defaitismen
+defaitismens
+defaitistisk
+defekt
+defekten
+defektene
+defektens
+defekter
+defensiv
+defensive
+defensiven
+defensivt
+defilere
+defilering
+defileringa
+defileringen
+defileringens
+defilert
+defilerte
+definer
+definere
+definerer
+defineres
+definering
+defineringa
+defineringen
+defineringens
+definert
+definerte
+definisjon
+definisjonen
+definisjonene
+definisjonens
+definisjoner
+definitiv
+definitive
+definitivt
+deflasjon
+deflasjonen
+deflasjonene
+deflasjonens
+deflasjoner
+deflorert
+deformasjon
+deformasjonen
+deformasjonene
+deformasjonens
+deformasjoner
+deformere
+deformeres
+deformert
+deformerte
+defroster
+defrostere
+defrosteren
+defrosterens
+defrosteres
+defrosterne
+defrosternes
+deg
+degenerasjon
+degenerasjonen
+degenerasjonene
+degenerasjonens
+degenerasjoner
+degenerer
+degenerere
+degenererer
+degenerert
+degga
+degge
+degger
+degget
+degradasjon
+degradasjonen
+degradasjonene
+degradasjonens
+degradasjoner
+degradere
+degradering
+degraderinga
+degraderingen
+degraderingens
+degradert
+degraderte
+ødegård
+ødegårdene
+deig
+deigen
+deigene
+deigens
+deiger
+deiget
+deigete
+deild
+deilda
+deildene
+deilder
+deilig
+deilige
+deilighet
+deiligheten
+deilighetene
+deilighetens
+deiligheter
+deis
+deise
+deisen
+deisens
+deiser
+deiset
+deist
+deiste
+deister
+dekadanse
+dekadansen
+dekadansens
+dekadent
+dekadenten
+dekadentene
+dekadentens
+dekadenter
+dekadisk
+dekan
+dekanen
+dekanene
+dekanens
+dekaner
+dekanus
+dekanusen
+dekanusens
+dekar
+dekara
+dekarene
+dekaret
+dekarets
+dekk
+dekke
+dekkende
+dekkene
+dekker
+dekkes
+dekket
+dekketøy
+dekketøyet
+dekketøyets
+dekking
+dekkinga
+dekkingen
+dekkmønster
+dekkmønsteret
+dekkmønsterets
+dekkmønstra
+dekkmønstre
+dekkmønstrene
+dekkmønstret
+dekkmønstrets
+deklamasjon
+deklamasjonen
+deklamasjonene
+deklamasjonens
+deklamasjoner
+deklamere
+deklamerer
+deklamert
+deklamerte
+deklarasjon
+deklarasjonen
+deklarasjonene
+deklarasjonens
+deklarasjoner
+deklarere
+deklarert
+deklarerte
+deklinasjon
+deklinasjonen
+deklinasjonene
+deklinasjonens
+deklinasjoner
+deklinere
+deklinert
+deklinerte
+dekning
+dekningen
+dekningens
+dekoda
+dekode
+dekoder
+dekodet
+dekomponere
+dekomponerer
+dekomponert
+dekomponerte
+dekompresjon
+dekompresjonen
+dekompresjonene
+dekompresjonens
+dekompresjoner
+dekomprimere
+dekomprimerer
+dekomprimert
+dekomprimerte
+dekor
+dekorasjon
+dekorasjonen
+dekorasjonene
+dekorasjonens
+dekorasjoner
+dekorativ
+dekorative
+dekorativt
+dekoren
+dekorens
+dekorer
+dekorere
+dekorert
+dekorerte
+dekorum
+dekorumet
+dekorumets
+dekreditere
+dekrediterer
+dekreditert
+dekrediterte
+dekret
+dekreta
+dekretene
+dekreter
+dekretet
+dekretets
+deksel
+dekselet
+dekselets
+deksla
+dekslene
+deksler
+dekslet
+dekslets
+del
+ødela
+ødelagt
+ødelagte
+delaktig
+ødeland
+ødelandene
+ødelander
+ødelandet
+ødelandets
+dele
+delegasjon
+delegasjonen
+delegasjonene
+delegasjonens
+delegasjoner
+delegat
+delegaten
+delegatene
+delegatens
+delegater
+delegere
+delegeret
+delegert
+delegerte
+ødelegg
+ødelegge
+ødeleggelse
+ødeleggelsen
+ødeleggelsene
+ødeleggelsens
+ødeleggelser
+ødeleggende
+ødelegger
+ødelegges
+ødelegging
+ødelegginga
+ødeleggingen
+ødeleggingens
+delelig
+delen
+delene
+deler
+deles
+delet
+delfin
+delfinen
+delfinene
+delfinens
+delfiner
+delikat
+delikate
+delikatesse
+delikatesseforretning
+delikatesseforretningen
+delikatesseforretningene
+delikatesseforretningens
+delikatesseforretninger
+delikatessen
+delikatessene
+delikatessens
+delikatesser
+deling
+delinga
+delingen
+delingsgrensa
+delingsgrense
+delingsgrensen
+delingsgrensene
+delingsgrensens
+delingsgrenser
+delingspunkt
+delingspunkta
+delingspunktene
+delingspunkter
+delingspunktet
+delingspunktets
+delinkvent
+delinkventen
+delinkventene
+delinkventens
+delinkventer
+deliria
+deliriene
+delirier
+delirium
+delj
+delja
+delje
+deljet
+dels
+delstat
+delstaten
+delstatene
+delstatens
+delstater
+delt
+delta
+deltaen
+deltaens
+deltaet
+deltaets
+deltagende
+deltakelse
+deltakelsen
+deltakelsens
+deltakende
+deltaker
+deltakere
+deltakeren
+deltakerens
+deltakeres
+deltakerne
+deltakernes
+deltaking
+deltakinga
+deltakingen
+deltakingens
+deltar
+deltatt
+delte
+deltid
+deltids
+deltidsarbeid
+deltidsarbeider
+deltidsarbeidet
+deltidsarbeidets
+deltok
+delvis
+dem
+ødem
+demagog
+demagogen
+demagogene
+demagogens
+demagoger
+demagogi
+demagogien
+demagogiens
+demagogisk
+ødemark
+ødemarka
+ødemarken
+ødemarkene
+ødemarkens
+ødemarker
+dementere
+dementert
+dementerte
+dementi
+dementia
+dementiene
+dementier
+dementiet
+dementiets
+demilitarisere
+demilitariserer
+demilitarisert
+demilitariserte
+demisjon
+demisjonen
+demisjonene
+demisjonens
+demisjoner
+demisjonere
+demisjonert
+demisjonerte
+demma
+demme
+demming
+demminga
+demmingen
+demmingens
+demning
+demningen
+demningens
+demokrat
+demokraten
+demokratene
+demokratenes
+demokratens
+demokrater
+demokrati
+demokratia
+demokratiene
+demokratier
+demokratiet
+demokratiets
+demokratisere
+demokratisering
+demokratiseringa
+demokratiseringen
+demokratiseringens
+demokratisert
+demokratiserte
+demokratisk
+demokratiske
+demon
+demonen
+demonene
+demonens
+demoner
+demonisk
+demoniske
+demonstrant
+demonstranten
+demonstrantene
+demonstrantenes
+demonstrantens
+demonstranter
+demonstrasjon
+demonstrasjonen
+demonstrasjonene
+demonstrasjonens
+demonstrasjoner
+demonstrativ
+demonstrative
+demonstrativt
+demonstrere
+demonstrerer
+demonstreres
+demonstrert
+demonstrerte
+demontere
+demonterer
+demontert
+demonterte
+demoralisere
+demoralisering
+demoraliseringa
+demoraliseringen
+demoraliseringens
+demoralisert
+demoraliserte
+demp
+dempa
+dempe
+dempende
+demper
+dempere
+demperen
+demperens
+demperes
+demperne
+dempernes
+dempes
+dempet
+dempning
+dempningen
+dempningens
+demra
+demre
+demrer
+demret
+demring
+demringa
+demringen
+demringens
+demt
+demte
+den
+denaturert
+døende
+deng
+denge
+denger
+dengt
+dengte
+denne
+dennes
+denotasjon
+denotasjonen
+denotasjonene
+denotasjonens
+denotasjoner
+dens
+dental
+dentalen
+dentalene
+dentalens
+dentaler
+deodorant
+deodoranten
+deodorantene
+deodorantens
+deodoranter
+departement
+departementa
+departemental
+departementale
+departementalt
+departementene
+departementer
+departementet
+departementets
+departementsråd
+departementsråden
+departementsrådene
+departementsrådens
+departementsråder
+depesje
+depesjen
+depesjens
+deplasement
+deplasementa
+deplasementene
+deplasementer
+deplasementet
+deplasementets
+deponer
+deponere
+deponerer
+deponert
+deponerte
+deportasjon
+deportasjonen
+deportasjonene
+deportasjonens
+deportasjoner
+deporter
+deportere
+deporterer
+deportert
+deporterte
+deposita
+depositaene
+depositum
+deposituma
+depositumene
+depositumer
+depositumet
+depositumets
+depot
+depota
+depotavdeling
+depotavdelinga
+depotavdelingen
+depotavdelingene
+depotavdelingens
+depotavdelinger
+depotene
+depoter
+depotet
+depotets
+depresjon
+depresjonen
+depresjonene
+depresjonens
+depresjoner
+deprimere
+deprimerende
+deprimert
+deprimerte
+deprivatisere
+deprivatiserer
+deprivatisert
+deprivatiserte
+deputasjon
+deputasjonen
+deputasjonene
+deputasjonens
+deputasjoner
+deputer
+deputere
+deputerer
+deputert
+deputerte
+deputertkammer
+deputertkammeret
+deputertkammerets
+deputertkamra
+deputertkamre
+deputertkamrene
+der
+derav
+derby
+derbyet
+derbyets
+dere
+deres
+deretter
+derfor
+derfra
+deri
+deriblant
+derifra
+derigjennom
+derimellom
+derimot
+derivasjon
+derivasjonen
+derivasjonene
+derivasjonens
+derivasjoner
+derivat
+derivata
+derivatene
+derivater
+derivatet
+derivatets
+derivativ
+derivativa
+derivativene
+derivativer
+derivativet
+derivativets
+deriver
+derivere
+deriverer
+derivert
+deriverte
+dermed
+dernest
+derom
+deromkring
+derover
+derpå
+derrik
+derriken
+derrikene
+derrikens
+derriker
+dersom
+dersteds
+dert
+derte
+derten
+dertil
+derunder
+derutover
+derved
+dervisj
+dervisjen
+dervisjene
+dervisjens
+dervisjer
+derværende
+desarmere
+desarmert
+desarmerte
+desavuere
+desavuert
+desavuerte
+descendent
+descendenten
+descendentene
+descendentens
+descendenter
+desember
+desentralisere
+desentraliserer
+desentralisering
+desentraliseringa
+desentraliseringen
+desentraliseringens
+desentralisert
+desentraliserte
+desertere
+desertert
+deserterte
+desertør
+desertøren
+desertørene
+desertørens
+desertører
+desibel
+desibelen
+desibelens
+desiderabel
+desiderata
+desiderataene
+desideratum
+desideratumet
+desideratumets
+desidere
+desidert
+desiderte
+design
+designe
+designen
+designens
+designer
+designere
+designeren
+designerens
+designeres
+designerne
+designernes
+desiliter
+desilitere
+desiliteren
+desiliterens
+desiliteres
+desiliterne
+desiliternes
+desillusjonere
+desillusjonert
+desillusjonerte
+desimal
+desimale
+desimalen
+desimalens
+desimaler
+desimalkomma
+desimalt
+desimaltall
+desimaltalla
+desimaltallene
+desimaltallet
+desimaltallets
+desimere
+desimert
+desimerte
+desimeter
+desimetere
+desimeteren
+desimeterens
+desimeteres
+desimeterne
+desimeternes
+desinfeksjon
+desinfeksjonen
+desinfeksjonene
+desinfeksjonens
+desinfeksjoner
+desinfisere
+desinfisering
+desinfiseringa
+desinfiseringen
+desinfiseringens
+desinfisert
+desinfiserte
+desirabel
+desisjon
+desisjonen
+desisjonene
+desisjonens
+desisjoner
+desorientert
+desorienterte
+despekt
+despekten
+despektens
+despekter
+desperado
+desperadoen
+desperadoene
+desperadoens
+desperadoer
+desperasjon
+desperasjonen
+desperasjonene
+desperasjonens
+desperasjoner
+desperat
+desperate
+despot
+despoten
+despotene
+despotens
+despoter
+despoti
+despotia
+despotiene
+despotier
+despotiet
+despotiets
+despotisk
+dess
+dessert
+dessertbord
+dessertborda
+dessertbordene
+dessertbordet
+dessertbordets
+desserten
+dessertene
+dessertens
+desserter
+dessertvin
+dessertvinen
+dessertvinene
+dessertvinens
+dessertviner
+dessin
+dessinen
+dessinene
+dessinens
+dessiner
+dessinere
+dessinerer
+dessinert
+dessinerte
+desslike
+dessuten
+dessverre
+destillasjon
+destillasjonen
+destillasjonene
+destillasjonens
+destillasjoner
+destillat
+destillata
+destillatene
+destillater
+destillatet
+destillatets
+destillere
+destillerer
+destillering
+destilleringa
+destilleringen
+destilleringens
+destillert
+destillerte
+destinasjon
+destinasjonen
+destinasjonene
+destinasjonens
+destinasjoner
+desto
+destruer
+destruere
+destruerer
+destruert
+destruerte
+destruksjon
+destruksjonen
+destruksjonene
+destruksjonens
+destruksjoner
+destruktiv
+destruktive
+destruktivt
+det
+ødet
+detalj
+detaljen
+detaljene
+detaljens
+detaljer
+detaljere
+detaljert
+detaljerte
+detaljforretning
+detaljforretningen
+detaljforretningene
+detaljforretningens
+detaljforretninger
+detaljist
+detaljisten
+detaljistene
+detaljistens
+detaljister
+detasjement
+detasjementa
+detasjementene
+detasjementer
+detasjementet
+detasjementets
+detektime
+detektimen
+detektimens
+detektiv
+detektivarbeid
+detektivarbeidet
+detektivarbeidets
+detektiven
+detektivene
+detektivens
+detektiver
+detektivroman
+detektivromanen
+detektivromanene
+detektivromanens
+detektivromaner
+detektor
+detektoren
+detektorene
+detektorens
+detektorer
+determinant
+determinanten
+determinantene
+determinantens
+determinanter
+determinisme
+determinismen
+determinismens
+deterministisk
+detonasjon
+detonasjonen
+detonasjonene
+detonasjonens
+detonasjoner
+detonator
+detonatoren
+detonatorene
+detonatorens
+detonatorer
+detonere
+detonert
+detonerte
+detronisere
+detroniserer
+detronisert
+detroniserte
+dets
+dett
+dette
+dettet
+detting
+dettinga
+dettingen
+dettingens
+deus
+devaluasjon
+devaluasjonen
+devaluasjonene
+devaluasjonens
+devaluasjoner
+devaluer
+devaluere
+devaluerer
+devaluering
+devalueringa
+devalueringen
+devalueringens
+devaluert
+devaluerte
+deviasjon
+deviasjonen
+deviasjonene
+deviasjonens
+deviasjoner
+deviere
+devierer
+deviert
+devierte
+devise
+devisen
+devisene
+devisens
+deviser
+devon
+døgenikt
+døgenikten
+døgeniktene
+døgeniktens
+døgenikter
+døger
+døgeret
+døgerets
+døgervill
+døgn
+døgna
+døgnet
+døgnets
+døgnflua
+døgnflue
+døgnfluen
+døgnfluene
+døgnfluens
+døgnfluer
+døgns
+døgra
+døgrene
+di
+dia
+diabetiker
+diabetikere
+diabetikeren
+diabetikerens
+diabetikeres
+diabetikerne
+diabetikernes
+diabetisk
+diabolsk
+diadem
+diadema
+diademene
+diademer
+diademet
+diademets
+diagnose
+diagnosen
+diagnosens
+diagnosestilling
+diagnosestillingen
+diagnosestillingens
+diagnostiker
+diagnostikere
+diagnostikeren
+diagnostikerens
+diagnostikeres
+diagnostikerne
+diagnostikernes
+diagnostisere
+diagnostisert
+diagnostiserte
+diagonal
+diagonalen
+diagonalens
+diagonalt
+diagram
+diagramma
+diagrammene
+diagrammer
+diagrammet
+diagrammets
+diakon
+diakonen
+diakonene
+diakonens
+diakoner
+diakonissa
+diakonisse
+diakonissen
+diakonissens
+diakrise
+diakrisen
+diakrisens
+diakritisk
+diakritiske
+diakron
+diakroni
+diakronien
+diakroniens
+dialekt
+dialektal
+dialektale
+dialektalt
+dialekten
+dialektene
+dialektens
+dialekter
+dialog
+dialogen
+dialogene
+dialogens
+dialoger
+dialogisk
+diam
+diamant
+diamanten
+diamantene
+diamantens
+diamanter
+diameter
+diameteren
+diameterens
+diametral
+diametrale
+diametralt
+diametrene
+diaré
+diareen
+diareene
+diareens
+diareer
+dias
+diasa
+diasene
+diaset
+diasets
+diaskop
+diaskopa
+diaskopene
+diaskoper
+diaskopet
+diaskopets
+diastase
+diastasen
+diastasens
+diastolisk
+diatoniske
+die
+dielektrisitet
+dielektrisiteten
+dielektrisitetens
+dier
+diesel
+dieselen
+dieselens
+dieselmotor
+dieselmotoren
+dieselmotorene
+dieselmotorens
+dieselmotorer
+diet
+diett
+dietten
+diettene
+diettens
+dietter
+differanse
+differansen
+differansene
+differansens
+differanser
+differens
+differensen
+differensene
+differensens
+differenser
+differensial
+differensiala
+differensialene
+differensialer
+differensialet
+differensialets
+differensialregninga
+differensiere
+differensierer
+differensiering
+differensieringa
+differensieringen
+differensieringens
+differensiert
+differensierte
+different
+differere
+differerer
+differert
+differerte
+diffus
+diffuse
+diffusjon
+diffusjonen
+diffusjonene
+diffusjonens
+diffusjoner
+diffust
+difteri
+difteritt
+difteritten
+diftong
+diftongen
+diftongene
+diftongens
+diftonger
+diftongisk
+digel
+digelen
+digelens
+digelstål
+digelstålet
+digelstålets
+diger
+digert
+digital
+digitalisert
+diglene
+digler
+digre
+digresjon
+digresjonen
+digresjonene
+digresjonens
+digresjoner
+dike
+diket
+dikkedarer
+dikotomi
+dikotomien
+dikotomiene
+dikotomiens
+dikotomier
+diksjon
+diksjonen
+diksjonene
+diksjonens
+diksjoner
+dikt
+dikta
+diktafon
+diktafonen
+diktafonene
+diktafonens
+diktafoner
+diktat
+diktata
+diktaten
+diktatene
+diktatens
+diktater
+diktatet
+diktatets
+diktator
+diktatoren
+diktatorene
+diktatorens
+diktatorer
+diktatorisk
+diktatoriske
+diktatur
+diktatura
+diktaturene
+diktaturer
+diktaturet
+diktaturets
+dikte
+diktene
+dikter
+diktere
+dikteren
+dikterens
+dikterer
+dikterisk
+dikteriske
+diktert
+dikterte
+diktet
+dikting
+diktinga
+diktingen
+diktingens
+diktning
+diktningen
+diktningens
+diktsamling
+diktsamlinga
+diktsamlingen
+diktsamlingene
+diktsamlingens
+diktsamlinger
+dilemma
+dilemmaene
+dilemmaer
+dilemmaet
+dilemmaets
+dilettant
+dilettanten
+dilettantene
+dilettantens
+dilettanter
+dilettantisk
+diligence
+diligencen
+diligencens
+dill
+dilla
+dille
+dillen
+dillens
+dillet
+dilt
+dilta
+dilte
+diltet
+dim
+dimensjon
+dimensjonen
+dimensjonene
+dimensjonens
+dimensjoner
+dimensjonere
+dimensjonert
+dimensjonerte
+diminutiv
+diminutivet
+diminutivets
+diminutivt
+dimisjon
+dimisjonen
+dimisjonene
+dimisjonens
+dimisjoner
+dimisjonere
+dimisjonerer
+dimisjonert
+dimisjonerte
+dimittere
+dimittert
+dimitterte
+dimma
+dimme
+dimmet
+dimt
+din
+dinar
+dinaren
+dinarene
+dinarens
+dinarer
+dine
+diner
+dinere
+dineren
+dinerens
+dineres
+dingla
+dingle
+dingler
+dinglet
+dings
+dingsen
+dingsene
+dingsens
+dingser
+dinosaur
+dinosauren
+dinosaurene
+dinosaurens
+dinosaurer
+dinosaurus
+dinosaurusen
+dinosaurusens
+diode
+dioden
+diodens
+diplom
+diploma
+diplomat
+diplomaten
+diplomatene
+diplomatens
+diplomater
+diplomati
+diplomatiet
+diplomatiets
+diplomatisk
+diplomatiske
+diplomeksamen
+diplomeksamens
+diplomer
+diplomet
+diplomets
+ødipuskompleks
+ødipuskomplekset
+ødipuskompleksets
+direksjon
+direksjonen
+direksjonene
+direksjonens
+direksjoner
+direkte
+direkten
+direktiv
+direktiva
+direktivene
+direktiver
+direktivet
+direktivets
+direktorat
+direktorata
+direktoratene
+direktorater
+direktoratet
+direktoratets
+direktør
+direktøren
+direktørene
+direktørens
+direktører
+direktørs
+dirigent
+dirigenten
+dirigentene
+dirigentens
+dirigenter
+diriger
+dirigere
+dirigerer
+dirigeres
+dirigert
+dirigerte
+dirk
+dirka
+dirke
+dirkefri
+dirken
+dirkens
+dirket
+dirra
+dirre
+dirrer
+dirret
+dis
+disen
+disens
+disfavør
+disfavøren
+disfavørens
+disharmoni
+disharmonien
+disharmoniene
+disharmoniens
+disharmonier
+disig
+disiplene
+disipler
+disiplin
+disiplinen
+disiplinene
+disiplinens
+disipliner
+disiplinere
+disiplinert
+disiplinerte
+disiplinær
+disiplinære
+disiplinært
+disippel
+disippelen
+disippelens
+disk
+diska
+diskant
+diskanten
+diskantene
+diskantens
+diskanter
+diske
+disken
+diskens
+disker
+disket
+diskett
+disketten
+diskettene
+diskettens
+disketter
+diskettnavn
+diskettnavnet
+diskettnavnets
+diskettstasjon
+diskettstasjonen
+diskettstasjonene
+diskettstasjonens
+diskettstasjoner
+diskjockey
+diskjockeyen
+diskjockeyene
+diskjockeyens
+diskjockeyer
+diskløse
+diskontere
+diskontert
+diskonterte
+diskontinuerlig
+diskontinuerlige
+diskontinuitet
+diskontinuiteten
+diskontinuitetene
+diskontinuitetens
+diskontinuiteter
+diskonto
+diskontoen
+diskontoene
+diskontoens
+diskontoer
+diskos
+diskosen
+diskosene
+diskosens
+diskoser
+diskotek
+diskoteka
+diskotekene
+diskoteker
+diskoteket
+diskotekets
+diskplass
+diskplassen
+diskplassens
+diskré
+diskrée
+diskresjon
+diskresjonen
+diskresjonene
+diskresjonens
+diskresjoner
+diskret
+diskrete
+diskriminere
+diskriminerende
+diskrimineres
+diskriminering
+diskrimineringa
+diskrimineringen
+diskrimineringens
+diskriminert
+diskriminerte
+diskusjon
+diskusjonen
+diskusjonene
+diskusjonens
+diskusjoner
+diskusjonsmøta
+diskusjonsmøte
+diskusjonsmøtene
+diskusjonsmøter
+diskusjonsmøtet
+diskusjonsmøtets
+diskutabel
+diskutabelt
+diskutable
+diskuter
+diskutere
+diskuterer
+diskuteres
+diskutert
+diskuterte
+diskvalifisere
+diskvalifisert
+diskvalifiserte
+dispasjør
+dispensasjon
+dispensasjonen
+dispensasjonene
+dispensasjonens
+dispensasjoner
+dispenser
+dispenseren
+dispenserens
+dispensert
+dispenserte
+displaced
+disponent
+disponenten
+disponentene
+disponentens
+disponenter
+disponere
+disponerer
+disponeres
+disponering
+disponeringa
+disponeringen
+disponeringens
+disponert
+disponerte
+disponibel
+disponibelt
+disponible
+disposisjon
+disposisjonen
+disposisjonene
+disposisjonens
+disposisjoner
+disposisjonsfond
+disposisjonsfondet
+disposisjonsfondets
+disposisjonsrett
+disposisjonsretten
+disposisjonsrettens
+disputas
+disputasen
+disputasene
+disputasens
+disputaser
+disputere
+disputerer
+disputert
+disputerte
+disputt
+disputten
+disputtene
+disputtens
+disputter
+diss
+dissa
+disse
+dissekere
+dissekert
+dissekerte
+disseksjon
+disseksjonen
+disseksjonene
+disseksjonens
+disseksjoner
+dissens
+dissensen
+dissensene
+dissensens
+dissenser
+dissenter
+dissentere
+dissenteren
+dissenterens
+dissenterer
+dissentert
+dissenterte
+disses
+disset
+dissonans
+dissonansen
+dissonansene
+dissonansens
+dissonanser
+dissonere
+dissonerer
+dissonert
+dissonerte
+distanse
+distansen
+distansene
+distansens
+distanser
+distansere
+distanserer
+distansering
+distanseringa
+distanseringen
+distanseringens
+distansert
+distanserte
+distingvert
+distinksjon
+distinksjonen
+distinksjonene
+distinksjonens
+distinksjoner
+distinkt
+distré
+distrahere
+distrahert
+distraherte
+distraksjon
+distraksjonen
+distraksjonene
+distraksjonens
+distraksjoner
+distrée
+distribuere
+distribueres
+distribuert
+distribuerte
+distribusjon
+distribusjonen
+distribusjonene
+distribusjonens
+distribusjoner
+distrikt
+distriktene
+distriktenes
+distrikter
+distriktet
+distriktets
+distrikts
+distriktshøgskole
+distriktshøgskolen
+distriktshøgskolene
+distriktshøgskolens
+distriktshøgskoler
+distriktskontor
+distriktskontorene
+distriktskontorer
+distriktskontoret
+distriktskontorets
+distriktslege
+distriktslegen
+distriktslegens
+distriktspolitikk
+distriktspolitikken
+distriktspolitikkens
+distriktssjef
+distriktssjefen
+distriktssjefene
+distriktssjefens
+distriktssjefer
+distriktsutbygging
+distriktsutbygginga
+distriktsutbyggingen
+distriktsutbyggingens
+dit
+dithørende
+ditt
+ditten
+ditto
+diva
+divaen
+divaene
+divaens
+divaer
+divan
+divanen
+divanene
+divanens
+divaner
+divergens
+divergensen
+divergensene
+divergensens
+divergenser
+divergere
+divergerende
+divergert
+divergerte
+diverse
+dividend
+dividenden
+dividendene
+dividendens
+dividender
+dividere
+dividerer
+dividert
+dividerte
+divisjon
+divisjonen
+divisjonene
+divisjonens
+divisjoner
+divisjonskamp
+divisjonskampen
+divisjonskampens
+divisjonsklubb
+divisjonsklubben
+divisjonsklubbene
+divisjonsklubbens
+divisjonsklubber
+divisjonslag
+divisjonslaga
+divisjonslagene
+divisjonslaget
+divisjonslagets
+divisor
+divisoren
+divisorene
+divisorens
+divisorer
+djerv
+djerve
+djervt
+djevel
+djevelen
+djevelens
+djevelsk
+djevlene
+djevler
+djunke
+djunken
+djunkens
+djup
+djupe
+djupet
+djupfryse
+djupfrysing
+djupfrysinga
+djupfrysingen
+djupfrysingens
+djupfryst
+djupfryste
+djupål
+djupålen
+djuplendt
+djupålens
+djuplina
+djupline
+djupsagn
+djupsagna
+djupt
+døkk
+døkt
+dl
+døl
+døla
+dølehest
+dølehesten
+dølehestene
+dølehestens
+dølehester
+dølen
+dølene
+dølens
+døler
+dølge
+dølger
+dølgsmål
+dølgsmålet
+dølgsmålets
+dåm
+døm
+døme
+dåmen
+dåmens
+dømes
+dømet
+dømme
+dømmekraft
+dømmekrafta
+dømmekraften
+dømmekraftens
+dømmer
+dømmes
+dømt
+dømte
+dån
+dåna
+dåne
+dånet
+dønn
+dønne
+dønner
+dønnet
+dønning
+dønningen
+dønningene
+dønningens
+dønninger
+do
+dobba
+dobbe
+dobbel
+dobbelt
+dobbelte
+dobbeltkonsonant
+dobbeltkonsonanten
+dobbeltkonsonantens
+dobbeltspill
+dobbeltspillet
+dobbeltspillets
+dobben
+dobbens
+dobla
+doble
+doblet
+doen
+doet
+dog
+dogg
+dogga
+dogge
+doggen
+doggens
+dogget
+doggete
+dogmatiker
+dogmatikere
+dogmatikeren
+dogmatikerens
+dogmatikeres
+dogmatikerne
+dogmatikernes
+dogmatikk
+dogmatikken
+dogmatikkens
+dogmatisk
+dogme
+dogmer
+dogmet
+dokk
+dokka
+dokke
+dokken
+dokkene
+dokkens
+dokker
+doktor
+doktorand
+doktoranden
+doktorandene
+doktorandens
+doktorander
+doktoravhandling
+doktoravhandlinga
+doktoravhandlingen
+doktoravhandlingene
+doktoravhandlingens
+doktoravhandlinger
+doktordisputas
+doktordisputasen
+doktordisputasene
+doktordisputasens
+doktordisputaser
+doktoren
+doktorens
+doktorgrad
+doktorgraden
+doktorgradene
+doktorgradens
+doktorgrader
+doktors
+doktrine
+doktrinen
+doktrinens
+doktrinær
+doktrinære
+doktrinært
+dokument
+dokumenta
+dokumentalist
+dokumentalisten
+dokumentalistene
+dokumentalistens
+dokumentalister
+dokumentarfilm
+dokumentarfilmen
+dokumentarfilmene
+dokumentarfilmens
+dokumentarfilmer
+dokumentasjon
+dokumentasjonen
+dokumentasjonene
+dokumentasjonens
+dokumentasjoner
+dokumentene
+dokumenter
+dokumentere
+dokumenteres
+dokumentering
+dokumenteringa
+dokumenteringen
+dokumenteringens
+dokumentert
+dokumenterte
+dokumentet
+dokumentets
+dokumentfalsk
+dolk
+dolka
+dolke
+dolken
+dolkens
+dolker
+dolket
+dollar
+dollaren
+dollarens
+dollars
+dollartegn
+dollartegnet
+dollartegnets
+dolp
+dolpa
+dolpene
+dolper
+dolpet
+dom
+dombjella
+dombjelle
+dombjellen
+dombjellens
+dombjeller
+dombjølla
+dombjølle
+dombjøllen
+dombjøllens
+domen
+domena
+domenen
+domenene
+domenens
+domener
+domenet
+domfelle
+domfelt
+domfelte
+dominans
+dominansen
+dominansens
+dominere
+dominerende
+dominerer
+domineres
+dominert
+dominerte
+dominikansk
+dominion
+dominionen
+dominionene
+dominionens
+dominioner
+domino
+dominoen
+dominoene
+dominoens
+dominoer
+domkirke
+domkirken
+domkirkens
+dommen
+dommene
+dommer
+dommere
+dommeren
+dommerens
+dommeres
+dommerfullmektig
+dommerfullmektigen
+dommerfullmektigene
+dommerfullmektigens
+dommerfullmektiger
+dommerne
+dommernes
+dompap
+dompapen
+dompapene
+dompapens
+dompaper
+domprost
+domprosten
+domprostene
+domprostens
+domproster
+domrian
+doms
+domstol
+domstolen
+domstolene
+domstolens
+domstoler
+don
+donasjon
+donasjonen
+donasjonene
+donasjonens
+donasjoner
+donator
+donatoren
+donatorene
+donatorens
+donatorer
+done
+donere
+donerer
+donert
+donerte
+donet
+dongeri
+dongerien
+dongeriens
+dongeriklær
+doning
+doninga
+doningen
+doningens
+donkraft
+donkrafta
+donkraften
+donkraftene
+donkraftens
+donkrafter
+donor
+donoren
+donorene
+donorens
+donorer
+dopa
+dope
+doper
+dopet
+doping
+dopinga
+dopingen
+dopingens
+doppler
+doppsko
+doppskoen
+doppskoens
+dor
+dora
+dore
+doren
+dorens
+dorer
+dorere
+doreren
+dorerens
+doreres
+dorerne
+dorernes
+doret
+dorg
+dorga
+dorge
+dorgen
+dorgende
+dorgens
+dorger
+dorget
+dorging
+dorginga
+dorgingen
+dorgingens
+dorm
+dorma
+dorme
+dormer
+dormet
+dorsk
+dorske
+dorskt
+dory
+doryen
+doryens
+dose
+dosen
+dosene
+dosens
+dosent
+dosenten
+dosentene
+dosentens
+dosenter
+dosentur
+dosentura
+dosenturene
+dosenturer
+dosenturet
+dosenturets
+doser
+dosere
+doserer
+dosert
+doserte
+dosis
+dosisen
+dosisene
+dosisens
+dosiser
+dott
+dotte
+dotten
+dottens
+dotter
+doublé
+doubleen
+doubleene
+doubleens
+doubleer
+dov
+doven
+dovenskap
+dovenskapen
+dovenskapens
+dovent
+dovna
+dovne
+dovnet
+dovning
+dovningen
+dovningene
+dovningens
+dovninger
+dåp
+døp
+døpe
+døpefont
+døpefonten
+døpefontene
+døpefontens
+døpefonter
+dåpen
+dåpene
+dåpens
+dåper
+døper
+døpes
+dåpsattest
+dåpsattesten
+dåpsattestene
+dåpsattestens
+dåpsattester
+døpt
+døpte
+dr
+dør
+dra
+dåra
+døra
+drabant
+drabantby
+drabantbyen
+drabantbyene
+drabantbyens
+drabantbyer
+drabanten
+drabantene
+drabantens
+drabanter
+drabelig
+dradd
+draes
+drag
+dragdokka
+dragdokke
+dragdokkene
+dragdokker
+drage
+dragelse
+dragelsen
+dragelsens
+dragen
+drager
+drageren
+dragerens
+drages
+draget
+draging
+draginga
+dragingen
+dragkamp
+dragkampen
+dragkampene
+dragkampens
+dragkamper
+dragkista
+dragkiste
+dragkisten
+dragkistene
+dragkistens
+dragkister
+dragne
+dragning
+dragningen
+dragningens
+drags
+dragsa
+dragse
+dragset
+dragsmål
+dragsmålet
+dragsmålets
+dragspell
+dragspellet
+dragspellets
+dragspill
+dragspillet
+dragspillets
+dragsug
+dragsuget
+dragsugets
+drake
+draken
+drakens
+drakk
+drakt
+drakta
+drakten
+draktene
+draktens
+drakter
+dram
+drama
+dramaene
+dramaer
+dramaet
+dramaets
+dramatiker
+dramatikere
+dramatikeren
+dramatikerens
+dramatikeres
+dramatikerne
+dramatikernes
+dramatikk
+dramatikken
+dramatikkens
+dramatisk
+dramatiske
+dramb
+drambet
+drambets
+dramme
+drammen
+drammens
+dranker
+drankere
+drankeren
+drankerens
+drankeres
+drankerne
+drankernes
+drap
+drapa
+drapene
+draper
+drapere
+drapert
+draperte
+drapet
+drapets
+drapp
+drappen
+drappene
+drappens
+drapper
+drappfarga
+drappfarget
+drar
+dras
+drasjere
+drasjerer
+drasjert
+drasjerte
+drass
+drassa
+drasse
+drasset
+drastisk
+drastiske
+dratt
+dratta
+dratte
+dravle
+dravlen
+dravlens
+drawback
+drawbacka
+drawbackene
+drawbacket
+drawbackets
+dåre
+dregg
+dreggen
+dreggene
+dreggens
+dregger
+dregget
+drei
+dreibar
+dreibare
+dreibart
+dreide
+dreie
+dreiebenk
+dreiebenken
+dreiebenkene
+dreiebenkens
+dreiebenker
+dreiebok
+dreieboka
+dreieboken
+dreiebokens
+dreiel
+dreielen
+dreielens
+dreiemoment
+dreiemomentet
+dreiemomentets
+dreier
+dreiet
+dreiing
+dreiinga
+dreiingen
+dreiingens
+dreil
+dreilen
+dreilens
+dreilet
+dreilets
+dreining
+dreiningen
+dreiningens
+dreis
+dreisen
+dreisene
+dreisens
+dreiser
+dreiv
+drektig
+drektighet
+drektigheten
+drektighetens
+dåren
+døren
+drene
+dørene
+drener
+drenere
+drenerer
+drenert
+drenerte
+dreng
+drengen
+drengene
+drengens
+drenger
+drengestua
+drengestue
+drengestuene
+drengestuer
+dårens
+drensrør
+drensrøret
+drensrørets
+drent
+drente
+drep
+drepe
+drepende
+dreper
+drept
+drepte
+dører
+dresin
+dresinen
+dresinene
+dresinens
+dresiner
+dress
+dresse
+dressen
+dressens
+dresser
+dressere
+dressert
+dresserte
+dressing
+dressingen
+dressingene
+dressingens
+dressinger
+dressør
+dressøren
+dressørene
+dressørens
+dressører
+dressur
+dressuren
+dressurene
+dressurens
+dressurer
+dåret
+drett
+drette
+drev
+dreve
+dreven
+drevent
+drevet
+drevja
+drevje
+drevne
+drøft
+drøfta
+drøfte
+drøftelse
+drøftelsen
+drøftelsene
+drøftelsens
+drøftelser
+drøfter
+drøftes
+drøftet
+drøfting
+drøftinga
+drøftingen
+drøftingene
+drøftingens
+drøftinger
+dørg
+dørgende
+dørgløtt
+dørgløtten
+dørgløttens
+dørhandtak
+dørhandtaket
+dørhandtakets
+dribla
+drible
+driblet
+drift
+drifta
+drifte
+driften
+driftens
+drifter
+driftig
+driftige
+driftsbestyrer
+driftsbestyrere
+driftsbestyreren
+driftsbestyrerens
+driftsbestyreres
+driftsbestyrerne
+driftsbestyrernes
+driftsikre
+driftskostnad
+driftskostnaden
+driftskostnadene
+driftskostnadens
+driftskostnader
+driftsoverskudd
+driftsoverskuddet
+driftsoverskuddets
+driftsår
+driftsregnskap
+driftsregnskapet
+driftsregnskapets
+driftsresultat
+driftsresultater
+driftsresultatet
+driftsresultatets
+driftsåret
+driftsårets
+driftstilskudd
+driftstilskuddene
+driftstilskuddet
+driftstilskuddets
+driftsunderskott
+driftsunderskudd
+driftsunderskuddet
+driftsunderskuddets
+driftsutgift
+driftsutgiften
+driftsutgiftene
+driftsutgiftens
+driftsutgifter
+drikk
+drikke
+drikken
+drikkens
+drikker
+drikket
+drikkevann
+drikkevannet
+drikkevannets
+drikkevare
+drikkevaren
+drikkevarene
+drikkevarens
+drikkevarer
+drikkfeldig
+drikking
+drikkinga
+drikkingen
+drikkingens
+drikks
+drill
+drillbor
+drillbora
+drillboren
+drillborene
+drillborens
+drillborer
+drillboret
+drillborets
+drille
+drillen
+drillens
+drink
+drinken
+drinkene
+drinkens
+drinker
+driste
+drister
+dristet
+dristig
+dristige
+dristigere
+dristighet
+dristigheten
+dristighetens
+driv
+drive
+drivende
+driver
+drives
+drivet
+drivhjul
+drivhjula
+drivhjulene
+drivhus
+drivhusa
+drivhusene
+drivhuset
+drivhusets
+drivkraft
+drivkrafta
+drivkraften
+drivkraftens
+drivkreftene
+drivkrefter
+drivstoff
+drivstoffa
+drivstoffene
+drivstoffer
+drivstoffet
+drivstoffets
+drivverdighetserklæring
+drivverdighetserklæringen
+drivverdighetserklæringens
+dråk
+dørk
+dråka
+dørken
+dråkene
+dørkene
+dørkens
+dørker
+dråket
+dråkets
+dørklokka
+dørklokke
+dørklokken
+dørklokkene
+dørklokkens
+dørklokker
+dårlig
+dårlige
+dårligere
+dårlighet
+dårligheten
+dårlighetens
+dårligst
+dårligste
+drøm
+drømme
+drømmen
+drømmens
+drømmer
+drømmeri
+drømmeria
+drømmeriene
+drømmerier
+drømmeriet
+drømmeriets
+drømming
+drømminga
+drømmingen
+drømmingens
+drømt
+drømte
+drønn
+drønne
+drønnet
+drog
+droga
+drogen
+drogene
+drogens
+droger
+drogeri
+drogeria
+drogeriene
+drogeriet
+drogeriets
+dromedar
+dromedaren
+dromedarene
+dromedarens
+dromedarer
+drone
+dronen
+dronens
+dronning
+dronninga
+dronningen
+dronningene
+dronningens
+dronninger
+drople
+droplet
+droplete
+droppa
+droppe
+dropper
+droppet
+drops
+dropsa
+dropsen
+dropsene
+dropsens
+dropset
+dropsets
+drosja
+drosje
+drosjeeieres
+drosjen
+drosjene
+drosjens
+drosjer
+drosjesjåfør
+drosjesjåføren
+drosjesjåførene
+drosjesjåførens
+drosjesjåfører
+droslene
+drosler
+drossel
+drosselen
+drosselens
+drossler
+drott
+drotten
+drottene
+drottens
+drotter
+drottsete
+drottsetet
+drottsetets
+dråpa
+dråpe
+drøpel
+drøpelen
+drøpelens
+dråpen
+dråpene
+dråpens
+dråper
+drøplene
+drøpler
+dørs
+dårskap
+dårskapen
+dårskapene
+dårskapens
+dårskaper
+dørslag
+dørslaga
+dørslagene
+dørslaget
+dørslagets
+drøss
+drøssen
+drøsset
+drått
+drua
+drue
+druen
+druens
+drukken
+drukkent
+drukket
+drukna
+drukne
+drukner
+druknet
+drukningsulykka
+drukningsulykke
+drukningsulykken
+drukningsulykkene
+drukningsulykkens
+drukningsulykker
+drøv
+drøvel
+drøvelen
+drøvelens
+drøvlene
+drøvler
+dørvrider
+dørvridere
+dørvrideren
+dørvriderens
+dørvrideres
+dørvriderne
+dørvridernes
+drøvtygge
+drøvtygger
+drøvtyggere
+drøvtyggeren
+drøvtyggerens
+drøvtyggeres
+drøvtyggerne
+drøvtyggernes
+drøvtygget
+drøy
+drøyde
+drøye
+drøyer
+dryg
+drygde
+dryge
+drygsel
+drygselen
+drygselens
+drygsla
+drygt
+drypp
+dryppe
+drypper
+dryppert
+drypperten
+dryppertene
+dryppertens
+drypperter
+dryppet
+drypt
+drypte
+dryss
+drysse
+drysser
+drysset
+dryst
+dryste
+drøyt
+døs
+dåse
+døse
+ødsel
+ødselhet
+ødselheten
+ødselhetens
+ødselt
+dåsen
+døsen
+dåsens
+døsens
+døsent
+døser
+dåset
+dåsete
+døsig
+ødsla
+ødsle
+ødsler
+ødsles
+ødslet
+ødslig
+døsne
+døst
+døste
+ødt
+ødte
+døtre
+døtrene
+døtrenes
+døtrer
+du
+dua
+dualisme
+dualismen
+dualismens
+dualistisk
+dubb
+dubba
+dubbe
+dubbet
+dublé
+dubleen
+dubleens
+dublere
+dublert
+dublerte
+dublett
+dubletten
+dublettene
+dublettens
+dubletter
+due
+duell
+duellant
+duellanten
+duellantene
+duellantens
+duellanter
+duellen
+duellene
+duellens
+dueller
+duellere
+duellert
+duellerte
+duene
+duer
+duett
+duetten
+duettene
+duettens
+duetter
+duft
+dufta
+dufte
+duften
+duftens
+dufter
+duftet
+dug
+dugde
+duge
+dugelig
+duger
+dugg
+dugga
+dugge
+duggen
+duggens
+dugget
+duglaus
+dugleik
+dugleiken
+dugleikens
+dugnad
+dugnaden
+dugnadene
+dugnadens
+dugnader
+dugurd
+dugurden
+dugurdene
+dugurdens
+dugurder
+duk
+duka
+dukat
+duke
+duken
+dukens
+duker
+duket
+dukk
+dukka
+dukke
+dukken
+dukkens
+dukker
+dukkert
+dukkerten
+dukkertene
+dukkertens
+dukkerter
+dukket
+dukknakka
+dukknakket
+duks
+dulgt
+dulgte
+dull
+dulla
+dulle
+dullet
+dult
+dulta
+dulte
+dulten
+dultens
+dultet
+dum
+dumdristig
+dumdumkula
+dumdumkule
+dumdumkulen
+dumdumkulens
+dumhet
+dumhets
+dumma
+dumme
+dummet
+dummy
+dummyen
+dummyene
+dummyens
+dummyer
+dump
+dumpa
+dumpe
+dumpen
+dumpens
+dumper
+dumpet
+dumping
+dumpinga
+dumpingen
+dumpingens
+dumrian
+dumrianen
+dumrianene
+dumrianens
+dumrianer
+dumt
+dun
+duna
+dunder
+dundere
+dunderen
+dunderens
+dunderet
+dundra
+dundre
+dundret
+dundyna
+dundyne
+dunen
+dunene
+dunens
+dunet
+dunete
+dunets
+dunge
+dungen
+dungens
+dunk
+dunka
+dunke
+dunkel
+dunkelt
+dunken
+dunkens
+dunker
+dunket
+dunkle
+dunst
+dunsta
+dunste
+dunsten
+dunstens
+dunstet
+dunvær
+dunværa
+dunværene
+dunværet
+dunværets
+duo
+duoen
+duoene
+duoens
+duoer
+dupere
+dupert
+duperte
+duplikat
+duplikata
+duplikater
+duplikatet
+duplikatets
+duplikator
+duplikatoren
+duplikatorene
+duplikatorens
+duplikatorer
+duplikk
+duplikken
+duplikkene
+duplikkens
+duplikker
+duplisere
+duplisert
+dupliserte
+dupp
+duppa
+duppe
+duppen
+duppens
+dupper
+duppet
+dur
+durabel
+durabelt
+durable
+dure
+duren
+durens
+durer
+duret
+durkdreven
+durkdrevent
+durkdrevne
+durt
+durte
+dus
+duse
+duset
+dusin
+dusina
+dusinene
+dusinet
+dusinets
+dusinvis
+dusj
+dusja
+dusje
+dusjen
+dusjens
+dusjer
+dusjet
+dusk
+dusken
+duskene
+duskens
+dusker
+duskregn
+duskregner
+duskregnet
+duskregnets
+dusør
+dusøren
+dusørene
+dusørens
+dusører
+dust
+dusta
+duste
+dusten
+dustens
+dustet
+dustete
+dutta
+dutte
+duttet
+duva
+duvde
+duve
+duver
+duvet
+døv
+dvale
+dvalen
+dvalens
+døve
+dvele
+dvelende
+dveler
+dvelt
+dvelte
+dverg
+dvergbjørk
+dvergen
+dvergene
+dvergens
+dverger
+døveskole
+døveskolen
+døveskolene
+døveskolens
+døveskoler
+døvhet
+døvheten
+døvhetens
+dvs
+døvt
+dy
+dybde
+dybden
+dybdens
+dyd
+dydde
+døyde
+dyden
+dydene
+dydens
+dyder
+dydig
+døye
+dyende
+dyet
+døyet
+dyffel
+dyffelen
+dyffelens
+dyffelet
+dyffelets
+dygd
+dygda
+dygdene
+dygder
+dykk
+dykka
+dykke
+dykker
+dykkerdrakt
+dykkerdrakta
+dykkerdrakten
+dykkerdraktene
+dykkerdraktens
+dykkerdrakter
+dykkere
+dykkeren
+dykkerens
+dykkerne
+dykkert
+dykkerten
+dykkertene
+dykkertens
+dykkerter
+dykket
+dyktig
+dyktige
+dyktighet
+dyktigheten
+dyktighetens
+dyktigst
+dyktigste
+dylla
+dylle
+dyllene
+dyller
+dyna
+dynamikk
+dynamikken
+dynamikkens
+dynamisk
+dynamiske
+dynamitt
+dynamitten
+dynamittens
+dynamo
+dynamoen
+dynamoene
+dynamoens
+dynamoer
+dynasti
+dynastia
+dynastiene
+dynastier
+dynastiet
+dynastiets
+dyne
+dynen
+dynens
+dynga
+dynge
+dynget
+dynk
+dynka
+dynke
+dynker
+dynket
+dynn
+dynnet
+dynnets
+dyp
+dype
+dypere
+dypest
+dypeste
+dypet
+dypfryse
+dypfryseboks
+dypfryseboksen
+dypfryseboksene
+dypfryseboksens
+dypfrysebokser
+dypfryser
+dypfrysing
+dypfrysinga
+dypfrysingen
+dypfrysingens
+dypfryst
+dypfryste
+dypp
+dyppa
+dyppe
+dypper
+dyppet
+dypsindig
+dypsindighet
+dypsindigheten
+dypsindighetens
+dypt
+dyptfølt
+dyptgående
+dyptgripende
+dyr
+dyra
+dyre
+dyrebare
+dyrebart
+dyreliv
+dyrelivet
+dyrelivets
+dyrene
+dyrepark
+dyreparken
+dyreparkene
+dyreparkens
+dyreparker
+dyrere
+dyrest
+dyreste
+dyret
+dyrets
+dyrisk
+dyrka
+dyrkbar
+dyrke
+dyrkede
+dyrker
+dyrkes
+dyrket
+dyrlege
+dyrlegen
+dyrlegens
+dyrplager
+dyrplagere
+dyrplageren
+dyrplagerens
+dyrplageres
+dyrplagerne
+dyrplagernes
+dyrt
+dyrtid
+dyrtida
+dyrtiden
+dyrtidens
+dyse
+dysen
+dysene
+dysens
+dysenteri
+dysenterien
+dysenteriens
+dyser
+dysprosium
+dysprosiumet
+dysprosiumets
+dyssa
+dysse
+dysset
+dyst
+dyste
+dysten
+dystens
+dyster
+dystert
+dystre
+døyt
+døyten
+døytens
+dytt
+dytta
+dytte
+dyttet
+døyvde
+døyve
+døyvet
+dyvåt
+dyvått
+e
+ebba
+ebbe
+ebben
+ebbet
+ebonitt
+ebonitten
+ebonittene
+ebonittens
+ebonitter
+ecuadorianer
+ecuadorianere
+ecuadorianeren
+ecuadorianerens
+ecuadorianeres
+ecuadorianerne
+ecuadorianernes
+ecuadoriansk
+ed
+edamerost
+edamerosten
+edamerostens
+edb
+edda
+eddadikt
+eddadikta
+eddadiktene
+eddadiktet
+eddadiktets
+edderkopp
+edderkoppen
+edderkoppene
+edderkoppens
+edderkopper
+eddik
+eddiken
+eddikens
+edel
+edelmodig
+edelstein
+edelsteinen
+edelsteinene
+edelsteinens
+edelsteiner
+edelsten
+edelstenen
+edelstenene
+edelstenens
+edelstener
+edelt
+eden
+edene
+edens
+eder
+ederdun
+ederduna
+ederdunen
+ederdunens
+ederdunet
+ederdunets
+edikt
+edikta
+ediktene
+edikter
+ediktet
+ediktets
+edle
+edlest
+edleste
+edru
+edruelig
+edruelige
+edruelighet
+edrueligheten
+edruelighetens
+edruskap
+edruskapen
+edruskapens
+edsvoren
+edsvorne
+effekt
+effekten
+effektene
+effektens
+effekter
+effektfull
+effektiv
+effektive
+effektivere
+effektiverer
+effektiviser
+effektivisere
+effektiviserer
+effektiviseres
+effektivisering
+effektiviseringa
+effektiviseringen
+effektiviseringens
+effektivisert
+effektiviserte
+effektivitet
+effektiviteten
+effektivitetens
+effektivt
+effektuere
+effektuert
+effektuerte
+eføy
+eføyen
+eføyene
+eføyens
+eføyer
+eg
+ega
+egd
+egden
+egdene
+egdens
+egder
+egen
+egenandel
+egenandelen
+egenandelene
+egenandelens
+egenandeler
+egenart
+egenarta
+egenartede
+egenarten
+egenartens
+egenarter
+egenartet
+egendekning
+egendekningen
+egendekningens
+egenhendig
+egeninteresse
+egeninteressen
+egeninteressene
+egeninteressens
+egeninteresser
+egenkapital
+egenkapitalen
+egenkapitalens
+egenmektig
+egennavn
+egennavna
+egennavnene
+egennavnet
+egennavnets
+egennytte
+egensindig
+egenskap
+egenskapen
+egenskapene
+egenskapens
+egenskaper
+egent
+egentlig
+egentlige
+egenvekt
+egenverdi
+egenverdien
+egenverdiene
+egenverdiens
+egenverdier
+eget
+egg
+egga
+egge
+eggedosis
+eggedosisen
+eggedosisens
+eggehvite
+eggehviten
+eggehvitens
+eggen
+eggene
+eggeplomma
+eggeplomme
+eggeplommen
+eggeplommene
+eggeplommens
+eggeplommer
+eggerøra
+eggerøre
+eggerøren
+eggerørens
+egget
+eggform
+eggforma
+eggformen
+eggformene
+eggformens
+eggformer
+eggformet
+eggvinkel
+eggvinkelen
+eggvinkelens
+eggvær
+eggværet
+eggværets
+egla
+egle
+eglet
+egn
+egna
+egne
+egnen
+egnens
+egner
+egnet
+ego
+egoet
+egoets
+egoisme
+egoismen
+egoismens
+egoist
+egoisten
+egoistene
+egoistens
+egoister
+egoistisk
+egse
+egset
+egypter
+egyptere
+egypteren
+egypterens
+egypteres
+egypterne
+egypternes
+egyptisk
+egyptiske
+ei
+eid
+eide
+eidet
+eie
+eiendel
+eiendelen
+eiendelene
+eiendelens
+eiendeler
+eiendom
+eiendommelig
+eiendommelige
+eiendommen
+eiendommene
+eiendommens
+eiendommer
+eiendomsdirektorat
+eiendomsdirektoratet
+eiendomsdirektoratets
+eiendomsrett
+eiendomsretten
+eiendomsrettens
+eier
+eiere
+eieren
+eierens
+eierne
+eies
+eiet
+eiga
+eigen
+eigenhendig
+eigna
+eigne
+eignene
+eigner
+eignet
+eik
+eika
+eike
+eikelauv
+eikelauvet
+eikelauvets
+eiken
+eikens
+eiker
+eim
+eima
+eime
+eimen
+eimens
+eimer
+eimet
+einbølt
+einebær
+einebæra
+einebærene
+einebæret
+einebærets
+einebusk
+einebusken
+einebuskene
+einebuskens
+einebusker
+einelåg
+einer
+einerbær
+einerbærene
+einerbæret
+einerbærets
+einerbusk
+einerbusken
+einerbuskene
+einerbuskens
+einerbusker
+einerådende
+einerådig
+einere
+eineren
+einerens
+eineres
+einerlåg
+einerne
+einernes
+einevelde
+eineveldet
+eineveldig
+einfelt
+eining
+eininga
+einingen
+einingene
+einingens
+eininger
+einkom
+einrådende
+einrådig
+einslig
+einslige
+einstape
+einstapen
+einstapens
+einsteinium
+einsteiniumet
+einsteiniumets
+einstøing
+einstøingen
+einstøingene
+einstøingens
+einstøinger
+einvelde
+einveldet
+einveldets
+einveldig
+eir
+eira
+eire
+eiret
+eirete
+eitel
+eitelen
+eitelens
+eiter
+eiteret
+eiterets
+eitlene
+eitler
+eitrende
+eitret
+eitrets
+ekkel
+ekkelt
+ekko
+ekkoa
+ekkoene
+ekkoer
+ekkoet
+ekkoets
+ekkolodd
+ekkolodda
+ekkoloddene
+ekkoloddet
+ekkoloddets
+ekla
+eklatant
+ekle
+ekler
+eklet
+ekling
+eklinga
+eklingen
+eklingene
+eklingens
+eklinger
+ekliptikk
+ekliptikken
+ekliptikkens
+ekorn
+ekorna
+ekornen
+ekornene
+ekornens
+ekorner
+ekornet
+ekornets
+ekra
+ekre
+ekrene
+ekrer
+eks
+eksakt
+eksakte
+eksaltert
+eksamen
+eksamenen
+eksamenene
+eksamenens
+eksamener
+eksamensresultat
+eksamensresultata
+eksamensresultatene
+eksamensresultater
+eksamensresultatet
+eksamensresultatets
+eksaminand
+eksaminanden
+eksaminandene
+eksaminandens
+eksaminander
+eksaminasjon
+eksaminasjonen
+eksaminasjonene
+eksaminasjonens
+eksaminasjoner
+eksaminator
+eksaminatoren
+eksaminatorene
+eksaminatorens
+eksaminatorer
+eksaminere
+eksaminert
+eksaminerte
+eksegese
+eksegesen
+eksegesens
+eksegetisk
+eksekusjon
+eksekusjonen
+eksekusjonene
+eksekusjonens
+eksekusjoner
+eksekutiv
+eksekutive
+eksekutivkomité
+eksekutivkomiteen
+eksekutivkomiteene
+eksekutivkomiteens
+eksekutivkomiteer
+eksekutivt
+eksekvere
+eksekvert
+eksekverte
+eksellense
+eksellensen
+eksellensens
+eksellent
+eksellere
+eksellert
+eksellerte
+eksem
+eksemen
+eksemene
+eksemens
+eksemer
+eksemet
+eksemets
+eksempel
+eksempelet
+eksempelets
+eksempelvis
+eksempla
+eksemplar
+eksemplara
+eksemplarene
+eksemplarer
+eksemplaret
+eksemplarets
+eksemplarisk
+eksemplene
+eksempler
+eksemplet
+eksemplets
+eksenter
+eksentere
+eksenteren
+eksenterens
+eksenteres
+eksenterne
+eksenternes
+eksentrisk
+eksepsjonell
+eksepsjonelle
+eksepsjonelt
+ekserper
+ekserpere
+ekserperer
+ekserpert
+ekserperte
+ekserpt
+ekserpta
+ekserptene
+ekserpter
+ekserptet
+ekserptets
+eksersere
+ekserserer
+eksersert
+ekserserte
+eksersis
+eksersisen
+eksersisens
+eksess
+eksessen
+eksessene
+eksessens
+eksesser
+eksil
+eksila
+eksilene
+eksiler
+eksilet
+eksilets
+eksis
+eksisen
+eksisens
+eksistens
+eksistensberettigelse
+eksistensberettigelsen
+eksistensberettigelsens
+eksistensen
+eksistensene
+eksistensens
+eksistenser
+eksistensialisme
+eksistensialismen
+eksistensialismens
+eksistensialistisk
+eksistensiell
+eksistensielle
+eksistensielt
+eksistere
+eksisterende
+eksisterer
+eksistert
+eksisterte
+ekskludere
+ekskludert
+ekskluderte
+eksklusiv
+eksklusive
+eksklusivt
+eksklusjon
+eksklusjonen
+eksklusjonene
+eksklusjonens
+eksklusjoner
+ekskrement
+ekskrementa
+ekskrementene
+ekskrementer
+ekskrementet
+ekskrementets
+ekskursjon
+ekskursjonen
+ekskursjonene
+ekskursjonens
+ekskursjoner
+ekslibris
+ekslibrisa
+ekslibrisene
+ekslibriset
+ekslibrisets
+eksos
+eksosen
+eksosens
+eksotisk
+eksotiske
+ekspandere
+ekspanderer
+ekspandert
+ekspanderte
+ekspansiv
+ekspansive
+ekspansivt
+ekspansjon
+ekspansjonen
+ekspansjonene
+ekspansjonens
+ekspansjoner
+ekspansjonskar
+ekspansjonskaret
+ekspansjonskarets
+ekspedere
+ekspedert
+ekspederte
+ekspedisjon
+ekspedisjonen
+ekspedisjonene
+ekspedisjonens
+ekspedisjoner
+ekspedisjonssjef
+ekspedisjonssjefen
+ekspedisjonssjefene
+ekspedisjonssjefens
+ekspedisjonssjefer
+ekspeditør
+ekspeditøren
+ekspeditørene
+ekspeditørens
+ekspeditører
+ekspeditrisa
+ekspeditrise
+ekspeditrisen
+ekspeditrisens
+ekspeditt
+ekspektanse
+ekspektansen
+ekspektansens
+eksperiment
+eksperimenta
+eksperimentell
+eksperimentelle
+eksperimentelt
+eksperimentene
+eksperimenter
+eksperimentere
+eksperimenterer
+eksperimentering
+eksperimenteringa
+eksperimenteringen
+eksperimenteringens
+eksperimentert
+eksperimenterte
+eksperimentet
+eksperimentets
+ekspert
+eksperten
+ekspertene
+ekspertens
+eksperter
+ekspertgruppe
+ekspertgruppen
+ekspertgruppens
+ekspertise
+ekspertisen
+ekspertisens
+eksplisitt
+eksplisitter
+eksploatere
+eksploatert
+eksploaterte
+eksplodere
+eksploderer
+eksplodert
+eksploderte
+eksplosiv
+eksplosive
+eksplosivet
+eksplosivt
+eksplosjon
+eksplosjonen
+eksplosjonene
+eksplosjonens
+eksplosjoner
+eksplosjonsartet
+eksponent
+eksponenten
+eksponentene
+eksponentens
+eksponenter
+eksponere
+eksponert
+eksponerte
+eksport
+eksportartikkel
+eksportartikkelen
+eksportartikkelens
+eksportartiklene
+eksportartikler
+eksporten
+eksportens
+eksporter
+eksportere
+eksporterer
+eksporteres
+eksportert
+eksporterte
+eksportindustri
+eksportindustrien
+eksportindustriens
+eksportmarked
+eksportmarkeda
+eksportmarkedene
+eksportmarkeder
+eksportmarkedet
+eksportmarkedets
+eksportordre
+eksportoverskott
+eksportoverskudd
+eksportoverskuddet
+eksportoverskuddets
+eksportør
+eksportøren
+eksportørens
+eksportører
+eksportørers
+ekspresjonisme
+ekspresjonismen
+ekspresjonismens
+ekspresjonist
+ekspresjonisten
+ekspresjonistene
+ekspresjonistens
+ekspresjonister
+ekspresjonistisk
+ekspress
+ekspressen
+ekspressene
+ekspressens
+ekspresser
+ekspressiv
+ekspressive
+ekspropriasjon
+ekspropriasjonen
+ekspropriasjonene
+ekspropriasjonens
+ekspropriasjoner
+ekspropriere
+ekspropriert
+eksproprierte
+ekstase
+ekstasen
+ekstasens
+ekstatisk
+ekstemporal
+ekstemporale
+ekstemporalt
+ekstempore
+ekstemporer
+ekstemporere
+ekstemporert
+ekstemporerte
+ekstensiv
+ekstensivt
+eksteriør
+eksteriøra
+eksteriørene
+eksteriører
+eksteriøret
+eksteriørets
+eksteriørmessige
+ekstern
+eksterne
+eksternt
+eksterritorialrett
+eksterritorialretten
+eksterritorialrettens
+ekstra
+ekstrakt
+ekstrakta
+ekstrakten
+ekstraktene
+ekstraktens
+ekstrakter
+ekstraktet
+ekstraktets
+ekstraomkostning
+ekstraomkostningen
+ekstraomkostningene
+ekstraomkostningens
+ekstraomkostninger
+ekstraordinær
+ekstraordinære
+ekstraordinært
+ekstrasending
+ekstrasendinga
+ekstrasendingen
+ekstrasendingene
+ekstrasendingens
+ekstrasendinger
+ekstrautgift
+ekstrautgiften
+ekstrautgiftene
+ekstrautgiftens
+ekstrautgifter
+ekstrautstyr
+ekstrautstyret
+ekstrautstyrets
+ekstravaganse
+ekstravagansen
+ekstravagansens
+ekstravagant
+ekstrem
+ekstrema
+ekstreme
+ekstremene
+ekstremer
+ekstremet
+ekstremisme
+ekstremismen
+ekstremismens
+ekstremist
+ekstremisten
+ekstremistene
+ekstremistens
+ekstremister
+ekstremistisk
+ekstremitet
+ekstremiteten
+ekstremitetens
+ekstrempunkt
+ekstrempunktene
+ekstrempunkter
+ekstrempunktet
+ekstrempunktets
+ekstremt
+ekta
+ekte
+ektefelle
+ektefellen
+ektefellene
+ektefellens
+ektefeller
+ektemann
+ektemannen
+ektemannens
+ektemenn
+ektemennene
+ektemennenes
+ektemenns
+ektepar
+ektepara
+ekteparene
+ekteparet
+ekteparets
+ekteskap
+ekteskapelig
+ekteskapelige
+ekteskapet
+ekteskapets
+ektet
+ekthet
+ektheten
+ekthetens
+ektoderm
+ektodermen
+ektodermene
+ektodermens
+ektodermer
+ekvator
+ekvatoren
+ekvatorens
+ekvatorial
+ekvatoriale
+ekvatorialt
+ekvilibrist
+ekvilibristen
+ekvilibristene
+ekvilibristens
+ekvilibrister
+ekvipasje
+ekvipasjen
+ekvipasjens
+ekvivalens
+ekvivalensen
+ekvivalensene
+ekvivalensens
+ekvivalenser
+ekvivalent
+ekvivalenten
+ekvivalentene
+ekvivalentens
+ekvivalenter
+ekvivalere
+ekvivalert
+ekvivalerte
+elastikk
+elastikken
+elastikkene
+elastikkens
+elastikker
+elastisitet
+elastisiteten
+elastisitetens
+elastisk
+elastiske
+eld
+elda
+elddåp
+elde
+eldedes
+elden
+eldens
+eldes
+eldet
+eldgamle
+eldgammal
+eldgammalt
+eldgammel
+eldgammelt
+eldhug
+eldhuga
+eldhugen
+eldhugens
+eldhus
+eldhusa
+eldhusene
+eldhuset
+eldhusets
+elding
+eldinga
+eldingen
+eldingens
+eldmørje
+eldning
+eldningen
+eldningens
+eldorado
+eldoradoa
+eldoradoene
+eldoradoet
+eldoradoets
+eldre
+eldres
+eldsfarlig
+eldsjel
+eldsjelen
+eldsjelene
+eldsjelens
+eldsjeler
+eldst
+eldste
+eldstemann
+eldstemannen
+eldstemannens
+elefant
+elefanten
+elefantene
+elefantens
+elefanter
+eleganse
+elegansen
+elegansens
+elegant
+elegante
+elegi
+elegien
+elegiene
+elegiens
+elegier
+elegisk
+elektrifisere
+elektrifisert
+elektrifiserte
+elektriker
+elektrikere
+elektrikeren
+elektrikerens
+elektrikeres
+elektrikerne
+elektrikernes
+elektrisere
+elektriserer
+elektrisert
+elektriserte
+elektrisitet
+elektrisiteten
+elektrisitetens
+elektrisitetsverk
+elektrisitetsverka
+elektrisitetsverkene
+elektrisitetsverker
+elektrisitetsverket
+elektrisitetsverkets
+elektrisitetsvesen
+elektrisitetsvesenet
+elektrisitetsvesenets
+elektrisk
+elektriske
+elektrode
+elektroden
+elektrodens
+elektroingeniør
+elektroingeniøren
+elektroingeniørene
+elektroingeniørens
+elektroingeniører
+elektrokjemisk
+elektrolyse
+elektrolysen
+elektrolysens
+elektrolytisk
+elektrolytt
+elektrolytten
+elektrolyttene
+elektrolyttens
+elektrolytter
+elektromagnetisme
+elektromagnetismen
+elektromagnetismens
+elektromotor
+elektromotoren
+elektromotorene
+elektromotorens
+elektromotorer
+elektron
+elektrona
+elektronene
+elektroner
+elektronet
+elektronets
+elektronikk
+elektronikken
+elektronikkene
+elektronikkens
+elektronikker
+elektronisk
+elektroniske
+elektroteknisk
+element
+elementa
+elementene
+elementer
+elementet
+elementets
+elementhus
+elementhuset
+elementhusets
+elementær
+elementærbok
+elementærboka
+elementærboken
+elementærbokens
+elementære
+elementært
+elendig
+elendige
+elendighet
+elendigheten
+elendighetens
+elev
+elevator
+elevatoren
+elevatorene
+elevatorens
+elevatorer
+eleven
+elevene
+elevenes
+elever
+elevert
+elevhjem
+elevhjemma
+elevhjemmene
+elevhjemmet
+elevhjemmets
+elevtall
+elevtallene
+elevtallet
+elevtallets
+elfenbein
+elfenbeina
+elfenbeinene
+elfenbeinet
+elfenbeinets
+elg
+elgen
+elgene
+elgens
+elger
+elgokse
+elgoksen
+elgoksene
+elgoksens
+elgokser
+eliksir
+eliksiren
+eliksirene
+eliksirens
+eliksirer
+eliminasjon
+eliminasjonen
+eliminasjonene
+eliminasjonens
+eliminasjoner
+eliminere
+eliminerer
+elimineres
+eliminert
+eliminerte
+eling
+elingen
+elingene
+elingens
+elinger
+elite
+eliteklasse
+eliteklassen
+eliteklassene
+eliteklassens
+eliteklasser
+eliteløper
+eliteløpere
+eliteløperen
+eliteløperens
+eliteløperes
+eliteløperne
+eliteløpernes
+eliten
+elitene
+elitens
+eliter
+elle
+eller
+ellers
+ellevedel
+ellevedelen
+ellevedelene
+ellevedelens
+ellevedeler
+ellevill
+elleville
+ellevilt
+ellevte
+ellevtedel
+ellevtedelen
+ellevtedelens
+ellipse
+ellipsen
+ellipsene
+ellipsens
+ellipser
+ellipsoide
+ellipsoiden
+ellipsoidene
+ellipsoidens
+ellipsoider
+elliptisk
+eloksere
+eloksert
+elokserte
+elsk
+elska
+elske
+elskede
+elskelig
+elskende
+elsker
+elskere
+elskeren
+elskerens
+elskeres
+elskerinna
+elskerinne
+elskerinnen
+elskerinnene
+elskerinnens
+elskerinner
+elskerne
+elskernes
+elsket
+elskhug
+elskhugen
+elskhugens
+elskov
+elskoven
+elskovens
+elskverdig
+elskverdige
+elt
+elta
+elte
+elter
+eltet
+elv
+elva
+elvebredd
+elvebredda
+elvebredden
+elvebreddene
+elvebreddens
+elvebredder
+elven
+elvene
+elvens
+elver
+elverk
+elverket
+elverkets
+elyseisk
+emalje
+emaljen
+emaljens
+emaljere
+emaljert
+emaljerte
+emansipasjon
+emansipasjonen
+emansipasjonene
+emansipasjonens
+emansipasjoner
+emansipert
+emballasje
+emballasjen
+emballasjens
+emballere
+emballert
+emballerte
+embete
+embeter
+embetet
+embetseksamen
+embetseksamens
+embetsmann
+embetsmannen
+embetsmannens
+embetsmenn
+embetsmennene
+embetsmennenes
+embetsmenns
+emblem
+emblema
+emblemene
+emblemer
+emblemet
+emblemets
+embouchure
+embouchuren
+embouchurens
+embryo
+embryoer
+embryoet
+embryoets
+emigrant
+emigranten
+emigrantene
+emigrantens
+emigranter
+emigrasjon
+emigrasjonen
+emigrasjonene
+emigrasjonens
+emigrasjoner
+emigrere
+emigrert
+emigrerte
+eminense
+eminensen
+eminensens
+eminent
+eminente
+emisjon
+emisjonen
+emisjonene
+emisjonens
+emisjoner
+emisjonskurs
+emisjonskursene
+emisjonskurser
+emisjonskurset
+emisjonskursets
+emissær
+emissæren
+emissærene
+emissærens
+emissærer
+emittere
+emittert
+emitterte
+emmen
+emment
+emna
+emne
+emnene
+emner
+emnet
+emosjon
+emosjonell
+emosjonelle
+emosjonelt
+emosjonen
+emosjonene
+emosjonens
+emosjoner
+empire
+empiren
+empirens
+empirestil
+empirestilen
+empirestilens
+empirisk
+emploi
+emploien
+emploiene
+emploiens
+emploier
+emulger
+emulgere
+emulgerer
+emulgert
+emulgerte
+emulsjon
+emulsjonen
+emulsjonene
+emulsjonens
+emulsjoner
+en
+åen
+enakter
+enaktere
+enakteren
+enakterens
+enakteres
+enakterne
+enakternes
+encefalogram
+encefalogramma
+encefalogrammene
+encefalogrammer
+encefalogrammet
+encefalogrammets
+encyklopedi
+encyklopedien
+encyklopediene
+encyklopediens
+encyklopedier
+end
+enda
+endatil
+ende
+endefram
+endelaus
+endelause
+endelaust
+endelig
+endelige
+endelikt
+endeliktet
+endeliktets
+endeløs
+endelse
+endeløse
+endelsen
+endelsens
+endeløst
+endelykt
+endeløyse
+enden
+endene
+endepunkt
+endepunktene
+endepunkter
+endepunktet
+endepunktets
+ender
+endevende
+endevender
+endevendt
+endevendte
+endimensjonal
+endimensjonale
+endimensjonalt
+ending
+endinga
+endingen
+endingene
+endingens
+endinger
+endog
+endogen
+endogene
+endossement
+endossementa
+endossementene
+endossementer
+endossementet
+endossementets
+endossent
+endossenten
+endossentene
+endossentens
+endossenter
+endossere
+endossert
+endosserte
+endra
+endre
+endrede
+endrektig
+endrer
+endres
+endret
+endring
+endringa
+endringen
+endringene
+endringens
+endringer
+endringsforslag
+endringsforslaga
+endringsforslagene
+endringsforslaget
+endringsforslagets
+endskap
+endskapen
+endt
+endte
+ene
+eneboer
+eneboere
+eneboeren
+eneboerens
+eneboeres
+eneboerne
+eneboernes
+enebolig
+eneboligen
+eneboligene
+eneboligens
+eneboliger
+enebuer
+enebuere
+enebueren
+enebuerens
+enebueres
+enebuerne
+enebuernes
+eneform
+eneforma
+eneformen
+eneformene
+eneformens
+eneformer
+enemerke
+enemerkene
+enemerker
+enemerket
+ener
+enerådende
+enerådig
+enere
+eneren
+enerens
+enerett
+eneretten
+enerettene
+enerettens
+eneretter
+energi
+energien
+energiens
+energikilde
+energikilden
+energikildene
+energikildens
+energikilder
+energipolitikk
+energipolitikken
+energipolitikkens
+energisk
+energiske
+energitap
+energitapet
+energitapets
+enerom
+eneromma
+enerommene
+enerommet
+enerommets
+enervere
+enerverende
+enes
+enesalg
+enesalget
+enesalgets
+eneste
+enestående
+enevelde
+eneveldet
+eneveldig
+enfold
+enfoldet
+enfoldets
+enfoldig
+enfoldighet
+enfoldigheten
+enfoldighetens
+enforelderfamilie
+enforelderfamilien
+enforelderfamiliens
+eng
+enga
+engang
+engasjement
+engasjementa
+engasjementene
+engasjementer
+engasjementet
+engasjementets
+engasjer
+engasjere
+engasjerende
+engasjerer
+engasjert
+engasjerte
+enge
+engel
+engelen
+engelens
+engelsk
+engelske
+engelskmann
+engelskmannen
+engelskmannens
+engelskmenn
+engelskmennene
+engelskmennenes
+engelskmenns
+engen
+engens
+enger
+engere
+engkall
+engkallen
+engkallene
+engkallens
+engkaller
+engleaktig
+englene
+engler
+engrospris
+engrosprisen
+engrosprisens
+engsmella
+engsmelle
+engsmellen
+engsmellene
+engsmellens
+engsmeller
+engspretta
+engsprette
+engspretten
+engsprettens
+engsta
+engste
+engstelig
+engstelige
+engstelse
+engstelsen
+engstelsens
+engstet
+enhet
+enheten
+enhetene
+enhetens
+enheter
+enhetlig
+enhetlige
+enhetspris
+enhetsprisen
+enhetsprisene
+enhetsprisens
+enhetspriser
+enhetsskole
+enhetsskolen
+enhetsskolene
+enhetsskolens
+enhetsskoler
+enhetsvektor
+enhetsvektoren
+enhetsvektorene
+enhetsvektorens
+enhetsvektorer
+enhjørning
+enhjørningen
+enhjørningens
+enhorning
+enhorningen
+enhorningens
+enhver
+enig
+enige
+enighet
+enigheten
+enighetens
+enka
+enke
+enkel
+enkelhet
+enkelheten
+enkelhetens
+enkelt
+enkelte
+enkeltes
+enkelthet
+enkeltheten
+enkelthetene
+enkelthetens
+enkeltheter
+enkeltindivid
+enkeltindividene
+enkeltindivider
+enkeltindividet
+enkeltindividets
+enkeltmenneske
+enkeltmenneskene
+enkeltmennesker
+enkeltmennesket
+enkeltmenneskets
+enkeltord
+enkeltordet
+enkeltordets
+enkeltperson
+enkeltpersonen
+enkeltpersonene
+enkeltpersonens
+enkeltpersoner
+enkeltprestasjon
+enkeltprestasjonen
+enkeltprestasjonene
+enkeltprestasjonens
+enkeltprestasjoner
+enkeltvis
+enkemann
+enkemannen
+enkemannens
+enkemenn
+enkemennene
+enkemennenes
+enkemenns
+enken
+enkene
+enkens
+enker
+enkle
+enklere
+enklest
+enkleste
+enkom
+enmannsbetjent
+enmannsbetjenten
+enmannsbetjentene
+enmannsbetjentens
+enmannsbetjenter
+enn
+ennå
+enorm
+enorme
+enormt
+enquete
+enqueten
+enquetens
+ens
+åens
+ensarta
+ensartede
+ensartet
+ensbetydende
+ense
+ensemble
+ensemblespill
+ensemblet
+enser
+enset
+ensidig
+ensidige
+ensifra
+ensifrede
+ensifret
+enskjønt
+enslig
+enslige
+ensom
+ensomhet
+ensomheten
+ensomhetens
+ensomme
+ensomt
+ensretta
+ensrette
+ensrettet
+enst
+enste
+ensteds
+enstemmig
+enstemmige
+enstemmighet
+enstemmigheten
+enstemmighetens
+enstrøket
+ent
+ental
+entalet
+entalets
+entall
+entallet
+entallets
+ente
+enten
+entente
+ententen
+ententene
+ententens
+ententer
+entes
+entlediga
+entledige
+entlediget
+entoderm
+entodermen
+entodermene
+entodermens
+entodermer
+entomologi
+entomologien
+entomologiens
+entomologisk
+entomologiske
+entoms
+entra
+entre
+entrecote
+entrecoten
+entrecotens
+entreen
+entreens
+entreprenør
+entreprenøren
+entreprenørene
+entreprenørens
+entreprenører
+entreprise
+entreprisen
+entreprisene
+entreprisens
+entrepriser
+entret
+entusiasme
+entusiasmen
+entusiasmens
+entusiast
+entusiasten
+entusiastene
+entusiastens
+entusiaster
+entusiastisk
+entusiastiske
+entydig
+entydige
+envegskjøring
+envegskjøringa
+envegskjøringen
+envegskjøringens
+enveis
+enveiskjøring
+enveiskjøringa
+enveiskjøringen
+enveiskjøringens
+envis
+envist
+envoyé
+envoyeen
+envoyeene
+envoyeens
+envoyeer
+enøyd
+enzym
+enzyma
+enzymene
+enzymer
+enzymet
+enzymets
+epidemi
+epidemien
+epidemiene
+epidemiens
+epidemier
+epidemisk
+epigon
+epigonen
+epigonens
+epigram
+epigramma
+epigrammene
+epigrammer
+epigrammet
+epigrammets
+epiker
+epikere
+epikeren
+epikerens
+epikeres
+epikerne
+epikernes
+epikrise
+epikrisen
+epikrisene
+epikrisens
+epikriser
+epikureer
+epikureere
+epikureeren
+epikureerens
+epikureeres
+epikureerne
+epikureernes
+epikureisk
+epilepsi
+epilepsien
+epilepsiens
+epileptiker
+epileptikere
+epileptikeren
+epileptikerens
+epileptikeres
+epileptikerne
+epileptikernes
+epileptisk
+epilog
+epilogen
+epilogene
+epilogens
+epiloger
+episk
+episke
+episkopal
+episkopalt
+episode
+episoden
+episodene
+episodens
+episoder
+episodisk
+epistel
+epistelen
+epistelens
+epistlene
+epistler
+epitel
+epitelet
+epitelets
+eple
+epledrikk
+epledrikken
+epledrikkens
+eplene
+epler
+eplet
+epålett
+epåletten
+epålettene
+epålettens
+epåletter
+epoke
+epokegjørende
+epoken
+epokens
+epokes
+epos
+eposa
+eposene
+eposer
+eposet
+eposets
+er
+erbium
+erbiumet
+erbiumets
+ereksjon
+ereksjonen
+ereksjonene
+ereksjonens
+ereksjoner
+eremitt
+eremitten
+eremittene
+eremittens
+eremitter
+erfare
+erfaren
+erfarer
+erfaring
+erfaringa
+erfaringen
+erfaringene
+erfaringens
+erfaringer
+erfaringsmateriale
+erfaringsmaterialet
+erfaringsmessig
+erfarne
+erfart
+erfarte
+ergerlig
+ergerlige
+ergo
+ergometer
+ergometeret
+ergometerets
+ergometra
+ergometre
+ergometrene
+ergometret
+ergometrets
+ergonomi
+ergonomien
+ergonomiens
+ergonomisk
+ergonomiske
+ergra
+ergre
+ergrelse
+ergrelsen
+ergrelsene
+ergrelsens
+ergrelser
+ergret
+erindra
+erindre
+erindret
+erindring
+erindringa
+erindringen
+erindringene
+erindringens
+erindringer
+erkebiskop
+erkebiskopen
+erkebiskopene
+erkebiskopens
+erkebiskoper
+erkebisp
+erkebispen
+erkebispens
+erkjenne
+erkjennelse
+erkjennelsen
+erkjennelsens
+erkjenner
+erkjent
+erkjente
+erkjentlig
+erklære
+erklærer
+erklæring
+erklæringa
+erklæringen
+erklæringene
+erklæringens
+erklæringer
+erklært
+erklærte
+erla
+erle
+erlen
+erlene
+erlens
+erler
+erme
+ermer
+ermet
+ernære
+ernærer
+ernæring
+ernæringa
+ernæringen
+ernæringens
+ernært
+ernærte
+erobra
+erobre
+erobrer
+erobrere
+erobreren
+erobrerens
+erobreres
+erobrerne
+erobrernes
+erobret
+erobring
+erobringa
+erobringen
+erobringens
+erosjon
+erosjonen
+erosjonene
+erosjonens
+erosjoner
+erotiker
+erotikere
+erotikeren
+erotikerens
+erotikeres
+erotikerne
+erotikernes
+erotikk
+erotikken
+erotikkens
+erotisk
+erotiske
+erstatning
+erstatningen
+erstatningene
+erstatningens
+erstatninger
+erstatningskrav
+erstatningskrava
+erstatningskravene
+erstatningskravet
+erstatningskravets
+erstatningsplikt
+erstatningssak
+erstatningssaka
+erstatningssaken
+erstatningssakene
+erstatningssakens
+erstatningssaker
+erstatt
+erstatta
+erstatte
+erstatter
+erstattes
+erstattet
+ert
+erta
+erte
+ertekrok
+ertekroken
+ertekrokens
+erten
+ertende
+ertent
+erter
+ertersuppa
+ertersuppe
+ertersuppen
+ertersuppens
+ertesuppa
+ertesuppe
+ertet
+ertne
+erts
+ertsen
+erupsjon
+erupsjonen
+erupsjonene
+erupsjonens
+erupsjoner
+eruptiv
+eruptive
+eruptivt
+erverv
+erverva
+erverve
+ervervede
+ervervelse
+ervervelsen
+ervervelsens
+ervervet
+ervervsmessig
+ese
+esel
+eselet
+eselets
+eser
+esing
+esinga
+esingen
+esingens
+eska
+eskadre
+eskadren
+eskadrens
+eskadron
+eskadronen
+eskadronene
+eskadronens
+eskadroner
+eskapisme
+eskapismen
+eskapismens
+eskapist
+eskapisten
+eskapistene
+eskapistens
+eskapister
+eskatologi
+eskatologien
+eskatologiene
+eskatologiens
+eskatologier
+eske
+esken
+eskens
+esket
+eskimo
+eskimoen
+eskimoene
+eskimoens
+eskimoer
+eskort
+eskorten
+eskortene
+eskortens
+eskorter
+eskortere
+eskortert
+eskorterte
+esla
+esle
+esler
+eslet
+eslets
+espalier
+espalieret
+espalierets
+esperanto
+esperantoen
+esperantoens
+espresso
+espressoen
+espressoens
+esprit
+espriten
+espritens
+ess
+essay
+essaya
+essayene
+essayer
+essayet
+essayets
+essayist
+essayisten
+essayistene
+essayistens
+essayister
+esse
+essen
+essens
+essensen
+essensene
+essensens
+essenser
+essensiell
+essensielle
+essensielt
+esset
+este
+ester
+estere
+esteren
+esterens
+esteres
+esterne
+esternes
+estetiker
+estetikere
+estetikeren
+estetikerens
+estetikeres
+estetikerne
+estetikernes
+estetikk
+estetikken
+estetikkens
+estetisk
+estetiske
+estimat
+estimata
+estimatene
+estimater
+estimatet
+estimatets
+estimer
+estimere
+estimerer
+estimert
+estimerte
+estisk
+estlandsk
+estlending
+estlendingen
+estlendingene
+estlendingens
+estlendinger
+et
+etabler
+etablere
+etablerer
+etableres
+etablering
+etableringa
+etableringen
+etableringene
+etableringens
+etableringer
+etablert
+etablerte
+etablissement
+etablissementa
+etablissementene
+etablissementer
+etablissementet
+etablissementets
+etappe
+etappen
+etappene
+etappens
+etapper
+etappevis
+etasje
+etasjen
+etasjene
+etasjens
+etasjer
+etasjes
+etat
+etaten
+etatene
+etatens
+etater
+etc
+ete
+eter
+etere
+eteren
+eterens
+eteres
+eterisk
+eterne
+eternes
+ethvert
+etikett
+etiketten
+etikettene
+etikettens
+etiketter
+etikk
+etikken
+etikkene
+etikkens
+etikker
+eting
+etinga
+etingen
+etingens
+etiopier
+etiopiere
+etiopieren
+etiopierens
+etiopieres
+etiopierne
+etiopiernes
+etiopisk
+etisk
+etiske
+etla
+etle
+etlet
+etnisk
+etnograf
+etnografen
+etnografene
+etnografens
+etnografer
+etnografi
+etnografien
+etnografiens
+etnografisk
+etnografiske
+etnolog
+etnologen
+etnologene
+etnologens
+etnologer
+etnologi
+etnologien
+etnologiens
+etnologisk
+etsa
+etse
+etset
+etsteds
+ett
+ettal
+ettala
+ettalene
+ettalet
+ettalets
+ettall
+ettalla
+ettallene
+ettallet
+ettallets
+ette
+etter
+etterat
+etterdønning
+etterdønningen
+etterdønningene
+etterdønningens
+etterdønninger
+etterfølge
+etterfølgelse
+etterfølgelsen
+etterfølgelsens
+etterfølgende
+etterfølger
+etterforska
+etterforske
+etterforsker
+etterforskere
+etterforskeren
+etterforskerens
+etterforskeres
+etterforskerne
+etterforskernes
+etterforsket
+etterforsking
+etterforskinga
+etterforskingen
+etterforskning
+etterforskningen
+etterforskningens
+etterfulgt
+etterfulgte
+ettergi
+ettergir
+ettergis
+ettergitt
+ettergivelse
+ettergivelsen
+ettergivelsens
+ettergivenhet
+ettergivenheten
+ettergivenhetens
+ettergiving
+ettergivinga
+ettergivingen
+ettergivingens
+etterhånd
+etterhånden
+etterkom
+etterkomme
+etterkommer
+etterkommere
+etterkommeren
+etterkommerens
+etterkommeres
+etterkommerne
+etterkommernes
+etterkommes
+etterkommet
+etterkrav
+etterkravet
+etterkravets
+etterkrigsårene
+etterkrigstid
+etterkrigstida
+etterkrigstiden
+etterkrigstidens
+etterlate
+etterlatenskap
+etterlatenskapen
+etterlatenskapene
+etterlatenskapens
+etterlatenskaper
+etterlater
+etterlatt
+etterlatte
+etterligne
+etterligner
+etterlignet
+etterlot
+etterlyse
+etterlyser
+etterlyses
+etterlysing
+etterlysinga
+etterlysingen
+etterlysning
+etterlysningen
+etterlysningens
+etterlyst
+etterlyste
+ettermiddag
+ettermiddagen
+ettermiddagene
+ettermiddagens
+ettermiddager
+ettermiddagsnytt
+ettermæle
+ettermælet
+etternavn
+etternavnene
+etternavnet
+etterpå
+etterretning
+etterretningen
+etterretningene
+etterretningens
+etterretninger
+etterretningstjeneste
+etterretningstjenesten
+etterretningstjenestene
+etterretningstjenestens
+etterretningstjenester
+etterrett
+etterrettelig
+etterretten
+etterrettens
+ettersees
+ettersendes
+etterses
+ettersøkning
+ettersøkningen
+ettersøkningens
+etterskott
+etterskottene
+etterskottet
+etterskottets
+etterskrift
+etterskriftet
+etterskriftets
+etterskudd
+ettersleng
+etterslått
+etterslåtten
+etterslåttens
+ettersom
+etterspill
+etterspillet
+etterspørsel
+etterspørselen
+etterspørselens
+etterspørslene
+etterspørsler
+etterspurt
+etterspurte
+etterstavelse
+etterstavelsen
+etterstavelsene
+etterstavelsens
+etterstavelser
+etterstev
+etterstevet
+etterstevets
+ettersyn
+ettersyna
+ettersynene
+ettersyner
+ettersynet
+ettersynets
+ettertanke
+ettertanken
+ettertankene
+ettertankens
+ettertanker
+ettertrakta
+ettertraktede
+ettertraktet
+ettertrykk
+ettertrykkelig
+ettertrykket
+ettertrykkets
+ettervern
+ettervernet
+ettervernets
+ettervirkning
+ettervirkningen
+ettervirkningene
+ettervirkningens
+ettervirkninger
+ettmål
+ettmålet
+ettmålets
+ettårige
+etui
+etuia
+etuiene
+etuier
+etuiet
+etuiets
+etyde
+etyden
+etydens
+etyl
+etylen
+etylenet
+etylenets
+etylet
+etylets
+etymologi
+etymologien
+etymologiene
+etymologiens
+etymologier
+etymologisk
+eufemisme
+eufemismen
+eufemismens
+eukalyptus
+eukalyptusen
+eukalyptusene
+eukalyptusens
+eukalyptuser
+eunukk
+eunukken
+eunukkens
+eurasier
+eurasiere
+eurasieren
+eurasierens
+eurasieres
+eurasierne
+eurasiernes
+europakommisjon
+europakommisjonen
+europakommisjonene
+europakommisjonens
+europakommisjoner
+europeer
+europeere
+europeeren
+europeerens
+europeeres
+europeerne
+europeernes
+europeisk
+europeiske
+europium
+europiumet
+europiumets
+eva
+evakuere
+evakuerer
+evakuering
+evakueringa
+evakueringen
+evakueringens
+evakuert
+evakuerte
+evaluere
+evaluerer
+evalueres
+evaluert
+evaluerte
+evangelia
+evangeliene
+evangelier
+evangeliet
+evangeliets
+evangelisk
+evangeliske
+evangelist
+evangelisten
+evangelistene
+evangelistens
+evangelister
+evangelium
+eve
+evenement
+evenementa
+evenementene
+evenementer
+evenementet
+evenementets
+eventualitet
+eventualiteten
+eventualitetens
+eventuell
+eventuelle
+eventuelt
+eventyr
+eventyra
+eventyrene
+eventyrer
+eventyret
+eventyrets
+eventyrlig
+evergreen
+evergreenen
+evergreenens
+evfemisme
+evfemismen
+evfemismens
+evidens
+evidensen
+evidensens
+evident
+evig
+evige
+evighet
+evigheten
+evighetens
+evighetsmaskin
+evinnelig
+evja
+evje
+evjen
+evjens
+evna
+evne
+evnelaus
+evneløshet
+evneløsheten
+evneløshetens
+evneløysa
+evneløyse
+evnen
+evnens
+evner
+evnesvak
+evnesvake
+evnesvakt
+evnet
+evneveik
+evneveike
+evneveikt
+evnukk
+evnukken
+evnukkene
+evnukkens
+evnukker
+evolusjon
+evolusjonen
+evolusjonene
+evolusjonens
+evolusjoner
+evolusjonær
+evt
+ex
+exa
+examen
+exit
+f
+få
+fø
+fabel
+fabelaktig
+fabelaktige
+fabelen
+fabelens
+fable
+fabler
+fabrikant
+fabrikanten
+fabrikantene
+fabrikantens
+fabrikanter
+fabrikat
+fabrikatet
+fabrikatets
+fabrikk
+fabrikkbygning
+fabrikkbygningen
+fabrikkbygningene
+fabrikkbygningens
+fabrikkbygninger
+fabrikkeier
+fabrikkeiere
+fabrikkeieren
+fabrikkeierens
+fabrikkeieres
+fabrikkeierne
+fabrikkeiernes
+fabrikken
+fabrikkene
+fabrikkens
+fabrikker
+fabrikkere
+fabrikkert
+fabrikkerte
+fabrikkhall
+fabrikkhallen
+fabrikkhallene
+fabrikkhallens
+fabrikkhaller
+fabulerende
+face
+facto
+fad
+fada
+fadder
+faddere
+fadderen
+fadderens
+fadderes
+fadderne
+faddernes
+fade
+fader
+faderen
+faderens
+faderlig
+fadervår
+fadervåret
+fadervårets
+fadese
+fadesen
+fadesens
+fadet
+fading
+fadinga
+fadingen
+fadingens
+fag
+fagarbeider
+fagarbeidere
+fagarbeideren
+fagarbeiderens
+fagarbeideres
+fagarbeiderne
+fagarbeidernes
+fagbevegelse
+fagbevegelsen
+fagbevegelsene
+fagbevegelsens
+fagbevegelser
+fagene
+fager
+fagert
+faget
+fagfelle
+fagfellen
+fagfellens
+fagfelt
+fagfelta
+fagfeltene
+fagfeltet
+fagfeltets
+fagfolk
+fagfolka
+fagfolkene
+fagforbund
+fagforbunda
+fagforbundene
+fagforening
+fagforeninga
+fagforeningen
+fagforeningene
+fagforeningens
+fagforeninger
+faggruppa
+faggruppe
+faggruppen
+faggruppene
+faggruppens
+faggrupper
+fagkompetanse
+fagkompetansen
+fagkompetansens
+fagkyndig
+faglig
+faglige
+faglitteratur
+faglitteraturen
+faglitteraturens
+fagmann
+fagmannen
+fagmannens
+fagmenn
+fagmennene
+fagmennenes
+fagmenns
+fagmessig
+fagmiljø
+fagmiljøa
+fagmiljøene
+fagmiljøer
+fagmiljøet
+fagmiljøets
+fagna
+fagnad
+fagnaden
+fagnadens
+fagne
+fagnet
+fagning
+fagninga
+fagningen
+fagningens
+fagområda
+fagområde
+fagområdene
+fagområder
+fagområdet
+fagområdets
+fagord
+fagorda
+fagordene
+fagordet
+fagordets
+fagorganisert
+fagorganiserte
+fagott
+fagotten
+fagottene
+fagottens
+fagotter
+fagråd
+fagråda
+fagrådene
+fagrådet
+fagrådets
+fagre
+fagskole
+fagskolen
+fagskolene
+fagskolens
+fagskoler
+fagterm
+fagtermen
+fagtermene
+fagtermens
+fagtermer
+fagterminologi
+fagterminologien
+fagterminologiens
+fagutdanne
+fagutdannet
+fahrenheit
+fair
+fait
+fajanse
+fajansen
+fajansens
+fakir
+fakiren
+fakirene
+fakirens
+fakirer
+fakka
+fakke
+fakkel
+fakkelen
+fakkelens
+fakkeltog
+fakkeltoget
+fakkeltogets
+fakket
+faklene
+fakler
+faks
+fakse
+fakset
+faksimila
+faksimile
+faksimilen
+faksimilene
+faksimilens
+faksimiler
+fakta
+faktaene
+fakte
+fakten
+faktene
+faktens
+fakter
+faktisk
+faktiske
+faktor
+faktoren
+faktorene
+faktorens
+faktorer
+faktorial
+faktoriale
+faktorialt
+faktoring
+faktoringen
+faktoringens
+faktotum
+faktotuma
+faktotumene
+faktotumer
+faktotumet
+faktotumets
+faktum
+faktumet
+faktumets
+faktura
+fakturaen
+fakturaene
+fakturaens
+fakturaer
+fakturakreditt
+fakturakreditten
+fakturakredittens
+fakturere
+faktureres
+fakturert
+fakturerte
+fakultativ
+fakultative
+fakultativt
+fakultet
+fakultetene
+fakulteter
+fakultetet
+fakultetets
+fal
+falanks
+falanksen
+falanksens
+falby
+fald
+falda
+falde
+falden
+faldens
+faldet
+falk
+falken
+falkene
+falkens
+falker
+fall
+falle
+falleferdig
+fallekniv
+fallekniven
+falleknivene
+falleknivens
+fallekniver
+fallen
+fallent
+faller
+fallere
+fallert
+fallerte
+fallet
+fallgruve
+fallgruven
+fallgruvene
+fallgruvens
+fallgruver
+fallitt
+fallitten
+fallittene
+fallittens
+fallitter
+fallitterklæring
+fallitterklæringa
+fallitterklæringen
+fallitterklæringene
+fallitterklæringens
+fallitterklæringer
+fallreip
+fallreipet
+fallreipets
+fallskjerm
+fallskjermen
+fallskjermene
+fallskjermens
+fallskjermer
+falma
+falme
+falmet
+falne
+fals
+falsa
+falsen
+falsene
+falsens
+falser
+falset
+falsett
+falsetten
+falsettene
+falsettens
+falsetter
+falsifisere
+falsifisert
+falsifiserte
+falsk
+falske
+falskneri
+falskneria
+falskneriene
+falsknerier
+falskneriet
+falskneriets
+falskt
+falsum
+falsuma
+falsumet
+falsumets
+falt
+familie
+familiebånd
+familiebånda
+familiebåndene
+familiebåndet
+familiebåndets
+familiefar
+familiefaren
+familiefarens
+familieforhold
+familieforholda
+familieforholdene
+familieforholdet
+familieforholdets
+familiemedlemmer
+familien
+familiene
+familiens
+familier
+familiesituasjon
+familiesituasjonen
+familiesituasjonene
+familiesituasjonens
+familiesituasjoner
+familiær
+familiære
+familiært
+famla
+famle
+famlende
+famn
+famna
+famnen
+famnene
+famnens
+famner
+famnet
+famøse
+famøst
+fan
+fana
+fanatiker
+fanatikere
+fanatikeren
+fanatikerens
+fanatikeres
+fanatikerne
+fanatikernes
+fanatisk
+fanatiske
+fanatisme
+fanatismen
+fanatismens
+fanden
+fandens
+fane
+fanen
+fanens
+faner
+fanfare
+fanfaren
+fanfarens
+fang
+fange
+fangen
+fangene
+fangens
+fangenskap
+fangenskapet
+fangenskapets
+fanger
+fanget
+fanglina
+fangline
+fanglinen
+fanglinens
+fangst
+fangste
+fangsten
+fangstene
+fangstens
+fangster
+fangstfolk
+fangstfolkene
+fangstfolket
+fangstfolkets
+fans
+fant
+fanta
+fantasere
+fantasert
+fantaserte
+fantasi
+fantasien
+fantasiene
+fantasiens
+fantasier
+fantasifulle
+fantasifullt
+fantast
+fantasten
+fantastene
+fantastens
+fantaster
+fantasteri
+fantasteria
+fantasteriene
+fantasterier
+fantasteriet
+fantasteriets
+fantastisk
+fantastiske
+fante
+fanten
+fantens
+fanteri
+fanteria
+fanteriene
+fanterier
+fanteriet
+fantes
+fanteskap
+fanteskapen
+fanteskapens
+fantet
+fantom
+fantoma
+fantomene
+fantomer
+fantomet
+fantomets
+fantord
+fantordet
+fantordets
+far
+farang
+farangen
+farangene
+farangens
+faranger
+farao
+faraoen
+faraoene
+faraoens
+faraoer
+farbar
+farbare
+farbart
+farbror
+farbroren
+farbrorens
+fare
+farefull
+faremoment
+faremomenta
+faremomentene
+faremomenter
+faremomentet
+faremomentets
+faren
+farende
+farene
+farens
+farer
+farere
+fareren
+farerens
+fareres
+farerne
+farernes
+faresignal
+faresignala
+faresignalene
+faresignalet
+faresignalets
+faresone
+faresonen
+faresonene
+faresonens
+faresoner
+faret
+faretruende
+farfar
+farfaren
+farfarens
+farga
+farge
+fargebånd
+fargebånda
+fargebåndene
+fargebåndet
+fargebåndets
+fargefjernsyn
+fargefjernsyna
+fargefjernsynet
+fargefjernsynets
+fargen
+fargene
+farger
+fargerik
+fargerike
+fargerikt
+fargesprakende
+fargesyn
+farget
+fargetone
+fargetonen
+fargetonene
+fargetonens
+fargetoner
+farin
+farinen
+farinens
+farinet
+farinets
+fariseer
+fariseere
+fariseeren
+fariseerens
+fariseeres
+fariseerne
+fariseernes
+fariseisk
+fark
+farken
+farkene
+farkens
+farker
+farket
+farkets
+farkost
+farkosten
+farkostene
+farkostens
+farkoster
+farlei
+farleia
+farlig
+farlige
+farligere
+farligst
+farligste
+farm
+farmakologi
+farmakologien
+farmakologiens
+farmakologisk
+farmasøyt
+farmasøyten
+farmasøytene
+farmasøytens
+farmasøyter
+farmen
+farmene
+farmens
+farmer
+farmere
+farmeren
+farmerens
+farmeres
+farmerne
+farmernes
+farmor
+farmora
+farmoren
+farmorens
+fars
+farsarv
+farsarven
+farsarvens
+farsen
+farsene
+farsens
+farser
+farskapssak
+farskapssaka
+farskapssaken
+farskapssakene
+farskapssakens
+farskapssaker
+farsott
+farsotta
+farsotten
+farsottene
+farsottens
+farsotter
+fart
+farta
+farte
+farten
+fartens
+fartet
+fartsgrensa
+fartsgrense
+fartsgrensen
+fartsgrensens
+fartskontroll
+fartskontrollen
+fartskontrollene
+fartskontrollens
+fartskontroller
+fartsmåler
+fartsmålere
+fartsmåleren
+fartsmålerens
+fartsmåleres
+fartsmålerne
+fartsmålernes
+fartsretning
+fartsretningen
+fartsretningens
+fartøy
+fartøya
+fartøyene
+fartøyer
+fartøyet
+fartøyets
+farvann
+farvanna
+farvannene
+farvannet
+farvannets
+farvatn
+farvatna
+farvatnene
+farvatnet
+farvatnets
+farvel
+farvelen
+farvelens
+farvelet
+farvelets
+farvlene
+fasade
+fasaden
+fasadene
+fasadens
+fasan
+fasanen
+fasanene
+fasanens
+fasaner
+fascinere
+fascinerende
+fascinert
+fascinerte
+fascisme
+fascismen
+fascismens
+fascist
+fascisten
+fascistene
+fascistens
+fascister
+fascistisk
+fase
+fasen
+fasene
+fasenes
+fasens
+faser
+faset
+fasett
+fasetten
+fasettene
+fasettens
+fasetter
+fasilitet
+fasiliteten
+fasilitetene
+fasilitetens
+fasiliteter
+fasit
+fasiten
+fasitene
+fasitens
+fasiter
+fasjonabel
+fasjonabelt
+fasjonable
+fasla
+fasle
+faslen
+faslens
+faslet
+fasong
+fasongen
+fasongene
+fasongens
+fasonger
+fast
+fasta
+fastboende
+faste
+fastelavn
+fastelavnen
+fastelavnens
+fastemåned
+fastemåneden
+fastemånedens
+faster
+fasteren
+fasterens
+fastet
+fasthet
+fastheten
+fasthetens
+fastholde
+fastholder
+fastholdt
+fastlagt
+fastland
+fastlandet
+fastlandets
+fastlegge
+fastlegger
+fastlåsing
+fastlåsinga
+fastlåsingen
+fastlåsingens
+fastlåst
+fastlåste
+fastra
+fastre
+fastrene
+fastrer
+fastsatt
+fastsatte
+fastsette
+fastsettelse
+fastsettelsen
+fastsettelsens
+fastsetter
+fastsettes
+fastslå
+fastslo
+fastslår
+fastslås
+fastslått
+fat
+fata
+fatal
+fatale
+fatalisme
+fatalismen
+fatalismens
+fatalist
+fatalisten
+fatalistene
+fatalistens
+fatalister
+fatalistisk
+fatalt
+fatamorgana
+fatamorganaene
+fatamorganaer
+fatamorganaet
+fatamorganaets
+fate
+fatet
+fatla
+fatle
+fatlen
+fatlens
+fatlet
+fatna
+fatne
+fatnet
+fatning
+fatninga
+fatningen
+fatt
+fatta
+fatte
+fatter
+fatteren
+fattes
+fattet
+fattig
+fattigdom
+fattigdommen
+fattigdommens
+fattige
+fattigere
+fattigmannsbakkels
+fattigmannsbakkelsen
+fattigmannsbakkelsens
+fattigslig
+fattigst
+fattigste
+fauk
+fauka
+faukene
+fauker
+fauna
+faunaen
+faunaene
+faunaens
+faunaer
+favn
+favne
+favnen
+favnens
+favner
+favoriser
+favorisere
+favoriserer
+favorisert
+favoriserte
+favoritt
+favoritten
+favorittene
+favorittens
+favoritter
+favør
+favøren
+favørene
+favørens
+favører
+føda
+føde
+fødeavdeling
+fødeavdelinga
+fødeavdelingen
+fødeavdelingene
+fødeavdelingens
+fødeavdelinger
+fødeby
+fødebyen
+fødebyens
+føden
+føderale
+føderalisme
+føderalismen
+føderalismens
+føderasjon
+føderasjonen
+føderasjonene
+føderasjonens
+føderasjoner
+føderativ
+føderativt
+føderåd
+føderådet
+føderådets
+føderådsfolk
+føderådsfolka
+føderådsfolkene
+fødsel
+fødselen
+fødselens
+fødselsdag
+fødselsdagen
+fødselsdagene
+fødselsdagens
+fødselsdager
+fødslene
+fødsler
+født
+fødte
+fe
+feber
+feberen
+feberens
+febril
+febrile
+febrilsk
+febrilt
+februar
+fedd
+fedda
+feddene
+feddet
+feddets
+fedme
+fedmen
+fedmens
+fedre
+fedreland
+fedrelanda
+fedrelandene
+fedrelandet
+fedrelandets
+fedrene
+fedrenes
+fedrift
+fedrifta
+fedriften
+fedriftens
+feen
+feet
+fegra
+fegre
+fegrene
+fegrer
+fei
+feia
+feid
+feiden
+feidene
+feidens
+feider
+feie
+feier
+feieren
+feierens
+feig
+feigd
+feigda
+feige
+feiging
+feigingen
+feigingene
+feigingens
+feiginger
+feigt
+feil
+feila
+feilaktig
+feilaktige
+feile
+feilen
+feilene
+feilens
+feilet
+feilfritt
+feilfunksjon
+feilfunksjonen
+feilfunksjonene
+feilfunksjonens
+feilfunksjoner
+feilgrep
+feilgrepa
+feilgrepene
+feilgrepet
+feilgrepets
+feilmelding
+feilmeldinga
+feilmeldingen
+feilmeldingene
+feilmeldingens
+feilmeldinger
+feilskrevne
+feilslått
+feilslåtte
+feilstavede
+feilstavet
+feilstavete
+feilstaving
+feilstavinga
+feilstavingen
+feilstavingene
+feilstavingens
+feilstavinger
+feiltagelse
+feiltagelsen
+feiltagelsene
+feiltagelsens
+feiltagelser
+feiltakelse
+feiltakelsen
+feiltakelsens
+feinschmecker
+feinschmeckere
+feinschmeckeren
+feinschmeckerens
+feinschmeckeres
+feinschmeckerne
+feinschmeckernes
+feira
+feire
+feirer
+feires
+feiret
+feiring
+feiringa
+feiringen
+feiringens
+feiringer
+feisel
+feiselen
+feiselens
+feislene
+feisler
+feit
+feita
+feite
+feitet
+feitevare
+feitevaren
+feitevarene
+feitevarens
+feitevarer
+feitt
+fekta
+fekte
+fektet
+fekting
+fektinga
+fektingen
+fektingens
+fektning
+fektningen
+fektningens
+fela
+fele
+felg
+felga
+felgen
+felgene
+felgens
+felger
+fell
+felle
+fellen
+fellens
+feller
+felles
+fellesareal
+fellesareala
+fellesarealene
+fellesarealer
+fellesarealet
+fellesarealets
+fellesbo
+fellesboa
+fellesboene
+fellesboet
+fellesboets
+felleseie
+fellesfunksjon
+fellesfunksjonen
+fellesfunksjonene
+fellesfunksjonens
+fellesfunksjoner
+fellesgode
+fellesgodene
+fellesgoder
+fellesgodet
+fellesmarked
+fellesmarkeda
+fellesmarkedene
+fellesmarkeder
+fellesmarkedet
+fellesmarkedets
+fellesnavn
+fellesnevner
+fellesnevnere
+fellesnevneren
+fellesnevnerens
+fellesnevneres
+fellesnevnerne
+fellesnevnernes
+fellesoppgjør
+fellesskap
+fellesskapa
+fellesskapene
+fellesskaper
+fellesskapet
+fellesskapets
+fellestrekk
+fellestrekket
+fellestrekkets
+felling
+fellingstillatelse
+fellingstillatelsen
+fellingstillatelsene
+fellingstillatelsens
+fellingstillatelser
+felt
+felte
+felten
+feltene
+feltens
+felter
+feltet
+feltforskning
+feltforskningen
+feltforskningens
+felts
+feltspat
+feltspaten
+feltspatens
+fem
+fembøring
+fembøringen
+fembøringene
+fembøringens
+fembøringer
+femdel
+femdelen
+femdelene
+femdelens
+femdeler
+femdoble
+femdoblet
+feminin
+feminine
+feminint
+femininum
+femininumet
+femininumets
+feminisme
+feminismen
+feminismens
+feminist
+feministen
+feministene
+feministens
+feminister
+feministisk
+femkrone
+femkronen
+femkronens
+femkroning
+femkroningen
+femkroningene
+femkroningens
+femkroninger
+femmer
+femmere
+femmeren
+femmerens
+femmeres
+femmerne
+femmernes
+femøre
+femøren
+femørens
+femøring
+femøringen
+femøringene
+femøringens
+femøringer
+femårs
+femårsplan
+femårsplanen
+femårsplanene
+femårsplanens
+femårsplaner
+femte
+femtedel
+femtedelen
+femtedelene
+femtedelens
+femtedeler
+femten
+femtende
+femtendel
+femtendelen
+femtendelene
+femtendelens
+femtendeler
+femteplass
+femteplassen
+femteplassene
+femteplassens
+femteplasser
+femti
+femtidel
+femtidelen
+femtidelene
+femtidelens
+femtideler
+femtien
+femtiende
+femtiførste
+femtiårene
+fenad
+fenaden
+fenadens
+fenadlår
+fenadlåra
+fenadlårene
+fenadlåret
+fenadlårets
+fender
+fenderen
+fenderens
+fendra
+fendre
+fendrene
+fendret
+fenga
+fenge
+fengende
+fenger
+fenghetta
+fenghette
+fenghetten
+fenghettens
+fenghetter
+fengsel
+fengselet
+fengselets
+fengselsopphold
+fengselsoppholdet
+fengselsoppholdets
+fengselsstraff
+fengselsstraffa
+fengselsstraffen
+fengselsstraffens
+fengselsstraffer
+fengselsvesen
+fengselsvesenet
+fengselsvesenets
+fengsla
+fengsle
+fengslende
+fengsler
+fengslet
+fengslets
+fengsling
+fengslinga
+fengslingen
+fengslingens
+fengslinger
+fenomen
+fenomenal
+fenomenale
+fenomenalt
+fenomener
+fenomenet
+fenomenets
+fenomens
+fenotype
+fenotypen
+fenotypens
+fenrik
+fenriken
+fenrikene
+fenrikens
+fenriker
+ferd
+ferda
+ferdamann
+ferdamannen
+ferdamannens
+ferdamenn
+ferdamennene
+ferdamennenes
+ferdamenns
+ferde
+ferdedes
+ferden
+ferdes
+ferdesmann
+ferdesmannen
+ferdesmannens
+ferdesmenn
+ferdesmennene
+ferdesmennenes
+ferdesmenns
+ferdig
+ferdigbehandle
+ferdigbehandlet
+ferdige
+ferdighet
+ferdigheten
+ferdighetene
+ferdighetens
+ferdigheter
+ferdighus
+ferdighusa
+ferdighusene
+ferdighuset
+ferdighusets
+ferdigvare
+ferdigvaren
+ferdigvarene
+ferdigvarens
+ferdigvarer
+ferdsel
+ferdselen
+ferdselens
+ferdsle
+ferga
+ferge
+fergen
+fergens
+ferger
+ferget
+ferie
+feriemål
+feriemåla
+feriemålene
+feriemålet
+feriemålets
+ferien
+feriene
+feriens
+feriepenger
+ferier
+feriere
+ferierende
+feriert
+ferierte
+feriested
+feriestedene
+feriesteder
+feriestedet
+feriestedets
+ferietid
+ferietida
+ferietiden
+ferietidens
+ferja
+ferje
+ferjekafé
+ferjekafeen
+ferjekafeene
+ferjekafeens
+ferjekafeer
+ferjen
+ferjens
+ferjet
+ferm
+ferme
+ferment
+fermenta
+fermentene
+fermenter
+fermentet
+fermentets
+fermium
+fermiumet
+fermiumets
+fermt
+ferniss
+fernissen
+fernissene
+fernissens
+fernisser
+fernissere
+fernissert
+fernisserte
+ferritt
+ferritten
+ferrittens
+ferrosilisium
+ferrosilisiumet
+ferrosilisiumets
+fersk
+ferska
+ferske
+fersken
+ferskenen
+ferskenene
+ferskenens
+ferskener
+fersket
+ferskt
+ferskvann
+ferskvannet
+ferskvannets
+fåes
+fesjå
+fesjåa
+fesjåene
+fesjået
+fesjåets
+fesla
+fesle
+feslet
+fest
+festa
+festbord
+festborda
+festbordene
+festbordet
+festbordets
+feste
+festen
+festens
+fester
+festes
+festet
+festing
+festinga
+festingen
+festingens
+festival
+festivalen
+festivalene
+festivalens
+festivaler
+festivitas
+festivitasen
+festivitasens
+festlig
+festlige
+festlighet
+festligheten
+festlighetene
+festlighetens
+festligheter
+festmiddag
+festmiddagen
+festmiddagene
+festmiddagens
+festmiddager
+festmøta
+festmøte
+festmøtene
+festmøter
+festmøtet
+festmøtets
+festna
+festne
+festnet
+festning
+festningen
+festningens
+festsal
+festsalen
+festsalene
+festsalens
+festsaler
+festspill
+festspilla
+festspillene
+festum
+fet
+feta
+fete
+fetere
+feterer
+fetert
+feterte
+fetet
+fetevare
+fetevaren
+fetevarene
+fetevarens
+fetevarer
+fetisj
+fetisjen
+fetisjene
+fetisjens
+fetisjer
+fetla
+fetle
+fetlet
+fett
+fetter
+fettere
+fetteren
+fetterens
+fetteres
+fetterne
+fetternes
+fettet
+fettete
+fevei
+feveien
+feveiens
+fåfengt
+føflekk
+føflekken
+føflekkene
+føflekkens
+føflekker
+fiasko
+fiaskoen
+fiaskoene
+fiaskoens
+fiaskoer
+fiber
+fiberen
+fiberens
+fibrene
+fibrer
+fibrøs
+fibrøst
+fiction
+fiende
+fienden
+fiendens
+fiender
+fiendsk
+fiendskap
+fiendskapen
+fiendskapens
+fiendskapet
+fiendskapets
+fiendtlig
+fiendtlige
+fiff
+fiffa
+fiffe
+fiffen
+fiffens
+fiffet
+fiffig
+fig
+figur
+figuren
+figurene
+figurens
+figurer
+figurere
+figurerer
+figurert
+figurerte
+figurlig
+fijianer
+fijianere
+fijianeren
+fijianerens
+fijianeres
+fijianerne
+fijianernes
+fijiansk
+fik
+fike
+fiken
+fikene
+fikenen
+fikenens
+fiker
+fiket
+fikk
+fikne
+fikner
+fiks
+fiksa
+fikse
+fikserbilde
+fikserbildet
+fikset
+fiksjon
+fiksjonen
+fiksjonene
+fiksjonens
+fiksjoner
+fiksstjerna
+fiksstjerne
+fiksstjernen
+fiksstjernens
+fikst
+fiktiv
+fiktive
+fiktivt
+fil
+fila
+filantrop
+filantropen
+filantropene
+filantropens
+filantroper
+filantropi
+filantropien
+filantropiens
+filantropisk
+filatelist
+filatelisten
+filatelistene
+filatelistens
+filatelister
+file
+filen
+filene
+filens
+filer
+filere
+filert
+filerte
+filet
+fileten
+filetene
+filetens
+fileter
+filetere
+filetert
+fileterte
+filharmonisk
+filial
+filialen
+filialene
+filialens
+filialer
+filigran
+filigranene
+filigraner
+filigranet
+filigranets
+filipens
+filipensen
+filipensene
+filipensens
+filipenser
+filipine
+filipinen
+filipinens
+filippiner
+filippinere
+filippineren
+filippinerens
+filippineres
+filippinerne
+filippinernes
+filippinsk
+filister
+filistere
+filisteren
+filisterens
+filisteres
+filisterne
+filisternes
+filistrer
+filkjøring
+filkjøringa
+filkjøringen
+filkjøringens
+filla
+fille
+filler
+fillerya
+fillerye
+filleryen
+filleryens
+filleryer
+fillet
+fillete
+film
+filma
+filmatisere
+filmatisering
+filmatiseringa
+filmatiseringen
+filmatiseringens
+filmatisert
+filmatiserte
+filme
+filmen
+filmene
+filmens
+filmer
+filmes
+filmet
+filmkontroll
+filmkontrollen
+filmkontrollens
+filmopptak
+filmopptaka
+filmopptakene
+filmopptaker
+filmopptaket
+filmopptakets
+films
+filmsensur
+filmsensuren
+filmsensurens
+filmstjerna
+filmstjerne
+filmstjernen
+filmstjernene
+filmstjernens
+filmstjerner
+filmstripp
+filmstrippen
+filmstrippens
+filnavn
+filnavna
+filnavnene
+filnavnet
+filnavnets
+filolog
+filologen
+filologene
+filologens
+filologer
+filologi
+filologien
+filologiens
+filologisk
+filologiske
+filosof
+filosofen
+filosofene
+filosofens
+filosofer
+filosofi
+filosofien
+filosofiene
+filosofiens
+filosofier
+filosofisk
+filosofiske
+filt
+filta
+filten
+filtens
+filter
+filteret
+filterets
+filtet
+filthatt
+filthatten
+filthattene
+filthattens
+filthatter
+filtra
+filtre
+filtrene
+filtrere
+filtrert
+filtrerte
+filtret
+filtrets
+fin
+final
+finalen
+finalene
+finalens
+finaler
+finalist
+finalisten
+finalistene
+finalistens
+finalister
+finans
+finansen
+finansene
+finansens
+finanser
+finansiell
+finansiere
+finansieres
+finansiering
+finansieringa
+finansieringen
+finansieringens
+finansiert
+finansierte
+finanskomité
+finanskomiteen
+finanskomiteene
+finanskomiteens
+finanskomiteer
+finansminister
+finansministeren
+finansministerens
+finansministrene
+finanspolitikk
+finanspolitikken
+finanspolitikkens
+fine
+finere
+finert
+finerte
+finesse
+finessen
+finessene
+finessens
+finesser
+fineste
+finger
+fingerbøl
+fingerbøla
+fingerbølene
+fingerbølet
+fingerbølets
+fingeren
+fingerens
+fingert
+fingerte
+fingertupp
+fingertuppen
+fingertuppene
+fingertuppens
+fingertupper
+fingra
+fingre
+fingrene
+fingrer
+fingret
+finhet
+finheten
+finhetens
+finish
+finishen
+finishene
+finishens
+finisher
+fink
+finken
+finkene
+finkens
+finker
+finlandsk
+finlending
+finlendingen
+finlendingene
+finlendingens
+finlendinger
+finmasket
+finn
+finne
+finnegamp
+finnegampen
+finnegampene
+finnegampens
+finnegamper
+finnen
+finnene
+finner
+finnerlønn
+finnerlønna
+finnerlønnen
+finnerlønnens
+finnes
+finnet
+finnete
+finngras
+finngraset
+finngrasets
+finnhval
+finnhvalen
+finnhvalene
+finnhvalens
+finnhvaler
+finnmarking
+finnmarkingen
+finnmarkingene
+finnmarkingens
+finnmarkinger
+fins
+finsk
+finske
+finslig
+finsmaker
+finsmakere
+finsmakeren
+finsmakerens
+finsmakeres
+finsmakerne
+finsmakernes
+fint
+finta
+finten
+fintene
+fintens
+finter
+fintet
+finurlig
+fiol
+fiolen
+fiolene
+fiolens
+fioler
+fiolett
+fiolettet
+fiolin
+fiolinen
+fiolinene
+fiolinens
+fioliner
+fiolinist
+fiolinisten
+fiolinistene
+fiolinistens
+fiolinister
+fiolinkonsert
+fiolinkonserten
+fiolinkonsertene
+fiolinkonsertens
+fiolinkonserter
+fippskjegg
+fippskjegget
+fippskjeggets
+fira
+fire
+firedel
+firedelen
+firedelene
+firedelens
+firedeler
+firene
+firer
+firere
+fireren
+firerens
+fireres
+fireårig
+firerne
+firernes
+firet
+firetaktsmotor
+firetaktsmotoren
+firetaktsmotorene
+firetaktsmotorens
+firetaktsmotorer
+firetoms
+firfisla
+firfisle
+firfislen
+firfislene
+firfislens
+firfisler
+firføtt
+firhendig
+firkant
+firkanta
+firkanten
+firkantene
+firkantens
+firkanter
+firkantet
+firling
+firlingen
+firlingene
+firlingens
+firlinger
+firma
+firmaene
+firmaer
+firmaet
+firmaets
+firmament
+firmamenta
+firmamentene
+firmamenter
+firmamentet
+firmamentets
+firmenning
+firmenningen
+firmenningene
+firmenningens
+firmenninger
+firskåren
+firskårent
+firskårne
+firspann
+firspanna
+firspannene
+firspannet
+firspannets
+firsprang
+firspranget
+firsprangets
+first
+firtoms
+fis
+fisen
+fisene
+fisens
+fiser
+fisjon
+fisjonen
+fisjonene
+fisjonens
+fisjoner
+fisk
+fiska
+fiskaltoll
+fiskaltollen
+fiskaltollens
+fiskand
+fiskanda
+fiskanden
+fiskandens
+fiske
+fiskebein
+fiskebeina
+fiskebeinet
+fiskebeinets
+fiskebåt
+fiskebåten
+fiskebåtene
+fiskebåtens
+fiskebåter
+fiskefartøy
+fiskefartøya
+fiskefartøyene
+fiskefartøyer
+fiskefartøyet
+fiskefartøyets
+fiskeflåte
+fiskeflåten
+fiskeflåtene
+fiskeflåtens
+fiskeflåter
+fiskemiddag
+fiskemiddagen
+fiskemiddagene
+fiskemiddagens
+fiskemiddager
+fisken
+fiskens
+fiskeoppdrett
+fiskeoppdretta
+fiskeoppdrettene
+fiskeoppdretter
+fiskeoppdrettet
+fiskeoppdrettets
+fiskepudding
+fiskepuddingen
+fiskepuddingene
+fiskepuddingens
+fiskepuddinger
+fisker
+fiskerbåt
+fiskerbåten
+fiskerbåtene
+fiskerbåtens
+fiskerbåter
+fiskere
+fiskeredskap
+fiskeredskapene
+fiskeredskaper
+fiskeredskapet
+fiskeredskapets
+fiskeren
+fiskerens
+fiskeres
+fiskeri
+fiskeria
+fiskeribiologi
+fiskeribiologien
+fiskeribiologiens
+fiskeriene
+fiskerier
+fiskeriet
+fiskeriets
+fiskerigrense
+fiskerigrensen
+fiskerigrensens
+fiskerimuseene
+fiskerimuseer
+fiskerimuseet
+fiskerimuseets
+fiskerimuseum
+fiskerinæring
+fiskerinæringa
+fiskerinæringen
+fiskerinæringens
+fiskeripolitikk
+fiskeripolitikken
+fiskeripolitikkens
+fiskerne
+fiskernes
+fiskeskjell
+fiskeskjellet
+fiskeskjellets
+fiskeslo
+fiskesloet
+fiskesloets
+fiskestang
+fiskestanga
+fiskestangen
+fiskestangens
+fiskestim
+fiskestimen
+fiskestimene
+fiskestimens
+fiskestimer
+fisket
+fiskevann
+fiskevanna
+fiskevannene
+fiskevannet
+fiskevannets
+fiskevatn
+fiskevatna
+fiskevatnet
+fiskevatnets
+fiskevær
+fiskeværa
+fiskeværene
+fiskeværet
+fiskeværets
+fisletut
+fisletuten
+fisletutene
+fisletutens
+fisletuter
+fiss
+fissen
+fistel
+fistelen
+fistelens
+fistle
+fistler
+fjams
+fjamse
+fjamset
+fjas
+fjasa
+fjase
+fjaset
+fjed
+fjeda
+fjedene
+fjedet
+fjedets
+fjel
+fjela
+fjelen
+fjelene
+fjelens
+fjeler
+fjelg
+fjelga
+fjelge
+fjelget
+fjelgt
+fjell
+fjella
+fjellaure
+fjellauren
+fjellaurens
+fjellband
+fjellbandet
+fjellbandets
+fjellbygg
+fjellene
+fjellet
+fjellets
+fjellgard
+fjellgarden
+fjellgardene
+fjellgardens
+fjellgarder
+fjellgras
+fjellgraset
+fjellgrasets
+fjellområda
+fjellområde
+fjellområdene
+fjellområder
+fjellområdet
+fjellområdets
+fjells
+fjellsletta
+fjellslette
+fjellslettene
+fjellsletter
+fjellvidda
+fjellvidde
+fjellvidden
+fjellviddene
+fjellviddens
+fjellvidder
+fjerde
+fjerdedel
+fjerdedelen
+fjerdedelene
+fjerdedelens
+fjerdedeler
+fjerdepart
+fjerdeparten
+fjerdepartene
+fjerdepartens
+fjerdeparter
+fjerdeplass
+fjerdeplassen
+fjerdeplassene
+fjerdeplassens
+fjerdeplasser
+fjerding
+fjerdingen
+fjerdingene
+fjerdingens
+fjerdinger
+fjern
+fjerna
+fjerne
+fjerner
+fjernere
+fjernes
+fjernest
+fjerneste
+fjernet
+fjerning
+fjerninga
+fjerningen
+fjerningens
+fjernseer
+fjernseeren
+fjernseerens
+fjernskriver
+fjernskrivere
+fjernskriveren
+fjernskriverens
+fjernskriveres
+fjernskriverne
+fjernskrivernes
+fjernstyre
+fjernstyret
+fjernsyn
+fjernsyna
+fjernsynene
+fjernsynet
+fjernsynets
+fjernsynsapparat
+fjernsynsapparatene
+fjernsynsapparater
+fjernsynsapparatet
+fjernsynsapparatets
+fjernsynskamera
+fjernsynskameraene
+fjernsynskameraer
+fjernsynskameraet
+fjernsynskameraets
+fjernsynslisens
+fjernsynslisensen
+fjernsynslisensens
+fjernsynsoverføring
+fjernsynsoverføringa
+fjernsynsoverføringen
+fjernsynsoverføringens
+fjernsynsprogram
+fjernsynsprogrammene
+fjernsynsprogrammer
+fjernsynsprogrammet
+fjernsynsprogrammets
+fjernsynsreportasje
+fjernsynsreportasjen
+fjernsynsreportasjene
+fjernsynsreportasjens
+fjernsynsreportasjer
+fjernt
+fjerntliggende
+fjernvalg
+fjernvalget
+fjernvalgets
+fjes
+fjesa
+fjesene
+fjeset
+fjesets
+fjesk
+fjeska
+fjeske
+fjesket
+fjetra
+fjetre
+fjetret
+fjåg
+fjåge
+fjågt
+fjøl
+fjøla
+fjølene
+fjøler
+fjoll
+fjolla
+fjollen
+fjollene
+fjollens
+fjoller
+fjollet
+fjollete
+fjols
+fjolsa
+fjolsene
+fjolset
+fjolsets
+fjon
+fjona
+fjonene
+fjonet
+fjor
+fjord
+fjordbotn
+fjordbotnen
+fjordbotnens
+fjorden
+fjordene
+fjorder
+fjording
+fjordingen
+fjordingene
+fjordingens
+fjordinger
+fjords
+fjorgammel
+fjorår
+fjoråret
+fjorårets
+fjorten
+fjortende
+fjortendel
+fjortendelen
+fjortendelene
+fjortendelens
+fjortendeler
+fjott
+fjotta
+fjotten
+fjottene
+fjottens
+fjotter
+fjottet
+fjær
+fjør
+fjæra
+fjøra
+fjære
+fjøre
+fjæren
+fjærens
+fjærer
+fjører
+fjærestein
+fjæresteinene
+fjæret
+fjøret
+fjørfe
+fjøs
+fjøsa
+fjøsen
+fjøsene
+fjøsens
+fjøset
+fjøsets
+fjøsgolv
+fjøsgolva
+fjøsgolvene
+fjøsgolvet
+fjøsgolvets
+fjøsrøkter
+fjøsrøktere
+fjøsrøkteren
+fjøsrøkterens
+fjøsrøkteres
+fjøsrøkterne
+fjøsrøkternes
+føk
+føket
+fåkunna
+fåkunne
+flå
+flø
+fæl
+føl
+flåa
+flabb
+flabben
+flabbene
+flabbens
+flabber
+flabbet
+flabbete
+flaberg
+flaberget
+flabergets
+flaga
+flage
+flagen
+flagene
+flagens
+flageolett
+flageoletten
+flageolettene
+flageolettens
+flageoletter
+flager
+flaget
+flagg
+flagga
+flagge
+flaggene
+flaggermus
+flaggermusa
+flaggermusen
+flaggermusene
+flaggermusens
+flaggermuser
+flagget
+flagging
+flagginga
+flaggingen
+flaggingens
+flaggstang
+flaggstanga
+flaggstangen
+flaggstangens
+flagra
+flagre
+flagrende
+flagret
+flak
+flaket
+flakets
+flakk
+flakke
+flakket
+flakna
+flakne
+flaknet
+flakong
+flakongen
+flakongene
+flakongens
+flakonger
+flaks
+flaksa
+flakse
+flaksen
+flaksens
+flakset
+flambere
+flambert
+flamberte
+flamenco
+flamencoen
+flamencoene
+flamencoens
+flamencoer
+flamingo
+flamingoen
+flamingoene
+flamingoens
+flamingoer
+flamma
+flamme
+flammen
+flammene
+flammens
+flammer
+flammet
+flammete
+flamsk
+flanell
+flanellen
+flanellens
+flanellograf
+flanellografen
+flanellografene
+flanellografens
+flanellografer
+flanelltavla
+flanelltavle
+flanelltavlen
+flanelltavlens
+flanke
+flanken
+flankens
+flankere
+flankert
+flankerte
+flara
+flare
+flaren
+flarene
+flarens
+flarer
+flaret
+flask
+flaska
+flaske
+flaskehals
+flaskehalsen
+flaskehalsene
+flaskehalsens
+flaskehalser
+flasken
+flaskene
+flasker
+flass
+flassa
+flasse
+flasset
+flat
+flata
+flatbrød
+flatbrøda
+flatbrødene
+flatbrødet
+flatbrødets
+flate
+flatemål
+flatemålet
+flatemålets
+flaten
+flatene
+flater
+flatna
+flatne
+flatnet
+flatorm
+flatstål
+flatstålet
+flatstålets
+flatt
+flatterende
+flau
+flaua
+flaue
+flauet
+flaug
+flause
+flausen
+flausens
+flaut
+følbar
+følbare
+følbart
+fæle
+føle
+flegma
+flegmaet
+flegmaets
+flegmatisk
+følehorn
+følehornet
+følehornets
+flein
+fleinskalla
+fleip
+fleipa
+fleipen
+fleipene
+fleipens
+fleiper
+fleipet
+fleipete
+fleis
+fleisen
+fleisene
+fleisens
+fleiser
+flekk
+flekka
+flekke
+flekken
+flekkens
+flekker
+flekket
+flekkete
+flekkfri
+flekktyfus
+flekktyfusen
+flekktyfusens
+fleksibel
+fleksibelt
+fleksibilitet
+fleksibiliteten
+fleksibilitetens
+fleksible
+fleksjon
+fleksjonen
+fleksjonene
+fleksjonens
+fleksjoner
+flekt
+flekte
+følelig
+følelse
+følelsen
+følelsene
+følelsens
+følelser
+følelseslaus
+følelsesmessig
+følelsesmessige
+fælen
+fleng
+flenga
+flengen
+flengene
+flengens
+flenger
+flenget
+flens
+flensa
+flense
+flensen
+flensens
+flenset
+fælent
+flåer
+føler
+flerbrukersystem
+flerbrukersystema
+flerbrukersystemene
+flerbrukersystemer
+flerbrukersystemet
+flerbrukersystemets
+flere
+flåere
+flåeren
+flåerens
+flåeres
+flerfoldige
+flåerne
+flåernes
+flerra
+flerre
+flerren
+flerrens
+flerret
+flerstavelsesord
+flerstavelsesordet
+flerstavelsesordets
+flertall
+flertalla
+flertallene
+flertallet
+flertallets
+flertallsbøyning
+flertallsbøyningen
+flertallsbøyningens
+flertallsform
+flertallsforma
+flertallsformen
+flertallsformene
+flertallsformens
+flertallsformer
+fles
+føles
+flesa
+flesk
+fleske
+fleskesvor
+fleskesvoren
+fleskesvorens
+flesket
+flest
+fleste
+fælet
+følet
+fletning
+fletningen
+fletningene
+fletningens
+fletninger
+flett
+fletta
+flette
+fletter
+flettet
+fletting
+flettinga
+flettingen
+flettingens
+følg
+følge
+følgelig
+følgen
+følgende
+følgene
+følger
+følges
+følget
+følgje
+følgjet
+følgt
+følgte
+fli
+flid
+fliden
+flidens
+flik
+flika
+fliken
+flikene
+flikens
+fliker
+fliket
+flikete
+flikk
+flikka
+flikke
+flikket
+flikkflakk
+flikkflakken
+flikkflakkens
+flikra
+flikre
+flikret
+flimmer
+flimmeret
+flimmerets
+flimra
+flimre
+flimret
+flimring
+flimringa
+flimringen
+flimringens
+fline
+flinet
+føling
+følingen
+følingens
+flink
+flinke
+flinkere
+flinkt
+flint
+flinten
+flintene
+flintens
+flinter
+flintestein
+flintesteinen
+flintesteinens
+flintskalla
+flipp
+flippa
+flippen
+flippene
+flippens
+flipper
+flippet
+flir
+flire
+fliren
+flirens
+fliret
+flis
+flisa
+flisen
+flisene
+flisens
+fliser
+flisespikkeri
+flisespikkeriet
+flisespikkeriets
+flisespikking
+flisespikkinga
+flisespikkingen
+flisespikkingens
+fliset
+flisete
+flitter
+flitteret
+flitterets
+flittig
+flittige
+føljetong
+føljetongen
+føljetongene
+føljetongens
+føljetonger
+flåkjefta
+føll
+føllet
+føllets
+flømme
+flømmer
+fælne
+flo
+floa
+flod
+flodbåt
+flodbåten
+flodbåtene
+flodbåtens
+flodbåter
+floden
+flodhest
+flodhesten
+flodhestene
+flodhestens
+flodhester
+floen
+floens
+floghavre
+floghavren
+floghavrens
+floka
+floke
+floken
+floket
+flokete
+flokk
+flokka
+flokke
+flokken
+flokkens
+flokket
+floks
+floksa
+flokse
+flokset
+flom
+flomål
+flomålet
+flomålets
+flomma
+flomme
+flommen
+flommens
+flommet
+flor
+flora
+floraen
+floraene
+floraens
+floraer
+florere
+florert
+florerte
+floret
+florett
+floretten
+florettene
+florettens
+floretter
+florisant
+floskel
+floskelen
+floskelens
+flosklene
+floskler
+flosshatt
+flosshatten
+flosshattene
+flosshattens
+flosshatter
+flotilje
+flotiljen
+flotiljens
+flotna
+flotne
+flotnet
+flott
+flotte
+flottør
+flottøren
+flottørene
+flottørens
+flottører
+flæra
+flære
+flæren
+flærene
+flærens
+flærer
+flæret
+flørt
+flørta
+flørte
+flørten
+flørtens
+flørtet
+flås
+flåse
+flåset
+flåsete
+fælslig
+følsom
+følsomhet
+følsomheten
+følsomhetens
+følsomme
+følsomt
+fløt
+fælt
+følt
+fløta
+flåte
+følte
+flåten
+fløten
+flåtens
+fløtens
+fløter
+fløtere
+fløteren
+fløterens
+fløteres
+fløterne
+fløternes
+føltes
+fløtet
+flått
+flåtten
+flåttene
+flåttens
+flåtter
+fløttmann
+fløttmannen
+fløttmannens
+fløttmenn
+fløttmennene
+fløttmennenes
+fløttmenns
+flu
+flua
+fluen
+fluene
+fluens
+fluer
+fluid
+fluida
+fluidene
+fluider
+fluidet
+fluidets
+fluidum
+fluidumene
+fluidumer
+fluidumet
+fluidumets
+fluks
+fluksa
+fluksen
+fluksens
+flukser
+flukt
+flukta
+flukte
+flukten
+flunkende
+fluor
+fluoren
+fluorens
+fluorer
+fluorescens
+fluorescensen
+fluorescensens
+fluorescere
+fluorescert
+fluorescerte
+fluoret
+fluorets
+fluoridere
+fluoridert
+fluoriderte
+fluorisere
+fluorisert
+fluoriserte
+flush
+flushen
+flushens
+flust
+fly
+fløy
+flya
+fløya
+flyangrep
+flyangrepa
+flyangrepene
+flyangrepet
+flyangrepets
+flybase
+flybasen
+flybasene
+flybasens
+flybaser
+flybillett
+flybilletten
+flybillettene
+flybillettens
+flybilletter
+flybåren
+flydd
+flydur
+flyduren
+flydurens
+fløyen
+flyende
+flyene
+fløyene
+fløyenes
+fløyer
+flyet
+fløyet
+flyets
+flyfører
+flyførere
+flyføreren
+flyførerens
+flyføreres
+flyførerne
+flyførernes
+flyge
+flygeidé
+flygeideen
+flygeideene
+flygeideens
+flygeideer
+flygel
+flygelet
+flygelets
+flyger
+flygere
+flygeren
+flygerens
+flygeres
+flygerne
+flygernes
+flygla
+flyglene
+flygler
+flyglet
+flyglets
+flying
+flyinga
+flyingen
+flyingens
+flykt
+flykta
+flykte
+flykter
+flyktet
+flyktig
+flyktning
+flyktningen
+flyktningene
+flyktningenes
+flyktningens
+flyktninger
+flyktninghjelp
+flyktninghjelpa
+flyktninghjelpen
+flyktninghjelpens
+fløymann
+fløymannen
+fløymannens
+fløymenn
+fløymennene
+fløymennenes
+fløymenns
+flyndra
+flyndre
+flyndren
+flyndrens
+flyplass
+flyplassen
+flyplassene
+flyplassens
+flyplasser
+flypost
+flyposten
+flypostens
+flyr
+flyreisa
+flyreise
+flyreisen
+flyreisene
+flyreisens
+flyreiser
+flyruta
+flyrute
+flyruten
+flyrutene
+flyrutens
+flyruter
+flyselskap
+flyselskapa
+flyselskapene
+flyselskaper
+flyselskapet
+flyselskapets
+flyt
+fløyt
+fløyta
+flyte
+fløyte
+flytegrensa
+flytegrense
+flytegrensen
+flytegrensens
+flyten
+fløyten
+flytende
+fløytenist
+fløytenisten
+fløytenistene
+fløytenistens
+fløytenister
+fløytens
+flyter
+fløyter
+fløytere
+fløyteren
+fløyterens
+fløyteres
+fløyterne
+fløyternes
+fløytet
+fløytetone
+fløytetonen
+fløytetonene
+fløytetonens
+fløytetoner
+fløytist
+fløytisten
+fløytistene
+fløytistens
+fløytister
+flytrafikk
+flytrafikken
+flytrafikkens
+flytt
+flytta
+flyttbar
+flyttbare
+flyttbart
+flytte
+flyttelass
+flyttelassa
+flyttelassene
+flyttelasset
+flyttelassets
+flytter
+flyttes
+flyttet
+flyttfugl
+flytting
+flyttinga
+flyttingen
+flyttingene
+flyttingens
+flyttinger
+flyulykke
+flyulykken
+flyulykkene
+flyulykkens
+flyulykker
+flyvertinna
+flyvertinne
+flyvertinnen
+flyvertinnens
+flyvåpen
+flyvåpenet
+flyvåpenets
+fåmælt
+fnatt
+fnattet
+fnattete
+fnokk
+fnokken
+fnokkene
+fnokkens
+fnokker
+fnøs
+fnugg
+fnugga
+fnuggene
+fnugger
+fnugget
+fnuggets
+fønvind
+fønvinden
+fønvindens
+fnyse
+fnyst
+fnyste
+fånytte
+foajé
+foajeen
+foajeene
+foajeens
+foajeer
+fogd
+fogden
+fogdene
+fogdens
+fogder
+fokk
+fokka
+fokken
+fokkene
+fokkens
+fokker
+fokket
+fokkets
+fokus
+fokuser
+fokusere
+fokusering
+fokuseringa
+fokuseringen
+fokuseringens
+fokusert
+fokuserte
+fol
+fola
+fold
+folda
+folde
+folden
+foldens
+folder
+foldere
+folderen
+folderens
+folderes
+folderne
+foldernes
+foldeskjørt
+foldeskjørta
+foldeskjørtene
+foldeskjørtet
+foldeskjørtets
+foldet
+fole
+folen
+folens
+folet
+foliant
+folianten
+foliantene
+foliantens
+folianter
+folie
+folien
+foliens
+folio
+folioen
+folioens
+folk
+folka
+folke
+folkeavstemning
+folkeavstemningen
+folkeavstemningene
+folkeavstemningens
+folkeavstemninger
+folkedans
+folkedansen
+folkedansene
+folkedansens
+folkedanser
+folkeferd
+folkeferdet
+folkeferdets
+folkegruppa
+folkegruppe
+folkegruppen
+folkegruppene
+folkegruppens
+folkegrupper
+folkehøyskole
+folkehøyskolen
+folkehøyskolene
+folkehøyskolens
+folkehøyskoler
+folkekrav
+folkekrava
+folkekravene
+folkekravet
+folkekravets
+folkelig
+folkelige
+folkelivsskildring
+folkelivsskildringa
+folkelivsskildringen
+folkelivsskildringene
+folkelivsskildringens
+folkelivsskildringer
+folkemunne
+folkemunner
+folkemuseene
+folkemuseer
+folkemuseet
+folkemuseets
+folkemuseum
+folkemusikk
+folkemusikken
+folkemusikkens
+folkene
+folkeopplysning
+folkeopplysningen
+folkeopplysningens
+folkeopplysningsarbeid
+folkeopplysningsarbeidet
+folkeopplysningsarbeidets
+folkeparti
+folkepartia
+folkepartiet
+folkepartiets
+folkerepublikk
+folkerepublikken
+folkerepublikkens
+folkeskole
+folkeskolen
+folkeskolene
+folkeskolens
+folkeskoler
+folkestyre
+folkestyrt
+folkestyrte
+folket
+folketall
+folketalla
+folketallene
+folketallet
+folketallets
+folketing
+folketinget
+folketingets
+folketrygd
+folketrygda
+folketrygden
+folketrygdens
+folketrygdet
+folkets
+folkevisa
+folkevise
+folkevisen
+folkevisens
+folkeviser
+folkevogn
+folkevogna
+folkevognen
+folkevognene
+folkevognens
+folklore
+folkloren
+folklorens
+folklorist
+folkloristen
+folkloristene
+folkloristens
+folklorister
+folks
+folksomt
+foll
+folla
+folle
+follekniv
+follekniven
+folleknivene
+folleknivens
+follekniver
+follet
+folna
+folne
+folnet
+fomla
+fomle
+fomlene
+fomler
+fomlet
+fomling
+fomlinga
+fomlingen
+fomlingens
+fommel
+fommelen
+fommelens
+fond
+fonden
+fondens
+fondet
+fondets
+fonds
+fondue
+fonduen
+fonduens
+fonetiker
+fonetikere
+fonetikeren
+fonetikerens
+fonetikeres
+fonetikerne
+fonetikernes
+fonetikk
+fonetikken
+fonetikkens
+fonetisk
+fonn
+fonna
+fonnene
+fonner
+fonnet
+for
+fora
+foraene
+forakt
+forakta
+forakte
+foraktelig
+forakter
+foraktet
+foran
+foranderlig
+forandra
+forandre
+forandrer
+forandres
+forandret
+forandring
+forandringa
+forandringen
+forandringene
+forandringens
+forandringer
+forankre
+forankret
+forankring
+forankringa
+forankringen
+forankringene
+forankringens
+forankringer
+foranstalta
+foranstalte
+foranstaltet
+foranstaltning
+foranstaltningen
+foranstaltningene
+foranstaltningens
+foranstaltninger
+forarbeid
+forarbeida
+forarbeidd
+forarbeidde
+forarbeide
+forarbeidene
+forarbeider
+forarbeidet
+forarbeidets
+forarga
+forarge
+forargelig
+forargelse
+forargelsen
+forargelsens
+forarget
+forband
+forbandt
+forbann
+forbanna
+forbanne
+forbannede
+forbannelse
+forbannelsen
+forbannelsens
+forbanner
+forbannet
+forbausa
+forbause
+forbauselse
+forbauselsen
+forbauselsens
+forbausende
+forbauser
+forbauset
+forbød
+forbedra
+forbedre
+forbedrer
+forbedres
+forbedret
+forbedring
+forbedringa
+forbedringen
+forbedringer
+forbehold
+forbeholde
+forbeholder
+forbeholdes
+forbeholdet
+forbeholdt
+forbered
+forberede
+forberedelse
+forberedelsen
+forberedelsene
+forberedelsens
+forberedelser
+forberedende
+forbereder
+forberedes
+forberedt
+forberedte
+forbi
+forbifart
+forbifarten
+forbifartens
+forbigående
+forbigått
+forbikjøring
+forbikjøringa
+forbikjøringen
+forbikjøringene
+forbikjøringens
+forbikjøringer
+forbilde
+forbildene
+forbilder
+forbildet
+forbinde
+forbindelse
+forbindelsen
+forbindelsene
+forbindelsens
+forbindelser
+forbindelseslinja
+forbindelseslinje
+forbindelseslinjen
+forbindelseslinjene
+forbindelseslinjens
+forbindelseslinjer
+forbinder
+forbindes
+forbindinga
+forbindingen
+forbindingene
+forbindtlig
+forbindtlighet
+forbindtligheten
+forbindtlighetens
+forbipasserende
+forbitra
+forbitrelse
+forbitrelsen
+forbitrelsens
+forble
+forblei
+forbløffe
+forbløffende
+forbløffet
+forbli
+forblinda
+forblinde
+forblindet
+forblir
+forblitt
+forbønn
+forbønna
+forbønnen
+forbønnene
+forbønnens
+forbønner
+forborgen
+forborgent
+forborgne
+forbrenn
+forbrenne
+forbrennende
+forbrenner
+forbrennes
+forbrenning
+forbrenninga
+forbrent
+forbrente
+forbruk
+forbruke
+forbruker
+forbrukerdepartement
+forbrukerdepartementet
+forbrukerdepartementets
+forbrukeren
+forbrukerens
+forbrukerne
+forbrukernes
+forbrukerråd
+forbrukerrådet
+forbrukerrådets
+forbrukes
+forbruket
+forbruksutgift
+forbruksutgiften
+forbruksutgiftene
+forbruksutgiftens
+forbruksutgifter
+forbrukt
+forbrutt
+forbryte
+forbrytelse
+forbrytelsen
+forbrytelsene
+forbrytelsens
+forbrytelser
+forbryter
+forbryteren
+forbryterens
+forbryterne
+forbryting
+forbrytingen
+forbud
+forbudet
+forbudets
+forbudt
+forbund
+forbunden
+forbundet
+forbundets
+forbundne
+forbunds
+forbundsdag
+forbundsdagen
+forbundsdagens
+forbundsfelle
+forbundsfellen
+forbundsfellens
+forbundsstyre
+forbundsstyret
+forby
+forbydd
+forbydde
+forbyr
+forbys
+forbytning
+forbytningen
+forbytningene
+forbytningens
+forbytninger
+forbytta
+forbytte
+forbytter
+forbyttes
+forbyttet
+forbytting
+forbyttinga
+forbyttingen
+forbyttingens
+force
+fordampa
+fordampe
+fordamper
+fordampet
+fordamping
+fordampinga
+fordampingen
+fordampingens
+fordampning
+fordampningen
+fordampningens
+fordekt
+fordekte
+fordektig
+fordel
+fordelaktig
+fordelaktige
+fordele
+fordelen
+fordelene
+fordelens
+fordeler
+fordeles
+fordeling
+fordelinga
+fordelingen
+fordelt
+fordelte
+forderv
+forderva
+forderve
+fordervet
+fordi
+fordømme
+fordømmelse
+fordømmelsen
+fordømmelsens
+fordømmer
+fordømmes
+fordømt
+fordømte
+fordobla
+fordoble
+fordoblet
+fordobling
+fordoblinga
+fordoblingen
+fordoblingene
+fordoblingens
+fordoblinger
+fordom
+fordommen
+fordommene
+fordommens
+fordommer
+fordomsfri
+fordra
+fordragelighet
+fordrageligheten
+fordragelighetens
+fordrar
+fordre
+fordrer
+fordret
+fordring
+fordringa
+fordringen
+fordringer
+fordringsløse
+fordringsløst
+fordrive
+fordriver
+fordrives
+fordum
+fordumma
+fordumme
+fordums
+fordunsting
+fordunstinga
+fordunstingen
+fordunstingens
+fordunstning
+fordunstningen
+fordunstningene
+fordunstningens
+fordunstninger
+fordøya
+fordøye
+fordøyelse
+fordøyelsen
+fordøyelsens
+fordøyer
+fordøyet
+fordypa
+fordype
+fordypet
+fordypning
+fordypningen
+fordypningene
+fordypningens
+fordypninger
+fordyra
+fordyre
+fordyret
+fore
+forebygge
+forebyggende
+foredla
+foredle
+foredlede
+foredlet
+foredling
+foredlinga
+foredlingen
+foredlingene
+foredlingens
+foredlinger
+foredrag
+foredraga
+foredragene
+foredraget
+foredragets
+foredragsholder
+foredragsholdere
+foredragsholderen
+foredragsholderens
+foredragsholderes
+foredragsholderne
+foredragsholdernes
+foredrar
+forefalle
+forefaller
+forefinnes
+foregå
+foregangsmann
+foregangsmannen
+foregangsmannens
+foregangsmenn
+foregangsmennene
+foregangsmennenes
+foregangsmenns
+foregående
+foregikk
+foregår
+foregripe
+foregriper
+foregått
+forekom
+forekomme
+forekommende
+forekommer
+forekommet
+forekomst
+forekomsten
+forekomstene
+forekomstens
+forekomster
+forelå
+forelagt
+foreldede
+forelder
+forelderen
+forelderens
+foreldre
+foreldrene
+foreldrenes
+foreldres
+forelegg
+forelegge
+forelegges
+forelegget
+forelese
+foreleser
+forelesere
+foreleseren
+foreleserens
+foreleseres
+foreleserne
+forelesernes
+forelesning
+forelesningen
+forelesningene
+forelesningens
+forelesninger
+forelesningssal
+forelesningssalen
+forelesningssalene
+forelesningssalens
+forelesningssaler
+forelest
+foreligge
+foreliggende
+foreligger
+foreligget
+foreløpig
+foreløpige
+forelska
+forelske
+forelskelse
+forelskelsen
+forelskelsens
+forelsker
+forelsket
+foren
+forene
+forener
+forenes
+forenet
+forening
+foreninga
+foreningen
+foreningene
+foreningenes
+foreningens
+foreninger
+forenings
+forenkle
+forenklede
+forenkles
+forenklet
+forenkling
+forenklinga
+forenklingen
+forenklingens
+forenklinger
+forenlig
+forent
+forente
+foresatt
+foresatte
+foreskrevne
+foreskrive
+foreskriver
+foreslå
+foreslåes
+foreslo
+foreslår
+foreslås
+foreslått
+foreslåtte
+forespeile
+forespeilet
+forespørre
+forespørsel
+forespørselen
+forespørselens
+forespørslene
+forespørsler
+forespurt
+forestå
+forestående
+forestill
+forestille
+forestiller
+forestilling
+forestillinga
+forestillingen
+forestillingene
+forestillingens
+forestillinger
+foresto
+forestår
+foresveva
+foresveve
+foresvever
+foresvevet
+foret
+foreta
+foretagende
+foretagender
+foretagendet
+foretak
+foretaka
+foretakende
+foretakender
+foretakendet
+foretakene
+foretaket
+foretakets
+foretaksom
+foretaksomme
+foretaksomt
+foretar
+foretas
+foretatt
+foretatte
+foreteelse
+foreteelsen
+foreteelsene
+foreteelsens
+foreteelser
+foretok
+foretrakk
+foretrede
+foretredet
+foretrekke
+foretrekker
+foretrekkes
+foretrekket
+foretrukket
+foreviga
+forevige
+foreviget
+forevises
+forfall
+forfalle
+forfallen
+forfallene
+forfallent
+forfaller
+forfallet
+forfallsdag
+forfallsdagen
+forfallsdagene
+forfallsdagens
+forfallsdager
+forfalska
+forfalske
+forfalsket
+forfalt
+forfatning
+forfatninga
+forfatningen
+forfatte
+forfatter
+forfattere
+forfatteren
+forfatterens
+forfatteres
+forfatterforening
+forfatterforeninga
+forfatterforeningen
+forfatterforeningene
+forfatterforeningens
+forfatterforeninger
+forfatterinna
+forfatterinne
+forfatterinnen
+forfatterinnene
+forfatterinnens
+forfatterinner
+forfatterne
+forfatternes
+forfatters
+forfatterskap
+forfedre
+forfedrene
+forfedrenes
+forfeila
+forfeile
+forfeilet
+forfekte
+forfektet
+forfengelig
+forferda
+forferde
+forferdelig
+forferdelige
+forferdes
+forferdet
+forfjamsa
+forfølge
+forfølgelse
+forfølgelsen
+forfølgelsene
+forfølgelsens
+forfølgelser
+forfølger
+forflytning
+forflytningen
+forflytningene
+forflytningens
+forflytninger
+forflytte
+forflyttes
+forflyttet
+forføre
+forfremme
+forfremmet
+forføret
+forfriskende
+forfulgt
+forfulgte
+forgasser
+forgassere
+forgasseren
+forgasserens
+forgasseres
+forgasserne
+forgassernes
+forgifta
+forgifte
+forgifter
+forgiftet
+forgifting
+forgiftinga
+forgiftingen
+forgiftingens
+forgiftning
+forgiftningen
+forgiftningens
+forgjengelig
+forgjenger
+forgjengere
+forgjengeren
+forgjengerens
+forgjengeres
+forgjengerne
+forgjengernes
+forgjengesnitt
+forgjengesnittet
+forgjengesnittets
+forgjeves
+forgjort
+forglemmegei
+forglemmegeien
+forglemmegeiene
+forglemmegeiens
+forglemmegeier
+forgodtbefinnende
+forgreina
+forgreine
+forgreiner
+forgreinet
+forgremma
+forgremmet
+forgremt
+forgrena
+forgrene
+forgrener
+forgrenet
+forgripe
+forgriper
+forgårs
+forgrunn
+forgrunnen
+forgrunnens
+forguda
+forgude
+forguder
+forgudet
+forgylle
+forgylling
+forgyllinga
+forgyllingen
+forgyllingens
+forgylt
+forgylte
+forhandla
+forhandle
+forhandler
+forhandlere
+forhandleren
+forhandlerens
+forhandleres
+forhandlerne
+forhandlernes
+forhandles
+forhandlet
+forhandling
+forhandlinga
+forhandlingen
+forhandlingene
+forhandlingens
+forhandlinger
+forhast
+forhaste
+forhastet
+forhatt
+forheng
+forhenga
+forhengene
+forhenget
+forhengets
+forhenværende
+forherd
+forherda
+forherde
+forherdet
+forhindre
+forhindrer
+forhindres
+forhindret
+forhippen
+forhippent
+forhistoria
+forhistorie
+forhistorien
+forhistoriene
+forhistoriens
+forhistorier
+forhistorisk
+forhistoriske
+forhånd
+forhånda
+forhånden
+forhåndsbestille
+forhåndsbestiller
+forhåne
+forhånet
+forhold
+forholde
+forholdene
+forholder
+forholdet
+forholdsmessig
+forholdsregel
+forholdsregelen
+forholdsregelens
+forholdsreglene
+forholdsregler
+forholdsvis
+forholdt
+forhåpentlig
+forhåpning
+forhåpningen
+forhåpningene
+forhåpningens
+forhåpninger
+forhåpningsfull
+forhør
+forhøre
+forhørene
+forhøret
+forhørsrett
+forhørsretten
+forhørsrettens
+forhørt
+forhøya
+forhøye
+forhøyelse
+forhøyelsen
+forhøyelsens
+forhøyes
+forhøyet
+forjettelse
+forjettelsen
+forjettelsens
+fork
+forkant
+forkanten
+forkantene
+forkantens
+forkanter
+forkast
+forkasta
+forkaste
+forkaster
+forkastes
+forkastet
+forøkelse
+forøkelsen
+forøkelsens
+forken
+forkene
+forkens
+forker
+forkjemper
+forkjempere
+forkjemperen
+forkjemperens
+forkjemperes
+forkjemperne
+forkjempernes
+forkjæle
+forkjøle
+forkjølelse
+forkjølelsen
+forkjølelsens
+forkjøler
+forkjælet
+forkjølt
+forkjølte
+forkjørsrett
+forkjørsretten
+forkjørsrettens
+forkjært
+forklar
+forklare
+forklarende
+forklarer
+forklares
+forklaret
+forklaring
+forklaringa
+forklaringen
+forklaringene
+forklaringens
+forklaringer
+forklart
+forklarte
+forkle
+forkledd
+forkledde
+forkledning
+forkledningen
+forkledningens
+forkleet
+forkleets
+forkleinelse
+forkleinelsen
+forkleinelsens
+forkludra
+forkludre
+forkludret
+forknytt
+forkomme
+forkommen
+forkomment
+forkort
+forkorta
+forkorte
+forkortelse
+forkortelsen
+forkortelsens
+forkorter
+forkortes
+forkortet
+forkorting
+forkortinga
+forkortingen
+forkortingene
+forkortingens
+forkortinger
+forkrenkelig
+forkrøpla
+forkvakle
+forkvaklet
+forkynn
+forkynne
+forkynnelse
+forkynnelsen
+forkynnelsens
+forkynner
+forkynning
+forkynninga
+forkynningen
+forkynningens
+forkynt
+forkynte
+forlag
+forlaga
+forlagene
+forlagenes
+forlaget
+forlagets
+forlags
+forlagt
+forlange
+forlangende
+forlanger
+forlangt
+forlangte
+forlat
+forlate
+forlatelse
+forlatelsen
+forlatelsens
+forlater
+forlating
+forlatinga
+forlatingen
+forlatingens
+forlatt
+forlede
+forledelsen
+forledelsens
+forleden
+forleder
+forledes
+forledet
+forlegen
+forlegenhet
+forlegenheten
+forlegenhetens
+forlegent
+forlegger
+forleggere
+forleggeren
+forleggerens
+forleggeres
+forleggerne
+forleggernes
+forlegne
+forlegning
+forlegningen
+forlegningene
+forlegningens
+forlegninger
+forleng
+forlenga
+forlenge
+forlengede
+forlengelse
+forlengelsen
+forlengelsens
+forlenger
+forlenges
+forlenget
+forlengs
+forlese
+forleser
+forlesing
+forlesinga
+forlesingen
+forlest
+forleste
+forlik
+forlike
+forliker
+forliket
+forlikskommissær
+forlikskommissæren
+forlikskommissærens
+forliksråd
+forliksråda
+forliksrådene
+forliksrådet
+forliksrådets
+forlikt
+forlikte
+forlis
+forlisa
+forlise
+forliser
+forliset
+forlist
+forliste
+forlot
+forlov
+forlova
+forlove
+forlovede
+forlovelse
+forlovelsen
+forlovelsens
+forlover
+forlovet
+forløp
+forløpe
+forløper
+forløpere
+forløperen
+forløperens
+forløperes
+forløperne
+forløpernes
+forløpet
+forløsning
+forløsningen
+forløsningene
+forløsningens
+forløsninger
+forlydende
+forlydendet
+form
+formå
+forma
+formal
+formale
+formalia
+formalisere
+formaliserer
+formalisert
+formaliserte
+formalistisk
+formalitet
+formaliteten
+formalitetene
+formalitetens
+formaliteter
+formana
+formane
+formaner
+formanet
+formann
+formannen
+formannens
+formanns
+formannskap
+formannskapa
+formannskapene
+formannskaper
+formannskapet
+formannskapets
+formannsverv
+formannsvervet
+formannsvervets
+formasjon
+formasjonen
+formasjonene
+formasjonens
+formasjoner
+formastelig
+formastelige
+format
+formata
+formatene
+formater
+formatere
+formaterer
+formatering
+formatert
+formatet
+formådde
+forme
+formel
+formelen
+formelens
+formelig
+formell
+formelle
+formelt
+formen
+formene
+formenes
+formeningen
+formeningene
+formenn
+formennene
+formennenes
+formenns
+formens
+formentlig
+former
+formere
+formert
+formerte
+formes
+formet
+formgiver
+formgivere
+formgiveren
+formgiverens
+formgiveres
+formgiverne
+formgivernes
+formgiving
+formgivinga
+formgivingen
+formgivingens
+formidabel
+formiddag
+formiddagen
+formiddagens
+formidla
+formidle
+formidlende
+formidler
+formidlere
+formidles
+formidlet
+formidling
+formidlinga
+formidlingen
+formidlingens
+formidlinger
+formildende
+forming
+forminsk
+forminska
+forminske
+forminsket
+formål
+formåla
+formlene
+formålene
+formler
+formålet
+formålets
+formålsparagraf
+formålsparagrafen
+formålsparagrafene
+formålsparagrafens
+formålsparagrafer
+formålstjenlig
+formoda
+formode
+formodentlig
+formodes
+formodet
+formodning
+formodningen
+formodningens
+formørke
+formørket
+formue
+formuen
+formuende
+formuens
+formuer
+formuesskatt
+formuesskatten
+formuesskattens
+formular
+formulara
+formularene
+formularer
+formularet
+formularets
+formuler
+formulere
+formulerer
+formuleres
+formulering
+formuleringa
+formuleringen
+formuleringene
+formuleringens
+formuleringer
+formulert
+formulerte
+formynder
+formyndere
+formynderen
+formynderens
+formynderes
+formynderne
+formyndernes
+forn
+fornavn
+fornavnene
+fornavnet
+fornøden
+fornødent
+fornødne
+fornedra
+fornedre
+fornedrelse
+fornedrelsen
+fornedrelsene
+fornedrelsens
+fornedrelser
+fornedret
+fornekta
+fornekte
+fornektelsen
+fornektelsens
+fornekter
+fornektes
+fornektet
+fornem
+fornemme
+fornemmelse
+fornemmelsen
+fornemmelsens
+fornemmer
+fornemmet
+fornemt
+fornøgd
+fornminne
+fornminner
+fornminnet
+fornorska
+fornorske
+fornorsket
+fornorsking
+fornorskinga
+fornorskingen
+fornorskingens
+fornærma
+fornærme
+fornærmede
+fornærmelse
+fornærmelsen
+fornærmelsens
+fornærmet
+fornærming
+fornærminga
+fornærmingen
+fornærmingens
+fornt
+fornuft
+fornuften
+fornuftens
+fornuftig
+fornuftige
+fornya
+fornøyd
+fornøyde
+fornye
+fornøye
+fornøyelig
+fornyelse
+fornøyelse
+fornyelsen
+fornyelsene
+fornyelsens
+fornyelser
+fornøyelses
+fornyer
+fornyes
+fornyet
+fornying
+fornyinga
+fornyingen
+fornyingens
+forord
+fororda
+forordene
+forordet
+forordets
+forordna
+forordne
+forordner
+forordnet
+forordning
+forordninga
+forordningen
+forordningene
+forordningens
+forordninger
+forover
+forpakta
+forpakte
+forpakter
+forpaktere
+forpakteren
+forpakterens
+forpakteres
+forpakterne
+forpakternes
+forpaktet
+forplanta
+forplante
+forplanter
+forplantet
+forplantning
+forplantninga
+forplantningen
+forplantningene
+forplantningens
+forplantninger
+forplantningslære
+forplantningslæren
+forplantningslærens
+forplikte
+forpliktelse
+forpliktelsen
+forpliktelsene
+forpliktelsens
+forpliktelser
+forpliktende
+forplikter
+forpliktet
+forrang
+forrangen
+forråd
+forråde
+forræder
+forrædere
+forræderen
+forræderens
+forræderes
+forræderi
+forræderia
+forræderiene
+forræderier
+forræderiet
+forræderiets
+forræderne
+forrædernes
+forrædersk
+forrådet
+forære
+forrentes
+forærer
+forrest
+forresten
+forretning
+forretninga
+forretningen
+forretningene
+forretningens
+forretninger
+forretningsbank
+forretningsbanken
+forretningsbankene
+forretningsbankens
+forretningsbanker
+forretningsbygg
+forretningsbygga
+forretningsbyggene
+forretningsbygget
+forretningsbyggets
+forretningsfører
+forretningsførere
+forretningsføreren
+forretningsførerens
+forretningsføreres
+forretningsførerne
+forretningsførernes
+forretningsidé
+forretningsideen
+forretningsideene
+forretningsideens
+forretningsideer
+forretningsmann
+forretningsmannen
+forretningsmannens
+forretningsmenn
+forretningsmennene
+forretningsmennenes
+forretningsmenns
+forretningsmessig
+forrett
+forretta
+forrette
+forretten
+forrettens
+forretter
+forrettes
+forrettet
+forretting
+forrettinga
+forrettingen
+forrettingens
+forrige
+forringe
+forringer
+forringes
+forårsaka
+forårsake
+forårsaker
+forårsaket
+forært
+forærte
+forråtnelse
+forråtnelsen
+forråtnelsens
+forrykt
+fors
+forsage
+forsagelse
+forsagelsen
+forsagelsens
+forsagt
+forsagte
+forsake
+forsakelse
+forsakelsen
+forsakelsens
+forsaking
+forsakinga
+forsakingen
+forsakingens
+forsamla
+forsamle
+forsamler
+forsamlet
+forsamling
+forsamlinga
+forsamlingen
+forsamlingene
+forsamlingens
+forsamlinger
+forse
+forseelse
+forseelsen
+forseelsene
+forseelsens
+forseelser
+forseggjort
+forsegla
+forsegle
+forseglet
+forsendelse
+forsendelsen
+forsendelsens
+forsene
+forser
+forsere
+forsert
+forserte
+forsesong
+forsesongen
+forsesongens
+forsete
+forsetene
+forseter
+forsetet
+forsett
+forsette
+forsetter
+forsettet
+forsettlig
+forsida
+forside
+forsiden
+forsidens
+forsider
+forsikra
+forsikre
+forsikrer
+forsikres
+forsikret
+forsikringsagent
+forsikringsagenten
+forsikringsagentens
+forsikringsagenter
+forsikringsmatematikk
+forsikringsmatematikken
+forsikringsmatematikkens
+forsikringsselskap
+forsikringsselskapa
+forsikringsselskapene
+forsikringsselskaper
+forsikringsselskapet
+forsikringsselskapets
+forsiktig
+forsiktige
+forsiktighet
+forsiktigheten
+forsiktighetens
+forsinka
+forsinke
+forsinkelse
+forsinkelsen
+forsinkelsene
+forsinkelsens
+forsinkelser
+forsinket
+forsk
+forsøk
+forska
+forskaling
+forskalinga
+forskalingen
+forskalingene
+forskalingens
+forskalinger
+forskalingsbord
+forskalingsborda
+forskalingsbordene
+forskalingsbordet
+forskalingsbordets
+forske
+forsøke
+forsøkene
+forsker
+forsøker
+forskere
+forskeren
+forskerens
+forskerne
+forsøkes
+forsket
+forsøket
+forsking
+forskinga
+forskingen
+forskjell
+forskjellen
+forskjellene
+forskjellens
+forskjeller
+forskjellig
+forskjellige
+forskjertsa
+forskjertse
+forskjertset
+forskåne
+forskånet
+forskning
+forskningen
+forskningens
+forskningsinnsats
+forskningsinnsatsen
+forskningsinnsatsens
+forskningsinstitutt
+forskningsinstitutta
+forskningsinstituttene
+forskningsinstitutter
+forskningsinstituttet
+forskningsinstituttets
+forskningsoppgave
+forskningsoppgaven
+forskningsoppgavene
+forskningsoppgavens
+forskningsoppgaver
+forskningspolitikk
+forskningspolitikken
+forskningspolitikkens
+forskningspolitiske
+forskningsprogram
+forskningsprogrammene
+forskningsprogrammer
+forskningsprogrammet
+forskningsprogrammets
+forskningsprosjekt
+forskningsprosjekta
+forskningsprosjektene
+forskningsprosjekter
+forskningsprosjektet
+forskningsprosjektets
+forskningsråd
+forskningsrådenes
+forskningsrådet
+forskningsrådets
+forskningsresultat
+forskningsresultatene
+forskningsresultater
+forskningsresultatet
+forskningsresultatets
+forskole
+forskolen
+forskolene
+forskolens
+forskoler
+forskoles
+forskott
+forskotta
+forskottene
+forskotter
+forskottere
+forskottert
+forskotterte
+forskottet
+forskottets
+forskrekka
+forskrekke
+forskrekkelse
+forskrekkelsen
+forskrekkelsene
+forskrekkelsens
+forskrekkelser
+forskrekket
+forskrift
+forskrifta
+forskriften
+forskriftene
+forskriftens
+forskrifter
+forskriftsmessig
+forsøksbasis
+forsøksordning
+forsøksordningen
+forsøksordningene
+forsøksordningens
+forsøksordninger
+forsøksråd
+forsøksrådet
+forsøksrådets
+forsøksvirksomhet
+forsøksvirksomheten
+forsøksvirksomhetens
+forsøksvis
+forsøkt
+forsøkte
+forskudd
+forskuddene
+forskuddet
+forskuttere
+forskuttert
+forskutterte
+forskyv
+forskyve
+forskyver
+forskyves
+forskyvning
+forskyvningen
+forskyvningene
+forskyvningens
+forskyvninger
+forslå
+forslag
+forslagene
+forslaget
+forslags
+forslagsstiller
+forslagsstillere
+forslagsstilleren
+forslagsstillerens
+forslagsstilleres
+forslagsstillerne
+forslagsstillernes
+forslitt
+forslitte
+forsluken
+forslukent
+forslukne
+forslumming
+forslumminga
+forslummingen
+forslummingens
+forsmå
+forsmak
+forsmaken
+forsmedelig
+forsmekta
+forsmekte
+forsmektet
+forsømme
+forsømmelse
+forsømmelsen
+forsømmelsene
+forsømmelsens
+forsømmelser
+forsømmer
+forsømt
+forsømte
+forsnakka
+forsnakke
+forsnakkelse
+forsnakkelsen
+forsnakkelsens
+forsnakker
+forsnakkes
+forsnakket
+forsona
+forsone
+forsoner
+forsonet
+forsoning
+forsoninga
+forsoningen
+forsont
+forsonte
+forsorg
+forsorga
+forsorgen
+forsorgens
+forsorgsvesen
+forsorgsvesenet
+forsorgsvesenets
+forsov
+forsove
+forsover
+forsovet
+forspann
+forspanna
+forspannene
+forspannet
+forspannets
+forspill
+forspille
+forspillene
+forspiller
+forspilles
+forspillet
+forsprang
+forspranget
+forsprangets
+forsørga
+forsørge
+forsørger
+forsørget
+forstå
+forstad
+forstaden
+forstadens
+forstand
+forstanden
+forstandens
+forstander
+forstandere
+forstanderen
+forstanderens
+forstanderes
+forstanderne
+forstandernes
+forstandig
+forstavelse
+forstavelsen
+forstavelsens
+forstavelser
+forstedene
+forsteina
+forsteining
+forsteininga
+forsteiningen
+forsteiningene
+forsteiningens
+forsteininger
+forståelig
+forståelige
+forståelse
+forståelsen
+forståelsens
+forståelsesfull
+forstemmende
+forstemt
+forstemte
+forstene
+forstenet
+forsterke
+forsterker
+forsterkere
+forsterkeren
+forsterkerens
+forsterkeres
+forsterkerne
+forsterkernes
+forsterkes
+forsterket
+forsterking
+forsterkinga
+forsterkingen
+forsterkingens
+forsterkning
+forsterkningen
+forsterkningene
+forsterkningens
+forsterkninger
+forstille
+forstillelse
+forstillelsen
+forstillelsens
+forstiller
+forstilling
+forstillinga
+forstillingen
+forstillingene
+forstillingens
+forstillinger
+forstøkt
+forstmann
+forstmannen
+forstmannens
+forstmenn
+forstmennene
+forstmennenes
+forstmenns
+forsto
+forstod
+forstår
+forstørr
+forstørra
+forstørre
+forstørrelsen
+forstørrelsens
+forstørret
+forstørring
+forstørringa
+forstørringen
+forstørringens
+forstås
+forstått
+forstumme
+forstummet
+forstuva
+forstuve
+forstuvet
+forstyrr
+forstyrra
+forstyrre
+forstyrrelse
+forstyrrelsen
+forstyrrelsene
+forstyrrelsens
+forstyrrelser
+forstyrrende
+forstyrrer
+forstyrres
+forstyrret
+forsvar
+forsvare
+forsvarene
+forsvarer
+forsvarere
+forsvareren
+forsvarerens
+forsvareres
+forsvarerne
+forsvarernes
+forsvares
+forsvaret
+forsvarets
+forsvarlig
+forsvarlige
+forsvars
+forsvarsbudsjett
+forsvarsbudsjettene
+forsvarsbudsjetter
+forsvarsbudsjettet
+forsvarsbudsjettets
+forsvarsdepartement
+forsvarsdepartementet
+forsvarsdepartementets
+forsvarsforbund
+forsvarsforbundet
+forsvarsforbundets
+forsvarsløse
+forsvarsløst
+forsvarsminister
+forsvarsministeren
+forsvarsministerens
+forsvarsministrene
+forsvarspolitikk
+forsvarspolitikken
+forsvarspolitikkens
+forsvart
+forsvarte
+forsvinn
+forsvinne
+forsvinnende
+forsvinner
+forsvunne
+forsvunnet
+forsyn
+forsynda
+forsynde
+forsynder
+forsyndet
+forsyne
+forsyner
+forsynes
+forsynet
+forsyning
+forsyninga
+forsyningen
+forsyningene
+forsyningens
+forsyninger
+forsynlig
+forsynlige
+forsyns
+forsynt
+forsynte
+fort
+forta
+fortale
+fortalen
+fortalens
+fortaler
+fortalt
+fortalte
+fortann
+fortanna
+fortannen
+fortannens
+fortape
+fortapelse
+fortapelsen
+fortapelsens
+fortaper
+fortapt
+fortapte
+fortau
+fortaua
+fortauene
+fortauer
+fortauet
+fortauets
+fortauskafé
+fortauskafeen
+fortauskafeene
+fortauskafeens
+fortauskafeer
+fortauskant
+fortauskanten
+fortauskantene
+fortauskantens
+fortauskanter
+forte
+fortegn
+fortegna
+fortegnelse
+fortegnelsen
+fortegnelsens
+fortegnene
+fortegnet
+fortegnets
+fortell
+fortelle
+fortellende
+forteller
+fortelles
+fortelling
+fortellinga
+fortellingen
+fortellingene
+fortellingens
+fortellinger
+forter
+fortere
+fortet
+fortetning
+fortetningen
+fortetningene
+fortetningens
+fortetninger
+fortetta
+fortette
+fortettet
+fortetting
+fortettinga
+fortettingen
+fortettingens
+fortgang
+fortgangen
+fortgangens
+fortid
+fortida
+fortiden
+fortidens
+fortidsminne
+fortidsminnet
+fortielse
+fortielsen
+fortielsene
+fortielsens
+fortielser
+fortjene
+fortjener
+fortjenesta
+fortjeneste
+fortjenesten
+fortjenestene
+fortjenestens
+fortjenester
+fortjenstfull
+fortjenstfulle
+fortjenstfullt
+fortjent
+fortjente
+fortløpende
+fortolka
+fortolke
+fortolker
+fortolkes
+fortolket
+fortolkning
+fortolkningen
+fortolkningene
+fortolkningens
+fortolkninger
+fortolla
+fortolle
+fortoller
+fortollet
+fortolling
+fortollinga
+fortollingen
+fortollingens
+fortona
+fortone
+fortoner
+fortonet
+fortære
+fortred
+fortredelig
+fortreden
+fortredene
+fortredens
+fortreder
+fortreffelig
+fortrekke
+fortrekker
+fortrenge
+fortrenger
+fortrenges
+fortrenging
+fortrenginga
+fortrengingen
+fortrengingens
+fortrengning
+fortrengningen
+fortrengningens
+fortrengt
+fortrengte
+fortæret
+fortrinn
+fortrinna
+fortrinnene
+fortrinnet
+fortrinnets
+fortrinnlig
+fortrinnsrett
+fortrinnsretten
+fortrinnsrettens
+fortrinnsvis
+fortrolig
+fortrolige
+fortropp
+fortroppen
+fortroppene
+fortroppens
+fortropper
+fortært
+fortrylla
+fortrylle
+fortryller
+fortryllet
+fortrytelig
+fortsatt
+fortsatte
+fortsett
+fortsette
+fortsettelse
+fortsettelsen
+fortsettelsens
+fortsetter
+fortvil
+fortvile
+fortvilelse
+fortvilelsen
+fortvilelsens
+fortvilende
+fortviler
+fortvilet
+fortvilt
+fortvilte
+fortøyd
+fortøyde
+fortøye
+fortøyning
+fortøyningen
+fortøyningens
+fortynna
+fortynne
+fortynner
+fortynnet
+forulempa
+forulempe
+forulemper
+forulempet
+forulykka
+forulykke
+forulykker
+forulykket
+forum
+foruma
+forumene
+forumer
+forumet
+forumets
+forunderlig
+forunderlige
+forunderligst
+forunderligste
+forundersøkelse
+forundersøkelsen
+forundersøkelsene
+forundersøkelsens
+forundersøkelser
+forundra
+forundre
+forundrende
+forundrer
+forundres
+forundret
+forunne
+forunner
+forurensa
+forurense
+forurenset
+forurensning
+forurensningen
+forurensningene
+forurensningens
+forurensninger
+foruroliga
+forurolige
+foruroligende
+foruroliget
+forut
+forutbestemme
+forutdatere
+forutdaterer
+forutdatert
+forutdaterte
+foruten
+forutgående
+forutsa
+forutsatt
+forutsatte
+forutse
+forutseende
+forutser
+forutsetning
+forutsetningen
+forutsetningene
+forutsetningens
+forutsetninger
+forutsett
+forutsette
+forutsetter
+forutsettes
+forutsi
+forutsier
+forutsigelse
+forutsigelsen
+forutsigelsene
+forutsigelsens
+forutsigelser
+forøva
+forvalta
+forvalte
+forvalter
+forvaltere
+forvalteren
+forvalterens
+forvalteres
+forvalterne
+forvalternes
+forvaltes
+forvaltet
+forvaltning
+forvaltningen
+forvaltningens
+forvaltnings
+forvandla
+forvandle
+forvandles
+forvandlet
+forvandling
+forvandlinga
+forvandlingen
+forvandlingens
+forvansk
+forvanska
+forvanske
+forvansker
+forvansket
+forvaring
+forvaringa
+forvaringen
+forvaringene
+forvaringens
+forvaringer
+forvarsel
+forvarsla
+forvarsle
+forvarsler
+forøve
+forvegen
+forveien
+forveksles
+forveksling
+forvekslingen
+forvekslingene
+forvekslingens
+forvekslinger
+forvella
+forvelle
+forvellet
+forvenne
+forvenner
+forvent
+forventa
+forvente
+forventer
+forventes
+forventet
+forventning
+forventningen
+forventningene
+forventningens
+forventninger
+forventningsfulle
+forventningsfullt
+forøver
+forverre
+forverret
+forverring
+forverringa
+forverringen
+forverringens
+forøvet
+forvilla
+forville
+forvillede
+forvillelsen
+forvillelsens
+forvillet
+forvirra
+forvirre
+forvirrede
+forvirrende
+forvirrer
+forvirret
+forvirring
+forvirringa
+forvirringen
+forvirringens
+forvise
+forviser
+forvisning
+forvisningen
+forvisningens
+forviss
+forvissa
+forvisse
+forvisset
+forvissning
+forvissningen
+forvissningens
+forvist
+forviste
+forvitra
+forvitre
+forvitret
+forvitring
+forvitringa
+forvitringen
+forvitringens
+forvolde
+forvolder
+forvoldt
+forvoldte
+forvrengt
+forynga
+forynge
+forynget
+fos
+fosen
+fosene
+fosens
+foser
+fosfat
+fosfata
+fosfatene
+fosfater
+fosfatet
+fosfatets
+fosfor
+fosforen
+fosforens
+fosforet
+fosforets
+foss
+fossa
+fosse
+fossefall
+fossefallet
+fossefallets
+fossegrim
+fossegrimen
+fossegrimens
+fossen
+fossens
+fosset
+fossil
+fossile
+fossiler
+fossilet
+fostbrorskap
+foster
+fosterfar
+fosterfaren
+fosterfarens
+fostra
+fostre
+fostrene
+fostret
+fostring
+fostringa
+fostringen
+fostringens
+fot
+fota
+fotball
+fotballbane
+fotballbanen
+fotballbanene
+fotballbanens
+fotballbaner
+fotballen
+fotballene
+fotballens
+fotballer
+fotballforbund
+fotballforbundet
+fotballforbundets
+fotballkamp
+fotballkampen
+fotballkampene
+fotballkampens
+fotballkamper
+fotballklubb
+fotballklubben
+fotballklubbene
+fotballklubbens
+fotballklubber
+fotballspill
+fotballspiller
+fotballspillere
+fotballspilleren
+fotballspillerens
+fotballspilleres
+fotballspillerne
+fotballspillernes
+fotballsport
+fotballsporten
+fotballsportens
+fote
+fotefar
+fotefaret
+fotefarets
+foten
+fotens
+fotet
+fotfeste
+fotfestet
+fotgjenger
+fotgjengere
+fotgjengeren
+fotgjengerens
+fotgjengeres
+fotgjengerne
+fotgjengernes
+fotnote
+fotnoten
+fotnotens
+foto
+fotoa
+fotoapparat
+fotoapparata
+fotoapparatene
+fotoapparater
+fotoapparatet
+fotoapparatets
+fotoene
+fotoet
+fotoets
+fotogen
+fotogent
+fotograf
+fotografen
+fotografene
+fotografens
+fotografer
+fotografere
+fotografering
+fotograferinga
+fotograferingen
+fotograferingens
+fotografert
+fotograferte
+fotografi
+fotografia
+fotografiene
+fotografier
+fotografiet
+fotografiets
+fotografisk
+fotogravyr
+fotogravyren
+fotogravyrens
+fotokopi
+fotokopien
+fotokopiene
+fotokopiens
+fotokopier
+fotomontasje
+fotomontasjen
+fotomontasjens
+fotostat
+fotostaten
+fotostatens
+fots
+fotsbredd
+fotsbredden
+fotsbreddens
+fotsid
+fotside
+fotsidt
+fotspor
+fotspora
+fotsporene
+fotsporet
+fotsporets
+fotstykke
+fotstykket
+fotstykkets
+foxtrot
+foxtroten
+foxtrotens
+frø
+får
+før
+fra
+fåra
+frabe
+frabeordres
+fraber
+fradrag
+fradraga
+fradragene
+fradraget
+fradragets
+frafall
+frafalle
+frafallen
+frafallent
+frafallet
+frafalt
+fragment
+fragmenta
+fragmentene
+fragmenter
+fragmentet
+fragmentets
+frakk
+frakken
+frakkens
+frakker
+frakkeskjøt
+frakkeskjøtet
+frakkeskjøtets
+frakobling
+frakoblinga
+frakoblingen
+frakoblingens
+fraksjon
+fraksjonen
+fraksjonene
+fraksjonens
+fraksjoner
+frakt
+frakta
+frakte
+fraktemann
+fraktemannen
+fraktemannens
+fraktemenn
+fraktemennene
+fraktemennenes
+fraktemenns
+frakten
+fraktene
+frakter
+fraktes
+fraktet
+fram
+frambringe
+frambringer
+frambrott
+frambrotta
+frambrottene
+frambrottet
+frambrottets
+framdrift
+framdrifta
+framdriften
+framdriftens
+framdriftsplan
+framdriftsplanen
+framdriftsplanens
+frametter
+framferd
+framferda
+framferden
+framferdens
+framfor
+framføre
+framførelse
+framførelsen
+framførelsens
+framfører
+framføring
+framføringa
+framføringen
+framføringens
+framført
+framførte
+framgå
+framgang
+framgangen
+framgangene
+framgangens
+framganger
+framgangsmåte
+framgangsmåten
+framgangsmåtens
+framgangsrike
+framgangsrikt
+framgikk
+framgår
+framherskende
+framheve
+framhever
+framheves
+framholde
+framholder
+framholdes
+framholdt
+framifrå
+framkalle
+framkaller
+framkast
+framkaste
+framkastet
+framkom
+framkomme
+framkommelig
+framkommer
+framkommet
+framkomst
+framkomsten
+framkomstens
+framla
+framlagt
+framlagte
+framlegg
+framlegge
+framlegger
+framlegges
+framlegget
+framleis
+framlengs
+framme
+frammøte
+frammøtet
+frammøtt
+frammøtte
+framom
+framover
+frampå
+framsatt
+framsatte
+framsette
+framsetter
+framsida
+framside
+framsiden
+framsidens
+framskott
+framskottene
+framskotter
+framskottet
+framskottets
+framskritt
+framskritta
+framskrittene
+framskrittet
+framskrittets
+framskutt
+framskutte
+framstå
+framsteg
+framstega
+framstegene
+framsteget
+framstegets
+framstående
+framstille
+framstiller
+framstilles
+framstillet
+framstilling
+framstillinga
+framstillingen
+framstillingens
+framstilt
+framstilte
+framstår
+framstøt
+framstøta
+framstøtene
+framstøtet
+framstøtets
+framstupes
+framsyning
+framsyninga
+framsyningen
+framsyningene
+framsyningens
+framsyninger
+framsynt
+framt
+framtid
+framtida
+framtidas
+framtiden
+framtidens
+framtidig
+framtidige
+framtidsforsker
+framtidsforskere
+framtidsforskeren
+framtidsforskerens
+framtidsforskeres
+framtidsforskerne
+framtidsforskernes
+framtidsperspektiv
+framtidsperspektiver
+framtidsperspektivet
+framtidsperspektivets
+framtidsretta
+framtidsrettet
+framtidsutsikt
+framtidsutsikten
+framtidsutsiktene
+framtidsutsiktens
+framtidsutsikter
+framtoning
+framtoningen
+framtoningene
+framtoningens
+framtoninger
+framtre
+framtredende
+framtrer
+framtung
+framvise
+framviser
+framvising
+framvisinga
+framvisingen
+framvisingens
+framvisning
+framvisningen
+framvisningene
+framvisningens
+framvisninger
+framvist
+framviste
+framvokst
+framvoksten
+framvokstens
+franc
+francen
+francene
+francens
+francisturbin
+francisturbinen
+francisturbinens
+francium
+franciumet
+franciumets
+frank
+franke
+frankere
+frankert
+frankerte
+franko
+frankoen
+frankoens
+frankt
+fransk
+franskbrød
+franskbrøda
+franskbrødene
+franskbrødet
+franskbrødets
+franske
+franskmann
+franskmannen
+franskmannens
+franskmenn
+franskmennene
+franskmennenes
+franskmenns
+frappere
+frappert
+frapperte
+frarå
+fraråde
+frarådes
+frarådet
+frarøve
+frarøvet
+frasa
+frasagt
+frase
+frasemaker
+frasemakere
+frasemakeren
+frasemakerens
+frasemakeres
+frasemakerne
+frasemakernes
+frasen
+frasene
+frasens
+fraseologi
+fraseologien
+fraseologiens
+fraser
+fraskilt
+fraskilte
+frastand
+frastanden
+frastandens
+frastjålet
+frata
+fratatt
+fraternisere
+fraternisert
+fraterniserte
+fratok
+fratre
+fratreden
+fratrer
+fraus
+fravikes
+fravær
+fraværa
+fraværende
+fraværene
+fraværet
+fraværets
+frøbelg
+frøbelgen
+frøbelgens
+fråda
+fråde
+fråden
+frådens
+frådet
+føre
+førebu
+fred
+freda
+fredag
+fredagen
+fredagene
+fredagens
+fredager
+frede
+fredede
+fredelig
+fredelige
+freden
+fredens
+fredet
+fredlaus
+fredløs
+fredlyse
+fredlyser
+fredlyst
+fredning
+fredningen
+fredningens
+fredskorps
+fredskorpset
+fredskorpsets
+fredsæl
+fredsæle
+fredsælt
+fredsommelig
+fredspolitikk
+fredspolitikken
+fredspolitikkens
+fredssak
+fredssaka
+fredssaken
+fredssakens
+fredstid
+fredstiden
+fredstidene
+fredstidens
+fredstider
+fregatt
+fregatten
+fregattene
+fregattens
+fregatter
+fregna
+fregne
+fregnen
+fregnens
+fregner
+fregnet
+fregnete
+førehand
+freidig
+frekk
+frekkas
+frekkasen
+frekkasene
+frekkasens
+frekkaser
+frekke
+frekt
+frekvens
+frekvensen
+frekvensene
+frekvensens
+frekvenser
+frekvenslista
+frekvensliste
+frekvenslisten
+frekvenslistene
+frekvenslistens
+frekvenslister
+frekvensmodulering
+frekvensmoduleringen
+frekvensmoduleringens
+frekvensordbok
+frekvensordboka
+frekvensordboken
+frekvensordbokens
+frekvensordliste
+frekvensordlisten
+frekvensordlistene
+frekvensordlistens
+frekvensordlister
+frekvenstall
+frekvenstallene
+frekvent
+frekventere
+frekventert
+frekventerte
+frelsa
+frelse
+frelsen
+frelsens
+frelser
+frelsere
+frelseren
+frelserens
+frelseres
+frelserne
+frelsernes
+frem
+fremad
+frembrakt
+frembringe
+frembringelse
+frembringelsen
+frembringelsens
+frembringer
+frembrudd
+frembruddet
+frembruddets
+frembudt
+fremdeles
+fremdrift
+fremdrifta
+fremdriften
+fremdriftens
+fremfor
+fremføre
+fremførelse
+fremførelsen
+fremførelsens
+fremfører
+fremføring
+fremføringa
+fremføringen
+fremføringene
+fremføringens
+fremføringer
+fremført
+fremførte
+fremgå
+fremgang
+fremgangen
+fremgangene
+fremgangens
+fremganger
+fremgangsmåte
+fremgangsmåten
+fremgangsmåtens
+fremherskende
+fremheve
+fremhever
+fremheves
+fremhevet
+fremholde
+fremholder
+fremholdes
+fremholdt
+fremkalle
+fremkaller
+fremkaste
+fremkastet
+fremkom
+fremkomme
+fremkommelig
+fremkommer
+fremkommet
+fremkomst
+fremkomsten
+fremkomstens
+fremla
+fremlagt
+fremlagte
+fremlegg
+fremlegge
+fremlegger
+fremlegges
+fremlengs
+fremma
+fremme
+fremmed
+fremmedarbeider
+fremmedarbeidere
+fremmedarbeideren
+fremmedarbeiderens
+fremmedarbeideres
+fremmedarbeiderne
+fremmedarbeidernes
+fremmede
+fremmedgjøring
+fremmedgjøringa
+fremmedgjøringen
+fremmedgjøringens
+fremmedhat
+fremmedhatet
+fremmedhatets
+fremmedord
+fremmedorda
+fremmedordene
+fremmelig
+fremmend
+fremmende
+fremmendt
+fremmer
+fremmeren
+fremmerens
+fremmes
+fremmet
+fremmøte
+fremmøtet
+fremmøtt
+fremmøtte
+fremom
+fremover
+frempå
+fremragende
+fremre
+fremsatt
+fremsatte
+fremsette
+fremsetter
+fremsida
+fremside
+fremsiden
+fremsidene
+fremsidens
+fremsider
+fremskaffa
+fremskaffe
+fremskaffer
+fremskaffet
+fremskritt
+fremskritta
+fremskrittene
+fremskrittet
+fremskrittets
+fremskutt
+fremskutte
+fremst
+fremste
+fremstående
+fremstille
+fremstiller
+fremstilles
+fremstillet
+fremstilling
+fremstillinga
+fremstillingen
+fremstillingens
+fremstilt
+fremstilte
+fremstår
+fremstøt
+fremstøta
+fremstøtene
+fremstøtet
+fremstøtets
+fremsyn
+fremsynt
+fremt
+fremtid
+fremtida
+fremtiden
+fremtidens
+fremtidig
+fremtidige
+fremtidsperspektiv
+fremtidsperspektivene
+fremtidsperspektiver
+fremtidsperspektivet
+fremtidsperspektivets
+fremtidsrette
+fremtidsrettet
+fremtidsstilling
+fremtidsstillingen
+fremtidsstillingens
+fremtidsutsikt
+fremtidsutsikten
+fremtidsutsiktene
+fremtidsutsiktens
+fremtidsutsikter
+fremtoning
+fremtoningen
+fremtoningene
+fremtoningens
+fremtoninger
+fremtre
+fremtreden
+fremtredende
+fremtredene
+fremtredenen
+fremtredenens
+fremtrer
+fremtung
+fremtunge
+fremtungt
+fremvekst
+fremveksten
+fremvekstens
+fremvise
+fremviser
+fremvisning
+fremvisningen
+fremvisningene
+fremvisningens
+fremvisninger
+fremvist
+fremviste
+fåren
+frende
+frenden
+frendens
+frendskap
+fårene
+frenolog
+frenologen
+frenologene
+frenologens
+frenologer
+frenologi
+frenologien
+frenologiens
+frenologisk
+fårens
+fårer
+fører
+førere
+føreren
+førerens
+førerhund
+førerhunden
+førerhundene
+førerhundens
+førerhunder
+førerkort
+førerkortene
+førerkortet
+førerkortets
+førerprøve
+førerprøven
+førerprøvens
+fres
+føres
+frese
+fresemaskin
+fresemaskinen
+fresemaskinens
+fresen
+fresens
+freset
+fresk
+fresken
+freskene
+freskens
+fresker
+fresko
+freskoen
+freskoene
+freskoens
+freskoer
+freskomaling
+freskomalinga
+freskomalingen
+freskomalingens
+frest
+fresta
+freste
+frestet
+frøet
+fåret
+føret
+frøets
+fræg
+førhistorisk
+fri
+friareal
+friarealer
+fridom
+fridommen
+fridommene
+fridommens
+fridommer
+frie
+frier
+friere
+frieren
+frierens
+frieres
+frierne
+friernes
+frifinne
+frifinnelse
+frifinnelsen
+frifinnelsens
+frifinning
+frifinninga
+frifinningen
+frifinningens
+frifot
+frifunnet
+frigitt
+frigivelse
+frigivelsen
+frigivelsens
+frigjort
+frigjorte
+frigjør
+frigjøre
+frigjøring
+frigjøringa
+frigjøringen
+frigjøringens
+frigjøringsfront
+frigjøringsfronten
+frigjøringsfrontens
+frihandelsforbund
+frihandelsområde
+frihandelsområdene
+frihandelsområder
+frihandelsområdet
+frihandelsområdets
+frihet
+friheten
+frihetene
+frihetens
+friheter
+friidrett
+friidretten
+friidrettens
+friidrettsforbund
+friidrettsforbundet
+friidrettsforbundets
+friidrettsmann
+friidrettsmannen
+friidrettsmannens
+friidrettsmenn
+friidrettsmennene
+friidrettsmennenes
+friidrettsmenns
+friing
+friinga
+friingen
+frikadelle
+frikadellen
+frikadellens
+frikasseen
+frikasseens
+frikirka
+frikirke
+frikirken
+frikirkene
+frikirkens
+frikirker
+frikjenne
+frikjenner
+frikjent
+fårikål
+fårikålen
+fårikålens
+friksjon
+friksjonen
+friksjonene
+friksjonens
+friksjoner
+frikvarter
+frikvarteret
+frikvarterets
+frikvartra
+frikvartret
+frikvartrets
+frilans
+frilansa
+frilanse
+frilansen
+frilansens
+frilanser
+frilansere
+frilanseren
+frilanserens
+frilanseres
+frilanserne
+frilansernes
+frilanset
+frilla
+frille
+frillen
+frillens
+friluft
+friluftsliv
+friluftslivet
+friluftslivets
+frilynt
+frimerke
+frimerker
+frimerket
+færing
+føring
+føringa
+færingen
+føringen
+færingene
+færingens
+færinger
+friområde
+friområdet
+frise
+frisen
+frisens
+friser
+frisere
+frisersalong
+frisersalongen
+frisersalongens
+frisert
+friserte
+frisinn
+frisinna
+frisinnet
+frisinnets
+frisk
+friska
+friske
+friskere
+friskna
+friskne
+frisknet
+friskt
+friskus
+friskusen
+friskusene
+friskusens
+friskuser
+frisør
+frisøren
+frisørene
+frisørens
+frisører
+frisørsalong
+frisørsalongen
+frisørsalongene
+frisørsalongens
+frisørsalonger
+frist
+frista
+friste
+fristelse
+fristelsen
+fristelsene
+fristelsens
+fristelser
+fristen
+fristende
+fristens
+frister
+fristes
+fristet
+frisyre
+frisyren
+frisyrens
+frita
+fritak
+fritakelse
+fritakelsen
+fritakelsens
+fritaket
+fritakets
+fritaking
+fritakinga
+fritakingen
+fritakingene
+fritakingens
+fritakinger
+fritalende
+fritas
+fritatt
+fritid
+fritida
+fritiden
+fritidens
+fritidsaktivitet
+fritidsaktiviteten
+fritidsaktivitetene
+fritidsaktivitetens
+fritidsaktiviteter
+fritidsproblem
+fritidsproblema
+fritidsproblemene
+fritidsproblemer
+fritidsproblemet
+fritidsproblemets
+fritidsreise
+fritidsreisen
+fritidsreisene
+fritidsreisens
+fritidsreiser
+fritidssyslene
+fritidssysler
+fritidssyssel
+fritidssysselen
+fritidssysselens
+fritt
+fritta
+fritte
+frittet
+frittstående
+frivillig
+frivillige
+frivol
+frivole
+frivolitet
+frivoliteten
+frivolitetens
+frivolt
+frk
+frøken
+frøkenen
+frøkenens
+førkja
+førkje
+førkjene
+førkjer
+frøkna
+frøkner
+førkrigsidé
+førkrigsideen
+førkrigsideene
+førkrigsideens
+førkrigsideer
+førkrigsår
+førkrigsårene
+førkrigsåret
+førkrigsårets
+førlighet
+førligheten
+førlighetens
+frodig
+frodigst
+frodigste
+frokost
+frokosten
+frokostene
+frokostens
+frokoster
+from
+fromasj
+fromasjen
+fromasjene
+fromasjens
+fromasjer
+fromme
+fromt
+front
+frontal
+frontale
+frontalt
+fronten
+frontene
+frontens
+fronter
+frontkollisjon
+frontkollisjonen
+frontkollisjonene
+frontkollisjonens
+frontkollisjoner
+frontrute
+frontruten
+frontrutens
+frosk
+froske
+froskemann
+froskemannen
+froskemannens
+froskemenn
+froskemennene
+froskemennenes
+froskemenns
+frosken
+froskens
+frosne
+frossen
+frossent
+frosset
+frost
+frostal
+frostalt
+frosten
+frostens
+frostvæska
+frostvæske
+frostvæsken
+frostvæskens
+frottere
+frotterer
+frotterhandkle
+frottert
+frotterte
+færre
+færrest
+færreste
+frøs
+førsel
+førselen
+førselens
+frøsen
+frøsent
+førskole
+førskolealder
+førskolealderen
+førskolealderens
+førskolebarn
+førskolebarna
+førskolebarnet
+førskolebarnets
+førskolen
+førskolene
+førskolens
+førskoler
+førsler
+fråsse
+fråsser
+fråssere
+fråsseren
+fråsserens
+fråsseres
+fråsserne
+fråssernes
+fråssing
+fråssinga
+fråssingen
+fråssingens
+først
+første
+førsteamanuensis
+førsteamanuensisen
+førsteamanuensisene
+førsteamanuensisens
+førsteamanuensiser
+førstehånds
+førstehåndsverdi
+førstehåndsverdien
+førstehåndsverdiens
+førsteklasses
+førstekonservator
+førstekonservatoren
+førstekonservatorens
+førstemann
+førstemannen
+førstemannens
+førstemenn
+førstemennene
+førstemennenes
+førstemenns
+førsteplass
+førsteplassen
+førsteplassene
+førsteplassens
+førsteplasser
+førstepremie
+førstepremien
+førstepremiens
+førstepris
+førsteprisen
+førsteprisens
+førsterangs
+førstesekretær
+førstesekretæren
+førstesekretærene
+førstesekretærens
+førstesekretærer
+førstestavelse
+førstestavelsen
+førstestavelsens
+førsteutgave
+førsteutgaven
+førsteutgavene
+førsteutgavens
+førsteutgaver
+førstkommende
+førstnevnte
+førstning
+førstninga
+førstningen
+førstningens
+ført
+førte
+førti
+førtidel
+førtidelen
+førtidelens
+førtidspensjonering
+førtidspensjoneringa
+førtidspensjoneringen
+førtidspensjoneringens
+førtien
+førtiende
+førtiførste
+fråtse
+fråtser
+fråtsere
+fråtseren
+fråtserens
+fråtseres
+fråtserne
+fråtsernes
+fråtsing
+fråtsinga
+fråtsingen
+fråtsingens
+fru
+frua
+frue
+fruen
+fruens
+fruer
+frukt
+frukta
+fruktbar
+fruktbare
+fruktbart
+fruktbringende
+frukten
+fruktene
+fruktens
+frukter
+fruktsommelig
+fruktsort
+fruktsorten
+fruktsortene
+fruktsortens
+fruktsorter
+frukttrær
+frustrasjon
+frustrasjonen
+frustrasjonene
+frustrasjonens
+frustrasjoner
+frustrere
+frustrering
+frustreringa
+frustreringen
+frustreringens
+frustrert
+frustrerte
+fryd
+fryda
+fryde
+fryden
+frydens
+frydet
+færøying
+færøyingen
+færøyingens
+frykt
+frykta
+frykte
+fryktede
+fryktelig
+fryktelige
+frykten
+fryktens
+frykter
+fryktet
+frynsa
+frynse
+frynsen
+frynsens
+frynser
+frynset
+frynsete
+frys
+fryse
+fryseanlegg
+fryseanlegget
+fryseanleggets
+fryseboks
+fryseboksen
+fryseboksene
+fryseboksens
+frysebokser
+fryser
+fryserom
+fryserommene
+fryserommet
+fryserommets
+fryses
+frysevæska
+frysevæske
+frysevæsken
+frysevæskens
+frysing
+frysinga
+frysingen
+færøysk
+frysning
+frysningen
+frysningens
+fås
+fåtal
+fåtall
+fåtallet
+fåtallets
+fåtallig
+fåtenkt
+fått
+føtt
+føttene
+føtter
+fuge
+fugen
+fugens
+fugl
+fugleegg
+fugleegget
+fugleeggets
+fuglen
+fuglene
+fugler
+fugleskremsel
+fugleskremselet
+fugleskremselets
+fugleskremslet
+fugleskremslets
+fugleunge
+fugleungen
+fugleungens
+fuksia
+fuksiaen
+fuksiaene
+fuksiaens
+fuksiaer
+fukta
+fukte
+fuktes
+fuktesløs
+fuktesløst
+fuktet
+fuktig
+fuktighet
+fuktighets
+ful
+fule
+fulgt
+fulgte
+full
+fullblods
+fullbyrda
+fullbyrde
+fullbyrdet
+fulle
+fullende
+fullfør
+fullføre
+fullførelse
+fullførelsen
+fullførelsens
+fullfører
+fullføres
+fullføring
+fullføringa
+fullføringen
+fullføringens
+fullført
+fullførte
+fullgjødsel
+fullgjødselen
+fullgjødselens
+fullgod
+fullgode
+fullgodt
+fullkommen
+fullkomment
+fullkomne
+fullmakt
+fullmakta
+fullmakten
+fullmaktene
+fullmaktens
+fullmakter
+fullmektig
+fullmektigen
+fullmektigene
+fullmektigens
+fullmektiger
+fullsatt
+fullskap
+fullskapen
+fullstendig
+fullstendige
+fullt
+fulltallig
+fulltreffer
+fulltreffere
+fulltrefferen
+fulltrefferens
+fulltrefferes
+fulltrefferne
+fulltreffernes
+fullverdi
+fullverdien
+fullverdiens
+fullverdiforsikret
+fullverdig
+fullverdige
+fult
+fundament
+fundamenta
+fundamental
+fundamentale
+fundamentalt
+fundamentene
+fundamenter
+fundamentere
+fundamentering
+fundamenteringa
+fundamenteringen
+fundamenteringens
+fundamentert
+fundamentet
+fundamentets
+fundas
+fundasen
+fundasene
+fundasens
+fundaser
+fundere
+fundert
+funderte
+funger
+fungere
+fungerende
+fungerer
+fungert
+fungerte
+funke
+funken
+funkens
+funkis
+funkisen
+funkisens
+funkla
+funkle
+funklet
+funksjon
+funksjonalisme
+funksjonalismen
+funksjonalismens
+funksjonalistisk
+funksjonalitet
+funksjonaliteten
+funksjonalitetens
+funksjonell
+funksjonelle
+funksjonelt
+funksjonen
+funksjonene
+funksjonens
+funksjoner
+funksjonere
+funksjonerer
+funksjonert
+funksjonerte
+funksjonær
+funksjonæren
+funksjonærene
+funksjonærens
+funksjonærer
+funksjonærers
+funksjonsdyktig
+funksjonsevne
+funksjonsevnen
+funksjonsevnens
+funksjonshemma
+funksjonshemmede
+funksjonshemmedes
+funksjonshemmet
+funksjonshemmets
+funksjonskontroll
+funksjonstid
+funksjonstiden
+funksjonstidens
+funn
+funne
+funnene
+funnes
+funnet
+fur
+fura
+furasje
+furasjen
+furasjens
+furasjere
+furasjert
+furasjerte
+furen
+furene
+furens
+furer
+furet
+furete
+furia
+furie
+furien
+furiens
+furnere
+furnert
+furnerte
+furta
+furte
+furten
+furtent
+furtet
+furtne
+furu
+furua
+furuen
+furuene
+furuens
+furuer
+fus
+fuse
+fusel
+fuselen
+fuselens
+fusentast
+fusentasten
+fusentastene
+fusentastens
+fusentaster
+fusjon
+fusjonen
+fusjonene
+fusjonens
+fusjoner
+fusk
+fuska
+fuske
+fusket
+fusking
+fuskinga
+fuskingen
+fuskingens
+fust
+fustasje
+fustasjen
+fustasjens
+fut
+futen
+futens
+futt
+futten
+futtens
+futteral
+futterala
+futteralene
+futteraler
+futteralet
+futteralets
+futura
+futuraene
+futurolog
+futurologen
+futurologens
+futurologi
+futurologien
+futurologiens
+futurologisk
+futurum
+futurumet
+futurumets
+fåvett
+fåvettet
+fåvettets
+fåvis
+fåvist
+fy
+føy
+føydal
+føydalsamfunn
+føydalsamfunnet
+føydalsamfunnets
+føyde
+føye
+føyelig
+føyer
+føyes
+føyet
+føyka
+fyke
+føyke
+føyken
+føykens
+fyker
+fylde
+fylden
+fyldens
+fyldig
+fyldige
+fylgja
+fylgje
+fylgjen
+fylgjene
+fylgjens
+fylgjer
+fylka
+fylke
+fylkene
+fylker
+fylkes
+fylkesagronom
+fylkeskommunale
+fylkeskommunalt
+fylkeskommune
+fylkeskommunen
+fylkeskommunene
+fylkeskommunens
+fylkeskommuner
+fylkeslege
+fylkeslegen
+fylkeslegene
+fylkeslegens
+fylkesleger
+fylkesmann
+fylkesmannen
+fylkesmannens
+fylkesmenn
+fylkesmennene
+fylkesmennenes
+fylkesmenns
+fylkesting
+fylkestingene
+fylkestinget
+fylkestingets
+fylket
+fylkets
+fylking
+fylkinga
+fylkingen
+fylkingens
+fyll
+fylla
+fylle
+fyllekjøring
+fyllekjøringa
+fyllekjøringen
+fyllekjøringens
+fyllepenn
+fyllepennen
+fyllepennens
+fyller
+fylles
+fyllesjuk
+fyllest
+fyllesten
+fyllestens
+fyllik
+fylliken
+fyllikene
+fyllikens
+fylliker
+fylling
+fyllinga
+fyllingen
+fyllmasse
+fyllmassen
+fyllmassene
+fyllmassens
+fyllmasser
+fylt
+fylte
+fyltes
+fynd
+fynden
+fyndens
+fyndet
+fyndets
+fyndig
+fyndord
+fyndorda
+fyndordene
+fyndordet
+fyndordets
+fyr
+fyrbøter
+fyrbøtere
+fyrbøteren
+fyrbøterens
+fyrbøteres
+fyrbøterne
+fyrbøternes
+fyre
+fyren
+fyrens
+fyret
+fyrig
+fyrighet
+fyrigheten
+fyrighetens
+fyring
+fyringsanlegg
+fyringsolje
+fyringsoljen
+fyringsoljene
+fyringsoljens
+fyringsoljer
+fyrst
+fyrsten
+fyrstene
+fyrstens
+fyrster
+fyrstikk
+fyrstikka
+fyrstikke
+fyrstikken
+fyrstikkens
+fyrstinna
+fyrstinne
+fyrstinnen
+fyrstinnens
+fyrte
+fyrtårn
+fyrtårnet
+fyrtårnets
+fyrverkeri
+fyrverkerier
+fyrverkeriet
+fyrverkeriets
+fys
+fysak
+fysaken
+fysakene
+fysakens
+fysaker
+fyse
+fysikalsk
+fysikalske
+fysiker
+fysikere
+fysikeren
+fysikerens
+fysikeres
+fysikerne
+fysikernes
+fysikk
+fysikken
+fysikkens
+fysiognomi
+fysiognomien
+fysiognomiens
+fysiolog
+fysiologen
+fysiologens
+fysiologi
+fysiologien
+fysiologiens
+fysiologisk
+fysioterapeut
+fysioterapeuten
+fysioterapeutene
+fysioterapeutens
+fysioterapeuter
+fysisk
+fysiske
+g
+gå
+òg
+gabbro
+gabbroen
+gabbroene
+gabbroens
+gabbroer
+gabon
+gaboner
+gabonere
+gaboneren
+gabonerens
+gaboneres
+gabonerne
+gabonernes
+gabonsk
+gadd
+gadden
+gaddene
+gaddens
+gadder
+gadolinium
+gadoliniumet
+gadoliniumets
+gaffel
+gaffelen
+gaffelens
+gafla
+gafle
+gaflene
+gafler
+gaflet
+gagn
+gagna
+gagne
+gagner
+gagnet
+gagnlaus
+gagnlig
+gagnløshet
+gagnløsheten
+gagnløshetens
+gagnløyse
+gagns
+gagnsverk
+gagnsverket
+gagnsverkets
+gal
+galakse
+galaksen
+galaksens
+galant
+galante
+galanteri
+galanteria
+galanteriene
+galanterier
+galanteriet
+galanteriets
+galder
+galderen
+galderens
+galdra
+galdre
+galdrene
+galdrer
+galdret
+gale
+galeas
+galeasen
+galeasene
+galeasens
+galeaser
+galei
+galeien
+galeiene
+galeiens
+galeier
+galen
+galenskap
+galenskapen
+galenskapene
+galenskapens
+galenskaper
+galent
+galge
+galgen
+galgenfrist
+galgenfristen
+galgenfristens
+galgenhumor
+galgenhumoren
+galgenhumorens
+galgens
+galileer
+galileere
+galileeren
+galileerens
+galileeres
+galileerne
+galileernes
+galimatias
+galimatiaset
+galimatiasets
+gall
+galla
+galladrakt
+galladrakta
+galladrakten
+galladraktens
+gallaen
+gallaene
+gallaens
+gallaer
+galle
+galleblæra
+galleblære
+galleblæren
+galleblærens
+gallen
+gallens
+galleri
+galleria
+galleriene
+gallerier
+galleriet
+galleriets
+gallet
+gallionsfigur
+gallionsfiguren
+gallionsfigurene
+gallionsfigurens
+gallionsfigurer
+gallium
+galliumet
+galliumets
+gallup
+gallupen
+gallupene
+gallupens
+galluper
+galne
+galning
+galningen
+galningens
+galopp
+galoppade
+galoppaden
+galoppadens
+galoppen
+galoppene
+galoppens
+galopper
+galoppere
+galoppert
+galopperte
+galskap
+galskapen
+galskapene
+galskapens
+galskaper
+galt
+galten
+galtene
+galtens
+galter
+galvanisere
+galvanisert
+galvaniserte
+gam
+gamasje
+gamasjen
+gamasjens
+gambier
+gambiere
+gambieren
+gambierens
+gambieres
+gambierne
+gambiernes
+gambisk
+gambla
+gamble
+gamblet
+gambling
+gamblinga
+gamblingen
+gamblingens
+game
+gamet
+gamla
+gamle
+gamlelandet
+gamlelandets
+gamlen
+gamlens
+gamles
+gamling
+gamlingen
+gamlingene
+gamlingens
+gamlinger
+gammal
+gammaldags
+gammaldanse
+gammaldansen
+gammaldansens
+gammalmodige
+gammalnorsk
+gammalt
+gamme
+gammel
+gammeldags
+gammeldans
+gammeldansen
+gammeldansens
+gammelmodige
+gammelt
+gammen
+gammens
+gan
+gana
+gand
+ganda
+gande
+ganden
+gandens
+gandet
+ganen
+ganene
+ganens
+ganer
+ganet
+gang
+ganga
+gangar
+gangaren
+gangarene
+gangarens
+gangarer
+gangbar
+gangbare
+gangbart
+gange
+gangen
+gangene
+ganger
+gangers
+ganget
+gangjern
+gangjernet
+gangjernets
+ganglie
+gangliet
+ganglion
+ganglionet
+ganglionets
+gangs
+gangsperra
+gangsperre
+gangsperren
+gangsperrens
+gangster
+gangstere
+gangsteren
+gangsterens
+gangsteres
+gangsterne
+gangsternes
+ganske
+gantedes
+gantes
+gap
+gapa
+gape
+gapen
+gaper
+gapet
+gapt
+gapte
+garanter
+garantere
+garanterer
+garanteres
+garantert
+garanterte
+garanti
+garantien
+garantiene
+garantiens
+garantier
+garantist
+garantisten
+garantistene
+garantistens
+garantister
+garasje
+garasjen
+garasjene
+garasjens
+garasjer
+gard
+gardbruker
+gardbrukere
+gardbrukeren
+gardbrukerens
+gardbrukeres
+gardbrukerne
+gardbrukernes
+garden
+gardene
+gardens
+gardere
+garderer
+garderobe
+garderoben
+garderobene
+garderobens
+garderober
+garderobeskap
+garderobeskapa
+garderobeskapene
+garderobeskapet
+garderobeskapets
+gardert
+garderte
+gardgutt
+gardgutten
+gardguttene
+gardguttens
+gardgutter
+gardin
+gardina
+gardinen
+gardinene
+gardinens
+gardiner
+gardinet
+gardinets
+gardist
+gardisten
+gardistene
+gardistens
+gardister
+gardjenta
+gardjente
+gardjentene
+gardjenter
+gards
+gardsbruk
+gardsbruka
+gardsbrukene
+gardsbruket
+gardsbrukets
+gardsdrift
+gardsdrifta
+gardsdriften
+gardsdriftens
+gardsgutt
+gardsgutten
+gardsguttene
+gardsguttens
+gardsgutter
+gardstaur
+gardstauren
+gardstaurens
+gardvord
+gardvorden
+gardvordens
+garn
+garna
+garnene
+garner
+garnet
+garnets
+garnison
+garnisonen
+garnisonene
+garnisonens
+garnisoner
+garnityr
+garnityra
+garnityrene
+garnityrer
+garnityret
+garnityrets
+garnlenk
+garnlenka
+garnlenken
+garnlenkene
+garnlenkens
+garnvinda
+garnvinde
+garp
+garpa
+garpen
+garpene
+garpens
+garper
+garpet
+gartner
+gartnere
+gartneren
+gartnerens
+gartneres
+gartneri
+gartneria
+gartneriene
+gartnerier
+gartneriet
+gartneriets
+gartnerne
+gartnernes
+garva
+garve
+garver
+garvere
+garveren
+garverens
+garveres
+garveri
+garveria
+garveriene
+garverier
+garveriet
+garveriets
+garverne
+garvernes
+garvet
+gas
+gasbind
+gasbindet
+gasbindets
+gasell
+gasellen
+gasellene
+gasellens
+gaseller
+gasen
+gasens
+gasje
+gasjen
+gasjens
+gasjere
+gasjert
+gasjerte
+gass
+gassbrenner
+gassbrennere
+gassbrenneren
+gassbrennerens
+gassbrenneres
+gassbrennerne
+gassbrennernes
+gasse
+gassen
+gassens
+gasser
+gasskammer
+gasskammeret
+gasskammerets
+gasskamra
+gasskamre
+gasskamrene
+gasslykt
+gasslykta
+gasslykten
+gasslyktene
+gasslyktens
+gasslykter
+gassturbin
+gassturbinen
+gassturbinene
+gassturbinens
+gassturbiner
+gassulykke
+gassulykken
+gassulykkens
+gassverk
+gassverka
+gassverkene
+gassverket
+gassverkets
+gast
+gasta
+gasten
+gastene
+gastens
+gaster
+gata
+gate
+gatehjørne
+gatehjørnene
+gatehjørner
+gatehjørnet
+gatehjørnets
+gatekryss
+gatekryssa
+gatekryssene
+gatekrysset
+gatekryssets
+gaten
+gatene
+gatens
+gater
+gatt
+gatta
+gattene
+gattet
+gattets
+gaucho
+gauchoen
+gauchoene
+gauchoens
+gauchoer
+gauda
+gaudaost
+gaudaosten
+gaudaostene
+gaudaostens
+gaudaoster
+gauk
+gauken
+gaukene
+gaukens
+gauker
+gaul
+gaula
+gaule
+gaulet
+gaupa
+gaupe
+gaupen
+gaupens
+gauv
+gauva
+gauven
+gauvene
+gauvens
+gauver
+gav
+gava
+gave
+gaven
+gavepremie
+gavepremien
+gavepremiene
+gavepremiens
+gavepremier
+gaver
+gavl
+gavlen
+gavlene
+gavlens
+gavler
+gavmild
+gavmilde
+gavmildt
+gear
+gearkassa
+gearkasse
+gearkassen
+gearkassene
+gearkassens
+gearkasser
+geberde
+geberden
+geberdens
+gebet
+gebeta
+gebetene
+gebeter
+gebetet
+gebetets
+gebiss
+gebissa
+gebissene
+gebisser
+gebisset
+gebissets
+gebrokken
+gebrokkent
+geburtsdag
+geburtsdagen
+geburtsdagene
+geburtsdagens
+geburtsdager
+gebyr
+gebyra
+gebyrene
+gebyrer
+gebyret
+gebyrets
+gedigen
+gedigent
+gedigne
+gehalt
+gehalten
+gehaltene
+gehaltens
+gehalter
+geheng
+gehenga
+gehengene
+gehenget
+gehengets
+gehør
+gehøret
+gehørets
+geil
+geila
+geile
+geilen
+geilens
+gein
+geina
+geinen
+geinene
+geinens
+geiner
+geip
+geipa
+geipen
+geipene
+geipens
+geiper
+geipet
+geiping
+geipinga
+geipingen
+geipingens
+geirfugl
+geirfuglen
+geirfuglens
+geisha
+geishaen
+geishaene
+geishaens
+geishaer
+geistlig
+geistlige
+geistlighet
+geistligheten
+geistlighetens
+geit
+geita
+geite
+geitebukk
+geitebukken
+geitebukkene
+geitebukkens
+geitebukker
+geitemelk
+geitemelka
+geitemelken
+geitemelkens
+geiten
+geitens
+geiterygg
+geiteryggen
+geiteryggens
+geiteskinn
+geiteskinnet
+geiteskinnets
+geitet
+geitete
+geitost
+geitosten
+geitostens
+geitrams
+geitramsen
+geitramsens
+gelatin
+gelatinen
+gelatinens
+geledd
+geledda
+geleddene
+geledder
+geleddet
+geleddets
+geleen
+geleens
+geleida
+geleide
+geleidet
+gelender
+gelenderet
+gelenderets
+gelendra
+gelendre
+gelendrene
+gelendret
+gelendrets
+gelenk
+gelenken
+gelenkene
+gelenkens
+gelenker
+gemakk
+gemakka
+gemakkene
+gemakker
+gemakket
+gemakkets
+gemal
+gemalen
+gemalene
+gemalens
+gemaler
+gemalinna
+gemalinne
+gemalinnen
+gemalinnens
+gemen
+gemene
+gement
+gemse
+gemsen
+gemsens
+gemytt
+gemytta
+gemyttene
+gemytter
+gemyttet
+gemyttets
+gemyttlig
+gen
+gåen
+gendarm
+gendarmen
+gendarmene
+gendarmens
+gendarmer
+gående
+genealog
+genealogen
+genealogene
+genealogens
+genealoger
+genealogi
+genealogien
+genealogiene
+genealogiens
+genealogier
+genene
+gener
+genera
+generaene
+general
+generalavtale
+generalavtalen
+generalavtalens
+generaldirektør
+generaldirektøren
+generaldirektørens
+generalen
+generalene
+generalens
+generaler
+generalforsamling
+generalforsamlingen
+generalforsamlingene
+generalforsamlingens
+generalforsamlinger
+generalisere
+generalisering
+generaliseringa
+generaliseringen
+generaliseringene
+generaliseringens
+generaliseringer
+generalisert
+generaliserte
+generalplan
+generalplanen
+generalplanene
+generalplanens
+generalplaner
+generalsekretær
+generalsekretæren
+generalsekretærene
+generalsekretærens
+generalsekretærer
+generasjon
+generasjonen
+generasjonene
+generasjonens
+generasjoner
+generasjons
+generator
+generatoren
+generatorene
+generatorens
+generatorer
+generell
+generelle
+generelt
+generer
+generere
+genererer
+genereres
+generering
+genereringa
+genereringen
+genereringens
+generert
+genererte
+genesis
+genesisen
+genesisens
+genet
+genets
+geni
+genia
+genial
+geniale
+genialt
+geniene
+genier
+geniet
+geniets
+genitiv
+genitiven
+genitivene
+genitivens
+genitiver
+genitivstegn
+genre
+genren
+genrens
+genser
+gensere
+genseren
+genserens
+genseres
+genserne
+gensernes
+gåent
+gentil
+gentilt
+gentleman
+genuin
+genuine
+genuint
+genus
+genusa
+genusen
+genusene
+genusens
+genuser
+geodetiske
+geofysikk
+geofysikken
+geofysikkens
+geofysisk
+geograf
+geografen
+geografene
+geografens
+geografer
+geografi
+geografien
+geografiene
+geografiens
+geografier
+geografisk
+geografiske
+geolog
+geologen
+geologene
+geologens
+geologer
+geologi
+geologien
+geologiens
+geologisk
+geologiske
+geometri
+geometrien
+geometriene
+geometriens
+geometrier
+geometrisk
+geometriske
+åger
+geraniene
+geranier
+geranium
+geraniumen
+geraniumens
+ågeren
+ågerens
+ågeret
+ågerets
+gerilja
+geriljaen
+geriljaene
+geriljaens
+geriljaer
+ågerkar
+ågerkaren
+ågerkarens
+germaner
+germanere
+germaneren
+germanerens
+germaneres
+germanerne
+germanernes
+germanium
+germaniumet
+germaniumets
+germansk
+gerontolog
+gerontologen
+gerontologene
+gerontologens
+gerontologer
+gerontologi
+gerontologien
+gerontologiens
+gerontologisk
+ågerrenta
+ågerrente
+ågerrenten
+ågerrentene
+ågerrentens
+ågerrenter
+gesandt
+gesandten
+gesandtens
+gesandtskap
+gesandtskapa
+gesandtskapene
+gesandtskaper
+gesandtskapet
+gesandtskapets
+gesell
+gesellen
+gesellene
+gesellens
+geseller
+gesims
+gesimsen
+gesimsene
+gesimsens
+gesimser
+geskjeft
+geskjeften
+geskjeftene
+geskjeftens
+geskjefter
+geskjeftig
+gespenst
+gespensta
+gespenstene
+gespenster
+gespenstet
+gespenstets
+gest
+gesten
+gestene
+gestens
+gester
+gestikulere
+gestikulert
+gestikulerte
+gesvint
+gevant
+gevanta
+gevantene
+gevanter
+gevantet
+gevantets
+gevekst
+geveksten
+gevekstene
+gevekstens
+gevekster
+gevinst
+gevinsten
+gevinstene
+gevinstens
+gevinster
+gevær
+geværa
+geværene
+geværer
+geværet
+geværets
+geysir
+geysiren
+geysirene
+geysirens
+geysirer
+gågata
+gågate
+gågaten
+gågatens
+gi
+gid
+gidde
+giddelaus
+gidder
+giddet
+ægide
+ægiden
+ægidens
+gies
+gift
+gifta
+gifte
+giften
+giftens
+gifter
+giftermål
+giftermåla
+giftermålene
+giftermålet
+giftermålets
+giftet
+giftgass
+giftgassen
+giftgassene
+giftgassens
+giftgasser
+giftig
+giftige
+giga
+gigant
+giganten
+gigantene
+gigantens
+giganter
+gigantisk
+gigantiske
+gigantomani
+gigantomanien
+gigantomaniens
+gigg
+giggen
+giggene
+giggens
+gigger
+gikk
+gikt
+gikta
+gikten
+giktene
+giktens
+gikter
+giktisk
+gild
+gilde
+gildet
+gildra
+gildre
+gildrer
+gildret
+gildt
+giljotin
+giljotinen
+giljotinene
+giljotinens
+giljotiner
+gåing
+gåinga
+gåingen
+gåingens
+gips
+gipsa
+gipsen
+gipsens
+gipser
+gipset
+gir
+gira
+gire
+giren
+girens
+girere
+girerer
+girert
+girerte
+giret
+girl
+giro
+giroen
+giroene
+giroens
+giroer
+gis
+gisla
+gisle
+gislene
+gisler
+gislet
+gisna
+gisne
+gisner
+gisnet
+gisp
+gispe
+gispet
+gisping
+gispinga
+gispingen
+gispingens
+giss
+gissa
+gisse
+gissel
+gisselen
+gisselens
+gisselet
+gisselets
+gissen
+gissent
+gissing
+gissinga
+gissingen
+gissingens
+gisslet
+gisslets
+gitar
+gitaren
+gitarene
+gitarens
+gitarer
+gitarist
+gitaristen
+gitaristene
+gitaristens
+gitarister
+gitre
+gitret
+gitt
+gitte
+gitter
+gitteret
+gitterets
+gittra
+gittrene
+giv
+given
+givende
+givene
+givens
+giver
+givere
+giveren
+giverens
+giverne
+givnad
+givnaden
+givnadene
+givnadens
+givnader
+gjø
+gjaldt
+gjall
+gjalla
+gjalle
+gjallet
+gjødning
+gjødningen
+gjødningens
+gjødsel
+gjødselen
+gjødselens
+gjødsla
+gjødsle
+gjødslet
+gjødsling
+gjødslinga
+gjødslingen
+gjødslingens
+gjedda
+gjedde
+gjedden
+gjeddens
+gjekk
+gjekka
+gjekken
+gjekkene
+gjekkens
+gjekker
+gjekket
+gjel
+gjela
+gjeld
+gjelda
+gjelde
+gjelden
+gjeldende
+gjeldene
+gjeldens
+gjelder
+gjeldet
+gjeldt
+gjelene
+gjelet
+gjelets
+gjell
+gjelle
+gjeller
+gjem
+gjemme
+gjemmer
+gjemsel
+gjemselet
+gjemselets
+gjemsla
+gjemslene
+gjemsler
+gjemslet
+gjemslets
+gjemt
+gjemte
+gjenferd
+gjenferda
+gjenferdene
+gjenferdet
+gjenferdets
+gjenfinne
+gjenfinnes
+gjenforen
+gjenforene
+gjenforener
+gjenforenes
+gjenforenet
+gjenforening
+gjenforeninga
+gjenforeningen
+gjenforeningene
+gjenforeningenes
+gjenforeningens
+gjenforeninger
+gjenforenings
+gjenfortalt
+gjenfortalte
+gjenfortellingen
+gjenfortellingene
+gjeng
+gjenganger
+gjenge
+gjengelig
+gjenget
+gjengi
+gjengir
+gjengis
+gjengitt
+gjengitte
+gjengivelse
+gjengivelsen
+gjengivelsene
+gjengivelsens
+gjengivelser
+gjengjeld
+gjengjelde
+gjengjeldelse
+gjengjeldelsen
+gjengjeldelsens
+gjengjeldende
+gjengjelder
+gjengjeldt
+gjengs
+gjengse
+gjenkjenne
+gjenkjennelig
+gjenkjennelsen
+gjenkjennelsens
+gjenkjenner
+gjenkjennes
+gjenklang
+gjennom
+gjennomarbeide
+gjennomarbeidet
+gjennombrott
+gjennombrottet
+gjennombrottets
+gjennombrudd
+gjennombruddet
+gjennombruddets
+gjennomføre
+gjennomfører
+gjennomføres
+gjennomføring
+gjennomføringa
+gjennomføringen
+gjennomføringens
+gjennomførlig
+gjennomført
+gjennomførte
+gjennomgå
+gjennomgang
+gjennomgangen
+gjennomgangene
+gjennomgangens
+gjennomganger
+gjennomgangstema
+gjennomgangstemaet
+gjennomgangstemaets
+gjennomgåelse
+gjennomgåelsen
+gjennomgåelsens
+gjennomgående
+gjennomgikk
+gjennomgår
+gjennomgripende
+gjennomgått
+gjennomhegle
+gjennomkjøring
+gjennomkjøringa
+gjennomkjøringen
+gjennomkjøringens
+gjennomsiktig
+gjennomskinnelig
+gjennomsøkt
+gjennomskue
+gjennomskuer
+gjennomskuet
+gjennomslagskraft
+gjennomslagskraften
+gjennomslagskraftens
+gjennomsnitt
+gjennomsnittet
+gjennomsnittets
+gjennomsnittlig
+gjennomsnittlige
+gjennomsnittsalder
+gjennomsnittsalderen
+gjennomsnittsalderens
+gjennomsnittsfamilie
+gjennomsnittsfamilien
+gjennomsnittsfamiliens
+gjennomsnittstall
+gjennomsnittstallet
+gjennomsnittstallets
+gjennomsyn
+gjennomsynene
+gjennomsynet
+gjennomsynets
+gjennomtenkning
+gjennomtenkningen
+gjennomtenkningens
+gjennomtenkt
+gjennomtrekk
+gjennomtrekken
+gjennomtrekkens
+gjennomvåt
+gjennomvått
+gjenopprett
+gjenoppretta
+gjenopprette
+gjenopprettelsen
+gjenopprettelsens
+gjenoppretter
+gjenopprettes
+gjenopprettet
+gjenoppta
+gjenopptar
+gjenopptas
+gjenopptatt
+gjenopptatte
+gjenreise
+gjenreiser
+gjenreises
+gjenreising
+gjenreisinga
+gjenreisingen
+gjenreisning
+gjenreisningen
+gjenreisningens
+gjenreist
+gjenreiste
+gjensidig
+gjensidige
+gjensidighet
+gjensidigheten
+gjensidighetens
+gjenskapa
+gjenskape
+gjenskapene
+gjenskaper
+gjenskapes
+gjenskaping
+gjenskapinga
+gjenskapingen
+gjenskapt
+gjenskapte
+gjenskinn
+gjenskinnet
+gjenskinnets
+gjenspeile
+gjenspeiler
+gjenstå
+gjenstand
+gjenstanden
+gjenstandene
+gjenstander
+gjenstands
+gjenstående
+gjenstod
+gjenstår
+gjenstridige
+gjensyn
+gjensyna
+gjensynene
+gjensynet
+gjensynets
+gjenta
+gjentakelse
+gjentakelsen
+gjentakelsens
+gjentar
+gjentas
+gjentatt
+gjentatte
+gjentok
+gjenvalg
+gjenvalget
+gjenvalgt
+gjenvalgte
+gjenveg
+gjenvegen
+gjenvegens
+gjenvinn
+gjenvinne
+gjenvinner
+gjenvinnes
+gjenvordighet
+gjenvordigheten
+gjenvordighetene
+gjenvordighetens
+gjenvordigheter
+gjenværende
+gjenvunnet
+gjerd
+gjerda
+gjerde
+gjerdes
+gjerdet
+gjerne
+gjerning
+gjerninga
+gjerningen
+gjerningene
+gjerningens
+gjerninger
+gjerrig
+gjerrighet
+gjerrigheten
+gjerrighetens
+gjertrudsfugl
+gjertrudsfuglen
+gjertrudsfuglens
+gjesp
+gjespa
+gjespe
+gjespen
+gjespens
+gjespet
+gjess
+gjessene
+gjest
+gjesta
+gjeste
+gjestebud
+gjestebuda
+gjestebudene
+gjestebudet
+gjestebudets
+gjesten
+gjestene
+gjester
+gjestespill
+gjestespillet
+gjestespillets
+gjestet
+gjestfri
+gjestfrihet
+gjestfriheten
+gjestfrihetens
+gjestgiver
+gjestgivere
+gjestgiveren
+gjestgiverens
+gjestgiveres
+gjestgiverne
+gjestgivernes
+gjesting
+gjestinga
+gjestingen
+gjestingens
+gjestmild
+gjestmilde
+gjestmildt
+gjete
+gjetergutt
+gjetergutten
+gjeterguttene
+gjeterguttens
+gjetergutter
+gjetning
+gjetningen
+gjetningene
+gjetningens
+gjetninger
+gjetord
+gjetordet
+gjetordets
+gjett
+gjetta
+gjette
+gjetter
+gjettet
+gjev
+gjeve
+gjevt
+gjøgl
+gjøgle
+gjøgler
+gjøglere
+gjøgleren
+gjøglerens
+gjøgleres
+gjøglerne
+gjøglernes
+gjøglet
+gjøk
+gjøkalv
+gjøkalven
+gjøkalvene
+gjøkalvens
+gjøkalver
+gjøken
+gjøkene
+gjøkens
+gjøker
+gjøle
+gjølet
+gjømme
+gjømmer
+gjømsel
+gjømselet
+gjømselets
+gjømsle
+gjømsler
+gjømslet
+gjømslets
+gjøn
+gjøne
+gjønet
+gjorde
+gjort
+gjær
+gjør
+gjæra
+gjære
+gjøre
+gjøremål
+gjøremåla
+gjøremålene
+gjøremålet
+gjøremålets
+gjæren
+gjærens
+gjærer
+gjøres
+gjæring
+gjæringa
+gjæringen
+gjæringens
+gjørma
+gjørme
+gjørmen
+gjørmens
+gjørmet
+gjørmete
+gjørs
+gjørtler
+gjørtlere
+gjørtleren
+gjørtlerens
+gjørtleres
+gjørtlerne
+gjørtlernes
+gjøs
+gjøsen
+gjøsens
+gjæser
+gjøser
+gjøt
+gjæv
+gjøv
+gjæve
+gjøvet
+gjøvets
+gjævt
+glø
+gla
+øgla
+glad
+glade
+gladelig
+gladiator
+gladiatoren
+gladiatorene
+gladiatorens
+gladiatorer
+glam
+glamma
+glamme
+glammet
+glan
+glana
+glane
+glanet
+glaning
+glaninga
+glaningen
+glaningens
+glans
+glansen
+glansens
+glansperiode
+glansperioden
+glansperiodens
+glansrolle
+glansrollen
+glansrollene
+glansrollens
+glansroller
+glapp
+glappen
+glappens
+glas
+glasa
+glasene
+glaser
+glaset
+glasets
+glasne
+glass
+glassa
+glassen
+glassene
+glasser
+glassere
+glassering
+glasseringa
+glasseringen
+glasseringens
+glassert
+glasserte
+glasset
+glassets
+glassfiber
+glassfiberarmert
+glassfiberen
+glassfiberens
+glassfibrene
+glassvatt
+glassvatten
+glassvattens
+glassverk
+glassverket
+glassverkets
+glasur
+glasuren
+glasurene
+glasurens
+glasurer
+glatt
+glatta
+glatte
+glattet
+glød
+gløda
+gløden
+glødende
+glødens
+gløder
+glødeskall
+glødeskallet
+glødeskallets
+glødet
+gle
+øgle
+gled
+gleda
+glede
+gledelig
+gledelige
+gledeligere
+gleden
+gledens
+gleder
+gledet
+glefs
+glefsa
+glefsen
+glefsene
+glefsens
+glefser
+glefset
+glefsets
+glei
+glem
+glemme
+glemmer
+glemmes
+glemsel
+glemselen
+glemselens
+glemsk
+glemske
+glemsomhet
+glemsomheten
+glemsomhetens
+glemt
+glemte
+øglen
+øglene
+glenna
+glenne
+glennen
+glennene
+glennens
+glenner
+øglens
+glente
+glenten
+glentens
+glepp
+gleppe
+gleppen
+gleppens
+gleppet
+øgler
+gletsjer
+gletsjere
+gletsjeren
+gletsjerens
+gletsjeres
+gletsjerne
+gletsjernes
+gløgg
+gløgt
+gli
+glid
+glide
+glideflukt
+glideflukta
+glideflukten
+glidefluktens
+glidefly
+glideflyene
+glideflyet
+glideflyets
+glidelås
+glidelåsen
+glidelåsene
+glidelåsens
+glidelåser
+gliden
+glider
+glidere
+glideren
+gliderens
+glideres
+gliderne
+glidernes
+gliding
+glidinga
+glidingen
+glidingens
+glidning
+glidningen
+glidningens
+glim
+glime
+glimet
+glimmer
+glimmeren
+glimmerens
+glimra
+glimre
+glimrende
+glimret
+glimt
+glimta
+glimte
+glimten
+glimtens
+glimtet
+glinsa
+glinse
+glinset
+glip
+glipa
+glipen
+glipene
+glipens
+gliper
+glipet
+glipp
+glippa
+glippe
+glippen
+glippens
+glippet
+glir
+glire
+gliret
+glis
+glise
+glisen
+glisens
+gliset
+glisna
+glisne
+glisnet
+glissen
+glissent
+glitra
+glitre
+glitrende
+glitret
+glitter
+glitteret
+glitterets
+glåma
+glåme
+glåmet
+glømme
+glømmer
+glømsel
+glømselen
+glømselens
+glømsk
+glømske
+glo
+gloa
+global
+globale
+globalt
+globus
+globusen
+globusene
+globusens
+globuser
+gloen
+gloende
+gloens
+glor
+glorød
+gloret
+glorete
+glorie
+glorien
+gloriens
+glosa
+glose
+glosen
+glosens
+glossar
+glossara
+glossarene
+glossarer
+glossaret
+glossarets
+glova
+glove
+glovene
+glover
+glåpe
+glåper
+glåpt
+glåpte
+glør
+glørne
+gløse
+gløset
+gløtt
+gløtta
+gløtte
+gløtten
+gløttens
+gløttet
+glugg
+gluggen
+gluggene
+gluggens
+glugger
+glukose
+glukosen
+glukosens
+glunt
+glunten
+gluntene
+gluntens
+glunter
+glup
+glupe
+glupende
+glupsk
+glupt
+glyserol
+glyserolen
+glyserolens
+gnag
+gnagd
+gnage
+gnager
+gnagere
+gnageren
+gnagerens
+gnageres
+gnagerne
+gnagernes
+gnaget
+gnall
+gnatt
+gåne
+gned
+gnei
+gneis
+gneisen
+gneisene
+gneisens
+gneiser
+gneldra
+gneldre
+gneldrebikkja
+gneldrebikkje
+gneldrebikkjene
+gneldrebikkjer
+gneldret
+gnella
+gnelle
+gnellene
+gneller
+gnellet
+gnelt
+gnelte
+gnette
+gnettet
+gni
+gnidd
+gnidder
+gnidderet
+gniding
+gnidinga
+gnidingen
+gnidingens
+gnidning
+gnidningen
+gnidningens
+gnidret
+gnidrete
+gnier
+gniere
+gnieren
+gnierens
+gnieres
+gnierne
+gniernes
+gnikka
+gnikke
+gnikket
+gnirk
+gnirka
+gnirke
+gnirken
+gnirkens
+gnirket
+gniss
+gnissa
+gnisse
+gnisset
+gnist
+gnista
+gnisten
+gnistene
+gnistens
+gnister
+gnistet
+gnistgap
+gnistgapet
+gnistgapets
+gnistra
+gnistre
+gnistrende
+gnistret
+gnål
+gnåle
+gnålet
+gnog
+gnostiker
+gnostikere
+gnostikeren
+gnostikerens
+gnostikeres
+gnostikerne
+gnostikernes
+gnu
+gnuen
+gnuene
+gnuens
+gnuer
+gnura
+gnure
+gnurer
+gnuret
+gny
+gnyet
+gnyets
+goal
+goalen
+goalene
+goalens
+goaler
+gobelin
+gobelina
+gobelinene
+gobeliner
+gobelinet
+gobelinets
+god
+gode
+goden
+godens
+goder
+godet
+godfjott
+godfjotten
+godfjottene
+godfjottens
+godfjotter
+godfjottet
+godfjottete
+godgjøre
+godhet
+godhets
+godhjerta
+godhug
+godhugen
+godhugens
+godkjenn
+godkjenne
+godkjennelse
+godkjennelsen
+godkjennelsens
+godkjenner
+godkjennes
+godkjenning
+godkjenninga
+godkjenningen
+godkjenningens
+godkjent
+godkjente
+godlag
+godlaget
+godlagets
+godliende
+godlåt
+godlåten
+godlåtens
+godlynt
+godmodig
+gods
+godsa
+godsene
+godser
+godset
+godsets
+godskrev
+godskrevet
+godskrive
+godskriver
+godslig
+godstrafikk
+godstrafikken
+godstrafikkens
+godsvogn
+godsvogna
+godsvognen
+godsvognene
+godsvognens
+godsvogner
+godt
+godta
+godtar
+godtas
+godtatt
+godte
+godtemplar
+godtemplaren
+godtemplarene
+godtemplarens
+godtemplarer
+godter
+godtfolk
+godtgjort
+godtgjøre
+godtgjørelse
+godtgjørelsen
+godtgjørelsens
+godtgjøres
+godtgjøring
+godtgjøringa
+godtgjøringen
+godtgjøringens
+godtkjøpsvara
+godtkjøpsvare
+godtkjøpsvaren
+godtkjøpsvarens
+godtok
+godtroende
+godtykke
+godtykket
+godvillig
+godvær
+godværet
+godværets
+gokart
+gokarten
+gokartene
+gokartens
+gokarter
+gol
+gold
+golde
+goldt
+golf
+golfen
+golfene
+golfens
+golfer
+golfjakka
+golfjakke
+golfjakken
+golfjakkens
+golv
+golva
+golvareal
+golvarealet
+golvarealets
+golvbelegg
+golvbelegget
+golvbeleggets
+golvbjelke
+golvbjelken
+golvbjelkene
+golvbjelkens
+golvbjelker
+golve
+golvene
+golvenes
+golvet
+golvflata
+golvflate
+golvflaten
+golvflatens
+golvkonstruksjon
+golvkonstruksjonen
+golvkonstruksjonene
+golvkonstruksjonens
+golvkonstruksjoner
+golvteppe
+golvteppet
+gom
+gomla
+gomle
+gomlet
+gommen
+gommene
+gommens
+gommer
+gondol
+gondolen
+gondolene
+gondolens
+gondoler
+gondolier
+gondoliere
+gondolieren
+gondolierens
+gondolieres
+gondolierne
+gondoliernes
+gongong
+gongongen
+gongongene
+gongongens
+gongonger
+goodwill
+goodwillen
+goodwillens
+gordonsetter
+gordonsettere
+gordonsetteren
+gordonsetterens
+gordonsetteres
+gordonsetterne
+gordonsetternes
+gorilla
+gorillaen
+gorillaene
+gorillaens
+gorillaer
+goro
+goroa
+goroen
+goroene
+goroens
+goroer
+gorr
+gorret
+gorrets
+gospel
+gospelen
+gospelens
+goter
+gotere
+goteren
+goterens
+goteres
+goterne
+goternes
+gotikk
+gotikken
+gotikkens
+gotisk
+gotlending
+gotlendingen
+gotlendingene
+gotlendingens
+gotlendinger
+gotten
+gouda
+goudaost
+goudaosten
+goudaostene
+goudaostens
+goudaoster
+gourmand
+gourmanden
+gourmandene
+gourmandens
+gourmander
+gourmet
+gourmeten
+gourmetene
+gourmetens
+gourmeter
+gov
+gova
+gove
+govet
+grå
+går
+gra
+ågra
+grad
+gradbøying
+gradbøyinga
+gradbøyingen
+gradbøyingens
+gradbøyning
+gradbøyningen
+gradbøyningens
+graden
+gradens
+grader
+gradere
+gradering
+graderinga
+graderingen
+graderingene
+graderingens
+graderinger
+graders
+gradert
+graderte
+gradestokk
+gradestokken
+gradestokkene
+gradestokkens
+gradestokker
+gradvis
+gradvise
+gradvist
+graf
+grafen
+grafene
+grafens
+grafer
+grafiker
+grafikere
+grafikeren
+grafikerens
+grafikeres
+grafikerne
+grafikernes
+grafikk
+grafikken
+grafikkens
+grafisk
+grafiske
+grafitt
+grafitten
+grafittene
+grafittens
+grafitter
+grafsa
+grafse
+grafset
+gram
+gramma
+grammatikalsk
+grammatiker
+grammatikere
+grammatikeren
+grammatikerens
+grammatikeres
+grammatikerne
+grammatikernes
+grammatikk
+grammatikken
+grammatikkene
+grammatikkens
+grammatikker
+grammatisk
+grammene
+grammet
+grammets
+grammofon
+grammofonen
+grammofonene
+grammofonens
+grammofoner
+grammofonplata
+grammofonplate
+grammofonplaten
+grammofonplatene
+grammofonplatens
+grammofonplater
+gramsa
+gramse
+gramset
+gran
+grana
+granat
+granaten
+granatene
+granatens
+granater
+grand
+granden
+grandene
+grandens
+grander
+grandonkel
+grandonkelen
+grandonkelens
+granen
+grann
+granne
+grannen
+grannens
+grannet
+granngivelig
+gransk
+granska
+granske
+gransker
+gransket
+gransking
+granskinga
+granskingen
+granskingens
+granskning
+granskningen
+granskningens
+grant
+grapefrukt
+grapefrukta
+grapefrukten
+grapefruktene
+grapefruktens
+grapefrukter
+gras
+grasart
+grasarten
+grasartene
+grasartens
+grasarter
+grase
+graset
+grashoppa
+grashoppe
+grashoppene
+grashopper
+grasiøs
+grasiøse
+grasiøst
+graskar
+graskara
+graskarene
+graskaret
+graskarets
+grasklipper
+grasklippere
+grasklipperen
+grasklipperens
+grasklipperes
+grasklipperne
+grasklippernes
+grasløk
+grasløken
+grasløkene
+grasløkens
+grasløker
+grasrot
+grasrota
+grasroten
+grasrotens
+grassat
+grassere
+grassert
+grasserte
+grastorv
+grastorva
+grateng
+gratengen
+gratengene
+gratengens
+gratenger
+gratiale
+gratialet
+gratie
+gratien
+gratiens
+gratinere
+gratinerer
+gratinert
+gratinerte
+gratis
+gratisteri
+gratisteriet
+gratisteriets
+gratulant
+gratulanten
+gratulantene
+gratulantens
+gratulanter
+gratulasjon
+gratulasjonen
+gratulasjonene
+gratulasjonens
+gratulasjoner
+gratuler
+gratulere
+gratulerer
+gratulert
+gratulerte
+graut
+grauten
+grautene
+grautens
+grauter
+grautet
+grav
+grava
+gravd
+gravde
+grave
+graven
+gravene
+gravens
+gravenstein
+gravensteinen
+gravensteinene
+gravensteinens
+gravensteiner
+graver
+graveren
+graverende
+graverens
+gravert
+graverte
+graves
+gravferd
+gravferda
+gravferden
+gravferdene
+gravferdens
+gravferder
+gravid
+gravide
+graviditet
+graviditeten
+graviditetens
+gravitasjon
+gravitasjonen
+gravitasjonens
+gravitere
+gravitert
+graviterte
+gravitetisk
+gravkapell
+gravkapellene
+gravkapeller
+gravkapellet
+gravkapellets
+gravøl
+gravøla
+gravlegge
+gravlegger
+gravølene
+gravølet
+gravølets
+gravmæle
+gravmælet
+gravør
+gravøren
+gravørene
+gravørens
+gravører
+gravyr
+gravyren
+gravyrene
+gravyrens
+gravyrer
+gråbein
+gråbeinen
+gråbeinene
+gråbeinens
+gråbeiner
+gård
+grøda
+gårdbruker
+gårdbrukere
+gårdbrukeren
+gårdbrukerens
+gårdbrukeres
+gårdbrukerne
+gårdbrukernes
+grøde
+grøden
+gården
+gårdene
+gårdens
+gårder
+grøderik
+grøderikt
+grådig
+grådige
+gårds
+gårdsbruk
+gårdsbruka
+gårdsbrukene
+gårdsbruket
+gårdsbrukets
+gårdsdrift
+gårdsdrifta
+gårdsdriften
+gårdsdriftens
+gårdsgutt
+gårdsgutten
+gårdsguttene
+gårdsguttens
+gårdsgutter
+gre
+gråe
+ågre
+grei
+greia
+greid
+greide
+greie
+greier
+greiere
+grein
+greina
+greine
+greinen
+greinens
+greiner
+greinet
+greinete
+greip
+greipa
+greipe
+greipen
+greipens
+greit
+greker
+grekere
+grekeren
+grekerens
+grekeres
+grekerne
+grekernes
+grell
+grelle
+grelt
+gremma
+gremme
+gremmer
+gremmet
+gren
+grena
+grenader
+grenadere
+grenaderen
+grenaderens
+grenaderes
+grenaderne
+grenadernes
+grenadisk
+grend
+grenda
+grendeskole
+grendeskolen
+grendeskolene
+grendeskolens
+grendeskoler
+grendier
+grendieren
+grendierens
+grendskap
+grenen
+grenene
+grenens
+grener
+grenet
+grenete
+grensa
+grense
+grenseflate
+grenseflaten
+grenseflatens
+grenselaus
+grenseløst
+grensen
+grensene
+grenseområda
+grenseområde
+grenseområdene
+grenseområder
+grenseområdet
+grenseområdets
+grenser
+grenseskjell
+grenseskjellet
+grenseskjellets
+grenset
+grep
+grepa
+grepet
+ågrer
+gresk
+greske
+gress
+gressa
+gresse
+gresselig
+gressenkemann
+gressenkemannen
+gressenkemannens
+gressenkemenn
+gressenkemennene
+gressenkemennenes
+gressenkemenns
+gresset
+gresshoppa
+gresshoppe
+gresshoppen
+gresshoppene
+gresshoppens
+gresshopper
+gresskar
+gresskara
+gresskarene
+gresskaret
+gresskarets
+ågret
+gretne
+gretten
+grettent
+grev
+greve
+greven
+grevens
+grevet
+grevinna
+grevinne
+grevinnen
+grevinnens
+grevling
+grevlingen
+grevlingene
+grevlingens
+grevlinger
+gråfell
+grøft
+grøfta
+grøfte
+grøften
+grøftens
+gråhåra
+gribb
+gribben
+gribbene
+gribbens
+gribber
+grid
+gridet
+gridets
+griffel
+griffelen
+griffelens
+griflene
+grifler
+griljere
+griljert
+griljerte
+grill
+grilla
+grille
+grillen
+grillens
+grillet
+grim
+grima
+grimase
+grimasen
+grimasens
+grimen
+grimens
+grimet
+grimete
+grimme
+grimt
+grin
+grind
+grinda
+grinde
+grinden
+grindens
+grine
+grinet
+grint
+grinte
+grip
+gripe
+gripekant
+gripende
+griper
+gripere
+griperen
+griperens
+griperes
+griperne
+gripernes
+gripes
+gris
+grisa
+grise
+grisemat
+grisematen
+grisematens
+grisen
+griser
+griset
+grisete
+grisk
+griske
+griskhet
+griskheten
+griskhetens
+griskt
+grisla
+grisle
+grislet
+grisne
+grissen
+grissent
+gråkald
+gråkaldt
+grålysning
+grålysninga
+grålysningen
+grålysningene
+grålysningens
+grålysninger
+grøn
+gråna
+gråne
+grøne
+grånet
+grønet
+grønlandsk
+grønlending
+grønlendingen
+grønlendingene
+grønlendingens
+grønlendinger
+grønn
+grønne
+grønnes
+grønnsak
+grønnsaka
+grønnsaken
+grønnsakene
+grønnsakens
+grønnsaker
+grønnsåpa
+grønnsåpe
+grønnsåpen
+grønnsåpens
+grønnsvær
+grønnsværet
+grønnsværets
+grønska
+grønske
+grønsken
+grønskens
+grønt
+grøntes
+gro
+grobian
+grobianen
+grobianene
+grobianens
+grobianer
+groblad
+grobladene
+groblader
+grobladet
+grobladets
+grobotn
+grobotnen
+grobotnens
+grodd
+groen
+groens
+grogg
+grogga
+groggen
+groggene
+groggens
+grogger
+grogget
+groggy
+groggyen
+groggyene
+groggyens
+groggyer
+grom
+gromgutt
+gromgutten
+gromguttens
+gromme
+gromt
+grop
+gropa
+gropen
+gropene
+gropens
+groper
+gropet
+gror
+groren
+grorene
+grorens
+grorer
+gros
+gross
+grossa
+grossene
+grosserer
+grosserere
+grossereren
+grossererens
+grossereres
+grossererne
+grosserernes
+grosset
+grossets
+grossist
+grossisten
+grossistene
+grossistens
+grossister
+grotesk
+groteske
+grotid
+grotida
+grotiden
+grotidens
+grotta
+grotte
+grotten
+grottens
+grov
+grove
+grovmale
+grovmalt
+grovt
+grøpp
+grøppet
+grøppets
+gørr
+gørret
+gørrets
+gårsdag
+gårsdagen
+gårsdagens
+grøss
+grøssa
+grøsse
+grøsser
+gråstein
+gråsteinen
+gråsteinene
+gråsteinens
+gråsteiner
+gråsteinsmur
+gråsteinsmuren
+gråsteinsmurens
+gråt
+grøt
+gråten
+grøten
+gråtende
+grøtene
+gråtens
+grøtens
+grøter
+grøtet
+grått
+gru
+grua
+grubla
+gruble
+grublende
+grublet
+grue
+gruelig
+gruen
+gruens
+grufull
+grufulle
+grufullt
+grugg
+gruggen
+gruggent
+grugget
+gruggets
+grugne
+gruk
+grum
+grumme
+grums
+grumsa
+grumse
+grumset
+grumsete
+grumt
+grundig
+grundige
+grundigere
+grundighet
+grundigheten
+grundighetens
+grunk
+grunkene
+grunker
+grunket
+grunkets
+grunn
+grunna
+grunnbeløp
+grunnbeløpet
+grunnbeløpets
+grunnbrott
+grunnbrottet
+grunnbrottets
+grunne
+grunneier
+grunneiere
+grunneieren
+grunneierens
+grunneieres
+grunneierne
+grunneiernes
+grunnen
+grunnene
+grunnenhet
+grunnenheten
+grunnenhetens
+grunner
+grunnere
+grunnet
+grunnfesta
+grunnfeste
+grunnfester
+grunnfestet
+grunnfestets
+grunnflate
+grunnflaten
+grunnflatens
+grunnforskning
+grunnforskningen
+grunnforskningens
+grunngi
+grunngitt
+grunngitte
+grunnholdning
+grunnholdningen
+grunnholdningene
+grunnholdningens
+grunnholdninger
+grunnidé
+grunnideene
+grunning
+grunninga
+grunningen
+grunningens
+grunnla
+grunnlag
+grunnlaget
+grunnlagets
+grunnlagt
+grunnlegge
+grunnleggende
+grunnlegger
+grunnleggere
+grunnleggeren
+grunnleggerens
+grunnleggeres
+grunnleggerne
+grunnleggernes
+grunnlov
+grunnlova
+grunnloven
+grunnlovene
+grunnlovens
+grunnlover
+grunnlovsforslag
+grunnlovsforslaget
+grunnlovsforslagets
+grunnlovsstridig
+grunnmur
+grunnmuren
+grunnmurene
+grunnmurens
+grunnmurer
+grunnprinsipp
+grunnprinsippene
+grunnprinsipper
+grunnprinsippet
+grunnprinsippets
+grunnsetning
+grunnsetningen
+grunnsetningene
+grunnsetningens
+grunnsetninger
+grunnskole
+grunnskolen
+grunnskolene
+grunnskolens
+grunnskoler
+grunnstamme
+grunnstammen
+grunnstammene
+grunnstammens
+grunnstammer
+grunnstønad
+grunnstønaden
+grunnstønadens
+grunnstoff
+grunnstoffa
+grunnstoffene
+grunnstoffer
+grunnstoffet
+grunnstoffets
+grunnstøte
+grunnstøtt
+grunnstøtte
+grunnsyn
+grunnsynet
+grunnsynets
+grunntrening
+grunntreningen
+grunntreningens
+grunnutdanning
+grunnutdanninga
+grunnutdanningen
+grunnutdanningens
+grunnverdi
+grunnverdien
+grunnverdiene
+grunnverdiens
+grunnverdier
+grunnvoll
+grunnvollen
+grunnvollene
+grunnvollens
+grunnvoller
+grunt
+gruppa
+gruppe
+gruppefører
+gruppeførere
+gruppeføreren
+gruppeførerens
+gruppeføreres
+gruppeførerne
+gruppeførernes
+gruppen
+gruppene
+gruppens
+grupper
+gruppere
+gruppering
+grupperinga
+grupperingen
+grupperingene
+grupperingens
+grupperinger
+gruppert
+grupperte
+grus
+grusen
+grusens
+gruset
+grusete
+grusom
+grusomhet
+grusomheten
+grusomhetene
+grusomhetens
+grusomheter
+grusomme
+grusomt
+grut
+gruten
+grutens
+grutet
+grutets
+gruvegang
+gruvegangen
+gruvegangene
+gruvegangens
+gruveganger
+gryende
+gryn
+grynet
+grynets
+grynt
+grynta
+grynte
+gryntet
+gryta
+gryte
+gryten
+grytens
+gås
+gåsa
+gåsen
+gåsens
+gåsunge
+gåsungen
+gåsungens
+gåta
+gåte
+gåtefull
+gåtefulle
+gåten
+gåtene
+gåtens
+gåter
+gått
+guano
+guanoen
+guanoene
+guanoens
+guanoer
+guatemalaner
+guatemalanere
+guatemalaneren
+guatemalanerens
+guatemalaneres
+guatemalanerne
+guatemalanernes
+guatemalansk
+gubbe
+gubben
+gubbens
+gud
+gudbarn
+gudbarnet
+gudbarnets
+gudbrandsdøl
+gudbrandsdølen
+gudbrandsdølene
+gudbrandsdølens
+gudbrandsdøler
+guddom
+guddommelig
+guddommelige
+guddommen
+guddommens
+gudelig
+guden
+gudene
+guder
+gudfar
+gudfaren
+gudfarens
+gudfryktig
+gudinna
+gudinne
+gudinnen
+gudinnens
+gudmor
+gudmora
+gudmoren
+gudmorens
+guds
+gudsdyrkelse
+gudsdyrkelsen
+gudsdyrkelsens
+gudsdyrking
+gudsdyrkinga
+gudsdyrkingen
+gudsdyrkingens
+gudsfrykt
+gudsfrykten
+gudsfryktens
+gudskjelov
+gudstjeneste
+gudstjenesten
+gudstjenestene
+gudstjenestens
+gudstjenester
+guffen
+guffent
+gufne
+gufs
+gufsa
+gufse
+gufsen
+gufsens
+gufset
+guida
+guide
+guiden
+guidens
+guider
+guidet
+guineaner
+guineanere
+guineaneren
+guineanerens
+guineaneres
+guineanerne
+guineanernes
+guineansk
+gul
+gula
+gulen
+gulf
+gulfen
+gulfens
+gull
+gullet
+gullets
+gullgruva
+gullgruve
+gullgruven
+gullgruvens
+gullmedalje
+gullmedaljen
+gullmedaljene
+gullmedaljens
+gullmedaljer
+gullpris
+gullprisen
+gullprisens
+gullregn
+gullregnen
+gullregnene
+gullregnens
+gullregner
+gullsmed
+gullsmeden
+gullsmedene
+gullsmedens
+gullsmeder
+gullstandard
+gullstandarden
+gullstandardens
+gulna
+gulne
+gulnet
+gulp
+gulpa
+gulpe
+gulpen
+gulpens
+gulpet
+gulrot
+gulrota
+gulroten
+gulrotens
+gulrøtter
+gulsott
+gulsotta
+gulsotten
+gulsottens
+gult
+gulv
+gulva
+gulvene
+gulvet
+gulvets
+gummi
+gummien
+gummiene
+gummiens
+gummier
+gummistøvler
+gunst
+gunsten
+gunstens
+gunster
+gunstig
+gunstige
+gunstigere
+gunstigst
+gunstigste
+gurgla
+gurgle
+gurglet
+gust
+gusta
+guste
+gusten
+gustent
+gustet
+gustne
+gutere
+gutert
+guterte
+gutt
+gutta
+guttaktig
+guttaperka
+guttaperkaen
+guttaperkaens
+gutten
+guttene
+guttenes
+gutter
+guttespeider
+guttespeidere
+guttespeideren
+guttespeiderens
+guttespeideres
+guttespeiderne
+guttespeidernes
+guttunge
+guttungen
+guttungene
+guttungens
+guttunger
+gutu
+gutua
+gutuene
+gutuer
+guvernanta
+guvernante
+guvernanten
+guvernantens
+guvernør
+guvernøren
+guvernørene
+guvernørens
+guvernører
+gøy
+gøyal
+gøyale
+gøyalt
+gøye
+gøyen
+gøyens
+gyger
+gygra
+gygrene
+gygrer
+gyld
+gylden
+gyldenen
+gyldenene
+gyldenens
+gyldener
+gyldig
+gyldighet
+gyldigheten
+gyldighetens
+gylle
+gyllen
+gyllenlakk
+gyllenlakken
+gyllenlakkens
+gyllenlakker
+gyller
+gylna
+gylne
+gylner
+gylnet
+gylt
+gylta
+gylte
+gymnas
+gymnaset
+gymnasets
+gymnasial
+gymnasialt
+gymnasiast
+gymnasiasten
+gymnasiastene
+gymnasiastens
+gymnasiaster
+gymnasiastsamband
+gymnasiene
+gymnasiet
+gymnasium
+gymnast
+gymnasten
+gymnastene
+gymnastens
+gymnaster
+gymnastikk
+gymnastikken
+gymnastikkens
+gymnastikksal
+gymnastikksalen
+gymnastikksalene
+gymnastikksalens
+gymnastikksaler
+gymnastisere
+gymnastisert
+gymnastiserte
+gynga
+gynge
+gyngen
+gyngens
+gynget
+gøys
+gyse
+gøyse
+gyselig
+gyser
+gysere
+gyseren
+gyserens
+gyseres
+gyserne
+gysernes
+gøyset
+gysing
+gysinga
+gysingen
+gysingens
+gysning
+gysningen
+gysningens
+gyst
+gyste
+gyte
+gyting
+gytinga
+gytingen
+gytingens
+gytja
+gytje
+gytjen
+gytjens
+gytt
+gytte
+gyv
+gyvd
+gyve
+gøyve
+gøyver
+gyvet
+h
+hå
+hø
+ha
+håa
+habengut
+habengutet
+habengutets
+habil
+habile
+habilitering
+habiliteringa
+habiliteringen
+habiliteringens
+habilitet
+habiliteten
+habilitetens
+habilt
+habitt
+habitten
+habittene
+habittens
+habitter
+habitus
+habitusen
+habitusens
+hadde
+hafnium
+hafniumet
+hafniumets
+hag
+hage
+hagen
+hagens
+hagesofa
+hagesofaen
+hagesofaene
+hagesofaens
+hagesofaer
+hagfella
+hagfelle
+hagfeller
+hagl
+hagla
+haglbyge
+haglbygen
+haglbygene
+haglbygens
+haglbyger
+hagle
+haglet
+haglladning
+haglladningen
+haglladningens
+hagt
+hagtorn
+hagtornen
+hagtornene
+hagtornens
+hagtorner
+hai
+haien
+haiene
+haiens
+haier
+haik
+haika
+haike
+haiken
+haikens
+haiker
+haiket
+haitianer
+haitianere
+haitianeren
+haitianerens
+haitianeres
+haitianerne
+haitianernes
+haitiansk
+haka
+hake
+hakel
+hakelen
+hakelens
+haken
+hakene
+hakens
+haker
+haket
+hakk
+hakka
+hakke
+hakken
+hakkens
+hakkes
+hakkespett
+hakkespetta
+hakkespetten
+hakkespettene
+hakkespettens
+hakkespetter
+hakket
+hal
+hala
+halen
+halens
+halfback
+halfbacken
+halfbackene
+halfbackens
+halfbacker
+hall
+halla
+halle
+halleluja
+hallelujaene
+hallelujaer
+hallelujaet
+hallelujaets
+hallen
+hallene
+hallet
+halling
+hallingdøl
+hallingdølen
+hallingdølene
+hallingdølens
+hallingdøler
+hallingen
+hallingene
+hallingens
+hallinger
+hallo
+halloa
+halloene
+halloer
+halloet
+halloets
+halloi
+halloien
+halloiene
+halloiens
+halloier
+hallusinasjon
+hallusinasjonen
+hallusinasjonene
+hallusinasjonens
+hallusinasjoner
+halm
+halma
+halmen
+halmens
+hals
+halsa
+halsen
+halsene
+halsens
+halser
+halsstarrig
+halt
+halta
+halte
+haltende
+haltet
+halting
+haltinga
+haltingen
+haltingens
+halunk
+halunken
+halunkene
+halunkens
+halunker
+halv
+halvannen
+halvdel
+halvdelen
+halvdelene
+halvdelens
+halvdeler
+halve
+halvere
+halvert
+halverte
+halvfull
+halvgamle
+halvhjerta
+halvkule
+halvkulen
+halvkulene
+halvkulens
+halvkuler
+halvliter
+halvlitere
+halvliteren
+halvliterens
+halvliteres
+halvliterne
+halvliternes
+halvmåne
+halvmånen
+halvmånens
+halvpart
+halvparten
+halvpartene
+halvpartens
+halvparter
+halvår
+halvårene
+halvåret
+halvårets
+halvårige
+halvsåle
+halvsålen
+halvsålens
+halvsålet
+halvt
+halvtime
+halvtimes
+halvvegs
+halvveis
+halvøy
+halvøya
+halvøyen
+halvøyene
+halvøyens
+halvøyer
+ham
+hambo
+hamboen
+hamboens
+hamburger
+hamburgere
+hamburgeren
+hamburgerens
+hamburgeres
+hamburgerne
+hamburgernes
+hamittisk
+hamittisken
+hamittiskens
+hamla
+hamle
+hamlet
+hammar
+hammaren
+hammarens
+hammen
+hammens
+hammer
+hammeren
+hammerens
+hammock
+hammocken
+hammockene
+hammockens
+hammocker
+hammondorgel
+hammondorgelet
+hammondorgelets
+hammondorgla
+hammondorglene
+hammondorgler
+hammondorglet
+hammondorglets
+hamn
+hamna
+hamne
+hamnehage
+hamnehagen
+hamnehagens
+hamnen
+hamnens
+hamner
+hamnet
+hamp
+hampen
+hampens
+hamra
+hamre
+hamrene
+hamrer
+hamret
+hamring
+hamringa
+hamringen
+hamringens
+hams
+hamsa
+hamsen
+hamsene
+hamsens
+hamser
+hamset
+hamskifte
+hamskiftet
+hamskiftets
+hamster
+hamsteren
+hamsterens
+hamstra
+hamstre
+hamstrene
+hamstret
+han
+hand
+handa
+handbak
+handbaken
+handbakens
+handball
+handballbane
+handballbanen
+handballbanene
+handballbanens
+handballbaner
+handballen
+handballene
+handballens
+handballer
+handel
+handelen
+handelens
+handels
+handelsavtale
+handelsavtalen
+handelsavtalene
+handelsavtalens
+handelsavtaler
+handelsbalanse
+handelsbalansen
+handelsbalansens
+handelsbank
+handelsbanken
+handelsbankens
+handelsbrev
+handelsbreva
+handelsbrevene
+handelsbrevet
+handelsbrevets
+handelsdepartement
+handelsdepartementet
+handelsdepartementets
+handelsflåte
+handelsflåten
+handelsflåtens
+handelsgymnas
+handelsgymnaset
+handelsgymnasets
+handelsgymnasium
+handelshøyskole
+handelshøyskolen
+handelshøyskolens
+handelskammer
+handelskammeret
+handelskammerets
+handelskamre
+handelskamrene
+handelsminister
+handelsministeren
+handelsministerens
+handelsministrene
+handelsreisende
+handelsskole
+handelsskoleeksamen
+handelsskoleeksamens
+handelsskolen
+handelsskolene
+handelsskolens
+handelsskoler
+handelsstand
+handelsstanden
+handelsstandens
+handelsstands
+handelstands
+handfallen
+handfallent
+handfestning
+handfestningen
+handfestningens
+handfull
+handgemeng
+handgemenget
+handgemengets
+handgripelig
+handgripelige
+handhelse
+handheva
+handheve
+handheves
+handikap
+handikapa
+handikapene
+handikapet
+handikapets
+handikappa
+handikappe
+handikappet
+handkle
+handklær
+handkraft
+handkrafta
+handkraften
+handkraftens
+handla
+handlag
+handlaga
+handlagene
+handlaget
+handlagets
+handlanger
+handlangere
+handlangeren
+handlangerens
+handlangeres
+handlangerne
+handlangernes
+handle
+handlekraft
+handlekrafta
+handlekraften
+handlekraftens
+handlekraftig
+handlemåte
+handlemåten
+handlemåtene
+handlemåtens
+handlemåter
+handler
+handlernes
+handlet
+handling
+handlinga
+handlingen
+handlingene
+handlingens
+handlinger
+handlingsplan
+handlingsplanen
+handlingsplanens
+handlingsprogram
+handlingsprogrammene
+handlingsprogrammer
+handlingsprogrammet
+handlingsprogrammets
+handplukka
+handsama
+handsame
+handsamet
+handspak
+handspaken
+handspakens
+handsrekning
+handsrekninga
+handsrekningen
+handsrekningene
+handsrekningens
+handsrekninger
+handtakes
+handtere
+handterer
+handtering
+handteringa
+handteringen
+handteringene
+handteringens
+handteringer
+handtert
+handterte
+handvending
+handvendinga
+handvendingen
+handvendingens
+handverk
+handverka
+handverkene
+handverker
+handverkere
+handverkeren
+handverkerens
+handverkeres
+handverkerne
+handverkernes
+handverket
+handverkets
+handverksbedrift
+handverksbedriften
+handverksbedriftene
+handverksbedriftens
+handverksbedrifter
+handverkslov
+handverksloven
+handverkslovens
+handveska
+handveske
+handvesken
+handveskene
+handveskens
+handvesker
+handøvle
+handøvlet
+handvåpen
+handvåpenet
+handvåpenets
+handvåpnene
+handvåpnenes
+hanen
+hanens
+hang
+hangar
+hangaren
+hangarene
+hangarens
+hangarer
+hangarskip
+hangarskipa
+hangarskipene
+hangarskipet
+hangarskipets
+hangla
+hangle
+hanglet
+hanglete
+hank
+hanka
+hanken
+hankene
+hankens
+hanker
+hankjønn
+hankjønnet
+hankjønnets
+hankjønnsord
+hankjønnsorda
+hankjønnsordene
+hankjønnsordet
+hankjønnsordets
+hann
+hannen
+hannene
+hannens
+hanner
+hannfugl
+hannfuglene
+hannkjønnsord
+hannkjønnsordet
+hannkjønnsordets
+hannlig
+hans
+hansa
+hanseat
+hanseaten
+hanseatene
+hanseatens
+hanseater
+hansen
+hansens
+hansestad
+hansestaden
+hansestadens
+hanske
+hansken
+hanskens
+hansker
+hanskes
+happening
+happeningen
+happeningene
+happeningens
+happeninger
+har
+harakiri
+harakirien
+harakiriens
+harang
+harangen
+harangene
+harangens
+haranger
+hard
+hardbalen
+hardbalent
+hardbalne
+harde
+hardere
+hardest
+hardeste
+hardfør
+hardføre
+hardfrossen
+hardfrossent
+hardført
+hardhaus
+hardhausen
+hardhausene
+hardhausens
+hardhauser
+hardhendt
+hardhet
+hardheten
+hardhetens
+hardhjerta
+hardhjertet
+harding
+hardingen
+hardingene
+hardingens
+hardinger
+hardingfela
+hardingfele
+hardingfelene
+hardingfeler
+hardkokt
+hardlynt
+hardna
+hardnakka
+hardnakket
+hardne
+hardnet
+hardråde
+hardrådig
+hardstappa
+hardt
+hardvær
+hardværet
+hardværets
+hare
+harem
+harema
+haremet
+haremets
+haremynt
+hark
+harka
+harke
+harket
+harm
+harme
+harmelig
+harmen
+harmens
+harmoner
+harmonere
+harmonerer
+harmonert
+harmonerte
+harmoni
+harmonia
+harmonien
+harmoniene
+harmoniens
+harmonier
+harmonika
+harmonikaen
+harmonikaene
+harmonikaens
+harmonikaer
+harmonisere
+harmoniseres
+harmonisering
+harmoniseringa
+harmoniseringen
+harmoniseringens
+harmonisert
+harmoniserte
+harmonisk
+harmoniske
+harmt
+harnisk
+harniska
+harniskene
+harnisker
+harnisket
+harniskets
+harpa
+harpe
+harpen
+harpens
+harpiks
+harpiksen
+harpiksene
+harpiksens
+harpikser
+harpikset
+harpun
+harpunen
+harpunene
+harpunens
+harpuner
+harpunere
+harpunert
+harpunerte
+harr
+harren
+harrene
+harrens
+harrer
+harselas
+harselasen
+harselasene
+harselasens
+harselaser
+harselere
+harselert
+harselerte
+harsk
+harske
+harskt
+hartkorn
+harv
+harva
+harven
+harvene
+harvens
+harver
+harvet
+has
+hasard
+hasarden
+hasardens
+hasarder
+hasardiøs
+hasardiøse
+hasardiøst
+hasen
+hasens
+hasj
+hasjen
+hasjens
+hasjisj
+hasjisjen
+hasjisjens
+hasla
+hasle
+haslene
+hasler
+haslet
+haspel
+haspelen
+haspelens
+hasplene
+haspler
+hassel
+hasselen
+hasselens
+hasselnøtt
+hasselnøtta
+hasselnøtten
+hasselnøttene
+hasselnøttens
+hasselnøtter
+hast
+hasta
+haste
+hasten
+hastens
+haster
+hastet
+hastig
+hastige
+hastighet
+hastigheten
+hastighetene
+hastighetens
+hastigheter
+hastverk
+hastverket
+hastverkets
+hat
+hata
+hate
+hatefull
+hater
+hatere
+hatet
+hatsk
+hatt
+hatta
+hatten
+hattene
+hattens
+hattepull
+hattepullen
+hattepullens
+hatter
+hattet
+hau
+haud
+hauden
+haudene
+haudens
+hauder
+haug
+hauge
+haugen
+haugens
+hauger
+haugevis
+haugianer
+haugianere
+haugianeren
+haugianerens
+haugianeres
+haugianerne
+haugianernes
+hauglegge
+hauglegger
+hauk
+hauka
+hauke
+hauken
+haukens
+hauker
+hauket
+haus
+hausen
+hausene
+hausens
+hauser
+hauset
+haute
+hav
+havanneser
+havannesere
+havanneseren
+havanneserens
+havanneseres
+havanneserne
+havannesernes
+havarere
+havarert
+havarerte
+havari
+havaria
+havariene
+havarier
+havariet
+havariets
+havarist
+havaristen
+havaristene
+havaristens
+havarister
+havblikk
+havblikka
+havblikkene
+havblikket
+havblikkets
+havbunn
+havbunnen
+havbunnens
+have
+havella
+havelle
+havellene
+haveller
+havesjuk
+havesjuken
+havesjukens
+havet
+havets
+havflate
+havflaten
+havflatens
+havforskning
+havforskningen
+havforskningens
+havfru
+havfrua
+havfruen
+havfruene
+havfruens
+havfruer
+havgul
+havgula
+havgulen
+havgulens
+havkatt
+havkatten
+havkattens
+havn
+havna
+havne
+havnefogd
+havnefogden
+havnefogdens
+havnen
+havnene
+havner
+havnet
+havnevesen
+havnevesenet
+havnevesenets
+havområde
+havområdene
+havområder
+havområdet
+havområdets
+havre
+havren
+havrens
+havs
+havsula
+havsule
+havsulen
+havsulene
+havsulens
+havsuler
+håball
+håballen
+håballens
+håbrann
+håbrannen
+håbrannene
+håbrannens
+håbranner
+he
+head
+heada
+heade
+headet
+heading
+headinga
+headingen
+headingens
+hebraisk
+hebraisken
+hebraiskens
+hebreer
+hebreere
+hebreeren
+hebreerens
+hebreeres
+hebreerne
+hebreernes
+hedendom
+hedendommen
+hedendommens
+hedensk
+hedenskap
+hedenskapen
+hedenskapens
+hedenskapet
+heder
+hederen
+hederens
+hederlig
+hedersmann
+hedersmannen
+hedersmannens
+hedersmenn
+hedersmennene
+hedersmennenes
+hedersmenns
+hederstegn
+hederstegna
+hederstegnene
+hederstegnet
+hederstegnets
+hedmarking
+hedmarkingen
+hedmarkingene
+hedmarkingens
+hedmarkinger
+hedning
+hedningen
+hedningene
+hedningens
+hedninger
+hedningmisjon
+hedningmisjonen
+hedningmisjonene
+hedningmisjonens
+hedningmisjoner
+hedra
+hedre
+hedrer
+hedret
+heft
+hefta
+hefte
+heften
+heftens
+hefter
+heftet
+heftig
+heftige
+heftighet
+heftigheten
+heftighetens
+hefting
+heftinga
+heftingen
+heftingens
+hegd
+hegda
+hegde
+hegdet
+hegemoni
+hegemoniet
+hegemoniets
+hegg
+hegge
+heggebær
+heggebæra
+heggebærene
+heggebæret
+heggebærets
+heggen
+heggens
+hegn
+hegna
+hegne
+hegnet
+hegre
+hegren
+hegrens
+hei
+heia
+heiagjeng
+heiagjengen
+heiagjengene
+heiagjengens
+heiagjenger
+heie
+heiet
+heigard
+heigarden
+heigardens
+heil
+heilaftens
+heilautomatisk
+heilautomatiske
+heile
+heilo
+heiloa
+heiloen
+heiloene
+heiloens
+heiloer
+heilskinna
+heilsveist
+heilt
+heim
+heimby
+heimbyen
+heimbyens
+heimbygd
+heimbygda
+heimbygdene
+heimbygder
+heime
+heimebane
+heimebanen
+heimebanene
+heimebanens
+heimebaner
+heimebrent
+heimebrenten
+heimebrentens
+heimefiske
+heimefisket
+heimefra
+heimefront
+heimefronten
+heimefrontens
+heimehørende
+heimekamp
+heimekampen
+heimekampene
+heimekampens
+heimekamper
+heimekino
+heimekinoen
+heimekinoens
+heimekjær
+heimekjære
+heimekjært
+heimel
+heimelaget
+heimelagets
+heimelen
+heimelens
+heimelsmann
+heimelsmannen
+heimelsmannens
+heimelsmenn
+heimelsmennene
+heimelsmennenes
+heimelsmenns
+heimemarked
+heimemarkeda
+heimemarkedene
+heimemarkeder
+heimemarkedet
+heimemarkedets
+heimen
+heimens
+heimesittere
+heimetter
+heimevern
+heimevernet
+heimevernets
+heimeværende
+heimføding
+heimfødingen
+heimfødingene
+heimfødingens
+heimfødinger
+heimfesta
+heimfeste
+heimfestet
+heimkalt
+heimkjær
+heimkjære
+heimkjært
+heimkomst
+heimkomsten
+heimkomstene
+heimkomstens
+heimkomster
+heimkunnskap
+heimkunnskapen
+heimkunnskapens
+heimlandet
+heimle
+heimlene
+heimler
+heimlig
+heimlige
+heimom
+heimover
+heimreisa
+heimreise
+heimreisen
+heimreisens
+heimsøke
+heimsøker
+heimsøkt
+heimsøkte
+heimstad
+heimstaden
+heimstadene
+heimstadens
+heimstader
+heimstadlæra
+heimstadlære
+heimstadlæren
+heimstadlærens
+heimsted
+heimstedene
+heimsteder
+heimstedet
+heimstedets
+heimtur
+heimturen
+heimturens
+heimveg
+heimvegen
+heimvegens
+heimvei
+heimveien
+heimveiens
+hein
+heinen
+heinene
+heinens
+heiner
+heis
+heise
+heisen
+heisens
+heiser
+heiset
+heist
+heit
+heitt
+heiv
+hekk
+hekka
+hekke
+hekkeløp
+hekkeløpet
+hekkeløpets
+hekken
+hekkens
+hekker
+hekket
+hekkmotor
+hekkmotoren
+hekkmotorene
+hekkmotorens
+hekkmotorer
+hekktråler
+hekktrålere
+hekktråleren
+hekktrålerens
+hekktråleres
+hekktrålerne
+hekktrålernes
+hekla
+hekle
+heklet
+hekling
+heklinga
+heklingen
+heklingens
+heks
+heksa
+hekse
+heksegryta
+heksegryte
+heksegryten
+heksegrytens
+heksen
+heksens
+hekseri
+hekseriet
+hekseriets
+hekset
+hekt
+hekta
+hektar
+hektarene
+hektaret
+hektarets
+hekte
+hekten
+hektens
+hektet
+hektisk
+hektiske
+hekto
+hektoa
+hektoen
+hektoene
+hektoens
+hektoet
+hektoets
+hektogram
+hektogramma
+hektogrammene
+hektogrammet
+hektogrammets
+hektoliter
+hektolitere
+hektoliteren
+hektoliterens
+hektoliteres
+hektoliterne
+hektoliternes
+hel
+hela
+helaftens
+helautomatisk
+helautomatiske
+helbred
+helbreda
+helbrede
+helbreden
+helbredens
+helbredet
+heldekksteppe
+heldekksteppet
+heldig
+heldige
+heldigere
+heldigvis
+hele
+heler
+helere
+heleren
+helerens
+heleres
+heleri
+heleriene
+helerier
+heleriet
+heleriets
+helerne
+helernes
+helet
+helg
+helga
+helge
+helgedag
+helgedagen
+helgedagene
+helgedagens
+helgedager
+helgen
+helgenen
+helgenene
+helgenens
+helgener
+helgetorsdag
+helheim
+helheimen
+helheimens
+helhet
+helheten
+helhetens
+helhetsbilde
+helhetsbildet
+helhetsbildets
+helhetsinntrykk
+helhetsinntrykket
+helhetsinntrykkets
+helhetssyn
+helhjertet
+helikopter
+helikopteret
+helikopterets
+helikoptra
+helikoptre
+helikoptrene
+helikoptret
+helikoptrets
+helium
+heliumet
+heliumets
+hell
+hella
+helle
+hellebard
+hellebarden
+hellebardens
+hellefisk
+hellefisken
+hellefiskene
+hellefiskens
+hellefisker
+hellen
+hellener
+hellenere
+helleneren
+hellenerens
+helleneres
+hellenerne
+hellenernes
+hellensk
+heller
+hellere
+helleren
+hellerens
+helleres
+helleristning
+helleristningen
+helleristningene
+helleristningens
+helleristninger
+hellerne
+hellernes
+helles
+hellet
+hellig
+helliga
+helligdag
+helligdagen
+helligdagene
+helligdagens
+helligdager
+helligdom
+helligdommen
+helligdommene
+helligdommens
+helligdommer
+hellige
+helliger
+helliget
+helling
+hellinga
+hellingen
+hellingens
+helning
+helningen
+helningens
+hels
+helsa
+helse
+helsearbeid
+helsearbeider
+helsearbeidet
+helsearbeidets
+helsebot
+helsebota
+helseboten
+helsebotens
+helsedirektoratet
+helsedirektoratets
+helsedirektør
+helsedirektøren
+helsedirektørens
+helsefarlige
+helselæra
+helselære
+helselæren
+helselærens
+helsemessige
+helsen
+helsens
+helseorganisasjon
+helseorganisasjonen
+helseorganisasjonene
+helseorganisasjonens
+helseorganisasjoner
+helseråd
+helserådet
+helserådets
+helsesøster
+helsesøsteren
+helsesøsterens
+helsesøstre
+helsesøstrene
+helsestasjon
+helsestasjonen
+helsestasjonene
+helsestasjonens
+helsestasjoner
+helsestell
+helsetjeneste
+helsetjenesten
+helsetjenestens
+helsetning
+helsetningen
+helsetningene
+helsetningens
+helsetninger
+helsevern
+helsevernet
+helsevernets
+helsevesen
+helsevesenet
+helsevesenets
+helsig
+helsing
+helsinga
+helsingen
+helsingens
+helsott
+helsotta
+helsotten
+helsottens
+helst
+helsveist
+helt
+heltall
+helte
+heltemodig
+helten
+heltens
+heltinna
+heltinne
+heltinnen
+heltinnens
+helvete
+helvetet
+helvt
+helvta
+helvtene
+helvter
+hemisfære
+hemisfæren
+hemisfærens
+hemma
+hemme
+hemmelig
+hemmelige
+hemmelighet
+hemmeligheten
+hemmelighetene
+hemmelighetens
+hemmeligheter
+hemmeligstemplet
+hemmer
+hemmet
+hemning
+hemningen
+hemningene
+hemningens
+hemninger
+hemoglobin
+hemoglobinet
+hemoglobinets
+hempa
+hempe
+hempen
+hempens
+hemsko
+hemskoen
+hemskoens
+hen
+henblikk
+hende
+hendelig
+hendelse
+hendelsen
+hendelsene
+hendelsens
+hendelser
+hendelsesforløp
+hendelsesforløpet
+hendelsesforløpets
+hendene
+hender
+hendig
+hending
+hendinga
+hendingen
+hendt
+hendte
+heng
+henge
+hengefly
+hengeflyet
+hengeflyets
+hengeglider
+hengeglidere
+hengeglideren
+hengegliderens
+hengeglideres
+hengegliderne
+hengeglidernes
+hengemyr
+hengemyra
+hengende
+henger
+henges
+hengi
+hengiven
+hengivenhet
+hengivenheten
+hengivenhetens
+hengivent
+hengivne
+hengsel
+hengselen
+hengselens
+hengselet
+hengselets
+hengsla
+hengsle
+hengsler
+hengt
+hengte
+henhold
+henholder
+henholdet
+henholdsvis
+henimot
+henlagt
+henne
+hennes
+henover
+henrette
+henrettelse
+henrettelsen
+henrettelsens
+henrettet
+henrykt
+henseende
+henseenden
+henseendene
+henseendens
+henseender
+henseendet
+hensikt
+hensikten
+hensiktens
+hensikter
+hensiktsmessig
+hensiktsmessige
+henstand
+henstanden
+henstandens
+henstille
+henstiller
+henstilles
+henstillet
+henstilling
+henstillinga
+henstillingen
+henstillingene
+henstillingens
+henstillinger
+henstilt
+henstilte
+hensyn
+hensyna
+hensynene
+hensynet
+hensynets
+hensynsfull
+hensynsløs
+hensynsløse
+hensynsløst
+hent
+hente
+henter
+hentes
+hentet
+hentyde
+hentydet
+henvend
+henvende
+henvendelse
+henvendelsen
+henvendelsene
+henvendelsens
+henvendelser
+henvender
+henvendt
+henvendte
+henvise
+henviser
+henvises
+henvisning
+henvisningen
+henvisningene
+henvisningens
+henvisninger
+henvist
+henviste
+hepna
+hepne
+hepnene
+hepner
+heppa
+heppe
+heppen
+hepper
+heppet
+her
+heraldiker
+heraldikere
+heraldikeren
+heraldikerens
+heraldikeres
+heraldikerne
+heraldikernes
+heraldikk
+heraldikken
+heraldikkens
+heraldisk
+heraldiske
+herav
+herbaria
+herbariene
+herbarier
+herbariet
+herbariets
+herbarium
+herberge
+herberger
+herberget
+herd
+herda
+herde
+herdebrei
+herdig
+herding
+herdinga
+herdingene
+herdinger
+herdsle
+heretter
+herfra
+herje
+herjer
+herjet
+herjing
+herjinga
+herjingen
+herjingene
+herjingens
+herjinger
+herk
+herke
+herket
+herkomst
+herkomsten
+herkomstens
+herlig
+herlige
+herlighet
+herligheten
+herlighetens
+hermafroditt
+hermafroditten
+hermafrodittene
+hermafrodittens
+hermafroditter
+herme
+hermed
+hermelin
+hermelinen
+hermelinens
+hermer
+hermetegn
+hermetegna
+hermetegnene
+hermetegnet
+hermetegnets
+hermetikk
+hermetikken
+hermetikkene
+hermetikkens
+hermetikker
+hermetisere
+hermetiserer
+hermetisert
+hermetiserte
+hermetisk
+herming
+herminga
+hermingen
+hermingene
+hermingens
+herminger
+hermt
+hermte
+hero
+heroen
+heroene
+heroens
+heroer
+heroisk
+herold
+herolden
+heroldene
+heroldens
+herolder
+herr
+herre
+herred
+herreda
+herredene
+herreder
+herredet
+herredets
+herredømme
+herredømmet
+herredsrett
+herredsretten
+herredsrettens
+herredsstyre
+herredsstyret
+herregud
+herreklasse
+herreklassen
+herreklassene
+herreklassens
+herreklasser
+herreklær
+herrekonfeksjon
+herrekonfeksjonen
+herrekonfeksjonene
+herrekonfeksjonens
+herrekonfeksjoner
+herrelag
+herrelaget
+herrelagets
+herren
+herrene
+herrenes
+herrens
+herrer
+herse
+hersen
+hersens
+hersk
+herskap
+herskapa
+herskapelig
+herskapene
+herskaper
+herskapet
+herskapets
+herske
+herskende
+hersker
+herskere
+herskeren
+herskerens
+herskeres
+herskerinna
+herskerinne
+herskerinnen
+herskerinnene
+herskerinnens
+herskerinner
+herskerne
+herskernes
+hersket
+hertil
+hertug
+hertugen
+hertugene
+hertugens
+hertuger
+hertuginna
+hertuginne
+hertuginnen
+hertuginnene
+hertuginnens
+hertuginner
+herunder
+herved
+hes
+heseblesende
+hesja
+hesje
+hesjen
+hesjene
+hesjens
+hesjer
+hesjet
+heslig
+hespa
+hespe
+hespel
+hespelen
+hespelens
+hespen
+hespene
+hespens
+hesper
+hespet
+hespetre
+hesple
+hespler
+hest
+heste
+hesteavl
+hestekraft
+hestekrafta
+hestekraften
+hestekraftens
+hestekrefter
+hesten
+hestene
+hester
+hesterygg
+hesteryggen
+hesteryggens
+hestesele
+hesteselen
+hesteselene
+hesteselens
+hesteseler
+hestesko
+hesteskoen
+hesteskoene
+hesteskoens
+het
+hete
+heten
+heter
+heterogen
+hetne
+hets
+hett
+hette
+hev
+hevd
+hevde
+hevder
+hevdes
+hevdet
+hevdvunne
+hevdvunnen
+heve
+hevert
+heverten
+hevertene
+hevertens
+heverter
+heves
+hevet
+hevla
+hevle
+hevler
+hevlet
+hevn
+hevna
+hevnen
+hevnens
+hevner
+hevnet
+hevngjerrig
+hevning
+hevningen
+hevningens
+høflig
+høflige
+høflighet
+høfligheten
+høflighetens
+høg
+høgaktuell
+høgd
+høgda
+høgde
+høgdene
+høgder
+høge
+høgere
+høgest
+høgeste
+høgfjell
+høgfjella
+høgfjellet
+høgfjellets
+høgfjellshotell
+høgfjellshotella
+høgfjellshotellene
+høgfjellshoteller
+høgfjellshotellet
+høgfjellshotellets
+høgfrekvens
+høgfrekvensen
+høgfrekvensens
+høgglanspolert
+høgland
+høglytt
+høgmælt
+høgre
+høgreist
+høgrepresse
+høgres
+høgresida
+høgreside
+høgresiden
+høgresidens
+høgsesong
+høgsesongen
+høgsesongens
+høgsete
+høgsetet
+høgskole
+høgskolen
+høgskolene
+høgskolens
+høgskoler
+høgsletta
+høgslette
+høgsletten
+høgslettene
+høgslettens
+høgsletter
+høgspent
+høgst
+høgstdags
+høgste
+høgsterett
+høgsterettsadvokat
+høgsterettsjustitiarius
+høgstnattes
+høgt
+høgtaler
+høgtalere
+høgtaleren
+høgtalerens
+høgtaleres
+høgtalerne
+høgtalernes
+høgtid
+høgtida
+høgtidelig
+høgtidelige
+høgtrykk
+høgtrykket
+høgtrykkets
+høgtstående
+høgætta
+høgættet
+høgvann
+høgvanne
+høgverdig
+hi
+hickory
+hickoryen
+hickoryens
+hierarki
+hierarkia
+hierarkiene
+hierarkier
+hierarkiet
+hierarkiets
+hierarkisk
+hieroglyf
+hieroglyfen
+hieroglyfene
+hieroglyfens
+hieroglyfer
+hiet
+higa
+hige
+higen
+higer
+higet
+high
+hikke
+hikken
+hikkens
+hikst
+hiksta
+hiksten
+hikstene
+hikstens
+hikster
+hikstet
+hikstets
+hilda
+hilde
+hilder
+hilderet
+hildet
+hildre
+hildret
+hildring
+hildringa
+hildringen
+hildringene
+hildringens
+hildringer
+hill
+hils
+hilse
+hilsen
+hilsenen
+hilsenene
+hilsenens
+hilsener
+hilser
+hilses
+hilset
+hilsningstale
+hilsningstalen
+hilsningstalene
+hilsningstalens
+hilsningstaler
+hilst
+hilste
+himla
+himle
+himlene
+himler
+himlet
+himling
+himlinga
+himlingen
+himlingene
+himlingens
+himlinger
+himmel
+himmelen
+himmelens
+himmelfartsdag
+himmelfartsdagen
+himmelfartsdagens
+himmelretning
+himmelretningen
+himmelretningene
+himmelretningens
+himmelretninger
+himmelrike
+himmelriket
+himmelropende
+himmels
+himmelsk
+himmerik
+himmerike
+himmeriket
+hin
+hinannen
+hind
+hinda
+hinden
+hindene
+hindens
+hinder
+hindere
+hinderet
+hindre
+hindrer
+hindres
+hindret
+hindring
+hindringa
+hindringen
+hindringene
+hindringens
+hindringer
+hindu
+hinduen
+hinduene
+hinduens
+hinduer
+hinduisk
+hine
+hingst
+hingsten
+hingstene
+hingstens
+hingster
+hinka
+hinke
+hinkene
+hinker
+hinket
+hinna
+hinne
+hinnen
+hinnene
+hinnens
+hinner
+hinnet
+hinsides
+hinsidige
+hint
+hinta
+hintene
+hinter
+hintet
+hintets
+hipne
+hipp
+hippa
+hippene
+hippet
+hippets
+hippie
+hippien
+hippiens
+hippodrom
+hippodromen
+hippodromens
+hippodromer
+hird
+hirda
+hirden
+hirdene
+hirdens
+hirder
+hire
+hirer
+hirt
+hirte
+hisse
+hissig
+hissige
+hissighet
+hissigheten
+hissighetens
+hist
+historia
+historie
+historien
+historiene
+historiens
+historier
+historiker
+historikere
+historikeren
+historikerens
+historikeres
+historikerne
+historikernes
+historikk
+historikken
+historikkene
+historikkens
+historikker
+historisk
+historiske
+hit
+hita
+hitafor
+hitenfor
+hitenom
+hitre
+hitt
+hitte
+hitterst
+hittil
+hiv
+hiva
+hivd
+hivde
+hiven
+hivene
+hivens
+hiver
+hivet
+hjalp
+hjalt
+hjalta
+hjaltene
+hjalter
+hjaltet
+hjaltets
+hjel
+hjell
+hjellen
+hjellene
+hjellens
+hjeller
+hjelm
+hjelmen
+hjelmene
+hjelmens
+hjelmer
+hjelp
+hjelpa
+hjelpe
+hjelpefil
+hjelpefila
+hjelpefilen
+hjelpefilens
+hjelpekorps
+hjelpekorpsa
+hjelpekorpsene
+hjelpekorpset
+hjelpekorpsets
+hjelpeløs
+hjelpeløse
+hjelpeløshet
+hjelpeløsheten
+hjelpeløshetens
+hjelpeløst
+hjelpemiddel
+hjelpemiddelet
+hjelpemiddelets
+hjelpemidla
+hjelpemidlene
+hjelpemidler
+hjelpemidlet
+hjelpemidlets
+hjelpen
+hjelpende
+hjelpeprest
+hjelpepresten
+hjelpeprestene
+hjelpeprestens
+hjelpeprester
+hjelpeprogram
+hjelpeprogrammene
+hjelpeprogrammer
+hjelpeprogrammet
+hjelpeprogrammets
+hjelper
+hjelperåd
+hjelperåda
+hjelperåder
+hjelpere
+hjelperen
+hjelperens
+hjelperes
+hjelperne
+hjelpernes
+hjelpes
+hjelpesmann
+hjelpesmannen
+hjelpesmannens
+hjelpesmenn
+hjelpesmennene
+hjelpesmennenes
+hjelpesmenns
+hjelpetiltak
+hjelpetiltaka
+hjelpetiltakene
+hjelpetiltaket
+hjelpetiltakets
+hjelpeverb
+hjelpeverba
+hjelpeverbene
+hjelpeverbet
+hjelpeverbets
+hjelpsom
+hjelpsomhet
+hjelpsomheten
+hjelpsomhetens
+hjelpsomme
+hjem
+hjemby
+hjembyen
+hjembyens
+hjembygd
+hjembygda
+hjembygden
+hjembygdene
+hjembygdens
+hjembygder
+hjemetter
+hjemkalt
+hjemkomst
+hjemkomsten
+hjemkomstene
+hjemkomstens
+hjemkomster
+hjemla
+hjemland
+hjemlanda
+hjemlandene
+hjemlandet
+hjemlandets
+hjemle
+hjemlene
+hjemler
+hjemlet
+hjemlig
+hjemlige
+hjemme
+hjemmebane
+hjemmebanen
+hjemmebanens
+hjemmefra
+hjemmefront
+hjemmefronten
+hjemmefrontens
+hjemmehørende
+hjemmekamp
+hjemmekampen
+hjemmekampene
+hjemmekampens
+hjemmekamper
+hjemmekino
+hjemmekinoen
+hjemmekinoens
+hjemmekjær
+hjemmel
+hjemmelaget
+hjemmelagets
+hjemmelen
+hjemmelens
+hjemmels
+hjemmelsmann
+hjemmelsmannen
+hjemmelsmannens
+hjemmelsmenn
+hjemmelsmennene
+hjemmelsmennenes
+hjemmelsmenns
+hjemmemarked
+hjemmemarkeda
+hjemmemarkedene
+hjemmemarkeder
+hjemmemarkedet
+hjemmemarkedets
+hjemmene
+hjemmesittere
+hjemmesitteren
+hjemmesitterens
+hjemmet
+hjemmets
+hjemmeværende
+hjemom
+hjemover
+hjemreise
+hjemreisen
+hjemreisens
+hjemsøke
+hjemsøket
+hjemsøkt
+hjemstavn
+hjemstavnen
+hjemstavnens
+hjemsted
+hjemstedene
+hjemsteder
+hjemstedet
+hjemstedets
+hjemtur
+hjemturen
+hjemturens
+hjemvei
+hjemveien
+hjemveiens
+hjerne
+hjernen
+hjernens
+hjerte
+hjerteinfarkt
+hjerteinfarktet
+hjerteinfarktets
+hjerteinfeksjon
+hjerteinfeksjonen
+hjerteinfeksjonene
+hjerteinfeksjonens
+hjerteinfeksjoner
+hjertelag
+hjertelaget
+hjertelagets
+hjertelig
+hjerteligst
+hjerteligste
+hjertene
+hjertens
+hjerter
+hjerteslag
+hjertesukk
+hjertesukka
+hjertesukkene
+hjertesukket
+hjertesukkets
+hjertet
+hjertevarme
+hjord
+hjorden
+hjordene
+hjordens
+hjorder
+hjort
+hjorten
+hjortene
+hjortens
+hjorter
+hjørne
+hjørnene
+hjørner
+hjørnet
+hjul
+hjula
+hjulbeint
+hjulene
+hjulet
+hjulets
+hjulkrone
+hjuloppheng
+hjulpet
+hjulpne
+hjuring
+hjuringen
+hjuringene
+hjuringens
+hjuringer
+høker
+høkere
+høkeren
+høkerens
+håkjerring
+håkjerringa
+håkjerringen
+håkjerringene
+håkjerringens
+håkjerringer
+hål
+hæl
+høl
+hælen
+hølen
+hælene
+hølene
+hælens
+hølens
+hæler
+høler
+hølja
+hølje
+høljer
+høljet
+hålka
+hølka
+hålke
+hølke
+hålken
+hålkene
+hølkene
+hålkens
+hålker
+hølker
+hålogalandsk
+hålogalending
+hålogalendingen
+hålogalendingens
+håløyg
+håløygen
+håløygene
+håløygens
+håløyger
+håløygsk
+hån
+håna
+høna
+hånd
+hånda
+håndbak
+håndbaken
+håndbakene
+håndbakens
+håndball
+håndballbane
+håndballbanen
+håndballbanene
+håndballbanens
+håndballbaner
+håndballen
+håndballene
+håndballens
+håndballer
+håndballkrets
+håndballkretsen
+håndballkretsene
+håndballkretsens
+håndballkretser
+håndbøkene
+håndbøker
+håndbok
+håndboka
+håndbokas
+håndboken
+håndbokens
+hånden
+håndens
+håndfestning
+håndfestningen
+håndfestningens
+håndfull
+håndgemeng
+håndgemenget
+håndgemengets
+håndgripelig
+håndgripelige
+håndheve
+håndheves
+håndhevet
+håndhilse
+håndhilser
+håndhilst
+håndhilste
+håndkle
+håndklær
+håndkraft
+håndkrafta
+håndkraften
+håndkraftens
+håndlag
+håndlaga
+håndlagene
+håndlaget
+håndlagets
+håndlanger
+håndlangere
+håndlangeren
+håndlangerens
+håndlangeres
+håndlangerne
+håndlangernes
+håndplukkede
+håndplukket
+håndplukketer
+håndspak
+håndspaken
+håndspakene
+håndspakens
+håndspaker
+håndsrekning
+håndsrekninga
+håndsrekningen
+håndsrekningene
+håndsrekningens
+håndsrekninger
+håndtere
+håndteres
+håndtering
+håndteringa
+håndteringen
+håndteringens
+håndvending
+håndvendinga
+håndvendingen
+håndvendingens
+håndverk
+håndverka
+håndverkene
+håndverker
+håndverkere
+håndverkeren
+håndverkerens
+håndverkeres
+håndverkerne
+håndverkernes
+håndverket
+håndverkets
+håndverksbedrift
+håndverksbedriften
+håndverksbedriftene
+håndverksbedriftens
+håndverksbedrifter
+håndverkslov
+håndverksloven
+håndverkslovens
+håndveska
+håndveske
+håndvesken
+håndveskene
+håndveskens
+håndvesker
+håndvåpen
+håndvåpenet
+håndvåpenets
+håndvåpnene
+håndvåpnenes
+høne
+hånen
+hønen
+hønene
+hånens
+hønens
+håner
+høner
+hånet
+hånlig
+høns
+hønsa
+hønsehauk
+hønsehauken
+hønsehaukens
+hønsehus
+hønsehusa
+hønsehusene
+hønsehuset
+hønsehusets
+hønsene
+hånsk
+ho
+hobby
+hobbyen
+hobbyene
+hobbyens
+hobbyer
+hobbyrom
+hobbyromma
+hobbyrommene
+hobbyrommet
+hobbyrommets
+hockey
+hockeyen
+hockeyens
+hode
+hodebry
+hodebryet
+hodebryets
+hodekulls
+hodene
+hodepine
+hodepinen
+hodepinene
+hodepinens
+hodeplagg
+hodeplagga
+hodeplaggene
+hodeplagget
+hodeplaggets
+hoder
+hoderegning
+hoderegninga
+hodesmykke
+hodesmykket
+hodesmykkets
+hodestup
+hodestupes
+hodet
+hoer
+hoff
+hoffa
+hoffene
+hoffer
+hoffet
+hoffets
+hoft
+hofta
+hofte
+hofter
+hofteskål
+hofteskåla
+hofteskåler
+hogd
+hogde
+hogg
+hogge
+hogger
+hoggere
+hoggeren
+hoggerens
+hoggeres
+hoggerne
+hoggernes
+hoggestabbe
+hoggestabben
+hoggestabbens
+hogget
+hogging
+hogginga
+hoggingen
+hoggingens
+hoggorm
+hoggormen
+hoggormene
+hoggormens
+hoggormer
+hogst
+hogsten
+hogstens
+hoi
+hoie
+hokk
+hokka
+hokkene
+hokket
+hokkets
+hokuspokus
+hokuspokuset
+hokuspokusets
+hol
+hola
+hold
+holdbar
+holdbare
+holde
+holden
+holdent
+holdeplass
+holdeplassen
+holdeplassene
+holdeplassens
+holdeplasser
+holdepunkt
+holdepunktene
+holdepunkter
+holdepunktet
+holdepunktets
+holder
+holdere
+holderen
+holderens
+holdes
+holdet
+holdne
+holdning
+holdningen
+holdningens
+holdninger
+holdt
+hole
+holet
+holete
+holk
+holka
+holken
+holkene
+holkens
+holker
+holket
+holkort
+hollandsk
+hollandske
+hollender
+hollendere
+hollenderen
+hollenderens
+hollenderes
+hollenderne
+hollendernes
+holme
+holmen
+holmens
+holmium
+holmiumet
+holmiumets
+hologram
+hologramma
+hologrammene
+hologrammer
+hologrammet
+hologrammets
+holrom
+holrommene
+holrommet
+holrommets
+holt
+holta
+holtene
+holter
+holtet
+holtets
+homofil
+homofili
+homofilien
+homofiliens
+homogen
+homogene
+homogent
+homonym
+homonyma
+homonymene
+homonymer
+homonymet
+homonymets
+homoseksualitet
+homoseksualiteten
+homoseksualitetens
+homoseksuell
+homoseksuelle
+honduraner
+honduranere
+honduraneren
+honduranerens
+honduraneres
+honduranerne
+honduranernes
+honduransk
+honnett
+honning
+honningen
+honningens
+honnør
+honnørbillett
+honnørbilletten
+honnørbillettene
+honnørbillettens
+honnørbilletter
+honnøren
+honnørene
+honnørens
+honnører
+honorar
+honorara
+honorarene
+honorarer
+honoraret
+honorarets
+honoratiores
+honorere
+honorerer
+honorert
+honorerte
+honorær
+hook
+hooken
+hookens
+hop
+hopa
+hopen
+hopene
+hopens
+hoper
+hopet
+hopetal
+hopetall
+hopp
+hoppe
+hopper
+hoppet
+hoppetau
+hoppetaua
+hoppetauene
+hoppetauet
+hoppetauets
+hopprenn
+hopprenna
+hopprennene
+hopprennet
+hopprennets
+hor
+horde
+horden
+hordens
+hore
+horg
+horga
+horgen
+horgene
+horgens
+horger
+horisont
+horisontal
+horisontale
+horisontalt
+horisonten
+horisontene
+horisontens
+horisonter
+hork
+horka
+horken
+horkene
+horkens
+horker
+hormon
+hormona
+hormonene
+hormoner
+hormonet
+hormonets
+horn
+horna
+hornene
+hornet
+hornete
+hornets
+horngjel
+horngjela
+horngjelen
+horngjelens
+hornmusikk
+hornmusikken
+hornmusikkens
+horoskop
+horoskopa
+horoskopene
+horoskoper
+horoskopet
+horoskopets
+horribel
+hors
+hortensia
+hortensiaen
+hortensiaene
+hortensiaens
+hortensiaer
+hos
+hose
+hoselest
+hoselesten
+hoselestens
+hosianna
+hosiannaene
+hosiannaer
+hosiannaet
+hosiannaets
+hospital
+hospitala
+hospitalene
+hospitaler
+hospitalet
+hospitalets
+hospitere
+hospiterer
+hospitert
+hospiterte
+host
+hosta
+hosten
+hostene
+hostens
+hoster
+hostet
+hostets
+hostie
+hostien
+hostiene
+hostiens
+hostier
+hot
+hote
+hotell
+hotella
+hotellbetjent
+hotellbetjenten
+hotellbetjentens
+hotelleier
+hotelleiere
+hotelleieren
+hotelleierens
+hotelleieres
+hotelleierne
+hotelleiernes
+hotellene
+hoteller
+hotellet
+hotellets
+hotellrom
+hotellromma
+hotellrommene
+hotellrommet
+hotellrommets
+hoter
+hottentott
+hottentotten
+hottentottene
+hottentottens
+hottentotter
+hov
+hova
+hoved
+hovedaksjonær
+hovedaksjonæren
+hovedaksjonærene
+hovedaksjonærens
+hovedaksjonærer
+hovedansvar
+hovedansvaret
+hovedansvarets
+hovedargument
+hovedargumenta
+hovedargumentene
+hovedargumenter
+hovedargumentet
+hovedargumentets
+hovedavtale
+hovedavtalen
+hovedavtalene
+hovedavtalens
+hovedavtaler
+hovedbase
+hovedbasen
+hovedbasene
+hovedbasens
+hovedbaser
+hovedbygg
+hovedbygga
+hovedbyggene
+hovedbygget
+hovedbyggets
+hoveddel
+hoveddelen
+hoveddelene
+hoveddelens
+hoveddeler
+hovedene
+hovedentreprenør
+hovedentreprenøren
+hovedentreprenørene
+hovedentreprenørens
+hovedentreprenører
+hoveder
+hovedfag
+hovedfaga
+hovedfagene
+hovedfaget
+hovedfagets
+hovedfeil
+hovedfeilen
+hovedfeilene
+hovedfeilens
+hovedform
+hovedforma
+hovedformen
+hovedformene
+hovedformens
+hovedformer
+hovedforsamling
+hovedforsamlinga
+hovedforsamlingen
+hovedforsamlingene
+hovedforsamlingens
+hovedforsamlinger
+hovedfunksjon
+hovedfunksjonen
+hovedfunksjonene
+hovedfunksjonens
+hovedfunksjoner
+hovedgruppa
+hovedgruppe
+hovedgruppen
+hovedgruppene
+hovedgruppens
+hovedgrupper
+hovedhensikt
+hovedhensikten
+hovedhensiktene
+hovedhensiktens
+hovedhensikter
+hovedidé
+hovedideen
+hovedideene
+hovedideenes
+hovedideens
+hovedideer
+hovedkarakter
+hovedkarakteren
+hovedkarakterens
+hovedkategori
+hovedkategorien
+hovedkategoriene
+hovedkategoriens
+hovedkategorier
+hovedkilde
+hovedkilden
+hovedkildene
+hovedkildens
+hovedkilder
+hovedkirka
+hovedkirkas
+hovedkirke
+hovedkirken
+hovedkirkene
+hovedkirkenes
+hovedkirkens
+hovedkirker
+hovedkirkes
+hovedkontor
+hovedkontorene
+hovedkontorenes
+hovedkontorer
+hovedkontoret
+hovedkontorets
+hovedkrav
+hovedkravene
+hovedkravet
+hovedkravets
+hovedleksikon
+hovedleksikonet
+hovedleksikonets
+hovedlinja
+hovedlinje
+hovedlinjen
+hovedlinjene
+hovedlinjens
+hovedlinjer
+hovedmål
+hovedmåla
+hovedmålene
+hovedmålet
+hovedmålets
+hovednæring
+hovednæringa
+hovednæringen
+hovednæringene
+hovednæringens
+hovednæringer
+hovedoppgava
+hovedoppgave
+hovedoppgaven
+hovedoppgavene
+hovedoppgavens
+hovedoppgaver
+hovedpart
+hovedparten
+hovedpartene
+hovedpartens
+hovedparter
+hovedperson
+hovedpersonen
+hovedpersonene
+hovedpersonens
+hovedpersoner
+hovedprinsipp
+hovedprinsippa
+hovedprinsippene
+hovedprinsipper
+hovedprinsippet
+hovedproblem
+hovedproblema
+hovedproblemene
+hovedproblemer
+hovedproblemet
+hovedproblemets
+hovedproduktene
+hovedpunkt
+hovedpunkta
+hovedpunktene
+hovedpunkter
+hovedpunktet
+hovedpunktets
+hovedregel
+hovedregelen
+hovedregelens
+hovedreglene
+hovedregler
+hovedrengjøring
+hovedrengjøringen
+hovedrengjøringens
+hovedrolle
+hovedrollen
+hovedrollene
+hovedrollens
+hovedroller
+hovedårsak
+hovedårsaka
+hovedårsaken
+hovedårsakene
+hovedårsakens
+hovedårsaker
+hovedsak
+hovedsaka
+hovedsakelig
+hovedsaken
+hovedsakene
+hovedsakens
+hovedsaker
+hovedsaks
+hovedsammenslutning
+hovedsammenslutningen
+hovedsammenslutningene
+hovedsammenslutningens
+hovedsammenslutninger
+hovedsektorer
+hovedsentral
+hovedsentralen
+hovedsentralene
+hovedsentralens
+hovedsentraler
+hovedserie
+hovedserien
+hovedserier
+hovedsete
+hovedsetene
+hovedseter
+hovedsetet
+hovedsetning
+hovedsetninga
+hovedsetningen
+hovedsetningene
+hovedsetninger
+hovedspørsmål
+hovedspørsmåla
+hovedspørsmålene
+hovedspørsmålet
+hovedspørsmålets
+hovedstad
+hovedstaden
+hovedstadens
+hovedsted
+hovedstedene
+hovedsteder
+hovedstedet
+hovedstedets
+hovedstyra
+hovedstyre
+hovedstyrene
+hovedstyrer
+hovedstyret
+hovedstyrets
+hovedtale
+hovedtalen
+hovedtalene
+hovedtalens
+hovedtaler
+hovedtalere
+hovedtaleren
+hovedtalerens
+hovedtaleres
+hovedtalerne
+hovedtalernes
+hovedtema
+hovedtemaer
+hovedtrapp
+hovedtrappa
+hovedtrappen
+hovedtrappene
+hovedtrappens
+hovedtrapper
+hovedtrekk
+hovedtrekka
+hovedtrekkene
+hovedtrekket
+hovedtyngda
+hovedtyngde
+hovedtyngden
+hovedtyngdene
+hovedtyngdens
+hovedtyngder
+hovedvei
+hovedveien
+hovedveiene
+hovedveiens
+hovedveier
+hovedvekt
+hovedvekten
+hovedvektens
+hovedverk
+hovedverka
+hovedverkene
+hovedverket
+hovedverkets
+hoven
+hovene
+hover
+hovere
+hoverer
+hoveri
+hoveriet
+hoveriets
+hovert
+hoverte
+hovet
+hovets
+hovmod
+hovmodet
+hovmodets
+hovmodig
+hovna
+hovne
+hovner
+hovnet
+håp
+håpe
+håpefull
+håpefulle
+håper
+håpet
+håpets
+håplaus
+håplause
+håplaust
+håpløs
+håpløse
+håpløst
+hr
+hår
+hær
+hør
+hørbart
+hårdhjertet
+hårdnakket
+håre
+høre
+hæren
+hørende
+hærene
+hærens
+hærer
+hører
+høres
+håret
+hårete
+hårfagre
+hærfører
+hærførere
+hærføreren
+hærførerens
+hærføreres
+hærførerne
+hærførernes
+hørlig
+hårreisende
+hårsbredd
+hørsel
+hørselen
+hørselens
+hørselsvern
+hørselsvernet
+hørselsvernets
+hærskare
+hærskaren
+hærskarer
+hørsla
+hørslene
+hørsler
+hørt
+hørte
+hørtes
+hårtørker
+hårtørkere
+hårtørkeren
+hårtørkerens
+hårtørkeres
+hårtørkerne
+hårtørkernes
+hårvalk
+hærverk
+hærverket
+hærverkets
+hås
+høst
+høstbær
+høstbærene
+høstbæret
+høstbærets
+høstdag
+høstdagen
+høstdagene
+høstdagens
+høstdager
+høste
+høsten
+høstens
+høster
+høstet
+høstmørke
+høstmørket
+høstmørkets
+hått
+hu
+hubro
+hubroen
+hubroene
+hubroens
+hubroer
+hud
+huda
+huden
+hudene
+hudens
+huder
+hudfarge
+hudfargen
+hudfargens
+hudflenge
+hudflengt
+hudfletta
+hudflette
+hudfletter
+hudflettet
+hue
+huer
+huff
+huffa
+huffene
+huffet
+huffets
+hufs
+hufse
+hufset
+hug
+huga
+hugd
+hugde
+hugdrag
+hugdraget
+hugdragets
+huge
+hugen
+hugenott
+hugenotten
+hugenottene
+hugenottens
+hugenotter
+hugg
+hugge
+hugger
+huggere
+huggeren
+huggerens
+huggeres
+huggerne
+huggernes
+huggestabbe
+huggestabben
+huggestabbens
+hugget
+huggorm
+huggormen
+huggormene
+huggormens
+huggormer
+huglag
+huglaget
+huglagets
+huglegge
+huglynne
+huglynnet
+hugnad
+hugnaden
+hugnadens
+hugnadsam
+hugs
+hugsen
+hugskott
+hugskotta
+hugskottene
+hugskottet
+hugskottets
+hugsne
+hugst
+hugsten
+hugstene
+hugstens
+hugster
+hugta
+hui
+huie
+huk
+huke
+hukommelse
+hukommelsen
+hukommelsens
+hukra
+hukre
+hukrer
+hukret
+hul
+hula
+huld
+hulder
+huldra
+huldrene
+huldrer
+hulen
+hulens
+hulk
+hulka
+hulken
+hulkende
+hulkens
+hulker
+hulket
+hull
+hulla
+hullene
+huller
+hullet
+hullete
+hullets
+hullkort
+hullkortet
+hullkortets
+hullsleiv
+hullsleiva
+hullsøm
+hullsømmen
+hullsømmens
+hulmål
+hulrom
+hulrommene
+hulrommet
+hulrommets
+hult
+hulter
+human
+humane
+humanetikk
+humanetikken
+humanetikkens
+humanetisk
+humanisme
+humanismen
+humanismens
+humanist
+humanisten
+humanistene
+humanistens
+humanister
+humanistiske
+humanitet
+humaniteten
+humanitetens
+humanitære
+humanitært
+humant
+humbug
+humbugen
+humbugens
+humla
+humle
+humlen
+humlene
+humlens
+humler
+humlet
+hummer
+hummeren
+hummerens
+humor
+humoren
+humorens
+humoreske
+humoresken
+humoreskens
+humorist
+humoristen
+humoristene
+humoristens
+humorister
+humoristisk
+hump
+humpe
+humpen
+humpens
+humpet
+humpete
+humør
+humra
+humre
+humøret
+humørets
+humørfylt
+humørsjuk
+humus
+humusen
+humusens
+hun
+hund
+hundeglam
+hundeglammene
+hunden
+hundene
+hundens
+hunder
+hunderase
+hunderasen
+hunderasene
+hunderasens
+hunderaser
+hundevalp
+hundevalpen
+hundevalpene
+hundevalpens
+hundevalper
+hundre
+hundrede
+hundredel
+hundredelen
+hundredelens
+hundredeler
+hundrekroning
+hundrekroningen
+hundrekroningens
+hundrer
+hundreår
+hundreåra
+hundrere
+hundreren
+hundreårene
+hundrerens
+hundreres
+hundreåret
+hundreårets
+hundrerne
+hundrernes
+hundret
+hundretal
+hundretall
+hundretusen
+hundretusener
+hundrevis
+hundsa
+hundse
+hundser
+hundset
+hundsk
+hundsvott
+hunen
+hunene
+hunens
+huner
+hunere
+huneren
+hunerens
+huneres
+hunerne
+hunernes
+hunger
+hungeren
+hungerens
+hungersnød
+hungersnøda
+hungersnøden
+hungersnødens
+hungra
+hungre
+hungrig
+hunkjønn
+hunkjønnet
+hunkjønnets
+hunkjønnsord
+hunkjønnsorda
+hunkjønnsordene
+hunkjønnsordet
+hunkjønnsordets
+hunn
+hunndyr
+hunndyra
+hunndyrene
+hunndyret
+hunndyrets
+hunnen
+hunnene
+hunnens
+hunner
+hunnkjønn
+hunnkjønnene
+hunnkjønnet
+hunnkjønnets
+hurlumhei
+hurlumheien
+hurlumheiens
+hurpe
+hurpet
+hurpete
+hurra
+hurraene
+hurraer
+hurraet
+hurraets
+hurtig
+hurtigarbeidende
+hurtige
+hurtigere
+hurtiggående
+hurtighet
+hurtigheten
+hurtighetens
+hurtigrute
+hurtigruten
+hurtigrutene
+hurtigrutens
+hurtigst
+hurtigste
+hurv
+hurven
+hurvene
+hurvens
+hurver
+hus
+husa
+husarrest
+husarresten
+husarrestens
+husbank
+husbanken
+husbankens
+husbond
+husbonden
+husbondene
+husbondens
+husbonder
+husdyr
+husdyra
+husdyrene
+husdyret
+husdyrets
+huse
+huseier
+huseiere
+huseieren
+huseierens
+huseieres
+huseierne
+huseiernes
+husene
+huser
+husere
+huset
+husets
+husflid
+husfliden
+husflidens
+husfolk
+husfolkene
+husfolket
+husfolkets
+hushjelp
+hushjelpa
+hushjelpen
+hushjelpene
+hushjelpens
+hushjelper
+husholderska
+husholderske
+husholdersken
+husholderskene
+husholderskens
+husholdersker
+husholdning
+husholdningen
+husholdningene
+husholdningens
+husholdninger
+husk
+huske
+husken
+huskens
+husker
+huskes
+husket
+husky
+huskyen
+huskyene
+huskyens
+huskyer
+husleia
+husleie
+husleien
+husleiene
+husleiens
+husleier
+husløse
+husmannsplass
+husmannsplassen
+husmannsplassene
+husmannsplassens
+husmannsplasser
+husmødre
+husmødrene
+husmoderlig
+husmor
+husmora
+husmoren
+husmorens
+husmorferie
+husmorferien
+husmorferiens
+husmorskole
+husmorskolen
+husmorskolene
+husmorskolens
+husmorskoler
+husstand
+husstanden
+husstandene
+husstandens
+husstander
+husstell
+husstellet
+husstellets
+hustra
+hustre
+hustren
+hustrene
+hustrer
+hustret
+hustrig
+hustru
+hustrua
+hustruen
+hustruene
+hustruens
+hustruer
+husvale
+husvaler
+husvalt
+husvalte
+husvegg
+husveggen
+husveggene
+husveggens
+husvegger
+husvær
+husvære
+husværet
+huta
+hute
+huter
+hutet
+hutla
+hutle
+hutler
+hutlet
+hutra
+hutre
+hutrer
+hutret
+huttetu
+huva
+huve
+huven
+huvene
+huvens
+huver
+håv
+hva
+hval
+hvalen
+hvalene
+hvalens
+hvaler
+hvalfangst
+hvalfangsten
+hvalfangstens
+hvalkjøtt
+hvalkjøttet
+hvalkjøttets
+hvalross
+hvalrossen
+hvalrossene
+hvalrossens
+hvalrosser
+hvass
+hvast
+høvding
+høvdingen
+høvdingene
+høvdingens
+høvdinger
+håve
+høve
+høvedsmann
+høvedsmannen
+høvedsmannens
+høvedsmenn
+høvedsmennene
+høvedsmennenes
+høvedsmenns
+høvel
+høvelbenk
+høvelbenken
+høvelbenkens
+høvelen
+høvelens
+høvelig
+høvelige
+hvelv
+hvelve
+hvelvet
+hvelving
+hvelvinga
+hvelvingen
+hvelvingene
+hvelvingens
+hvelvinger
+hvem
+hver
+høver
+hverandre
+hverandres
+hverdag
+hverdagen
+hverdagens
+hverdager
+hverdags
+hverdagslig
+hvert
+hvese
+hveset
+hvesse
+hvesst
+hvesste
+høvet
+hvete
+hvetebolle
+hvetebollen
+hvetebollens
+hvetebrød
+hveten
+hvetens
+hvil
+hvile
+hvilehjem
+hvilehjemma
+hvilehjemmene
+hvilehjemmet
+hvilehjemmets
+hvilen
+hvilende
+hvilens
+hvilepause
+hvilepausen
+hvilepausene
+hvilepausens
+hvilepauser
+hvileperiode
+hvileperioden
+hvileperiodene
+hvileperiodens
+hvileperioder
+hviler
+hvilke
+hvilken
+hvilket
+hvilt
+hvilte
+hvin
+hvine
+hvinet
+hvint
+hvinte
+hvis
+høvisk
+hviske
+hvisket
+hvit
+hvite
+hviten
+hvitens
+hvitmetall
+hvitmetallet
+hvitmetallets
+hvitne
+hvitsymra
+hvitsymre
+hvitsymrene
+hvitsymrer
+hvitt
+hvitte
+hvitting
+hvittingen
+hvittingene
+hvittingens
+hvittinger
+hvitveis
+hvitveisen
+hvitveisene
+hvitveisens
+hvitveiser
+hvitvin
+hvitvinen
+hvitvinene
+hvitvinens
+hvitviner
+høvle
+høvlemaskin
+høvlemaskinen
+høvlemaskinene
+høvlemaskinens
+høvlemaskiner
+høvler
+hvor
+hvorav
+hvordan
+hvoretter
+hvorfor
+hvorfra
+hvorhen
+hvori
+hvorledes
+hvorpå
+hvorved
+hvorvidt
+høvre
+høvret
+høy
+høyaktuelle
+hyasint
+hyasinten
+hyasintene
+hyasintens
+hyasinter
+hybel
+hybelen
+hybelens
+hyblene
+hybler
+hybrid
+hybriden
+hybridene
+hybridens
+hybrider
+høyde
+høyden
+høydene
+høydens
+høydepunkt
+høydepunkta
+høydepunktene
+høydepunkter
+høydepunktet
+høydepunktets
+høyder
+hydraulisk
+hydrauliske
+hydro
+hydrofoilbåt
+hydrofoilbåten
+hydrofoilbåtene
+hydrofoilbåtens
+hydrofoilbåter
+hydrogen
+hydrogenet
+hydrogenets
+hydrokarbon
+hydrokarbona
+hydrokarbonene
+hydrokarboner
+hydrokarbonet
+hydrokarbonets
+hydrologi
+hydrologien
+hydrologiens
+hydrologisk
+hydrolyse
+hydrolysen
+hydrolysens
+hydroplan
+hydroplana
+hydroplanene
+hydroplaner
+hydroplanet
+hydroplanets
+høye
+hyene
+hyenen
+hyenens
+høyere
+høyereliggende
+høyest
+høyeste
+høyesterett
+høyesterettsadvokat
+høyesterettsadvokaten
+høyesterettsadvokatene
+høyesterettsadvokatens
+høyesterettsadvokater
+høyesterettsjustitiarius
+høyet
+høyfjell
+høyfjellet
+høyfjellets
+høyfjellshotell
+høyfjellshotellene
+høyfjellshoteller
+høyfjellshotellet
+høyfjellshotellets
+høyfrekvens
+høyfrekvensen
+høyfrekvensens
+hyfse
+hyfser
+hyfst
+hyfste
+hygge
+hyggelig
+hyggelige
+hyggeligst
+hyggeligste
+hyggen
+hygiene
+hygienen
+hygienens
+hygienisk
+hygieniske
+høyglanspolert
+høying
+høyinga
+hykkelsk
+hykla
+hykle
+hykler
+hyklere
+hykleren
+hyklerens
+hykleres
+hykleri
+hykleriet
+hykleriets
+hyklerne
+hyklernes
+hyklersk
+hyklerska
+hyklersken
+hyklerskene
+hyklerskens
+hyklersker
+hyklet
+hykling
+hyklinga
+hyklingen
+hyklingens
+hyl
+høyland
+høylandet
+høylandets
+hyle
+hylet
+hyll
+hylla
+hylle
+hyllen
+hyllens
+hyller
+hyllest
+hyllesten
+hyllestens
+hyllet
+hylletre
+hylling
+hyllinga
+hyllingen
+hyllingene
+hyllingens
+hyllinger
+hyllingsdikt
+hyllingsdikta
+hyllingsdiktene
+hyllingsdiktet
+hyllingsdiktets
+hylsa
+hylse
+hylsen
+hylsene
+hylsens
+hylser
+hylster
+hylsteret
+hylsterets
+hylstra
+hylstre
+hylstrene
+hylstret
+hylstrets
+høylytt
+høymælt
+hymne
+hymnen
+hymnens
+høymo
+høymoet
+høymole
+høyna
+høyne
+høyner
+høynet
+høyonn
+høyonna
+høyonnen
+høyonnene
+høyonnens
+høyonner
+hyperblene
+hyperbler
+hypnose
+hypnosen
+hypnosens
+hypnotisere
+hypnotiserer
+hypnotisert
+hypnotiserte
+hypnotisk
+hypokonder
+hypokondere
+hypokonderen
+hypokonderens
+hypokonderes
+hypokonderne
+hypokondernes
+hypokondri
+hypokondrien
+hypokondriens
+hypokondrisk
+hypotek
+hypoteka
+hypotekene
+hypoteker
+hypoteket
+hypotekets
+hypotenus
+hypotenusen
+hypotenusene
+hypotenusens
+hypotenuser
+hypotese
+hypotesen
+hypotesene
+hypotesens
+hypoteser
+hypotetisk
+hypp
+hyppe
+hyppig
+hyppige
+hyppighet
+hyppigheten
+hyppighetens
+hyppigst
+hyrde
+hyrden
+hyrdens
+hyrding
+hyrdingen
+hyrdingene
+hyrdingens
+hyrdinger
+hyre
+høyre
+høyreist
+høyreiste
+høyremarg
+høyremargen
+høyremargens
+hyren
+hyrens
+høyrepressa
+høyrepresse
+høyrepressen
+høyrepressens
+høyresida
+høyreside
+høyresiden
+høyresidene
+høyresidens
+høyresider
+hysa
+hyse
+hysen
+hysene
+hysens
+hyser
+høysesong
+høysesongen
+høysesongens
+høysete
+høysetet
+hysj
+hysje
+høyskole
+høyskolen
+høyskolene
+høyskolens
+høyskoler
+høysletta
+høyslette
+høysletten
+høyslettens
+høyspent
+hyss
+hysse
+hyssing
+hyssingen
+hyssingene
+hyssingens
+hyssinger
+høyst
+høystbydende
+høysåte
+høysåten
+høysåtene
+høysåtens
+høysåter
+hysteri
+hysteriet
+hysteriets
+hysterisk
+høysvans
+høysvansen
+høysvansens
+høyt
+høytid
+høytida
+høytidelig
+høytidelige
+høytidelighet
+høytideligheten
+høytidelighetene
+høytidelighetens
+høytideligheter
+høytrykk
+høytrykket
+høytrykkets
+høytstående
+hytt
+hytta
+høyætta
+høyttaler
+høyttalere
+høyttaleren
+høyttalerens
+høyttaleres
+høyttalerne
+høyttalernes
+hytte
+hytten
+hyttene
+hyttens
+hytter
+høyættet
+høyttravende
+høyvann
+høyvanne
+høyverdig
+i
+iaktta
+iakttakelse
+iakttakelsen
+iakttakelsens
+iakttaker
+iakttakere
+iakttakeren
+iakttakerens
+iakttakeres
+iakttakerne
+iakttakernes
+iakttatt
+iakttok
+iallfall
+ibenholt
+ibenholten
+ibenholtens
+ibenholtet
+ibenholtets
+iberegna
+iberegne
+iberegnet
+iberekna
+iberekne
+ibereknet
+ibis
+iblant
+icing
+icingen
+icingens
+id
+idé
+ida
+idéassosiasjon
+idéassosiasjonen
+idéassosiasjonene
+idéassosiasjonenes
+idéassosiasjonens
+idéassosiasjoner
+idéassosiasjoners
+idéassosiasjons
+idébank
+idébanken
+idébankens
+idébasert
+idébaserte
+idédugnad
+idédugnaden
+idédugnadens
+ide
+ideal
+ideala
+idealene
+idealer
+idealet
+idealets
+idealiser
+idealisere
+idealiserer
+idealisering
+idealiseringa
+idealiseringen
+idealiseringens
+idealisert
+idealisme
+idealismen
+idealismens
+idealist
+idealisten
+idealistene
+idealistens
+idealister
+idealistisk
+idealistiske
+idealtid
+idealtida
+idealtiden
+idealtidens
+ideell
+ideelle
+ideelt
+ideen
+ideene
+ideenes
+ideens
+ideer
+ideers
+idelig
+ideligen
+identifikasjon
+identifikasjonen
+identifikasjonene
+identifikasjonens
+identifikasjoner
+identifisere
+identifiserer
+identifisering
+identifiseringa
+identifiseringen
+identifiseringens
+identifisert
+identifiserte
+identisk
+identiske
+identitet
+identiteten
+identitetene
+identitetens
+identiteter
+ideolog
+ideologen
+ideologene
+ideologens
+ideologer
+ideologi
+ideologien
+ideologiene
+ideologiens
+ideologier
+ideologisk
+ideologiske
+idet
+idégenerering
+idégenereringen
+idégenereringens
+idégrunnlag
+idégrunnlaget
+idégrunnlagets
+idéhistorie
+idéhistorien
+idéhistoriens
+idéhistoriker
+idéhistorikere
+idéhistorikeren
+idéhistorikerens
+idéhistorikeres
+idéhistorikerne
+idéhistorikernes
+idig
+idéinstitusjon
+idéinstitusjonen
+idéinstitusjonene
+idéinstitusjonenes
+idéinstitusjonens
+idéinstitusjoner
+idéinstitusjoners
+idéinstitusjons
+idiom
+idioma
+idiomatisk
+idiomene
+idiomer
+idiomet
+idiosynkrasi
+idiosynkrasien
+idiosynkrasiene
+idiosynkrasiens
+idiosynkrasier
+idiot
+idioten
+idiotene
+idiotens
+idioter
+idiotisk
+idékilde
+idékilden
+idékildene
+idékildens
+idékilder
+idékonkurranse
+idékonkurransen
+idékonkurransene
+idékonkurransens
+idékonkurranser
+idémessig
+idémessige
+idømme
+idømmer
+idømt
+idrett
+idretten
+idrettens
+idretts
+idrettsanlegg
+idrettsanlegga
+idrettsanleggene
+idrettsanlegget
+idrettsanleggets
+idrettsbane
+idrettsbanen
+idrettsbanene
+idrettsbanens
+idrettsbaner
+idrettsforbund
+idrettsforbundet
+idrettsforbundets
+idrettsforbunds
+idrettsgrein
+idrettsgreina
+idrettsgreinene
+idrettsgreiner
+idrettshall
+idrettshallen
+idrettshallene
+idrettshallens
+idrettshaller
+idrettshøgskole
+idrettshøgskolen
+idrettshøgskolene
+idrettshøgskolens
+idrettshøgskoler
+idrettshøyskole
+idrettshøyskolen
+idrettshøyskolene
+idrettshøyskolens
+idrettshøyskoler
+idrettskonkurranse
+idrettskonkurransen
+idrettskonkurransene
+idrettskonkurransens
+idrettskonkurranser
+idrettskonsulent
+idrettskonsulenten
+idrettskonsulentene
+idrettskonsulentens
+idrettskonsulenter
+idrettskontor
+idrettskontorene
+idrettskontorer
+idrettskontoret
+idrettskontorets
+idrettskrets
+idrettskretsen
+idrettskretsene
+idrettskretsens
+idrettskretser
+idrettslag
+idrettslaga
+idrettslagene
+idrettslaget
+idrettslagets
+idrettsleder
+idrettsledere
+idrettslederen
+idrettslederens
+idrettslederes
+idrettslederne
+idrettsledernes
+idrettslig
+idrettsmann
+idrettsmannen
+idrettsmannens
+idrettsmenn
+idrettsmennene
+idrettsmennenes
+idrettsmenns
+idrettsplass
+idrettsplassen
+idrettsplassene
+idrettsplassens
+idrettsplasser
+idérik
+idérike
+idérikt
+idéskissa
+idéskisse
+idéskissen
+idéskissens
+idéutveksling
+idéutvekslingen
+idéutvekslingens
+idéverden
+idéverdenen
+idéverdenens
+idyll
+idyllen
+idyllene
+idyllens
+idyller
+idyllisk
+idylliske
+ifall
+ifallet
+ifallets
+ifølge
+ifra
+iføre
+ifører
+iført
+iførte
+igangsatt
+igangsettelse
+igangsettelsen
+igangsettelsens
+igangsettes
+igangsetting
+igangsettinga
+igangsettingen
+igangsettingens
+igangværende
+igjen
+igjennom
+igla
+igle
+iglen
+iglene
+iglens
+igler
+iglet
+iglo
+igloen
+igloene
+igloens
+igloer
+ignorant
+ignoranten
+ignorantene
+ignorantens
+ignoranter
+ignorer
+ignorere
+ignorerer
+ignoreres
+ignorert
+ignorerte
+ihendehaver
+ihendehaveren
+ihendehaverens
+ihendehaverobligasjon
+ihendehaverobligasjonen
+ihendehaverobligasjonene
+ihendehaverobligasjonens
+ihendehaverobligasjoner
+iherdig
+iherdige
+ihuga
+ihukomme
+ihukommer
+ikke
+ikkeangrepspakt
+ikkeangrepspakta
+ikkeangrepspakten
+ikkeangrepspaktens
+ikkevold
+ikkevolden
+ikkevoldens
+ikon
+ikona
+ikonene
+ikoner
+ikonet
+ikonets
+ikorn
+ikorna
+ikornen
+ikornene
+ikornens
+ikorner
+ikornet
+ikornets
+ikring
+ikte
+ikten
+iktene
+iktens
+ikter
+il
+ila
+ilagt
+ilandføring
+ilandføringa
+ilandføringen
+ilandføringens
+ilbrev
+ilbreva
+ilbrevene
+ilbrevet
+ilbrevets
+ild
+ilddåp
+ilddåpen
+ilddåpens
+ilde
+ildebrann
+ildebrannen
+ildebrannene
+ildebrannens
+ildebranner
+ilden
+ilder
+ildet
+ildrer
+ildsfarlig
+ildsjel
+ildsjelen
+ildsjelene
+ildsjelens
+ildsjeler
+ildsted
+ildstedene
+ildsteder
+ildstedet
+ildstedets
+ile
+ilegg
+ilegge
+ilegget
+ilgods
+ilgodset
+ilgodsets
+iligna
+iligne
+iligner
+ilignet
+ilikna
+ilikne
+ilikner
+iliknet
+iling
+ilingen
+ilingene
+ilingens
+ilinger
+ilja
+ilje
+iljene
+iljer
+ilk
+ilken
+ilkene
+ilkens
+ilker
+ilket
+ille
+illebefinnende
+illebefinnendet
+illegal
+illegale
+illegalt
+illegitim
+illegitimt
+illgjerning
+illgjerninga
+illgjerningen
+illgjerningene
+illgjerningens
+illgjerninger
+illgjerningsmann
+illgjerningsmannen
+illgjerningsmannens
+illgjerningsmenn
+illgjerningsmennene
+illgjerningsmennenes
+illgjerningsmenns
+illojal
+illojale
+illojalitet
+illojaliteten
+illojalitetens
+illojalt
+illsinna
+illskrike
+illskriker
+illudere
+illuderer
+illudert
+illuderte
+illuminasjon
+illuminasjonen
+illuminasjonene
+illuminasjonens
+illuminasjoner
+illusjon
+illusjonen
+illusjonene
+illusjonens
+illusjoner
+illusorisk
+illustrasjon
+illustrasjonen
+illustrasjonene
+illustrasjonens
+illustrasjoner
+illustre
+illustrere
+illustrerende
+illustrerer
+illustreres
+ilsk
+ilska
+ilsken
+ilskene
+ilsker
+ilsket
+ilskne
+ilt
+ilte
+ilter
+iltre
+imaginær
+imbesill
+imbesillitet
+imbesilliteten
+imbesillitetens
+imellom
+imens
+imidlertid
+imitasjon
+imitasjonen
+imitasjonene
+imitasjonens
+imitasjoner
+imitator
+imitatoren
+imitatorene
+imitatorens
+imitatorer
+imitere
+imiterer
+imitert
+imiterte
+immanent
+immatrikulere
+immatrikulerer
+immatrikulering
+immatrikuleringa
+immatrikuleringen
+immatrikuleringene
+immatrikuleringens
+immatrikuleringer
+immigrant
+immigranten
+immigrantene
+immigrantens
+immigranter
+immigrasjon
+immigrasjonen
+immigrasjonene
+immigrasjonens
+immigrasjoner
+immun
+immunitet
+immuniteten
+immunitetens
+imot
+impedans
+impedansen
+impedansens
+imperativ
+imperativa
+imperativen
+imperativene
+imperativens
+imperativer
+imperativet
+imperativets
+imperia
+imperialisme
+imperialismen
+imperialismens
+imperialist
+imperialisten
+imperialistene
+imperialistens
+imperialister
+imperialistisk
+imperialistiske
+imperiene
+imperier
+imperiet
+imperiets
+imperium
+impertinent
+implementere
+implementerer
+implementert
+implementerte
+implikasjon
+implikasjonen
+implikasjonene
+implikasjonens
+implikasjoner
+impliser
+implisere
+impliserer
+implisert
+impliserte
+implisitt
+imponere
+imponerende
+imponerer
+imponert
+imponerte
+import
+importen
+importene
+importens
+importer
+importere
+importert
+importerte
+importpris
+importprisen
+importprisene
+importprisens
+importpriser
+importør
+importøren
+importørene
+importørens
+importører
+importvare
+importvaren
+importvarene
+importvarens
+importvarer
+impotent
+impregnere
+impregnerer
+impregnering
+impregneringa
+impregneringen
+impregneringens
+impregnert
+impregnerte
+impresario
+impresarioen
+impresarioene
+impresarioens
+impresarioer
+impresjonist
+impresjonisten
+impresjonistene
+impresjonistens
+impresjonister
+impresjonistisk
+improvisasjon
+improvisasjonen
+improvisasjonene
+improvisasjonens
+improvisasjoner
+improvisere
+improviserer
+improvisert
+improviserte
+impulsiv
+impulskjøp
+impulskjøpa
+impulskjøpene
+impulskjøpet
+impulskjøpets
+imøtegå
+imøtegått
+imøtekom
+imøtekomme
+imøtekommende
+imøtekommenhet
+imøtekommenheten
+imøtekommenhetens
+imøtekommet
+imøtesett
+inaktiv
+inaktive
+inaktivt
+incitament
+incitamenta
+incitamentene
+incitamenter
+incitamentet
+incitamentets
+incitere
+inciterende
+ind
+indeks
+indekse
+indeksen
+indeksene
+indeksens
+indekser
+indeksfamilie
+indeksfamilien
+indeksfamiliens
+indeksoppgjør
+indeksoppgjøret
+indeksoppgjørets
+indeksopplysning
+indeksopplysningen
+indeksopplysningene
+indeksopplysningens
+indeksopplysninger
+inder
+inderen
+inderens
+inderlig
+inderlige
+inderlighet
+inderligheten
+inderlighetens
+indianer
+indianere
+indianeren
+indianerens
+indianeres
+indianerne
+indianernes
+indiansk
+indignasjon
+indignasjonen
+indignasjonene
+indignasjonens
+indignasjoner
+indignert
+indikativ
+indikativen
+indikativene
+indikativens
+indikativer
+indikator
+indikatoren
+indikatorene
+indikatorens
+indikatorer
+indiker
+indikere
+indikerer
+indikert
+indirekte
+indisia
+indisiene
+indisier
+indisiet
+indisiets
+indisium
+indisk
+indiske
+indium
+individ
+individa
+individene
+individer
+individet
+individets
+individualisere
+individualiserer
+individualisert
+individualiserte
+individualist
+individualisten
+individualistene
+individualistens
+individualister
+individualitet
+individualiteten
+individualitetens
+individuell
+individuelle
+individuelt
+indoktrinere
+indoktrinerer
+indoktrinert
+indoktrinerte
+indolent
+indonesier
+indonesiere
+indonesieren
+indonesierens
+indonesieres
+indonesierne
+indonesiernes
+indonesisk
+indre
+indremedisin
+indremedisinen
+indremedisinens
+indremisjon
+indremisjonen
+indremisjonene
+indremisjonens
+indremisjoner
+indrepolitiske
+induksjon
+induksjonen
+induksjonene
+induksjonens
+induksjoner
+induksjonsmotor
+induksjonsmotoren
+induksjonsmotorens
+induktans
+induktansen
+induktansens
+induktiv
+indusere
+induserer
+indusert
+induserte
+industri
+industrialisere
+industrialiserer
+industrialisering
+industrialiseringa
+industrialiseringen
+industrialiseringens
+industrialisert
+industrialiserte
+industrianlegg
+industrianlegga
+industrianleggene
+industrianlegget
+industrianleggets
+industriarbeidere
+industriarbeideren
+industriarbeiderens
+industribedrift
+industribedriften
+industribedriftene
+industribedriftens
+industribedrifter
+industribygg
+industribygga
+industribyggene
+industribygget
+industribyggets
+industridepartement
+industridepartementet
+industridepartementets
+industriell
+industrielle
+industrielt
+industrien
+industriens
+industrier
+industriforbund
+industriforbundene
+industriforbundet
+industriforbundets
+industrigrein
+industrigreina
+industrigreinene
+industrigreiner
+industriland
+industrilanda
+industrilandene
+industrilandet
+industrilandets
+industriminister
+industriministere
+industriministeren
+industriministerens
+industriministeres
+industriministerne
+industriministernes
+industris
+ineffektiv
+ineffektive
+ineffektivitet
+ineffektiviteten
+ineffektivitetens
+ineffektivt
+infam
+infanteri
+infanteria
+infanteriene
+infanterier
+infanteriet
+infanteriets
+infanterist
+infanteristen
+infanteristene
+infanteristens
+infanterister
+infarkt
+infarkta
+infarktene
+infarktet
+infarktets
+infeksjon
+infeksjonen
+infeksjonene
+infeksjonens
+infeksjoner
+infernalsk
+inferno
+infernoet
+infernoets
+infiltrasjon
+infiltrasjonen
+infiltrasjonene
+infiltrasjonens
+infiltrasjoner
+infiltrere
+infiltrert
+infiltrerte
+infinitiv
+infinitiven
+infinitivene
+infinitivens
+infinitiver
+infinitivsform
+infinitivsforma
+infinitivsformen
+infinitivsformene
+infinitivsformens
+infinitivsformer
+infinitivsmerke
+infinitivsmerket
+infisere
+infiserer
+infisert
+infiserte
+inflammasjon
+inflammasjonen
+inflammasjonene
+inflammasjonens
+inflammasjoner
+inflasjon
+inflasjonen
+inflasjonene
+inflasjonens
+inflasjoner
+inflatorisk
+inflatoriske
+influensa
+influensaen
+influensaene
+influensaens
+influensaer
+influere
+influerer
+influert
+influerte
+info
+informant
+informanten
+informantene
+informantens
+informanter
+informasjon
+informasjonen
+informasjonens
+informasjoner
+informasjons
+informasjonssidé
+informasjonssideen
+informasjonssideene
+informasjonssideens
+informasjonssideer
+informasjonstjeneste
+informasjonstjenesten
+informasjonstjenestens
+informativ
+informative
+informer
+informere
+informert
+informerte
+infrarød
+infusjonsdyr
+ing
+inga
+ingefær
+ingefæren
+ingefærens
+ingen
+ingeniør
+ingeniøren
+ingeniørene
+ingeniørens
+ingeniører
+ingenlunde
+ingens
+ingensteds
+ingenting
+ingrediens
+ingrediensen
+ingrediensene
+ingrediensens
+ingredienser
+inhabil
+inhabile
+inhabilitet
+inhabiliteten
+inhabilitetens
+inhalere
+inhalerer
+inhalering
+inhaleringa
+inhaleringen
+inhaleringens
+inhalert
+inhalerte
+initial
+initialen
+initialene
+initialens
+initialer
+initiativ
+initiativa
+initiativene
+initiativer
+initiativet
+initiativets
+initiativtaker
+initiativtakere
+initiativtakeren
+initiativtakerens
+initiativtakeres
+initiativtakerne
+initiativtakernes
+injeksjon
+injeksjonen
+injeksjonene
+injeksjonens
+injeksjoner
+injuriant
+injurianten
+injuriantene
+injuriantens
+injurianter
+injurie
+injurien
+injuriens
+injuriere
+injurierer
+injuriert
+injurierte
+inkarnere
+inkarnerer
+inkarnert
+inkarnerte
+inkassasjon
+inkassasjonen
+inkassasjonene
+inkassasjonens
+inkassasjoner
+inkassator
+inkassatoren
+inkassatorene
+inkassatorens
+inkassatorer
+inkasso
+inkassoen
+inkassoene
+inkassoens
+inkassoer
+inkl
+inklinasjon
+inklinasjonen
+inklinasjonene
+inklinasjonens
+inklinasjoner
+inkluder
+inkludere
+inkluderer
+inkludert
+inklusiv
+inklusive
+inkognito
+inkognitoa
+inkognitoene
+inkognitoer
+inkognitoet
+inkognitoets
+inkonsekvent
+inkonsekvente
+inkorporere
+inkorporerer
+inkorporert
+inkorporerte
+inkubasjon
+inkubasjonen
+inkubasjonene
+inkubasjonens
+inkubasjoner
+inkubasjonstid
+inkubasjonstida
+inkubasjonstiden
+inkubasjonstidens
+inkurie
+inkurien
+inkuriens
+inkvisisjon
+inkvisisjonen
+inkvisisjonene
+inkvisisjonens
+inkvisisjoner
+inkvisitorisk
+inn
+innabords
+innad
+innadvendt
+innafor
+innalands
+innalandske
+innarbeida
+innarbeide
+innarbeider
+innarbeides
+innarbeidet
+innarbeidets
+innaskjærs
+innbarka
+innbarket
+innbød
+innbefatte
+innbefatter
+innbefattet
+innberegnet
+innberetning
+innberetningen
+innberetningene
+innberetningens
+innberetninger
+innbetal
+innbetale
+innbetalende
+innbetaler
+innbetales
+innbetaling
+innbetalinga
+innbetalingen
+innbetalingene
+innbetalinger
+innbetalt
+innbetalte
+innbill
+innbille
+innbiller
+innbilning
+innbilningen
+innbilningene
+innbilningens
+innbilninger
+innbilsk
+innbitt
+innbitte
+innblande
+innblandet
+innblanding
+innblandinga
+innblandingene
+innblikk
+innbo
+innboa
+innboene
+innboer
+innboet
+innboets
+innbrakt
+innbrakte
+innbringe
+innbringende
+innbringer
+innbrott
+innbrottet
+innbrottets
+innbrottstjuveri
+innbrottstjuveriene
+innbrottstjuverier
+innbrottstjuveriet
+innbrottstjuveriets
+innbrudd
+innbrudda
+innbruddene
+innbruddet
+innbruddets
+innbruddstyveri
+innbruddstyveriene
+innbruddstyverier
+innbruddstyveriet
+innbruddstyveriets
+innbu
+innbua
+innbudt
+innbudte
+innbuene
+innbuer
+innbuet
+innby
+innbydd
+innbydde
+innbydelse
+innbydelsen
+innbydelsene
+innbydelsens
+innbyderne
+innbyding
+innbydinga
+innbydingen
+innbydingene
+innbydingens
+innbydinger
+innbygger
+innbyggere
+innbyggeren
+innbyggerens
+innbyggeres
+innbyggerne
+innbyggernes
+innbyr
+innbyrdes
+innbys
+innbytte
+innbytter
+inndata
+inndataene
+inndele
+inndeler
+inndeles
+inndeling
+inndelinga
+inndelingen
+inndelt
+inndelte
+inndraging
+inndraginga
+inndragning
+inndragningen
+inndragningens
+inndraing
+inndratt
+inndratte
+inne
+innebar
+innebaren
+innebarens
+innebære
+innebærer
+innebygd
+innebygde
+innebygget
+innefra
+innehar
+innehatt
+innehaver
+innehavere
+innehaveren
+innehaverens
+innehaveres
+innehaverne
+innehavernes
+inneholde
+inneholdende
+inneholder
+inneholdt
+innelukke
+innelukket
+innelukt
+innen
+innenat
+innenbords
+innendørs
+innenfor
+innenfra
+innenlands
+innenlandske
+innenriks
+innenriksminister
+innenriksministeren
+innenriksministerens
+innenriksministrene
+innenrikspolitikk
+innenrikspolitikken
+innenrikspolitikkens
+innenrikspolitiske
+innenskjærs
+innerlomma
+innerlomme
+innerlommen
+innerlommene
+innerlommens
+innerlommer
+innersida
+innerside
+innersiden
+innersidens
+innerst
+innerste
+innersving
+innersvingen
+innersvingene
+innersvingens
+innersvinger
+innesperra
+innesperret
+innestå
+innett
+innetter
+inneværende
+innfall
+innfalla
+innfallen
+innfallene
+innfallet
+innfallets
+innfant
+innfødd
+innfødt
+innfinne
+innfinner
+innfløkt
+innfløkte
+innflytelse
+innflytelsen
+innflytelsens
+innflytelsesrik
+innflytelsesrike
+innflytning
+innflytningen
+innflytningens
+innflytter
+innflyttere
+innflytteren
+innflytterens
+innflytteres
+innflytterne
+innflytternes
+innflytting
+innflyttinga
+innflyttingen
+innflyttingene
+innflyttingens
+innflyttinger
+innfør
+innføre
+innfører
+innføres
+innfri
+innfridd
+innfridde
+innfrielse
+innfrielsen
+innfrielsene
+innfrielsens
+innfrielser
+innfriing
+innfriinga
+innfriingen
+innføring
+innføringa
+innføringen
+innføringskurs
+innføringskursene
+innføringskurser
+innføringskurset
+innføringskursets
+innfris
+innførsel
+innførselen
+innførselens
+innførslene
+innførsler
+innført
+innførte
+innful
+innfult
+innfunnet
+inngå
+inngang
+inngangen
+inngangene
+inngangens
+innganger
+inngangs
+inngangsdør
+inngangsdøren
+inngangsdørene
+inngangsdørens
+inngangsdører
+inngangsparti
+inngangspartiet
+inngangspartiets
+inngående
+inngifte
+inngikk
+inngjerding
+inngjerdinga
+inngjerdingen
+inngjerdingene
+inngjerdingens
+inngjerdinger
+inngår
+inngrep
+inngrepa
+inngrepene
+inngrepet
+inngrepets
+inngripende
+inngås
+inngått
+inngåtte
+inngyte
+innhent
+innhenta
+innhente
+innhenter
+innhentes
+innhentet
+innherad
+innhogg
+innhogga
+innhoggene
+innhogget
+innhol
+innhold
+innholda
+innholdet
+innholdets
+innholdsfortegnelse
+innholdsfortegnelsen
+innholdsfortegnelsene
+innholdsfortegnelsens
+innholdsfortegnelser
+innholdsrike
+innholdsrikt
+innhole
+innholt
+inniblant
+innimellom
+innkalle
+innkallelsen
+innkallelsens
+innkaller
+innkalles
+innkalling
+innkallinga
+innkalt
+innkalte
+innkassere
+innkasserer
+innkast
+innkasta
+innkastene
+innkastet
+innkastets
+innkjøp
+innkjøpet
+innkjøpt
+innkomne
+innkomst
+innkomsten
+innkomstene
+innkomstens
+innkomster
+innkvartere
+innkvarterer
+innkvartering
+innkvarteringa
+innkvarteringen
+innkvarteringene
+innkvarteringens
+innkvarteringer
+innkvartert
+innkvarterte
+innlagt
+innlagte
+innland
+innlandet
+innlate
+innlater
+innlede
+innledende
+innleder
+innledere
+innlederen
+innlederens
+innlederes
+innlederne
+innledernes
+innledes
+innledet
+innledning
+innledningen
+innledningene
+innledningens
+innledninger
+innledningsvis
+innlegg
+innleggene
+innlegges
+innlegget
+innleggets
+innlegging
+innleid
+innleide
+innleie
+innleier
+innleiere
+innleierne
+innleiing
+innleiinga
+innleiingen
+innleiingene
+innleiingens
+innleiinger
+innlemme
+innlemmet
+innlevelse
+innlevelsen
+innlevelsens
+innlevering
+innleveringa
+innleveringen
+innleveringene
+innleveringens
+innleveringer
+innlevert
+innleverte
+innlæring
+innlæringa
+innlæringen
+innlæringens
+innløse
+innløser
+innløst
+innløste
+innlysende
+innmari
+innmark
+innmarka
+innmarken
+innmarkens
+innmating
+innmatinga
+innmatingen
+innmatingene
+innmatingens
+innmatinger
+innmelding
+innmeldinga
+innmeldingene
+innmeldinger
+innmeldt
+innmeldte
+innmontert
+innmonterte
+innom
+innordna
+innordne
+innordnede
+innordner
+innordnes
+innordnet
+innordning
+innordninga
+innordningen
+innordningene
+innordningens
+innordninger
+innovasjon
+innovasjonen
+innovasjonene
+innovasjonens
+innovasjoner
+innover
+innpå
+innpakket
+innpass
+innpasse
+innpasser
+innpasses
+innpasset
+innplasseres
+innpåsliten
+innrede
+innreder
+innredes
+innredet
+innredning
+innredningen
+innredningene
+innredningens
+innredninger
+innretning
+innretningen
+innretningene
+innretningens
+innretninger
+innretta
+innrette
+innretter
+innrettes
+innrettet
+innretting
+innrettinga
+innrettingen
+innrettingens
+innrømme
+innrømmelse
+innrømmelsen
+innrømmelsene
+innrømmelsens
+innrømmelser
+innrømmer
+innrømmes
+innrømmet
+innrykk
+innrykke
+innrykker
+innså
+innsamlede
+innsamlet
+innsamlete
+innsamling
+innsamlinga
+innsamlingen
+innsamlingene
+innsamlingens
+innsamlinger
+innsats
+innsatsen
+innsatsene
+innsatsens
+innsatsvilje
+innsatsviljen
+innsatsviljens
+innsatt
+innsatte
+innse
+innseiling
+innseilinga
+innseilingen
+innseilingene
+innseilingens
+innseilinger
+innsende
+innsender
+innsendere
+innsenderen
+innsenderens
+innsenderes
+innsenderne
+innsendernes
+innsendt
+innsendte
+innser
+innses
+innsett
+innsette
+innsetter
+innsettes
+innsetting
+innsettinga
+innsettingen
+innsettingens
+innsida
+innsiden
+innsigelse
+innsigelsen
+innsigelsene
+innsigelsens
+innsigelser
+innsikt
+innsikta
+innsikte
+innsikten
+innsiktens
+innsikter
+innsiktsfull
+innsjø
+innsjøen
+innsjøene
+innsjøens
+innsjøer
+innskjerpe
+innskjerpende
+innskjerpes
+innskjerpet
+innsøkk
+innsøkket
+innsøkkets
+innskott
+innskotta
+innskottene
+innskottet
+innskottets
+innskrenke
+innskrenker
+innskrenket
+innskrenking
+innskrenkinga
+innskrenkinger
+innskrenkning
+innskrenkningen
+innskrenkningene
+innskrenkningens
+innskrenkninger
+innskrift
+innskrifta
+innskriften
+innskriftene
+innskriftens
+innskrifter
+innskudd
+innskuddene
+innskuddet
+innskutt
+innskytelse
+innskytelsen
+innskytelsens
+innskyter
+innskytere
+innskyteren
+innskyterens
+innskyteres
+innskyterne
+innskyternes
+innslag
+innslaga
+innslagene
+innslaget
+innslagets
+innsnevring
+innsnevringen
+innsnevringene
+innsnevringens
+innsnevringer
+innsnitt
+innsnitta
+innsnittene
+innsnittet
+innsparing
+innsparinga
+innsparingen
+innsparingene
+innsparingens
+innsparinger
+innspart
+innsparte
+innspilling
+innspillinga
+innspillingen
+innspillingene
+innspillingens
+innspillinger
+innspilt
+innspilte
+innspurt
+innspurten
+innspurtens
+innstendig
+innstifte
+innstiftelsen
+innstiftelsens
+innstifter
+innstiftet
+innstill
+innstille
+innstiller
+innstilles
+innstillet
+innstilling
+innstillinga
+innstillingen
+innstillingene
+innstillingenes
+innstillinger
+innstilt
+innstilte
+innstramning
+innstramningen
+innstramningene
+innstramningens
+innstramninger
+innstuder
+innstudere
+innstuderende
+innstuderer
+innstuderes
+innstudert
+innstuderte
+innta
+inntagende
+inntak
+inntaka
+inntakene
+inntaker
+inntaket
+inntar
+inntas
+inntatt
+inntegnet
+inntekt
+inntekta
+inntekten
+inntektene
+inntektens
+inntekter
+inntektsgrunnlag
+inntektsgrunnlaget
+inntektsgrunnlagets
+inntektskilde
+inntektskilden
+inntektskildene
+inntektskildens
+inntektskilder
+inntektsøkning
+inntektsøkningen
+inntektsøkningens
+inntektsoppgjør
+inntektsoppgjørene
+inntektsoppgjøret
+inntektsoppgjørets
+inntektsprofil
+inntektsprofilen
+inntektsprofilens
+inntektsskatt
+inntektsskatten
+inntektsskattens
+inntil
+inntjeningsevne
+inntjeningsevnen
+inntjeningsevnens
+inntjent
+inntog
+inntoga
+inntogene
+inntoget
+inntogets
+inntok
+inntraff
+inntrådte
+inntre
+inntreden
+inntreffe
+inntreffende
+inntreffer
+inntrengende
+inntrengerne
+inntrer
+inntrått
+inntrykk
+inntrykka
+inntrykkene
+inntrykket
+inntrykkets
+innunder
+innvalgt
+innvandra
+innvandre
+innvandrer
+innvandrere
+innvandreren
+innvandrerens
+innvandreres
+innvandrerne
+innvandrernes
+innvandret
+innvandring
+innvandringa
+innvandringen
+innvandringer
+innvarsle
+innvarsler
+innvarslet
+innved
+innvende
+innvender
+innvendes
+innvendig
+innvendige
+innvending
+innvendinga
+innvendingen
+innvendingene
+innvendingens
+innvendinger
+innvendt
+innvendte
+innvia
+innvie
+innvielsen
+innvielsens
+innvier
+innvies
+innviet
+innviing
+innviinga
+innviingen
+innviingene
+innviingens
+innviinger
+innvikla
+innvikle
+innviklet
+innvilge
+innvilges
+innvilget
+innvirka
+innvirke
+innvirkende
+innvirker
+innvirket
+innvirkning
+innvirkningen
+innvirkningene
+innvirkningens
+innvirkninger
+innvåner
+innvånere
+innvåneren
+innvånerens
+innvåneres
+innvånerne
+innvånernes
+innvoll
+innvollen
+innvollene
+innvollens
+innvoller
+innvortes
+innynda
+innynde
+innynder
+innyndet
+insekt
+insekta
+insekter
+insektet
+insektets
+insektgift
+insekticid
+insekticida
+insekticidene
+insekticider
+insekticidet
+insekticidets
+insekts
+inseminasjon
+inseminasjonen
+inseminasjonene
+inseminasjonens
+inseminasjoner
+inseminere
+inseminerer
+inseminert
+inseminerte
+inserat
+inserata
+inseratene
+inserater
+inseratet
+inseratets
+insig
+insiget
+insigets
+insignier
+insinuasjon
+insinuasjonen
+insinuasjonene
+insinuasjonens
+insinuasjoner
+insinuere
+insinuerer
+insinuert
+insinuerte
+insistere
+insisterer
+insistert
+insisterte
+inskripsjon
+inskripsjonen
+inskripsjonene
+inskripsjonens
+inskripsjoner
+inspeksjon
+inspeksjonen
+inspeksjonene
+inspeksjonens
+inspeksjoner
+inspektør
+inspektøren
+inspektørene
+inspektørens
+inspektører
+inspektrisa
+inspektrise
+inspektrisen
+inspektrisene
+inspektrisens
+inspektriser
+inspirasjon
+inspirasjonen
+inspirasjonene
+inspirasjonens
+inspirasjoner
+inspirere
+inspirerende
+inspirerer
+inspirert
+inspirerte
+inspisere
+inspiserer
+inspisert
+inspiserte
+inspisient
+inspisienten
+inspisientene
+inspisientens
+inspisienter
+inst
+installasjon
+installasjonen
+installasjonene
+installasjonens
+installasjoner
+installere
+installeres
+installert
+instans
+instansen
+instansene
+instansens
+instanser
+instinkt
+instinkta
+instinktene
+instinkter
+instinktet
+instinktets
+instinktiv
+instituere
+instituerer
+instituert
+instituerte
+institusjon
+institusjonen
+institusjonene
+institusjonens
+institusjoner
+institutt
+instituttene
+institutter
+instituttet
+instituttets
+institutts
+instruere
+instruerer
+instruert
+instruks
+instruksen
+instruksene
+instruksens
+instrukser
+instruksjon
+instruksjonen
+instruksjonene
+instruksjonens
+instruksjoner
+instruksjonsmappa
+instruksjonsmappe
+instruksjonsmappen
+instruksjonsmappene
+instruksjonsmappens
+instruksjonsmapper
+instruktiv
+instruktør
+instruktøren
+instruktørene
+instruktørens
+instruktører
+instrument
+instrumenta
+instrumentene
+instrumenter
+instrumentet
+instrumentets
+insulin
+insulinet
+insulinets
+int
+intakt
+integral
+integrala
+integralene
+integraler
+integralet
+integralets
+integrasjon
+integrasjonen
+integrasjonene
+integrasjonens
+integrasjoner
+integrere
+integrerende
+integrerer
+integreres
+integrering
+integreringa
+integreringen
+integreringens
+integrert
+integrerte
+integritet
+integriteten
+integritetens
+intellekt
+intellekta
+intellektene
+intellekter
+intellektet
+intellektets
+intellektuell
+intellektuelle
+intellektuelles
+intellektuelt
+intelligens
+intelligensen
+intelligensens
+intelligensindustri
+intelligenskvotient
+intelligenskvotienten
+intelligenskvotientens
+intelligent
+intelligente
+intendant
+intendanten
+intendantene
+intendantens
+intendanter
+intendantur
+intendanturen
+intendanturene
+intendanturens
+intendanturer
+intens
+intense
+intensitet
+intensiteten
+intensitetens
+intensiv
+intensiver
+intensivere
+intensiveres
+intensivert
+intensjon
+intensjonen
+intensjonene
+intensjonens
+intensjoner
+intenst
+inter
+interdikt
+interdiktet
+interdiktets
+interessant
+interessante
+interesse
+interessefelt
+interessefeltet
+interessefeltets
+interessegruppa
+interessegruppe
+interessegruppen
+interessegruppene
+interessegruppens
+interessegrupper
+interessekamp
+interessekampen
+interessekampene
+interessekampens
+interessekamper
+interessen
+interessene
+interessens
+interessent
+interessenten
+interessentene
+interessentens
+interessenter
+interesseområde
+interesseområdene
+interesseområder
+interesseområdet
+interesseområdets
+interesser
+interessere
+interesserer
+interessert
+interesserte
+interferens
+interferensen
+interferensene
+interferensens
+interferenser
+interiør
+interiøra
+interiørarkitekt
+interiørarkitekten
+interiørarkitektene
+interiørarkitektens
+interiørarkitekter
+interiørene
+interiører
+interiøret
+interiørets
+interjeksjon
+interjeksjonen
+interjeksjonene
+interjeksjonens
+interjeksjoner
+interkommunale
+interkommunalt
+interkontinental
+interkontinentale
+intermesso
+intermessoa
+intermessoene
+intermessoer
+intermessoet
+intermessoets
+intern
+internasjonal
+internasjonale
+internasjonalt
+internat
+internata
+internatene
+internater
+internatet
+internatets
+interne
+internere
+internerer
+internering
+interneringa
+interneringen
+interneringens
+internert
+internerte
+internt
+interpellasjon
+interpellasjonen
+interpellasjonene
+interpellasjonens
+interpellasjoner
+interpellere
+interpellerer
+interpellert
+interpellerte
+interplanetarisk
+interrail
+interregnum
+interregnumet
+interregnumets
+intervall
+intervalla
+intervallene
+intervaller
+intervallet
+intervallets
+intervenere
+intervenerer
+intervenert
+intervenerte
+intervensjon
+intervensjonen
+intervensjonene
+intervensjonens
+intervensjoner
+intervju
+intervjue
+intervjuer
+intervjuere
+intervjueren
+intervjuerens
+intervjueres
+intervjuerne
+intervjuernes
+intervjuet
+intet
+intetanende
+intetkjønn
+intetkjønnet
+intetkjønnets
+intetkjønnsendinga
+intetkjønnsord
+intetkjønnsorda
+intetkjønnsordene
+intetkjønnsordet
+intetkjønnsordets
+intim
+intime
+intimer
+intimitet
+intimiteten
+intimitetens
+intimt
+intoleransen
+intoleransens
+intonasjon
+intonasjonen
+intonasjonene
+intonasjonens
+intonasjoner
+intransitiv
+intransitivt
+intrigant
+intriganten
+intrigantene
+intrigantens
+intriganter
+intrige
+intrigen
+intrigene
+intrigens
+intriger
+intrigere
+intrikat
+introduksjon
+introduksjonen
+introduksjonene
+introduksjonens
+introduksjoner
+introduser
+introdusere
+introduserer
+introduseres
+introdusert
+introduserte
+intuisjon
+intuisjonen
+intuisjonene
+intuisjonens
+intuisjoner
+intuitiv
+invader
+invadere
+invaderer
+invalid
+invaliden
+invalidens
+invalidepensjon
+invalidepensjonen
+invalidepensjonene
+invalidepensjonens
+invalidepensjoner
+invalidisere
+invalidiserer
+invalidisert
+invalidiserte
+invaliditet
+invaliditeten
+invaliditetens
+invasjon
+invasjonen
+invasjonene
+invasjonens
+invasjoner
+inventar
+inventara
+inventarene
+inventarer
+inventaret
+inventarets
+investere
+investering
+investeringa
+investeringen
+investeringene
+investeringens
+investeringer
+investert
+investerte
+investor
+investoren
+investorene
+investorens
+investorer
+invitasjon
+invitasjonen
+invitasjonene
+invitasjonens
+invitasjoner
+inviter
+invitere
+inviterer
+invitert
+inviterte
+invitt
+invitten
+invittene
+invittens
+invitter
+involvere
+involverer
+involvert
+involverte
+ion
+iona
+ionene
+ioner
+ionet
+ionets
+ionosfære
+ionosfæren
+ionosfærens
+iraker
+irakere
+irakeren
+irakerens
+irakeres
+irakerne
+irakernes
+irakisk
+iraksk
+iraner
+iranere
+iraneren
+iranerens
+iraneres
+iranerne
+iranernes
+iransk
+ire
+iørefallende
+iren
+irens
+irettesett
+irettesette
+irettesetter
+iridium
+irish
+irlending
+irlendingen
+irlendingene
+irlendingens
+irlendinger
+ironi
+ironien
+ironiens
+ironisere
+ironiserer
+ironisert
+ironiserte
+ironisk
+irr
+irra
+irrasjonell
+irrasjonelle
+irre
+irrealitet
+irrealiteten
+irrealitetens
+irreell
+irreelle
+irregulær
+irrelevant
+irrelevante
+irreligiøs
+irreligiøsitet
+irreligiøsiteten
+irreligiøsitetens
+irret
+irrete
+irritabel
+irritabelt
+irritable
+irritasjon
+irritasjonen
+irritasjonene
+irritasjonens
+irritasjoner
+irritere
+irriterende
+irritert
+irriterte
+irsk
+irske
+is
+isbre
+iscenesette
+iscenesetter
+ise
+isen
+isende
+isenkram
+isens
+iset
+isete
+isflak
+isflaka
+isflakene
+isflaket
+isflakets
+isfri
+ishavet
+ishockey
+ishockeyen
+ishockeyens
+ishode
+ising
+isinga
+isj
+isjias
+isjiasen
+isjiasens
+iskald
+iskalde
+iskaldt
+iskoss
+iskrem
+iskremen
+iskremene
+iskremens
+iskremer
+islam
+islamittisk
+islamsk
+islandsk
+islandske
+islender
+islendere
+islenderen
+islenderens
+islenderes
+islenderne
+islendernes
+islending
+islendingen
+islendingene
+islendingens
+islendinger
+islendingsaga
+islendingsagaen
+islendingsagaene
+islendingsagaens
+islendingsagaer
+islett
+isletta
+islettet
+islettets
+isløsning
+isløsninga
+isløsningen
+isløsningens
+isløysing
+isløysinga
+isløysingen
+isløysingens
+isna
+isne
+isner
+isnet
+isobar
+isobaren
+isobarene
+isobarens
+isobarer
+isolasjon
+isolasjonen
+isolasjonene
+isolasjonens
+isolasjoner
+isolator
+isolatoren
+isolatorene
+isolatorens
+isolatorer
+isolere
+isolerende
+isoleres
+isolerglass
+isolering
+isoleringa
+isoleringen
+isoleringene
+isoleringens
+isoleringer
+isolert
+isolerte
+isop
+isopen
+isopene
+isopens
+isoper
+isoterm
+isotermen
+isotermens
+isotermiske
+isotermt
+isotop
+isotopen
+isotopene
+isotopens
+isotoper
+ispedd
+især
+israeler
+israelere
+israeleren
+israelerens
+israeleres
+israelerne
+israelernes
+israelitt
+israelitten
+israelittene
+israelittens
+israelitter
+israelittisk
+israelsk
+israelske
+iss
+issa
+issen
+issene
+issens
+isser
+isspill
+isspillet
+isspillets
+issvull
+issvullen
+issvullene
+issvullens
+issvuller
+isteden
+istedenfor
+ister
+isteret
+isterets
+istra
+istrene
+istret
+istrets
+italiener
+italienere
+italieneren
+italienerens
+italieneres
+italienerne
+italienernes
+italiensk
+italienske
+itle
+itlen
+itlene
+itlens
+itler
+itlet
+ivareta
+ivaretas
+ivaretatt
+ivaretok
+iver
+iveren
+iverens
+iverksatt
+iverksette
+iverksetter
+ivorianer
+ivorianere
+ivorianeren
+ivorianerens
+ivorianeres
+ivorianerne
+ivorianernes
+ivoriansk
+ivra
+ivre
+ivrer
+ivret
+ivrig
+ivrige
+ivrigst
+ivrigste
+iøynefallende
+j
+ja
+jabb
+jabbe
+jabbet
+jaet
+jafs
+jafse
+jafsen
+jafsens
+jafset
+jag
+jage
+jager
+jagere
+jageren
+jagerens
+jageres
+jagerfly
+jagerflya
+jagerflyene
+jagerflyet
+jagerflyets
+jagerne
+jagernes
+jages
+jaget
+jaguar
+jaguaren
+jaguarene
+jaguarens
+jaguarer
+jakk
+jakke
+jakken
+jakkens
+jakker
+jakt
+jakta
+jakten
+jaktene
+jaktens
+jakter
+jaktet
+jaktlov
+jaktloven
+jaktlovens
+jam
+jamaicaner
+jamaicanere
+jamaicaneren
+jamaicanerens
+jamaicaneres
+jamaicanerne
+jamaicanernes
+jamaicansk
+jamaldring
+jamaldringen
+jamaldringene
+jamaldringens
+jamaldringer
+jambe
+jamben
+jambens
+jambisk
+jamboree
+jamboreen
+jamboreene
+jamboreens
+jamboreer
+jambyrdig
+jambyrdige
+jamdøger
+jamdøgeret
+jamdøgerets
+jamdøgn
+jamdøgna
+jamdøgnene
+jamdøgnet
+jamdøgnets
+jamdøgra
+jamdøgrene
+jamfør
+jamføre
+jamfører
+jamføring
+jamføringa
+jamføringen
+jamføringens
+jamført
+jamgammal
+jamgammel
+jamgod
+jamlike
+jamliken
+jamlikens
+jamme
+jammen
+jammens
+jammer
+jammeren
+jammerens
+jamn
+jamna
+jamne
+jamnes
+jamnest
+jamneste
+jamnhet
+jamnheten
+jamnhetens
+jamning
+jamninga
+jamnlig
+jamra
+jamre
+jamret
+jams
+jamsides
+jamsterk
+jamstilling
+jamstillinga
+jamstillingen
+jamstillingene
+jamstillingens
+jamstillinger
+jamstilt
+jamstilte
+jamt
+jamte
+jamvekt
+jamvekta
+jamvekten
+jamvektens
+jamvel
+janitsjar
+janitsjaren
+janitsjarene
+janitsjarens
+janitsjarer
+janitsjarorkester
+janitsjarorkesteret
+janitsjarorkesterets
+janitsjarorkestra
+janitsjarorkestre
+janitsjarorkestrene
+janitsjarorkestret
+janitsjarorkestrets
+januar
+japaner
+japanere
+japaneren
+japanerens
+japaneres
+japanerne
+japanernes
+japansk
+japanske
+jar
+jara
+jardiniere
+jardinieren
+jardinierens
+jaren
+jarene
+jarens
+jarer
+jaret
+jark
+jarken
+jarkene
+jarkens
+jarker
+jarl
+jarlen
+jarlene
+jarlens
+jarler
+jaså
+jase
+jasen
+jasene
+jasens
+jaser
+jask
+jaske
+jass
+jassa
+jassen
+jassens
+jasser
+jasset
+jatta
+jatte
+jatten
+jattene
+jattens
+jatter
+jattet
+jazz
+jazza
+jazzen
+jazzens
+jazzer
+jazzet
+jazzkafé
+jazzkafeen
+jazzkafeene
+jazzkafeens
+jazzkafeer
+jøde
+jødeforfølgelse
+jødeforfølgelsen
+jødeforfølgelsene
+jødeforfølgelsens
+jødeforfølgelser
+jødeforfølging
+jødeforfølginga
+jødeforfølgingen
+jødeforfølgingens
+jøden
+jødene
+jødenes
+jøder
+jødinna
+jødinne
+jødinnen
+jødinnene
+jødinnens
+jødinner
+jødisk
+jødiske
+jeans
+jeansen
+jeansene
+jeansens
+jeep
+jeepen
+jeepene
+jeepens
+jeeper
+jeg
+jega
+jegene
+jeger
+jegere
+jegeren
+jegerens
+jegeres
+jegerne
+jegernes
+jeget
+jegets
+jekk
+jekke
+jeksel
+jekselen
+jekselens
+jekslene
+jeksler
+jekt
+jekta
+jektene
+jekter
+jenka
+jenke
+jenker
+jenket
+jenta
+jente
+jentene
+jenter
+jentunge
+jentungen
+jentungens
+jeremiade
+jeremiaden
+jeremiadene
+jeremiadens
+jeremiader
+jern
+jerna
+jernalder
+jernalderen
+jernalderens
+jernarbeider
+jernarbeidere
+jernarbeideren
+jernarbeiderens
+jernarbeideres
+jernarbeiderne
+jernarbeidernes
+jernbane
+jernbanelinja
+jernbanelinje
+jernbanelinjen
+jernbanelinjene
+jernbanelinjens
+jernbanelinjer
+jernbanen
+jernbanene
+jernbanens
+jernbaner
+jernbanestasjon
+jernbanestasjonen
+jernbanestasjonene
+jernbanestasjonens
+jernbanestasjoner
+jernbanevogn
+jernbanevogna
+jernbanevognen
+jernbanevognene
+jernbanevognens
+jernbanevogner
+jernbyrd
+jernbyrden
+jernbyrdens
+jernene
+jernet
+jernets
+jernstykke
+jernstykket
+jernstykkets
+jernteppe
+jernteppet
+jernverk
+jernverka
+jernverkene
+jernverket
+jernverkets
+jerpa
+jerpe
+jerpen
+jerpene
+jerpens
+jerper
+jersey
+jerseyen
+jerseyene
+jerseyens
+jerseyer
+jerv
+jerven
+jervene
+jervens
+jerver
+jesuitt
+jesuitten
+jesuittene
+jesuittens
+jesuitter
+jesuittisk
+jet
+jetalder
+jetalderen
+jetalderens
+jeten
+jetens
+jetfly
+jetflya
+jetflyene
+jetflyet
+jetflyets
+jette
+jetten
+jettens
+jevn
+jevnaldrende
+jevnbyrdig
+jevnbyrdige
+jevndøgn
+jevndøgna
+jevndøgnene
+jevndøgnet
+jevndøgnets
+jevne
+jevnere
+jevnes
+jevnest
+jevneste
+jevnet
+jevnfør
+jevnføre
+jevnføring
+jevnføringa
+jevnføringen
+jevnføringens
+jevngammal
+jevngammel
+jevngod
+jevnhet
+jevning
+jevninga
+jevnlig
+jevnlike
+jevnliken
+jevnlikens
+jevnsides
+jevnsterk
+jevnstilling
+jevnstillinga
+jevnstillingen
+jevnstillingens
+jevnt
+jf
+jfr
+jibb
+jibbe
+jigg
+jiggen
+jiggene
+jiggens
+jigger
+jøkel
+jøkelen
+jøkelens
+jøklene
+jøkler
+jøklet
+jål
+jåle
+jåleri
+jåleria
+jåleriene
+jålerier
+jåleriet
+jåleriets
+jålet
+jålete
+jo
+jobb
+jobbe
+jobben
+jobbene
+jobbens
+jobber
+jobbere
+jobberen
+jobberens
+jobberes
+jobberne
+jobbernes
+jobbet
+jobspost
+jockey
+jockeyen
+jockeyene
+jockeyens
+jockeyer
+jod
+joda
+jodd
+jodden
+joddene
+joddens
+jodder
+joden
+jodens
+jodet
+jodets
+jodla
+jodle
+jodler
+jodlet
+joen
+joene
+joens
+joer
+jogga
+jogge
+jogger
+joggere
+joggeren
+joggerens
+joggeres
+joggerne
+joggernes
+jogget
+jogging
+jogginga
+joggingen
+joggingens
+joik
+joika
+joiken
+joikene
+joikens
+joiker
+joiket
+joker
+jokere
+jokeren
+jokerens
+jokeres
+jokerne
+jokernes
+jol
+jolen
+jolene
+jolens
+joler
+jolla
+jolle
+jollen
+jollene
+jollens
+joller
+jomfru
+jomfrua
+jomfruelig
+jomfruen
+jomfruene
+jomfruens
+jomfruer
+jommen
+joner
+jonere
+joneren
+jonerens
+joneres
+jonerne
+jonernes
+jonsok
+jonsokkveld
+jonsokkvelden
+jonsokkveldene
+jonsokkveldens
+jonsokkvelder
+jord
+jorda
+jordaner
+jordanere
+jordaneren
+jordanerens
+jordaneres
+jordanerne
+jordanernes
+jordansk
+jordanske
+jordbær
+jordbæra
+jordbærene
+jordbæret
+jordbærets
+jordbruk
+jordbruka
+jordbruker
+jordbrukere
+jordbrukeren
+jordbrukerens
+jordbrukeres
+jordbrukerne
+jordbrukernes
+jordbruket
+jordbrukets
+jordbruksland
+jordbrukslandet
+jordbrukslandets
+jordbruksskole
+jordbruksskolen
+jordbruksskolens
+jordbruksvare
+jordbruksvaren
+jordbruksvarene
+jordbruksvarens
+jordbruksvarer
+jorddrott
+jorddrotten
+jorddrottens
+jorde
+jordeferd
+jorden
+jordens
+jorder
+jorderik
+jorderike
+jorderiket
+jordet
+jordete
+jordferd
+jordferda
+jordferden
+jordferdene
+jordferdens
+jordferder
+jordisk
+jordiske
+jordklode
+jordkloden
+jordklodens
+jordlov
+jordloven
+jordlovene
+jordlovens
+jordlover
+jordmødre
+jordmødrene
+jordmor
+jordmora
+jordmoren
+jordmorens
+jordnær
+jordrotta
+jordrotte
+jordrotten
+jordrottene
+jordrottens
+jordrotter
+jordskjelv
+jordskjelva
+jordskjelvene
+jordskjelvet
+jordskjelvets
+jordskorpe
+jordskorpen
+jordskorpens
+jordsmonn
+jordsmonnet
+jordsmonnets
+jordveg
+jordvegen
+jordvegens
+jotne
+jotnen
+jotnene
+jotnens
+jotner
+jotun
+jotunen
+jotunens
+joule
+joulen
+joulens
+jour
+journal
+journalen
+journalene
+journalens
+journaler
+journalføre
+journalfører
+journalført
+journalførte
+journalist
+journalisten
+journalistene
+journalistens
+journalister
+journalistikk
+journalistikken
+journalistikkens
+journalistisk
+jovial
+jr
+jærbu
+jærbuen
+jærbuene
+jærbuens
+jærbuer
+jærtegn
+jærtegna
+jærtegnene
+jærtegnet
+jærtegnets
+jøtul
+jubel
+jubelen
+jubelens
+jubilant
+jubilanten
+jubilantene
+jubilantens
+jubilanter
+jubilea
+jubileene
+jubileer
+jubileet
+jubileets
+jubilere
+jubilerende
+jubileum
+juble
+jublende
+jubler
+jugl
+jugle
+juglet
+jugoslav
+jugoslaven
+jugoslavene
+jugoslavens
+jugoslaver
+jugoslavisk
+jugoslaviske
+juice
+juicen
+juicens
+jukeboks
+jukeboksen
+jukeboksene
+jukeboksens
+jukebokser
+juks
+jukse
+jukset
+jul
+jula
+julaften
+julaftenen
+julaftenene
+julaftenens
+julaftener
+jule
+julebord
+juleborda
+julebordene
+julebordet
+julebordets
+juledag
+juledagen
+juledagene
+juledagens
+juledager
+julegodteri
+julegodteriet
+julegodteriets
+julehelg
+julehelga
+julehelgen
+julehelgene
+julehelgens
+julehelger
+juleidé
+juleideen
+juleideene
+juleideens
+juleideer
+julekveld
+julekvelden
+julekveldene
+julekveldens
+julekvelder
+julen
+julens
+julestri
+julestria
+juletre
+juli
+juling
+julinga
+julingen
+julingens
+jumbo
+jumboen
+jumboene
+jumboens
+jumboer
+jumbojet
+jumbojeten
+jumbojetene
+jumbojetens
+jumbojeter
+jump
+jumpa
+jumpe
+jumper
+jumpere
+jumperen
+jumperens
+jumperes
+jumperne
+jumpernes
+jumpet
+jungel
+jungelen
+jungelens
+junglene
+jungler
+jungmann
+jungmannen
+jungmannens
+jungmenn
+jungmennene
+jungmennenes
+jungmenns
+juni
+junior
+junioren
+juniorene
+juniorens
+juniors
+junker
+junkere
+junkeren
+junkerens
+junkeres
+junkerne
+junkernes
+junta
+juntaen
+juntaene
+juntaens
+juntaer
+jur
+jura
+jurene
+juret
+jurets
+juridikum
+juridisk
+juridiske
+juris
+jurisdiksjon
+jurisdiksjonen
+jurisdiksjonene
+jurisdiksjonens
+jurisdiksjoner
+jurist
+juristen
+juristene
+juristens
+jurister
+juristeri
+juristeriet
+juristeriets
+jury
+juryen
+juryene
+juryens
+juryer
+jus
+jusen
+jusens
+juss
+jussen
+jussens
+just
+justere
+justeres
+justering
+justert
+justis
+justisdepartement
+justisdepartementet
+justisdepartementets
+justisen
+justisens
+justisminister
+justisministeren
+justisministerens
+justisministrene
+justitiarius
+jute
+jutelerret
+juten
+jutens
+jutul
+jutulen
+jutulene
+jutulens
+jutuler
+juv
+juva
+juvel
+juvelbesatt
+juvelen
+juvelens
+juveler
+juveleren
+juvelerens
+juvene
+juvet
+juvets
+jøya
+jyde
+jyden
+jydens
+jøye
+jøyer
+jøyet
+jypling
+jyplingen
+jyplingene
+jyplingens
+jyplinger
+kø
+åk
+øk
+kabal
+kabalen
+kabalene
+kabalens
+kabaler
+kabaret
+kabareten
+kabaretene
+kabaretens
+kabareter
+kabel
+kabelen
+kabelens
+kabin
+kabinen
+kabinene
+kabinens
+kabiner
+kabinett
+kabinetta
+kabinettene
+kabinetter
+kabinettet
+kabinettets
+kablene
+kabler
+kabriolet
+kabrioleten
+kabrioletene
+kabrioletens
+kabrioleter
+kabyss
+kabyssa
+kabysse
+kadaver
+kadaveret
+kadaverets
+kadavra
+kadavre
+kadavrene
+kadett
+kadetten
+kadettene
+kadettens
+kadetter
+kadmium
+kadmiumet
+kadmiumets
+kafé
+kafébesøk
+kafébesøka
+kafébesøkene
+kafébesøket
+kafébesøkets
+kafébord
+kaféborda
+kafébordene
+kafébordet
+kafébordets
+kafeen
+kafeene
+kafeenes
+kafeens
+kafeer
+kafeteria
+kafeteriaen
+kafeteriaene
+kafeteriaens
+kafeteriaer
+kaffe
+kaffelars
+kaffen
+kaffens
+kaffer
+kaffestova
+kaffestove
+kaffestovene
+kaffestover
+kafékultur
+kafékulturen
+kafékulturens
+kafélokala
+kafélokale
+kafélokalene
+kafélokalenes
+kafélokaler
+kafélokalet
+kafélokalets
+kafénæring
+kafénæringa
+kafénæringen
+kafénæringens
+kagg
+kagga
+kaggen
+kaggene
+kaggens
+kagger
+kahytt
+kahytta
+kahytte
+kai
+kaia
+kaianlegg
+kaianlegget
+kaianleggets
+kaien
+kaiene
+kaiens
+kaier
+kajakk
+kajakken
+kajakkene
+kajakkens
+kajakker
+kaka
+kakao
+kakaoen
+kakaoens
+kake
+kakelinna
+kakelinne
+kaken
+kakene
+kakens
+kaker
+kakerlakk
+kakerlakken
+kakerlakkene
+kakerlakkens
+kakerlakker
+kaki
+kakien
+kakiens
+kakiskjorte
+kakka
+kakke
+kakkelomn
+kakkelomnen
+kakkelomnene
+kakkelomnens
+kakkelomner
+kakkelovn
+kakkelovnen
+kakkelovnene
+kakkelovnens
+kakkelovner
+kakker
+kakket
+kakl
+kakle
+kaklet
+kakofoni
+kakofonien
+kakofoniens
+kakse
+kaksen
+kaksens
+kaktus
+kaktusen
+kaktusene
+kaktusens
+kaktuser
+kala
+kalamitet
+kalamiteten
+kalamitetene
+kalamitetens
+kalamiteter
+kalas
+kalasa
+kalasene
+kalaser
+kalaset
+kalasets
+kald
+kaldblodig
+kalde
+kaldere
+kaldest
+kaldeste
+kaldfeber
+kaldfeberen
+kaldfeberens
+kaldflir
+kaldfliren
+kaldflirens
+kaldflirer
+kaldrøyke
+kaldrøykt
+kaldslig
+kaldt
+kaldtbord
+kaldtbordet
+kaldtbordets
+kaleidoskop
+kaleidoskopa
+kaleidoskopene
+kaleidoskoper
+kaleidoskopet
+kaleidoskopets
+kaleidoskopisk
+kalender
+kalenderen
+kalenderens
+kalenderår
+kalenderåret
+kalenderårets
+kalendrene
+kalendrer
+kalesje
+kalesjen
+kalesjens
+kalfatre
+kali
+kaliber
+kalibere
+kaliberen
+kaliberens
+kaliberet
+kalibra
+kalibre
+kalibrene
+kalibrer
+kalibrere
+kalibret
+kalien
+kaliens
+kaliet
+kaliets
+kalif
+kalifat
+kalifata
+kalifatene
+kalifater
+kalifatet
+kalifatets
+kalifen
+kalifene
+kalifens
+kalifer
+kalifornier
+kaliforniere
+kalifornieren
+kalifornierens
+kalifornieres
+kalifornierne
+kaliforniernes
+kalifornisk
+kalium
+kaliumet
+kaliumets
+kalk
+kalke
+kalken
+kalkens
+kalkerpapir
+kalkerpapiret
+kalkerpapirets
+kalket
+kalkulasjon
+kalkulasjonen
+kalkulasjonene
+kalkulasjonens
+kalkulasjoner
+kalkulator
+kalkulatoren
+kalkulatorene
+kalkulatorens
+kalkulatorer
+kalkulere
+kalkulerer
+kalkulert
+kalkulerte
+kalkun
+kalkunen
+kalkunene
+kalkunens
+kalkuner
+kalkyle
+kalkylen
+kalkylene
+kalkylens
+kalkyler
+kall
+kalle
+kallelse
+kallelsen
+kallelsens
+kallen
+kallens
+kaller
+kalles
+kallet
+kalligrafi
+kalligrafien
+kalligrafiens
+kalligrafisk
+kalling
+kallinga
+kallskapellan
+kallskapellanen
+kallskapellanene
+kallskapellanens
+kallskapellaner
+kalmukk
+kalmukken
+kalmukkene
+kalmukkens
+kalmukker
+kalomel
+kalomelen
+kalomelens
+kalomelet
+kalomelets
+kalori
+kalorien
+kaloriene
+kaloriens
+kalorier
+kalosje
+kalosjen
+kalosjens
+kalott
+kalotten
+kalottene
+kalottens
+kalotter
+kalsedon
+kalsedonet
+kalsedonets
+kalsium
+kalsiumet
+kalsiumets
+kalt
+kalte
+kalv
+kalvbeint
+kalve
+kalvedans
+kalvedansen
+kalvedansens
+kalven
+kalvens
+kalvinisme
+kalvinismen
+kalvinismens
+kalvinist
+kalvinisten
+kalvinistene
+kalvinistens
+kalvinister
+kalvinistisk
+kalvinsk
+kam
+kambia
+kambiene
+kambier
+kambium
+kambodsjaner
+kambodsjanere
+kambodsjaneren
+kambodsjanerens
+kambodsjaneres
+kambodsjanerne
+kambodsjanernes
+kambodsjansk
+kameen
+kameens
+kamel
+kamelen
+kamelene
+kamelens
+kameleon
+kameleonen
+kameleonene
+kameleonens
+kameleoner
+kameler
+kamera
+kameraderi
+kameraderiet
+kameraderiets
+kameraer
+kameraet
+kamerat
+kameraten
+kameratene
+kameratenes
+kameratens
+kamerater
+kameratskap
+kameratslig
+kameruner
+kamerunere
+kameruneren
+kamerunerens
+kameruneres
+kamerunerne
+kamerunernes
+kamerunsk
+kamfer
+kamferdrops
+kamferdropsa
+kamferdropsene
+kamferdropset
+kamferdropsets
+kamferen
+kamferens
+kamferet
+kamferets
+kamgarn
+kamgarnet
+kamgarnets
+kamin
+kaminen
+kaminene
+kaminens
+kaminer
+kammen
+kammene
+kammer
+kammeret
+kammerets
+kammermusikk
+kammermusikken
+kammermusikkens
+kammerpike
+kammerpiken
+kammerpikene
+kammerpikens
+kammerpiker
+kammers
+kammersa
+kammersene
+kammerser
+kammerset
+kammersets
+kamp
+kampanje
+kampanjen
+kampanjene
+kampanjens
+kampanjer
+kampdag
+kampdagen
+kampdagene
+kampdagens
+kampdager
+kampdyktig
+kampen
+kampene
+kampens
+kamper
+kampere
+kampestein
+kampesteinen
+kampesteinene
+kampesteinens
+kampesteiner
+kamphandling
+kamphandlingen
+kamphandlingene
+kamphandlingens
+kamphandlinger
+kampskrift
+kampskrifta
+kampskriftene
+kampskriftet
+kampskriftets
+kamra
+kamre
+kamrene
+kamuflasje
+kamuflasjen
+kamuflasjens
+kamuflere
+kamuflerer
+kamuflert
+kamuflerte
+kan
+kanadier
+kanadiere
+kanadieren
+kanadierens
+kanadieres
+kanadierne
+kanadiernes
+kanadisk
+kanadiske
+kanal
+kanalen
+kanalene
+kanalens
+kanaler
+kanalisere
+kanaliserer
+kanalisert
+kanaliserte
+kanalje
+kanaljen
+kanaljens
+kanarifugl
+kanarifuglen
+kanarifuglene
+kanarifuglens
+kanarifugler
+kandelaber
+kandelaberen
+kandelaberens
+kandelabrene
+kandelabrer
+kandidat
+kandidaten
+kandidatene
+kandidatenes
+kandidatens
+kandidater
+kandidatur
+kandidatura
+kandidaturen
+kandidaturene
+kandidaturens
+kandidaturer
+kandidaturet
+kandidaturets
+kandis
+kandisen
+kandisens
+kane
+kanel
+kanelen
+kanelens
+kanen
+kanin
+kaninen
+kaninene
+kaninens
+kaniner
+kanna
+kanne
+kannen
+kannene
+kannens
+kanner
+kannestøper
+kannestøpere
+kannestøperen
+kannestøperens
+kannestøperes
+kannestøperne
+kannestøpernes
+kannibal
+kannibalen
+kannibalene
+kannibalens
+kannibaler
+kannibalisme
+kannibalismen
+kannibalismens
+kannik
+kanniken
+kannikene
+kannikens
+kanniker
+kano
+kanoen
+kanoene
+kanoens
+kanoer
+kanon
+kanonade
+kanonaden
+kanonadens
+kanonen
+kanonene
+kanonens
+kanoner
+kanonisere
+kanoniserer
+kanonisert
+kanoniserte
+kanonkula
+kanonkule
+kanonkulen
+kanonkulene
+kanonkulens
+kanonkuler
+kanonskott
+kanonskudd
+kanselli
+kansellia
+kanselliene
+kansellier
+kanselliet
+kanselliets
+kansellistil
+kansellistilen
+kansellistilens
+kanskje
+kansler
+kanslere
+kansleren
+kanslerens
+kansleres
+kanslerne
+kanslernes
+kant
+kantarell
+kantarellen
+kantarellene
+kantarellens
+kantareller
+kantate
+kantaten
+kantatens
+kante
+kanten
+kantens
+kanter
+kantet
+kantete
+kantina
+kantine
+kantinen
+kantinene
+kantinens
+kantiner
+kanton
+kantonen
+kantonene
+kantonens
+kantoner
+kaos
+kaoset
+kaosets
+kaotisk
+kaotiske
+kapabel
+kapabilitet
+kapabiliteten
+kapabilitetens
+kapasitet
+kapasiteten
+kapasitetene
+kapasitetens
+kapasiteter
+kapell
+kapella
+kapellan
+kapellanen
+kapellanene
+kapellanens
+kapellaner
+kapellani
+kapellania
+kapellaniene
+kapellanier
+kapellaniet
+kapellaniets
+kapellene
+kapeller
+kapellet
+kapellets
+kapellmester
+kapellmesteren
+kapellmesterens
+kapellmestrene
+kapillarrør
+kapillarrøret
+kapillarrørets
+kapital
+kapitalbehov
+kapitalbehova
+kapitalbehovene
+kapitalbehovet
+kapitalbehovets
+kapitalen
+kapitalene
+kapitalens
+kapitaler
+kapitalisere
+kapitaliserer
+kapitalisert
+kapitaliserte
+kapitalisme
+kapitalismen
+kapitalismens
+kapitalist
+kapitalisten
+kapitalistene
+kapitalistens
+kapitalister
+kapitalistisk
+kapitla
+kapitlene
+kapitler
+kapitlet
+kapitlets
+kapittel
+kapittelet
+kapittelets
+kapitulasjon
+kapitulasjonen
+kapitulasjonene
+kapitulasjonens
+kapitulasjoner
+kapitulere
+kapitulerer
+kapitulert
+kapitulerte
+kapp
+kappe
+kappen
+kappens
+kapper
+kappes
+kappestrid
+kappestriden
+kappestridene
+kappestridens
+kappestrider
+kappkjøre
+kappkjører
+kappkjørt
+kappkjørte
+kappleik
+kappleiken
+kappleikene
+kappleikens
+kappleiker
+kappløp
+kappløper
+kappløpet
+kappløpets
+kapproingsbåt
+kapproingsbåten
+kapproingsbåtene
+kapproingsbåtens
+kapproingsbåter
+kappsaga
+kappverder
+kappverdere
+kappverderen
+kappverderens
+kappverderes
+kappverderne
+kappverdernes
+kappverdisk
+kapra
+kapre
+kaprer
+kapret
+kaprifol
+kaprifolen
+kaprifolene
+kaprifolens
+kaprifoler
+kaprifoliene
+kaprifolier
+kaprifolium
+kaprifoliumen
+kaprifoliumens
+kapring
+kapringa
+kapringen
+kapringens
+kaprise
+kaprisen
+kaprisens
+kaprisiøs
+kapsel
+kapselen
+kapselens
+kapsle
+kapsler
+kaptein
+kapteinen
+kapteinene
+kapteinens
+kapteiner
+kaptes
+kaputt
+kar
+karabin
+karabinen
+karabinene
+karabinens
+karabiner
+karaffel
+karaffelen
+karaffelens
+karaflene
+karafler
+karakter
+karakteren
+karakterene
+karakterens
+karakterer
+karakterisere
+karakteriserer
+karakteriseres
+karakterisering
+karakteriseringa
+karakteriseringen
+karakteriseringens
+karakterisert
+karakteriserte
+karakteristikk
+karakteristikken
+karakteristikkene
+karakteristikkens
+karakteristikker
+karakteristisk
+karakteristiske
+karakulsau
+karakulsauen
+karakulsauene
+karakulsauens
+karakulsauer
+karamell
+karamellen
+karamellene
+karamellens
+karameller
+karamellpudding
+karamellpuddingen
+karamellpuddingene
+karamellpuddingens
+karamellpuddinger
+karantene
+karantenen
+karantenens
+karat
+karaten
+karatens
+karavane
+karavanen
+karavanens
+karbid
+karbida
+karbiden
+karbidene
+karbidens
+karbider
+karbidet
+karbidets
+karbohydrat
+karbohydrata
+karbohydratene
+karbohydrater
+karbohydratet
+karbohydratets
+karbokolibakterie
+karbol
+karbolen
+karbolens
+karbon
+karbonade
+karbonaden
+karbonadens
+karbondioksid
+karbonet
+karbonpapir
+karbonpapiret
+karbonpapirets
+karda
+kardang
+kardangen
+kardangene
+kardangens
+kardanger
+kardansk
+karde
+kardemomme
+kardemommen
+kardemommens
+karden
+kardene
+kardens
+karder
+kardesk
+kardesken
+kardeskene
+kardeskens
+kardesker
+kardet
+kardialgi
+kardialgien
+kardialgiens
+kardinal
+kardinalen
+kardinalene
+kardinalens
+kardinaler
+kare
+karen
+karene
+karer
+karet
+karies
+kariesen
+kariesens
+karikatur
+karikaturen
+karikaturene
+karikaturens
+karikaturer
+karikere
+karikerer
+karikert
+karikerte
+karjol
+karjolen
+karjolene
+karjolens
+karjoler
+karm
+karmen
+karmene
+karmens
+karmer
+karnapp
+karnappa
+karnappene
+karnapper
+karnappet
+karnappets
+karneval
+karnevala
+karnevalene
+karnevalet
+karnevalets
+karosseri
+karosseria
+karosseriene
+karosserier
+karosseriet
+karosseriets
+karpe
+karpen
+karpens
+karri
+karrien
+karriens
+karriere
+karrieren
+karrierene
+karrierens
+karrierer
+karrig
+karrige
+karse
+karsen
+karsens
+karsjukdom
+karsjukdommen
+karsjukdommene
+karsjukdommens
+karsjukdommer
+karsk
+karska
+karsken
+karskene
+karskens
+karsker
+karsket
+karslig
+karsstykke
+karsstykket
+kart
+karte
+kartell
+kartella
+kartellene
+karteller
+kartellet
+kartellets
+karter
+kartet
+kartlagt
+kartlegge
+kartlegger
+kartlegging
+kartlegginga
+kartleggingen
+kartleggingens
+kartong
+kartongen
+kartongene
+kartongens
+kartonger
+kartotek
+kartoteka
+kartotekene
+kartoteker
+kartoteket
+kartotekets
+kartotekkort
+kartotekkorta
+kartotekkortene
+kartriss
+karusell
+karusellen
+karusellene
+karusellens
+karuseller
+karuss
+karussen
+karussene
+karussens
+karusser
+karve
+karven
+karvens
+kase
+kasematt
+kasematten
+kasemattene
+kasemattens
+kasematter
+kaserne
+kasernen
+kasernens
+kasjmir
+kasjott
+kasjotten
+kasjottene
+kasjottens
+kasjotter
+kaskade
+kaskaden
+kaskadens
+kaskelott
+kaskelotten
+kaskelottene
+kaskelottens
+kaskelotter
+kasko
+kaskoen
+kaskoene
+kaskoens
+kaskoer
+kaskoforsikring
+kaskoforsikringen
+kaskoforsikringens
+kaskoutlegg
+kaskoutlegget
+kaskoutleggets
+kassa
+kassaapparat
+kassaapparatene
+kassaapparater
+kassaapparatet
+kassaapparatets
+kassabel
+kassabok
+kassaboka
+kassaboken
+kassabokens
+kassakreditt
+kassakreditten
+kassakredittene
+kassakredittens
+kassakreditter
+kasse
+kassebok
+kasseboka
+kasseboken
+kassebokens
+kassekreditt
+kassekreditten
+kassekredittene
+kassekredittens
+kassekreditter
+kassen
+kassene
+kassens
+kasser
+kassere
+kasserer
+kasserere
+kassereren
+kassererens
+kassereres
+kassererne
+kasserernes
+kasseroll
+kasserollen
+kasserollene
+kasserollens
+kasseroller
+kassett
+kassetten
+kassettene
+kassettens
+kassetter
+kassevis
+kast
+kasta
+kastanje
+kastanjen
+kastanjens
+kaste
+kasteball
+kasteballen
+kasteballene
+kasteballens
+kasteballer
+kastell
+kastella
+kastellene
+kasteller
+kastellet
+kastellets
+kasten
+kastenot
+kastenota
+kastens
+kaster
+kastes
+kastet
+kastrere
+kastrerer
+kastrert
+kastrerte
+kasuistisk
+kasus
+kasusa
+kasusene
+kasuset
+kasusets
+katafalk
+katafalken
+katafalkene
+katafalkens
+katafalker
+katakombe
+katakomben
+katakombens
+katalog
+katalogen
+katalogene
+katalogens
+kataloger
+katalogisere
+katalogiserer
+katalogisering
+katalogiseringa
+katalogiseringen
+katalogiseringens
+katalogisert
+katalogiserte
+katalyse
+katalysen
+katalysens
+katamaran
+katamaranen
+katamaranene
+katamaranens
+katamaraner
+katapult
+katapulten
+katapultene
+katapultens
+katapulter
+katarr
+katarren
+katarrene
+katarrens
+katarrer
+katastrofal
+katastrofale
+katastrofe
+katastrofen
+katastrofene
+katastrofens
+katastrofer
+katedral
+katedralen
+katedralene
+katedralens
+katedraler
+katedralskole
+katedralskolen
+katedralskolene
+katedralskolens
+katedralskoler
+kategori
+kategorien
+kategoriene
+kategoriens
+kategorier
+kategorisk
+kategoriske
+kateket
+kateketen
+kateketene
+kateketens
+kateketer
+katekisere
+katekiserer
+katekisert
+katekiserte
+katekisma
+katekisme
+katekismen
+katekismene
+katekismens
+katekismer
+katet
+kateten
+katetene
+katetens
+kateter
+kateteret
+kateterets
+katetra
+katetre
+katetrene
+katetret
+katetrets
+kation
+kationene
+kationer
+kationet
+kationets
+katode
+katoden
+katodens
+katolikk
+katolikken
+katolikkene
+katolikkens
+katolikker
+katolisisme
+katolisismen
+katolisismens
+katolsk
+katolske
+katt
+katta
+katte
+katten
+kattene
+katter
+katterase
+katterasen
+katterasene
+katterasens
+katteraser
+kattugla
+kattugle
+kattuglen
+kattuglene
+kattuglens
+kattugler
+kattunge
+kattungen
+kattungene
+kattungens
+kattunger
+kaudervelsk
+kaudervelsken
+kaudervelskens
+kaupang
+kaupangen
+kaupangens
+kausal
+kausjon
+kausjonen
+kausjonene
+kausjonens
+kausjoner
+kausjonere
+kausjonerer
+kausjonert
+kausjonerte
+kausjonist
+kausjonisten
+kausjonistene
+kausjonistens
+kausjonister
+kaut
+kautsjuk
+kautsjuken
+kautsjukens
+kav
+kavaler
+kavaleren
+kavalerens
+kavaleri
+kavaleria
+kavaleriene
+kavalerier
+kavaleriet
+kavaleriets
+kavalerist
+kavaleristen
+kavaleristene
+kavaleristens
+kavalerister
+kavalkade
+kavalkaden
+kavalkadens
+kave
+kavere
+kaverer
+kavert
+kaverte
+kaviar
+kaviaren
+kaviarene
+kaviarens
+kaviarer
+kavl
+kavle
+kcal
+åke
+øke
+økede
+keeper
+keepere
+keeperen
+keeperens
+keeperes
+keeperne
+keepernes
+kefir
+kefiren
+kefirens
+kei
+keie
+keiet
+keik
+keika
+keiken
+keikene
+keikens
+keiker
+keiket
+keip
+keipa
+keipen
+keipene
+keipens
+keiper
+keiser
+keisere
+keiseren
+keiserens
+keiseres
+keiserinna
+keiserinne
+keiserinnen
+keiserinnene
+keiserinnens
+keiserinner
+keiserlige
+keiserne
+keisernes
+keit
+keitet
+keitete
+keiva
+keive
+keiven
+keivene
+keivens
+keiver
+keivhendt
+kelner
+kelnere
+kelneren
+kelnerens
+kelneres
+kelnerne
+kelnernes
+kelvinskala
+kelvinskalaen
+kelvinskalaens
+kemner
+kemnere
+kemneren
+kemnerens
+kemneres
+kemnerne
+kemnernes
+køen
+økenavn
+økenavna
+økenavnene
+økenavnet
+økenavnets
+økende
+køene
+kenguru
+kenguruen
+kenguruene
+kenguruens
+kenguruer
+kennel
+kennelen
+kennelene
+kennelens
+kenneler
+kenning
+kenningen
+kenningene
+kenningens
+kenninger
+køens
+kenyaner
+kenyanere
+kenyaneren
+kenyanerens
+kenyaneres
+kenyanerne
+kenyanernes
+kenyansk
+køer
+åker
+øker
+keramiker
+keramikere
+keramikeren
+keramikerens
+keramikeres
+keramikerne
+keramikernes
+keramikk
+keramikken
+keramikkens
+keramisk
+åkerbær
+åkerbærene
+åkerbæret
+åkerbærets
+åkerbruk
+åkerbruka
+åkerbrukene
+åkerbruket
+åkerbrukets
+åkeren
+åkerens
+åkerøeple
+åkerøepler
+åkerøeplet
+åkerhøna
+åkerhøne
+åkerhønene
+åkerhøner
+åkerlapp
+åkerlappen
+åkerlappene
+åkerlappens
+åkerlapper
+åkerlende
+åkerlendet
+åkermåne
+åkermånen
+åkermånens
+åkerrein
+åkerreina
+åkerriksa
+åkerrikse
+åkersennep
+åkersennepen
+åkersennepens
+åkertistel
+åkertistelen
+åkertistelens
+økes
+åket
+øket
+ketchup
+ketchupen
+ketchupens
+kfr
+kg
+khan
+khanen
+khanene
+khanens
+khaner
+kibbutz
+kibbutzen
+kibbutzene
+kibbutzens
+kibbutzer
+kidnappe
+kidnappet
+kidnapping
+kidnappinga
+kidnappingen
+kidnappingens
+kidnappinger
+kik
+kike
+kiken
+kikhol
+kikholet
+kikholets
+kikhoste
+kikhosten
+kikhostens
+kikk
+kikke
+kikken
+kikkert
+kikkerten
+kikkertene
+kikkertens
+kikkerter
+kikket
+kikkhol
+kikkholet
+kikkholets
+kil
+kilde
+kildekode
+kildekoden
+kildekodens
+kilden
+kildene
+kildens
+kilder
+kildra
+kildre
+kildret
+kile
+kilen
+kilenot
+kilenota
+kilevink
+kilevinken
+kilevinkene
+kilevinkens
+kilevinker
+killing
+killingen
+killingene
+killingens
+killinger
+kilne
+kilo
+kiloa
+kiloen
+kiloene
+kiloens
+kiloer
+kiloet
+kiloets
+kilogram
+kilogramma
+kilogrammene
+kilogrammet
+kilogrammets
+kilohertz
+kilojoule
+kilokalori
+kilometer
+kilometeren
+kilometerens
+kilometers
+kilopond
+kilowatt
+kilowatten
+kilowattens
+kilt
+kim
+kimbrer
+kimbrere
+kimbreren
+kimbrerens
+kimbreres
+kimbrerne
+kimbrernes
+kime
+kimen
+kimens
+kimet
+kimono
+kimonoen
+kimonoene
+kimonoens
+kimonoer
+kimsa
+kimse
+kimser
+kimset
+kimt
+kimte
+kinaputt
+kinaputten
+kinaputtene
+kinaputtens
+kinaputter
+kinematograf
+kinematografen
+kinematografens
+kinematografers
+kineser
+kinesere
+kineseren
+kineserens
+kineseres
+kineserne
+kinesernes
+kinesisk
+kinesiske
+kinetisk
+kinetiske
+øking
+økinga
+kingbolt
+kingbolten
+kingboltene
+kingboltens
+kingbolter
+kingelvev
+kingelveven
+kingelvevene
+kingelvevens
+kingelvever
+økingen
+økingens
+kinin
+kininen
+kininens
+kininet
+kininets
+kink
+kinka
+kinken
+kinkene
+kinkens
+kinker
+kinket
+kinkets
+kinkig
+kinn
+kinne
+kinnet
+kino
+kinobransje
+kinobransjen
+kinobransjens
+kinodirektør
+kinodirektøren
+kinodirektørene
+kinodirektørens
+kinodirektører
+kinodrift
+kinodrifta
+kinodriften
+kinodriftens
+kinoen
+kinoene
+kinoens
+kinoer
+kinopublikum
+kinopublikumet
+kinopublikumets
+kinosjef
+kinosjefen
+kinosjefene
+kinosjefens
+kinosjefer
+kiosk
+kiosken
+kioskene
+kioskens
+kiosker
+kipen
+kipne
+kipp
+kippen
+kippens
+kippers
+kippersen
+kippersene
+kippersens
+kipperser
+kippskodd
+kipt
+kipte
+kirka
+kirkas
+kirke
+kirkedepartement
+kirkedepartementet
+kirkedepartementets
+kirkefader
+kirkefaderen
+kirkefaderens
+kirkefar
+kirkefaren
+kirkefarens
+kirkegård
+kirkegården
+kirkegårdene
+kirkegårdens
+kirkegårder
+kirkekor
+kirkekora
+kirkekorene
+kirkekoret
+kirkekorets
+kirkelig
+kirkelige
+kirken
+kirkene
+kirkenes
+kirkens
+kirker
+kirkes
+kirkesamfunn
+kirkesamfunna
+kirkesamfunnene
+kirkesamfunnet
+kirkesamfunnets
+kiropraktisk
+kiropraktor
+kiropraktoren
+kiropraktorene
+kiropraktorens
+kiropraktorer
+kirsebær
+kirsebæra
+kirsebærene
+kirsebæret
+kirsebærets
+kirurg
+kirurgen
+kirurgene
+kirurgens
+kirurger
+kirurgi
+kirurgien
+kirurgiens
+kirurgisk
+kis
+kisel
+kiselen
+kiselens
+kiselsyra
+kiselsyre
+kiselsyren
+kiselsyrens
+kisen
+kisene
+kisens
+kiser
+kisla
+kislene
+kisler
+kislet
+kista
+kiste
+kisteglad
+kisten
+kistene
+kistens
+kister
+kitla
+kitle
+kitlen
+kitlene
+kitlens
+kitler
+kitlet
+kitt
+kitte
+kittel
+kittelen
+kittelens
+kittet
+kiv
+kivdes
+kive
+kives
+kivet
+kjøa
+kjake
+kjaken
+kjakens
+kjapp
+kjappe
+kjapt
+kjav
+kjave
+kjavet
+kjød
+kjødelig
+kjødet
+kjødets
+kje
+kjøe
+kjed
+kjede
+kjedebrev
+kjedebrevene
+kjedebrevet
+kjedebrevets
+kjedelig
+kjedelige
+kjeden
+kjedens
+kjeder
+kjee
+kjeet
+kjeft
+kjefte
+kjeften
+kjeftens
+kjeftet
+kjegla
+kjegle
+kjegleform
+kjegleforma
+kjegleformen
+kjegleformene
+kjegleformens
+kjegleformer
+kjegleformet
+kjeglen
+kjeglene
+kjeglens
+kjegler
+kjeglet
+kjei
+kjeia
+kjeiene
+kjeiet
+kjeiets
+kjekk
+kjekkas
+kjekkasen
+kjekkasene
+kjekkasens
+kjekkaser
+kjekke
+kjekl
+kjekle
+kjeklet
+kjeks
+kjeksa
+kjeksen
+kjeksene
+kjeksens
+kjekser
+kjekset
+kjekt
+kjel
+kjelda
+kjelde
+kjeldene
+kjelder
+kjele
+kjeledress
+kjeledressen
+kjeledressene
+kjeledressens
+kjeledresser
+kjelen
+kjelene
+kjelens
+kjeler
+kjelke
+kjelken
+kjelkene
+kjelkens
+kjelker
+kjelket
+kjeller
+kjellere
+kjelleren
+kjellerens
+kjelleres
+kjelleretasje
+kjelleretasjen
+kjelleretasjene
+kjelleretasjens
+kjelleretasjer
+kjellerne
+kjellernes
+kjeltring
+kjeltringen
+kjeltringene
+kjeltringens
+kjeltringer
+kjemi
+kjemien
+kjemiens
+kjemigrafi
+kjemigrafien
+kjemigrafiens
+kjemikal
+kjemikala
+kjemikalene
+kjemikaler
+kjemikalet
+kjemikalets
+kjemikalia
+kjemikalie
+kjemikaliene
+kjemikalier
+kjemikaliet
+kjemikaliets
+kjemiker
+kjemikere
+kjemikeren
+kjemikerens
+kjemikeres
+kjemikerne
+kjemikernes
+kjemisk
+kjemiske
+kjemma
+kjemme
+kjemmer
+kjemmet
+kjemp
+kjempe
+kjempekar
+kjempekaren
+kjempekarene
+kjempekarens
+kjempekarer
+kjempende
+kjemper
+kjempestore
+kjempestort
+kjempesuksess
+kjempesuksessen
+kjempesuksessene
+kjempesuksessens
+kjempesuksesser
+kjempet
+kjemt
+kjemte
+kjendis
+kjendisen
+kjendisene
+kjendisens
+kjendiser
+kjøene
+kjeng
+kjengen
+kjengene
+kjengens
+kjenger
+kjenn
+kjennbar
+kjenne
+kjennelig
+kjennelse
+kjennelsen
+kjennelsens
+kjenner
+kjennes
+kjennespak
+kjennetegn
+kjennetegne
+kjennetegner
+kjennetegnes
+kjennetegnet
+kjenning
+kjenningen
+kjenningens
+kjennskap
+kjennskapen
+kjennskapens
+kjennskapet
+kjennskapets
+kjens
+kjensel
+kjensfolk
+kjensfolket
+kjensfolkets
+kjensgjerning
+kjensgjerningen
+kjensgjerningene
+kjensgjerningens
+kjensgjerninger
+kjensle
+kjenslevar
+kjent
+kjente
+kjentmann
+kjentmannen
+kjentmannens
+kjentmenn
+kjentmennene
+kjentmennenes
+kjentmenns
+kjepp
+kjeppen
+kjeppene
+kjeppens
+kjepper
+kjepphest
+kjepphesten
+kjepphestene
+kjepphestens
+kjepphester
+kjepphøg
+kjepphøy
+kjøer
+kjerald
+kjeralda
+kjeraldene
+kjeraldet
+kjeraldets
+kjerka
+kjerke
+kjerkene
+kjerker
+kjerna
+kjerne
+kjernefysikk
+kjernefysikken
+kjernefysikkens
+kjernefysisk
+kjernefysiske
+kjernekraftverk
+kjernekraftverka
+kjernekraftverkene
+kjernekraftverket
+kjernekraftverkets
+kjernemelk
+kjernemelka
+kjernemelken
+kjernemelkens
+kjernen
+kjernene
+kjernens
+kjernepunkt
+kjernepunktene
+kjernepunktet
+kjernepunktets
+kjerner
+kjernesunn
+kjernet
+kjerneved
+kjerr
+kjerrat
+kjerraten
+kjerratene
+kjerratens
+kjerrater
+kjerre
+kjerret
+kjerring
+kjerringa
+kjerringen
+kjerringene
+kjerringens
+kjerringer
+kjerris
+kjerrisen
+kjerrisene
+kjerrisens
+kjerriser
+kjerte
+kjertel
+kjertelen
+kjertelens
+kjerten
+kjertene
+kjertens
+kjerter
+kjertlene
+kjertler
+kjerub
+kjeruben
+kjerubene
+kjerubens
+kjeruber
+kjerv
+kjerve
+kjervet
+kjetta
+kjette
+kjetten
+kjettene
+kjettens
+kjetter
+kjetterbrenning
+kjetterbrenningen
+kjetterbrenningens
+kjettere
+kjetteren
+kjetterens
+kjetteres
+kjetteri
+kjetteria
+kjetteriene
+kjetterier
+kjetteriet
+kjetteriets
+kjetterne
+kjetternes
+kjettersk
+kjetting
+kjettingen
+kjettingene
+kjettingens
+kjettinger
+kjeve
+kjevebein
+kjevebeina
+kjevebeinet
+kjevebeinets
+kjeven
+kjevene
+kjevens
+kjever
+kjevl
+kjevle
+kjevlet
+kjøkken
+kjøkkenbord
+kjøkkenborda
+kjøkkenbordene
+kjøkkenbordet
+kjøkkenbordets
+kjøkkenet
+kjøkkenets
+kjøkkenskap
+kjøl
+kjæle
+kjøle
+kjøleanlegg
+kjøleanlegga
+kjøleanleggene
+kjøleanlegget
+kjøleanleggets
+kjæledegge
+kjæledeggen
+kjæledeggens
+kjøledisk
+kjøledisken
+kjølediskene
+kjølediskens
+kjøledisker
+kjælen
+kjølen
+kjølens
+kjæler
+kjøleskap
+kjøleskapa
+kjøleskapene
+kjøleskapet
+kjøleskapets
+kjølesystem
+kjølesystema
+kjølesystemene
+kjølesystemer
+kjølesystemet
+kjølesystemets
+kjølevann
+kjølevannet
+kjølevannets
+kjølevatn
+kjølevatnet
+kjølevatnets
+kjølhale
+kjølhalen
+kjølhalens
+kjølig
+kjølige
+kjøling
+kjølvann
+kjølvannet
+kjølvannets
+kjølvatn
+kjølvatnet
+kjølvatnets
+kjømd
+kjømda
+kjønn
+kjønna
+kjønnene
+kjønnet
+kjønnets
+kjønnslig
+kjønnsrolle
+kjønnsrollen
+kjønnsrollene
+kjønnsrollens
+kjønnsroller
+kjønnssjukdom
+kjønnssjukdommen
+kjønnssjukdommene
+kjønnssjukdommens
+kjønnssjukdommer
+kjønnstest
+kjønnstesten
+kjønnstestene
+kjønnstestens
+kjønnstester
+kjole
+kjolen
+kjolene
+kjolens
+kjoler
+kjortel
+kjortelen
+kjortelens
+kjortlene
+kjortler
+kjøp
+kjøpe
+kjøpedato
+kjøpedatoen
+kjøpedatoens
+kjøper
+kjøpere
+kjøperen
+kjøperens
+kjøperne
+kjøpes
+kjøpesum
+kjøpesummen
+kjøpesummene
+kjøpesummens
+kjøpesummer
+kjøpet
+kjøpmann
+kjøpmannen
+kjøpmannens
+kjøpmenn
+kjøpmennene
+kjøpmennenes
+kjøpmenns
+kjøps
+kjøpslå
+kjøpstad
+kjøpstaden
+kjøpstadens
+kjøpt
+kjøpte
+kjær
+kjør
+kjørbar
+kjære
+kjøre
+kjørebane
+kjørebanen
+kjørebanene
+kjørebanens
+kjørebaner
+kjøredoning
+kjøredoninga
+kjøredoningen
+kjøredoningene
+kjøredoningens
+kjøredoninger
+kjøreegenskap
+kjøreegenskapen
+kjøreegenskapene
+kjøreegenskapens
+kjøreegenskaper
+kjørefelt
+kjørefelta
+kjørefeltene
+kjørefelter
+kjørefeltet
+kjørefeltets
+kjørel
+kjørelet
+kjørelets
+kjæremål
+kjæremålet
+kjæremålets
+kjørende
+kjøreoppdrag
+kjøreoppdraga
+kjøreoppdragene
+kjøreoppdraget
+kjøreoppdragets
+kjører
+kjørere
+kjøreren
+kjørerens
+kjøreres
+kjørerne
+kjørernes
+kjøres
+kjærest
+kjæresten
+kjærestene
+kjærestens
+kjærester
+kjørestrekning
+kjørestrekningen
+kjørestrekningene
+kjørestrekningens
+kjørestrekninger
+kjøret
+kjøretøy
+kjøretøya
+kjøretøyene
+kjøretøyer
+kjøretøyet
+kjøretøyets
+kjøring
+kjøringen
+kjøringens
+kjærkommen
+kjørla
+kjærleik
+kjærleiken
+kjærleikens
+kjørlene
+kjørler
+kjærlig
+kjærlighet
+kjærligheten
+kjærlighetens
+kjørsel
+kjørselen
+kjørselens
+kjørsla
+kjørslene
+kjørsler
+kjørt
+kjørte
+kjørvel
+kjørvelen
+kjørvelens
+kjørvlene
+kjørvler
+kjæta
+kjæte
+kjøter
+kjøtere
+kjøteren
+kjøterens
+kjøteres
+kjøterne
+kjøternes
+kjøtt
+kjøttet
+kjøttets
+kjøttkaka
+kjøttkake
+kjøttkaken
+kjøttkakene
+kjøttkakens
+kjøttkaker
+kjøttkraft
+kjøttkrafta
+kjøttkraften
+kjøttkraftens
+kjøttmeis
+kjøttmeisa
+kjøttmeise
+kjukling
+kjuklingen
+kjuklingene
+kjuklingens
+kjuklinger
+kjøve
+kjøver
+kl
+klå
+klø
+kål
+klabba
+klabbe
+klabbeføre
+klabben
+klabbene
+klabbens
+klabber
+klabbet
+kladas
+kladasen
+kladasene
+kladasens
+kladaser
+kladd
+kladde
+kladdebok
+kladdeboka
+kladdeboken
+kladdebokens
+kladdeføre
+kladdeføret
+kladden
+kladdens
+klaff
+klaffa
+klaffen
+klaffene
+klaffens
+klaffer
+klaffet
+klag
+klaga
+klage
+klagemål
+klagemåla
+klagemålene
+klagemålet
+klagemålets
+klagen
+klagene
+klager
+klagerne
+klagesak
+klagesaka
+klagesaken
+klagesakene
+klagesakens
+klagesaker
+klagesang
+klagesangen
+klagesangene
+klagesangens
+klagesanger
+klaget
+klake
+klaken
+klakens
+klam
+klamme
+klammeform
+klammeforma
+klammeformen
+klammeformene
+klammeformens
+klammeformer
+klammer
+klammeren
+klammerens
+klammeri
+klammeria
+klammeriene
+klammerier
+klammeriet
+klammeriets
+klamp
+klampa
+klampen
+klampene
+klampens
+klamper
+klampet
+klamra
+klamre
+klamrer
+klamret
+klan
+klander
+klanderen
+klanderens
+klandra
+klandre
+klandrer
+klandret
+klanen
+klanene
+klanens
+klaner
+klang
+klangen
+klapp
+klappe
+klappen
+klappens
+klapper
+klapperslange
+klapperslangen
+klapperslangens
+klappet
+klappmyss
+klappmyssen
+klappmyssens
+klappsalve
+klappsalven
+klappsalvene
+klappsalvens
+klappsalver
+klapra
+klapre
+klaprer
+klapret
+klaps
+klapsa
+klapsen
+klapsene
+klapsens
+klapser
+klapset
+klapsets
+klar
+klare
+klarer
+klarere
+klarerer
+klarest
+klareste
+klargjorde
+klargjort
+klargjøre
+klargjøring
+klargjøringa
+klargjøringen
+klargjøringens
+klarhet
+klarheten
+klarhetens
+klarinett
+klarinetten
+klarinettene
+klarinettens
+klarinetter
+klaring
+klaringa
+klaringsvinkel
+klaringsvinkelen
+klaringsvinkelens
+klarlagt
+klarlegge
+klarlegges
+klarna
+klarne
+klarner
+klarnet
+klarsignal
+klarsignala
+klarsignalene
+klarsignalet
+klarsignalets
+klarsyn
+klarsynet
+klarsynets
+klart
+klarte
+klartseende
+klase
+klasen
+klasens
+klask
+klaska
+klasken
+klaskene
+klaskens
+klasker
+klasket
+klaskets
+klassa
+klasse
+klasseløst
+klassen
+klassene
+klasser
+klasserom
+klasseromma
+klasserommene
+klasserommet
+klasserommets
+klasset
+klassetrinn
+klassetrinna
+klassetrinnene
+klassetrinnet
+klassetrinnets
+klassifikasjon
+klassifikasjonen
+klassifikasjonene
+klassifikasjonens
+klassifikasjoner
+klassifisere
+klassifiserer
+klassifisering
+klassifiseringa
+klassifiseringen
+klassifiseringens
+klassifisert
+klassifiserte
+klassiker
+klassikere
+klassikeren
+klassikerens
+klassikeres
+klassikerne
+klassikernes
+klassisisme
+klassisismen
+klassisismens
+klassisk
+klassiske
+klatre
+klatret
+klatring
+klatringa
+klatringen
+klatringens
+klatt
+klatte
+klatten
+klattens
+klatter
+klausul
+klausulen
+klausulene
+klausulens
+klausuler
+klauv
+klauva
+klauven
+klauvene
+klauvens
+klauver
+klave
+klaven
+klavens
+klaver
+klaveret
+klaverets
+klaverkonsert
+klaverkonserten
+klaverkonsertene
+klaverkonsertens
+klaverkonserter
+klaviatur
+klaviatura
+klaviaturen
+klaviaturene
+klaviaturens
+klaviaturer
+klaviaturet
+klaviaturets
+klådde
+kle
+kløe
+åkle
+klebeevne
+klebeevnen
+klebeevnens
+kleberstein
+klebersteinen
+klebersteinene
+klebersteinens
+klebersteiner
+klebrig
+kledd
+kledde
+klede
+kledelig
+kledet
+kledning
+kledningen
+kledningens
+klegg
+kleggen
+kleggene
+kleggens
+klegger
+kleia
+kleie
+kleier
+kleiet
+klein
+kleip
+kleis
+kleiv
+kleiva
+kleivene
+kleiver
+klekk
+klekka
+klekke
+klekkelig
+klekkes
+klekket
+klekt
+klem
+klementin
+klementinen
+klementinene
+klementinens
+klementiner
+klemme
+klemmen
+klemmene
+klemmens
+klemmer
+klemt
+klemte
+klemter
+klåen
+kløen
+kålen
+kålene
+klenge
+klengenavn
+klengenavna
+klengenavnene
+klengenavnet
+klengenavnets
+klenger
+klengt
+klengte
+klenodia
+klenodiene
+klenodier
+klenodiet
+klenodiets
+klenodium
+klåens
+kløens
+kålens
+klepp
+kleppa
+kleppen
+kleppene
+kleppens
+klepper
+kleppet
+kleppfisk
+kleppfisken
+kleppfiskens
+kleptoman
+kleptomanen
+kleptomanene
+kleptomanens
+kleptomaner
+kleptomani
+kleptomanien
+kleptomaniens
+kler
+kåler
+klerikal
+klerk
+klerken
+klerkene
+klerkens
+klerker
+klesdrakt
+klesdrakta
+klesdrakten
+klesdraktene
+klesdraktens
+klesdrakter
+klesklypa
+klesklype
+klesklypen
+klesklypene
+klesklypens
+klesklyper
+klesvask
+klesvasken
+klesvaskens
+klett
+kletten
+klettene
+klettens
+kletter
+kleve
+klevet
+klåfingra
+klåfingret
+kløft
+kløfta
+kløfte
+kløften
+kløftens
+kålhode
+kålhodet
+kli
+klient
+klienten
+klientene
+klientens
+klienter
+kliet
+kliets
+klikk
+klikke
+klikken
+klikkens
+klikker
+klikket
+klima
+klimaene
+klimaer
+klimaet
+klimaets
+klimaks
+klimaksen
+klimaksene
+klimaksens
+klimakser
+klimakset
+klimaksets
+klimaskade
+klimaskaden
+klimaskadene
+klimaskadens
+klimaskader
+klimatisere
+klimatiserer
+klimatisert
+klimatiserte
+klimatisk
+klimatiske
+klimpra
+klimpre
+klimprer
+klimpret
+klin
+kline
+klinet
+kling
+klinge
+klingen
+klingens
+klinger
+klinget
+klingt
+klinikk
+klinikken
+klinikkene
+klinikkens
+klinikker
+klinisk
+kliniske
+klinke
+klinkende
+klint
+klinten
+klintene
+klintens
+klinter
+klipp
+klippe
+klippekort
+klippekorta
+klippekortet
+klippekortets
+klippet
+klippfisk
+klippfisken
+klippfiskens
+klippfiskmiddag
+klipping
+klippinga
+klippingen
+klippingens
+klips
+klipsa
+klipsen
+klipsene
+klipsens
+klipset
+klipsets
+klipt
+klipte
+klirr
+klirra
+klirren
+klirrene
+klirrens
+klirrer
+klirret
+klirring
+klirringa
+klirringen
+klirringens
+klisne
+kliss
+klisse
+klissen
+klisset
+klissete
+klister
+klisteret
+klisterets
+klistra
+klistre
+klistret
+klivd
+klive
+kliver
+kløkt
+kløkten
+kløktens
+kløktig
+kølla
+kølle
+køllen
+køllens
+kløne
+klønet
+klønete
+klo
+kloa
+kloakk
+kloakken
+kloakkene
+kloakkens
+kloakker
+kloakkrør
+kloakkrøra
+kloakkrørene
+kloakkrøret
+kloakkrørets
+klode
+kloden
+klodens
+klodrian
+klodrianen
+klodrianene
+klodrianens
+klodrianer
+klok
+kloke
+klokere
+klokka
+klokke
+klokken
+klokkene
+klokkens
+klokker
+klokkere
+klokkeren
+klokkerens
+klokkeres
+klokkerne
+klokkernes
+klokkertro
+klokkertroen
+klokkertroens
+klokkertru
+klokkertrua
+klokkeslett
+klokkesletta
+klokkeslettene
+klokkeslettet
+klokkeslettets
+klokskap
+klokskapen
+klokt
+klona
+klone
+kloner
+klonet
+klopp
+kloppa
+kloppen
+kloppene
+kloppens
+klopper
+kloppet
+klor
+klore
+kloren
+klorens
+klorere
+klorerer
+klorert
+klorerte
+kloret
+kloroform
+kloroformen
+kloroformens
+kloroformer
+kloroformere
+kloroformerer
+kloroformert
+kloroformerte
+klorofyll
+klorofyllet
+klorofyllets
+klort
+klorte
+klosett
+klosetta
+klosettene
+klosetter
+klosettet
+klosettets
+kloss
+klosse
+klossen
+klossens
+klosser
+klosset
+klossete
+kloster
+klosteret
+klosterets
+klostra
+klostre
+klostrene
+klostret
+klostrets
+klov
+klova
+kloven
+klovene
+klover
+klovet
+klovn
+klovna
+klovnen
+klovnene
+klovnens
+klovner
+klovnet
+kløp
+kløpet
+kløpper
+kløppere
+kløpperen
+kløpperens
+kløpperes
+kløpperne
+kløppernes
+klær
+klør
+åklær
+kålrabi
+kålrabien
+kålrabiene
+kålrabiens
+kålrabier
+klærne
+klørne
+kålrot
+kålrota
+kålroten
+kålrotens
+klubb
+klubbe
+klubben
+klubbene
+klubbens
+klubber
+klubbhus
+klubbhusa
+klubbhusene
+klubbhuset
+klubbhusets
+klubbkamerat
+klubbkameraten
+klubbkameratene
+klubbkameratens
+klubbkamerater
+klubblokala
+klubblokale
+klubblokalene
+klubblokaler
+klubblokalet
+klubblokalets
+klubbmiljø
+klubbmiljøa
+klubbmiljøene
+klubbmiljøer
+klubbmiljøet
+klubbmiljøets
+kludder
+kludderet
+kludderets
+kludra
+kludre
+kludrer
+kludret
+klukk
+klukka
+klukken
+klukkene
+klukkens
+klukker
+klukket
+klump
+klumpe
+klumpen
+klumpens
+klumpet
+klumpete
+klumsa
+klumse
+klumsene
+klumser
+klumset
+klunder
+klunderet
+klunderets
+klundra
+klundre
+klundret
+klundrets
+klunger
+klungeren
+klungerens
+klungrene
+klungrer
+klunk
+klunka
+klunken
+klunkene
+klunkens
+klunker
+klunket
+kluss
+klusse
+klussing
+klussinga
+klussingen
+klussingens
+klut
+kluten
+klutene
+klutens
+kluter
+klux
+kløv
+kløva
+kløve
+kløver
+kløvere
+kløveren
+kløverens
+kløveres
+kløverne
+kløvernes
+kløvet
+kløvhest
+kløvhesten
+kløvhestene
+kløvhestens
+kløvhester
+kløvja
+kløvje
+kløvjer
+kløvjet
+kløvmeis
+kløvmeisa
+klynga
+klynge
+klyngen
+klyngene
+klyngens
+klynger
+klynget
+klynk
+klynka
+klynken
+klynkene
+klynkens
+klynker
+klynket
+klynkets
+klype
+klypt
+klypte
+klysa
+klyse
+klysen
+klysene
+klysens
+klyser
+klyset
+klyss
+klyssa
+klyssene
+klysset
+klyssets
+klyster
+klysteret
+klysterets
+klyvd
+kløyvd
+klyvde
+klyve
+kløyve
+klyver
+kløyver
+klyvere
+klyveren
+klyverens
+klyveres
+klyverne
+klyvernes
+km
+kna
+knabb
+knabba
+knabben
+knabbene
+knabbens
+knabber
+knabbet
+knagg
+knagga
+knaggen
+knaggene
+knaggens
+knagger
+knagget
+knaka
+knake
+knaket
+knakk
+knakka
+knakken
+knakkene
+knakkens
+knakker
+knakket
+knakkpølsa
+knakkpølse
+knakkpølsen
+knakkpølsene
+knakkpølsens
+knakkpølser
+knakkwurst
+knakkwursten
+knakkwurstene
+knakkwurstens
+knakkwurster
+knall
+knalle
+knallert
+knallerten
+knallertene
+knallertens
+knallerter
+knallet
+knallgass
+knallgassen
+knallgassens
+knapp
+knappe
+knappen
+knappene
+knappenål
+knappenåla
+knappenålen
+knappenålene
+knappenålens
+knappenåler
+knappens
+knapper
+knappet
+knapphol
+knappholet
+knappholets
+knapt
+knark
+knarka
+knarken
+knarkene
+knarkens
+knarker
+knarket
+knarr
+knarra
+knarren
+knarrene
+knarrens
+knarrer
+knarret
+knas
+knase
+knaset
+knask
+knaske
+knasket
+knatt
+knatta
+knatten
+knattene
+knattens
+knatter
+knattet
+knaus
+knausen
+knausene
+knausens
+knauser
+kne
+knea
+knebel
+knebelen
+knebelens
+kneble
+knebler
+kneet
+kneets
+knege
+knegen
+kneget
+knegga
+knegge
+kneggen
+kneggene
+kneggens
+knegger
+knegget
+knegne
+kneik
+kneika
+kneike
+kneiken
+kneikens
+kneip
+kneipe
+kneippbrød
+kneippbrøda
+kneippbrødene
+kneippbrødet
+kneippbrødets
+kneise
+kneiser
+kneist
+kneiste
+knekk
+knekke
+knekkebrød
+knekkebrøda
+knekkebrødene
+knekkebrødet
+knekkebrødets
+knekken
+knekkens
+knekket
+knekt
+knekta
+knekten
+knektene
+knektens
+knekter
+knektet
+knele
+kneler
+knelt
+knelte
+knep
+knepen
+knepent
+knepet
+knepets
+knepp
+kneppe
+knept
+knepte
+knert
+knerta
+knerten
+knertene
+knertens
+knerter
+knertet
+knes
+kneskjell
+kneskjella
+knett
+knette
+knettet
+kniks
+knikse
+knikset
+økning
+økningen
+økningens
+knip
+knipe
+knipen
+knipet
+knipetak
+knipetang
+knipetanga
+knipetangen
+knipetangens
+knipla
+kniple
+knipler
+kniplet
+knipling
+kniplingen
+kniplingene
+kniplingens
+kniplinger
+knippe
+knippet
+knips
+knipse
+knipset
+knipsk
+knirk
+knirke
+knirkefritt
+knirken
+knirkens
+knis
+knisa
+knisen
+knisene
+knisens
+kniser
+kniset
+knisets
+knitra
+knitre
+knitrer
+knitret
+kniv
+knive
+kniven
+knivens
+kniver
+kniving
+knivinga
+knivingen
+knivingens
+knivsegg
+knivsegget
+knivseggets
+knøl
+knølen
+knølens
+knockout
+knockouten
+knockoutene
+knockoutens
+knockouter
+knok
+knoke
+knoken
+knokens
+knoket
+knokete
+knokkel
+knokkelen
+knokkelens
+knoklene
+knokler
+knoklet
+knoklete
+knoll
+knollen
+knollene
+knollens
+knoller
+knollet
+knollete
+knop
+knopa
+knopen
+knopene
+knopens
+knoper
+knopet
+knopp
+knoppa
+knoppen
+knoppene
+knoppens
+knopper
+knoppet
+knot
+knote
+knotet
+knott
+knotten
+knottene
+knottens
+knotter
+knowhow
+knowhowen
+knowhowens
+knær
+knærne
+knubba
+knubbe
+knubber
+knubbet
+knudret
+knudrete
+knue
+knuen
+knuens
+knuga
+knuge
+knuger
+knuget
+knupp
+knuppa
+knuppen
+knuppene
+knuppens
+knupper
+knuppet
+knurra
+knurre
+knurren
+knurrene
+knurrens
+knurrer
+knurret
+knurrets
+knuse
+knusende
+knusk
+knusken
+knuskens
+knusla
+knusle
+knusler
+knuslet
+knuslete
+knussel
+knusselet
+knusselets
+knust
+knuste
+knustra
+knustre
+knustrer
+knustret
+knut
+knute
+knuten
+knutens
+knutepunkt
+knutepunkta
+knutepunktene
+knutepunkter
+knutepunktet
+knutepunktets
+knuter
+knutet
+knutete
+kny
+knya
+knyene
+knyet
+knyets
+knyst
+knysta
+knysten
+knystene
+knystens
+knyster
+knystet
+knystets
+knyte
+knyter
+knytt
+knytta
+knytte
+knytter
+knyttes
+knyttet
+knytting
+knyttinga
+knyttingen
+knyttingens
+knyttneve
+knyttneven
+knyttnevens
+koagulere
+koagulerer
+koagulert
+koagulerte
+koaksial
+koalisjon
+koalisjonen
+koalisjonene
+koalisjonens
+koalisjoner
+koalisjonsregjering
+koalisjonsregjeringa
+koalisjonsregjeringen
+koalisjonsregjeringene
+koalisjonsregjeringens
+koalisjonsregjeringer
+kobbe
+kobbel
+kobbelet
+kobbelets
+kobben
+kobbene
+kobbens
+kobber
+kobberet
+kobberets
+kobla
+koble
+kobler
+kobles
+koblet
+kobling
+koblingen
+koblinger
+kobolt
+kobolten
+koboltens
+koboltet
+koboltets
+koda
+kode
+koden
+kodene
+kodens
+koder
+kodespråk
+kodet
+kodetabell
+kodetabellen
+kodetabellene
+kodetabellens
+kodetabeller
+kodifisere
+kodifiserer
+kodifisert
+kodifiserte
+kodilje
+kodiljen
+kodiljens
+koeffisient
+koeffisienten
+koeffisientene
+koeffisientens
+koeffisienter
+koffein
+koffeinen
+koffeinens
+koffeinet
+koffeinets
+koffert
+kofferten
+koffertene
+koffertens
+kofferter
+kofta
+kofte
+koften
+koftene
+koftens
+kofter
+kogg
+koggen
+koggene
+koggens
+kogger
+koggeret
+koggerets
+kognitiv
+kogra
+kogre
+kogrene
+kohesjon
+kohesjonen
+kohesjonene
+kohesjonens
+kohesjoner
+koia
+koie
+koien
+koiene
+koiens
+koier
+koitus
+koitusen
+koitusens
+kok
+kokain
+kokainen
+kokainens
+kokainet
+kokainets
+kokarde
+kokarden
+kokardens
+koke
+kokeapparat
+kokeapparata
+kokeapparatene
+kokeapparater
+kokeapparatet
+kokeapparatets
+kokekar
+kokekara
+kokekarene
+kokekaret
+kokekarets
+kokemulighet
+kokemuligheten
+kokemulighetene
+kokemulighetens
+kokemuligheter
+koken
+kokende
+kokens
+koker
+kokeri
+kokeria
+kokeriene
+kokerier
+kokeriet
+kokeriets
+kokes
+kokett
+kokette
+kokettere
+koketterer
+kokettert
+koketterte
+kokille
+kokillen
+kokillene
+kokillens
+kokiller
+koking
+kokinga
+kokingen
+kokingens
+kokk
+kokke
+kokkelimonke
+kokken
+kokkens
+kokong
+kokongen
+kokongene
+kokongens
+kokonger
+kokos
+kokosen
+kokosene
+kokosens
+kokoser
+koks
+koksa
+koksen
+koksene
+koksens
+kokser
+koksverk
+koksverket
+koksverkets
+kokt
+kokte
+kol
+kola
+kolbe
+kolben
+kolbens
+kolbrenner
+kolbrennere
+kolbrenneren
+kolbrennerens
+kolbrenneres
+kolbrennerne
+kolbrennernes
+koldbrann
+koldbrannen
+koldbrannens
+koldfeber
+koldfeberen
+koldfeberens
+koldjomfru
+koldjomfrua
+koldjomfruen
+koldjomfruene
+koldjomfruens
+koldjomfruer
+koldtbord
+koldtborda
+koldtbordene
+koldtbordet
+koldtbordets
+kole
+kolera
+koleraen
+koleraens
+koleriker
+kolerikere
+kolerikeren
+kolerikerens
+kolerikeres
+kolerikerne
+kolerikernes
+kolesterol
+kolesterolen
+kolesterolens
+kolesterolet
+kolesterolets
+kolet
+kolhydrat
+kolhydratet
+kolhydratets
+kolibakterie
+kolibakterien
+kolibakteriens
+kolibri
+kolibrien
+kolibriene
+kolibriens
+kolibrier
+koliform
+kolikk
+kolikken
+kolikkene
+kolikkens
+kolikker
+kolja
+kolje
+koljen
+koljene
+koljens
+koljer
+kolkos
+kolkosa
+kolkosene
+kolkoser
+kolkoset
+kolkosets
+koll
+kollaps
+kollapsa
+kollapsen
+kollapsene
+kollapsens
+kollapser
+kollapset
+kollbøtte
+kolle
+kollega
+kollegaen
+kollegaene
+kollegaens
+kollegaer
+kollegaers
+kollegene
+kolleger
+kollegers
+kollegia
+kollegial
+kollegiale
+kollegiene
+kollegier
+kollegiet
+kollegiets
+kollegium
+kolleksjon
+kolleksjonen
+kolleksjonene
+kolleksjonens
+kolleksjoner
+kollekt
+kollekten
+kollektene
+kollektens
+kollekter
+kollektiv
+kollektive
+kollektivet
+kollektivt
+kollen
+kollens
+kollet
+kollete
+kolli
+kollia
+kollider
+kollidere
+kolliderer
+kollidert
+kolliderte
+kolliene
+kollier
+kolliet
+kolliets
+kollisjon
+kollisjonen
+kollisjonene
+kollisjonens
+kollisjoner
+kolloid
+kolloida
+kolloidene
+kolloider
+kolloidet
+kolloidets
+kollokvia
+kollokviene
+kollokvier
+kollokviet
+kollokviets
+kollokvium
+kollsegle
+kollseile
+økolog
+økologen
+økologene
+økologens
+økologer
+økologi
+økologien
+økologiens
+økologisk
+økologiske
+kolon
+kolona
+kolonene
+koloner
+kolonet
+kolonets
+koloni
+kolonial
+kolonialen
+kolonialene
+kolonialens
+kolonialer
+kolonialisme
+kolonialismen
+kolonialismens
+kolonien
+koloniene
+koloniens
+kolonier
+kolonisasjon
+kolonisasjonen
+kolonisasjonene
+kolonisasjonens
+kolonisasjoner
+kolonisere
+koloniserer
+kolonisert
+koloniserte
+kolonist
+kolonisten
+kolonistene
+kolonistens
+kolonister
+kolonnade
+kolonnaden
+kolonnadene
+kolonnadens
+kolonnader
+kolonne
+kolonnen
+kolonnens
+koloradobille
+koloradobillen
+koloradobillens
+koloratur
+koloraturen
+koloraturens
+kolorere
+kolorerer
+kolorert
+kolorerte
+koloritt
+koloritten
+kolorittene
+kolorittens
+koloritter
+kolos
+kolosen
+kolosens
+koloss
+kolossal
+kolossale
+kolossalt
+kolossen
+kolossene
+kolossens
+kolosser
+kolportasje
+kolportasjen
+kolportasjens
+kolportør
+kolportøren
+kolportørene
+kolportørens
+kolportører
+kolstoff
+kolstoffet
+kolstoffets
+kolsvart
+kolsyra
+kolsyre
+kolv
+kolven
+kolvene
+kolvens
+kolver
+kom
+kombinasjon
+kombinasjonen
+kombinasjonene
+kombinasjonens
+kombinasjoner
+kombiner
+kombinere
+kombinerer
+kombineres
+kombinert
+kombinerte
+komedie
+komedien
+komediens
+komet
+kometen
+kometene
+kometens
+kometer
+komfort
+komfortabel
+komfortable
+komforten
+komfortens
+komfyr
+komfyren
+komfyrene
+komfyrens
+komfyrer
+komiker
+komikere
+komikeren
+komikerens
+komikeres
+komikerne
+komikernes
+komikk
+komikken
+komikkens
+komisk
+komiske
+komité
+komiteen
+komiteene
+komiteens
+komiteer
+komma
+kommaene
+kommaer
+kommaet
+kommaets
+kommag
+kommagen
+kommagene
+kommagens
+kommager
+kommandant
+kommandanten
+kommandantene
+kommandantens
+kommandanter
+kommandere
+kommanderer
+kommandert
+kommanderte
+kommandittist
+kommandittisten
+kommandittistene
+kommandittistens
+kommandittister
+kommandittselskap
+kommandittselskapa
+kommandittselskapene
+kommandittselskaper
+kommandittselskapet
+kommandittselskapets
+kommando
+kommandoen
+kommandoene
+kommandoens
+kommandoer
+kommandolinja
+kommandolinje
+kommandolinjen
+kommandolinjens
+kommandolinjer
+kommandør
+kommandøren
+kommandørene
+kommandørens
+kommandører
+kommaregler
+komme
+kommende
+kommensurabel
+kommentar
+kommentaren
+kommentarene
+kommentarens
+kommentarer
+kommentator
+kommentatoren
+kommentatorene
+kommentatorens
+kommentatorer
+kommentere
+kommenterer
+kommenteres
+kommentert
+kommenterte
+kommer
+kommers
+kommersen
+kommersialisering
+kommersialiseringa
+kommersialiseringen
+kommersialiseringens
+kommersiell
+kommersielle
+kommersielt
+kommet
+kommisjon
+kommisjonen
+kommisjonene
+kommisjonens
+kommisjoner
+kommisjonær
+kommisjonæren
+kommisjonærene
+kommisjonærens
+kommisjonærer
+kommissariat
+kommissariata
+kommissariatene
+kommissariater
+kommissariatet
+kommissariatets
+kommissær
+kommissæren
+kommissærene
+kommissærens
+kommissærer
+kommode
+kommoden
+kommodens
+kommunal
+kommunaldepartementet
+kommunale
+kommunalminister
+kommunalministeren
+kommunalministerens
+kommunalministrene
+kommunalt
+kommune
+kommunegrensa
+kommunegrense
+kommunegrensen
+kommunegrensene
+kommunegrensens
+kommunegrenser
+kommuneingeniør
+kommuneingeniøren
+kommuneingeniørene
+kommuneingeniørens
+kommuneingeniører
+kommunekasserer
+kommunekasserere
+kommunekassereren
+kommunekassererens
+kommunekassereres
+kommunekassererne
+kommunekasserernes
+kommunen
+kommunene
+kommunenes
+kommunens
+kommuner
+kommuners
+kommunes
+kommunestyra
+kommunestyre
+kommunestyrene
+kommunestyrer
+kommunestyret
+kommunestyrets
+kommunevalg
+kommunevalga
+kommunevalgene
+kommunevalget
+kommunevalgets
+kommunikasjon
+kommunikasjonen
+kommunikasjonene
+kommunikasjonens
+kommunikasjoner
+kommunikasjonshjelpemidler
+kommunikasjonsmidler
+kommunikeet
+kommunikeets
+kommunisere
+kommuniserer
+kommunisert
+kommuniserte
+kommunisme
+kommunismen
+kommunismens
+kommunist
+kommunisten
+kommunistene
+kommunistens
+kommunister
+kommunistisk
+kommunistiske
+kommunistparti
+kommunistpartier
+kommunistpartiet
+kommunistpartiets
+kompakt
+kompakte
+kompani
+kompania
+kompaniene
+kompanier
+kompaniet
+kompaniets
+kompanjong
+kompanjongen
+kompanjongene
+kompanjongens
+kompanjonger
+komparasjon
+komparasjonen
+komparasjonene
+komparasjonens
+komparasjoner
+komparativ
+komparativen
+komparativens
+kompas
+kompasa
+kompasen
+kompasene
+kompasens
+kompaser
+kompaset
+kompasets
+kompass
+kompassa
+kompassen
+kompassene
+kompassens
+kompasser
+kompasset
+kompassets
+kompatibel
+kompatibelt
+kompatible
+kompendiet
+kompendiets
+kompensasjon
+kompensasjonen
+kompensasjonene
+kompensasjonens
+kompensasjoner
+kompensator
+kompensatoren
+kompensatorene
+kompensatorens
+kompensatorer
+kompenser
+kompensere
+kompenserer
+kompensert
+kompetanse
+kompetansen
+kompetansens
+kompetanseområde
+kompetanseområdene
+kompetanseområder
+kompetanseområdet
+kompetanseområdets
+kompetent
+kompis
+kompisen
+kompisene
+kompisens
+kompiser
+kompleks
+komplekse
+komplekser
+komplekset
+komplement
+komplementa
+komplementene
+komplementer
+komplementet
+komplementets
+komplementær
+komplett
+komplette
+komplettere
+kompletterer
+komplettert
+kompletterte
+komplikasjon
+komplikasjonen
+komplikasjonene
+komplikasjonens
+komplikasjoner
+kompliment
+komplimenten
+komplimentene
+komplimentens
+komplimenter
+komplisere
+komplisert
+kompliserte
+komplott
+komplotta
+komplottene
+komplotter
+komplottet
+komplottets
+komponent
+komponenten
+komponentene
+komponentens
+komponenter
+komponere
+komponerer
+komponert
+komponerte
+komponist
+komponisten
+komponistene
+komponistens
+komponister
+komposisjon
+komposisjonen
+komposisjonene
+komposisjonens
+komposisjoner
+kompost
+komposten
+kompostene
+kompostens
+komposter
+kompott
+kompotten
+kompottene
+kompottens
+kompotter
+kompresjon
+kompresjonen
+kompresjonene
+kompresjonens
+kompresjoner
+kompresjonskvotient
+kompresjonskvotienten
+kompresjonskvotientens
+kompresjonstakt
+kompresjonstakta
+kompresjonstakten
+kompresjonstaktens
+kompressor
+kompressoren
+kompressorene
+kompressorens
+kompressorer
+komprimere
+komprimering
+komprimeringa
+komprimeringen
+komprimeringens
+komprimert
+komprimerte
+kompromiss
+kompromisse
+kompromisser
+kompromisset
+kompromittere
+kompromitterer
+kompromittert
+kompromitterte
+komsa
+komse
+komsen
+komsene
+komsens
+komser
+kon
+kona
+konas
+kondemnable
+kondemnere
+kondemnerer
+kondemnert
+kondemnerte
+kondens
+kondensator
+kondensatoren
+kondensatorene
+kondensatorens
+kondensatorer
+kondensen
+kondensens
+kondenser
+kondensere
+kondenseres
+kondisjon
+kondisjonalis
+kondisjonalisen
+kondisjonalisene
+kondisjonalisens
+kondisjonaliser
+kondisjonen
+kondisjonene
+kondisjonens
+kondisjoner
+kondisjonere
+kondisjonert
+konditori
+konditoria
+konditoriene
+konditorier
+konditoriet
+konditoriets
+kondolanse
+kondolansen
+kondolansens
+kondoler
+kondolere
+kondolerer
+kondom
+kondoma
+kondomet
+kondomets
+konduite
+konduiten
+konduitens
+konduktør
+konduktøren
+konduktørene
+konduktørens
+konduktører
+konen
+konens
+kones
+konfeksjon
+konfeksjonen
+konfeksjonene
+konfeksjonens
+konfeksjoner
+konfekt
+konfekten
+konfektene
+konfektens
+konfekter
+konferanse
+konferansen
+konferansene
+konferansens
+konferanser
+konferanserom
+konferanseromma
+konferanserommene
+konferanserommet
+konferanserommets
+konferansier
+konferansieren
+konferansierens
+konferere
+konfererer
+konferert
+konfererte
+konfesjon
+konfesjonen
+konfesjonene
+konfesjonens
+konfesjoner
+konfidensiell
+konfirmant
+konfirmanten
+konfirmantene
+konfirmantens
+konfirmanter
+konfirmasjon
+konfirmasjonen
+konfirmasjonene
+konfirmasjonens
+konfirmasjoner
+konfirmere
+konfirmerer
+konfirmert
+konfirmerte
+konfiskere
+konfiskerer
+konfiskert
+konfiskerte
+konflikt
+konflikten
+konfliktene
+konfliktens
+konflikter
+konfliktsituasjon
+konfliktsituasjonen
+konfliktsituasjonene
+konfliktsituasjonens
+konfliktsituasjoner
+konform
+konformitet
+konformiteten
+konformitetens
+konfrontasjon
+konfrontasjonen
+konfrontasjonene
+konfrontasjonens
+konfrontasjoner
+konfrontere
+konfronterer
+konfrontert
+konfronterte
+konfus
+kong
+konge
+kongedømme
+kongedømmet
+kongehus
+kongehuset
+kongehusets
+kongelig
+kongelige
+kongen
+kongens
+kongesaga
+kongesagaen
+kongesagaene
+kongesagaens
+kongesagaer
+kongla
+kongle
+konglen
+konglene
+konglens
+kongler
+konglomerat
+konglomerata
+konglomeratene
+konglomerater
+konglomeratet
+konglomeratets
+kongoleser
+kongolesere
+kongoleseren
+kongoleserens
+kongoleseres
+kongoleserne
+kongolesernes
+kongolesisk
+kongress
+kongressen
+kongressene
+kongressens
+kongresser
+kongro
+kongroa
+kongroene
+kongroer
+kongruens
+kongruensen
+kongruent
+kongslys
+kongslyset
+kongslysets
+konisk
+konj
+konjakk
+konjakken
+konjakkene
+konjakkens
+konjakker
+konjektur
+konjekturen
+konjekturene
+konjekturens
+konjekturer
+konjugasjon
+konjugasjonen
+konjugasjonene
+konjugasjonens
+konjugasjoner
+konjugere
+konjugerer
+konjugert
+konjugerte
+konjunksjon
+konjunksjonen
+konjunksjonene
+konjunksjonens
+konjunksjoner
+konjunktiv
+konjunktiven
+konjunktivene
+konjunktivens
+konjunktiver
+konjunktur
+konjunkturen
+konjunkturene
+konjunkturens
+konjunkturer
+konkav
+konkluder
+konkludere
+konkluderer
+konkludert
+konkluderte
+konklusjon
+konklusjonen
+konklusjonene
+konklusjonens
+konklusjoner
+konkret
+konkrete
+konkretet
+konkretisere
+konkretiserer
+konkretisert
+konkretiserte
+konkubinat
+konkubinata
+konkubinatene
+konkubinater
+konkubinatet
+konkubinatets
+konkurranse
+konkurransedyktig
+konkurransedyktige
+konkurransen
+konkurransene
+konkurransens
+konkurranser
+konkurrent
+konkurrenten
+konkurrentene
+konkurrentens
+konkurrenter
+konkurrere
+konkurrerer
+konkurrert
+konkurs
+konkursen
+konkursene
+konkursens
+konkurser
+konkylie
+konkylien
+konkyliens
+konnossement
+konnossementa
+konnossementene
+konnossementer
+konnossementet
+konnossementets
+økonom
+økonomen
+økonomene
+økonomens
+økonomer
+økonomi
+økonomien
+økonomiens
+økonomisere
+økonomiserer
+økonomisert
+økonomiserte
+økonomisjef
+økonomisjefen
+økonomisjefene
+økonomisjefens
+økonomisjefer
+økonomisk
+økonomiske
+konsekvens
+konsekvensen
+konsekvensene
+konsekvensens
+konsekvenser
+konsekvent
+konsekvente
+konsens
+konsensen
+konsensene
+konsensens
+konsenser
+konsentrasjon
+konsentrasjonen
+konsentrasjonene
+konsentrasjonens
+konsentrasjoner
+konsentrasjonsleir
+konsentrasjonsleiren
+konsentrasjonsleirene
+konsentrasjonsleirens
+konsentrasjonsleirer
+konsentrer
+konsentrere
+konsentrerer
+konsentreres
+konsentrert
+konsentrerte
+konsentrisk
+konsept
+konsepta
+konseptene
+konsepter
+konseptet
+konseptets
+konsern
+konserna
+konsernene
+konserner
+konsernet
+konsernets
+konsert
+konserten
+konsertene
+konsertens
+konserter
+konsertliv
+konsertsal
+konsertsalen
+konsertsalene
+konsertsalens
+konsertsaler
+konservatisme
+konservatismen
+konservatismens
+konservativ
+konservative
+konservativt
+konservator
+konservatoren
+konservatorene
+konservatorens
+konservatorer
+konservefabrikk
+konservefabrikken
+konservefabrikkene
+konservefabrikkens
+konservefabrikker
+konservere
+konserverer
+konservering
+konserverings
+konservert
+konserverte
+konsesjon
+konsesjonen
+konsesjonene
+konsesjonens
+konsesjoner
+konsesjonslov
+konsesjonsloven
+konsesjonslovene
+konsesjonslovens
+konsesjonslover
+konsignasjon
+konsignasjonen
+konsignasjonene
+konsignasjonens
+konsignasjoner
+konsis
+konsistens
+konsistensen
+konsistensens
+konsistent
+konsolidere
+konsoliderer
+konsolidert
+konsoliderte
+konsoll
+konsollen
+konsollene
+konsollens
+konsoller
+konsonant
+konsonanten
+konsonantene
+konsonantens
+konsonanter
+konsonantforenkling
+konsonantforenklingen
+konsonantforenklingens
+konsortia
+konsortiene
+konsortier
+konsortiet
+konsortiets
+konsortium
+konspirasjon
+konspirasjonen
+konspirasjonene
+konspirasjonens
+konspirasjoner
+konspirere
+konspirerer
+konspirert
+konspirerte
+konstabel
+konstabelen
+konstabelens
+konstablene
+konstabler
+konstant
+konstante
+konstanten
+konstantens
+konstanter
+konstatere
+konstaterer
+konstatert
+konstaterte
+konstituere
+konstituerende
+konstituert
+konstitusjon
+konstitusjonell
+konstitusjonelle
+konstitusjonen
+konstitusjonene
+konstitusjonens
+konstitusjoner
+konstruere
+konstruert
+konstruerte
+konstruksjon
+konstruksjonen
+konstruksjonene
+konstruksjonens
+konstruksjoner
+konstruktiv
+konstruktive
+konstruktivt
+konstruktør
+konstruktøren
+konstruktørene
+konstruktørens
+konstruktører
+konsul
+konsulat
+konsulata
+konsulatene
+konsulater
+konsulatet
+konsulatets
+konsulen
+konsulene
+konsulens
+konsulent
+konsulenten
+konsulentene
+konsulentenes
+konsulentens
+konsulenter
+konsulentuttalelse
+konsulentuttalelsen
+konsulentuttalelsene
+konsulentuttalelsens
+konsulentuttalelser
+konsuler
+konsultasjon
+konsultasjonen
+konsultasjonene
+konsultasjonens
+konsultasjoner
+konsultativ
+konsultere
+konsulterer
+konsultert
+konsulterte
+konsum
+konsument
+konsumenten
+konsumentene
+konsumentens
+konsumenter
+konsumere
+konsumeres
+konsumet
+konsumets
+konsumprisindeks
+konsumprisindeksen
+konsumprisindeksens
+konsumprisstigning
+konsumprisstigningen
+konsumprisstigningens
+konsumpsjon
+konsumpsjonen
+konsumpsjonene
+konsumpsjonens
+konsumpsjoner
+konsumvare
+konsumvaren
+konsumvarene
+konsumvarens
+konsumvarer
+kont
+kontakt
+kontakte
+kontakten
+kontaktene
+kontaktens
+kontakter
+kontaktet
+kontaktflate
+kontaktflaten
+kontaktflatene
+kontaktflatens
+kontaktflater
+kontaktor
+kontaktoren
+kontaktorene
+kontaktorens
+kontaktorer
+kontaktutvalg
+kontaktutvalget
+kontaktutvalgets
+kontaminere
+kontaminerer
+kontaminert
+kontaminerte
+kontant
+kontantbeholdning
+kontantbeholdningen
+kontantbeholdningene
+kontantbeholdningens
+kontantbeholdninger
+kontantbeløp
+kontantbeløpet
+kontantbeløpets
+kontante
+kontanter
+kontantsjekk
+kontantsjekken
+kontantsjekkens
+kontemplasjon
+kontemplasjonen
+kontemplasjonene
+kontemplasjonens
+kontemplasjoner
+kontemplativ
+konti
+kontiene
+kontinent
+kontinenta
+kontinental
+kontinentalsokkel
+kontinentalsokkelen
+kontinentalsokkelens
+kontinentene
+kontinenter
+kontinentet
+kontinentets
+kontingent
+kontingenten
+kontingentene
+kontingentens
+kontingenter
+kontinuasjon
+kontinuasjonen
+kontinuasjonene
+kontinuasjonens
+kontinuasjoner
+kontinuere
+kontinuerer
+kontinuerlig
+kontinuerlige
+kontinuert
+kontinuerte
+kontinuitet
+kontinuiteten
+kontinuitetene
+kontinuitetens
+kontinuiteter
+kontinuum
+kontinuumet
+kontinuumets
+konto
+kontoen
+kontoens
+kontokurant
+kontokuranten
+kontokurantene
+kontokurantens
+kontokuranter
+kontor
+kontorarbeid
+kontorarbeider
+kontorarbeidet
+kontorarbeidets
+kontorautomasjon
+kontorautomasjonen
+kontorautomasjonens
+kontorautomasjoner
+kontorbygg
+kontorbygget
+kontorbyggets
+kontordame
+kontordamen
+kontordamene
+kontordamens
+kontordamer
+kontorene
+kontorenes
+kontorer
+kontoret
+kontorets
+kontorfunksjonær
+kontorfunksjonæren
+kontorfunksjonærene
+kontorfunksjonærens
+kontorfunksjonærer
+kontorist
+kontoristen
+kontoristene
+kontoristens
+kontorister
+kontorlokala
+kontorlokale
+kontorlokalene
+kontorlokaler
+kontorlokalet
+kontorlokalets
+kontormaskin
+kontormaskinen
+kontormaskinene
+kontormaskinens
+kontormaskiner
+kontormessig
+kontorpersonale
+kontorpersonalet
+kontorplass
+kontorplassen
+kontorplassene
+kontorplassens
+kontorplasser
+kontorsjef
+kontorsjefen
+kontorsjefene
+kontorsjefens
+kontorsjefer
+kontortid
+kontortida
+kontortiden
+kontortidens
+kontra
+kontrabande
+kontrabanden
+kontrabandens
+kontrabass
+kontrabassen
+kontrabassene
+kontrabassens
+kontrabasser
+kontrahent
+kontrahenten
+kontrahentene
+kontrahentens
+kontrahenter
+kontrahere
+kontraherer
+kontrahering
+kontraheringa
+kontraheringen
+kontraheringene
+kontraheringens
+kontraheringer
+kontrahert
+kontraherte
+kontraksjon
+kontraksjonen
+kontraksjonene
+kontraksjonens
+kontraksjoner
+kontrakt
+kontrakten
+kontraktene
+kontraktens
+kontrakter
+kontraktsforhandling
+kontraktsforhandlingen
+kontraktsforhandlingene
+kontraktsforhandlingens
+kontraktsforhandlinger
+kontrasignere
+kontrasignerer
+kontrasignert
+kontrasignerte
+kontrast
+kontrasten
+kontrastene
+kontrastens
+kontraster
+kontreadmiral
+kontreadmiralen
+kontreadmiralens
+kontroll
+kontrollen
+kontrollene
+kontrollens
+kontroller
+kontrollere
+kontrollerer
+kontrolleres
+kontrollert
+kontrollerte
+kontrollorgan
+kontrollorganer
+kontrollorganet
+kontrollorganets
+kontrollør
+kontrolløren
+kontrollørene
+kontrollørens
+kontrollører
+kontrolltegn
+kontrovers
+kontroversen
+kontroversene
+kontroversens
+kontroverser
+kontroversiell
+kontroversielle
+kontrær
+kontur
+konturen
+konturene
+konturens
+konturer
+konus
+konusen
+konusene
+konusens
+konuser
+konvall
+konvallen
+konvallene
+konvallens
+konvaller
+konveks
+konveniens
+konveniensen
+konveniensens
+konvensjon
+konvensjonell
+konvensjonelle
+konvensjonelt
+konvensjonen
+konvensjonene
+konvensjonens
+konvensjoner
+konvent
+konventa
+konventene
+konventer
+konventet
+konventets
+konvergens
+konvergensen
+konvergensene
+konvergensens
+konvergenser
+konvergent
+konverger
+konvergere
+konvergerer
+konversasjon
+konversasjonen
+konversasjonene
+konversasjonens
+konversasjoner
+konversere
+konverserer
+konversert
+konverserte
+konverter
+konvertere
+konverteren
+konverterens
+konverterer
+konverteres
+konverteringslån
+konvertert
+konvoi
+konvoien
+konvoiene
+konvoiens
+konvoier
+konvolutt
+konvolutten
+konvoluttene
+konvoluttens
+konvolutter
+konvulsjon
+konvulsjonen
+konvulsjonene
+konvulsjonens
+konvulsjoner
+kooperasjon
+kooperasjonen
+kooperasjonene
+kooperasjonens
+kooperasjoner
+kooperativ
+kooperative
+koordinasjon
+koordinasjonen
+koordinasjonene
+koordinasjonens
+koordinasjoner
+koordinat
+koordinaten
+koordinatene
+koordinatens
+koordinater
+koordinatsystem
+koordinatsystema
+koordinatsystemene
+koordinatsystemer
+koordinatsystemet
+koordinatsystemets
+koordinere
+koordinerende
+koordinerer
+koordinering
+koordineringa
+koordineringen
+koordineringens
+koordinert
+kope
+koper
+kopi
+kopien
+kopiene
+kopiens
+kopier
+kopiere
+kopierer
+kopieres
+kopiering
+kopieringa
+kopieringen
+kopieringens
+kopiert
+kopierte
+kopla
+kople
+koplene
+kopler
+koples
+koplet
+kopling
+kopp
+kopparr
+kopparra
+kopparret
+kopparrete
+kopparrets
+koppel
+koppelet
+koppelets
+koppen
+koppene
+koppens
+kopper
+kopperet
+kopperets
+kopplet
+kopplets
+kopra
+kopt
+kopte
+kor
+kora
+koral
+koralen
+koralene
+koralens
+koraler
+korall
+korallen
+korallene
+korallens
+koraller
+kord
+korden
+kordene
+kordens
+korder
+kordfløyel
+kordfløyelen
+kordfløyelens
+koreaner
+koreanere
+koreaneren
+koreanerens
+koreaneres
+koreanerne
+koreanernes
+koreansk
+korene
+koreograf
+koreografen
+koreografene
+koreografens
+koreografer
+koreografere
+koreograferer
+koreografert
+koreograferte
+koreografi
+koreografien
+koreografiens
+koret
+korets
+korg
+korga
+korgen
+korgene
+korgens
+korger
+korint
+korinten
+korintene
+korintens
+korinter
+kork
+korka
+korke
+korken
+korkens
+korker
+korketrekker
+korketrekkere
+korketrekkeren
+korketrekkerens
+korketrekkeres
+korketrekkerne
+korketrekkernes
+korn
+korna
+kornband
+kornbanda
+kornbandene
+kornbandet
+kornbandets
+kornene
+korner
+kornet
+kornete
+kornets
+kornett
+kornetten
+kornettene
+kornettens
+kornetter
+kornmat
+kornmaten
+kornmatens
+kornnek
+kornneket
+kornnekets
+korona
+koronaen
+koronaene
+koronaens
+koronaer
+korp
+korpen
+korpens
+korporal
+korporalen
+korporalene
+korporalens
+korporaler
+korporasjon
+korporasjonen
+korporasjonene
+korporasjonens
+korporasjoner
+korporlig
+korps
+korpsa
+korpsene
+korpset
+korpsets
+korpulent
+korpus
+korpusa
+korpusen
+korpusene
+korpusens
+korpuser
+korpuset
+korpusets
+korreks
+korreksen
+korreksene
+korreksens
+korrekser
+korreksjon
+korreksjonen
+korreksjonene
+korreksjonens
+korreksjoner
+korrekt
+korrekte
+korrektiv
+korrektiva
+korrektivene
+korrektiver
+korrektivet
+korrektivets
+korrektur
+korrekturen
+korrekturene
+korrekturens
+korrekturer
+korrekturlesing
+korrekturlesingen
+korrekturlesingens
+korrelasjon
+korrelasjonen
+korrelasjonene
+korrelasjonens
+korrelasjoner
+korrelere
+korrelerer
+korrelert
+korrelerte
+korrespondanse
+korrespondansen
+korrespondansens
+korrespondent
+korrespondenten
+korrespondentene
+korrespondentens
+korrespondenter
+korrespondere
+korresponderer
+korrespondert
+korresponderte
+korridor
+korridoren
+korridorene
+korridorens
+korridorer
+korriger
+korrigere
+korrigerer
+korrigeres
+korrigering
+korrigeringa
+korrigeringen
+korrigeringene
+korrigeringens
+korrigeringer
+korrigeringsfil
+korrigeringsfilen
+korrigeringsfilene
+korrigeringsfilens
+korrigeringsfiler
+korrigert
+korrigerte
+korrodere
+korroderer
+korrodert
+korroderte
+korrosjon
+korrosjonen
+korrosjonene
+korrosjonens
+korrosjoner
+korrugert
+korrupsjon
+korrupsjonen
+korrupsjonene
+korrupsjonens
+korrupsjoner
+korrupt
+kors
+korsar
+korsaren
+korsarene
+korsarens
+korsarer
+korset
+korsett
+korsetta
+korsettene
+korsetter
+korsettet
+korsettets
+korsfest
+korsfeste
+korsfestede
+korsfestelse
+korsfestelsen
+korsfestelsens
+korsfestet
+korsnebb
+korsnebben
+korsnebbens
+korsvei
+korsveien
+korsveiene
+korsveiens
+korsveier
+kort
+korte
+kortene
+korter
+kortere
+korterma
+kortes
+kortesje
+kortesjen
+kortesjens
+kortest
+korteste
+kortet
+kortfattet
+kortfilm
+kortfilmen
+kortfilmene
+kortfilmens
+kortfilmer
+kortform
+kortforma
+kortformen
+kortformene
+kortformens
+kortformer
+korthet
+kortheten
+korthetens
+kortleik
+kortleiken
+kortleikens
+kortsiktig
+kortsiktige
+kortslutning
+kortslutningen
+kortslutningens
+kortslutting
+kortsluttinga
+kortspell
+kortspill
+kortsynt
+kortvarig
+kortvokst
+korvett
+korvetten
+korvettene
+korvettens
+korvetter
+kos
+kosakk
+kosakken
+kosakkene
+kosakkens
+kosakker
+kose
+koselig
+koser
+kosmetikk
+kosmetikken
+kosmetikkens
+kosmetisk
+kosmetolog
+kosmetologen
+kosmetologene
+kosmetologens
+kosmetologer
+kosmisk
+kosmonaut
+kosmonauten
+kosmonautene
+kosmonautens
+kosmonauter
+kosmopolitisk
+kosmopolitt
+kosmopolitten
+kosmopolittene
+kosmopolittens
+kosmopolitter
+kosmos
+kosmoset
+kosmosets
+kost
+kostbar
+kostbare
+kostbart
+koste
+kostelig
+kostende
+koster
+kosteskaft
+kosteskafta
+kosteskaftene
+kosteskaftet
+kosteskaftets
+kostet
+kosthold
+kostholdet
+kostholdets
+kostnad
+kostnaden
+kostnadene
+kostnadens
+kostnader
+kostnadsutvikling
+kostnadsutviklinga
+kostnadsutviklingen
+kostnadsutviklingens
+kostyme
+kostymer
+kostymet
+økosystem
+økosystema
+økosystemene
+økosystemer
+økosystemet
+økosystemets
+kota
+kote
+kotelett
+koteletten
+kotelettene
+kotelettens
+koteletter
+koten
+kotene
+kotens
+koter
+kotiljong
+kotiljongen
+kotiljongene
+kotiljongens
+kotiljonger
+kott
+kotta
+kottene
+kottet
+kottets
+koven
+kovne
+kåpa
+kåpe
+kåpen
+kåpene
+kåpens
+kåper
+kr
+krå
+kår
+kråa
+kåra
+krabat
+krabaten
+krabatene
+krabatens
+krabater
+krabba
+krabbe
+krabben
+krabbene
+krabbens
+krabber
+krabbet
+krafs
+krafsa
+krafse
+krafset
+kraft
+krafta
+kraftblokk
+kraftblokken
+kraftblokkens
+kraften
+kraftenhet
+kraftenheten
+kraftenhetene
+kraftenhetens
+kraftenheter
+kraftens
+kraftig
+kraftige
+kraftigere
+kraftigst
+kraftigste
+kraftkilde
+kraftkilden
+kraftkildene
+kraftkildens
+kraftkilder
+kraftlinja
+kraftlinje
+kraftlinjen
+kraftlinjene
+kraftlinjens
+kraftlinjer
+kraftoverføring
+kraftoverføringa
+kraftoverføringen
+kraftoverføringens
+kraftstasjon
+kraftstasjonen
+kraftstasjonene
+kraftstasjonens
+kraftstasjoner
+krafttak
+krafttaket
+krafttakets
+kraftutbygging
+kraftutbygginga
+kraftutbyggingen
+kraftutbyggingene
+kraftutbyggingens
+kraftutbygginger
+kraftverk
+kraftverka
+kraftverkene
+kraftverket
+kraftverkets
+krage
+kragen
+kragens
+krak
+kraken
+krakene
+krakens
+kraker
+krakilsk
+krakk
+krakken
+krakkene
+krakkens
+krakker
+krakket
+krakkets
+kram
+krambu
+krambua
+krambuen
+krambuene
+krambuens
+krambuer
+kramme
+krammet
+krampaktig
+krampaktige
+krampe
+krampen
+krampene
+krampens
+kramper
+kramsa
+kramse
+kramser
+kramset
+kramsfugl
+kramsfuglen
+kramsfuglens
+kran
+krana
+krane
+kranen
+kranens
+kraner
+krangel
+krangelen
+krangelens
+krangle
+krangler
+kranglet
+kranglete
+krania
+kraniene
+kranier
+kranium
+krank
+kranken
+krankene
+krankens
+kranker
+krans
+kranse
+kransen
+kransens
+kranser
+krapp
+krappen
+krappene
+krappens
+krapper
+krapt
+krapyl
+krapylet
+krapylets
+krase
+kraser
+krasj
+krasja
+krasje
+krasjet
+krass
+krasse
+krast
+kraste
+krater
+krateret
+kraterets
+kratra
+kratre
+kratrene
+kratret
+kratrets
+kratt
+kratta
+krattene
+krattet
+krattets
+krattskog
+krattskogen
+krattskogens
+kraup
+krav
+krave
+kravellbygd
+kraven
+kravene
+kravet
+kravfull
+kravla
+kravle
+kravler
+kravlet
+kravstor
+kårde
+kården
+kårdens
+kre
+kåre
+kreasjon
+kreasjonen
+kreasjonene
+kreasjonens
+kreasjoner
+kreativ
+kreatur
+kreatura
+kreaturene
+kreaturer
+kreaturet
+kreaturets
+kredit
+kreditere
+kreditert
+krediterte
+kreditor
+kreditoren
+kreditorene
+kreditorens
+kreditorer
+kreditt
+kreditten
+kredittene
+kredittens
+kreditter
+kredittinstitusjon
+kredittinstitusjonen
+kredittinstitusjonene
+kredittinstitusjonens
+kredittinstitusjoner
+kredittkort
+kredittkorta
+kredittkortene
+kredittkortet
+kredittkortets
+kreere
+kreerer
+kreert
+kreerte
+kreet
+kreft
+kreften
+kreftene
+kreftens
+krefter
+krek
+kreke
+krekebær
+krekebæra
+krekebærene
+krekebæret
+krekebærets
+kreket
+krekling
+kreklingen
+kreklingene
+kreklingens
+kreklinger
+krem
+kremasjon
+kremasjonen
+kremasjonene
+kremasjonens
+kremasjoner
+krematoria
+krematoriene
+krematorier
+krematoriet
+krematoriets
+krematorium
+kremen
+kremens
+kremere
+kremert
+kremerte
+kremmer
+kremmere
+kremmeren
+kremmerens
+kremmeres
+kremmerne
+kremmernes
+kremt
+kremte
+kremten
+kremtens
+kremter
+kremtet
+åkrene
+krenge
+krenger
+krengning
+krengningen
+krengningens
+krenka
+krenke
+krenkelse
+krenkelsen
+krenkelsens
+krenker
+krenket
+kreosot
+kreosoten
+kreosotens
+krepere
+kreperer
+krepert
+kreperte
+krepp
+kreppa
+kreppen
+kreppens
+kreppnylon
+kreppnylonet
+kreppnylonets
+kreps
+krepsen
+krepsene
+krepsens
+krepser
+åkrer
+kåres
+kresen
+kresne
+kåret
+kreti
+krets
+kretse
+kretsen
+kretsene
+kretsens
+kretser
+kretsløp
+kretsløpa
+kretsløpene
+kretsløpet
+kretsløpets
+kretsmesterskap
+kretsmesterskapet
+kretsmesterskapets
+krev
+krevd
+krevde
+kreve
+krevende
+krever
+kreves
+krevet
+kri
+kribla
+krible
+kribler
+kriblet
+krig
+krige
+krigen
+krigens
+kriger
+krigere
+krigeren
+krigerens
+krigeres
+krigerne
+krigernes
+krigersk
+krigsårene
+krigsskip
+krigsskipa
+krigsskipene
+krigsskipet
+krigsskipets
+krigsskole
+krigsskolen
+krigsskolene
+krigsskolens
+krigsskoler
+krigstid
+krigstida
+krigstiden
+krigstidens
+krik
+kriken
+krikens
+kriker
+krikkand
+krikkanda
+krill
+krillen
+krillene
+krillens
+kriller
+kriminal
+kriminalisere
+kriminaliserer
+kriminalisert
+kriminaliserte
+kriminalitet
+kriminaliteten
+kriminalitetens
+kriminalpoliti
+kriminalpolitiet
+kriminalpolitiets
+kriminalreform
+kriminalreforma
+kriminalreformen
+kriminalreformene
+kriminalreformens
+kriminalreformer
+kriminalsjef
+kriminalsjefen
+kriminalsjefene
+kriminalsjefens
+kriminalsjefer
+kriminell
+kriminelle
+kriminelt
+krimsjuk
+kring
+kringkaste
+kringkasting
+kringkastinga
+kringkastingen
+kringkastingens
+kringkastingsråd
+kringkastingsrådet
+kringkastingsrådets
+kringkastingssjef
+kringkastingssjefen
+kringkastingssjefene
+kringkastingssjefens
+kringkastingssjefer
+kringla
+kringle
+kringlen
+kringlene
+kringlens
+kringler
+kringom
+kringsette
+kringsetter
+krinoline
+krinolinen
+krinolinens
+krins
+krinsa
+krinse
+krinsen
+krinsens
+krinset
+krise
+krisen
+krisens
+krisesituasjon
+krisesituasjonen
+krisesituasjonene
+krisesituasjonens
+krisla
+krisle
+krisler
+krislet
+krist
+kristelig
+kristelige
+kristen
+kristendom
+kristendommen
+kristendommens
+kristenhet
+kristenheten
+kristenhetens
+kristi
+kristiansunder
+kristiansundere
+kristiansunderen
+kristiansunderens
+kristiansunderes
+kristiansunderne
+kristiansundernes
+kristne
+kristnes
+kristtorn
+kristtornen
+kristtornene
+kristtornens
+kristtorner
+kriteria
+kriteriene
+kriterier
+kriteriet
+kriteriets
+kriterium
+kritiker
+kritikere
+kritikeren
+kritikerens
+kritikeres
+kritikerne
+kritikernes
+kritikk
+kritikken
+kritikkene
+kritikkens
+kritikker
+kritikkløst
+kritikkverdig
+kritiser
+kritisere
+kritiserer
+kritiseres
+kritisert
+kritiserte
+kritisk
+kritiske
+kritla
+kritle
+kritler
+kritlet
+kritt
+kritte
+krittet
+kråka
+kråke
+krøke
+kråken
+kråkene
+kråkens
+kråker
+krøker
+kråketær
+krøkla
+krøkle
+krøklene
+krøkler
+krøkt
+krøkte
+krøll
+krølla
+krølle
+krøllen
+krøllens
+krøller
+krøllet
+krøllete
+krøllfri
+krøllfrie
+krønika
+krønike
+krøniken
+krønikens
+kro
+kroa
+krodde
+kroen
+krok
+krokan
+krokanen
+krokanens
+kroke
+kroken
+krokene
+krokens
+kroker
+kroket
+krokete
+kroki
+krokia
+krokien
+krokiene
+krokiens
+krokier
+krokiet
+krokiets
+krokket
+krokketen
+krokketens
+krokketkula
+krokketkule
+krokketkulen
+krokketkulene
+krokketkulens
+krokketkuler
+krokodilla
+krokodille
+krokodillen
+krokodillene
+krokodillens
+krokodiller
+krokrygg
+krokrygga
+krokryggen
+krokryggens
+krokrygget
+krokus
+krokusen
+krokusene
+krokusens
+krokuser
+krom
+kromatisk
+krommet
+kromosom
+kromosoma
+kromosomene
+kromosomer
+kromosomet
+kromosomets
+krona
+kronblad
+kronbladene
+kronblader
+kronbladet
+kronbladets
+krone
+kronen
+kronens
+kroner
+kroners
+kronet
+krongle
+kronglet
+kronglete
+kronhjort
+kronhjorten
+kronhjortens
+kronikk
+kronikken
+kronikkene
+kronikkens
+kronikker
+kronikør
+kronikøren
+kronikørene
+kronikørens
+kronikører
+kroning
+kroninga
+kroningen
+kroningene
+kroningens
+kroninger
+kronisk
+kronologi
+kronologien
+kronologiene
+kronologiens
+kronologier
+kronologisk
+kronometer
+kronometeret
+kronometerets
+kronometra
+kronometre
+kronometrene
+kronometret
+kronometrets
+kronprins
+kronprinsen
+kronprinsene
+kronprinsens
+kronprinser
+kronprinsessa
+kronprinsesse
+kronprinsessen
+kronprinsessene
+kronprinsessens
+kronprinsesser
+kropp
+kroppen
+kroppene
+kroppens
+kropper
+kroppslig
+kroppslige
+kroppsøving
+kroppsøvinga
+kroppsøvingen
+kroppsøvingens
+krot
+krote
+krotet
+krotsaum
+krotsaumen
+krotsaumens
+krøp
+krøpet
+krøpling
+krøplingen
+krøplingene
+krøplingens
+krøplinger
+krær
+krås
+kråsen
+kråsene
+kråsens
+kråser
+krøtter
+krøttera
+krøtteret
+krøtterets
+krukka
+krukke
+krukken
+krukkene
+krukkens
+krukker
+krull
+krulla
+krullen
+krullene
+krullens
+kruller
+krullet
+krum
+krumme
+krumming
+krumminga
+krummingen
+krummingene
+krummingens
+krumminger
+krumning
+krumningen
+krumningene
+krumningens
+krumninger
+krungla
+krungle
+krunglet
+krunglete
+krus
+kruse
+krusedull
+krusedullen
+krusedullene
+krusedullens
+kruseduller
+krusen
+krusens
+kruset
+krusifiks
+krusifiksa
+krusifiksene
+krusifikser
+krusifikset
+krusifiksets
+krusle
+kruslet
+kruslete
+krusling
+kruslinga
+kruslingen
+kruslingens
+kruspersille
+krutt
+kruttet
+kruttets
+kry
+krybba
+krybbe
+krybben
+krybbens
+krydde
+krydder
+krydderet
+krydderets
+krydderi
+krydderia
+krydderiene
+krydderier
+krydderiet
+krydderiets
+krydra
+krydre
+krydret
+krykka
+krykke
+krykken
+krykkene
+krykkens
+krykker
+krykkja
+krykkje
+krykkjene
+krykkjer
+krympa
+krympe
+krympes
+krympet
+kryolitt
+kryolitten
+kryolittens
+kryp
+krype
+krypende
+kryper
+krypet
+krypskytter
+krypskyttere
+krypskytteren
+krypskytterens
+krypskytteres
+krypskytterne
+krypskytternes
+krypt
+krypten
+kryptene
+kryptens
+krypter
+krypton
+krysantemer
+krysantemum
+krysantemumen
+krysantemumene
+krysantemumens
+krysantemumer
+krysning
+krysningen
+krysningene
+krysningens
+krysninger
+kryss
+krysse
+kryssende
+krysser
+kryssere
+krysseren
+krysserens
+krysseres
+krysserne
+kryssernes
+krysset
+kryssforhør
+kryssing
+kryssinga
+kryssingen
+kryssingene
+kryssingens
+kryssinger
+kryssord
+kryssorda
+kryssordene
+kryssordet
+kryssordets
+krysstabell
+krysstabellen
+krysstabellene
+krysstabellens
+krysstabeller
+krystall
+krystallen
+krystallene
+krystallens
+krystaller
+krystallet
+krystallets
+krystallinsk
+krystallinske
+krystallisasjon
+krystallisasjonen
+krystallisasjonene
+krystallisasjonens
+krystallisasjoner
+krystallisere
+krystalliserer
+krystallisert
+krystalliserte
+krystallisk
+øks
+øksa
+økse
+øksehammar
+øksehammaren
+øksehammarens
+øksehammer
+øksehammeren
+øksehammerens
+øksen
+øksens
+økser
+kåsere
+kåserer
+kåseri
+kåseria
+kåseriene
+kåserier
+kåseriet
+kåseriets
+kåsert
+kåserte
+økseskaft
+økseskafta
+økseskaftene
+økseskaftet
+økseskaftets
+økset
+øksla
+øksle
+øksler
+økslet
+kåsør
+kåsøren
+kåsørene
+kåsørens
+kåsører
+kst
+kåt
+økt
+økta
+økte
+kåthet
+kåtheten
+kåthetens
+kåtleik
+kåtleiken
+kåtleikens
+ku
+kua
+kubaner
+kubanere
+kubaneren
+kubanerens
+kubaneres
+kubanerne
+kubanernes
+kubansk
+kubb
+kubba
+kubben
+kubbene
+kubbens
+kubber
+kubbestol
+kubbestolen
+kubbestolene
+kubbestolens
+kubbestoler
+kubbet
+kube
+kubein
+kubeinet
+kubeinets
+kuben
+kubene
+kubens
+kuber
+kubikk
+kubikken
+kubikkens
+kubikkfot
+kubikkmeter
+kubikkmeteren
+kubikkmeterens
+kubisk
+kubiske
+kubisme
+kubismen
+kubismens
+kue
+kuene
+kuer
+kufta
+kufte
+kuften
+kuftene
+kuftens
+kufter
+kujon
+kujonen
+kujonene
+kujonens
+kujoner
+kujonere
+kujonert
+kukelure
+kukelurer
+kukelurt
+kukelurte
+kul
+kulakk
+kulda
+kulde
+kuldegrad
+kuldegraden
+kuldegradene
+kuldegradens
+kuldegrader
+kulden
+kuldens
+kuldskjær
+kuldslå
+kule
+kuleformet
+kulen
+kulens
+kuler
+kulestøt
+kulestøtet
+kulestøtets
+kuli
+kulien
+kuliene
+kuliens
+kulier
+kulinarisk
+kuling
+kulingen
+kulingene
+kulingens
+kulinger
+kulingvarsel
+kulingvarselet
+kulingvarselets
+kulingvarslene
+kulingvarsler
+kulingvarslet
+kulingvarslets
+kulisse
+kulissen
+kulissene
+kulissens
+kulisser
+kull
+kulle
+kullet
+kullhydrat
+kullhydratene
+kullhydrater
+kullkaste
+kullkaster
+kullkastet
+kullos
+kullosen
+kullosens
+kullstoff
+kullstoffene
+kullstoffer
+kullstoffet
+kullstoffets
+kullsvart
+kullsyra
+kullsyre
+kullsyren
+kullsyrens
+kulminasjon
+kulminasjonen
+kulminasjonene
+kulminasjonens
+kulminasjoner
+kulminere
+kulminerer
+kulminert
+kulminerte
+kulp
+kulpen
+kulpene
+kulpens
+kulper
+kulør
+kuløren
+kulørens
+kulørt
+kulørte
+kuls
+kulsen
+kulsne
+kult
+kulten
+kultivere
+kultiverer
+kultivert
+kultiverte
+kultne
+kultstein
+kultsteinen
+kultsteinens
+kultur
+kulturdebatt
+kulturdebatten
+kulturdebattens
+kulturdepartement
+kulturdepartementet
+kulturdepartementets
+kulturell
+kulturelle
+kulturelt
+kulturen
+kulturens
+kulturer
+kulturfolk
+kulturfolkene
+kulturfolket
+kulturfolkets
+kulturfond
+kulturfondet
+kulturfondets
+kulturformål
+kulturhistorisk
+kulturhistoriske
+kulturliv
+kulturlivet
+kulturlivets
+kulturråd
+kulturråden
+kulturrådens
+kulturrådet
+kulturrådets
+kulturs
+kulturtradisjon
+kulturtradisjonen
+kulturtradisjonene
+kulturtradisjonens
+kulturtradisjoner
+kulturverdi
+kulturverdien
+kulturverdiene
+kulturverdiens
+kulturverdier
+kultus
+kultusen
+kultusene
+kultusens
+kultuser
+kulvert
+kulverten
+kulvertene
+kulvertens
+kulverter
+kum
+økumenisk
+økumeniske
+kumla
+kumle
+kumlen
+kumlene
+kumlens
+kumler
+kumme
+kummen
+kummens
+kummerlig
+kumulasjon
+kumulasjonen
+kumulasjonene
+kumulasjonens
+kumulasjoner
+kumulere
+kumulerer
+kumulert
+kumulerte
+kun
+kunde
+kundekrets
+kundekretsen
+kundekretsene
+kundekretsens
+kundekretser
+kunden
+kundene
+kundens
+kunder
+kundeservice
+kunne
+kunnet
+kunngjorde
+kunngjort
+kunngjøre
+kunngjøring
+kunngjøringa
+kunngjøringen
+kunngjøringens
+kunnskap
+kunnskapen
+kunnskapene
+kunnskapens
+kunnskaper
+kunst
+kunstart
+kunstarten
+kunstartene
+kunstartens
+kunstarter
+kunsten
+kunstene
+kunstens
+kunster
+kunstforening
+kunstforeninga
+kunstforeningen
+kunstforeningene
+kunstforeningens
+kunstforeninger
+kunstgjødsel
+kunstgjødselen
+kunstgjødselens
+kunstgjødsla
+kunsthandlere
+kunsthandleren
+kunsthandlerens
+kunsthåndverk
+kunsthåndverker
+kunsthåndverket
+kunsthåndverkets
+kunstig
+kunstige
+kunstindustri
+kunstindustrien
+kunstindustriens
+kunstløp
+kunstløper
+kunstløpet
+kunstløpets
+kunstner
+kunstnere
+kunstneren
+kunstnerens
+kunstneres
+kunstnerforbund
+kunstnerforbundet
+kunstnerforbundets
+kunstnerinne
+kunstnerinnen
+kunstnerinnene
+kunstnerinnens
+kunstnerinner
+kunstnerisk
+kunstneriske
+kunstnerne
+kunstnernes
+kunststykke
+kunststykket
+kunststykkets
+kunstverk
+kunstverkene
+kunstverker
+kunstverket
+kunstverkets
+kupeen
+kupeens
+kupert
+kuplene
+kupler
+kuplett
+kupletten
+kuplettene
+kuplettens
+kupletter
+kupong
+kupongen
+kupongene
+kupongens
+kuponger
+kupp
+kuppa
+kuppel
+kuppelen
+kuppelens
+kuppene
+kuppet
+kuppets
+kur
+kurant
+kurasje
+kurasjen
+kurasjens
+kurator
+kuratoren
+kuratorene
+kuratorens
+kuratorer
+kurder
+kurdere
+kurderen
+kurderens
+kurderes
+kurderne
+kurdernes
+kurdisk
+kure
+kuren
+kurens
+kurer
+kurere
+kureren
+kurerens
+kurerer
+kurert
+kurerte
+kuriosa
+kuriositet
+kuriositeten
+kuriositetene
+kuriositetens
+kuriositeter
+kuriosum
+kuriøs
+kuriøse
+kuriøst
+kurla
+kurle
+kurler
+kurlet
+kurre
+kurren
+kurrens
+kurs
+kursa
+kursdeltaker
+kursdeltakere
+kursdeltakeren
+kursdeltakerens
+kursdeltakeres
+kursdeltakerne
+kursdeltakernes
+kursen
+kursene
+kursens
+kurser
+kurset
+kursets
+kursfall
+kursfallet
+kursfallets
+kursiv
+kursiven
+kursivens
+kursiver
+kursivere
+kursiverer
+kursivert
+kursiverte
+kursleder
+kursledere
+kurslederen
+kurslederens
+kurslederes
+kurslederne
+kursledernes
+kurslokala
+kurslokale
+kurslokalene
+kurslokaler
+kurslokalet
+kurslokalets
+kursmateriale
+kursmaterialet
+kursmaterialets
+kursopplegg
+kursopplegget
+kursoppleggets
+kursorisk
+kursplan
+kursplanen
+kursplanene
+kursplanens
+kursplaner
+kurssenter
+kurssenteret
+kurssenterets
+kurssentra
+kurssentre
+kurssentrene
+kurssentret
+kurssentrets
+kursstigning
+kursstigningen
+kursstigningens
+kurssvingning
+kurssvingningen
+kurssvingningens
+kursus
+kursuset
+kursusets
+kursverdi
+kursverdien
+kursverdiens
+kursvirksomhet
+kursvirksomheten
+kursvirksomhetens
+kurtasje
+kurtasjen
+kurtasjens
+kurtisan
+kurtisaner
+kurtise
+kurtisen
+kurtisens
+kurtisere
+kurtiserer
+kurtisert
+kurtiserte
+kurv
+kurva
+kurven
+kurvene
+kurvens
+kurver
+kurvet
+kusina
+kusine
+kusinen
+kusinene
+kusinens
+kusiner
+kusk
+kusken
+kuskene
+kuskens
+kusker
+kusma
+kusmaen
+kusmaens
+kustus
+kustusen
+kustusens
+kusymra
+kusymre
+kusymrene
+kusymrer
+kut
+kute
+kutt
+kutta
+kutte
+kutter
+kuttere
+kutteren
+kutterens
+kutteres
+kutterne
+kutternes
+kuttet
+kutyme
+kutymen
+kutymens
+kuvende
+kuvending
+kuvendinga
+kuvendingen
+kuvendingens
+kuvert
+kuverten
+kuvertene
+kuvertens
+kuverter
+kuvøse
+kuvøsen
+kuvøsens
+kuvung
+kuvungen
+kuvungene
+kuvungens
+kuvunger
+kuwaiter
+kuwaitere
+kuwaiteren
+kuwaiterens
+kuwaiteres
+kuwaiterne
+kuwaiternes
+kuwaitsk
+kuøye
+kuøyet
+kvad
+kvada
+kvadene
+kvadet
+kvadets
+kvadrat
+kvadrata
+kvadratene
+kvadrater
+kvadratet
+kvadratets
+kvadratiske
+kvadratkilometer
+kvadratkilometeren
+kvadratkilometerens
+kvadratmeter
+kvadratmeteren
+kvadratmeterens
+kvadrere
+kvadrerer
+kvadrert
+kvadrerte
+kvae
+kvaen
+kvaens
+kvakk
+kvakkene
+kvakket
+kvakkets
+kvakksalver
+kvakksalvere
+kvakksalveren
+kvakksalverens
+kvakksalveres
+kvakksalverne
+kvakksalvernes
+kval
+kvalen
+kvalens
+kvaler
+kvalfangst
+kvalfangsten
+kvalfangstens
+kvalifikasjon
+kvalifikasjonen
+kvalifikasjonene
+kvalifikasjonens
+kvalifikasjoner
+kvalifiser
+kvalifisere
+kvalifiserer
+kvalifisering
+kvalifiseringa
+kvalifiseringen
+kvalifiseringens
+kvalifiseringskamp
+kvalifiseringskampen
+kvalifiseringskampene
+kvalifiseringskampens
+kvalifiseringskamper
+kvalifisert
+kvalifiserte
+kvalitativ
+kvalitative
+kvalitativt
+kvalitet
+kvaliteten
+kvalitetene
+kvalitetens
+kvaliteter
+kvalitetskontroll
+kvalitetskontrollen
+kvalitetskontrollene
+kvalitetskontrollens
+kvalitetskontroller
+kvalitetskrav
+kvalitetskravet
+kvalitetskravets
+kvalkjøtt
+kvalkjøttet
+kvalkjøttets
+kvalm
+kvalme
+kvalross
+kvalrossen
+kvalrossens
+kvalt
+kvalte
+kvamne
+kvann
+kvanna
+kvanne
+kvant
+kvanta
+kvantaene
+kvanten
+kvantene
+kvantens
+kvanter
+kvantitativ
+kvantitative
+kvantitativt
+kvantitet
+kvantiteten
+kvantitetene
+kvantitetens
+kvantiteter
+kvantum
+kvantumet
+kvantumets
+kvapp
+kvapset
+kvapsete
+kvare
+kvart
+kvartal
+kvartala
+kvartalene
+kvartaler
+kvartalet
+kvartalets
+kvartalsoppgjør
+kvartalsoppgjøret
+kvartalsoppgjørets
+kvarte
+kvarten
+kvartens
+kvarter
+kvarterer
+kvarteret
+kvarterets
+kvarters
+kvartett
+kvartetten
+kvartettene
+kvartettens
+kvartetter
+kvartfinale
+kvartfinalen
+kvartfinalene
+kvartfinalens
+kvartfinaler
+kvartærtid
+kvartærtida
+kvartærtiden
+kvartærtidens
+kvarts
+kvartsen
+kvartsens
+kvartsskifer
+kvartsskiferen
+kvartsskiferens
+kvarv
+kvarva
+kvarvene
+kvarvet
+kvarvets
+kvase
+kvasen
+kvasens
+kvass
+kvasse
+kvassere
+kvast
+kvasten
+kvastene
+kvastens
+kvaster
+kvede
+kvedet
+kveg
+kveger
+kveget
+kvegets
+kveik
+kveike
+kveiken
+kveikens
+kveiket
+kveil
+kveila
+kveilen
+kveilene
+kveilens
+kveiler
+kveilet
+kvein
+kveina
+kveinene
+kveiner
+kveis
+kveisa
+kveise
+kveiset
+kveisete
+kveita
+kveite
+kveitebolle
+kveitebollen
+kveitebollens
+kveitebrød
+kveitebrødet
+kveitebrødets
+kveiten
+kveitene
+kveitens
+kveiter
+kveka
+kveke
+kveken
+kveker
+kvekere
+kvekeren
+kvekerens
+kvekeres
+kvekerne
+kvekernes
+kvekk
+kvekka
+kvekke
+kvekken
+kvekkent
+kvekket
+kvekne
+kvekt
+kveld
+kvelde
+kvelden
+kveldene
+kveldens
+kvelder
+kvelding
+kveldinga
+kveldingen
+kveldingens
+kvelds
+kveldskurs
+kveldskursene
+kveldskurser
+kveldskurset
+kveldskursets
+kveldsmat
+kveldsmaten
+kveldsmatens
+kveldsmøta
+kveldsmøte
+kveldsmøtene
+kveldsmøter
+kveldsmøtet
+kveldsmøtets
+kveldsnytt
+kveldsskole
+kveldsskolen
+kveldsskolens
+kveldstid
+kveldstida
+kveldstiden
+kveldstidens
+kveldstime
+kveldstimen
+kveldstimene
+kveldstimens
+kveldstimer
+kvele
+kveler
+kvelt
+kvelte
+kvelv
+kvelve
+kvelven
+kvelvens
+kvelvet
+kvelving
+kvelvinga
+kvelvingen
+kvelvingene
+kvelvingens
+kvelvinger
+kven
+kvenen
+kvenene
+kvenens
+kvener
+kvensk
+kvepne
+kvepp
+kveppe
+kveppen
+kveppent
+kveppet
+kverk
+kverka
+kverke
+kverken
+kverkens
+kverket
+kvern
+kverna
+kverne
+kvernen
+kvernens
+kvernkall
+kvernkallen
+kvernkallene
+kvernkallens
+kvernkaller
+kverrsette
+kversill
+kversilla
+kverulanse
+kverulansen
+kverulansens
+kverulant
+kverulanten
+kverulantene
+kverulantens
+kverulanter
+kverulere
+kverulerer
+kverulert
+kverulerte
+kverv
+kverve
+kvervet
+kvese
+kveser
+kvesse
+kvesst
+kvesste
+kvest
+kveste
+kvestor
+kvestoren
+kvestorene
+kvestorens
+kvestorer
+kvestur
+kvestura
+kvesturene
+kvesturer
+kvesturet
+kvesturets
+kvi
+kvidde
+kvide
+kvidefull
+kvidefult
+kviden
+kvidene
+kvidens
+kvider
+kvie
+kvier
+kviga
+kvige
+kvigen
+kvigene
+kvigens
+kviger
+kvikende
+kvikendet
+kvikk
+kvikke
+kvikkleire
+kvikksand
+kvikksanden
+kvikksandens
+kvikksølv
+kvikksølvet
+kvikksølvets
+kvikna
+kvikne
+kviknet
+kvikt
+kvil
+kvila
+kvile
+kvileheim
+kvileheimen
+kvileheimene
+kvileheimens
+kvileheimer
+kvilehjem
+kvilehjemma
+kvilehjemmene
+kvilehjemmet
+kvilehjemmets
+kvilen
+kvilende
+kvilens
+kvilepause
+kvilepausen
+kvilepausene
+kvilepausens
+kvilepauser
+kvileperiode
+kvileperioden
+kvileperiodens
+kviler
+kvilt
+kvilte
+kvin
+kvinen
+kvinens
+kvinka
+kvinke
+kvinker
+kvinket
+kvinn
+kvinna
+kvinnas
+kvinne
+kvinneforening
+kvinneforeninga
+kvinneforeningen
+kvinneforeningene
+kvinneforeningens
+kvinneforeninger
+kvinneklinikk
+kvinneklinikken
+kvinneklinikkene
+kvinneklinikkens
+kvinneklinikker
+kvinnelig
+kvinnelige
+kvinnen
+kvinnene
+kvinnenes
+kvinnens
+kvinner
+kvinners
+kvinnes
+kvinnfolk
+kvinnfolka
+kvinnfolkene
+kvinnfolket
+kvinnfolkets
+kvint
+kvinten
+kvintene
+kvintens
+kvinter
+kvintessens
+kvintessensen
+kvintessensens
+kvintett
+kvintetten
+kvintettene
+kvintettens
+kvintetter
+kvise
+kviset
+kvisete
+kviskra
+kviskre
+kviskret
+kvist
+kviste
+kvisten
+kvistens
+kvister
+kvit
+kvite
+kvitel
+kvitelen
+kvitelens
+kviten
+kviting
+kvitingen
+kvitingene
+kvitingens
+kvitinger
+kvitlene
+kvitler
+kvitmetall
+kvitmetallet
+kvitmetallets
+kvitne
+kvitre
+kvitret
+kvitsunnhelg
+kvitsunnhelga
+kvitsymra
+kvitsymre
+kvitsymrene
+kvitsymrer
+kvitt
+kvitta
+kvitte
+kvitter
+kvittere
+kvitteret
+kvittering
+kvitteringa
+kvitteringen
+kvitteringens
+kvittert
+kvitterte
+kvittet
+kvitveis
+kvitveisen
+kvitveisene
+kvitveisens
+kvitveiser
+kvitvin
+kvitvinen
+kvitvinens
+kvote
+kvoten
+kvotens
+kvotere
+kvoterer
+kvotert
+kvoterte
+kvotient
+kvotienten
+kvotientene
+kvotientens
+kvotienter
+køy
+køya
+kybernetikk
+kybernetikken
+kybernetikkens
+kybernetisk
+køye
+køyen
+køyens
+køyet
+kykeliky
+kykelikya
+kykelikyene
+kykelikyer
+kykelikyet
+kykelikyets
+kyle
+kyler
+kylling
+kyllingen
+kyllingene
+kyllingens
+kyllinger
+kylt
+kylte
+kyndelsmess
+kyndelsmesse
+kyndig
+kyndige
+kyndighet
+kyndigheten
+kyndighetens
+kyniker
+kynikere
+kynikeren
+kynikerens
+kynikeres
+kynikerne
+kynikernes
+kynisk
+kyniske
+kynisme
+kynismen
+kynismens
+kypriot
+kyprioten
+kypriotene
+kypriotens
+kyprioter
+kypriotisk
+kypriotiske
+kyr
+kyrass
+kyrassa
+kyrassene
+kyrasser
+kyrasset
+kyrassets
+kyrne
+køys
+kysa
+kyse
+kysen
+kysene
+kysens
+kyser
+kysk
+kyske
+kyskhet
+kyskheten
+kyskhetens
+kyskt
+kyss
+kyssa
+kysse
+kyssen
+kyssens
+kysser
+kysset
+kysst
+kysste
+kyst
+kysten
+kystene
+kystens
+kyster
+kyt
+kyte
+kytet
+kytt
+kytte
+l
+lå
+lø
+ål
+øl
+la
+åla
+lab
+laban
+labanen
+labanene
+labanens
+labaner
+labank
+labanken
+labankene
+labankens
+labanker
+labb
+labbe
+labbelensk
+labbelensken
+labbelenskens
+labben
+labbens
+laber
+labert
+labil
+labile
+labilt
+laborant
+laboranten
+laborantene
+laborantens
+laboranter
+laboratoriene
+laboratorier
+laboratoriesjef
+laboratoriesjefen
+laboratoriesjefene
+laboratoriesjefens
+laboratoriesjefer
+laboratoriet
+laboratoriets
+laboratorieøving
+laboratorieøvinga
+laboratorieøvingen
+laboratorieøvingens
+laboratorium
+labour
+labre
+labyrint
+labyrinten
+labyrintene
+labyrintens
+labyrinter
+lad
+ladd
+ladde
+lade
+ladejarl
+ladejarlen
+ladejarlens
+lader
+ladested
+ladestedet
+ladestedets
+ladestokk
+ladestokken
+ladestokkens
+ladet
+ladning
+ladningen
+ladningens
+lady
+ladyen
+ladyene
+ladyens
+ladyer
+ladylike
+laft
+lafte
+laftet
+lag
+laga
+lagarbeid
+lagarbeidet
+lagarbeidets
+lagasild
+lagasilda
+lagd
+lagdeling
+lagdelinga
+lagdelingen
+lagdelingens
+lagdelt
+lagdommer
+lagdommere
+lagdommeren
+lagdommerens
+lagdommeres
+lagdommerne
+lagdommernes
+lage
+lagene
+lagenes
+lager
+lagerbehov
+lageret
+lagerets
+lagermetall
+lagermetallet
+lagermetallets
+lagerplass
+lagerplassen
+lagerplassene
+lagerplassens
+lagerplasser
+lagerskur
+lagerskura
+lagerskurene
+lagerskuret
+lagerskurets
+lages
+laget
+lagets
+lagga
+lagge
+laggen
+laggene
+laggens
+lagger
+lagget
+laginnsats
+laginnsatsen
+laginnsatsens
+lagkaptein
+lagkapteinen
+lagkapteinens
+lagkonkurranse
+lagkonkurransen
+lagkonkurransens
+lagledelse
+lagledelsen
+lagledelsens
+lagleder
+lagledere
+laglederen
+laglederens
+laglederes
+laglederne
+lagledernes
+laglig
+lagmann
+lagmannen
+lagmannens
+lagmannsrett
+lagmannsretten
+lagmannsrettens
+lagmenn
+lagmennene
+lagmennenes
+lagmenns
+lagnad
+lagnaden
+lagnadene
+lagnadens
+lagnader
+lagnadstung
+lagnadstunge
+lagnadstungt
+lagom
+lagoppstilling
+lagoppstillingen
+lagoppstillingens
+lagre
+lagrene
+lagrer
+lagres
+lagret
+lagrett
+lagrettemann
+lagrettemannen
+lagrettemannens
+lagrettemenn
+lagrettemennene
+lagrettemennenes
+lagrettemenns
+lagretten
+lagrettens
+lagring
+lagringa
+lagringen
+lagringene
+lagringens
+lagringer
+lags
+lagseier
+lagseieren
+lagseierens
+lagseirene
+lagspillere
+lagspilleren
+lagspillerens
+lagt
+lagting
+lagtinget
+lagtingets
+lagtingspresident
+lagune
+lagunen
+lagunens
+lake
+lakei
+lakeien
+lakeiene
+lakeiens
+lakeier
+laken
+lakena
+lakene
+lakenene
+lakener
+lakenet
+lakenets
+lakens
+laker
+lakk
+lakke
+lakken
+lakkens
+lakker
+lakkere
+lakkerer
+lakkert
+lakkerte
+lakmus
+lakmusen
+lakmusens
+lakonisk
+lakris
+lakrisen
+lakrisene
+lakrisens
+lakriser
+laks
+laksen
+laksene
+laksens
+lakser
+lakserolja
+lakserolje
+laksetrapp
+laksetrappa
+laksetrapper
+lakune
+lakunen
+lakunene
+lakunens
+lakuner
+lam
+lama
+lamaen
+lamaene
+lamaens
+lamaer
+lamell
+lamellen
+lamellene
+lamellens
+lameller
+laminat
+laminata
+laminatene
+laminater
+laminatet
+laminatets
+laminere
+laminert
+laminerte
+lamma
+lamme
+lammene
+lammet
+lampa
+lampe
+lampefeber
+lampefeberen
+lampefeberens
+lampen
+lampene
+lampens
+lamper
+lampett
+lampetten
+lampettene
+lampettens
+lampetter
+lampeveke
+lamslå
+lamslo
+lamslått
+lamt
+land
+landa
+landas
+landbasert
+landbruk
+landbruker
+landbruket
+landbrukets
+landbruksareal
+landbruksarealer
+landbruksarealet
+landbruksarealets
+landbruksbank
+landbruksbanken
+landbruksbankens
+landbruksdepartement
+landbruksdepartementet
+landbruksdepartementets
+landbrukshøgskole
+landbrukshøgskolen
+landbrukshøgskolens
+landbrukshøyskole
+landbrukshøyskolen
+landbrukshøyskolens
+landbruksminister
+landbruksministeren
+landbruksministerens
+landbruksministrene
+landbruksselskap
+landbruksselskapa
+landbruksselskapene
+landbruksselskaper
+landbruksselskapet
+landbruksselskapets
+landbruksvitenskapelig
+landbruksvitenskapelige
+landdistrikt
+landdistrikta
+landdistriktene
+landdistrikter
+landdistriktet
+landdistriktets
+lande
+landene
+landenes
+landeplage
+landeplagen
+landeplagens
+landet
+landets
+landeveg
+landevegen
+landevegene
+landevegens
+landeveger
+landevei
+landeveien
+landeveiene
+landeveiens
+landeveier
+landevinning
+landevinninga
+landevinningen
+landevinningens
+landevinninger
+landfeste
+landfestet
+landhandel
+landhandelen
+landhandelens
+landing
+landinga
+landingen
+landingens
+landingsplass
+landingsplassen
+landingsplassene
+landingsplassens
+landingsplasser
+landlov
+landloven
+landlovens
+landmåler
+landmålere
+landmåleren
+landmålerens
+landmåleres
+landmålerne
+landmålernes
+landnåm
+landnåmet
+landnåmets
+landnåmsmann
+landnåmsmannen
+landnåmsmannens
+landnåmsmenn
+landnåmsmennene
+landnåmsmennenes
+landnåmsmenns
+landområde
+landområdene
+landområder
+landområdet
+landområdets
+lands
+landsbasis
+landsby
+landsbyen
+landsbyene
+landsbyens
+landsbyer
+landsbygd
+landsbygda
+landsbygden
+landsbygdene
+landsbygdens
+landsdel
+landsdelen
+landsdelene
+landsdelens
+landsdeler
+landsens
+landsforbund
+landsforbunds
+landsforening
+landsforeninga
+landsforeningen
+landsforeningene
+landsforeningens
+landsforeninger
+landsforræder
+landsforrædere
+landsforræderen
+landsforræderens
+landsforræderes
+landsforræderne
+landsforrædernes
+landskamp
+landskampen
+landskampene
+landskampens
+landskamper
+landskap
+landskapa
+landskapene
+landskaper
+landskapet
+landskapets
+landskonferanse
+landskonferansen
+landskonferansens
+landskyld
+landskylda
+landskylden
+landskyldens
+landslag
+landslaga
+landslagene
+landslaget
+landslagets
+landsmann
+landsmannen
+landsmannens
+landsmenn
+landsmennene
+landsmennenes
+landsmenns
+landsmålestokk
+landsmålestokken
+landsmålestokkens
+landsmøte
+landsmøter
+landsmøtet
+landsomfattende
+landsorganisasjon
+landsorganisasjonen
+landsorganisasjonene
+landsorganisasjonens
+landsorganisasjoner
+landsstyre
+landsstyremøta
+landsstyremøte
+landsstyremøtene
+landsstyremøter
+landsstyremøtet
+landsstyremøtets
+landsstyret
+landssvik
+landssviker
+landssviket
+landssvikets
+landsted
+landstedene
+landsteder
+landstedet
+landstedets
+landsting
+landstinget
+landstingets
+landsynning
+landsynningen
+landsynningens
+landtur
+landverts
+landvinning
+landvinninga
+landvinningen
+landvinningens
+lang
+langdryg
+lange
+langeleik
+langeleiken
+langeleikene
+langeleikens
+langeleiker
+langfingra
+langfingret
+langfredag
+langfredagen
+langfredagens
+langfredagsstille
+langhåra
+langhåret
+langmodig
+langrenn
+langrenna
+langrennene
+langrennet
+langrennets
+langs
+langsetter
+langsiktig
+langsiktige
+langslede
+langsleden
+langsledens
+langsmed
+langsom
+langsomme
+langsomst
+langsomt
+langstrakt
+langstrakte
+langt
+langtekkelig
+langtfra
+langtrukken
+langtrukkent
+langvarig
+langvarige
+langveisfra
+lanolin
+lanolinen
+lanolinens
+lansa
+lanse
+lansen
+lansene
+lansens
+lanser
+lansere
+lanseres
+lansert
+lanserte
+lansett
+lansetten
+lansettene
+lansettens
+lansetter
+lantanet
+lanterna
+lanterne
+lanternen
+lanternene
+lanternens
+lanterner
+laot
+laoten
+laotene
+laotens
+laoter
+laotisk
+lapis
+lapisen
+lapisens
+lapp
+lappe
+lappen
+lappene
+lappens
+lapper
+lappverk
+lappverket
+lappverkets
+laps
+lapsen
+lapsene
+lapsens
+lapser
+lapset
+lapsete
+lapskaus
+lapskausen
+lapskausene
+lapskausens
+lapskauser
+lapsus
+lapsusen
+lapsusene
+lapsusens
+lapsuser
+lar
+largo
+largoen
+largoene
+largoens
+largoer
+larm
+larma
+larmen
+larmens
+larmer
+larmet
+larva
+larve
+larven
+larvene
+larvens
+larver
+larvet
+laryngitt
+laryngitten
+laryngittens
+las
+lasarett
+lasaretta
+lasarettene
+lasaretter
+lasarettet
+lasarettets
+lasaron
+lasaronen
+lasaronene
+lasaronens
+lasaroner
+lase
+laser
+lasere
+laseren
+laserens
+laseres
+laserne
+lasernes
+laserskriver
+laserskrivere
+laserskriveren
+laserskriverens
+laserskriveres
+laserskriverne
+laserskrivernes
+laserstråle
+laserstrålen
+laserstrålens
+laset
+lasete
+lass
+lassa
+lassene
+lasset
+lassets
+lassis
+lassisen
+lassisene
+lassisens
+lassiser
+lasso
+lassoen
+lassoene
+lassoens
+lassoer
+last
+lasta
+laste
+lastebil
+lastebileiere
+lastebileieren
+lastebileierens
+lastebilen
+lastebilene
+lastebilens
+lastebiler
+lastebåt
+lastebåten
+lastebåtene
+lastebåtens
+lastebåter
+lasteevne
+lasteevnen
+lasteevnens
+lasten
+lastens
+laster
+lasterom
+lasteromma
+lasterommene
+lasterommet
+lasterommets
+lastes
+lasteskip
+lasteskipa
+lasteskipene
+lasteskipet
+lasteskipets
+lastet
+lastevogn
+lastevogna
+lastevognen
+lastevognene
+lastevognens
+lastevogner
+lasting
+lastinga
+lastingen
+lastokk
+lastokken
+lastokkens
+lastverdig
+lastverk
+lastverket
+lastverkets
+lasur
+lasuren
+lasurene
+lasurens
+lasurer
+lat
+late
+lateks
+lateksen
+lateksens
+latent
+latente
+later
+latin
+latinamerikansk
+latinen
+latinens
+latiner
+latinsk
+latinske
+latitude
+latituden
+latitudens
+latrina
+latrine
+latrinen
+latrinene
+latrinens
+latriner
+latskap
+latskapen
+latskapens
+latt
+latter
+latteren
+latterens
+latterlig
+latterlige
+lattermild
+latvier
+latviere
+latvieren
+latvierens
+latvieres
+latvierne
+latviernes
+latvisk
+laud
+laudabel
+laudabelt
+laudabilis
+laudable
+lauden
+laudene
+laudens
+lauder
+laug
+lauge
+lauget
+laugets
+laup
+laupen
+laupene
+laupens
+lauper
+laurbær
+laurbærblad
+laurbærbladene
+laurbærblader
+laurbærbladet
+laurbærbladets
+laurbærene
+laurbæret
+laurbærets
+laus
+lause
+lausgjenger
+lausgjengere
+lausgjengeren
+lausgjengerens
+lausgjengeres
+lausgjengerne
+lausgjengernes
+lauslate
+lauslater
+lauslatt
+lauslatte
+lausøre
+lausøret
+laust
+lauv
+lauva
+lauvene
+lauver
+lauvet
+lauvets
+lauvfall
+lauvfallet
+lauvfallets
+lav
+lava
+lavaen
+lavaene
+lavaens
+lavaer
+lave
+lavendel
+lavendelen
+lavendelens
+lavere
+laverer
+lavert
+laverte
+lavest
+laveste
+lavet
+lavett
+lavetten
+lavettene
+lavettens
+lavetter
+lavine
+lavinen
+lavinens
+lavland
+lavlanda
+lavlandene
+lavlandet
+lavlandets
+lavlønnsgruppa
+lavlønnsgruppe
+lavlønnsgruppen
+lavlønnsgruppene
+lavlønnsgruppens
+lavlønnsgrupper
+lavlønt
+lavmælt
+lavskrike
+lavslette
+lavspent
+lavt
+lavtlønnet
+lavtrykk
+lavtrykka
+lavtrykkene
+lavtrykket
+lavtrykkets
+lavvann
+lavvannet
+lavvannets
+layout
+layouten
+layoutene
+layoutens
+layouter
+Ålborg
+lød
+lødd
+lødde
+lødig
+le
+løe
+åle
+øle
+lealaus
+lealause
+lealaust
+ølebrød
+ølebrødet
+ølebrødets
+led
+ledd
+ledda
+leddene
+leddet
+leddets
+leddik
+leddiken
+leddikene
+leddikens
+leddiker
+leddsetning
+leddsetningen
+leddsetningene
+leddsetningens
+leddsetninger
+lede
+ledelse
+ledelsen
+ledelsens
+ledende
+leder
+ledere
+lederen
+lederens
+lederne
+ledernes
+lederplass
+lederplassen
+lederplassene
+lederplassens
+lederplasser
+lederskikkelse
+lederskikkelsen
+lederskikkelsene
+lederskikkelsens
+lederskikkelser
+lederstilling
+lederstillingen
+lederstillingene
+lederstillingens
+lederstillinger
+ledes
+ledet
+ledig
+ledige
+lediggang
+lediggangen
+lediggangens
+lediggjenger
+lediggjengere
+lediggjengeren
+lediggjengerens
+lediggjengeres
+lediggjengerne
+lediggjengernes
+ledighet
+ledigheten
+ledighetens
+leding
+ledinga
+ledingen
+ledingens
+ledning
+ledningen
+ledningene
+ledningens
+ledninger
+ledsage
+ledsager
+ledsagere
+ledsageren
+ledsagerens
+ledsageres
+ledsagerne
+ledsagernes
+ledsages
+ledsaget
+ledtog
+ledtoget
+ledtogets
+lee
+lefla
+lefle
+lefler
+leflet
+lefsa
+lefse
+lefsene
+lefser
+leg
+legal
+legale
+legalisere
+legalisert
+legaliserte
+legalitet
+legaliteten
+legalitetens
+legalt
+legasjon
+legasjonen
+legasjonene
+legasjonens
+legasjoner
+legasjonssekretær
+legasjonssekretæren
+legasjonssekretærens
+legat
+legata
+legaten
+legatene
+legatens
+legater
+legatet
+legatets
+legd
+legda
+legde
+legdekall
+legdekallen
+legdekallene
+legdekallens
+legdekaller
+lege
+legeattest
+legeattesten
+legeattestene
+legeattestens
+legeattester
+legebehandling
+legebehandlinga
+legebehandlingen
+legebehandlingens
+legedistrikt
+legedistriktet
+legedistriktets
+legehjelp
+legehjelpen
+legehjelpens
+legeme
+legemer
+legemet
+legemidler
+legemlige
+legemsfeil
+legemsfeilen
+legemsfeilens
+legen
+legendarisk
+legendariske
+legende
+legenden
+legendene
+legendens
+legender
+legene
+legens
+leger
+legeråd
+legeråda
+legeråden
+legerådens
+legere
+legerer
+legering
+legeringa
+legeringen
+legeringens
+legers
+legert
+legerte
+leget
+legetjeneste
+legetjenesten
+legetjenestene
+legetjenestens
+legetjenester
+legevakt
+legevakta
+legevakten
+legevaktens
+legg
+legge
+leggen
+leggens
+legger
+legges
+legging
+leggingen
+leggingens
+legio
+legion
+legionen
+legionene
+legionens
+legioner
+legitim
+legitimasjon
+legitimasjonen
+legitimasjonene
+legitimasjonens
+legitimasjoner
+legitimere
+legitimert
+legitimerte
+legitimt
+legmann
+legmannen
+legmannens
+legmenn
+legmennene
+legmennenes
+legmenns
+legning
+legningen
+legningens
+legt
+lei
+leia
+leid
+leidang
+leidangen
+leidangens
+leidanger
+leide
+leider
+leidere
+leideren
+leiderens
+leideres
+leiderne
+leidernes
+leidet
+leie
+leieavtale
+leieavtalen
+leieavtalene
+leieavtalens
+leieavtaler
+leieboer
+leieboere
+leieboeren
+leieboerens
+leieboeres
+leieboerne
+leieboernes
+leiebuer
+leiebuere
+leiebueren
+leiebuerens
+leiebueres
+leiebuerne
+leiebuernes
+leiegård
+leiegården
+leiegårdene
+leiegårdens
+leiegårder
+leien
+leier
+leieren
+leierens
+leies
+leiet
+leiing
+leiinga
+leiingen
+leik
+leika
+leikarring
+leikarringen
+leikarringene
+leikarringens
+leikarringer
+leiken
+leikene
+leikent
+leikeplass
+leikeplassen
+leikeplassene
+leikeplassens
+leikeplasser
+leiketøy
+leiketøya
+leiketøyet
+leiketøyets
+leikne
+leikotek
+leikoteka
+leikotekene
+leikoteker
+leikoteket
+leikotekets
+leikt
+leikte
+leilending
+leilendingen
+leilendingene
+leilendingens
+leilendinger
+leilighet
+leiligheten
+leilighetene
+leilighetens
+leiligheter
+leilighetsvis
+leir
+leira
+leire
+leiren
+leirene
+leirens
+leiret
+leirete
+leirfivel
+leirfivelen
+leirfivelens
+leirfivlene
+leirfivler
+leirskole
+leirskolen
+leirskolens
+leit
+leite
+leitet
+leiv
+leiven
+leivene
+leivens
+leiver
+lek
+lekdommer
+lekdommere
+lekdommeren
+lekdommerens
+lekdommeres
+lekdommerne
+lekdommernes
+leke
+leken
+lekende
+lekene
+lekens
+lekent
+lekeplass
+lekeplassen
+lekeplassene
+lekeplassens
+lekeplasser
+leker
+leketøy
+leketøyet
+leketøyets
+lekk
+lekkasje
+lekkasjen
+lekkasjene
+lekkasjens
+lekkasjer
+lekke
+lekken
+lekkens
+lekker
+lekkerbisken
+lekkerbiskenen
+lekkerbiskenene
+lekkerbiskenens
+lekkerbiskener
+lekkert
+lekket
+lekmann
+lekmannen
+lekmannens
+lekmenn
+lekmennene
+lekmennenes
+lekmenns
+lekne
+ålekone
+lekotek
+lekoteka
+lekotekene
+lekoteker
+lekoteket
+lekotekets
+lekpredikant
+lekpredikanten
+lekpredikantene
+lekpredikantens
+lekpredikanter
+lekre
+leksa
+lekse
+leksen
+leksene
+leksens
+lekser
+lekset
+leksika
+leksikaene
+leksikalsk
+leksikon
+leksikonet
+leksikonets
+leksjon
+leksjonen
+leksjonene
+leksjonens
+leksjoner
+lekt
+lekta
+lekten
+lektene
+lektens
+lekter
+lektere
+lekteren
+lekterens
+lekteres
+lekterne
+lekternes
+lektor
+lektorat
+lektoratene
+lektorater
+lektoratet
+lektoratets
+lektoren
+lektorene
+lektorens
+lektorer
+lektorlag
+lektorlaget
+lektorlagets
+lektyre
+lektyren
+lektyrens
+lell
+lem
+lemen
+lemenet
+lemenets
+lemenår
+lemens
+lemfeldig
+lemlesta
+lemleste
+lemlestet
+lemme
+lemmen
+lemmens
+lemmer
+lemmet
+lempe
+lempelig
+lempet
+lempning
+lemster
+lemstert
+lemstre
+lemus
+lemusa
+lemusen
+lemusens
+len
+ålen
+ølen
+lena
+lend
+lenda
+lende
+lenden
+lendens
+lendet
+lendmann
+lendmannen
+lendmannens
+lendmenn
+lendmennene
+lendmennenes
+lendmenns
+lene
+lenestol
+lenestolen
+lenestolene
+lenestolens
+lenestoler
+lenet
+lengd
+lengda
+lengde
+lengdegrad
+lengdegraden
+lengdegradene
+lengdegradens
+lengdegrader
+lengden
+lengdens
+lengder
+lenge
+lenger
+lenges
+lengre
+lengsel
+lengselen
+lengselens
+lengselsfull
+lengslene
+lengsler
+lengst
+lengste
+lengt
+lengte
+lengten
+lengtens
+lengter
+lengtes
+lenk
+lenke
+lenken
+lenkens
+lenker
+lenket
+lens
+ålens
+ølens
+lense
+lensherre
+lensherren
+lensherrens
+lensmann
+lensmannen
+lensmannens
+lensmannsbetjent
+lensmannsbetjenten
+lensmannsbetjentene
+lensmannsbetjentens
+lensmannsbetjenter
+lensmannskontor
+lensmannskontorene
+lensmannskontorer
+lensmannskontoret
+lensmannskontorets
+lensmenn
+lensmennene
+lensmennenes
+lensmenns
+leopard
+leoparden
+leopardene
+leopardens
+leoparder
+lepe
+lepen
+lepens
+lepja
+lepje
+lepjer
+lepjet
+leppa
+leppe
+leppen
+leppene
+lepper
+lepra
+leprabasill
+leprabasillen
+leprabasillens
+lepraen
+lepraens
+ler
+åler
+lerka
+lerke
+lerken
+lerkene
+lerkens
+lerker
+lerketre
+lerret
+lerreta
+lerretene
+lerreter
+lerretet
+lerretets
+les
+åles
+lesbisk
+lese
+lesebok
+leseboka
+leseboken
+lesebokens
+lesegl
+leseglet
+leseglets
+leseil
+leseilet
+leseilets
+leselyst
+leselysten
+leselystens
+leser
+leserbrev
+leserbreva
+leserbrevene
+leserbrevet
+leserbrevets
+lesere
+leseren
+leserens
+leserinnlegg
+leserinnlegga
+leserinnlegget
+leserinnleggets
+leserne
+leses
+lesevanske
+lesevansken
+lesevanskene
+lesevanskens
+lesevansker
+lesing
+lesinga
+lesingen
+lesjon
+lesjonen
+lesjonene
+lesjonens
+lesjoner
+leska
+leske
+lesker
+lesket
+lesning
+lesningen
+lesningens
+lespa
+lespe
+lesper
+lespet
+less
+lesse
+lesser
+lesst
+lesste
+lest
+leste
+lesten
+lestens
+Ålesund
+Ålesunder
+let
+ålet
+ølet
+lete
+ålete
+åleteina
+åleteine
+åleteinene
+åleteiner
+leter
+leting
+letinga
+letingen
+letingene
+letingens
+letinger
+letna
+letne
+letner
+letnet
+lett
+lettbeint
+lette
+lettekornet
+lettelse
+lettelsen
+lettelsene
+lettelsens
+lettelser
+letten
+lettens
+letter
+lettere
+lettes
+lettest
+letteste
+lettet
+lettferdig
+letthet
+lettheten
+letthetens
+lettkjøpt
+lettkjøpte
+lettkorn
+lettkornet
+lettkornets
+lettlest
+lettliva
+lettsindig
+lettsindighet
+lettsindigheten
+lettsindighetens
+lettsinn
+lettsinnet
+lettsinnets
+lettvinn
+lettvinne
+lettvint
+leukemi
+leukemien
+leukemiens
+leukocytt
+leukocytten
+leukocyttene
+leukocyttens
+leukocytter
+leukocyttisk
+lev
+levd
+levde
+leve
+levealder
+levealderen
+levealderens
+levebrød
+levebrødet
+levebrødets
+levedyktig
+levekår
+levekåra
+levekårene
+levekåret
+levekårets
+levemåte
+levemåten
+levemåtens
+leven
+levende
+levendegjøre
+levenet
+levenets
+lever
+leveår
+leveåra
+leverandør
+leverandøren
+leverandørene
+leverandørens
+leverandører
+leveranse
+leveransen
+leveransene
+leveransens
+leveranser
+levere
+leveren
+leveårene
+leverens
+leverer
+leveres
+leveåret
+leveårets
+levering
+leveringa
+leveringen
+leveringene
+leveringens
+leveringer
+leverpostei
+leverposteien
+leverposteiens
+levert
+leverte
+levesett
+levesettet
+levesettets
+levestandard
+levestandarden
+levestandardens
+levetid
+levetida
+levetiden
+levetidens
+levevilkår
+levevilkåra
+levevilkårene
+levevilkåret
+levevilkårets
+levitt
+levitten
+levittene
+levittens
+levitter
+levkøy
+levkøyen
+levkøyene
+levkøyens
+levkøyer
+levne
+levner
+levnet
+levning
+levningen
+levningens
+levra
+åleyngel
+åleyngelen
+åleyngelens
+åleynglene
+åleyngler
+løft
+løfta
+løfte
+løftene
+løfter
+løfterikt
+løftet
+låg
+lægd
+lægda
+lægdene
+lægder
+låge
+lågen
+læger
+lågere
+lægeret
+lægerets
+lågest
+låghalt
+lågland
+låglanda
+låglandene
+låglandet
+låglandets
+låglende
+låglendet
+låglønnet
+låglønnsgruppa
+låglønnsgruppe
+låglønnsgruppen
+låglønnsgruppene
+låglønnsgruppens
+låglønnsgrupper
+låglønt
+lågmælt
+løgn
+løgna
+løgnaktig
+lågne
+løgnen
+løgnene
+løgnens
+løgner
+løgnere
+løgneren
+løgnerens
+løgneres
+løgnerne
+løgnernes
+lægra
+lægre
+lægrene
+lågåsild
+lågåsilda
+lågslette
+lågspent
+lågt
+lågtrykk
+lågtrykka
+lågtrykkene
+lågtrykket
+lågtrykkets
+lågvatn
+lågvatnet
+lågvatnets
+li
+lia
+libaneser
+libanesere
+libaneseren
+libaneserens
+libaneseres
+libaneserne
+libanesernes
+libanesisk
+libelle
+libellen
+libellens
+liberal
+liberale
+liberalisme
+liberalismen
+liberalismens
+liberalitet
+liberaliteten
+liberalitetens
+liberalt
+liberier
+liberiere
+liberieren
+liberierens
+liberieres
+liberierne
+liberiernes
+liberisk
+libris
+libyer
+libyere
+libyeren
+libyerens
+libyeres
+libyerne
+libyernes
+libysk
+licentia
+lid
+lidd
+lidderlig
+lide
+lidelse
+lidelsen
+lidelsene
+lidelsens
+lidelser
+lidenskap
+lidenskapelig
+lidenskapelige
+lidenskapen
+lidenskapens
+lider
+liderlig
+lidt
+liebhaber
+liebhabere
+liebhaberen
+liebhaberens
+liebhaberes
+liebhaberne
+liebhabernes
+liechtensteiner
+liechtensteinere
+liechtensteineren
+liechtensteinerens
+liechtensteineres
+liechtensteinerne
+liechtensteinernes
+liene
+lier
+liflig
+liga
+ligaen
+ligaene
+ligaens
+ligaer
+ligg
+ligge
+liggende
+ligger
+ligget
+light
+lighter
+lightere
+lighteren
+lighterens
+lighteres
+lighterne
+lighternes
+lign
+lignament
+lignamenta
+lignamentene
+lignamenter
+lignamentet
+lignamentets
+ligne
+lignelse
+lignelsen
+lignelsens
+lignende
+ligner
+lignet
+ligning
+ligninga
+ligningen
+ligningene
+ligningens
+ligninger
+ligningskontor
+ligningskontorene
+ligningskontorer
+ligningskontoret
+ligningskontorets
+ligningsråd
+ligningsrådet
+ligningsrådets
+lik
+like
+likebehandling
+likebehandlingen
+likebehandlingens
+likebeint
+likedan
+likefram
+likeframme
+likeframt
+likeglad
+likegyldig
+likegyldige
+likegyldighet
+likegyldigheten
+likegyldighetens
+likeledes
+likelig
+likelønn
+likelønna
+likelønnen
+likelønnens
+likelydende
+likemann
+likemannen
+likemannens
+likemenn
+likemennene
+likemennenes
+likemenns
+liken
+liker
+likere
+likeretter
+likerettere
+likeretteren
+likeretterens
+likeretteres
+likeretterne
+likeretternes
+likeså
+likesida
+likesinna
+likesæl
+likesæle
+likesælt
+likesom
+likest
+likestilling
+likestillinga
+likestillingen
+likestillingens
+likestilt
+likestrøm
+likestrømmen
+likestrømmens
+likestrømsgenerator
+likestrømsgeneratoren
+likestrømsgeneratorens
+liket
+liketil
+likevekt
+likevekta
+likevekten
+likevektens
+likevektig
+likevel
+likeverdig
+likeverdige
+likfølget
+likfølgje
+likfølgjet
+likhet
+likheten
+likhetens
+likhetspunkt
+likhetspunkta
+likhetspunktene
+likhetspunkter
+likhetspunktet
+likhetspunktets
+likhetstegn
+likhetstegna
+likhetstegnene
+likhetstegnet
+likhetstegnets
+likka
+likke
+likker
+likket
+likn
+liknament
+liknamenta
+liknamentene
+liknamenter
+liknamentet
+liknamentets
+likne
+liknelse
+liknelsen
+liknelsens
+liknende
+likner
+liknet
+likning
+likninga
+likningen
+likningene
+likningens
+likninger
+likningskontor
+likningskontorene
+likningskontorer
+likningskontoret
+likningskontorets
+likningsråd
+likningsrådet
+likningsrådets
+likør
+likøren
+likørene
+likørens
+likører
+likså
+likskap
+likskapen
+likskapene
+likskapens
+likskaper
+liksom
+likt
+likte
+liktorn
+liktornen
+liktornens
+likvid
+likvidasjon
+likvidasjonen
+likvidasjonene
+likvidasjonens
+likvidasjoner
+likviden
+likvidens
+likvidere
+likviderer
+likvidering
+likvideringa
+likvideringen
+likvideringene
+likvideringens
+likvidert
+likviderte
+likviditet
+likviditeten
+likviditetens
+lilja
+lilje
+liljekonvall
+liljekonvallen
+liljekonvallene
+liljekonvallens
+liljekonvaller
+liljen
+liljene
+liljens
+liljer
+lilla
+lille
+lillebror
+lillebroren
+lillebrorens
+lilleputt
+lilleputten
+lilleputtene
+lilleputtens
+lilleputter
+lim
+lima
+lime
+limen
+limens
+limerick
+limericken
+limerickene
+limerickens
+limericker
+limet
+limit
+limiten
+limitene
+limitens
+limiter
+limonade
+limonaden
+limonadens
+limt
+limte
+lin
+lind
+linda
+linde
+linden
+lindens
+lindra
+lindre
+lindrer
+lindret
+line
+linearitet
+lineariteten
+linearitetens
+linefiske
+linefisket
+linefiskets
+lineær
+lineære
+linerla
+linerle
+linerlen
+linerlene
+linerlens
+linerler
+lineært
+lines
+linet
+lingvist
+lingvisten
+lingvistene
+lingvistens
+lingvister
+lingvistikk
+lingvistikken
+lingvistikkens
+lingvistisk
+linja
+linjal
+linjalen
+linjalene
+linjalens
+linjaler
+linje
+linjefart
+linjefarten
+linjefartens
+linjen
+linjene
+linjer
+linjere
+linjerer
+linjert
+linjerte
+linjeskift
+linjeskiftene
+linjeskifter
+linjeskiftet
+linjeslutt
+linjeslutten
+linjesluttens
+link
+linken
+linkene
+linkens
+linker
+linn
+linne
+linnea
+linneaen
+linneaene
+linneaens
+linneaer
+linnet
+linning
+linninga
+linningen
+linningens
+linnorm
+linnormen
+linnormene
+linnormens
+linnormer
+linnvær
+linnværet
+linnværets
+linoleum
+linoleumen
+linoleumens
+linolja
+linolje
+linoljen
+linoljens
+linsa
+linse
+linsen
+linsene
+linsens
+linser
+lint
+lir
+lira
+lire
+lirekassa
+lirekasse
+lirekassen
+lirekassene
+lirekassens
+lirekasser
+liret
+lirka
+lirke
+lirket
+lis
+lisa
+lise
+lisens
+lisensavtale
+lisensavtalen
+lisensavtalens
+lisensen
+lisensene
+lisensens
+lisenser
+lisensiat
+lisensiaten
+lisensiatene
+lisensiatens
+lisensiater
+lisensiere
+lisensierer
+lisensieres
+lisensiert
+lisensierte
+lisleby
+lissa
+lisse
+lissen
+lissene
+lissens
+lisser
+lisset
+list
+lista
+liste
+listen
+listene
+listens
+lister
+listeskriving
+listeskrivingen
+listeskrivingens
+listet
+listig
+listige
+lit
+lita
+litani
+litania
+litaniene
+litanier
+litaniet
+litaniets
+litauer
+litauere
+litaueren
+litauerens
+litaueres
+litauerne
+litauernes
+litauisk
+lite
+liten
+liter
+literen
+literens
+liters
+litium
+litiumet
+litiumets
+litograf
+litografen
+litografene
+litografens
+litografer
+litografi
+litografia
+litografien
+litografiene
+litografiens
+litografier
+litografiet
+litografiets
+litt
+litterat
+litteraten
+litteratene
+litteratens
+litterater
+litteratur
+litteraturen
+litteraturene
+litteraturens
+litteraturer
+litterær
+litterære
+litterært
+liturg
+liturgen
+liturgene
+liturgens
+liturger
+liturgi
+liturgien
+liturgiene
+liturgiens
+liturgier
+liturgisk
+liturgiske
+liv
+livaktig
+livat
+livbelte
+livbeltet
+livberging
+livberginga
+livbergingen
+livbergingens
+livbåt
+livbåten
+livbåtene
+livbåtens
+livbåter
+livd
+livda
+livdyr
+live
+livegen
+livegent
+livegne
+livende
+livet
+livets
+livlig
+livligere
+livlina
+livline
+livlinene
+livliner
+livløse
+livløst
+livna
+livne
+livner
+livnet
+livpulsåre
+livs
+livsens
+livsfarlig
+livsforløp
+livsforløpet
+livsforløpets
+livsform
+livsforma
+livsformen
+livsformene
+livsformens
+livsformer
+livsforsikring
+livsforsikringen
+livsforsikringens
+livsforsikringer
+livsforsikringsselskap
+livsforsikringsselskapa
+livsforsikringsselskapene
+livsforsikringsselskaper
+livsforsikringsselskapet
+livsforsikringsselskapets
+livsførsel
+livsførselen
+livsførselens
+livsgrunnlag
+livsgrunnlaget
+livsgrunnlagets
+livshistorie
+livshistorien
+livshistoriens
+livsholdning
+livsholdningen
+livsholdningens
+livsstil
+livsstilen
+livsstilens
+livssyn
+livssynet
+livssynets
+livstegn
+livstegnene
+livstegnet
+livstegnets
+livsvarig
+livsvilkår
+livsvilkårene
+livsvilkåret
+livsvilkårets
+livvakt
+livvakta
+livvakten
+livvaktene
+livvaktens
+livvakter
+ljå
+ljådrag
+ljåen
+ljåene
+ljåens
+ljåer
+ljom
+ljoma
+ljome
+ljomen
+ljomene
+ljomens
+ljomer
+ljomet
+ljore
+ljoren
+ljorens
+ljuge
+ljuger
+ljuget
+låk
+løk
+låke
+løken
+løkene
+løkens
+løker
+løkke
+løkken
+løkkens
+låkt
+låm
+låma
+låmen
+låmene
+låmens
+låmer
+lømlene
+lømler
+lømmel
+lømmelen
+lømmelens
+lån
+låna
+låne
+lånekapital
+lånekapitalen
+lånekapitalens
+låner
+lånet
+lånetilsagn
+lånetilsagnet
+lånetilsagnets
+lånets
+lønn
+lønna
+lønndom
+lønndommen
+lønndommens
+lønne
+lønnede
+lønnen
+lønnende
+lønnens
+lønner
+lønnes
+lønnet
+lønning
+lønninga
+lønningen
+lønningene
+lønningens
+lønninger
+lønnkammer
+lønnkammeret
+lønnkammerets
+lønnlig
+lønnsavtale
+lønnsavtalen
+lønnsavtalene
+lønnsavtalens
+lønnsavtaler
+lønnsforhold
+lønnsforholdene
+lønnsforholdet
+lønnsforholdets
+lønnsglidning
+lønnsglidningen
+lønnsglidningene
+lønnsglidningens
+lønnsklasse
+lønnsklassen
+lønnsklassene
+lønnsklassens
+lønnsklasser
+lønnsøkning
+lønnsøkningen
+lønnsøkningene
+lønnsøkningens
+lønnsøkninger
+lønnskrav
+lønnskrava
+lønnskravene
+lønnskravet
+lønnskravets
+lønnsmessig
+lønnsom
+lønnsomhet
+lønnsomheten
+lønnsomhetens
+lønnsomme
+lønnsomt
+lønnsoppgave
+lønnsoppgaven
+lønnsoppgavens
+lønnstak
+lønnstaker
+lønnstakere
+lønnstakeren
+lønnstakerens
+lønnstakeres
+lønnstakerne
+lønnstakernes
+lønnstariff
+lønnstariffen
+lønnstariffens
+lønnstillegg
+lønnstilleggene
+lønnstillegget
+lønnstilleggets
+lønnstrinn
+lønnstrinna
+lønnstrinnene
+lønnstrinnet
+lønnstrinnets
+lånord
+lånorda
+lånordet
+lånordets
+låns
+lønsk
+lånt
+lånta
+låntaker
+låntakere
+låntakeren
+låntakerens
+låntakeres
+låntakerne
+låntakernes
+lånte
+lo
+loa
+lobba
+lobbe
+lobben
+lobbens
+lobber
+lobbet
+lobby
+lobbyen
+lobbyene
+lobbyens
+lobbyer
+lockout
+lockouten
+lockoutene
+lockoutens
+lockouter
+lodd
+lodda
+lodde
+loddefiske
+loddefisket
+lodden
+loddent
+lodder
+loddet
+loddrett
+loddtrekning
+loddtrekninga
+loddtrekningen
+loddtrekningene
+loddtrekningens
+loddtrekninger
+lodne
+loe
+loen
+loens
+loff
+loffa
+loffen
+loffene
+loffens
+loffer
+loffere
+lofferen
+lofferens
+lofferes
+lofferne
+loffernes
+loffet
+lofotfiske
+lofotfisket
+loft
+lofta
+loftene
+loftet
+loftets
+loftsareal
+loftsarealer
+loftsbod
+loftsboden
+loftsbodene
+loftsbodens
+loftsboder
+log
+loga
+logaritme
+logaritmen
+logaritmens
+logen
+logene
+logens
+loger
+loget
+logg
+logga
+logge
+loggen
+loggens
+logger
+logget
+logiker
+logikere
+logikeren
+logikerens
+logikeres
+logikerne
+logikernes
+logikk
+logikken
+logikkene
+logikkens
+logikker
+logisk
+logiske
+logn
+logne
+lognt
+logoped
+logopeden
+logopedene
+logopedens
+logopeder
+logra
+logre
+logrer
+logret
+lojal
+lojale
+lojalitet
+lojaliteten
+lojalitetens
+lojalt
+lokal
+lokale
+lokalene
+lokaler
+lokalet
+lokalisere
+lokalisering
+lokaliseringa
+lokaliseringen
+lokaliseringens
+lokalisert
+lokaliserte
+lokalitet
+lokaliteten
+lokalitetene
+lokalitetens
+lokaliteter
+lokallag
+lokallaga
+lokallagene
+lokallaget
+lokallagets
+lokalpresse
+lokalpressen
+lokalpressens
+lokalt
+lokk
+lokke
+lokkemat
+lokkematen
+lokkematens
+lokken
+lokkens
+lokker
+lokket
+lokomotiv
+lokomotiva
+lokomotivene
+lokomotiver
+lokomotivet
+lokomotivets
+lom
+lomme
+lommebok
+lommeboka
+lommeboken
+lommebokens
+lommekniv
+lommekniven
+lommeknivene
+lommeknivens
+lommekniver
+lommen
+lommene
+lommepenger
+lommer
+lommeregner
+lommeregnere
+lommeregneren
+lommeregnerens
+lommeregneres
+lommeregnerne
+lommeregnernes
+lommetørkle
+lommeur
+lommeura
+lommeurene
+lommeuret
+lommeurets
+lomvi
+lomvien
+lomviene
+lomviens
+lomvier
+lon
+lona
+lonen
+lonene
+lonens
+loner
+longitude
+longituden
+longitudens
+longplaying
+lopp
+loppa
+loppe
+loppebitt
+loppebitta
+loppebittet
+loppebittets
+loppemarked
+loppemarkeda
+loppemarkedene
+loppemarkeder
+loppemarkedet
+loppemarkedets
+lopper
+lord
+lorden
+lordene
+lordens
+lorder
+lorgnett
+lorgnetten
+lorgnettene
+lorgnettens
+lorgnetter
+lorja
+lorje
+lorjene
+lorjer
+lort
+lorten
+lortene
+lortens
+lorter
+lortet
+lortete
+los
+losa
+losen
+losene
+losens
+loser
+loset
+losje
+losjen
+losjens
+losjerad
+losjerada
+losjeraden
+losjeradens
+losjere
+losjerende
+losjerer
+losjert
+losjerte
+losji
+losjia
+losjiene
+losjier
+losjiet
+losjiets
+loslitt
+loss
+losse
+losser
+losset
+lot
+lotion
+lotionen
+lotionens
+lott
+lotta
+lotten
+lottene
+lottens
+lotter
+lotteri
+lotteria
+lotteriene
+lotterier
+lotteriet
+lotteriets
+lotus
+lotusblomst
+lotusblomsten
+lotusblomstene
+lotusblomstens
+lotusblomster
+lotusen
+lotusene
+lotusens
+lotuser
+lov
+lova
+lovart
+lovarten
+lovartene
+lovartens
+lovarter
+lovbestemmelse
+lovbestemmelsen
+lovbestemmelsene
+lovbestemmelsens
+lovbestemmelser
+lovbrott
+lovbrottet
+lovbrottets
+lovbrudd
+lovbruddet
+lovbruddets
+love
+loven
+lovende
+lovendring
+lovendringa
+lovendringen
+lovendringene
+lovendringens
+lovendringer
+lovene
+lovens
+lover
+lovere
+loverer
+lovert
+loverte
+lovet
+lovfeste
+lovfestet
+lovforslag
+lovforslaga
+lovforslagene
+lovforslaget
+lovforslagets
+lovgivende
+lovgiver
+lovgivere
+lovgiveren
+lovgiverens
+lovgiveres
+lovgiverne
+lovgivernes
+lovgivning
+lovgivningen
+lovgivningens
+lovhjemlene
+lovhjemler
+lovhjemmel
+lovhjemmelen
+lovhjemmelens
+lovkyndig
+lovlig
+lovlige
+lovmessig
+lovnad
+lovnaden
+lovnadene
+lovnadens
+lovnader
+lovord
+lovorda
+lovordene
+lovordet
+lovordets
+lovott
+lovotten
+lovottene
+lovottens
+lovotter
+lovovertredelse
+lovovertredelsen
+lovovertredelsene
+lovovertredelsens
+lovovertredelser
+lovpris
+lovprise
+lovpriset
+lovregler
+lovs
+lovsang
+lovsangen
+lovsangene
+lovsangens
+lovsanger
+lovsigemann
+lovsigemannen
+lovsigemannens
+lovsigemenn
+lovsigemennene
+lovsigemennenes
+lovsigemenns
+lovstridig
+lovt
+lovte
+lovteknisk
+lovverk
+lovverket
+lovverkets
+lp
+løp
+løpe
+løpebane
+løpebanen
+løpebanens
+løpende
+løpene
+løper
+løpere
+løperen
+løperens
+løperne
+løpet
+løpetid
+løpetiden
+løpetidens
+løpsk
+løpt
+lår
+lær
+læra
+lårbein
+lårbeinet
+lårbeinets
+lærd
+lørdag
+lørdagen
+lørdagene
+lørdagens
+lørdager
+lørdagsfri
+lærde
+lærdom
+lærdommen
+lærdommene
+lærdommens
+lærdommer
+låre
+lære
+læreanstalt
+læreanstalten
+læreanstaltene
+læreanstaltens
+læreanstalter
+lærebøkene
+lærebøker
+lærebok
+læreboka
+læreboken
+lærebokens
+lærebokform
+lærebokforma
+lærebokformen
+lærebokformene
+lærebokformens
+lærebokformer
+læreboknormal
+læreboknormalen
+læreboknormalens
+læregutt
+læregutten
+læreguttene
+læreguttens
+læregutter
+ålreit
+læren
+lærenem
+lærenemme
+lærenemt
+lærens
+læreplan
+læreplanen
+læreplanene
+læreplanens
+læreplaner
+lærer
+lærere
+læreren
+lærerens
+læreres
+lærergjerning
+lærergjerningen
+lærergjerningens
+lærerhjelp
+lærerik
+lærerike
+lærerikt
+lærerinna
+lærerinne
+lærerinnen
+lærerinnene
+lærerinnens
+lærerinner
+lærerkrefter
+lærerlag
+lærerlaget
+lærerlagets
+lærerlønning
+lærerlønninga
+lærerlønningen
+lærerlønningene
+lærerlønningens
+lærerlønninger
+lærerne
+lærernes
+lærerskole
+lærerskoleelev
+lærerskoleeleven
+lærerskoleelevene
+lærerskoleelevens
+lærerskoleelever
+lærerskolen
+lærerskolene
+lærerskolens
+lærerskoler
+lærerstab
+lærerstaben
+lærerstabens
+læres
+lærested
+lærestedene
+læresteder
+lærestedet
+lærestedets
+låret
+læret
+læretid
+læretida
+læretiden
+læretidens
+lærevillig
+lårhals
+lårhalsen
+lårhalsens
+læring
+lårkort
+lærling
+lærlingen
+lærlingene
+lærlingens
+lærlinger
+lærmappa
+lærmappe
+lærmappen
+lærmappene
+lærmappens
+lærmapper
+lærreim
+lærreima
+lærreimen
+lærreimene
+lærreimens
+lærreimer
+lært
+lærte
+ølrøyk
+ølrøyken
+ølrøykens
+lås
+løs
+løsaktig
+låse
+løse
+løselig
+låsen
+løsen
+løsenet
+løsenets
+låsens
+løsepenger
+låser
+løser
+låses
+løses
+låset
+løsgjenger
+løsgjengere
+løsgjengeren
+løsgjengerens
+løsgjengeres
+løsgjengerne
+løsgjengernes
+løslat
+løslate
+løslater
+løslatt
+løslatte
+løsne
+løsner
+løsnet
+løsning
+løsninga
+løsningen
+løsningene
+løsningens
+løsninger
+løsningsmiddel
+løsningsmiddelet
+løsningsmiddelets
+løsningsmidla
+løsningsmidlene
+løsningsmidler
+løsningsmidlet
+løsningsmidlets
+løsøre
+løsøret
+løssluppen
+løssluppent
+låst
+løst
+læstadianer
+læstadianere
+læstadianeren
+læstadianerens
+læstadianeres
+læstadianerne
+læstadianernes
+låste
+løste
+låt
+ålt
+ltd
+låte
+læte
+ålte
+låten
+låtens
+låter
+lætet
+lått
+låtten
+låttene
+låttens
+låtter
+lubben
+lubbent
+lubne
+lubnere
+lubnest
+ludder
+luddere
+ludderet
+ludderne
+lue
+luen
+luens
+luer
+luffe
+luffen
+luffens
+luft
+lufta
+lufte
+luften
+luftens
+luftet
+luftforsvar
+luftforsvaret
+luftforsvarets
+luftfuktighet
+luftfuktigheten
+luftfuktighetens
+lufthavn
+lufthavna
+lufthavnen
+lufthavnene
+lufthavnens
+lufthavner
+luftig
+luftmasse
+luftmassen
+luftmassens
+luftputebåt
+luftputebåten
+luftputebåtene
+luftputebåtens
+luftputebåter
+luftspeiling
+luftspeilingen
+luftspeilingens
+lufttrykk
+lufttrykka
+lufttrykkene
+lufttrykket
+lufttrykkets
+luftvern
+luftvernet
+luftvernets
+lugar
+lugaren
+lugarene
+lugarens
+lugarer
+lugg
+lugge
+luggen
+luggens
+lugger
+lugom
+luka
+luke
+luken
+lukens
+luker
+lukk
+lukka
+lukke
+lukkede
+lukker
+lukket
+lukking
+lukkinga
+lukkingen
+lukkingens
+lukning
+lukningen
+lukningens
+lukrativ
+lukrative
+lukrativt
+luksuriøs
+luksuriøse
+luksuriøst
+luksus
+luksusen
+luksusens
+lukt
+lukta
+lukte
+lukten
+luktens
+lukter
+luktet
+luktfjerner
+luktfjernere
+luktfjerneren
+luktfjernerens
+luktfjerneres
+luktfjernerne
+luktfjernernes
+luktsvak
+luktsvake
+luktsvakt
+lukullisk
+lulla
+lulle
+luller
+lullet
+lumbago
+lumbagoen
+lumbagoens
+lummer
+lummert
+lumpen
+lumpent
+lumpne
+lumre
+lumsk
+lumske
+lumskt
+lun
+lund
+lunden
+lundene
+lundens
+lunder
+lune
+lunet
+lunete
+lunga
+lunge
+lungebetennelse
+lungebetennelsen
+lungebetennelsens
+lungekreft
+lungekreften
+lungekreftens
+lungen
+lungene
+lungens
+lunger
+lunk
+lunka
+lunke
+lunken
+lunkenhet
+lunkenheten
+lunkenhetens
+lunkent
+lunket
+lunkne
+lunn
+lunne
+lunnen
+lunnens
+lunner
+lunsj
+lunsje
+lunsjen
+lunsjens
+lunsjer
+lunt
+lunte
+lupa
+lupe
+lupen
+lupene
+lupens
+luper
+lur
+lure
+luren
+lurens
+lurer
+lurifas
+lurifasen
+lurifasene
+lurifasens
+lurifaser
+lurk
+lurken
+lurkene
+lurkens
+lurker
+lurt
+lurte
+lurv
+lurve
+lurveleven
+lurvelevenet
+lurvelevenets
+lurven
+lurvens
+lurvet
+lurvete
+lus
+lusa
+luse
+lusekofta
+lusekofte
+lusekoften
+lusekoftene
+lusekoftens
+lusekofter
+lusen
+lusent
+lusern
+lusernen
+lusernens
+luset
+lusete
+lusing
+lusinga
+lusingen
+lusingene
+lusingens
+lusinger
+luska
+luske
+lusker
+lusket
+lusne
+lut
+luta
+lute
+lutefisk
+lutefisken
+lutefiskens
+luten
+lutende
+lutens
+lutet
+lutetium
+lutetiumet
+lutetiumets
+lutfisk
+lutfisken
+lutfiskens
+lutheraner
+lutheranere
+lutheraneren
+lutheranerens
+lutheraneres
+lutheranerne
+lutheranernes
+luthersk
+lutherske
+lutre
+lutret
+lutrygga
+lutrygget
+lutt
+lutte
+lutten
+luttens
+lutter
+luv
+luvart
+luve
+lux
+luxembourger
+luxembourgere
+luxembourgeren
+luxembourgerens
+luxembourgeres
+luxembourgerne
+luxembourgernes
+luxembourgsk
+luxemburger
+luxemburgere
+luxemburgeren
+luxemburgerens
+luxemburgeres
+luxemburgerne
+luxemburgernes
+luxemburgsk
+luxen
+luxens
+løv
+løva
+låve
+løve
+låvebru
+låvebrua
+låvebruene
+låvebruer
+låvegolv
+låvegolvet
+låvegolvets
+låven
+løven
+låvene
+låvens
+løvens
+låver
+løvet
+løvetann
+løvetannen
+løvetannens
+låvevegg
+låveveggen
+låveveggene
+låveveggens
+låvevegger
+løvfall
+løvfallet
+løvfallets
+ly
+løy
+løybenk
+løybenken
+løybenkene
+løybenkens
+løybenker
+lybsk
+lyceene
+lyceer
+lyceum
+lyd
+lydbånd
+lydbånda
+lydbåndene
+lydbåndet
+lydbåndets
+lydd
+lydde
+lyddemper
+lyddempere
+lyddemperen
+lyddemperens
+lyddemperes
+lyddemperne
+lyddempernes
+lyde
+lydelig
+lyden
+lyder
+lydfilm
+lydfilmen
+lydfilmene
+lydfilmens
+lydfilmer
+lydgrense
+lydhør
+lydhøre
+lydhørt
+lydig
+lydige
+lydisolasjon
+lydisolasjonen
+lydisolasjonene
+lydisolasjonens
+lydisolasjoner
+lydkilde
+lydkilden
+lydkildens
+lydlig
+lydmur
+lydmuren
+lydmurens
+lydpotta
+lydpotte
+lydpotten
+lydpottene
+lydpottens
+lydpotter
+lydrett
+lydrike
+lydriket
+lydsignal
+lydsignaler
+lydstyrke
+lydstyrken
+lydstyrkens
+lydt
+lye
+løye
+løyen
+løyent
+løyerlig
+løyert
+løyerten
+løyertene
+løyertens
+løyerter
+lyet
+løyet
+lyge
+lyger
+lykka
+lykke
+lykkelig
+lykkelige
+lykkeligere
+lykken
+lykkens
+lykkeønskning
+lykkeønskningen
+lykkeønskningene
+lykkeønskningens
+lykkeønskninger
+lykkes
+lykketreff
+lykketreffet
+lykketreffets
+lykkønske
+lykkønskning
+lykkønskningen
+lykkønskningens
+lykksalig
+lykt
+lykta
+lykten
+lyktens
+lykter
+lyktes
+lymfe
+lymfen
+lymfens
+lyn
+lyne
+løyne
+lynende
+lynet
+lyng
+lyngen
+lyngens
+lynget
+lyngets
+lynne
+lynnet
+lynol
+lynolen
+lynolens
+lynraske
+lynraskt
+lynsja
+lynsje
+lynsjet
+lynslått
+løypa
+løype
+løypen
+løypene
+løypens
+løyper
+løypestreng
+løypestrengen
+løypestrengens
+lyr
+lyra
+lyren
+lyrene
+lyrens
+lyrer
+lyriker
+lyrikere
+lyrikeren
+lyrikerens
+lyrikeres
+lyrikerne
+lyrikernes
+lyrikk
+lyrikken
+lyrikkens
+lyrisk
+lyriske
+lys
+lysanlegg
+lysanlegga
+lysanleggene
+lysanlegget
+lysanleggets
+lysarmatur
+lysarmaturene
+lysbilda
+lysbilde
+lysbildene
+lysbilder
+lysbildet
+lysblink
+lysblinkene
+lyse
+løyse
+lyseblå
+lysebrun
+lysende
+lysene
+lyser
+løyser
+lyserød
+lysere
+lyses
+løyses
+lyseslokker
+lyseslokkeren
+lyseslokkerens
+lysestake
+lysestaken
+lysestakene
+lysestakens
+lysestaker
+lyset
+lysforhold
+lysforholdene
+lysglimt
+lysglimtene
+lysing
+løysing
+lysinga
+løysinga
+lysingen
+løysingen
+løysingene
+løysingens
+løysinger
+lysingsblad
+lysingsbladene
+lysingsblader
+lysingsbladet
+lysingsbladets
+lyskastere
+lyskasteren
+lyskasterens
+lyske
+lysken
+lyskens
+lyskledd
+lysna
+lysne
+lysner
+lysnet
+lysning
+lysningen
+lysningens
+lyspæra
+lyspære
+lyspæren
+lyspærene
+lyspærens
+lyspærer
+lyspunkt
+lyspunkta
+lyspunktene
+lyspunkter
+lyspunktet
+lyspunktets
+lyst
+løyst
+lysta
+lystbåt
+lystbåten
+lystbåtene
+lystbåtens
+lystbåter
+lyste
+løyste
+lystelig
+lysten
+lystent
+lyster
+lysteren
+lysterens
+lystig
+lystighet
+lystigheten
+lystighetens
+lystne
+lystra
+lystre
+lystrene
+lystrer
+lystret
+lystspill
+lystspillet
+lystspillets
+lysttur
+lystturen
+lystturens
+lysverk
+lysverka
+lysverkene
+lysverker
+lysverket
+lysverkets
+lyte
+lytefri
+lytefrie
+lytefritt
+lytet
+løytnant
+løytnanten
+løytnantene
+løytnantens
+løytnanter
+lytt
+lytte
+lytter
+lyttere
+lytteren
+lytterens
+lytteres
+lytterne
+lytternes
+lyttet
+lyve
+løyve
+lyver
+løyvet
+løyving
+løyvinga
+løyvingen
+løyvingens
+løyvær
+løyværet
+løyværets
+m
+må
+øm
+åma
+madagasser
+madagassere
+madagasseren
+madagasserens
+madagasseres
+madagasserne
+madagassernes
+madagassisk
+madagassisket
+madagassiskets
+madam
+madame
+madammen
+madammene
+madammens
+madammer
+madeira
+madeiraen
+madeiraene
+madeiraens
+madeiraer
+madeiravin
+madeiravinen
+madeiravinens
+madonna
+madonnaen
+madonnaene
+madonnaens
+madonnaer
+madrass
+madrassen
+madrassene
+madrassens
+madrasser
+mag
+magasin
+magasina
+magasinene
+magasiner
+magasinere
+magasinering
+magasineringa
+magasineringen
+magasineringens
+magasinert
+magasinerte
+magasinet
+magasinets
+mage
+magemål
+magemålet
+magemålets
+magen
+magens
+mager
+magert
+magi
+magien
+magiens
+magisk
+magiske
+magister
+magisteren
+magisterens
+magistrat
+magistraten
+magistratene
+magistratens
+magistrater
+magistrene
+magistrer
+magma
+magmaen
+magmaens
+magmaet
+magmaets
+magnat
+magnaten
+magnatene
+magnatens
+magnater
+magnesia
+magnesium
+magnesiumen
+magnesiumens
+magnesiumet
+magnesiumets
+magnet
+magnetband
+magnetbandene
+magnetbandet
+magnetbandets
+magnetbånd
+magnetbåndene
+magnetbåndet
+magnetbåndets
+magneten
+magnetens
+magnetfelt
+magnetfelta
+magnetfeltet
+magnetfeltets
+magnetisere
+magnetiserer
+magnetisert
+magnetiserte
+magnetisk
+magnetiske
+magnetisme
+magnetismen
+magnetismens
+magnetofon
+magnetofonen
+magnetofonene
+magnetofonens
+magnetofoner
+magnets
+magnifikk
+magre
+magrere
+mahatma
+mahatmaen
+mahatmaens
+mahogni
+mahognien
+mahogniens
+mai
+maie
+mais
+maisen
+maisens
+maiskolbe
+maiskolbene
+majestet
+majesteten
+majestetene
+majestetens
+majesteter
+majestetisk
+majones
+majonesen
+majonesens
+major
+majoritet
+majoriteten
+majoritetens
+mak
+makaber
+makabert
+makabre
+makadamisere
+makadamiserer
+makadamisert
+makadamiserte
+makaroni
+makaronien
+makaroniens
+make
+makedoner
+makedonere
+makedoneren
+makedonerens
+makedoneres
+makedonerne
+makedonernes
+makedonier
+makedoniere
+makedonieren
+makedonierens
+makedonieres
+makedonierne
+makedoniernes
+makelig
+maken
+makeskifte
+makeskiftet
+makk
+makken
+makkens
+makker
+makkere
+makkeren
+makkerens
+makkeres
+makkerne
+makkernes
+makko
+makkoen
+makkoens
+makkspist
+makkverk
+makkverket
+makkverkets
+makrell
+makrellen
+makrellene
+makrellens
+makreller
+makrellstørja
+makrellstørje
+makrellstørjen
+makrellstørjene
+makrellstørjens
+makrellstørjer
+makrobiotisk
+makron
+makronen
+makronene
+makronens
+makroner
+maksima
+maksimaene
+maksimal
+maksimale
+maksimalpris
+maksimalprisen
+maksimalprisene
+maksimalprisens
+maksimalpriser
+maksimalt
+maksime
+maksimen
+maksimens
+maksimum
+maksimumene
+maksimumer
+maksimumet
+maksimumets
+maksla
+maksle
+maksler
+makslet
+makt
+makta
+maktbalanse
+maktbalansen
+maktbalansens
+makte
+makten
+maktene
+maktens
+makter
+maktesløs
+maktesløse
+maktesløst
+maktet
+maktkamp
+maktkampen
+maktkampens
+maktmidler
+maktpåliggende
+maktposisjon
+maktposisjonen
+maktposisjonene
+maktposisjonens
+maktposisjoner
+maktsjuk
+maktstilling
+maktstillingen
+maktstillingens
+makulatur
+makulaturen
+makulaturens
+makulere
+makulerer
+makulert
+makulerte
+mal
+malaria
+malariaen
+malariaens
+malawier
+malawiere
+malawieren
+malawierens
+malawieres
+malawierne
+malawiernes
+malawisk
+malaysier
+malaysiere
+malaysieren
+malaysierens
+malaysieres
+malaysierne
+malaysiernes
+malaysisk
+maldiver
+maldivere
+maldiveren
+maldiverens
+maldiveres
+maldiverne
+maldivernes
+maldivisk
+male
+malebarisk
+maler
+malere
+maleren
+malerens
+maleres
+maleri
+maleria
+maleriene
+malerier
+maleriet
+maleriets
+malerinne
+malerinnen
+malerinnene
+malerinnens
+malerinner
+malerisamling
+malerisamlingen
+malerisamlingens
+malerisk
+maleriske
+malerkost
+malerkosten
+malerkostene
+malerkostens
+malerkoster
+malerkunst
+malerkunsten
+malerkunstens
+malerne
+malernes
+males
+malier
+maliere
+malieren
+malierens
+malieres
+malierne
+maliernes
+maling
+malinga
+malingboks
+malingboksen
+malingboksene
+malingboksens
+malingbokser
+malingen
+malingens
+malise
+malisen
+malisens
+malisiøs
+malisiøst
+malisk
+malm
+malmen
+malmene
+malmens
+malmer
+malplassert
+malstrøm
+malstrømmen
+malstrømmene
+malstrømmens
+malstrømmer
+malt
+malte
+maltekstrakt
+maltekstrakten
+maltekstraktens
+malteser
+maltesere
+malteseren
+malteserens
+malteseres
+malteserne
+maltesernes
+maltesisk
+maltet
+maltraktere
+maltrakterer
+maltraktert
+maltrakterte
+malurt
+malurta
+malurten
+malurtens
+malurter
+mamelukk
+mamelukken
+mamelukkene
+mamelukkens
+mamelukker
+mamma
+mammaen
+mammaene
+mammaens
+mammaer
+mammaklær
+mammon
+mammonen
+mammonens
+mammut
+mammuten
+mammutene
+mammutens
+mammuter
+man
+mana
+manager
+managere
+manageren
+managerens
+manageres
+managerne
+managernes
+manchurisk
+mandag
+mandagen
+mandagene
+mandagens
+mandager
+mandarin
+mandarinen
+mandarinene
+mandarinens
+mandariner
+mandat
+mandata
+mandatene
+mandater
+mandatet
+mandatets
+mandel
+mandelen
+mandelens
+mandig
+mandler
+mandolin
+mandolinen
+mandolinene
+mandolinens
+mandoliner
+mandrill
+mandrillen
+mandrillene
+mandrillens
+mandriller
+mandsju
+mandsjuen
+mandsjuene
+mandsjuens
+mandsjuer
+mandsjurisk
+mane
+manen
+manens
+maner
+maneren
+manesje
+manesjen
+manesjens
+manet
+maneta
+maneten
+manetens
+manets
+mang
+mangan
+manganet
+manganets
+mange
+mangeartede
+mangedobbelt
+mangedobbelte
+mangedoble
+mangedobles
+mangedoblet
+mangel
+mangelen
+mangelens
+mangelfull
+mangelfulle
+mangelfullt
+mangelvare
+mangelvaren
+mangelvarene
+mangelvarens
+mangelvarer
+mangeårig
+mangeårige
+manges
+mangesidig
+mangfoldig
+mangfoldige
+mangfoldighet
+mangfoldigheten
+mangfoldighetens
+mangle
+manglende
+manglene
+mangler
+manglet
+mangletre
+mangslungen
+mangslungent
+mangslungne
+mangt
+mani
+manien
+maniens
+manierisme
+manierismen
+manierismens
+maniert
+manifest
+manifesta
+manifestasjon
+manifestasjonen
+manifestasjonene
+manifestasjonens
+manifestasjoner
+manifestene
+manifester
+manifestere
+manifestert
+manifesterte
+manifestet
+manifestets
+manikyr
+manikyren
+manikyrens
+manilahamp
+manilahampen
+manilahampens
+manilatau
+maning
+maninga
+maningen
+maningene
+maningens
+maninger
+manipulasjon
+manipulasjonen
+manipulasjonene
+manipulasjonens
+manipulasjoner
+manipuler
+manipulere
+manipulerer
+manipulering
+manipuleringa
+manipuleringen
+manipuleringens
+manipulert
+manipulerte
+manisk
+manke
+manken
+mankens
+manko
+mankoen
+mankoene
+mankoens
+mankoer
+mann
+manna
+mannaen
+mannaens
+manndom
+manndommen
+manndommens
+manndrap
+manndrapet
+manndrapets
+manne
+mannekeng
+mannekengen
+mannekengene
+mannekengens
+mannekenger
+mannen
+mannens
+mannfolk
+mannfolka
+mannfolkene
+mannfolket
+mannfolkets
+manngard
+manngarden
+manngardens
+mannhaftig
+mannjamning
+mannjamninga
+mannjamningen
+mannjamningens
+mannjamt
+mannjevning
+mannjevningen
+mannjevningens
+mannlig
+mannlige
+manns
+mannsalder
+mannsalderen
+mannsalderens
+mannskap
+mannskapene
+mannskapenes
+mannskaper
+mannskapet
+mannsling
+mannslingen
+mannslingene
+mannslingens
+mannslinger
+mannsterk
+mannsterke
+mannsterkt
+manntall
+manntalla
+manntallene
+manntallet
+manntallets
+manometer
+manometeret
+manometerets
+manometra
+manometre
+manometrene
+manometret
+manometrets
+mansjett
+mansjetten
+mansjettene
+mansjettens
+mansjetter
+mante
+mantisse
+mantissen
+mantissens
+manual
+manualen
+manualene
+manualens
+manualer
+manuduksjon
+manuduksjonen
+manuduksjonene
+manuduksjonens
+manuduksjoner
+manudusere
+manuduserer
+manudusert
+manuduserte
+manuell
+manuelle
+manuelt
+manufaktur
+manufakturen
+manufakturens
+manufakturvare
+manufakturvaren
+manufakturvarene
+manufakturvarens
+manufakturvarer
+manus
+manusa
+manusene
+manuser
+manuset
+manusets
+manuskript
+manuskripta
+manuskriptene
+manuskripter
+manuskriptet
+manuskriptets
+manuskriptforfatter
+manuskriptforfattere
+manuskriptforfatteren
+manuskriptforfatterens
+manuskriptforfatteres
+manuskriptforfatterne
+manuskriptforfatternes
+manøver
+manøveren
+manøverens
+manøvre
+manøvrene
+manøvrer
+manøvrere
+manøvrering
+manøvreringa
+manøvreringen
+manøvreringens
+manøvrert
+manøvrerte
+mappa
+mappe
+mappen
+mappene
+mappens
+mapper
+mara
+maracas
+maracasen
+maracasene
+maracasens
+maracaser
+maraton
+maratonløp
+maratonløpa
+maratonløpene
+maratonløper
+maratonløpet
+maratonløpets
+marbakke
+marbakken
+marbakkens
+mare
+marehalm
+marehalmen
+marehalmens
+maren
+marene
+marens
+marer
+mareritt
+mareritta
+marerittene
+marerittet
+marerittets
+marflo
+marfloa
+marfloene
+marfloer
+marg
+margarin
+margarinen
+margarinene
+margarinens
+margariner
+margen
+margene
+margens
+marger
+margin
+marginal
+marginale
+marginalkostnad
+marginalkostnaden
+marginalkostnadene
+marginalkostnadens
+marginalkostnader
+marginalskatt
+marginalskatten
+marginalskattens
+marginalt
+marginen
+marginene
+marginens
+marginer
+marianøkleband
+marihand
+marihøna
+marihøne
+marihønen
+marihønene
+marihønens
+marihøner
+marihuana
+marihuanaen
+marihuanaens
+marikåpa
+marikåpe
+marikåpen
+marikåpene
+marikåpens
+marikåper
+marimjelle
+marin
+marina
+marinaen
+marinaene
+marinaens
+marinaer
+marinbiologi
+marine
+marinebase
+marinebasen
+marinebasene
+marinebasens
+marinebaser
+marineblå
+marinefartøy
+marinefartøyene
+marinefartøyer
+marinefartøyet
+marinefartøyets
+marinegast
+marinegasten
+marinegastene
+marinegastens
+marinegaster
+marinekaptein
+marinen
+marinens
+marines
+marinesoldat
+marinesoldaten
+marinesoldatene
+marinesoldatens
+marinesoldater
+marionett
+marionetten
+marionettene
+marionettens
+marionetter
+maritim
+maritime
+maritimt
+mark
+marka
+markant
+markante
+marked
+markeda
+markedene
+markeder
+markedet
+markedets
+markedsandel
+markedsandelen
+markedsandelens
+markedsforhold
+markedsforholdene
+markedsføre
+markedsfører
+markedsføres
+markedsføring
+markedsføringen
+markedsføringens
+markedsført
+markedsførte
+markedsøkonomi
+markedsøkonomien
+markedsøkonomiens
+marken
+markene
+markens
+marker
+markere
+markerer
+markeres
+markering
+markeringa
+markeringen
+markeringene
+markeringens
+markeringer
+markeringsfil
+markeringsfilen
+markeringsfilens
+markeringstegn
+markeringstegnene
+markeringstegnet
+markeringstegnets
+markert
+markerte
+marketenter
+marketenteren
+marketenterens
+marki
+markien
+markiene
+markiens
+markier
+markisa
+markise
+markisen
+markisene
+markisens
+markiser
+marknad
+marknaden
+marknadene
+marknadens
+marknader
+marknadsføre
+marknadsfører
+marknadsført
+marknadsførte
+markør
+markøren
+markørene
+markørens
+markører
+markspist
+marmelade
+marmeladen
+marmeladens
+marmor
+marmora
+marmoren
+marmorens
+marmorer
+marokeng
+marokengen
+marokengens
+marokenget
+marokengets
+marokkaner
+marokkanere
+marokkaneren
+marokkanerens
+marokkaneres
+marokkanerne
+marokkanernes
+marokkansk
+mars
+marsipan
+marsipanen
+marsipanens
+marsj
+marsjall
+marsjallen
+marsjallene
+marsjallens
+marsjaller
+marsjandiser
+marsjandisere
+marsjandiseren
+marsjandiserens
+marsjandiseres
+marsjandiserne
+marsjandisernes
+marsjen
+marsjer
+marsjere
+marsjerer
+marsjert
+marsjerte
+marsjfart
+marsjfarten
+marsjfartens
+marskalk
+marskalken
+marskalkene
+marskalkens
+marskalker
+marstein
+marsvin
+marsvina
+marsvinene
+marsvinet
+marsvinets
+martialsk
+martre
+martyr
+martyren
+martyrene
+martyrens
+martyrer
+martyrium
+marulk
+marulken
+marulkene
+marulkens
+marulker
+marxisme
+marxismen
+marxismens
+marxist
+marxisten
+marxistene
+marxistens
+marxister
+marxistisk
+marxistiske
+mas
+mase
+masekopp
+masekoppen
+masekoppens
+maset
+masete
+mask
+maska
+masken
+maskene
+maskens
+maskepi
+maskepiet
+maskepiets
+masker
+maskerade
+maskeraden
+maskeradens
+maskere
+maskerer
+maskert
+maskerte
+maskin
+maskindel
+maskindelen
+maskindelene
+maskindelens
+maskindeler
+maskinell
+maskinelle
+maskinelt
+maskinen
+maskinene
+maskinens
+maskiner
+maskineri
+maskineriet
+maskineriets
+maskinindustri
+maskinist
+maskinisten
+maskinistene
+maskinistens
+maskinister
+maskinistskole
+maskinistskolen
+maskinistskolene
+maskinistskolens
+maskinistskoler
+maskinlesbar
+maskinlesbare
+maskinlesbart
+maskinmester
+maskinmesteren
+maskinmesterens
+maskinmestrene
+maskinpark
+maskinparken
+maskinparkene
+maskinparkens
+maskinparker
+maskinressurs
+maskinressursen
+maskinressursene
+maskinressursens
+maskinressurser
+maskinsjef
+maskinsjefen
+maskinsjefene
+maskinsjefens
+maskinsjefer
+maskinskrevne
+maskinskrivning
+maskinskrivningen
+maskinskrivningens
+maskinstøtte
+maskinstøttet
+maskinteknikk
+maskinteknikken
+maskinteknikkens
+maskinuavhengig
+maskinutstyr
+maskinutstyret
+maskinutstyrets
+maskinvare
+maskinvaren
+maskinvarens
+maskinvarer
+maskot
+maskoten
+maskotene
+maskotens
+maskoter
+maskulin
+maskuline
+maskulint
+maskulinum
+maskulinumet
+maskulinumets
+masovn
+masovnen
+masovnens
+massakre
+massakren
+massakrens
+massakrere
+massakrering
+massakreringa
+massakreringen
+massakreringens
+massakrert
+massakrerte
+massasje
+massasjen
+massasjens
+masse
+massemedia
+massemedier
+massemedium
+massemøte
+massemøtet
+massen
+massene
+massenes
+masser
+massere
+masserer
+massert
+masserte
+massetransport
+massevis
+massiv
+massive
+massivet
+massivt
+massør
+massøren
+massørene
+massørens
+massører
+massøsa
+massøse
+massøsen
+massøsens
+mast
+masta
+maste
+masten
+mastens
+master
+mastetopp
+mastetoppen
+mastetoppens
+mastodont
+mastodonten
+mastodontene
+mastodontens
+mastodonter
+masurka
+masurkaen
+masurkaene
+masurkaens
+masurkaer
+mat
+matador
+matadoren
+matadorene
+matadorens
+matadorer
+matbit
+matbiten
+matbitene
+matbitens
+matbiter
+match
+matche
+matchen
+matchens
+matcher
+matchvinner
+matchvinnere
+matchvinneren
+matchvinnerens
+matchvinneres
+matchvinnerne
+matchvinnernes
+mate
+matebuss
+matehastighet
+matehastigheten
+matehastighetens
+matematiker
+matematikere
+matematikeren
+matematikerens
+matematikeres
+matematikerne
+matematikernes
+matematikk
+matematikken
+matematikkens
+matematisk
+matematiske
+maten
+matens
+material
+materiale
+materialene
+materialer
+materialet
+materialets
+materialisme
+materialismen
+materialismens
+materialist
+materialisten
+materialistene
+materialistens
+materialister
+materialistisk
+materie
+materiell
+materielle
+materiellet
+materielt
+materien
+materiene
+materiens
+materier
+matineen
+matineens
+matjessild
+matjessilda
+matjord
+matjorda
+matlaus
+matmål
+matmålet
+matmålets
+matrett
+matretten
+matrettene
+matrettens
+matretter
+matriarkalsk
+matriarkat
+matriarkata
+matriarkatene
+matriarkater
+matriarkatet
+matriarkatets
+matrikkel
+matrikkelen
+matrikkelens
+matriklene
+matrikler
+matrikulere
+matrikulerer
+matrikulert
+matrikulerte
+matrise
+matrisemultiplikasjon
+matrisemultiplikasjonen
+matrisemultiplikasjonens
+matrisen
+matrisene
+matrisens
+matriser
+matrona
+matrone
+matronen
+matronene
+matronens
+matroner
+matros
+matrosen
+matrosene
+matrosens
+matroser
+matt
+matte
+matthet
+mattheten
+matthetens
+matvare
+matvaren
+matvarene
+matvarens
+matvarer
+maula
+maule
+mauler
+maulet
+maur
+mauren
+maurene
+maurens
+maurer
+maurere
+maureren
+maurerens
+maureres
+maurerne
+maurernes
+maurisk
+maurtua
+maurtue
+maurtuen
+maurtuene
+maurtuens
+maurtuer
+maurtuve
+mauser
+mausere
+mauseren
+mauserens
+mauseres
+mauserne
+mausernes
+mausoleene
+mausoleer
+mausoleet
+mausoleets
+mausoleum
+mave
+maven
+mavens
+maxi
+møbel
+møbelet
+møbelets
+møbelmesse
+møbla
+møblement
+møblementa
+møblementene
+møblementer
+møblementet
+møblementets
+møblene
+møbler
+møblere
+møblerer
+møblert
+møblerte
+møblet
+møda
+mødd
+mødding
+møddingen
+møddingene
+møddingens
+møddinger
+møde
+møden
+mødene
+mødens
+møder
+mødom
+mødre
+mødrene
+mødrenes
+åme
+med
+medalje
+medaljen
+medaljene
+medaljens
+medaljer
+medaljong
+medaljongen
+medaljongene
+medaljongens
+medaljonger
+medansvarlig
+medarbeid
+medarbeider
+medarbeidere
+medarbeideren
+medarbeiderens
+medarbeideres
+medarbeiderne
+medarbeidernes
+medarbeidet
+medarbeidets
+medbestemmelsesrett
+medborgere
+medbør
+medbøren
+medbørens
+meddele
+meddelelse
+meddelelsen
+meddelelsens
+meddeler
+meddeles
+meddelt
+meddelte
+mede
+medet
+medfart
+medfarten
+medfartens
+medfødd
+medfødt
+medfølelse
+medfølelsen
+medfølelsens
+medføre
+medfører
+medført
+medførte
+medgang
+medgangen
+medgangens
+medgav
+medgi
+medgift
+medgifta
+medgiften
+medgiftens
+medgir
+medgitt
+medgjørlig
+medhjelper
+medhjelpere
+medhjelperen
+medhjelperens
+medhjelperes
+medhjelperne
+medhjelpernes
+medhold
+medholdet
+medholdets
+media
+mediatek
+mediateka
+mediatekene
+mediateker
+mediateket
+mediatekets
+medieforskning
+medieforskningen
+medieforskningens
+mediene
+medier
+mediet
+mediets
+medinnflytelse
+medio
+medisin
+medisinen
+medisinene
+medisinens
+medisiner
+medisinere
+medisineren
+medisinerens
+medisineres
+medisinerne
+medisinernes
+medisinsk
+medisinske
+medisterkake
+meditasjon
+meditasjonen
+meditasjonene
+meditasjonens
+meditasjoner
+meditere
+mediterer
+meditert
+mediterte
+medium
+medkjensla
+medkjensle
+medkjenslene
+medkjensler
+medlem
+medlemmene
+medlemmer
+medlemmers
+medlemmet
+medlemmets
+medlemsavgift
+medlemsavgiften
+medlemsavgiftens
+medlemskap
+medlemskapet
+medlemskapets
+medlemsland
+medlemslanda
+medlemslandene
+medlemsstat
+medlemsstaten
+medlemsstatene
+medlemsstatens
+medlemsstater
+medlidende
+medlidenhet
+medlidenheten
+medlidenhetens
+medmenneske
+medmenneskelig
+medmenneskelighet
+medmenneskeligheten
+medmenneskelighetens
+medmennesker
+medmennesket
+medregnet
+medskapning
+medskapningen
+medskapningens
+medskyldig
+medtas
+medtatt
+medtevler
+medtevleren
+medtevlerens
+medvind
+medvinden
+medvindens
+medvirke
+medvirkende
+medvirker
+medvirket
+medvirkning
+medvirkningen
+medvirkningens
+medviter
+medviteren
+medviterens
+medynk
+medynken
+medynkens
+meg
+mega
+megafon
+megafonen
+megafonene
+megafonens
+megafoner
+megatonn
+megatonnet
+megatonnets
+meget
+megga
+megge
+meggene
+megger
+megla
+megle
+megler
+meglere
+megleren
+meglerens
+megleres
+meglerne
+meglernes
+meglet
+mehe
+mei
+meie
+meien
+meiens
+meier
+meieri
+meieria
+meieriene
+meierier
+meieriet
+meieriets
+meiet
+mein
+meine
+meinet
+meining
+meininga
+meiningen
+meiningens
+meins
+meint
+meinte
+meis
+meisa
+meise
+meisel
+meiselen
+meiselens
+meisen
+meisens
+meisle
+meisler
+meita
+meite
+meitemakk
+meitemakken
+meitemakkene
+meitemakkens
+meitemakker
+meitemark
+meitemarken
+meitemarkene
+meitemarkens
+meitemarker
+meiter
+meitet
+mek
+mekaniker
+mekanikere
+mekanikeren
+mekanikerens
+mekanikeres
+mekanikerne
+mekanikernes
+mekanikk
+mekanikken
+mekanikkens
+mekanisere
+mekaniserer
+mekanisert
+mekaniserte
+mekanisk
+mekaniske
+mekanisme
+mekanismen
+mekanismene
+mekanismens
+mekanismer
+mekka
+mekla
+mekle
+mekler
+meklere
+mekleren
+meklerens
+mekleres
+meklerne
+meklernes
+meklet
+meklingsforslag
+meklingsforslaget
+meklingsforslagets
+mekra
+mekre
+mekrer
+mekret
+meksikaner
+meksikanere
+meksikaneren
+meksikanerens
+meksikaneres
+meksikanerne
+meksikanernes
+meksikansk
+mektig
+mektige
+mektigst
+mektigste
+mel
+melankoli
+melankolien
+melankoliens
+melankoliker
+melankolikere
+melankolikeren
+melankolikerens
+melankolikeres
+melankolikerne
+melankolikernes
+melankolsk
+melasse
+melassen
+melassens
+meld
+melde
+melder
+meldes
+meldestokk
+meldestokken
+meldestokkens
+melding
+meldinga
+meldingen
+meldingene
+meldinger
+meldt
+meldte
+meldugg
+melduggen
+melduggens
+mele
+melen
+melent
+meler
+melet
+melete
+melis
+melisen
+melisens
+melk
+melka
+melke
+melken
+melkens
+melket
+melkevei
+melkeveien
+melkeveiens
+melle
+mellom
+mellomalder
+mellomalderen
+mellomalderens
+mellombels
+mellombølge
+mellombølgen
+mellombølgene
+mellombølgens
+mellombølger
+mellombølgja
+mellombølgje
+mellombølgjene
+mellomfolkelig
+mellomklasse
+mellomklassen
+mellomklassene
+mellomklassens
+mellomklasser
+mellomkomst
+mellomkomsten
+mellomkomstens
+mellomlande
+mellomlandet
+mellomledd
+mellomledda
+mellomleddene
+mellomleddet
+mellomleddets
+mellomliggende
+mellomøre
+mellomøret
+mellomørets
+mellomrom
+mellomrommene
+mellomrommet
+mellomrommets
+mellomtid
+mellomtida
+mellomtiden
+mellomtidens
+mellomvekt
+mellomværende
+melodi
+melodien
+melodiene
+melodiens
+melodier
+melodiøs
+melodiøse
+melodisk
+melodiøst
+melodrama
+melodramaet
+melodramaets
+melodramatisk
+melon
+melonen
+melonene
+melonens
+meloner
+melte
+membran
+membranen
+membranene
+membranens
+membraner
+memoar
+memoarene
+memoarer
+memoaret
+memoarets
+memoranda
+memorandum
+memorandumet
+memorandumets
+memorial
+memorialen
+memorialene
+memorialens
+memorialer
+men
+åmen
+menasjeri
+menasjeria
+menasjeriene
+menasjerier
+menasjeriet
+menasjeriets
+mene
+mened
+meneden
+menedens
+meneder
+mener
+menes
+menet
+menga
+mengd
+mengda
+mengde
+mengden
+mengdens
+mengder
+mengdevis
+menge
+menget
+menig
+menige
+menighet
+menigheten
+menighetene
+menighetens
+menigheter
+menighetsfakultet
+menighetsfakultetet
+menighetsfakultetets
+menighetsråd
+menigmann
+menigmannen
+menigmannens
+mening
+meninga
+meningen
+meningene
+meningens
+meninger
+meningitt
+meningitten
+meningittens
+meningsberettiget
+meningsfelle
+meningsfellen
+meningsfellens
+meningsforskjell
+meningsforskjellen
+meningsforskjellene
+meningsforskjellens
+meningsforskjeller
+meningsfylt
+meningsløs
+meningsløse
+meningsløst
+meningsmåling
+meningsmålingen
+meningsmålingene
+meningsmålingens
+meningsmålinger
+meningsutveksling
+meningsutvekslingen
+meningsutvekslingene
+meningsutvekslingens
+meningsutvekslinger
+menn
+mennene
+mennenes
+menneske
+menneskehet
+menneskeheten
+menneskehetens
+menneskelig
+menneskelige
+menneskelighet
+menneskeligheten
+menneskelighetens
+menneskene
+menneskenes
+mennesker
+menneskerettighet
+menneskerettigheten
+menneskerettighetene
+menneskerettighetens
+menneskerettigheter
+menneskers
+menneskes
+mennesket
+menneskets
+menneskeverd
+menneskeverdet
+menneskeverdets
+menneskeverdige
+menns
+mens
+åmens
+mensendieck
+mensendieckgymnastikk
+mensendieckgymnastikken
+mensendieckgymnastikkens
+menstruasjon
+menstruasjonen
+menstruasjonene
+menstruasjonens
+menstruasjoner
+ment
+mental
+mentale
+mentalhygiene
+mentalhygienen
+mentalhygienens
+mentalitet
+mentaliteten
+mentalitetens
+mentalt
+mente
+mentol
+mentolen
+mentolens
+menuett
+menuetten
+menuettene
+menuettens
+menuetter
+meny
+menyen
+menyene
+menyens
+menyer
+mer
+merg
+mergen
+mergene
+mergens
+merger
+merian
+merianen
+merianene
+merianens
+merianer
+meridian
+meridianen
+meridianene
+meridianens
+meridianer
+meritt
+meritten
+merittene
+merittens
+meritter
+merittere
+meritterer
+merittert
+meritterte
+merk
+merkantil
+merkantile
+merkantilisme
+merkantilismen
+merkantilismens
+merkantilt
+merkbar
+merkbare
+merkbart
+merke
+merkelapp
+merkelappen
+merkelappene
+merkelappens
+merkelapper
+merkelig
+merkelige
+merkene
+merker
+merkes
+merkesmann
+merkesmannen
+merkesmannens
+merket
+merking
+merknad
+merknaden
+merknadene
+merknadens
+merknader
+merksam
+merksamme
+merksamt
+merkverdig
+merlespiker
+merlespikeren
+merlespikerens
+merlespikrene
+merling
+merlinga
+merlingen
+merlingens
+merlspiker
+merlspikeren
+merlspikerens
+merlspikrene
+merr
+merra
+merrene
+merrer
+mers
+mersa
+mersene
+merser
+merset
+mersets
+merskum
+merskumet
+merskumets
+merskummen
+merskummens
+merutgift
+merutgiften
+merutgiftene
+merutgiftens
+merutgifter
+merverdi
+merverdiavgift
+merverdiavgifta
+merverdiavgiften
+merverdiavgiftens
+mesallianse
+mesalliansen
+mesalliansens
+mesan
+mesanen
+mesanene
+mesanens
+mesaner
+mesen
+mesenat
+mesenaten
+mesenatene
+mesenatens
+mesenater
+mesenen
+mesenene
+mesenens
+mesener
+meska
+meskalin
+meskalinet
+meskalinets
+meske
+mesker
+mesket
+meslinger
+meslingrene
+messa
+messe
+messehagel
+messehagelen
+messehagelens
+messehaglene
+messehagler
+messehall
+messehallen
+messehallens
+messen
+messene
+messens
+messer
+messet
+messing
+messingen
+messingens
+mest
+meste
+mesteparten
+mester
+mesteren
+mesterens
+mesterlig
+mesterskap
+mesterskapa
+mesterskapene
+mesterskaper
+mesterskapet
+mesterskapets
+mestis
+mestisen
+mestisene
+mestisens
+mestiser
+mestre
+mestrer
+mestret
+metafor
+metaforen
+metaforene
+metaforens
+metaforer
+metafysiker
+metafysikere
+metafysikeren
+metafysikerens
+metafysikeres
+metafysikerne
+metafysikernes
+metafysikk
+metafysikken
+metafysikkens
+metafysisk
+metall
+metalla
+metallene
+metaller
+metallet
+metallets
+metallisk
+metallurgi
+metallurgien
+metallurgiens
+metamorfose
+metamorfosen
+metamorfosens
+metanol
+metanolen
+metanolens
+meteor
+meteoren
+meteorene
+meteorens
+meteorer
+meteoritt
+meteoritten
+meteorittene
+meteorittens
+meteoritter
+meteorolog
+meteorologen
+meteorologene
+meteorologens
+meteorologer
+meteorologi
+meteorologien
+meteorologiens
+meteorologisk
+meteorologiske
+meter
+meterbølge
+metere
+meteren
+meterne
+metier
+metieren
+metierens
+metieret
+metierets
+metning
+metningen
+metningens
+metode
+metoden
+metodene
+metodens
+metoder
+metodiker
+metodikeren
+metodikerens
+metodikk
+metodikken
+metodikkens
+metodisk
+metodist
+metodisten
+metodistene
+metodistens
+metodister
+metresse
+metrikk
+metrikken
+metrikkene
+metrikkens
+metrikker
+metrisk
+metronom
+metronomen
+metronomene
+metronomens
+metronomer
+metropol
+metropolen
+metropolene
+metropolens
+metropoler
+metropolitt
+metropolitten
+metropolittene
+metropolittens
+metropolitter
+metrum
+metrumene
+metrumer
+metrumet
+metrumets
+mett
+metta
+mette
+mettet
+metyl
+metylen
+metylens
+metylet
+metylets
+mexicaner
+mexicanere
+mexicaneren
+mexicanerens
+mexicaneres
+mexicanerne
+mexicanernes
+mexicansk
+mexikaner
+mexikanere
+mexikaneren
+mexikanerens
+mexikaneres
+mexikanerne
+mexikanernes
+mexikansk
+mezzoforte
+mezzosopran
+mezzosopranen
+mezzosopranens
+måfå
+ømfintlig
+ømfintlige
+ømfintlighet
+ømfintligheten
+ømfintlighetens
+mg
+måg
+mågen
+mågene
+mågens
+måger
+ømhet
+ømheten
+ømhetens
+mi
+midd
+middag
+middagen
+middagens
+middagsbord
+middagsbordet
+middagsbordets
+middagsleite
+middagsleitet
+middagsmat
+middagsmaten
+middagsmatens
+middagsservise
+middagsserviset
+middagstid
+middagstider
+middel
+middelalder
+middelalderen
+middelalderens
+middelaldrende
+middelet
+middelets
+middelmådig
+middelmådige
+middelsstor
+middelstort
+middeltemperatur
+middeltemperaturen
+middeltemperaturens
+midden
+middene
+middens
+midder
+midfaste
+midja
+midje
+midjen
+midjene
+midjens
+midjer
+midla
+midlene
+midler
+midlere
+midlertidig
+midlertidige
+midlet
+midlets
+midnatt
+midnatta
+midnatten
+midnattens
+midnattssola
+midnattssolen
+midnattssolens
+midsommer
+midsommeren
+midsommerens
+midsommers
+midt
+midtbane
+midtbanen
+midtbanens
+midten
+midtens
+midterst
+midtfløy
+midtfløyen
+midtfløyens
+midtgang
+midtgangen
+midtgangens
+midtlinje
+midtlinjen
+midtlinjens
+midtpunkt
+midtpunktet
+midtpunktets
+midtre
+midtskips
+midtsommer
+midtsommeren
+midtsommerens
+midtsommers
+midtstopper
+midtstoppere
+midtstopperen
+midtstopperens
+midtstopperes
+midtstopperne
+midtstoppernes
+midtveis
+midtvinter
+midtvinteren
+midtvinterens
+midtvinters
+midvinter
+midvinteren
+midvinterens
+midvinters
+migrene
+migrenen
+migrenens
+mikado
+mikadoen
+mikadoene
+mikadoens
+mikadoer
+mikkelsmess
+mikkelsmesse
+mikrobe
+mikroben
+mikrobens
+mikrodatamaskin
+mikrodatamaskinen
+mikrodatamaskinene
+mikrodatamaskinens
+mikrodatamaskiner
+mikrofon
+mikrofonen
+mikrofonene
+mikrofonens
+mikrofoner
+mikromaskin
+mikromaskinen
+mikromaskinene
+mikromaskinens
+mikromaskiner
+mikromaskinprogram
+mikromaskinprogrammene
+mikromaskinprogrammer
+mikromaskinprogrammet
+mikromaskinprogrammets
+mikrometer
+mikrometeret
+mikrometerets
+mikrometra
+mikrometre
+mikrometrene
+mikrometret
+mikrometrets
+mikron
+mikronen
+mikronens
+mikroprosessorsystem
+mikroprosessorsystema
+mikroprosessorsystemene
+mikroprosessorsystemer
+mikroprosessorsystemet
+mikroprosessorsystemets
+mikroskop
+mikroskopa
+mikroskopene
+mikroskoper
+mikroskopet
+mikroskopets
+miks
+miksa
+mikse
+mikset
+mikstur
+miksturen
+miksturene
+miksturens
+miksturer
+mil
+mila
+mild
+milde
+mildere
+mildest
+mildeste
+mildna
+mildne
+mildner
+mildnet
+mildt
+mildvær
+mildværet
+mildværets
+milen
+milens
+milepæl
+milepælen
+milepælene
+milepælens
+milepæler
+miles
+milestolpe
+milestolpen
+milestolpens
+militant
+militanten
+militantene
+militantens
+militanter
+militarisme
+militarismen
+militarismens
+militarist
+militaristen
+militaristene
+militaristens
+militarister
+militaristisk
+militær
+militære
+militæret
+militærregime
+militærregimet
+militært
+militærtjeneste
+militærtjenesten
+militærtjenestens
+militærutstyr
+militærutstyret
+militærutstyrets
+milits
+militsen
+militsene
+militsens
+militser
+miljø
+miljøa
+miljøene
+miljøer
+miljøet
+miljøets
+miljømessige
+miljøskadd
+mill
+milliard
+milliarden
+milliardene
+milliardens
+milliarder
+millibar
+millibaren
+millibarens
+milligram
+milligrammet
+milligrammets
+millimeter
+millimetere
+millimeteren
+millimeterens
+millimeteres
+millimeterne
+millimeternes
+million
+millionbeløp
+milliondel
+milliondelen
+milliondelens
+millionen
+millionene
+millionens
+millioner
+millionær
+millionæren
+millionærene
+millionærens
+millionærer
+millionte
+mils
+milt
+miltbrann
+miltbrannen
+miltbrannens
+milten
+miltene
+miltens
+milter
+mime
+mimen
+mimens
+mimiker
+mimikere
+mimikeren
+mimikerens
+mimikeres
+mimikerne
+mimikernes
+mimikk
+mimikken
+mimikkens
+mimosa
+mimose
+mimosen
+mimosene
+mimosens
+mimoser
+mimra
+mimre
+mimrer
+mimret
+min
+mina
+minaret
+minareten
+minaretene
+minaretens
+minareter
+mindre
+mindretal
+mindretalet
+mindretalets
+mindretall
+mindretallet
+mindretallets
+mindreverdig
+mindreverdsfølelse
+mindreverdsfølelsen
+mindreverdsfølelsens
+mine
+minebor
+mineborene
+mineboret
+mineborets
+minen
+miner
+mineraler
+mineralet
+mineralets
+mineralog
+mineralogen
+mineralogene
+mineralogens
+mineraloger
+mineralogi
+mineralogien
+mineralogiens
+mineralogisk
+mineralull
+mineralvann
+mineralvannet
+mineralvannets
+mineralvatn
+mineralvatnet
+mineralvatnets
+minere
+minerer
+minert
+minerte
+minesveiper
+minesveipere
+minesveiperen
+minesveiperens
+minesveiperes
+minesveiperne
+minesveipernes
+miniatyr
+miniatyren
+miniatyrene
+miniatyrens
+miniatyrer
+minima
+minimaene
+minimal
+minimale
+minimalt
+minimum
+minimumene
+minimumer
+minimumet
+minimumets
+minimumslengde
+minimumslengden
+minimumslengdens
+minimumsverdi
+minimumsverdien
+minimumsverdiens
+minister
+ministeren
+ministerens
+ministerialbok
+ministerialboka
+ministerialboken
+ministerialbokens
+ministeriell
+ministeriene
+ministerier
+ministeriet
+ministeriets
+ministerium
+ministerråd
+ministerrådet
+ministerrådets
+ministrene
+ministrer
+mink
+minka
+minke
+minken
+minkende
+minkens
+minker
+minking
+minkinga
+minkingen
+minkingens
+minne
+minnelig
+minnelighet
+minneligheten
+minnelighetens
+minnelse
+minnelsen
+minnelsens
+minnene
+minner
+minnes
+minnesmerke
+minnesmerket
+minnet
+minnetale
+minnetalen
+minnetalene
+minnetalens
+minnetaler
+minnetall
+minnetallet
+minnetallets
+minneverdig
+minning
+minninga
+minoritet
+minoriteten
+minoritetene
+minoritetens
+minoriteter
+mins
+minske
+minsket
+minst
+minste
+minstekrav
+minstekravet
+minstekravets
+minstelønn
+minstelønna
+minstelønnen
+minstelønnens
+minstemål
+minstemålet
+minstemålets
+minstepris
+minsteprisen
+minsteprisene
+minsteprisens
+minstepriser
+mint
+minte
+mintes
+minuend
+minuenden
+minuendene
+minuendens
+minuender
+minus
+minusa
+minusene
+minuser
+minuset
+minusets
+minusgrad
+minusgraden
+minusgradene
+minusgradens
+minusgrader
+minustegn
+minustegnet
+minustegnets
+minutiøs
+minutiøst
+minutt
+minuttene
+minutter
+minutters
+minuttet
+minuttets
+minutts
+mirakel
+mirakelet
+mirakelets
+mirakla
+miraklene
+mirakler
+miraklet
+miraklets
+mirakuløs
+mirakuløse
+mirakuløst
+misantrop
+misantropen
+misantropene
+misantropens
+misantroper
+misbruk
+misbruke
+misbruker
+misbrukere
+misbrukeren
+misbrukerens
+misbrukeres
+misbrukerne
+misbrukernes
+misbrukes
+misbruket
+misbrukt
+misbrukte
+miserabel
+miserabelt
+miserable
+misere
+miseren
+miserens
+misforhold
+misforholdet
+misforholdets
+misfornøyd
+misfornøyde
+misforstå
+misforståelse
+misforståelsen
+misforståelsene
+misforståelsens
+misforståelser
+misforstår
+misforstått
+misgrep
+misgrepa
+misgrepet
+mishag
+mishage
+mishaget
+mishandla
+mishandle
+mishandler
+mishandlet
+mishandling
+mishandlinga
+mishandlingen
+mishandlingene
+mishandlingens
+mishandlinger
+mishugse
+mishøve
+mishøvet
+mishøvets
+misjon
+misjonen
+misjonens
+misjonær
+misjonæren
+misjonærene
+misjonærens
+misjonærer
+misjons
+misjonsarbeid
+misjonsarbeider
+misjonsarbeidet
+misjonsarbeidets
+misjonskafé
+misjonskafeen
+misjonskafeene
+misjonskafeens
+misjonskafeer
+misjonsmark
+misjonsmarken
+misjonsmarkens
+misjonsselskap
+misjonsselskapa
+misjonsselskapene
+misjonsselskaper
+misjonsselskapet
+misjonsselskapets
+miskjenne
+miskjennelsen
+miskjennelsens
+miskjenner
+miskreditt
+miskreditten
+miskredittens
+miskunn
+miskunne
+miskunnelig
+miskunnen
+miskunnens
+miskunnhet
+miskunnheten
+miskunnhetens
+mislig
+mislighet
+misligheten
+mislighetens
+misligholde
+misligholder
+misligholdt
+mislike
+misliker
+mislikt
+mislikte
+mislykkede
+mislykket
+mismodig
+mismodige
+mismot
+mismotet
+mismotets
+misnøye
+misnøyen
+misnøyens
+misoppfatta
+misoppfatte
+misoppfatter
+misoppfattet
+miss
+misse
+missekonkurranse
+missekonkurransen
+missekonkurransens
+missen
+missene
+misser
+misstemning
+misstemningen
+misstemningens
+mist
+mista
+mistak
+mistaka
+mistakene
+mistaket
+mistakets
+mistanke
+mistanken
+mistankene
+mistankens
+mistanker
+mistatt
+mistbenk
+mistbenken
+mistbenkene
+mistbenkens
+mistbenker
+miste
+misteltein
+mistelteinen
+mistelteinene
+mistelteinens
+mistelteiner
+mistenke
+mistenkelig
+mistenkelige
+mistenker
+mistenkes
+mistenksom
+mistenksomhet
+mistenksomheten
+mistenksomhetens
+mistenksomme
+mistenksomt
+mistenkt
+mistenkte
+mister
+mistet
+mistillitsforslag
+mistillitsforslaget
+mistillitsforslagets
+mistok
+mistro
+mistroa
+mistrodde
+mistroen
+mistroens
+mistroisk
+mistru
+mistrua
+mistruen
+mistruent
+mistruisk
+mistyde
+mistyding
+mistydinga
+mistydingen
+mistydning
+mistydningen
+mistydningens
+misunn
+misunne
+misunnelig
+misunnelse
+misunnelsen
+misunnelsens
+misunner
+misunning
+misunninga
+misunningen
+misunningens
+misunt
+misunte
+misvekst
+misvisende
+misvising
+misvisinga
+misvisingen
+misvisingens
+misvisning
+misvisninga
+misvisningen
+misvisningene
+misvisningens
+misvisninger
+mitraljøsa
+mitraljøse
+mitraljøsen
+mitraljøsene
+mitraljøsens
+mitraljøser
+mitt
+mjå
+mjød
+mjøden
+mjødens
+mjødurt
+mjødurta
+mjødurten
+mjødurtens
+mjåe
+mjøl
+mjølbær
+mjølbærene
+mjølbæret
+mjølbærets
+mjøldogg
+mjøldogga
+mjøldoggen
+mjøldoggens
+mjøle
+mjølen
+mjølent
+mjølet
+mjølete
+mjølk
+mjølka
+mjølke
+mjølkebunke
+mjølkebunken
+mjølkebunkens
+mjølket
+mjøll
+mjølla
+mjått
+mjuk
+mjuke
+mjukere
+mjukhet
+mjukheten
+mjukhetens
+mjukna
+mjukne
+mjuknet
+mjukt
+måka
+måke
+måken
+måkene
+måkens
+måker
+måket
+møkk
+møkka
+møkket
+møkkete
+ml
+mål
+målbar
+målbare
+målbart
+målbevisst
+målbinde
+måle
+mæle
+målelig
+målene
+målenhet
+målenheten
+målenhetene
+målenhetens
+målenheter
+måler
+måles
+målestokk
+målestokken
+målestokkens
+målet
+mælet
+måleverktøy
+måleverktøyet
+måleverktøyets
+målform
+målforma
+målformen
+målformene
+målformens
+målformer
+målføre
+målføret
+målgruppa
+målgruppe
+målgruppen
+målgruppene
+målgruppens
+målgrupper
+måling
+målinga
+målingen
+målingene
+målingens
+målinger
+mølja
+mølje
+møljen
+møljene
+møljens
+møljer
+møll
+mølla
+mållag
+mållaget
+mållagets
+mållaus
+møllen
+møllene
+møllens
+møller
+møllere
+mølleren
+møllerens
+mølleres
+møllerne
+møllernes
+møllet
+møllett
+møllspist
+målretta
+målrettet
+måls
+målsetning
+målsetningen
+målsetningene
+målsetningens
+målsetninger
+målsetting
+målsettinga
+målsettingen
+målsettinger
+målskifte
+målskiftet
+målsmann
+målsmannen
+målsmannens
+målsmenn
+målsmennene
+målsmennenes
+målsmenns
+målsugen
+målsugent
+målt
+mælt
+måltaking
+måltakinga
+måltakingen
+måltakingens
+målte
+mælte
+måltid
+måltida
+måltidene
+måltider
+måltidet
+måltidets
+mm
+ømme
+måne
+møne
+måned
+måneden
+månedene
+månedens
+måneder
+måneders
+månedlig
+månedlige
+måneds
+månedslov
+månedsloven
+månedslovens
+månedsvis
+mnemoteknikk
+mnemoteknikken
+mnemoteknikkens
+månen
+månene
+månens
+måner
+måneskinn
+måneskinnet
+måneskinnets
+mønestein
+mønet
+mønja
+mønje
+mønjet
+mønsås
+mønsåsen
+mønsåsene
+mønsåsens
+mønsåser
+mønster
+mønsteret
+mønsterets
+mønstra
+mønstre
+mønstrene
+mønstret
+mønstrets
+mønstring
+mønstringa
+mønstringen
+mønstringens
+mo
+mobb
+mobba
+mobben
+mobbens
+mobber
+mobbet
+mobil
+mobile
+mobilisere
+mobilisert
+mobiliserte
+mobilitet
+mobiliteten
+mobilitetens
+mobilt
+mod
+modale
+modalene
+modaler
+modalet
+modell
+modellen
+modellene
+modellens
+modeller
+modellere
+modellerer
+modelleres
+modellering
+modelleringa
+modelleringen
+modelleringens
+modellert
+modellerte
+modellør
+modelløren
+modellørene
+modellørens
+modellører
+modem
+modema
+modemene
+modemer
+modemet
+modemets
+modemisere
+modemiserer
+modemisert
+modemiserte
+moden
+modenhet
+modenhets
+modent
+moder
+moderasjon
+moderasjonen
+moderasjonene
+moderasjonens
+moderasjoner
+moderat
+moderate
+moderere
+moderert
+modererte
+moderlig
+moderne
+modernisere
+moderniseres
+modernisering
+moderniseringa
+moderniseringen
+moderniseringens
+modernisert
+modernisme
+modernismen
+modernismens
+modernistisk
+moderskap
+moderskapet
+modi
+modiene
+modifikasjon
+modifikasjonen
+modifikasjonene
+modifikasjonens
+modifikasjoner
+modifiser
+modifisere
+modifiserer
+modifisert
+modifiserte
+modig
+modige
+modne
+modnes
+modning
+modningen
+modningstid
+modningstida
+modningstiden
+modningstidens
+modul
+modulasjon
+modulasjonen
+modulasjonene
+modulasjonens
+modulasjoner
+modulen
+modulene
+modulens
+moduler
+modulere
+modulerer
+modulering
+moduleringa
+moduleringen
+moduleringens
+modulert
+modulerte
+modus
+modusen
+modusens
+moen
+moens
+mogop
+mogopen
+mogopene
+mogopens
+mogoper
+mokasin
+mokasinen
+mokasinene
+mokasinens
+mokasiner
+mokkakaffe
+mokkakaffen
+mokkakaffens
+mol
+molar
+molaren
+molarene
+molarens
+molarer
+molbakke
+molbakken
+molbakkens
+molbo
+molboaktig
+molboen
+molboene
+molboens
+molboer
+mold
+molda
+molde
+moldet
+moldete
+moldvarp
+moldvarpen
+moldvarpens
+mole
+molefonken
+molefonkent
+molefonkne
+molekyl
+molekyla
+molekylene
+molekyler
+molekylet
+molekylets
+molekylær
+molekylært
+moler
+molest
+molesten
+molestene
+molestens
+molester
+molestere
+molesterer
+molestert
+molesterte
+moll
+mollen
+mollens
+mollusk
+mollusken
+molluskens
+molo
+moloen
+moloene
+moloens
+moloer
+molok
+moloken
+molokene
+molokens
+moloker
+molta
+molte
+molten
+moltene
+moltens
+molter
+molybden
+moment
+momenta
+momentan
+momentant
+momentene
+momenter
+momentet
+momentets
+momp
+mompen
+mompene
+mompens
+momper
+moms
+momsen
+momsens
+mon
+monark
+monarken
+monarkene
+monarkens
+monarker
+monarki
+monarkia
+monarkiene
+monarkier
+monarkiet
+monarkiets
+monarkist
+monarkisten
+monarkistene
+monarkistens
+monarkister
+monden
+mondent
+monegaskisk
+monetær
+monetære
+monetært
+mongol
+mongolen
+mongolene
+mongolens
+mongoler
+mongoloid
+mongolsk
+mongolske
+monitor
+monitoren
+monitorene
+monitorens
+monitorer
+monn
+monne
+monnen
+monnens
+monner
+monoftong
+monoftongen
+monoftongene
+monoftongens
+monoftonger
+monogam
+monogami
+monogamiet
+monogamiets
+monogamt
+monografi
+monografien
+monografiene
+monografiens
+monografier
+monogram
+monogramma
+monogrammene
+monogrammer
+monogrammet
+monogrammets
+monokkel
+monokkelen
+monokkelens
+monoklene
+monokler
+monolitt
+monolitten
+monolittene
+monolittens
+monolitter
+monolog
+monologen
+monologene
+monologens
+monologer
+monoman
+monomant
+monopol
+monopola
+monopolene
+monopoler
+monopolet
+monopolets
+monopolisere
+monopoliserer
+monopolisert
+monopoliserte
+monopolmakt
+monoton
+monotone
+monotoni
+monotonien
+monotoniens
+monotont
+monster
+monsteret
+monsterets
+monstra
+monstre
+monstrene
+monstret
+monstrets
+monstrum
+monstrumet
+monstrumets
+monsun
+monsunen
+monsunene
+monsunens
+monsuner
+montasje
+montasjen
+montasjens
+monter
+montere
+monteren
+monterens
+monterer
+monteres
+montering
+monteringa
+monteringen
+monteringens
+montert
+monterte
+montør
+montre
+montren
+montøren
+montrene
+montørene
+montrens
+montørens
+montrer
+montører
+monument
+monumenta
+monumental
+monumentale
+monumentalt
+monumentene
+monumenter
+monumentet
+monumentets
+moped
+mopeden
+mopedene
+mopedens
+mopeder
+mopedist
+mopedisten
+mopedistene
+mopedistens
+mopedister
+mopp
+moppa
+moppen
+moppens
+mopper
+moppet
+mops
+mopsen
+mopsene
+mopsens
+mopser
+mor
+mora
+moral
+moralen
+moralene
+moralens
+moraler
+moralisere
+moraliserer
+moralisert
+moraliserte
+moralitet
+moraliteten
+moralitetene
+moralitetens
+moraliteter
+moralsk
+moralske
+morass
+morassa
+morassene
+morasser
+morasset
+morassets
+moratoria
+moratoriene
+moratorier
+moratoriet
+moratoriets
+moratorium
+morbær
+morbæret
+morbærets
+morbror
+morbroren
+morbrorens
+mord
+morda
+mordene
+morder
+mordere
+morderen
+morderens
+morderes
+morderisk
+morderne
+mordernes
+mordet
+mordets
+more
+moreld
+morelden
+moreldens
+morell
+morellen
+morellene
+morellens
+moreller
+moren
+morenen
+morenens
+morens
+moret
+morfin
+morfinen
+morfinens
+morfinist
+morfinisten
+morfinistene
+morfinistens
+morfinister
+morfolog
+morfologen
+morfologens
+morfologi
+morfologien
+morfologiens
+morgen
+morgenavis
+morgenavisen
+morgenavisens
+morgendagen
+morgendagens
+morgenen
+morgenene
+morgenens
+morgener
+morgengry
+morgengryet
+morgengryets
+morgenkvist
+morgenkvisten
+morgenkvistens
+morgentime
+morgentimen
+morgentimene
+morgentimens
+morgentimer
+morges
+moria
+morild
+morilden
+morildens
+morkel
+morkelen
+morkelens
+morken
+morkent
+morklene
+morkler
+morkne
+mormon
+mormonen
+mormonene
+mormonens
+mormoner
+mormor
+mormora
+mormoren
+mormorens
+moro
+moroa
+moroen
+moroene
+moroens
+moroer
+morosam
+morosamme
+morosamt
+mors
+morsarv
+morsarven
+morsarvens
+morse
+morsealfabet
+morsealfabetet
+morsealfabetets
+morsk
+morskap
+morskapen
+morskapens
+morskapet
+morskapets
+morske
+morskt
+morsmelk
+morsmelka
+morsmelken
+morsmelkens
+morsmål
+morsmåla
+morsmålene
+morsmålet
+morsmålets
+morsom
+morsomme
+morsomst
+morsomste
+morsomt
+mort
+mortalitet
+mortaliteten
+mortem
+morter
+mortere
+morteren
+morterens
+morteres
+morterne
+morternes
+mortifikasjon
+mortifikasjonen
+mortifikasjonene
+mortifikasjonens
+mortifikasjoner
+mortifisere
+mortifiserer
+mortifisert
+mortifiserte
+mos
+mosaikk
+mosaikken
+mosaikkene
+mosaikkens
+mosaikker
+mosaisk
+mose
+mosegrodd
+mosen
+mosens
+moset
+mosete
+mosjon
+mosjonen
+mosjonene
+mosjonens
+mosjoner
+mosjonere
+mosjonerer
+mosjonert
+mosjonerte
+mosjonist
+mosjonisten
+mosjonistene
+mosjonistens
+mosjonister
+moskito
+moskitoen
+moskitoene
+moskitoens
+moskitoer
+moskovitt
+moskovitten
+moskovittene
+moskovittens
+moskovitter
+moskus
+moskusen
+moskusene
+moskusens
+moskuser
+most
+moster
+mosteren
+mosterens
+mostra
+mostre
+mostrene
+mostrer
+mot
+åmot
+motarbeide
+motarbeidet
+motbakke
+motbakken
+motbakkene
+motbakkens
+motbakker
+motbør
+motbøra
+motbøren
+motbørens
+motbydelig
+motbydelige
+mote
+motebilde
+motebildet
+motell
+motella
+motellene
+moteller
+motellet
+motellets
+moten
+motens
+moteretning
+moteretningen
+moteretningens
+moteriktig
+motesak
+motesaken
+motesakens
+motet
+åmotet
+åmotets
+motett
+motetten
+motettene
+motettens
+motetter
+motettkor
+motfallen
+motforestilling
+motforestillingen
+motforestillingene
+motforestillingens
+motforestillinger
+motgang
+motgangen
+motgangens
+motganger
+mothake
+mothaken
+mothakene
+mothakens
+mothaker
+mothug
+mothugen
+mothugens
+motiv
+motiva
+motivasjon
+motivasjonen
+motivasjonene
+motivasjonens
+motivasjoner
+motivene
+motiver
+motivere
+motiverende
+motiverer
+motivering
+motiveringa
+motiveringen
+motiveringens
+motivert
+motiverte
+motivet
+motivets
+motkrav
+motkravet
+motkravets
+motkupp
+motlaus
+motløs
+motmæle
+motmælet
+motor
+motorbåt
+motorbåten
+motorbåtene
+motorbåtens
+motorbåter
+motoren
+motorene
+motorens
+motorer
+motorfabrikk
+motorfabrikken
+motorfabrikkene
+motorfabrikkens
+motorfabrikker
+motorisere
+motoriserer
+motorisert
+motoriserte
+motorisk
+motorkjøretøy
+motorkjøretøyer
+motorsag
+motorsaga
+motorsagen
+motorsagene
+motorsagens
+motorsager
+motorsport
+motorsporten
+motorsportens
+motorstopp
+motorstoppen
+motorstoppens
+motorsykkel
+motorsykkelen
+motorsykkelens
+motorsykkelløp
+motorsykkelløpet
+motorsykkelløpets
+motorsyklene
+motorsykler
+motorveg
+motorvegen
+motorvegene
+motorvegens
+motorveger
+motorvei
+motorveien
+motorveiene
+motorveiens
+motorveier
+motpart
+motparten
+motpartens
+motpol
+motpolen
+motpolene
+motpolens
+motpoler
+mots
+motsagt
+motsatt
+motsatte
+motsetning
+motsetningen
+motsetningene
+motsetningens
+motsetninger
+motsetningsforhold
+motsette
+motsetter
+motsi
+motsier
+motsigelse
+motsigelsen
+motsigelsene
+motsigelsens
+motsigelser
+motsigelsesfri
+motsigelsesfritt
+motspillere
+motspilleren
+motspillerens
+motstå
+motstand
+motstanden
+motstandens
+motstander
+motstandere
+motstanderen
+motstanderens
+motstanderes
+motstanderne
+motstandernes
+motstandskraft
+motstandskraften
+motstandskraftens
+motstrebende
+motstrid
+motstriden
+motstridende
+motstridens
+motsvar
+motsvare
+motsvarer
+mott
+motta
+mottak
+mottaka
+mottakelig
+mottakelse
+mottakelsen
+mottakelsens
+mottakene
+mottaker
+mottakere
+mottakeren
+mottakerens
+mottakeres
+mottakerne
+mottakernes
+mottaket
+mottakets
+mottaking
+mottakinga
+mottakingen
+mottakingens
+mottar
+mottatt
+mottiltak
+motto
+mottoa
+mottoene
+mottoer
+mottoet
+mottoets
+mottok
+motvekt
+motvekten
+motvektens
+motvilje
+motviljen
+motviljens
+motvillig
+motvirka
+motvirke
+motvirker
+motvirket
+movere
+moverer
+movert
+moverte
+måpe
+måper
+måpt
+måpte
+mr
+mår
+mør
+møre
+måren
+mårene
+mårens
+mårer
+mørje
+mrk
+mørk
+mørke
+mørkeblå
+mørkeloft
+mørkeloftet
+mørkeloftets
+mørker
+mørkere
+mørkeredd
+mørkeret
+mørkest
+mørkeste
+mørket
+mørketid
+mørketida
+mørketiden
+mørketidens
+mørkets
+mørklagt
+mørklegge
+mørkne
+mørkning
+mørkninga
+mørkningen
+mørkningens
+mørkredd
+mørkret
+mørkt
+mrs
+mørser
+mørseren
+mørserens
+mørt
+mørtel
+mørtelen
+mørtelens
+måse
+måsen
+måsens
+ømskinna
+ømskinnede
+ømskinnet
+måt
+mæt
+møt
+ømt
+måte
+møte
+møtedeltakerne
+måtehold
+måteholden
+måteholdent
+måteholdet
+måteholdets
+måteholdne
+møteleder
+møteledere
+møtelederen
+møtelederens
+møtelederes
+møtelederne
+møteledernes
+måtelig
+måten
+møtene
+måtens
+måter
+møter
+møterom
+møterommene
+møterommet
+møterommets
+møtes
+møtested
+møtestedene
+møtestedet
+møtestedets
+møtet
+møtets
+ømtålig
+møtrik
+møtriken
+møtrikens
+møtt
+måtte
+møtte
+møttes
+måttet
+mudder
+mudderet
+mudderets
+mudra
+mudre
+mudrer
+mudret
+mue
+muene
+muer
+muffa
+muffe
+muffen
+muffene
+muffens
+muffer
+muga
+muge
+mugene
+muger
+mugg
+mugga
+mugge
+muggen
+muggent
+mugget
+mugna
+mugne
+mugner
+mugnet
+muhamedaner
+muhamedanere
+muhamedaneren
+muhamedanerens
+muhamedaneres
+muhamedanerne
+muhamedanernes
+muhammedaner
+muhammedanere
+muhammedaneren
+muhammedanerens
+muhammedaneres
+muhammedanerne
+muhammedanernes
+mukk
+mukka
+mukke
+mukket
+mulatt
+mulatten
+mulattene
+mulattens
+mulatter
+muld
+mulda
+mulden
+muldens
+muldvarp
+muldvarpen
+muldvarpene
+muldvarpens
+muldvarper
+muldyr
+muldyrene
+muldyret
+muldyrets
+mule
+mulen
+mulene
+mulens
+muler
+mulig
+mulige
+muligens
+muliggjort
+muliggjør
+muliggjøre
+mulighet
+muligheten
+mulighetene
+mulighetens
+muligheter
+muljert
+mulkt
+mulkta
+mulkten
+mulktene
+mulktens
+mulkter
+mulktere
+mulkterer
+mulktert
+mulkterte
+mulla
+mulle
+muller
+mullet
+mulm
+mulmet
+mulmets
+multa
+multe
+multen
+multene
+multens
+multer
+multilateral
+multilaterale
+multilateralt
+multiplene
+multipler
+multiplikasjon
+multiplikasjonen
+multiplikasjonene
+multiplikasjonens
+multiplikasjoner
+multipliser
+multiplisere
+multipliserer
+multiplisert
+multipliserte
+multiplum
+multippel
+multippelen
+multippelens
+mumie
+mumien
+mumiens
+mumle
+mumlet
+mumling
+mumlinga
+mumlingen
+mumlingens
+mundering
+munderinga
+munderingen
+munderingens
+munk
+munken
+munkene
+munkens
+munkeorden
+munkeordenen
+munkeordenens
+munker
+munn
+munne
+munnen
+munnens
+munner
+munnet
+munnfull
+munnfullen
+munnfullene
+munnfullens
+munnfuller
+munnhell
+munnhellet
+munnhellets
+munning
+munningen
+munningene
+munningens
+munninger
+munnkurv
+munnskjenk
+munnskjenken
+munnskjenkens
+munnsår
+munnsåret
+munnsårets
+munnstilling
+munnstillingen
+munnstillingens
+munnstykke
+munnstykkene
+munnstykker
+munnstykket
+munnstykkets
+munnsvær
+munnsværet
+munnsværets
+munnvik
+munnvika
+munnviken
+munnvikene
+munnvikens
+munnviker
+munter
+munterhet
+munterheten
+munterhetens
+muntert
+muntlig
+muntlige
+muntre
+mur
+mura
+muren
+murende
+murene
+murens
+murer
+mureren
+murerens
+muret
+muring
+muringen
+muringens
+murmester
+murmesteren
+murmesterens
+murmestrene
+murra
+murre
+murstein
+mursteinen
+mursteinene
+mursteinens
+mursteiner
+mus
+musa
+muse
+museene
+museer
+museers
+museet
+museets
+muselman
+muselmanen
+muselmanens
+musen
+musens
+musestille
+muset
+musete
+museum
+museums
+museumsfag
+museumsfagene
+museumsfaget
+museumsfagets
+musikal
+musikalen
+musikalene
+musikalens
+musikaler
+musikalsk
+musikalske
+musikant
+musikanten
+musikantene
+musikantens
+musikanter
+musiker
+musikere
+musikeren
+musikerens
+musikeres
+musikerne
+musikernes
+musikk
+musikken
+musikkens
+musikkglede
+musikkgleden
+musikkgledens
+musikkinstrument
+musikkinstrumentene
+musikkinstrumenter
+musikkinstrumentet
+musikkinstrumentets
+musikkliv
+musikklivet
+musikklivets
+musikklærer
+musikklærere
+musikklæreren
+musikklærerens
+musikklæreres
+musikklærerne
+musikklærernes
+musikkskole
+musikkskolen
+musikkskolene
+musikkskolens
+musikkskoler
+musikkspill
+musikkspillene
+musikkspiller
+musikkspillet
+musikkspillets
+musisere
+musiserer
+musisering
+musiseringa
+musiseringen
+musiseringens
+musisert
+musiserte
+muskat
+muskatblomme
+muskatblommen
+muskatblommens
+muskaten
+muskatens
+muskedunder
+muskedunderen
+muskedunderens
+muskel
+muskelen
+muskelens
+muskelsvinn
+muskelsvinnet
+muskelsvinnets
+musketer
+musketeren
+musketerens
+muskett
+musketten
+muskettene
+muskettens
+musketter
+musklene
+muskler
+muskregn
+muskregnet
+muskregnets
+muskulatur
+muskulaturen
+muskulaturens
+muskuløs
+muskuløse
+muskuløst
+muslim
+muslimen
+muslimene
+muslimens
+muslimer
+musling
+muslingen
+muslingene
+muslingens
+muslinger
+mussa
+musse
+musselin
+musselinen
+musselinens
+mussere
+musserer
+mussert
+musserte
+mustang
+mustangen
+mustangene
+mustangens
+mustanger
+mustasje
+mustasjen
+mustasjens
+mutant
+mutanten
+mutantens
+mutasjon
+mutasjonen
+mutasjonene
+mutasjonens
+mutasjoner
+mute
+mutingsbrev
+mutingsbrevet
+mutingsbrevets
+mutrer
+mutt
+mutte
+mutter
+mutteren
+mutterens
+mutters
+mva
+møy
+møya
+myalgi
+myalgien
+myalgiens
+møydom
+møydommen
+møydommens
+mye
+møye
+møyefull
+mygg
+myggen
+myggene
+myggens
+mygger
+mygl
+mygla
+mygle
+myglet
+myhank
+myhanken
+myhankene
+myhankens
+myhanker
+myk
+myke
+mykere
+mykes
+mykhet
+mykheten
+mykhetens
+mykna
+mykne
+mykner
+mykneren
+myknerens
+myknet
+mykolog
+mykologen
+mykologens
+mykt
+mykte
+mylder
+mylderet
+mylderets
+myldra
+myldre
+myldret
+myldrets
+mynde
+mynden
+myndens
+myndig
+myndige
+myndigere
+myndighet
+myndigheten
+myndighetene
+myndighetens
+myndigheter
+myndigheters
+myndling
+myndlingen
+myndlingens
+mynt
+mynte
+mynten
+myntens
+mynter
+myntet
+myr
+myra
+myrde
+myrdede
+myrdet
+myren
+myrens
+myriade
+myriaden
+myriadens
+myrlendt
+myrra
+myrraen
+myrraens
+myrsnipa
+myrsnipe
+myrsnipen
+myrsnipene
+myrsnipens
+myrsniper
+myrt
+myrten
+myrtene
+myrtens
+myrter
+myrull
+myrulla
+myrullen
+myrullens
+myse
+myser
+myset
+møysom
+møysommelig
+møysomt
+mysost
+mysosten
+mysostene
+mysostens
+mysoster
+myssmør
+myssmøret
+myssmørets
+myst
+myste
+mysteria
+mysteriene
+mysterier
+mysteriet
+mysteriets
+mysterium
+mystifisere
+mystifiserer
+mystifisert
+mystifiserte
+mystikk
+mystikken
+mystikkens
+mystisisme
+mystisismen
+mystisismens
+mystisk
+mystiske
+myte
+myten
+mytene
+mytens
+myter
+mytisk
+mytologi
+mytologien
+mytologiene
+mytologiens
+mytologier
+mytologisk
+mytteri
+mytteria
+mytteriene
+mytterier
+mytteriet
+mytteriets
+nå
+nø
+én
+Åna
+nabb
+nabben
+nabbene
+nabbens
+nabber
+nabo
+naboen
+naboene
+naboens
+naboer
+nabokommune
+nabokommunen
+nabokommunene
+nabokommunens
+nabokommuner
+nabolag
+nabolaget
+nabolagets
+naboland
+nabolanda
+nabolandene
+nabolandet
+nabolandets
+naboskap
+naboskapet
+naboskapets
+nabostat
+nabostaten
+nabostatene
+nabostatens
+nabostater
+nachspiel
+nachspielet
+nachspielets
+nafta
+naftaen
+naftaens
+naftalin
+nag
+nage
+naget
+nagl
+nagle
+naglefast
+naglen
+naglens
+naiv
+naive
+naivitet
+naiviteten
+naivitetens
+naivt
+najada
+najade
+najaden
+najadene
+najadens
+najader
+naken
+nakent
+nakke
+nakken
+nakkens
+nakne
+namibier
+namibiere
+namibieren
+namibierens
+namibieres
+namibierne
+namibiernes
+namibisk
+namngjeten
+namsrett
+namsretten
+namsrettens
+napp
+nappa
+nappaen
+nappaens
+nappe
+nappet
+nappetak
+nappetaket
+nappetakets
+narhval
+narhvalen
+narhvalens
+narkoman
+narkomanen
+narkomanens
+narkomani
+narkomanien
+narkomaniens
+narkomant
+narkose
+narkosen
+narkosens
+narkotika
+narkotikaen
+narkotikaene
+narkotikaens
+narkotikamisbruk
+narkotikamisbruket
+narkotikamisbrukets
+narkotikasak
+narkotikasaken
+narkotikasakene
+narkotikasakens
+narkotikasaker
+narkotiker
+narkotikere
+narkotikeren
+narkotikerens
+narkotikeres
+narkotikerne
+narkotikernes
+narkotikum
+narkotikumet
+narkotikumets
+narkotisk
+narkotiske
+narr
+narra
+narraktig
+narre
+narren
+narrens
+narreskap
+narreskapen
+narreskapens
+narresmokk
+narresmokken
+narresmokkens
+narrestrek
+narrestreken
+narrestrekene
+narrestrekens
+narrestreker
+narret
+narrifas
+narrifasen
+narrifasene
+narrifasens
+narrifaser
+narsisme
+narsismen
+narsismens
+narsiss
+narsissen
+narsissene
+narsissens
+narsisser
+narv
+narven
+narvene
+narvens
+narver
+nasal
+nasalen
+nasalens
+nasalert
+nasalt
+nasareer
+nasareere
+nasareeren
+nasareerens
+nasareeres
+nasareerne
+nasareernes
+nasjon
+nasjonal
+nasjonalbudsjett
+nasjonalbudsjettet
+nasjonalbudsjettets
+nasjonaldrakt
+nasjonaldrakta
+nasjonaldrakten
+nasjonaldraktene
+nasjonaldraktens
+nasjonaldrakter
+nasjonale
+nasjonalforsamling
+nasjonalforsamlingen
+nasjonalforsamlingene
+nasjonalforsamlingens
+nasjonalforsamlinger
+nasjonalgalleri
+nasjonalgalleriet
+nasjonalgalleriets
+nasjonalgarde
+nasjonalgarden
+nasjonalgardens
+nasjonalisere
+nasjonaliserer
+nasjonalisert
+nasjonaliserte
+nasjonalisme
+nasjonalismen
+nasjonalismens
+nasjonalist
+nasjonalisten
+nasjonalistene
+nasjonalistens
+nasjonalister
+nasjonalistiske
+nasjonalitet
+nasjonaliteten
+nasjonalitetens
+nasjonalpark
+nasjonalparken
+nasjonalparkene
+nasjonalparkens
+nasjonalparker
+nasjonalprodukt
+nasjonalproduktene
+nasjonalprodukter
+nasjonalproduktet
+nasjonalproduktets
+nasjonalregnskap
+nasjonalregnskapet
+nasjonalregnskapets
+nasjonalt
+nasjonen
+nasjonene
+nasjonenes
+nasjonens
+nasjoner
+nasjons
+nask
+naska
+naske
+naskeri
+naskeria
+naskeriene
+naskerier
+naskeriet
+naskeriets
+nasket
+natrium
+natron
+natronet
+natronets
+natt
+natta
+nattarbeid
+nattarbeidet
+nattarbeidets
+nattbord
+nattbordet
+nattbordets
+natte
+nattefrost
+nattefrosten
+nattefrostens
+natten
+nattens
+nattergal
+nattergalen
+nattergalene
+nattergalens
+nattergaler
+nattero
+natteroa
+natteroen
+natteroens
+nattevakt
+nattevakta
+nattevaktene
+nattevakter
+nattfiol
+nattfiolen
+nattfiolens
+nattfly
+nattflyene
+nattkafé
+nattkafeen
+nattkafeene
+nattkafeenes
+nattkafeens
+nattkafeer
+nattkjole
+nattkjolen
+nattkjolene
+nattkjolens
+nattkjoler
+nattlig
+nattvakt
+nattvakta
+nattvakten
+nattvaktens
+nattverd
+nattverden
+nattverdens
+natur
+naturalhushold
+naturalhusholdet
+naturalhusholdets
+naturalier
+naturalisere
+naturaliserer
+naturalisert
+naturaliserte
+naturalisme
+naturalismen
+naturalismens
+naturalistisk
+naturalistiske
+naturelsker
+naturelskeren
+naturelskerens
+naturen
+naturens
+naturfag
+naturfaga
+naturfagene
+naturfaget
+naturfagets
+naturgass
+naturgassen
+naturgassens
+naturhistorisk
+naturhistoriske
+naturkunne
+naturlig
+naturlige
+naturligst
+naturligste
+naturligvis
+naturressurs
+naturressursen
+naturressursene
+naturressursens
+naturressurser
+naturtro
+naturvern
+naturverner
+naturvernet
+naturvernets
+naturvitenskap
+naturvitenskapelig
+naturvitenskapelige
+naturvitenskapen
+naturvitenskapens
+natyrell
+natyrella
+natyrellene
+natyreller
+natyrellet
+natyrellets
+naue
+nauende
+naurisk
+nauru
+nauruer
+nauruere
+naurueren
+nauruerens
+naurueres
+nauruerne
+nauruernes
+naus
+naust
+nausta
+naustene
+naustet
+naustets
+naut
+nauta
+nauten
+nautent
+nautet
+nautets
+nautikk
+nautikken
+nautikkens
+nautisk
+nautiske
+nautne
+nav
+nava
+navar
+navaren
+navarene
+navarens
+navarer
+navene
+navet
+navets
+navigasjon
+navigasjonen
+navigasjonene
+navigasjonens
+navigasjoner
+navigatør
+navigatøren
+navigatørene
+navigatørens
+navigatører
+navigere
+navigerer
+navigert
+navigerte
+navle
+navlen
+navlens
+navn
+navnebror
+navnebroren
+navnebrorens
+navneforslag
+navneforslaget
+navneforslagets
+navnene
+navneskilt
+navneskilta
+navneskiltene
+navneskiltet
+navneskiltets
+navnet
+navnetrekk
+navnetrekket
+navnetrekkets
+navngav
+navngi
+navngitt
+navngitte
+navngjeten
+navnkundig
+navnspurt
+nazifisere
+nazifiserer
+nazifisert
+nazifiserte
+nazisme
+nazismen
+nazismens
+nazist
+nazisten
+nazistene
+nazistens
+nazister
+nazistisk
+nazistiske
+nød
+ånd
+nåda
+nøda
+Åndalsnes
+nådd
+nådde
+nødde
+nåde
+ånde
+åndedrag
+åndedragene
+åndedraget
+åndedragets
+åndedrett
+åndedrettet
+åndedrettets
+åndelaus
+åndelause
+åndelaust
+åndelig
+åndelige
+åndeløs
+nådeløse
+nådeløst
+nåden
+nøden
+ånden
+åndene
+nødens
+åndens
+ånder
+ånderen
+ånderens
+åndet
+åndfull
+åndfullt
+nødhavn
+nødhavna
+nødhavnene
+nødhavner
+nødhjelp
+nådig
+nødig
+nådigst
+nødlande
+nødlandet
+nødlanding
+nødlandinga
+nødlandingen
+nødlandingens
+nødlidende
+åndløs
+åndra
+åndrene
+åndrer
+nødsage
+nødsaget
+åndsarbeider
+åndsarbeidere
+åndsarbeideren
+åndsarbeiderens
+åndsarbeideres
+åndsarbeiderne
+åndsarbeidernes
+åndselite
+åndseliten
+åndselitens
+nådsensbrød
+nådsensbrødet
+nådsensbrødets
+nødsfall
+nødsfalla
+nødsfallene
+nødsfallet
+nødsfallets
+åndsfattig
+åndsfelle
+åndsfellen
+åndsfellens
+åndsfrihet
+åndsfriheten
+åndsfrihetens
+åndsfrisk
+nødsignal
+nødsignala
+nødsignalene
+nødsignaler
+nødsignalet
+nødsignalets
+åndsliv
+åndslivet
+åndslivets
+åndsnærvær
+åndsnærværelse
+åndsnærværelsen
+åndsnærværelsens
+åndsnærværende
+åndsnærværet
+åndsnærværets
+åndsretning
+åndsretningen
+åndsretningens
+åndssvak
+åndssvake
+åndsverk
+åndsverker
+åndsverket
+åndsverkets
+nødt
+nødtørftig
+nødutgang
+nødutgangen
+nødutgangene
+nødutgangens
+nødutganger
+nødvendig
+nødvendige
+nødvendiggjør
+nødvendiggjøre
+nødvendighet
+nødvendigheten
+nødvendighetens
+nødvendigst
+nødvendigste
+nødvendigvis
+nødverge
+nødverget
+ne
+nåe
+nebb
+nebbene
+nebbet
+nebbetanga
+nebbets
+nebbtang
+nebbtanga
+nebbtangen
+nebbtangens
+ned
+nedad
+nedadgående
+nedafor
+nedafra
+nedarve
+nedarvet
+nedbetal
+nedbetale
+nedbetalende
+nedbetaler
+nedbetales
+nedbetaling
+nedbetalinga
+nedbetalingen
+nedbetalingene
+nedbetalingens
+nedbetalinger
+nedbetalt
+nedbetalte
+nedblåst
+nedbør
+nedbøren
+nedbørens
+nedbrutt
+nedbrytende
+neddempa
+neddykket
+neddyssa
+nede
+nedefra
+nedenfor
+nedenfra
+nedenom
+nedenstående
+nedenunder
+nederdrektig
+nederlag
+nederlaga
+nederlagene
+nederlaget
+nederlagets
+nederlandsk
+nederlandske
+nederlender
+nederlendere
+nederlenderen
+nederlenderens
+nederlenderes
+nederlenderne
+nederlendernes
+nederlending
+nederlendingen
+nederlendingene
+nederlendingens
+nederlendinger
+nederst
+nederste
+nedetter
+nedfall
+nedfallet
+nedfallets
+nedfelt
+nedfelte
+nedfor
+nedfrysing
+nedfrysinga
+nedfrysingen
+nedgang
+nedgangen
+nedgangene
+nedgangens
+nedganger
+nedgravd
+nedgravde
+nedgrodd
+nedi
+nedkjempe
+nedkjemper
+nedkjempet
+nedkjøring
+nedkjøringa
+nedkjøringen
+nedkjøringene
+nedkjøringens
+nedkjøringer
+nedkjørsel
+nedkjørselen
+nedkjørselens
+nedkjørsla
+nedkjørslene
+nedkjørsler
+nedkjørt
+nedkomst
+nedkomsten
+nedkomstens
+nedla
+nedlagt
+nedlagte
+nedlate
+nedlatende
+nedlater
+nedlegge
+nedleggelse
+nedleggelsen
+nedleggelsens
+nedlegger
+nedlegges
+nedlegginga
+nedleggingen
+nedover
+nedoverbakke
+nedoverbakken
+nedoverbakkens
+nedpå
+nedrakking
+nedrakkinga
+nedrakkingen
+nedrakkingens
+nedre
+nedrig
+nedrigga
+nedrivinga
+nedrivingen
+nedrulla
+nedrusting
+nedrustinga
+nedrustingen
+nedrustning
+nedrustningen
+nedrykking
+nedrykkinga
+nedrykkingen
+nedrykkingens
+nedsabling
+nedsablinga
+nedsablingen
+nedsablingens
+nedsatt
+nedsatte
+nedsette
+nedsettelse
+nedsettelsen
+nedsettelsens
+nedsettende
+nedsetter
+nedsettes
+nedskjæring
+nedskjæringa
+nedskjæringen
+nedskjæringene
+nedskjæringens
+nedskjæringer
+nedskriving
+nedskrivinga
+nedskrivingen
+nedskrivning
+nedskyting
+nedskytinga
+nedskytingen
+nedslag
+nedslaga
+nedslagene
+nedslaget
+nedslagets
+nedslagsdistrikt
+nedslagsdistriktet
+nedslagsdistriktets
+nedslagsfelt
+nedslagsfelter
+nedslagsfeltet
+nedslagsfeltets
+nedslakting
+nedslaktinga
+nedslaktingen
+nedslående
+nedslitt
+nedslitte
+nedslått
+nedst
+nedstamme
+nedstammer
+nedstemmende
+nedstemt
+nedstemte
+nedstøva
+nedsunken
+nedsunkent
+nedsunkne
+nedsylta
+nedtelling
+nedtellinga
+nedtellingen
+nedtellingene
+nedtellingens
+nedtellinger
+nedtransformere
+nedtransformerer
+nedtransformert
+nedtransformerte
+nedtrappe
+nedtrapping
+nedtrappinga
+nedtrappingen
+nedtrappingens
+nedtrykt
+nedtynga
+nedtynget
+nedverdige
+nedverdigelse
+nedverdigelsen
+nedverdigelsens
+nedvotere
+nedvoterer
+nedvotert
+nedvoterte
+nedvurder
+nedvurdere
+nedvurderer
+nedvurderes
+nedvurdering
+nedvurderinga
+nedvurderingen
+nedvurderingene
+nedvurderinger
+nedvurdert
+nedvurderte
+negasjon
+negasjonen
+negasjonene
+negasjonens
+negasjoner
+negativ
+negative
+negativen
+negativens
+negativt
+neger
+negere
+negeren
+negerens
+negerne
+negl
+neglen
+neglene
+neglens
+negler
+neglesprett
+neglespretten
+neglesprettens
+neglisjeen
+neglisjeens
+neglisjere
+neglisjerer
+neglisjering
+neglisjeringa
+neglisjeringen
+neglisjeringens
+neglisjert
+neglisjerte
+negrene
+negrenes
+negrer
+negro
+nei
+neide
+neie
+neimen
+neise
+neiser
+neist
+neiste
+nek
+neket
+nekets
+nekrolog
+nekrologen
+nekrologene
+nekrologens
+nekrologer
+neksus
+neksusen
+neksusene
+neksusens
+neksuser
+nekt
+nektar
+nektaren
+nektarene
+nektarens
+nektarer
+nekte
+nektelse
+nektelsen
+nektelsens
+nekter
+nektes
+nektet
+nekting
+nektinga
+nektingen
+nektingene
+nektingens
+nektinger
+nellik
+nelliken
+nellikene
+nellikens
+nelliker
+nem
+nemesis
+nemesisen
+nemesisens
+nemlig
+nemme
+nemmet
+nemnd
+nemnda
+nemndas
+nemnden
+nemndens
+nemt
+nenna
+nenne
+nenner
+nennet
+nennsom
+nennsomt
+nente
+neodym
+neodymet
+neodymets
+neolittisk
+neon
+neonen
+neonens
+neonlys
+nepa
+nepaler
+nepalere
+nepaleren
+nepalerens
+nepaleres
+nepalerne
+nepalernes
+nepalsk
+nepe
+nepen
+nepene
+nepens
+neper
+neppe
+neptunium
+neptuniumet
+neptuniumets
+nerk
+nerken
+nerkens
+nerts
+nertsen
+nertsens
+nertskåpe
+nerve
+nerven
+nervene
+nervens
+nerver
+nervesystem
+nervesystema
+nervesystemene
+nervesystemer
+nervesystemet
+nervesystemets
+nervøs
+nervøse
+nervøsitet
+nervøsiteten
+nervøsitetens
+nervøst
+nes
+nesa
+nese
+nesebor
+nesebora
+neseborene
+neseboret
+neseborets
+nesen
+nesens
+nesestyver
+nesestyvere
+nesestyveren
+nesestyverens
+nesestyveres
+nesestyverne
+nesestyvernes
+neset
+nesetipp
+nesetippen
+nesetippene
+nesetippens
+nesetipper
+nesevis
+nesevist
+neshorn
+neshorna
+neshornene
+neshornet
+neshornets
+nesla
+nesle
+neslen
+neslene
+neslens
+nesler
+neslete
+nest
+neste
+nesten
+nestens
+nestformann
+nestformannen
+nestformannens
+nestformenn
+nestformennene
+nestformennenes
+nestformenns
+nestleder
+nestledere
+nestlederen
+nestlederens
+nestlederes
+nestlederne
+nestledernes
+nestor
+nestoren
+nestorene
+nestorens
+nestorer
+nået
+nett
+nettball
+nettballen
+nettballens
+nette
+netter
+nettet
+netthendt
+netting
+nettingen
+nettingene
+nettingens
+nettinger
+nettmage
+nettmagen
+nettmagens
+netto
+nettoareal
+nettoarealet
+nettoarealets
+nettoen
+nettoene
+nettoens
+nettoer
+nettopp
+nettverk
+nettverkene
+nettverket
+nettverkets
+neuralgi
+neuralgien
+neuralgiene
+neuralgiens
+neuralgier
+neurolog
+neurologen
+neurologene
+neurologens
+neurologer
+neurose
+neurosen
+neurosens
+neurotiker
+neurotikere
+neurotikeren
+neurotikerens
+neurotikeres
+neurotikerne
+neurotikernes
+nevø
+neven
+nevøen
+nevøene
+nevøens
+nevenyttig
+never
+nevøer
+neveren
+neverens
+neverkont
+neverkonten
+neverkontens
+neves
+nevetakes
+nevetakest
+nevne
+nevner
+nevnere
+nevneren
+nevnerens
+nevneres
+nevnerne
+nevnernes
+nevnes
+nevneverdig
+nevneverdige
+nevnt
+nevnte
+nevra
+nevralgi
+nevralgien
+nevralgiens
+nevrene
+nevrer
+nevrolog
+nevrologen
+nevrologene
+nevrologens
+nevrologer
+nevrose
+nevrosen
+nevrosene
+nevrosens
+nevroser
+nevrotiker
+nevrotikere
+nevrotikeren
+nevrotikerens
+nevrotikeres
+nevrotikerne
+nevrotikernes
+newfoundlender
+newfoundlendere
+newfoundlenderen
+newfoundlenderens
+newfoundlenderes
+newfoundlenderne
+newfoundlendernes
+newyorker
+newyorkere
+newyorkeren
+newyorkerens
+newyorkeres
+newyorkerne
+newyorkernes
+newzealender
+newzealendere
+newzealenderen
+newzealenderens
+newzealenderes
+newzealenderne
+newzealendernes
+nøgd
+nøgda
+någjeldende
+ni
+nicaraguaner
+nicaraguanere
+nicaraguaneren
+nicaraguanerens
+nicaraguaneres
+nicaraguanerne
+nicaraguanernes
+nicaraguansk
+nid
+nidel
+nidelen
+nidelens
+nidet
+niding
+nidingen
+nidingene
+nidingens
+nidinger
+nidingsverk
+nidingsverket
+nidingsverkets
+nidkjær
+nidkjære
+nidkjært
+nidstang
+nidvise
+niende
+niendedel
+niendedelen
+niendedelens
+niesa
+niese
+niesen
+niesens
+nifs
+nifse
+nifst
+nigerer
+nigerere
+nigereren
+nigererens
+nigereres
+nigererne
+nigerernes
+nigerianer
+nigerianere
+nigerianeren
+nigerianerens
+nigerianeres
+nigerianerne
+nigerianernes
+nigeriansk
+nigerianske
+nigersk
+nigråte
+nihilisme
+nihilismen
+nihilismens
+nikk
+nikka
+nikke
+nikkel
+nikkelen
+nikkelens
+nikkelet
+nikkelets
+nikken
+nikkens
+nikkers
+nikkersen
+nikkersene
+nikkersens
+nikkerser
+nikket
+nikotin
+nikotinen
+nikotinens
+niks
+nimbus
+nimbusen
+nimbusene
+nimbusens
+nimbuser
+niob
+niobet
+niobets
+nip
+nipen
+nipens
+niplene
+nipler
+nipp
+nippe
+nippel
+nippelen
+nippelens
+nippen
+nippet
+nips
+nipsen
+nirvana
+nirvanaen
+nirvanaene
+nirvanaens
+nirvanaer
+nirvanaet
+nirvanaets
+nisa
+nise
+nisen
+nisene
+nisens
+niser
+nisje
+nisjen
+nisjens
+nisse
+nisselua
+nisselue
+nisseluen
+nisseluene
+nisseluens
+nisseluer
+nissen
+nissene
+nissens
+nisser
+nista
+niste
+nistebomme
+nisten
+nistene
+nistens
+nister
+nitid
+nitida
+nitiden
+nitidens
+nitrat
+nitrata
+nitratene
+nitrater
+nitratet
+nitratets
+nitrist
+nitrogen
+nitrogenet
+nitrogenets
+nitroglyserol
+nitroglyserolen
+nitroglyserolens
+nitten
+nittende
+nittendel
+nittendelen
+nittendelens
+nitti
+nittidel
+nittidelen
+nittidelens
+nittien
+nittiende
+nittiførste
+nivå
+nivåa
+nivellere
+nivellerer
+nivellering
+nivelleringa
+nivelleringen
+nivelleringens
+nivellert
+nivellerte
+nivåene
+nivåer
+nivået
+nivåets
+nøkk
+nøkkel
+nøkkelbarn
+nøkkelbarnet
+nøkkelbarnets
+nøkkelen
+nøkkelens
+nøkkelord
+nøkkelordene
+nøkkelordet
+nøkkelordets
+nøkkelost
+nøkkelosten
+nøkkelostens
+nøkkelring
+nøkkelringen
+nøkkelringens
+nøkken
+nøkkene
+nøkkens
+nøkker
+nøklebein
+nøklebeinet
+nøklebeinets
+nøklene
+nøkler
+nkr
+nøktern
+nøkterne
+nøkternt
+nål
+nøl
+nåla
+nøle
+nålen
+nølende
+nålene
+nålens
+nålepute
+nåleputen
+nåleputene
+nåleputens
+nåleputer
+nåler
+nøler
+nålestikk
+nålestikket
+nålestikkets
+nålevende
+nøling
+nølinga
+nølingen
+nølingens
+nølt
+nølte
+nåløye
+nåløyet
+nåm
+nåmet
+nåmets
+nobel
+nobelium
+nobeliumet
+nobeliumets
+nobelpris
+nobelprisen
+nobelprisene
+nobelprisens
+nobelpriser
+noble
+noblesse
+noblessen
+noblessens
+noe
+noen
+noenlunde
+noens
+noensinne
+noensteds
+noir
+nok
+nokså
+noksagt
+noksagten
+noksagtene
+noksagtens
+noksagter
+noksom
+nokturne
+nokturnen
+nokturnens
+nolo
+noloen
+noloene
+noloens
+noloer
+nolomelding
+nolomeldingen
+nolomeldingens
+nomade
+nomaden
+nomadens
+nomen
+nomena
+nomenene
+nomener
+nomenet
+nomenets
+nomenklatur
+nomenklaturen
+nomenklaturene
+nomenklaturens
+nomenklaturer
+nomenklaturet
+nomenklaturets
+nominasjon
+nominasjonen
+nominasjonene
+nominasjonens
+nominasjoner
+nominasjonsmøte
+nominasjonsmøtet
+nominativ
+nominativen
+nominativene
+nominativens
+nominativer
+nominell
+nominere
+nomineres
+nominering
+nomineringa
+nomineringen
+nomineringens
+nominert
+nominerte
+nomotetisk
+nonchalanse
+nonchalansen
+nonchalansens
+nonchalant
+nonfigurativ
+nonfigurative
+nonfigurativt
+nonna
+nonne
+nonnen
+nonnene
+nonnens
+nonner
+nonsens
+nonsenset
+nonsensets
+nonstop
+nor
+nord
+nordafjells
+nordafjelsk
+nordafor
+nordatlantiske
+nordaust
+nordavind
+nordavinden
+nordavindene
+nordavindens
+nordavinder
+nordavær
+nordbo
+nordboen
+nordboene
+nordboens
+nordboer
+nordbu
+nordbuen
+nordbuene
+nordbuens
+nordbuer
+nordenfjeldske
+nordfjording
+nordfjordingen
+nordfjordingene
+nordfjordingens
+nordfjordinger
+nording
+nordingen
+nordingens
+nordisk
+nordiske
+nordlandsk
+nordlending
+nordlendingen
+nordlendingene
+nordlendingens
+nordlendinger
+nordlig
+nordlige
+nordligst
+nordligste
+nordlys
+nordlysa
+nordlysene
+nordlyset
+nordlysets
+nordmann
+nordmannen
+nordmannens
+nordmenn
+nordmennene
+nordmennenes
+nordmenns
+nordnorsk
+nordost
+nordover
+nordpå
+nordpol
+nordpolen
+nordpolene
+nordpolens
+nordpoler
+nordre
+nordsjøfart
+nordsjøfarten
+nordsjøfartens
+nordspiss
+nordspissen
+nordspissens
+nordøst
+nordøstre
+nordvendt
+nordvest
+nordvesten
+nordvestens
+nordvestlig
+nordvietnamesernes
+noret
+norgeshistorie
+norgeshistorien
+norgeshistoriens
+norgesmesterskap
+norgesmesterskapa
+norgesmesterskapene
+norgesmesterskaper
+norgesmesterskapet
+norgesmesterskapets
+norm
+normal
+normalen
+normalens
+normalform
+normalforma
+normalformen
+normalformene
+normalformens
+normalformer
+normalisere
+normaliserer
+normalisering
+normaliseringa
+normaliseringen
+normaliseringens
+normalisert
+normaliserte
+normalplan
+normalplanen
+normalplanens
+normalt
+normanner
+normannere
+normanneren
+normannerens
+normanneres
+normannerne
+normannernes
+normannisk
+normen
+normene
+normens
+normer
+normere
+normering
+normeringa
+normeringen
+normeringens
+normert
+normerte
+norna
+norne
+nornene
+norner
+norrøn
+norrøne
+norrønt
+norsk
+norskamerikaner
+norskamerikanere
+norskamerikaneren
+norskamerikanerens
+norskamerikaneres
+norskamerikanerne
+norskamerikanernes
+norskdom
+norskdommen
+norskdommens
+norske
+norskekysten
+norskhet
+norskheten
+norskhetens
+norsktoppen
+norskundervisning
+norskundervisninga
+norskundervisningen
+norskundervisningens
+norvagisme
+norvagismen
+norvagismens
+not
+nota
+notabel
+notabelt
+notabene
+notabenet
+notable
+notaen
+notaens
+notam
+notarius
+notariusen
+notariusens
+notasjon
+notasjonen
+notasjonene
+notasjonens
+notasjoner
+notat
+notata
+notatene
+notater
+notatet
+notbas
+notbasen
+notbasens
+notbruk
+notbruka
+notbrukene
+notbruket
+notbrukets
+note
+notebok
+noteboka
+noteboken
+notebokens
+notehefte
+noteheftet
+noten
+noter
+notere
+noterer
+noteres
+notert
+noterte
+notis
+notisbok
+notisboka
+notisboken
+notisbokens
+notisen
+notisene
+notisens
+notiser
+notkast
+notkastet
+notkastets
+notorisk
+notsteng
+notstenget
+notstengets
+nov
+nova
+novella
+novelle
+novellen
+novellene
+novellens
+noveller
+novellette
+novelletten
+novellettens
+novellist
+novellisten
+novellistene
+novellistens
+novellister
+novellistisk
+november
+novene
+nover
+novisa
+novise
+novisen
+novisens
+nr
+når
+nær
+nærbilda
+nærbilde
+nærbildene
+nærbilder
+nærbildet
+nærbildets
+nørdre
+nørdst
+nære
+nøre
+nærer
+nører
+nærgående
+nærhet
+nærheten
+nærhetens
+nærig
+næring
+næringa
+næringas
+næringen
+næringene
+næringens
+næringer
+næringsdrivende
+næringsgrunnlag
+næringsgrunnlaget
+næringsgrunnlagets
+næringsliv
+næringslivet
+næringslivets
+næringslivs
+næringslivsidé
+næringslivsideen
+næringslivsideene
+næringslivsideens
+næringslivsideer
+næringsveg
+næringsvegen
+næringsvegene
+næringsvegens
+næringsveger
+næringsvei
+næringsveien
+næringsveiene
+næringsveiens
+næringsveier
+næringsvett
+næringsvettet
+næringsvettets
+nærliggende
+nærme
+nærmer
+nærmere
+nærmest
+nærmeste
+nærmet
+nærsynt
+nært
+nørt
+nærtagende
+nærtakende
+nærte
+nørte
+nærvær
+nærværet
+nærværets
+nøs
+ønska
+ønske
+ønskede
+ønskelig
+ønskelighet
+ønskeligheten
+ønskelighetens
+ønskelista
+ønskeliste
+ønskelisten
+ønskelistene
+ønskelistens
+ønskelister
+ønskemål
+ønskemåla
+ønskemålene
+ønskemålet
+ønskemålets
+ønsker
+ønskes
+ønsket
+ønskt
+ønskte
+ønskverdig
+nøsta
+nøste
+nøstet
+nøt
+nøter
+nåtid
+nåtida
+nåtidas
+nåtiden
+nåtidens
+nåtla
+nåtle
+nåtler
+nåtlere
+nåtleren
+nåtlerens
+nåtleres
+nåtlerne
+nåtlernes
+nåtlet
+nøtt
+nøtta
+nøtteknekker
+nøtteknekkere
+nøtteknekkeren
+nøtteknekkerens
+nøtteknekkeres
+nøtteknekkerne
+nøtteknekkernes
+nøtten
+nøttene
+nøttens
+nøtter
+nøtteskall
+nøtteskallet
+nøtteskallets
+nu
+nubb
+nubben
+nubbene
+nubbens
+nubber
+nudd
+nudden
+nuddene
+nuddens
+nudder
+nudel
+nudelen
+nudelens
+nudisme
+nudismen
+nudismens
+nudist
+nudisten
+nudistene
+nudistens
+nudister
+nudlene
+nudler
+nuet
+nugg
+nugga
+nuggene
+nugger
+nugget
+nuggets
+null
+nulla
+nullen
+nullene
+nullens
+nuller
+nullet
+nullitet
+nulliteten
+nullitetene
+nullitetens
+nulliteter
+nulte
+numerisk
+numeriske
+numismatiker
+numismatikere
+numismatikeren
+numismatikerens
+numismatikeres
+numismatikerne
+numismatikernes
+nummer
+nummerer
+nummerere
+nummererer
+nummerert
+nummererte
+nummeret
+nummerets
+nummerskilt
+nummerskiltet
+nummerskiltets
+numra
+numre
+numrene
+nuperell
+nuperellen
+nuperellene
+nuperellens
+nupereller
+nupp
+nuppe
+nuppen
+nuppens
+nuppet
+nuppete
+nut
+nuten
+nutene
+nutens
+nuter
+nåvel
+nåværende
+ny
+nøyaktig
+nøyaktige
+nøyaktighet
+nøyaktigheten
+nøyaktighetens
+nyanlegg
+nyanlegget
+nyanleggets
+nyansatt
+nyansatte
+nyanse
+nyansen
+nyansene
+nyansens
+nyanser
+nyansere
+nyansert
+nyanserte
+nyansettelse
+nyansettelsen
+nyansettelsens
+nyanskaffelse
+nyanskaffelsen
+nyanskaffelsene
+nyanskaffelsens
+nyanskaffelser
+nybakt
+nybegynnere
+nybegynneren
+nybegynnerens
+nybrott
+nybrottet
+nybrottets
+nybrottsmann
+nybrottsmannen
+nybrottsmannens
+nybrottsmenn
+nybrottsmennene
+nybrottsmennenes
+nybrottsmenns
+nybygg
+nybygga
+nybyggene
+nybygger
+nybygget
+nybyggets
+nybygging
+nybygginga
+nybyggingen
+nybyggingens
+nøyd
+nydelig
+nydelige
+nye
+nøye
+nøyen
+nøyer
+nyere
+nøyere
+nyest
+nyeste
+nyføding
+nyfødingen
+nyfødingens
+nyfødt
+nyfeminist
+nyfeministen
+nyfeministene
+nyfeministens
+nyfeminister
+nyfiken
+nyfikent
+nyfikne
+nygla
+nygle
+nyglene
+nygler
+nyhet
+nyheten
+nyhetene
+nyhetens
+nyheter
+nyhetsbyrå
+nyhetsbyråa
+nyhetsbyråene
+nyhetsbyråer
+nyhetsbyrået
+nyhetsbyråets
+nyhetsformidling
+nyhetsformidlingen
+nyhetsformidlingens
+nyhetsmedia
+nyimport
+nying
+nyingen
+nyingene
+nyingens
+nyinger
+nykk
+nykke
+nykken
+nykkens
+nykket
+nykkete
+nykommer
+nykommere
+nykommeren
+nykommerens
+nykommeres
+nykommerne
+nykommernes
+nylende
+nylig
+nylige
+nylon
+nylonet
+nylonets
+nymalt
+nymfa
+nymfe
+nymfen
+nymfene
+nymfens
+nymfer
+nymotens
+nynn
+nynna
+nynne
+nynnet
+nynorsk
+nynorsken
+nynorskens
+nyomvendt
+nyoppført
+nyopprettet
+nyoppusset
+nyordning
+nyordningen
+nyordningens
+nypa
+nype
+nypen
+nypene
+nypens
+nyper
+nyperosa
+nyperose
+nyperosen
+nyperosene
+nyperosens
+nyperoser
+nypetorn
+nypetornen
+nypetornens
+nyår
+nyra
+nyåra
+nyre
+nyren
+nyrens
+nyret
+nyåret
+nyårets
+nyårsdag
+nyårsdagen
+nyårsdagene
+nyårsdagens
+nyårsdager
+nyse
+nysgjerrig
+nysgjerrige
+nysgjerrighet
+nysgjerrigheten
+nysgjerrighetens
+nyskape
+nyskaper
+nysølv
+nysølvet
+nysølvets
+nysnø
+nysnøen
+nysnøens
+nøysom
+nøysomme
+nøysomt
+nyss
+nyssen
+nysset
+nyst
+nystartet
+nyste
+nyt
+nyte
+nytelse
+nytelsen
+nytelsens
+nytenke
+nytenking
+nytenkinga
+nytenkingen
+nytenkingens
+nytenkning
+nytenkningen
+nytenkningens
+nytenkt
+nytenkte
+nyter
+nytestamentlig
+nyting
+nytinga
+nytingen
+nytingens
+nøytra
+nøytraene
+nøytral
+nøytrale
+nøytralisere
+nøytraliserer
+nøytralisert
+nøytraliserte
+nøytralitet
+nøytraliteten
+nøytralitetens
+nøytralt
+nøytron
+nøytrona
+nøytronene
+nøytroner
+nøytronet
+nøytronets
+nøytrum
+nøytrumet
+nøytrumets
+nytt
+nytta
+nytte
+nytteareal
+nyttelast
+nyttelasta
+nyttelasten
+nyttelastens
+nyttelaus
+nyttelause
+nyttelaust
+nytteløst
+nytten
+nytter
+nyttes
+nyttet
+nyttig
+nyttige
+nyttiggjort
+nyttiggjøre
+nyttår
+nyttåra
+nyttårene
+nyttåret
+nyttårets
+nyttårsdag
+nyttårsdagen
+nyttårsdagene
+nyttårsdagens
+nyttårsdager
+nyva
+nyvalg
+nyvalgt
+nyvalgte
+nyve
+nyven
+nyvene
+nyvens
+nyver
+nyvurdering
+nyvurderingen
+nyvurderingens
+nyzealending
+nyzealendingen
+nyzealendingene
+nyzealendingens
+nyzealendinger
+oase
+oasen
+oasens
+obduksjon
+obduksjonen
+obduksjonene
+obduksjonens
+obduksjoner
+obdusere
+obduserer
+obdusert
+obduserte
+obelisk
+obelisken
+obeliskene
+obeliskens
+obelisker
+oberst
+obersten
+oberstene
+oberstens
+oberster
+oberstløytnant
+oberstløytnanten
+oberstløytnantens
+objekt
+objektene
+objektenes
+objekter
+objektet
+objektets
+objektiv
+objektive
+objektivet
+objektivitet
+objektiviteten
+objektivitetens
+objektivt
+obl
+oblat
+oblaten
+oblatene
+oblatens
+oblater
+obligasjon
+obligasjonen
+obligasjonene
+obligasjonens
+obligasjoner
+obligasjonslån
+obligat
+obligatorisk
+obligatoriske
+obo
+oboen
+oboene
+oboens
+oboer
+oboist
+oboisten
+oboistene
+oboistens
+oboister
+obs
+observant
+observasjon
+observasjonen
+observasjonene
+observasjonens
+observasjoner
+observatoria
+observatoriene
+observatorier
+observatoriet
+observatoriets
+observatorium
+observatør
+observatøren
+observatørene
+observatørens
+observatører
+observer
+observere
+observerer
+observeres
+observert
+observerte
+obskøn
+obskøne
+obskønt
+obskur
+obskure
+obskurt
+obstanasig
+obstruksjon
+obstruksjonen
+obstruksjonene
+obstruksjonens
+obstruksjoner
+odd
+odden
+oddens
+oddetal
+oddetalet
+oddetalets
+oddetall
+oddetallet
+oddetallets
+odds
+oddsen
+oddsene
+oddsens
+ode
+odel
+odelen
+odelens
+odelsgutt
+odelsgutten
+odelsguttens
+odelslov
+odelsloven
+odelslovens
+odelsrett
+odelsretten
+odelsrettens
+odelstinget
+odelstingets
+oden
+odene
+odens
+oder
+odiøs
+odiøst
+odle
+odont
+odontolog
+odontologen
+odontologene
+odontologens
+odontologer
+odontologi
+odontologien
+odontologiens
+odontologisk
+odontologiske
+odør
+odøren
+odørene
+odørens
+odører
+oecon
+offensiv
+offensiven
+offensivens
+offensivt
+offentlig
+offentlige
+offentliges
+offentliggjorde
+offentliggjort
+offentliggjøre
+offentliggjøres
+offentlighet
+offentligheten
+offentlighetens
+offer
+offeret
+offerets
+offervilje
+offerviljen
+offerviljens
+offiser
+offiseren
+offiserene
+offiserens
+offiserer
+offisiell
+offisielle
+offisielt
+offisiøs
+offisiøst
+offset
+offseten
+offsetens
+offside
+ofra
+ofre
+ofrene
+ofrer
+ofret
+ofselig
+ofte
+oftere
+oftest
+og
+også
+ohm
+ohmen
+ohmens
+ok
+oker
+okeren
+okerens
+okkult
+okkultisme
+okkultismen
+okkultismens
+okkupant
+okkupanten
+okkupantene
+okkupantens
+okkupanter
+okkupasjon
+okkupasjonen
+okkupasjonene
+okkupasjonens
+okkupasjoner
+okkupere
+okkuperer
+okkupert
+okkuperte
+okse
+oksen
+oksene
+oksens
+okser
+oksid
+oksidasjon
+oksidasjonen
+oksidasjonene
+oksidasjonens
+oksidasjoner
+oksidere
+oksiderer
+oksidert
+oksiderte
+oksidet
+oksidets
+oksygen
+oksygenet
+oksygenets
+okt
+oktan
+oktant
+oktanten
+oktantene
+oktantens
+oktanter
+oktav
+oktaven
+oktavene
+oktavens
+oktaver
+oktett
+oktetten
+oktettene
+oktettens
+oktetter
+oktober
+oktoberen
+oktoberens
+okular
+okulara
+okularene
+okularer
+okularet
+okularets
+okulere
+okulerer
+okulert
+okulerte
+olabuksa
+olabukse
+olabuksen
+olabuksene
+olabuksens
+olabukser
+old
+oldefar
+oldefaren
+oldefarens
+oldemor
+oldemora
+oldemoren
+oldemorens
+olden
+oldenborra
+oldenborre
+oldenborren
+oldenborrene
+oldenborrens
+oldenborrer
+older
+olderen
+olderens
+oldermann
+oldermannen
+oldermannens
+oldermenn
+oldermennene
+oldermennenes
+oldermenns
+oldfrua
+oldfrue
+oldfruen
+oldfruens
+oldfunn
+oldfunnet
+oldfunnets
+olding
+oldingen
+oldingene
+oldingens
+oldinger
+oldra
+oldrene
+oldsak
+oldsaka
+oldsaken
+oldsakens
+oldtid
+oldtida
+oldtiden
+oldtidens
+oldtidsforhold
+oldtidsforholdene
+oliven
+olivenen
+olivenene
+olivenens
+olivener
+olivenolje
+olivenoljen
+olivenoljene
+olivenoljens
+olivenoljer
+olja
+olje
+oljearbeider
+oljearbeidere
+oljearbeideren
+oljearbeiderens
+oljearbeideres
+oljearbeiderne
+oljearbeidernes
+oljeboring
+oljeboringa
+oljeboringen
+oljeboringens
+oljefelt
+oljefeltene
+oljefeltet
+oljefeltets
+oljefunn
+oljefunna
+oljefunnene
+oljefunnet
+oljefunnets
+oljefyrt
+oljefyrte
+oljegrus
+oljegrusdekke
+oljegrusdekket
+oljegrusen
+oljegrusens
+oljeledning
+oljeledningen
+oljeledningene
+oljeledningens
+oljeledninger
+oljeleting
+oljeletinga
+oljeletingen
+oljeletingens
+oljen
+oljene
+oljens
+oljeplattform
+oljeplattforma
+oljeplattformen
+oljeplattformene
+oljeplattformens
+oljeplattformer
+oljeprodukt
+oljeproduktene
+oljeprodukter
+oljeproduktet
+oljeproduktets
+oljer
+oljeraffineri
+oljeraffineria
+oljeraffineriene
+oljeraffinerier
+oljeraffineriet
+oljeraffineriets
+oljerike
+oljeriket
+oljerikets
+oljeselskap
+oljeselskapa
+oljeselskapene
+oljeselskaper
+oljeselskapet
+oljeselskapets
+oljeskift
+oljeskiftet
+oljeskiftets
+oljesøl
+oljesølet
+oljesølets
+oljestat
+oljestaten
+oljestatene
+oljestatens
+oljestater
+oljet
+oljeundersøkelse
+oljeundersøkelsen
+oljeundersøkelsene
+oljeundersøkelsens
+oljeundersøkelser
+olla
+olle
+ollene
+oller
+olm
+olme
+olmt
+olsokdag
+olsokdagen
+olsokdagens
+olympiade
+olympiaden
+olympiadene
+olympiadens
+olympiader
+olympisk
+olympiske
+om
+omadressere
+omadresserer
+omadressert
+omadresserte
+omaner
+omanere
+omaneren
+omanerens
+omaneres
+omanerne
+omanernes
+omansk
+omarbeida
+omarbeidd
+omarbeidde
+omarbeide
+omarbeider
+omarbeides
+omarbeidet
+omarbeidets
+omberamma
+omberamme
+omberammet
+ombestemme
+ombestemmelsen
+ombestemmelsens
+ombestemmer
+ombordbringelse
+ombordbringelsen
+ombordbringelsens
+ombot
+ombota
+ombrekning
+ombrekningen
+ombrekningens
+ombringelse
+ombringelsen
+ombringelsens
+ombud
+ombuda
+ombudene
+ombudet
+ombudets
+ombudsmann
+ombudsmannen
+ombudsmannens
+ombudsmenn
+ombudsmennene
+ombudsmennenes
+ombudsmenns
+ombygd
+ombygde
+ombygging
+ombygginga
+ombyggingen
+ombygning
+ombygningen
+ombygningene
+ombygningens
+ombygninger
+omdanna
+omdanne
+omdannelsen
+omdannelsens
+omdanner
+omdannes
+omdannet
+omdanning
+omdanninga
+omdanningen
+omdiskutert
+omdiskuterte
+omdisputert
+omdisputerte
+omdømme
+omdømmet
+omdøpt
+omdreining
+omdreiningen
+omdreiningene
+omdreiningens
+omdreininger
+omegn
+omegnen
+omegnens
+omegner
+omegns
+omelett
+omeletten
+omelettene
+omelettens
+omeletter
+omen
+omener
+omens
+omfang
+omfanget
+omfangsrikt
+omfar
+omfara
+omfarene
+omfaret
+omfatta
+omfatte
+omfattende
+omfatter
+omfattes
+omfattet
+omfavne
+omfavnelse
+omfavnelsen
+omfavnelsens
+omfavner
+omflakkende
+omform
+omformater
+omformatere
+omformaterer
+omformatering
+omforme
+omformer
+omformere
+omformes
+omformet
+omforming
+omforminga
+omformingen
+omformingene
+omformingens
+omforminger
+omfram
+omframløyvinga
+omframt
+omframtløyving
+omframtløyvinga
+omgå
+omgang
+omgangen
+omgangene
+omgangens
+omganger
+omgangs
+omgangsfelle
+omgangsfellen
+omgangsfellens
+omgangsskole
+omgangsskolen
+omgangsskolens
+omgåelse
+omgåelsen
+omgåelsens
+omgående
+omgåes
+omgi
+omgir
+omgitt
+omgivelse
+omgivelsen
+omgivelsene
+omgivelsens
+omgivelser
+omgjengelig
+omgjort
+omgjøre
+omgjøres
+omgjøring
+omgjøringa
+omgjøringen
+omgjøringene
+omgjøringens
+omgjøringer
+omgrep
+omgrepa
+omgrepet
+omgås
+omhandla
+omhandle
+omhandler
+omhandlet
+omhandling
+omhandlinga
+omhandlingen
+omhandlingene
+omhandlingens
+omhandlinger
+omheng
+omhenga
+omhengene
+omhenget
+omhu
+omhuen
+omhuens
+omhug
+omhugen
+omhugens
+omhyggelig
+omhyggelige
+ominnredning
+ominnredninga
+ominnredningen
+ominnredningene
+ominnredningens
+ominnredninger
+ominøs
+ominøst
+omkalfatre
+omkamp
+omkampen
+omkampens
+omkjøring
+omkjøringa
+omkjøringen
+omkjøringene
+omkjøringens
+omkjøringer
+omkledd
+omkledningsrom
+omkledningsrommene
+omkledningsrommet
+omkledningsrommets
+omkom
+omkomme
+omkommer
+omkommet
+omkomne
+omkostning
+omkostningen
+omkostningene
+omkostningens
+omkostninger
+omkostningsfrie
+omkostningsnivå
+omkrets
+omkretsen
+omkretsene
+omkretsens
+omkretser
+omkring
+omkringliggende
+omkved
+omkveda
+omkvedene
+omkvedet
+omkvedets
+omlagt
+omland
+omlandet
+omlasting
+omlastinga
+omlastingen
+omlegg
+omlegget
+omlegging
+omleggingen
+omlegning
+omliggende
+omløp
+omløpa
+omløpene
+omløpet
+omløpets
+omløpstid
+omløpstida
+omløpstiden
+omløpstidens
+omlyd
+omlyden
+omlydene
+omlydens
+omlyder
+ommøblering
+ommøbleringa
+ommøbleringen
+ommøbleringens
+omme
+omn
+omnen
+omnene
+omnens
+omner
+omnibus
+omnibusen
+omnibusene
+omnibusens
+omnibuser
+omnsgods
+omnsgodset
+omnsgodsets
+omorganiser
+omorganisere
+omorganiserer
+omorganiseres
+omorganisering
+omorganiseringa
+omorganiseringen
+omorganiseringens
+omorganiseringer
+omorganisert
+omorganiserte
+områ
+område
+områdene
+områder
+området
+omrediger
+omredigere
+omredigerer
+omredigeres
+omredigert
+omredigerte
+omregistrer
+omregistrere
+omregistrerer
+omregistreres
+omregistrert
+omregistrerte
+omregne
+omregner
+omregnet
+omregning
+omregninga
+omregningen
+omregningens
+omriss
+omrissa
+omrissene
+omrisset
+omrissets
+omsatt
+omsatte
+omsetning
+omsetninga
+omsetningen
+omsetningene
+omsetninger
+omsetningsavgift
+omsetningsavgifta
+omsetningsavgiften
+omsetningsavgiftens
+omsette
+omsettende
+omsetter
+omsettes
+omsetting
+omsettinga
+omsettingen
+omsettingens
+omsider
+omskapa
+omskape
+omskaper
+omskapes
+omskaping
+omskapinga
+omskapingen
+omskapt
+omskapte
+omskifta
+omskifte
+omskiftelig
+omskiftende
+omskifter
+omskiftet
+omskole
+omskolen
+omskolene
+omskolens
+omskoler
+omskolere
+omskolering
+omskoleringa
+omskoleringen
+omskoleringens
+omskoleringer
+omskrev
+omskreven
+omskrevet
+omskrevne
+omskrive
+omskriver
+omskrives
+omskriving
+omskrivinga
+omskrivingen
+omskrivning
+omskrivningen
+omskrivningens
+omslag
+omslaga
+omslagene
+omslaget
+omslagets
+omslutte
+omsluttede
+omslutter
+omsluttet
+omsorg
+omsorga
+omsorgen
+omsorgens
+omstendelig
+omstendighet
+omstendigheten
+omstendighetene
+omstendighetens
+omstendigheter
+omstiging
+omstiginga
+omstigingen
+omstigingens
+omstigning
+omstigninga
+omstigningen
+omstille
+omstiller
+omstilling
+omstillinga
+omstillingen
+omstillingene
+omstillingenes
+omstillinger
+omstillingsproblem
+omstillingsproblema
+omstillingsproblemene
+omstillingsproblemer
+omstillingsproblemet
+omstillingsproblemets
+omstillingsprosess
+omstillingsprosessen
+omstillingsprosessens
+omstreifer
+omstreifere
+omstreiferen
+omstreiferens
+omstreiferes
+omstreiferne
+omstreifernes
+omstridt
+omstridte
+omstøte
+omstøtet
+omsut
+omsuta
+omsuten
+omsutens
+omsverma
+omsvøp
+omsvøpet
+omsyn
+omsyna
+omsynene
+omsynet
+omsynets
+omtale
+omtalen
+omtalens
+omtaler
+omtales
+omtalt
+omtalte
+omtanken
+omtankens
+omtenksom
+omtenksomme
+omtenksomt
+omtåka
+omtrent
+omtrentlig
+omtvista
+omtykt
+omvalg
+omvalget
+omvalgets
+omvandling
+omvandlinga
+omvandlingen
+omvandlingene
+omvandlingens
+omvandlinger
+omveg
+omvegen
+omvegene
+omvegens
+omveger
+omvegs
+omvei
+omveien
+omveiene
+omveiens
+omveier
+omvelting
+omveltinga
+omveltingen
+omveltingens
+omveltning
+omveltningen
+omveltningene
+omveltningens
+omveltninger
+omvend
+omvende
+omvendelse
+omvendelsen
+omvendelsens
+omvender
+omvendes
+omvending
+omvendinga
+omvendingen
+omvendingens
+omvendt
+omvendte
+omverden
+omverdenen
+omverdenens
+omviser
+omviseren
+omviserens
+omvising
+omvisinga
+omvisingen
+omvisingens
+omvisning
+omvisninga
+omvisningen
+omvisningene
+omvisningens
+omvisninger
+omvurder
+omvurdere
+omvurderer
+omvurderes
+omvurdering
+omvurderinga
+omvurderingen
+omvurderingene
+omvurderingens
+omvurderinger
+omvurdert
+omvurderte
+onanere
+onanerer
+onanering
+onaneringa
+onaneringen
+onaneringens
+onanert
+onanerte
+onani
+onanien
+onaniens
+ond
+onde
+ondet
+ondsinnet
+ondskap
+ondskapen
+ondskapens
+ondskapsfull
+ondt
+ondulasjon
+ondulasjonen
+ondulasjonene
+ondulasjonens
+ondulasjoner
+ondulere
+ondulerer
+ondulert
+ondulerte
+onkel
+onkelen
+onkelens
+onklene
+onkler
+onn
+onna
+onnen
+onnene
+onnens
+onner
+onnet
+onomatopoetikon
+onomatopoetikonet
+onomatopoetikonets
+onomatopoetisk
+onsdag
+onsdagen
+onsdagene
+onsdagens
+onsdager
+opal
+opalen
+opalene
+opalens
+opaler
+opera
+operaen
+operaene
+operaens
+operaer
+operasanger
+operasangere
+operasangeren
+operasangerens
+operasangeres
+operasangerne
+operasangernes
+operasjon
+operasjonen
+operasjonene
+operasjonens
+operasjoner
+operativ
+operative
+operativsystem
+operativsystema
+operativsystemene
+operativsystemer
+operativsystemet
+operativsystemets
+operativt
+operator
+operatoren
+operatorene
+operatorens
+operatorer
+operatør
+operatøren
+operatørene
+operatørens
+operatører
+operer
+operere
+opererer
+operert
+opererte
+operette
+operetten
+operettens
+opinion
+opinionen
+opinionens
+opinionsdannelse
+opinionsdannelsen
+opinionsdannelsens
+opium
+opiumen
+opiumens
+opp
+oppå
+oppad
+oppadgående
+opparbeida
+opparbeidd
+opparbeidde
+opparbeide
+opparbeidelse
+opparbeidelsen
+opparbeidelsens
+opparbeidende
+opparbeider
+opparbeides
+opparbeidet
+opparbeidets
+oppasser
+oppassere
+oppasseren
+oppasserens
+oppasseres
+oppasserne
+oppassernes
+oppbevar
+oppbevare
+oppbevarer
+oppbevares
+oppbevaring
+oppbevaringa
+oppbevaringen
+oppbevaringens
+oppbevart
+oppbevarte
+oppblomstring
+oppblåst
+oppbrakt
+oppbrakte
+oppbremsing
+oppbremsingen
+oppbremsingens
+oppbrott
+oppbrottet
+oppbrottets
+oppbrudd
+oppbrukt
+oppbud
+oppbudet
+oppbudets
+oppbudt
+oppby
+oppbydd
+oppbydde
+oppbygd
+oppbygde
+oppbyggelse
+oppbyggelsen
+oppbyggelsens
+oppbygging
+oppbygginga
+oppbyggingen
+oppbygning
+oppbygningen
+oppbygningens
+oppdage
+oppdagelse
+oppdagelsen
+oppdagelsens
+oppdager
+oppdages
+oppdaget
+oppdater
+oppdatere
+oppdaterer
+oppdateres
+oppdatering
+oppdateringa
+oppdateringen
+oppdateringens
+oppdateringer
+oppdateringsleksikon
+oppdatert
+oppdaterte
+oppdekking
+oppdekkinga
+oppdekkingen
+oppdekning
+oppdekningen
+oppdekningens
+oppdeling
+oppdelingen
+oppdelingens
+oppdelt
+oppdelte
+oppdemming
+oppdemmingen
+oppdemmingens
+oppdemning
+oppdemningen
+oppdemningens
+oppdikta
+oppdra
+oppdrag
+oppdraga
+oppdragelsen
+oppdragelsens
+oppdragene
+oppdrager
+oppdrageren
+oppdragerens
+oppdraget
+oppdragets
+oppdragsgiver
+oppdragsgivere
+oppdragsgiveren
+oppdragsgiverens
+oppdragsgiveres
+oppdragsgiverne
+oppdragsgivernes
+oppdrar
+oppdras
+oppdratt
+oppdrett
+oppdrette
+oppdretter
+oppdrettet
+oppdrift
+oppdrifta
+oppdriften
+oppdriftens
+oppdrive
+oppdyrking
+oppdyrkinga
+oppe
+oppebie
+oppebære
+oppebørsel
+oppebørselen
+oppebørselens
+oppetter
+oppfange
+oppfanger
+oppfanget
+oppfant
+oppfatning
+oppfatninga
+oppfatningen
+oppfatningene
+oppfatningens
+oppfatninger
+oppfatningsevne
+oppfatningsevnen
+oppfatningsevnene
+oppfatningsevnens
+oppfatningsevner
+oppfatta
+oppfatte
+oppfatter
+oppfattes
+oppfattet
+oppfinnelse
+oppfinnelsen
+oppfinnelsens
+oppfinner
+oppfinnere
+oppfinneren
+oppfinnerens
+oppfinneres
+oppfinnerne
+oppfinnernes
+oppfinning
+oppfinninga
+oppfinningen
+oppfinningene
+oppfinningens
+oppfinninger
+oppfinnsom
+oppfinnsomhet
+oppfinnsomheten
+oppfinnsomhetens
+oppfinnsomme
+oppfinnsomt
+oppfiska
+oppflaska
+oppfølgelse
+oppfølgelsen
+oppfølgelsens
+oppfølging
+oppfølginga
+oppfølgingen
+oppfølgingens
+oppfølgning
+oppfølgningen
+oppfølgningens
+oppfor
+oppfordra
+oppfordre
+oppfordrer
+oppfordret
+oppfordring
+oppfordringa
+oppfordringen
+oppfordringer
+oppføre
+oppførelse
+oppførelsen
+oppførelsens
+oppfører
+oppføres
+oppføring
+oppføringa
+oppføringen
+oppfrisking
+oppfriskinga
+oppfriskingen
+oppfriskingens
+oppførsel
+oppførselen
+oppførselens
+oppførslene
+oppførsler
+oppført
+oppfunnet
+oppfyll
+oppfylle
+oppfyllelse
+oppfyllelsen
+oppfyllelsens
+oppfyller
+oppfylles
+oppfylling
+oppfyllinga
+oppfyllingen
+oppfylt
+oppfylte
+oppgang
+oppgangen
+oppgangene
+oppgangens
+oppganger
+oppgav
+oppgava
+oppgave
+oppgaven
+oppgavene
+oppgavens
+oppgaver
+oppgi
+oppgir
+oppgis
+oppgitt
+oppgitte
+oppgivelse
+oppgivelsen
+oppgivelsens
+oppgjør
+oppgjøra
+oppgjørene
+oppgjøret
+oppgjørets
+oppglødd
+oppgløding
+oppglødinga
+oppglødingen
+oppglødingens
+oppgulp
+oppgulpet
+oppgulpets
+opphav
+opphava
+opphavene
+opphavet
+opphavets
+opphavlig
+opphavsmann
+opphavsmannen
+opphavsmannens
+opphavsmenn
+opphavsmennene
+opphavsmennenes
+opphavsmenns
+opphavsperson
+opphavspersonen
+opphavspersonens
+oppheta
+opphete
+opphetet
+opphev
+opphevd
+opphevde
+oppheve
+opphevelse
+opphevelsen
+opphevelsens
+oppheves
+opphevet
+oppheving
+opphevinga
+opphevingen
+opphevingens
+opphisse
+opphissede
+opphisselse
+opphisselsen
+opphisselsens
+opphisset
+opphjelp
+opphjelpa
+opphjelpen
+opphold
+oppholde
+oppholder
+oppholdes
+oppholdet
+oppholdsrom
+oppholdsrommene
+oppholdsrommet
+oppholdsrommets
+oppholdssted
+oppholdsstedet
+oppholdsstedets
+oppholdsvær
+oppholdsværet
+oppholdsværets
+oppholdt
+opphoping
+opphopingen
+opphopingens
+opphovna
+opphør
+opphøre
+opphører
+opphøret
+opphørssalg
+opphørssalget
+opphørssalgets
+opphørt
+opphørte
+opphøye
+opphøyet
+oppi
+oppigjennom
+oppildne
+oppildnet
+oppimot
+oppjaga
+oppjagd
+oppjustere
+oppjusteres
+oppjustering
+oppkalt
+oppkava
+oppkjøp
+oppkjøpene
+oppkjøper
+oppkjøperen
+oppkjøperens
+oppkjøpet
+oppklare
+oppklarer
+oppklaring
+oppklaringa
+oppklaringen
+oppklaringens
+oppklart
+oppklarte
+oppkok
+oppkoket
+oppkokets
+oppkomling
+oppkomlingen
+oppkomlingene
+oppkomlingens
+oppkomlinger
+oppkrav
+oppkravet
+oppkrevd
+oppkrevde
+oppkvikker
+oppkvikkere
+oppkvikkeren
+oppkvikkerens
+oppkvikkeres
+oppkvikkerne
+oppkvikkernes
+opplade
+opplading
+oppladinga
+oppladingen
+oppladingens
+oppladning
+oppladningen
+oppladningens
+opplag
+opplaga
+opplagene
+opplaget
+opplagssted
+opplagsstedet
+opplagsstedets
+opplagt
+opplagte
+oppland
+opplandet
+opplandsk
+opplate
+opplegg
+opplegga
+oppleggene
+opplegget
+opplending
+opplendingen
+opplendingene
+opplendingens
+opplendinger
+opplesing
+opplesinga
+opplesingen
+opplesning
+opplesningen
+opplesningens
+opplett
+opplettet
+opplev
+opplevd
+opplevde
+oppleve
+opplevelse
+opplevelsen
+opplevelsene
+opplevelsens
+opplevelser
+opplever
+opplevet
+oppleving
+opplevinga
+opplevingen
+opplevingens
+oppløftende
+opplivelse
+opplivelsen
+opplivelsens
+oppliving
+opplivinga
+opplivingen
+opplivingens
+opplivning
+opplivningen
+opplivningens
+oppløp
+oppløpa
+oppløpen
+oppløpene
+oppløpet
+oppløpets
+opplæring
+opplæringa
+opplæringen
+opplæringens
+opplæringsinstitusjon
+opplæringsinstitusjonen
+opplæringsinstitusjonene
+opplæringsinstitusjonens
+opplæringsinstitusjoner
+opplært
+oppløselig
+oppløsning
+oppløsningen
+oppløsningene
+oppløsningens
+oppløsninger
+oppløst
+oppløste
+opplys
+opplyse
+opplysende
+opplyser
+opplyses
+opplysning
+opplysninga
+opplysningen
+opplysningene
+opplysningens
+opplysninger
+opplysningsvirksomhet
+opplysningsvirksomheten
+opplysningsvirksomhetens
+opplyst
+opplyste
+oppmann
+oppmannen
+oppmannens
+oppmarsj
+oppmarsjen
+oppmarsjens
+oppmarsjere
+oppmarsjerer
+oppmarsjert
+oppmarsjerte
+oppmelding
+oppmeldinga
+oppmeldingen
+oppmeldingene
+oppmeldinger
+oppmenn
+oppmennene
+oppmennenes
+oppmenns
+oppmerking
+oppmerkinga
+oppmerkingen
+oppmerkingene
+oppmerkinger
+oppmerksom
+oppmerksomhet
+oppmerksomheten
+oppmerksomhetens
+oppmerksomme
+oppmoding
+oppmodinga
+oppmodingen
+oppmodingene
+oppmodingens
+oppmodinger
+oppmudring
+oppmudringa
+oppmudringen
+oppmudringens
+oppmuntra
+oppmuntre
+oppmuntrende
+oppmuntres
+oppmuntret
+oppmuntring
+oppmuntringa
+oppmuntringen
+oppmuntringens
+oppmyking
+oppmykinga
+oppmykingen
+oppmykingens
+oppmykning
+oppmykningen
+oppmykningens
+oppnå
+oppnavn
+oppnavna
+oppnavnene
+oppnavnet
+oppnavnets
+oppnådd
+oppnådde
+oppnåelig
+oppnåelige
+oppnåes
+oppnevne
+oppnevnes
+oppnevning
+oppnevninga
+oppnevningen
+oppnevningens
+oppnevnt
+oppnevnte
+oppnår
+oppnås
+oppofre
+oppofrende
+oppom
+opponent
+opponenten
+opponentene
+opponentens
+opponenter
+opponere
+opponerer
+opportun
+opportunisme
+opportunismen
+opportunismens
+opportunist
+opportunisten
+opportunistene
+opportunistens
+opportunister
+opposisjon
+opposisjonell
+opposisjonelle
+opposisjonen
+opposisjonene
+opposisjonens
+opposisjoner
+oppover
+oppoverbakke
+oppoverbakken
+oppoverbakkens
+oppramsing
+oppramsinga
+oppramsingen
+oppramsingens
+opprant
+opprådd
+oppredd
+oppredde
+oppregning
+oppregninga
+oppregningen
+oppregningens
+oppreid
+oppreise
+oppreiser
+oppreisning
+oppreisningen
+oppreisningens
+oppreist
+oppreiste
+opprekning
+opprekninga
+opprekningen
+opprensking
+opprenskinga
+opprenskingen
+opprenskingens
+opprenskning
+opprenskningen
+opprenskningens
+opprett
+opprette
+opprettede
+opprettelse
+opprettelsen
+opprettelsens
+oppretter
+opprettes
+opprettet
+oppretthold
+opprettholde
+opprettholder
+opprettholdes
+opprettholdt
+oppretting
+opprettinga
+opprettingen
+opprettingene
+opprettingens
+opprettinger
+opprevet
+oppriktig
+oppriktige
+oppriktigere
+opprinne
+opprinnelig
+opprinnelige
+opprinnelse
+opprinnelsen
+opprinnelsens
+opprivende
+opprømt
+opprop
+oppropa
+oppropene
+oppropet
+opprør
+opprøre
+opprørende
+opprører
+opprøret
+opprørsk
+opprørske
+opprørt
+opprørte
+opprulling
+opprullinga
+opprullingen
+opprullingens
+opprusting
+opprustinga
+opprustingen
+opprustingens
+opprustning
+opprustningen
+opprustningens
+opprydding
+oppryddinga
+opprykk
+opprykka
+opprykkene
+opprykket
+opprykking
+opprykkinga
+opprykkingen
+opprykkingens
+opprykning
+opprykningen
+opprykningens
+oppsagt
+oppsamlingsheat
+oppsamlingsheatet
+oppsamlingsheatets
+oppsats
+oppsatsen
+oppsatsene
+oppsatsens
+oppsatser
+oppsatt
+oppsatte
+oppsede
+oppseding
+oppsedinga
+oppsedingen
+oppsedingens
+oppsetning
+oppsetninga
+oppsetningen
+oppsetningene
+oppsetninger
+oppsetsig
+oppsett
+oppsette
+oppsettes
+oppsettet
+oppsetting
+oppsettinga
+oppsettingen
+oppsettingene
+oppsettingens
+oppsettinger
+oppsigelig
+oppsigelse
+oppsigelsen
+oppsigelsens
+oppsigelsesfrist
+oppsigelsestid
+oppsigelsestida
+oppsigelsestiden
+oppsigelsestidens
+oppsiing
+oppsiinga
+oppsiingen
+oppsiingene
+oppsiingens
+oppsiinger
+oppsikt
+oppsikten
+oppsiktene
+oppsiktens
+oppsikter
+oppsiktsvekkende
+oppøsing
+oppøsinga
+oppøsingen
+oppøsingens
+oppsitter
+oppsittere
+oppsitteren
+oppsitterens
+oppsitteres
+oppsitterne
+oppsitternes
+oppskaka
+oppsøke
+oppsøkende
+oppskjær
+oppskjæret
+oppskjørta
+oppskrapa
+oppskrapt
+oppskremt
+oppskåren
+oppskåret
+oppskreven
+oppskrevet
+oppskrift
+oppskrifta
+oppskriften
+oppskriftene
+oppskriftens
+oppskrifter
+oppsøkt
+oppskyting
+oppskytinga
+oppskytingen
+oppslag
+oppslags
+oppslagsbok
+oppslagsboka
+oppslagsboken
+oppslagsbokens
+oppslagsord
+oppslagsordet
+oppslagsordets
+oppslagsverk
+oppslagsverkene
+oppslagsverket
+oppslagsverkets
+oppslått
+oppslukt
+oppslutning
+oppslutninga
+oppslutningen
+oppslutningene
+oppslutningens
+oppslutninger
+oppsop
+oppsopet
+oppsopets
+oppspalting
+oppspaltinga
+oppspaltingen
+oppspaltingens
+oppsparing
+oppsparinga
+oppsparingen
+oppspart
+oppsparte
+oppspedd
+oppspedde
+oppspilt
+oppspilte
+oppspilthet
+oppspiltheten
+oppspilthetens
+oppspinn
+oppspinnet
+oppspist
+oppspore
+oppspores
+oppsporet
+oppsport
+oppsporte
+oppstå
+oppøst
+oppstabla
+oppstaking
+oppstakinga
+oppstakingen
+oppstakingens
+oppstand
+oppstandelse
+oppstandelsen
+oppstandelsens
+oppstanden
+oppstandene
+oppstandens
+oppstander
+oppstarting
+oppstartingsfase
+oppstartingsfasen
+oppstartingsfasens
+oppstasa
+oppstast
+oppstilling
+oppstillinga
+oppstillingen
+oppstillingene
+oppstillingenes
+oppstillinger
+oppstillingsmåte
+oppstillingsmåten
+oppstillingsmåtens
+oppstilt
+oppstilte
+oppstod
+oppstopper
+oppstoppere
+oppstopperen
+oppstopperens
+oppstopperes
+oppstopperne
+oppstoppernes
+oppstår
+oppstått
+oppstuss
+oppstusset
+oppstylta
+oppstyltede
+oppstyltet
+oppstyr
+oppstyret
+oppstyrets
+oppsummer
+oppsummere
+oppsummerer
+oppsummering
+oppsummert
+oppsummerte
+oppsving
+oppsvingen
+oppsvingens
+oppsvinget
+oppsyn
+oppsyna
+oppsynene
+oppsynet
+oppsynets
+oppsynsmann
+oppsynsmannen
+oppsynsmannens
+oppsynsmenn
+oppsynsmennene
+oppsynsmennenes
+oppsynsmenns
+oppsynsskip
+oppsynsskipet
+oppsynsskipets
+oppta
+opptak
+opptakelse
+opptakelsen
+opptakelsens
+opptakene
+opptaket
+opptakets
+opptaking
+opptakinga
+opptakingen
+opptakingene
+opptakingens
+opptakinger
+opptakt
+opptakten
+opptaktene
+opptaktens
+opptakter
+opptar
+opptas
+opptatt
+opptatte
+opptatthet
+opptattheten
+opptatthetens
+opptødd
+opptegnelse
+opptegnelsen
+opptegnelsens
+opptelling
+opptellinga
+opptellingen
+opptellingene
+opptellingens
+opptellinger
+opptil
+opptog
+opptoga
+opptogene
+opptoget
+opptogets
+opptok
+opptrapping
+opptrappinga
+opptrappingen
+opptrappingens
+opptrådt
+opptrådte
+opptre
+opptreden
+opptredende
+opptredenen
+opptredenene
+opptredenens
+opptredener
+opptrekkeri
+opptrekkeria
+opptrekkeriene
+opptrekkerier
+opptrekkeriet
+opptrekkeriets
+opptrer
+opptres
+opptrinn
+opptrinna
+opptrinnene
+opptrinnet
+opptrinnets
+opptrukne
+opptuktelse
+opptuktelsen
+opptuktelsens
+opptukting
+opptuktinga
+opptuktingen
+opptuktingens
+opptøyer
+oppunder
+oppøva
+oppvakt
+oppvakte
+oppvarma
+oppvarmede
+oppvarmet
+oppvarming
+oppvarminga
+oppvarmingen
+oppvarmingens
+oppvarte
+oppvarter
+oppvartere
+oppvarteren
+oppvarterens
+oppvarteres
+oppvarterne
+oppvarternes
+oppvarting
+oppvartinga
+oppvartingen
+oppvartingens
+oppvartning
+oppvartningen
+oppvartningens
+oppvask
+oppvasken
+oppvaskens
+oppøve
+oppveid
+oppveide
+oppveie
+oppveier
+oppvekst
+oppveksten
+oppvekstene
+oppvekstens
+oppvekster
+oppøver
+oppøvet
+oppvigla
+oppvigle
+oppvigler
+oppviglere
+oppvigleren
+oppviglerens
+oppvigleres
+oppviglerne
+oppviglernes
+oppviglet
+oppøving
+oppøvinga
+oppøvingen
+oppøvingens
+oppvise
+oppviser
+oppvisning
+oppvisninga
+oppvisningen
+oppvisningene
+oppvisningens
+oppvisninger
+oppvist
+oppviste
+oppvokst
+opsjon
+opsjonen
+opsjonene
+opsjonens
+opsjoner
+optiker
+optikere
+optikeren
+optikerens
+optikeres
+optikerne
+optikernes
+optikk
+optikken
+optikkens
+optimal
+optimale
+optimalt
+optimat
+optimaten
+optimatene
+optimatens
+optimater
+optimisme
+optimismen
+optimismens
+optimist
+optimisten
+optimistene
+optimistens
+optimister
+optimistisk
+optimistiske
+optisk
+optiske
+opus
+opusa
+opusene
+opuset
+opusets
+or
+ora
+orakel
+orakelet
+orakelets
+orakla
+oraklene
+orakler
+oraklet
+oraklets
+orangutang
+orangutangen
+orangutangens
+oransje
+oratoria
+oratoriene
+oratorier
+oratoriet
+oratoriets
+oratorisk
+oratorium
+ord
+ordbehandlingsprogram
+ordbehandlingsprogrammene
+ordbehandlingsprogrammer
+ordbehandlingsprogrammet
+ordbehandlingsprogrammets
+ordbøker
+ordblind
+ordbok
+ordboka
+ordboken
+ordbokens
+orddeling
+orddelingen
+orddelingene
+orddelingens
+orddelinger
+orde
+ordelag
+orden
+ordene
+ordenen
+ordenens
+ordener
+ordens
+ordensvern
+ordensvernet
+ordensvernets
+ordentlig
+ordentlige
+order
+ordet
+ordets
+ordform
+ordforma
+ordformen
+ordformene
+ordformens
+ordformer
+ordforråd
+ordforrådet
+ordforrådets
+ordfrekvens
+ordfrekvensen
+ordfrekvensens
+ordfører
+ordførere
+ordføreren
+ordførerens
+ordføreres
+ordførerne
+ordførernes
+ordholden
+ordinand
+ordinanden
+ordinandene
+ordinandens
+ordinander
+ordinasjon
+ordinasjonen
+ordinasjonene
+ordinasjonens
+ordinasjoner
+ordinere
+ordinerer
+ordinert
+ordinerte
+ordinær
+ordinære
+ordinært
+ordlag
+ordlaget
+ordlagets
+ordlegge
+ordlegger
+ordlista
+ordliste
+ordlisten
+ordlistene
+ordlistens
+ordlister
+ordlyd
+ordlyden
+ordlydens
+ordmateriale
+ordmaterialet
+ordna
+ordne
+ordnede
+ordner
+ordnes
+ordnet
+ordning
+ordninga
+ordningen
+ordningene
+ordningens
+ordninger
+ordonnans
+ordonnansen
+ordonnansene
+ordonnansens
+ordonnanser
+ordre
+ordren
+ordrene
+ordrens
+ordrer
+ordrett
+ordsekvens
+ordsekvensen
+ordsekvensene
+ordsekvensens
+ordsekvenser
+ordskift
+ordskifte
+ordskiftet
+ordspill
+ordspillet
+ordspillets
+ordspråk
+ordspråket
+ordspråkets
+ordstyrer
+ordstyrere
+ordstyreren
+ordstyrerens
+ordstyreres
+ordstyrerne
+ordstyrernes
+ordtak
+ordtaka
+ordtakene
+ordtaket
+ordtakets
+ordtøke
+ordtøket
+ordtydningslære
+ordvalg
+ordvalga
+ordvalgene
+ordvalget
+ordvalgets
+ore
+oreigna
+oreigne
+oreigner
+oreignet
+oreigning
+oreigninga
+oreigningen
+oreigningens
+orekratt
+orekrattet
+orekrattets
+oren
+orens
+organ
+organa
+organene
+organer
+organet
+organets
+organisasjon
+organisasjonen
+organisasjonene
+organisasjonenes
+organisasjonens
+organisasjoner
+organisasjoners
+organisasjons
+organisasjonsform
+organisasjonsforma
+organisasjonsformen
+organisasjonsformene
+organisasjonsformens
+organisasjonsformer
+organisasjonsmessig
+organisasjonsmessige
+organisasjonsplan
+organisasjonsplanen
+organisasjonsplanens
+organisatorisk
+organisatoriske
+organiser
+organisere
+organiserer
+organiseres
+organisering
+organiseringa
+organiseringen
+organiseringens
+organisert
+organiserte
+organisk
+organiske
+organisme
+organismen
+organismene
+organismens
+organismer
+organist
+organisten
+organistene
+organistens
+organister
+orgel
+orgelet
+orgelets
+orgie
+orgien
+orgiens
+orgla
+orglene
+orgler
+orglet
+orglets
+orientaler
+orientalere
+orientaleren
+orientalerens
+orientaleres
+orientalerne
+orientalernes
+orientalsk
+orientere
+orienterer
+orientering
+orienteringa
+orienteringen
+orienteringene
+orienteringens
+orienteringer
+orientert
+orienterte
+original
+originalen
+originalens
+originalitet
+originaliteten
+originalitetens
+originalprogram
+originalprogrammene
+originalprogrammer
+originalprogrammet
+originalprogrammets
+originalt
+origo
+origoen
+origoene
+origoens
+origoer
+ork
+orka
+orkan
+orkanen
+orkanene
+orkanens
+orkaner
+orke
+orkester
+orkesteret
+orkesterets
+orkesterleder
+orkesterledere
+orkesterlederen
+orkesterlederens
+orkesterlederes
+orkesterlederne
+orkesterledernes
+orkesterplass
+orkesterplassen
+orkesterplassene
+orkesterplassens
+orkesterplasser
+orkestra
+orkestre
+orkestrene
+orkestret
+orkestrets
+orket
+orkidé
+orkideen
+orkideene
+orkideenes
+orkideens
+orkideer
+orknøying
+orknøyingen
+orknøyingene
+orknøyingens
+orknøyinger
+orknøysk
+orlogsflagg
+orlogsflagget
+orlogsflaggets
+orlogsgast
+orlogsgasten
+orlogsgastens
+orlon
+orlov
+orloven
+orlovens
+orm
+ormegras
+ormegraset
+ormegrasets
+ormen
+ormene
+ormens
+ormer
+ornament
+ornamenta
+ornamentene
+ornamenter
+ornamentet
+ornamentets
+ornamentikk
+ornamentikken
+ornamentikkene
+ornamentikkens
+ornamentikker
+ornat
+ornata
+ornatene
+ornater
+ornatet
+ornatets
+ornitolog
+ornitologen
+ornitologene
+ornitologens
+ornitologer
+ornitologi
+ornitologien
+ornitologiens
+ornitologisk
+orre
+orreleik
+orreleiken
+orreleikens
+orren
+orrene
+orrens
+orrer
+orrfugl
+orrfuglen
+orrfuglene
+orrfuglens
+orrfugler
+orrhane
+orrhanen
+orrhanens
+orrhøna
+orrhøne
+orrhønen
+orrhønene
+orrhønens
+orrhøner
+ortodoks
+ortodokse
+ortodoksi
+ortodoksien
+ortodoksiens
+ortografi
+ortografien
+ortografiens
+ortografisk
+ortoped
+ortopeden
+ortopedene
+ortopedens
+ortopeder
+ortopedi
+ortopedien
+ortopediens
+ortopedisk
+orv
+orva
+orvene
+orvet
+orvets
+os
+osa
+oscillator
+oscillatoren
+oscillatorene
+oscillatorens
+oscillatorer
+oscillere
+oscillerer
+oscilloskop
+oscilloskopa
+oscilloskopene
+oscilloskoper
+oscilloskopet
+oscilloskopets
+ose
+osean
+oseana
+oseanene
+oseaner
+oseanet
+oseanets
+oseanograf
+oseanografen
+oseanografene
+oseanografens
+oseanografer
+oseanografi
+oseanografien
+oseanografiens
+osen
+osens
+oset
+oska
+oske
+oskorei
+oskoreia
+osmium
+osmiumet
+osmiumets
+osmose
+osmosen
+osmosens
+osmotisk
+osp
+ospa
+ospelauv
+ospelauvet
+ospelauvets
+ospeløv
+ospeløvet
+ospeløvets
+ospen
+ospene
+ospens
+osper
+oss
+ost
+osten
+ostene
+ostens
+ostentativ
+osteologi
+osteologisk
+oster
+osv
+oter
+oteren
+oterens
+otium
+otiumet
+otiumets
+otre
+otrene
+otrer
+otta
+otte
+ottefull
+otten
+ottens
+ottes
+ottesang
+ottesangen
+ottesangens
+ottoman
+ottomanen
+ottomanens
+output
+outrere
+outrert
+outrerte
+outrigger
+outriggere
+outriggeren
+outriggerens
+outriggeres
+outriggerne
+outriggernes
+outsider
+outsidere
+outsideren
+outsiderens
+outsideres
+outsiderne
+outsidernes
+ouverture
+ouverturen
+ouverturens
+ovafor
+ovafra
+oval
+ovalen
+ovalene
+ovalens
+ovaler
+ovapå
+ovarenn
+ovarenna
+ovarennene
+ovarennet
+ovarennets
+ovasjon
+ovasjonen
+ovasjonene
+ovasjonens
+ovasjoner
+ovatil
+oven
+ovenfor
+ovenfra
+ovenpå
+ovenstående
+oventil
+over
+overall
+overallen
+overallens
+overaller
+overalt
+overanstrenge
+overanstrengelsen
+overanstrengelsens
+overanstrengende
+overanstrenger
+overanstrengt
+overanstrengte
+overarbeide
+overarbeidet
+overarbeidets
+overbelastes
+overbevis
+overbevise
+overbevisende
+overbeviser
+overbevises
+overbevisning
+overbevisningen
+overbevisningens
+overbevisninger
+overbevist
+overbeviste
+overblikk
+overblikkene
+overblikket
+overblikkets
+overbrakt
+overbrakte
+overbærende
+overbærenhet
+overbærenhets
+overbringe
+overbringer
+overbygg
+overbygget
+overbyggets
+overbygning
+overbygningen
+overbygningene
+overbygningens
+overbygninger
+overdådig
+overdådige
+overdådighet
+overdådigheten
+overdådighetens
+overdra
+overdradd
+overdragelsen
+overdragelsens
+overdraging
+overdraginga
+overdragingen
+overdrar
+overdras
+overdratt
+overdreiv
+overdrev
+overdrevet
+overdrevne
+overdriv
+overdrive
+overdrivelse
+overdrivelsen
+overdrivelsene
+overdrivelsens
+overdrivelser
+overdriver
+overdrog
+overens
+overenskomst
+overenskomsten
+overenskomstene
+overenskomstens
+overenskomster
+overensstemmelse
+overensstemmelsen
+overensstemmelsens
+overensstemmende
+overfall
+overfalle
+overfaller
+overfallet
+overfalt
+overfladisk
+overfladiske
+overflata
+overflate
+overflaten
+overflatene
+overflatens
+overflater
+overflatetemperatur
+overflatetemperaturen
+overflatetemperaturens
+overflødig
+overflødige
+overflod
+overfloden
+overflodens
+overflygning
+overflygninga
+overflygningen
+overflygningene
+overflygningens
+overflygninger
+overfor
+overføre
+overføres
+overføring
+overføringa
+overføringen
+overføringene
+overføringens
+overføringer
+overførsel
+overførselen
+overførselens
+overførsla
+overførslene
+overførsler
+overført
+overførte
+overfylt
+overfylte
+overgå
+overgang
+overgangen
+overgangene
+overgangens
+overganger
+overgangsordning
+overgangsordningen
+overgangsordningene
+overgangsordningens
+overgangsordninger
+overgangsperiode
+overgangsperioden
+overgangsperiodens
+overgangstid
+overgangstida
+overgangstiden
+overgangstidens
+overgav
+overgi
+overgikk
+overgir
+overgis
+overgitt
+overgivelse
+overgivelsen
+overgivelsens
+overgår
+overgrep
+overgrepa
+overhaling
+overhalinga
+overhalingen
+overhalingene
+overhalingens
+overhalinger
+overheng
+overhengende
+overhenget
+overhengets
+overhånd
+overhode
+overhodene
+overhoder
+overhodet
+overholde
+overholder
+overholdes
+overholdt
+overhøring
+overhøringa
+overhøringen
+overhøringene
+overhøringens
+overhøringer
+overilt
+overingeniør
+overingeniøren
+overingeniørene
+overingeniørens
+overingeniører
+overkant
+overkjørt
+overklasse
+overklassen
+overklassene
+overklassens
+overklasser
+overkommando
+overkommandoen
+overkommandoene
+overkommandoens
+overkommandoer
+overkommelig
+overlag
+overlagt
+overlat
+overlate
+overlater
+overlates
+overlatt
+overlege
+overlegen
+overlegene
+overlegenhet
+overlegenheten
+overlegenhetens
+overlegens
+overlegent
+overleger
+overlegg
+overlegge
+overlegget
+overlegne
+overlegning
+overlegningen
+overlegningens
+overless
+overlesse
+overlesser
+overlesst
+overlesste
+overlevd
+overlevde
+overleve
+overlevende
+overlever
+overlevere
+overleveres
+overlevering
+overleveringa
+overleveringen
+overleveringene
+overleveringens
+overleveringer
+overlevert
+overleverte
+overlevet
+overlot
+overløper
+overlærer
+overlæreren
+overlærerens
+overlydsfly
+overlydsflyet
+overlydsflyets
+overlys
+overlyset
+overlysets
+overmakt
+overmakta
+overmakten
+overmaktens
+overmann
+overmanne
+overmannen
+overmannens
+overmannet
+overmenneske
+overmenneskelig
+overmenneskelige
+overmenneskene
+overmenneskenes
+overmennesker
+overmenneskers
+overmennesket
+overmenneskets
+overmål
+overmålet
+overmodig
+overmodige
+overmorgen
+overmot
+overmotet
+overmotets
+overmåte
+overnatte
+overnatting
+overnattinga
+overnattingen
+overnattingens
+overordentlig
+overordentlige
+overordne
+overordnede
+overordnet
+overprøvinga
+overprøvingen
+overrakt
+overrakte
+overraske
+overraskelse
+overraskelsen
+overraskelsene
+overraskelsens
+overraskelser
+overraskende
+overrasket
+overrekke
+overrekkelse
+overrekkelsen
+overrekkelsens
+overrekker
+overrumple
+overrumplet
+overrumpling
+overrumplinga
+overrumplingen
+overrumplingens
+overs
+oversatt
+oversatte
+overse
+oversende
+oversender
+oversendes
+oversending
+oversendinga
+oversendingen
+oversendingene
+oversendingens
+oversendinger
+oversendt
+oversendte
+overser
+oversett
+oversette
+oversettelse
+oversettelsen
+oversettelsene
+oversettelsens
+oversettelser
+oversetter
+oversetteren
+oversetterens
+oversettes
+oversida
+overside
+oversiden
+oversidens
+oversikt
+oversikten
+oversiktens
+oversikter
+oversiktlig
+oversiktlige
+oversjøisk
+oversjøiske
+overskott
+overskotta
+overskottene
+overskottet
+overskottets
+overskred
+overskredet
+overskridelse
+overskridelsen
+overskridelsens
+overskrift
+overskrifta
+overskriften
+overskriftene
+overskriftens
+overskrifter
+overskudd
+overskuddene
+overskuddet
+overskuelig
+overskya
+overskygga
+overskygge
+overskygger
+overskygget
+overslag
+overslaga
+overslagene
+overslaget
+overslagets
+overspent
+overspente
+overspenthet
+overspentheten
+overspenthetens
+oversøster
+oversøsteren
+oversøsterens
+oversøstre
+oversøstrene
+overstadig
+oversteg
+oversteget
+overstegets
+overstige
+overstiger
+overstrømmende
+overstått
+oversvømme
+oversvømmelse
+oversvømmelsen
+oversvømmelsene
+oversvømmelsens
+oversvømmelser
+oversvømmet
+oversyn
+oversyna
+oversynene
+oversynet
+oversynets
+overta
+overtak
+overtakelse
+overtakelsen
+overtakelsens
+overtaket
+overtakets
+overtaking
+overtakinga
+overtakingen
+overtakingens
+overtale
+overtalende
+overtaler
+overtales
+overtallig
+overtalt
+overtalte
+overtar
+overtas
+overtatt
+overtent
+overtente
+overtid
+overtida
+overtiden
+overtidens
+overtids
+overtok
+overtrådt
+overtrådte
+overtre
+overtredelse
+overtredelsen
+overtredelsene
+overtredelsens
+overtredelser
+overtrer
+overtres
+overtro
+overtroa
+overtroen
+overtroens
+overtru
+overtrua
+overtrykk
+overtrykket
+overtrykkets
+overtydd
+overtydde
+overtyde
+overtyder
+overtydet
+overtyding
+overtydinga
+overtydingen
+overvar
+overveid
+overveide
+overveie
+overveielse
+overveielsen
+overveielsene
+overveielsens
+overveielser
+overveiende
+overveier
+overveies
+overveiet
+overvekt
+overvekta
+overvekten
+overvektens
+overvektig
+overvektige
+overvelde
+overveldende
+overveldet
+overvettes
+overvinn
+overvinne
+overvinnelig
+overvinnelse
+overvinnelsen
+overvinnelsens
+overvinner
+overvinnes
+overvintra
+overvintre
+overvintrer
+overvintret
+overvåke
+overvåker
+overvåkes
+overvåking
+overvåkinga
+overvåkingen
+overvåkingens
+overvåkning
+overvåkningen
+overvåkningens
+overvære
+overværer
+overvært
+overvunne
+overvunnet
+overvurder
+overvurdere
+overvurderer
+overvurderes
+overvurdering
+overvurderinga
+overvurderingen
+overvurderingene
+overvurderinger
+overvurdert
+overvurderte
+ovn
+ovnen
+ovnens
+ovner
+ovns
+ovnsgods
+ovnsgodset
+ovnsgodsets
+ozonosfære
+ozonosfæren
+ozonosfærens
+p
+på
+åp
+åpa
+pace
+pacemaker
+pacemakere
+pacemakeren
+pacemakerens
+pacemakeres
+pacemakerne
+pacemakernes
+pacer
+padda
+padde
+padden
+paddens
+padla
+padle
+padler
+padlerne
+padlet
+paed
+paff
+paffa
+paffene
+paffer
+paffet
+pagina
+paginaen
+paginaene
+paginaens
+paginaer
+paginere
+paginerer
+paginert
+paginerte
+pagode
+pagoden
+pagodene
+pagodens
+pagoder
+pai
+paien
+paiens
+pair
+pakett
+pakistaner
+pakistanere
+pakistaneren
+pakistanerens
+pakistaneres
+pakistanerne
+pakistanernes
+pakistansk
+pakistanske
+pakk
+pakka
+pakkbu
+pakkbua
+pakke
+pakkeløsning
+pakkeløsningen
+pakkeløsningens
+pakkeløysing
+pakkeløysingen
+pakkeløysingens
+pakken
+pakkende
+pakkene
+pakkenellik
+pakkenelliken
+pakkenellikens
+pakkepost
+pakkeposten
+pakkepostens
+pakker
+pakket
+pakkfull
+pakking
+pakkinga
+pakning
+pakningen
+pakningens
+pakt
+påakta
+pakten
+paktene
+paktens
+pakter
+pal
+palass
+palassa
+palassene
+palasser
+palasset
+palassets
+pale
+paleer
+paleet
+paleets
+palen
+palene
+paleografi
+paleografien
+paleografiene
+paleografiens
+paleografier
+paleontologi
+paleontologien
+paleontologiens
+paleontologisk
+paleontologiske
+paler
+palestinerne
+palestinsk
+palestinske
+palesuppe
+palett
+paletten
+palettene
+palettens
+paletter
+palisade
+palisaden
+palisadens
+pall
+palladia
+palladiene
+palladier
+palladiet
+palladiets
+palladium
+pallelast
+pallelasta
+pallelasten
+pallelastens
+pallen
+pallene
+pallens
+paller
+palltosk
+palltosken
+palltoskene
+palltoskens
+palltosker
+palme
+palmen
+palmene
+palmens
+palmer
+palmesøndag
+palmesøndagen
+palmesøndagens
+pamfilius
+pamfiliusen
+pamfiliusens
+pamflett
+pamfletten
+pamflettene
+pamflettens
+pamfletter
+pamp
+pampas
+pampasen
+pampasene
+pampasens
+pampaser
+pampen
+pampens
+panamahatt
+panamahatten
+panamahattens
+panamaner
+panamanere
+panamaneren
+panamanerens
+panamaneres
+panamanerne
+panamanernes
+panamansk
+panegyrikk
+panegyrikken
+panegyrikkene
+panegyrikkens
+panegyrikker
+panegyrisk
+panel
+paneldebatt
+paneldebatten
+paneldebattens
+panele
+panelet
+paneling
+panelinga
+panelingen
+panelingene
+panelingens
+panelinger
+panelt
+pang
+panga
+pangene
+panget
+pangets
+panikk
+panikken
+panikkens
+panisk
+påanke
+panna
+panne
+pannekaka
+pannekake
+pannekaken
+pannekakene
+pannekakens
+pannekaker
+pannen
+pannene
+pannens
+panner
+panorama
+panoramaene
+panoramaer
+panoramaet
+panoramaets
+panser
+panserbil
+panserbilen
+panserbilene
+panserbilens
+panserbiler
+pansere
+panseret
+pansre
+pant
+pante
+pantegjeld
+pantegjelda
+pantegjelden
+pantegjeldens
+panteisme
+panteismen
+panteismens
+panteist
+panteisten
+panteistene
+panteistens
+panteister
+panteistisk
+pantelån
+pantelåner
+panten
+pantens
+panter
+pantere
+panteren
+panterens
+panteres
+panterne
+panternes
+pantet
+panthaver
+panthavere
+panthaveren
+panthaverens
+panthaveres
+panthaverne
+panthavernes
+pantobligasjon
+pantobligasjonen
+pantobligasjonene
+pantobligasjonens
+pantobligasjoner
+pantomime
+pantomimen
+pantomimens
+pantrer
+pantry
+pantrya
+pantryene
+pantryer
+pantryet
+pantryets
+pantsatt
+pantsatte
+pantsette
+pantsetter
+papegøye
+papegøyen
+papegøyens
+papiljott
+papiljotten
+papiljottene
+papiljottens
+papiljotter
+papir
+papira
+papirene
+papirer
+papiret
+papirets
+papist
+papisten
+papistene
+papistens
+papister
+papp
+pappa
+pappaen
+pappaens
+pappas
+pappen
+pappenheimere
+pappenheimeren
+pappenheimerens
+pappens
+paprika
+paprikaen
+paprikaens
+papua
+papuaner
+papuanere
+papuaneren
+papuanerens
+papuaneres
+papuanerne
+papuanernes
+papyr
+papyren
+papyrene
+papyrens
+papyrer
+papyri
+papyrus
+papyrusen
+papyrusens
+papyruser
+papyruset
+papyrusets
+par
+para
+parabel
+parabelen
+parabelens
+parablene
+parabler
+paraboliske
+parade
+paraden
+paradene
+paradens
+parader
+paradere
+paraderer
+paradert
+paraderte
+paradigma
+paradigmaene
+paradigmaer
+paradigmaet
+paradigmaets
+paradigme
+paradigmet
+paradis
+paradisa
+paradisene
+paradiser
+paradiset
+paradisets
+paradisisk
+paradoks
+paradoksa
+paradoksal
+paradoksale
+paradoksalt
+paradoksene
+paradokser
+paradokset
+paradoksets
+parafere
+paraferer
+parafert
+paraferte
+parafin
+parafinen
+parafinene
+parafinens
+parafiner
+parafrase
+parafrasen
+parafrasens
+paragon
+paragonen
+paragonene
+paragonens
+paragoner
+paragraf
+paragrafen
+paragrafene
+paragrafens
+paragrafer
+paraguay
+paraguayaner
+paraguayanere
+paraguayaneren
+paraguayanerens
+paraguayaneres
+paraguayanerne
+paraguayanernes
+paraguayansk
+parallell
+parallelle
+parallellen
+parallellens
+paralleller
+parallellogram
+parallellogramma
+parallellogrammene
+parallellogrammer
+parallellogrammet
+parallellogrammets
+parallelt
+paralyse
+paralysen
+paralysens
+paralysere
+paralyserer
+paralysert
+paralyserte
+paralytiker
+paralytikere
+paralytikeren
+paralytikerens
+paralytikeres
+paralytikerne
+paralytikernes
+paralytisk
+parameter
+parameteren
+parameterens
+parametrene
+parametrer
+paranøtt
+paranøtta
+paranøttene
+paranøtter
+paraply
+paraplyen
+paraplyene
+paraplyens
+paraplyer
+parasitt
+parasitten
+parasittene
+parasittens
+parasitter
+parasoll
+parasollen
+parasollene
+parasollens
+parasoller
+parat
+paratyfus
+paratyfusen
+paratyfusens
+pardong
+pardongen
+pardongens
+pare
+parene
+parentes
+parentesen
+parentesene
+parentesens
+parenteser
+parentetisk
+parere
+pares
+paresen
+paresene
+paresens
+pareser
+paret
+parfyme
+parfymen
+parfymens
+parfymere
+parfymerer
+parfymert
+parfymerte
+pari
+paria
+pariaen
+pariaene
+pariaens
+pariaer
+paring
+paringa
+paringen
+paringens
+pariser
+parisere
+pariseren
+pariserens
+pariseres
+parisergul
+pariserne
+parisernes
+parisisk
+park
+parkanlegg
+parkas
+parkasen
+parkasene
+parkasens
+parkaser
+parken
+parkens
+parker
+parkere
+parkerer
+parkering
+parkeringa
+parkeringen
+parkeringens
+parkeringshus
+parkeringshusa
+parkeringshusene
+parkeringshuset
+parkeringshusets
+parkeringsplass
+parkeringsplassen
+parkeringsplassene
+parkeringsplassens
+parkeringsplasser
+parkert
+parkerte
+parkett
+parketta
+parketten
+parkettene
+parkettens
+parketter
+parkettet
+parkettets
+parkometer
+parkometeret
+parkometerets
+parkometra
+parkometre
+parkometrene
+parkometret
+parkometrets
+parlament
+parlamentariker
+parlamentarikere
+parlamentarikeren
+parlamentarikerens
+parlamentarikeres
+parlamentarikerne
+parlamentarikernes
+parlamentarisk
+parlamentariske
+parlamentarisme
+parlamentarismen
+parlamentarismens
+parlamentet
+parlamentets
+parlør
+parløren
+parlørene
+parlørens
+parlører
+parnass
+parnasset
+parnassets
+parodi
+parodien
+parodiene
+parodiens
+parodier
+parodiere
+parodierer
+parodiert
+parodierte
+parodisk
+parole
+parolen
+parolens
+parsell
+parsellen
+parsellene
+parsellens
+parseller
+parsellere
+part
+parten
+partene
+partens
+parter
+partere
+parterr
+parterre
+parterret
+parters
+parthaver
+parthavere
+parthaveren
+parthaverens
+parthaveres
+parthaverne
+parthavernes
+parti
+partiapparat
+partiapparatet
+partiapparatets
+partiell
+partielle
+partiene
+partienes
+partier
+partiers
+partiet
+partiets
+partifelle
+partifellen
+partifellene
+partifellens
+partifeller
+partifolk
+partifolkene
+partigjenger
+partigjengere
+partigjengeren
+partigjengerens
+partigjengeres
+partigjengerne
+partigjengernes
+partikkel
+partikkelen
+partikkelens
+partiklene
+partikler
+partikulær
+partileder
+partiledere
+partilederen
+partilederens
+partilederes
+partilederne
+partiledernes
+partipolitikk
+partipolitikken
+partipolitikkens
+partipolitisk
+partis
+partisan
+partisanen
+partisanene
+partisanens
+partisaner
+partisipant
+partisipanten
+partisipantene
+partisipantens
+partisipanter
+partisipp
+partisippa
+partisippene
+partisipper
+partisippet
+partisippets
+partisippform
+partisippformen
+partisippformene
+partisippformens
+partisippformer
+partisk
+partitur
+partitura
+partiturene
+partiturer
+partituret
+partiturets
+partner
+partnere
+partneren
+partnerens
+partneres
+partnerne
+partnernes
+partout
+partoutbillett
+partoutbilletten
+partoutbillettens
+party
+partyet
+partyets
+parveny
+parvenyen
+parvenyene
+parvenyens
+parvenyer
+parykk
+parykken
+parykkene
+parykkens
+parykker
+pasient
+pasientbehandling
+pasientbehandlingen
+pasientbehandlingens
+pasienten
+pasientene
+pasientens
+pasienter
+pasifisere
+pasifiserer
+pasifisert
+pasifiserte
+pasifisme
+pasifismen
+pasifismens
+pasifist
+pasifisten
+pasifistene
+pasifistens
+pasifister
+pasifistisk
+pasja
+pasjaen
+pasjaene
+pasjaens
+pasjaer
+pasje
+pasjen
+pasjens
+pasjon
+pasjonen
+pasjonene
+pasjonens
+pasjoner
+pasjonert
+pasning
+pasningen
+pasningens
+pass
+passabel
+passabelt
+passable
+passant
+passasje
+passasjen
+passasjene
+passasjens
+passasjer
+passasjeren
+passasjerene
+passasjerens
+passasjerer
+passasjerskip
+passasjerskipene
+passasjerskipet
+passasjerskipets
+passat
+passaten
+passatene
+passatens
+passater
+passbåt
+passbåten
+passbåtene
+passbåtens
+passbåter
+passe
+passelig
+passende
+passer
+passere
+passeren
+passerens
+passerer
+passering
+passeringa
+passeringen
+passeringens
+passeringer
+passerseddel
+passerseddelen
+passerseddelens
+passersedlene
+passersedler
+passert
+passerte
+passet
+passgjenger
+passgjengere
+passgjengeren
+passgjengerens
+passgjengeres
+passgjengerne
+passgjengernes
+passiar
+passiaren
+passiarene
+passiarens
+passiarer
+passiv
+passiva
+passive
+passiven
+passivens
+passiver
+passivitet
+passiviteten
+passivitetens
+passivt
+passivum
+passivumer
+passivumet
+passivumets
+passkontroll
+passkontrollen
+passkontrollens
+passus
+passusen
+passusene
+passusens
+passuser
+pasta
+pastaen
+pastaene
+pastaens
+pastaer
+pastell
+pastellen
+pastellene
+pastellens
+pasteller
+pastellfarge
+pastellfargen
+pastellfargens
+pasteurisere
+pasteuriserer
+pasteurisert
+pasteuriserte
+pastill
+pastillen
+pastillene
+pastillens
+pastiller
+pastinakk
+pastinakken
+pastinakkene
+pastinakkens
+pastinakker
+pastisj
+pastisjen
+pastisjene
+pastisjens
+pastisjer
+pastor
+pastoral
+pastoralen
+pastoralene
+pastoralens
+pastoraler
+pastoren
+pastorene
+pastorens
+pastorer
+pat
+patent
+patenta
+patenten
+patentene
+patentens
+patenter
+patentere
+patenterer
+patentert
+patenterte
+pater
+paternitet
+paterniteten
+paternitetene
+paternitetens
+paterniteter
+paternoster
+paternostere
+paternosteren
+paternosterens
+paternosteres
+paternosterne
+paternosternes
+patetisk
+patina
+patinaen
+patinaens
+patolog
+patologen
+patologene
+patologens
+patologer
+patologi
+patologien
+patologiens
+patologisk
+patos
+patosen
+patosens
+patriark
+patriarkalsk
+patriarkat
+patriarkata
+patriarkatene
+patriarkater
+patriarkatet
+patriarkatets
+patriarken
+patriarkene
+patriarkens
+patriarker
+patriot
+patrioten
+patriotene
+patriotens
+patrioter
+patriotisk
+patriotiske
+patriotisme
+patriotismen
+patriotismens
+patrisier
+patrisiere
+patrisieren
+patrisierens
+patrisieres
+patrisierne
+patrisiernes
+patron
+patronen
+patronene
+patronens
+patroner
+patrulje
+patruljen
+patruljene
+patruljens
+patruljer
+patruljere
+patruljert
+patta
+patte
+patten
+pattens
+pattet
+pauke
+pauken
+paukens
+paulun
+pauluna
+paulunene
+pauluner
+paulunet
+paulunets
+pause
+pausen
+pausens
+pave
+paven
+pavens
+paviljong
+paviljongen
+paviljongene
+paviljongens
+paviljonger
+pax
+påbegynne
+påbegynnelsen
+påbegynnelsens
+påbegynner
+påbegynnes
+påbegynt
+påbegynte
+pøbel
+pøbelaktig
+pøbelen
+pøbelens
+påberope
+påberoper
+pøblene
+pøbler
+påbud
+påbudet
+påbudets
+påbudt
+påby
+påbygd
+påbygg
+påbygget
+påbyggets
+pådra
+pådrar
+pådratt
+pådrog
+pådytte
+peanøtt
+peanøtta
+peanøtten
+peanøttene
+peanøttens
+peanøtter
+pectoris
+pedagog
+pedagogen
+pedagogene
+pedagogens
+pedagoger
+pedagogikk
+pedagogikken
+pedagogikkens
+pedagogisk
+pedagogiske
+pedal
+pedalen
+pedalene
+pedalens
+pedaler
+pedant
+pedanten
+pedantene
+pedantens
+pedanter
+pedanteri
+pedanteria
+pedanteriene
+pedanterier
+pedanteriet
+pedanteriets
+pedantisk
+peddig
+peddigen
+peddigens
+pedell
+pedellen
+pedellene
+pedellens
+pedeller
+pedro
+pegasus
+pegasusen
+pegasusens
+peil
+peila
+peile
+peiler
+peilet
+peiling
+peilinga
+peilingen
+peilingene
+peilingens
+peilinger
+peilt
+peilte
+peip
+peis
+peisen
+peisene
+peisens
+peiser
+peisestova
+peisestove
+peisestua
+peisestue
+peisestuen
+peisestuens
+peisestuer
+peiskrok
+peiskroken
+peiskrokens
+pek
+peke
+pekepinn
+peker
+pekes
+peket
+peking
+pekingeser
+pekingeseren
+pekingeserens
+pekka
+pekt
+pekte
+pektin
+pektina
+pektinene
+pektiner
+pektinet
+pektinets
+pekuniær
+pekuniært
+pel
+pelagisk
+pelargonia
+pelargoniaen
+pelargoniaene
+pelargoniaens
+pelargoniaer
+pelargoniene
+pelargonier
+pelargonium
+pelargoniumen
+pelargoniumens
+pelikan
+pelikanen
+pelikanene
+pelikanens
+pelikaner
+pella
+pelle
+peller
+pellet
+pelotong
+pelotongen
+pelotongene
+pelotongens
+pelotonger
+pels
+pelsa
+pelsen
+pelsene
+pelsens
+pelser
+pelset
+pelsfrakk
+pelsfrakken
+pelsfrakkens
+pelsverk
+pelsverket
+pelsverkets
+pen
+åpen
+åpenbar
+åpenbare
+åpenbaring
+åpenbaringa
+åpenbaringen
+åpenbaringene
+åpenbaringens
+åpenbaringer
+åpenbart
+pence
+pendant
+pendanten
+pendantene
+pendantens
+pendanter
+pendel
+pendelen
+pendelens
+pendle
+pendler
+pendlere
+pendleren
+pendlerens
+pendleres
+pendlerne
+pendlernes
+pene
+åpene
+penere
+penest
+peneste
+penge
+pengehusholdning
+pengehusholdningen
+pengehusholdningens
+pengemangel
+pengemangelen
+pengemangelens
+pengen
+pengene
+pengens
+penger
+pengeseddel
+pengeseddelen
+pengeseddelens
+pengesedlene
+pengesedler
+pengesending
+pengesendingen
+pengesendingens
+pengeskap
+pengeskapet
+pengeskapets
+pengeskrin
+pengeskrinet
+pengeskrinets
+pengesum
+pengesummen
+pengesummene
+pengesummens
+pengesummer
+pengesystem
+pengesystema
+pengesystemene
+pengesystemer
+pengesystemet
+pengesystemets
+åpenhet
+åpenheten
+åpenhetens
+åpenhjertig
+penibel
+penicillin
+penicillinet
+penicillinets
+penis
+penisen
+penisene
+penisens
+peniser
+åpenlys
+åpenlyse
+åpenlyst
+åpenmunna
+penn
+pennal
+pennala
+pennalene
+pennaler
+pennalet
+pennalets
+penne
+pennen
+pennens
+pennestrøk
+pennevenn
+pennevennen
+pennevennene
+pennevennens
+pennevenner
+penny
+pennyen
+pennyene
+pennyens
+pennyer
+pens
+pensa
+pense
+pensel
+penselen
+penselens
+pensen
+pensens
+penset
+pensjon
+pensjonat
+pensjonatene
+pensjonater
+pensjonatet
+pensjonatets
+pensjonen
+pensjonene
+pensjonens
+pensjoner
+pensjonere
+pensjonering
+pensjoneringa
+pensjoneringen
+pensjoneringens
+pensjonert
+pensjonist
+pensjonisten
+pensjonistene
+pensjonistens
+pensjonister
+pensjonær
+pensjonæren
+pensjonærene
+pensjonærens
+pensjonærer
+pensjonsalder
+pensjonsalderen
+pensjonsalderens
+pensjonskasse
+pensjonskassen
+pensjonskassene
+pensjonskassens
+pensjonskasser
+pensle
+pensler
+pensum
+pensuma
+pensumet
+pensumets
+pent
+åpent
+peon
+peonen
+peonene
+peonens
+peoner
+pep
+pepet
+pepp
+peppen
+peppens
+pepper
+pepperen
+pepperens
+peppermø
+peppermøen
+peppermøens
+peppersvenn
+peppersvennen
+peppersvennens
+pepre
+pepret
+pepsi
+pepsin
+pepsina
+pepsinene
+pepsiner
+pepsinet
+pepsinets
+per
+perborat
+perborata
+perboratene
+perborater
+perboratet
+perboratets
+perfeksjon
+perfeksjonen
+perfeksjonene
+perfeksjonens
+perfeksjoner
+perfeksjonere
+perfeksjonerer
+perfeksjonert
+perfeksjonerte
+perfeksjonist
+perfeksjonisten
+perfeksjonistene
+perfeksjonistens
+perfeksjonister
+perfekt
+perfekte
+perfektum
+perfektumet
+perfektumets
+perfid
+perforere
+perforerer
+perforert
+perforerte
+pergament
+pergamenta
+pergamentene
+pergamenter
+pergamentet
+pergamentets
+perifer
+periferi
+periferien
+periferiene
+periferiens
+periferier
+periferisk
+perikum
+periode
+perioden
+periodene
+periodens
+perioder
+periodevis
+periodisere
+periodiserer
+periodisert
+periodiserte
+periodisitet
+periodisiteten
+periodisitetens
+periodisk
+periskop
+periskopa
+periskopene
+periskoper
+periskopet
+periskopets
+perkolator
+perkolatoren
+perkolatorene
+perkolatorens
+perkolatorer
+perkusjon
+perkusjonen
+perkusjonene
+perkusjonens
+perkusjoner
+perla
+perle
+perleband
+perlebånd
+perlemor
+perlemoren
+perlemorens
+perlen
+perlene
+perlens
+perler
+perlon
+perm
+permanent
+permanenten
+permanentens
+permen
+permene
+permens
+permer
+permisjon
+permisjonen
+permisjonene
+permisjonens
+permisjoner
+permittere
+permitterer
+permittert
+permitterte
+perpendikkel
+perpendikkelen
+perpendikkelens
+perpendiklene
+perpendikler
+perpendikulær
+perpendikulæren
+perpendikulærens
+perpetuum
+perpleks
+perrong
+perrongen
+perrongene
+perrongens
+perronger
+pers
+perser
+persere
+perseren
+perserens
+perseres
+perserne
+persernes
+persianer
+persianeren
+persianerens
+persienne
+persiennen
+persiennene
+persiennens
+persienner
+persiflasj
+persiflasje
+persilla
+persille
+persilledusk
+persilledusken
+persilleduskene
+persilleduskens
+persilledusker
+persillen
+persillene
+persillens
+persiller
+persipere
+persiperer
+persipert
+persiperte
+persisk
+persiske
+person
+personal
+personalbehovet
+personale
+personalet
+personalia
+personalsjef
+personalsjefen
+personalsjefene
+personalsjefens
+personalsjefer
+personasje
+personasjen
+personasjens
+personbil
+personbilen
+personbilene
+personbilens
+personbiler
+personekvivalent
+personekvivalenten
+personekvivalentens
+personell
+personellet
+personellets
+personen
+personene
+personenes
+personer
+personifikasjon
+personifikasjonen
+personifikasjonene
+personifikasjonens
+personifikasjoner
+personifisere
+personifiserer
+personifisert
+personifiserte
+personlig
+personlige
+personlighet
+personligheten
+personlighetene
+personlighetens
+personligheter
+persons
+personskade
+personskaden
+personskadene
+personskadens
+personskader
+persontrafikk
+persontrafikken
+persontrafikkens
+perspektiv
+perspektiva
+perspektivene
+perspektiver
+perspektivet
+perspektivets
+pertentlig
+peruaner
+peruanere
+peruaneren
+peruanerens
+peruaneres
+peruanerne
+peruanernes
+peruansk
+pervers
+perverse
+perversitet
+perversiteten
+perversitetens
+pervertere
+perverterer
+pervertert
+perverterte
+pese
+peser
+peseta
+pesetaen
+pesetaene
+pesetaens
+pesetaer
+pessar
+pessarene
+pessarer
+pessaret
+pessarets
+pessimisme
+pessimismen
+pessimismens
+pessimist
+pessimisten
+pessimistene
+pessimistens
+pessimister
+pessimistisk
+pessimistiske
+pest
+pesta
+peste
+pesticid
+pesticider
+pesticidet
+pesticidets
+pestilens
+pestilensen
+pestilensens
+åpet
+petimeter
+petimeteren
+petimeterens
+petimetra
+petimetrene
+petisjon
+petisjonen
+petisjonene
+petisjonens
+petisjoner
+petit
+petiten
+petitens
+petrokjemi
+petrokjemien
+petrokjemiens
+petrokjemisk
+petroleum
+petroleumen
+petroleumens
+petroleumsfag
+påfallende
+påfølgende
+påføre
+påføres
+påfriskende
+påført
+påfugl
+påfuglen
+påfuglene
+påfuglens
+påfugler
+påfunn
+påfunna
+påfunnene
+påfunnet
+påfunnets
+påfyll
+påfylla
+påfyllene
+påfyllet
+påfylling
+påfyllinga
+pågå
+pga
+pågang
+pågangen
+pågangsmot
+pågangsmotet
+pågangsmotets
+pågående
+pågikk
+pågjeldende
+pågår
+pågrep
+pågrepet
+pågripe
+pågripelse
+pågripelsen
+pågripelsens
+pågripes
+pågått
+påheng
+påhenga
+påhengene
+påhenger
+påhenget
+påhengets
+påhengsmotor
+påhengsmotoren
+påhengsmotorene
+påhengsmotorens
+påhengsmotorer
+phil
+philol
+philos
+philosophicum
+påhitt
+påhitta
+påhitten
+påhittene
+påhittet
+påhittets
+påholden
+påholdende
+påholdne
+phon
+påhør
+påhøre
+påhøret
+påhvile
+påhviler
+pianissimo
+pianist
+pianisten
+pianistene
+pianistens
+pianister
+pianistinne
+pianistinnen
+pianistinnens
+piano
+pianoa
+pianoene
+pianoer
+pianoet
+pianoets
+piassavakost
+piassavakosten
+piassavakostens
+pickles
+picklesen
+picklesens
+pickup
+pickupen
+pickupens
+pidestall
+pidestallen
+pidestallens
+pietet
+pieteten
+pietetens
+pietetsfull
+pietisme
+pietismen
+pietismens
+pietist
+pietisten
+pietistene
+pietistens
+pietister
+pietistisk
+pigg
+piggdekk
+piggdekkene
+piggdekket
+piggdekkets
+pigge
+piggen
+piggens
+pigget
+piggete
+piggsvin
+piggsvinet
+piggsvinets
+piggtråd
+piggtråden
+piggtrådens
+piggvar
+piggvaren
+piggvarens
+pigment
+pigmenta
+pigmentene
+pigmenter
+pigmentet
+pigmentets
+pika
+pikant
+pikante
+pikanteri
+pikanteria
+pikanteriene
+pikanterier
+pike
+piken
+pikene
+pikens
+piker
+pikes
+pikespeider
+pikespeidere
+pikespeideren
+pikespeiderens
+pikespeideres
+pikespeiderne
+pikespeidernes
+pikett
+piketten
+pikettene
+pikettens
+piketter
+pikk
+pikke
+pikkels
+pikken
+pikkens
+pikkolo
+pikkoloen
+pikkoloene
+pikkoloens
+pikkoloer
+pikkolofløyta
+pikkolofløyte
+pikkolofløyten
+pikkolofløytene
+pikkolofløytens
+pikkolofløyter
+piknik
+pikniken
+piknikene
+piknikens
+pikniker
+pil
+pila
+pilar
+pilaren
+pilarene
+pilarens
+pilarer
+pilaster
+pilasteren
+pilasterens
+pilastrene
+pile
+pilegrim
+pilegrimen
+pilegrimene
+pilegrimens
+pilegrimer
+pilen
+pilens
+pilk
+pilka
+pilken
+pilkene
+pilkens
+pilker
+pilket
+pilla
+pille
+pillen
+pillene
+pillens
+piller
+pillert
+pillerta
+pillerter
+pilot
+piloten
+pilotene
+pilotens
+piloter
+pils
+pilsen
+pilsenerøl
+pilsens
+pilsnerøl
+pilsnerølet
+pilsnerølets
+pilspiss
+pilspissen
+pilspissene
+pilspissens
+pilspisser
+pimiento
+pimientoen
+pimientoens
+pimpe
+pimpstein
+pimpsteinen
+pimpsteinens
+pin
+pinaktig
+pine
+pinefullt
+piner
+pingvin
+pingvinen
+pingvinene
+pingvinens
+pingviner
+pinje
+pinjen
+pinjens
+pinlig
+pinn
+pinnen
+pinnene
+pinnens
+pinner
+pinnsvin
+pinnsvina
+pinnsvinene
+pinnsvinet
+pinnsvinets
+pinol
+pinolen
+pinolene
+pinolens
+pinoler
+pinsa
+pinse
+pinseaften
+pinseaftenen
+pinseaftenens
+pinsedag
+pinsedagen
+pinsedagens
+pinsel
+pinselen
+pinselens
+pinsen
+pinsens
+pinsett
+pinsetten
+pinsettene
+pinsettens
+pinsetter
+pinslene
+pinsler
+pinte
+pioner
+pioneren
+pionerens
+pionerer
+pip
+pipa
+pipe
+pipen
+pipens
+piper
+pipette
+pipetten
+pipettens
+pipla
+piple
+pipler
+piplet
+pir
+pirandello
+pirat
+piraten
+piratene
+piratens
+pirater
+piren
+pirene
+pirens
+pirer
+pirk
+pirke
+pirkeri
+pirkeria
+pirkeriene
+pirkerier
+pirkeriet
+pirkeriets
+pirket
+pirkete
+pirquet
+pirqueten
+pirquetens
+pirquetprøve
+pirra
+pirre
+pirrelig
+pirret
+piruett
+piruetten
+piruettene
+piruettens
+piruetter
+pisk
+piska
+piske
+pisken
+piskens
+pisket
+pisse
+pissoar
+pissoara
+pissoarene
+pissoarer
+pissoaret
+pissoarets
+pist
+pisten
+pistens
+pistol
+pistolen
+pistolene
+pistolens
+pistoler
+pistong
+pistongen
+pistongene
+pistongens
+pistonger
+pistre
+pistret
+pistrete
+pitprops
+pittoresk
+pjalt
+pjalten
+pjaltene
+pjaltens
+pjalter
+pjaltet
+pjank
+pjanken
+pjankens
+pjanket
+pjankets
+pjaster
+pjasteren
+pjasterens
+pjatt
+pjatte
+pjattet
+pjattete
+pjekkert
+pjekkerten
+pjekkertene
+pjekkertens
+pjekkerter
+pjokk
+pjokken
+pjokkene
+pjokkens
+pjokker
+pjolter
+pjolteren
+pjolterens
+pjoltre
+pjoltrene
+pjoltrer
+pjusket
+pjuskete
+pjutre
+påk
+påkall
+påkalle
+påkallelsen
+påkallelsens
+påkaller
+påkalles
+påken
+påkene
+påkens
+påker
+påkjennelsen
+påkjennelsens
+påkjenning
+påkjenninga
+påkjenningen
+påkjenningene
+påkjenningens
+påkjenninger
+påkjære
+påkjærer
+påkjøring
+påkjøringa
+påkjøringen
+påkjøringene
+påkjøringens
+påkjøringer
+påkjørsel
+påkjørselen
+påkjørselens
+påkjørsla
+påkjørslene
+påkjørsler
+påkjært
+påkjørt
+påkjærte
+påklaga
+påklage
+påklager
+påklaget
+påkledd
+påkledde
+påkledning
+påkledningen
+påkledningens
+påkommende
+påkoste
+påkoster
+påkostet
+påkrevd
+påkrevet
+pl
+pæl
+pøl
+påla
+pæla
+pladask
+plaff
+plaffe
+plaffet
+plaga
+plagde
+plage
+plages
+plaget
+plagg
+plagga
+plaggene
+plagget
+plaggets
+plagiat
+plagiatene
+plagiater
+plagiatet
+plagiatets
+plagiere
+plagierer
+plagiert
+plagierte
+plagsom
+plagsomme
+plagsomt
+pålagt
+plakat
+plakaten
+plakatene
+plakatens
+plakater
+plakett
+plaketten
+plakettene
+plakettens
+plaketter
+plan
+planarbeid
+planarbeidet
+planarbeidets
+pålandsvind
+pålandsvinden
+pålandsvindens
+planen
+planene
+planens
+planer
+planere
+planeres
+planet
+planeten
+planetene
+planetens
+planeter
+planfast
+plank
+planke
+planken
+plankens
+planker
+plankomité
+plankomiteen
+plankomiteene
+plankomiteens
+plankomiteer
+planøkonomi
+planøkonomien
+planøkonomiens
+plankton
+planktonet
+planktonets
+planla
+planlagt
+planlagte
+planlegg
+planlegge
+planlegger
+planleggere
+planleggeren
+planleggerens
+planleggeres
+planleggerne
+planleggernes
+planlegges
+planlegging
+planlegginga
+planleggingen
+planleggingens
+planmessig
+planovergang
+planovergangen
+planovergangens
+plansje
+plansjen
+plansjene
+plansjens
+plansjer
+plant
+plantasje
+plantasjen
+plantasjens
+plante
+planteart
+plantearten
+planteartene
+planteartens
+plantearter
+plantene
+planter
+planteskole
+planteskolen
+planteskolene
+planteskolens
+planteskoler
+plantet
+plantevernmiddel
+plantevernmiddelet
+plantevernmiddelets
+plantevernmidla
+plantevernmidlene
+plantevernmidler
+plantevernmidlet
+plantevernmidlets
+planting
+plantinga
+plantning
+plantningen
+plantningens
+plapra
+plapre
+plaprer
+plapret
+plask
+plaske
+plasket
+plasma
+plasmaet
+plasmaets
+plass
+plassbehov
+plassbehovene
+plassbehovet
+plassbehovets
+plassbesparende
+plassen
+plassene
+plassens
+plasser
+plassere
+plasseres
+plassering
+plasseringa
+plasseringen
+plasseringene
+plasseringens
+plasseringer
+plassert
+plasserte
+plassforhold
+plassforholdene
+plasskrevende
+plassmangel
+plassmangelen
+plassmangelens
+plassproblem
+plassproblema
+plassproblemene
+plassproblemer
+plassproblemet
+plassproblemets
+plast
+plastbåt
+plastbåten
+plastbåtene
+plastbåtens
+plastbåter
+plastbøtta
+plastbøtte
+plastbøtten
+plastbøttene
+plastbøttens
+plastbøtter
+plasten
+plastene
+plastens
+plaster
+plasteret
+plasterets
+plastikk
+plastikken
+plastikkens
+plastilin
+plastilinet
+plastilinets
+plastisk
+plastpose
+plastposen
+plastposene
+plastposens
+plastposer
+plastprodukt
+plastproduktene
+plastprodukter
+plastproduktet
+plastproduktets
+plastra
+plastre
+plastrene
+plastret
+plastrets
+platå
+plata
+platåa
+plate
+plateinnspilling
+plateinnspillingen
+plateinnspillingene
+plateinnspillingens
+plateinnspillinger
+platen
+platene
+platåene
+platens
+plateprater
+plateprateren
+platepraterens
+plater
+platåer
+platespiller
+platespillere
+platespilleren
+platespillerens
+platespilleres
+platespillerne
+platespillernes
+platået
+platåets
+platina
+platinaet
+platinaets
+platoniker
+platonikere
+platonikeren
+platonikerens
+platonikeres
+platonikerne
+platonikernes
+platonisk
+platt
+plattform
+plattforma
+plattformen
+plattformene
+plattformens
+plattformer
+plattfot
+plattfoten
+plattfotens
+plausibel
+play
+påle
+pæle
+plebeier
+plebeiere
+plebeieren
+plebeierens
+plebeieres
+plebeierne
+plebeiernes
+plebeiisk
+pledd
+pledda
+pleddene
+pleddet
+pleddets
+pledere
+plederer
+pledert
+plederte
+pålegg
+pålegge
+pålegger
+pålegges
+pålegget
+pleia
+pleide
+pleie
+pleieheim
+pleieheimen
+pleieheimene
+pleieheimens
+pleieheimer
+pleiehjem
+pleiehjemma
+pleiehjemmene
+pleiehjemmet
+pleiehjemmets
+pleien
+pleiens
+pleier
+pleiere
+pleieren
+pleierene
+pleierens
+pleieres
+pleierne
+pleiernes
+pleiet
+plekter
+plekteret
+plekterets
+plektra
+plektre
+plektrene
+plektret
+plektrets
+plen
+pålen
+pælen
+pølen
+plena
+plenarforedrag
+plenarforedragene
+plenarforedraget
+plenarforedragets
+plenarmøta
+plenarmøte
+plenarmøtene
+plenarmøter
+plenarmøtet
+plenarmøtets
+pålene
+pølene
+plenen
+plenens
+plener
+pålens
+pælens
+pølens
+plent
+plenum
+plenumet
+plenumets
+plenumsmøte
+plenumsmøtet
+pleonasme
+pleonasmen
+pleonasmens
+pleonastisk
+påler
+pæler
+pøler
+plett
+pletten
+plettene
+plettens
+pletter
+plettere
+pletterer
+plettert
+pletterte
+plettet
+plettete
+pleuritt
+pleuritten
+pleurittene
+pleurittens
+pleuritter
+plevritt
+pløgd
+pløgde
+påligger
+plikt
+plikta
+plikte
+plikten
+pliktens
+plikter
+pliktfølelse
+pliktig
+pliktkjensle
+pliktoppfyllende
+pliktår
+plikttjeneste
+plikttro
+pling
+plinge
+plinget
+plire
+plirer
+plirt
+plirte
+plisseen
+plisseens
+plissere
+plisserer
+plissert
+plisserte
+pålitelig
+pålitelige
+plitt
+plog
+plogen
+plogene
+plogens
+ploger
+plogfår
+plogfåra
+plombe
+plomben
+plombens
+plombere
+plomberer
+plombering
+plomberinga
+plomberingen
+plomberingens
+plombert
+plomberte
+plomma
+plomme
+plommen
+plommens
+plotte
+plottebord
+plotter
+plottere
+plotteren
+plotterens
+plotteres
+plotterne
+plotternes
+plotting
+plottinga
+plottingen
+plottingens
+påløpe
+påløper
+påløpt
+pølsa
+pløse
+pølse
+pølsebod
+pølseboden
+pølsebodene
+pølsebodens
+pølseboder
+pløsen
+pølsen
+pølsene
+pølsens
+pølser
+pløset
+pløsete
+pløsne
+pælte
+pludder
+pludderet
+pludderets
+pludra
+pludre
+pludret
+plugg
+plugga
+pluggen
+pluggene
+pluggens
+plugger
+plugget
+plukk
+plukka
+plukke
+plukker
+plukket
+plukkfisk
+plukkfisken
+plukkfiskens
+plump
+plumpe
+plumpet
+plumpudding
+plumpuddingen
+plumpuddingens
+plunder
+plunderet
+plunderets
+plundersam
+plundra
+plundre
+plundret
+plundrets
+plural
+pluralis
+pluralisen
+pluralisens
+pluralisme
+pluralismen
+pluralismens
+pluralistisk
+pluralitet
+pluraliteten
+pluralitetens
+pluskvamperfektum
+pluskvamperfektumet
+pluskvamperfektumets
+pluss
+plusse
+plusset
+plutokrat
+plutokraten
+plutokratene
+plutokratens
+plutokrater
+plutokrati
+plutokratia
+plutokratiene
+plutokratier
+plutokratiet
+plutokratiets
+plutokratisk
+plutonium
+plutoniumet
+plutoniumets
+plutselig
+plutselige
+pløyd
+pløyde
+pålydende
+pålydendet
+pløye
+pløyer
+pløying
+pløyinga
+pløyingen
+pløyingens
+plyndra
+plyndre
+plyndret
+plyndring
+plyndringa
+plyndringen
+plyndringene
+plyndringens
+plyndringer
+plysj
+plysjen
+plysjene
+plysjens
+plysjer
+plystra
+plystre
+plystret
+pm
+påmelding
+påmeldinga
+påmeldingene
+påmeldinger
+påmeldt
+påmeldte
+påminnelsen
+påminnelsens
+påminning
+påminninga
+påmønstra
+påmønstre
+påmønstrer
+påmønstret
+påmønstring
+påmønstringa
+påmønstringen
+påmønstringene
+påmønstringens
+påmønstringer
+åpne
+åpner
+åpnes
+åpnet
+pneumatikk
+pneumatikken
+pneumatikkens
+pneumatisk
+åpning
+åpninga
+åpningen
+åpningene
+åpningens
+åpninger
+åpningstid
+åpningstida
+åpningstiden
+åpningstidene
+åpningstidens
+åpningstider
+pønsa
+pønse
+pønser
+pønset
+pønska
+pønske
+pønsker
+pønsket
+pocketbok
+pocketboka
+pocketboken
+pocketbokens
+poda
+podagra
+podagraen
+podagraens
+pode
+poden
+podens
+podet
+podia
+podiene
+podier
+podiet
+podiets
+podium
+poem
+poema
+poemene
+poemer
+poemet
+poemets
+poeng
+poenga
+poengene
+poenger
+poenget
+poengets
+poengsummen
+poengsummens
+poengtere
+poengtert
+poengterte
+poesi
+poesien
+poesiene
+poesiens
+poesier
+poet
+poeten
+poetene
+poetens
+poeter
+poetica
+poetisk
+poetiske
+pogrom
+pogromen
+pogromens
+pogromer
+pointer
+pointere
+pointeren
+pointerens
+pointeres
+pointerne
+pointernes
+pokal
+pokalen
+pokalene
+pokalens
+pokaler
+pokalløp
+poker
+pokeren
+pokerens
+pokermelding
+pokermeldingen
+pokermeldingens
+pokker
+pol
+polakk
+polakken
+polakkene
+polakkens
+polakker
+polarisasjon
+polarisasjonen
+polarisasjonene
+polarisasjonens
+polarisasjoner
+polarisere
+polariserer
+polarisering
+polariseringa
+polariseringen
+polariseringens
+polarisert
+polariserte
+polaritet
+polariteten
+polaritetens
+polarluft
+polarlufta
+polarluften
+polarluftens
+polarområde
+polarområdene
+polarområder
+polarområdet
+polarområdets
+polarsirkel
+polarsirkelen
+polarsirkelens
+polarstjerna
+pole
+polemiker
+polemikere
+polemikeren
+polemikerens
+polemikeres
+polemikerne
+polemikernes
+polemikk
+polemikken
+polemikkens
+polemisere
+polemiserer
+polemisert
+polemiserte
+polemisk
+polen
+polens
+polenta
+polentaen
+polentaens
+polentagryn
+poler
+polere
+polerer
+polering
+poleringa
+poleringen
+poleringens
+polert
+polerte
+polet
+policy
+policyen
+policyens
+poliklinikk
+poliklinikken
+poliklinikkene
+poliklinikkens
+poliklinikker
+polio
+polioen
+polioens
+polioepidemi
+polioepidemien
+polioepidemiene
+polioepidemiens
+polioepidemier
+polioinstitutt
+poliomyelitt
+poliomyelitten
+poliomyelittens
+polis
+polise
+polisen
+polisene
+polisens
+poliser
+polish
+polishen
+polishens
+polisk
+politbyrå
+politbyrået
+politbyråets
+politi
+politiadjutant
+politiadjutanten
+politiadjutantene
+politiadjutantens
+politiadjutanter
+politibetjent
+politibetjenten
+politibetjentene
+politibetjentens
+politibetjenter
+politibil
+politibilen
+politibilene
+politibilens
+politibiler
+politibyrå
+politiet
+politiets
+politifolk
+politifolka
+politifolkene
+politifullmektig
+politifullmektigen
+politifullmektigens
+politihund
+politihunden
+politihundens
+politiinspektør
+politiinspektøren
+politiinspektørene
+politiinspektørens
+politiinspektører
+politikammer
+politikammeret
+politikammerets
+politikamra
+politikamrene
+politiker
+politikere
+politikeren
+politikerens
+politikeres
+politikerne
+politikernes
+politikk
+politikken
+politikkens
+politikonstabel
+politikonstabelen
+politikonstabelens
+politikonstablene
+politikonstabler
+politilege
+politilegen
+politilegene
+politilegens
+politileger
+politimann
+politimannen
+politimannens
+politimenn
+politimennene
+politimennenes
+politimenns
+politimester
+politimesteren
+politimesterens
+politimestrene
+politipatrulje
+politipatruljen
+politipatruljene
+politipatruljens
+politipatruljer
+politisering
+politiseringa
+politiseringen
+politiseringens
+politisert
+politisk
+politiske
+politistasjon
+politistasjonen
+politistasjonene
+politistasjonens
+politistasjoner
+politistyrke
+politistyrken
+politistyrkene
+politistyrkens
+politistyrker
+politur
+polituren
+politurene
+politurens
+politurer
+polka
+polkaen
+polkaene
+polkaens
+polkaer
+poll
+pollen
+pollenet
+pollens
+pollett
+polletten
+pollettene
+pollettens
+polletter
+pollusjon
+pollusjonen
+pollusjonene
+pollusjonens
+pollusjoner
+polo
+poloen
+poloens
+polonese
+polonesen
+polonesens
+polonium
+poloniumet
+poloniumets
+polsk
+polske
+polstra
+polstre
+polstret
+polutsalg
+polutsalget
+polutsalgets
+polyester
+polyesteren
+polyesterens
+polygam
+polygami
+polygamiet
+polygamiets
+polyglott
+polyglotten
+polyglottene
+polyglottens
+polyglotter
+polygon
+polygonene
+polygoner
+polygonet
+polygonets
+polyhistor
+polyhistoren
+polyhistorene
+polyhistorens
+polyhistorer
+polynom
+polynoma
+polynomene
+polynomer
+polynomet
+polynomets
+polypp
+polyppen
+polyppene
+polyppens
+polypper
+polyteisme
+polyteismen
+polyteismens
+polyteist
+polyteisten
+polyteistene
+polyteistens
+polyteister
+polyteknisk
+pomade
+pomaden
+pomadens
+pomerans
+pomeransen
+pomeransens
+pomeranser
+pommes
+pomografi
+pomografien
+pomografiens
+pomolog
+pomologen
+pomologens
+pomologi
+pomologien
+pomologiens
+pomp
+pompadur
+pompaduren
+pompadurene
+pompadurens
+pompadurer
+pompeiansk
+pompet
+pompete
+pompong
+pompongen
+pompongene
+pompongens
+pomponger
+pompøs
+poncho
+ponchoen
+ponchoene
+ponchoens
+ponchoer
+pondus
+pondusen
+pondusens
+pongtong
+pongtongen
+pongtongene
+pongtongens
+pongtonger
+ponni
+ponnien
+ponniene
+ponniens
+ponnier
+pontifikalier
+pool
+poolen
+poolens
+pop
+popen
+popens
+popkorn
+popkornet
+popkornets
+popkunst
+poplene
+popler
+poplin
+poplinet
+poplinets
+poppel
+poppelen
+poppelens
+popularisere
+populariserer
+popularisert
+populariserte
+popularitet
+populariteten
+popularitetens
+populasjon
+populasjonen
+populasjonens
+populisme
+populismen
+populismens
+populistisk
+populær
+populære
+populært
+populærvitenskapelig
+populærvitenskapelige
+pora
+pore
+poren
+porene
+porens
+porer
+porfyr
+porfyren
+porfyrene
+porfyrens
+porfyrer
+porno
+pornoen
+pornoens
+pornografi
+pornografien
+pornografiens
+pornografisk
+pors
+porøs
+porselen
+porselena
+porselenene
+porselener
+porselenet
+porselenets
+porsen
+porsene
+porsens
+porser
+porsjon
+porsjonen
+porsjonene
+porsjonens
+porsjoner
+porsjonere
+port
+portal
+portalen
+portalene
+portalens
+portaler
+portechaise
+portechaisen
+portechaisens
+portefølje
+porteføljen
+porteføljens
+portemoneen
+portemoneens
+porten
+portene
+portens
+porter
+portier
+portiere
+portieren
+portierens
+portner
+portnere
+portneren
+portnerens
+portneres
+portnerne
+portnernes
+porto
+portoen
+portoene
+portoens
+portoer
+portrett
+portretta
+portrettene
+portretter
+portrettet
+portrettets
+portugiser
+portugisere
+portugiseren
+portugiserens
+portugiseres
+portugiserne
+portugisernes
+portugisisk
+portulakk
+portulakken
+portulakkene
+portulakkens
+portulakker
+pose
+posen
+posene
+posens
+poser
+posere
+poserer
+posert
+poserte
+posisjon
+posisjonen
+posisjonene
+posisjonens
+posisjoner
+positiv
+positive
+positivisme
+positivismen
+positivismens
+positivt
+positur
+posituren
+positurene
+positurens
+positurer
+posør
+posøren
+posørene
+posørens
+posører
+possement
+possementet
+possementets
+possessiv
+post
+postal
+postbud
+postbuda
+postbudene
+postbudet
+postbudets
+poste
+postei
+posteien
+posteiene
+posteiens
+posteier
+posten
+postene
+poster
+postere
+posterer
+postert
+posterte
+postgang
+postgangen
+postgangens
+postgirokonto
+postgymnasial
+posthum
+posthus
+posthuset
+posthusets
+postiljong
+postiljongen
+postiljongens
+postill
+postillen
+postillene
+postillens
+postiller
+postisj
+postisjen
+postisjene
+postisjens
+postisjer
+postkassa
+postkasse
+postkassen
+postkassene
+postkassens
+postkasser
+postkontor
+postkontorene
+postkontorer
+postkontoret
+postkontorets
+postlegge
+postlegger
+postludia
+postludiene
+postludier
+postludiet
+postludiets
+postludium
+postmester
+postmesteren
+postmesterens
+postmestrene
+postoperativ
+postordre
+postordren
+postordrens
+poståpner
+poståpneren
+poståpnerens
+postskriptum
+postskriptumene
+postskriptumer
+postskriptumet
+postskriptumets
+poststed
+poststedene
+poststeder
+poststedet
+poststedets
+postulat
+postulata
+postulatene
+postulater
+postulatet
+postulatets
+postverk
+postverket
+postverkets
+pot
+pota
+pote
+poten
+potens
+potensen
+potensene
+potensens
+potenser
+potensial
+potensiale
+potensialet
+potensiell
+potensielle
+potentat
+potentaten
+potentatens
+potet
+poteta
+poteten
+potetene
+potetens
+poteter
+potetskrell
+potetskrellet
+potetskrellets
+potetstappa
+potetstappe
+potetstappen
+potetstappens
+potpurri
+potpurria
+potpurrien
+potpurriene
+potpurriens
+potpurrier
+pott
+potte
+pottemaker
+pottemakere
+pottemakeren
+pottemakerens
+pottemakeres
+pottemakerne
+pottemakernes
+potten
+pottens
+potteplante
+potteplanten
+potteplantens
+påpakning
+påpakningen
+påpakningens
+påpasselig
+påpasselighet
+påpasseligheten
+påpasselighetens
+påpek
+påpeke
+påpeker
+påpekes
+påpekt
+påpekte
+påplussing
+påplussinga
+påplussingen
+påplussingens
+pæra
+pragmatiker
+pragmatikere
+pragmatikeren
+pragmatikerens
+pragmatikeres
+pragmatikerne
+pragmatikernes
+pragmatisk
+pragmatiske
+praia
+praie
+praiet
+prakk
+prakka
+prakke
+prakker
+prakkere
+prakkeren
+prakkerens
+prakkeres
+prakkerne
+prakkernes
+prakket
+praksis
+praksisen
+praksisene
+praksisens
+praksiser
+prakt
+prakta
+prakten
+praktens
+praktfull
+praktfulle
+praktfullt
+praktikant
+praktikanten
+praktikantene
+praktikantens
+praktikanter
+praktiker
+praktikeren
+praktikerens
+praktikum
+praktikumet
+praktikumets
+praktisere
+praktiserende
+praktiserer
+praktiseres
+praktisering
+praktiseringa
+praktiseringen
+praktiseringens
+praktisert
+praktiserte
+praktisk
+praktiske
+praktstykke
+praktstykker
+pral
+prale
+pralet
+pralte
+pram
+prammen
+prammene
+prammens
+prammer
+prange
+praseodym
+praseodymet
+praseodymets
+prat
+prata
+prate
+praten
+pratens
+prater
+pratet
+pratmaker
+pratmakere
+pratmakeren
+pratmakerens
+pratmakeres
+pratmakerne
+pratmakernes
+pratsom
+pre
+pære
+predator
+predatoren
+predatorene
+predatorens
+predatorer
+predestinasjon
+predestinasjonen
+predestinasjonene
+predestinasjonens
+predestinasjoner
+predestinere
+predestinerer
+predestinert
+predestinerte
+predikant
+predikanten
+predikantene
+predikantens
+predikanter
+predikat
+predikata
+predikatene
+predikater
+predikatet
+predikatets
+predikativ
+predikativa
+predikativene
+predikativer
+predikativet
+predikativets
+predisponert
+prefabrikasjon
+prefabrikasjonen
+prefabrikasjonene
+prefabrikasjonens
+prefabrikasjoner
+prefabrikkert
+prefekt
+prefekten
+prefektene
+prefektens
+prefekter
+preferanse
+preferansen
+preferansens
+preferere
+prefererer
+preferert
+prefererte
+prefiks
+prefiksa
+prefiksene
+prefikser
+prefikset
+prefiksets
+preg
+prege
+preger
+preges
+preget
+pregnans
+pregnansen
+pregnansens
+pregnant
+påregne
+påregnelig
+påregnes
+prehistorisk
+prejudikat
+prejudikata
+prejudikatene
+prejudikater
+prejudikatet
+prejudikatets
+prek
+preka
+preke
+preken
+prekenen
+prekenene
+prekenens
+prekener
+preker
+preket
+pårekne
+påreknelig
+prekær
+prekære
+prekært
+prektig
+prelat
+prelaten
+prelatene
+prelatens
+prelater
+preliminær
+preliminært
+prelle
+prellet
+preludere
+preluderer
+preludert
+preluderte
+preludia
+preludiene
+preludier
+preludiet
+preludiets
+preludium
+premie
+premien
+premiene
+premiens
+premier
+premiere
+premieren
+premierens
+premierer
+premiering
+premieringen
+premieringens
+premiert
+premierte
+premieutdeling
+premieutdelingen
+premieutdelingens
+premievarsel
+premievarselet
+premievarselets
+premievarslene
+premievarsler
+premievarslet
+premievarslets
+premiss
+premisse
+premissen
+premissene
+premissens
+premisser
+pren
+pæren
+pærene
+prenen
+prenens
+pærens
+prent
+prente
+prentet
+prenting
+prentinga
+prentingen
+prentingens
+prep
+preparant
+preparanten
+preparantene
+preparantens
+preparanter
+preparantvirksomhet
+preparantvirksomheten
+preparantvirksomhetens
+preparat
+preparatene
+preparater
+preparatet
+preparatets
+preparere
+preparerer
+preparert
+preparerte
+preposisjon
+preposisjonen
+preposisjonene
+preposisjonens
+preposisjoner
+preposisjonsuttrykk
+pærer
+prerogativ
+prerogativa
+prerogativene
+prerogativer
+prerogativet
+prerogativets
+presang
+presangen
+presangene
+presangens
+presanger
+presbyter
+presbytere
+presbyteren
+presbyterens
+presbyteres
+presbyteriansk
+presbyterne
+presbyternes
+presedens
+presedensen
+presedensene
+presedensens
+presedenser
+presenil
+presenning
+presenningen
+presenningene
+presenningens
+presenninger
+presens
+present
+presentabel
+presentable
+presentasjon
+presentasjonen
+presentasjonene
+presentasjonens
+presentasjoner
+presentasjonsform
+presentasjonsforma
+presentasjonsformen
+presentasjonsformene
+presentasjonsformens
+presentasjonsformer
+presente
+presenter
+presentere
+presenterer
+presenteres
+presentert
+presenterte
+preservere
+preserverer
+preservert
+preserverte
+preses
+presesen
+presesens
+preseterist
+preseteristen
+preseteristene
+preseteristens
+preseterister
+president
+presidenten
+presidentens
+presidentskap
+presidentskapet
+presidentskapets
+presidere
+presiderer
+presidert
+presiderte
+presidiet
+presidiets
+presidium
+presis
+presise
+presisere
+presiserer
+presiseres
+presisering
+presiseringa
+presiseringen
+presiseringens
+presiseringer
+presisert
+presiserte
+presisjon
+presisjonen
+presisjonene
+presisjonens
+presisjoner
+presist
+preskribere
+preskriberer
+preskribert
+preskriberte
+preskripsjon
+preskripsjonen
+preskripsjonene
+preskripsjonens
+preskripsjoner
+press
+pressa
+presse
+pressebyrå
+pressebyrået
+pressebyråets
+pressede
+pressefolk
+pressefolkene
+pressefrihet
+pressefriheten
+pressefrihetens
+pressekonferanse
+pressekonferansen
+pressekonferansens
+pressekontor
+pressekontorene
+pressekontorer
+pressekontoret
+pressekontorets
+pressemann
+pressemannen
+pressemannens
+pressemelding
+pressemeldingen
+pressemeldingene
+pressemeldingens
+pressemeldinger
+pressemenn
+pressemennene
+pressemennenes
+pressemenns
+pressen
+pressens
+presser
+presserende
+presses
+presset
+pressetalsmann
+pressetalsmannen
+pressetalsmannens
+pressetalsmenn
+pressetalsmennene
+pressetalsmennenes
+pressetalsmenns
+pressetjeneste
+pressetjenesten
+pressetjenestens
+presseverktøy
+presseverktøyet
+presseverktøyets
+pressgjær
+pressgjæren
+pressgjærens
+pressgruppa
+pressgruppe
+pressgruppen
+pressgruppene
+pressgruppens
+pressgrupper
+pressluft
+presslufta
+pressluften
+pressluftens
+pressområde
+pressområdene
+pressområdet
+prest
+prestasjon
+prestasjonen
+prestasjonene
+prestasjonens
+prestasjoner
+prestegard
+prestegarden
+prestegardens
+prestegjeld
+prestegjeldet
+prestegjeldets
+prestegård
+prestegården
+prestegårdens
+prestegårder
+prestekrage
+prestekragen
+prestekragens
+presten
+prestene
+prestens
+prester
+prestere
+presterer
+prestert
+presterte
+presteskap
+presteskapet
+presteskapets
+prestinne
+prestinnen
+prestinnene
+prestinnens
+prestinner
+prestisje
+prestisjen
+prestisjens
+presumptiv
+presumptivt
+pretendent
+pretendenten
+pretendentens
+pretendere
+pretenderer
+pretendert
+pretenderte
+pretensiøs
+pretensiøse
+pretensiøst
+pretensjon
+pretensjonen
+pretensjonene
+pretensjonens
+pretensjoner
+preterita
+preteritaene
+preteritum
+preteritumene
+preteritumet
+preteritumets
+preteritumsendinga
+pretta
+prette
+prevensjon
+prevensjonen
+prevensjonene
+prevensjonens
+prevensjoner
+preventiv
+preventive
+preventivet
+preventivt
+prikk
+prikken
+prikkene
+prikkens
+prikker
+prikket
+prikkfritt
+prikla
+prikle
+prikler
+priklet
+prim
+prima
+primadonna
+primadonnaen
+primadonnaene
+primadonnaens
+primadonnaer
+primas
+primasen
+primasene
+primasens
+primaser
+primat
+primaten
+primatene
+primatens
+primater
+primen
+primens
+primer
+primere
+primeren
+primerens
+primeres
+primerne
+primernes
+primitiv
+primitive
+primitivt
+primo
+primær
+primære
+primærlager
+primærlageret
+primærlagerets
+primærlagre
+primærlagrene
+primært
+primærvalg
+primærvalgene
+primærvalget
+primærvalgets
+primtal
+primtall
+primula
+primulaen
+primulaene
+primulaens
+primulaer
+primus
+primusen
+primusene
+primusens
+primuser
+prins
+prinsen
+prinsene
+prinsens
+prinser
+prinsessa
+prinsesse
+prinsessen
+prinsessens
+prinsipal
+prinsipalen
+prinsipalene
+prinsipalens
+prinsipaler
+prinsipiell
+prinsipielle
+prinsipielt
+prinsipp
+prinsippa
+prinsippene
+prinsipper
+prinsippet
+prinsippvedtak
+priori
+prioriter
+prioritere
+prioriterer
+prioriteres
+prioritering
+prioriteringa
+prioriteringen
+prioriteringene
+prioriteringens
+prioriteringer
+prioritert
+prioriterte
+prioritet
+prioriteten
+prioritetene
+prioritetens
+prioriteter
+prioritetslån
+prioritetslånet
+prioritetslånets
+pripne
+prippen
+pris
+prisa
+prisdirektør
+prisdirektøren
+prisdirektørens
+prise
+prisen
+prisene
+prisens
+priser
+priset
+prisforhøyelse
+prisforhøyelsen
+prisforhøyelsene
+prisforhøyelsens
+prisforhøyelser
+prisgitt
+prisindeks
+prisindeksen
+prisindeksens
+prisklasse
+prisklassen
+prisklassens
+prisøkning
+prisøkningen
+prisøkningens
+priskontroll
+priskontrollen
+priskontrollens
+priskurant
+priskuranten
+priskurantens
+prislapp
+prislappen
+prislappene
+prislappens
+prislapper
+prislista
+prisliste
+prislisten
+prislistene
+prislistens
+prislister
+prisme
+prismessig
+prismet
+prisnivå
+prisnivået
+prisnivåets
+prisoppgang
+prisoppgangen
+prisoppgangens
+prisoppgave
+prisstigning
+prisstigninga
+prisstigningen
+prisstigningens
+prisutvikling
+prisutviklinga
+prisutviklingen
+prisutviklingens
+prisverdig
+privat
+privatbank
+private
+privatist
+privatisten
+privatistene
+privatistens
+privatister
+privatliv
+privatlivet
+privatlivets
+privatmann
+privatmannen
+privatmannens
+privatmenn
+privatmennene
+privatmennenes
+privatmenns
+privatperson
+privatpersonen
+privatpersonene
+privatpersonens
+privatpersoner
+privatpraksis
+privatpraksisen
+privatpraksisene
+privatpraksisens
+privatpraksiser
+privilegere
+privilegerer
+privilegert
+privilegerte
+privilegia
+privilegiene
+privilegier
+privilegiet
+privilegiets
+privilegium
+pro
+probat
+probere
+proberer
+probert
+proberte
+problem
+problematikk
+problematikken
+problematikkens
+problematisk
+problematiske
+problemene
+problemer
+problemers
+problemet
+problemets
+problemkompleks
+problemkompleksene
+problemkomplekser
+problemkomplekset
+problemkompleksets
+problemstilling
+problemstillingen
+problemstillingene
+problemstillingens
+problemstillinger
+producer
+produceren
+producerens
+produksjon
+produksjonen
+produksjonens
+produksjoner
+produksjonskapasitet
+produksjonskapasiteten
+produksjonskapasitetens
+produksjonsland
+produksjonslandet
+produksjonslandets
+produksjonsutstyr
+produksjonsutstyret
+produksjonsutstyrets
+produksonsleder
+produksonsledere
+produksonslederen
+produksonslederens
+produksonslederes
+produksonslederne
+produksonsledernes
+produkt
+produkta
+produktene
+produkter
+produktet
+produktets
+produktiv
+produktive
+produktivitet
+produktiviteten
+produktivitetens
+produktivt
+produktspekter
+produktspekteret
+produktspekterets
+produktspektra
+produktspektre
+produktspektrene
+produktspektret
+produktspektrets
+produktutvikling
+produktutviklingen
+produktutviklingens
+produsent
+produsenten
+produsentene
+produsentens
+produsenter
+produsere
+produserer
+produseres
+produsert
+produserte
+profan
+profanere
+profanerer
+profanert
+profanerte
+profesjon
+profesjonell
+profesjonelle
+profesjonelt
+profesjonen
+profesjonene
+profesjonens
+profesjoner
+profesjonist
+profesjonisten
+profesjonistene
+profesjonistens
+profesjonister
+professor
+professorat
+professoratene
+professorater
+professoratet
+professoratets
+professoren
+professorene
+professorens
+professorer
+profet
+profeten
+profetene
+profetens
+profeter
+profetere
+profeti
+profetien
+profetiene
+profetiens
+profetier
+proff
+proffe
+proffen
+proffens
+proffer
+profil
+profila
+profilen
+profilene
+profilens
+profiler
+profilere
+profilerer
+profilert
+profilerte
+profilet
+profilets
+profitabel
+profitabelt
+profitable
+profitør
+profitøren
+profitørene
+profitørens
+profitører
+profitt
+profitten
+profittene
+profittens
+profitter
+profittere
+profitterer
+proforma
+prognose
+prognosen
+prognosene
+prognosens
+prognoser
+prognostisere
+prognostiserer
+prognostisert
+prognostiserte
+program
+programdel
+programdelen
+programdelene
+programdelens
+programdeler
+programfeil
+programfeilen
+programfeilene
+programfeilens
+programfeste
+programfestet
+programkode
+programkoden
+programkodens
+programkomité
+programkomiteen
+programkomiteene
+programkomiteens
+programkomiteer
+programleder
+programledere
+programlederen
+programlederens
+programlederes
+programlederne
+programledernes
+programma
+programmene
+programmer
+programmere
+programmerer
+programmerere
+programmereren
+programmererens
+programmereres
+programmererne
+programmerernes
+programmering
+programmeringa
+programmeringen
+programmeringens
+programmeringsfeil
+programmeringsfeilen
+programmeringsfeilene
+programmeringsfeilens
+programmeringstekst
+programmeringsteksten
+programmeringstekstene
+programmeringstekstens
+programmeringstekster
+programmessig
+programmet
+programmets
+programpakke
+programpakken
+programpakkene
+programpakkens
+programpakker
+programpost
+programposten
+programpostene
+programpostens
+programposter
+programprodukt
+programproduktene
+programprodukter
+programproduktet
+programproduktets
+programredaktør
+programsekretær
+programsekretæren
+programsekretærens
+programstruktur
+programstrukturen
+programstrukturene
+programstrukturens
+programstrukturer
+programsystem
+programsystema
+programsystemene
+programsystemer
+programsystemet
+programsystemets
+programutkast
+programutkastet
+programutkastets
+programvara
+programvare
+programvarekatalog
+programvarekatalogen
+programvarekatalogene
+programvarekatalogens
+programvarekataloger
+programvaren
+programvarene
+programvarer
+programvares
+programvaretilbud
+programvaretilbudet
+programvaretilbudets
+programverktøy
+programverktøyet
+programverktøyets
+programvirksomhet
+programvirksomheten
+programvirksomhetens
+progresjon
+progresjonen
+progresjonene
+progresjonens
+progresjoner
+progressiv
+progressive
+projeksjon
+projeksjonen
+projeksjonene
+projeksjonens
+projeksjoner
+projektor
+projektoren
+projektorens
+projisere
+projiserer
+projisert
+projiserte
+proklamasjon
+proklamasjonen
+proklamasjonene
+proklamasjonens
+proklamasjoner
+proklamere
+proklamert
+proklamerte
+proklitisk
+prokura
+prokuraen
+prokuraens
+prokuraet
+prokuraets
+prokurator
+prokuratoren
+prokuratorens
+prokurist
+prokuristen
+prokuristens
+proletar
+proletaren
+proletarene
+proletarens
+proletarer
+proletariat
+proletariatet
+proletariatets
+prolog
+prologen
+prologene
+prologens
+prologer
+prolongasjon
+prolongasjonen
+prolongasjonens
+prolongere
+prolongert
+prolongerte
+promemoria
+promemoriaen
+promemoriaens
+promenade
+promenaden
+promenadens
+promenere
+promenerer
+promenert
+promenerte
+promille
+promillekjører
+promillekjørere
+promillekjøreren
+promillekjørerens
+promillekjøreres
+promillekjørerne
+promillekjørernes
+promillekjøring
+promillekjøringa
+promillekjøringen
+promillekjøringens
+promillen
+promillene
+promillens
+promiller
+prominent
+prominente
+promosjon
+promosjonen
+promosjonene
+promosjonens
+promosjoner
+promovere
+promovert
+promoverte
+prompt
+prompte
+pron
+pronomen
+pronomena
+pronomenene
+pronomener
+pronomenet
+pronomenets
+pronominal
+pronominalt
+pronominell
+pronominelt
+propaganda
+propagandaen
+propagandaens
+propagandere
+propaganderer
+propagandert
+propaganderte
+propagandistisk
+propan
+propanen
+propanens
+propanet
+propanets
+propangass
+propangassen
+propangassens
+propedeutisk
+propedeutiske
+propedevtisk
+propedevtiske
+propell
+propellen
+propellene
+propellens
+propeller
+proper
+proporsjon
+proporsjonal
+proporsjonale
+proporsjonalt
+proporsjonen
+proporsjonene
+proporsjonens
+proporsjoner
+proposisjon
+proposisjonen
+proposisjonene
+proposisjonens
+proposisjoner
+propp
+proppa
+proppen
+proppene
+proppens
+propper
+proppet
+propre
+propriene
+proprier
+propriet
+proprietær
+proprietæren
+proprietærene
+proprietærens
+proprietærer
+propriets
+proprium
+props
+propsen
+propsens
+prosa
+prosaen
+prosaens
+prosaisk
+prosaist
+prosaisten
+prosaistene
+prosaistens
+prosaister
+prosedere
+prosedert
+prosederte
+prosedyre
+prosedyren
+prosedyrene
+prosedyrens
+prosedyrer
+prosektor
+prosektoren
+prosektorene
+prosektorens
+prosektorer
+proselytt
+proselytten
+proselyttene
+proselyttens
+proselytter
+prosent
+prosentandel
+prosentandelen
+prosentandelens
+prosenten
+prosentens
+prosenter
+prosents
+prosentvis
+prosesjon
+prosesjonen
+prosesjonene
+prosesjonens
+prosesjoner
+prosess
+prosessen
+prosessene
+prosessens
+prosesser
+prosessfullmektig
+prosessfullmektigen
+prosessfullmektigens
+prosessor
+prosessoren
+prosessorene
+prosessorens
+prosessorer
+prosessuell
+prosessuelle
+prosessuelt
+prosit
+prositt
+prosjekt
+prosjekta
+prosjektansvarlige
+prosjektene
+prosjekter
+prosjektere
+prosjektering
+prosjekteringa
+prosjekteringen
+prosjekteringens
+prosjektert
+prosjekterte
+prosjektet
+prosjektets
+prosjektidé
+prosjektideen
+prosjektideene
+prosjektideens
+prosjektideer
+prosjektil
+prosjektila
+prosjektilene
+prosjektiler
+prosjektilet
+prosjektilets
+prosjektør
+prosjektøren
+prosjektørene
+prosjektørens
+prosjektører
+proskribere
+proskribert
+proskriberte
+proskripsjon
+proskripsjonen
+proskripsjonene
+proskripsjonens
+proskripsjoner
+prospekt
+prospektene
+prospekter
+prospektet
+prospektets
+prospektkort
+prost
+prostata
+prostataen
+prostataene
+prostataens
+prostataer
+prosten
+prostene
+prostens
+proster
+prosti
+prostia
+prostiene
+prostier
+prostiet
+prostiets
+prostinna
+prostinne
+prostinnen
+prostinnene
+prostinnens
+prostinner
+prostituere
+prostituerer
+prostituert
+prostituerte
+prostitusjon
+prostitusjonen
+prostitusjonene
+prostitusjonens
+prostitusjoner
+protactinium
+protactiniumet
+protactiniumets
+protein
+proteina
+proteinene
+proteiner
+proteinet
+proteinets
+proteksjon
+proteksjonen
+proteksjonene
+proteksjonens
+proteksjoner
+proteksjonisme
+proteksjonismen
+proteksjonismens
+proteksjonist
+proteksjonisten
+proteksjonistene
+proteksjonistens
+proteksjonister
+proteksjonistisk
+protektorat
+protektorata
+protektoratene
+protektorater
+protektoratet
+protektoratets
+protese
+protesen
+protesene
+protesens
+proteser
+protesjeen
+protesjeens
+protesjere
+protesjerer
+protesjert
+protesjerte
+protest
+protestant
+protestanten
+protestantene
+protestantens
+protestanter
+protestantisk
+protestantiske
+protestantisme
+protestantismen
+protestantismens
+protesten
+protestene
+protestens
+protester
+protestere
+protesterer
+protesteres
+protestert
+protesterte
+protokoll
+protokollen
+protokollene
+protokollens
+protokoller
+protokollere
+protokollerer
+protokollert
+protokollerte
+proton
+protona
+protonene
+protoner
+protonet
+protonets
+protoplasma
+protoplasmaet
+protoplasmaets
+prototype
+prototypen
+prototypene
+prototypens
+prototyper
+prov
+prove
+provet
+proviant
+provianten
+proviantens
+provianter
+proviantere
+provianterer
+proviantert
+provianterte
+provins
+provinsen
+provinsene
+provinsens
+provinser
+provinsiell
+provisjon
+provisjonen
+provisjonene
+provisjonens
+provisjoner
+provisor
+provisoren
+provisorene
+provisorens
+provisorer
+provisorisk
+provisoriske
+provokasjon
+provokasjonen
+provokasjonene
+provokasjonens
+provokasjoner
+provokatorisk
+provokatør
+provokatøren
+provokatørene
+provokatørens
+provokatører
+provosere
+provoserende
+provoserer
+provosert
+provoserte
+prp
+prærie
+prærien
+præriens
+prås
+pråsen
+pråsene
+pråsens
+pråser
+prunk
+prunken
+prunkens
+prust
+pruste
+prut
+pruta
+prute
+prutet
+prutingsmonn
+prutingsmonnet
+prutingsmonnets
+prutningsmonn
+prutningsmonnet
+prutningsmonnets
+prøv
+prøvd
+prøvde
+prøve
+prøvedrift
+prøvekjøre
+prøvekjører
+prøvekjørt
+prøvekjørte
+prøvelse
+prøvelsen
+prøvelsene
+prøvelsens
+prøvelser
+prøven
+prøvene
+prøveordning
+prøveordningen
+prøveordningene
+prøveordningens
+prøveordninger
+prøvepakke
+prøvepakken
+prøvepakkene
+prøvepakkens
+prøvepakker
+prøveperiode
+prøveperioden
+prøveperiodens
+prøver
+prøverom
+prøverommene
+prøverommet
+prøverommets
+prøvet
+prøvetid
+prøvetida
+prøvetiden
+prøvetidens
+prøvetur
+prøveturen
+prøveturene
+prøveturens
+prøveturer
+prøving
+pryd
+pryda
+pryde
+prydelig
+pryden
+prydens
+prydet
+pryl
+pryle
+prylet
+prylt
+prylte
+prøysser
+prøyssere
+prøysseren
+prøysserens
+prøysseres
+prøysserne
+prøyssernes
+prøyssisk
+pøs
+påsatt
+påsatte
+påse
+påseilt
+pøsen
+pøsens
+pseudonym
+pseudonyma
+pseudonymene
+pseudonymer
+pseudonymet
+pseudonymets
+påska
+påske
+påskeaften
+påskeaftenen
+påskeaftenens
+påskedag
+påskedagen
+påskedagens
+påskeegg
+påskeegget
+påskeeggets
+påskeferie
+påskeferien
+påskeferiens
+påskefjell
+påskefjellet
+påskefjellets
+påskehelg
+påskehelga
+påskehelgen
+påskehelgens
+påsken
+påskens
+påsketrafikk
+påsketrafikken
+påsketrafikkens
+påsketur
+påsketuren
+påsketurene
+påsketurens
+påsketurer
+påskeuka
+påskeuke
+påskeuken
+påskeukens
+påskjønne
+påskjønnelse
+påskjønnelsen
+påskjønnelsens
+påskjønner
+påskott
+påskotta
+påskottene
+påskottet
+påskottets
+påskrift
+påskrifta
+påskriften
+påskriftene
+påskriftens
+påskrifter
+påskrudd
+påskudd
+påskuddene
+påskuddet
+påskynde
+påskyndet
+påskyndt
+påskyndte
+påsmurt
+pst
+påstå
+pøst
+påstand
+påstanden
+påstandene
+påstander
+pøste
+påståelig
+påståes
+påstiging
+påstiginga
+påstigning
+påstigninga
+påstigningen
+påstod
+påstår
+påstås
+påstått
+påståtte
+psychol
+påsydd
+psyk
+psyke
+psykedelisk
+psyken
+psykens
+psykiater
+psykiatere
+psykiateren
+psykiaterens
+psykiateres
+psykiaterne
+psykiaternes
+psykiatri
+psykiatrien
+psykiatriens
+psykiatrisk
+psykiatriske
+psykisk
+psykiske
+psykoanalyse
+psykoanalysen
+psykoanalysens
+psykoanalytiker
+psykoanalytikere
+psykoanalytikeren
+psykoanalytikerens
+psykoanalytikeres
+psykoanalytikerne
+psykoanalytikernes
+psykoanalytiske
+psykolog
+psykologen
+psykologene
+psykologens
+psykologer
+psykologi
+psykologien
+psykologiens
+psykologisk
+psykologiske
+psykopat
+psykopaten
+psykopatene
+psykopatens
+psykopater
+psykopati
+psykopatien
+psykopatiens
+psykopatisk
+psykose
+psykosen
+psykosens
+psykosomatisk
+påsyn
+påsynet
+påsynets
+påta
+påtakelig
+påtale
+påtalemyndighet
+påtalemyndigheten
+påtalemyndighetene
+påtalemyndighetens
+påtalemyndigheter
+påtalen
+påtalende
+påtaler
+påtales
+påtaleunnlatelse
+påtaleunnlatelsen
+påtaleunnlatelsens
+påtalt
+påtalte
+påtar
+påtatt
+påtegne
+påtegning
+påtegninga
+påtegningen
+påtegningene
+påtegningens
+påtegninger
+påtenkt
+påtenkte
+påtok
+påtår
+påtåren
+påtrengende
+påtårens
+påtroppende
+påtrykk
+påtrykket
+påtrykkets
+påtvinge
+påtvinger
+pub
+puben
+pubene
+pubens
+puber
+pubertet
+puberteten
+pubertetens
+pubertetsalder
+pubertetsalderen
+pubertetsalderens
+publicus
+publikasjon
+publikasjonen
+publikasjonene
+publikasjonens
+publikasjoner
+publikasjonsvirksomhet
+publikasjonsvirksomheten
+publikasjonsvirksomhetens
+publikum
+publikums
+publikumsappell
+publikumsappellen
+publikumsappellens
+publikumsinteresse
+publikumsinteressen
+publikumsinteressens
+publikumsoppslutning
+publikumsoppslutningen
+publikumsoppslutningens
+publikumstall
+publikumstallene
+publikumstallet
+publikumstallets
+publikumstilslutning
+publikumstilslutningen
+publikumstilslutningens
+publisere
+publisert
+publiserte
+publisist
+publisisten
+publisistens
+publisitet
+publisiteten
+publisitetens
+puddel
+puddelen
+puddelens
+pudder
+pudderet
+pudderets
+pudding
+puddingen
+puddingene
+puddingens
+puddinger
+pudlejern
+pudlejernet
+pudlejernets
+pudlene
+pudleomn
+pudleomnen
+pudleomnens
+pudler
+pudra
+pudre
+pudret
+pudrett
+pudretten
+pudrettene
+pudrettens
+pudretter
+pueril
+puerto
+puertoricaner
+puertoricanere
+puertoricaneren
+puertoricanerens
+puertoricaneres
+puertoricanerne
+puertoricanernes
+puertoricansk
+puff
+puffa
+puffe
+puffen
+puffens
+puffet
+pugg
+pugga
+pugge
+pugget
+pugilist
+pugilisten
+pugilistene
+pugilistens
+pugilister
+pukk
+pukka
+pukke
+pukkel
+pukkelen
+pukkelens
+pukkelrygga
+pukken
+pukkens
+pukket
+pukkstein
+pukksteinen
+pukksteinens
+puklene
+pukler
+pulje
+puljen
+puljene
+puljens
+puljer
+pulk
+pulken
+pulkene
+pulkens
+pulker
+pull
+pullen
+pullene
+pullens
+puller
+pullert
+pullerten
+pullertens
+pullover
+pulloveren
+pulloverens
+puls
+pulsen
+pulsene
+pulsens
+pulser
+pulsere
+pulserende
+pulserer
+pulsert
+pulserte
+pulsåra
+pulsåre
+pulsåren
+pulsårene
+pulsårens
+pulsårer
+pulsslag
+pulsslaget
+pulsslagets
+pulsvott
+pulsvotten
+pulsvottens
+pult
+pulten
+pultene
+pultens
+pulter
+pulterkammer
+pulterkammeret
+pulterkammerets
+pultost
+pultosten
+pultostens
+pulver
+pulveret
+pulverets
+pulverisere
+pulveriserer
+pulverisert
+pulveriserte
+pumpe
+pumpen
+pumpens
+pumper
+pumpes
+pumpet
+pumps
+pumpsen
+pumpsene
+pumpsens
+puncha
+punche
+punchedama
+punchedame
+punchedamen
+punchedamens
+punchedamer
+punchemaskin
+punchemaskinen
+punchemaskinens
+puncheoperatør
+puncheoperatøren
+puncheoperatørens
+punchet
+punching
+punchinga
+punchingen
+punchingens
+pund
+punda
+pundene
+pundet
+pundets
+pung
+punge
+pungen
+pungene
+pungens
+punger
+punkt
+punkta
+punktene
+punkter
+punktere
+punktert
+punkterte
+punktet
+punktets
+punktlig
+punktskrift
+punktskriften
+punktskriftens
+punktum
+punktuma
+punktumene
+punktumer
+punktumet
+punktumets
+punktvise
+punsj
+punsjebolle
+punsjen
+punsjene
+punsjens
+punsjer
+puntlår
+puntlær
+puntlæret
+puntlærets
+pupill
+pupillen
+pupillene
+pupillens
+pupiller
+pupp
+puppa
+puppe
+puppen
+puppene
+puppens
+pupper
+pur
+pure
+purisme
+purismen
+purismens
+purist
+puristen
+puristene
+puristens
+purister
+puristisk
+puritaner
+puritanere
+puritaneren
+puritanerens
+puritaneres
+puritanerne
+puritanernes
+puritanisme
+puritanismen
+puritanismens
+puritansk
+purk
+purka
+purken
+purkene
+purkens
+purker
+purpur
+purpuret
+purpurets
+purra
+purre
+purren
+purrens
+purret
+purser
+pursere
+purseren
+purserens
+purseres
+purserne
+pursernes
+purt
+pus
+puselanke
+puselanken
+puselankens
+pusen
+pusens
+push
+pushe
+pusle
+puslet
+puslete
+pusling
+puslinga
+puslingen
+puslingene
+puslingens
+puslinger
+puss
+pussa
+pusse
+pussemaskin
+pussemaskinen
+pussemaskinene
+pussemaskinens
+pussemaskiner
+pussen
+pussens
+pusses
+pusset
+pussig
+pussing
+pussinga
+pussingen
+pussingens
+pust
+puste
+pusten
+pustens
+puster
+pusterom
+pusterommene
+pusterommet
+pusterommets
+pustet
+puta
+pute
+puten
+putene
+putens
+puter
+putevar
+putevaret
+putevarets
+putla
+putle
+putler
+putlet
+putra
+putre
+putret
+putta
+putte
+putter
+puttet
+pv
+pvc
+påvente
+påvirka
+påvirke
+påvirkelig
+påvirkelige
+påvirkende
+påvirker
+påvirkes
+påvirket
+påvirkning
+påvirkningen
+påvirkningene
+påvirkningens
+påvirkninger
+påvise
+påviselig
+påviser
+påvises
+påvisning
+påvisningen
+påvisningens
+påvist
+påviste
+pyjamas
+pyjamasen
+pyjamasene
+pyjamasens
+pyjamaser
+pøyk
+pøyken
+pøykene
+pøykens
+pøyker
+pykniker
+pyknikere
+pyknikeren
+pyknikerens
+pyknikeres
+pyknikerne
+pyknikernes
+pynt
+pynte
+pyntede
+pyntelig
+pynten
+pyntens
+pynter
+pyntet
+pyoreen
+pyoreens
+pyramide
+pyramiden
+pyramidens
+pyroman
+pyromanen
+pyromanene
+pyromanens
+pyromaner
+pyrometer
+pyrometeret
+pyrometerets
+pyrometret
+pyrometrets
+pyse
+pysen
+pysens
+pyset
+pysete
+pysj
+pysjen
+pysjens
+pytagoreisk
+pytt
+pytten
+pyttene
+pyttens
+pytter
+quickstep
+quickstepen
+quickstepene
+quickstepens
+quicksteper
+quisling
+quislingen
+quislingene
+quislingens
+quislinger
+quo
+r
+rå
+år
+ær
+ør
+ra
+råa
+åra
+æra
+øra
+rabagast
+rabagasten
+rabagastene
+rabagastens
+rabagaster
+rabalder
+rabalderet
+rabalderets
+rabaldra
+rabaldre
+rabaldrene
+rabaldret
+rabaldrets
+rabarbra
+rabarbraen
+rabarbraens
+rabatt
+rabatten
+rabattene
+rabattens
+rabatter
+rabb
+rabbe
+rabbel
+rabbelet
+rabbelets
+rabben
+rabbens
+rabbiner
+rabbinere
+rabbineren
+rabbinerens
+rabbineres
+rabbinerne
+rabbinernes
+rabiat
+rabla
+rable
+rablet
+rabulist
+rabulisten
+rabulistene
+rabulistens
+rabulister
+race
+racer
+racerbil
+racerbilen
+racerbilene
+racerbilens
+racerbiler
+racere
+raceren
+racerens
+raceres
+racerne
+racernes
+racet
+racket
+racketen
+racketene
+racketens
+racketer
+rad
+rada
+radar
+radaren
+radarene
+radarens
+radarer
+radbrekka
+radbrekke
+radbrekker
+radbrekket
+radbrekking
+radbrekkinga
+radbrekning
+radbrekningen
+radbrekningens
+radd
+radden
+raddene
+raddens
+radder
+raden
+radene
+radens
+rader
+radere
+radering
+raderinga
+raderingen
+raderingens
+radert
+raderte
+radial
+radialdekk
+radialdekket
+radialdekkets
+radiale
+radialt
+radiator
+radiatoren
+radiatorene
+radiatorens
+radiatorer
+radiell
+radielle
+radiene
+radier
+radig
+radikal
+radikale
+radikaler
+radikalere
+radikaleren
+radikalerens
+radikaleres
+radikalerne
+radikalernes
+radikalisme
+radikalismen
+radikalismens
+radikalt
+radio
+radioaktiv
+radioaktive
+radioaktivitet
+radioaktiviteten
+radioaktivitetens
+radioapparat
+radioapparatene
+radioapparater
+radioapparatet
+radioapparatets
+radioen
+radioene
+radioens
+radioer
+radiolink
+radiolinken
+radiolinkens
+radioprogram
+radioprogrammene
+radioprogrammer
+radioprogrammet
+radioprogrammets
+radioteatre
+radioteatret
+radiotelefon
+radiotelefonen
+radiotelefonens
+radiotelefoni
+radium
+radius
+radon
+radonet
+radonets
+æraen
+æraens
+raet
+raff
+raffinade
+raffinaden
+raffinadens
+raffinement
+raffinementa
+raffinementene
+raffinementer
+raffinementet
+raffinementets
+raffinere
+raffineri
+raffineria
+raffineriene
+raffinerier
+raffineriet
+raffineriets
+raffinert
+raffinerte
+rafsa
+rafse
+rafser
+rafset
+raft
+rafta
+raften
+raftene
+raftens
+rafter
+raftestokk
+raftestokken
+raftestokkens
+raga
+rage
+rager
+raget
+ragg
+raggesokk
+raggesokken
+raggesokkens
+ragget
+raggete
+raggets
+raglan
+raglanen
+raglanene
+raglanens
+raglaner
+ragnarok
+ragnaroket
+ragnarokets
+ragu
+raguen
+raguene
+raguens
+raguer
+raid
+raide
+raidet
+raigras
+raigraset
+raigrasets
+rainbow
+raison
+raja
+rajah
+raje
+rajene
+rajer
+rak
+raka
+rakaure
+rakauren
+rakaurens
+rake
+rakefisk
+rakefisken
+rakefiskens
+rakekniv
+rakekniven
+rakeknivens
+rakett
+raketten
+rakettene
+rakettens
+raketter
+rakettforsvar
+rakettforsvaret
+rakettforsvarets
+rakitis
+rakitisen
+rakitisens
+rakitt
+rakitten
+rakittens
+rakittisk
+rakk
+rakke
+rakker
+rakkere
+rakkeren
+rakkerens
+rakkeres
+rakkerne
+rakkernes
+rakkerpakk
+rakkerpakket
+rakkerpakkets
+rakket
+rakle
+raklen
+raklens
+rakna
+rakne
+rakner
+raknet
+rakørret
+rakørreten
+rakørretene
+rakørretens
+rakørreter
+rakrygga
+rakst
+raksten
+rakstens
+rakster
+raksteren
+raksterens
+rakt
+rakte
+raljere
+raljerer
+raljert
+raljerte
+ralla
+rallar
+rallaren
+rallarene
+rallarens
+rallarer
+ralle
+raller
+rallet
+rally
+rallya
+rallyene
+rallyer
+rallyet
+rallyets
+råaluminium
+råaluminiumen
+råaluminiumens
+ram
+ramaskrik
+ramaskriket
+ramaskrikets
+rambukk
+rambukken
+rambukkens
+ramla
+ramle
+ramler
+ramlet
+ramloft
+ramloftet
+ramloftets
+ramma
+ramme
+rammebetingelse
+rammebetingelsen
+rammebetingelsene
+rammebetingelsens
+rammebetingelser
+rammede
+rammel
+rammelen
+rammelens
+rammelet
+rammelets
+rammen
+rammene
+rammer
+rammes
+rammet
+ramn
+ramnen
+ramnene
+ramnens
+ramner
+ramp
+rampe
+rampelys
+rampelyset
+rampelysets
+rampen
+rampens
+rampet
+rampete
+ramponere
+ramponert
+ramponerte
+rams
+ramsalt
+ramse
+ramsterk
+ramsvart
+ran
+rana
+ranch
+ranchen
+ranchene
+ranchens
+rancher
+rand
+randa
+rande
+randen
+randens
+randet
+randete
+rane
+ranet
+rang
+range
+rangel
+rangelen
+rangelens
+rangelet
+rangelets
+rangen
+ranger
+rangere
+rangerer
+rangert
+rangerte
+rangla
+rangle
+ranglefant
+ranglefanten
+ranglefantene
+ranglefantens
+ranglefanter
+rangler
+ranglet
+rangorden
+rangordenen
+rangordenens
+rangs
+rangstige
+rangstigen
+rangstigens
+rank
+ranken
+rankene
+rankens
+ranker
+rankinglista
+rankingliste
+rankinglisten
+rankinglistene
+rankinglistens
+rankinglister
+ransak
+ransaka
+ransake
+ransakelse
+ransakelsen
+ransakelsene
+ransakelsens
+ransakelser
+ransaker
+ransaket
+ransaking
+ransakinga
+ransakingen
+ransakingene
+ransakingens
+ransakinger
+ransel
+ranselen
+ranselens
+ranslene
+ransler
+ransmann
+ransmannen
+ransmannens
+ransmenn
+ransmennene
+ransmennenes
+ransmenns
+rant
+ranunkel
+ranunkelen
+ranunkelens
+ranunklene
+ranunkler
+rap
+rapen
+rapens
+rapp
+rappe
+rappen
+rappfota
+rappføtt
+rapphendt
+rapphøna
+rapphøne
+rapphønene
+rapphøner
+rapport
+rapporten
+rapportene
+rapportens
+rapporter
+rapportere
+rapporterer
+rapporteres
+rapportert
+rapporterte
+rapportør
+rapportøren
+rapportørene
+rapportørens
+rapportører
+raps
+rapsen
+rapsens
+rapsodi
+rapsodien
+rapsodiene
+rapsodiens
+rapsodier
+rapt
+raptus
+raptusen
+raptusene
+raptusens
+raptuser
+rar
+rare
+raring
+raringen
+raringene
+raringens
+raringer
+raritet
+rariteten
+raritetens
+rart
+ras
+rase
+rasedyr
+rasedyrene
+rasedyret
+rasedyrets
+rasefordommer
+rasehat
+rasehatet
+rasehatets
+rasen
+rasende
+rasens
+raser
+rasere
+raserer
+raseri
+raseriet
+raseriets
+rasert
+raserte
+raset
+rasfare
+rasfaren
+rasfarens
+rasisme
+rasismen
+rasismens
+rasist
+rasisten
+rasistene
+rasistens
+rasister
+rasistisk
+rasjon
+rasjonal
+rasjonalisere
+rasjonaliserer
+rasjonalisering
+rasjonaliseringa
+rasjonaliseringen
+rasjonaliseringens
+rasjonaliseringer
+rasjonaliseringstiltak
+rasjonalisert
+rasjonaliserte
+rasjonalisme
+rasjonalismen
+rasjonalismens
+rasjonalist
+rasjonalisten
+rasjonalistene
+rasjonalistens
+rasjonalister
+rasjonell
+rasjonelle
+rasjonelt
+rasjonen
+rasjonene
+rasjonens
+rasjoner
+rasjonere
+rasjonerer
+rasjonering
+rasjoneringa
+rasjoneringen
+rasjoneringens
+rasjonert
+rasjonerte
+rask
+raske
+raskere
+raskest
+raskeste
+rasket
+raskt
+rasla
+rasle
+rasler
+raslet
+rasp
+raspa
+raspe
+rassia
+rassiaen
+rassiaene
+rassiaens
+rassiaer
+rasstedet
+rast
+rasta
+rasten
+rastene
+rastens
+raster
+rastet
+rate
+raten
+ratens
+ratifikasjon
+ratifikasjonen
+ratifikasjonene
+ratifikasjonens
+ratifikasjoner
+ratifisere
+ratifiserer
+ratifisert
+ratifiserte
+ratt
+ratta
+rattene
+rattet
+rattets
+rattfyllik
+rattlås
+rattlåsen
+rattlåsens
+rattstamme
+rattstammen
+rattstammene
+rattstammens
+rattstammer
+rauk
+rauka
+rauken
+raukene
+raukens
+rauker
+raus
+rause
+raushet
+rausheten
+raushetens
+raustleik
+raustleiken
+raustleikens
+raut
+rauta
+rauten
+rautene
+rautens
+rauter
+rautet
+rav
+rava
+rave
+ravende
+raver
+ravet
+ravgal
+ravgalen
+ravgalens
+ravn
+ravnen
+ravnene
+ravnens
+ravner
+rayon
+rayonet
+rayonets
+razzia
+razziaen
+razziaene
+razziaens
+razziaer
+råband
+råbandet
+råbandets
+ærbar
+ærbare
+ærbarhet
+ærbarheten
+ærbarhetens
+råbarka
+ærbart
+ærbødig
+ærbødige
+ærbødighet
+ærbødigheten
+ærbødighetens
+ærbødigst
+råd
+rød
+Årdal
+rødbete
+rødbeten
+rødbetene
+rødbetens
+rødbeter
+rødbrune
+rødbrunt
+råde
+røde
+rødekorssøster
+rødekorssøsteren
+rødekorssøsterens
+rødekorssøstre
+rødekorssøstrene
+rådelig
+rådende
+råder
+råderett
+råderetten
+råderettens
+rådet
+rådets
+rådføre
+rådfører
+rådført
+rådførte
+rådgivende
+rådgiver
+rådgivere
+rådgiveren
+rådgiverens
+rådgiveres
+rådgiverne
+rådgivernes
+rådgivningstjeneste
+rådgivningstjenesten
+rådgivningstjenestene
+rådgivningstjenestens
+rådgivningstjenester
+rådgjerd
+rådgjerda
+rådgjerdene
+rådgjerder
+rødglødende
+rødgraut
+rødgrauten
+rødgrautens
+rådhus
+rådhuset
+rådhusets
+rådhusgata
+rådig
+rådighet
+rådighets
+rødkolle
+rødkollen
+rødkollens
+rådlaus
+rådlegging
+rådlegginga
+rødlett
+rødlig
+rådløs
+rådløshet
+rådløsheten
+rådløshetens
+rådløyse
+rødma
+rådmann
+rådmannen
+rådmannens
+rødme
+rødmen
+rådmenn
+rådmennene
+rådmennenes
+rådmenns
+rødmens
+rødmer
+rødmet
+rødmussa
+råds
+rådslagning
+rådslagningen
+rådslagningene
+rådslagningens
+rådslagninger
+rådslåing
+rådslåinga
+rådslåingen
+rådslåingens
+rådsmøte
+rådsmøtet
+rådsnar
+rødspetta
+rødspette
+rødspetten
+rødspettens
+rødspetter
+rådspørre
+rådsrepublikk
+rådsrepublikken
+rådsrepublikkens
+rødstrupe
+rødstrupen
+rødstrupens
+rødt
+ærdun
+ærduna
+ærdunet
+ærdunets
+rådvelde
+rådveldet
+rådvill
+rødvin
+rødvinen
+rødvinene
+rødvinens
+rødviner
+rådyr
+rådyra
+rådyrene
+rådyret
+rådyrets
+re
+åre
+ære
+øre
+reagens
+reagensa
+reagensen
+reagensene
+reagensens
+reagenser
+reagenset
+reagensets
+reagensglas
+reagensglasa
+reagensglaset
+reagensglasets
+reagensglass
+reagensglassa
+reagensglassene
+reagensglasset
+reagensglassets
+reagere
+reagerer
+reageres
+reagert
+reagerte
+reaksjon
+reaksjonen
+reaksjonene
+reaksjonens
+reaksjoner
+reaksjonær
+reaksjonære
+reaksjonsdrevet
+reaksjonsevne
+reaksjonsevnen
+reaksjonsevnens
+reaktor
+reaktoren
+reaktorene
+reaktorens
+reaktorer
+real
+realartium
+realartiumen
+realartiumens
+realfag
+realfaga
+realfagene
+realfaget
+realfagets
+realisasjon
+realisasjonen
+realisasjonene
+realisasjonens
+realisasjoner
+realiserbart
+realisere
+realiserer
+realiseres
+realisering
+realiseringa
+realiseringen
+realiseringens
+realisert
+realisme
+realismen
+realismens
+realist
+realisten
+realistene
+realistens
+realister
+realistisk
+realistiske
+realitet
+realiteten
+realitetene
+realitetens
+realkapital
+realskole
+realskolen
+realskolene
+realskolens
+realskoler
+reassuranse
+reassuransen
+reassuransens
+reassurere
+reassurerer
+reassurert
+reassurerte
+rebell
+rebellen
+rebellene
+rebellens
+rebeller
+rebelsk
+årebetennelse
+ørebetennelse
+årebetennelsen
+ørebetennelsen
+ørebetennelsene
+årebetennelsens
+ørebetennelsens
+ørebetennelser
+rebus
+rebusen
+rebusene
+rebusens
+rebuser
+recensent
+recensenten
+recensentens
+recess
+recessen
+recessene
+recessens
+recesser
+red
+redaksjon
+redaksjonell
+redaksjonelle
+redaksjonen
+redaksjonene
+redaksjonens
+redaksjoner
+redaksjonssekretær
+redaksjonssekretæren
+redaksjonssekretærene
+redaksjonssekretærens
+redaksjonssekretærer
+redaksjonsutvalg
+redaktør
+redaktøren
+redaktørene
+redaktørens
+redaktører
+redd
+redde
+reddes
+reddet
+reddik
+reddiken
+reddikene
+reddikens
+reddiker
+reddsom
+reddsomme
+reddsomt
+rede
+ærede
+redefiner
+redefinere
+redefinerer
+redegjorde
+redegjort
+redegjør
+redegjøre
+redegjørelse
+redegjørelsen
+redegjørelsens
+redegjøres
+redelig
+redelige
+redelighet
+redeligheten
+redelighetens
+reder
+redere
+rederen
+rederens
+rederforbund
+rederforbundet
+rederforbundets
+rederi
+rederia
+rederiene
+rederier
+rederiet
+rederiets
+rederne
+redet
+redig
+rediger
+redigere
+redigerer
+redigeres
+redigering
+redigeringa
+redigeringen
+redigeringene
+redigeringens
+redigeringer
+redigert
+redigerte
+redning
+redningen
+redningens
+redningsaksjon
+redningsaksjonen
+redningsaksjonene
+redningsaksjonens
+redningsaksjoner
+redningsarbeidet
+redningsbåt
+redningsbåten
+redningsbåtene
+redningsbåtens
+redningsbåter
+redningsfartøy
+redningsfartøya
+redningsfartøyene
+redningsfartøyet
+redningsfartøyets
+redningskrysser
+redningskryssere
+redningskrysseren
+redningskrysserens
+redningskrysseres
+redningskrysserne
+redningskryssernes
+redningssentral
+redningssentralen
+redningssentralene
+redningssentralens
+redningssentraler
+redningstjeneste
+redningstjenesten
+redningstjenestens
+redningsutstyr
+redningsutstyret
+redningsutstyrets
+øredobb
+øredobba
+øredobbe
+øredobben
+øredobbene
+øredobbens
+øredobber
+redoble
+redsel
+redselen
+redselens
+redskap
+redskapa
+redskapen
+redskapene
+redskapens
+redskaper
+redskapet
+redskapets
+reduksjon
+reduksjonen
+reduksjonene
+reduksjonens
+reduksjoner
+reduser
+redusere
+reduserer
+reduseres
+redusering
+reduseringa
+reduseringen
+reduseringens
+redusert
+reduserte
+øredøvende
+reel
+reelen
+reelens
+reell
+reelle
+reelt
+ref
+referanse
+referansen
+referansene
+referansens
+referanser
+referansesamling
+referansesamlingen
+referansesamlingens
+referat
+referata
+referatene
+referater
+referatet
+referatets
+referenda
+referendaene
+referendum
+referenduma
+referendumene
+referendumer
+referendumet
+referendumets
+referent
+referenten
+referentene
+referentens
+referenter
+referer
+referere
+refererer
+referert
+refererte
+ørefik
+ørefiken
+ørefikene
+ørefikens
+ørefiker
+refill
+refillen
+refillene
+refillens
+refiller
+refinansiering
+refinansieringa
+refinansieringen
+refinansieringens
+refleks
+refleksen
+refleksene
+refleksens
+reflekser
+refleksiv
+refleksjon
+refleksjonen
+refleksjonene
+refleksjonens
+refleksjoner
+reflekter
+reflektere
+reflekterende
+reflekterer
+reflektert
+åreforkalka
+åreforkalking
+åreforkalkinga
+åreforkalkingen
+åreforkalkingens
+åreforkalkning
+åreforkalkningen
+åreforkalkningens
+reform
+reforma
+reformasjon
+reformasjonen
+reformasjonene
+reformasjonens
+reformasjoner
+reformen
+reformene
+reformens
+reformer
+reformere
+refreng
+refrenga
+refrengene
+refrenger
+refrenget
+refrengets
+ærefrykt
+ærefrykten
+ærefryktens
+refs
+refsa
+refse
+refset
+refst
+refste
+refuge
+refugen
+refugens
+ærefulle
+refundere
+refunderes
+refundert
+refunderte
+refusere
+refuserer
+refusert
+refuserte
+refusjon
+refusjonen
+refusjonene
+refusjonens
+refusjoner
+reg
+regatta
+regattaen
+regattaene
+regattaens
+regattaer
+regel
+regelen
+regelens
+regelfast
+regelmessig
+regelmessige
+regelrett
+regelverk
+regelverket
+regelverkets
+regenerere
+regenererer
+regenerert
+regenererte
+regent
+regenten
+regentene
+regentens
+regenter
+regi
+regien
+regiene
+regiens
+regier
+regima
+regime
+regimene
+regiment
+regimente
+regimentet
+regimer
+regimet
+regimets
+region
+regional
+regionale
+regionalpolitikk
+regionalt
+regionen
+regionene
+regionens
+regioner
+regionplan
+regionplanen
+regionplanens
+regissere
+regisserer
+regissert
+regisserte
+regissør
+regissøren
+regissørene
+regissørens
+regissører
+register
+registeret
+registerets
+registra
+registre
+registrene
+registrer
+registrere
+registrerer
+registreres
+registrering
+registreringa
+registreringen
+registreringene
+registreringens
+registreringer
+registreringskort
+registreringskortet
+registreringskortets
+registreringsnummer
+registreringsnummeret
+registreringsnummerets
+registreringsnumre
+registreringsnumrene
+registrert
+registrerte
+registret
+registrets
+regjere
+regjerende
+regjerer
+regjering
+regjeringa
+regjeringen
+regjeringene
+regjeringens
+regjeringer
+regjerings
+regjeringsadvokat
+regjeringsadvokaten
+regjeringsadvokatens
+regjeringskoalisjon
+regjeringskoalisjonen
+regjeringskoalisjonene
+regjeringskoalisjonens
+regjeringskoalisjoner
+regjeringskrise
+regjeringskrisen
+regjeringskrisene
+regjeringskrisens
+regjeringskriser
+regjeringsmakt
+regjeringsmakta
+regjeringsmakten
+regjeringsmaktens
+regjeringsparti
+regjeringspartiene
+regjeringspartienes
+regjeringspartier
+regjeringssjef
+regjeringssjefen
+regjeringssjefene
+regjeringssjefens
+regjeringssjefer
+regjeringsskifte
+regjeringsskiftet
+regjeringstid
+regl
+regle
+reglement
+reglementa
+reglementene
+reglementer
+reglementere
+reglementert
+reglementet
+reglementets
+reglene
+regler
+regn
+regnboge
+regnbogen
+regnbogens
+regnbyge
+regnbygen
+regnbygene
+regnbygens
+regnbyger
+regndråpe
+regndråpen
+regndråpene
+regndråpens
+regndråper
+regne
+regneeksempel
+regneeksempelet
+regneeksempelets
+regneeksemplene
+regneeksempler
+regneeksemplet
+regneeksemplets
+regnekraft
+regnekraften
+regnekraftens
+regnemaskin
+regnemaskinen
+regnemaskinene
+regnemaskinens
+regnemaskiner
+regneoperasjon
+regneoperasjonen
+regneoperasjonene
+regneoperasjonens
+regneoperasjoner
+regner
+regneregler
+regnes
+regnet
+regnfrakk
+regning
+regninga
+regningen
+regningene
+regningssvarende
+regnskap
+regnskapa
+regnskapene
+regnskaper
+regnskapet
+regnskapets
+regnskapsavdeling
+regnskapsavdelinga
+regnskapsavdelingen
+regnskapsavdelingene
+regnskapsavdelingens
+regnskapsavdelinger
+regnskapsførsel
+regnskapsførselen
+regnskapsførselens
+regnskapsmessig
+regnskapsår
+regnskapsåret
+regnskapsårets
+regnskur
+regnskura
+regnskuren
+regnskurene
+regnskurens
+regnskurer
+regnsky
+regnskyen
+regnskyene
+regnskyens
+regnskyer
+regnskyll
+regnskyllet
+regnskyllets
+regnvann
+regnvannet
+regnvannets
+regnvær
+regnværet
+regnværets
+regresjon
+regresjonen
+regresjonene
+regresjonens
+regresjoner
+regress
+regressen
+regressene
+regressens
+regresser
+regressiv
+regresskrav
+regresskravet
+regresskravets
+reguladetri
+regularitet
+regulariteten
+regularitetens
+regulativ
+regulativa
+regulativene
+regulativer
+regulativet
+regulativets
+regulator
+regulatoren
+regulatorene
+regulatorens
+regulatorer
+regulere
+regulerende
+regulerer
+reguleres
+regulering
+reguleringa
+reguleringen
+reguleringene
+reguleringens
+reguleringer
+reguleringsplan
+reguleringsplanen
+reguleringsplanene
+reguleringsplanens
+reguleringsplaner
+regulert
+regulær
+regulære
+regulært
+rehabilitere
+rehabilitering
+rehabiliteringa
+rehabiliteringen
+rehabiliteringens
+rehabiliteringer
+rehabilitert
+rehabiliterte
+rei
+reie
+reim
+reima
+reimen
+reimene
+reimens
+reimer
+rein
+reindrift
+reindrifta
+reindriften
+reindriftens
+reinen
+reinens
+reinere
+reinest
+reineste
+reinfann
+reinfannen
+reinfannens
+reinflokk
+reinflokken
+reinflokkene
+reinflokkens
+reinflokker
+reingjøring
+reingjøringen
+reingjøringens
+reinhekla
+reinhet
+reinheten
+reinhetens
+reinhold
+reinholdet
+reinholdets
+reinhårige
+reinkalv
+reinkalven
+reinkalvene
+reinkalvens
+reinkalver
+reinlender
+reinlendere
+reinlenderen
+reinlenderens
+reinlenderes
+reinlenderne
+reinlendernes
+reinmose
+reinmosen
+reinmosens
+reinsdyr
+reinsdyra
+reinsdyrene
+reinsdyret
+reinsdyrets
+reinslig
+reint
+reip
+reipa
+reipene
+reipet
+reipets
+reipslager
+reipslagere
+reipslageren
+reipslagerens
+reipslageres
+reipslagerne
+reipslagernes
+reir
+reira
+reirene
+reiret
+reirets
+reis
+reisa
+reise
+reisebyrå
+reisebyråa
+reisebyråene
+reisebyråer
+reisebyrået
+reisebyråets
+reisefelle
+reisefellen
+reisefellens
+reisefravær
+reisefraværet
+reisefraværets
+reiseliv
+reiselivet
+reiselivets
+reiselivslag
+reiselivslaget
+reiselivslagets
+reisemål
+reisemåla
+reisemålene
+reisemålet
+reisemålets
+reisen
+reisende
+reisens
+reiser
+reiseruta
+reiserute
+reiseruten
+reiserutene
+reiserutens
+reiseruter
+reises
+reisesekretær
+reiset
+reisetid
+reisetida
+reisetiden
+reisetidens
+reiseutgift
+reiseutgiften
+reiseutgiftene
+reiseutgiftens
+reiseutgifter
+reising
+reisinga
+reisingen
+reisning
+reisningen
+reisningens
+reist
+reiste
+reisverk
+reisverket
+reisverkets
+reiv
+reiva
+reiven
+reivens
+reivet
+rejisere
+rejiserer
+rejisert
+rejiserte
+rek
+rekapitulere
+rekapitulert
+rekapitulerte
+reke
+rekel
+rekelen
+rekelens
+rekelet
+rekelets
+reker
+reket
+ærekjær
+rekk
+rekka
+rekke
+rekkefølge
+rekkefølgen
+rekkefølgens
+rekkehus
+rekkehuset
+rekkehusets
+rekken
+rekkene
+rekker
+rekkevidda
+rekkevidde
+rekkevidden
+rekkeviddens
+rekkt
+rekkte
+rekkverk
+rekkverka
+rekkverkene
+rekkverket
+rekkverkets
+reklamasjon
+reklamasjonen
+reklamasjonene
+reklamasjonens
+reklamasjoner
+reklame
+reklamebyrå
+reklamebyrået
+reklamebyråets
+reklamen
+reklamene
+reklamens
+reklamer
+reklamere
+reklamerer
+reklamert
+reklamerte
+rekler
+reklet
+reklets
+rekling
+reklingen
+reklingens
+rekna
+rekne
+rekner
+rekneskap
+rekneskapa
+rekneskapen
+rekneskapene
+rekneskapens
+rekneskaper
+reknet
+rekning
+rekninga
+rekningen
+rekognosere
+rekognosering
+rekognoseringa
+rekognoseringen
+rekognoseringens
+rekognosert
+rekognoserte
+rekommandasjon
+rekommandasjonen
+rekommandasjonene
+rekommandasjonens
+rekommandasjoner
+rekommandere
+rekommandert
+rekommanderte
+rekonstruere
+rekonstruerer
+rekonstrueres
+rekonstruert
+rekonstruerte
+rekonstruksjon
+rekonstruksjonen
+rekonstruksjonene
+rekonstruksjonens
+rekonstruksjoner
+rekonvalesens
+rekonvalesensen
+rekonvalesensens
+rekonvalesent
+rekonvalesenten
+rekonvalesentene
+rekonvalesentens
+rekonvalesenter
+rekord
+rekorden
+rekordene
+rekordens
+rekorder
+rekordforbedring
+rekordforbedringen
+rekordforbedringens
+rekordomsetning
+rekordomsetningen
+rekordomsetningens
+rekordproduksjon
+rekordproduksjonen
+rekordproduksjonens
+rekordtallet
+rekordtid
+rekreasjon
+rekreasjonen
+rekreasjonene
+rekreasjonens
+rekreasjoner
+rekreere
+rekreerer
+rekreert
+rekreerte
+ærekrenke
+ærekrenkelse
+ærekrenkelsen
+ærekrenkelsene
+ærekrenkelsens
+ærekrenkelser
+ærekrenking
+ærekrenkinga
+ærekrenkingen
+ærekrenkingens
+rekrutt
+rekrutten
+rekruttene
+rekruttens
+rekrutter
+rekruttere
+rekruttering
+rekrutteringa
+rekrutteringen
+rekrutteringens
+rekrutteringsstilling
+rekrutteringsstillingen
+rekrutteringsstillingene
+rekrutteringsstillingens
+rekrutteringsstillinger
+rekruttert
+rekruttskole
+rekruttskolen
+rekruttskolene
+rekruttskolens
+rekruttskoler
+rekt
+rektangel
+rektangelet
+rektangelets
+rektangla
+rektanglene
+rektangler
+rektanglet
+rektanglets
+rektangulær
+rektor
+rektorat
+rektorata
+rektoratene
+rektorater
+rektoratet
+rektoratets
+rektoren
+rektorene
+rektorens
+rektorer
+rektorvalg
+rektorvalget
+rektorvalgets
+rektum
+rektumet
+rektumets
+rekved
+rekveden
+rekvedens
+rekviem
+rekviema
+rekviemene
+rekviemet
+rekviemets
+rekvirere
+rekvirerer
+rekvireres
+rekvirert
+rekvirerte
+rekvisisjon
+rekvisisjonen
+rekvisisjonene
+rekvisisjonens
+rekvisisjoner
+rekvisita
+rekvisitt
+rekvisitta
+rekvisittene
+rekvisitter
+rekvisittet
+rekvisittets
+rekyl
+rekylen
+rekylene
+rekylens
+rekyler
+ørekyte
+årelang
+årelange
+relasjon
+relasjonen
+relasjonene
+relasjonens
+relasjoner
+årelate
+relatere
+relateres
+relatert
+årelates
+årelating
+årelatinga
+relativ
+relative
+relativitet
+relativiteten
+relativitetens
+relativt
+årelatning
+årelatningen
+årelatningens
+releer
+releet
+releets
+relegasjon
+relegasjonen
+relegasjonene
+relegasjonens
+relegasjoner
+relegere
+relegerer
+relegert
+relegerte
+relevans
+relevansen
+relevant
+relevante
+relieff
+relieffa
+relieffene
+relieffer
+relieffet
+relieffets
+religion
+religionen
+religionene
+religionens
+religioner
+religionsstifter
+religionsstiftere
+religionsstifteren
+religionsstifterens
+religionsstifteres
+religionsstifterne
+religionsstifternes
+religiøs
+religiøse
+religiøsitet
+religiøsiteten
+religiøsitetens
+religiøst
+relikvie
+relikvien
+relikviens
+reling
+relinga
+relingen
+relingene
+relingens
+relinger
+rem
+remanens
+remanensen
+remanensens
+remanent
+remburs
+rembursen
+rembursene
+rembursens
+remburser
+remedie
+remedien
+remediene
+remediens
+remedier
+remediet
+remediets
+remedium
+øremerke
+øremerket
+reminisens
+reminisensen
+reminisensene
+reminisensens
+reminisenser
+remis
+remisen
+remisens
+remisse
+remissen
+remissens
+remittere
+remittert
+remitterte
+remja
+remje
+remjet
+åremål
+åremålet
+åremålets
+åremålsdag
+åremålsdagen
+åremålsdagene
+åremålsdagens
+åremålsdager
+remma
+remmen
+remmens
+råemne
+råemnet
+remplassere
+remplassert
+remplasserte
+remsa
+remse
+remset
+remulade
+remuladen
+remuladens
+ren
+åren
+æren
+øren
+ærend
+ærenda
+ørende
+rendene
+ærendene
+render
+ærender
+ærendet
+ærendets
+rendezvous
+rendezvousa
+rendezvousene
+rendezvouser
+rendezvouset
+rendezvousets
+ærendssvein
+ærendssveinen
+ærendssveinens
+rene
+årene
+ørene
+renegat
+renegaten
+renegatene
+renegatens
+renegater
+årenes
+renessanse
+renessansen
+renessansens
+renhet
+renheten
+renhetens
+renhold
+renholdet
+renholdets
+renkesmed
+renkesmeden
+renkesmedens
+renn
+renne
+renner
+rennestein
+rennesteinen
+rennesteinens
+rennet
+renning
+renninga
+renningen
+renningens
+renommeet
+renommeets
+renons
+renonsen
+renonsene
+renonsens
+renonser
+renonsere
+renonserer
+renonsert
+renonserte
+renovasjon
+renovasjonen
+renovasjonene
+renovasjonens
+renovasjoner
+renovering
+renoveringa
+renoveringen
+renoveringens
+rens
+ærens
+rense
+renseanlegg
+renseanlegga
+renseanleggene
+renseanlegget
+renseanleggets
+renselse
+renselsen
+renselsens
+renser
+renseri
+renseria
+renseriene
+renserier
+renseriet
+renseriets
+renset
+rensing
+rensinga
+rensingen
+rensingene
+rensingens
+rensinger
+renska
+renske
+rensker
+rensket
+renslig
+ørenslyd
+rensning
+rensningen
+rensningens
+rent
+rente
+rentefot
+rentefoten
+rentefotens
+renten
+rentens
+renter
+rentesats
+rentesatsen
+rentesatsens
+renteutgift
+renteutgiften
+renteutgiftene
+renteutgiftens
+renteutgifter
+reol
+reolen
+reolene
+reolens
+reoler
+reorganisasjon
+reorganisasjonen
+reorganisasjonene
+reorganisasjonens
+reorganisasjoner
+reorganisere
+reorganiserer
+reorganisering
+reorganiseringa
+reorganiseringen
+reorganiseringens
+reorganisert
+reorganiserte
+reparasjon
+reparasjonen
+reparasjonene
+reparasjonens
+reparasjoner
+reparasjonsarbeid
+reparasjonsarbeidene
+reparasjonsarbeider
+reparasjonsarbeidet
+reparasjonsarbeidets
+reparatør
+reparatøren
+reparatørene
+reparatørens
+reparatører
+reparere
+repareres
+reparert
+reparerte
+reperbane
+reperbanen
+reperbanens
+repertoar
+repertoara
+repertoarene
+repertoarer
+repertoaret
+repertoarets
+repetere
+repeterer
+repetert
+repeterte
+repetisjon
+repetisjonen
+repetisjonene
+repetisjonens
+repetisjoner
+replikk
+replikken
+replikkene
+replikkens
+replikker
+replisere
+repliserer
+replisert
+repliserte
+reportasje
+reportasjen
+reportasjene
+reportasjens
+reportasjer
+reporter
+reportere
+reporteren
+reporterens
+reporteres
+reporterne
+reporternes
+repos
+reposen
+reposens
+represalie
+represalien
+represaliens
+representant
+representanten
+representantene
+representantenes
+representantens
+representanter
+representantskap
+representantskapene
+representantskapet
+representantskapets
+representasjon
+representasjonen
+representasjonene
+representasjonens
+representasjoner
+representativ
+representative
+representativt
+representere
+representerer
+representeres
+representert
+representerte
+reprimande
+reprimanden
+reprimandens
+reprise
+reprisen
+reprisens
+reproduksjon
+reproduksjonen
+reproduksjonene
+reproduksjonens
+reproduksjoner
+reprodusere
+reproduserer
+reprodusert
+reproduserte
+ørepropp
+øreproppen
+øreproppene
+øreproppens
+ørepropper
+repslager
+repslagere
+repslageren
+repslagerens
+repslageres
+repslagerne
+repslagernes
+reptil
+reptila
+reptilene
+reptiler
+reptilet
+reptilets
+republikaner
+republikanere
+republikaneren
+republikanerens
+republikaneres
+republikanerne
+republikanernes
+republikansk
+republikanske
+republikk
+republikken
+republikkene
+republikkens
+republikker
+årer
+ærer
+ører
+res
+æres
+æresbegrep
+æresbegrepa
+æresbegrepene
+æresbegreper
+æresbegrepet
+æresbegrepets
+æresborger
+æresborgere
+æresborgeren
+æresborgerens
+æresborgeres
+æresborgerne
+æresborgernes
+æresdoktor
+æresdoktoren
+æresdoktorene
+æresdoktorens
+æresdoktorer
+resepsjon
+resepsjonen
+resepsjonene
+resepsjonens
+resepsjoner
+resept
+reseptar
+reseptaren
+reseptarene
+reseptarens
+reseptarer
+resepten
+reseptene
+reseptens
+resepter
+reseptiv
+reservasjon
+reservasjonen
+reservasjonene
+reservasjonens
+reservasjoner
+reservat
+reservata
+reservatene
+reservater
+reservatet
+reservatets
+reserve
+reservedelslager
+reservedelslagere
+reservedelslageren
+reservedelslagerens
+reservedelslageres
+reservedelslagerne
+reservedelslagernes
+reservefond
+reservefondet
+reservefondets
+reservelege
+reservelegen
+reservelegens
+reserven
+reservene
+reservens
+reserver
+reservere
+reservert
+reserverte
+reservoar
+reservoara
+reservoarene
+reservoarer
+reservoaret
+reservoarets
+æresgjest
+æresgjesten
+æresgjestene
+æresgjestens
+æresgjester
+residens
+residensen
+residensene
+residensens
+residenser
+residere
+residerende
+residerer
+residert
+residerte
+resignasjon
+resignasjonen
+resignasjonene
+resignasjonens
+resignasjoner
+resignere
+resignert
+resignerte
+resipient
+resipienten
+resipientens
+resiprok
+resiproke
+resiprokt
+resistens
+resistensen
+resistensens
+resitasjon
+resitasjonen
+resitasjonene
+resitasjonens
+resitasjoner
+resitativ
+resitativa
+resitativene
+resitativer
+resitativet
+resitativets
+resitere
+resiterer
+resitert
+resiterte
+æresjuk
+æreskjelle
+æreskjeller
+æreskjelt
+æreskjelte
+reskript
+reskripta
+reskriptene
+reskripter
+reskriptet
+reskriptets
+æresmedlem
+æresmedlemmene
+æresmedlemmer
+æresmedlemmet
+æresmedlemmets
+resolusjon
+resolusjonen
+resolusjonene
+resolusjonens
+resolusjoner
+resolutt
+resonans
+resonansen
+resonansens
+resong
+resongen
+resongens
+resonnement
+resonnementa
+resonnementene
+resonnementer
+resonnementet
+resonnementets
+resonner
+resonnere
+resonnerer
+resonnert
+resonnerte
+resp
+respekt
+respektabel
+respektabelt
+respektable
+respekten
+respektens
+respekter
+respektere
+respekterer
+respektert
+respekterte
+respektinngytende
+respektiv
+respektive
+respirasjon
+respirasjonen
+respirasjonene
+respirasjonens
+respirasjoner
+respitt
+respitten
+respittene
+respittens
+respitter
+respons
+responsa
+responsen
+responsene
+responsens
+responser
+responsum
+responsumet
+responsumets
+ressurs
+ressursbehov
+ressursdisponering
+ressursdisponeringa
+ressursdisponeringen
+ressursdisponeringens
+ressursen
+ressursene
+ressursens
+ressurser
+ressursforbruk
+ressursforbruket
+ressursforbrukets
+ressurskrevende
+ressursperson
+ressurspersonen
+ressurspersonene
+ressurspersonens
+ressurspersoner
+rest
+restanse
+restansen
+restansens
+restante
+restaurant
+restauranten
+restaurantene
+restaurantens
+restauranter
+restaurantfaget
+restaurasjon
+restaurasjonen
+restaurasjonene
+restaurasjonens
+restaurasjoner
+restaurere
+restaureres
+restaurering
+restaureringa
+restaureringen
+restaureringens
+restaurert
+restbeløpet
+resten
+restene
+restens
+rester
+restere
+resterende
+restituere
+restituerer
+restituert
+restituerte
+restitusjon
+restitusjonen
+restitusjonene
+restitusjonens
+restitusjoner
+årestove
+årestover
+restriksjon
+restriksjonen
+restriksjonene
+restriksjonens
+restriksjoner
+restriktiv
+restriktive
+restriktivt
+resultant
+resultanten
+resultantene
+resultantens
+resultanter
+resultat
+resultata
+resultatene
+resultater
+resultatet
+resultatets
+resultatlista
+resultatliste
+resultatlisten
+resultatlistene
+resultatlistens
+resultatlister
+resultere
+resulterer
+resultert
+resulterte
+øresus
+resymeer
+resymeet
+resymeets
+resymere
+resymert
+resymerte
+året
+æret
+øret
+åretak
+åretaka
+åretakene
+åretaket
+åretakets
+retardasjon
+retardasjonen
+retardasjonene
+retardasjonens
+retardasjoner
+retardere
+retarderes
+retirade
+retiraden
+retiradens
+retirere
+retirerer
+retirert
+retirerte
+retning
+retningen
+retningene
+retningens
+retninger
+retningsgivende
+retningslinja
+retningslinje
+retningslinjen
+retningslinjene
+retningslinjens
+retningslinjer
+åretoll
+åretollen
+åretollens
+retoriker
+retorikere
+retorikeren
+retorikerens
+retorikeres
+retorikerne
+retorikernes
+retorikk
+retorikken
+retorikkens
+retorisk
+retorte
+retorten
+retortens
+retrett
+retretten
+retrettene
+retrettens
+retretter
+retriever
+retrievere
+retrieveren
+retrieverens
+retrieveres
+retrieverne
+retrievernes
+retrospektiv
+retrospektive
+retroversjon
+retroversjonen
+retroversjonene
+retroversjonens
+retroversjoner
+årets
+rett
+rette
+rettelig
+rettelse
+rettelsen
+rettelsens
+retten
+rettens
+retter
+retterbot
+retterbota
+rettere
+rettergang
+rettergangen
+rettergangens
+rettes
+rettesnor
+rettesnora
+rettesnoren
+rettesnorens
+rettet
+rettferd
+rettferda
+rettferden
+rettferdens
+rettferdig
+rettferdige
+rettferdiggjør
+rettferdiggjøre
+rettferdighet
+rettferdigheten
+rettferdighetens
+rettferdighetsfølelse
+rettferdskjensle
+retthaversk
+rettidig
+rettighet
+rettigheten
+rettighetene
+rettighetens
+rettigheter
+retting
+rettinga
+rettingen
+rettingene
+rettingens
+rettinger
+rettleda
+rettlede
+rettledet
+rettledning
+rettledningen
+rettledningens
+rettleie
+rettleier
+rettleiing
+rettleiinga
+rettleiingen
+rettleiingene
+rettleiingens
+rettleiinger
+rettlinjet
+rettmessig
+rettsbeskyttelse
+rettsbeskyttelsen
+rettsbeskyttelsens
+rettsfølelse
+rettsfølelsen
+rettsfølelsens
+rettsforhandling
+rettsforhandlingen
+rettsforhandlingene
+rettsforhandlingens
+rettsforhandlinger
+rettsiktig
+rettsindig
+rettsinn
+rettsinnet
+rettsinnets
+rettskaffen
+rettskjennelse
+rettskjennelsen
+rettskjennelsens
+rettskjensla
+rettskjensle
+rettskriving
+rettskrivinga
+rettskrivingen
+rettskrivingene
+rettskrivingens
+rettskrivinger
+rettskrivingsordlista
+rettskrivingsordliste
+rettskrivingsordlisten
+rettskrivingsordlistene
+rettskrivingsordlistens
+rettskrivingsordlister
+rettskrivning
+rettskrivningen
+rettskrivningene
+rettskrivningens
+rettskrivninger
+rettskrivningsendring
+rettskrivningsendringen
+rettskrivningsendringene
+rettskrivningsendringens
+rettskrivningsendringer
+rettskrivningslære
+rettskrivningslæren
+rettskrivningslærens
+rettskyndig
+rettsøles
+rettslig
+rettslige
+rettsoppfatning
+rettsoppfatningen
+rettsoppfatningens
+rettssak
+rettssaka
+rettssaken
+rettssakene
+rettssakens
+rettssaker
+rettssaks
+rettssal
+rettssalen
+rettssalene
+rettssalens
+rettssaler
+rettssamfunn
+rettssikkerhet
+rettssikkerheten
+rettssikkerhetens
+rettsstat
+rettsstaten
+rettsstatens
+rettsstell
+rettsstellet
+rettsstellets
+rettstavet
+rettsvesen
+rettsvesenet
+rettsvesenets
+rettsvitenskap
+rettsvitenskapen
+rettsvitenskapens
+rettsvitne
+rettsvitnet
+rettvinkla
+rettvinklet
+rettvis
+retur
+returbillett
+returbilletten
+returbillettene
+returbillettens
+returbilletter
+returen
+returene
+returens
+returer
+returner
+returnere
+returnert
+retusj
+retusjen
+retusjens
+retusjer
+retusjere
+retusjerer
+retusjert
+retusjerte
+retusjør
+retusjøren
+retusjørene
+retusjørens
+retusjører
+reumatiker
+reumatikere
+reumatikeren
+reumatikerens
+reumatikeres
+reumatikerne
+reumatikernes
+reumatisk
+reumatisme
+reumatismen
+reumatismens
+reunion
+rev
+revansj
+revansjen
+revansjene
+revansjens
+revansjer
+reve
+revebjelle
+revehi
+revehia
+revehiene
+revehiet
+revehiets
+revelje
+reveljen
+reveljens
+reven
+reverens
+reverensen
+reverensene
+reverensens
+revers
+reversen
+reversene
+reversens
+reverser
+reversere
+reverserer
+reversering
+reverseringa
+reverseringen
+reverseringens
+reverseringshjul
+reverseringshjulet
+reverseringshjulets
+reversert
+reverserte
+reversibel
+revet
+revidere
+revideres
+revidering
+revideringa
+revideringen
+revideringens
+revideringer
+revidert
+reviderte
+årevinga
+årevis
+revisjon
+revisjonen
+revisjonene
+revisjonens
+revisjoner
+revisor
+revisoren
+revisorene
+revisorens
+revisorer
+revmatiker
+revmatikere
+revmatikeren
+revmatikerens
+revmatikeres
+revmatikerne
+revmatikernes
+revmatisk
+revmatisme
+revmatismen
+revmatismens
+revne
+revolt
+revolten
+revoltene
+revoltens
+revolter
+revoltere
+revolterer
+revoltert
+revolterte
+revolusjon
+revolusjonen
+revolusjonene
+revolusjonens
+revolusjoner
+revolusjonere
+revolusjonerende
+revolusjonær
+revolusjonære
+revolusjonært
+revolver
+revolvere
+revolveren
+revolverens
+revolveres
+revolverne
+revolvernes
+revurdere
+revurderer
+revurdering
+revurderinga
+revurderingen
+revurderingens
+revurdert
+revurderte
+revy
+revyen
+revyene
+revyens
+revyer
+røff
+røffel
+røffelen
+røffelens
+ørfin
+råfisklag
+råfisklaget
+råfisklagets
+råfisklov
+råfiskloven
+råfisklovens
+røflene
+røfler
+røft
+røfta
+røfte
+røftet
+ærfugl
+ærfuglen
+ærfuglene
+ærfuglens
+ærfugler
+årgang
+årgangen
+årgangene
+årgangens
+årganger
+ærgjerrig
+ærgjerrighet
+ærgjerrigheten
+ærgjerrighetens
+rhenium
+rheniumet
+rheniumets
+rhinskvin
+rhinskvinen
+rhinskvinens
+rhodesiske
+rhodium
+århundre
+århundrer
+århundres
+århundreskifte
+århundreskiftet
+århundret
+Århus
+ri
+ria
+ribb
+ribbe
+ribben
+ribbene
+ribbenet
+ribber
+ribbesteik
+ribbesteika
+ribbet
+ribbevegg
+ribbeveggen
+ribbeveggene
+ribbeveggens
+ribbevegger
+ridd
+ridder
+ridderen
+ridderens
+ridderlig
+ridderskap
+ride
+rideskole
+rideskolen
+rideskolene
+rideskolens
+rideskoler
+ridestell
+ridestellet
+ridestellets
+riding
+ridinga
+ridning
+ridningen
+ridningens
+rifla
+rifle
+riflen
+riflene
+riflens
+rifler
+riflet
+riflete
+rift
+rifta
+riften
+riftene
+riftens
+rifter
+rigabalsam
+rigg
+rigga
+rigge
+riggen
+riggens
+rigget
+right
+rigorøs
+rik
+rikdom
+rikdommen
+rikdommene
+rikdommens
+rikdommer
+rike
+rikelig
+rikelige
+rikere
+rikest
+rikeste
+riket
+rikets
+rikholdig
+riking
+rikingen
+rikingene
+rikingens
+rikinger
+rikka
+rikke
+rikker
+rikket
+rikosjett
+rikosjetten
+rikosjettene
+rikosjettens
+rikosjetter
+rikosjettere
+rikosjetterer
+rikosjettert
+rikosjetterte
+riksa
+riksadvokat
+riksadvokatembetet
+riksadvokaten
+riksadvokatens
+riksantikvar
+riksantikvaren
+riksantikvarens
+riksarkiv
+riksarkivar
+riksarkivaren
+riksarkivarens
+riksarkivet
+riksarkivets
+riksbibliotekar
+riksbibliotekaren
+riksbibliotekarens
+riksbibliotektjeneste
+riksbibliotektjenesten
+riksbibliotektjenestens
+riksdag
+riksdagen
+riksdagens
+rikse
+rikser
+rikset
+riksgalleri
+riksgalleriet
+riksgalleriets
+riksgrensa
+riksgrense
+riksgrensen
+riksgrensene
+riksgrensens
+rikshospital
+rikshospitalet
+rikshospitalets
+rikskringkasting
+rikskringkastingen
+rikskringkastingens
+riksmål
+riksmåla
+riksmålene
+riksmålet
+riksmålets
+riksmålsforbund
+riksmålsforbundet
+riksmålsforbundets
+riksmålsordbok
+riksmålsordboka
+riksmålsordboken
+riksmålsordbokens
+riksnett
+riksnettet
+riksnettets
+riksrett
+riksretten
+riksrettens
+riksrevisjon
+riksrevisjonen
+riksrevisjonene
+riksrevisjonens
+riksrevisjoner
+riksskattestyre
+riksskattestyret
+riksteatret
+riksteatrets
+rikstelefon
+rikstelefonen
+rikstelefonens
+rikstrygdeverk
+rikstrygdeverket
+rikstrygdeverkets
+riksveg
+riksvegen
+riksvegene
+riksvegens
+riksveger
+riksvei
+riksveien
+riksveiene
+riksveiens
+riksveier
+rikt
+riktig
+riktige
+riktigere
+riktighet
+riktigheten
+riktighetens
+riktignok
+riktigst
+riktigste
+rille
+rillen
+rillens
+rim
+rime
+rimelig
+rimelige
+rimeligere
+rimeligst
+rimeligste
+rimeligvis
+rimen
+rimens
+rimer
+rimet
+rimfrossen
+rimfrost
+rimfrosten
+rimfrostens
+ring
+åring
+ringe
+ringeakte
+ringeakten
+ringeaktens
+ringen
+åringen
+ringene
+åringene
+åringens
+ringer
+åringer
+ringere
+ringerikspotet
+ringerikspoteten
+ringerikspotetene
+ringerikspotetens
+ringerikspoteter
+ringest
+ringeste
+ringformede
+ringla
+ringle
+ringlen
+ringlene
+ringlens
+ringler
+ringlet
+ringnot
+ringnota
+ringt
+ringte
+ringveg
+ringvegen
+ringvegens
+ringvei
+ringveien
+ringveiens
+rinne
+rinner
+rinskvin
+rinskvinen
+rinskvinens
+rip
+ripa
+ripe
+riper
+ripet
+rippa
+rippe
+ripper
+rippet
+rips
+ripsen
+ripsene
+ripsens
+ripser
+rir
+ris
+rise
+risen
+risengryn
+risengrynsgraut
+risengrynsgrauten
+risengrynsgrautens
+risens
+riset
+risikabel
+risikabelt
+risikable
+risiker
+risikere
+risikerer
+risiko
+risikobetont
+risikoen
+risikoene
+risikoens
+risikoer
+risikovillig
+risk
+risken
+riskene
+riskens
+risker
+risla
+risle
+risler
+rislet
+risp
+rispe
+rispende
+rispet
+riss
+rissa
+risse
+rissenål
+rissenåla
+risset
+rist
+rista
+riste
+risten
+ristens
+ristet
+rita
+rite
+riten
+ritene
+ritens
+riter
+ritt
+ritta
+rittene
+rittet
+rittets
+rittmester
+rittmesteren
+rittmesterens
+rittmestrene
+ritual
+rituala
+ritualene
+ritualer
+ritualet
+ritualets
+rituell
+ritus
+ritusen
+ritusens
+riv
+rival
+rivalen
+rivalene
+rivalens
+rivaler
+rivalinne
+rivalinnen
+rivalinnene
+rivalinnens
+rivalinner
+rivalisere
+rivaliserer
+rivalisert
+rivaliserte
+rive
+rivende
+river
+rives
+riviera
+rivieraen
+rivieraens
+rivieraer
+riving
+rivinga
+rivna
+rivne
+rivner
+rivnet
+rivning
+rivningen
+rivningens
+råjern
+råjernet
+råjernets
+råk
+røk
+ørk
+råka
+råke
+røke
+røkelse
+røkelsen
+røkelsens
+råken
+ørken
+ørkenen
+ørkenene
+ørkenens
+ørkener
+råkens
+ørkenvandring
+ørkenvandringen
+ørkenvandringens
+ørkesløs
+råket
+røket
+råkjører
+råkjørere
+råkjøreren
+råkjørerens
+råkjøreres
+råkjørerne
+råkjørernes
+råkjøring
+råkjøringa
+råkjøringen
+råkjøringens
+råkost
+råkosten
+råkostens
+røkt
+røkta
+røkte
+årle
+årlig
+ærlig
+årlige
+ærlige
+ærlighet
+ærligheten
+ærlighetens
+ørlita
+ørlite
+ørliten
+røllik
+rølliken
+røllikene
+røllikens
+rølliker
+råmateriale
+råmaterialene
+råmaterialer
+råmaterialet
+råmaterialets
+råme
+råmen
+råmjølk
+råmjølka
+rømling
+rømlingen
+rømlingene
+rømlingens
+rømlinger
+rømme
+rømmen
+rømmer
+rømmere
+rømmeren
+rømmerens
+rømmeres
+rømmerne
+rømmernes
+rømt
+rømte
+ørn
+ørna
+råne
+ørne
+ørneklo
+ørnekloa
+rånen
+ørnen
+rånens
+ørnens
+Ørnes
+rønna
+rønne
+rønnen
+rønnene
+rønnens
+rønner
+rønnere
+rønneren
+rønnerens
+rønneres
+rønnerne
+rønnernes
+ørns
+røntgen
+røntgenen
+røntgenens
+røntgenstråle
+røntgenstrålen
+røntgenstrålens
+ørnugla
+ørnugle
+ørnuglene
+ørnugler
+ro
+roa
+roastbiff
+roastbiffen
+roastbiffens
+robba
+robbe
+robber
+robbere
+robberen
+robberens
+robberes
+robberne
+robbernes
+robbet
+robot
+roboten
+robotene
+robotens
+roboter
+robåt
+robåten
+robåtene
+robåtens
+robåter
+robust
+robuste
+rock
+rocke
+rockemusikk
+rockemusikken
+rockemusikkens
+rocken
+rockens
+rockwellhardhet
+rockwellhardheten
+rockwellhardhetens
+rode
+roden
+rodens
+rododendron
+rododendronen
+rododendronene
+rododendronens
+rododendroner
+roen
+roens
+rogn
+rogna
+rognebær
+rognebærene
+rognebæret
+rognebærets
+rognen
+rognene
+rognens
+rogner
+rognkjeks
+rognkjeksen
+rognkjeksens
+rojalisme
+rojalismen
+rojalismens
+rojalist
+rojalisten
+rojalistene
+rojalistens
+rojalister
+rojalistisk
+rok
+rokade
+rokaden
+rokadens
+roker
+rokere
+rokerer
+rokering
+rokeringa
+rokeringen
+rokeringene
+rokeringens
+rokeringer
+rokert
+rokerte
+roket
+rokk
+rokke
+rokken
+rokkens
+rokker
+rokket
+rokoa
+rokokko
+rokokkoen
+rokokkoens
+rolig
+rolige
+roligere
+roligst
+råolja
+råolje
+råoljen
+råoljens
+roll
+rolle
+rollen
+rollene
+rollens
+roller
+rom
+roman
+romanen
+romanene
+romanens
+romaner
+romanforfatter
+romanforfattere
+romanforfatteren
+romanforfatterens
+romanforfatteres
+romanforfatterne
+romanforfatternes
+romanse
+romansen
+romansene
+romansens
+romanser
+romansk
+romantiker
+romantikere
+romantikeren
+romantikerens
+romantikeres
+romantikerne
+romantikernes
+romantikk
+romantikken
+romantikkens
+romantisk
+romantiske
+rombe
+romben
+rombens
+romboide
+romboiden
+romboidens
+romer
+romere
+romeren
+romerens
+romerikslag
+romerikslaget
+romerikslagets
+romerne
+romersk
+romerske
+romfang
+romfanget
+romfangets
+romfarer
+romfarere
+romfareren
+romfarerens
+romfareres
+romfarerne
+romfarernes
+romfart
+romfarten
+romfartens
+romferd
+romferda
+romferden
+romferdens
+romhelg
+romhelga
+rominnhold
+rominnholdet
+rominnholdets
+romjul
+romjula
+romjulen
+romjulens
+romme
+rommelig
+rommelige
+rommelighet
+rommeligheten
+rommelighetens
+rommene
+rommer
+rommes
+rommet
+rommål
+rommålet
+rommålets
+romprogram
+romprogrammene
+romprogrammer
+romprogrammet
+romprogrammets
+romskip
+romskipene
+romskipet
+romskipets
+romslig
+romslige
+romsonde
+romsonden
+romsondens
+romstere
+romsterer
+romstert
+romsterte
+romtemperatur
+romtemperaturen
+romtemperaturens
+rop
+rope
+ropene
+roper
+ropert
+roperten
+ropertene
+ropertens
+roperter
+ropet
+ropt
+ropte
+roquefort
+roqueforten
+roquefortens
+ror
+rora
+rorbu
+rorbua
+rorbuene
+rorbuer
+rorene
+roret
+rorets
+rorgjenger
+rorgjengeren
+rorgjengerens
+rors
+rorskar
+rorskaren
+rorskarens
+ros
+rosa
+rose
+rosemaling
+rosemalingen
+rosemalingene
+rosemalingens
+rosemalinger
+rosen
+rosenbusk
+rosenbusken
+rosenbuskens
+rosende
+rosens
+roser
+roset
+rosete
+rosett
+rosetten
+rosettene
+rosettens
+rosetter
+rosevin
+rosevinen
+rosevinens
+rosin
+rosina
+rosinen
+rosinene
+rosinens
+rosiner
+roskap
+roskapet
+roskapets
+rosmarin
+rosmarinen
+rosmarinene
+rosmarinens
+rosmariner
+rossa
+rosse
+rossen
+rossene
+rossens
+rosser
+rossmål
+rossmålen
+rossmålene
+rossmålens
+rossmåler
+rost
+roste
+rosverdig
+rot
+rota
+rotasjon
+rotasjonen
+rotasjonene
+rotasjonens
+rotasjoner
+rotasjonsakse
+rotasjonsaksen
+rotasjonsaksens
+rotbløyta
+rotbløyte
+rotbløyten
+rotbløytens
+rote
+roten
+rotens
+roter
+rotere
+roterende
+roterer
+rotet
+rotete
+rothogger
+rothoggere
+rothoggeren
+rothoggerens
+rothoggeres
+rothoggerne
+rothoggernes
+rotor
+rotord
+rotordet
+rotordets
+rotoren
+rotorene
+rotorens
+rotorer
+rotrenning
+rotrenningen
+rotrenningens
+rotstaving
+rotstavingen
+rotstavingens
+rotta
+rotte
+rottefella
+rottefelle
+rottefellene
+rottefeller
+rotten
+rottene
+rottens
+rotter
+rottet
+rotting
+rottingen
+rottingene
+rottingens
+rottinger
+rotunde
+rotunden
+rotundens
+rotvelta
+rotvelte
+rotvelten
+rotveltens
+rotvelter
+rov
+rova
+rovdrift
+rovdrifta
+rovdriften
+rovdriftens
+rovdyr
+rovdyra
+rovdyrene
+rovdyret
+rovdyrets
+rovene
+rover
+rovere
+roveren
+roverens
+roveres
+roverne
+rovernes
+rovet
+rovets
+royal
+royaltyen
+røpa
+røpe
+røper
+røpet
+rår
+rør
+rørbar
+røre
+årrekka
+årrekke
+årrekken
+årrekkens
+årrekker
+rørende
+rørene
+rører
+røres
+røret
+ørret
+ørreten
+ørretene
+ørretens
+ørreter
+rørig
+årring
+årringen
+årringens
+rørledning
+rørledningen
+rørledningene
+rørledningens
+rørledninger
+rørlegger
+rørleggere
+rørleggeren
+rørleggerens
+rørleggeres
+rørleggerne
+rørleggernes
+rørlig
+rørnippel
+rørnippelen
+rørnippelens
+rørsla
+rørsle
+rørslene
+rørsler
+rørt
+rørte
+rås
+års
+råsa
+årsak
+årsaka
+årsaken
+årsakene
+årsakens
+årsaker
+årsaksforhold
+årsaksforholdet
+årsaksforholdets
+årsbasis
+årsberetning
+årsberetningen
+årsberetningene
+årsberetningens
+årsberetninger
+årsdag
+årsdagen
+årsdagens
+råseglet
+råsene
+råser
+årsgammal
+årsgammel
+årsinntekt
+årsinntekta
+årsinntekten
+årsinntektene
+årsinntektens
+årsinntekter
+årsjubileet
+årsjubileets
+årsjubileum
+ørsk
+røska
+ørska
+råskap
+råskapen
+råskapene
+råskapens
+råskaper
+råske
+røske
+ørske
+råsken
+ørsken
+råskens
+ørskent
+røsker
+ørsker
+røsket
+ørsket
+råskjær
+råskjæren
+råskjærene
+råskjærens
+råskjærer
+årsklasse
+årsklassen
+årsklassene
+årsklassens
+årsklasser
+ørskne
+årskull
+årskulla
+årskullene
+årskullet
+årskullets
+røslig
+årslønn
+årslønna
+årslønnen
+årslønnens
+ørsmå
+årsmelding
+årsmeldinga
+årsmeldingen
+årsmeldingene
+årsmeldingens
+årsmeldinger
+årsminne
+årsminnet
+årsmøte
+årsmøtet
+årsomsetning
+årsomsetningen
+årsomsetningens
+årspenger
+årsperiode
+årsperioden
+årsperiodens
+årsplan
+årsplanen
+årsplanene
+årsplanens
+årsplaner
+årsproduksjon
+årsproduksjonen
+årsproduksjonene
+årsproduksjonens
+årsproduksjoner
+årsrapport
+årsrapporten
+årsrapportene
+årsrapportens
+årsrapporter
+årsregnskap
+årsregnskapa
+årsregnskapene
+årsregnskapet
+årsregnskapets
+årsskifte
+årsskiftet
+årsskrift
+årsskriftet
+årsskriftets
+røsslyng
+røsslyngen
+røsslyngens
+røsslynget
+røsslyngets
+røst
+røsta
+Ørsta
+årstal
+årstalet
+årstalets
+årstall
+årstallene
+årstallet
+årstallets
+røste
+ærstegg
+ærsteggen
+ærsteggene
+ærsteggens
+ærstegger
+røsten
+røstens
+røster
+røstet
+årstid
+årstida
+årstiden
+årstidene
+årstidens
+årstider
+råstoff
+råstoffa
+råstoffene
+råstoffer
+råstoffet
+råstoffets
+årsvekst
+årsveksten
+årsvekstens
+ørt
+råtass
+råtassen
+råtassens
+råte
+råten
+råtens
+årtier
+årtiet
+råtne
+råtner
+råtnet
+rått
+råtten
+råttenskap
+råttenskapen
+råttenskapens
+røtter
+årtusen
+årtusener
+årtusenet
+årtusenets
+ru
+rua
+rubb
+rubel
+rubelen
+rubelens
+rubidium
+rubin
+rubinen
+rubinene
+rubinens
+rubiner
+rublene
+rubler
+rubrikk
+rubrikken
+rubrikkene
+rubrikkens
+rubrikker
+rubrisere
+rubriserer
+rubrisert
+rubriserte
+rudiment
+rudimenta
+rudimentene
+rudimenter
+rudimentet
+rudimentets
+rudimentær
+rudkall
+rudkallen
+rudkallene
+rudkallens
+rudkaller
+rue
+ruff
+ruffen
+ruffens
+rug
+rugda
+rugde
+rugden
+rugdene
+rugdens
+rugder
+rugdetrekk
+rugdetrekket
+rugdetrekkets
+ruge
+ruger
+rugga
+rugge
+ruggen
+ruggene
+ruggens
+rugger
+rugget
+rugle
+ruglet
+ruglete
+ruin
+ruinen
+ruinene
+ruinens
+ruiner
+ruinere
+ruka
+ruke
+ruken
+rukene
+rukens
+ruker
+rukke
+rukkel
+rukkelet
+rukkelets
+rukket
+ruklet
+ruklete
+rulade
+ruladen
+ruladens
+rulett
+ruletten
+rulettene
+rulettens
+ruletter
+rull
+rulla
+rulle
+rullebane
+rullebanen
+rullebanens
+rulleblad
+rullebladene
+rulleblader
+rullebladet
+rullebladets
+rullegardin
+rullegardina
+rullegardiner
+rullegardinet
+rullegardinets
+rullen
+rullende
+rullens
+ruller
+rullere
+rullerende
+rullestol
+rullestolen
+rullestolene
+rullestolens
+rullestoler
+rullet
+rumener
+rumenere
+rumeneren
+rumenerens
+rumeneres
+rumenerne
+rumenernes
+rumensk
+rumenske
+rumla
+rumle
+rumler
+rumlet
+rummel
+rummelen
+rummelens
+rummelet
+rummelets
+rumpa
+rumpe
+rumpene
+rumper
+rumpetroll
+rumpetrolla
+rumpetrollene
+rumpetrollet
+rumpetrollets
+rund
+rundbrenner
+rundbrennere
+rundbrenneren
+rundbrennerens
+rundbrenneres
+rundbrennerne
+rundbrennernes
+runde
+rundebordskonferanse
+rundebordskonferansen
+rundebordskonferansens
+rundelig
+runden
+rundens
+runder
+rundet
+runding
+rundingen
+rundingene
+rundingens
+rundinger
+rundreise
+rundreisen
+rundreisens
+rundskriv
+rundskriva
+rundskrivene
+rundskrivet
+rundskrivets
+rundspørring
+rundspørringa
+rundspørringen
+rundspørringens
+rundstykke
+rundstykkene
+rundstykker
+rundstykket
+rundt
+rundtur
+rundturen
+rundturene
+rundturens
+rundturer
+rune
+runga
+runge
+ærunge
+ærungen
+ærungens
+runger
+runget
+runke
+runn
+runne
+runnen
+runolog
+runologen
+runologene
+runologens
+runologer
+rus
+rusdrikk
+rusdrikken
+rusdrikkens
+rusen
+rusens
+rush
+rushe
+rushet
+rushtid
+rushtida
+rushtiden
+rushtidene
+rushtidens
+rushtider
+rusk
+ruske
+rusken
+ruskens
+rusket
+ruskete
+ruskevær
+ruskeværet
+ruskeværets
+rusle
+rusler
+ruslet
+russ
+russen
+russens
+russer
+russere
+russeren
+russerens
+russeres
+russerne
+russernes
+russetog
+russetoget
+russetogets
+russisk
+russiske
+rust
+rusta
+rustangrepet
+ruste
+rusten
+rustens
+ruster
+rustet
+rustfri
+rustfrie
+rustfritt
+rustikk
+rustikke
+rustikt
+rusting
+rustinga
+rustne
+rustning
+rustningen
+rustningens
+rustninger
+rustrøde
+rut
+ruta
+rute
+rutebil
+rutebilen
+rutebilene
+rutebilens
+rutebiler
+rutefly
+ruteflyet
+ruteflyets
+ruteflyselskap
+ruteflyselskapa
+ruteflyselskapene
+ruteflyselskaper
+ruteflyselskapet
+ruteflyselskapets
+ruten
+rutene
+rutenett
+rutenettet
+rutenettets
+ruteopplegg
+ruteopplegget
+ruteoppleggets
+ruter
+rutet
+rutete
+ruthenium
+rutheniumet
+rutheniumets
+rutine
+rutinemessig
+rutinen
+rutinene
+rutinens
+rutiner
+rutinert
+rutinerte
+rutla
+rutle
+rutlet
+rutlets
+rutsja
+rutsje
+rutsjer
+rutsjet
+rutt
+rutte
+ruv
+ruve
+ruvende
+ruvet
+røva
+årvak
+råvare
+råvaren
+råvarene
+råvarens
+råvarepris
+råvareprisene
+råvarer
+røve
+årveg
+årvegen
+årvegens
+røver
+ærverdig
+ærverdighet
+ærverdigheten
+ærverdighetens
+røvere
+røveren
+røverens
+røveres
+røverne
+røvernes
+røvet
+årviss
+årvisse
+årvisst
+årvåken
+årvåkenhet
+årvåkenheten
+årvåkenhetens
+årvåkent
+årvåkne
+råvær
+ærvær
+råværet
+ærværet
+råværets
+ærværets
+rwanda
+rwander
+rwandere
+rwanderen
+rwanderens
+rwanderes
+rwanderne
+rwandernes
+rwandisk
+ry
+røy
+røya
+rydd
+rydde
+rydder
+ryddet
+rydding
+ryddinga
+rydning
+rydningen
+rydningene
+rydningens
+rydninger
+rye
+røye
+ryer
+røyer
+ryet
+rygg
+rygge
+ryggen
+ryggens
+ryggesløs
+rygget
+ryggrad
+ryggrada
+ryggraden
+ryggradens
+ryggsekk
+ryggsekken
+ryggsekkene
+ryggsekkens
+ryggsekker
+ryggstø
+ryggstøet
+ryggstøets
+røyk
+ryke
+røyke
+røykelse
+røykelsen
+røykelsens
+røyken
+rykende
+røykens
+ryker
+røyker
+røyking
+røykinga
+røykingen
+røykingens
+rykk
+rykke
+rykken
+rykkens
+rykker
+rykkerbrev
+rykkerbrevet
+rykkerbrevets
+rykket
+rykkevis
+rykning
+rykningen
+rykningens
+røykskaderådet
+rykt
+røykt
+rykte
+røykte
+ryktedes
+ryktene
+rykter
+ryktes
+ryktesmed
+ryktesmeden
+ryktesmedens
+ryktet
+røykutvikling
+røykutviklingen
+røykutviklingens
+ryllik
+rylliken
+ryllikene
+ryllikens
+rylliker
+røynd
+røynda
+røyndom
+røyndommen
+røyndommens
+røyne
+røyner
+rynka
+rynke
+rynken
+rynkene
+rynkens
+rynker
+rynket
+røynsla
+røynsle
+røynslene
+røynsler
+røynt
+røynte
+rypa
+rype
+rypen
+rypene
+rypens
+ryper
+ryr
+røyr
+røyra
+røyrene
+røyrer
+røys
+røysa
+røysene
+røyser
+rysj
+rysja
+rysjen
+rysjene
+rysjens
+rysjer
+rysjet
+røyskatt
+røyskatten
+røyskattene
+røyskattens
+røyskatter
+ryste
+rystelse
+rystelsen
+rystelsens
+rystende
+ryster
+rystet
+røyta
+ryte
+røyte
+ryter
+røyter
+røytet
+røyting
+røytinga
+rytme
+rytmen
+rytmene
+rytmens
+rytmer
+rytmesans
+rytmesansen
+rytmesansens
+rytmisk
+rytmiske
+rytt
+røytt
+røytte
+rytter
+ryttere
+rytteren
+rytterens
+rytterne
+rytters
+s
+så
+ås
+øs
+sa
+såa
+æsa
+sabb
+sabba
+sabbat
+sabbaten
+sabbatene
+sabbatens
+sabbater
+sabben
+sabbene
+sabbens
+sabber
+sabbet
+sabel
+sabelen
+sabelens
+sable
+sabler
+sabotasje
+sabotasjen
+sabotasjens
+sabotere
+sabotert
+saboterte
+sabotør
+sabotøren
+sabotørene
+sabotørens
+sabotører
+saddukeer
+saddukeere
+saddukeeren
+saddukeerens
+saddukeeres
+saddukeerne
+saddukeernes
+sadisme
+sadismen
+sadismens
+sadist
+sadisten
+sadistene
+sadistens
+sadister
+sadistisk
+safe
+safen
+safens
+safety
+saffian
+saffianet
+saffianets
+safir
+safiren
+safirene
+safirens
+safirer
+safran
+safranen
+safranene
+safranens
+safraner
+saft
+safta
+safte
+saftig
+sag
+saga
+sagaen
+sagaene
+sagaens
+sagaer
+sagblad
+sagbladene
+sagblader
+sagbladet
+sagbladets
+sagbruk
+sagbrukene
+sagbruket
+sagbrukets
+sagbukk
+sagbukken
+sagbukkens
+sagd
+sagde
+sage
+sagene
+saget
+sagflis
+sagflisa
+sagmugg
+sagmuggen
+sagmuggens
+sagn
+sagnet
+sagnets
+sago
+sagoen
+sagoens
+sagogryn
+sagogrynet
+sagogrynets
+sagt
+sagtakka
+sak
+saka
+saken
+sakene
+sakens
+saker
+sakesløs
+sakfører
+sakførere
+sakføreren
+sakførerens
+sakføreres
+sakførerne
+sakførernes
+sakførsel
+sakførselen
+sakførselens
+sakk
+sakka
+sakkarin
+sakkarinen
+sakkarinens
+sakke
+sakket
+sakkunnig
+sakkunnskap
+sakkunnskapen
+sakkunnskapens
+sakkyndig
+sakkyndige
+sakkyndiges
+sakkyndighet
+sakkyndigheten
+sakkyndighetens
+saklig
+saklige
+saklighet
+sakligheten
+saklighetens
+saklista
+sakliste
+saklisten
+saklistens
+sakn
+sakna
+saknad
+saknaden
+saknadens
+sakne
+saknet
+sakral
+sakrament
+sakramenta
+sakramentene
+sakramenter
+sakramentet
+sakramentets
+sakregister
+sakregisteret
+sakregisterets
+sakregistra
+sakregistre
+sakregistrene
+sakregistret
+sakregistrets
+sakristi
+sakristia
+sakristiene
+sakristier
+sakristiet
+sakristiets
+saks
+saksa
+saksanlegg
+saksanlegga
+saksanleggene
+saksanlegget
+saksanleggets
+saksbehandler
+saksbehandlere
+saksbehandleren
+saksbehandlerens
+saksbehandleres
+saksbehandlerne
+saksbehandlernes
+saksbehandling
+saksbehandlinga
+saksbehandlingen
+saksbehandlingens
+saksbehandlingsfeil
+saksbehandlingsfeilen
+saksbehandlingsfeilene
+saksbehandlingsfeilens
+sakse
+saksen
+saksens
+sakser
+saksere
+sakseren
+sakserens
+sakseres
+sakserne
+saksernes
+sakset
+saksforberedelse
+saksforberedelsen
+saksforberedelsens
+saksgang
+saksgangen
+saksgangens
+saksgebyr
+saksgebyret
+saksgebyrets
+saksinnhold
+saksinnholdet
+saksinnholdets
+saksisk
+saksøke
+saksøker
+saksøkere
+saksøkeren
+saksøkerens
+saksøkeres
+saksøkerne
+saksøkernes
+saksøkt
+saksøkte
+sakslista
+saksliste
+sakslisten
+sakslistens
+saksofon
+saksofonen
+saksofonene
+saksofonens
+saksofoner
+saksomkostning
+saksomkostningene
+saksomkostninger
+saksområda
+saksområde
+saksområdene
+saksområder
+saksområdet
+saksområdets
+saksordfører
+saksordførere
+saksordføreren
+saksordførerens
+saksordføreres
+saksordførerne
+saksordførernes
+saktens
+saktere
+saktmodig
+saktna
+saktne
+saktner
+saktnet
+sal
+salamander
+salamanderen
+salamanderens
+salamandrene
+salat
+salaten
+salatene
+salatens
+salater
+salathode
+salathodene
+salathoder
+salathodet
+salathodets
+salder
+saldere
+salderer
+saldering
+salderinga
+salderingen
+salderingene
+salderingens
+salderinger
+salderingspost
+salderingsposten
+salderingspostene
+salderingspostens
+salderingsposter
+saldert
+salderte
+saldo
+saldoen
+saldoene
+saldoens
+saldoer
+salen
+salens
+salg
+salget
+salgets
+salgs
+salgsapparat
+salgsapparatet
+salgsapparatets
+salgsavdeling
+salgsavdelinga
+salgsavdelingen
+salgsavdelingene
+salgsavdelingens
+salgsavdelinger
+salgsinntekt
+salgsinntekten
+salgsinntektene
+salgsinntektens
+salgsinntekter
+salgslag
+salgslaga
+salgslagene
+salgslaget
+salgslagets
+salgsmessig
+salgsorganisasjon
+salgsorganisasjonen
+salgsorganisasjonene
+salgsorganisasjonens
+salgsorganisasjoner
+salgssjef
+salgssjefen
+salgssjefene
+salgssjefens
+salgssjefer
+salgssummen
+salgssummens
+salgsverdi
+salgsverdien
+salgsverdiens
+salig
+saliggjørende
+salighet
+saligheten
+salighetens
+saling
+salingshorn
+salisylsyra
+salisylsyre
+salmaker
+salmakere
+salmakeren
+salmakerens
+salmakeres
+salmakerne
+salmakernes
+salme
+salmebok
+salmeboka
+salmeboken
+salmebokens
+salmen
+salmene
+salmens
+salmer
+salmevers
+salmeversa
+salmeversene
+salmeverset
+salmeversets
+salmiakk
+salmiakken
+salmiakkens
+salomonisk
+salong
+salongen
+salongene
+salongens
+salonger
+salonggevær
+salonggeværet
+salonggeværets
+salpeter
+salpeteren
+salpeterens
+salpetersyra
+salpetersyre
+salpetersyren
+salpetersyrens
+salær
+salæra
+åsalære
+åsalæren
+salærene
+åsalærens
+salærer
+salæret
+salærets
+salt
+salta
+salte
+saltet
+saltfisk
+saltfisken
+saltfiskens
+salting
+saltinga
+saltingen
+saltingens
+saltkar
+saltkara
+saltkarene
+saltkaret
+saltkarets
+salto
+saltoen
+saltoene
+saltoens
+saltoer
+saltomortale
+saltomortalen
+saltomortalens
+saltsild
+saltsilda
+saltsilder
+saltslag
+saltslaget
+saltslagets
+saltsprenge
+saltsprenger
+saltsyra
+saltsyre
+salutt
+salutten
+saluttene
+saluttens
+salutter
+saluttere
+salutterer
+saluttert
+salutterte
+salva
+salvadoraner
+salvadoranere
+salvadoraneren
+salvadoranerens
+salvadoraneres
+salvadoranerne
+salvadoranernes
+salvadoransk
+salve
+salvelsesfull
+salven
+salvens
+salvet
+salvie
+salvien
+salviens
+samarbeid
+samarbeidd
+samarbeidde
+samarbeide
+samarbeidende
+samarbeider
+samarbeides
+samarbeidet
+samarbeidets
+samarbeids
+samarbeidsavtale
+samarbeidsavtalen
+samarbeidsavtalens
+samarbeidsform
+samarbeidsforma
+samarbeidsformen
+samarbeidsformene
+samarbeidsformens
+samarbeidsformer
+samarbeidskomité
+samarbeidskomiteen
+samarbeidskomiteene
+samarbeidskomiteens
+samarbeidskomiteer
+samarbeidsutvalg
+samarbeidsutvalga
+samarbeidsutvalgene
+samarbeidsutvalget
+samarbeidsutvalgets
+samarbeidsvilje
+samarbeidsviljen
+samarbeidsviljens
+samarie
+samarien
+samariene
+samariens
+samarier
+samaritan
+samaritanen
+samaritanene
+samaritanens
+samaritaner
+samaritt
+samaritten
+samarittene
+samarittens
+samaritter
+samba
+sambaen
+sambaene
+sambaens
+sambaer
+samband
+sambanda
+sambandene
+sambandet
+sambandets
+sambandsstat
+sambandsstaten
+sambandsstatene
+sambandsstatens
+sambandsstater
+sambinding
+sambindinga
+sambo
+samboen
+samboene
+samboens
+samboer
+sambygding
+sambygdingen
+sambygdingene
+sambygdingens
+sambygdinger
+samd
+samdrektig
+samdrektighet
+samdrektigheten
+samdrektighetens
+same
+samefolk
+samefolkene
+samefolket
+samefolkets
+sameie
+sameier
+sameksistens
+sameksistensen
+sameksistensens
+samen
+samene
+samenes
+samens
+samer
+samfengt
+samferdsel
+samferdselen
+samferdselens
+samferdselsdepartement
+samferdselsdepartementet
+samferdselsdepartementets
+samferdselskomité
+samferdselskomiteen
+samferdselskomiteene
+samferdselskomiteens
+samferdselskomiteer
+samferdselsminister
+samferdselsministere
+samferdselsministeren
+samferdselsministerens
+samferdselsministeres
+samferdselsministerne
+samferdselsministernes
+samferdsla
+samferdsle
+samfølelse
+samfølelsen
+samfølelsens
+samfull
+samfulle
+samfunn
+samfunnene
+samfunnet
+samfunnets
+samfunns
+samfunnsforhold
+samfunnsforholda
+samfunnsforholdene
+samfunnsgruppa
+samfunnsgruppe
+samfunnsgruppen
+samfunnsgruppene
+samfunnsgruppens
+samfunnsgrupper
+samfunnshus
+samfunnshuset
+samfunnshusets
+samfunnsøkonomiske
+samfunnsliv
+samfunnslivet
+samfunnslivets
+samfunnslære
+samfunnsmessige
+samfunnsspørsmål
+samfunnsspørsmålet
+samfunnsspørsmålets
+samfunnssyn
+samfunnssynet
+samfunnssynets
+samfunnsutvikling
+samfunnsutviklingen
+samfunnsutviklingens
+samhandel
+samhandelen
+samhandelens
+samhold
+samholdet
+samholdets
+samhørighet
+samhørigheten
+samhørighetens
+samhug
+samisk
+samiske
+samkjensle
+samkjøring
+samkjøringen
+samklang
+samkvem
+samkvemmet
+samkvemmets
+samla
+samlag
+samlaget
+samle
+samleband
+samlebandet
+samlebandets
+samlebånd
+samlebåndet
+samlebåndets
+samlede
+samleia
+samleie
+samleier
+samleiet
+samlende
+samler
+samles
+samlet
+samlete
+samling
+samlinga
+samlingen
+samlingene
+samlinger
+samlingers
+samlingsmerke
+samlingsmerket
+samlingsmerkets
+samlingssted
+samlingsstedene
+samlingssteder
+samlingsstedet
+samlingsstedets
+samliv
+samlivet
+samlivets
+samlivspartner
+samlivspartnere
+samlivspartneren
+samlivspartnerens
+samlivspartneres
+samlivspartnerne
+samlivspartnernes
+sammalt
+samme
+sammen
+sammenblanding
+sammenblandingen
+sammenblandingens
+sammenbrakt
+sammenbrott
+sammenbrottet
+sammenbrottets
+sammenbrudd
+sammenbrudda
+sammenbruddene
+sammenbruddet
+sammenbruddets
+sammendrag
+sammendraga
+sammendragene
+sammendraget
+sammendragets
+sammendraging
+sammendratte
+sammenfall
+sammenfallen
+sammenfallende
+sammenfallens
+sammenfaller
+sammenfallet
+sammenfallets
+sammenfatning
+sammenfatninga
+sammenfatta
+sammenfatte
+sammenfatter
+sammenfattes
+sammenfattet
+sammenføyning
+sammenføyningen
+sammenføyningene
+sammenføyningens
+sammenføyninger
+sammenheng
+sammenhengen
+sammenhengende
+sammenhengene
+sammenhengens
+sammenhenger
+sammenhold
+sammenholde
+sammenholder
+sammenholdes
+sammenholdt
+sammenkalle
+sammenkallelsen
+sammenkallelsens
+sammenkaller
+sammenkalles
+sammenkalt
+sammenkalte
+sammenkobling
+sammenkomst
+sammenkomsten
+sammenkomstene
+sammenkomstens
+sammenkomster
+sammenlagt
+sammenleggbar
+sammenlign
+sammenligna
+sammenlignbare
+sammenlignbart
+sammenligne
+sammenlignende
+sammenligner
+sammenlignes
+sammenlignet
+sammenligning
+sammenligninga
+sammenligningen
+sammenligningene
+sammenligningens
+sammenligninger
+sammenlikna
+sammenliknbare
+sammenliknbart
+sammenlikne
+sammenlikner
+sammenliknes
+sammenliknet
+sammenlikning
+sammenlikningen
+sammenlikningene
+sammenlikningens
+sammenlikninger
+sammenpakka
+sammenraska
+sammensatt
+sammensatte
+sammensetning
+sammensetninga
+sammensetningen
+sammensetningene
+sammensetninger
+sammenskriving
+sammenskrivinga
+sammenslåing
+sammenslåinga
+sammenslåingen
+sammenslåinger
+sammenslutning
+sammenslutningen
+sammenslutningens
+sammenslutninger
+sammensmelting
+sammenstilling
+sammenstillinga
+sammenstillingene
+sammenstillingenes
+sammenstillinger
+sammenstøt
+sammenstøtene
+sammenstøtet
+sammenstøtets
+sammensuriene
+sammensurier
+sammensuriet
+sammensuriets
+sammensurium
+sammensveisa
+sammensvergelse
+sammensvergelsen
+sammensvergelsene
+sammensvergelsens
+sammensvergelser
+sammentreff
+sammentreffet
+sammentreffets
+sammenvoksing
+sammenvoksingen
+sammenvoksingens
+sammesteds
+samnorsk
+samnorsken
+samnorskens
+samojed
+samojeden
+samojedens
+samordna
+samordne
+samordnede
+samordner
+samordnes
+samordnet
+samordning
+samordninga
+samordningen
+samordningene
+samordningens
+samordninger
+samovar
+samovaren
+samovarene
+samovarens
+samovarer
+samproduksjon
+samproduksjonen
+samproduksjonens
+samproduksjoner
+samrå
+samråd
+samrøda
+samrådde
+samrøde
+samrødene
+samrøder
+samrådet
+samrådets
+samrøre
+samrøret
+sams
+samsending
+samsendinga
+samsendinger
+samskatt
+samskatten
+samskattens
+samskipnad
+samskipnaden
+samspell
+samspellet
+samspellets
+samspill
+samspille
+samspiller
+samspillet
+samstave
+samstaver
+samstemme
+samstemmer
+samstemmig
+samstemt
+samstemte
+samstundes
+samsvar
+samsvara
+samsvare
+samsvarer
+samsvaret
+samsvart
+samsvarte
+samt
+samtala
+samtale
+samtalen
+samtalende
+samtalene
+samtalens
+samtaler
+samtales
+samtalt
+samtalte
+samtid
+samtida
+samtiden
+samtidens
+samtidig
+samtidige
+samtids
+samtidsmusikk
+samtidsmusikken
+samtidsmusikkens
+samtlige
+samtykke
+samtykker
+samtykkes
+samtykket
+samtykt
+samtykte
+samurai
+samuraien
+samuraiene
+samuraiens
+samuraier
+samvelde
+samveldeland
+samveldelandet
+samveldelandets
+samveldet
+samvett
+samvettslaus
+samvirke
+samvirkelag
+samvirkelaga
+samvirkelagene
+samvirkelaget
+samvirkelagets
+samvirkende
+samvirket
+samvittighet
+samvittigheten
+samvittighetens
+samvittighetslaus
+samvær
+samværa
+samværene
+samværet
+samværets
+samværsform
+samværsforma
+samværsformen
+samværsformene
+samværsformens
+samværsformer
+samværsrett
+samværsretten
+samværsrettens
+sanatoria
+sanatorier
+sanatoriet
+sanatoriets
+sanatorium
+sand
+sandal
+sandalen
+sandalene
+sandalens
+sandaler
+sandbunn
+sandbunnen
+sandbunnens
+sanden
+sandens
+sandet
+sandete
+sandhaug
+sandhi
+sandkassa
+sandkasse
+sandkassen
+sandkassens
+sandmel
+sandmelet
+sandmelets
+sandpapir
+sandpapiret
+sandpapirets
+sandvika
+sandwich
+sandwichen
+sandwichene
+sandwichens
+sandwicher
+sanere
+sanerer
+sanering
+saneringa
+saneringen
+saneringene
+saneringens
+saneringer
+sanert
+sanerte
+sang
+sangbar
+sangen
+sangene
+sangens
+sanger
+sangere
+sangeren
+sangerens
+sangeres
+sangerinne
+sangerinnen
+sangerinnens
+sangerne
+sangernes
+sanggruppa
+sanggruppe
+sanggruppen
+sanggruppene
+sanggruppens
+sanggrupper
+sangkrefter
+sangviniker
+sangvinikere
+sangvinikeren
+sangvinikerens
+sangvinikeres
+sangvinikerne
+sangvinikernes
+sangvinsk
+sanitet
+saniteten
+sanitetens
+sanitetsforening
+sanitetsforeninga
+sanitetsforeningen
+sanitetsforeningene
+sanitetsforeningens
+sanitetsforeninger
+sanitær
+sanitæranlegg
+sanitæranlegga
+sanitæranleggene
+sanitæranlegget
+sanitæranleggets
+sanitære
+sanitært
+sanitærutstyr
+sanitærutstyret
+sanitærutstyrets
+sank
+sanke
+sanksjon
+sanksjonen
+sanksjonene
+sanksjonens
+sanksjoner
+sanksjonere
+sanksjonerer
+sanksjonert
+sanksjonerte
+sanktbernhardshund
+sanktbernhardshunden
+sanktbernhardshundens
+sankthans
+sankthansaften
+sankthansaftenen
+sankthansaftenens
+sankthansbål
+sankthansbålet
+sankthansbålets
+sankthansen
+sankthansens
+sanktveitsdans
+sanktveitsdansen
+sanktveitsdansens
+sann
+sanndrømt
+sanndru
+sanne
+sannelig
+sannferdig
+sannhet
+sannheten
+sannhetene
+sannhetens
+sannheter
+sanning
+sanninga
+sanningen
+sanningene
+sanningens
+sanninger
+sannsiger
+sannsigere
+sannsigeren
+sannsigerens
+sannsigeres
+sannsigerne
+sannsigernes
+sannspådd
+sannspurt
+sannsynlig
+sannsynlige
+sannsynlighet
+sannsynligheten
+sannsynlighetens
+sannsynligvis
+sans
+sanse
+sanselaus
+sanselause
+sanselaust
+sanselig
+sanseløs
+sanseløst
+sansen
+sansens
+sanser
+sansing
+sansinga
+sansingen
+sansingens
+sanskrit
+sanskritet
+sanskritets
+sanskulott
+sanskulotten
+sanskulottene
+sanskulottens
+sanskulotter
+sansning
+sansningen
+sansningens
+sant
+santal
+santalen
+santalene
+santalens
+santaler
+saprofytt
+saprofytten
+saprofyttene
+saprofyttens
+saprofytter
+sarasener
+sarasenere
+saraseneren
+sarasenerens
+saraseneres
+sarasenerne
+sarasenernes
+sardell
+sardellen
+sardellene
+sardellens
+sardeller
+sardin
+sardinen
+sardinene
+sardinens
+sardiner
+sarkasme
+sarkasmen
+sarkasmens
+sarkastisk
+sarkofag
+sarkofagen
+sarkofagene
+sarkofagens
+sarkofager
+sart
+satan
+satanen
+satanens
+satellitt
+satellitten
+satellittene
+satellittens
+satellitter
+sateng
+satengen
+satengens
+satire
+satiren
+satirens
+satiriker
+satirikere
+satirikeren
+satirikerens
+satirikeres
+satirikerne
+satirikernes
+satirisk
+satisfaksjon
+satisfaksjonen
+satisfaksjonens
+satisfisere
+satisfiserer
+satisfisert
+satisfiserte
+satrap
+satrapen
+satrapene
+satrapens
+satraper
+sats
+satsa
+satse
+satsen
+satsene
+satsens
+satser
+satses
+satset
+satsing
+satsinga
+satsingen
+satsingens
+satsinger
+satt
+satte
+saturn
+satyr
+satyren
+satyrene
+satyrens
+satyrer
+sau
+saubukk
+saucisse
+saucissen
+saucissens
+saudiaraber
+saudiarabere
+saudiaraberen
+saudiaraberens
+saudiaraberes
+saudiaraberne
+saudiarabernes
+saudiarabisk
+saueal
+sauealet
+sauealets
+saueavl
+saueavlen
+saueavlens
+sauekjøtt
+sauekjøttet
+sauekjøttets
+sauen
+sauene
+sauer
+saug
+saulam
+saulammet
+saulammets
+saumfare
+saumfarer
+saumfaret
+saumfaring
+saumfaringa
+saumfaringen
+saumfaringens
+saumfart
+saumfor
+saup
+saupet
+saupets
+saus
+sausa
+sause
+sausen
+sausens
+sauset
+savanne
+savannen
+savannens
+saven
+savl
+savn
+savna
+savne
+savnede
+savner
+savnes
+savnet
+scandium
+scene
+scenen
+scenene
+scenens
+scener
+sceniske
+scherzo
+scherzoen
+scherzoens
+schæfer
+schæfere
+schæferen
+schæferens
+schæferes
+schæferhund
+schæferhunden
+schæferhundene
+schæferhundens
+schæferhunder
+schæferne
+schæfernes
+schizofren
+schizofreni
+schizofrenien
+schizofreniens
+schizofrent
+science
+scient
+scooter
+scootere
+scooteren
+scooterens
+scooteres
+scooterne
+scooternes
+score
+scoret
+scoring
+scoringen
+scoringene
+scoringens
+scoringer
+scriptgirl
+sculler
+scullere
+sculleren
+scullerens
+sculleres
+scullerne
+scullernes
+sæd
+sådan
+sådanne
+sådant
+sådd
+sådde
+sæden
+sæding
+sædingen
+sædingens
+sødme
+sødmen
+sødmens
+se
+æse
+øse
+seanse
+seansen
+seansens
+sebra
+sebraen
+sebraene
+sebraens
+sebraer
+sed
+sedat
+sedativ
+seddel
+seddelen
+seddelens
+sedelig
+sedelighet
+sedeligheten
+sedelighetens
+seden
+sedene
+sedens
+seder
+sedertre
+sediment
+sedimentene
+sedimenter
+sedimentet
+sedimentets
+sedimentær
+sedimentære
+sedimentært
+sedlene
+sedler
+sedvane
+sedvanen
+sedvanens
+sedvanerett
+sedvaneretten
+sedvanerettens
+sedvanlig
+seeda
+seede
+seedet
+seer
+seere
+seeren
+seerens
+seerforhold
+seerforholdene
+seerne
+sees
+sefyr
+sefyren
+sefyrens
+seg
+seget
+segl
+segla
+seglbåt
+seglbåten
+seglbåtens
+segle
+seglet
+segment
+segmenta
+segmentene
+segmenter
+segmentet
+segmentets
+segn
+segna
+segne
+segneferdig
+segregasjon
+segregasjonen
+segregasjonene
+segregasjonens
+segregasjoner
+segregere
+segregerer
+segregert
+segregerte
+sei
+seid
+seide
+seidel
+seidelen
+seidelens
+seiden
+seidens
+seidler
+seidmann
+seidmannen
+seidmannens
+seidmenn
+seidmennene
+seidmennenes
+seidmenns
+seie
+seien
+seier
+seieren
+seierens
+seierherre
+seierherren
+seierherrens
+seiersgang
+seiersgangen
+seiersgangens
+seifiske
+seifisket
+seig
+seigherde
+seigliva
+seil
+seilas
+seilasen
+seilasene
+seilasens
+seilaser
+seilbåt
+seilbåten
+seilbåtene
+seilbåtens
+seilbåter
+seile
+seilende
+seilene
+seiler
+seilere
+seileren
+seilerens
+seileres
+seilerne
+seilernes
+seilet
+seilsport
+seilt
+seilte
+sein
+seine
+seinere
+seinest
+seineste
+seinhøst
+seinhøsten
+seinhøstens
+seinhøstes
+seinka
+seinke
+seinker
+seinket
+seinkvelds
+seint
+seintenkt
+seinvoren
+seira
+seire
+seirende
+seirene
+seirer
+seiret
+seise
+seising
+seisingen
+seisingens
+seismisk
+seismograf
+seismografen
+seismografene
+seismografens
+seismografer
+sek
+sekel
+sekelet
+sekelets
+sekelskifte
+sekelskiftet
+sekelskiftets
+sekk
+sekkeband
+sekkebandet
+sekkebandets
+sekken
+sekkens
+sekker
+sekla
+seklene
+sekler
+seklet
+seklets
+sekresjon
+sekresjonen
+sekresjonene
+sekresjonens
+sekresjoner
+sekret
+sekreta
+sekretariat
+sekretariata
+sekretariatene
+sekretariatet
+sekretariatets
+sekretene
+sekreter
+sekretet
+sekretets
+sekretær
+sekretæren
+sekretærene
+sekretærens
+sekretærer
+seks
+seksa
+seksaen
+seksaene
+seksaens
+seksaer
+seksdel
+seksdelen
+seksdelens
+seksjon
+seksjonen
+seksjonene
+seksjonens
+seksjoner
+seksæring
+seksæringen
+seksæringene
+seksæringens
+seksæringer
+sekstant
+sekstanten
+sekstantene
+sekstantens
+sekstanter
+seksten
+sekstende
+sekstendel
+sekstendelen
+sekstendelens
+sekstett
+sekstetten
+sekstettene
+sekstettens
+sekstetter
+seksti
+sekstidel
+sekstidelen
+sekstidelens
+sekstiende
+sekstiførste
+seksualitet
+seksualiteten
+seksualitetens
+seksualmoral
+seksualmoralen
+seksualmoralens
+seksuell
+seksuelle
+sekt
+sekta
+sekten
+sektene
+sektens
+sekter
+sekterisk
+sektor
+sektoren
+sektorene
+sektorens
+sektorer
+sektortenkning
+sektortenkningen
+sektortenkningens
+sekularisere
+sekulariserer
+sekularisert
+sekulariserte
+sekund
+sekunda
+sekundant
+sekundanten
+sekundantene
+sekundantens
+sekundanter
+sekundene
+sekunder
+sekundere
+sekunderer
+sekundert
+sekunderte
+sekundet
+sekundets
+sekundær
+sekundærarbeidsplass
+sekundærarbeidsplassen
+sekundærarbeidsplassene
+sekundærarbeidsplassens
+sekundærarbeidsplasser
+sekundære
+sekundært
+sekundviser
+sekundvisere
+sekundviseren
+sekundviserens
+sekundviseres
+sekundviserne
+sekundvisernes
+sekvens
+sekvensen
+sekvensene
+sekvensens
+sekvenser
+sel
+sele
+seleksjon
+seleksjonen
+seleksjonene
+seleksjonens
+seleksjoner
+selektiv
+selektive
+selektivitet
+selektiviteten
+selektivitetens
+selektivt
+selen
+selene
+selet
+selfangst
+selfangsten
+selfangstens
+selg
+selge
+selger
+selgere
+selgeren
+selgerens
+selgeres
+selgerne
+selgernes
+selges
+selhund
+selhunden
+selhundens
+selja
+selje
+seljen
+seljene
+seljens
+seljer
+selleri
+sellerien
+selleriens
+selot
+seloten
+selotene
+selotens
+seloter
+selskap
+selskapelig
+selskapene
+selskapenes
+selskaper
+selskapers
+selskapet
+selskapets
+selskaps
+selskapslokala
+selskapslokale
+selskapslokalene
+selskapslokaler
+selskapslokalet
+selskapslokalets
+selskapsreise
+selskapsreisen
+selskapsreisene
+selskapsreisens
+selskapsreiser
+selskinn
+selskinnet
+selskinnets
+selsnepa
+selsnepe
+selsnepen
+selsnepene
+selsnepens
+selsneper
+selsom
+selsomme
+selsomt
+selters
+seltersen
+seltersens
+selv
+selvangivelse
+selvangivelsen
+selvangivelsens
+selvassuranse
+selvassuransen
+selvassuransens
+selvbedrag
+selvbedraget
+selvbedragets
+selvberging
+selvberginga
+selvbergingen
+selvbergingens
+selvbestaltede
+selvbestemmelse
+selvbestemmelsen
+selvbestemmelsens
+selvbetjening
+selvbetjeningen
+selvbetjeningens
+selve
+selveste
+selvfølge
+selvfølgelig
+selvfølgelige
+selvfølgen
+selvfølgens
+selvforskyldt
+selvforsvar
+selvforsvaret
+selvforsvarets
+selvhersker
+selvherskere
+selvherskeren
+selvherskerens
+selvherskeres
+selvherskerne
+selvherskernes
+selvhevdelse
+selvhevdelsen
+selvhevdelsens
+selvinstruerende
+selvisk
+selviskhet
+selviskheten
+selviskhetens
+selvkost
+selvlært
+selvmål
+selvmålene
+selvmålet
+selvmålets
+selvmord
+selvmordene
+selvmordet
+selvmordets
+selvmotsigende
+selvransakelse
+selvransakelsen
+selvransakelsens
+selvråderett
+selvråderetten
+selvråderettens
+selvrådig
+selvrespekt
+selvrespekten
+selvrespektens
+selvsagt
+selvstarter
+selvstartere
+selvstarteren
+selvstarterens
+selvstarteres
+selvstarterne
+selvstarternes
+selvstendig
+selvstendige
+selvstendighet
+selvstendigheten
+selvstendighetens
+selvstudiene
+selvstudier
+selvstudiet
+selvstudiets
+selvstudium
+selvstyre
+selvstyret
+selvtillit
+selvtillita
+selvtilliten
+selvtillitens
+selvutviklet
+semafor
+semaforen
+semaforene
+semaforens
+semaforer
+semaforere
+semaforerer
+semaforert
+semaforerte
+semantiker
+semantikere
+semantikeren
+semantikerens
+semantikeres
+semantikerne
+semantikernes
+semantikk
+semantikken
+semantikkens
+semantisk
+sement
+sementen
+sementens
+sementer
+sementere
+sementerer
+sementert
+sementerte
+semester
+semesteravgift
+semesteravgiften
+semesteravgiftens
+semesteret
+semesterets
+semestra
+semestre
+semestrene
+semestret
+semestrets
+semifinale
+semifinalen
+semifinalens
+semikolon
+semikolonet
+semikolonets
+seminar
+seminara
+seminarene
+seminarer
+seminaret
+seminarets
+semittisk
+semittisme
+semittismen
+semittismens
+semja
+semje
+semjene
+semjer
+semska
+semske
+semsket
+semulegryn
+semulegrynet
+semulegrynets
+sen
+åsen
+senat
+senatene
+senater
+senatet
+senatets
+senator
+senatoren
+senatorene
+senatorens
+senatorer
+send
+sende
+sendebud
+sendebudene
+sendebudet
+sendebudets
+sendemann
+sendemannen
+sendemannens
+sendemenn
+sendemennene
+sendemennenes
+sendemenns
+sender
+sendes
+sendetid
+sendetida
+sendetiden
+sendetidene
+sendetidens
+sendetider
+sending
+sendinga
+sendingen
+sendinger
+sendrektig
+sendt
+sendte
+sene
+åsene
+æsene
+senegaleser
+senegalesere
+senegaleseren
+senegaleserens
+senegaleseres
+senegaleserne
+senegalesernes
+senegalesisk
+senen
+senens
+senere
+senet
+senete
+seng
+senga
+senge
+sengekant
+sengekanten
+sengekantens
+sengeleie
+sengeleiet
+sengen
+sengens
+senger
+sengetøy
+sengetøyet
+sengetøyets
+sengs
+senhøst
+senhøsten
+senhøstens
+senhøstes
+senil
+senile
+senilitet
+seniliteten
+senilitetens
+senior
+senioren
+seniorene
+seniorenes
+seniorens
+seniorer
+seniorklasse
+seniorklassen
+seniorklassene
+seniorklassens
+seniorklasser
+senit
+senitet
+senitets
+senk
+senke
+senker
+senkes
+senket
+senking
+senkinga
+senkingen
+senkingens
+senkning
+senkningen
+senkningens
+senkvelds
+senn
+sennep
+sennepen
+sennepens
+åsens
+sensasjon
+sensasjonell
+sensasjonelle
+sensasjonelt
+sensasjonen
+sensasjonene
+sensasjonens
+sensasjoner
+sensibel
+sensible
+sensitiv
+sensitivitet
+sensor
+sensoren
+sensorene
+sensorens
+sensorer
+sensualisme
+sensualismen
+sensualismens
+sensualistisk
+sensualitet
+sensualiteten
+sensualitetens
+sensuell
+sensuelle
+sensuelt
+sensur
+sensuren
+sensurene
+sensurens
+sensurer
+sensurere
+sensurerer
+sensurert
+sensurerte
+sent
+sentenkt
+sentens
+sentensen
+sentensene
+sentensens
+sentenser
+senter
+senteren
+senterens
+senteret
+senterets
+senterlinja
+senterlinje
+senterlinjen
+senterlinjens
+senterparti
+senterpartiet
+senterpartiets
+sentimental
+sentimentalitet
+sentimentaliteten
+sentimentalitetens
+sentra
+sentral
+sentraladministrasjon
+sentraladministrasjonen
+sentraladministrasjonene
+sentraladministrasjonens
+sentraladministrasjoner
+sentralbord
+sentralborda
+sentralbordene
+sentralbordet
+sentralbordets
+sentralbyrå
+sentralbyrås
+sentrale
+sentralen
+sentralens
+sentralforbund
+sentralforbundet
+sentralforbundets
+sentralinstitutt
+sentralinstituttet
+sentralinstituttets
+sentralisering
+sentraliseringa
+sentraliseringen
+sentraliseringens
+sentralisert
+sentralkomité
+sentralkomiteen
+sentralkomiteene
+sentralkomiteens
+sentralkomiteer
+sentralorganisasjon
+sentralorganisasjonen
+sentralorganisasjonene
+sentralorganisasjonens
+sentralorganisasjoner
+sentralsjukehus
+sentralsjukehusene
+sentralsjukehuset
+sentralsjukehusets
+sentralstyre
+sentralstyret
+sentralstyrets
+sentralsykehus
+sentralsykehusene
+sentralsykehuset
+sentralsykehusets
+sentralt
+sentre
+sentrene
+sentrer
+sentret
+sentrets
+sentrifugal
+sentrifugalkraft
+sentrifugalkrafta
+sentrifugalkraften
+sentrifugalkraftens
+sentrifuge
+sentrifugen
+sentrifugens
+sentripetalkraft
+sentripetalkrafta
+sentripetalkraften
+sentripetalkraftens
+sentrisk
+sentrum
+sentrumet
+sentrumets
+separasjon
+separasjonen
+separasjonene
+separasjonens
+separasjoner
+separat
+separate
+separatisme
+separatismen
+separatismens
+separatistisk
+separator
+separatoren
+separatorene
+separatorens
+separatorer
+separer
+separere
+separerer
+separeres
+separert
+separerte
+sept
+september
+septer
+septeret
+septerets
+septett
+septetten
+septettene
+septettens
+septetter
+septiktank
+septiktanken
+septiktankene
+septiktankens
+septiktanker
+septim
+septimen
+septimene
+septimens
+septimer
+septra
+septre
+septrene
+septret
+septrets
+ser
+såer
+åser
+æser
+øser
+sera
+seraf
+serafen
+serafene
+serafens
+serafer
+serai
+seraia
+seraiene
+seraier
+seraiet
+seraiets
+serber
+serbere
+serberen
+serberens
+serberes
+serberne
+serbernes
+serbisk
+seremoni
+seremonien
+seremoniene
+seremoniens
+seremonier
+serenade
+serenaden
+serenadens
+serie
+seriekamp
+seriekampen
+seriekampene
+seriekampens
+seriekamper
+serien
+serier
+serigrafi
+serigrafia
+serigrafien
+serigrafiene
+serigrafiens
+serigrafier
+serigrafiet
+serigrafiets
+seriøs
+seriøse
+seriøst
+serk
+serken
+serkene
+serkens
+serker
+serpentin
+serpentinen
+serpentinene
+serpentinens
+serpentiner
+sersjant
+sersjanten
+sersjantene
+sersjantens
+sersjanter
+sertifikat
+sertifikata
+sertifikatene
+sertifikater
+sertifikatet
+sertifikatets
+sertifisere
+sertifiserer
+sertifisert
+sertifiserte
+serum
+serumene
+serumer
+serumet
+serumets
+serva
+servant
+servanten
+servantene
+servantens
+servanter
+serve
+servelatpølse
+servelatpølsen
+servelatpølsene
+servelatpølsens
+servelatpølser
+server
+servere
+serverer
+serveres
+servering
+serveringa
+serveringen
+serveringens
+serveringssted
+serveringssteder
+servert
+serverte
+servet
+service
+servicen
+servicens
+servicepersonale
+servicepersonalet
+servicepersonalets
+servicestasjon
+servicestasjonen
+servicestasjonene
+servicestasjonens
+servicestasjoner
+serviett
+servietten
+serviettene
+serviettens
+servietter
+servil
+servile
+servilitet
+serviliteten
+servilitetens
+servise
+serviset
+servitør
+servitøren
+servitørene
+servitørens
+servitører
+servitrisa
+servitrise
+servitrisen
+servitrisens
+servitutt
+servitutta
+servitutten
+servituttene
+servituttens
+servitutter
+servituttet
+servituttets
+servomekanisme
+servomekanismen
+servomekanismens
+servostyring
+servostyringen
+servostyringene
+servostyringens
+servostyringer
+ses
+såes
+sesam
+sesjon
+sesjonen
+sesjonene
+sesjonens
+sesjoner
+sesong
+sesongen
+sesongene
+sesongens
+sesonger
+sesongåpning
+sesongåpningen
+sesongåpningens
+sesongs
+sess
+sessen
+sessene
+sessens
+sesser
+æset
+sete
+åsete
+setene
+seter
+seterbu
+seterbua
+seterbuene
+seterbuer
+seterhus
+seterhuset
+seterhusets
+setervoll
+setervollen
+setervollene
+setervollens
+setervoller
+setesdøl
+setesdølen
+setesdølene
+setesdølens
+setesdøler
+åsetesrett
+åsetesretten
+åsetesrettens
+setet
+åsetet
+setning
+setninga
+setningen
+setningene
+setninger
+setningsdel
+setningsdelen
+setningsdelene
+setningsdelens
+setningsdeler
+setningsledd
+setningsledda
+setningsleddene
+setningsleddet
+setningsleddets
+setra
+setrer
+sett
+settbord
+settbordet
+settbordets
+sette
+settende
+setter
+settere
+setteren
+setterens
+setteri
+setterier
+setteriet
+setteriets
+settes
+settet
+settlement
+settlementa
+settlementene
+settlementet
+settlementets
+sev
+seva
+sevene
+severdig
+severdighet
+severdigheten
+severdighetene
+severdighetens
+severdigheter
+sevet
+sevja
+sevje
+sevjen
+sevjens
+sex
+sexbomba
+sexbombe
+sexbomben
+sexbombens
+sexen
+sexens
+sexy
+sfinks
+sfinksen
+sfinksene
+sfinksens
+sfinkser
+såframt
+sfære
+såfremt
+sfæren
+sfærens
+sfærisk
+sågar
+shabby
+shaker
+shakere
+shakeren
+shakerens
+shakeres
+shakerne
+shakernes
+shaping
+shapinga
+shapingen
+shapingens
+sherry
+sherryen
+sherryens
+shilling
+shillingen
+shillingene
+shillingens
+shillinger
+shintoisme
+shintoismen
+shintoismens
+shipping
+shippingen
+shippingens
+shopping
+shoppinga
+shoppingen
+shoppingens
+shoppingsenter
+shoppingsenteret
+shoppingsenterets
+shoppingsentra
+shoppingsentre
+shoppingsentrene
+shoppingsentret
+shoppingsentrets
+shorts
+shortsen
+shortsene
+shortsens
+show
+showa
+showene
+showet
+showets
+shunt
+shunten
+shuntene
+shuntens
+shunter
+shuntventil
+shuntventilen
+shuntventilene
+shuntventilens
+shuntventiler
+si
+sia
+siam
+siameser
+siamesere
+siameseren
+siameserens
+siameseres
+siameserne
+siamesernes
+sibirsk
+sibirske
+siciliansk
+sid
+sida
+sidd
+sidda
+sidde
+side
+sidebein
+sidebeina
+sidebeinet
+sidebeinets
+sideblikk
+sideblikket
+sideblikkets
+sidebytte
+sideflate
+sideflaten
+sideflatene
+sideflatens
+sideflater
+sideform
+sideforma
+sideformen
+sideformene
+sideformens
+sideformer
+sidekant
+sidekanten
+sidekantene
+sidekantens
+sidekanter
+sidemann
+sidemannen
+sidemannens
+sidemenn
+sidemennene
+sidemennenes
+sidemenns
+siden
+sidene
+sidensvans
+sidensvansen
+sidensvansene
+sidensvansens
+sidensvanser
+sideordnede
+sideordnet
+sider
+sideren
+siderens
+siders
+sidespor
+sidespora
+sidesporene
+sidesporet
+sidesporets
+sidestykka
+sidestykke
+sidestykkene
+sidestykker
+sidetall
+sidetallene
+sidetallet
+sidetallets
+sidevei
+sideveiene
+sideveier
+sidevirkning
+sidevirkningen
+sidevirkningene
+sidevirkningens
+sidevirkninger
+sidt
+sier
+sies
+siesta
+siestaen
+siestaene
+siestaens
+siestaer
+siffer
+sifferet
+sifferets
+sifferskrift
+sifferskrifta
+sifferskriften
+sifferskriftens
+sifong
+sifongen
+sifongene
+sifongens
+sifonger
+sifra
+sifre
+sifrene
+sifrere
+sifrerer
+sifrert
+sifrerte
+sig
+sigar
+sigaren
+sigarene
+sigarens
+sigarer
+sigarett
+sigaretten
+sigarettene
+sigarettens
+sigaretter
+sigd
+sigden
+sigdene
+sigdens
+sigder
+sige
+sigende
+sigendet
+siget
+sightseeing
+sightseeinga
+sightseeingen
+sightseeingene
+sightseeingens
+sightseeinger
+signal
+signala
+signalement
+signalementa
+signalementene
+signalementer
+signalementet
+signalementets
+signalene
+signaler
+signalere
+signalerer
+signalert
+signalerte
+signalet
+signalets
+signalisere
+signaliserer
+signalisert
+signaliserte
+signatarmakt
+signatarmakta
+signatarmakten
+signatarmaktens
+signatur
+signaturen
+signaturene
+signaturens
+signaturer
+signe
+signere
+signerer
+signert
+signerte
+signet
+signetet
+signifikant
+signifikante
+signing
+signinga
+signingen
+signingens
+sigøyner
+sigøynere
+sigøyneren
+sigøynerens
+sigøyneres
+sigøynerne
+sigøynernes
+sik
+sika
+siken
+sikens
+sikh
+sikhen
+sikhene
+sikhens
+sikher
+sikkel
+sikkelet
+sikkelets
+sikker
+sikkerhet
+sikkerheten
+sikkerhetens
+sikkerhets
+sikkerhetsmessig
+sikkerhetsmessige
+sikkerhetspolitikk
+sikkerhetspolitikken
+sikkerhetspolitikkens
+sikkerhetspolitisk
+sikkerhetspolitiske
+sikkerhetsproblem
+sikkerhetsproblema
+sikkerhetsproblemene
+sikkerhetsproblemer
+sikkerhetsproblemet
+sikkerhetsproblemets
+sikkerhetsråd
+sikkerhetsrådet
+sikkerhetsrådets
+sikkerhetssystem
+sikkerhetssystema
+sikkerhetssystemene
+sikkerhetssystemer
+sikkerhetssystemet
+sikkerhetssystemets
+sikkerhetstiltak
+sikkerhetstiltakene
+sikkerhetstiltaket
+sikkerhetstiltakets
+sikkert
+sikksakk
+sikksakkgang
+sikl
+sikla
+sikle
+sikler
+siklet
+sikori
+sikorien
+sikoriens
+sikra
+sikre
+sikrer
+sikrere
+sikres
+sikrest
+sikreste
+sikret
+sikring
+sikringa
+sikringen
+sikringene
+sikringens
+sikringer
+sikringsboks
+sikringsboksen
+sikringsboksene
+sikringsboksens
+sikringsbokser
+sikspenslua
+sikspenslue
+sikspensluene
+sikspensluer
+sikt
+sikta
+siktbar
+siktbare
+siktbarhet
+siktbarheten
+siktbarhetens
+siktbart
+sikte
+siktede
+siktelse
+siktelsen
+siktelsens
+siktemål
+siktemålet
+siktemålets
+sikten
+siktepunkt
+siktepunktet
+siktepunktets
+sikter
+siktet
+siktveksel
+siktvekselen
+siktvekselens
+sil
+sild
+silda
+silde
+sildefiske
+sildefisket
+sildemjøl
+sildemjølet
+sildemjølets
+silden
+sildens
+sildeolje
+sildeoljen
+sildeoljens
+sildepris
+sildeprisen
+sildeprisens
+sildolje
+sildoljefabrikk
+sildoljefabrikken
+sildoljefabrikkene
+sildoljefabrikkens
+sildoljefabrikker
+sildoljen
+sildoljens
+sildra
+sildre
+sildrer
+sildret
+sile
+silen
+silens
+siler
+silhuett
+silhuetten
+silhuettene
+silhuettens
+silhuetter
+silikat
+silikata
+silikatene
+silikater
+silikatet
+silikatets
+silikose
+silikosen
+silikosens
+silisium
+silisiumbrikke
+silisiumbrikken
+silisiumbrikkens
+silisiumet
+silisiumets
+silke
+silken
+silkens
+silkestjert
+silkestjerten
+silkestjertens
+silketrykk
+silketrykket
+silketrykkets
+silo
+siloanlegget
+siloen
+siloene
+siloens
+siloer
+silregn
+silregne
+silregnet
+silt
+silte
+simla
+simle
+simlen
+simlene
+simlens
+simler
+simpel
+simpelt
+simpelthen
+simple
+simpleks
+simplifisere
+simplifiserer
+simplifisert
+simplifiserte
+simulant
+simulanten
+simulantene
+simulantens
+simulanter
+simulator
+simulatoren
+simulatorene
+simulatorens
+simulatorer
+simuler
+simulere
+simulerer
+simulering
+simuleringa
+simuleringen
+simuleringens
+simuleringer
+simulert
+simulerte
+simultan
+simultanen
+simultanene
+simultanens
+simultaner
+sin
+sinder
+sinderet
+sinderets
+sinders
+sindersen
+sindersens
+sindig
+sindige
+sindre
+sindret
+sindrets
+sine
+sinekyre
+sinekyren
+sinekyrens
+singalesisk
+singel
+singelen
+singelens
+singelton
+singeltonen
+singeltonene
+singeltonens
+single
+singlen
+singlens
+singlet
+singularis
+singularisen
+singularisens
+sink
+sinka
+sinke
+sinken
+sinkens
+sinker
+sinket
+sinn
+sinna
+sinnatagg
+sinnataggen
+sinnataggens
+sinnbilde
+sinnbildet
+sinnbildets
+sinne
+sinnelag
+sinnelaget
+sinnelagets
+sinnene
+sinnet
+sinnrik
+sinnrike
+sinnrikt
+sinns
+sinnsro
+sinnsroa
+sinnsroen
+sinnsroens
+sinnssjuk
+sinnssjukdom
+sinnssvak
+sinnssyk
+sinnstilstand
+sinnstilstanden
+sinnstilstandens
+sinober
+sinoberen
+sinoberens
+sint
+sinte
+sinus
+sinusen
+sinusene
+sinusens
+sinuser
+sionisme
+sionismen
+sionismens
+sionist
+sionisten
+sionistene
+sionistens
+sionister
+sionistisk
+sipe
+siper
+sipt
+sipte
+sir
+sirene
+sirenen
+sirenene
+sirenens
+sirener
+siriss
+sirissen
+sirissene
+sirissens
+sirisser
+sirkel
+sirkelen
+sirkelens
+sirkelformede
+sirkle
+sirkler
+sirkulasjon
+sirkulasjonen
+sirkulasjonene
+sirkulasjonens
+sirkulasjoner
+sirkulere
+sirkulerer
+sirkulert
+sirkulerte
+sirkulær
+sirkulære
+sirkulæret
+sirkus
+sirkusa
+sirkusene
+sirkuser
+sirkuset
+sirkusets
+sirlig
+sirs
+sirsen
+sirup
+sirupen
+sirupens
+siselere
+siselerer
+siselert
+siselerte
+sisik
+sisiken
+sisikene
+sisikens
+sisiker
+sisselrot
+sisselrota
+sisselroten
+sisselrotens
+sist
+siste
+sistemann
+sistemannen
+sistemannens
+sistemenn
+sistemennene
+sistemennenes
+sistemenns
+sisten
+sistnevnte
+sistpå
+sisu
+sisuen
+sisuens
+sisyfosarbeid
+sisyfosarbeidet
+sisyfosarbeidets
+sitant
+sitanten
+sitantene
+sitantens
+sitanter
+sitar
+sitaren
+sitarene
+sitarens
+sitarer
+sitat
+sitata
+sitatene
+sitater
+sitatet
+sitatets
+sitdownstreik
+sitdownstreiken
+sitdownstreikens
+sitere
+siterer
+sitert
+siterte
+sitra
+sitre
+sitrer
+sitret
+sitron
+sitronen
+sitronene
+sitronens
+sitroner
+sitrusfrukt
+sitrusfrukta
+sitrusfrukten
+sitrusfruktens
+sitrusfrukter
+sitt
+sitte
+sittende
+sitteplass
+sitteplassen
+sitteplassene
+sitteplassens
+sitteplasser
+sitter
+sittet
+situasjon
+situasjonen
+situasjonene
+situasjonens
+situasjoner
+situasjonsbilde
+situasjonsbildet
+situasjonsbildets
+situert
+siv
+sive
+siver
+sivet
+sivil
+sivilagronom
+sivilagronomen
+sivilagronomens
+sivile
+sivilforsvar
+sivilforsvaret
+sivilforsvarets
+sivilingeniør
+sivilingeniøren
+sivilingeniørene
+sivilingeniørens
+sivilingeniører
+sivilisasjon
+sivilisasjonen
+sivilisasjonene
+sivilisasjonens
+sivilisasjoner
+sivilisere
+sivilisert
+siviliserte
+sivilist
+sivilisten
+sivilistene
+sivilistens
+sivilister
+sivilkledd
+siviløkonom
+siviløkonomen
+siviløkonomene
+siviløkonomens
+siviløkonomer
+sivilt
+sivåt
+sjå
+sjø
+æsj
+sjaber
+sjablon
+sjablonen
+sjablonene
+sjablonens
+sjabloner
+sjabre
+sjagreng
+sjagrengen
+sjagrengens
+sjah
+sjahen
+sjahene
+sjahens
+sjaher
+sjakal
+sjakalen
+sjakalene
+sjakalens
+sjakaler
+sjakett
+sjaketten
+sjakettene
+sjakettens
+sjaketter
+sjakk
+sjakkbrett
+sjakkbrettet
+sjakkbrettets
+sjakkbrikka
+sjakkbrikke
+sjakkbrikken
+sjakkbrikkene
+sjakkbrikkens
+sjakkbrikker
+sjakken
+sjakkens
+sjakt
+sjakta
+sjakten
+sjaktene
+sjaktens
+sjakter
+sjal
+sjala
+sjalene
+sjalet
+sjalets
+sjalottløk
+sjalottløken
+sjalottløkens
+sjalte
+sjalu
+sjalupp
+sjaluppen
+sjaluppene
+sjaluppens
+sjalupper
+sjalusi
+sjalusien
+sjalusiene
+sjalusiens
+sjalusier
+sjampinjong
+sjampinjongen
+sjampinjongene
+sjampinjongens
+sjampinjonger
+sjampo
+sjampoen
+sjampoens
+sjamponere
+sjamponerer
+sjamponert
+sjamponerte
+sjanghaia
+sjanghaie
+sjanghaier
+sjanghaiet
+sjangla
+sjangle
+sjangler
+sjanglet
+sjanse
+sjansen
+sjansene
+sjansens
+sjanser
+sjanti
+sjantien
+sjantiene
+sjantiens
+sjantier
+sjapp
+sjappa
+sjappe
+sjargong
+sjargongen
+sjargongens
+sjarlatan
+sjarlatanen
+sjarlatanene
+sjarlatanens
+sjarlataner
+sjarm
+sjarmant
+sjarmantisere
+sjarmantiserer
+sjarmantisert
+sjarmantiserte
+sjarme
+sjarmen
+sjarmens
+sjarmere
+sjarmerende
+sjarmør
+sjarmøren
+sjarmørene
+sjarmørens
+sjarmører
+sjaske
+sjasket
+sjaskete
+sjasmin
+sjasminen
+sjasminene
+sjasminens
+sjasminer
+sjattere
+sjatterer
+sjattering
+sjatteringa
+sjatteringen
+sjatteringens
+sjattert
+sjatterte
+sjau
+sjaua
+sjauen
+sjauene
+sjauens
+sjauer
+sjauere
+sjaueren
+sjauerens
+sjaueres
+sjauerne
+sjauernes
+sjauet
+sjøaure
+sjøauren
+sjøaurens
+sjøbu
+sjøbua
+sjøbuene
+sjøbuer
+sjødyktig
+sjef
+sjefdirektør
+sjefdirektøren
+sjefdirektørens
+sjefen
+sjefene
+sjefens
+sjefer
+sjefredaktør
+sjefredaktøren
+sjefredaktørene
+sjefredaktørens
+sjefredaktører
+sjefs
+sjefsideolog
+sjefsideologen
+sjefsideologene
+sjefsideologens
+sjefsideologer
+sjeik
+sjeiken
+sjeikene
+sjeikens
+sjeiker
+sjekk
+sjekka
+sjekke
+sjekken
+sjekkens
+sjekker
+sjekket
+sjekkhefte
+sjekkheftet
+sjekta
+sjekte
+sjekten
+sjektene
+sjektens
+sjekter
+sjel
+sjela
+sjelden
+sjeldenhet
+sjeldenhets
+sjeldent
+sjeldne
+sjeldsynt
+sjelelig
+sjeleliv
+sjelelivet
+sjelelivets
+sjelen
+sjelene
+sjelens
+sjeler
+sjelesorg
+sjelsstyrke
+sjelsstyrken
+sjelsstyrkens
+sjøen
+sjenanse
+sjenansen
+sjenansens
+sjener
+sjenere
+sjenerende
+sjenerer
+sjenerøs
+sjenerøsitet
+sjenerøsiteten
+sjenerøsitetens
+sjenerøst
+sjenert
+sjenever
+sjeneveren
+sjeneverens
+sjøens
+sjeselong
+sjeselongen
+sjeselongene
+sjeselongens
+sjeselonger
+sjået
+sjeteen
+sjeteens
+sjetong
+sjetongen
+sjetongene
+sjetongens
+sjetonger
+sjåets
+sjette
+sjettedel
+sjettedelen
+sjettedelens
+sjeviot
+sjevioten
+sjeviotens
+sjevrå
+sjevråen
+sjevråens
+sjøfart
+sjøfarten
+sjøfartens
+sjøfolk
+sjøfolka
+sjøfolkene
+sjøforsvar
+sjøforsvaret
+sjøforsvarets
+sjåfør
+sjåføren
+sjåførene
+sjåførens
+sjåfører
+sjikane
+sjikanen
+sjikanens
+sjikanere
+sjikanerer
+sjikanert
+sjikanerte
+sjikanøs
+sjikt
+sjikta
+sjiktene
+sjiktet
+sjiktets
+sjimpanse
+sjimpansen
+sjimpansens
+sjingel
+sjingelen
+sjingelens
+sjiraff
+sjiraffen
+sjiraffene
+sjiraffens
+sjiraffer
+sjirokko
+sjirokkoen
+sjirokkoens
+sjirting
+sjirtingen
+sjirtingens
+sjøkaptein
+sjøkapteinen
+sjøkapteinene
+sjøkapteinens
+sjøkapteiner
+sjøkrigsskole
+sjøkrigsskolen
+sjøkrigsskolene
+sjøkrigsskolens
+sjøkrigsskoler
+sjøl
+sjølberging
+sjølberginga
+sjølbergingen
+sjølbergingens
+sjølfolk
+sjølfolket
+sjølfolkets
+sjølforsvar
+sjællandsk
+sjællender
+sjællendere
+sjællenderen
+sjællenderens
+sjællenderes
+sjællenderne
+sjællendernes
+sjølmelding
+sjølmeldinga
+sjølmeldingen
+sjølmeldingene
+sjølmeldingens
+sjølmeldinger
+sjølrådig
+sjølsagt
+sjølserveringskafé
+sjølserveringskafeen
+sjølserveringskafeene
+sjølserveringskafeens
+sjølserveringskafeer
+sjølstarter
+sjølstartere
+sjølstarteren
+sjølstarterens
+sjølstarteres
+sjølstarterne
+sjølstarternes
+sjølstendig
+sjølstendige
+sjølstendighet
+sjølstendighets
+sjøltillit
+sjøltilliten
+sjøltillitens
+sjølve
+sjølveste
+sjømann
+sjømannen
+sjømannens
+sjømannskap
+sjømannskapen
+sjømannskapens
+sjømannsliv
+sjømannslivet
+sjømannslivets
+sjømenn
+sjømennene
+sjømennenes
+sjømenns
+sjømerke
+sjømerker
+sjømil
+sjømila
+sjømilene
+sjoddi
+sjoddien
+sjoddiens
+sjofel
+sjofelt
+sjøoffiser
+sjøoffiseren
+sjøoffiserens
+sjofle
+sjog
+sjogen
+sjogens
+sjokk
+sjokkarta
+sjokke
+sjokkere
+sjokkerende
+sjokkert
+sjokket
+sjokolade
+sjokoladen
+sjokoladens
+sjongler
+sjonglere
+sjonglerer
+sjonglert
+sjonglerte
+sjonglør
+sjongløren
+sjonglørene
+sjonglørens
+sjonglører
+sjøs
+sjøsatt
+sjøsatte
+sjøsette
+sjøsetter
+sjøsprøyt
+sjøsprøyten
+sjøsprøytens
+sju
+sjudel
+sjudelen
+sjudelens
+sjuende
+sjuendedel
+sjuendedelen
+sjuendedelens
+sjuk
+sjukdom
+sjukdommen
+sjukdommene
+sjukdommens
+sjukdommer
+sjuke
+sjukebesøk
+sjukegymnast
+sjukegymnastikk
+sjukeheim
+sjukeheimen
+sjukeheimens
+sjukehus
+sjukehusa
+sjukehusene
+sjukehuset
+sjukehusets
+sjukehusopphold
+sjukelig
+sjukelønn
+sjukelønna
+sjukelønnen
+sjukelønnens
+sjukemelde
+sjukemeldinga
+sjukemeldt
+sjuken
+sjukepenger
+sjukepleie
+sjukepleien
+sjukepleiens
+sjukepleier
+sjukepleiere
+sjukepleieren
+sjukepleierens
+sjukepleieres
+sjukepleierne
+sjukepleiernes
+sjukepleierske
+sjukepleiersken
+sjukepleierskene
+sjukepleierskens
+sjukepleiersker
+sjukepleierskole
+sjukepleierskolen
+sjukepleierskolene
+sjukepleierskolens
+sjukepleierskoler
+sjukesøster
+sjukesøsteren
+sjukesøsterens
+sjukesøstre
+sjukesøstrene
+sjukestua
+sjukestue
+sjukestuer
+sjuketrygd
+sjuketrygda
+sjuketrygden
+sjuketrygdens
+sjuklig
+sjukling
+sjuklingen
+sjuklingens
+sjukmelding
+sjukmeldinga
+sjukmeldingen
+sjukmeldingene
+sjukmeldingens
+sjukmeldinger
+sjukmeldt
+sjukne
+sjukner
+sjukt
+sjusk
+sjuske
+sjusket
+sjuskete
+sjøvann
+sjøvannet
+sjøvannets
+sjøvatn
+sjøvatnet
+sjøvatnets
+sjåvinisme
+sjåvinismen
+sjåvinismens
+sjåvinist
+sjåvinisten
+sjåvinistene
+sjåvinistens
+sjåvinister
+sjåvinistisk
+sjy
+sjyen
+sjyens
+søk
+ska
+skabb
+skabben
+skabbens
+skabbet
+skabbete
+skabelon
+skabelonen
+skabelonene
+skabelonens
+skabeloner
+skaberakk
+skaberakka
+skaberakkene
+skaberakker
+skaberakket
+skaberakkets
+skabilken
+skabilkener
+skabilkenet
+skabilkenets
+skadd
+skadde
+skade
+skadebot
+skadebota
+skadeboten
+skadebotens
+skadede
+skadedyr
+skadedyra
+skadedyret
+skadedyrets
+skadelidende
+skadelig
+skadelige
+skaden
+skadene
+skader
+skadeserstatning
+skadeserstatningen
+skadeserstatningens
+skadeslaus
+skadesløs
+skadet
+skadeverk
+skadeverket
+skadeverkets
+skadevirkning
+skadevirkningen
+skadevirkningene
+skadevirkningens
+skadevirkninger
+skaff
+skaffe
+skaffer
+skaffes
+skaffet
+skafott
+skafotta
+skafottene
+skafotter
+skafottet
+skafottets
+skaft
+skafta
+skaftene
+skafter
+skaftet
+skaftets
+skaka
+skake
+skaker
+skaket
+skakk
+skakke
+skakt
+skal
+skala
+skalaen
+skalaens
+skalar
+skalart
+skald
+skaldekvad
+skaldekvadet
+skaldekvadets
+skalden
+skaldens
+skaldskap
+skaldskapen
+skaldskapens
+skalene
+skaler
+skalere
+skalert
+skalet
+skalets
+skalk
+skalken
+skalkene
+skalkens
+skalker
+skalket
+skall
+skalla
+skalldyr
+skalldyrene
+skalldyret
+skalldyrets
+skalle
+skallen
+skallens
+skallet
+skallete
+skalp
+skalpell
+skalpellen
+skalpellene
+skalpellens
+skalpeller
+skalpen
+skalpene
+skalpens
+skalper
+skalpere
+skalperer
+skalpert
+skalperte
+såkalt
+skalta
+skalte
+såkalte
+skalter
+skaltet
+skalv
+skam
+skamfare
+skamfere
+skamfert
+skamferte
+skamfull
+skamlaus
+skamlene
+skamler
+skamløs
+skamløshet
+skamløsheten
+skamløshetens
+skamløyse
+skamma
+skamme
+skammel
+skammelen
+skammelens
+skammelig
+skammen
+skammens
+skammer
+skammet
+skamslå
+skamslo
+skamslått
+skandale
+skandalen
+skandalene
+skandalens
+skandaler
+skandalisere
+skandaliserer
+skandalisert
+skandaliserte
+skandaløs
+skandekk
+skandekket
+skandekkets
+skandere
+skanderer
+skandert
+skanderte
+skandinav
+skandinaven
+skandinavene
+skandinavens
+skandinaver
+skandinavisk
+skandinaviske
+skandinavisme
+skandinavismen
+skandinavismens
+skandskrift
+skandskriftet
+skandskriftets
+skank
+skanken
+skankene
+skankens
+skanker
+skanna
+skanne
+skanner
+skannere
+skanneren
+skannerens
+skanneres
+skannerne
+skannernes
+skannet
+skanse
+skansen
+skansens
+skanta
+skante
+skanter
+skantet
+skap
+skapa
+skape
+skapelig
+skapelse
+skapelsen
+skapelsens
+skapende
+skapene
+skaper
+skapere
+skaperen
+skaperens
+skaperevne
+skaperevnen
+skaperevnene
+skaperevnens
+skaperevner
+skapes
+skapet
+skaping
+skapinga
+skapingen
+skaplig
+skapnad
+skapnaden
+skapnadene
+skapnadens
+skapnader
+skapning
+skapningen
+skapningene
+skapningens
+skapninger
+skapplass
+skapplassen
+skapplassens
+skapt
+skapte
+skaptes
+skar
+skare
+skaren
+skarens
+skarer
+skaret
+skarlagen
+skarlagenet
+skarlagenets
+skarlagensfeber
+skarlagensfeberen
+skarlagensfeberens
+skarn
+skarnet
+skarp
+skarpe
+skarpere
+skarpest
+skarpeste
+skarpsindig
+skarpskodd
+skarpt
+skarra
+skarre
+skarv
+skarve
+skarven
+skarvens
+skarvepakk
+skarvepakket
+skarvepakkets
+skarvet
+skat
+skate
+skater
+skatoll
+skatolla
+skatollene
+skatoller
+skatollet
+skatollets
+skatt
+skatta
+skattbar
+skatte
+skattebetaler
+skattebetalere
+skattebetaleren
+skattebetalerens
+skattebetaleres
+skattebetalerne
+skattebetalernes
+skattedebatt
+skattedebatten
+skattedebattene
+skattedebattens
+skattedebatter
+skattedirektorat
+skattedirektoratet
+skattedirektoratets
+skattefond
+skattefondet
+skattefondets
+skattefri
+skattefritak
+skattefritaket
+skattefritakets
+skatteøkning
+skatteøkningen
+skatteøkningene
+skatteøkningens
+skatteøkninger
+skattelette
+skattelettelse
+skattelettelsen
+skattelettelsene
+skattelettelsens
+skattelettelser
+skatteletten
+skattelettens
+skatteligning
+skatteligninga
+skatteligningen
+skatteligningens
+skattelikning
+skattelikningen
+skattelikningens
+skattelov
+skatteloven
+skattelovene
+skattelovens
+skattelover
+skatten
+skattene
+skattepenger
+skattepolitikk
+skattepolitikken
+skattepolitikkens
+skatter
+skatteseddel
+skatteseddelen
+skatteseddelens
+skattesedlene
+skattesedler
+skattesnyter
+skattesnytere
+skattesnyteren
+skattesnyterens
+skattesnyteres
+skattesnyteri
+skattesnyteriet
+skattesnyteriets
+skattesnyterne
+skattesnyternes
+skattet
+skattetall
+skattetallene
+skattetrekk
+skattetrekket
+skattetrekkets
+skatteyter
+skatteytere
+skatteyteren
+skatteyterens
+skatteyteres
+skatteyterne
+skatteyternes
+skattfri
+skattligning
+skattligningen
+skattligningens
+skattlikning
+skattlikningen
+skattlikningens
+skattøre
+skattøren
+skattørens
+skattseddel
+skattseddelen
+skattseddelens
+skattsedlene
+skattsedler
+skaut
+skauta
+skautene
+skautet
+skautets
+skauv
+skav
+skavank
+skavanken
+skavankene
+skavankens
+skavanker
+skave
+skavet
+skavl
+skavlen
+skavlene
+skavlens
+skavler
+skavlet
+søke
+skei
+skeia
+skeid
+skeide
+skeidet
+skeie
+skeier
+skeiet
+skeileit
+skeileitet
+skeileitets
+skein
+skeine
+søkeinstrument
+skeis
+skeise
+skeiv
+skeive
+skeivhet
+skeivheten
+skeivhetene
+skeivhetens
+skeivheter
+skeivt
+skeivøyd
+søkelys
+søkelyset
+søkelysets
+søken
+søkende
+skepsis
+skepsisen
+skepsisens
+skeptiker
+skeptikere
+skeptikeren
+skeptikerens
+skeptikeres
+skeptikerne
+skeptikernes
+skeptisk
+skeptiske
+søker
+søkere
+søkeren
+søkerens
+søkerne
+søkes
+sketsj
+sketsjen
+sketsjene
+sketsjens
+sketsjer
+ski
+skia
+skibakke
+skibakken
+skibakkene
+skibakkens
+skibakker
+skibbrudd
+skibbruddet
+skibbruddets
+skibinding
+skibindinga
+skibindingen
+skibindingene
+skibindingens
+skibindinger
+skien
+skiene
+skiens
+skifer
+skiferen
+skiferens
+skiferhella
+skiferhelle
+skiferhellen
+skiferhellene
+skiferhellens
+skiferheller
+skiforbund
+skiforbundet
+skiforbundets
+skiføre
+skifrer
+skiføret
+skift
+skifta
+skiftarbeid
+skiftarbeider
+skiftarbeidet
+skiftarbeidets
+skifte
+skiftedommer
+skiftedommere
+skiftedommeren
+skiftedommerens
+skiftedommeres
+skiftedommerne
+skiftedommernes
+skiftende
+skiftenøkkel
+skiftenøkkelen
+skiftenøkkelens
+skifter
+skifterett
+skifteretten
+skifterettens
+skiftes
+skiftesamling
+skiftesamlingen
+skiftesamlingens
+skiftet
+skiftevis
+skigard
+skigarden
+skigardene
+skigardens
+skigarder
+skiheis
+skiheisen
+skiheisene
+skiheisens
+skiheiser
+skiidrett
+skiidretten
+skiidrettens
+skikk
+skikka
+skikke
+skikkede
+skikkelig
+skikkelige
+skikkelse
+skikkelsen
+skikkelsene
+skikkelsens
+skikkelser
+skikken
+skikket
+skiklubb
+skiklubben
+skiklubbene
+skiklubbens
+skiklubber
+skilderhus
+skilderhuset
+skilderhusets
+skilderi
+skilderia
+skilderiene
+skilderier
+skilderiet
+skilderiets
+skildra
+skildre
+skildrer
+skildres
+skildret
+skildring
+skildringa
+skildringen
+skildringene
+skildringens
+skildringer
+skill
+skille
+skillelinja
+skillelinje
+skillelinjen
+skillelinjene
+skillelinjens
+skillelinjer
+skillen
+skillens
+skiller
+skilles
+skillet
+skilletegn
+skilletegna
+skilletegnene
+skilletegnet
+skilletegnets
+skillevegg
+skilleveggen
+skilleveggene
+skilleveggens
+skillevegger
+skilling
+skillingen
+skillingene
+skillingens
+skillinger
+skilnad
+skilnaden
+skilnadene
+skilnadens
+skilnader
+skilpadda
+skilpadde
+skilpadden
+skilpaddens
+skiløper
+skiløpere
+skiløperen
+skiløperens
+skiløperes
+skiløperne
+skiløpernes
+skiløping
+skiløpinga
+skiløpingen
+skiløpingens
+skilsmisse
+skilsmissen
+skilsmissens
+skilsmål
+skilsmåla
+skilsmålene
+skilsmålet
+skilsmålets
+skilt
+skilte
+skiltene
+skiltet
+skilting
+skiltinga
+skiltingen
+skiltingens
+skiltvakt
+skiltvakta
+skiltvakten
+skiltvaktens
+skiløypa
+skiløype
+skiløypen
+skiløypene
+skiløypens
+skiløyper
+skimle
+skimlet
+skimlete
+skimmer
+skimmeret
+skimmerets
+skimra
+skimre
+skimt
+skimte
+skimter
+skimtes
+søking
+skingra
+skingre
+skingrer
+skingret
+skinka
+skinke
+skinken
+skinkens
+skinn
+skinnbarlig
+skinndaud
+skinndød
+skinne
+skinnelegg
+skinneleggen
+skinneleggens
+skinnelegger
+skinnende
+skinner
+skinnet
+skinnfektning
+skinnfektningen
+skinnfektningens
+skinnfell
+skinnfella
+skinnfellen
+skinnfellene
+skinnfellens
+skinnfeller
+skinnhellig
+skinnsyk
+skint
+skinte
+skip
+skipa
+skipbrott
+skipbrottet
+skipbrottets
+skipbrudd
+skipbrudden
+skipbruddens
+skipbruddet
+skipbruddets
+skipe
+skipene
+skipes
+skipet
+skipets
+skiple
+skipling
+skiplinga
+skiplingen
+skiplingens
+skipnad
+skipnaden
+skipper
+skippere
+skipperen
+skipperens
+skipperes
+skipperne
+skippernes
+skipreida
+skipreide
+skipreiden
+skipreidene
+skipreidens
+skipreider
+skipreidet
+skips
+skipsbåt
+skipsbåten
+skipsbåtens
+skipsbygging
+skipsbyggingen
+skipsbyggingens
+skipsfart
+skipsfarten
+skipsfartens
+skipsfører
+skipsførere
+skipsføreren
+skipsførerens
+skipsføreres
+skipsførerne
+skipsførernes
+skipsindustri
+skipsindustrien
+skipsindustriens
+skipslast
+skipslasten
+skipslastene
+skipslastens
+skipslaster
+skipsmegler
+skipsmeglere
+skipsmegleren
+skipsmeglerens
+skipsmegleres
+skipsmeglerne
+skipsmeglernes
+skipsmekler
+skipsmeklere
+skipsmekleren
+skipsmeklerens
+skipsmekleres
+skipsmeklerne
+skipsmeklernes
+skipsmodell
+skipsmodellen
+skipsmodellene
+skipsmodellens
+skipsmodeller
+skipsreder
+skipsredere
+skipsrederen
+skipsrederens
+skipsrederes
+skipsrederne
+skipsredernes
+skipsteknisk
+skipstekniske
+skipsverft
+skipsverfta
+skipsverftene
+skipsverftet
+skipsverftets
+skir
+skire
+skisesong
+skisesongen
+skisesongens
+skisma
+skismaene
+skismaer
+skismaet
+skismaets
+skisport
+skisporten
+skisportens
+skissa
+skisse
+skissen
+skissene
+skissens
+skisser
+skissere
+skisserer
+skisseres
+skissert
+skisserte
+skiterreng
+skiterrenget
+skiterrengets
+skitne
+skitnet
+skitrekk
+skitrekket
+skitrekkets
+skitt
+skitten
+skittens
+skitur
+skituren
+skiturene
+skiturens
+skiturer
+skiva
+skive
+skiven
+skivene
+skivens
+skiver
+skjå
+øskja
+skjød
+skjøda
+skjødehund
+skjødene
+skjødesløs
+skjødesløst
+skjødet
+skjødets
+skje
+øskje
+skjea
+skjebne
+skjebnen
+skjebnens
+skjebnesvanger
+skjebnesvangre
+skjebnetime
+skjebnetimen
+skjebnetimens
+skjedd
+skjedde
+skjede
+skjeden
+skjedens
+skjeen
+skjefte
+skjeftet
+skjegg
+skjegget
+skjeggete
+skjeggets
+skjele
+skjeler
+skjelett
+skjeletta
+skjelettene
+skjeletter
+skjelettet
+skjelettets
+skjell
+skjella
+skjelle
+skjeller
+skjellet
+skjellig
+skjelling
+skjellinga
+skjellingen
+skjellingens
+skjells
+skjellsord
+skjellsorda
+skjellsordene
+skjellsordet
+skjellsordets
+skjelm
+skjelmen
+skjelmene
+skjelmens
+skjelmer
+skjelmsk
+skjelmsstykke
+skjelmsstykket
+skjelna
+skjelne
+skjelner
+skjelnet
+skjelt
+skjelte
+skjelv
+skjelve
+skjelven
+skjelvet
+skjelvhendt
+skjelvne
+skjeløyd
+skjema
+skjemaene
+skjemaer
+skjemaet
+skjemaets
+skjematisere
+skjematiserer
+skjematisert
+skjematiserte
+skjematisk
+skjemavelde
+skjemaveldet
+skjemme
+skjemmer
+skjemmes
+skjems
+skjemt
+skjemten
+skjemtens
+skjemtes
+skjåen
+øskjen
+skjenda
+skjende
+skjender
+skjendet
+skjendig
+skjendighet
+skjendigheten
+skjendighetens
+skjene
+skjåene
+øskjene
+skjenk
+skjenke
+skjenken
+skjenkens
+skjenket
+skjenking
+skjenkinga
+skjenkingen
+skjenkingens
+skjenn
+skjenne
+skjennet
+skjåens
+øskjens
+skjensel
+skjenselen
+skjenselens
+skjenslene
+skjensler
+skjent
+skjente
+skjeppa
+skjeppe
+skjeppene
+skjepper
+skjer
+skjåer
+øskjer
+skjerding
+skjerdingen
+skjerdingene
+skjerdingens
+skjerdinger
+skjerf
+skjerfa
+skjerfene
+skjerfet
+skjerfets
+skjerm
+skjerme
+skjermen
+skjermene
+skjermens
+skjermer
+skjermet
+skjerp
+skjerpe
+skjerpede
+skjerpende
+skjerpes
+skjerpet
+skjerv
+skjerven
+skjervene
+skjervens
+skjerver
+skjev
+skjeve
+skjevt
+skjevøyd
+skjøga
+skjøge
+skjøgen
+skjøgene
+skjøgens
+skjøger
+skjønn
+skjønne
+skjønner
+skjønnere
+skjønneren
+skjønnerens
+skjønneres
+skjønnerne
+skjønnernes
+skjønnest
+skjønneste
+skjønnet
+skjønnhet
+skjønnheten
+skjønnhetens
+skjønnhetssans
+skjønnhetssansen
+skjønnhetssansens
+skjønnlitteratur
+skjønnlitteraturen
+skjønnlitteraturens
+skjønnlitterær
+skjønnskrift
+skjønnskrifta
+skjønnskriften
+skjønnskriftens
+skjønnsmann
+skjønnsmannen
+skjønnsmannens
+skjønnsmenn
+skjønnsmennene
+skjønnsmennenes
+skjønnsmenns
+skjønnsmessige
+skjønnsom
+skjønnsomhet
+skjønnsomheten
+skjønnsomhetens
+skjønnssak
+skjønnssaka
+skjønnssaken
+skjønnssakene
+skjønnssakens
+skjønnssaker
+skjønt
+skjønte
+skjold
+skjolda
+skjolden
+skjoldene
+skjoldens
+skjolder
+skjoldet
+skjoldete
+skjoldets
+skjor
+skjora
+skjorene
+skjorer
+skjorta
+skjorte
+skjorten
+skjortene
+skjortens
+skjorter
+skjær
+skjør
+skjæra
+skjørbuk
+skjørbuken
+skjørbukens
+skjære
+skjøre
+skjærer
+skjæres
+skjæret
+skjæreverktøy
+skjæreverktøyet
+skjæreverktøyets
+skjærgard
+skjærgarden
+skjærgardene
+skjærgardens
+skjærgarder
+skjærgård
+skjærgården
+skjærgårdene
+skjærgårdens
+skjærgårder
+skjæring
+skjæringa
+skjæringen
+skjæringens
+skjæringer
+skjærmysler
+skjærmyssel
+skjærmysselen
+skjærmysselens
+skjørne
+skjærs
+skjærseld
+skjærselden
+skjærseldens
+skjærsild
+skjærsilden
+skjærsildens
+skjørt
+skjørta
+skjørtene
+skjørter
+skjørtet
+skjørtets
+skjærtorsdag
+skjærtorsdagen
+skjærtorsdagene
+skjærtorsdagens
+skjærtorsdager
+skjøt
+skjøte
+skjøten
+skjøtens
+skjøtet
+skjøtsel
+skjøtselen
+skjøtselens
+skjøtt
+skjøtta
+skjøtte
+skjøttet
+skjul
+skjule
+skjuler
+skjules
+skjulet
+skjult
+skjulte
+skjøv
+skjøvet
+skåk
+søkk
+skåka
+søkke
+søkkeferdig
+søkkende
+søkket
+søkkvåt
+skål
+skåla
+skålda
+skålde
+skåldet
+skåle
+skled
+sklei
+skålen
+skålene
+skålens
+skåler
+sklerose
+sklerosen
+sklerosens
+skli
+sklidd
+sklidde
+sklie
+sklir
+skåna
+søknad
+søknaden
+søknadene
+søknadens
+søknader
+søknadsfrist
+søknadsfristen
+søknadsfristene
+søknadsfristens
+søknadsfrister
+skåne
+søknedag
+søknedagen
+søknedagens
+skåner
+skånet
+søkning
+søkningen
+søkningens
+skånsel
+skånselen
+skånselens
+skånselløs
+skånsom
+sko
+skodd
+skodda
+skodden
+skoddene
+skoddens
+skodder
+skoen
+skoene
+skoft
+skofta
+skofte
+skoften
+skoftens
+skoftet
+skog
+skogbruk
+skogbruker
+skogbruket
+skogbrukets
+skogbryn
+skogbrynet
+skogbrynets
+skogbygd
+skogbygda
+skogbygdene
+skogbygder
+skogdirektoratet
+skogeier
+skogeiere
+skogeieren
+skogeierens
+skogeieres
+skogeierforbund
+skogeierforbundet
+skogeierforbundets
+skogeierne
+skogeiernes
+skogen
+skogens
+skoger
+skoggerlatter
+skoggerlatteren
+skoggerlatterens
+skoggerle
+skogindustri
+skogindustris
+skoglendt
+skogs
+skogsarbeider
+skogsarbeidere
+skogsarbeideren
+skogsarbeiderens
+skogsarbeideres
+skogsarbeiderne
+skogsarbeidernes
+skogsbygd
+skogsbygda
+skogsbygdene
+skogsbygder
+skogsdrift
+skogsdrifta
+skogsdriften
+skogsdriftens
+skogsvei
+skogsveien
+skogsveiene
+skogsveiens
+skogsveier
+skogteig
+skogteigen
+skogteigens
+skohorn
+skohornet
+skohornets
+skokk
+skokken
+skokkene
+skokkens
+skokker
+skolastiker
+skolastikere
+skolastikeren
+skolastikerens
+skolastikeres
+skolastikerne
+skolastikernes
+skolastikk
+skolastikken
+skolastikkens
+skolastisk
+skole
+skolealder
+skolealderen
+skolealderens
+skoleavis
+skoleavisen
+skoleavisene
+skoleavisens
+skoleaviser
+skolebarn
+skolebarna
+skolebarnet
+skolebarnets
+skolebenk
+skolebenken
+skolebenkens
+skolebøker
+skolebudsjett
+skolebudsjettene
+skolebudsjettet
+skolebudsjettets
+skolebygning
+skolebygningen
+skolebygningene
+skolebygningens
+skolebygninger
+skoledag
+skoledagen
+skoledagene
+skoledagens
+skoledager
+skoledirektør
+skoledirektøren
+skoledirektørene
+skoledirektørens
+skoledirektører
+skoleelev
+skoleeleven
+skoleelevene
+skoleelevens
+skoleelever
+skolefolk
+skolefolkene
+skolegang
+skolegangen
+skolegangens
+skolegård
+skolegården
+skolegårdens
+skolegutt
+skolegutten
+skoleguttene
+skoleguttens
+skolegutter
+skoleinspektør
+skoleinspektøren
+skoleinspektørene
+skoleinspektørens
+skoleinspektører
+skoleklasse
+skoleklassen
+skoleklassene
+skoleklassens
+skoleklasser
+skolekorps
+skolekorpsa
+skolekorpsene
+skolekorpset
+skolekorpsets
+skolelege
+skolelegen
+skolelegens
+skolelov
+skoleloven
+skolelovene
+skolelovens
+skolelover
+skolemester
+skolemesteren
+skolemesterens
+skolemestrene
+skolemyndighetene
+skolemyndigheter
+skolen
+skolene
+skolens
+skoleområde
+skoleområdet
+skoleordning
+skoleordninga
+skolepike
+skolepiken
+skolepikene
+skolepikens
+skolepiker
+skoleplan
+skoleplanen
+skoleplanene
+skoleplanens
+skoleplaner
+skolepolitikk
+skolepolitikken
+skolepolitikkens
+skoleprogram
+skoleprogrammene
+skoleprogrammer
+skoleprogrammet
+skoleprogrammets
+skoler
+skoleår
+skolere
+skoleårene
+skolerer
+skoleåret
+skoleårets
+skolering
+skolert
+skolerte
+skoles
+skolesjef
+skolesjefen
+skolesjefene
+skolesjefens
+skolesjefer
+skoleslag
+skoleslagene
+skoleslaget
+skoleslagets
+skolestell
+skolestellet
+skolestellets
+skolestyra
+skolestyre
+skolestyremøta
+skolestyremøte
+skolestyremøtene
+skolestyremøter
+skolestyremøtet
+skolestyremøtets
+skolestyrene
+skolestyrer
+skolestyrere
+skolestyreren
+skolestyrerens
+skolestyreres
+skolestyrerne
+skolestyrernes
+skolestyret
+skolestyrets
+skoletid
+skoletida
+skoletiden
+skoletidens
+skoleuka
+skoleuke
+skoleuken
+skoleukene
+skoleukens
+skoleuker
+skoleungdom
+skoleungdommen
+skoleungdommene
+skoleungdommens
+skoleungdommer
+skoleverk
+skoleverket
+skoleverkets
+skolevesen
+skolevesenet
+skolevesenets
+skolissa
+skolisse
+skolissen
+skolissene
+skolissens
+skolisser
+skolm
+skolma
+skolmen
+skolmene
+skolmens
+skolmer
+skolt
+skolten
+skoltene
+skoltens
+skolter
+skomaker
+skomakere
+skomakeren
+skomakerens
+skomakeres
+skomakerne
+skomakernes
+skonnert
+skonnerten
+skonnertene
+skonnertens
+skonnerter
+skonrok
+skonroken
+skonrokene
+skonrokens
+skonroker
+skor
+såkorn
+skorne
+såkornet
+såkornets
+skorpa
+skorpe
+skorpen
+skorpene
+skorpens
+skorper
+skorpion
+skorpionen
+skorpionene
+skorpionens
+skorpioner
+skorstein
+skorsteinen
+skorsteinene
+skorsteinens
+skorsteiner
+skort
+skorte
+skorten
+skortens
+skorter
+skotsk
+skotske
+skott
+skottdag
+skotte
+skotten
+skottens
+skottet
+skotthold
+skottholdet
+skottholdets
+skottår
+skottåra
+skottårene
+skottåret
+skottårets
+skotøy
+skotøyet
+skotøyets
+skova
+skove
+skoven
+skovene
+skovens
+skover
+skovet
+skovl
+skovla
+skovlen
+skovlene
+skovlens
+skovler
+skrå
+skår
+skråa
+skrabb
+skrabben
+skrabbens
+skral
+skrale
+skrall
+skralle
+skrallet
+skramla
+skramle
+skramler
+skramlet
+skramma
+skramme
+skrammel
+skrammelet
+skrammelets
+skrammen
+skrammene
+skrammens
+skrammer
+skrammet
+skrangel
+skrangelet
+skrangelets
+skrangla
+skrangle
+skranglet
+skranglete
+skranke
+skranken
+skrankene
+skrankens
+skranker
+skranten
+skrantne
+skrap
+skrape
+skrapet
+skraping
+skrapinga
+skrapingen
+skrapingens
+skrapjern
+skrapjernet
+skrapjernets
+skrasl
+skrasle
+skraslet
+skratl
+skratle
+skratlet
+skratt
+skratta
+skratten
+skrattene
+skrattens
+skratter
+skrattet
+skraver
+skravere
+skraverer
+skravert
+skraverte
+skravl
+skravla
+skravle
+skravlebøtta
+skravlebøtte
+skravlen
+skravlens
+skravler
+skravlet
+skravlete
+skravlevoren
+skrådde
+skre
+skåre
+skred
+skredder
+skreddere
+skredderen
+skredderens
+skredderes
+skredderne
+skreddernes
+skreddersydd
+skredet
+skrei
+skreia
+skreien
+skreiene
+skreiens
+skreier
+skreifiske
+skreifisket
+skreik
+skreiv
+skrek
+skreket
+skrekk
+skrekkelig
+skrekken
+skrekkens
+skrekkslagen
+skrekkslagne
+skrekkslått
+skrell
+skrelle
+skrellet
+skrelt
+skrelte
+skremme
+skremmende
+skremsel
+skremselet
+skremselets
+skremslene
+skremsler
+skremslet
+skremslets
+skremt
+skremte
+skråen
+skåren
+skrens
+skrense
+skrenset
+skrent
+skrenten
+skrentene
+skrentens
+skrenter
+skreppa
+skreppe
+skreppen
+skreppene
+skreppens
+skrepper
+skåret
+skrev
+skreva
+skrevde
+skreve
+skrevet
+skrevne
+skrevs
+skårfast
+skårfeste
+skårfestet
+skri
+skribent
+skribenten
+skribentene
+skribentens
+skribenter
+skribla
+skrible
+skribler
+skriblet
+skridd
+skridde
+skride
+skrider
+skrie
+skrift
+skrifta
+skrifte
+skriftefar
+skriftefaren
+skriftefarens
+skriftemål
+skriftemålet
+skriftemålets
+skriften
+skriftens
+skrifter
+skriftet
+skriftform
+skriftforma
+skriftformen
+skriftformene
+skriftformens
+skriftformer
+skriftlig
+skriftlige
+skriftprosjektør
+skriftprosjektøren
+skriftprosjektørens
+skriftspråk
+skriftspråket
+skriftspråkets
+skrifttegn
+skrifttegnene
+skrifttegnet
+skrifttegnets
+skrik
+skrike
+skriker
+skrikerunge
+skrikerungen
+skrikerungens
+skriket
+skrin
+skrinet
+skrinets
+skrinlagt
+skrinlegge
+skrinlegger
+skrinn
+skrinne
+skrint
+skrir
+skritt
+skritte
+skrittet
+skrittvis
+skriv
+skrive
+skrivebok
+skriveboka
+skriveboken
+skrivebokens
+skrivebord
+skriveborda
+skrivebordene
+skrivebordet
+skrivebordets
+skrivefeil
+skrivefeilen
+skrivefeilene
+skrivefeilens
+skrivelse
+skrivelsen
+skrivelsens
+skrivemaskin
+skrivemaskina
+skrivemaskinen
+skrivemaskinene
+skrivemaskinens
+skrivemaskiner
+skrivemåte
+skrivemåten
+skrivemåtene
+skrivemåtens
+skrivemåter
+skrivende
+skriveplass
+skriveplassen
+skriveplassene
+skriveplassens
+skriveplasser
+skriver
+skrivere
+skriveren
+skriverens
+skriveri
+skriveriene
+skriverier
+skriveriet
+skriveriets
+skrives
+skrivet
+skrivevariant
+skrivevarianten
+skrivevariantens
+skriveøving
+skriveøvingen
+skriveøvingens
+skriving
+skrivinga
+skrivingen
+skrivning
+skrivningen
+skrivningens
+skrål
+skråle
+skråler
+skrålet
+skræling
+skrælingen
+skrælingens
+skrålt
+skrålte
+skrømt
+skrømte
+skrømtet
+skrøn
+skråne
+skrøne
+skårne
+skrånende
+skrøner
+skrønet
+skråning
+skråningen
+skråningene
+skråningens
+skråninger
+skrønt
+skrønte
+skrofulose
+skrofulosen
+skrofulosens
+skrofuløs
+skrog
+skroga
+skrogene
+skroget
+skrogets
+skrot
+skrotet
+skrotets
+skrott
+skrotten
+skrottene
+skrottens
+skrotter
+skrov
+skrova
+skrovene
+skrovet
+skrovets
+skrøpelig
+skrøpelige
+skrøpelighet
+skrøpeligheten
+skrøpelighetens
+skråplan
+skråplanet
+skråplanets
+skrås
+skråsikker
+skråsikkert
+skrøt
+skråtobakk
+skråtobakken
+skråtobakkens
+skrått
+skråttstilte
+skru
+skrubb
+skrubba
+skrubben
+skrubbene
+skrubbens
+skrubber
+skrubbet
+skrubbsulten
+skrud
+skruda
+skrudd
+skrudde
+skrudene
+skrudet
+skrudets
+skrue
+skruen
+skruens
+skruer
+skrues
+skruestikka
+skruestikke
+skruestikken
+skruestikkene
+skruestikkens
+skruestikker
+skruis
+skruisen
+skruisens
+skrujern
+skrujerna
+skrujernene
+skrujernet
+skrujernets
+skrukk
+skrukke
+skrukken
+skrukkens
+skrukket
+skrukkete
+skrukne
+skrull
+skrullet
+skrullete
+skrulling
+skrullingen
+skrullingene
+skrullingens
+skrullinger
+skrumor
+skrumora
+skrumoren
+skrumorens
+skrumpa
+skrumpe
+skrumpet
+skårung
+skårungen
+skårungens
+skrunøkkel
+skrunøkkelen
+skrunøkkelens
+skruplene
+skrupler
+skruppel
+skruppelen
+skruppelens
+skruppelløs
+skrupuløs
+skruv
+skruvde
+skruven
+skruvene
+skruvens
+skruver
+skryt
+skryte
+skryter
+skrytere
+skryteren
+skryterens
+skryteres
+skryterne
+skryternes
+skrytet
+skrytt
+skrytte
+søksmål
+søksmålet
+søksmålets
+søkt
+skåta
+skåte
+søkte
+skåten
+skåtene
+skåtens
+skåter
+skåtet
+skubb
+skubbe
+skubben
+skubbens
+skubber
+skudd
+skuddene
+skuddet
+skuddhold
+skuddholdet
+skuddholdets
+skuddpremie
+skuddpremien
+skuddpremiene
+skuddpremiens
+skuddpremier
+skuddår
+skuddåra
+skuddårene
+skuddåret
+skuddårets
+skue
+skueplass
+skueplassen
+skueplassene
+skueplassens
+skueplasser
+skuer
+skuespill
+skuespilla
+skuespillene
+skuespiller
+skuespillere
+skuespilleren
+skuespillerens
+skuespilleres
+skuespillerinne
+skuespillerinnen
+skuespillerinnens
+skuespillerne
+skuespillernes
+skuespillet
+skuespillets
+skuet
+skuff
+skuffa
+skuffe
+skuffel
+skuffelen
+skuffelens
+skuffelse
+skuffelsen
+skuffelsene
+skuffelsens
+skuffelser
+skuffen
+skuffende
+skuffens
+skuffer
+skuffet
+skufla
+skufle
+skuflene
+skufler
+skuflet
+skulder
+skulderen
+skulderens
+skuldra
+skuldrene
+skuldrer
+skule
+skuler
+skulk
+skulka
+skulke
+skulket
+skulle
+skullet
+skulpe
+skulpen
+skulpens
+skulptør
+skulptøren
+skulptørene
+skulptørens
+skulptører
+skulptur
+skulpturen
+skulpturene
+skulpturens
+skulpturer
+skuls
+skult
+skulte
+skum
+skumbrott
+skumbrottene
+skumgummi
+skumgummien
+skumgummiens
+skumla
+skumle
+skumler
+skumleri
+skumleria
+skumleriene
+skumlerier
+skumlet
+skumma
+skummamelk
+skummamelka
+skummamelken
+skummamelkens
+skummamjølk
+skummamjølka
+skumme
+skummel
+skummer
+skummet
+skummetmelk
+skummetmelka
+skummetmelken
+skummetmelkens
+skummetmjølk
+skummetmjølka
+skump
+skumpa
+skumpen
+skumpene
+skumpens
+skumper
+skumpet
+skumpla
+skumplast
+skumplasten
+skumplastens
+skumple
+skumpler
+skumplet
+skumre
+skumring
+skumringa
+skumringen
+skumringens
+skumt
+skunk
+skunken
+skunkene
+skunkens
+skunker
+skur
+skura
+skurd
+skurden
+skurdene
+skurdens
+skurder
+skurdonn
+skurdonna
+skurdonnene
+skurdonner
+skurdtresker
+skurdtreskere
+skurdtreskeren
+skurdtreskerens
+skurdtreskeres
+skurdtreskerne
+skurdtreskernes
+skure
+skurefilla
+skurefille
+skurefillene
+skurefiller
+skurekona
+skurekone
+skuren
+skurens
+skuret
+skurk
+skurkaktig
+skurken
+skurkene
+skurkens
+skurker
+skuronn
+skuronna
+skuronnen
+skuronnene
+skuronnens
+skuronner
+skurra
+skurre
+skurrer
+skurret
+skurtresker
+skurtreskere
+skurtreskeren
+skurtreskerens
+skurtreskeres
+skurtreskerne
+skurtreskernes
+skurv
+skurve
+skurven
+skurvens
+skurvet
+skurvete
+skusla
+skusle
+skusler
+skuslet
+skussmål
+skussmåla
+skussmålene
+skussmålet
+skussmålets
+skut
+skuta
+skute
+skutel
+skutelen
+skutelens
+skutelsvein
+skutelsveinen
+skutelsveinens
+skuten
+skutene
+skuter
+skutere
+skuteren
+skuterens
+skuteres
+skuterne
+skuternes
+skutle
+skutler
+skutt
+skuve
+skuver
+skvadron
+skvadronen
+skvadronene
+skvadronens
+skvadroner
+skval
+skvalder
+skvalderet
+skvalderets
+skvaldra
+skvaldre
+skvaldret
+skvaldrets
+skvale
+skvalet
+skvalpa
+skvalpe
+skvalpene
+skvalper
+skvalpet
+skvatre
+skvatt
+skvetne
+skvett
+skvetta
+skvette
+skvetten
+skvettens
+skvetter
+skvettet
+skvip
+skvipet
+skvipets
+skvis
+skvisa
+skvisen
+skvisene
+skvisens
+skviser
+skviset
+skvær
+skvære
+skværsegl
+skværseglet
+skværseglets
+skvulp
+skvulpe
+sky
+skøy
+skya
+skybrott
+skybrottet
+skybrottets
+skydde
+skydekka
+skydekke
+skydekket
+skye
+skøye
+skyen
+skøyen
+skyene
+skøyens
+skyer
+skøyer
+skøyeraktig
+skøyeraktige
+skøyere
+skøyeren
+skøyerens
+skøyerfant
+skøyerfanten
+skøyerfantens
+skyet
+skyete
+skyffel
+skyffelen
+skyffelens
+skyfla
+skyfle
+skyflene
+skyfler
+skyflet
+skygg
+skygge
+skyggen
+skyggens
+skygger
+skyhøye
+skyhøyt
+skylapp
+skylappen
+skylappene
+skylappens
+skylapper
+skyld
+skylda
+skylde
+skylden
+skylder
+skyldes
+skyldfølelse
+skyldfølelsen
+skyldfølelsens
+skyldfolk
+skyldfolket
+skyldfolkets
+skyldfri
+skyldig
+skyldige
+skyldighet
+skyldigheten
+skyldighetens
+skyldmark
+skyldmarka
+skyldmarken
+skyldmarkens
+skyldnad
+skyldnaden
+skyldnadene
+skyldnadens
+skyldnader
+skyldner
+skyldnere
+skyldneren
+skyldnerens
+skyldsette
+skyldspørsmål
+skyldspørsmålet
+skyldspørsmålets
+skyldt
+skyldte
+skyldtes
+skylight
+skylightet
+skylightets
+skyll
+skylle
+skyller
+skylles
+skyllet
+skyllregn
+skyllregnet
+skyllregnets
+skylt
+skylte
+skyme
+skymt
+skynde
+skyndsom
+skyndt
+skyndte
+skypumpe
+skyr
+skyru
+skyrua
+skyskraper
+skyskrapere
+skyskraperen
+skyskraperens
+skyskraperes
+skyskraperne
+skyskrapernes
+skyss
+skyssa
+skyssen
+skyssene
+skyssens
+skysser
+skysset
+skyt
+skøyta
+skyte
+skøyte
+skøytebane
+skøytebanen
+skøytebanene
+skøytebanens
+skøytebaner
+skøyteforbund
+skøyteforbundet
+skøyteforbundets
+skøyteløp
+skøyteløpene
+skøyteløper
+skøyteløpere
+skøyteløperen
+skøyteløperens
+skøyteløperes
+skøyteløperne
+skøyteløpernes
+skøyteløpet
+skøyteløpets
+skøyten
+skøytene
+skøytens
+skyter
+skøyter
+skytes
+skyteskiva
+skyteskive
+skyteskiven
+skyteskivene
+skyteskivens
+skyteskiver
+skøytesport
+skøytesporten
+skøytesportens
+skøytet
+skytetrening
+skytetreningen
+skytetreningens
+skøyteunion
+skøyteunionen
+skøyteunionens
+skytevåpen
+skytevåpenet
+skytevåpenets
+skytevåpnene
+skytevåpnenes
+skyting
+skytinga
+skytingen
+skytlene
+skytler
+skyts
+skytsengel
+skytsengelen
+skytsengelens
+skytsenglene
+skytsengler
+skytset
+skytsets
+skyttel
+skyttelen
+skyttelens
+skytter
+skyttere
+skytteren
+skytterens
+skytteres
+skytterlag
+skytterlaget
+skytterlagets
+skytterne
+skytternes
+skyv
+skyve
+skyvekraft
+skyvekrafta
+skyvekraften
+skyvekraftens
+skyvelære
+skyver
+skyves
+slå
+sæl
+søl
+sla
+slåa
+såla
+søla
+slabba
+slabbe
+slabbedask
+slabbedasken
+slabbedaskene
+slabbedaskens
+slabbedasker
+slabberas
+slabberasa
+slabberasene
+slabberaset
+slabberasets
+slabbet
+slacks
+slacksen
+slacksene
+slacksens
+sladder
+sladdere
+sladderen
+sladderens
+sladderes
+sladderne
+sladdernes
+sladra
+sladre
+sladrer
+sladret
+slae
+slaet
+slafs
+slafsa
+slafse
+slafseføre
+slafseføret
+slafset
+slafsete
+slag
+slager
+slagere
+slageren
+slagerens
+slageres
+slagerne
+slagernes
+slaget
+slagferdig
+slagg
+slagge
+slagget
+slagkraft
+slagkraften
+slagkraftens
+slagkraftig
+slagmark
+slagmarka
+slagmarken
+slagmarkene
+slagmarkens
+slagmarker
+slagne
+slagord
+slagorda
+slagordene
+slagordet
+slagordets
+slagplan
+slagplanen
+slagplanens
+slags
+slagscene
+slagscenen
+slagscenene
+slagscenens
+slagscener
+slagside
+slagsiden
+slagsidens
+slagsmål
+slagsmåla
+slagsmålene
+slagsmålet
+slagsmålets
+slagverk
+slagverka
+slagverkene
+slagverker
+slagverkere
+slagverkeren
+slagverkerens
+slagverkeres
+slagverkerne
+slagverkernes
+slagverket
+slagverkets
+slak
+slake
+slakk
+slakke
+slakket
+slakna
+slakne
+slakner
+slaknet
+slakt
+slakte
+slakter
+slaktere
+slakteren
+slakterens
+slakteres
+slakteri
+slakteria
+slakteriene
+slakterier
+slakteriet
+slakteriets
+slakterne
+slakternes
+slakting
+slaktinga
+slaktingen
+slalåm
+slalåma
+slalåmen
+slalåmens
+slam
+slammet
+slammets
+slamp
+slampen
+slampene
+slampens
+slamper
+slampet
+slampete
+slams
+slamse
+slang
+slange
+slangen
+slangens
+slanger
+slanget
+slank
+slanke
+slankekur
+slankekuren
+slankekurens
+slant
+slanten
+slantene
+slantens
+slanter
+slapna
+slapne
+slapner
+slapnet
+slapp
+slappe
+slapper
+slappere
+slapphet
+slappheten
+slapphetens
+slaps
+slapse
+slapseføre
+slapseføret
+slapset
+slapstick
+slapt
+slaraffenland
+slaraffenlandet
+slaraffenlandets
+slark
+slarke
+slarken
+slarkens
+slarket
+slarkete
+slarv
+slarve
+slarven
+slarvens
+slarvet
+slarvete
+slask
+slasken
+slaskene
+slaskens
+slasker
+slasket
+slaskete
+slaur
+slauren
+slaurene
+slaurens
+slaurer
+slave
+slaven
+slavens
+slaver
+slavere
+slaveren
+slaverens
+slaveres
+slaveri
+slaveria
+slaveriene
+slaverier
+slaveriet
+slaveriets
+slaverne
+slavernes
+slavinna
+slavinne
+slavinnen
+slavinnene
+slavinnens
+slavinner
+slavisk
+slavonsk
+slåbrok
+slåbroken
+slåbrokene
+slåbrokens
+slåbroker
+såld
+sålde
+sælde
+såldet
+såle
+sæle
+søle
+sælebot
+sælebota
+slede
+sleden
+sledens
+således
+slegga
+slegge
+sleggen
+sleggene
+sleggens
+slegger
+sålegjenger
+sålegjengeren
+sålegjengerens
+sleik
+sleika
+sleike
+sleiken
+sleikens
+sleikepott
+sleikepotten
+sleikepottens
+sleiket
+sleip
+sleipe
+sleipt
+sleis
+såleis
+sleisen
+sleisene
+sleisens
+sleiser
+sleit
+sleiv
+sleiva
+sleive
+sleiven
+sleivens
+sleiver
+sleivet
+sleivete
+slekt
+slekta
+slekte
+slekten
+slektens
+slekter
+slektledd
+slektleddene
+slektleddet
+slektleddets
+slektning
+slektningen
+slektningene
+slektningens
+slektninger
+slektskap
+slem
+slembe
+slemmen
+slemmens
+slemt
+slåen
+sålen
+slående
+slendrian
+slendrianen
+slendrianene
+slendrianens
+slendrianer
+åslendt
+sleng
+slenge
+slengen
+slengens
+slenger
+slenget
+slengete
+slengt
+slengte
+slåens
+sålens
+slentre
+slentrende
+slep
+slepe
+slepebør
+slepebøra
+slepebåt
+slepebåten
+slepebåtene
+slepebåtens
+slepebåter
+slepen
+sleper
+slepere
+sleperen
+sleperens
+sleperes
+sleperingsmotor
+sleperingsmotoren
+sleperingsmotorens
+sleperne
+slepernes
+slepet
+slepne
+slepp
+sleppe
+sleppet
+slepphendt
+sleppt
+sleppte
+søler
+slesk
+slet
+sølet
+sølete
+sletne
+slett
+sletta
+slette
+sletten
+slettens
+slettes
+slettet
+sletthendt
+sleva
+sleve
+sleven
+slevens
+slever
+slevet
+sløgd
+sløgde
+sølibat
+sølibatet
+sølibatets
+slibrig
+slide
+sliden
+slidene
+slidens
+slides
+slik
+slike
+slikk
+slikka
+slikke
+slikken
+slikkens
+slikkepott
+slikkepotten
+slikkepottens
+slikker
+slikkeri
+slikkeria
+slikkeriene
+slikkerier
+slikkeriet
+slikkeriets
+slikket
+slikt
+slim
+slimet
+slimete
+slimets
+slimhinne
+slimhinnen
+slimhinnene
+slimhinnens
+slimhinner
+slind
+slinda
+slindene
+slinder
+slinger
+slingeren
+slingerens
+slingra
+slingre
+slingrer
+slingret
+slingringsmonn
+slingringsmonnen
+slingringsmonnens
+slintre
+slintrer
+slip
+slipe
+sliper
+sliperi
+sliperia
+sliperiene
+sliperier
+sliperiet
+sliperiets
+slipers
+slipestein
+slipesteinen
+slipesteinene
+slipesteinens
+slipesteiner
+slipp
+slippe
+slippen
+slippens
+slipper
+slippes
+slippet
+slippover
+slippovere
+slippoveren
+slippoverens
+slippoveres
+slippoverne
+slippovernes
+slips
+slipsa
+slipsene
+slipset
+slipsets
+slipt
+slipte
+slir
+slira
+slire
+sliske
+slisken
+sliskene
+sliskens
+slisker
+sliss
+slissen
+slissene
+slissens
+slisser
+slit
+slitasje
+slitasjen
+slitasjens
+slite
+sliten
+sliter
+slitere
+sliteren
+sliterens
+sliteres
+sliterne
+sliternes
+slitesterk
+slitesterke
+slitet
+slitna
+slitne
+slitner
+slitnet
+slitsom
+slitsomme
+slitsomt
+slitt
+slitte
+sølja
+sølje
+søljen
+søljene
+søljens
+søljer
+sløke
+slåmaskin
+slåmaskinen
+slåmaskinens
+slo
+sloa
+slodd
+slodde
+sloet
+sloets
+slok
+sloket
+slokets
+slokk
+slokke
+slokker
+slokna
+slokne
+sloknet
+slokt
+slokte
+sloss
+slott
+slotta
+slottene
+slottet
+slottets
+slottspark
+slottsparken
+slottsparkene
+slottsparkens
+slottsparker
+slovak
+slovaken
+slovakene
+slovakens
+slovaker
+slovakisk
+slow
+slåpen
+slåpne
+slår
+slør
+sløra
+sløren
+slørene
+slørens
+sløret
+slørets
+slås
+sløse
+sløser
+sløseri
+sløseria
+sløseriene
+sløserier
+sløseriet
+sløseriets
+slåss
+slåsskjempe
+slåsskjempen
+slåsskjempene
+slåsskjempens
+slåsskjemper
+sløst
+sløste
+sålt
+sælt
+sølt
+sålte
+sølte
+slått
+slåtte
+slåttekar
+slåttekaren
+slåttekarens
+slåtten
+slåttonn
+slåttonna
+slåttonnen
+slåttonnene
+slåttonnens
+slåttonner
+slu
+slubbert
+slubberten
+slubbertene
+slubbertens
+slubberter
+slubra
+slubre
+slubrer
+slubret
+sludd
+sluddbyge
+sluddbygen
+sluddbygene
+sluddbygens
+sluddbyger
+sludde
+sludder
+sludderet
+sludderets
+sluddet
+sludra
+sludre
+sludrer
+sludret
+slue
+sluffa
+sluffe
+sluffen
+sluffene
+sluffens
+sluffer
+slufs
+slufse
+slufset
+sluk
+sluke
+sluken
+sluker
+sluket
+slukke
+slukkes
+slukket
+slukne
+sluknet
+slukt
+slum
+slumkvarter
+slumkvarterer
+slumkvarteret
+slumkvarterets
+slumkvartret
+slumkvartrets
+slummen
+slummens
+slummer
+slummeren
+slummerens
+slump
+slumpe
+slumpen
+slumpens
+slumper
+slumpetreff
+slumpetreffet
+slumpetreffets
+slumra
+slumre
+slumret
+slumse
+slumset
+slumsete
+slunken
+slunt
+slunta
+slunter
+sluntet
+sluntra
+sluntre
+sluntrer
+sluntret
+slupp
+sluppen
+sluppene
+sluppens
+slupper
+sluppet
+slure
+slurk
+slurka
+slurken
+slurkene
+slurkens
+slurker
+slurket
+slurpa
+slurpe
+slurpene
+slurper
+slurpet
+slurv
+slurva
+slurve
+slurvet
+slurvete
+slusa
+sluse
+slusen
+slusene
+slusens
+sluser
+sluset
+slusk
+sluske
+slusken
+sluskens
+slusket
+sluskete
+slut
+slute
+slutet
+slutning
+slutningen
+slutningens
+slutninger
+slutt
+slutta
+slutte
+sluttede
+sluttelig
+slutten
+sluttens
+slutter
+sluttet
+sluttfase
+sluttfasen
+sluttfasens
+sluttført
+sluttresultat
+sluttresultatene
+sluttresultatet
+sluttresultatets
+sluttseddel
+sluttseddelen
+sluttseddelens
+sluttsedlene
+sluttsedler
+sluttstrek
+sluttstreken
+sluttstrekens
+sløv
+sølv
+sløva
+sløve
+sløvet
+sølvet
+sølvets
+sølvmedalje
+sølvmedaljen
+sølvmedaljene
+sølvmedaljens
+sølvmedaljer
+sølvtøy
+sølvtøyet
+sølvtøyets
+sløyd
+sløyden
+sløydens
+sløye
+sløyer
+sløyet
+sløyfa
+sløyfe
+sløyfer
+sløyfes
+sløyfet
+slyng
+slynge
+slyngel
+slyngelaktig
+slyngelen
+slyngelens
+slyngen
+slyngens
+slynglene
+slyngler
+slyngplante
+slyngplanten
+slyngplantene
+slyngplantens
+slyngplanter
+små
+søm
+smadra
+smadre
+smadrer
+smadret
+smak
+smaka
+smake
+smaken
+smaker
+smakssak
+smakssaka
+smakssaken
+smakssakens
+smakt
+smakte
+smal
+smalen
+smalens
+smalere
+small
+smalna
+smalne
+smalner
+smalnet
+smalspora
+smalt
+såmann
+såmannen
+såmannens
+smaragd
+smaragden
+smaragdene
+smaragdens
+smaragder
+smart
+smash
+smashe
+smashen
+smashens
+smashet
+smask
+smasken
+smaskens
+smatt
+smatte
+smattet
+smau
+smaua
+smauene
+smauet
+smauets
+smaug
+småbarn
+småbarna
+småbeløp
+småbeløpene
+småbeløpet
+småbeløpets
+småbruk
+småbruka
+småbrukene
+småbruker
+småbrukere
+småbrukeren
+småbrukerens
+småbrukeres
+småbrukerne
+småbrukernes
+småbruket
+småbrukets
+småbåt
+småbåten
+småbåtene
+småbåtens
+småbåter
+småby
+småbyen
+småbyene
+småbyens
+småbyer
+smed
+smede
+smededikt
+smedediktet
+smedediktets
+smeden
+smedens
+smeik
+smeike
+smeise
+smeiser
+smeist
+smeiste
+smekk
+smekke
+smekken
+smekkens
+smekker
+smekkfull
+smekklås
+smekklåsen
+smekklåsene
+smekklåsens
+smekklåser
+smekre
+smekta
+smekte
+smekter
+smektet
+smell
+smelle
+smellen
+smellende
+smellens
+smeller
+smelt
+smelte
+smeltedigel
+smeltedigelen
+smeltedigelens
+smeltedigelstålet
+smeltediglene
+smeltedigler
+smeltet
+såmenn
+såmennene
+såmennenes
+såmenns
+smergel
+smergelen
+smergelens
+smerte
+smertefri
+smertefrie
+smertefritt
+smertefull
+smertefulle
+smertelig
+smerten
+smertene
+smertens
+smertensbarn
+smertensbarnet
+smertensbarnets
+smerter
+smertestillende
+smett
+smette
+smettet
+småfe
+småfly
+småflyet
+småflyets
+smågris
+smågrisene
+smågriser
+smågutt
+smågutten
+småguttene
+småguttens
+smågutter
+småhus
+småhusa
+småhusene
+småhuset
+småhusets
+smi
+smidig
+smidigere
+smidighet
+smidigheten
+smidighetens
+smie
+smieavl
+smieavlen
+smieavlens
+smiesteet
+smiger
+smigeren
+smigerens
+smigre
+smigrende
+smigrer
+smigrere
+smigreren
+smigrerens
+smigreres
+smigrerne
+smigrernes
+smijern
+smijernet
+smijernets
+smil
+smile
+smilen
+smilende
+smilens
+smiler
+smilet
+smilt
+smilte
+småindustri
+småindustrien
+småindustriens
+småindustrier
+sminka
+sminke
+sminken
+sminkens
+sminkør
+sminkøren
+sminkørene
+sminkørens
+sminkører
+sminkøsa
+sminkøse
+sminkøsen
+sminkøsene
+sminkøsens
+sminkøser
+smiska
+smiske
+smisker
+smisket
+smitt
+smitta
+smitte
+smittebærer
+smittebærere
+smittebæreren
+smittebærerens
+smittebæreres
+smittebærerne
+smittebærernes
+smitten
+smittens
+smittet
+smittsom
+småkvist
+småkvistene
+smålig
+smålåten
+sømme
+sømmelig
+sømmen
+sømmene
+sømmer
+sømmet
+smånøgd
+småningom
+smog
+smogen
+smogens
+smoking
+smokingen
+smokingene
+smokingens
+smokinger
+smokk
+smokken
+smokkene
+smokkens
+smokker
+småpenger
+småpike
+småpiken
+småpikene
+småpikens
+småpiker
+småprat
+småprate
+småprater
+smør
+smørbrød
+smørbrødene
+smørbrødet
+smørbrødets
+smøre
+smørelse
+smørelsen
+smørelsens
+smører
+smøret
+smøring
+smøringa
+smøringen
+smøringens
+smørja
+smørje
+smørjen
+smørjens
+smårute
+smårutet
+sms
+småskåren
+småstein
+småsteinen
+småsteinene
+småsteinens
+småsteiner
+småsteinet
+småstrid
+småstriden
+småstridene
+småstridens
+småstrider
+småting
+småtingen
+småtingene
+småtingens
+smått
+småtteri
+småtteria
+småtteriene
+småtterier
+småtteriet
+småtteriets
+smug
+smuga
+smugene
+smuget
+smugets
+smugla
+smugle
+smugler
+smuglere
+smugleren
+smuglerens
+smugleres
+smuglerne
+smuglernes
+smuglet
+smukk
+smukke
+smukt
+smul
+smuldra
+smuldre
+smuldrer
+smuldret
+smulen
+smulens
+smult
+smultet
+smultets
+smultring
+smultringen
+smultringene
+smultringens
+smultringer
+smurning
+smurningen
+smurningene
+smurningens
+smurninger
+smurt
+smurte
+smuss
+smusse
+smusset
+smussig
+smutta
+smutte
+smutter
+smuttet
+smutthol
+smutthola
+smuttholet
+smuttholets
+smøye
+smøyer
+smyge
+smyger
+smykke
+smykkene
+smykker
+smykket
+snø
+snabb
+snabben
+snabbene
+snabbens
+snabber
+snabel
+snabelen
+snabelens
+snablene
+snabler
+snadda
+snadde
+snadden
+snaddene
+snaddens
+snadder
+snadderet
+snadderets
+snafsa
+snafse
+snafser
+snafset
+snak
+snake
+snakk
+snakka
+snakke
+snakker
+snakkes
+snakkesalig
+snakket
+snakketøy
+snakketøyet
+snakketøyets
+snakksom
+snapp
+snappe
+snappet
+snaps
+snapsa
+snapsen
+snapsene
+snapsens
+snapser
+snapset
+snapshot
+snapshota
+snapshotene
+snapshotet
+snapshotets
+snapt
+snar
+snare
+snarere
+snarest
+snaret
+snarkafé
+snarkafeen
+snarkafeene
+snarkafeens
+snarkafeer
+snarkjøp
+snarkjøpet
+snarkjøpets
+snarlig
+snarrådig
+snarærend
+snarærendet
+snarærendets
+snarsinna
+snart
+snarvei
+snarveien
+snarveiene
+snarveiens
+snarveier
+snau
+snaue
+snauere
+snaut
+snavl
+snavla
+snavle
+snøbil
+snøbilen
+snøbilene
+snøbilens
+snøbiler
+snøbrøyting
+snøbrøytinga
+snøbrøytingen
+snøbrøytingens
+snøbyge
+snøbygen
+snøbygene
+snøbygens
+snøbyger
+søndag
+søndagen
+søndagene
+søndagens
+søndager
+søndagsskole
+søndagsskolen
+søndagsskolene
+søndagsskolens
+søndagsskoler
+søndagstur
+søndagsturen
+søndagsturens
+snødd
+snødde
+sønder
+sønderknust
+søndre
+snødrive
+snedig
+snegl
+snegle
+sneglehus
+sneglehuset
+sneglehusets
+sneglen
+sneglens
+snegler
+snei
+sneie
+sneik
+sneiord
+sneiordet
+sneiordets
+sneis
+sneisa
+sneise
+sneiset
+snek
+sneket
+snekka
+snekke
+snekken
+snekkens
+snekker
+snekkeren
+snekkerens
+snekkermester
+snekkermesteren
+snekkermesterens
+snekkermestrene
+snekkerverksted
+snekkerverkstedet
+snekkerverkstedets
+snekre
+snella
+snelle
+snellen
+snellene
+snellens
+sneller
+snøen
+snøens
+sneppert
+snepperten
+sneppertene
+sneppertens
+snepperter
+snerk
+snerka
+snerken
+snerkene
+snerkens
+snerker
+snerket
+snerp
+snerpe
+snerpet
+snerpete
+snerra
+snerre
+snerrer
+snerret
+snert
+snerta
+snerten
+snertene
+snertens
+snerter
+snertet
+snes
+snesa
+snesene
+sneset
+snesets
+snev
+snever
+snevert
+snevre
+snevrere
+snøfreser
+snøfresere
+snøfreseren
+snøfreserens
+snøfreseres
+snøfreserne
+snøfresernes
+snøfri
+snøft
+snøfte
+snøftet
+snøfting
+snøftinga
+snøftingen
+snøftingens
+snøføyka
+snøføyke
+snøgg
+snøggtenkt
+snøgt
+snibel
+snibelen
+snibelens
+sniblene
+snibler
+sniffa
+sniffe
+sniffer
+sniffere
+snifferen
+snifferens
+snifferes
+snifferne
+sniffernes
+sniffet
+sniffing
+sniffinga
+sniffingen
+sniffingens
+snik
+snike
+sniken
+snikens
+sniker
+sniket
+snikksnakk
+snikksnakket
+snikksnakkets
+snikmord
+snikmordet
+snikmordets
+snile
+snilehus
+snilehuset
+snilehusets
+snilen
+snilene
+snilens
+sniler
+snill
+snille
+snilt
+snipa
+snipe
+snipen
+snipene
+snipens
+sniper
+snipp
+snippen
+snippene
+snippens
+snipper
+snippkjole
+snippkjolen
+snippkjolens
+snirkle
+snirklet
+snirklete
+snitt
+snitte
+snitten
+snittens
+snittet
+snål
+snåling
+snålingen
+snålingene
+snålingens
+snålinger
+snøløsning
+snøløsningen
+snøløsningens
+snøløysing
+snøløysinga
+snøløysingen
+snøløysingens
+snømann
+snømannen
+snømannens
+snømenn
+snømennene
+snømennenes
+snømenns
+snømåking
+snømåkinga
+snømåkingen
+snømåkingens
+sånn
+sønn
+sønna
+sønnafjells
+sønnafjelsk
+sønnafor
+sønnavind
+sønnavinden
+sønnavindens
+sønnavær
+sønnaværet
+sønnaværets
+sånne
+sønnen
+sønnene
+sønnenom
+sønnens
+sønner
+sno
+snoa
+snobb
+snobbe
+snobben
+snobbens
+snobberi
+snobberiet
+snobberiets
+snobbet
+snobbete
+snodd
+snodde
+snodig
+snoen
+snoens
+snok
+snoka
+snoken
+snokene
+snokens
+snoker
+snoket
+snop
+snope
+snopet
+snor
+snora
+snoren
+snorene
+snorens
+snorer
+snork
+snorke
+snorrett
+snøplog
+snøplogen
+snøplogene
+snøplogens
+snøploger
+snør
+snøras
+snøre
+snøret
+snørr
+snørra
+snørren
+snørrens
+snørret
+snørrete
+snørrets
+snørrviktig
+snøscooter
+snøscootere
+snøskred
+snøskredet
+snøskredets
+snøstorm
+snøstormen
+snøstormene
+snøstormens
+snøstormer
+snøt
+sånt
+snu
+snubla
+snuble
+snubler
+snublet
+snudd
+snudde
+snuen
+snuens
+snufs
+snufse
+snufset
+snufsete
+snultre
+snupp
+snuppen
+snuppene
+snuppens
+snupper
+snur
+snurpe
+snurpenot
+snurpenota
+snurpenoten
+snurpenotens
+snurpenøter
+snurper
+snurpere
+snurperen
+snurperens
+snurperes
+snurperne
+snurpernes
+snurpet
+snurpete
+snurr
+snurre
+snurrebass
+snurrebassen
+snurrebassens
+snurren
+snurrens
+snurrevad
+snurrevaden
+snurrevadens
+snurrevadet
+snurrevadets
+snurrig
+snurt
+snurten
+snus
+snusen
+snusens
+snuser
+snusk
+snuska
+snusker
+snusket
+snuskete
+snut
+snuta
+snuten
+snutene
+snutens
+snuter
+snåva
+snåve
+snåver
+snåvet
+snøvle
+snøvlet
+snøvlete
+snøvær
+snøværet
+snøværets
+snøye
+snøyer
+snykte
+snylta
+snylte
+snylter
+snyltere
+snylteren
+snylterens
+snylteres
+snylterne
+snylternes
+snyltet
+snyte
+snyter
+snyteri
+snyteria
+snyteriene
+snyterier
+snyteriet
+snyteriets
+snytt
+snytte
+soareen
+soareens
+sobel
+sobelen
+sobelens
+sober
+soblene
+sobler
+sobre
+soda
+sodaen
+sodaens
+sodavann
+sodavatn
+sodd
+soddet
+soddets
+sofa
+sofaen
+sofaene
+sofaens
+sofaer
+sofist
+sofisten
+sofistens
+sofisteri
+sofisteriet
+sofisteriets
+sofistisk
+softis
+softisen
+softisens
+software
+soge
+sogn
+sogna
+sogne
+sognebarn
+sognebarna
+sogneprest
+sognepresten
+sogneprestene
+sogneprestens
+sogneprester
+sogner
+sognet
+sogning
+sogningen
+sogningens
+soignert
+soilrør
+soilrøra
+soilrøret
+soilrørets
+sokk
+sokkel
+sokkelen
+sokkelens
+sokkelest
+sokkelesten
+sokkelestens
+sokken
+sokkene
+sokkens
+sokker
+soklene
+sokler
+sokn
+sokna
+sokne
+sokneprest
+soknepresten
+sokneprestene
+sokneprestens
+sokneprester
+sokner
+soknet
+sol
+sola
+solbadolje
+solbadoljen
+solbadoljens
+solbær
+solbæra
+solbærene
+solbæret
+solbærets
+solbrille
+solbrillen
+solbrillene
+solbrillens
+solbriller
+sold
+soldat
+soldaten
+soldatene
+soldatenes
+soldatens
+soldater
+solden
+soldens
+sole
+solefall
+solefallet
+solefallets
+soleglad
+solegladet
+solegladets
+soleia
+soleie
+soleien
+soleiene
+soleiens
+soleier
+soleklar
+soleklare
+soleklart
+solemerke
+solemerker
+solen
+solens
+soler
+solgt
+solgte
+solid
+solidarisere
+solidariserer
+solidarisert
+solidariserte
+solidarisk
+solidaritet
+solidariteten
+solidaritetens
+solidaritets
+solide
+soliditet
+soliditeten
+soliditetens
+solist
+solisten
+solistene
+solistens
+solister
+soll
+sollen
+sollens
+solo
+soloen
+soloene
+soloens
+soloer
+solrenning
+solrenninga
+solrenningen
+solrenningens
+solskinn
+solskinnet
+solskinnets
+solstikk
+solstikket
+solstikkets
+solsystem
+solsystema
+solsystemene
+solsystemer
+solsystemet
+solsystemets
+solung
+solungen
+solungene
+solungens
+solunger
+solusjon
+solusjonen
+solusjonene
+solusjonens
+solusjoner
+solvarme
+solvarmen
+solvarmens
+solvens
+solvensen
+solvent
+solverv
+solvervet
+solvervets
+som
+somalier
+somaliere
+somalieren
+somalierens
+somalieres
+somalierne
+somaliernes
+somalisk
+somla
+somle
+somlekopp
+somlekoppen
+somlekoppene
+somlekoppens
+somlekopper
+somler
+somlet
+somme
+sommel
+sommelen
+sommelens
+sommelet
+sommelets
+sommer
+sommeren
+sommerens
+sommerferie
+sommerferien
+sommerferiens
+sommerferierende
+sommerfugl
+sommerfuglen
+sommerfuglene
+sommerfuglens
+sommerfugler
+sommerhalvår
+sommerhalvåret
+sommerhalvårets
+sommerhus
+sommerhusa
+sommerhusene
+sommerhuset
+sommerhusets
+sommerjobb
+sommerjobben
+sommerjobbens
+sommerkjole
+sommerkjolen
+sommerkjolene
+sommerkjolens
+sommerkjoler
+sommerlig
+sommermåned
+sommermåneden
+sommermånedene
+sommermånedens
+sommermåneder
+sommerprogram
+sommerprogrammene
+sommerprogrammer
+sommerprogrammet
+sommerprogrammets
+sommersesong
+sommersesongen
+sommersesongens
+sommertid
+sommertida
+sommertiden
+sommertidens
+sommeruka
+sommeruke
+sommeruken
+sommerukene
+sommerukens
+sommervarme
+sommervarmen
+sommervarmens
+sommervær
+sommerværet
+sommerværets
+sommesteds
+somrene
+somrer
+somt
+son
+sona
+sonant
+sonanten
+sonantene
+sonantens
+sonanter
+sonar
+sonaren
+sonarene
+sonarens
+sonarer
+sonate
+sonaten
+sonatens
+sonatine
+sonatinen
+sonatinens
+sonde
+sonden
+sondene
+sondens
+sonder
+sondere
+sonderer
+sondert
+sonderte
+sondre
+sone
+sonen
+sonens
+soner
+sonet
+sonett
+sonetten
+sonettene
+sonettens
+sonetter
+soning
+soninga
+soningen
+sont
+sonte
+sop
+sope
+sopelime
+sopelimen
+sopelimene
+sopelimens
+sopelimer
+soplime
+sopp
+soppen
+soppene
+soppens
+sopper
+sopran
+sopranen
+sopranene
+sopranens
+sopraner
+sopt
+sopte
+sordin
+sordinen
+sordinene
+sordinens
+sordiner
+sorenskriver
+sorenskrivere
+sorenskriveren
+sorenskriverens
+sorenskriveres
+sorenskriverne
+sorenskrivernes
+sorg
+sorga
+sorgen
+sorgene
+sorgens
+sorger
+soria
+sort
+sorte
+sorten
+sortens
+sorter
+sortere
+sorterer
+sortering
+sorteringa
+sortert
+sorterte
+sorti
+sortien
+sortiene
+sortiens
+sortier
+sos
+sosial
+sosialarbeid
+sosialarbeider
+sosialarbeidere
+sosialarbeideren
+sosialarbeiderens
+sosialarbeideres
+sosialarbeiderne
+sosialarbeidernes
+sosialarbeidet
+sosialarbeidets
+sosialdemokrat
+sosialdemokraten
+sosialdemokratene
+sosialdemokratens
+sosialdemokrater
+sosialdemokratisk
+sosialdemokratiske
+sosialdepartement
+sosialdepartementet
+sosialdepartementets
+sosiale
+sosialisere
+sosialisert
+sosialiserte
+sosialisme
+sosialismen
+sosialismens
+sosialist
+sosialisten
+sosialistene
+sosialistens
+sosialister
+sosialistisk
+sosialistiske
+sosialøkonom
+sosialøkonomen
+sosialøkonomens
+sosialøkonomer
+sosialøkonomi
+sosialøkonomien
+sosialøkonomiens
+sosialkontor
+sosialkontorene
+sosialkontorer
+sosialkontoret
+sosialkontorets
+sosialkurator
+sosialkuratoren
+sosialkuratorene
+sosialkuratorens
+sosialkuratorer
+sosiallovgivning
+sosiallovgivningen
+sosiallovgivningens
+sosialminister
+sosialministeren
+sosialministerens
+sosialministrene
+sosialpolitikk
+sosialpolitikken
+sosialpolitikkens
+sosialskole
+sosialskolen
+sosialskolene
+sosialskolens
+sosialskoler
+sosialt
+sosietet
+sosieteten
+sosietetens
+sosiolog
+sosiologen
+sosiologene
+sosiologens
+sosiologer
+sosiologi
+sosiologien
+sosiologiens
+sosiologisk
+sosiologiske
+sosionom
+sosionomen
+sosionomene
+sosionomens
+sosionomer
+sot
+sota
+sote
+soten
+sotens
+sotet
+sotete
+sott
+sotta
+sotten
+sottene
+sottens
+sotter
+sotteseng
+sottesenga
+sottesengen
+sottesengens
+soussjef
+soussjefen
+soussjefene
+soussjefens
+soussjefer
+sov
+sove
+sovende
+sovepose
+soveposen
+soveposens
+sover
+soverom
+soveromma
+soverommene
+soverommet
+soverommets
+sovet
+soveværelse
+soveværelset
+sovjet
+sovjetborger
+sovjetborgere
+sovjetborgeren
+sovjetborgerens
+sovjetborgeres
+sovjetborgerne
+sovjetborgernes
+sovjeter
+sovjetere
+sovjeteren
+sovjeterens
+sovjeteres
+sovjeterne
+sovjeternes
+sovjetisk
+sovjetiske
+sovjetrepublikk
+sovjetrepublikken
+sovjetrepublikkene
+sovjetrepublikkens
+sovjetrepublikker
+sovjetrussiske
+sovjets
+sovne
+sovnet
+soya
+soyabønne
+soyabønnen
+soyabønnene
+soyabønnens
+soyabønner
+soyaolja
+soyaolje
+soyaoljen
+soyaoljens
+spå
+spa
+såpa
+spadd
+spadde
+spade
+spaden
+spadens
+spadestikk
+spadestikkene
+spadestikket
+spadestikkets
+spadetak
+spadetaket
+spadetakets
+spak
+spake
+spaken
+spakferdig
+spakne
+spakt
+spalier
+spalieret
+spalierets
+spalte
+spalten
+spaltene
+spaltens
+spalteplass
+spalteplassen
+spalteplassens
+spalter
+spaltes
+spaltet
+spandabel
+spander
+spandere
+spanderer
+spandert
+spanderte
+spaniel
+spanielen
+spanielens
+spanier
+spaniere
+spanieren
+spanierens
+spanieres
+spanierne
+spaniernes
+spanjol
+spanjolen
+spanjolene
+spanjolens
+spanjoler
+spankulere
+spankulerer
+spankulert
+spankulerte
+spann
+spannet
+spannets
+spansk
+spanske
+spanskrør
+spanskrøra
+spanskrørene
+spanskrøret
+spanskrørets
+spant
+spante
+spantet
+spar
+spara
+spare
+sparebank
+sparebanken
+sparebankene
+sparebankenes
+sparebankens
+sparebanker
+sparebøssa
+sparebøsse
+sparebøssene
+sparebøsser
+sparepenger
+sparer
+sparere
+spares
+sparevilkår
+sparevilkåra
+sparevilkårene
+sparevilkåret
+sparevilkårets
+spark
+sparke
+sparkel
+sparkelen
+sparkelens
+sparken
+sparkens
+sparker
+sparket
+sparkle
+sparkler
+sparkstøtting
+sparkstøttingen
+sparkstøttingene
+sparkstøttingens
+sparkstøttinger
+sparsom
+sparsomhet
+sparsomheten
+sparsomhetens
+sparsomme
+sparsomt
+spart
+spartansk
+spartanske
+sparte
+spas
+spase
+spaser
+spasere
+spaserer
+spasertur
+spaserturen
+spaserturene
+spaserturens
+spaserturer
+såpass
+spat
+spatia
+spatiene
+spatier
+spatium
+spådd
+spådde
+spådom
+spådommen
+spådommene
+spådommens
+spådommer
+spe
+såpe
+speaker
+speakere
+speakeren
+speakerens
+speakeres
+speakerne
+speakernes
+sped
+spedalsk
+spedalskhet
+spedalskheten
+spedalskhetens
+spedbarn
+spedbarna
+spedbarnet
+spedbarnets
+spedbarnsstell
+spedbarnsstellet
+spedbarnsstellets
+spedd
+spedde
+spede
+spedisjon
+spedisjonen
+spedisjonene
+spedisjonens
+spedisjoner
+spedkalv
+spedkalven
+spedkalvene
+spedkalvens
+spedkalver
+spedt
+spee
+speed
+speeda
+speeden
+speedens
+speeder
+speedet
+speedometer
+speedometeret
+speedometerets
+speedometra
+speedometre
+speedometrene
+speedometret
+speedometrets
+speedway
+speedwayen
+speedwayens
+speen
+speida
+speide
+speider
+speidere
+speideren
+speiderens
+speideres
+speiderne
+speidernes
+speidet
+speil
+speilbilde
+speilbilder
+speilbildet
+speile
+speiler
+speilet
+speilt
+speilte
+spek
+speke
+spekekjøtt
+spekekjøttet
+spekekjøttets
+spekemat
+spekematen
+spekematens
+speken
+spekent
+spekepølse
+spekesild
+spekesilda
+spekk
+spekke
+spekket
+spekne
+spekter
+spekteret
+spekterets
+spektra
+spektraene
+spektralanalyse
+spektralanalysen
+spektralanalysens
+spektre
+spektrene
+spektret
+spektrets
+spektrum
+spektrumet
+spektrumets
+spekulant
+spekulanten
+spekulantene
+spekulantens
+spekulanter
+spekulasjon
+spekulasjonen
+spekulasjonene
+spekulasjonens
+spekulasjoner
+spekulativ
+spekulative
+spekulativt
+spekuler
+spekulere
+spekulerer
+spekulert
+spekulerte
+spell
+spelle
+spellet
+spelt
+spelte
+spene
+spenen
+spenens
+spenn
+spenna
+spenne
+spennende
+spenner
+spennes
+spennet
+spenning
+spenninga
+spenningas
+spenningen
+spenningene
+spenningens
+spenninger
+spenningsfall
+spenningsfallet
+spenningsfallets
+spenningsmoment
+spenningsmomenter
+spenningsmomentet
+spenningsmomentets
+spennvidda
+spennvidde
+spennvidden
+spennviddens
+spenst
+spensten
+spenstens
+spenstig
+spenstighet
+spenstigheten
+spenstighetens
+spent
+spente
+sper
+såper
+sperma
+spermaet
+spermaets
+spermasett
+spermasetten
+spermasettens
+sperr
+sperra
+sperre
+sperrer
+sperres
+sperret
+spes
+speseri
+speserier
+speseriet
+speseriets
+spesial
+spesialbehandling
+spesialbehandlingen
+spesialbehandlingens
+spesiale
+spesialet
+spesialfelt
+spesialisere
+spesialisering
+spesialiseringa
+spesialiseringen
+spesialiseringens
+spesialisert
+spesialiserte
+spesialist
+spesialisten
+spesialistene
+spesialistens
+spesialister
+spesialitet
+spesialiteten
+spesialitetens
+spesialkonstruert
+spesialkurs
+spesialkursene
+spesialkurser
+spesialkurset
+spesialkursets
+spesiallage
+spesiallaget
+spesiallærer
+spesiallærere
+spesiallæreren
+spesiallærerens
+spesiallæreres
+spesiallærerne
+spesiallærernes
+spesialområde
+spesialområdene
+spesialområder
+spesialområdet
+spesialområdets
+spesialskole
+spesialskolen
+spesialskolene
+spesialskolens
+spesialskoler
+spesialstål
+spesialstålet
+spesialstålets
+spesialtilfelle
+spesialtilfellene
+spesialtilfeller
+spesialtilfellet
+spesialtilfellets
+spesialutdanne
+spesialutdannet
+spesialutdanning
+spesialutdanninga
+spesialutdanningen
+spesialutdanningens
+spesialutstyr
+spesialutstyret
+spesialutstyrets
+spesidaler
+spesidalere
+spesidaleren
+spesidalerens
+spesidaleres
+spesidalerne
+spesidalernes
+spesiell
+spesielle
+spesielt
+spesifikasjon
+spesifikasjonen
+spesifikasjonene
+spesifikasjonens
+spesifikasjoner
+spesifikk
+spesifikke
+spesifikt
+spesifiser
+spesifisere
+spesifiserer
+spesifiseres
+spesifisert
+spesifiserte
+spetakkel
+spetakkelet
+spetakkelets
+spetakla
+spetaklene
+spetakler
+spetaklet
+spetaklets
+spett
+spetta
+spette
+spettet
+spettete
+spidd
+spidda
+spidde
+spiddet
+spik
+spika
+spiken
+spikene
+spikens
+spiker
+spikeren
+spikerens
+spikk
+spikke
+spikkefjøl
+spikkefjøla
+spikkefjølene
+spikkefjøler
+spikket
+spikra
+spikre
+spikrene
+spikrer
+spikret
+spil
+spila
+spildra
+spildre
+spildren
+spildrene
+spildrens
+spildrer
+spilen
+spilens
+spill
+spille
+spillefilm
+spillefilmen
+spillefilmene
+spillefilmens
+spillefilmer
+spilleklar
+spillene
+spilleomgang
+spilleomgangen
+spilleomgangens
+spilleomganger
+spiller
+spillere
+spilleregler
+spilleren
+spillerens
+spilleres
+spillerne
+spillernes
+spillerom
+spillerommet
+spillerommets
+spilles
+spillet
+spillets
+spillfekteri
+spillfekteriet
+spillfekteriets
+spilling
+spillkraft
+spillkrafta
+spillkraften
+spillkraftens
+spillopp
+spilloppen
+spilloppene
+spilloppens
+spillopper
+spilt
+spiltau
+spiltauet
+spiltauets
+spilte
+spinal
+spinalt
+spinat
+spinaten
+spinatens
+spindel
+spindelen
+spindelens
+spindelvev
+spindelveven
+spindelvevens
+spindler
+spinett
+spinetta
+spinettene
+spinetter
+spinettet
+spinettets
+spinka
+spinke
+spinkel
+spinkelt
+spinker
+spinket
+spinkle
+spinn
+spinne
+spinneri
+spinneria
+spinneriene
+spinnerier
+spinneriet
+spinneriets
+spinnet
+spion
+spionasje
+spionasjen
+spionasjens
+spionen
+spionene
+spionens
+spioner
+spionere
+spionerer
+spionert
+spionerte
+spir
+spiral
+spiralen
+spiralene
+spiralens
+spiraler
+spire
+spirea
+spireaen
+spireaene
+spireaens
+spireaer
+spireevne
+spireevnen
+spireevnens
+spirende
+spirer
+spiret
+spiring
+spiringa
+spiringen
+spiringens
+spirit
+spiriten
+spiritens
+spiritisme
+spiritismen
+spiritismens
+spiritist
+spiritisten
+spiritistene
+spiritistens
+spiritister
+spiritistisk
+spiritual
+spiritualistisk
+spirituell
+spirituelle
+spirituelt
+spirituosa
+spirituosaen
+spirituosaens
+spiritus
+spiritusen
+spiritusens
+spirrevipp
+spirrevippen
+spirrevippene
+spirrevippens
+spirrevipper
+spirt
+spirte
+spis
+spise
+spisebord
+spiseborda
+spisebordene
+spisebordet
+spisebordets
+spisekart
+spisekartene
+spisekartet
+spisekartets
+spisepause
+spisepausen
+spisepausene
+spisepausens
+spisepauser
+spiser
+spises
+spisesal
+spisesalen
+spisesalene
+spisesalens
+spisesaler
+spiseseddel
+spiseseddelen
+spiseseddelens
+spisesedlene
+spisesedler
+spisestua
+spisestue
+spisestuen
+spisestuens
+spiskammer
+spiskammeret
+spiskammerets
+spiskammers
+spiskammerset
+spiskammersets
+spiss
+spissborger
+spissborgere
+spissborgeren
+spissborgerens
+spissborgeres
+spissborgerlig
+spissborgerne
+spissborgernes
+spissen
+spissens
+spissfindig
+spissfindige
+spissfindighet
+spissfindigheten
+spissfindighetene
+spissfindighetens
+spissfindigheter
+spissmus
+spissmusa
+spissmusen
+spissmusens
+spissrot
+spisst
+spist
+spiste
+spitord
+spitorda
+spitordene
+spitordet
+spitordets
+spjeld
+spjelda
+spjeldene
+spjeldet
+spjeldets
+spjelk
+spjelka
+spjelken
+spjelkene
+spjelkens
+spjelker
+spjelket
+spjåk
+spjåke
+spjåket
+spjåkete
+spjæling
+spjælingen
+spjælingens
+spjære
+spjærer
+spjært
+spjærte
+spøk
+spøke
+spøkefull
+spøkefulle
+spøkefullt
+spøkelse
+spøkelset
+spøken
+spøkende
+spøkens
+spøker
+spøkeri
+spøkeriet
+spøkeriets
+spøkt
+spøkte
+spæl
+søpla
+spleis
+spleisa
+spleisen
+spleisene
+spleisens
+spleiser
+spleiset
+spælen
+spælene
+spælens
+spæler
+søplet
+splid
+splidaktig
+spliden
+splidens
+splint
+splinten
+splintene
+splintens
+splinter
+splintra
+splintre
+splintret
+splitt
+splitta
+splitte
+splittede
+splittelse
+splittelsen
+splittelsens
+splitten
+splittens
+splitter
+splittes
+splittet
+splittflagg
+splittflagget
+splittflaggets
+splittkeinski
+spælsau
+spælsauen
+spælsauens
+spøne
+spøner
+spønt
+spønte
+spole
+spolen
+spolens
+spoler
+spolere
+spolerer
+spolert
+spolerte
+spolorm
+spolormen
+spolormens
+spolt
+spolte
+spon
+spondeen
+spondeens
+sponen
+sponene
+sponens
+sponer
+sponplate
+sponplaten
+sponplatene
+sponplatens
+sponplater
+sponsa
+sponse
+sponser
+sponset
+sponsor
+sponsoren
+sponsorene
+sponsorens
+sponsorer
+spontan
+spontane
+spontanitet
+spontaniteten
+spontanitetens
+spontant
+spor
+sporadisk
+spore
+sporen
+sporene
+sporens
+sporenstreks
+spores
+sporet
+sporhund
+sporhunden
+sporhundene
+sporhundens
+sporhunder
+sporløst
+sport
+sporte
+sportel
+sportelen
+sportelens
+sporten
+sportens
+sportlene
+sportler
+sportslig
+sportslige
+sportsmann
+sportsmannen
+sportsmannens
+sportsmenn
+sportsmennene
+sportsmennenes
+sportsmenns
+sportsrevy
+sportsrevyen
+sportsrevyens
+sporty
+sporvei
+sporveien
+sporveiene
+sporveiens
+sporveier
+sporvogn
+sporvogna
+sporvognen
+sporvognens
+sporvogner
+spotlight
+spotlightet
+spotlightets
+spotsk
+spott
+spotta
+spotten
+spottens
+spotter
+spottet
+spottpris
+spottprisen
+spottprisene
+spottprisens
+spottpriser
+spove
+spoven
+spovens
+søppel
+søppeldynga
+søppeldynge
+søppeldyngen
+søppeldyngens
+søppelen
+søppelens
+søppelet
+søppelets
+søppelkassa
+søppelkasse
+søppelkassen
+søppelkassens
+søppelkasser
+spr
+sprø
+spår
+spør
+sprade
+spradebasse
+spradebassen
+spradebassene
+spradebassens
+spradebasser
+spraden
+spradene
+spradens
+sprader
+spraglet
+spraglete
+sprake
+spraker
+sprakk
+sprakt
+sprakte
+sprang
+spranget
+sprangets
+spratt
+spray
+spraya
+sprayboks
+sprayboksen
+sprayboksene
+sprayboksens
+spraybokser
+spraye
+sprayen
+sprayens
+sprayer
+sprayet
+sprayflaska
+sprayflaske
+sprayflasken
+sprayflaskene
+sprayflaskens
+sprayflasker
+spre
+spredd
+spredde
+sprede
+spreder
+spredning
+spredningen
+spredningens
+spredningsnett
+spredt
+spredte
+spreid
+spreide
+spreie
+spreier
+spreiing
+spreiinga
+spreiingen
+spreiingens
+sprek
+spreke
+sprekk
+sprekke
+sprekkeferdig
+sprekken
+sprekkens
+sprekker
+sprekket
+sprekkete
+sprekt
+sprell
+sprella
+sprelle
+sprellet
+sprelsk
+sprelske
+spreng
+sprenge
+sprengen
+sprengens
+sprenger
+sprengkald
+sprengkalde
+sprengkaldt
+sprengning
+sprengningen
+sprengningens
+sprengstoff
+sprengstoffene
+sprengstoffer
+sprengstoffet
+sprengstoffets
+sprengt
+sprengte
+sprer
+spres
+spretne
+sprett
+sprette
+spretten
+sprettent
+sprettert
+spretterten
+sprettertene
+sprettertens
+spretterter
+sprettet
+spri
+spriet
+spriets
+sprik
+sprike
+spriker
+sprikt
+sprikte
+spring
+springar
+springaren
+springarens
+springbrett
+springbrettet
+springbrettets
+springe
+springen
+springens
+springer
+springet
+springflo
+springfloa
+springmarsj
+springmarsjen
+springmarsjens
+sprinkel
+sprinkelen
+sprinkelens
+sprinkle
+sprinkler
+sprinkleranlegg
+sprinkleranlegga
+sprinkleranleggene
+sprinkleranlegget
+sprinkleranleggets
+sprinklere
+sprinkleren
+sprinklerens
+sprinkleres
+sprinklerne
+sprinklernes
+sprint
+sprinte
+sprinten
+sprintens
+sprinter
+sprintere
+sprinteren
+sprinterens
+sprinteres
+sprinterne
+sprinternes
+sprit
+spriten
+spritens
+språk
+språkbehandling
+språkbehandlingen
+språkbehandlingens
+språkbruk
+språkbruken
+språkbrukens
+språket
+språkets
+språkfølelse
+språkfølelsen
+språkfølelsens
+språkhemmede
+språkkjensla
+språkkjensle
+språklig
+språklige
+språklyd
+språklyden
+språklydene
+språklydens
+språklyder
+språkprogrammene
+språkprogrammer
+språkprogrammet
+språkprogrammets
+språksituasjon
+språksituasjonen
+språksituasjonene
+språksituasjonens
+språksituasjoner
+språkversjon
+språkversjonen
+språkversjonene
+språkversjonens
+språkversjoner
+sprossa
+sprosse
+sprossen
+sprossens
+sprosser
+spørre
+spørrende
+spørrepronomen
+spørrepronomenet
+spørrepronomenets
+spørrer
+spørrere
+spørreren
+spørrerens
+spørreres
+spørrerne
+spørrernes
+spørres
+spørresetning
+spørresetningen
+spørresetningens
+spørreskjema
+spørreskjemaer
+spørreskjemaet
+spørreskjemaets
+spørretime
+spørretimen
+spørretimens
+spørs
+spørsmål
+spørsmåla
+spørsmålene
+spørsmålet
+spørsmålets
+spørsmålstegn
+spørsmålstegna
+spørsmålstegnene
+spørsmålstegnet
+spørsmålstegnets
+sprudla
+sprudle
+sprudler
+sprudlet
+sprukket
+sprunge
+sprunget
+sprungne
+sprut
+sprute
+spruten
+sprutens
+sprutet
+sprøyt
+sprøyta
+sprøyte
+sprøyten
+sprøytens
+sprøyter
+sprøytes
+sprøytet
+spøt
+såpt
+spøte
+såpte
+spøtet
+spøtt
+spøtte
+spøttet
+spunnet
+spuns
+spunse
+spunset
+spurt
+spurta
+spurte
+spurten
+spurtens
+spurter
+spurtet
+spurv
+spurven
+spurvene
+spurvens
+spurver
+sputnik
+sputniken
+sputnikene
+sputnikens
+sputniker
+spy
+spyd
+spyda
+spydd
+spydde
+spydene
+spydet
+spydets
+spydig
+spydige
+spydighet
+spydigheten
+spydighetens
+spydkast
+spydkaster
+spydkasterne
+spyet
+spyets
+spyle
+spyler
+spyling
+spylt
+spylte
+spyr
+spytt
+spytte
+spyttet
+sår
+sær
+sør
+såra
+sørafrikaner
+sørafrikanere
+sørafrikaneren
+sørafrikanerens
+sørafrikaneres
+sørafrikanerne
+sørafrikanernes
+sørafrikansk
+sørafrikanske
+søraust
+søraustlandsk
+sårbar
+sårbare
+sårbart
+sårbeint
+særdeles
+særdeleshet
+særdelesheten
+særdeleshetens
+såre
+søre
+sårede
+særegen
+særegent
+øsregn
+øsregna
+særegne
+øsregne
+øsregner
+øsregnet
+øsregnt
+øsregnte
+særeie
+særeiet
+sårer
+såret
+søretter
+særforbund
+særforbundene
+sørfra
+særfradrag
+særfradraget
+særfradragets
+sårføtt
+sørg
+sørga
+sørgde
+sørge
+sørgelig
+sørgelige
+sørger
+sørges
+sørget
+sørgmodig
+særgruppa
+særgruppe
+særgruppen
+særgruppene
+særgruppens
+særgrupper
+srilanker
+srilankere
+srilankeren
+srilankerens
+srilankeres
+srilankerne
+srilankernes
+srilankisk
+særinteresse
+særinteressen
+særinteressene
+særinteressens
+særinteresser
+særklasse
+særklassen
+særklassene
+særklassens
+særklasser
+sørlandsk
+sørlandskyst
+sørlandskysten
+sørlandskystens
+sørlending
+sørlendingen
+sørlendingene
+sørlendingens
+sørlendinger
+særlig
+sørlig
+særlige
+sørlige
+særling
+særlingen
+særlingens
+særmerkt
+særnorske
+særnummer
+særnummeret
+særnummerets
+særnumre
+særnumrene
+særordning
+særordningen
+særordningene
+særordningens
+særordninger
+sørover
+sørpå
+sørpe
+sørpet
+sørpete
+sørpol
+sørpolen
+sørpolene
+sørpolens
+sørpoler
+særpreg
+særprege
+særpregede
+særpreget
+særs
+særskilt
+særskilte
+særskriving
+særskrivingen
+særskrivingens
+sørøst
+sørøsten
+sørøstens
+særstilling
+særstillinga
+særstillingen
+særstillingens
+sørøstlandsk
+særsyn
+særsynet
+særsynets
+sårt
+sært
+sårtent
+sørvest
+sørvesten
+sørvestens
+sørvestlandsk
+sørvestlig
+åsrygg
+åsryggen
+åsryggene
+åsryggens
+åsrygger
+sås
+åssen
+såsiss
+såsissen
+såsissene
+såsissens
+såsisser
+søsken
+søskena
+søskenbarn
+søskenbarnet
+søskenbarnets
+søsknene
+søster
+søstera
+søsteren
+søsterens
+søstre
+søstrene
+søstrer
+stå
+stø
+søt
+Øst
+øst
+sta
+støa
+såta
+stab
+stabba
+stabbe
+stabben
+stabbens
+stabbestein
+stabbesteinen
+stabbesteinene
+stabbesteinens
+stabbesteiner
+stabbet
+stabbur
+stabbura
+stabburene
+stabburet
+stabburets
+stabeis
+stabeisen
+stabeisene
+stabeisens
+stabeiser
+stabel
+stabelavløpning
+stabelavløpningen
+stabelavløpningens
+stabelen
+stabelens
+staben
+stabene
+stabens
+staber
+stabil
+stabile
+stabilisasjon
+stabilisasjonen
+stabilisasjonene
+stabilisasjonens
+stabilisasjoner
+stabilisator
+stabilisatoren
+stabilisatorene
+stabilisatorens
+stabilisatorer
+stabilisere
+stabiliserende
+stabilisert
+stabiliserte
+stabilitet
+stabiliteten
+stabilitetens
+stabilt
+stabla
+stable
+stabler
+stablestol
+stablestolen
+stablestolens
+stablet
+stabskaptein
+stabskapteinen
+stabskapteinens
+stabssersjant
+stabssersjanten
+stabssersjantens
+stabssjef
+stabssjefen
+stabssjefene
+stabssjefens
+stabssjefer
+stabsskole
+stabsskolen
+stabsskolene
+stabsskolens
+stabsskoler
+stad
+staden
+stadens
+stadfest
+stadfesta
+stadfeste
+stadfestelse
+stadfestelsen
+stadfestelsens
+stadfester
+stadfestet
+stadfesting
+stadfestinga
+stadfestingen
+stadfestingens
+stadia
+stadie
+stadiene
+stadier
+stadiet
+stadig
+stadige
+stadighet
+stadion
+stadiona
+stadionene
+stadioner
+stadionet
+stadionets
+stadium
+stadsfysikus
+stadsfysikusen
+stadsfysikusens
+stadslege
+stafett
+stafetten
+stafettene
+stafettens
+stafetter
+stafettløp
+stafettløper
+staffasje
+staffasjen
+staffasjens
+staffeli
+staffelia
+staffeliene
+staffelier
+staffeliet
+staffeliets
+staffere
+stafferte
+østafjells
+østafjelsk
+østafor
+stag
+staga
+stagene
+staget
+stagets
+stagga
+stagge
+stagger
+stagget
+stagnasjon
+stagnasjonen
+stagnasjonene
+stagnasjonens
+stagnasjoner
+stagner
+stagnere
+stagnerer
+stagnert
+stagnerte
+staka
+stake
+staken
+stakens
+staker
+staket
+stakitt
+stakitta
+stakitten
+stakittene
+stakittens
+stakitter
+stakittet
+stakittets
+stakk
+stakkar
+stakkaren
+stakkarens
+stakkars
+stakkarslig
+stakkato
+stakken
+stakkens
+stakkånda
+stakkåndet
+stakt
+stakte
+stal
+stall
+stallar
+stallaren
+stallarens
+stallen
+stallene
+stallens
+staller
+stalltrev
+stalltrevet
+stalltrevets
+stam
+stambøker
+stambok
+stamboka
+stamboken
+stambokens
+stamkafé
+stamkafeen
+stamkafeene
+stamkafeens
+stamkafeer
+stamme
+stammen
+stammens
+stammer
+stammesymbol
+stammesymbolet
+stammesymbolets
+stammet
+stamn
+stamnen
+stamnene
+stamnens
+stamner
+stamnett
+stamnettet
+stamnettets
+stamp
+stampa
+stampe
+stampen
+stampens
+stamper
+stampet
+stamt
+stand
+standard
+standarddefinisjon
+standarddefinisjonen
+standarddefinisjonene
+standarddefinisjonens
+standarddefinisjoner
+standarden
+standardene
+standardens
+standarder
+standardiser
+standardisere
+standardiserer
+standardiseres
+standardisering
+standardiseringa
+standardiseringen
+standardiseringens
+standardisert
+standardiserte
+standardutstyr
+standardutstyret
+standardutstyrets
+standardverk
+standardverket
+standardverkets
+standardversjon
+standardversjonen
+standardversjonene
+standardversjonens
+standardversjoner
+standart
+standarten
+standartens
+standen
+stander
+standeren
+standhaftig
+standhaftige
+standhaftighet
+standhaftigheten
+standhaftighetens
+standkvarter
+standkvarteret
+standkvarterets
+standkvartret
+standkvartrets
+standplass
+standplassen
+standplassene
+standplassens
+standplasser
+standpunkt
+standpunkta
+standpunktene
+standpunkter
+standpunktet
+standpunktets
+stands
+standsmessig
+standsmessige
+stang
+stanga
+stange
+stangen
+stangens
+stank
+stanken
+stankens
+stanniol
+stanniolen
+stanniolens
+stanniolpapir
+stanniolpapiret
+stanniolpapirets
+stans
+stansa
+stanse
+stansen
+stansens
+stanser
+stanses
+stanset
+stapel
+stapelen
+stapelens
+stapelplass
+stapelplassen
+stapelplassene
+stapelplassens
+stapelplasser
+stapelvare
+staplene
+stapler
+stapp
+stappa
+stappe
+stappen
+stappens
+stappet
+stappfull
+stappmett
+star
+staren
+starens
+starr
+starren
+starrens
+stars
+start
+starte
+starten
+startende
+startens
+starter
+startet
+startgrop
+startgropa
+startgropen
+startgropens
+starting
+startnummer
+startnummeret
+startnummerets
+startnumre
+startnumrene
+startpunkt
+startpunktet
+startpunktets
+startskottet
+startskudd
+startskuddet
+startskuddets
+startstrek
+startstreken
+startstrekens
+starve
+stas
+stase
+staselig
+staselige
+stasen
+stasens
+stasjon
+stasjonen
+stasjonene
+stasjonens
+stasjoner
+stasjonere
+stasjonert
+stasjonerte
+stasjonær
+stasjonære
+stasjonært
+stasjonsbetjent
+stasjonsbetjenten
+stasjonsbetjentens
+stasjonsbygning
+stasjonsbygningen
+stasjonsbygningens
+stasjonsmester
+stasjonsmesteren
+stasjonsmesterens
+stasjonsmestrene
+stasjonsvogn
+stasjonsvogna
+stasjonsvognen
+stasjonsvognens
+stat
+statarisk
+statelig
+staten
+statene
+statens
+stater
+staters
+statisk
+statist
+statisten
+statistene
+statistens
+statister
+statistiker
+statistikere
+statistikeren
+statistikerens
+statistikeres
+statistikerne
+statistikernes
+statistikk
+statistikken
+statistikkene
+statistikkens
+statistikker
+statistisk
+statistiske
+stativ
+stativa
+stativene
+stativer
+stativet
+stativets
+statlig
+statlige
+stats
+statsadvokat
+statsadvokaten
+statsadvokatene
+statsadvokatens
+statsadvokater
+statsansatt
+statsansatte
+statsautorisert
+statsautoriserte
+statsbanene
+statsbanenes
+statsbaner
+statsborger
+statsborgeren
+statsborgerens
+statsborgerskap
+statsbudsjett
+statsbudsjettet
+statsbudsjettets
+statseksamen
+statseksamens
+statsgarantere
+statsgaranterer
+statsgarantert
+statsgaranterte
+statskassa
+statskasse
+statskassen
+statskassens
+statskirka
+statskirke
+statskirken
+statskirkens
+statskonsulent
+statskraftverkene
+statskraftverkenes
+statskupp
+statskuppet
+statskuppets
+statsminister
+statsministeren
+statsministerens
+statsministrene
+statsmyndighetene
+statsmyndigheter
+statsråd
+statsråden
+statsrådene
+statsrådens
+statsråder
+statsrådet
+statsrådets
+statssekretær
+statssekretæren
+statssekretærene
+statssekretærens
+statssekretærer
+statssjef
+statssjefen
+statssjefene
+statssjefens
+statssjefer
+statsskatt
+statsskatten
+statsskattens
+statsskole
+statsskolen
+statsskolens
+statsstøtta
+statsstøtte
+statsstøtten
+statsstøttens
+statsstøttet
+statstilskott
+statstilskottene
+statstilskottet
+statstilskottets
+statstilskudd
+statstilskuddene
+statstilskuddet
+statstilskuddets
+statstjeneste
+statstjenestemann
+statstjenestemannen
+statstjenestemannens
+statstjenestemannskartell
+statstjenestemannskartellet
+statstjenestemannskartellets
+statstjenestemenn
+statstjenestemennene
+statstjenestemennenes
+statstjenestemenns
+statstjenesten
+statstjenestens
+statsvitenskap
+statsvitenskapen
+statsvitenskapens
+statsviter
+statsvitere
+statsviteren
+statsviterens
+statsviteres
+statsviterne
+statsviternes
+statsvitskap
+statsvitskapen
+statsvitskapens
+stattholder
+stattholdere
+stattholderen
+stattholderens
+stattholderes
+stattholderne
+stattholdernes
+statue
+statuen
+statuene
+statuens
+statuer
+statuere
+statuerer
+statuert
+statuerte
+statuett
+statuetten
+statuettene
+statuettens
+statuetter
+status
+statusen
+statusens
+statussymbol
+statussymbolene
+statussymboler
+statussymbolet
+statussymbolets
+statutt
+statuttene
+statutter
+statuttet
+statuttets
+staude
+staudebed
+staudebedet
+staudebedets
+stauden
+staudene
+staudens
+stauder
+stauke
+staup
+staupa
+staupene
+staupet
+staupete
+staupets
+staur
+stauren
+staurene
+staurens
+staurer
+staut
+staute
+stautet
+stav
+stava
+stave
+stavelse
+stavelsen
+stavelsens
+stavelser
+stavemåte
+stavemåten
+stavemåtene
+stavemåtens
+stavemåter
+staven
+stavens
+staver
+staves
+stavet
+østavind
+østavinden
+østavindens
+staving
+stavinga
+stavingen
+stavingene
+stavingens
+stavinger
+stavn
+stavnen
+stavnene
+stavnens
+stavner
+stavnsbånd
+stavnsbåndet
+stavnsbåndets
+stavre
+Østbanen
+Østbanens
+stødd
+stødde
+stødig
+stødige
+ste
+støe
+såte
+søte
+Øste
+øste
+stearin
+stearinen
+stearinens
+stearinlys
+stearinlyset
+stearinlysets
+stebarn
+stebarna
+stebarnet
+stebarnets
+sted
+åsted
+stedde
+stede
+stedene
+åstedene
+steder
+åsteder
+stedet
+åstedet
+stedets
+åstedets
+stedfortreder
+stedfortredere
+stedfortrederen
+stedfortrederens
+stedfortrederes
+stedfortrederne
+stedfortredernes
+stedig
+stedlig
+stedlige
+stedsans
+stedsansen
+stedsansens
+åstedsbefaring
+åstedsbefaringa
+åstedsbefaringen
+åstedsbefaringene
+åstedsbefaringens
+åstedsbefaringer
+stedsnavn
+stedsnavna
+stedsnavnene
+stedsnavnet
+stedsnavnets
+stedt
+steet
+steets
+stefar
+stefaren
+stefarens
+steforeldra
+steforeldre
+steforeldrene
+steg
+stege
+steget
+stegg
+steggen
+steggene
+steggens
+stegger
+steig
+steigen
+steigens
+steik
+steika
+steike
+steiken
+steikende
+steikens
+steikeovn
+steikeovnen
+steikeovnens
+steikepanna
+steikepanne
+steikepannene
+steiker
+steikt
+steikte
+steil
+steile
+steilt
+stein
+steinalder
+steinalderen
+steinalderens
+steinbit
+steinbiten
+steinbitene
+steinbitens
+steinbiter
+steinbrott
+steinbrottet
+steinbrottets
+steinbrudd
+steinbruddet
+steinbruddets
+steindaud
+steindød
+steindulp
+steindulpen
+steindulpens
+steine
+steinen
+steinens
+steiner
+steinet
+steinete
+steinfrukt
+steingard
+steingarden
+steingardens
+steinhard
+steinharde
+steinhardt
+steinhelle
+steinhellen
+steinhellens
+steinkol
+steinkolet
+steinkolets
+steinkull
+steinkullet
+steinkullets
+steinmur
+steinmuren
+steinmurene
+steinmurens
+steinmurer
+steinrøys
+steinrøysa
+steinrøysene
+steinrøyser
+steinsatt
+steinsatte
+steinsette
+steintøy
+steintøyet
+steintøyets
+stek
+steka
+steke
+steken
+stekende
+stekens
+stekepanna
+stekepanne
+stekepannen
+stekepannene
+stekepannens
+stekepanner
+steker
+stekt
+stekte
+stele
+søtelig
+stell
+stella
+stelle
+steller
+stelles
+stellet
+stelt
+stelte
+stemjern
+stemjernet
+stemjernets
+stemme
+stemmeband
+stemmebandet
+stemmebandets
+stemmeberettigede
+stemmebånd
+stemmebåndet
+stemmebåndets
+stemmen
+stemmene
+stemmens
+stemmer
+stemmerett
+stemmeretten
+stemmerettens
+stemmeseddel
+stemmeseddelen
+stemmeseddelens
+stemmesedlene
+stemmesedler
+stemna
+stemne
+stemnelei
+stemneleia
+stemnemøte
+stemnemøtet
+stemnet
+stemning
+stemninga
+stemningen
+stemningene
+stemningens
+stemninger
+stemoderlig
+stemor
+stemora
+stemoren
+stemorens
+stemorsblomst
+stemorsblomsten
+stemorsblomstene
+stemorsblomstens
+stemorsblomster
+stempel
+stempelet
+stempelets
+stemple
+stempler
+stemplet
+stemplets
+stemplingskort
+stemplingskortet
+stemplingskortets
+stemt
+stemte
+såten
+Østen
+stående
+stendene
+stender
+stendig
+såtene
+steng
+stenge
+stengel
+stengelen
+stengelens
+stengene
+stenger
+stenges
+stenget
+stenglene
+stengler
+stengning
+stengsel
+stengselet
+stengselets
+stengsle
+stengsler
+stengslet
+stengslets
+stengt
+stengte
+stenk
+stenke
+stenket
+stenograf
+stenografen
+stenografene
+stenografens
+stenografer
+stenografere
+stenograferer
+stenografert
+stenograferte
+stenografi
+stenografien
+stenografiens
+stenografisk
+stenogram
+stenogrammet
+stenogrammets
+østenom
+såtens
+Østens
+stensil
+stensilen
+stensilene
+stensilens
+stensiler
+stensilere
+stensilerer
+stensilert
+stensilerte
+steppe
+steppen
+steppens
+såter
+Østerdalen
+Østerdalens
+østerdalsk
+østerdøl
+østerdølen
+østerdølene
+østerdølens
+østerdøler
+stereo
+stereoanlegg
+stereoanlegga
+stereoanleggene
+stereoanlegget
+stereoanleggets
+stereoen
+stereoene
+stereoens
+stereoer
+stereofonisk
+stereometri
+stereometrien
+stereometriens
+stereotyp
+steril
+sterile
+sterilisere
+steriliserer
+sterilisering
+steriliseringa
+steriliseringen
+steriliseringens
+sterilisert
+steriliserte
+sterilitet
+steriliteten
+sterilitetens
+sterilt
+sterk
+sterkbygd
+sterke
+sterkere
+sterkest
+sterkeste
+sterkstrøm
+sterkstrømsanlegg
+sterkstrømsanlegga
+sterkstrømsanleggene
+sterkstrømsanlegget
+sterkstrømsanleggets
+sterkt
+østerlandsk
+sterling
+Østerrike
+Østerriker
+østerriker
+østerrikere
+østerrikeren
+østerrikerens
+østerrikeres
+østerrikerne
+østerrikernes
+østerriksk
+østerrikske
+østers
+østersen
+østersene
+østersens
+østerser
+Østersjøen
+Østersjøens
+stesønn
+stesønnen
+stesønnene
+stesønnens
+stesønner
+stesøster
+stesøsteren
+stesøsterens
+stesøstre
+stesøstrene
+støet
+såtet
+stetoskop
+stetoskopa
+stetoskopene
+stetoskoper
+stetoskopet
+stetoskopets
+stett
+stetta
+stetten
+stettene
+stettens
+stetter
+stettet
+stev
+stevet
+stevets
+stevja
+stevje
+stevjer
+stevjet
+stevjing
+stevjinga
+stevjingen
+stevjingens
+stevn
+stevne
+stevnelei
+stevneleia
+stevnemøte
+stevnemøtet
+stevnen
+stevner
+stevnet
+stevnets
+stevning
+stevninga
+stevningen
+stevningens
+Østfold
+østfolding
+østfoldingen
+østfoldingene
+østfoldingens
+østfoldinger
+østfoldsk
+østfra
+østgående
+ståhei
+ståheien
+ståheiens
+sti
+stie
+stien
+stiens
+stier
+stiet
+stift
+stifte
+stiftelse
+stiftelsen
+stiftelsens
+stiften
+stiftens
+stifter
+stiftere
+stifteren
+stifterens
+stifteres
+stifterne
+stifternes
+stiftet
+stiftskapellan
+stiftskapellanen
+stiftskapellanene
+stiftskapellanens
+stiftskapellaner
+stig
+stigbrett
+stigbrettet
+stigbrettets
+stigbøyle
+stigbøylen
+stigbøylens
+stige
+stigeledning
+stigeledningen
+stigeledningene
+stigeledningens
+stigeledninger
+stigen
+stigende
+stigens
+stiger
+stigere
+stigeren
+stigerens
+stigeres
+stigerne
+stigernes
+stigning
+stigninga
+stigningen
+stigtrinn
+stigtrinnet
+stigtrinnets
+stikk
+stikke
+stikkelsbær
+stikkelsbærene
+stikkelsbæret
+stikkelsbærets
+stikker
+stikket
+stikking
+stikkinga
+stikkord
+stikkorda
+stikkordene
+stikkordet
+stikkordets
+stikkprøva
+stikkprøve
+stikkprøven
+stikkprøvene
+stikkprøvens
+stikkprøver
+stikkrenna
+stikkrenne
+stikkrennene
+stikkrenner
+stikksag
+stikksaga
+stikksagen
+stikksagens
+stikla
+stikle
+stikling
+stiklingen
+stiklingene
+stiklingens
+stiklinger
+stikning
+stikningen
+stil
+stilart
+stilarta
+stilarten
+stilartene
+stilartens
+stilarter
+stilbøker
+stilbok
+stilboka
+stilboken
+stilbokens
+stile
+stilen
+stilens
+stiler
+stilett
+stiletten
+stilettene
+stilettens
+stiletter
+stiletthæl
+stiletthælen
+stiletthælene
+stiletthælens
+stiletthæler
+stilfull
+stilfulle
+stilfullt
+stilig
+stilige
+stilisere
+stiliserer
+stilisert
+stiliserte
+stilist
+stilisten
+stilistene
+stilistens
+stilister
+stilistikk
+stilistikken
+stilistikkens
+stilistisk
+stilistiske
+stilk
+stilken
+stilkene
+stilkens
+stilker
+stilkunst
+stilkunsten
+stilkunstens
+still
+stillas
+stillasa
+stillasene
+stillaser
+stillaset
+stillasets
+stillbar
+stillbare
+stillbart
+stille
+stilleben
+stillebena
+stillebenene
+stillebener
+stillebenet
+stillebenets
+stiller
+stilles
+stillestående
+stillet
+stillfarende
+stillferdig
+stillferdige
+stillfoto
+stillfotoet
+stillfotoets
+stillhet
+stillheten
+stillhetens
+stilling
+stillinga
+stillingen
+stillingene
+stillingenes
+stillinger
+stillingskategori
+stillingskategorien
+stillingskategoriene
+stillingskategoriens
+stillingskategorier
+stilliss
+stillissen
+stillissens
+stillits
+stillitsen
+stillitsens
+stillslig
+stillstand
+stillstanden
+stillstandens
+stilmessig
+stilne
+stilsikkert
+stilt
+stilte
+stiltra
+stiltre
+stiltrer
+stiltret
+stim
+stima
+stimen
+stimene
+stimens
+stimer
+stimet
+stimla
+stimle
+stimlene
+stimler
+stimlet
+stimmel
+stimmelen
+stimmelens
+stimulans
+stimulansen
+stimulansene
+stimulansens
+stimulanser
+stimulere
+stimulerende
+stimulerer
+stimuleres
+stimulert
+stimulerte
+stimuli
+stimulus
+stimulusen
+stimulusens
+sting
+stinga
+stingene
+stinget
+stingets
+stink
+stinka
+stinkdyr
+stinkdyra
+stinkdyrene
+stinkdyret
+stinkdyrets
+stinke
+stinket
+stinn
+stinne
+stint
+stinta
+stinte
+stipend
+stipenda
+stipendene
+stipendet
+stipendets
+stipendia
+stipendiat
+stipendiaten
+stipendiatene
+stipendiatens
+stipendiater
+stipendiene
+stipendier
+stipendiet
+stipendiets
+stipendium
+stiple
+stiplede
+stiplet
+stipuler
+stipulere
+stipulerer
+stipulert
+stipulerte
+stirra
+stirre
+stirrer
+stirret
+stiv
+stive
+stivelse
+stivelsen
+stivelsens
+stivetøy
+stivetøyet
+stivetøyets
+stivfrosne
+stivfrossen
+stivna
+stivne
+stivner
+stivnet
+stivt
+stjal
+stjele
+stjeler
+stjeles
+stjerna
+stjerne
+stjerneidrett
+stjerneidretten
+stjerneidrettens
+stjernen
+stjernene
+stjernens
+stjerner
+stjerneskott
+stjerneskottet
+stjerneskottets
+stjerneskudd
+stjerneskuddet
+stjerneskuddets
+stjert
+stjerten
+stjertene
+stjertens
+stjerter
+stjålet
+stjålne
+stk
+ståk
+ståke
+ståket
+støkk
+støkken
+støkkens
+støkt
+støkte
+stål
+støl
+Østlandet
+Østlandets
+østlandsk
+østlandske
+søtlaten
+søtlatne
+ståle
+støle
+stølen
+østlending
+østlendingen
+østlendingene
+østlendingens
+østlendinger
+stølene
+stølens
+støler
+stålet
+østlig
+østlige
+stålkonstruksjon
+stålkonstruksjonen
+stålkonstruksjonene
+stålkonstruksjonens
+stålkonstruksjoner
+stølne
+stålsatt
+stålsatte
+Østmarka
+stønad
+stønaden
+stønadene
+stønadens
+stønader
+stønn
+stønne
+stønnet
+sto
+stoa
+stod
+stodder
+stodderen
+stodderens
+stoff
+stoffe
+stoffene
+stoffer
+stoffet
+stoffets
+stoffmengde
+stoffmengden
+stoffmengdens
+stoffskifte
+stoffskiftet
+stoiker
+stoikere
+stoikeren
+stoikerens
+stoikeres
+stoikerne
+stoikernes
+stoisisme
+stoisismen
+stoisismens
+stoisk
+stokk
+stokke
+stokken
+stokkender
+stokkens
+stokker
+stol
+stola
+stolaen
+stolaene
+stolaens
+stolaer
+stole
+stolen
+stolene
+stolens
+stoler
+stoll
+stollen
+stollens
+stolpe
+stolpen
+stolpens
+stolt
+stolte
+stolthet
+stoltheten
+stolthetens
+stomle
+stopp
+stoppe
+stoppede
+stoppen
+stoppens
+stoppeplikt
+stoppeplikta
+stoppeplikten
+stoppepliktens
+stopper
+stoppested
+stoppestedene
+stoppesteder
+stoppestedet
+stoppestedets
+stoppet
+stor
+storaktig
+storarta
+storartet
+storbrann
+storbrannen
+storbrannene
+storbrannens
+storbranner
+storby
+storbyen
+storbyene
+storbyens
+storbyer
+store
+storetå
+storetåa
+storfe
+storfolk
+storfolkene
+storfolket
+storfolkets
+storform
+storforma
+storformen
+storformens
+storgata
+storgate
+storgaten
+storgatene
+storgatens
+storgater
+storhet
+storheten
+storhetens
+storhetstid
+storhetstida
+storhetstiden
+storhetstidens
+storhotell
+storhotellet
+storhotellets
+storindustri
+storindustrien
+storindustriens
+storinnrykk
+storinnrykket
+storinnrykkets
+stork
+storken
+storkene
+storkenebb
+storkenebben
+storkenebbens
+storkens
+storker
+storløp
+storløper
+storløpet
+storløpets
+storlåten
+storlåtne
+storm
+stormagasin
+stormagasiner
+stormagasinet
+stormagasinets
+stormakt
+stormakta
+stormaktene
+stormakter
+stormakts
+stormbyge
+stormbygen
+stormbygene
+stormbygens
+stormbyger
+storme
+stormen
+stormende
+stormens
+stormer
+stormet
+stormkast
+stormkastene
+stormkastet
+stormkastets
+stormløp
+stormløper
+storms
+stormskritt
+storpart
+storparten
+storpartens
+storpolitikk
+storpolitikken
+storpolitikkens
+storpolitisk
+storr
+storren
+storrens
+storsildfiske
+storsildfisket
+storsildfiskets
+storslag
+storslagen
+storslagent
+storslaget
+storslagets
+storslagne
+storslalåm
+storslått
+storslåtte
+storspill
+storspille
+storspiller
+storstilt
+storstilte
+stort
+storting
+stortinga
+stortingene
+stortinget
+stortingets
+stortingsdebatt
+stortingsdebatten
+stortingsdebattene
+stortingsdebattens
+stortingsdebatter
+stortingsgruppa
+stortingsgruppe
+stortingsgruppen
+stortingsgruppens
+stortingskvinna
+stortingskvinne
+stortingskvinnen
+stortingskvinnene
+stortingskvinnens
+stortingskvinner
+stortingsmann
+stortingsmannen
+stortingsmannens
+stortingsmelding
+stortingsmeldinga
+stortingsmeldingen
+stortingsmeldingene
+stortingsmeldingens
+stortingsmeldinger
+stortingsmenn
+stortingsmennene
+stortingsmennenes
+stortingsmenns
+stortingspresident
+stortingspresidenten
+stortingspresidentens
+stortingsproposisjon
+stortingsproposisjonen
+stortingsproposisjonene
+stortingsproposisjonens
+stortingsproposisjoner
+stortingsrepresentant
+stortingsrepresentanten
+stortingsrepresentantene
+stortingsrepresentantens
+stortingsrepresentanter
+stortingssesjon
+stortingssesjonen
+stortingssesjonene
+stortingssesjonens
+stortingssesjoner
+stortingsvalg
+stortingsvalget
+stortingsvalgets
+stortingsvedtak
+stortingsvedtaket
+stortingsvedtakets
+stortrives
+storveges
+storveies
+storverk
+storverket
+storverkets
+storøyde
+stotra
+stotre
+stotrer
+stotret
+stova
+stove
+stovene
+stover
+østover
+østpå
+støpe
+støpejern
+støper
+støperi
+støperia
+støperiene
+støperier
+støperiet
+støperiets
+ståplass
+ståplassen
+ståplassene
+ståplassens
+ståplasser
+støpsel
+støpselet
+støpselets
+støpsla
+støpslene
+støpsler
+støpslet
+støpslets
+støpt
+støpte
+støpul
+støpulen
+støpulens
+strå
+strø
+står
+stær
+stør
+stråa
+strabas
+strabasen
+strabasene
+strabasens
+strabaser
+strabasiøs
+strabasiøse
+strabasiøst
+straff
+straffa
+straffbar
+straffbare
+straffbart
+straffe
+straffelov
+straffelova
+straffeloven
+straffelovens
+straffelover
+straffen
+straffens
+straffer
+strafferett
+strafferetten
+strafferettens
+strafferettslig
+straffes
+straffesak
+straffesaka
+straffesaken
+straffesakene
+straffesakens
+straffesaker
+straffet
+straffeutmåling
+straffeutmålinga
+straffeutmålingen
+straffeutmålingens
+strak
+strakk
+straks
+strakt
+strakte
+stram
+stramme
+strammer
+strammere
+strammes
+strammet
+stramt
+strand
+stranda
+strandbredd
+strandbredda
+strandbredden
+strandbreddens
+strande
+stranden
+strandens
+strander
+strandet
+strandgata
+strandgate
+strandgaten
+strandgatene
+strandgatens
+strandgater
+strandhogg
+strandhogget
+strandhoggets
+strandhugg
+strandhugget
+strandhuggets
+strandkant
+strandkanten
+strandkantens
+strange
+strangen
+strangens
+strant
+stranten
+strantne
+strateg
+strategen
+strategene
+strategens
+strateger
+strategi
+strategien
+strategiene
+strategiens
+strategier
+strategisk
+strategiske
+stratigrafisk
+stratosfære
+stratosfæren
+stratosfærens
+strauk
+strødd
+strødde
+østre
+streb
+streba
+strebe
+streben
+streber
+strebere
+streberen
+streberens
+streberes
+streberne
+strebernes
+strebet
+stred
+strede
+stredet
+strei
+streif
+streifa
+streife
+streifer
+streifet
+streik
+streika
+streike
+streikebryter
+streikebrytere
+streikebryteren
+streikebryterens
+streiken
+streikende
+streikens
+streiker
+streiket
+streikevakt
+streikevakta
+streikevakten
+streikevaktene
+streikevaktens
+streikevakter
+strek
+streka
+streke
+streken
+strekens
+streker
+streket
+strekk
+strekke
+strekken
+strekkens
+strekker
+strekkes
+strekmål
+strekmålet
+strekmålets
+strekning
+strekningen
+strekningene
+strekningens
+strekninger
+strekt
+strekte
+stæren
+støren
+strendene
+strender
+stråene
+stærene
+streng
+strenge
+strengen
+strengens
+strengere
+strengespell
+strengespellet
+strengespellets
+strengespill
+strengespillet
+strengespillets
+strengest
+strengeste
+strenghet
+strengheten
+strenghetens
+strengt
+stærens
+størens
+streptokokk
+streptokokken
+streptokokkene
+streptokokkens
+streptokokker
+streptomycin
+streptomycinet
+streptomycinets
+stærer
+stress
+stressa
+stresse
+stresser
+stresset
+strået
+strøet
+stråets
+strøets
+strev
+strevd
+strevde
+streve
+strevet
+strevsom
+strevsomme
+strevsomt
+størhus
+størhuset
+størhusets
+stri
+stria
+stribukk
+stribukken
+stribukkens
+strid
+stridbar
+stridbare
+stridbart
+stridbukk
+stridbukken
+stridbukkene
+stridbukkens
+stridbukker
+stridd
+stridde
+stride
+striden
+stridende
+stridens
+strider
+strides
+stridgråte
+stridig
+stridighet
+stridigheten
+stridighetene
+stridighetens
+stridigheter
+stridregne
+stridregnet
+stridsdyktig
+stridsdyktige
+stridsfør
+stridsføre
+stridsført
+stridsmann
+stridsmannen
+stridsmannens
+stridsmenn
+stridsmennene
+stridsmennenes
+stridsmenns
+stridsskrift
+stridsskrifter
+stridsskriftet
+stridsskriftets
+stridsspørsmål
+stridsspørsmålene
+stridsspørsmålet
+stridsspørsmålets
+stridsvogn
+stridsvognen
+stridsvognene
+stridsvognens
+stridsvogner
+strien
+striens
+strieskjorta
+strigla
+strigle
+strigler
+striglet
+strikk
+strikka
+strikke
+strikken
+strikkens
+strikker
+strikket
+strikketøy
+strikketøyet
+strikketøyets
+striks
+strikt
+stril
+strilen
+strilene
+strilens
+striler
+strima
+strime
+strimen
+strimene
+strimens
+strimer
+strimla
+strimlene
+strimler
+strimmel
+strimmelen
+strimmelens
+stringens
+stringensen
+stringensens
+stringent
+stripa
+stripe
+stripen
+stripens
+striper
+stripet
+stripete
+stripp
+strippa
+strippe
+stripper
+strippet
+strips
+stripsen
+stripsens
+striptease
+stripteasen
+stripteasens
+strir
+striregne
+striskjorta
+striskjorte
+stritt
+stritte
+størja
+størje
+størjen
+størjens
+strøk
+strøka
+strøken
+strøkene
+strøket
+strøkets
+størkna
+strøkne
+størkne
+størkner
+størknet
+strål
+stråle
+strålen
+strålende
+strålens
+stråler
+strålet
+stråling
+strålt
+strålte
+strøm
+strømma
+strømme
+strømmen
+strømmens
+strømmer
+strømmet
+strømning
+strømninger
+strømpa
+strømpe
+strømpen
+strømpene
+strømpens
+strømper
+strømt
+strømte
+strofe
+strofen
+strofene
+strofens
+strofer
+strontium
+strontiumet
+strontiumets
+stropp
+stroppe
+stroppen
+stroppene
+stroppens
+stropper
+strør
+større
+størrelse
+størrelsen
+størrelsene
+størrelsens
+størrelser
+størrelsesorden
+størrelsesordenen
+størrelsesordenens
+størst
+største
+størstedel
+størstedelen
+størstedelens
+størstepart
+størsteparten
+størstepartens
+strukket
+struktur
+strukturell
+strukturelle
+strukturelt
+strukturen
+strukturendring
+strukturendringen
+strukturendringene
+strukturendringens
+strukturendringer
+strukturene
+strukturens
+strukturer
+strukturere
+strukturerer
+strukturert
+strukturerte
+strukturrasjonalisering
+strukturrasjonaliseringa
+strukturrasjonaliseringen
+strukturrasjonaliseringens
+strukturtilpasning
+strukturtilpasningen
+strukturtilpasningens
+struma
+strumaen
+strumaens
+strunk
+strupe
+strupehode
+strupehoder
+strupehodet
+strupen
+strupene
+strupens
+struper
+strupet
+struts
+strutsen
+strutsene
+strutsens
+strutser
+strutta
+strutte
+strutter
+struttet
+stry
+stryet
+stryets
+stryk
+stryke
+strykefri
+strykefrie
+strykefritt
+strykejern
+strykejernet
+strykejernets
+strykekvartett
+strykekvartetten
+strykekvartettene
+strykekvartettens
+strykekvartetter
+stryker
+strykeri
+strykeria
+strykeriene
+strykeriet
+strykeriets
+strykes
+stryket
+stryknin
+strykninen
+strykninens
+strykning
+strykningen
+strykningens
+strype
+stryper
+strypt
+strypte
+søtsak
+søtsaka
+søtsaken
+søtsakene
+søtsakens
+søtsaker
+østsida
+østside
+østsiden
+østsidens
+støt
+søtt
+støtdemper
+støtdempere
+støtdemperen
+støtdemperens
+støtdemperes
+støtdemperne
+støtdempernes
+støte
+støter
+støtet
+støtfanger
+støtfangere
+støtfangeren
+støtfangerens
+støtfangeres
+støtfangerne
+støtfangernes
+stått
+støtt
+støtte
+støtten
+støttende
+støttens
+støtteordning
+støtteordninga
+støtteordningen
+støtteordningene
+støtteordningens
+støtteordninger
+støttepunkt
+støttepunktene
+støttepunkter
+støttepunktet
+støttepunktets
+støtter
+støttes
+støttespillere
+støttespilleren
+støttespillerens
+støttet
+støtting
+støttingen
+støttingens
+stu
+stua
+stuasje
+stuasjen
+stuasjens
+stubb
+stubben
+stubbene
+stubbens
+stubber
+stubbet
+stubbmark
+stubbmarka
+stubbmarken
+stubbmarkens
+stud
+student
+studenten
+studentene
+studentenes
+studentens
+studenter
+studenters
+studentikos
+studentikost
+studentlua
+studentlue
+studentluen
+studentluene
+studentluens
+studentluer
+studentopprør
+studentopprøra
+studentopprøret
+studentopprørets
+studentsamskipnad
+studentsamskipnaden
+studentsamskipnadene
+studentsamskipnadens
+studentsamskipnader
+studentunion
+studentunionen
+studentunionens
+studentvis
+studer
+studere
+studerende
+studerer
+studeres
+studert
+studerte
+studia
+studie
+studieleder
+studieledere
+studielederen
+studielederens
+studielederes
+studielederne
+studieledernes
+studielån
+studielånet
+studielånets
+studien
+studiene
+studieopphold
+studieoppholdene
+studieoppholdet
+studieoppholdets
+studieopplegg
+studieopplegget
+studieoppleggets
+studieplan
+studieplanen
+studieplanene
+studieplanens
+studieplaner
+studier
+studiereise
+studiereisen
+studiereisene
+studiereisens
+studiereiser
+studieselskap
+studieselskapa
+studieselskapene
+studieselskaper
+studieselskapet
+studieselskapets
+studiet
+studiets
+studio
+studioa
+studioene
+studioer
+studioet
+studioets
+studium
+stue
+stuen
+stuene
+stuens
+stuepike
+stuepiken
+stuepikene
+stuepikens
+stuepiker
+stuer
+stuert
+stuerten
+stuertene
+stuertens
+stuerter
+stuet
+stuing
+stuinga
+stuingen
+stuingens
+stukkatur
+stukkaturen
+stukkaturens
+stukken
+stukket
+stull
+stulla
+stulle
+stullet
+stum
+stumme
+stummende
+stump
+stumpa
+stumpe
+stumpen
+stumpens
+stumpet
+stumpt
+stumt
+stund
+stunda
+stunde
+stunden
+stundens
+stunder
+stundet
+stundevis
+stundimellom
+stundom
+stup
+stupbratt
+stupbratte
+stupe
+stuper
+stupet
+stupid
+stupide
+stupiditet
+stupiditeten
+stupiditetens
+stupt
+stupte
+stur
+sture
+sturen
+sturer
+sturne
+sturt
+sturte
+stuss
+stussa
+stusse
+stusser
+stusset
+stusslig
+stust
+stut
+stuten
+stutens
+stutt
+stutte
+stutteri
+stutterier
+stutteriet
+stutteriets
+stutthugsen
+stutthugsne
+stuttorv
+stuttorva
+stuttorvene
+stuttorvet
+stuttorvets
+stuv
+stuve
+stuven
+stuvende
+stuvens
+stuvet
+støv
+støve
+støvel
+støvelen
+støvelens
+støver
+støvere
+støveren
+støverens
+støveres
+støverne
+støvernes
+støvet
+støvete
+søtvier
+søtvieren
+søtvierens
+støvlene
+støvler
+støvlett
+støvletten
+støvlettene
+støvlettens
+støvletter
+støvsuga
+støvsuge
+støvsuger
+støvsugere
+støvsugeren
+støvsugerens
+støvsugeres
+støvsugerne
+støvsugernes
+støvsuget
+støy
+støydempe
+støyen
+støyende
+støyens
+stygg
+stygge
+styggedom
+styggedommen
+styggedommens
+styggelig
+styggen
+styggens
+styggere
+styggest
+stygging
+styggingen
+styggingene
+styggingens
+stygginger
+styggkald
+stygt
+stykk
+stykkarbeid
+stykkarbeidet
+stykkarbeidets
+stykke
+stykkene
+stykker
+stykket
+stykkets
+stykkevis
+stykkgods
+stykkgodset
+stykkgodsets
+stykkomtil
+stylte
+stylten
+styltens
+styltra
+styltre
+styltrene
+styltrer
+stymper
+stymperen
+stymperens
+støype
+støypejern
+støyper
+støyperi
+støyperia
+støyperiene
+støyperier
+støyperiet
+støyperiets
+støypt
+støypte
+styr
+styrbord
+styre
+styredel
+styredelen
+styredelens
+styreform
+styreforma
+styreformann
+styreformannen
+styreformannens
+styreformen
+styreformene
+styreformenn
+styreformennene
+styreformennenes
+styreformenns
+styreformens
+styreformer
+styremedlem
+styremedlemmene
+styremedlemmer
+styremedlemmet
+styremedlemmets
+styremøta
+styremøte
+styremøtene
+styremøter
+styremøtet
+styremøtets
+styren
+styrende
+styrene
+styrer
+styres
+styresmakt
+styresmakta
+styresmakten
+styresmaktene
+styresmaktens
+styresmakter
+styresmann
+styresmannen
+styresmannens
+styresmenn
+styresmennene
+styresmennenes
+styresmenns
+styret
+styretegn
+styretegnene
+styrets
+styring
+styringa
+styringen
+styringens
+styringer
+styringsverk
+styringsverket
+styringsverkets
+styrk
+styrke
+styrkeforhold
+styrkeforholdene
+styrkelse
+styrkelsen
+styrkelsens
+styrken
+styrkene
+styrker
+styrkes
+styrket
+styrking
+styrkingen
+styrkingens
+styrmann
+styrmannen
+styrmannens
+styrmenn
+styrmennene
+styrmennenes
+styrmenns
+styrne
+styrt
+styrte
+styrten
+styrtens
+styrtet
+styrthjelm
+styrthjelmen
+styrthjelmens
+støyt
+støytdemper
+støytdempere
+støytdemperen
+støytdemperens
+støytdemperes
+støytdemperne
+støytdempernes
+støyten
+støytene
+støytens
+støyter
+støytfanger
+støytfangere
+støytfangeren
+støytfangerens
+støytfangeres
+støytfangerne
+støytfangernes
+styv
+su
+sua
+subb
+subbe
+subbet
+subbete
+subjekt
+subjekta
+subjektene
+subjekter
+subjektet
+subjektets
+subjektiv
+subjektive
+subjektivisme
+subjektivismen
+subjektivismens
+subjektivitet
+subjektiviteten
+subjektivitetens
+subkultur
+subkulturen
+subkulturens
+sublim
+sublimasjon
+sublimasjonen
+sublimasjonene
+sublimasjonens
+sublimasjoner
+sublime
+sublimer
+sublimere
+sublimerer
+sublimert
+sublimerte
+sublimitet
+sublimt
+subsidie
+subsidien
+subsidiene
+subsidiens
+subsidier
+subsidiere
+subsidierer
+subsidiert
+subsidierte
+subsidiær
+subsidiære
+subsidiært
+subskribent
+subskribenten
+subskribentens
+subskribere
+subskriberer
+subskribert
+subskriberte
+subskripsjon
+subskripsjonen
+subskripsjonene
+subskripsjonens
+subskripsjoner
+substans
+substansen
+substansene
+substansens
+substanser
+substansiell
+substansielle
+substansielt
+substantiv
+substantiva
+substantivene
+substantiver
+substantivet
+substantivets
+substituere
+substituerer
+substituert
+substituerte
+substitutt
+substitutta
+substitutten
+substituttene
+substituttens
+substitutter
+substituttet
+substituttets
+substrat
+substrata
+substratene
+substrater
+substratet
+substratets
+subtil
+subtile
+subtilitet
+subtiliteten
+subtilitetens
+subtilt
+subtrahend
+subtrahenden
+subtrahendens
+subtrahere
+subtrahert
+subtraherte
+subtraksjon
+subtraksjonen
+subtraksjonene
+subtraksjonens
+subtraksjoner
+subtropisk
+sudaner
+sudanere
+sudaneren
+sudanerens
+sudaneres
+sudanerne
+sudanernes
+sudansk
+suffiks
+suffiksa
+suffiksene
+suffikser
+suffikset
+suffiksets
+suffisanse
+suffisansen
+suffisansens
+suffisant
+suffleen
+suffleens
+sufflere
+sufflerer
+sufflert
+sufflerte
+suffli
+sufflien
+suffliens
+sufflør
+suffløren
+sufflørene
+sufflørens
+sufflører
+suffløse
+suffragette
+sug
+sugde
+suge
+suger
+sugerør
+sugerørene
+sugerøret
+sugerørets
+suget
+sugg
+sugga
+suggen
+suggene
+suggens
+sugger
+suggerer
+suggerere
+suggererer
+suggerert
+suggererte
+suggesjon
+suggesjonen
+suggesjonene
+suggesjonens
+suggesjoner
+suggestiv
+sugget
+suite
+suiten
+suitens
+sujett
+sujetta
+sujettene
+sujetter
+sujettet
+sujettets
+sukat
+sukaten
+sukatens
+sukk
+sukke
+sukker
+sukkerbit
+sukkerbiten
+sukkerbitene
+sukkerbitens
+sukkerbiter
+sukkeret
+sukkerets
+sukkerroe
+sukkerroen
+sukkerroens
+sukket
+sukkulent
+sukl
+sukle
+suklet
+sukre
+suksedere
+suksederer
+suksedert
+suksederte
+suksesjon
+suksesjonen
+suksesjonene
+suksesjonens
+suksesjoner
+suksess
+suksessen
+suksessene
+suksessens
+suksesser
+suksessiv
+suksessive
+suksessivt
+sul
+sulamitt
+sulamitten
+sulamittens
+sule
+sulet
+sulfat
+sulfater
+sulfatet
+sulfatets
+sulfid
+sulfidet
+sulfidets
+sulfitt
+sulfitten
+sulfittens
+sulfittet
+sulfittets
+sulka
+sulke
+sulker
+sulket
+sulky
+sulkyen
+sulkyens
+sull
+sullen
+sullens
+sullet
+sullik
+sulliken
+sullikens
+sult
+sultan
+sultanen
+sultanene
+sultanens
+sultaner
+sulte
+sulten
+sultens
+sulter
+sultne
+sum
+summa
+summarisk
+summe
+summen
+summene
+summens
+summer
+summere
+summerer
+summering
+summert
+summerte
+summet
+summetone
+summetonen
+summetonens
+summing
+summinga
+summingen
+summingens
+sump
+sumpen
+sumpene
+sumpens
+sumper
+sumpet
+sumpete
+sumpig
+sund
+sunde
+sundet
+sunget
+sunket
+sunn
+sunne
+sunnere
+sunnfjording
+sunnfjordingen
+sunnfjordingens
+sunnhet
+sunnheten
+sunnhetens
+sunnhetstilstand
+sunnhetstilstanden
+sunnhetstilstandens
+sunnhordlending
+sunnhordlendingen
+sunnhordlendingens
+sunnmøring
+sunnmøringen
+sunnmøringene
+sunnmøringens
+sunnmøringer
+sunt
+sup
+supe
+supen
+supens
+super
+superb
+superbt
+supere
+superkargo
+superkargoen
+superkargoens
+superlativ
+superlativen
+superlativens
+superlativer
+superlativet
+superlativets
+supermakt
+supermakta
+supermakten
+supermaktene
+supermaktens
+supermakter
+supersonisk
+supersoniske
+supert
+supertankere
+supertankeren
+supertankerens
+supina
+supiner
+supinum
+supinumet
+supinumets
+suppa
+suppe
+suppedas
+suppedasen
+suppedasens
+suppen
+suppene
+suppens
+supper
+suppleant
+suppleanten
+suppleantene
+suppleantens
+suppleanter
+supplement
+supplementet
+supplementets
+supplere
+supplerende
+suppleres
+supplert
+supplerte
+supplikant
+supplikanten
+supplikantens
+supplikkere
+supplikkerer
+supplikkert
+supplikkerte
+supponere
+supponerer
+supponert
+supponerte
+supporter
+supportere
+supporteren
+supporterens
+supporteres
+supporterne
+supporternes
+supre
+supt
+supte
+sur
+sure
+surfing
+surfinga
+surfingen
+surfingens
+surhetsgrad
+surhetsgraden
+surhetsgradens
+surinamer
+surinameren
+surinamerens
+surinamsk
+surmjølk
+surmjølka
+surmule
+surmuler
+surmult
+surmulte
+surna
+surne
+surner
+surnet
+surr
+surre
+surrealisme
+surrealismen
+surrealismens
+surrealist
+surrealisten
+surrealistens
+surrealistisk
+surren
+surrens
+surret
+surring
+surringa
+surringen
+surringene
+surringens
+surrogat
+surrogatet
+surrogatets
+surstoff
+surstoffet
+surstoffets
+surt
+surøyd
+sus
+suse
+suseladd
+suseladden
+suseladdens
+susen
+susende
+susens
+suser
+suset
+susete
+susle
+suspekt
+suspekte
+suspendere
+suspenderer
+suspendert
+suspenderte
+suspensjon
+suspensjonen
+suspensjonene
+suspensjonens
+suspensjoner
+suspensoriet
+suspensoriets
+suspensorium
+sut
+suta
+sutle
+sutra
+sutre
+sutrer
+sutret
+sutt
+sutten
+suttens
+sutter
+suvenir
+suveniren
+suvenirene
+suvenirens
+suvenirer
+suveren
+suverene
+suverenitet
+suvereniteten
+suverenitetens
+suverent
+suvl
+suvlet
+suvlets
+sva
+svaber
+svaberen
+svaberens
+svaberg
+svaberga
+svabergene
+svaberget
+svabergets
+svada
+svadaen
+svadaens
+svaet
+svaets
+svai
+svaia
+svaie
+svaien
+svaiens
+svaiet
+svait
+svak
+svake
+svakelig
+svakere
+svakest
+svakeste
+svakhet
+svakheten
+svakhetene
+svakhetens
+svakheter
+svakhetstegn
+svaksynt
+svaksynte
+svakt
+sval
+svala
+svalbardolje
+svale
+svalere
+svalgang
+svalgangen
+svalgangene
+svalgangens
+svalganger
+svalne
+svalt
+svamp
+svampen
+svampene
+svampens
+svamper
+svampet
+svampete
+svana
+svane
+svanen
+svanene
+svanens
+svaner
+svanesang
+svanesangen
+svanesangens
+svanger
+svangerskap
+svangerskapet
+svangerskapets
+svangert
+svangre
+svans
+svansen
+svansene
+svansens
+svanser
+svant
+svar
+svara
+svarabhakti
+svarabhaktivokal
+svarabhaktivokalen
+svarabhaktivokalens
+svare
+svarene
+svarer
+svaret
+svarfrist
+svarfristen
+svarfristens
+svars
+svart
+svarte
+svartebøker
+svartebok
+svarteboka
+svarteboken
+svartebokens
+svartebørs
+svartebørsen
+svartebørsens
+svartedauden
+svartelista
+svarteliste
+svartelisten
+svartelistens
+svartemarja
+svarthvittbilde
+svartna
+svartne
+svartner
+svartnet
+svartsyn
+svartsynet
+svartsynets
+svarttrast
+svarttrasten
+svarttrastens
+svarttrost
+svarttrosten
+svarttrostene
+svarttrostens
+svarttroster
+svarve
+sve
+svea
+sved
+svei
+sveik
+svein
+sveinen
+sveinene
+sveinens
+sveiner
+sveinkall
+sveinkallen
+sveinkallens
+sveip
+sveipe
+sveiper
+sveipt
+sveipte
+sveis
+sveise
+sveiseapparat
+sveiseapparatene
+sveiseapparater
+sveiseapparatet
+sveiseapparatets
+sveisen
+sveisent
+sveiser
+sveisere
+sveiseren
+sveiserens
+sveiseres
+sveiserne
+sveisernes
+sveiset
+sveisne
+sveit
+sveita
+sveiten
+sveitens
+sveitser
+sveitsere
+sveitseren
+sveitserens
+sveitseres
+sveitserne
+sveitsernes
+sveitserost
+sveitsisk
+sveitsiske
+sveiv
+sveiva
+sveiven
+sveivene
+sveivens
+sveiver
+sveivet
+svek
+sveket
+svekk
+svekke
+svekkelse
+svekkelsen
+svekkelsens
+svekker
+svekkes
+svekket
+svekling
+sveklingen
+sveklingene
+sveklingens
+sveklinger
+såvel
+svelg
+svelgde
+svelge
+svelgen
+svelgens
+svelget
+svelgja
+svelgje
+svelgjet
+svelle
+sveller
+svellet
+svelt
+svelte
+sveltestreik
+sveltestreiken
+sveltestreikens
+sveltet
+sveltihel
+sveltihjel
+svenn
+svennebrev
+svennebrevet
+svennebrevets
+svennen
+svennene
+svennens
+svenneprøve
+svenneprøven
+svenneprøvene
+svenneprøvens
+svenneprøver
+svenner
+svensk
+svenske
+svensken
+svenskene
+svenskenes
+svenskens
+svensker
+svenskers
+svepa
+svepe
+svepen
+svepens
+sverd
+sverda
+sverdene
+sverdet
+sverdets
+sverdlilje
+sverdskjede
+sverdskjeden
+sverdskjedens
+sverga
+sverge
+sverger
+sverget
+sverja
+sverje
+sverjer
+sverjet
+sverm
+sverma
+sverme
+svermen
+svermens
+svermer
+svermeri
+svermerier
+svermeriet
+svermeriets
+svermerisk
+svermet
+sverta
+sverte
+sverten
+svertens
+sverter
+svertet
+svett
+svetta
+svette
+svetten
+svettens
+svetter
+svettet
+svev
+svevde
+sveve
+svevebåt
+svevebåten
+svevebåtene
+svevebåtens
+svevebåter
+svever
+svevet
+svi
+svibel
+svibelen
+svibelens
+sviblene
+svibler
+svidd
+svidde
+svien
+sviens
+svigerbarn
+svigerbarna
+svigerbarnet
+svigerbarnets
+svigerfar
+svigerfaren
+svigerfarens
+svigerforeldre
+svigerforeldrene
+svigerinna
+svigerinne
+svigerinnen
+svigerinnene
+svigerinnens
+svigerinner
+svigermødre
+svigermødrene
+svigermor
+svigermora
+svigermoren
+svigermorens
+svik
+svikaktig
+svike
+svikefull
+sviker
+sviket
+svikfull
+svikfulle
+svikfullt
+svikt
+svikte
+svikten
+sviktende
+sviktens
+svikter
+sviktet
+svill
+svilla
+sville
+svillen
+svillens
+sviller
+svime
+svimen
+svimens
+svimerke
+svimerket
+svimeslå
+svimeslo
+svimeslått
+svimla
+svimle
+svimler
+svimlet
+svimmel
+svimmelhet
+svimmelheten
+svimmelhetens
+svin
+svinaktig
+svindel
+svindelen
+svindelens
+svindla
+svindle
+svindler
+svindlere
+svindleren
+svindlerens
+svindleres
+svindlerne
+svindlernes
+svindlet
+svine
+svineal
+svineavl
+svineheldig
+svinelærsmappa
+svinelærsmappe
+svinelærsmappen
+svinelærsmappens
+svinet
+sving
+svinge
+svingel
+svingelen
+svingelens
+svingen
+svingene
+svinger
+svinget
+svingete
+svinglene
+svingler
+svingning
+svingningen
+svingningene
+svingningens
+svingninger
+svingom
+svingt
+svingte
+svinn
+svinne
+svinnende
+svinnet
+svinse
+svinser
+svinsk
+svint
+svinte
+svipptur
+svippturen
+svippturens
+svir
+sviren
+svirens
+svirra
+svirre
+svirrer
+svirret
+sviska
+sviske
+svisken
+sviskene
+sviskens
+svisker
+svitsja
+svitsje
+svitsjen
+svitsjene
+svitsjens
+svitsjer
+svitsjet
+sviv
+svivd
+svive
+svømme
+svømmehall
+svømmehallen
+svømmehallens
+svømmer
+svømmere
+svømmeren
+svømmerens
+svømmeres
+svømmerne
+svømmernes
+svømmestevne
+svømmestevnet
+svømmestevnets
+svømming
+svømminga
+svømmingen
+svømmingens
+søvn
+søvnen
+søvnens
+søvngjenger
+søvngjengere
+søvngjengeren
+søvngjengerens
+søvngjengeres
+søvngjengerne
+søvngjengernes
+søvnig
+svoger
+svogeren
+svogerens
+svogrene
+svogrer
+svolk
+svolken
+svolkens
+svor
+svoren
+svorene
+svorens
+svorer
+svoret
+svovel
+svovelen
+svovelens
+svovelet
+svovelets
+svovelkis
+svovelkisen
+svovelkisens
+svovelsyre
+svovelsyren
+svovelsyrens
+svovle
+svøp
+svøpe
+svøper
+svøpet
+svøpt
+svøpte
+svær
+svære
+sværing
+sværingen
+sværingene
+sværingens
+sværinger
+svært
+svull
+svullen
+svullene
+svullens
+svuller
+svulme
+svulmende
+svulmer
+svulst
+svulsten
+svulstene
+svulstens
+svulster
+svulstig
+svunget
+svunne
+svunnen
+svunnet
+svæve
+swagger
+swaggeren
+swaggerens
+swahili
+sweater
+sweateren
+sweaterens
+swimmingpool
+swimmingpoolen
+swimmingpoolens
+swing
+swingen
+swingens
+sy
+søya
+sybaritt
+sybaritten
+sybarittens
+syd
+sydd
+syde
+syder
+sydfra
+sydfrukt
+sydfrukta
+sydfrukten
+sydfruktens
+sydlandsk
+sydlending
+sydlendingen
+sydlendingens
+sydlig
+sydlige
+sydover
+sydpol
+sydpolen
+sydpolene
+sydpolens
+sydpoler
+sydøst
+sydvest
+sydvesten
+sydvestens
+sydvestlig
+sydvestlige
+søye
+søyene
+syenitt
+syenitten
+syenittens
+syer
+søyer
+syerske
+syersken
+syerskene
+syerskens
+syersker
+syfilis
+syfilisen
+syfilisens
+syfilitisk
+syk
+sykdom
+sykdommen
+sykdommene
+sykdommens
+sykdommer
+syke
+sykebesøk
+sykebesøket
+sykebesøkets
+sykegymnast
+sykehjem
+sykehjemma
+sykehjemmene
+sykehjemmet
+sykehjemmets
+sykehus
+sykehusa
+sykehusene
+sykehuset
+sykehusets
+sykehusopphold
+sykehusoppholdet
+sykehusoppholdets
+sykelig
+sykelønn
+sykelønna
+sykelønnen
+sykelønnens
+sykemelde
+sykemelding
+sykemeldinga
+sykemeldingen
+sykemeldingens
+sykemeldt
+syken
+sykepenger
+sykepleie
+sykepleien
+sykepleiens
+sykepleier
+sykepleiere
+sykepleieren
+sykepleierens
+sykepleieres
+sykepleierne
+sykepleiernes
+sykepleierske
+sykepleiersken
+sykepleierskene
+sykepleierskens
+sykepleiersker
+sykepleierskole
+sykepleierskolen
+sykepleierskolens
+sykesøster
+sykesøsteren
+sykesøsterens
+sykesøstre
+sykesøstrene
+sykestua
+sykestue
+sykestuen
+sykestuens
+sykestuer
+sykkel
+sykkelen
+sykkelens
+sykkelfabrikk
+sykkelfabrikken
+sykkelfabrikkens
+sykkelklubb
+sykkelklubben
+sykkelklubbene
+sykkelklubbens
+sykkelklubber
+sykla
+sykle
+syklene
+sykler
+syklet
+sykling
+syklinga
+syklingen
+syklingens
+syklisk
+syklist
+syklisten
+syklistene
+syklistens
+syklister
+syklon
+syklonen
+syklonene
+syklonens
+sykloner
+syklus
+syklusen
+syklusene
+syklusens
+sykluser
+sykmeldt
+sykne
+sykner
+sykt
+syl
+søyla
+søyle
+sylen
+søylen
+sylene
+søylene
+sylens
+søylens
+syler
+søyler
+sylfide
+sylfiden
+sylfidens
+sylinder
+sylindere
+sylinderen
+sylinderens
+sylinderes
+sylinderformet
+sylinderne
+sylindernes
+sylindrer
+sylindrisk
+syllogisme
+syllogismen
+syllogismens
+sylta
+sylte
+sylten
+syltene
+syltens
+sylter
+syltet
+syltetøy
+syltetøyet
+syltetøyets
+symaskin
+symaskina
+symaskinen
+symaskinene
+symaskinens
+symaskiner
+symbiose
+symbiosen
+symbiosens
+symbol
+symbola
+symbolene
+symboler
+symbolet
+symbolets
+symbolikk
+symbolikken
+symbolikkens
+symbolisere
+symboliserer
+symbolisme
+symbolismen
+symbolismens
+symbolsk
+symbolverdi
+symbolverdien
+symbolverdiens
+symfoni
+symfonien
+symfoniene
+symfoniens
+symfonier
+symfoniorkester
+symfoniorkesteret
+symfoniorkesterets
+symfoniorkestra
+symfoniorkestre
+symfoniorkestrene
+symfoniorkestret
+symfoniorkestrets
+symfonisk
+symmetri
+symmetrien
+symmetriens
+symmetrisk
+sympati
+sympatien
+sympatiene
+sympatiens
+sympatier
+sympatisere
+sympatiserer
+sympatisk
+sympatiske
+sympatisør
+sympatisøren
+sympatisørene
+sympatisørens
+sympatisører
+symposiene
+symposier
+symposiet
+symposium
+symposiumet
+symposiumets
+symptom
+symptomatisk
+symptomene
+symptomer
+symptomet
+symptomets
+symra
+symre
+symrene
+symrer
+syn
+åsyn
+åsyna
+synagoge
+synagogen
+synagogens
+synbar
+synd
+synda
+synde
+syndebukk
+syndebukken
+syndebukkene
+syndebukkens
+syndebukker
+syndefall
+syndefallet
+syndefallets
+synden
+syndenes
+syndens
+synder
+syndere
+synderegister
+synderegisteret
+synderegisterets
+synderegistra
+synderegistre
+synderegistrene
+synderegistret
+synderegistrets
+synderen
+synderens
+synderes
+synderlig
+synderne
+syndernes
+syndflod
+syndfloden
+syndflodens
+syndig
+syndige
+syndikalisme
+syndikalismen
+syndikalismens
+syndikat
+syndikater
+syndikatet
+syndikatets
+syndrom
+syndromer
+syndserkjennelse
+syndserkjennelsen
+syndserkjennelsens
+syndsforlatelse
+syndsforlatelsen
+syndsforlatelsens
+syne
+åsynene
+synes
+synet
+åsynet
+åsynets
+synfaring
+synfaringa
+synfaringen
+synfaringens
+syng
+synge
+syngende
+synger
+synges
+åsynja
+åsynje
+åsynjene
+åsynjer
+synk
+synke
+synkeferdig
+synkende
+synker
+synkope
+synkopen
+synkopens
+synkopere
+synkoperer
+synkopert
+synkoperte
+synkretisme
+synkretismen
+synkretismens
+synkron
+synkrone
+synkronisere
+synkroniserer
+synkronisert
+synkroniserte
+synkronisk
+synkronsvømning
+synkronsvømningen
+synkronsvømningens
+synkront
+synkverve
+synkverving
+synkvervinga
+synkvervingen
+synkvervingens
+synlig
+synlige
+synode
+synoden
+synodens
+synonym
+synonyme
+synonymer
+synonymet
+synonymt
+synopsis
+synopsisen
+synopsisens
+syns
+synshemmede
+synshemmet
+synsk
+synsmåte
+synsmåten
+synsmåtene
+synsmåtens
+synsmåter
+synspunkt
+synspunktene
+synspunkter
+synspunktet
+synspunktets
+synsvidde
+synsvidden
+synsviddens
+synsvinkel
+synsvinkelen
+synsvinkelens
+synsvinklene
+synsvinkler
+syntagmastisk
+syntagme
+syntagmet
+syntaks
+syntaksen
+syntaksens
+syntaktisk
+syntes
+syntesen
+syntesens
+syntetisk
+sypresse
+sypressen
+sypressens
+sypresser
+syr
+syre
+syrer
+syrere
+syreren
+syrerens
+syreres
+syrerne
+syrernes
+syrin
+syrinbusk
+syrinbusken
+syrinbuskene
+syrinbuskens
+syrinbusker
+syrinen
+syrinene
+syrinens
+syriner
+syrisk
+syriske
+syrlig
+syrlige
+sysla
+sysle
+sysler
+syslet
+syssel
+sysselen
+sysselens
+sysselmann
+sysselmannen
+sysselmannens
+sysselmenn
+sysselmennene
+sysselmennenes
+sysselmenns
+sysselsatt
+sysselsatte
+sysselsette
+sysselsetter
+sysselsetting
+sysselsettingen
+sysselsettingens
+system
+systemanalyse
+systemanalysen
+systemanalysens
+systemanalytiker
+systemanalytikere
+systemanalytikeren
+systemanalytikerens
+systemanalytikeres
+systemanalytikerne
+systemanalytikernes
+systematiker
+systematikere
+systematikeren
+systematikerens
+systematikeres
+systematikerne
+systematikernes
+systematikk
+systematikken
+systematikkens
+systematisere
+systematiserer
+systematisert
+systematiserte
+systematisk
+systematiske
+systemdiskett
+systemdisketten
+systemdiskettene
+systemdiskettens
+systemdisketter
+systemene
+systemer
+systemere
+systemerer
+systemerere
+systemereren
+systemererens
+systemereres
+systemererne
+systemerernes
+systemert
+systemet
+systemets
+systemkontor
+systemkontorene
+systemkontorer
+systemkontoret
+systemkontorets
+systems
+systua
+systue
+systuen
+systuene
+systuens
+systuer
+sysvorte
+syt
+syte
+syter
+sytt
+sytte
+sytten
+syttende
+syttendel
+syttendelen
+syttendelens
+syttens
+sytti
+syttidel
+syttidelen
+syttidelens
+syttien
+syttiende
+syttiførste
+syv
+t
+tå
+tø
+åt
+ta
+tåa
+åta
+tabbe
+tabben
+tabbens
+tabell
+tabellarisk
+tabellen
+tabellene
+tabellens
+tabeller
+tabernakel
+tabernakelet
+tabernakelets
+tabernakla
+tabernaklene
+tabernakler
+tabernaklet
+tabernaklets
+tablå
+tablåa
+tablåene
+tablåer
+tablået
+tablåets
+tablett
+tabletten
+tablettene
+tablettens
+tabletter
+tabloidformat
+tabloidformatet
+tabloidformatets
+tabu
+tabua
+tabuene
+tabuer
+tabuet
+tabuets
+tabulator
+tabulatoren
+tabulatorene
+tabulatorens
+tabulatorer
+taburett
+taburetten
+taburettene
+taburettens
+taburetter
+taes
+tafatt
+taffel
+taffelet
+taffelets
+tafflet
+tafflets
+tafla
+taflene
+tafler
+tafs
+tafse
+tafset
+taft
+taften
+taftens
+taftet
+taftets
+tagal
+tagd
+tagde
+tagg
+tagge
+taggen
+taggens
+tagget
+taggete
+tagl
+taglet
+taglets
+tagna
+tagne
+tagner
+tagnet
+taifun
+taifunen
+taifunene
+taifunens
+taifuner
+taiwaner
+taiwanere
+taiwaneren
+taiwanerens
+taiwaneres
+taiwanerne
+taiwanernes
+taiwansk
+tak
+åtak
+åtaka
+takdrypp
+takdryppet
+takdryppets
+takende
+takene
+åtakene
+taket
+åtaket
+takets
+åtakets
+takgrind
+takgrinda
+takgrinden
+takgrindene
+takgrindens
+takgrinder
+takhøyde
+takhøyden
+takhøydens
+takk
+takke
+takkebrev
+takkebreva
+takkebrevene
+takkebrevet
+takkebrevets
+takken
+takker
+takkes
+takket
+takknemlig
+takknemlige
+takknemlighet
+takknemligheten
+takknemlighetens
+takknemlighetsgjeld
+takknemlighetsgjelden
+takknemlighetsgjeldens
+takkonstruksjon
+takkonstruksjonen
+takkonstruksjonene
+takkonstruksjonens
+takkonstruksjoner
+takksam
+takksamme
+takksamt
+takksigelse
+takksigelsen
+takksigelsens
+takkskyldig
+takle
+takler
+takling
+taklinga
+taklingen
+taklingens
+takrenna
+takrenne
+takrennen
+takrennene
+takrennens
+takrenner
+taksameter
+taksameteret
+taksameterets
+taksametra
+taksametre
+taksametrene
+taksametret
+taksametrets
+takser
+taksere
+takserer
+taksert
+takserte
+takst
+takstein
+taksteinene
+taksten
+takstene
+takstens
+takster
+takt
+takta
+takten
+taktene
+taktens
+takter
+taktfast
+taktfaste
+taktfull
+taktfulle
+taktfullt
+taktiker
+taktikere
+taktikeren
+taktikerens
+taktikeres
+taktikerne
+taktikernes
+taktikk
+taktikken
+taktikkene
+taktikkens
+taktikker
+taktisk
+taktiske
+taktlaus
+taktlause
+taktlaust
+taktløs
+taktløshet
+taktløsheten
+taktløshetens
+taktløst
+taktløysa
+taktløyse
+takvindu
+takvindua
+takvinduene
+takvinduer
+takvinduet
+takvinduets
+tal
+tala
+tale
+talefot
+talefrihet
+talefriheten
+talefrihetens
+talemål
+talemåla
+talemålet
+talemålets
+talemåte
+talemåten
+talemåtene
+talemåtens
+talemåter
+talen
+talende
+talent
+talenta
+talentene
+talenter
+talentet
+talentets
+talentfull
+talentfulle
+taler
+talere
+taleren
+talerens
+talerør
+talerøra
+talerøret
+talerørets
+tales
+talespråk
+talespråka
+talespråket
+talespråkets
+talet
+taletrengt
+talg
+talga
+talgen
+talgens
+talglys
+talglysa
+talglysene
+talglyset
+talglysets
+talgtit
+talgtiten
+talgtitens
+talisman
+talismanen
+talismanene
+talismanens
+talismaner
+talja
+talje
+taljen
+taljens
+talkie
+talkien
+talkiene
+talkiens
+talkier
+tall
+talle
+tallene
+tallerken
+tallerkenen
+tallerkenene
+tallerkenens
+tallerkener
+tallet
+tallets
+tallmateriale
+tallmaterialet
+tallmessig
+talloppgave
+talloppgaven
+talloppgavene
+talloppgavens
+talloppgaver
+tallord
+tallordet
+tallordets
+tallrik
+tallrike
+tallrikt
+talls
+tallskive
+tallskiven
+tallskivens
+tallverdi
+tallverdien
+tallverdiene
+tallverdiens
+tallverdier
+talmateriale
+talmaterialet
+talmaterialets
+talmessig
+talong
+talongen
+talongene
+talongens
+talonger
+talord
+talordet
+talordets
+talrik
+talrike
+talrikt
+talskiva
+talskive
+talsmann
+talsmannen
+talsmannens
+talsmenn
+talsmennene
+talsmennenes
+talsmenns
+talt
+talte
+tam
+tambak
+tambaken
+tambakene
+tambakens
+tambaker
+tambur
+tamburen
+tamburene
+tamburens
+tamburer
+tamburin
+tamburinen
+tamburinene
+tamburinens
+tamburiner
+tamil
+tamilen
+tamilene
+tamilens
+tamiler
+tamme
+tamp
+tampa
+tampe
+tampen
+tampens
+tampong
+tampongen
+tampongene
+tampongens
+tamponger
+tamrein
+tamreinen
+tamreinens
+tamt
+tan
+tana
+tandem
+tandemen
+tandemene
+tandemens
+tandemer
+tander
+tandert
+tandre
+tang
+tanga
+tange
+tangen
+tangens
+tangent
+tangenten
+tangentene
+tangentens
+tangenter
+tanger
+tangere
+tangerer
+tangert
+tangerte
+tanget
+tango
+tangoen
+tangoene
+tangoens
+tangoer
+tangsnelle
+tangspretta
+tangsprette
+tank
+tanke
+tankebane
+tankebanen
+tankebanene
+tankebanens
+tankebaner
+tankegang
+tankegangen
+tankegangens
+tankeganger
+tankekors
+tankekorsa
+tankekorsene
+tankekorset
+tankekorsets
+tanken
+tankene
+tankens
+tanker
+tankere
+tankeren
+tankerens
+tankevekkende
+tankfart
+tankfarten
+tankfartens
+tankmarked
+tankmarkeda
+tankmarkedene
+tankmarkeder
+tankmarkedet
+tankmarkedets
+tankrederi
+tankrederiene
+tankrederier
+tankrederiet
+tankrederiets
+tanks
+tanksen
+tanksene
+tanksens
+tankser
+tankskip
+tankskipa
+tankskipene
+tankskipet
+tankskipets
+tankvogn
+tankvogna
+tankvognen
+tankvognene
+tankvognens
+tankvogner
+tann
+tanna
+tannbehandling
+tannbehandlingen
+tannbehandlingens
+tannbørste
+tannbørsten
+tannbørstene
+tannbørstens
+tannbørster
+tanne
+tannen
+tannens
+tanngard
+tanngarden
+tanngardene
+tanngardens
+tanngarder
+tannkrem
+tannkremen
+tannkremens
+tannlege
+tannlegehøyskole
+tannlegehøyskolen
+tannlegehøyskolene
+tannlegehøyskolens
+tannlegehøyskoler
+tannlegekontor
+tannlegekontorene
+tannlegekontorer
+tannlegekontoret
+tannlegekontorets
+tannlegen
+tannlegene
+tannlegens
+tannleger
+tannlegevakt
+tannlegevakta
+tannlegevakter
+tannpasta
+tannpastaen
+tannpastaene
+tannpastaens
+tannpastaer
+tannpine
+tannpirker
+tannpirkere
+tannpirkeren
+tannpirkerens
+tannpirkeres
+tannpirkerne
+tannpirkernes
+tannråte
+tannråten
+tannråtens
+tannverk
+tannverken
+tannverkens
+tannvern
+tannvernet
+tannvernets
+tant
+tanta
+tantal
+tantalet
+tantalets
+tante
+tanten
+tantens
+tanter
+tantieme
+tantiemet
+tap
+tape
+tapen
+tapende
+tapene
+tapens
+taper
+taperen
+taperens
+tapet
+tapeta
+tapetene
+tapeter
+tapetet
+tapetets
+tapetser
+tapetsere
+tapetserer
+tapetsert
+tapetserte
+tapir
+tapiren
+tapirene
+tapirens
+tapirer
+tapp
+tappe
+tappen
+tappens
+tapper
+tappert
+tappet
+tapre
+taprere
+taprest
+tapsprosent
+tapsprosenten
+tapsprosentens
+tapt
+tapte
+tar
+tara
+taraen
+taraene
+taraens
+taraer
+tarantell
+tarantellen
+tarantellene
+tarantellens
+taranteller
+taren
+tarens
+tariff
+tariffavtale
+tariffavtalen
+tariffavtalene
+tariffavtalens
+tariffavtaler
+tariffen
+tariffens
+tariffoppgjør
+tariffoppgjørene
+tariffoppgjøret
+tariffoppgjørets
+tariffrevisjon
+tariffrevisjonen
+tariffrevisjonene
+tariffrevisjonens
+tariffrevisjoner
+tariffs
+tariffstridig
+tarm
+tarmen
+tarmene
+tarmens
+tarmer
+tarmslyng
+tarmslyngen
+tarmslyngens
+tart
+tartar
+tartaren
+tartarene
+tartarens
+tartarer
+tarten
+tartene
+tartens
+tarter
+tarv
+tarvelig
+tarven
+tarvens
+tarvet
+tas
+taska
+taske
+tasken
+taskene
+taskens
+tasker
+tasla
+tasle
+taslet
+tass
+tassa
+tasse
+tassen
+tassens
+tasset
+tast
+tasta
+tastatur
+tastatura
+tastaturene
+tastaturer
+tastaturet
+tastaturets
+taste
+tasten
+tastens
+taster
+tastet
+tatar
+tataren
+tatarene
+tatarens
+tatarer
+tater
+tatere
+tateren
+taterens
+tateres
+taterne
+taternes
+tatover
+tatovere
+tatoverer
+tatovert
+tatoverte
+tatt
+tau
+taua
+taue
+tauet
+taukveil
+taukveilen
+taukveilens
+taus
+tausa
+tause
+taushet
+tausheten
+taushetens
+taust
+taut
+tautologi
+tautologien
+tautologiene
+tautologiens
+tautologier
+tautologisk
+tautrekking
+tautrekkinga
+tautrekkingen
+tautrekkingens
+tavla
+tavle
+tavlen
+tavlens
+taxi
+taxien
+taxiene
+taxiens
+taxier
+tchader
+tchadere
+tchaderen
+tchaderens
+tchaderes
+tchaderne
+tchadernes
+tchadisk
+tødd
+tødde
+tøddel
+tøddelen
+tøddelens
+tødlene
+tødler
+te
+åte
+teak
+teaken
+teakens
+team
+teamwork
+teamworket
+teamworkets
+teater
+teateret
+teaterets
+teaterfolk
+teaterfolkene
+teaterfolket
+teaterfolkets
+teaterforestilling
+teaterforestillingen
+teaterforestillingene
+teaterforestillingens
+teaterforestillinger
+teaters
+teatersjef
+teatersjefen
+teatersjefene
+teatersjefens
+teatersjefer
+teaterskole
+teaterskolen
+teaterskolene
+teaterskolens
+teaterskoler
+teaterstykke
+teaterstykket
+teatra
+teatral
+teatralsk
+teatralt
+teatre
+teatrene
+teatret
+teatrets
+teblanding
+teblandingen
+teblandingene
+teblandingens
+teblandinger
+technetium
+technetiumet
+technetiumets
+tedde
+teddy
+teddybjørn
+teddybjørnen
+teddybjørnens
+teddyen
+teddyens
+tee
+teen
+teens
+teft
+teften
+teftens
+tegl
+teglet
+teglets
+teglstein
+teglsteinen
+teglsteinens
+teglverk
+teglverket
+teglverkets
+tegn
+tegna
+tegne
+tegnede
+tegnene
+tegner
+tegnere
+tegneren
+tegnerens
+tegnes
+tegnet
+tegnforklaring
+tegnforklaringen
+tegnforklaringens
+tegning
+tegninga
+tegningen
+tegningene
+tegningens
+tegninger
+tegns
+tegnsettingsreglene
+tegnsettingsregler
+tegnspråk
+tegnspråket
+tegnspråkets
+teig
+teigen
+teigene
+teigens
+teiger
+tein
+teina
+teinen
+teinene
+teinens
+teiner
+teip
+teipa
+teipe
+teipen
+teipens
+teipet
+tekke
+tekkelig
+tekkes
+tekket
+tekking
+tekkinga
+tekkingen
+tekkingens
+tekniker
+teknikere
+teknikeren
+teknikerens
+teknikeres
+teknikerne
+teknikernes
+teknikk
+teknikken
+teknikkene
+teknikkens
+teknikker
+teknisk
+tekniske
+teknokrat
+teknokraten
+teknokratene
+teknokratens
+teknokrater
+teknokrati
+teknokratien
+teknokratiens
+teknokratiet
+teknokratiets
+teknokratisk
+teknolog
+teknologen
+teknologene
+teknologens
+teknologer
+teknologi
+teknologien
+teknologiene
+teknologiens
+teknologier
+teknologisk
+teknologiske
+teksla
+teksle
+tekst
+teksta
+tekstavsnitt
+tekstbehandlingsmaskin
+tekstbehandlingsmaskinen
+tekstbehandlingsmaskinens
+tekstbehandlingsprogram
+tekstbehandlingsprogrammene
+tekstbehandlingsprogrammer
+tekstbehandlingsprogrammet
+tekstbehandlingsprogrammets
+tekste
+teksten
+tekstene
+tekstens
+tekster
+tekstere
+teksteren
+teksterens
+teksteres
+teksterne
+teksternes
+tekstet
+tekstfil
+tekstfila
+tekstfilen
+tekstfilene
+tekstfilens
+tekstfiler
+tekstforfatter
+tekstforfattere
+tekstforfatteren
+tekstforfatterens
+tekstforfatteres
+tekstforfatterne
+tekstforfatternes
+tekstil
+tekstila
+tekstilen
+tekstilene
+tekstilens
+tekstiler
+tekstilet
+tekstilets
+tekstilindustri
+tekstilindustrien
+tekstilindustriens
+teksting
+tekstinga
+tekstingen
+tekstingens
+tekstlinje
+tekstlinjen
+tekstlinjens
+tekstsammenheng
+tekstsammenhengen
+tekstsammenhengens
+tekstspalte
+tekstspalten
+tekstspaltene
+tekstspaltens
+tekstspalter
+tekt
+tekte
+tektes
+tektsoppgave
+tektsoppgaven
+tektsoppgavene
+tektsoppgavens
+tektsoppgaver
+tel
+tele
+teledata
+teledøl
+telefax
+telefon
+telefonboks
+telefonboksen
+telefonboksene
+telefonboksens
+telefonbokser
+telefonen
+telefonene
+telefonens
+telefoner
+telefonere
+telefonerer
+telefonert
+telefonerte
+telefonisk
+telefonkontakt
+telefonkontakten
+telefonkontaktene
+telefonkontaktens
+telefonkontakter
+telefonsamtale
+telefonsamtalen
+telefonsamtalene
+telefonsamtalens
+telefonsamtaler
+telefoto
+telefotoet
+telefotoets
+telegraf
+telegrafdirektør
+telegrafdirektøren
+telegrafdirektørens
+telegrafen
+telegrafene
+telegrafens
+telegrafer
+telegrafere
+telegraferer
+telegrafert
+telegraferte
+telegrafisk
+telegrafisken
+telegrafiskens
+telegrafist
+telegrafisten
+telegrafistene
+telegrafistens
+telegrafister
+telegrafverket
+telegram
+telegrambyrå
+telegrambyråa
+telegrambyrået
+telegrambyråets
+telegramma
+telegrammene
+telegrammer
+telegrammet
+telegrammets
+telegramstil
+telegramstilen
+telegramstilens
+telekommunikasjon
+telekommunikasjonen
+telekommunikasjonene
+telekommunikasjonens
+telekommunikasjoner
+teleks
+teleksen
+teleksene
+teleksens
+telekser
+teleksere
+telekserer
+teleksert
+telekserte
+telekstrafikk
+telekstrafikken
+telekstrafikkens
+telelinsa
+telelinse
+telelinsen
+telelinsens
+telelinser
+teleløsning
+teleløsningen
+teleløsningens
+teleløysing
+teleløysingen
+teleløysingens
+telen
+telepati
+telepatien
+telepatiens
+telepatisk
+teleprinter
+teleprintere
+teleprinteren
+teleprinterens
+teleprinteres
+teleprinterne
+teleprinternes
+teleskop
+teleskopa
+teleskopene
+teleskoper
+teleskopet
+teleskopets
+teleslynga
+teleslynge
+teleslyngen
+teleslyngens
+teletype
+teletypen
+teletypens
+televerk
+televerket
+televerkets
+televisjon
+televisjonen
+televisjonene
+televisjonens
+televisjoner
+tell
+telle
+telleapparat
+telleapparatene
+telleapparater
+telleapparatet
+telleapparatets
+tellende
+teller
+tellerskritt
+tellerskritta
+tellerskrittene
+tellerskrittet
+tellerskrittets
+tellet
+telleverk
+telleverket
+telleverkets
+tellur
+telluret
+tellurets
+tellurium
+telne
+telt
+telte
+teltet
+tema
+temaer
+temaet
+tematisk
+temma
+temme
+temmelig
+temmer
+temmet
+tempel
+tempelet
+tempelets
+temperament
+temperamenta
+temperamentene
+temperamenter
+temperamentet
+temperamentets
+temperamentsfull
+temperamentsfulle
+temperatur
+temperaturen
+temperaturene
+temperaturens
+temperaturer
+temperaturstigning
+temperaturstigningen
+temperaturstigningens
+temperaturvariasjon
+temperaturvariasjonen
+temperaturvariasjonene
+temperaturvariasjonens
+temperaturvariasjoner
+temperer
+temperere
+tempererer
+temperert
+tempererte
+tempi
+tempiene
+templa
+templene
+templer
+templet
+templets
+tempo
+tempoa
+tempoene
+tempoer
+tempoet
+tempoets
+tempoplan
+tempora
+temporaene
+temporær
+temporære
+temporært
+tempus
+tempusene
+tempuset
+tempusets
+tåen
+tendens
+tendensen
+tendensene
+tendensens
+tendenser
+tendensiøs
+tendensiøse
+tendensiøst
+tender
+tendere
+tenderer
+tendert
+tenderte
+tenger
+tenk
+tenke
+tenkelig
+tenkelige
+tenkende
+tenker
+tenkes
+tenkesett
+tenkesettet
+tenkesettets
+tenking
+tenkinga
+tenkingen
+tenkingens
+tenkning
+tenkningen
+tenkningens
+tenksom
+tenksomme
+tenksomt
+tenkt
+tenkte
+tenne
+tennene
+tenner
+tennere
+tenneren
+tennerens
+tenneres
+tennerne
+tennernes
+tennerskjærende
+tennes
+tenning
+tenninga
+tenningen
+tenningens
+tennis
+tennisbane
+tennisbanen
+tennisbanene
+tennisbanens
+tennisbaner
+tennisen
+tennisens
+tennisforbund
+tennplugg
+tennpluggen
+tennpluggene
+tennpluggens
+tennplugger
+tenor
+tenoren
+tenorene
+tenorens
+tenorer
+tenåring
+tenåringen
+tenåringene
+tenåringens
+tenåringer
+tent
+tentamen
+tentamenen
+tentamenene
+tentamenens
+tentamener
+tente
+teolog
+teologen
+teologene
+teologens
+teologer
+teologi
+teologien
+teologiens
+teologisk
+teologiske
+teorem
+teoremet
+teoremets
+teoretisk
+teoretiske
+teori
+teorien
+teoriene
+teoriens
+teorier
+teosof
+teosofen
+teosofene
+teosofens
+teosofer
+teosofi
+teosofien
+teosofiens
+teppe
+teppene
+tepper
+teppet
+ter
+terapeut
+terapeuten
+terapeutene
+terapeutens
+terapeuter
+terapeutisk
+terapi
+terapien
+terapiene
+terapiens
+terapier
+terbium
+terbiumet
+terbiumets
+terge
+terget
+term
+terme
+termen
+termens
+termer
+termin
+terminal
+terminalen
+terminalene
+terminalens
+terminaler
+terminen
+terminene
+terminens
+terminer
+termini
+terminolog
+terminologen
+terminologene
+terminologens
+terminologer
+terminologi
+terminologien
+terminologiene
+terminologiens
+terminologier
+terminologisk
+terminologiske
+terminus
+terminusen
+terminusens
+termisk
+termiske
+termitt
+termitten
+termittene
+termittens
+termitter
+termometer
+termometeret
+termometerets
+termometra
+termometre
+termometrene
+termometret
+termometrets
+termoplastisk
+termos
+termosen
+termosene
+termosens
+termoser
+termosflaska
+termosflaske
+termosflasken
+termosflaskens
+termostat
+termostaten
+termostatene
+termostatens
+termostater
+termostatstyrt
+termostatstyrte
+terne
+ternet
+ternete
+terning
+terningen
+terningene
+terningens
+terninger
+terningkast
+terningkastet
+terningkastets
+terpe
+terpentin
+terpentinen
+terpentinens
+terpet
+terrakotta
+terrakottaen
+terrakottaene
+terrakottaens
+terrakottaer
+terramycin
+terramycinet
+terramycinets
+terrasse
+terrassen
+terrassens
+terreng
+terrenga
+terrengene
+terrenger
+terrenget
+terrengets
+terrengløp
+terrengløpet
+terrengløpets
+terrier
+terriere
+terrieren
+terrierens
+terrieres
+terrierne
+terriernes
+terrin
+terrinen
+terrinene
+terrinens
+terriner
+territoria
+territorial
+territoriale
+territorialfarvann
+territorialgrense
+territoriene
+territorier
+territoriet
+territoriets
+territorium
+terror
+terroren
+terrorens
+terrorisere
+terroriserer
+terrorisert
+terroriserte
+terrorist
+terroristen
+terroristene
+terroristens
+terrorister
+ters
+tersett
+tersetten
+tersettens
+terskel
+terskelen
+terskelens
+tersklene
+terskler
+terta
+terte
+tertefin
+tertene
+terter
+tertet
+tertial
+tertiær
+tertiære
+tertiært
+tertit
+tertiten
+tertitene
+tertitens
+tertiter
+tese
+tesen
+tesens
+teser
+tess
+test
+testa
+testament
+testamente
+testamentere
+testamenterer
+testamentert
+testamenterte
+testamentet
+teste
+testen
+testens
+tester
+testet
+testikkel
+testikkelen
+testikkelens
+testiklene
+testikler
+testimoniet
+testimonium
+testing
+testinga
+testingen
+testingens
+tet
+åtet
+teten
+tetna
+tetne
+tetner
+tetnet
+tetraeder
+tetraederet
+tetraederets
+tetraedre
+tetraedrene
+tetraedret
+tetraedrets
+tett
+tettbebyggelse
+tettbebyggelsen
+tettbebyggelsens
+tettbygd
+tette
+tettere
+tettest
+tettgrend
+tettgrenda
+tettgrendt
+tetthet
+tettheten
+tetthetens
+tetthets
+tettpakkede
+tettpakket
+tettsted
+tettsteda
+tettstedene
+tettsteder
+tettstedet
+tettstedets
+teutoner
+teutonere
+teutoneren
+teutonerens
+teutoneres
+teutonerne
+teutonernes
+teutonsk
+tevla
+tevle
+tevlefør
+tevlet
+tevling
+tevlinga
+tevlingen
+tevlingens
+åtferd
+åtferda
+åtferden
+åtferdene
+åtferdens
+åtferder
+tøff
+tøffa
+tøffe
+tøffel
+tøffelen
+tøffelens
+tøffelhelt
+tøffelhelten
+tøffelheltene
+tøffelheltens
+tøffelhelter
+tøffer
+tøffere
+tøffet
+tøfla
+tøfle
+tøflene
+tøfler
+tøflet
+tøft
+tåg
+tåga
+tågen
+tågene
+tågens
+tåger
+tæger
+tågjenger
+tågjengere
+tågjengeren
+tågjengerens
+tågjengeres
+tågjengerne
+tågjengernes
+åtgjerd
+åtgjerda
+åtgjerdene
+åtgjerder
+thailandsk
+thailending
+thailendingen
+thailendingene
+thailendingens
+thailendinger
+thaisilke
+thaisilken
+thaisilkens
+thallium
+thalliumet
+thalliumets
+theol
+tåhette
+thorium
+thulium
+thuliumet
+thuliumets
+ti
+tiara
+tiaraen
+tiaraene
+tiaraens
+tiaraer
+tibetaner
+tibetanere
+tibetaneren
+tibetanerens
+tibetaneres
+tibetanerne
+tibetanernes
+tibetansk
+tid
+tida
+tidbolk
+tidbolken
+tidbolkene
+tidbolkens
+tidbolker
+tidd
+tidde
+tide
+tidehverv
+tidel
+tidelen
+tidelens
+tideler
+tiden
+tidende
+tidenden
+tidendens
+tidene
+tidenes
+tidens
+tider
+tiders
+tidevann
+tidevannet
+tidevannets
+tideverv
+tidevervet
+tidevervets
+tidfesta
+tidfeste
+tidfestet
+tidhøvelig
+tidkrevende
+tidl
+tidlig
+tidlige
+tidligere
+tidligst
+tidligste
+tidløs
+tidløse
+tidløst
+tids
+tidsaktuelt
+tidsalder
+tidsalderen
+tidsalderens
+tidsaldrene
+tidsavhengige
+tidsfaktor
+tidsfaktoren
+tidsfaktorene
+tidsfaktorens
+tidsfaktorer
+tidsfordriv
+tidsfordrivet
+tidsfordrivets
+tidsfrist
+tidsfristen
+tidsfristene
+tidsfristens
+tidsfrister
+tidsintervall
+tidsintervallene
+tidsintervaller
+tidsintervallet
+tidsintervallets
+tidskonjunksjon
+tidskonjunksjonen
+tidskonjunksjonene
+tidskonjunksjonens
+tidskonjunksjoner
+tidsmessig
+tidsmessige
+tidsnød
+tidsnok
+tidspunkt
+tidspunkta
+tidspunktene
+tidspunkter
+tidspunktet
+tidspunktets
+tidsregning
+tidsregninga
+tidsregningen
+tidsregningens
+tidsrom
+tidsrommene
+tidsrommet
+tidsrommets
+tidsskifte
+tidsskiftet
+tidsskrift
+tidsskrifta
+tidsskriftene
+tidsskrifter
+tidsskriftet
+tidsskriftets
+tidsspille
+tidsspillet
+tidsspørsmål
+tidsspørsmålet
+tidsspørsmålets
+tidt
+tidtrøyte
+tidvatn
+tidvatnet
+tidvatnets
+tie
+tien
+tiende
+tiendedel
+tiendedelen
+tiendedelene
+tiendedelens
+tiendedeler
+tienden
+tiendens
+tier
+tiere
+tieren
+tierens
+tieres
+tierne
+tiernes
+tifold
+tigd
+tigde
+tiger
+tigeren
+tigerens
+tigge
+tigger
+tiggere
+tiggeren
+tiggerens
+tiggeres
+tiggermunk
+tiggermunken
+tiggermunkene
+tiggermunkens
+tiggermunker
+tiggerne
+tiggernes
+tigget
+tigrene
+tigrer
+tika
+tikk
+tikka
+tikke
+tikker
+tikket
+tikrone
+tikronen
+tikronene
+tikronens
+tikroner
+tikroning
+tikroningen
+tikroningens
+til
+tilba
+tilbad
+tilbake
+tilbakebetale
+tilbakebetales
+tilbakebetaling
+tilbakebetalinga
+tilbakebetalingen
+tilbakebetalingens
+tilbakeblikk
+tilbakeblikket
+tilbakeblikkets
+tilbakefall
+tilbakefallet
+tilbakefallets
+tilbakeføring
+tilbakeføringa
+tilbakeføringen
+tilbakeføringens
+tilbakeføringer
+tilbakegang
+tilbakegangen
+tilbakegangens
+tilbakeholde
+tilbakeholden
+tilbakeholdende
+tilbakeholdenhet
+tilbakeholdenheten
+tilbakeholdenhetens
+tilbakeholdt
+tilbakekalle
+tilbakekomst
+tilbakekomsten
+tilbakekomstens
+tilbakela
+tilbakelagt
+tilbakelegge
+tilbakelegger
+tilbakelevering
+tilbakeleveringa
+tilbakeleveringen
+tilbakeleveringens
+tilbakereise
+tilbakereisen
+tilbakereisens
+tilbakeskritt
+tilbakeskrittet
+tilbakeskrittets
+tilbakeslag
+tilbakeslaget
+tilbakeslagets
+tilbakestående
+tilbaketog
+tilbaketoget
+tilbaketogets
+tilbaketrekking
+tilbaketrekkinga
+tilbaketrekkingen
+tilbaketrekkingens
+tilbaketrekning
+tilbaketrekningen
+tilbaketrekningens
+tilbaketrukket
+tilbakeveg
+tilbakevegen
+tilbakevegens
+tilbakevei
+tilbakeveien
+tilbakeveiens
+tilbakevendende
+tilbakevirkende
+tilbakevise
+tilbakeviser
+tilbød
+tilbe
+tilbeder
+tilbedere
+tilbederen
+tilbederens
+tilbederes
+tilbederne
+tilbedernes
+tilbedt
+tilbehør
+tilbehøret
+tilbehørets
+tilber
+tilberede
+tilbereder
+tilberedt
+tilberedte
+tilblivelse
+tilblivelsen
+tilblivelsens
+tilbrakt
+tilbrakte
+tilbringe
+tilbringer
+tilbringertjeneste
+tilbringes
+tilbørlig
+tilbud
+tilbudene
+tilbudet
+tilbudt
+tilby
+tilbydd
+tilbydde
+tilbøyelig
+tilbøyelige
+tilbøyelighet
+tilbøyeligheten
+tilbøyelighetene
+tilbøyelighetens
+tilbøyeligheter
+tilbygg
+tilbygget
+tilbyggets
+tilbyr
+tilbys
+tilde
+tildel
+tildele
+tildeler
+tildeles
+tildeling
+tildelinga
+tildelingen
+tildelt
+tildelte
+tildragelsen
+tildragelsens
+tilegna
+tilegne
+tilegnelse
+tilegnelsen
+tilegnelsens
+tilegner
+tilegnet
+tilfalle
+tilfaller
+tilfalt
+tilfang
+tilfanget
+tilfangets
+tilfaret
+tilfeldig
+tilfeldige
+tilfeldighet
+tilfeldigheten
+tilfeldighetene
+tilfeldighetens
+tilfeldigheter
+tilfeldigvis
+tilfelle
+tilfellene
+tilfeller
+tilfellers
+tilfellet
+tilflukt
+tilflukta
+tilflukten
+tilfluktens
+tilfluktsted
+tilfluktstedene
+tilfluktstedet
+tilfluktstedets
+tilflytning
+tilflytningen
+tilflytningens
+tilflytting
+tilflyttingen
+tilflyttingens
+tilforlatelig
+tilføre
+tilfreds
+tilfredse
+tilfredshet
+tilfredsheten
+tilfredshetens
+tilfredsstille
+tilfredsstillelse
+tilfredsstillelsen
+tilfredsstillelsens
+tilfredsstillende
+tilfredsstiller
+tilfredsstilles
+tilfredsstilt
+tilfredsstilte
+tilfører
+tilføres
+tilfrosne
+tilfrosset
+tilførsel
+tilførselen
+tilførselens
+tilførsle
+tilførsler
+tilført
+tilføy
+tilføyd
+tilføyde
+tilføye
+tilføyelse
+tilføyelsen
+tilføyelsens
+tilføyer
+tilføyes
+tilføying
+tilføyinga
+tilføyingen
+tilføyingens
+tilgang
+tilgangen
+tilgav
+tilgi
+tilgift
+tilgifta
+tilgiften
+tilgiftene
+tilgiftens
+tilgifter
+tilgir
+tilgitt
+tilgitte
+tilgivelig
+tilgivelse
+tilgivelsen
+tilgivelsens
+tilgiving
+tilgivinga
+tilgivingen
+tilgivingene
+tilgivingens
+tilgivinger
+tilgjengelig
+tilgjengelige
+tilgjengelighet
+tilgjengeligheten
+tilgjengelighetens
+tilgjort
+tilgodehavende
+tilgodehavendet
+tilgodese
+tilgodesett
+tilgrensende
+tilgrisa
+tilgriset
+tilgrising
+tilgrisinga
+tilgrisingen
+tilgrisingens
+tilgrodd
+tilheng
+tilhenger
+tilhengere
+tilhengeren
+tilhengerens
+tilhengeres
+tilhengerne
+tilhengernes
+tilhold
+tilholde
+tilholdet
+tilholdssted
+tilholdssteder
+tilholdsstedet
+tilholdsstedets
+tilhøre
+tilhørende
+tilhører
+tilhørere
+tilhøreren
+tilhørerens
+tilhøreres
+tilhørerne
+tilhørernes
+tilhørt
+tilhørte
+tilintetgjorde
+tilintetgjort
+tilintetgjør
+tilintetgjøre
+tilintetgjørelse
+tilintetgjørelsen
+tilintetgjørelsens
+tilising
+tilisinga
+tilisingen
+tilisingens
+tilja
+tilje
+tiljen
+tiljene
+tiljens
+tiljer
+tiljuble
+tiljubler
+tiljublet
+tilkalle
+tilkaller
+tilkalles
+tilkalt
+tilkalte
+tilkjempe
+tilkjemper
+tilkjempet
+tilkjenne
+tilkjennegav
+tilkjennegi
+tilkjennegir
+tilkjennegitt
+tilkjennelsen
+tilkjennelsens
+tilkjenner
+tilkjennes
+tilkjent
+tilkjente
+tilklint
+tilknappa
+tilknappet
+tilknytning
+tilknytningen
+tilknytningene
+tilknytningens
+tilknytninger
+tilknytt
+tilknytte
+tilknyttet
+tilkoble
+tilkobles
+tilkoblet
+tilkobling
+tilkoblinga
+tilkoblingen
+tilkoblingene
+tilkoblingens
+tilkoblinger
+tilkom
+tilkomme
+tilkommende
+tilkommer
+tilkommet
+tilkomst
+tilkomsten
+tilkomstens
+tilkomster
+tilkople
+tilkoplet
+tilkopling
+tilkoplinga
+tilkoplingen
+tilkoplingens
+tilkorking
+tilkorkinga
+tilkorkingen
+tilkorkingene
+tilkorkingens
+tilkorkinger
+tilkortkomming
+tilkortkomminga
+tilkortkommingen
+tilkortkommingens
+tilla
+tillagt
+tillat
+tillate
+tillatelig
+tillatelse
+tillatelsen
+tillatelsens
+tillater
+tillates
+tillatt
+tillatte
+tillegg
+tillegge
+tillegger
+tillegges
+tillegget
+tilleggsavgift
+tilleggsavgifta
+tilleggsavgiften
+tilleggsavgiftene
+tilleggsavgiftens
+tilleggsavgifter
+tilleggsbevilgning
+tilleggsbevilgningen
+tilleggsbevilgningene
+tilleggsbevilgningens
+tilleggsbevilgninger
+tilleggsinformasjon
+tilleggsinformasjonen
+tilleggsinformasjonene
+tilleggsinformasjonens
+tilleggsinformasjoner
+tilleggsjord
+tilleggsjorda
+tilleggsjorden
+tilleggsjordens
+tilleggsleksikon
+tilleggsleksikonen
+tilleggsleksikonens
+tilleggslån
+tilleggslånet
+tilleggslånets
+tilleggsopplysning
+tilleggsopplysningen
+tilleggsopplysningene
+tilleggsopplysningens
+tilleggsopplysninger
+tilleggsspørsmål
+tilleggsspørsmålet
+tilleggsspørsmålets
+tilleggsstraff
+tilleggsstraffa
+tilleggsstraffen
+tilleggsstraffens
+tilleggsutdanning
+tilleggsutdanninga
+tilleggsutdanningen
+tilleggsutdanningens
+tilleggsverdi
+tilleggsverdien
+tilleggsverdiens
+tillempa
+tillempe
+tillemper
+tillempet
+tillemping
+tillempinga
+tillempingen
+tillempingens
+tillempinger
+tillempning
+tillempningen
+tillempningens
+tilligge
+tilligger
+tilligget
+tillikemed
+tillit
+tilliten
+tillitens
+tillitsforhold
+tillitsforholdet
+tillitsforholdets
+tillitsfull
+tillitsfulle
+tillitsfullt
+tillitskrise
+tillitskrisen
+tillitskrisens
+tillitskvinna
+tillitskvinne
+tillitskvinnen
+tillitskvinnene
+tillitskvinnens
+tillitskvinner
+tillitsmann
+tillitsmannen
+tillitsmannens
+tillitsmenn
+tillitsmennene
+tillitsmennenes
+tillitsmenns
+tillitsombud
+tillitsombudet
+tillitsombudets
+tillitsverv
+tillitsverva
+tillitsvervene
+tillitsvervet
+tillitsvervets
+tillitvekkende
+tillokkende
+tillot
+tilløp
+tilløpa
+tilløpene
+tilløpet
+tillært
+tillukka
+tillukkede
+tillukket
+tillyse
+tillyser
+tillysing
+tillysinga
+tillysingen
+tillyst
+tillyste
+tilmed
+tilmålt
+tilnavn
+tilnavna
+tilnavnene
+tilnavnet
+tilnavnets
+tilnærme
+tilnærmelse
+tilnærmelsen
+tilnærmelsene
+tilnærmelsens
+tilnærmelser
+tilnærmet
+tilnærming
+tilnærminga
+tilnærmingen
+tilnærmingens
+tilpasning
+tilpasningen
+tilpasningene
+tilpasningens
+tilpasninger
+tilpasningsevne
+tilpasningsevnen
+tilpasningsevnens
+tilpasningsvanske
+tilpasningsvansken
+tilpasningsvanskene
+tilpasningsvanskens
+tilpasningsvansker
+tilpassa
+tilpasse
+tilpassende
+tilpasser
+tilpasses
+tilpasset
+tilpassing
+tilpassinga
+tilpassingen
+tilpassingens
+tilrå
+tilrakking
+tilrakkinga
+tilrane
+tilraner
+tilrådd
+tilrådde
+tilråde
+tilrådelig
+tilråding
+tilrådinga
+tilrådingen
+tilrådingene
+tilrådingens
+tilrådinger
+tilredt
+tilregnelig
+tilreisende
+tilreknelig
+tilrettela
+tilrettelagt
+tilrettelegge
+tilrettelegges
+tilrettelegging
+tilrettelegginga
+tilretteleggingen
+tilretteleggingens
+tilrevet
+tilrive
+tilriver
+tilrop
+tilropa
+tilropene
+tilropet
+tilrår
+tilårskommen
+tilårskommet
+tilårskomne
+tilsa
+tilsagn
+tilsagnet
+tilsagt
+tilsatt
+tilsatte
+tilsådd
+tilsendt
+tilsendte
+tilsetning
+tilsetninga
+tilsetningen
+tilsetningene
+tilsetninger
+tilsett
+tilsette
+tilsettende
+tilsetter
+tilsettes
+tilsetting
+tilsettinga
+tilsettingen
+tilsettingens
+tilsi
+tilsidesatt
+tilsidesatte
+tilsidesette
+tilsidesettelse
+tilsidesettelsen
+tilsidesettelsens
+tilsidesetter
+tilsidesetting
+tilsidesettinga
+tilsidesettingen
+tilsidesettingens
+tilsier
+tilsies
+tilsig
+tilsigelse
+tilsigelsen
+tilsigelsens
+tilsiget
+tilsiing
+tilsiinga
+tilsiingen
+tilsiingens
+tilsikte
+tilsiktet
+tilskadekommen
+tilskadekommet
+tilskadekomne
+tilskikkelsen
+tilskikkelsens
+tilskiping
+tilskipinga
+tilskipingen
+tilskipingens
+tilskjærer
+tilskjærere
+tilskjæreren
+tilskjærerens
+tilskjæreres
+tilskjærerne
+tilskjærernes
+tilskott
+tilskotta
+tilskottene
+tilskottet
+tilskottets
+tilskottsordning
+tilskottsordninga
+tilskottsordningen
+tilskottsordningene
+tilskottsordningens
+tilskottsordninger
+tilskrives
+tilskudd
+tilskuddene
+tilskuddet
+tilskuddsordning
+tilskuddsordningen
+tilskuddsordningene
+tilskuddsordningens
+tilskuddsordninger
+tilskuer
+tilskuere
+tilskueren
+tilskuerens
+tilskueres
+tilskuerne
+tilskuernes
+tilskvetting
+tilskvettinga
+tilskvettingen
+tilskvettingens
+tilskyende
+tilskynde
+tilskyndelse
+tilskyndelsen
+tilskyndelsens
+tilskyndet
+tilskyndt
+tilskyndte
+tilslag
+tilslaga
+tilslagene
+tilslaget
+tilslagets
+tilsløre
+tilslører
+tilslørt
+tilslørte
+tilsølt
+tilslutning
+tilslutningen
+tilslutningens
+tilslutninger
+tilslutte
+tilsluttede
+tilsluttet
+tilsmurt
+tilsnakk
+tilsnakke
+tilsnakkelse
+tilsnakkelsen
+tilsnakkelsens
+tilsnakket
+tilsnødd
+tilsnikelse
+tilsnikelsen
+tilsnikelsene
+tilsnikelsens
+tilsnikelser
+tilsnitt
+tilsnittet
+tilsoting
+tilsotinga
+tilsotingen
+tilsotingens
+tilspisse
+tilspisset
+tilspissing
+tilspissinga
+tilspissingen
+tilspissingens
+tilsprang
+tilspranget
+tilsprangets
+tilstå
+tilstand
+tilstanden
+tilstandene
+tilstander
+tilstedelig
+tilstedeværende
+tilstedte
+tilstelling
+tilstellinga
+tilstellingen
+tilstellingene
+tilstellingens
+tilstellinger
+tilstelning
+tilstelningen
+tilstelningene
+tilstelningens
+tilstelninger
+tilståelse
+tilståelsen
+tilståelsens
+tilståing
+tilståinga
+tilståingen
+tilståingene
+tilståingens
+tilståinger
+tilstod
+tilstoppelse
+tilstoppelsen
+tilstoppelsens
+tilstopping
+tilstoppinga
+tilstoppingen
+tilstoppingens
+tilstramming
+tilstramminga
+tilstrammingen
+tilstrammingene
+tilstrammingens
+tilstramminger
+tilstramning
+tilstramningen
+tilstramningene
+tilstramningens
+tilstramninger
+tilstreba
+tilstrebe
+tilstreber
+tilstrebet
+tilstrekkelig
+tilstrekkelige
+tilstrømming
+tilstrømminga
+tilstrømmingen
+tilstrømmingens
+tilstrømning
+tilstrømningen
+tilstrømningens
+tilstøte
+tilstøtende
+tilstått
+tilstøtt
+tilstøtte
+tilstundende
+tilstøva
+tilstøvet
+tilstøyte
+tilsvar
+tilsvara
+tilsvare
+tilsvarende
+tilsvarer
+tilsvaret
+tilsvart
+tilsvarte
+tilsyn
+tilsynelatende
+tilsynet
+tilsynets
+tilsynslærer
+tilsynslærere
+tilsynslæreren
+tilsynslærerens
+tilsynslæreres
+tilsynslærerne
+tilsynslærernes
+tilsynsmann
+tilsynsmannen
+tilsynsmannens
+tilsynsmenn
+tilsynsmennene
+tilsynsmennenes
+tilsynsmenns
+tilta
+tiltak
+tiltaka
+tiltakende
+tiltakene
+tiltaket
+tiltakets
+tiltakslyst
+tiltakslysta
+tiltakslysten
+tiltakslystens
+tiltaksnemnda
+tiltaksom
+tiltale
+tiltalen
+tiltalende
+tiltalens
+tiltaler
+tiltales
+tiltalt
+tiltalte
+tiltaltes
+tiltar
+tiltenkt
+tiltenkte
+tiltjukning
+tiltjukninga
+tiltjukningen
+tiltjukningens
+tiltrakk
+tiltrådt
+tiltrådte
+tiltre
+tiltrede
+tiltredelse
+tiltredelsen
+tiltredelsens
+tiltredelseserklæring
+tiltredelseserklæringa
+tiltredelseserklæringen
+tiltredelseserklæringens
+tiltrekke
+tiltrekkende
+tiltrekker
+tiltrekkes
+tiltrekning
+tiltrekningen
+tiltrekningens
+tiltrengt
+tiltrengte
+tiltrer
+tiltres
+tiltro
+tiltroa
+tiltrodd
+tiltrodde
+tiltroen
+tiltror
+tiltru
+tiltrua
+tiltrudd
+tiltrudde
+tiltrukket
+tiltrur
+tiltuske
+tiltvang
+tiltvinge
+tiltvinger
+tiltvunget
+tiltykning
+tiltykningen
+tiltykningens
+tilvalg
+tilvalget
+tilvalgsfag
+tilvant
+tilvante
+tilveiebringelse
+tilveiebringelsen
+tilveiebringelsens
+tilvekst
+tilveksten
+tilvekstene
+tilvekstens
+tilvekster
+tilvenning
+tilvenninga
+tilvenningen
+tilvenningens
+tilvirka
+tilvirke
+tilvirkende
+tilvirker
+tilvirkere
+tilvirkeren
+tilvirkerens
+tilvirkeres
+tilvirkerne
+tilvirkernes
+tilvirket
+tilvirking
+tilvirkinga
+tilvirkingen
+tilvirkingens
+tilvirkning
+tilvirkningen
+tilvirkningene
+tilvirkningens
+tilvirkninger
+tilvirkningskost
+tilvising
+tilvisinga
+tilvisingen
+tilvisingene
+tilvisingens
+tilvisinger
+tilvær
+tilvære
+tilværelse
+tilværelsen
+tilværelsens
+tilværet
+time
+timebetaling
+timebetalinga
+timebetalingen
+timebetalingens
+timeglas
+timeglasa
+timeglasene
+timeglaset
+timeglasets
+timeglass
+timeglassene
+timeglasset
+timeglassets
+timelange
+timelangt
+timelig
+timelønn
+timelønna
+timelønnen
+timelønnens
+timen
+timene
+timeplan
+timeplanen
+timeplanene
+timeplanens
+timeplaner
+timer
+timers
+times
+timetabell
+timetabellen
+timetabellene
+timetabellens
+timetabeller
+timeverk
+timeverkene
+timeverket
+timeverkets
+timian
+timianen
+timianene
+timianens
+timianer
+timinga
+timotei
+timoteien
+timoteiens
+tina
+tind
+tinda
+tinde
+tindebestiger
+tindebestigere
+tindebestigeren
+tindebestigerens
+tindebestigeres
+tindebestigerne
+tindebestigernes
+tinden
+tindens
+tinder
+tindet
+tindra
+tindre
+tindrende
+tindrer
+tindret
+tine
+tiner
+tinet
+ting
+tinga
+tinge
+tingen
+tingene
+tingenes
+tingens
+tinger
+tingeren
+tingerens
+tingest
+tingesten
+tingestene
+tingestens
+tingester
+tinget
+tinging
+tinginga
+tingingen
+tingingens
+tingingsmann
+tingingsmannen
+tingingsmannens
+tingingsmenn
+tingingsmennene
+tingingsmennenes
+tingingsmenns
+tinglese
+tinglest
+tingleste
+tinglyse
+tinglyser
+tinglysing
+tinglysinga
+tinglysingen
+tinglysingene
+tinglysingens
+tinglysinger
+tinglyst
+tinglyste
+tings
+tingsvitne
+tingsvitnene
+tingsvitner
+tingsvitnet
+tinkla
+tinkle
+tinkler
+tinklet
+tinktur
+tinkturen
+tinkturene
+tinkturens
+tinkturer
+tinn
+tinnet
+tinnets
+tinnfolie
+tinnfolien
+tinnfoliens
+tinning
+tinningen
+tinningens
+tiosulfat
+tipla
+tiple
+tipler
+tiplet
+tipp
+tippe
+tippemidler
+tippen
+tippens
+tippet
+tipping
+tippinga
+tippingen
+tippingens
+tippoldefar
+tippoldefaren
+tippoldefarens
+tippoldemor
+tippoldemora
+tippoldemoren
+tippoldemorens
+tippvogn
+tippvogna
+tippvognen
+tippvognene
+tippvognens
+tippvogner
+tips
+tipse
+tipset
+tiår
+tirade
+tiraden
+tiradens
+tiraljør
+tiraljøren
+tiraljørene
+tiraljørens
+tiraljører
+tiøre
+tiøren
+tiårene
+tiørens
+tiåret
+tiårets
+tiriltunga
+tiriltunge
+tiriltungen
+tiriltungens
+tiøring
+tiøringen
+tiøringene
+tiøringens
+tiøringer
+tirra
+tirre
+tirrer
+tirret
+tirsdag
+tirsdagen
+tirsdagene
+tirsdagens
+tirsdager
+tiska
+tiske
+tisker
+tisket
+tispa
+tispe
+tispen
+tispens
+tissa
+tisse
+tisser
+tisset
+tistel
+tistelen
+tistelens
+tistlene
+tistler
+tit
+titan
+titanene
+titaner
+titanet
+titanets
+titen
+titens
+titing
+titingen
+titingene
+titingens
+titinger
+titler
+titra
+titre
+titrer
+titrere
+titrerer
+titrert
+titrerte
+titret
+titt
+titta
+titte
+tittel
+tittelen
+tittelens
+titten
+tittens
+titter
+tittet
+titulatur
+titulaturen
+titulaturene
+titulaturens
+titulaturer
+tituler
+titulere
+titulerer
+titulert
+titulerte
+titulær
+titulært
+titusener
+tiur
+tiuren
+tiurene
+tiurens
+tiurer
+tiurleik
+tiurleiken
+tiurleikens
+tja
+tjafs
+tjafsen
+tjafsene
+tjafsens
+tjafser
+tjafset
+tjafsete
+tjau
+tjauet
+tjauets
+tjeld
+tjelda
+tjelde
+tjelden
+tjeldens
+tjelder
+tjeldet
+tjen
+tjene
+tjener
+tjenere
+tjeneren
+tjenerens
+tjeneres
+tjenerne
+tjenernes
+tjeneste
+tjenestedyktig
+tjenestegjorde
+tjenestegjort
+tjenestegjør
+tjenestegjøre
+tjenestegjørende
+tjenestejenta
+tjenestejente
+tjenestejentene
+tjenestejenter
+tjenestemann
+tjenestemannen
+tjenestemannens
+tjenestemenn
+tjenestemennene
+tjenestemennenes
+tjenestemenns
+tjenesten
+tjenestene
+tjenestens
+tjenester
+tjenestetid
+tjenestetida
+tjenestetiden
+tjenestetidens
+tjenesteveg
+tjenestevei
+tjenestevillig
+tjenestvillig
+tjenlig
+tjenlige
+tjenstevillig
+tjenstlig
+tjenstvillig
+tjent
+tjente
+tjern
+tjerna
+tjernene
+tjerner
+tjernet
+tjernets
+tjåk
+tjåka
+tjåke
+tjåker
+tjåket
+tjon
+tjona
+tjoner
+tjont
+tjonte
+tjor
+tjora
+tjore
+tjorer
+tjoret
+tjort
+tjorte
+tjæra
+tjære
+tjærebre
+tjæret
+tjørn
+tjørna
+tjørnene
+tjørner
+tjørnet
+tjørnets
+tjuagutt
+tjuagutten
+tjuaguttene
+tjuaguttens
+tjuagutter
+tjue
+tjuedel
+tjuedelen
+tjuedelens
+tjueen
+tjueførste
+tjuende
+tjug
+tjuge
+tjuget
+tjukk
+tjukke
+tjukkelse
+tjukkelsen
+tjukkelsens
+tjukna
+tjukne
+tjukner
+tjuknet
+tjukt
+tjuv
+tjuvaktig
+tjuve
+tjuvegods
+tjuvegodset
+tjuvegodsets
+tjuven
+tjuvene
+tjuver
+tjuveri
+tjuveria
+tjuveriene
+tjuverier
+tjuveriet
+tjuveriets
+tjuvfiske
+tjuvfisket
+tjuvgods
+tjuvgodset
+tjuvgodsets
+tjuvjo
+tjuvjoen
+tjuvjoens
+tjuvstart
+tjuvstarta
+tjuvstarte
+tjuvstartet
+tåka
+tåke
+tåkebanke
+tåkebanken
+tåkebankene
+tåkebankens
+tåkebanker
+tåken
+tåkens
+tåket
+tåkete
+tål
+tæl
+tåle
+tålelig
+tåler
+tåles
+tålet
+tlf
+tålig
+ætling
+ætlingen
+ætlingene
+ætlingens
+ætlinger
+tålmod
+tålmodet
+tålmodets
+tålmodig
+tålmodige
+tålmodighet
+tålmodigheten
+tålmodighetens
+tølper
+tølpere
+tølperen
+tølperens
+tølperes
+tølperne
+tølpernes
+tåls
+tålsom
+tålt
+tålte
+tøm
+tømmen
+tømmene
+tømmens
+tømmer
+tømmeret
+tømmerets
+tømmerfløter
+tømmerfløtere
+tømmerfløteren
+tømmerfløterens
+tømmerfløteres
+tømmerfløterne
+tømmerfløternes
+tømmerfløyter
+tømmerfløytere
+tømmerfløyteren
+tømmerfløyterens
+tømmerfløyteres
+tømmerfløyterne
+tømmerfløyternes
+tømmerhogger
+tømmerhoggere
+tømmerhoggeren
+tømmerhoggerens
+tømmerhoggeres
+tømmerhoggerne
+tømmerhoggernes
+tømmerhogst
+tømmerhogsten
+tømmerhogstens
+tømmerhugger
+tømmerhuggere
+tømmerhuggeren
+tømmerhuggerens
+tømmerhuggeres
+tømmerhuggerne
+tømmerhuggernes
+tømmerhugst
+tømmerhugsten
+tømmerhugstens
+tømmermann
+tømmermannen
+tømmermannens
+tømmermenn
+tømmermennene
+tømmermennenes
+tømmermenns
+tømmermerking
+tømmermerkingen
+tømmermerkingens
+tømmervelte
+tømmervelter
+tømmerveltet
+tømra
+tømre
+tømrer
+tømret
+tømt
+tømte
+tønder
+tønderet
+tønderets
+tøndret
+tøndrets
+tåne
+tønna
+tønne
+tønnen
+tønnene
+tønnens
+tønner
+to
+toa
+toalett
+toaletta
+toalettene
+toaletter
+toalettet
+toalettets
+toarma
+toast
+toasten
+toastens
+toastmaster
+toastmastere
+toastmasteren
+toastmasterens
+toastmasteres
+toastmasterne
+toastmasternes
+tobakk
+tobakken
+tobakkene
+tobakkens
+tobakker
+tobakksavgift
+tobakksavgifta
+tobakksavgiften
+tobakksavgiftene
+tobakksavgiftens
+tobakksavgifter
+tobakksvare
+tobakksvaren
+tobakksvarene
+tobakksvarens
+tobakksvarer
+toddi
+toddien
+toddiene
+toddiens
+toddier
+todelt
+todelte
+toe
+toen
+toens
+toer
+toeren
+toerens
+toermede
+toermet
+toermete
+toet
+toetasjes
+toft
+tofte
+tofter
+tog
+toga
+togaen
+togaens
+toge
+togene
+toger
+toget
+togoleser
+togolesere
+togoleseren
+togoleserens
+togoleseres
+togoleserne
+togolesernes
+togolesisk
+togtrafikk
+togtrafikken
+togtrafikkens
+tok
+tokke
+tokken
+tokn
+tokna
+toksin
+toksiner
+toksinet
+toksinets
+tokt
+tokta
+tokten
+toktene
+toktens
+tokter
+toktet
+toktets
+toleranse
+toleransen
+toleransens
+tolerant
+tolerer
+tolerere
+tolererer
+tolerert
+tolererte
+tolk
+tolka
+tolke
+tolken
+tolkens
+tolker
+tolkes
+tolket
+tolking
+tolkinga
+tolkingen
+tolkingens
+tolkning
+tolkninga
+tolkningen
+tolkningene
+tolkningens
+tolkninger
+toll
+tolla
+tollbeskyttelse
+tollbeskyttelsen
+tollbeskyttelsens
+tollbu
+tollbua
+tolle
+tollekniv
+tollekniven
+tolleknivene
+tolleknivens
+tollekniver
+tollen
+tollens
+tollepinn
+tollepinnen
+tollepinnens
+toller
+tollere
+tolleren
+tollerens
+tolleres
+tollerne
+tollernes
+tollfrihet
+tollfriheten
+tollfrihetens
+tollkniv
+tollkniven
+tollknivene
+tollknivens
+tollkniver
+tollsats
+tollsatsen
+tollsatsene
+tollsatsens
+tollsatser
+tolltariff
+tolltariffen
+tolltariffens
+tolltariffer
+tollunion
+tollvern
+tollvernet
+tollvernets
+tolv
+tolvdel
+tolvdelen
+tolvdelens
+tolver
+tolvte
+tolvtedel
+tolvtedelen
+tolvtedelens
+tom
+tomahawk
+tomahawken
+tomahawkene
+tomahawkens
+tomahawker
+tomanns
+tomannsbolig
+tomannsboligen
+tomannsboligene
+tomannsboligens
+tomannsboliger
+tomasfosfat
+tomaster
+tomastere
+tomasteren
+tomasterens
+tomasteres
+tomasterne
+tomasternes
+tomat
+tomaten
+tomatene
+tomatens
+tomater
+tombola
+tombolaen
+tombolaene
+tombolaens
+tombolaer
+tomflaska
+tomflaske
+tomflasken
+tomflaskene
+tomflaskens
+tomflasker
+tomgang
+tomgangen
+tomgangens
+tomhendt
+tomlene
+tomler
+tomme
+tommel
+tommelen
+tommelens
+tommelfinger
+tommelfingeren
+tommelfingerens
+tommelfingrene
+tommelfingrer
+tommeltott
+tommeltotten
+tommeltottene
+tommeltottens
+tommeltotter
+tommen
+tommens
+tommer
+tommers
+tommestokk
+tommestokken
+tommestokkens
+tomreipes
+tomrom
+tomrommene
+tomrommet
+tomrommets
+tomset
+tomsete
+tomsing
+tomsingen
+tomsingene
+tomsingens
+tomsinger
+tomt
+tomta
+tomten
+tomtene
+tomtens
+tomteområde
+tomteområdene
+tomteområder
+tomteområdet
+tomteområdets
+tomtepolitikk
+tomtepris
+tomteprisen
+tomteprisene
+tomteprisens
+tomtepriser
+tomter
+tona
+tonal
+tonalitet
+tonaliteten
+tonalitetens
+tonalt
+tone
+toneangivende
+tonelaget
+tonen
+tonene
+toner
+tonestige
+tonestigen
+tonestigens
+tonet
+tonetrinn
+tonetrinnet
+tonetrinnets
+tonga
+tonganer
+tonganere
+tonganeren
+tonganerens
+tonganeres
+tonganerne
+tonganernes
+tonn
+tonnasje
+tonnasjen
+tonnasjens
+tonnet
+tonnets
+tonns
+tonsur
+tonsuren
+tonsurene
+tonsurens
+tonsurer
+topas
+topasen
+topasene
+topasens
+topaser
+topograf
+topografen
+topografene
+topografens
+topografer
+topografi
+topografien
+topografiene
+topografiens
+topografier
+topografisk
+topp
+toppa
+toppe
+toppen
+toppene
+toppens
+topper
+toppet
+toppfart
+toppfarten
+toppfartens
+toppmål
+toppmøte
+toppmøtet
+toppnavn
+toppnavnet
+toppnavnets
+topps
+toppscorer
+toppscorere
+toppscoreren
+toppscorerens
+toppscoreres
+toppscorerne
+toppscorernes
+toppsjikt
+toppsjiktet
+toppsjiktets
+toppstilling
+toppstillingen
+toppstillingene
+toppstillingens
+toppstillinger
+tora
+torde
+torden
+tordenen
+tordenens
+tordivel
+tordivelen
+tordivelens
+tordivlene
+tordivler
+tordna
+tordne
+tordner
+tordnet
+tore
+toreador
+toreadoren
+toreadorene
+toreadorens
+toreadorer
+torg
+torget
+torgets
+torgs
+torn
+tornado
+tornadoen
+tornadoene
+tornadoens
+tornadoer
+tornekrona
+tornekrone
+tornekronen
+tornekronens
+tornen
+tornene
+tornens
+torner
+tornet
+tornete
+torp
+torpedere
+torpedert
+torpederte
+torpedo
+torpedoen
+torpedoene
+torpedoens
+torpedoer
+torpene
+torsdag
+torsdagen
+torsdagene
+torsdagens
+torsdager
+torsjon
+torsjonen
+torsjonene
+torsjonens
+torsjoner
+torsk
+torskefisk
+torskefiske
+torskefisket
+torskemiddag
+torskemiddagen
+torskemiddagene
+torskemiddagens
+torskemiddager
+torsken
+torskene
+torskens
+torsker
+torso
+torsoen
+torsoene
+torsoens
+torsoer
+tort
+tortur
+torturen
+torturens
+torturer
+torturere
+torturerer
+torturert
+torturerte
+torturist
+torturisten
+torturistene
+torturistens
+torturister
+torv
+torva
+torve
+torvet
+torvmyr
+torvmyra
+torvmyrene
+torvstrø
+torvstrøet
+torvstrøets
+tosidig
+tosk
+tosken
+toskene
+toskens
+tosker
+tosket
+toskete
+tostavingsord
+tostavingsorda
+tostavingsordene
+tostavingsordet
+tostavingsordets
+total
+totalbehov
+totale
+totalisator
+totalisatoren
+totalisatorens
+totalist
+totalisten
+totalistene
+totalistens
+totalister
+totalitet
+totaliteten
+totalitetens
+totalitær
+totalitære
+totalitært
+totalkostnad
+totalkostnaden
+totalkostnadene
+totalkostnadens
+totalkostnader
+totalomsetning
+totalomsetningen
+totalomsetningens
+totalomsetting
+totalomsettinga
+totalomsettingen
+totalomsettingens
+totalramme
+totalrammen
+totalrammene
+totalrammens
+totalrammer
+totalskadd
+totalskadet
+totalt
+totalvekt
+totalvekten
+totalvektens
+totem
+totemet
+totemets
+totning
+totningen
+totningene
+totningens
+totninger
+tott
+totten
+tottene
+tottens
+totter
+touch
+touchen
+touchens
+tout
+tova
+tove
+toveis
+tovet
+toværelses
+tåpe
+tåpelig
+tåpen
+tåpene
+tåper
+trå
+trø
+tår
+tær
+tør
+trøa
+tåra
+trace
+tradisjon
+tradisjonell
+tradisjonelle
+tradisjonelt
+tradisjonen
+tradisjonene
+tradisjonens
+tradisjoner
+tradisjonsrike
+tradisjonsrikt
+traff
+trafikabel
+trafikabelt
+trafikable
+trafikal
+trafikale
+trafikalt
+trafikant
+trafikanten
+trafikantene
+trafikantens
+trafikanter
+trafikk
+trafikken
+trafikkens
+trafikkere
+trafikkerer
+trafikkert
+trafikkerte
+trafikkmessige
+trafikkpoliti
+trafikkpolitiet
+trafikkpolitiets
+trafikkreglene
+trafikkregler
+trafikksikkerhet
+trafikksikkerheten
+trafikksikkerhetens
+trafikksjef
+trafikksjefen
+trafikksjefene
+trafikksjefens
+trafikksjefer
+trafikkskilt
+trafikkskilta
+trafikkskiltene
+trafikkskiltet
+trafikkskiltets
+trafikkuhell
+trafikkulykke
+trafikkulykken
+trafikkulykkene
+trafikkulykkens
+trafikkulykker
+trafikkøy
+trafikkøya
+trafs
+trafset
+trafsete
+tragedie
+tragedien
+tragediene
+tragediens
+tragedier
+tragikomedie
+tragikomedien
+tragikomediens
+tragisk
+tragiske
+trailer
+trailere
+traileren
+trailerens
+traileres
+trailerne
+trailernes
+trakassere
+trakasserer
+trakasseri
+trakasseria
+trakasseriene
+trakasserier
+trakasseriet
+trakasseriets
+trakassert
+trakasserte
+trakk
+trakke
+trakket
+trakt
+trakta
+traktat
+traktaten
+traktatene
+traktatens
+traktater
+trakte
+traktekaffe
+traktekaffen
+traktekaffens
+traktement
+traktementa
+traktementene
+traktementer
+traktementet
+traktementets
+trakten
+traktene
+trakter
+traktere
+trakterer
+traktert
+trakterte
+traktet
+traktor
+traktoren
+traktorene
+traktorens
+traktorer
+trala
+trale
+tralen
+tralene
+tralens
+traler
+trall
+tralla
+tralle
+trallen
+trallens
+traller
+trallet
+tralt
+tralten
+traltens
+tram
+trammen
+trammene
+trammens
+trammer
+tramp
+trampa
+trampe
+trampen
+trampens
+tramper
+trampet
+trampoline
+trampolinen
+trampolinens
+tran
+trana
+tranen
+tranene
+tranens
+traner
+trang
+trangen
+trangens
+trangere
+trangsyn
+trangsynet
+trangsynets
+trangsynt
+trangsynte
+trangt
+transaksjon
+transaksjonen
+transaksjonene
+transaksjonens
+transaksjoner
+transatlantisk
+transcendental
+transcendentale
+transcendentalt
+transfer
+transformasjon
+transformasjonen
+transformasjonene
+transformasjonens
+transformasjoner
+transformator
+transformatoren
+transformatorene
+transformatorens
+transformatorer
+transformer
+transformere
+transformerer
+transformert
+transformerte
+transfusjon
+transfusjonen
+transfusjonene
+transfusjonens
+transfusjoner
+transistor
+transistoren
+transistorene
+transistorens
+transistorer
+transitiv
+transitivt
+transitt
+transitten
+transittens
+transkribere
+transkriberer
+transkribert
+transkriberte
+translatør
+translatøren
+translatørene
+translatørens
+translatører
+transmisjon
+transmisjonen
+transmisjonene
+transmisjonens
+transmisjoner
+transmittere
+transmitterer
+transmittert
+transmitterte
+transparens
+transparensen
+transparensens
+transparent
+transparente
+transparenten
+transparentens
+transparentet
+transpirasjon
+transpirasjonen
+transpirasjonene
+transpirasjonens
+transpirasjoner
+transpirere
+transpirerer
+transpirert
+transpirerte
+transplantasjon
+transplantasjonen
+transplantasjonene
+transplantasjonens
+transplantasjoner
+transplantere
+transplanterer
+transplantert
+transplanterte
+transponere
+transponerer
+transponert
+transponerte
+transport
+transportband
+transportbånd
+transporten
+transportene
+transportens
+transporter
+transportere
+transporteres
+transportert
+transporterte
+transportfly
+transportflya
+transportflyene
+transportflyet
+transportflyets
+transportforsikring
+transportforsikringen
+transportforsikringens
+transportøkonomisk
+transportmiddel
+transportmiddelet
+transportmiddelets
+transportmidla
+transportmidlene
+transportmidler
+transportmidlet
+transportmidlets
+transportør
+transportøren
+transportørene
+transportørens
+transportører
+transvestitt
+transvestitten
+transvestittene
+transvestittens
+transvestitter
+trapes
+trapesa
+trapesene
+trapeser
+trapeset
+trapesets
+trapesoide
+trapesoiden
+trapesoidene
+trapesoidens
+trapesoider
+trapp
+trappa
+trappe
+trappegang
+trappegangen
+trappegangens
+trappen
+trappene
+trapper
+trase
+trasen
+trasene
+trasens
+traser
+trasering
+traseringa
+traseringen
+traseringens
+trasig
+trask
+traska
+traske
+trasker
+trasket
+trass
+trassa
+trassat
+trassaten
+trassatene
+trassatens
+trassater
+trasse
+trassen
+trassens
+trassent
+trassenten
+trassentene
+trassentens
+trassenter
+trasser
+trassere
+trasserer
+trassert
+trasserte
+trasset
+trassig
+trast
+trasten
+trastene
+trastens
+traster
+tratte
+tratten
+trattens
+trau
+trauet
+trauets
+traust
+traut
+trav
+trava
+travbane
+travbanen
+travbanens
+travd
+travde
+trave
+travel
+travelhet
+travelheten
+travelhetens
+travelt
+traven
+travens
+traver
+traveren
+traverens
+travers
+traversen
+traversene
+traversens
+traverser
+traversere
+traverserer
+traversert
+traverserte
+travet
+travkjøre
+travle
+travlest
+travleste
+travselskap
+travselskapet
+travselskapets
+travselskaps
+travsporten
+travsportens
+trøbbel
+trøbbelet
+trøbbelets
+trøblet
+tråd
+trådd
+trædd
+trødd
+trådde
+trædde
+trødde
+tråden
+trådene
+tråder
+trådløs
+trådløse
+trådløst
+trådt
+trådte
+tre
+tråe
+trøe
+tåre
+tære
+trea
+treaktig
+tredel
+tredelen
+tredelens
+tredelt
+tredimensjonale
+tredimensjonalt
+tredje
+tredjedel
+tredjedelen
+tredjedelens
+tredjedeler
+tredjedels
+tredjemann
+tredjemannen
+tredjemannens
+tredjemenn
+tredjemennene
+tredjemennenes
+tredjemenns
+tredjepart
+tredjeparten
+tredjepartene
+tredjepartens
+tredjeparter
+tredjeplass
+tredjeplassen
+tredjeplassene
+tredjeplassens
+tredjeplasser
+tredjestørst
+tredobbel
+tredobbelt
+tredoble
+tredoblet
+tredunk
+tredunken
+tredunkens
+treen
+treenig
+treenighet
+treenigheten
+treenighetens
+treer
+treere
+treeren
+treerens
+treeres
+treerne
+treernes
+treet
+treete
+treff
+treffe
+treffende
+treffene
+treffer
+treffes
+treffet
+treffetid
+treffetida
+treffetiden
+treffetidens
+trefning
+trefningen
+trefningene
+trefningens
+trefninger
+trefoldighet
+trefoldigheten
+trefoldighetens
+treforedling
+treforedlingsindustri
+treforedlingsindustrien
+treforedlingsindustriens
+treg
+trega
+tåregass
+tåregassen
+tåregassens
+trege
+tregelig
+treger
+tregere
+treget
+treghet
+tregheten
+treghetens
+tregt
+trehendt
+treiv
+tårekanal
+tårekanalen
+tårekanalene
+tårekanalens
+tårekanaler
+trekant
+trekanta
+trekanten
+trekantene
+trekantens
+trekanter
+trekantet
+trekk
+trekkbasun
+trekkbasunen
+trekkbasunens
+trekkdyr
+trekkdyrene
+trekkdyret
+trekkdyrets
+trekke
+trekken
+trekkende
+trekkene
+trekkens
+trekker
+trekkes
+trekket
+trekkfugl
+trekkfuglen
+trekkfuglene
+trekkfuglens
+trekkfugler
+trekkplaster
+trekkplasteret
+trekkplasterets
+trekkplastre
+trekkplastrene
+trekkplastret
+trekkplastrets
+trekkspell
+trekkspella
+trekkspellene
+trekkspellet
+trekkspellets
+trekkspill
+trekkspilla
+trekkspillene
+trekkspillet
+trekkspillets
+treklang
+treklangen
+treklangens
+trekning
+trekningen
+trekningens
+trekol
+trekolet
+trekolets
+trekt
+trekta
+trekte
+trekull
+trekullet
+trekullets
+trelast
+trelasta
+trelasten
+trelastens
+trelka
+trelke
+trelker
+trelket
+trell
+trella
+trelldom
+trelldommen
+trelldommens
+trelle
+trellen
+trellens
+treller
+trellet
+tremasse
+tremassen
+tremassens
+tremenning
+tremenningen
+tremenningene
+tremenningens
+tremenninger
+tren
+tåren
+trena
+trend
+trenden
+trendene
+trendens
+trender
+trene
+trener
+trenere
+treneren
+trenerens
+treneres
+trenerne
+trenernes
+trenet
+treng
+trenge
+trenger
+trenges
+trengs
+trengsel
+trengselen
+trengselens
+trengsla
+trengslene
+trengsler
+trengt
+trengte
+trengtes
+trening
+treninga
+treningen
+treningens
+treninger
+treningskamp
+treningskampen
+treningskampene
+treningskampens
+treningskamper
+trent
+trente
+trer
+tårer
+tærer
+tres
+tresk
+treska
+treske
+treskel
+treskelen
+treskelens
+tresker
+tresket
+tresking
+treskinga
+treskingen
+treskingens
+treskjærer
+treskjærere
+treskjæreren
+treskjærerens
+treskjæreres
+treskjærerne
+treskjærernes
+tresklene
+treskler
+tresko
+treskoen
+treskoens
+treskt
+treskte
+treskurd
+treskurden
+treskurdens
+tresnitt
+tresteghopp
+tåret
+tæret
+tårete
+tretna
+tretne
+tretner
+tretnet
+trett
+tretta
+trette
+trettekjær
+tretten
+trettende
+trettendel
+trettendelen
+trettendelens
+trettens
+tretter
+trettet
+tretti
+trettidel
+trettidelen
+trettidelens
+trettien
+trettiende
+trettiførste
+trettiåra
+trettiårene
+trev
+treva
+trevarefabrikk
+trevarefabrikken
+trevarefabrikkens
+trevarefabrikker
+treven
+trevene
+trever
+treverk
+treverket
+treverkets
+trevet
+trevirke
+trevirket
+trevl
+trevla
+trevle
+trevlen
+trevlens
+trevlet
+trevne
+tårevåt
+triangel
+triangelet
+triangelets
+triangla
+trianglene
+triangler
+trianglet
+trianglets
+triangulær
+triangulære
+triangulært
+tribunal
+tribunala
+tribunalene
+tribunaler
+tribunalet
+tribunalets
+tribune
+tribunen
+tribunene
+tribunens
+tributt
+tributten
+tributtene
+tributtens
+tributter
+triennale
+triennalen
+triennalens
+trigonometri
+trigonometrien
+trigonometriens
+trigonometrisk
+trikin
+trikinen
+trikinene
+trikinens
+trikiner
+trikk
+trikka
+trikke
+trikken
+trikkens
+trikker
+trikket
+trikolor
+trikoloren
+trikolorene
+trikolorens
+trikolorer
+trikot
+trikotasje
+trikotasjen
+trikotasjens
+trikoten
+trikotens
+triks
+trikse
+trikset
+trill
+trilla
+trille
+trillebår
+trillebør
+trillebåra
+trillebøra
+trillebåren
+trillebøren
+trillebårene
+trillebørene
+trillebårens
+trillebørens
+trillebårer
+trillebører
+trillen
+trillens
+triller
+trillet
+trilling
+trillingen
+trillingene
+trillingens
+trillinger
+trillion
+trillionen
+trillionene
+trillionens
+trillioner
+trilogi
+trilogien
+trilogiene
+trilogiens
+trilogier
+trim
+trimaran
+trimaranen
+trimaranene
+trimaranens
+trimaraner
+trimma
+trimme
+trimmede
+trimmen
+trimmens
+trimmer
+trimmet
+trine
+triner
+tæring
+tæringa
+tæringen
+tæringens
+trinn
+trinnene
+trinnet
+trinnets
+trinsa
+trinse
+trinsen
+trinsens
+trint
+trinte
+trio
+trioen
+trioene
+trioens
+trioer
+tripp
+trippa
+trippe
+trippelallianse
+trippelalliansen
+trippelalliansens
+trippen
+trippende
+trippens
+tripper
+trippet
+trisa
+trise
+trisen
+trisens
+trissa
+trisse
+trissen
+trissens
+trist
+triste
+tritt
+trittet
+triumf
+triumfator
+triumfatoren
+triumfatorene
+triumfatorens
+triumfatorer
+triumfen
+triumfene
+triumfens
+triumfer
+triumfere
+triumferende
+triumferer
+triumfert
+triumferte
+triumvirat
+triumviratene
+triumvirater
+triumviratet
+triumviratets
+triv
+trivd
+trivdes
+trive
+trivelig
+trivelige
+trives
+trivialitet
+trivialiteten
+trivialitetens
+triviell
+trivielle
+trivielt
+trivla
+trivle
+trivler
+trivlet
+trivnad
+trivnaden
+trivs
+trivsel
+trivselen
+trivselens
+tørk
+tørka
+tørke
+tørkede
+tørken
+tørkens
+tørker
+tørkerom
+tørkeromma
+tørkerommene
+tørkerommet
+tørkerommets
+tørket
+tråkk
+trøkk
+tråkka
+tråkke
+tråkker
+tråkket
+tråkla
+tråkle
+tørkle
+tråkler
+tråklet
+tørklær
+tørklærne
+trål
+træl
+tråla
+tråle
+trålen
+trælen
+trælene
+trålens
+trælens
+tråler
+træler
+trålere
+tråleren
+trålerens
+tråleres
+trålerne
+trålernes
+trålet
+trælet
+trålfiske
+trålfisket
+trålfiskets
+trålt
+trålte
+tårn
+tørn
+tårna
+tørna
+trønder
+trøndere
+trønderen
+trønderens
+trønderes
+trønderne
+trøndernes
+trøndersk
+trønderske
+trøndsk
+tårne
+tærne
+tørne
+tørnen
+tørnens
+tårner
+tørner
+tårnet
+tørnet
+tro
+troa
+trodd
+trodde
+troe
+troen
+troende
+trofast
+trofaste
+trofeer
+trofeet
+trofeets
+trohjertig
+troika
+troikaen
+troikaene
+troikaens
+troikaer
+trojansk
+trokeen
+trokeens
+trolig
+troll
+trolla
+trolldom
+trolldommen
+trolldommene
+trolldommens
+trolldommer
+trolle
+troller
+trollet
+trollete
+trolleybuss
+trolleybussen
+trolleybussens
+trollskap
+trollskapen
+trollskapens
+trollskapet
+trollskapets
+trollslig
+trolovelse
+trolovelsen
+trolovelsens
+trolsk
+trombone
+trombonen
+trombonens
+trombose
+trombosen
+trombosens
+tromla
+tromle
+tromlen
+tromlene
+tromlens
+tromler
+tromma
+tromme
+trommehinna
+trommehinne
+trommehinnen
+trommehinnene
+trommehinnens
+trommehinner
+trommel
+trommelen
+trommelens
+trommene
+trommer
+trommes
+trommet
+trompet
+trompeten
+trompetene
+trompetens
+trompeter
+trompetist
+trompetisten
+trompetistene
+trompetistens
+trompetister
+tron
+trona
+tronarving
+tronarvingen
+tronarvingens
+trone
+tronen
+tronens
+troner
+tronet
+trope
+tropen
+tropene
+tropens
+troper
+tropikluft
+tropisk
+troposfære
+troposfæren
+troposfærens
+tropp
+troppa
+troppe
+troppen
+troppene
+troppens
+tropper
+troppet
+tror
+trosartikkel
+trosartikkelen
+trosartikkelens
+trosartiklene
+trosartikler
+troskap
+troskapen
+troskapens
+troskyldig
+troskyldige
+tross
+trosse
+trossen
+trossens
+trosser
+trosset
+trossig
+trost
+trosten
+trostene
+trostens
+troster
+trott
+trottel
+trottelen
+trottelens
+trotten
+trottens
+trottig
+trottoar
+trottoara
+trottoarene
+trottoarer
+trottoaret
+trottoarets
+trottug
+troverdig
+troverdige
+troverdighet
+troverdigheten
+troverdighetens
+trær
+tørr
+tørrdokk
+tørrdokka
+tørrdokken
+tørrdokkene
+tørrdokkens
+tørrdokker
+tørre
+tørrere
+tørres
+tørrfisk
+tørrfisken
+tørrfiskens
+tørrlagt
+tørrlagte
+tørrlastskip
+tørrlastskipet
+tørrlastskipets
+trærne
+tørrskodd
+tørrvittig
+tørrvær
+tørrværet
+tørrværets
+trøske
+trøsken
+trøskene
+trøskens
+trøsker
+trøst
+tørst
+trøsta
+tørsta
+trøste
+tørste
+tørstedrikk
+tørstedrikken
+tørstedrikkene
+tørstedrikkens
+tørstedrikker
+tørsten
+tørstens
+trøster
+tørster
+trøstesløs
+trøstesløshet
+trøstesløsheten
+trøstesløshetens
+trøstesløst
+trøstet
+tørstet
+trøstig
+tørstig
+tørstige
+tråsykkel
+tråsykkelen
+tråsykkelens
+tråsyklene
+tråsykler
+tørt
+trøtna
+trøtne
+trøtner
+trøtnet
+trått
+trøtt
+trøtta
+trøtte
+trøtter
+trøttet
+trøtthet
+trøttheten
+trøtthetens
+tru
+trua
+trubadur
+trubaduren
+trubadurene
+trubadurens
+trubadurer
+truck
+trucken
+truckene
+truckens
+trucker
+trudd
+trudde
+true
+truende
+truer
+trues
+truet
+trufast
+truffet
+truga
+truge
+truger
+truget
+trugsmål
+trugsmåla
+trugsmålene
+trugsmålet
+trugsmålets
+trukket
+trukne
+trulig
+truloving
+trulovinga
+trumf
+trumfa
+trumfe
+trumfen
+trumfens
+trumfer
+trumfet
+trupp
+truppen
+truppene
+truppens
+trupper
+trur
+trusa
+truse
+trusen
+trusene
+trusens
+truser
+truskap
+truskapen
+truskapens
+truskyldig
+truskyldige
+truslene
+trusler
+trussel
+trusselen
+trusselens
+trust
+trusten
+trustene
+trustens
+truster
+trut
+truten
+trutens
+truter
+trutna
+trutne
+trutner
+trutnet
+trutt
+truverdig
+truverdige
+trøya
+trøye
+trøyen
+trøyene
+trøyens
+trøyer
+trygd
+trygda
+trygde
+trygdekasse
+trygdekassen
+trygdekassene
+trygdekassens
+trygdekasser
+trygdekontor
+trygdekontorene
+trygdekontorer
+trygdekontoret
+trygdekontorets
+trygdemidler
+trygden
+trygdene
+trygder
+trygdesystem
+trygdesystema
+trygdesystemene
+trygdesystemer
+trygdesystemet
+trygdesystemets
+trygding
+trygdinga
+trygdingen
+trygdingens
+trygg
+trygga
+trygge
+tryggere
+trygget
+trygghet
+tryggheten
+trygghetens
+trygging
+trygginga
+tryggingen
+tryggingens
+tryggingsfond
+tryggingsfondet
+tryggingsfondets
+trygla
+trygle
+trygler
+tryglet
+trygt
+trykk
+trykke
+trykken
+trykkende
+trykkens
+trykker
+trykkeri
+trykkeria
+trykkeriene
+trykkerier
+trykkeriet
+trykkeriets
+trykkes
+trykket
+trykkfeil
+trykkfeilen
+trykkfeilene
+trykkfeilens
+trykking
+trykkinga
+trykkingen
+trykklett
+trykksak
+trykksaka
+trykksaken
+trykksakene
+trykksakens
+trykksaker
+trykkstavelse
+trykkstavelsen
+trykkstavelsens
+trykktype
+trykktypen
+trykktypens
+trykning
+trykningen
+trykningene
+trykninger
+trykt
+trykte
+trylla
+trylle
+tryller
+tryllet
+trylt
+trylte
+tryne
+trynet
+trøysam
+trøysamme
+trøysamt
+trysling
+tryslingen
+tryslingene
+tryslingens
+tryslinger
+tryta
+tryte
+trøyte
+trytene
+tryter
+trøyter
+trytt
+trøytt
+trøytte
+tøs
+tøsa
+tsar
+tsaren
+tsarene
+tsarens
+tsarer
+tsarforordning
+tsarforordningen
+tsarforordningens
+åtsel
+åtselet
+åtselets
+tøsen
+tøsene
+tøsens
+tøser
+tøset
+tsetseflua
+tsetseflue
+tsetsefluen
+tsetsefluens
+tsjeka
+tsjekaen
+tsjekaens
+tsjekker
+tsjekkere
+tsjekkeren
+tsjekkerens
+tsjekkeres
+tsjekkerne
+tsjekkernes
+tsjekkisk
+tsjekkiske
+tsjekkoslovak
+tsjekkoslovaken
+tsjekkoslovakene
+tsjekkoslovakens
+tsjekkoslovaker
+tsjekkoslovakisk
+tsjekkoslovakiske
+åtsla
+åtslene
+åtsler
+åtslet
+åtslets
+tøt
+ått
+ætt
+tåta
+ætta
+ættbåren
+tåte
+åtte
+ætte
+ættede
+åttedel
+åttedelen
+åttedelene
+åttedelens
+åttedeler
+tåteflaska
+tåteflaske
+tåteflasken
+tåteflaskene
+tåteflaskens
+tåteflasker
+ættegard
+ættegarden
+ættegardens
+ætten
+åttende
+åttendedel
+åttendedelen
+åttendedelene
+åttendedelens
+åttendedeler
+tåtene
+ættene
+tåter
+åtter
+ætter
+ættesaga
+ættesagaen
+ættesagaene
+ættesagaens
+ættesagaer
+tåtet
+åtti
+åttidel
+åttidelen
+åttidelene
+åttidelens
+åttideler
+åttien
+åttiende
+åttiførste
+åtting
+åttingen
+åttingens
+åttiåring
+åttiåringen
+åttiåringene
+åttiåringens
+åttiåringer
+ættledd
+ættledda
+ættleddene
+ættleddet
+ættleddets
+åttring
+åttringen
+åttringene
+åttringens
+åttringer
+tøtsj
+tøtsje
+tått
+tøtta
+tøtte
+tåtten
+tøttene
+tøtter
+ættvill
+tua
+tube
+tuben
+tubens
+tuberkel
+tuberkelen
+tuberkelens
+tuberklene
+tuberkler
+tuberkulose
+tuberkulosen
+tuberkulosens
+tuberkuløs
+tuberkuløse
+tuberkuløst
+tue
+tufs
+tufsa
+tufse
+tufsen
+tufsens
+tufset
+tufsete
+tufsne
+tuft
+tufta
+tuften
+tuftene
+tuftens
+tufter
+tuftet
+tugga
+tugge
+tuggene
+tugger
+tukl
+tukla
+tukle
+tukler
+tuklet
+tukt
+tukta
+tukte
+tukten
+tuktens
+tukter
+tuktet
+tukthus
+tukthuset
+tukthusets
+tulipan
+tulipanen
+tulipanene
+tulipanens
+tulipaner
+tull
+tulla
+tulle
+tullen
+tullens
+tullet
+tullete
+tulling
+tullingen
+tullingene
+tullingens
+tullinger
+tulupp
+tuluppen
+tuluppene
+tuluppens
+tulupper
+tumla
+tumle
+tumleplass
+tumleplassen
+tumleplassene
+tumleplassens
+tumleplasser
+tumler
+tumlet
+tummel
+tummelen
+tummelens
+tummelumsk
+tumor
+tumoren
+tumorene
+tumorens
+tumorer
+tumult
+tumulten
+tumultene
+tumultens
+tumulter
+tun
+tundra
+tundraen
+tundraene
+tundraens
+tundraer
+tune
+tuner
+tunere
+tuneren
+tunerens
+tuneres
+tunerne
+tunernes
+tunes
+tunet
+tunfisk
+tunfisken
+tunfiskens
+tung
+tunga
+tunge
+tungemål
+tungemålet
+tungemålets
+tungen
+tungens
+tungere
+tungest
+tunghørt
+tunglynt
+tungnem
+tungnemme
+tungnemt
+tungrodd
+tungsindig
+tungt
+tungtransport
+tungtransporten
+tungtransportens
+tungtveiende
+tungvekt
+tungvekter
+tungvinn
+tungvinne
+tungvint
+tunika
+tunikaen
+tunikaene
+tunikaens
+tunikaer
+tunisier
+tunisiere
+tunisieren
+tunisierens
+tunisieres
+tunisierne
+tunisiernes
+tunisisk
+tunnel
+tunnelen
+tunnelene
+tunnelens
+tunneler
+tupp
+tuppa
+tuppen
+tuppene
+tuppens
+tupper
+tuppet
+tur
+tura
+turban
+turbanen
+turbanene
+turbanens
+turbaner
+turbin
+turbinen
+turbinene
+turbinens
+turbiner
+turbulens
+turbulensen
+turbulensens
+turbulent
+turbulente
+turde
+ture
+turen
+turens
+turer
+turisme
+turismen
+turismens
+turist
+turisten
+turistene
+turistens
+turister
+turistforening
+turistforeninga
+turistforeningen
+turistforeningene
+turistforeningens
+turistforeninger
+turistnæring
+turistnæringen
+turistnæringens
+turistsesong
+turistsesongen
+turistsesongens
+turistsjef
+turistsjefen
+turistsjefene
+turistsjefens
+turistsjefer
+turisttrafikk
+turisttrafikken
+turisttrafikkens
+turkis
+turkisen
+turkisene
+turkisens
+turkiser
+turn
+turna
+turne
+turneer
+turnen
+turnens
+turner
+turnere
+turneren
+turnerens
+turnering
+turneringa
+turneringen
+turneringene
+turneringens
+turneringer
+turnet
+turnforening
+turnforeninga
+turnforeningen
+turnforeningene
+turnforeningens
+turnforeninger
+turnips
+turnipsen
+turnipsene
+turnipsens
+turnipser
+turnsko
+turnus
+turnusen
+turnusene
+turnusens
+turnuser
+turnuskandidat
+turnuskandidaten
+turnuskandidatene
+turnuskandidatens
+turnuskandidater
+turt
+turta
+turteldua
+turteldue
+turtelduene
+turtelduer
+turtene
+turter
+tusen
+tusenbein
+tusenbeinet
+tusenbeinets
+tusende
+tusendel
+tusendelen
+tusendelens
+tusener
+tusenet
+tusens
+tusenvis
+tusj
+tusjen
+tusjene
+tusjens
+tusjer
+tuskhandel
+tuskhandelen
+tuskhandelens
+tuskhandle
+tuskhandler
+tuskhandlet
+tusla
+tusle
+tusler
+tuslet
+tusling
+tuslingen
+tuslingene
+tuslingens
+tuslinger
+tuss
+tussa
+tusse
+tusseladd
+tusseladden
+tusseladdene
+tusseladdens
+tusseladder
+tussen
+tussens
+tussmørk
+tussmørke
+tussmørket
+tust
+tusta
+tusten
+tustene
+tustens
+tuster
+tut
+tuta
+tute
+tuten
+tutens
+tuter
+tutet
+tutla
+tutle
+tutler
+tutlet
+tutt
+tutta
+tutten
+tuttene
+tuttens
+tutter
+tuttet
+tuva
+tuve
+tuven
+tuvene
+tuvens
+tuver
+tv
+tøv
+tøva
+tvang
+tvangen
+tvangens
+tvangfri
+tvangsarbeid
+tvangsarbeidet
+tvangsarbeidets
+tvangstanke
+tvangstanken
+tvangstankens
+tvara
+åtvara
+tvare
+åtvare
+tvaren
+tvarene
+tvarens
+tvarer
+åtvarer
+åtvaring
+åtvaringa
+åtvaringen
+åtvaringene
+åtvaringens
+åtvaringer
+åtvart
+åtvarte
+tøvde
+tøve
+tvebeite
+tvebitt
+tvedrakt
+tvedrakten
+tvedraktens
+tveegga
+tvefoldig
+tvekjønn
+tvekjønna
+tvekjønnede
+tvekjønnet
+tøvekopp
+tøvekoppen
+tøvekoppens
+tvelyd
+tvelyden
+tvelydens
+tøver
+tverka
+tverke
+tverken
+tverker
+tverket
+tverr
+tverrbjelke
+tverrbjelken
+tverrbjelkens
+tverrdriver
+tverrdrivere
+tverrdriveren
+tverrdriverens
+tverrfaglig
+tverrfaglige
+tverrfløyta
+tverrfløyte
+tverrfløytene
+tverrfløyter
+tverrgata
+tverrgate
+tverrgaten
+tverrgatene
+tverrgatens
+tverrgater
+tverrkast
+tverrkastet
+tverrkastets
+tverrmål
+tverrmåla
+tverrmålene
+tverrmålet
+tverrmålets
+tverrpolitisk
+tverrskap
+tverrskapen
+tverrskapens
+tverrskips
+tverrsnitt
+tverrsnitta
+tverrsnittene
+tverrsnittet
+tverrsnittets
+tverrstanse
+tverrstanser
+tverrstilt
+tverrvitenskapelig
+tverrvitenskapelige
+tverrvitskapelig
+tverrvitskapelige
+tvers
+tvert
+tøvet
+tøvete
+tvetta
+tvette
+tvetter
+tvettet
+tvetydig
+tvetydige
+tvetydighet
+tvetydigheten
+tvetydighetene
+tvetydighetens
+tvetydigheter
+tvi
+tvibrent
+tviholde
+tviholder
+tviholdt
+tvil
+tvile
+tvilen
+tvilende
+tvilens
+tviler
+tvill
+tvillen
+tvillens
+tvilling
+tvillingen
+tvillingene
+tvillingens
+tvillinger
+tvilrådig
+tvilsmål
+tvilsmålet
+tvilsmålets
+tvilsom
+tvilsomme
+tvilsomt
+tvilsspørsmål
+tvilsspørsmålet
+tvilsspørsmålets
+tvilstilfelle
+tvilt
+tvilte
+tving
+tvinge
+tvingende
+tvinger
+tvinges
+tvinna
+tvinne
+tvinner
+tvinnes
+tvinnet
+tvisprang
+tvispranget
+tvisprangets
+tvist
+tviste
+tvistemål
+tvistemåla
+tvistemålene
+tvistemålet
+tvistemålets
+tvisten
+tvistens
+tvister
+tvisyn
+tvisynet
+tvisynets
+tvisynt
+tøvær
+tværa
+tvære
+tværer
+tværet
+tøværet
+tøværets
+tvungen
+tvunget
+tvungne
+tvunnet
+tweed
+tweeden
+tweedens
+twist
+twista
+twisten
+twistens
+twister
+twistet
+ty
+tøy
+tydd
+tydde
+tyde
+tøyde
+tydelig
+tydelige
+tydeligere
+tydelighet
+tydeligheten
+tydelighetens
+tydeligst
+tydeligvis
+tyder
+tydet
+tyding
+tydinga
+tydingen
+tydning
+tydningen
+tydningene
+tydningens
+tydninger
+tøye
+tøyelig
+tøyelige
+tøyen
+tyende
+tyendet
+tøyens
+tøyer
+tøyet
+tyfoidfeber
+tyfoidfeberen
+tyfoidfeberens
+tyfon
+tyfonen
+tyfonene
+tyfonens
+tyfoner
+tyfus
+tyfusen
+tyfusens
+tygd
+tygde
+tygge
+tygger
+tygges
+tykk
+tykke
+tykkelse
+tykkelsen
+tykkelsens
+tykkere
+tykkes
+tykksak
+tykksaken
+tykksakene
+tykksakens
+tykksaker
+tykna
+tykne
+tykner
+tyknet
+tykning
+tykningen
+tykningens
+tykt
+tykte
+tyktes
+tøyla
+tøyle
+tøylen
+tøylene
+tøylens
+tøyler
+tøylet
+tylft
+tylfta
+tylften
+tylftene
+tylftens
+tylfter
+tyll
+tylla
+tylle
+tyllen
+tyllens
+tyller
+tyllet
+tyne
+tyner
+tynga
+tyngd
+tyngda
+tyngde
+tyngdekraft
+tyngdekrafta
+tyngdekraften
+tyngdekraftens
+tyngden
+tyngdepunkt
+tyngdepunktet
+tyngdepunktets
+tynge
+tyngende
+tynger
+tynget
+tyngre
+tyngsel
+tyngselen
+tyngselens
+tyngsle
+tyngsler
+tyngst
+tyngste
+tynn
+tynne
+tynner
+tynnest
+tynneste
+tynning
+tynnkledd
+tynnslitt
+tynt
+tynte
+tyntøl
+type
+typen
+typene
+typens
+typer
+typisk
+typiske
+typograf
+typografen
+typografene
+typografens
+typografer
+typografi
+typografien
+typografiens
+typografisk
+typografiske
+tyr
+tyrann
+tyrannen
+tyrannene
+tyrannens
+tyranner
+tyranni
+tyrannia
+tyranniene
+tyrannier
+tyranniet
+tyranniets
+tyrannisere
+tyranniserer
+tyrannisert
+tyranniserte
+tyrannisk
+tyrannosaur
+tyrannosauren
+tyrannosaurene
+tyrannosaurens
+tyrannosaurer
+tyrannosaurus
+tyrannosaurusen
+tyrannosaurusens
+tyrefekter
+tyrefektere
+tyrefekteren
+tyrefekterens
+tyrefekteres
+tyrefekterne
+tyrefekternes
+tyrefektning
+tyrefektningen
+tyrefektningens
+tyren
+tyrene
+tyrens
+tyrer
+tyri
+tyrien
+tyriene
+tyriens
+tyrier
+tyrispik
+tyrk
+tyrken
+tyrkene
+tyrkens
+tyrker
+tyrkere
+tyrkeren
+tyrkerens
+tyrkeres
+tyrkerne
+tyrkernes
+tyrkisk
+tyrkiske
+tøys
+tøysa
+tysbast
+tysbasten
+tysbastens
+tøyse
+tøysekopp
+tøysekoppen
+tøysekoppene
+tøysekoppens
+tøysekopper
+tøyser
+tøyset
+tøysete
+tysk
+tyske
+tysker
+tyskere
+tyskeren
+tyskerens
+tyskeres
+tyskerne
+tyskernes
+tyss
+tyssa
+tysser
+tysset
+tyst
+tøyst
+tysta
+tøyste
+tyster
+tystere
+tysteren
+tysterens
+tysteres
+tysterne
+tysternes
+tystet
+tøyta
+tyte
+tøyte
+tøytene
+tyter
+tøyter
+tytt
+tytte
+tyttebær
+tyttebæra
+tyttebærene
+tyttebæret
+tyttebærets
+tyv
+tyvaktig
+tyve
+tyvegods
+tyvegodset
+tyvegodsets
+tyven
+tyvene
+tyver
+tyveri
+tyveria
+tyveriene
+tyverier
+tyveriet
+tyveriets
+tyvfiske
+tyvfisket
+tyvfiskets
+tyvstarte
+tyvstartet
+uakseptabel
+uakseptabelt
+uakseptable
+uaktsom
+uaktsomhet
+uaktsomheten
+uaktsomhetens
+uaktsomme
+uaktsomt
+uaktuell
+uaktuelle
+ualminnelig
+ualminnelige
+uanselig
+uanselige
+uansett
+uanstendig
+uanstendige
+uanstendighet
+uanstendigheten
+uanstendighetens
+uansvarlig
+uansvarlige
+uante
+uartig
+uatskillelig
+uavbrutt
+uavgjort
+uavhendelig
+uavhengig
+uavhengige
+uavhengighet
+uavhengigheten
+uavhengighetens
+uavlatelig
+ubalansert
+ubalanserte
+ubarmhjertig
+ubarmhjertige
+ubarmhjertighet
+ubarmhjertigheten
+ubarmhjertighetens
+ubedt
+ubefesta
+ubefeste
+ubefestede
+ubefestet
+ubegrenset
+ubehag
+ubehagelig
+ubehagelige
+ubeist
+ubeistet
+ubeistets
+ubekjent
+ubekjente
+ubekvem
+ubekvemme
+ubekvemt
+ubendig
+ubendige
+uberegnelig
+uberegnelige
+uberørt
+ubeseira
+ubeseirede
+ubeskjeden
+ubeskjedenhet
+ubeskjedenheten
+ubeskjedenhetens
+ubeskjedent
+ubeskjedne
+ubestemt
+ubestemte
+ubestridelig
+ubesvart
+ubesvarte
+ubetalt
+ubetalte
+ubetenksom
+ubetenksomme
+ubetenksomt
+ubetydelig
+ubetydelige
+ubevisst
+ubevisste
+ubevissthet
+ubevisstheten
+ubevissthetens
+ubillig
+ubillige
+ublu
+ublue
+ublutt
+ubønnhørlig
+ubotelig
+ubrukbar
+ubrukbare
+ubrukbart
+ubrukt
+ubrukte
+ubrytelig
+ubåt
+ubåten
+ubåtene
+ubåtens
+ubåter
+ubuden
+ubudent
+ubudne
+ubøyelig
+ubygd
+ubygda
+udåd
+udødelig
+udødelige
+udåden
+udådene
+udådens
+udåder
+udekka
+udekkede
+udekket
+udelt
+udelte
+udemokratisk
+udemokratiske
+udiskutabel
+udiskutabelt
+udyktig
+udyktige
+udyktighet
+udyktigheten
+udyktighetens
+udyr
+udyra
+udyrene
+udyret
+udyrets
+ueffen
+ueffent
+uefne
+uegna
+uegne
+uegnet
+uekte
+uendelig
+uendelige
+uendra
+uendrede
+uendret
+uengasjert
+uengasjerte
+uenig
+uenige
+uenighet
+uenigheten
+uenighetens
+uer
+ueren
+uerens
+uerfaren
+uerfarne
+uerstattelige
+ufaglært
+ufaglærte
+ufarlig
+ufarlige
+ufattelig
+ufeilbar
+ufeilbare
+ufeilbarlig
+ufeilbart
+uferd
+uferda
+uferden
+uferdig
+uferdige
+uferdighet
+uferdigheten
+uferdighetens
+uff
+ufin
+ufine
+ufinere
+ufinhet
+ufinheten
+ufinhetens
+ufint
+ufjelg
+uflaks
+uflaksen
+uflaksens
+uflidd
+ufo
+ufoen
+ufoens
+uforanderlig
+uforanderlige
+uforbederlig
+uforbeholden
+uforbeholdent
+uforbeholdne
+uforberedt
+uforberedte
+uforbindtlig
+uforbindtlige
+ufordøyelig
+ufordøyelige
+uforenelig
+uforenelige
+uforenlig
+uforenlige
+uforglemmelig
+uforglemmelige
+uforholdsmessig
+uforholdsmessige
+uforklarlig
+uforklarlige
+uforlignelig
+uforlignelige
+uforliknelig
+uforliknelige
+uforlikt
+uformell
+uformelle
+uforsagt
+uforsiktig
+uforsiktige
+uforsiktighet
+uforsiktigheten
+uforsiktighetens
+uforskamma
+uforskammede
+uforskammet
+uforskyldt
+uforståelig
+uforståelige
+uforstående
+uforsvarlig
+uforsvarlige
+ufortjent
+ufortjente
+ufortrøden
+ufortrødent
+ufortrødne
+uforutsett
+uforutsette
+uforvarende
+ufør
+ufrakommelig
+ufravikelig
+ufravikelige
+uføre
+ufred
+ufreden
+ufredens
+uføres
+uføret
+uføretrygd
+uføretrygda
+uføretrygden
+uføretrygdens
+uføretrygdet
+uførhet
+uførheten
+uførhetens
+ufrihet
+ufrihets
+ufrivillig
+ufrivillige
+uført
+ufruktbar
+ufruktbare
+ufruktbart
+ufs
+ufsa
+ufsen
+ufsene
+ufsens
+ufser
+ufullkommen
+ufullkomment
+ufullstendig
+ufullstendige
+ufyse
+ufyselig
+ufyselige
+ufysen
+ufysent
+ufysne
+ugagn
+ugagnet
+ugagnets
+ugagnskråka
+ugagnskråke
+ugander
+ugandere
+uganderen
+uganderens
+uganderes
+uganderne
+ugandernes
+ugandisk
+ugg
+ugge
+uggen
+ugiddelig
+ugift
+ugifte
+ugild
+ugilde
+ugildt
+ugjenkallelig
+ugjenkjennelig
+ugjenkjennelige
+ugjerning
+ugjerninga
+ugjerningen
+ugjerningene
+ugjerningens
+ugjerninger
+ugjestmild
+ugjestmildt
+ugjørlig
+ugla
+uglad
+uglade
+ugle
+uglen
+uglene
+uglens
+ugler
+ugne
+ugras
+ugraset
+ugrasets
+ugrei
+ugreia
+ugreien
+ugreiens
+ugress
+ugresset
+ugressets
+ugrisk
+ugriskhet
+ugriskheten
+ugriskhetens
+ugriskt
+ugrunna
+ugrunnede
+ugrunnet
+ugudelig
+ugudelige
+ugunstig
+ugunstige
+ugyldig
+uhandterlig
+uhandterlige
+uhederlig
+uhederlige
+uhederlighet
+uhederligheten
+uhederlighetens
+uheldig
+uheldige
+uhell
+uhella
+uhellene
+uhellet
+uhellets
+uhensiktsmessig
+uhensiktsmessige
+uhøflig
+uhøflige
+uhilda
+uhildede
+uhildet
+uhåndterlig
+uhåndterlige
+uholdbar
+uholdbare
+uholdbart
+uhorvelig
+uhorvelige
+uhørlig
+uhørlige
+uhørt
+uhumsk
+uhumskt
+uhøvelig
+uhygga
+uhygge
+uhyggelig
+uhyggelige
+uhyre
+uhyrene
+uhyrer
+uhyret
+uhyrlig
+uhyrlige
+uimotsagt
+uimotsigelig
+uimotsigelige
+uimotståelig
+uimotståelige
+uimottakelig
+uimottakelige
+uinnskrenka
+uinnskrenkede
+uinnskrenket
+uinntakelig
+uinntakelige
+uinteressant
+uinteressante
+uinteressert
+uinteresserte
+ujamn
+ujamne
+ujamt
+ujevn
+ujevne
+ujevnt
+uka
+ukallede
+ukallet
+ukalt
+ukas
+ukasen
+uke
+ukeblad
+ukebladene
+ukeblader
+ukebladet
+ukebladets
+ukedag
+ukedagen
+ukedagene
+ukedagens
+ukedager
+ukelang
+ukelange
+uken
+ukene
+ukens
+ukentlig
+ukentlige
+ukepresse
+ukepressen
+ukepressens
+uker
+ukers
+ukes
+ukeslutt
+ukevis
+ukjennelig
+ukjennelige
+ukjent
+ukjente
+ukjura
+ukjure
+uklanderlig
+uklar
+uklare
+uklarhet
+uklarheten
+uklarhetens
+uklart
+ukledelig
+ukledelige
+uklok
+ukloke
+uklokt
+ukontrollert
+ukontrollerte
+ukonvensjonell
+ukonvensjonelle
+ukrainer
+ukrainere
+ukraineren
+ukrainerens
+ukraineres
+ukrainerne
+ukrainernes
+ukrainsk
+ukrenkelig
+ukrenkelige
+ukritisk
+ukritiske
+ukronede
+ukuelig
+ukuelige
+ukulele
+ukulelen
+ukulelens
+ukultivert
+ukultiverte
+ukvemsord
+ukvemsordet
+ukvemsordets
+ukvinnelig
+ukvinnelige
+ukyndig
+ukyndige
+ukyndighet
+ukyndigheten
+ukyndighetens
+ul
+ula
+ulag
+ulage
+ulagelig
+ulagelige
+ulaget
+ule
+ulegelig
+uleilig
+uleiliga
+uleilige
+uleiliger
+uleiliget
+ulempa
+ulempe
+ulempen
+ulempene
+ulempens
+ulemper
+ulende
+ulendt
+ulene
+ulenkelig
+ulenkelige
+uler
+ules
+uleselig
+uleselige
+ulet
+ulidelig
+ulidelige
+ulik
+ulike
+ulikhet
+ulikheten
+ulikhetene
+ulikhetens
+ulikheter
+ulikt
+ulivssår
+ulivssåret
+ulivssårets
+ulk
+ulka
+ulken
+ulkene
+ulkens
+ulker
+ull
+ulla
+ullen
+ullens
+ullent
+ullstoff
+ullstoffene
+ullstoffer
+ullstoffet
+ullstoffets
+ulma
+ulme
+ulmende
+ulmer
+ulmet
+ulne
+ulønnet
+ulønnsom
+ulønnsomme
+ulønnsomt
+ulønt
+ulovlig
+ulovlige
+uløselig
+uløselige
+uløst
+uløste
+ulster
+ulsteren
+ulsterens
+ulstrene
+ulstrer
+ult
+ulåt
+ulte
+ulåten
+ulåtene
+ulåtens
+ulåter
+ultimata
+ultimataene
+ultimatum
+ultimatuma
+ultimatumene
+ultimatumer
+ultimatumet
+ultimatumets
+ultimo
+ultrafiolett
+ulv
+ulven
+ulvene
+ulvens
+ulver
+ulvunge
+ulvungen
+ulvungene
+ulvungens
+ulvunger
+ulyd
+ulyden
+ulydene
+ulydens
+ulyder
+ulydig
+ulydige
+ulydighet
+ulydigheten
+ulydighetens
+ulykka
+ulykke
+ulykkelig
+ulykkelige
+ulykken
+ulykkene
+ulykkens
+ulykker
+ulykkes
+ulykkestrygd
+ulykkestrygda
+ulykkestrygden
+ulykkestrygdens
+ulykksalig
+ulykksalige
+uløyselig
+uløyselige
+uløyves
+umak
+umaka
+umake
+umaker
+umaket
+umandig
+umandige
+umanerlig
+umedgjørlig
+umedgjørlige
+umenneske
+umenneskelig
+umenneskelige
+umenneskene
+umenneskenes
+umennesker
+umenneskers
+umennesket
+umenneskets
+umerkelig
+umerkelige
+umettelig
+umettelige
+umiddelbar
+umiddelbare
+umiddelbart
+uminnelig
+uminnelige
+uminnelighet
+uminneligheten
+uminnelighetens
+umiskjennelig
+umiskjennelige
+umistelig
+umistelige
+umælende
+umoden
+umodent
+umodne
+umoralsk
+umoralske
+umotivert
+umotiverte
+umåtelig
+umåtelige
+umulig
+umulige
+umuliggjorde
+umuliggjør
+umuliggjøre
+umulighet
+umuligheten
+umulighetens
+umyndig
+umyndige
+unaturlig
+unaturlige
+undas
+unåde
+unåden
+unådens
+under
+underavdeling
+underavdelinga
+underavdelingen
+underavdelingene
+underavdelingens
+underavdelinger
+underavdelingers
+underavdelings
+underbukse
+underbygg
+underbygge
+underbygger
+underbygges
+underbygget
+underbyggets
+underdanig
+underdanige
+underdirektør
+underdirektøren
+underdirektørene
+underdirektørens
+underdirektører
+undere
+underernært
+underernærte
+underet
+underetasje
+underetasjen
+underetasjene
+underetasjens
+underetasjer
+underetasjes
+underforstått
+underfundig
+underfundige
+undergang
+undergangen
+undergangene
+undergangens
+underganger
+undergravd
+undergravde
+undergrave
+undergrov
+underhånden
+underhold
+underholde
+underholdende
+underholder
+underholdes
+underholdet
+underholdning
+underholdningen
+underholdningens
+underholdninger
+underholdt
+underjordisk
+underjordiske
+underkant
+underkanten
+underkantens
+underkasta
+underkaste
+underkaster
+underkastes
+underkastet
+underkjenne
+underkjennelsen
+underkjennelsens
+underkjenner
+underkjennes
+underkjent
+underkjente
+underklasse
+underklassen
+underklassene
+underklassens
+underklasser
+underkommando
+underkommandoen
+underkommandoene
+underkommandoens
+underkommandoer
+underkua
+underkue
+underkuer
+underkuet
+underla
+underlag
+underlagene
+underlaget
+underlagt
+underlege
+underlegen
+underlegene
+underlegens
+underleger
+underlegge
+underlegger
+underlegges
+underlig
+underlige
+underliggende
+underligst
+underligste
+undermåler
+undermålere
+undermåleren
+undermålerens
+undermåleres
+undermålerne
+undermålernes
+undermåls
+underne
+underordna
+underordne
+underordnede
+underordner
+underordnes
+underordnet
+underordning
+underordninga
+underordningen
+underordningene
+underordningens
+underordninger
+underretning
+underretningen
+underretningene
+underretningens
+underretninger
+underretta
+underrette
+underretter
+underrettes
+underrettet
+undersetsig
+undersida
+underside
+undersiden
+undersidene
+undersidens
+undersider
+undersjef
+undersjefen
+undersjefene
+undersjefens
+undersjefer
+undersjefs
+undersjøisk
+undersjøiske
+undersøk
+undersøke
+undersøkelse
+undersøkelsen
+undersøkelsene
+undersøkelsens
+undersøkelser
+undersøker
+undersøkes
+undersøking
+undersøkinga
+undersøkingen
+undersøkingene
+undersøkingens
+undersøkinger
+underskott
+underskottene
+underskottet
+underskottets
+underskrev
+underskreva
+underskrevet
+underskride
+underskrift
+underskrifta
+underskriften
+underskriftene
+underskriftens
+underskrifter
+underskriftskampanje
+underskriftskampanjen
+underskriftskampanjens
+underskriv
+underskrive
+underskriver
+underskriverne
+underskrives
+undersøkt
+undersøkte
+underskudd
+underskuddene
+underskuddet
+underslå
+underslag
+underslagene
+underslager
+underslaget
+underslagets
+underslo
+underslår
+underslått
+underst
+understatement
+underste
+understell
+understellet
+understellets
+understellsbehandling
+understellsbehandlinga
+understellsbehandlingen
+understellsbehandlingens
+understrek
+understreke
+understreker
+understrekes
+understreket
+understreking
+understrekinga
+understrekingen
+understrekingens
+understrekning
+understrekningen
+understrekningens
+undersått
+undersåtten
+undersåttene
+undersåttens
+undersåtter
+understøtte
+understøttelse
+understøttelsen
+understøttelsens
+understøttet
+undertegn
+undertegna
+undertegne
+undertegnede
+undertegner
+undertegnes
+undertegnet
+undertegning
+undertegninga
+undertegningen
+undertegningene
+undertegningens
+undertegninger
+undertiden
+undertitlene
+undertitler
+undertittel
+undertittelen
+undertittelens
+undertrøya
+undertrøye
+undertrøyen
+undertrøyene
+undertrøyens
+undertrøyer
+undertrykke
+undertrykkelse
+undertrykkelsen
+undertrykkelsens
+undertrykker
+undertrykkes
+undertrykket
+undertrykking
+undertrykkinga
+undertrykkingen
+undertrykt
+undertrykte
+undertøy
+undertøyet
+undertøyets
+underutvikla
+underutvikle
+underutviklede
+underutviklet
+undervannsbåt
+undervannsbåten
+undervannsbåtene
+undervannsbåtens
+undervannsbåter
+undervegs
+underveis
+underverk
+underverka
+underverkene
+underverker
+underverket
+underverkets
+undervise
+underviser
+undervises
+undervisning
+undervisninga
+undervisningen
+undervisningene
+undervisningens
+undervisninger
+undervisningsdepartement
+undervisningsdepartementet
+undervisningsdepartementets
+undervisningskapasitet
+undervisningskomité
+undervisningskomiteen
+undervisningskomiteene
+undervisningskomiteens
+undervisningskomiteer
+undervisningsmateriale
+undervisningsmaterialet
+undervisningsmaterialets
+undervisningsminister
+undervisningsministeren
+undervisningsministerens
+undervisningsministrene
+undervisningsoppgave
+undervisningsoppgaven
+undervisningsoppgavene
+undervisningsoppgavens
+undervisningsoppgaver
+undervisningsopplegg
+undervisningsoppleggene
+undervisningsopplegget
+undervisningsoppleggets
+undervisningsorganisasjon
+undervisningsorganisasjonen
+undervisningsorganisasjonene
+undervisningsorganisasjonens
+undervisningsorganisasjoner
+undervisningsprogram
+undervisningsprogrammene
+undervisningsprogrammer
+undervisningsprogrammet
+undervisningsprogrammets
+undervisningsrom
+undervisningsrommene
+undervisningsrommet
+undervisningsrommets
+undervisningsseksjon
+undervisningsseksjonen
+undervisningsseksjonene
+undervisningsseksjonens
+undervisningsseksjoner
+undervisningssektor
+undervisningssektoren
+undervisningssektorene
+undervisningssektorens
+undervisningssektorer
+undervisningstekst
+undervisningsteksten
+undervisningstekstene
+undervisningstekstens
+undervisningstekster
+undervisningstilbud
+undervisningstilbudene
+undervisningstilbudet
+undervisningstilbudets
+undervist
+underviste
+undervurder
+undervurdere
+undervurderer
+undervurderes
+undervurdering
+undervurderinga
+undervurderingen
+undervurderingene
+undervurderinger
+undervurdert
+undervurderte
+unødig
+unødige
+undra
+undre
+undrende
+undrene
+undrer
+undres
+undret
+undring
+undringa
+undringen
+undringens
+unødvendig
+unødvendige
+unektelig
+ung
+ungarer
+ungarere
+ungareren
+ungarerens
+ungareres
+ungarerne
+ungarernes
+ungarsk
+ungarske
+ungdom
+ungdommelig
+ungdommelige
+ungdommen
+ungdommene
+ungdommens
+ungdommer
+ungdoms
+ungdomsarbeid
+ungdomsarbeidet
+ungdomsarbeidets
+ungdomsforbund
+ungdomsforbunds
+ungdomsfylking
+ungdomsfylkingen
+ungdomsfylkingens
+ungdomsklubb
+ungdomsklubben
+ungdomsklubbene
+ungdomsklubbens
+ungdomsklubber
+ungdomskriminalitet
+ungdomskriminaliteten
+ungdomskriminalitetens
+ungdomslag
+ungdomslaget
+ungdomslagets
+ungdomslandslag
+ungdomslandslaget
+ungdomslandslagets
+ungdomslitteratur
+ungdomslitteraturen
+ungdomslitteraturens
+ungdomsorganisasjon
+ungdomsorganisasjonen
+ungdomsorganisasjonene
+ungdomsorganisasjonens
+ungdomsorganisasjoner
+ungdomsproblem
+ungdomsproblema
+ungdomsproblemene
+ungdomsproblemer
+ungdomsproblemet
+ungdomsproblemets
+ungdomsår
+ungdomsårene
+ungdomsskole
+ungdomsskoleelev
+ungdomsskoleeleven
+ungdomsskoleelevene
+ungdomsskoleelevens
+ungdomsskoleelever
+ungdomsskolen
+ungdomsskolene
+ungdomsskolens
+ungdomsskoler
+ungdomstrinn
+ungdomstrinnet
+ungdomstrinnets
+unge
+ungen
+ungene
+ungens
+unger
+unges
+unggutt
+unggutten
+ungguttene
+ungguttens
+unggutter
+ungkar
+ungkaren
+ungkarene
+ungkarens
+ungkarer
+ungt
+uniform
+uniforma
+uniforme
+uniformen
+uniformene
+uniformens
+uniformer
+uniformere
+uniformerer
+uniformeres
+uniformering
+uniformeringa
+uniformeringen
+uniformeringens
+uniformert
+uniformerte
+uniformt
+unik
+unika
+unike
+unikt
+unikum
+unikumet
+unikumets
+union
+unionen
+unionene
+unionens
+unioner
+unions
+unionsoppløsning
+unionsoppløsningen
+unionsoppløsningens
+unison
+unisone
+unisont
+unitar
+unitaren
+unitarens
+unitarier
+unitarieren
+unitarierens
+united
+univers
+universal
+universale
+universalkort
+universalt
+universell
+universelle
+universelt
+universer
+universers
+universet
+universets
+universitet
+universitetene
+universitetenes
+universiteter
+universiteters
+universitetet
+universitetets
+universitets
+universitetsansatt
+universitetsansatte
+universitetsbibliotek
+universitetsbiblioteka
+universitetsbiblioteket
+universitetsbibliotekets
+universitetsdirektør
+universitetsdirektøren
+universitetsdirektørens
+universitetseksamen
+universitetseksamens
+universitetslektor
+universitetslektoren
+universitetslektorens
+universitetslærer
+universitetslærere
+universitetslæreren
+universitetslærerens
+universitetslæreres
+universitetslærerne
+universitetslærernes
+universitetsnivå
+universitetsnivået
+universitetsnivåets
+universitetsområde
+universitetsområdet
+universitetsstipendiat
+universitetsstipendiaten
+universitetsstipendiatene
+universitetsstipendiatens
+universitetsstipendiater
+unn
+unna
+unnabakke
+unnabakken
+unnabakkens
+unnagjort
+unnarenn
+unnarenna
+unnarennene
+unnarennet
+unnarennets
+unnatak
+unnataka
+unnatakene
+unnataket
+unnatakets
+unndra
+unndradd
+unndrar
+unndras
+unndratt
+unndrog
+unne
+unner
+unnfallende
+unnfallenhet
+unnfallenheten
+unnfallenhetens
+unnfanga
+unnfange
+unnfanger
+unnfanges
+unnfanget
+unngå
+unngikk
+unngjelde
+unngjelder
+unngjeldt
+unngjeldte
+unngår
+unngås
+unngått
+unnlate
+unnlatelse
+unnlatelsen
+unnlatelsens
+unnlater
+unnlatt
+unnlot
+unnså
+unnse
+unnseelse
+unnseelsen
+unnseelsens
+unnselig
+unnser
+unnsetning
+unnsetningen
+unnsetningens
+unnsett
+unnsi
+unnskyld
+unnskylde
+unnskyldende
+unnskylder
+unnskyldning
+unnskyldningen
+unnskyldningens
+unnskyldt
+unnskyldte
+unnslå
+unnslapp
+unnsleppe
+unnslepper
+unnslippe
+unnslipper
+unnslo
+unnslår
+unnslått
+unnta
+unntagen
+unntak
+unntaka
+unntakelse
+unntakelsen
+unntakelsene
+unntakelsens
+unntakelser
+unntakene
+unntaket
+unntakets
+unntakslista
+unntaksliste
+unntakslisten
+unntakslistene
+unntakslistens
+unntakslister
+unntakstilfelle
+unntakstilfeller
+unntar
+unntas
+unntatt
+unntok
+unnvike
+unnvikende
+unnvære
+unnværer
+unnvært
+unnværte
+unormal
+unormale
+unormalt
+unorsk
+unorske
+unote
+unoten
+unotene
+unotens
+unoter
+unse
+unsen
+unsens
+unt
+unte
+unøyaktig
+unøyaktighet
+unøyaktighets
+unytta
+unytte
+unyttet
+unyttig
+unyttige
+uoffisiell
+uoffisielle
+uoffisielt
+uomtvistelig
+uomtvistelige
+uoppdragen
+uoppdragent
+uoppdragne
+uoppfyllelig
+uoppholdelig
+uorden
+uordens
+uorganisert
+uorganiserte
+uorganisk
+uorganiske
+uoverensstemmelse
+uoverensstemmelsen
+uoverensstemmelsene
+uoverensstemmelsens
+uoverensstemmelser
+uoverveid
+uovervinnelig
+uovervinnelige
+upåaktet
+upartisk
+upartiske
+upasselig
+upasselige
+upassende
+upersonlig
+upersonlige
+upåklagelig
+upåklagelige
+upålitelig
+upålitelige
+upolitisk
+upolitiske
+upopulær
+upopulære
+upraktisk
+upraktiske
+upåregnelig
+upåregnelige
+upresis
+upresise
+upresist
+uprioritert
+uprioriterte
+uproduktiv
+uproduktive
+uproduktivt
+ur
+uår
+ura
+uran
+uranet
+uranets
+uranmile
+uransakelig
+uransakelige
+urban
+urbane
+urbanisere
+urbaniserer
+urbanisering
+urbaniseringa
+urbaniseringen
+urbaniseringens
+urbanisert
+urbaniserte
+urbant
+uærbødig
+uærbødige
+uråd
+urådelig
+urådelige
+urådet
+urealistisk
+urealistiske
+uredd
+uredde
+uredelig
+uredelige
+uregelmessig
+uregelmessige
+uregelmessighet
+uregelmessigheten
+uregelmessighetene
+uregelmessighetens
+uregelmessigheter
+ureinslig
+ureinslige
+uren
+urene
+urent
+urer
+uret
+uåret
+uårets
+urett
+uretten
+urettens
+urettferdig
+urettferdige
+urettferdighet
+urettferdigheten
+urettferdighetens
+urettmessig
+urettmessige
+uriktig
+uriktige
+uriktigere
+urimelig
+urimelige
+urimelighet
+urimeligheten
+urimelighetene
+urimelighetens
+urimeligheter
+urin
+urinen
+urinens
+uærlig
+uærlige
+urmaker
+urmakere
+urmakeren
+urmakerens
+urmakeres
+urmakerne
+urmakernes
+urna
+urne
+urnen
+urnene
+urnens
+urner
+urnordisk
+uro
+uroa
+urodd
+urodde
+uroe
+uroen
+uroens
+uroer
+uroes
+uroet
+urokråka
+urokråke
+urokråkene
+urokråker
+urolig
+urolige
+urolighet
+uroligheten
+urolighetene
+urolighetens
+uroligheter
+uroppførelse
+uroppførelsen
+uroppførelsens
+urovekkende
+urørlig
+urørlige
+urørt
+urskog
+urskogen
+urskogene
+urskogens
+urskoger
+urt
+urta
+urten
+urtene
+urtens
+urter
+urtid
+urtida
+urtiden
+urtidens
+uruguayaner
+uruguayanere
+uruguayaneren
+uruguayanerens
+uruguayaneres
+uruguayanerne
+uruguayanernes
+uruguayansk
+urutinert
+urutinerte
+urven
+urvne
+uryddig
+uryddige
+uryggelig
+uryggelige
+usagt
+usaklig
+usaklige
+usannsynlig
+usannsynlige
+usannsynlighet
+usannsynligheten
+usannsynlighetens
+usedelig
+usedelige
+usedvanlig
+usedvanlige
+uselgelig
+uselgelige
+usentimental
+usentimentale
+usett
+usigelig
+usigelige
+usikker
+usikkerhet
+usikkerheten
+usikkerhetens
+usikkert
+usikre
+usikres
+uskadd
+uskadde
+uskadeliggjøres
+uskikk
+uskikka
+uskikkelig
+uskikkelige
+uskreven
+uskrevet
+uskrevne
+uskuldig
+uskyld
+uskylda
+uskylden
+uskyldig
+uskyldige
+uskyldighet
+uskyldigheten
+uskyldighetens
+uskyldigste
+usæl
+usle
+usæle
+uslepen
+uslepent
+uslepne
+usling
+uslingen
+uslingene
+uslingens
+uslinger
+uslitelig
+uslitelige
+uslokkelig
+uslokkelige
+usælt
+usmak
+usmakelig
+usmakelige
+usmaken
+usømmelig
+usømmelige
+uspesifisert
+uspesifiserte
+ussel
+usseldom
+usseldommen
+usseldommens
+usselt
+ustø
+ustabil
+ustabile
+ustabilitet
+ustabilt
+ustand
+ustanselig
+ustanselige
+ustøe
+ustell
+ustellet
+ustelt
+ustelte
+ustøtt
+ustyrlig
+ustyrlige
+ustyrtelig
+ustyrtelige
+usunn
+usunne
+usunt
+usurpator
+usurpatoren
+usurpatorens
+usvikelig
+usvikelige
+usynlig
+usynlige
+ut
+utaboks
+utabords
+utabygds
+utabys
+utad
+utadrettede
+utadrettet
+utadørs
+utadvendt
+utadvendte
+utafor
+utafra
+utakk
+utakka
+utakken
+utakkens
+utakknemlig
+utakknemlige
+utal
+utalands
+utalandsk
+utalet
+utalets
+utall
+utallet
+utallets
+utallig
+utallige
+utapå
+utarbeidd
+utarbeidde
+utarbeide
+utarbeidelse
+utarbeidelsen
+utarbeidelsens
+utarbeidende
+utarbeider
+utarbeides
+utarbeidet
+utarbeidets
+utarbeiding
+utarbeidinga
+utarbeidingen
+utarbeidingens
+utarma
+utarta
+utarte
+utartet
+utasa
+utaskjærs
+utast
+utav
+utbasunere
+utbasunerer
+utbasunert
+utbasunerte
+utbe
+utbedra
+utbedre
+utbedrer
+utbedres
+utbedret
+utbedring
+utbedringa
+utbedringen
+utbedringene
+utbedringens
+utbedringer
+utbetal
+utbetale
+utbetalende
+utbetaler
+utbetales
+utbetaling
+utbetalinga
+utbetalingen
+utbetalingene
+utbetalinger
+utbetalt
+utbetalte
+utblåsing
+utblåsinga
+utblåsingen
+utblåsingens
+utbre
+utbredd
+utbredde
+utbredelse
+utbredelsen
+utbredelsens
+utbredt
+utbredte
+utbreide
+utbreie
+utbreiing
+utbreiinga
+utbrent
+utbrente
+utbrer
+utbres
+utbrettbilde
+utbrettbildet
+utbrodering
+utbroderinga
+utbroderingen
+utbroderingens
+utbrott
+utbrottet
+utbrottets
+utbrøt
+utbrudd
+utbrudda
+utbruddene
+utbruddet
+utbruddets
+utbrukt
+utbrukte
+utbryte
+utbryter
+utbryteren
+utbryterens
+utbryterne
+utbuling
+utbulinga
+utbulingen
+utbulingens
+utby
+utbydd
+utbygd
+utbygda
+utbygde
+utbygg
+utbygge
+utbygger
+utbygges
+utbygget
+utbyggets
+utbygging
+utbygginga
+utbyggingen
+utbyggingens
+utbygginger
+utbyggingsfond
+utbyggingsfondet
+utbyggingsfondets
+utbyggingsplan
+utbyggingsplanen
+utbyggingsplanene
+utbyggingsplanens
+utbyggingsplaner
+utbytning
+utbytningen
+utbytningens
+utbytta
+utbytte
+utbytter
+utbyttes
+utbyttet
+utbytting
+utbyttinga
+utbyttingen
+utbyttingens
+utdanna
+utdanne
+utdannede
+utdannelse
+utdannelsen
+utdannelsene
+utdannelsens
+utdannelser
+utdannelsestilbud
+utdanner
+utdannes
+utdannet
+utdanning
+utdanninga
+utdanningen
+utdanningstilbud
+utdanningstilbudet
+utdanningstilbudets
+utdata
+utdataene
+utdødd
+utdebattert
+utdebatterte
+utdele
+utdeler
+utdeles
+utdeling
+utdelinga
+utdelingen
+utdelt
+utdelte
+utdrag
+utdraget
+utdragets
+utdrags
+utdrivelse
+utdrivelsen
+utdrivelsens
+utdriving
+utdrivinga
+utdrivingen
+utdrivingens
+utdype
+utdyper
+utdypes
+utdypet
+ute
+utearbeid
+utearbeidet
+utearbeidets
+uteble
+uteblei
+utebli
+uteblitt
+uteblivelse
+uteblivelsen
+uteblivelsens
+utekkelig
+utekkelige
+uteksaminere
+uteksaminert
+uteksaminerte
+uteksperimentere
+uteksperimenterer
+uteksperimentert
+uteksperimenterte
+utelat
+utelate
+utelatelse
+utelatelsen
+utelatelsene
+utelatelsens
+utelatelser
+utelater
+utelates
+utelating
+utelatinga
+utelatingen
+utelatingens
+utelatt
+uteligger
+uteliggere
+uteliggeren
+uteliggerens
+uteliggeres
+uteliggerne
+uteliggernes
+utelot
+utelukke
+utelukkende
+utelukker
+utelukkes
+utelukket
+uten
+utenat
+utenboks
+utenbords
+utenbygds
+utenbys
+utendørs
+utenfor
+utenforliggende
+utenforstående
+utenfra
+utenkelig
+utenkelige
+utenlands
+utenlandsk
+utenlandske
+utenlandsreise
+utenlandsreisen
+utenlandsreisene
+utenlandsreisens
+utenlandsreiser
+utenom
+utenomparlamentarisk
+utenomparlamentariske
+utenpå
+utenriksdepartement
+utenriksdepartementet
+utenriksdepartementets
+utenriksfart
+utenriksfarten
+utenriksfartens
+utenrikshandel
+utenrikshandelen
+utenrikshandelens
+utenriksk
+utenrikskomité
+utenrikskomiteen
+utenrikskomiteene
+utenrikskomiteens
+utenrikskomiteer
+utenriksminister
+utenriksministeren
+utenriksministerens
+utenriksministrene
+utenrikspolitikk
+utenrikspolitikken
+utenrikspolitikkens
+utenrikspolitisk
+utenrikspolitiske
+utenriksredaktør
+utenriksredaktøren
+utenriksredaktørene
+utenriksredaktørens
+utenriksredaktører
+utenrikstjeneste
+utenrikstjenesten
+utenrikstjenestens
+utenskjærs
+utenverden
+utenverdenen
+utenverdenens
+uteska
+uteske
+utesker
+utesket
+utestå
+utestående
+utestengt
+utestår
+utett
+utette
+utetter
+utfall
+utfalla
+utfallene
+utfallet
+utfallets
+utfart
+utfarten
+utfartens
+utfelling
+utfellinga
+utfellingen
+utfellingene
+utfellingens
+utfellinger
+utferd
+utferda
+utferden
+utferdene
+utferder
+utferdiga
+utferdige
+utferdiger
+utferdiges
+utferdiget
+utferdslyst
+utferdslysten
+utferdslystens
+utfiska
+utflukt
+utflukta
+utflukten
+utfluktene
+utfluktens
+utflukter
+utflytende
+utflytter
+utflyttere
+utflytteren
+utflytterens
+utflytteres
+utflytterne
+utflytternes
+utflytting
+utflyttinga
+utflyttingen
+utflyttingene
+utflyttingens
+utflyttinger
+utfolda
+utfolde
+utfoldelse
+utfoldelsen
+utfoldelsens
+utfolder
+utfoldet
+utfor
+utfordra
+utfordre
+utfordrende
+utfordrer
+utfordres
+utfordret
+utfordring
+utfordringa
+utfordringen
+utfordringer
+utforkjøring
+utforkjøringen
+utforkjøringens
+utforløypa
+utforløype
+utforløypen
+utforløypene
+utforløypens
+utforløyper
+utform
+utforma
+utforme
+utformede
+utformer
+utformere
+utformes
+utformet
+utforming
+utforminga
+utformingen
+utformingens
+utformning
+utformningen
+utformningens
+utforrenn
+utforrenna
+utforrennene
+utforrennet
+utforrennets
+utforska
+utforske
+utforsker
+utforskes
+utforsket
+utforsking
+utforskinga
+utforskning
+utforskningen
+utforskningens
+utfør
+utføre
+utførelse
+utførelsen
+utførelsens
+utfører
+utføres
+utfresing
+utfresinga
+utfresingen
+utfresingens
+utføring
+utførlig
+utførlige
+utførsel
+utførselen
+utførselens
+utførslene
+utførsler
+utført
+utførte
+utfylle
+utfyllende
+utfyller
+utfylles
+utfylling
+utfyllinga
+utfyllingen
+utfylt
+utfylte
+utgå
+utga
+utgammal
+utgang
+utgangen
+utgangene
+utgangens
+utganger
+utgangsposisjon
+utgangsposisjonen
+utgangsposisjonene
+utgangsposisjonens
+utgangsposisjoner
+utgangspunkt
+utgangspunktene
+utgangspunkter
+utgangspunktet
+utgangspunktets
+utgav
+utgava
+utgave
+utgaven
+utgavene
+utgavens
+utgaver
+utgi
+utgift
+utgifta
+utgiften
+utgiftene
+utgiftens
+utgifter
+utgir
+utgis
+utgitt
+utgivelse
+utgivelsen
+utgivelsens
+utgiver
+utgiveren
+utgiverens
+utgiverne
+utgiving
+utgivinga
+utgivingen
+utgivingens
+utgjorde
+utgjort
+utgjør
+utgjøre
+utgjøres
+utgjøt
+utgliding
+utglidinga
+utglidning
+utglidningen
+utglidningens
+utgår
+utgravering
+utgraveringa
+utgraving
+utgravinga
+utgravingen
+utgravingens
+utgravning
+utgravningen
+utgravningene
+utgravningens
+utgravninger
+utgreiing
+utgreiinga
+utgreiingen
+utgreiingens
+utgreiinger
+utgrunne
+utgått
+utgåtte
+utgyte
+utgytelse
+utgytelsen
+utgytelsens
+utgytt
+utgytte
+uthagen
+uthagens
+uthaler
+uthaleren
+uthalerens
+uthev
+uthevd
+uthevde
+utheve
+uthever
+utheves
+uthevet
+uthogst
+uthogsten
+uthogstens
+utholde
+utholdelig
+utholdende
+utholdenhet
+utholdenheten
+utholdenhetens
+utholder
+utholdt
+uthole
+uthus
+uthuset
+uti
+utid
+utide
+utidig
+utilbørlig
+utilbørlige
+utilfreds
+utilfredse
+utilfredshet
+utilfredsheten
+utilfredshetens
+utilfredstillende
+utilgjengelig
+utilgjengelige
+utilitarisme
+utilitarismen
+utilitarismens
+utillatelig
+utillatelige
+utilpass
+utilstrekkelig
+utilstrekkelige
+uting
+utingen
+utingens
+utjamna
+utjamne
+utjamnet
+utjamning
+utjamninga
+utjevna
+utjevne
+utjevnende
+utjevnes
+utjevnet
+utjevning
+utjevninga
+utkant
+utkanten
+utkantene
+utkantens
+utkanter
+utkantstrøk
+utkantstrøkene
+utkantstrøket
+utkantstrøkets
+utkast
+utkasta
+utkastelse
+utkastelsen
+utkastelsens
+utkastene
+utkaster
+utkastere
+utkasteren
+utkasterens
+utkasteres
+utkasterne
+utkasternes
+utkastet
+utkasting
+utkastinga
+utkastingen
+utkikk
+utkikken
+utkikkene
+utkikker
+utkikket
+utkikkets
+utkikkspost
+utkikksposten
+utkikkspostens
+utkjempe
+utkjempes
+utkjempet
+utkjørsel
+utkjørselen
+utkjørselens
+utkjørsla
+utkjørslene
+utkjørsler
+utkjørt
+utklarere
+utklarerer
+utklasse
+utklasset
+utkledd
+utklekning
+utklekningen
+utklekningens
+utklipp
+utklippet
+utklippets
+utøkning
+utøkningen
+utøkningens
+utkom
+utkomme
+utkommer
+utkommet
+utkrystallisert
+utladd
+utladde
+utladning
+utladningen
+utladningens
+utlagt
+utland
+utlandet
+utlandets
+utlede
+utleder
+utledes
+utledet
+utlegd
+utlegda
+utlegg
+utlegge
+utleggene
+utlegges
+utlegget
+utleia
+utleid
+utleide
+utleie
+utleien
+utleiens
+utleier
+utlending
+utlendingen
+utlendingene
+utlendingens
+utlendinger
+utlevd
+utlever
+utlevere
+utleverer
+utleveres
+utlevering
+utleveringa
+utleveringen
+utleveringene
+utleveringens
+utleveringer
+utlevert
+utleverte
+utligne
+utlignet
+utligning
+utligninga
+utligningen
+utligningens
+utlikne
+utlikner
+utliknet
+utlikning
+utlikninga
+utlikningen
+utlikningens
+utålmodig
+utålmodige
+utålmodighet
+utålmodighets
+utlån
+utlånene
+utlånes
+utlånet
+utlånets
+utlånsavdeling
+utlånsavdelinga
+utlånsavdelingen
+utlånsavdelingene
+utlånsavdelingens
+utlånsavdelinger
+utlånsramma
+utlånsramme
+utlånsrammen
+utlånsrammens
+utlånsvirksomhet
+utlånsvirksomheten
+utlånsvirksomhetens
+utlånt
+utlodde
+utlodning
+utlodningen
+utlodningene
+utlodningens
+utlodninger
+utlove
+utlover
+utlovet
+utløp
+utløpe
+utløper
+utløpere
+utløperen
+utløperens
+utløperes
+utløperne
+utløpernes
+utløpet
+utløpt
+utlært
+utløs
+utløse
+utløser
+utløses
+utløsning
+utløsningen
+utløsningens
+utløst
+utløste
+utlufting
+utluftinga
+utluftning
+utluftningen
+utluftningens
+utlyd
+utlyden
+utlydens
+utlyse
+utlyser
+utløyser
+utløysere
+utløyseren
+utløyserens
+utløyseres
+utløyserne
+utløysernes
+utlyses
+utlysing
+utlysinga
+utlyst
+utlyste
+utmanøvrere
+utmanøvrerer
+utmanøvrert
+utmanøvrerte
+utmark
+utmarka
+utmarken
+utmarkens
+utmarksareal
+utmarsj
+utmarsjen
+utmarsjene
+utmarsjens
+utmarsjer
+utmasa
+utmast
+utmatte
+utmattelse
+utmattelsen
+utmattelsens
+utmattet
+utmatting
+utmattinga
+utmed
+utmeldelse
+utmeldelsen
+utmeldelsens
+utmelding
+utmeldinga
+utmeldingene
+utmeldinger
+utmerke
+utmerkede
+utmerkelse
+utmerkelsen
+utmerkelsene
+utmerkelsens
+utmerkelser
+utmerker
+utmerkes
+utmerket
+utmerking
+utmerkinga
+utmål
+utmåle
+utmålene
+utmålet
+utmåling
+utmålinga
+utmålingen
+utmålingene
+utmålingens
+utømmelig
+utmynting
+utmyntinga
+utmyntingen
+utmyntingens
+utånda
+utånde
+utåndet
+utånding
+utåndinga
+utåndingen
+utåndingens
+utnevne
+utnevnelse
+utnevnelsen
+utnevnelsens
+utnevner
+utnevnes
+utnevning
+utnevninga
+utnevningen
+utnevningens
+utnevnt
+utnevnte
+utnytt
+utnytta
+utnytte
+utnyttelse
+utnyttelsen
+utnyttelsens
+utnyttelsesgrad
+utnyttelsesgraden
+utnyttelsesgradene
+utnyttelsesgradens
+utnyttelsesgrader
+utnytter
+utnyttes
+utnyttet
+utnytting
+utnyttinga
+utom
+utopi
+utopia
+utopien
+utopiens
+utopisk
+utopist
+utopisten
+utopistens
+utover
+utoverhengende
+utpå
+utpakking
+utpakkinga
+utpakningsrom
+utpakningsrommene
+utpakningsrommet
+utpakningsrommets
+utpanting
+utpantinga
+utpantning
+utpantningen
+utpantningens
+utparsellere
+utpeke
+utpeker
+utpekes
+utpekt
+utpekte
+utpensle
+utpint
+utpiping
+utpipinga
+utplanering
+utplaneringa
+utplaneringen
+utplaneringens
+utplanting
+utplantinga
+utplantning
+utplantningen
+utplantningens
+utplasser
+utplassere
+utplasseres
+utplassering
+utplasseringa
+utplasseringen
+utplasseringens
+utplassert
+utplasserte
+utplukk
+utplukka
+utplukket
+utplukking
+utplukkinga
+utplukkingen
+utplukkingens
+utpønske
+utpønsker
+utpønsket
+utporsjonere
+utpost
+utposten
+utpostene
+utpostens
+utposter
+utprega
+utpregede
+utpreget
+utpresning
+utpresningen
+utpresningens
+utpressing
+utpressinga
+utprøve
+utprøving
+utprøvinga
+utprøvingen
+utprøvingens
+utprøvinger
+utprøvning
+utprøvningen
+utprøvningens
+utpumping
+utpumpinga
+utpumpingen
+utpumpingens
+utradere
+utradert
+utraderte
+utranger
+utrangere
+utrangerer
+utrangert
+utrangerte
+utrast
+utrasta
+utrede
+utreder
+utredes
+utredet
+utredning
+utredningen
+utredningene
+utredningens
+utredninger
+utredsel
+utredselen
+utredselens
+utregning
+utregninga
+utregningen
+utregningene
+utrekning
+utrekninga
+utrengsmål
+utrengsmålet
+utrengsmålets
+utrensking
+utrenskinga
+utrenskning
+utrenskningen
+utrenskningene
+utrenskningens
+utrenskninger
+utretta
+utrette
+utrettelig
+utrettelige
+utretter
+utrettes
+utrettet
+utrettingen
+utringa
+utringet
+utringning
+utringningen
+utringningens
+utrivelig
+utrivelige
+utrolig
+utrolige
+utroligste
+utrop
+utrope
+utroper
+utropere
+utroperen
+utroperens
+utroperes
+utroperne
+utropernes
+utropet
+utropsord
+utropsordet
+utropsordets
+utropt
+utropte
+utror
+utrors
+utrøstelig
+utrøttelig
+utrulig
+utrulige
+utrusta
+utruste
+utrustede
+utruster
+utrustet
+utrusting
+utrustinga
+utrustning
+utrustningen
+utrustningens
+utrustninger
+utrydd
+utrydde
+utryddelse
+utryddelsen
+utryddelsens
+utrydder
+utryddes
+utryddet
+utrygg
+utrygge
+utrygghet
+utryggheten
+utrygghetens
+utrygghetsfølelse
+utrygghetsfølelsen
+utrygghetsfølelsens
+utrykk
+utrykket
+utrykningspolitiet
+utrykningssjef
+utrykningssjefen
+utrykningssjefene
+utrykningssjefens
+utrykningssjefer
+utsagn
+utsagnet
+utsalg
+utsalga
+utsalgene
+utsalget
+utsalgets
+utsalgspris
+utsalgsprisen
+utsalgsprisens
+utsatt
+utsatte
+utsæd
+utsæden
+utse
+utseende
+utseendet
+utsende
+utsendelse
+utsendelsen
+utsendelsens
+utsending
+utsendinga
+utsendingen
+utsendingene
+utsendingens
+utsendinger
+utsendt
+utsendte
+utsett
+utsette
+utsettelse
+utsettelsen
+utsettelsene
+utsettelsens
+utsettelser
+utsetter
+utsettes
+utsetting
+utsettinga
+utsida
+utside
+utsiden
+utsidens
+utsig
+utsiget
+utsigets
+utsikt
+utsikten
+utsiktene
+utsiktens
+utsikter
+utsiktspunkt
+utsiktspunktet
+utsiktspunktets
+utsjalting
+utsjaltinga
+utsjekking
+utsjekkinga
+utsjekkingen
+utsjekkingens
+utskeielse
+utskeielsen
+utskeielsens
+utskifting
+utskiftinga
+utskiftingen
+utskiftingens
+utskiftning
+utskiftningen
+utskiftningene
+utskiftningens
+utskiftninger
+utskille
+utskillelse
+utskillelsen
+utskillelsens
+utskiller
+utskilles
+utskilling
+utskillinga
+utskillingen
+utskillingene
+utskillingens
+utskillinger
+utskipe
+utskiping
+utskipinga
+utskjelling
+utskjellinga
+utskjellingen
+utskjellingens
+utskjelt
+utskjelte
+utskjemt
+utskott
+utskottene
+utskottet
+utskottets
+utskrapinga
+utskåren
+utskåret
+utskrevet
+utskrift
+utskrifta
+utskriften
+utskriftene
+utskriftens
+utskrifter
+utskrive
+utskrives
+utskriving
+utskrivinga
+utskrivingen
+utskrivning
+utskrivningen
+utskrivningens
+utsøkt
+utsøkte
+utskudd
+utskuddene
+utskuddet
+utskurd
+utskylling
+utskyllinga
+utskyllingen
+utskyllingens
+utskyting
+utskytinga
+utskytning
+utskytningen
+utskytningens
+utskytningsrampe
+utskytningsrampen
+utskytningsrampens
+utslag
+utslagene
+utslaget
+utslagets
+utslagsgivende
+utslagsvask
+utslagsvasken
+utslagsvaskens
+utsleppet
+utslett
+utsletta
+utslette
+utslettelse
+utslettelsen
+utslettelsens
+utsletter
+utslettes
+utslettet
+utsletting
+utslettinga
+utslipp
+utslippa
+utslippene
+utslippet
+utslitt
+utslitte
+utslått
+utslåtten
+utslåttens
+utslynge
+utsmykking
+utsmykkinga
+utsmykkingen
+utsmykkingens
+utsmykning
+utsmykningen
+utsmykningene
+utsmykningens
+utsmykninger
+utsnakka
+utsnakket
+utsnitt
+utsnittet
+utsolgt
+utsolgte
+utsondre
+utsoning
+utsoninga
+utsorter
+utsortere
+utsorterer
+utsortering
+utsorteringa
+utsortert
+utsorterte
+utsovet
+utsparing
+utsparinga
+utspark
+utsparkene
+utsparket
+utsparkets
+utspekulert
+utspekulerte
+utspent
+utspill
+utspille
+utspillene
+utspiller
+utspilles
+utspillet
+utspilt
+utspilte
+utspinne
+utspionere
+utspionerer
+utspjåka
+utspjåket
+utsprang
+utspranget
+utspre
+utsprede
+utspreder
+utspreding
+utspredinga
+utsprer
+utspring
+utspringet
+utsprungen
+utsprunget
+utspyling
+utspylinga
+utstå
+utstaffere
+utstafferte
+utstansing
+utstansinga
+utsted
+utstede
+utstedelsesdag
+utstedelsesdagen
+utstedelsesdagens
+utstedene
+utsteder
+utstedere
+utstederen
+utstederens
+utstederes
+utstederne
+utstedernes
+utstedes
+utstedet
+utstedets
+utstedt
+utstedte
+utstående
+utstikker
+utstikkere
+utstikkeren
+utstikkerens
+utstikkeres
+utstikkerne
+utstikkernes
+utstikking
+utstikkinga
+utstikning
+utstikningen
+utstill
+utstille
+utstiller
+utstillere
+utstilleren
+utstillerens
+utstilleres
+utstillerne
+utstillernes
+utstilling
+utstillinga
+utstillingen
+utstillingene
+utstillingenes
+utstillinger
+utstillingsareal
+utstillingsarealene
+utstillingsarealet
+utstillingsarealets
+utstillingsbord
+utstilt
+utstilte
+utstod
+utstoppede
+utstopping
+utstoppinga
+utstår
+utstrakt
+utstrakte
+utstrekning
+utstrekningen
+utstrekningene
+utstrekningens
+utstrekninger
+utstråle
+utstråler
+utstråling
+utstrålinga
+utstrålingen
+utstrålingens
+utstrålt
+utstrålte
+utstrømming
+utstrømminga
+utstrømning
+utstrømningen
+utstrømningens
+utstøtt
+utstøtte
+utstudert
+utstuderte
+utstyr
+utstyre
+utstyrer
+utstyres
+utstyret
+utstyrets
+utstyrsforretning
+utstyrsforretningen
+utstyrsforretningens
+utstyrt
+utstyrte
+utstøyte
+utsuger
+utsugere
+utsugeren
+utsugerens
+utsugeres
+utsugerne
+utsugernes
+utsuging
+utsuginga
+utsulta
+utsultet
+utsvevelse
+utsvevelsen
+utsvevelsene
+utsvevelsens
+utsvevelser
+utsyn
+utsynet
+utsynets
+uttak
+uttaka
+uttakene
+uttaket
+uttakets
+uttaking
+uttakinga
+uttakingen
+uttakingene
+uttakingens
+uttakinger
+uttakingskamp
+uttakingskampen
+uttakingskampens
+uttale
+uttalelse
+uttalelsen
+uttalelsene
+uttalelsens
+uttalelser
+uttalemåter
+uttalen
+uttaler
+uttales
+uttalt
+uttalte
+uttatt
+uttelling
+uttellinga
+uttellingen
+uttellingene
+uttellingens
+uttellinger
+uttilbeins
+uttømmende
+uttrekksbord
+uttrekksbordet
+uttrekksbordets
+uttørka
+uttørket
+uttørret
+uttørring
+uttørringa
+uttørringen
+uttørringens
+uttært
+uttrykk
+uttrykke
+uttrykkelig
+uttrykkende
+uttrykkene
+uttrykker
+uttrykkes
+uttrykket
+uttrykksform
+uttrykksforma
+uttrykksformen
+uttrykksformene
+uttrykksformens
+uttrykksformer
+uttrykksfull
+uttrykksfulle
+uttrykt
+uttrykte
+uttur
+utturen
+utturens
+uttvære
+uttværet
+uttværets
+uttynne
+uttynnes
+uttynnet
+uttynning
+utukt
+utukta
+utukten
+utuktens
+utuktig
+utur
+uturen
+uturens
+utvakt
+utvalg
+utvalgene
+utvalget
+utvalgets
+utvalgt
+utvalgte
+utvandra
+utvandre
+utvandrer
+utvandreren
+utvandrerens
+utvandret
+utvandring
+utvandringa
+utvandringen
+utvandringer
+utvanna
+utvannet
+utøve
+utveg
+utvegen
+utvegens
+utvei
+utveien
+utveiene
+utveiens
+utveier
+utveksle
+utveksler
+utvekslet
+utveksling
+utvekslinga
+utvekslingen
+utvekslingens
+utvekslinger
+utvekslingsprogram
+utvekslingsprogrammene
+utvekslingsprogrammer
+utvekslingsprogrammet
+utvekslingsprogrammets
+utvekst
+utveksten
+utvekstene
+utvekstens
+utvekster
+utvelgelse
+utvelgelsen
+utvelgelsens
+utvelgingsproblem
+utvelgingsproblema
+utvelgingsproblemene
+utvelgingsproblemer
+utvelgingsproblemet
+utvelgingsproblemets
+utøvende
+utvendig
+utvendige
+utøver
+utøvere
+utøverne
+utvetydig
+utvetydige
+utvid
+utvida
+utvide
+utvidede
+utvidelse
+utvidelsen
+utvidelsene
+utvidelsens
+utvidelser
+utvider
+utvides
+utvidet
+utviding
+utvidinga
+utvidingen
+utvidingens
+utvikla
+utvikle
+utviklede
+utviklende
+utvikler
+utvikles
+utviklet
+utvikling
+utviklinga
+utviklingen
+utviklingens
+utviklingsarbeid
+utviklingsarbeidet
+utviklingsarbeidets
+utviklingsfase
+utviklingsfasen
+utviklingsfasene
+utviklingsfasens
+utviklingsfaser
+utviklingsfond
+utviklingsfondet
+utviklingsfondets
+utviklingshjelp
+utviklingshjelpen
+utviklingshjelpens
+utviklingsland
+utviklingslanda
+utviklingslandene
+utviklingslandet
+utviklingslandets
+utviklingsprosjekt
+utviklingsprosjektene
+utviklingsprosjektet
+utviklingsprosjektets
+utvilsom
+utvilsomme
+utvilsomt
+utvinne
+utvinner
+utvinnes
+utvinning
+utvinninga
+utvinningen
+utvinningens
+utvirke
+utvise
+utviser
+utvises
+utviska
+utviske
+utvisket
+utvisning
+utvisningen
+utvisningens
+utvist
+utviste
+utvåkt
+utvokst
+utvokste
+utvortes
+utvær
+utværet
+utvungen
+utvungent
+utvungne
+utøy
+utøya
+utydelig
+utydelige
+utøyet
+utyske
+utysker
+utysket
+uunngåelig
+uunngåelige
+uunnskyldelig
+uunnværlig
+uunnværlige
+uutgrunnelig
+uutholdelig
+uutholdelige
+uutslokkelig
+uutslokkelige
+uutståelig
+uutståelige
+uvand
+uvandt
+uvane
+uvanen
+uvanene
+uvanens
+uvaner
+uvanlig
+uvanlige
+uvant
+uvante
+uøvd
+uvegerlig
+uvel
+uvenn
+uvennen
+uvennene
+uvennens
+uvenner
+uvenners
+uvennlig
+uvennlige
+uvenns
+uvennskap
+uvennskapen
+uvennskapens
+uvennskapet
+uvennskapets
+uventet
+uverdig
+uverdige
+uvesentlig
+uvesentlige
+uvett
+uvettet
+uvettets
+uviljen
+uviljens
+uvilkårlig
+uvilkårlige
+uvillig
+uvillige
+uviselig
+uviss
+uvisse
+uvisshet
+uvissheten
+uvisshetens
+uvisst
+uvitende
+uvitenhet
+uvitenheten
+uvitenhetens
+uvæpna
+uvæpnet
+uvær
+uværa
+uvørden
+uvørdent
+uvørding
+uvørdinga
+uvørdingen
+uvørdingens
+uvørdne
+uvøre
+uvøren
+uværene
+uvørent
+uværet
+uværets
+uvørne
+uværsbolk
+uværsbolken
+uværsbolkene
+uværsbolkens
+uværsbolker
+uværsri
+uværsria
+uværsriene
+uvurderlig
+uvurderlige
+v
+øv
+va
+æva
+vabba
+vabbe
+vabber
+vabbet
+vable
+vablen
+vablens
+vad
+vadbein
+vadbeinet
+vadbeinets
+vadde
+vade
+vadefugl
+vadefuglen
+vadefuglene
+vadefuglens
+vadefugler
+vadere
+vaderen
+vaderens
+vadested
+vadestedene
+vadesteder
+vadestedet
+vadestedets
+vadmel
+vadmelet
+vadmelets
+vadmål
+vadmålet
+vadmålets
+vadsekk
+vadsekken
+vadsekkene
+vadsekkens
+vadsekker
+vaffel
+vaffelen
+vaffelens
+vafla
+vafle
+vaflene
+vafler
+vaflet
+vag
+vagabond
+vagabonden
+vagabondene
+vagabondens
+vagabonder
+vage
+vagg
+vagge
+vagget
+vagina
+vaginaen
+vaginaene
+vaginaens
+vaginaer
+vaginal
+vagl
+vagla
+vagle
+vaglen
+vaglens
+vaglet
+vagt
+vaia
+vaie
+vaier
+vaieren
+vaierens
+vaiet
+vairene
+vairer
+vaisenhus
+vaisenhusa
+vaisenhusene
+vaisenhuset
+vaisenhusets
+vak
+vaka
+vakanse
+vakansen
+vakansene
+vakansens
+vakanser
+vakant
+vake
+vaken
+vakent
+vaket
+vakker
+vakkert
+vakla
+vakle
+vakler
+vaklet
+vaklevoren
+vakna
+vakne
+vakner
+vaknet
+vakre
+vakrere
+vakrest
+vakreste
+vaksinasjon
+vaksinasjonen
+vaksinasjonene
+vaksinasjonens
+vaksinasjoner
+vaksine
+vaksinen
+vaksinene
+vaksinens
+vaksiner
+vaksinere
+vaksinerer
+vaksinert
+vakt
+vakta
+vakte
+vaktel
+vaktelen
+vaktelens
+vakten
+vaktene
+vakter
+vakthavende
+vakthold
+vaktholdet
+vaktholdets
+vaktlene
+vaktler
+vaktmester
+vaktmesteren
+vaktmesterens
+vaktmestrene
+vaktpersonale
+vaktpersonalet
+vaktsom
+vakttårn
+vakttårnene
+vakttårnet
+vakttårnets
+vakuum
+vakuuma
+vakuumene
+vakuumer
+vakuumet
+vakuumets
+val
+valbjerk
+valdris
+valdrisen
+valdrisene
+valdrisens
+valdriser
+vale
+valen
+valens
+valeriana
+valerianaen
+valerianaene
+valerianaens
+valerianaer
+valfart
+valfarta
+valfarten
+valfartene
+valfartens
+valfarter
+valfartet
+valg
+valgdag
+valgdagen
+valgdagene
+valgdagens
+valgdager
+valgene
+valget
+valgfri
+valgfrie
+valgkamp
+valgkampanje
+valgkampanjen
+valgkampanjens
+valgkampen
+valgkampens
+valglov
+valglova
+valgloven
+valglovens
+valgmulighet
+valgmuligheten
+valgmulighetene
+valgmulighetens
+valgmuligheter
+valgordning
+valgordninga
+valgordningen
+valgordningens
+valgresultat
+valgresultatene
+valgresultatet
+valgresultatets
+valgseier
+valgseieren
+valgseierens
+valgseirene
+valgt
+valgte
+valgurna
+valgurne
+valgurnen
+valgurnene
+valgurnens
+valgurner
+valhendt
+valium
+valiumet
+valiumets
+valk
+valken
+valkene
+valkens
+valker
+valket
+valkyrja
+valkyrje
+valkyrjen
+valkyrjens
+vallak
+vallaken
+vallakene
+vallakens
+vallaker
+valmue
+valmuen
+valmuens
+valnøtt
+valnøtta
+valnøtten
+valnøttene
+valnøttens
+valnøtter
+valp
+valpa
+valpen
+valpene
+valpens
+valper
+valpet
+valplass
+valplassen
+valplassene
+valplassens
+valplasser
+valør
+valøren
+valørene
+valørens
+valører
+vals
+valsa
+valse
+valsen
+valsene
+valsens
+valser
+valset
+valseverk
+valseverket
+valseverkets
+valta
+valte
+valter
+valtet
+valthorn
+valthornet
+valthornets
+valuta
+valutaen
+valutaene
+valutaens
+valutaer
+valutakrise
+valutakrisen
+valutakrisene
+valutakrisens
+valutakriser
+valutamarked
+valutamarkeda
+valutamarkedene
+valutamarkeder
+valutamarkedet
+valutamarkedets
+vamle
+vammel
+vamp
+vampen
+vampene
+vampens
+vamper
+vampet
+vampyr
+vampyren
+vampyrene
+vampyrens
+vampyrer
+van
+vanadium
+vanakta
+vanakte
+vanakten
+vanaktens
+vanakter
+vanaktet
+vanarta
+vanartede
+vanartet
+vanartig
+vand
+vandal
+vandalen
+vandalene
+vandalens
+vandaler
+vandalisere
+vandaliserer
+vandalisert
+vandaliserte
+vandalisme
+vandalismen
+vandalismens
+vandel
+vandelen
+vandelens
+vandelsattest
+vandelsattesten
+vandelsattestene
+vandelsattestens
+vandelsattester
+vandre
+vandrende
+vandrepokal
+vandrepokalen
+vandrepokalene
+vandrepokalens
+vandrepokaler
+vandrepremie
+vandrepremien
+vandrepremiens
+vandrer
+vandreren
+vandrerens
+vandret
+vandreutstilling
+vandreutstillingen
+vandreutstillingene
+vandreutstillingens
+vandreutstillinger
+vandring
+vandringa
+vandringen
+vandringer
+vandskjær
+vandskjæra
+vandskjæren
+vandskjærene
+vandskjærens
+vandskjærer
+vandskjæret
+vandskjærets
+vandt
+vane
+vanedannende
+vanen
+vanene
+vaner
+vanere
+vanfør
+vanføre
+vanførelag
+vanførhet
+vanførheten
+vanførhetens
+vanført
+vang
+vangen
+vangene
+vangens
+vanger
+vanhell
+vanhellet
+vanhellets
+vanhelliga
+vanhellige
+vanhelliger
+vanhelliget
+vanhelsa
+vanhelse
+vanhelsen
+vanhelsens
+vanhjulpen
+vanilje
+vaniljeis
+vaniljeisen
+vaniljeisens
+vaniljen
+vaniljene
+vaniljens
+vaniljer
+vanka
+vankant
+vankanta
+vankanten
+vankantens
+vankantet
+vanke
+vankelmodig
+vanker
+vanket
+vankundig
+vankunna
+vankunne
+vanlagnad
+vanlagnaden
+vanlagnadens
+vanlig
+vanlige
+vanligst
+vanligste
+vanligvis
+vanlykka
+vanlykke
+vanlykken
+vanlykkens
+vanmakt
+vanmakta
+vanmakten
+vanmaktens
+vanmektig
+vann
+vannavkjølt
+vannbasseng
+vannbassenget
+vannbassengets
+vannbøtta
+vannbøtte
+vannbøtten
+vannbøttene
+vannbøttens
+vannbøtter
+vanndamp
+vanndampen
+vanndampens
+vanne
+vanner
+vannet
+vannets
+vannflata
+vannflate
+vannflaten
+vannflatene
+vannflatens
+vannflater
+vannforsyning
+vannforsyninga
+vannforsyningen
+vannforsyningene
+vannforsyningens
+vannforsyninger
+vannføring
+vannføringa
+vannføringen
+vannføringens
+vannglass
+vannglassa
+vannglassene
+vannglasset
+vannglassets
+vanning
+vanninga
+vanningen
+vanningene
+vanningens
+vanninger
+vannkanon
+vannkanonen
+vannkanonene
+vannkanonens
+vannkanoner
+vannklosett
+vannklosetta
+vannklosettene
+vannklosetter
+vannklosettet
+vannklosettets
+vannkraft
+vannkrafta
+vannkraften
+vannkraftens
+vannkum
+vannkummen
+vannkummene
+vannkummens
+vannkummer
+vannledning
+vannledningen
+vannledningene
+vannledningens
+vannledninger
+vannlilja
+vannlilje
+vannliljen
+vannliljene
+vannliljens
+vannliljer
+vannlinja
+vannlinje
+vannlinjen
+vannlinjens
+vannmangel
+vannmangelen
+vannmangelens
+vannoverflate
+vannoverflaten
+vannoverflatens
+vannpytt
+vannpytten
+vannpyttene
+vannpyttens
+vannpytter
+vannåra
+vannåre
+vannåren
+vannårene
+vannrenna
+vannrenne
+vannrennene
+vannrenner
+vannårens
+vannårer
+vannrett
+vannrik
+vannrotta
+vannrotte
+vannrottene
+vannrotter
+vanns
+vannskille
+vannskillet
+vannskorpa
+vannskorpe
+vannskorpen
+vannskorpens
+vannspeil
+vannspeilet
+vannspeilets
+vannspring
+vannspringen
+vannspringens
+vannstand
+vannstanden
+vannstandens
+vannstråle
+vannstrålen
+vannstrålens
+vanntett
+vannturbin
+vannturbinen
+vannturbinene
+vannturbinens
+vannturbiner
+vannvater
+vannvateret
+vannvaterets
+vannvatret
+vannvatrets
+vannverk
+vannverka
+vannverkene
+vannverket
+vannverkets
+vanære
+vanærer
+vanrøkt
+vanrøkta
+vanrøkte
+vanært
+vanærte
+vanry
+vanryet
+vanryets
+vansira
+vansire
+vansirer
+vansiret
+vanskapning
+vanskapningen
+vanskapningene
+vanskapningens
+vanskapninger
+vanskapt
+vanskapte
+vanske
+vanskelig
+vanskelige
+vanskeligere
+vanskeliggjort
+vanskeliggjør
+vanskeliggjøre
+vanskeliggjøres
+vanskelighet
+vanskeligheten
+vanskelighetene
+vanskelighetens
+vanskeligheter
+vanskelighetsgrad
+vanskeligst
+vanskeligste
+vansken
+vanskens
+vansker
+vanskjebne
+vanskjebnen
+vanskjebnens
+vanskjøtsel
+vanskjøtselen
+vanskjøtselens
+vanskjøtta
+vanskjøtte
+vanskjøtter
+vanskjøttet
+vansmekta
+vansmekte
+vansmektet
+vanstell
+vanstelle
+vanstellet
+vanstyre
+vanstyret
+vant
+vantakk
+vantakka
+vantakken
+vantakkens
+vante
+vanten
+vantens
+vanter
+vantet
+vantrivdes
+vantrives
+vantrivs
+vantrivsel
+vantrivselen
+vantrivselens
+vantro
+vantroa
+vantroen
+vantroens
+vantru
+vantrua
+vanvare
+vanvidd
+vanviddet
+vanviddets
+vanvittig
+vanvørde
+vanvørdnad
+vanvørdnaden
+vanvørdnadens
+var
+vara
+varaforkvinne
+varaforkvinnen
+varaforkvinnene
+varaforkvinnens
+varaforkvinner
+varaformann
+varaformannen
+varaformannens
+varaformenn
+varaformennene
+varaformennenes
+varaformenns
+varakvinne
+varakvinnen
+varakvinnene
+varakvinnens
+varakvinner
+varamann
+varamannen
+varamannens
+varamenn
+varamennene
+varamennenes
+varamenns
+varaordfører
+varaordførere
+varaordføreren
+varaordførerens
+varaordføreres
+varaordførerne
+varaordførernes
+vararepresentant
+vararepresentanten
+vararepresentantene
+vararepresentantens
+vararepresentanter
+varastyre
+varastyret
+varde
+varden
+vardens
+vardøger
+vardøgeret
+vardøgerets
+vardøgra
+vardøgrene
+vare
+varebeholdning
+varebeholdningen
+varebeholdningene
+varebeholdningens
+varebeholdninger
+varebil
+varebilen
+varebilene
+varebilens
+varebiler
+varebytte
+varebyttet
+varefakta
+varefaktaen
+varefaktaens
+varehandel
+varehandelen
+varehandelens
+varehus
+varehusa
+varehusene
+varehuset
+varehusets
+varelager
+varelageret
+varelagerets
+varelagre
+varemerka
+varemerke
+varemerkene
+varemerker
+varemerket
+varemessa
+varemesse
+varemessen
+varemessene
+varemessens
+varemesser
+varen
+varene
+varer
+varet
+vareta
+varetakelse
+varetakelsen
+varetakelsens
+varetaking
+varetakinga
+varetekt
+varetekta
+varetekten
+varetektens
+varetektsarrest
+varetektsarresten
+varetektsarrestens
+varetektsfange
+varetektsfangen
+varetektsfangene
+varetektsfangens
+varetektsfanger
+varetrekk
+varetrekkene
+varetrekket
+varetrekkets
+varevogn
+varevogna
+varevognen
+varevognene
+varevognens
+varevogner
+varg
+vargen
+vargene
+vargens
+varger
+variabel
+variabelen
+variabelens
+variable
+variablene
+variabler
+variant
+varianten
+variantene
+variantens
+varianter
+variasjon
+variasjonen
+variasjonene
+variasjonens
+variasjoner
+varier
+variere
+varierende
+varierer
+variert
+varierte
+varieteen
+varieteens
+varietet
+varieteten
+varietetene
+varietetens
+varieteter
+varig
+varige
+varighet
+varigheten
+varighetens
+varlig
+varm
+varma
+varmblods
+varmblodshest
+varmblodshesten
+varmblodshestene
+varmblodshestens
+varmblodshester
+varme
+varmeanlegg
+varmeanlegga
+varmeanleggene
+varmeanlegget
+varmeanleggets
+varmeflaska
+varmeflaske
+varmeflaskene
+varmeflasker
+varmefordeling
+varmefordelingen
+varmefordelingens
+varmegrad
+varmegraden
+varmegradene
+varmegradens
+varmegrader
+varmekilde
+varmekilden
+varmekildens
+varmekraftverk
+varmekraftverka
+varmekraftverkene
+varmekraftverket
+varmekraftverkets
+varmemengde
+varmemengden
+varmemengdens
+varmen
+varmens
+varmer
+varmere
+varmes
+varmest
+varmeste
+varmet
+varmt
+varp
+varpe
+varpet
+varsel
+varselet
+varselets
+varsellampe
+varsellampen
+varsellampene
+varsellampens
+varsellamper
+varsko
+varskoet
+varskoets
+varsku
+varskudd
+varskudde
+varskuet
+varskuets
+varsla
+varsle
+varslede
+varsler
+varslet
+varslets
+varsling
+varslinga
+varslingen
+varslingens
+varsom
+varsomhet
+varsomheten
+varsomhetens
+varsomme
+varsomt
+vart
+varte
+varulv
+varulven
+varulvene
+varulvens
+varulver
+vas
+vasall
+vasallen
+vasallene
+vasallens
+vasaller
+vase
+vasekopp
+vasekoppen
+vasekoppene
+vasekoppens
+vasekopper
+vaselin
+vaselinen
+vaselinens
+vasen
+vaser
+vaset
+vask
+vaska
+vaske
+vaskeekte
+vaskefilla
+vaskefille
+vaskefillene
+vaskefiller
+vaskekjøkken
+vaskekjøkkenet
+vaskekjøkkenets
+vaskeklut
+vaskekluten
+vaskeklutene
+vaskeklutens
+vaskekluter
+vaskekona
+vaskekone
+vaskekonene
+vaskekoner
+vaskemaskin
+vaskemaskinen
+vaskemaskinene
+vaskemaskinens
+vaskemaskiner
+vaskemiddel
+vaskemiddelet
+vaskemiddelets
+vaskemidla
+vaskemidlene
+vaskemidler
+vaskemidlet
+vaskemidlets
+vasken
+vasker
+vaskeri
+vaskeria
+vaskeriene
+vaskeriet
+vaskeriets
+vaskerom
+vaskeromma
+vaskerommene
+vaskerommet
+vaskerommets
+vaskes
+vasket
+vasne
+vass
+vassarv
+vassarven
+vassarvens
+vassbasseng
+vassbassenget
+vassbassengets
+vassblande
+vassbløyte
+vassbløyter
+vassbøtta
+vassbøtte
+vassbøttene
+vassbøtter
+vassdamp
+vassdampen
+vassdampens
+vassdrag
+vassdraga
+vassdragene
+vassdraget
+vassdragets
+vassdragsdirektorat
+vassdragsdirektoratet
+vassdragsdirektoratets
+vassdråpe
+vassdråpen
+vassdråpene
+vassdråpens
+vassdråper
+vasse
+vassen
+vassfall
+vassfallet
+vassfallets
+vassflata
+vassflate
+vassflaten
+vassflatene
+vassflatens
+vassflater
+vassflom
+vassforsyning
+vassforsyningen
+vassforsyningene
+vassforsyningens
+vassforsyninger
+vassføring
+vassføringa
+vassglass
+vassglasset
+vassglassets
+vassgraut
+vassgrauten
+vassgrautens
+vasskald
+vasskanon
+vasskanonen
+vasskanonene
+vasskanonens
+vasskanoner
+vassklosett
+vassklosettet
+vassklosettets
+vasskraft
+vasskrafta
+vasskraften
+vasskraftens
+vassledning
+vassledningen
+vassledningene
+vassledningens
+vassledninger
+vasslendt
+vassmangel
+vassmangelen
+vassmangelens
+vassåre
+vassrenna
+vassrenne
+vassrennene
+vassrenner
+vassrett
+vassrik
+vassrotte
+vasstett
+vasstrukken
+vassturbin
+vassturbinen
+vassturbinens
+vassvelling
+vassvellinga
+vassverk
+vassverket
+vassverkets
+vater
+vateret
+vaterets
+vaterpass
+vaterpasset
+vaterpassets
+vatersott
+vatersotta
+vatersotten
+vatersottens
+vatn
+vatna
+vatne
+vatnene
+vatner
+vatnet
+vatnets
+vatning
+vatninga
+vatningen
+vatningens
+vatra
+vatre
+vatrer
+vatret
+vatrets
+vatt
+vatten
+vattens
+vatter
+vattere
+vatterer
+vattert
+vatterte
+vattet
+vaudeville
+vaudevillen
+vaudevillens
+vavle
+vavlet
+øvd
+øvde
+vådeskott
+vådeskottet
+vådeskottets
+vådeskudd
+vådeskudda
+vådeskuddene
+vådeskuddet
+vådeskuddets
+ve
+æve
+øve
+ved
+veda
+vedbend
+vedbenden
+vedbendens
+vedble
+vedblei
+vedbli
+vedblir
+vedblitt
+vedblivende
+vedda
+vedde
+veddemål
+veddemåla
+veddemålene
+veddemålet
+veddemålets
+vedder
+veddet
+øvede
+veden
+vedens
+vederheftig
+vederheftighet
+vederheftigheten
+vederheftighetens
+vederkvega
+vederkvege
+vederkvegelse
+vederkvegelsen
+vederkvegelsene
+vederkvegelsens
+vederkvegelser
+vederkveger
+vederkveget
+vederlag
+vederlaga
+vederlagene
+vederlaget
+vederlagets
+vederstyggelig
+vedfamn
+vedfang
+vedfanget
+vedfangets
+vedfavn
+vedgå
+vedgikk
+vedgår
+vedgås
+vedgått
+vedheng
+vedhenga
+vedhengene
+vedhenget
+vedhengets
+vedhogger
+vedhoggere
+vedhoggeren
+vedhoggerens
+vedhoggeres
+vedhoggerne
+vedhoggernes
+vedhogst
+vedhogsten
+vedhogstens
+vedhogster
+vedhugger
+vedhuggere
+vedhuggeren
+vedhuggerens
+vedhuggeres
+vedhuggerne
+vedhuggernes
+vedhugst
+vedhugsten
+vedhugstens
+vedkjenne
+vedkjenner
+vedkjent
+vedkjente
+vedkom
+vedkomme
+vedkommende
+vedkommer
+vedlagt
+vedlagte
+vedlegg
+vedlegga
+vedleggene
+vedlegger
+vedlegget
+vedleggets
+vedlikehold
+vedlikeholde
+vedlikeholdet
+vedlikeholdsfri
+vedlikeholdskontrakt
+vedlikeholdskontrakten
+vedlikeholdskontraktene
+vedlikeholdskontraktens
+vedlikeholdskontrakter
+vedlikeholdt
+vedr
+vedrøre
+vedrørende
+vedskjul
+vedskjula
+vedskjulene
+vedskjulet
+vedskjulets
+vedta
+vedtak
+vedtaka
+vedtakene
+vedtaket
+vedtakets
+vedtaksfør
+vedtar
+vedtas
+vedtatt
+vedtatte
+vedtekt
+vedtekta
+vedtekten
+vedtektene
+vedtektens
+vedtekter
+vedtok
+vedvare
+vedvarende
+veg
+vegarbeid
+vegarbeidene
+vegarbeider
+vegarbeidet
+vegarbeidets
+vegd
+vegdirektorat
+vegdirektoratet
+vegdirektoratets
+vege
+vegen
+vegene
+vegens
+veger
+vegetabilsk
+vegetar
+vegetaren
+vegetarene
+vegetarens
+vegetarer
+vegetarianer
+vegetarianere
+vegetarianeren
+vegetarianerens
+vegetarianeres
+vegetarianerne
+vegetarianernes
+vegetarisk
+vegetasjon
+vegetasjonen
+vegetasjonene
+vegetasjonens
+vegetasjoner
+vegetativ
+vegetere
+vegeterer
+vegetert
+vegeterte
+vegforbindelse
+vegforbindelsen
+vegforbindelsens
+vegfraktfører
+vegfraktførere
+vegfraktføreren
+vegfraktførerens
+vegfraktføreres
+vegfraktførerne
+vegfraktførernes
+vegg
+veggavis
+veggavisa
+veggavisen
+veggavisene
+veggavisens
+veggaviser
+veggen
+veggene
+veggens
+vegger
+veggrep
+veggrepet
+veggrepets
+veggs
+veggtavla
+veggtavle
+veggtavlen
+veggtavlene
+veggtavlens
+veggtavler
+veggteppe
+veggteppene
+veggtepper
+veggteppet
+vegkant
+vegkanten
+vegkantene
+vegkantens
+vegkanter
+vegkontor
+vegkontorene
+vegkontorer
+vegkontoret
+vegkontorets
+vegkryss
+vegkryssa
+vegkryssene
+vegkrysset
+vegkryssets
+vegne
+vegnett
+vegnettet
+vegnettets
+vegpatrulja
+vegpatrulje
+vegpatruljen
+vegpatruljene
+vegpatruljens
+vegpatruljer
+vegra
+vegre
+vegrer
+vegret
+vegring
+vegringa
+vegringen
+vegringens
+vegs
+vegsjef
+vegsjefen
+vegsjefene
+vegsjefens
+vegsjefer
+vegstrekning
+vegstrekningen
+vegstrekningene
+vegstrekningens
+vegstrekninger
+vegstubb
+vegstubben
+vegstubbene
+vegstubbens
+vegstubber
+vegtrafikklov
+vegtrafikklova
+vegtrafikkloven
+vegtrafikklovens
+vegvesen
+vegvesenet
+vegvesenets
+vei
+veianlegg
+veianlegga
+veianleggene
+veianlegget
+veianleggets
+veiarbeid
+veiarbeidene
+veiarbeider
+veiarbeidet
+veiarbeidets
+veibane
+veibanen
+veibanene
+veibanens
+veibaner
+veibygging
+veibygginga
+veibyggingen
+veibyggingens
+veid
+veidd
+veidde
+veide
+veidekke
+veidekket
+veidekkets
+veie
+veien
+veiene
+veiens
+veier
+veiet
+veiforbindelse
+veiforbindelsen
+veiforbindelsens
+veigrepet
+veik
+veikant
+veikanten
+veikantene
+veikantens
+veikanter
+veike
+veiken
+veikhelsa
+veikhelset
+veikhet
+veikheten
+veikhetens
+veikne
+veikontor
+veikontorene
+veikontorer
+veikontoret
+veikontorets
+veikryss
+veikryssa
+veikryssene
+veikrysset
+veikryssets
+veikskap
+veikt
+veilede
+veiledende
+veileder
+veiledere
+veilederen
+veilederens
+veilederes
+veilederne
+veiledernes
+veiledning
+veiledningen
+veiledningens
+veilengde
+veilengden
+veilengdens
+veinett
+veinettet
+veinettets
+veipatrulje
+veipatruljen
+veipatruljene
+veipatruljens
+veipatruljer
+veis
+veisjef
+veisjefen
+veisjefene
+veisjefens
+veisjefer
+veistrekning
+veistrekningen
+veistrekningene
+veistrekningens
+veistrekninger
+veistubb
+veistubben
+veistubbene
+veistubbens
+veistubber
+veit
+veita
+veitene
+veiter
+veitsla
+veitsle
+veitslene
+veitsler
+veiv
+veiva
+veive
+veivesen
+veivesenet
+veivesenets
+vek
+veka
+veke
+veken
+veket
+vekhet
+vekheten
+vekhetens
+vekk
+vekke
+vekkeklokke
+vekkelse
+vekkelsen
+vekkelsens
+vekker
+vekkerklokka
+vekkerklokke
+vekkerklokken
+vekkerklokkene
+vekkerklokkens
+vekkerklokker
+vekkerur
+vekkerura
+vekkerurene
+vekkeruret
+vekkerurets
+vekket
+vekking
+vekkinga
+vekkingen
+vekkingens
+vekna
+vekne
+vekner
+veknet
+vekning
+vekninga
+vekningen
+vekningens
+veksel
+vekselen
+vekselens
+vekselstrøm
+vekselstrømmen
+vekselstrømmens
+vekselstrømsgenerator
+vekselstrømsgeneratoren
+vekselstrømsgeneratorens
+vekselvirkning
+vekselvirkningen
+vekselvirkningens
+vekselvis
+vekskap
+veksle
+vekslende
+vekslepenger
+veksler
+vekslet
+veksling
+vekst
+veksten
+vekstene
+vekstens
+vekster
+veksterlig
+veksthus
+veksthusa
+veksthusene
+veksthuset
+veksthusets
+vekstliv
+vekstperiode
+vekstperioden
+vekstperiodens
+vekt
+vekta
+vekte
+vekten
+vekter
+vektere
+vekteren
+vekterens
+vekteres
+vekterne
+vekternes
+vektig
+vektige
+vektor
+vektordiagram
+vektordiagrammet
+vektordiagrammets
+vektoren
+vektorene
+vektorens
+vektorer
+vektskål
+vektskåla
+vektskålen
+vektskålens
+vekttall
+vekttallet
+vekttallets
+vel
+velassortert
+velbefinnende
+velberga
+velberget
+velbrukt
+velbrukte
+velde
+veldedig
+veldedige
+veldedighet
+veldedigheten
+veldedighetens
+veldefinert
+veldefinerte
+veldig
+veldige
+velegnet
+velferd
+velferda
+velferden
+velferdene
+velferdens
+velferdskontor
+velferdskontorene
+velferdskontorer
+velferdskontoret
+velferdskontorets
+velferdssamfunn
+velferdssamfunnet
+velferdssamfunnets
+velferdsstat
+velferdsstaten
+velferdsstatene
+velferdsstatens
+velferdsstater
+velfortjent
+velg
+velge
+velgående
+velgåendet
+velger
+velgere
+velgeren
+velgerens
+velgeres
+velgerne
+velgernes
+velges
+velgjerning
+velgjerninga
+velgjerningen
+velgjerningene
+velgjerningens
+velgjerninger
+velgjort
+velgjørende
+velgjører
+velgjørere
+velgjøreren
+velgjørerens
+velgjøreres
+velgjørerne
+velgjørernes
+velhavende
+velholden
+velholdt
+velholdte
+ævelig
+velkjent
+velkjente
+velkledd
+velklingende
+velkommen
+velkomment
+velkomne
+velkomst
+velkomsten
+velkomstene
+velkomstens
+velkomster
+vell
+velle
+vellet
+vellevnet
+velling
+vellinga
+vellingen
+vellingene
+vellingens
+vellinger
+vellæte
+vellætet
+vellukt
+vellukta
+vellukten
+velluktens
+vellyd
+vellyden
+vellydens
+vellykka
+vellykkede
+vellykket
+vellykt
+vellykte
+vellyst
+vellysta
+vellysten
+vellystens
+velmakt
+velmakta
+velmenende
+velmente
+velnøgd
+veloppdragen
+velordnede
+velosiped
+velosipeden
+velosipedene
+velosipedens
+velosipeder
+veloverveid
+velpleid
+velrenommert
+øvelse
+øvelsen
+øvelsene
+øvelsens
+øvelser
+velsett
+velsign
+velsigna
+velsigne
+velsignelse
+velsignelsen
+velsignelsens
+velsignet
+velsigning
+velsigninga
+velsigningen
+velsigningens
+velsk
+velsmakende
+velspilt
+velstand
+velstanden
+velstandens
+velstandsfolk
+velstandsfolket
+velstandsfolkets
+velstandsøkning
+velstandsøkningen
+velstandsøkningens
+velstelt
+velstilt
+velstudert
+velt
+veltalende
+velte
+velten
+velter
+veltes
+veltet
+velunderrettet
+velur
+veluren
+velurens
+veluret
+velurets
+velutstyrt
+velutstyrte
+velutviklede
+velutviklet
+velvalgt
+veløvd
+veløvet
+velvilje
+velviljen
+velviljens
+velvillig
+velvillige
+velvære
+velværet
+velynder
+velynderen
+velynderens
+velyndest
+velyndesten
+velyndestens
+vemme
+vemmelig
+vemmelse
+vemmelsen
+vemmelsens
+vemmes
+vemod
+vemodet
+vemodets
+vemodig
+vemtes
+ven
+vende
+vendekrets
+vendekretsen
+vendekretsene
+vendekretsens
+vendekretser
+vendelrot
+vendelrota
+vendelroten
+vendelrotens
+vendepunkt
+vendepunkter
+vendepunktet
+vendepunktets
+vender
+vendere
+venderen
+venderens
+vendes
+vendetta
+vendettaen
+vendettaens
+vending
+vendinga
+vendinger
+vendt
+vendte
+vene
+ævene
+venen
+vener
+venerasjon
+venerasjonen
+venerasjonene
+venerasjonens
+venerasjoner
+venetiansk
+venezuelaner
+venezuelanere
+venezuelaneren
+venezuelanerens
+venezuelaneres
+venezuelanerne
+venezuelanernes
+venezuelansk
+veng
+vengebåt
+vengebåten
+vengebåtene
+vengebåtens
+vengebåter
+vengen
+vengene
+vengens
+venger
+venn
+venne
+vennen
+vennene
+vennens
+venner
+venners
+vennesæl
+venninna
+venninne
+venninnen
+venninnene
+venninnens
+venninner
+vennlig
+vennlige
+vennligere
+vennlighet
+vennligheten
+vennlighetens
+vennligsinnet
+vennligst
+venns
+vennskap
+vennskapelig
+vennskapelige
+vennskapelighet
+vennskapeligheten
+vennskapelighetens
+vennskapen
+venstre
+venstrelag
+venstrelaget
+venstrelagets
+venstremann
+venstremannen
+venstremannens
+venstremenn
+venstremennene
+venstremennenes
+venstremenns
+venstreradikal
+venstres
+venstresida
+venstreside
+venstresiden
+venstresidene
+venstresidens
+venstresider
+venstrevridd
+vent
+venta
+vente
+ventede
+ventelig
+ventelista
+venteliste
+ventelisten
+ventelistene
+ventelistens
+ventelister
+ventende
+venter
+ventes
+ventet
+ventetid
+ventetida
+ventetiden
+ventetidens
+ventil
+ventilasjon
+ventilasjonen
+ventilasjonene
+ventilasjonens
+ventilasjoner
+ventilator
+ventilatoren
+ventilatorene
+ventilatorens
+ventilatorer
+ventilen
+ventilene
+ventilens
+ventiler
+ventilere
+ventilerer
+ventilert
+ventilerte
+venting
+ventinga
+ventingen
+ventingens
+veps
+vepsen
+vepsene
+vepsens
+vepser
+æver
+øver
+veranda
+verandaen
+verandaene
+verandaens
+verandaer
+verb
+verba
+verbal
+verbale
+verbalet
+verbalhandling
+verbalhandlingen
+verbalhandlingene
+verbalhandlingens
+verbalhandlinger
+verbalsubstantiv
+verbene
+verber
+verbet
+verbets
+verbo
+verbum
+verbumet
+verbumets
+verd
+verda
+verdauke
+verdauken
+verdaukens
+verden
+verdene
+verdenen
+verdenens
+verdens
+verdensberømt
+verdensberømte
+verdensbilde
+verdensbildet
+verdensbildets
+verdensdel
+verdensdelen
+verdensdelene
+verdensdelens
+verdensdeler
+verdenskjent
+verdenskjente
+verdenskrig
+verdenskrigen
+verdenskrigene
+verdenskrigens
+verdenskriger
+verdensmester
+verdensmesteren
+verdensmesterens
+verdensmesterskap
+verdensrekord
+verdensrekorden
+verdensrekordene
+verdensrekordens
+verdensrekorder
+verdensrom
+verdensrommet
+verdensrommets
+verdi
+verdien
+verdiene
+verdiens
+verdier
+verdiforringelse
+verdiforringelsen
+verdiforringelsene
+verdiforringelsens
+verdiforringelser
+verdifull
+verdifulle
+verdifullt
+verdig
+verdige
+verdighet
+verdigheten
+verdighetens
+verdigjenstand
+verdigjenstanden
+verdigjenstandene
+verdigjenstandens
+verdigjenstander
+verdiløs
+verdiløse
+verdisak
+verdisaken
+verdisakene
+verdisakens
+verdisaker
+verdsatt
+verdsens
+verdsette
+verdsetter
+verdsetting
+verdsettinga
+verdsettingen
+verdsettingens
+verdslig
+verdt
+verft
+verfta
+verftene
+verftet
+verftets
+verge
+vergemål
+vergemålet
+vergemålets
+verget
+vergeverk
+verifikasjon
+verifikasjonen
+verifikasjonene
+verifikasjonens
+verifikasjoner
+verifisere
+verifiserer
+verifisert
+verifiserte
+veritabel
+veritabelt
+veritable
+verja
+verje
+verjemål
+verjemålet
+verjemålets
+verjer
+verjet
+verk
+åverk
+verkbrudden
+verke
+verken
+verkene
+verkenet
+verker
+verket
+åverket
+åverkets
+verks
+verksdirektør
+verksdirektøren
+verksdirektørene
+verksdirektørens
+verksdirektører
+verksmester
+verksmesteren
+verksmesterens
+verksmestrene
+verksted
+verkstedene
+verksteder
+verksteders
+verkstedet
+verkstedets
+verkstedindustri
+verkstedindustrien
+verkstedindustriens
+verktøy
+verktøya
+verktøyene
+verktøyer
+verktøyet
+verktøyets
+vermut
+vermuten
+vermutene
+vermutens
+vermuter
+vern
+verne
+vernebuing
+vernebuinga
+verneånd
+verneånden
+verneåndens
+verneplikt
+verneplikta
+verneplikten
+vernepliktens
+vernepliktig
+vernepliktige
+vernet
+vernetoll
+vernetollen
+vernetollens
+verneverdig
+vernissasje
+vernissasjen
+vernissasjene
+vernissasjens
+vernissasjer
+veronal
+veronalen
+veronalens
+veronalet
+veronalets
+veronika
+veronikaen
+veronikaene
+veronikaens
+veronikaer
+verpa
+verpe
+verper
+verpesjuk
+verpet
+verre
+vers
+versal
+versalen
+versalene
+versalens
+versaler
+versefot
+versefoten
+versefotens
+versemål
+versemålet
+versemålets
+verser
+versere
+verserer
+verset
+versets
+versfot
+versifisere
+versifiserer
+versifisert
+versifiserte
+versjon
+versjonen
+versjonene
+versjonens
+versjoner
+verst
+øverst
+verste
+øverste
+øversteprest
+øverstepresten
+øversteprestene
+øversteprestens
+øversteprester
+øverstkommanderende
+versus
+vert
+verten
+vertens
+verter
+vertikal
+vertikalen
+vertikalens
+vertikalt
+vertinne
+vertinnen
+vertinnens
+verts
+vertshus
+vertshusa
+vertshusene
+vertshuset
+vertshusets
+vertskap
+vertskapa
+vertskapene
+vertskaper
+vertskapet
+vertskapets
+verv
+verva
+verve
+verven
+vervene
+vervens
+vervet
+vesal
+vesaldom
+vesaldommen
+vesaldommens
+vesen
+vesena
+vesenene
+vesener
+vesenet
+vesenets
+vesensforskjell
+vesensforskjellen
+vesensforskjellens
+vesentlig
+vesentlige
+vesentligste
+vesir
+vesiren
+vesirene
+vesirens
+vesirer
+veska
+veske
+vesken
+veskens
+vesla
+vesle
+vest
+vesta
+vestafjells
+vestafjelsk
+vestafor
+vestalinne
+vestavind
+vestavinden
+vestavindene
+vestavindens
+vestavinder
+vestavær
+vestaværet
+vestaværets
+vesten
+vestenom
+vestens
+vesterlandsk
+vesterveg
+vesteuropeiske
+vestfolding
+vestfoldingen
+vestfoldingene
+vestfoldingens
+vestfoldinger
+vestfoldsk
+vestibyle
+vestibylen
+vestibylens
+vestindier
+vestindiere
+vestindieren
+vestindierens
+vestindieres
+vestindierne
+vestindiernes
+vestindisk
+vestkyst
+vestkysten
+vestkystens
+vestlandsk
+vestlandske
+vestlending
+vestlendingen
+vestlendingene
+vestlendingens
+vestlendinger
+vestlig
+vestlige
+vestover
+vestre
+vestsida
+vestside
+vestsiden
+vestsidens
+vet
+øvet
+vete
+veten
+veteran
+veteranen
+veteranene
+veteranens
+veteraner
+veterinær
+veterinære
+veterinæren
+veterinærens
+veterinærer
+veterinærhøgskole
+veterinærhøgskolen
+veterinærhøgskolene
+veterinærhøgskolens
+veterinærhøgskoler
+veto
+vetoa
+vetoene
+vetoer
+vetoet
+vetoets
+vett
+vettet
+vettets
+vettig
+vettlaus
+vettug
+vev
+vevbredde
+vevd
+vevde
+veve
+veven
+vevens
+vever
+veveren
+veverens
+veveri
+veveria
+veveriene
+veverier
+veveriet
+veveriets
+vevet
+veving
+vevinga
+vevingen
+vevingens
+vevling
+vevlingen
+vevlingene
+vevlingens
+vevlinger
+vevnad
+vevnaden
+vevnadene
+vevnadens
+vevnader
+vevre
+vevskaft
+vevskaftet
+vevskaftets
+vevskultur
+vevskulturen
+vevskulturens
+vevstol
+vevstolen
+vevstolene
+vevstolens
+vevstoler
+våg
+våga
+vågal
+vågale
+vågalt
+vågd
+vågde
+våge
+vågede
+vågehals
+vågehalsen
+vågehalsens
+vågelig
+vågen
+vågens
+våger
+våget
+vågmor
+vågnad
+vågnaden
+vågnadene
+vågnadens
+vågnader
+vågsom
+vågsomme
+vågsomt
+vi
+via
+viadukt
+viadukten
+viaduktene
+viaduktens
+viadukter
+vibrasjon
+vibrasjonen
+vibrasjonene
+vibrasjonens
+vibrasjoner
+vibrator
+vibratoren
+vibratorene
+vibratorens
+vibratorer
+vibrere
+vibrerer
+vibrert
+vibrerte
+vid
+vidd
+vidda
+vidde
+vidder
+viddet
+vide
+video
+videoband
+videobandet
+videobandets
+videobånd
+videobåndet
+videobåndets
+videoen
+videoens
+videofilm
+videofilmen
+videofilmene
+videofilmens
+videofilmer
+videokamera
+videokameraet
+videokameraets
+videokassett
+videokassetten
+videokassettene
+videokassettens
+videokassetter
+videomaskin
+videomaskina
+videomaskinen
+videomaskinene
+videomaskinens
+videomaskiner
+videoplata
+videoplate
+videoplaten
+videoplatens
+videospiller
+videospillere
+videospilleren
+videospillerens
+videospilleres
+videospillerne
+videospillernes
+videotek
+videoteka
+videotekene
+videoteker
+videoteket
+videotekets
+videre
+videreforhandlere
+videreforhandleren
+videreforhandlerens
+videreføre
+viderefører
+videreføring
+videreføringa
+videreføringen
+videreføringens
+videreført
+videreførte
+videregående
+viderekommen
+viderekomne
+videreutdannelse
+videreutdannelsen
+videreutdannelsens
+videreutdanning
+videreutdanningen
+videreutdanningene
+videreutdanningens
+videreutdanninger
+viderverdighet
+viderverdigheten
+viderverdighetene
+viderverdighetens
+viderverdigheter
+videst
+videste
+vidfarende
+vidgjeten
+vidgjetne
+vidja
+vidje
+vidjeband
+vidjebånd
+vidjebånda
+vidjebåndene
+vidjebåndet
+vidjebåndets
+vidjen
+vidjene
+vidjens
+vidjer
+vidløftig
+vidløftige
+vidspurt
+vidstrakt
+vidstrakte
+vidsynt
+vidsynte
+vidt
+vidtfavnende
+vidtgående
+vidtrekkende
+vidåtta
+vidåtte
+vidunder
+vidundere
+vidunderet
+vidunderlig
+vidunderlige
+vidundre
+vidundret
+vidvank
+vidvanke
+vidvinkellinse
+vie
+vielse
+vielsen
+vielsens
+vier
+viere
+vieren
+vierens
+vieres
+vierne
+viernes
+vies
+viet
+vietnameser
+vietnamesere
+vietnameseren
+vietnameserens
+vietnameseres
+vietnameserne
+vietnamesernes
+vietnamesisk
+vietnamesiske
+vievann
+vievannet
+vievannets
+vift
+vifta
+vifte
+vifteform
+vifteforma
+vifteformen
+vifteformene
+vifteformens
+vifteformer
+viften
+viftens
+vifter
+viftet
+vigd
+vigde
+vigga
+vigge
+viggen
+viggene
+viggens
+vigger
+vigget
+vigla
+vigle
+vigler
+viglet
+vignett
+vignetten
+vignettene
+vignettens
+vignetter
+vigør
+vigøren
+vigørens
+vigsel
+vigselen
+vigselmann
+vigselmannen
+vigselmannens
+vigselmenn
+vigselmennene
+vigselmennenes
+vigselmenns
+vigselsmann
+vigselsmannen
+vigselsmannens
+vigselsmenn
+vigselsmennene
+vigselsmennenes
+vigselsmenns
+vigsla
+vigsle
+vigslene
+vigsler
+vigslet
+vigslevann
+vigslevannet
+vigslevannets
+vigsling
+vigslinga
+vigslingen
+vigslingens
+vik
+vika
+vikar
+vikaren
+vikarene
+vikarens
+vikarer
+vikariat
+vikariata
+vikariatene
+vikariater
+vikariatet
+vikariatets
+vikariere
+vikarierer
+vikariert
+vikarierte
+vike
+viken
+vikende
+vikens
+viker
+viking
+vikingen
+vikingenes
+vikingens
+vikinger
+vikings
+vikingtid
+vikingtida
+vikingtiden
+vikingtidens
+vikingtog
+vikingtoga
+vikingtogene
+vikingtoget
+vikingtogets
+vikka
+vikke
+vikken
+vikkene
+vikkens
+vikker
+vikla
+vikle
+vikler
+viklet
+vikling
+viklinga
+viklingen
+viklinger
+vikt
+vikte
+viktig
+viktige
+viktigere
+viktighet
+viktigheten
+viktighetens
+viktigper
+viktigperen
+viktigperens
+viktigpre
+viktigprene
+viktigst
+viktigste
+viktoriansk
+vikværing
+vikværingen
+vikværingene
+vikværingens
+vikværinger
+vil
+vilden
+vildra
+vildre
+vildren
+vildrer
+vildret
+vilje
+viljen
+viljens
+vilkår
+vilkårene
+vilkåret
+vilkårets
+vilkårlig
+vilkårlige
+vilkårlighet
+vilkårligheten
+vilkårlighetens
+vill
+villa
+villaen
+villaene
+villaens
+villaer
+villand
+villanda
+villapal
+villapalen
+villapalens
+ville
+villelse
+villelsen
+villelsens
+villende
+villender
+villepla
+villeple
+villeplene
+villepler
+villeplet
+villet
+villfarelse
+villfarelsen
+villfarelsens
+villfarende
+villfaring
+villfaringa
+villhet
+villheten
+villhetens
+villig
+villige
+villighet
+villmark
+villmarka
+villmarken
+villmarkene
+villmarkens
+villmarker
+villnis
+villnisa
+villnisene
+villniset
+villnisets
+villrede
+villskap
+villskapen
+villskapens
+villspor
+villspora
+villsporene
+villsporet
+villsporets
+villstrå
+villstyring
+villstyringen
+villstyringene
+villstyringens
+villstyringer
+villsvin
+villsvina
+villsvinene
+villsvinet
+villsvinets
+villvest
+villvesten
+villvestens
+villvin
+villvinen
+villvinens
+vilska
+vilske
+vilt
+vilter
+viltert
+viltet
+viltets
+viltre
+viltstell
+vima
+vime
+vimer
+vimet
+vimpel
+vimpelen
+vimpelens
+vimplene
+vimpler
+vimra
+vimre
+vimrer
+vimret
+vims
+vimsa
+vimse
+vimsen
+vimsens
+vimser
+vimset
+vimsete
+vin
+vind
+vinddrag
+vinddraget
+vinddragets
+vinde
+vindebro
+vindebroa
+vindebroene
+vindebroer
+vindebru
+vindebrua
+vindebruen
+vindebruene
+vindebruens
+vindebruer
+vindeltrapp
+vindeltrappa
+vindeltrappen
+vindeltrappene
+vindeltrappens
+vindeltrapper
+vinden
+vindene
+vinder
+vindfall
+vindfallet
+vindfallets
+vindfang
+vindfanga
+vindfangene
+vindfanget
+vindfangets
+vindflage
+vindfløy
+vindfløya
+vindforhold
+vindforholdene
+vindig
+vinding
+vindinga
+vindingen
+vindingene
+vindingens
+vindinger
+vindingsforhold
+vindingsforholdet
+vindingsforholdets
+vindingstall
+vindingstallet
+vindingstallets
+vindisere
+vindiserer
+vindisert
+vindiserte
+vindkast
+vindkasta
+vindkastene
+vindkastet
+vindkastets
+vindkula
+vindkule
+vindkulen
+vindkulene
+vindkulens
+vindkuler
+vindrue
+vindruen
+vindruene
+vindruens
+vindruer
+vindsel
+vindselen
+vindselens
+vindskeiv
+vindski
+vindskia
+vindskjerm
+vindskjermen
+vindskjermens
+vindslene
+vindsler
+vindstille
+vindstyrke
+vindstyrken
+vindstyrkens
+vindt
+vindu
+vinduene
+vinduenes
+vinduer
+vinduet
+vinduets
+vindusinnfatning
+vindusinnfatningen
+vindusinnfatningens
+vinduskarm
+vinduskarmen
+vinduskarmene
+vinduskarmens
+vinduskarmer
+vindusruta
+vindusrute
+vindusruten
+vindusrutene
+vindusrutens
+vindusruter
+vinen
+vinene
+vinens
+viner
+ving
+øving
+øvinga
+vinge
+vingen
+øvingen
+vingene
+øvingene
+vingens
+øvingens
+vinger
+øvinger
+vingeslag
+vingeslaga
+vingeslagene
+vingeslaget
+vingeslagets
+vingla
+vingle
+vinglet
+vinglete
+vingling
+vinglinga
+vinglingen
+vinglingens
+øvingslærer
+øvingslærere
+øvingslæreren
+øvingslærerens
+øvingslæreres
+øvingslærerne
+øvingslærernes
+øvingsoppgave
+øvingsoppgaven
+øvingsoppgavene
+øvingsoppgavens
+øvingsoppgaver
+vink
+vinke
+vinkel
+vinkelbein
+vinkelbeinet
+vinkelbeinets
+vinkelen
+vinkelens
+vinkelhaka
+vinkelhake
+vinkelhaken
+vinkelhakens
+vinkelrett
+vinker
+vinket
+vinkle
+vinkler
+vinmonopol
+vinmonopolet
+vinmonopolets
+vinn
+vinne
+vinner
+vinnere
+vinneren
+vinnerens
+vinnerlag
+vinnerlaga
+vinnerlagene
+vinnerlaget
+vinnerlagets
+vinnerne
+vinnes
+vinnesjuk
+vinning
+vinninga
+vinnskipelig
+vinsj
+vinsje
+vinsjen
+vinsjene
+vinsjens
+vinsjer
+vinter
+vinterdag
+vinterdagen
+vinterdagene
+vinterdagens
+vinterdager
+vinteren
+vinterens
+vinterferie
+vinterferien
+vinterferiens
+vinterhalvår
+vinterhalvåret
+vinterhalvårets
+vinterlig
+vinterlige
+vintersesong
+vintersesongen
+vintersesongens
+vinterstid
+vinterull
+vintre
+vintrene
+vintrer
+vinyl
+vinylen
+vinylens
+vipa
+vipe
+vipen
+vipene
+vipens
+viper
+vipp
+vippa
+vippe
+vippen
+vippens
+vipper
+vippet
+vips
+vipsa
+vipser
+vipset
+virak
+viraken
+virakens
+virginsk
+viril
+virile
+virilitet
+viriliteten
+virilitetens
+virilt
+virka
+virke
+åvirke
+virkedag
+virkedagen
+virkedagene
+virkedagens
+virkedager
+virkelig
+virkelige
+virkeliggjøre
+virkeliggjøres
+virkelighet
+virkeligheten
+virkelighetens
+virkemiddel
+virkemiddelet
+virkemiddelets
+virkemidla
+virkemidlene
+virkemidler
+virkemidlet
+virkemidlets
+virkemåte
+virkemåten
+virkemåtens
+virkende
+virker
+virket
+åvirket
+virkning
+virkningen
+virkningene
+virkningens
+virkninger
+virkningsfull
+virkningsfulle
+virkningsfullt
+virksom
+virksomhet
+virksomheten
+virksomhetene
+virksomhetens
+virksomheter
+virksomme
+virksomt
+virologi
+virologien
+virologiens
+virra
+virre
+virrer
+virret
+virtuell
+virtuelle
+virtuelt
+virtuos
+virtuosen
+virtuosens
+virtuositet
+virtuositeten
+virtuositetens
+virus
+virusa
+virusene
+viruset
+virusets
+virusinfeksjon
+virusinfeksjonen
+virusinfeksjonene
+virusinfeksjonens
+virusinfeksjoner
+virvar
+virvaret
+virvarets
+virvel
+virveldyr
+virveldyra
+virveldyrene
+virveldyret
+virveldyrets
+virvelen
+virvelens
+virvelstrøm
+virvelstrømmen
+virvelstrømmene
+virvelstrømmens
+virvelstrømmer
+virvelvind
+virvelvinden
+virvelvindene
+virvelvindens
+virvelvinder
+virvle
+virvler
+virvles
+vis
+visa
+visaene
+visdom
+visdommen
+visdommens
+vise
+viseformann
+viseformannen
+viseformannens
+viseformenn
+viseformennene
+viseformennenes
+viseformenns
+visekunst
+visekunsten
+visekunstens
+viselig
+visen
+visene
+visent
+viser
+visere
+viseren
+viserens
+visergutt
+visergutten
+viserguttene
+viserguttens
+visergutter
+vises
+visesang
+visesangen
+visesangens
+visesanger
+visesangere
+visesangeren
+visesangerens
+visesangeres
+visesangerne
+visesangernes
+viset
+visibel
+visir
+visira
+visirene
+visirer
+visiret
+visirets
+visitas
+visitasen
+visitasene
+visitasens
+visitaser
+visitasjon
+visitasjonen
+visitasjonene
+visitasjonens
+visitasjoner
+visitere
+visiterer
+visitert
+visiterte
+visitt
+visitten
+visittene
+visittens
+visitter
+visittkort
+visittkorta
+visittkortene
+visittkortet
+visittkortets
+visjon
+visjonen
+visjonene
+visjonens
+visjoner
+visjonær
+visjonæren
+visjonærene
+visjonærens
+visjonærer
+visk
+viske
+viskelær
+viskelæra
+viskelærene
+viskelæret
+viskelærets
+visken
+viskens
+viskos
+viskositet
+viskositeten
+viskositetens
+visla
+visle
+vislelyd
+vislelyden
+vislelydene
+vislelydens
+vislelyder
+visler
+vislet
+vismut
+vismuten
+vismutens
+visne
+visp
+vispe
+vispen
+vispens
+vispet
+viss
+visse
+visselig
+vissen
+visshet
+vissheten
+visshetens
+visst
+visste
+visstnok
+vist
+viste
+visualisere
+visualiserer
+visualisert
+visualiserte
+visuell
+visuelle
+visuelt
+visum
+visumet
+visumets
+visvas
+visvaset
+visvasets
+vit
+vita
+vitae
+vitaer
+vitaet
+vital
+vitale
+vitalitet
+vitaliteten
+vitalitetens
+vitamin
+vitamina
+vitaminene
+vitaminer
+vitaminet
+vitaminets
+vitaminisere
+vitaminiserer
+vitaminisert
+vitaminiserte
+vite
+vitebegjærlig
+vitelyst
+vitelysta
+vitelysten
+vitelystens
+viten
+vitende
+vitendet
+vitenskap
+vitenskapelig
+vitenskapelige
+vitenskapen
+vitenskapens
+vitenskapskvinna
+vitenskapskvinne
+vitenskapskvinnen
+vitenskapskvinnene
+vitenskapskvinnens
+vitenskapskvinner
+vitenskapsmann
+vitenskapsmannen
+vitenskapsmannens
+vitenskapsmenn
+vitenskapsmennene
+vitenskapsmennenes
+vitenskapsmenns
+vites
+vitne
+vitnefør
+vitnemål
+vitnemåla
+vitnemålene
+vitnemålet
+vitnemålets
+vitnene
+vitneprov
+vitneprova
+vitneprovene
+vitneprovet
+vitneprovets
+vitner
+vitnesbyrd
+vitnesbyrda
+vitnesbyrdene
+vitnesbyrdet
+vitnesbyrdets
+vitnet
+vitriol
+vitriolen
+vitriolene
+vitriolens
+vitrioler
+vits
+vitsa
+vitsen
+vitsene
+vitsens
+vitser
+vitset
+vitskap
+vitskapen
+vitskapene
+vitskapens
+vitskaper
+vitskapskvinna
+vitskapskvinne
+vitskapskvinnene
+vitskapskvinner
+vitskapsmann
+vitskapsmannen
+vitskapsmannens
+vitskapsmenn
+vitskapsmennene
+vitskapsmennenes
+vitskapsmenns
+vitsmaker
+vitsmakere
+vitsmakeren
+vitsmakerens
+vitsmakeres
+vitsmakerne
+vitsmakernes
+vitterlig
+vitterlighet
+vitterligheten
+vitterlighetens
+vittig
+vittige
+vittighet
+vittigheten
+vittighetens
+viv
+vivas
+vivasitet
+vivasiteten
+vivasitetens
+viven
+vivendel
+vivendelen
+vivendelens
+vivens
+vivet
+viviseksjon
+viviseksjonen
+viviseksjonene
+viviseksjonens
+viviseksjoner
+våk
+våka
+våke
+våken
+våkent
+våker
+våkn
+våkne
+våknende
+våkner
+våknet
+våkt
+våkte
+våla
+våle
+vøle
+vøler
+vålet
+vøling
+vølinga
+vølingen
+vølingens
+vålt
+vølt
+vølte
+vånd
+vånda
+vånden
+våndene
+våndens
+vånder
+våndet
+våning
+våningen
+våningene
+våningens
+våninger
+våningshus
+våningshusa
+våningshusene
+våningshuset
+våningshusets
+vodka
+vodkaen
+vodkaens
+voffa
+voffe
+voffer
+voffet
+vog
+vogga
+vogge
+voggende
+vogger
+vogget
+vogn
+vogna
+vognen
+vognene
+vognens
+vogner
+vognkort
+vognkortet
+vognkortets
+vognretur
+vognreturen
+vognreturene
+vognreturens
+vognreturer
+vokabular
+vokabulara
+vokabularene
+vokabularer
+vokabularet
+vokabularets
+vokal
+vokalen
+vokalene
+vokalens
+vokaler
+vokalisere
+vokaliserer
+vokalisert
+vokaliserte
+vokalisk
+vokalist
+vokalisten
+vokalistene
+vokalistens
+vokalister
+vokalskifte
+vokativ
+vokativen
+vokativene
+vokativens
+vokativer
+voks
+voksbilde
+vokse
+voksen
+voksende
+voksens
+vokser
+vokset
+vokskabinettet
+voksne
+vokst
+vokste
+vokster
+voksteren
+voksterens
+voksterlig
+vokstervilkår
+vokstervilkårene
+vokstervilkåret
+vokstervilkårets
+vokstrene
+vokt
+vokta
+vokte
+vokter
+voktere
+vokteren
+vokterens
+vokteres
+vokterne
+vokternes
+voktet
+vol
+vold
+volde
+volden
+voldens
+volder
+voldgift
+voldgiften
+voldgiftens
+voldgiftsdom
+voldgiftsdommen
+voldgiftsdommene
+voldgiftsdommens
+voldgiftsdommer
+voldsanvendelse
+voldsdåd
+voldsdåden
+voldsdådens
+voldshandling
+voldshandlingen
+voldshandlingene
+voldshandlingens
+voldshandlinger
+voldsom
+voldsomhet
+voldsomheten
+voldsomhetens
+voldsomme
+voldsomt
+voldsverk
+voldsverka
+voldsverkene
+voldsverket
+voldsverkets
+voldt
+voldta
+voldtar
+voldtatt
+voldte
+voldtekt
+voldtekta
+voldtekten
+voldtektene
+voldtektens
+voldtekter
+voldtok
+voll
+vollen
+vollene
+vollens
+volley
+volleyball
+volleyballen
+volleyballens
+volleyen
+volleyens
+volontør
+volontøren
+volontørene
+volontørens
+volontører
+volontrisa
+volontrise
+volontrisen
+volontrisene
+volontrisens
+volontriser
+volt
+volta
+volten
+voltene
+voltens
+voltmeter
+voltmeteret
+voltmeterets
+voltmetra
+voltmetre
+voltmetrene
+voltmetret
+voltmetrets
+volum
+voluma
+volumene
+volumer
+volumet
+volumets
+voluminøs
+voluminøse
+voluminøst
+volva
+volve
+vom
+vomfyll
+vomfylla
+vomfyllet
+vomfyllets
+vomma
+vommen
+vommens
+vommer
+von
+vona
+vonbrott
+vonbrottet
+vonbrottets
+vond
+vonde
+vondlynt
+vondord
+vondorda
+vondordene
+vondordet
+vondordets
+vondskap
+vondskapen
+vondskapens
+vondt
+vone
+voner
+vonlaus
+vonlig
+vonløyse
+vont
+vonte
+vorde
+vordende
+vornedskapet
+vorr
+vorren
+vorrene
+vorrens
+vorrer
+vorspiel
+vorspielet
+vorspielets
+vorsteher
+vorstehere
+vorsteheren
+vorsteherens
+vorsteheres
+vorsteherne
+vorstehernes
+vorstehhund
+vorstehhunden
+vorstehhundene
+vorstehhundens
+vorstehhunder
+vorta
+vorte
+vorten
+vortene
+vortens
+vorter
+vortesvin
+vortesvina
+vortesvinene
+vortesvinet
+vortesvinets
+vossing
+vossingen
+vossingene
+vossingens
+vossinger
+vota
+votaene
+voter
+votere
+voterer
+votering
+voteringa
+voteringen
+voteringens
+votert
+voterte
+vott
+votten
+vottene
+vottens
+votter
+votum
+votumet
+votumets
+vov
+vove
+vovede
+vovet
+våpen
+våpenet
+våpenets
+våpenfabrikk
+våpenfabrikken
+våpenfabrikkene
+våpenfabrikkens
+våpenfabrikker
+våpenfør
+våpenskjold
+våpenskjolda
+våpenskjoldet
+våpenskjoldets
+våpenstillstand
+våpenstillstanden
+våpenstillstandens
+våpentekniske
+våpenøvelse
+våpenøvelsen
+våpenøvelsens
+våpenøving
+våpenøvinga
+våpenøvingen
+våpenøvingens
+våpna
+væpna
+væpne
+væpnede
+våpnene
+våpnenes
+væpner
+væpnere
+væpneren
+væpnerens
+væpneres
+væpnerne
+væpnernes
+væpnet
+vrå
+vår
+vær
+vør
+vrak
+vraka
+vrake
+vraker
+vraket
+vrakgods
+vrakgodset
+vrakgodsets
+vrakrest
+vrakresten
+vrakrestene
+vrakrestens
+vrakrester
+vrakt
+vrakte
+vralta
+vralte
+vralter
+vraltet
+vrang
+vrange
+vranghet
+vrangheten
+vranghetens
+vrangsida
+vrangside
+vrangsiden
+vrangsidens
+vrangvilje
+vrangviljen
+vrangviljens
+vrangvillig
+vrant
+vrante
+vranten
+vrantens
+værbitt
+vårbløyta
+vårbløyte
+vårbær
+vårbærene
+vårbæret
+vårbærets
+værbror
+værbroren
+værbrorens
+vårdag
+vårdagen
+vårdagene
+vårdagens
+vårdager
+vørde
+vørder
+vørdnad
+vørdnaden
+vørdnadens
+vørdne
+vørdsam
+vørdslaus
+vørdsle
+vørdt
+vørdte
+være
+vøre
+øvre
+vred
+vreden
+vredens
+vrei
+værelse
+værelsene
+værelser
+værelsers
+værelses
+værelset
+vråen
+våren
+væren
+vråene
+vrenge
+vrenger
+vråens
+vårens
+værens
+vråer
+værer
+vører
+våres
+været
+værfar
+værfaren
+værfarens
+vårfiske
+vårfisket
+vårflommen
+vårflommens
+værforhold
+værforholda
+værforholdene
+værgud
+værguden
+værgudene
+værgudens
+værguder
+værhår
+værhåret
+værhårets
+vri
+vridd
+vridde
+vrider
+vridere
+vrideren
+vriderens
+vrideres
+vriderne
+vridernes
+vridning
+vridningen
+vridningene
+vridningens
+vridninger
+vrien
+vriene
+øvrig
+øvrige
+øvrighet
+øvrigheten
+øvrighetens
+øvrighetsperson
+øvrighetspersonen
+øvrighetspersonene
+øvrighetspersonens
+øvrighetspersoner
+vrikk
+vrikka
+vrikke
+vrikker
+vrikket
+vrimla
+vrimle
+vrimlene
+vrimler
+vrimlet
+vrimmel
+vrimmelen
+vrimmelens
+vrinsk
+vrinske
+vrinsket
+vriompeis
+vriompeisen
+vriompeisene
+vriompeisens
+vriompeiser
+vrir
+vrist
+vrista
+vriste
+vårjamdøger
+vårjamdøgn
+vårjevndøgn
+vårknipa
+vårknipe
+vræl
+værlag
+værlaget
+værlagets
+vræle
+vrælet
+vårlig
+værlig
+vårløsning
+vårløsningen
+vårløsningens
+vrælt
+vrælte
+vårløysing
+vårløysinga
+værmelding
+værmeldinga
+værmeldingen
+værmeldingene
+værmeldingens
+værmeldinger
+værmor
+værmora
+vørnad
+vørnaden
+vørnadens
+våronn
+våronna
+våronnen
+våronnene
+våronnens
+våronner
+vårpart
+vårparten
+vårpartens
+værs
+vørsam
+vårsesjon
+vårsesjonen
+vårsesjonene
+vårsesjonens
+vårsesjoner
+vørsla
+vørsle
+vørsler
+vårsol
+vårsola
+vårsolen
+vårsolens
+vårt
+vært
+vørt
+vørte
+vårtegn
+vårtegna
+vårtegnene
+vårtegnet
+vårtegnets
+vørter
+vørteren
+vørterens
+vørteret
+vørterets
+vørterkaka
+vørterkake
+vørterkaken
+vørterkakene
+vørterkakens
+vørterkaker
+vørterøl
+vørterølet
+vørterølets
+vårtes
+værvarsling
+værvarslinga
+værvarslingen
+værvarslingens
+vårvinne
+vrøvl
+vrøvla
+vrøvle
+vrøvler
+vrøvlet
+vrøvlete
+vås
+vsa
+våse
+våset
+våsete
+væska
+væske
+væsken
+væskens
+væsker
+væsket
+våt
+væta
+våte
+væte
+væten
+vætens
+væter
+våtlendt
+våtserviett
+våtservietten
+våtserviettene
+våtserviettens
+våtservietter
+vått
+vætt
+vætte
+vugga
+vugge
+vuggen
+vuggene
+vuggens
+vugger
+vugget
+vulgarisere
+vulgariserer
+vulgarisert
+vulgariserte
+vulgarisme
+vulgarismen
+vulgarismens
+vulgær
+vulgære
+vulgært
+vulka
+vulkan
+vulkanen
+vulkanene
+vulkanens
+vulkaner
+vulkaniser
+vulkanisere
+vulkaniserer
+vulkanisert
+vulkaniserte
+vulke
+vulker
+vulket
+vunne
+vunnet
+vurder
+vurdere
+vurderer
+vurderes
+vurdering
+vurderinga
+vurderingen
+vurderingene
+vurderinger
+vurderingsspørsmål
+vurderingsspørsmålet
+vurderingsspørsmålets
+vurdert
+vurderte
+vvs
+vy
+vyen
+vyene
+vyens
+vyer
+walk
+walkie
+walkover
+walkoveren
+walkoverens
+wankelmotor
+wankelmotoren
+wankelmotorens
+water
+watere
+wateret
+watt
+watten
+wattene
+wattens
+wc
+weasel
+weaselen
+weaselens
+weekend
+weekenden
+weekendene
+weekendens
+weekender
+weltervekt
+west
+western
+westernen
+westernene
+westernens
+whig
+whigen
+whigene
+whigens
+whiger
+whiskers
+whiskersene
+whisky
+whiskyen
+whiskyene
+whiskyens
+whiskyer
+whist
+whisten
+whistens
+widescreen
+widescreenen
+widescreenens
+wiener
+wienerbrød
+wienerbrøda
+wienerbrødene
+wienerbrødet
+wienerbrødets
+wienere
+wieneren
+wienerens
+wieneres
+wienerne
+wienernes
+wienerpølsa
+wienerpølse
+wienerpølsen
+wienerpølsene
+wienerpølsens
+wienerpølser
+wienerschnitzel
+wienerschnitzelen
+wienerschnitzelens
+wienerschnitzlene
+wienerschnitzler
+wienervals
+wienervalsen
+wienervalsene
+wienervalsens
+wienervalser
+wienerwurst
+wienerwursten
+wienerwurstene
+wienerwurstens
+wienerwurster
+wigwam
+wire
+wiren
+wirene
+wirens
+wirer
+xantippa
+xantippe
+xantippen
+xantippene
+xantippens
+xantipper
+xeroform
+xeroformen
+xeroformens
+xerofytt
+xerofytten
+xerofyttene
+xerofyttens
+xerofytter
+xerografere
+xerograferer
+xerografert
+xerograferte
+xerografi
+xerografien
+xerografiens
+xylofon
+xylofonen
+xylofonene
+xylofonens
+xylofoner
+xylograf
+xylografen
+xylografene
+xylografens
+xylografer
+xylografi
+xylografia
+xylografien
+xylografiene
+xylografiens
+xylografier
+xylografiet
+xylografiets
+øy
+øya
+yacht
+yachten
+yachtene
+yachtens
+yachter
+yale
+yalelås
+yalelåsen
+yalelåsens
+yankee
+yankeen
+yankeene
+yankeens
+yankeer
+yard
+yarden
+yardene
+yardens
+øyas
+øybu
+øybuen
+øybuene
+øybuens
+øybuer
+øydd
+øydde
+øyde
+Øydegard
+Øydegarden
+Øydegardens
+øydelegge
+øydelegging
+øydelegginga
+øydeleggingen
+øydeleggingens
+øydemark
+øydemarka
+øydemarken
+øydemarkens
+ydmyk
+ydmyke
+ydmykelse
+ydmykelsen
+ydmykelsens
+ydmyker
+ydmyket
+ydmykt
+ydmykte
+øye
+øyeblikk
+øyeblikkelig
+øyeblikkelige
+øyeblikket
+øyeblikkets
+øyebryn
+øyebryna
+øyebrynene
+øyebrynet
+øyebrynets
+øyehår
+øyehårene
+øyehåret
+øyehårets
+øyekast
+øyekasta
+øyekastene
+øyekastet
+øyekastets
+øyelege
+øyelegen
+øyelegens
+øyelokk
+øyelokka
+øyelokkene
+øyelokket
+øyelokkets
+yemenitt
+yemenitten
+yemenittene
+yemenittens
+yemenitter
+yemenittisk
+øyenbryn
+øyenbryna
+øyenbrynene
+øyenbrynet
+øyenbrynets
+øyene
+øyenlokk
+øyenlokket
+øyenlokkets
+øyenstein
+øyensteinen
+øyensteinens
+øyensten
+øyenstenen
+øyenstenens
+øyensynlig
+øyentjener
+øyentjenere
+øyentjeneren
+øyentjenerens
+øyentjeneres
+øyentjenerne
+øyentjenernes
+øyer
+øyestikker
+øyestikkere
+øyestikkeren
+øyestikkerens
+øyestikkeres
+øyestikkerne
+øyestikkernes
+øyesykdom
+øyesykdommen
+øyesykdommene
+øyesykdommens
+øyesykdommer
+øyesyn
+øyesynet
+øyesynets
+øyet
+øyevippe
+øyevippen
+øyevippene
+øyevippens
+øyevipper
+øyevitne
+øyevitnet
+øygard
+øygarden
+øygardens
+øygruppa
+øygruppe
+øygruppen
+øygruppene
+øygruppens
+øygrupper
+øyk
+øyken
+øykene
+øykens
+øyker
+yl
+yle
+yler
+ylet
+ylt
+ylte
+ymis
+ymist
+ymse
+ymt
+ymta
+ymte
+ymten
+ymtens
+ymter
+ymtet
+ynda
+ynde
+yndefull
+ynden
+yndens
+ynder
+yndest
+yndet
+yndig
+yndige
+yndling
+yndlingen
+yndlingene
+yndlingens
+yndlinger
+øyne
+øynene
+øyner
+øynes
+øynet
+yngel
+yngelen
+yngelens
+ynges
+yngla
+yngle
+yngler
+ynglet
+yngling
+ynglinga
+ynglingen
+ynglingene
+ynglingens
+ynglinger
+yngre
+yngres
+yngst
+yngste
+yngstemann
+yngstemannen
+yngstemannens
+yngstemenn
+yngstemennene
+yngstemennenes
+yngstemenns
+yngtes
+ynk
+ynka
+ynke
+ynkelig
+ynken
+ynkens
+ynker
+ynkes
+ynket
+ynking
+ynkinga
+ynkingen
+ynkingens
+ynktes
+ynkverdig
+yoga
+yogaen
+yogaens
+yogatilhenger
+yogatilhengere
+yogatilhengeren
+yogatilhengerens
+yogatilhengeres
+yogatilhengerne
+yogatilhengernes
+yoghurt
+yoghurten
+yoghurtens
+yogi
+yogien
+yogiene
+yogiens
+yogier
+yppa
+yppal
+yppalt
+yppe
+ypper
+ypperlig
+ypperlige
+ypperst
+ypperste
+yppersteprest
+ypperstepresten
+yppersteprestene
+yppersteprestens
+yppersteprester
+yppes
+yppet
+yppig
+yr
+øyr
+øyra
+yre
+yrende
+øyrene
+yrer
+øyrer
+yret
+øyret
+yrka
+yrke
+yrkene
+yrker
+yrkesgruppa
+yrkesgruppe
+yrkesgruppen
+yrkesgruppene
+yrkesgruppens
+yrkesgrupper
+yrkeskvinna
+yrkeskvinne
+yrkeskvinnen
+yrkeskvinnene
+yrkeskvinnens
+yrkeskvinner
+yrkesliv
+yrkeslivet
+yrkeslivets
+yrkesmyalgi
+yrkesmyalgien
+yrkesmyalgiens
+yrkesorganisasjonenes
+yrkespassive
+yrkesrettleiing
+yrkesrettleiinga
+yrkesskole
+yrkesskolen
+yrkesskolene
+yrkesskolens
+yrkesskoler
+yrkesstatus
+yrkesstatusen
+yrkesstatusens
+yrkesutdannelse
+yrkesutdannelsen
+yrkesutdannelsens
+yrkesutøvere
+yrkesutøveren
+yrkesutøverens
+yrket
+yrkets
+yrregn
+yrregnet
+yrregnets
+yrt
+yrte
+yrvak
+yrvaken
+yrvakens
+ysta
+yste
+ystekjel
+ystekjelen
+ystekjelene
+ystekjelens
+ystekjeler
+yster
+ysteri
+ysteria
+ysteriene
+ysterier
+ysteriet
+ysteriets
+ystet
+yta
+yte
+ytelse
+ytelsen
+ytelsene
+ytelsens
+ytelser
+yter
+yteren
+yterens
+ytes
+ytet
+yting
+ytinga
+ytingen
+ytingens
+ytra
+ytre
+ytret
+ytring
+ytringa
+ytringen
+ytringens
+ytringsfrihet
+ytringsfriheten
+ytringsfrihetens
+ytst
+ytt
+ytte
+ytterbium
+ytterbiumet
+ytterbiumets
+ytterdør
+ytterdøra
+ytterdøren
+ytterdørene
+ytterdørens
+ytterdører
+ytterfrakk
+ytterfrakken
+ytterfrakkene
+ytterfrakkens
+ytterfrakker
+ytterkledning
+ytterkledningen
+ytterkledningene
+ytterkledningens
+ytterkledninger
+ytterklær
+ytterlig
+ytterligere
+ytterliggående
+ytterlighet
+ytterligheten
+ytterlighetene
+ytterlighetens
+ytterligheter
+yttermål
+yttermur
+yttermuren
+yttermurene
+yttermurens
+yttermurer
+yttersida
+ytterside
+yttersiden
+yttersidens
+ytterst
+ytterste
+yttersving
+yttersvingen
+yttersvingene
+yttersvingens
+yttersvinger
+yttertøy
+yttertøyet
+yttertøyets
+yttervegg
+ytterveggen
+ytterveggene
+ytterveggens
+yttervegger
+yttrium
+yven
+yvne
+øyværing
+øyværingen
+øyværingens
+zairer
+zairere
+zaireren
+zairerens
+zaireres
+zairerne
+zairernes
+zairisk
+zambier
+zambiere
+zambieren
+zambierens
+zambieres
+zambierne
+zambiernes
+zambisk
+zanzibarisk
+zeppeliner
+zeppelinere
+zeppelineren
+zeppelinerens
+zeppelineres
+zeppelinerne
+zeppelinernes
+zero
+zoofytt
+zoofytten
+zoofyttene
+zoofyttens
+zoofytter
+zoolog
+zoologen
+zoologene
+zoologens
+zoologer
+zoologi
+zoologien
+zoologiens
+zoologisk
+zoologiske
+zoom
+zooma
+zoome
+zoomen
+zoomens
+zoomer
+zoomet
+zoomlinsa
+zoomlinse
+zoomlinsen
+zoomlinsens
+zootomisk
+zoroaster
+zulu
+zuluen
+zuluene
+zuluens
+zuluer
+zulukaffer
+zulukaffere
+zulukafferen
+zulukafferens
+zulukafferes
+zulukafferne
+zulukaffernes
+zweck
+zwecken
+zweckens
+zygote
+zygoten
+zygotens
diff --git a/etc/filebrowserdb b/etc/filebrowserdb
new file mode 100644
index 0000000..3470867
--- a/dev/null
+++ b/etc/filebrowserdb
@@ -0,0 +1,632 @@
+<!DOCTYPE FILEBROWSER><FILEBROWSER>
+<entry>
+ <key>acroread</key>
+ <type>acroread application</type>
+ <pixmap>acroread.xpm</pixmap>
+ <appname>acroread</appname>
+</entry>
+<entry>
+ <key>c</key>
+ <type>text/c</type>
+ <pixmap>c_src.xpm</pixmap>
+ <appname>kedit</appname>
+</entry>
+<entry>
+ <key>cpp</key>
+ <type>text/cpp</type>
+ <pixmap>c_src.xpm</pixmap>
+ <appname>kedit</appname>
+</entry>
+<entry>
+ <key>gz</key>
+ <type>application/gz</type>
+ <pixmap>tgz.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>h</key>
+ <type>text/h</type>
+ <pixmap>h_src.xpm</pixmap>
+ <appname>kedit</appname>
+</entry>
+<entry>
+ <key>kab</key>
+ <type>kab application</type>
+ <pixmap>kab.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kabalone</key>
+ <type>kabalone application</type>
+ <pixmap>kabalone.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>karchie</key>
+ <type>karchie application</type>
+ <pixmap>karchie.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>karm</key>
+ <type>karm application</type>
+ <pixmap>karm.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kasteroids</key>
+ <type>kasteroids application</type>
+ <pixmap>kasteroids.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kautorun</key>
+ <type>kautorun application</type>
+ <pixmap>kautorun.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kbiff</key>
+ <type>kbiff application</type>
+ <pixmap>kbiff.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kblackbox</key>
+ <type>kblackbox application</type>
+ <pixmap>kblackbox.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcalc</key>
+ <type>kcalc application</type>
+ <pixmap>kcalc.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmdevices</key>
+ <type>kcmdevices application</type>
+ <pixmap>kcmdevices.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmkpanel</key>
+ <type>kcmkpanel application</type>
+ <pixmap>kcmkpanel.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmkwm</key>
+ <type>kcmkwm application</type>
+ <pixmap>kcmkwm.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmmemory</key>
+ <type>kcmmemory application</type>
+ <pixmap>kcmmemory.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmpartitions</key>
+ <type>kcmpartitions application</type>
+ <pixmap>kcmpartitions.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmpci</key>
+ <type>kcmpci application</type>
+ <pixmap>kcmpci.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmprocessor</key>
+ <type>kcmprocessor application</type>
+ <pixmap>kcmprocessor.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmscsi</key>
+ <type>kcmscsi application</type>
+ <pixmap>kcmscsi.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmsound</key>
+ <type>kcmsound application</type>
+ <pixmap>kcmsound.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmsyssound</key>
+ <type>kcmsyssound application</type>
+ <pixmap>kcmsyssound.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcmx</key>
+ <type>kcmx application</type>
+ <pixmap>kcmx.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kcontrol</key>
+ <type>kcontrol application</type>
+ <pixmap>kcontrol.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kdehelp</key>
+ <type>kdehelp application</type>
+ <pixmap>kdehelp.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kdevelop</key>
+ <type>kdevelop application</type>
+ <pixmap>kdevelop.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kdmconfig</key>
+ <type>kdmconfig application</type>
+ <pixmap>kdmconfig.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kdvi</key>
+ <type>kdvi application</type>
+ <pixmap>kdvi.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kedit</key>
+ <type>kedit application</type>
+ <pixmap>kedit.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kernel</key>
+ <type>kernel application</type>
+ <pixmap>kernel.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>keyboard</key>
+ <type>keyboard application</type>
+ <pixmap>keyboard.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfax</key>
+ <type>kfax application</type>
+ <pixmap>kfax.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfind</key>
+ <type>kfind application</type>
+ <pixmap>kfind.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfloppy</key>
+ <type>kfloppy application</type>
+ <pixmap>kfloppy.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfm</key>
+ <type>kfm application</type>
+ <pixmap>kfm.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfm_fulltrash</key>
+ <type>kfm_fulltrash application</type>
+ <pixmap>kfm_fulltrash.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfm_home</key>
+ <type>kfm_home application</type>
+ <pixmap>kfm_home.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfm_refresh</key>
+ <type>kfm_refresh application</type>
+ <pixmap>kfm_refresh.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfm_trash</key>
+ <type>kfm_trash application</type>
+ <pixmap>kfm_trash.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfontmanager</key>
+ <type>kfontmanager application</type>
+ <pixmap>kfontmanager.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kfract</key>
+ <type>kfract application</type>
+ <pixmap>kfract.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kghostview</key>
+ <type>kghostview application</type>
+ <pixmap>kghostview.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>khexdit</key>
+ <type>khexdit application</type>
+ <pixmap>khexdit.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kiconedit</key>
+ <type>kiconedit application</type>
+ <pixmap>kiconedit.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kikbd</key>
+ <type>kikbd application</type>
+ <pixmap>kikbd.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>killustrator</key>
+ <type>killustrator application</type>
+ <pixmap>killustrator.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kisdn</key>
+ <type>kisdn application</type>
+ <pixmap>kisdn.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kjots</key>
+ <type>kjots application</type>
+ <pixmap>kjots.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>klipper</key>
+ <type>klipper application</type>
+ <pixmap>klipper.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kljettool</key>
+ <type>kljettool application</type>
+ <pixmap>kljettool.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>klpq</key>
+ <type>klpq application</type>
+ <pixmap>klpq.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>klyx</key>
+ <type>klyx application</type>
+ <pixmap>klyx.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmahjongg</key>
+ <type>kmahjongg application</type>
+ <pixmap>kmahjongg.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmail</key>
+ <type>kmail application</type>
+ <pixmap>kmail.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmedia</key>
+ <type>kmedia application</type>
+ <pixmap>kmedia.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmenuedit</key>
+ <type>kmenuedit application</type>
+ <pixmap>kmenuedit.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmid</key>
+ <type>kmid application</type>
+ <pixmap>kmid.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmidi</key>
+ <type>kmidi application</type>
+ <pixmap>kmidi.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmines</key>
+ <type>kmines application</type>
+ <pixmap>kmines.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmix</key>
+ <type>kmix application</type>
+ <pixmap>kmix.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kmoon</key>
+ <type>kmoon application</type>
+ <pixmap>kmoon.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>knotes</key>
+ <type>knotes application</type>
+ <pixmap>knotes.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>knu</key>
+ <type>knu application</type>
+ <pixmap>knu.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kodo</key>
+ <type>kodo application</type>
+ <pixmap>kodo.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>konquest</key>
+ <type>konquest application</type>
+ <pixmap>konquest.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>konsole</key>
+ <type>konsole application</type>
+ <pixmap>konsole.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>korganizer</key>
+ <type>korganizer application</type>
+ <pixmap>korganizer.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>korn</key>
+ <type>korn application</type>
+ <pixmap>korn.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kpackage</key>
+ <type>kpackage application</type>
+ <pixmap>kpackage.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kpaint</key>
+ <type>kpaint application</type>
+ <pixmap>kpaint.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kpat</key>
+ <type>kpat application</type>
+ <pixmap>kpat.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kpilot</key>
+ <type>kpilot application</type>
+ <pixmap>kpilot.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kpm</key>
+ <type>kpm application</type>
+ <pixmap>kpm.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kpoker</key>
+ <type>kpoker application</type>
+ <pixmap>kpoker.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kppp</key>
+ <type>kppp application</type>
+ <pixmap>kppp.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>krabber</key>
+ <type>krabber application</type>
+ <pixmap>krabber.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kreversi</key>
+ <type>kreversi application</type>
+ <pixmap>kreversi.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>krn</key>
+ <type>krn application</type>
+ <pixmap>krn.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ksame</key>
+ <type>ksame application</type>
+ <pixmap>ksame.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kscd</key>
+ <type>kscd application</type>
+ <pixmap>kscd.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kscreensaver</key>
+ <type>kscreensaver application</type>
+ <pixmap>kscreensaver.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kshisen</key>
+ <type>kshisen application</type>
+ <pixmap>kshisen.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ksirtet</key>
+ <type>ksirtet application</type>
+ <pixmap>ksirtet.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ksmiletris</key>
+ <type>ksmiletris application</type>
+ <pixmap>ksmiletris.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ksnake</key>
+ <type>ksnake application</type>
+ <pixmap>ksnake.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ksnapshot</key>
+ <type>ksnapshot application</type>
+ <pixmap>ksnapshot.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ksokoban</key>
+ <type>ksokoban application</type>
+ <pixmap>ksokoban.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ksppp</key>
+ <type>ksppp application</type>
+ <pixmap>ksppp.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ktb</key>
+ <type>ktb application</type>
+ <pixmap>ktb.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kthememgr</key>
+ <type>kthememgr application</type>
+ <pixmap>kthememgr.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>ktop</key>
+ <type>ktop application</type>
+ <pixmap>ktop.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kview</key>
+ <type>kview application</type>
+ <pixmap>kview.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kvt</key>
+ <type>kvt application</type>
+ <pixmap>kvt.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kwm</key>
+ <type>kwm application</type>
+ <pixmap>kwm.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kworldwatch</key>
+ <type>kworldwatch application</type>
+ <pixmap>kworldwatch.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>kwrite</key>
+ <type>kwrite application</type>
+ <pixmap>kwrite.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>pdf</key>
+ <type>application/pdf</type>
+ <pixmap>acroread.xpm</pixmap>
+ <appname>acroread</appname>
+</entry>
+<entry>
+ <key>rpm</key>
+ <type>application/rpm</type>
+ <pixmap>rpmfile.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>tgz</key>
+ <type>application/tgz</type>
+ <pixmap>tgz.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>txt</key>
+ <type>text/plain</type>
+ <pixmap>txt.xpm</pixmap>
+ <appname>kedit</appname>
+</entry>
+<entry>
+ <key>xmlt</key>
+ <type>text/xml-x-tableviewer</type>
+ <pixmap<txt.xpm</pixmap>
+ <appname>tableviewer</appname>
+</entry>
+<entry>
+ <key>wav</key>
+ <type>application/wav</type>
+ <pixmap>kcmsyssound.xpm</pixmap>
+ <appname></appname>
+</entry>
+<entry>
+ <key>xpm</key>
+ <type>image/xpm</type>
+ <pixmap>pixmap.xpm</pixmap>
+ <appname>kiconedit</appname>
+</entry>
+</FILEBROWSER>
diff --git a/etc/init.d/qpe b/etc/init.d/qpe
new file mode 100755
index 0000000..12bb1df
--- a/dev/null
+++ b/etc/init.d/qpe
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+
+export LOGNAME=root
+export HOME=/$LOGNAME
+export QWS_DISPLAY=Transformed:Rot270:0
+export QTDIR=/usr
+export QPEDIR=/opt/QtPalmtop
+if [ ! -x $QPEDIR/bin/qpe ] ; then exit 0 ; fi
+
+$QPEDIR/bin/qpe-reorgfiles
+
+. /etc/profile
+
+killproc() {
+ pid=`/bin/ps -e | /bin/sed -n -e '/\<'$1'\>/ s/^ *\([0-9][0-9]*\).*/\1/p'`
+ [ "$pid" != "" ] && kill $pid
+}
+
+case $1 in
+'start')
+ echo "Starting QPE..."
+
+ cd $HOME
+
+ rm -f /etc/rc2.d/S99x # Can't have both running!
+
+ $QPEDIR/bin/qpe 2>/dev/null >/dev/null &
+
+ ;;
+'stop')
+ echo "Killing QPE..."
+ killproc qpe
+ ;;
+*)
+ echo "usage: $0 { start | stop }"
+ ;;
+esac
+
diff --git a/etc/ipkg.conf b/etc/ipkg.conf
new file mode 100644
index 0000000..289aaeb
--- a/dev/null
+++ b/etc/ipkg.conf
@@ -0,0 +1,2 @@
+# Written by Qtopia Package Manager
+dest root /
diff --git a/etc/keytabs/linux.keytab b/etc/keytabs/linux.keytab
new file mode 100644
index 0000000..3246ce0
--- a/dev/null
+++ b/etc/keytabs/linux.keytab
@@ -0,0 +1,136 @@
+# [linux.keytab] Konsole Keyboard Table (Linux console keys)
+#
+# --------------------------------------------------------------
+
+keyboard "linux console" # NOT TESTED, MAY NEED SOME CLEANUPS
+
+# --------------------------------------------------------------
+#
+# This configuration table allows to customize the
+# meaning of the keys.
+#
+# The syntax is that each entry has the form :
+#
+# "key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
+#
+# Keynames are those defined in <qnamespace.h> with the
+# "Qt::Key_" removed. (We'd better insert the list here)
+#
+# Mode names are :
+#
+# - Shift
+# - Alt
+# - Control
+#
+# The VT100 emulation has two modes that can affect the
+# sequences emitted by certain keys. These modes are
+# under control of the client program.
+#
+# - Newline : effects Return and Enter key.
+# - Application : effects Up and Down key.
+#
+# - Ansi : effects Up and Down key (This is for VT52, really).
+#
+# Operations are
+#
+# - scrollUpLine
+# - scrollUpPage
+# - scrollDownLine
+# - scrollDownPage
+#
+# - emitSelection
+#
+# If the key is not found here, the text of the
+# key event as provided by QT is emitted, possibly
+# preceeded by ESC if the Alt key is pressed.
+#
+# --------------------------------------------------------------
+
+key Escape : "\E"
+key Tab : "\t"
+
+# VT100 can add an extra \n after return.
+# The NewLine mode is set by an escape sequence.
+
+key Return-Alt-NewLine : "\r"
+key Return-Alt+NewLine : "\r\n"
+
+key Return+Alt-NewLine : "\E\r"
+key Return+Alt+NewLine : "\E\r\n"
+
+# Some desperately try to save the ^H.
+
+key Backspace : "\x7f"
+key Delete : "\E[3~"
+
+# These codes are for the VT52 mode of VT100
+# The Ansi mode (i.e. VT100 mode) is set by
+# an escape sequence
+
+key Up -Shift-Ansi : "\EA"
+key Down -Shift-Ansi : "\EB"
+key Right-Shift-Ansi : "\EC"
+key Left -Shift-Ansi : "\ED"
+
+# VT100 emits a mode bit together
+# with the arrow keys.The AppCuKeys
+# mode is set by an escape sequence.
+
+key Up -Shift+Ansi+AppCuKeys : "\EOA"
+key Down -Shift+Ansi+AppCuKeys : "\EOB"
+key Right-Shift+Ansi+AppCuKeys : "\EOC"
+key Left -Shift+Ansi+AppCuKeys : "\EOD"
+
+key Up -Shift+Ansi-AppCuKeys : "\E[A"
+key Down -Shift+Ansi-AppCuKeys : "\E[B"
+key Right-Shift+Ansi-AppCuKeys : "\E[C"
+key Left -Shift+Ansi-AppCuKeys : "\E[D"
+
+# linux functions keys F1-F5 differ from xterm
+
+key F1 : "\E[[A"
+key F2 : "\E[[B"
+key F3 : "\E[[C"
+key F4 : "\E[[D"
+key F5 : "\E[[E"
+
+key F6 : "\E[17~"
+key F7 : "\E[18~"
+key F8 : "\E[19~"
+key F9 : "\E[20~"
+key F10 : "\E[21~"
+key F11 : "\E[23~"
+key F12 : "\E[24~"
+
+key Home : "\E[H"
+key End : "\E[F"
+
+key Prior -Shift : "\E[5~"
+key Next -Shift : "\E[6~"
+key Insert-Shift : "\E[2~"
+
+# Keypad-Enter. See comment on Return above.
+
+key Enter+NewLine : "\r\n"
+key Enter-NewLine : "\r"
+
+key Space +Control : "\x00"
+
+# some of keys are used by konsole.
+
+key Left +Shift : prevSession
+key Right +Shift : nextSession
+key Up +Shift : scrollLineUp
+key Prior +Shift : scrollPageUp
+key Down +Shift : scrollLineDown
+key Next +Shift : scrollPageDown
+key Insert+Shift : emitSelection
+
+#----------------------------------------------------------
+
+# keypad characters as offered by Qt
+# cannot be recognized as such.
+
+#----------------------------------------------------------
+
+# Following other strings as emitted by konsole.
diff --git a/etc/keytabs/vt100.keytab b/etc/keytabs/vt100.keytab
new file mode 100644
index 0000000..0237578
--- a/dev/null
+++ b/etc/keytabs/vt100.keytab
@@ -0,0 +1,136 @@
+# [vt100.keytab] Konsole Keyboard Table (VT100 keys)
+#
+# --------------------------------------------------------------
+
+keyboard "vt100 (historical)"
+
+# --------------------------------------------------------------
+#
+# This configuration table allows to customize the
+# meaning of the keys.
+#
+# The syntax is that each entry has the form :
+#
+# "key" Keyname { ("+"|"-") Modename } ":" (String|Operation)
+#
+# Keynames are those defined in <qnamespace.h> with the
+# "Qt::Key_" removed. (We'd better insert the list here)
+#
+# Mode names are :
+#
+# - Shift
+# - Alt
+# - Control
+#
+# The VT100 emulation has two modes that can affect the
+# sequences emitted by certain keys. These modes are
+# under control of the client program.
+#
+# - Newline : effects Return and Enter key.
+# - Application : effects Up and Down key.
+#
+# - Ansi : effects Up and Down key (This is for VT52, really).
+#
+# Operations are
+#
+# - scrollUpLine
+# - scrollUpPage
+# - scrollDownLine
+# - scrollDownPage
+#
+# - emitSelection
+#
+# If the key is not found here, the text of the
+# key event as provided by QT is emitted, possibly
+# preceeded by ESC if the Alt key is pressed.
+#
+# --------------------------------------------------------------
+
+key Escape : "\E"
+key Tab : "\t"
+
+# VT100 can add an extra \n after return.
+# The NewLine mode is set by an escape sequence.
+
+key Return-Alt-NewLine : "\r"
+key Return-Alt+NewLine : "\r\n"
+
+key Return+Alt-NewLine : "\E\r"
+key Return+Alt+NewLine : "\E\r\n"
+
+# Some desperately try to save the ^H.
+
+key Backspace : "\x7f"
+key Delete : "\E[3~"
+
+# These codes are for the VT52 mode of VT100
+# The Ansi mode (i.e. VT100 mode) is set by
+# an escape sequence
+
+key Up -Shift-Ansi : "\EA"
+key Down -Shift-Ansi : "\EB"
+key Right-Shift-Ansi : "\EC"
+key Left -Shift-Ansi : "\ED"
+
+# VT100 emits a mode bit together
+# with the arrow keys.The AppCuKeys
+# mode is set by an escape sequence.
+
+key Up -Shift+Ansi+AppCuKeys : "\EOA"
+key Down -Shift+Ansi+AppCuKeys : "\EOB"
+key Right-Shift+Ansi+AppCuKeys : "\EOC"
+key Left -Shift+Ansi+AppCuKeys : "\EOD"
+
+key Up -Shift+Ansi-AppCuKeys : "\E[A"
+key Down -Shift+Ansi-AppCuKeys : "\E[B"
+key Right-Shift+Ansi-AppCuKeys : "\E[C"
+key Left -Shift+Ansi-AppCuKeys : "\E[D"
+
+# function keys (FIXME: make pf1-pf4)
+
+key F1 : "\E[11~"
+key F2 : "\E[12~"
+key F3 : "\E[13~"
+key F4 : "\E[14~"
+key F5 : "\E[15~"
+
+key F6 : "\E[17~"
+key F7 : "\E[18~"
+key F8 : "\E[19~"
+key F9 : "\E[20~"
+key F10 : "\E[21~"
+key F11 : "\E[23~"
+key F12 : "\E[24~"
+
+key Home : "\E[H"
+key End : "\E[F"
+
+key Prior -Shift : "\E[5~"
+key Next -Shift : "\E[6~"
+key Insert-Shift : "\E[2~"
+
+# Keypad-Enter. See comment on Return above.
+
+key Enter+NewLine : "\r\n"
+key Enter-NewLine : "\r"
+
+key Space +Control : "\x00"
+
+# some of keys are used by konsole.
+
+key Left +Shift : prevSession
+key Right +Shift : nextSession
+key Up +Shift : scrollLineUp
+key Prior +Shift : scrollPageUp
+key Down +Shift : scrollLineDown
+key Next +Shift : scrollPageDown
+key Insert+Shift : emitSelection
+
+#----------------------------------------------------------
+
+# keypad characters as offered by Qt
+# cannot be recognized as such.
+
+#----------------------------------------------------------
+
+# Following other strings as emitted by konsole.
diff --git a/etc/mime.types b/etc/mime.types
new file mode 100644
index 0000000..2658ef6
--- a/dev/null
+++ b/etc/mime.types
@@ -0,0 +1,126 @@
+application/activemessage
+application/andrew-inset ez
+application/applefile
+application/atomicmail
+application/cu-seeme csm cu
+application/dca-rft
+application/dec-dx
+application/excel xls
+application/ghostview
+application/ipkg ipk
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+application/macwriteii
+application/msword doc dot wrd
+application/news-message-id
+application/news-transmission
+application/octet-stream bin dms lha lzh exe class
+application/oda oda
+application/pdf pdf
+application/pgp pgp
+application/pgp-signature pgp
+application/postscript ai eps ps
+application/powerpoint ppt
+application/remote-printing
+application/rtf rtf
+application/slate
+application/wita
+application/wordperfect5.1 wp5
+application/x-123 wk
+application/x-Wingz wz
+application/x-bcpio bcpio
+application/x-cdlink vcd
+application/x-chess-pgn pgn
+application/x-compress z Z
+application/x-cpio cpio
+application/x-csh csh
+application/x-debian-package deb
+application/x-director dcr dir dxr
+application/x-dvi dvi
+application/x-gtar gtar tgz
+application/x-gunzip gz
+application/x-gzip gz
+application/x-hdf hdf
+application/x-httpd-php phtml pht php
+application/x-javascript js
+application/x-koan skp skd skt skm
+application/x-latex latex
+application/x-maker frm maker frame fm fb book fbdoc
+application/x-mif mif
+application/x-msdos-program com exe bat
+application/x-netcdf nc cdf
+application/x-ns-proxy-autoconfig pac
+application/x-perl pl pm
+application/x-sh sh
+application/x-shar shar
+application/x-stuffit sit
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex tex
+application/x-texinfo texinfo texi
+application/x-troff t tr roff
+application/x-troff-man man
+application/x-troff-me me
+application/x-troff-ms ms
+application/x-ustar ustar
+application/x-wais-source src
+application/zip zip
+audio/prs.sid sid psid
+audio/basic au snd
+audio/midi mid midi kar
+audio/mpeg mpga mp2 mp3
+audio/x-aiff aif aifc aiff
+audio/x-pn-realaudio ra ram
+audio/x-pn-realaudio-plugin
+audio/x-realaudio ra
+audio/x-wav wav
+chemical/x-pdb pdb xyz
+image/gif gif
+image/ief ief
+image/jpeg jpeg jpg jpe
+image/png png
+image/tiff tiff tif
+image/x-bmp bmp
+image/x-cmu-raster ras
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+message/external-body
+message/news
+message/partial
+message/rfc822
+model/iges igs iges
+model/mesh msh mesh silo
+model/vrml wrl vrml
+multipart/alternative
+multipart/appledouble
+multipart/digest
+multipart/mixed
+multipart/parallel
+text/css css
+text/html html htm
+text/plain asc txt c cc h hh cpp hpp
+text/richtext rtx
+text/tab-separated-values tsv
+text/x-setext etx
+text/x-sgml sgml sgm
+text/x-vCalendar vcs
+text/x-vCard vcf
+text/x-xml-tableviewer xmlt
+text/xml xml dtd
+video/dl dl
+video/fli fli
+video/gl gl
+video/mpeg mp2 mpe mpeg mpg
+video/quicktime qt mov
+video/x-msvideo avi
+video/x-sgi-movie movie
+x-conference/x-cooltalk ice
+x-world/x-vrml wrl vrml
diff --git a/etc/network/DialUp.conf b/etc/network/DialUp.conf
new file mode 100644
index 0000000..bd442db
--- a/dev/null
+++ b/etc/network/DialUp.conf
@@ -0,0 +1,11 @@
+[Info]
+Name = Dial-up - PPP
+Type = dialup
+Layer = TCP/IP
+[Help]
+Help = For dial-up connections through a modem and plain telephone line.
+Help[de] = Für Wählverbindungen mit Modem und Telefon.
+[Properties]
+Auto = 0
+Device = ppp
+CardType = serial
diff --git a/etc/network/LAN.conf b/etc/network/LAN.conf
new file mode 100644
index 0000000..686ad92
--- a/dev/null
+++ b/etc/network/LAN.conf
@@ -0,0 +1,10 @@
+[Info]
+Name = LAN - TCP/IP
+Type = lan
+Layer = TCP/IP
+[Help]
+Help = For local-area network connections through PC-Card network interface card.
+Help[de] = Für Netwerkverbindungen mit Hilfe einer PC-Card Netwerkkarte.
+[Properties]
+Auto = 1
+Device = eth
diff --git a/etc/qimpen/asciilower.qpt b/etc/qimpen/asciilower.qpt
new file mode 100644
index 0000000..3147afb
--- a/dev/null
+++ b/etc/qimpen/asciilower.qpt
Binary files differ
diff --git a/etc/qimpen/asciiupper.qpt b/etc/qimpen/asciiupper.qpt
new file mode 100644
index 0000000..016d2b9
--- a/dev/null
+++ b/etc/qimpen/asciiupper.qpt
Binary files differ
diff --git a/etc/qimpen/combining.qpt b/etc/qimpen/combining.qpt
new file mode 100644
index 0000000..6c2c85c
--- a/dev/null
+++ b/etc/qimpen/combining.qpt
Binary files differ
diff --git a/etc/qimpen/default.conf b/etc/qimpen/default.conf
new file mode 100644
index 0000000..e98c837
--- a/dev/null
+++ b/etc/qimpen/default.conf
@@ -0,0 +1,17 @@
+[Handwriting]
+Name = Default
+Description = Latin 1 using natural strokes
+MatchWords = 1
+CanSelectStyle = 1
+
+[Settings]
+MultiTimeout = 500
+Style = BothCases
+
+[CharSets]
+Combining = combining.qpt
+Lowercase = asciilower.qpt
+Uppercase = asciiupper.qpt
+Numeric = numeric.qpt
+Shortcut = latin1select.qpt
+
diff --git a/etc/qimpen/numeric.qpt b/etc/qimpen/numeric.qpt
new file mode 100644
index 0000000..0a822a8
--- a/dev/null
+++ b/etc/qimpen/numeric.qpt
Binary files differ
diff --git a/etc/unit_conversion.dat b/etc/unit_conversion.dat
new file mode 100644
index 0000000..5ae312e
--- a/dev/null
+++ b/etc/unit_conversion.dat
@@ -0,0 +1,195 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+STARTTYPE Weight
+STND grams
+
+NAME mg
+RATIO 1000
+
+NAME g
+RATIO 1
+
+NAME kg
+RATIO 0.001
+
+NAME tonnes
+RATIO 1e-06
+
+NAME carats
+RATIO 5
+
+NAME oz
+RATIO 0.03527336860670194
+
+NAME lb
+RATIO 0.002204585537918871
+
+NAME st
+RATIO 0.0001574703955656337
+
+NAME St tons
+RATIO 1.102292768959636e-06
+
+NAME Lg tons
+RATIO 9.841899722852103e-07
+
+NAME
+RATIO 1.
+
+NAME
+RATIO 1.
+
+ENDTYPE
+
+
+
+STARTTYPE Distance
+STND m
+
+NAME mm
+RATIO 1000
+
+NAME cm
+RATIO 100
+
+NAME m
+RATIO 1
+
+NAME km
+RATIO 0.001
+
+NAME points
+RATIO 2834.64566929134
+
+NAME in
+RATIO 39.3700787401575
+
+NAME ft
+RATIO 3.280839895013123
+
+NAME yd
+RATIO 1.093613298337708
+
+NAME mi
+RATIO 0.0006213711922373339
+
+NAME naut. mi
+RATIO 0.0005399568034557236
+
+NAME
+RATIO 1.
+
+NAME
+RATIO 1.
+
+ENDTYPE
+
+
+
+STARTTYPE Area
+STND sq m
+
+NAME sq mm
+RATIO 1000000
+
+NAME sq cm
+RATIO 10000
+
+NAME sq m
+RATIO 1
+
+NAME sq km
+RATIO 1e-06
+
+NAME hectares
+RATIO 0.0001
+
+NAME sq in
+RATIO 1550.0031000062
+
+NAME sq ft
+RATIO 10.7639104167097
+
+NAME sq yd
+RATIO 1.19599004630108
+
+NAME sq mi
+RATIO 0.000000386102158542446
+
+NAME acres
+RATIO 0.0002471053814671653
+
+NAME
+RATIO 1.
+
+NAME
+RATIO 1.
+
+ENDTYPE
+
+
+
+STARTTYPE Volume
+STND litres
+
+NAME cu cm
+RATIO 1000
+
+NAME ml
+RATIO 1000
+
+NAME l
+RATIO 1
+
+NAME tblspoon
+RATIO 67.6280454036859
+
+NAME teaspoons
+RATIO 202.884136211058
+
+NAME cu in
+RATIO 61.0237440947323
+
+NAME cu ft
+RATIO 0.0353146667214886
+
+NAME pt
+RATIO 2.11337641886519
+
+NAME qt
+RATIO 1.05668820943259
+
+NAME gal (US)
+RATIO 0.264172052358148
+
+NAME
+RATIO 1.
+
+NAME
+RATIO 1.
+
+ENDTYPE
+
+Extra units
+
+NAME fl oz (US)
+RATIO 33.8140227018429
+
diff --git a/example/Example.png b/example/Example.png
new file mode 100644
index 0000000..f63d0bc
--- a/dev/null
+++ b/example/Example.png
Binary files differ
diff --git a/example/README b/example/README
new file mode 100644
index 0000000..98c2c51
--- a/dev/null
+++ b/example/README
@@ -0,0 +1,2 @@
+See /opt/Qtopia/doc/html/qtopia/index.html for help.
+See doc.trolltech.com for more recent documentation updates.
diff --git a/example/example.control b/example/example.control
new file mode 100644
index 0000000..b0f267a
--- a/dev/null
+++ b/example/example.control
@@ -0,0 +1,11 @@
+Files: bin/example apps/Applications/example.desktop pics/Example.png
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: 1.0.0
+Depends: qpe-base ($QPE_VERSION)
+License: Public Domain
+Description: Example program
+ An example program for the Qtopia environment.
+ Does nothing interesting.
diff --git a/example/example.cpp b/example/example.cpp
new file mode 100644
index 0000000..1e0bbe9
--- a/dev/null
+++ b/example/example.cpp
@@ -0,0 +1,28 @@
+#include "example.h"
+#include <qpushbutton.h>
+
+/*
+ * Constructs a Example which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ */
+Example::Example( QWidget* parent, const char* name, WFlags fl )
+ : ExampleBase( parent, name, fl )
+{
+ connect(quit, SIGNAL(clicked()), this, SLOT(goodBye()));
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+Example::~Example()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * A simple slot... not very interesting.
+ */
+void Example::goodBye()
+{
+ close();
+}
diff --git a/example/example.desktop b/example/example.desktop
new file mode 100644
index 0000000..f1e6f06
--- a/dev/null
+++ b/example/example.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Comment=An Example Program
+Exec=example
+Icon=Example
+Type=Application
+Name=Example
diff --git a/example/example.h b/example/example.h
new file mode 100644
index 0000000..24c58c0
--- a/dev/null
+++ b/example/example.h
@@ -0,0 +1,17 @@
+#ifndef EXAMPLE_H
+#define EXAMPLE_H
+#include "examplebase.h"
+
+class Example : public ExampleBase
+{
+ Q_OBJECT
+
+public:
+ Example( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~Example();
+
+private slots:
+ void goodBye();
+};
+
+#endif // EXAMPLE_H
diff --git a/example/example.pro b/example/example.pro
new file mode 100644
index 0000000..2d89311
--- a/dev/null
+++ b/example/example.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+#CONFIG = qt warn_on debug
+CONFIG = qt warn_on release
+HEADERS = example.h
+SOURCES = main.cpp example.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES = examplebase.ui
+TARGET = example
diff --git a/example/examplebase.ui b/example/examplebase.ui
new file mode 100644
index 0000000..b47d20c
--- a/dev/null
+++ b/example/examplebase.ui
@@ -0,0 +1,55 @@
+<!DOCTYPE UI><UI>
+<class>ExampleBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ExampleBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>196</width>
+ <height>245</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Example</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;p&gt;This is just an &lt;i&gt;example&lt;/i&gt;. It doesn't do anything interesting at all.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>quit</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Quit</string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/example/main.cpp b/example/main.cpp
new file mode 100644
index 0000000..b705c44
--- a/dev/null
+++ b/example/main.cpp
@@ -0,0 +1,12 @@
+#include "example.h"
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ Example mw;
+ a.showMainWidget( &mw );
+
+ return a.exec();
+}
diff --git a/freetype/Makefile.in b/freetype/Makefile.in
new file mode 100644
index 0000000..ba4c829
--- a/dev/null
+++ b/freetype/Makefile.in
@@ -0,0 +1,117 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I../library
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe -lfreetype $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../plugins/fontfactories/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = freetypefactory
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = fontfactoryttf_qws.h \
+ freetypefactoryimpl.h \
+ qfontdata_p.h
+SOURCES = fontfactoryttf_qws.cpp \
+ freetypefactoryimpl.cpp
+OBJECTS = fontfactoryttf_qws.o \
+ freetypefactoryimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake: Makefile.in
+
+Makefile.in: freetype.pro
+ tmake freetype.pro -o Makefile.in
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+fontfactoryttf_qws.o: fontfactoryttf_qws.cpp \
+ fontfactoryttf_qws.h \
+ qfontdata_p.h
+
+freetypefactoryimpl.o: freetypefactoryimpl.cpp \
+ fontfactoryttf_qws.h \
+ qfontdata_p.h \
+ freetypefactoryimpl.h \
+ ../library/fontfactoryinterface.h \
+ ../library/qcom.h \
+ ../library/quuid.h
+
+
diff --git a/freetype/fontfactoryttf_qws.cpp b/freetype/fontfactoryttf_qws.cpp
new file mode 100644
index 0000000..66fd96a
--- a/dev/null
+++ b/freetype/fontfactoryttf_qws.cpp
@@ -0,0 +1,238 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "fontfactoryttf_qws.h"
+
+#ifdef QT_NO_FREETYPE
+
+#include "qfontdata_p.h"
+#include <string.h>
+#include <stdio.h>
+
+#define FLOOR(x) ((x) & -64)
+#define CEIL(x) (((x)+63) & -64)
+#define TRUNC(x) ((x) >> 6)
+
+
+extern "C" {
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_GLYPH_H
+#include FT_OUTLINE_H
+#include FT_BBOX_H
+}
+
+class QDiskFontFT : public QDiskFontPrivate {
+public:
+ FT_Face face;
+};
+
+class QRenderedFontFT : public QRenderedFont {
+public:
+ QRenderedFontFT(QDiskFont* f, const QFontDef &d) :
+ QRenderedFont(f,d)
+ {
+ QDiskFontFT *df = (QDiskFontFT*)(f->p);
+ myface=df->face;
+ selectThisSize();
+ // A 1-pixel baseline is excluded in Qt/Windows/X11 fontmetrics
+ // (see QFontMetrics::height())
+ //
+ fascent=CEIL(myface->size->metrics.ascender)/64;
+ fdescent=-FLOOR(myface->size->metrics.descender)/64-1;
+ fmaxwidth=CEIL(myface->size->metrics.max_advance)/64;
+ fleading=CEIL(myface->size->metrics.height)/64
+ - fascent - fdescent + 1;
+
+ // FT has these in font units
+ funderlinepos = ptsize/200+1;
+ funderlinewidth = ptsize/200+1;
+ }
+
+ ~QRenderedFontFT()
+ {
+ }
+
+ bool unicode(int & i) const
+ {
+ int ret;
+
+ FT_Face theface=myface;
+
+ ret=FT_Get_Char_Index(theface,i);
+
+ if (ret==0) {
+ return FALSE;
+ } else {
+ i=ret;
+ return TRUE;
+ }
+ }
+
+ bool inFont(QChar ch) const
+ {
+ int index = ch.unicode();
+ return unicode(index);
+ }
+
+ QGlyph render(QChar ch)
+ {
+ selectThisSize();
+
+ int index = ch.unicode();
+ if ( !unicode(index) )
+ index = 0;
+ QGlyph result;
+
+ FT_Error err;
+
+ err=FT_Load_Glyph(myface,index,FT_LOAD_DEFAULT);
+ if(err)
+ qFatal("Load glyph error %x",err);
+
+ int width,height,pitch,size = 0;
+ FT_Glyph glyph;
+ err=FT_Get_Glyph( myface->glyph, &glyph );
+ if(err)
+ qFatal("Get glyph error %x",err);
+
+ FT_BBox bbox;
+ FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_gridfit, &bbox);
+
+ FT_Vector origin;
+ origin.x = -bbox.xMin;
+ origin.y = -bbox.yMin;
+
+ if ( FT_IS_SCALABLE(myface) ) {
+ err=FT_Glyph_To_Bitmap(&glyph,
+ smooth ? ft_render_mode_normal : ft_render_mode_mono,
+ &origin, 1); // destroy original glyph
+ if(err)
+ qWarning("Get bitmap error %d",err);
+ }
+
+ if ( !err ) {
+ FT_Bitmap bm = ((FT_BitmapGlyph)glyph)->bitmap;
+ pitch = bm.pitch;
+ size=pitch*bm.rows;
+ result.data = new uchar[size]; // XXX memory manage me
+ width=bm.width;
+ height=bm.rows;
+ if ( size ) {
+ memcpy( result.data, bm.buffer, size );
+ } else {
+ result.data = new uchar[0]; // XXX memory manage me
+ }
+ } else {
+ result.data = new uchar[0]; // XXX memory manage me
+ }
+
+ result.metrics = new QGlyphMetrics;
+ memset((char*)result.metrics, 0, sizeof(QGlyphMetrics));
+ result.metrics->bearingx=myface->glyph->metrics.horiBearingX/64;
+ result.metrics->advance=myface->glyph->metrics.horiAdvance/64;
+ result.metrics->bearingy=myface->glyph->metrics.horiBearingY/64;
+
+ result.metrics->linestep=pitch;
+ result.metrics->width=width;
+ result.metrics->height=height;
+
+ FT_Done_Glyph( glyph );
+
+ return result;
+ }
+
+ FT_Face myface;
+
+private:
+ void selectThisSize()
+ {
+ int psize=(ptsize<<6)/10;
+
+ // Assume 72 dpi for now
+ const int dpi=72;
+ FT_Error err;
+ err=FT_Set_Char_Size(myface, psize,psize,dpi,dpi);
+ if (err) {
+ if (FT_IS_SCALABLE(myface) ) {
+ qWarning("Set char size error %x for size %d",err,ptsize);
+ } else {
+ int best=-1;
+ int bdh=99;
+ for (int i=0; i<myface->num_fixed_sizes; i++) {
+ FT_Bitmap_Size& sz=myface->available_sizes[i];
+ int dh = sz.height - ptsize*dpi/72/10;
+ dh = QABS(dh);
+ if ( dh < bdh ) {
+ bdh=dh;
+ best=i;
+ }
+ }
+ if ( best >= 0 )
+ err=FT_Set_Pixel_Sizes(myface,
+ myface->available_sizes[best].width,
+ myface->available_sizes[best].height);
+ if ( err )
+ qWarning("Set char size error %x for size %d",err,ptsize);
+ }
+ }
+ }
+};
+
+QFontFactoryFT::QFontFactoryFT()
+{
+ FT_Error err;
+ err=FT_Init_FreeType(&library);
+ if(err) {
+ qFatal("Couldn't initialise Freetype library");
+ }
+}
+
+QFontFactoryFT::~QFontFactoryFT()
+{
+}
+
+QString QFontFactoryFT::name()
+{
+ return "FT";
+}
+
+QRenderedFont * QFontFactoryFT::get(const QFontDef & f,QDiskFont * f2)
+{
+ return new QRenderedFontFT(f2, f);
+}
+
+void QFontFactoryFT::load(QDiskFont * qdf) const
+{
+ if(qdf->loaded)
+ return;
+ QDiskFontFT *f = new QDiskFontFT;
+ qdf->p=f;
+ FT_Error err;
+ err=FT_New_Face(library,qdf->file.ascii(),0,&(f->face));
+ if(err) {
+ qFatal("Error %d opening face",err);
+ }
+ qdf->loaded=true;
+}
+
+
+#endif // QT_NO_FREETYPE
diff --git a/freetype/fontfactoryttf_qws.h b/freetype/fontfactoryttf_qws.h
new file mode 100644
index 0000000..82b7e49
--- a/dev/null
+++ b/freetype/fontfactoryttf_qws.h
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef FONTFACTORY_FT_H
+#define FONTFACTORY_FT_H
+
+#include <qfontmanager_qws.h>
+#if QT_VERSION >= 300
+# include <private/qfontdata_p.h>
+#else
+# include "qfontdata_p.h"
+#endif
+
+
+#ifdef QT_NO_FREETYPE
+
+extern "C" {
+#include <ft2build.h>
+#include FT_FREETYPE_H
+}
+
+// ascent, descent, width(ch), width(string), maxwidth?
+// leftbearing, rightbearing, minleftbearing,minrightbearing
+// leading
+
+class QFontFactoryFT : public QFontFactory {
+
+public:
+
+ QFontFactoryFT();
+ virtual ~QFontFactoryFT();
+
+ QRenderedFont * get(const QFontDef &,QDiskFont *);
+ virtual void load(QDiskFont *) const;
+ virtual QString name();
+
+private:
+
+ friend class QRenderedFontFT;
+ FT_Library library;
+};
+
+#endif // QT_NO_FREETYPE
+
+#endif // QFONTFACTORY_FT_H
+
diff --git a/freetype/freetype.pro b/freetype/freetype.pro
new file mode 100644
index 0000000..841f6d4
--- a/dev/null
+++ b/freetype/freetype.pro
@@ -0,0 +1,13 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = fontfactoryttf_qws.h freetypefactoryimpl.h
+SOURCES = fontfactoryttf_qws.cpp freetypefactoryimpl.cpp
+qt2:HEADERS += qfontdata_p.h
+TARGET = freetypefactory
+DESTDIR = ../plugins/fontfactories
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+#INCLUDEPATH += $(QPEDIR)/include
+#DEPENDPATH += /usr/local/include/freetype2
+LIBS += -lqpe -lfreetype
+VERSION = 1.0.0
diff --git a/freetype/freetypefactoryimpl.cpp b/freetype/freetypefactoryimpl.cpp
new file mode 100644
index 0000000..8c1afab
--- a/dev/null
+++ b/freetype/freetypefactoryimpl.cpp
@@ -0,0 +1,57 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "fontfactoryttf_qws.h"
+#include "freetypefactoryimpl.h"
+
+
+FreeTypeFactoryImpl::FreeTypeFactoryImpl()
+ : factory(0), ref(0)
+{
+}
+
+FreeTypeFactoryImpl::~FreeTypeFactoryImpl()
+{
+ delete factory;
+}
+
+QFontFactory *FreeTypeFactoryImpl::fontFactory()
+{
+ if ( !factory )
+ factory = new QFontFactoryFT();
+ return factory;
+}
+
+QRESULT FreeTypeFactoryImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_FontFactory )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( FreeTypeFactoryImpl )
+}
diff --git a/freetype/freetypefactoryimpl.h b/freetype/freetypefactoryimpl.h
new file mode 100644
index 0000000..d7c376e
--- a/dev/null
+++ b/freetype/freetypefactoryimpl.h
@@ -0,0 +1,40 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include <fontfactoryinterface.h>
+
+class QFontFactoryFT;
+
+class FreeTypeFactoryImpl : public FontFactoryInterface
+{
+public:
+ FreeTypeFactoryImpl();
+ virtual ~FreeTypeFactoryImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QFontFactory *fontFactory();
+
+private:
+ QFontFactoryFT *factory;
+ ulong ref;
+};
diff --git a/freetype/qfontdata_p.h b/freetype/qfontdata_p.h
new file mode 100644
index 0000000..fc22c72
--- a/dev/null
+++ b/freetype/qfontdata_p.h
@@ -0,0 +1,94 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef QFONTDATA_P_H
+#define QFONTDATA_P_H
+
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of qmenudata.cpp, qmenubar.cpp, qmenubar.cpp, qpopupmenu.cpp,
+// qmotifstyle.cpp and qwindowssstyle.cpp. This header file may change
+// from version to version without notice, or even be removed.
+//
+// We mean it.
+//
+//
+
+#ifndef QT_H
+#endif // QT_H
+
+struct QFontDef { // font definition
+ QString family;
+ QString addStyle;
+ int pointSize;
+ uint styleHint : 8;
+ uint styleStrategy : 8;
+ uint charSet : 8;
+ uint weight : 8;
+ uint italic : 1;
+ uint underline : 1;
+ uint strikeOut : 1;
+ uint fixedPitch : 1;
+ uint hintSetByUser : 1;
+ uint rawMode : 1;
+ uint dirty : 1;
+ short lbearing;
+ short rbearing;
+};
+
+
+class QFontInternal;
+class QTextCodec;
+
+struct QFontData : public QShared {
+ QFontData()
+ : exactMatch(FALSE), fin(0), printerHackFont( 0 )
+ {}
+ QFontData( const QFontData &d )
+ : QShared(d), req(d.req), exactMatch(d.exactMatch), fin(d.fin),
+ printerHackFont(0)
+ // Copy the QShared count as well. The count may need to be
+ // reset when using the QFontData class, see QFont::QFont(QFontData*)
+ {}
+ ~QFontData()
+ {}
+ QFontData &operator=( const QFontData &d )
+ {
+ req = d.req;
+ exactMatch = d.exactMatch;
+ fin = d.fin;
+ printerHackFont=d.printerHackFont;
+ return *this;
+ }
+ QFontDef req; // requested font
+ bool exactMatch;
+ QFontInternal *fin;
+ QFont *printerHackFont;
+ const QTextCodec *mapper() const;
+ void *fontSet() const;
+};
+
+
+#endif // QFONTDATA_P_H
diff --git a/i18n/de/.directory b/i18n/de/.directory
new file mode 100644
index 0000000..2528b63
--- a/dev/null
+++ b/i18n/de/.directory
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=German
+Name[de]=Deutsch
+Name[no]=Tysk
+Name[ja]=ドイツ語
+Name[hu]=Német
diff --git a/i18n/de/addressbook.qm b/i18n/de/addressbook.qm
new file mode 100644
index 0000000..c83d4b8
--- a/dev/null
+++ b/i18n/de/addressbook.qm
Binary files differ
diff --git a/i18n/de/appearance.qm b/i18n/de/appearance.qm
new file mode 100644
index 0000000..6218d8e
--- a/dev/null
+++ b/i18n/de/appearance.qm
Binary files differ
diff --git a/i18n/de/appearance.ts b/i18n/de/appearance.ts
new file mode 100644
index 0000000..9a91302
--- a/dev/null
+++ b/i18n/de/appearance.ts
@@ -0,0 +1,17 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>AppearanceSettingsBase</name>
+ <message encoding="UTF-8">
+ <source>Appearance</source>
+ <translation>Erscheinungsbild</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Style:</source>
+ <translation>Stil:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Color Scheme:</source>
+ <translation>Farbschema:</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/calculator.qm b/i18n/de/calculator.qm
new file mode 100644
index 0000000..c87ba78
--- a/dev/null
+++ b/i18n/de/calculator.qm
Binary files differ
diff --git a/i18n/de/calculator.ts b/i18n/de/calculator.ts
new file mode 100644
index 0000000..758233d
--- a/dev/null
+++ b/i18n/de/calculator.ts
@@ -0,0 +1,132 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>Calculator</name>
+ <message encoding="UTF-8">
+ <source>Experimental Calculator</source>
+ <translation>Taschenrechner</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>M+</source>
+ <translation>M+</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>MR</source>
+ <translation>MR</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>MC</source>
+ <translation>MC</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>CE</source>
+ <translation>CE</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>log</source>
+ <translation>log</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>ln</source>
+ <translation>ln</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>(</source>
+ <translation>(</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>)</source>
+ <translation>)</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>sin</source>
+ <translation>sin</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>cos</source>
+ <translation>cos</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>tan</source>
+ <translation>tan</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>%</source>
+ <translation>%</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>+/-</source>
+ <translation>+/-</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>3</source>
+ <translation>3</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>6</source>
+ <translation>6</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>=</source>
+ <translation>=</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>-</source>
+ <translation>-</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>x</source>
+ <translation>x</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>4</source>
+ <translation>4</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>8</source>
+ <translation>8</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>/</source>
+ <translation>/</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>.</source>
+ <translation>.</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>5</source>
+ <translation>5</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>7</source>
+ <translation>7</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>9</source>
+ <translation>9</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+</context>
+<context>
+ <name>CalculatorImpl</name>
+ <message>
+ <source>Calculator</source>
+ <translation>Taschenrechner</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/citytime.qm b/i18n/de/citytime.qm
new file mode 100644
index 0000000..aa01aa4
--- a/dev/null
+++ b/i18n/de/citytime.qm
Binary files differ
diff --git a/i18n/de/citytime.ts b/i18n/de/citytime.ts
new file mode 100644
index 0000000..03db276
--- a/dev/null
+++ b/i18n/de/citytime.ts
@@ -0,0 +1,131 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>CityTime</name>
+ <message>
+ <source>Time Changing</source>
+ <translation>Neue Zeit festlegen</translation>
+ </message>
+ <message>
+ <source>Restore Time Zone</source>
+ <translation>Zeitzone wiederherstellen</translation>
+ </message>
+ <message>
+ <source>There was a problem setting timezone %1</source>
+ <translation>Beim Einstellen der Zeitzone %1 ist ein Problem aufgetreten.</translation>
+ </message>
+ <message>
+ <source>There was a problem setting your timezone.Your time may be wrong now...</source>
+ <translation>Beim Einstellen der Zeitzone ist ein Problem aufgetreten. Die Zeitangaben sind daher möglicherweise falsch...</translation>
+ </message>
+</context>
+<context>
+ <name>CityTimeBase</name>
+ <message>
+ <source>&lt;CITY 1 TIME&gt;</source>
+ <translation>&lt;Zeit für Stadt Nr. 1&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;CITY 2 TIME&gt;</source>
+ <translation>&lt;Zeit für Stadt Nr. 2&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;CITY 3 TIME&gt;</source>
+ <translation>&lt;Zeit für Stadt Nr. 3&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;CITY 4 TIME&gt;</source>
+ <translation>&lt;Zeit für Stadt Nr. 4&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;CITY 5 TIME&gt;</source>
+ <translation>&lt;Zeit für Stadt Nr. 5&gt;</translation>
+ </message>
+ <message>
+ <source>City Time</source>
+ <translation>Weltzeituhr</translation>
+ </message>
+ <message>
+ <source>&lt;location 5&gt;</source>
+ <translation>&lt;Standort Nr. 5&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;location 1&gt;</source>
+ <translation>&lt;Standort Nr. 1&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;location 2&gt;</source>
+ <translation>&lt;Standort Nr. 2&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;location 3&gt;</source>
+ <translation>&lt;Standort Nr. 3&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;location 4&gt;</source>
+ <translation>&lt;Standort Nr. 4&gt;</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;CITY 6 TIME&gt;</source>
+ <translation>&lt;Zeit für Stadt Nr. 6&gt;</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;location 6&gt;</source>
+ <translation>&lt;Standort Nr. 6&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>ZoneMap</name>
+ <message>
+ <source>Fri</source>
+ <translation type="obsolete">Fr</translation>
+ </message>
+ <message>
+ <source>Mon</source>
+ <translation type="obsolete">Mo</translation>
+ </message>
+ <message>
+ <source>Sat</source>
+ <translation type="obsolete">Sa</translation>
+ </message>
+ <message>
+ <source>Sun</source>
+ <translation type="obsolete">So</translation>
+ </message>
+ <message>
+ <source>Thu</source>
+ <translation type="obsolete">Do</translation>
+ </message>
+ <message>
+ <source>Tue</source>
+ <translation type="obsolete">Di</translation>
+ </message>
+ <message>
+ <source>Wed</source>
+ <translation type="obsolete">Mi</translation>
+ </message>
+ <message>
+ <source>CITY</source>
+ <translation>Stadt</translation>
+ </message>
+ <message>
+ <source>Unable to Find Timezone Info</source>
+ <translation>Kann keine Zeitzoneninformationen finden.</translation>
+ </message>
+ <message>
+ <source>Couldn&apos;t Find Map</source>
+ <translation>Kann keine Karte finden.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;Couldn&apos;t load map: %1, exiting</source>
+ <translation>&lt;p&gt;Die %1-Karte kann nicht geladen werden; Programm wird abgebrochen.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;Unable to find any timezone information in %1 or %2</source>
+ <translation type="obsolete">&lt;p&gt;Kann keine Zeitzoneninformationen in %1 oder %2 finden.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;Unable to find any timezone information in %1</source>
+ <translation>&lt;p&gt;Kann keine Zeitzoneninformationen in %1 finden</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/clock.qm b/i18n/de/clock.qm
new file mode 100644
index 0000000..07daefa
--- a/dev/null
+++ b/i18n/de/clock.qm
Binary files differ
diff --git a/i18n/de/clock.ts b/i18n/de/clock.ts
new file mode 100644
index 0000000..9264ae3
--- a/dev/null
+++ b/i18n/de/clock.ts
@@ -0,0 +1,25 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>Clock</name>
+ <message>
+ <source>Clock</source>
+ <translation>Uhr</translation>
+ </message>
+ <message>
+ <source>Stopwatch</source>
+ <translation>Stoppuhr</translation>
+ </message>
+ <message>
+ <source>Start</source>
+ <translation>Start</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>Zurücksetzen</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>Stop</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/datebook.qm b/i18n/de/datebook.qm
new file mode 100644
index 0000000..a365763
--- a/dev/null
+++ b/i18n/de/datebook.qm
Binary files differ
diff --git a/i18n/de/datebook.ts b/i18n/de/datebook.ts
new file mode 100644
index 0000000..ab0f2b5
--- a/dev/null
+++ b/i18n/de/datebook.ts
@@ -0,0 +1,959 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>DateBook</name>
+ <message>
+ <source>Day</source>
+ <translation>Tag</translation>
+ </message>
+ <message>
+ <source>New</source>
+ <translation>Neu</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation type="obsolete">Datei</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Anzeigen</translation>
+ </message>
+ <message>
+ <source>Week</source>
+ <translation>Woche</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="obsolete">Schließen</translation>
+ </message>
+ <message>
+ <source>Month</source>
+ <translation>Monat</translation>
+ </message>
+ <message>
+ <source>Edit Event</source>
+ <translation>Termin</translation>
+ </message>
+ <message>
+ <source>Datebook</source>
+ <translation type="obsolete">Terminkalender</translation>
+ </message>
+ <message>
+ <source>Date Book</source>
+ <translation type="obsolete">Terminkalender</translation>
+ </message>
+ <message>
+ <source>Calendar</source>
+ <translation>Kalender</translation>
+ </message>
+ <message>
+ <source>Settings</source>
+ <translation>Einstellungen</translation>
+ </message>
+ <message>
+ <source>Today</source>
+ <translation>Heute</translation>
+ </message>
+ <message>
+ <source>Alarm and Start Time...</source>
+ <translation>Alarm und Startzeit...</translation>
+ </message>
+ <message>
+ <source>Event duration is potentially longer
+than interval between repeats.</source>
+ <translation>Dauer des Ereignisses ist möglicherweise länger als der Zeitraum zwischen zwei Wiederholungen.</translation>
+ </message>
+ <message>
+ <source>Can not edit data, currently syncing</source>
+ <translation>Daten können während des Synchronisierens nicht bearbeitet werden</translation>
+ </message>
+ <message>
+ <source>Are you sure you want to delete
+
+%1?</source>
+ <translation type="obsolete"></translation>
+ </message>
+ <message>
+ <source> minutes)</source>
+ <translation>Minuten)</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <source>Out of space</source>
+ <translation>Kein Platz verfügbar</translation>
+ </message>
+ <message>
+ <source>Calendar was unable to save
+your changes.
+Free up some space and try again.
+
+Quit anyway?</source>
+ <translation>Kalender konnte die Änderungen
+nicht speichern.
+Machen Sie mehr Platz verfügbar und
+versuchen Sie es erneut.
+
+Trotzdem beenden?</translation>
+ </message>
+ <message>
+ <source>(Unknown)</source>
+ <translation>(Unbekannt)</translation>
+ </message>
+ <message>
+ <source>Error!</source>
+ <translation>Fehler!</translation>
+ </message>
+ <message>
+ <source>Fix it</source>
+ <translation>Korrigiere</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>Fortsetzen</translation>
+ </message>
+ <message>
+ <source>Find</source>
+ <translation>Suchen</translation>
+ </message>
+</context>
+<context>
+ <name>DateBookDayHeaderBase</name>
+ <message>
+ <source>F</source>
+ <translation>F</translation>
+ </message>
+ <message>
+ <source>M</source>
+ <translation>M</translation>
+ </message>
+ <message>
+ <source>S</source>
+ <translation>S</translation>
+ </message>
+ <message>
+ <source>T</source>
+ <translation>D</translation>
+ </message>
+ <message>
+ <source>W</source>
+ <translation>M</translation>
+ </message>
+ <message>
+ <source>Jan 02 00</source>
+ <translation type="obsolete">02. Januar 2000</translation>
+ </message>
+ <message>
+ <source>Form1</source>
+ <translation>Schablone 1</translation>
+ </message>
+ <message>
+ <source>Friday</source>
+ <translation>Freitag</translation>
+ </message>
+ <message>
+ <source>Monday</source>
+ <translation>Montag</translation>
+ </message>
+ <message>
+ <source>Sunday</source>
+ <translation>Sonntag</translation>
+ </message>
+ <message>
+ <source>Saturday</source>
+ <translation>Sonnabend</translation>
+ </message>
+ <message>
+ <source>Wednesday</source>
+ <translation>Mittwoch</translation>
+ </message>
+ <message>
+ <source>Tuesday</source>
+ <translation>Dienstag</translation>
+ </message>
+ <message>
+ <source>Thursday</source>
+ <translation>Donnerstag</translation>
+ </message>
+</context>
+<context>
+ <name>DateBookDayView</name>
+ <message>
+ <source>:00p</source>
+ <translation>:00p</translation>
+ </message>
+</context>
+<context>
+ <name>DateBookDayWidget</name>
+ <message>
+ <source>Delete</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <source>Edit...</source>
+ <translation type="obsolete">Ändern...</translation>
+ </message>
+ <message>
+ <source>Start</source>
+ <translation>Start</translation>
+ </message>
+ <message>
+ <source>End</source>
+ <translation>Ende</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>Bearbeiten</translation>
+ </message>
+ <message>
+ <source>Beam</source>
+ <translation>Senden</translation>
+ </message>
+</context>
+<context>
+ <name>DateBookSettings</name>
+ <message>
+ <source>:00 PM</source>
+ <translation>:00 PM</translation>
+ </message>
+ <message>
+ <source>:00 AM</source>
+ <translation>:00 AM</translation>
+ </message>
+ <message>
+ <source>PM</source>
+ <translation>PM</translation>
+ </message>
+ <message>
+ <source>AM</source>
+ <translation>AM</translation>
+ </message>
+ <message>
+ <source>:00</source>
+ <translation>:00:00</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>DateBookSettingsBase</name>
+ <message encoding="UTF-8">
+ <source>Preferences</source>
+ <translation>Einstellungen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Start viewing events</source>
+ <translation>Ereignisse ansehen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Start Time:</source>
+ <translation>Startzeit:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>:00</source>
+ <translation>:00</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Alarm Settings</source>
+ <translation>Alarm Einstellungen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Alarm Preset</source>
+ <translation>Alarm Vorgaben</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source> minutes</source>
+ <translation>Minuten</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Remind Me:</source>
+ <translation>Erinnern:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Play Every:</source>
+ <translation>Intervall:</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>DateBookWeekHeaderBase</name>
+ <message encoding="UTF-8">
+ <source>Form1</source>
+ <translation>Schablone 1</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Y: </source>
+ <translation>J: </translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>W: </source>
+ <translation>W: </translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>00. Jan-00. Jan</source>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>DateBookWeekView</name>
+ <message>
+ <source>M</source>
+ <comment>Monday</comment>
+ <translation>M</translation>
+ </message>
+ <message>
+ <source>T</source>
+ <comment>Tuesday</comment>
+ <translation>D</translation>
+ </message>
+ <message>
+ <source>W</source>
+ <comment>Wednesday</comment>
+ <translation>M</translation>
+ </message>
+ <message>
+ <source>T</source>
+ <comment>Thursday</comment>
+ <translation>D</translation>
+ </message>
+ <message>
+ <source>F</source>
+ <comment>Friday</comment>
+ <translation>F</translation>
+ </message>
+ <message>
+ <source>S</source>
+ <comment>Saturday</comment>
+ <translation>S</translation>
+ </message>
+ <message>
+ <source>S</source>
+ <comment>Sunday</comment>
+ <translation>S</translation>
+ </message>
+ <message>
+ <source>p</source>
+ <translation>p</translation>
+ </message>
+</context>
+<context>
+ <name>DateBookWeekWidget</name>
+ <message>
+ <source>Delete</source>
+ <translation type="obsolete">Löschen</translation>
+ </message>
+ <message>
+ <source>Edit...</source>
+ <translation type="obsolete">Ändern...</translation>
+ </message>
+</context>
+<context>
+ <name>DateEntry</name>
+ <message>
+ <source>Calendar</source>
+ <translation>Kalendar</translation>
+ </message>
+ <message>
+ <source>Repeat...</source>
+ <translation>Wiederholen...</translation>
+ </message>
+ <message>
+ <source>Daily...</source>
+ <translation>Täglich...</translation>
+ </message>
+ <message>
+ <source>Weekly...</source>
+ <translation>Wöchentlich...</translation>
+ </message>
+ <message>
+ <source>Monthly...</source>
+ <translation>Monatlich...</translation>
+ </message>
+ <message>
+ <source>Yearly...</source>
+ <translation>Jährlich...</translation>
+ </message>
+ <message>
+ <source>No Repeat...</source>
+ <translation>Keine Wiederholung...</translation>
+ </message>
+</context>
+<context>
+ <name>DateEntryBase</name>
+ <message>
+ <source>Ends</source>
+ <translation type="obsolete">endet</translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translation>zu Hause</translation>
+ </message>
+ <message>
+ <source>Oslo</source>
+ <translation type="obsolete">Oslo</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation type="obsolete">Typ</translation>
+ </message>
+ <message>
+ <source>Jan 02 00</source>
+ <translation>02. Januar 2000</translation>
+ </message>
+ <message>
+ <source>00:00</source>
+ <translation>00:00</translation>
+ </message>
+ <message>
+ <source>00:30</source>
+ <translation>00:30</translation>
+ </message>
+ <message>
+ <source>01:00</source>
+ <translation>01:00</translation>
+ </message>
+ <message>
+ <source>01:30</source>
+ <translation>01:30</translation>
+ </message>
+ <message>
+ <source>02:00</source>
+ <translation>02:00</translation>
+ </message>
+ <message>
+ <source>02:30</source>
+ <translation>02:30</translation>
+ </message>
+ <message>
+ <source>03:00</source>
+ <translation>03:00</translation>
+ </message>
+ <message>
+ <source>03:30</source>
+ <translation>03:30</translation>
+ </message>
+ <message>
+ <source>04:00</source>
+ <translation>04:00</translation>
+ </message>
+ <message>
+ <source>04:30</source>
+ <translation>04:30</translation>
+ </message>
+ <message>
+ <source>05:00</source>
+ <translation>05:00</translation>
+ </message>
+ <message>
+ <source>05:30</source>
+ <translation>05:30</translation>
+ </message>
+ <message>
+ <source>06:00</source>
+ <translation>06:00</translation>
+ </message>
+ <message>
+ <source>06:30</source>
+ <translation>06:30</translation>
+ </message>
+ <message>
+ <source>07:00</source>
+ <translation>07:00</translation>
+ </message>
+ <message>
+ <source>07:30</source>
+ <translation>07:30</translation>
+ </message>
+ <message>
+ <source>08:00</source>
+ <translation>08:00</translation>
+ </message>
+ <message>
+ <source>08:30</source>
+ <translation>08:30</translation>
+ </message>
+ <message>
+ <source>09:00</source>
+ <translation>09:00</translation>
+ </message>
+ <message>
+ <source>09:30</source>
+ <translation>09:30</translation>
+ </message>
+ <message>
+ <source>10:00</source>
+ <translation>10:00</translation>
+ </message>
+ <message>
+ <source>10:30</source>
+ <translation>10:30</translation>
+ </message>
+ <message>
+ <source>11:00</source>
+ <translation>11:00</translation>
+ </message>
+ <message>
+ <source>11:30</source>
+ <translation>11:30</translation>
+ </message>
+ <message>
+ <source>12:00</source>
+ <translation>12:00</translation>
+ </message>
+ <message>
+ <source>12:30</source>
+ <translation>12:30</translation>
+ </message>
+ <message>
+ <source>13:00</source>
+ <translation>13:00</translation>
+ </message>
+ <message>
+ <source>13:30</source>
+ <translation>13:30</translation>
+ </message>
+ <message>
+ <source>14:00</source>
+ <translation>14:00</translation>
+ </message>
+ <message>
+ <source>14:30</source>
+ <translation>14:30</translation>
+ </message>
+ <message>
+ <source>15:00</source>
+ <translation>15:00</translation>
+ </message>
+ <message>
+ <source>15:30</source>
+ <translation>15:30</translation>
+ </message>
+ <message>
+ <source>16:00</source>
+ <translation>16:00</translation>
+ </message>
+ <message>
+ <source>16:30</source>
+ <translation>16:30</translation>
+ </message>
+ <message>
+ <source>17:00</source>
+ <translation>17:00</translation>
+ </message>
+ <message>
+ <source>17:30</source>
+ <translation>17:30</translation>
+ </message>
+ <message>
+ <source>18:00</source>
+ <translation>18:00</translation>
+ </message>
+ <message>
+ <source>18:30</source>
+ <translation>18:30</translation>
+ </message>
+ <message>
+ <source>19:00</source>
+ <translation>19:00</translation>
+ </message>
+ <message>
+ <source>19:30</source>
+ <translation>19:30</translation>
+ </message>
+ <message>
+ <source>20:00</source>
+ <translation>20:00</translation>
+ </message>
+ <message>
+ <source>20:30</source>
+ <translation>20:30</translation>
+ </message>
+ <message>
+ <source>21:00</source>
+ <translation>21:00</translation>
+ </message>
+ <message>
+ <source>21:30</source>
+ <translation>21:30</translation>
+ </message>
+ <message>
+ <source>22:00</source>
+ <translation>22:00</translation>
+ </message>
+ <message>
+ <source>22:30</source>
+ <translation>22:30</translation>
+ </message>
+ <message>
+ <source>23:00</source>
+ <translation>23:00</translation>
+ </message>
+ <message>
+ <source>23:30</source>
+ <translation>23:30</translation>
+ </message>
+ <message>
+ <source>Lunch</source>
+ <translation>Mittagessen</translation>
+ </message>
+ <message>
+ <source>&amp;Alarm</source>
+ <translation>&amp;Alarm</translation>
+ </message>
+ <message>
+ <source>Santa Clara</source>
+ <translation type="obsolete">Santa Clara</translation>
+ </message>
+ <message>
+ <source>Meeting</source>
+ <translation>Meeting</translation>
+ </message>
+ <message>
+ <source> minutes</source>
+ <translation>Minuten</translation>
+ </message>
+ <message>
+ <source>Dinner</source>
+ <translation>Abendessen</translation>
+ </message>
+ <message>
+ <source>Description:</source>
+ <translation>Beschreibung:</translation>
+ </message>
+ <message>
+ <source>Normal</source>
+ <translation type="obsolete">Normal</translation>
+ </message>
+ <message>
+ <source>Repeat</source>
+ <translation>Wiederholung</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>Ort</translation>
+ </message>
+ <message>
+ <source>Starts</source>
+ <translation type="obsolete">beginnt</translation>
+ </message>
+ <message>
+ <source>Travel</source>
+ <translation>Reise</translation>
+ </message>
+ <message>
+ <source>(Nothing)</source>
+ <translation type="obsolete">(Leer)</translation>
+ </message>
+ <message>
+ <source>Time zone:</source>
+ <translation>Zeitzone:</translation>
+ </message>
+ <message>
+ <source>All Day</source>
+ <translation type="obsolete">Ganzer Tag</translation>
+ </message>
+ <message>
+ <source>Category</source>
+ <translation>Kategorie</translation>
+ </message>
+ <message>
+ <source>Brisbane</source>
+ <translation type="obsolete">Brisbane</translation>
+ </message>
+ <message>
+ <source>New Event</source>
+ <translation>Neuer Termin</translation>
+ </message>
+ <message>
+ <source>Every Week</source>
+ <translation type="obsolete">Jede Woche</translation>
+ </message>
+ <message>
+ <source>&lt;Edit Pattern...&gt;</source>
+ <translation type="obsolete">&lt;Schablone anpassen&gt;</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>(None)</source>
+ <translation>(Ohne Text)</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>(Unknown)</source>
+ <translation>(Unbekannt)</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Office</source>
+ <translation>Büro</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Silent</source>
+ <translation>Still</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Loud</source>
+ <translation>Laut</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>No Repeat...</source>
+ <translation>Keine Wiederholung...</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Start</source>
+ <translation>Start</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>End</source>
+ <translation>Ende</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>All day</source>
+ <translation>Ganztags</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>Start</source>
+ <translation>Start</translation>
+ </message>
+ <message>
+ <source>End</source>
+ <translation>Ende</translation>
+ </message>
+ <message>
+ <source>Every</source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>%1 %2 every </source>
+ <translation>%1 %2 alle</translation>
+ </message>
+ <message>
+ <source>The %1 every </source>
+ <translation>Die %1 alle</translation>
+ </message>
+ <message>
+ <source>The %1 %1 of every</source>
+ <translation>Die %1 %1 von allen</translation>
+ </message>
+ <message>
+ <source>Every </source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>Monday</source>
+ <translation>Montag</translation>
+ </message>
+ <message>
+ <source>Tuesday</source>
+ <translation>Dienstag</translation>
+ </message>
+ <message>
+ <source>Wednesday</source>
+ <translation>Mittwoch</translation>
+ </message>
+ <message>
+ <source>Thursday</source>
+ <translation>Donnerstag</translation>
+ </message>
+ <message>
+ <source>Friday</source>
+ <translation>Freitag</translation>
+ </message>
+ <message>
+ <source>Saturday</source>
+ <translation>Samstag</translation>
+ </message>
+ <message>
+ <source>Sunday</source>
+ <translation>Sonntag</translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>st</source>
+ <translation>.</translation>
+ </message>
+ <message>
+ <source>nd</source>
+ <translation>.</translation>
+ </message>
+ <message>
+ <source>rd</source>
+ <translation>.</translation>
+ </message>
+ <message>
+ <source>th</source>
+ <translation>.</translation>
+ </message>
+</context>
+<context>
+ <name>RepeatEntry</name>
+ <message>
+ <source>No Repeat</source>
+ <translation>Nicht wiederholen</translation>
+ </message>
+ <message>
+ <source>day(s)</source>
+ <translation>Tag(e)</translation>
+ </message>
+ <message>
+ <source>week(s)</source>
+ <translation>Woche(n)</translation>
+ </message>
+ <message>
+ <source>Repeat By</source>
+ <translation>Wiederholen nach</translation>
+ </message>
+ <message>
+ <source>Day</source>
+ <translation>Tag</translation>
+ </message>
+ <message>
+ <source>Date</source>
+ <translation>Datum</translation>
+ </message>
+ <message>
+ <source>month(s)</source>
+ <translation>Monat(e)</translation>
+ </message>
+ <message>
+ <source>year(s)</source>
+ <translation>Jahr(e)</translation>
+ </message>
+ <message>
+ <source>days</source>
+ <translation>Tage</translation>
+ </message>
+ <message>
+ <source>day</source>
+ <translation>Tag</translation>
+ </message>
+ <message>
+ <source>weeks</source>
+ <translation>Wochen</translation>
+ </message>
+ <message>
+ <source>week</source>
+ <translation>Woche</translation>
+ </message>
+ <message>
+ <source>month</source>
+ <translation>Monat</translation>
+ </message>
+ <message>
+ <source>year</source>
+ <translation>Jahr</translation>
+ </message>
+ <message>
+ <source> and </source>
+ <translation>Und</translation>
+ </message>
+ <message>
+ <source>,
+and </source>
+ <translation>, und</translation>
+ </message>
+ <message>
+ <source>, and </source>
+ <translation>, und</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>RepeatEntryBase</name>
+ <message encoding="UTF-8">
+ <source>Repeating Event </source>
+ <translation>Mehrfaches Ereignis</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>None</source>
+ <translation>Keine</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Day</source>
+ <translation>Tag</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Week</source>
+ <translation>Woche</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Month</source>
+ <translation>Monat</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Year</source>
+ <translation>Jahr</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Every:</source>
+ <translation>Alle:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Frequency</source>
+ <translation>Häufigkeit</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>End On:</source>
+ <translation>Beenden am:</translation>
+ </message>
+ <message>
+ <source>No End Date</source>
+ <translation>Kein Ende-Datum</translation>
+ </message>
+ <message>
+ <source>Repeat On</source>
+ <translation>Wiederholen am</translation>
+ </message>
+ <message>
+ <source>Mon</source>
+ <translation>Mo</translation>
+ </message>
+ <message>
+ <source>Tue</source>
+ <translation>Di</translation>
+ </message>
+ <message>
+ <source>Wed</source>
+ <translation>Mi</translation>
+ </message>
+ <message>
+ <source>Thu</source>
+ <translation>Do</translation>
+ </message>
+ <message>
+ <source>Fri</source>
+ <translation>Fr</translation>
+ </message>
+ <message>
+ <source>Sat</source>
+ <translation>Sa</translation>
+ </message>
+ <message>
+ <source>Sun</source>
+ <translation>So</translation>
+ </message>
+ <message>
+ <source>Every</source>
+ <translation>Alle</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Var1</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Var 2</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>WeekVar</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>months</source>
+ <translation>Monate</translation>
+ </message>
+ <message>
+ <source>years</source>
+ <translation>Jahre</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/filebrowser.qm b/i18n/de/filebrowser.qm
new file mode 100644
index 0000000..94176ff
--- a/dev/null
+++ b/i18n/de/filebrowser.qm
Binary files differ
diff --git a/i18n/de/filebrowser.ts b/i18n/de/filebrowser.ts
new file mode 100644
index 0000000..c0ed6f4
--- a/dev/null
+++ b/i18n/de/filebrowser.ts
@@ -0,0 +1,164 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>FileBrowser</name>
+ <message>
+ <source>/</source>
+ <translation>/</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>Ausschneiden</translation>
+ </message>
+ <message>
+ <source>&amp;Dir</source>
+ <translation>&amp;Verzeichnis</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>Kopieren</translation>
+ </message>
+ <message>
+ <source>&amp;Sort</source>
+ <translation>&amp;Sortieren</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Schließen</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Einfügen</translation>
+ </message>
+ <message>
+ <source>by &amp;Date </source>
+ <translation>nach &amp;Datum</translation>
+ </message>
+ <message>
+ <source>by &amp;Name </source>
+ <translation>nach &amp;Namen</translation>
+ </message>
+ <message>
+ <source>by &amp;Size </source>
+ <translation>nach &amp;Größe</translation>
+ </message>
+ <message>
+ <source>by &amp;Type </source>
+ <translation>nach Datei&amp;typ</translation>
+ </message>
+ <message>
+ <source>Previous dir</source>
+ <translation>Letztes Verzeichnis</translation>
+ </message>
+ <message>
+ <source>New folder</source>
+ <translation>Neues Verzeichnis</translation>
+ </message>
+ <message>
+ <source>Parent dir</source>
+ <translation>Übergeordnetes Verzeichnis</translation>
+ </message>
+ <message>
+ <source>File Browser</source>
+ <translation>Filebrowser</translation>
+ </message>
+</context>
+<context>
+ <name>FileView</name>
+ <message>
+ <source>&amp;No</source>
+ <translation>&amp;Nein</translation>
+ </message>
+ <message>
+ <source>&amp;Ok</source>
+ <translation>&amp;OK</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>Ausschneiden</translation>
+ </message>
+ <message>
+ <source>&amp;Cut</source>
+ <translation>Auss&amp;chneiden</translation>
+ </message>
+ <message>
+ <source>&amp;Run</source>
+ <translation>St&amp;arten</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>&amp;Ja</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>&amp;Kopieren</translation>
+ </message>
+ <message>
+ <source>Rename failed!</source>
+ <translation>Umbenennung gescheitert!</translation>
+ </message>
+ <message>
+ <source>Launch Application</source>
+ <translation>Starte Programm</translation>
+ </message>
+ <message>
+ <source>Dese&amp;lect all</source>
+ <translation>Auswahl &amp;rückgängig machen</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>&amp;Einfügen</translation>
+ </message>
+ <message>
+ <source>Rename file</source>
+ <translation>Datei umbenennen</translation>
+ </message>
+ <message>
+ <source>&amp;View as text</source>
+ <translation>Als &amp;Text anzeigen</translation>
+ </message>
+ <message>
+ <source>Launch failed!</source>
+ <translation>Programmstart gescheitert!</translation>
+ </message>
+ <message>
+ <source>R&amp;ename</source>
+ <translation>&amp;Umbenennen</translation>
+ </message>
+ <message>
+ <source>New folder</source>
+ <translation>Neues Verzeichnis</translation>
+ </message>
+ <message>
+ <source>Folder creation failed!</source>
+ <translation>Verzeichnis kann nicht angelegt werden!</translation>
+ </message>
+ <message>
+ <source>Paste file</source>
+ <translation>Datei einfügen</translation>
+ </message>
+ <message>
+ <source>Paste failed!</source>
+ <translation>Einfügen gescheitert!</translation>
+ </message>
+ <message>
+ <source>&amp;Select all</source>
+ <translation>Alles &amp;markieren</translation>
+ </message>
+ <message>
+ <source>Cut failed!</source>
+ <translation>Kein Ausschneiden möglich!</translation>
+ </message>
+ <message>
+ <source>View as text</source>
+ <translation>Als Text anzeigen</translation>
+ </message>
+ <message>
+ <source>Unable to open file!</source>
+ <translation>Datei kann nicht geöffnet werden!</translation>
+ </message>
+ <message>
+ <source>Are you sure?</source>
+ <translation>Sind Sie sicher?</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/go.qm b/i18n/de/go.qm
new file mode 100644
index 0000000..f26c8e0
--- a/dev/null
+++ b/i18n/de/go.qm
Binary files differ
diff --git a/i18n/de/go.ts b/i18n/de/go.ts
new file mode 100644
index 0000000..709f436
--- a/dev/null
+++ b/i18n/de/go.ts
@@ -0,0 +1,56 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>GoMainWidget</name>
+ <message>
+ <source>New Game</source>
+ <translation>Neues Spiel</translation>
+ </message>
+ <message>
+ <source>Pass</source>
+ <translation>Passe</translation>
+ </message>
+ <message>
+ <source>Resign</source>
+ <translation>Aufgeben</translation>
+ </message>
+ <message>
+ <source>Two player option</source>
+ <translation>Zwei Spieler</translation>
+ </message>
+ <message>
+ <source>Game</source>
+ <translation>Spiel</translation>
+ </message>
+</context>
+<context>
+ <name>GoWidget</name>
+ <message>
+ <source>White %1, Black %2. </source>
+ <translation>Weiß %1, Schwarz %2</translation>
+ </message>
+ <message>
+ <source>White wins.</source>
+ <translation>Weiß gewinnt.</translation>
+ </message>
+ <message>
+ <source>Black wins.</source>
+ <translation>Schwarz gewinnt.</translation>
+ </message>
+ <message>
+ <source>A draw.</source>
+ <translation>Ein Zug.</translation>
+ </message>
+ <message>
+ <source>I pass</source>
+ <translation>Ich passe</translation>
+ </message>
+ <message>
+ <source>Prisoners: black %1, white %2</source>
+ <translation>Gefangene: Schwarz: %1, Weiß %2</translation>
+ </message>
+ <message>
+ <source>Go</source>
+ <translation>Go</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/helpbrowser.qm b/i18n/de/helpbrowser.qm
new file mode 100644
index 0000000..ff68585
--- a/dev/null
+++ b/i18n/de/helpbrowser.qm
Binary files differ
diff --git a/i18n/de/helpbrowser.ts b/i18n/de/helpbrowser.ts
new file mode 100644
index 0000000..eb8dfb7
--- a/dev/null
+++ b/i18n/de/helpbrowser.ts
@@ -0,0 +1,53 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>HelpBrowser</name>
+ <message>
+ <source>Go</source>
+ <translation type="obsolete">Start</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation type="obsolete">Hilfe</translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translation>Standardseite</translation>
+ </message>
+ <message>
+ <source>About Qt ...</source>
+ <translation type="obsolete">Über Qt ...</translation>
+ </message>
+ <message>
+ <source>Add Bookmark</source>
+ <translation>Lesezeichen einfügen</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>Lesezeichen</translation>
+ </message>
+ <message>
+ <source>About ...</source>
+ <translation type="obsolete">Über ...</translation>
+ </message>
+ <message>
+ <source>Backward</source>
+ <translation>Zurück</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>Vorwärts</translation>
+ </message>
+ <message>
+ <source>Remove from Bookmarks</source>
+ <translation>Lesezeichen entfernen</translation>
+ </message>
+ <message>
+ <source>Help Browser</source>
+ <translation>Hilfe</translation>
+ </message>
+ <message>
+ <source>HelpBrowser</source>
+ <translation>Hilfe</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/language.qm b/i18n/de/language.qm
new file mode 100644
index 0000000..3fc0afc
--- a/dev/null
+++ b/i18n/de/language.qm
Binary files differ
diff --git a/i18n/de/language.ts b/i18n/de/language.ts
new file mode 100644
index 0000000..9a8b6c9
--- a/dev/null
+++ b/i18n/de/language.ts
@@ -0,0 +1,13 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>LanguageSettingsBase</name>
+ <message encoding="UTF-8">
+ <source>Language</source>
+ <translation>Sprache</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Select language</source>
+ <translation>Wählen Sie Ihre Sprache</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libbatteryapplet.qm b/i18n/de/libbatteryapplet.qm
new file mode 100644
index 0000000..bf86b5e
--- a/dev/null
+++ b/i18n/de/libbatteryapplet.qm
Binary files differ
diff --git a/i18n/de/libbatteryapplet.ts b/i18n/de/libbatteryapplet.ts
new file mode 100644
index 0000000..112725c
--- a/dev/null
+++ b/i18n/de/libbatteryapplet.ts
@@ -0,0 +1,61 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>BatteryStatus</name>
+ <message>
+ <source>Charging</source>
+ <translation>Akku wird geladen</translation>
+ </message>
+ <message>
+ <source>Percentage battery remaining</source>
+ <translation>Prozent Batterie übrig</translation>
+ </message>
+ <message>
+ <source>Battery status: </source>
+ <translation>Batterie Status: </translation>
+ </message>
+ <message>
+ <source>Good</source>
+ <translation>Gut</translation>
+ </message>
+ <message>
+ <source>Low</source>
+ <translation>Niedrig</translation>
+ </message>
+ <message>
+ <source>Very Low</source>
+ <translation>Sehr niedrig</translation>
+ </message>
+ <message>
+ <source>Critical</source>
+ <translation>Kritisch</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <translation>Unbekannt</translation>
+ </message>
+ <message>
+ <source>On backup power</source>
+ <translation>Auf Reserve</translation>
+ </message>
+ <message>
+ <source>Power on-line</source>
+ <translation>Energie angeschlossen</translation>
+ </message>
+ <message>
+ <source>External power disconnected</source>
+ <translation>Keine externe Stromversorgung</translation>
+ </message>
+ <message>
+ <source>Battery time remaining</source>
+ <translation>Verbliebene Batteriezeit</translation>
+ </message>
+ <message>
+ <source>Battery Status</source>
+ <translation>Batteriestatus</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Schließen</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libcardmonapplet.qm b/i18n/de/libcardmonapplet.qm
new file mode 100644
index 0000000..45f65b0
--- a/dev/null
+++ b/i18n/de/libcardmonapplet.qm
Binary files differ
diff --git a/i18n/de/libcardmonapplet.ts b/i18n/de/libcardmonapplet.ts
new file mode 100644
index 0000000..1cb2e2e
--- a/dev/null
+++ b/i18n/de/libcardmonapplet.ts
@@ -0,0 +1,21 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>CardMonitor</name>
+ <message>
+ <source>Eject card</source>
+ <translation>Karte auswerfen</translation>
+ </message>
+ <message>
+ <source>CardMonitor</source>
+ <translation>KartenMonitor</translation>
+ </message>
+ <message>
+ <source>Card eject failed!</source>
+ <translation>Auswerfen der Karte fehlgeschlagen!</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;Ok</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libclockapplet.qm b/i18n/de/libclockapplet.qm
new file mode 100644
index 0000000..6bd22c4
--- a/dev/null
+++ b/i18n/de/libclockapplet.qm
Binary files differ
diff --git a/i18n/de/libclockapplet.ts b/i18n/de/libclockapplet.ts
new file mode 100644
index 0000000..4eb9e18
--- a/dev/null
+++ b/i18n/de/libclockapplet.ts
@@ -0,0 +1,2 @@
+<!DOCTYPE TS><TS>
+</TS>
diff --git a/i18n/de/libdialup.qm b/i18n/de/libdialup.qm
new file mode 100644
index 0000000..7317ec8
--- a/dev/null
+++ b/i18n/de/libdialup.qm
Binary files differ
diff --git a/i18n/de/libdialup.ts b/i18n/de/libdialup.ts
new file mode 100644
index 0000000..694ee10
--- a/dev/null
+++ b/i18n/de/libdialup.ts
@@ -0,0 +1,196 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>DialupBase</name>
+ <message encoding="UTF-8">
+ <source>Dial-up </source>
+ <translation>Modemverbindung</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Account</source>
+ <translation>Account</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Phone:</source>
+ <translation>Telefon:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Password:</source>
+ <translation>Passwort:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Username:</source>
+ <translation>Benutzername:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Modem</source>
+ <translation>Modem</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>AT-dial:</source>
+ <translation>AT-Kommando:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>ATDT</source>
+ <translation>ATDT</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>ATDP</source>
+ <translation>ATDP</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Speed:</source>
+ <translation>Geschwindigkeit:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>4800</source>
+ <translation>4800</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>9600</source>
+ <translation>9600</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>19200</source>
+ <translation>19200</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>38400</source>
+ <translation>38400</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>57600</source>
+ <translation>57600</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>115200</source>
+ <translation>115200</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Wait time:</source>
+ <translation>Wartezeit:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>sec</source>
+ <translation>Sek</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Flow control:</source>
+ <translation>Flusskontrolle:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Hardware flow control</source>
+ <translation>Hardware</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Network</source>
+ <translation>Netzwerk</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Auto-detect name servers</source>
+ <translation>Automatische Nameserver-Ermittlung</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Gateway</source>
+ <translation>Gateway</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Auto-detect routing</source>
+ <translation>Automatische Routing-Ermittlung</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>First DNS</source>
+ <translation>Erster Nameserver</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Second DNS</source>
+ <translation>Zweiter Nameserver</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Proxies</source>
+ <translation>Proxies</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Demand Dialing</source>
+ <translation>Anforderungsdialog</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Manual connect and disconnect</source>
+ <translation>Manuelles Verbinden und Trennen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source> seconds</source>
+ <translation>Sekunden</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Idle timeout:</source>
+ <translation>Trennen nach:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Automatic connect and disconnect</source>
+ <translation>Automatisches Verbinden und Trennen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Manual connect, automatic disconnect</source>
+ <translation>Manuelles Verbinden, automatisch Trennen</translation>
+ </message>
+</context>
+<context>
+ <name>PppMon</name>
+ <message>
+ <source>Initializing</source>
+ <translation type="obsolete">Initialisierung</translation>
+ </message>
+ <message>
+ <source>Connecting</source>
+ <translation>Verbinden...</translation>
+ </message>
+ <message>
+ <source>Authenticating</source>
+ <translation>Authentifizierung</translation>
+ </message>
+ <message>
+ <source>No dialtone</source>
+ <translation>Kein Wählton</translation>
+ </message>
+ <message>
+ <source>No carrier</source>
+ <translation>Kein Carrier</translation>
+ </message>
+ <message>
+ <source>Number is busy</source>
+ <translation>Besetzt</translation>
+ </message>
+ <message>
+ <source>Timed out</source>
+ <translation>Timed out</translation>
+ </message>
+ <message>
+ <source>Connection failed</source>
+ <translation>Verbindung fehlgeschlagen</translation>
+ </message>
+ <message>
+ <source>Authentication Failed</source>
+ <translation>Falsche Authentifizierung</translation>
+ </message>
+ <message>
+ <source>Connected</source>
+ <translation>Verbunden</translation>
+ </message>
+ <message>
+ <source>Waiting for activity</source>
+ <translation>Warte auf Aktivität</translation>
+ </message>
+ <message>
+ <source>Initializing modem</source>
+ <translation>Modem wird Initialisiert</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/liblan.qm b/i18n/de/liblan.qm
new file mode 100644
index 0000000..134115e
--- a/dev/null
+++ b/i18n/de/liblan.qm
Binary files differ
diff --git a/i18n/de/liblan.ts b/i18n/de/liblan.ts
new file mode 100644
index 0000000..86627c2
--- a/dev/null
+++ b/i18n/de/liblan.ts
@@ -0,0 +1,95 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>Lan</name>
+ <message>
+ <source>LAN Setup</source>
+ <translation>LAN einrichten</translation>
+ </message>
+ <message>
+ <source>This name already
+exists. Please choose a
+different name.</source>
+ <translation>Dieser Name existiert
+bereits. Bitte wählen Sie
+einen anderen Namen.</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>LanBase</name>
+ <message encoding="UTF-8">
+ <source>LAN </source>
+ <translation>LAN</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Account</source>
+ <translation>Account</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Specify TCP/IP Information</source>
+ <translation>TCP/IP manuell konfigurieren</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Obtain TCP/IP Information Automatically</source>
+ <translation>Automatische TCP/IP-Konfiguration</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>TCP/IP</source>
+ <translation>TCP/IP</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>IP Address</source>
+ <translation>IP-Adresse</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Gateway</source>
+ <translation>Gateway</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Subnet Mask</source>
+ <translation>Subnet-Maske</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Broadcast</source>
+ <translation>Broadcast</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>DNS</source>
+ <translation>DNS</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>First DNS</source>
+ <translation>Erster Nameserver</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Second DNS</source>
+ <translation>Zweiter Nameserver</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Proxies</source>
+ <translation>Proxies</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>LanState</name>
+ <message encoding="UTF-8">
+ <source>Form2</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Service:</source>
+ <translation>Service:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>IP address:</source>
+ <translation>IP-Adresse</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>0.0.0.0</source>
+ <translation></translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libnetmonapplet.qm b/i18n/de/libnetmonapplet.qm
new file mode 100644
index 0000000..f69699f
--- a/dev/null
+++ b/i18n/de/libnetmonapplet.qm
Binary files differ
diff --git a/i18n/de/libnetmonapplet.ts b/i18n/de/libnetmonapplet.ts
new file mode 100644
index 0000000..d56aee9
--- a/dev/null
+++ b/i18n/de/libnetmonapplet.ts
@@ -0,0 +1,36 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>NetMonitor</name>
+ <message>
+ <source>Network Offline</source>
+ <translation>Netwerk offline</translation>
+ </message>
+ <message>
+ <source>Disconnect</source>
+ <translation>Trennen</translation>
+ </message>
+ <message>
+ <source>Connect</source>
+ <translation>Verbinden</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>NetPassword</name>
+ <message encoding="UTF-8">
+ <source>Network Password</source>
+ <translation>Netzwerk Passwort</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Connect</source>
+ <translation>Verbinden</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Enter password for %1:</source>
+ <translation>Passwort für %1 eingeben:</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libqhandwriting.qm b/i18n/de/libqhandwriting.qm
new file mode 100644
index 0000000..372bbb2
--- a/dev/null
+++ b/i18n/de/libqhandwriting.qm
Binary files differ
diff --git a/i18n/de/libqhandwriting.ts b/i18n/de/libqhandwriting.ts
new file mode 100644
index 0000000..6d882bc
--- a/dev/null
+++ b/i18n/de/libqhandwriting.ts
@@ -0,0 +1,143 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>HandwritingHelp</name>
+ <message>
+ <source>Handwriting Help</source>
+ <translation>Hilfe zur Handschriften-Erkennung</translation>
+ </message>
+ <message>
+ <source>&lt;ul&gt;&lt;li&gt;When you start to use the handwriting recogniser write slowly, accurately and firmly.&lt;li&gt;Use the guide lines when drawing your characters.&lt;li&gt;When drawing a character with multiple strokes, each successive stroke must be drawn before the grayed strokes are erased.&lt;li&gt;Practice your handwriting using the handwriting trainer.&lt;li&gt;When adding your own character templates make sure they are sufficiently different from other characters&apos; templates.&lt;/ul&gt;</source>
+ <translation>&lt;ul&gt;&lt;li&gt;Wenn Sie erst anfangen, die Handschriften-Erkennung zu benutzen, schreiben Sie langsam, genau und fest.&lt;li&gt;Benutzen Sie die Hilfslinien wenn Sie die Buchstaben schreiben.&lt;li&gt;Wenn Sie absetzen müssen, um einen Buchstaben zu schreiben, so müssen Sie den folgenden Strich anfangen, bevor die grauen Striche gelöscht wurden.&lt;li&gt;Üben Sie Ihre Handschrift mit dem Handschriften-Trainder.&lt;li&gt;Wenn Sie Ihre eigenen Buchstaben Vorgaben hinzufügen, achten Sie darauf, dass sie unterschiedlich genug zu den anderen Buchstaben Vorgaben sind.&lt;/ul&gt;</translation>
+ </message>
+ <message>
+ <source>Tips</source>
+ <translation>Tipps</translation>
+ </message>
+ <message>
+ <source>Trainer</source>
+ <translation>Trainer</translation>
+ </message>
+</context>
+<context>
+ <name>HandwritingTrainer</name>
+ <message>
+ <source>Select a character from the list. The writing area on the left shows the reference character. Practice writing in the area on the right.</source>
+ <translation>Wählen Sie ein Zeichen aus der Liste. Auf der linken Steite ist das Zeichen abgebildet. Auf der rechten Seite können sie das Schreiben üben.</translation>
+ </message>
+ <message>
+ <source>Matched: </source>
+ <translation>Übereinstimmungen: </translation>
+ </message>
+ <message>
+ <source>Similar to: </source>
+ <translation>Ähnlich mit: </translation>
+ </message>
+ <message>
+ <source>%1%</source>
+ <translation>%1%</translation>
+ </message>
+</context>
+<context>
+ <name>InputMethods</name>
+ <message>
+ <source>Handwriting</source>
+ <translation>Handschrift</translation>
+ </message>
+</context>
+<context>
+ <name>QIMPenEdit</name>
+ <message>
+ <source>New...</source>
+ <translation>Neu...</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation>Standard</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>Löschen</translation>
+ </message>
+</context>
+<context>
+ <name>QIMPenInputCharDlg</name>
+ <message>
+ <source>Enter new character</source>
+ <translation>Neues Zeichen eingeben</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>QIMPenPrefBase</name>
+ <message encoding="UTF-8">
+ <source>Form1</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Multi-stroke character timeout:</source>
+ <translation>Mehrstrichzeichentimeout:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>ms</source>
+ <translation>ms</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Input areas displayed</source>
+ <translation>Einbagebereiche werden angezeigt</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Upper and lower case areas</source>
+ <translation>Groß/Kleinschreibzonen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Lower case (toggle Upper case)</source>
+ <translation>Kleinschreibung (umschalten zu Großschreibung)</translation>
+ </message>
+</context>
+<context>
+ <name>QIMPenSetup</name>
+ <message>
+ <source>Setup Handwriting Input</source>
+ <translation>Handschrifterkennung einrichten</translation>
+ </message>
+ <message>
+ <source>Character Profile:</source>
+ <translation>Zeichenumriss:</translation>
+ </message>
+ <message>
+ <source>Preferences</source>
+ <translation>Einstellungen</translation>
+ </message>
+ <message>
+ <source>Customize</source>
+ <translation>Ändern</translation>
+ </message>
+ <message>
+ <source>%1 ms</source>
+ <translation>%1 ms</translation>
+ </message>
+ <message>
+ <source>Out of space</source>
+ <translation>Nicht genügend Speicher vorhanden</translation>
+ </message>
+ <message>
+ <source>Unable to save information.
+Free up some space
+and try again.
+
+Quit anyway?</source>
+ <translation>Unable to save information.
+Free up some space
+and try again.
+
+Quit anyway?</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libqkeyboard.qm b/i18n/de/libqkeyboard.qm
new file mode 100644
index 0000000..6bd22c4
--- a/dev/null
+++ b/i18n/de/libqkeyboard.qm
Binary files differ
diff --git a/i18n/de/libqkeyboard.ts b/i18n/de/libqkeyboard.ts
new file mode 100644
index 0000000..318758e
--- a/dev/null
+++ b/i18n/de/libqkeyboard.ts
@@ -0,0 +1,9 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>InputMethods</name>
+ <message>
+ <source>Keyboard</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libqpe.qm b/i18n/de/libqpe.qm
new file mode 100644
index 0000000..82c2a2d
--- a/dev/null
+++ b/i18n/de/libqpe.qm
Binary files differ
diff --git a/i18n/de/libqpe.ts b/i18n/de/libqpe.ts
new file mode 100644
index 0000000..1147c1b
--- a/dev/null
+++ b/i18n/de/libqpe.ts
@@ -0,0 +1,888 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>@default</name>
+ <message>
+ <source>Mon</source>
+ <translation type="obsolete">Mo</translation>
+ </message>
+ <message>
+ <source>Tue</source>
+ <translation type="obsolete">Di</translation>
+ </message>
+ <message>
+ <source>Wed</source>
+ <translation type="obsolete">Mi</translation>
+ </message>
+ <message>
+ <source>Thu</source>
+ <translation type="obsolete">Do</translation>
+ </message>
+ <message>
+ <source>Fri</source>
+ <translation type="obsolete">Fr</translation>
+ </message>
+ <message>
+ <source>Sat</source>
+ <translation type="obsolete">Sa</translation>
+ </message>
+ <message>
+ <source>Sun</source>
+ <translation type="obsolete">So</translation>
+ </message>
+</context>
+<context>
+ <name>Categories</name>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>Unfiled</source>
+ <translation>Nicht zugeordnet</translation>
+ </message>
+ <message>
+ <source> (multi.)</source>
+ <translation>(mehrere)</translation>
+ </message>
+</context>
+<context>
+ <name>CategoryCombo</name>
+ <message>
+ <source>Unfiled</source>
+ <translation type="obsolete">Nicht zugeordnet</translation>
+ </message>
+ <message>
+ <source>(Multi.)</source>
+ <translation type="obsolete">(Mehrere)</translation>
+ </message>
+ <message>
+ <source> (Multi.)</source>
+ <translation>(mehrere)</translation>
+ </message>
+</context>
+<context>
+ <name>CategoryEdit</name>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>New Category</source>
+ <translation>Neue Kategorie</translation>
+ </message>
+ <message>
+ <source>New Category </source>
+ <translation>Neue Kategorie</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>CategoryEditBase</name>
+ <message encoding="UTF-8">
+ <source>Category Edit</source>
+ <translation>Kategorien bearbeiten</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Categories</source>
+ <translation>Kategorien</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Application</source>
+ <translation>Anwendung</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Categories Go Here</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Add</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Global</source>
+ <translation>Globale</translation>
+ </message>
+</context>
+<context>
+ <name>CategoryMenu</name>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>Unfiled</source>
+ <translation>Nicht zugeordnet</translation>
+ </message>
+</context>
+<context>
+ <name>CategorySelect</name>
+ <message>
+ <source>Edit Categories</source>
+ <translation>Kategorien bearbeiten</translation>
+ </message>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+</context>
+<context>
+ <name>DateFormat</name>
+ <message>
+ <source>D</source>
+ <translation type="obsolete">T</translation>
+ </message>
+ <message>
+ <source>M</source>
+ <translation type="obsolete">M</translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation type="obsolete">J</translation>
+ </message>
+ <message>
+ <source>day</source>
+ <translation type="obsolete">Tag</translation>
+ </message>
+ <message>
+ <source>month</source>
+ <translation type="obsolete">Monat</translation>
+ </message>
+ <message>
+ <source>year</source>
+ <translation type="obsolete">Jahr</translation>
+ </message>
+</context>
+<context>
+ <name>FileSelector</name>
+ <message>
+ <source>Close the File Selector</source>
+ <translation>Dateiauswahl schließen</translation>
+ </message>
+ <message>
+ <source>Create a new Document</source>
+ <translation>Neues Dokument erstellen</translation>
+ </message>
+ <message>
+ <source>New</source>
+ <translation>Neu</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Schließen</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>Editieren</translation>
+ </message>
+ <message>
+ <source>Edit Document</source>
+ <translation>Dokument editieren</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <source>Delete Document</source>
+ <translation>Dokument löschen</translation>
+ </message>
+ <message>
+ <source>Beam</source>
+ <translation>Beam</translation>
+ </message>
+ <message>
+ <source>Beam Document</source>
+ <translation>Dokument beamen</translation>
+ </message>
+ <message>
+ <source>Find Document</source>
+ <translation>Dokument suchen</translation>
+ </message>
+ <message>
+ <source>Document</source>
+ <translation>Dokument</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Ansicht</translation>
+ </message>
+</context>
+<context>
+ <name>FileSelectorView</name>
+ <message>
+ <source>Name</source>
+ <translation>Name</translation>
+ </message>
+</context>
+<context>
+ <name>FindWidget</name>
+ <message>
+ <source>String Not Found.</source>
+ <translation>Suchbegriff nicht vorhanden.</translation>
+ </message>
+ <message>
+ <source>End reached, starting at beginning</source>
+ <translation>Ende erreicht, starte am Anfang</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>FindWidgetBase</name>
+ <message encoding="UTF-8">
+ <source>Find</source>
+ <translation>Suchen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Find what:</source>
+ <translation>Suchbegriff:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&amp;Find</source>
+ <translation>Suchen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Category:</source>
+ <translation>Kategorie:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Cancel</source>
+ <translation type="obsolete">Abbrechen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Start Search at:</source>
+ <translation>Suche beginnen bei:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Dec 02 01</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Case Sensitive</source>
+ <translation>Groß-/Kleinschreibung beachten</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Search Backwards</source>
+ <translation>Rückwärts suchen</translation>
+ </message>
+</context>
+<context>
+ <name>LnkProperties</name>
+ <message>
+ <source>Document View</source>
+ <translation>Dokumentenansicht</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <source>File deletion failed.</source>
+ <translation>Löschen fehlgeschalgen.</translation>
+ </message>
+ <message>
+ <source>Copy of </source>
+ <translation>Copy von</translation>
+ </message>
+ <message>
+ <source>Duplicate</source>
+ <translation>Kopieren</translation>
+ </message>
+ <message>
+ <source>File copy failed.</source>
+ <translation>Kopieren fehlgeschlagen.</translation>
+ </message>
+ <message>
+ <source>Details</source>
+ <translation>Details</translation>
+ </message>
+ <message>
+ <source>Moving Document failed.</source>
+ <translation>Verschieben des Dokuments fehlgeschalgen.</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>LnkPropertiesBase</name>
+ <message encoding="UTF-8">
+ <source>Details</source>
+ <translation>Details</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Comment:</source>
+ <translation>Kommentar:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Type:</source>
+ <translation>Art:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Location:</source>
+ <translation>Ort:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Fast load (consumes memory)</source>
+ <translation>Schnellladen (verbraucht Speicher)</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Delete</source>
+ <translation>Löschen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Copy</source>
+ <translation>Kopie</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Beam</source>
+ <translation>Beam</translation>
+ </message>
+</context>
+<context>
+ <name>OwnerDlg</name>
+ <message>
+ <source>Owner Information</source>
+ <translation>Benutzerinformation</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>PasswordBase</name>
+ <message encoding="UTF-8">
+ <source>Form1</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>3</source>
+ <translation>3</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>4</source>
+ <translation>4</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>5</source>
+ <translation>5</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>6</source>
+ <translation>6</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>7</source>
+ <translation>7</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>8</source>
+ <translation>8</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>9</source>
+ <translation>9</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Enter passcode</source>
+ <translation>Passcode eingeben</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>ProxiesBase</name>
+ <message encoding="UTF-8">
+ <source>Proxy Settings</source>
+ <translation>Proxy-Einstellungen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>No proxies</source>
+ <translation>Keine Proxies</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Auto configure proxies</source>
+ <translation>Proxies automatisch konfigurieren</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Set proxies</source>
+ <translation>Proxies einstellen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Config:</source>
+ <translation>Konfiguration:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Port:</source>
+ <translation>Port:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>HTTP:</source>
+ <translation>HTTP:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>FTP:</source>
+ <translation>FTP:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Host:</source>
+ <translation>Host:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>No proxies for:</source>
+ <translation>Keine Proxies für:</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>Out of Space</source>
+ <translation>Kein freier Speicher</translation>
+ </message>
+ <message>
+ <source>There was a problem creating
+Configuration Information
+for this program.
+
+Please free up some space and
+try again.</source>
+ <translation>Es war nicht möglich,
+Konfigurationsinformationen für
+diese Anwendung zu erstellen.
+
+Geben Sie Speicherplatz frei
+und versuchen Sie es erneut.</translation>
+ </message>
+ <message>
+ <source>Unable to create start up files
+Please free up some space
+before entering data</source>
+ <translation>Die benötigten Dateien konnten
+nicht angelegt werden.
+Geben Sie Speicherplatz frei,
+bevor Sie Daten eingeben.</translation>
+ </message>
+ <message>
+ <source>Unable to schedule alarm.
+Free some memory and try again.</source>
+ <translation>Der Alarm konnte nicht eingestellt werden.
+Geben Sie Speicherplatz frei und
+versuchen Sie es erneut.</translation>
+ </message>
+ <message>
+ <source>PM</source>
+ <translation>PM</translation>
+ </message>
+ <message>
+ <source>AM</source>
+ <translation>AM</translation>
+ </message>
+ <message>
+ <source>Are you sure you want to delete
+ %1?</source>
+ <translation>Möchten Sie %1
+wirklich löschen?</translation>
+ </message>
+ <message>
+ <source>First Name</source>
+ <translation>Vorname</translation>
+ </message>
+ <message>
+ <source>Middle Name</source>
+ <translation>Zweitname</translation>
+ </message>
+ <message>
+ <source>Last Name</source>
+ <translation>Nachname</translation>
+ </message>
+ <message>
+ <source>Suffix</source>
+ <translation>Suffix</translation>
+ </message>
+ <message>
+ <source>File As</source>
+ <translation>Speichern unter</translation>
+ </message>
+ <message>
+ <source>Email</source>
+ <translation type="obsolete">E-Mail</translation>
+ </message>
+ <message>
+ <source>Emails</source>
+ <translation>E-Mail-Adressen</translation>
+ </message>
+ <message>
+ <source>Home Street</source>
+ <translation>Straße (priv)</translation>
+ </message>
+ <message>
+ <source>Home City</source>
+ <translation>Stadt (priv)</translation>
+ </message>
+ <message>
+ <source>Home State</source>
+ <translation>Region (priv)</translation>
+ </message>
+ <message>
+ <source>Home Zip</source>
+ <translation>PLZ (priv)</translation>
+ </message>
+ <message>
+ <source>Home Country</source>
+ <translation>Land (priv)</translation>
+ </message>
+ <message>
+ <source>Home Phone</source>
+ <translation>Telefon (priv)</translation>
+ </message>
+ <message>
+ <source>Home Fax</source>
+ <translation>Fax (priv)</translation>
+ </message>
+ <message>
+ <source>Home Mobile</source>
+ <translation>Mobiltel. (priv)</translation>
+ </message>
+ <message>
+ <source>Home WebPage</source>
+ <translation type="obsolete">Website (priv)</translation>
+ </message>
+ <message>
+ <source>Company</source>
+ <translation>Firma</translation>
+ </message>
+ <message>
+ <source>Business Street</source>
+ <translation>Straße (dienstl)</translation>
+ </message>
+ <message>
+ <source>Business City</source>
+ <translation>Stadt (dienstl)</translation>
+ </message>
+ <message>
+ <source>Business State</source>
+ <translation>Region (dienstl)</translation>
+ </message>
+ <message>
+ <source>Business Zip</source>
+ <translation>PLZ (diesntl)</translation>
+ </message>
+ <message>
+ <source>Business Country</source>
+ <translation>Land (dienstl)</translation>
+ </message>
+ <message>
+ <source>Business WebPage</source>
+ <translation>Website (dienstl)</translation>
+ </message>
+ <message>
+ <source>Job Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Department</source>
+ <translation>Abteilung</translation>
+ </message>
+ <message>
+ <source>Office</source>
+ <translation>Büro</translation>
+ </message>
+ <message>
+ <source>Business Phone</source>
+ <translation>Telefon (dienstl)</translation>
+ </message>
+ <message>
+ <source>Business Fax</source>
+ <translation>Fax (dienstl)</translation>
+ </message>
+ <message>
+ <source>Business Mobile</source>
+ <translation>Mobiltel. (dienstl)</translation>
+ </message>
+ <message>
+ <source>Business Pager</source>
+ <translation>Pager (dienstl)</translation>
+ </message>
+ <message>
+ <source>Profession</source>
+ <translation>Beruf</translation>
+ </message>
+ <message>
+ <source>Assistant</source>
+ <translation>Assistent</translation>
+ </message>
+ <message>
+ <source>Manager</source>
+ <translation>Manager</translation>
+ </message>
+ <message>
+ <source>Spouse</source>
+ <translation>Ehegatte</translation>
+ </message>
+ <message>
+ <source>Gender</source>
+ <translation>Geschlecht</translation>
+ </message>
+ <message>
+ <source>Birthday</source>
+ <translation>Geburtstag</translation>
+ </message>
+ <message>
+ <source>Anniversary</source>
+ <translation>Jahrestag</translation>
+ </message>
+ <message>
+ <source>Nickname</source>
+ <translation>Rufname</translation>
+ </message>
+ <message>
+ <source>Children</source>
+ <translation>Kinder</translation>
+ </message>
+ <message>
+ <source>Notes</source>
+ <translation>Notizen</translation>
+ </message>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>Unfiled</source>
+ <translation>Nicht zugeordnet</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Work Address:&lt;/b&gt;</source>
+ <translation>&lt;b&gt;Adresse (dienstl):&lt;/b&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Home Address:&lt;/b&gt;</source>
+ <translation>&lt;b&gt;Adresse (privat):&lt;/b&gt;</translation>
+ </message>
+ <message>
+ <source>Email Addresses: </source>
+ <translation>E-Mail-Adressen:</translation>
+ </message>
+ <message>
+ <source>Home Phone: </source>
+ <translation>Telefon (priv):</translation>
+ </message>
+ <message>
+ <source>Home Fax: </source>
+ <translation>Fax (priv):</translation>
+ </message>
+ <message>
+ <source>Home Mobile: </source>
+ <translation>Mobiltel. (priv):</translation>
+ </message>
+ <message>
+ <source>Home Web Page: </source>
+ <translation>Website (priv):</translation>
+ </message>
+ <message>
+ <source>Business Web Page: </source>
+ <translation>Website (dienstl):</translation>
+ </message>
+ <message>
+ <source>Office: </source>
+ <translation>Büro:</translation>
+ </message>
+ <message>
+ <source>Business Phone: </source>
+ <translation>Telefon (dienstl):</translation>
+ </message>
+ <message>
+ <source>Business Fax: </source>
+ <translation>Fax (dienstl):</translation>
+ </message>
+ <message>
+ <source>Business Mobile: </source>
+ <translation>Mobiltel. (dienstl):</translation>
+ </message>
+ <message>
+ <source>Business Pager: </source>
+ <translation>Pager (dienstl):</translation>
+ </message>
+ <message>
+ <source>Profession: </source>
+ <translation>Beruf:</translation>
+ </message>
+ <message>
+ <source>Assistant: </source>
+ <translation>Assistent:</translation>
+ </message>
+ <message>
+ <source>Manager: </source>
+ <translation>Manager:</translation>
+ </message>
+ <message>
+ <source>Male</source>
+ <translation>Männlich</translation>
+ </message>
+ <message>
+ <source>Female</source>
+ <translation>Weiblich</translation>
+ </message>
+ <message>
+ <source>Gender: </source>
+ <translation>Geschlecht:</translation>
+ </message>
+ <message>
+ <source>Spouse: </source>
+ <translation>Ehegatte:</translation>
+ </message>
+ <message>
+ <source>Birthday: </source>
+ <translation>Geburtstag:</translation>
+ </message>
+ <message>
+ <source>Anniversary: </source>
+ <translation>Jahrestag:</translation>
+ </message>
+ <message>
+ <source>Nickname: </source>
+ <translation>Rufname:</translation>
+ </message>
+ <message>
+ <source>Name Title</source>
+ <translation>Titel</translation>
+ </message>
+ <message>
+ <source>Default Email</source>
+ <translation>Bevorzugte Email</translation>
+ </message>
+ <message>
+ <source>Home Web Page</source>
+ <translation>Website (priv):</translation>
+ </message>
+ <message>
+ <source>Mon</source>
+ <translation>Mo</translation>
+ </message>
+ <message>
+ <source>Tue</source>
+ <translation>Di</translation>
+ </message>
+ <message>
+ <source>Wed</source>
+ <translation>Mi</translation>
+ </message>
+ <message>
+ <source>Thu</source>
+ <translation>Do</translation>
+ </message>
+ <message>
+ <source>Fri</source>
+ <translation>Fr</translation>
+ </message>
+ <message>
+ <source>Sat</source>
+ <translation>Sa</translation>
+ </message>
+ <message>
+ <source>Sun</source>
+ <translation>So</translation>
+ </message>
+ <message>
+ <source>D</source>
+ <translation>T</translation>
+ </message>
+ <message>
+ <source>M</source>
+ <translation>M</translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation>J</translation>
+ </message>
+ <message>
+ <source>day</source>
+ <translation>Tag</translation>
+ </message>
+ <message>
+ <source>month</source>
+ <translation>Monat</translation>
+ </message>
+ <message>
+ <source>year</source>
+ <translation>Jahr</translation>
+ </message>
+</context>
+<context>
+ <name>StorageInfo</name>
+ <message>
+ <source>CF Card</source>
+ <translation>CF-Karte</translation>
+ </message>
+ <message>
+ <source>Hard Disk</source>
+ <translation>Festplatte</translation>
+ </message>
+ <message>
+ <source>SD Card</source>
+ <translation>SD-Karte</translation>
+ </message>
+ <message>
+ <source>SCSI Hard Disk</source>
+ <translation>SCSI-Festplatte</translation>
+ </message>
+ <message>
+ <source>Internal Storage</source>
+ <translation>Interner Speicher</translation>
+ </message>
+</context>
+<context>
+ <name>TimeString</name>
+ <message>
+ <source>Mon</source>
+ <translation type="obsolete">Mo</translation>
+ </message>
+ <message>
+ <source>Tue</source>
+ <translation type="obsolete">Di</translation>
+ </message>
+ <message>
+ <source>Wed</source>
+ <translation type="obsolete">Mi</translation>
+ </message>
+ <message>
+ <source>Thu</source>
+ <translation type="obsolete">Do</translation>
+ </message>
+ <message>
+ <source>Fri</source>
+ <translation type="obsolete">Fr</translation>
+ </message>
+ <message>
+ <source>Sat</source>
+ <translation type="obsolete">Sa</translation>
+ </message>
+ <message>
+ <source>Sun</source>
+ <translation type="obsolete">So</translation>
+ </message>
+</context>
+<context>
+ <name>TimerReceiverObject</name>
+ <message>
+ <source>Out of Space</source>
+ <translation>Kein Speicher mehr frei</translation>
+ </message>
+ <message>
+ <source>Unable to schedule alarm.
+Please free up space and try again</source>
+ <translation>Der Alarm konnte nicht eingestellt werden.
+Geben Sie Speicherplatz frei und
+versuchen Sie es erneut.</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libqunikeyboard.qm b/i18n/de/libqunikeyboard.qm
new file mode 100644
index 0000000..6bd22c4
--- a/dev/null
+++ b/i18n/de/libqunikeyboard.qm
Binary files differ
diff --git a/i18n/de/libqunikeyboard.ts b/i18n/de/libqunikeyboard.ts
new file mode 100644
index 0000000..6966daa
--- a/dev/null
+++ b/i18n/de/libqunikeyboard.ts
@@ -0,0 +1,9 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>InputMethods</name>
+ <message>
+ <source>Unicode</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/libvolumeapplet.qm b/i18n/de/libvolumeapplet.qm
new file mode 100644
index 0000000..908a43d
--- a/dev/null
+++ b/i18n/de/libvolumeapplet.qm
Binary files differ
diff --git a/i18n/de/libvolumeapplet.ts b/i18n/de/libvolumeapplet.ts
new file mode 100644
index 0000000..2fb8d29
--- a/dev/null
+++ b/i18n/de/libvolumeapplet.ts
@@ -0,0 +1,9 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>VolumeControl</name>
+ <message>
+ <source>Mute</source>
+ <translation>Still</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/light-and-power.qm b/i18n/de/light-and-power.qm
new file mode 100644
index 0000000..ab5416c
--- a/dev/null
+++ b/i18n/de/light-and-power.qm
Binary files differ
diff --git a/i18n/de/light-and-power.ts b/i18n/de/light-and-power.ts
new file mode 100644
index 0000000..7e493d5
--- a/dev/null
+++ b/i18n/de/light-and-power.ts
@@ -0,0 +1,49 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>LightSettingsBase</name>
+ <message encoding="UTF-8">
+ <source>Light Settings</source>
+ <translation>Helligkeit</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Adjust to environment</source>
+ <translation>An Umgebung anpassen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>By sensing the ambient light where you are using your device, the screen light can be adjusted automatically. The brightness setting still affects the average brightness.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Power saving</source>
+ <translation>Energiesparmodus</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source> seconds</source>
+ <translation> Sekunden</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Light off after</source>
+ <translation>Licht aus nach</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Dim light after</source>
+ <translation>Dimmen nach</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Suspend after</source>
+ <translation>Ausschalten nach</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Bright</source>
+ <translation>Hell</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;blockquote&gt;The brighter the screen light, the more battery power is used.&lt;/blockquote&gt;</source>
+ <translation>&lt;blockquote&gt;Je heller die Hintergrundbeleuchtung, desto höher der Energieverbrauch.&lt;/blockquote&gt;</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Off</source>
+ <translation>Aus</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/mindbreaker.qm b/i18n/de/mindbreaker.qm
new file mode 100644
index 0000000..eef6eb7
--- a/dev/null
+++ b/i18n/de/mindbreaker.qm
Binary files differ
diff --git a/i18n/de/mindbreaker.ts b/i18n/de/mindbreaker.ts
new file mode 100644
index 0000000..22b8830
--- a/dev/null
+++ b/i18n/de/mindbreaker.ts
@@ -0,0 +1,81 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>HelpDialog</name>
+ <message encoding="UTF-8">
+ <source>How To Play</source>
+ <translation type="obsolete">Regeln</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;P&gt;In this game, you try to guess the secret four
+color code by dragging four pegs to the brightened row.
+&lt;P&gt;After placing four pegs, tap to the right
+of your guess and the computer
+will respond by placing small pegs there.&lt;/P&gt;
+&lt;P&gt;For each peg you guess correctly, you get a black peg, then for each
+remaining peg of the correct color (but wrong position), you get
+a white peg.
+&lt;P&gt;The positions of the black and white pegs do &lt;i&gt;not&lt;/i&gt;
+relate to the positions of your guess pegs.&lt;/P&gt;</source>
+ <translation type="obsolete"></translation>
+ </message>
+</context>
+<context>
+ <name>MindBreaker</name>
+ <message>
+ <source>New Game</source>
+ <translation>Neues Spiel</translation>
+ </message>
+ <message>
+ <source>win avg: %1 turns (%2 games)</source>
+ <translation>Durchschnittlich gewonnen:
+%1 von %2 Spielen</translation>
+ </message>
+</context>
+<context>
+ <name>MindBreakerBoard</name>
+ <message>
+ <source>Answer%1</source>
+ <translation>Antwort%1</translation>
+ </message>
+ <message>
+ <source>Go%1p0</source>
+ <translation type="obsolete">Go%1p0</translation>
+ </message>
+ <message>
+ <source>Go%1p1</source>
+ <translation type="obsolete">Go%1p1</translation>
+ </message>
+ <message>
+ <source>Go%1p2</source>
+ <translation type="obsolete">Go%1p2</translation>
+ </message>
+ <message>
+ <source>Go%1p3</source>
+ <translation type="obsolete">Go%1p3</translation>
+ </message>
+ <message>
+ <source>CurrentGo%1</source>
+ <translation>Diesmal%1</translation>
+ </message>
+ <message>
+ <source>Go%1p%2</source>
+ <translation>Go%1%2</translation>
+ </message>
+ <message>
+ <source>Reset Statistics</source>
+ <translation>Statistik zurücksetzen</translation>
+ </message>
+ <message>
+ <source>Reset the win ratio?</source>
+ <translation>Gewinnquote zurücksetzen?</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/minesweep.qm b/i18n/de/minesweep.qm
new file mode 100644
index 0000000..7dfa721
--- a/dev/null
+++ b/i18n/de/minesweep.qm
Binary files differ
diff --git a/i18n/de/minesweep.ts b/i18n/de/minesweep.ts
new file mode 100644
index 0000000..6af73cc
--- a/dev/null
+++ b/i18n/de/minesweep.ts
@@ -0,0 +1,62 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MineSweep</name>
+ <message>
+ <source>Game</source>
+ <translation>Spielen</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation type="obsolete">Hilfe</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="obsolete">Schließen</translation>
+ </message>
+ <message>
+ <source>About MineSweep</source>
+ <translation type="obsolete">Infos zum Programm</translation>
+ </message>
+ <message>
+ <source>Expert</source>
+ <translation>Expertenmodus</translation>
+ </message>
+ <message>
+ <source>You won!</source>
+ <translation>Sie haben gewonnen!</translation>
+ </message>
+ <message>
+ <source>You exploded!</source>
+ <translation>Sie sind leider in die Luft gegangen!</translation>
+ </message>
+ <message>
+ <source>Mine Sweep</source>
+ <translation type="obsolete">Minenjagd</translation>
+ </message>
+ <message>
+ <source>MineSweeper</source>
+ <translation type="obsolete">Minenjagd</translation>
+ </message>
+ <message>
+ <source>Press and hold to mark a mine</source>
+ <translation type="obsolete">Zum Markieren einer Mine drücken und halten Sie
+das Eingabegerät auf die entsprechende Stelle.</translation>
+ </message>
+ <message>
+ <source>Advanced</source>
+ <translation>Fortgeschrittenenmodus</translation>
+ </message>
+ <message>
+ <source>Beginner</source>
+ <translation>Anfängermodus</translation>
+ </message>
+ <message>
+ <source>Instructions</source>
+ <translation type="obsolete">Anleitung</translation>
+ </message>
+ <message>
+ <source>Mine Hunt</source>
+ <translation>Minenjagd</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/mountmonapplet.ts b/i18n/de/mountmonapplet.ts
new file mode 100644
index 0000000..6626f04
--- a/dev/null
+++ b/i18n/de/mountmonapplet.ts
@@ -0,0 +1,9 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>MountMon</name>
+ <message>
+ <source>Eject SD-card</source>
+ <translation>SD-Karte auswerfen</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/mpegplayer.qm b/i18n/de/mpegplayer.qm
new file mode 100644
index 0000000..3e9fa28
--- a/dev/null
+++ b/i18n/de/mpegplayer.qm
Binary files differ
diff --git a/i18n/de/mpegplayer.ts b/i18n/de/mpegplayer.ts
new file mode 100644
index 0000000..73153d0
--- a/dev/null
+++ b/i18n/de/mpegplayer.ts
@@ -0,0 +1,224 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>AudioWidget</name>
+ <message>
+ <source>MediaPlayer</source>
+ <translation>Medienwiedergabe</translation>
+ </message>
+</context>
+<context>
+ <name>MediaPlayer</name>
+ <message>
+ <source>Media Player</source>
+ <translation>Medienwiedergabe</translation>
+ </message>
+ <message>
+ <source>File: </source>
+ <translation type="obsolete"></translation>
+ </message>
+ <message>
+ <source> File: </source>
+ <translation>Datei: </translation>
+ </message>
+ <message>
+ <source>No file</source>
+ <translation>Datei nicht vorhanden</translation>
+ </message>
+ <message>
+ <source>Error: There is no file selected</source>
+ <translation>Error: Keine Datei selektiert</translation>
+ </message>
+ <message>
+ <source>File not found</source>
+ <translation>Datei nicht gefunden</translation>
+ </message>
+ <message>
+ <source>The following file was not found: &lt;i&gt;</source>
+ <translation>Die folgende Datei konnte nicht gefunden werden: &lt;i&gt;</translation>
+ </message>
+ <message>
+ <source>No decoder found</source>
+ <translation>Kein Dekoder gefunden</translation>
+ </message>
+ <message>
+ <source>Sorry, no appropriate decoders found for this file: &lt;i&gt;</source>
+ <translation>Für die folgende Datei konnte kein Dekoder gefunden werden: &lt;i&gt;</translation>
+ </message>
+ <message>
+ <source>Error opening file</source>
+ <translation>Fehler beim Öffnen der Datei</translation>
+ </message>
+ <message>
+ <source>Sorry, an error occured trying to play the file: &lt;i&gt;</source>
+ <translation>Ein Fehler ist beim Abspielen der folgenden Datei aufgetreten: &lt;i&gt;</translation>
+ </message>
+ <message>
+ <source>, Length: </source>
+ <translation>, Länge:</translation>
+ </message>
+</context>
+<context>
+ <name>MpegPlayer</name>
+ <message>
+ <source>1:1</source>
+ <translation type="obsolete">1:1</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation type="obsolete">Wiederholung</translation>
+ </message>
+ <message>
+ <source>Mute</source>
+ <translation type="obsolete">Ohne Sound</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation type="obsolete">Öffnen</translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translation type="obsolete">Abspielen</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="obsolete">Stopp</translation>
+ </message>
+ <message>
+ <source>Fullscreen</source>
+ <translation type="obsolete">Vollbildmodus</translation>
+ </message>
+ <message>
+ <source>MPEG Player</source>
+ <translation type="obsolete">MPEG-Player</translation>
+ </message>
+</context>
+<context>
+ <name>PlayListSelection</name>
+ <message>
+ <source>Playlist Selection</source>
+ <translation>Playlist Selektion</translation>
+ </message>
+</context>
+<context>
+ <name>PlayListWidget</name>
+ <message>
+ <source>PlayList</source>
+ <translation>Playlist</translation>
+ </message>
+ <message>
+ <source>+All</source>
+ <translation type="obsolete"></translation>
+ </message>
+ <message>
+ <source>Out of space</source>
+ <translation>Nicht genügend Speicherplatz vorhanden</translation>
+ </message>
+ <message>
+ <source>There was a problem saving the playlist.
+Your playlist may be missing some entries
+the next time you start it.</source>
+ <translation>Es gab ein Problem beim Speichern der Playlist.
+Es ist möglich, dass einige Eintrige in Ihrer
+Playlist beim nächsten Mal fehlen.</translation>
+ </message>
+ <message>
+ <source>MediaPlayer</source>
+ <translation>Medienwiedergabe</translation>
+ </message>
+ <message>
+ <source>Play Operations</source>
+ <translation>Abspiel-Operationen</translation>
+ </message>
+ <message>
+ <source>Toggle PlayList</source>
+ <translation>Playlist umschalten</translation>
+ </message>
+ <message>
+ <source>Clear List</source>
+ <translation>Liste leeren</translation>
+ </message>
+ <message>
+ <source>Add all music files</source>
+ <translation>Alle Musik-Dateien hinzufügen</translation>
+ </message>
+ <message>
+ <source>Add all video files</source>
+ <translation>Alle Video-Dateien hinzufügen</translation>
+ </message>
+ <message>
+ <source>Add all files</source>
+ <translation>Alle Dateien hinzufügen</translation>
+ </message>
+ <message>
+ <source> PlayList</source>
+ <translation>Playlist</translation>
+ </message>
+ <message>
+ <source> Media Library</source>
+ <translation>Medien Bibliothek</translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translation>Abspielen</translation>
+ </message>
+ <message>
+ <source>Randomize</source>
+ <translation>Zufällig</translation>
+ </message>
+ <message>
+ <source>Loop</source>
+ <translation>Wiederholen</translation>
+ </message>
+ <message>
+ <source>Fullscreen</source>
+ <translation>Vollbildmodus</translation>
+ </message>
+ <message>
+ <source>Scale</source>
+ <translation>Skalieren</translation>
+ </message>
+ <message>
+ <source>Save PlayList</source>
+ <translation>Plazlist speichern</translation>
+ </message>
+ <message>
+ <source>Load PlayList</source>
+ <translation>Plazlist laden</translation>
+ </message>
+ <message>
+ <source>Move Up</source>
+ <translation>Hoch</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message>
+ <source>Move Down</source>
+ <translation>Runter</translation>
+ </message>
+ <message>
+ <source>Add to Playlist</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message>
+ <source>Remove from Playlist</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message>
+ <source>Invalid File</source>
+ <translation>Ungültige Datei</translation>
+ </message>
+ <message>
+ <source>There was a problem in getting the file.</source>
+ <translation>Ein Problem ist beim Laden der Datei aufgetreten.</translation>
+ </message>
+</context>
+<context>
+ <name>VideoWidget</name>
+ <message>
+ <source>MediaPlayer</source>
+ <translation>Medienwiedergabe</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/netsetup.qm b/i18n/de/netsetup.qm
new file mode 100644
index 0000000..1aa523b
--- a/dev/null
+++ b/i18n/de/netsetup.qm
Binary files differ
diff --git a/i18n/de/netsetup.ts b/i18n/de/netsetup.ts
new file mode 100644
index 0000000..36fd522
--- a/dev/null
+++ b/i18n/de/netsetup.ts
@@ -0,0 +1,77 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>AddNetworkSettingBase</name>
+ <message encoding="UTF-8">
+ <source>Add Network Service</source>
+ <translation>Netzwerkverbindung hinzufügen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;P&gt;These are the network services available to be added.</source>
+ <translation>&lt;p&gt;Diese Netzwerkverbindungen können hinzugefügt werden.</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Add</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+</context>
+<context>
+ <name>NetworkSettings</name>
+ <message>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;Only one %1 can be added. Remove the current one, or change its Properties</source>
+ <translation>&lt;p&gt;Nur eine %1 kann hinzugefügt werden. Entfernen Sie die aktuelle oder ändern Sie ihre Eigenschaften.</translation>
+ </message>
+ <message>
+ <source>Are you sure you want to delete
+
+%1?</source>
+ <translation type="obsolete"></translation>
+ </message>
+ <message>
+ <source>Network</source>
+ <translation>Netzwerk</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>NetworkSettingsBase</name>
+ <message encoding="UTF-8">
+ <source>Network</source>
+ <translation>Netzwerk</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Current</source>
+ <translation>Aktuell</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;p&gt;This is the state of your running network services.</source>
+ <translation>&lt;p&gt;Dies ist der Status Ihrer aktiven Netzwerkverbindung.</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Services</source>
+ <translation>Verbindungen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Add...</source>
+ <translation>Hinzufügen...</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;P&gt;These are the network services you currently have available.</source>
+ <translation>&lt;p&gt;Diese Netzwerkverbindungen stehen zur Verfügung.</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Properties</source>
+ <translation>Eigenschaften</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/parashoot.qm b/i18n/de/parashoot.qm
new file mode 100644
index 0000000..4adb46c
--- a/dev/null
+++ b/i18n/de/parashoot.qm
Binary files differ
diff --git a/i18n/de/parashoot.ts b/i18n/de/parashoot.ts
new file mode 100644
index 0000000..6aadd6d
--- a/dev/null
+++ b/i18n/de/parashoot.ts
@@ -0,0 +1,63 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>ParaShoot</name>
+ <message>
+ <source>Quit</source>
+ <translation type="obsolete">Beenden</translation>
+ </message>
+ <message>
+ <source> GAME OVER!
+ Your Score: %1
+ Parachuters Killed: %2 </source>
+ <translation type="obsolete"> GAME OVER!
+ Punkte: %1
+ Getötete Gegner: %2 </translation>
+ </message>
+ <message>
+ <source> Level: %1 Score: %2 </source>
+ <translation> Level: %1 Punkte: %2 </translation>
+ </message>
+ <message>
+ <source>You must defend your base
+from attack by suicide bombers!
+Use the arrow keys to aim
+the cannon and press space to
+shoot the bombers parachuting
+towards your base.
+Three successful attacks
+will destroy the base completely.
+Beware of those suicide
+bombers travelling in helicopters!!</source>
+ <translation type="obsolete">Verteidigen Sie Ihre Stellung gegen
+angreifende Selbstmordkommandos!
+Mit den Pfeiltasten steuern Sie Ihre Kanone,
+mit der Leertaste feuern Sie.
+Mit drei erfolgreichen Angriffen lässt sich
+Ihre Stellung vollständig zerstören.
+Seien Sie auf der Hut vor Gegnern
+in Helikoptern!</translation>
+ </message>
+ <message>
+ <source>ParaShoot</source>
+ <translation>Fallschirmjäger</translation>
+ </message>
+ <message>
+ <source>How To Play</source>
+ <translation type="obsolete">Anleitung</translation>
+ </message>
+ <message>
+ <source>New Game</source>
+ <translation>Neues Spiel</translation>
+ </message>
+ <message>
+ <source> GAME OVER!
+ Your Score: %1
+ Parachuters Killed: %2
+ Accuracy: %3% </source>
+ <translation>GAME OVER!
+Deine Punkte: %1
+Fallschirmspringer: %2
+Genauigkeit: %3%</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/patience.qm b/i18n/de/patience.qm
new file mode 100644
index 0000000..64cb970
--- a/dev/null
+++ b/i18n/de/patience.qm
Binary files differ
diff --git a/i18n/de/patience.ts b/i18n/de/patience.ts
new file mode 100644
index 0000000..26d44b5
--- a/dev/null
+++ b/i18n/de/patience.ts
@@ -0,0 +1,137 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>CanvasCardWindow</name>
+ <message>
+ <source>File</source>
+ <translation type="obsolete">Datei</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation type="obsolete">Hilfe</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation type="obsolete">&amp;Datei</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>&amp;Hilfe</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation type="obsolete">Infos zum Programm</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="obsolete">Schließen</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;About Qt Card Games&lt;/h3&gt;&lt;p&gt;These games were implemented&lt;br&gt;easily using Qt.&lt;br&gt;The canvas widget was used&lt;br&gt; as the basison which&lt;br&gt;the playing area is drawn.&lt;br&gt;Each card is an object on the canvas,&lt;br&gt;as are the decorations.&lt;br&gt;All the animation is done by Qt.&lt;p&gt;</source>
+ <translation type="obsolete">&lt;h3&gt;Diese Kartenspiele...&lt;/h3&gt;&lt;p&gt;... wurden mit Qt implementiert.&lt;br&gt;Als Grundfläche dient ein Canvas-Widget,&lt;br&gt;auf dem das Spielfeld gezeichnet wird. Jede Karte ist ein eigenständiges Objekt auf der Grundfläche, dasselbe gilt auch für die Verzierungen. Auch die Animation wird von Qt bereit gestellt.&lt;p&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;About</source>
+ <translation>&amp;Infos zum Programm</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation type="obsolete">&amp;Schließen</translation>
+ </message>
+ <message>
+ <source>Solitaire</source>
+ <translation type="obsolete">Solitaire</translation>
+ </message>
+ <message>
+ <source>&amp;New Game of Solitaire</source>
+ <translation type="obsolete">Neues Solitaire-Spiel</translation>
+ </message>
+ <message>
+ <source>New Game of Solitaire</source>
+ <translation type="obsolete">Neues Solitaire-Spiel</translation>
+ </message>
+ <message>
+ <source>Snap On/Off</source>
+ <translation type="obsolete">Magnet an/aus</translation>
+ </message>
+ <message>
+ <source>Change Cards Drawn</source>
+ <translation type="obsolete">Anzahl der zu ziehenden Karten ändern</translation>
+ </message>
+ <message>
+ <source>&amp;Snap On/Off</source>
+ <translation type="obsolete">&amp;Magnet an/aus</translation>
+ </message>
+ <message>
+ <source>Qt Solitaire</source>
+ <translation type="obsolete">Qt Solitaire</translation>
+ </message>
+ <message>
+ <source>Freecell</source>
+ <translation>Freecell</translation>
+ </message>
+ <message>
+ <source>Qt Freecell</source>
+ <translation type="obsolete">Qt Freecell</translation>
+ </message>
+ <message>
+ <source>&amp;Change Card Backs</source>
+ <translation>Karten&amp;rückseite ändern</translation>
+ </message>
+ <message>
+ <source>Dismiss</source>
+ <translation type="obsolete">Verwerfen</translation>
+ </message>
+ <message>
+ <source>Change Card Backs</source>
+ <translation>Kartenrückseite ändern</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;Solitaire&lt;/h3&gt;&lt;p&gt;The object of the game is to stack all the&lt;br&gt;cards on the top piles from the Aces to&lt;br&gt;the Kings in suit. The rules are that you&lt;br&gt;can only move a red card of the next lowest&lt;br&gt;values on top of black cards in the lower&lt;br&gt;playing area, or a black on a red in order.&lt;br&gt;You can get new cards from the face down&lt;br&gt;stack to help you move the cards.&lt;p&gt;Good luck and enjoy playing Solitaire!&lt;p&gt;</source>
+ <translation type="obsolete">&lt;h3&gt;Solitaire&lt;/h3&gt;&lt;p&gt;Ziel des Spiels ist es, alle Karten vom Ass bis&lt;br&gt;zum König in der passenden Reihenfolge abzulegen.&lt;br&gt;Dabei gelten folgende Regeln:&lt;br&gt;Nur rote Karten mit dem nächstniedrigeren Wert&lt;br&gt;können auf schwarze Karten folgen und umgekehrt.&lt;br&gt;Neue Karten, die -- hoffentlich -- die Lücken schließen,&lt;br&gt;ziehen Sie vom umgedrehten Stapel.&lt;br&gt;&lt;p&gt;Viel Spaß mit Solitaire!&lt;p&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Settings</source>
+ <translation>&amp;Einstellungen</translation>
+ </message>
+ <message>
+ <source>Settings</source>
+ <translation>Einstellungen</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;Freecell&lt;/h3&gt;&lt;p&gt;The object of the game is to stack all the&lt;br&gt;cards on the top right 4 piles from the Aces&lt;br&gt;to the Kings in suit. The rules are that&lt;br&gt;you can only move red cards of the next&lt;br&gt;lowest values on top of black cards, or&lt;br&gt;or black ones on to red ones in order.&lt;br&gt;You can move any card to the remaining&lt;br&gt;vacant freecells to help you move the cards.&lt;p&gt;Good luck and enjoy playing Freecell!&lt;p&gt;</source>
+ <translation type="obsolete">&lt;h3&gt;Freecell&lt;/h3&gt;&lt;p&gt;Ziel des Spiels ist es, alle Karten auf den vier&lt;br&gt;rechten Stapeln in der Reihenfolge Ass bis König&lt;br&gt;abzulegen. Dabei gelten folgende Regeln:&lt;br&gt;Auf schwarzen Karten dürfen nur rote Karten mit&lt;br&gt;dem nächstniedrigeren Wert abgelegt werden und umgekehrt.&lt;br&gt;Auf freien Feldern können beliebige Karten&lt;br&gt;zwischengelagert werden.&lt;br&gt;&lt;p&gt;Viel Spaß mit Freecell!&lt;p&gt;</translation>
+ </message>
+ <message>
+ <source>Qt Card Game Example</source>
+ <translation type="obsolete">Qt-Kartenspielbeispiel</translation>
+ </message>
+ <message>
+ <source>Patience</source>
+ <translation>Patience</translation>
+ </message>
+ <message>
+ <source>&amp;Game</source>
+ <translation>Spiel</translation>
+ </message>
+ <message>
+ <source>&amp;Snap To Position</source>
+ <translation>Karten ausrichten</translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translation>Spielart</translation>
+ </message>
+ <message>
+ <source>Snap To Position</source>
+ <translation>Karten ausrichten</translation>
+ </message>
+ <message>
+ <source>Turn One Card</source>
+ <translation>Eine Karte ziehen</translation>
+ </message>
+ <message>
+ <source>Turn Three Cards</source>
+ <translation>Drei Karten ziehen</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/qasteroids.qm b/i18n/de/qasteroids.qm
new file mode 100644
index 0000000..c473af5
--- a/dev/null
+++ b/i18n/de/qasteroids.qm
Binary files differ
diff --git a/i18n/de/qasteroids.ts b/i18n/de/qasteroids.ts
new file mode 100644
index 0000000..8f4e405
--- a/dev/null
+++ b/i18n/de/qasteroids.ts
@@ -0,0 +1,41 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>KAstTopLevel</name>
+ <message>
+ <source>Asteroids</source>
+ <translation>Asteroiden</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Punkte</translation>
+ </message>
+ <message>
+ <source>Level</source>
+ <translation>Level</translation>
+ </message>
+ <message>
+ <source>Ships</source>
+ <translation>Schiffe</translation>
+ </message>
+ <message>
+ <source>Fuel</source>
+ <translation>Treibstoff</translation>
+ </message>
+ <message>
+ <source>Press Calendar to start playing</source>
+ <translation>Kalender-Taste startet das Spiel</translation>
+ </message>
+ <message>
+ <source>Ship Destroyed.
+Press Launch/Home key.</source>
+ <translation>Schiff zerstört.
+Launch/Home-Taste drücken.</translation>
+ </message>
+ <message>
+ <source>Game Over.
+Press Calendar for a new game.</source>
+ <translation>Game over.
+Neues Spiel mit Kalender-Taste.</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/qipkg.qm b/i18n/de/qipkg.qm
new file mode 100644
index 0000000..0a6c80a
--- a/dev/null
+++ b/i18n/de/qipkg.qm
Binary files differ
diff --git a/i18n/de/qipkg.ts b/i18n/de/qipkg.ts
new file mode 100644
index 0000000..e3804d1
--- a/dev/null
+++ b/i18n/de/qipkg.ts
@@ -0,0 +1,130 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>PackageDetails</name>
+ <message encoding="UTF-8">
+ <source>(pkgname)</source>
+ <translation>(paketname)</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Install</source>
+ <translation>Installieren</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Ignore</source>
+ <translation>Ignorieren</translation>
+ </message>
+</context>
+<context>
+ <name>PackageManager</name>
+ <message>
+ <source>New</source>
+ <translation>Neu</translation>
+ </message>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>Install Package</source>
+ <translation>Paket installieren</translation>
+ </message>
+ <message>
+ <source>Are you sure you want to
+install package
+
+%1</source>
+ <translation>Sind Sie sicher, dass Sie das
+Paket %1
+installieren möchten?</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>PackageManagerBase</name>
+ <message encoding="UTF-8">
+ <source>Package Manager</source>
+ <translation>Paket-Manager</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Upgrade</source>
+ <translation>Upgrade</translation>
+ </message>
+ <message>
+ <source>Package</source>
+ <translation>Paket</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Description</source>
+ <translation>Beschreibung</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Size</source>
+ <translation>Größe</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Section:</source>
+ <translation>Abschnitt:</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>PackageManagerSettings</name>
+ <message encoding="UTF-8">
+ <source>Package Servers</source>
+ <translation>Paket-Server</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Servers</source>
+ <translation>Server</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>URL:</source>
+ <translation>URL:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>New</source>
+ <translation>Neu</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Remove</source>
+ <translation>Entfernen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Proxies</source>
+ <translation type="obsolete">Proxies</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Password:</source>
+ <translation type="obsolete">Passwort:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>FTP:</source>
+ <translation type="obsolete">FTP:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>HTTP:</source>
+ <translation type="obsolete">HTTP:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>User:</source>
+ <translation type="obsolete">Benutzer:</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>Search</name>
+ <message encoding="UTF-8">
+ <source>Search Packages</source>
+ <translation>Pakete durchsuchen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Find:</source>
+ <translation>Suchen:</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/security.qm b/i18n/de/security.qm
new file mode 100644
index 0000000..74ea13a
--- a/dev/null
+++ b/i18n/de/security.qm
Binary files differ
diff --git a/i18n/de/security.ts b/i18n/de/security.ts
new file mode 100644
index 0000000..c671dee
--- a/dev/null
+++ b/i18n/de/security.ts
@@ -0,0 +1,58 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>Security</name>
+ <message>
+ <source>Set passcode</source>
+ <translation>Passcode einstellen</translation>
+ </message>
+ <message>
+ <source>Change passcode</source>
+ <translation>Passcode ändern</translation>
+ </message>
+ <message>
+ <source>Enter passcode</source>
+ <translation>Passcode eingeben</translation>
+ </message>
+ <message>
+ <source>Passcode incorrect</source>
+ <translation>Passcode ungültig</translation>
+ </message>
+ <message>
+ <source>The passcode entered is incorrect.
+Access denied</source>
+ <translation>Der eingegebene Passcode ist ungültig.
+Zugang nicht gestattet</translation>
+ </message>
+</context>
+<context encoding="UTF-8">
+ <name>SecurityBase</name>
+ <message encoding="UTF-8">
+ <source>Security Settings</source>
+ <translation>Sicherheitseinstellungen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Change passcode</source>
+ <translation>Passcode ändern</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Clear passcode</source>
+ <translation>Passcode löschen</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Require pass code at power-on</source>
+ <translation>Passcode beim Anschalten anfordern</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Allow incoming Telnet</source>
+ <translation>Erlaube eingehendes Telnet</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Allow incoming SSH</source>
+ <translation>Erlaube eingehende SSH</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&lt;P&gt;Pass code protection provides a minimal level of protection from casual access to this device.</source>
+ <translation>&lt;p&gt;Der Passcode bietet einen minimalen Schutz gegen unbefugte Benutzung des Gerätes.</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/showimg.qm b/i18n/de/showimg.qm
new file mode 100644
index 0000000..6673333
--- a/dev/null
+++ b/i18n/de/showimg.qm
Binary files differ
diff --git a/i18n/de/showimg.ts b/i18n/de/showimg.ts
new file mode 100644
index 0000000..2a2a7c5
--- a/dev/null
+++ b/i18n/de/showimg.ts
@@ -0,0 +1,69 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>ImageViewer</name>
+ <message>
+ <source>Image Viewer</source>
+ <translation>Bildbetrachter</translation>
+ </message>
+ <message>
+ <source>Horizontal flip</source>
+ <translation>Horizontal spiegeln</translation>
+ </message>
+ <message>
+ <source>Vertical flip</source>
+ <translation>Vertikal spiegeln</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Öffnen</translation>
+ </message>
+ <message>
+ <source>Rotate 180</source>
+ <translation>Rotieren 180</translation>
+ </message>
+ <message>
+ <source>Rotate 90</source>
+ <translation>Rotieren 90</translation>
+ </message>
+ <message>
+ <source>Fullscreen</source>
+ <translation>Vollbild</translation>
+ </message>
+ <message>
+ <source> - Image Viewer</source>
+ <translation>- Bildbetrachter</translation>
+ </message>
+ <message>
+ <source>Loading image...</source>
+ <translation>Lade Bild...</translation>
+ </message>
+ <message>
+ <source>Could not load image</source>
+ <translation>Bild konnte nicht geladen werden</translation>
+ </message>
+ <message>
+ <source>No image - select Open from File menu.</source>
+ <translation>Kein Bild - Wählen Sie ein Bild im Menü Datei.</translation>
+ </message>
+ <message>
+ <source>, %1/%2 colors</source>
+ <translation>, %1/%2 Farben</translation>
+ </message>
+ <message>
+ <source>, %1 colors</source>
+ <translation>, %1 Farben</translation>
+ </message>
+ <message>
+ <source> True color</source>
+ <translation>Echtfarben</translation>
+ </message>
+ <message>
+ <source>, %1 alpha levels</source>
+ <translation>, %1 Alpha-Schichten</translation>
+ </message>
+ <message>
+ <source>, 8-bit alpha channel</source>
+ <translation>, 8-Bit-Alpha-Kanal</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/snake.qm b/i18n/de/snake.qm
new file mode 100644
index 0000000..432b239
--- a/dev/null
+++ b/i18n/de/snake.qm
Binary files differ
diff --git a/i18n/de/snake.ts b/i18n/de/snake.ts
new file mode 100644
index 0000000..7a24d10
--- a/dev/null
+++ b/i18n/de/snake.ts
@@ -0,0 +1,68 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>SnakeGame</name>
+ <message>
+ <source>How to Play Snake</source>
+ <translation type="obsolete">Spielanleitung</translation>
+ </message>
+ <message>
+ <source>Quit</source>
+ <translation type="obsolete">Beenden</translation>
+ </message>
+ <message>
+ <source>SNAKE!</source>
+ <translation>SCHLANGE!</translation>
+ </message>
+ <message>
+ <source>Press Any Key to Begin a New Game.</source>
+ <translation>Neues Spiel: Betätigen Sie eine beliebige Taste.</translation>
+ </message>
+ <message>
+ <source> Score : %1 </source>
+ <translation> Punkte : %1 </translation>
+ </message>
+ <message>
+ <source>Use the arrow keys to guide the
+snake to eat the mouse. You must not
+crash into the walls, edges or its tail.</source>
+ <translation>Betätigen Sie die Pfeiltasten, um der Schlange
+zu einer Mausmahlzeit zu verhelfen.
+Allerdings sollten Sie sich vor den Wänden und
+dem Schlangenschwanz in Acht nehmen.</translation>
+ </message>
+ <message>
+ <source>How To Play</source>
+ <translation type="obsolete">Spielanleitung</translation>
+ </message>
+ <message>
+ <source>Use the arrow keys
+to guide the snake
+to eat the mouse.
+You must not crash
+into the walls, edges
+or its tail.</source>
+ <translation type="obsolete">Betätigen Sie die Pfeiltasten, um der Schlange
+zu einer Mausmahlzeit zu verhelfen.
+Allerdings sollten Sie sich vor den Wänden und
+dem Schlangenschwanz in Acht nehmen.</translation>
+ </message>
+ <message>
+ <source>GAME OVER!
+ Your Score: %1</source>
+ <translation>GAME OVER!
+ Punkte: %1</translation>
+ </message>
+ <message>
+ <source>New Game</source>
+ <translation>Neues Spiel</translation>
+ </message>
+ <message>
+ <source>Press Any Key To Start</source>
+ <translation>Spielbeginn: Betätigen Sie eine beliebige Taste.</translation>
+ </message>
+ <message>
+ <source>Snake</source>
+ <translation>Schlange</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/solitaire.ts b/i18n/de/solitaire.ts
new file mode 100644
index 0000000..d9d012b
--- a/dev/null
+++ b/i18n/de/solitaire.ts
@@ -0,0 +1,137 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>CanvasCardWindow</name>
+ <message>
+ <source>File</source>
+ <translation type="obsolete">Datei</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation type="obsolete">Hilfe</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation type="obsolete">&amp;Datei</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>&amp;Hilfe</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation type="obsolete">Infos zum Programm</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="obsolete">Schließen</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;About Qt Card Games&lt;/h3&gt;&lt;p&gt;These games were implemented&lt;br&gt;easily using Qt.&lt;br&gt;The canvas widget was used&lt;br&gt; as the basison which&lt;br&gt;the playing area is drawn.&lt;br&gt;Each card is an object on the canvas,&lt;br&gt;as are the decorations.&lt;br&gt;All the animation is done by Qt.&lt;p&gt;</source>
+ <translation type="obsolete">&lt;h3&gt;Diese Kartenspiele...&lt;/h3&gt;&lt;p&gt;... wurden mit Qt implementiert.&lt;br&gt;Als Grundfläche dient ein Canvas-Widget,&lt;br&gt;auf dem das Spielfeld gezeichnet wird. Jede Karte ist ein eigenständiges Objekt auf der Grundfläche, dasselbe gilt auch für die Verzierungen. Auch die Animation wird von Qt bereit gestellt.&lt;p&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;About</source>
+ <translation>&amp;Infos zum Programm</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation type="obsolete">&amp;Schließen</translation>
+ </message>
+ <message>
+ <source>Solitaire</source>
+ <translation type="obsolete">Solitaire</translation>
+ </message>
+ <message>
+ <source>&amp;New Game of Solitaire</source>
+ <translation type="obsolete">Neues Solitaire-Spiel</translation>
+ </message>
+ <message>
+ <source>New Game of Solitaire</source>
+ <translation type="obsolete">Neues Solitaire-Spiel</translation>
+ </message>
+ <message>
+ <source>Snap On/Off</source>
+ <translation type="obsolete">Magnet an/aus</translation>
+ </message>
+ <message>
+ <source>Change Cards Drawn</source>
+ <translation type="obsolete">Anzahl der zu ziehenden Karten ändern</translation>
+ </message>
+ <message>
+ <source>&amp;Snap On/Off</source>
+ <translation type="obsolete">&amp;Magnet an/aus</translation>
+ </message>
+ <message>
+ <source>Qt Solitaire</source>
+ <translation type="obsolete">Qt Solitaire</translation>
+ </message>
+ <message>
+ <source>Freecell</source>
+ <translation>Freecell</translation>
+ </message>
+ <message>
+ <source>Qt Freecell</source>
+ <translation type="obsolete">Qt Freecell</translation>
+ </message>
+ <message>
+ <source>&amp;Change Card Backs</source>
+ <translation>Karten&amp;rückseite ändern</translation>
+ </message>
+ <message>
+ <source>Dismiss</source>
+ <translation type="obsolete">Verwerfen</translation>
+ </message>
+ <message>
+ <source>Change Card Backs</source>
+ <translation>Kartenrückseite ändern</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;Solitaire&lt;/h3&gt;&lt;p&gt;The object of the game is to stack all the&lt;br&gt;cards on the top piles from the Aces to&lt;br&gt;the Kings in suit. The rules are that you&lt;br&gt;can only move a red card of the next lowest&lt;br&gt;values on top of black cards in the lower&lt;br&gt;playing area, or a black on a red in order.&lt;br&gt;You can get new cards from the face down&lt;br&gt;stack to help you move the cards.&lt;p&gt;Good luck and enjoy playing Solitaire!&lt;p&gt;</source>
+ <translation type="obsolete">&lt;h3&gt;Solitaire&lt;/h3&gt;&lt;p&gt;Ziel des Spiels ist es, alle Karten vom Ass bis&lt;br&gt;zum König in der passenden Reihenfolge abzulegen.&lt;br&gt;Dabei gelten folgende Regeln:&lt;br&gt;Nur rote Karten mit dem nächstniedrigeren Wert&lt;br&gt;können auf schwarze Karten folgen und umgekehrt.&lt;br&gt;Neue Karten, die -- hoffentlich -- die Lücken schließen,&lt;br&gt;ziehen Sie vom umgedrehten Stapel.&lt;br&gt;&lt;p&gt;Viel Spaß mit Solitaire!&lt;p&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Settings</source>
+ <translation>&amp;Einstellungen</translation>
+ </message>
+ <message>
+ <source>Settings</source>
+ <translation>Einstellungen</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;Freecell&lt;/h3&gt;&lt;p&gt;The object of the game is to stack all the&lt;br&gt;cards on the top right 4 piles from the Aces&lt;br&gt;to the Kings in suit. The rules are that&lt;br&gt;you can only move red cards of the next&lt;br&gt;lowest values on top of black cards, or&lt;br&gt;or black ones on to red ones in order.&lt;br&gt;You can move any card to the remaining&lt;br&gt;vacant freecells to help you move the cards.&lt;p&gt;Good luck and enjoy playing Freecell!&lt;p&gt;</source>
+ <translation type="obsolete">&lt;h3&gt;Freecell&lt;/h3&gt;&lt;p&gt;Ziel des Spiels ist es, alle Karten auf den vier&lt;br&gt;rechten Stapeln in der Reihenfolge Ass bis König&lt;br&gt;abzulegen. Dabei gelten folgende Regeln:&lt;br&gt;Auf schwarzen Karten dürfen nur rote Karten mit&lt;br&gt;dem nächstniedrigeren Wert abgelegt werden und umgekehrt.&lt;br&gt;Auf freien Feldern können beliebige Karten&lt;br&gt;zwischengelagert werden.&lt;br&gt;&lt;p&gt;Viel Spaß mit Freecell!&lt;p&gt;</translation>
+ </message>
+ <message>
+ <source>Qt Card Game Example</source>
+ <translation type="obsolete">Qt-Kartenspielbeispiel</translation>
+ </message>
+ <message>
+ <source>Patience</source>
+ <translation>Patience</translation>
+ </message>
+ <message>
+ <source>&amp;Game</source>
+ <translation>S&amp;piel</translation>
+ </message>
+ <message>
+ <source>&amp;Snap To Position</source>
+ <translation>&amp;Magnet an/aus</translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translation>Spielen</translation>
+ </message>
+ <message>
+ <source>Snap To Position</source>
+ <translation>&amp;Magnet an/aus</translation>
+ </message>
+ <message>
+ <source>Turn One Card</source>
+ <translation>Eine Karte aufdecken</translation>
+ </message>
+ <message>
+ <source>Turn Three Cards</source>
+ <translation>Drei Karten aufdecken</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/sysinfo.qm b/i18n/de/sysinfo.qm
new file mode 100644
index 0000000..0536f9b
--- a/dev/null
+++ b/i18n/de/sysinfo.qm
Binary files differ
diff --git a/i18n/de/sysinfo.ts b/i18n/de/sysinfo.ts
new file mode 100644
index 0000000..a917c4f
--- a/dev/null
+++ b/i18n/de/sysinfo.ts
@@ -0,0 +1,120 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>LoadInfo</name>
+ <message>
+ <source>Application CPU usage (%)</source>
+ <translation>CPU-Nutzung durch Anwendungen (%)</translation>
+ </message>
+ <message>
+ <source>System CPU usage (%)</source>
+ <translation>CPU-Nutzung durch System (%)</translation>
+ </message>
+ <message>
+ <source>Type: </source>
+ <translation>System: </translation>
+ </message>
+</context>
+<context>
+ <name>MemoryInfo</name>
+ <message>
+ <source>Used (%1 kB)</source>
+ <translation>Benutzt (%1 kB)</translation>
+ </message>
+ <message>
+ <source>Buffers (%1 kB)</source>
+ <translation>Buffer (%1 kB)</translation>
+ </message>
+ <message>
+ <source>Cached (%1 kB)</source>
+ <translation>Zwischengespeichert (%1 kB)</translation>
+ </message>
+ <message>
+ <source>Free (%1 kB)</source>
+ <translation>Frei (%1 kB)</translation>
+ </message>
+ <message>
+ <source>Total Memory: %1 kB</source>
+ <translation>Gesamter Speicher: %1 kB</translation>
+ </message>
+</context>
+<context>
+ <name>MountInfo</name>
+ <message>
+ <source> total: %1 kB</source>
+ <translation>: %1 kB</translation>
+ </message>
+ <message>
+ <source>Used (%1 kB)</source>
+ <translation>Belegt (%1 kB)</translation>
+ </message>
+ <message>
+ <source>Available (%1 kB)</source>
+ <translation>Frei (%1 kB)</translation>
+ </message>
+</context>
+<context>
+ <name>StorageInfo</name>
+ <message>
+ <source>CF Card</source>
+ <translation>CF-Karte</translation>
+ </message>
+ <message>
+ <source>Hard Disk</source>
+ <translation>Festplatte</translation>
+ </message>
+ <message>
+ <source>SD Card</source>
+ <translation>SD-Karte</translation>
+ </message>
+ <message>
+ <source>SCSI Hard Disk</source>
+ <translation>SCSI-Festplatte</translation>
+ </message>
+ <message>
+ <source>Internal Storage</source>
+ <translation>Interner Speicher</translation>
+ </message>
+</context>
+<context>
+ <name>SystemInfo</name>
+ <message>
+ <source>System Info</source>
+ <translation>Systeminformation</translation>
+ </message>
+ <message>
+ <source>Memory</source>
+ <translation>RAM</translation>
+ </message>
+ <message>
+ <source>Storage</source>
+ <translation>Speicher</translation>
+ </message>
+ <message>
+ <source>CPU</source>
+ <translation>CPU</translation>
+ </message>
+ <message>
+ <source>Version</source>
+ <translation>Version</translation>
+ </message>
+</context>
+<context>
+ <name>VersionInfo</name>
+ <message>
+ <source>&lt;b&gt;Linux Kernel&lt;/b&gt;&lt;p&gt;Version: </source>
+ <translation>&lt;b&gt;Linux Kernel&lt;/b&gt;&lt;p&gt; Version: </translation>
+ </message>
+ <message>
+ <source>Compiled by: </source>
+ <translation>Übersetzt von: </translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Qtopia&lt;/b&gt;&lt;p&gt;Version: </source>
+ <translation>&lt;b&gt;Qtopia&lt;/b&gt;&lt;p&gt; Version: </translation>
+ </message>
+ <message>
+ <source>Built on: </source>
+ <translation>Datum: </translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/systemtime.qm b/i18n/de/systemtime.qm
new file mode 100644
index 0000000..d1f95b2
--- a/dev/null
+++ b/i18n/de/systemtime.qm
Binary files differ
diff --git a/i18n/de/systemtime.ts b/i18n/de/systemtime.ts
new file mode 100644
index 0000000..005b0e9
--- a/dev/null
+++ b/i18n/de/systemtime.ts
@@ -0,0 +1,84 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>SetDateTime</name>
+ <message>
+ <source>Set System Time</source>
+ <translation>Systemuhr stellen</translation>
+ </message>
+ <message>
+ <source>Time Zone</source>
+ <translation>Zeitzone</translation>
+ </message>
+ <message>
+ <source>Weeks start on</source>
+ <translation>Wochenbeginn</translation>
+ </message>
+ <message>
+ <source>Sunday</source>
+ <translation>Sonntag</translation>
+ </message>
+ <message>
+ <source>Monday</source>
+ <translation>Montag</translation>
+ </message>
+ <message>
+ <source>Date</source>
+ <translation>Datum</translation>
+ </message>
+ <message>
+ <source>Time format</source>
+ <translation>Zeitformat</translation>
+ </message>
+ <message>
+ <source>24 hour</source>
+ <translation>24 Stunden</translation>
+ </message>
+ <message>
+ <source>12 hour</source>
+ <translation>12 Stunden</translation>
+ </message>
+ <message>
+ <source>Date format</source>
+ <translation>Datumsformat</translation>
+ </message>
+ <message>
+ <source>M/D/Y</source>
+ <translation type="obsolete">M/T/J</translation>
+ </message>
+ <message>
+ <source>D.M.Y</source>
+ <translation type="obsolete">T.M.J</translation>
+ </message>
+ <message>
+ <source>Y-M-D</source>
+ <translation type="obsolete">Y-M-T</translation>
+ </message>
+</context>
+<context>
+ <name>SetTime</name>
+ <message>
+ <source>show 12 hour</source>
+ <translation type="obsolete">12 Stunden</translation>
+ </message>
+ <message>
+ <source>show 24 hour</source>
+ <translation type="obsolete">24 Stunden</translation>
+ </message>
+ <message>
+ <source>Hour</source>
+ <translation>Stunde</translation>
+ </message>
+ <message>
+ <source>Minute</source>
+ <translation>Minute</translation>
+ </message>
+ <message>
+ <source>PM</source>
+ <translation>PM</translation>
+ </message>
+ <message>
+ <source>AM</source>
+ <translation>AM</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/tetrix.qm b/i18n/de/tetrix.qm
new file mode 100644
index 0000000..ee7839a
--- a/dev/null
+++ b/i18n/de/tetrix.qm
Binary files differ
diff --git a/i18n/de/tetrix.ts b/i18n/de/tetrix.ts
new file mode 100644
index 0000000..68a6320
--- a/dev/null
+++ b/i18n/de/tetrix.ts
@@ -0,0 +1,29 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>QTetrix</name>
+ <message>
+ <source>Next</source>
+ <translation>Weiter</translation>
+ </message>
+ <message>
+ <source>Level</source>
+ <translation>Level</translation>
+ </message>
+ <message>
+ <source>Score</source>
+ <translation>Punkte</translation>
+ </message>
+ <message>
+ <source>Start</source>
+ <translation>Start</translation>
+ </message>
+ <message>
+ <source>Tetrix</source>
+ <translation>Tetrix</translation>
+ </message>
+ <message>
+ <source>Removed</source>
+ <translation>Entfernt</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/textedit.qm b/i18n/de/textedit.qm
new file mode 100644
index 0000000..e6ef555
--- a/dev/null
+++ b/i18n/de/textedit.qm
Binary files differ
diff --git a/i18n/de/textedit.ts b/i18n/de/textedit.ts
new file mode 100644
index 0000000..6bb97a0
--- a/dev/null
+++ b/i18n/de/textedit.ts
@@ -0,0 +1,138 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>TextEdit</name>
+ <message>
+ <source>Cut</source>
+ <translation>Ausschneiden</translation>
+ </message>
+ <message>
+ <source>New</source>
+ <translation>Neu</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <translation>Fett</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>Kopieren</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>Bearbeiten</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>Datei</translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translation type="obsolete">Links</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>Öffnen</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="obsolete">Schließen</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>Einfügen</translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translation type="obsolete">Rechts</translation>
+ </message>
+ <message>
+ <source>Find Next</source>
+ <translation type="obsolete">Nächste Fundstelle</translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation type="obsolete">Zentriert</translation>
+ </message>
+ <message>
+ <source>Text Editor</source>
+ <translation>Texteditor</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation type="obsolete">Einfügen</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <translation>Kursiv</translation>
+ </message>
+ <message>
+ <source>Enumerated List</source>
+ <translation type="obsolete">Nummerierte Liste</translation>
+ </message>
+ <message>
+ <source>Table...</source>
+ <translation type="obsolete">Tabelle...</translation>
+ </message>
+ <message>
+ <source>Standard</source>
+ <translation type="obsolete">Standard</translation>
+ </message>
+ <message>
+ <source>Underline</source>
+ <translation type="obsolete">Unterstreichen</translation>
+ </message>
+ <message>
+ <source>Bullet List</source>
+ <translation type="obsolete">Aufzählung</translation>
+ </message>
+ <message>
+ <source>Unnamed</source>
+ <translation>Unbenannt</translation>
+ </message>
+ <message>
+ <source>Find...</source>
+ <translation type="obsolete">Suchen...</translation>
+ </message>
+ <message>
+ <source>Revert</source>
+ <translation type="obsolete"></translation>
+ </message>
+ <message>
+ <source>Zoom in</source>
+ <translation>Hereinzoomen</translation>
+ </message>
+ <message>
+ <source>Zoom out</source>
+ <translation>Herauszoomen</translation>
+ </message>
+ <message>
+ <source>Wrap lines</source>
+ <translation>Zeilen umbrechen</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Ansicht</translation>
+ </message>
+ <message>
+ <source>Close Find</source>
+ <translation>Beende Suche</translation>
+ </message>
+ <message>
+ <source>Out of space</source>
+ <translation>Nicht genügend Speicher vorhanden</translation>
+ </message>
+ <message>
+ <source>Text Editor was unable to
+save your changes.
+Free some space and try again.
+
+Continue anyway?</source>
+ <translation>Der Texteditor konnte
+die Änderungen nicht speichern.
+Löschen Sie einige Daten
+und versuchen Sie es nocheinmal.
+
+Trotzdem beenden?</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/todolist.qm b/i18n/de/todolist.qm
new file mode 100644
index 0000000..82cb64a
--- a/dev/null
+++ b/i18n/de/todolist.qm
Binary files differ
diff --git a/i18n/de/todolist.ts b/i18n/de/todolist.ts
new file mode 100644
index 0000000..063a81a
--- a/dev/null
+++ b/i18n/de/todolist.ts
@@ -0,0 +1,248 @@
+<!DOCTYPE TS><TS>
+<context encoding="UTF-8">
+ <name>NewTaskDialogBase</name>
+ <message>
+ <source>D&amp;ue</source>
+ <translation>F&amp;rist</translation>
+ </message>
+ <message>
+ <source>Text</source>
+ <translation type="obsolete">Text</translation>
+ </message>
+ <message>
+ <source>&amp;Done</source>
+ <translation type="obsolete">&amp;Fertig</translation>
+ </message>
+ <message>
+ <source>Image</source>
+ <translation type="obsolete">Bild</translation>
+ </message>
+ <message>
+ <source>Lunch</source>
+ <translation type="obsolete">Mittag</translation>
+ </message>
+ <message>
+ <source>&amp;Priority:</source>
+ <translation type="obsolete">&amp;Priorität</translation>
+ </message>
+ <message>
+ <source>2 - High</source>
+ <translation>2 - hoch</translation>
+ </message>
+ <message>
+ <source>Jan 02 2000</source>
+ <translation type="obsolete">02. Januar 2000</translation>
+ </message>
+ <message>
+ <source>Meeting</source>
+ <translation type="obsolete">Meeting</translation>
+ </message>
+ <message>
+ <source>Dinner</source>
+ <translation type="obsolete">Abendessen</translation>
+ </message>
+ <message>
+ <source>3 - Normal</source>
+ <translation>3 - normal</translation>
+ </message>
+ <message>
+ <source>Travel</source>
+ <translation type="obsolete">Reise</translation>
+ </message>
+ <message>
+ <source>4 - Low</source>
+ <translation>4 - niedrig</translation>
+ </message>
+ <message>
+ <source>&lt;Nothing&gt;</source>
+ <translation type="obsolete">&lt;Leer&gt;</translation>
+ </message>
+ <message>
+ <source>Private</source>
+ <translation type="obsolete">Privat</translation>
+ </message>
+ <message>
+ <source>1 - Very High</source>
+ <translation>1 - sehr hoch</translation>
+ </message>
+ <message>
+ <source>C&amp;ategory:</source>
+ <translation type="obsolete">&amp;Kategorie</translation>
+ </message>
+ <message>
+ <source>&amp;Description:</source>
+ <translation type="obsolete">&amp;Beschreibung</translation>
+ </message>
+ <message>
+ <source>New Task</source>
+ <translation>Neue Aufgabe</translation>
+ </message>
+ <message>
+ <source>Business</source>
+ <translation type="obsolete">Business</translation>
+ </message>
+ <message>
+ <source>5 - Very Low</source>
+ <translation>5 - sehr niedrig</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Priority:</source>
+ <translation>Priorität:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Category:</source>
+ <translation>Kategorie:</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&amp;Completed</source>
+ <translation>&amp;Komplett</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>1 Jan 2001</source>
+ <translation>1 Jan 2001</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>All</source>
+ <translation type="obsolete">Alle</translation>
+ </message>
+ <message>
+ <source>Unfiled</source>
+ <translation type="obsolete">Nicht zugeordnet</translation>
+ </message>
+</context>
+<context>
+ <name>TodoTable</name>
+ <message>
+ <source>C.</source>
+ <translation>K.</translation>
+ </message>
+ <message>
+ <source>Prior.</source>
+ <translation>Prior.</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>Beschreibung</translation>
+ </message>
+ <message>
+ <source>Todo List</source>
+ <translation type="obsolete">Aufgabenliste</translation>
+ </message>
+ <message>
+ <source>Unfiled</source>
+ <translation>Nicht zugeordnet</translation>
+ </message>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+</context>
+<context>
+ <name>TodoWindow</name>
+ <message>
+ <source>Edit</source>
+ <translation>Ändern</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation type="obsolete">Datei</translation>
+ </message>
+ <message>
+ <source>Task</source>
+ <translation>Aufgabe</translation>
+ </message>
+ <message>
+ <source>Todo</source>
+ <translation>Aufgaben</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="obsolete">Schließen</translation>
+ </message>
+ <message>
+ <source>Edit Task</source>
+ <translation>Eintrag ändern</translation>
+ </message>
+ <message>
+ <source>You haven&apos;t entered a description!</source>
+ <translation type="obsolete">Sie haben die Aufgabenbeschreibung vergessen!</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <source>&lt;Nothing&gt;</source>
+ <translation type="obsolete">&lt;Leer&gt;</translation>
+ </message>
+ <message>
+ <source>New Task</source>
+ <translation>Neue Aufgabe</translation>
+ </message>
+ <message>
+ <source>Out of Space</source>
+ <translation>Nicht genügend Speicher vorhanden</translation>
+ </message>
+ <message>
+ <source>Unable to create startup files
+Free up some space
+before you enter any data</source>
+ <translation>Konnte keine Startup-Datei anlegen
+Löschen Sie einige Daten,
+bevor Sie neue Daten eingeben</translation>
+ </message>
+ <message>
+ <source>Find</source>
+ <translation>Suchen</translation>
+ </message>
+ <message>
+ <source>Completed tasks</source>
+ <translation>Erledigte Aufgaben</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>Ansicht</translation>
+ </message>
+ <message>
+ <source>Category</source>
+ <translation type="obsolete"></translation>
+ </message>
+ <message>
+ <source>Can not edit data, currently syncing</source>
+ <translation>Daten können nicht editiert werden, da syncing</translation>
+ </message>
+ <message>
+ <source>Out of space</source>
+ <translation>Nicht genügend Speicher vorhanden</translation>
+ </message>
+ <message>
+ <source>Todo was unable
+to save your changes.
+Free up some space
+and try again.
+
+Quit Anyway?</source>
+ <translation>Aufgabenliste konnte
+die Änderungen nicht speichern.
+Löschen Sie einige Daten
+und versuchen Sie es nocheinmal.
+
+Trotzdem beenden?</translation>
+ </message>
+ <message>
+ <source>Beam</source>
+ <translation>Senden</translation>
+ </message>
+ <message>
+ <source>All</source>
+ <translation>Alle</translation>
+ </message>
+ <message>
+ <source>Unfiled</source>
+ <translation>Nicht zugeordnet</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/de/wordgame.qm b/i18n/de/wordgame.qm
new file mode 100644
index 0000000..e2c924b
--- a/dev/null
+++ b/i18n/de/wordgame.qm
Binary files differ
diff --git a/i18n/de/wordgame.ts b/i18n/de/wordgame.ts
new file mode 100644
index 0000000..d90e412
--- a/dev/null
+++ b/i18n/de/wordgame.ts
@@ -0,0 +1,149 @@
+<!DOCTYPE TS><TS>
+<context>
+ <name>Board</name>
+ <message>
+ <source>Blanks: </source>
+ <translation>Blanks: </translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+ <message>
+ <source>Unknown word</source>
+ <translation>Unbekanntes Wort</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;The word &quot;%1&quot; is not in the dictionary.</source>
+ <translation>&lt;p&gt;Das Wort &quot;%1&quot; konnte nicht im Wörterbuch gefunden werden.</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <translation>Ignorieren</translation>
+ </message>
+</context>
+<context>
+ <name>NewGameBase</name>
+ <message>
+ <source>&amp;OK</source>
+ <translation type="obsolete">&amp;OK</translation>
+ </message>
+ <message>
+ <source>Rules</source>
+ <translation>Regeln</translation>
+ </message>
+ <message>
+ <source>AI3: Smart AI player</source>
+ <translation>AI3: Computergegner</translation>
+ </message>
+ <message>
+ <source>Players</source>
+ <translation>Spieler</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation type="obsolete">&amp;Abbrechen</translation>
+ </message>
+ <message>
+ <source>New Game</source>
+ <translation type="obsolete">Neues Spiel</translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>Form1</source>
+ <translation></translation>
+ </message>
+ <message encoding="UTF-8">
+ <source>&amp;Start</source>
+ <translation>&amp;Start</translation>
+ </message>
+</context>
+<context>
+ <name>RulesBase</name>
+ <message>
+ <source>&amp;OK</source>
+ <translation>&amp;OK</translation>
+ </message>
+ <message>
+ <source>Board</source>
+ <translation>Spielfeld</translation>
+ </message>
+ <message>
+ <source>Name:</source>
+ <translation>Name:</translation>
+ </message>
+ <message>
+ <source>Size:</source>
+ <translation>Größe:</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <source>Game Rules</source>
+ <translation>Spielregeln</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Abbrechen</translation>
+ </message>
+ <message>
+ <source>Edit...</source>
+ <translation>Ändern...</translation>
+ </message>
+</context>
+<context>
+ <name>ScoreInfo</name>
+ <message>
+ <source>&lt;P&gt;Invalid move</source>
+ <translation>&lt;P&gt;Ungültiger Zug</translation>
+ </message>
+ <message>
+ <source>&lt;P&gt;Score: </source>
+ <translation>&lt;P&gt;Punkte: </translation>
+ </message>
+</context>
+<context>
+ <name>WordGame</name>
+ <message>
+ <source>No</source>
+ <translation>Nein</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>Ja</translation>
+ </message>
+ <message>
+ <source>End game</source>
+ <translation>Spiel beenden</translation>
+ </message>
+ <message>
+ <source>Do you want to end the game early?</source>
+ <translation>Möchten Sie das Spiel vorzeitig abbrechen?</translation>
+ </message>
+ <message>
+ <source>Word Game</source>
+ <translation>Wort Spiel</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>Zurück</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>Fertig</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>Schließen</translation>
+ </message>
+</context>
+</TS>
diff --git a/i18n/en/.directory b/i18n/en/.directory
new file mode 100644
index 0000000..47c4bda
--- a/dev/null
+++ b/i18n/en/.directory
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=English
+Name[no]=Engelsk
+Name[de]=Englisch
+Name[ja]=英語
+Name[hu]=Angol
diff --git a/i18n/en/README b/i18n/en/README
new file mode 100644
index 0000000..5718506
--- a/dev/null
+++ b/i18n/en/README
@@ -0,0 +1,2 @@
+No English translation files at the moment, this directory is just
+for the .directory file.
diff --git a/i18n/hu/.desktop b/i18n/hu/.desktop
new file mode 100644
index 0000000..7f16e9a
--- a/dev/null
+++ b/i18n/hu/.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Name=Hungarian
+Name[de]=Ungarnish
+Name[hu]=Magyar
diff --git a/i18n/hu/addressbook.po b/i18n/hu/addressbook.po
new file mode 100644
index 0000000..4f8c398
--- a/dev/null
+++ b/i18n/hu/addressbook.po
@@ -0,0 +1,336 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-07-24 14:24:45 EST\n"
+"PO-Revision-Date: 2001-07-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: abeditor.cpp:51
+msgid "AbEditor::< Address, City >"
+msgstr "< Cm, Vros >"
+
+#: abeditor.cpp:54
+msgid "AbEditor::< Address, Country >"
+msgstr "< Cm, Orszg >"
+
+#: abeditor.cpp:52
+msgid "AbEditor::< Address, State/Province >"
+msgstr "< Cm, llam/Tartomny/Megye >"
+
+#: abeditor.cpp:50
+msgid "AbEditor::< Address, Street >"
+msgstr "< Cm, t/Utca >"
+
+#: abeditor.cpp:53
+msgid "AbEditor::< Address, Zip/Postal Code >"
+msgstr "< Cm, Irnytszm >"
+
+#: abeditor.cpp:49
+msgid "AbEditor::< Company >"
+msgstr "< Cg >"
+
+#: abeditor.cpp:48
+msgid "AbEditor::< Department >"
+msgstr "< Rszleg >"
+
+#: abeditor.cpp:46
+msgid "AbEditor::< Full Name >"
+msgstr "< Teljes nv >"
+
+#: abeditor.cpp:55
+msgid "AbEditor::< Notes >"
+msgstr "< Jegyzet >"
+
+#: abeditor.cpp:47
+msgid "AbEditor::< Title >"
+msgstr "< Megszlts >"
+
+#: abeditor.cpp:109
+msgid "AbEditor::Doctor"
+msgstr "Dr."
+
+#: abeditor.cpp:109
+msgid "AbEditor::Dr"
+msgstr ""
+
+#: abeditor.cpp:109
+msgid "AbEditor::Dr."
+msgstr ""
+
+#: abeditor.cpp:115
+msgid "AbEditor::I"
+msgstr ""
+
+#: abeditor.cpp:115
+msgid "AbEditor::II"
+msgstr ""
+
+#: abeditor.cpp:115
+msgid "AbEditor::IIII"
+msgstr ""
+
+#: abeditor.cpp:116
+msgid "AbEditor::Jr."
+msgstr "f."
+
+#: abeditor.cpp:115
+msgid "AbEditor::Junior"
+msgstr ""
+
+#: abeditor.cpp:109
+msgid "AbEditor::Miss"
+msgstr ""
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mr"
+msgstr ""
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mr."
+msgstr ""
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mrs"
+msgstr ""
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mrs."
+msgstr ""
+
+#: abeditor.cpp:111
+msgid "AbEditor::Ms"
+msgstr ""
+
+#: abeditor.cpp:111
+msgid "AbEditor::Ms."
+msgstr ""
+
+#: abeditor.cpp:111
+msgid "AbEditor::Prof."
+msgstr "Prof."
+
+#: abeditor.cpp:111
+msgid "AbEditor::Professor"
+msgstr ""
+
+#: abeditor.cpp:116
+msgid "AbEditor::Senior"
+msgstr ""
+
+#: abeditor.cpp:116
+msgid "AbEditor::Sr."
+msgstr ""
+
+#: abeditor.cpp:107
+msgid "AbEditor::the"
+msgstr ""
+
+#: abeditorbase.cpp:35
+msgid "AbEditorBase::..."
+msgstr "..."
+
+#: abeditorbase.cpp:20
+msgid "AbEditorBase::AbEditorBase"
+msgstr "AbEditorBase"
+
+#: abeditorbase.cpp:135
+msgid "AbEditorBase::Birthday:"
+msgstr "Szletsnap:"
+
+#: abeditorbase.cpp:136
+msgid "AbEditorBase::Email:"
+msgstr "E-Mail:"
+
+#: abeditorbase.cpp:137
+msgid "AbEditorBase::Fax:"
+msgstr "Fax:"
+
+#: abeditorbase.cpp:138
+msgid "AbEditorBase::Home Ph:"
+msgstr "Tel. (magn.):"
+
+#: abeditorbase.cpp:139
+msgid "AbEditorBase::Mobile Ph:"
+msgstr "Tel. (mobil):"
+
+#: abeditorbase.cpp:140
+msgid "AbEditorBase::Other:"
+msgstr "Egyb:"
+
+#: abeditorbase.cpp:141
+msgid "AbEditorBase::Spouse:"
+msgstr "Hzastrs:"
+
+#: abeditorbase.cpp:142
+msgid "AbEditorBase::Web Page:"
+msgstr "Honlap:"
+
+#: abeditorbase.cpp:143
+msgid "AbEditorBase::Work Ph:"
+msgstr "Tel. (mh.):"
+
+#: ablabel.cpp:47
+msgid "AbLabel::Birthday"
+msgstr "Szletsnap"
+
+#: ablabel.cpp:47
+msgid "AbLabel::Email"
+msgstr "E-Mail"
+
+#: ablabel.cpp:47
+msgid "AbLabel::Fax"
+msgstr "Fax"
+
+#: ablabel.cpp:48
+msgid "AbLabel::Home Ph"
+msgstr "Tel. (otth.)"
+
+#: ablabel.cpp:48
+msgid "AbLabel::Mobile Ph"
+msgstr "Tel. (mobil)"
+
+#: ablabel.cpp:48
+msgid "AbLabel::Other"
+msgstr "Egyb"
+
+#: ablabel.cpp:49
+msgid "AbLabel::Spouse"
+msgstr "Hzastrs"
+
+#: ablabel.cpp:49
+msgid "AbLabel::Web Page"
+msgstr "Honlap"
+
+#: ablabel.cpp:49
+msgid "AbLabel::Work Ph"
+msgstr "Tel. (mh.)"
+
+#: abnamebase.cpp:78
+msgid "AbNameBase::Cancel"
+msgstr "Mgsem"
+
+#: abnamebase.cpp:51
+msgid "AbNameBase::First"
+msgstr "Keresztnv"
+
+#: abnamebase.cpp:61
+msgid "AbNameBase::Last"
+msgstr "Vezetknv"
+
+#: abnamebase.cpp:56
+msgid "AbNameBase::Middle"
+msgstr "Keresztnv"
+
+#: abnamebase.cpp:20
+msgid "AbNameBase::Name Details"
+msgstr "Nv"
+
+#: abnamebase.cpp:73
+msgid "AbNameBase::OK"
+msgstr "OK"
+
+#: abnamebase.cpp:66
+msgid "AbNameBase::Suffix"
+msgstr "Uttag"
+
+#: abnamebase.cpp:46
+msgid "AbNameBase::Title"
+msgstr "Megszlts"
+
+#: abtable.cpp:57
+msgid "AbTable::Contact"
+msgstr "Elrhetsg"
+
+#: abtable.cpp:56
+msgid "AbTable::Full Name"
+msgstr "Teljes nv"
+
+#: abaddress.cpp:21
+msgid "AddressDetails::Address Details"
+msgstr "Cm rszletek"
+
+#: abaddress.cpp:27
+msgid "AddressDetails::Cancel"
+msgstr "Mgsem"
+
+#: abaddress.cpp:70
+msgid "AddressDetails::City"
+msgstr "Vros"
+
+#: abaddress.cpp:65
+msgid "AddressDetails::Country"
+msgstr "Orszg"
+
+#: abaddress.cpp:32
+msgid "AddressDetails::OK"
+msgstr "OK"
+
+#: abaddress.cpp:52
+msgid "AddressDetails::State/Province"
+msgstr "llam/Tartomny/Megye"
+
+#: abaddress.cpp:75
+msgid "AddressDetails::Street"
+msgstr "t/utca"
+
+#: abaddress.cpp:47
+msgid "AddressDetails::Zip/Postal"
+msgstr "Irnytszm"
+
+#: addressbook.cpp:38
+msgid "AddressbookWindow::Address Book"
+msgstr "Cmtr"
+
+#: addressbook.cpp:93
+msgid "AddressbookWindow::Edit Address"
+msgstr "Cm szerkesztse"
+
+#: addressbook.cpp:49
+msgid "AddressbookWindow::List Operations"
+msgstr "Lista mveletek"
+
+#: addressbook.cpp:64
+msgid "AddressbookWindow::View Operations"
+msgstr "Nzet mveletek"
+
+#: abcompanybase.cpp:55
+msgid "CompanyDetails::Cancel"
+msgstr "Mgsem"
+
+#: abcompanybase.cpp:85
+msgid "CompanyDetails::City"
+msgstr "Vros"
+
+#: abcompanybase.cpp:21
+msgid "CompanyDetails::Company Details"
+msgstr "Cg adatok"
+
+#: abcompanybase.cpp:78
+msgid "CompanyDetails::Country"
+msgstr "Orszg"
+
+#: abcompanybase.cpp:31
+msgid "CompanyDetails::Name"
+msgstr "Nv"
+
+#: abcompanybase.cpp:50
+msgid "CompanyDetails::OK"
+msgstr "OK"
+
+#: abcompanybase.cpp:40
+msgid "CompanyDetails::State/Province"
+msgstr "llam/Tartomny/Megye"
+
+#: abcompanybase.cpp:64
+msgid "CompanyDetails::Street"
+msgstr "t/utca"
+
+#: abcompanybase.cpp:45
+msgid "CompanyDetails::Zip/Postal"
+msgstr "Irnytszm"
+
diff --git a/i18n/hu/addressbook.qm b/i18n/hu/addressbook.qm
new file mode 100644
index 0000000..a1b1b7e
--- a/dev/null
+++ b/i18n/hu/addressbook.qm
Binary files differ
diff --git a/i18n/hu/calculator.po b/i18n/hu/calculator.po
new file mode 100644
index 0000000..6fdad5d
--- a/dev/null
+++ b/i18n/hu/calculator.po
@@ -0,0 +1,16 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: main.cpp:28
+msgid "CalculatorImpl::Calculator"
+msgstr "Szmolgp"
+
diff --git a/i18n/hu/calculator.qm b/i18n/hu/calculator.qm
new file mode 100644
index 0000000..800cc54
--- a/dev/null
+++ b/i18n/hu/calculator.qm
Binary files differ
diff --git a/i18n/hu/citytime.po b/i18n/hu/citytime.po
new file mode 100644
index 0000000..1fac421
--- a/dev/null
+++ b/i18n/hu/citytime.po
@@ -0,0 +1,122 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: citytime.cpp:148
+msgid "CityTime::Restore Time Zone"
+msgstr "Idzna visszalltsa"
+
+#: citytime.cpp:139
+msgid "CityTime::There was a problem setting timezone %1"
+msgstr "Hiba lpett fel a(z) %1 idzna belltsnl."
+
+#: citytime.cpp:149
+msgid "CityTime::"
+"There was a problem setting your timezone."
+"Your time may be wrong now..."
+msgstr "Hiba lpett fel az idzn belltsnl, az idbellts lehet, hogy gy nem tkletes."
+
+#: citytime.cpp:138
+msgid "CityTime::Time Changing"
+msgstr "Id llts"
+
+#: citytimebase.cpp:53
+msgid "CityTimeBase::<CITY 1 TIME>"
+msgstr "<1. VROS ID>"
+
+#: citytimebase.cpp:92
+msgid "CityTimeBase::<CITY 2 TIME>"
+msgstr "<2. VROS ID>"
+
+#: citytimebase.cpp:111
+msgid "CityTimeBase::<CITY 3 TIME>"
+msgstr "<3. VROS ID>"
+
+#: citytimebase.cpp:102
+msgid "CityTimeBase::<CITY 4 TIME>"
+msgstr "<4. VROS ID>"
+
+#: citytimebase.cpp:120
+msgid "CityTimeBase::<CITY 5 TIME>"
+msgstr "<5. VROS ID>"
+
+#: citytimebase.cpp:72
+msgid "CityTimeBase::<location 1>"
+msgstr "<1. Vros>"
+
+#: citytimebase.cpp:149
+msgid "CityTimeBase::<location 2>"
+msgstr "<1. Vros>"
+
+#: citytimebase.cpp:34
+msgid "CityTimeBase::<location 3>"
+msgstr "<1. Vros>"
+
+#: citytimebase.cpp:158
+msgid "CityTimeBase::<location 4>"
+msgstr "<1. Vros>"
+
+#: citytimebase.cpp:139
+msgid "CityTimeBase::<location 5>"
+msgstr "<1. Vros>"
+
+#: citytimebase.cpp:20
+msgid "CityTimeBase::City Time"
+msgstr "Idznk"
+
+#: zonemap.cpp:413
+msgid "ZoneMap::<p>Couldn't load map: %1, exiting"
+msgstr "<p>Nem tudom a(z) %1 trkpet betlteni, kilpek."
+
+#: zonemap.cpp:166
+msgid "ZoneMap::<p>Unable to find any timezone information in %1 or %2"
+msgstr "<p>Nem tallom az idzna informcit %1 s %2 helyen."
+
+#: zonemap.cpp:122
+msgid "ZoneMap::CITY"
+msgstr "VROS"
+
+#: zonemap.cpp:412
+msgid "ZoneMap::Couldn't Find Map"
+msgstr "Nem tallom a trkpet"
+
+#: zonemap.cpp:546
+msgid "ZoneMap::Fri"
+msgstr "P"
+
+#: zonemap.cpp:542
+msgid "ZoneMap::Mon"
+msgstr "H"
+
+#: zonemap.cpp:547
+msgid "ZoneMap::Sat"
+msgstr "Szo"
+
+#: zonemap.cpp:548
+msgid "ZoneMap::Sun"
+msgstr "V"
+
+#: zonemap.cpp:545
+msgid "ZoneMap::Thu"
+msgstr "Cs"
+
+#: zonemap.cpp:543
+msgid "ZoneMap::Tue"
+msgstr "K"
+
+#: zonemap.cpp:165
+msgid "ZoneMap::Unable to Find Timezone Info"
+msgstr "Nem tallom az idzna inforcikat"
+
+#: zonemap.cpp:544
+msgid "ZoneMap::Wed"
+msgstr "Sze"
+
diff --git a/i18n/hu/citytime.qm b/i18n/hu/citytime.qm
new file mode 100644
index 0000000..1028dd5
--- a/dev/null
+++ b/i18n/hu/citytime.qm
Binary files differ
diff --git a/i18n/hu/clock.po b/i18n/hu/clock.po
new file mode 100644
index 0000000..932a0dc
--- a/dev/null
+++ b/i18n/hu/clock.po
@@ -0,0 +1,16 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: main.cpp:11
+msgid "Clock::Clock"
+msgstr "ra"
+
diff --git a/i18n/hu/clock.qm b/i18n/hu/clock.qm
new file mode 100644
index 0000000..1e3e534
--- a/dev/null
+++ b/i18n/hu/clock.qm
Binary files differ
diff --git a/i18n/hu/datebook.po b/i18n/hu/datebook.po
new file mode 100644
index 0000000..37d5f79
--- a/dev/null
+++ b/i18n/hu/datebook.po
@@ -0,0 +1,424 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: datebook.cpp:54
+msgid "DateBook::Close"
+msgstr "Bezr"
+
+#: datebook.cpp:34
+msgid "DateBook::Date Book"
+msgstr "Naptr"
+
+#: main.cpp:11
+msgid "DateBook::Datebook"
+msgstr "Naptr"
+
+#: datebook.cpp:63
+msgid "DateBook::Day"
+msgstr "Nap"
+
+#: datebook.cpp:209
+msgid "DateBook::Edit Event"
+msgstr "Esemny"
+
+#: datebook.cpp:86
+msgid "DateBook::File"
+msgstr "File"
+
+#: datebook.cpp:79
+msgid "DateBook::Month"
+msgstr "Hnap"
+
+#: datebook.cpp:49
+msgid "DateBook::New"
+msgstr "j"
+
+#: datebook.cpp:87
+msgid "DateBook::View"
+msgstr "Nzet"
+
+#: datebook.cpp:72
+msgid "DateBook::Week"
+msgstr "Ht"
+
+#: datebookdayheader.cpp:279
+msgid "DateBookDayHeaderBase::"
+msgstr ""
+
+#: datebookdayheader.cpp:258
+msgid "DateBookDayHeaderBase::F"
+msgstr "P"
+
+#: datebookdayheader.cpp:208
+msgid "DateBookDayHeaderBase::Form1"
+msgstr "rlap 1"
+
+#: datebookdayheader.cpp:261
+msgid "DateBookDayHeaderBase::Friday"
+msgstr "Pntek"
+
+#: datebookdayheader.cpp:221
+msgid "DateBookDayHeaderBase::Jan 02 00"
+msgstr "2000 Janur 2"
+
+#: datebookdayheader.cpp:230
+msgid "DateBookDayHeaderBase::M"
+msgstr "H"
+
+#: datebookdayheader.cpp:233
+msgid "DateBookDayHeaderBase::Monday"
+msgstr "Htf"
+
+#: datebookdayheader.cpp:272
+msgid "DateBookDayHeaderBase::S"
+msgstr "Sz"
+
+#: datebookdayheader.cpp:268
+msgid "DateBookDayHeaderBase::Saturday"
+msgstr "Szombat"
+
+#: datebookdayheader.cpp:275
+msgid "DateBookDayHeaderBase::Sunday"
+msgstr "Vasrnap"
+
+#: datebookdayheader.cpp:251
+msgid "DateBookDayHeaderBase::T"
+msgstr "Cs"
+
+#: datebookdayheader.cpp:254
+msgid "DateBookDayHeaderBase::Thursday"
+msgstr "Cstrtk"
+
+#: datebookdayheader.cpp:240
+msgid "DateBookDayHeaderBase::Tuesday"
+msgstr "Kedd"
+
+#: datebookdayheader.cpp:244
+msgid "DateBookDayHeaderBase::W"
+msgstr "Sz"
+
+#: datebookdayheader.cpp:247
+msgid "DateBookDayHeaderBase::Wednesday"
+msgstr "Szerda"
+
+#: datebookday.cpp:254
+msgid "DateBookDayWidget::Delete"
+msgstr "Trls"
+
+#: datebookday.cpp:253
+msgid "DateBookDayWidget::Edit..."
+msgstr "Szerkeszts..."
+
+#: datebookweek.cpp:206
+msgid "DateBookWeekWidget::Delete"
+msgstr "Trls"
+
+#: datebookweek.cpp:205
+msgid "DateBookWeekWidget::Edit..."
+msgstr "Szerkeszts..."
+
+#: dateentry.cpp:200
+msgid "DateEntryBase:: minutes"
+msgstr "Perc"
+
+#: dateentry.cpp:274
+msgid "DateEntryBase::"
+msgstr ""
+
+#: dateentry.cpp:195
+msgid "DateEntryBase::&Alarm"
+msgstr "&Riaszts"
+
+#: dateentry.cpp:99
+msgid "DateEntryBase::(Nothing)"
+msgstr "(Nincs)"
+
+#: dateentry.cpp:215
+msgid "DateEntryBase::00:00"
+msgstr "00:00"
+
+#: dateentry.cpp:216
+msgid "DateEntryBase::00:30"
+msgstr "00:30"
+
+#: dateentry.cpp:217
+msgid "DateEntryBase::01:00"
+msgstr "01:00"
+
+#: dateentry.cpp:218
+msgid "DateEntryBase::01:30"
+msgstr "01:30"
+
+#: dateentry.cpp:219
+msgid "DateEntryBase::02:00"
+msgstr "02:00"
+
+#: dateentry.cpp:220
+msgid "DateEntryBase::02:30"
+msgstr "02:30"
+
+#: dateentry.cpp:221
+msgid "DateEntryBase::03:00"
+msgstr "03:00"
+
+#: dateentry.cpp:222
+msgid "DateEntryBase::03:30"
+msgstr "03:30"
+
+#: dateentry.cpp:223
+msgid "DateEntryBase::04:00"
+msgstr "04:00"
+
+#: dateentry.cpp:224
+msgid "DateEntryBase::04:30"
+msgstr "04:30"
+
+#: dateentry.cpp:225
+msgid "DateEntryBase::05:00"
+msgstr "05:00"
+
+#: dateentry.cpp:226
+msgid "DateEntryBase::05:30"
+msgstr "05:30"
+
+#: dateentry.cpp:227
+msgid "DateEntryBase::06:00"
+msgstr "06:00"
+
+#: dateentry.cpp:228
+msgid "DateEntryBase::06:30"
+msgstr "06:30"
+
+#: dateentry.cpp:229
+msgid "DateEntryBase::07:00"
+msgstr "07:00"
+
+#: dateentry.cpp:230
+msgid "DateEntryBase::07:30"
+msgstr "07:30"
+
+#: dateentry.cpp:231
+msgid "DateEntryBase::08:00"
+msgstr "08:00"
+
+#: dateentry.cpp:232
+msgid "DateEntryBase::08:30"
+msgstr "08:30"
+
+#: dateentry.cpp:233
+msgid "DateEntryBase::09:00"
+msgstr "09:00"
+
+#: dateentry.cpp:234
+msgid "DateEntryBase::09:30"
+msgstr "09:30"
+
+#: dateentry.cpp:235
+msgid "DateEntryBase::10:00"
+msgstr "10:00"
+
+#: dateentry.cpp:236
+msgid "DateEntryBase::10:30"
+msgstr "10:30"
+
+#: dateentry.cpp:237
+msgid "DateEntryBase::11:00"
+msgstr "11:00"
+
+#: dateentry.cpp:238
+msgid "DateEntryBase::11:30"
+msgstr "11:30"
+
+#: dateentry.cpp:239
+msgid "DateEntryBase::12:00"
+msgstr "12:00"
+
+#: dateentry.cpp:240
+msgid "DateEntryBase::12:30"
+msgstr "12:30"
+
+#: dateentry.cpp:241
+msgid "DateEntryBase::13:00"
+msgstr "13:00"
+
+#: dateentry.cpp:242
+msgid "DateEntryBase::13:30"
+msgstr "13:30"
+
+#: dateentry.cpp:243
+msgid "DateEntryBase::14:00"
+msgstr "14:00"
+
+#: dateentry.cpp:244
+msgid "DateEntryBase::14:30"
+msgstr "14:30"
+
+#: dateentry.cpp:245
+msgid "DateEntryBase::15:00"
+msgstr "15:00"
+
+#: dateentry.cpp:246
+msgid "DateEntryBase::15:30"
+msgstr "15:30"
+
+#: dateentry.cpp:247
+msgid "DateEntryBase::16:00"
+msgstr "16:00"
+
+#: dateentry.cpp:248
+msgid "DateEntryBase::16:30"
+msgstr "16:30"
+
+#: dateentry.cpp:249
+msgid "DateEntryBase::17:00"
+msgstr "17:00"
+
+#: dateentry.cpp:250
+msgid "DateEntryBase::17:30"
+msgstr "17:30"
+
+#: dateentry.cpp:251
+msgid "DateEntryBase::18:00"
+msgstr "18:00"
+
+#: dateentry.cpp:252
+msgid "DateEntryBase::18:30"
+msgstr "18:30"
+
+#: dateentry.cpp:253
+msgid "DateEntryBase::19:00"
+msgstr "19:00"
+
+#: dateentry.cpp:254
+msgid "DateEntryBase::19:30"
+msgstr "19:30"
+
+#: dateentry.cpp:255
+msgid "DateEntryBase::20:00"
+msgstr "20:00"
+
+#: dateentry.cpp:256
+msgid "DateEntryBase::20:30"
+msgstr "20:30"
+
+#: dateentry.cpp:257
+msgid "DateEntryBase::21:00"
+msgstr "21:00"
+
+#: dateentry.cpp:258
+msgid "DateEntryBase::21:30"
+msgstr "21:30"
+
+#: dateentry.cpp:259
+msgid "DateEntryBase::22:00"
+msgstr "22:00"
+
+#: dateentry.cpp:260
+msgid "DateEntryBase::22:30"
+msgstr "22:30"
+
+#: dateentry.cpp:261
+msgid "DateEntryBase::23:00"
+msgstr "23:00"
+
+#: dateentry.cpp:262
+msgid "DateEntryBase::23:30"
+msgstr "23:30"
+
+#: dateentry.cpp:189
+msgid "DateEntryBase::<Edit Pattern...>"
+msgstr "<Szerkeszts...>"
+
+#: dateentry.cpp:110
+msgid "DateEntryBase::All Day"
+msgstr "Minden nap"
+
+#: dateentry.cpp:282
+msgid "DateEntryBase::Brisbane"
+msgstr "Brisbane"
+
+#: dateentry.cpp:71
+msgid "DateEntryBase::Category"
+msgstr "Kategria"
+
+#: dateentry.cpp:94
+msgid "DateEntryBase::Description:"
+msgstr "Lers:"
+
+#: dateentry.cpp:84
+msgid "DateEntryBase::Dinner"
+msgstr "Vacsora"
+
+#: dateentry.cpp:210
+msgid "DateEntryBase::Ends"
+msgstr "Vge"
+
+#: dateentry.cpp:188
+msgid "DateEntryBase::Every Week"
+msgstr "Minden hten"
+
+#: dateentry.cpp:100
+msgid "DateEntryBase::Home"
+msgstr "Otthon"
+
+#: dateentry.cpp:294
+msgid "DateEntryBase::Jan 02 00"
+msgstr "2000 Janur 2."
+
+#: dateentry.cpp:66
+msgid "DateEntryBase::Location"
+msgstr "Hely"
+
+#: dateentry.cpp:83
+msgid "DateEntryBase::Lunch"
+msgstr "Ebd"
+
+#: dateentry.cpp:82
+msgid "DateEntryBase::Meeting"
+msgstr "Tallkoz"
+
+#: dateentry.cpp:60
+msgid "DateEntryBase::New Event"
+msgstr "j Esemny"
+
+#: dateentry.cpp:109
+msgid "DateEntryBase::Normal"
+msgstr "Egyszeri"
+
+#: dateentry.cpp:281
+msgid "DateEntryBase::Oslo"
+msgstr "Oslo"
+
+#: dateentry.cpp:183
+msgid "DateEntryBase::Repeat"
+msgstr "Ismtld"
+
+#: dateentry.cpp:283
+msgid "DateEntryBase::Santa Clara"
+msgstr "Santa Clara"
+
+#: dateentry.cpp:115
+msgid "DateEntryBase::Starts"
+msgstr "Kezdet"
+
+#: dateentry.cpp:269
+msgid "DateEntryBase::Time zone:"
+msgstr "Idzna:"
+
+#: dateentry.cpp:85
+msgid "DateEntryBase::Travel"
+msgstr "Utazs"
+
+#: dateentry.cpp:120
+msgid "DateEntryBase::Type"
+msgstr "Tpus"
+
diff --git a/i18n/hu/datebook.qm b/i18n/hu/datebook.qm
new file mode 100644
index 0000000..cec92ec
--- a/dev/null
+++ b/i18n/hu/datebook.qm
Binary files differ
diff --git a/i18n/hu/filebrowser.po b/i18n/hu/filebrowser.po
new file mode 100644
index 0000000..8468989
--- a/dev/null
+++ b/i18n/hu/filebrowser.po
@@ -0,0 +1,168 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: filebrowser.cpp:612
+msgid "FileBrowser::&Dir"
+msgstr "&Knyvtr"
+
+#: filebrowser.cpp:615
+msgid "FileBrowser::&Sort"
+msgstr "&Rendezs"
+
+#: filebrowser.cpp:725
+msgid "FileBrowser::/"
+msgstr "/"
+
+#: filebrowser.cpp:625
+msgid "FileBrowser::Close"
+msgstr "Bezr"
+
+#: filebrowser.cpp:650
+msgid "FileBrowser::Copy"
+msgstr "Msols"
+
+#: filebrowser.cpp:663
+msgid "FileBrowser::Cut"
+msgstr "Kivgs"
+
+#: filebrowser.cpp:597
+msgid "FileBrowser::File Browser"
+msgstr "File bngsz"
+
+#: filebrowser.cpp:644
+msgid "FileBrowser::New folder"
+msgstr "j mappa"
+
+#: filebrowser.cpp:638
+msgid "FileBrowser::Parent dir"
+msgstr "Szl knyvtr"
+
+#: filebrowser.cpp:656
+msgid "FileBrowser::Paste"
+msgstr "Beilleszts"
+
+#: filebrowser.cpp:632
+msgid "FileBrowser::Previous dir"
+msgstr "Elz knyvtr"
+
+#: filebrowser.cpp:617
+msgid "FileBrowser::by &Date "
+msgstr "&Dtum szerint"
+
+#: filebrowser.cpp:616
+msgid "FileBrowser::by &Name "
+msgstr "&Nv szerint"
+
+#: filebrowser.cpp:618
+msgid "FileBrowser::by &Size "
+msgstr "&Mret szerint"
+
+#: filebrowser.cpp:619
+msgid "FileBrowser::by &Type "
+msgstr "&Tpus szerint"
+
+#: filebrowser.cpp:566
+msgid "FileView::&Copy"
+msgstr "&Msols"
+
+#: filebrowser.cpp:570
+msgid "FileView::&Cut"
+msgstr "&Kivgs"
+
+#: filebrowser.cpp:395
+msgid "FileView::&No"
+msgstr "&Nem"
+
+#: filebrowser.cpp:500
+msgid "FileView::&Ok"
+msgstr "&OK"
+
+#: filebrowser.cpp:568
+msgid "FileView::&Paste"
+msgstr "&Beilleszts"
+
+#: filebrowser.cpp:555
+msgid "FileView::&Run"
+msgstr "&Futtats"
+
+#: filebrowser.cpp:572
+msgid "FileView::&Select all"
+msgstr "&Mindet kijell"
+
+#: filebrowser.cpp:561
+msgid "FileView::&View as text"
+msgstr "M&egnz"
+
+#: filebrowser.cpp:395
+msgid "FileView::&Yes"
+msgstr "&Igen"
+
+#: filebrowser.cpp:394
+msgid "FileView::Are you sure?"
+msgstr "Biztos vagy benne?"
+
+#: filebrowser.cpp:404
+msgid "FileView::Cut failed!"
+msgstr "Nem sikerlt a kivgs!"
+
+#: filebrowser.cpp:404
+msgid "FileView::Cut"
+msgstr "Kivgs"
+
+#: filebrowser.cpp:573
+msgid "FileView::Dese&lect all"
+msgstr "Semm&it nem vlaszt ki"
+
+#: filebrowser.cpp:425
+msgid "FileView::Folder creation failed!"
+msgstr "A knyvtr ltrehozs sikertelen!"
+
+#: filebrowser.cpp:499
+msgid "FileView::Launch Application"
+msgstr "Alkalmazs indtsa"
+
+#: filebrowser.cpp:500
+msgid "FileView::Launch failed!"
+msgstr "Alkalmazs indtsa sikertelen!"
+
+#: filebrowser.cpp:424
+msgid "FileView::New folder"
+msgstr "j mappa"
+
+#: filebrowser.cpp:321
+msgid "FileView::Paste failed!"
+msgstr "A beilleszts nem sikerlt!"
+
+#: filebrowser.cpp:321
+msgid "FileView::Paste file"
+msgstr "Beilleszts fileba"
+
+#: filebrowser.cpp:564
+msgid "FileView::R&ename"
+msgstr "&tnevezs"
+
+#: filebrowser.cpp:262
+msgid "FileView::Rename failed!"
+msgstr "tnevezs sikertelen!"
+
+#: filebrowser.cpp:261
+msgid "FileView::Rename file"
+msgstr "tnevezs"
+
+#: filebrowser.cpp:479
+msgid "FileView::Unable to open file!"
+msgstr "Nem tudom a filet megnyitni!"
+
+#: filebrowser.cpp:478
+msgid "FileView::View as text"
+msgstr "Megnz"
+
diff --git a/i18n/hu/filebrowser.qm b/i18n/hu/filebrowser.qm
new file mode 100644
index 0000000..73292a0
--- a/dev/null
+++ b/i18n/hu/filebrowser.qm
Binary files differ
diff --git a/i18n/hu/header b/i18n/hu/header
new file mode 100644
index 0000000..5dd4bd6
--- a/dev/null
+++ b/i18n/hu/header
@@ -0,0 +1,3 @@
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
diff --git a/i18n/hu/helpbrowser.po b/i18n/hu/helpbrowser.po
new file mode 100644
index 0000000..df346b7
--- a/dev/null
+++ b/i18n/hu/helpbrowser.po
@@ -0,0 +1,48 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: helpbrowser.cpp:111
+msgid "HelpBrowser::About ..."
+msgstr "Nvjegy ..."
+
+#: helpbrowser.cpp:112
+msgid "HelpBrowser::About Qt ..."
+msgstr "Qt Nvjegy..."
+
+#: helpbrowser.cpp:115
+msgid "HelpBrowser::Add Bookmark"
+msgstr "Hozzads a kedvencekhez"
+
+#: helpbrowser.cpp:89
+msgid "HelpBrowser::Backward"
+msgstr "Vissza"
+
+#: helpbrowser.cpp:125
+msgid "HelpBrowser::Bookmarks"
+msgstr "Kedvencek"
+
+#: helpbrowser.cpp:97
+msgid "HelpBrowser::Forward"
+msgstr "Elre"
+
+#: helpbrowser.cpp:124
+msgid "HelpBrowser::Go"
+msgstr "Mehet"
+
+#: helpbrowser.cpp:126
+msgid "HelpBrowser::Help"
+msgstr "Segtsg"
+
+#: helpbrowser.cpp:105
+msgid "HelpBrowser::Home"
+msgstr "Home"
+
diff --git a/i18n/hu/helpbrowser.qm b/i18n/hu/helpbrowser.qm
new file mode 100644
index 0000000..5960ee8
--- a/dev/null
+++ b/i18n/hu/helpbrowser.qm
Binary files differ
diff --git a/i18n/hu/libqpe.po b/i18n/hu/libqpe.po
new file mode 100644
index 0000000..67d4f59
--- a/dev/null
+++ b/i18n/hu/libqpe.po
@@ -0,0 +1,24 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: fileselector.cpp:74
+msgid "FileSelector::Close the File Selector"
+msgstr "File-vlaszt bezrsa"
+
+#: fileselector.cpp:66
+msgid "FileSelector::Create a new Document"
+msgstr "j dokumentum ksztse"
+
+#: fileselector.cpp:26
+msgid "FileSelectorView::Name"
+msgstr "Nv"
+
diff --git a/i18n/hu/libqpe.qm b/i18n/hu/libqpe.qm
new file mode 100644
index 0000000..522b260
--- a/dev/null
+++ b/i18n/hu/libqpe.qm
Binary files differ
diff --git a/i18n/hu/login_de.po b/i18n/hu/login_de.po
new file mode 100644
index 0000000..62d9eee
--- a/dev/null
+++ b/i18n/hu/login_de.po
@@ -0,0 +1,76 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+
+#: qdmdialog.cpp:235
+msgid "QDMDialog::12:30:88"
+msgstr ""
+
+#: qdmdialog.cpp:252
+msgid "QDMDialog::Clear"
+msgstr "Trls"
+
+#: qdmdialog.cpp:276
+msgid "QDMDialog::Login"
+msgstr ""
+
+#: qdmdialog.cpp:268
+msgid "QDMDialog::Password"
+msgstr ""
+
+#: qdmdialog.cpp:168
+msgid "QDMDialog::QDM"
+msgstr ""
+
+#: qdmdialog.cpp:272
+msgid "QDMDialog::Shutdown"
+msgstr "Lellts"
+
+#: qdmdialog.cpp:280
+msgid "QDMDialog::Sleep"
+msgstr "Sleep"
+
+#: qdmdialog.cpp:243
+msgid "QDMDialog::Today:"
+msgstr "Ma:"
+
+#: qdmdialog.cpp:264
+msgid "QDMDialog::User"
+msgstr "Felhasznl"
+
+#: qdmdialog.cpp:239
+msgid "QDMDialog::Wed Feb 12 2001"
+msgstr ""
+
+#: qdmdialog.cpp:230
+msgid "QDMDialog::Welcome to \nmLinux [iPAQ]"
+msgstr "dvzli az\nmLinux [iPAQ]"
+
+#: qdmdialogimpl.cpp:213
+msgid "QDMDialogImpl::Cancel"
+msgstr "Mgsem"
+
+#: qdmdialogimpl.cpp:190
+msgid "QDMDialogImpl::Do you really want to go\nto sleep mode now?"
+msgstr "Tnyleg a sleep-mdba szeretnl\nmenni?"
+
+#: qdmdialogimpl.cpp:212
+msgid "QDMDialogImpl::Do you really want to shut\nthe system down now?"
+msgstr "Tnyleg le akarod lltani\na rendszert?"
+
+#: qdmdialogimpl.cpp:236
+msgid "QDMDialogImpl::Password wrong"
+msgstr "Helytelen jelsz!"
+
+#: qdmdialogimpl.cpp:237
+msgid "QDMDialogImpl::The given password is incorrect"
+msgstr "A megadott jelsz helytelen!"
+
diff --git a/i18n/hu/login_de.qm b/i18n/hu/login_de.qm
new file mode 100644
index 0000000..eb01410
--- a/dev/null
+++ b/i18n/hu/login_de.qm
Binary files differ
diff --git a/i18n/hu/minesweep.po b/i18n/hu/minesweep.po
new file mode 100644
index 0000000..a2aaf96
--- a/dev/null
+++ b/i18n/hu/minesweep.po
@@ -0,0 +1,65 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 18:29:23 EST\n"
+"PO-Revision-Date: 2001-03-14\n"
+"Last-Translator: Patricia Jung <trish@trolltech.com>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: minesweep.cpp:221
+msgid "MineSweep::About MineSweep"
+msgstr "Nvjegy"
+
+#: minesweep.cpp:213
+msgid "MineSweep::Advanced"
+msgstr "Halad"
+
+#: minesweep.cpp:212
+msgid "MineSweep::Beginner"
+msgstr "Kezd"
+
+#: minesweep.cpp:216
+msgid "MineSweep::Close"
+msgstr "Bezrs"
+
+#: minesweep.cpp:214
+msgid "MineSweep::Expert"
+msgstr "Profi"
+
+#: minesweep.cpp:223
+msgid "MineSweep::Game"
+msgstr "Jtk"
+
+#: minesweep.cpp:224
+msgid "MineSweep::Help"
+msgstr "Segtsg"
+
+#: minesweep.cpp:219
+msgid "MineSweep::Instructions"
+msgstr "Jtkszably"
+
+#: minesweep.cpp:205
+msgid "MineSweep::Mine Sweep"
+msgstr "Aknakeres"
+
+#: minesweep.cpp:340
+msgid "MineSweep::MineSweeper"
+msgstr "Aknakeres"
+
+#: minesweep.cpp:317
+msgid "MineSweep::Press and hold to mark a mine"
+msgstr "Tasds sokig a tollat a ngyzeten, ha az akna helyt\n"
+ "akarod jellni."
+
+#: minesweep.cpp:164
+msgid "MineSweep::You exploded!"
+msgstr "Felrobbantl!"
+
+#: minesweep.cpp:156
+msgid "MineSweep::You won!"
+msgstr "Nyertl!"
+
diff --git a/i18n/hu/minesweep.qm b/i18n/hu/minesweep.qm
new file mode 100644
index 0000000..61c3d09
--- a/dev/null
+++ b/i18n/hu/minesweep.qm
Binary files differ
diff --git a/i18n/hu/mpegplayer.po b/i18n/hu/mpegplayer.po
new file mode 100644
index 0000000..1a4fb39
--- a/dev/null
+++ b/i18n/hu/mpegplayer.po
@@ -0,0 +1,44 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: mpegplayer.cpp:78
+msgid "MpegPlayer::1:1"
+msgstr "1:1"
+
+#: mpegplayer.cpp:62
+msgid "MpegPlayer::Fullscreen"
+msgstr "Teljes kperny"
+
+#: mpegplayer.cpp:92
+msgid "MpegPlayer::Loop"
+msgstr "Ismtls"
+
+#: mpegplayer.cpp:132
+msgid "MpegPlayer::MPEG Player"
+msgstr "MPEG-Lejtsz"
+
+#: mpegplayer.cpp:73
+msgid "MpegPlayer::Mute"
+msgstr "Hang nlkl"
+
+#: mpegplayer.cpp:58
+msgid "MpegPlayer::Open"
+msgstr "Megnyits"
+
+#: mpegplayer.cpp:84
+msgid "MpegPlayer::Play"
+msgstr "Lejtszs"
+
+#: mpegplayer.cpp:88
+msgid "MpegPlayer::Stop"
+msgstr "Lellts"
+
diff --git a/i18n/hu/mpegplayer.qm b/i18n/hu/mpegplayer.qm
new file mode 100644
index 0000000..29fd65a
--- a/dev/null
+++ b/i18n/hu/mpegplayer.qm
Binary files differ
diff --git a/i18n/hu/parashoot.po b/i18n/hu/parashoot.po
new file mode 100644
index 0000000..b199500
--- a/dev/null
+++ b/i18n/hu/parashoot.po
@@ -0,0 +1,55 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: interface.cpp:128
+msgid "ParaShoot::"
+" GAME OVER!\n"
+" Your Score: %1\n"
+" Parachuters Killed: %2 "
+msgstr ""
+" VGE A JTKNAK!\n"
+" Pontszmod: %1\n"
+" Meglt ejternysk: %2 "
+
+
+#: interface.cpp:74
+msgid "ParaShoot:: Level: %1 Score: %2 "
+msgstr " Szint: %1 Pontszm: %2 "
+
+#: interface.cpp:37
+msgid "ParaShoot::How To Play"
+msgstr "Jtkszably"
+
+#: interface.cpp:33
+msgid "ParaShoot::New Game"
+msgstr "j jtk"
+
+#: interface.cpp:30
+msgid "ParaShoot::ParaShoot"
+msgstr "Tartsd a bzist"
+
+#: interface.cpp:41
+msgid "ParaShoot::Quit"
+msgstr "Kilps"
+
+#: interface.cpp:233
+msgid "ParaShoot::"
+"You must defend your base\nfrom attack by suicide bombers!\n"
+"Use the arrow keys to aim\nthe cannon and press space to\n"
+"shoot the bombers parachuting\ntowards your base.\n"
+"Three successful attacks\nwill destroy the base completely.\n"
+"Beware of those suicide\nbombers travelling in helicopters!!"
+msgstr "Meg kell vdened a bzisodat a\nkamikaze ejternysktl!\n"
+"A nyilakkal llthatod be a fegyvert\n, a szkzzel pedig tzelhetsz az\n"
+"ejternyskre.\n"
+"3 sikeres tmads elpuszttja\na bzisodat.\n"
+"vakodj azoktl, akik\nhelikopteren rkeznek!!\n"
diff --git a/i18n/hu/parashoot.qm b/i18n/hu/parashoot.qm
new file mode 100644
index 0000000..b5ddce3
--- a/dev/null
+++ b/i18n/hu/parashoot.qm
Binary files differ
diff --git a/i18n/hu/qpe.po b/i18n/hu/qpe.po
new file mode 100644
index 0000000..32b9e1a
--- a/dev/null
+++ b/i18n/hu/qpe.po
@@ -0,0 +1,100 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: inputmethods.cpp:238
+msgid "InputMethods::Handwriting"
+msgstr "Kzts"
+
+#: inputmethods.cpp:243
+msgid "InputMethods::Keyboard"
+msgstr "Billentyzet"
+
+#: inputmethods.cpp:245
+msgid "InputMethods::Opti"
+msgstr ""
+
+#: inputmethods.cpp:241
+msgid "InputMethods::Pickboard"
+msgstr ""
+
+#: inputmethods.cpp:248
+msgid "InputMethods::Unicode"
+msgstr ""
+
+#: ../launcher/launcher.cpp:181
+msgid "Launcher:: - Launcher"
+msgstr " - Indtpult"
+
+# #: ../launcher/launcher.cpp:243
+# msgid "Launcher::All"
+# msgstr "Alle"
+
+#: ../launcher/launcher.cpp:161
+msgid "Launcher::Launcher"
+msgstr "Indtpult"
+
+#: launcherclock.cpp:31
+msgid "LauncherClock::City Time"
+msgstr "Idzna"
+
+#: launcherclock.cpp:32
+msgid "LauncherClock::Set time"
+msgstr "Id belltsa"
+
+#: ../inputmethods/qimpensetup.cpp:31
+msgid "QIMPenSetup::Setup pen input"
+msgstr "Toll belltsok"
+
+#: shutdown.cpp:246
+msgid "Shutdown::<p>\nThese termination options are provided primarily for use while developing and testing the QPE system. In a normal environment, these concepts are unnecessary."
+msgstr "Ezek az opcik elsdlegesen a QPE\n"
+"rendszer tesztelshez s fejlesztshez\n"
+"hasznlatosak. Htkznapi krlmnyek\n"
+"kztt ezekre nincs szksg.\n"
+
+
+#: shutdown.cpp:252
+msgid "Shutdown::Cancel"
+msgstr "Mgsem"
+
+#: shutdown.cpp:89
+msgid "Shutdown::Reboot"
+msgstr "jraindts"
+
+#: shutdown.cpp:141
+msgid "Shutdown::Restart Server"
+msgstr "Szerver jraindtsa"
+
+#: shutdown.cpp:19
+msgid "Shutdown::Shut down..."
+msgstr "Lellts..."
+
+#: shutdown.cpp:193
+msgid "Shutdown::Shutdown"
+msgstr "Lellts"
+
+#: shutdown.cpp:35
+msgid "Shutdown::Terminate Server"
+msgstr "Szerver lellts"
+
+#: shutdown.cpp:25
+msgid "Shutdown::Terminate"
+msgstr "Lellts"
+
+#: volume.cpp:29
+msgid "VolumeApplet::Mute"
+msgstr "Hangok ki"
+
+#: volume.cpp:43
+msgid "VolumeApplet::Volume"
+msgstr "Hanger"
+
diff --git a/i18n/hu/qpe.qm b/i18n/hu/qpe.qm
new file mode 100644
index 0000000..07a4192
--- a/dev/null
+++ b/i18n/hu/qpe.qm
Binary files differ
diff --git a/i18n/hu/settings.po b/i18n/hu/settings.po
new file mode 100644
index 0000000..caa6e1a
--- a/dev/null
+++ b/i18n/hu/settings.po
@@ -0,0 +1,244 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: appearancesettingsbase.cpp:19
+msgid "AppearanceSettingsBase::Appearance"
+msgstr "Megjelens"
+
+#: appearancesettingsbase.cpp:34
+msgid "AppearanceSettingsBase::Color Scheme:"
+msgstr "Sznvltozatok"
+
+#: appearancesettingsbase.cpp:29
+msgid "AppearanceSettingsBase::QPE"
+msgstr "QPE"
+
+#: appearancesettingsbase.cpp:25
+msgid "AppearanceSettingsBase::Style:"
+msgstr "Stlus"
+
+#: appearancesettingsbase.cpp:30
+msgid "AppearanceSettingsBase::Windows"
+msgstr "Windows"
+
+#: languagesettingsbase.cpp:27
+msgid "LanguageSettingsBase::"
+msgstr ""
+
+#: languagesettingsbase.cpp:37
+msgid "LanguageSettingsBase::English"
+msgstr "Angol"
+
+#: languagesettingsbase.cpp:44
+msgid "LanguageSettingsBase::German"
+msgstr "Nmet"
+
+#: languagesettingsbase.cpp:62
+msgid "LanguageSettingsBase::Japanese"
+msgstr "Japn"
+
+#: languagesettingsbase.cpp:68
+msgid "LanguageSettingsBase::Korean"
+msgstr "Koreai"
+
+#: languagesettingsbase.cpp:19
+msgid "LanguageSettingsBase::Language"
+msgstr "Nyelv"
+
+#: languagesettingsbase.cpp:74
+msgid "LanguageSettingsBase::Norwegian"
+msgstr "Norvg"
+
+#: languagesettingsbase.cpp:50
+msgid "LanguageSettingsBase::Simplified Chinese"
+msgstr "Knai (egyszerstett)"
+
+#: languagesettingsbase.cpp:56
+msgid "LanguageSettingsBase::Traditional Chinese"
+msgstr "Knai (hagyomnyos)"
+
+#: lightsettingsbase.cpp:122
+msgid "LightSettingsBase::<blockquote>The brighter the backlight, the more battery power is used.</blockquote>"
+msgstr "<p>Minl ersebb a httrvilgts, annl gyorsabban fogy az akkultor."
+
+#: lightsettingsbase.cpp:78
+msgid "LightSettingsBase::Adjust to environment"
+msgstr "Alkalmazkodj a krnyezethez."
+
+#: lightsettingsbase.cpp:114
+msgid "LightSettingsBase::Bright"
+msgstr "Vilgos"
+
+#: lightsettingsbase.cpp:79
+msgid "LightSettingsBase::By sensing the ambient light where you are using your device, the backlight can be adjusted automatically. The brightness setting still affects the average brightness."
+msgstr "A szrt fny erssgnek rzkelsvel a httrvilgts erssge automatikusan belltdik. A bellts az tlagos fnyessgre vonatkozik."
+
+#: lightsettingsbase.cpp:83
+msgid "LightSettingsBase::Dim after some inactivity"
+msgstr "Httrvilgts kikapcsolsa egy bizonyos id utn"
+
+#: lightsettingsbase.cpp:72
+msgid "LightSettingsBase::Light Settings"
+msgstr "Fnyessg-belltsok"
+
+#: lightsettingsbase.cpp:135
+msgid "LightSettingsBase::Off"
+msgstr "Ki"
+
+#: rotationsettingsbase.cpp:216
+msgid "RotationSettingsBase::"
+msgstr ""
+
+#: rotationsettingsbase.cpp:223
+msgid "RotationSettingsBase::<p>The chosen rotation will only affect new applications."
+msgstr "<p>A forgats belltsai csak az jonnan indtott alkalmazsokra lesznek rvnyesek<p>"
+
+#: rotationsettingsbase.cpp:175
+msgid "RotationSettingsBase::Rotation Settings"
+msgstr "Forgats-belltsok"
+
+#: settime.cpp:28
+msgid "SetDateTime::Set System Time"
+msgstr "Rendszerid belltsa"
+
+#: settime.cpp:34
+msgid "SetDateTime::Time Zone"
+msgstr "Idzna"
+
+#: settime.cpp:94
+msgid "SetTime::Hour"
+msgstr "ra"
+
+#: settime.cpp:105
+msgid "SetTime::Minute"
+msgstr "Perc"
+
+#: settingsbase.cpp:496
+msgid "SettingsBase::"
+msgstr ""
+
+#: settingsbase.cpp:333
+msgid "SettingsBase::<blockquote>The brighter the backlight, the more battery power is used.</blockquote>"
+msgstr "<p>Minl vilgosabb a httrvilgts, annl gyorsabban fogy az akkumltor.."
+
+#: settingsbase.cpp:462
+msgid "SettingsBase::<p>The chosen rotation will only affect new applications."
+msgstr "<p>A forgats belltsai csak az jonnan indtott alkalmazsokra lesznek rvnyesek<p>"
+
+#: settingsbase.cpp:361
+msgid "SettingsBase::Adjust to environment"
+msgstr "Alkalmazkodj a krnyezethez."
+
+#: settingsbase.cpp:325
+msgid "SettingsBase::Bright"
+msgstr "Vilgos"
+
+#: settingsbase.cpp:290
+msgid "SettingsBase::By sensing the ambient light where you are using your device, the backlight can be adjusted automatically. The brightness setting still affects the average brightness."
+msgstr "A szrt fny erssgnek rzkelsvel a httrvilgts erssge automatikusan belltdik. A bellts az tlagos fnyessgre vonatkozik."
+
+#: settingsbase.cpp:362
+msgid "SettingsBase::By sensing the ambient noise where you are using your device, the volume is adjusted automatically. The volume setting still affects the average volume."
+msgstr "A kls zaj rzkelsvel a hanger automatikusan belltdik. A bellts az tlagos hangerre vonatkozik."
+
+#: settingsbase.cpp:482
+msgid "SettingsBase::Color Scheme:"
+msgstr "Sznsma"
+
+#: settingsbase.cpp:294
+msgid "SettingsBase::Dim after some inactivity"
+msgstr "Httrvilgts kikapcsolsa egy bizonyos id utn"
+
+#: settingsbase.cpp:506
+msgid "SettingsBase::English"
+msgstr "Angol"
+
+#: settingsbase.cpp:525
+msgid "SettingsBase::Japanese"
+msgstr "Japn"
+
+#: settingsbase.cpp:528
+msgid "SettingsBase::Language"
+msgstr "Nyelv"
+
+#: settingsbase.cpp:353
+msgid "SettingsBase::Light"
+msgstr "Vilgos"
+
+#: settingsbase.cpp:388
+msgid "SettingsBase::Loud"
+msgstr "Hangos"
+
+#: settingsbase.cpp:346
+msgid "SettingsBase::Off"
+msgstr "Ki"
+
+#: settingsbase.cpp:477
+msgid "SettingsBase::QPE"
+msgstr "QPE"
+
+#: settingsbase.cpp:465
+msgid "SettingsBase::Rotation"
+msgstr "Elforgats"
+
+#: settingsbase.cpp:275
+msgid "SettingsBase::Settings"
+msgstr "Bellts"
+
+#: settingsbase.cpp:406
+msgid "SettingsBase::Silent"
+msgstr "Csendes"
+
+#: settingsbase.cpp:513
+msgid "SettingsBase::Simplified Chinese"
+msgstr "Knai (egyszerstett)"
+
+#: settingsbase.cpp:413
+msgid "SettingsBase::Sound"
+msgstr "Hang"
+
+#: settingsbase.cpp:487
+msgid "SettingsBase::Style"
+msgstr "Stlus"
+
+#: settingsbase.cpp:473
+msgid "SettingsBase::Style:"
+msgstr "Stlus"
+
+#: settingsbase.cpp:519
+msgid "SettingsBase::Traditional Chinese"
+msgstr "Knai (hagyomnyos)"
+
+#: settingsbase.cpp:478
+msgid "SettingsBase::Windows"
+msgstr "Windows"
+
+#: soundsettingsbase.cpp:75
+msgid "SoundSettingsBase::Adjust to environment"
+msgstr "Alkalmazkodj a krnyezethez"
+
+#: soundsettingsbase.cpp:76
+msgid "SoundSettingsBase::By sensing the ambient noise where you are using your device, the volume is adjusted automatically. The volume setting still affects the average volume."
+msgstr "A kls zaj rzkelsvel a hanger automatikusan belltdik. A bellts az tlagos hangerre vonatkozik."
+
+#: soundsettingsbase.cpp:103
+msgid "SoundSettingsBase::Loud"
+msgstr "Hangos"
+
+#: soundsettingsbase.cpp:121
+msgid "SoundSettingsBase::Silent"
+msgstr "Csendes"
+
+#: soundsettingsbase.cpp:69
+msgid "SoundSettingsBase::Sound Settings"
+msgstr "Hanger belltsok"
+
diff --git a/i18n/hu/settings.qm b/i18n/hu/settings.qm
new file mode 100644
index 0000000..6bd318c
--- a/dev/null
+++ b/i18n/hu/settings.qm
Binary files differ
diff --git a/i18n/hu/snake.po b/i18n/hu/snake.po
new file mode 100644
index 0000000..5c6ef0d
--- a/dev/null
+++ b/i18n/hu/snake.po
@@ -0,0 +1,69 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: interface.cpp:127
+msgid "SnakeGame:: Score : %1 "
+msgstr " Pontszm : %1 "
+
+#: interface.cpp:175
+msgid "SnakeGame::GAME OVER!\n Your Score: %1"
+msgstr "VGE A JTKNAK!\n Pontszm: %1"
+
+#: interface.cpp:37
+msgid "SnakeGame::How To Play"
+msgstr "Jtkszably"
+
+#: interface.cpp:217
+msgid "SnakeGame::How to Play Snake"
+msgstr "Jtkszably"
+
+#: interface.cpp:33
+msgid "SnakeGame::New Game"
+msgstr "j jtk"
+
+#: interface.cpp:91
+msgid "SnakeGame::Press Any Key To Start"
+msgstr "Nyomj meg egy billentyt a kezdshez!"
+
+#: interface.cpp:192
+msgid "SnakeGame::Press Any Key to Begin a New Game."
+msgstr "Nyomj meg egy billentzt az j jtkhoz!."
+
+#: interface.cpp:41
+msgid "SnakeGame::Quit"
+msgstr "Kilps"
+
+#: interface.cpp:73
+msgid "SnakeGame::SNAKE!"
+msgstr "KGY!"
+
+#: interface.cpp:83
+msgid "SnakeGame::"
+"Use the arrow keys to guide the\n"
+"snake to eat the mouse. You must not\n"
+"crash into the walls, edges or its tail."
+msgstr "A nyilak segtsgvel\n"
+"mozgathatod a kgyt gy,\n"
+"hogy meg tudja enni az egereket\n"
+"Nem szabad falnak, sarkoknak\n"
+"vagy a sajt farknak tkznie."
+
+#: interface.cpp:218
+msgid "SnakeGame::"
+"Use the arrow keys\nto guide the snake\n"
+"to eat the mouse.\nYou must not crash\ninto the"
+" walls, edges\nor its tail."
+msgstr "A nyilak segtsgvel\n"
+"mozgathatod a kgyt gy,\n"
+"hogy meg tudja enni az egereket\n"
+"Nem szabad falnak, sarkoknak\n"
+"vagy a sajt farknak tkznie."
diff --git a/i18n/hu/snake.qm b/i18n/hu/snake.qm
new file mode 100644
index 0000000..19d3256
--- a/dev/null
+++ b/i18n/hu/snake.qm
Binary files differ
diff --git a/i18n/hu/solitaire.po b/i18n/hu/solitaire.po
new file mode 100644
index 0000000..5a1d21c
--- a/dev/null
+++ b/i18n/hu/solitaire.po
@@ -0,0 +1,192 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: solitaire.cpp:775
+msgid "CanvasCardWindow::&About"
+msgstr "&Nvjegy"
+
+#: solitaire.cpp:768
+msgid "CanvasCardWindow::&Change Card Backs"
+msgstr "Krtyk htnak vltoztatsa"
+
+#: solitaire.cpp:762
+msgid "CanvasCardWindow::&Close"
+msgstr "&Bezr"
+
+#: solitaire.cpp:763
+msgid "CanvasCardWindow::&File"
+msgstr "&File"
+
+#: solitaire.cpp:777
+msgid "CanvasCardWindow::&Help"
+msgstr "&Segtsg"
+
+#: solitaire.cpp:760
+msgid "CanvasCardWindow::&New Game of Freecell"
+msgstr "j Freecell jtk"
+
+#: solitaire.cpp:759
+msgid "CanvasCardWindow::&New Game of Solitaire"
+msgstr "j Passzinsz jtk"
+
+# #: solitaire.cpp:760
+# msgid "CanvasCardWindow::&New Game of Freecell"
+# msgstr "Neues Freecell-Spiel"
+
+#: solitaire.cpp:770
+msgid "CanvasCardWindow::&Settings"
+msgstr "&Belltsok"
+
+#: solitaire.cpp:769
+msgid "CanvasCardWindow::&Snap On/Off"
+msgstr "&Mgnes Be/Ki"
+
+#: solitaire.cpp:829
+msgid "CanvasCardWindow::"
+"<h3>About Qt Card Games</h3>"
+"<p>"
+"These games were implemented<br>easily using Qt.<br>"
+"The canvas widget was used<br> as the basis"
+"on which<br>the playing area is drawn.<br>"
+"Each card is an object on the canvas,<br>as "
+"are the decorations.<br>All the animation is "
+"done by Qt."
+"<p>"
+msgstr "<h3>A krtyajtkokrl...</h3>"
+"<p>"
+"Ezek a jtkok Qt hasznlatval<br>egyszeren implementlhatak voltak.<br>"
+"A canvas widgetet hasznltuk<br>, erre rajzoltuk a jtkteret.<br>"
+"Minden krtya egy objektum a canvasen,<br> mint dekorci.<br>"
+"Az animlsokat a Qt vgzi."
+"<p>"
+
+
+#: solitaire.cpp:864
+msgid "CanvasCardWindow::"
+"<h3>Freecell</h3>"
+"<p>"
+"The object of the game is to stack all the<br>"
+"cards on the top right 4 piles from the Aces<br>"
+"to the Kings in suit. The rules are that<br>"
+"you can only move red cards of the next<br>"
+"lowest values on top of black cards, or<br>"
+"or black ones on to red ones in order.<br>"
+"You can move any card to the remaining<br>"
+"vacant freecells to help you move the cards."
+"<p>Good luck and enjoy playing Freecell!"
+"<p>"
+msgstr "<h3>Freecell</h3>"
+"<p>"
+"A jtk clja, hogy a krtykat a 4 jobb<br>"
+"fels helyre rakjuk az sztl a Kirlyig<br>"
+"sorban. A piros krtykat csak az utna<br>"
+"kvetkez fekete kartykra teheted,<br>"
+"illetve a fekett a pirosra. Annyi krtyt<br>"
+"mozgathatsz egyszerre, amennyit a<br>"
+"fennmarad szabad helyek megengednek<br>"
+"<p>Sok szerencst a Freecell jtkhoz"
+"<p>"
+
+#: solitaire.cpp:850
+msgid "CanvasCardWindow::"
+"<h3>Solitaire</h3>"
+"<p>"
+"The object of the game is to stack all the<br>"
+"cards on the top piles from the Aces to<br>"
+"the Kings in suit. The rules are that you<br>"
+"can only move a red card of the next lowest<br>"
+"values on top of black cards in the lower<br>"
+"playing area, or a black on a red in order.<br>"
+"You can get new cards from the face down<br>"
+"stack to help you move the cards."
+"<p>Good luck and enjoy playing Solitaire!"
+"<p>"
+msgstr "<h3>Passzinsz</h3>"
+"<p>"
+"A jtk clja, hogy a krtykat a 4 jobb<br>"
+"fels helyre rakjuk az sztl a Kirlyig<br>"
+"sorban. Az als jtktrben a piros krtykat<br>"
+"csak az utna kvetkez fekete krtyra teheted,<br>"
+"illetve a fekett a pirosra. A bal fels sarokban<br>"
+"tallhat paklibl j krtykat szerezhetsz, hogy<br>"
+"megknnytse a pakolst!<br>"
+"<p>Sok szerencst a Passzinsz jtkhoz"
+"<p>"
+
+#: solitaire.cpp:799
+msgid "CanvasCardWindow::About"
+msgstr "Nvjegy"
+
+#: solitaire.cpp:791
+msgid "CanvasCardWindow::Change Card Backs"
+msgstr "Krtyk htnak vltoztatsa"
+
+#: solitaire.cpp:793
+msgid "CanvasCardWindow::Change Cards Drawn"
+msgstr "Hzott krtyk szmnak vltoztatsa"
+
+#: solitaire.cpp:785
+msgid "CanvasCardWindow::Close"
+msgstr "Bezr"
+
+#: solitaire.cpp:881
+msgid "CanvasCardWindow::Dismiss"
+msgstr "Bezr"
+
+#: solitaire.cpp:786
+msgid "CanvasCardWindow::File"
+msgstr "File"
+
+#: solitaire.cpp:691
+msgid "CanvasCardWindow::Freecell"
+msgstr "Freecell"
+
+#: solitaire.cpp:802
+msgid "CanvasCardWindow::Help"
+msgstr "Segtsg"
+
+#: solitaire.cpp:783
+msgid "CanvasCardWindow::New Game of Freecell"
+msgstr "j Freecell jtk"
+
+#: solitaire.cpp:782
+msgid "CanvasCardWindow::New Game of Solitaire"
+msgstr "j Passzinsz jtk"
+
+# #: solitaire.cpp:783
+# msgid "CanvasCardWindow::New Game of Freecell"
+# msgstr "Neues Freecell-Spiel"
+
+#: solitaire.cpp:828
+msgid "CanvasCardWindow::Qt Card Game Example"
+msgstr "Qt Krtyajtk plda"
+
+#: solitaire.cpp:863
+msgid "CanvasCardWindow::Qt Freecell"
+msgstr "Qt Freecell"
+
+#: solitaire.cpp:889
+msgid "CanvasCardWindow::Qt Solitaire"
+msgstr "Qt Passzinsz"
+
+#: solitaire.cpp:794
+msgid "CanvasCardWindow::Settings"
+msgstr "Belltsok"
+
+#: solitaire.cpp:792
+msgid "CanvasCardWindow::Snap On/Off"
+msgstr "Mgnes be/ki"
+
+#: solitaire.cpp:677
+msgid "CanvasCardWindow::Solitaire"
+msgstr "Passzinsz"
+
diff --git a/i18n/hu/solitaire.qm b/i18n/hu/solitaire.qm
new file mode 100644
index 0000000..611c276
--- a/dev/null
+++ b/i18n/hu/solitaire.qm
Binary files differ
diff --git a/i18n/hu/spreadsheet.po b/i18n/hu/spreadsheet.po
new file mode 100644
index 0000000..b637b39
--- a/dev/null
+++ b/i18n/hu/spreadsheet.po
@@ -0,0 +1,48 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: pimspreadsheetwindow.cpp:61
+msgid "PIMSpreadsheetWindow::Edit"
+msgstr "Szerkeszts"
+
+#: pimspreadsheetwindow.cpp:60
+msgid "PIMSpreadsheetWindow::File"
+msgstr "File"
+
+#: pimspreadsheetwindow.cpp:55
+msgid "PIMSpreadsheetWindow::Clear Cell"
+msgstr "Cella trlse"
+
+#: pimspreadsheetwindow.cpp:46
+msgid "PIMSpreadsheetWindow::Close"
+msgstr "Bezr"
+
+#: pimspreadsheetwindow.cpp:50
+msgid "PIMSpreadsheetWindow::Equation"
+msgstr "Egyenlet"
+
+#: pimspreadsheetwindow.cpp:38
+msgid "PIMSpreadsheetWindow::New"
+msgstr "j"
+
+#: pimspreadsheetwindow.cpp:42
+msgid "PIMSpreadsheetWindow::Open"
+msgstr "Megnyits"
+
+#: pimspreadsheetwindow.cpp:19
+msgid "PIMSpreadsheetWindow::Spreadsheet"
+msgstr "Tblzatkezel"
+
+#: spreadsheetwidget.cpp:19
+msgid "SpreadsheetWidget::SpreadsheetWidget"
+msgstr "TblzatkezelWidget"
+
diff --git a/i18n/hu/spreadsheet.qm b/i18n/hu/spreadsheet.qm
new file mode 100644
index 0000000..831f75b
--- a/dev/null
+++ b/i18n/hu/spreadsheet.qm
Binary files differ
diff --git a/i18n/hu/tetrix.po b/i18n/hu/tetrix.po
new file mode 100644
index 0000000..c9bab8d
--- a/dev/null
+++ b/i18n/hu/tetrix.po
@@ -0,0 +1,36 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: qtetrix.cpp:100
+msgid "QTetrix::Level"
+msgstr "Szint"
+
+#: qtetrix.cpp:91
+msgid "QTetrix::Next"
+msgstr "Kvetkez"
+
+#: qtetrix.cpp:104
+msgid "QTetrix::Removed"
+msgstr "Trlve"
+
+#: qtetrix.cpp:96
+msgid "QTetrix::Score"
+msgstr "Pont"
+
+#: qtetrix.cpp:116
+msgid "QTetrix::Start"
+msgstr "Start"
+
+#: qtetrix.cpp:79
+msgid "QTetrix::Tetrix"
+msgstr "Tetrix"
+
diff --git a/i18n/hu/tetrix.qm b/i18n/hu/tetrix.qm
new file mode 100644
index 0000000..3e4d983
--- a/dev/null
+++ b/i18n/hu/tetrix.qm
Binary files differ
diff --git a/i18n/hu/textedit.po b/i18n/hu/textedit.po
new file mode 100644
index 0000000..1fd131e
--- a/dev/null
+++ b/i18n/hu/textedit.po
@@ -0,0 +1,108 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-02-23 18:22:10 EST\n"
+"PO-Revision-Date: 2001-03-19\n"
+"Last-Translator: Patricia Jung <trish@trolltech.com>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: textedit.cpp:110
+msgid "TextEdit::Edit"
+msgstr "Szerkeszts"
+
+#: textedit.cpp:109
+msgid "TextEdit::File"
+msgstr "File"
+
+#: textedit.cpp:102
+msgid "TextEdit::Insert"
+msgstr "Beszrs"
+
+#: textedit.cpp:115
+msgid "TextEdit::Bold"
+msgstr "Kvr"
+
+#: textedit.cpp:191
+msgid "TextEdit::Bullet List"
+msgstr "Lista"
+
+#: textedit.cpp:140
+msgid "TextEdit::Center"
+msgstr "Kzp"
+
+#: textedit.cpp:170
+msgid "TextEdit::Close Find"
+msgstr ""
+
+#: textedit.cpp:69
+msgid "TextEdit::Close"
+msgstr "Bezr"
+
+#: textedit.cpp:79
+msgid "TextEdit::Copy"
+msgstr "Msols"
+
+#: textedit.cpp:74
+msgid "TextEdit::Cut"
+msgstr "Kivgs"
+
+#: textedit.cpp:194
+msgid "TextEdit::Enumerated List"
+msgstr "Szmozott lista"
+
+#: textedit.cpp:94
+msgid "TextEdit::Find Next"
+msgstr "Kvetkez"
+
+#: textedit.cpp:89
+msgid "TextEdit::Find..."
+msgstr "Keress..."
+
+#: textedit.cpp:120
+msgid "TextEdit::Italic"
+msgstr "Dlt"
+
+#: textedit.cpp:134
+msgid "TextEdit::Left"
+msgstr "Balra"
+
+#: textedit.cpp:61
+msgid "TextEdit::New"
+msgstr "j"
+
+#: textedit.cpp:65
+msgid "TextEdit::Open"
+msgstr "Megnyits"
+
+#: textedit.cpp:84
+msgid "TextEdit::Paste"
+msgstr "Beilleszts"
+
+#: textedit.cpp:145
+msgid "TextEdit::Right"
+msgstr "Jobbra"
+
+#: textedit.cpp:188
+msgid "TextEdit::Standard"
+msgstr "Norml"
+
+#: textedit.cpp:104
+msgid "TextEdit::Table..."
+msgstr "Tbla..."
+
+#: textedit.cpp:570
+msgid "TextEdit::Text Editor"
+msgstr "Szvegszerkesz"
+
+#: textedit.cpp:125
+msgid "TextEdit::Underline"
+msgstr "Alhzott"
+
+#: textedit.cpp:569
+msgid "TextEdit::Unnamed"
+msgstr "Nvtelen"
+
diff --git a/i18n/hu/textedit.qm b/i18n/hu/textedit.qm
new file mode 100644
index 0000000..2137bd5
--- a/dev/null
+++ b/i18n/hu/textedit.qm
Binary files differ
diff --git a/i18n/hu/todo.po b/i18n/hu/todo.po
new file mode 100644
index 0000000..faffa8f
--- a/dev/null
+++ b/i18n/hu/todo.po
@@ -0,0 +1,148 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: todoentry.cpp:63
+msgid "NewTaskDialogBase::&Description:"
+msgstr "&Lers"
+
+#: todoentry.cpp:86
+msgid "NewTaskDialogBase::&Done"
+msgstr "&Ksz"
+
+#: todoentry.cpp:40
+msgid "NewTaskDialogBase::&Priority:"
+msgstr "&Priorits"
+
+#: todoentry.cpp:45
+msgid "NewTaskDialogBase::1 - Very High"
+msgstr "1 - Nagyon magas"
+
+#: todoentry.cpp:46
+msgid "NewTaskDialogBase::2 - High"
+msgstr "2 - Magas"
+
+#: todoentry.cpp:47
+msgid "NewTaskDialogBase::3 - Normal"
+msgstr "3 - tlagos"
+
+#: todoentry.cpp:48
+msgid "NewTaskDialogBase::4 - Low"
+msgstr "4 - Alacsony"
+
+#: todoentry.cpp:49
+msgid "NewTaskDialogBase::5 - Very Low"
+msgstr "5 - Nagyon alacsony"
+
+#: todoentry.cpp:68
+msgid "NewTaskDialogBase::<Nothing>"
+msgstr "<Semmi>"
+
+#: todoentry.cpp:57
+msgid "NewTaskDialogBase::Business"
+msgstr "zleti"
+
+#: todoentry.cpp:35
+msgid "NewTaskDialogBase::C&ategory:"
+msgstr "&Kategria"
+
+#: todoentry.cpp:90
+msgid "NewTaskDialogBase::D&ue"
+msgstr "&Lejrat"
+
+#: todoentry.cpp:71
+msgid "NewTaskDialogBase::Dinner"
+msgstr "Vacsora"
+
+#: todoentry.cpp:119
+msgid "NewTaskDialogBase::Image"
+msgstr "Kp"
+
+#: todoentry.cpp:94
+msgid "NewTaskDialogBase::Jan 02 2000"
+msgstr "2000 Janur 2."
+
+#: todoentry.cpp:70
+msgid "NewTaskDialogBase::Lunch"
+msgstr "Ebd"
+
+#: todoentry.cpp:69
+msgid "NewTaskDialogBase::Meeting"
+msgstr "Tallkoz"
+
+#: todoentry.cpp:25
+msgid "NewTaskDialogBase::New Task"
+msgstr "j feladat"
+
+#: todoentry.cpp:56
+msgid "NewTaskDialogBase::Private"
+msgstr "Privt"
+
+#: todoentry.cpp:110
+msgid "NewTaskDialogBase::Text"
+msgstr "Szveg"
+
+#: todoentry.cpp:72
+msgid "NewTaskDialogBase::Travel"
+msgstr "Utazs"
+
+#: todotable.cpp:124
+msgid "TodoTable::C."
+msgstr "K."
+
+#: todotable.cpp:126
+msgid "TodoTable::Description"
+msgstr "Lers"
+
+#: todotable.cpp:125
+msgid "TodoTable::Prior."
+msgstr "Prior."
+
+#: mainwindow.cpp:140
+msgid "TodoWindow::<Nothing>"
+msgstr "<Semmi>"
+
+#: mainwindow.cpp:47
+msgid "TodoWindow::Close"
+msgstr "Bezr"
+
+#: mainwindow.cpp:57
+msgid "TodoWindow::Delete"
+msgstr "Trls"
+
+#: mainwindow.cpp:125
+msgid "TodoWindow::Edit Task"
+msgstr "Feladat szerkesztse"
+
+#: mainwindow.cpp:49
+msgid "TodoWindow::Edit"
+msgstr "Szerkeszts"
+
+#: mainwindow.cpp:65
+msgid "TodoWindow::File"
+msgstr "File"
+
+#: mainwindow.cpp:41
+msgid "TodoWindow::New Task"
+msgstr "j feladat"
+
+#: mainwindow.cpp:66
+msgid "TodoWindow::Task"
+msgstr "Feladat"
+
+#: mainwindow.cpp:141
+msgid "TodoWindow::Todo"
+msgstr "Feladatok"
+
+#: mainwindow.cpp:141
+msgid "TodoWindow::You haven't entered a description!"
+msgstr "Nem rtl be lerst!"
+
diff --git a/i18n/hu/todo.qm b/i18n/hu/todo.qm
new file mode 100644
index 0000000..dbb9100
--- a/dev/null
+++ b/i18n/hu/todo.qm
Binary files differ
diff --git a/i18n/hu/wordgame.po b/i18n/hu/wordgame.po
new file mode 100644
index 0000000..11593e1
--- a/dev/null
+++ b/i18n/hu/wordgame.po
@@ -0,0 +1,88 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-06-24 17:46:13 CEST\n"
+"PO-Revision-Date: 2001-06-24\n"
+"Last-Translator: Szab, Balzs <dlux@kapu.hu>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: newgamebase.cpp:66
+msgid "NewGameBase::"
+msgstr ""
+
+#: newgamebase.cpp:102
+msgid "NewGameBase::&Cancel"
+msgstr "&Mgsem"
+
+#: newgamebase.cpp:96
+msgid "NewGameBase::&OK"
+msgstr "&OK"
+
+#: newgamebase.cpp:67
+msgid "NewGameBase::AI3: Smart AI player"
+msgstr "AI3: Szmtgp"
+
+#: newgamebase.cpp:19
+msgid "NewGameBase::New Game"
+msgstr "j jtk"
+
+#: newgamebase.cpp:26
+msgid "NewGameBase::Players"
+msgstr "Jtkosok"
+
+#: newgamebase.cpp:73
+msgid "NewGameBase::Rules"
+msgstr "Szablyok"
+
+#: rulesbase.cpp:93
+msgid "RulesBase::&Cancel"
+msgstr "&Mgsem"
+
+#: rulesbase.cpp:87
+msgid "RulesBase::&OK"
+msgstr "&OK"
+
+#: rulesbase.cpp:41
+msgid "RulesBase::Board"
+msgstr "Tbla"
+
+#: rulesbase.cpp:80
+msgid "RulesBase::Delete"
+msgstr "Trls"
+
+#: rulesbase.cpp:68
+msgid "RulesBase::Edit..."
+msgstr "Szerkeszts..."
+
+#: rulesbase.cpp:22
+msgid "RulesBase::Game Rules"
+msgstr "Jtkszablyok"
+
+#: rulesbase.cpp:33
+msgid "RulesBase::Name:"
+msgstr "Nv:"
+
+#: rulesbase.cpp:52
+msgid "RulesBase::Size:"
+msgstr "Mret:"
+
+#: wordgame.cpp:336
+msgid "WordGame::Do you want to end the game early?"
+msgstr "Ilyen korn szeretnl vget vetni a jtknak?"
+
+#: wordgame.cpp:335
+msgid "WordGame::End game"
+msgstr "Jtk vge"
+
+#: wordgame.cpp:337
+msgid "WordGame::No"
+msgstr "Nem"
+
+#: wordgame.cpp:337
+msgid "WordGame::Yes"
+msgstr "Igen"
+
diff --git a/i18n/hu/wordgame.qm b/i18n/hu/wordgame.qm
new file mode 100644
index 0000000..fb8d2eb
--- a/dev/null
+++ b/i18n/hu/wordgame.qm
Binary files differ
diff --git a/i18n/ja/.directory b/i18n/ja/.directory
new file mode 100644
index 0000000..9c4a25a
--- a/dev/null
+++ b/i18n/ja/.directory
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=Japanese
+Name[no]=Japansk
+Name[de]=Japanisch
+Name[ja]=日本語
+Name[hu]=Japán
diff --git a/i18n/ja/calculator.po b/i18n/ja/calculator.po
new file mode 100644
index 0000000..d012440
--- a/dev/null
+++ b/i18n/ja/calculator.po
@@ -0,0 +1,16 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:01:54 EST\n"
+"PO-Revision-Date: 2001-05-05\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: main.cpp:28
+msgid "CalculatorImpl::Calculator"
+msgstr "電卓"
+
diff --git a/i18n/ja/calculator.qm b/i18n/ja/calculator.qm
new file mode 100644
index 0000000..712f6f2
--- a/dev/null
+++ b/i18n/ja/calculator.qm
Binary files differ
diff --git a/i18n/ja/citytime.po b/i18n/ja/citytime.po
new file mode 100644
index 0000000..d7b93e8
--- a/dev/null
+++ b/i18n/ja/citytime.po
@@ -0,0 +1,123 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:54:21 EST\n"
+"PO-Revision-Date: 2001-05-05\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: citytime.cpp:148
+msgid "CityTime::Restore Time Zone"
+msgstr "タイムゾーンを元に戻す"
+
+#: citytime.cpp:139
+msgid "CityTime::There was a problem setting timezone %1"
+msgstr "タイムゾーン %1 の設定中にエラーが発生しました。"
+
+#: citytime.cpp:149
+msgid "CityTime::"
+"There was a problem setting your timezone."
+"Your time may be wrong now..."
+msgstr "タイムゾーンの設定中にエラーが発生しました。"
+"時間が間違っている可能性があります..."
+
+#: citytime.cpp:138
+msgid "CityTime::Time Changing"
+msgstr "新しい時間の決定"
+
+#: citytimebase.cpp:53
+msgid "CityTimeBase::<CITY 1 TIME>"
+msgstr "<都市No.1の時間>"
+
+#: citytimebase.cpp:92
+msgid "CityTimeBase::<CITY 2 TIME>"
+msgstr "<都市No.2の時間 >"
+
+#: citytimebase.cpp:111
+msgid "CityTimeBase::<CITY 3 TIME>"
+msgstr "<都市No.3の時間>"
+
+#: citytimebase.cpp:102
+msgid "CityTimeBase::<CITY 4 TIME>"
+msgstr "<都市No.4の時間>"
+
+#: citytimebase.cpp:120
+msgid "CityTimeBase::<CITY 5 TIME>"
+msgstr "<都市No.5の時間>"
+
+#: citytimebase.cpp:72
+msgid "CityTimeBase::<location 1>"
+msgstr "<都市 No. 1>"
+
+#: citytimebase.cpp:149
+msgid "CityTimeBase::<location 2>"
+msgstr "<都市 No. 2>"
+
+#: citytimebase.cpp:34
+msgid "CityTimeBase::<location 3>"
+msgstr "<都市 No. 3>"
+
+#: citytimebase.cpp:158
+msgid "CityTimeBase::<location 4>"
+msgstr "<都市 No. 4>"
+
+#: citytimebase.cpp:139
+msgid "CityTimeBase::<location 5>"
+msgstr "<都市 No. 5>"
+
+#: citytimebase.cpp:20
+msgid "CityTimeBase::City Time"
+msgstr "世界時計"
+
+#: zonemap.cpp:413
+msgid "ZoneMap::<p>Couldn't load map: %1, exiting"
+msgstr "<p>%1の地図が見付かりません。終了します。"
+
+#: zonemap.cpp:166
+msgid "ZoneMap::<p>Unable to find any timezone information in %1 or %2"
+msgstr "<p>タイムゾーン情報が %1 および %2 で見付かりません。"
+
+#: zonemap.cpp:122
+msgid "ZoneMap::CITY"
+msgstr "都市"
+
+#: zonemap.cpp:412
+msgid "ZoneMap::Couldn't Find Map"
+msgstr "地図が見付かりません。"
+
+#: zonemap.cpp:546
+msgid "ZoneMap::Fri"
+msgstr "金"
+
+#: zonemap.cpp:542
+msgid "ZoneMap::Mon"
+msgstr "月"
+
+#: zonemap.cpp:547
+msgid "ZoneMap::Sat"
+msgstr "土"
+
+#: zonemap.cpp:548
+msgid "ZoneMap::Sun"
+msgstr "日"
+
+#: zonemap.cpp:545
+msgid "ZoneMap::Thu"
+msgstr "木"
+
+#: zonemap.cpp:543
+msgid "ZoneMap::Tue"
+msgstr "火"
+
+#: zonemap.cpp:165
+msgid "ZoneMap::Unable to Find Timezone Info"
+msgstr "タイムゾーン情報が見付かりません。"
+
+#: zonemap.cpp:544
+msgid "ZoneMap::Wed"
+msgstr "水"
+
diff --git a/i18n/ja/citytime.qm b/i18n/ja/citytime.qm
new file mode 100644
index 0000000..b9cbb07
--- a/dev/null
+++ b/i18n/ja/citytime.qm
Binary files differ
diff --git a/i18n/ja/clock.po b/i18n/ja/clock.po
new file mode 100644
index 0000000..077337e
--- a/dev/null
+++ b/i18n/ja/clock.po
@@ -0,0 +1,16 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-08 15:14:29 EST\n"
+"PO-Revision-Date: 2001-05-05\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: main.cpp:11
+msgid "Clock::Clock"
+msgstr "時計"
+
diff --git a/i18n/ja/clock.qm b/i18n/ja/clock.qm
new file mode 100644
index 0000000..c483122
--- a/dev/null
+++ b/i18n/ja/clock.qm
Binary files differ
diff --git a/i18n/ja/helpbrowser.po b/i18n/ja/helpbrowser.po
new file mode 100644
index 0000000..9aa9596
--- a/dev/null
+++ b/i18n/ja/helpbrowser.po
@@ -0,0 +1,48 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:55:37 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: helpbrowser.cpp:111
+msgid "HelpBrowser::About ..."
+msgstr "ヘルプについて..."
+
+#: helpbrowser.cpp:112
+msgid "HelpBrowser::About Qt ..."
+msgstr "Qtについて..."
+
+#: helpbrowser.cpp:115
+msgid "HelpBrowser::Add Bookmark"
+msgstr "ブックマークを追加"
+
+#: helpbrowser.cpp:89
+msgid "HelpBrowser::Backward"
+msgstr "戻る"
+
+#: helpbrowser.cpp:125
+msgid "HelpBrowser::Bookmarks"
+msgstr "ブックマーク"
+
+#: helpbrowser.cpp:97
+msgid "HelpBrowser::Forward"
+msgstr "進む"
+
+#: helpbrowser.cpp:124
+msgid "HelpBrowser::Go"
+msgstr "スタート"
+
+#: helpbrowser.cpp:126
+msgid "HelpBrowser::Help"
+msgstr "ヘルプ"
+
+#: helpbrowser.cpp:105
+msgid "HelpBrowser::Home"
+msgstr "スタートページ"
+
diff --git a/i18n/ja/helpbrowser.qm b/i18n/ja/helpbrowser.qm
new file mode 100644
index 0000000..cef51d6
--- a/dev/null
+++ b/i18n/ja/helpbrowser.qm
Binary files differ
diff --git a/i18n/ja/libqpe.po b/i18n/ja/libqpe.po
new file mode 100644
index 0000000..30ea344
--- a/dev/null
+++ b/i18n/ja/libqpe.po
@@ -0,0 +1,24 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:39:56 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: fileselector.cpp:74
+msgid "FileSelector::Close the File Selector"
+msgstr "ファイル記述子を閉じる"
+
+#: fileselector.cpp:66
+msgid "FileSelector::Create a new Document"
+msgstr "新規ドキュメントの作成"
+
+#: fileselector.cpp:26
+msgid "FileSelectorView::Name"
+msgstr "名前"
+
diff --git a/i18n/ja/libqpe.qm b/i18n/ja/libqpe.qm
new file mode 100644
index 0000000..4782543
--- a/dev/null
+++ b/i18n/ja/libqpe.qm
Binary files differ
diff --git a/i18n/ja/login_ja.po b/i18n/ja/login_ja.po
new file mode 100644
index 0000000..768753c
--- a/dev/null
+++ b/i18n/ja/login_ja.po
@@ -0,0 +1,76 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-15 20:05:04 CET\n"
+"PO-Revision-Date: 2001-05-15 20:08+GMT\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: qdmdialog.cpp:235
+msgid "QDMDialog::12:30:88"
+msgstr ""
+
+#: qdmdialog.cpp:252
+msgid "QDMDialog::Clear"
+msgstr "クリア"
+
+#: qdmdialog.cpp:276
+msgid "QDMDialog::Login"
+msgstr "ログイン"
+
+#: qdmdialog.cpp:268
+msgid "QDMDialog::Password"
+msgstr "パスワード"
+
+#: qdmdialog.cpp:168
+msgid "QDMDialog::QDM"
+msgstr ""
+
+#: qdmdialog.cpp:272
+msgid "QDMDialog::Shutdown"
+msgstr "シャットダウン"
+
+#: qdmdialog.cpp:280
+msgid "QDMDialog::Sleep"
+msgstr "スリープ"
+
+#: qdmdialog.cpp:243
+msgid "QDMDialog::Today:"
+msgstr "本日:"
+
+#: qdmdialog.cpp:264
+msgid "QDMDialog::User"
+msgstr "ユーザ"
+
+#: qdmdialog.cpp:239
+msgid "QDMDialog::Wed Feb 12 2001"
+msgstr ""
+
+#: qdmdialog.cpp:230
+msgid "QDMDialog::Welcome to \nmLinux [iPAQ]"
+msgstr "nmLinux [iPAQ]\nへようこそ"
+
+#: qdmdialogimpl.cpp:213
+msgid "QDMDialogImpl::Cancel"
+msgstr "取り消し"
+
+#: qdmdialogimpl.cpp:190
+msgid "QDMDialogImpl::Do you really want to go\nto sleep mode now?"
+msgstr "本当に省エネモード\nに移行しますか?"
+
+#: qdmdialogimpl.cpp:212
+msgid "QDMDialogImpl::Do you really want to shut\nthe system down now?"
+msgstr "本当にシャットダウン\nしますか?"
+
+#: qdmdialogimpl.cpp:236
+msgid "QDMDialogImpl::Password wrong"
+msgstr "パスワードが間違っています"
+
+#: qdmdialogimpl.cpp:237
+msgid "QDMDialogImpl::The given password is incorrect"
+msgstr "パスワードが間違っています"
+
diff --git a/i18n/ja/login_ja.qm b/i18n/ja/login_ja.qm
new file mode 100644
index 0000000..ed91086
--- a/dev/null
+++ b/i18n/ja/login_ja.qm
Binary files differ
diff --git a/i18n/ja/minesweep.po b/i18n/ja/minesweep.po
new file mode 100644
index 0000000..689b25c
--- a/dev/null
+++ b/i18n/ja/minesweep.po
@@ -0,0 +1,67 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 18:29:23 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: minesweep.cpp:221
+msgid "MineSweep::About MineSweep"
+msgstr "マインスィープについて"
+
+#: minesweep.cpp:213
+msgid "MineSweep::Advanced"
+msgstr "中級"
+
+#: minesweep.cpp:212
+msgid "MineSweep::Beginner"
+msgstr "初級"
+
+#: minesweep.cpp:216
+msgid "MineSweep::Close"
+msgstr "閉じる"
+
+#: minesweep.cpp:214
+msgid "MineSweep::Expert"
+msgstr "上級"
+
+#: minesweep.cpp:223
+msgid "MineSweep::Game"
+msgstr "ゲーム"
+
+#: minesweep.cpp:224
+msgid "MineSweep::Help"
+msgstr "ヘルプ"
+
+#: minesweep.cpp:219
+msgid "MineSweep::Instructions"
+msgstr "遊び方"
+
+#: minesweep.cpp:205
+msgid "MineSweep::Mine Sweep"
+msgstr "マインスィープ"
+
+#: minesweep.cpp:340
+msgid "MineSweep::MineSweeper"
+msgstr "マインスィープ"
+
+#: minesweep.cpp:317
+msgid "MineSweep::Press and hold to mark a mine"
+msgstr
+"地雷に印をつけるには\n"
+"地雷の上でタップして\n"
+"ください。"
+
+#: minesweep.cpp:164
+msgid "MineSweep::You exploded!"
+msgstr "ドッカ〜ン"
+
+#: minesweep.cpp:156
+msgid "MineSweep::You won!"
+msgstr "大勝利!"
+
diff --git a/i18n/ja/minesweep.qm b/i18n/ja/minesweep.qm
new file mode 100644
index 0000000..957d9d0
--- a/dev/null
+++ b/i18n/ja/minesweep.qm
Binary files differ
diff --git a/i18n/ja/mpegplayer.po b/i18n/ja/mpegplayer.po
new file mode 100644
index 0000000..91a83e8
--- a/dev/null
+++ b/i18n/ja/mpegplayer.po
@@ -0,0 +1,44 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:56:12 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: mpegplayer.cpp:78
+msgid "MpegPlayer::1:1"
+msgstr "1:1"
+
+#: mpegplayer.cpp:62
+msgid "MpegPlayer::Fullscreen"
+msgstr "フルスクリーン"
+
+#: mpegplayer.cpp:92
+msgid "MpegPlayer::Loop"
+msgstr "繰り返し"
+
+#: mpegplayer.cpp:132
+msgid "MpegPlayer::MPEG Player"
+msgstr "MPEGプレイヤー"
+
+#: mpegplayer.cpp:73
+msgid "MpegPlayer::Mute"
+msgstr "ミュート"
+
+#: mpegplayer.cpp:58
+msgid "MpegPlayer::Open"
+msgstr "開く"
+
+#: mpegplayer.cpp:84
+msgid "MpegPlayer::Play"
+msgstr "再生"
+
+#: mpegplayer.cpp:88
+msgid "MpegPlayer::Stop"
+msgstr "停止"
+
diff --git a/i18n/ja/mpegplayer.qm b/i18n/ja/mpegplayer.qm
new file mode 100644
index 0000000..233132b
--- a/dev/null
+++ b/i18n/ja/mpegplayer.qm
Binary files differ
diff --git a/i18n/ja/parashoot.po b/i18n/ja/parashoot.po
new file mode 100644
index 0000000..f911f27
--- a/dev/null
+++ b/i18n/ja/parashoot.po
@@ -0,0 +1,55 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 17:39:35 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: interface.cpp:128
+msgid "ParaShoot::"
+" GAME OVER!\n"
+" Your Score: %1\n"
+" Parachuters Killed: %2 "
+msgstr ""
+" GAME OVER!\n"
+" スコア: %1\n"
+" 抹殺数: %2 "
+
+
+#: interface.cpp:74
+msgid "ParaShoot:: Level: %1 Score: %2 "
+msgstr " レベル: %1 スコア: %2 "
+
+#: interface.cpp:37
+msgid "ParaShoot::How To Play"
+msgstr "遊び方"
+
+#: interface.cpp:33
+msgid "ParaShoot::New Game"
+msgstr "新しいゲーム"
+
+#: interface.cpp:30
+msgid "ParaShoot::ParaShoot"
+msgstr "ParaShoot"
+
+#: interface.cpp:41
+msgid "ParaShoot::Quit"
+msgstr "終了"
+
+#: interface.cpp:233
+msgid "ParaShoot::"
+"You must defend your base\nfrom attack by suicide bombers!\n"
+"Use the arrow keys to aim\nthe cannon and press space to\n"
+"shoot the bombers parachuting\ntowards your base.\n"
+"Three successful attacks\nwill destroy the base completely.\n"
+"Beware of those suicide\nbombers travelling in helicopters!!"
+msgstr "基地を降下兵から守れ!\n"
+"カーソルで高射砲を操作してスペースで発射。\n"
+"3回も攻撃を受けると基地が破壊されてしまう\n"
+"のでヘリに注意!"
+
diff --git a/i18n/ja/parashoot.qm b/i18n/ja/parashoot.qm
new file mode 100644
index 0000000..b04856f
--- a/dev/null
+++ b/i18n/ja/parashoot.qm
Binary files differ
diff --git a/i18n/ja/qpe.po b/i18n/ja/qpe.po
new file mode 100644
index 0000000..2aa83c5
--- a/dev/null
+++ b/i18n/ja/qpe.po
@@ -0,0 +1,97 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-15 12:29:55 EST\n"
+"PO-Revision-Date: 2001-05-15\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: inputmethods.cpp:238
+msgid "InputMethods::Handwriting"
+msgstr "手書き"
+
+#: inputmethods.cpp:243
+msgid "InputMethods::Keyboard"
+msgstr "キーボード"
+
+#: inputmethods.cpp:245
+msgid "InputMethods::Opti"
+msgstr ""
+
+#: inputmethods.cpp:241
+msgid "InputMethods::Pickboard"
+msgstr ""
+
+#: inputmethods.cpp:248
+msgid "InputMethods::Unicode"
+msgstr ""
+
+#: ../launcher/launcher.cpp:181
+msgid "Launcher:: - Launcher"
+msgstr " - ランチャー"
+
+# #: ../launcher/launcher.cpp:243
+# msgid "Launcher::All"
+# msgstr "全部"
+
+#: ../launcher/launcher.cpp:161
+msgid "Launcher::Launcher"
+msgstr "ランチャー"
+
+#: launcherclock.cpp:31
+msgid "LauncherClock::City Time"
+msgstr "世界時計"
+
+#: launcherclock.cpp:32
+msgid "LauncherClock::Set time"
+msgstr "時計を設定"
+
+#: ../inputmethods/qimpensetup.cpp:31
+msgid "QIMPenSetup::Setup pen input"
+msgstr "適応させる"
+
+#: shutdown.cpp:246
+msgid "Shutdown::<p>\nThese termination options are provided primarily for use while developing and testing the QPE system. In a normal environment, these concepts are unnecessary."
+msgstr "<p>\nこのシャットダウンオプションは開発者向けのQPEの機能です。一般の環境では必要ありません。"
+
+
+#: shutdown.cpp:252
+msgid "Shutdown::Cancel"
+msgstr "取り消し"
+
+#: shutdown.cpp:89
+msgid "Shutdown::Reboot"
+msgstr "再起動"
+
+#: shutdown.cpp:141
+msgid "Shutdown::Restart Server"
+msgstr "サーバを再起動"
+
+#: shutdown.cpp:19
+msgid "Shutdown::Shut down..."
+msgstr "シャットダウン..."
+
+#: shutdown.cpp:193
+msgid "Shutdown::Shutdown"
+msgstr "シャットダウン"
+
+#: shutdown.cpp:35
+msgid "Shutdown::Terminate Server"
+msgstr "サーバを終了"
+
+#: shutdown.cpp:25
+msgid "Shutdown::Terminate"
+msgstr "終了"
+
+#: volume.cpp:29
+msgid "VolumeApplet::Mute"
+msgstr "ミュート"
+
+#: volume.cpp:43
+msgid "VolumeApplet::Volume"
+msgstr "音量"
+
diff --git a/i18n/ja/qpe.qm b/i18n/ja/qpe.qm
new file mode 100644
index 0000000..1d66095
--- a/dev/null
+++ b/i18n/ja/qpe.qm
Binary files differ
diff --git a/i18n/ja/settings.po b/i18n/ja/settings.po
new file mode 100644
index 0000000..a4b1183
--- a/dev/null
+++ b/i18n/ja/settings.po
@@ -0,0 +1,245 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:19:34 EST\n"
+"PO-Revision-Date: 2001-03-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: appearancesettingsbase.cpp:19
+msgid "AppearanceSettingsBase::Appearance"
+msgstr "見た目"
+
+#: appearancesettingsbase.cpp:34
+msgid "AppearanceSettingsBase::Color Scheme:"
+msgstr "色"
+
+#: appearancesettingsbase.cpp:29
+msgid "AppearanceSettingsBase::QPE"
+msgstr "QPE"
+
+#: appearancesettingsbase.cpp:25
+msgid "AppearanceSettingsBase::Style:"
+msgstr "スタイル"
+
+#: appearancesettingsbase.cpp:30
+msgid "AppearanceSettingsBase::Windows"
+msgstr "窓"
+
+#: languagesettingsbase.cpp:27
+msgid "LanguageSettingsBase::"
+msgstr ""
+
+#: languagesettingsbase.cpp:37
+msgid "LanguageSettingsBase::English"
+msgstr "英語"
+
+#: languagesettingsbase.cpp:44
+msgid "LanguageSettingsBase::German"
+msgstr "ドイツ語"
+
+#: languagesettingsbase.cpp:62
+msgid "LanguageSettingsBase::Japanese"
+msgstr "日本語"
+
+#: languagesettingsbase.cpp:68
+msgid "LanguageSettingsBase::Korean"
+msgstr "韓国語"
+
+#: languagesettingsbase.cpp:19
+msgid "LanguageSettingsBase::Language"
+msgstr "言語"
+
+#: languagesettingsbase.cpp:74
+msgid "LanguageSettingsBase::Norwegian"
+msgstr "ノルウェー語"
+
+#: languagesettingsbase.cpp:50
+msgid "LanguageSettingsBase::Simplified Chinese"
+msgstr "簡易中国語"
+
+#: languagesettingsbase.cpp:56
+msgid "LanguageSettingsBase::Traditional Chinese"
+msgstr "伝統的中国語"
+
+#: lightsettingsbase.cpp:122
+msgid "LightSettingsBase::<blockquote>The brighter the backlight, the more battery power is used.</blockquote>"
+msgstr "<p>バックライトが明るければ明るいほど消費電力が増えます</p>"
+
+#: lightsettingsbase.cpp:78
+msgid "LightSettingsBase::Adjust to environment"
+msgstr "周辺環境に合わせる"
+
+#: lightsettingsbase.cpp:114
+msgid "LightSettingsBase::Bright"
+msgstr "明るく"
+
+#: lightsettingsbase.cpp:79
+msgid "LightSettingsBase::By sensing the ambient light where you are using your device, the backlight can be adjusted automatically. The brightness setting still affects the average brightness."
+msgstr "周辺の間接光によりバックライトの自動調節が出来ますが、明るさの設定は基準の明るさに影響します。"
+
+#: lightsettingsbase.cpp:83
+msgid "LightSettingsBase::Dim after some inactivity"
+msgstr "入力のない時は暗くする"
+
+#: lightsettingsbase.cpp:72
+msgid "LightSettingsBase::Light Settings"
+msgstr "明度設定"
+
+#: lightsettingsbase.cpp:135
+msgid "LightSettingsBase::Off"
+msgstr "オフ"
+
+#: rotationsettingsbase.cpp:216
+msgid "RotationSettingsBase::"
+msgstr ""
+
+#: rotationsettingsbase.cpp:223
+msgid "RotationSettingsBase::<p>The chosen rotation will only affect new applications."
+msgstr "<p>注: 回転は新しく起動するプログラムにのみ適用されます。<p>"
+
+#: rotationsettingsbase.cpp:175
+msgid "RotationSettingsBase::Rotation Settings"
+msgstr "画面の回転"
+
+#: settime.cpp:28
+msgid "SetDateTime::Set System Time"
+msgstr "時計の設定"
+
+#: settime.cpp:34
+msgid "SetDateTime::Time Zone"
+msgstr "タイムゾーン"
+
+#: settime.cpp:94
+msgid "SetTime::Hour"
+msgstr "時"
+
+#: settime.cpp:105
+msgid "SetTime::Minute"
+msgstr "分"
+
+#: settingsbase.cpp:496
+msgid "SettingsBase::"
+msgstr ""
+
+#: settingsbase.cpp:333
+msgid "SettingsBase::<blockquote>The brighter the backlight, the more battery power is used.</blockquote>"
+msgstr "<p>バックライトが明るければ明るいほど消費電力が増えます</p>"
+
+#: settingsbase.cpp:462
+msgid "SettingsBase::<p>The chosen rotation will only affect new applications."
+msgstr "<p>注: 回転は新しく起動するプログラムにのみ適用されます。<p>"
+
+#: settingsbase.cpp:361
+msgid "SettingsBase::Adjust to environment"
+msgstr "周辺環境に合わせる"
+
+#: settingsbase.cpp:325
+msgid "SettingsBase::Bright"
+msgstr "明るく"
+
+#: settingsbase.cpp:290
+msgid "SettingsBase::By sensing the ambient light where you are using your device, the backlight can be adjusted automatically. The brightness setting still affects the average brightness."
+msgstr "周辺の間接光によりバックライトの自動調節が出来ますが、明るさの設定は基準
+の明るさに影響します。"
+
+#: settingsbase.cpp:362
+msgid "SettingsBase::By sensing the ambient noise where you are using your device, the volume is adjusted automatically. The volume setting still affects the average volume."
+msgstr "ボリュームはセンサーによって自動的に周辺の音量に併せて調節されます。ボリュームの設定は平均的な音量に影響します。"
+
+#: settingsbase.cpp:482
+msgid "SettingsBase::Color Scheme:"
+msgstr "色"
+
+#: settingsbase.cpp:294
+msgid "SettingsBase::Dim after some inactivity"
+msgstr "入力のない時は暗くする"
+
+#: settingsbase.cpp:506
+msgid "SettingsBase::English"
+msgstr "英語"
+
+#: settingsbase.cpp:525
+msgid "SettingsBase::Japanese"
+msgstr "日本語"
+
+#: settingsbase.cpp:528
+msgid "SettingsBase::Language"
+msgstr "言語"
+
+#: settingsbase.cpp:353
+msgid "SettingsBase::Light"
+msgstr "明度"
+
+#: settingsbase.cpp:388
+msgid "SettingsBase::Loud"
+msgstr "大きく"
+
+#: settingsbase.cpp:346
+msgid "SettingsBase::Off"
+msgstr "オフ"
+
+#: settingsbase.cpp:477
+msgid "SettingsBase::QPE"
+msgstr "QPE"
+
+#: settingsbase.cpp:465
+msgid "SettingsBase::Rotation"
+msgstr "回転"
+
+#: settingsbase.cpp:275
+msgid "SettingsBase::Settings"
+msgstr "設定"
+
+#: settingsbase.cpp:406
+msgid "SettingsBase::Silent"
+msgstr "静かに"
+
+#: settingsbase.cpp:513
+msgid "SettingsBase::Simplified Chinese"
+msgstr "簡易中国語"
+
+#: settingsbase.cpp:413
+msgid "SettingsBase::Sound"
+msgstr "サウンド"
+
+#: settingsbase.cpp:487
+msgid "SettingsBase::Style"
+msgstr "スタイル"
+
+#: settingsbase.cpp:473
+msgid "SettingsBase::Style:"
+msgstr "スタイル:"
+
+#: settingsbase.cpp:519
+msgid "SettingsBase::Traditional Chinese"
+msgstr "伝統的中国語"
+
+#: settingsbase.cpp:478
+msgid "SettingsBase::Windows"
+msgstr "窓"
+
+#: soundsettingsbase.cpp:75
+msgid "SoundSettingsBase::Adjust to environment"
+msgstr "周辺環境に合わせる"
+
+#: soundsettingsbase.cpp:76
+msgid "SoundSettingsBase::By sensing the ambient noise where you are using your device, the volume is adjusted automatically. The volume setting still affects the average volume."
+msgstr "ボリュームはセンサーによって自動的に周辺の音量に併せて調節されます。ボリュームの設定は平均的な音量に影響します。"
+
+#: soundsettingsbase.cpp:103
+msgid "SoundSettingsBase::Loud"
+msgstr "大きく"
+
+#: soundsettingsbase.cpp:121
+msgid "SoundSettingsBase::Silent"
+msgstr "小さく"
+
+#: soundsettingsbase.cpp:69
+msgid "SoundSettingsBase::Sound Settings"
+msgstr "サウンド設定"
+
diff --git a/i18n/ja/settings.qm b/i18n/ja/settings.qm
new file mode 100644
index 0000000..22cd015
--- a/dev/null
+++ b/i18n/ja/settings.qm
Binary files differ
diff --git a/i18n/ja/snake.po b/i18n/ja/snake.po
new file mode 100644
index 0000000..fff41d0
--- a/dev/null
+++ b/i18n/ja/snake.po
@@ -0,0 +1,74 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 17:48:11 EST\n"
+"PO-Revision-Date: 2001-03-14"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: interface.cpp:127
+msgid "SnakeGame:: Score : %1 "
+msgstr " スコア: %1 "
+
+#: interface.cpp:175
+msgid "SnakeGame::GAME OVER!\n Your Score: %1"
+msgstr "GAME OVER!\n スコア: %1""
+
+#: interface.cpp:37
+msgid "SnakeGame::How To Play"
+msgstr "遊び方"
+
+#: interface.cpp:217
+msgid "SnakeGame::How to Play Snake"
+msgstr "Snakeの遊び方"
+
+#: interface.cpp:33
+msgid "SnakeGame::New Game"
+msgstr "新しいゲーム"
+
+#: interface.cpp:91
+msgid "SnakeGame::Press Any Key To Start"
+msgstr "ゲーム開始:キー\n"
+"を押してください。"
+
+#: interface.cpp:192
+msgid "SnakeGame::Press Any Key to Begin a New Game."
+msgstr "新しいゲーム:キー\n"
+"を押してください。"
+
+#: interface.cpp:41
+msgid "SnakeGame::Quit"
+msgstr "終了"
+
+#: interface.cpp:73
+msgid "SnakeGame::SNAKE!"
+msgstr "SNAKE!"
+
+#: interface.cpp:83
+msgid "SnakeGame::"
+"Use the arrow keys to guide the\n"
+"snake to eat the mouse. You must not\n"
+"crash into the walls, edges or its tail."
+msgstr
+"カーソルキーでヘビを操作して\n"
+"ネズミを捕まえてください。た\n"
+"だし、壁や自分の尻尾に引っか\n"
+"からないように。"
+
+#: interface.cpp:218
+msgid "SnakeGame::"
+"Use the arrow keys\nto guide the snake\n"
+"to eat the mouse.\nYou must not crash\ninto the"
+" walls, edges\nor its tail."
+msgstr
+"カーソルキーでヘビを\n"
+"操作してネズミを捕ま\n"
+"えてください。ただし、\n"
+"壁や自分の尻尾に引っ\n"
+"かからないように。"
+
+
diff --git a/i18n/ja/snake.qm b/i18n/ja/snake.qm
new file mode 100644
index 0000000..6461be0
--- a/dev/null
+++ b/i18n/ja/snake.qm
Binary files differ
diff --git a/i18n/ja/solitaire.po b/i18n/ja/solitaire.po
new file mode 100644
index 0000000..2c42077
--- a/dev/null
+++ b/i18n/ja/solitaire.po
@@ -0,0 +1,192 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:08:21 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: solitaire.cpp:775
+msgid "CanvasCardWindow::&About"
+msgstr "ソリティアについて (&A)"
+
+#: solitaire.cpp:768
+msgid "CanvasCardWindow::&Change Card Backs"
+msgstr "カードの背景変更 (&C)"
+
+#: solitaire.cpp:762
+msgid "CanvasCardWindow::&Close"
+msgstr "閉じる (&C)"
+
+#: solitaire.cpp:763
+msgid "CanvasCardWindow::&File"
+msgstr "ファイル (&F)"
+
+#: solitaire.cpp:777
+msgid "CanvasCardWindow::&Help"
+msgstr "ヘルプ (&H)"
+
+#: solitaire.cpp:760
+msgid "CanvasCardWindow::&New Game of Freecell"
+msgstr "新しいフリーセル"
+
+#: solitaire.cpp:759
+msgid "CanvasCardWindow::&New Game of Solitaire"
+msgstr "新しいソリティア"
+
+# #: solitaire.cpp:760
+# msgid "CanvasCardWindow::&New Game of Freecell"
+# msgstr "Neues Freecell-Spiel"
+
+#: solitaire.cpp:770
+msgid "CanvasCardWindow::&Settings"
+msgstr "設定 (&S)"
+
+#: solitaire.cpp:769
+msgid "CanvasCardWindow::&Snap On/Off"
+msgstr "磁石 オン/オフ (&S)"
+
+#: solitaire.cpp:829
+msgid "CanvasCardWindow::"
+"<h3>About Qt Card Games</h3>"
+"<p>"
+"These games were implemented<br>easily using Qt.<br>"
+"The canvas widget was used<br> as the basis"
+"on which<br>the playing area is drawn.<br>"
+"Each card is an object on the canvas,<br>as "
+"are the decorations.<br>All the animation is "
+"done by Qt."
+"<p>"
+msgstr "<h3>Qtカードゲームについて</h3>"
+"<p>"
+"これらのゲームはQtを使って簡単に<br>実装されました。<br>"
+"キャンバスウィジェットがゲーム<br>エリアのベースになって"
+"ます。<br>それぞれのカードはキャンバス上の<br>"
+"オブジェクトで、装飾もそうです。<br>すべてのアニメーション<br>"
+"はQtが行ってます。"
+"</p>"
+
+#: solitaire.cpp:864
+msgid "CanvasCardWindow::"
+"<h3>Freecell</h3>"
+"<p>"
+"The object of the game is to stack all the<br>"
+"cards on the top right 4 piles from the Aces<br>"
+"to the Kings in suit. The rules are that<br>"
+"you can only move red cards of the next<br>"
+"lowest values on top of black cards, or<br>"
+"or black ones on to red ones in order.<br>"
+"You can move any card to the remaining<br>"
+"vacant freecells to help you move the cards."
+"<p>Good luck and enjoy playing Freecell!"
+"<p>"
+msgstr "<h3>Freecell</h3>"
+"<p>"
+"Ziel des Spiels ist es, alle Karten auf den vier<br>"
+"rechten Stapeln in der Reihenfolge Ass bis K?g<br>"
+"abzulegen. Dabei gelten folgende Regeln:<br>"
+"Auf schwarzen Karten d?en nur rote Karten mit<br>"
+"dem n?stniedrigeren Wert abgelegt werden und umgekehrt.<br>"
+"Auf freien Feldern k?en beliebige Karten<br>"
+"zwischengelagert werden.<br>"
+"<p>Viel Spa?mit Freecell!"
+"<p>"
+
+#: solitaire.cpp:850
+msgid "CanvasCardWindow::"
+"<h3>Solitaire</h3>"
+"<p>"
+"The object of the game is to stack all the<br>"
+"cards on the top piles from the Aces to<br>"
+"the Kings in suit. The rules are that you<br>"
+"can only move a red card of the next lowest<br>"
+"values on top of black cards in the lower<br>"
+"playing area, or a black on a red in order.<br>"
+"You can get new cards from the face down<br>"
+"stack to help you move the cards."
+"<p>Good luck and enjoy playing Solitaire!"
+"<p>"
+msgstr "<h3>Solitaire</h3>"
+"<p>"
+"Ziel des Spiels ist es, alle Karten vom Ass bis<br>"
+"zum K?g in der passenden Reihenfolge abzulegen.<br>"
+"Dabei gelten folgende Regeln:<br>"
+"Nur rote Karten mit dem n?stniedrigeren Wert<br>"
+"k?en auf schwarze Karten folgen und umgekehrt.<br>"
+"Neue Karten, die -- hoffentlich -- die L?en schlie?n,<br>"
+"ziehen Sie vom umgedrehten Stapel.<br>"
+"<p>Viel Spa?mit Solitaire!"
+"<p>"
+
+#: solitaire.cpp:799
+msgid "CanvasCardWindow::About"
+msgstr "このプログラムについて"
+
+#: solitaire.cpp:791
+msgid "CanvasCardWindow::Change Card Backs"
+msgstr "カードの背景を変更"
+
+#: solitaire.cpp:793
+msgid "CanvasCardWindow::Change Cards Drawn"
+msgstr "一度に引くカードの枚数"
+
+#: solitaire.cpp:785
+msgid "CanvasCardWindow::Close"
+msgstr "閉じる"
+
+#: solitaire.cpp:881
+msgid "CanvasCardWindow::Dismiss"
+msgstr "取り消し"
+
+#: solitaire.cpp:786
+msgid "CanvasCardWindow::File"
+msgstr "ファイル"
+
+#: solitaire.cpp:691
+msgid "CanvasCardWindow::Freecell"
+msgstr "フリーセル"
+
+#: solitaire.cpp:802
+msgid "CanvasCardWindow::Help"
+msgstr "ヘルプ"
+
+#: solitaire.cpp:783
+msgid "CanvasCardWindow::New Game of Freecell"
+msgstr "新しいフリーセル"
+
+#: solitaire.cpp:782
+msgid "CanvasCardWindow::New Game of Solitaire"
+msgstr "新しいソリティア"
+
+# #: solitaire.cpp:783
+# msgid "CanvasCardWindow::New Game of Freecell"
+# msgstr "Neues Freecell-Spiel"
+
+#: solitaire.cpp:828
+msgid "CanvasCardWindow::Qt Card Game Example"
+msgstr "Qtカードゲーム例"
+
+#: solitaire.cpp:863
+msgid "CanvasCardWindow::Qt Freecell"
+msgstr "Qt フリーセル"
+
+#: solitaire.cpp:889
+msgid "CanvasCardWindow::Qt Solitaire"
+msgstr "Qt ソリティア"
+
+#: solitaire.cpp:794
+msgid "CanvasCardWindow::Settings"
+msgstr "設定"
+
+#: solitaire.cpp:792
+msgid "CanvasCardWindow::Snap On/Off"
+msgstr "磁石 オン/オフ"
+
+#: solitaire.cpp:677
+msgid "CanvasCardWindow::Solitaire"
+msgstr "ソリティア"
+
diff --git a/i18n/ja/solitaire.qm b/i18n/ja/solitaire.qm
new file mode 100644
index 0000000..dbaf66d
--- a/dev/null
+++ b/i18n/ja/solitaire.qm
Binary files differ
diff --git a/i18n/ja/spreadsheet.po b/i18n/ja/spreadsheet.po
new file mode 100644
index 0000000..a6d1774
--- a/dev/null
+++ b/i18n/ja/spreadsheet.po
@@ -0,0 +1,48 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:35:15 EST\n"
+"PO-Revision-Date: 2001-03-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: pimspreadsheetwindow.cpp:61
+msgid "PIMSpreadsheetWindow::Edit"
+msgstr "編集 "
+
+#: pimspreadsheetwindow.cpp:60
+msgid "PIMSpreadsheetWindow::File"
+msgstr "ファイル"
+
+#: pimspreadsheetwindow.cpp:55
+msgid "PIMSpreadsheetWindow::Clear Cell"
+msgstr "セルをクリア"
+
+#: pimspreadsheetwindow.cpp:46
+msgid "PIMSpreadsheetWindow::Close"
+msgstr "閉じる"
+
+#: pimspreadsheetwindow.cpp:50
+msgid "PIMSpreadsheetWindow::Equation"
+msgstr "数式"
+
+#: pimspreadsheetwindow.cpp:38
+msgid "PIMSpreadsheetWindow::New"
+msgstr "新規"
+
+#: pimspreadsheetwindow.cpp:42
+msgid "PIMSpreadsheetWindow::Open"
+msgstr "開く"
+
+#: pimspreadsheetwindow.cpp:19
+msgid "PIMSpreadsheetWindow::Spreadsheet"
+msgstr "表計算"
+
+#: spreadsheetwidget.cpp:19
+msgid "SpreadsheetWidget::SpreadsheetWidget"
+msgstr "表計算ウィジェット"
+
diff --git a/i18n/ja/spreadsheet.qm b/i18n/ja/spreadsheet.qm
new file mode 100644
index 0000000..adeb785
--- a/dev/null
+++ b/i18n/ja/spreadsheet.qm
Binary files differ
diff --git a/i18n/ja/tetrix.po b/i18n/ja/tetrix.po
new file mode 100644
index 0000000..22f9cd7
--- a/dev/null
+++ b/i18n/ja/tetrix.po
@@ -0,0 +1,36 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:01:54 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: qtetrix.cpp:100
+msgid "QTetrix::Level"
+msgstr "レベル"
+
+#: qtetrix.cpp:91
+msgid "QTetrix::Next"
+msgstr "続行"
+
+#: qtetrix.cpp:104
+msgid "QTetrix::Removed"
+msgstr "削除数"
+
+#: qtetrix.cpp:96
+msgid "QTetrix::Score"
+msgstr "得点"
+
+#: qtetrix.cpp:116
+msgid "QTetrix::Start"
+msgstr "開始"
+
+#: qtetrix.cpp:79
+msgid "QTetrix::Tetrix"
+msgstr "テトリックス"
+
diff --git a/i18n/ja/tetrix.qm b/i18n/ja/tetrix.qm
new file mode 100644
index 0000000..8d2e829
--- a/dev/null
+++ b/i18n/ja/tetrix.qm
Binary files differ
diff --git a/i18n/ja/textedit.po b/i18n/ja/textedit.po
new file mode 100644
index 0000000..45c5e19
--- a/dev/null
+++ b/i18n/ja/textedit.po
@@ -0,0 +1,108 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-02-23 18:22:10 EST\n"
+"PO-Revision-Date: 2001-05-03\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: textedit.cpp:110
+msgid "TextEdit::Edit"
+msgstr "編集"
+
+#: textedit.cpp:109
+msgid "TextEdit::File"
+msgstr "ファイル"
+
+#: textedit.cpp:102
+msgid "TextEdit::Insert"
+msgstr "挿入"
+
+#: textedit.cpp:115
+msgid "TextEdit::Bold"
+msgstr "太字"
+
+#: textedit.cpp:191
+msgid "TextEdit::Bullet List"
+msgstr "リスト"
+
+#: textedit.cpp:140
+msgid "TextEdit::Center"
+msgstr "中央寄せ"
+
+#: textedit.cpp:170
+msgid "TextEdit::Close Find"
+msgstr "検索を閉じる"
+
+#: textedit.cpp:69
+msgid "TextEdit::Close"
+msgstr "閉じる"
+
+#: textedit.cpp:79
+msgid "TextEdit::Copy"
+msgstr "コピー"
+
+#: textedit.cpp:74
+msgid "TextEdit::Cut"
+msgstr "切り取り"
+
+#: textedit.cpp:194
+msgid "TextEdit::Enumerated List"
+msgstr "リスト"
+
+#: textedit.cpp:94
+msgid "TextEdit::Find Next"
+msgstr "次を検索"
+
+#: textedit.cpp:89
+msgid "TextEdit::Find..."
+msgstr "検索..."
+
+#: textedit.cpp:120
+msgid "TextEdit::Italic"
+msgstr "斜体"
+
+#: textedit.cpp:134
+msgid "TextEdit::Left"
+msgstr "左寄せ"
+
+#: textedit.cpp:61
+msgid "TextEdit::New"
+msgstr "新規作成"
+
+#: textedit.cpp:65
+msgid "TextEdit::Open"
+msgstr "開く"
+
+#: textedit.cpp:84
+msgid "TextEdit::Paste"
+msgstr "張り付け"
+
+#: textedit.cpp:145
+msgid "TextEdit::Right"
+msgstr "右寄せ"
+
+#: textedit.cpp:188
+msgid "TextEdit::Standard"
+msgstr "標準"
+
+#: textedit.cpp:104
+msgid "TextEdit::Table..."
+msgstr "表..."
+
+#: textedit.cpp:570
+msgid "TextEdit::Text Editor"
+msgstr "テキストエディタ"
+
+#: textedit.cpp:125
+msgid "TextEdit::Underline"
+msgstr "下線"
+
+#: textedit.cpp:569
+msgid "TextEdit::Unnamed"
+msgstr "名前無し"
+
diff --git a/i18n/ja/textedit.qm b/i18n/ja/textedit.qm
new file mode 100644
index 0000000..8c83ef3
--- a/dev/null
+++ b/i18n/ja/textedit.qm
Binary files differ
diff --git a/i18n/ja/todo.po b/i18n/ja/todo.po
new file mode 100644
index 0000000..87c10d3
--- a/dev/null
+++ b/i18n/ja/todo.po
@@ -0,0 +1,148 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:58:06 EST\n"
+"PO-Revision-Date: 2001-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: todoentry.cpp:63
+msgid "NewTaskDialogBase::&Description:"
+msgstr "種類 (&D)"
+
+#: todoentry.cpp:86
+msgid "NewTaskDialogBase::&Done"
+msgstr "完了 (&D)"
+
+#: todoentry.cpp:40
+msgid "NewTaskDialogBase::&Priority:"
+msgstr "優先度 (&P)"
+
+#: todoentry.cpp:45
+msgid "NewTaskDialogBase::1 - Very High"
+msgstr "1 - 再優先"
+
+#: todoentry.cpp:46
+msgid "NewTaskDialogBase::2 - High"
+msgstr "2 - 高い"
+
+#: todoentry.cpp:47
+msgid "NewTaskDialogBase::3 - Normal"
+msgstr "3 - 普通"
+
+#: todoentry.cpp:48
+msgid "NewTaskDialogBase::4 - Low"
+msgstr "4 - 低い"
+
+#: todoentry.cpp:49
+msgid "NewTaskDialogBase::5 - Very Low"
+msgstr "5 - 最低"
+
+#: todoentry.cpp:68
+msgid "NewTaskDialogBase::<Nothing>"
+msgstr "<未分類>"
+
+#: todoentry.cpp:57
+msgid "NewTaskDialogBase::Business"
+msgstr "ビジネス"
+
+#: todoentry.cpp:35
+msgid "NewTaskDialogBase::C&ategory:"
+msgstr "カテゴリ(&a)"
+
+#: todoentry.cpp:90
+msgid "NewTaskDialogBase::D&ue"
+msgstr "期限 (&u)"
+
+#: todoentry.cpp:71
+msgid "NewTaskDialogBase::Dinner"
+msgstr "夕食"
+
+#: todoentry.cpp:119
+msgid "NewTaskDialogBase::Image"
+msgstr "画像"
+
+#: todoentry.cpp:94
+msgid "NewTaskDialogBase::Jan 02 2000"
+msgstr "2000年1月2日"
+
+#: todoentry.cpp:70
+msgid "NewTaskDialogBase::Lunch"
+msgstr "昼食"
+
+#: todoentry.cpp:69
+msgid "NewTaskDialogBase::Meeting"
+msgstr "会議"
+
+#: todoentry.cpp:25
+msgid "NewTaskDialogBase::New Task"
+msgstr "新規"
+
+#: todoentry.cpp:56
+msgid "NewTaskDialogBase::Private"
+msgstr "プライベート"
+
+#: todoentry.cpp:110
+msgid "NewTaskDialogBase::Text"
+msgstr "テキスト"
+
+#: todoentry.cpp:72
+msgid "NewTaskDialogBase::Travel"
+msgstr "旅行"
+
+#: todotable.cpp:124
+msgid "TodoTable::C."
+msgstr "了"
+
+#: todotable.cpp:126
+msgid "TodoTable::Description"
+msgstr "種類"
+
+#: todotable.cpp:125
+msgid "TodoTable::Prior."
+msgstr "優先度"
+
+#: mainwindow.cpp:140
+msgid "TodoWindow::<Nothing>"
+msgstr "<未分類>"
+
+#: mainwindow.cpp:47
+msgid "TodoWindow::Close"
+msgstr "閉じる"
+
+#: mainwindow.cpp:57
+msgid "TodoWindow::Delete"
+msgstr "削除"
+
+#: mainwindow.cpp:125
+msgid "TodoWindow::Edit Task"
+msgstr "編集"
+
+#: mainwindow.cpp:49
+msgid "TodoWindow::Edit"
+msgstr "編集"
+
+#: mainwindow.cpp:65
+msgid "TodoWindow::File"
+msgstr "ファイル"
+
+#: mainwindow.cpp:41
+msgid "TodoWindow::New Task"
+msgstr "進化"
+
+#: mainwindow.cpp:66
+msgid "TodoWindow::Task"
+msgstr "タスク"
+
+#: mainwindow.cpp:141
+msgid "TodoWindow::Todo"
+msgstr "ToDo"
+
+#: mainwindow.cpp:141
+msgid "TodoWindow::You haven't entered a description!"
+msgstr "説明が入力されていません。"
+
diff --git a/i18n/ja/todo.qm b/i18n/ja/todo.qm
new file mode 100644
index 0000000..0722fd9
--- a/dev/null
+++ b/i18n/ja/todo.qm
Binary files differ
diff --git a/i18n/ja/wordgame.po b/i18n/ja/wordgame.po
new file mode 100644
index 0000000..b79c0fa
--- a/dev/null
+++ b/i18n/ja/wordgame.po
@@ -0,0 +1,89 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 18:31:18 EST\n"
+"PO-Revision-Date: 2000-05-14\n"
+"Last-Translator: Oliver M. Bolzer <oliver@gol.com>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: newgamebase.cpp:66
+msgid "NewGameBase::"
+msgstr ""
+
+#: newgamebase.cpp:102
+msgid "NewGameBase::&Cancel"
+msgstr "キャンセル (&C)"
+
+#: newgamebase.cpp:96
+msgid "NewGameBase::&OK"
+msgstr "&OK"
+
+#: newgamebase.cpp:67
+msgid "NewGameBase::AI3: Smart AI player"
+msgstr "AI3: 人工知能"
+
+#: newgamebase.cpp:19
+msgid "NewGameBase::New Game"
+msgstr "新しいゲーム"
+
+#: newgamebase.cpp:26
+msgid "NewGameBase::Players"
+msgstr "プレイヤー"
+
+#: newgamebase.cpp:73
+msgid "NewGameBase::Rules"
+msgstr "ルール"
+
+#: rulesbase.cpp:93
+msgid "RulesBase::&Cancel"
+msgstr "閉じる(&C)"
+
+#: rulesbase.cpp:87
+msgid "RulesBase::&OK"
+msgstr "&OK"
+
+#: rulesbase.cpp:41
+msgid "RulesBase::Board"
+msgstr "フィールド"
+
+#: rulesbase.cpp:80
+msgid "RulesBase::Delete"
+msgstr "削除"
+
+#: rulesbase.cpp:68
+msgid "RulesBase::Edit..."
+msgstr "編集..."
+
+#: rulesbase.cpp:22
+msgid "RulesBase::Game Rules"
+msgstr "ルール"
+
+#: rulesbase.cpp:33
+msgid "RulesBase::Name:"
+msgstr "名前:"
+
+#: rulesbase.cpp:52
+msgid "RulesBase::Size:"
+msgstr "サイズ:"
+
+#: wordgame.cpp:336
+msgid "WordGame::Do you want to end the game early?"
+msgstr "ゲームを終らせな\n"
+"いで終了しますか?"
+
+#: wordgame.cpp:335
+msgid "WordGame::End game"
+msgstr "ゲーム終了"
+
+#: wordgame.cpp:337
+msgid "WordGame::No"
+msgstr "いいえ"
+
+#: wordgame.cpp:337
+msgid "WordGame::Yes"
+msgstr "はい"
+
diff --git a/i18n/ja/wordgame.qm b/i18n/ja/wordgame.qm
new file mode 100644
index 0000000..95f61da
--- a/dev/null
+++ b/i18n/ja/wordgame.qm
Binary files differ
diff --git a/i18n/ko/.directory b/i18n/ko/.directory
new file mode 100644
index 0000000..c701841
--- a/dev/null
+++ b/i18n/ko/.directory
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=Korean
+Name[no]=Koreansk
+Name[de]=Koreanisch
+Name[ja]=韓国語
+Name[ko]=한국어
+Name[hu]=Koreai
diff --git a/i18n/ko/textedit.po b/i18n/ko/textedit.po
new file mode 100644
index 0000000..87f2ba9
--- a/dev/null
+++ b/i18n/ko/textedit.po
@@ -0,0 +1,108 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-02-23 18:22:10 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: textedit.cpp:110
+msgid "TextEdit::Edit"
+msgstr "편집"
+
+#: textedit.cpp:109
+msgid "TextEdit::File"
+msgstr "파일"
+
+#: textedit.cpp:102
+msgid "TextEdit::Insert"
+msgstr "삽입"
+
+#: textedit.cpp:115
+msgid "TextEdit::Bold"
+msgstr ""
+
+#: textedit.cpp:191
+msgid "TextEdit::Bullet List"
+msgstr ""
+
+#: textedit.cpp:140
+msgid "TextEdit::Center"
+msgstr ""
+
+#: textedit.cpp:170
+msgid "TextEdit::Close Find"
+msgstr ""
+
+#: textedit.cpp:69
+msgid "TextEdit::Close"
+msgstr "닫기"
+
+#: textedit.cpp:79
+msgid "TextEdit::Copy"
+msgstr "복사"
+
+#: textedit.cpp:74
+msgid "TextEdit::Cut"
+msgstr "자르기"
+
+#: textedit.cpp:194
+msgid "TextEdit::Enumerated List"
+msgstr ""
+
+#: textedit.cpp:94
+msgid "TextEdit::Find Next"
+msgstr "다음 찾기"
+
+#: textedit.cpp:89
+msgid "TextEdit::Find..."
+msgstr "찾기..."
+
+#: textedit.cpp:120
+msgid "TextEdit::Italic"
+msgstr ""
+
+#: textedit.cpp:134
+msgid "TextEdit::Left"
+msgstr ""
+
+#: textedit.cpp:61
+msgid "TextEdit::New"
+msgstr "새로운"
+
+#: textedit.cpp:65
+msgid "TextEdit::Open"
+msgstr "열기"
+
+#: textedit.cpp:84
+msgid "TextEdit::Paste"
+msgstr "붙여넣기"
+
+#: textedit.cpp:145
+msgid "TextEdit::Right"
+msgstr ""
+
+#: textedit.cpp:188
+msgid "TextEdit::Standard"
+msgstr ""
+
+#: textedit.cpp:104
+msgid "TextEdit::Table..."
+msgstr ""
+
+#: textedit.cpp:570
+msgid "TextEdit::Text Editor"
+msgstr "글월 편집기"
+
+#: textedit.cpp:125
+msgid "TextEdit::Underline"
+msgstr ""
+
+#: textedit.cpp:569
+msgid "TextEdit::Unnamed"
+msgstr "이름없음"
+
diff --git a/i18n/ko/textedit.qm b/i18n/ko/textedit.qm
new file mode 100644
index 0000000..31df6c5
--- a/dev/null
+++ b/i18n/ko/textedit.qm
Binary files differ
diff --git a/i18n/no/.directory b/i18n/no/.directory
new file mode 100644
index 0000000..b305621
--- a/dev/null
+++ b/i18n/no/.directory
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=Norwegian
+Name[no]=Norsk
+Name[ja]=ノルウェー語
+Name[de]=Norwegisch
+Name[hu]=Norvég
diff --git a/i18n/no/addressbook.po b/i18n/no/addressbook.po
new file mode 100644
index 0000000..8cb89c9
--- a/dev/null
+++ b/i18n/no/addressbook.po
@@ -0,0 +1,336 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 12:44:31 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: abeditor.cpp:51
+msgid "AbEditor::< Address, City >"
+msgstr "< Adresse, Poststed >"
+
+#: abeditor.cpp:54
+msgid "AbEditor::< Address, Country >"
+msgstr "< Adresse, Land >"
+
+#: abeditor.cpp:52
+msgid "AbEditor::< Address, State/Province >"
+msgstr "< Adresse, Delstat/Provins >"
+
+#: abeditor.cpp:50
+msgid "AbEditor::< Address, Street >"
+msgstr "< Adresse, Gatenavn >"
+
+#: abeditor.cpp:53
+msgid "AbEditor::< Address, Zip/Postal Code >"
+msgstr "< Adresse, Postnummer >"
+
+#: abeditor.cpp:49
+msgid "AbEditor::< Company >"
+msgstr "< Firma >"
+
+#: abeditor.cpp:48
+msgid "AbEditor::< Department >"
+msgstr "< Avdeling >"
+
+#: abeditor.cpp:46
+msgid "AbEditor::< Full Name >"
+msgstr "< Fullt Navn >"
+
+#: abeditor.cpp:55
+msgid "AbEditor::< Notes >"
+msgstr "< Notater >"
+
+#: abeditor.cpp:47
+msgid "AbEditor::< Title >"
+msgstr "< Tittel >"
+
+#: abeditor.cpp:109
+msgid "AbEditor::Doctor"
+msgstr "Doktor"
+
+#: abeditor.cpp:109
+msgid "AbEditor::Dr"
+msgstr ""
+
+#: abeditor.cpp:109
+msgid "AbEditor::Dr."
+msgstr ""
+
+#: abeditor.cpp:115
+msgid "AbEditor::I"
+msgstr ""
+
+#: abeditor.cpp:115
+msgid "AbEditor::II"
+msgstr ""
+
+#: abeditor.cpp:115
+msgid "AbEditor::IIII"
+msgstr ""
+
+#: abeditor.cpp:116
+msgid "AbEditor::Jr."
+msgstr ""
+
+#: abeditor.cpp:115
+msgid "AbEditor::Junior"
+msgstr ""
+
+#: abeditor.cpp:109
+msgid "AbEditor::Miss"
+msgstr "Frk"
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mr"
+msgstr "Hr"
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mr."
+msgstr ""
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mrs"
+msgstr "Fr"
+
+#: abeditor.cpp:110
+msgid "AbEditor::Mrs."
+msgstr "Fr."
+
+#: abeditor.cpp:111
+msgid "AbEditor::Ms"
+msgstr ""
+
+#: abeditor.cpp:111
+msgid "AbEditor::Ms."
+msgstr ""
+
+#: abeditor.cpp:111
+msgid "AbEditor::Prof."
+msgstr ""
+
+#: abeditor.cpp:111
+msgid "AbEditor::Professor"
+msgstr ""
+
+#: abeditor.cpp:116
+msgid "AbEditor::Senior"
+msgstr ""
+
+#: abeditor.cpp:116
+msgid "AbEditor::Sr."
+msgstr ""
+
+#: abeditor.cpp:107
+msgid "AbEditor::the"
+msgstr ""
+
+#: abeditorbase.cpp:35
+msgid "AbEditorBase::..."
+msgstr ""
+
+#: abeditorbase.cpp:20
+msgid "AbEditorBase::AbEditorBase"
+msgstr ""
+
+#: abeditorbase.cpp:135
+msgid "AbEditorBase::Birthday:"
+msgstr "Fdselsdag:"
+
+#: abeditorbase.cpp:136
+msgid "AbEditorBase::Email:"
+msgstr "Epost:"
+
+#: abeditorbase.cpp:137
+msgid "AbEditorBase::Fax:"
+msgstr ""
+
+#: abeditorbase.cpp:138
+msgid "AbEditorBase::Home Ph:"
+msgstr "Hjemmetlf:"
+
+#: abeditorbase.cpp:139
+msgid "AbEditorBase::Mobile Ph:"
+msgstr "Mobiltlf:"
+
+#: abeditorbase.cpp:140
+msgid "AbEditorBase::Other:"
+msgstr "Annet:"
+
+#: abeditorbase.cpp:141
+msgid "AbEditorBase::Spouse:"
+msgstr "Ektefelle:"
+
+#: abeditorbase.cpp:142
+msgid "AbEditorBase::Web Page:"
+msgstr "Hjemmeside:"
+
+#: abeditorbase.cpp:143
+msgid "AbEditorBase::Work Ph:"
+msgstr "Jobbtlf:"
+
+#: ablabel.cpp:47
+msgid "AbLabel::Birthday"
+msgstr "Fdselsdag"
+
+#: ablabel.cpp:47
+msgid "AbLabel::Email"
+msgstr "Epost"
+
+#: ablabel.cpp:47
+msgid "AbLabel::Fax"
+msgstr ""
+
+#: ablabel.cpp:48
+msgid "AbLabel::Home Ph"
+msgstr "Hjemmetlf."
+
+#: ablabel.cpp:48
+msgid "AbLabel::Mobile Ph"
+msgstr "Mobiltlf."
+
+#: ablabel.cpp:48
+msgid "AbLabel::Other"
+msgstr "Annet"
+
+#: ablabel.cpp:49
+msgid "AbLabel::Spouse"
+msgstr "Ektefelle"
+
+#: ablabel.cpp:49
+msgid "AbLabel::Web Page"
+msgstr "Hjemmeside"
+
+#: ablabel.cpp:49
+msgid "AbLabel::Work Ph"
+msgstr "Jobbtlf"
+
+#: abnamebase.cpp:78
+msgid "AbNameBase::Cancel"
+msgstr "Avbryt"
+
+#: abnamebase.cpp:51
+msgid "AbNameBase::First"
+msgstr "For-"
+
+#: abnamebase.cpp:61
+msgid "AbNameBase::Last"
+msgstr "Etter-"
+
+#: abnamebase.cpp:56
+msgid "AbNameBase::Middle"
+msgstr "Mellom-"
+
+#: abnamebase.cpp:20
+msgid "AbNameBase::Name Details"
+msgstr "Navnedetaljer"
+
+#: abnamebase.cpp:73
+msgid "AbNameBase::OK"
+msgstr "OK"
+
+#: abnamebase.cpp:66
+msgid "AbNameBase::Suffix"
+msgstr "Suffiks"
+
+#: abnamebase.cpp:46
+msgid "AbNameBase::Title"
+msgstr "Tittel"
+
+#: abtable.cpp:57
+msgid "AbTable::Contact"
+msgstr "Kontakt"
+
+#: abtable.cpp:56
+msgid "AbTable::Full Name"
+msgstr "Fullt Navn"
+
+#: abaddress.cpp:21
+msgid "AddressDetails::Address Details"
+msgstr "Adressedetaljer"
+
+#: abaddress.cpp:27
+msgid "AddressDetails::Cancel"
+msgstr "Avbryt"
+
+#: abaddress.cpp:70
+msgid "AddressDetails::City"
+msgstr "By"
+
+#: abaddress.cpp:65
+msgid "AddressDetails::Country"
+msgstr "Land"
+
+#: abaddress.cpp:32
+msgid "AddressDetails::OK"
+msgstr "OK"
+
+#: abaddress.cpp:52
+msgid "AddressDetails::State/Province"
+msgstr "Delstat/Provins"
+
+#: abaddress.cpp:75
+msgid "AddressDetails::Street"
+msgstr "Gatenavn"
+
+#: abaddress.cpp:47
+msgid "AddressDetails::Zip/Postal"
+msgstr "Postnummer"
+
+#: addressbook.cpp:38
+msgid "AddressbookWindow::Address Book"
+msgstr "Adressebok"
+
+#: addressbook.cpp:93
+msgid "AddressbookWindow::Edit Address"
+msgstr "Rediger Adresse"
+
+#: addressbook.cpp:49
+msgid "AddressbookWindow::List Operations"
+msgstr "Listeoperasjoner"
+
+#: addressbook.cpp:64
+msgid "AddressbookWindow::View Operations"
+msgstr "Visningsoperasjoner"
+
+#: abcompanybase.cpp:55
+msgid "CompanyDetails::Cancel"
+msgstr "Avbryt"
+
+#: abcompanybase.cpp:85
+msgid "CompanyDetails::City"
+msgstr "By"
+
+#: abcompanybase.cpp:21
+msgid "CompanyDetails::Company Details"
+msgstr "Firmadetaljer"
+
+#: abcompanybase.cpp:78
+msgid "CompanyDetails::Country"
+msgstr "Land"
+
+#: abcompanybase.cpp:31
+msgid "CompanyDetails::Name"
+msgstr "Navn"
+
+#: abcompanybase.cpp:50
+msgid "CompanyDetails::OK"
+msgstr "OK"
+
+#: abcompanybase.cpp:40
+msgid "CompanyDetails::State/Province"
+msgstr "Delstat/Provins"
+
+#: abcompanybase.cpp:64
+msgid "CompanyDetails::Street"
+msgstr "Gatenavn"
+
+#: abcompanybase.cpp:45
+msgid "CompanyDetails::Zip/Postal"
+msgstr "Postnummer"
+
diff --git a/i18n/no/addressbook.qm b/i18n/no/addressbook.qm
new file mode 100644
index 0000000..ab3a5cf
--- a/dev/null
+++ b/i18n/no/addressbook.qm
Binary files differ
diff --git a/i18n/no/calculator.po b/i18n/no/calculator.po
new file mode 100644
index 0000000..5f83e54
--- a/dev/null
+++ b/i18n/no/calculator.po
@@ -0,0 +1,16 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:01:54 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: main.cpp:28
+msgid "CalculatorImpl::Calculator"
+msgstr "Kalkulator"
+
diff --git a/i18n/no/calculator.qm b/i18n/no/calculator.qm
new file mode 100644
index 0000000..2086e35
--- a/dev/null
+++ b/i18n/no/calculator.qm
Binary files differ
diff --git a/i18n/no/citytime.po b/i18n/no/citytime.po
new file mode 100644
index 0000000..6e1daa4
--- a/dev/null
+++ b/i18n/no/citytime.po
@@ -0,0 +1,122 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:54:21 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: citytime.cpp:148
+msgid "CityTime::Restore Time Zone"
+msgstr "Gjenoppretter tidssone"
+
+#: citytime.cpp:139
+msgid "CityTime::There was a problem setting timezone %1"
+msgstr "Det var et problem med sette tidssone %1"
+
+#: citytime.cpp:149
+msgid "CityTime::"
+"There was a problem setting your timezone."
+"Your time may be wrong now..."
+msgstr "Det var et problem med sette tidssonen. Klokken kan vre feil n..."
+
+#: citytime.cpp:138
+msgid "CityTime::Time Changing"
+msgstr "Forandrer tid"
+
+#: citytimebase.cpp:53
+msgid "CityTimeBase::<CITY 1 TIME>"
+msgstr "<BY 1 TID>"
+
+#: citytimebase.cpp:92
+msgid "CityTimeBase::<CITY 2 TIME>"
+msgstr "<BY 2 TID>"
+
+#: citytimebase.cpp:111
+msgid "CityTimeBase::<CITY 3 TIME>"
+msgstr "<BY 3 TID>"
+
+#: citytimebase.cpp:102
+msgid "CityTimeBase::<CITY 4 TIME>"
+msgstr "<BY 4 TID>"
+
+#: citytimebase.cpp:120
+msgid "CityTimeBase::<CITY 5 TIME>"
+msgstr "<BY 5 TID>"
+
+#: citytimebase.cpp:72
+msgid "CityTimeBase::<location 1>"
+msgstr "<sted 1>"
+
+#: citytimebase.cpp:149
+msgid "CityTimeBase::<location 2>"
+msgstr "<sted 2>"
+
+#: citytimebase.cpp:34
+msgid "CityTimeBase::<location 3>"
+msgstr "<sted 3>"
+
+#: citytimebase.cpp:158
+msgid "CityTimeBase::<location 4>"
+msgstr "<sted 4>"
+
+#: citytimebase.cpp:139
+msgid "CityTimeBase::<location 5>"
+msgstr "<sted 5>"
+
+#: citytimebase.cpp:20
+msgid "CityTimeBase::City Time"
+msgstr "Verdensur"
+
+#: zonemap.cpp:413
+msgid "ZoneMap::<p>Couldn't load map: %1, exiting"
+msgstr "<p>Kunne ikke laste kart: %1, avslutter"
+
+#: zonemap.cpp:166
+msgid "ZoneMap::<p>Unable to find any timezone information in %1 or %2"
+msgstr "<p>Kan ikke finne tidssoneinformasjon i %1 eller %2"
+
+#: zonemap.cpp:122
+msgid "ZoneMap::CITY"
+msgstr "BY"
+
+#: zonemap.cpp:412
+msgid "ZoneMap::Couldn't Find Map"
+msgstr "Kunne ikke finne kart"
+
+#: zonemap.cpp:546
+msgid "ZoneMap::Fri"
+msgstr "Fre"
+
+#: zonemap.cpp:542
+msgid "ZoneMap::Mon"
+msgstr "Man"
+
+#: zonemap.cpp:547
+msgid "ZoneMap::Sat"
+msgstr "Lr"
+
+#: zonemap.cpp:548
+msgid "ZoneMap::Sun"
+msgstr "Sn"
+
+#: zonemap.cpp:545
+msgid "ZoneMap::Thu"
+msgstr "Tor"
+
+#: zonemap.cpp:543
+msgid "ZoneMap::Tue"
+msgstr "Tir"
+
+#: zonemap.cpp:165
+msgid "ZoneMap::Unable to Find Timezone Info"
+msgstr "Kan ikke finne tidssoneinformasjon"
+
+#: zonemap.cpp:544
+msgid "ZoneMap::Wed"
+msgstr "Ons"
+
diff --git a/i18n/no/citytime.qm b/i18n/no/citytime.qm
new file mode 100644
index 0000000..3591213
--- a/dev/null
+++ b/i18n/no/citytime.qm
Binary files differ
diff --git a/i18n/no/clock.po b/i18n/no/clock.po
new file mode 100644
index 0000000..fb5d595
--- a/dev/null
+++ b/i18n/no/clock.po
@@ -0,0 +1,16 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-08 15:14:29 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: main.cpp:11
+msgid "Clock::Clock"
+msgstr "Klokke"
+
diff --git a/i18n/no/clock.qm b/i18n/no/clock.qm
new file mode 100644
index 0000000..d8f1d1f
--- a/dev/null
+++ b/i18n/no/clock.qm
Binary files differ
diff --git a/i18n/no/datebook.po b/i18n/no/datebook.po
new file mode 100644
index 0000000..87109f9
--- a/dev/null
+++ b/i18n/no/datebook.po
@@ -0,0 +1,424 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-08 11:04:52 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: datebook.cpp:54
+msgid "DateBook::Close"
+msgstr "Lukk"
+
+#: datebook.cpp:34
+msgid "DateBook::Date Book"
+msgstr "Avtalebok"
+
+#: main.cpp:11
+msgid "DateBook::Datebook"
+msgstr "Avtalebok"
+
+#: datebook.cpp:63
+msgid "DateBook::Day"
+msgstr "Dag"
+
+#: datebook.cpp:209
+msgid "DateBook::Edit Event"
+msgstr "Rediger"
+
+#: datebook.cpp:86
+msgid "DateBook::File"
+msgstr "Fil"
+
+#: datebook.cpp:79
+msgid "DateBook::Month"
+msgstr "Mned"
+
+#: datebook.cpp:49
+msgid "DateBook::New"
+msgstr "Ny"
+
+#: datebook.cpp:87
+msgid "DateBook::View"
+msgstr "Vis"
+
+#: datebook.cpp:72
+msgid "DateBook::Week"
+msgstr "Uke"
+
+#: datebookdayheader.cpp:279
+msgid "DateBookDayHeaderBase::"
+msgstr ""
+
+#: datebookdayheader.cpp:258
+msgid "DateBookDayHeaderBase::F"
+msgstr "F"
+
+#: datebookdayheader.cpp:208
+msgid "DateBookDayHeaderBase::Form1"
+msgstr ""
+
+#: datebookdayheader.cpp:261
+msgid "DateBookDayHeaderBase::Friday"
+msgstr "Fredag"
+
+#: datebookdayheader.cpp:221
+msgid "DateBookDayHeaderBase::Jan 02 00"
+msgstr ""
+
+#: datebookdayheader.cpp:230
+msgid "DateBookDayHeaderBase::M"
+msgstr "M"
+
+#: datebookdayheader.cpp:233
+msgid "DateBookDayHeaderBase::Monday"
+msgstr "Mandag"
+
+#: datebookdayheader.cpp:272
+msgid "DateBookDayHeaderBase::S"
+msgstr "L"
+
+#: datebookdayheader.cpp:268
+msgid "DateBookDayHeaderBase::Saturday"
+msgstr "Lrdag"
+
+#: datebookdayheader.cpp:275
+msgid "DateBookDayHeaderBase::Sunday"
+msgstr "Sndag"
+
+#: datebookdayheader.cpp:251
+msgid "DateBookDayHeaderBase::T"
+msgstr "T"
+
+#: datebookdayheader.cpp:254
+msgid "DateBookDayHeaderBase::Thursday"
+msgstr "Torsdag"
+
+#: datebookdayheader.cpp:240
+msgid "DateBookDayHeaderBase::Tuesday"
+msgstr "Tirsdag"
+
+#: datebookdayheader.cpp:244
+msgid "DateBookDayHeaderBase::W"
+msgstr "O"
+
+#: datebookdayheader.cpp:247
+msgid "DateBookDayHeaderBase::Wednesday"
+msgstr "Onsdag"
+
+#: datebookday.cpp:254
+msgid "DateBookDayWidget::Delete"
+msgstr "Slett"
+
+#: datebookday.cpp:253
+msgid "DateBookDayWidget::Edit..."
+msgstr "Rediger..."
+
+#: datebookweek.cpp:206
+msgid "DateBookWeekWidget::Delete"
+msgstr "Slett"
+
+#: datebookweek.cpp:205
+msgid "DateBookWeekWidget::Edit..."
+msgstr "Rediger..."
+
+#: dateentry.cpp:200
+msgid "DateEntryBase:: minutes"
+msgstr "minutter"
+
+#: dateentry.cpp:274
+msgid "DateEntryBase::"
+msgstr ""
+
+#: dateentry.cpp:195
+msgid "DateEntryBase::&Alarm"
+msgstr "&Alarm"
+
+#: dateentry.cpp:99
+msgid "DateEntryBase::(Nothing)"
+msgstr "(Ingenting)"
+
+#: dateentry.cpp:215
+msgid "DateEntryBase::00:00"
+msgstr ""
+
+#: dateentry.cpp:216
+msgid "DateEntryBase::00:30"
+msgstr ""
+
+#: dateentry.cpp:217
+msgid "DateEntryBase::01:00"
+msgstr ""
+
+#: dateentry.cpp:218
+msgid "DateEntryBase::01:30"
+msgstr ""
+
+#: dateentry.cpp:219
+msgid "DateEntryBase::02:00"
+msgstr ""
+
+#: dateentry.cpp:220
+msgid "DateEntryBase::02:30"
+msgstr ""
+
+#: dateentry.cpp:221
+msgid "DateEntryBase::03:00"
+msgstr ""
+
+#: dateentry.cpp:222
+msgid "DateEntryBase::03:30"
+msgstr ""
+
+#: dateentry.cpp:223
+msgid "DateEntryBase::04:00"
+msgstr ""
+
+#: dateentry.cpp:224
+msgid "DateEntryBase::04:30"
+msgstr ""
+
+#: dateentry.cpp:225
+msgid "DateEntryBase::05:00"
+msgstr ""
+
+#: dateentry.cpp:226
+msgid "DateEntryBase::05:30"
+msgstr ""
+
+#: dateentry.cpp:227
+msgid "DateEntryBase::06:00"
+msgstr ""
+
+#: dateentry.cpp:228
+msgid "DateEntryBase::06:30"
+msgstr ""
+
+#: dateentry.cpp:229
+msgid "DateEntryBase::07:00"
+msgstr ""
+
+#: dateentry.cpp:230
+msgid "DateEntryBase::07:30"
+msgstr ""
+
+#: dateentry.cpp:231
+msgid "DateEntryBase::08:00"
+msgstr ""
+
+#: dateentry.cpp:232
+msgid "DateEntryBase::08:30"
+msgstr ""
+
+#: dateentry.cpp:233
+msgid "DateEntryBase::09:00"
+msgstr ""
+
+#: dateentry.cpp:234
+msgid "DateEntryBase::09:30"
+msgstr ""
+
+#: dateentry.cpp:235
+msgid "DateEntryBase::10:00"
+msgstr ""
+
+#: dateentry.cpp:236
+msgid "DateEntryBase::10:30"
+msgstr ""
+
+#: dateentry.cpp:237
+msgid "DateEntryBase::11:00"
+msgstr ""
+
+#: dateentry.cpp:238
+msgid "DateEntryBase::11:30"
+msgstr ""
+
+#: dateentry.cpp:239
+msgid "DateEntryBase::12:00"
+msgstr ""
+
+#: dateentry.cpp:240
+msgid "DateEntryBase::12:30"
+msgstr ""
+
+#: dateentry.cpp:241
+msgid "DateEntryBase::13:00"
+msgstr ""
+
+#: dateentry.cpp:242
+msgid "DateEntryBase::13:30"
+msgstr ""
+
+#: dateentry.cpp:243
+msgid "DateEntryBase::14:00"
+msgstr ""
+
+#: dateentry.cpp:244
+msgid "DateEntryBase::14:30"
+msgstr ""
+
+#: dateentry.cpp:245
+msgid "DateEntryBase::15:00"
+msgstr ""
+
+#: dateentry.cpp:246
+msgid "DateEntryBase::15:30"
+msgstr ""
+
+#: dateentry.cpp:247
+msgid "DateEntryBase::16:00"
+msgstr ""
+
+#: dateentry.cpp:248
+msgid "DateEntryBase::16:30"
+msgstr ""
+
+#: dateentry.cpp:249
+msgid "DateEntryBase::17:00"
+msgstr ""
+
+#: dateentry.cpp:250
+msgid "DateEntryBase::17:30"
+msgstr ""
+
+#: dateentry.cpp:251
+msgid "DateEntryBase::18:00"
+msgstr ""
+
+#: dateentry.cpp:252
+msgid "DateEntryBase::18:30"
+msgstr ""
+
+#: dateentry.cpp:253
+msgid "DateEntryBase::19:00"
+msgstr ""
+
+#: dateentry.cpp:254
+msgid "DateEntryBase::19:30"
+msgstr ""
+
+#: dateentry.cpp:255
+msgid "DateEntryBase::20:00"
+msgstr ""
+
+#: dateentry.cpp:256
+msgid "DateEntryBase::20:30"
+msgstr ""
+
+#: dateentry.cpp:257
+msgid "DateEntryBase::21:00"
+msgstr ""
+
+#: dateentry.cpp:258
+msgid "DateEntryBase::21:30"
+msgstr ""
+
+#: dateentry.cpp:259
+msgid "DateEntryBase::22:00"
+msgstr ""
+
+#: dateentry.cpp:260
+msgid "DateEntryBase::22:30"
+msgstr ""
+
+#: dateentry.cpp:261
+msgid "DateEntryBase::23:00"
+msgstr ""
+
+#: dateentry.cpp:262
+msgid "DateEntryBase::23:30"
+msgstr ""
+
+#: dateentry.cpp:189
+msgid "DateEntryBase::<Edit Pattern...>"
+msgstr "<Rediger mnster>"
+
+#: dateentry.cpp:110
+msgid "DateEntryBase::All Day"
+msgstr "Hele dagen"
+
+#: dateentry.cpp:282
+msgid "DateEntryBase::Brisbane"
+msgstr ""
+
+#: dateentry.cpp:71
+msgid "DateEntryBase::Category"
+msgstr "Kategori"
+
+#: dateentry.cpp:94
+msgid "DateEntryBase::Description:"
+msgstr "Beskrivelse:"
+
+#: dateentry.cpp:84
+msgid "DateEntryBase::Dinner"
+msgstr "Middag"
+
+#: dateentry.cpp:210
+msgid "DateEntryBase::Ends"
+msgstr "Slutter"
+
+#: dateentry.cpp:188
+msgid "DateEntryBase::Every Week"
+msgstr "Hver uke"
+
+#: dateentry.cpp:100
+msgid "DateEntryBase::Home"
+msgstr "Hjemme"
+
+#: dateentry.cpp:294
+msgid "DateEntryBase::Jan 02 00"
+msgstr ""
+
+#: dateentry.cpp:66
+msgid "DateEntryBase::Location"
+msgstr "Sted"
+
+#: dateentry.cpp:83
+msgid "DateEntryBase::Lunch"
+msgstr "Lunch"
+
+#: dateentry.cpp:82
+msgid "DateEntryBase::Meeting"
+msgstr "Mte"
+
+#: dateentry.cpp:60
+msgid "DateEntryBase::New Event"
+msgstr "Ny hendelse"
+
+#: dateentry.cpp:109
+msgid "DateEntryBase::Normal"
+msgstr "Normal"
+
+#: dateentry.cpp:281
+msgid "DateEntryBase::Oslo"
+msgstr ""
+
+#: dateentry.cpp:183
+msgid "DateEntryBase::Repeat"
+msgstr "Gjenta"
+
+#: dateentry.cpp:283
+msgid "DateEntryBase::Santa Clara"
+msgstr ""
+
+#: dateentry.cpp:115
+msgid "DateEntryBase::Starts"
+msgstr "Begynner"
+
+#: dateentry.cpp:269
+msgid "DateEntryBase::Time zone:"
+msgstr "Tidssone:"
+
+#: dateentry.cpp:85
+msgid "DateEntryBase::Travel"
+msgstr "Reise"
+
+#: dateentry.cpp:120
+msgid "DateEntryBase::Type"
+msgstr "Type"
+
diff --git a/i18n/no/datebook.qm b/i18n/no/datebook.qm
new file mode 100644
index 0000000..7bad370
--- a/dev/null
+++ b/i18n/no/datebook.qm
Binary files differ
diff --git a/i18n/no/filebrowser.po b/i18n/no/filebrowser.po
new file mode 100644
index 0000000..b3764ae
--- a/dev/null
+++ b/i18n/no/filebrowser.po
@@ -0,0 +1,168 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:57:29 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: filebrowser.cpp:612
+msgid "FileBrowser::&Dir"
+msgstr "Katalog"
+
+#: filebrowser.cpp:615
+msgid "FileBrowser::&Sort"
+msgstr "Sorter"
+
+#: filebrowser.cpp:725
+msgid "FileBrowser::/"
+msgstr "/"
+
+#: filebrowser.cpp:625
+msgid "FileBrowser::Close"
+msgstr "Lukk"
+
+#: filebrowser.cpp:650
+msgid "FileBrowser::Copy"
+msgstr "Kopier"
+
+#: filebrowser.cpp:663
+msgid "FileBrowser::Cut"
+msgstr "Klipp"
+
+#: filebrowser.cpp:597
+msgid "FileBrowser::File Browser"
+msgstr "Filvelger"
+
+#: filebrowser.cpp:644
+msgid "FileBrowser::New folder"
+msgstr "Ny katalog"
+
+#: filebrowser.cpp:638
+msgid "FileBrowser::Parent dir"
+msgstr "Foreldrekatalog"
+
+#: filebrowser.cpp:656
+msgid "FileBrowser::Paste"
+msgstr "Lim"
+
+#: filebrowser.cpp:632
+msgid "FileBrowser::Previous dir"
+msgstr "Forrige katalog"
+
+#: filebrowser.cpp:617
+msgid "FileBrowser::by &Date "
+msgstr "etter &dato"
+
+#: filebrowser.cpp:616
+msgid "FileBrowser::by &Name "
+msgstr "etter &navn"
+
+#: filebrowser.cpp:618
+msgid "FileBrowser::by &Size "
+msgstr "etter &strrelse"
+
+#: filebrowser.cpp:619
+msgid "FileBrowser::by &Type "
+msgstr "etter &type"
+
+#: filebrowser.cpp:566
+msgid "FileView::&Copy"
+msgstr "&Kopier"
+
+#: filebrowser.cpp:570
+msgid "FileView::&Cut"
+msgstr "Klip&p"
+
+#: filebrowser.cpp:395
+msgid "FileView::&No"
+msgstr "&Nei"
+
+#: filebrowser.cpp:500
+msgid "FileView::&Ok"
+msgstr "&OK"
+
+#: filebrowser.cpp:568
+msgid "FileView::&Paste"
+msgstr "&Lim"
+
+#: filebrowser.cpp:555
+msgid "FileView::&Run"
+msgstr "&Kjr"
+
+#: filebrowser.cpp:572
+msgid "FileView::&Select all"
+msgstr "&Merk alle"
+
+#: filebrowser.cpp:561
+msgid "FileView::&View as text"
+msgstr "Vis som &tekst"
+
+#: filebrowser.cpp:395
+msgid "FileView::&Yes"
+msgstr "&Ja"
+
+#: filebrowser.cpp:394
+msgid "FileView::Are you sure?"
+msgstr "Er du sikker?"
+
+#: filebrowser.cpp:404
+msgid "FileView::Cut failed!"
+msgstr "Kunne ikke klippe!"
+
+#: filebrowser.cpp:404
+msgid "FileView::Cut"
+msgstr "Klipp"
+
+#: filebrowser.cpp:573
+msgid "FileView::Dese&lect all"
+msgstr "&Fjern all merking"
+
+#: filebrowser.cpp:425
+msgid "FileView::Folder creation failed!"
+msgstr "Kunne ikke opprette katalog!"
+
+#: filebrowser.cpp:499
+msgid "FileView::Launch Application"
+msgstr "Start program"
+
+#: filebrowser.cpp:500
+msgid "FileView::Launch failed!"
+msgstr "Start mislyktes!"
+
+#: filebrowser.cpp:424
+msgid "FileView::New folder"
+msgstr "Ny katalog"
+
+#: filebrowser.cpp:321
+msgid "FileView::Paste failed!"
+msgstr "Lim mislyktes!"
+
+#: filebrowser.cpp:321
+msgid "FileView::Paste file"
+msgstr "Lim fil"
+
+#: filebrowser.cpp:564
+msgid "FileView::R&ename"
+msgstr "Omdp"
+
+#: filebrowser.cpp:262
+msgid "FileView::Rename failed!"
+msgstr "Omdp mislyktes"
+
+#: filebrowser.cpp:261
+msgid "FileView::Rename file"
+msgstr "Omdp fil"
+
+#: filebrowser.cpp:479
+msgid "FileView::Unable to open file!"
+msgstr "Kunne ikke pne fil!"
+
+#: filebrowser.cpp:478
+msgid "FileView::View as text"
+msgstr "Vis som tekst"
+
diff --git a/i18n/no/filebrowser.qm b/i18n/no/filebrowser.qm
new file mode 100644
index 0000000..d1ecce0
--- a/dev/null
+++ b/i18n/no/filebrowser.qm
Binary files differ
diff --git a/i18n/no/helpbrowser.po b/i18n/no/helpbrowser.po
new file mode 100644
index 0000000..e32b58d
--- a/dev/null
+++ b/i18n/no/helpbrowser.po
@@ -0,0 +1,48 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:55:37 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: helpbrowser.cpp:111
+msgid "HelpBrowser::About ..."
+msgstr "Om..."
+
+#: helpbrowser.cpp:112
+msgid "HelpBrowser::About Qt ..."
+msgstr "Om Qt..."
+
+#: helpbrowser.cpp:115
+msgid "HelpBrowser::Add Bookmark"
+msgstr "Legg til bokmerke"
+
+#: helpbrowser.cpp:89
+msgid "HelpBrowser::Backward"
+msgstr "Bakover"
+
+#: helpbrowser.cpp:125
+msgid "HelpBrowser::Bookmarks"
+msgstr "Bokmerker"
+
+#: helpbrowser.cpp:97
+msgid "HelpBrowser::Forward"
+msgstr "Forover"
+
+#: helpbrowser.cpp:124
+msgid "HelpBrowser::Go"
+msgstr "G"
+
+#: helpbrowser.cpp:126
+msgid "HelpBrowser::Help"
+msgstr "Hjelp"
+
+#: helpbrowser.cpp:105
+msgid "HelpBrowser::Home"
+msgstr "Hjem"
+
diff --git a/i18n/no/helpbrowser.qm b/i18n/no/helpbrowser.qm
new file mode 100644
index 0000000..94184de
--- a/dev/null
+++ b/i18n/no/helpbrowser.qm
Binary files differ
diff --git a/i18n/no/libqpe.po b/i18n/no/libqpe.po
new file mode 100644
index 0000000..e009649
--- a/dev/null
+++ b/i18n/no/libqpe.po
@@ -0,0 +1,24 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:39:56 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: fileselector.cpp:74
+msgid "FileSelector::Close the File Selector"
+msgstr "Lukk Filvelgeren"
+
+#: fileselector.cpp:66
+msgid "FileSelector::Create a new Document"
+msgstr "Opprett et Nytt Dokument"
+
+#: fileselector.cpp:26
+msgid "FileSelectorView::Name"
+msgstr "Navn"
+
diff --git a/i18n/no/libqpe.qm b/i18n/no/libqpe.qm
new file mode 100644
index 0000000..16885b2
--- a/dev/null
+++ b/i18n/no/libqpe.qm
Binary files differ
diff --git a/i18n/no/minesweep.po b/i18n/no/minesweep.po
new file mode 100644
index 0000000..e274dfb
--- a/dev/null
+++ b/i18n/no/minesweep.po
@@ -0,0 +1,64 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 18:29:23 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: minesweep.cpp:221
+msgid "MineSweep::About MineSweep"
+msgstr "Om Minesk"
+
+#: minesweep.cpp:213
+msgid "MineSweep::Advanced"
+msgstr "Avansert"
+
+#: minesweep.cpp:212
+msgid "MineSweep::Beginner"
+msgstr "Nybegynner"
+
+#: minesweep.cpp:216
+msgid "MineSweep::Close"
+msgstr "Lukk"
+
+#: minesweep.cpp:214
+msgid "MineSweep::Expert"
+msgstr "Ekspert"
+
+#: minesweep.cpp:223
+msgid "MineSweep::Game"
+msgstr "Spill"
+
+#: minesweep.cpp:224
+msgid "MineSweep::Help"
+msgstr "Hjelp"
+
+#: minesweep.cpp:219
+msgid "MineSweep::Instructions"
+msgstr "Instruksjoner"
+
+#: minesweep.cpp:205
+msgid "MineSweep::Mine Sweep"
+msgstr "Minesk"
+
+#: minesweep.cpp:340
+msgid "MineSweep::MineSweeper"
+msgstr "Minesk"
+
+#: minesweep.cpp:317
+msgid "MineSweep::Press and hold to mark a mine"
+msgstr "Press og hold for markere en mine"
+
+#: minesweep.cpp:164
+msgid "MineSweep::You exploded!"
+msgstr "Du eksploderte!"
+
+#: minesweep.cpp:156
+msgid "MineSweep::You won!"
+msgstr "Du vant!"
+
diff --git a/i18n/no/minesweep.qm b/i18n/no/minesweep.qm
new file mode 100644
index 0000000..e0e7d0f
--- a/dev/null
+++ b/i18n/no/minesweep.qm
Binary files differ
diff --git a/i18n/no/mpegplayer.po b/i18n/no/mpegplayer.po
new file mode 100644
index 0000000..d9571f4
--- a/dev/null
+++ b/i18n/no/mpegplayer.po
@@ -0,0 +1,44 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:56:12 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: mpegplayer.cpp:78
+msgid "MpegPlayer::1:1"
+msgstr "1:1"
+
+#: mpegplayer.cpp:62
+msgid "MpegPlayer::Fullscreen"
+msgstr "Fullskjerm"
+
+#: mpegplayer.cpp:92
+msgid "MpegPlayer::Loop"
+msgstr "Gjenta"
+
+#: mpegplayer.cpp:132
+msgid "MpegPlayer::MPEG Player"
+msgstr "MPEGspiller"
+
+#: mpegplayer.cpp:73
+msgid "MpegPlayer::Mute"
+msgstr "Stille"
+
+#: mpegplayer.cpp:58
+msgid "MpegPlayer::Open"
+msgstr "pne"
+
+#: mpegplayer.cpp:84
+msgid "MpegPlayer::Play"
+msgstr "Spill"
+
+#: mpegplayer.cpp:88
+msgid "MpegPlayer::Stop"
+msgstr "Stopp"
+
diff --git a/i18n/no/mpegplayer.qm b/i18n/no/mpegplayer.qm
new file mode 100644
index 0000000..6d07391
--- a/dev/null
+++ b/i18n/no/mpegplayer.qm
Binary files differ
diff --git a/i18n/no/parashoot.po b/i18n/no/parashoot.po
new file mode 100644
index 0000000..842a3c8
--- a/dev/null
+++ b/i18n/no/parashoot.po
@@ -0,0 +1,54 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 17:39:35 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: interface.cpp:128
+msgid "ParaShoot::"
+" GAME OVER!\n"
+" Your Score: %1\n"
+" Parachuters Killed: %2 "
+msgstr ""
+" SPILL OVER!\n"
+" Din poengsum: %1\n"
+" Angripere drept : %2 "
+
+#: interface.cpp:74
+msgid "ParaShoot:: Level: %1 Score: %2 "
+msgstr " Niv: %1 Poeng: %2 "
+
+#: interface.cpp:37
+msgid "ParaShoot::How To Play"
+msgstr "Hvordan spille"
+
+#: interface.cpp:33
+msgid "ParaShoot::New Game"
+msgstr "Nytt spill"
+
+#: interface.cpp:30
+msgid "ParaShoot::ParaShoot"
+msgstr "Fallskjerm"
+
+#: interface.cpp:41
+msgid "ParaShoot::Quit"
+msgstr "Slutt"
+
+#: interface.cpp:233
+msgid "ParaShoot::"
+"You must defend your base\nfrom attack by suicide bombers!\n"
+"Use the arrow keys to aim\nthe cannon and press space to\n"
+"shoot the bombers parachuting\ntowards your base.\n"
+"Three successful attacks\nwill destroy the base completely.\n"
+"Beware of those suicide\nbombers travelling in helicopters!!"
+msgstr "Du m forsvare basen din mot angrep fra selvmordsbombere!\n"
+"Bruk piltastene for styre kanonen, og mellomrom for skyte.\n"
+"Basen blir fullstendig delagt etter tre vellykkede angrep.\n"
+"Vr p vakt mot selvmordsbombere i helikoptre!"
+
diff --git a/i18n/no/parashoot.qm b/i18n/no/parashoot.qm
new file mode 100644
index 0000000..4c79148
--- a/dev/null
+++ b/i18n/no/parashoot.qm
Binary files differ
diff --git a/i18n/no/qpe.po b/i18n/no/qpe.po
new file mode 100644
index 0000000..3b4db67
--- a/dev/null
+++ b/i18n/no/qpe.po
@@ -0,0 +1,96 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-15 12:29:55 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: inputmethods.cpp:238
+msgid "InputMethods::Handwriting"
+msgstr "Hndskrift"
+
+#: inputmethods.cpp:243
+msgid "InputMethods::Keyboard"
+msgstr "Tastatur"
+
+#: inputmethods.cpp:245
+msgid "InputMethods::Opti"
+msgstr ""
+
+#: inputmethods.cpp:241
+msgid "InputMethods::Pickboard"
+msgstr ""
+
+#: inputmethods.cpp:248
+msgid "InputMethods::Unicode"
+msgstr ""
+
+#: ../launcher/launcher.cpp:181
+msgid "Launcher:: - Launcher"
+msgstr " - Hurtigstarter"
+
+# #: ../launcher/launcher.cpp:243
+# msgid "Launcher::All"
+# msgstr "Alle"
+
+#: ../launcher/launcher.cpp:161
+msgid "Launcher::Launcher"
+msgstr "Hurtigstarter"
+
+#: launcherclock.cpp:31
+msgid "LauncherClock::City Time"
+msgstr "Verdensur"
+
+#: launcherclock.cpp:32
+msgid "LauncherClock::Set time"
+msgstr "Still klokken"
+
+#: ../inputmethods/qimpensetup.cpp:31
+msgid "QIMPenSetup::Setup pen input"
+msgstr "Oppsett av penn"
+
+#: shutdown.cpp:246
+msgid "Shutdown::<p>\nThese termination options are provided primarily for use while developing and testing the QPE system. In a normal environment, these concepts are unnecessary."
+msgstr "<p>Disse opsjonene er hovedsakelig beregnet for utvikling og testing av QPE-systemet. Ved normal bruk er de ikke ndvendige."
+
+#: shutdown.cpp:252
+msgid "Shutdown::Cancel"
+msgstr "Avbryt"
+
+#: shutdown.cpp:89
+msgid "Shutdown::Reboot"
+msgstr "Omstart maskin"
+
+#: shutdown.cpp:141
+msgid "Shutdown::Restart Server"
+msgstr "Omstart QPE"
+
+#: shutdown.cpp:19
+msgid "Shutdown::Shut down..."
+msgstr "Skru av..."
+
+#: shutdown.cpp:193
+msgid "Shutdown::Shutdown"
+msgstr "Skru av"
+
+#: shutdown.cpp:35
+msgid "Shutdown::Terminate Server"
+msgstr "Avslutt QPE"
+
+#: shutdown.cpp:25
+msgid "Shutdown::Terminate"
+msgstr "Avslutt"
+
+#: volume.cpp:29
+msgid "VolumeApplet::Mute"
+msgstr "Stille"
+
+#: volume.cpp:43
+msgid "VolumeApplet::Volume"
+msgstr "Volum"
+
diff --git a/i18n/no/qpe.qm b/i18n/no/qpe.qm
new file mode 100644
index 0000000..267b71d
--- a/dev/null
+++ b/i18n/no/qpe.qm
Binary files differ
diff --git a/i18n/no/settings.po b/i18n/no/settings.po
new file mode 100644
index 0000000..335570e
--- a/dev/null
+++ b/i18n/no/settings.po
@@ -0,0 +1,244 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:19:34 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: appearancesettingsbase.cpp:19
+msgid "AppearanceSettingsBase::Appearance"
+msgstr "Utseende"
+
+#: appearancesettingsbase.cpp:34
+msgid "AppearanceSettingsBase::Color Scheme:"
+msgstr "Fargevalg"
+
+#: appearancesettingsbase.cpp:29
+msgid "AppearanceSettingsBase::QPE"
+msgstr "QPE"
+
+#: appearancesettingsbase.cpp:25
+msgid "AppearanceSettingsBase::Style:"
+msgstr "Stil"
+
+#: appearancesettingsbase.cpp:30
+msgid "AppearanceSettingsBase::Windows"
+msgstr "Windows"
+
+#: languagesettingsbase.cpp:27
+msgid "LanguageSettingsBase::"
+msgstr ""
+
+#: languagesettingsbase.cpp:37
+msgid "LanguageSettingsBase::English"
+msgstr ""
+
+#: languagesettingsbase.cpp:44
+msgid "LanguageSettingsBase::German"
+msgstr ""
+
+#: languagesettingsbase.cpp:62
+msgid "LanguageSettingsBase::Japanese"
+msgstr ""
+
+#: languagesettingsbase.cpp:68
+msgid "LanguageSettingsBase::Korean"
+msgstr ""
+
+#: languagesettingsbase.cpp:19
+msgid "LanguageSettingsBase::Language"
+msgstr "Sprk"
+
+#: languagesettingsbase.cpp:74
+msgid "LanguageSettingsBase::Norwegian"
+msgstr "Norsk"
+
+#: languagesettingsbase.cpp:50
+msgid "LanguageSettingsBase::Simplified Chinese"
+msgstr ""
+
+#: languagesettingsbase.cpp:56
+msgid "LanguageSettingsBase::Traditional Chinese"
+msgstr ""
+
+#: lightsettingsbase.cpp:122
+msgid "LightSettingsBase::<blockquote>The brighter the backlight, the more battery power is used.</blockquote>"
+msgstr "<blockquote>Jo lysere, desto mer batteri bruker maskinen.</blockquote>"
+
+#: lightsettingsbase.cpp:78
+msgid "LightSettingsBase::Adjust to environment"
+msgstr "Justr etter omgivelsen."
+
+#: lightsettingsbase.cpp:114
+msgid "LightSettingsBase::Bright"
+msgstr "Lyst"
+
+#: lightsettingsbase.cpp:79
+msgid "LightSettingsBase::By sensing the ambient light where you are using your device, the backlight can be adjusted automatically. The brightness setting still affects the average brightness."
+msgstr ""
+
+#: lightsettingsbase.cpp:83
+msgid "LightSettingsBase::Dim after some inactivity"
+msgstr "Skru av lyset etter en tid uten aktivitet."
+
+#: lightsettingsbase.cpp:72
+msgid "LightSettingsBase::Light Settings"
+msgstr "Innstillinger"
+
+#: lightsettingsbase.cpp:135
+msgid "LightSettingsBase::Off"
+msgstr "Av"
+
+#: rotationsettingsbase.cpp:216
+msgid "RotationSettingsBase::"
+msgstr ""
+
+#: rotationsettingsbase.cpp:223
+msgid "RotationSettingsBase::<p>The chosen rotation will only affect new applications."
+msgstr "<p>Den valgte rotasjonen vil bare virke for programmer som startes senere<p>"
+
+#: rotationsettingsbase.cpp:175
+msgid "RotationSettingsBase::Rotation Settings"
+msgstr "Rotasjonsinstillinger"
+
+#: settime.cpp:28
+msgid "SetDateTime::Set System Time"
+msgstr "Set systemklokken"
+
+#: settime.cpp:34
+msgid "SetDateTime::Time Zone"
+msgstr "Tidssone"
+
+#: settime.cpp:94
+msgid "SetTime::Hour"
+msgstr "Time"
+
+#: settime.cpp:105
+msgid "SetTime::Minute"
+msgstr "Minutt"
+
+#: settingsbase.cpp:496
+msgid "SettingsBase::"
+msgstr ""
+
+#: settingsbase.cpp:333
+msgid "SettingsBase::<blockquote>The brighter the backlight, the more battery power is used.</blockquote>"
+msgstr "<blockquote>Jo lysere, desto mer batteri bruker maskinen.</blockquote>"
+
+#: settingsbase.cpp:462
+msgid "SettingsBase::<p>The chosen rotation will only affect new applications."
+msgstr "<p>Den valgte rotasjonen vil bare virke for programmer som startes senere<p>"
+
+#: settingsbase.cpp:361
+msgid "SettingsBase::Adjust to environment"
+msgstr "Justr etter omgivelsen."
+
+#: settingsbase.cpp:325
+msgid "SettingsBase::Bright"
+msgstr "Lyst"
+
+#: settingsbase.cpp:290
+msgid "SettingsBase::By sensing the ambient light where you are using your device, the backlight can be adjusted automatically. The brightness setting still affects the average brightness."
+msgstr ""
+
+#: settingsbase.cpp:362
+msgid "SettingsBase::By sensing the ambient noise where you are using your device, the volume is adjusted automatically. The volume setting still affects the average volume."
+msgstr ""
+
+#: settingsbase.cpp:482
+msgid "SettingsBase::Color Scheme:"
+msgstr "Fargevalg"
+
+#: settingsbase.cpp:294
+msgid "SettingsBase::Dim after some inactivity"
+msgstr "Skru av lyset etter en tid uten aktivitet."
+
+#: settingsbase.cpp:506
+msgid "SettingsBase::English"
+msgstr ""
+
+#: settingsbase.cpp:525
+msgid "SettingsBase::Japanese"
+msgstr ""
+
+#: settingsbase.cpp:528
+msgid "SettingsBase::Language"
+msgstr ""
+
+#: settingsbase.cpp:353
+msgid "SettingsBase::Light"
+msgstr ""
+
+#: settingsbase.cpp:388
+msgid "SettingsBase::Loud"
+msgstr ""
+
+#: settingsbase.cpp:346
+msgid "SettingsBase::Off"
+msgstr ""
+
+#: settingsbase.cpp:477
+msgid "SettingsBase::QPE"
+msgstr ""
+
+#: settingsbase.cpp:465
+msgid "SettingsBase::Rotation"
+msgstr ""
+
+#: settingsbase.cpp:275
+msgid "SettingsBase::Settings"
+msgstr ""
+
+#: settingsbase.cpp:406
+msgid "SettingsBase::Silent"
+msgstr ""
+
+#: settingsbase.cpp:513
+msgid "SettingsBase::Simplified Chinese"
+msgstr ""
+
+#: settingsbase.cpp:413
+msgid "SettingsBase::Sound"
+msgstr ""
+
+#: settingsbase.cpp:487
+msgid "SettingsBase::Style"
+msgstr ""
+
+#: settingsbase.cpp:473
+msgid "SettingsBase::Style:"
+msgstr ""
+
+#: settingsbase.cpp:519
+msgid "SettingsBase::Traditional Chinese"
+msgstr ""
+
+#: settingsbase.cpp:478
+msgid "SettingsBase::Windows"
+msgstr ""
+
+#: soundsettingsbase.cpp:75
+msgid "SoundSettingsBase::Adjust to environment"
+msgstr ""
+
+#: soundsettingsbase.cpp:76
+msgid "SoundSettingsBase::By sensing the ambient noise where you are using your device, the volume is adjusted automatically. The volume setting still affects the average volume."
+msgstr ""
+
+#: soundsettingsbase.cpp:103
+msgid "SoundSettingsBase::Loud"
+msgstr "Hyt"
+
+#: soundsettingsbase.cpp:121
+msgid "SoundSettingsBase::Silent"
+msgstr "Stille"
+
+#: soundsettingsbase.cpp:69
+msgid "SoundSettingsBase::Sound Settings"
+msgstr "Lydinstillinger"
+
diff --git a/i18n/no/settings.qm b/i18n/no/settings.qm
new file mode 100644
index 0000000..b4d249a
--- a/dev/null
+++ b/i18n/no/settings.qm
Binary files differ
diff --git a/i18n/no/snake.po b/i18n/no/snake.po
new file mode 100644
index 0000000..5a3dd32
--- a/dev/null
+++ b/i18n/no/snake.po
@@ -0,0 +1,67 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 17:48:11 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: interface.cpp:127
+msgid "SnakeGame:: Score : %1 "
+msgstr " Poeng : %1"
+
+#: interface.cpp:175
+msgid "SnakeGame::GAME OVER!\n Your Score: %1"
+msgstr "SPILL OVER!\n Din poengsum: %1""
+
+#: interface.cpp:37
+msgid "SnakeGame::How To Play"
+msgstr "Hvordan spille"
+
+#: interface.cpp:217
+msgid "SnakeGame::How to Play Snake"
+msgstr "Hvordan spille Slange"
+
+#: interface.cpp:33
+msgid "SnakeGame::New Game"
+msgstr "Nytt spill"
+
+#: interface.cpp:91
+msgid "SnakeGame::Press Any Key To Start"
+msgstr "Trykk en tast for starte"
+
+#: interface.cpp:192
+msgid "SnakeGame::Press Any Key to Begin a New Game."
+msgstr "Trykk en tast for starte et nytt spill."
+
+#: interface.cpp:41
+msgid "SnakeGame::Quit"
+msgstr "Slutt"
+
+#: interface.cpp:73
+msgid "SnakeGame::SNAKE!"
+msgstr "SLANGE!"
+
+
+#: interface.cpp:83
+msgid "SnakeGame::"
+"Use the arrow keys to guide the\n"
+"snake to eat the mouse. You must not\n"
+"crash into the walls, edges or its tail."
+msgstr "Bruk piltastene for hjelpe slangen\n"
+"til spise musen. Du m unng kollidere\n"
+"med veggene eller slangens hale."
+
+#: interface.cpp:218
+msgid "SnakeGame::"
+"Use the arrow keys\nto guide the snake\n"
+"to eat the mouse.\nYou must not crash\ninto the"
+" walls, edges\nor its tail."
+msgstr "Bruk piltastene for hjelpe slangen\n"
+"til spise musen. Du m unng kollidere\n"
+"med veggene eller slangens hale."
+
diff --git a/i18n/no/snake.qm b/i18n/no/snake.qm
new file mode 100644
index 0000000..69bdc1b
--- a/dev/null
+++ b/i18n/no/snake.qm
Binary files differ
diff --git a/i18n/no/solitaire.po b/i18n/no/solitaire.po
new file mode 100644
index 0000000..45e3490
--- a/dev/null
+++ b/i18n/no/solitaire.po
@@ -0,0 +1,157 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:08:21 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: solitaire.cpp:775
+msgid "CanvasCardWindow::&About"
+msgstr "&Om"
+
+#: solitaire.cpp:768
+msgid "CanvasCardWindow::&Change Card Backs"
+msgstr "&Forandre kortenes bakside"
+
+#: solitaire.cpp:762
+msgid "CanvasCardWindow::&Close"
+msgstr "&Lukk"
+
+#: solitaire.cpp:763
+msgid "CanvasCardWindow::&File"
+msgstr "&Fil"
+
+#: solitaire.cpp:777
+msgid "CanvasCardWindow::&Help"
+msgstr "&Hjelp"
+
+#: solitaire.cpp:759
+msgid "CanvasCardWindow::&New Game of Solitaire"
+msgstr "Nytt spill: Kabal"
+
+#: solitaire.cpp:760
+msgid "CanvasCardWindow::&New Game of Freecell"
+msgstr "Nytt spill: Freecell"
+
+#: solitaire.cpp:770
+msgid "CanvasCardWindow::&Settings"
+msgstr "&Innstillinger"
+
+#: solitaire.cpp:769
+msgid "CanvasCardWindow::&Snap On/Off"
+msgstr "&Snepp av/p"
+
+#: solitaire.cpp:829
+msgid "CanvasCardWindow::"
+"<h3>About Qt Card Games</h3>"
+"<p>"
+"These games were implemented<br>easily using Qt.<br>"
+"The canvas widget was used<br> as the basis"
+"on which<br>the playing area is drawn.<br>"
+"Each card is an object on the canvas,<br>as "
+"are the decorations.<br>All the animation is "
+"done by Qt."
+"<p>"
+msgstr ""
+
+#: solitaire.cpp:864
+msgid "CanvasCardWindow::"
+"<h3>Freecell</h3>"
+"<p>"
+"The object of the game is to stack all the<br>"
+"cards on the top right 4 piles from the Aces<br>"
+"to the Kings in suit. The rules are that<br>"
+"you can only move red cards of the next<br>"
+"lowest values on top of black cards, or<br>"
+"or black ones on to red ones in order.<br>"
+"You can move any card to the remaining<br>"
+"vacant freecells to help you move the cards."
+"<p>Good luck and enjoy playing Freecell!"
+"<p>"
+msgstr ""
+
+#: solitaire.cpp:850
+msgid "CanvasCardWindow::"
+"<h3>Solitaire</h3>"
+"<p>"
+"The object of the game is to stack all the<br>"
+"cards on the top piles from the Aces to<br>"
+"the Kings in suit. The rules are that you<br>"
+"can only move a red card of the next lowest<br>"
+"values on top of black cards in the lower<br>"
+"playing area, or a black on a red in order.<br>"
+"You can get new cards from the face down<br>"
+"stack to help you move the cards."
+"<p>Good luck and enjoy playing Solitaire!"
+"<p>"
+msgstr ""
+
+#: solitaire.cpp:799
+msgid "CanvasCardWindow::About"
+msgstr "Om"
+
+#: solitaire.cpp:791
+msgid "CanvasCardWindow::Change Card Backs"
+msgstr "Forandre kortenes bakside"
+
+#: solitaire.cpp:793
+msgid "CanvasCardWindow::Change Cards Drawn"
+msgstr "Forandre antall kort som trekkes"
+
+#: solitaire.cpp:785
+msgid "CanvasCardWindow::Close"
+msgstr "Lukk"
+
+#: solitaire.cpp:881
+msgid "CanvasCardWindow::Dismiss"
+msgstr ""
+
+#: solitaire.cpp:786
+msgid "CanvasCardWindow::File"
+msgstr "Fil"
+
+#: solitaire.cpp:691
+msgid "CanvasCardWindow::Freecell"
+msgstr "Freecell"
+
+#: solitaire.cpp:802
+msgid "CanvasCardWindow::Help"
+msgstr "Hjelp"
+
+#: solitaire.cpp:782
+msgid "CanvasCardWindow::New Game of Solitaire"
+msgstr "Nytt spill: Kabal"
+
+#: solitaire.cpp:783
+msgid "CanvasCardWindow::New Game of Freecell"
+msgstr "Nytt spill: Freecell"
+
+#: solitaire.cpp:828
+msgid "CanvasCardWindow::Qt Card Game Example"
+msgstr "Qt kortspilleksempel"
+
+#: solitaire.cpp:863
+msgid "CanvasCardWindow::Qt Freecell"
+msgstr "Qt Freecell"
+
+#: solitaire.cpp:889
+msgid "CanvasCardWindow::Qt Solitaire"
+msgstr "Qt Kabal"
+
+#: solitaire.cpp:794
+msgid "CanvasCardWindow::Settings"
+msgstr "Innstillinger"
+
+#: solitaire.cpp:792
+msgid "CanvasCardWindow::Snap On/Off"
+msgstr "Magnet av/p"
+
+#: solitaire.cpp:677
+msgid "CanvasCardWindow::Solitaire"
+msgstr "Kabal"
+
diff --git a/i18n/no/solitaire.qm b/i18n/no/solitaire.qm
new file mode 100644
index 0000000..c527e74
--- a/dev/null
+++ b/i18n/no/solitaire.qm
Binary files differ
diff --git a/i18n/no/spreadsheet.po b/i18n/no/spreadsheet.po
new file mode 100644
index 0000000..9985d98
--- a/dev/null
+++ b/i18n/no/spreadsheet.po
@@ -0,0 +1,48 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:35:15 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: pimspreadsheetwindow.cpp:61
+msgid "PIMSpreadsheetWindow::Edit"
+msgstr "Rediger"
+
+#: pimspreadsheetwindow.cpp:60
+msgid "PIMSpreadsheetWindow::File"
+msgstr "Fil"
+
+#: pimspreadsheetwindow.cpp:55
+msgid "PIMSpreadsheetWindow::Clear Cell"
+msgstr "Tm Felt"
+
+#: pimspreadsheetwindow.cpp:46
+msgid "PIMSpreadsheetWindow::Close"
+msgstr "Lukk"
+
+#: pimspreadsheetwindow.cpp:50
+msgid "PIMSpreadsheetWindow::Equation"
+msgstr "Formel"
+
+#: pimspreadsheetwindow.cpp:38
+msgid "PIMSpreadsheetWindow::New"
+msgstr "Ny"
+
+#: pimspreadsheetwindow.cpp:42
+msgid "PIMSpreadsheetWindow::Open"
+msgstr "pne"
+
+#: pimspreadsheetwindow.cpp:19
+msgid "PIMSpreadsheetWindow::Spreadsheet"
+msgstr "Regneark"
+
+#: spreadsheetwidget.cpp:19
+msgid "SpreadsheetWidget::SpreadsheetWidget"
+msgstr "Regnearkvindu"
+
diff --git a/i18n/no/spreadsheet.qm b/i18n/no/spreadsheet.qm
new file mode 100644
index 0000000..0fa6c9e
--- a/dev/null
+++ b/i18n/no/spreadsheet.qm
Binary files differ
diff --git a/i18n/no/sysinfo.po b/i18n/no/sysinfo.po
new file mode 100644
index 0000000..af96823
--- a/dev/null
+++ b/i18n/no/sysinfo.po
@@ -0,0 +1,44 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-22 14:42:10 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: memory.cpp:65
+msgid "MemoryInfo::Buffers (%1 kB)"
+msgstr "Buffere (%1 kB)"
+
+#: memory.cpp:66
+msgid "MemoryInfo::Cached (%1 kB)"
+msgstr "Cache (%1 kB)"
+
+#: memory.cpp:67
+msgid "MemoryInfo::Free (%1 kB)"
+msgstr "Ledig (%1 kB)"
+
+#: memory.cpp:68
+msgid "MemoryInfo::Total Memory: %1 kB"
+msgstr "Tilsammen: %1 kB"
+
+#: memory.cpp:64
+msgid "MemoryInfo::Used (%1 kB)"
+msgstr "Brukt (%1 kB)"
+
+#: sysinfo.cpp:16
+msgid "SystemInfo::Load"
+msgstr "Last"
+
+#: sysinfo.cpp:15
+msgid "SystemInfo::Memory"
+msgstr "Minne"
+
+#: sysinfo.cpp:13
+msgid "SystemInfo::System Information"
+msgstr "Systeminformasjon"
+
diff --git a/i18n/no/sysinfo.qm b/i18n/no/sysinfo.qm
new file mode 100644
index 0000000..a7f2dea
--- a/dev/null
+++ b/i18n/no/sysinfo.qm
Binary files differ
diff --git a/i18n/no/tetrix.po b/i18n/no/tetrix.po
new file mode 100644
index 0000000..6bb8665
--- a/dev/null
+++ b/i18n/no/tetrix.po
@@ -0,0 +1,36 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 19:01:54 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: qtetrix.cpp:100
+msgid "QTetrix::Level"
+msgstr "Niv"
+
+#: qtetrix.cpp:91
+msgid "QTetrix::Next"
+msgstr "Neste"
+
+#: qtetrix.cpp:104
+msgid "QTetrix::Removed"
+msgstr "Fjernet"
+
+#: qtetrix.cpp:96
+msgid "QTetrix::Score"
+msgstr "Poengsum"
+
+#: qtetrix.cpp:116
+msgid "QTetrix::Start"
+msgstr "Start"
+
+#: qtetrix.cpp:79
+msgid "QTetrix::Tetrix"
+msgstr "Tetrix"
+
diff --git a/i18n/no/tetrix.qm b/i18n/no/tetrix.qm
new file mode 100644
index 0000000..193155a
--- a/dev/null
+++ b/i18n/no/tetrix.qm
Binary files differ
diff --git a/i18n/no/textedit.po b/i18n/no/textedit.po
new file mode 100644
index 0000000..08759ad
--- a/dev/null
+++ b/i18n/no/textedit.po
@@ -0,0 +1,108 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-02-23 18:22:10 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+
+#: textedit.cpp:110
+msgid "TextEdit::Edit"
+msgstr "Editer"
+
+#: textedit.cpp:109
+msgid "TextEdit::File"
+msgstr "Fil"
+
+#: textedit.cpp:102
+msgid "TextEdit::Insert"
+msgstr "Sett inn"
+
+#: textedit.cpp:115
+msgid "TextEdit::Bold"
+msgstr ""
+
+#: textedit.cpp:191
+msgid "TextEdit::Bullet List"
+msgstr ""
+
+#: textedit.cpp:140
+msgid "TextEdit::Center"
+msgstr ""
+
+#: textedit.cpp:170
+msgid "TextEdit::Close Find"
+msgstr "Lukk Finn"
+
+#: textedit.cpp:69
+msgid "TextEdit::Close"
+msgstr "Lukk"
+
+#: textedit.cpp:79
+msgid "TextEdit::Copy"
+msgstr "Kopier"
+
+#: textedit.cpp:74
+msgid "TextEdit::Cut"
+msgstr "Klipp"
+
+#: textedit.cpp:194
+msgid "TextEdit::Enumerated List"
+msgstr ""
+
+#: textedit.cpp:94
+msgid "TextEdit::Find Next"
+msgstr "Finn Neste"
+
+#: textedit.cpp:89
+msgid "TextEdit::Find..."
+msgstr "Finn..."
+
+#: textedit.cpp:120
+msgid "TextEdit::Italic"
+msgstr ""
+
+#: textedit.cpp:134
+msgid "TextEdit::Left"
+msgstr ""
+
+#: textedit.cpp:61
+msgid "TextEdit::New"
+msgstr "Ny"
+
+#: textedit.cpp:65
+msgid "TextEdit::Open"
+msgstr "Åpne"
+
+#: textedit.cpp:84
+msgid "TextEdit::Paste"
+msgstr "Lim"
+
+#: textedit.cpp:145
+msgid "TextEdit::Right"
+msgstr ""
+
+#: textedit.cpp:188
+msgid "TextEdit::Standard"
+msgstr ""
+
+#: textedit.cpp:104
+msgid "TextEdit::Table..."
+msgstr ""
+
+#: textedit.cpp:570
+msgid "TextEdit::Text Editor"
+msgstr "Teksteditor"
+
+#: textedit.cpp:125
+msgid "TextEdit::Underline"
+msgstr ""
+
+#: textedit.cpp:569
+msgid "TextEdit::Unnamed"
+msgstr "Uten navn"
+
diff --git a/i18n/no/textedit.qm b/i18n/no/textedit.qm
new file mode 100644
index 0000000..8b486e7
--- a/dev/null
+++ b/i18n/no/textedit.qm
Binary files differ
diff --git a/i18n/no/todo.po b/i18n/no/todo.po
new file mode 100644
index 0000000..a709bc6
--- a/dev/null
+++ b/i18n/no/todo.po
@@ -0,0 +1,148 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 14:58:06 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: todoentry.cpp:63
+msgid "NewTaskDialogBase::&Description:"
+msgstr "&Beskrivelse"
+
+#: todoentry.cpp:86
+msgid "NewTaskDialogBase::&Done"
+msgstr "&Ferdig"
+
+#: todoentry.cpp:40
+msgid "NewTaskDialogBase::&Priority:"
+msgstr "&Prioritet"
+
+#: todoentry.cpp:45
+msgid "NewTaskDialogBase::1 - Very High"
+msgstr "1 - Svrt Hy"
+
+#: todoentry.cpp:46
+msgid "NewTaskDialogBase::2 - High"
+msgstr "2 - Hy"
+
+#: todoentry.cpp:47
+msgid "NewTaskDialogBase::3 - Normal"
+msgstr "3 - Normal"
+
+#: todoentry.cpp:48
+msgid "NewTaskDialogBase::4 - Low"
+msgstr "4 - Lav"
+
+#: todoentry.cpp:49
+msgid "NewTaskDialogBase::5 - Very Low"
+msgstr "5 - Svrt Lav"
+
+#: todoentry.cpp:68
+msgid "NewTaskDialogBase::<Nothing>"
+msgstr "<Ingenting>"
+
+#: todoentry.cpp:57
+msgid "NewTaskDialogBase::Business"
+msgstr ""
+
+#: todoentry.cpp:35
+msgid "NewTaskDialogBase::C&ategory:"
+msgstr "&Kategori"
+
+#: todoentry.cpp:90
+msgid "NewTaskDialogBase::D&ue"
+msgstr "F&rist"
+
+#: todoentry.cpp:71
+msgid "NewTaskDialogBase::Dinner"
+msgstr "Middag"
+
+#: todoentry.cpp:119
+msgid "NewTaskDialogBase::Image"
+msgstr "Bilde"
+
+#: todoentry.cpp:94
+msgid "NewTaskDialogBase::Jan 02 2000"
+msgstr "02 Jan 2000"
+
+#: todoentry.cpp:70
+msgid "NewTaskDialogBase::Lunch"
+msgstr "Lunch"
+
+#: todoentry.cpp:69
+msgid "NewTaskDialogBase::Meeting"
+msgstr "Mte"
+
+#: todoentry.cpp:25
+msgid "NewTaskDialogBase::New Task"
+msgstr "Ny Oppgave"
+
+#: todoentry.cpp:56
+msgid "NewTaskDialogBase::Private"
+msgstr "Privat"
+
+#: todoentry.cpp:110
+msgid "NewTaskDialogBase::Text"
+msgstr "Tekst"
+
+#: todoentry.cpp:72
+msgid "NewTaskDialogBase::Travel"
+msgstr "Reise"
+
+#: todotable.cpp:124
+msgid "TodoTable::C."
+msgstr "K."
+
+#: todotable.cpp:126
+msgid "TodoTable::Description"
+msgstr "Beskrivelse"
+
+#: todotable.cpp:125
+msgid "TodoTable::Prior."
+msgstr "Prior."
+
+#: mainwindow.cpp:140
+msgid "TodoWindow::<Nothing>"
+msgstr "<Ingenting>"
+
+#: mainwindow.cpp:47
+msgid "TodoWindow::Close"
+msgstr "Lukk"
+
+#: mainwindow.cpp:57
+msgid "TodoWindow::Delete"
+msgstr "Slett"
+
+#: mainwindow.cpp:125
+msgid "TodoWindow::Edit Task"
+msgstr "Rediger Oppgave"
+
+#: mainwindow.cpp:49
+msgid "TodoWindow::Edit"
+msgstr "Rediger"
+
+#: mainwindow.cpp:65
+msgid "TodoWindow::File"
+msgstr "Fil"
+
+#: mainwindow.cpp:41
+msgid "TodoWindow::New Task"
+msgstr "Ny Oppgave"
+
+#: mainwindow.cpp:66
+msgid "TodoWindow::Task"
+msgstr "Oppgave"
+
+#: mainwindow.cpp:141
+msgid "TodoWindow::Todo"
+msgstr "Oppgaver"
+
+#: mainwindow.cpp:141
+msgid "TodoWindow::You haven't entered a description!"
+msgstr "Du har ikke skrevet inn en beskrivelse!"
+
diff --git a/i18n/no/todo.qm b/i18n/no/todo.qm
new file mode 100644
index 0000000..4288ccf
--- a/dev/null
+++ b/i18n/no/todo.qm
Binary files differ
diff --git a/i18n/no/wordgame.po b/i18n/no/wordgame.po
new file mode 100644
index 0000000..03cc599
--- a/dev/null
+++ b/i18n/no/wordgame.po
@@ -0,0 +1,88 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-03-07 18:31:18 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+
+#: newgamebase.cpp:66
+msgid "NewGameBase::"
+msgstr ""
+
+#: newgamebase.cpp:102
+msgid "NewGameBase::&Cancel"
+msgstr "&Avbryt"
+
+#: newgamebase.cpp:96
+msgid "NewGameBase::&OK"
+msgstr "&OK"
+
+#: newgamebase.cpp:67
+msgid "NewGameBase::AI3: Smart AI player"
+msgstr "AI3: Smart AI-spiller"
+
+#: newgamebase.cpp:19
+msgid "NewGameBase::New Game"
+msgstr "Nytt spill"
+
+#: newgamebase.cpp:26
+msgid "NewGameBase::Players"
+msgstr "Spillere"
+
+#: newgamebase.cpp:73
+msgid "NewGameBase::Rules"
+msgstr "Regler"
+
+#: rulesbase.cpp:93
+msgid "RulesBase::&Cancel"
+msgstr "&Avbryt"
+
+#: rulesbase.cpp:87
+msgid "RulesBase::&OK"
+msgstr "&OK"
+
+#: rulesbase.cpp:41
+msgid "RulesBase::Board"
+msgstr "Brett"
+
+#: rulesbase.cpp:80
+msgid "RulesBase::Delete"
+msgstr "Slett"
+
+#: rulesbase.cpp:68
+msgid "RulesBase::Edit..."
+msgstr "Rediger..."
+
+#: rulesbase.cpp:22
+msgid "RulesBase::Game Rules"
+msgstr "Spilleregler"
+
+#: rulesbase.cpp:33
+msgid "RulesBase::Name:"
+msgstr "Navn:"
+
+#: rulesbase.cpp:52
+msgid "RulesBase::Size:"
+msgstr "Strrelse:"
+
+#: wordgame.cpp:336
+msgid "WordGame::Do you want to end the game early?"
+msgstr "Vil du avslutte spillet?"
+
+#: wordgame.cpp:335
+msgid "WordGame::End game"
+msgstr "Slutt spillet"
+
+#: wordgame.cpp:337
+msgid "WordGame::No"
+msgstr "Nei"
+
+#: wordgame.cpp:337
+msgid "WordGame::Yes"
+msgstr "Ja"
+
diff --git a/i18n/no/wordgame.qm b/i18n/no/wordgame.qm
new file mode 100644
index 0000000..794a414
--- a/dev/null
+++ b/i18n/no/wordgame.qm
Binary files differ
diff --git a/i18n/qpe-i18n-de.control b/i18n/qpe-i18n-de.control
new file mode 100644
index 0000000..98b06f9
--- a/dev/null
+++ b/i18n/qpe-i18n-de.control
@@ -0,0 +1,9 @@
+Files: i18n/de/.directory i18n/de/*.qm etc/dict/dawg.de
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: i18n: Deutsch
+ German UI texts and dictionary for Qtopia environment.
diff --git a/i18n/qpe-i18n-en.control b/i18n/qpe-i18n-en.control
new file mode 100644
index 0000000..d732114
--- a/dev/null
+++ b/i18n/qpe-i18n-en.control
@@ -0,0 +1,9 @@
+Files: i18n/en/.directory etc/dict/dawg
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: i18n: English
+ English dictionary for Qtopia environment.
diff --git a/i18n/qpe-i18n-hu.control b/i18n/qpe-i18n-hu.control
new file mode 100644
index 0000000..04ffefc
--- a/dev/null
+++ b/i18n/qpe-i18n-hu.control
@@ -0,0 +1,10 @@
+Files: i18n/hu/.directory i18n/hu/*.qm etc/dict/dawg.hu
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: i18n: Magyar
+ Hungarian UI texts and dictionary for Qtopia environment.
diff --git a/i18n/qpe-i18n-ja.control b/i18n/qpe-i18n-ja.control
new file mode 100644
index 0000000..0e6404b
--- a/dev/null
+++ b/i18n/qpe-i18n-ja.control
@@ -0,0 +1,10 @@
+Files: i18n/ja/.directory i18n/ja/*.qm
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION), qpf-cyberbit-120-50-t10
+Description: i18n: Japanese
+ Japanese UI texts for Qtopia environment.
diff --git a/i18n/qpe-i18n-ko.control b/i18n/qpe-i18n-ko.control
new file mode 100644
index 0000000..2f3ac2c
--- a/dev/null
+++ b/i18n/qpe-i18n-ko.control
@@ -0,0 +1,10 @@
+Files: i18n/ko/.directory i18n/ko/*.qm
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION), qpf-cyberbit-120-50-t10
+Description: i18n: Korean
+ Korean UI texts for Qtopia environment.
diff --git a/i18n/qpe-i18n-no.control b/i18n/qpe-i18n-no.control
new file mode 100644
index 0000000..d570123
--- a/dev/null
+++ b/i18n/qpe-i18n-no.control
@@ -0,0 +1,10 @@
+Files: i18n/no/.directory i18n/no/*.qm etc/dict/dawg.no
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: i18n: Norsk
+ Norwegian UI texts and dictionary for Qtopia environment.
diff --git a/i18n/qpe-i18n-zh-CN.control b/i18n/qpe-i18n-zh-CN.control
new file mode 100644
index 0000000..b218f32
--- a/dev/null
+++ b/i18n/qpe-i18n-zh-CN.control
@@ -0,0 +1,10 @@
+Files: i18n/zh_CN/.directory i18n/zh_CN/*.qm
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION), qpf-cyberbit-120-50-t10
+Description: i18n: Chinese
+ Chinese UI texts for Qtopia environment.
diff --git a/i18n/qpe-i18n-zh-TW.control b/i18n/qpe-i18n-zh-TW.control
new file mode 100644
index 0000000..4b9574c
--- a/dev/null
+++ b/i18n/qpe-i18n-zh-TW.control
@@ -0,0 +1,10 @@
+Files: i18n/zh_TW/.directory i18n/zh_TW/*.qm
+Priority: optional
+Section: qpe/i18n
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION), qpf-cyberbit-120-50-t10
+Description: i18n: Chinese (TW)
+ Chinese UI texts for Qtopia environment.
diff --git a/i18n/zh_CN/.directory b/i18n/zh_CN/.directory
new file mode 100644
index 0000000..c8b24af
--- a/dev/null
+++ b/i18n/zh_CN/.directory
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Simplified Chinese
+Name[ja]=簡易中国語
+Name[zh_CN]=简体中文
+Name[hu]=Kínai (egyszerûsített)
diff --git a/i18n/zh_CN/textedit.po b/i18n/zh_CN/textedit.po
new file mode 100644
index 0000000..7855500
--- a/dev/null
+++ b/i18n/zh_CN/textedit.po
@@ -0,0 +1,108 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-02-26 16:39:53 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=GB2312\n"
+
+#: textedit.cpp:110
+msgid "TextEdit::Edit"
+msgstr "༭"
+
+#: textedit.cpp:109
+msgid "TextEdit::File"
+msgstr "ļ"
+
+#: textedit.cpp:102
+msgid "TextEdit::Insert"
+msgstr ""
+
+#: textedit.cpp:115
+msgid "TextEdit::Bold"
+msgstr ""
+
+#: textedit.cpp:191
+msgid "TextEdit::Bullet List"
+msgstr ""
+
+#: textedit.cpp:140
+msgid "TextEdit::Center"
+msgstr ""
+
+#: textedit.cpp:170
+msgid "TextEdit::Close Find"
+msgstr ""
+
+#: textedit.cpp:69
+msgid "TextEdit::Close"
+msgstr "ر"
+
+#: textedit.cpp:79
+msgid "TextEdit::Copy"
+msgstr ""
+
+#: textedit.cpp:74
+msgid "TextEdit::Cut"
+msgstr ""
+
+#: textedit.cpp:194
+msgid "TextEdit::Enumerated List"
+msgstr ""
+
+#: textedit.cpp:94
+msgid "TextEdit::Find Next"
+msgstr "һ"
+
+#: textedit.cpp:89
+msgid "TextEdit::Find..."
+msgstr "..."
+
+#: textedit.cpp:120
+msgid "TextEdit::Italic"
+msgstr ""
+
+#: textedit.cpp:134
+msgid "TextEdit::Left"
+msgstr ""
+
+#: textedit.cpp:61
+msgid "TextEdit::New"
+msgstr "½"
+
+#: textedit.cpp:65
+msgid "TextEdit::Open"
+msgstr ""
+
+#: textedit.cpp:84
+msgid "TextEdit::Paste"
+msgstr "ճ"
+
+#: textedit.cpp:145
+msgid "TextEdit::Right"
+msgstr ""
+
+#: textedit.cpp:188
+msgid "TextEdit::Standard"
+msgstr ""
+
+#: textedit.cpp:104
+msgid "TextEdit::Table..."
+msgstr ""
+
+#: textedit.cpp:570
+msgid "TextEdit::Text Editor"
+msgstr "ı༭"
+
+#: textedit.cpp:125
+msgid "TextEdit::Underline"
+msgstr ""
+
+#: textedit.cpp:569
+msgid "TextEdit::Unnamed"
+msgstr "δ"
+
diff --git a/i18n/zh_CN/textedit.qm b/i18n/zh_CN/textedit.qm
new file mode 100644
index 0000000..630b6b5
--- a/dev/null
+++ b/i18n/zh_CN/textedit.qm
Binary files differ
diff --git a/i18n/zh_TW/.directory b/i18n/zh_TW/.directory
new file mode 100644
index 0000000..ba621a1
--- a/dev/null
+++ b/i18n/zh_TW/.directory
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Name=Traditional Chinese
+Name[no]=Kinesisk(Tradisjonell)
+Name[ja]=伝統的中国語
+Name[zh_TW]=繁體中文
+Name[hu]=Kínai (hagyományos)
diff --git a/i18n/zh_TW/textedit.po b/i18n/zh_TW/textedit.po
new file mode 100644
index 0000000..6be37aa
--- a/dev/null
+++ b/i18n/zh_TW/textedit.po
@@ -0,0 +1,107 @@
+# This is a Qt message file in .po format. Each msgid starts with
+# a scope. This scope should *NOT* be translated - eg. translating
+# from French to English, "Foo::Bar" would be translated to "Pub",
+# not "Foo::Pub".
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"POT-Creation-Date: 2001-02-26 16:12:26 EST\n"
+"PO-Revision-Date: YYYY-MM-DD\n"
+"Last-Translator: FULLNAME <EMAIL@ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+
+#: textedit.cpp:110
+msgid "TextEdit::Edit"
+msgstr "編輯"
+
+#: textedit.cpp:109
+msgid "TextEdit::File"
+msgstr "檔案"
+
+#: textedit.cpp:102
+msgid "TextEdit::Insert"
+msgstr "插入"
+
+#: textedit.cpp:115
+msgid "TextEdit::Bold"
+msgstr ""
+
+#: textedit.cpp:191
+msgid "TextEdit::Bullet List"
+msgstr ""
+
+#: textedit.cpp:140
+msgid "TextEdit::Center"
+msgstr ""
+
+#: textedit.cpp:170
+msgid "TextEdit::Close Find"
+msgstr ""
+
+#: textedit.cpp:69
+msgid "TextEdit::Close"
+msgstr "關閉"
+
+#: textedit.cpp:79
+msgid "TextEdit::Copy"
+msgstr "複製"
+
+#: textedit.cpp:74
+msgid "TextEdit::Cut"
+msgstr "剪下"
+
+#: textedit.cpp:194
+msgid "TextEdit::Enumerated List"
+msgstr ""
+
+#: textedit.cpp:94
+msgid "TextEdit::Find Next"
+msgstr "尋找下一個"
+
+#: textedit.cpp:89
+msgid "TextEdit::Find..."
+msgstr "尋找..."
+
+#: textedit.cpp:120
+msgid "TextEdit::Italic"
+msgstr ""
+
+#: textedit.cpp:134
+msgid "TextEdit::Left"
+msgstr ""
+
+#: textedit.cpp:61
+msgid "TextEdit::New"
+msgstr "新的"
+
+#: textedit.cpp:65
+msgid "TextEdit::Open"
+msgstr "開啟"
+
+#: textedit.cpp:84
+msgid "TextEdit::Paste"
+msgstr "貼上"
+
+#: textedit.cpp:145
+msgid "TextEdit::Right"
+msgstr ""
+
+#: textedit.cpp:188
+msgid "TextEdit::Standard"
+msgstr ""
+
+#: textedit.cpp:104
+msgid "TextEdit::Table..."
+msgstr ""
+
+#: textedit.cpp:570
+msgid "TextEdit::Text Editor"
+msgstr "文字編輯器"
+
+#: textedit.cpp:125
+msgid "TextEdit::Underline"
+msgstr ""
+
+#: textedit.cpp:569
+msgid "TextEdit::Unnamed"
+msgstr "未命名"
diff --git a/i18n/zh_TW/textedit.qm b/i18n/zh_TW/textedit.qm
new file mode 100644
index 0000000..64f3e12
--- a/dev/null
+++ b/i18n/zh_TW/textedit.qm
Binary files differ
diff --git a/inputmethods/.cvsignore b/inputmethods/.cvsignore
new file mode 100644
index 0000000..f3c7a7c
--- a/dev/null
+++ b/inputmethods/.cvsignore
@@ -0,0 +1 @@
+Makefile
diff --git a/inputmethods/handwriting/.cvsignore b/inputmethods/handwriting/.cvsignore
new file mode 100644
index 0000000..285856f
--- a/dev/null
+++ b/inputmethods/handwriting/.cvsignore
@@ -0,0 +1,5 @@
+moc_*
+*.moc
+Makefile
+qimpenprefbase.h
+qimpenprefbase.cpp
diff --git a/inputmethods/handwriting/Makefile.in b/inputmethods/handwriting/Makefile.in
new file mode 100644
index 0000000..aabb5aa
--- a/dev/null
+++ b/inputmethods/handwriting/Makefile.in
@@ -0,0 +1,281 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/inputmethods/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qhandwriting
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = qimpenchar.h \
+ qimpenprofile.h \
+ qimpencombining.h \
+ qimpenhelp.h \
+ qimpeninput.h \
+ qimpenmatch.h \
+ qimpensetup.h \
+ qimpenstroke.h \
+ qimpenwidget.h \
+ qimpenwordpick.h \
+ handwritingimpl.h
+SOURCES = qimpenchar.cpp \
+ qimpenprofile.cpp \
+ qimpencombining.cpp \
+ qimpenhelp.cpp \
+ qimpeninput.cpp \
+ qimpenmatch.cpp \
+ qimpensetup.cpp \
+ qimpenstroke.cpp \
+ qimpenwidget.cpp \
+ qimpenwordpick.cpp \
+ handwritingimpl.cpp
+OBJECTS = qimpenchar.o \
+ qimpenprofile.o \
+ qimpencombining.o \
+ qimpenhelp.o \
+ qimpeninput.o \
+ qimpenmatch.o \
+ qimpensetup.o \
+ qimpenstroke.o \
+ qimpenwidget.o \
+ qimpenwordpick.o \
+ handwritingimpl.o \
+ qimpenprefbase.o
+INTERFACES = qimpenprefbase.ui
+UICDECLS = qimpenprefbase.h
+UICIMPLS = qimpenprefbase.cpp
+SRCMOC = moc_qimpenhelp.cpp \
+ moc_qimpeninput.cpp \
+ moc_qimpenmatch.cpp \
+ moc_qimpensetup.cpp \
+ moc_qimpenwidget.cpp \
+ moc_qimpenwordpick.cpp \
+ moc_qimpenprefbase.cpp
+OBJMOC = moc_qimpenhelp.o \
+ moc_qimpeninput.o \
+ moc_qimpenmatch.o \
+ moc_qimpensetup.o \
+ moc_qimpenwidget.o \
+ moc_qimpenwordpick.o \
+ moc_qimpenprefbase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake handwriting.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+qimpenchar.o: qimpenchar.cpp \
+ qimpencombining.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+qimpenprofile.o: qimpenprofile.cpp \
+ qimpencombining.h \
+ qimpenchar.h \
+ qimpenstroke.h \
+ qimpenprofile.h
+
+qimpencombining.o: qimpencombining.cpp \
+ qimpencombining.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+qimpenhelp.o: qimpenhelp.cpp \
+ qimpenwidget.h \
+ qimpenchar.h \
+ qimpenstroke.h \
+ qimpencombining.h \
+ qimpenmatch.h \
+ qimpenhelp.h \
+ qimpenprofile.h
+
+qimpeninput.o: qimpeninput.cpp \
+ qimpenwidget.h \
+ qimpenchar.h \
+ qimpenstroke.h \
+ qimpensetup.h \
+ qimpenprofile.h \
+ qimpeninput.h \
+ qimpencombining.h \
+ qimpenwordpick.h \
+ qimpenmatch.h \
+ qimpenhelp.h
+
+qimpenmatch.o: qimpenmatch.cpp \
+ qimpenmatch.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+qimpensetup.o: qimpensetup.cpp \
+ qimpenwidget.h \
+ qimpenchar.h \
+ qimpenstroke.h \
+ qimpenprefbase.h \
+ qimpensetup.h \
+ qimpenprofile.h
+
+qimpenstroke.o: qimpenstroke.cpp \
+ qimpenstroke.h
+
+qimpenwidget.o: qimpenwidget.cpp \
+ qimpenchar.h \
+ qimpenstroke.h \
+ qimpenwidget.h
+
+qimpenwordpick.o: qimpenwordpick.cpp \
+ qimpenwordpick.h \
+ qimpenmatch.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+handwritingimpl.o: handwritingimpl.cpp \
+ qimpeninput.h \
+ qimpenprofile.h \
+ qimpenchar.h \
+ qimpenstroke.h \
+ handwritingimpl.h
+
+qimpenprefbase.h: qimpenprefbase.ui
+ $(UIC) qimpenprefbase.ui -o $(INTERFACE_DECL_PATH)/qimpenprefbase.h
+
+qimpenprefbase.cpp: qimpenprefbase.ui
+ $(UIC) qimpenprefbase.ui -i qimpenprefbase.h -o qimpenprefbase.cpp
+
+qimpenprefbase.o: qimpenprefbase.cpp \
+ qimpenprefbase.h \
+ qimpenprefbase.ui
+
+moc_qimpenhelp.o: moc_qimpenhelp.cpp \
+ qimpenhelp.h \
+ qimpenchar.h \
+ qimpenstroke.h \
+ qimpenprofile.h
+
+moc_qimpeninput.o: moc_qimpeninput.cpp \
+ qimpeninput.h \
+ qimpenprofile.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+moc_qimpenmatch.o: moc_qimpenmatch.cpp \
+ qimpenmatch.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+moc_qimpensetup.o: moc_qimpensetup.cpp \
+ qimpensetup.h \
+ qimpenprofile.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+moc_qimpenwidget.o: moc_qimpenwidget.cpp \
+ qimpenwidget.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+moc_qimpenwordpick.o: moc_qimpenwordpick.cpp \
+ qimpenwordpick.h \
+ qimpenmatch.h \
+ qimpenchar.h \
+ qimpenstroke.h
+
+moc_qimpenprefbase.o: moc_qimpenprefbase.cpp \
+ qimpenprefbase.h
+
+moc_qimpenhelp.cpp: qimpenhelp.h
+ $(MOC) qimpenhelp.h -o moc_qimpenhelp.cpp
+
+moc_qimpeninput.cpp: qimpeninput.h
+ $(MOC) qimpeninput.h -o moc_qimpeninput.cpp
+
+moc_qimpenmatch.cpp: qimpenmatch.h
+ $(MOC) qimpenmatch.h -o moc_qimpenmatch.cpp
+
+moc_qimpensetup.cpp: qimpensetup.h
+ $(MOC) qimpensetup.h -o moc_qimpensetup.cpp
+
+moc_qimpenwidget.cpp: qimpenwidget.h
+ $(MOC) qimpenwidget.h -o moc_qimpenwidget.cpp
+
+moc_qimpenwordpick.cpp: qimpenwordpick.h
+ $(MOC) qimpenwordpick.h -o moc_qimpenwordpick.cpp
+
+moc_qimpenprefbase.cpp: qimpenprefbase.h
+ $(MOC) qimpenprefbase.h -o moc_qimpenprefbase.cpp
+
+
diff --git a/inputmethods/handwriting/handwriting.pro b/inputmethods/handwriting/handwriting.pro
new file mode 100644
index 0000000..999552b
--- a/dev/null
+++ b/inputmethods/handwriting/handwriting.pro
@@ -0,0 +1,33 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = qimpenchar.h \
+ qimpenprofile.h \
+ qimpencombining.h \
+ qimpenhelp.h \
+ qimpeninput.h \
+ qimpenmatch.h \
+ qimpensetup.h \
+ qimpenstroke.h \
+ qimpenwidget.h \
+ qimpenwordpick.h \
+ handwritingimpl.h
+SOURCES = qimpenchar.cpp \
+ qimpenprofile.cpp \
+ qimpencombining.cpp \
+ qimpenhelp.cpp \
+ qimpeninput.cpp \
+ qimpenmatch.cpp \
+ qimpensetup.cpp \
+ qimpenstroke.cpp \
+ qimpenwidget.cpp \
+ qimpenwordpick.cpp \
+ handwritingimpl.cpp
+INTERFACES = qimpenprefbase.ui
+TARGET = qhandwriting
+DESTDIR = ../../plugins/inputmethods
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include ../../taskbar
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libqhandwriting.ts
diff --git a/inputmethods/handwriting/handwritingimpl.cpp b/inputmethods/handwriting/handwritingimpl.cpp
new file mode 100644
index 0000000..c39e1aa
--- a/dev/null
+++ b/inputmethods/handwriting/handwritingimpl.cpp
@@ -0,0 +1,113 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qapplication.h>
+#include <qwidget.h>
+#include <qpixmap.h>
+#include "qimpeninput.h"
+#include "handwritingimpl.h"
+
+/* XPM */
+static const char * pen_xpm[] = {
+"28 13 9 1",
+" c None",
+". c #000000",
+"+ c #FFE993",
+"@ c #8292FF",
+"# c #F7C500",
+"$ c #C69F00",
+"% c #0022FF",
+"& c #000F72",
+"* c #A3732C",
+" . ",
+" .+. ",
+" .@#$. ",
+" .@%&. ",
+" .@%&. ",
+" . .@%&. ",
+" . .@%&. ",
+" . .@%&. ",
+" ... ... .. .@%&. ",
+" . . . . . .*.&. ",
+" . . . . . .**. ",
+" ... ... .. ... ",
+" "};
+
+HandwritingImpl::HandwritingImpl()
+ : input(0), icn(0), ref(0)
+{
+}
+
+HandwritingImpl::~HandwritingImpl()
+{
+ delete input;
+ delete icn;
+}
+
+QWidget *HandwritingImpl::inputMethod( QWidget *parent, Qt::WFlags f )
+{
+ if ( !input )
+ input = new QIMPenInput( parent, "Handwriting", f );
+ return input;
+}
+
+void HandwritingImpl::resetState()
+{
+ if ( input )
+ input->resetState();
+}
+
+QPixmap *HandwritingImpl::icon()
+{
+ if ( !icn )
+ icn = new QPixmap( (const char **)pen_xpm );
+ return icn;
+}
+
+QString HandwritingImpl::name()
+{
+ return qApp->translate( "InputMethods", "Handwriting" );
+}
+
+void HandwritingImpl::onKeyPress( QObject *receiver, const char *slot )
+{
+ if ( input )
+ QObject::connect( input, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot );
+}
+
+#ifndef QT_NO_COMPONENT
+QRESULT HandwritingImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_InputMethod )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( HandwritingImpl )
+}
+#endif
diff --git a/inputmethods/handwriting/handwritingimpl.h b/inputmethods/handwriting/handwritingimpl.h
new file mode 100644
index 0000000..1215853
--- a/dev/null
+++ b/inputmethods/handwriting/handwritingimpl.h
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef HANDWRITINGIMPL_H
+#define HANDWRITINGIMPL_H
+
+#include <qpe/inputmethodinterface.h>
+
+class QIMPenInput;
+class QPixmap;
+
+class HandwritingImpl : public InputMethodInterface
+{
+public:
+ HandwritingImpl();
+ virtual ~HandwritingImpl();
+
+#ifndef QT_NO_COMPONENT
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+#endif
+
+ virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f );
+ virtual void resetState();
+ virtual QPixmap *icon();
+ virtual QString name();
+ virtual void onKeyPress( QObject *receiver, const char *slot );
+
+private:
+ QIMPenInput *input;
+ QPixmap *icn;
+ ulong ref;
+};
+
+#endif
diff --git a/inputmethods/handwriting/qimpenchar.cpp b/inputmethods/handwriting/qimpenchar.cpp
new file mode 100644
index 0000000..9c38ec9
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenchar.cpp
@@ -0,0 +1,505 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qfile.h>
+#include <qtl.h>
+#include <math.h>
+#include <limits.h>
+#include <errno.h>
+#include <qdatastream.h>
+#include "qimpencombining.h"
+#include "qimpenchar.h"
+
+#define QIMPEN_MATCH_THRESHOLD 200000
+
+const QIMPenSpecialKeys qimpen_specialKeys[] = {
+ { Qt::Key_Escape, "[Esc]" },
+ { Qt::Key_Tab, "[Tab]" },
+ { Qt::Key_Backspace, "[BackSpace]" },
+ { Qt::Key_Return, "[Return]" },
+ { QIMPenChar::Caps, "[Uppercase]" },
+ { QIMPenChar::CapsLock, "[Caps Lock]" },
+ { QIMPenChar::Shortcut, "[Shortcut]" },
+ { QIMPenChar::Punctuation, "[Punctuation]" },
+ { QIMPenChar::Symbol, "[Symbol]" },
+ { QIMPenChar::Extended, "[Extended]" },
+ { Qt::Key_unknown, 0 } };
+
+
+/*!
+ \class QIMPenChar qimpenchar.h
+
+ Handles a single character. Can calculate closeness of match to
+ another character.
+*/
+
+QIMPenChar::QIMPenChar()
+{
+ flags = 0;
+ strokes.setAutoDelete( TRUE );
+}
+
+QIMPenChar::QIMPenChar( const QIMPenChar &chr )
+{
+ strokes.setAutoDelete( TRUE );
+ ch = chr.ch;
+ flags = chr.flags;
+ d = chr.d;
+ QIMPenStrokeIterator it( chr.strokes );
+ while ( it.current() ) {
+ strokes.append( new QIMPenStroke( *it.current() ) );
+ ++it;
+ }
+}
+
+QIMPenChar &QIMPenChar::operator=( const QIMPenChar &chr )
+{
+ strokes.clear();
+ ch = chr.ch;
+ flags = chr.flags;
+ d = chr.d;
+ QIMPenStrokeIterator it( chr.strokes );
+ while ( it.current() ) {
+ strokes.append( new QIMPenStroke( *it.current() ) );
+ ++it;
+ }
+
+ return *this;
+}
+
+QString QIMPenChar::name() const
+{
+ QString n;
+
+ if ( (ch & 0x0000FFFF) == 0 ) {
+ int code = ch >> 16;
+ for ( int i = 0; qimpen_specialKeys[i].code != Qt::Key_unknown; i++ ) {
+ if ( qimpen_specialKeys[i].code == code ) {
+ n = qimpen_specialKeys[i].name;
+ break;
+ }
+ }
+ } else {
+ n = QChar( ch & 0x0000FFFF );
+ }
+
+ return n;
+}
+
+void QIMPenChar::clear()
+{
+ ch = 0;
+ flags = 0;
+ d = QString::null;
+ strokes.clear();
+}
+
+unsigned int QIMPenChar::strokeLength( int s ) const
+{
+ QIMPenStrokeIterator it( strokes );
+ while ( it.current() && s ) {
+ ++it;
+ --s;
+ }
+
+ if ( it.current() )
+ return it.current()->length();
+
+ return 0;
+}
+
+/*!
+ Add a stroke to the character
+*/
+void QIMPenChar::addStroke( QIMPenStroke *st )
+{
+ QIMPenStroke *stroke = new QIMPenStroke( *st );
+ strokes.append( stroke );
+}
+
+/*!
+ Return an indicator of the closeness of this character to \a pen.
+ Lower value is better.
+*/
+int QIMPenChar::match( QIMPenChar *pen )
+{
+/*
+ if ( strokes.count() > pen->strokes.count() )
+ return INT_MAX;
+*/
+ int err = 0;
+ int maxErr = 0;
+ int diff = 0;
+ QIMPenStrokeIterator it1( strokes );
+ QIMPenStrokeIterator it2( pen->strokes );
+ err = it1.current()->match( it2.current() );
+ if ( err > maxErr )
+ maxErr = err;
+ ++it1;
+ ++it2;
+ while ( err < 400000 && it1.current() && it2.current() ) {
+ QPoint p1 = it1.current()->boundingRect().center() -
+ strokes.getFirst()->boundingRect().center();
+ QPoint p2 = it2.current()->boundingRect().center() -
+ pen->strokes.getFirst()->boundingRect().center();
+ int xdiff = QABS( p1.x() - p2.x() ) - 6;
+ int ydiff = QABS( p1.y() - p2.y() ) - 5;
+ if ( xdiff < 0 )
+ xdiff = 0;
+ if ( ydiff < 0 )
+ ydiff = 0;
+ if ( xdiff > 10 || ydiff > 10 ) { // not a chance
+#ifdef DEBUG_QIMPEN
+ qDebug( "char %c, stroke starting pt diff excessive", pen->ch );
+#endif
+ return INT_MAX;
+ }
+ diff += xdiff*xdiff + ydiff*ydiff;
+ err = it1.current()->match( it2.current() );
+ if ( err > maxErr )
+ maxErr = err;
+ ++it1;
+ ++it2;
+ }
+
+ maxErr += diff * diff * 6; // magic weighting :)
+
+#ifdef DEBUG_QIMPEN
+ qDebug( "char: %c, maxErr %d, diff %d, (%d)", pen->ch, maxErr, diff, strokes.count() );
+#endif
+ return maxErr;
+}
+
+/*!
+ Return the bounding rect of this character. It may have sides with
+ negative coords since its origin is where the user started drawing
+ the character.
+*/
+QRect QIMPenChar::boundingRect()
+{
+ QRect br;
+ QIMPenStroke *st = strokes.first();
+ while ( st ) {
+ br |= st->boundingRect();
+ st = strokes.next();
+ }
+
+ return br;
+}
+
+
+/*!
+ Write the character's data to the stream.
+*/
+QDataStream &operator<< (QDataStream &s, const QIMPenChar &ws)
+{
+ s << ws.ch;
+ s << ws.flags;
+ if ( ws.flags & QIMPenChar::Data )
+ s << ws.d;
+ s << ws.strokes.count();
+ QIMPenStrokeIterator it( ws.strokes );
+ while ( it.current() ) {
+ s << *it.current();
+ ++it;
+ }
+
+ return s;
+}
+
+/*!
+ Read the character's data from the stream.
+*/
+QDataStream &operator>> (QDataStream &s, QIMPenChar &ws)
+{
+ s >> ws.ch;
+ s >> ws.flags;
+ if ( ws.flags & QIMPenChar::Data )
+ s >> ws.d;
+ unsigned size;
+ s >> size;
+ for ( unsigned i = 0; i < size; i++ ) {
+ QIMPenStroke *st = new QIMPenStroke();
+ s >> *st;
+ ws.strokes.append( st );
+ }
+
+ return s;
+}
+
+//===========================================================================
+
+bool QIMPenCharMatch::operator>( const QIMPenCharMatch &m )
+{
+ return error > m.error;
+}
+
+bool QIMPenCharMatch::operator<( const QIMPenCharMatch &m )
+{
+ return error < m.error;
+}
+
+bool QIMPenCharMatch::operator<=( const QIMPenCharMatch &m )
+{
+ return error <= m.error;
+}
+
+//===========================================================================
+
+/*!
+ \class QIMPenCharSet qimpenchar.h
+
+ Maintains a set of related characters.
+*/
+
+QIMPenCharSet::QIMPenCharSet()
+{
+ chars.setAutoDelete( TRUE );
+ desc = "Unnamed";
+ csTitle = "abc";
+ csType = Unknown;
+ maxStrokes = 0;
+}
+
+/*!
+ Construct and load a characters set from file \a fn.
+*/
+QIMPenCharSet::QIMPenCharSet( const QString &fn )
+{
+ chars.setAutoDelete( TRUE );
+ desc = "Unnamed";
+ csTitle = "abc";
+ csType = Unknown;
+ maxStrokes = 0;
+ load( fn, System );
+}
+
+const QString &QIMPenCharSet::filename( Domain d ) const
+{
+ if ( d == System )
+ return sysFilename;
+ else
+ return userFilename;
+}
+
+void QIMPenCharSet::setFilename( const QString &fn, Domain d )
+{
+ if ( d == System )
+ sysFilename = fn;
+ else if ( d == User )
+ userFilename = fn;
+}
+
+/*!
+ Load a character set from file \a fn.
+*/
+bool QIMPenCharSet::load( const QString &fn, Domain d )
+{
+ setFilename( fn, d );
+
+ bool ok = FALSE;
+ QFile file( fn );
+ if ( file.open( IO_ReadOnly ) ) {
+ QDataStream ds( &file );
+ QString version;
+ ds >> version;
+ ds >> csTitle;
+ ds >> desc;
+ int major = version.mid( 4, 1 ).toInt();
+ int minor = version.mid( 6 ).toInt();
+ if ( major >= 1 && minor > 0 ) {
+ ds >> (Q_INT8 &)csType;
+ } else {
+ if ( csTitle == "abc" )
+ csType = Lower;
+ else if ( csTitle == "ABC" )
+ csType = Upper;
+ else if ( csTitle == "123" )
+ csType = Numeric;
+ else if ( fn == "Combining" )
+ csType = Combining;
+ }
+ while ( !ds.atEnd() ) {
+ QIMPenChar *pc = new QIMPenChar;
+ ds >> *pc;
+ if ( d == User )
+ markDeleted( pc->character() ); // override system
+ addChar( pc );
+ }
+ if ( file.status() == IO_Ok )
+ ok = TRUE;
+ }
+
+ return ok;
+}
+
+/*!
+ Save this character set.
+*/
+bool QIMPenCharSet::save( Domain d )
+{
+ if ( filename( d ).isEmpty() )
+ return FALSE;
+
+ bool ok = FALSE;
+
+ QString fn = filename( d );
+ QString tmpFn = fn + ".new";
+ QFile file( tmpFn );
+ if ( file.open( IO_WriteOnly|IO_Raw ) ) {
+ QDataStream ds( &file );
+ ds << QString( "QPT 1.1" );
+ ds << csTitle;
+ ds << desc;
+ ds << (Q_INT8)csType;
+ QIMPenCharIterator ci( chars );
+ for ( ; ci.current(); ++ci ) {
+ QIMPenChar *pc = ci.current();
+ if ( ( (d == System) && pc->testFlag( QIMPenChar::System ) ) ||
+ ( (d == User) && !pc->testFlag( QIMPenChar::System ) ) ) {
+ ds << *pc;
+ }
+ if ( file.status() != IO_Ok )
+ break;
+ }
+ if ( file.status() == IO_Ok )
+ ok = TRUE;
+ }
+
+ if ( ok ) {
+ if ( ::rename( tmpFn.latin1(), fn.latin1() ) < 0 ) {
+ qWarning( "problem renaming file %s to %s, errno: %d",
+ tmpFn.latin1(), fn.latin1(), errno );
+ // remove the tmp file, otherwise, it will just lay around...
+ QFile::remove( tmpFn.latin1() );
+ ok = FALSE;
+ }
+ }
+
+ return ok;
+}
+
+QIMPenChar *QIMPenCharSet::at( int i )
+{
+ return chars.at(i);
+}
+
+void QIMPenCharSet::markDeleted( uint ch )
+{
+ QIMPenCharIterator ci( chars );
+ for ( ; ci.current(); ++ci ) {
+ QIMPenChar *pc = ci.current();
+ if ( pc->character() == ch && pc->testFlag( QIMPenChar::System ) )
+ pc->setFlag( QIMPenChar::Deleted );
+ }
+}
+
+/*!
+ Find the best matches for \a ch in this character set.
+*/
+QIMPenCharMatchList QIMPenCharSet::match( QIMPenChar *ch )
+{
+ QIMPenCharMatchList matches;
+
+ QIMPenCharIterator ci( chars );
+ for ( ; ci.current(); ++ci ) {
+ QIMPenChar *tmplChar = ci.current();
+ if ( tmplChar->testFlag( QIMPenChar::Deleted ) ) {
+ continue;
+ }
+ int err;
+ if ( ch->penStrokes().count() <= tmplChar->penStrokes().count() ) {
+ err = ch->match( tmplChar );
+ if ( err <= QIMPEN_MATCH_THRESHOLD ) {
+ if (tmplChar->penStrokes().count() != ch->penStrokes().count())
+ err = QIMPEN_MATCH_THRESHOLD;
+ QIMPenCharMatchList::Iterator it;
+ for ( it = matches.begin(); it != matches.end(); ++it ) {
+ if ( (*it).penChar->character() == tmplChar->character() &&
+ (*it).penChar->penStrokes().count() == tmplChar->penStrokes().count() ) {
+ if ( (*it).error > err )
+ (*it).error = err;
+ break;
+ }
+ }
+ if ( it == matches.end() ) {
+ QIMPenCharMatch m;
+ m.error = err;
+ m.penChar = tmplChar;
+ matches.append( m );
+ }
+ }
+ }
+ }
+ qHeapSort( matches );
+/*
+ QIMPenCharMatchList::Iterator it;
+ for ( it = matches.begin(); it != matches.end(); ++it ) {
+ qDebug( "Match: \'%c\', error %d, strokes %d", (*it).penChar->character(),
+ (*it).error, (*it).penChar->penStrokes().count() );
+ }
+*/
+ return matches;
+}
+
+/*!
+ Add a character \a ch to this set.
+ QIMPenCharSet will delete this character when it is no longer needed.
+*/
+void QIMPenCharSet::addChar( QIMPenChar *ch )
+{
+ if ( ch->penStrokes().count() > maxStrokes )
+ maxStrokes = ch->penStrokes().count();
+ chars.append( ch );
+}
+
+/*!
+ Remove a character by reference \a ch from this set.
+ QIMPenCharSet will delete this character.
+*/
+void QIMPenCharSet::removeChar( QIMPenChar *ch )
+{
+ chars.remove( ch );
+}
+
+/*!
+ Move the character up the list of characters.
+*/
+void QIMPenCharSet::up( QIMPenChar *ch )
+{
+ int idx = chars.findRef( ch );
+ if ( idx > 0 ) {
+ chars.take();
+ chars.insert( idx - 1, ch );
+ }
+}
+
+/*!
+ Move the character down the list of characters.
+*/
+void QIMPenCharSet::down( QIMPenChar *ch )
+{
+ int idx = chars.findRef( ch );
+ if ( idx >= 0 && idx < (int)chars.count() - 1 ) {
+ chars.take();
+ chars.insert( idx + 1, ch );
+ }
+}
+
diff --git a/inputmethods/handwriting/qimpenchar.h b/inputmethods/handwriting/qimpenchar.h
new file mode 100644
index 0000000..9a5f687
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenchar.h
@@ -0,0 +1,157 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QIMPENCHAR_H_
+#define QIMPENCHAR_H_
+
+#include <qlist.h>
+#include <qvaluelist.h>
+#include <qcstring.h>
+#include "qimpenstroke.h"
+
+struct QIMPenSpecialKeys {
+ int code;
+ char *name;
+};
+
+extern const QIMPenSpecialKeys qimpen_specialKeys[];
+
+
+class QIMPenChar
+{
+public:
+ QIMPenChar();
+ QIMPenChar( const QIMPenChar & );
+
+ unsigned int character() const { return ch; }
+ void setCharacter( unsigned int c ) { ch = c; }
+
+ const QString &data() const { return d; }
+ void setData( const QString &ba ) { d = ba; }
+
+ QString name() const;
+ bool isEmpty() const { return strokes.isEmpty(); }
+ unsigned int strokeCount() const { return strokes.count(); }
+ unsigned int strokeLength( int s ) const;
+ void clear();
+ int match( QIMPenChar *ch );
+ const QIMPenStrokeList &penStrokes() { return strokes; }
+ QPoint startingPoint() const { return strokes.getFirst()->startingPoint(); }
+ QRect boundingRect();
+
+ void setFlag( int f ) { flags |= f; }
+ void clearFlag( int f ) { flags &= ~f; }
+ bool testFlag( int f ) { return flags & f; }
+
+ enum Flags { System=0x01, Deleted=0x02, CombineRight=0x04, Data=0x08 };
+ // Correspond to codes in template files. Do not change values.
+ enum Mode { ModeBase=0x4000, Caps=0x4001, Shortcut=0x4002, CapsLock=0x4003,
+ Punctuation=0x4004, Symbol=0x4005, Extended=0x4006 };
+
+ QIMPenChar &operator=( const QIMPenChar &s );
+
+ void addStroke( QIMPenStroke * );
+
+protected:
+ unsigned int ch;
+ QString d;
+ Q_UINT8 flags;
+ QIMPenStrokeList strokes;
+
+ friend QDataStream &operator<< (QDataStream &, const QIMPenChar &);
+ friend QDataStream &operator>> (QDataStream &, QIMPenChar &);
+};
+
+typedef QList<QIMPenChar> QIMPenCharList;
+typedef QListIterator<QIMPenChar> QIMPenCharIterator;
+
+QDataStream & operator<< (QDataStream & s, const QIMPenChar &ws);
+QDataStream & operator>> (QDataStream & s, QIMPenChar &ws);
+
+struct QIMPenCharMatch
+{
+ int error;
+ QIMPenChar *penChar;
+
+ bool operator>( const QIMPenCharMatch &m );
+ bool operator<( const QIMPenCharMatch &m );
+ bool operator<=( const QIMPenCharMatch &m );
+};
+
+typedef QValueList<QIMPenCharMatch> QIMPenCharMatchList;
+
+
+class QIMPenCharSet
+{
+public:
+ QIMPenCharSet();
+ QIMPenCharSet( const QString &fn );
+
+ bool isEmpty() const { return chars.isEmpty(); }
+ unsigned int count() const { return chars.count(); }
+ void clear() { chars.clear(); }
+
+ void setDescription( const QString &d ) { desc = d; }
+ QString description() const { return desc; }
+ void setTitle( const QString &t ) { csTitle = t; }
+ QString title() const { return csTitle; }
+
+ QIMPenCharMatchList match( QIMPenChar *ch );
+ void addChar( QIMPenChar *ch );
+ void removeChar( QIMPenChar *ch );
+ QIMPenChar *at( int i );
+
+ unsigned maximumStrokes() const { return maxStrokes; }
+
+ void up( QIMPenChar *ch );
+ void down( QIMPenChar *ch );
+
+ enum Domain { System, User };
+ enum Type { Unknown=0x00, Lower=0x01, Upper=0x02, Combining=0x04,
+ Numeric=0x08, Punctuation=0x10, Symbol=0x20, Shortcut=0x40 };
+
+ const QIMPenCharList &characters() const { return chars; }
+
+ void setType( Type t ) { csType = t; }
+ Type type() const { return csType; }
+
+ const QString &filename( Domain d ) const;
+ void setFilename( const QString &fn, Domain d=System );
+ bool load( const QString &fn, Domain d=System );
+ bool save( Domain d=System );
+
+protected:
+ void markDeleted( uint ch );
+
+protected:
+ QString csTitle;
+ QString desc;
+ QString sysFilename;
+ QString userFilename;
+ Type csType;
+ unsigned maxStrokes;
+ QIMPenCharList chars;
+ QIMPenCharMatchList matches;
+};
+
+typedef QList<QIMPenCharSet> QIMPenCharSetList;
+typedef QListIterator<QIMPenCharSet> QIMPenCharSetIterator;
+
+#endif
diff --git a/inputmethods/handwriting/qimpencombining.cpp b/inputmethods/handwriting/qimpencombining.cpp
new file mode 100644
index 0000000..30459e7
--- a/dev/null
+++ b/inputmethods/handwriting/qimpencombining.cpp
@@ -0,0 +1,141 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qfile.h>
+#include <qtl.h>
+#include <math.h>
+#include <limits.h>
+#include <qdatastream.h>
+#include "qimpencombining.h"
+
+static unsigned int combiningSymbols[] = { '\\', '/', '^', '~', '\"', 'o' };
+static unsigned int combiningChars[][7] = {
+ // \ / ^ ~ "
+ { 'A', 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5 },
+ { 'O', 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0000 },
+ { 'U', 0x00D9, 0x00DA, 0x00DB, 0x0000, 0x00DC, 0x0000 },
+ { 'E', 0x00C8, 0x00C9, 0x00CA, 0x0000, 0x00CB, 0x0000 },
+ { 'I', 0x00CC, 0x00CD, 0x00CE, 0x0000, 0x00CF, 0x0000 },
+ { 'a', 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5 },
+ { 'e', 0x00E8, 0x00E9, 0x00EA, 0x0000, 0x00EB, 0x0000 },
+ { 'i', 0x00EC, 0x00ED, 0x00EE, 0x0000, 0x00EF, 0x0000 },
+ { 'n', 0x0000, 0x0000, 0x0000, 0x00F1, 0x0000, 0x0000 },
+ { 'o', 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0000 },
+ { 'u', 0x00F9, 0x00FA, 0x00FB, 0x0000, 0x00FC, 0x0000 },
+ { 'y', 0x0000, 0x00FD, 0x0000, 0x0000, 0x00FF, 0x0000 },
+ { 0, 0, 0, 0, 0, 0, 0 }
+};
+
+
+QIMPenCombining::QIMPenCombining()
+{
+}
+
+QIMPenCombining::QIMPenCombining( const QString &fn )
+ : QIMPenCharSet( fn )
+{
+}
+
+void QIMPenCombining::addCombined( QIMPenCharSet *cs )
+{
+ unsigned int count = cs->count();
+ QIMPenCharIterator it( cs->characters() );
+ for ( ; it.current() && count; ++it, --count ) {
+ QIMPenChar *pc = it.current();
+ if ( pc->testFlag( QIMPenChar::Deleted ) )
+ continue;
+ int charIdx = findCombining( pc->character() );
+ if ( charIdx < 0 )
+ continue;
+ for ( int i = 0; i < 6; i++ ) {
+ if ( combiningChars[charIdx][i+1] ) {
+ QIMPenCharIterator cit( chars );
+ for ( ; cit.current(); ++cit ) {
+ QIMPenChar *accentPc = cit.current();
+ if ( accentPc->character() == combiningSymbols[i] ) {
+ QIMPenChar *combined = combine( pc, accentPc );
+ combined->setCharacter( combiningChars[charIdx][i+1] );
+ cs->addChar( combined );
+ }
+ }
+ }
+ }
+ }
+}
+
+int QIMPenCombining::findCombining( unsigned int ch ) const
+{
+ int i = 0;
+ while ( combiningChars[i][0] ) {
+ if ( combiningChars[i][0] == ch )
+ return i;
+ i++;
+ }
+
+ return -1;
+}
+
+QIMPenChar *QIMPenCombining::combine( QIMPenChar *base, QIMPenChar *accent )
+{
+ QRect brect = base->boundingRect();
+ QRect arect = accent->boundingRect();
+ int offset;
+ if ( accent->testFlag( QIMPenChar::CombineRight ) )
+ offset = brect.left() - arect.left() + brect.width() + 2;
+ else
+ offset = brect.left() - arect.left() + (brect.width() - arect.width())/2;
+ QIMPenChar *combined = 0;
+ if ( base->character() == 'i' ) {
+ // Hack to remove the dot from i's when combining.
+ if ( base->penStrokes().count() > 1 ) {
+ combined = new QIMPenChar;
+ QIMPenStrokeIterator it( base->penStrokes() );
+ for ( unsigned int i = 0; i < base->penStrokes().count()-1; ++it, i++ ) {
+ QIMPenStroke *st = new QIMPenStroke( *(it.current()) );
+ combined->addStroke( st );
+ }
+ combined->setFlag( QIMPenChar::System );
+ }
+ }
+ if ( !combined )
+ combined = new QIMPenChar( *base );
+ QIMPenStrokeIterator it( accent->penStrokes() );
+ for ( ; it.current(); ++it ) {
+ QIMPenStroke *st = new QIMPenStroke( *(it.current()) );
+ st->setStartingPoint( st->startingPoint() + QPoint(offset, 0 ));
+ combined->addStroke( st );
+ delete st;
+ }
+
+ return combined;
+}
+
+QIMPenChar *QIMPenCombining::penChar( int type )
+{
+ QIMPenCharIterator it( chars );
+ for ( ; it.current(); ++it ) {
+ QIMPenChar *pc = it.current();
+ if ( pc->character() == combiningSymbols[type] )
+ return pc;
+ }
+
+ return 0;
+}
+
diff --git a/inputmethods/handwriting/qimpencombining.h b/inputmethods/handwriting/qimpencombining.h
new file mode 100644
index 0000000..778cb8f
--- a/dev/null
+++ b/inputmethods/handwriting/qimpencombining.h
@@ -0,0 +1,41 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QIMPENCOMBINING_H_
+#define QIMPENCOMBINING_H_
+
+#include <qlist.h>
+#include "qimpenchar.h"
+
+class QIMPenCombining : public QIMPenCharSet
+{
+public:
+ QIMPenCombining();
+ QIMPenCombining( const QString &fn );
+
+ void addCombined( QIMPenCharSet * );
+
+protected:
+ int findCombining( unsigned int ch ) const;
+ QIMPenChar *combine( QIMPenChar *base, QIMPenChar *accent );
+ QIMPenChar *penChar( int type );
+};
+
+#endif
diff --git a/inputmethods/handwriting/qimpenhelp.cpp b/inputmethods/handwriting/qimpenhelp.cpp
new file mode 100644
index 0000000..5ee46a2
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenhelp.cpp
@@ -0,0 +1,410 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qimpenwidget.h"
+#include "qimpencombining.h"
+#include "qimpenmatch.h"
+#include "qimpenhelp.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/global.h>
+#include <qpe/config.h>
+#include <qpe/stringutil.h>
+
+#include <qtextview.h>
+#include <qlabel.h>
+#include <qlistbox.h>
+#include <qcombobox.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qtimer.h>
+#include <qtextstream.h>
+
+/* XPM */
+static const char * const left_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" . ",
+" .. ",
+" ... ",
+" .... ",
+" ..... ",
+" ...... ",
+" ..... ",
+" .... ",
+" ... ",
+" .. ",
+" . ",
+" ",
+" "};
+
+
+/* XPM */
+static const char * const right_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" . ",
+" .. ",
+" ... ",
+" .... ",
+" ..... ",
+" ...... ",
+" ..... ",
+" .... ",
+" ... ",
+" .. ",
+" . ",
+" ",
+" "};
+
+class CharListItem : public QListBoxText
+{
+public:
+ CharListItem( const QString &text, uint c )
+ : QListBoxText( text )
+ {
+ _code = c;
+ }
+
+ uint code() const { return _code; }
+
+protected:
+ uint _code;
+};
+
+HandwritingHelp::HandwritingHelp( QIMPenProfile *p, QWidget *parent, const char *name, WFlags f )
+ : QTabWidget( parent, name, f )
+{
+ setCaption( tr("Handwriting Help") );
+ QTextView *help = new QTextView( this );
+ help->setFrameStyle( QFrame::NoFrame );
+ help->setText(
+ tr( "<ul><li>When you start to use the handwriting recogniser "
+ "write slowly, accurately and firmly."
+ "<li>Use the guide lines when drawing your characters."
+ "<li>When drawing a character with multiple strokes, each "
+ "successive stroke must be drawn before the grayed strokes are erased."
+ "<li>Practice your handwriting using the handwriting trainer."
+ "<li>When adding your own character templates make sure they "
+ "are sufficiently different from other characters' templates."
+ "</ul>") );
+
+ addTab( help, tr("Tips") );
+
+ HandwritingTrainer *trainer = new HandwritingTrainer( p, this );
+ addTab( trainer, tr("Trainer") );
+}
+
+void HandwritingHelp::showEvent( QShowEvent * )
+{
+ Global::hideInputMethod();
+}
+
+void HandwritingHelp::hideEvent( QHideEvent * )
+{
+ Global::showInputMethod();
+}
+
+//---------------------------------------------------------------------------
+
+HandwritingTrainer::HandwritingTrainer( QIMPenProfile *p, QWidget *parent, const char *name )
+ : QWidget( parent, name ), profile(p)
+{
+ QGridLayout *gl = new QGridLayout( this, 5, 2, 0, 4 );
+ gl->setRowStretch( 1, 1 );
+ gl->setRowStretch( 2, 1 );
+ gl->setColStretch( 1, 1 );
+
+ charSetCombo = new QComboBox( this );
+ gl->addMultiCellWidget( charSetCombo, 0, 0, 0, 1 );
+ connect( charSetCombo, SIGNAL(activated(int)), SLOT(selectCharSet(int)));
+ QIMPenCharSetIterator it( profile->charSets() );
+ for ( ; it.current(); ++it ) {
+ charSetCombo->insertItem( it.current()->description() );
+ }
+
+ charList = new QListBox( this );
+ charList->setHScrollBarMode( QListBox::AlwaysOff );
+ charList->setFixedWidth( 80 );
+ connect( charList, SIGNAL(highlighted(int)), this, SLOT(selectChar(int)) );
+ gl->addMultiCellWidget( charList, 1, 2, 0, 0 );
+
+ QLabel *help = new QLabel( this );
+ help->setAlignment( AlignLeft | AlignVCenter | WordBreak );
+ gl->addWidget( help, 1, 1 );
+ help->setText(
+ tr( "Select a character from the list. The writing area on the left "
+ "shows the reference character. Practice writing in the area on "
+ "the right.") );
+
+ result = new QLabel( this );
+ gl->addMultiCellWidget( result, 2, 3, 1, 1 );
+
+ matcher = new QIMPenMatch( this );
+ matcher->setCharSet( currentSet );
+ connect( matcher, SIGNAL(noMatch()), this, SLOT(noMatch()) );
+ connect( matcher, SIGNAL(matchedCharacters(const QIMPenCharMatchList &)),
+ this, SLOT(matched(const QIMPenCharMatchList &)) );
+
+ QHBoxLayout *hb = new QHBoxLayout();
+ gl->addLayout( hb, 3, 0 );
+ prevBtn = new QPushButton( this );
+ prevBtn->setPixmap( QPixmap( (const char **)left_xpm ) );
+ connect( prevBtn, SIGNAL(clicked()), SLOT(prevChar()));
+ hb->addWidget( prevBtn );
+
+ nextBtn = new QPushButton( this );
+ nextBtn->setPixmap( QPixmap( (const char **)right_xpm ) );
+ connect( nextBtn, SIGNAL(clicked()), SLOT(nextChar()));
+ hb->addWidget( nextBtn );
+
+ refPw = new QIMPenWidget( this );
+ refPw->setReadOnly( TRUE );
+ gl->addWidget( refPw, 4, 0 );
+
+ pracPw = new QIMPenWidget( this );
+ connect( matcher, SIGNAL(removeStroke()), pracPw, SLOT(removeStroke()) );
+ connect( pracPw, SIGNAL(beginStroke()),
+ this, SLOT(beginStroke()) );
+ connect( pracPw, SIGNAL(stroke( QIMPenStroke * )),
+ this, SLOT(strokeEntered( QIMPenStroke * )) );
+ connect( pracPw, SIGNAL(beginStroke()),
+ matcher, SLOT(beginStroke()) );
+ connect( pracPw, SIGNAL(stroke( QIMPenStroke * )),
+ matcher, SLOT(strokeEntered( QIMPenStroke * )) );
+ gl->addWidget( pracPw, 4, 1 );
+
+ redrawTimer = new QTimer( this );
+ connect( redrawTimer, SIGNAL(timeout()), this, SLOT(redrawChar()) );
+ redrawTimer->start( 5000 );
+
+ currentSet = 0;
+ charSetCombo->setCurrentItem( 1 );
+ selectCharSet( 1 );
+}
+
+HandwritingTrainer::~HandwritingTrainer()
+{
+}
+
+void HandwritingTrainer::showEvent( QShowEvent * )
+{
+ redrawChar();
+ redrawTimer->start( 5000 );
+}
+
+void HandwritingTrainer::setCurrentChar( QIMPenChar *c )
+{
+ currentChar = c;
+ refPw->showCharacter( currentChar );
+ pracPw->clear();
+ if ( currentChar ) {
+ prevBtn->setEnabled( findPrev() != 0 );
+ nextBtn->setEnabled( findNext() != 0 );
+ }
+ result->setText( "" );
+ redrawTimer->start( 5000 );
+}
+
+void HandwritingTrainer::selectChar( int i )
+{
+ currentChar = 0;
+ currentCode = ((CharListItem *)charList->item(i))->code();
+ QIMPenCharIterator it(currentSet->characters() );
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->character() == currentCode &&
+ !it.current()->testFlag( QIMPenChar::Deleted ) ) {
+ setCurrentChar( it.current() );
+ break;
+ }
+ }
+ if ( !it.current() )
+ setCurrentChar( 0 );
+}
+
+void HandwritingTrainer::selectCharSet( int i )
+{
+ if ( currentSet ) {
+ refPw->removeCharSet( 0 );
+ pracPw->removeCharSet( 0 );
+ }
+ currentSet = profile->charSets().at( i );
+ fillCharList();
+ refPw->insertCharSet( currentSet );
+ pracPw->insertCharSet( currentSet );
+ matcher->setCharSet( currentSet );
+ if ( charList->count() ) {
+ charList->setSelected( 0, TRUE );
+ selectChar(0);
+ }
+}
+
+void HandwritingTrainer::noMatch()
+{
+ result->setText( "No match" );
+}
+
+void HandwritingTrainer::matched( const QIMPenCharMatchList &ml )
+{
+ int maxErr = 20000 + (*ml.begin()).penChar->strokeLength(0) * 1000;
+ int baseErr = (*ml.begin()).penChar->strokeLength(0) * 250;
+ unsigned int numStrokes = (*ml.begin()).penChar->strokeCount();
+ QIMPenCharMatchList::ConstIterator it;
+ /*
+ for ( it = ml.begin(); it != ml.end(); ++it ) {
+ if ( (*it).penChar->strokeCount() == numStrokes ) {
+ if ( (*it).error > maxErr )
+ maxErr = (*it).error;
+ }
+ }
+ */
+ int i;
+ QString res;
+ QTextStream ts(&res, IO_WriteOnly);
+ ts << "<qt>" << tr("Matched: ");
+ for ( i = 0, it = ml.begin(); it != ml.end() && i < 4; ++it, i++ ) {
+ if ( (*it).penChar->strokeCount() == numStrokes ) {
+ int rate = 100 - ( ((*it).error - baseErr) * 100 ) / maxErr;
+ if ( it != ml.begin() ) {
+ if ( rate < -10 )
+ continue;
+ ts << "<br>";
+ ts << tr("Similar to: ");
+ }
+ ts << "<big>";
+ if ( (*it).penChar->character() == currentChar->character() )
+ ts << "<b>";
+ ts << Qtopia::escapeString((*it).penChar->name());
+ ts << " (" << rateString(rate) << ")";
+ if ( (*it).penChar->character() == currentChar->character() )
+ ts << "</b>";
+ ts << "</big>";
+ }
+ }
+ ts << "</qt>";
+ result->setText( res );
+}
+
+QString HandwritingTrainer::rateString( int rate ) const
+{
+ if ( rate < 1 )
+ rate = 1;
+ if ( rate > 100 )
+ rate = 100;
+ return tr("%1%").arg(rate);
+}
+
+void HandwritingTrainer::prevChar()
+{
+ QIMPenChar *pc = findPrev();
+ if ( pc )
+ setCurrentChar( pc );
+}
+
+void HandwritingTrainer::nextChar()
+{
+ QIMPenChar *pc = findNext();
+ if ( pc )
+ setCurrentChar( pc );
+}
+
+void HandwritingTrainer::redrawChar()
+{
+ if ( currentChar )
+ refPw->showCharacter( currentChar );
+}
+
+void HandwritingTrainer::beginStroke()
+{
+ redrawTimer->start( 5000 );
+}
+
+void HandwritingTrainer::strokeEntered( QIMPenStroke * )
+{
+ pracPw->greyStroke();
+}
+
+QIMPenChar *HandwritingTrainer::findPrev()
+{
+ if ( !currentChar )
+ return 0;
+ QIMPenCharIterator it( currentSet->characters() );
+ bool found = FALSE;
+ for ( it.toLast(); it.current(); --it ) {
+ if ( !found && it.current() == currentChar )
+ found = TRUE;
+ else if ( found && it.current()->character() == currentCode &&
+ !it.current()->testFlag( QIMPenChar::Deleted ) ) {
+ return it.current();
+ }
+ }
+
+ return 0;
+}
+
+QIMPenChar *HandwritingTrainer::findNext()
+{
+ if ( !currentChar )
+ return 0;
+ QIMPenCharIterator it( currentSet->characters() );
+ bool found = FALSE;
+ for ( ; it.current(); ++it ) {
+ if ( !found && it.current() == currentChar )
+ found = TRUE;
+ else if ( found && it.current()->character() == currentCode &&
+ !it.current()->testFlag( QIMPenChar::Deleted ) ) {
+ return it.current();
+ }
+ }
+
+ return 0;
+}
+
+void HandwritingTrainer::fillCharList()
+{
+ charList->clear();
+ QIMPenCharIterator it( currentSet->characters() );
+ CharListItem *li = 0;
+ for ( ; it.current(); ++it ) {
+ uint ch = it.current()->character();
+ QString n = it.current()->name();
+ if ( !n.isEmpty() )
+ li = new CharListItem( n, ch );
+ if ( li ) {
+ CharListItem *i = (CharListItem *)charList->findItem( li->text() );
+ if ( !i || i->code() != ch ) {
+ charList->insertItem( li );
+ } else {
+ delete li;
+ li = 0;
+ }
+ }
+ }
+ currentChar = 0;
+}
+
diff --git a/inputmethods/handwriting/qimpenhelp.h b/inputmethods/handwriting/qimpenhelp.h
new file mode 100644
index 0000000..07cb035
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenhelp.h
@@ -0,0 +1,85 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qtabwidget.h>
+#include <qlist.h>
+#include "qimpenchar.h"
+#include "qimpenprofile.h"
+
+class QListBox;
+class QLabel;
+class QComboBox;
+class QPushButton;
+class QTimer;
+class QIMPenWidget;
+class QIMPenMatch;
+
+class HandwritingHelp : public QTabWidget
+{
+ Q_OBJECT
+public:
+ HandwritingHelp( QIMPenProfile *p, QWidget *parent=0, const char *name=0, WFlags f=0 );
+
+protected:
+ virtual void showEvent( QShowEvent * );
+ virtual void hideEvent( QHideEvent * );
+};
+
+class HandwritingTrainer : public QWidget
+{
+ Q_OBJECT
+public:
+ HandwritingTrainer( QIMPenProfile *p, QWidget *parent=0, const char *name=0 );
+ ~HandwritingTrainer();
+
+private slots:
+ void selectChar( int );
+ void selectCharSet( int );
+ void noMatch();
+ void matched( const QIMPenCharMatchList &ml );
+ void prevChar();
+ void nextChar();
+ void redrawChar();
+ void beginStroke();
+ void strokeEntered( QIMPenStroke * );
+
+private:
+ virtual void showEvent( QShowEvent * );
+ QString rateString( int rate ) const;
+ void setCurrentChar( QIMPenChar *c );
+ void fillCharList();
+ QIMPenChar *findPrev();
+ QIMPenChar *findNext();
+
+private:
+ QIMPenMatch *matcher;
+ QIMPenCharSet *currentSet;
+ QIMPenChar *currentChar;
+ QIMPenProfile *profile;
+ uint currentCode;
+ QIMPenWidget *refPw;
+ QIMPenWidget *pracPw;
+ QComboBox *charSetCombo;
+ QListBox *charList;
+ QLabel *result;
+ QPushButton *prevBtn;
+ QPushButton *nextBtn;
+ QTimer *redrawTimer;
+};
+
diff --git a/inputmethods/handwriting/qimpeninput.cpp b/inputmethods/handwriting/qimpeninput.cpp
new file mode 100644
index 0000000..6718b26
--- a/dev/null
+++ b/inputmethods/handwriting/qimpeninput.cpp
@@ -0,0 +1,515 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qimpenwidget.h"
+#include "qimpensetup.h"
+#include "qimpeninput.h"
+#include "qimpencombining.h"
+#include "qimpenwordpick.h"
+#include "qimpenmatch.h"
+#include "qimpenhelp.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/qdawg.h>
+#include <qpe/config.h>
+#include <qpe/global.h>
+
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qdir.h>
+
+#include <limits.h>
+
+// We'll use little pixmaps for the buttons to save screen space.
+
+/* XPM */
+static const char * const pen_xpm[] = {
+"12 12 4 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+"@ c #808080",
+" . ",
+" .+. ",
+" ..@@.",
+" .+@.. ",
+" .+@@. ",
+" .+@@. ",
+" .+@@. ",
+" .@.@. ",
+" .@@. ",
+" .... ",
+" .. ",
+" "};
+
+
+/* XPM */
+static char * bs_xpm[] = {
+"12 12 5 1",
+" c None",
+". c #333333",
+"+ c #000000",
+"@ c #FFFFFF",
+"# c #666666",
+" ",
+" ",
+" ",
+" . ",
+" ++ ",
+" +@#+++++. ",
+" +@@@@@@@@+ ",
+" +@#+++++. ",
+" ++ ",
+" . ",
+" ",
+" "};
+
+
+/* XPM */
+static char * enter_xpm[] = {
+"12 12 5 1",
+" c None",
+". c #333333",
+"+ c #000000",
+"@ c #FFFFFF",
+"# c #666666",
+" ",
+" .+. ",
+" +@+ ",
+" . +@+ ",
+" ++ +@+ ",
+" +@#++++@+ ",
+" +@@@@@@@@+ ",
+" +@#+++++. ",
+" ++ ",
+" . ",
+" ",
+" "};
+
+
+
+/* XPM */
+static char * help_xpm[] = {
+"12 12 5 1",
+" c None",
+". c #000000",
+"+ c #FFFFFF",
+"@ c #666666",
+"# c #333333",
+" ",
+" ... ",
+" .+++. ",
+" .+..@+. ",
+" #.# .+. ",
+" .+. ",
+" .+. ",
+" .+. ",
+" .+. ",
+" #.# ",
+" .+. ",
+" #.# "};
+
+
+/*!
+ \class QIMPenInput qimpeninput.h
+
+ Pen input widget.
+*/
+QIMPenInput::QIMPenInput( QWidget *parent, const char *name, WFlags f )
+ : QFrame( parent, name, f ), helpDlg(0), profile(0)
+{
+ setFrameStyle( Box | Plain );
+
+ profileList.setAutoDelete( true );
+
+ matcher = new QIMPenMatch( this );
+ connect( matcher, SIGNAL(keypress(uint)), this, SLOT(keypress(uint)) );
+ connect( matcher, SIGNAL(erase()), this, SLOT(erase()) );
+
+ QGridLayout *gl = new QGridLayout( this, 5, 2, 1, 0 );
+ gl->setColStretch( 0, 1 );
+
+ wordPicker = new QIMPenWordPick( this );
+ connect( wordPicker, SIGNAL(wordClicked(const QString &)),
+ this, SLOT(wordPicked(const QString &)) );
+ connect( matcher, SIGNAL(matchedCharacters(const QIMPenCharMatchList &)),
+ this, SLOT(matchedCharacters(const QIMPenCharMatchList &)) );
+ connect( matcher, SIGNAL(matchedWords(const QIMPenMatch::MatchWordList&)),
+ wordPicker, SLOT(setWords(const QIMPenMatch::MatchWordList&)) );
+ QFont f("smallsmooth",9);
+ QFontInfo fi( f );
+ wordPicker->setFont( f );
+ wordPicker->setBackgroundColor( white );
+ gl->addMultiCellWidget( wordPicker, 0, 0, 0, 1 );
+ if ( !Global::fixedDawg().root() || !matcher->isWordMatchingEnabled() )
+ wordPicker->hide();
+
+ pw = new QIMPenWidget( this );
+ gl->addMultiCellWidget( pw, 1, 4, 0, 0 );
+
+ int bh = pw->sizeHint().height()/4;
+
+ QPushButton *b = new QPushButton( this );
+ b->setFocusPolicy( NoFocus );
+ b->setPixmap( QPixmap( (const char **)bs_xpm ) );
+ b->setFixedHeight(pw->sizeHint().height()-3*bh); // left-over space goes here
+ b->setAutoRepeat( TRUE );
+ gl->addWidget( b, 1, 1 );
+ connect( b, SIGNAL(clicked()), SLOT(backspace()));
+
+ b = new QPushButton( this );
+ b->setFocusPolicy( NoFocus );
+ b->setPixmap( QPixmap( (const char **)enter_xpm ) );
+ b->setFixedHeight(bh);
+ b->setAutoRepeat( TRUE );
+ gl->addWidget( b, 2, 1 );
+ connect( b, SIGNAL(clicked()), SLOT(enter()));
+
+ helpBtn = new QPushButton( this );
+ helpBtn->setFocusPolicy( NoFocus );
+ helpBtn->setPixmap( QPixmap( (const char **)help_xpm ) );
+ helpBtn->setFixedHeight(bh);
+ gl->addWidget( helpBtn, 3, 1 );
+ connect( helpBtn, SIGNAL(clicked()), SLOT(help()));
+
+ QPixmap pm( (const char **)pen_xpm );
+ setupBtn = new QPushButton( this );
+ setupBtn->setFocusPolicy( NoFocus );
+ setupBtn->setPixmap( pm );
+ setupBtn->setFixedHeight(bh);
+ gl->addWidget( setupBtn, 4, 1 );
+ connect( setupBtn, SIGNAL(clicked()), SLOT(setup()));
+
+ connect( matcher, SIGNAL(removeStroke()), pw, SLOT(removeStroke()) );
+ connect( pw, SIGNAL(changeCharSet( QIMPenCharSet * )),
+ matcher, SLOT(setCharSet( QIMPenCharSet * )) );
+ connect( pw, SIGNAL(changeCharSet( int )),
+ this, SLOT(selectCharSet( int )) );
+ connect( pw, SIGNAL(beginStroke()),
+ matcher, SLOT(beginStroke()) );
+ connect( pw, SIGNAL(stroke( QIMPenStroke * )),
+ this, SLOT(strokeEntered( QIMPenStroke * )) );
+ connect( pw, SIGNAL(stroke( QIMPenStroke * )),
+ matcher, SLOT(strokeEntered( QIMPenStroke * )) );
+
+ shortcutCharSet = 0;
+ currCharSet = 0;
+ setupDlg = 0;
+ profile = 0;
+ mode = Normal;
+
+ loadProfiles();
+}
+
+QIMPenInput::~QIMPenInput()
+{
+ delete (HandwritingHelp*) helpDlg;
+}
+
+QSize QIMPenInput::sizeHint() const
+{
+ int fw = frameWidth();
+ int ps = wordPicker->isHidden() ? 0 : wordPicker->sizeHint().height();
+ return pw->sizeHint() + QSize( fw*2, fw*2+ps );
+}
+
+void QIMPenInput::loadProfiles()
+{
+ profileList.clear();
+ profile = 0;
+ delete shortcutCharSet;
+ shortcutCharSet = new QIMPenCharSet();
+ shortcutCharSet->setTitle( "Shortcut" );
+ QString path = QPEApplication::qpeDir() + "etc/qimpen";
+ QDir dir( path, "*.conf" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ QIMPenProfile *p = new QIMPenProfile( path + "/" + *it );
+ profileList.append( p );
+ if ( p->shortcut() ) {
+ QIMPenCharIterator it( p->shortcut()->characters() );
+ for ( ; it.current(); ++it ) {
+ shortcutCharSet->addChar( new QIMPenChar(*it.current()) );
+ }
+ }
+ }
+
+ Config config( "handwriting" );
+ config.setGroup( "Settings" );
+ QString prof = config.readEntry( "Profile", "Default" );
+ selectProfile( prof );
+}
+
+void QIMPenInput::selectProfile( const QString &name )
+{
+ QListIterator<QIMPenProfile> it( profileList );
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->name() == name ) {
+ profile = it.current();
+ break;
+ }
+ }
+
+ if ( !it.current() )
+ return;
+
+ pw->clearCharSets();
+ baseSets.clear();
+
+ matcher->setMultiStrokeTimeout( profile->multiStrokeTimeout() );
+ matcher->setWordMatchingEnabled( profile->matchWords() );
+
+ if ( !Global::fixedDawg().root() || !matcher->isWordMatchingEnabled() )
+ wordPicker->hide();
+ else
+ wordPicker->show();
+
+ if ( profile->uppercase() && profile->style() == QIMPenProfile::BothCases ) {
+ baseSets.append( profile->uppercase() );
+ pw->insertCharSet( profile->uppercase() );
+ }
+
+ if ( profile->lowercase() ) {
+ baseSets.append( profile->lowercase() );
+ pw->insertCharSet( profile->lowercase(), profile->style() == QIMPenProfile::BothCases ? 1 : 2 );
+ }
+
+ if ( profile->numeric() ) {
+ baseSets.append( profile->numeric() );
+ pw->insertCharSet( profile->numeric() );
+ }
+
+ if ( helpDlg )
+ delete (HandwritingHelp*) helpDlg;
+}
+
+void QIMPenInput::wordPicked( const QString &w )
+{
+ int bs = matcher->word().length();
+ for ( int i = 0; i < bs; i++ )
+ keypress( Qt::Key_Backspace << 16 );
+
+ for ( unsigned int i = 0; i < w.length(); i++ )
+ keypress( w[i].unicode() );
+
+ matcher->resetState();
+ wordPicker->clear();
+}
+
+void QIMPenInput::selectCharSet( int idx )
+{
+ if ( mode == Switch ) {
+ //qDebug( "Switch back to normal" );
+ pw->changeCharSet( baseSets.at(currCharSet), currCharSet );
+ mode = Normal;
+ }
+ currCharSet = idx;
+}
+
+void QIMPenInput::beginStroke()
+{
+}
+
+void QIMPenInput::strokeEntered( QIMPenStroke * )
+{
+ pw->greyStroke();
+}
+
+void QIMPenInput::erase()
+{
+ keypress( Qt::Key_Backspace << 16 );
+}
+
+void QIMPenInput::matchedCharacters( const QIMPenCharMatchList &cl )
+{
+ const QIMPenChar *ch = cl.first().penChar;
+ int scan = ch->character() >> 16;
+
+ if ( scan < QIMPenChar::ModeBase )
+ return;
+
+ // We matched a special character...
+
+ switch ( scan ) {
+ case QIMPenChar::Caps:
+ if ( profile->style() == QIMPenProfile::ToggleCases ) {
+// qDebug( "Caps" );
+ if ( mode == SwitchLock ) {
+// qDebug( "Switch to normal" );
+ pw->changeCharSet( profile->lowercase(), currCharSet );
+ mode = Switch;
+ } else {
+// qDebug( "Switch to upper" );
+ pw->changeCharSet( profile->uppercase(), currCharSet );
+ mode = Switch;
+ }
+ }
+ break;
+ case QIMPenChar::CapsLock:
+ if ( profile->style() == QIMPenProfile::ToggleCases ) {
+// qDebug( "CapsLock" );
+ if ( mode == Switch &&
+ baseSets.at(currCharSet) == profile->uppercase() ) {
+// qDebug( "Switch to normal" );
+ pw->changeCharSet( profile->lowercase(), currCharSet );
+ // change our base set back to lower.
+ baseSets.remove( currCharSet );
+ baseSets.insert( currCharSet, profile->lowercase() );
+ mode = Normal;
+ } else {
+// qDebug( "Switch to caps lock" );
+ pw->changeCharSet( profile->uppercase(), currCharSet );
+ // change our base set to upper.
+ baseSets.remove( currCharSet );
+ baseSets.insert( currCharSet, profile->uppercase() );
+ mode = SwitchLock;
+ }
+ }
+ break;
+ case QIMPenChar::Punctuation:
+ if ( profile->punctuation() ) {
+ //qDebug( "Switch to punctuation" );
+ pw->changeCharSet( profile->punctuation(), currCharSet );
+ mode = Switch;
+ }
+ break;
+ case QIMPenChar::Symbol:
+ if ( profile->symbol() ) {
+ //qDebug( "Switch to symbol" );
+ pw->changeCharSet( profile->symbol(), currCharSet );
+ mode = Switch;
+ }
+ break;
+ case QIMPenChar::Shortcut:
+ if ( shortcutCharSet ) {
+ pw->changeCharSet( shortcutCharSet, currCharSet );
+ mode = Switch;
+ }
+ break;
+ case QIMPenChar::Extended:
+ handleExtended( ch->data() );
+ break;
+ }
+}
+
+void QIMPenInput::keypress( uint scan_uni )
+{
+ int scan = scan_uni >> 16;
+ if ( !scan ) {
+ if ( scan_uni >= 'a' && scan_uni <= 'z' ) {
+ scan = Qt::Key_A + scan_uni - 'a';
+ } else if ( scan_uni >= 'A' && scan_uni <= 'Z' ) {
+ scan = Qt::Key_A + scan_uni - 'A';
+ } else if ( scan_uni == ' ' ) {
+ scan = Qt::Key_Space;
+ }
+ }
+
+ switch ( scan ) {
+ case Key_Tab:
+ scan_uni = 9;
+ break;
+ case Key_Return:
+ scan_uni = 13;
+ break;
+ case Key_Backspace:
+ scan_uni = 8;
+ break;
+ case Key_Escape:
+ scan_uni = 27;
+ break;
+ default:
+ break;
+ }
+
+ if ( mode == Switch ) {
+// qDebug( "Switch back to normal" );
+ pw->changeCharSet( baseSets.at(currCharSet), currCharSet );
+ if ( baseSets.at(currCharSet) == profile->uppercase() )
+ mode = SwitchLock;
+ else
+ mode = Normal;
+ }
+
+ emit key( scan_uni&0xffff, scan, 0, true, false );
+ emit key( scan_uni&0xffff, scan, 0, false, false );
+}
+
+void QIMPenInput::handleExtended( const QString &ex )
+{
+ if ( ex.find( "Select" ) == 0 ) {
+ QString set = ex.mid( 7 );
+ qDebug( "Select new profile: %s", set.latin1() );
+ selectProfile( set );
+ }
+}
+
+void QIMPenInput::help()
+{
+ if ( helpDlg )
+ delete (HandwritingHelp*) helpDlg;
+ helpDlg = new HandwritingHelp( profile, 0, 0, WDestructiveClose );
+ helpDlg->showMaximized();
+ helpDlg->show();
+ helpDlg->raise();
+}
+
+/*!
+ Open the setup dialog
+*/
+void QIMPenInput::setup()
+{
+ if ( !setupDlg ) {
+ // We are working with our copy of the char sets here.
+ setupDlg = new QIMPenSetup( profile, 0, 0, TRUE );
+ setupDlg->editor()->selectCharSet( profile->charSets().at(1) ); // lower case? This is crap.
+ if ( qApp->desktop()->width() < 640 )
+ setupDlg->showMaximized();
+ Global::hideInputMethod();
+ setupDlg->exec();
+ loadProfiles();
+ delete setupDlg;
+ setupDlg = 0;
+ Global::showInputMethod();
+ } else {
+ setupDlg->raise();
+ }
+}
+
+void QIMPenInput::backspace()
+{
+ keypress( Qt::Key_Backspace << 16 );
+ matcher->backspace();
+}
+
+void QIMPenInput::enter()
+{
+ keypress( Qt::Key_Return << 16 );
+ matcher->resetState();
+}
+
+
+void QIMPenInput::resetState()
+{
+ matcher->resetState();
+}
diff --git a/inputmethods/handwriting/qimpeninput.h b/inputmethods/handwriting/qimpeninput.h
new file mode 100644
index 0000000..b4e4006
--- a/dev/null
+++ b/inputmethods/handwriting/qimpeninput.h
@@ -0,0 +1,94 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef _QIMPENINPUT_H_
+#define _QIMPENINPUT_H_
+
+#include "qimpenprofile.h"
+
+#include <qpe/qdawg.h>
+
+#include <qframe.h>
+#include <qlist.h>
+#include <qguardedptr.h>
+
+class QPushButton;
+class QTimer;
+class QIMPenWidget;
+class QIMPenSetup;
+class QIMPenWordPick;
+class QIMPenMatch;
+class HandwritingHelp;
+
+class QIMPenInput : public QFrame
+{
+ Q_OBJECT
+public:
+ QIMPenInput( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ virtual ~QIMPenInput();
+
+ void resetState();
+
+ QSize sizeHint() const;
+
+signals:
+ void key( ushort, ushort, ushort, bool, bool );
+
+private slots:
+ void wordPicked( const QString & );
+ void selectCharSet( int );
+ void beginStroke();
+ void strokeEntered( QIMPenStroke *st );
+ void matchedCharacters( const QIMPenCharMatchList &cl );
+ void keypress( uint scan_uni );
+ void erase();
+ void help();
+ void setup();
+ void backspace();
+ void enter();
+
+private:
+ void loadProfiles();
+ void selectProfile( const QString &name );
+ void handleExtended( const QString & );
+ void updateWordMatch( QIMPenCharMatchList &ml );
+ void matchWords();
+ void scanDict( const QDawg::Node* n, int ipos, const QString& str, int error );
+
+ enum Mode { Normal, Switch, SwitchLock };
+
+private:
+ Mode mode;
+ QRect prefRect;
+ QIMPenWidget *pw;
+ QPushButton *helpBtn;
+ QPushButton *setupBtn;
+ QIMPenSetup *setupDlg;
+ QIMPenMatch *matcher;
+ QGuardedPtr<HandwritingHelp> helpDlg;
+ QIMPenProfile *profile;
+ QList<QIMPenProfile> profileList;
+ QIMPenCharSet *shortcutCharSet;
+ QIMPenCharSetList baseSets;
+ int currCharSet;
+ QIMPenWordPick *wordPicker;
+};
+
+#endif // _QIMPENINPUT_H_
diff --git a/inputmethods/handwriting/qimpenmatch.cpp b/inputmethods/handwriting/qimpenmatch.cpp
new file mode 100644
index 0000000..0d3e25a
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenmatch.cpp
@@ -0,0 +1,365 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qimpenmatch.h"
+
+#include <qpe/qdawg.h>
+#include <qpe/global.h>
+
+#include <qapplication.h>
+#include <qtimer.h>
+
+#include <limits.h>
+
+#define ERROR_THRESHOLD 200000
+#define LOOKAHEAD_ERROR 2500
+//#define DEBUG_QIMPEN
+
+QIMPenMatch::QIMPenMatch( QObject *parent, const char *name )
+ : QObject( parent, name )
+{
+ strokes.setAutoDelete( TRUE );
+ wordChars.setAutoDelete( TRUE );
+ wordMatches.setAutoDelete( TRUE );
+
+ multiTimer = new QTimer( this );
+ connect( multiTimer, SIGNAL(timeout()), this, SLOT(endMulti()) );
+
+ prevMatchChar = 0;
+ prevMatchError = INT_MAX;
+ charSet = 0;
+ multiCharSet = 0;
+ multiTimeout = 500;
+ canErase = FALSE;
+ doWordMatching = true;
+}
+
+QIMPenMatch::~QIMPenMatch()
+{
+}
+
+void QIMPenMatch::setCharSet( QIMPenCharSet *cs )
+{
+ charSet = cs;
+}
+
+void QIMPenMatch::beginStroke()
+{
+ multiTimer->stop();
+}
+
+void QIMPenMatch::strokeEntered( QIMPenStroke *st )
+{
+#ifdef DEBUG_QIMPEN
+ qDebug( "---------- new stroke -------------" );
+#endif
+ strokes.append( new QIMPenStroke( *st ) );
+
+ QIMPenChar testChar;
+ QIMPenStrokeIterator it(strokes);
+ for ( ; it.current(); ++it ) {
+ testChar.addStroke( it.current() );
+ }
+
+ QIMPenCharMatchList ml;
+ if ( strokes.count() > 1 && multiCharSet ) {
+#ifdef DEBUG_QIMPEN
+ qDebug( "Matching against multi set" );
+#endif
+ ml = multiCharSet->match( &testChar );
+ } else {
+#ifdef DEBUG_QIMPEN
+ qDebug( "Matching against single set" );
+#endif
+ ml = charSet->match( &testChar );
+ }
+
+ processMatches( ml );
+}
+
+void QIMPenMatch::processMatches( QIMPenCharMatchList &ml )
+{
+#ifdef DEBUG_QIMPEN
+ qDebug( "Entering strokes.count() = %d", strokes.count() );
+#endif
+ QIMPenCharMatch candidate1 = { INT_MAX, 0 };
+ QIMPenCharMatch candidate2 = { INT_MAX, 0 };
+ QIMPenCharMatchList ml2;
+
+ if ( ml.count() ) {//&&
+// ml.first().penChar->penStrokes().count() == strokes.count() ) {
+ candidate1 = ml.first();
+#ifdef DEBUG_QIMPEN
+ qDebug( QString("Candidate1 = %1").arg(QChar(candidate1.penChar->character())) );
+#endif
+ }
+
+ if ( strokes.count() > 1 ) {
+ // See if the last stroke can match a new character
+ QIMPenChar testChar;
+ QIMPenStroke *st = strokes.at(strokes.count()-1);
+ testChar.addStroke( st );
+ ml2 = charSet->match( &testChar );
+ if ( ml2.count() ) {
+ candidate2 = ml2.first();
+#ifdef DEBUG_QIMPEN
+ qDebug( QString("Candidate2 = %1").arg(QChar(candidate2.penChar->character())) );
+#endif
+ }
+ }
+
+ bool eraseLast = FALSE;
+ bool output = TRUE;
+
+ if ( candidate1.penChar && candidate2.penChar ) {
+ // Hmmm, a multi-stroke or a new character are both possible.
+ // Bias the multi-stroke case.
+ if ( QMAX(candidate2.error, prevMatchError)*3 < candidate1.error ) {
+ int i = strokes.count()-1;
+ while ( i-- ) {
+ strokes.removeFirst();
+ emit removeStroke();
+ }
+ prevMatchChar = candidate2.penChar;
+ prevMatchError = candidate2.error;
+ multiCharSet = charSet;
+ ml = ml2;
+#ifdef DEBUG_QIMPEN
+ qDebug( "** Using Candidate2" );
+#endif
+ } else {
+ if ( (prevMatchChar->character() >> 16) != Qt::Key_Backspace &&
+ (prevMatchChar->character() >> 16) < QIMPenChar::ModeBase )
+ eraseLast = TRUE;
+ prevMatchChar = candidate1.penChar;
+ prevMatchError = candidate1.error;
+#ifdef DEBUG_QIMPEN
+ qDebug( "** Using Candidate1, with erase" );
+#endif
+ }
+ } else if ( candidate1.penChar ) {
+ if ( strokes.count() != 1 )
+ eraseLast = TRUE;
+ else
+ multiCharSet = charSet;
+ prevMatchChar = candidate1.penChar;
+ prevMatchError = candidate1.error;
+#ifdef DEBUG_QIMPEN
+ qDebug( "** Using Candidate1" );
+#endif
+ } else if ( candidate2.penChar ) {
+ int i = strokes.count()-1;
+ while ( i-- ) {
+ strokes.removeFirst();
+ emit removeStroke();
+ }
+ prevMatchChar = candidate2.penChar;
+ prevMatchError = candidate2.error;
+ multiCharSet = charSet;
+ ml = ml2;
+#ifdef DEBUG_QIMPEN
+ qDebug( "** Using Candidate2" );
+#endif
+ } else {
+ if ( !ml.count() ) {
+#ifdef DEBUG_QIMPEN
+ qDebug( "** Failed" );
+#endif
+ canErase = FALSE;
+ } else {
+#ifdef DEBUG_QIMPEN
+ qDebug( "Need more strokes" );
+#endif
+ if ( strokes.count() == 1 )
+ canErase = FALSE;
+ multiCharSet = charSet;
+ }
+ output = FALSE;
+ emit noMatch();
+ }
+
+ if ( eraseLast && canErase ) {
+#ifdef DEBUG_QIMPEN
+ qDebug( "deleting last" );
+#endif
+ emit erase();
+ wordChars.removeLast();
+ wordEntered.truncate( wordEntered.length() - 1 );
+ }
+
+ if ( output ) {
+ emit matchedCharacters( ml );
+ uint code = prevMatchChar->character() >> 16;
+ if ( code < QIMPenChar::ModeBase ) {
+ updateWordMatch( ml );
+ emit keypress( prevMatchChar->character() );
+ }
+ canErase = TRUE;
+ }
+
+ if ( strokes.count() )
+ multiTimer->start( multiTimeout, TRUE );
+}
+
+void QIMPenMatch::updateWordMatch( QIMPenCharMatchList &ml )
+{
+ if ( !ml.count() || !doWordMatching )
+ return;
+ int ch = ml.first().penChar->character();
+ QChar qch( ch );
+ int code = ch >> 16;
+ if ( qch.isPunct() || qch.isSpace() ||
+ code == Qt::Key_Enter || code == Qt::Key_Return ||
+ code == Qt::Key_Tab || code == Qt::Key_Escape ) {
+// qDebug( "Word Matching: Clearing word" );
+ wordChars.clear();
+ wordMatches.clear();
+ wordEntered = QString();
+ } else if ( code == Qt::Key_Backspace ) {
+ //qDebug( "Word Matching: Handle backspace" );
+ wordChars.removeLast();
+ wordEntered.truncate( wordEntered.length() - 1 );
+ matchWords();
+ } else {
+ QIMPenChar *matchCh;
+
+ wordChars.append( new QIMPenCharMatchList() );
+ wordEntered += ml.first().penChar->character();
+
+ QIMPenCharMatchList::Iterator it;
+ for ( it = ml.begin(); it != ml.end(); ++it ) {
+ matchCh = (*it).penChar;
+
+ if ( matchCh->penStrokes().count() == strokes.count() ) {
+ QChar ch(matchCh->character());
+ if ( !ch.isPunct() && !ch.isSpace() ) {
+ wordChars.last()->append( QIMPenCharMatch( (*it) ) );
+ }
+ }
+ }
+ matchWords();
+ }
+ if ( !wordMatches.count() || wordMatches.getFirst()->word != wordEntered )
+ wordMatches.prepend( new MatchWord( wordEntered, 0 ) );
+ emit matchedWords( wordMatches );
+}
+
+void QIMPenMatch::matchWords()
+{
+ if ( wordEntered.length() > 0 ) {
+ // more leaniency if we don't have many matches
+ if ( badMatches < 200 )
+ errorThreshold += (200 - badMatches) * 100;
+ } else
+ errorThreshold = ERROR_THRESHOLD;
+ wordMatches.clear();
+ goodMatches = 0;
+ badMatches = 0;
+ if ( wordChars.count() > 0 ) {
+ maxGuess = (int)wordChars.count() * 2;
+ if ( maxGuess < 3 )
+ maxGuess = 3;
+ QString str;
+ scanDict( Global::fixedDawg().root(), 0, str, 0 );
+/*
+ QListIterator<MatchWord> it( wordMatches);
+ for ( ; it.current(); ++it ) {
+ qDebug( QString("Match word: %1").arg(it.current()->word) );
+ }
+*/
+ }
+ //qDebug( "Possibles: Good %d, total %d", goodMatches, wordMatches.count() );
+ wordMatches.sort();
+}
+
+void QIMPenMatch::scanDict( const QDawg::Node* n, int ipos, const QString& str, int error )
+{
+ if ( !n )
+ return;
+ if ( error / (ipos+1) > errorThreshold )
+ return;
+
+ while (n) {
+ if ( goodMatches > 20 )
+ break;
+ if ( ipos < (int)wordChars.count() ) {
+ int i;
+ QChar testCh = QChar(n->letter());
+ QIMPenCharMatchList::Iterator it;
+ for ( i = 0, it = wordChars.at(ipos)->begin();
+ it != wordChars.at(ipos)->end() && i < 8; ++it, i++ ) {
+ QChar ch( (*it).penChar->character() );
+ if ( ch == testCh || ( !ipos && ch.lower() == testCh.lower() ) ) {
+ int newerr = error + (*it).error;
+ if ( testCh.category() == QChar::Letter_Uppercase )
+ ch = testCh;
+ QString newstr( str + ch );
+ if ( n->isWord() && ipos == (int)wordChars.count() - 1 ) {
+ wordMatches.append( new MatchWord( newstr, newerr ) );
+ goodMatches++;
+ }
+ scanDict( n->jump(), ipos+1, newstr, newerr );
+ }
+ }
+ } else if ( badMatches < 200 && ipos < maxGuess ) {
+ int d = ipos - wordChars.count();
+ int newerr = error + ERROR_THRESHOLD + LOOKAHEAD_ERROR*d;
+ QString newstr( str + n->letter() );
+ if ( n->isWord() ) {
+ wordMatches.append( new MatchWord( newstr, newerr ) );
+ badMatches++;
+ }
+ scanDict( n->jump(), ipos+1, newstr, newerr );
+ }
+ n = n->next();
+ }
+}
+
+void QIMPenMatch::backspace()
+{
+ wordChars.removeLast();
+ wordEntered.truncate( wordEntered.length() - 1 );
+ matchWords();
+ if ( !wordMatches.count() || wordMatches.getFirst()->word != wordEntered )
+ wordMatches.prepend( new MatchWord( wordEntered, 0 ) );
+ emit matchedWords( wordMatches );
+ if ( wordEntered.length() )
+ canErase = TRUE;
+}
+
+void QIMPenMatch::endMulti()
+{
+ int i = strokes.count();
+ while ( i-- )
+ emit removeStroke();
+ strokes.clear();
+ multiCharSet = 0;
+}
+
+void QIMPenMatch::resetState()
+{
+ if ( !wordEntered.isEmpty() ) {
+ wordChars.clear();
+ wordMatches.clear();
+ wordEntered = QString();
+ emit matchedWords( wordMatches );
+ canErase = FALSE;
+ }
+}
diff --git a/inputmethods/handwriting/qimpenmatch.h b/inputmethods/handwriting/qimpenmatch.h
new file mode 100644
index 0000000..d4a730e
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenmatch.h
@@ -0,0 +1,107 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef _QIMPENMATCH_H_
+#define _QIMPENMATCH_H_
+
+#include "qimpenchar.h"
+
+#include <qpe/qdawg.h>
+
+#include <qlist.h>
+
+class QTimer;
+class QIMPenWidget;
+class QIMPenSetup;
+class QIMPenWordPick;
+
+class QIMPenMatch : public QObject
+{
+ Q_OBJECT
+public:
+ QIMPenMatch( QObject *parent=0, const char *name=0 );
+ virtual ~QIMPenMatch();
+
+ void resetState();
+ void backspace();
+ void setMultiStrokeTimeout( int t ) { multiTimeout = t; }
+
+ const QString &word() const { return wordEntered; }
+
+ void setWordMatchingEnabled( bool e ) { doWordMatching = e; }
+ bool isWordMatchingEnabled() const { return doWordMatching; }
+
+ struct MatchWord {
+ MatchWord( const QString &w, int e ) { word = w; error = e; }
+ QString word;
+ int error;
+ };
+
+ class MatchWordList : public QList<MatchWord>
+ {
+ public:
+ int compareItems( QCollection::Item item1, QCollection::Item item2 ) {
+ MatchWord *m1 = (MatchWord *)item1;
+ MatchWord *m2 = (MatchWord *)item2;
+ return m1->error - m2->error;
+ }
+ };
+
+public slots:
+ void setCharSet( QIMPenCharSet * );
+ void beginStroke();
+ void strokeEntered( QIMPenStroke *st );
+
+signals:
+ void erase();
+ void noMatch();
+ void removeStroke();
+ void keypress( uint ch );
+ void matchedCharacters( const QIMPenCharMatchList & );
+ void matchedWords( const QIMPenMatch::MatchWordList & );
+
+protected slots:
+ void processMatches( QIMPenCharMatchList &ml );
+ void endMulti();
+
+protected:
+ void updateWordMatch( QIMPenCharMatchList &ml );
+ void matchWords();
+ void scanDict( const QDawg::Node* n, int ipos, const QString& str, int error );
+
+ QList<QIMPenStroke> strokes;
+ QIMPenChar *prevMatchChar;
+ int prevMatchError;
+ QIMPenCharSet *charSet;
+ QIMPenCharSet *multiCharSet;
+ QList<QIMPenCharMatchList> wordChars;
+ MatchWordList wordMatches;
+ QString wordEntered;
+ bool doWordMatching;
+ bool canErase;
+ int errorThreshold;
+ int goodMatches;
+ int badMatches;
+ int maxGuess;
+ QTimer *multiTimer;
+ int multiTimeout;
+};
+
+#endif // _QIMPENINPUT_H_
diff --git a/inputmethods/handwriting/qimpenprefbase.ui b/inputmethods/handwriting/qimpenprefbase.ui
new file mode 100644
index 0000000..1639d1a
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenprefbase.ui
@@ -0,0 +1,185 @@
+<!DOCTYPE UI><UI>
+<class>QIMPenPrefBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>QIMPenPrefBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>247</width>
+ <height>280</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Multi-stroke character timeout:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QSlider</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>multiStrokeSlider</cstring>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>250</number>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>1000</number>
+ </property>
+ <property stdset="1">
+ <name>lineStep</name>
+ <number>10</number>
+ </property>
+ <property stdset="1">
+ <name>pageStep</name>
+ <number>50</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>500</number>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>tickmarks</name>
+ <enum>Right</enum>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>multiStrokeLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>minimumSize</name>
+ <size>
+ <width>45</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>ms</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignVCenter|AlignRight</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QButtonGroup</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>inputStyle</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Input areas displayed</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QRadioButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>bothCasesRadio</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Upper and lower case areas</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QRadioButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>toggleCaseRadio</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Lower case (toggle Upper case)</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+</UI>
diff --git a/inputmethods/handwriting/qimpenprofile.cpp b/inputmethods/handwriting/qimpenprofile.cpp
new file mode 100644
index 0000000..4b5bb83
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenprofile.cpp
@@ -0,0 +1,245 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qimpencombining.h"
+#include "qimpenprofile.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+#include <qpe/global.h>
+
+
+QIMPenProfile::QIMPenProfile( const QString &fn )
+ : filename( fn )
+{
+ sets.setAutoDelete( true );
+
+ Config config( filename, Config::File );
+ config.setGroup( "Handwriting" );
+
+ pname = config.readEntry( "Name" );
+ pdesc = config.readEntry( "Description" );
+
+ tstyle = config.readBoolEntry( "CanSelectStyle", false );
+
+ wordMatch = config.readBoolEntry( "MatchWords", true );
+
+ config.setGroup( "Settings" );
+
+ pstyle = BothCases;
+ QString s = config.readEntry( "Style", "BothCases" );
+ if ( s == "ToggleCases" )
+ pstyle = ToggleCases;
+
+ msTimeout = config.readNumEntry( "MultiTimeout", 500 );
+
+ // Read user configuration
+ Config usrConfig( userConfig() );
+ usrConfig.setGroup( "Settings" );
+ msTimeout = usrConfig.readNumEntry( "MultiTimeout", msTimeout );
+
+ if ( tstyle && usrConfig.hasKey( "Style" ) ) {
+ pstyle = BothCases;
+ QString s = usrConfig.readEntry( "Style", "BothCases" );
+ if ( s == "ToggleCases" )
+ pstyle = ToggleCases;
+ }
+}
+
+void QIMPenProfile::setStyle( Style s )
+{
+ if ( tstyle && s != pstyle ) {
+ pstyle = s;
+ Config config( userConfig() );
+ config.setGroup( "Settings" );
+ QString s = pstyle == ToggleCases ? "ToggleCases" : "BothCases";
+ config.writeEntry( "Style", s );
+ }
+}
+
+void QIMPenProfile::setMultiStrokeTimeout( int t )
+{
+ if ( t != msTimeout ) {
+ msTimeout = t;
+ Config config( userConfig() );
+ config.setGroup( "Settings" );
+ config.writeEntry( "MultiTimeout", msTimeout );
+ }
+}
+
+QString QIMPenProfile::userConfig()
+{
+ QString un = filename;
+ int pos = un.findRev( '/' );
+ if ( pos >= 0 )
+ un = un.mid( pos + 1 );
+ pos = un.find( '.' );
+ if ( pos > 0 )
+ un.truncate( pos );
+
+ un = "handwriting-" + un;
+
+ return un;
+}
+
+void QIMPenProfile::loadData()
+{
+ Config config( filename, Config::File );
+ config.setGroup( "CharSets" );
+
+ QString baseDir = QPEApplication::qpeDir();
+ baseDir += "/etc/";
+ // accents
+ QIMPenCombining *combining = 0;
+ QString s = config.readEntry( "Combining" );
+ if ( !s.isEmpty() ) {
+ combining = new QIMPenCombining( baseDir + "qimpen/" + s );
+ if ( combining->isEmpty() ) {
+ delete combining;
+ combining = 0;
+ }
+ }
+ // uppercase latin1
+ QIMPenCharSet *cs = 0;
+ s = config.readEntry( "Uppercase" );
+ if ( !s.isEmpty() ) {
+ cs = new QIMPenCharSet( baseDir + "qimpen/" + s );
+ cs->load( Global::applicationFileName("qimpen",s), QIMPenCharSet::User );
+ if ( !cs->isEmpty() ) {
+ if ( combining )
+ combining->addCombined( cs );
+ sets.append( cs );
+ } else {
+ delete cs;
+ }
+ }
+ // lowercase latin1
+ s = config.readEntry( "Lowercase" );
+ if ( !s.isEmpty() ) {
+ cs = new QIMPenCharSet( baseDir + "qimpen/" + s );
+ cs->load( Global::applicationFileName("qimpen",s), QIMPenCharSet::User );
+ if ( !cs->isEmpty() ) {
+ if ( combining )
+ combining->addCombined( cs );
+ sets.append( cs );
+ } else {
+ delete cs;
+ }
+ }
+ // numeric (may comtain punctuation and symbols)
+ s = config.readEntry( "Numeric" );
+ if ( !s.isEmpty() ) {
+ cs = new QIMPenCharSet( baseDir + "qimpen/" + s );
+ cs->load( Global::applicationFileName("qimpen",s), QIMPenCharSet::User );
+ if ( !cs->isEmpty() ) {
+ sets.append( cs );
+ } else {
+ delete cs;
+ }
+ }
+ // punctuation
+ s = config.readEntry( "Punctuation" );
+ if ( !s.isEmpty() ) {
+ cs = new QIMPenCharSet( baseDir + "qimpen/" + s );
+ cs->load( Global::applicationFileName("qimpen",s), QIMPenCharSet::User );
+ if ( !cs->isEmpty() ) {
+ sets.append( cs );
+ } else {
+ delete cs;
+ }
+ }
+ // symbol
+ s = config.readEntry( "Symbol" );
+ if ( !s.isEmpty() ) {
+ cs = new QIMPenCharSet( baseDir + "qimpen/" + s );
+ cs->load( Global::applicationFileName("qimpen",s), QIMPenCharSet::User );
+ if ( !cs->isEmpty() ) {
+ sets.append( cs );
+ } else {
+ delete cs;
+ }
+ }
+ // shortcut
+ s = config.readEntry( "Shortcut" );
+ if ( !s.isEmpty() ) {
+ cs = new QIMPenCharSet( baseDir + "qimpen/" + s );
+ cs->load( Global::applicationFileName("qimpen",s), QIMPenCharSet::User );
+ if ( !cs->isEmpty() ) {
+ sets.append( cs );
+ } else {
+ delete cs;
+ }
+ }
+
+ if ( combining )
+ delete combining;
+}
+
+QIMPenCharSet *QIMPenProfile::uppercase()
+{
+ return find( QIMPenCharSet::Upper );
+}
+
+QIMPenCharSet *QIMPenProfile::lowercase()
+{
+ return find( QIMPenCharSet::Lower );
+}
+
+QIMPenCharSet *QIMPenProfile::numeric()
+{
+ return find( QIMPenCharSet::Numeric );
+}
+
+QIMPenCharSet *QIMPenProfile::punctuation()
+{
+ return find( QIMPenCharSet::Punctuation );
+}
+
+QIMPenCharSet *QIMPenProfile::symbol()
+{
+ return find( QIMPenCharSet::Symbol );
+}
+
+QIMPenCharSet *QIMPenProfile::shortcut()
+{
+ return find( QIMPenCharSet::Shortcut );
+}
+
+QIMPenCharSetList &QIMPenProfile::charSets()
+{
+ if ( sets.isEmpty() )
+ loadData();
+ return sets;
+}
+
+QIMPenCharSet *QIMPenProfile::find( QIMPenCharSet::Type t )
+{
+ if ( sets.isEmpty() )
+ loadData();
+ QIMPenCharSetIterator it( sets );
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->type() == t )
+ return it.current();
+ }
+
+ return 0;
+}
+
+
diff --git a/inputmethods/handwriting/qimpenprofile.h b/inputmethods/handwriting/qimpenprofile.h
new file mode 100644
index 0000000..4ce4367
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenprofile.h
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QIMPENPROFILE_H_
+#define QIMPENPROFILE_H_
+
+#include "qimpenchar.h"
+
+class QIMPenProfile
+{
+public:
+ QIMPenProfile( const QString &fn );
+
+ const QString &name() const { return pname; }
+ const QString &description() const { return pdesc; }
+
+ enum Style { ToggleCases, BothCases };
+ Style style() const { return pstyle; }
+ void setStyle( Style s );
+
+ bool canSelectStyle() const { return tstyle; }
+
+ int multiStrokeTimeout() const { return msTimeout; }
+ void setMultiStrokeTimeout( int t );
+
+ bool matchWords() const { return wordMatch; }
+
+ QIMPenCharSet *uppercase();
+ QIMPenCharSet *lowercase();
+ QIMPenCharSet *numeric();
+ QIMPenCharSet *punctuation();
+ QIMPenCharSet *symbol();
+ QIMPenCharSet *shortcut();
+ QIMPenCharSet *find( QIMPenCharSet::Type t );
+
+ QIMPenCharSetList &charSets();
+
+private:
+ QString userConfig();
+ void loadData();
+
+private:
+ QIMPenCharSetList sets;
+ QString filename;
+ QString pname;
+ QString pdesc;
+ Style pstyle;
+ bool tstyle;
+ int msTimeout;
+ bool wordMatch;
+};
+
+#endif
diff --git a/inputmethods/handwriting/qimpensetup.cpp b/inputmethods/handwriting/qimpensetup.cpp
new file mode 100644
index 0000000..a6ae3a8
--- a/dev/null
+++ b/inputmethods/handwriting/qimpensetup.cpp
@@ -0,0 +1,656 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qimpenwidget.h"
+#include "qimpenprefbase.h"
+#include "qimpensetup.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/config.h>
+
+#include <qcombobox.h>
+#include <qlistbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qlayout.h>
+#include <qpixmap.h>
+#include <qbuttongroup.h>
+#include <qslider.h>
+#include <qtabwidget.h>
+#include <qdir.h>
+#include <qmessagebox.h>
+
+
+/* XPM */
+static const char * const left_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" . ",
+" .. ",
+" ... ",
+" .... ",
+" ..... ",
+" ...... ",
+" ..... ",
+" .... ",
+" ... ",
+" .. ",
+" . ",
+" ",
+" "};
+
+
+/* XPM */
+static const char * const right_xpm[] = {
+"16 16 2 1",
+" c None",
+". c #000000",
+" ",
+" ",
+" ",
+" . ",
+" .. ",
+" ... ",
+" .... ",
+" ..... ",
+" ...... ",
+" ..... ",
+" .... ",
+" ... ",
+" .. ",
+" . ",
+" ",
+" "};
+
+
+
+QIMPenSetup::QIMPenSetup( QIMPenProfile *p, QWidget *parent,
+ const char *name, bool modal, int WFlags )
+ : QDialog( parent, name, modal, WFlags ), profileCombo(0), profile(p)
+{
+ setCaption( tr("Setup Handwriting Input") );
+
+ QVBoxLayout *vb = new QVBoxLayout( this );
+
+#if 0
+ profileList.setAutoDelete( true );
+ QHBoxLayout *hb = new QHBoxLayout( vb );
+ hb->setMargin( 6 );
+ QLabel *l = new QLabel( tr("Character Profile:"), this );
+ hb->addWidget( l );
+ profileCombo = new QComboBox( this );
+ connect( profileCombo, SIGNAL(activated(const QString &)),
+ this, SLOT(selectProfile(const QString &)) );
+ hb->addWidget( profileCombo );
+ loadProfiles();
+#else
+ profileList.append( profile );
+#endif
+
+ QTabWidget *tw = new QTabWidget( this );
+ vb->addWidget( tw );
+
+ pref = new QIMPenPrefBase( this );
+ tw->addTab( pref, tr("Preferences") );
+
+ pref->inputStyle->setExclusive( TRUE );
+
+ style = profile->style() == QIMPenProfile::ToggleCases ? 1 : 0;
+ pref->inputStyle->setButton( style );
+ connect( pref->inputStyle, SIGNAL(clicked(int)),
+ this, SLOT(styleClicked(int)) );
+ pref->inputStyle->setEnabled( profile->canSelectStyle() );
+
+ multiTimeout = profile->multiStrokeTimeout();
+ pref->multiStrokeSlider->setValue( multiTimeout );
+ multiTimeoutChanged( multiTimeout );
+ connect( pref->multiStrokeSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(multiTimeoutChanged(int)) );
+
+ edit = new QIMPenEdit( p, tw );
+ tw->addTab( edit, tr("Customize") );
+}
+
+void QIMPenSetup::loadProfiles()
+{
+ QString path = QPEApplication::qpeDir() + "etc/qimpen";
+ QDir dir( path, "*.conf" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ QIMPenProfile *p = new QIMPenProfile( path + "/" + *it );
+ profileList.append( p );
+ profileCombo->insertItem( p->name() );
+ if ( p->name() == profile->name() ) {
+ profileCombo->setCurrentItem( profileCombo->count()-1 );
+ profile = p;
+ }
+ }
+}
+
+void QIMPenSetup::styleClicked( int id )
+{
+ style = id;
+}
+
+void QIMPenSetup::multiTimeoutChanged( int v )
+{
+ multiTimeout = v;
+ pref->multiStrokeLabel->setText( tr("%1 ms").arg(v) );
+}
+
+void QIMPenSetup::selectProfile( const QString &p )
+{
+ if ( p == profile->name() )
+ return;
+
+ profile->setStyle( style ? QIMPenProfile::ToggleCases : QIMPenProfile::BothCases );
+ profile->setMultiStrokeTimeout( multiTimeout );
+
+ for ( int i = 0; i < (int)profileList.count(); i++ ) {
+ if ( profileList.at(i)->name() == p ) {
+ profile = profileList.at(i);
+ style = profile->style() == QIMPenProfile::ToggleCases ? 1 : 0;
+ pref->inputStyle->setButton( style );
+ pref->inputStyle->setEnabled( profile->canSelectStyle() );
+ multiTimeout = profile->multiStrokeTimeout();
+ pref->multiStrokeSlider->setValue( multiTimeout );
+ multiTimeoutChanged( multiTimeout );
+ edit->setProfile( profile );
+ break;
+ }
+ }
+}
+
+void QIMPenSetup::accept()
+{
+ profile->setStyle( style ? QIMPenProfile::ToggleCases : QIMPenProfile::BothCases );
+ profile->setMultiStrokeTimeout( multiTimeout );
+ // Save current profile
+ if ( profileCombo ) {
+ Config config( "handwriting" );
+ config.setGroup( "Settings" );
+ config.writeEntry( "Profile", profileCombo->currentText() );
+ }
+ // Save charsets
+ bool ok = TRUE;
+ for ( int i = 0; i < (int)profileList.count(); i++ ) {
+ QIMPenProfile *prof = profileList.at(i);
+ QIMPenCharSetIterator it(prof->charSets());
+ for ( ; it.current(); ++it ) {
+ if ( !(it.current()->save( QIMPenCharSet::User )) ) {
+ ok = FALSE;
+ break;
+ }
+ }
+ }
+ if ( !ok ) {
+ if ( QMessageBox::critical( 0, tr( "Out of space" ),
+ tr("Unable to save information.\n"
+ "Free up some space\n"
+ "and try again.\n"
+ "\nQuit anyway?"),
+ QMessageBox::Yes|QMessageBox::Escape,
+ QMessageBox::No|QMessageBox::Default )
+ != QMessageBox::No ) {
+ QDialog::accept();
+ }
+ } else {
+ QDialog::accept();
+ }
+}
+
+//---------------------------------------------------------------------------
+
+QIMPenInputCharDlg::QIMPenInputCharDlg( QWidget *parent, const char *name,
+ bool modal, int WFlags)
+ : QDialog( parent, name, modal, WFlags )
+{
+ setCaption( tr("Enter new character") );
+ uni = 0;
+
+ QVBoxLayout *vb = new QVBoxLayout( this, 10 );
+
+ QHBoxLayout *hb = new QHBoxLayout();
+ vb->addLayout( hb );
+
+ QLabel *label = new QLabel( "Character:", this );
+ hb->addWidget( label );
+
+ QComboBox *cb = new QComboBox( TRUE, this );
+ connect( cb, SIGNAL(activated(int)), SLOT(setSpecial(int)) );
+ connect( cb, SIGNAL(textChanged(const QString &)),
+ SLOT(setCharacter(const QString &)) );
+ addSpecial( cb );
+ cb->setEditText( "" );
+ hb->addWidget( cb );
+
+ hb = new QHBoxLayout();
+ vb->addLayout( hb );
+
+ QPushButton *pb = new QPushButton( "OK", this );
+ connect( pb, SIGNAL(clicked()), SLOT(accept()));
+ hb->addWidget( pb );
+ pb = new QPushButton( "Cancel", this );
+ connect( pb, SIGNAL(clicked()), SLOT(reject()));
+ hb->addWidget( pb );
+
+ cb->setFocus();
+}
+
+void QIMPenInputCharDlg::addSpecial( QComboBox *cb )
+{
+ int i = 0;
+ while ( qimpen_specialKeys[i].code != Key_unknown ) {
+ cb->insertItem( qimpen_specialKeys[i].name );
+ i++;
+ }
+}
+
+void QIMPenInputCharDlg::setSpecial( int sp )
+{
+ uni = qimpen_specialKeys[sp].code << 16;
+}
+
+void QIMPenInputCharDlg::setCharacter( const QString &string )
+{
+ uni = string[0].unicode();
+}
+
+//---------------------------------------------------------------------------
+
+class CharListItem : public QListBoxText
+{
+public:
+ CharListItem( const QString &text, uint c )
+ : QListBoxText( text )
+ {
+ _code = c;
+ }
+
+ uint code() const { return _code; }
+
+protected:
+ uint _code;
+};
+
+/*!
+ \class QIMPenEdit qimpensetup.h
+
+ Class to allow users to input totally useless character definitions
+ which could match any number of the default set.
+*/
+
+QIMPenEdit::QIMPenEdit( QIMPenProfile *p, QWidget *parent,
+ const char *name )
+ : QWidget( parent, name ), profile(p)
+{
+ currentChar = 0;
+ currentCode = 0;
+ inputChar = new QIMPenChar();
+
+ QVBoxLayout *tvb = new QVBoxLayout( this, 5 );
+
+ QGridLayout *gl = new QGridLayout( tvb, 4, 2 );
+ gl->setRowStretch( 1, 1 );
+ gl->addRowSpacing( 2, 35 );
+ gl->addRowSpacing( 3, 35 );
+
+ charSetCombo = new QComboBox( this );
+ gl->addMultiCellWidget( charSetCombo, 0, 0, 0, 1 );
+ connect( charSetCombo, SIGNAL(activated(int)), SLOT(selectCharSet(int)));
+ QIMPenCharSetIterator it( profile->charSets() );
+ for ( ; it.current(); ++it ) {
+ charSetCombo->insertItem( it.current()->description() );
+ }
+
+ charList = new QListBox( this );
+ charList->setMinimumHeight( charList->sizeHint().height() );
+ connect( charList, SIGNAL(highlighted(int)), SLOT(selectChar(int)) );
+ gl->addWidget( charList, 1, 0 );
+
+ pw = new QIMPenWidget( this );
+ pw->setFixedHeight( 75 );
+ gl->addMultiCellWidget( pw, 2, 3, 0, 0 );
+ connect( pw, SIGNAL(stroke(QIMPenStroke *)),
+ SLOT(newStroke(QIMPenStroke *)) );
+
+ QVBoxLayout *vb = new QVBoxLayout();
+ gl->addLayout( vb, 1, 1 );
+ newBtn = new QPushButton( tr("New..."), this );
+ connect( newBtn, SIGNAL(clicked()), SLOT(addNewChar()) );
+ vb->addWidget( newBtn );
+
+ addBtn = new QPushButton( tr("Add"), this );
+ connect( addBtn, SIGNAL(clicked()), SLOT(addChar()) );
+ vb->addWidget( addBtn );
+
+ removeBtn = new QPushButton( tr("Remove"), this );
+ connect( removeBtn, SIGNAL(clicked()), SLOT(removeChar()) );
+ vb->addWidget( removeBtn );
+
+ QPushButton *pb = new QPushButton( tr("Default"), this );
+ connect( pb, SIGNAL(clicked()), SLOT(defaultChars()) );
+ vb->addWidget( pb );
+
+ QHBoxLayout *hb = new QHBoxLayout();
+ gl->addLayout( hb, 2, 1 );
+ prevBtn = new QPushButton( this );
+ prevBtn->setPixmap( QPixmap( (const char **)left_xpm ) );
+ connect( prevBtn, SIGNAL(clicked()), SLOT(prevChar()));
+ hb->addWidget( prevBtn );
+
+ nextBtn = new QPushButton( this );
+ nextBtn->setPixmap( QPixmap( (const char **)right_xpm ) );
+ connect( nextBtn, SIGNAL(clicked()), SLOT(nextChar()));
+ hb->addWidget( nextBtn );
+
+ pb = new QPushButton( tr("Clear"), this );
+ connect( pb, SIGNAL(clicked()), SLOT(clearChar()) );
+ gl->addWidget( pb, 3, 1 );
+
+ //--
+#if !defined(Q_WS_QWS)
+ hb = new QHBoxLayout( tvb );
+ pb = new QPushButton( "OK", this );
+ connect( pb, SIGNAL(clicked()), SLOT(accept()) );
+ hb->addWidget( pb );
+
+ pb = new QPushButton( "Cancel", this );
+ connect( pb, SIGNAL(clicked()), SLOT(reject()) );
+ hb->addWidget( pb );
+#endif
+ selectCharSet( 0 );
+ charList->setFocus();
+
+ resize( minimumSize() );
+ enableButtons();
+}
+
+void QIMPenEdit::setProfile( QIMPenProfile *p )
+{
+ profile = p;
+ charSetCombo->clear();
+ QIMPenCharSetIterator it( profile->charSets() );
+ for ( ; it.current(); ++it ) {
+ charSetCombo->insertItem( it.current()->description() );
+ }
+ selectCharSet( 0 );
+ charList->setFocus();
+ enableButtons();
+}
+
+void QIMPenEdit::selectCharSet( QIMPenCharSet *c )
+{
+ int i = 0;
+ QIMPenCharSetIterator it( profile->charSets() );
+ for ( ; it.current(); ++it, i++ ) {
+ if ( it.current() == c ) {
+ charSetCombo->setCurrentItem( i );
+ selectCharSet( i );
+ }
+ }
+}
+
+
+/*!
+ Fill the character list box with the characters. Duplicates are not
+ inserted.
+*/
+void QIMPenEdit::fillCharList()
+{
+ charList->clear();
+ QIMPenCharIterator it( currentSet->characters() );
+ CharListItem *li = 0;
+ for ( ; it.current(); ++it ) {
+ uint ch = it.current()->character();
+ QString n = it.current()->name();
+ if ( !n.isEmpty() )
+ li = new CharListItem( n, ch );
+ if ( li ) {
+ CharListItem *i = (CharListItem *)charList->findItem( li->text() );
+ if ( !i || i->code() != ch ) {
+ charList->insertItem( li );
+ } else {
+ delete li;
+ li = 0;
+ }
+ }
+ }
+ currentChar = 0;
+}
+
+void QIMPenEdit::enableButtons()
+{
+ bool add = !inputChar->isEmpty();
+ newBtn->setEnabled( add );
+ addBtn->setEnabled( add );
+ removeBtn->setEnabled( currentChar );
+}
+
+/*!
+ Find the previous character with the same code as the current one.
+ returns 0 if there is no previous character.
+*/
+QIMPenChar *QIMPenEdit::findPrev()
+{
+ if ( !currentChar )
+ return 0;
+ QIMPenCharIterator it( currentSet->characters() );
+ bool found = FALSE;
+ for ( it.toLast(); it.current(); --it ) {
+ if ( !found && it.current() == currentChar )
+ found = TRUE;
+ else if ( found && it.current()->character() == currentCode &&
+ !it.current()->testFlag( QIMPenChar::Deleted ) ) {
+ return it.current();
+ }
+ }
+
+ return 0;
+}
+
+/*!
+ Find the next character with the same code as the current one.
+ returns 0 if there is no next character.
+*/
+QIMPenChar *QIMPenEdit::findNext()
+{
+ if ( !currentChar )
+ return 0;
+ QIMPenCharIterator it( currentSet->characters() );
+ bool found = FALSE;
+ for ( ; it.current(); ++it ) {
+ if ( !found && it.current() == currentChar )
+ found = TRUE;
+ else if ( found && it.current()->character() == currentCode &&
+ !it.current()->testFlag( QIMPenChar::Deleted ) ) {
+ return it.current();
+ }
+ }
+
+ return 0;
+}
+
+void QIMPenEdit::setCurrentChar( QIMPenChar *pc )
+{
+ currentChar = pc;
+ pw->showCharacter( currentChar );
+ if ( currentChar ) {
+ prevBtn->setEnabled( findPrev() != 0 );
+ nextBtn->setEnabled( findNext() != 0 );
+ }
+}
+
+void QIMPenEdit::prevChar()
+{
+ QIMPenChar *pc = findPrev();
+ if ( pc )
+ setCurrentChar( pc );
+}
+
+void QIMPenEdit::nextChar()
+{
+ QIMPenChar *pc = findNext();
+ if ( pc )
+ setCurrentChar( pc );
+}
+
+void QIMPenEdit::clearChar()
+{
+ inputChar->clear();
+ pw->clear();
+ enableButtons();
+}
+
+void QIMPenEdit::selectChar( int i )
+{
+ currentChar = 0;
+ currentCode = ((CharListItem *)charList->item(i))->code();
+ QIMPenCharIterator it(currentSet->characters() );
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->character() == currentCode &&
+ !it.current()->testFlag( QIMPenChar::Deleted ) ) {
+ setCurrentChar( it.current() );
+ break;
+ }
+ }
+ if ( !it.current() )
+ setCurrentChar( 0 );
+ inputChar->clear();
+}
+
+void QIMPenEdit::selectCharSet( int i )
+{
+ if ( currentSet )
+ pw->removeCharSet( 0 );
+ currentSet = profile->charSets().at( i );
+ fillCharList();
+ pw->insertCharSet( currentSet );
+ inputChar->clear();
+ if ( charList->count() ) {
+ charList->setSelected( 0, TRUE );
+ selectChar(0);
+ }
+}
+
+void QIMPenEdit::addChar()
+{
+ if ( !inputChar->isEmpty() ) {
+ QIMPenChar *pc = new QIMPenChar( *inputChar );
+ pc->setCharacter( currentCode );
+
+ // User characters override all matching system characters.
+ // Copy and mark deleted identical system characters.
+ QIMPenCharIterator it(currentSet->characters() );
+ QIMPenChar *sc = 0;
+ while ( (sc = it.current()) != 0 ) {
+ ++it;
+ if ( sc->character() == currentCode &&
+ sc->testFlag( QIMPenChar::System ) &&
+ !sc->testFlag( QIMPenChar::Deleted ) ) {
+ QIMPenChar *cc = new QIMPenChar( *sc );
+ cc->clearFlag( QIMPenChar::System );
+ currentSet->addChar( cc );
+ sc->setFlag( QIMPenChar::Deleted );
+ }
+ }
+
+ currentSet->addChar( pc );
+ setCurrentChar( pc );
+ inputChar->clear();
+ }
+}
+
+void QIMPenEdit::addNewChar()
+{
+ if ( !inputChar->isEmpty() ) {
+ QIMPenInputCharDlg dlg( 0, 0, TRUE );
+ if ( dlg.exec() ) {
+ currentCode = dlg.unicode();
+ addChar();
+ fillCharList();
+ for ( unsigned int i = 0; i < charList->count(); i++ ) {
+ CharListItem *li = (CharListItem *)charList->item(i);
+ if ( li->code() == dlg.unicode() ) {
+ charList->setSelected( i, TRUE );
+ break;
+ }
+ }
+ }
+ }
+}
+
+void QIMPenEdit::removeChar()
+{
+ if ( currentChar ) {
+ QIMPenChar *pc = findPrev();
+ if ( !pc ) pc = findNext();
+ if ( currentChar->testFlag( QIMPenChar::System ) )
+ currentChar->setFlag( QIMPenChar::Deleted );
+ else
+ currentSet->removeChar( currentChar );
+ setCurrentChar( pc );
+ }
+}
+
+void QIMPenEdit::defaultChars()
+{
+ if ( currentCode ) {
+ currentChar = 0;
+ bool haveSystem = FALSE;
+ QIMPenCharIterator it(currentSet->characters() );
+ for ( ; it.current(); ++it ) {
+ if ( it.current()->character() == currentCode &&
+ it.current()->testFlag( QIMPenChar::System ) ) {
+ haveSystem = TRUE;
+ break;
+ }
+ }
+ if ( haveSystem ) {
+ it.toFirst();
+ while ( it.current() ) {
+ QIMPenChar *pc = it.current();
+ ++it;
+ if ( pc->character() == currentCode ) {
+ if ( pc->testFlag( QIMPenChar::System ) ) {
+ pc->clearFlag( QIMPenChar::Deleted );
+ if ( !currentChar )
+ currentChar = pc;
+ } else {
+ currentSet->removeChar( pc );
+ }
+ }
+ }
+ setCurrentChar( currentChar );
+ }
+ }
+}
+
+void QIMPenEdit::newStroke( QIMPenStroke *st )
+{
+ inputChar->addStroke( st );
+ enableButtons();
+}
+
diff --git a/inputmethods/handwriting/qimpensetup.h b/inputmethods/handwriting/qimpensetup.h
new file mode 100644
index 0000000..5d3064b
--- a/dev/null
+++ b/inputmethods/handwriting/qimpensetup.h
@@ -0,0 +1,124 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qdialog.h>
+#include <qlist.h>
+#include "qimpenprofile.h"
+
+class QListBox;
+class QPushButton;
+class QComboBox;
+class QIMPenWidget;
+class QIMPenEdit;
+class QIMPenPrefBase;
+
+class QIMPenSetup : public QDialog
+{
+ Q_OBJECT
+public:
+ QIMPenSetup( QIMPenProfile *p, QWidget *parent=0,
+ const char *name=0, bool modal=FALSE, int WFlags=0 );
+
+ QIMPenEdit *editor() { return edit; }
+
+protected:
+ void loadProfiles();
+ virtual void accept();
+
+private slots:
+ void styleClicked( int );
+ void multiTimeoutChanged( int );
+ void selectProfile( const QString &p );
+
+private:
+ QComboBox *profileCombo;
+ QIMPenEdit *edit;
+ QIMPenPrefBase *pref;
+ int style;
+ int multiTimeout;
+ QIMPenProfile *profile;
+ QList<QIMPenProfile> profileList;
+};
+
+class QIMPenInputCharDlg : public QDialog
+{
+ Q_OBJECT
+public:
+ QIMPenInputCharDlg( QWidget *parent = 0, const char *name = 0,
+ bool modal = FALSE, int WFlags = 0 );
+
+ unsigned int unicode() const { return uni; }
+
+protected:
+ void addSpecial( QComboBox *cb );
+
+protected slots:
+ void setSpecial( int sp );
+ void setCharacter( const QString &string );
+
+protected:
+ uint uni;
+};
+
+class QIMPenEdit : public QWidget
+{
+ Q_OBJECT
+public:
+ QIMPenEdit( QIMPenProfile *p, QWidget *parent=0,
+ const char *name=0 );
+
+ void setProfile( QIMPenProfile *p );
+ void selectCharSet( QIMPenCharSet *c );
+
+protected:
+ void fillCharList();
+ void enableButtons();
+ QIMPenChar *findPrev();
+ QIMPenChar *findNext();
+ void setCurrentChar( QIMPenChar * );
+
+protected slots:
+ void prevChar();
+ void nextChar();
+ void clearChar();
+ void selectChar( int );
+ void selectCharSet( int );
+ void addChar();
+ void addNewChar();
+ void removeChar();
+ void defaultChars();
+ void newStroke( QIMPenStroke * );
+
+protected:
+ QIMPenWidget *pw;
+ QComboBox *charSetCombo;
+ QListBox *charList;
+ QPushButton *newBtn;
+ QPushButton *addBtn;
+ QPushButton *removeBtn;
+ QPushButton *prevBtn;
+ QPushButton *nextBtn;
+ uint currentCode;
+ QIMPenChar *currentChar;
+ QIMPenChar *inputChar;
+ QIMPenCharSet *currentSet;
+ QIMPenProfile *profile;
+};
+
diff --git a/inputmethods/handwriting/qimpenstroke.cpp b/inputmethods/handwriting/qimpenstroke.cpp
new file mode 100644
index 0000000..3567d6d
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenstroke.cpp
@@ -0,0 +1,646 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qfile.h>
+#include <qtl.h>
+#include <math.h>
+#include <limits.h>
+#include <qdatastream.h>
+#include "qimpenstroke.h"
+
+#define QIMPEN_CORRELATION_POINTS 25
+//#define DEBUG_QIMPEN
+
+/*!
+ \class QIMPenStroke qimpenstroke.h
+
+ Handles a single stroke. Can calculate closeness of match to
+ another stroke.
+*/
+
+QIMPenStroke::QIMPenStroke()
+{
+}
+
+QIMPenStroke::QIMPenStroke( const QIMPenStroke &st )
+{
+ startPoint = st.startPoint;
+ lastPoint = st.lastPoint;
+ links = st.links.copy();
+}
+
+QIMPenStroke &QIMPenStroke::operator=( const QIMPenStroke &s )
+{
+ clear();
+ //qDebug( "copy strokes %d", s.links.count() );
+ startPoint = s.startPoint;
+ lastPoint = s.lastPoint;
+ links = s.links.copy();
+
+ return *this;
+}
+
+void QIMPenStroke::clear()
+{
+ startPoint = QPoint(0,0);
+ lastPoint = QPoint( 0, 0 );
+ links.resize( 0 );
+ tsig.resize( 0 );
+ dsig.resize( 0 );
+ asig.resize( 0 );
+}
+
+/*!
+ Begin inputting a new stroke.
+*/
+void QIMPenStroke::beginInput( QPoint p )
+{
+ clear();
+ startPoint = p;
+ bounding = QRect();
+ internalAddPoint( p );
+}
+
+/*!
+ Add a point to the stroke's shape.
+ Returns TRUE if the point was successfully added.
+*/
+bool QIMPenStroke::addPoint( QPoint p )
+{
+ if ( links.count() > 500 ) // sanity check (that the user is sane).
+ return FALSE;
+
+ int dx = p.x() - lastPoint.x();
+ int dy = p.y() - lastPoint.y();
+ if ( QABS( dx ) > 1 || QABS( dy ) > 1 ) {
+ // The point is not adjacent to the previous point, so we fill
+ // in with a straight line. Some kind of non-linear
+ // interpolation might be better.
+ int x = lastPoint.x();
+ int y = lastPoint.y();
+ int ix = 1;
+ int iy = 1;
+ if ( dx < 0 ) {
+ ix = -1;
+ dx = -dx;
+ }
+ if ( dy < 0 ) {
+ iy = -1;
+ dy = -dy;
+ }
+ int d = 0;
+ if ( dx < dy ) {
+ d = dx;
+ do {
+ y += iy;
+ d += dx;
+ if ( d > dy ) {
+ x += ix;
+ d -= dy;
+ }
+ internalAddPoint( QPoint( x, y ) );
+ } while ( y != p.y() );
+ } else {
+ d = dy;
+ do {
+ x += ix;
+ d += dy;
+ if ( d > dx ) {
+ y += iy;
+ d -= dx;
+ }
+ internalAddPoint( QPoint( x, y ) );
+ } while ( x != p.x() );
+ }
+ } else {
+ internalAddPoint( p );
+ }
+
+ return TRUE;
+}
+
+/*!
+ Finish inputting a stroke.
+*/
+void QIMPenStroke::endInput()
+{
+ if ( links.count() < 3 ) {
+ QIMPenGlyphLink gl;
+ links.resize(1);
+ gl.dx = 1;
+ gl.dy = 0;
+ links[0] = gl;
+ }
+
+ //qDebug("Points: %d", links.count() );
+}
+
+/*!
+ Return an indicator of the closeness of this stroke to \a pen.
+ Lower value is better.
+*/
+unsigned int QIMPenStroke::match( QIMPenStroke *pen )
+{
+ double lratio;
+
+ if ( links.count() > pen->links.count() )
+ lratio = (links.count()+2) / (pen->links.count()+2);
+ else
+ lratio = (pen->links.count()+2) / (links.count()+2);
+
+ lratio -= 1.0;
+
+ if ( lratio > 2.0 ) {
+#ifdef DEBUG_QIMPEN
+ qDebug( "stroke length too different" );
+#endif
+ return 400000;
+ }
+
+ createSignatures();
+ pen->createSignatures();
+
+ // Starting point offset
+ int vdiff = QABS(startPoint.y() - pen->startPoint.y());
+
+ // Insanely offset?
+ if ( vdiff > 18 ) {
+ return 400000;
+ }
+
+ vdiff -= 4;
+ if ( vdiff < 0 )
+ vdiff = 0;
+
+ // Ending point offset
+ int evdiff = QABS(lastPoint.y() - pen->lastPoint.y());
+ // Insanely offset?
+ if ( evdiff > 20 ) {
+ return 400000;
+ }
+
+ evdiff -= 5;
+ if ( evdiff < 0 )
+ evdiff = 0;
+
+ // do a correlation with the three available signatures.
+ int err1 = INT_MAX;
+ int err2 = INT_MAX;
+ int err3 = INT_MAX;
+
+ // base has extra points at the start and end to enable
+ // correlation of a sliding window with the pen supplied.
+ QArray<int> base = createBase( tsig, 2 );
+ for ( int i = 0; i < 4; i++ ) {
+ int e = calcError( base, pen->tsig, i, TRUE );
+ if ( e < err1 )
+ err1 = e;
+ }
+ if ( err1 > 40 ) { // no need for more matching
+#ifdef DEBUG_QIMPEN
+ qDebug( "tsig too great: %d", err1 );
+#endif
+ return 400000;
+ }
+
+ // maybe a sliding window is worthwhile for these too.
+ err2 = calcError( dsig, pen->dsig, 0, FALSE );
+ if ( err2 > 100 ) {
+#ifdef DEBUG_QIMPEN
+ qDebug( "dsig too great: %d", err2 );
+#endif
+ return 400000;
+ }
+
+ err3 = calcError( asig, pen->asig, 0, TRUE );
+ if ( err3 > 60 ) {
+#ifdef DEBUG_QIMPEN
+ qDebug( "asig too great: %d", err3 );
+#endif
+ return 400000;
+ }
+
+ // Some magic numbers here - the addition reduces the weighting of
+ // the error and compensates for the different error scales. I
+ // consider the tangent signature to be the best indicator, so it
+ // has the most weight. This ain't rocket science.
+ // Basically, these numbers are the tuning factors.
+ unsigned int err = (err1+1) * ( err2 + 60 ) * ( err3 + 20 ) +
+ vdiff * 1000 + evdiff * 500 +
+ (unsigned int)(lratio * 5000.0);
+
+#ifdef DEBUG_QIMPEN
+ qDebug( "err %d ( %d, %d, %d, %d)", err, err1, err2, err3, vdiff );
+#endif
+
+ return err;
+}
+
+/*!
+ Return the bounding rect of this stroke.
+*/
+QRect QIMPenStroke::boundingRect()
+{
+ if ( !bounding.isValid() ) {
+ int x = startPoint.x();
+ int y = startPoint.y();
+ bounding = QRect( x, y, 1, 1 );
+
+ for ( unsigned i = 0; i < links.count(); i++ ) {
+ x += links[i].dx;
+ y += links[i].dy;
+ if ( x < bounding.left() )
+ bounding.setLeft( x );
+ if ( x > bounding.right() )
+ bounding.setRight( x );
+ if ( y < bounding.top() )
+ bounding.setTop( y );
+ if ( y > bounding.bottom() )
+ bounding.setBottom( y );
+ }
+ }
+
+ return bounding;
+}
+
+
+/*!
+ Perform a correlation of the supplied arrays. \a base should have
+ win.count() + 2 * off points to enable sliding \a win over the
+ \a base data. If \a t is TRUE, the comparison takes into account
+ the circular nature of the angular data.
+ Returns the best (lowest error) match.
+*/
+
+int QIMPenStroke::calcError( const QArray<int> &base,
+ const QArray<int> &win, int off, bool t )
+{
+ int err = 0;
+
+ for ( unsigned i = 0; i < win.count(); i++ ) {
+ int d = QABS( base[i+off] - win[i] );
+ if ( t && d > 128 )
+ d -= 256;
+ err += QABS( d );
+ }
+
+ err /= win.count();
+
+ return err;
+}
+
+/*!
+ Creates signatures used in matching if not already created.
+*/
+void QIMPenStroke::createSignatures()
+{
+ if ( tsig.isEmpty() )
+ createTanSignature();
+ if ( asig.isEmpty() )
+ createAngleSignature();
+ if ( dsig.isEmpty() )
+ createDistSignature();
+}
+
+/*!
+ Create a signature of the tangents to the user's stroke.
+*/
+void QIMPenStroke::createTanSignature()
+{
+ int dist = 5; // number of points to include in calculation
+ if ( (int)links.count() <= dist ) {
+ tsig.resize(1);
+ int dx = 0;
+ int dy = 0;
+ for ( unsigned j = 0; j < links.count(); j++ ) {
+ dx += links[j].dx;
+ dy += links[j].dy;
+ }
+ tsig[0] = arcTan( dy, dx );
+ } else {
+ tsig.resize( (links.count()-dist+1) / 2 );
+ int idx = 0;
+ for ( unsigned i = 0; i < links.count() - dist; i += 2 ) {
+ int dx = 0;
+ int dy = 0;
+ for ( int j = 0; j < dist; j++ ) {
+ dx += links[i+j].dx;
+ dy += links[i+j].dy;
+ }
+ tsig[idx++] = arcTan( dy, dx );
+ }
+ }
+
+ tsig = scale( tsig, QIMPEN_CORRELATION_POINTS, TRUE );
+// smooth(tsig);
+}
+
+/*!
+ Create a signature of the change in angle.
+*/
+void QIMPenStroke::createAngleSignature()
+{
+ QPoint c = calcCenter();
+
+ int dist = 3; // number of points to include in calculation
+ if ( (int)links.count() <= dist ) {
+ asig.resize(1);
+ asig[0] = 1;
+ } else {
+ asig.resize( links.count() );
+ QPoint current(0, 0);
+ int idx = 0;
+ for ( unsigned i = 0; i < links.count(); i++ ) {
+ int dx = c.x() - current.x();
+ int dy = c.y() - current.y();
+ int md = QMAX( QABS(dx), QABS(dy) );
+ if ( md > 5 ) {
+ dx = dx * 5 / md;
+ dy = dy * 5 / md;
+ }
+ asig[idx++] = arcTan( dy, dx );
+ current += QPoint( links[i].dx, links[i].dy );
+ }
+ }
+
+ asig = scale( asig, QIMPEN_CORRELATION_POINTS, TRUE );
+
+/*
+ if ( tsig.isEmpty() )
+ createTanSignature();
+
+ if ( tsig.count() < 5 ) {
+ asig.resize( 1 );
+ asig[0] = 0;
+ } else {
+ asig.resize( tsig.count() - 5 );
+
+ for ( unsigned i = 0; i < asig.count(); i++ ) {
+ asig[i] = QABS(tsig[i] - tsig[i+5]);
+ }
+ }
+*/
+}
+
+/*!
+ Create a signature of the distance from the char's center of gravity
+ to its points.
+*/
+void QIMPenStroke::createDistSignature()
+{
+ dsig.resize( (links.count()+1)/2 );
+ QPoint c = calcCenter();
+ QPoint pt( 0, 0 );
+
+ int minval = INT_MAX;
+ int maxval = 0;
+ int idx = 0;
+ for ( unsigned i = 0; i < links.count(); i += 2 ) {
+ int dx = c.x() - pt.x();
+ int dy = c.y() - pt.y();
+ if ( dx == 0 && dy == 0 )
+ dsig[idx] = 0;
+ else
+ dsig[idx] = dx*dx + dy*dy;
+
+ if ( dsig[idx] > maxval )
+ maxval = dsig[idx];
+ if ( dsig[idx] < minval )
+ minval = dsig[idx];
+ pt.rx() += links[i].dx;
+ pt.ry() += links[i].dy;
+ idx++;
+ }
+
+ // normalise 0-255
+ int div = maxval - minval;
+ if ( div == 0 ) div = 1;
+ for ( unsigned i = 0; i < dsig.count(); i++ ) {
+ dsig[i] = (dsig[i] - minval ) * 255 / div;
+ }
+
+ dsig = scale( dsig, QIMPEN_CORRELATION_POINTS );
+}
+
+
+/*!
+ Scale the points in a array to \a count points.
+ This is braindead at the moment (no smooth scaling) and fixing this is
+ probably one of the simpler ways to improve performance.
+*/
+QArray<int> QIMPenStroke::scale( const QArray<int> &s, unsigned count, bool t )
+{
+ QArray<int> d(count);
+
+ unsigned si = 0;
+ if ( s.count() > count ) {
+ unsigned next = 0;
+ for ( unsigned i = 0; i < count; i++ ) {
+ next = (i+1) * s.count() / count;
+ int maxval = 0;
+ if ( t ) {
+ for ( unsigned j = si; j < next; j++ ) {
+ maxval = s[j] > maxval ? s[j] : maxval;
+ }
+ }
+ int sum = 0;
+ for ( unsigned j = si; j < next; j++ ) {
+ if ( t && maxval - s[j] > 128 )
+ sum += 256;
+ sum += s[j];
+ }
+ d[i] = sum / (next-si);
+ if ( t && d[i] > 256 )
+ d[i] %= 256;
+ si = next;
+ }
+ } else {
+ for ( unsigned i = 0; i < count; i++ ) {
+ si = i * s.count() / count;
+ d[i] = s[si];
+ }
+ }
+
+ return d;
+}
+
+/*!
+ Add another point to the stroke's shape.
+*/
+void QIMPenStroke::internalAddPoint( QPoint p )
+{
+ if ( p == lastPoint )
+ return;
+
+ if ( !lastPoint.isNull() ) {
+ QIMPenGlyphLink gl;
+ gl.dx = p.x() - lastPoint.x();
+ gl.dy = p.y() - lastPoint.y();
+ links.resize( links.size() + 1 ); //### resize by 1 is bad
+ links[links.size() - 1] = gl;
+ }
+
+ lastPoint = p;
+ bounding = QRect();
+}
+
+/*!
+ Calculate the center of gravity of the stroke.
+*/
+QPoint QIMPenStroke::calcCenter()
+{
+ QPoint pt( 0, 0 );
+ int ax = 0;
+ int ay = 0;
+
+ for ( unsigned i = 0; i < links.count(); i++ ) {
+ pt.rx() += links[i].dx;
+ pt.ry() += links[i].dy;
+ ax += pt.x();
+ ay += pt.y();
+ }
+
+ ax /= (int)links.count();
+ ay /= (int)links.count();
+
+ return QPoint( ax, ay );
+}
+
+/*!
+ Calculate the arctan of the lengths supplied.
+ The angle returned is in the range 0-255.
+ \a dy and \a dx MUST be in the range 0-5 - I dont even check :-P
+*/
+int QIMPenStroke::arcTan( int dy, int dx )
+{
+ if ( dx == 0 ) {
+ if ( dy >= 0 )
+ return 64;
+ else
+ return 192;
+ }
+
+ if ( dy == 0 ) {
+ if ( dx >= 0 )
+ return 0;
+ else
+ return 128;
+ }
+
+ static int table[5][5] = {
+ { 32, 19, 13, 10, 8 },
+ { 45, 32, 24, 19, 16 },
+ { 51, 40, 32, 26, 22 },
+ { 54, 45, 37, 32, 27 },
+ { 56, 49, 42, 37, 32 } };
+
+ if ( dy > 0 ) {
+ if ( dx > 0 )
+ return table[dy-1][dx-1];
+ else
+ return 128 - table[dy-1][QABS(dx)-1];
+ } else {
+ if ( dx > 0 )
+ return 256 - table[QABS(dy)-1][dx-1];
+ else
+ return 128 + table[QABS(dy)-1][QABS(dx)-1];
+ }
+
+ return 0;
+}
+
+
+/*!
+ Silly name. Create an array that has \a e points extra at the start and
+ end to enable a sliding correlation to be performed.
+*/
+QArray<int> QIMPenStroke::createBase( const QArray<int> a, int e )
+{
+ QArray<int> ra( a.count() + 2*e );
+
+ for ( int i = 0; i < e; i++ ) {
+ ra[i] = a[e - i - 1];
+ ra[a.count() + i] = a[a.count() - i - 1];
+ }
+ for ( unsigned i = 0; i < a.count(); i++ ) {
+ ra[i+e] = a[i];
+ }
+
+ return ra;
+}
+
+
+/*!
+ Smooth the points in an array. Probably a bad idea.
+*/
+void QIMPenStroke::smooth( QArray<int> &sig)
+{
+ QArray<int> nsig = sig.copy();
+
+ int a;
+ for ( unsigned i = 1; i < sig.count()-2; i++ ) {
+ a = 0;
+ for ( int j = -1; j <= 1; j++ ) {
+ a += sig[ i + j ];
+ }
+ nsig[i] = a / 3;
+ }
+
+ sig = nsig;
+}
+
+/*!
+ Write the character's data to the stream.
+*/
+QDataStream &operator<< (QDataStream &s, const QIMPenStroke &ws)
+{
+ s << ws.startPoint;
+ s << ws.links.count();
+ for ( unsigned i = 0; i < ws.links.count(); i++ ) {
+ s << (Q_INT8)ws.links[i].dx;
+ s << (Q_INT8)ws.links[i].dy;
+ }
+
+ return s;
+}
+
+/*!
+ Read the character's data from the stream.
+*/
+QDataStream &operator>> (QDataStream &s, QIMPenStroke &ws)
+{
+ Q_INT8 i8;
+ s >> ws.startPoint;
+ ws.lastPoint = ws.startPoint;
+ unsigned size;
+ s >> size;
+ ws.links.resize( size );
+ for ( unsigned i = 0; i < size; i++ ) {
+ s >> i8;
+ ws.links[i].dx = i8;
+ s >> i8;
+ ws.links[i].dy = i8;
+ ws.lastPoint += QPoint( ws.links[i].dx, ws.links[i].dy );
+ }
+
+ return s;
+}
+
+
diff --git a/inputmethods/handwriting/qimpenstroke.h b/inputmethods/handwriting/qimpenstroke.h
new file mode 100644
index 0000000..bd5ee0e
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenstroke.h
@@ -0,0 +1,91 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QIMPENSTROKE_H_
+#define QIMPENSTROKE_H_
+
+#include <qobject.h>
+#include <qarray.h>
+#include <qlist.h>
+
+struct Q_PACKED QIMPenGlyphLink
+{
+ signed char dx;
+ signed char dy;
+};
+
+class QIMPenStroke
+{
+public:
+ QIMPenStroke();
+ QIMPenStroke( const QIMPenStroke & );
+
+ void clear();
+ bool isEmpty() const { return links.isEmpty(); }
+ unsigned int length() const { return links.count(); }
+ unsigned int match( QIMPenStroke *st );
+ const QArray<QIMPenGlyphLink> &chain() const { return links; }
+ QPoint startingPoint() const { return startPoint; }
+ void setStartingPoint( const QPoint &p ) { startPoint = p; }
+ QRect boundingRect();
+
+ QIMPenStroke &operator=( const QIMPenStroke &s );
+
+ void beginInput( QPoint p );
+ bool addPoint( QPoint p );
+ void endInput();
+
+ QArray<int> sig() { createTanSignature(); return tsig; } // for debugging
+
+protected:
+ void createSignatures();
+ void createTanSignature();
+ void createAngleSignature();
+ void createDistSignature();
+ int calcError( const QArray<int> &base, const QArray<int> &win,
+ int off, bool t );
+ QArray<int> scale( const QArray<int> &s, unsigned count, bool t = FALSE );
+ void internalAddPoint( QPoint p );
+ QPoint calcCenter();
+ int arcTan( int dy, int dx );
+ QArray<int> createBase( const QArray<int> a, int e );
+ void smooth( QArray<int> &);
+
+protected:
+ QPoint startPoint;
+ QPoint lastPoint;
+ QArray<QIMPenGlyphLink> links;
+ QArray<int> tsig;
+ QArray<int> asig;
+ QArray<int> dsig;
+ QRect bounding;
+
+ friend QDataStream &operator<< (QDataStream &, const QIMPenStroke &);
+ friend QDataStream &operator>> (QDataStream &, QIMPenStroke &);
+};
+
+typedef QList<QIMPenStroke> QIMPenStrokeList;
+typedef QListIterator<QIMPenStroke> QIMPenStrokeIterator;
+
+QDataStream & operator<< (QDataStream & s, const QIMPenStroke &ws);
+QDataStream & operator>> (QDataStream & s, const QIMPenStroke &ws);
+
+#endif
+
diff --git a/inputmethods/handwriting/qimpenwidget.cpp b/inputmethods/handwriting/qimpenwidget.cpp
new file mode 100644
index 0000000..8f8f582
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenwidget.cpp
@@ -0,0 +1,446 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qapplication.h>
+#include <qinputdialog.h>
+#include <qpainter.h>
+#include <qfile.h>
+#include <qdatastream.h>
+#include <qtimer.h>
+#include "qimpenchar.h"
+#include "qimpenwidget.h"
+
+#define TITLE_WIDTH 30 // ### magic
+
+/*!
+ \class QIMPenWidget qimpenwidget.h
+
+ Draws characters and allows input of characters.
+*/
+
+QIMPenWidget::QIMPenWidget( QWidget *parent )
+ : QWidget( parent )
+{
+ charSets.setAutoDelete( TRUE );
+ inputStroke = 0;
+ outputChar = 0;
+ outputStroke = 0;
+ mode = Waiting;
+ currCharSet = 0;
+ readOnly = FALSE;
+ strokes.setAutoDelete( TRUE );
+
+ timer = new QTimer(this);
+ connect( timer, SIGNAL(timeout()), SLOT(timeout()));
+
+ setBackgroundColor( qApp->palette().color( QPalette::Active,
+ QColorGroup::Base ) );
+ strokeColor = black;
+ setFixedHeight( 75 );
+}
+
+void QIMPenWidget::clear()
+{
+ timer->stop();
+ mode = Waiting;
+ QRect r( dirtyRect );
+ QIMPenStrokeIterator it( strokes );
+ while ( it.current() ) {
+ r |= it.current()->boundingRect();
+ ++it;
+ }
+ outputChar = 0;
+ outputStroke = 0;
+ strokes.clear();
+ if ( !r.isNull() ) {
+ r.moveBy( -2, -2 );
+ r.setSize( r.size() + QSize( 4, 4 ) );
+ repaint( r );
+ } else {
+ repaint();
+ }
+}
+
+void QIMPenWidget::removeStroke()
+{
+ QRect r( dirtyRect );
+ QIMPenStroke *st = strokes.getFirst();
+ QRect strokeRect;
+ if ( st )
+ strokeRect = st->boundingRect();
+ r |= strokeRect;
+ strokes.removeFirst();
+ if ( !r.isNull() ) {
+ r.moveBy( -2, -2 );
+ r.setSize( r.size() + QSize( 4, 4 ) );
+ repaint( r );
+ }
+}
+
+void QIMPenWidget::greyStroke()
+{
+ QRect r( dirtyRect );
+ QIMPenStroke *st = strokes.getLast();
+ QRect strokeRect;
+ if ( st )
+ strokeRect = st->boundingRect();
+ r |= strokeRect;
+ QColor oldCol = strokeColor;
+ strokeColor = gray;
+ if ( !r.isNull() ) {
+ r.moveBy( -2, -2 );
+ r.setSize( r.size() + QSize( 4, 4 ) );
+ repaint( r );
+ }
+ strokeColor = oldCol;
+}
+
+/*!
+ Insert a character set into the list.
+*/
+void QIMPenWidget::insertCharSet( QIMPenCharSet *cs, int stretch, int pos )
+{
+ CharSetEntry *e = new CharSetEntry;
+ e->cs = cs;
+ e->stretch = stretch;
+ if ( pos < 0 )
+ pos = charSets.count();
+ charSets.insert( pos, e );
+ currCharSet = 0;
+ emit changeCharSet( currCharSet );
+ emit changeCharSet( charSets.at(currCharSet)->cs );
+ totalStretch = 0;
+ CharSetEntryIterator it( charSets );
+ for ( ; it.current(); ++it )
+ totalStretch += it.current()->stretch;
+ update();
+}
+
+/*!
+ Remove a character set from the list.
+*/
+void QIMPenWidget::removeCharSet( int pos )
+{
+ if ( pos >= 0 && pos < (int)charSets.count() ) {
+ charSets.remove( pos );
+ currCharSet = 0;
+ if ( charSets.count() ) {
+ emit changeCharSet( currCharSet );
+ emit changeCharSet( charSets.at(currCharSet)->cs );
+ }
+ totalStretch = 0;
+ CharSetEntryIterator it( charSets );
+ for ( ; it.current(); ++it )
+ totalStretch += it.current()->stretch;
+ update();
+ }
+}
+
+void QIMPenWidget::changeCharSet( QIMPenCharSet *cs, int pos )
+{
+ if ( pos >= 0 && pos < (int)charSets.count() ) {
+ CharSetEntry *e = new CharSetEntry;
+ e->cs = cs;
+ e->stretch = charSets.at(pos)->stretch;
+ charSets.remove( pos );
+ charSets.insert( pos, e );
+ if ( pos == currCharSet ) {
+ emit changeCharSet( charSets.at(currCharSet)->cs );
+ }
+ update();
+ }
+}
+
+void QIMPenWidget::clearCharSets()
+{
+ charSets.clear();
+ currCharSet = 0;
+ update();
+}
+
+/*!
+ Display a character. \a speed determines how quickly the character is
+ drawn.
+*/
+void QIMPenWidget::showCharacter( QIMPenChar *ch, int speed )
+{
+ outputChar = 0;
+ outputStroke = 0;
+ strokes.clear();
+ mode = Output;
+ repaint();
+ if ( !ch || ch->isEmpty() ) {
+ mode = Waiting;
+ return;
+ }
+
+ outputChar = ch;
+ outputStroke = outputChar->penStrokes().getFirst();
+ if ( speed < 0 ) speed = 0;
+ if ( speed > 20 ) speed = 20;
+ speed = 50 - speed;
+ pointIndex = 0;
+ strokeIndex = 0;
+ lastPoint = outputStroke->startingPoint();
+ QRect br( outputChar->boundingRect() );
+ lastPoint.setX( (width() - br.width()) / 2 + (lastPoint.x () - br.left()) );
+ QPoint offset = lastPoint - outputStroke->startingPoint();
+ br.moveBy( offset.x(), offset.y() );
+ dirtyRect |= br;
+ timer->start( speed );
+}
+
+/*!
+ Handle drawing/clearing of characters.
+*/
+void QIMPenWidget::timeout()
+{
+ if ( mode == Output ) {
+ const QArray<QIMPenGlyphLink> &chain = outputStroke->chain();
+ if ( pointIndex < chain.count() ) {
+ QPainter paint( this );
+ paint.setBrush( Qt::black );
+ for ( unsigned i = 0; i < 3 && pointIndex < chain.count(); i++ ) {
+ lastPoint.rx() += chain[pointIndex].dx;
+ lastPoint.ry() += chain[pointIndex].dy;
+ pointIndex++;
+ paint.drawRect( lastPoint.x()-1, lastPoint.y()-1, 2, 2 );
+ }
+ }
+ if ( pointIndex >= chain.count() ) {
+ QIMPenStrokeList strokes = outputChar->penStrokes();
+ if ( strokeIndex < (int)strokes.count() - 1 ) {
+ pointIndex = 0;
+ strokeIndex++;
+ outputStroke = strokes.at( strokeIndex );
+ lastPoint = outputChar->startingPoint();
+ QRect br( outputChar->boundingRect() );
+ lastPoint.setX( (width() - br.width()) / 2
+ + (lastPoint.x () - br.left()) );
+ QPoint off = lastPoint - outputChar->startingPoint();
+ lastPoint = outputStroke->startingPoint() + off;
+ } else {
+ timer->stop();
+ mode = Waiting;
+ }
+ }
+ } else if ( mode == Waiting ) {
+ QRect r( dirtyRect );
+ if ( !r.isNull() ) {
+ r.moveBy( -2, -2 );
+ r.setSize( r.size() + QSize( 4, 4 ) );
+ repaint( r );
+ }
+ }
+}
+
+/*!
+ If the point \a p is over one of the character set titles, switch
+ to the set and return TRUE.
+*/
+bool QIMPenWidget::selectSet( QPoint p )
+{
+ if ( charSets.count() ) {
+ CharSetEntryIterator it( charSets );
+ int spos = 0;
+ int idx = 0;
+ for ( ; it.current(); ++it, idx++ ) {
+ int setWidth = width() * it.current()->stretch / totalStretch;
+ spos += setWidth;
+ if ( p.x() < spos ) {
+ if ( idx != currCharSet ) {
+ currCharSet = idx;
+ update( 0, 0, width(), 12 );
+ emit changeCharSet( currCharSet );
+ emit changeCharSet( charSets.at(currCharSet)->cs );
+ }
+ break;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+/*!
+ Hopefully returns a sensible size.
+*/
+QSize QIMPenWidget::sizeHint()
+{
+ return QSize( TITLE_WIDTH * charSets.count(), 75 );
+}
+
+void QIMPenWidget::mousePressEvent( QMouseEvent *e )
+{
+ if ( !readOnly && e->button() == LeftButton && mode == Waiting ) {
+ // if selectSet returns false the click was not over the
+ // char set selectors.
+ if ( !selectSet( e->pos() ) ) {
+ // start of character input
+ timer->stop();
+ if ( outputChar ) {
+ outputChar = 0;
+ outputStroke = 0;
+ repaint();
+ }
+ mode = Input;
+ lastPoint = e->pos();
+ emit beginStroke();
+ inputStroke = new QIMPenStroke;
+ strokes.append( inputStroke );
+ inputStroke->beginInput( e->pos() );
+ QPainter paint( this );
+ paint.setBrush( Qt::black );
+ paint.drawRect( lastPoint.x()-1, lastPoint.y()-1, 2, 2 );
+ }
+ }
+}
+
+void QIMPenWidget::mouseReleaseEvent( QMouseEvent *e )
+{
+ if ( !readOnly && e->button() == LeftButton && mode == Input ) {
+ mode = Waiting;
+ inputStroke->endInput();
+ if ( charSets.count() )
+ emit stroke( inputStroke );
+ inputStroke = 0;
+ }
+}
+
+void QIMPenWidget::mouseMoveEvent( QMouseEvent *e )
+{
+ if ( !readOnly && mode == Input ) {
+ int dx = QABS( e->pos().x() - lastPoint.x() );
+ int dy = QABS( e->pos().y() - lastPoint.y() );
+ if ( dx + dy > 1 ) {
+ if ( inputStroke->addPoint( e->pos() ) ) {
+ QPainter paint( this );
+ paint.setPen( Qt::black );
+ paint.setBrush( Qt::black );
+ const QArray<QIMPenGlyphLink> &chain = inputStroke->chain();
+ QPoint p( e->pos() );
+ for ( int i = (int)chain.count()-1; i >= 0; i-- ) {
+ paint.drawRect( p.x()-1, p.y()-1, 2, 2 );
+ p.rx() -= chain[i].dx;
+ p.ry() -= chain[i].dy;
+ if ( p == lastPoint )
+ break;
+ }
+
+ /* ### use this when thick lines work properly on all devices
+ paint.setPen( QPen( Qt::black, 2 ) );
+ paint.drawLine( lastPoint, e->pos() );
+ */
+ }
+ lastPoint = e->pos();
+ }
+ }
+}
+
+void QIMPenWidget::paintEvent( QPaintEvent * )
+{
+ QPainter paint( this );
+
+ // draw guidelines
+ paint.setPen( Qt::gray );
+ paint.drawLine( 0, 0, width(), 0 );
+ int y = height() / 3;
+ paint.drawLine( 0, y, width(), y );
+ y *= 2;
+ paint.setPen( blue );
+ paint.drawLine( 0, y, width(), y );
+ paint.setPen( Qt::gray );
+
+ if ( !charSets.count() )
+ return;
+
+ // draw the character set titles
+ QFont selFont( "helvetica", 8, QFont::Bold );
+ QFont font( "helvetica", 8 );
+ CharSetEntryIterator it( charSets );
+ int spos = 0;
+ for ( ; it.current(); ++it ) {
+ int setWidth = width() * it.current()->stretch / totalStretch;
+ spos += setWidth;
+ if ( it.current() != charSets.getLast() ) {
+ paint.drawLine( spos, 0, spos, 5 );
+ paint.drawLine( spos, height()-1, spos, height()-6 );
+ }
+ paint.setFont( font );
+ int w = paint.fontMetrics().width( it.current()->cs->title() );
+ int tpos = spos - setWidth / 2;
+ paint.drawText( tpos - w/2, 0, w, 12, QPainter::AlignCenter,
+ it.current()->cs->title() );
+ }
+
+ // draw any character that should be displayed when repainted.
+ QPoint off;
+ const QIMPenStrokeList *stk = 0;
+ if ( outputChar && mode == Waiting ) {
+ stk = &outputChar->penStrokes();
+ QPoint p( outputChar->startingPoint() );
+ QRect br( outputChar->boundingRect() );
+ p.setX( (width() - br.width()) / 2 + (p.x () - br.left()) );
+ off = p - outputChar->startingPoint();
+ } else if ( mode == Waiting ) {
+ stk = &strokes;
+ strokeColor = gray;
+ }
+
+ if ( stk && !stk->isEmpty() ) {
+ paint.setPen( strokeColor );
+ paint.setBrush( strokeColor );
+ QIMPenStrokeIterator it( *stk );
+ while ( it.current() ) {
+ QPoint p = it.current()->startingPoint() + off;
+ paint.drawRect( p.x()-1, p.y()-1, 2, 2 );
+ const QArray<QIMPenGlyphLink> &chain = it.current()->chain();
+ for ( unsigned i = 0; i < chain.count(); i++ ) {
+ p.rx() += chain[i].dx;
+ p.ry() += chain[i].dy;
+ paint.drawRect( p.x()-1, p.y()-1, 2, 2 );
+ }
+ ++it;
+ if ( it.atLast() && mode == Waiting )
+ strokeColor = black;
+ }
+ }
+
+ dirtyRect = QRect();
+
+ // debug
+/*
+ if ( input ) {
+ QArray<int> sig = input->sig();
+ for ( unsigned i = 0; i < sig.count(); i++ ) {
+ paint.drawPoint( 200 + i, height()/2 - sig[i] / 8 );
+ }
+ }
+*/
+}
+
+void QIMPenWidget::resizeEvent( QResizeEvent *e )
+{
+ if ( mode == Output )
+ showCharacter( outputChar, 0 );
+
+ QWidget::resizeEvent( e );
+}
+
diff --git a/inputmethods/handwriting/qimpenwidget.h b/inputmethods/handwriting/qimpenwidget.h
new file mode 100644
index 0000000..98d7f5c
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenwidget.h
@@ -0,0 +1,88 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qwidget.h>
+#include <qlist.h>
+#include "qimpenchar.h"
+
+class QIMPenWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ QIMPenWidget( QWidget *parent );
+
+ void clear();
+ void greyStroke();
+ void setReadOnly( bool r ) { readOnly = r; }
+
+ void insertCharSet( QIMPenCharSet *cs, int stretch=1, int pos=-1 );
+ void removeCharSet( int );
+ void changeCharSet( QIMPenCharSet *cs, int pos );
+ void clearCharSets();
+ void showCharacter( QIMPenChar *, int speed = 10 );
+ virtual QSize sizeHint();
+
+public slots:
+ void removeStroke();
+
+signals:
+ void changeCharSet( QIMPenCharSet *cs );
+ void changeCharSet( int );
+ void beginStroke();
+ void stroke( QIMPenStroke *ch );
+
+protected slots:
+ void timeout();
+
+protected:
+ enum Mode { Waiting, Input, Output };
+ bool selectSet( QPoint );
+ virtual void mousePressEvent( QMouseEvent *e );
+ virtual void mouseReleaseEvent( QMouseEvent *e );
+ virtual void mouseMoveEvent( QMouseEvent *e );
+ virtual void paintEvent( QPaintEvent *e );
+ virtual void resizeEvent( QResizeEvent *e );
+
+ struct CharSetEntry {
+ QIMPenCharSet *cs;
+ int stretch;
+ };
+ typedef QList<CharSetEntry> CharSetEntryList;
+ typedef QListIterator<CharSetEntry> CharSetEntryIterator;
+
+protected:
+ Mode mode;
+ bool autoHide;
+ bool readOnly;
+ QPoint lastPoint;
+ unsigned pointIndex;
+ int strokeIndex;
+ int currCharSet;
+ QTimer *timer;
+ QColor strokeColor;
+ QRect dirtyRect;
+ QIMPenChar *outputChar;
+ QIMPenStroke *outputStroke;
+ QIMPenStroke *inputStroke;
+ QIMPenStrokeList strokes;
+ CharSetEntryList charSets;
+ int totalStretch;
+};
+
diff --git a/inputmethods/handwriting/qimpenwordpick.cpp b/inputmethods/handwriting/qimpenwordpick.cpp
new file mode 100644
index 0000000..8ee103d
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenwordpick.cpp
@@ -0,0 +1,113 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpainter.h>
+#include "qimpenwordpick.h"
+
+QIMPenWordPick::QIMPenWordPick( QWidget *parent, const char *name, WFlags f )
+ : QFrame( parent, name, f )
+{
+ clickWord = -1;
+ setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Fixed ) );
+}
+
+void QIMPenWordPick::clear()
+{
+ words.clear();
+ repaint();
+}
+
+QSize QIMPenWordPick::sizeHint() const
+{
+ return QSize( -1, font().pixelSize()+2 );
+}
+
+void QIMPenWordPick::setWords( const QIMPenMatch::MatchWordList &w )
+{
+ words.clear();
+ QListIterator<QIMPenMatch::MatchWord> it( w );
+ for ( ; it.current(); ++it ) {
+ words.append( it.current()->word );
+ }
+ repaint();
+}
+
+int QIMPenWordPick::onWord( QPoint p )
+{
+ int x = 2;
+ int idx = 0;
+ for ( QStringList::Iterator it = words.begin(); it != words.end(); ++it ) {
+ QString word = *it;
+ int w = fontMetrics().width( word );
+ if ( x + w > width() )
+ break;
+ if ( p.x() > x-2 && p.x() < x + w + 2 )
+ return idx;
+ x += w + 5;
+ if ( !idx )
+ x += 3;
+ idx++;
+ }
+
+ return -1;
+}
+
+void QIMPenWordPick::paintEvent( QPaintEvent * )
+{
+ QPainter p(this);
+ int x = 2;
+ int h = p.fontMetrics().ascent() + 1;
+ int idx = 0;
+ for ( QStringList::Iterator it = words.begin(); it != words.end(); ++it ) {
+ QString word = *it;
+ int w = p.fontMetrics().width( word );
+ if ( x + w > width() )
+ break;
+ if ( idx == clickWord ) {
+ p.fillRect( x, 0, w, height(), black );
+ p.setPen( white );
+ } else {
+ p.setPen( colorGroup().text() );
+ }
+ p.drawText( x, h, word );
+ x += w + 5;
+ if ( !idx )
+ x += 3;
+ idx++;
+ }
+}
+
+void QIMPenWordPick::mousePressEvent( QMouseEvent *e )
+{
+ clickWord = onWord( e->pos() );
+ repaint();
+}
+
+void QIMPenWordPick::mouseReleaseEvent( QMouseEvent *e )
+{
+ int wordIdx = onWord( e->pos() );
+ if ( wordIdx >= 0 && wordIdx == clickWord ) {
+ //qDebug( "Clicked %s", words[wordIdx].latin1() );
+ emit wordClicked( words[wordIdx] );
+ }
+ clickWord = -1;
+ repaint();
+}
+
diff --git a/inputmethods/handwriting/qimpenwordpick.h b/inputmethods/handwriting/qimpenwordpick.h
new file mode 100644
index 0000000..376288e
--- a/dev/null
+++ b/inputmethods/handwriting/qimpenwordpick.h
@@ -0,0 +1,49 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qframe.h>
+#include "qimpenmatch.h"
+
+class QIMPenWordPick : public QFrame
+{
+ Q_OBJECT
+public:
+ QIMPenWordPick( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+
+ void clear();
+ virtual QSize sizeHint() const;
+
+public slots:
+ void setWords( const QIMPenMatch::MatchWordList &w );
+
+signals:
+ void wordClicked( const QString & );
+
+protected:
+ int onWord( QPoint p );
+ virtual void paintEvent( QPaintEvent * );
+ virtual void mousePressEvent( QMouseEvent * );
+ virtual void mouseReleaseEvent( QMouseEvent * );
+
+private:
+ QStringList words;
+ int clickWord;
+};
+
diff --git a/inputmethods/handwriting/qpe-handwriting.control b/inputmethods/handwriting/qpe-handwriting.control
new file mode 100644
index 0000000..f1648c6
--- a/dev/null
+++ b/inputmethods/handwriting/qpe-handwriting.control
@@ -0,0 +1,9 @@
+Files: plugins/inputmethods/libqhandwriting.so*
+Priority: optional
+Section: qpe/inputmethods
+Maintainer: Martin Jones <mjones@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Handwriting input method
+ Handwriting recognition input method for the Qtopia environment.
diff --git a/inputmethods/handwriting/qpe-handwriting.postinst b/inputmethods/handwriting/qpe-handwriting.postinst
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/handwriting/qpe-handwriting.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/handwriting/qpe-handwriting.postrm b/inputmethods/handwriting/qpe-handwriting.postrm
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/handwriting/qpe-handwriting.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/keyboard/.cvsignore b/inputmethods/keyboard/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/inputmethods/keyboard/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/inputmethods/keyboard/Makefile.in b/inputmethods/keyboard/Makefile.in
new file mode 100644
index 0000000..3631807
--- a/dev/null
+++ b/inputmethods/keyboard/Makefile.in
@@ -0,0 +1,151 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/inputmethods/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qkeyboard
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = keyboard.h \
+ ../pickboard/pickboardcfg.h \
+ ../pickboard/pickboardpicks.h \
+ keyboardimpl.h
+SOURCES = keyboard.cpp \
+ ../pickboard/pickboardcfg.cpp \
+ ../pickboard/pickboardpicks.cpp \
+ keyboardimpl.cpp
+OBJECTS = keyboard.o \
+ ../pickboard/pickboardcfg.o \
+ ../pickboard/pickboardpicks.o \
+ keyboardimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_keyboard.cpp \
+ ../pickboard/moc_pickboardcfg.cpp \
+ ../pickboard/moc_pickboardpicks.cpp
+OBJMOC = moc_keyboard.o \
+ ../pickboard/moc_pickboardcfg.o \
+ ../pickboard/moc_pickboardpicks.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake keyboard.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+keyboard.o: keyboard.cpp \
+ keyboard.h \
+ ../pickboard/pickboardcfg.h \
+ ../pickboard/pickboardpicks.h
+
+../pickboard/pickboardcfg.o: ../pickboard/pickboardcfg.cpp \
+ ../pickboard/pickboardcfg.h \
+ ../pickboard/pickboardpicks.h
+
+../pickboard/pickboardpicks.o: ../pickboard/pickboardpicks.cpp \
+ ../pickboard/pickboardpicks.h \
+ ../pickboard/pickboardcfg.h
+
+keyboardimpl.o: keyboardimpl.cpp \
+ keyboard.h \
+ ../pickboard/pickboardcfg.h \
+ ../pickboard/pickboardpicks.h \
+ keyboardimpl.h
+
+moc_keyboard.o: moc_keyboard.cpp \
+ keyboard.h \
+ ../pickboard/pickboardcfg.h \
+ ../pickboard/pickboardpicks.h
+
+../pickboard/moc_pickboardcfg.o: ../pickboard/moc_pickboardcfg.cpp \
+ ../pickboard/pickboardcfg.h
+
+../pickboard/moc_pickboardpicks.o: ../pickboard/moc_pickboardpicks.cpp \
+ ../pickboard/pickboardpicks.h
+
+moc_keyboard.cpp: keyboard.h
+ $(MOC) keyboard.h -o moc_keyboard.cpp
+
+../pickboard/moc_pickboardcfg.cpp: ../pickboard/pickboardcfg.h
+ $(MOC) ../pickboard/pickboardcfg.h -o ../pickboard/moc_pickboardcfg.cpp
+
+../pickboard/moc_pickboardpicks.cpp: ../pickboard/pickboardpicks.h
+ $(MOC) ../pickboard/pickboardpicks.h -o ../pickboard/moc_pickboardpicks.cpp
+
+
diff --git a/inputmethods/keyboard/keyboard.cpp b/inputmethods/keyboard/keyboard.cpp
new file mode 100644
index 0000000..9dd24e4
--- a/dev/null
+++ b/inputmethods/keyboard/keyboard.cpp
@@ -0,0 +1,794 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "keyboard.h"
+
+#include <qpe/global.h>
+
+#include <qwindowsystem_qws.h>
+#include <qpainter.h>
+#include <qfontmetrics.h>
+#include <qtimer.h>
+#include <ctype.h>
+
+
+#define USE_SMALL_BACKSPACE
+
+Keyboard::Keyboard(QWidget* parent, const char* name, WFlags f) :
+ QFrame(parent, name, f), shift(FALSE), lock(FALSE), ctrl(FALSE),
+ alt(FALSE), useLargeKeys(TRUE), useOptiKeys(0), pressedKey(-1),
+ unicode(-1), qkeycode(0), modifiers(0)
+{
+ // setPalette(QPalette(QColor(240,240,230))); // Beige!
+ // setFont( QFont( "Helvetica", 8 ) );
+// setPalette(QPalette(QColor(200,200,200))); // Gray
+ setPalette(QPalette(QColor(220,220,220))); // Gray
+
+ picks = new KeyboardPicks( this );
+ picks->setFont( QFont( "smallsmooth", 9 ) );
+ setFont( QFont( "smallsmooth", 9 ) );
+ picks->initialise();
+ QObject::connect( picks, SIGNAL(key(ushort,ushort,ushort,bool,bool) ),
+ this, SIGNAL(key(ushort,ushort,ushort,bool,bool)) );
+
+ repeatTimer = new QTimer( this );
+ connect( repeatTimer, SIGNAL(timeout()), this, SLOT(repeat()) );
+}
+
+void Keyboard::resizeEvent(QResizeEvent*)
+{
+ int ph = picks->sizeHint().height();
+ picks->setGeometry( 0, 0, width(), ph );
+ keyHeight = (height()-ph)/5;
+ int nk;
+ if ( useOptiKeys ) {
+ nk = 15;
+ } else if ( useLargeKeys ) {
+ nk = 15;
+ } else {
+ nk = 19;
+ }
+ defaultKeyWidth = width()/nk;
+ xoffs = (width()-defaultKeyWidth*nk)/2;
+}
+
+void KeyboardPicks::initialise()
+{
+ setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
+ mode = 0;
+ dc = new KeyboardConfig(this);
+ configs.append(dc);
+}
+
+QSize KeyboardPicks::sizeHint() const
+{
+ return QSize(240,fontMetrics().lineSpacing());
+}
+
+
+void KeyboardConfig::generateText(const QString &s)
+{
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ for (int i=0; i<(int)backspaces; i++) {
+ parent->emitKey( 0, Qt::Key_Backspace, 0, true, false );
+ parent->emitKey( 0, Qt::Key_Backspace, 0, false, false );
+ }
+ for (int i=0; i<(int)s.length(); i++) {
+ parent->emitKey( s[i].unicode(), 0, 0, true, false );
+ parent->emitKey( s[i].unicode(), 0, 0, false, false );
+ }
+ parent->emitKey( 0, Qt::Key_Space, 0, true, false );
+ parent->emitKey( 0, Qt::Key_Space, 0, false, false );
+ backspaces = 0;
+#endif
+}
+
+
+//PC keyboard layout and scancodes
+
+/*
+ Format: length, code, length, code, ..., 0
+
+ length is measured in half the width of a standard key.
+ If code < 0x80 we have length/2 consecutive standard keys,
+ starting with scancode code.
+
+ Special keys are hardcoded, one at a time, with length of key
+ and code >= 0x80, these are NOT standard PC scancodes, but are looked
+ up in specialM[]. (The special keys are not keymappable.)
+
+ */
+
+static const uchar * const keyboard_opti[5] = {
+ (const uchar *const) "\001\223\003\240\002\20\002\41\002\26\002\62\002\56\002\45\002\54\003\200\001\223\002\226\002\235\002\234\002\236",
+ (const uchar *const) "\001\223\003\201\004\207\002\30\002\24\002\43\004\207\003\203\001\223\006\002\002\065",
+ (const uchar *const) "\001\223\003\202\002\60\002\37\002\23\002\22\002\36\002\21\002\55\003\203\001\223\006\005\002\055",
+ (const uchar *const) "\001\223\003\205\004\207\002\27\002\61\002\40\004\207\003\204\001\223\006\010\002\014",
+ (const uchar *const) "\001\223\003\206\002\44\002\31\002\57\002\42\002\46\002\25\002\207\003\204\001\223\002\013\002\064\002\015\002\230"
+};
+
+
+static const uchar * const keyboard_standard[5] = {
+
+#ifdef USE_SMALL_BACKSPACE
+ (const uchar *const)"\002\240\002`\0021\0022\0023\0024\0025\0026\0027\0028\0029\0020\002-\002=\002\200\002\223\002\215\002\216\002\217",
+#else
+ (const uchar *const)"\002\051\0021\0022\0023\0024\0025\0026\0027\0028\0029\0020\002-\002=\004\200\002\223\002\215\002\216\002\217",
+#endif
+ //~ + 123...+ BACKSPACE //+ INSERT + HOME + PGUP
+
+ (const uchar *const)"\003\201\002q\002w\002e\002r\002t\002y\002u\002i\002o\002p\002[\002]\002\\\001\224\002\223\002\221\002\220\002\222",
+ //TAB + qwerty.. + backslash //+ DEL + END + PGDN
+
+ (const uchar *const)"\004\202\002a\002s\002d\002f\002g\002h\002j\002k\002l\002;\002'\004\203",
+ //CAPS + asdf.. + RETURN
+
+ (const uchar *const)"\005\204\002z\002x\002c\002v\002b\002n\002m\002,\002.\002/\005\204\002\223\002\223\002\211",
+ //SHIFT + zxcv... //+ UP
+
+ (const uchar *const)"\003\205\003\206\022\207\003\206\003\205\002\223\002\212\002\213\002\214"
+ //CTRL + ALT + SPACE //+ LEFT + DOWN + RIGHT
+
+};
+
+
+struct ShiftMap {
+ char normal;
+ char shifted;
+};
+
+
+static const ShiftMap shiftMap[] = {
+ { '`', '~' },
+ { '1', '!' },
+ { '2', '@' },
+ { '3', '#' },
+ { '4', '$' },
+ { '5', '%' },
+ { '6', '^' },
+ { '7', '&' },
+ { '8', '*' },
+ { '9', '(' },
+ { '0', ')' },
+ { '-', '_' },
+ { '=', '+' },
+ { '\\', '|' },
+ { '[', '{' },
+ { ']', '}' },
+ { ';', ':' },
+ { '\'', '"' },
+ { ',', '<' },
+ { '.', '>' },
+ { '/', '?' }
+};
+
+
+/* XPM */
+static const char * const uparrow_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+"....a....",
+"...aaa...",
+"..aaaaa..",
+"....a....",
+"....a....",
+"....a....",
+"....a....",
+"........."};
+/* XPM */
+static const char * const leftarrow_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+".........",
+"...a.....",
+"..aa.....",
+".aaaaaaa.",
+"..aa.....",
+"...a.....",
+".........",
+"........."};
+/* XPM */
+static const char * const downarrow_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+"....a....",
+"....a....",
+"....a....",
+"....a....",
+"..aaaaa..",
+"...aaa...",
+"....a....",
+"........."};
+/* XPM */
+static const char * const rightarrow_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+".........",
+".....a...",
+".....aa..",
+".aaaaaaa.",
+".....aa..",
+".....a...",
+".........",
+"........."};
+/* XPM */
+static const char * const insert_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+"a........",
+"a.aaa.aaa",
+"a.a.a.a..",
+"a.a.a..a.",
+"a.a.a...a",
+"a.a.a.aaa",
+".........",
+"........."};
+/* XPM */
+static const char * const delete_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+"aa......a",
+"a.a.aaa.a",
+"a.a.a.a.a",
+"a.a.aaa.a.",
+"a.a.a...a",
+"aaa.aaa.a",
+".........",
+"........."};
+/* XPM */
+static const char * const home_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+"....a....",
+"...a.a...",
+"..a...a..",
+".a.....a.",
+"aa.aaa.aa",
+".a.a.a.a.",
+".a.a.a.a.",
+".aaaaaaa.",
+"........."};
+/* XPM */
+static const char * const end_xpm[]={
+"10 9 2 1",
+"a c #000000",
+". c None",
+"..........",
+"aa.......a",
+"a..aaa.aaa",
+"aa.a.a.a.a",
+"a..a.a.a.a",
+"a..a.a.a.a",
+"aa.a.a.aaa",
+"..........",
+".........."};
+/* XPM */
+static const char * const pageup_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".aaa.aaa.",
+".a.a.a.a.",
+".aaa..aa.",
+".a...aaa.",
+".........",
+".a.a.aaa.",
+".a.a.a.a.",
+".aaa.aaa.",
+".....a..."};
+/* XPM */
+static const char * const pagedown_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".aaa.aaa.",
+".a.a.a.a.",
+".aaa..aa.",
+".a...aaa.",
+".........",
+"...a.....",
+".aaa.aaa.",
+".a.a.a.a.",
+".aaa.a.a."};
+/* XPM */
+static const char * const expand_xpm[]={
+"4 9 2 1",
+"a c #408040",
+". c None",
+"a...",
+"aa..",
+"aaa.",
+"aaaa",
+"aaaa",
+"aaaa",
+"aaa.",
+"aa..",
+"a..."};
+/* XPM */
+#ifdef USE_SMALL_BACKSPACE
+static const char * const backspace_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+".........",
+"...a.....",
+"..aa.....",
+".aaaaaaaa",
+"..aa.....",
+"...a.....",
+".........",
+"........."};
+#else
+static const char * const backspace_xpm[]={
+"21 9 2 1",
+"a c #000000",
+". c None",
+".....................",
+".....................",
+".....aaa..a..........",
+".a...a..a.a.a.aaa.aaa",
+"aaaa.aaa..aa..aa..a.a",
+".a...a..a.aaa..aa.a.a",
+".....aaaa.a.a.aaa.aa.",
+"..................a..",
+"....................."};
+#endif
+/* XPM */
+static const char * const escape_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+".........",
+".aa.aa.aa",
+".a..a..a.",
+".aa.aa.a.",
+".a...a.a.",
+".aa.aa.aa",
+".........",
+"........."};
+
+
+enum { BSCode = 0x80, TabCode, CapsCode, RetCode,
+ ShiftCode, CtrlCode, AltCode, SpaceCode, BackSlash,
+ UpCode, LeftCode, DownCode, RightCode, Blank, Expand,
+ Opti, ResetDict,
+ Divide, Multiply, Add, Subtract, Decimal, Equal,
+ Percent, Sqrt, Inverse, Escape };
+
+typedef struct SpecialMap {
+ int qcode;
+ ushort unicode;
+ const char * label;
+ const char * const * xpm;
+};
+
+
+static const SpecialMap specialM[] = {
+ { Qt::Key_Backspace, 8, "<", backspace_xpm },
+ { Qt::Key_Tab, 9, "Tab", NULL },
+ { Qt::Key_CapsLock, 0, "Caps", NULL },
+ { Qt::Key_Return, 13, "Ret", NULL },
+ { Qt::Key_Shift, 0, "Shift", NULL },
+ { Qt::Key_Control, 0, "Ctrl", NULL },
+ { Qt::Key_Alt, 0, "Alt", NULL },
+ { Qt::Key_Space, ' ', "", NULL },
+ { BackSlash, 43, "\\", NULL },
+
+ // Need images?
+ { Qt::Key_Up, 0, "^", uparrow_xpm },
+ { Qt::Key_Left, 0, "<", leftarrow_xpm },
+ { Qt::Key_Down, 0, "v", downarrow_xpm },
+ { Qt::Key_Right, 0, ">", rightarrow_xpm },
+ { Qt::Key_Insert, 0, "I", insert_xpm },
+ { Qt::Key_Home, 0, "H", home_xpm },
+ { Qt::Key_PageUp, 0, "U", pageup_xpm },
+ { Qt::Key_End, 0, "E", end_xpm },
+ { Qt::Key_Delete, 0, "X", delete_xpm },
+ { Qt::Key_PageDown, 0, "D", pagedown_xpm },
+ { Blank, 0, " ", NULL },
+ { Expand, 0, "->", expand_xpm },
+ { Opti, 0, "#", NULL },
+ { ResetDict, 0, "R", NULL },
+
+ // number pad stuff
+ { Divide, 0, "/", NULL },
+ { Multiply, 0, "*", NULL },
+ { Add, 0, "+", NULL },
+ { Subtract, 0, "-", NULL },
+ { Decimal, 0, ".", NULL },
+ { Equal, 0, "=", NULL },
+ { Percent, 0, "%", NULL },
+ { Sqrt, 0, "^1/2", NULL },
+ { Inverse, 0, "1/x", NULL },
+
+ { Escape, 27, "ESC", escape_xpm }
+};
+
+
+static int keycode( int i2, int j, const uchar **keyboard )
+{
+ if ( j <0 || j >= 5 )
+ return 0;
+
+ const uchar *row = keyboard[j];
+
+ while ( *row && *row <= i2 ) {
+ i2 -= *row;
+ row += 2;
+ }
+
+ if ( !*row ) return 0;
+
+ int k;
+ if ( row[1] >= 0x80 ) {
+ k = row[1];
+ } else {
+ k = row[1]+i2/2;
+ }
+
+ return k;
+}
+
+
+/*
+ return scancode and width of first key in row \a j if \a j >= 0,
+ or next key on current row if \a j < 0.
+
+*/
+
+int Keyboard::getKey( int &w, int j ) {
+ static const uchar *row = 0;
+ static int key_i = 0;
+ static int scancode = 0;
+ static int half = 0;
+
+ if ( j >= 0 && j < 5 ) {
+ if (useOptiKeys)
+ row = keyboard_opti[j];
+ else
+ row = keyboard_standard[j];
+ half=0;
+ }
+
+ if ( !row || !*row ) {
+ return 0;
+ } else if ( row[1] >= 0x80 ) {
+ scancode = row[1];
+ w = (row[0] * w + (half++&1)) / 2;
+ row += 2;
+ return scancode;
+ } else if ( key_i <= 0 ) {
+ key_i = row[0]/2;
+ scancode = row[1];
+ }
+ key_i--;
+ if ( key_i <= 0 )
+ row += 2;
+ return scancode++;
+}
+
+
+void Keyboard::paintEvent(QPaintEvent* e)
+{
+ QPainter painter(this);
+ painter.setClipRect(e->rect());
+ drawKeyboard( painter );
+ picks->dc->draw( &painter );
+}
+
+
+/*
+ Draw the keyboard.
+
+ If key >= 0, only the specified key is drawn.
+*/
+void Keyboard::drawKeyboard( QPainter &p, int key )
+{
+ const bool threeD = FALSE;
+ const QColorGroup& cg = colorGroup();
+ QColor keycolor = // cg.background();
+ QColor(240,240,230); // Beige!
+ QColor keycolor_pressed = cg.mid();
+ QColor keycolor_lo = cg.dark();
+ QColor keycolor_hi = cg.light();
+ QColor textcolor = QColor(0,0,0); // cg.text();
+
+ int margin = threeD ? 1 : 0;
+
+// p.fillRect( 0, , kw-1, keyHeight-2, keycolor_pressed );
+
+ for ( int j = 0; j < 5; j++ ) {
+ int y = j * keyHeight + picks->height() + 1;
+ int x = xoffs;
+ int kw = defaultKeyWidth;
+ int k= getKey( kw, j );
+ while ( k ) {
+ if ( key < 0 || k == key ) {
+ QString s;
+ bool pressed = (k == pressedKey);
+ bool blank = (k == 0223);
+ const char * const * xpm = NULL;
+
+ if ( k >= 0x80 ) {
+ s = specialM[k - 0x80].label;
+
+ xpm = specialM[k - 0x80].xpm;
+
+ if ( k == ShiftCode ) {
+ pressed = shift;
+ } else if ( k == CapsCode ) {
+ pressed = lock;
+ } else if ( k == CtrlCode ) {
+ pressed = ctrl;
+ } else if ( k == AltCode ) {
+ pressed = alt;
+ }
+ } else {
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+/*
+ s = QChar( shift^lock ? QWSServer::keyMap()[k].shift_unicode :
+ QWSServer::keyMap()[k].unicode);
+*/
+ // ### Fixme, bad code, needs improving, whole thing needs to
+ // be re-coded to get rid of the way it did things with scancodes etc
+ char shifted = k;
+ if ( !isalpha( k ) ) {
+ for ( unsigned i = 0; i < sizeof(shiftMap)/sizeof(ShiftMap); i++ )
+ if ( shiftMap[i].normal == k )
+ shifted = shiftMap[i].shifted;
+ } else {
+ shifted = toupper( k );
+ }
+ s = QChar( shift^lock ? shifted : k );
+#endif
+ }
+
+ if (!blank) {
+ if ( pressed )
+ p.fillRect( x+margin, y+margin, kw-margin, keyHeight-margin-1, keycolor_pressed );
+ else
+ p.fillRect( x+margin, y+margin, kw-margin, keyHeight-margin-1, keycolor );
+
+ if ( threeD ) {
+ p.setPen(pressed ? keycolor_lo : keycolor_hi);
+ p.drawLine( x, y+1, x, y+keyHeight-2 );
+ p.drawLine( x+1, y+1, x+1, y+keyHeight-3 );
+ p.drawLine( x+1, y+1, x+1+kw-2, y+1 );
+ } else if ( j == 0 ) {
+ p.setPen(pressed ? keycolor_hi : keycolor_lo);
+ p.drawLine( x, y, x+kw, y );
+ }
+
+ // right
+ p.setPen(pressed ? keycolor_hi : keycolor_lo);
+ p.drawLine( x+kw-1, y, x+kw-1, y+keyHeight-2 );
+
+ if ( threeD ) {
+ p.setPen(keycolor_lo.light());
+ p.drawLine( x+kw-2, y+keyHeight-2, x+kw-2, y+1 );
+ p.drawLine( x+kw-2, y+keyHeight-2, x+1, y+keyHeight-2 );
+ }
+
+ if (xpm) {
+ p.drawPixmap( x + 1, y + 2, QPixmap((const char**)xpm) );
+ } else {
+ p.setPen(textcolor);
+ p.drawText( x - 1, y, kw, keyHeight-2, AlignCenter, s );
+ }
+
+ if ( threeD ) {
+ p.setPen(keycolor_hi);
+ p.drawLine( x, y, x+kw-1, y );
+ }
+
+ // bottom
+ p.setPen(keycolor_lo);
+ p.drawLine( x, y+keyHeight-1, x+kw-1, y+keyHeight-1 );
+
+ } else {
+ p.fillRect( x, y, kw, keyHeight, cg.background() );
+ }
+ }
+
+ x += kw;
+ kw = defaultKeyWidth;
+ k = getKey( kw );
+ }
+ }
+}
+
+
+void Keyboard::mousePressEvent(QMouseEvent *e)
+{
+ clearHighlight(); // typing fast?
+
+ int i2 = ((e->x() - xoffs) * 2) / defaultKeyWidth;
+ int j = (e->y() - picks->height()) / keyHeight;
+
+ int k = keycode( i2, j, (const uchar **)((useOptiKeys) ? keyboard_opti : keyboard_standard) );
+ bool need_repaint = FALSE;
+ unicode = -1;
+ qkeycode = 0;
+ if ( k >= 0x80 ) {
+ if ( k == ShiftCode ) {
+ shift = !shift;
+ need_repaint = TRUE;
+ } else if ( k == AltCode ){
+ alt = !alt;
+ need_repaint = TRUE;
+ } else if ( k == CapsCode ) {
+ lock = !lock;
+ need_repaint = TRUE;
+ } else if ( k == CtrlCode ) {
+ ctrl = !ctrl;
+ need_repaint = TRUE;
+ } else if ( k == 0224 /* Expand */ ) {
+ useLargeKeys = !useLargeKeys;
+ resizeEvent(0);
+ repaint( TRUE ); // need it to clear first
+ } else if ( k == 0225 /* Opti/Toggle */ ) {
+ useOptiKeys = !useOptiKeys;
+ resizeEvent(0);
+ repaint( TRUE ); // need it to clear first
+ } else {
+ qkeycode = specialM[ k - 0x80 ].qcode;
+ unicode = specialM[ k - 0x80 ].unicode;
+ }
+ } else {
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+/*
+ qk = QWSServer::keyMap()[k].key_code;
+ if ( qk != Key_unknown ) {
+ if ( ctrl )
+ u = QWSServer::keyMap()[k].ctrl_unicode;
+ else if ( shift^lock )
+ u = QWSServer::keyMap()[k].shift_unicode;
+ else
+ u = QWSServer::keyMap()[k].unicode;
+ }
+*/
+ char shifted = k;
+ if ( !isalpha( k ) ) {
+ // ### Fixme, bad code, needs improving, whole thing needs to
+ // be re-coded to get rid of the way it did things with scancodes etc
+ for ( unsigned i = 0; i < sizeof(shiftMap)/sizeof(ShiftMap); i++ )
+ if ( shiftMap[i].normal == k )
+ shifted = shiftMap[i].shifted;
+ } else {
+ shifted = toupper( k );
+ }
+ QChar tempChar( shift^lock ? shifted : k );
+ unicode = tempChar.unicode();
+#endif
+ }
+ if ( unicode != -1 ) {
+ modifiers = (shift ? Qt::ShiftButton : 0) | (ctrl ? Qt::ControlButton : 0) |
+ (alt ? Qt::AltButton : 0);
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ emit key( unicode, qkeycode, modifiers, true, false );
+ repeatTimer->start( 500 );
+#endif
+ need_repaint = shift || alt || ctrl;
+ shift = alt = ctrl = FALSE;
+ //qDebug( "pressed %d -> %04x ('%c')", k, u, u&0xffff < 256 ? u&0xff : 0 );
+
+ KeyboardConfig *dc = picks->dc;
+
+ if (dc) {
+ if (qkeycode == Qt::Key_Backspace) {
+ dc->input.remove(dc->input.last()); // remove last input
+ dc->decBackspaces();
+ } else if ( k == 0226 || qkeycode == Qt::Key_Return ||
+ qkeycode == Qt::Key_Space ||
+ QChar(unicode).isPunct() ) {
+ dc->input.clear();
+ dc->resetBackspaces();
+ } else {
+ dc->add(QString(QChar(unicode)));
+ dc->incBackspaces();
+ }
+ }
+
+ picks->repaint();
+
+ }
+ pressedKey = k;
+ if ( need_repaint ) {
+ repaint( FALSE );
+ } else {
+ QPainter p(this);
+ drawKeyboard( p, pressedKey );
+ }
+ pressTid = startTimer(80);
+ pressed = TRUE;
+}
+
+
+void Keyboard::mouseReleaseEvent(QMouseEvent*)
+{
+ if ( pressTid == 0 )
+ clearHighlight();
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ if ( unicode != -1 ) {
+ emit key( unicode, qkeycode, modifiers, false, false );
+ repeatTimer->stop();
+ }
+#endif
+ pressed = FALSE;
+}
+
+void Keyboard::timerEvent(QTimerEvent* e)
+{
+ if ( e->timerId() == pressTid ) {
+ killTimer(pressTid);
+ pressTid = 0;
+ if ( !pressed )
+ clearHighlight();
+ }
+}
+
+void Keyboard::repeat()
+{
+ repeatTimer->start( 150 );
+ emit key( unicode, qkeycode, modifiers, true, true );
+}
+
+void Keyboard::clearHighlight()
+{
+ if ( pressedKey >= 0 ) {
+ int tmp = pressedKey;
+ pressedKey = -1;
+ QPainter p(this);
+ drawKeyboard( p, tmp );
+ }
+}
+
+
+QSize Keyboard::sizeHint() const
+{
+ QFontMetrics fm=fontMetrics();
+ int keyHeight = fm.lineSpacing()+2;
+
+ if (useOptiKeys)
+ keyHeight += 1;
+
+ return QSize( 320, keyHeight * 5 + picks->sizeHint().height() + 1 );
+}
+
+
+void Keyboard::resetState()
+{
+ picks->resetState();
+}
diff --git a/inputmethods/keyboard/keyboard.h b/inputmethods/keyboard/keyboard.h
new file mode 100644
index 0000000..38ae338
--- a/dev/null
+++ b/inputmethods/keyboard/keyboard.h
@@ -0,0 +1,103 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qframe.h>
+#include "../pickboard/pickboardcfg.h"
+#include "../pickboard/pickboardpicks.h"
+
+class QTimer;
+
+class KeyboardConfig : public DictFilterConfig
+{
+public:
+ KeyboardConfig(PickboardPicks* p) : DictFilterConfig(p), backspaces(0) { nrows = 1; }
+ virtual void generateText(const QString &s);
+ void decBackspaces() { if (backspaces) backspaces--; }
+ void incBackspaces() { backspaces++; }
+ void resetBackspaces() { backspaces = 0; }
+private:
+ int backspaces;
+};
+
+
+class KeyboardPicks : public PickboardPicks
+{
+ Q_OBJECT
+public:
+ KeyboardPicks(QWidget* parent=0, const char* name=0, WFlags f=0)
+ : PickboardPicks(parent, name, f) { }
+ void initialise();
+ virtual QSize sizeHint() const;
+ KeyboardConfig *dc;
+};
+
+class Keyboard : public QFrame
+{
+ Q_OBJECT
+public:
+ Keyboard( QWidget* parent=0, const char* name=0, WFlags f=0 );
+
+ void resetState();
+
+ void mousePressEvent(QMouseEvent*);
+ void mouseReleaseEvent(QMouseEvent*);
+ void resizeEvent(QResizeEvent*);
+ void paintEvent(QPaintEvent* e);
+ void timerEvent(QTimerEvent* e);
+ void drawKeyboard( QPainter &p, int key = -1 );
+
+ void setMode(int mode) { useOptiKeys = mode; }
+
+ QSize sizeHint() const;
+
+signals:
+ void key( ushort scancode, ushort unicode, ushort modifiers, bool, bool );
+
+private slots:
+ void repeat();
+
+private:
+ int getKey( int &w, int j = -1 );
+ void clearHighlight();
+
+ uint shift:1;
+ uint lock:1;
+ uint ctrl:1;
+ uint alt:1;
+ uint useLargeKeys:1;
+ uint useOptiKeys:1;
+
+ int pressedKey;
+
+ KeyboardPicks *picks;
+
+ int keyHeight;
+ int defaultKeyWidth;
+ int xoffs;
+
+ int unicode;
+ int qkeycode;
+ int modifiers;
+
+ int pressTid;
+ bool pressed;
+
+ QTimer *repeatTimer;
+};
+
diff --git a/inputmethods/keyboard/keyboard.pro b/inputmethods/keyboard/keyboard.pro
new file mode 100644
index 0000000..87c838e
--- a/dev/null
+++ b/inputmethods/keyboard/keyboard.pro
@@ -0,0 +1,18 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = keyboard.h \
+ ../pickboard/pickboardcfg.h \
+ ../pickboard/pickboardpicks.h \
+ keyboardimpl.h
+SOURCES = keyboard.cpp \
+ ../pickboard/pickboardcfg.cpp \
+ ../pickboard/pickboardpicks.cpp \
+ keyboardimpl.cpp
+TARGET = qkeyboard
+DESTDIR = ../../plugins/inputmethods
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include ../../taskbar
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libqkeyboard.ts
diff --git a/inputmethods/keyboard/keyboardimpl.cpp b/inputmethods/keyboard/keyboardimpl.cpp
new file mode 100644
index 0000000..ea61272
--- a/dev/null
+++ b/inputmethods/keyboard/keyboardimpl.cpp
@@ -0,0 +1,131 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qapplication.h>
+#include <qpixmap.h>
+#include "keyboard.h"
+#include "keyboardimpl.h"
+
+/* XPM */
+static const char * kb_xpm[] = {
+"28 13 4 1",
+" c None",
+". c #4C4C4C",
+"+ c #FFF7DD",
+"@ c #D6CFBA",
+" .......................... ",
+" .+++.+++.+++.+++.+++.++++. ",
+" .+@@.+@@.+@@.+@@.+@@.+@@@. ",
+" .......................... ",
+" .+++++.+++.+++.+++.++++++. ",
+" .+@@@@.+@@.+@@.+@@.+@@@@@. ",
+" .......................... ",
+" .++++++.+++.+++.+++.+++++. ",
+" .+@@@@@.+@@.+@@.+@@.+@@@@. ",
+" .......................... ",
+" .++++.++++++++++++++.++++. ",
+" .+@@@.+@@@@@@@@@@@@@.+@@@. ",
+" .......................... "};
+
+
+/* XPM */
+static char * opti_xpm[] = {
+"28 13 4 1",
+" c None",
+". c #4C4C4C",
+"+ c #FFF7DD",
+"@ c #D6CFBA",
+" ......................... ",
+" .+++.+++.+++.+++.+++.+++. ",
+" .+@@.+@@.+@@.+@@.+@@.+@@. ",
+" ......................... ",
+" .+++.+++.+++.+++.+++.+++. ",
+" .+@@.+@@.+@@.+@@.+@@.+@@. ",
+" ......................... ",
+" .+++.+++.+++.+++.+++.+++. ",
+" .+@@.+@@.+@@.+@@.+@@.+@@. ",
+" ......................... ",
+" .+++.+++.+++.+++.+++.+++. ",
+" .+@@.+@@.+@@.+@@.+@@.+@@. ",
+" ......................... "};
+
+
+
+KeyboardImpl::KeyboardImpl()
+ : input(0), icn(0), ref(0)
+{
+}
+
+KeyboardImpl::~KeyboardImpl()
+{
+ delete input;
+ delete icn;
+}
+
+QWidget *KeyboardImpl::inputMethod( QWidget *parent, Qt::WFlags f )
+{
+ if ( !input )
+ input = new Keyboard( parent, "Keyboard", f );
+ return input;
+}
+
+void KeyboardImpl::resetState()
+{
+ if ( input )
+ input->resetState();
+}
+
+QPixmap *KeyboardImpl::icon()
+{
+ if ( !icn )
+ icn = new QPixmap( (const char **)kb_xpm );
+ return icn;
+}
+
+QString KeyboardImpl::name()
+{
+ return qApp->translate( "InputMethods", "Keyboard" );
+// return qApp->translate( "InputMethods", "Opti" );
+}
+
+void KeyboardImpl::onKeyPress( QObject *receiver, const char *slot )
+{
+ if ( input )
+ QObject::connect( input, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot );
+}
+
+#ifndef QT_NO_COMPONENT
+QRESULT KeyboardImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_InputMethod )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( KeyboardImpl )
+}
+#endif
diff --git a/inputmethods/keyboard/keyboardimpl.h b/inputmethods/keyboard/keyboardimpl.h
new file mode 100644
index 0000000..e756364
--- a/dev/null
+++ b/inputmethods/keyboard/keyboardimpl.h
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef KEYBOARDIMPL_H
+#define KEYBOARDIMPL_H
+
+#include <qpe/inputmethodinterface.h>
+
+class Keyboard;
+class QPixmap;
+
+class KeyboardImpl : public InputMethodInterface
+{
+public:
+ KeyboardImpl();
+ virtual ~KeyboardImpl();
+
+#ifndef QT_NO_COMPONENT
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+#endif
+
+ virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f );
+ virtual void resetState();
+ virtual QPixmap *icon();
+ virtual QString name();
+ virtual void onKeyPress( QObject *receiver, const char *slot );
+
+private:
+ Keyboard *input;
+ QPixmap *icn;
+ ulong ref;
+};
+
+#endif
diff --git a/inputmethods/keyboard/qpe-keyboard.control b/inputmethods/keyboard/qpe-keyboard.control
new file mode 100644
index 0000000..dae67f9
--- a/dev/null
+++ b/inputmethods/keyboard/qpe-keyboard.control
@@ -0,0 +1,9 @@
+Files: plugins/inputmethods/libqkeyboard.so*
+Priority: optional
+Section: qpe/inputmethods
+Maintainer: Martin Jones <mjones@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Keyboard input method
+ Keyboard input method for the Qtopia environment.
diff --git a/inputmethods/keyboard/qpe-keyboard.postinst b/inputmethods/keyboard/qpe-keyboard.postinst
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/keyboard/qpe-keyboard.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/keyboard/qpe-keyboard.postrm b/inputmethods/keyboard/qpe-keyboard.postrm
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/keyboard/qpe-keyboard.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/pickboard/.cvsignore b/inputmethods/pickboard/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/inputmethods/pickboard/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/inputmethods/pickboard/Makefile.in b/inputmethods/pickboard/Makefile.in
new file mode 100644
index 0000000..d72e82d
--- a/dev/null
+++ b/inputmethods/pickboard/Makefile.in
@@ -0,0 +1,147 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/inputmethods/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qpickboard
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = pickboard.h \
+ pickboardcfg.h \
+ pickboardimpl.h \
+ pickboardpicks.h
+SOURCES = pickboard.cpp \
+ pickboardcfg.cpp \
+ pickboardimpl.cpp \
+ pickboardpicks.cpp
+OBJECTS = pickboard.o \
+ pickboardcfg.o \
+ pickboardimpl.o \
+ pickboardpicks.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_pickboard.cpp \
+ moc_pickboardcfg.cpp \
+ moc_pickboardpicks.cpp
+OBJMOC = moc_pickboard.o \
+ moc_pickboardcfg.o \
+ moc_pickboardpicks.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake pickboard.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+pickboard.o: pickboard.cpp \
+ pickboard.h \
+ pickboardpicks.h \
+ pickboardcfg.h
+
+pickboardcfg.o: pickboardcfg.cpp \
+ pickboardcfg.h \
+ pickboardpicks.h
+
+pickboardimpl.o: pickboardimpl.cpp \
+ pickboard.h \
+ pickboardimpl.h
+
+pickboardpicks.o: pickboardpicks.cpp \
+ pickboardpicks.h \
+ pickboardcfg.h
+
+moc_pickboard.o: moc_pickboard.cpp \
+ pickboard.h
+
+moc_pickboardcfg.o: moc_pickboardcfg.cpp \
+ pickboardcfg.h
+
+moc_pickboardpicks.o: moc_pickboardpicks.cpp \
+ pickboardpicks.h
+
+moc_pickboard.cpp: pickboard.h
+ $(MOC) pickboard.h -o moc_pickboard.cpp
+
+moc_pickboardcfg.cpp: pickboardcfg.h
+ $(MOC) pickboardcfg.h -o moc_pickboardcfg.cpp
+
+moc_pickboardpicks.cpp: pickboardpicks.h
+ $(MOC) pickboardpicks.h -o moc_pickboardpicks.cpp
+
+
diff --git a/inputmethods/pickboard/pickboard.cpp b/inputmethods/pickboard/pickboard.cpp
new file mode 100644
index 0000000..087144e
--- a/dev/null
+++ b/inputmethods/pickboard/pickboard.cpp
@@ -0,0 +1,89 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "pickboard.h"
+#include "pickboardpicks.h"
+#include "pickboardcfg.h"
+
+#include <qpe/global.h>
+
+#include <qpainter.h>
+#include <qlist.h>
+#include <qbitmap.h>
+#include <qlayout.h>
+#include <qvbox.h>
+#include <qdialog.h>
+#include <qscrollview.h>
+#include <qpopupmenu.h>
+#include <qhbuttongroup.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qwindowsystem_qws.h>
+
+/* XPM */
+static const char * const menu_xpm[]={
+"9 9 2 1",
+"a c #000000",
+". c None",
+".........",
+".........",
+".........",
+"....a....",
+"...aaa...",
+"..aaaaa..",
+".aaaaaaa.",
+".........",
+"........."};
+
+class PickboardPrivate {
+public:
+ PickboardPrivate(Pickboard* parent)
+ {
+ picks = new PickboardPicks(parent);
+ picks->initialise();
+ menu = new QPushButton(parent);
+ menu->setSizePolicy(QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Expanding));
+ menu->setPixmap(QPixmap((const char **)menu_xpm));
+ QObject::connect(menu,SIGNAL(clicked()),picks,SLOT(doMenu()));
+ QObject::connect(picks,SIGNAL(key(ushort,ushort,ushort,bool,bool)),
+ parent,SIGNAL(key(ushort,ushort,ushort,bool,bool)));
+ }
+
+ PickboardPicks* picks;
+ QPushButton* menu;
+};
+
+Pickboard::Pickboard(QWidget* parent, const char* name, WFlags f) :
+ QFrame(parent,name,f)
+{
+ (new QHBoxLayout(this))->setAutoAdd(TRUE);
+ d = new PickboardPrivate(this);
+ setFont( QFont( "smallsmooth", 9 ) );
+}
+
+Pickboard::~Pickboard()
+{
+ delete d;
+}
+
+void Pickboard::resetState()
+{
+ d->picks->resetState();
+}
+
diff --git a/inputmethods/pickboard/pickboard.h b/inputmethods/pickboard/pickboard.h
new file mode 100644
index 0000000..5fff875
--- a/dev/null
+++ b/inputmethods/pickboard/pickboard.h
@@ -0,0 +1,43 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PICKBOARD_H
+#define PICKBOARD_H
+
+#include <qframe.h>
+
+class PickboardPrivate;
+
+class Pickboard : public QFrame
+{
+ Q_OBJECT
+public:
+ Pickboard(QWidget* parent=0, const char* name=0, WFlags f=0);
+ ~Pickboard();
+
+ void resetState();
+
+signals:
+ void key( ushort, ushort, ushort, bool, bool );
+
+private:
+ PickboardPrivate* d;
+};
+
+#endif
diff --git a/inputmethods/pickboard/pickboard.pro b/inputmethods/pickboard/pickboard.pro
new file mode 100644
index 0000000..50bc342
--- a/dev/null
+++ b/inputmethods/pickboard/pickboard.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = pickboard.h pickboardcfg.h pickboardimpl.h pickboardpicks.h
+SOURCES = pickboard.cpp pickboardcfg.cpp pickboardimpl.cpp pickboardpicks.cpp
+TARGET = qpickboard
+DESTDIR = ../../plugins/inputmethods
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include ../../taskbar
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libqpickboard.ts
diff --git a/inputmethods/pickboard/pickboardcfg.cpp b/inputmethods/pickboard/pickboardcfg.cpp
new file mode 100644
index 0000000..e8b47cb
--- a/dev/null
+++ b/inputmethods/pickboard/pickboardcfg.cpp
@@ -0,0 +1,731 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "pickboardcfg.h"
+#include "pickboardpicks.h"
+
+#include <qpe/global.h>
+
+#include <qpainter.h>
+#include <qlist.h>
+#include <qbitmap.h>
+#include <qlayout.h>
+#include <qvbox.h>
+#include <qdialog.h>
+#include <qscrollview.h>
+#include <qpopupmenu.h>
+#include <qhbuttongroup.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qwindowsystem_qws.h>
+
+static const char * pickboard_help =
+ "<h1>The Pickboard</h1>"
+ "<i>The smallest and fastest way to type.</i>"
+ "<p>"
+ "Enter a word by tapping letter-groups and picking the word."
+ "<br>Enter spaces with \"Space\", or other keys through \"KEY\"."
+ "<br>Use \"Shift\" to capitalize words that are not normally capitalized."
+ "<br>Press \"Shift\" twice for an all-capitals word."
+ "<br>Add custom words by picking them, then selecting \"Add...\" from the menu on the right."
+ ;
+
+const int intermatchmargin=5;
+
+
+PickboardConfig::~PickboardConfig() { }
+
+void PickboardConfig::updateRows(int from, int to)
+{
+ if ( from != to ) { // (all)
+ parent->update();
+ } else {
+ QFontMetrics fm = parent->fontMetrics();
+ parent->update(QRect(0,1+fm.descent() + from * fm.lineSpacing(), parent->width(),
+ fm.lineSpacing()));
+ }
+}
+
+void PickboardConfig::updateItem(int r, int)
+{
+ updateRows(r,r);
+}
+
+void PickboardConfig::changeMode(int m)
+{
+ parent->setMode(m);
+}
+void PickboardConfig::generateText(const QString& s)
+{
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ for (int i=0; i<(int)s.length(); i++) {
+ parent->emitKey(s[i].unicode(), 0, 0, true, false);
+ parent->emitKey(s[i].unicode(), 0, 0, false, false);
+ }
+#endif
+}
+void PickboardConfig::generateKey( int k )
+{
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ parent->emitKey(0, k, 0, true, false);
+ parent->emitKey(0, k, 0, false, false);
+#endif
+}
+
+void PickboardConfig::pickPoint(const QPoint& p, bool press)
+{
+ if ( press ) {
+ int ls=parent->height()/nrows;
+ int y=0;
+ pressx = -1;
+ for (int r=0; r<nrows; r++) {
+ if ( p.y() >= y && p.y() < y+ls ) {
+ pressrow = r;
+ pressx = p.x();
+ pickInRow( pressrow, pressx, TRUE );
+ return;
+ }
+ y += ls;
+ }
+ } else if ( pressx >= 0 ) {
+ pickInRow( pressrow, pressx, FALSE );
+ pressx = -1;
+ }
+}
+
+void PickboardConfig::fillMenu(QPopupMenu& menu)
+{
+ menu.insertItem("Reset",100);
+ menu.insertSeparator();
+ menu.insertItem("Help",1);
+}
+
+void PickboardConfig::doMenu(int i)
+{
+ switch (i) {
+ case 100:
+ if ( parent->currentMode() ) {
+ changeMode(0);
+ updateRows(0,1);
+ }
+ break;
+ case 1: {
+ QMessageBox help("Pickboard Help", pickboard_help,
+ QMessageBox::NoIcon, 1, 0, 0);
+ help.showMaximized();
+ help.exec();
+ }
+ }
+}
+
+void StringConfig::draw(QPainter* p)
+{
+ QFontMetrics fm = p->fontMetrics();
+
+ for (int r=0; r<nrows; r++) {
+ p->translate(0,fm.lineSpacing());
+ p->setPen(rowColor(r));
+
+ int tw=0;
+ QString s;
+ int i=0;
+ for (; !(s=text(r,i)).isNull(); ++i) {
+ int w = fm.width(s);
+ tw += w;
+ }
+ bool spread = spreadRow(r);// && parent->width() > tw;
+ int xw = spread ? (parent->width()-tw)/(i-1) : 3;
+ int x = spread ? (parent->width()-tw-xw*(i-1))/2 : 2;
+
+ i=0;
+ for (; !(s=text(r,i)).isNull(); ++i) {
+ int w = fm.width(s)+xw;
+ if ( highlight(r,i) ) {
+ p->fillRect(x-xw/2,1+fm.descent()-fm.lineSpacing(),w,fm.lineSpacing(),Qt::black);
+ p->setPen(Qt::white);
+ }else{
+ p->setPen(Qt::black);
+ }
+ p->drawText(x,-fm.descent()-1,s);
+ x += w;
+ }
+ }
+}
+
+void StringConfig::pickInRow(int r, int xpos, bool press)
+{
+ QFontMetrics fm = parent->fontMetrics();
+
+ int tw=0;
+ QString s;
+ int i=0;
+ for (; !(s=text(r,i)).isNull(); ++i) {
+ int w = fm.width(s);
+ tw += w;
+ }
+ bool spread = spreadRow(r) && parent->width() > tw;
+ int xw = spread ? (parent->width()-tw)/(i-1) : 3;
+ int x = spread ? (parent->width()-tw-xw*(i-1))/2 : 2;
+
+ i=0;
+ for (; !(s=text(r,i)).isNull(); ++i) {
+ int x2 = x + fm.width(s)+xw;
+ if ( xpos >= x && xpos < x2 ) {
+ pick(press, r, i);
+ return;
+ }
+ x = x2;
+ }
+}
+
+void StringConfig::updateItem(int r, int item)
+{
+ QFontMetrics fm = parent->fontMetrics();
+
+ int y = r * fm.lineSpacing();
+
+ int tw=0;
+ QString s;
+ int i=0;
+ for (; !(s=text(r,i)).isNull(); ++i) {
+ int w = fm.width(s);
+ tw += w;
+ }
+ bool spread = spreadRow(r) && parent->width() > tw;
+ int xw = spread ? (parent->width()-tw)/(i-1) : 3;
+ int x = spread ? (parent->width()-tw-xw*(i-1))/2 : 2;
+
+ i=0;
+ for (; !(s=text(r,i)).isNull(); ++i) {
+ int w = fm.width(s)+xw;
+ if ( i == item ) {
+ parent->update(QRect(x-xw/2,y+1+fm.descent(),w,fm.lineSpacing()));
+ return;
+ }
+ x += w;
+ }
+}
+
+bool StringConfig::highlight(int,int) const
+{
+ return FALSE;
+}
+
+LetterButton::LetterButton(const QChar& letter, QWidget* parent) :
+ QPushButton(letter,parent)
+{
+ setToggleButton(TRUE);
+ setAutoDefault(FALSE);
+ connect(this,SIGNAL(clicked()),this,SLOT(toggleCase()));
+ skip=TRUE;
+}
+
+void LetterButton::toggleCase()
+{
+ if ( skip ) {
+ // Don't toggle case the first time
+ skip=FALSE;
+ return;
+ }
+
+ QChar ch = text()[0];
+ QChar nch = ch.lower();
+ if ( ch == nch )
+ nch = ch.upper();
+ setText(nch);
+}
+
+LetterChoice::LetterChoice(QWidget* parent, const QString& set) :
+ QButtonGroup(parent)
+{
+ QHBoxLayout *l = new QHBoxLayout(this);
+ setFrameStyle(0);
+ setExclusive(TRUE);
+ for (int i=0; i<(int)set.length(); i++) {
+ LetterButton* b = new LetterButton(set[i],this);
+ l->addWidget(b,1,AlignCenter);
+ connect(b,SIGNAL(clicked()),this,SLOT(change()));
+ }
+}
+
+void LetterChoice::change()
+{
+ LetterButton* b = (LetterButton*)sender();
+ ch = b->text()[0];
+ emit changed();
+}
+
+
+PickboardAdd::PickboardAdd(QWidget* owner, const QStringList& setlist) :
+ QDialog( owner, 0, TRUE )
+{
+ QVBoxLayout* l = new QVBoxLayout(this);
+ l->setAutoAdd(TRUE);
+
+ QScrollView *sv = new QScrollView(this);
+ sv->setResizePolicy(QScrollView::AutoOneFit);
+ setMaximumHeight(200); // ### QDialog shouldn't allow us to be bigger than the screen
+ QVBox *letters = new QVBox(sv);
+ letters->setSpacing(0);
+ lc = new LetterChoice*[setlist.count()];
+ nlc = (int)setlist.count();
+ for (int i=0; i<nlc; i++) {
+ lc[i] = new LetterChoice(letters,setlist[i]);
+ connect(lc[i],SIGNAL(changed()),this,SLOT(checkAllDone()));
+ }
+ sv->addChild(letters);
+ QHBox* hb = new QHBox(this);
+ hb->setSpacing(0);
+ yes = new QPushButton("OK",hb);
+ yes->setEnabled(FALSE);
+ QPushButton *no = new QPushButton("Cancel",hb);
+ connect(yes, SIGNAL(clicked()), this, SLOT(accept()));
+ connect(no, SIGNAL(clicked()), this, SLOT(reject()));
+}
+
+PickboardAdd::~PickboardAdd()
+{
+ delete [] lc;
+}
+
+QString PickboardAdd::word() const
+{
+ QString str;
+ for (int i=0; i<nlc; i++) {
+ str += lc[i]->choice();
+ }
+ return str;
+}
+
+bool PickboardAdd::exec()
+{
+ QPoint pos = parentWidget()->mapToGlobal(QPoint(0,0));
+ pos.ry() -= height();
+ if ( QDialog::exec() ) {
+ Global::addWords(QStringList(word()));
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+void PickboardAdd::checkAllDone()
+{
+ if ( !yes->isEnabled() ) {
+ for (int i=0; i<nlc; i++) {
+ if ( lc[i]->choice().isNull() )
+ return;
+ }
+ yes->setEnabled(TRUE);
+ }
+}
+
+
+void DictFilterConfig::doMenu(int i)
+{
+ switch (i) {
+ case 300:
+ if ( input.count() == 0 ) {
+ QMessageBox::information(0, "Adding Words",
+ "To add words, pick the letters,\nthen "
+ "open the Add dialog. In that\ndialog, tap "
+ "the correct letters\nfrom the list "
+ "(tap twice for\ncapitals).");
+ } else {
+ PickboardAdd add(parent,capitalize(input));
+ if ( add.exec() )
+ generateText(add.word());
+ input.clear();
+ matches.clear();
+ updateRows(0,0);
+ }
+ break;
+ case 100:
+ if ( !input.isEmpty() ) {
+ input.clear();
+ matches.clear();
+ StringConfig::doMenu(i);
+ updateRows(0,1);
+ break;
+ } // else fall through
+ default:
+ StringConfig::doMenu(i);
+ }
+ shift = 0;
+ lit0 = -1;
+}
+
+QString DictFilterConfig::text(int r, int i)
+{
+ QStringList l = r ? sets : input.isEmpty() ? othermodes : matches;
+ return i < (int)l.count() ?
+ (input.isEmpty() ? l[i] : capitalize(l[i]))
+ : QString::null;
+}
+
+bool DictFilterConfig::spreadRow(int r)
+{
+ return r ? TRUE : input.isEmpty() ? TRUE : FALSE;
+}
+
+QStringList DictFilterConfig::capitalize(const QStringList& l)
+{
+ switch ( shift ) {
+ case 1: {
+ QStringList r;
+ QStringList::ConstIterator it = l.begin();
+ r.append((*it).upper());
+ for (++it; it != l.end(); ++it)
+ r.append(*it);
+ return r;
+ } case 2: {
+ QStringList r;
+ for (QStringList::ConstIterator it = l.begin(); it != l.end(); ++it)
+ r.append((*it).upper());
+ return r;
+ }
+ }
+ return l;
+}
+
+QString DictFilterConfig::capitalize(const QString& s)
+{
+ switch ( shift ) {
+ case 1: {
+ QString u = s;
+ u[0] = u[0].upper();
+ return u;
+ break;
+ } case 2:
+ return s.upper();
+ break;
+ }
+ return s;
+}
+
+void DictFilterConfig::pick(bool press, int row, int item)
+{
+ if ( row == 0 ) {
+ if ( press ) {
+ if ( input.isEmpty() ) {
+ lit0 = item;
+ if ( othermodes[item] == "Space" ) {
+ updateItem(row,item);
+ generateText(" ");
+ } else if ( othermodes[item] == "Back" ) {
+ updateItem(row,item);
+ generateKey(Qt::Key_Backspace);
+ } else if ( othermodes[item] == "Enter" ) {
+ updateItem(row,item);
+ generateKey(Qt::Key_Return);
+ } else if ( othermodes[item] == "Shift" ) {
+ updateItem(row,item);
+ shift = (shift+1)%3;
+ }
+ }
+ } else {
+ if ( !input.isEmpty() ) {
+ input.clear();
+ if ( item>=0 ) {
+ generateText(capitalize(matches[item]));
+ }
+ shift = 0;
+ matches.clear();
+ updateRows(0,0);
+ } else if ( item < 3 ) {
+ lit0 = -1;
+ changeMode(item+1); // I'm mode 0! ####
+ updateRows(0,1);
+ }
+ if ( lit0 >= 0 ) {
+ if ( !shift || othermodes[lit0] != "Shift" ) {
+ updateItem(0,lit0);
+ lit0 = -1;
+ }
+ }
+ }
+ } else {
+ lit0 = -1;
+ if ( press && item >= 0 ) {
+ lit1 = item;
+ add(sets[item]);
+ updateItem(1,item);
+ updateRows(0,0);
+ } else {
+ updateItem(1,lit1);
+ lit1 = -1;
+ }
+ }
+}
+
+bool DictFilterConfig::scanMatch(const QString& set, const QChar& l) const
+{
+ return set == "?" || set == "*" || set.contains(l);
+}
+
+//static int visit=0;
+//static int lvisit=0;
+
+void DictFilterConfig::scan(const QDawg::Node* n, int ipos, const QString& str, int length, bool extend)
+{
+ if ( n ) {
+ do {
+//visit++;
+ bool pastend = ipos >= (int)input.count();
+ if ( pastend && extend || !pastend && scanMatch(input[ipos],n->letter().lower()) ) {
+ if ( length>1 ) {
+ if ( !pastend && input[ipos] == "*" ) {
+ scan(n->jump(),ipos+1,str+n->letter(),length-1,FALSE);
+ scan(n->jump(),ipos,str+n->letter(),length,FALSE);
+ } else {
+ scan(n->jump(),ipos+1,str+n->letter(),length-1,extend);
+ }
+ } else {
+ if ( n->isWord() ) {
+ matches.append(str+n->letter());
+ }
+ }
+ }
+ n = n->next();
+ } while (n);
+ }
+}
+
+void DictFilterConfig::scanLengths(const QDawg::Node* n, int ipos, int& length_bitarray)
+{
+ if ( n ) {
+ do {
+//lvisit++;
+ bool pastend = ipos >= (int)input.count();
+ if ( pastend || scanMatch(input[ipos],n->letter().lower()) ) {
+ scanLengths(n->jump(),ipos+1,length_bitarray);
+ if ( n->isWord() )
+ length_bitarray |= (1<<(ipos+1));
+ }
+ n = n->next();
+ } while (n);
+ }
+}
+
+void DictFilterConfig::add(const QString& set)
+{
+ QFontMetrics fm = parent->fontMetrics();
+ input.append(set.lower());
+ matches.clear();
+//visit=0;
+//lvisit=0;
+ int length_bitarray = 0;
+ if ( input.count() > 4 ) {
+ scanLengths(Global::addedDawg().root(),0,length_bitarray);
+ scanLengths(Global::fixedDawg().root(),0,length_bitarray);
+ } else {
+ length_bitarray = 0xffffffff;
+ }
+ for (int len=input.count(); len<22 /* 32 */; ++len) {
+ if ( length_bitarray & (1<<len) ) {
+ scan(Global::addedDawg().root(),0,"",len,TRUE);
+ scan(Global::fixedDawg().root(),0,"",len,TRUE);
+ int x = 2;
+ for (QStringList::Iterator it=matches.begin(); it!=matches.end(); ++it) {
+ x += fm.width(*it)+intermatchmargin;
+ if ( x >= parent->width() ) {
+//qDebug("%d+%d visits",lvisit,visit);
+ return; // RETURN - No point finding more
+ }
+ }
+ }
+ if ( len == 1 && input.count() == 1 ) {
+ // Allow all single-characters to show as "matches"
+ for ( int i=0; i<(int)set.length(); i++ ) {
+ QChar ch = set[i].lower();
+ matches.append(ch);
+ }
+ }
+ }
+//qDebug("%d+%d visits",lvisit,visit);
+}
+
+bool DictFilterConfig::highlight(int r,int c) const
+{
+ return r == 0 ? c == lit0 : c == lit1;
+}
+
+
+void DictFilterConfig::addSet(const QString& s)
+{
+ sets.append(s);
+}
+
+void DictFilterConfig::addMode(const QString& s)
+{
+ othermodes.append(s);
+}
+
+void DictFilterConfig::fillMenu(QPopupMenu& menu)
+{
+ menu.insertItem("Add...",300);
+ StringConfig::fillMenu(menu);
+}
+
+QValueList<QPixmap> KeycodeConfig::row(int i)
+{
+ return i ? keypm2 : keypm1;
+}
+
+void KeycodeConfig::pickInRow(int r, int xpos, bool press)
+{
+ QValueList<QPixmap> pl = row(r);
+ QValueList<QPixmap>::Iterator it;
+ int item=0;
+ int x=xmarg;
+ for (it=pl.begin(); it!=pl.end(); ++it) {
+ int x2 = x + (*it).width();
+ if ( (*it).height() > 1 )
+ x2 += xw;
+ if ( xpos >= x && xpos < x2 ) {
+ pick(press, r, item);
+ return;
+ }
+ x = x2;
+ item++;
+ }
+}
+
+void KeycodeConfig::pick(bool press, int row, int item)
+{
+ if ( !press ) {
+ if ( item >= 0 ) {
+ int k = row == 0 ? keys1[item] : keys2[item];
+ if ( k )
+ generateKey(k);
+ }
+ changeMode(0);
+ updateRows(0,1);
+ }
+}
+
+void KeycodeConfig::draw(QPainter* p)
+{
+ int y=3;
+ QValueList<QPixmap>::Iterator it;
+ for (int r=0; r<nrows; r++) {
+ QValueList<QPixmap> pl = row(r);
+ int x = xmarg;
+ for (it=pl.begin(); it!=pl.end(); ++it) {
+ if ( (*it).height() == 1 ) {
+ // just a gap
+ x += (*it).width();
+ } else {
+ p->drawPixmap(x,y,*it);
+ x += (*it).width()+xw;
+ }
+ }
+ y += parent->height()/nrows;
+ }
+}
+
+
+void KeycodeConfig::addKey(int r, const QPixmap& pm, int code)
+{
+ if ( r == 0 ) {
+ keypm1.append(pm);
+ keys1.append(code);
+ } else {
+ keypm2.append(pm);
+ keys2.append(code);
+ }
+}
+void KeycodeConfig::addGap(int r, int w)
+{
+ QBitmap pm(w,1); // ick.
+ addKey(r,pm,0);
+}
+
+QString CharConfig::text(int r, int i)
+{
+ QStringList l = r ? chars2 : chars1;
+ return i < (int)l.count() ? l[i] : QString::null;
+}
+bool CharConfig::spreadRow(int)
+{
+ return TRUE;
+}
+
+void CharConfig::pick(bool press, int row, int item)
+{
+ if ( !press ) {
+ if ( item >= 0 ) {
+ generateText(row == 0 ? chars1[item] : chars2[item]);
+ }
+ changeMode(0);
+ updateRows(0,1);
+ }
+}
+
+void CharConfig::addChar(int r, const QString& s)
+{
+ if ( r ) chars2.append(s); else chars1.append(s);
+}
+
+QString CharStringConfig::text(int r, int i)
+{
+ QStringList l = r ? chars : QStringList(input);
+ return i < (int)l.count() ? l[i] : QString::null;
+}
+
+bool CharStringConfig::spreadRow(int i)
+{
+ return i ? TRUE : FALSE;
+}
+
+void CharStringConfig::pick(bool press, int row, int item)
+{
+ if ( row == 0 ) {
+ if ( !press ) {
+ if ( item>=0 ) {
+ generateText(input);
+ }
+ input = "";
+ changeMode(0);
+ updateRows(0,1);
+ }
+ } else {
+ if ( press && item >= 0 ) {
+ input.append(chars[item]);
+ updateRows(0,0);
+ }
+ }
+}
+
+void CharStringConfig::addChar(const QString& s)
+{
+ chars.append(s);
+}
+
+void CharStringConfig::doMenu(int i)
+{
+ if ( i == 100 ) {
+ input = "";
+ updateRows(0,0);
+ }
+
+ StringConfig::doMenu(i);
+}
+
diff --git a/inputmethods/pickboard/pickboardcfg.h b/inputmethods/pickboard/pickboardcfg.h
new file mode 100644
index 0000000..e0dc0dd
--- a/dev/null
+++ b/inputmethods/pickboard/pickboardcfg.h
@@ -0,0 +1,213 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PICKBOARDCFG_H
+#define PICKBOARDCFG_H
+
+#include <qpe/qdawg.h>
+
+#include <qpushbutton.h>
+#include <qhbuttongroup.h>
+#include <qdialog.h>
+#include <qlist.h>
+
+// Internal stuff...
+
+class PickboardPicks;
+
+class LetterButton : public QPushButton {
+ Q_OBJECT
+public:
+ LetterButton(const QChar& letter, QWidget* parent);
+private slots:
+ void toggleCase();
+private:
+ bool skip;
+};
+
+class LetterChoice : public QButtonGroup {
+ Q_OBJECT
+public:
+ LetterChoice(QWidget* parent, const QString& set);
+
+ QChar choice() { return ch; }
+
+signals:
+ void changed();
+
+private slots:
+ void change();
+
+private:
+ QChar ch;
+};
+
+class PickboardAdd : public QDialog {
+ Q_OBJECT
+public:
+ PickboardAdd(QWidget* owner, const QStringList& setlist);
+ ~PickboardAdd();
+
+ QString word() const;
+ bool exec();
+
+private slots:
+ void checkAllDone();
+
+private:
+ QPushButton *yes;
+ LetterChoice **lc;
+ int nlc;
+};
+
+class PickboardConfig : QObject {
+public:
+ PickboardConfig(PickboardPicks* p) : parent(p), nrows(2), pressx(-1) { }
+ virtual ~PickboardConfig();
+ virtual void pickPoint(const QPoint& p, bool press);
+ virtual void draw(QPainter*)=0;
+ virtual void fillMenu(QPopupMenu&);
+ virtual void doMenu(int);
+
+protected:
+ void updateRows(int from, int to);
+ virtual void updateItem(int r, int i);
+ virtual void pickInRow(int r, int xpos, bool press)=0;
+
+ void changeMode(int m);
+ virtual void generateText(const QString& s);
+ void generateKey( int k );
+
+ virtual void pick(bool press, int row, int item)=0;
+
+protected:
+ PickboardPicks* parent;
+ int nrows;
+private:
+ int pressrow, pressx;
+};
+
+class StringConfig : public PickboardConfig {
+public:
+ StringConfig(PickboardPicks* p) : PickboardConfig(p) { }
+
+ void draw(QPainter* p);
+
+protected:
+ virtual QString text(int r, int i)=0;
+ virtual bool spreadRow(int i)=0;
+ virtual QColor rowColor(int) { return Qt::black; }
+ virtual void pickInRow(int r, int xpos, bool press);
+ virtual void updateItem(int r, int i);
+ virtual bool highlight(int,int) const;
+};
+
+class CharStringConfig : public StringConfig {
+ QString input;
+ QStringList chars;
+public:
+ CharStringConfig(PickboardPicks* p) : StringConfig(p) { }
+
+ void addChar(const QString& s);
+ virtual void doMenu(int);
+
+protected:
+ QString text(int r, int i);
+ bool spreadRow(int i);
+ void pick(bool press, int row, int item);
+};
+
+class DictFilterConfig : public StringConfig {
+ QStringList matches;
+ QStringList sets;
+ QStringList othermodes;
+ int lit0;
+ int lit1;
+ int shift;
+ QString capitalize(const QString& s);
+ QStringList capitalize(const QStringList& s);
+
+public:
+ QStringList input;
+ DictFilterConfig(PickboardPicks* p) : StringConfig(p)
+ {
+ shift = 0;
+ lit0 = -1;
+ lit1 = -1;
+ }
+
+ void addSet(const QString& s);
+ void addMode(const QString& s);
+
+ void fillMenu(QPopupMenu& menu);
+ void doMenu(int i);
+
+ void add(const QString& set);
+
+protected:
+ QString text(int r, int i);
+
+ bool spreadRow(int i);
+
+ void pick(bool press, int row, int item);
+
+ bool scanMatch(const QString& set, const QChar& l) const;
+ void scan(const QDawg::Node* n, int ipos, const QString& str, int length, bool extend);
+ void scanLengths(const QDawg::Node* n, int ipos, int& bitarray);
+
+ bool highlight(int r,int c) const;
+};
+
+class CharConfig : public StringConfig {
+ QStringList chars1;
+ QStringList chars2;
+public:
+ CharConfig(PickboardPicks* p) : StringConfig(p) { }
+ void addChar(int r, const QString& s);
+
+protected:
+ QString text(int r, int i);
+ bool spreadRow(int);
+ void pick(bool press, int row, int item);
+};
+
+class KeycodeConfig : public PickboardConfig {
+ QValueList<int> keys1;
+ QValueList<int> keys2;
+ QValueList<QPixmap> keypm1;
+ QValueList<QPixmap> keypm2;
+ static const int xw = 8;
+ static const int xmarg = 8;
+
+public:
+ KeycodeConfig(PickboardPicks* p) : PickboardConfig(p) { }
+ void addKey(int r, const QPixmap& pm, int code);
+ void addGap(int r, int w);
+
+ void draw(QPainter* p);
+
+protected:
+ void pickInRow(int r, int xpos, bool press);
+ QValueList<QPixmap> row(int i);
+
+ void pick(bool press, int row, int item);
+};
+
+
+#endif
diff --git a/inputmethods/pickboard/pickboardimpl.cpp b/inputmethods/pickboard/pickboardimpl.cpp
new file mode 100644
index 0000000..a4e8f02
--- a/dev/null
+++ b/inputmethods/pickboard/pickboardimpl.cpp
@@ -0,0 +1,101 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qapplication.h>
+#include <qobject.h>
+#include <qpixmap.h>
+#include "pickboard.h"
+#include "pickboardimpl.h"
+
+/* XPM */
+static const char * pb_xpm[]={
+"28 7 2 1",
+"# c #303030",
+" c None",
+" ########################## ",
+" # # # # # # # ",
+" # # # # # # # ",
+" ########################## ",
+" # # # # # # ",
+" # # # # # # ",
+" ########################## "};
+
+
+PickboardImpl::PickboardImpl()
+ : pickboard(0), icn(0), ref(0)
+{
+}
+
+PickboardImpl::~PickboardImpl()
+{
+ delete pickboard;
+ delete icn;
+}
+
+QWidget *PickboardImpl::inputMethod( QWidget *parent, Qt::WFlags f )
+{
+ if ( !pickboard )
+ pickboard = new Pickboard( parent, "pickboard", f );
+ return pickboard;
+}
+
+void PickboardImpl::resetState()
+{
+ if ( pickboard )
+ pickboard->resetState();
+}
+
+QPixmap *PickboardImpl::icon()
+{
+ if ( !icn )
+ icn = new QPixmap( (const char **)pb_xpm );
+ return icn;
+}
+
+QString PickboardImpl::name()
+{
+ return qApp->translate( "InputMethods", "Pickboard" );
+}
+
+void PickboardImpl::onKeyPress( QObject *receiver, const char *slot )
+{
+ if ( pickboard )
+ QObject::connect( pickboard, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot );
+}
+
+#ifndef QT_NO_COMPONENT
+QRESULT PickboardImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_InputMethod )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( PickboardImpl )
+}
+#endif
+
diff --git a/inputmethods/pickboard/pickboardimpl.h b/inputmethods/pickboard/pickboardimpl.h
new file mode 100644
index 0000000..4f23665
--- a/dev/null
+++ b/inputmethods/pickboard/pickboardimpl.h
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PICKBOARDIMPL_H
+#define PICKBOARDIMPL_H
+
+#include <qpe/inputmethodinterface.h>
+
+class Pickboard;
+class QPixmap;
+
+class PickboardImpl : public InputMethodInterface
+{
+public:
+ PickboardImpl();
+ virtual ~PickboardImpl();
+
+#ifndef QT_NO_COMPONENT
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+#endif
+
+ virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f );
+ virtual void resetState();
+ virtual QPixmap *icon();
+ virtual QString name();
+ virtual void onKeyPress( QObject *receiver, const char *slot );
+
+private:
+ Pickboard *pickboard;
+ QPixmap *icn;
+ ulong ref;
+};
+
+#endif
diff --git a/inputmethods/pickboard/pickboardpicks.cpp b/inputmethods/pickboard/pickboardpicks.cpp
new file mode 100644
index 0000000..a80bbf8
--- a/dev/null
+++ b/inputmethods/pickboard/pickboardpicks.cpp
@@ -0,0 +1,418 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "pickboardpicks.h"
+#include "pickboardcfg.h"
+
+#include <qpe/global.h>
+
+#include <qpainter.h>
+#include <qlist.h>
+#include <qbitmap.h>
+#include <qlayout.h>
+#include <qvbox.h>
+#include <qdialog.h>
+#include <qscrollview.h>
+#include <qpopupmenu.h>
+#include <qhbuttongroup.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qwindowsystem_qws.h>
+
+void PickboardPicks::doMenu()
+{
+ QWidget* cause = (QWidget*)sender(); // evil
+
+ QPopupMenu popup(this);
+ config()->fillMenu(popup);
+
+ QPoint pos = cause->mapToGlobal(cause->rect().topRight());
+ QSize sz = popup.sizeHint();
+ pos.ry() -= sz.height();
+ pos.rx() -= sz.width();
+ popup.move(pos);
+ config()->doMenu(popup.exec());
+}
+
+static const char *BS_xpm[] = {
+"5 7 2 1",
+"a c #000000",
+". c None",
+"...aa",
+"..aaa",
+".aaaa",
+"aaaaa",
+".aaaa",
+"..aaa",
+"...aa",
+};
+static const char *Del_xpm[] = {
+"14 7 2 1",
+"a c #000000",
+". c None",
+"aaa..aaaa.a...",
+"a..a.a....a...",
+"a..a.a....a...",
+"a..a.aaa..a...",
+"a..a.a....a...",
+"a..a.a....a...",
+"aaa..aaaa.aaaa"
+};
+static const char *Home_xpm[] = {
+"20 7 2 1",
+"a c #000000",
+". c None",
+"a..a..aa..a...a.aaaa",
+"a..a.a..a.aa.aa.a...",
+"a..a.a..a.a.a.a.a...",
+"aaaa.a..a.a.a.a.aaa.",
+"a..a.a..a.a...a.a...",
+"a..a.a..a.a...a.a...",
+"a..a..aa..a...a.aaaa"
+};
+static const char *PgUp_xpm[] = {
+"20 7 2 1",
+"a c #000000",
+". c None",
+"aaa.......a..a......",
+"a..a......a..a......",
+"a..a.aa...a..a.aaa..",
+"aaa.a.....a..a.a..a.",
+"a...a.aa..a..a.aaa..",
+"a...a..a..a..a.a....",
+"a....aaa...aa..a...."
+};
+static const char *PgDn_xpm[] = {
+"20 7 2 1",
+"a c #000000",
+". c None",
+"aaa.......aaa.......",
+"a..a......a..a......",
+"a..a.aa...a..a.a..a.",
+"aaa.a.....a..a.aa.a.",
+"a...a.aa..a..a.a.aa.",
+"a...a..a..a..a.a..a.",
+"a....aaa..aaa..a..a."
+};
+static const char *End_xpm[] = {
+"14 7 2 1",
+"a c #000000",
+". c None",
+"aaaa.a..a.aaa.",
+"a....aa.a.a..a",
+"a....a.aa.a..a",
+"aaa..a..a.a..a",
+"a....a..a.a..a",
+"a....a..a.a..a",
+"aaaa.a..a.aaa."
+};
+static const char *Enter_xpm[] = {
+"14 7 2 1",
+"a c #000000",
+". c None",
+".............a",
+".............a",
+"..a..........a",
+".aa.........a.",
+"aaaaaaaaaaaa..",
+".aa...........",
+"..a..........."
+};
+static const char *Esc_xpm[] = {
+"14 7 2 1",
+"a c #000000",
+". c None",
+"aaaa..aa...aa.",
+"a....a..a.a..a",
+"a....a....a...",
+"aaa...aa..a...",
+"a.......a.a...",
+"a....a..a.a..a",
+"aaaa..aa...aa."
+};
+static const char *Ins_xpm[] = {
+"13 7 2 1",
+"a c #000000",
+". c None",
+"aaa.a..a..aa.",
+".a..aa.a.a..a",
+".a..a.aa.a...",
+".a..a..a..aa.",
+".a..a..a....a",
+".a..a..a.a..a",
+"aaa.a..a..aa."
+};
+static const char *Up_xpm[] = {
+"7 7 2 1",
+"a c #000000",
+". c None",
+"...a...",
+"..aaa..",
+".a.a.a.",
+"a..a..a",
+"...a...",
+"...a...",
+"...a..."
+};
+static const char *Left_xpm[] = {
+"7 7 2 1",
+"a c #000000",
+". c None",
+"...a...",
+"..a....",
+".a.....",
+"aaaaaaa",
+".a.....",
+"..a....",
+"...a..."
+};
+static const char *Down_xpm[] = {
+"7 7 2 1",
+"a c #000000",
+". c None",
+"...a...",
+"...a...",
+"...a...",
+"a..a..a",
+".a.a.a.",
+"..aaa..",
+"...a..."
+};
+static const char *Right_xpm[] = {
+"7 7 2 1",
+"a c #000000",
+". c None",
+"...a...",
+"....a..",
+".....a.",
+"aaaaaaa",
+".....a.",
+"....a..",
+"...a..."
+};
+static const char *BackTab_xpm[] = {
+"8 7 2 1",
+"a c #000000",
+". c None",
+"a.......",
+"a..a....",
+"a.aa....",
+"aaaaaaaa",
+"a.aa....",
+"a..a....",
+"a......."
+};
+static const char *Tab_xpm[] = {
+"8 7 2 1",
+"a c #000000",
+". c None",
+".......a",
+"....a..a",
+"....aa.a",
+"aaaaaaaa",
+"....aa.a",
+"....a..a",
+".......a"
+};
+static const char *Space_xpm[] = {
+"9 9 2 1",
+"a c #000000",
+". c None",
+"aaaaaaaaa",
+"a.......a",
+"a.......a",
+"a.......a",
+"a.......a",
+"a.......a",
+"a.......a",
+"a.......a",
+"aaaaaaaaa"
+};
+
+PickboardPicks::PickboardPicks(QWidget* parent, const char* name, WFlags f ) :
+ QFrame(parent,name,f)
+{
+}
+
+void PickboardPicks::initialise(void)
+{
+ setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed));
+ mode = 0;
+
+ DictFilterConfig* dc = new DictFilterConfig(this);
+ dc->addSet("ABC");
+ dc->addSet("DEF");
+ dc->addSet("GHI");
+ dc->addSet("JKL");
+ dc->addSet("MNO");
+ dc->addSet("PQR");
+ dc->addSet("STU");
+ dc->addSet("VWX");
+ dc->addSet("YZ-'");
+ dc->addMode("123");
+ dc->addMode("@*!?");
+ dc->addMode("KEY");
+ dc->addMode("Space");
+ dc->addMode("Back");
+ dc->addMode("Enter");
+ dc->addMode("Shift");
+ configs.append(dc);
+
+ CharStringConfig* number = new CharStringConfig(this);
+ number->addChar("0");
+ number->addChar("1");
+ number->addChar("2");
+ number->addChar("3");
+ number->addChar("4");
+ number->addChar("5");
+ number->addChar("6");
+ number->addChar("7");
+ number->addChar("8");
+ number->addChar("9");
+ number->addChar("."); // #### or "," in some locales
+ configs.append(number);
+
+ CharConfig* punc = new CharConfig(this);
+
+ punc->addChar(0,"\"");
+ punc->addChar(0,"`");
+ punc->addChar(0,"'");
+ punc->addChar(0,"\253");
+ punc->addChar(0,"\273");
+ punc->addChar(0,"\277");
+ punc->addChar(1,"(");
+ punc->addChar(1,")");
+ punc->addChar(1,"[");
+ punc->addChar(1,"]");
+ punc->addChar(1,"{");
+ punc->addChar(1,"}");
+
+ punc->addChar(0,"+");
+ punc->addChar(0,"-");
+ punc->addChar(0,"*");
+ punc->addChar(0,"/");
+ punc->addChar(0,"=");
+ punc->addChar(0,"_");
+ punc->addChar(0,"$");
+ punc->addChar(0,"&");
+ punc->addChar(1,"|");
+ punc->addChar(1,"@");
+ punc->addChar(1,"\\");
+ punc->addChar(1,"#");
+ punc->addChar(1,"^");
+ punc->addChar(1,"~");
+ punc->addChar(1,"<");
+ punc->addChar(1,">");
+
+ punc->addChar(0,".");
+ punc->addChar(0,"?");
+ punc->addChar(0,"!");
+ punc->addChar(0,",");
+ punc->addChar(0,";");
+ punc->addChar(1,":");
+ punc->addChar(1,"\267");
+ punc->addChar(1,"\277");
+ punc->addChar(1,"\241");
+ punc->addChar(1,"\367");
+
+ punc->addChar(0,"$");
+ punc->addChar(0,"\242");
+ punc->addChar(0,"\245");
+ punc->addChar(1,"\243");
+ punc->addChar(1,"\244");
+ punc->addChar(1,"\260");
+
+ configs.append(punc);
+
+ KeycodeConfig* keys = new KeycodeConfig(this);
+ keys->addKey(0,QPixmap(Esc_xpm),Key_Escape);
+ keys->addKey(0,QPixmap(BS_xpm),Key_Backspace);
+ keys->addGap(0,10);
+
+ keys->addKey(0,QPixmap(Ins_xpm),Key_Insert);
+ keys->addKey(0,QPixmap(Home_xpm),Key_Home);
+ keys->addKey(0,QPixmap(PgUp_xpm),Key_PageUp);
+
+ keys->addGap(0,25);
+ keys->addKey(0,QPixmap(Up_xpm),Key_Up);
+ keys->addGap(0,15);
+
+ keys->addKey(1,QPixmap(BackTab_xpm),Key_Tab);
+ keys->addGap(1,3);
+ keys->addKey(1,QPixmap(Tab_xpm),Key_Tab);
+ keys->addGap(1,10);
+
+ keys->addKey(1,QPixmap(Del_xpm),Key_Delete);
+ keys->addGap(1,2);
+ keys->addKey(1,QPixmap(End_xpm),Key_End);
+ keys->addGap(1,3);
+ keys->addKey(1,QPixmap(PgDn_xpm),Key_PageDown);
+
+ keys->addGap(1,10);
+ keys->addKey(1,QPixmap(Left_xpm),Key_Left);
+ keys->addKey(1,QPixmap(Down_xpm),Key_Down);
+ keys->addKey(1,QPixmap(Right_xpm),Key_Right);
+
+ keys->addGap(1,13);
+ keys->addKey(1,QPixmap(Space_xpm),Key_Space);
+
+ keys->addGap(0,10);
+ keys->addKey(0,QPixmap(Enter_xpm),Key_Return);
+
+ configs.append(keys);
+}
+
+PickboardPicks::~PickboardPicks()
+{
+}
+
+QSize PickboardPicks::sizeHint() const
+{
+ return QSize(240,fontMetrics().lineSpacing()*2+3);
+}
+
+void PickboardPicks::drawContents(QPainter* p)
+{
+ config()->draw(p);
+}
+
+void PickboardPicks::mousePressEvent(QMouseEvent* e)
+{
+ config()->pickPoint(e->pos(),TRUE);
+}
+
+void PickboardPicks::mouseDoubleClickEvent(QMouseEvent* e)
+{
+ config()->pickPoint(e->pos(),TRUE);
+}
+
+void PickboardPicks::mouseReleaseEvent(QMouseEvent* e)
+{
+ config()->pickPoint(e->pos(),FALSE);
+}
+
+void PickboardPicks::setMode(int m)
+{
+ mode = m;
+}
+
+void PickboardPicks::resetState()
+{
+ config()->doMenu(100);
+}
diff --git a/inputmethods/pickboard/pickboardpicks.h b/inputmethods/pickboard/pickboardpicks.h
new file mode 100644
index 0000000..1881e92
--- a/dev/null
+++ b/inputmethods/pickboard/pickboardpicks.h
@@ -0,0 +1,66 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PICKBOARDPICKS_H
+#define PICKBOARDPICKS_H
+
+#include <qframe.h>
+#include <qlist.h>
+
+// Internal stuff...
+
+class PickboardConfig;
+
+class PickboardPicks : public QFrame {
+ Q_OBJECT
+public:
+ PickboardPicks(QWidget* parent=0, const char* name=0, WFlags f=0);
+ ~PickboardPicks();
+ QSize sizeHint() const;
+ void initialise();
+ void setMode(int);
+ int currentMode() const { return mode; }
+
+ void mousePressEvent(QMouseEvent*);
+
+ void emitKey( ushort scan, ushort uni, ushort mod, bool press, bool repeat )
+ { key(scan,uni,mod,press, repeat); }
+ void resetState();
+
+signals:
+ void key( ushort scan, ushort uni, ushort mod, bool, bool );
+
+public slots:
+ void doMenu();
+
+protected:
+ void drawContents( QPainter * );
+ void mouseDoubleClickEvent(QMouseEvent*);
+ void mouseReleaseEvent(QMouseEvent*);
+
+protected:
+ int mode;
+ QList<PickboardConfig> configs;
+
+private:
+ PickboardConfig* config() { return configs.at(mode); }
+};
+
+
+#endif
diff --git a/inputmethods/pickboard/qpe-pickboard.control b/inputmethods/pickboard/qpe-pickboard.control
new file mode 100644
index 0000000..8d12181
--- a/dev/null
+++ b/inputmethods/pickboard/qpe-pickboard.control
@@ -0,0 +1,9 @@
+Files: plugins/inputmethods/libqpickboard.so*
+Priority: optional
+Section: qpe/inputmethods
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Pickboard input method
+ Pickboard dictionary-based input method for the Qtopia environment.
diff --git a/inputmethods/pickboard/qpe-pickboard.postinst b/inputmethods/pickboard/qpe-pickboard.postinst
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/pickboard/qpe-pickboard.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/pickboard/qpe-pickboard.postrm b/inputmethods/pickboard/qpe-pickboard.postrm
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/pickboard/qpe-pickboard.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/unikeyboard/.cvsignore b/inputmethods/unikeyboard/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/inputmethods/unikeyboard/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/inputmethods/unikeyboard/Makefile.in b/inputmethods/unikeyboard/Makefile.in
new file mode 100644
index 0000000..ebbab50
--- a/dev/null
+++ b/inputmethods/unikeyboard/Makefile.in
@@ -0,0 +1,115 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../plugins/inputmethods/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qunikeyboard
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = unikeyboard.h \
+ unikeyboardimpl.h
+SOURCES = unikeyboard.cpp \
+ unikeyboardimpl.cpp
+OBJECTS = unikeyboard.o \
+ unikeyboardimpl.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_unikeyboard.cpp
+OBJMOC = moc_unikeyboard.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake unikeyboard.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+unikeyboard.o: unikeyboard.cpp \
+ unikeyboard.h
+
+unikeyboardimpl.o: unikeyboardimpl.cpp \
+ unikeyboard.h \
+ unikeyboardimpl.h
+
+moc_unikeyboard.o: moc_unikeyboard.cpp \
+ unikeyboard.h
+
+moc_unikeyboard.cpp: unikeyboard.h
+ $(MOC) unikeyboard.h -o moc_unikeyboard.cpp
+
+
diff --git a/inputmethods/unikeyboard/qpe-unikeyboard.control b/inputmethods/unikeyboard/qpe-unikeyboard.control
new file mode 100644
index 0000000..a8c9bd3
--- a/dev/null
+++ b/inputmethods/unikeyboard/qpe-unikeyboard.control
@@ -0,0 +1,9 @@
+Files: plugins/inputmethods/libqunikeyboard.so*
+Priority: optional
+Section: qpe/inputmethods
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Unicode input method
+ Basic unicode input method for the Qtopia environment.
diff --git a/inputmethods/unikeyboard/qpe-unikeyboard.postinst b/inputmethods/unikeyboard/qpe-unikeyboard.postinst
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/unikeyboard/qpe-unikeyboard.postinst
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/unikeyboard/qpe-unikeyboard.postrm b/inputmethods/unikeyboard/qpe-unikeyboard.postrm
new file mode 100755
index 0000000..c254b01
--- a/dev/null
+++ b/inputmethods/unikeyboard/qpe-unikeyboard.postrm
@@ -0,0 +1,2 @@
+#!/bin/sh
+/opt/QtPalmtop/bin/qcop QPE/TaskBar "reloadInputMethods()"
diff --git a/inputmethods/unikeyboard/unikeyboard.cpp b/inputmethods/unikeyboard/unikeyboard.cpp
new file mode 100644
index 0000000..aa74c66
--- a/dev/null
+++ b/inputmethods/unikeyboard/unikeyboard.cpp
@@ -0,0 +1,278 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "unikeyboard.h"
+
+#include <qpe/fontmanager.h>
+
+#include <qpainter.h>
+#include <qfontmetrics.h>
+#include <qcombobox.h>
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+#include <qwindowsystem_qws.h>
+#endif
+
+static const int nw = 8;
+
+typedef struct BlockMap {
+ ushort start;
+ ushort stop;
+ const char *name;
+};
+
+//# Start Code; Block Name
+
+static const BlockMap blockMap[] =
+{
+{0x0000, 0x007F, "Basic Latin"},
+{0x0080, 0x00FF, "Latin-1 Supplement"},
+{0x0100, 0x017F, "Latin Extended-A"},
+{0x0180, 0x024F, "Latin Extended-B"},
+{0x0250, 0x02AF, "IPA Extensions"},
+{0x02B0, 0x02FF, "Spacing Modifier Letters"},
+{0x0300, 0x036F, "Combining Diacritical Marks"},
+{0x0370, 0x03FF, "Greek"},
+{0x0400, 0x04FF, "Cyrillic"},
+{0x0530, 0x058F, "Armenian"},
+{0x0590, 0x05FF, "Hebrew"},
+{0x0600, 0x06FF, "Arabic"},
+{0x0700, 0x074F, "Syriac "},
+{0x0780, 0x07BF, "Thaana"},
+{0x0900, 0x097F, "Devanagari"},
+{0x0980, 0x09FF, "Bengali"},
+{0x0A00, 0x0A7F, "Gurmukhi"},
+{0x0A80, 0x0AFF, "Gujarati"},
+{0x0B00, 0x0B7F, "Oriya"},
+{0x0B80, 0x0BFF, "Tamil"},
+{0x0C00, 0x0C7F, "Telugu"},
+{0x0C80, 0x0CFF, "Kannada"},
+{0x0D00, 0x0D7F, "Malayalam"},
+{0x0D80, 0x0DFF, "Sinhala"},
+{0x0E00, 0x0E7F, "Thai"},
+{0x0E80, 0x0EFF, "Lao"},
+{0x0F00, 0x0FFF, "Tibetan"},
+{0x1000, 0x109F, "Myanmar "},
+{0x10A0, 0x10FF, "Georgian"},
+{0x1100, 0x11FF, "Hangul Jamo"},
+{0x1200, 0x137F, "Ethiopic"},
+{0x13A0, 0x13FF, "Cherokee"},
+{0x1400, 0x167F, "Unified Canadian Aboriginal Syllabics"},
+{0x1680, 0x169F, "Ogham"},
+{0x16A0, 0x16FF, "Runic"},
+{0x1780, 0x17FF, "Khmer"},
+{0x1800, 0x18AF, "Mongolian"},
+{0x1E00, 0x1EFF, "Latin Extended Additional"},
+{0x1F00, 0x1FFF, "Greek Extended"},
+{0x2000, 0x206F, "General Punctuation"},
+{0x2070, 0x209F, "Superscripts and Subscripts"},
+{0x20A0, 0x20CF, "Currency Symbols"},
+{0x20D0, 0x20FF, "Combining Marks for Symbols"},
+{0x2100, 0x214F, "Letterlike Symbols"},
+{0x2150, 0x218F, "Number Forms"},
+{0x2190, 0x21FF, "Arrows"},
+{0x2200, 0x22FF, "Mathematical Operators"},
+{0x2300, 0x23FF, "Miscellaneous Technical"},
+{0x2400, 0x243F, "Control Pictures"},
+{0x2440, 0x245F, "Optical Character Recognition"},
+{0x2460, 0x24FF, "Enclosed Alphanumerics"},
+{0x2500, 0x257F, "Box Drawing"},
+{0x2580, 0x259F, "Block Elements"},
+{0x25A0, 0x25FF, "Geometric Shapes"},
+{0x2600, 0x26FF, "Miscellaneous Symbols"},
+{0x2700, 0x27BF, "Dingbats"},
+{0x2800, 0x28FF, "Braille Patterns"},
+{0x2E80, 0x2EFF, "CJK Radicals Supplement"},
+{0x2F00, 0x2FDF, "Kangxi Radicals"},
+{0x2FF0, 0x2FFF, "Ideographic Description Characters"},
+{0x3000, 0x303F, "CJK Symbols and Punctuation"},
+{0x3040, 0x309F, "Hiragana"},
+{0x30A0, 0x30FF, "Katakana"},
+{0x3100, 0x312F, "Bopomofo"},
+{0x3130, 0x318F, "Hangul Compatibility Jamo"},
+{0x3190, 0x319F, "Kanbun"},
+{0x31A0, 0x31BF, "Bopomofo Extended"},
+{0x3200, 0x32FF, "Enclosed CJK Letters and Months"},
+{0x3300, 0x33FF, "CJK Compatibility"},
+{0x3400, 0x4DB5, "CJK Unified Ideographs Extension A"},
+{0x4E00, 0x9FFF, "CJK Unified Ideographs"},
+{0xA000, 0xA48F, "Yi Syllables"},
+{0xA490, 0xA4CF, "Yi Radicals"},
+{0xAC00, 0xD7A3, "Hangul Syllables"},
+{0xD800, 0xDB7F, "High Surrogates"},
+{0xDB80, 0xDBFF, "High Private Use Surrogates"},
+{0xDC00, 0xDFFF, "Low Surrogates"},
+{0xE000, 0xF8FF, "Private Use"},
+{0xF900, 0xFAFF, "CJK Compatibility Ideographs"},
+{0xFB00, 0xFB4F, "Alphabetic Presentation Forms"},
+{0xFB50, 0xFDFF, "Arabic Presentation Forms-A"},
+{0xFE20, 0xFE2F, "Combining Half Marks"},
+{0xFE30, 0xFE4F, "CJK Compatibility Forms"},
+{0xFE50, 0xFE6F, "Small Form Variants"},
+{0xFE70, 0xFEFE, "Arabic Presentation Forms-B"},
+{0xFF00, 0xFEFF, "Halfwidth and Fullwidth Forms"},
+{0xFFF0, 0xFFEF, "Specials"},
+{0xFFFF, 0xFFFF, 0} };
+
+
+UniScrollview::UniScrollview(QWidget* parent, const char* name, int f) :
+ QScrollView(parent, name, f)
+{
+ // smallFont.setRawName( "-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1" ); //######
+ smallFont = QFont( "Helvetica", 8 );
+ QFontMetrics sfm( smallFont );
+ xoff = sfm.width( "AAA" );
+ setFont( FontManager::unicodeFont( FontManager::Fixed ) );
+ QFontMetrics fm( font() );
+ cellsize = fm.lineSpacing() + 2;
+ resizeContents( cellsize*nw, cellsize*65536/nw );
+ verticalScrollBar()->setLineStep(cellsize);
+
+ viewport()->setBackgroundMode( QWidget::PaletteBase );
+}
+
+
+
+void UniScrollview::contentsMousePressEvent(QMouseEvent* e)
+{
+ if ( e->x() < xoff || e->x() > xoff + nw*cellsize )
+ return;
+ int row = e->y()/cellsize;
+ int col = (e->x()-xoff)/cellsize;
+ int u = row*nw+col;
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ emit key( u, 0, 0, true, false );
+ emit key( u, 0, 0, false, false );
+#endif
+}
+
+
+void UniScrollview::contentsMouseReleaseEvent(QMouseEvent*)
+{
+}
+
+void UniScrollview::scrollTo( int unicode )
+{
+ int row = unicode / nw;
+ setContentsPos( 0, row*cellsize );
+}
+
+
+void UniScrollview::drawContents( QPainter *p, int /*cx*/, int cy, int /*cw*/, int ch )
+{
+ QFontMetrics fm = fontMetrics();
+ int row = cy / cellsize;
+ int y = row*cellsize;
+ while ( y < cy+ch ) {
+ p->drawLine( xoff, y, xoff+nw*cellsize, y );
+ if ( row*nw%16 == 0 ) {
+ p->setFont( smallFont );
+ QString s;
+ s.sprintf( "%03X", row*nw/16 );
+ p->drawText( 0, y, xoff, cellsize, AlignLeft, s );
+ p->setFont( font() );
+ }
+ for ( int i = 0; i < nw; i++ ) {
+ p->drawLine( xoff+i*cellsize, y, xoff+i*cellsize, y+cellsize );
+ QChar u = row*nw + i;
+ if ( fm.inFont( u ) )
+ p->drawText( xoff+i*cellsize, y, cellsize, cellsize, AlignCenter,
+ u );
+ }
+ p->drawLine( xoff+nw*cellsize, y, xoff+nw*cellsize, y+cellsize );
+ row++;
+ y += cellsize;
+ }
+}
+
+
+
+
+UniKeyboard::UniKeyboard(QWidget* parent, const char* name, int f )
+ : QFrame( parent, name, f )
+{
+ setFrameStyle( NoFrame );
+ sv = new UniScrollview( this );
+ cb = new QComboBox( FALSE, this );
+ currentBlock = 0;
+ QFontMetrics fm = sv->fontMetrics();
+ cbmap = new int[sizeof(blockMap)/sizeof(blockMap[0])];
+ for ( int i = 0; blockMap[i].name; i++ ) {
+ bool any=FALSE;
+ for ( int c=blockMap[i].start; !any && c<=blockMap[i].stop; c++ )
+ any = fm.inFont(QChar(c));
+ if ( any ) {
+ cbmap[cb->count()]=i;
+ cb->insertItem( blockMap[i].name );
+ }
+ }
+ connect( cb, SIGNAL( activated(int)), this, SLOT( handleCombo(int)) );
+ connect( sv, SIGNAL( contentsMoving(int,int)), this, SLOT( svMove(int,int)) );
+ connect( sv, SIGNAL( key(ushort,ushort,ushort,bool,bool)),
+ this, SIGNAL( key(ushort,ushort,ushort,bool,bool)) );
+}
+
+UniKeyboard::~UniKeyboard()
+{
+ delete [] cbmap;
+}
+
+void UniKeyboard::resizeEvent(QResizeEvent *)
+{
+ int d = frameWidth();
+ cb->setGeometry( d, d, width()-2*d, cb->sizeHint().height() );
+ sv->setGeometry( d, cb->height()+d, width()-2*d, height()-cb->height()-2*d );
+}
+
+void UniKeyboard::svMove( int /*x*/, int y )
+{
+ int cs = sv->cellSize();
+ int u = ((y+cs-1)/cs) * nw;
+ int i = currentBlock;
+ while ( i > 0 && blockMap[i].start > u ) {
+ i--;
+ }
+ while ( blockMap[i+1].name && blockMap[i+1].start < u ) {
+ i++;
+ }
+ if ( i != currentBlock ) {
+ currentBlock = i;
+ for (int ind=0; ind<cb->count(); ind++) {
+ if ( cbmap[ind] == i ) {
+ cb->setCurrentItem( ind );
+ break;
+ }
+ }
+ }
+}
+
+void UniKeyboard::handleCombo( int i )
+{
+ currentBlock = cbmap[i];
+ sv->scrollTo( blockMap[currentBlock].start );
+}
+
+void UniKeyboard::resetState()
+{
+}
+
+QSize UniKeyboard::sizeHint() const
+{
+ return QSize( 240, 2+sv->cellSize()*4+cb->sizeHint().height() );
+}
diff --git a/inputmethods/unikeyboard/unikeyboard.h b/inputmethods/unikeyboard/unikeyboard.h
new file mode 100644
index 0000000..1a716c0
--- a/dev/null
+++ b/inputmethods/unikeyboard/unikeyboard.h
@@ -0,0 +1,77 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qscrollview.h>
+
+class QComboBox;
+
+class UniScrollview : public QScrollView {
+ Q_OBJECT
+public:
+ UniScrollview(QWidget* parent=0, const char* name=0, int f=0);
+ int cellSize() const { return cellsize; }
+
+signals:
+ void key( ushort unicode, ushort scancode, ushort modifiers, bool, bool );
+
+public slots:
+ void scrollTo( int unicode );
+
+protected:
+ void contentsMousePressEvent(QMouseEvent*);
+ void contentsMouseReleaseEvent(QMouseEvent*);
+ void drawContents( QPainter *, int cx, int cy, int cw, int ch ) ;
+
+private:
+ int cellsize;
+ QFont smallFont;
+ int xoff;
+};
+
+
+class UniKeyboard : public QFrame
+{
+ Q_OBJECT
+public:
+ UniKeyboard(QWidget* parent=0, const char* name=0, int f=0);
+ ~UniKeyboard();
+
+ void resetState();
+
+ QSize sizeHint() const;
+
+signals:
+ void key( ushort, ushort, ushort, bool, bool );
+
+protected:
+ void resizeEvent(QResizeEvent *);
+
+private slots:
+ void handleCombo( int );
+ void svMove( int, int );
+
+private:
+ UniScrollview *sv;
+ QComboBox *cb;
+ int currentBlock;
+ int* cbmap;
+};
+
+
+
diff --git a/inputmethods/unikeyboard/unikeyboard.pro b/inputmethods/unikeyboard/unikeyboard.pro
new file mode 100644
index 0000000..c0aad42
--- a/dev/null
+++ b/inputmethods/unikeyboard/unikeyboard.pro
@@ -0,0 +1,12 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = unikeyboard.h unikeyboardimpl.h
+SOURCES = unikeyboard.cpp unikeyboardimpl.cpp
+TARGET = qunikeyboard
+DESTDIR = ../../plugins/inputmethods
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include ../../taskbar
+LIBS += -lqpe
+VERSION = 1.0.0
+
+TRANSLATIONS += ../../i18n/de/libqunikeyboard.ts
diff --git a/inputmethods/unikeyboard/unikeyboardimpl.cpp b/inputmethods/unikeyboard/unikeyboardimpl.cpp
new file mode 100644
index 0000000..fe601e0
--- a/dev/null
+++ b/inputmethods/unikeyboard/unikeyboardimpl.cpp
@@ -0,0 +1,105 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qapplication.h>
+#include <qobject.h>
+#include <qpixmap.h>
+#include "unikeyboard.h"
+#include "unikeyboardimpl.h"
+
+/* XPM */
+static const char * uni_xpm[]={
+"28 13 2 1",
+"# c #000000",
+". c None",
+"............................",
+"...####....#####.....####...",
+"...####....######....####...",
+"...####....#######..........",
+"...####....########..####...",
+"...####....####.####.####...",
+"...####....####..########...",
+"...####....####...#######...",
+"...####....####....######...",
+"...#####..#####.....#####...",
+"....##########.......####...",
+"......######..........###...",
+"............................"};
+
+UniKeyboardImpl::UniKeyboardImpl()
+ : input(0), icn(0), ref(0)
+{
+}
+
+UniKeyboardImpl::~UniKeyboardImpl()
+{
+ delete input;
+ delete icn;
+}
+
+QWidget *UniKeyboardImpl::inputMethod( QWidget *parent, Qt::WFlags f )
+{
+ if ( !input )
+ input = new UniKeyboard( parent, "UniKeyboard", f );
+ return input;
+}
+
+void UniKeyboardImpl::resetState()
+{
+ if ( input )
+ input->resetState();
+}
+
+QPixmap *UniKeyboardImpl::icon()
+{
+ if ( !icn )
+ icn = new QPixmap( (const char **)uni_xpm );
+ return icn;
+}
+
+QString UniKeyboardImpl::name()
+{
+ return qApp->translate( "InputMethods", "Unicode" );
+}
+
+void UniKeyboardImpl::onKeyPress( QObject *receiver, const char *slot )
+{
+ if ( input )
+ QObject::connect( input, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot );
+}
+
+QRESULT UniKeyboardImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_InputMethod )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( UniKeyboardImpl )
+}
+
+
diff --git a/inputmethods/unikeyboard/unikeyboardimpl.h b/inputmethods/unikeyboard/unikeyboardimpl.h
new file mode 100644
index 0000000..97b1ff6
--- a/dev/null
+++ b/inputmethods/unikeyboard/unikeyboardimpl.h
@@ -0,0 +1,49 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef UNIKEYBOARDIMPL_H
+#define UNIKEYBOARDIMPL_H
+
+#include <qpe/inputmethodinterface.h>
+
+class UniKeyboard;
+class QPixmap;
+
+class UniKeyboardImpl : public InputMethodInterface
+{
+public:
+ UniKeyboardImpl();
+ virtual ~UniKeyboardImpl();
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+
+ virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f );
+ virtual void resetState();
+ virtual QPixmap *icon();
+ virtual QString name();
+ virtual void onKeyPress( QObject *receiver, const char *slot );
+
+private:
+ UniKeyboard *input;
+ QPixmap *icn;
+ ulong ref;
+};
+
+#endif
diff --git a/library/.cvsignore b/library/.cvsignore
new file mode 100644
index 0000000..28c0e8a
--- a/dev/null
+++ b/library/.cvsignore
@@ -0,0 +1,13 @@
+moc_*
+*.moc
+Makefile
+proxiesbase_p.h
+proxiesbase_p.cpp
+passwordbase_p.h
+passwordbase_p.cpp
+categoryeditbase_p.cpp
+categoryeditbase_p.h
+findwidgetbase_p.cpp
+findwidgetbase_p.h
+lnkpropertiesbase_p.cpp
+lnkpropertiesbase_p.h
diff --git a/library/Makefile.add b/library/Makefile.add
new file mode 100644
index 0000000..b7b58f5
--- a/dev/null
+++ b/library/Makefile.add
@@ -0,0 +1,4 @@
+backend/vcc_yacc.cpp: backend/vcc.y
+ $(YACC) $(YACCFLAGS) -p vcc backend/vcc.y
+ -rm backend/vcc_yacc.cpp
+ mv y.tab.c backend/vcc_yacc.cpp
diff --git a/library/Makefile.in b/library/Makefile.in
new file mode 100644
index 0000000..c89390f
--- a/dev/null
+++ b/library/Makefile.in
@@ -0,0 +1,905 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I$(QPEDIR)/include -Ibackend
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -ldl -lcrypt -lm $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QTDIR)/lib$(PROJMAK)/
+VER_MAJ = 1
+VER_MIN = 5
+VER_PATCH = 0
+TARGET = qpe
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = calendar.h \
+ global.h \
+ resource.h \
+ xmlreader.h \
+ mimetype.h \
+ menubutton.h \
+ network.h \
+ networkinterface.h \
+ proxies.h \
+ filemanager.h \
+ fontmanager.h \
+ qdawg.h \
+ datebookmonth.h \
+ fileselector.h \
+ imageedit.h \
+ qcopenvelope_qws.h \
+ qpedecoration_qws.h \
+ qpeapplication.h \
+ qpestyle.h \
+ qpedialog.h \
+ lightstyle.h \
+ config.h \
+ applnk.h \
+ sound.h \
+ tzselect.h \
+ qmath.h \
+ datebookdb.h \
+ alarmserver.h \
+ process.h \
+ password.h \
+ timestring.h \
+ fontfactoryinterface.h \
+ fontdatabase.h \
+ power.h \
+ storage.h \
+ qpemessagebox.h \
+ backend/timeconversion.h \
+ qpedebug.h \
+ qpemenubar.h \
+ qpetoolbar.h \
+ backend/categories.h \
+ backend/stringutil.h \
+ backend/palmtopuid.h \
+ backend/palmtoprecord.h \
+ backend/task.h \
+ backend/event.h \
+ backend/contact.h \
+ categorymenu.h \
+ categoryedit_p.h \
+ categoryselect.h \
+ categorywidget.h \
+ ir.h \
+ backend/vobject_p.h \
+ findwidget_p.h \
+ finddialog.h \
+ lnkproperties.h \
+ quuid.h \
+ qcom.h \
+ qlibrary.h \
+ qlibrary_p.h \
+ qprocess.h
+SOURCES = calendar.cpp \
+ global.cpp \
+ xmlreader.cpp \
+ mimetype.cpp \
+ menubutton.cpp \
+ network.cpp \
+ networkinterface.cpp \
+ proxies.cpp \
+ filemanager.cpp \
+ fontmanager.cpp \
+ qdawg.cpp \
+ datebookmonth.cpp \
+ fileselector.cpp \
+ imageedit.cpp \
+ resource.cpp \
+ qpedecoration_qws.cpp \
+ qcopenvelope_qws.cpp \
+ qpeapplication.cpp \
+ qpestyle.cpp \
+ qpedialog.cpp \
+ lightstyle.cpp \
+ config.cpp \
+ applnk.cpp \
+ sound.cpp \
+ tzselect.cpp \
+ qmath.c \
+ datebookdb.cpp \
+ alarmserver.cpp \
+ password.cpp \
+ process.cpp \
+ process_unix.cpp \
+ timestring.cpp \
+ fontdatabase.cpp \
+ power.cpp \
+ storage.cpp \
+ qpemessagebox.cpp \
+ backend/timeconversion.cpp \
+ qpedebug.cpp \
+ qpemenubar.cpp \
+ qpetoolbar.cpp \
+ backend/categories.cpp \
+ backend/stringutil.cpp \
+ backend/palmtoprecord.cpp \
+ backend/task.cpp \
+ backend/event.cpp \
+ backend/contact.cpp \
+ categorymenu.cpp \
+ categoryedit_p.cpp \
+ categoryselect.cpp \
+ categorywidget.cpp \
+ ir.cpp \
+ backend/vcc_yacc.cpp \
+ backend/vobject.cpp \
+ findwidget_p.cpp \
+ finddialog.cpp \
+ lnkproperties.cpp \
+ quuid.cpp \
+ qlibrary.cpp \
+ qlibrary_unix.cpp \
+ qprocess.cpp \
+ qprocess_unix.cpp
+OBJECTS = calendar.o \
+ global.o \
+ xmlreader.o \
+ mimetype.o \
+ menubutton.o \
+ network.o \
+ networkinterface.o \
+ proxies.o \
+ filemanager.o \
+ fontmanager.o \
+ qdawg.o \
+ datebookmonth.o \
+ fileselector.o \
+ imageedit.o \
+ resource.o \
+ qpedecoration_qws.o \
+ qcopenvelope_qws.o \
+ qpeapplication.o \
+ qpestyle.o \
+ qpedialog.o \
+ lightstyle.o \
+ config.o \
+ applnk.o \
+ sound.o \
+ tzselect.o \
+ qmath.o \
+ datebookdb.o \
+ alarmserver.o \
+ password.o \
+ process.o \
+ process_unix.o \
+ timestring.o \
+ fontdatabase.o \
+ power.o \
+ storage.o \
+ qpemessagebox.o \
+ backend/timeconversion.o \
+ qpedebug.o \
+ qpemenubar.o \
+ qpetoolbar.o \
+ backend/categories.o \
+ backend/stringutil.o \
+ backend/palmtoprecord.o \
+ backend/task.o \
+ backend/event.o \
+ backend/contact.o \
+ categorymenu.o \
+ categoryedit_p.o \
+ categoryselect.o \
+ categorywidget.o \
+ ir.o \
+ backend/vcc_yacc.o \
+ backend/vobject.o \
+ findwidget_p.o \
+ finddialog.o \
+ lnkproperties.o \
+ quuid.o \
+ qlibrary.o \
+ qlibrary_unix.o \
+ qprocess.o \
+ qprocess_unix.o \
+ passwordbase_p.o \
+ proxiesbase_p.o \
+ categoryeditbase_p.o \
+ findwidgetbase_p.o \
+ lnkpropertiesbase_p.o
+INTERFACES = passwordbase_p.ui \
+ proxiesbase_p.ui \
+ categoryeditbase_p.ui \
+ findwidgetbase_p.ui \
+ lnkpropertiesbase_p.ui
+UICDECLS = passwordbase_p.h \
+ proxiesbase_p.h \
+ categoryeditbase_p.h \
+ findwidgetbase_p.h \
+ lnkpropertiesbase_p.h
+UICIMPLS = passwordbase_p.cpp \
+ proxiesbase_p.cpp \
+ categoryeditbase_p.cpp \
+ findwidgetbase_p.cpp \
+ lnkpropertiesbase_p.cpp
+SRCMOC = moc_menubutton.cpp \
+ moc_proxies.cpp \
+ moc_datebookmonth.cpp \
+ moc_fileselector.cpp \
+ moc_imageedit.cpp \
+ moc_qpedecoration_qws.cpp \
+ moc_qpeapplication.cpp \
+ moc_qpedialog.cpp \
+ moc_tzselect.cpp \
+ moc_process.cpp \
+ moc_storage.cpp \
+ moc_qpemenubar.cpp \
+ moc_qpetoolbar.cpp \
+ backend/moc_categories.cpp \
+ moc_categorymenu.cpp \
+ moc_categoryedit_p.cpp \
+ moc_categoryselect.cpp \
+ moc_ir.cpp \
+ moc_findwidget_p.cpp \
+ moc_finddialog.cpp \
+ moc_lnkproperties.cpp \
+ moc_qlibrary_p.cpp \
+ moc_qprocess.cpp \
+ global.moc \
+ network.moc \
+ password.moc \
+ process_unix.moc \
+ timestring.moc \
+ qprocess_unix.moc \
+ moc_passwordbase_p.cpp \
+ moc_proxiesbase_p.cpp \
+ moc_categoryeditbase_p.cpp \
+ moc_findwidgetbase_p.cpp \
+ moc_lnkpropertiesbase_p.cpp
+OBJMOC = moc_menubutton.o \
+ moc_proxies.o \
+ moc_datebookmonth.o \
+ moc_fileselector.o \
+ moc_imageedit.o \
+ moc_qpedecoration_qws.o \
+ moc_qpeapplication.o \
+ moc_qpedialog.o \
+ moc_tzselect.o \
+ moc_process.o \
+ moc_storage.o \
+ moc_qpemenubar.o \
+ moc_qpetoolbar.o \
+ backend/moc_categories.o \
+ moc_categorymenu.o \
+ moc_categoryedit_p.o \
+ moc_categoryselect.o \
+ moc_ir.o \
+ moc_findwidget_p.o \
+ moc_finddialog.o \
+ moc_lnkproperties.o \
+ moc_qlibrary_p.o \
+ moc_qprocess.o \
+ moc_passwordbase_p.o \
+ moc_proxiesbase_p.o \
+ moc_categoryeditbase_p.o \
+ moc_findwidgetbase_p.o \
+ moc_lnkpropertiesbase_p.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake library.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+calendar.o: calendar.cpp \
+ calendar.h
+
+global.o: global.cpp \
+ global.moc
+
+xmlreader.o: xmlreader.cpp \
+ xmlreader.h
+
+mimetype.o: mimetype.cpp \
+ mimetype.h \
+ applnk.h \
+ resource.h \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h
+
+menubutton.o: menubutton.cpp \
+ menubutton.h
+
+network.o: network.cpp \
+ network.moc
+
+networkinterface.o: networkinterface.cpp \
+ networkinterface.h \
+ network.h \
+ config.h
+
+proxies.o: proxies.cpp \
+ proxies.h \
+ config.h \
+ proxiesbase_p.h
+
+filemanager.o: filemanager.cpp \
+ filemanager.h \
+ applnk.h
+
+fontmanager.o: fontmanager.cpp \
+ fontmanager.h
+
+qdawg.o: qdawg.cpp \
+ qdawg.h
+
+datebookmonth.o: datebookmonth.cpp \
+ config.h \
+ datebookmonth.h \
+ calendar.h \
+ timestring.h \
+ datebookdb.h \
+ resource.h \
+ qpeapplication.h \
+ qpedecoration_qws.h
+
+fileselector.o: fileselector.cpp \
+ fileselector.h \
+ filemanager.h \
+ applnk.h \
+ global.h \
+ resource.h \
+ config.h \
+ storage.h \
+ qpemenubar.h \
+ lnkproperties.h \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h \
+ categorymenu.h
+
+imageedit.o: imageedit.cpp \
+ imageedit.h
+
+resource.o: resource.cpp \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h \
+ resource.h \
+ inlinepics_p.h
+
+qpedecoration_qws.o: qpedecoration_qws.cpp \
+ qcopenvelope_qws.h \
+ qpedecoration_qws.h \
+ qpeapplication.h \
+ timestring.h \
+ resource.h \
+ global.h
+
+qcopenvelope_qws.o: qcopenvelope_qws.cpp \
+ qcopenvelope_qws.h \
+ global.h
+
+qpeapplication.o: qpeapplication.cpp \
+ qcopenvelope_qws.h \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h \
+ qpestyle.h \
+ lightstyle.h \
+ global.h \
+ resource.h \
+ config.h \
+ network.h \
+ fontmanager.h \
+ power.h \
+ alarmserver.h \
+ applnk.h
+
+qpestyle.o: qpestyle.cpp \
+ qpestyle.h \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h
+
+qpedialog.o: qpedialog.cpp \
+ qpedialog.h \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h
+
+lightstyle.o: lightstyle.cpp \
+ lightstyle.h
+
+config.o: config.cpp \
+ config.h
+
+applnk.o: applnk.cpp \
+ applnk.h
+
+sound.o: sound.cpp
+
+tzselect.o: tzselect.cpp \
+ tzselect.h \
+ resource.h \
+ global.h \
+ config.h
+
+qmath.o: qmath.c \
+ qmath.h
+
+datebookdb.o: datebookdb.cpp \
+ datebookdb.h
+
+alarmserver.o: alarmserver.cpp \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h \
+ global.h \
+ resource.h \
+ qcopenvelope_qws.h \
+ alarmserver.h
+
+password.o: password.cpp \
+ password.moc \
+ password.h \
+ config.h \
+ global.h \
+ backend/contact.h \
+ passwordbase_p.h
+
+process.o: process.cpp \
+ process.h
+
+process_unix.o: process_unix.cpp \
+ process_unix.moc \
+ process.h
+
+timestring.o: timestring.cpp \
+ timestring.moc \
+ timestring.h \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ config.h
+
+fontdatabase.o: fontdatabase.cpp \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h \
+ fontfactoryinterface.h \
+ fontdatabase.h
+
+power.o: power.cpp \
+ power.h
+
+storage.o: storage.cpp
+
+qpemessagebox.o: qpemessagebox.cpp \
+ qpemessagebox.h
+
+backend/timeconversion.o: backend/timeconversion.cpp \
+ backend/timeconversion.h
+
+qpedebug.o: qpedebug.cpp \
+ qpedebug.h
+
+qpemenubar.o: qpemenubar.cpp \
+ qpemenubar.h
+
+qpetoolbar.o: qpetoolbar.cpp \
+ qpetoolbar.h \
+ qpemenubar.h
+
+backend/categories.o: backend/categories.cpp \
+ backend/categories.h \
+ backend/qpcglobal.h \
+ backend/palmtopuidgen.h \
+ backend/stringutil.h
+
+backend/stringutil.o: backend/stringutil.cpp \
+ backend/stringutil.h \
+ backend/qpcglobal.h
+
+backend/palmtoprecord.o: backend/palmtoprecord.cpp \
+ backend/palmtoprecord.h \
+ backend/qpcglobal.h \
+ backend/palmtopuidgen.h \
+ backend/stringutil.h
+
+backend/task.o: backend/task.cpp \
+ backend/vobject_p.h \
+ backend/timeconversion.h \
+ backend/qfiledirect_p.h
+
+backend/event.o: backend/event.cpp \
+ backend/event.h \
+ backend/qfiledirect_p.h \
+ backend/vobject_p.h
+
+backend/contact.o: backend/contact.cpp \
+ backend/contact.h \
+ backend/vobject_p.h \
+ backend/qfiledirect_p.h
+
+categorymenu.o: categorymenu.cpp \
+ categorymenu.h \
+ backend/categories.h \
+ backend/qpcglobal.h \
+ backend/palmtopuidgen.h \
+ categoryselect.h
+
+categoryedit_p.o: categoryedit_p.cpp \
+ categoryedit_p.h \
+ categoryeditbase_p.h
+
+categoryselect.o: categoryselect.cpp \
+ categorywidget.h \
+ categoryselect.h
+
+categorywidget.o: categorywidget.cpp \
+ categoryedit_p.h \
+ categoryeditbase_p.h \
+ categorywidget.h
+
+ir.o: ir.cpp \
+ ir.h \
+ qcopenvelope_qws.h \
+ applnk.h
+
+backend/vcc_yacc.o: backend/vcc_yacc.cpp \
+ backend/vobject_p.h
+
+backend/vobject.o: backend/vobject.cpp \
+ backend/vobject_p.h \
+ backend/qfiledirect_p.h
+
+findwidget_p.o: findwidget_p.cpp \
+ findwidget_p.h \
+ findwidgetbase_p.h
+
+finddialog.o: finddialog.cpp \
+ finddialog.h \
+ findwidget_p.h \
+ findwidgetbase_p.h
+
+lnkproperties.o: lnkproperties.cpp \
+ lnkproperties.h \
+ lnkpropertiesbase_p.h \
+ ir.h
+
+quuid.o: quuid.cpp \
+ quuid.h
+
+qlibrary.o: qlibrary.cpp \
+ qlibrary_p.h \
+ qlibrary.h
+
+qlibrary_unix.o: qlibrary_unix.cpp \
+ qlibrary_p.h \
+ qlibrary.h
+
+qprocess.o: qprocess.cpp \
+ qprocess.h
+
+qprocess_unix.o: qprocess_unix.cpp \
+ qprocess_unix.moc \
+ qprocess.h \
+ qcleanuphandler_p.h
+
+passwordbase_p.h: passwordbase_p.ui
+ $(UIC) passwordbase_p.ui -o $(INTERFACE_DECL_PATH)/passwordbase_p.h
+
+passwordbase_p.cpp: passwordbase_p.ui
+ $(UIC) passwordbase_p.ui -i passwordbase_p.h -o passwordbase_p.cpp
+
+proxiesbase_p.h: proxiesbase_p.ui
+ $(UIC) proxiesbase_p.ui -o $(INTERFACE_DECL_PATH)/proxiesbase_p.h
+
+proxiesbase_p.cpp: proxiesbase_p.ui
+ $(UIC) proxiesbase_p.ui -i proxiesbase_p.h -o proxiesbase_p.cpp
+
+categoryeditbase_p.h: categoryeditbase_p.ui
+ $(UIC) categoryeditbase_p.ui -o $(INTERFACE_DECL_PATH)/categoryeditbase_p.h
+
+categoryeditbase_p.cpp: categoryeditbase_p.ui
+ $(UIC) categoryeditbase_p.ui -i categoryeditbase_p.h -o categoryeditbase_p.cpp
+
+findwidgetbase_p.h: findwidgetbase_p.ui
+ $(UIC) findwidgetbase_p.ui -o $(INTERFACE_DECL_PATH)/findwidgetbase_p.h
+
+findwidgetbase_p.cpp: findwidgetbase_p.ui
+ $(UIC) findwidgetbase_p.ui -i findwidgetbase_p.h -o findwidgetbase_p.cpp
+
+lnkpropertiesbase_p.h: lnkpropertiesbase_p.ui
+ $(UIC) lnkpropertiesbase_p.ui -o $(INTERFACE_DECL_PATH)/lnkpropertiesbase_p.h
+
+lnkpropertiesbase_p.cpp: lnkpropertiesbase_p.ui
+ $(UIC) lnkpropertiesbase_p.ui -i lnkpropertiesbase_p.h -o lnkpropertiesbase_p.cpp
+
+passwordbase_p.o: passwordbase_p.cpp \
+ passwordbase_p.h
+
+proxiesbase_p.o: proxiesbase_p.cpp \
+ proxiesbase_p.h
+
+categoryeditbase_p.o: categoryeditbase_p.cpp \
+ categoryeditbase_p.h
+
+findwidgetbase_p.o: findwidgetbase_p.cpp \
+ findwidgetbase_p.h
+
+lnkpropertiesbase_p.o: lnkpropertiesbase_p.cpp \
+ lnkpropertiesbase_p.h
+
+moc_menubutton.o: moc_menubutton.cpp \
+ menubutton.h
+
+moc_proxies.o: moc_proxies.cpp \
+ proxies.h \
+ config.h
+
+moc_datebookmonth.o: moc_datebookmonth.cpp \
+ datebookmonth.h \
+ calendar.h \
+ timestring.h
+
+moc_fileselector.o: moc_fileselector.cpp \
+ fileselector.h \
+ filemanager.h \
+ applnk.h
+
+moc_imageedit.o: moc_imageedit.cpp \
+ imageedit.h
+
+moc_qpedecoration_qws.o: moc_qpedecoration_qws.cpp \
+ qpedecoration_qws.h
+
+moc_qpeapplication.o: moc_qpeapplication.cpp \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ timestring.h
+
+moc_qpedialog.o: moc_qpedialog.cpp \
+ qpedialog.h
+
+moc_tzselect.o: moc_tzselect.cpp \
+ tzselect.h
+
+moc_process.o: moc_process.cpp \
+ process.h
+
+moc_storage.o: moc_storage.cpp \
+ storage.h
+
+moc_qpemenubar.o: moc_qpemenubar.cpp \
+ qpemenubar.h
+
+moc_qpetoolbar.o: moc_qpetoolbar.cpp \
+ qpetoolbar.h
+
+backend/moc_categories.o: backend/moc_categories.cpp \
+ backend/categories.h \
+ backend/qpcglobal.h \
+ backend/palmtopuidgen.h
+
+moc_categorymenu.o: moc_categorymenu.cpp \
+ categorymenu.h
+
+moc_categoryedit_p.o: moc_categoryedit_p.cpp \
+ categoryedit_p.h \
+ categoryeditbase_p.h
+
+moc_categoryselect.o: moc_categoryselect.cpp \
+ categoryselect.h
+
+moc_ir.o: moc_ir.cpp \
+ ir.h
+
+moc_findwidget_p.o: moc_findwidget_p.cpp \
+ findwidget_p.h \
+ findwidgetbase_p.h
+
+moc_finddialog.o: moc_finddialog.cpp \
+ finddialog.h
+
+moc_lnkproperties.o: moc_lnkproperties.cpp \
+ lnkproperties.h
+
+moc_qlibrary_p.o: moc_qlibrary_p.cpp \
+ qlibrary_p.h \
+ qlibrary.h
+
+moc_qprocess.o: moc_qprocess.cpp \
+ qprocess.h
+
+moc_passwordbase_p.o: global.moc \
+ global.cpp
+
+moc_proxiesbase_p.o: network.moc \
+ network.cpp
+
+moc_categoryeditbase_p.o: password.moc \
+ password.cpp \
+ password.h \
+ config.h \
+ global.h \
+ backend/contact.h \
+ passwordbase_p.h
+
+moc_findwidgetbase_p.o: process_unix.moc \
+ process_unix.cpp \
+ process.h
+
+moc_lnkpropertiesbase_p.o: timestring.moc \
+ timestring.cpp \
+ timestring.h \
+ qpeapplication.h \
+ qpedecoration_qws.h \
+ config.h
+
+moc_menubutton.cpp: menubutton.h
+ $(MOC) menubutton.h -o moc_menubutton.cpp
+
+moc_proxies.cpp: proxies.h
+ $(MOC) proxies.h -o moc_proxies.cpp
+
+moc_datebookmonth.cpp: datebookmonth.h
+ $(MOC) datebookmonth.h -o moc_datebookmonth.cpp
+
+moc_fileselector.cpp: fileselector.h
+ $(MOC) fileselector.h -o moc_fileselector.cpp
+
+moc_imageedit.cpp: imageedit.h
+ $(MOC) imageedit.h -o moc_imageedit.cpp
+
+moc_qpedecoration_qws.cpp: qpedecoration_qws.h
+ $(MOC) qpedecoration_qws.h -o moc_qpedecoration_qws.cpp
+
+moc_qpeapplication.cpp: qpeapplication.h
+ $(MOC) qpeapplication.h -o moc_qpeapplication.cpp
+
+moc_qpedialog.cpp: qpedialog.h
+ $(MOC) qpedialog.h -o moc_qpedialog.cpp
+
+moc_tzselect.cpp: tzselect.h
+ $(MOC) tzselect.h -o moc_tzselect.cpp
+
+moc_process.cpp: process.h
+ $(MOC) process.h -o moc_process.cpp
+
+moc_storage.cpp: storage.h
+ $(MOC) storage.h -o moc_storage.cpp
+
+moc_qpemenubar.cpp: qpemenubar.h
+ $(MOC) qpemenubar.h -o moc_qpemenubar.cpp
+
+moc_qpetoolbar.cpp: qpetoolbar.h
+ $(MOC) qpetoolbar.h -o moc_qpetoolbar.cpp
+
+backend/moc_categories.cpp: backend/categories.h
+ $(MOC) backend/categories.h -o backend/moc_categories.cpp
+
+moc_categorymenu.cpp: categorymenu.h
+ $(MOC) categorymenu.h -o moc_categorymenu.cpp
+
+moc_categoryedit_p.cpp: categoryedit_p.h
+ $(MOC) categoryedit_p.h -o moc_categoryedit_p.cpp
+
+moc_categoryselect.cpp: categoryselect.h
+ $(MOC) categoryselect.h -o moc_categoryselect.cpp
+
+moc_ir.cpp: ir.h
+ $(MOC) ir.h -o moc_ir.cpp
+
+moc_findwidget_p.cpp: findwidget_p.h
+ $(MOC) findwidget_p.h -o moc_findwidget_p.cpp
+
+moc_finddialog.cpp: finddialog.h
+ $(MOC) finddialog.h -o moc_finddialog.cpp
+
+moc_lnkproperties.cpp: lnkproperties.h
+ $(MOC) lnkproperties.h -o moc_lnkproperties.cpp
+
+moc_qlibrary_p.cpp: qlibrary_p.h
+ $(MOC) qlibrary_p.h -o moc_qlibrary_p.cpp
+
+moc_qprocess.cpp: qprocess.h
+ $(MOC) qprocess.h -o moc_qprocess.cpp
+
+global.moc: global.cpp
+ $(MOC) global.cpp -o global.moc
+
+network.moc: network.cpp
+ $(MOC) network.cpp -o network.moc
+
+password.moc: password.cpp
+ $(MOC) password.cpp -o password.moc
+
+process_unix.moc: process_unix.cpp
+ $(MOC) process_unix.cpp -o process_unix.moc
+
+timestring.moc: timestring.cpp
+ $(MOC) timestring.cpp -o timestring.moc
+
+qprocess_unix.moc: qprocess_unix.cpp
+ $(MOC) qprocess_unix.cpp -o qprocess_unix.moc
+
+moc_passwordbase_p.cpp: passwordbase_p.h
+ $(MOC) passwordbase_p.h -o moc_passwordbase_p.cpp
+
+moc_proxiesbase_p.cpp: proxiesbase_p.h
+ $(MOC) proxiesbase_p.h -o moc_proxiesbase_p.cpp
+
+moc_categoryeditbase_p.cpp: categoryeditbase_p.h
+ $(MOC) categoryeditbase_p.h -o moc_categoryeditbase_p.cpp
+
+moc_findwidgetbase_p.cpp: findwidgetbase_p.h
+ $(MOC) findwidgetbase_p.h -o moc_findwidgetbase_p.cpp
+
+moc_lnkpropertiesbase_p.cpp: lnkpropertiesbase_p.h
+ $(MOC) lnkpropertiesbase_p.h -o moc_lnkpropertiesbase_p.cpp
+
+
diff --git a/library/alarmserver.cpp b/library/alarmserver.cpp
new file mode 100644
index 0000000..a1a7142
--- a/dev/null
+++ b/library/alarmserver.cpp
@@ -0,0 +1,376 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qmessagebox.h>
+#include <qtextstream.h>
+
+
+#include "qpeapplication.h"
+#include "global.h"
+#include "resource.h"
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+#include "qcopenvelope_qws.h"
+#endif
+#include "alarmserver.h"
+#include <qpe/timeconversion.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+
+struct timerEventItem {
+ time_t UTCtime;
+ QCString channel, message;
+ int data;
+ bool operator==( const timerEventItem &right ) const
+ {
+ return ( UTCtime == right.UTCtime
+ && channel == right.channel
+ && message == right.message
+ && data == right.data );
+ }
+};
+
+class TimerReceiverObject : public QObject
+{
+public:
+ TimerReceiverObject() { }
+ ~TimerReceiverObject() { }
+ void resetTimer();
+ void setTimerEventItem();
+ void deleteTimer();
+protected:
+ void timerEvent( QTimerEvent *te );
+private:
+ QString atfilename;
+};
+
+TimerReceiverObject *timerEventReceiver = NULL;
+QList<timerEventItem> timerEventList;
+timerEventItem *nearestTimerEvent = NULL;
+
+
+// set the timer to go off on the next event in the list
+void setNearestTimerEvent()
+{
+ nearestTimerEvent = NULL;
+ QListIterator<timerEventItem> it( timerEventList );
+ if ( *it )
+ nearestTimerEvent = *it;
+ for ( ; *it; ++it )
+ if ( (*it)->UTCtime < nearestTimerEvent->UTCtime )
+ nearestTimerEvent = *it;
+ if (nearestTimerEvent)
+ timerEventReceiver->resetTimer();
+ else
+ timerEventReceiver->deleteTimer();
+}
+
+
+//store current state to file
+//Simple implementation. Should run on a timer.
+
+static void saveState()
+{
+ QString savefilename = Global::applicationFileName( "AlarmServer", "saveFile" );
+ if ( timerEventList.isEmpty() ) {
+ unlink( savefilename );
+ return;
+ }
+
+ QFile savefile(savefilename+".new");
+ if ( savefile.open(IO_WriteOnly) ) {
+ QDataStream ds( &savefile );
+
+ //save
+
+ QListIterator<timerEventItem> it( timerEventList );
+ for ( ; *it; ++it ) {
+ ds << it.current()->UTCtime;
+ ds << it.current()->channel;
+ ds << it.current()->message;
+ ds << it.current()->data;
+ }
+
+
+ savefile.close();
+ unlink( savefilename );
+ QDir d; d.rename(savefilename+".new",savefilename);
+
+ }
+}
+
+/*!
+ Sets up the alarm server. Restoring to previous state (session management).
+ */
+void AlarmServer::initialize()
+{
+ //read autosave file and put events in timerEventList
+
+ QString savefilename = Global::applicationFileName( "AlarmServer", "saveFile" );
+
+ QFile savefile(savefilename);
+ if ( savefile.open(IO_ReadOnly) ) {
+ QDataStream ds( &savefile );
+ while ( !ds.atEnd() ) {
+ timerEventItem *newTimerEventItem = new timerEventItem;
+ ds >> newTimerEventItem->UTCtime;
+ ds >> newTimerEventItem->channel;
+ ds >> newTimerEventItem->message;
+ ds >> newTimerEventItem->data;
+ timerEventList.append( newTimerEventItem );
+ }
+ savefile.close();
+ if (!timerEventReceiver)
+ timerEventReceiver = new TimerReceiverObject;
+ setNearestTimerEvent();
+ }
+}
+
+
+
+
+static const char* atdir = "/var/spool/at/";
+
+static bool triggerAtd( bool writeHWClock = FALSE )
+{
+ QFile trigger(QString(atdir) + "trigger");
+ if ( trigger.open(IO_WriteOnly|IO_Raw) ) {
+
+ const char* data =
+#ifdef QT_QWS_CUSTOM
+ //custom atd only writes HW Clock if we write a 'W'
+ ( writeHWClock ) ? "W\n" :
+#endif
+ data = "\n";
+ int len = strlen(data);
+ int total_written = trigger.writeBlock(data,len);
+ if ( total_written != len ) {
+ QMessageBox::critical( 0, QObject::tr( "Out of Space" ),
+ QObject::tr( "Unable to schedule alarm.\nFree some memory and try again." ) );
+ trigger.close();
+ QFile::remove( trigger.name() );
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void TimerReceiverObject::deleteTimer()
+{
+ if ( !atfilename.isEmpty() ) {
+ unlink( atfilename );
+ atfilename = QString::null;
+ triggerAtd( FALSE );
+ }
+}
+
+void TimerReceiverObject::resetTimer()
+{
+ const int maxsecs = 2147000;
+ int total_written;
+ QDateTime nearest = TimeConversion::fromUTC(nearestTimerEvent->UTCtime);
+ QDateTime now = QDateTime::currentDateTime();
+ int secs = TimeConversion::secsTo( now, nearest );
+ if ( secs > maxsecs ) {
+ // too far for millisecond timing
+ secs = maxsecs;
+ }
+
+ // System timer (needed so that we wake from deep sleep),
+ // from the Epoch in seconds.
+ //
+ int at_secs = TimeConversion::toUTC(nearest);
+ // qDebug("reset timer to %d seconds from Epoch",at_secs);
+ QString fn = atdir + QString::number(at_secs) + "."
+ + QString::number(getpid());
+ if ( fn != atfilename ) {
+ QFile atfile(fn+".new");
+ if ( atfile.open(IO_WriteOnly|IO_Raw) ) {
+ // just wake up and delete the at file
+ QString cmd = "#!/bin/sh\nrm " + fn;
+ total_written = atfile.writeBlock(cmd.latin1(),cmd.length());
+ if ( total_written != int(cmd.length()) ) {
+ QMessageBox::critical( 0, tr("Out of Space"),
+ tr("Unable to schedule alarm.\n"
+ "Please free up space and try again") );
+ atfile.close();
+ QFile::remove( atfile.name() );
+ return;
+ }
+ atfile.close();
+ unlink( atfilename );
+ QDir d; d.rename(fn+".new",fn);
+ chmod(fn.latin1(),0755);
+ atfilename = fn;
+ triggerAtd( FALSE );
+ } else {
+ qWarning("Cannot open atd file %s",fn.latin1());
+ }
+ }
+ // Qt timers (does the actual alarm)
+ // from now in milliseconds
+ //
+ qDebug("AlarmServer waiting %d seconds",secs);
+ startTimer( 1000 * secs + 500 );
+}
+
+void TimerReceiverObject::timerEvent( QTimerEvent * )
+{
+ bool needSave = FALSE;
+ killTimers();
+ if (nearestTimerEvent) {
+ if ( nearestTimerEvent->UTCtime
+ <= TimeConversion::toUTC(QDateTime::currentDateTime()) ) {
+ QCopEnvelope e( nearestTimerEvent->channel,
+ nearestTimerEvent->message );
+ e << TimeConversion::fromUTC( nearestTimerEvent->UTCtime )
+ << nearestTimerEvent->data;
+ timerEventList.remove( nearestTimerEvent );
+ needSave = TRUE;
+ }
+ setNearestTimerEvent();
+ } else {
+ resetTimer();
+ }
+ if ( needSave )
+ saveState();
+}
+
+/*!
+ \class AlarmServer alarmserver.h
+ \brief The AlarmServer class provides alarms to be scheduled.
+
+ Applications which wish to be informed when a certain time instant
+ passes use the functions of AlarmServer to request so.
+*/
+
+/*!
+ Schedules an alarm for \a when. Soon after this time,
+ \a message will be sent to \a channel, with \a data as
+ a parameter. \a message must be of the form "someMessage(int)".
+
+ \sa deleteAlarm()
+*/
+void AlarmServer::addAlarm ( QDateTime when, const QCString& channel,
+ const QCString& message, int data)
+{
+ if ( qApp->type() == QApplication::GuiServer ) {
+ bool needSave = FALSE;
+ // Here we are the server so either it has been directly called from
+ // within the server or it has been sent to us from a client via QCop
+ if (!timerEventReceiver)
+ timerEventReceiver = new TimerReceiverObject;
+
+ timerEventItem *newTimerEventItem = new timerEventItem;
+ newTimerEventItem->UTCtime = TimeConversion::toUTC( when );
+ newTimerEventItem->channel = channel;
+ newTimerEventItem->message = message;
+ newTimerEventItem->data = data;
+ // explore the case of already having the event in here...
+ QListIterator<timerEventItem> it( timerEventList );
+ for ( ; *it; ++it )
+ if ( *(*it) == *newTimerEventItem )
+ return;
+ // if we made it here, it is okay to add the item...
+ timerEventList.append( newTimerEventItem );
+ needSave = TRUE;
+ // quicker than using setNearestTimerEvent()
+ if ( nearestTimerEvent ) {
+ if (newTimerEventItem->UTCtime < nearestTimerEvent->UTCtime) {
+ nearestTimerEvent = newTimerEventItem;
+ timerEventReceiver->killTimers();
+ timerEventReceiver->resetTimer();
+ }
+ } else {
+ nearestTimerEvent = newTimerEventItem;
+ timerEventReceiver->resetTimer();
+ }
+ if ( needSave )
+ saveState();
+ } else {
+ QCopEnvelope e( "QPE/System", "addAlarm(QDateTime,QCString,QCString,int)" );
+ e << when << channel << message << data;
+ }
+}
+
+/*!
+ Deletes previously scheduled alarms which match \a when, \a channel, \a message,
+ and \a data.
+
+ Passing null values for \a when, \a channel, or \a message indicates "any".
+ Passing -1 for \a data indicates "any".
+
+ \sa deleteAlarm()
+*/
+void AlarmServer::deleteAlarm (QDateTime when, const QCString& channel, const QCString& message, int data)
+{
+ if ( qApp->type() == QApplication::GuiServer) {
+ bool needSave = FALSE;
+ if ( timerEventReceiver != NULL ) {
+ timerEventReceiver->killTimers();
+
+ // iterate over the list of events
+ QListIterator<timerEventItem> it( timerEventList );
+ time_t deleteTime = TimeConversion::toUTC( when );
+ for ( ; *it; ++it ) {
+ // if its a match, delete it
+ if ( ( (*it)->UTCtime == deleteTime || when.isNull() )
+ && ( channel.isNull() || (*it)->channel == channel )
+ && ( message.isNull() || (*it)->message == message )
+ && ( data==-1 || (*it)->data == data ) )
+ {
+ // if it's first, then we need to update the timer
+ if ( (*it) == nearestTimerEvent ) {
+ timerEventList.remove(*it);
+ setNearestTimerEvent();
+ } else {
+ timerEventList.remove(*it);
+ }
+ needSave = TRUE;
+ }
+ }
+ if ( nearestTimerEvent )
+ timerEventReceiver->resetTimer();
+ }
+ if ( needSave )
+ saveState();
+ } else {
+ QCopEnvelope e( "QPE/System", "deleteAlarm(QDateTime,QCString,QCString,int)" );
+ e << when << channel << message << data;
+ }
+}
+
+/*!
+ Writes the system clock to the hardware clock.
+*/
+void Global::writeHWClock()
+{
+ if ( !triggerAtd( TRUE ) ) {
+ // atd not running? set it ourselves
+ system("/sbin/hwclock --systohc"); // ##### UTC?
+ }
+}
diff --git a/library/alarmserver.h b/library/alarmserver.h
new file mode 100644
index 0000000..665c3ae
--- a/dev/null
+++ b/library/alarmserver.h
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef ALARM_SERVER_H
+#define ALARM_SERVER_H
+
+#include <qstring.h>
+#include <qdatetime.h>
+
+class AlarmServer
+{
+public:
+ static void addAlarm ( QDateTime when, const QCString& channel, const QCString& msg, int data=0);
+ static void deleteAlarm (QDateTime when, const QCString& channel, const QCString& msg, int data=0);
+ static void initialize();
+};
+
+#endif
+
diff --git a/library/applnk.cpp b/library/applnk.cpp
new file mode 100644
index 0000000..2af6cf4
--- a/dev/null
+++ b/library/applnk.cpp
@@ -0,0 +1,1093 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "applnk.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/categories.h>
+#include <qpe/categoryselect.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/global.h>
+#include <qpe/mimetype.h>
+#include <qpe/config.h>
+#include <qpe/storage.h>
+#include <qpe/resource.h>
+
+#include <qdict.h>
+#include <qdir.h>
+#include <qregexp.h>
+
+#ifdef Q_WS_QWS
+#include <qgfx_qws.h>
+#endif
+
+#include <stdlib.h>
+
+int AppLnk::lastId = 5000;
+
+static int smallSize = 14;
+static int bigSize = 32;
+
+static QString safeFileName(const QString& n)
+{
+ QString safename=n;
+ safename.replace(QRegExp("[^0-9A-Za-z.]"),"_");
+ safename.replace(QRegExp("^[^A-Za-z]*"),"");
+ if ( safename.isEmpty() )
+ safename = "_";
+ return safename;
+}
+
+
+class AppLnkPrivate
+{
+public:
+ QArray<int> mCat;
+};
+
+/*!
+ \class AppLnk applnk.h
+ \brief The AppLnk class represents an application available on the system.
+
+ Information about applications are stored in Qtopia as ".desktop" files.
+ When read, these files are stored as AppLnk objects.
+*/
+
+/*!
+ Sets the size used for small icons to \a small pixels.
+ Only affects AppLnk objects created after the call.
+*/
+void AppLnk::setSmallIconSize(int small)
+{
+ smallSize = small;
+}
+
+/*!
+ Returns the size used for small icons.
+*/
+int AppLnk::smallIconSize()
+{
+ return smallSize;
+}
+
+
+/*!
+ Sets the size used for large icons to \a big pixels.
+ Only affects AppLnk objects created after the call.
+*/
+void AppLnk::setBigIconSize(int big)
+{
+ bigSize = big;
+}
+
+/*!
+ Returns the size used for large icons.
+*/
+int AppLnk::bigIconSize()
+{
+ return bigSize;
+}
+
+
+/*!
+ \fn QString AppLnk::name() const
+
+ Returns the Name property.
+*/
+/*!
+ \fn QString AppLnk::exec() const
+
+ Returns the Exec property. This is the executable program associated
+ with the AppLnk.
+*/
+/*!
+ \fn QString AppLnk::rotation() const
+
+ Returns the Rotation property.
+*/
+/*!
+ \fn QString AppLnk::comment() const
+
+ Returns the Comment property.
+*/
+/*!
+ \fn QStringList AppLnk::mimeTypes() const
+
+ Returns the MimeTypes property. This is the list of MIME types
+ that the application can view or edit.
+*/
+/*!
+ \fn const QArray<int>& AppLnk::categories() const
+
+ Returns the Categories property.
+*/
+
+const QArray<int>& AppLnk::categories() const
+{
+ return d->mCat;
+}
+
+/*!
+ \fn int AppLnk::id() const
+
+ Returns the id of the AppLnk. If the AppLnk is not in an AppLnkSet,
+ this value is 0, otherwise it is a value that is unique for the
+ duration of the current process.
+*/
+
+/*!
+ \fn bool AppLnk::isValid() const
+
+ Returns whether this AppLnk is valid.
+*/
+
+/*!
+ Creates an invalid AppLnk.
+
+ \sa isValid()
+*/
+AppLnk::AppLnk()
+{
+ mId = 0;
+ d = new AppLnkPrivate();
+}
+
+/*!
+ Loads \a file as an AppLnk.
+*/
+AppLnk::AppLnk( const QString &file )
+{
+ QStringList sl;
+ d = new AppLnkPrivate();
+ if ( !file.isNull() ) {
+ Config config( file, Config::File );
+
+ if ( config.isValid() ) {
+ config.setGroup( "Desktop Entry" );
+
+ mName = config.readEntry( "Name", file );
+ mExec = config.readEntry( "Exec" );
+ mType = config.readEntry( "Type", QString::null );
+ mIconFile = config.readEntry( "Icon", QString::null );
+ mRotation = config.readEntry( "Rotation", "" );
+ mComment = config.readEntry( "Comment", QString::null );
+ mMimeTypes = config.readListEntry( "MimeType", ';' );
+ mMimeTypeIcons = config.readListEntry( "MimeTypeIcons", ';' );
+ mLinkFile = file;
+ mFile = config.readEntry("File", QString::null);
+ sl = config.readListEntry("Categories", ';');
+ }
+ }
+ // let's try our darndest to create categories...
+ Categories cat( 0 );
+ cat.load( categoryFileName() );
+ d->mCat.resize( sl.count() );
+ int i;
+ QStringList::Iterator it;
+ for ( i = 0, it = sl.begin(); it != sl.end();
+ ++it, i++ ) {
+
+ bool number;
+ int id = (*it).toInt( &number );
+ if ( !number ) {
+ // convert from old school...
+ id = cat.id( "Document Viewer", *it );
+ if ( id == 0 )
+ id = cat.addCategory( "Document Viewer", *it );
+ }
+ d->mCat[i] = id;
+ }
+ mId = 0;
+}
+
+/*!
+ Returns a small pixmap associated with the application.
+*/
+const QPixmap& AppLnk::pixmap() const
+{
+ if ( mPixmap.isNull() ) {
+ AppLnk* that = (AppLnk*)this;
+ if ( mIconFile.isEmpty() ) {
+ MimeType mt(type());
+ that->mPixmap = mt.pixmap();
+ if ( that->mPixmap.isNull() )
+ that->mPixmap = Resource::loadPixmap("UnknownDocument-14");
+ return that->mPixmap;
+ }
+ QImage unscaledIcon = Resource::loadImage( that->mIconFile );
+ that->mPixmap.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
+ that->mBigPixmap.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
+ return that->mPixmap;
+ }
+ return mPixmap;
+}
+
+/*!
+ Returns a large pixmap associated with the application.
+*/
+const QPixmap& AppLnk::bigPixmap() const
+{
+ if ( mBigPixmap.isNull() ) {
+ AppLnk* that = (AppLnk*)this;
+ if ( mIconFile.isEmpty() ) {
+ MimeType mt(type());
+ that->mBigPixmap = mt.bigPixmap();
+ if ( that->mBigPixmap.isNull() )
+ that->mBigPixmap = Resource::loadPixmap("UnknownDocument");
+ return that->mBigPixmap;
+ }
+ QImage unscaledIcon = Resource::loadImage( that->mIconFile );
+ that->mPixmap.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
+ that->mBigPixmap.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
+ return that->mBigPixmap;
+ }
+ return mBigPixmap;
+}
+
+/*!
+ Returns the type of the application.
+*/
+QString AppLnk::type() const
+{
+ if ( mType.isNull() ) {
+ AppLnk* that = (AppLnk*)this;
+ MimeType mt(file());
+ that->mType = mt.id();
+ return that->mType;
+ }
+ return mType;
+}
+
+/*!
+ Returns the file associated with the AppLnk.
+
+ \sa exec()
+*/
+QString AppLnk::file() const
+{
+ if ( mFile.isNull() ) {
+ AppLnk* that = (AppLnk*)this;
+ if ( !mLinkFile.isEmpty() ) {
+ that->mFile =
+ mLinkFile.right(8)==".desktop" // 8 = strlen(".desktop")
+ ? mLinkFile.left(mLinkFile.length()-8) : mLinkFile;
+ } else if ( mType.contains('/') ) {
+ that->mFile =
+ QString(getenv("HOME"))+"/Documents/"+mType+"/"+safeFileName(that->mName);
+ if ( QFile::exists(that->mFile) || QFile::exists(that->mFile+".desktop") ) {
+ int n=1;
+ QString nn;
+ while (QFile::exists((nn=(that->mFile+"_"+QString::number(n))))
+ || QFile::exists(nn+".desktop"))
+ n++;
+ that->mFile = nn;
+ }
+ that->mLinkFile = that->mFile+".desktop";
+ }
+ return that->mFile;
+ }
+ return mFile;
+}
+
+/*!
+ Returns the desktop file coresponding to this AppLnk.
+
+ \sa file(), exec()
+*/
+QString AppLnk::linkFile() const
+{
+ if ( mLinkFile.isNull() ) {
+ AppLnk* that = (AppLnk*)this;
+ if ( type().contains('/') ) {
+ StorageInfo storage;
+ const FileSystem *fs = storage.fileSystemOf( that->mFile );
+// qDebug("creating lnkFile for %s", mFile.latin1() );
+// if ( fs )
+// qDebug("fs is %s", fs->path().latin1() );
+ if ( fs && fs->isRemovable() ) {
+// qDebug("isRemovable");
+ that->mLinkFile = fs->path();
+ } else
+ that->mLinkFile = getenv( "HOME" );
+ that->mLinkFile += "/Documents/"+type()+"/"+safeFileName(that->mName);
+ if ( QFile::exists(that->mLinkFile+".desktop") ) {
+ int n=1;
+ QString nn;
+ while (QFile::exists((nn=that->mLinkFile+"_"+QString::number(n))+".desktop"))
+ n++;
+ that->mLinkFile = nn;
+ }
+ that->mLinkFile += ".desktop";
+// qDebug("file is %s", mLinkFile.latin1() );
+ }
+ return that->mLinkFile;
+ }
+ return mLinkFile;
+}
+
+/*!
+ Copies \a copy.
+*/
+AppLnk::AppLnk( const AppLnk &copy )
+{
+ mName = copy.mName;
+ mPixmap = copy.mPixmap;
+ mBigPixmap = copy.mBigPixmap;
+ mExec = copy.mExec;
+ mType = copy.mType;
+ mRotation = copy.mRotation;
+ mComment = copy.mComment;
+ mFile = copy.mFile;
+ mLinkFile = copy.mLinkFile;
+ mIconFile = copy.mIconFile;
+ mMimeTypes = copy.mMimeTypes;
+ mMimeTypeIcons = copy.mMimeTypeIcons;
+ mId = 0;
+ d = new AppLnkPrivate();
+ d->mCat = copy.d->mCat;
+}
+
+/*!
+ Destroys the AppLnk. Note that if the AppLnk is current a member of
+ an AppLnkSet, this will produce a run-time warning.
+
+ \sa AppLnkSet::add(), AppLnkSet::remove()
+*/
+AppLnk::~AppLnk()
+{
+ if ( mId )
+ qWarning("Deleting AppLnk that is in an AppLnkSet");
+ if ( d )
+ delete d;
+}
+
+/*!
+ Executes the application associated with this AppLnk.
+*/
+void AppLnk::execute() const
+{
+ execute(QStringList());
+}
+
+/*!
+ Executes the application associated with this AppLnk, with
+ \a args as arguments.
+*/
+void AppLnk::execute(const QStringList& args) const
+{
+#ifdef Q_WS_QWS
+ if ( !mRotation.isEmpty() ) {
+ // ######## this will only work in the server
+ int rot = QPEApplication::defaultRotation();
+ rot = (rot+mRotation.toInt())%360;
+ QCString old = getenv("QWS_DISPLAY");
+ setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(rot), 1);
+ invoke(args);
+ setenv("QWS_DISPLAY", old.data(), 1);
+ } else
+#endif
+ invoke(args);
+}
+
+/*!
+ Invokes the application associated with this AppLnk, with
+ \a args as arguments. Rotation is not taken into account by
+ this function, you should not call it directly.
+
+ \sa execute()
+*/
+void AppLnk::invoke(const QStringList& args) const
+{
+ Global::execute( exec(), args[0] );
+}
+
+/*!
+ Sets the Exec property to \a exec.
+
+ \sa exec()
+*/
+void AppLnk::setExec( const QString& exec )
+{
+ mExec = exec;
+}
+
+/*!
+ Sets the Name property to \a docname.
+
+ \sa name()
+*/
+void AppLnk::setName( const QString& docname )
+{
+ mName = docname;
+}
+
+/*!
+ Sets the File property to \a filename.
+
+ \sa file()
+*/
+void AppLnk::setFile( const QString& filename )
+{
+ mFile = filename;
+}
+
+/*!
+ Sets the LinkFile property to \a filename.
+
+ \sa linkFile()
+*/
+void AppLnk::setLinkFile( const QString& filename )
+{
+ mLinkFile = filename;
+}
+
+/*!
+ Sets the Comment property to \a comment.
+
+ \sa comment()
+*/
+void AppLnk::setComment( const QString& comment )
+{
+ mComment = comment;
+}
+
+/*!
+ Sets the Type property to \a type.
+
+ \sa type()
+*/
+void AppLnk::setType( const QString& type )
+{
+ mType = type;
+}
+
+/*!
+ Sets the Icon property to \a iconname.
+
+ \sa pixmap(), bigPixmap()
+*/
+void AppLnk::setIcon( const QString& iconname )
+{
+ mIconFile = iconname;
+ QImage unscaledIcon = Resource::loadImage( mIconFile );
+ mPixmap.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
+ mBigPixmap.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
+}
+
+/*!
+ Sets the Categories property to \a c.
+
+ \sa categories()
+*/
+void AppLnk::setCategories( const QArray<int>& c )
+{
+ d->mCat = c;
+}
+
+/*!
+ \fn QStringList AppLnk::mimeTypeIcons() const
+
+ Returns the MimeTypeIcons property of the AppLnk.
+*/
+
+/*!
+ Attempts to ensure that the link file for this AppLnk exists, including
+ creating any required directories. Returns TRUE if successful.
+*/
+bool AppLnk::ensureLinkExists() const
+{
+ QString lf = linkFile();
+ if ( !QFile::exists(lf) ) {
+ // May need to create directories
+ QFileInfo fi(lf);
+ if ( system(("mkdir -p "+fi.dirPath(TRUE))) )
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*!
+ Commits the AppLnk to disk. Returns whether the operation succeeded.
+
+ The "linkChanged(QString)" message is sent to the
+ "QPE/System" QCop channel as a result.
+*/
+bool AppLnk::writeLink() const
+{
+ // Only re-writes settable parts
+ QString lf = linkFile();
+ if ( !ensureLinkExists() )
+ return FALSE;
+ Config config( lf, Config::File );
+ config.setGroup("Desktop Entry");
+ config.writeEntry("Name",mName);
+ if ( !mIconFile.isNull() ) config.writeEntry("Icon",mIconFile);
+ config.writeEntry("Type",type());
+ if ( !mComment.isNull() ) config.writeEntry("Comment",mComment);
+ config.writeEntry("File",file());
+ // write out the id...
+ int i;
+ QStringList sl;
+ for ( i = 0; i < int(d->mCat.count()); i++ ) {
+ sl.append( QString::number( d->mCat[i] ) );
+ }
+ config.writeEntry( "Categories", sl, ';' );
+
+ QCopEnvelope e("QPE/System", "linkChanged(QString)");
+ e << lf;
+
+ return TRUE;
+}
+
+/*!
+ Sets the property named \a key to \a value.
+*/
+void AppLnk::setProperty(const QString& key, const QString& value)
+{
+ if ( ensureLinkExists() ) {
+ Config cfg(linkFile(), Config::File);
+ cfg.writeEntry(key,value);
+ }
+}
+
+/*!
+ Returns the property named \a key.
+*/
+QString AppLnk::property(const QString& key) const
+{
+ QString lf = linkFile();
+ if ( !QFile::exists(lf) )
+ return QString::null;
+ Config cfg(lf, Config::File);
+ return cfg.readEntry(key);
+}
+
+
+/*!
+ Deletes both the linkFile() and file() associated with this AppLnk.
+*/
+void AppLnk::removeFiles()
+{
+ bool valid = isValid();
+ if ( !valid || QFile::remove(linkFile()) ) {
+ if ( QFile::remove(file()) ) {
+ QCopEnvelope e("QPE/System", "linkChanged(QString)");
+ e << linkFile();
+ } else if ( valid ) {
+ // restore link
+ writeLink();
+ }
+ }
+}
+
+/*!
+ Delete the linkFile(), leaving any file() untouched.
+*/
+void AppLnk::removeLinkFile()
+{
+ if ( isValid() && QFile::remove(linkFile()) ) {
+ QCopEnvelope e("QPE/System", "linkChanged(QString)");
+ e << linkFile();
+ }
+}
+
+class AppLnkSetPrivate {
+public:
+ AppLnkSetPrivate()
+ {
+ typPix.setAutoDelete(TRUE);
+ typPixBig.setAutoDelete(TRUE);
+ typName.setAutoDelete(TRUE);
+ }
+
+ QDict<QPixmap> typPix;
+ QDict<QPixmap> typPixBig;
+ QDict<QString> typName;
+};
+
+/*!
+ \class AppLnkSet applnk.h
+ \brief The AppLnkSet class is a set of AppLnk objects.
+*/
+
+/*!
+ \fn QStringList AppLnkSet::types() const
+
+ Returns the list of types in the set.
+
+ \sa AppLnk::type(), typeName(), typePixmap(), typeBigPixmap()
+*/
+
+/*!
+ \fn const QList<AppLnk>& AppLnkSet::children() const
+
+ Returns the members of the set.
+*/
+
+/*!
+ Constructs an empty AppLnkSet.
+*/
+AppLnkSet::AppLnkSet() :
+ d(new AppLnkSetPrivate)
+{
+}
+
+/*!
+ Constructs an AppLnkSet that contains AppLnk objects representing
+ all the files in a \a directory (recursively).
+
+ The directories may contain ".directory" files which overrides
+ any AppLnk::type() value of AppLnk objects found in the directory.
+ This allows simple localization of application types.
+*/
+AppLnkSet::AppLnkSet( const QString &directory ) :
+ d(new AppLnkSetPrivate)
+{
+ QDir dir( directory );
+ mFile = directory;
+ findChildren(directory,QString::null,QString::null);
+}
+
+/*!
+ Detaches all AppLnk objects from the set. The set become empty
+ and the call becomes responsible for deleting the AppLnk objects.
+*/
+void AppLnkSet::detachChildren()
+{
+ QListIterator<AppLnk> it( mApps );
+ for ( ; it.current(); ) {
+ AppLnk* a = *it;
+ ++it;
+ a->mId = 0;
+ }
+ mApps.clear();
+}
+
+/*!
+ Destroys the set, deleting all AppLnk objects it contains.
+
+ \sa detachChildren()
+*/
+AppLnkSet::~AppLnkSet()
+{
+ QListIterator<AppLnk> it( mApps );
+ for ( ; it.current(); ) {
+ AppLnk* a = *it;
+ ++it;
+ a->mId = 0;
+ delete a;
+ }
+ delete d;
+}
+
+void AppLnkSet::findChildren(const QString &dr, const QString& typ, const QString& typName, int depth)
+{
+ depth++;
+ if ( depth > 10 )
+ return;
+
+ QDir dir( dr );
+ QString typNameLocal = typName;
+
+ if ( dir.exists( ".directory" ) ) {
+ Config config( dr + "/.directory", Config::File );
+ config.setGroup( "Desktop Entry" );
+ typNameLocal = config.readEntry( "Name", typNameLocal );
+ if ( !typ.isEmpty() ) {
+ QString iconFile = config.readEntry( "Icon", "AppsIcon" );
+ QImage unscaledIcon = Resource::loadImage( iconFile );
+ QPixmap pm, bpm;
+ pm.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
+ bpm.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
+ d->typPix.insert(typ, new QPixmap(pm));
+ d->typPixBig.insert(typ, new QPixmap(bpm));
+ d->typName.insert(typ, new QString(typNameLocal));
+ }
+ }
+
+ const QFileInfoList *list = dir.entryInfoList();
+ if ( list ) {
+ QFileInfo* fi;
+ bool cadded=FALSE;
+ for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) {
+ QString bn = fi->fileName();
+ if ( bn[0] != '.' && bn != "CVS" ) {
+ if ( fi->isDir() ) {
+ QString c = typ.isNull() ? bn : typ+"/"+bn;
+ QString d = typNameLocal.isNull() ? bn : typNameLocal+"/"+bn;
+ findChildren(fi->filePath(), c, d, depth );
+ } else {
+ if ( fi->extension(FALSE) == "desktop" ) {
+ AppLnk* app = new AppLnk( fi->filePath() );
+#ifdef QT_NO_QWS_MULTIPROCESS
+ if ( !Global::isBuiltinCommand( app->exec() ) )
+ delete app;
+ else
+#endif
+ {
+ if ( !typ.isEmpty() ) {
+ if ( !cadded ) {
+ typs.append(typ);
+ cadded = TRUE;
+ }
+ app->setType(typ);
+ }
+ add(app);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/*!
+ Adds \a f to the set. The set takes over responsibility for deleting \a f.
+
+ \sa remove()
+*/
+void AppLnkSet::add( AppLnk *f )
+{
+ if ( f->mId == 0 ) {
+ AppLnk::lastId++;
+ f->mId = AppLnk::lastId;
+ mApps.append( f );
+ } else {
+ qWarning("Attempt to add an AppLnk twice");
+ }
+}
+
+/*!
+ Removes \a f to the set, returning whether \a f was in the set.
+ The caller becomes responsible for deleting \a f.
+
+ \sa add()
+*/
+bool AppLnkSet::remove( AppLnk *f )
+{
+ if ( mApps.remove( f ) ) {
+ f->mId = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/*!
+ Returns the localized name for type \a t.
+*/
+QString AppLnkSet::typeName( const QString& t ) const
+{
+ QString *st = d->typName.find(t);
+ return st ? *st : QString::null;
+}
+
+/*!
+ Returns the small pixmap associated with type \a t.
+*/
+QPixmap AppLnkSet::typePixmap( const QString& t ) const
+{
+ QPixmap *pm = d->typPix.find(t);
+ return pm ? *pm : QPixmap();
+}
+
+/*!
+ Returns the large pixmap associated with type \a t.
+*/
+QPixmap AppLnkSet::typeBigPixmap( const QString& t ) const
+{
+ QPixmap *pm = d->typPixBig.find(t);
+ return pm ? *pm : QPixmap();
+}
+
+/*!
+ Returns the AppLnk with the given \a id.
+*/
+const AppLnk *AppLnkSet::find( int id ) const
+{
+ QListIterator<AppLnk> it( children() );
+
+ for ( ; it.current(); ++it ) {
+ const AppLnk *app = it.current();
+ if ( app->id() == id )
+ return app;
+ }
+
+ return 0;
+}
+
+/*!
+ Returns the AppLnk with the given \a exec attribute.
+*/
+const AppLnk *AppLnkSet::findExec( const QString& exec ) const
+{
+ QListIterator<AppLnk> it( children() );
+
+ for ( ; it.current(); ++it ) {
+ const AppLnk *app = it.current();
+ if ( app->exec() == exec )
+ return app;
+ }
+
+ return 0;
+}
+
+/*!
+ \class DocLnkSet applnk.h
+ \brief The DocLnkSet class is a set of DocLnk objects.
+*/
+
+/*!
+ \fn const QList<DocLnk>& DocLnkSet::children() const
+
+ Returns the members of the set.
+*/
+
+/*!
+ Constructs an empty DocLnkSet.
+
+ \sa appendFrom()
+*/
+DocLnkSet::DocLnkSet()
+{
+}
+
+/*!
+ Constructs an DocLnkSet that contains DocLnk objects representing
+ all the files in a \a directory (recursively).
+
+ If \a mimefilter is not null,
+ only documents with a MIME type matching \a mimefilter are selected.
+ The value may contain multiple wild-card patterns separated by ";",
+ such as "*o/mpeg;audio/x-wav".
+*/
+DocLnkSet::DocLnkSet( const QString &directory, const QString& mimefilter ) :
+ AppLnkSet()
+{
+ QDir dir( directory );
+ mFile = dir.dirName();
+ QDict<void> reference;
+
+ QStringList subFilter = QStringList::split(";", mimefilter);
+ QValueList<QRegExp> mimeFilters;
+ for( QStringList::Iterator it = subFilter.begin(); it != subFilter.end(); ++ it )
+ mimeFilters.append( QRegExp(*it, FALSE, TRUE) );
+
+ findChildren(directory, mimeFilters, reference);
+
+ const QList<DocLnk> &list = children();
+ for ( QListIterator<DocLnk> it( list ); it.current(); ++it ) {
+ reference.remove( (*it)->file() );
+ }
+
+ for ( QDictIterator<void> dit(reference); dit.current(); ++dit ) {
+ if ( dit.current() == (void*)2 ) {
+ // Unreferenced, make an unwritten link
+ DocLnk* dl = new DocLnk;
+ QFileInfo fi( dit.currentKey() );
+ dl->setFile(fi.filePath());
+ dl->setName(fi.baseName());
+ // #### default to current path?
+ // dl->setCategories( ... );
+ bool match = mimefilter.isNull();
+ if ( !match )
+ for( QValueList<QRegExp>::Iterator it = mimeFilters.begin(); it != mimeFilters.end() && !match; ++ it )
+ if ( (*it).match(dl->type()) >= 0 )
+ match = TRUE;
+ if ( match /* && dl->type() != "application/octet-stream" */
+ && !!dl->exec() )
+ add(dl);
+ else
+ delete dl;
+ }
+ }
+}
+
+// other becomes empty
+/*!
+ Transfers all DocLnk objects from \a other to this set. \a other becomes
+ empty.
+*/
+void DocLnkSet::appendFrom( DocLnkSet& other )
+{
+ if ( &other == this )
+ return;
+ QListIterator<AppLnk> it( other.mApps );
+ for ( ; it.current(); ) {
+ mApps.append(*it);
+ ++it;
+ }
+ other.mApps.clear();
+}
+
+void DocLnkSet::findChildren(const QString &dr, const QValueList<QRegExp> &mimeFilters, QDict<void> &reference, int depth)
+{
+ depth++;
+ if ( depth > 10 )
+ return;
+
+ QDir dir( dr );
+
+ const QFileInfoList *list = dir.entryInfoList();
+ if ( list ) {
+ QFileInfo* fi;
+ for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) {
+ QString bn = fi->fileName();
+ if ( bn[0] != '.' && bn != "CVS" ) {
+ if ( fi->isDir() ) {
+ findChildren(fi->filePath(), mimeFilters, reference, depth);
+ } else {
+ if ( fi->extension(FALSE) == "desktop" ) {
+ DocLnk* dl = new DocLnk( fi->filePath() );
+ QFileInfo fi2(dl->file());
+ bool match = FALSE;
+ if ( !fi2.exists() ) {
+ dir.remove( dl->file() );
+ }
+ if ( mimeFilters.count() == 0 ) {
+ add( dl );
+ match = TRUE;
+ } else {
+ for( QValueList<QRegExp>::ConstIterator it = mimeFilters.begin(); it != mimeFilters.end(); ++ it ) {
+ if ( (*it).match(dl->type()) >= 0 ) {
+ add(dl);
+ match = TRUE;
+ }
+ }
+ }
+ if ( !match )
+ delete dl;
+ } else {
+ if ( !reference.find(fi->fileName()) )
+ reference.insert(fi->filePath(), (void*)2);
+ }
+ }
+ }
+ }
+ }
+}
+
+/*!
+ \class DocLnk applnk.h
+ \brief The DocLnk class represents loaded document references.
+*/
+
+/*!
+ \fn DocLnk::DocLnk( const DocLnk &o )
+
+ Copies \a o.
+*/
+
+/*!
+ Constructs a DocLnk from a valid .desktop \a file or a new .desktop
+ \a file for other files.
+*/
+DocLnk::DocLnk( const QString &file ) :
+ AppLnk(file)
+{
+ init(file);
+}
+
+/*!
+ Constructs a DocLnk from a valid .desktop \a file or a new .desktop
+ \a file for other files. If \a may_be_desktopfile is TRUE, then \a file
+ is first attempted to be read as a .desktop file.
+*/
+DocLnk::DocLnk( const QString &file, bool may_be_desktopfile ) :
+ AppLnk(may_be_desktopfile ? file : QString::null)
+{
+ init(file);
+}
+
+void DocLnk::init(const QString &file)
+{
+ if ( isValid() ) {
+#ifndef FORCED_DIR_STRUCTURE_WAY
+ if ( mType.isNull() )
+ // try to infer it
+#endif
+ {
+ int s0 = file.findRev('/');
+ if ( s0 > 0 ) {
+ int s1 = file.findRev('/',s0-1);
+ if ( s1 > 0 ) {
+ int s2 = file.findRev('/',s1-1);
+ if ( s2 > 0 ) {
+ mType = file.mid(s2+1,s0-s2-1);
+ }
+ }
+ }
+ }
+ } else if ( QFile::exists(file) ) {
+ QString n = file;
+ n.replace(QRegExp("\\..*"),"");
+ n.replace(QRegExp(".*/"),"");
+ setName( n );
+ setFile( file );
+ }
+ MimeType mt(mType);
+ if( mt.application() )
+ mExec = mt.application()->exec();
+}
+
+/*!
+ Constructs an invalid DocLnk.
+*/
+DocLnk::DocLnk()
+{
+}
+
+/*!
+ Destroys the DocLnk. As with AppLnk objects, a run-time error
+ occurs if the DocLnk is a member of a DocLnkSet (or AppLnkSet).
+*/
+DocLnk::~DocLnk()
+{
+}
+
+/*!
+ \reimp
+*/
+QString DocLnk::exec() const
+{
+ MimeType mt(type());
+ const AppLnk* app = mt.application();
+ if ( app )
+ return app->exec();
+ else
+ return QString::null;
+}
+
+/*!
+ \reimp
+*/
+void DocLnk::invoke(const QStringList& args) const
+{
+ MimeType mt(type());
+ const AppLnk* app = mt.application();
+ if ( app ) {
+ QStringList a = args;
+ if ( QFile::exists( linkFile() ) )
+ a.append(linkFile());
+ else
+ a.append(file());
+ app->execute(a);
+ }
+}
+
diff --git a/library/applnk.h b/library/applnk.h
new file mode 100644
index 0000000..c6f92a3
--- a/dev/null
+++ b/library/applnk.h
@@ -0,0 +1,169 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __APPLNK_H__
+#define __APPLNK_H__
+
+#include <qobject.h>
+#include <qiconset.h>
+#include <qlist.h>
+#include <qdict.h>
+#include <qstringlist.h>
+
+class AppLnkSetPrivate;
+class AppLnkPrivate;
+
+class AppLnk
+{
+public:
+ AppLnk();
+ AppLnk( const QString &file );
+ AppLnk( const AppLnk &copy ); // copy constructor
+ virtual ~AppLnk();
+
+ bool isValid() const { return !mLinkFile.isNull(); }
+
+ static void setSmallIconSize(int);
+ static void setBigIconSize(int);
+ static int smallIconSize();
+ static int bigIconSize();
+
+ QString name() const { return mName; }
+ const QPixmap& pixmap() const;
+ const QPixmap& bigPixmap() const;
+ virtual QString exec() const { return mExec; }
+ QString type() const;
+ QString rotation() const { return mRotation; }
+ QString comment() const { return mComment; }
+ QString file() const;
+ QString linkFile() const;
+ QStringList mimeTypes() const { return mMimeTypes; }
+ QStringList mimeTypeIcons() const { return mMimeTypeIcons; }
+ const QArray<int> &categories() const;
+ int id() const { return mId; }
+
+ void execute() const;
+ void execute(const QStringList& args) const;
+ void removeFiles();
+ void removeLinkFile();
+
+ void setName( const QString& docname );
+ void setExec( const QString& exec );
+ void setFile( const QString& filename );
+ void setLinkFile( const QString& filename );
+ void setComment( const QString& comment );
+ void setType( const QString& mimetype );
+ void setIcon( const QString& iconname );
+ void setCategories( const QArray<int> &v );
+ bool writeLink() const;
+
+ void setProperty(const QString& key, const QString& value);
+ QString property(const QString& key) const;
+
+protected:
+ QString mName;
+ QPixmap mPixmap;
+ QPixmap mBigPixmap;
+ QString mExec;
+ QString mType;
+ QString mRotation;
+ QString mComment;
+ QString mFile;
+ QString mLinkFile;
+ QString mIconFile;
+ QStringList mMimeTypes;
+ QStringList mMimeTypeIcons;
+ int mId;
+ static int lastId;
+ AppLnkPrivate *d;
+ friend class AppLnkSet;
+
+ virtual void invoke(const QStringList& args) const;
+ bool ensureLinkExists() const;
+};
+
+class DocLnk : public AppLnk
+{
+public:
+ DocLnk();
+ DocLnk( const DocLnk &o ) : AppLnk(o) { }
+ DocLnk( const QString &file );
+ DocLnk( const QString &file, bool may_be_desktopfile );
+ virtual ~DocLnk();
+
+ QString exec() const;
+
+protected:
+ void invoke(const QStringList& args) const;
+
+private:
+ void init(const QString &file);
+};
+
+class AppLnkSet
+{
+public:
+ AppLnkSet();
+ AppLnkSet( const QString &dir );
+ ~AppLnkSet();
+
+ const AppLnk *find( int id ) const;
+ const AppLnk *findExec( const QString& execname ) const;
+
+ QStringList types() const { return typs; }
+ QString typeName( const QString& ) const;
+ QPixmap typePixmap( const QString& ) const;
+ QPixmap typeBigPixmap( const QString& ) const;
+
+ void add(AppLnk*);
+ bool remove(AppLnk*);
+
+ const QList<AppLnk> &children() const { return mApps; }
+ void detachChildren();
+
+protected:
+ friend class AppLnk;
+ QList<AppLnk> mApps;
+ QString mFile;
+ QStringList typs;
+ AppLnkSetPrivate *d;
+
+private:
+ AppLnkSet( const AppLnkSet & ); // no copying!
+ void findChildren(const QString &, const QString& t, const QString& lt, int depth = 0);
+};
+
+class DocLnkSet : public AppLnkSet
+{
+public:
+ DocLnkSet();
+ DocLnkSet( const QString &dir, const QString &mimefilter=QString::null );
+
+ const QList<DocLnk> &children() const { return (const QList<DocLnk> &)mApps; }
+
+ void appendFrom( DocLnkSet& other );
+
+private:
+ DocLnkSet( const DocLnkSet & ); // no copying!
+ void findChildren(const QString &dr, const QValueList<QRegExp> &mimeFilters, QDict<void> &reference, int depth=0);
+};
+
+
+#endif // __APPLNK_H__
+
diff --git a/library/backend/.cvsignore b/library/backend/.cvsignore
new file mode 100644
index 0000000..e047b1f
--- a/dev/null
+++ b/library/backend/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+*.moc
diff --git a/library/backend/categories.cpp b/library/backend/categories.cpp
new file mode 100644
index 0000000..91331db
--- a/dev/null
+++ b/library/backend/categories.cpp
@@ -0,0 +1,701 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included
+** in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+** PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "categories.h"
+#include <qfile.h>
+#include <qcstring.h>
+#include <qtextstream.h>
+#include "stringutil.h"
+
+using namespace Qtopia;
+
+/***********************************************************
+ *
+ * CategoryGroup
+ *
+ **********************************************************/
+
+#ifdef PALMTOPCENTER
+UidGen CategoryGroup::sUidGen( UidGen::PalmtopCenter );
+#else
+UidGen CategoryGroup::sUidGen( UidGen::Qtopia );
+#endif
+
+int CategoryGroup::add( const QString &label )
+{
+ if ( label == QObject::tr("All") || label == QObject::tr("Unfiled") )
+ return 0;
+
+ QMap<QString,int>::Iterator findIt = mLabelIdMap.find( label );
+ if ( findIt != mLabelIdMap.end() )
+ return 0;
+ int newUid = uidGen().generate();
+ insert( newUid, label );
+ return newUid;
+}
+
+void CategoryGroup::insert( int uid, const QString &label )
+{
+ uidGen().store( uid );
+ mIdLabelMap[uid] = label;
+ mLabelIdMap[label] = uid;
+}
+
+bool CategoryGroup::add( int uid, const QString &label )
+{
+ if ( label == QObject::tr("All") || label == QObject::tr("Unfiled") )
+ return FALSE;
+
+ QMap<QString,int>::ConstIterator labelIt = mLabelIdMap.find( label );
+ if ( labelIt != mLabelIdMap.end() )
+ return FALSE;
+ QMap<int,QString>::ConstIterator idIt = mIdLabelMap.find( uid );
+ if ( idIt != mIdLabelMap.end() )
+ return FALSE;
+ insert( uid, label );
+ return TRUE;
+}
+
+bool CategoryGroup::remove( const QString &label )
+{
+ QMap<QString,int>::Iterator findIt = mLabelIdMap.find( label );
+ if ( findIt == mLabelIdMap.end() )
+ return FALSE;
+
+ mIdLabelMap.remove( *findIt );
+ mLabelIdMap.remove( findIt );
+
+ return TRUE;
+}
+
+bool CategoryGroup::remove( int uid )
+{
+ QMap<int,QString>::Iterator idIt = mIdLabelMap.find( uid );
+ if ( idIt == mIdLabelMap.end() )
+ return FALSE;
+
+ mLabelIdMap.remove( *idIt );
+ mIdLabelMap.remove( idIt );
+
+ return TRUE;
+}
+
+bool CategoryGroup::rename( int uid, const QString &newLabel )
+{
+ if ( newLabel == QObject::tr("All") || newLabel == QObject::tr("Unfiled") )
+ return FALSE;
+
+ QMap<int, QString>::Iterator idIt = mIdLabelMap.find( uid );
+ if ( idIt == mIdLabelMap.end() )
+ return FALSE;
+
+ mLabelIdMap.remove( *idIt );
+ mLabelIdMap[newLabel] = uid;
+ *idIt = newLabel;
+
+ return TRUE;
+}
+
+bool CategoryGroup::rename( const QString &oldLabel, const QString &newLabel )
+{
+ return rename( id(oldLabel), newLabel );
+}
+
+bool CategoryGroup::contains(int uid) const
+{
+ return ( mIdLabelMap.find( uid ) != mIdLabelMap.end() );
+}
+
+bool CategoryGroup::contains(const QString &label) const
+{
+ return ( mLabelIdMap.find( label ) != mLabelIdMap.end() );
+}
+
+/** Returns label associated with the uid or QString::null if
+ * not found
+ */
+const QString &CategoryGroup::label(int uid) const
+{
+ QMap<int,QString>::ConstIterator idIt = mIdLabelMap.find( uid );
+ if ( idIt == mIdLabelMap.end() )
+ return QString::null;
+ return *idIt;
+}
+
+/** Returns the uid associated with label or 0 if not found */
+int CategoryGroup::id(const QString &label) const
+{
+ QMap<QString,int>::ConstIterator labelIt = mLabelIdMap.find( label );
+ if ( labelIt == mLabelIdMap.end() )
+ return 0;
+ return *labelIt;
+}
+
+QStringList CategoryGroup::labels() const
+{
+ QStringList labels;
+ for ( QMap<int, QString>::ConstIterator it = mIdLabelMap.begin();
+ it != mIdLabelMap.end(); ++it )
+ labels += *it;
+ // ### I don't think this is the place for this...
+// labels.sort();
+ return labels;
+}
+
+QStringList CategoryGroup::labels(const QArray<int> &catids ) const
+{
+ QStringList labels;
+ if ( catids.count() == 0 )
+ return labels;
+ for ( QMap<int, QString>::ConstIterator it = mIdLabelMap.begin();
+ it != mIdLabelMap.end(); ++it )
+ if ( catids.find( it.key() ) != -1 )
+ labels += *it;
+ return labels;
+}
+
+QArray<int> CategoryGroup::ids( const QStringList &cats ) const
+{
+ QArray<int> results;
+
+ for ( QStringList::ConstIterator catIt = cats.begin();
+ catIt != cats.end(); ++catIt ) {
+ if ( *catIt == QObject::tr("All") || *catIt == QObject::tr("Unfiled") )
+ continue;
+ int value = id( *catIt );
+ if ( value != 0 ) {
+ int tmp = results.size();
+ results.resize( tmp + 1 );
+ results[ tmp ] = value;
+ }
+ }
+
+ return results;
+}
+
+QArray<int> CategoryGroup::ids() const
+{
+ QArray<int> results( mIdLabelMap.count() );
+ int i = 0;
+ for ( QMap<int, QString>::ConstIterator it = mIdLabelMap.begin();
+ it != mIdLabelMap.end(); ++it )
+ results[i++] = it.key();
+
+ return results;
+}
+
+/***********************************************************
+ *
+ * Categories
+ *
+ **********************************************************/
+
+/** Add the category name as long as it doesn't already exist locally
+ * or globally. Return TRUE if added, FALSE if conflicts.
+ */
+int Categories::addCategory( const QString &appname,
+ const QString &catname,
+ int uid )
+{
+ if ( mGlobalCats.contains(catname) )
+ return 0;
+
+ QMap< QString, CategoryGroup >::Iterator
+ appIt = mAppCats.find( appname );
+
+ if ( appIt == mAppCats.end() ) {
+ CategoryGroup newgroup;
+ newgroup.add( uid, catname );
+ mAppCats.insert( appname, newgroup );
+ emit categoryAdded( *this, appname, uid );
+ return uid;
+ }
+
+ CategoryGroup &cats = *appIt;
+ cats.add( uid, catname );
+ emit categoryAdded( *this, appname, uid );
+ return uid;
+}
+
+int Categories::addCategory( const QString &appname,
+ const QString &catname )
+{
+ if ( mGlobalCats.contains(catname) )
+ return 0;
+
+ QMap< QString, CategoryGroup >::Iterator
+ appIt = mAppCats.find( appname );
+
+ if ( appIt == mAppCats.end() ) {
+ CategoryGroup newgroup;
+ int uid = newgroup.add( catname );
+ mAppCats.insert( appname, newgroup );
+ emit categoryAdded( *this, appname, uid );
+ return uid;
+ }
+
+ CategoryGroup &cats = *appIt;
+ int uid = cats.add( catname );
+ if ( !uid )
+ return 0;
+ emit categoryAdded( *this, appname, uid );
+ return uid;
+}
+
+int Categories::addGlobalCategory( const QString &catname, int uid )
+{
+ mGlobalCats.add( uid, catname );
+ emit categoryAdded( *this, QString::null, uid );
+ return uid;
+}
+
+int Categories::addGlobalCategory( const QString &catname )
+{
+ int uid = mGlobalCats.add( catname );
+ if ( !uid )
+ return 0;
+ emit categoryAdded( *this, QString::null, uid );
+ return uid;
+}
+
+/** Removes the category from the application; if it is not found
+ * in the application, then it attempts to remove it from
+ * the global list
+ */
+bool Categories::removeCategory( const QString &appname,
+ const QString &catname,
+ bool checkGlobal )
+{
+ QMap< QString, CategoryGroup >::Iterator
+ appIt = mAppCats.find( appname );
+ if ( appIt != mAppCats.end() ) {
+ CategoryGroup &cats = *appIt;
+ int uid = cats.id( catname );
+ if ( cats.remove( uid ) ) {
+ emit categoryRemoved( *this, appname, uid );
+ return TRUE;
+ }
+ }
+ if ( !checkGlobal )
+ return FALSE;
+ return removeGlobalCategory( catname );
+}
+
+bool Categories::removeCategory( const QString &appname, int uid )
+{
+ QMap< QString, CategoryGroup >::Iterator
+ appIt = mAppCats.find( appname );
+ if ( appIt != mAppCats.end() ) {
+ CategoryGroup &cats = *appIt;
+ if ( cats.remove( uid ) ) {
+ emit categoryRemoved( *this, appname, uid );
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool Categories::removeGlobalCategory( const QString &catname )
+{
+ int uid = mGlobalCats.id( catname );
+ if ( mGlobalCats.remove( uid ) ) {
+ emit categoryRemoved( *this, QString::null, uid );
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+bool Categories::removeGlobalCategory( int uid )
+{
+ if ( mGlobalCats.remove( uid ) ) {
+ emit categoryRemoved( *this, QString::null, uid );
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/** Returns the sorted list of all categories that are associated with
+ * the app. If includeGlobal parameter is TRUE then the returned
+ * categories will include the global category items.
+ */
+QStringList Categories::labels( const QString &app,
+ bool includeGlobal,
+ ExtraLabels extra ) const
+{
+ QMap< QString, CategoryGroup >::ConstIterator
+ appIt = mAppCats.find( app );
+ QStringList cats;
+ switch ( extra ) {
+ case NoExtra: break;
+ case AllUnfiled:
+ cats.append( tr("All") );
+ cats.append( tr("Unfiled") );
+ break;
+ case AllLabel:
+ cats.append( tr("All") );
+ break;
+ case UnfiledLabel:
+ cats.append( tr("Unfiled") );
+ break;
+ }
+ if ( appIt != mAppCats.end() )
+ cats += (*appIt).labels();
+ else qDebug("Categories::labels didn't find app %s", app.latin1() );
+ if ( includeGlobal )
+ cats += mGlobalCats.labels();
+ // I don't think a sorted list is useful, the user might find prefer
+ // it in the original order.
+// cats.sort();
+ return cats;
+}
+
+QString Categories::label( const QString &app, int id ) const
+{
+ if ( mGlobalCats.contains( id ) )
+ return mGlobalCats.label( id );
+ QMap< QString, CategoryGroup >::ConstIterator
+ appIt = mAppCats.find( app );
+ if ( appIt == mAppCats.end() )
+ return QString::null;
+ return (*appIt).label( id );
+}
+
+QStringList Categories::labels( const QString & app,
+ const QArray<int> &catids ) const
+{
+ QStringList strs = mGlobalCats.labels( catids );
+ strs += mAppCats[app].labels( catids );
+ return strs;
+}
+
+/** Returns a single string associated with the cat ids for display in
+ * a combobox or any area that requires one string. If catids are empty
+ * then "Unfiled" will be returned. If multiple categories are assigned
+ * the first cat id is shown with " (multi)" appended to the string.
+ */
+QString Categories::displaySingle( const QString &app,
+ const QArray<int> &catids,
+ DisplaySingle display ) const
+{
+ QStringList strs = labels( app, catids );
+ if ( !strs.count() )
+ return tr("Unfiled");
+ strs.sort();
+ QString r;
+ if ( strs.count() > 1 ) {
+ switch ( display ) {
+ case ShowFirst:
+ r = strs.first();
+ break;
+ case ShowMulti:
+ r = strs.first() + tr(" (multi.)");
+ break;
+ case ShowAll:
+ r = strs.join(" ");
+ break;
+ }
+ }
+ else r = strs.first();
+ return r;
+}
+
+QArray<int> Categories::ids( const QString &app ) const
+{
+ QArray<int> allIds = mGlobalCats.ids();
+ QArray<int> appIds = mAppCats[app].ids();
+
+ // we should make the guarentee that the ids are in the
+ // same order as the labels, (i.e. app cats then global)
+ // otherwise there is no point in having these two separate functions.
+ uint appSize = appIds.size();
+ appIds.resize( appSize + allIds.size() );
+ for ( uint i = appSize; i < appIds.size(); ++i )
+ appIds[int(i)] = allIds[int(i - appSize)];
+
+ return appIds;
+}
+
+QArray<int> Categories::ids( const QString &app, const QStringList &cats ) const
+{
+ QArray<int> allIds = mGlobalCats.ids( cats );
+ QArray<int> appIds = mAppCats[app].ids( cats );
+
+ uint appSize = appIds.size();
+ appIds.resize( appSize + allIds.size() );
+ for ( uint i = appSize; i < appIds.size(); ++i )
+ appIds[int(i)] = allIds[int(i - appSize)];
+
+ return appIds;
+}
+
+int Categories::id( const QString &app, const QString &cat ) const
+{
+ if ( cat == tr("Unfiled") || cat.contains( tr(" (multi.)") ) )
+ return 0;
+ int uid = mGlobalCats.id( cat );
+ if ( uid != 0 )
+ return uid;
+ return mAppCats[app].id( cat );
+}
+
+
+/** Return TRUE if renaming succeeded; FALSE if app name not found,
+ * or if there was a name conflict
+ */
+bool Categories::renameCategory( const QString &appname,
+ const QString &oldName,
+ const QString &newName )
+{
+ QMap< QString, CategoryGroup >::Iterator
+ appIt = mAppCats.find( appname );
+
+ if ( appIt != mAppCats.end() ) {
+ CategoryGroup &cats = *appIt;
+ int id = cats.id( oldName );
+ if ( id != 0 && cats.rename( id, newName ) ) {
+ emit categoryRenamed( *this, appname, id );
+ return TRUE;
+ }
+ }
+ return renameGlobalCategory( oldName, newName );
+}
+
+bool Categories::renameGlobalCategory( const QString &oldName,
+ const QString &newName )
+{
+ int uid = mGlobalCats.id( oldName );
+ if ( uid != 0 && mGlobalCats.rename( uid, newName ) ) {
+ emit categoryRenamed( *this, QString::null, uid );
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void Categories::setGlobal( const QString &appname,
+ const QString &catname,
+ bool global )
+{
+ // if in global and should be in app; then move it
+ if ( mGlobalCats.contains( catname ) && !global ) {
+ mGlobalCats.remove( catname );
+ addCategory( appname, catname );
+ return ;
+ }
+
+ // if in app and should be in global, then move it
+ if ( !global )
+ return;
+ if ( removeCategory( appname, catname, FALSE ) )
+ addGlobalCategory( catname );
+}
+
+bool Categories::isGlobal( const QString &catname ) const
+{
+ return mGlobalCats.contains( catname );
+}
+
+
+/** Returns true if the catname is associated with any application
+ */
+bool Categories::exists( const QString &catname ) const
+{
+ if ( isGlobal(catname) )
+ return TRUE;
+
+ for ( QMap<QString, CategoryGroup>::ConstIterator appsIt = mAppCats.begin(); appsIt != mAppCats.end(); ++appsIt )
+ if ( exists( appsIt.key(), catname ) )
+ return TRUE;
+
+ return FALSE;
+}
+
+bool Categories::exists( const QString &appname,
+ const QString &catname) const
+{
+ QMap< QString, CategoryGroup >::ConstIterator
+ appIt = mAppCats.find( appname );
+
+ if ( appIt == mAppCats.end() )
+ return FALSE;
+
+ return (*appIt).contains( catname );
+}
+
+bool Categories::save( const QString &fname ) const
+{
+ QFile file( fname );
+ if ( !file.open( IO_WriteOnly ) ) {
+ qWarning("Unable to write to %s", fname.latin1());
+ return FALSE;
+ }
+
+ QTextStream ts( &file );
+ ts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ ts << "<!DOCTYPE CategoryList>" << endl;
+
+ ts << "<Categories>" << endl;
+ for ( QMap<int, QString>::ConstIterator git = mGlobalCats.idMap().begin();
+ git != mGlobalCats.idMap().end(); ++git )
+ ts << "<Category id=\"" << git.key() << "\""
+ << " name=\"" << escapeString(*git) << "\" />" << endl;
+
+ for ( QMap<QString, CategoryGroup>::ConstIterator appsIt=mAppCats.begin();
+ appsIt != mAppCats.end(); ++appsIt ) {
+ const QString &app = appsIt.key();
+ const QMap<int, QString> &appcats = (*appsIt).idMap();
+ for ( QMap<int, QString>::ConstIterator appcatit = appcats.begin();
+ appcatit != appcats.end(); ++appcatit )
+ ts << "<Category id=\"" << appcatit.key() << "\""
+ << " app=\"" << escapeString(app) << "\""
+ << " name=\"" << escapeString(*appcatit) << "\" />" << endl;
+ }
+ ts << "</Categories>" << endl;
+
+ file.close();
+ return TRUE;
+}
+
+bool Categories::load( const QString &fname )
+{
+ QFile file( fname );
+ if ( !file.open( IO_ReadOnly ) ) {
+ qWarning("Unable to open %s", fname.latin1());
+ return FALSE;
+ }
+
+ clear();
+ QByteArray ba = file.readAll();
+ QString data = QString::fromUtf8( ba.data(), ba.size() );
+ QChar *uc = (QChar *)data.unicode();
+ int len = data.length();
+
+ // QTime t;
+ // t.start();
+ QString name;
+ QString id;
+ QString app;
+ int i = 0;
+ while ( (i = data.find( "<Category ", i)) != -1 ) {
+
+ i += 10;
+ name = QString::null;
+ app = QString::null;
+ while ( 1 ) {
+ // skip white space
+ while ( i < len &&
+ (uc[i] == ' ' || uc[i] == '\n' || uc[i] == '\r') )
+ i++;
+ // if at the end, then done
+ if ( i >= len-2 || (uc[i] == '/' && uc[i+1] == '>') )
+ break;
+ // we have another attribute read it.
+ int j = i;
+ while ( j < len && uc[j] != '=' )
+ j++;
+ QString attr = QConstString( uc+i, j-i ).string();
+ i = ++j; // skip =
+ while ( i < len && uc[i] != '"' )
+ i++;
+ j = ++i;
+ while ( j < len && uc[j] != '"' )
+ j++;
+ QString value = Qtopia::plainString( QConstString( uc+i, j-i ).string() );
+ i = j + 1;
+
+// qDebug("attr='%s' value='%s'", attr.latin1(), value.latin1() );
+ if ( attr == "id" )
+ id = value;
+ else if ( attr == "app" )
+ app = value;
+
+ else if ( attr == "name" )
+ name = value;
+ }
+
+ if ( name.isNull() || id.isNull() ) {
+ qWarning("No name or id in the category");
+ continue;
+ }
+ if ( app.isNull() )
+ mGlobalCats.add( id.toInt(), name );
+ else
+ mAppCats[ app ].add( id.toInt(), name );
+ }
+
+ return TRUE;
+}
+
+void Categories::clear()
+{
+ mGlobalCats.clear();
+ mAppCats.clear();
+}
+
+void Categories::dump() const
+{
+ qDebug("\tglobal categories = %s", mGlobalCats.labels().join(", ").latin1() );
+ for ( QMap<QString, CategoryGroup>::ConstIterator appsIt = mAppCats.begin(); appsIt != mAppCats.end(); ++appsIt ) {
+ const QString &app = appsIt.key();
+ QStringList appcats = (*appsIt).labels();
+ qDebug("\tapp = %s\tcategories = %s", app.latin1(),
+ appcats.join(", ").latin1() );
+
+ }
+}
+
+QStringList CheckedListView::checked() const
+{
+ QStringList strs;
+ for ( QCheckListItem *i = (QCheckListItem *) firstChild();
+ i; i = (QCheckListItem *)i->nextSibling() )
+ if ( i->isOn() )
+ strs += i->text( 0 );
+ return strs;
+}
+
+void CheckedListView::addCheckableList( const QStringList &options )
+{
+ for ( QStringList::ConstIterator it = options.begin();
+ it != options.end(); ++it ) {
+ (void) new QCheckListItem( this, *it,
+ QCheckListItem::CheckBox );
+ }
+}
+
+void CheckedListView::setChecked( const QStringList &checked )
+{
+ // iterate over all items
+ bool showingChecked = FALSE;
+ for ( QCheckListItem *i = (QCheckListItem *) firstChild();
+ i; i = (QCheckListItem *)i->nextSibling() )
+ // see if the item should be checked by searching the
+ // checked list
+ if ( checked.find( i->text( 0 ) ) != checked.end() ) {
+ i->setOn( TRUE );
+ // make sure it is showing at least one checked item
+ if ( !showingChecked ) {
+ ensureItemVisible( i );
+ showingChecked = TRUE;
+ }
+ }
+ else
+ i->setOn( FALSE );
+}
diff --git a/library/backend/categories.h b/library/backend/categories.h
new file mode 100644
index 0000000..82d765b
--- a/dev/null
+++ b/library/backend/categories.h
@@ -0,0 +1,232 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included
+** in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+** PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QTPALMTOP_CATEGORIES_H
+#define QTPALMTOP_CATEGORIES_H
+
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qmap.h>
+#include <qlistview.h>
+#include <qarray.h>
+#include "qpcglobal.h"
+#include "palmtopuidgen.h"
+
+class CategoryGroup;
+
+#if defined(QPC_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QPC_EXPORT QMap<int, QString>;
+template class QPC_EXPORT QMap<QString, int>;
+template class QPC_EXPORT QMap< QString, CategoryGroup >;
+// MOC_SKIP_END
+#endif
+
+class QPC_EXPORT CategoryGroup
+{
+ friend class Categories;
+public:
+ CategoryGroup(): mIdLabelMap(), mLabelIdMap() { }
+ CategoryGroup( const CategoryGroup &c ) :
+ mIdLabelMap( c.mIdLabelMap), mLabelIdMap( c.mLabelIdMap ) { }
+
+ void clear() { mIdLabelMap.clear(); mLabelIdMap.clear(); }
+
+ int add( const QString &label );
+ bool add( int uid, const QString &label );
+
+ bool remove( const QString &label );
+ bool remove( int uid );
+
+ bool rename( int uid, const QString &newLabel );
+ bool rename( const QString &oldLabel, const QString &newLabel );
+
+ bool contains(int id) const;
+ bool contains(const QString &label) const;
+
+ /** Returns label associated with the uid or QString::null if
+ * not found
+ */
+ const QString &label(int id) const;
+ /** Returns the uid associated with label or 0 if not found */
+ int id(const QString &label) const;
+
+ /** Returns a sorted list of labels */
+ QStringList labels() const;
+ QArray<int> ids( const QStringList &cats ) const;
+ QArray<int> ids() const;
+ QStringList labels( const QArray<int> &catids ) const;
+
+ const QMap<int, QString> &idMap() const { return mIdLabelMap; }
+
+private:
+ void insert( int uid, const QString &label );
+ QMap<int, QString> mIdLabelMap;
+ QMap<QString, int> mLabelIdMap;
+
+ static Qtopia::UidGen &uidGen() { return sUidGen; }
+ static Qtopia::UidGen sUidGen;
+};
+
+/** Map from application name to categories */
+class QPC_EXPORT Categories : public QObject
+{
+ Q_OBJECT
+public:
+ Categories( QObject *parent=0, const char *name = 0 )
+ : QObject( parent, name ), mGlobalCats(), mAppCats() { }
+ Categories( const Categories &copyFrom ) : QObject( copyFrom.parent() ),
+ mGlobalCats( copyFrom.mGlobalCats ),
+ mAppCats( copyFrom.mAppCats ) { }
+ virtual ~Categories() { }
+
+ Categories &operator= ( const Categories &c )
+{ mAppCats = c.mAppCats; mGlobalCats = c.mGlobalCats; return *this; }
+
+ void clear();
+
+ /** Add the category name as long as it doesn't already exist
+ * locally or globally. Return UID if added, 0 if conflicts
+ * (error).
+ */
+ int addCategory( const QString &appname, const QString &catname);
+ /** Add the category name as long as it doesn't already exist
+ * locally or globally. Return UID if added, 0 if conflicts
+ * (error).
+ */
+ int addCategory( const QString &appname, const QString &catname, int uid);
+ /** Add the global category just checking that it doesn't
+ * already exist globally. Return UID if added, 0 if conflicts.
+ */
+ int addGlobalCategory( const QString &catname );
+ /** Add the global category just checking that it doesn't
+ * already exist globally. Return UID if added, 0 if conflicts.
+ */
+ int addGlobalCategory( const QString &catname, int uid );
+ /** Removes the category from the application; if it is not found
+ * in the application, then it removes it from the global list
+ */
+ bool removeCategory( const QString &appName, const QString &catName,
+ bool checkGlobal = TRUE);
+ bool removeCategory( const QString &appName, int uid );
+ bool removeGlobalCategory( const QString &catName );
+ bool removeGlobalCategory( int uid );
+
+ QArray<int> ids( const QString &app ) const;
+ QArray<int> ids( const QString &app,
+ const QStringList &cats ) const;
+ /** Returns the id associated with the app */
+ int id( const QString &app, const QString &cat ) const;
+ /** Returns the label associated with the id */
+ QString label( const QString &app, int id ) const;
+
+ enum ExtraLabels { NoExtra, AllUnfiled, AllLabel, UnfiledLabel };
+ /** Returns the sorted list of all categories that are
+ * associated with the app.
+ * If includeGlobal parameter is TRUE then the returned
+ * categories will include the global category items.
+ * If extra = NoExtra, then
+ * If extra = AllUnfiled, then All and Unfiled will be prepended to
+ * the list
+ * If extra = AllLabel, then All is prepended
+ * If extra = UnfiledLabel, then Unfiled is prepended
+ */
+ QStringList labels( const QString &app,
+ bool includeGlobal = TRUE,
+ ExtraLabels extra = NoExtra ) const;
+
+ /** Returns the labels of the categories associated with the uids */
+ QStringList labels( const QString & app,
+ const QArray<int> &catids ) const;
+
+ enum DisplaySingle { ShowMulti, ShowAll, ShowFirst };
+
+ /** Returns a single string associated with the cat ids for display in
+ * a combobox or any area that requires one string. If catids are empty
+ * then "Unfiled" will be returned. If multiple categories are assigned
+ * then the behavior depends on the DisplaySingle type.
+ * If /a display is set to ShowMulti then " (multi)" appended to the
+ * first string. If /a display is set to ShowAll, then a space seperated
+ * string is returned with all categories. If ShowFirst is returned,
+ * the just the first string is returned.
+ */
+ QString displaySingle( const QString &app,
+ const QArray<int> &catids,
+ DisplaySingle display ) const;
+
+ QStringList globalCategories() const { return mGlobalCats.labels();}
+
+ bool renameCategory( const QString &appname,
+ const QString &oldName,
+ const QString &newName );
+ bool renameGlobalCategory( const QString &oldName,
+ const QString &newName );
+
+ void setGlobal( const QString &appname, const QString &catname,
+ bool value );
+ bool isGlobal( const QString &catname ) const;
+
+
+ /** Returns true if the catname is associated with any application
+ */
+ bool exists( const QString &catname ) const;
+ bool exists( const QString &appname, const QString &catname) const;
+
+ bool save( const QString &fname ) const;
+ bool load( const QString &fname );
+
+ // for debugging
+ void dump() const;
+
+ const QMap<QString, CategoryGroup> &appGroupMap() const{ return mAppCats; }
+ const CategoryGroup &globalGroup() const { return mGlobalCats; }
+
+signals:
+ /** emitted if added a category;
+ * the second param is the application the category was added to
+ * or null if global
+ * the third param is the uid of the newly added category
+ */
+ void categoryAdded( const Categories &, const QString &, int );
+ /** emitted if removed a category
+ * the second param is the application the category was removed from
+ * or null if global
+ * the third param is the uid of the removed category
+ */
+ void categoryRemoved( const Categories &, const QString &, int );
+ /** emitted if a category is renamed; the second param is the uid of
+ * the removed category */
+ void categoryRenamed( const Categories &, const QString &, int );
+
+private:
+ CategoryGroup mGlobalCats;
+ QMap< QString, CategoryGroup > mAppCats;
+};
+
+class QPC_EXPORT CheckedListView : public QListView
+{
+public:
+ void addCheckableList( const QStringList &options );
+ void setChecked( const QStringList &checked );
+ QStringList checked() const;
+};
+
+#endif
diff --git a/library/backend/contact.cpp b/library/backend/contact.cpp
new file mode 100644
index 0000000..a5f10ab
--- a/dev/null
+++ b/library/backend/contact.cpp
@@ -0,0 +1,909 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "contact.h"
+#include "vobject_p.h"
+#include "qfiledirect_p.h"
+
+#include <qpe/stringutil.h>
+#include <qpe/timeconversion.h>
+
+#include <qobject.h>
+#include <qregexp.h>
+#include <qstylesheet.h>
+#include <qfileinfo.h>
+
+#include <stdio.h>
+
+Qtopia::UidGen Contact::sUidGen( Qtopia::UidGen::Qtopia );
+
+Contact::Contact()
+ : Record(), mMap(), d( 0 )
+{
+}
+
+Contact::Contact( const QMap<int, QString> &fromMap ) :
+ Record(), mMap( fromMap ), d( 0 )
+{
+ QString cats = mMap[ Qtopia::AddressCategory ];
+ if ( !cats.isEmpty() )
+ setCategories( idsFromString( cats ) );
+ QString uidStr = find( Qtopia::AddressUid );
+ if ( uidStr.isEmpty() )
+ setUid( uidGen().generate() );
+ else
+ setUid( uidStr.toInt() );
+}
+
+Contact::~Contact()
+{
+}
+
+QMap<int, QString> Contact::toMap() const
+{
+ QMap<int, QString> map = mMap;
+ map.insert( Qtopia::AddressCategory, idsToString( categories() ));
+ return map;
+}
+
+/*!
+ Returns a rich text formatted QString of the Contact.
+*/
+QString Contact::toRichText() const
+{
+ QString text;
+ QString value, comp, state;
+
+ // name, jobtitle and company
+ if ( !(value = fullName()).isEmpty() )
+ text += "<b>" + Qtopia::escapeString(value) + "</b><br>";
+ if ( !(value = jobTitle()).isEmpty() )
+ text += Qtopia::escapeString(value) + "<br>";
+
+ comp = company();
+ if ( !(value = department()).isEmpty() ) {
+ text += Qtopia::escapeString(value);
+ if ( comp )
+ text += ", ";
+ else
+ text += "<br>";
+ }
+ if ( !comp.isEmpty() )
+ text += Qtopia::escapeString(comp) + "<br>";
+
+ // business address
+ if ( !businessStreet().isEmpty() || !businessCity().isEmpty() ||
+ !businessZip().isEmpty() || !businessCountry().isEmpty() ) {
+ text += "<br>";
+ text += QObject::tr( "<b>Work Address:</b>" );
+ text += "<br>";
+ }
+
+ if ( !(value = businessStreet()).isEmpty() )
+ text += Qtopia::escapeString(value) + "<br>";
+ state = businessState();
+ if ( !(value = businessCity()).isEmpty() ) {
+ text += Qtopia::escapeString(value);
+ if ( state )
+ text += ", " + Qtopia::escapeString(state);
+ text += "<br>";
+ } else if ( !state.isEmpty() )
+ text += Qtopia::escapeString(state) + "<br>";
+ if ( !(value = businessZip()).isEmpty() )
+ text += Qtopia::escapeString(value) + "<br>";
+ if ( !(value = businessCountry()).isEmpty() )
+ text += Qtopia::escapeString(value) + "<br>";
+
+ // home address
+ if ( !homeStreet().isEmpty() || !homeCity().isEmpty() ||
+ !homeZip().isEmpty() || !homeCountry().isEmpty() ) {
+ text += "<br>";
+ text += QObject::tr( "<b>Home Address:</b>" );
+ text += "<br>";
+ }
+
+ if ( !(value = homeStreet()).isEmpty() )
+ text += Qtopia::escapeString(value) + "<br>";
+ state = homeState();
+ if ( !(value = homeCity()).isEmpty() ) {
+ text += Qtopia::escapeString(value);
+ if ( !state.isEmpty() )
+ text += ", " + Qtopia::escapeString(state);
+ text += "<br>";
+ } else if (!state.isEmpty())
+ text += Qtopia::escapeString(state) + "<br>";
+ if ( !(value = homeZip()).isEmpty() )
+ text += Qtopia::escapeString(value) + "<br>";
+ if ( !(value = homeCountry()).isEmpty() )
+ text += Qtopia::escapeString(value) + "<br>";
+
+ // the others...
+ QString str;
+ str = emails();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Email Addresses: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = homePhone();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Home Phone: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = homeFax();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Home Fax: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = homeMobile();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Home Mobile: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = homeWebpage();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Home Web Page: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = businessWebpage();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Business Web Page: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = office();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Office: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = businessPhone();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Business Phone: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = businessFax();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Business Fax: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = businessMobile();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Business Mobile: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = businessPager();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Business Pager: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = profession();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Profession: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = assistant();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Assistant: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = manager();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Manager: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = gender();
+ if ( !str.isEmpty() && str.toInt() != 0 ) {
+ if ( str.toInt() == 1 )
+ str = QObject::tr( "Male" );
+ else if ( str.toInt() == 2 )
+ str = QObject::tr( "Female" );
+ text += "<b>" + QObject::tr("Gender: ") + "</b>" + str + "<br>";
+ }
+ str = spouse();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Spouse: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = birthday();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Birthday: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = anniversary();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Anniversary: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+ str = nickname();
+ if ( !str.isEmpty() )
+ text += "<b>" + QObject::tr("Nickname: ") + "</b>"
+ + Qtopia::escapeString(str) + "<br>";
+
+ // notes last
+ if ( (value = notes()) ) {
+ QRegExp reg("\n");
+
+ //QString tmp = Qtopia::escapeString(value);
+ QString tmp = QStyleSheet::convertFromPlainText(value);
+ //tmp.replace( reg, "<br>" );
+ text += "<br>" + tmp + "<br>";
+ }
+ return text;
+}
+
+void Contact::insert( int key, const QString &v )
+{
+ QString value = v.stripWhiteSpace();
+ if ( value.isEmpty() )
+ mMap.remove( key );
+ else
+ mMap.insert( key, value );
+}
+
+void Contact::replace( int key, const QString & v )
+{
+ QString value = v.stripWhiteSpace();
+ if ( value.isEmpty() )
+ mMap.remove( key );
+ else
+ mMap.replace( key, value );
+}
+
+QString Contact::find( int key ) const
+{
+ return mMap[key];
+}
+
+QString Contact::displayAddress( const QString &street,
+ const QString &city,
+ const QString &state,
+ const QString &zip,
+ const QString &country ) const
+{
+ QString s = street;
+ if ( !street.isEmpty() )
+ s+= "\n";
+ s += city;
+ if ( !city.isEmpty() && !state.isEmpty() )
+ s += ", ";
+ s += state;
+ if ( !state.isEmpty() && !zip.isEmpty() )
+ s += " ";
+ s += zip;
+ if ( !country.isEmpty() && !s.isEmpty() )
+ s += "\n";
+ s += country;
+ return s;
+}
+
+QString Contact::displayBusinessAddress() const
+{
+ return displayAddress( businessStreet(), businessCity(),
+ businessState(), businessZip(),
+ businessCountry() );
+}
+
+QString Contact::displayHomeAddress() const
+{
+ return displayAddress( homeStreet(), homeCity(),
+ homeState(), homeZip(),
+ homeCountry() );
+}
+
+QString Contact::fullName() const
+{
+ QString title = find( Qtopia::Title );
+ QString firstName = find( Qtopia::FirstName );
+ QString middleName = find( Qtopia::MiddleName );
+ QString lastName = find( Qtopia::LastName );
+ QString suffix = find( Qtopia::Suffix );
+
+ QString name = title;
+ if ( !firstName.isEmpty() ) {
+ if ( !name.isEmpty() )
+ name += " ";
+ name += firstName;
+ }
+ if ( !middleName.isEmpty() ) {
+ if ( !name.isEmpty() )
+ name += " ";
+ name += middleName;
+ }
+ if ( !lastName.isEmpty() ) {
+ if ( !name.isEmpty() )
+ name += " ";
+ name += lastName;
+ }
+ if ( !suffix.isEmpty() ) {
+ if ( !name.isEmpty() )
+ name += " ";
+ name += suffix;
+ }
+ return name.simplifyWhiteSpace();
+}
+
+QStringList Contact::childrenList() const
+{
+ return QStringList::split( " ", find( Qtopia::Children ) );
+}
+
+QStringList Contact::emailList() const
+{
+ return QStringList::split( ";", find( Qtopia::Emails ) );
+}
+
+void Contact::setFileAs()
+{
+ QString lastName, firstName, middleName, fileas;
+
+ lastName = find( Qtopia::LastName );
+ firstName = find( Qtopia::FirstName );
+ middleName = find( Qtopia::MiddleName );
+ if ( !lastName.isEmpty() && !firstName.isEmpty()
+ && !middleName.isEmpty() )
+ fileas = lastName + ", " + firstName + " " + middleName;
+ else if ( !lastName.isEmpty() && !firstName.isEmpty() )
+ fileas = lastName + ", " + firstName;
+ else if ( !lastName.isEmpty() || !firstName.isEmpty() ||
+ !middleName.isEmpty() )
+ fileas = firstName + ( firstName.isEmpty() ? "" : " " )
+ + middleName + ( middleName.isEmpty() ? "" : " " )
+ + lastName;
+
+ replace( Qtopia::FileAs, fileas );
+}
+
+void Contact::save( QString &buf ) const
+{
+ static const QStringList SLFIELDS = fields();
+ // I'm expecting "<Contact " in front of this...
+ for ( QMap<int, QString>::ConstIterator it = mMap.begin();
+ it != mMap.end(); ++it ) {
+ const QString &value = it.data();
+ int key = it.key();
+ if ( !value.isEmpty() ) {
+ if ( key == Qtopia::AddressCategory || key == Qtopia::AddressUid)
+ continue;
+
+ key -= Qtopia::AddressCategory+1;
+ buf += SLFIELDS[key];
+ buf += "=\"" + Qtopia::escapeString(value) + "\" ";
+ }
+ }
+ buf += customToXml();
+ if ( categories().count() > 0 )
+ buf += "Categories=\"" + idsToString( categories() ) + "\" ";
+ buf += "Uid=\"" + QString::number( uid() ) + "\" ";
+ // You need to close this yourself
+}
+
+QStringList Contact::fields()
+{
+ QStringList list;
+
+ list.append( "Title" ); // Not Used!
+ list.append( "FirstName" );
+ list.append( "MiddleName" );
+ list.append( "LastName" );
+ list.append( "Suffix" );
+ list.append( "FileAs" );
+
+ list.append( "DefaultEmail" );
+ list.append( "Emails" );
+
+ list.append( "HomeStreet" );
+ list.append( "HomeCity" );
+ list.append( "HomeState" );
+ list.append( "HomeZip" );
+ list.append( "HomeCountry" );
+ list.append( "HomePhone" );
+ list.append( "HomeFax" );
+ list.append( "HomeMobile" );
+ list.append( "HomeWebPage" );
+
+ list.append( "Company" );
+ list.append( "BusinessStreet" );
+ list.append( "BusinessCity" );
+ list.append( "BusinessState" );
+ list.append( "BusinessZip" );
+ list.append( "BusinessCountry" );
+ list.append( "BusinessWebPage" );
+ list.append( "JobTitle" );
+ list.append( "Department" );
+ list.append( "Office" );
+ list.append( "BusinessPhone" );
+ list.append( "BusinessFax" );
+ list.append( "BusinessMobile" );
+ list.append( "BusinessPager" );
+ list.append( "Profession" );
+ list.append( "Assistant" );
+ list.append( "Manager" );
+
+ list.append( "Spouse" );
+ list.append( "Gender" );
+ list.append( "Birthday" );
+ list.append( "Anniversary" );
+ list.append( "Nickname" );
+
+ list.append( "Children" );
+ list.append( "Notes" );
+
+ return list;
+}
+
+QStringList Contact::trfields()
+{
+ QStringList list;
+
+ list.append( QObject::tr( "Name Title") );
+ list.append( QObject::tr( "First Name" ) );
+ list.append( QObject::tr( "Middle Name" ) );
+ list.append( QObject::tr( "Last Name" ) );
+ list.append( QObject::tr( "Suffix" ) );
+ list.append( QObject::tr( "File As" ) );
+
+ list.append( QObject::tr( "Default Email" ) );
+ list.append( QObject::tr( "Emails" ) );
+
+ list.append( QObject::tr( "Home Street" ) );
+ list.append( QObject::tr( "Home City" ) );
+ list.append( QObject::tr( "Home State" ) );
+ list.append( QObject::tr( "Home Zip" ) );
+ list.append( QObject::tr( "Home Country" ) );
+ list.append( QObject::tr( "Home Phone" ) );
+ list.append( QObject::tr( "Home Fax" ) );
+ list.append( QObject::tr( "Home Mobile" ) );
+ list.append( QObject::tr( "Home Web Page" ) );
+
+ list.append( QObject::tr( "Company" ) );
+ list.append( QObject::tr( "Business Street" ) );
+ list.append( QObject::tr( "Business City" ) );
+ list.append( QObject::tr( "Business State" ) );
+ list.append( QObject::tr( "Business Zip" ) );
+ list.append( QObject::tr( "Business Country" ) );
+ list.append( QObject::tr( "Business WebPage" ) );
+ list.append( QObject::tr( "Job Title" ) );
+ list.append( QObject::tr( "Department" ) );
+ list.append( QObject::tr( "Office" ) );
+ list.append( QObject::tr( "Business Phone" ) );
+ list.append( QObject::tr( "Business Fax" ) );
+ list.append( QObject::tr( "Business Mobile" ) );
+ list.append( QObject::tr( "Business Pager" ) );
+ list.append( QObject::tr( "Profession" ) );
+ list.append( QObject::tr( "Assistant" ) );
+ list.append( QObject::tr( "Manager" ) );
+
+ list.append( QObject::tr( "Spouse" ) );
+ list.append( QObject::tr( "Gender" ) );
+ list.append( QObject::tr( "Birthday" ) );
+ list.append( QObject::tr( "Anniversary" ) );
+ list.append( QObject::tr( "Nickname" ) );
+
+ list.append( QObject::tr( "Children" ) );
+ list.append( QObject::tr( "Notes" ) );
+
+ return list;
+}
+
+void Contact::setEmails( const QString &v )
+{
+ replace( Qtopia::Emails, v );
+ if ( v.isEmpty() )
+ setDefaultEmail( QString::null );
+}
+
+void Contact::setChildren( const QString &v )
+{
+ replace( Qtopia::Children, v );
+}
+
+// vcard conversion code
+static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value )
+{
+ VObject *ret = 0;
+ if ( o && !value.isEmpty() )
+ ret = addPropValue( o, prop, value.latin1() );
+ return ret;
+}
+
+static inline VObject *safeAddProp( VObject *o, const char *prop)
+{
+ VObject *ret = 0;
+ if ( o )
+ ret = addProp( o, prop );
+ return ret;
+}
+
+static VObject *createVObject( const Contact &c )
+{
+ VObject *vcard = newVObject( VCCardProp );
+ safeAddPropValue( vcard, VCVersionProp, "2.1" );
+ safeAddPropValue( vcard, VCLastRevisedProp, TimeConversion::toISO8601( QDateTime::currentDateTime() ) );
+ safeAddPropValue( vcard, VCUniqueStringProp, QString::number(c.uid()) );
+
+ // full name
+ safeAddPropValue( vcard, VCFullNameProp, c.fullName() );
+
+ // name properties
+ VObject *name = safeAddProp( vcard, VCNameProp );
+ safeAddPropValue( name, VCFamilyNameProp, c.lastName() );
+ safeAddPropValue( name, VCGivenNameProp, c.firstName() );
+ safeAddPropValue( name, VCAdditionalNamesProp, c.middleName() );
+ safeAddPropValue( name, VCNamePrefixesProp, c.title() );
+ safeAddPropValue( name, VCNameSuffixesProp, c.suffix() );
+
+ // home properties
+ VObject *home_adr= safeAddProp( vcard, VCAdrProp );
+ safeAddProp( home_adr, VCHomeProp );
+ safeAddPropValue( home_adr, VCStreetAddressProp, c.homeStreet() );
+ safeAddPropValue( home_adr, VCCityProp, c.homeCity() );
+ safeAddPropValue( home_adr, VCRegionProp, c.homeState() );
+ safeAddPropValue( home_adr, VCPostalCodeProp, c.homeZip() );
+ safeAddPropValue( home_adr, VCCountryNameProp, c.homeCountry() );
+
+ VObject *home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homePhone() );
+ safeAddProp( home_phone, VCHomeProp );
+ home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() );
+ safeAddProp( home_phone, VCHomeProp );
+ safeAddProp( home_phone, VCCellularProp );
+ home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() );
+ safeAddProp( home_phone, VCHomeProp );
+ safeAddProp( home_phone, VCFaxProp );
+
+ VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() );
+ safeAddProp( url, VCHomeProp );
+
+ // work properties
+ VObject *work_adr= safeAddProp( vcard, VCAdrProp );
+ safeAddProp( work_adr, VCWorkProp );
+ safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() );
+ safeAddPropValue( work_adr, VCCityProp, c.businessCity() );
+ safeAddPropValue( work_adr, VCRegionProp, c.businessState() );
+ safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() );
+ safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() );
+
+ VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() );
+ safeAddProp( work_phone, VCWorkProp );
+ work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() );
+ safeAddProp( work_phone, VCWorkProp );
+ safeAddProp( work_phone, VCCellularProp );
+ work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() );
+ safeAddProp( work_phone, VCWorkProp );
+ safeAddProp( work_phone, VCFaxProp );
+ work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() );
+ safeAddProp( work_phone, VCWorkProp );
+ safeAddProp( work_phone, VCPagerProp );
+
+ url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() );
+ safeAddProp( url, VCWorkProp );
+
+ VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() );
+ safeAddProp( title, VCWorkProp );
+
+
+ QStringList emails = c.emailList();
+ emails.prepend( c.defaultEmail() );
+ for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
+ VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it );
+ safeAddProp( email, VCInternetProp );
+ }
+
+ safeAddPropValue( vcard, VCNoteProp, c.notes() );
+
+ safeAddPropValue( vcard, VCBirthDateProp, c.birthday() );
+
+ if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) {
+ VObject *org = safeAddProp( vcard, VCOrgProp );
+ safeAddPropValue( org, VCOrgNameProp, c.company() );
+ safeAddPropValue( org, VCOrgUnitProp, c.department() );
+ safeAddPropValue( org, VCOrgUnit2Prop, c.office() );
+ }
+
+ // some values we have to export as custom fields
+ safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() );
+ safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() );
+ safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() );
+
+ safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() );
+ safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() );
+ safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() );
+ safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() );
+ safeAddPropValue( vcard, "X-Qtopia-Children", c.children() );
+
+ return vcard;
+}
+
+
+static Contact parseVObject( VObject *obj )
+{
+ Contact c;
+
+ bool haveDefaultEmail = FALSE;
+
+ VObjectIterator it;
+ initPropIterator( &it, obj );
+ while( moreIteration( &it ) ) {
+ VObject *o = nextVObject( &it );
+ QCString name = vObjectName( o );
+ QCString value = vObjectStringZValue( o );
+ if ( name == VCNameProp ) {
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ QString value = vObjectStringZValue( o );
+ if ( name == VCNamePrefixesProp )
+ c.setTitle( value );
+ else if ( name == VCNameSuffixesProp )
+ c.setSuffix( value );
+ else if ( name == VCFamilyNameProp )
+ c.setLastName( value );
+ else if ( name == VCGivenNameProp )
+ c.setFirstName( value );
+ else if ( name == VCAdditionalNamesProp )
+ c.setMiddleName( value );
+ }
+ }
+ else if ( name == VCAdrProp ) {
+ bool work = TRUE; // default address is work address
+ QString street;
+ QString city;
+ QString region;
+ QString postal;
+ QString country;
+
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ QString value = vObjectStringZValue( o );
+ if ( name == VCHomeProp )
+ work = FALSE;
+ else if ( name == VCWorkProp )
+ work = TRUE;
+ else if ( name == VCStreetAddressProp )
+ street = value;
+ else if ( name == VCCityProp )
+ city = value;
+ else if ( name == VCRegionProp )
+ region = value;
+ else if ( name == VCPostalCodeProp )
+ postal = value;
+ else if ( name == VCCountryNameProp )
+ country = value;
+ }
+ if ( work ) {
+ c.setBusinessStreet( street );
+ c.setBusinessCity( city );
+ c.setBusinessCountry( country );
+ c.setBusinessZip( postal );
+ c.setBusinessState( region );
+ } else {
+ c.setHomeStreet( street );
+ c.setHomeCity( city );
+ c.setHomeCountry( country );
+ c.setHomeZip( postal );
+ c.setHomeState( region );
+ }
+ }
+ else if ( name == VCTelephoneProp ) {
+ enum {
+ HOME = 0x01,
+ WORK = 0x02,
+ VOICE = 0x04,
+ CELL = 0x08,
+ FAX = 0x10,
+ PAGER = 0x20,
+ UNKNOWN = 0x80
+ };
+ int type = 0;
+
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ if ( name == VCHomeProp )
+ type |= HOME;
+ else if ( name == VCWorkProp )
+ type |= WORK;
+ else if ( name == VCVoiceProp )
+ type |= VOICE;
+ else if ( name == VCCellularProp )
+ type |= CELL;
+ else if ( name == VCFaxProp )
+ type |= FAX;
+ else if ( name == VCPagerProp )
+ type |= PAGER;
+ else if ( name == VCPreferredProp )
+ ;
+ else
+ type |= UNKNOWN;
+ }
+ if ( (type & UNKNOWN) != UNKNOWN ) {
+ if ( ( type & (HOME|WORK) ) == 0 ) // default
+ type |= HOME;
+ if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default
+ type |= VOICE;
+
+ if ( (type & (VOICE|HOME) ) == (VOICE|HOME) )
+ c.setHomePhone( value );
+ if ( ( type & (FAX|HOME) ) == (FAX|HOME) )
+ c.setHomeFax( value );
+ if ( ( type & (CELL|HOME) ) == (CELL|HOME) )
+ c.setHomeMobile( value );
+ if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) )
+ c.setBusinessPhone( value );
+ if ( ( type & (FAX|WORK) ) == (FAX|WORK) )
+ c.setBusinessFax( value );
+ if ( ( type & (CELL|WORK) ) == (CELL|WORK) )
+ c.setBusinessMobile( value );
+ if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) )
+ c.setBusinessPager( value );
+ }
+ }
+ else if ( name == VCEmailAddressProp ) {
+ QString email = vObjectStringZValue( o );
+ bool valid = TRUE;
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ if ( name != VCInternetProp && name != VCHomeProp &&
+ name != VCWorkProp &&
+ name != VCPreferredProp )
+ // ### preffered should map to default email
+ valid = FALSE;
+ }
+ if ( valid ) {
+ if ( haveDefaultEmail ) {
+ QString str = c.emails();
+ if ( !str.isEmpty() )
+ str += ","+email;
+ c.setEmails( str );
+ } else {
+ c.setDefaultEmail( email );
+ }
+ }
+ }
+ else if ( name == VCURLProp ) {
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ if ( name == VCHomeProp )
+ c.setHomeWebpage( value );
+ else if ( name == VCWorkProp )
+ c.setBusinessWebpage( value );
+ }
+ }
+ else if ( name == VCOrgProp ) {
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ QString value = vObjectStringZValue( o );
+ if ( name == VCOrgNameProp )
+ c.setCompany( value );
+ else if ( name == VCOrgUnitProp )
+ c.setDepartment( value );
+ else if ( name == VCOrgUnit2Prop )
+ c.setOffice( value );
+ }
+ }
+ else if ( name == VCTitleProp ) {
+ c.setJobTitle( value );
+ }
+ else if ( name == "X-Qtopia-Profession" ) {
+ c.setProfession( value );
+ }
+ else if ( name == "X-Qtopia-Manager" ) {
+ c.setManager( value );
+ }
+ else if ( name == "X-Qtopia-Assistant" ) {
+ c.setAssistant( value );
+ }
+ else if ( name == "X-Qtopia-Spouse" ) {
+ c.setSpouse( value );
+ }
+ else if ( name == "X-Qtopia-Gender" ) {
+ c.setGender( value );
+ }
+ else if ( name == "X-Qtopia-Anniversary" ) {
+ c.setAnniversary( value );
+ }
+ else if ( name == "X-Qtopia-Nickname" ) {
+ c.setNickname( value );
+ }
+ else if ( name == "X-Qtopia-Children" ) {
+ c.setChildren( value );
+ }
+
+
+#if 0
+ else {
+ printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ QString value = vObjectStringZValue( o );
+ printf(" subprop: %s = %s\n", name.data(), value.latin1() );
+ }
+ }
+#endif
+ }
+ c.setFileAs();
+ return c;
+}
+
+void Contact::writeVCard( const QString &filename, const QValueList<Contact> &contacts)
+{
+ QFileDirect f( filename.utf8().data() );
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vcard write");
+ return;
+ }
+
+ QValueList<Contact>::ConstIterator it;
+ for( it = contacts.begin(); it != contacts.end(); ++it ) {
+ VObject *obj = createVObject( *it );
+ writeVObject(f.directHandle() , obj );
+ cleanVObject( obj );
+ }
+ cleanStrTbl();
+}
+
+void Contact::writeVCard( const QString &filename, const Contact &contact)
+{
+ QFileDirect f( filename.utf8().data() );
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vcard write");
+ return;
+ }
+
+ VObject *obj = createVObject( contact );
+ writeVObject( f.directHandle() , obj );
+ cleanVObject( obj );
+
+ cleanStrTbl();
+}
+
+
+QValueList<Contact> Contact::readVCard( const QString &filename )
+{
+ qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() );
+ VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() );
+
+ qDebug("vobject = %p", obj );
+
+ QValueList<Contact> contacts;
+
+ while ( obj ) {
+ contacts.append( parseVObject( obj ) );
+
+ VObject *t = obj;
+ obj = nextVObjectInList(obj);
+ cleanVObject( t );
+ }
+
+ return contacts;
+}
+
+bool Contact::match( const QRegExp &r ) const
+{
+ bool match;
+ match = false;
+ QMap<int, QString>::ConstIterator it;
+ for ( it = mMap.begin(); it != mMap.end(); ++it ) {
+ if ( (*it).find( r ) > -1 ) {
+ match = true;
+ break;
+ }
+ }
+ return match;
+}
diff --git a/library/backend/contact.h b/library/backend/contact.h
new file mode 100644
index 0000000..6abdab6
--- a/dev/null
+++ b/library/backend/contact.h
@@ -0,0 +1,217 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __CONTACT_H__
+#define __CONTACT_H__
+
+#include <qpe/palmtoprecord.h>
+#include <qpe/recordfields.h>
+
+#include <qstringlist.h>
+
+#if defined(QPC_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QPC_EXPORT QMap<int, QString>;
+// MOC_SKIP_END
+#endif
+
+class ContactPrivate;
+class QPC_EXPORT Contact : public Qtopia::Record
+{
+ friend class DataSet;
+public:
+ Contact();
+ Contact( const QMap<int, QString> &fromMap );
+ virtual ~Contact();
+
+ static void writeVCard( const QString &filename, const QValueList<Contact> &contacts);
+ static void writeVCard( const QString &filename, const Contact &c );
+ static QValueList<Contact> readVCard( const QString &filename );
+
+ enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE };
+
+ void setTitle( const QString &v ) { replace( Qtopia::Title, v ); }
+ void setFirstName( const QString &v ) { replace( Qtopia::FirstName, v ); }
+ void setMiddleName( const QString &v ) { replace( Qtopia::MiddleName, v ); }
+ void setLastName( const QString &v ) { replace( Qtopia::LastName, v ); }
+ void setSuffix( const QString &v ) { replace( Qtopia::Suffix, v ); }
+ void setFileAs( const QString &v ) { replace( Qtopia::FileAs, v ); }
+ void setFileAs();
+
+ // default email address
+ void setDefaultEmail( const QString &v ) { replace( Qtopia::DefaultEmail, v ); }
+ // the emails should be seperated by a semicolon
+ void setEmails( const QString &v );
+
+ // home
+ void setHomeStreet( const QString &v ) { replace( Qtopia::HomeStreet, v ); }
+ void setHomeCity( const QString &v ) { replace( Qtopia::HomeCity, v ); }
+ void setHomeState( const QString &v ) { replace( Qtopia::HomeState, v ); }
+ void setHomeZip( const QString &v ) { replace( Qtopia::HomeZip, v ); }
+ void setHomeCountry( const QString &v ) { replace( Qtopia::HomeCountry, v ); }
+ void setHomePhone( const QString &v ) { replace( Qtopia::HomePhone, v ); }
+ void setHomeFax( const QString &v ) { replace( Qtopia::HomeFax, v ); }
+ void setHomeMobile( const QString &v ) { replace( Qtopia::HomeMobile, v ); }
+ void setHomeWebpage( const QString &v ) { replace( Qtopia::HomeWebPage, v ); }
+
+ // business
+ void setCompany( const QString &v ) { replace( Qtopia::Company, v ); }
+ void setBusinessStreet( const QString &v ) { replace( Qtopia::BusinessStreet, v ); }
+ void setBusinessCity( const QString &v ) { replace( Qtopia::BusinessCity, v ); }
+ void setBusinessState( const QString &v ) { replace( Qtopia::BusinessState, v ); }
+ void setBusinessZip( const QString &v ) { replace( Qtopia::BusinessZip, v ); }
+ void setBusinessCountry( const QString &v ) { replace( Qtopia::BusinessCountry, v ); }
+ void setBusinessWebpage( const QString &v ) { replace( Qtopia::BusinessWebPage, v ); }
+ void setJobTitle( const QString &v ) { replace( Qtopia::JobTitle, v ); }
+ void setDepartment( const QString &v ) { replace( Qtopia::Department, v ); }
+ void setOffice( const QString &v ) { replace( Qtopia::Office, v ); }
+ void setBusinessPhone( const QString &v ) { replace( Qtopia::BusinessPhone, v ); }
+ void setBusinessFax( const QString &v ) { replace( Qtopia::BusinessFax, v ); }
+ void setBusinessMobile( const QString &v ) { replace( Qtopia::BusinessMobile, v ); }
+ void setBusinessPager( const QString &v ) { replace( Qtopia::BusinessPager, v ); }
+ void setProfession( const QString &v ) { replace( Qtopia::Profession, v ); }
+ void setAssistant( const QString &v ) { replace( Qtopia::Assistant, v ); }
+ void setManager( const QString &v ) { replace( Qtopia::Manager, v ); }
+
+ // personal
+ void setSpouse( const QString &v ) { replace( Qtopia::Spouse, v ); }
+ void setGender( const QString &v ) { replace( Qtopia::Gender, v ); }
+ void setBirthday( const QString &v ) { replace( Qtopia::Birthday, v ); }
+ void setAnniversary( const QString &v ) { replace( Qtopia::Anniversary, v ); }
+ void setNickname( const QString &v ) { replace( Qtopia::Nickname, v ); }
+ void setChildren( const QString &v );
+
+ // other
+ void setNotes( const QString &v ) { replace( Qtopia::Notes, v); }
+
+ bool match( const QRegExp &r ) const;
+
+// // custom
+// void setCustomField( const QString &key, const QString &v )
+// { replace(Custom- + key, v ); }
+
+ // name
+ QString fullName() const;
+ QString title() const { return find( Qtopia::Title ); }
+ QString firstName() const { return find( Qtopia::FirstName ); }
+ QString middleName() const { return find( Qtopia::MiddleName ); }
+ QString lastName() const { return find( Qtopia::LastName ); }
+ QString suffix() const { return find( Qtopia::Suffix ); }
+ QString fileAs() const { return find( Qtopia::FileAs ); }
+
+ // email
+ QString defaultEmail() const { return find( Qtopia::DefaultEmail ); }
+ QString emails() const { return find( Qtopia::Emails ); }
+ QStringList emailList() const;
+
+ // home
+ QString homeStreet() const { return find( Qtopia::HomeStreet ); }
+ QString homeCity() const { return find( Qtopia::HomeCity ); }
+ QString homeState() const { return find( Qtopia::HomeState ); }
+ QString homeZip() const { return find( Qtopia::HomeZip ); }
+ QString homeCountry() const { return find( Qtopia::HomeCountry ); }
+ QString homePhone() const { return find( Qtopia::HomePhone ); }
+ QString homeFax() const { return find( Qtopia::HomeFax ); }
+ QString homeMobile() const { return find( Qtopia::HomeMobile ); }
+ QString homeWebpage() const { return find( Qtopia::HomeWebPage ); }
+ /** Multi line string containing all non-empty address info in the form
+ * Street
+ * City, State Zip
+ * Country
+ */
+ QString displayHomeAddress() const;
+
+ // business
+ QString company() const { return find( Qtopia::Company ); }
+ QString businessStreet() const { return find( Qtopia::BusinessStreet ); }
+ QString businessCity() const { return find( Qtopia::BusinessCity ); }
+ QString businessState() const { return find( Qtopia::BusinessState ); }
+ QString businessZip() const { return find( Qtopia::BusinessZip ); }
+ QString businessCountry() const { return find( Qtopia::BusinessCountry ); }
+ QString businessWebpage() const { return find( Qtopia::BusinessWebPage ); }
+ QString jobTitle() const { return find( Qtopia::JobTitle ); }
+ QString department() const { return find( Qtopia::Department ); }
+ QString office() const { return find( Qtopia::Office ); }
+ QString businessPhone() const { return find( Qtopia::BusinessPhone ); }
+ QString businessFax() const { return find( Qtopia::BusinessFax ); }
+ QString businessMobile() const { return find( Qtopia::BusinessMobile ); }
+ QString businessPager() const { return find( Qtopia::BusinessPager ); }
+ QString profession() const { return find( Qtopia::Profession ); }
+ QString assistant() const { return find( Qtopia::Assistant ); }
+ QString manager() const { return find( Qtopia::Manager ); }
+ /** Multi line string containing all non-empty address info in the form
+ * Street
+ * City, State Zip
+ * Country
+ */
+ QString displayBusinessAddress() const;
+
+ //personal
+ QString spouse() const { return find( Qtopia::Spouse ); }
+ QString gender() const { return find( Qtopia::Gender ); }
+ QString birthday() const { return find( Qtopia::Birthday ); }
+ QString anniversary() const { return find( Qtopia::Anniversary ); }
+ QString nickname() const { return find( Qtopia::Nickname ); }
+ QString children() const { return find( Qtopia::Children ); }
+ QStringList childrenList() const;
+
+ // other
+ QString notes() const { return find( Qtopia::Notes ); }
+ QString groups() const { return find( Qtopia::Groups ); }
+ QStringList groupList() const;
+
+// // custom
+// const QString &customField( const QString &key )
+// { return find( Custom- + key ); }
+
+ static QStringList fields();
+ static QStringList trfields();
+
+ QString toRichText() const;
+ QMap<int, QString> toMap() const;
+ QString field( int key ) const { return find( key ); }
+
+
+ // journaling...
+ void saveJournal( journal_action action, const QString &key = QString::null );
+ void save( QString &buf ) const;
+
+ void setUid( int i )
+{ Record::setUid(i); replace( Qtopia::AddressUid , QString::number(i)); }
+
+private:
+ friend class AbTable;
+ void insert( int key, const QString &value );
+ void replace( int key, const QString &value );
+ QString find( int key ) const;
+
+ QString displayAddress( const QString &street,
+ const QString &city,
+ const QString &state,
+ const QString &zip,
+ const QString &country ) const;
+
+ Qtopia::UidGen &uidGen() { return sUidGen; }
+ static Qtopia::UidGen sUidGen;
+ QMap<int, QString> mMap;
+ ContactPrivate *d;
+};
+
+#endif
diff --git a/library/backend/event.cpp b/library/backend/event.cpp
new file mode 100644
index 0000000..50a663d
--- a/dev/null
+++ b/library/backend/event.cpp
@@ -0,0 +1,830 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "event.h"
+#include "qfiledirect_p.h"
+#include <qpe/timeconversion.h>
+#include <qpe/stringutil.h>
+#include <qpe/recordfields.h>
+#include <qbuffer.h>
+#include <time.h>
+#include "vobject_p.h"
+
+#include <stdio.h>
+
+using namespace Qtopia;
+
+static void write( QString& buf, const Event::RepeatPattern &r )
+{
+ buf += " rtype=\"";
+ switch ( r.type ) {
+ case Event::Daily:
+ buf += "Daily";
+ break;
+ case Event::Weekly:
+ buf += "Weekly";
+ break;
+ case Event::MonthlyDay:
+ buf += "MonthlyDay";
+ break;
+ case Event::MonthlyDate:
+ buf += "MonthlyDate";
+ break;
+ case Event::Yearly:
+ buf += "Yearly";
+ break;
+ default:
+ buf += "NoRepeat";
+ break;
+ }
+ buf += "\"";
+ if ( r.days > 0 )
+ buf += " rweekdays=\"" + QString::number( static_cast<int>( r.days ) ) + "\"";
+ if ( r.position != 0 )
+ buf += " rposition=\"" + QString::number( r.position ) + "\"";
+
+ buf += " rfreq=\"" + QString::number( r.frequency ) + "\"";
+ buf += " rhasenddate=\"" + QString::number( static_cast<int>( r.hasEndDate ) ) + "\"";
+ if ( r.hasEndDate )
+ buf += " enddt=\""
+ + QString::number( r.endDateUTC ? r.endDateUTC : time( 0 ) )
+ + "\"";
+ buf += " created=\"" + QString::number( r.createTime ) + "\"";
+}
+
+Qtopia::UidGen Event::sUidGen( Qtopia::UidGen::Qtopia );
+
+Event::Event() : Record()
+{
+ startUTC = endUTC = time( 0 );
+ typ = Normal;
+ hAlarm = FALSE;
+ hRepeat = FALSE;
+ aMinutes = 0;
+ aSound = Silent;
+ pattern.type = NoRepeat;
+ pattern.frequency = -1;
+}
+
+Event::Event( const QMap<int, QString> &map )
+{
+ setDescription( map[DatebookDescription] );
+ setLocation( map[Location] );
+ setCategories( idsFromString( map[DatebookCategory] ) );
+ setTimeZone( map[TimeZone] );
+ setNotes( map[Note] );
+ setStart( TimeConversion::fromUTC( map[StartDateTime].toUInt() ) );
+ setEnd( TimeConversion::fromUTC( map[EndDateTime].toUInt() ) );
+ setType( (Event::Type) map[DatebookType].toInt() );
+ setAlarm( ( map[HasAlarm] == "1" ? TRUE : FALSE ), map[AlarmTime].toInt(), (Event::SoundTypeChoice)map[SoundType].toInt() );
+ Event::RepeatPattern p;
+ p.type = (Event::RepeatType) map[ RepeatPatternType ].toInt();
+ p.frequency = map[ RepeatPatternFrequency ].toInt();
+ p.position = map[ RepeatPatternPosition ].toInt();
+ p.days = map[ RepeatPatternDays ].toInt();
+ p.hasEndDate = map[ RepeatPatternHasEndDate ].toInt();
+ p.endDateUTC = map[ RepeatPatternEndDate ].toUInt();
+ setRepeat( p );
+
+ setUid( map[ DatebookUid ].toInt() );
+}
+
+Event::~Event()
+{
+}
+
+int Event::week( const QDate& date )
+{
+ // Calculates the week this date is in within that
+ // month. Equals the "row" is is in in the month view
+ int week = 1;
+ QDate tmp( date.year(), date.month(), 1 );
+
+ if ( date.dayOfWeek() < tmp.dayOfWeek() )
+ ++week;
+
+ week += ( date.day() - 1 ) / 7;
+ return week;
+}
+
+int Event::occurrence( const QDate& date )
+{
+ // calculates the number of occurrances of this day of the
+ // week till the given date (e.g 3rd Wednesday of the month)
+ return ( date.day() - 1 ) / 7 + 1;
+}
+
+int Event::dayOfWeek( char day )
+{
+ int dayOfWeek = 1;
+ char i = Event::MON;
+ while ( !( i & day ) && i <= Event::SUN ) {
+ i <<= 1;
+ ++dayOfWeek;
+ }
+ return dayOfWeek;
+}
+
+int Event::monthDiff( const QDate& first, const QDate& second )
+{
+ return ( second.year() - first.year() ) * 12 +
+ second.month() - first.month();
+}
+
+QMap<int, QString> Event::toMap() const
+{
+ QMap<int, QString> m;
+ m.insert( DatebookDescription, description() );
+ m.insert ( Location, location() );
+ m.insert ( DatebookCategory, idsToString( categories() ) );
+ m.insert ( TimeZone, timeZone() );
+ m.insert ( Note, notes() );
+ m.insert ( StartDateTime, QString::number( TimeConversion::toUTC( start() ) ) );
+ m.insert ( EndDateTime, QString::number( TimeConversion::toUTC( end() ) ) );
+ m.insert ( DatebookType, QString::number( (int)type() ) );
+ m.insert ( HasAlarm, ( hasAlarm() ? "1" : "0" ) );
+ m.insert ( SoundType, QString::number( (int)alarmSound() ) );
+ m.insert ( AlarmTime, QString::number( alarmTime() ) );
+ m.insert ( RepeatPatternType, QString::number( static_cast<int>( repeatPattern().type ) ) );
+ m.insert ( RepeatPatternFrequency, QString::number( repeatPattern().frequency ) );
+ m.insert ( RepeatPatternPosition, QString::number( repeatPattern().position ) );
+ m.insert ( RepeatPatternDays, QString::number( repeatPattern().days ) );
+ m.insert ( RepeatPatternHasEndDate, QString::number( static_cast<int>( repeatPattern().hasEndDate ) ) );
+ m.insert ( RepeatPatternEndDate, QString::number( repeatPattern().endDateUTC ) );
+
+ m.insert( DatebookUid, QString::number( uid()) );
+
+ return m;
+}
+
+void Event::setRepeat( const RepeatPattern &p )
+{
+ setRepeat( p.type != NoRepeat, p );
+}
+
+void Event::setDescription( const QString &s )
+{
+ descript = s;
+}
+
+void Event::setLocation( const QString &s )
+{
+ locat = s;
+}
+
+// void Event::setCategory( const QString &s )
+// {
+// categ = s;
+// }
+
+void Event::setType( Type t )
+{
+ typ = t;
+}
+
+void Event::setStart( const QDateTime &d )
+{
+ startUTC = TimeConversion::toUTC( d );
+}
+
+void Event::setStart( time_t time )
+{
+ startUTC = time;
+}
+
+void Event::setEnd( const QDateTime &d )
+{
+ endUTC = TimeConversion::toUTC( d );
+}
+
+void Event::setEnd( time_t time )
+{
+ endUTC = time;
+}
+
+void Event::setTimeZone( const QString &z )
+{
+ tz = z;
+}
+
+void Event::setAlarm( bool b, int minutes, SoundTypeChoice s )
+{
+ hAlarm = b;
+ aMinutes = minutes;
+ aSound = s;
+}
+
+void Event::setRepeat( bool b, const RepeatPattern &p )
+{
+ hRepeat = b;
+ pattern = p;
+}
+
+void Event::setNotes( const QString &n )
+{
+ note = n;
+}
+
+const QString &Event::description() const
+{
+ return descript;
+}
+
+const QString &Event::location() const
+{
+ return locat;
+}
+
+// QString Event::category() const
+// {
+// return categ;
+// }
+
+Event::Type Event::type() const
+{
+ return typ;
+}
+
+QDateTime Event::start( bool actual ) const
+{
+ QDateTime dt = (startUTC > 0) ? TimeConversion::fromUTC( startUTC ) : QDateTime::currentDateTime();
+
+ if ( actual && typ == AllDay ) {
+ QTime t = dt.time();
+ t.setHMS( 0, 0, 0 );
+ dt.setTime( t );
+ }
+ return dt;
+}
+
+QDateTime Event::end( bool actual ) const
+{
+ QDateTime dt = (endUTC > 0) ? TimeConversion::fromUTC( endUTC ) : QDateTime::currentDateTime();
+
+ if ( actual && typ == AllDay ) {
+ QTime t = dt.time();
+ t.setHMS( 23, 59, 59 );
+ dt.setTime( t );
+ }
+ return dt;
+}
+
+const QString &Event::timeZone() const
+{
+ return tz;
+}
+
+bool Event::hasAlarm() const
+{
+ return hAlarm;
+}
+
+int Event::alarmTime() const
+{
+ return aMinutes;
+}
+
+Event::SoundTypeChoice Event::alarmSound() const
+{
+ return aSound;
+}
+
+bool Event::hasRepeat() const
+{
+ return doRepeat();
+}
+
+const Event::RepeatPattern &Event::repeatPattern() const
+{
+ return pattern;
+}
+
+Event::RepeatPattern &Event::repeatPattern()
+{
+ return pattern;
+}
+
+const QString &Event::notes() const
+{
+ return note;
+}
+
+bool Event::operator==( const Event &e ) const
+{
+ return ( e.descript == descript &&
+ e.locat == locat &&
+ e.categ == categ &&
+ e.typ == typ &&
+ e.startUTC == startUTC &&
+ e.endUTC == endUTC &&
+ e.tz == tz &&
+ e.hAlarm == hAlarm &&
+ e.aMinutes == aMinutes &&
+ e.aSound == aSound &&
+ e.hRepeat == hRepeat &&
+ e.pattern == pattern &&
+ e.note == note );
+}
+
+void Event::save( QString& buf )
+{
+ buf += " description=\"" + Qtopia::escapeString(descript) + "\"";
+ if ( !locat.isEmpty() )
+ buf += " location=\"" + Qtopia::escapeString(locat) + "\"";
+ // save the categoies differently....
+ QString strCats = idsToString( categories() );
+ buf += " categories=\"" + Qtopia::escapeString(strCats) + "\"";
+ buf += " uid=\"" + QString::number( uid() ) + "\"";
+ if ( (Type)typ != Normal )
+ buf += " type=\"AllDay\"";
+ if ( hAlarm ) {
+ buf += " alarm=\"" + QString::number( aMinutes ) + "\" sound=\"";
+ if ( aSound == Event::Loud )
+ buf += "loud";
+ else
+ buf += "silent";
+ buf += "\"";
+ }
+ if ( hRepeat )
+ write( buf, pattern );
+
+ buf += " start=\""
+ + QString::number( startUTC )
+ + "\"";
+
+ buf += " end=\""
+ + QString::number( endUTC )
+ + "\"";
+
+ if ( !note.isEmpty() )
+ buf += " note=\"" + Qtopia::escapeString( note ) + "\"";
+ buf += customToXml();
+}
+
+bool Event::RepeatPattern::operator==( const Event::RepeatPattern &right ) const
+{
+ // *sigh*
+ return ( type == right.type
+ && frequency == right.frequency
+ && position == right.position
+ && days == right.days
+ && hasEndDate == right.hasEndDate
+ && endDateUTC == right.endDateUTC
+ && createTime == right.createTime );
+}
+
+
+class EffectiveEventPrivate
+{
+public:
+ //currently the existence of the d pointer means multi-day repeating,
+ //msut be changed if we use the d pointer for anything else.
+ QDate startDate;
+ QDate endDate;
+};
+
+
+EffectiveEvent::EffectiveEvent()
+{
+ mDate = QDate::currentDate();
+ mStart = mEnd = QTime::currentTime();
+ d = 0;
+}
+
+EffectiveEvent::EffectiveEvent( const Event &e, const QDate &date, Position pos )
+{
+ mEvent = e;
+ mDate = date;
+ if ( pos & Start )
+ mStart = e.start( TRUE ).time();
+ else
+ mStart = QTime( 0, 0, 0 );
+
+ if ( pos & End )
+ mEnd = e.end( TRUE ).time();
+ else
+ mEnd = QTime( 23, 59, 59 );
+ d = 0;
+}
+
+EffectiveEvent::~EffectiveEvent()
+{
+ delete d;
+}
+
+EffectiveEvent::EffectiveEvent( const EffectiveEvent &e )
+{
+ d = 0;
+ *this = e;
+}
+
+EffectiveEvent& EffectiveEvent::operator=( const EffectiveEvent & e )
+{
+ if ( &e == this )
+ return *this;
+ delete d;
+ if ( e.d ) {
+ d = new EffectiveEventPrivate;
+ d->startDate = e.d->startDate;
+ d->endDate = e.d->endDate;
+ } else {
+ d = 0;
+ }
+ mEvent = e.mEvent;
+ mDate = e.mDate;
+ mStart = e.mStart;
+ mEnd = e.mEnd;
+
+ return *this;
+
+}
+
+// QString EffectiveEvent::category() const
+// {
+// return mEvent.category();
+// }
+
+const QString &EffectiveEvent::description( ) const
+{
+ return mEvent.description();
+}
+
+const QString &EffectiveEvent::location( ) const
+{
+ return mEvent.location();
+}
+
+const QString &EffectiveEvent::notes() const
+{
+ return mEvent.notes();
+}
+
+const Event &EffectiveEvent::event() const
+{
+ return mEvent;
+}
+
+const QTime &EffectiveEvent::end() const
+{
+ return mEnd;
+}
+
+const QTime &EffectiveEvent::start() const
+{
+ return mStart;
+}
+
+const QDate &EffectiveEvent::date() const
+{
+ return mDate;
+}
+
+int EffectiveEvent::length() const
+{
+ return (mEnd.hour() * 60 - mStart.hour() * 60)
+ + QABS(mStart.minute() - mEnd.minute() );
+}
+
+void EffectiveEvent::setDate( const QDate &dt )
+{
+ mDate = dt;
+}
+
+void EffectiveEvent::setStart( const QTime &start )
+{
+ mStart = start;
+}
+
+void EffectiveEvent::setEnd( const QTime &end )
+{
+ mEnd = end;
+}
+
+void EffectiveEvent::setEvent( Event e )
+{
+ mEvent = e;
+}
+
+bool EffectiveEvent::operator<( const EffectiveEvent &e ) const
+{
+ if ( mDate < e.date() )
+ return TRUE;
+ if ( mDate == e.date() )
+ return ( mStart < e.start() );
+ else
+ return FALSE;
+}
+
+bool EffectiveEvent::operator<=( const EffectiveEvent &e ) const
+{
+ return (mDate <= e.date() );
+}
+
+bool EffectiveEvent::operator==( const EffectiveEvent &e ) const
+{
+ return ( mDate == e.date()
+ && mStart == e.start()
+ && mEnd == e.end()
+ && mEvent == e.event() );
+}
+
+bool EffectiveEvent::operator!=( const EffectiveEvent &e ) const
+{
+ return !(*this == e);
+}
+
+bool EffectiveEvent::operator>( const EffectiveEvent &e ) const
+{
+ return !(*this <= e );
+}
+
+bool EffectiveEvent::operator>=(const EffectiveEvent &e) const
+{
+ return !(*this < e);
+}
+
+void EffectiveEvent::setEffectiveDates( const QDate &from, const QDate &to )
+{
+ if ( !from.isValid() ) {
+ delete d;
+ d = 0;
+ return;
+ }
+ if ( !d )
+ d = new EffectiveEventPrivate;
+ d->startDate = from;
+ d->endDate = to;
+}
+
+QDate EffectiveEvent::startDate() const
+{
+ if ( d )
+ return d->startDate;
+ else if ( mEvent.hasRepeat() )
+ return mDate; // single day, since multi-day should have a d pointer
+ else
+ return mEvent.start().date();
+}
+
+QDate EffectiveEvent::endDate() const
+{
+ if ( d )
+ return d->endDate;
+ else if ( mEvent.hasRepeat() )
+ return mDate; // single day, since multi-day should have a d pointer
+ else
+ return mEvent.end().date();
+}
+
+int EffectiveEvent::size() const
+{
+ return ( mEnd.hour() - mStart.hour() ) * 3600
+ + (mEnd.minute() - mStart.minute() * 60
+ + mEnd.second() - mStart.second() );
+}
+
+
+// vcal conversion code
+static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value )
+{
+ VObject *ret = 0;
+ if ( o && !value.isEmpty() )
+ ret = addPropValue( o, prop, value.latin1() );
+ return ret;
+}
+
+static inline VObject *safeAddProp( VObject *o, const char *prop)
+{
+ VObject *ret = 0;
+ if ( o )
+ ret = addProp( o, prop );
+ return ret;
+}
+
+static VObject *createVObject( const Event &e )
+{
+ VObject *vcal = newVObject( VCCalProp );
+ safeAddPropValue( vcal, VCVersionProp, "1.0" );
+ VObject *event = safeAddProp( vcal, VCEventProp );
+
+ safeAddPropValue( event, VCDTstartProp, TimeConversion::toISO8601( e.start() ) );
+ safeAddPropValue( event, VCDTendProp, TimeConversion::toISO8601( e.end() ) );
+ safeAddPropValue( event, "X-Qtopia-NOTES", e.description() );
+ safeAddPropValue( event, VCDescriptionProp, e.description() );
+ safeAddPropValue( event, VCLocationProp, e.location() );
+
+ if ( e.hasAlarm() ) {
+ VObject *alarm = safeAddProp( event, VCAAlarmProp );
+ QDateTime dt = e.start();
+ dt = dt.addSecs( -e.alarmTime()*60 );
+ safeAddPropValue( alarm, VCRunTimeProp, TimeConversion::toISO8601( dt ) );
+ safeAddPropValue( alarm, VCAudioContentProp,
+ (e.alarmSound() == Event::Silent ? "silent" : "alarm" ) );
+ }
+
+ safeAddPropValue( event, "X-Qtopia-TIMEZONE", e.timeZone() );
+
+ if ( e.type() == Event::AllDay )
+ safeAddPropValue( event, "X-Qtopia-AllDay", e.timeZone() );
+
+ // ### repeat missing
+
+ // ### categories missing
+
+ return vcal;
+}
+
+
+static Event parseVObject( VObject *obj )
+{
+ Event e;
+
+ bool haveAlarm = FALSE;
+ bool haveStart = FALSE;
+ bool haveEnd = FALSE;
+ QDateTime alarmTime;
+ Event::SoundTypeChoice soundType = Event::Silent;
+
+ VObjectIterator it;
+ initPropIterator( &it, obj );
+ while( moreIteration( &it ) ) {
+ VObject *o = nextVObject( &it );
+ QCString name = vObjectName( o );
+ QCString value = vObjectStringZValue( o );
+ if ( name == VCDTstartProp ) {
+ e.setStart( TimeConversion::fromISO8601( value ) );
+ haveStart = TRUE;
+ }
+ else if ( name == VCDTendProp ) {
+ e.setEnd( TimeConversion::fromISO8601( value ) );
+ haveEnd = TRUE;
+ }
+ else if ( name == "X-Qtopia-NOTES" ) {
+ e.setNotes( value );
+ }
+ else if ( name == VCDescriptionProp ) {
+ e.setDescription( value );
+ }
+ else if ( name == VCLocationProp ) {
+ e.setLocation( value );
+ }
+ else if ( name == VCAudioContentProp ) {
+ haveAlarm = TRUE;
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ QCString value = vObjectStringZValue( o );
+ if ( name == VCRunTimeProp )
+ alarmTime = TimeConversion::fromISO8601( value );
+ else if ( name == VCAudioContentProp ) {
+ if ( value == "silent" )
+ soundType = Event::Silent;
+ else
+ soundType = Event::Loud;
+ }
+ }
+ }
+ else if ( name == "X-Qtopia-TIMEZONE") {
+ e.setTimeZone( value );
+ }
+ else if ( name == "X-Qtopia-AllDay" ) {
+ e.setType( Event::AllDay );
+ }
+#if 0
+ else {
+ printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ QString value = vObjectStringZValue( o );
+ printf(" subprop: %s = %s\n", name.data(), value.latin1() );
+ }
+ }
+#endif
+ }
+
+ if ( !haveStart && !haveEnd )
+ e.setStart( QDateTime::currentDateTime() );
+
+ if ( !haveEnd ) {
+ e.setType( Event::AllDay );
+ e.setEnd( e.start() );
+ }
+
+ if ( haveAlarm ) {
+ int minutes = alarmTime.secsTo( e.start() ) / 60;
+ e.setAlarm( TRUE, minutes, soundType );
+ }
+ return e;
+}
+
+
+
+void Event::writeVCalendar( const QString &filename, const QValueList<Event> &events)
+{
+ QFileDirect f( filename.utf8().data() );
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vcard write");
+ return;
+ }
+
+ QValueList<Event>::ConstIterator it;
+ for( it = events.begin(); it != events.end(); ++it ) {
+ VObject *obj = createVObject( *it );
+ writeVObject( f.directHandle() , obj );
+ cleanVObject( obj );
+ }
+
+ cleanStrTbl();
+}
+
+void Event::writeVCalendar( const QString &filename, const Event &event)
+{
+ QFileDirect f( filename.utf8().data() );
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vcard write");
+ return;
+ }
+
+ VObject *obj = createVObject( event );
+ writeVObject( f.directHandle() , obj );
+ cleanVObject( obj );
+
+ cleanStrTbl();
+}
+
+
+QValueList<Event> Event::readVCalendar( const QString &filename )
+{
+ VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() );
+
+ QValueList<Event> events;
+
+ while ( obj ) {
+ QCString name = vObjectName( obj );
+ if ( name == VCCalProp ) {
+ VObjectIterator nit;
+ initPropIterator( &nit, obj );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ if ( name == VCEventProp )
+ events.append( parseVObject( o ) );
+ }
+ } else if ( name == VCEventProp ) {
+ // shouldn't happen, but just to be sure
+ events.append( parseVObject( obj ) );
+ }
+ VObject *t = obj;
+ obj = nextVObjectInList(obj);
+ cleanVObject( t );
+ }
+
+ return events;
+}
+
+bool Event::match( const QRegExp &r ) const
+{
+ bool returnMe;
+ returnMe = false;
+
+ if ( descript.find( r ) > -1 )
+ returnMe = true;
+ else if ( locat.find( r ) > -1 )
+ returnMe = true;
+ else if ( TimeConversion::fromUTC( startUTC ).toString().find( r ) > -1 )
+ returnMe = true;
+ else if ( TimeConversion::fromUTC( endUTC ).toString().find( r ) > -1 )
+ returnMe = true;
+ else if ( tz.find( r ) > -1 )
+ returnMe = true;
+ else if ( note.find( r ) > -1 )
+ returnMe = true;
+ else if ( doRepeat() ) {
+ if ( pattern.hasEndDate )
+ if ( TimeConversion::fromUTC( pattern.endDateUTC ).toString().find(r) > -1 )
+ returnMe = true;
+ }
+ return returnMe;
+}
diff --git a/library/backend/event.h b/library/backend/event.h
new file mode 100644
index 0000000..0ebe9ea
--- a/dev/null
+++ b/library/backend/event.h
@@ -0,0 +1,229 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __EVENT_H__
+#define __EVENT_H__
+
+#include <qdatetime.h>
+#include <qvaluelist.h>
+
+#ifdef PALMTOPCENTER
+#include <qpc/qsorter.h>
+#endif
+#include <qpe/palmtoprecord.h>
+
+#include <qpe/timeconversion.h>
+
+class EventPrivate;
+class QPC_EXPORT Event : public Qtopia::Record
+{
+public:
+ enum RepeatType { NoRepeat = -1, Daily, Weekly, MonthlyDay,
+ MonthlyDate, Yearly };
+ enum Days { MON = 0x01, TUE = 0x02, WED = 0x04, THU = 0x08,
+ FRI = 0x10, SAT = 0x20, SUN = 0x40 };
+ struct QPC_EXPORT RepeatPattern
+ {
+ RepeatPattern() {
+ type = NoRepeat; frequency = -1; days = 0; position = 0; createTime = -1;
+ hasEndDate = FALSE; endDateUTC = 0; }
+ bool operator ==( const RepeatPattern &right ) const;
+
+ RepeatType type;
+ int frequency;
+ int position; // the posistion in the month (e.g. the first sunday, etc) positive, count from the front negative count from the end...
+ char days; // a mask for days OR in your days!
+ bool hasEndDate;
+ QDate endDate() const { return TimeConversion::fromUTC( endDateUTC ).date(); }
+ void setEndDate( const QDate &dt ) { endDateUTC = TimeConversion::toUTC( dt ); }
+ time_t endDateUTC;
+ time_t createTime;
+ };
+
+ Event();
+ Event( const QMap<int, QString > & map );
+ virtual ~Event();
+
+ QMap<int, QString> toMap() const;
+
+ static void writeVCalendar( const QString &filename, const QValueList<Event> &events);
+ static void writeVCalendar( const QString &filename, const Event &event);
+ static QValueList<Event> readVCalendar( const QString &filename );
+
+ enum Type { Normal, AllDay };
+ enum SoundTypeChoice { Silent, Loud };
+
+ bool operator<( const Event &e1) const { return start() < e1.start(); };
+ bool operator<=( const Event &e1 ) const { return start() <= e1.start(); };
+ bool operator!=( const Event &e1 ) const { return !( *this == e1 ); };
+ bool operator>( const Event &e1 ) const { return start() > e1.start(); };
+ bool operator>=(const Event &e1 ) const { return start() >= e1.start(); };
+ bool operator==( const Event &e ) const;
+
+ void setDescription( const QString &s );
+ const QString &description() const;
+
+ void setLocation( const QString &s );
+ const QString &location() const;
+
+ void setType( Type t );
+ Type type() const;
+ void setStart( const QDateTime &d );
+ void setStart( time_t time );
+ QDateTime start( bool actual = FALSE ) const;
+ time_t startTime() const { return startUTC; }
+ void setEnd( const QDateTime &e );
+ void setEnd( time_t time );
+ QDateTime end( bool actual = FALSE ) const;
+ time_t endTime() const { return endUTC; }
+ void setTimeZone( const QString & );
+ const QString &timeZone() const;
+ void setAlarm( bool b, int minutes, SoundTypeChoice );
+ bool hasAlarm() const;
+ int alarmTime() const;
+ SoundTypeChoice alarmSound() const;
+ void setRepeat( bool b, const RepeatPattern &p );
+ void setRepeat( const RepeatPattern &p );
+ bool hasRepeat() const;
+ const RepeatPattern &repeatPattern() const;
+ RepeatPattern &repeatPattern();
+ void setNotes( const QString &n );
+ const QString &notes() const;
+ bool doRepeat() const { return pattern.type != NoRepeat; }
+
+ void save( QString& buf );
+ //void load( Node *n );
+
+ // helper function to calculate the week of the given date
+ static int week( const QDate& date );
+ // calculates the number of occurrences of the week day of
+ // the given date from the start of the month
+ static int occurrence( const QDate& date );
+ // returns a proper days-char for a given dayOfWeek()
+ static char day( int dayOfWeek ) { return 1 << ( dayOfWeek - 1 ); }
+ // returns the dayOfWeek for the *first* day it finds (ignores
+ // any further days!). Returns 1 (Monday) if there isn't any day found
+ static int dayOfWeek( char day );
+ // returns the difference of months from first to second.
+ static int monthDiff( const QDate& first, const QDate& second );
+ bool match( const QRegExp &r ) const;
+
+private:
+ Qtopia::UidGen &uidGen() { return sUidGen; }
+ static Qtopia::UidGen sUidGen;
+
+ QString descript, locat, categ;
+ Type typ : 4;
+ bool startTimeDirty : 1;
+ bool endTimeDirty : 1;
+ time_t startUTC, endUTC;
+ QString tz;
+ bool hAlarm, hRepeat;
+ int aMinutes;
+ SoundTypeChoice aSound;
+ RepeatPattern pattern;
+ QString note;
+ EventPrivate *d;
+};
+
+// Since an event spans multiple day, it is better to have this
+// class to represent a day instead of creating many
+// dummy events...
+
+class EffectiveEventPrivate;
+class QPC_EXPORT EffectiveEvent
+{
+public:
+ // If we calculate the effective event of a multi-day event
+ // we have to figure out whether we are at the first day,
+ // at the end, or anywhere else ("middle"). This is important
+ // for the start/end times (00:00/23:59)
+ // MidWay: 00:00 -> 23:59, as we are "in the middle" of a multi-
+ // day event
+ // Start: start time -> 23:59
+ // End: 00:00 -> end time
+ // Start | End == StartEnd: for single-day events (default)
+ // here we draw start time -> end time
+ enum Position { MidWay = 0, Start = 1, End = 2, StartEnd = 3 };
+
+ EffectiveEvent();
+ EffectiveEvent( const Event &event, const QDate &startDate, Position pos = StartEnd );
+ EffectiveEvent( const EffectiveEvent & );
+ EffectiveEvent& operator=( const EffectiveEvent & );
+ ~EffectiveEvent();
+
+
+ bool operator<( const EffectiveEvent &e ) const;
+ bool operator<=( const EffectiveEvent &e ) const;
+ bool operator==( const EffectiveEvent &e ) const;
+ bool operator!=( const EffectiveEvent &e ) const;
+ bool operator>( const EffectiveEvent &e ) const;
+ bool operator>= ( const EffectiveEvent &e ) const;
+
+ void setStart( const QTime &start );
+ void setEnd( const QTime &end );
+ void setEvent( Event e );
+ void setDate( const QDate &date );
+ void setEffectiveDates( const QDate &from, const QDate &to );
+
+ // QString category() const;
+ const QString &description() const;
+ const QString &location() const;
+ const QString &notes() const;
+ const Event &event() const;
+ const QTime &start() const;
+ const QTime &end() const;
+ const QDate &date() const;
+ int length() const;
+ int size() const;
+
+ QDate startDate() const;
+ QDate endDate() const;
+
+private:
+ class EffectiveEventPrivate *d;
+ Event mEvent;
+ QDate mDate;
+ QTime mStart,
+ mEnd;
+
+};
+
+#ifdef PALMTOPCENTER
+class QPC_EXPORT EffectiveEventSizeSorter : public QSorter<EffectiveEvent>
+{
+public:
+ int compare( const EffectiveEvent& a, const EffectiveEvent& b ) const
+ {
+ return a.size() - b.size();
+ }
+};
+
+class QPC_EXPORT EffectiveEventTimeSorter : public QSorter<EffectiveEvent>
+{
+public:
+ int compare( const EffectiveEvent& a, const EffectiveEvent& b ) const
+ {
+ return a.start().secsTo( b.start() );
+ }
+};
+#endif
+
+#endif
diff --git a/library/backend/palmtoprecord.cpp b/library/backend/palmtoprecord.cpp
new file mode 100644
index 0000000..0d57699
--- a/dev/null
+++ b/library/backend/palmtoprecord.cpp
@@ -0,0 +1,127 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included
+** in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+** PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "palmtoprecord.h"
+#include "stringutil.h"
+#include <qstringlist.h>
+
+namespace Qtopia {
+
+Record &Record::operator=( const Record &c )
+{
+ mUid = c.mUid;
+ mCats = c.mCats;
+ customMap = c.customMap;
+ return *this;
+}
+
+void Record::setCategories( int single )
+{
+ if ( single == 0 )
+ return;
+ mCats.resize(1);
+ mCats[0] = single;
+}
+
+// convenience methods provided for loading and saving to xml
+QString Record::idsToString( const QArray<int> &cats )
+{
+ QString str;
+ for ( uint i = 0; i < cats.size(); i++ )
+ if ( i == 0 )
+ str = QString::number( cats[int(i)] );
+ else
+ str += ";" + QString::number( cats[int(i)] );
+
+ return str;
+}
+
+// convenience methods provided for loading and saving to xml
+QArray<int> Record::idsFromString( const QString &str )
+{
+ QStringList catStrs = QStringList::split( ";", str );
+ QArray<int> cats( catStrs.count() );
+ uint i = 0;
+ for ( QStringList::ConstIterator it = catStrs.begin();
+ it != catStrs.end(); ++it ) {
+ cats[int(i)] = (*it).toInt();
+ i++;
+ }
+ return cats;
+}
+
+/*!
+ Returns the string stored for the custom field \a key.
+ Returns a null string if the field does not exist.
+ */
+QString Record::customField( const QString &key) const
+{
+ if (customMap.contains(key))
+ return customMap[key];
+
+ return QString::null;
+}
+
+/*!
+ Sets the string stored for the custom field \a key to \a value.
+ */
+void Record::setCustomField( const QString &key, const QString &value)
+{
+ qWarning("setting custom " + key + " to " + value);
+ if (customMap.contains(key))
+ customMap.replace(key, value);
+ else
+ customMap.insert(key, value);
+
+ qWarning(QString("custom size %1").arg(customMap.count()));
+}
+
+/*!
+ Removes the custom field \a key.
+ */
+void Record::removeCustomField(const QString &key)
+{
+ customMap.remove(key);
+}
+
+QString Record::customToXml() const
+{
+ //qWarning(QString("writing custom %1").arg(customMap.count()));
+ QString buf(" ");
+ for ( QMap<QString, QString>::ConstIterator cit = customMap.begin();
+ cit != customMap.end(); ++cit) {
+ qWarning(".ITEM.");
+ buf += cit.key();
+ buf += "=\"";
+ buf += escapeString(cit.data());
+ buf += "\" ";
+ }
+ return buf;
+}
+
+void Record::dump( const QMap<int, QString> &map )
+{
+ QMap<int, QString>::ConstIterator it;
+ for( it = map.begin(); it != map.end(); ++it )
+ qDebug("%d : %s", it.key(), it.data().local8Bit().data() );
+}
+
+}
+
diff --git a/library/backend/palmtoprecord.h b/library/backend/palmtoprecord.h
new file mode 100644
index 0000000..0372011
--- a/dev/null
+++ b/library/backend/palmtoprecord.h
@@ -0,0 +1,94 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included
+** in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+** PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QTPALMTOP_RECORD_H
+#define QTPALMTOP_RECORD_H
+
+#include <qglobal.h>
+#include "qpcglobal.h"
+#include "palmtopuidgen.h"
+#include <qarray.h>
+#include <qmap.h>
+
+#if defined(QPC_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QPC_EXPORT QMap<QString, QString>;
+// MOC_SKIP_END
+#endif
+
+class QRegExp;
+namespace Qtopia {
+
+class RecordPrivate;
+class QPC_EXPORT Record
+{
+public:
+ Record() : mUid(0), mCats() { }
+ Record( const Record &c ) : mUid( c.mUid ), mCats ( c.mCats ), customMap(c.customMap) { }
+ virtual ~Record() { }
+
+ Record &operator=( const Record &c );
+
+ virtual bool match( const QRegExp & ) const { return FALSE; }
+
+ void setCategories( const QArray<int> &v ) { mCats = v; }
+ void setCategories( int single );
+ const QArray<int> &categories() const { return mCats; }
+
+ int uid() const { return mUid; };
+ virtual void setUid( int i ) { mUid = i; uidGen().store( mUid ); }
+ bool isValidUid() const { return mUid != 0; }
+ void assignUid() { setUid( uidGen().generate() ); }
+
+ virtual QString customField(const QString &) const;
+ virtual void setCustomField(const QString &, const QString &);
+ virtual void removeCustomField(const QString &);
+
+ virtual bool operator == ( const Record &r ) const
+{ return mUid == r.mUid; }
+ virtual bool operator != ( const Record &r ) const
+{ return mUid != r.mUid; }
+
+ // convenience methods provided for loading and saving to xml
+ static QString idsToString( const QArray<int> &ids );
+ // convenience methods provided for loading and saving to xml
+ static QArray<int> idsFromString( const QString &str );
+
+ // for debugging
+ static void dump( const QMap<int, QString> &map );
+
+protected:
+ virtual UidGen &uidGen() = 0;
+
+ virtual QString customToXml() const;
+
+private:
+ int mUid;
+ QArray<int> mCats;
+
+ QMap<QString, QString> customMap;
+
+ RecordPrivate *d;
+};
+
+}
+
+#endif
diff --git a/library/backend/palmtopuidgen.h b/library/backend/palmtopuidgen.h
new file mode 100644
index 0000000..1a16681
--- a/dev/null
+++ b/library/backend/palmtopuidgen.h
@@ -0,0 +1,83 @@
+#ifndef QTPALMTOP_UIDGEN_H
+#define QTPALMTOP_UIDGEN_H
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** Licensees holding valid Qtopia Developer license may use this
+** file in accordance with the Qtopia Developer License Agreement
+** provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+** PURPOSE.
+**
+** email sales@trolltech.com for information about Qtopia License
+** Agreements.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <time.h>
+#include <qmap.h>
+#include "qpcglobal.h"
+
+#if defined(QPC_TEMPLATEDLL)
+// MOC_SKIP_BEGIN
+template class QPC_EXPORT QMap< int, bool >;
+// MOC_SKIP_END
+#endif
+
+namespace Qtopia {
+
+
+class QPC_EXPORT UidGen
+{
+public:
+ enum Type { Qtopia, PalmtopCenter };
+
+ UidGen() : type( Qtopia ), sign( -1 ), ids()
+{
+#ifdef PALMTOPCENTER
+ type = PalmtopCenter;
+ sign = 1;
+#endif
+}
+ UidGen( Type t ) : type(t), sign(1), ids()
+{
+ if ( t == Qtopia )
+ sign = -1;
+}
+
+ virtual ~UidGen() { }
+
+ int generate() const
+{
+ int id = sign * (int) ::time(NULL);
+ while ( ids.contains( id ) ) {
+ id += sign;
+
+ // check for overflow cases; if so, wrap back to beginning of
+ // set ( -1 or 1 )
+ if ( sign == -1 && id > 0 || sign == 1 && id < 0 )
+ id = sign;
+ }
+ return id;
+}
+
+ void store(int id) { ids.insert(id, TRUE); }
+ bool isUnique(int id) const { return (!ids.contains(id)); }
+
+private:
+ Type type;
+ int sign;
+ QMap<int, bool> ids;
+
+};
+
+}
+
+#endif
diff --git a/library/backend/qfiledirect_p.h b/library/backend/qfiledirect_p.h
new file mode 100644
index 0000000..fc29ac5
--- a/dev/null
+++ b/library/backend/qfiledirect_p.h
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of the Qtopia Environment.
+**
+** Licensees holding valid Qtopia Developer license may use this
+** file in accordance with the Qtopia Developer License Agreement
+** provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+** PURPOSE.
+**
+** email sales@trolltech.com for information about Qtopia License
+** Agreements.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QFILE_DIRECT_H
+#define QFILE_DIRECT_H
+#include <qfile.h>
+#include <qpe/qpcglobal.h>
+
+class QPC_EXPORT QFileDirect : public QFile
+{
+public:
+ QFileDirect() : QFile() { }
+ QFileDirect( const QString &name ) : QFile(name) { }
+
+ FILE *directHandle() { return fh; }
+};
+
+#endif \ No newline at end of file
diff --git a/library/backend/qpcglobal.h b/library/backend/qpcglobal.h
new file mode 100644
index 0000000..0d60272
--- a/dev/null
+++ b/library/backend/qpcglobal.h
@@ -0,0 +1,50 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** Licensees holding valid Qtopia Developer license may use this
+** file in accordance with the Qtopia Developer License Agreement
+** provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+** PURPOSE.
+**
+** email sales@trolltech.com for information about Qtopia License
+** Agreements.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QPC_GLOBAL_H
+#define QPC_GLOBAL_H
+
+#if ( defined(Q_OS_WIN32) || defined(Q_OS_WIN64) ) && defined(PALMTOPCENTER)
+#include <qglobal.h>
+// # if defined(QT_NODLL)
+//# undef QPC_MAKEDLL
+//# undef QPC_DLL
+# if defined(QPC_MAKEDLL) /* create a Qt DLL library */
+# if defined(QPC_DLL)
+# undef QPC_DLL
+# endif
+# define QPC_EXPORT __declspec(dllexport)
+# define QPC_TEMPLATEDLL
+# undef QPC_DISABLE_COPY /* avoid unresolved externals */
+# elif defined(QPC_DLL) /* use a Qt DLL library */
+# define QPC_EXPORT __declspec(dllimport)
+# define QPC_TEMPLATEDLL
+# undef QPC_DISABLE_COPY /* avoid unresolved externals */
+# endif
+#else
+# undef QPC_MAKEDLL /* ignore these for other platforms */
+# undef QPC_DLL
+#endif
+#endif
+
+#ifndef QPC_EXPORT
+# define QPC_EXPORT
+#endif
diff --git a/library/backend/recordfields.h b/library/backend/recordfields.h
new file mode 100644
index 0000000..3cddde2
--- a/dev/null
+++ b/library/backend/recordfields.h
@@ -0,0 +1,135 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** Licensees holding valid Qtopia Developer license may use this
+** file in accordance with the Qtopia Developer License Agreement
+** provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+** PURPOSE.
+**
+** email sales@trolltech.com for information about Qtopia License
+** Agreements.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef QPC_RECORD_FIELDS_H
+#define QPC_RECORD_FIELDS_H
+#include "qpcglobal.h"
+
+// dataset = "addressbook"
+namespace Qtopia
+{
+ static const int UID_ID = 0;
+ static const int CATEGORY_ID = 1;
+
+ enum AddressBookFields {
+ AddressUid = UID_ID,
+ AddressCategory = CATEGORY_ID,
+
+ Title,
+ FirstName,
+ MiddleName,
+ LastName,
+ Suffix,
+ FileAs,
+
+ // email
+ DefaultEmail,
+ Emails,
+
+ // home
+ HomeStreet,
+ HomeCity,
+ HomeState,
+ HomeZip,
+ HomeCountry,
+ HomePhone,
+ HomeFax,
+ HomeMobile,
+ HomeWebPage,
+
+ // business
+ Company,
+ BusinessStreet,
+ BusinessCity,
+ BusinessState,
+ BusinessZip,
+ BusinessCountry,
+ BusinessWebPage,
+ JobTitle,
+ Department,
+ Office,
+ BusinessPhone,
+ BusinessFax,
+ BusinessMobile,
+ BusinessPager,
+ Profession,
+ Assistant,
+ Manager,
+
+ //personal
+ Spouse,
+ Gender,
+ Birthday,
+ Anniversary,
+ Nickname,
+ Children,
+
+ // other
+ Notes,
+ Groups
+ };
+
+ // dataset = "todolist"
+ enum TaskFields {
+ TaskUid = UID_ID,
+ TaskCategory = CATEGORY_ID,
+
+ HasDate,
+ Completed,
+ TaskDescription,
+ Priority,
+ Date
+ };
+
+ // dataset = "categories" for todos
+ enum CategoryFields {
+ CatUid = UID_ID,
+ CatName,
+ CatAppGroup
+ };
+
+
+// dataset = "datebook"
+ enum DatebookFields {
+ DatebookUid = UID_ID,
+ DatebookCategory = CATEGORY_ID,
+
+ DatebookDescription,
+ Location,
+ TimeZone,
+ Note,
+ StartDateTime,
+ EndDateTime,
+ DatebookType,
+ HasAlarm,
+ SoundType,
+ AlarmTime,
+
+ RepeatPatternType,
+ RepeatPatternFrequency,
+ RepeatPatternPosition,
+ RepeatPatternDays,
+ RepeatPatternHasEndDate,
+ RepeatPatternEndDate,
+ };
+};
+
+
+#endif
diff --git a/library/backend/stringutil.cpp b/library/backend/stringutil.cpp
new file mode 100644
index 0000000..df58f54
--- a/dev/null
+++ b/library/backend/stringutil.cpp
@@ -0,0 +1,415 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included
+** in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+** PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "stringutil.h"
+#include <qregexp.h>
+#include <qstringlist.h>
+
+namespace Qtopia
+{
+
+
+
+/*
+ Very, very simple Latin-1 only collation guaranteed to displease anyone
+ who actually uses the non-ASCII characters.
+ */
+
+static const char collationHack[] = {
+0x00, //C-@
+0x01, //C-A
+0x02, //C-B
+0x03, //C-C
+0x04, //C-D
+0x05, //C-E
+0x06, //C-F
+0x07, //C-G
+0x08, //C-H
+0x09, //C-I
+0x0a, //C-J
+0x0b, //C-K
+0x0c, //C-L
+0x0d, //C-M
+0x0e, //C-N
+0x0f, //C-O
+0x10, //C-P
+0x11, //C-Q
+0x12, //C-R
+0x13, //C-S
+0x14, //C-T
+0x15, //C-U
+0x16, //C-V
+0x17, //C-W
+0x18, //C-X
+0x19, //C-Y
+0x1a, //C-Z
+0x1b, //C-[
+0x1c, //C-\
+0x1d, //C-]
+0x1e, //C-^
+0x1f, //C-_
+' ', //
+'!', //!
+'"', //"
+'#', //#
+'$', //$
+'%', //%
+'&', //&
+'\'', //'
+'(', //(
+')', //)
+'*', //*
+'+', //+
+',', //,
+'-', //-
+'.', //.
+'/', ///
+0x80, //0
+0x81, //1
+0x82, //2
+0x83, //3
+0x84, //4
+0x85, //5
+0x86, //6
+0x87, //7
+0x88, //8
+0x89, //9
+':', //:
+';', //;
+'<', //<
+'=', //=
+'>', //>
+'?', //?
+'@', //@
+'A', //A
+'B', //B
+'C', //C
+'D', //D
+'E', //E
+'F', //F
+'G', //G
+'H', //H
+'I', //I
+'J', //J
+'K', //K
+'L', //L
+'M', //M
+'N', //N
+'O', //O
+'P', //P
+'Q', //Q
+'R', //R
+'S', //S
+'T', //T
+'U', //U
+'V', //V
+'W', //W
+'X', //X
+'Y', //Y
+'Z', //Z
+'[', //[
+'\\', //\
+']', //]
+'^', //^
+'_', //_
+'`', //`
+'A', //a
+'B', //b
+'C', //c
+'D', //d
+'E', //e
+'F', //f
+'G', //g
+'H', //h
+'I', //i
+'J', //j
+'K', //k
+'L', //l
+'M', //m
+'N', //n
+'O', //o
+'P', //p
+'Q', //q
+'R', //r
+'S', //s
+'T', //t
+'U', //u
+'V', //v
+'W', //w
+'X', //x
+'Y', //y
+'Z', //z
+'{', //{
+'|', //|
+'}', //}
+'~', //~
+'', //
+0x80, //C-M-@
+0x81, //C-M-A
+0x82, //C-M-B
+0x83, //C-M-C
+0x84, //C-M-D
+0x85, //C-M-E
+0x86, //C-M-F
+0x87, //C-M-G
+0x88, //C-M-H
+0x89, //C-M-I
+0x8a, //C-M-J
+0x8b, //C-M-K
+0x8c, //C-M-L
+0x8d, //C-M-M
+0x8e, //C-M-N
+0x8f, //C-M-O
+0x90, //C-M-P
+0x91, //C-M-Q
+0x92, //C-M-R
+0x93, //C-M-S
+0x94, //C-M-T
+0x95, //C-M-U
+0x96, //C-M-V
+0x97, //C-M-W
+0x98, //C-M-X
+0x99, //C-M-Y
+0x9a, //C-M-Z
+0x9b, //C-M-[
+0x9c, //C-M-\
+0x9d, //C-M-]
+0x9e, //C-M-^
+0x9f, //C-M-_
+'', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'A', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'O', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'P', //
+'', //
+'', //
+'', //
+'O', //
+'', //
+'', //
+'', //
+'', //
+'', //
+'A', //
+'A', //
+'A', //
+'A', //
+'A', //
+'A', //
+'A', //
+'C', //
+'E', //
+'E', //
+'E', //
+'E', //
+'I', //
+'I', //
+'I', //
+'I', //
+'D', //
+'N', //
+'O', //
+'O', //
+'O', //
+'O', //
+'O', //
+'', //
+'O', //
+'U', //
+'U', //
+'U', //
+'U', //
+'Y', //
+'T', //
+'S', //
+'A', //
+'A', //
+'A', //
+'A', //
+'A', //
+'A', //
+'A', //
+'C', //
+'E', //
+'E', //
+'E', //
+'E', //
+'I', //
+'I', //
+'I', //
+'I', //
+'D', //
+'N', //
+'O', //
+'O', //
+'O', //
+'O', //
+'O', //
+'', //
+'O', //
+'U', //
+'U', //
+'U', //
+'U', //
+'Y', //
+'T', //
+'Y', //
+};
+
+
+
+
+
+static void hackString ( QString &s )
+{
+ int len = s.length();
+ const QChar* uc = s.unicode();
+ for ( int i = 0; i < len; i++ ) {
+ if ( !uc++->row() )
+ s[i] = collationHack[s[i].cell()];
+ }
+}
+
+QString buildSortKey( const QString & s )
+{
+ QString res = s;
+ hackString( res );
+ return res;
+}
+
+QString buildSortKey( const QString & s1, const QString & s2 )
+{
+ QString res = s1 + QChar( '\0' ) + s2;
+ hackString( res );
+ return res;
+}
+
+QString buildSortKey( const QString & s1, const QString & s2,
+ const QString & s3 )
+{
+ QString res = s1 + QChar( '\0' ) + s2 + QChar( '\0' ) + s3;
+ hackString( res );
+ return res;
+}
+
+static inline QChar coll( QChar u )
+{
+ return u.row() ? u : QChar(collationHack[ u.cell() ]);
+}
+
+
+int compare( const QString & s1, const QString & s2 )
+{
+ const QChar* u1 = s1.unicode();
+ const QChar* u2 = s2.unicode();
+
+ if ( u1 == u2 )
+ return 0;
+ if ( u1 == 0 )
+ return 1;
+ if ( u2 == 0 )
+ return -1;
+ int l=QMIN(s1.length(),s2.length());
+ while ( l-- && coll(*u1) == coll(*u2) )
+ u1++,u2++;
+ if ( l==-1 )
+ return ( s1.length()-s2.length() );
+ return u1->unicode() - u2->unicode();
+}
+
+QString simplifyMultiLineSpace( const QString &multiLine )
+{
+ QString result;
+ QStringList lines = QStringList::split("\n", multiLine);
+ for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it ) {
+ if ( it != lines.begin() )
+ result += "\n";
+ result += (*it).simplifyWhiteSpace();
+ }
+ return result;
+}
+
+QString escapeString( const QString& plain )
+{
+ QString tmp(plain);
+ int pos = tmp.length();
+ const QChar *uc = plain.unicode();
+ while ( pos-- ) {
+ unsigned char ch = uc[pos].latin1();
+ if ( ch == '&' )
+ tmp.replace( pos, 1, "&amp;" );
+ else if ( ch == '<' )
+ tmp.replace( pos, 1, "&lt;" );
+ else if ( ch == '>' )
+ tmp.replace( pos, 1, "&gt;" );
+ else if ( ch == '\"' )
+ tmp.replace( pos, 1, "&quot;" );
+ }
+ return tmp;
+}
+
+QString plainString( const char* escaped, unsigned int length )
+{
+ return plainString( QString::fromUtf8( escaped, length ) );
+}
+
+QString plainString( const QCString& string )
+{
+ // We first have to pass it through a ::fromUtf8()
+ return plainString( string.data(), string.length() );
+}
+
+QString plainString( const QString& string )
+{
+ QString tmp( string );
+ int pos = -1;
+ while ( (pos = tmp.find( "&", pos +1 ) ) != -1 ) {
+ if ( tmp.find( "&amp;", pos ) == pos )
+ tmp.replace( pos, 5, "&" );
+ else if ( tmp.find( "&lt;", pos ) == pos )
+ tmp.replace( pos, 4, "<" );
+ else if( tmp.find( "&gt;", pos ) == pos )
+ tmp.replace( pos, 4, ">" );
+ else if ( tmp.find( "&quot;", pos ) == pos )
+ tmp.replace( pos, 6, "\"" );
+ }
+ return tmp;
+}
+
+} // namespace QPC
diff --git a/library/backend/stringutil.h b/library/backend/stringutil.h
new file mode 100644
index 0000000..e9daf70
--- a/dev/null
+++ b/library/backend/stringutil.h
@@ -0,0 +1,57 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included
+** in the packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
+** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
+** PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef QTPALMTOP_stringutil_h__
+#define QTPALMTOP_stringutil_h__
+
+#include <qstring.h>
+#include "qpcglobal.h"
+
+namespace Qtopia
+{
+
+// Simplifies white space within each line but keeps the new line characters
+QString QPC_EXPORT simplifyMultiLineSpace( const QString &multiLine );
+
+// Creates a QString which doesn't contain any "dangerous"
+// characters (i.e. <, >, &, ")
+QString QPC_EXPORT escapeString( const QString& plain );
+
+// Takes a UTF-8!! string and removes all the XML thingies (entities?)
+// from the string and also calls fromUtf8() on it... so make sure
+// to pass a QCString/const char* with UTF-8 data only
+QString QPC_EXPORT plainString( const char* escaped, unsigned int length );
+QString QPC_EXPORT plainString( const QCString& string );
+
+QString QPC_EXPORT plainString( const QString& string );
+
+
+// collation functions
+int compare( const QString & s1, const QString & s2 );
+QString buildSortKey( const QString & s );
+QString buildSortKey( const QString & s1, const QString & s2 );
+QString buildSortKey( const QString & s1, const QString & s2,
+ const QString & s3 );
+
+}
+
+#endif
diff --git a/library/backend/task.cpp b/library/backend/task.cpp
new file mode 100644
index 0000000..e7d697d
--- a/dev/null
+++ b/library/backend/task.cpp
@@ -0,0 +1,271 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/task.h>
+#include <qregexp.h>
+#include <qstring.h>
+#include <qpe/recordfields.h>
+#include "vobject_p.h"
+#include "timeconversion.h"
+#include "qfiledirect_p.h"
+
+#include <stdio.h>
+
+using namespace Qtopia;
+UidGen Task::sUidGen( UidGen::Qtopia );
+
+Task::Task() : Record(), mDue( FALSE ),
+mDueDate( QDate::currentDate() ),
+mCompleted( FALSE ), mPriority( 3 ), mDesc()
+{
+}
+
+Task::Task( const QMap<int, QString> &m ) : Record(), mDue( FALSE ),
+mDueDate( QDate::currentDate() ), mCompleted( FALSE ), mPriority( 3 ), mDesc()
+{
+ //qDebug("Task::Task fromMap");
+ //dump( m );
+ for ( QMap<int,QString>::ConstIterator it = m.begin(); it != m.end();++it )
+ switch ( (TaskFields) it.key() ) {
+ case HasDate: if ( *it == "1" ) mDue = TRUE; break;
+ case Completed: setCompleted( *it == "1" ); break;
+ case TaskCategory: setCategories( idsFromString( *it ) ); break;
+ case TaskDescription: setDescription( *it ); break;
+ case Priority: setPriority( (*it).toInt() ); break;
+ case Date: mDueDate = TimeConversion::fromString( (*it) ); break;
+ case TaskUid: setUid( (*it).toInt() ); break;
+ }
+}
+
+Task::~Task()
+{
+}
+
+QMap<int, QString> Task::toMap() const
+{
+ QMap<int, QString> m;
+ m.insert( HasDate, hasDueDate() ? "1" : "0" );
+ m.insert( Completed, isCompleted() ? "1" : "0" );
+ m.insert( TaskCategory, idsToString( categories() ) );
+ m.insert( TaskDescription, description() );
+ m.insert( Priority, QString::number( priority() ) );
+ m.insert( Date, TimeConversion::toString( dueDate() ) );
+ m.insert( TaskUid, QString::number(uid()) );
+
+ //qDebug("Task::toMap");
+ //dump( m );
+ return m;
+}
+
+void Task::save( QString& buf ) const
+{
+ buf += " Completed=\"";
+ // qDebug( "writing %d", complete );
+ buf += QString::number( (int)mCompleted );
+ buf += "\"";
+ buf += " HasDate=\"";
+ // qDebug( "writing %d", );
+ buf += QString::number( (int)mDue );
+ buf += "\"";
+ buf += " Priority=\"";
+ // qDebug ("writing %d", prior );
+ buf += QString::number( mPriority );
+ buf += "\"";
+ buf += " Categories=\"";
+ buf += Qtopia::Record::idsToString( categories() );
+ buf += "\"";
+ buf += " Description=\"";
+ // qDebug( "writing note %s", note.latin1() );
+ buf += Qtopia::escapeString( mDesc );
+ buf += "\"";
+ if ( mDue ) {
+ // qDebug("saving ymd %d %d %d", mDueDate.year(), mDueDate.month(),
+ // mDueDate.day() );
+ buf += " DateYear=\"";
+ buf += QString::number( mDueDate.year() );
+ buf += "\"";
+ buf += " DateMonth=\"";
+ buf += QString::number( mDueDate.month() );
+ buf += "\"";
+ buf += " DateDay=\"";
+ buf += QString::number( mDueDate.day() );
+ buf += "\"";
+ }
+ buf += customToXml();
+ // qDebug ("writing uid %d", uid() );
+ buf += " Uid=\"";
+ buf += QString::number( uid() );
+ // terminate it in the application...
+ buf += "\"";
+}
+
+bool Task::match ( const QRegExp &r ) const
+{
+ // match on priority, description on due date...
+ bool match;
+ match = false;
+ if ( QString::number( mPriority ).find( r ) > -1 )
+ match = true;
+ else if ( mDue && mDueDate.toString().find( r ) > -1 )
+ match = true;
+ else if ( mDesc.find( r ) > -1 )
+ match = true;
+ return match;
+}
+
+static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value )
+{
+ VObject *ret = 0;
+ if ( o && !value.isEmpty() )
+ ret = addPropValue( o, prop, value.latin1() );
+ return ret;
+}
+
+static inline VObject *safeAddProp( VObject *o, const char *prop)
+{
+ VObject *ret = 0;
+ if ( o )
+ ret = addProp( o, prop );
+ return ret;
+}
+
+
+static VObject *createVObject( const Task &t )
+{
+ VObject *vcal = newVObject( VCCalProp );
+ safeAddPropValue( vcal, VCVersionProp, "1.0" );
+ VObject *task = safeAddProp( vcal, VCTodoProp );
+
+ if ( t.hasDueDate() )
+ safeAddPropValue( task, VCDueProp, TimeConversion::toISO8601( t.dueDate() ) );
+ safeAddPropValue( task, VCDescriptionProp, t.description() );
+ if ( t.isCompleted() )
+ safeAddPropValue( task, VCStatusProp, "COMPLETED" );
+ safeAddPropValue( task, VCPriorityProp, QString::number( t.priority() ) );
+
+ return vcal;
+}
+
+
+static Task parseVObject( VObject *obj )
+{
+ Task t;
+
+ VObjectIterator it;
+ initPropIterator( &it, obj );
+ while( moreIteration( &it ) ) {
+ VObject *o = nextVObject( &it );
+ QCString name = vObjectName( o );
+ QCString value = vObjectStringZValue( o );
+ if ( name == VCDueProp ) {
+ t.setDueDate( TimeConversion::fromISO8601( value ).date(), TRUE );
+ }
+ else if ( name == VCDescriptionProp ) {
+ t.setDescription( value );
+ }
+ else if ( name == VCStatusProp ) {
+ if ( value == "COMPLETED" )
+ t.setCompleted( TRUE );
+ }
+ else if ( name == VCPriorityProp ) {
+ t.setPriority( value.toInt() );
+ }
+#if 0
+ else {
+ printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
+ VObjectIterator nit;
+ initPropIterator( &nit, o );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ QString value = vObjectStringZValue( o );
+ printf(" subprop: %s = %s\n", name.data(), value.latin1() );
+ }
+ }
+#endif
+ }
+
+ return t;
+}
+
+
+
+void Task::writeVCalendar( const QString &filename, const QValueList<Task> &tasks)
+{
+ QFileDirect f( filename.utf8().data() );
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vcard write");
+ return;
+ }
+
+ QValueList<Task>::ConstIterator it;
+ for( it = tasks.begin(); it != tasks.end(); ++it ) {
+ VObject *obj = createVObject( *it );
+ writeVObject(f.directHandle() , obj );
+ cleanVObject( obj );
+ }
+
+ cleanStrTbl();
+}
+
+void Task::writeVCalendar( const QString &filename, const Task &task)
+{
+ QFileDirect f( filename.utf8().data() );
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vcard write");
+ return;
+ }
+
+ VObject *obj = createVObject( task );
+ writeVObject(f.directHandle() , obj );
+ cleanVObject( obj );
+
+ cleanStrTbl();
+}
+
+
+QValueList<Task> Task::readVCalendar( const QString &filename )
+{
+ VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() );
+
+ QValueList<Task> tasks;
+
+ while ( obj ) {
+ QCString name = vObjectName( obj );
+ if ( name == VCCalProp ) {
+ VObjectIterator nit;
+ initPropIterator( &nit, obj );
+ while( moreIteration( &nit ) ) {
+ VObject *o = nextVObject( &nit );
+ QCString name = vObjectName( o );
+ if ( name == VCTodoProp )
+ tasks.append( parseVObject( o ) );
+ }
+ } else if ( name == VCTodoProp ) {
+ // shouldn't happen, but just to be sure
+ tasks.append( parseVObject( obj ) );
+ }
+ VObject *t = obj;
+ obj = nextVObjectInList(obj);
+ cleanVObject( t );
+ }
+
+ return tasks;
+}
diff --git a/library/backend/task.h b/library/backend/task.h
new file mode 100644
index 0000000..ffe26b0
--- a/dev/null
+++ b/library/backend/task.h
@@ -0,0 +1,77 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __TASK_H__
+#define __TASK_H__
+
+#include <qpe/palmtoprecord.h>
+#include <qpe/stringutil.h>
+
+#include <qvaluelist.h>
+#include <qdatetime.h>
+
+class TaskPrivate;
+class QPC_EXPORT Task : public Qtopia::Record
+{
+public:
+ Task();
+ Task( const QMap<int, QString> &fromMap );
+ ~Task();
+
+ QMap<int, QString> toMap() const;
+
+ static void writeVCalendar( const QString &filename, const QValueList<Task> &tasks);
+ static void writeVCalendar( const QString &filename, const Task &task);
+ static QValueList<Task> readVCalendar( const QString &filename );
+
+ void setPriority( int priority ) { mPriority = priority; }
+ int priority() const { return mPriority; }
+
+// void setCategory( const QString& category )
+// { mCategory = category.stripWhiteSpace(); }
+// const QString &category() const { return mCategory; }
+
+ void setDescription( const QString& description )
+ { mDesc = Qtopia::simplifyMultiLineSpace(description); }
+ const QString &description() const { return mDesc; }
+
+ void setDueDate( const QDate& date, bool hasDue ) { mDueDate = date; mDue = hasDue; }
+ const QDate &dueDate() const { return mDueDate; }
+ bool hasDueDate() const { return mDue; }
+ void setHasDueDate( bool b ) { mDue = b; }
+
+ void setCompleted( bool b ) { mCompleted = b; }
+ bool isCompleted() const { return mCompleted; }
+
+ void save( QString& buf ) const;
+ bool match( const QRegExp &r ) const;
+
+private:
+ Qtopia::UidGen &uidGen() { return sUidGen; }
+ static Qtopia::UidGen sUidGen;
+
+ bool mDue;
+ QDate mDueDate;
+ bool mCompleted;
+ int mPriority;
+ QString mDesc;
+ TaskPrivate *d;
+};
+
+#endif
diff --git a/library/backend/timeconversion.cpp b/library/backend/timeconversion.cpp
new file mode 100644
index 0000000..a4a2547
--- a/dev/null
+++ b/library/backend/timeconversion.cpp
@@ -0,0 +1,237 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qglobal.h>
+#include "timeconversion.h"
+#include <qregexp.h>
+#include <stdlib.h>
+
+QString TimeConversion::toString( const QDate &d )
+{
+ QString r = QString::number( d.day() ) + "." +
+ QString::number( d.month() ) + "." +
+ QString::number( d.year() );
+ //qDebug("TimeConversion::toString %s", r.latin1());
+ return r;
+}
+
+QDate TimeConversion::fromString( const QString &datestr )
+{
+ int monthPos = datestr.find('.');
+ int yearPos = datestr.find('.', monthPos+1 );
+ if ( monthPos == -1 || yearPos == -1 ) {
+ qDebug("fromString didn't find . in str = %s; mpos = %d ypos = %d", datestr.latin1(), monthPos, yearPos );
+ return QDate();
+ }
+ int d = datestr.left( monthPos ).toInt();
+ int m = datestr.mid( monthPos+1, yearPos - monthPos - 1 ).toInt();
+ int y = datestr.mid( yearPos+1 ).toInt();
+ QDate date ( y,m,d );
+ //qDebug("TimeConversion::fromString ymd = %s => %d %d %d; mpos = %d ypos = %d", datestr.latin1(), y, m, d, monthPos, yearPos);
+ return date;
+}
+
+time_t TimeConversion::toUTC( const QDateTime& dt )
+{
+ time_t tmp;
+ struct tm *lt;
+
+#if defined(_OS_WIN32) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64)
+ _tzset();
+#else
+ tzset();
+#endif
+
+ // get a tm structure from the system to get the correct tz_name
+ tmp = time( 0 );
+ lt = localtime( &tmp );
+
+ lt->tm_sec = dt.time().second();
+ lt->tm_min = dt.time().minute();
+ lt->tm_hour = dt.time().hour();
+ lt->tm_mday = dt.date().day();
+ lt->tm_mon = dt.date().month() - 1; // 0-11 instead of 1-12
+ lt->tm_year = dt.date().year() - 1900; // year - 1900
+ //lt->tm_wday = dt.date().dayOfWeek(); ignored anyway
+ //lt->tm_yday = dt.date().dayOfYear(); ignored anyway
+ lt->tm_wday = -1;
+ lt->tm_yday = -1;
+ // tm_isdst negative -> mktime will find out about DST
+ lt->tm_isdst = -1;
+ // keep tm_zone and tm_gmtoff
+ tmp = mktime( lt );
+ return tmp;
+}
+
+QDateTime TimeConversion::fromUTC( time_t time )
+{
+ struct tm *lt;
+
+#if defined(_OS_WIN32) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64)
+ _tzset();
+#else
+ tzset();
+#endif
+ lt = localtime( &time );
+ QDateTime dt;
+ dt.setDate( QDate( lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday ) );
+ dt.setTime( QTime( lt->tm_hour, lt->tm_min, lt->tm_sec ) );
+ return dt;
+}
+
+
+int TimeConversion::secsTo( const QDateTime &from, const QDateTime &to )
+{
+ return toUTC( to ) - toUTC( from );
+}
+
+QCString TimeConversion::toISO8601( const QDate &d )
+{
+ time_t tmp = toUTC( d );
+ struct tm *utc = gmtime( &tmp );
+
+ QCString str;
+ str.sprintf("%04d%02d%02d", (utc->tm_year + 1900), utc->tm_mon+1, utc->tm_mday );
+ return str;
+}
+
+QCString TimeConversion::toISO8601( const QDateTime &dt )
+{
+ time_t tmp = toUTC( dt );
+ struct tm *utc = gmtime( &tmp );
+
+ QCString str;
+ str.sprintf("%04d%02d%02dT%02d%02d%02dZ",
+ (utc->tm_year + 1900), utc->tm_mon+1, utc->tm_mday,
+ utc->tm_hour, utc->tm_min, utc->tm_sec );
+ return str;
+}
+
+QDateTime TimeConversion::fromISO8601( const QCString &s )
+{
+
+#if defined(_OS_WIN32) || defined (Q_OS_WIN32) || defined (Q_OS_WIN64)
+ _tzset();
+#else
+ tzset();
+#endif
+
+ struct tm *thetime = new tm;
+
+ QCString str = s.copy();
+ str.replace(QRegExp("-"), "" );
+ str.replace(QRegExp(":"), "" );
+ str.stripWhiteSpace();
+ str = str.lower();
+
+ int i = str.find( "t" );
+ QCString date;
+ QCString timestr;
+ if ( i != -1 ) {
+ date = str.left( i );
+ timestr = str.mid( i+1 );
+ } else {
+ date = str;
+ }
+
+// qDebug("--- parsing ISO time---");
+ thetime->tm_year = 100;
+ thetime->tm_mon = 0;
+ thetime->tm_mday = 0;
+ thetime->tm_hour = 0;
+ thetime->tm_min = 0;
+ thetime->tm_sec = 0;
+
+// qDebug("date = %s", date.data() );
+
+ switch( date.length() ) {
+ case 8:
+ thetime->tm_mday = date.right( 2 ).toInt();
+ case 6:
+ thetime->tm_mon = date.mid( 4, 2 ).toInt() - 1;
+ case 4:
+ thetime->tm_year = date.left( 4 ).toInt();
+ thetime->tm_year -= 1900;
+ break;
+ default:
+ break;
+ }
+
+ int tzoff = 0;
+ bool inLocalTime = FALSE;
+ if ( timestr.find( 'z' ) == (int)timestr.length() - 1 )
+ // UTC
+ timestr = timestr.left( timestr.length() -1 );
+ else {
+ int plus = timestr.find( "+" );
+ int minus = timestr.find( "-" );
+ if ( plus != -1 || minus != -1 ) {
+ // have a timezone offset
+ plus = (plus != -1) ? plus : minus;
+ QCString off = timestr.mid( plus );
+ timestr = timestr.left( plus );
+
+ int tzoffhour = 0;
+ int tzoffmin = 0;
+ switch( off.length() ) {
+ case 5:
+ tzoffmin = off.mid(3).toInt();
+ case 3:
+ tzoffhour = off.left(3).toInt();
+ default:
+ break;
+ }
+ tzoff = 60*tzoffhour + tzoffmin;
+ } else
+ inLocalTime = TRUE;
+ }
+
+ // get the time:
+ switch( timestr.length() ) {
+ case 6:
+ thetime->tm_sec = timestr.mid( 4 ).toInt();
+ case 4:
+ thetime->tm_min = timestr.mid( 2, 2 ).toInt();
+ case 2:
+ thetime->tm_hour = timestr.left( 2 ).toInt();
+ default:
+ break;
+ }
+
+ int tzloc = 0;
+ time_t tmp = time( 0 );
+ if ( !inLocalTime ) {
+ // have to get the offset between gmt and local time
+ struct tm *lt = localtime( &tmp );
+ tzloc = mktime( lt );
+ struct tm *ut = gmtime( &tmp );
+ tzloc -= mktime( ut );
+ }
+// qDebug("time: %d %d %d, tzloc=%d, tzoff=%d", thetime->tm_hour, thetime->tm_min, thetime->tm_sec,
+// tzloc, tzoff );
+
+ tmp = mktime( thetime );
+ tmp += 60*(-tzloc + tzoff);
+
+ delete thetime;
+
+ return fromUTC( tmp );
+}
+
diff --git a/library/backend/timeconversion.h b/library/backend/timeconversion.h
new file mode 100644
index 0000000..1724812
--- a/dev/null
+++ b/library/backend/timeconversion.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __timeconversion_h__
+#define __timeconversion_h__
+
+#include <time.h>
+#include <sys/types.h>
+#include <qdatetime.h>
+
+#include <qpe/qpcglobal.h>
+
+class QPC_EXPORT TimeConversion
+{
+public:
+ static QString toString( const QDate &d );
+ static QDate fromString( const QString &datestr );
+
+ static time_t toUTC( const QDateTime& dt );
+ static QDateTime fromUTC( time_t time );
+ static int secsTo( const QDateTime &from, const QDateTime &to );
+
+ static QCString toISO8601( const QDate & );
+ static QCString toISO8601( const QDateTime & );
+ static QDateTime fromISO8601( const QCString & );
+};
+
+#endif // __timeconversion_h__
diff --git a/library/backend/vcc.y b/library/backend/vcc.y
new file mode 100644
index 0000000..0225982
--- a/dev/null
+++ b/library/backend/vcc.y
@@ -0,0 +1,1199 @@
+%{
+
+/***************************************************************************
+(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+
+For purposes of this license notice, the term Licensors shall mean,
+collectively, Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+The term Licensor shall mean any of the Licensors.
+
+Subject to acceptance of the following conditions, permission is hereby
+granted by Licensors without the need for written agreement and without
+license or royalty fees, to use, copy, modify and distribute this
+software for any purpose.
+
+The above copyright notice and the following four paragraphs must be
+reproduced in all copies of this software and any software including
+this software.
+
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
+ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
+MODIFICATIONS.
+
+IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
+INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
+OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+The software is provided with RESTRICTED RIGHTS. Use, duplication, or
+disclosure by the government are subject to restrictions set forth in
+DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
+
+***************************************************************************/
+
+/*
+ * src: vcc.c
+ * doc: Parser for vCard and vCalendar. Note that this code is
+ * generated by a yacc parser generator. Generally it should not
+ * be edited by hand. The real source is vcc.y. The #line directives
+ * can be commented out here to make it easier to trace through
+ * in a debugger. However, if a bug is found it should
+ * be fixed in vcc.y and this file regenerated.
+ */
+
+
+/* debugging utilities */
+#if __DEBUG
+#define DBG_(x) printf x
+#else
+#define DBG_(x)
+#endif
+
+/**** External Functions ****/
+
+/* assign local name to parser variables and functions so that
+ we can use more than one yacc based parser.
+*/
+
+#if 0
+#define yyparse mime_parse
+#define yylex mime_lex
+#define yyerror mime_error
+#define yychar mime_char
+/* #define p_yyval p_mime_val */
+#undef yyval
+#define yyval mime_yyval
+/* #define p_yylval p_mime_lval */
+#undef yylval
+#define yylval mime_yylval
+#define yydebug mime_debug
+#define yynerrs mime_nerrs
+#define yyerrflag mime_errflag
+#define yyss mime_ss
+#define yyssp mime_ssp
+#define yyvs mime_vs
+#define yyvsp mime_vsp
+#define yylhs mime_lhs
+#define yylen mime_len
+#define yydefred mime_defred
+#define yydgoto mime_dgoto
+#define yysindex mime_sindex
+#define yyrindex mime_rindex
+#define yygindex mime_gindex
+#define yytable mime_table
+#define yycheck mime_check
+#define yyname mime_name
+#define yyrule mime_rule
+#ifdef YYPREFIX
+#undef YYPREFIX
+#endif
+#define YYPREFIX "mime_"
+#endif
+
+
+#ifndef _NO_LINE_FOLDING
+#define _SUPPORT_LINE_FOLDING 1
+#endif
+
+/* undef below if compile with MFC */
+/* #define INCLUDEMFC 1 */
+
+#if defined(WIN32) || defined(_WIN32)
+#ifdef INCLUDEMFC
+#include <afx.h>
+#endif
+#endif
+
+#include <string.h>
+#ifndef __MWERKS__
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+//#ifdef PALMTOPCENTER
+//#include <qpe/vobject_p.h>
+//#else
+#include "vobject_p.h"
+//#endif
+
+/**** Types, Constants ****/
+
+#define YYDEBUG 0 /* 1 to compile in some debugging code */
+#define MAXTOKEN 256 /* maximum token (line) length */
+#define YYSTACKSIZE 100 // ~unref ?
+#define MAXLEVEL 10 /* max # of nested objects parseable */
+ /* (includes outermost) */
+
+
+/**** Global Variables ****/
+int mime_lineNum, mime_numErrors; /* yyerror() can use these */
+static VObject* vObjList;
+static VObject *curProp;
+static VObject *curObj;
+static VObject* ObjStack[MAXLEVEL];
+static int ObjStackTop;
+
+
+/* A helpful utility for the rest of the app. */
+#if __CPLUSPLUS__
+extern "C" {
+#endif
+
+ extern void yyerror(char *s);
+
+#if __CPLUSPLUS__
+ };
+#endif
+
+int yyparse();
+
+enum LexMode {
+ L_NORMAL,
+ L_VCARD,
+ L_VCAL,
+ L_VEVENT,
+ L_VTODO,
+ L_VALUES,
+ L_BASE64,
+ L_QUOTED_PRINTABLE
+ };
+
+/**** Private Forward Declarations ****/
+static int pushVObject(const char *prop);
+static VObject* popVObject();
+static void lexPopMode(int top);
+static int lexWithinMode(enum LexMode mode);
+static void lexPushMode(enum LexMode mode);
+static void enterProps(const char *s);
+static void enterAttr(const char *s1, const char *s2);
+static void enterValues(const char *value);
+#define mime_error yyerror
+void mime_error(char *s);
+void mime_error_(char *s);
+
+%}
+
+/***************************************************************************/
+/*** The grammar ****/
+/***************************************************************************/
+
+%union {
+ char *str;
+ VObject *vobj;
+ }
+
+%token
+ EQ COLON DOT SEMICOLON SPACE HTAB LINESEP NEWLINE
+ BEGIN_VCARD END_VCARD BEGIN_VCAL END_VCAL
+ BEGIN_VEVENT END_VEVENT BEGIN_VTODO END_VTODO
+ ID
+
+/*
+ * NEWLINE is the token that would occur outside a vCard,
+ * while LINESEP is the token that would occur inside a vCard.
+ */
+
+%token <str>
+ STRING ID
+
+%type <str> name value
+
+%type <vobj> vcard vcal vobject
+
+%start mime
+
+%%
+
+
+mime: vobjects
+ ;
+
+vobjects: vobjects vobject
+ { addList(&vObjList, $2); curObj = 0; }
+ | vobject
+ { addList(&vObjList, $1); curObj = 0; }
+ ;
+
+vobject: vcard
+ | vcal
+ ;
+
+vcard:
+ BEGIN_VCARD
+ {
+ lexPushMode(L_VCARD);
+ if (!pushVObject(VCCardProp)) YYERROR;
+ }
+ items END_VCARD
+ {
+ lexPopMode(0);
+ $$ = popVObject();
+ }
+ | BEGIN_VCARD
+ {
+ lexPushMode(L_VCARD);
+ if (!pushVObject(VCCardProp)) YYERROR;
+ }
+ END_VCARD
+ {
+ lexPopMode(0);
+ $$ = popVObject();
+ }
+ ;
+
+items: items item
+ | item
+ ;
+
+item: prop COLON
+ {
+ lexPushMode(L_VALUES);
+ }
+ values LINESEP
+ {
+ if (lexWithinMode(L_BASE64) || lexWithinMode(L_QUOTED_PRINTABLE))
+ lexPopMode(0);
+ lexPopMode(0);
+ }
+ | error
+ ;
+
+prop: name
+ {
+ enterProps($1);
+ }
+ attr_params
+ | name
+ {
+ enterProps($1);
+ }
+ ;
+
+attr_params: attr_params attr_param
+ | attr_param
+ ;
+
+attr_param: SEMICOLON attr
+ ;
+
+attr: name
+ {
+ enterAttr($1,0);
+ }
+ | name EQ name
+ {
+ enterAttr($1,$3);
+
+ }
+ ;
+
+name: ID
+ ;
+
+values: value SEMICOLON { enterValues($1); } values
+ | value
+ { enterValues($1); }
+ ;
+
+value: STRING
+ |
+ { $$ = 0; }
+ ;
+
+vcal:
+ BEGIN_VCAL
+ { if (!pushVObject(VCCalProp)) YYERROR; }
+ calitems
+ END_VCAL
+ { $$ = popVObject(); }
+ | BEGIN_VCAL
+ { if (!pushVObject(VCCalProp)) YYERROR; }
+ END_VCAL
+ { $$ = popVObject(); }
+ ;
+
+calitems: calitems calitem
+ | calitem
+ ;
+
+calitem:
+ eventitem
+ | todoitem
+ | items
+ ;
+
+eventitem:
+ BEGIN_VEVENT
+ {
+ lexPushMode(L_VEVENT);
+ if (!pushVObject(VCEventProp)) YYERROR;
+ }
+ items
+ END_VEVENT
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ | BEGIN_VEVENT
+ {
+ lexPushMode(L_VEVENT);
+ if (!pushVObject(VCEventProp)) YYERROR;
+ }
+ END_VEVENT
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ ;
+
+todoitem:
+ BEGIN_VTODO
+ {
+ lexPushMode(L_VTODO);
+ if (!pushVObject(VCTodoProp)) YYERROR;
+ }
+ items
+ END_VTODO
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ | BEGIN_VTODO
+ {
+ lexPushMode(L_VTODO);
+ if (!pushVObject(VCTodoProp)) YYERROR;
+ }
+ END_VTODO
+ {
+ lexPopMode(0);
+ popVObject();
+ }
+ ;
+
+%%
+/*------------------------------------*/
+static int pushVObject(const char *prop)
+ {
+ VObject *newObj;
+ if (ObjStackTop == MAXLEVEL)
+ return FALSE;
+
+ ObjStack[++ObjStackTop] = curObj;
+
+ if (curObj) {
+ newObj = addProp(curObj,prop);
+ curObj = newObj;
+ }
+ else
+ curObj = newVObject(prop);
+
+ return TRUE;
+ }
+
+
+/*---------------------------------------*/
+/* This pops the recently built vCard off the stack and returns it. */
+static VObject* popVObject()
+ {
+ VObject *oldObj;
+ if (ObjStackTop < 0) {
+ yyerror("pop on empty Object Stack\n");
+ return 0;
+ }
+ oldObj = curObj;
+ curObj = ObjStack[ObjStackTop--];
+
+ return oldObj;
+ }
+
+
+static void enterValues(const char *value)
+ {
+ if (fieldedProp && *fieldedProp) {
+ if (value) {
+ addPropValue(curProp,*fieldedProp,value);
+ }
+ /* else this field is empty, advance to next field */
+ fieldedProp++;
+ }
+ else {
+ if (value) {
+ setVObjectStringZValue_(curProp,strdup( value ));
+ }
+ }
+ deleteStr(value);
+ }
+
+static void enterProps(const char *s)
+ {
+ curProp = addGroup(curObj,s);
+ deleteStr(s);
+ }
+
+static void enterAttr(const char *s1, const char *s2)
+ {
+ const char *p1, *p2;
+ p1 = lookupProp_(s1);
+ if (s2) {
+ VObject *a;
+ p2 = lookupProp_(s2);
+ a = addProp(curProp,p1);
+ setVObjectStringZValue(a,p2);
+ }
+ else
+ addProp(curProp,p1);
+ if (qstricmp(p1,VCBase64Prop) == 0 || (s2 && qstricmp(p2,VCBase64Prop)==0))
+ lexPushMode(L_BASE64);
+ else if (qstricmp(p1,VCQuotedPrintableProp) == 0
+ || (s2 && qstricmp(p2,VCQuotedPrintableProp)==0))
+ lexPushMode(L_QUOTED_PRINTABLE);
+ deleteStr(s1); deleteStr(s2);
+ }
+
+
+#define MAX_LEX_LOOKAHEAD_0 32
+#define MAX_LEX_LOOKAHEAD 64
+#define MAX_LEX_MODE_STACK_SIZE 10
+#define LEXMODE() (lexBuf.lexModeStack[lexBuf.lexModeStackTop])
+
+struct LexBuf {
+ /* input */
+#ifdef INCLUDEMFC
+ CFile *inputFile;
+#else
+ FILE *inputFile;
+#endif
+ char *inputString;
+ unsigned long curPos;
+ unsigned long inputLen;
+ /* lookahead buffer */
+ /* -- lookahead buffer is short instead of char so that EOF
+ / can be represented correctly.
+ */
+ unsigned long len;
+ short buf[MAX_LEX_LOOKAHEAD];
+ unsigned long getPtr;
+ /* context stack */
+ unsigned long lexModeStackTop;
+ enum LexMode lexModeStack[MAX_LEX_MODE_STACK_SIZE];
+ /* token buffer */
+ unsigned long maxToken;
+ char *strs;
+ unsigned long strsLen;
+ } lexBuf;
+
+static void lexPushMode(enum LexMode mode)
+ {
+ if (lexBuf.lexModeStackTop == (MAX_LEX_MODE_STACK_SIZE-1))
+ yyerror("lexical context stack overflow");
+ else {
+ lexBuf.lexModeStack[++lexBuf.lexModeStackTop] = mode;
+ }
+ }
+
+static void lexPopMode(int top)
+ {
+ /* special case of pop for ease of error recovery -- this
+ version will never underflow */
+ if (top)
+ lexBuf.lexModeStackTop = 0;
+ else
+ if (lexBuf.lexModeStackTop > 0) lexBuf.lexModeStackTop--;
+ }
+
+static int lexWithinMode(enum LexMode mode) {
+ unsigned long i;
+ for (i=0;i<lexBuf.lexModeStackTop;i++)
+ if (mode == lexBuf.lexModeStack[i]) return 1;
+ return 0;
+ }
+
+static char lexGetc_()
+ {
+ /* get next char from input, no buffering. */
+ if (lexBuf.curPos == lexBuf.inputLen)
+ return EOF;
+ else if (lexBuf.inputString)
+ return *(lexBuf.inputString + lexBuf.curPos++);
+ else {
+#ifdef INCLUDEMFC
+ char result;
+ return lexBuf.inputFile->Read(&result, 1) == 1 ? result : EOF;
+#else
+ return fgetc(lexBuf.inputFile);
+#endif
+ }
+ }
+
+static int lexGeta()
+ {
+ ++lexBuf.len;
+ return (lexBuf.buf[lexBuf.getPtr] = lexGetc_());
+ }
+
+static int lexGeta_(int i)
+ {
+ ++lexBuf.len;
+ return (lexBuf.buf[(lexBuf.getPtr+i)%MAX_LEX_LOOKAHEAD] = lexGetc_());
+ }
+
+static void lexSkipLookahead() {
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ /* don't skip EOF. */
+ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
+ lexBuf.len--;
+ }
+ }
+
+static int lexLookahead() {
+ int c = (lexBuf.len)?
+ lexBuf.buf[lexBuf.getPtr]:
+ lexGeta();
+ /* do the \r\n -> \n or \r -> \n translation here */
+ if (c == '\r') {
+ int a = (lexBuf.len>1)?
+ lexBuf.buf[(lexBuf.getPtr+1)%MAX_LEX_LOOKAHEAD]:
+ lexGeta_(1);
+ if (a == '\n') {
+ lexSkipLookahead();
+ }
+ lexBuf.buf[lexBuf.getPtr] = c = '\n';
+ }
+ else if (c == '\n') {
+ int a = (lexBuf.len>1)?
+ lexBuf.buf[lexBuf.getPtr+1]:
+ lexGeta_(1);
+ if (a == '\r') {
+ lexSkipLookahead();
+ }
+ lexBuf.buf[lexBuf.getPtr] = '\n';
+ }
+ return c;
+ }
+
+static int lexGetc() {
+ int c = lexLookahead();
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ /* EOF will remain in lookahead buffer */
+ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
+ lexBuf.len--;
+ }
+ return c;
+ }
+
+static void lexSkipLookaheadWord() {
+ if (lexBuf.strsLen <= lexBuf.len) {
+ lexBuf.len -= lexBuf.strsLen;
+ lexBuf.getPtr = (lexBuf.getPtr + lexBuf.strsLen) % MAX_LEX_LOOKAHEAD;
+ }
+ }
+
+static void lexClearToken()
+ {
+ lexBuf.strsLen = 0;
+ }
+
+static void lexAppendc(int c)
+ {
+ lexBuf.strs[lexBuf.strsLen] = c;
+ /* append up to zero termination */
+ if (c == 0) return;
+ lexBuf.strsLen++;
+ if (lexBuf.strsLen > lexBuf.maxToken) {
+ /* double the token string size */
+ lexBuf.maxToken <<= 1;
+ lexBuf.strs = (char*) realloc(lexBuf.strs,(size_t)lexBuf.maxToken);
+ }
+ }
+
+static char* lexStr() {
+ return dupStr(lexBuf.strs,(size_t)lexBuf.strsLen+1);
+ }
+
+static void lexSkipWhite() {
+ int c = lexLookahead();
+ while (c == ' ' || c == '\t') {
+ lexSkipLookahead();
+ c = lexLookahead();
+ }
+ }
+
+static char* lexGetWord() {
+ int c;
+ lexSkipWhite();
+ lexClearToken();
+ c = lexLookahead();
+ while (c != EOF && !strchr("\t\n ;:=",c)) {
+ lexAppendc(c);
+ lexSkipLookahead();
+ c = lexLookahead();
+ }
+ lexAppendc(0);
+ return lexStr();
+ }
+
+static void lexPushLookaheadc(int c) {
+ int putptr;
+ /* can't putback EOF, because it never leaves lookahead buffer */
+ if (c == EOF) return;
+ putptr = (int)lexBuf.getPtr - 1;
+ if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD;
+ lexBuf.getPtr = putptr;
+ lexBuf.buf[putptr] = c;
+ lexBuf.len += 1;
+ }
+
+static char* lexLookaheadWord() {
+ /* this function can lookahead word with max size of MAX_LEX_LOOKAHEAD_0
+ / and thing bigger than that will stop the lookahead and return 0;
+ / leading white spaces are not recoverable.
+ */
+ int c;
+ int len = 0;
+ int curgetptr = 0;
+ lexSkipWhite();
+ lexClearToken();
+ curgetptr = (int)lexBuf.getPtr; // remember!
+ while (len < (MAX_LEX_LOOKAHEAD_0)) {
+ c = lexGetc();
+ len++;
+ if (c == EOF || strchr("\t\n ;:=", c)) {
+ lexAppendc(0);
+ /* restore lookahead buf. */
+ lexBuf.len += len;
+ lexBuf.getPtr = curgetptr;
+ return lexStr();
+ }
+ else
+ lexAppendc(c);
+ }
+ lexBuf.len += len; /* char that has been moved to lookahead buffer */
+ lexBuf.getPtr = curgetptr;
+ return 0;
+ }
+
+#ifdef _SUPPORT_LINE_FOLDING
+static void handleMoreRFC822LineBreak(int c) {
+ /* suport RFC 822 line break in cases like
+ * ADR: foo;
+ * morefoo;
+ * more foo;
+ */
+ if (c == ';') {
+ int a;
+ lexSkipLookahead();
+ /* skip white spaces */
+ a = lexLookahead();
+ while (a == ' ' || a == '\t') {
+ lexSkipLookahead();
+ a = lexLookahead();
+ }
+ if (a == '\n') {
+ lexSkipLookahead();
+ a = lexLookahead();
+ if (a == ' ' || a == '\t') {
+ /* continuation, throw away all the \n and spaces read so
+ * far
+ */
+ lexSkipWhite();
+ lexPushLookaheadc(';');
+ }
+ else {
+ lexPushLookaheadc('\n');
+ lexPushLookaheadc(';');
+ }
+ }
+ else {
+ lexPushLookaheadc(';');
+ }
+ }
+ }
+
+static char* lexGet1Value() {
+ int c;
+ lexSkipWhite();
+ c = lexLookahead();
+ lexClearToken();
+ while (c != EOF && c != ';') {
+ if (c == '\\' ) {
+ int a;
+ lexSkipLookahead();
+ a = lexLookahead();
+ if ( a != ';' ) {
+ lexAppendc('\\');
+ } else {
+ lexAppendc( ';' );
+ lexSkipLookahead();
+ }
+ } else if (c == '\n') {
+ int a;
+ lexSkipLookahead();
+ a = lexLookahead();
+ if (a == ' ' || a == '\t') {
+ lexAppendc(' ');
+ lexSkipLookahead();
+ }
+ else {
+ lexPushLookaheadc('\n');
+ break;
+ }
+ }
+ else {
+ lexAppendc(c);
+ lexSkipLookahead();
+ }
+ c = lexLookahead();
+ }
+ lexAppendc(0);
+ handleMoreRFC822LineBreak(c);
+ return c==EOF?0:lexStr();
+ }
+#endif
+
+static int match_begin_name(int end) {
+ char *n = lexLookaheadWord();
+ int token = ID;
+ if (n) {
+ if (!qstricmp(n,"vcard")) token = end?END_VCARD:BEGIN_VCARD;
+ else if (!qstricmp(n,"vcalendar")) token = end?END_VCAL:BEGIN_VCAL;
+ else if (!qstricmp(n,"vevent")) token = end?END_VEVENT:BEGIN_VEVENT;
+ else if (!qstricmp(n,"vtodo")) token = end?END_VTODO:BEGIN_VTODO;
+ deleteStr(n);
+ return token;
+ }
+ return 0;
+ }
+
+
+#ifdef INCLUDEMFC
+void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile)
+#else
+void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile)
+#endif
+ {
+ // initialize lex mode stack
+ lexBuf.lexModeStack[lexBuf.lexModeStackTop=0] = L_NORMAL;
+
+ // iniatialize lex buffer.
+ lexBuf.inputString = (char*) inputstring;
+ lexBuf.inputLen = inputlen;
+ lexBuf.curPos = 0;
+ lexBuf.inputFile = inputfile;
+
+ lexBuf.len = 0;
+ lexBuf.getPtr = 0;
+
+ lexBuf.maxToken = MAXTOKEN;
+ lexBuf.strs = (char*)malloc(MAXTOKEN);
+ lexBuf.strsLen = 0;
+
+ }
+
+static void finiLex() {
+ free(lexBuf.strs);
+ }
+
+
+/*-----------------------------------*/
+/* This parses and converts the base64 format for binary encoding into
+ * a decoded buffer (allocated with new). See RFC 1521.
+ */
+static char * lexGetDataFromBase64()
+ {
+ unsigned long bytesLen = 0, bytesMax = 0;
+ int quadIx = 0, pad = 0;
+ unsigned long trip = 0;
+ unsigned char b;
+ int c;
+ unsigned char *bytes = NULL;
+ unsigned char *oldBytes = NULL;
+
+ DBG_(("db: lexGetDataFromBase64\n"));
+ while (1) {
+ c = lexGetc();
+ if (c == '\n') {
+ ++mime_lineNum;
+ if (lexLookahead() == '\n') {
+ /* a '\n' character by itself means end of data */
+ break;
+ }
+ else continue; /* ignore '\n' */
+ }
+ else {
+ if ((c >= 'A') && (c <= 'Z'))
+ b = (unsigned char)(c - 'A');
+ else if ((c >= 'a') && (c <= 'z'))
+ b = (unsigned char)(c - 'a') + 26;
+ else if ((c >= '0') && (c <= '9'))
+ b = (unsigned char)(c - '0') + 52;
+ else if (c == '+')
+ b = 62;
+ else if (c == '/')
+ b = 63;
+ else if (c == '=') {
+ b = 0;
+ pad++;
+ } else if ((c == ' ') || (c == '\t')) {
+ continue;
+ } else { /* error condition */
+ if (bytes) free(bytes);
+ else if (oldBytes) free(oldBytes);
+ // error recovery: skip until 2 adjacent newlines.
+ DBG_(("db: invalid character 0x%x '%c'\n", c,c));
+ if (c != EOF) {
+ c = lexGetc();
+ while (c != EOF) {
+ if (c == '\n' && lexLookahead() == '\n') {
+ ++mime_lineNum;
+ break;
+ }
+ c = lexGetc();
+ }
+ }
+ return NULL;
+ }
+ trip = (trip << 6) | b;
+ if (++quadIx == 4) {
+ unsigned char outBytes[3];
+ int numOut;
+ int i;
+ for (i = 0; i < 3; i++) {
+ outBytes[2-i] = (unsigned char)(trip & 0xFF);
+ trip >>= 8;
+ }
+ numOut = 3 - pad;
+ if (bytesLen + numOut > bytesMax) {
+ if (!bytes) {
+ bytesMax = 1024;
+ bytes = (unsigned char*)malloc((size_t)bytesMax);
+ }
+ else {
+ bytesMax <<= 2;
+ oldBytes = bytes;
+ bytes = (unsigned char*)realloc(bytes,(size_t)bytesMax);
+ }
+ if (bytes == 0) {
+ mime_error("out of memory while processing BASE64 data\n");
+ }
+ }
+ if (bytes) {
+ memcpy(bytes + bytesLen, outBytes, numOut);
+ bytesLen += numOut;
+ }
+ trip = 0;
+ quadIx = 0;
+ }
+ }
+ } /* while */
+ DBG_(("db: bytesLen = %d\n", bytesLen));
+ /* kludge: all this won't be necessary if we have tree form
+ representation */
+ if (bytes) {
+ setValueWithSize(curProp,bytes,(unsigned int)bytesLen);
+ free(bytes);
+ }
+ else if (oldBytes) {
+ setValueWithSize(curProp,oldBytes,(unsigned int)bytesLen);
+ free(oldBytes);
+ }
+ return 0;
+ }
+
+static int match_begin_end_name(int end) {
+ int token;
+ lexSkipWhite();
+ if (lexLookahead() != ':') return ID;
+ lexSkipLookahead();
+ lexSkipWhite();
+ token = match_begin_name(end);
+ if (token == ID) {
+ lexPushLookaheadc(':');
+ DBG_(("db: ID '%s'\n", yylval.str));
+ return ID;
+ }
+ else if (token != 0) {
+ lexSkipLookaheadWord();
+ deleteStr(yylval.str);
+ DBG_(("db: begin/end %d\n", token));
+ return token;
+ }
+ return 0;
+ }
+
+static char* lexGetQuotedPrintable()
+ {
+ char cur;
+
+ lexClearToken();
+ do {
+ cur = lexGetc();
+ switch (cur) {
+ case '=': {
+ int c = 0;
+ int next[2];
+ int i;
+ for (i = 0; i < 2; i++) {
+ next[i] = lexGetc();
+ if (next[i] >= '0' && next[i] <= '9')
+ c = c * 16 + next[i] - '0';
+ else if (next[i] >= 'A' && next[i] <= 'F')
+ c = c * 16 + next[i] - 'A' + 10;
+ else
+ break;
+ }
+ if (i == 0) {
+ /* single '=' follow by LINESEP is continuation sign? */
+ if (next[0] == '\n') {
+ ++mime_lineNum;
+ }
+ else {
+ lexPushLookaheadc('=');
+ goto EndString;
+ }
+ }
+ else if (i == 1) {
+ lexPushLookaheadc(next[1]);
+ lexPushLookaheadc(next[0]);
+ lexAppendc('=');
+ } else {
+ lexAppendc(c);
+ }
+ break;
+ } /* '=' */
+ case '\n': {
+ lexPushLookaheadc('\n');
+ goto EndString;
+ }
+ case (char)EOF:
+ break;
+ default:
+ lexAppendc(cur);
+ break;
+ } /* switch */
+ } while (cur != (char)EOF);
+
+EndString:
+ lexAppendc(0);
+ return lexStr();
+ } /* LexQuotedPrintable */
+
+static int yylex() {
+
+ int lexmode = LEXMODE();
+ if (lexmode == L_VALUES) {
+ int c = lexGetc();
+ if (c == ';') {
+ DBG_(("db: SEMICOLON\n"));
+ lexPushLookaheadc(c);
+ handleMoreRFC822LineBreak(c);
+ lexSkipLookahead();
+ return SEMICOLON;
+ }
+ else if (strchr("\n",c)) {
+ ++mime_lineNum;
+ /* consume all line separator(s) adjacent to each other */
+ c = lexLookahead();
+ while (strchr("\n",c)) {
+ lexSkipLookahead();
+ c = lexLookahead();
+ ++mime_lineNum;
+ }
+ DBG_(("db: LINESEP\n"));
+ return LINESEP;
+ }
+ else {
+ char *p = 0;
+ lexPushLookaheadc(c);
+ if (lexWithinMode(L_BASE64)) {
+ /* get each char and convert to bin on the fly... */
+ p = lexGetDataFromBase64();
+ yylval.str = p;
+ return STRING;
+ }
+ else if (lexWithinMode(L_QUOTED_PRINTABLE)) {
+ p = lexGetQuotedPrintable();
+ }
+ else {
+#ifdef _SUPPORT_LINE_FOLDING
+ p = lexGet1Value();
+#else
+ p = lexGetStrUntil(";\n");
+#endif
+ }
+ if (p) {
+ DBG_(("db: STRING: '%s'\n", p));
+ yylval.str = p;
+ return STRING;
+ }
+ else return 0;
+ }
+ }
+ else {
+ /* normal mode */
+ while (1) {
+ int c = lexGetc();
+ switch(c) {
+ case ':': {
+ /* consume all line separator(s) adjacent to each other */
+ /* ignoring linesep immediately after colon. */
+ c = lexLookahead();
+ while (strchr("\n",c)) {
+ lexSkipLookahead();
+ c = lexLookahead();
+ ++mime_lineNum;
+ }
+ DBG_(("db: COLON\n"));
+ return COLON;
+ }
+ case ';':
+ DBG_(("db: SEMICOLON\n"));
+ return SEMICOLON;
+ case '=':
+ DBG_(("db: EQ\n"));
+ return EQ;
+ /* ignore whitespace in this mode */
+ case '\t':
+ case ' ': continue;
+ case '\n': {
+ ++mime_lineNum;
+ continue;
+ }
+ case EOF: return 0;
+ break;
+ default: {
+ lexPushLookaheadc(c);
+ if (isalnum(c)) {
+ char *t = lexGetWord();
+ yylval.str = t;
+ if (!qstricmp(t, "begin")) {
+ return match_begin_end_name(0);
+ }
+ else if (!qstricmp(t,"end")) {
+ return match_begin_end_name(1);
+ }
+ else {
+ DBG_(("db: ID '%s'\n", t));
+ return ID;
+ }
+ }
+ else {
+ /* unknow token */
+ return 0;
+ }
+ break;
+ }
+ }
+ }
+ }
+ return 0;
+ }
+
+
+/***************************************************************************/
+/*** Public Functions ****/
+/***************************************************************************/
+
+static VObject* Parse_MIMEHelper()
+ {
+ ObjStackTop = -1;
+ mime_numErrors = 0;
+ mime_lineNum = 1;
+ vObjList = 0;
+ curObj = 0;
+
+ if (yyparse() != 0)
+ return 0;
+
+ finiLex();
+ return vObjList;
+ }
+
+/*--------------------------------------------*/
+DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len)
+ {
+ initLex(input, len, 0);
+ return Parse_MIMEHelper();
+ }
+
+
+#if INCLUDEMFC
+
+DLLEXPORT(VObject*) Parse_MIME_FromFile(CFile *file)
+ {
+ unsigned long startPos;
+ VObject *result;
+
+ initLex(0,-1,file);
+ startPos = file->GetPosition();
+ if (!(result = Parse_MIMEHelper()))
+ file->Seek(startPos, CFile::begin);
+ return result;
+ }
+
+#else
+
+VObject* Parse_MIME_FromFile(FILE *file)
+ {
+ VObject *result;
+ long startPos;
+
+ initLex(0,(unsigned long)-1,file);
+ startPos = ftell(file);
+ if (!(result = Parse_MIMEHelper())) {
+ fseek(file,startPos,SEEK_SET);
+ }
+ return result;
+ }
+
+DLLEXPORT(VObject*) Parse_MIME_FromFileName(char *fname)
+ {
+ FILE *fp = fopen(fname,"r");
+ if (fp) {
+ VObject* o = Parse_MIME_FromFile(fp);
+ fclose(fp);
+ return o;
+ }
+ else {
+ char msg[80];
+ sprintf(msg, "can't open file '%s' for reading\n", fname);
+ mime_error_(msg);
+ return 0;
+ }
+ }
+
+#endif
+
+/*-------------------------------------*/
+
+static MimeErrorHandler mimeErrorHandler;
+
+DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler me)
+ {
+ mimeErrorHandler = me;
+ }
+
+void mime_error(char *s)
+ {
+ char msg[256];
+ if (mimeErrorHandler) {
+ sprintf(msg,"%s at line %d", s, mime_lineNum);
+ mimeErrorHandler(msg);
+ }
+ }
+
+void mime_error_(char *s)
+ {
+ if (mimeErrorHandler) {
+ mimeErrorHandler(s);
+ }
+ }
+
diff --git a/library/backend/vobject.cpp b/library/backend/vobject.cpp
new file mode 100644
index 0000000..af112a7
--- a/dev/null
+++ b/library/backend/vobject.cpp
@@ -0,0 +1,1210 @@
+/***************************************************************************
+(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+
+For purposes of this license notice, the term Licensors shall mean,
+collectively, Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+The term Licensor shall mean any of the Licensors.
+
+Subject to acceptance of the following conditions, permission is hereby
+granted by Licensors without the need for written agreement and without
+license or royalty fees, to use, copy, modify and distribute this
+software for any purpose.
+
+The above copyright notice and the following four paragraphs must be
+reproduced in all copies of this software and any software including
+this software.
+
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
+ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
+MODIFICATIONS.
+
+IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
+INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
+OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+The software is provided with RESTRICTED RIGHTS. Use, duplication, or
+disclosure by the government are subject to restrictions set forth in
+DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
+
+***************************************************************************/
+
+/*
+ * src: vobject.c
+ * doc: vobject and APIs to construct vobject, APIs pretty print
+ * vobject, and convert a vobject into its textual representation.
+ */
+
+#ifndef MWERKS
+#include <malloc.h>
+#endif
+
+#include "vobject_p.h"
+#include "qfiledirect_p.h"
+#include <string.h>
+#include <stdio.h>
+#include <fcntl.h>
+//#include <io.h>
+
+
+#define NAME_OF(o) o->id
+#define VALUE_TYPE(o) o->valType
+#define STRINGZ_VALUE_OF(o) o->val.strs
+#define INTEGER_VALUE_OF(o) o->val.i
+#define LONG_VALUE_OF(o) o->val.l
+#define ANY_VALUE_OF(o) o->val.any
+#define VOBJECT_VALUE_OF(o) o->val.vobj
+
+typedef union ValueItem {
+ const char *strs;
+ unsigned int i;
+ unsigned long l;
+ void *any;
+ VObject *vobj;
+ } ValueItem;
+
+struct VObject {
+ VObject *next;
+ const char *id;
+ VObject *prop;
+ unsigned short valType;
+ ValueItem val;
+ };
+
+typedef struct StrItem StrItem;
+
+struct StrItem {
+ StrItem *next;
+ const char *s;
+ unsigned int refCnt;
+ };
+
+const char** fieldedProp;
+
+
+
+/*----------------------------------------------------------------------
+ The following functions involve with memory allocation:
+ newVObject
+ deleteVObject
+ dupStr
+ deleteStr
+ newStrItem
+ deleteStrItem
+ ----------------------------------------------------------------------*/
+
+DLLEXPORT(VObject*) newVObject_(const char *id)
+{
+ VObject *p = (VObject*)malloc(sizeof(VObject));
+ p->next = 0;
+ p->id = id;
+ p->prop = 0;
+ VALUE_TYPE(p) = 0;
+ ANY_VALUE_OF(p) = 0;
+ return p;
+}
+
+DLLEXPORT(VObject*) newVObject(const char *id)
+{
+ return newVObject_(lookupStr(id));
+}
+
+DLLEXPORT(void) deleteVObject(VObject *p)
+{
+ unUseStr(p->id);
+ free(p);
+}
+
+DLLEXPORT(char*) dupStr(const char *s, unsigned int size)
+{
+ char *t;
+ if (size == 0) {
+ size = strlen(s);
+ }
+ t = (char*)malloc(size+1);
+ if (t) {
+ memcpy(t,s,size);
+ t[size] = 0;
+ return t;
+ }
+ else {
+ return (char*)0;
+ }
+}
+
+DLLEXPORT(void) deleteStr(const char *p)
+{
+ if (p) free((void*)p);
+}
+
+
+static StrItem* newStrItem(const char *s, StrItem *next)
+{
+ StrItem *p = (StrItem*)malloc(sizeof(StrItem));
+ p->next = next;
+ p->s = s;
+ p->refCnt = 1;
+ return p;
+}
+
+static void deleteStrItem(StrItem *p)
+{
+ free((void*)p);
+}
+
+
+/*----------------------------------------------------------------------
+ The following function provide accesses to VObject's value.
+ ----------------------------------------------------------------------*/
+
+DLLEXPORT(const char*) vObjectName(VObject *o)
+{
+ return NAME_OF(o);
+}
+
+DLLEXPORT(void) setVObjectName(VObject *o, const char* id)
+{
+ NAME_OF(o) = id;
+}
+
+DLLEXPORT(const char*) vObjectStringZValue(VObject *o)
+{
+ return STRINGZ_VALUE_OF(o);
+}
+
+DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s)
+{
+ STRINGZ_VALUE_OF(o) = dupStr(s,0);
+ VALUE_TYPE(o) = VCVT_STRINGZ;
+}
+
+DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s)
+{
+ STRINGZ_VALUE_OF(o) = s;
+ VALUE_TYPE(o) = VCVT_STRINGZ;
+}
+
+DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o)
+{
+ return INTEGER_VALUE_OF(o);
+}
+
+DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i)
+{
+ INTEGER_VALUE_OF(o) = i;
+ VALUE_TYPE(o) = VCVT_UINT;
+}
+
+DLLEXPORT(unsigned long) vObjectLongValue(VObject *o)
+{
+ return LONG_VALUE_OF(o);
+}
+
+DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l)
+{
+ LONG_VALUE_OF(o) = l;
+ VALUE_TYPE(o) = VCVT_ULONG;
+}
+
+DLLEXPORT(void*) vObjectAnyValue(VObject *o)
+{
+ return ANY_VALUE_OF(o);
+}
+
+DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t)
+{
+ ANY_VALUE_OF(o) = t;
+ VALUE_TYPE(o) = VCVT_RAW;
+}
+
+DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o)
+{
+ return VOBJECT_VALUE_OF(o);
+}
+
+DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p)
+{
+ VOBJECT_VALUE_OF(o) = p;
+ VALUE_TYPE(o) = VCVT_VOBJECT;
+}
+
+DLLEXPORT(int) vObjectValueType(VObject *o)
+{
+ return VALUE_TYPE(o);
+}
+
+
+/*----------------------------------------------------------------------
+ The following functions can be used to build VObject.
+ ----------------------------------------------------------------------*/
+
+DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p)
+{
+ /* circular link list pointed to tail */
+ /*
+ o {next,id,prop,val}
+ V
+ pn {next,id,prop,val}
+ V
+ ...
+ p1 {next,id,prop,val}
+ V
+ pn
+ -->
+ o {next,id,prop,val}
+ V
+ pn {next,id,prop,val}
+ V
+ p {next,id,prop,val}
+ ...
+ p1 {next,id,prop,val}
+ V
+ pn
+ */
+
+ VObject *tail = o->prop;
+ if (tail) {
+ p->next = tail->next;
+ o->prop = tail->next = p;
+ }
+ else {
+ o->prop = p->next = p;
+ }
+ return p;
+}
+
+DLLEXPORT(VObject*) addProp(VObject *o, const char *id)
+{
+ return addVObjectProp(o,newVObject(id));
+}
+
+DLLEXPORT(VObject*) addProp_(VObject *o, const char *id)
+{
+ return addVObjectProp(o,newVObject_(id));
+}
+
+DLLEXPORT(void) addList(VObject **o, VObject *p)
+{
+ p->next = 0;
+ if (*o == 0) {
+ *o = p;
+ }
+ else {
+ VObject *t = *o;
+ while (t->next) {
+ t = t->next;
+ }
+ t->next = p;
+ }
+}
+
+DLLEXPORT(VObject*) nextVObjectInList(VObject *o)
+{
+ return o->next;
+}
+
+DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size)
+{
+ VObject *sizeProp;
+ setVObjectAnyValue(prop, val);
+ sizeProp = addProp(prop,VCDataSizeProp);
+ setVObjectLongValue(sizeProp, size);
+ return prop;
+}
+
+DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size)
+{
+ void *p = dupStr((const char *)val,size);
+ return setValueWithSize_(prop,p,p?size:0);
+}
+
+DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o)
+{
+ i->start = o->prop;
+ i->next = 0;
+}
+
+DLLEXPORT(void) initVObjectIterator(VObjectIterator *i, VObject *o)
+{
+ i->start = o->next;
+ i->next = 0;
+}
+
+DLLEXPORT(int) moreIteration(VObjectIterator *i)
+{
+ return (i->start && (i->next==0 || i->next!=i->start));
+}
+
+DLLEXPORT(VObject*) nextVObject(VObjectIterator *i)
+{
+ if (i->start && i->next != i->start) {
+ if (i->next == 0) {
+ i->next = i->start->next;
+ return i->next;
+ }
+ else {
+ i->next = i->next->next;
+ return i->next;
+ }
+ }
+ else return (VObject*)0;
+}
+
+DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id)
+{
+ VObjectIterator i;
+ initPropIterator(&i,o);
+ while (moreIteration(&i)) {
+ VObject *each = nextVObject(&i);
+ if (!qstricmp(id,each->id))
+ return each;
+ }
+ return (VObject*)0;
+}
+
+DLLEXPORT(VObject*) addGroup(VObject *o, const char *g)
+{
+ /*
+ a.b.c
+ -->
+ prop(c)
+ prop(VCGrouping=b)
+ prop(VCGrouping=a)
+ */
+ char *dot = strrchr(g,'.');
+ if (dot) {
+ VObject *p, *t;
+ char *gs, *n = dot+1;
+ gs = dupStr(g,0); /* so we can write to it. */
+ /* used to be
+ * t = p = addProp_(o,lookupProp_(n));
+ */
+ t = p = addProp_(o,lookupProp(n));
+ dot = strrchr(gs,'.');
+ *dot = 0;
+ do {
+ dot = strrchr(gs,'.');
+ if (dot) {
+ n = dot+1;
+ *dot=0;
+ }
+ else
+ n = gs;
+ /* property(VCGroupingProp=n);
+ * and the value may have VCGrouping property
+ */
+ t = addProp(t,VCGroupingProp);
+ setVObjectStringZValue(t,lookupProp_(n));
+ } while (n != gs);
+ deleteStr(gs);
+ return p;
+ }
+ else
+ return addProp_(o,lookupProp(g));
+}
+
+DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v)
+{
+ VObject *prop;
+ prop = addProp(o,p);
+ setVObjectStringZValue_(prop, strdup( v ) );
+ return prop;
+}
+
+DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v,
+ unsigned int size)
+{
+ VObject *prop;
+ prop = addProp(o,p);
+ setValueWithSize_(prop, (void*)v, size);
+ return prop;
+}
+
+DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v,
+ unsigned int size)
+{
+ return addPropSizedValue_(o,p,dupStr(v,size),size);
+}
+
+
+DLLEXPORT(void) cleanVObject(VObject *o)
+{
+ if (o == 0) return;
+ if (o->prop) {
+ /* destroy time: cannot use the iterator here.
+ Have to break the cycle in the circular link
+ list and turns it into regular NULL-terminated
+ list -- since at some point of destruction,
+ the reference entry for the iterator to work
+ will not longer be valid.
+ */
+ VObject *p;
+ p = o->prop->next;
+ o->prop->next = 0;
+ do {
+ VObject *t = p->next;
+ cleanVObject(p);
+ p = t;
+ } while (p);
+ }
+ switch (VALUE_TYPE(o)) {
+ case VCVT_STRINGZ:
+ case VCVT_RAW:
+ // assume they are all allocated by malloc.
+ free((char*)STRINGZ_VALUE_OF(o));
+ break;
+ case VCVT_VOBJECT:
+ cleanVObject(VOBJECT_VALUE_OF(o));
+ break;
+ }
+ deleteVObject(o);
+}
+
+DLLEXPORT(void) cleanVObjects(VObject *list)
+{
+ while (list) {
+ VObject *t = list;
+ list = nextVObjectInList(list);
+ cleanVObject(t);
+ }
+}
+
+/*----------------------------------------------------------------------
+ The following is a String Table Facilities.
+ ----------------------------------------------------------------------*/
+
+#define STRTBLSIZE 255
+
+static StrItem *strTbl[STRTBLSIZE];
+
+static unsigned int hashStr(const char *s)
+{
+ unsigned int h = 0;
+ int i;
+ for (i=0;s[i];i++) {
+ h += s[i]*i;
+ }
+ return h % STRTBLSIZE;
+}
+
+DLLEXPORT(const char*) lookupStr(const char *s)
+{
+ StrItem *t;
+ unsigned int h = hashStr(s);
+ if ((t = strTbl[h]) != 0) {
+ do {
+ if (qstricmp(t->s,s) == 0) {
+ t->refCnt++;
+ return t->s;
+ }
+ t = t->next;
+ } while (t);
+ }
+ s = dupStr(s,0);
+ strTbl[h] = newStrItem(s,strTbl[h]);
+ return s;
+}
+
+DLLEXPORT(void) unUseStr(const char *s)
+{
+ StrItem *t, *p;
+ unsigned int h = hashStr(s);
+ if ((t = strTbl[h]) != 0) {
+ p = t;
+ do {
+ if (qstricmp(t->s,s) == 0) {
+ t->refCnt--;
+ if (t->refCnt == 0) {
+ if (p == strTbl[h]) {
+ strTbl[h] = t->next;
+ }
+ else {
+ p->next = t->next;
+ }
+ deleteStr(t->s);
+ deleteStrItem(t);
+ return;
+ }
+ }
+ p = t;
+ t = t->next;
+ } while (t);
+ }
+}
+
+DLLEXPORT(void) cleanStrTbl()
+{
+ int i;
+ for (i=0; i<STRTBLSIZE;i++) {
+ StrItem *t = strTbl[i];
+ while (t) {
+ StrItem *p;
+ deleteStr(t->s);
+ p = t;
+ t = t->next;
+ deleteStrItem(p);
+ } while (t);
+ strTbl[i] = 0;
+ }
+}
+
+
+struct PreDefProp {
+ const char *name;
+ const char *alias;
+ const char** fields;
+ unsigned int flags;
+ };
+
+/* flags in PreDefProp */
+#define PD_BEGIN 0x1
+#define PD_INTERNAL 0x2
+
+static const char *adrFields[] = {
+ VCPostalBoxProp,
+ VCExtAddressProp,
+ VCStreetAddressProp,
+ VCCityProp,
+ VCRegionProp,
+ VCPostalCodeProp,
+ VCCountryNameProp,
+ 0
+};
+
+static const char *nameFields[] = {
+ VCFamilyNameProp,
+ VCGivenNameProp,
+ VCAdditionalNamesProp,
+ VCNamePrefixesProp,
+ VCNameSuffixesProp,
+ NULL
+ };
+
+static const char *orgFields[] = {
+ VCOrgNameProp,
+ VCOrgUnitProp,
+ VCOrgUnit2Prop,
+ VCOrgUnit3Prop,
+ VCOrgUnit4Prop,
+ NULL
+ };
+
+static const char *AAlarmFields[] = {
+ VCRunTimeProp,
+ VCSnoozeTimeProp,
+ VCRepeatCountProp,
+ VCAudioContentProp,
+ 0
+ };
+
+/* ExDate -- has unamed fields */
+/* RDate -- has unamed fields */
+
+static const char *DAlarmFields[] = {
+ VCRunTimeProp,
+ VCSnoozeTimeProp,
+ VCRepeatCountProp,
+ VCDisplayStringProp,
+ 0
+ };
+
+static const char *MAlarmFields[] = {
+ VCRunTimeProp,
+ VCSnoozeTimeProp,
+ VCRepeatCountProp,
+ VCEmailAddressProp,
+ VCNoteProp,
+ 0
+ };
+
+static const char *PAlarmFields[] = {
+ VCRunTimeProp,
+ VCSnoozeTimeProp,
+ VCRepeatCountProp,
+ VCProcedureNameProp,
+ 0
+ };
+
+static struct PreDefProp propNames[] = {
+ { VC7bitProp, 0, 0, 0 },
+ { VC8bitProp, 0, 0, 0 },
+ { VCAAlarmProp, 0, AAlarmFields, 0 },
+ { VCAdditionalNamesProp, 0, 0, 0 },
+ { VCAdrProp, 0, adrFields, 0 },
+ { VCAgentProp, 0, 0, 0 },
+ { VCAIFFProp, 0, 0, 0 },
+ { VCAOLProp, 0, 0, 0 },
+ { VCAppleLinkProp, 0, 0, 0 },
+ { VCAttachProp, 0, 0, 0 },
+ { VCAttendeeProp, 0, 0, 0 },
+ { VCATTMailProp, 0, 0, 0 },
+ { VCAudioContentProp, 0, 0, 0 },
+ { VCAVIProp, 0, 0, 0 },
+ { VCBase64Prop, 0, 0, 0 },
+ { VCBBSProp, 0, 0, 0 },
+ { VCBirthDateProp, 0, 0, 0 },
+ { VCBMPProp, 0, 0, 0 },
+ { VCBodyProp, 0, 0, 0 },
+ { VCBusinessRoleProp, 0, 0, 0 },
+ { VCCalProp, 0, 0, PD_BEGIN },
+ { VCCaptionProp, 0, 0, 0 },
+ { VCCardProp, 0, 0, PD_BEGIN },
+ { VCCarProp, 0, 0, 0 },
+ { VCCategoriesProp, 0, 0, 0 },
+ { VCCellularProp, 0, 0, 0 },
+ { VCCGMProp, 0, 0, 0 },
+ { VCCharSetProp, 0, 0, 0 },
+ { VCCIDProp, VCContentIDProp, 0, 0 },
+ { VCCISProp, 0, 0, 0 },
+ { VCCityProp, 0, 0, 0 },
+ { VCClassProp, 0, 0, 0 },
+ { VCCommentProp, 0, 0, 0 },
+ { VCCompletedProp, 0, 0, 0 },
+ { VCContentIDProp, 0, 0, 0 },
+ { VCCountryNameProp, 0, 0, 0 },
+ { VCDAlarmProp, 0, DAlarmFields, 0 },
+ { VCDataSizeProp, 0, 0, PD_INTERNAL },
+ { VCDayLightProp, 0, 0, 0 },
+ { VCDCreatedProp, 0, 0, 0 },
+ { VCDeliveryLabelProp, 0, 0, 0 },
+ { VCDescriptionProp, 0, 0, 0 },
+ { VCDIBProp, 0, 0, 0 },
+ { VCDisplayStringProp, 0, 0, 0 },
+ { VCDomesticProp, 0, 0, 0 },
+ { VCDTendProp, 0, 0, 0 },
+ { VCDTstartProp, 0, 0, 0 },
+ { VCDueProp, 0, 0, 0 },
+ { VCEmailAddressProp, 0, 0, 0 },
+ { VCEncodingProp, 0, 0, 0 },
+ { VCEndProp, 0, 0, 0 },
+ { VCEventProp, 0, 0, PD_BEGIN },
+ { VCEWorldProp, 0, 0, 0 },
+ { VCExNumProp, 0, 0, 0 },
+ { VCExpDateProp, 0, 0, 0 },
+ { VCExpectProp, 0, 0, 0 },
+ { VCExtAddressProp, 0, 0, 0 },
+ { VCFamilyNameProp, 0, 0, 0 },
+ { VCFaxProp, 0, 0, 0 },
+ { VCFullNameProp, 0, 0, 0 },
+ { VCGeoLocationProp, 0, 0, 0 },
+ { VCGeoProp, 0, 0, 0 },
+ { VCGIFProp, 0, 0, 0 },
+ { VCGivenNameProp, 0, 0, 0 },
+ { VCGroupingProp, 0, 0, 0 },
+ { VCHomeProp, 0, 0, 0 },
+ { VCIBMMailProp, 0, 0, 0 },
+ { VCInlineProp, 0, 0, 0 },
+ { VCInternationalProp, 0, 0, 0 },
+ { VCInternetProp, 0, 0, 0 },
+ { VCISDNProp, 0, 0, 0 },
+ { VCJPEGProp, 0, 0, 0 },
+ { VCLanguageProp, 0, 0, 0 },
+ { VCLastModifiedProp, 0, 0, 0 },
+ { VCLastRevisedProp, 0, 0, 0 },
+ { VCLocationProp, 0, 0, 0 },
+ { VCLogoProp, 0, 0, 0 },
+ { VCMailerProp, 0, 0, 0 },
+ { VCMAlarmProp, 0, MAlarmFields, 0 },
+ { VCMCIMailProp, 0, 0, 0 },
+ { VCMessageProp, 0, 0, 0 },
+ { VCMETProp, 0, 0, 0 },
+ { VCModemProp, 0, 0, 0 },
+ { VCMPEG2Prop, 0, 0, 0 },
+ { VCMPEGProp, 0, 0, 0 },
+ { VCMSNProp, 0, 0, 0 },
+ { VCNamePrefixesProp, 0, 0, 0 },
+ { VCNameProp, 0, nameFields, 0 },
+ { VCNameSuffixesProp, 0, 0, 0 },
+ { VCNoteProp, 0, 0, 0 },
+ { VCOrgNameProp, 0, 0, 0 },
+ { VCOrgProp, 0, orgFields, 0 },
+ { VCOrgUnit2Prop, 0, 0, 0 },
+ { VCOrgUnit3Prop, 0, 0, 0 },
+ { VCOrgUnit4Prop, 0, 0, 0 },
+ { VCOrgUnitProp, 0, 0, 0 },
+ { VCPagerProp, 0, 0, 0 },
+ { VCPAlarmProp, 0, PAlarmFields, 0 },
+ { VCParcelProp, 0, 0, 0 },
+ { VCPartProp, 0, 0, 0 },
+ { VCPCMProp, 0, 0, 0 },
+ { VCPDFProp, 0, 0, 0 },
+ { VCPGPProp, 0, 0, 0 },
+ { VCPhotoProp, 0, 0, 0 },
+ { VCPICTProp, 0, 0, 0 },
+ { VCPMBProp, 0, 0, 0 },
+ { VCPostalBoxProp, 0, 0, 0 },
+ { VCPostalCodeProp, 0, 0, 0 },
+ { VCPostalProp, 0, 0, 0 },
+ { VCPowerShareProp, 0, 0, 0 },
+ { VCPreferredProp, 0, 0, 0 },
+ { VCPriorityProp, 0, 0, 0 },
+ { VCProcedureNameProp, 0, 0, 0 },
+ { VCProdIdProp, 0, 0, 0 },
+ { VCProdigyProp, 0, 0, 0 },
+ { VCPronunciationProp, 0, 0, 0 },
+ { VCPSProp, 0, 0, 0 },
+ { VCPublicKeyProp, 0, 0, 0 },
+ { VCQPProp, VCQuotedPrintableProp, 0, 0 },
+ { VCQuickTimeProp, 0, 0, 0 },
+ { VCQuotedPrintableProp, 0, 0, 0 },
+ { VCRDateProp, 0, 0, 0 },
+ { VCRegionProp, 0, 0, 0 },
+ { VCRelatedToProp, 0, 0, 0 },
+ { VCRepeatCountProp, 0, 0, 0 },
+ { VCResourcesProp, 0, 0, 0 },
+ { VCRNumProp, 0, 0, 0 },
+ { VCRoleProp, 0, 0, 0 },
+ { VCRRuleProp, 0, 0, 0 },
+ { VCRSVPProp, 0, 0, 0 },
+ { VCRunTimeProp, 0, 0, 0 },
+ { VCSequenceProp, 0, 0, 0 },
+ { VCSnoozeTimeProp, 0, 0, 0 },
+ { VCStartProp, 0, 0, 0 },
+ { VCStatusProp, 0, 0, 0 },
+ { VCStreetAddressProp, 0, 0, 0 },
+ { VCSubTypeProp, 0, 0, 0 },
+ { VCSummaryProp, 0, 0, 0 },
+ { VCTelephoneProp, 0, 0, 0 },
+ { VCTIFFProp, 0, 0, 0 },
+ { VCTimeZoneProp, 0, 0, 0 },
+ { VCTitleProp, 0, 0, 0 },
+ { VCTLXProp, 0, 0, 0 },
+ { VCTodoProp, 0, 0, PD_BEGIN },
+ { VCTranspProp, 0, 0, 0 },
+ { VCUniqueStringProp, 0, 0, 0 },
+ { VCURLProp, 0, 0, 0 },
+ { VCURLValueProp, 0, 0, 0 },
+ { VCValueProp, 0, 0, 0 },
+ { VCVersionProp, 0, 0, 0 },
+ { VCVideoProp, 0, 0, 0 },
+ { VCVoiceProp, 0, 0, 0 },
+ { VCWAVEProp, 0, 0, 0 },
+ { VCWMFProp, 0, 0, 0 },
+ { VCWorkProp, 0, 0, 0 },
+ { VCX400Prop, 0, 0, 0 },
+ { VCX509Prop, 0, 0, 0 },
+ { VCXRuleProp, 0, 0, 0 },
+ { 0,0,0,0 }
+ };
+
+
+static struct PreDefProp* lookupPropInfo(const char* str)
+{
+ /* brute force for now, could use a hash table here. */
+ int i;
+
+ for (i = 0; propNames[i].name; i++)
+ if (qstricmp(str, propNames[i].name) == 0) {
+ return &propNames[i];
+ }
+
+ return 0;
+}
+
+
+DLLEXPORT(const char*) lookupProp_(const char* str)
+{
+ int i;
+
+ for (i = 0; propNames[i].name; i++)
+ if (qstricmp(str, propNames[i].name) == 0) {
+ const char* s;
+ s = propNames[i].alias?propNames[i].alias:propNames[i].name;
+ return lookupStr(s);
+ }
+ return lookupStr(str);
+}
+
+
+DLLEXPORT(const char*) lookupProp(const char* str)
+{
+ int i;
+
+ for (i = 0; propNames[i].name; i++)
+ if (qstricmp(str, propNames[i].name) == 0) {
+ const char *s;
+ fieldedProp = propNames[i].fields;
+ s = propNames[i].alias?propNames[i].alias:propNames[i].name;
+ return lookupStr(s);
+ }
+ fieldedProp = 0;
+ return lookupStr(str);
+}
+
+
+/*----------------------------------------------------------------------
+ APIs to Output text form.
+ ----------------------------------------------------------------------*/
+#define OFILE_REALLOC_SIZE 256
+typedef struct OFile {
+ FILE *fp;
+ char *s;
+ int len;
+ int limit;
+ int alloc:1;
+ int fail:1;
+ } OFile;
+
+#if 0
+static void appendsOFile(OFile *fp, const char *s)
+{
+ int slen;
+ if (fp->fail) return;
+ slen = strlen(s);
+ if (fp->fp) {
+ fwrite(s,1,slen,fp->fp);
+ }
+ else {
+stuff:
+ if (fp->len + slen < fp->limit) {
+ memcpy(fp->s+fp->len,s,slen);
+ fp->len += slen;
+ return;
+ }
+ else if (fp->alloc) {
+ fp->limit = fp->limit + OFILE_REALLOC_SIZE;
+ if (OFILE_REALLOC_SIZE <= slen) fp->limit += slen;
+ fp->s = (char *) realloc(fp->s,fp->limit);
+ if (fp->s) goto stuff;
+ }
+ if (fp->alloc)
+ free(fp->s);
+ fp->s = 0;
+ fp->fail = 1;
+ }
+}
+
+static void appendcOFile(OFile *fp, char c)
+{
+ if (fp->fail) return;
+ if (fp->fp) {
+ fputc(c,fp->fp);
+ }
+ else {
+stuff:
+ if (fp->len+1 < fp->limit) {
+ fp->s[fp->len] = c;
+ fp->len++;
+ return;
+ }
+ else if (fp->alloc) {
+ fp->limit = fp->limit + OFILE_REALLOC_SIZE;
+ fp->s = (char *) realloc(fp->s,fp->limit);
+ if (fp->s) goto stuff;
+ }
+ if (fp->alloc)
+ free(fp->s);
+ fp->s = 0;
+ fp->fail = 1;
+ }
+}
+#else
+static void appendcOFile_(OFile *fp, char c)
+{
+ if (fp->fail) return;
+ if (fp->fp) {
+ fputc(c,fp->fp);
+ }
+ else {
+stuff:
+ if (fp->len+1 < fp->limit) {
+ fp->s[fp->len] = c;
+ fp->len++;
+ return;
+ }
+ else if (fp->alloc) {
+ fp->limit = fp->limit + OFILE_REALLOC_SIZE;
+ fp->s = (char *)realloc(fp->s,fp->limit);
+ if (fp->s) goto stuff;
+ }
+ if (fp->alloc)
+ free(fp->s);
+ fp->s = 0;
+ fp->fail = 1;
+ }
+}
+
+static void appendcOFile(OFile *fp, char c)
+{
+ if (c == '\n') {
+ /* write out as <CR><LF> */
+ appendcOFile_(fp,0xd);
+ appendcOFile_(fp,0xa);
+ }
+ else
+ appendcOFile_(fp,c);
+}
+
+static void appendsOFile(OFile *fp, const char *s)
+{
+ int i, slen;
+ slen = strlen(s);
+ for (i=0; i<slen; i++) {
+ appendcOFile(fp,s[i]);
+ }
+}
+
+#endif
+
+static void initOFile(OFile *fp, FILE *ofp)
+{
+ fp->fp = ofp;
+ fp->s = 0;
+ fp->len = 0;
+ fp->limit = 0;
+ fp->alloc = 0;
+ fp->fail = 0;
+}
+
+static int writeBase64(OFile *fp, unsigned char *s, long len)
+{
+ long cur = 0;
+ int i, numQuads = 0;
+ unsigned long trip;
+ unsigned char b;
+ char quad[5];
+#define MAXQUADS 16
+
+ quad[4] = 0;
+
+ while (cur < len) {
+ // collect the triplet of bytes into 'trip'
+ trip = 0;
+ for (i = 0; i < 3; i++) {
+ b = (cur < len) ? *(s + cur) : 0;
+ cur++;
+ trip = trip << 8 | b;
+ }
+ // fill in 'quad' with the appropriate four characters
+ for (i = 3; i >= 0; i--) {
+ b = (unsigned char)(trip & 0x3F);
+ trip = trip >> 6;
+ if ((3 - i) < (cur - len))
+ quad[i] = '='; // pad char
+ else if (b < 26) quad[i] = (char)b + 'A';
+ else if (b < 52) quad[i] = (char)(b - 26) + 'a';
+ else if (b < 62) quad[i] = (char)(b - 52) + '0';
+ else if (b == 62) quad[i] = '+';
+ else quad[i] = '/';
+ }
+ // now output 'quad' with appropriate whitespace and line ending
+ appendsOFile(fp, (numQuads == 0 ? " " : ""));
+ appendsOFile(fp, quad);
+ appendsOFile(fp, ((cur >= len)?"\n" :(numQuads==MAXQUADS-1?"\n" : "")));
+ numQuads = (numQuads + 1) % MAXQUADS;
+ }
+ appendcOFile(fp,'\n');
+
+ return 1;
+}
+
+static void writeQPString(OFile *fp, const char *s)
+{
+ const char *p = s;
+ while (*p) {
+ if (*p == '\n') {
+ if (p[1]) appendsOFile(fp,"=0A=");
+ }
+ appendcOFile(fp,*p);
+ p++;
+ }
+}
+
+
+
+static void writeVObject_(OFile *fp, VObject *o);
+
+static void writeValue(OFile *fp, VObject *o, unsigned long size)
+{
+ if (o == 0) return;
+ switch (VALUE_TYPE(o)) {
+ case VCVT_STRINGZ: {
+ writeQPString(fp, STRINGZ_VALUE_OF(o));
+ break;
+ }
+ case VCVT_UINT: {
+ char buf[16];
+ sprintf(buf,"%u", INTEGER_VALUE_OF(o));
+ appendsOFile(fp,buf);
+ break;
+ }
+ case VCVT_ULONG: {
+ char buf[16];
+ sprintf(buf,"%lu", LONG_VALUE_OF(o));
+ appendsOFile(fp,buf);
+ break;
+ }
+ case VCVT_RAW: {
+ appendcOFile(fp,'\n');
+ writeBase64(fp,(unsigned char*)(ANY_VALUE_OF(o)),size);
+ break;
+ }
+ case VCVT_VOBJECT:
+ appendcOFile(fp,'\n');
+ writeVObject_(fp,VOBJECT_VALUE_OF(o));
+ break;
+ }
+}
+
+static void writeAttrValue(OFile *fp, VObject *o)
+{
+ if (NAME_OF(o)) {
+ struct PreDefProp *pi;
+ pi = lookupPropInfo(NAME_OF(o));
+ if (pi && ((pi->flags & PD_INTERNAL) != 0)) return;
+ appendcOFile(fp,';');
+ appendsOFile(fp,NAME_OF(o));
+ }
+ else
+ appendcOFile(fp,';');
+ if (VALUE_TYPE(o)) {
+ appendcOFile(fp,'=');
+ writeValue(fp,o,0);
+ }
+}
+
+static void writeGroup(OFile *fp, VObject *o)
+{
+ char buf1[256];
+ char buf2[256];
+ strcpy(buf1,NAME_OF(o));
+ while ((o=isAPropertyOf(o,VCGroupingProp)) != 0) {
+ strcpy(buf2,STRINGZ_VALUE_OF(o));
+ strcat(buf2,".");
+ strcat(buf2,buf1);
+ strcpy(buf1,buf2);
+ }
+ appendsOFile(fp,buf1);
+}
+
+static int inList(const char **list, const char *s)
+{
+ if (list == 0) return 0;
+ while (*list) {
+ if (qstricmp(*list,s) == 0) return 1;
+ list++;
+ }
+ return 0;
+}
+
+static void writeProp(OFile *fp, VObject *o)
+{
+ if (NAME_OF(o)) {
+ struct PreDefProp *pi;
+ VObjectIterator t;
+ const char **fields_ = 0;
+ pi = lookupPropInfo(NAME_OF(o));
+ if (pi && ((pi->flags & PD_BEGIN) != 0)) {
+ writeVObject_(fp,o);
+ return;
+ }
+ if (isAPropertyOf(o,VCGroupingProp))
+ writeGroup(fp,o);
+ else
+ appendsOFile(fp,NAME_OF(o));
+ if (pi) fields_ = pi->fields;
+ initPropIterator(&t,o);
+ while (moreIteration(&t)) {
+ const char *s;
+ VObject *eachProp = nextVObject(&t);
+ s = NAME_OF(eachProp);
+ if (qstricmp(VCGroupingProp,s) && !inList(fields_,s))
+ writeAttrValue(fp,eachProp);
+ }
+ if (fields_) {
+ int i = 0, n = 0;
+ const char** fields = fields_;
+ /* output prop as fields */
+ appendcOFile(fp,':');
+ while (*fields) {
+ VObject *t = isAPropertyOf(o,*fields);
+ i++;
+ if (t) n = i;
+ fields++;
+ }
+ fields = fields_;
+ for (i=0;i<n;i++) {
+ writeValue(fp,isAPropertyOf(o,*fields),0);
+ fields++;
+ if (i<(n-1)) appendcOFile(fp,';');
+ }
+ }
+ }
+
+ if (VALUE_TYPE(o)) {
+ unsigned long size = 0;
+ VObject *p = isAPropertyOf(o,VCDataSizeProp);
+ if (p) size = LONG_VALUE_OF(p);
+ appendcOFile(fp,':');
+ writeValue(fp,o,size);
+ }
+
+ appendcOFile(fp,'\n');
+}
+
+static void writeVObject_(OFile *fp, VObject *o)
+{
+ if (NAME_OF(o)) {
+ struct PreDefProp *pi;
+ pi = lookupPropInfo(NAME_OF(o));
+
+ if (pi && ((pi->flags & PD_BEGIN) != 0)) {
+ VObjectIterator t;
+ const char *begin = NAME_OF(o);
+ appendsOFile(fp,"BEGIN:");
+ appendsOFile(fp,begin);
+ appendcOFile(fp,'\n');
+ initPropIterator(&t,o);
+ while (moreIteration(&t)) {
+ VObject *eachProp = nextVObject(&t);
+ writeProp(fp, eachProp);
+ }
+ appendsOFile(fp,"END:");
+ appendsOFile(fp,begin);
+ appendsOFile(fp,"\n\n");
+ }
+ }
+}
+
+void writeVObject(FILE *fp, VObject *o)
+{
+ OFile ofp;
+ // #####
+ //_setmode(_fileno(fp), _O_BINARY);
+ initOFile(&ofp,fp);
+ writeVObject_(&ofp,o);
+}
+
+DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o)
+{
+ QFileDirect f( fname);
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vobject write %s", fname);
+ return;
+ }
+
+ writeVObject( f.directHandle(),o );
+}
+
+DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list)
+{
+ QFileDirect f( fname);
+ if ( !f.open( IO_WriteOnly ) ) {
+ qWarning("Unable to open vobject write %s", fname);
+ return;
+ }
+
+ while (list) {
+ writeVObject(f.directHandle(),list);
+ list = nextVObjectInList(list);
+ }
+}
+
+// end of source file vobject.c
diff --git a/library/backend/vobject_p.h b/library/backend/vobject_p.h
new file mode 100644
index 0000000..b6a2c0a
--- a/dev/null
+++ b/library/backend/vobject_p.h
@@ -0,0 +1,401 @@
+/***************************************************************************
+(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+
+For purposes of this license notice, the term Licensors shall mean,
+collectively, Apple Computer, Inc., AT&T Corp., International
+Business Machines Corporation and Siemens Rolm Communications Inc.
+The term Licensor shall mean any of the Licensors.
+
+Subject to acceptance of the following conditions, permission is hereby
+granted by Licensors without the need for written agreement and without
+license or royalty fees, to use, copy, modify and distribute this
+software for any purpose.
+
+The above copyright notice and the following four paragraphs must be
+reproduced in all copies of this software and any software including
+this software.
+
+THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE
+ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR
+MODIFICATIONS.
+
+IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT,
+INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
+OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.
+
+The software is provided with RESTRICTED RIGHTS. Use, duplication, or
+disclosure by the government are subject to restrictions set forth in
+DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
+
+***************************************************************************/
+
+/*
+
+The vCard/vCalendar C interface is implemented in the set
+of files as follows:
+
+vcc.y, yacc source, and vcc.c, the yacc output you will use
+implements the core parser
+
+vobject.c implements an API that insulates the caller from
+the parser and changes in the vCard/vCalendar BNF
+
+port.h defines compilation environment dependent stuff
+
+vcc.h and vobject.h are header files for their .c counterparts
+
+vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions
+which you may find useful.
+
+test.c is a standalone test driver that exercises some of
+the features of the APIs provided. Invoke test.exe on a
+VCARD/VCALENDAR input text file and you will see the pretty
+print output of the internal representation (this pretty print
+output should give you a good idea of how the internal
+representation looks like -- there is one such output in the
+following too). Also, a file with the .out suffix is generated
+to show that the internal representation can be written back
+in the original text format.
+
+For more information on this API see the readme.txt file
+which accompanied this distribution.
+
+ Also visit:
+
+ http://www.versit.com
+ http://www.ralden.com
+
+*/
+
+
+#ifndef __VOBJECT_H__
+#define __VOBJECT_H__ 1
+
+#include <qstring.h>
+
+#define vCardClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCard"
+#define vCalendarClipboardFormat "+//ISBN 1-887687-00-9::versit::PDI//vCalendar"
+
+/* The above strings vCardClipboardFormat and vCalendarClipboardFormat
+are globally unique IDs which can be used to generate clipboard format
+ID's as per the requirements of a specific platform. For example, in
+Windows they are used as the parameter in a call to RegisterClipboardFormat.
+For example:
+
+ CLIPFORMAT foo = RegisterClipboardFormat(vCardClipboardFormat);
+
+*/
+
+#define vCardMimeType "text/x-vCard"
+#define vCalendarMimeType "text/x-vCalendar"
+
+#undef DLLEXPORT
+#include <qglobal.h>
+#if defined(Q_WS_WIN)
+#define DLLEXPORT(t) __declspec(dllexport) t
+#else
+#define DLLEXPORT(t) t
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+
+
+#define VC7bitProp "7BIT"
+#define VC8bitProp "8BIT"
+#define VCAAlarmProp "AALARM"
+#define VCAdditionalNamesProp "ADDN"
+#define VCAdrProp "ADR"
+#define VCAgentProp "AGENT"
+#define VCAIFFProp "AIFF"
+#define VCAOLProp "AOL"
+#define VCAppleLinkProp "APPLELINK"
+#define VCAttachProp "ATTACH"
+#define VCAttendeeProp "ATTENDEE"
+#define VCATTMailProp "ATTMAIL"
+#define VCAudioContentProp "AUDIOCONTENT"
+#define VCAVIProp "AVI"
+#define VCBase64Prop "BASE64"
+#define VCBBSProp "BBS"
+#define VCBirthDateProp "BDAY"
+#define VCBMPProp "BMP"
+#define VCBodyProp "BODY"
+#define VCBusinessRoleProp "ROLE"
+#define VCCalProp "VCALENDAR"
+#define VCCaptionProp "CAP"
+#define VCCardProp "VCARD"
+#define VCCarProp "CAR"
+#define VCCategoriesProp "CATEGORIES"
+#define VCCellularProp "CELL"
+#define VCCGMProp "CGM"
+#define VCCharSetProp "CS"
+#define VCCIDProp "CID"
+#define VCCISProp "CIS"
+#define VCCityProp "L"
+#define VCClassProp "CLASS"
+#define VCCommentProp "NOTE"
+#define VCCompletedProp "COMPLETED"
+#define VCContentIDProp "CONTENT-ID"
+#define VCCountryNameProp "C"
+#define VCDAlarmProp "DALARM"
+#define VCDataSizeProp "DATASIZE"
+#define VCDayLightProp "DAYLIGHT"
+#define VCDCreatedProp "DCREATED"
+#define VCDeliveryLabelProp "LABEL"
+#define VCDescriptionProp "DESCRIPTION"
+#define VCDIBProp "DIB"
+#define VCDisplayStringProp "DISPLAYSTRING"
+#define VCDomesticProp "DOM"
+#define VCDTendProp "DTEND"
+#define VCDTstartProp "DTSTART"
+#define VCDueProp "DUE"
+#define VCEmailAddressProp "EMAIL"
+#define VCEncodingProp "ENCODING"
+#define VCEndProp "END"
+#define VCEventProp "VEVENT"
+#define VCEWorldProp "EWORLD"
+#define VCExNumProp "EXNUM"
+#define VCExpDateProp "EXDATE"
+#define VCExpectProp "EXPECT"
+#define VCExtAddressProp "EXT ADD"
+#define VCFamilyNameProp "F"
+#define VCFaxProp "FAX"
+#define VCFullNameProp "FN"
+#define VCGeoProp "GEO"
+#define VCGeoLocationProp "GEO"
+#define VCGIFProp "GIF"
+#define VCGivenNameProp "G"
+#define VCGroupingProp "Grouping"
+#define VCHomeProp "HOME"
+#define VCIBMMailProp "IBMMail"
+#define VCInlineProp "INLINE"
+#define VCInternationalProp "INTL"
+#define VCInternetProp "INTERNET"
+#define VCISDNProp "ISDN"
+#define VCJPEGProp "JPEG"
+#define VCLanguageProp "LANG"
+#define VCLastModifiedProp "LAST-MODIFIED"
+#define VCLastRevisedProp "REV"
+#define VCLocationProp "LOCATION"
+#define VCLogoProp "LOGO"
+#define VCMailerProp "MAILER"
+#define VCMAlarmProp "MALARM"
+#define VCMCIMailProp "MCIMAIL"
+#define VCMessageProp "MSG"
+#define VCMETProp "MET"
+#define VCModemProp "MODEM"
+#define VCMPEG2Prop "MPEG2"
+#define VCMPEGProp "MPEG"
+#define VCMSNProp "MSN"
+#define VCNamePrefixesProp "NPRE"
+#define VCNameProp "N"
+#define VCNameSuffixesProp "NSUF"
+#define VCNoteProp "NOTE"
+#define VCOrgNameProp "ORGNAME"
+#define VCOrgProp "ORG"
+#define VCOrgUnit2Prop "OUN2"
+#define VCOrgUnit3Prop "OUN3"
+#define VCOrgUnit4Prop "OUN4"
+#define VCOrgUnitProp "OUN"
+#define VCPagerProp "PAGER"
+#define VCPAlarmProp "PALARM"
+#define VCParcelProp "PARCEL"
+#define VCPartProp "PART"
+#define VCPCMProp "PCM"
+#define VCPDFProp "PDF"
+#define VCPGPProp "PGP"
+#define VCPhotoProp "PHOTO"
+#define VCPICTProp "PICT"
+#define VCPMBProp "PMB"
+#define VCPostalBoxProp "BOX"
+#define VCPostalCodeProp "PC"
+#define VCPostalProp "POSTAL"
+#define VCPowerShareProp "POWERSHARE"
+#define VCPreferredProp "PREF"
+#define VCPriorityProp "PRIORITY"
+#define VCProcedureNameProp "PROCEDURENAME"
+#define VCProdIdProp "PRODID"
+#define VCProdigyProp "PRODIGY"
+#define VCPronunciationProp "SOUND"
+#define VCPSProp "PS"
+#define VCPublicKeyProp "KEY"
+#define VCQPProp "QP"
+#define VCQuickTimeProp "QTIME"
+#define VCQuotedPrintableProp "QUOTED-PRINTABLE"
+#define VCRDateProp "RDATE"
+#define VCRegionProp "R"
+#define VCRelatedToProp "RELATED-TO"
+#define VCRepeatCountProp "REPEATCOUNT"
+#define VCResourcesProp "RESOURCES"
+#define VCRNumProp "RNUM"
+#define VCRoleProp "ROLE"
+#define VCRRuleProp "RRULE"
+#define VCRSVPProp "RSVP"
+#define VCRunTimeProp "RUNTIME"
+#define VCSequenceProp "SEQUENCE"
+#define VCSnoozeTimeProp "SNOOZETIME"
+#define VCStartProp "START"
+#define VCStatusProp "STATUS"
+#define VCStreetAddressProp "STREET"
+#define VCSubTypeProp "SUBTYPE"
+#define VCSummaryProp "SUMMARY"
+#define VCTelephoneProp "TEL"
+#define VCTIFFProp "TIFF"
+#define VCTimeZoneProp "TZ"
+#define VCTitleProp "TITLE"
+#define VCTLXProp "TLX"
+#define VCTodoProp "VTODO"
+#define VCTranspProp "TRANSP"
+#define VCUniqueStringProp "UID"
+#define VCURLProp "URL"
+#define VCURLValueProp "URLVAL"
+#define VCValueProp "VALUE"
+#define VCVersionProp "VERSION"
+#define VCVideoProp "VIDEO"
+#define VCVoiceProp "VOICE"
+#define VCWAVEProp "WAVE"
+#define VCWMFProp "WMF"
+#define VCWorkProp "WORK"
+#define VCX400Prop "X400"
+#define VCX509Prop "X509"
+#define VCXRuleProp "XRULE"
+
+
+typedef struct VObject VObject;
+
+typedef struct VObjectIterator {
+ VObject* start;
+ VObject* next;
+ } VObjectIterator;
+
+extern DLLEXPORT(VObject*) newVObject(const char *id);
+extern DLLEXPORT(void) deleteVObject(VObject *p);
+extern DLLEXPORT(char*) dupStr(const char *s, unsigned int size);
+extern DLLEXPORT(void) deleteStr(const char *p);
+extern DLLEXPORT(void) unUseStr(const char *s);
+
+extern DLLEXPORT(void) setVObjectName(VObject *o, const char* id);
+extern DLLEXPORT(void) setVObjectStringZValue(VObject *o, const char *s);
+extern DLLEXPORT(void) setVObjectStringZValue_(VObject *o, const char *s);
+extern DLLEXPORT(void) setVObjectIntegerValue(VObject *o, unsigned int i);
+extern DLLEXPORT(void) setVObjectLongValue(VObject *o, unsigned long l);
+extern DLLEXPORT(void) setVObjectAnyValue(VObject *o, void *t);
+extern DLLEXPORT(VObject*) setValueWithSize(VObject *prop, void *val, unsigned int size);
+extern DLLEXPORT(VObject*) setValueWithSize_(VObject *prop, void *val, unsigned int size);
+
+extern DLLEXPORT(const char*) vObjectName(VObject *o);
+extern DLLEXPORT(const char*) vObjectStringZValue(VObject *o);
+extern DLLEXPORT(unsigned int) vObjectIntegerValue(VObject *o);
+extern DLLEXPORT(unsigned long) vObjectLongValue(VObject *o);
+extern DLLEXPORT(void*) vObjectAnyValue(VObject *o);
+extern DLLEXPORT(VObject*) vObjectVObjectValue(VObject *o);
+extern DLLEXPORT(void) setVObjectVObjectValue(VObject *o, VObject *p);
+
+extern DLLEXPORT(VObject*) addVObjectProp(VObject *o, VObject *p);
+extern DLLEXPORT(VObject*) addProp(VObject *o, const char *id);
+extern DLLEXPORT(VObject*) addProp_(VObject *o, const char *id);
+extern DLLEXPORT(VObject*) addPropValue(VObject *o, const char *p, const char *v);
+extern DLLEXPORT(VObject*) addPropSizedValue_(VObject *o, const char *p, const char *v, unsigned int size);
+extern DLLEXPORT(VObject*) addPropSizedValue(VObject *o, const char *p, const char *v, unsigned int size);
+extern DLLEXPORT(VObject*) addGroup(VObject *o, const char *g);
+extern DLLEXPORT(void) addList(VObject **o, VObject *p);
+
+extern DLLEXPORT(VObject*) isAPropertyOf(VObject *o, const char *id);
+
+extern DLLEXPORT(VObject*) nextVObjectInList(VObject *o);
+extern DLLEXPORT(void) initPropIterator(VObjectIterator *i, VObject *o);
+extern DLLEXPORT(int) moreIteration(VObjectIterator *i);
+extern DLLEXPORT(VObject*) nextVObject(VObjectIterator *i);
+
+extern DLLEXPORT(const char*) lookupStr(const char *s);
+extern DLLEXPORT(void) cleanStrTbl();
+
+extern DLLEXPORT(void) cleanVObject(VObject *o);
+extern DLLEXPORT(void) cleanVObjects(VObject *list);
+
+extern DLLEXPORT(const char*) lookupProp(const char* str);
+extern DLLEXPORT(const char*) lookupProp_(const char* str);
+
+extern DLLEXPORT(void) writeVObjectToFile(char *fname, VObject *o);
+extern DLLEXPORT(void) writeVObjectsToFile(char *fname, VObject *list);
+
+extern DLLEXPORT(int) vObjectValueType(VObject *o);
+
+/* return type of vObjectValueType: */
+#define VCVT_NOVALUE 0
+ /* if the VObject has no value associated with it. */
+#define VCVT_STRINGZ 1
+ /* if the VObject has value set by setVObjectStringZValue. */
+#define VCVT_UINT 2
+ /* if the VObject has value set by setVObjectIntegerValue. */
+#define VCVT_ULONG 3
+ /* if the VObject has value set by setVObjectLongValue. */
+#define VCVT_RAW 4
+ /* if the VObject has value set by setVObjectAnyValue. */
+#define VCVT_VOBJECT 5
+ /* if the VObject has value set by setVObjectVObjectValue. */
+
+extern const char** fieldedProp;
+
+/***************************************************
+ * The methods below are implemented in vcc.c (generated from vcc.y )
+ ***************************************************/
+
+/* NOTE regarding printVObject and writeVObject
+
+The functions below are not exported from the DLL because they
+take a FILE* as a parameter, which cannot be passed across a DLL
+interface (at least that is my experience). Instead you can use
+their companion functions which take file names or pointers
+to memory. However, if you are linking this code into
+your build directly then you may find them a more convenient API
+and you can go ahead and use them. If you try to use them with
+the DLL LIB you will get a link error.
+*/
+extern void writeVObject(FILE *fp, VObject *o);
+
+
+
+typedef void (*MimeErrorHandler)(char *);
+
+extern DLLEXPORT(void) registerMimeErrorHandler(MimeErrorHandler);
+
+extern DLLEXPORT(VObject*) Parse_MIME(const char *input, unsigned long len);
+extern DLLEXPORT(VObject*) Parse_MIME_FromFileName(char* fname);
+
+
+/* NOTE regarding Parse_MIME_FromFile
+The function above, Parse_MIME_FromFile, comes in two flavors,
+neither of which is exported from the DLL. Each version takes
+a CFile or FILE* as a parameter, neither of which can be
+passed across a DLL interface (at least that is my experience).
+If you are linking this code into your build directly then
+you may find them a more convenient API that the other flavors
+that take a file name. If you use them with the DLL LIB you
+will get a link error.
+*/
+
+
+#if INCLUDEMFC
+extern VObject* Parse_MIME_FromFile(CFile *file);
+#else
+extern VObject* Parse_MIME_FromFile(FILE *file);
+#endif
+
+#endif /* __VOBJECT_H__ */
+
+
diff --git a/library/calendar.cpp b/library/calendar.cpp
new file mode 100644
index 0000000..b9ef585
--- a/dev/null
+++ b/library/calendar.cpp
@@ -0,0 +1,66 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "calendar.h"
+
+#include <qdatetime.h>
+
+QString Calendar::nameOfMonth( int m )
+{
+ QDate d;
+ return d.monthName( m );
+}
+
+QString Calendar::nameOfDay( int d )
+{
+ QDate dt;
+ return dt.dayName( d );
+}
+
+QValueList<Calendar::Day> Calendar::daysOfMonth( int year, int month,
+ bool startWithMonday )
+{
+ QDate temp;
+ temp.setYMD( year, month, 1 );
+ int firstDay = temp.dayOfWeek();
+ int i;
+ QDate prev;
+ QValueList<Day> days;
+
+ if ( startWithMonday )
+ i = 1;
+ else
+ i = 0;
+
+ if ( month > 1 )
+ prev.setYMD( year, month - 1, 1 );
+ else
+ prev.setYMD( year - 1, 12, 1 );
+ for ( ; i < firstDay; i++ ) {
+ days.append( Day( prev.daysInMonth() - ( firstDay - i - 1 ),
+ Day::PrevMonth, FALSE ) );
+ }
+ for ( i = 1; i <= temp.daysInMonth(); i++ )
+ days.append( Day( i, Day::ThisMonth, FALSE ) );
+ i = 0;
+ while ( days.count() < 6 * 7 )
+ days.append( Day( ++i, Day::NextMonth, FALSE ) );
+
+ return days;
+}
diff --git a/library/calendar.h b/library/calendar.h
new file mode 100644
index 0000000..b716f8e
--- a/dev/null
+++ b/library/calendar.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CALENDAR_H
+#define CALENDAR_H
+
+#include <qstring.h>
+#include <qvaluelist.h>
+
+class Calendar
+{
+public:
+ struct Day
+ {
+ enum Type { PrevMonth, ThisMonth, NextMonth };
+
+ Day() : date( 0 ), type( ThisMonth ), holiday( FALSE ) {}
+ Day( int d, Type t, bool h ) : date( d ), type( t ), holiday( h ) {}
+
+ int date;
+ Type type;
+ bool holiday;
+ };
+
+ static QString nameOfMonth( int m );
+ static QString nameOfDay( int d );
+ static QValueList<Day> daysOfMonth( int year, int month, bool startWithMonday = FALSE );
+
+};
+
+#endif
diff --git a/library/categoryedit_p.cpp b/library/categoryedit_p.cpp
new file mode 100644
index 0000000..06e5fec
--- a/dev/null
+++ b/library/categoryedit_p.cpp
@@ -0,0 +1,227 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "categoryedit_p.h"
+
+#include <qpe/categories.h>
+
+#include <qdir.h>
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qlistview.h>
+#include <qstringlist.h>
+#include <qtoolbutton.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <stdlib.h>
+
+
+using namespace Qtopia;
+
+class CategoryEditPrivate
+{
+public:
+ CategoryEditPrivate( QWidget *parent, const QString &appName )
+ : mCategories( parent, "" ),
+ mStrApp( appName )
+ {
+ editItem = 0;
+ mCategories.load( categoryFileName() );
+ }
+ Categories mCategories;
+ QListViewItem *editItem;
+ QString mStrApp;
+ QString mVisible;
+};
+
+CategoryEdit::CategoryEdit( QWidget *parent, const char *name )
+ : CategoryEditBase( parent, name )
+{
+ d = 0;
+}
+
+CategoryEdit::CategoryEdit( const QArray<int> &recCats,
+ const QString &appName, const QString &visibleName,
+ QWidget *parent, const char *name )
+ : CategoryEditBase( parent, name )
+{
+ d = 0;
+ setCategories( recCats, appName, visibleName );
+}
+
+void CategoryEdit::setCategories( const QArray<int> &recCats,
+ const QString &appName, const QString &visibleName )
+{
+ if ( !d )
+ d = new CategoryEditPrivate( (QWidget*)parent(), name() );
+ d->mStrApp = appName;
+ d->mVisible = visibleName;
+ QArray<int> cats = d->mCategories.ids( d->mStrApp );
+ lvView->clear();
+ QStringList appCats = d->mCategories.labels( d->mStrApp );
+ QStringList::ConstIterator it;
+ int i, j;
+ for ( i = 0, it = appCats.begin(); it != appCats.end(); i++, ++it ) {
+ QCheckListItem *chk;
+ chk = new QCheckListItem( lvView, (*it), QCheckListItem::CheckBox );
+ if ( !d->mCategories.isGlobal((*it)) )
+ chk->setText( 1, tr(d->mVisible) );
+ else
+ chk->setText( 1, tr("All") );
+ // Is this record using this category, then we should check it
+ for ( j = 0; j < int(recCats.count()); j++ ) {
+ if ( cats[i] == recCats[j] ) {
+ chk->setOn( true );
+ break;
+ }
+ }
+ }
+ lvView->setSorting( 0, TRUE );
+ lvView->sort();
+ if ( lvView->childCount() < 1 )
+ txtCat->setEnabled( FALSE );
+ else {
+ lvView->setSelected( lvView->firstChild(), true );
+ }
+}
+
+CategoryEdit::~CategoryEdit()
+{
+ if ( d )
+ delete d;
+}
+
+void CategoryEdit::slotSetText( QListViewItem *selected )
+{
+ d->editItem = selected;
+ if ( !d->editItem )
+ return;
+ txtCat->setText( d->editItem->text(0) );
+ txtCat->setEnabled( true );
+ if ( d->editItem->text(1) == tr("All") )
+ chkGlobal->setChecked( true );
+ else
+ chkGlobal->setChecked( false );
+}
+
+void CategoryEdit::slotAdd()
+{
+ QString name = tr( "New Category" );
+ bool insertOk = FALSE;
+ int num = 0;
+ while ( !insertOk ) {
+ if ( num++ > 0 )
+ name = tr("New Category ") + QString::number(num);
+ insertOk = d->mCategories.addCategory( d->mStrApp, name );
+ }
+ QCheckListItem *chk;
+ chk = new QCheckListItem( lvView, name, QCheckListItem::CheckBox );
+ if ( !chkGlobal->isChecked() )
+ chk->setText( 1, tr(d->mVisible) );
+ else
+ chk->setText( 1, tr("All") );
+
+ lvView->setSelected( chk, TRUE );
+ txtCat->selectAll();
+}
+
+void CategoryEdit::slotRemove()
+{
+ d->editItem = lvView->selectedItem();
+ if ( d->editItem ) {
+ QListViewItem *sibling = d->editItem->nextSibling();
+
+ d->mCategories.removeCategory( d->mStrApp, d->editItem->text(0) );
+
+ delete d->editItem;
+ d->editItem = 0;
+
+ if ( sibling )
+ lvView->setSelected( sibling, TRUE );
+ }
+ if ( lvView->childCount() < 1 ) {
+ txtCat->clear();
+ txtCat->setEnabled( FALSE );
+ }
+}
+
+void CategoryEdit::slotSetGlobal( bool isChecked )
+{
+ if ( d->editItem ) {
+ if ( isChecked )
+ d->editItem->setText( 1, tr("All") );
+ else
+ d->editItem->setText( 1, tr(d->mVisible) );
+
+ d->mCategories.setGlobal( d->mStrApp, d->editItem->text( 0 ), isChecked );
+ }
+}
+
+void CategoryEdit::slotTextChanged( const QString &strNew )
+{
+ if ( d->editItem ) {
+ if ( chkGlobal->isChecked() )
+ d->mCategories.renameGlobalCategory( d->editItem->text(0), strNew );
+ else
+ d->mCategories.renameCategory( d->mStrApp, d->editItem->text(0), strNew );
+ d->editItem->setText( 0, strNew );
+ }
+}
+
+QArray<int> CategoryEdit::newCategories()
+{
+ QArray<int> a;
+ if ( d ) {
+ d->mCategories.save( categoryFileName() );
+ QListViewItemIterator it( lvView );
+ QValueList<int> l;
+ for ( ; it.current(); ++it ) {
+ if ( reinterpret_cast<QCheckListItem*>(it.current())->isOn() )
+ l.append( d->mCategories.id( d->mStrApp, it.current()->text(0) ) );
+ }
+ uint i = 0;
+ a.resize( l.count() );
+ for ( QValueList<int>::Iterator lit = l.begin(); lit != l.end(); ++lit )
+ a[i++] = *lit;
+ }
+ return a;
+}
+
+void CategoryEdit::accept()
+{
+ // write our categories out...
+ d->mCategories.save( categoryFileName() );
+ // QDialog::accept();
+}
+
+QString categoryFileName()
+{
+ QDir dir = (QString(getenv("HOME")) + "/Settings");
+ if ( !dir.exists() )
+ mkdir( dir.path().local8Bit(), 0700 );
+ return dir.path() + "/" + "Categories" + ".xml";
+}
+
+void CategoryEdit::kludge()
+{
+ lvView->setMaximumHeight( 130 );
+}
diff --git a/library/categoryedit_p.h b/library/categoryedit_p.h
new file mode 100644
index 0000000..bb7f571
--- a/dev/null
+++ b/library/categoryedit_p.h
@@ -0,0 +1,60 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __CATEGORYEDIT_H__
+#define __CATEGORYEDIT_H__
+
+#include "categoryeditbase_p.h"
+#include <qarray.h>
+
+class CategoryEditPrivate;
+
+class CategoryEdit : public CategoryEditBase
+{
+ Q_OBJECT
+
+public:
+ CategoryEdit( QWidget *parent = 0, const char *name = 0 );
+ CategoryEdit( const QArray<int> &vlRecs, const QString &appName,
+ const QString &visibleName,
+ QWidget *parent = 0, const char *name = 0 );
+ ~CategoryEdit();
+ void setCategories( const QArray<int> &vlRecs,
+ const QString &appName, const QString &visibleName );
+ QArray<int> newCategories();
+ void kludge();
+
+protected:
+ void accept();
+
+protected slots:
+ void slotAdd();
+ void slotRemove();
+ void slotSetText( QListViewItem *selected );
+ void slotSetGlobal( bool isChecked );
+ void slotTextChanged( const QString &strNew );
+
+private:
+ CategoryEditPrivate *d;
+};
+
+QString categoryFileName();
+
+#endif
diff --git a/library/categoryeditbase_p.ui b/library/categoryeditbase_p.ui
new file mode 100644
index 0000000..a76e433
--- a/dev/null
+++ b/library/categoryeditbase_p.ui
@@ -0,0 +1,223 @@
+<!DOCTYPE UI><UI>
+<class>CategoryEditBase</class>
+<comment>/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/</comment>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>CategoryEditBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>201</width>
+ <height>287</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Category Edit</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>3</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget>
+ <class>QListView</class>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Categories</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Application</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Categories Go Here</string>
+ </property>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ <property>
+ <name>pixmap</name>
+ <pixmap></pixmap>
+ </property>
+ <property>
+ <name>pixmap</name>
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lvView</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>txtCat</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdAdd</cstring>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Add</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdDel</cstring>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>chkGlobal</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Global</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="499">789ccd904d6ac3301046f73e85f0ec4c71a2ca2a36214748e9b250b2188d4649164e203f8b527af7ea934963e805fa49a0790f4948b368ccfbdbc6348bea72e5eb418cecf96c9a781bc7cf8fedfaabaaed8bc97330b67eaaead688793d1d1535e59a9625c01dd059b77465a7003dfbc13330017bd7dbde0103903bb6dc0115285e9ec503191815031881a9a4bc0121626aa74c8eb2092479a1bba318a3aa26520d74771cb46811a1dfb38939e4a4448ffb0a8ba4dddcc5c0b0ffc1f15f87aee48fa4d28276d6aba92970dfabea074d4776b4</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>lvView</sender>
+ <signal>selectionChanged(QListViewItem*)</signal>
+ <receiver>CategoryEditBase</receiver>
+ <slot>slotSetText( QListViewItem* )</slot>
+ </connection>
+ <connection>
+ <sender>cmdAdd</sender>
+ <signal>clicked()</signal>
+ <receiver>CategoryEditBase</receiver>
+ <slot>slotAdd()</slot>
+ </connection>
+ <connection>
+ <sender>cmdDel</sender>
+ <signal>clicked()</signal>
+ <receiver>CategoryEditBase</receiver>
+ <slot>slotRemove()</slot>
+ </connection>
+ <connection>
+ <sender>txtCat</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>CategoryEditBase</receiver>
+ <slot>slotTextChanged(const QString &amp;)</slot>
+ </connection>
+ <connection>
+ <sender>chkGlobal</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>CategoryEditBase</receiver>
+ <slot>slotSetGlobal( bool )</slot>
+ </connection>
+ <slot access="public">slotSetGlobal( bool )</slot>
+ <slot access="public">slotAdd()</slot>
+ <slot access="public">slotRemove()</slot>
+ <slot access="public">slotSetText( QListViewItem* )</slot>
+ <slot access="public">slotTextChanged(const QString &amp;)</slot>
+</connections>
+</UI>
diff --git a/library/categorymenu.cpp b/library/categorymenu.cpp
new file mode 100644
index 0000000..52a127c
--- a/dev/null
+++ b/library/categorymenu.cpp
@@ -0,0 +1,110 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "categorymenu.h"
+#include "backend/categories.h"
+#include "categoryselect.h"
+#include <qstring.h>
+#include <qmap.h>
+
+CategoryMenu::CategoryMenu( const QString &n, bool ig = TRUE,
+ QWidget *parent = 0, const char *name = 0 ) :
+ QPopupMenu(parent, name),
+ appName(n),
+ includeGlobal(ig)
+{
+ currentMid = 1;
+ reload();
+ connect(this, SIGNAL(activated(int)), this, SLOT(mapMenuId(int)));
+}
+
+CategoryMenu::~CategoryMenu( )
+{
+}
+
+void CategoryMenu::reload()
+{
+ clear();
+ Categories c;
+
+ c.load(categoryFileName());
+
+ QStringList sl = c.labels(appName, includeGlobal);
+ int mid = 1;
+
+ insertItem(tr("All"), mid);
+ mid++;
+ insertItem(tr("Unfiled"), mid);
+ mid++;
+
+ for (QStringList::Iterator it = sl.begin();
+ it != sl.end(); ++it ) {
+ int cid = c.id(appName, *it);
+ insertItem(*it, mid);
+ menuToId.insert(mid, cid);
+ idToMenu.insert(cid, mid);
+ mid++;
+ }
+
+ setItemChecked(currentMid, TRUE );
+}
+
+void CategoryMenu::mapMenuId(int id)
+{
+ if (id == currentMid)
+ return;
+ setItemChecked( currentMid, FALSE );
+ setItemChecked( id, TRUE );
+ currentMid = id;
+
+ emit categoryChange();
+}
+
+bool CategoryMenu::isSelected(const QArray<int> &cUids) const
+{
+ if (currentMid == 1)
+ return TRUE;
+
+ if (currentMid == 2 && cUids.count() == 0)
+ return TRUE;
+
+ if (cUids.contains(menuToId[currentMid]))
+ return TRUE;
+
+ return FALSE;
+}
+
+void CategoryMenu::setCurrentCategory( int newCatUid )
+{
+ if (!idToMenu.contains(newCatUid))
+ return;
+
+ mapMenuId(idToMenu[newCatUid]);
+}
+
+void CategoryMenu::setCurrentCategoryAll( )
+{
+ mapMenuId(1);
+}
+
+void CategoryMenu::setCurrentCategoryUnfiled( )
+{
+ mapMenuId(2);
+}
diff --git a/library/categorymenu.h b/library/categorymenu.h
new file mode 100644
index 0000000..c45bfca
--- a/dev/null
+++ b/library/categorymenu.h
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __CATEGORYMENU_H__
+#define __CATEGORYMENU_H__
+
+#include <qpopupmenu.h>
+#include <qstring.h>
+#include <qarray.h>
+#include <qmap.h>
+
+class CategoryMenuPrivate;
+class CategoryMenu : public QPopupMenu
+{
+ Q_OBJECT
+public:
+ CategoryMenu( const QString &appName, bool, QWidget *parent = 0,
+ const char *name = 0 );
+ ~CategoryMenu();
+
+ bool isSelected(const QArray<int> &cUids) const;
+
+ void setCurrentCategory( int newCatUid );
+ void setCurrentCategoryAll( );
+ void setCurrentCategoryUnfiled( );
+
+signals:
+ void categoryChange();
+
+public slots:
+ void reload();
+
+private slots:
+ void mapMenuId(int);
+
+private:
+ QString appName;
+ bool includeGlobal;
+
+ QMap<int, int> menuToId;
+ QMap<int, int> idToMenu;
+ int currentMid;
+
+ CategoryMenuPrivate *d;
+};
+
+#endif
diff --git a/library/categoryselect.cpp b/library/categoryselect.cpp
new file mode 100644
index 0000000..dc5d1fa
--- a/dev/null
+++ b/library/categoryselect.cpp
@@ -0,0 +1,315 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/categories.h>
+
+#include <qdialog.h>
+#include <qlayout.h>
+#include <qtoolbutton.h>
+
+#include "categorywidget.h"
+#include "categoryselect.h"
+
+
+class CategoryComboPrivate
+{
+public:
+ CategoryComboPrivate(QObject *o)
+ : mCat( o )
+ {
+ }
+ QArray<int> mAppCats;
+ QString mStrAppName;
+ QString mStrVisibleName;
+ Categories mCat;
+};
+
+class CategorySelectPrivate
+{
+public:
+ CategorySelectPrivate( const QArray<int> &cats)
+ : mRec( cats ),
+ usingAll( false )
+ {
+ }
+ CategorySelectPrivate()
+ {
+ }
+ QArray<int> mRec;
+ bool usingAll;
+ QString mVisibleName;
+};
+
+CategoryCombo::CategoryCombo( QWidget *parent, const char *name )
+ : QComboBox( parent, name )
+{
+ d = new CategoryComboPrivate(this);
+}
+
+void CategoryCombo::initCombo( const QArray<int> &recCats,
+ const QString &appName )
+{
+ initCombo( recCats, appName, appName );
+}
+
+void CategoryCombo::initCombo( const QArray<int> &recCats,
+ const QString &appName,
+ const QString &visibleName )
+{
+ d->mStrAppName = appName;
+ d->mStrVisibleName = visibleName;
+ clear();
+ QStringList slApp;
+
+ QObject::connect( this, SIGNAL(activated(int)),
+ this, SLOT(slotValueChanged(int)) );
+ bool loadOk = d->mCat.load( categoryFileName() );
+ slApp = d->mCat.labels( d->mStrAppName, TRUE, Categories::UnfiledLabel );
+ d->mAppCats = d->mCat.ids( d->mStrAppName );
+
+ int i,
+ j,
+ saveMe,
+ recCount;
+ QStringList::Iterator it;
+ // now add in all the items...
+ recCount = recCats.count();
+ saveMe = -1;
+ if ( recCount > 1 && loadOk ) {
+ it = slApp.begin();
+ insertItem( *it );
+ ++it;
+ for ( j = 0; it != slApp.end(); ++it, j++ ) {
+ // grr... we have to go through and compare...
+ if ( j < int(d->mAppCats.size()) ) {
+ for ( i = 0; i < recCount; i++ ) {
+ if ( recCats[i] == d->mAppCats[j] ) {
+ (*it).append( tr(" (Multi.)") );
+ if ( saveMe < 0 )
+ saveMe = j;
+ // no need to continue through the list.
+ break;
+ }
+ }
+ }
+ insertItem( *it );
+ }
+ } else
+ insertStringList( slApp );
+
+ if ( recCount > 0 && loadOk ) {
+ for ( i = 0; i < int(d->mAppCats.size()); i++ ) {
+ if ( d->mAppCats[i] == recCats[0] ) {
+ setCurrentItem( i + 1 );
+ break;
+ }
+ }
+ } else
+ setCurrentItem( 0 ); // unfiled
+ QObject::connect( this, SIGNAL(activated(int)),
+ this, SLOT(slotValueChanged(int)) );
+}
+
+CategoryCombo::~CategoryCombo()
+{
+ delete d;
+}
+
+int CategoryCombo::currentCategory() const
+{
+ int returnMe;
+ returnMe = currentItem();
+ // unfiled is now 0...
+ if ( returnMe == 0 )
+ returnMe = -1;
+ else if ( returnMe > (int)d->mAppCats.count() ) // only happen on "All"
+ returnMe = -2;
+ else
+ returnMe = d->mAppCats[returnMe - 1];
+ return returnMe;
+}
+
+void CategoryCombo::setCurrentCategory( int newCatUid )
+{
+ int i;
+ for ( i = 0; i < int(d->mAppCats.size()); i++ ) {
+ if ( d->mAppCats[i] == newCatUid )
+ setCurrentItem( i );
+ }
+}
+
+void CategoryCombo::setCurrentText( const QString &str )
+{
+ int i;
+ int stop;
+ stop = count();
+ for ( i = 0; i < stop; i++ ) {
+ if ( text( i ) == str ) {
+ setCurrentItem( i );
+ break;
+ }
+ }
+}
+
+void CategoryCombo::slotValueChanged( int )
+{
+ emit sigCatChanged( currentCategory() );
+}
+
+CategorySelect::CategorySelect( QWidget *parent, const char *name )
+ : QHBox( parent, name ),
+ cmbCat( 0 ),
+ cmdCat( 0 ),
+ d( 0 )
+{
+ d = new CategorySelectPrivate();
+ init();
+}
+
+CategorySelect::CategorySelect( const QArray<int> &vl,
+ const QString &appName, QWidget *parent,
+ const char *name )
+ : QHBox( parent, name )
+{
+ d = new CategorySelectPrivate( vl );
+ init();
+ setCategories( vl, appName, appName );
+}
+
+CategorySelect::CategorySelect( const QArray<int> &vl,
+ const QString &appName,
+ const QString &visibleName,
+ QWidget *parent, const char *name )
+ : QHBox( parent, name )
+{
+ d = new CategorySelectPrivate( vl );
+ init();
+ setCategories( vl, appName, visibleName );
+}
+
+CategorySelect::~CategorySelect()
+{
+ delete d;
+}
+
+void CategorySelect::slotDialog()
+{
+ QDialog editDlg( this, 0, TRUE );
+ editDlg.setCaption( tr("Edit Categories") );
+ QVBoxLayout *vb = new QVBoxLayout( &editDlg );
+ QScrollView *sv = new QScrollView( &editDlg );
+ sv->setResizePolicy( QScrollView::AutoOneFit );
+ sv->setHScrollBarMode( QScrollView::AlwaysOff );
+ vb->addWidget( sv );
+ CategoryWidget ce( d->mRec, mStrAppName, d->mVisibleName, &editDlg );
+ sv->addChild( &ce );
+ editDlg.showMaximized();
+
+ if ( editDlg.exec() ) {
+ d->mRec = ce.newCategories();
+ cmbCat->initCombo( d->mRec, mStrAppName );
+ }
+}
+
+void CategorySelect::slotNewCat( int newUid )
+{
+ if ( newUid != -1 ) {
+ bool alreadyIn = false;
+ for ( uint it = 0; it < d->mRec.count(); ++it ) {
+ if ( d->mRec[it] == newUid ) {
+ alreadyIn = true;
+ break;
+ }
+ }
+ if ( !alreadyIn ) {
+ d->mRec.resize( 1 );
+ d->mRec[ 0 ] = newUid;
+ }
+ } else
+ d->mRec.resize(0); // now Unfiled.
+ emit signalSelected( currentCategory() );
+}
+
+void CategorySelect::setCategories( const QArray<int> &rec,
+ const QString &appName )
+{
+ setCategories( rec, appName, appName );
+}
+
+void CategorySelect::setCategories( const QArray<int> &rec,
+ const QString &appName,
+ const QString &visibleName )
+{
+ d->mRec = rec;
+ d->mVisibleName = visibleName;
+ mStrAppName = appName;
+ cmbCat->initCombo( rec, appName );
+}
+
+void CategorySelect::init()
+{
+ cmbCat = new CategoryCombo( this );
+ QObject::connect( cmbCat, SIGNAL(sigCatChanged(int)),
+ this, SLOT(slotNewCat(int)) );
+ cmdCat = new QToolButton( this );
+ QObject::connect( cmdCat, SIGNAL(clicked()), this, SLOT(slotDialog()) );
+ cmdCat->setTextLabel( "...", FALSE );
+ cmdCat->setUsesTextLabel( true );
+ cmdCat->setMaximumSize( cmdCat->sizeHint() );
+ cmdCat->setFocusPolicy( TabFocus );
+}
+
+
+int CategorySelect::currentCategory() const
+{
+ return cmbCat->currentCategory();
+}
+
+void CategorySelect::setCurrentCategory( int newCatUid )
+{
+ cmbCat->setCurrentCategory( newCatUid );
+}
+
+
+const QArray<int> &CategorySelect::currentCategories() const
+{
+ return d->mRec;
+}
+
+void CategorySelect::setRemoveCategoryEdit( bool remove )
+{
+ if ( remove ) {
+ cmdCat->setEnabled( FALSE );
+ cmdCat->hide();
+ } else {
+ cmdCat->setEnabled( TRUE );
+ cmdCat->show();
+ }
+}
+
+void CategorySelect::setAllCategories( bool add )
+{
+ d->usingAll = add;
+ if ( add ) {
+ cmbCat->insertItem( tr( "All" ), cmbCat->count() );
+ cmbCat->setCurrentItem( cmbCat->count() - 1 );
+ } else
+ cmbCat->removeItem( cmbCat->count() - 1 );
+}
diff --git a/library/categoryselect.h b/library/categoryselect.h
new file mode 100644
index 0000000..5c6b565
--- a/dev/null
+++ b/library/categoryselect.h
@@ -0,0 +1,105 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __CATEGORYCOMBO_H__
+#define __CATEGORYCOMBO_H__
+
+#include <qcombobox.h>
+#include <qhbox.h>
+#include <qstring.h>
+#include <qarray.h>
+
+extern QString categoryFileName();
+
+class QToolButton;
+
+class CategoryComboPrivate;
+class CategoryCombo : public QComboBox
+{
+ Q_OBJECT
+
+public:
+ CategoryCombo( QWidget *parent, const char* name = 0 );
+ ~CategoryCombo();
+
+ int currentCategory() const;
+ void setCurrentCategory( int id );
+ // depreciated.
+ void initCombo( const QArray<int> &recCats, const QString &appName );
+ void initCombo( const QArray<int> &recCats, const QString &appName,
+ const QString &visibleName /* = appName */ );
+
+signals:
+ void sigCatChanged( int newUid );
+
+private slots:
+ void slotValueChanged( int );
+
+private:
+ void setCurrentText( const QString &str );
+ CategoryComboPrivate *d;
+};
+
+#endif
+
+class CategorySelectPrivate;
+class CategorySelect : public QHBox
+{
+ Q_OBJECT
+public:
+ // we need two constructors, the first gets around designer limitations
+ CategorySelect( QWidget *parent = 0, const char *name = 0 );
+
+ CategorySelect( const QArray<int> &vlCats, const QString &appName,
+ QWidget *parent = 0, const char *name = 0 );
+ CategorySelect( const QArray<int> &vlCats, const QString &appName,
+ const QString &visibleName, QWidget *parent = 0,
+ const char *name = 0 );
+ ~CategorySelect();
+
+ const QArray<int> &currentCategories() const;
+ int currentCategory() const;
+ void setCurrentCategory( int newCatUid );
+ // pretty much if you don't set it the constructor, you need to
+ // call it here ASAP!
+ // however this call is depreciated...
+ void setCategories( const QArray<int> &vlCats, const QString &appName );
+ // use this one instead (for translating )
+ void setCategories( const QArray<int> &vlCats, const QString &appName,
+ const QString &visibleName );
+
+ // these were added for find dialog.
+ void setRemoveCategoryEdit( bool remove );
+ void setAllCategories( bool add );
+
+signals:
+ void signalSelected( int );
+
+private slots:
+ void slotDialog();
+ void slotNewCat( int id );
+
+private:
+ void init();
+ QString mStrAppName;
+ CategoryCombo *cmbCat;
+ QToolButton *cmdCat;
+ CategorySelectPrivate *d;
+};
diff --git a/library/categorywidget.cpp b/library/categorywidget.cpp
new file mode 100644
index 0000000..c4e78e6
--- a/dev/null
+++ b/library/categorywidget.cpp
@@ -0,0 +1,71 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "categoryedit_p.h"
+#include "categorywidget.h"
+
+CategoryWidget::CategoryWidget( QWidget *parent, const char *name )
+ : QVBox( parent, name )
+{
+ ce = new CategoryEdit( this, name );
+}
+
+CategoryWidget::CategoryWidget( const QArray<int> &vlRecs,
+ const QString &appName, QWidget *parent,
+ const char *name )
+ : QVBox( parent, name )
+{
+ ce = new CategoryEdit( vlRecs, appName, appName, this, name );
+}
+
+CategoryWidget::CategoryWidget( const QArray<int> &vlRecs,
+ const QString &appName, const QString &visibleName,
+ QWidget *parent, const char *name )
+ : QVBox( parent, name )
+{
+ ce = new CategoryEdit( vlRecs, appName, visibleName, this, name );
+}
+
+CategoryWidget::~CategoryWidget()
+{
+}
+
+void CategoryWidget::setCategories( const QArray<int> &vlRecs,
+ const QString &appName )
+{
+ ce->setCategories( vlRecs, appName, appName );
+}
+
+void CategoryWidget::setCategories( const QArray<int> &vlRecs,
+ const QString &appName,
+ const QString &visibleName )
+{
+ ce->setCategories( vlRecs, appName, visibleName );
+}
+
+QArray<int> CategoryWidget::newCategories()
+{
+ return ce->newCategories();
+}
+
+void CategoryWidget::kludge()
+{
+ ce->kludge();
+}
diff --git a/library/categorywidget.h b/library/categorywidget.h
new file mode 100644
index 0000000..12e3eb5
--- a/dev/null
+++ b/library/categorywidget.h
@@ -0,0 +1,50 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __CATEGORYWIDGET_H__
+#define __CATEGORYWIDGET_H__
+
+#include <qvbox.h>
+#include <qarray.h>
+
+class CategoryEdit;
+
+class CategoryWidget : public QVBox
+{
+public:
+ CategoryWidget( QWidget *parent = 0, const char *name = 0 );
+ CategoryWidget( const QArray<int> &vlRecs, const QString &appName,
+ QWidget *parent = 0, const char *name = 0 );
+ CategoryWidget( const QArray<int> &vlRecs, const QString &appName,
+ const QString &visibleName,
+ QWidget *parent = 0, const char *name = 0 );
+ ~CategoryWidget();
+ void setCategories( const QArray<int> &vlRecs, const QString &appName );
+ void setCategories( const QArray<int> &vlRecs, const QString &appName,
+ const QString &visibleName );
+ QArray<int> newCategories();
+ void kludge();
+
+private:
+ CategoryEdit *ce;
+};
+
+
+#endif
diff --git a/library/config.cpp b/library/config.cpp
new file mode 100644
index 0000000..9634571
--- a/dev/null
+++ b/library/config.cpp
@@ -0,0 +1,557 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qmessagebox.h>
+#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
+#include <qtextcodec.h>
+#endif
+#include <qtextstream.h>
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "config.h"
+
+
+/*!
+ \internal
+*/
+QString Config::configFilename(const QString& name, Domain d)
+{
+ switch (d) {
+ case File:
+ return name;
+ case User: {
+ QDir dir = (QString(getenv("HOME")) + "/Settings");
+ if ( !dir.exists() )
+ mkdir(dir.path().local8Bit(),0700);
+ return dir.path() + "/" + name + ".conf";
+ }
+ }
+ return name;
+}
+
+/*!
+ \class Config config.h
+ \brief The Config class provides for saving application cofniguration state.
+
+ You should keep a Config in existence only while you do not want others
+ to be able to change the state. There is no locking currently, but there
+ may be in the future.
+*/
+
+/*!
+ \enum Config::ConfigGroup
+ \internal
+*/
+
+/*!
+ \enum Config::Domain
+
+ \value File
+ \value User
+
+ See Config for details.
+*/
+
+/*!
+ Constructs a config that will load or create a configuration with the
+ given \a name in the given \a domain.
+
+ You must call setGroup() before doing much else with the Config.
+
+ In the default Domain, \e User,
+ the configuration is user-specific. \a name should not contain "/" in
+ this case, and in general should be the name of the C++ class that is
+ primarily responsible for maintaining the configuration.
+
+ In the File Domain, \a name is an absolute filename.
+*/
+Config::Config( const QString &name, Domain domain )
+ : filename( configFilename(name,domain) )
+{
+ git = groups.end();
+ read();
+
+ lang = getenv("LANG");
+ int i = lang.find(".");
+ if ( i > 0 )
+ lang = lang.left( i );
+ i = lang.find( "_" );
+ if ( i > 0 )
+ glang = lang.left(i);
+}
+
+/*!
+ Writes any changes to disk and destroys the in-memory object.
+*/
+Config::~Config()
+{
+ if ( changed )
+ write();
+}
+
+/*!
+ Returns whether the current group has an entry called \a key.
+*/
+bool Config::hasKey( const QString &key ) const
+{
+ if ( groups.end() == git )
+ return FALSE;
+ ConfigGroup::ConstIterator it = ( *git ).find( key );
+ return it != ( *git ).end();
+}
+
+/*!
+ Sets the current group for subsequent reading and writing of
+ entries to \a gname. Grouping allows the application to partition the namespace.
+
+ This function must be called prior to any reading or writing
+ of entries.
+
+ The \a gname must not be empty.
+*/
+void Config::setGroup( const QString &gname )
+{
+ QMap< QString, ConfigGroup>::Iterator it = groups.find( gname );
+ if ( it == groups.end() ) {
+ git = groups.insert( gname, ConfigGroup() );
+ changed = TRUE;
+ return;
+ }
+ git = it;
+}
+
+/*!
+ Writes a (\a key, \a value) entry to the current group.
+
+ \sa readEntry()
+*/
+void Config::writeEntry( const QString &key, const char* value )
+{
+ writeEntry(key,QString(value));
+}
+
+/*!
+ Writes a (\a key, \a value) entry to the current group.
+
+ \sa readEntry()
+*/
+void Config::writeEntry( const QString &key, const QString &value )
+{
+ if ( git == groups.end() ) {
+ qWarning( "no group set" );
+ return;
+ }
+ if ( (*git)[key] != value ) {
+ ( *git ).insert( key, value );
+ changed = TRUE;
+ }
+}
+
+/*
+ Note that the degree of protection offered by the encryption here is
+ only sufficient to avoid the most casual observation of the configuration
+ files. People with access to the files can write down the contents and
+ decrypt it using this source code.
+
+ Conceivably, and at some burden to the user, this encryption could
+ be improved.
+*/
+static QString encipher(const QString& plain)
+{
+ // mainly, we make it long
+ QString cipher;
+ int mix=28730492;
+ for (int i=0; i<(int)plain.length(); i++) {
+ int u = plain[i].unicode();
+ int c = u ^ mix;
+ QString x = QString::number(c,36);
+ cipher.append(QChar('a'+x.length()));
+ cipher.append(x);
+ mix *= u;
+ }
+ return cipher;
+}
+
+static QString decipher(const QString& cipher)
+{
+ QString plain;
+ int mix=28730492;
+ for (int i=0; i<(int)cipher.length();) {
+ int l = cipher[i].unicode()-'a';
+ QString x = cipher.mid(i+1,l); i+=l+1;
+ int u = x.toInt(0,36) ^ mix;
+ plain.append(QChar(u));
+ mix *= u;
+ }
+ return plain;
+}
+
+/*!
+ Writes an encrypted (\a key, \a value) entry to the current group.
+
+ Note that the degree of protection offered by the encryption is
+ only sufficient to avoid the most casual observation of the configuration
+ files.
+
+ \sa readEntry()
+*/
+void Config::writeEntryCrypt( const QString &key, const QString &value )
+{
+ if ( git == groups.end() ) {
+ qWarning( "no group set" );
+ return;
+ }
+ QString evalue = encipher(value);
+ if ( (*git)[key] != evalue ) {
+ ( *git ).insert( key, evalue );
+ changed = TRUE;
+ }
+}
+
+/*!
+ Writes a (\a key, \a num) entry to the current group.
+
+ \sa readNumEntry()
+*/
+void Config::writeEntry( const QString &key, int num )
+{
+ QString s;
+ s.setNum( num );
+ writeEntry( key, s );
+}
+
+#ifdef Q_HAS_BOOL_TYPE
+/*!
+ Writes a (\a key, \a b) entry to the current group. This is equivalent
+ to writing a 0 or 1 as an integer entry.
+
+ \sa readBoolEntry()
+*/
+void Config::writeEntry( const QString &key, bool b )
+{
+ QString s;
+ s.setNum( ( int )b );
+ writeEntry( key, s );
+}
+#endif
+
+/*!
+ Writes a (\a key, \a lst) entry to the current group. The list
+ is separated by \a sep, so the strings must not contain that character.
+
+ \sa readListEntry()
+*/
+void Config::writeEntry( const QString &key, const QStringList &lst, const QChar &sep )
+{
+ QString s;
+ QStringList::ConstIterator it = lst.begin();
+ for ( ; it != lst.end(); ++it )
+ s += *it + sep;
+ writeEntry( key, s );
+}
+
+/*!
+ Removes the \a key entry from the current group. Does nothing if
+ there is no such entry.
+*/
+
+void Config::removeEntry( const QString &key )
+{
+ if ( git == groups.end() ) {
+ qWarning( "no group set" );
+ return;
+ }
+ ( *git ).remove( key );
+ changed = TRUE;
+}
+
+/*!
+ \fn bool Config::operator == ( const Config & other ) const
+
+ Tests for equality with \a other. Config objects are equal if they refer to the same filename.
+*/
+
+/*!
+ \fn bool Config::operator != ( const Config & other ) const
+
+ Tests for inequality with \a other. Config objects are equal if they refer to the same filename.
+*/
+
+/*!
+ \fn QString Config::readEntry( const QString &key, const QString &deflt ) const
+
+ Reads a string entry stored with \a key, defaulting to \a deflt if there is no entry.
+*/
+
+/*!
+ \internal
+ For compatibility, non-const version.
+*/
+QString Config::readEntry( const QString &key, const QString &deflt )
+{
+ QString res = readEntryDirect( key+"["+lang+"]" );
+ if ( !res.isNull() )
+ return res;
+ if ( !glang.isEmpty() ) {
+ res = readEntryDirect( key+"["+glang+"]" );
+ if ( !res.isNull() )
+ return res;
+ }
+ return readEntryDirect( key, deflt );
+}
+
+/*!
+ \fn QString Config::readEntryCrypt( const QString &key, const QString &deflt ) const
+
+ Reads an encrypted string entry stored with \a key, defaulting to \a deflt if there is no entry.
+*/
+
+/*!
+ \internal
+ For compatibility, non-const version.
+*/
+QString Config::readEntryCrypt( const QString &key, const QString &deflt )
+{
+ QString res = readEntryDirect( key+"["+lang+"]" );
+ if ( res.isNull() && glang.isEmpty() )
+ res = readEntryDirect( key+"["+glang+"]" );
+ if ( res.isNull() )
+ res = readEntryDirect( key, QString::null );
+ if ( res.isNull() )
+ return deflt;
+ return decipher(res);
+}
+
+/*!
+ \fn QString Config::readEntryDirect( const QString &key, const QString &deflt ) const
+ \internal
+*/
+
+/*!
+ \internal
+ For compatibility, non-const version.
+*/
+QString Config::readEntryDirect( const QString &key, const QString &deflt )
+{
+ if ( git == groups.end() ) {
+ //qWarning( "no group set" );
+ return deflt;
+ }
+ ConfigGroup::ConstIterator it = ( *git ).find( key );
+ if ( it != ( *git ).end() )
+ return *it;
+ else
+ return deflt;
+}
+
+/*!
+ \fn int Config::readNumEntry( const QString &key, int deflt ) const
+ Reads a numeric entry stored with \a key, defaulting to \a deflt if there is no entry.
+*/
+
+/*!
+ \internal
+ For compatibility, non-const version.
+*/
+int Config::readNumEntry( const QString &key, int deflt )
+{
+ QString s = readEntry( key );
+ if ( s.isEmpty() )
+ return deflt;
+ else
+ return s.toInt();
+}
+
+/*!
+ \fn bool Config::readBoolEntry( const QString &key, bool deflt ) const
+ Reads a bool entry stored with \a key, defaulting to \a deflt if there is no entry.
+*/
+
+/*!
+ \internal
+ For compatibility, non-const version.
+*/
+bool Config::readBoolEntry( const QString &key, bool deflt )
+{
+ QString s = readEntry( key );
+ if ( s.isEmpty() )
+ return deflt;
+ else
+ return (bool)s.toInt();
+}
+
+/*!
+ \fn QStringList Config::readListEntry( const QString &key, const QChar &sep ) const
+ Reads a string list entry stored with \a key, and with \a sep as the separator.
+*/
+
+/*!
+ \internal
+ For compatibility, non-const version.
+*/
+QStringList Config::readListEntry( const QString &key, const QChar &sep )
+{
+ QString s = readEntry( key );
+ if ( s.isEmpty() )
+ return QStringList();
+ else
+ return QStringList::split( sep, s );
+}
+
+/*!
+ Removes all entries from the current group.
+*/
+void Config::clearGroup()
+{
+ if ( git == groups.end() ) {
+ qWarning( "no group set" );
+ return;
+ }
+ if ( !(*git).isEmpty() ) {
+ ( *git ).clear();
+ changed = TRUE;
+ }
+}
+
+/*!
+ \internal
+*/
+void Config::write( const QString &fn )
+{
+ QString strNewFile;
+ if ( !fn.isEmpty() )
+ filename = fn;
+ strNewFile = filename + ".new";
+
+ QFile f( strNewFile );
+ if ( !f.open( IO_WriteOnly|IO_Raw ) ) {
+ qWarning( "could not open for writing `%s'", strNewFile.latin1() );
+ git = groups.end();
+ return;
+ }
+
+ QString str;
+ QCString cstr;
+ QMap< QString, ConfigGroup >::Iterator g_it = groups.begin();
+
+ for ( ; g_it != groups.end(); ++g_it ) {
+ str += "[" + g_it.key() + "]\n";
+ ConfigGroup::Iterator e_it = ( *g_it ).begin();
+ for ( ; e_it != ( *g_it ).end(); ++e_it )
+ str += e_it.key() + " = " + *e_it + "\n";
+ }
+ cstr = str.utf8();
+
+ int total_length;
+ total_length = f.writeBlock( cstr.data(), cstr.length() );
+ if ( total_length != int(cstr.length()) ) {
+ QMessageBox::critical( 0, QObject::tr("Out of Space"),
+ QObject::tr("There was a problem creating\nConfiguration Information \nfor this program.\n\nPlease free up some space and\ntry again.") );
+ f.close();
+ QFile::remove( strNewFile );
+ return;
+ }
+
+ f.close();
+ // now rename the file...
+ if ( rename( strNewFile, filename ) < 0 ) {
+ qWarning( "problem renaming the file %s to %s", strNewFile.latin1(),
+ filename.latin1() );
+ QFile::remove( strNewFile );
+ }
+}
+
+/*!
+ Returns whether the Config is in a valid state.
+*/
+bool Config::isValid() const
+{
+ return groups.end() != git;
+}
+
+/*!
+ \internal
+*/
+void Config::read()
+{
+ changed = FALSE;
+
+ if ( !QFileInfo( filename ).exists() ) {
+ git = groups.end();
+ return;
+ }
+
+ QFile f( filename );
+ if ( !f.open( IO_ReadOnly ) ) {
+ git = groups.end();
+ return;
+ }
+
+ QTextStream s( &f );
+#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
+ // The below should work, but doesn't in Qt 2.3.0
+ s.setCodec( QTextCodec::codecForMib( 106 ) );
+#else
+ s.setEncoding( QTextStream::UnicodeUTF8 );
+#endif
+
+ QStringList list = QStringList::split('\n', s.read() );
+ f.close();
+
+ for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
+ if ( !parse( *it ) ) {
+ git = groups.end();
+ return;
+ }
+ }
+}
+
+/*!
+ \internal
+*/
+bool Config::parse( const QString &l )
+{
+ QString line = l.stripWhiteSpace();
+ if ( line[ 0 ] == QChar( '[' ) ) {
+ QString gname = line;
+ gname = gname.remove( 0, 1 );
+ if ( gname[ (int)gname.length() - 1 ] == QChar( ']' ) )
+ gname = gname.remove( gname.length() - 1, 1 );
+ git = groups.insert( gname, ConfigGroup() );
+ } else if ( !line.isEmpty() ) {
+ if ( git == groups.end() )
+ return FALSE;
+ int eq = line.find( '=' );
+ if ( eq == -1 )
+ return FALSE;
+ QString key = line.left(eq).stripWhiteSpace();
+ QString value = line.mid(eq+1).stripWhiteSpace();
+ ( *git ).insert( key, value );
+ }
+ return TRUE;
+}
diff --git a/library/config.h b/library/config.h
new file mode 100644
index 0000000..1dc32fa
--- a/dev/null
+++ b/library/config.h
@@ -0,0 +1,102 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+// ##### could use QSettings with Qt 3.0
+
+#include <qmap.h>
+#include <qstringlist.h>
+
+class ConfigPrivate;
+class Config
+{
+public:
+ typedef QMap< QString, QString > ConfigGroup;
+
+ enum Domain { File, User };
+ Config( const QString &name, Domain domain=User );
+ ~Config();
+
+ bool operator == ( const Config & other ) const { return (filename == other.filename); }
+ bool operator != ( const Config & other ) const { return (filename != other.filename); }
+
+ bool isValid() const;
+ bool hasKey( const QString &key ) const;
+
+ void setGroup( const QString &gname );
+ void writeEntry( const QString &key, const char* value );
+ void writeEntry( const QString &key, const QString &value );
+ void writeEntryCrypt( const QString &key, const QString &value );
+ void writeEntry( const QString &key, int num );
+#ifdef Q_HAS_BOOL_TYPE
+ void writeEntry( const QString &key, bool b );
+#endif
+ void writeEntry( const QString &key, const QStringList &lst, const QChar &sep );
+ void removeEntry( const QString &key );
+
+ QString readEntry( const QString &key, const QString &deflt = QString::null ) const;
+ QString readEntryCrypt( const QString &key, const QString &deflt = QString::null ) const;
+ QString readEntryDirect( const QString &key, const QString &deflt = QString::null ) const;
+ int readNumEntry( const QString &key, int deflt = -1 ) const;
+ bool readBoolEntry( const QString &key, bool deflt = FALSE ) const;
+ QStringList readListEntry( const QString &key, const QChar &sep ) const;
+
+ // For compatibility, non-const versions.
+ QString readEntry( const QString &key, const QString &deflt );
+ QString readEntryCrypt( const QString &key, const QString &deflt );
+ QString readEntryDirect( const QString &key, const QString &deflt );
+ int readNumEntry( const QString &key, int deflt );
+ bool readBoolEntry( const QString &key, bool deflt );
+ QStringList readListEntry( const QString &key, const QChar &sep );
+
+ void clearGroup();
+
+ void write( const QString &fn = QString::null );
+
+protected:
+ void read();
+ bool parse( const QString &line );
+
+ QMap< QString, ConfigGroup > groups;
+ QMap< QString, ConfigGroup >::Iterator git;
+ QString filename;
+ QString lang;
+ QString glang;
+ bool changed;
+ ConfigPrivate *d;
+ static QString configFilename(const QString& name, Domain);
+};
+
+inline QString Config::readEntry( const QString &key, const QString &deflt ) const
+{ return ((Config*)this)->readEntry(key,deflt); }
+inline QString Config::readEntryCrypt( const QString &key, const QString &deflt ) const
+{ return ((Config*)this)->readEntryCrypt(key,deflt); }
+inline QString Config::readEntryDirect( const QString &key, const QString &deflt ) const
+{ return ((Config*)this)->readEntryDirect(key,deflt); }
+inline int Config::readNumEntry( const QString &key, int deflt ) const
+{ return ((Config*)this)->readNumEntry(key,deflt); }
+inline bool Config::readBoolEntry( const QString &key, bool deflt ) const
+{ return ((Config*)this)->readBoolEntry(key,deflt); }
+inline QStringList Config::readListEntry( const QString &key, const QChar &sep ) const
+{ return ((Config*)this)->readListEntry(key,sep); }
+
+#endif
diff --git a/library/custom-sharp.h b/library/custom-sharp.h
new file mode 100644
index 0000000..a149bbd
--- a/dev/null
+++ b/library/custom-sharp.h
@@ -0,0 +1,127 @@
+#define QPE_OWNAPM
+#define QPE_HAVE_TOGGLELIGHT
+#define QPE_NOCIBAUD
+#define QPE_STARTMENU
+#include <asm/sharp_apm.h>
+#ifndef APM_IOC_BATTERY_BACK_CHK
+#define APM_IOC_BATTERY_BACK_CHK _IO(APM_IOC_MAGIC, 32)
+#endif
+#ifndef APM_IOC_BATTERY_MAIN_CHK
+#define APM_IOC_BATTERY_MAIN_CHK _IO(APM_IOC_MAGIC, 33)
+#endif
+
+#include <unistd.h>
+#include <stdio.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
+
+/* --- for SHARP_BUZZER device --- */
+#define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
+#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
+#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
+#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
+#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
+#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
+#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
+
+#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
+#define SHARP_BUZ_KEYSOUND 2 /* key sound */
+#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
+#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
+#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
+#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
+#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
+#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
+#define SHARP_PDA_APPSTART 9 /* application start */
+#define SHARP_PDA_APPQUIT 10 /* application ends */
+#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
+#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
+#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
+#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
+
+
+#define CUSTOM_BUZZER( sound ) \
+{ \
+ static int fd = open( "/dev/sharp_buz", O_RDWR|O_NONBLOCK ); \
+ ioctl( fd, SHARP_BUZZER_MAKESOUND, sound ); \
+}
+
+#define CUSTOM_SOUND_ALARM CUSTOM_BUZZER( SHARP_BUZ_SCHEDULE_ALARM )
+
+#include <sys/ioctl.h>
+#include <asm/sharp_char.h>
+
+// a bit awkward, as this value is defined in emailclient.cpp aswell...
+#define LED_MAIL 0
+#define SHARP_LED_MAIL 9
+
+#define CUSTOM_LEDS( led, status ) \
+{ \
+ if ( led == LED_MAIL ) \
+ led = SHARP_LED_MAIL; \
+ static int fd = open( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); \
+ sharp_led_status leds; \
+ memset(&leds, 0, sizeof(leds)); \
+ leds.which = led; \
+ leds.status = status; \
+ ioctl( fd, SHARP_LED_SETSTATUS, (char*)&leds ); \
+}
+
+#define QPE_HAVE_MEMALERTER
+
+#define QPE_MEMALERTER_IMPL \
+static void sig_handler(int sig) \
+{ \
+ switch (sig) { \
+ case SIGHUP: \
+ memstate = VeryLow; \
+ break; \
+ case SIGUSR1: \
+ memstate = Normal; \
+ break; \
+ case SIGUSR2: \
+ memstate = Low; \
+ break; \
+ } \
+} \
+static void initMemalerter() \
+{ \
+ struct sigaction sa; \
+ memset(&sa, '\0', sizeof sa); \
+ sa.sa_handler = sig_handler; \
+ sa.sa_flags = SA_RESTART; \
+ if (sigaction(SIGHUP, &sa, NULL) < 0) { \
+ return; \
+ } \
+ if (sigaction(SIGUSR1, &sa, NULL) < 0) { \
+ return; \
+ } \
+ if (sigaction(SIGUSR2, &sa, NULL) < 0) { \
+ return; \
+ } \
+ FILE *fo = fopen("/proc/sys/vm/freepg_signal_proc", "w"); \
+ \
+ if (!fo) \
+ return; \
+ fprintf(fo, "qpe\n"); \
+ fclose(fo); \
+}
+
+#define QPE_INITIAL_NUMLOCK_STATE \
+{ \
+ bool numLock = FALSE; \
+ sharp_kbdctl_modifstat st; \
+ int dev = ::open("/dev/sharp_kbdctl", O_RDWR); \
+ if( dev >= 0 ) { \
+ memset(&st, 0, sizeof(st)); \
+ st.which = 3; \
+ int ret = ioctl(dev, SHARP_KBDCTL_GETMODIFSTAT, (char*)&st); \
+ if( !ret ) \
+ numLock = (bool)st.stat; \
+ ::close(dev); \
+ } \
+ return numLock; \
+}
diff --git a/library/datebookdb.cpp b/library/datebookdb.cpp
new file mode 100644
index 0000000..bf7fd94
--- a/dev/null
+++ b/library/datebookdb.cpp
@@ -0,0 +1,1121 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qasciidict.h>
+#include <qfile.h>
+#include <qmessagebox.h>
+#include <qstring.h>
+#include <qtextcodec.h>
+#include <qtextstream.h>
+#include <qtl.h>
+
+#include <qpe/alarmserver.h>
+#include <qpe/global.h>
+#include "datebookdb.h"
+#include <qpe/stringutil.h>
+#include <qpe/timeconversion.h>
+
+#include <errno.h>
+#include <stdlib.h>
+
+
+class DateBookDBPrivate
+{
+public:
+ bool clean; // indcate whether we need to write to disk...
+};
+
+
+// Helper functions
+
+static QString dateBookJournalFile()
+{
+ QString str = getenv("HOME");
+ return QString( str +"/.caljournal" );
+}
+
+static QString dateBookFilename()
+{
+ return Global::applicationFileName("datebook","datebook.xml");
+}
+
+/* Calculating the next event of a recuring event is actually
+ computationally inexpensive, esp. compared to checking each day
+ individually. There are bad worse cases for say the 29th of
+ february or the 31st of some other months. However
+ these are still bounded */
+bool nextOccurance(const Event &e, const QDate &from, QDateTime &next)
+{
+ // easy checks, first are we too far in the future or too far in the past?
+ QDate tmpDate;
+ int freq = e.repeatPattern().frequency;
+ int diff, diff2, a;
+ int iday, imonth, iyear;
+ int dayOfWeek = 0;
+ int firstOfWeek = 0;
+ int weekOfMonth;
+
+
+ if (e.repeatPattern().hasEndDate && e.repeatPattern().endDate() < from)
+ return FALSE;
+
+ if (e.start() >= from) {
+ next = e.start();
+ return TRUE;
+ }
+
+ switch ( e.repeatPattern().type ) {
+ case Event::Weekly:
+ /* weekly is just daily by 7 */
+ /* first convert the repeatPattern.Days() mask to the next
+ day of week valid after from */
+ dayOfWeek = from.dayOfWeek();
+ dayOfWeek--; /* we want 0-6, doco for above specs 1-7 */
+
+ /* this is done in case freq > 1 and from in week not
+ for this round */
+ // firstOfWeek = 0; this is already done at decl.
+ while(!((1 << firstOfWeek) & e.repeatPattern().days))
+ firstOfWeek++;
+
+ /* there is at least one 'day', or there would be no event */
+ while(!((1 << (dayOfWeek % 7)) & e.repeatPattern().days))
+ dayOfWeek++;
+
+ dayOfWeek = dayOfWeek % 7; /* the actual day of week */
+ dayOfWeek -= e.start().date().dayOfWeek() -1;
+
+ firstOfWeek = firstOfWeek % 7; /* the actual first of week */
+ firstOfWeek -= e.start().date().dayOfWeek() -1;
+
+ // dayOfWeek may be negitive now
+ // day of week is number of days to add to start day
+
+ freq *= 7;
+ // FALL-THROUGH !!!!!
+ case Event::Daily:
+ // the add is for the possible fall through from weekly */
+ if(e.start().date().addDays(dayOfWeek) > from) {
+ /* first week exception */
+ next = QDateTime(e.start().date().addDays(dayOfWeek),
+ e.start().time());
+ if ((next.date() > e.repeatPattern().endDate())
+ && e.repeatPattern().hasEndDate)
+ return FALSE;
+ return TRUE;
+ }
+ /* if from is middle of a non-week */
+
+ diff = e.start().date().addDays(dayOfWeek).daysTo(from) % freq;
+ diff2 = e.start().date().addDays(firstOfWeek).daysTo(from) % freq;
+
+ if(diff != 0)
+ diff = freq - diff;
+ if(diff2 != 0)
+ diff2 = freq - diff2;
+ diff = QMIN(diff, diff2);
+
+ next = QDateTime(from.addDays(diff), e.start().time());
+ if ( (next.date() > e.repeatPattern().endDate())
+ && e.repeatPattern().hasEndDate )
+ return FALSE;
+ return TRUE;
+ case Event::MonthlyDay:
+ iday = from.day();
+ iyear = from.year();
+ imonth = from.month();
+ /* find equivelent day of month for this month */
+ dayOfWeek = e.start().date().dayOfWeek();
+ weekOfMonth = (e.start().date().day() - 1) / 7;
+
+ /* work out when the next valid month is */
+ a = from.year() - e.start().date().year();
+ a *= 12;
+ a = a + (imonth - e.start().date().month());
+ /* a is e.start()monthsFrom(from); */
+ if(a % freq) {
+ a = freq - (a % freq);
+ imonth = from.month() + a;
+ if (imonth > 12) {
+ imonth--;
+ iyear += imonth / 12;
+ imonth = imonth % 12;
+ imonth++;
+ }
+ }
+ /* imonth is now the first month after or on
+ from that matches the frequency given */
+
+ /* find for this month */
+ tmpDate = QDate( iyear, imonth, 1 );
+
+ iday = 1;
+ iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7;
+ iday += 7 * weekOfMonth;
+ while (iday > tmpDate.daysInMonth()) {
+ imonth += freq;
+ if (imonth > 12) {
+ imonth--;
+ iyear += imonth / 12;
+ imonth = imonth % 12;
+ imonth++;
+ }
+ tmpDate = QDate( iyear, imonth, 1 );
+ /* these loops could go for a while, check end case now */
+ if ((tmpDate > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ iday = 1;
+ iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7;
+ iday += 7 * weekOfMonth;
+ }
+ tmpDate = QDate(iyear, imonth, iday);
+
+ if (tmpDate >= from) {
+ next = QDateTime(tmpDate, e.start().time());
+ if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ return TRUE;
+ }
+
+ /* need to find the next iteration */
+ do {
+ imonth += freq;
+ if (imonth > 12) {
+ imonth--;
+ iyear += imonth / 12;
+ imonth = imonth % 12;
+ imonth++;
+ }
+ tmpDate = QDate( iyear, imonth, 1 );
+ /* these loops could go for a while, check end case now */
+ if ((tmpDate > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ iday = 1;
+ iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7;
+ iday += 7 * weekOfMonth;
+ } while (iday > tmpDate.daysInMonth());
+ tmpDate = QDate(iyear, imonth, iday);
+
+ next = QDateTime(tmpDate, e.start().time());
+ if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ return TRUE;
+ case Event::MonthlyDate:
+ iday = e.start().date().day();
+ iyear = from.year();
+ imonth = from.month();
+
+ a = from.year() - e.start().date().year();
+ a *= 12;
+ a = a + (imonth - e.start().date().month());
+ /* a is e.start()monthsFrom(from); */
+ if(a % freq) {
+ a = freq - (a % freq);
+ imonth = from.month() + a;
+ if (imonth > 12) {
+ imonth--;
+ iyear += imonth / 12;
+ imonth = imonth % 12;
+ imonth++;
+ }
+ }
+ /* imonth is now the first month after or on
+ from that matches the frequencey given */
+
+ /* this could go for a while, worse case, 4*12 iterations, probably */
+ while(!QDate::isValid(iyear, imonth, iday) ) {
+ imonth += freq;
+ if (imonth > 12) {
+ imonth--;
+ iyear += imonth / 12;
+ imonth = imonth % 12;
+ imonth++;
+ }
+ /* these loops could go for a while, check end case now */
+ if ((QDate(iyear, imonth, 1) > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ }
+
+ if(QDate(iyear, imonth, iday) >= from) {
+ /* done */
+ next = QDateTime(QDate(iyear, imonth, iday),
+ e.start().time());
+ if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ return TRUE;
+ }
+
+ /* ok, need to cycle */
+ imonth += freq;
+ imonth--;
+ iyear += imonth / 12;
+ imonth = imonth % 12;
+ imonth++;
+
+ while(!QDate::isValid(iyear, imonth, iday) ) {
+ imonth += freq;
+ imonth--;
+ iyear += imonth / 12;
+ imonth = imonth % 12;
+ imonth++;
+ if ((QDate(iyear, imonth, 1) > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ }
+
+ next = QDateTime(QDate(iyear, imonth, iday), e.start().time());
+ if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ return TRUE;
+ case Event::Yearly:
+ iday = e.start().date().day();
+ imonth = e.start().date().month();
+ iyear = from.year(); // after all, we want to start in this year
+
+ diff = 1;
+ if(imonth == 2 && iday > 28) {
+ /* leap year, and it counts, calculate actual frequency */
+ if(freq % 4)
+ if (freq % 2)
+ freq = freq * 4;
+ else
+ freq = freq * 2;
+ /* else divides by 4 already, leave freq alone */
+ diff = 4;
+ }
+
+ a = from.year() - e.start().date().year();
+ if(a % freq) {
+ a = freq - (a % freq);
+ iyear = iyear + a;
+ }
+
+ /* under the assumption we won't hit one of the special not-leap years twice */
+ if(!QDate::isValid(iyear, imonth, iday)) {
+ /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */
+ iyear += freq;
+ }
+
+ if(QDate(iyear, imonth, iday) >= from) {
+ next = QDateTime(QDate(iyear, imonth, iday),
+ e.start().time());
+ if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ return TRUE;
+ }
+ /* iyear == from.year(), need to advance again */
+ iyear += freq;
+ /* under the assumption we won't hit one of the special not-leap years twice */
+ if(!QDate::isValid(iyear, imonth, iday)) {
+ /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */
+ iyear += freq;
+ }
+
+ next = QDateTime(QDate(iyear, imonth, iday), e.start().time());
+ if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
+ return FALSE;
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+static bool nextAlarm( const Event &ev, QDateTime& when, int& warn)
+{
+ QDateTime now = QDateTime::currentDateTime();
+ if ( ev.hasRepeat() ) {
+ QDateTime ralarm;
+ if (nextOccurance(ev, now.date(), ralarm)) {
+ ralarm = ralarm.addSecs(-ev.alarmTime()*60);
+ if ( ralarm > now ) {
+ when = ralarm;
+ warn = ev.alarmTime();
+ } else if ( nextOccurance(ev, now.date().addDays(1), ralarm) ) {
+ ralarm = ralarm.addSecs( -ev.alarmTime()*60 );
+ if ( ralarm > now ) {
+ when = ralarm;
+ warn = ev.alarmTime();
+ }
+ }
+ }
+ } else {
+ warn = ev.alarmTime();
+ when = ev.start().addSecs( -ev.alarmTime()*60 );
+ }
+ return when > now;
+}
+
+static void addEventAlarm( const Event &ev )
+{
+ QDateTime when;
+ int warn;
+ if ( nextAlarm(ev,when,warn) )
+ AlarmServer::addAlarm( when,
+ "QPE/Application/datebook",
+ "alarm(QDateTime,int)", warn );
+}
+
+static void delEventAlarm( const Event &ev )
+{
+ QDateTime when;
+ int warn;
+ if ( nextAlarm(ev,when,warn) )
+ AlarmServer::deleteAlarm( when,
+ "QPE/Application/datebook",
+ "alarm(QDateTime,int)", warn );
+}
+
+
+DateBookDB::DateBookDB()
+{
+ init();
+}
+
+DateBookDB::~DateBookDB()
+{
+ save();
+ eventList.clear();
+ repeatEvents.clear();
+}
+
+
+//#### Why is this code duplicated in getEffectiveEvents ?????
+//#### Addendum. Don't use this function, lets faze it out if we can.
+QValueList<Event> DateBookDB::getEvents( const QDate &from, const QDate &to )
+{
+ QValueList<Event> tmpList;
+ tmpList = getNonRepeatingEvents( from, to );
+
+ // check for repeating events...
+ for (QValueList<Event>::ConstIterator it = repeatEvents.begin();
+ it != repeatEvents.end(); ++it) {
+ QDate itDate = from;
+ QDateTime due;
+
+ /* create a false end date, to short circuit on hard
+ MonthlyDay recurences */
+ Event dummy_event = *it;
+ Event::RepeatPattern r = dummy_event.repeatPattern();
+ if ( !r.hasEndDate || r.endDate() > to ) {
+ r.setEndDate( to );
+ r.hasEndDate = TRUE;
+ }
+ dummy_event.setRepeat(TRUE, r);
+
+ while (nextOccurance(dummy_event, itDate, due)) {
+ if (due.date() > to)
+ break;
+ Event newEvent = *it;
+ newEvent.setStart(due);
+ newEvent.setEnd(due.addSecs((*it).start().secsTo((*it).end())));
+
+ tmpList.append(newEvent);
+ itDate = due.date().addDays(1); /* the next event */
+ }
+ }
+ qHeapSort(tmpList);
+ return tmpList;
+}
+
+QValueList<Event> DateBookDB::getEvents( const QDateTime &start )
+{
+ QValueList<Event> day = getEvents(start.date(),start.date());
+
+ QValueListConstIterator<Event> it;
+ QDateTime dtTmp;
+ QValueList<Event> tmpList;
+ for (it = day.begin(); it != day.end(); ++it ) {
+ dtTmp = (*it).start(TRUE);
+ if ( dtTmp == start )
+ tmpList.append( *it );
+ }
+ return tmpList;
+}
+
+//#### Why is this code duplicated in getEvents ?????
+
+QValueList<EffectiveEvent> DateBookDB::getEffectiveEvents( const QDate &from,
+ const QDate &to )
+{
+ QValueList<EffectiveEvent> tmpList;
+ QValueListIterator<Event> it;
+
+ EffectiveEvent effEv;
+ QDateTime dtTmp,
+ dtEnd;
+
+ for (it = eventList.begin(); it != eventList.end(); ++it ) {
+ dtTmp = (*it).start(TRUE);
+ dtEnd = (*it).end(TRUE);
+
+ if ( dtTmp.date() >= from && dtTmp.date() <= to ) {
+ Event tmpEv = *it;
+ effEv.setEvent(tmpEv);
+ effEv.setDate( dtTmp.date() );
+ effEv.setStart( dtTmp.time() );
+ if ( dtTmp.date() != dtEnd.date() )
+ effEv.setEnd( QTime(23, 59, 0) );
+ else
+ effEv.setEnd( dtEnd.time() );
+ tmpList.append( effEv );
+ }
+ // we must also check for end date information...
+ if ( dtEnd.date() != dtTmp.date() && dtEnd.date() >= from ) {
+ QDateTime dt = dtTmp.addDays( 1 );
+ dt.setTime( QTime(0, 0, 0) );
+ QDateTime dtStop;
+ if ( dtEnd > to ) {
+ dtStop = to;
+ } else
+ dtStop = dtEnd;
+ while ( dt <= dtStop ) {
+ Event tmpEv = *it;
+ effEv.setEvent( tmpEv );
+ effEv.setDate( dt.date() );
+ if ( dt >= from ) {
+ effEv.setStart( QTime(0, 0, 0) );
+ if ( dt.date() == dtEnd.date() )
+ effEv.setEnd( dtEnd.time() );
+ else
+ effEv.setEnd( QTime(23, 59, 59) );
+ tmpList.append( effEv );
+ }
+ dt = dt.addDays( 1 );
+ }
+ }
+ }
+ // check for repeating events...
+ QDateTime repeat;
+ for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) {
+
+ /* create a false end date, to short circuit on hard
+ MonthlyDay recurences */
+ Event dummy_event = *it;
+ int duration = (*it).start().date().daysTo( (*it).end().date() );
+ QDate itDate = from.addDays(-duration);
+
+ Event::RepeatPattern r = dummy_event.repeatPattern();
+ if ( !r.hasEndDate || r.endDate() > to ) {
+ r.setEndDate( to );
+ r.hasEndDate = TRUE;
+ }
+ dummy_event.setRepeat(TRUE, r);
+
+ while (nextOccurance(dummy_event, itDate, repeat)) {
+ if(repeat.date() > to)
+ break;
+ effEv.setDate( repeat.date() );
+ if ((*it).type() == Event::AllDay) {
+ effEv.setStart( QTime(0,0,0) );
+ effEv.setEnd( QTime(23,59,59) );
+ } else {
+ /* we only occur by days, not hours/minutes/seconds. Hence
+ the actual end and start times will be the same for
+ every repeated event. For multi day events this is
+ fixed up later if on wronge day span */
+ effEv.setStart( (*it).start().time() );
+ effEv.setEnd( (*it).end().time() );
+ }
+ if ( duration != 0 ) {
+ // multi-day repeating events
+ QDate sub_it = QMAX( repeat.date(), from );
+ QDate startDate = repeat.date();
+ QDate endDate = startDate.addDays( duration );
+
+ while ( sub_it <= endDate && sub_it <= to ) {
+ EffectiveEvent tmpEffEv = effEv;
+ Event tmpEv = *it;
+ tmpEffEv.setEvent( tmpEv );
+
+ if ( sub_it != startDate )
+ tmpEffEv.setStart( QTime(0,0,0) );
+ if ( sub_it != endDate )
+ tmpEffEv.setEnd( QTime(23,59,59) );
+ tmpEffEv.setDate( sub_it );
+ tmpEffEv.setEffectiveDates( startDate, endDate );
+ tmpList.append( tmpEffEv );
+ sub_it = sub_it.addDays( 1 );
+ }
+ itDate = endDate;
+ } else {
+ Event tmpEv = *it;
+ effEv.setEvent( tmpEv );
+ tmpList.append( effEv );
+ itDate = repeat.date().addDays( 1 );
+ }
+ }
+ }
+
+ qHeapSort( tmpList );
+ return tmpList;
+}
+
+QValueList<EffectiveEvent> DateBookDB::getEffectiveEvents( const QDateTime &dt)
+{
+ QValueList<EffectiveEvent> day = getEffectiveEvents(dt.date(), dt.date());
+ QValueListConstIterator<EffectiveEvent> it;
+ QValueList<EffectiveEvent> tmpList;
+ QDateTime dtTmp;
+
+ for (it = day.begin(); it != day.end(); ++it ) {
+ dtTmp = QDateTime( (*it).date(), (*it).start() );
+ // at the moment we don't have second granularity, be nice about that..
+ if ( QABS(dt.secsTo(dtTmp)) < 60 )
+ tmpList.append( *it );
+ }
+ return tmpList;
+}
+
+
+void DateBookDB::addEvent( const Event &ev, bool doalarm )
+{
+ // write to the journal...
+ saveJournalEntry( ev, ACTION_ADD, -1, false );
+ addJFEvent( ev, doalarm );
+ d->clean = false;
+}
+
+void DateBookDB::addJFEvent( const Event &ev, bool doalarm )
+{
+ if ( doalarm && ev.hasAlarm() )
+ addEventAlarm( ev );
+ if ( ev.hasRepeat() )
+ repeatEvents.append( ev );
+ else
+ eventList.append( ev );
+}
+
+void DateBookDB::editEvent( const Event &old, Event &editedEv )
+{
+ int oldIndex=0;
+ bool oldHadRepeat = old.hasRepeat();
+ Event orig;
+
+ // write to the journal...
+ if ( oldHadRepeat ) {
+ if ( origRepeat( old, orig ) ) // should work always...
+ oldIndex = repeatEvents.findIndex( orig );
+ } else
+ oldIndex = eventList.findIndex( old );
+ saveJournalEntry( editedEv, ACTION_REPLACE, oldIndex, oldHadRepeat );
+
+ if ( old.hasAlarm() )
+ delEventAlarm( old );
+ if ( oldHadRepeat ) {
+ if ( oldHadRepeat && editedEv.hasRepeat() ) {
+ // assumption, when someone edits a repeating event, they
+ // want to change them all, maybe not perfect, but it works
+ // for the moment...
+ repeatEvents.remove( orig );
+ } else
+ removeRepeat( old );
+ } else {
+ QValueList<Event>::Iterator it = eventList.find( old );
+ if ( it != eventList.end() )
+ eventList.remove( it );
+ }
+ if ( editedEv.hasAlarm() )
+ addEventAlarm( editedEv );
+ if ( editedEv.hasRepeat() )
+ repeatEvents.append( editedEv );
+ else
+ eventList.append( editedEv );
+ d->clean = false;
+}
+
+void DateBookDB::removeEvent( const Event &ev )
+{
+ // write to the journal...
+ saveJournalEntry( ev, ACTION_REMOVE, -1, false );
+ removeJFEvent( ev );
+ d->clean = false;
+}
+
+void DateBookDB::removeJFEvent( const Event&ev )
+{
+ if ( ev.hasAlarm() )
+ delEventAlarm( ev );
+ if ( ev.hasRepeat() ) {
+ removeRepeat( ev );
+ } else {
+ QValueList<Event>::Iterator it = eventList.find( ev );
+ if ( it != eventList.end() )
+ eventList.remove( it );
+ }
+}
+
+// also handles journaling...
+void DateBookDB::loadFile( const QString &strFile )
+{
+
+ QFile f( strFile );
+ if ( !f.open( IO_ReadOnly ) )
+ return;
+
+ enum Attribute {
+ FDescription = 0,
+ FLocation,
+ FCategories,
+ FUid,
+ FType,
+ FAlarm,
+ FSound,
+ FRType,
+ FRWeekdays,
+ FRPosition,
+ FRFreq,
+ FRHasEndDate,
+ FREndDate,
+ FRStart,
+ FREnd,
+ FNote,
+ FCreated,
+ FAction,
+ FActionKey,
+ FJournalOrigHadRepeat
+ };
+
+ QAsciiDict<int> dict( 97 );
+ dict.setAutoDelete( TRUE );
+ dict.insert( "description", new int(FDescription) );
+ dict.insert( "location", new int(FLocation) );
+ dict.insert( "categories", new int(FCategories) );
+ dict.insert( "uid", new int(FUid) );
+ dict.insert( "type", new int(FType) );
+ dict.insert( "alarm", new int(FAlarm) );
+ dict.insert( "sound", new int(FSound) );
+ dict.insert( "rtype", new int(FRType) );
+ dict.insert( "rweekdays", new int(FRWeekdays) );
+ dict.insert( "rposition", new int(FRPosition) );
+ dict.insert( "rfreq", new int(FRFreq) );
+ dict.insert( "rhasenddate", new int(FRHasEndDate) );
+ dict.insert( "enddt", new int(FREndDate) );
+ dict.insert( "start", new int(FRStart) );
+ dict.insert( "end", new int(FREnd) );
+ dict.insert( "note", new int(FNote) );
+ dict.insert( "created", new int(FCreated) );
+ dict.insert( "action", new int(FAction) );
+ dict.insert( "actionkey", new int(FActionKey) );
+ dict.insert( "actionorig", new int (FJournalOrigHadRepeat) );
+
+
+ QByteArray ba = f.readAll();
+ char* dt = ba.data();
+ int len = ba.size();
+ int currentAction,
+ journalKey,
+ origHadRepeat; // should be bool, but we need tri-state(not being used)
+
+ int i = 0;
+ char *point;
+ while ( ( point = strstr( dt+i, "<event " ) ) != 0 ) {
+ i = point - dt;
+ // if we are reading in events in the general case,
+ // we are just adding them, so let the actions represent that...
+ currentAction = ACTION_ADD;
+ journalKey = -1;
+ origHadRepeat = -1;
+ // some temporary variables for dates and times ...
+ //int startY = 0, startM = 0, startD = 0, starth = 0, startm = 0, starts = 0;
+ //int endY = 0, endM = 0, endD = 0, endh = 0, endm = 0, ends = 0;
+ //int enddtY = 0, enddtM = 0, enddtD = 0;
+
+ // ... for the alarm settings ...
+ int alarmTime = -1; Event::SoundTypeChoice alarmSound = Event::Silent;
+ // ... and for the recurrence
+ Event::RepeatPattern rp;
+ Event e;
+
+ i += 7;
+
+ while( 1 ) {
+ while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') )
+ ++i;
+ if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') )
+ break;
+ // we have another attribute, read it.
+ int j = i;
+ while ( j < len && dt[j] != '=' )
+ ++j;
+ char *attr = dt+i;
+ dt[j] = '\0';
+ i = ++j; // skip =
+ while ( i < len && dt[i] != '"' )
+ ++i;
+ j = ++i;
+ bool haveAmp = FALSE;
+ bool haveUtf = FALSE;
+ while ( j < len && dt[j] != '"' ) {
+ if ( dt[j] == '&' )
+ haveAmp = TRUE;
+ if ( ((unsigned char)dt[j]) > 0x7f )
+ haveUtf = TRUE;
+ ++j;
+ }
+
+ if ( i == j ) {
+ // leave out empty attributes
+ i = j + 1;
+ continue;
+ }
+
+ QString value = haveUtf ? QString::fromUtf8( dt+i, j-i )
+ : QString::fromLatin1( dt+i, j-i );
+ if ( haveAmp )
+ value = Qtopia::plainString( value );
+ i = j + 1;
+
+ //qDebug("attr='%s' value='%s'", attr.data(), value.latin1() );
+ int * find = dict[ attr ];
+#if 1
+ if ( !find ) {
+ // custom field
+ e.setCustomField(attr, value);
+ continue;
+ }
+
+ switch( *find ) {
+ case FDescription:
+ e.setDescription( value );
+ break;
+ case FLocation:
+ e.setLocation( value );
+ break;
+ case FCategories:
+ e.setCategories( Qtopia::Record::idsFromString( value ) );
+ break;
+ case FUid:
+ e.setUid( value.toInt() );
+ break;
+ case FType:
+ if ( value == "AllDay" )
+ e.setType( Event::AllDay );
+ else
+ e.setType( Event::Normal );
+ break;
+ case FAlarm:
+ alarmTime = value.toInt();
+ break;
+ case FSound:
+ alarmSound = value == "loud" ? Event::Loud : Event::Silent;
+ break;
+ // recurrence stuff
+ case FRType:
+ if ( value == "Daily" )
+ rp.type = Event::Daily;
+ else if ( value == "Weekly" )
+ rp.type = Event::Weekly;
+ else if ( value == "MonthlyDay" )
+ rp.type = Event::MonthlyDay;
+ else if ( value == "MonthlyDate" )
+ rp.type = Event::MonthlyDate;
+ else if ( value == "Yearly" )
+ rp.type = Event::Yearly;
+ else
+ rp.type = Event::NoRepeat;
+ break;
+ case FRWeekdays:
+ rp.days = value.toInt();
+ break;
+ case FRPosition:
+ rp.position = value.toInt();
+ break;
+ case FRFreq:
+ rp.frequency = value.toInt();
+ break;
+ case FRHasEndDate:
+ rp.hasEndDate = value.toInt();
+ break;
+ case FREndDate: {
+ rp.endDateUTC = (time_t) value.toLong();
+ break;
+ }
+ case FRStart: {
+ e.setStart( (time_t) value.toLong() );
+ break;
+ }
+ case FREnd: {
+ e.setEnd( (time_t) value.toLong() );
+ break;
+ }
+ case FNote:
+ e.setNotes( value );
+ break;
+ case FCreated:
+ rp.createTime = value.toInt();
+ break;
+ case FAction:
+ currentAction = value.toInt();
+ break;
+ case FActionKey:
+ journalKey = value.toInt();
+ break;
+ case FJournalOrigHadRepeat:
+ origHadRepeat = value.toInt();
+ break;
+ default:
+ qDebug( "huh??? missing enum? -- attr.: %s", attr );
+ break;
+ }
+#endif
+ }
+ // "post processing" (dates, times, alarm, recurrence)
+ // start date/time
+ e.setRepeat( rp.type != Event::NoRepeat, rp );
+
+ if ( alarmTime != -1 )
+ e.setAlarm( TRUE, alarmTime, alarmSound );
+
+ // now do our action based on the current action...
+ switch ( currentAction ) {
+ case ACTION_ADD:
+ addJFEvent( e );
+ break;
+ case ACTION_REMOVE:
+ removeJFEvent( e );
+ break;
+ case ACTION_REPLACE:
+ // be a little bit careful,
+ // in case of a messed up journal...
+ if ( journalKey > -1 && origHadRepeat > -1 ) {
+ // get the original from proper list...
+ if ( origHadRepeat )
+ removeJFEvent( *(repeatEvents.at(journalKey)) );
+ else
+ removeJFEvent( *(eventList.at(journalKey)) );
+ addJFEvent( e );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ f.close();
+}
+
+void DateBookDB::init()
+{
+ d = new DateBookDBPrivate;
+ d->clean = false;
+ QString str = dateBookFilename();
+ if ( str.isNull() ) {
+ QMessageBox::warning( 0, QObject::tr("Out of Space"),
+ QObject::tr("Unable to create start up files\n"
+ "Please free up some space\n"
+ "before entering data") );
+ }
+ // continuing along, we call this datebook filename again,
+ // because they may fix it before continuing, though it seems
+ // pretty unlikely...
+ loadFile( dateBookFilename() );
+
+ if ( QFile::exists( dateBookJournalFile() ) ) {
+ // merge the journal
+ loadFile( dateBookJournalFile() );
+ // save in our changes and remove the journal...
+ save();
+ }
+ d->clean = true;
+}
+
+bool DateBookDB::save()
+{
+ if ( d->clean == true )
+ return true;
+ QValueListIterator<Event> it;
+ int total_written;
+ QString strFileNew = dateBookFilename() + ".new";
+
+ QFile f( strFileNew );
+ if ( !f.open( IO_WriteOnly|IO_Raw ) )
+ return FALSE;
+
+ QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
+ buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n";
+ buf += "<events>\n";
+ QCString str = buf.utf8();
+ total_written = f.writeBlock( str.data(), str.length() );
+ if ( total_written != int(str.length()) ) {
+ f.close();
+ QFile::remove( strFileNew );
+ return false;
+ }
+
+ for ( it = eventList.begin(); it != eventList.end(); ++it ) {
+ buf = "<event";
+ (*it).save( buf );
+ buf += " />\n";
+ str = buf.utf8();
+ total_written = f.writeBlock( str.data(), str.length() );
+ if ( total_written != int(str.length()) ) {
+ f.close();
+ QFile::remove( strFileNew );
+ return false;
+ }
+ }
+ for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) {
+ buf = "<event";
+ (*it).save( buf );
+ buf += " />\n";
+ str = buf.utf8();
+ total_written = f.writeBlock( str.data(), str.length() );
+ if ( total_written != int(str.length()) ) {
+ f.close();
+ QFile::remove( strFileNew );
+ return false;
+ }
+ }
+ buf = "</events>\n</DATEBOOK>\n";
+ str = buf.utf8();
+ total_written = f.writeBlock( str.data(), str.length() );
+ if ( total_written != int(str.length()) ) {
+ f.close();
+ QFile::remove( strFileNew );
+ return false;
+ }
+ f.close();
+
+ // now rename... I like to use the systemcall
+ if ( ::rename( strFileNew, dateBookFilename() ) < 0 ) {
+ qWarning( "problem renaming file %s to %s errno %d",
+ strFileNew.latin1(), dateBookFilename().latin1(), errno );
+ // remove the file, otherwise it will just stick around...
+ QFile::remove( strFileNew );
+ }
+
+ // may as well remove the journal file...
+ QFile::remove( dateBookJournalFile() );
+ d->clean = true;
+ return true;
+}
+
+void DateBookDB::reload()
+{
+ QValueList<Event>::Iterator it = eventList.begin();
+ for ( ; it != eventList.end(); ++it ) {
+ if ( (*it).hasAlarm() )
+ delEventAlarm( *it );
+ if ( (*it).hasRepeat() )
+ removeRepeat( *it );
+ }
+ eventList.clear();
+ repeatEvents.clear(); // should be a NOP
+ init();
+}
+
+bool DateBookDB::removeRepeat( const Event &ev )
+{
+ time_t removeMe = ev.repeatPattern().createTime;
+ QValueListIterator<Event> it;
+ for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) {
+ if ( removeMe == (*it).repeatPattern().createTime ) {
+ repeatEvents.remove( *it );
+ // best break, or we are going into undefined territory!
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool DateBookDB::origRepeat( const Event &ev, Event &orig ) const
+{
+ time_t removeMe = ev.repeatPattern().createTime;
+ QValueListConstIterator<Event> it;
+ for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) {
+ if ( removeMe == (*it).repeatPattern().createTime ) {
+ orig = (*it);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void DateBookDB::saveJournalEntry( const Event &ev, journal_action action )
+{
+ saveJournalEntry( ev, action, -1, false );
+}
+
+bool DateBookDB::saveJournalEntry( const Event &evOld, journal_action action,
+ int key, bool origHadRepeat )
+{
+ bool status = false;
+ Event ev = evOld;
+ // write our log based on the action
+ QFile f( dateBookJournalFile() );
+ if ( !f.open( IO_WriteOnly|IO_Append ) )
+ return false;
+ QString buf = "<event";
+ ev.save( buf );
+ buf += " action=";
+ buf += "\"" + QString::number(action) + "\"";
+ buf += " actionkey=\"" + QString::number(key) + "\"";
+ buf += " actionorig=\"" + QString::number(origHadRepeat) +"\"";
+ buf += " />\n";
+ QString str = buf.utf8();
+ status = ( f.writeBlock( str.data(), str.length() ) == int(str.length()) );
+ f.close();
+ return status;
+}
+
+QValueList<Event> DateBookDB::getRawRepeats() const
+{
+ return repeatEvents;
+}
+
+QValueList<Event> DateBookDB::getNonRepeatingEvents( const QDate &from,
+ const QDate &to ) const
+{
+ QValueListConstIterator<Event> it;
+ QDateTime dtTmp, dtEnd;
+ QValueList<Event> tmpList;
+ for (it = eventList.begin(); it != eventList.end(); ++it ) {
+ dtTmp = (*it).start(TRUE);
+ dtEnd = (*it).end(TRUE);
+
+ if ( dtTmp.date() >= from && dtTmp.date() <= to ) {
+ Event e = *it;
+ if ( dtTmp.date() != dtEnd.date() )
+ e.setEnd( QDateTime(dtTmp.date(), QTime(23, 59, 0)) );
+ tmpList.append( e );
+ }
+ // we must also check for end date information...
+ if ( dtEnd.date() != dtTmp.date() && dtEnd.date() >= from ) {
+ QDateTime dt = dtTmp.addDays( 1 );
+ dt.setTime( QTime(0, 0, 0) );
+ QDateTime dtStop;
+ if ( dtEnd > to ) {
+ dtStop = to;
+ } else
+ dtStop = dtEnd;
+ while ( dt <= dtStop ) {
+ Event ev = *it;
+ if ( dt >= from ) {
+ ev.setStart( QDateTime(dt.date(), QTime(0, 0, 0)) );
+ if ( dt.date() == dtEnd.date() )
+ ev.setEnd( QDateTime(dt.date(), dtEnd.time()) );
+ else
+ ev.setEnd( QDateTime(dt.date(), QTime(23, 59, 0)) );
+ tmpList.append( ev );
+ }
+ dt = dt.addDays( 1 );
+ }
+ }
+ }
+ return tmpList;
+}
diff --git a/library/datebookdb.h b/library/datebookdb.h
new file mode 100644
index 0000000..aadb397
--- a/dev/null
+++ b/library/datebookdb.h
@@ -0,0 +1,85 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef DATEBOOKDB_H
+#define DATEBOOKDB_H
+
+#include <qdatetime.h>
+#include <qfile.h>
+#include <qvaluelist.h>
+#include <qpe/event.h>
+
+// journal actions...
+enum journal_action { ACTION_ADD, ACTION_REMOVE, ACTION_REPLACE };
+
+class DateBookDBPrivate;
+class DateBookDB
+{
+public:
+ DateBookDB();
+ ~DateBookDB();
+
+ // very depreciated now!!!
+ QValueList<Event> getEvents( const QDate &from, const QDate &to );
+ QValueList<Event> getEvents( const QDateTime &start );
+
+ // USE THESE!!!
+ QValueList<EffectiveEvent> getEffectiveEvents( const QDate &from,
+ const QDate &to );
+ QValueList<EffectiveEvent> getEffectiveEvents( const QDateTime &start );
+
+ QValueList<Event> getRawRepeats() const;
+ QValueList<Event> getNonRepeatingEvents( const QDate &from,
+ const QDate &to ) const;
+
+ // Use these when dealing with adding removing events...
+ void addEvent( const Event &ev, bool doalarm=TRUE );
+ void removeEvent( const Event &ev );
+ void editEvent( const Event &old, Event &ev );
+ // add/remove event without journaling ( these ended up in public by accident, never
+ // use them unless you know what you are doing...),
+ // please put them in private if we ever can change the class...
+ void addJFEvent( const Event &ev, bool doalarm=TRUE );
+ void removeJFEvent( const Event &ev );
+
+ bool save();
+ void reload();
+private:
+ //find the real repeat...
+ bool origRepeat( const Event &ev, Event &orig ) const;
+ bool removeRepeat( const Event &ev );
+ void init();
+ void loadFile( const QString &strFile );
+ // depreciated...
+ void saveJournalEntry( const Event &ev, journal_action action );
+ // new version, uncomment the "= -1" when we remove the above
+ // function..
+ bool saveJournalEntry( const Event &ev, journal_action action,
+ int key/* = -1*/, bool origHadRepeat = false );
+
+ QValueList<Event> eventList; // non-repeating events...
+ QValueList<Event> repeatEvents; // the repeating events...
+ DateBookDBPrivate *d;
+ QFile journalFile;
+};
+
+/* helper functions, also useful to other apps. */
+bool nextOccurance( const Event &e, const QDate &from, QDateTime &next);
+#endif
diff --git a/library/datebookmonth.cpp b/library/datebookmonth.cpp
new file mode 100644
index 0000000..b2074e6
--- a/dev/null
+++ b/library/datebookmonth.cpp
@@ -0,0 +1,713 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "config.h"
+#include "datebookmonth.h"
+#include "datebookdb.h"
+#include <qpe/event.h>
+#include "resource.h"
+#include "qpeapplication.h"
+#include "timestring.h"
+
+#include <qtoolbutton.h>
+#include <qspinbox.h>
+#include <qcombobox.h>
+#include <qdatetime.h>
+#include <qpainter.h>
+#include <qpopupmenu.h>
+
+
+DateBookMonthHeader::DateBookMonthHeader( QWidget *parent, const char *name )
+ : QHBox( parent, name )
+{
+ setBackgroundMode( PaletteButton );
+
+ begin = new QToolButton( this );
+ begin->setFocusPolicy(NoFocus);
+ begin->setPixmap( Resource::loadPixmap( "start" ) );
+ begin->setAutoRaise( TRUE );
+ begin->setFixedSize( begin->sizeHint() );
+
+ back = new QToolButton( this );
+ back->setFocusPolicy(NoFocus);
+ back->setPixmap( Resource::loadPixmap( "back" ) );
+ back->setAutoRaise( TRUE );
+ back->setFixedSize( back->sizeHint() );
+
+ month = new QComboBox( FALSE, this );
+ for ( int i = 0; i < 12; ++i )
+ month->insertItem( Calendar::nameOfMonth( i + 1 ) );
+
+ year = new QSpinBox( 1970, 2037, 1, this );
+
+ next = new QToolButton( this );
+ next->setFocusPolicy(NoFocus);
+ next->setPixmap( Resource::loadPixmap( "forward" ) );
+ next->setAutoRaise( TRUE );
+ next->setFixedSize( next->sizeHint() );
+
+ end = new QToolButton( this );
+ end->setFocusPolicy(NoFocus);
+ end->setPixmap( Resource::loadPixmap( "finish" ) );
+ end->setAutoRaise( TRUE );
+ end->setFixedSize( end->sizeHint() );
+
+ connect( month, SIGNAL( activated( int ) ),
+ this, SLOT( updateDate() ) );
+ connect( year, SIGNAL( valueChanged( int ) ),
+ this, SLOT( updateDate() ) );
+ connect( begin, SIGNAL( clicked() ),
+ this, SLOT( firstMonth() ) );
+ connect( end, SIGNAL( clicked() ),
+ this, SLOT( lastMonth() ) );
+ connect( back, SIGNAL( clicked() ),
+ this, SLOT( monthBack() ) );
+ connect( next, SIGNAL( clicked() ),
+ this, SLOT( monthForward() ) );
+ back->setAutoRepeat( TRUE );
+ next->setAutoRepeat( TRUE );
+}
+
+
+DateBookMonthHeader::~DateBookMonthHeader()
+{
+
+}
+
+void DateBookMonthHeader::updateDate()
+{
+ emit dateChanged( year->value(), month->currentItem() + 1 );
+}
+
+void DateBookMonthHeader::firstMonth()
+{
+ emit dateChanged( year->value(), 1 );
+ month->setCurrentItem( 0 );
+}
+
+void DateBookMonthHeader::lastMonth()
+{
+ emit dateChanged( year->value(), 12 );
+ month->setCurrentItem( 11 );
+}
+
+void DateBookMonthHeader::monthBack()
+{
+ if ( month->currentItem() > 0 ) {
+ emit dateChanged( year->value(), month->currentItem() );
+ month->setCurrentItem( month->currentItem() - 1 );
+ } else {
+ emit dateChanged( year->value() - 1, 12 );
+ // we have a signal set to a changed value in year so we only need to change
+ // year to get the result...
+ month->setCurrentItem( 11 );
+ year->setValue( year->value() - 1 );
+ }
+}
+
+void DateBookMonthHeader::monthForward()
+{
+ if ( month->currentItem() < 11 ) {
+ emit dateChanged( year->value(), month->currentItem() + 2 );
+ month->setCurrentItem( month->currentItem() + 1 );
+ } else {
+ // we have a signal set to a changed value in year so we only need to change
+ // year to get the result...
+ month->setCurrentItem( 0 );
+ year->setValue( year->value() + 1 );
+ }
+}
+
+void DateBookMonthHeader::setDate( int y, int m )
+{
+ year->setValue( y );
+ month->setCurrentItem( m - 1 );
+}
+
+//---------------------------------------------------------------------------
+
+class DateBookMonthTablePrivate
+{
+public:
+ DateBookMonthTablePrivate() {};
+ ~DateBookMonthTablePrivate() { mMonthEvents.clear(); };
+
+ QValueList<EffectiveEvent> mMonthEvents;
+ bool onMonday;
+};
+
+DateBookMonthTable::DateBookMonthTable( QWidget *parent, const char *name,
+ DateBookDB *newDb )
+ : QTable( 6, 7, parent, name ),
+ db( newDb )
+{
+ d = new DateBookMonthTablePrivate();
+ selYear = -1;
+ selMonth = -1;
+ selDay = -1;
+
+ Config cfg( "qpe" );
+ cfg.setGroup( "Time" );
+ d->onMonday = cfg.readBoolEntry( "MONDAY" );
+
+ horizontalHeader()->setResizeEnabled( FALSE );
+ // we have to do this here... or suffer the consequences later...
+ for ( int i = 0; i < 7; i++ ){
+ horizontalHeader()->resizeSection( i, 30 );
+ setColumnStretchable( i, TRUE );
+ }
+ setupLabels();
+
+ verticalHeader()->hide();
+ setLeftMargin( 0 );
+ for ( int i = 0; i < 6; ++i )
+ setRowStretchable( i, TRUE );
+
+ setSelectionMode( NoSelection );
+
+ connect( this, SIGNAL( clicked( int, int, int, const QPoint & ) ),
+ this, SLOT( dayClicked( int, int ) ) );
+ connect( this, SIGNAL( currentChanged( int, int ) ),
+ this, SLOT( dragDay( int, int ) ) );
+ setVScrollBarMode( AlwaysOff );
+ setHScrollBarMode( AlwaysOff );
+}
+
+DateBookMonthTable::~DateBookMonthTable()
+{
+ monthsEvents.clear();
+ delete d;
+}
+
+void DateBookMonthTable::setDate(int y, int m, int d)
+{
+ if (month == m && year == y) {
+ if ( selYear == -1 )
+ year = selYear;
+ if ( selMonth == -1 )
+ month = selMonth;
+ int r1, c1, r2, c2;
+ findDay(selDay, r1, c1);
+ selDay = day = d;
+ findDay(selDay, r2, c2);
+ setCurrentCell( r2, c2 );
+ //updateCell(r1,c1);
+ //updateCell(r2,c2);
+ } else {
+ selYear = year = y;
+ selMonth = month = m;
+ selDay = day = d;
+ setupTable();
+ }
+}
+
+void DateBookMonthTable::redraw()
+{
+ setupLabels();
+ setupTable();
+}
+
+void DateBookMonthTable::setWeekStart( bool onMonday )
+{
+ d->onMonday = onMonday;
+ setupLabels();
+ setupTable();
+}
+
+void DateBookMonthTable::setupTable()
+{
+ QValueList<Calendar::Day> days = Calendar::daysOfMonth( year, month, d->onMonday );
+ QValueList<Calendar::Day>::Iterator it = days.begin();
+ int row = 0, col = 0;
+ int crow = 0;
+ int ccol = 0;
+ for ( ; it != days.end(); ++it ) {
+ DayItemMonth *i = (DayItemMonth *)item( row, col );
+ if ( !i ) {
+ i = new DayItemMonth( this, QTableItem::Never, "" );
+ setItem( row, col, i );
+ }
+ Calendar::Day calDay = *it;
+ i->clearEffEvents();
+ i->setDay( calDay.date );
+ i->setType( calDay.type );
+ if ( i->day() == day && calDay.type == Calendar::Day::ThisMonth ) {
+ crow = row;
+ ccol = col;
+ }
+
+ updateCell( row, col );
+
+ if ( col == 6 ) {
+ ++row;
+ col = 0;
+ } else {
+ ++col;
+ }
+ }
+ setCurrentCell( crow, ccol );
+ getEvents();
+}
+
+void DateBookMonthTable::findDay( int day, int &row, int &col )
+{
+ QDate dtBegin( year, month, 1 );
+ int skips = dtBegin.dayOfWeek();
+ int effective_day = day + skips - 1; // row/columns begin at 0
+ // make an extra adjustment if we start on Mondays.
+ if ( d->onMonday )
+ effective_day--;
+ row = effective_day / 7;
+ col = effective_day % 7;
+}
+
+void DateBookMonthTable::dayClicked( int row, int col )
+{
+ changeDaySelection( row, col );
+ emit dateClicked( selYear, selMonth, selDay );
+}
+
+void DateBookMonthTable::dragDay( int row, int col )
+{
+ changeDaySelection( row, col );
+}
+
+void DateBookMonthTable::changeDaySelection( int row, int col )
+{
+ DayItemMonth *i = (DayItemMonth*)item( row, col );
+ if ( !i )
+ return;
+ switch ( i->type() ) {
+ case Calendar::Day::ThisMonth:
+ selMonth = month;
+ break;
+ case Calendar::Day::PrevMonth:
+ selMonth = month-1;
+ break;
+ default:
+ selMonth = month+1;
+ }
+
+ selYear = year;
+ if ( selMonth <= 0 ) {
+ selMonth = 12;
+ selYear--;
+ } else if ( selMonth > 12 ) {
+ selMonth = 1;
+ selYear++;
+ }
+ selDay = i->day();
+}
+
+
+void DateBookMonthTable::viewportMouseReleaseEvent( QMouseEvent * )
+{
+ dayClicked( currentRow(), currentColumn() );
+}
+
+void DateBookMonthTable::getEvents()
+{
+ if ( !db )
+ return;
+
+ QDate dtStart( year, month, 1 );
+ d->mMonthEvents = db->getEffectiveEvents( dtStart,
+ QDate( year, month,
+ dtStart.daysInMonth() ) );
+ QValueListIterator<EffectiveEvent> it = d->mMonthEvents.begin();
+ // now that the events are sorted, basically go through the list, make
+ // a small list for every day and set it for each item...
+ // clear all the items...
+ while ( it != d->mMonthEvents.end() ) {
+ QValueList<EffectiveEvent> dayEvent;
+ EffectiveEvent e = *it;
+ ++it;
+ dayEvent.append( e );
+ while ( it != d->mMonthEvents.end()
+ && e.date() == (*it).date() ) {
+ dayEvent.append( *it );
+ ++it;
+ }
+ int row, col;
+ findDay( e.date().day(), row, col );
+ DayItemMonth* w = static_cast<DayItemMonth*>( item( row, col ) );
+ w->setEvents( dayEvent );
+ updateCell( row, col );
+ dayEvent.clear();
+ }
+}
+
+
+void DateBookMonthTable::setupLabels()
+{
+ for ( int i = 0; i < 7; ++i ) {
+// horizontalHeader()->resizeSection( i, 30 );
+// setColumnStretchable( i, TRUE );
+ if ( d->onMonday )
+ horizontalHeader()->setLabel( i, Calendar::nameOfDay( i + 1 ) );
+ else {
+ if ( i == 0 )
+ horizontalHeader()->setLabel( i, Calendar::nameOfDay( 7 ) );
+ else
+ horizontalHeader()->setLabel( i, Calendar::nameOfDay( i ) );
+ }
+ }
+}
+
+
+//---------------------------------------------------------------------------
+
+DateBookMonth::DateBookMonth( QWidget *parent, const char *name, bool ac,
+ DateBookDB *data )
+ : QVBox( parent, name ),
+ autoClose( ac )
+{
+ setFocusPolicy(StrongFocus);
+ year = QDate::currentDate().year();
+ month = QDate::currentDate().month();
+ day = QDate::currentDate().day();
+ header = new DateBookMonthHeader( this, "DateBookMonthHeader" );
+ table = new DateBookMonthTable( this, "DateBookMonthTable", data );
+ header->setDate( year, month );
+ table->setDate( year, month, QDate::currentDate().day() );
+ header->setFocusPolicy(NoFocus);
+ table->setFocusPolicy(NoFocus);
+ connect( header, SIGNAL( dateChanged( int, int ) ),
+ this, SLOT( setDate( int, int ) ) );
+ connect( table, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( finalDate(int, int, int) ) );
+ connect( qApp, SIGNAL(weekChanged(bool)), this,
+ SLOT(slotWeekChange(bool)) );
+ table->setFocus();
+}
+
+DateBookMonth::~DateBookMonth()
+{
+
+}
+
+void DateBookMonth::setDate( int y, int m )
+{
+ /* only change the date if this is a different date,
+ * other wise we may mistakenly overide the day */
+ if ( (y != year) || (m != month) ) {
+ year = y;
+ month = m;
+ QDate nd( y, m, 1 );
+ if ( nd.daysInMonth() < day )
+ day = nd.daysInMonth();
+ table->setDate( year, month, day );
+ }
+}
+
+void DateBookMonth::setDate( int y, int m, int d )
+{
+ header->setDate( y, m);
+ table->setDate( y, m, d);
+ year = y;
+ month = m;
+ day = d;
+}
+
+/* called when we wish to close or pass back the date */
+void DateBookMonth::finalDate(int y, int m, int d)
+{
+ setDate( y, m, d );
+
+ emit dateClicked(y, m, d);
+ // emit dateClicked(QDate(y, m, d).toString());
+
+ if ( autoClose && parentWidget() )
+ parentWidget()->close();
+}
+
+void DateBookMonth::setDate( QDate d)
+{
+ setDate(d.year(), d.month(), d.day());
+}
+
+void DateBookMonth::redraw()
+{
+ table->setDate( year, month, day );
+ table->redraw();
+}
+
+QDate DateBookMonth::selectedDate() const
+{
+ if ( !table )
+ return QDate::currentDate();
+ int y, m, d;
+ table->getDate( y, m, d );
+ qDebug( "got %d %d %d", y, m, d );
+ return QDate( y, m, d );
+}
+
+void DateBookMonth::slotWeekChange( bool startOnMonday )
+{
+ table->setWeekStart( startOnMonday );
+}
+
+void DateBookMonth::keyPressEvent( QKeyEvent *e )
+{
+ switch(e->key()) {
+ case Key_Up:
+ setDate(QDate(year, month, day).addDays(-7));
+ break;
+ case Key_Down:
+ setDate(QDate(year, month, day).addDays(7));
+ break;
+ case Key_Left:
+ setDate(QDate(year, month, day).addDays(-1));
+ break;
+ case Key_Right:
+ setDate(QDate(year, month, day).addDays(1));
+ break;
+ case Key_Space:
+ qWarning("space");
+ emit dateClicked(year, month, day);
+ if ( autoClose && parentWidget() )
+ parentWidget()->close();
+ break;
+ default:
+ qWarning("ignore");
+ e->ignore();
+ break;
+ }
+}
+
+//---------------------------------------------------------------------------
+class DayItemMonthPrivate
+{
+public:
+ DayItemMonthPrivate() {};
+ ~DayItemMonthPrivate() { mDayEvents.clear(); };
+ QValueList<EffectiveEvent> mDayEvents;
+};
+
+DayItemMonth::DayItemMonth( QTable *table, EditType et, const QString &t )
+ : QTableItem( table, et, t )
+{
+ d = new DayItemMonthPrivate();
+}
+
+DayItemMonth::~DayItemMonth()
+{
+ daysEvents.clear();
+ delete d;
+}
+
+void DayItemMonth::setEvents( const QValueList<EffectiveEvent> &effEv )
+{
+ d->mDayEvents = effEv;
+}
+
+void DayItemMonth::clearEffEvents()
+{
+ d->mDayEvents.clear();
+}
+
+void DayItemMonth::paint( QPainter *p, const QColorGroup &cg,
+ const QRect &cr, bool selected )
+{
+ QColorGroup g( cg );
+ g.setBrush( QColorGroup::Base, back );
+ g.setColor( QColorGroup::Text, forg );
+ p->fillRect( 0, 0, cr.width(), cr.height(), selected ? g.brush( QColorGroup::Highlight ) : g.brush( QColorGroup::Base ) );
+
+ if ( selected )
+ p->setPen( g.highlightedText() );
+ else
+ p->setPen( g.text() );
+
+ p->save();
+ QFont f = p->font();
+ f.setPointSize( ( f.pointSize() / 3 ) * 2 );
+ p->setFont( f );
+ QFontMetrics fm( f );
+ p->drawText( 1, 1 + fm.ascent(), QString::number( day() ) );
+ p->restore();
+ // Put indicators for something like this, (similar to PalmOS)
+ // Before noon: item at top of the day
+ // At noon: put a small item at the middle
+ // After noon: put an indicator at the bottom of the day
+ // an all day event: mark with a circle in the middle (a la DateBook+)
+ bool beforeNoon = false;
+ bool atNoon = false;
+ bool afterNoon = false;
+ bool bAllDay = false;
+ bool bRepeatAfter = false;
+ bool bRepeatBefore = false;
+ bool bRepeatNoon = false;
+ bool straddleAfter = false;
+ bool straddleBefore = false;
+ QValueListIterator<EffectiveEvent> itDays = d->mDayEvents.begin();
+ for ( ; itDays != d->mDayEvents.end(); ++itDays ) {
+ if ( (*itDays).event().type() == Event::AllDay )
+ bAllDay = TRUE;
+ else if ( (*itDays).start().hour() < 12 ) {
+ beforeNoon = TRUE;
+ if ( (*itDays).end().hour() > 12 ) {
+ atNoon = TRUE;
+ straddleBefore = TRUE;
+ }
+ if ( (*itDays).end().hour() > 14 ||
+ (*itDays).end().hour() == 14 && (*itDays).end().minute() > 0 ) {
+ afterNoon = TRUE;
+ straddleAfter = TRUE;
+ }
+ if ( (*itDays).event().hasRepeat() )
+ bRepeatBefore = TRUE;
+ } else if ( (*itDays).start().hour() == 12 ) {
+ if ( !atNoon )
+ atNoon = TRUE;
+ if ( (*itDays).event().hasRepeat() )
+ bRepeatNoon = TRUE;
+ if ( (*itDays).end().hour() > 14 ||
+ (*itDays).end().hour() == 14 && (*itDays).end().minute() > 0 ) {
+ afterNoon = TRUE;
+ straddleAfter = TRUE;
+ }
+ } else if ( (*itDays).start().hour() > 12 ) {
+ afterNoon = TRUE;
+ if ( (*itDays).event().hasRepeat() )
+ bRepeatAfter = TRUE;
+ }
+ }
+ int x = cr.width() - 13;
+ if ( beforeNoon ) {
+ p->setBrush( blue );
+ p->drawRect( x, 2, 10, 10 );
+ if ( bRepeatBefore )
+ p->fillRect( x + 5, 4, 3, 3, white );
+ }
+ if ( atNoon ) {
+ p->setBrush( blue );
+ p->drawRect( x, 14, 10, 5 );
+ if ( bRepeatNoon )
+ p->fillRect( x + 5, 16, 3, 2, white );
+ }
+ if ( straddleBefore ) {
+ p->drawLine( x, 11, x, 14 );
+ p->fillRect( x + 1, 11, 8, 4, blue );
+ p->drawLine( x + 9, 11, x + 9, 14 );
+ }
+ if ( afterNoon ) {
+ p->setBrush( blue );
+ p->drawRect( x, 21, 10, 10 );
+ if ( bRepeatAfter )
+ p->fillRect( x + 5, 23, 3, 3, white );
+ }
+ if ( straddleAfter ) {
+ p->drawLine( x, 18, x, 21 );
+ p->fillRect( x + 1, 18, 8, 4, blue );
+ p->drawLine( x + 9, 18, x + 9, 21 );
+ }
+ if ( bAllDay ) {
+ p->setBrush( green );
+ p->drawEllipse( cr.width() / 2 - 7, cr.height() / 2 - 5, 10, 10 );
+ }
+}
+
+
+
+void DayItemMonth::setType( Calendar::Day::Type t )
+{
+ switch ( t ) {
+ case Calendar::Day::PrevMonth:
+ case Calendar::Day::NextMonth:
+ back = QBrush( QColor( 224, 224, 224 ) );
+ forg = black;
+ break;
+ case Calendar::Day::ThisMonth:
+ back = QBrush( white );
+ forg = black;
+ break;
+ }
+ typ = t;
+}
+
+
+
+DateButton::DateButton( bool longDate, QWidget *parent, const char * name )
+ :QPushButton( parent, name )
+{
+ longFormat = longDate;
+ df = DateFormat('/', DateFormat::MonthDayYear, DateFormat::MonthDayYear);
+ setDate( QDate::currentDate() );
+
+ connect(this,SIGNAL(pressed()),this,SLOT(pickDate()));
+
+
+}
+
+
+void DateButton::pickDate()
+{
+ static QPopupMenu *m1 = 0;
+ static DateBookMonth *picker = 0;
+ if ( !m1 ) {
+ m1 = new QPopupMenu( this );
+ picker = new DateBookMonth( m1, 0, TRUE );
+ m1->insertItem( picker );
+ connect( picker, SIGNAL( dateClicked( int, int, int ) ),
+ this, SLOT( setDate( int, int, int ) ) );
+ connect( picker, SIGNAL( dateClicked( int, int, int ) ),
+ this, SIGNAL( dateSelected( int, int, int ) ) );
+ connect( m1, SIGNAL( aboutToHide() ),
+ this, SLOT( gotHide() ) );
+ }
+ picker->slotWeekChange( weekStartsMonday );
+ picker->setDate( currDate.year(), currDate.month(), currDate.day() );
+ m1->popup(mapToGlobal(QPoint(0,height())));
+ picker->setFocus();
+}
+
+
+void DateButton::gotHide()
+{
+ // we have to redo the button...
+ setDown( false );
+}
+
+
+// void dateSelected( int year, int month, int day );
+
+void DateButton::setWeekStartsMonday( int b )
+{
+ weekStartsMonday = b;
+}
+
+void DateButton::setDate( int y, int m, int d )
+{
+ setDate( QDate( y,m,d) );
+}
+
+void DateButton::setDate( QDate d )
+{
+ currDate = d;
+ setText( longFormat ? TimeString::longDateString( d, df ) :
+ TimeString::shortDate( d, df ) );
+
+}
+
+void DateButton::setDateFormat( DateFormat f )
+{
+ df = f;
+ setDate( currDate );
+}
diff --git a/library/datebookmonth.h b/library/datebookmonth.h
new file mode 100644
index 0000000..6cd1ac5
--- a/dev/null
+++ b/library/datebookmonth.h
@@ -0,0 +1,210 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DATEBOOKMONTH
+#define DATEBOOKMONTH
+
+#include <qpe/event.h>
+
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qdatetime.h>
+#include <qvaluelist.h>
+#include <qtable.h>
+#include <qpushbutton.h>
+
+#include "calendar.h"
+#include "timestring.h"
+
+class QToolButton;
+class QComboBox;
+class QSpinBox;
+class Event;
+class DateBookDB;
+
+class DateBookMonthHeaderPrivate;
+class DateBookMonthHeader : public QHBox
+{
+ Q_OBJECT
+
+public:
+ DateBookMonthHeader( QWidget *parent = 0, const char *name = 0 );
+ ~DateBookMonthHeader();
+ void setDate( int year, int month );
+
+signals:
+ void dateChanged( int year, int month );
+
+protected slots:
+ void keyPressEvent(QKeyEvent *e ) {
+ e->ignore();
+ }
+
+private slots:
+ void updateDate();
+ void firstMonth();
+ void lastMonth();
+ void monthBack();
+ void monthForward();
+
+private:
+ QToolButton *begin, *back, *next, *end;
+ QComboBox *month;
+ QSpinBox *year;
+ DateBookMonthHeaderPrivate *d;
+};
+
+class DayItemMonthPrivate;
+class DayItemMonth : public QTableItem
+{
+public:
+ DayItemMonth( QTable *table, EditType et, const QString &t );
+ ~DayItemMonth();
+ void paint( QPainter *p, const QColorGroup &cg, const QRect &cr, bool selected );
+ void setDay( int d ) { dy = d; }
+ void setEvents( const QValueList<Event> &events ) { daysEvents = events; };
+ void setEvents( const QValueList<EffectiveEvent> &effEvents );
+ void clearEvents() { daysEvents.clear(); };
+ void clearEffEvents();
+ int day() const { return dy; }
+ void setType( Calendar::Day::Type t );
+ Calendar::Day::Type type() const { return typ; }
+
+private:
+ QBrush back;
+ QColor forg;
+ int dy;
+ Calendar::Day::Type typ;
+ QValueList<Event> daysEvents; // not used anymore...
+ DayItemMonthPrivate *d;
+};
+
+class DateBookMonthTablePrivate;
+class DateBookMonthTable : public QTable
+{
+ Q_OBJECT
+
+public:
+ DateBookMonthTable( QWidget *parent = 0, const char *name = 0,
+ DateBookDB *newDb = 0 );
+ ~DateBookMonthTable();
+ void setDate( int y, int m, int d );
+ void redraw();
+
+ QSize minimumSizeHint() const { return sizeHint(); }
+ QSize minimumSize() const { return sizeHint(); }
+ void getDate( int& y, int &m, int &d ) const {y=selYear;m=selMonth;d=selDay;}
+ void setWeekStart( bool onMonday );
+signals:
+ void dateClicked( int year, int month, int day );
+
+protected:
+ void viewportMouseReleaseEvent( QMouseEvent * );
+
+protected slots:
+
+ void keyPressEvent(QKeyEvent *e ) {
+ e->ignore();
+ }
+
+private slots:
+ void dayClicked( int row, int col );
+ void dragDay( int row, int col );
+
+private:
+ void setupTable();
+ void setupLabels();
+
+ void findDay( int day, int &row, int &col );
+ void getEvents();
+ void changeDaySelection( int row, int col );
+
+ int year, month, day;
+ int selYear, selMonth, selDay;
+ QValueList<Event> monthsEvents; // not used anymore...
+ DateBookDB *db;
+ DateBookMonthTablePrivate *d;
+};
+
+class DateBookMonthPrivate;
+class DateBookMonth : public QVBox
+{
+ Q_OBJECT
+
+public:
+ DateBookMonth( QWidget *parent = 0, const char *name = 0, bool ac = FALSE,
+ DateBookDB *data = 0 );
+ ~DateBookMonth();
+ QDate selectedDate() const;
+
+signals:
+ void dateClicked( int year, int month, int day );
+
+public slots:
+ void setDate( int y, int m );
+ void setDate( int y, int m, int d );
+ void setDate( QDate );
+ void redraw();
+ void slotWeekChange( bool );
+
+protected slots:
+ virtual void keyPressEvent(QKeyEvent *e);
+
+private slots:
+ void forwardDateClicked( int y, int m, int d ) { emit dateClicked( y, m, d ); }
+ void finalDate(int, int, int);
+
+private:
+ DateBookMonthHeader *header;
+ DateBookMonthTable *table;
+ int year, month, day;
+ bool autoClose;
+ class DateBookMonthPrivate *d;
+};
+
+class DateButton : public QPushButton
+{
+ Q_OBJECT
+
+public:
+ DateButton( bool longDate, QWidget *parent, const char * name = 0 );
+ QDate date() const { return currDate; }
+
+signals:
+ void dateSelected( int year, int month, int day );
+
+public slots:
+ void setDate( int y, int m, int d );
+ void setDate( QDate );
+ void setWeekStartsMonday( int );
+ void setDateFormat( DateFormat );
+
+private slots:
+ void pickDate();
+ void gotHide();
+
+private:
+ bool longFormat;
+ bool weekStartsMonday;
+ QDate currDate;
+ DateFormat df;
+};
+
+
+#endif
diff --git a/library/filemanager.cpp b/library/filemanager.cpp
new file mode 100644
index 0000000..2b97846
--- a/dev/null
+++ b/library/filemanager.cpp
@@ -0,0 +1,274 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "filemanager.h"
+#include "applnk.h"
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtextstream.h>
+#include <qtextcodec.h>
+
+#include <errno.h>
+#include <stdlib.h>
+
+/*!
+ \class FileManager
+ \brief The FileManager class assists with AppLnk input/output.
+*/
+
+/*!
+ Constructs a FileManager.
+*/
+FileManager::FileManager()
+{
+}
+
+/*!
+ Destroys a FileManager.
+*/
+FileManager::~FileManager()
+{
+
+}
+
+/*!
+ Saves \a data as the document specified by \a f.
+
+ Returns whether the operation succeeded.
+*/
+bool FileManager::saveFile( const DocLnk &f, const QByteArray &data )
+{
+ QString fn = f.file() + ".new";
+ ensurePathExists( fn );
+ QFile fl( fn );
+ if ( !fl.open( IO_WriteOnly|IO_Raw ) )
+ return FALSE;
+ int total_written = fl.writeBlock( data );
+ fl.close();
+ if ( total_written != int(data.size()) || !f.writeLink() ) {
+ QFile::remove( fn );
+ return FALSE;
+ }
+ // else rename the file...
+ if ( ::rename( fn.latin1(), f.file().latin1() ) < 0 ) {
+ qWarning( "problem renaming file %s to %s, errno: %d", fn.latin1(),
+ f.file().latin1(), errno );
+ // remove the file...
+ QFile::remove( fn );
+ }
+ return TRUE;
+}
+
+/*!
+ Saves \a text as the document specified by \a f.
+
+ The text is saved in UTF8 format.
+
+ Returns whether the operation succeeded.
+*/
+bool FileManager::saveFile( const DocLnk &f, const QString &text )
+{
+ QString fn = f.file() + ".new";
+ ensurePathExists( fn );
+ QFile fl( fn );
+ if ( !fl.open( IO_WriteOnly|IO_Raw ) ) {
+ qDebug( "open failed: %s", fn.latin1() );
+ return FALSE;
+ }
+
+ QCString cstr = text.utf8();
+ int total_written;
+ total_written = fl.writeBlock( cstr.data(), cstr.length() );
+ fl.close();
+ if ( total_written != int(cstr.length()) || !f.writeLink() ) {
+ QFile::remove( fn );
+ return FALSE;
+ }
+ // okay now rename the file...
+ if ( ::rename( fn.latin1(), f.file().latin1() ) < 0 ) {
+ qWarning( "problem renaming file %s to %s, errno: %d", fn.latin1(),
+ f.file().latin1(), errno );
+ // remove the tmp file, otherwise, it will just lay around...
+ QFile::remove( fn.latin1() );
+ }
+ return TRUE;
+}
+
+
+/*!
+ Loads \a text from the document specified by \a f.
+
+ The text is required to be in UTF8 format.
+
+ Returns whether the operation succeeded.
+*/
+bool FileManager::loadFile( const DocLnk &f, QString &text )
+{
+ QString fn = f.file();
+ QFile fl( fn );
+ if ( !fl.open( IO_ReadOnly ) )
+ return FALSE;
+ QTextStream ts( &fl );
+#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
+ // The below should work, but doesn't in Qt 2.3.0
+ ts.setCodec( QTextCodec::codecForMib( 106 ) );
+#else
+ ts.setEncoding( QTextStream::UnicodeUTF8 );
+#endif
+ text = ts.read();
+ fl.close();
+ return TRUE;
+}
+
+
+/*!
+ Loads \a ba from the document specified by \a f.
+
+ Returns whether the operation succeeded.
+*/
+bool FileManager::loadFile( const DocLnk &f, QByteArray &ba )
+{
+ QString fn = f.file();
+ QFile fl( fn );
+ if ( !fl.open( IO_ReadOnly ) )
+ return FALSE;
+ ba.resize( fl.size() );
+ if ( fl.size() > 0 )
+ fl.readBlock( ba.data(), fl.size() );
+ fl.close();
+ return TRUE;
+}
+
+/*!
+ Copies the document specified by \a src to the document specified
+ by \a dest.
+
+ Returns whether the operation succeeded.
+*/
+bool FileManager::copyFile( const AppLnk &src, const AppLnk &dest )
+{
+ QFile sf( src.file() );
+ if ( !sf.open( IO_ReadOnly ) )
+ return FALSE;
+
+ QString fn = dest.file() + ".new";
+ ensurePathExists( fn );
+ QFile df( fn );
+ if ( !df.open( IO_WriteOnly|IO_Raw ) )
+ return FALSE;
+
+ const int bufsize = 16384;
+ char buffer[bufsize];
+ bool ok = TRUE;
+ int bytesRead = 0;
+ while ( ok && !sf.atEnd() ) {
+ bytesRead = sf.readBlock( buffer, bufsize );
+ if ( bytesRead < 0 )
+ ok = FALSE;
+ while ( ok && bytesRead > 0 ) {
+ int bytesWritten = df.writeBlock( buffer, bytesRead );
+ if ( bytesWritten < 0 )
+ ok = FALSE;
+ else
+ bytesRead -= bytesWritten;
+ }
+ }
+
+ if ( ok )
+ ok = dest.writeLink();
+
+ if ( ok ) {
+ // okay now rename the file...
+ if ( ::rename( fn.latin1(), dest.file().latin1() ) < 0 ) {
+ qWarning( "problem renaming file %s to %s, errno: %d", fn.latin1(),
+ dest.file().latin1(), errno );
+ // remove the tmp file, otherwise, it will just lay around...
+ QFile::remove( fn.latin1() );
+ }
+ } else {
+ QFile::remove( fn.latin1() );
+ }
+
+ return ok;
+}
+
+/*!
+ Opens the document specified by \a f as a readable QIODevice.
+ The caller must delete the return value.
+
+ Returns 0 if the operation fails.
+*/
+QIODevice* FileManager::openFile( const DocLnk& f )
+{
+ QString fn = f.file();
+ QFile* fl = new QFile( fn );
+ if ( !fl->open( IO_ReadOnly ) ) {
+ delete fl;
+ fl = 0;
+ }
+ return fl;
+}
+
+/*!
+ Opens the document specified by \a f as a writable QIODevice.
+ The caller must delete the return value.
+
+ Returns 0 if the operation fails.
+*/
+QIODevice* FileManager::saveFile( const DocLnk& f )
+{
+ QString fn = f.file();
+ ensurePathExists( fn );
+ QFile* fl = new QFile( fn );
+ if ( fl->open( IO_WriteOnly ) ) {
+ f.writeLink();
+ } else {
+ delete fl;
+ fl = 0;
+ }
+ return fl;
+}
+
+/*!
+ Returns whether the document specified by \a f current exists
+ as a file on disk.
+*/
+bool FileManager::exists( const DocLnk &f )
+{
+ return QFile::exists(f.file());
+}
+
+
+/*!
+ Ensures that the path \a fn exists, by creating required directories.
+ Returns TRUE if successful.
+*/
+bool FileManager::ensurePathExists( const QString &fn )
+{
+ QFileInfo fi(fn);
+ fi.setFile( fi.dirPath(TRUE) );
+ if ( !fi.exists() ) {
+ if ( system(("mkdir -p "+fi.filePath())) )
+ return FALSE;
+ }
+
+ return TRUE;
+}
diff --git a/library/filemanager.h b/library/filemanager.h
new file mode 100644
index 0000000..f8d9425
--- a/dev/null
+++ b/library/filemanager.h
@@ -0,0 +1,56 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FILEMANAGER_H
+#define FILEMANAGER_H
+
+#include <qstring.h>
+#include <qstringlist.h>
+
+class AppLnk;
+class DocLnk;
+class FileManagerPrivate;
+
+class FileManager
+{
+public:
+ FileManager();
+ ~FileManager();
+
+ bool saveFile( const DocLnk&, const QByteArray &data );
+ bool saveFile( const DocLnk&, const QString &text );
+ bool loadFile( const DocLnk&, QByteArray &data );
+ bool loadFile( const DocLnk&, QString &text );
+ bool copyFile( const AppLnk &src, const AppLnk &dest );
+
+ // The caller must delete the return values.
+ QIODevice* openFile( const DocLnk& );
+ QIODevice* saveFile( const DocLnk& );
+
+ bool exists( const DocLnk& );
+
+protected:
+ bool ensurePathExists( const QString &fn );
+
+private:
+ FileManagerPrivate *d;
+};
+
+
+#endif
diff --git a/library/fileselector.cpp b/library/fileselector.cpp
new file mode 100644
index 0000000..365f383
--- a/dev/null
+++ b/library/fileselector.cpp
@@ -0,0 +1,340 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "fileselector.h"
+#include "global.h"
+#include "resource.h"
+#include "config.h"
+#include "applnk.h"
+#include "storage.h"
+#include "qpemenubar.h"
+#include "qcopchannel_qws.h"
+#include "lnkproperties.h"
+#include "applnk.h"
+#include "qpeapplication.h"
+#include "categorymenu.h"
+
+#include <stdlib.h>
+
+#include <qdir.h>
+#include <qwidget.h>
+#include <qpopupmenu.h>
+#include <qtoolbutton.h>
+#include <qpushbutton.h>
+#include <qheader.h>
+#include <qtooltip.h>
+
+
+FileSelectorItem::FileSelectorItem( QListView *parent, const DocLnk &f )
+ : QListViewItem( parent ), fl( f )
+{
+ setText( 0, f.name() );
+ setPixmap( 0, f.pixmap() );
+}
+
+FileSelectorItem::~FileSelectorItem()
+{
+}
+
+class FileSelectorViewPrivate
+{
+public:
+ CategoryMenu *cm;
+};
+
+FileSelectorView::FileSelectorView( const QString &f, QWidget *parent, const char *name )
+ : QListView( parent, name ), filter( f ), count( 0 )
+{
+ d = new FileSelectorViewPrivate();
+ d->cm = 0;
+ setAllColumnsShowFocus( TRUE );
+ addColumn( tr( "Name" ) );
+ header()->hide();
+
+ fileManager = new FileManager;
+ reread();
+ QCopChannel *channel = new QCopChannel( "QPE/Card", this );
+ connect( channel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(cardMessage( const QCString &, const QByteArray &)) );
+}
+
+FileSelectorView::~FileSelectorView()
+{
+}
+
+void FileSelectorView::reread()
+{
+ FileSelectorItem *item = (FileSelectorItem *)selectedItem();
+ QString oldFile;
+ if ( item )
+ oldFile = item->file().file();
+ clear();
+ DocLnkSet files;
+ Global::findDocuments(&files, filter);
+ count = files.children().count();
+ QListIterator<DocLnk> dit( files.children() );
+ for ( ; dit.current(); ++dit ) {
+ if (d->cm)
+ if (!d->cm->isSelected((**dit).categories()))
+ continue;
+ item = new FileSelectorItem( this, **dit );
+ if ( item->file().file() == oldFile )
+ setCurrentItem( item );
+ }
+ if ( !selectedItem() )
+ setCurrentItem( firstChild() );
+}
+
+void FileSelectorView::setCategoryFilter(CategoryMenu *cm)
+{
+ d->cm = cm;
+ connect(cm, SIGNAL(categoryChange()), this, SLOT(categoryChanged()) );
+}
+
+void FileSelectorView::categoryChanged() { reread(); }
+
+void FileSelectorView::cardMessage( const QCString &msg, const QByteArray &)
+{
+ if ( msg == "mtabChanged()" )
+ reread();
+}
+
+void FileSelectorView::keyPressEvent( QKeyEvent *e )
+{
+ QString txt = e->text();
+ if (e->key() == Key_Space)
+ emit returnPressed( currentItem() );
+ else if ( !txt.isNull() && txt[0] > ' ' && e->key() < 0x1000 )
+ e->ignore();
+ else
+ QListView::keyPressEvent(e);
+}
+
+class FileSelectorPrivate
+{
+public:
+ CategoryMenu *cm;
+ QMenuBar *mb;
+};
+
+/*!
+ \class FileSelector fileselector.h
+ \brief The FileSelector widget allows the user to select DocLnk objects.
+*/
+
+/*!
+ Constructs a FileSelector with mime filter \a f.
+ The standard Qt \a parent and \a name parameters are passed to the
+ parent.
+
+ If \a newVisible is TRUE, the widget has an button allowing the user
+ the create "new" documents - editor applications will have this while
+ viewer applications will not.
+
+ If \a closeVisible is TRUE, the widget has an button allowinf the user
+ to select "no document".
+
+ \sa DocLnkSet::DocLnkSet()
+*/
+FileSelector::FileSelector( const QString &f, QWidget *parent, const char *name, bool newVisible, bool closeVisible )
+ : QVBox( parent, name ), filter( f )
+{
+ setMargin( 0 );
+ setSpacing( 0 );
+ QHBox *top = new QHBox( this );
+ top->setBackgroundMode( PaletteButton ); // same colour as toolbars
+ top->setSpacing( 0 );
+
+ QWidget *spacer = new QWidget( top );
+ spacer->setBackgroundMode( PaletteButton );
+
+ d = new FileSelectorPrivate();
+ d->mb = new QMenuBar(spacer);
+ d->cm = new CategoryMenu("Document View", this);
+ QPEMenuToolFocusManager::manager()->addWidget( d->mb );
+ d->mb->insertItem(tr("View"), d->cm);
+
+
+ QToolButton *tb = new QToolButton( top );
+ tb->setPixmap( Resource::loadPixmap( "new" ) );
+ connect( tb, SIGNAL( clicked() ), this, SLOT( createNew() ) );
+ buttonNew = tb;
+ tb->setFixedSize( 18, 20 ); // tb->sizeHint() );
+ tb->setAutoRaise( TRUE );
+ QToolTip::add( tb, tr( "Create a new Document" ) );
+ QPEMenuToolFocusManager::manager()->addWidget( tb );
+
+ tb = new QToolButton( top );
+ tb->setPixmap( Resource::loadPixmap( "close" ) );
+ connect( tb, SIGNAL( clicked() ), this, SIGNAL( closeMe() ) );
+ buttonClose = tb;
+ tb->setFixedSize( 18, 20 ); // tb->sizeHint() );
+ tb->setAutoRaise( TRUE );
+ QToolTip::add( tb, tr( "Close the File Selector" ) );
+ QPEMenuToolFocusManager::manager()->addWidget( tb );
+
+ view = new FileSelectorView( filter, this, "fileview" );
+ view->setCategoryFilter(d->cm);
+ QPEApplication::setStylusOperation( view->viewport(), QPEApplication::RightOnHold );
+ connect( view, SIGNAL( mouseButtonClicked( int, QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( fileClicked( int, QListViewItem *, const QPoint &, int ) ) );
+ connect( view, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint &, int ) ),
+ this, SLOT( filePressed( int, QListViewItem *, const QPoint &, int ) ) );
+ connect( view, SIGNAL( returnPressed( QListViewItem * ) ),
+ this, SLOT( fileClicked( QListViewItem * ) ) );
+
+ setNewVisible( newVisible );
+ setCloseVisible( closeVisible );
+}
+
+/*!
+ Destroys the widget.
+*/
+FileSelector::~FileSelector()
+{
+
+}
+
+/*!
+ Returns the number of files in the view. If this is zero, and editor
+ application might avoid using the selector and immediately start with
+ a "new" document.
+*/
+int FileSelector::fileCount()
+{
+ return view->fileCount();
+}
+
+/*!
+ Causes the file selector to act as if the "new" button was chosen.
+
+ \sa newSelected(), closeMe()
+*/
+void FileSelector::createNew()
+{
+ DocLnk f;
+ emit newSelected( f );
+ emit closeMe();
+}
+
+void FileSelector::fileClicked( int button, QListViewItem *i, const QPoint &, int )
+{
+ if ( !i )
+ return;
+ if ( button == Qt::LeftButton ) {
+ fileClicked( i );
+ }
+}
+
+void FileSelector::filePressed( int button, QListViewItem *i, const QPoint &, int )
+{
+ if ( !i )
+ return;
+ if ( button == Qt::RightButton ) {
+ DocLnk l = ((FileSelectorItem *)i)->file();
+ LnkProperties prop( &l );
+ prop.showMaximized();
+ prop.exec();
+ d->cm->reload();
+ reread();
+ }
+}
+
+void FileSelector::fileClicked( QListViewItem *i )
+{
+ if ( !i )
+ return;
+ emit fileSelected( ( (FileSelectorItem*)i )->file() );
+ emit closeMe();
+}
+
+/*!
+ Returns the selected DocLnk. The caller is responsible for deleting
+ the returned value.
+*/
+const DocLnk *FileSelector::selected()
+{
+ FileSelectorItem *item = (FileSelectorItem *)view->selectedItem();
+ if ( item )
+ return new DocLnk( item->file() );
+ return NULL;
+}
+
+/*!
+ \fn void FileSelector::fileSelected( const DocLnk &f )
+
+ This signal is emitted when the user selects a file.
+ \a f is the file.
+*/
+
+/*!
+ \fn void FileSelector::newSelected( const DocLnk &f )
+
+ This signal is emitted when the user selects "new" file.
+ \a f is a DocLnk for the file. You will need to set the type
+ of the value after copying it.
+*/
+
+/*!
+ \fn void FileSelector::closeMe()
+
+ This signal is emitted when the user no longer needs to view the widget.
+*/
+
+
+/*!
+ Sets whether a "new document" button is visible, according to \a b.
+*/
+void FileSelector::setNewVisible( bool b )
+{
+ if ( b )
+ buttonNew->show();
+ else
+ buttonNew->hide();
+}
+
+/*!
+ Sets whether a "no document" button is visible, according to \a b.
+*/
+void FileSelector::setCloseVisible( bool b )
+{
+ if ( b )
+ buttonClose->show();
+ else
+ buttonClose->hide();
+}
+
+/*!
+ Sets whether a categories menu is visible, according to \a b.
+*/
+void FileSelector::setCategoriesVisible( bool b )
+{
+ if ( b )
+ d->mb->show();
+ else
+ d->mb->hide();
+}
+
+/*!
+ Rereads the list of files.
+*/
+void FileSelector::reread()
+{
+ view->reread();
+}
diff --git a/library/fileselector.h b/library/fileselector.h
new file mode 100644
index 0000000..ef8efea
--- a/dev/null
+++ b/library/fileselector.h
@@ -0,0 +1,108 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FILESELECTOR_H
+#define FILESELECTOR_H
+
+#include <qhbox.h>
+#include <qvbox.h>
+#include <qlistview.h>
+#include <qtoolbutton.h>
+
+#include "filemanager.h"
+#include "applnk.h"
+
+class QPopupMenu;
+class QPushButton;
+
+class FileSelectorItem : public QListViewItem
+{
+public:
+ FileSelectorItem( QListView *parent, const DocLnk& f );
+ ~FileSelectorItem();
+
+ DocLnk file() const { return fl; }
+
+private:
+ DocLnk fl;
+};
+
+class CategoryMenu;
+class FileSelectorViewPrivate;
+class FileSelectorView : public QListView
+{
+ Q_OBJECT
+
+public:
+ FileSelectorView( const QString &mimefilter, QWidget *parent, const char *name );
+ ~FileSelectorView();
+ void reread();
+ int fileCount() { return count; }
+
+ void setCategoryFilter(CategoryMenu *);
+protected:
+ void keyPressEvent( QKeyEvent *e );
+
+protected slots:
+ void cardMessage( const QCString &, const QByteArray &);
+
+ void categoryChanged();
+
+private:
+ QString filter;
+ FileManager *fileManager;
+ int count;
+ FileSelectorViewPrivate *d;
+};
+
+class FileSelectorPrivate;
+class FileSelector : public QVBox
+{
+ Q_OBJECT
+
+public:
+ FileSelector( const QString &mimefilter, QWidget *parent, const char *name, bool newVisible = TRUE, bool closeVisible = TRUE );
+ ~FileSelector();
+ void setNewVisible( bool b );
+ void setCloseVisible( bool b );
+ void setCategoriesVisible( bool b );
+ void reread();
+ int fileCount();
+ const DocLnk *selected();
+
+signals:
+ void fileSelected( const DocLnk & );
+ void newSelected( const DocLnk & );
+ void closeMe();
+
+private slots:
+ void createNew();
+ void fileClicked( int, QListViewItem *, const QPoint &, int );
+ // pressed to get 'right down'
+ void filePressed( int, QListViewItem *, const QPoint &, int );
+ void fileClicked( QListViewItem *);
+
+private:
+ FileSelectorView *view;
+ QString filter;
+ QToolButton *buttonNew, *buttonClose;
+ FileSelectorPrivate *d;
+};
+
+#endif
diff --git a/library/finddialog.cpp b/library/finddialog.cpp
new file mode 100644
index 0000000..7a9367b
--- a/dev/null
+++ b/library/finddialog.cpp
@@ -0,0 +1,73 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "finddialog.h"
+#include "findwidget_p.h"
+
+#include <qlayout.h>
+#include <qpushbutton.h>
+
+FindDialog::FindDialog( const QString &appName, QWidget *parent,
+ const char *name, bool modal )
+ : QDialog( parent, name, modal )
+{
+ QVBoxLayout *vb;
+ vb = new QVBoxLayout( this );
+ fw = new FindWidget( appName, this, "Find Widget" );
+ vb->addWidget( fw );
+ QObject::connect( fw, SIGNAL(signalFindClicked(const QString&,
+ bool,bool,int)),
+ this, SIGNAL(signalFindClicked(const QString&,
+ bool,bool,int)) );
+ QObject::connect( fw, SIGNAL(signalFindClicked(const QString&,const QDate&,
+ bool,bool,int)),
+ this, SIGNAL(signalFindClicked(const QString&,
+ const QDate&,bool,bool,int)) );
+ d = 0;
+}
+
+FindDialog::~FindDialog()
+{
+}
+
+QString FindDialog::findText() const
+{
+ return fw->findText();
+}
+
+void FindDialog::setUseDate( bool show )
+{
+ fw->setUseDate( show );
+}
+
+void FindDialog::setDate( const QDate &dt )
+{
+ fw->setDate( dt );
+}
+
+void FindDialog::slotNotFound()
+{
+ fw->slotNotFound();
+}
+
+void FindDialog::slotWrapAround()
+{
+ fw->slotWrapAround();
+}
diff --git a/library/finddialog.h b/library/finddialog.h
new file mode 100644
index 0000000..265b5ae
--- a/dev/null
+++ b/library/finddialog.h
@@ -0,0 +1,57 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __FINDDIALOG_H__
+#define __FINDDIALOG_H__
+
+#include <qdatetime.h>
+#include <qdialog.h>
+
+class FindWidget;
+
+class FindDialogPrivate;
+class FindDialog : public QDialog
+{
+ Q_OBJECT
+public:
+ FindDialog( const QString &appName,
+ QWidget *parent = 0, const char *name = 0, bool modal = TRUE );
+ ~FindDialog();
+
+ QString findText() const;
+ void setUseDate( bool show );
+ void setDate( const QDate &dt );
+
+public slots:
+ void slotNotFound();
+ void slotWrapAround();
+
+signals:
+ void signalFindClicked( const QString &txt, bool caseSensitive,
+ bool backwards, int category );
+ void signalFindClicked( const QString &txt, const QDate &dt,
+ bool caseSensitive, bool backwards, int category );
+
+private:
+ FindWidget *fw;
+ FindDialogPrivate *d;
+};
+
+#endif
diff --git a/library/findwidget_p.cpp b/library/findwidget_p.cpp
new file mode 100644
index 0000000..7ed8bca
--- a/dev/null
+++ b/library/findwidget_p.cpp
@@ -0,0 +1,119 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "findwidget_p.h"
+
+#include <qpe/categories.h>
+#include <qpe/categoryselect.h>
+#include <qpe/datebookmonth.h>
+#include <qpe/timestring.h>
+
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qmessagebox.h>
+#include <qpushbutton.h>
+#include <qpopupmenu.h>
+#include <qtoolbutton.h>
+
+FindWidget::FindWidget( const QString &appName, QWidget *parent,
+ const char *name )
+ : FindWidgetBase( parent, name ),
+ mStrApp( appName ),
+ mDate( QDate::currentDate() )
+{
+ setMaximumSize( sizeHint() );
+ QArray<int> vl(0);
+ cmbCat->setCategories( vl, mStrApp );
+ cmbCat->setRemoveCategoryEdit( TRUE );
+ cmbCat->setAllCategories( TRUE );
+ // hide junk for the moment...
+ lblStartDate->hide();
+ cmdStartDate->hide();
+ QPopupMenu *m1 = new QPopupMenu( this );
+ dtPicker = new DateBookMonth( m1, 0, TRUE );
+ dtPicker->setDate( mDate.year(), mDate.month(), mDate.day() );
+ m1->insertItem( dtPicker );
+ cmdStartDate->setPopup( m1 );
+ cmdStartDate->setText( TimeString::shortDate(mDate) );
+ QObject::connect( dtPicker, SIGNAL(dateClicked(int, int, int)),
+ this, SLOT(slotDateChanged(int, int, int)) );
+
+ QObject::connect( cmdFind, SIGNAL(clicked()),
+ this, SLOT(slotFindClicked()) );
+}
+
+FindWidget::~FindWidget()
+{
+}
+
+QString FindWidget::findText() const
+{
+ return txtFind->text();
+}
+
+void FindWidget::slotFindClicked()
+{
+ lblStatus->setText( "" );
+ if ( cmdStartDate->isVisible() )
+ emit signalFindClicked( findText(),
+ mDate,
+ chkCase->isChecked(),
+ chkBackwards->isChecked(),
+ cmbCat->currentCategory() );
+ else
+ emit signalFindClicked( findText(), chkCase->isChecked(),
+ chkBackwards->isChecked(),
+ cmbCat->currentCategory() );
+}
+
+void FindWidget::setUseDate( bool show )
+{
+ if ( show ) {
+ lblStartDate->show();
+ cmdStartDate->show();
+ } else {
+ lblStartDate->hide();
+ cmdStartDate->hide();
+ }
+ chkBackwards->setDisabled( show );
+}
+
+void FindWidget::setDate( const QDate &dt )
+{
+ slotDateChanged( dt.year(), dt.month(), dt.day() );
+}
+
+void FindWidget::slotNotFound()
+{
+ lblStatus->setText( tr("String Not Found.") );
+}
+
+void FindWidget::slotWrapAround()
+{
+ lblStatus->setText( tr("End reached, starting at beginning") );
+}
+
+void FindWidget::slotDateChanged( int year, int month, int day )
+{
+ mDate.setYMD( year, month, day );
+ cmdStartDate->setText( TimeString::shortDate( mDate ) );
+ dtPicker->setDate( year, month, day );
+}
diff --git a/library/findwidget_p.h b/library/findwidget_p.h
new file mode 100644
index 0000000..418242c
--- a/dev/null
+++ b/library/findwidget_p.h
@@ -0,0 +1,65 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __FINDWIDGET_H__
+#define __FINDWIDGET_H__
+
+#include "findwidgetbase_p.h"
+
+#include <qdatetime.h>
+
+class Categories;
+class DateBookMonth;
+
+class FindWidgetPrivate;
+class FindWidget : public FindWidgetBase
+{
+ Q_OBJECT
+public:
+ FindWidget( const QString &appName,
+ QWidget *parent = 0, const char *name = 0 );
+ ~FindWidget();
+
+ QString findText() const;
+ void setUseDate( bool show );
+ void setDate( const QDate &dt );
+
+public slots:
+ void slotNotFound();
+ void slotWrapAround();
+ void slotDateChanged( int year, int month, int day );
+
+signals:
+ void signalFindClicked( const QString &txt, bool caseSensitive,
+ bool backwards, int category );
+ void signalFindClicked( const QString &txt, const QDate &dt,
+ bool caseSensitive, bool backwards, int category );
+
+private slots:
+ void slotFindClicked();
+
+private:
+ QString mStrApp;
+ Categories *mpCat;
+ DateBookMonth *dtPicker;
+ QDate mDate;
+};
+
+#endif
diff --git a/library/findwidgetbase_p.ui b/library/findwidgetbase_p.ui
new file mode 100644
index 0000000..5eceaad
--- a/dev/null
+++ b/library/findwidgetbase_p.ui
@@ -0,0 +1,261 @@
+<!DOCTYPE UI><UI>
+<class>FindWidgetBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>FindWidgetBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>245</width>
+ <height>183</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Find</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblFindWhat</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>MShape</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>MShadow</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Find what:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>txtFind</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdFind</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Find</string>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblCategory</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Category:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>CategorySelect</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmbCat</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QFrame</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Frame3</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblStartDate</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Start Search at:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>cmdStartDate</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Dec 02 01</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>chkCase</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Case Sensitive</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>chkBackwards</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Search Backwards</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>lblStatus</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>CategorySelect</class>
+ <header location="global">qpe/categoryselect.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>1</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+</UI>
diff --git a/library/fontdatabase.cpp b/library/fontdatabase.cpp
new file mode 100644
index 0000000..50dcf3d
--- a/dev/null
+++ b/library/fontdatabase.cpp
@@ -0,0 +1,235 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qpeapplication.h"
+#include "fontfactoryinterface.h"
+#include "fontdatabase.h"
+
+#include <qpe/qlibrary.h>
+
+#include <qfontmanager_qws.h>
+#include <qdir.h>
+#include <qdict.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static QString fontDir()
+{
+ QString qtdir = getenv("QTDIR");
+ if ( qtdir.isEmpty() ) qtdir = "/usr/local/qt-embedded";
+ return qtdir+"/lib/fonts/";
+}
+
+#ifdef QT_NO_FONTDATABASE
+static QString fontFamily( const QString& key )
+{
+ int u0 = key.find('_');
+ int u1 = key.find('_',u0+1);
+ int u2 = key.find('_',u1+1);
+ QString family = key.left(u0);
+ //int pointSize = key.mid(u0+1,u1-u0-1).toInt();
+ //int weight = key.mid(u1+1,u2-u1-1).toInt();
+ //bool italic = key.mid(u2-1,1) == "i";
+ // #### ignores _t and _I fields
+ return family;
+}
+#endif
+
+QValueList<FontFactory> *FontDatabase::factoryList = 0;
+
+/*!
+ \class FontDatabase fontdatabase.h
+ \brief The FontDatabase class provides information about available fonts.
+
+ Provides information about available fonts.
+
+ FontDatabase provides information about the available fonts of the
+ underlying window system.
+
+ Most often you will simply want to query the database for all font
+ families(), and their respective pointSizes(), styles() and charSets().
+
+ Use FontDatabase rather than QFontDatabase when you may need access to
+ fonts not normally available. For example, if the freetype library and
+ Qtopia freetype plugin are installed TrueType fonts will be available
+ to your application. Font renderer plugins have greater resource
+ requirements than the system fonts so they should be used only when
+ necessary.
+*/
+
+/*!
+ Constructs the FontDatabase class.
+*/
+FontDatabase::FontDatabase()
+#ifndef QT_NO_FONTDATABASE
+ : QFontDatabase()
+#endif
+{
+ if ( !factoryList )
+ loadRenderers();
+}
+
+/*!
+ Returns a list of names of all available font families.
+*/
+QStringList FontDatabase::families() const
+{
+#ifndef QT_NO_FONTDATABASE
+ return QFontDatabase::families();
+#else
+ QStringList list;
+ QDict<void> familyDict;
+ QDiskFont *qdf;
+ for ( qdf=qt_fontmanager->diskfonts.first(); qdf!=0;
+ qdf=qt_fontmanager->diskfonts.next()) {
+ QString familyname = qdf->name;
+ if ( !familyDict.find( familyname ) ) {
+ familyDict.insert( familyname, (void *)1 );
+ list.append( familyname );
+ }
+ }
+
+ QDir dir(fontDir(),"*.qpf");
+ for (int i=0; i<(int)dir.count(); i++) {
+ QString familyname = fontFamily(dir[i]);
+ if ( !familyDict.find( familyname ) ) {
+ familyDict.insert( familyname, (void *)1 );
+ list.append( familyname );
+ }
+ }
+
+ return list;
+#endif
+}
+
+#ifdef QT_NO_FONTDATABASE
+/*!
+ Returns a list of standard fontsizes.
+*/
+QValueList<int> FontDatabase::standardSizes()
+{
+ static int s[]={ 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28,
+ 36, 48, 72, 0 };
+ static bool first = TRUE;
+ static QValueList<int> sList;
+ if ( first ) {
+ first = FALSE;
+ int i = 0;
+ while( s[i] )
+ sList.append( s[i++] );
+ }
+ return sList;
+}
+
+#endif
+
+/*!
+ Load any font renderer plugins that are available and make fonts that
+ the plugins can read available.
+*/
+void FontDatabase::loadRenderers()
+{
+#ifndef QT_NO_COMPONENT
+ if ( !factoryList )
+ factoryList = new QValueList<FontFactory>;
+
+ QValueList<FontFactory>::Iterator mit;
+ for ( mit = factoryList->begin(); mit != factoryList->end(); ++mit ) {
+ qt_fontmanager->factories.setAutoDelete( false );
+ qt_fontmanager->factories.removeRef( (*mit).factory );
+ qt_fontmanager->factories.setAutoDelete( true );
+ (*mit).interface->release();
+ (*mit).library->unload();
+ delete (*mit).library;
+ }
+ factoryList->clear();
+
+ QString path = QPEApplication::qpeDir() + "/plugins/fontfactories";
+ QDir dir( path, "lib*.so" );
+ QStringList list = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = list.begin(); it != list.end(); ++it ) {
+ FontFactoryInterface *iface = 0;
+ QLibrary *lib = new QLibrary( path + "/" + *it );
+ if ( lib->queryInterface( IID_FontFactory, (QUnknownInterface**)&iface ) == QS_OK ) {
+ FontFactory factory;
+ factory.library = lib;
+ factory.interface = iface;
+ factory.factory = factory.interface->fontFactory();
+ factoryList->append( factory );
+ qt_fontmanager->factories.append( factory.factory );
+ readFonts( factory.factory );
+ } else {
+ delete lib;
+ }
+ }
+#endif
+}
+
+/*!
+ \internal
+*/
+void FontDatabase::readFonts( QFontFactory *factory )
+{
+
+ // Load in font definition file
+ QString fn = fontDir() + "fontdir";
+ FILE* fontdef=fopen(fn.local8Bit(),"r");
+ if(!fontdef) {
+ QCString temp=fn.local8Bit();
+ qWarning("Cannot find font definition file %s - is $QTDIR set correctly?",
+ temp.data());
+ return;
+ }
+ char buf[200]="";
+ char name[200]="";
+ char render[200]="";
+ char file[200]="";
+ char flags[200]="";
+ char isitalic[10]="";
+ fgets(buf,200,fontdef);
+ while(!feof(fontdef)) {
+ if ( buf[0] != '#' ) {
+ int weight=50;
+ int size=0;
+ flags[0]=0;
+ sscanf(buf,"%s %s %s %s %d %d %s",name,file,render,isitalic,&weight,&size,flags);
+ QString filename;
+ if ( file[0] != '/' )
+ filename = fontDir();
+ filename += file;
+ if ( QFile::exists(filename) ) {
+ if( factory->name() == render ) {
+ QDiskFont * qdf=new QDiskFont(factory,name,isitalic[0]=='y',
+ weight,size,flags,filename);
+ qt_fontmanager->diskfonts.append(qdf);
+#ifndef QT_NO_FONTDATABASE
+#if QT_VERSION >= 232
+ QFontDatabase::qwsAddDiskFont( qdf );
+#endif
+#endif
+ }
+ }
+ }
+ fgets(buf,200,fontdef);
+ }
+ fclose(fontdef);
+}
+
diff --git a/library/fontdatabase.h b/library/fontdatabase.h
new file mode 100644
index 0000000..9160ab0
--- a/dev/null
+++ b/library/fontdatabase.h
@@ -0,0 +1,62 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FONTFACTORY_H
+#define FONTFACTORY_H
+
+#include <qpe/fontfactoryinterface.h>
+
+#include <qfontdatabase.h>
+#include <qvaluelist.h>
+
+class QLibrary;
+
+struct FontFactory
+{
+#ifndef QT_NO_COMPONENT
+ QLibrary *library;
+#endif
+ FontFactoryInterface *interface;
+ QFontFactory *factory;
+};
+
+class FontDatabase
+#ifndef QT_NO_FONTDATABASE
+ : public QFontDatabase
+#endif
+{
+public:
+ FontDatabase();
+
+ // minimal functionality
+ QStringList families () const;
+#ifdef QT_NO_FONTDATABASE
+ static QValueList<int> standardSizes ();
+#endif
+
+ static void loadRenderers();
+
+private:
+ static void readFonts( QFontFactory *factory );
+
+private:
+ static QValueList<FontFactory> *factoryList;
+};
+
+#endif
diff --git a/library/fontfactoryinterface.h b/library/fontfactoryinterface.h
new file mode 100644
index 0000000..ed65dfa
--- a/dev/null
+++ b/library/fontfactoryinterface.h
@@ -0,0 +1,41 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FONTFACTORYINTERFACE_H
+#define FONTFACTORYINTERFACE_H
+
+#include <qnamespace.h>
+#include <qstring.h>
+#include <qpe/qcom.h>
+
+class QFontFactory;
+
+#ifndef QT_NO_COMPONENT
+// {7F194DD6-FAA3-498F-8F30-9C297A570DFA}
+#ifndef IID_FontFactory
+#define IID_FontFactory QUuid( 0x7f194dd6, 0xfaa3, 0x498f, 0x8f, 0x30, 0x9c, 0x29, 0x7a, 0x57, 0x0d, 0xfa)
+#endif
+#endif
+
+struct FontFactoryInterface : public QUnknownInterface
+{
+ virtual QFontFactory *fontFactory() = 0;
+};
+
+#endif
diff --git a/library/fontmanager.cpp b/library/fontmanager.cpp
new file mode 100644
index 0000000..adbe57b
--- a/dev/null
+++ b/library/fontmanager.cpp
@@ -0,0 +1,101 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "fontmanager.h"
+#include <qfile.h>
+#include <stdlib.h>
+#include <qgfx_qws.h>
+
+
+
+/*
+ QFontInfo doesn't work in QWS at the moment,
+ otherwise we would just have used that to check
+ the real values
+
+ For now, there are only two Unicode fonts in
+ the known universe...
+
+*/
+
+bool FontManager::hasUnicodeFont()
+{
+ QString fontDir = getenv("QTDIR") + QString("/lib/fonts/");
+
+ QString suffix;
+ if ( qt_screen->isTransformed() ) {
+ suffix += "_t";
+ QPoint a = qt_screen->mapToDevice(QPoint(0,0),QSize(2,2));
+ QPoint b = qt_screen->mapToDevice(QPoint(1,1),QSize(2,2));
+ suffix += QString::number( a.x()*8+a.y()*4+(1-b.x())*2+(1-b.y()) );
+ }
+ suffix += ".qpf";
+
+ return QFile::exists( fontDir+"cyberbit_120_50"+suffix )
+ || QFile::exists( fontDir+"unifont_160_50"+suffix ) ||
+ QFile::exists( fontDir+"arial_140_50" + suffix );
+}
+
+QFont FontManager::unicodeFont( Spacing sp )
+{
+ QString key;
+ QString fontName;
+ QString fontDir = getenv("QTDIR") + QString("/lib/fonts/");
+
+ int size;
+ if ( sp == Proportional ) {
+ fontName = "Arial";
+ size=14;
+ key = "arial_140_50";
+ } else {
+ fontName = "Unifont";
+ size=16;
+ key = "unifont_160_50";
+ }
+
+ QString suffix;
+ if ( qt_screen->isTransformed() ) {
+ suffix += "_t";
+ QPoint a = qt_screen->mapToDevice(QPoint(0,0),QSize(2,2));
+ QPoint b = qt_screen->mapToDevice(QPoint(1,1),QSize(2,2));
+ suffix += QString::number( a.x()*8+a.y()*4+(1-b.x())*2+(1-b.y()) );
+ }
+ suffix += ".qpf";
+
+ // if we cannot find it, try the other one
+
+ if ( !QFile::exists(fontDir+key+suffix) ) {
+ key = (sp == Fixed ) ? "arial_140_50" : "unifont_160_50";
+ if ( QFile::exists(fontDir+key+suffix) ) {
+ fontName = (sp == Fixed) ? "Arial" : "Unifont";
+ size = (sp == Fixed) ? 14 : 16;
+ } else {
+ key = "cyberbit_120_50";
+ if ( QFile::exists(fontDir+key+suffix) ) {
+ fontName = "Cyberbit";
+ size = 12;
+ } else {
+ fontName = "Helvetica";
+ size = 14;
+ }
+ }
+ }
+ return QFont(fontName,size);
+}
diff --git a/library/fontmanager.h b/library/fontmanager.h
new file mode 100644
index 0000000..7498df8
--- a/dev/null
+++ b/library/fontmanager.h
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef FONTMANAGER_H
+#define FONTMANAGER_H
+
+#include <qfont.h>
+
+class FontManager
+{
+public:
+ enum Spacing { Fixed, Proportional };
+ static bool hasUnicodeFont();
+ static QFont unicodeFont( Spacing );
+
+};
+
+
+#endif
diff --git a/library/global.cpp b/library/global.cpp
new file mode 100644
index 0000000..e1bbf3e
--- a/dev/null
+++ b/library/global.cpp
@@ -0,0 +1,644 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/qpedebug.h>
+#include <qpe/global.h>
+#include <qpe/qdawg.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/resource.h>
+#include <qpe/storage.h>
+#include <qpe/applnk.h>
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+#include "qpe/qcopenvelope_qws.h"
+#endif
+
+#include <qfile.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qmap.h>
+#include <qdict.h>
+#include <qdir.h>
+#include <qmessagebox.h>
+#include <qregexp.h>
+
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <qwindowsystem_qws.h> // for qwsServer
+#include <qdatetime.h>
+
+//#include "quickexec_p.h"
+
+class Emitter : public QObject {
+ Q_OBJECT
+public:
+ Emitter( QWidget* receiver, const QString& document )
+ {
+ connect(this, SIGNAL(setDocument(const QString&)),
+ receiver, SLOT(setDocument(const QString&)));
+ emit setDocument(document);
+ disconnect(this, SIGNAL(setDocument(const QString&)),
+ receiver, SLOT(setDocument(const QString&)));
+ }
+
+signals:
+ void setDocument(const QString&);
+};
+
+
+class StartingAppList : public QObject {
+ Q_OBJECT
+public:
+ static void add( const QString& name );
+ static bool isStarting( const QString name );
+private slots:
+ void handleNewChannel( const QString &);
+private:
+ StartingAppList( QObject *parent=0, const char* name=0 ) ;
+
+ QDict<QTime> dict;
+ static StartingAppList *appl;
+};
+
+StartingAppList* StartingAppList::appl = 0;
+
+StartingAppList::StartingAppList( QObject *parent, const char* name )
+ :QObject( parent, name )
+{
+#if QT_VERSION >= 232 && !defined(QT_NO_COP)
+ connect( qwsServer, SIGNAL( newChannel(const QString&)),
+ this, SLOT( handleNewChannel(const QString&)) );
+ dict.setAutoDelete( TRUE );
+#endif
+}
+
+void StartingAppList::add( const QString& name )
+{
+#if QT_VERSION >= 232 && !defined(QT_NO_COP)
+ if ( !appl )
+ appl = new StartingAppList;
+ QTime *t = new QTime;
+ t->start();
+ appl->dict.insert( "QPE/Application/" + name, t );
+#endif
+}
+
+bool StartingAppList::isStarting( const QString name )
+{
+#if QT_VERSION >= 232 && !defined(QT_NO_COP)
+ if ( appl ) {
+ QTime *t = appl->dict.find( "QPE/Application/" + name );
+ if ( !t )
+ return FALSE;
+ if ( t->elapsed() > 10000 ) {
+ // timeout in case of crash or something
+ appl->dict.remove( "QPE/Application/" + name );
+ return FALSE;
+ }
+ return TRUE;
+ }
+#endif
+ return FALSE;
+}
+
+void StartingAppList::handleNewChannel( const QString & name )
+{
+#if QT_VERSION >= 232 && !defined(QT_NO_COP)
+ dict.remove( name );
+#endif
+}
+
+static bool docDirCreated = FALSE;
+static QDawg* fixed_dawg = 0;
+static QDict<QDawg> *named_dawg = 0;
+
+static QString qpeDir()
+{
+ QString dir = getenv("QPEDIR");
+ if ( dir.isEmpty() ) dir = "..";
+ return dir;
+}
+
+static QString dictDir()
+{
+ return qpeDir() + "/etc/dict";
+}
+
+/*!
+ \class Global global.h
+ \brief The Global class collects application-wide global functions.
+*/
+
+/*!
+ \internal
+*/
+Global::Global()
+{
+}
+
+/*!
+ Returns the unchangeable QDawg that contains general
+ words for the current locale.
+
+ \sa addedDawg()
+*/
+const QDawg& Global::fixedDawg()
+{
+ if ( !fixed_dawg ) {
+ if ( !docDirCreated )
+ createDocDir();
+
+ fixed_dawg = new QDawg;
+ QString dawgfilename = dictDir() + "/dawg";
+ QString lang = getenv( "LANG" );
+ QString dawgfilename_lang = dawgfilename + "." + lang;
+ QString words_lang = dictDir() + "/words." + lang;
+ if ( QFile::exists(dawgfilename_lang) ||
+ QFile::exists(words_lang) )
+ dawgfilename = dawgfilename_lang;
+ QFile dawgfile(dawgfilename);
+
+ if ( !dawgfile.exists() ) {
+ QString fn = dictDir() + "/words";
+ if ( QFile::exists(words_lang) )
+ fn = words_lang;
+ QFile in(fn);
+ if ( in.open(IO_ReadOnly) ) {
+ fixed_dawg->createFromWords(&in);
+ dawgfile.open(IO_WriteOnly);
+ fixed_dawg->write(&dawgfile);
+ dawgfile.close();
+ }
+ } else {
+ fixed_dawg->readFile(dawgfilename);
+ }
+ }
+
+ return *fixed_dawg;
+}
+
+/*!
+ Returns the changeable QDawg that contains general
+ words for the current locale.
+
+ \sa fixedDawg()
+*/
+const QDawg& Global::addedDawg()
+{
+ return dawg("local");
+}
+
+/*!
+ Returns the QDawg with the given \a name.
+ This is an application-specific word list.
+
+ \a name should not contain "/".
+*/
+const QDawg& Global::dawg(const QString& name)
+{
+ createDocDir();
+ if ( !named_dawg )
+ named_dawg = new QDict<QDawg>;
+ QDawg* r = named_dawg->find(name);
+ if ( !r ) {
+ r = new QDawg;
+ named_dawg->insert(name,r);
+ QString dawgfilename = dictDir() + "/" + name + ".dawg";
+ QFile dawgfile(dawgfilename);
+ if ( dawgfile.open(IO_ReadOnly) )
+ r->readFile(dawgfilename);
+ }
+ return *r;
+}
+
+/*!
+ Adds \a wordlist to the addedDawg().
+*/
+void Global::addWords(const QStringList& wordlist)
+{
+ addWords("local",wordlist);
+}
+
+/*!
+ Adds \a wordlist to the dawg() named \a dictname.
+*/
+void Global::addWords(const QString& dictname, const QStringList& wordlist)
+{
+ QDawg& d = (QDawg&)dawg(dictname);
+ QStringList all = d.allWords() + wordlist;
+ d.createFromWords(all);
+
+ QString dawgfilename = dictDir() + "/" + dictname + ".dawg";
+ QFile dawgfile(dawgfilename);
+ if ( dawgfile.open(IO_WriteOnly) ) {
+ d.write(&dawgfile);
+ dawgfile.close();
+ }
+
+ // #### Re-read the dawg here if we use mmap().
+
+ // #### Signal other processes to re-read.
+}
+
+
+/*!
+ Returns a full path for the application named \a appname, with the
+ given \a filename or QString::null if there was a problem creating
+ the directory tree for \a appname.
+ If \a filename contains "/", it is the caller's responsibility to
+ ensure those directories exist.
+*/
+QString Global::applicationFileName(const QString& appname, const QString& filename)
+{
+ QDir d;
+ QString r = getenv("HOME");
+ r += "/Applications/";
+ if ( !QFile::exists( r ) )
+ if ( d.mkdir(r) == false )
+ return QString::null;
+ r += appname;
+ if ( !QFile::exists( r ) )
+ if ( d.mkdir(r) == false )
+ return QString::null;
+ r += "/"; r += filename;
+ return r;
+}
+
+/*!
+ \internal
+*/
+void Global::createDocDir()
+{
+ if ( !docDirCreated ) {
+ docDirCreated = TRUE;
+ mkdir( QPEApplication::documentDir().latin1(), 0755 );
+ }
+}
+
+
+/*!
+ Displays a status \a message to the user. This generally appears
+ in the taskbar for some amount of time, then disappears.
+*/
+void Global::statusMessage(const QString& message)
+{
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopEnvelope e( "QPE/TaskBar", "message(QString)" );
+ e << message;
+#endif
+}
+
+/*!
+ \internal
+*/
+void Global::applyStyle()
+{
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopChannel::send( "QPE/System", "applyStyle()" );
+#else
+ ((QPEApplication *)qApp)->applyStyle(); // apply without needing QCop for floppy version
+#endif
+}
+
+/*!
+ \internal
+*/
+QWidget *Global::shutdown( bool )
+{
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopChannel::send( "QPE/System", "shutdown()" );
+#endif
+ return 0;
+}
+
+/*!
+ \internal
+*/
+QWidget *Global::restart( bool )
+{
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopChannel::send( "QPE/System", "restart()" );
+#endif
+ return 0;
+}
+
+/*!
+ Explicitly show the current input method.
+*/
+void Global::showInputMethod()
+{
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopChannel::send( "QPE/TaskBar", "showInputMethod()" );
+#endif
+}
+
+/*!
+ Explicitly hide the current input method.
+*/
+void Global::hideInputMethod()
+{
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopChannel::send( "QPE/TaskBar", "hideInputMethod()" );
+#endif
+}
+
+
+/*!
+ \internal
+*/
+bool Global::isBuiltinCommand( const QString &name )
+{
+ if(!builtin)
+ return FALSE; // yes, it can happen
+ for (int i = 0; builtin[i].file; i++) {
+ if ( builtin[i].file == name ) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+Global::Command* Global::builtin=0;
+QGuardedPtr<QWidget> *Global::running=0;
+
+/*!
+ \class Global::Command
+ \brief The Global::Command class is internal.
+ \internal
+*/
+
+/*!
+ \internal
+*/
+void Global::setBuiltinCommands( Command* list )
+{
+ if ( running )
+ delete [] running;
+
+ builtin = list;
+ int count = 0;
+ if (!builtin)
+ return;
+ while ( builtin[count].file )
+ count++;
+
+ running = new QGuardedPtr<QWidget> [ count ];
+}
+
+/*!
+ \internal
+*/
+void Global::setDocument( QWidget* receiver, const QString& document )
+{
+ Emitter emitter(receiver,document);
+}
+
+/*!
+ \internal
+*/
+bool Global::terminateBuiltin( const QString& n )
+{
+ if (!builtin)
+ return FALSE;
+ for (int i = 0; builtin[i].file; i++) {
+ if ( builtin[i].file == n ) {
+ delete running[i];
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/*!
+ \internal
+*/
+void Global::terminate( const AppLnk* app )
+{
+ //if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this
+
+ QCString channel = "QPE/Application/" + app->exec().utf8();
+ if ( QCopChannel::isRegistered(channel) ) {
+ QCopEnvelope e(channel, "quit()");
+ }
+}
+
+/*!
+ Low-level function to run command \a c. Not recommended.
+*/
+void Global::invoke(const QString &c)
+{
+ // Convert the command line in to a list of arguments
+ QStringList list = QStringList::split(QRegExp(" *"),c);
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QString ap=list[0];
+ // see if the application is already running
+ // XXX should lock file /tmp/qcop-msg-ap
+ if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) {
+ QCopEnvelope e("QPE/System", "notBusy(QString)" );
+ e << ap;
+ return;
+ }
+ // XXX should unlock file /tmp/qcop-msg-ap
+ //see if it is being started
+ if ( StartingAppList::isStarting( ap ) ) {
+ QCopEnvelope e("QPE/System", "notBusy(QString)" );
+ e << ap;
+ return;
+ }
+
+#endif
+
+#ifdef QT_NO_QWS_MULTIPROCESS
+ QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 );
+#else
+
+ QStrList slist;
+ unsigned int j;
+ for ( j = 0; j < list.count(); j++ )
+ slist.append( list[j].utf8() );
+
+ const char **args = new (const char *)[slist.count() + 1];
+ for ( j = 0; j < slist.count(); j++ )
+ args[j] = slist.at(j);
+ args[j] = NULL;
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ // an attempt to show a wait...
+ // more logic should be used, but this will be fine for the moment...
+ QCopEnvelope ( "QPE/System", "busy()" );
+#endif
+
+#ifdef HAVE_QUICKEXEC
+ QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so";
+ qDebug("libfile = %s", libexe.latin1() );
+ if ( QFile::exists( libexe ) ) {
+ qDebug("calling quickexec %s", libexe.latin1() );
+ quickexecv( libexe.utf8().data(), (const char **)args );
+ } else
+#endif
+ {
+ if ( !::vfork() ) {
+ for ( int fd = 3; fd < 100; fd++ )
+ ::close( fd );
+ ::setpgid( ::getpid(), ::getppid() );
+ // Try bindir first, so that foo/bar works too
+ ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args );
+ ::execvp( args[0], (char * const *)args );
+ exit( -1 );
+ }
+ }
+ StartingAppList::add( list[0] );
+#endif //QT_NO_QWS_MULTIPROCESS
+}
+
+/*!
+ Executes application identfied by \a c, passing \a document.
+
+ Note that you might be better off sending a QCop message to
+ the application's QPE/Application/<i>appname</i> channel.
+*/
+void Global::execute( const QString &c, const QString& document )
+{
+ if ( qApp->type() != QApplication::GuiServer ) {
+ // ask the server to do the work
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ if ( document.isNull() ) {
+ QCopEnvelope e( "QPE/System", "execute(QString)" );
+ e << c;
+ } else {
+ QCopEnvelope e( "QPE/System", "execute(QString,QString)" );
+ e << c << document;
+ }
+#endif
+ return;
+ }
+
+ // Attempt to execute the app using a builtin class for the app first
+ // else try and find it in the bin directory
+ if (builtin) {
+ for (int i = 0; builtin[i].file; i++) {
+ if ( builtin[i].file == c ) {
+ if ( running[i] ) {
+ if ( !document.isNull() && builtin[i].documentary )
+ setDocument(running[i], document);
+ running[i]->raise();
+ running[i]->show();
+ running[i]->setActiveWindow();
+ } else {
+ running[i] = builtin[i].func( builtin[i].maximized );
+ }
+ QCopEnvelope e("QPE/System", "notBusy(QString)" );
+ e << c; // that was quick ;-)
+ return;
+ }
+ }
+ }
+
+ //Global::invoke(c, document);
+
+ // Convert the command line in to a list of arguments
+ QStringList list = QStringList::split(QRegExp(" *"),c);
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QString ap=list[0];
+
+ qDebug("executing %s", ap.latin1() );
+ if ( ap == "suspend" ) {
+ QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
+ return;
+ }
+
+ /* if need be, sending a qcop message will result in an invoke, see
+ preceeding function */
+ { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); }
+ if ( !document.isEmpty() ) {
+ QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "setDocument(QString)" );
+ env << document;
+ }
+#endif
+}
+
+/*!
+ Returns the string \a s with the characters backslash, ", and $
+ quoted by a preceeding backslash.
+*/
+QString Global::shellQuote(const QString& s)
+{
+ QString r="\"";
+ for (int i=0; i<(int)s.length(); i++) {
+ char c = s[i].latin1();
+ switch (c) {
+ case '\\': case '"': case '$':
+ r+="\\";
+ }
+ r += s[i];
+ }
+ r += "\"";
+ return r;
+}
+
+/*!
+ Returns the string \a s with the characters backslash and "
+ quoted by a preceeding backslash.
+*/
+QString Global::stringQuote(const QString& s)
+{
+ QString r="\"";
+ for (int i=0; i<(int)s.length(); i++) {
+ char c = s[i].latin1();
+ switch (c) {
+ case '\\': case '"':
+ r+="\\";
+ }
+ r += s[i];
+ }
+ r += "\"";
+ return r;
+}
+
+/*!
+ Finds all documents on the system's document directories which
+ match the filter \a mimefilter, and appends the resulting DocLnk
+ objects to \a folder.
+*/
+void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter)
+{
+ QString homedocs = QString(getenv("HOME")) + "/Documents";
+ DocLnkSet d(homedocs,mimefilter);
+ folder->appendFrom(d);
+ StorageInfo storage;
+ const QList<FileSystem> &fs = storage.fileSystems();
+ QListIterator<FileSystem> it ( fs );
+ for ( ; it.current(); ++it ) {
+ if ( (*it)->isRemovable() ) {
+ QString path = (*it)->path();
+ DocLnkSet ide( path, mimefilter );
+ folder->appendFrom(ide);
+ }
+ }
+}
+
+
+
+#include "global.moc"
diff --git a/library/global.h b/library/global.h
new file mode 100644
index 0000000..d9ff8f8
--- a/dev/null
+++ b/library/global.h
@@ -0,0 +1,85 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef GLOBAL_H
+#define GLOBAL_H
+
+#include <qstringlist.h>
+#include <qguardedptr.h>
+class QDawg;
+class QLabel;
+class QWidget;
+class AppLnk;
+class DocLnkSet;
+
+class Global
+{
+public:
+ Global();
+
+ // Dictionaries
+ static const QDawg& fixedDawg();
+ static const QDawg& addedDawg();
+ static const QDawg& dawg(const QString& name);
+
+ static void addWords(const QStringList& word);
+ static void addWords(const QString& dictname, const QStringList& word);
+ // static void removeWords(const QStringList& word); -- if someone wants it
+
+ static void createDocDir();
+
+ static void findDocuments(DocLnkSet* folder, const QString &mimefilter=QString::null);
+
+ static QString applicationFileName(const QString& appname, const QString& filename);
+
+ struct Command {
+ const char *file;
+ QWidget *(*func)( bool );
+ bool maximized;
+ bool documentary;
+ };
+ static void setBuiltinCommands( Command* );
+
+ static void invoke( const QString &exec);
+ static void execute( const QString &exec, const QString &document=QString::null );
+ static void setDocument( QWidget* receiver, const QString& document );
+ static bool terminateBuiltin( const QString& );
+ static void terminate( const AppLnk* );
+
+ static bool isBuiltinCommand( const QString &name );
+
+ // system messaging
+ static void applyStyle();
+ static void statusMessage(const QString&);
+ static QWidget *shutdown( bool = FALSE );
+ static QWidget *restart( bool = FALSE );
+ static void hideInputMethod();
+ static void showInputMethod();
+
+ static void writeHWClock();
+
+ static QString shellQuote(const QString& s);
+ static QString stringQuote(const QString& s);
+
+private:
+ static Command* builtin;
+ static QGuardedPtr<QWidget> *running;
+};
+
+#endif
diff --git a/library/imageedit.cpp b/library/imageedit.cpp
new file mode 100644
index 0000000..7f98ebb
--- a/dev/null
+++ b/library/imageedit.cpp
@@ -0,0 +1,97 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "imageedit.h"
+#include <qpainter.h>
+
+ImageEdit::ImageEdit( QWidget *parent = 0, const char *name = 0 )
+ : QScrollView( parent, name, WNorthWestGravity | WResizeNoErase ), buffer()
+{
+ buffer.resize( size() );
+ buffer.fill( colorGroup().color( QColorGroup::Base ) );
+}
+
+ImageEdit::~ImageEdit()
+{
+
+}
+
+void ImageEdit::contentsMousePressEvent( QMouseEvent *e )
+{
+ lastPos = e->pos();
+}
+
+void ImageEdit::contentsMouseMoveEvent( QMouseEvent *e )
+{
+ QPainter pw( viewport() );
+ QPainter pb( &buffer );
+ pb.drawLine( lastPos, e->pos() );
+ pw.drawLine( contentsToViewport( lastPos ),
+ contentsToViewport( e->pos() ) );
+ lastPos = e->pos();
+}
+
+void ImageEdit::contentsMouseReleaseEvent( QMouseEvent * )
+{
+}
+
+void ImageEdit::viewportResizeEvent( QResizeEvent *e )
+{
+ enlargeBuffer(e->size());
+}
+
+void ImageEdit::enlargeBuffer( const QSize& sz )
+{
+ QSize osz = buffer.size();
+ QSize nsz( QMAX( osz.width(), sz.width() ), QMAX( osz.height(), sz.height() ) );
+ buffer.resize( nsz.width(), nsz.height() );
+ // clear new area
+ QPainter p( &buffer );
+ if ( sz.width() > osz.width() )
+ p.fillRect( osz.width(), 0, sz.width() - osz.width(), nsz.height(), colorGroup().color( QColorGroup::Base ) );
+ if ( sz.height() > osz.height() )
+ p.fillRect( 0, osz.height(), nsz.width(), sz.height() - osz.height(), colorGroup().color( QColorGroup::Base ) );
+ p.end();
+}
+
+void ImageEdit::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+{
+ p->drawPixmap( cx, cy, buffer, cx, cy, cw, ch );
+}
+
+void ImageEdit::setPixmap( const QPixmap &pm )
+{
+ QSize osz = buffer.size();
+ if ( pm.width() < osz.width() || pm.height() < osz.height() ) {
+ buffer.fill(white);
+ enlargeBuffer( pm.size() );
+ QPainter p(&buffer);
+ p.drawPixmap(0,0,pm);
+ } else {
+ buffer = pm;
+ }
+ resizeContents( buffer.width(), buffer.height() );
+ viewport()->repaint( FALSE );
+}
+
+QPixmap ImageEdit::pixmap() const
+{
+ return buffer;
+}
+
diff --git a/library/imageedit.h b/library/imageedit.h
new file mode 100644
index 0000000..ccedbcd
--- a/dev/null
+++ b/library/imageedit.h
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef IMAGEEDIT_H
+#define IMAGEEDIT_H
+
+#include <qscrollview.h>
+#include <qpixmap.h>
+
+class ImageEditPrivate;
+class ImageEdit : public QScrollView
+{
+ Q_OBJECT
+
+public:
+ ImageEdit( QWidget *parent = 0, const char *name = 0 );
+ ~ImageEdit();
+
+ void setPixmap( const QPixmap &pm );
+ QPixmap pixmap() const;
+
+protected:
+ void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
+ void contentsMousePressEvent( QMouseEvent *e );
+ void contentsMouseMoveEvent( QMouseEvent *e );
+ void contentsMouseReleaseEvent( QMouseEvent *e );
+ void viewportResizeEvent( QResizeEvent *e );
+
+private:
+ QPoint lastPos;
+ QPixmap buffer;
+ ImageEditPrivate *d;
+ void enlargeBuffer( const QSize& sz );
+};
+
+#endif
diff --git a/library/inlinepics_p.h b/library/inlinepics_p.h
new file mode 100644
index 0000000..1e242d2
--- a/dev/null
+++ b/library/inlinepics_p.h
@@ -0,0 +1,5586 @@
+/* Generated by qembed */
+#ifndef _2110060599
+#define _2110060599
+#include <qimage.h>
+#include <stdlib.h>
+static const QRgb _to1_data[] = {
+ 0x2000000,0x5000000,0x9000000,0xd000000,0x11000000,0x12000000,0xe000000,0xc000000,0xc000000,0xc000000,0xd000000,0x11000000,0x12000000,0xe000000,
+ 0x6000000,0xf000000,0x1d000000,0x3a000000,0x4c000000,0x39000000,0x21000000,0x1c000000,0x1c000000,0x22000000,0x3a000000,0x4c000000,0x39000000,0x1f000000,
+ 0x10000000,0x25000000,0x51000000,0xb46b6b6b,0xffffffff,0x76000000,0x42000000,0x3b000000,0x3e000000,0x5b000000,0xb46b6b6b,0xffffffff,0x72000000,0x38000000,
+ 0x1e000000,0x54000000,0xbc676767,0xffffffff,0xffffffff,0xa6000000,0x6d000000,0x65000000,0x7a000000,0xc4646464,0xffffffff,0xffffffff,0x9d000000,0x57000000,
+ 0x45000000,0xb56b6b6b,0xffffffff,0xffffffff,0xffffffff,0xcf000000,0xaa000000,0xa3000000,0xce606060,0xffffffff,0xffffffff,0xffffffff,0xb8000000,0x74000000,
+ 0x88878787,0xffffffff,0xf4a7a7a7,0xffffffff,0xffffffff,0xf2535353,0xffffffff,0xdc5b5b5b,0xffffffff,0xf7a5a5a5,0xffffffff,0xffffffff,0xcd000000,0x8a000000,
+ 0x48000000,0x84000000,0xc6000000,0xffffffff,0xffffffff,0xfa515151,0xf9cfcfcf,0xd5000000,0xcd000000,0xdd000000,0xffffffff,0xffffffff,0xd9000000,0x97000000,
+ 0x2c000000,0x5e000000,0xb1000000,0xffffffff,0xffffffff,0xf8000000,0xdc000000,0xcc000000,0xc3000000,0xd3000000,0xffffffff,0xffffffff,0xdb000000,0x9a000000,
+ 0x25000000,0x53000000,0xa7000000,0xffffffff,0xffffffff,0xf0000000,0xd2000000,0xc2000000,0xb6000000,0xc8000000,0xffffffff,0xffffffff,0xd3000000,0x92000000,
+ 0x1d000000,0x44000000,0x99000000,0xffffffff,0xffffffff,0xf1545454,0xf5d1d1d1,0xbc000000,0xa3000000,0xba000000,0xffffffff,0xffffffff,0xc4000000,0x83000000,
+ 0x14000000,0x34000000,0x7d000000,0xffffffff,0xffffffff,0xe5585858,0xffffffff,0xab000000,0x8c000000,0x9e000000,0xffffffff,0xffffffff,0xa8000000,0x6e000000,
+ 0xc000000,0x25000000,0x4d000000,0x84000000,0xa0000000,0xa2000000,0x92000000,0x7f000000,0x6c000000,0x6f000000,0x88000000,0x94000000,0x79000000,0x56000000,
+ 0x8000000,0x18000000,0x2a000000,0x41000000,0x58000000,0x5e000000,0x55000000,0x50000000,0x4a000000,0x43000000,0x45000000,0x4e000000,0x49000000,0x39000000,
+ 0x5000000,0xf000000,0x19000000,0x28000000,0x36000000,0x3b000000,0x36000000,0x34000000,0x2f000000,0x2a000000,0x2b000000,0x30000000,0x2c000000,0x22000000
+};
+
+static const QRgb AddressBook_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff040437,0xff040437,0xff040437,0xff040434,
+ 0xff04042f,0xff030327,0xff05043c,0xff070565,0xff0a068a,0xff0a068a,0xff080574,0xff07055c,0xff06044c,0xff06044b,0xff05044a,0xff080569,0xff090682,0xff0a068a,
+ 0xff0a068a,0xff080567,0xff03032c,0xff01030b,0xff010309,0xff010307,0xff010303,0xff010300,0xff010300,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff040437,0xff70b365,0xff67a75d,0xff58904e,0xff678f61,0xffc8d4c6,0xffffffff,0xffffffff,0xffa3b8a0,0xff5b8854,0xff4a8342,0xff4c8a42,0xff4a8b3f,0xff46893b,
+ 0xff408434,0xff387c2d,0xff2c6e22,0xff789b72,0xffeff3ef,0xffffffff,0xffffffff,0xff7fa07a,0xff166c09,0xff157e04,0xff148400,0xff138100,0xff010300,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff040436,0xff65a45b,0xff518849,0xff94ad91,0xffffffff,0xffffffff,0xffc8d3c6,0xff5b8754,0xff548d4b,0xff5d9d53,
+ 0xff60a454,0xff5da551,0xff57a24a,0xff509f43,0xff4b9d3d,0xff429735,0xff378c29,0xff2a781d,0xff2a6720,0xffd1dad0,0xffffffff,0xffffffff,0xff6c9466,0xff0f6a00,
+ 0xff127a00,0xff127c00,0xff010300,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff040431,0xff4f8547,0xffaebfac,0xffffffff,0xffffffff,0xffaebfab,
+ 0xff4c8244,0xff5e9b54,0xff67a95c,0xff68ae5d,0xff63a957,0xff59a24d,0xff529c45,0xff4a963d,0xff469738,0xff3e942f,0xff368f27,0xff2a841c,0xff1f7111,0xff3f7337,
+ 0xffffffff,0xffffffff,0xffeef2ee,0xff2a6a20,0xff0f6d00,0xff117600,0xff010300,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff030326,0xffadbfab,
+ 0xffffffff,0xffffffff,0xff92aa8e,0xff4f8647,0xff62a158,0xff6bae60,0xff69ae5e,0xff61a556,0xff539548,0xff47873d,0xff548b4c,0xff6b9964,0xff327627,0xff2d7722,
+ 0xff26731a,0xff206f13,0xff1a6b0d,0xff125d06,0xff9cb199,0xffffffff,0xffffffff,0xff8da889,0xff0e6100,0xff106f00,0xff010300,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff07045d,0xffffffff,0xffffffff,0xffacbdaa,0xff4e8546,0xff63a359,0xff6db061,0xff69ad5e,0xff5e9f54,0xff4b8542,0xff88a883,0xffe4ebe3,
+ 0xffffffff,0xffffffff,0xffd3dcd2,0xff819b7e,0xffffffff,0xffffffff,0xffbed1bb,0xff0f5e02,0xff5b8455,0xffffffff,0xffffffff,0xffdfe5de,0xff0c5700,0xff0f6900,
+ 0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffe3e8e3,0xff53834b,0xff609f56,0xff6cb061,0xff6aae5f,0xff5b9b52,
+ 0xff52854a,0xffc8d4c6,0xffffffff,0xff8da98a,0xff396d32,0xff86a082,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff6c9566,0xff0e6200,0xff1a5b10,0xffffffff,
+ 0xffffffff,0xffffffff,0xff0a4e00,0xff0e6200,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xff6f926a,0xff599550,
+ 0xff69ac5e,0xff69ad5d,0xff5b9c52,0xff4f8248,0xffd6dfd5,0xffffffff,0xff9eb49a,0xff3a7831,0xff397d2e,0xff255e1c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xff1b6210,0xff0f6a00,0xff0c5600,0xffffffff,0xffffffff,0xffffffff,0xff4b7744,0xff0d5b00,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0a068a,0xffc5d0c4,0xff4d8344,0xff64a55a,0xff69ad5d,0xff5d9e53,0xff518449,0xffd6ded5,0xffffffff,0xffe3e8e2,0xff457d3d,0xff448d38,0xff3c8730,0xff407538,
+ 0xffffffff,0xffffffff,0xffffffff,0xff9cb399,0xff0d6300,0xff106d00,0xff0c5700,0xffffffff,0xffffffff,0xffffffff,0xff4a7444,0xff0d5700,0xff010200,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xff7a9a76,0xff58964e,0xff66ab5b,0xff5fa355,0xff48823f,0xffb8c7b6,0xffffffff,0xffffffff,0xff819f7d,
+ 0xff438738,0xff449437,0xff368029,0xff769871,0xffffffff,0xffffffff,0xffffffff,0xff5c8855,0xff0f6800,0xff0f6a00,0xff0b5200,0xffffffff,0xffffffff,0xffffffff,
+ 0xff376530,0xff0c5400,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff090682,0xff447b3c,0xff5da051,0xff60a655,0xff4f8f44,0xff90aa8c,
+ 0xffffffff,0xffffffff,0xfff0f3f0,0xff38752f,0xff459238,0xff3c8d2f,0xff286d1d,0xffbfccbd,0xffffffff,0xffffffff,0xffeef2ee,0xff0c5600,0xff0f6900,0xff0e6300,
+ 0xff376930,0xffffffff,0xffffffff,0xffffffff,0xff094400,0xff0c5300,0xff010200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff070562,0xff49853f,
+ 0xff5aa24f,0xff539948,0xff487f41,0xfff0f3f0,0xffffffff,0xffffffff,0xff9ab096,0xff3a802f,0xff3d8f2f,0xff2f7d23,0xff668e60,0xffffffff,0xffffffff,0xffffffff,
+ 0xff9cb199,0xff0d5c00,0xff0f6700,0xff0c5800,0xff698865,0xffffffff,0xffffffff,0xffacbaaa,0xff0a4600,0xff0c5200,0xff000200,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff05044a,0xff498a3f,0xff549c47,0xff478a3c,0xff8ca788,0xffffffff,0xffffffff,0xffffffff,0xff51804b,0xff38852b,0xff318324,0xff2e7025,
+ 0xffe0e6df,0xffffffff,0xffffffff,0xffffffff,0xff5b8455,0xff0d5f00,0xff0e6100,0xff0a4c00,0xffacb9aa,0xffffffff,0xffffffff,0xff496c44,0xff0b4900,0xff0c4f00,
+ 0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040334,0xff478b3c,0xff4a943e,0xff38772e,0xfff0f3ef,0xffffffff,0xffffffff,0xffffffff,
+ 0xff296a1f,0xff2f7f23,0xff236e17,0xffb0c3ad,0xffeef1ee,0xffffffff,0xffffffff,0xffffffff,0xff0a4e00,0xff0d5d00,0xff0c5500,0xff275620,0xffffffff,0xffffffff,
+ 0xffbbc6ba,0xff083e00,0xff0b4b00,0xff0c4d00,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040333,0xff428836,0xff418a34,0xff648e5d,
+ 0xffffffff,0xffffffff,0xffffffff,0xffbfcabe,0xff216217,0xff216a15,0xff729a6c,0xffd0dacf,0xff9aa899,0xffffffff,0xffffffff,0xffbcc8ba,0xff0a4d00,0xff0c5400,
+ 0xff094600,0xff9bac99,0xffffffff,0xffeef1ee,0xff265120,0xff0a4600,0xff0b4b00,0xff0b4b00,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff040332,0xff3b8330,0xff37812b,0xff87a583,0xffffffff,0xffffffff,0xffffffff,0xffd0d8cf,0xff144d0c,0xff70976a,0xffeff3ee,0xff265420,0xffeef1ee,0xffffffff,
+ 0xffffffff,0xff8b9f89,0xff094300,0xff094300,0xff698465,0xffffffff,0xffeef1ee,0xff365a30,0xff0a4200,0xff0a4800,0xff0b4900,0xff0b4800,0xff000200,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040338,0xff347e28,0xff317f25,0xff86a681,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffd0dacf,0xffeff3ee,
+ 0xff397130,0xff285b20,0xffffffff,0xffffffff,0xffffffff,0xff8b9c89,0xff073600,0xff789175,0xffffffff,0xffbcc6ba,0xff265020,0xff094000,0xff0a4700,0xff0b4900,
+ 0xff0a4700,0xff0a4500,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff050445,0xff2b7620,0xff2d801f,0xff3c7b32,0xffeff3ef,0xffffffff,
+ 0xffffffff,0xffffffff,0xffbdceba,0xff1b6410,0xff0d5f00,0xff397130,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffacbbaa,0xff5a7855,0xff083b00,
+ 0xff094200,0xff0a4600,0xff0b4800,0xff0a4600,0xff0a4500,0xff0a4200,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080571,0xff226717,
+ 0xff287f19,0xff217913,0xff35772a,0xff7da278,0xff7ba076,0xff2a6e20,0xff0e6500,0xff106e00,0xff106c00,0xff0d5f00,0xff4b7a44,0xff799475,0xff799375,0xff496e44,
+ 0xff184910,0xff093f00,0xff094100,0xff0a4400,0xff0b4700,0xff0b4700,0xff0a4600,0xff0a4400,0xff0a4300,0xff0a4200,0xff000200,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff0a068a,0xff73966d,0xff1f7312,0xff208010,0xff197c09,0xff137403,0xff107000,0xff107300,0xff117600,0xff117600,0xff107200,0xff0f6800,
+ 0xff0d5c00,0xff0c5200,0xff0b4e00,0xff0b4b00,0xff0b4b00,0xff0b4a00,0xff0b4800,0xff0b4900,0xff0b4700,0xff0a4600,0xff0a4500,0xff0a4400,0xff0a4200,0xff0a4200,
+ 0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffe0e6df,0xff246519,0xff177408,0xff157e03,0xff137f00,0xff127d00,0xff127b00,
+ 0xff127b00,0xff117600,0xff107000,0xff106900,0xff0e6200,0xff0d5b00,0xff0c5600,0xff0c5100,0xff0c4f00,0xff0b4c00,0xff0b4a00,0xff0b4800,0xff0a4600,0xff0a4500,
+ 0xff0a4400,0xff0a4300,0xff0a4200,0xff0a4200,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffd0dacf,0xff1c6212,
+ 0xff0f6900,0xff117300,0xff127700,0xff117400,0xff107300,0xff106e00,0xff0f6900,0xff0e6300,0xff0d5d00,0xff0d5600,0xff0c5000,0xff0b4a00,0xff0a4800,0xff0b4800,
+ 0xff0b4800,0xff0a4600,0xff0a4500,0xff0a4400,0xff0a4300,0xff0a4200,0xff0a4200,0xff0a4200,0xff000200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0a068a,0xffffffff,0xffffffff,0xffeef2ee,0xff6a9065,0xff0b5500,0xff0d5d00,0xff0d6000,0xff0e5f00,0xff0d5c00,0xff0c5700,0xff0c5100,0xff0b4c00,0xff094500,
+ 0xff083e00,0xff6a8965,0xff184c10,0xff0a4400,0xff0a4500,0xff0a4500,0xff0a4400,0xff0a4300,0xff0a4300,0xff0a4200,0xff0a4200,0xff0a4200,0xff000200,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff030328,0xffdfe6de,0xffffffff,0xffffffff,0xffffffff,0xffdfe5de,0xff8ca589,0xff5a8055,0xff4a7444,0xff4a7344,
+ 0xff4a7144,0xff496e44,0xff799175,0xffacb9aa,0xffeef1ee,0xffeef1ee,0xff4a6f44,0xff094000,0xff0a4300,0xff0a4400,0xff0a4300,0xff0a4200,0xff0a4200,0xff0a4200,
+ 0xff0a4200,0xff0a4200,0xff000200,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff010303,0xff0d5f00,0xff6b9265,0xffacbeaa,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffcfd7ce,0xff788f75,0xff174410,0xff083d00,0xff094200,0xff0a4200,0xff0a4200,
+ 0xff0a4200,0xff0a4200,0xff0a4200,0xff0a4200,0xff0a4200,0xff0a4300,0xff000200,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff010300,0xff117500,
+ 0xff0e6700,0xff0d5c00,0xff0b5200,0xff376b30,0xff4b7444,0xff799475,0xff799375,0xff799275,0xff5a7955,0xff4a6e44,0xff083b00,0xff093d00,0xff093e00,0xff0a4000,
+ 0xff094200,0xff0a4100,0xff0a4200,0xff0a4200,0xff0a4200,0xff0a4200,0xff0a4200,0xff0a4200,0xff0a4300,0xff0a4400,0xff000200,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff010300,0xff010300,0xff010300,0xff010300,0xff010200,0xff010200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,
+ 0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,0xff000200,
+ 0xff000200,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Appearance_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x34000000,0x37000000,0x38000000,0x37000000,0x34000000,0x2f000000,0x29000000,0x21000000,0x19000000,0x12000000,0xb000000,0x6000000,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x5d494b73,0x93666a9d,0xbe777cb4,0xde8186c0,0xf3878dc9,0xfe888ecc,0xf37c82c4,0xe06d73b8,0xc4595ea4,0x9f404686,0x70222756,0x3f000000,0x33000000,0x26000000,
+ 0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x6f5c608b,0xba7f84b6,0xf5989dcf,0xff9b9fd3,0xff979cd2,0xff9297d0,0xff8e93cf,0xff888ecc,0xff8287ca,0xff7b82c8,0xff737ac5,0xff6b72c3,
+ 0xf76067bb,0xc6404797,0x881f2562,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x47414464,0xa77b7fb1,0xf59da1d2,0xff9fa4d5,0xff9ea3d5,0xff9b9fd3,0xff979cd2,0xff9297d0,0xff8e93cf,0xff868dcc,
+ 0xff8186ca,0xff787fc7,0xff7077c4,0xff666fc1,0xff5e67be,0xff5660bc,0xf84953b3,0xbc273185,0x6c090b35,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x5f575a83,0xc68a8fc0,0xffa3a7d7,0xffa1a5d6,0xffa0a4d5,0xff9ea3d5,0xff9b9fd3,
+ 0xff979cd2,0xff9297d0,0xff8c91ce,0xff868ccc,0xff7e85c9,0xff757cc6,0xff6d74c3,0xff646cc0,0xff5a63bd,0xff505aba,0xff4551b8,0xff3a47b5,0xd71e2d91,0x850a1048,
+ 0x46000000,0x2e000000,0x1b000000,0xe000000,0x6000000,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x5f575a83,0xd09094c5,0xffa4a8d7,0xffa3a7d7,
+ 0xffa1a5d6,0xffa0a4d5,0xff9ea3d5,0xff9b9fd3,0xff969bd1,0xff9096cf,0xff8b90cd,0xff8389ca,0xff7b82c8,0xff737ac5,0xff6770c1,0xff5d66be,0xff525dbb,0xff4753b8,
+ 0xff3c49b5,0xff2d40b2,0xff2b3eaf,0xe0202d92,0x8a0a0f43,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000,0x3000000,0xa000000,0x16000000,0x47414464,
+ 0xc68a8fc0,0xffa4a8d7,0xffa4a8d7,0xffa3a7d7,0xffa1a5d6,0xffa0a4d5,0xff9da1d4,0xff9a9ed3,0xff959ad1,0xff9095cf,0xff888ecc,0xff8186ca,0xff787fc7,0xff6e75c3,
+ 0xff646cc0,0xff5761bd,0xff4c56b9,0xff3e4cb6,0xff2f41b3,0xff2d3eb0,0xff2b3ead,0xff2b3caa,0xdb1a2886,0x7b050829,0x46000000,0x2a000000,0x16000000,0xa000000,
+ 0x6000000,0x11000000,0x23000000,0xa77b7fb1,0xffa3a7d7,0xffa3a7d7,0xffa3a7d7,0xffa3a7d7,0xffa0a4d5,0xff9fa4d4,0xff9ca0d3,0xff979bd1,0xff9297cf,0xff8d91cc,
+ 0xff848aca,0xff7c83c6,0xff7279c3,0xff6970bf,0xff5c65bc,0xff505ab9,0xff4350b5,0xff3445b3,0xff2d3eaf,0xff2b3ead,0xff2b3caa,0xff283aa8,0xff283aa4,0xc8131e6d,
+ 0x60000000,0x3e000000,0x23000000,0x11000000,0xb000000,0x1b000000,0x6f5c608b,0xf59da1d2,0xffa1a5d6,0xffa1a5d6,0xffa1a5d6,0xffa0a4d5,0xff9ea3d3,0xff9ba0d1,
+ 0xff989bcf,0xff9398cc,0xff868ac1,0xff666b98,0xff575a86,0xff505583,0xff494d7f,0xff41467d,0xff41478d,0xff4650b1,0xff3845af,0xff2b3ead,0xff2b3cab,0xff2b3ca8,
+ 0xff283aa5,0xff2838a4,0xff2638a0,0xf9253298,0xa20a0e42,0x55000000,0x33000000,0x1b000000,0x12000000,0x26000000,0xba7f84b6,0xff9fa4d5,0xffa0a4d5,0xffa0a4d5,
+ 0xffa0a4d4,0xff9ca1d1,0xff999dcf,0xff7d80ab,0xff4a4c65,0xff1e3446,0xff2f6079,0xff5584a2,0xff5383a3,0xff286a8e,0xff034d6e,0xff004969,0xff002b41,0xff000000,
+ 0xff06092b,0xff121e63,0xff202f8e,0xff2636a0,0xff26369f,0xff26369d,0xff26369b,0xff233499,0xd7141e6d,0x6c000000,0x45000000,0x26000000,0x19000000,0x5d494b73,
+ 0xf5989dcf,0xff9ea3d4,0xff9da2d4,0xff9ba0d2,0xff999dcf,0xff8a8ebb,0xff404157,0xff000000,0xff414c51,0xff4989b2,0xff80abc9,0xffacbdca,0xffacb4b9,0xff818d96,
+ 0xff345569,0xff00638c,0xff006f9e,0xff006794,0xff004967,0xff000000,0xff000000,0xff090934,0xff15206f,0xff233294,0xff203295,0xff233294,0xfa222d8c,0x9c040a2b,
+ 0x57000000,0x33000000,0x21000000,0x93666a9d,0xff9b9fd3,0xff9a9ed2,0xff989bcf,0xff9699cc,0xff74769f,0xff12121e,0xff8d8d8d,0xffe5e5e5,0xff8aaec8,0xff5091b9,
+ 0xff99abb9,0xffc9c9c9,0xffcacaca,0xff989898,0xff525252,0xff060606,0xff00618a,0xff006c99,0xff00648f,0xff8093a2,0xff848584,0xff000000,0xff000000,0xff060620,
+ 0xff121e67,0xff1e2d8a,0xff1e2d8b,0xc40d134c,0x69000000,0x41000000,0x29000000,0xbe757bb3,0xff969bd0,0xff9499ce,0xff9196c9,0xff5c5e80,0xff5e5e5e,0xffe0e0e0,
+ 0xfff3f3f3,0xfff8f8f8,0xff3282af,0xff418dba,0xff818486,0xffacacac,0xffacacac,0xff7f7f7f,0xff414141,0xff090909,0xff003a55,0xff006e9c,0xff006691,0xff3e7496,
+ 0xff909191,0xff8a8a89,0xff797878,0xff232323,0xff000000,0xff03061e,0xff152069,0xe010175e,0x7a000000,0x4d000000,0x30000000,0xdf7f85be,0xff8f94cb,0xff8b8fc6,
+ 0xff4c4d6a,0xff969696,0xffe4e4e4,0xffedeeed,0xfff4f5f5,0xfffafafa,0xff0677a9,0xff1e85b6,0xff494949,0xff636363,0xff626262,0xff474747,0xff1b1b1b,0xff030303,
+ 0xff001b2d,0xff006f9d,0xff006692,0xff2f7093,0xff8c8c8b,0xff7c7a7a,0xff6e6667,0xff644e50,0xff635051,0xff000000,0xff000000,0xfa080d39,0x89000000,0x58000000,
+ 0x36000000,0xf38388c5,0xff878cc6,0xff494c6a,0xffb3a7a8,0xffdbd1d1,0xffe4e3e3,0xffececec,0xfff3f3f3,0xfff8f8f8,0xff0076a8,0xff007cb1,0xff121212,0xff1e1e1e,
+ 0xff1e1e1e,0xff121212,0xff060606,0xff000000,0xff00324a,0xff006e9c,0xff006691,0xff2d6e91,0xff848484,0xff737272,0xff645657,0xff552f2f,0xff4a1212,0xff562628,
+ 0xff1b1b1b,0xff03030e,0x95000000,0x60000000,0x3a000000,0xfe8489c6,0xff474a6b,0xffb88081,0xffce8687,0xffd8b7b8,0xffe1dada,0xffe9e8e8,0xffefefef,0xfff3f3f3,
+ 0xff0073a4,0xff0079ad,0xff034966,0xff030303,0xff000000,0xff000000,0xff000000,0xff000000,0xff005c83,0xff006c99,0xff00648f,0xff286c8f,0xff797879,0xff6a6666,
+ 0xff5a4c4a,0xff4c2023,0xff400c0f,0xff400909,0xff383232,0xff000003,0x9c000000,0x67000000,0x3d000000,0xf4767cbb,0xffb87278,0xffc1494c,0xffca6061,0xffd39c9c,
+ 0xffdccfcf,0xffe3e1e1,0xffe8e8e8,0xffebecec,0xff729dbb,0xff0075a6,0xff0074a6,0xff004c6d,0xff000000,0xff000000,0xff000f18,0xff004d6e,0xff006f9d,0xff006794,
+ 0xff00628b,0xff53758c,0xff6e6e6e,0xff5d5b5b,0xff504646,0xff3e2020,0xff381212,0xff413240,0xff0c1250,0xfc0e1754,0x9e000000,0x68000000,0x3c000000,0xe2676dae,
+ 0xff9b85a2,0xffaa7a8b,0xffc76365,0xffce9999,0xffd6c8c8,0xffdcdbdb,0xffe1e1e1,0xffe4e4e4,0xffccd3d9,0xff1b76a2,0xff0073a4,0xff0076a8,0xff0076a8,0xff0076a8,
+ 0xff0073a4,0xff006f9d,0xff006a96,0xff00648e,0xff1b678d,0xff717171,0xff636363,0xff535353,0xff464343,0xff3e3234,0xff282846,0xff0c1553,0xff0f1b60,0xf5101558,
+ 0x9b000000,0x66000000,0x39000000,0xc854589b,0xff6a70b5,0xff6166a8,0xff696b9c,0xffaea3b0,0xffcfc8c8,0xffd2d1d1,0xffd4d4d4,0xffd4d5d4,0xffd3d3d3,0xff8da7ba,
+ 0xff15719d,0xff006e9c,0xff006f9d,0xff006e9c,0xff006c99,0xff006794,0xff00648e,0xff12658c,0xff657581,0xff6b6b6b,0xff5d5d5d,0xff515151,0xff3c3e49,0xff090f46,
+ 0xff0c1250,0xff0f185a,0xff121e63,0xe9091048,0x94000000,0x60000000,0x33000000,0xa43c437f,0xff646cb8,0xff5c63ad,0xff535aa0,0xff474e92,0xff555a8d,0xffa8a8b3,
+ 0xffc3c3c4,0xffc4c4c4,0xffc3c3c3,0xffbebebe,0xffa4aeb5,0xff5282a1,0xff006692,0xff006691,0xff00648f,0xff266586,0xff5e7585,0xff7a7b7d,0xff727272,0xff636364,
+ 0xff464651,0xff181e46,0xff0c1249,0xff0c1252,0xff0f185a,0xff121b61,0xff151e69,0xd6080b34,0x88000000,0x57000000,0x2c000000,0x741d224e,0xf85b62b3,0xff5861b2,
+ 0xff5058a8,0xff46509f,0xff3a4593,0xff2d3886,0xff202d7b,0xff777992,0xff95969e,0xffa0a0a3,0xffaaaaa9,0xffa3a3a3,0xff9e9d9e,0xff989899,0xff919191,0xff888989,
+ 0xff787979,0xff636369,0xff404355,0xff0c0f47,0xff0c124c,0xff0c1552,0xff0f1557,0xff12185c,0xff121b62,0xff151e66,0xfc141d66,0xb9010419,0x79000000,0x4c000000,
+ 0x23000000,0x42000000,0xc83d4593,0xff535cb5,0xff4c55af,0xff414da9,0xff3443a0,0xff283897,0xff202f8e,0xff1b2b83,0xff182679,0xff152070,0xff151e67,0xff121b61,
+ 0xff0f185b,0xff0c1556,0xff0c1553,0xff0c1551,0xff0c1551,0xff0c1552,0xff0f1553,0xff0f1556,0xff0f185a,0xff12185d,0xff121b61,0xff121e65,0xff121e69,0xff121e6c,
+ 0xe70e1047,0x96000000,0x69000000,0x40000000,0x19000000,0x34000000,0x891e2562,0xf84852b1,0xff4350b3,0xff3a46af,0xff2b3ea9,0xff2838a1,0xff23369b,0xff233292,
+ 0xff1e2d8a,0xff1e2883,0xff1b267b,0xff182375,0xff15206f,0xff151e6b,0xff121e66,0xff121b64,0xff121b62,0xff121b61,0xff121b61,0xff121b62,0xff121b64,0xff151e66,
+ 0xff121e69,0xff121e6a,0xff151e6c,0xfc141d69,0xc4050824,0x82000000,0x56000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbc273184,0xff3a47b5,0xff2d40b0,
+ 0xff2b3cac,0xff283ca7,0xff2838a1,0xff23349b,0xff233295,0xff202d8f,0xff1e2d88,0xff1b2b82,0xff18287c,0xff182377,0xff182373,0xff152370,0xff15206d,0xff121e6b,
+ 0xff15206b,0xff151e6a,0xff15206a,0xff121e6c,0xff151e6c,0xff15206d,0xff15206e,0xdf060f3f,0x94000000,0x6c000000,0x45000000,0x26000000,0xb000000,0x1b000000,
+ 0x33000000,0x6c090b35,0xd71e2d91,0xff2b3eaf,0xff2b3eac,0xff2b3ca8,0xff2838a4,0xff2636a0,0xff23369a,0xff233294,0xff202f8f,0xff1e2d89,0xff1e2b84,0xff1b287f,
+ 0xff1b267b,0xff182377,0xff182374,0xff152370,0xff152070,0xff18206e,0xff15206e,0xff15206e,0xff15206e,0xff15206f,0xed0c1350,0xae010310,0x7b000000,0x55000000,
+ 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x850a1048,0xe0202d92,0xff2b3caa,0xff283aa8,0xff2838a4,0xff2638a0,0xff26369b,0xff233496,
+ 0xff233291,0xff202d8d,0xff1e2b87,0xff1e2883,0xff1b287f,0xff1b287b,0xff182678,0xff182374,0xff182372,0xff152371,0xff15206f,0xff15206f,0xff15206f,0xf00f1655,
+ 0xbc03041c,0x85000000,0x60000000,0x3e000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a0a0f43,0xdb1a2886,0xff2838a4,
+ 0xff2638a0,0xff26369d,0xff23349a,0xff233296,0xff203291,0xff202f8d,0xff1e2d88,0xff1e2b84,0xff1b2880,0xff1b267c,0xff182678,0xff182375,0xff182372,0xff152071,
+ 0xff152070,0xff15206f,0xed0c1350,0xbc03041c,0x88000000,0x66000000,0x46000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000,
+ 0x2e000000,0x48000000,0x7b050829,0xc8131e6d,0xf9253298,0xff23349a,0xff233497,0xff203293,0xff202f8f,0xff1e2d8a,0xff1e2b86,0xff1b2b82,0xff1b287e,0xff18267b,
+ 0xff182677,0xff182374,0xff182372,0xff152071,0xfc141d6b,0xdf080f41,0xae010310,0x85000000,0x66000000,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa20a0e42,0xd7141e6e,0xfa222d8e,0xff202f90,0xff202f8d,0xff1e2d88,
+ 0xff1e2b85,0xff1b2881,0xff1b287d,0xff18267a,0xff182677,0xff182375,0xfc171f6d,0xe60e124b,0xc3050824,0x94000000,0x7b000000,0x60000000,0x46000000,0x2e000000,
+ 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000,
+ 0x9b06082c,0xc20b134d,0xde121b64,0xef182374,0xf91a267d,0xfe1b2881,0xfa1a2475,0xf2121c67,0xe50e1552,0xd1080d39,0xb503061b,0x93000000,0x81000000,0x6c000000,
+ 0x55000000,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000,
+ 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000,
+ 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb AppsIcon_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0x6c000000,0x5c000000,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000,
+ 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0x9c000000,0x6c000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x6b000000,0x24000000,
+ 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x74000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x74000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0x6c000000,0x9c000000,0xb4000000,0xb4000000,0x9c000000,0x6c000000,0x6c000000,0x9c000000,0xb4000000,0xb4000000,0x6b000000,0x24000000,
+ 0xffffff,0xffffff,0x5c000000,0x6c000000,0x74000000,0x74000000,0x6c000000,0x5c000000,0x5c000000,0x6c000000,0x74000000,0x74000000,0x24000000,0xc000000,
+ 0xffffff,0xffffff,0xff000000,0xffa7d400,0xffa7d400,0xffa7d400,0x6c000000,0x5c000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x24000000,0xc000000,
+ 0xffffff,0xffffff,0xff000000,0xffa7d400,0xffa7d400,0xffa7d400,0x9c000000,0x6c000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x6b000000,0x24000000,
+ 0xffffff,0xffffff,0xff000000,0xffa7d400,0xffa7d400,0xffa7d400,0xb4000000,0x74000000,0xffa7d400,0xffa7d400,0xffa7d400,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xb4000000,0x74000000,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x6b000000,0x24000000,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x6b000000,0x24000000,
+ 0xffffff,0xffffff,0xc000000,0x24000000,0x30000000,0x30000000,0x24000000,0xc000000,0xc000000,0x24000000,0x30000000,0x30000000,0x24000000,0xc000000
+};
+
+static const QRgb Calculator_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e040404,0x3f080808,0x3f080808,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f080808,
+ 0x3f080808,0x3e040404,0x3c040404,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff447420,0xff447421,0xff457521,0xff457521,
+ 0xff457521,0xff457521,0xff457521,0xff457521,0xff447421,0xff437220,0xff41711e,0xff3f6e1d,0xff3d6c1c,0xff3a6a1a,0xff376518,0xff356316,0xff315f14,0xff2d5b11,
+ 0xff2b570f,0xff29550e,0xff26520c,0xff234f0a,0xff1f4b07,0xff1c4805,0xff184303,0xff153f00,0xff133c00,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff447421,0xff7f9a69,0xff7f9a69,0xff809a6a,0xff809a6a,0xff809a6a,0xff7f9a69,0xff7f9a69,0xff7e9867,0xff7b9664,0xff799461,0xff74915b,0xff6f8d56,0xff6a8a51,
+ 0xff65844a,0xff608044,0xff597b3c,0xff527634,0xff4c712d,0xff476d27,0xff426921,0xff3b6419,0xff355f12,0xff2d5909,0xff285403,0xff265002,0xff133b00,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff457521,0xff7f9a69,0xff809a6a,0xff809a6a,0xff809a6a,0xff809a6a,0xff7f9a69,0xff7e9867,0xff7e9867,0xff7b9664,
+ 0xff77935f,0xff738f5a,0xff6e8c54,0xff68874e,0xff638448,0xff5e7f42,0xff577939,0xff507431,0xff4a702a,0xff446b24,0xff3f671e,0xff396216,0xff315c0d,0xff2c5608,
+ 0xff295306,0xff264f04,0xff133801,0x75020202,0x4f030303,0x2e000000,0x1b000000,0x36000000,0xff457521,0xff809a6a,0xff809a6a,0xff809a6a,0xff809a6a,0xff7f9969,
+ 0xff7f9969,0xff7e9767,0xff7e9767,0xff7b9664,0xff779360,0xff718d58,0xff6d8a54,0xff68854d,0xff628147,0xff5b7d3e,0xff557837,0xff4e722f,0xff486e28,0xff436a23,
+ 0xff3e661b,0xff376014,0xff325b0f,0xff2e570c,0xff2b5209,0xff284e07,0xff133801,0x88060606,0x5b030303,0x37050505,0x1d000000,0x3b000000,0xff7db049,0xffe1e1e1,
+ 0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,0xffdadada,
+ 0xffdadada,0xffdadada,0xffdadada,0xffd6d6d6,0xffb2b9ad,0xff5d7747,0xff345c14,0xff315711,0xff2d520e,0xff294c0a,0xff133602,0x95070707,0x63050505,0x3c040404,
+ 0x1f000000,0x3d000000,0xff7aab47,0xffd8d8d8,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,
+ 0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcecece,0xffcccccc,0xffb1b1b1,0xff666c61,0xff375a19,0xff345616,0xff2e5111,0xff2a4c0e,
+ 0xff143603,0x9b0a0a0a,0x68070707,0x3e040404,0x1f000000,0x3d000000,0xff76a645,0xffcecece,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,
+ 0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc2c2c2,0xffc1c1c1,0xffbfbfbf,0xff909090,0xff444543,
+ 0xff37561c,0xff345319,0xff2f4f15,0xff2b4a11,0xff163404,0x9c0d0d0d,0x690c0c0c,0x3f080808,0x1f000000,0x3d000000,0xff50712f,0xff6a6a6a,0xff616161,0xff626262,
+ 0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff626262,0xff737373,0xff9d9d9d,
+ 0xffbdbdbd,0xffbdbdbd,0xff848484,0xff363735,0xff324c1c,0xff324b1b,0xff2e4918,0xff2b4714,0xff163405,0x9d121212,0x6a0e0e0e,0x3f0c0c0c,0x1f000000,0x3d000000,
+ 0xff3d5524,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xffc2c2c2,0xffb8b8b8,0xff7d7d7d,0xff30342d,0xff293d18,0xff2a3e19,0xff2a4118,0xff294115,0xff163106,0x9e151515,
+ 0x6b131313,0x40101010,0x1f000000,0x3d000000,0xff3b5323,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff73716b,0xffe5e1d5,0xff000000,0xff73716b,0xffe5e1d5,0xff73716b,0xff000000,0xffc2c2c2,0xffb7b7b7,0xff7a7a7a,0xff2e312b,0xff1e2c13,0xff213015,
+ 0xff253517,0xff273a16,0xff152e06,0xa01b1b1b,0x6c181818,0x41141414,0x1f000000,0x3d000000,0xff3c5423,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe5e1d5,0xff000000,0xffe5e1d5,0xff000000,0xffe5e1d5,0xff000000,0xffc2c2c2,0xffb7b7b7,
+ 0xff7a7a7a,0xff2e302d,0xff131c0c,0xff182210,0xff1e2a13,0xff223216,0xff132b07,0xa1202020,0x6d1c1c1c,0x42171717,0x20000000,0x3f000000,0xff456128,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff6e6d67,0xffdcd8cd,0xff6e6d67,0xff6e6d67,0xffddd9cd,
+ 0xff706e68,0xff000000,0xffc0c0c0,0xffb6b6b6,0xff7a7a7a,0xff2d2e2c,0xff0c1108,0xff11180c,0xff192211,0xff202d15,0xff132807,0xa2232323,0x6e202020,0x421b1b1b,
+ 0x21000000,0x41000000,0xff5c8136,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffbababa,0xffb3b3b3,0xff797979,0xff2c2d2c,0xff080b05,0xff0e130a,0xff171e10,0xff1f2a15,
+ 0xff132707,0xa3262626,0x6f222222,0x44222222,0x22000000,0x46040404,0xff6a953e,0xffb7b7b7,0xffa2a2a2,0xff9a9a9a,0xff959595,0xff959595,0xff939393,0xff939393,
+ 0xff939393,0xff959595,0xff939393,0xff939393,0xff939393,0xff959595,0xff959595,0xff9a9a9a,0xffa2a2a2,0xffacacac,0xffb3b3b3,0xffb0b0b0,0xff797979,0xff2c2c2b,
+ 0xff060804,0xff0c1009,0xff161c10,0xff1e2916,0xff132607,0xa3292929,0x70242424,0x44222222,0x24070707,0x4a070707,0xff68933d,0xff383838,0xff303030,0xff2c2c2c,
+ 0xff2a2a2a,0xff2a2a2a,0xff292929,0xff292929,0xff292929,0xff2a2a2a,0xff292929,0xff292929,0xff292929,0xff2a2a2a,0xff2a2a2a,0xff2c2c2c,0xff303030,0xff353535,
+ 0xffacacac,0xffacacac,0xff787878,0xff2b2c2b,0xff050704,0xff0c1009,0xff161c10,0xff1e2916,0xff132507,0xa3292929,0x70242424,0x44222222,0x26070707,0x4f060606,
+ 0xff628a3a,0xff333333,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff202020,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff202020,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff202020,
+ 0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff303030,0xffa2a2a2,0xffa8a8a8,0xff777777,0xff2b2c2b,0xff050704,0xff0c0f09,0xff161c11,0xff1e2816,0xff132508,0xa3272727,
+ 0x6f222222,0x431e1e1e,0x28060606,0x53090909,0xff5e8437,0xff2f2f2f,0xfffeffdd,0xfffeffc1,0xff575742,0xff191919,0xfffeffdd,0xfffeffc1,0xff575742,0xff191919,
+ 0xfffeffdd,0xfffeffc1,0xff575742,0xff191919,0xfffeffdd,0xfffeffc1,0xff575742,0xff2c2c2c,0xff9a9a9a,0xffa4a4a4,0xff767676,0xff2b2c2b,0xff060704,0xff0d100a,
+ 0xff161c11,0xff1e2816,0xff122407,0xa3262626,0x6f222222,0x431e1e1e,0x29060606,0x55090909,0xff5b8035,0xff2d2d2d,0xffe4e5ad,0xff575742,0xff29291f,0xff141414,
+ 0xffe4e5ad,0xff575742,0xff29291f,0xff141414,0xffe4e5ad,0xff575742,0xff29291f,0xff141414,0xffe4e5ad,0xff575742,0xff29291f,0xff2a2a2a,0xff959595,0xffa2a2a2,
+ 0xff757575,0xff2b2c2b,0xff060705,0xff0d100a,0xff161b11,0xff1d2615,0xff122207,0xa2232323,0x6e1e1e1e,0x421b1b1b,0x29060606,0x55090909,0xff5b8035,0xff2d2d2d,
+ 0xff202020,0xff191919,0xff141414,0xff141414,0xff111111,0xff111111,0xff111111,0xff141414,0xff111111,0xff111111,0xff111111,0xff131313,0xff121212,0xff171717,
+ 0xff1f1f1f,0xff292929,0xff939393,0xffa1a1a1,0xff757575,0xff2b2c2b,0xff060705,0xff0c0f0a,0xff151b10,0xff1b2514,0xff112106,0xa11e1e1e,0x6d1c1c1c,0x42171717,
+ 0x29060606,0x56060606,0xff597e34,0xff2b2b2b,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff111111,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff111111,0xffffffe9,0xfffeffdd,
+ 0xffe4e5ad,0xff0f0f0f,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff262626,0xff8e8e8e,0xff9f9f9f,0xff757575,0xff2b2c2b,0xff060705,0xff0c0f09,0xff14190f,0xff192312,
+ 0xff0f1f06,0x9f1a1a1a,0x6b151515,0x40101010,0x29060606,0x56060606,0xff597e34,0xff2b2b2b,0xfffeffdd,0xfffeffc1,0xff575742,0xff111111,0xfffeffdd,0xfffeffc1,
+ 0xff575742,0xff111111,0xfffeffdd,0xfffeffc1,0xff575742,0xff0e0e0e,0xfffeffdd,0xfffeffc1,0xff575742,0xff252525,0xff8b8b8b,0xff9d9d9d,0xff747474,0xff2b2c2b,
+ 0xff060704,0xff0b0e09,0xff12180d,0xff17210f,0xff0e1e04,0x9e151515,0x6a111111,0x3f0c0c0c,0x29060606,0x56030303,0xff597e34,0xff2b2b2b,0xffe4e5ad,0xff575742,
+ 0xff29291f,0xff111111,0xffe4e5ad,0xff575742,0xff29291f,0xff111111,0xffe4e5ad,0xff575742,0xff29291f,0xff0d0d0d,0xfffeffdd,0xfffeffc1,0xff575742,0xff242424,
+ 0xff898989,0xff9c9c9c,0xff747474,0xff2b2c2b,0xff050704,0xff0a0d08,0xff10170b,0xff141e0c,0xff0c1b04,0x9d101010,0x690c0c0c,0x3f080808,0x29060606,0x55060606,
+ 0xff5b8035,0xff2d2d2d,0xff202020,0xff191919,0xff141414,0xff141414,0xff111111,0xff111111,0xff111111,0xff141414,0xff111111,0xff0f0f0f,0xff0d0d0d,0xff0e0e0e,
+ 0xfffeffdd,0xfffeffc1,0xff575742,0xff242424,0xff898989,0xff9c9c9c,0xff747474,0xff2b2c2b,0xff050604,0xff090c06,0xff0e1509,0xff121c0a,0xff0b1a03,0x9c0b0b0b,
+ 0x68070707,0x3e040404,0x29060606,0x54030303,0xff5b8035,0xff2d2d2d,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff141414,0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff141414,
+ 0xffffffe9,0xfffeffdd,0xffe4e5ad,0xff0f0f0f,0xfffeffdd,0xfffeffc1,0xff575742,0xff252525,0xff8b8b8b,0xff9d9d9d,0xff747474,0xff2b2b2b,0xff040603,0xff080b05,
+ 0xff0c1307,0xff0f1a07,0xff091802,0x9b080808,0x67050505,0x3e040404,0x25000000,0x50030303,0xff5e8437,0xff2f2f2f,0xfffeffdd,0xfffeffc1,0xff575742,0xff191919,
+ 0xfffeffdd,0xfffeffc1,0xff575742,0xff191919,0xfffeffdd,0xfffeffc1,0xff575742,0xff151515,0xfffeffdd,0xfffeffc1,0xff575742,0xff292929,0xff939393,0xffa1a1a1,
+ 0xff757575,0xff2b2b2b,0xff030502,0xff070a04,0xff0a1105,0xff0d1804,0xff091801,0x94050505,0x63030303,0x3b000000,0x21000000,0x47000000,0xff5f8538,0xff2e2e2e,
+ 0xffe4e5ad,0xff575742,0xff29291f,0xff181818,0xffe4e5ad,0xff575742,0xff29291f,0xff181818,0xffe4e5ad,0xff575742,0xff29291f,0xff161616,0xffe4e5ad,0xff575742,
+ 0xff29291f,0xff222222,0xff767676,0xff7c7c7c,0xff585858,0xff252525,0xff030402,0xff050902,0xff091003,0xff0c1602,0xff081801,0x87020202,0x5a000000,0x36000000,
+ 0x1c000000,0x3a000000,0xff50712f,0xff0e1308,0xff080b04,0xff070a04,0xff060904,0xff060904,0xff060904,0xff060904,0xff060904,0xff060904,0xff060904,0xff060904,
+ 0xff060904,0xff060904,0xff060904,0xff070a04,0xff080b04,0xff080b05,0xff1b2610,0xff1c2710,0xff1a250f,0xff141c0c,0xff010300,0xff020600,0xff040b01,0xff061100,
+ 0xff081700,0x74000000,0x4e000000,0x2e000000,0x15000000,0x2e000000,0x4c000000,0x6f000000,0x8c040404,0xa0030303,0xae060606,0xb2060606,0xb4080808,0xb50b0b0b,
+ 0xb60e0e0e,0xb6121212,0xb8151515,0xb9171717,0xb9191919,0xb81c1c1c,0xb81c1c1c,0xb61c1c1c,0xb21d1d1d,0xad1d1d1d,0xa81a1a1a,0xa3191919,0x9f151515,0x9d101010,
+ 0x9c0b0b0b,0x9b080808,0x94050505,0x87020202,0x74000000,0x5c000000,0x3d000000,0x25000000,0xe000000,0x1d000000,0x31000000,0x48000000,0x5d030303,0x6c020202,
+ 0x75040404,0x79040404,0x7b080808,0x7c0a0a0a,0x7d0e0e0e,0x7d121212,0x7f161616,0x801a1a1a,0x811c1c1c,0x801c1c1c,0x801c1c1c,0x7e1c1c1c,0x7b1d1d1d,0x771c1c1c,
+ 0x731b1b1b,0x6e151515,0x6b111111,0x690c0c0c,0x68070707,0x67050505,0x63030303,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x8000000,0x11000000,
+ 0x1b000000,0x29000000,0x34000000,0x3e040404,0x44040404,0x46040404,0x47070707,0x470b0b0b,0x470b0b0b,0x480e0e0e,0x49111111,0x49151515,0x4b1b1b1b,0x4b1b1b1b,
+ 0x4b1b1b1b,0x4a1c1c1c,0x481c1c1c,0x46191919,0x44161616,0x410c0c0c,0x400c0c0c,0x3f080808,0x3e040404,0x3e040404,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Calibrate_data[] = {
+ 0xffffff,0xffffff,0x1ffffff,0x3ffffff,0x5ffffff,0x8dfdfdf,0xdc4c4c4,0x13aeaeae,0x1ba1a1a1,0x258a8a8a,0x2f828282,0x39797979,0x41727272,0x486e6e6e,
+ 0x4d6a6a6a,0x51686868,0x51656565,0x4f646464,0x4b636363,0x45646464,0x3d646464,0x32666666,0x286c6c6c,0x1e6f6f6f,0x15797979,0xd898989,0x104f4f4f,0x4bfbfbf,
+ 0x1ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1ffffff,0x3ffffff,0x6d5d5d5,0xacccccc,0x11b4b4b4,0x1aa7a7a7,0x26949494,0x33878787,0x417e7e7e,
+ 0x9c84939a,0xda74889d,0xf461749c,0xfd52659b,0xff48589b,0xff46599e,0xff4c5e9a,0xfd586c99,0xf5657b97,0xdd728791,0xa6758484,0x575e5e5e,0x495e5e5e,0x39626262,
+ 0x2a676767,0x4e1f1f1f,0xaa040404,0xffb0b0b0,0x5999999,0x2808080,0xffffff,0xffffff,0x1ffffff,0x3ffffff,0x6d5d5d5,0xbd1d1d1,0x14b3b3b3,0x209f9f9f,
+ 0x2e909090,0x3f868686,0xb681939e,0xf365799d,0xff596fa4,0xff6d89ab,0xff84a7af,0xff97c0b4,0xffa2d0b5,0xffa8d7b7,0xffa2d0b4,0xff97c1af,0xff87aeaa,0xff7696a3,
+ 0xff658199,0xf4657d8d,0xc3728384,0x5d5a5a5a,0x702e2e2e,0xf0020202,0xffc2c2c2,0xffa7a7a7,0xff636363,0x5999999,0x2808080,0xffffff,0x3ffffff,0x6d5d5d5,
+ 0xbd1d1d1,0x16aeaeae,0x229e9e9e,0x348e8e8e,0x8089999b,0xe97186a1,0xff647da7,0xff81a4b0,0xffa4d2ba,0xffb5e8bc,0xffbcf0bf,0xffbef4be,0xffbff6be,0xffbff6bc,
+ 0xffbef4bc,0xffb7edb7,0xffb3e7b5,0xffaadcae,0xff98c5a5,0xff7ca197,0xff638086,0xf249595e,0xf7040405,0xffc2c2c2,0xffaaaaaa,0xff6b6b6b,0xff2e2e2e,0xff0f0f0f,
+ 0x5999999,0x2808080,0x5ffffff,0xacccccc,0x14b3b3b3,0x229e9e9e,0x358c8c8c,0xa48697a0,0xf7687ca2,0xff7c9db0,0xffa4d2b9,0xffbbefc0,0xffc2f9c1,0xffc4fbc1,
+ 0xffc3fac0,0xffc3fac0,0xffc1f8be,0xffc0f7bd,0xffbdf4ba,0xffbbf1b8,0xffb6ebb3,0xffaee2ab,0xffa3d4a1,0xff90bc92,0xff050707,0xff060808,0xff8b89b4,0xff9b9ba6,
+ 0xff6b6b6b,0xff2f2e2e,0xff0b0b0b,0x8c070707,0xb747474,0x4808080,0x8dfdfdf,0x10afafaf,0x1f9c9c9c,0x338c8c8c,0xa38396a0,0xfa6379a2,0xff87aab2,0xffb3e5be,
+ 0xffc3fac2,0xffc6fdc3,0xffc5fcc2,0xffc4fbc1,0xffc2f9bf,0xffc1f8be,0xffc0f7bd,0xffbdf4ba,0xffbbf1b8,0xffb6ebb3,0xffaee2ab,0xffa4d5a1,0xff96c294,0xff919291,
+ 0xff080b08,0xffb8b8c0,0xff8d8ca3,0xff4d4d64,0xff2b2a2d,0xff0b0b0b,0xf1020202,0x541a1a1a,0x14595959,0x8606060,0xcbfbfbf,0x19a3a3a3,0x2c8b8b8b,0x7e88989a,
+ 0xf7667ca1,0xff87aab2,0xffb6e9be,0xffc6fdc3,0xffc5fcc2,0xffc5fcc2,0xffc4fbc1,0xffc3fac0,0xffc1f8be,0xffc0f7bd,0xffbdf4ba,0xffbaf0b7,0xffb5eab2,0xffaee2ab,
+ 0xffa3d4a0,0xff95c092,0xff0f1210,0xff080b08,0xffc2c2c2,0xffaaaaaa,0xff67676a,0xff27272d,0xff08080a,0xf8040404,0x7f252525,0x374a4a4a,0x1e4d4d4d,0xf555555,
+ 0x11a5a5a5,0x238a8a8a,0x3c7b7b7b,0xe97184a0,0xff7c9db0,0xffb3e5be,0xffc6fdc3,0xffc6fdc3,0xffc5fcc2,0xffc4fbc1,0xffc2f9bf,0xffc1f8be,0xffbff6bc,0xffbcf3b9,
+ 0xffb9efb6,0xffb4e9b1,0xfface0a9,0xffa1d29e,0xff95c192,0xff878b85,0xff080b08,0xffc2c2c2,0xffaaaaaa,0xff6b6b6b,0xff2f2f2f,0xff0b0b0b,0xff020303,0xf72e3a39,
+ 0x72414141,0x4c404040,0x2c404040,0x17434343,0x18959595,0x307a7a7a,0xb57f919c,0xff637ca6,0xffa4d1b8,0xffc2f9c1,0xffbdf4ba,0xff96cd93,0xff71a86e,0xff50874d,
+ 0xff356c32,0xff235a20,0xff2b6228,0xff3f763c,0xff5a9058,0xff7baf78,0xff98c996,0xff93be91,0xff202520,0xff090b08,0xffc2c2c2,0xffaaaaaa,0xff6b6b6b,0xff2f2e2e,
+ 0xff0b0b0b,0xff030403,0xff212d21,0xff33463c,0xd34c5c55,0x643b3b3b,0x3e3a3a3a,0x223c3c3c,0x217c7c7c,0x3c6f6f6f,0xf263779a,0xff80a2af,0xffb9edbe,0xff8ec58b,
+ 0xff5a9157,0xff5f965c,0xff80b77d,0xff9ad197,0xffb0e7ad,0xffb9f0b6,0xffa9dfa6,0xff8ac087,0xff679b64,0xff3c6d39,0xff366134,0xff787f78,0xff080a08,0xffa8a9a8,
+ 0xffa8a8a8,0xff6b6b6c,0xff2e2f2e,0xff0b0b0b,0xff030403,0xff243123,0xff3b523b,0xff425c48,0xf7475d56,0x7b363636,0x51323232,0x2f363636,0x29707070,0x977b8c93,
+ 0xff576da2,0xff94c1a6,0xff6ea56c,0xff659c62,0xff9ad197,0xffc1f8be,0xffc0f7bd,0xffbef5bb,0xffbbf2b8,0xffb9efb6,0xffb3e8b0,0xfface0a9,0xffa1d29e,0xff94bf91,
+ 0xff212720,0xff050704,0xffbdbdbd,0xff000000,0xff606160,0xff2e2e2e,0xff0b0b0b,0xff030403,0xff233022,0xff3c543b,0xff4c6b4b,0xff557857,0xff50715d,0xbe48554c,
+ 0x622f2f2f,0x3c2f2f2f,0x32616161,0xd8738598,0xff627e98,0xff5b8e5d,0xff7fb67c,0xffc0f7bd,0xffc1f8be,0xffa7dea4,0xff76ad73,0xff487f45,0xff235a20,0xff0b4108,
+ 0xff1b5018,0xff366834,0xff588456,0xff778178,0xff080b08,0xffc2c2c2,0xffa9a9a9,0xff686868,0xff000000,0xff111111,0xff030402,0xff222f21,0xff3b533a,0xff4c6a4a,
+ 0xff5a7f58,0xff618b60,0xff5c8663,0xe64e6458,0x722b2b2b,0x47282828,0x39555555,0xf35f7397,0xff466b5c,0xff77ab77,0xffc0f7bd,0xffbff6bc,0xff80b77d,0xff3d743a,
+ 0xff60975d,0xff84bb81,0xffa0d69d,0xffaee4ab,0xff93c690,0xff6b9a69,0xff192219,0xff030603,0xffc2c2c2,0xffaaaaaa,0xff6b6b6b,0xff2f2e2f,0xff0c0c0c,0xff020302,
+ 0xff202e1f,0xff395038,0xff486747,0xff587d56,0xff638e60,0xff689766,0xff629167,0xf74d6a5b,0x7f262626,0x53252525,0x3e4e4e4e,0xfd3b4e79,0xff456f51,0xffb9efb9,
+ 0xffbff6bc,0xff73aa70,0xff60975d,0xff9dd49a,0xffb9f0b6,0xffb5ebb2,0xffb1e7af,0xffabdfa8,0xff9ecf9c,0xff87b185,0xff1d261d,0xffc2c2c2,0xffaaaaaa,0xff6b6b6b,
+ 0xff2f2f2f,0xff0b0b0b,0xff010201,0xff152214,0xff364d35,0xff456343,0xff537851,0xff608b5d,0xff679765,0xff6a9b67,0xff649665,0xfd51745d,0x8a232323,0x5b222222,
+ 0x43484848,0xff1d2f45,0xff7aa888,0xffbbf1b9,0xff7eb57b,0xff60975d,0xffb9f0b6,0xffb9f0b6,0xff8ec58b,0xff548a51,0xff245921,0xff063904,0xff1b4a19,0xff152515,
+ 0xffbfbfbf,0xffaaaaaa,0xff6b6b6b,0xff2e2f2e,0xff0b0b0b,0xff020302,0xff162315,0xff112810,0xff3e5c3c,0xff4f744d,0xff5a8558,0xff639260,0xff679a64,0xff689d65,
+ 0xff629761,0xff537f5b,0x92212121,0x61202020,0x45434343,0xff1c2f3e,0xffa3d3b2,0xffa2d99f,0xff3e753b,0xff9cd399,0xffb8efb5,0xff7bb278,0xff356c32,0xff659b62,
+ 0xff89be86,0xff97c894,0xff486547,0xff0c140c,0xffb6b6b6,0xff6b6b6b,0xff2e2e2e,0xff0b0b0b,0xff010200,0xff192718,0xff324a31,0xff173616,0xff355a33,0xff558052,
+ 0xff5d8c5a,0xff62955f,0xff659a62,0xff649b61,0xff5e945d,0xff548459,0x961f1f1f,0x651c1c1c,0x443c3c3c,0xff2f4264,0xff9eccaf,0xff73aa71,0xff639a60,0xffb7eeb4,
+ 0xff91c88e,0xff397036,0xff96cc93,0xffabe1a8,0xffa2d69f,0xff93c391,0xff040504,0xffbfbfbf,0xff6b6b6b,0xff232423,0xff0b0b0b,0xff0a0e0a,0xff0f1d0e,0xff1c351b,
+ 0xff3d5b3b,0xff2b5029,0xff2a5527,0xff588755,0xff5d8f5a,0xff60955d,0xff60975e,0xff5d945a,0xff5a8f59,0xff4e7b53,0x971b1b1b,0x65191919,0x42363636,0xfd465a7f,
+ 0xff92bcaa,0xff497e47,0xff86bd83,0xffb5ecb2,0xff5c9359,0xff6ba268,0xffade3aa,0xff85bb82,0xff3c703a,0xff0a3908,0xff000000,0xff636363,0xff191919,0xff0a120a,
+ 0xff040704,0xff273927,0xff253f24,0xff143312,0xff456b43,0xff3c673a,0xff1e4d1b,0xff588b55,0xff5b9058,0xff5d935a,0xff5b9258,0xff598e56,0xff548952,0xfd446a4a,
+ 0x94181818,0x64171717,0x3e313131,0xf45a708a,0xff83a9a4,0xff295e27,0xffa0d79d,0xffb2e9af,0xff336a30,0xff91c88e,0xfface2a9,0xff437940,0xff063903,0xff033201,
+ 0xff000000,0xff000000,0xff040504,0xff192719,0xff0b2409,0xff3c593a,0xff395b37,0xff0b3209,0xff4a7648,0xff497946,0xff144711,0xff558a52,0xff578d54,0xff568d53,
+ 0xff568c53,0xff538950,0xff4d824b,0xf73d5c43,0x8f151515,0x5e161616,0x372e2e2e,0xd9677d87,0xff72939f,0xff154913,0xffafe6ac,0xffb0e7ad,0xff195016,0xffa8dfa5,
+ 0xffa9dfa6,0xff144911,0xff073a04,0xff043502,0xff022e00,0xff072d05,0xff537551,0xff476845,0xff022300,0xff476c45,0xff487146,0xff043102,0xff4d7d4a,0xff4e824c,
+ 0xff0e440c,0xff52884f,0xff50874d,0xff51874e,0xff50874d,0xff4c834a,0xff497f48,0xea344d3b,0x86131313,0x57121212,0x302b2b2b,0x9f607273,0xff638096,0xff1f4f1f,
+ 0xff9ad198,0xffade4aa,0xff2f662c,0xff8ec58b,0xffa6dca3,0xff437940,0xff093d06,0xff053803,0xff043302,0xff295427,0xff5d855a,0xff456d43,0xff113a0e,0xff507b4d,
+ 0xff457442,0xff0e400c,0xff4e824b,0xff487d45,0xff154b12,0xff4d844a,0xff4d834a,0xff4c8349,0xff4a8147,0xff477e45,0xff427342,0xc929382c,0x79111111,0x4e101010,
+ 0x26282828,0x46212121,0xf2617888,0xff2f5938,0xff77ac77,0xffabe2a8,0xff548b51,0xff659c62,0xffa2d99f,0xff7cb279,0xff3e733b,0xff0f430c,0xff31642f,0xff598956,
+ 0xff659463,0xff356433,0xff295927,0xff558652,0xff3a6d38,0xff1e521b,0xff4d824a,0xff3c7339,0xff1d531a,0xff4a8047,0xff498046,0xff498046,0xff457c42,0xff427840,
+ 0xf7335338,0x970f0f0f,0x6b0e0e0e,0x410c0c0c,0x1d232323,0x391f1f1f,0xb8607473,0xff42645d,0xff497a4d,0xffa7dea5,0xff82b97f,0xff31682e,0xff86bd83,0xff96cd93,
+ 0xff8fc68c,0xff87bc84,0xff7bb079,0xff73a770,0xff598c56,0xff1b4e18,0xff477b44,0xff588c55,0xff2a5f27,0xff2f652c,0xff4b8148,0xff2f662c,0xff285f25,0xff477e44,
+ 0xff457c42,0xff437a40,0xff42783f,0xff3d6f3d,0xd9283b2d,0x840e0e0e,0x590b0b0b,0x350a0a0a,0x15242424,0x29191919,0x49151515,0xeb5b727b,0xff1e4922,0xff80b483,
+ 0xffa1d89e,0xff689f65,0xff2d642a,0xff568c53,0xff73a970,0xff7eb57c,0xff659b62,0xff42783f,0xff1e541b,0xff41773e,0xff5c9159,0xff477d44,0xff164c13,0xff40773e,
+ 0xff497f46,0xff1f561c,0xff31682e,0xff437a40,0xff41783e,0xff40773d,0xff3d743b,0xf32e4b32,0x970c0c0c,0x6e090909,0x470b0b0b,0x27070707,0xd272727,0x1e1a1a1a,
+ 0x36131313,0x88495852,0xf948626d,0xff39663f,0xff93c894,0xff94cb91,0xff6fa66c,0xff42793f,0xff1f561c,0xff0b4208,0xff1c5219,0xff356b32,0xff4f864c,0xff5f965c,
+ 0xff578e54,0xff275e24,0xff31682e,0xff487f45,0xff356c32,0xff195016,0xff3e753b,0xff3f763c,0xff3e753b,0xff3c733a,0xfb335435,0xbd1c241e,0x7d080808,0x57090909,
+ 0x350a0a0a,0x1c090909,0x7242424,0x120e0e0e,0x250e0e0e,0x400c0c0c,0xac52625f,0xfb3e5a5f,0xff35633a,0xff70a571,0xff89c087,0xff84bb81,0xff7eb57b,0xff77ae74,
+ 0xff71a86e,0xff6aa067,0xff62985f,0xff4b8148,0xff265d23,0xff2b6228,0xff4b8248,0xff447b41,0xff1d541a,0xff2c6329,0xff3d743a,0xff3c7339,0xff3b7239,0xfb305531,
+ 0xd0213024,0x86060606,0x61050505,0x3f040404,0x24070707,0x11000000,0x3000000,0xb171717,0x170b0b0b,0x2c0c0c0c,0x47070707,0xae4b5b56,0xf9425d5f,0xff174518,
+ 0xff386b38,0xff568c55,0xff6aa067,0xff70a76d,0xff5e955b,0xff467d43,0xff2d642a,0xff144b11,0xff32692f,0xff4c8349,0xff487f45,0xff285f25,0xff1d541a,0xff3d743a,
+ 0xff3b7138,0xff397037,0xfa2e5131,0xd0202d24,0x89040404,0x67050505,0x47040404,0x2b060606,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1b090909,
+ 0x2f050505,0x49030303,0x9236423d,0xed4b6461,0xff3a6346,0xff215122,0xff0f430d,0xff033900,0xff0e440b,0xff1e551b,0xff32692f,0xff467d43,0xff4d844a,0xff487f45,
+ 0xff275e24,0xff194f16,0xff356c33,0xff3a7038,0xff376835,0xf22a462d,0xbc18221a,0x85020202,0x67020202,0x49030303,0x2e000000,0x1a000000,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x47040404,0x61030303,0xc3415249,0xf349675a,0xff578063,0xff5a8a61,0xff598b5c,0xff568a57,
+ 0xff538851,0xff4e844d,0xff366c34,0xff194f17,0xff1c511a,0xff376d36,0xff3a6a39,0xf72b4b2f,0xd8223426,0x94020202,0x7c020202,0x60000000,0x46000000,0x2e000000,
+ 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000,
+ 0xb6314039,0xe23e5648,0xf63d5a4b,0xfd355a44,0xff295432,0xff174817,0xff15421e,0xfd284f34,0xf7315236,0xe82b422e,0xc71d2c20,0x93000000,0x81000000,0x6c000000,
+ 0x55000000,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000,
+ 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000,
+ 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb CityTime_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff05034a,0xff05034b,0xff05034c,0xff05034d,
+ 0xff05034d,0xff05034e,0xff05034e,0xff05034e,0xff05034d,0xff05034c,0xff050349,0xff040347,0xff040244,0xff040240,0xff03023c,0xff030238,0xff030233,0xff02012f,
+ 0xff02012a,0xff020128,0xff010124,0xff010121,0xff01011d,0xff01001a,0xff000016,0xff000013,0xff000012,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff05034e,0xff838393,0xff848495,0xff878797,0xff898999,0xff898999,0xff898999,0xff898999,0xff878797,0xff848495,0xff7f7f90,0xff77778a,0xff707083,0xff67677c,
+ 0xff5d5d73,0xff53536a,0xff474760,0xff3b3b56,0xff30304d,0xff282846,0xff1f1f3e,0xff171736,0xff101030,0xff070729,0xff020224,0xff010122,0xff000012,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff050354,0xff8e8e9d,0xff9191a0,0xff9393a2,0xff9595a3,0xff9696a4,0xff9696a4,0xff9397a7,0xff92a1b5,0xff8cadca,
+ 0xff8ab7dc,0xff8bbfe6,0xff83b9e0,0xff7baace,0xff6e8bac,0xff5d6985,0xff4a4b65,0xff3d3d57,0xff31314d,0xff262644,0xff1c1c3b,0xff121233,0xff09092b,0xff040426,
+ 0xff030324,0xff020222,0xff000011,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff06045a,0xff9c9ca9,0xff9f9fac,0xffa1a1ae,0xffa3a3b0,0xffa2a5b3,
+ 0xff96b7d1,0xff95cced,0xff90d6f9,0xff8ad6fc,0xff69bfee,0xff4ba8dc,0xff7ecff9,0xff89d7fa,0xff7dcff8,0xff6cbdec,0xff5e9ccc,0xff506688,0xff333451,0xff272745,
+ 0xff1a1a3a,0xff0f0f30,0xff080829,0xff060626,0xff040424,0xff030322,0xff000011,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff070461,0xffababb6,
+ 0xffaeaeb9,0xffb1b1bb,0xff85accc,0xff5bb0d3,0xffa4eafa,0xffb6f5ff,0xff93e6f6,0xff8de1f9,0xff67c9e8,0xff33a1c2,0xff83d8f3,0xff87dbf1,0xff8fe0f8,0xff8ddcf8,
+ 0xff6ec7ec,0xff49addc,0xff4f95c9,0xff3f5275,0xff1b1b3a,0xff121232,0xff0c0c2c,0xff080827,0xff060624,0xff040421,0xff000010,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff070468,0xffbbbbc4,0xffb9bdc9,0xff72aed0,0xff0d7e9d,0xff83d8dd,0xffcefdfe,0xff7fbec1,0xff337570,0xff74bbb7,0xffc1faff,0xffb4f1fd,
+ 0xffb1eefb,0xffafedfa,0xffa8ebfa,0xffa4e9fa,0xffa0e8ff,0xff62c3da,0xff03709f,0xff309add,0xff4a6e95,0xff191a38,0xff121230,0xff0c0c2a,0xff080825,0xff050522,
+ 0xff000010,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08056f,0xffc7cad3,0xff73b9d9,0xff047589,0xff127577,0xff68b3a8,0xff397e69,0xff0e451c,
+ 0xff317042,0xffa2dfd4,0xff9ce3d6,0xffbbf0f4,0xffb9f1f8,0xffb1eef8,0xffacebfa,0xffa8eafa,0xffa9edfe,0xff89dbec,0xff0d6b82,0xff027cb4,0xff57c5f5,0xff6190b6,
+ 0xff181935,0xff11112d,0xff0b0b27,0xff070721,0xff000010,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080577,0xff9cd4eb,0xff1e8c8e,0xff0b665e,
+ 0xff186957,0xff0d522f,0xff13541f,0xff8cc1a9,0xffd4f9f7,0xffd4fbfe,0xffa1e2d5,0xffbef0f2,0xffbff1f7,0xffb6eff7,0xffb1edf7,0xffaaeaf8,0xffa7eafb,0xff97e3fb,
+ 0xff6bc5e4,0xff62c4e8,0xff49bbe8,0xff67ccf8,0xff527697,0xff171731,0xff0f0f29,0xff0a0a23,0xff000010,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff080583,0xff58babd,0xff127a5d,0xff1b663b,0xff196026,0xff125511,0xff88c09e,0xffefffff,0xffdffbfe,0xffd4f8fa,0xffd3f9fd,0xffc8f5f8,0xffc3f2f7,0xffbdf1f6,
+ 0xffb6eef6,0xffafebf8,0xffaae8f9,0xff98e3fb,0xff7edbff,0xff52b1d3,0xff036d9f,0xff0b8cd6,0xff57b8ed,0xff394b68,0xff14142d,0xff0d0d26,0xff000011,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080687,0xff38a08b,0xff116637,0xff1a6329,0xff16641a,0xff62b27f,0xffe1fcfa,0xffe5fcfd,0xffdcf8fb,0xffd7f8fa,
+ 0xffd2f6f8,0xffcdf6f7,0xffc7f4f7,0xffc1f2f7,0xffb9eff6,0xffb1ecf7,0xffabe9f8,0xffa4e8f9,0xff97e8ff,0xff4ea5b5,0xff045573,0xff0071c6,0xff098bdb,0xff63afe0,
+ 0xff1d1f37,0xff111127,0xff000012,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07057c,0xff198156,0xff287946,0xff9adccf,0xffa8e0cd,0xffd4f9f5,
+ 0xffebfcfe,0xffe2fafa,0xffdef9fa,0xffdaf8fa,0xffd6f7f9,0xffd1f6f8,0xffcbf5f7,0xffc4f2f7,0xffbdf0f6,0xffb4edf6,0xfface9f7,0xffa8e9f9,0xffabeeff,0xff6fb6b9,
+ 0xff075360,0xff0072bc,0xff0084d7,0xff249ee5,0xff415c7b,0xff16162b,0xff010013,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07067a,0xff298f53,
+ 0xff95d3b8,0xfff0ffff,0xffeefeff,0xffe6fafc,0xffe5faf9,0xffe3fafc,0xffe1f9fc,0xffddf9fa,0xffd9f7f9,0xffd4f6f8,0xffcef5f8,0xffc7f4f8,0xffc0f0f6,0xffb7eef5,
+ 0xffaeebf6,0xffa8e7f8,0xffacecfd,0xff82cbd3,0xff0c5453,0xff01679a,0xff0085d8,0xff018dde,0xff4595cc,0xff1a1a2e,0xff010014,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff090688,0xff70c998,0xffd6f7f0,0xffe9fbfb,0xffeffcfe,0xffaee3ce,0xffb8e8db,0xff9bd8c4,0xffe3fcfd,0xffe1f9fb,0xffdbf8f9,0xffd8f7f8,
+ 0xffcff5f7,0xffc9f3f6,0xffc2f1f6,0xffbaeff5,0xffb0ebf6,0xffaae8f8,0xffa8e8fb,0xff9ce3f4,0xff256250,0xff014f60,0xff017ecd,0xff008be0,0xff1391d8,0xff1f1f31,
+ 0xff010015,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff09068a,0xff75c39a,0xff3fa666,0xff8dd0af,0xfff8ffff,0xffd8f5ee,0xffe0fbf8,0xffd6f6f3,
+ 0xffe5fafb,0xffe3fafb,0xffd9f7fb,0xffcbf5f8,0xffcef5f7,0xffc9f4f7,0xffc3f2f6,0xffbbeff5,0xffb2ecf6,0xffabe8f7,0xffa5e7f8,0xffa8ebfc,0xff75bac4,0xff0e4f48,
+ 0xff005c95,0xff007acf,0xff0283d1,0xff242435,0xff010116,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff090689,0xffbae7d7,0xff7bc9a0,0xff8dd0b1,
+ 0xffc7eadf,0xfff3ffff,0xffe2f8f5,0xffe7fbfa,0xffe7fdfe,0xffedffff,0xffdbfafc,0xffc2f4f9,0xffc9f4f6,0xffcaf4f6,0xffc3f2f6,0xffbceff5,0xffb4ecf6,0xfface8f6,
+ 0xffa5e6f6,0xffa1e4f7,0xffa5ecfe,0xff70bdcc,0xff4fa5c1,0xff4db3df,0xff0881c6,0xff292939,0xff010117,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff090688,0xffeefdfe,0xfff6ffff,0xffdbf5f2,0xffabe6d3,0xff7bb59d,0xff255a2c,0xff3d8753,0xff3d8a52,0xff7bb89d,0xffddfbfb,0xffdfffff,0xffd2fafb,0xffcbf5f7,
+ 0xffc5f2f6,0xffbceff5,0xffb4ecf6,0xfface8f6,0xffa5e6f6,0xff9fe3f6,0xff9ae2f8,0xff9be7fe,0xff9fedff,0xff8ee2fc,0xff1584bf,0xff2d2d3c,0xff010118,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff090688,0xffe6f9f9,0xffe8f9fa,0xffebfbfc,0xfff6ffff,0xff91b8a5,0xff165b1d,0xff20752c,0xff1b6a19,0xff155d18,
+ 0xff397b50,0xff548d75,0xffbceded,0xffddfeff,0xffcbf9fe,0xffc0f1f9,0xffb4ecf4,0xffabe7f5,0xffa4e5f6,0xff9ee2f5,0xff98e0f6,0xff93dff8,0xff90e0fd,0xff8ce1fe,
+ 0xff278ebd,0xff31313f,0xff01011a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff090688,0xffe6f9fa,0xffe5f9fa,0xffe6fafb,0xfff4feff,0xffa2d4be,
+ 0xff27873f,0xff29842f,0xff267423,0xff246720,0xff185515,0xff0a370a,0xff3c755a,0xff9ed6d1,0xffa5e0e0,0xffb9f2f8,0xffb8f1fa,0xffabe8f6,0xffa3e5f5,0xff9de2f5,
+ 0xff98e0f6,0xff92def7,0xff8edefc,0xff8ee3ff,0xff43a0c6,0xff333341,0xff01011b,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff090687,0xffe5f9f9,
+ 0xffe4f9fa,0xffe5f9fb,0xfff4ffff,0xff88c6ab,0xff1e7037,0xff24782a,0xff277125,0xff205f1f,0xff1e571d,0xff1f531b,0xff124212,0xff0f3f18,0xff154923,0xff26604c,
+ 0xff93d6de,0xffb0edfc,0xffa2e4f5,0xff9de1f4,0xff97dff6,0xff91ddf7,0xff8edefc,0xff8de0fe,0xff46a4cb,0xff353542,0xff01011b,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff090687,0xffe2fafa,0xffe1f9fa,0xffe2f8f9,0xffefffff,0xffb0ddd1,0xff2a764b,0xff206c2c,0xff287839,0xff236729,0xff1e511c,0xff1f511b,
+ 0xff1e501d,0xff19461a,0xff0f340d,0xff1a452d,0xff96d8e2,0xffadedfc,0xffa0e2f4,0xff9be0f5,0xff95def6,0xff8fdcf7,0xff8cddfb,0xff89dcfd,0xff339dcb,0xff363643,
+ 0xff01011c,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff090687,0xffdef8fa,0xffdff9fa,0xffdff9fa,0xffe3fbfd,0xffe7f9fb,0xff577c75,0xff125826,
+ 0xff2f894a,0xff1f5c2e,0xff1e541d,0xff1c491a,0xff1c4c1c,0xff1b4c1d,0xff0b330d,0xff639d97,0xffbdf8ff,0xffa5e6f6,0xff9fe1f4,0xff9ae0f4,0xff93ddf5,0xff8edbf7,
+ 0xff8bdcfb,0xff7ed6f8,0xff319dcf,0xff363643,0xff01011c,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080687,0xffd9f8fa,0xffdaf8fa,0xffdcf8fb,
+ 0xffdcf9fb,0xffe6fefe,0xffc6dce5,0xff32574d,0xff135024,0xff216739,0xff1b4f26,0xff1e4e1c,0xff1d4a1c,0xff194918,0xff072908,0xff67a5a1,0xffb7f6ff,0xffa1e3f6,
+ 0xff9de0f4,0xff98e0f4,0xff91dbf5,0xff8cd9f7,0xff88dafb,0xff6ecbf3,0xff4185b0,0xff353542,0xff01011b,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff080686,0xffd2f6fb,0xffd3f7fa,0xffd6f7fa,0xffd7f7fa,0xffd5f8fa,0xffddfeff,0xffd0f3f7,0xff5c8483,0xff165422,0xff1f6026,0xff1d501d,0xff1b4a1a,0xff1a4c22,
+ 0xff4b8979,0xff9adbe9,0xffaaeafb,0xff9ee1f4,0xff99e0f5,0xff94ddf4,0xff88d6f4,0xff81d3f6,0xff7fd5fb,0xff64c2f3,0xff48596d,0xff333341,0xff01011b,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff070687,0xffc7f4f9,0xffccf5fa,0xffcef6f9,0xffcff6f8,0xffcff7f8,0xffccf6fa,0xffd7fdff,0xffb3eced,0xff194b33,
+ 0xff184a1b,0xff1a4a1a,0xff0e3c0d,0xff518d79,0xffc1fbff,0xffacecfc,0xff9fe1f5,0xff9bdff4,0xff97def4,0xff87d5f2,0xff6ac5ee,0xff6ec8f3,0xff72ccf8,0xff5f9bc3,
+ 0xff454551,0xff30303e,0xff010119,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff090689,0xffb0eaf9,0xffc2f3f9,0xffc2f2f9,0xffbbf0f8,0xffc1f1f7,
+ 0xffc5f3f8,0xffc9f7fc,0xffb2e9ed,0xff195742,0xff15441e,0xff154116,0xff0b3010,0xff72b4b5,0xffb2f3ff,0xffa1e3f5,0xff9ce0f4,0xff97def4,0xff92dcf4,0xff79cff2,
+ 0xff5ebeed,0xff6cc7f5,0xff63b5e5,0xff585d6a,0xff40404d,0xff2d2d3c,0xff010118,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff0a068a,0xffcdecfc,
+ 0xfface9fa,0xffb3edf9,0xff8eddf9,0xff92e0f7,0xffb6edf7,0xffbef3fb,0xffb3eff6,0xff206254,0xff0c3810,0xff2b664e,0xff76bac2,0xff9ce4f7,0xff9fe3f8,0xff9adff4,
+ 0xff95ddf3,0xff91dbf4,0xff8edbf5,0xff82d3f6,0xff74c9f5,0xff63bdf1,0xff67798c,0xff52525e,0xff3c3c4a,0xff292938,0xff010117,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff0a068a,0xff0a068a,0xff080688,0xff060587,0xff060587,0xff050586,0xff070586,0xff070688,0xff070688,0xff02033b,0xff01010f,0xff04045f,
+ 0xff07068a,0xff060587,0xff060585,0xff060584,0xff060584,0xff060585,0xff050586,0xff050586,0xff040480,0xff050359,0xff04023c,0xff030230,0xff020125,0xff02011d,
+ 0xff010116,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Clock_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff040264,0xff040263,0xff040263,0xff040262,
+ 0xff040262,0xff040261,0xff040261,0xff040260,0xff04025f,0xff04025f,0xff04025e,0xff03025d,0xff03025c,0xff03025b,0xff030259,0xff030259,0xff020158,0xff020156,
+ 0xff020155,0xff020154,0xff020152,0xff010151,0xff010150,0xff01004e,0xff01004c,0xff00004a,0xff000047,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff040262,0xff6a68b6,0xff6765b4,0xff6563b2,0xff6260b0,0xff5f5dad,0xff5b59aa,0xff5957a9,0xff5655a7,0xff5452a6,0xff504ea4,0xff4c4aa1,0xff4946a0,0xff46439f,
+ 0xff413e9d,0xff3e3b9d,0xff38359b,0xff312e9a,0xff2c2897,0xff272396,0xff211e94,0xff1b1891,0xff161290,0xff0e0a8c,0xff0a0688,0xff090683,0xff000045,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff040261,0xff6361b1,0xff5f5dae,0xff5a58a9,0xff5453a5,0xff504ea1,0xff4b4a9e,0xff47459a,0xff454499,0xff424096,
+ 0xff3f3d95,0xff3d3a93,0xff393792,0xff363491,0xff343291,0xff322f92,0xff2d2a91,0xff282591,0xff242090,0xff1f1b90,0xff1a178f,0xff14108d,0xff0d098a,0xff0a0687,
+ 0xff090683,0xff09057e,0xff000042,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff04025e,0xff5a58a9,0xff5250a3,0xff4a499d,0xff474778,0xff49495b,
+ 0xff4e4e46,0xff555539,0xff5c5c33,0xff5f5f38,0xff64633d,0xff686842,0xff64654e,0xff5c5c5b,0xff504f6a,0xff3c3a77,0xff222085,0xff1f1c86,0xff1a1787,0xff171589,
+ 0xff120f89,0xff0c0988,0xff0a0685,0xff090682,0xff09057e,0xff09057a,0xff00003f,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff030259,0xff4c4a9e,
+ 0xff48466f,0xff4b4a45,0xff565626,0xff93936b,0xffc0c0a4,0xffdfdfce,0xfff2f2e9,0xfff4f4ef,0xfff8f9f4,0xfff4f4ec,0xffe4e4d5,0xffcdcdb6,0xffacac8e,0xff828260,
+ 0xff62626a,0xff3d3b74,0xff12107c,0xff0f0c7f,0xff0b0880,0xff090581,0xff090680,0xff09067d,0xff090579,0xff080575,0xff00003d,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff03024b,0xff484853,0xff525225,0xff9e9e7a,0xffd9d9c6,0xffffffff,0xffffffff,0xfffbfbf9,0xffd4d4c1,0xffb6b696,0xffc3c3a9,0xffeeeee7,
+ 0xffffffff,0xffffffff,0xffffffff,0xffe6e6d7,0xffbfbfa6,0xff8d8d71,0xff585774,0xff1c1a75,0xff070478,0xff070579,0xff080579,0xff090578,0xff090575,0xff080571,
+ 0xff00003a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff030225,0xff727244,0xffc6c6aa,0xfff8f8f5,0xfff8f8f5,0xfffdfdfd,0xffffffff,0xfff2f2ec,
+ 0xffb4b391,0xffb0b08c,0xffb2b38f,0xffd2d2bd,0xffffffff,0xfffffffe,0xfffefefe,0xfffbfbf9,0xfffbfbf9,0xffddddcc,0xffadae93,0xff6d6c7b,0xff242273,0xff070470,
+ 0xff080472,0xff080572,0xff080570,0xff08056c,0xff000038,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff05032c,0xffd5d5c5,0xffe7e8df,0xffbcbca3,
+ 0xffb2b292,0xffd8d8c7,0xfffefefd,0xfff4f4f0,0xffb4b492,0xffa8a88d,0xffb4b490,0xffd2d2bb,0xfffffffe,0xfff7f7f2,0xffd7d7c3,0xffc6c6ac,0xffdfdfd1,0xfffcfcfa,
+ 0xffe6e6dd,0xffbcbca6,0xff737382,0xff1c1a6d,0xff07046a,0xff07046c,0xff07056a,0xff080567,0xff000036,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff08056a,0xfffcfcfb,0xffcdcdbb,0xffa7a784,0xffabab88,0xffb9b998,0xfff9f9f7,0xfff8f8f7,0xffcecebc,0xff77768f,0xffc2c2a8,0xffeaeae3,0xfffdfdfd,0xffddddca,
+ 0xffbbba96,0xffb7b792,0xffb8b796,0xffedece4,0xfffffffe,0xffe7e7df,0xffbdbca8,0xff656481,0xff050361,0xff060464,0xff070466,0xff070464,0xff000034,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a0687,0xfffafaf8,0xffddddd0,0xffafaf8e,0xffafaf8b,0xffc8c7ad,0xfffafaf7,0xfff3f3f3,0xffe7e7e6,0xff605da8,
+ 0xffe3e3e1,0xfff2f2f2,0xfffcfcfa,0xffd6d5bc,0xffbfbf9a,0xffbcbb96,0xffb7b793,0xffe4e4d8,0xfffffffe,0xffffffff,0xffe6e6db,0xffb2b2a1,0xff434174,0xff06045d,
+ 0xff06035f,0xff06045e,0xff000032,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08055f,0xffd8d8ca,0xffeeeee7,0xffdfdfd1,0xffd6d6c3,0xfff0f0e8,
+ 0xfffefefd,0xffefefef,0xffdddddd,0xff312e97,0xffd7d7d9,0xffececec,0xfffcfcfa,0xffe9e9db,0xffc6c6a3,0xffbfbf9a,0xffc5c4a6,0xfff1f1eb,0xfff9f9f6,0xfffbfbf9,
+ 0xfffcfcfc,0xffdadacc,0xff848491,0xff060455,0xff060358,0xff060458,0xff00002f,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff060443,0xffacac8d,
+ 0xffe4e4d9,0xfffefefd,0xfffdfdfc,0xffffffff,0xfffefefe,0xffececec,0xffd4d4d4,0xff17148e,0xffb2b2c5,0xffe6e6e6,0xfffcfcfc,0xfffbfbf8,0xffeeeee3,0xffe5e5d5,
+ 0xfff0f0e8,0xffe2e2d4,0xffc0bfa1,0xffbebea1,0xffe0e0d4,0xffeeeee7,0xffc7c6b7,0xff39386c,0xff050351,0xff050353,0xff00002c,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff060444,0xffadad8e,0xffe3e3d8,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffe8e8e8,0xffc5c5ca,0xff0a068a,0xff908fb3,0xffdfdfdf,
+ 0xfff9f9f9,0xffffffff,0xfffefefd,0xffffffff,0xfff9f9f5,0xffc7c7a9,0xffb3b38f,0xffaeae8a,0xffb9b99c,0xfff3f3ef,0xffdeddd1,0xff6b6a86,0xff04034b,0xff05034d,
+ 0xff00002a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080560,0xffd9d9cb,0xfff7f7f3,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xffe3e3e3,
+ 0xffa7a7ba,0xff0a068a,0xff7271a6,0xffd9d9d9,0xfff7f7f7,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfa,0xffd2d2ba,0xffb4b490,0xffafaf8c,0xffc2c1a8,0xfff5f5f1,
+ 0xffedece5,0xff9797a2,0xff040346,0xff050249,0xff000028,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a0687,0xfffdfdfd,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfffafafa,0xffdfdfdf,0xff8c8bad,0xff0a068a,0xff57559b,0xffd4d4d4,0xfff4f4f4,0xffffffff,0xffffffff,0xffffffff,0xfffefefd,0xfff2f2ea,
+ 0xffd5d5c1,0xffcfcfba,0xffe9e9e0,0xfffdfdfc,0xfff7f7f2,0xffbdbcbc,0xff040242,0xff040245,0xff000026,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffdadada,0xff706fa1,0xff0a068a,0xff3b3992,0xffcecece,0xfff1f1f1,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfc,0xffefefe8,0xffd7d7c7,0xffe0e0d4,0xfff2f2ed,0xffd8d8d1,0xff03023e,0xff040242,0xff000024,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff5f5f5,0xffd6d6d6,0xff5a5899,0xff0a068a,
+ 0xff2a278e,0xffcacaca,0xffefefef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff9faf7,0xffc5c5ab,0xffa7a784,0xffa2a280,0xffbebfaa,0xffd6d6d0,
+ 0xff03023a,0xff04023f,0xff000023,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xfff5f5f5,0xffd7d7d7,0xff494696,0xff0a068a,0xff15118b,0xffc3c3c3,0xffe4e4e4,0xfff5f5f5,0xfff8f8f8,0xfffcfcfc,0xfffefefe,0xffffffff,0xfff6f6f1,0xffb2b292,
+ 0xffa5a482,0xff9f9f7d,0xff9f9f81,0xffd3d4cf,0xff030239,0xff04023c,0xff000022,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff8f8f8,0xffdddddd,0xff5c5a9f,0xff0a068a,0xff2b288f,0xffb9b9b9,0xffcbcbcb,0xffd6d6d6,0xffdddddd,0xffe9e9e9,
+ 0xfff2f2f2,0xfff8f8f8,0xfff8f8f6,0xffd1d1bf,0xffa7a786,0xffa1a180,0xffbdbdac,0xffdfdfdc,0xff030238,0xff04023c,0xff000021,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffe9e9e9,0xffcacace,0xff272492,0xff9595ac,0xff8c8ba8,
+ 0xff1c188e,0xff4b4898,0xff8786aa,0xffc8c8c8,0xffd8d8d8,0xffe6e6e6,0xfff1f1f1,0xfff1f1ee,0xfff2f2ee,0xfff5f5f1,0xfff8f8f5,0xffd0d0d4,0xff030238,0xff04023c,
+ 0xff000021,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfff5f5f5,
+ 0xffebebeb,0xffd0d0d7,0xffcccccc,0xff3c3996,0xff0a068a,0xff0a068a,0xff0a068a,0xff16128d,0xff5350a0,0xff9b9abe,0xffcfcfc6,0xffc3c3b1,0xffe3e3db,0xfffefefe,
+ 0xfffafaf8,0xffadacba,0xff030239,0xff04023c,0xff000022,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffafafa,0xfff2f2f2,0xffe3e3e3,0xffa1a0bd,0xff4e4c9b,0xff4a4796,0xff4a4897,0xff4e4c9b,0xff5350a0,0xff5654a2,
+ 0xff504e88,0xff777778,0xffaaaa90,0xfff8f8f7,0xfff9f9f6,0xff7e7e96,0xff040239,0xff04033d,0xff000022,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xfff5f5f5,0xffe7e7e7,0xffdadada,0xffd3d3d3,
+ 0xffd1d1d1,0xffd4d4d4,0xffdadada,0xffd7d7d5,0xff969678,0xff919171,0xff9a9a7b,0xffededea,0xfff9f9f8,0xff45456b,0xff04023b,0xff04033e,0xff000023,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,
+ 0xfffdfdfd,0xfff9f9f9,0xfff5f5f5,0xfff3f3f3,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xffefefee,0xffbebeac,0xff9b9b7d,0xffc1c1b1,0xfff3f3f1,0xffacabbb,0xff040339,
+ 0xff04023d,0xff040340,0xff000024,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff0a068a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafaf8,0xffe3e3da,0xffd7d7ca,0xffecece5,0xfff6f6f3,
+ 0xfff9f9f8,0xfff6f5f6,0xff585779,0xff04023a,0xff04033e,0xff050342,0xff000024,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff090575,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff3f3f0,0xffc8c8b7,
+ 0xff9d9e7f,0xff969575,0xffc2c2b0,0xfff0f0f0,0xfffdfcfc,0xff8f8fa5,0xff030238,0xff04023d,0xff040341,0xff050342,0xff000025,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff07045b,0xff090577,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,0xff0a068a,
+ 0xff0a068a,0xff0a0689,0xff090574,0xff060444,0xff06033c,0xff06033b,0xff060448,0xff0a0684,0xff070465,0xff01012c,0xff000020,0xff000022,0xff000024,0xff000025,
+ 0xff000026,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb CloseButton_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x3edcdcdc,0x93dbdbdb,0xd5dedede,0xfadcdcdc,0xd8d1d1d1,0x9ec8c8c8,0x509d9d9d,0xc000000,0x3000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x60dcdcdc,0xdbe3e3e3,0xffe2e2e2,0xffd3d3d3,0xffcecece,0xffcdcdcd,0xffd7d7d7,0xe6c5c5c5,0x838d8d8d,0x18000000,0x4000000,0xffffff,
+ 0xffffff,0x3edddcdc,0xdbdadada,0xffcbcbcb,0xff353535,0xff888888,0xffc2c1c2,0xff878687,0xff343434,0xffb1b2b1,0xec9e9d9e,0x75595959,0x18000000,0x3000000,
+ 0xffffff,0x94d5d6d5,0xffd1d0d0,0xff8c8c8c,0xff000000,0xff000000,0xff5a5a5a,0xff000000,0xff000000,0xff868786,0xffabaaaa,0xc8616161,0x3d000000,0xc000000,
+ 0xffffff,0xd5cbcbcb,0xffbbbbbb,0xffadadad,0xff7a7a7a,0xff000000,0xff000000,0xff000000,0xff777777,0xffb1b1b1,0xffb1b1b1,0xef616161,0x61000000,0x1a000000,
+ 0xffffff,0xfabfbfbf,0xffababab,0xffa4a4a4,0xff7a7a7a,0xff000000,0xff000000,0xff000000,0xff747474,0xffaeaeae,0xffa2a2a2,0xfd5d5d5d,0x7c000000,0x25000000,
+ 0xffffff,0xd9b0b0b0,0xffa0a0a0,0xff7d7d7d,0xff000000,0xff000000,0xff4a4a4a,0xff000000,0xff000000,0xff7a7a7a,0xff8c8c8c,0xf2484848,0x85000000,0x2b000000,
+ 0xffffff,0xa0949494,0xff9b9b9a,0xff959696,0xff383838,0xff6a6a6a,0xffa1a1a0,0xff6e6e6e,0xff353535,0xff969796,0xff6a696a,0xdf363636,0x7c000000,0x25000000,
+ 0xffffff,0x516f6f6f,0xe7818181,0xff8d8d8d,0xff949494,0xff999a9a,0xff9b9b9b,0xff9e9e9e,0xff8f8f8f,0xff737273,0xf5414141,0xbb1a1a1a,0x61000000,0x1a000000,
+ 0xffffff,0xc000000,0x84505050,0xed626262,0xff6f6e6e,0xff7b7b7a,0xff7d7d7d,0xff767576,0xff636263,0xf5414140,0xcd1f1f1f,0x83000000,0x3d000000,0xc000000,
+ 0xffffff,0x3000000,0x18000000,0x762f2f2f,0xc93b3b3b,0xf0404040,0xfd464646,0xf3393939,0xdf2a2a2a,0xbb161616,0x83000000,0x4b000000,0x18000000,0x3000000,
+ 0xffffff,0xffffff,0x4000000,0x18000000,0x3d000000,0x61000000,0x7c000000,0x85000000,0x7c000000,0x61000000,0x3d000000,0x18000000,0x4000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x3000000,0xc000000,0x1a000000,0x25000000,0x2b000000,0x25000000,0x1a000000,0xc000000,0x3000000,0xffffff,0xffffff
+};
+
+static const QRgb DateBook_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff0b471e,0xff0b471e,0xff0b471e,0xff0b471e,
+ 0xff0b461e,0xff0b461e,0xff0b461d,0xff0b451d,0xff0a441c,0xff0a431c,0xff0a411b,0xff093f1a,0xff093d19,0xff083a17,0xff083716,0xff073514,0xff073213,0xff062e11,
+ 0xff052b0f,0xff05280e,0xff04250c,0xff03220b,0xff031f09,0xff021708,0xff011305,0xff011705,0xff011504,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff0b471e,0xffd8d9d8,0xffd7d8d8,0xffd4d7d5,0xffd2d4d2,0xffced2cf,0xffc9cecb,0xffc4cbc6,0xffbdc6bf,0xffb4bfb8,0xffabb9af,0xffa0b0a5,0xff93a699,0xff879d8d,
+ 0xff7a9481,0xff6c8975,0xff5e7f69,0xff52775d,0xff466c52,0xff3a6347,0xff2b4e37,0xff465658,0xff9492ae,0xffe1daff,0xff6a6b7f,0xff0d3a1b,0xff011404,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff0b461e,0xffd4d7d5,0xffd1d3d2,0xffccd0cd,0xffc5ccc7,0xffbfc6c1,0xffb6c1b9,0xffaebab2,0xffa3b3a7,0xff97ab9d,
+ 0xff8aa191,0xff7e9785,0xff708d78,0xff61836c,0xff567961,0xff4a7056,0xff3f684b,0xff2b4e35,0xff4a5c59,0xff7d7f95,0xffd9d2fd,0xffd3ccf2,0xffcfc8ee,0xffcac3ef,
+ 0xffaba6c9,0xff072510,0xff011303,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff0b451d,0xffccd1ce,0xffc4cbc6,0xffbac4bd,0xffb1bdb4,0xffa5b4aa,
+ 0xff9aada0,0xff8ea495,0xff819b89,0xff73917d,0xff678771,0xff597d65,0xff4d7458,0xff406b4e,0xff2e533b,0xff354c42,0xff8a8ba1,0xffb6aed4,0xffc4bde8,0xffc1bbe8,
+ 0xffbdb6d9,0xffbbb7d9,0xffbbb5da,0xffb9b2dc,0xffcfc9f1,0xff23322f,0xff001103,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff0a431c,0xffc0c7c2,
+ 0xffb2beb5,0xffa2b3a7,0xff93a799,0xff859d8c,0xff769480,0xff698a74,0xff5c8168,0xff50785c,0xff436f52,0xff355d42,0xff2e463b,0xff83889a,0xffb8b3d9,0xffd8d0fb,
+ 0xffc2bae2,0xffbcb7db,0xffb4afd3,0xffb7b0d5,0xffbcb6d7,0xffbbb4dc,0xffb0aad3,0xffc0b8e1,0xffd3cdef,0xff6a6a7b,0xff000e03,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff0a411b,0xffaebbb2,0xff98ac9e,0xff849d8c,0xff71907b,0xff61846b,0xff527b5f,0xff467154,0xff396346,0xff344d41,0xff58626a,0xffbfb8df,
+ 0xffcfcaf5,0xffc2bde6,0xff908aaa,0xffb5afd3,0xffccc4ea,0xffc1bee1,0xffc1bbdc,0xffbeb8db,0xffbab2da,0xffbeb9dd,0xffc5c0e6,0xffbdb8e0,0xffbfb9df,0xffb9b4d5,
+ 0xff000a02,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff093e19,0xff98ac9e,0xff7d9886,0xff648770,0xff51785d,0xff3d664a,0xff325340,0xff57626a,
+ 0xffbdb8d8,0xffc0bae2,0xffccc5ed,0xffc0b9e2,0xffbab2d8,0xff34303f,0xff33313d,0xff9c95b1,0xffb1a8ce,0xffa49fc1,0xffb5afd6,0xffbfb8e1,0xffb8b2db,0xffc6c2e9,
+ 0xffa9a5c7,0xffafa8c9,0xffc1bbe3,0xffd0c9f1,0xff020f06,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff083a17,0xff829d8b,0xff63856e,0xff3b5945,
+ 0xff626d76,0xff9390ab,0xffcec8f0,0xffccc6f1,0xffc1badd,0xffc0badd,0xffb9b2d2,0xffb1a7c7,0xffbfb7d6,0xff5d5c6e,0xff464356,0xffaba3c5,0xffc3bddf,0xffc4c0e7,
+ 0xffcdcaf5,0xffb5afd5,0xff9f96b0,0xff82777f,0xff5a4b38,0xff9f959f,0xffc9c2ee,0xffd5cff7,0xff062814,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff073615,0xff6f8e79,0xff4d635a,0xffe7e1ff,0xffc4bfe6,0xffc4bde5,0xffb5b0d4,0xffb8b3d5,0xffb9b2d7,0xffb3accc,0xffbab3d1,0xffb4abd2,0xffc6c0e7,0xffd5cff2,
+ 0xffcec8ef,0xffc6c0e9,0xffb3aed4,0xff8f899e,0xff83787e,0xff726767,0xff6f5d43,0xffaaa1b5,0xff56432a,0xff948687,0xffc3bee8,0xffc7c0e2,0xff0a3c1e,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff073313,0xff60856d,0xff7a7b89,0xffbdb7da,0xffbab5db,0xffbdb8dc,0xffb9b2d7,0xffbdb7dd,0xffc5bee6,0xffc0bae0,
+ 0xffc9c3e8,0xffc5bfe6,0xffb7b4db,0xffafabce,0xffa5a0c4,0xff847c8e,0xff7a7074,0xff999098,0xff5e4f41,0xff766866,0xff716458,0xffcecaee,0xff746a76,0xff8d7f7c,
+ 0xffbfbade,0xffb6b0d3,0xff0b4221,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff063112,0xff4f615b,0xffb1aac4,0xffa49ec1,0xffb9b3dc,0xffc8c1e7,
+ 0xffbeb9dd,0xffbbb5dd,0xff9f97ac,0xffc7c1e1,0xffb7b2d3,0xffb8b2d7,0xff79707c,0xff615546,0xff8b828f,0xff655850,0xff6c5e50,0xff756859,0xff655545,0xff7c6e61,
+ 0xffa097a7,0xffc5c2eb,0xff8f8799,0xffa79fb5,0xffb7b2dd,0xffbfbbe0,0xff0b4322,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff063012,0xff43594c,
+ 0xffb4aecd,0xffa59dbc,0xffcbc5ea,0xffbdb6db,0xffbbb5dc,0xffb0abd3,0xff4e4034,0xff9c939a,0xff83787e,0xff786a5d,0xff817675,0xff6f6254,0xff877a71,0xff7f757b,
+ 0xff6c5b45,0xffa79da9,0xffafa6c2,0xffc7c2eb,0xffa9a4d2,0xff7f7585,0xff786c68,0xff6e5e54,0xff7d6f6f,0xffb7aed2,0xff0a3f20,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff063112,0xff557861,0xff8581a0,0xff9f97b5,0xffc0badd,0xffbdb7d8,0xffb4add0,0xffbfbaea,0xff716878,0xff75665f,0xff887e8d,0xff5f4e36,
+ 0xff736458,0xff867b77,0xffa195a0,0xffb1a9cb,0xffc6bfe2,0xffc6c0e7,0xffc6c2ea,0xff787082,0xff4f3d2c,0xff523d1d,0xff513d1a,0xff624b27,0xff604c2a,0xff74624a,
+ 0xff0a3a1c,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff073213,0xff5f816a,0xff445454,0xffb9b0cd,0xffa39dba,0xffbeb9dd,0xffc4c0e3,0xffafaac7,
+ 0xff6c6267,0xff615440,0xff8d8087,0xff7f7067,0xffc4bccf,0xffd6d4f8,0xffd6d1fe,0xffd2cbf2,0xffc1bbde,0xffc9c1eb,0xff7d7488,0xff3e2b0e,0xff67502e,0xff7a684f,
+ 0xff8f817f,0xff74645c,0xff624e33,0xff604b27,0xff082f13,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff073414,0xff698873,0xff405b4c,0xffb6b0d1,
+ 0xffaea6c3,0xffb9b3dc,0xffc0badf,0xffbcb5d1,0xff776964,0xffaca0a8,0xffd2cef9,0xffc4bfe8,0xffa199ad,0xff8c8186,0xff7b7073,0xff9b95ac,0xffcdcaf5,0xffbbb7e0,
+ 0xff4f4339,0xff624b28,0xff736047,0xffbbb5cc,0xffcbc6f5,0xffaca6d3,0xff544336,0xff5b4525,0xff072b11,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff083615,0xff748f7d,0xff4f745b,0xff908ea8,0xffaca2bd,0xffb8b0d6,0xffb9b0d5,0xffbeb6d8,0xffcac3e6,0xffcbc6ee,0xff817a91,0xff554737,0xff544122,0xff533f1e,
+ 0xff4d3817,0xff5a472c,0xff8b7c74,0xffb5b0d4,0xff4c4035,0xff51390e,0xff837155,0xffd7d3f8,0xffc4bee7,0xff797286,0xff56432d,0xff715d3d,0xff093a1a,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff083816,0xff7e9585,0xff5b7c66,0xff435152,0xffbab3d3,0xffaca3c1,0xffb8b0d4,0xffb8b3d6,0xffc6bfe1,0xff696172,
+ 0xff4b391c,0xff685432,0xff6b5739,0xff6f5d44,0xff685336,0xff675336,0xff5e4724,0xffa09699,0xff8a7e7c,0xff97897e,0xffb7aebc,0xffb5adce,0xff5b4e44,0xff5c4826,
+ 0xff675130,0xff745e40,0xff061f0a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff083a17,0xff899c8e,0xff668470,0xff3b5945,0xffb8aed6,0xffa49eba,
+ 0xffbfb7d9,0xffc5bfe3,0xffaea9cd,0xff4b3b31,0xff604c2e,0xff604c2f,0xffaa9ea2,0xffcdc8ed,0xff81757c,0xff5a462c,0xff654f31,0xff84725d,0xffccc5e8,0xffd2ccef,
+ 0xffd4cff4,0xffb7b2d3,0xff5c4e3d,0xff6e5835,0xff826e5b,0xff6b573a,0xff051805,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff093b18,0xff91a297,
+ 0xff708a78,0xff4e7158,0xff767689,0xffada7c4,0xffa8a0c1,0xffbeb5dc,0xff9890b1,0xff51402b,0xff5e492a,0xff7a6854,0xffcbc8eb,0xffd4d0fe,0xff9892b3,0xff54422b,
+ 0xff634d2c,0xff908068,0xffc2bae1,0xffb7aed2,0xffc3bbdf,0xffc3bee2,0xffb8b1ca,0xffc0b7ce,0xffc3bbe2,0xff867c8c,0xff041605,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff093d19,0xff9aa79e,0xff7b9282,0xff597862,0xff455452,0xffa7a0bf,0xffa79fbf,0xffc1bae0,0xff9893b4,0xff453521,0xff4f3a16,0xff7a6850,
+ 0xffc4bcde,0xffc7c0ef,0xff797182,0xff544222,0xff5f4a2b,0xffa79ca2,0xffc4bce3,0xffb7afd0,0xff9791a9,0xff9a8e98,0xffccc3e6,0xffd0c6ec,0xffcdc3ed,0xff807a92,
+ 0xff041606,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff093e19,0xffa2ada5,0xff85988b,0xff64806d,0xff375542,0xffaaa2c1,0xffa59ebb,0xffc4bde4,
+ 0xffaea9cd,0xff7c6f69,0xff95877c,0xffb5abc2,0xffc9c0eb,0xff918bad,0xff423426,0xff5b4523,0xff816f57,0xffcac3e0,0xffc9c3e5,0xff6e656a,0xff463314,0xff553e1f,
+ 0xff988b93,0xffada5c7,0xff8d8495,0xff4f4135,0xff051605,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff093e1a,0xffa8b0ab,0xff8e9e93,0xff6f8777,
+ 0xff4c6c56,0xff68687e,0xffb2acc9,0xffafa8c6,0xffc5bddf,0xffc6bfdf,0xffcdc8f3,0xffd4cdf5,0xffbdb7dc,0xff453933,0xff4d3817,0xff6e593d,0xffbdb3c6,0xffcac5ec,
+ 0xffc9c1e8,0xff8b8196,0xff564121,0xff634a28,0xff5e482c,0xff5b4a35,0xff4d391e,0xff5a421f,0xff051805,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0a3e1a,0xffaeb4af,0xff97a49a,0xff768b7c,0xff55715e,0xff3c4d47,0xffc4bee1,0xffa8a1c0,0xffbfbadb,0xffb6b0d3,0xffb9b3d7,0xffc0bce1,0xff655b61,0xff564122,
+ 0xff645130,0xffbcb1bc,0xffcac3ed,0xff9d99b6,0xff726974,0xff978b92,0xff91878b,0xff685235,0xff634b27,0xff68512a,0xff6c5432,0xff7d6950,0xff093517,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a3e1a,0xffb1b7b3,0xff9aa59e,0xff7d8e83,0xff5c7463,0xff36503e,0xff9d96b5,0xffb2a8ce,0xffb5aed2,0xffbab6d6,
+ 0xffc2bcdf,0xff746f82,0xff473316,0xff665031,0xff837268,0xff8c829a,0xff665758,0xff594831,0xff59431e,0xff69532d,0xffb6aec5,0xffc2b8d3,0xff9e9096,0xffa3969a,
+ 0xffb6adbc,0xffcac1dd,0xff0a3e1f,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff0a3e1a,0xffb2b6b3,0xff9da5a0,0xff828f86,0xff637869,0xff43604d,
+ 0xff707283,0xffafaaca,0xffb2accb,0xffb6b1d4,0xffb5afd8,0xff4f423f,0xff5c4624,0xff655135,0xff69553e,0xff584528,0xff57401b,0xff59431f,0xff644e2f,0xff7a6953,
+ 0xffc1b6c5,0xffc8c2e0,0xffc2bbdf,0xffc8bfe8,0xffc7c0de,0xffc6bfdc,0xff0a3b1d,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff0a3e1a,0xffafb2af,
+ 0xff9da29e,0xff869089,0xff67796d,0xff496352,0xff2c3c36,0xffbbb5d7,0xffa49dbb,0xffc1bae1,0xffa8a1c3,0xff483929,0xff604c2d,0xff604c30,0xff614d2a,0xff6a5533,
+ 0xff7c6a56,0xff938587,0xffb4abc0,0xffc5bbdb,0xffbdb3cd,0xffb2a7c4,0xffb4acc7,0xffa398b6,0xffaea5bd,0xffb2a8c2,0xff09381b,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff093c19,0xff093818,0xff083416,0xff072f13,0xff05280f,0xff04210c,0xff021708,0xff08311a,0xff09371b,0xff09391d,0xff09351b,0xff041306,
+ 0xff051906,0xff061f0b,0xff072a11,0xff093518,0xff0a3e1e,0xff0a3b1e,0xff09381c,0xff09371b,0xff09341a,0xff09351b,0xff09371b,0xff09361b,0xff09371b,0xff09381c,
+ 0xff09371b,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb DateTime_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x34000000,0x37000000,0x38000000,0x37000000,0x34000000,0x2f000000,0x29000000,0x21000000,0x19000000,0x12000000,0xb000000,0x6000000,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x5d3f5669,0x9352718b,0xbe5a7e9c,0xde5c85a5,0xf35c88ac,0xfe5a87ad,0xf3507fa5,0xe047759a,0xc43a6689,0x9f2c5371,0x701b354a,0x3f000000,0x33000000,0x26000000,
+ 0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x24000000,0x724a6577,0xbf587790,0xf75e7e98,0xff53728b,0xff476379,0xff3e586e,0xff39536a,0xff365268,0xff335169,0xff335470,0xff325a7a,0xff326085,
+ 0xf82f628a,0xc8245277,0x89163652,0x46000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x49384d5b,0xab5b798f,0xf762819b,0xff4f6a80,0xff3f5465,0xff435662,0xff74837b,0xffa4af93,0xffcad1a7,0xffcad1a7,
+ 0xffc9d1a8,0xffbbc5a2,0xff93a492,0xff4d6a77,0xff234d6f,0xff23547c,0xf81f5684,0xbd134268,0x6d071c2c,0x3f000000,0x2a000000,0x1a000000,0xe000000,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x614a6174,0xca617f99,0xff5d7991,0xff44596b,0xff475964,0xffb4bc9b,0xfff2f4bb,
+ 0xfffeffc1,0xfffeffc1,0xffcfd0a6,0xffbabc9b,0xfff2f4ba,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffe2e8b6,0xff708c8b,0xff174b74,0xff155080,0xd80e426d,0x8508233a,
+ 0x47000000,0x2e000000,0x1b000000,0xe000000,0x6000000,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x614a6174,0xd465839c,0xff5a768c,0xff3e5161,
+ 0xff78867d,0xfff2f4bb,0xffd5d7aa,0xffecedb7,0xfffeffc1,0xfffafbbf,0xffadaf93,0xffadaf93,0xffbbbd9b,0xfffeffc1,0xfffeffc1,0xffd5d7aa,0xffebecb6,0xfffeffc1,
+ 0xffd2dcb2,0xff2c5d7d,0xff0f4b7c,0xe00d426c,0x8a071f36,0x49000000,0x2e000000,0x1a000000,0xd000000,0x5000000,0x3000000,0xa000000,0x16000000,0x48354a59,
+ 0xca64819a,0xff5b778e,0xff3e5060,0xff859183,0xfffeffc1,0xffc1c39f,0xffadaf93,0xffadaf93,0xfffbfcbf,0xfffeffc1,0xffadaf93,0xff0f448d,0xff0f448d,0xff96aeaa,
+ 0xffc2c49f,0xffadaf93,0xffadaf93,0xfff8f9be,0xfffeffc1,0xffeff3bc,0xff3b6a84,0xff0f4a7a,0xdb0d3e64,0x7c061723,0x46000000,0x2a000000,0x16000000,0xa000000,
+ 0x6000000,0x11000000,0x23000000,0xaa5e7c93,0xff617f98,0xff415465,0xff859183,0xfffeffc1,0xfffeffc1,0xffc9cba3,0xffadaf93,0xffadaf93,0xfff9fabe,0xfffeffc1,
+ 0xfffeffc1,0xff0f448d,0xff0f448d,0xffafc1b0,0xffc2c49f,0xffadaf93,0xffadaf93,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffeff4bc,0xff2d6081,0xff124b7a,0xc80d3353,
+ 0x61000000,0x3e000000,0x23000000,0x11000000,0xb000000,0x1b000000,0x6f4e697e,0xf6698ba6,0xff4c6477,0xff606f71,0xfffeffc1,0xfff1f3ba,0xfffeffc1,0xfffeffc1,
+ 0xffdddfae,0xfff2f4ba,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff0f448d,0xff0f448d,0xffc8d4b5,0xfffeffc1,0xffdddfae,0xfff3f5bb,0xfffeffc1,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xffd2ddb4,0xff174d78,0xf9174871,0xa2082134,0x55000000,0x33000000,0x1b000000,0x12000000,0x26000000,0xba6384a0,0xff5c7b95,0xff3b4e5e,0xffcdd3a8,
+ 0xffb3b596,0xffadaf93,0xffc9cba3,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff0f448d,0xff0f448d,0xffcdd9b6,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffbfcbf,0xffadaf93,0xffadaf93,0xffebecb6,0xfffeffc1,0xff749394,0xff1f4f76,0xd8113553,0x6d000000,0x45000000,0x26000000,0x19000000,0x5d3f5669,
+ 0xf56f96b5,0xff4e687d,0xff5e6f70,0xfffeffc1,0xffadaf93,0xffadaf93,0xffb4b697,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffeff3be,0xff0f448d,
+ 0xff0f448d,0xffccd8b6,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffdddfae,0xffadaf93,0xffadaf93,0xffd5d7aa,0xfffeffc1,0xffe3eab8,0xff2a5679,0xfa1b476a,0x9b051724,
+ 0x56000000,0x33000000,0x21000000,0x9352718b,0xff6e97b8,0xff40586b,0xffa7b095,0xfffeffc1,0xffe6e7b3,0xffb4b697,0xffecedb7,0xfffeffc1,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xffccd8b6,0xff0f448d,0xff0f448d,0xffccd8b6,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffc1c39f,0xffc2c49f,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xff587a88,0xff254e70,0xc30c263b,0x67000000,0x3f000000,0x29000000,0xbe5a7e9c,0xff6b94b6,0xff394f61,0xffe5e8b4,0xfffeffc1,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffacbeaf,0xff0f448d,0xff0f448d,0xffcdd9b6,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff9caf9f,0xff2f5674,0xdf15334b,0x75000000,0x4a000000,0x2f000000,0xde5c85a5,0xff6590b3,0xff354c5e,
+ 0xfffeffc1,0xffcfd0a6,0xffbbbd9b,0xfff3f5bb,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff87a2a7,0xff0f448d,0xff0f448d,0xffcdd9b6,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffd1d2a7,0xffbbbd9b,0xfff2f4ba,0xfffeffc1,0xffc3ceac,0xff3c5d79,0xf01c3f59,0x81000000,0x53000000,
+ 0x34000000,0xf35c88ac,0xff5f8cb1,0xff324a5e,0xfffeffc1,0xffadaf93,0xffadaf93,0xffbabc9b,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,
+ 0xff5d819e,0xff0f448d,0xff0f448d,0xffcedab7,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfff1f3ba,0xffadaf93,0xffadaf93,0xffbabc9b,0xfffeffc1,0xffd0d9b1,
+ 0xff44627b,0xfa224360,0x89000000,0x59000000,0x37000000,0xfe5a87ad,0xff5a88ae,0xff2f485c,0xfffeffc1,0xffadaf93,0xffadaf93,0xffd0d1a7,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffcedab7,0xff15488e,0xff0f448d,0xffd5dfb8,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffadaf93,
+ 0xffadaf93,0xffd6d8ab,0xfffeffc1,0xffd2dab1,0xff47647b,0xfe244662,0x8e000000,0x5e000000,0x38000000,0xf3507fa5,0xff5283aa,0xff2d485e,0xfffeffc1,0xfffeffc1,
+ 0xfffafbbf,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff92abaa,0xff3c6797,0xff436c98,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffafbbf,0xfffeffc1,0xfffeffc1,0xffd3dab1,0xff4b667c,0xfb24425b,0x90000000,0x5f000000,0x37000000,0xe047759a,
+ 0xff4c7ea7,0xff2c4b65,0xfff1f3bb,0xfffeffc1,0xfffeffc1,0xfff3f5bb,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff0f448d,
+ 0xff0f448d,0xff0f448d,0xff0f448d,0xff5c809e,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffbfcbf,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffb6c1a7,0xff4d667b,0xf3213b51,
+ 0x8e000000,0x5e000000,0x34000000,0xc43a6689,0xff4378a3,0xff2e5371,0xffbbc6a4,0xfffeffc1,0xffb4b697,0xffadaf93,0xffc1c39f,0xfffeffc1,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xff809da6,0xff164a8f,0xff0f448d,0xff0f448d,0xff0f448d,0xff0f448d,0xffadbeac,0xffadaf93,0xffadaf93,0xffecedb7,0xfffeffc1,
+ 0xfffeffc1,0xff90a099,0xff486074,0xe7193143,0x89000000,0x59000000,0x2f000000,0x9f2c5371,0xff3c739f,0xff2d5b7f,0xff768e8a,0xfffeffc1,0xffadaf93,0xffadaf93,
+ 0xffb4b697,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfff8fbc0,0xff61859f,0xff0f448d,0xff0f448d,0xff2c5a92,
+ 0xffadaf93,0xffadaf93,0xffd5d7aa,0xfffeffc1,0xfff4f6bd,0xff687d89,0xff3b556b,0xd311222f,0x81000000,0x53000000,0x29000000,0x701b354a,0xf7346b98,0xff2d618c,
+ 0xff224d71,0xffe2e8b6,0xffe4e5b2,0xffbabc9b,0xfff3f5bb,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xff7695a3,0xffecf1bd,0xffc2c49f,0xffc1c39f,0xfffeffc1,0xfffeffc1,0xffc6cdad,0xff596f80,0xfc2b4559,0xb6061118,0x75000000,0x4a000000,
+ 0x21000000,0x3f000000,0xc625557b,0xff296391,0xff1f537d,0xff6e8c8d,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffedeeb7,0xffb4b697,0xffc8caa2,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffe4e5b2,0xffb4b697,0xffc9cba3,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfff5f7be,0xff71838d,0xff485f71,
+ 0xe8192d3e,0x93020202,0x67000000,0x3f000000,0x19000000,0x33000000,0x88163752,0xf8225d8d,0xff1b5888,0xff144b76,0xffb3c5a8,0xfffeffc1,0xfffeffc1,0xffb3b596,
+ 0xffadaf93,0xffadaf93,0xfff2f4ba,0xfffeffc1,0xffd0d1a7,0xffbabc9b,0xfff3f5bb,0xfffeffc1,0xffb4b697,0xffadaf93,0xffadaf93,0xfff9fabe,0xfffeffc1,0xfffeffc1,
+ 0xfffeffc1,0xff9ba79e,0xff596d7e,0xfc2c4558,0xc409151f,0x81000000,0x56000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbc14446a,0xff17578b,0xff104e80,
+ 0xff1e537b,0xffd1dcb3,0xfffeffc1,0xffe4e5b2,0xffadaf93,0xffb4b697,0xfffeffc1,0xfffafbbf,0xffadaf93,0xffadaf93,0xffbbbd9b,0xfffeffc1,0xffe6e7b3,0xffadaf93,
+ 0xffb3b596,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffa5b0a2,0xff607383,0xff395165,0xe1122432,0x94020202,0x6c000000,0x45000000,0x26000000,0xb000000,0x1b000000,
+ 0x33000000,0x6c071c2e,0xd70e446e,0xff105083,0xff0f4c7d,0xff1e547d,0xffb3c6aa,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffadaf93,0xffadaf93,
+ 0xffcfd0a6,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffa5b0a2,0xff627584,0xff3e5668,0xee1a2d3f,0xaf040a10,0x7b000000,0x55000000,
+ 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x8508233a,0xe00e436d,0xff104d7e,0xff0f4b7b,0xff134b79,0xff709195,0xffe3e9b8,0xfffeffc1,
+ 0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffd8deb3,0xff869595,0xff5d7181,0xff3d5568,0xf11a3042,
+ 0xbd071018,0x85000000,0x60000000,0x3e000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a071f36,0xdb0d3e64,0xff104978,
+ 0xff144a76,0xff1b4d76,0xff235278,0xff7a9694,0xffbfccab,0xfff2f5bd,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xfffeffc1,0xffeaedb9,0xffb9c3a8,0xff809192,0xff5e7282,
+ 0xff4f6476,0xff334b5f,0xee182b3d,0xbd071018,0x88000000,0x66000000,0x46000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000,
+ 0x2e000000,0x48000000,0x7b041522,0xc80a3052,0xf90f436d,0xff13456e,0xff19496f,0xff244f71,0xff335978,0xff40617d,0xff47667f,0xff4b687f,0xff4c677c,0xff4f687d,
+ 0xff536a7e,0xff536a7c,0xff486072,0xff344d61,0xfc1f3b4e,0xe00e202f,0xaf040a10,0x85000000,0x66000000,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa2061f33,0xd7092f4e,0xfa0e3d62,0xff133f64,0xff1b4567,0xff244a68,
+ 0xff294c69,0xff2b4c66,0xff2b4b65,0xff2b4962,0xff29465d,0xff224058,0xfc18354c,0xe70d2234,0xc305111b,0x94000000,0x7b000000,0x60000000,0x46000000,0x2e000000,
+ 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000,
+ 0x9b041522,0xc2072137,0xde082943,0xef092e4b,0xf9092f4f,0xfe0a304f,0xfa092b48,0xf208253e,0xe5061f33,0xd1051725,0xb5020c14,0x93000000,0x81000000,0x6c000000,
+ 0x55000000,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000,
+ 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000,
+ 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb DocsIcon_data[] = {
+ 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff676767,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffe4e4e4,0xffbebebe,0xffffffff,0xff676767,0x3c000000,0xc000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffdbdbdb,0xff999999,0xffffffff,0xffffffff,0xff676767,0x3c000000,0xc000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xff000000,0xfffdfdfd,0xfffdfdfd,0xffd9d9d9,0xff8d8d8d,0xffffffff,0xffffffff,0xffffffff,0xff676767,0x3c000000,0xc000000,0xffffff,
+ 0xffffff,0xffffff,0xff000000,0xfffcfcfc,0xfffcfcfc,0xffd7d7d7,0xff8c8c8c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff676767,0x3c000000,0xc000000,
+ 0xffffff,0xffffff,0xff000000,0xfff9f9f9,0xfff8f8f8,0xffdddddd,0xffa7a7a7,0xff8a8a8a,0xff8a8a8a,0xff949494,0xffbababa,0xff000000,0x77000000,0x24000000,
+ 0xffffff,0xffffff,0xff000000,0xfff5f5f5,0xfff3f3f3,0xffe9e9e9,0xffd7d7d7,0xffcfcfcf,0xffd0d0d0,0xffd1d1d1,0xffdcdcdc,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xfff0f0f0,0xffededed,0xffebebeb,0xffe9e9e9,0xffe9e9e9,0xffebebeb,0xffededed,0xfff0f0f0,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xffebebeb,0xffe7e7e7,0xffe3e3e3,0xffe2e2e2,0xffe2e2e2,0xffe3e3e3,0xffe7e7e7,0xffebebeb,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xffe5e5e5,0xffe0e0e0,0xffdcdcdc,0xffdadada,0xffdadada,0xffdcdcdc,0xffe0e0e0,0xffe5e5e5,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xffdfdfdf,0xffd8d8d8,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffd3d3d3,0xffd8d8d8,0xffdfdfdf,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xffdfdfdf,0xffd8d8d8,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffd3d3d3,0xffd8d8d8,0xffdfdfdf,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xffffff,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x6b000000,0x24000000
+};
+
+static const QRgb DocumentTypeExcel_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500,
+ 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500,
+ 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,
+ 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,
+ 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500,
+ 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e,
+ 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x2000500,0x6000500,0xd000500,0x18000500,0x29000500,
+ 0x3f000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6,
+ 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0xffffff,0xffffff,0x1000500,0x2000500,
+ 0x6000500,0xe000500,0x1b000500,0x2d000500,0x45000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffafafa,
+ 0xfff4f4f4,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500,
+ 0xffffff,0xffffff,0x1000500,0x2000500,0x7000500,0xf000500,0x1d000500,0x30000500,0x4a000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfff8f8f8,0xfff3f3f3,0xffe7e7e7,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545,
+ 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,0x10000500,0x1e000500,0x32000500,0x4d000500,0xff000000,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff8f8f8,0xfff3f3f3,0xffe6e6e6,0xffd1d1d1,0xffb3b3b3,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000,
+ 0x27000000,0x3b000000,0x55000600,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff6f6f6,0xfff2f2f2,0xffe8e8e8,
+ 0xffd4d4d4,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0x4000000,0x7000000,
+ 0xd000000,0x16000000,0x1e000000,0x2a000000,0x39000000,0x4d000000,0x65000000,0xff000000,0xffe3e3e3,0xffe3e3e3,0xffe5e5e5,0xffe8e8e8,0xffe8e8e8,0xffebebeb,
+ 0xffefefef,0xfff3f3f3,0xfff0f0f0,0xffeaeaea,0xffdddddd,0xffc9c9c9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e,
+ 0x6a000500,0x4e000500,0x7000000,0xf000000,0x1b000000,0x2b000000,0x39000000,0x49000000,0x58000000,0x69000000,0x7e000500,0xff000000,0xffc4c4c4,0xffc4c4c4,
+ 0xffc6c6c6,0xffcccccc,0xffd3d3d3,0xffdbdbdb,0xffe6e6e6,0xffececec,0xffefefef,0xffefefef,0xffe7e7e7,0xffc5c5c5,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b,
+ 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0xc000000,0x19000000,0xfff1656a,0xffec6165,0xffef9699,0xffe56c70,0xffde5157,0xffe26469,
+ 0xffe88b8d,0xffdb4348,0xffe36d72,0xffe67f83,0xffe14b50,0xffe2292f,0xffe3252d,0xffc4c4c4,0xffd7d7d7,0xffe5e5e5,0xffeeeeee,0xfff2f2f2,0xffcfcfcf,0xffa0a0a0,
+ 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x12000000,0x26000000,0xffee6266,0xfff1a8aa,
+ 0xffffffff,0xffedbdbe,0xffcb474b,0xffeababb,0xffffffff,0xffdf9699,0xffedc1c2,0xffffffff,0xffdd787a,0xffd22329,0xffd6232a,0xffa7a7a7,0xffc6c6c6,0xffdcdcdc,
+ 0xffececec,0xffd9d9d9,0xffababab,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500,
+ 0x17000000,0x2f000000,0xffec5e62,0xffe36d71,0xfffefbfb,0xfffefcfc,0xffc87578,0xfffdfcfc,0xfffdfbfb,0xffb94b4f,0xffe6bebf,0xffffffff,0xffcf7477,0xffc22025,
+ 0xffc92227,0xff919191,0xffb6b6b6,0xffd6d6d6,0xffdedede,0xffbdbdbd,0xffa8a8a8,0xffb5b5b5,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7,
+ 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x1b000000,0x37000000,0xffec5a5f,0xffdd5056,0xffecbebf,0xffffffff,0xfff3e7e8,0xffffffff,0xffdab6b6,0xff9e2327,
+ 0xffe2bdbd,0xffffffff,0xffc57375,0xffb41e23,0xffbe2025,0xff7e7e7e,0xffacacac,0xffcecece,0xffcbcbcb,0xffb3b3b3,0xffb1b1b1,0xffe3e3e3,0xfffafafa,0xfff8f8f8,
+ 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x1d000000,0x3c000000,0xffec565b,0xffde4c50,0xffd26265,0xfffefdfd,
+ 0xffffffff,0xfffdfdfd,0xffa0494b,0xff951b1f,0xffdfbbbc,0xffffffff,0xffbf7274,0xffaa1d20,0xffb61e23,0xff737373,0xffa5a5a5,0xffc8c8c8,0xffc0c0c0,0xffb2b2b2,
+ 0xffc5c5c5,0xfff5f5f5,0xfffbfbfb,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x1f000000,0x3e000000,
+ 0xffee5056,0xffe1484c,0xffcb3c40,0xfff6ebeb,0xffffffff,0xfff3e9e9,0xff891a1d,0xff91191d,0xffddbbbc,0xffffffff,0xffbd7274,0xffa41b20,0xffb11d22,0xff6e6e6e,
+ 0xffa2a2a2,0xffc5c5c5,0xffbababa,0xffb2b2b2,0xffcecece,0xfffdfdfd,0xfffcfcfc,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000,
+ 0x90000500,0x6e000500,0x1f000000,0x3d000000,0xffef4c51,0xffe14247,0xffd76468,0xfffffefe,0xffffffff,0xfffefefe,0xffa04f51,0xff8e171b,0xffddbbbc,0xffffffff,
+ 0xffb97174,0xff9f1b1f,0xffab1d22,0xff6d6d6d,0xffa1a1a1,0xffc5c5c5,0xffbdbdbd,0xffaeaeae,0xffc6c6c6,0xfff9f9f9,0xffbcbcbc,0xff868686,0xff7e7e7e,0xff777777,
+ 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3e000000,0xffed464b,0xffdf3c41,0xffefc9cb,0xffffffff,0xfff5eded,0xffffffff,
+ 0xffddc4c4,0xff88171b,0xffdbbbbc,0xffffffff,0xffb57072,0xff95191e,0xffa21b1f,0xff6b6b6b,0xff9f9f9f,0xffc7c7c7,0xffc6c6c6,0xffa8a8a8,0xffadadad,0xffeaeaea,
+ 0xffb9b9b9,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3e000000,0xffec3e42,0xffe4696d,
+ 0xffffffff,0xffffffff,0xffbb7b7d,0xffffffff,0xffffffff,0xffa4575a,0xffdabbbc,0xffffffff,0xffe5d1d2,0xffdbbbbc,0xff9a1a1e,0xff6a6a6a,0xff9d9d9d,0xffc7c7c7,
+ 0xffd4d4d4,0xffa8a8a8,0xff949494,0xffb5b5b5,0xfff0f0f0,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500,
+ 0x1d000000,0x3c000000,0xffe9353c,0xffe77a7e,0xfffdf8f8,0xffe9c9ca,0xff95191d,0xffe2c8c9,0xfffbf8f8,0xffb47173,0xffdabbbc,0xffffffff,0xffffffff,0xffffffff,
+ 0xff96191d,0xff6d6d6d,0xffa0a0a0,0xffc6c6c6,0xffe3e3e3,0xffc5c5c5,0xff8d8d8d,0xff818181,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070,
+ 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000000,0x37000000,0xffe82e34,0xffdc242b,0xffcc353b,0xffbd4043,0xffa31b20,0xffaa3d41,0xff9e2e33,0xff96191d,
+ 0xff95191e,0xff8e171d,0xff8d171b,0xff92191d,0xff981a1e,0xff7a7a7a,0xffa5a5a5,0xffc9c9c9,0xffe4e4e4,0xffeeeeee,0xffb7b7b7,0xff7d7d7d,0xff767676,0xff797979,
+ 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x17000000,0x2f000000,0xffe8272e,0xffdb242a,0xffcd2229,0xffbf1f25,
+ 0xffb31e23,0xffaf1d23,0xffa91d20,0xffa61d20,0xffa41b20,0xff9e1b1f,0xff9c1a1e,0xff9d1a1f,0xffa01a20,0xff8d8d8d,0xffb2b2b2,0xffd1d1d1,0xffe3e3e3,0xfff3f3f3,
+ 0xfff5f5f5,0xffc7c7c7,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x12000000,0x26000000,
+ 0x41000000,0x64000000,0x7f000000,0x98000000,0xa9000000,0xb5000000,0xbf000000,0xff000000,0xff6e6e6e,0xff6d6d6d,0xff737373,0xff7d7d7d,0xff8d8d8d,0xffa6a6a6,
+ 0xffc3c3c3,0xffd7d7d7,0xffe8e8e8,0xffefefef,0xfff7f7f7,0xfff9f9f9,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000,
+ 0x8e000500,0x6d000500,0xc000000,0x18000000,0x2b000000,0x41000000,0x55000000,0x68000000,0x78000000,0x88000000,0x98000000,0xff000000,0xffa3a3a3,0xffa2a2a2,
+ 0xffa5a5a5,0xffadadad,0xffb6b6b6,0xffc4c4c4,0xffd6d6d6,0xffe3e3e3,0xffededed,0xfff2f2f2,0xfff4f4f4,0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,
+ 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x7000000,0xf000000,0x19000000,0x27000000,0x34000000,0x43000000,0x52000000,0x63000000,
+ 0x76000000,0xff000000,0xffcbcbcb,0xffcbcbcb,0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdcdcdc,0xffe6e6e6,0xffececec,0xfff2f2f2,0xfff5f5f5,0xfff6f6f6,0xfff6f6f6,
+ 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000000,0x7000000,0xd000000,0x14000000,
+ 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000600,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,0xfff1f1f1,0xfff3f3f3,
+ 0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500,
+ 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,
+ 0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xff000000,0x73000500,0x58000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x1000500,0x4000500,0x9000500,
+ 0x11000500,0x1d000500,0x2c000500,0x3e000500,0x51000500,0x63000500,0x73000500,0x7f000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500,
+ 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500,
+ 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500,
+ 0x3e000500,0x30000500
+};
+
+static const QRgb DocumentTypeNone_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500,
+ 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500,
+ 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,
+ 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,
+ 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500,
+ 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xfffefefe,0xfffefefe,
+ 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e,
+ 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x3000500,0x7000500,0xe000500,0x19000500,0x2a000500,
+ 0x40000500,0xff000000,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6,
+ 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0x1000500,0x1000500,0x3000500,0x4000500,
+ 0x9000500,0x11000500,0x1e000500,0x2f000500,0x47000500,0xff000000,0xfff9f9f9,0xfffafafa,0xfffafafa,0xfffbfbfb,0xfffafafa,0xfffbfbfb,0xfffafafa,0xfff9f9f9,
+ 0xfff3f3f3,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500,
+ 0x2000500,0x3000500,0x5000500,0x7000500,0xd000500,0x16000500,0x23000500,0x36000500,0x50000500,0xff000000,0xfff3f3f3,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6,
+ 0xfff6f6f6,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff1f1f1,0xffe6e6e6,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545,
+ 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0x4000500,0x6000500,0x9000500,0xd000500,0x13000500,0x1c000500,0x2a000500,0x3e000500,0x57000500,0xff000000,
+ 0xffe7e7e7,0xffe8e8e8,0xffebebeb,0xffeeeeee,0xffeeeeee,0xfff1f1f1,0xfff3f3f3,0xfff3f3f3,0xfff0f0f0,0xffe4e4e4,0xffd0d0d0,0xffb3b3b3,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x8000500,0xb000500,0xf000500,0x15000500,0x1a000500,0x25000500,
+ 0x33000500,0x47000500,0x5f000500,0xff000000,0xffd7d7d7,0xffd9d9d9,0xffdddddd,0xffe1e1e1,0xffe4e5e4,0xffe9eae9,0xffedeeed,0xffefefef,0xffeeeeee,0xffe6e6e6,
+ 0xffd3d3d3,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0xc000500,0x11000500,
+ 0x17000500,0x1e000500,0x25000500,0x30000500,0x3f000500,0x51000500,0x69000500,0xff000300,0xffc0c1c0,0xffc4c5c4,0xffcacaca,0xffd1d1d1,0xffd7d7d7,0xffdfdfdf,
+ 0xffe6e6e6,0xffececec,0xffecedec,0xffe7e8e7,0xffdcdcdc,0xffc8c8c8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e,
+ 0x6a000500,0x4e000500,0x11000500,0x18000500,0x20000500,0x29000500,0x32000500,0x3d000500,0x4c000500,0x5d000500,0x74000500,0xff000300,0xffa5a6a5,0xffacadac,
+ 0xffb4b5b4,0xffbebfbe,0xffc8c8c8,0xffd3d3d3,0xffdedede,0xffe6e6e6,0xffebebeb,0xffebeceb,0xffe4e4e4,0xffc4c4c4,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b,
+ 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0x16000500,0x1f000500,0xf8fefefe,0xf0fcfcfc,0xecfafafa,0xecf8f8f8,0xedf7f7f7,0xeff5f5f5,
+ 0xf1f3f3f3,0xffe8e8e8,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6,0xfff9f9f9,0xfffdfdfd,0xffc7c8c7,0xffd6d6d6,0xffe1e1e1,0xffebebeb,0xffeeeeee,0xffcccccc,0xff9f9f9f,
+ 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x1b000500,0x26000500,0xf0fcfcfc,0xe0f6f6f6,
+ 0xd8efefef,0xd8ebebeb,0xdbe8e8e8,0xdfe3e3e3,0xe3e0e1e0,0xffcbcccb,0xffdedede,0xffe1e1e1,0xffe6e6e6,0xffefefef,0xfff9f9f9,0xffbbbbbb,0xffcdcecd,0xffdddddd,
+ 0xffe9eae9,0xffd6d6d6,0xffa8a8a8,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500,
+ 0x1f000500,0x2c000500,0xecfafafa,0xd8f0f0f0,0xcee5e5e5,0xcedfdfdf,0xd3dadada,0xd7d7d7d7,0xddd1d2d1,0xffbabbba,0xffcccccc,0xffd1d1d1,0xffd7d7d7,0xffe6e6e6,
+ 0xfff5f6f5,0xffb0b1b0,0xffc5c5c5,0xffdadada,0xffdddddd,0xffbababa,0xffa4a4a4,0xffb4b4b4,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7,
+ 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x22000500,0x30000500,0xebf9f9f9,0xd6ededed,0xcde0e0e0,0xcedadada,0xd3d5d5d5,0xd8d1d1d1,0xddcdcdcd,0xffb6b7b6,
+ 0xffc4c4c4,0xffc8c9c8,0xffd1d1d1,0xffe1e1e1,0xfff4f4f4,0xffa8a9a8,0xffc1c1c1,0xffd6d6d6,0xffcbcbcb,0xffb0b0b0,0xffadadad,0xffe2e2e2,0xfff9f9f9,0xfff8f8f8,
+ 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x25000500,0x33000500,0xebf8f8f8,0xd7ebeceb,0xcededede,0xd0d7d7d7,
+ 0xd5d4d4d4,0xdad0d0d0,0xdfcbcbcb,0xffb6b7b6,0xffc0c1c0,0xffc4c4c4,0xffcccdcc,0xffdedede,0xfff3f3f3,0xffa3a4a3,0xffbdbdbd,0xffd1d1d1,0xffc0c0c0,0xffafafaf,
+ 0xffc1c1c1,0xfff3f3f3,0xfffafafa,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x26000500,0x35000500,
+ 0xebf8f8f8,0xd7ebebeb,0xcedddedd,0xd1d7d7d7,0xd6d3d3d3,0xdbcfcfcf,0xe0cbcbcb,0xffb6b7b6,0xffbebebe,0xffc2c3c2,0xffcbcbcb,0xffdddddd,0xfff3f3f3,0xffa0a1a0,
+ 0xffbbbbbb,0xffcfcfcf,0xffbbbbbb,0xffaeaeae,0xffcacaca,0xfffafafa,0xfffbfbfb,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000,
+ 0x90000500,0x6e000500,0x26000500,0x35000500,0xebf8f8f8,0xd7ebebeb,0xcedddedd,0xd1d7d7d7,0xd6d3d3d3,0xdbcfcfcf,0xe0cbcbcb,0xffb6b7b6,0xffbebebe,0xffc2c3c2,
+ 0xffcbcbcb,0xffdddddd,0xfff3f3f3,0xffa0a1a0,0xffbbbbbb,0xffd0d0d0,0xffbdbdbd,0xffabacab,0xffc2c2c2,0xfff7f7f7,0xffbbbbbb,0xff868686,0xff7e7e7e,0xff777777,
+ 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x25000500,0x33000500,0xebf8f8f8,0xd7ebeceb,0xcededede,0xd0d7d7d7,0xd5d4d4d4,0xdad0d0d0,
+ 0xdfcbcbcb,0xffb6b7b6,0xffc0c1c0,0xffc4c4c4,0xffcccdcc,0xffdedede,0xfff3f3f3,0xffa3a4a3,0xffbdbdbd,0xffd3d3d3,0xffc8c8c8,0xffa5a5a5,0xffa9a9a9,0xffe8e8e8,
+ 0xffb8b8b8,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x22000500,0x30000500,0xebf9f9f9,0xd6ededed,
+ 0xcde0e0e0,0xcedadada,0xd3d5d5d5,0xd8d1d1d1,0xddcdcdcd,0xffb6b7b6,0xffc4c4c4,0xffc8c9c8,0xffd1d1d1,0xffe1e1e1,0xfff4f4f4,0xffa8a9a8,0xffc0c0c0,0xffd7d7d7,
+ 0xffd7d7d7,0xffa5a5a5,0xff919191,0xffb4b4b4,0xffefefef,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500,
+ 0x1f000500,0x2c000500,0xecfafafa,0xd8f0f0f0,0xcee5e5e5,0xcedfdfdf,0xd3dadada,0xd7d7d7d7,0xddd1d2d1,0xffbabbba,0xffcccccc,0xffd1d1d1,0xffd7d7d7,0xffe6e6e6,
+ 0xfff5f6f5,0xffb0b1b0,0xffc5c6c5,0xffd7d7d7,0xffe7e8e7,0xffc4c4c4,0xff8a8a8a,0xff808080,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070,
+ 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000500,0x26000500,0xf0fcfcfc,0xe0f6f6f6,0xd8efefef,0xd8ebebeb,0xdbe8e8e8,0xdfe3e3e3,0xe3e0e1e0,0xffcbcccb,
+ 0xffdedede,0xffe1e1e1,0xffe6e6e6,0xffefefef,0xfff9f9f9,0xffbbbcbb,0xffcccdcc,0xffdadbda,0xffe8e9e8,0xffedeeed,0xffb5b5b5,0xff7c7c7c,0xff767676,0xff797979,
+ 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x16000500,0x1f000500,0xf8fefefe,0xf0fcfcfc,0xecfafafa,0xecf8f8f8,
+ 0xedf7f7f7,0xeff5f5f5,0xf1f3f3f3,0xffe8e8e8,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6,0xfff9f9f9,0xfffdfdfd,0xffc6c7c6,0xffd5d6d5,0xffe0e0e0,0xffe8e8e8,0xfff2f2f2,
+ 0xfff2f2f2,0xffc6c6c6,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x11000500,0x18000500,
+ 0x20000500,0x29000500,0x32000500,0x3d000500,0x4c000500,0x5d000500,0x73000500,0xff000300,0xffa5a6a5,0xffacadac,0xffb4b5b4,0xffbebfbe,0xffc7c8c7,0xffd2d3d2,
+ 0xffdddddd,0xffe6e6e6,0xffededed,0xffeeeeee,0xfff4f4f4,0xfff8f8f8,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000,
+ 0x8e000500,0x6d000500,0xc000500,0x11000500,0x17000500,0x1e000500,0x25000500,0x30000500,0x3f000500,0x51000500,0x68000500,0xff000300,0xffc0c1c0,0xffc4c5c4,
+ 0xffcacaca,0xffd1d1d1,0xffd7d7d7,0xffdedede,0xffe6e6e6,0xffebebeb,0xffefefef,0xfff1f1f1,0xfff3f3f3,0xfff4f4f4,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,
+ 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x8000500,0xb000500,0xf000500,0x14000500,0x1a000500,0x24000500,0x32000500,0x44000500,
+ 0x5c000500,0xff000000,0xffd7d7d7,0xffd9d9d9,0xffdddddd,0xffe1e1e1,0xffe3e4e3,0xffe8e8e8,0xffecedec,0xfff0f0f0,0xfff3f3f3,0xfff4f4f4,0xfff5f5f5,0xfff6f6f6,
+ 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000500,0x6000500,0x9000500,0xc000500,
+ 0x12000500,0x1a000500,0x28000500,0x39000500,0x50000500,0xff000000,0xffe7e7e7,0xffe8e8e8,0xffebebeb,0xffeeeeee,0xffeeeeee,0xfff0f0f0,0xfff3f3f3,0xfff4f4f4,
+ 0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500,
+ 0x2000500,0x3000500,0x4000500,0x7000500,0xc000500,0x14000500,0x1e000500,0x30000500,0x45000500,0xff000000,0xfff3f3f3,0xfff3f3f3,0xfff4f4f4,0xfff6f6f6,
+ 0xfff8f8f8,0xfff9f9f9,0xfffbfbfb,0xfffdfdfd,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xff000000,0x73000500,0x58000500,0x1000500,0x1000500,0x2000500,0x4000500,0x8000500,0xe000500,0x18000500,0x27000500,0x38000500,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xa000500,
+ 0x12000500,0x1e000500,0x2d000500,0x3f000500,0x52000500,0x64000500,0x74000500,0x80000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500,
+ 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500,
+ 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500,
+ 0x3e000500,0x30000500
+};
+
+static const QRgb DocumentTypePowerPoint_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500,
+ 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500,
+ 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,
+ 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,
+ 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500,
+ 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e,
+ 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x2000500,0x6000500,0xd000500,0x18000500,0x29000500,
+ 0x3f000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6,
+ 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0xffffff,0xffffff,0x1000500,0x2000500,
+ 0x6000500,0xe000500,0x1b000500,0x2d000500,0x45000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffafafa,
+ 0xfff4f4f4,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500,
+ 0xffffff,0xffffff,0x1000500,0x2000500,0x7000500,0xf000500,0x1d000500,0x30000500,0x4a000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfff8f8f8,0xfff3f3f3,0xffe7e7e7,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545,
+ 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,0x10000500,0x1e000500,0x32000500,0x4d000500,0xff000000,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff8f8f8,0xfff3f3f3,0xffe6e6e6,0xffd1d1d1,0xffb3b3b3,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000,
+ 0x27000000,0x3b000000,0x55000600,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff6f6f6,0xfff2f2f2,0xffe8e8e8,
+ 0xffd4d4d4,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0x4000000,0x7000000,
+ 0xd000000,0x15000000,0x1d000000,0x29000000,0x38000000,0x4c000000,0x64000000,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,
+ 0xffefefef,0xfff3f3f3,0xfff0f0f0,0xffeaeaea,0xffdddddd,0xffc9c9c9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e,
+ 0x6a000500,0x4e000500,0x7000000,0xf000000,0x19000000,0x28000000,0x34000000,0x43000000,0x52000000,0x64000000,0x79000500,0xff000000,0xffcbcbcb,0xffcbcbcb,
+ 0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdddddd,0xffe7e7e7,0xffececec,0xffefefef,0xffefefef,0xffe7e7e7,0xffc5c5c5,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b,
+ 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0xc000000,0x19000000,0xff78cf7b,0xff75cd78,0xff71cb75,0xff6ec872,0xff69c56d,0xff67c56b,
+ 0xff62c466,0xff5ec463,0xff58c15d,0xff51bf57,0xff4dbd50,0xff45bc4a,0xff42b948,0xffc6c6c6,0xffd7d7d7,0xffe5e5e5,0xffeeeeee,0xfff2f2f2,0xffcfcfcf,0xffa0a0a0,
+ 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x12000000,0x27000000,0xff74cb77,0xff6fc673,
+ 0xff6ac16d,0xff64bc68,0xff61ba65,0xff5db860,0xff59b95d,0xff53b757,0xff4db552,0xff48b24c,0xff41b047,0xff3ead43,0xff3ead42,0xffa7a7a7,0xffc4c4c4,0xffdbdbdb,
+ 0xffececec,0xffd9d9d9,0xffababab,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500,
+ 0x17000000,0x31000000,0xff6fc673,0xffffffff,0xffffffff,0xffffffff,0xfff4f9f5,0xffa5d1a7,0xff4ca74f,0xffffffff,0xffffffff,0xffffffff,0xfff3f9f3,0xff9acb9c,
+ 0xff399e3d,0xff8d8d8d,0xffb1b1b1,0xffd3d3d3,0xffdddddd,0xffbdbdbd,0xffa8a8a8,0xffb5b5b5,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7,
+ 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x1b000000,0x3c000000,0xff69bf6c,0xffffffff,0xffe0eee1,0xff7fb582,0xffc6ddc7,0xffffffff,0xff78b07a,0xffffffff,
+ 0xffdceadd,0xff6fa972,0xffc0d9c1,0xffffffff,0xff70ad73,0xff767676,0xffa2a2a2,0xffc8c8c8,0xffcacaca,0xffb3b3b3,0xffb1b1b1,0xffe3e3e3,0xfffafafa,0xfff8f8f8,
+ 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x1d000000,0x43000000,0xff62ba66,0xffffffff,0xffd1e3d2,0xff418943,
+ 0xff77a778,0xffffffff,0xff99bd9a,0xffffffff,0xffcbddcc,0xff2a772e,0xff6b9f6d,0xffffffff,0xff96bc98,0xff666666,0xff979797,0xffbfbfbf,0xffbfbfbf,0xffb2b2b2,
+ 0xffc5c5c5,0xfff5f5f5,0xfffbfbfb,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x1f000000,0x45000000,
+ 0xff5eb661,0xffffffff,0xffd1e2d1,0xff3b803d,0xff9abc9a,0xffffffff,0xff88af8a,0xffffffff,0xffcbdacb,0xff276c29,0xff93b495,0xffffffff,0xff88b089,0xff606060,
+ 0xff919191,0xffbcbcbc,0xffb8b8b8,0xffb2b2b2,0xffcecece,0xfffdfdfd,0xfffcfcfc,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000,
+ 0x90000500,0x6e000500,0x1f000000,0x46000000,0xff58b35d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffdbe7dc,0xff397e3d,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffdae5db,0xff3b803e,0xff616161,0xff929292,0xffbdbdbd,0xffbbbbbb,0xffaeaeae,0xffc6c6c6,0xfff9f9f9,0xffbcbcbc,0xff868686,0xff7e7e7e,0xff777777,
+ 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x1f000000,0x46000000,0xff53b257,0xffffffff,0xffdde9dd,0xff70a473,0xff5d9a5f,0xff2d7d30,
+ 0xff2b7a2f,0xffffffff,0xffdae4da,0xff68936a,0xff578c5a,0xff29722b,0xff2b7a2f,0xff656565,0xff969696,0xffc2c2c2,0xffc5c5c5,0xffa8a8a8,0xffadadad,0xffeaeaea,
+ 0xffb9b9b9,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x1f000000,0x46000000,0xff4eaf51,0xffffffff,
+ 0xffcee1ce,0xff2f8334,0xff308734,0xff2f8634,0xff2f8433,0xffffffff,0xffcbdbcb,0xff286f2a,0xff29732b,0xff2b7a2f,0xff2f8233,0xff6b6b6b,0xff9b9b9b,0xffc5c5c5,
+ 0xffd3d3d3,0xffa8a8a8,0xff949494,0xffb5b5b5,0xfff0f0f0,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500,
+ 0x1d000000,0x43000000,0xff49b04e,0xffffffff,0xffcde2ce,0xff318834,0xff338d37,0xff348e37,0xff318c36,0xffffffff,0xffcbdccc,0xff29752d,0xff2b7a2f,0xff2e7f31,
+ 0xff318834,0xff757575,0xffa4a4a4,0xffc7c7c7,0xffe3e3e3,0xffc5c5c5,0xff8d8d8d,0xff818181,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070,
+ 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000000,0x3e000000,0xff45b148,0xffffffff,0xffcde3ce,0xff348f37,0xff359439,0xff359539,0xff349138,0xffffffff,
+ 0xffcbddcc,0xff2d7b30,0xff2e8031,0xff308734,0xff338d37,0xff858585,0xffadadad,0xffcbcbcb,0xffe4e4e4,0xffeeeeee,0xffb7b7b7,0xff7d7d7d,0xff767676,0xff797979,
+ 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x17000000,0x34000000,0xff3fb245,0xff3ba43f,0xff36993b,0xff369639,
+ 0xff369a3c,0xff36993b,0xff359539,0xff338e37,0xff2f8433,0xff2f8331,0xff308634,0xff318a35,0xff338e37,0xff979797,0xffb8b8b8,0xffd2d2d2,0xffe3e3e3,0xfff3f3f3,
+ 0xfff5f5f5,0xffc7c7c7,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x12000000,0x28000000,
+ 0x47000000,0x6b000000,0x87000000,0x9a000000,0xa7000000,0xb2000000,0xbc000000,0xff000000,0xff6d6d6d,0xff6e6e6e,0xff767676,0xff848484,0xff969696,0xffadadad,
+ 0xffc6c6c6,0xffd9d9d9,0xffe8e8e8,0xffefefef,0xfff7f7f7,0xfff9f9f9,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000,
+ 0x8e000500,0x6d000500,0xc000000,0x1a000000,0x2f000000,0x47000000,0x5b000000,0x6c000000,0x79000000,0x87000000,0x97000000,0xff000000,0xffa0a0a0,0xffa0a0a0,
+ 0xffa5a5a5,0xffafafaf,0xffbababa,0xffc7c7c7,0xffd7d7d7,0xffe4e4e4,0xffededed,0xfff2f2f2,0xfff4f4f4,0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,
+ 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x7000000,0x10000000,0x1b000000,0x2a000000,0x37000000,0x45000000,0x53000000,0x63000000,
+ 0x76000000,0xff000000,0xffc9c9c9,0xffc9c9c9,0xffcbcbcb,0xffd1d1d1,0xffd5d5d5,0xffdcdcdc,0xffe6e6e6,0xffececec,0xfff2f2f2,0xfff5f5f5,0xfff6f6f6,0xfff6f6f6,
+ 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000000,0x7000000,0xd000000,0x14000000,
+ 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000600,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,0xfff1f1f1,0xfff3f3f3,
+ 0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500,
+ 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,
+ 0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xff000000,0x73000500,0x58000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x1000500,0x4000500,0x9000500,
+ 0x11000500,0x1d000500,0x2c000500,0x3e000500,0x51000500,0x63000500,0x73000500,0x7f000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500,
+ 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500,
+ 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500,
+ 0x3e000500,0x30000500
+};
+
+static const QRgb DocumentTypeWord_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000500,0x2000500,0x5000500,0x9000500,0x10000500,0x18000500,0x22000500,
+ 0x2c000500,0x36000500,0x3f000500,0x45000500,0x4a000500,0x4d000500,0x4e000500,0x4e000500,0x4e000500,0x4c000500,0x49000500,0x45000500,0x3f000500,0x37000500,
+ 0x2e000500,0x25000500,0x1c000500,0x13000500,0xd000500,0x8000500,0x4000500,0x2000500,0xffffff,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,
+ 0xd000500,0x16000500,0x22000500,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xfd373737,0x72545754,0x44000500,0x37000500,0x2b000500,0x1f000500,0x15000500,0xd000500,0x8000500,0x4000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x4000500,0x9000500,0x11000500,0x1d000500,0x2c000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,
+ 0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffededed,0xffe3e3e3,0xffd1d1d1,0xfd363636,0x76404240,0x4e000500,0x3d000500,0x2e000500,0x21000500,0x16000500,
+ 0xe000500,0x8000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe3e3e3,0xffd4d4d4,0xfffefefe,0xffbebebe,0xfd383838,0x803e403e,
+ 0x53000500,0x40000500,0x2f000500,0x21000500,0x16000500,0xd000500,0xffffff,0xffffff,0xffffff,0x2000500,0x6000500,0xd000500,0x18000500,0x29000500,
+ 0x3f000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffededed,0xffdbdbdb,0xffc6c6c6,
+ 0xffffffff,0xfffdfdfd,0xffaeaeae,0xfd3b3b3b,0x7e353735,0x55000500,0x41000500,0x2f000500,0x20000500,0x15000500,0xffffff,0xffffff,0x1000500,0x2000500,
+ 0x6000500,0xe000500,0x1b000500,0x2d000500,0x45000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffafafa,
+ 0xfff4f4f4,0xffe8e8e8,0xffd5d5d5,0xffbababa,0xffffffff,0xffffffff,0xfffdfdfd,0xffa3a3a3,0xfd3e3e3e,0x7a2a2d2a,0x55000500,0x40000500,0x2d000500,0x1e000500,
+ 0xffffff,0xffffff,0x1000500,0x2000500,0x7000500,0xf000500,0x1d000500,0x30000500,0x4a000500,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfff8f8f8,0xfff3f3f3,0xffe7e7e7,0xffd1d1d1,0xffb4b4b4,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xff9d9d9d,0xfd454545,
+ 0x782b2b2b,0x52000500,0x3c000500,0x29000500,0xffffff,0xffffff,0x1000500,0x3000500,0x7000500,0x10000500,0x1e000500,0x32000500,0x4d000500,0xff000000,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffcfcfc,0xfffbfbfb,0xfff8f8f8,0xfff3f3f3,0xffe6e6e6,0xffd1d1d1,0xffb3b3b3,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfff9f9f9,0xff9e9e9e,0xfc4c4c4c,0x701f231f,0x4c000500,0x36000500,0x1000000,0x2000000,0x5000000,0x9000000,0xf000000,0x18000000,
+ 0x27000000,0x3b000000,0x55000600,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff6f6f6,0xfff7f7f7,0xfff7f7f7,0xfff6f6f6,0xfff2f2f2,0xffe8e8e8,
+ 0xffd4d4d4,0xffb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xffa1a1a1,0xfb545454,0x5c000500,0x42000500,0x4000000,0x7000000,
+ 0xd000000,0x15000000,0x1d000000,0x29000000,0x38000000,0x4c000000,0x64000000,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,
+ 0xffefefef,0xfff3f3f3,0xfff0f0f0,0xffeaeaea,0xffdddddd,0xffc9c9c9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffbfbfb,0xff3e3e3e,
+ 0x6a000500,0x4e000500,0x7000000,0xf000000,0x19000000,0x28000000,0x34000000,0x43000000,0x52000000,0x64000000,0x79000500,0xff000000,0xffcbcbcb,0xffcbcbcb,
+ 0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdddddd,0xffe7e7e7,0xffececec,0xffefefef,0xffefefef,0xffe7e7e7,0xffc5c5c5,0xff9f9f9f,0xff7f7f7f,0xff6f6f6f,0xff6b6b6b,
+ 0xff717171,0xff8c8c8c,0xffb5b5b5,0xff000000,0x76000500,0x58000500,0xc000000,0x18000000,0xff6568f3,0xff6365f3,0xff5f61f3,0xff5b5ef2,0xff5759f2,0xff5256f2,
+ 0xff4e50f2,0xff494bf1,0xff4246f1,0xff3b3ef0,0xff3437f0,0xff2a2eee,0xff2529ea,0xffc7c7c7,0xffd7d7d7,0xffe5e5e5,0xffeeeeee,0xfff2f2f2,0xffcfcfcf,0xffa0a0a0,
+ 0xff8d8d8d,0xff828282,0xff828282,0xff7d7d7d,0xff717171,0xff707070,0xff747474,0xff000000,0x80000500,0x60000500,0x12000000,0x26000000,0xff6264f1,0xff5e60ee,
+ 0xff595ced,0xff5457eb,0xff5053eb,0xff4c4eec,0xff4749eb,0xff3e41eb,0xff383cea,0xff3335ea,0xff2a2ee8,0xff2428e3,0xff2327dd,0xffa9a9a9,0xffc4c4c4,0xffdbdbdb,
+ 0xffececec,0xffd9d9d9,0xffababab,0xff9a9a9a,0xffa4a4a4,0xffc0c0c0,0xffcecece,0xffcfcfcf,0xffc4c4c4,0xff919191,0xff6e6e6e,0xff000000,0x87000500,0x66000500,
+ 0x17000000,0x30000000,0xff5e60ee,0xffa9abf3,0xffa6a7f0,0xff6666e3,0xff484add,0xff5e5fe3,0xff9b9dee,0xff5356e2,0xff2f33dd,0xff494be1,0xff9193e9,0xff9193e8,
+ 0xff2224d0,0xff919191,0xffb4b4b4,0xffd4d4d4,0xffdedede,0xffbdbdbd,0xffa8a8a8,0xffb5b5b5,0xffe6e6e6,0xfff3f3f3,0xfff7f7f7,0xfff3f3f3,0xffd1d1d1,0xffe7e7e7,
+ 0xff9f9f9f,0xff000000,0x8b000500,0x6a000500,0x1b000000,0x38000000,0xff595cec,0xffb4b5f1,0xffffffff,0xff9fa0e5,0xff3b3dcb,0xff9a9ae3,0xffffffff,0xff9596e2,
+ 0xff2427c7,0xff9091e0,0xffffffff,0xffa1a2e2,0xff1f22c0,0xff7b7b7b,0xffa8a8a8,0xffcccccc,0xffcbcbcb,0xffb3b3b3,0xffb1b1b1,0xffe3e3e3,0xfffafafa,0xfff8f8f8,
+ 0xfff7f7f7,0xffafafaf,0xff7a7a7a,0xffb6b6b6,0xffe1e1e1,0xff000000,0x8e000500,0x6d000500,0x1d000000,0x3d000000,0xff5256e9,0xff6566e1,0xffffffff,0xffe8e8f7,
+ 0xff3033b5,0xffe7e7f5,0xffffffff,0xffe6e6f5,0xff1b1eab,0xffe5e5f4,0xffffffff,0xff3f41b7,0xff1d1fb3,0xff6f6f6f,0xffa0a0a0,0xffc6c6c6,0xffc0c0c0,0xffb2b2b2,
+ 0xffc5c5c5,0xfff5f5f5,0xfffbfbfb,0xfffafafa,0xffb6b6b6,0xff7c7c7c,0xff777777,0xff9b9b9b,0xffefefef,0xff000000,0x8f000500,0x6e000500,0x1f000000,0x3f000000,
+ 0xff4f51ea,0xff4547da,0xffc3c4ee,0xffffffff,0xff9394cf,0xffffffff,0xffffffff,0xffffffff,0xff8d8ec4,0xffffffff,0xffbbbbdd,0xff191b9d,0xff1d1eac,0xff6a6a6a,
+ 0xff9d9d9d,0xffc4c4c4,0xffbababa,0xffb2b2b2,0xffcecece,0xfffdfdfd,0xfffcfcfc,0xffbababa,0xff828282,0xff7a7a7a,0xff808080,0xffe4e4e4,0xffffffff,0xff000000,
+ 0x90000500,0x6e000500,0x1f000000,0x3e000000,0xff4a4deb,0xff3f42dd,0xff7373d9,0xffffffff,0xffffffff,0xffffffff,0xff6061a9,0xffffffff,0xffffffff,0xffffffff,
+ 0xff6061ab,0xff191a99,0xff1b1da8,0xff6b6b6b,0xff9e9e9e,0xffc5c5c5,0xffbdbdbd,0xffaeaeae,0xffc6c6c6,0xfff9f9f9,0xffbcbcbc,0xff868686,0xff7e7e7e,0xff777777,
+ 0xff747474,0xffa4a4a4,0xfff4f4f4,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3e000000,0xff4548ee,0xff3c3ee3,0xff2f33d0,0xffdadaf2,0xffffffff,0xffadadd4,
+ 0xff161987,0xffacadd0,0xffffffff,0xffe5e5f0,0xff16198c,0xff191b9a,0xff1b1ea9,0xff6e6e6e,0xffa0a0a0,0xffc7c7c7,0xffc6c6c6,0xffa8a8a8,0xffadadad,0xffeaeaea,
+ 0xffb9b9b9,0xff7e7e7e,0xff9b9b9b,0xff9a9a9a,0xff696969,0xff676767,0xff939393,0xff000000,0x90000500,0x6f000500,0x1f000000,0x3d000000,0xff3e40f0,0xff3538e8,
+ 0xff2b2fd9,0xff8384dc,0xffffffff,0xff6263b9,0xff171a94,0xff6062af,0xffffffff,0xff7e7fbc,0xff171a94,0xff191da0,0xff1b1ead,0xff717171,0xffa3a3a3,0xffc9c9c9,
+ 0xffd4d4d4,0xffa8a8a8,0xff949494,0xffb5b5b5,0xfff0f0f0,0xffc5c5c5,0xffebebeb,0xfffcfcfc,0xff9e9e9e,0xff686868,0xff686868,0xff000000,0x90000500,0x6f000500,
+ 0x1d000000,0x3b000000,0xff3639f1,0xff2d30eb,0xff2428df,0xff2024cd,0xff6465cd,0xff1d1ead,0xff1b1ea6,0xff1a1da1,0xff6262b9,0xff2b2fa3,0xff191da0,0xff1b1ea7,
+ 0xff1b1eae,0xff787878,0xffa6a6a6,0xffc9c9c9,0xffe3e3e3,0xffc5c5c5,0xff8d8d8d,0xff818181,0xffa5a5a5,0xffdddddd,0xffe8e8e8,0xffeaeaea,0xffcbcbcb,0xff707070,
+ 0xff696969,0xff000000,0x90000500,0x6f000500,0x1b000000,0x36000000,0xff2e31f1,0xff272aee,0xff2428e2,0xff2225d4,0xff2023c7,0xff1e22bd,0xff1d20b6,0xff1d1fb3,
+ 0xff1d1eae,0xff1b1eac,0xff1b1eac,0xff1b1faf,0xff1d1fb3,0xff858585,0xffadadad,0xffcbcbcb,0xffe4e4e4,0xffeeeeee,0xffb7b7b7,0xff7d7d7d,0xff767676,0xff797979,
+ 0xff868686,0xff868686,0xff7c7c7c,0xff6d6d6d,0xff6d6d6d,0xff000000,0x90000500,0x6f000500,0x17000000,0x2e000000,0xff272aee,0xff2529e7,0xff2427de,0xff2225d7,
+ 0xff2224cc,0xff1f23c6,0xff1e22c0,0xff1e20bc,0xff1e20b7,0xff1e1fb5,0xff1d1fb2,0xff1d1fb3,0xff1e20b4,0xff979797,0xffb8b8b8,0xffd2d2d2,0xffe3e3e3,0xfff3f3f3,
+ 0xfff5f5f5,0xffc7c7c7,0xff969696,0xff727272,0xff727272,0xff727272,0xff727272,0xff939393,0xffbebebe,0xff000000,0x90000500,0x6e000500,0x12000000,0x25000000,
+ 0x3e000000,0x5e000000,0x79000000,0x91000000,0xa2000000,0xaf000000,0xba000000,0xff000000,0xff757575,0xff757575,0xff7b7b7b,0xff878787,0xff979797,0xffacacac,
+ 0xffc6c6c6,0xffd9d9d9,0xffe8e8e8,0xffefefef,0xfff7f7f7,0xfff9f9f9,0xffebebeb,0xffd7d7d7,0xffc9c9c9,0xffc9c9c9,0xffd6d6d6,0xffeaeaea,0xfffafafa,0xff000000,
+ 0x8e000500,0x6d000500,0xc000000,0x18000000,0x2a000000,0x3f000000,0x52000000,0x65000000,0x75000000,0x84000000,0x94000000,0xff000000,0xffa6a6a6,0xffa6a6a6,
+ 0xffaaaaaa,0xffb1b1b1,0xffbbbbbb,0xffc7c7c7,0xffd7d7d7,0xffe4e4e4,0xffededed,0xfff2f2f2,0xfff4f4f4,0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,
+ 0xfff8f8f8,0xfff7f7f7,0xfff4f4f4,0xff000000,0x8c000500,0x6b000500,0x7000000,0xf000000,0x19000000,0x27000000,0x34000000,0x42000000,0x51000000,0x62000000,
+ 0x75000000,0xff000000,0xffcbcbcb,0xffcbcbcb,0xffcdcdcd,0xffd1d1d1,0xffd6d6d6,0xffdcdcdc,0xffe6e6e6,0xffececec,0xfff2f2f2,0xfff5f5f5,0xfff6f6f6,0xfff6f6f6,
+ 0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xff000000,0x87000500,0x68000500,0x4000000,0x7000000,0xd000000,0x14000000,
+ 0x1c000000,0x28000000,0x35000000,0x47000000,0x5c000600,0xff000000,0xffe5e5e5,0xffe5e5e5,0xffe7e7e7,0xffe8e8e8,0xffe8e8e8,0xffececec,0xfff1f1f1,0xfff3f3f3,
+ 0xfff5f5f5,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xff000000,0x7f000500,0x61000500,
+ 0x1000000,0x2000000,0x4000000,0x8000000,0xe000000,0x16000000,0x21000000,0x31000000,0x47000000,0xff000000,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,
+ 0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xff000000,0x73000500,0x58000500,0xffffff,0xffffff,0xffffff,0x2000500,0x5000500,0xb000500,0x15000500,0x24000500,0x36000500,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x63000500,0x4c000500,0xffffff,0xffffff,0xffffff,0x1000500,0x4000500,0x9000500,
+ 0x11000500,0x1d000500,0x2c000500,0x3e000500,0x51000500,0x63000500,0x73000500,0x7f000500,0x87000500,0x8c000500,0x8e000500,0x90000500,0x90000500,0x90000500,
+ 0x90000500,0x90000500,0x90000500,0x90000500,0x8e000500,0x8c000500,0x87000500,0x7f000500,0x73000500,0x63000500,0x51000500,0x3e000500,0xffffff,0xffffff,
+ 0xffffff,0x1000500,0x3000500,0x7000500,0xd000500,0x16000500,0x22000500,0x30000500,0x3e000500,0x4c000500,0x58000500,0x61000500,0x68000500,0x6b000500,
+ 0x6d000500,0x6e000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6f000500,0x6e000500,0x6d000500,0x6b000500,0x68000500,0x61000500,0x58000500,0x4c000500,
+ 0x3e000500,0x30000500
+};
+
+static const QRgb FileBrowser_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff0f4120,0xff0c3119,0xff0c3119,0xff0c3819,
+ 0xff0c3619,0xff0c3319,0xff0c3119,0xff0c3119,0xff13592b,0xff13592b,0xff13592b,0xff13582b,0xff13582b,0xff13572a,0xff13572a,0xff13562a,0xff13562a,0xff135429,
+ 0xff125329,0xff125329,0xff125329,0xff125228,0xff125228,0xff125128,0xff125028,0xff124f27,0xff104d25,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff135429,0xffd0d0d0,0xffa7a7a7,0xff7e7e7e,0xff7e7e7e,0xff889786,0xff879286,0xff838882,0xff7e7e7e,0xff7e7e7e,0xffdfdfdf,0xffdedede,0xffdddddd,0xffdcdcdc,
+ 0xffdadada,0xffd8d8d8,0xffd7d7d7,0xffd5d5d5,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffcfcfcf,0xffcecece,0xffcccccc,0xffc9c9c9,0xffc3c3c3,0xff104b24,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff125329,0xffd5d5d5,0xffd6d6d6,0xffd1d1d1,0xffadadad,0xff7e7e7e,0xff7e7e7e,0xff92a390,0xff93a391,0xff8b948a,
+ 0xff7d7d7d,0xff7c7c7c,0xffdcdcdc,0xffdadada,0xff7a7a7a,0xff7a7a7a,0xff787878,0xffd3d3d3,0xffd1d1d1,0xffd1d1d1,0xffcfcfcf,0xffcdcdcd,0xffcccccc,0xffc7c7c7,
+ 0xffc3c3c3,0xffbdbdbd,0xff104923,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff124f27,0xffd1d0d0,0xffd4d3d3,0xffd5d5d5,0xffd6d6d6,0xffd1d1d1,
+ 0xffafafaf,0xff7e7e7e,0xff7e7e7e,0xff9caf9a,0xff9fb19d,0xff95a294,0xff7b7b7b,0xff7a7a7a,0xff919e90,0xff909d8f,0xff7e817d,0xff777777,0xff767676,0xffcfcfcf,
+ 0xffcdcdcd,0xffcccccc,0xffc7c7c7,0xffc3c3c3,0xffbdbdbd,0xffb7b7b7,0xff0f4623,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff104723,0xffc3bfbf,
+ 0xffcbcaca,0xffd1d0d0,0xffd4d3d3,0xffd5d5d5,0xffd6d6d6,0xffd2d2d2,0xffb2b2b2,0xff7d7d7d,0xff7d7d7d,0xffa5b9a4,0xffa6baa4,0xffa4b7a3,0xffa6bba4,0xffa4b9a3,
+ 0xffa3b6a1,0xff92a091,0xff7c7f7b,0xff747474,0xff737373,0xffc7c7c7,0xffc3c3c3,0xffbdbdbd,0xffb7b7b7,0xffb1b1b1,0xff0f4322,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff0d3c1e,0xffaba4a4,0xffb8b3b3,0xffc3bfbf,0xffcbcaca,0xffd1d0d0,0xffd4d3d3,0xffd5d5d5,0xffd5d5d5,0xffd3d3d3,0xffb2b2b2,0xff7b7b7b,
+ 0xff7a7a7a,0xffacc0aa,0xffadc1ab,0xffacc0ab,0xffabbfa9,0xffa8bda6,0xffa5baa4,0xff93a192,0xff7a7d79,0xff6e6e6e,0xffbdbdbd,0xffb9b9b9,0xffb3b3b3,0xffadadad,
+ 0xff0f4120,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0c341a,0xff978d8d,0xffa09797,0xffaba4a4,0xffb8b3b3,0xffc3bfbf,0xffcbc9c9,0xffd1d0d0,
+ 0xffd3d2d2,0xffd4d4d4,0xffd3d3d3,0xffd3d3d3,0xffb4b4b4,0xff7a7a7a,0xff797979,0xffb2c7b0,0xffb2c7b0,0xffb0c5ae,0xffadc3ac,0xffaabea8,0xffa4b8a2,0xffc6e0c5,
+ 0xff686868,0xffb4b4b4,0xffadadad,0xffa7a7a7,0xff0d401f,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0c3119,0xff7e7e7e,0xff8c8383,0xff978d8d,
+ 0xffa09797,0xffaba4a4,0xffb7b3b3,0xffc2bebe,0xffcac8c8,0xffd0cfcf,0xffd1d1d1,0xffd2d2d2,0xffd1d1d1,0xffd1d1d1,0xffb3b3b3,0xff777777,0xff757575,0xffb6ccb5,
+ 0xffb5cbb3,0xffb0c6ae,0xffaac0a9,0xffc4ddc2,0xff656565,0xffaeaeae,0xffa8a8a8,0xffa3a3a3,0xff0d3e1e,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000,
+ 0xff105425,0xff9ca69b,0xff7c7c7c,0xff7c7c7c,0xff877f7f,0xff948a8a,0xff9d9494,0xffa8a1a1,0xffb6b1b1,0xffc0bdbd,0xffc9c7c7,0xffcdcccc,0xffd0cfcf,0xffd0d0d0,
+ 0xffcfcfcf,0xffcecece,0xffb5b5b5,0xff737373,0xff6f6f6f,0xffb4cbb3,0xffb0c7ae,0xffbed7bd,0xff636363,0xffa9a9a9,0xffa4a4a4,0xff9e9e9e,0xff0d3c1e,0x99000000,
+ 0x66000000,0x3d000000,0x21000000,0x42000000,0xff125725,0xffbdd3bc,0xffb0c4af,0xff909a8f,0xff717171,0xff727272,0xff7c7777,0xff8c8282,0xff988f8f,0xffa59f9f,
+ 0xffb4afaf,0xffbebbbb,0xffc6c4c4,0xffcbcaca,0xffcccccc,0xffcccccc,0xffcbcbcb,0xffcacaca,0xffafafaf,0xff686868,0xffaec5ad,0xffb8d0b6,0xff5f5f5f,0xffa4a4a4,
+ 0xff9e9e9e,0xff989898,0xff0d391d,0x99000000,0x66000000,0x3d000000,0x2a000000,0x4f000000,0xff0f4d22,0xff9daf9c,0xff8f9f8d,0xff859584,0xff7f8d7e,0xff6e776e,
+ 0xff5b5b5b,0xff636363,0xff746e6e,0xff887e7e,0xff988e8e,0xffa49d9d,0xffb2adad,0xffbbb8b8,0xffc3c1c1,0xffc7c6c6,0xffc8c8c8,0xffc5c4c4,0xffc2c2c2,0xff656565,
+ 0xffa7bda6,0xffb0c6ae,0xff5c5c5c,0xff9d9d9d,0xff989898,0xff919191,0xff0c371b,0x99000000,0x66000000,0x3d000000,0x40000000,0x6a000000,0xff0d3c1a,0xff6e7b6d,
+ 0xff5b655a,0xff4f584e,0xff4a524a,0xff4c564b,0xff545e53,0xff596059,0xff535353,0xff636363,0xff777272,0xff8b8181,0xff988e8e,0xffa39b9b,0xffaeaaaa,0xffb8b6b6,
+ 0xffbebdbd,0xffbfbfbf,0xffbebebe,0xff606060,0xff9bb09a,0xffa7bda6,0xff585858,0xff979797,0xff919191,0xff8c8c8c,0xff0c351a,0x99000000,0x66000000,0x3d000000,
+ 0x64000000,0x91000000,0xff082812,0xff767a75,0xffaeb0ad,0xffdddedd,0xfffbfbfb,0xffdddedd,0xffadafad,0xff717771,0xff525d52,0xff646d63,0xff616161,0xff6e6e6e,
+ 0xff7a7777,0xff8b8080,0xff968d8d,0xffa19a9a,0xffb0adad,0xffb9b8b8,0xffbababa,0xff5d5d5d,0xff8fa38e,0xff9eb29c,0xff545454,0xff909090,0xff8b8b8b,0xff858585,
+ 0xff0c3319,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff6f7972,0xffd0d1d0,0xffb3b5b3,0xff9ca19c,0xff959a94,0xff9b9f9b,0xffb1b5b1,0xffcfd0cf,
+ 0xff878b87,0xff505a4f,0xff727f71,0xff828d80,0xff6f6f6f,0xff727272,0xff777272,0xff898181,0xffa09a9a,0xffafadad,0xffb5b4b4,0xff595959,0xff839682,0xff96a895,
+ 0xff505050,0xff8a8a8a,0xff858585,0xff818181,0xff0a3119,0x99000000,0x66000000,0x3d000000,0xbd000000,0xdd575757,0xffc7cac7,0xffa4a8a4,0xffa0a69f,0xffacb4ab,
+ 0xffaeb6ae,0xffaab1a9,0xff9ca39c,0xffa2a6a2,0xffcfd0ce,0xff6f736f,0xff5b675b,0xff7e8e7c,0xff92a491,0xff8b9a8a,0xff696969,0xff656565,0xff8a8383,0xffa29e9e,
+ 0xffadadad,0xff545454,0xff798a77,0xff8c9d8b,0xff4d4d4d,0xff858585,0xff808080,0xff7c7c7c,0xff0a2f17,0x99000000,0x66000000,0x3d000000,0xd9000000,0xf0a5a5a5,
+ 0xffa3a8a4,0xffa0a69f,0xffb5bdb4,0xffbcc6bb,0xffbcc6bc,0xffb9c3b8,0xffafb8ae,0xff9ba19a,0xffb0b3b0,0xffabadab,0xff4a534a,0xff728071,0xff899b88,0xff8da18c,
+ 0xff899c87,0xff81947f,0xff5b5b5b,0xff938d8d,0xffa4a3a3,0xff505050,0xff6e7f6d,0xff839281,0xff494949,0xff7f7f7f,0xff7a7a7a,0xff787878,0xff0a2e16,0x99000000,
+ 0x66000000,0x3d000000,0xe7000000,0xf9dcdcdc,0xff808b83,0xffabb4ab,0xffbcc6bb,0xffbec9bd,0xffbdc8bd,0xffbcc6bb,0xffb6c0b6,0xffa5ada5,0xff989c98,0xffdddddd,
+ 0xff404940,0xff667466,0xff81937f,0xff869984,0xff81957f,0xff7a8d79,0xff565656,0xff7a7474,0xff989494,0xff4c4c4c,0xff647563,0xff7a887a,0xff464646,0xff7a7a7a,
+ 0xff767676,0xff747474,0xff0a2d16,0x99000000,0x66000000,0x3d000000,0xec000000,0xfefbfbfb,0xff757a77,0xffa6aca6,0xffbcc6bc,0xffbdc8bd,0xffbcc6bb,0xffbac4b9,
+ 0xffb7c0b6,0xffa7b0a7,0xff90948f,0xfffbfbfb,0xff394039,0xff5f6c5e,0xff7a8c79,0xff7e927c,0xff7a8d79,0xff748772,0xff6e806c,0xff4d4d4d,0xff898383,0xff494949,
+ 0xff5b6b59,0xff717e71,0xff434343,0xff767676,0xff737373,0xff707070,0xff0a2b14,0x99000000,0x66000000,0x3d000000,0xe7000000,0xf9dcdcdc,0xff818b85,0xff959595,
+ 0xff9f9f9f,0xffb2b9b1,0xffbac4b9,0xffb8c3b7,0xffb3bdb3,0xffa3aaa2,0xff969a95,0xffd9dad9,0xff343c34,0xff576356,0xff71826f,0xff778975,0xff758874,0xff6f816d,
+ 0xff687b66,0xff4a4a4a,0xff6d6767,0xff464646,0xff51624f,0xff6a7569,0xff424242,0xff727272,0xff717171,0xff6f6f6f,0xff0a2b14,0x99000000,0x66000000,0x3d000000,
+ 0xd9000000,0xf0a5a5a5,0xffa3a8a4,0xffa6a6a6,0xffbebebe,0xff9f9f9f,0xff9f9f9f,0xffacb2ab,0xffa9b2a9,0xff969b96,0xffabadaa,0xffa0a2a0,0xff2e352d,0xff4a5449,
+ 0xff617160,0xff6c7d6a,0xff6d7f6b,0xff697c68,0xff647762,0xff5f715c,0xff464646,0xff454545,0xff4c5d4a,0xff636c62,0xff404040,0xff727272,0xff707070,0xff6f6f6f,
+ 0xff0a2b14,0x99000000,0x66000000,0x3d000000,0xbd000000,0xdd575757,0xffc7cac8,0xffa8a8a8,0xffa6a6a6,0xffb4b4b4,0xffb8b8b8,0xff939393,0xff8b8b8b,0xff999a99,
+ 0xffc1c2c1,0xff6a6b6a,0xff2d312b,0xff374036,0xff4c574a,0xff596858,0xff61725f,0xff637660,0xff60735e,0xff5b6d59,0xff454545,0xff434343,0xff475845,0xff5b635b,
+ 0xff404040,0xff717171,0xff707070,0xff6f6f6f,0xff0a2b14,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff6f7972,0xffd1d1d1,0xffb5b5b5,0xffa0a0a0,
+ 0xff999999,0xff9d9d9d,0xffafafaf,0xffc0c0c0,0xff7c7c7c,0xffe8e8e8,0xffd2d3d2,0xff2b312b,0xff313b31,0xff424e41,0xff505e4f,0xff576856,0xff596b58,0xff566853,
+ 0xff526550,0xff424242,0xff435441,0xff535a53,0xff3f3f3f,0xff707070,0xff6f6f6f,0xff6f6f6f,0xff0a2b14,0x99000000,0x66000000,0x3d000000,0x64000000,0x91000000,
+ 0xff082512,0xff797979,0xffafafaf,0xffdedede,0xfffbfbfb,0xffdcdcdc,0xffa5a5a5,0xff606060,0xffe6e6e6,0xffffffff,0xffffffff,0xffd1d1d1,0xff272a25,0xff2b332a,
+ 0xff3b4639,0xff485647,0xff4f5f4d,0xff50624e,0xff4f604d,0xff404040,0xff425340,0xff4d514d,0xff3f3f3f,0xff707070,0xff707070,0xff6f6f6f,0xff0a2b16,0x99000000,
+ 0x66000000,0x3d000000,0x40000000,0x6a000000,0xff0d381b,0xff727272,0xff5d5d5d,0xff505050,0xff4a4a4a,0xff474747,0xff414141,0xff363636,0xff767676,0xfffbfbfb,
+ 0xffffffff,0xffffffff,0xffd1d1d1,0xff222322,0xff252d25,0xff364135,0xff425041,0xff495946,0xff495c48,0xff4a5b47,0xff3f3f3f,0xff474947,0xff3f3f3f,0xff707070,
+ 0xff707070,0xff707070,0xff0a2d16,0x99000000,0x66000000,0x3d000000,0x28000000,0x4e000000,0xff0f4623,0xffa0a0a0,0xff8d8d8d,0xff818181,0xff7a7a7a,0xff757575,
+ 0xff696969,0xff535353,0xff3b3b3b,0xff747474,0xfffbfbfb,0xffffffff,0xffffffff,0xffd1d1d1,0xff1e1e1e,0xff232823,0xff354033,0xff404f3e,0xff455642,0xff465843,
+ 0xff3f3f3f,0xff414241,0xff3f3f3f,0xff707070,0xff707070,0xff717171,0xff0a2d16,0x93000000,0x62000000,0x3b000000,0x1d000000,0x3b000000,0xff124c25,0xffb6b6b6,
+ 0xffadadad,0xffa6a6a6,0xff9f9f9f,0xff989898,0xff8a8a8a,0xff727272,0xff535353,0xff343434,0xff707070,0xfffbfbfb,0xffffffff,0xffffffff,0xffd2d2d2,0xff222222,
+ 0xff242424,0xff353e34,0xff40503f,0xff435441,0xff435440,0xff3e3e3e,0xff3e3e3e,0xff707070,0xff717171,0xff727272,0xff0a2e16,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2f000000,0xff104d25,0xff104a24,0xff104823,0xff0f4523,0xff0f4220,0xff0f401f,0xff0d3c1e,0xff0c3519,0xff082914,0xff061d0f,0xff031208,0xff666866,
+ 0xfffbfbfb,0xffffffff,0xffffffff,0xff797b7a,0xff05170c,0xff051208,0xff05160c,0xff05190c,0xff05190c,0xff05190c,0xff0a2b16,0xff0a2d16,0xff0a2d16,0xff0a2e16,
+ 0xff0a2f17,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x9b000000,0xa1000000,
+ 0xad000000,0xc0000000,0xd5000000,0xe9000000,0xf8676767,0xfffbfbfb,0xfa959595,0xe6000000,0xcf000000,0xb7000000,0xa4000000,0x9c000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x67000000,0x6a000000,0x74000000,0x89000000,0xab000000,0xce000000,0xe8000000,0xf4404040,0xeb000000,0xd3000000,0xaf000000,0x8c000000,
+ 0x75000000,0x6a000000,0x67000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3e000000,0x3f000000,0x44000000,0x4b000000,0x54000000,0x5d000000,0x63000000,
+ 0x65000000,0x60000000,0x57000000,0x4e000000,0x45000000,0x40000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Games_data[] = {
+ 0xffffff,0xffffff,0x0,0x3ceee7c6,0x9dd6ceaa,0xf4cac092,0xfff2e396,0xfff2dd78,0xf4cab549,0x9dd6b92f,0x3ceeca15,0x0,0xffffff,0xffffff,
+ 0xffffff,0xfff8d8,0x7ac4c0ac,0xfbdbd6bd,0xfff6eec9,0xfffbefb5,0xffffee9c,0xffffe878,0xfffbdd4f,0xfff6d225,0xfbd9b400,0x7ab79800,0xe4be00,0xffffff,
+ 0x0,0x7ac4c0ac,0xffdbd7c2,0xff84763c,0xff84763c,0xff84763c,0xffac9f5e,0xffac9b47,0xff84763c,0xff84763c,0xff84763c,0xffc09f00,0x7aa28700,0x1000000,
+ 0x38fff8d4,0xfadbd6bd,0xff84763c,0xffa9a9a9,0xffd9d9d9,0xffe0e0e0,0xfff5e594,0xfff5e182,0xffe0e0e0,0xffd9d9d9,0xffa9a9a9,0xff84763c,0xfaa68900,0x33b99a00,
+ 0x9dd6ceaa,0xfffbf3cd,0xff84763c,0xffffffff,0xffa3a3a4,0xff777777,0xffd3bd52,0xffd3ba44,0xff777777,0xffa3a3a4,0xffffffff,0xff84763c,0xffad9000,0x98887100,
+ 0xf4cac092,0xfffbefb5,0xff84763c,0xffd2d0cb,0xff1e1f23,0xff000000,0xffac920f,0xffac9008,0xff000000,0xff1e1f23,0xffd2d0cb,0xff84763c,0xff9d8200,0xf36f5d00,
+ 0xfff2e396,0xffffee9c,0xff84763c,0xff81784c,0xff3b3415,0xff1d1800,0xffb39504,0xffb29400,0xff1d1800,0xff3b3415,0xff81784c,0xff84763c,0xff8e7600,0xfe766300,
+ 0xfff2dd78,0xffffe878,0xffffe66a,0xff8b7511,0xff917a03,0xffc7a500,0xffdab500,0xffd8b400,0xffc7a500,0xff8e7700,0xff7b6600,0xff957c00,0xff7f6a00,0xfe766300,
+ 0xf4cab549,0xfffbdd4f,0xff84763c,0xffd9bb2b,0xffffd816,0xfffdd200,0xfff8ce00,0xfff3ca00,0xffe5be00,0xffc7a500,0xff887100,0xff84763c,0xff7d6800,0xf3625100,
+ 0x9dd6b92f,0xfffbd725,0xff312900,0xff0a0800,0xffc7a500,0xffc7a500,0xffc7a500,0xffc7a500,0xffc7a500,0xffc7a500,0xff0a0800,0xff332b00,0xff7d6800,0x98695800,
+ 0x38ffd816,0xfad9b400,0xfff2c900,0xff8e7600,0xff4b3f00,0xff181500,0xff161200,0xff161200,0xff151300,0xff312a00,0xff645400,0xff7f6a00,0xfa6d5b00,0x337f6a00,
+ 0x0,0x7ab79800,0xffc09f00,0xffd1ae00,0xffc3a200,0xff625200,0xff564900,0xff544700,0xff4d4100,0xff7f6a00,0xff7f6a00,0xff6d5b00,0x7a625100,0x0,
+ 0xffffff,0x8e4be00,0x7aa18700,0xfba68900,0xffaa8d00,0xff9d8200,0xff8e7600,0xff7f6a00,0xff7d6800,0xff7b6600,0xfb6d5b00,0x7a625100,0x7f6a00,0xffffff,
+ 0xffffff,0xffffff,0x0,0x37ab8f00,0x98887100,0xf36f5d00,0xfe766300,0xfe766300,0xf3625100,0x98695800,0x37766200,0x1000000,0xffffff,0xffffff
+};
+
+static const QRgb Go_black_highlight_data[] = {
+ 0x28999b9c,0x2d949697,0x32959798,0x43868788,0x776f6f70,0x9a626263,0x93606060,0x60646565,0x31818384,0x22969899,0x1e939596,0x1b919394,0x2e9a9b9c,0x369c9d9f,
+ 0x6b7c7d7e,0xbc737474,0xe2696a6a,0xed656565,0xed616162,0xe35a5a5a,0xb24b4c4c,0x51555555,0x25818384,0x1c919394,0x34949697,0x6a848586,0xce7d7e7e,0xf97b7c7d,
+ 0xff767777,0xff767777,0xff727373,0xff5e5e5f,0xfa494a4a,0xcd393939,0x5b414243,0x237d7e7f,0x409c9e9f,0xb97f8080,0xf9838484,0xffaaabac,0xffa6a7a8,0xff9b9c9c,
+ 0xff717272,0xff5e5e5e,0xff505151,0xfc3f3f3f,0xb62e2f2f,0x46464748,0x68848585,0xde828283,0xffa0a1a2,0xffe5e6e6,0xffffffff,0xffa6a8a8,0xff7b7c7c,0xff666666,
+ 0xff545555,0xff434343,0xeb2d2d2e,0x7a2d2d2e,0x82777878,0xea757676,0xff919292,0xffbdbebe,0xffe6e6e7,0xffa2a3a4,0xff7f8080,0xff646565,0xff515152,0xff404040,
+ 0xfa2d2d2d,0xa3232324,0x766f7071,0xea6e6f6f,0xff787a7a,0xff7e8080,0xff949595,0xff757676,0xff646464,0xff575858,0xff4d4d4e,0xff404040,0xfc2d2d2d,0xb2202020,
+ 0x4a7c7e7e,0xda59595a,0xfe565757,0xff6c6d6d,0xff787878,0xff626262,0xff525354,0xff484849,0xff3c3c3c,0xff373838,0xfa242424,0xa91e1e1e,0x2e8d8f90,0x9b464747,
+ 0xf7484949,0xff5a5a5b,0xff636364,0xff515152,0xff454545,0xff3c3c3c,0xff373838,0xff2a2a2a,0xee191919,0x871e1f1f,0x26909293,0x4b585859,0xc0393939,0xfa414141,
+ 0xff4e4e4f,0xff434343,0xff3b3c3c,0xff333334,0xff2a2b2b,0xf81b1b1c,0xc0171717,0x572b2b2c,0x218e9091,0x28818384,0x5d444445,0xb52d2d2d,0xeb2e2f2f,0xfa2d2d2d,
+ 0xfd272728,0xfb1f2020,0xf1181818,0xc4171717,0x6f232424,0x2e4b4c4d,0x1e8e9091,0x1f929495,0x28787a7b,0x4b434445,0x842c2c2c,0xaf232323,0xc01c1d1d,0xb71a1a1b,
+ 0x931c1c1c,0x5c282929,0x2f4a4b4c,0x1b7c7e7e
+};
+
+static const QRgb Go_black_data[] = {
+ 0x0,0x0,0x0,0x184a4a4a,0x664a4a4a,0x89454545,0x763c3c3c,0x302d2d2d,0x2000000,0x0,0x0,0x0,0x0,0x0,
+ 0x6d505050,0xf5535353,0xff525252,0xff4d4d4d,0xff454545,0xfd393939,0xb3272727,0x18080808,0x1000000,0x0,0x0,0x64505050,0xfe575757,0xff595959,
+ 0xff585858,0xff4d4d4d,0xff464646,0xff3d3d3d,0xff313131,0xce1a1a1a,0x1d000000,0x1000000,0xb474747,0xec525252,0xff575757,0xff989898,0xffa2a2a2,0xff4f4f4f,
+ 0xff434343,0xff3b3b3b,0xff313131,0xff212121,0x98090909,0x12000000,0x48474747,0xff515151,0xff545454,0xff888888,0xff787878,0xff474747,0xff3f3f3f,0xff373737,
+ 0xff2d2d2d,0xff212121,0xe80f0f0f,0x3f000000,0x64424242,0xff4b4b4b,0xff4c4c4c,0xff4c4c4c,0xff474747,0xff404040,0xff3a3a3a,0xff323232,0xff282828,0xff1e1e1e,
+ 0xf8111111,0x6e000000,0x4b363636,0xff434343,0xff444444,0xff424242,0xff3f3f3f,0xff3a3a3a,0xff333333,0xff2b2b2b,0xff222222,0xff1b1b1b,0xfa0e0e0e,0x82000000,
+ 0x101b1b1b,0xf1343434,0xff3b3b3b,0xff3a3a3a,0xff363636,0xff313131,0xff2b2b2b,0xff232323,0xff1c1c1c,0xff1a1a1a,0xf3050505,0x75000000,0x2000000,0x861d1d1d,
+ 0xff2d2d2d,0xff2f2f2f,0xff2c2c2c,0xff282828,0xff212121,0xff1c1c1c,0xff1b1b1b,0xfe0f0f0f,0xd8000000,0x4a000000,0x0,0x15000000,0xb4101010,0xfe1e1e1e,
+ 0xff1f1f1f,0xff1d1d1d,0xff1b1b1b,0xff1a1a1a,0xfe0e0e0e,0xed000000,0x8f000000,0x18000000,0x0,0x2000000,0x28000000,0x97020202,0xe90a0a0a,0xf90d0d0d,
+ 0xfb0a0a0a,0xf6030303,0xdf000000,0x95000000,0x2c000000,0x3000000,0x0,0x0,0x2000000,0x1b000000,0x55000000,0x89000000,0x9c000000,0x8b000000,
+ 0x58000000,0x1d000000,0x3000000,0x0
+};
+
+static const QRgb Go_white_data[] = {
+ 0x0,0x0,0x0,0x0,0x10d0d0d,0x730302c,0xb282825,0x7000000,0x2000000,0x0,0x0,0x0,0x0,0x0,
+ 0x1000000,0x50bdbdac,0xc7cecebb,0xf5d3d3c0,0xf8c3c3b1,0xde99998b,0x875b5b52,0x17030303,0x2000000,0x0,0x0,0x0,0x86cdcdba,0xfef7f7e2,
+ 0xfffdfde8,0xfff8f8e1,0xffe7e7d2,0xffcdcdba,0xffa6a697,0xd355554d,0x2a020202,0x2000000,0x0,0x4dc5c5b2,0xfef7f7e2,0xfffffff0,0xfffffff1,0xfffdfde9,
+ 0xffeeeed8,0xffd7d7c3,0xffb7b7a6,0xff87877a,0xbf2b2b27,0x1a000000,0x1000000,0xc4d1d1be,0xfffdfde8,0xfffffff1,0xfffffffd,0xfffffff7,0xffececd6,0xffd5d5c1,
+ 0xffb7b7a6,0xff8e8e81,0xfa474740,0x51000000,0x53e3e38,0xf4d4d4c0,0xfff8f8e1,0xfffdfde9,0xfffffff7,0xfffafaec,0xffe2e2cd,0xffcbcbb8,0xffafaf9e,0xff88887b,
+ 0xff4c4c45,0x8b070706,0x8383833,0xf7c3c3b2,0xffe7e7d2,0xffeeeed8,0xffececd6,0xffe2e2cd,0xffd1d1be,0xffbcbcaa,0xff9f9f90,0xff79796d,0xff40403a,0x9d070706,
+ 0x3000000,0xd89d9d8f,0xffcdcdba,0xffd7d7c3,0xffd5d5c1,0xffcbcbb8,0xffbcbcaa,0xffa6a697,0xff89897c,0xff616158,0xfe2c2c28,0x87010101,0x1000000,0x7a65655b,
+ 0xffa6a697,0xffb7b7a6,0xffb7b7a6,0xffafaf9e,0xff9f9f90,0xff89897c,0xff6a6a60,0xff3f3f39,0xf2161613,0x5b000000,0x0,0xe060605,0xca585851,0xff87877a,
+ 0xff8e8e81,0xff88887b,0xff79796d,0xff616158,0xff3f3f39,0xfc1e1e1b,0xa7010101,0x23000000,0x0,0x1000000,0x1f030303,0xb62d2d29,0xfa474740,0xff4c4c45,
+ 0xff40403a,0xfe2c2c28,0xf2161613,0xa7010101,0x39000000,0x5000000,0x0,0x0,0x1000000,0x14000000,0x44010100,0x7e080807,0x8e080807,0x7a010101,
+ 0x55000000,0x22000000,0x5000000,0x0
+};
+
+static const QRgb Go_data[] = {
+ 0x5000000,0x8000000,0xd000000,0x14000000,0x19000000,0x1d000000,0x20000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,
+ 0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x22000000,0x20000000,0x1e000000,
+ 0x19000000,0x14000000,0xe000000,0x9000000,0x8000000,0x11010112,0x2a04033b,0x3803022d,0x40020221,0x4702021d,0x4b02021b,0x4d02021a,0x4d02021a,0x4d02021a,
+ 0x4d02021a,0x4d02021b,0x4d02021b,0x4c02021b,0x4c02021b,0x4c02021c,0x4c02021c,0x4c02021c,0x4c02021c,0x4c02021c,0x4c02021c,0x4c02021c,0x4c02021c,0x4c02021c,
+ 0x4c02021c,0x4c02021c,0x4a02021b,0x46010115,0x3e010108,0x27000001,0x19000000,0x10000000,0xd000000,0x2a04023a,0xbf09076c,0xde121764,0xe00f1752,0xe10e164e,
+ 0xe20e164e,0xe20d154d,0xe20d154d,0xe20e164d,0xe20e164e,0xe20e164f,0xe20e174f,0xe20e174f,0xe20e174f,0xe20e1750,0xe20e1750,0xe20e1750,0xe20e1750,0xe20e1750,
+ 0xe20e1750,0xe20e1750,0xe20e1750,0xe20e1750,0xe20e1750,0xe20e1750,0xe20e174d,0xe1071135,0xd0020513,0x53000105,0x2a000000,0x1a000000,0x14000000,0x3803022d,
+ 0xde121764,0xffb5a364,0xffd6d66a,0xffd5d867,0xffd5d96d,0xffd5d562,0xffd5d769,0xffd5d764,0xffd5d76a,0xffd5d663,0xffd5d866,0xffd6da6f,0xffd6d86a,0xffd6d968,
+ 0xffd6da6d,0xffd6d763,0xffd6d86a,0xffd6d865,0xffd6d96a,0xffd6d764,0xffd6d966,0xffd6da70,0xffd6d86a,0xffd6d968,0xffd5da6c,0xffcfd25b,0xf2ac9e48,0x70000002,
+ 0x3e000000,0x28000000,0x19000000,0x41020221,0xe00f1752,0xff9f7f42,0xfff7ba50,0xfffdc155,0xfffdc35a,0xfffcbf53,0xfffcc056,0xffdaa342,0xffc8973e,0xfffcbf52,
+ 0xfffdbf50,0xfffdc359,0xfffcbf53,0xfffdc155,0xfffdc35a,0xfffcbf53,0xfffcc056,0xffdaa342,0xffc8973e,0xfffcbf52,0xfffdbf50,0xfffdc359,0xfffcbf53,0xfffdc155,
+ 0xfffdc35a,0xfffcc053,0xf5c49142,0x84000000,0x4f000000,0x32000000,0x1e000001,0x4802011e,0xe10d154d,0xff987a40,0xfff2af4a,0xfffcb853,0xfffcb751,0xfffab64f,
+ 0xfffab54f,0xffc9903b,0xffb07d33,0xfffab54d,0xfffcb64f,0xfffcba56,0xfffab54c,0xfffcb853,0xfffcb751,0xfffab64f,0xfffab54f,0xffc9903b,0xffb07d33,0xfffab54d,
+ 0xfffcb64f,0xfffcba56,0xfffab54c,0xfffcb853,0xfffcb751,0xfffab64f,0xf6be893d,0x93000000,0x5c000000,0x3b000000,0x20000001,0x4d02011c,0xe20c144b,0xff98793f,
+ 0xfff2b04c,0xfffcb853,0xfffcb64f,0xfff8b24c,0xfff2b04d,0xffbe8737,0xffa4742e,0xffeead4c,0xfff7b24d,0xfffbb753,0xfffab54e,0xfffcb853,0xfffcb64f,0xfffab44d,
+ 0xfffab650,0xffca903b,0xffb07d32,0xfffab650,0xfffcb64f,0xfffcb854,0xfffab54e,0xfffcb853,0xfffcb64f,0xfffab54d,0xf7bd8a3d,0x9d000000,0x65000000,0x40000000,
+ 0x22000001,0x5102011d,0xe30c134a,0xff987940,0xfff2b04e,0xfffcb64e,0xfff9b451,0xffe8a745,0xffd8ba84,0xffd7d1b6,0xffc3c0a9,0xffac9972,0xffd09945,0xfff2b04f,
+ 0xfff9b54f,0xfffcb64e,0xfffcb752,0xfffab349,0xfffab54f,0xffc98f39,0xffaf7d32,0xfffab54d,0xfffcb64e,0xfffcb853,0xfffab650,0xfffcb64e,0xfffcb752,0xfffab44a,
+ 0xf8bd893c,0xa3000000,0x6a000000,0x43000000,0x23000001,0x5202011c,0xe30c1249,0xff97783f,0xfff2b251,0xfffbb54c,0xffedad4e,0xffd9c293,0xfffefeed,0xfffefeea,
+ 0xffeaead4,0xffc1c1af,0xff827b66,0xffd29945,0xfff3b250,0xfffcb64d,0xfffcb853,0xfffab44c,0xfffab54e,0xffc9903b,0xffae7c31,0xfffab651,0xfffcb64f,0xfffcb752,
+ 0xfffab853,0xfffcb64d,0xfffcb853,0xfffab54d,0xf8bb883d,0xa5000002,0x6c000001,0x44000000,0x23000001,0x5202011c,0xe30b1249,0xff97773e,0xffcb9543,0xffc78f3d,
+ 0xffaf8442,0xfff0f0d9,0xfffffff2,0xfffffffb,0xffe9e9d4,0xffc2c2b0,0xff87877a,0xff715831,0xffba883c,0xffc9903d,0xffc99342,0xffc8913f,0xffc8913e,0xffa17533,
+ 0xff8b6429,0xffc8913e,0xffc9913d,0xffca9240,0xffc89241,0xffca913e,0xffc99342,0xffc8913f,0xf8ac7e39,0xa7000003,0x6e000002,0x46000001,0x23000001,0x5202011c,
+ 0xe30b1248,0xff97763c,0xffb7863c,0xffad7d36,0xff967846,0xffe4e4cf,0xfff4f4df,0xfff0f0dd,0xffd5d5c1,0xffb1b1a1,0xff79796e,0xff504128,0xff9d7232,0xffae7e36,
+ 0xffaf7f38,0xffb07f36,0xffaf7f37,0xff8d6428,0xff7a5927,0xffaf7f37,0xffb07e34,0xffb07e35,0xffaf7f38,0xffb07f37,0xffaf7f38,0xffb17f36,0xf9a57938,0xab000005,
+ 0x71000005,0x49000004,0x23000001,0x5202011c,0xe30b1248,0xff97773e,0xfff2b04d,0xfff8b24c,0xffc89446,0xffbab9a6,0xffd2d2be,0xffcbcbb8,0xffb5b5a4,0xff919183,
+ 0xff56564e,0xff75592d,0xffe2a448,0xfffab34d,0xfffab751,0xfffbb44c,0xfffab651,0xffc9903d,0xffae7d33,0xfffbb54c,0xfffcb54e,0xfffcb751,0xfffab650,0xfffcb54e,
+ 0xfffab751,0xfffbb54c,0xf9bc8a41,0xb1000008,0x77000007,0x4d000007,0x23000001,0x5202011c,0xe30b1248,0xff97783f,0xfff2b04d,0xfffab34c,0xffdea24a,0xff8e7952,
+ 0xff99998b,0xff9a9a8b,0xff858578,0xff5c5c54,0xff3c3629,0xffb7863d,0xffebab4a,0xfffbb44c,0xfffcb854,0xfffab34a,0xfffbb650,0xffc9903b,0xffaf7e35,0xfffab44b,
+ 0xfffcb64e,0xfffcb854,0xfffab64f,0xfffcb54d,0xfffcb854,0xfffab44a,0xfabb883f,0xb700000b,0x7e00000a,0x51000008,0x23000001,0x5202011c,0xe30b1248,0xff97783f,
+ 0xfff2b14e,0xfffbb54d,0xfff0af4f,0xffcb923c,0xff7b6139,0xff514a3b,0xff403c32,0xff4f3f26,0xffa47632,0xffdfa34b,0xfff5b24e,0xfffcb64e,0xfffcb853,0xfffab34a,
+ 0xfffab651,0xffc9903a,0xffaf7e36,0xfffab44b,0xfffcb54c,0xfffcb955,0xfffab650,0xfffcb64e,0xfffcb853,0xfffab44a,0xfabb883e,0xbd00000e,0x8400000c,0x5500000a,
+ 0x23000001,0x5202011c,0xe30b1248,0xff97773e,0xfff2b04c,0xfffcb751,0xfffab754,0xffecab4a,0xffd79d46,0xff9b6e2b,0xff835c24,0xffc9923f,0xffe3a344,0xfff5b351,
+ 0xfff9b44d,0xfffcb751,0xfffcb955,0xfff9b54f,0xfffab652,0xffc98f38,0xffaf7c31,0xfffab54e,0xfffcb54c,0xfffcb954,0xfffab54e,0xfffcb751,0xfffcb955,0xfffab64f,
+ 0xfabb8840,0xc0000010,0x8700000e,0x5700000b,0x23000001,0x5202011c,0xe30c1249,0xff97783f,0xfff2af4a,0xfffcb853,0xfffcb751,0xfff9b54e,0xfff4b04d,0xffbe8837,
+ 0xffa4752f,0xffeeac49,0xfff7b24d,0xfffbb955,0xfffab54c,0xfffcb853,0xfffcb751,0xfff9b54e,0xfff4b04d,0xffbd8837,0xffa4742f,0xffecab48,0xfff6b14d,0xfffbb955,
+ 0xfffab54c,0xfffcb853,0xfffcb751,0xfffab64f,0xfabb873e,0xc0000010,0x8700000e,0x5700000b,0x23000002,0x5102011d,0xe30c134a,0xff97783e,0xfff2b04c,0xfffcb853,
+ 0xfffcb64f,0xfff5b04b,0xffac7d41,0xff614631,0xff4e3829,0xff7a592f,0xffda9d44,0xfff4b251,0xfff9b44d,0xfffcb853,0xfffab44e,0xffecaa4a,0xffdbbd85,0xffd7d1b6,
+ 0xffc4c0a9,0xffaa9872,0xffcb9545,0xffefae4f,0xfff8b34d,0xfffcb853,0xfffcb64f,0xfffab54d,0xfabb883f,0xbd00000e,0x8400000d,0x5500000a,0x23000001,0x5002011c,
+ 0xe30c144b,0xff987940,0xfff2b04e,0xfffbb54d,0xfff7b350,0xff966c3b,0xff543e3a,0xff503c38,0xff402f2c,0xff312421,0xff3a2a1a,0xffd69c45,0xfff3b14d,0xfffbb54d,
+ 0xfff2af4e,0xffddc593,0xfffefeed,0xfffefeea,0xffeaead4,0xffc1c1af,0xff807966,0xffc89243,0xfff0ae4c,0xfffbb54d,0xfffcb752,0xfffab44a,0xfabb883d,0xb800000c,
+ 0x7e00000a,0x52000008,0x22000001,0x4f02011c,0xe20d154c,0xff987a40,0xfff2b251,0xfffab44c,0xffe1a44b,0xff4f3a35,0xff6c5854,0xff65534f,0xff3a2b28,0xff2d211f,
+ 0xff1b1312,0xff755528,0xffe4a84b,0xfff9b34c,0xffe0a853,0xfff1f0d9,0xfffffff2,0xfffffffb,0xffe9e9d4,0xffc2c2b0,0xff87877a,0xff7d6136,0xffe2a64b,0xfffab44c,
+ 0xfffcb853,0xfffab54d,0xf9ba883e,0xb2000008,0x78000008,0x4d000007,0x22000000,0x4e02021b,0xe20e164e,0xff997a3f,0xffcb9543,0xffc78f3d,0xff9a7137,0xff45332f,
+ 0xff45332f,0xff3d2d2a,0xff322422,0xff251b19,0xff150f0e,0xff3b2b15,0xffaa7c37,0xffc58d3c,0xffaf8a4f,0xffe4e4cf,0xfff4f4df,0xfff0f0dd,0xffd5d5c1,0xffb1b1a1,
+ 0xff79796e,0xff504229,0xffac7d38,0xffc68e3d,0xffc99342,0xffc8913f,0xf9ac7e39,0xac000006,0x72000005,0x49000004,0x22000000,0x4d02021b,0xe20e174f,0xff997a3e,
+ 0xffb7863c,0xffae7e36,0xff90692f,0xff362824,0xff362825,0xff302320,0xff261c1a,0xff191311,0xff100b0a,0xff3b2a13,0xff926a2e,0xffab7b35,0xff967035,0xffb9b9a6,
+ 0xffd2d2be,0xffcbcbb8,0xffb5b5a4,0xff919183,0xff56564e,0xff4d3b20,0xff976e30,0xffad7d36,0xffaf7f38,0xffb17f36,0xf8a57937,0xa8000003,0x6e000002,0x46000001,
+ 0x22000000,0x4d02021b,0xe20e174f,0xff997b40,0xfff2b04d,0xfffbb44d,0xffe3a649,0xff594022,0xff251b19,0xff201816,0xff171110,0xff100c0b,0xff16100b,0xff8d662d,
+ 0xffda9f45,0xfff8b24c,0xffe5a74a,0xff967f55,0xff99998b,0xff9a9a8b,0xff858578,0xff5c5c54,0xff393428,0xffa77a35,0xffe5a749,0xfffab34d,0xfffab751,0xfffbb54c,
+ 0xf8bc8b41,0xa5000002,0x6c000001,0x44000000,0x22000000,0x4c02021b,0xe20e1750,0xff997c42,0xfff2b04d,0xfffcb54d,0xfff2b050,0xffc68e3a,0xff503a1c,0xff17110c,
+ 0xff110d0a,0xff241a0e,0xff705123,0xffbf8b3f,0xffebab4a,0xfffbb44c,0xfff4b251,0xffd4983e,0xff82663b,0xff524b3c,0xff403c32,0xff4b3d25,0xff996f30,0xffd69c47,
+ 0xfff2b04c,0xfffcb54d,0xfffcb854,0xfffab44a,0xf8bc893e,0xa4000000,0x6a000000,0x43000000,0x22000000,0x4c02021c,0xe20e1750,0xff997c41,0xfff2b14e,0xfffcb64e,
+ 0xfffab652,0xffeaa745,0xffcb9442,0xff876127,0xff6a4c20,0xffa37531,0xffc68e3b,0xffe7a94e,0xfff6b34e,0xfffcb64e,0xfffbb752,0xfff1ac47,0xffdda147,0xff9f722d,
+ 0xff835e28,0xffc68e3b,0xffdfa043,0xfff3b252,0xfff9b54f,0xfffcb64e,0xfffcb853,0xfffab44a,0xf8bc893d,0xa3000000,0x6a000000,0x43000000,0x22000000,0x4c02021c,
+ 0xe20e1750,0xff997b40,0xfff2b04c,0xfffcb751,0xfffcb955,0xfff7b34e,0xfff0ae4e,0xffb88333,0xff9c6e2b,0xffe4a547,0xfff1ad48,0xfff9b653,0xfffab54e,0xfffcb751,
+ 0xfffcb955,0xfff8b44e,0xfff7b351,0xffc28a36,0xffa8772f,0xfff2af4b,0xfff9b24b,0xfffbb853,0xfffab54e,0xfffcb751,0xfffcb955,0xfffab64f,0xf8bd8a3f,0xa3000000,
+ 0x6a000000,0x43000000,0x22000000,0x4c02021c,0xe20e1750,0xff997c41,0xfff2af4a,0xfffcb853,0xfffcb751,0xfffab64f,0xfffab54f,0xffc9903b,0xffb07d33,0xfffab54d,
+ 0xfffcb64f,0xfffcba56,0xfffab54c,0xfffcb853,0xfffcb751,0xfffab64f,0xfffab54f,0xffc9903b,0xffb07d33,0xfffab54d,0xfffcb64f,0xfffcba56,0xfffab54c,0xfffcb853,
+ 0xfffcb751,0xfffab64f,0xf8bd893c,0xa3000000,0x69000000,0x43000000,0x20000000,0x4a02021b,0xe20e174d,0xff987b3f,0xfff2b04c,0xfffcb853,0xfffcb64f,0xfffab44d,
+ 0xfffab650,0xffca903b,0xffb07d32,0xfffab650,0xfffcb64f,0xfffcb854,0xfffab54e,0xfffcb853,0xfffcb64f,0xfffab44d,0xfffab650,0xffca903b,0xffb07d32,0xfffab650,
+ 0xfffcb64f,0xfffcb854,0xfffab54e,0xfffcb853,0xfffcb64f,0xfffab54d,0xf7bd893d,0x9e000000,0x65000000,0x41000000,0x1e000000,0x46010115,0xe1071135,0xff8f7438,
+ 0xffe2a448,0xffebaa49,0xffebab4c,0xffe9a744,0xffe9a94a,0xffbf8736,0xffa97830,0xffe9a848,0xffeba949,0xffebab4d,0xffe9a94b,0xffebaa49,0xffebab4c,0xffe9a744,
+ 0xffe9a94a,0xffbf8736,0xffa97830,0xffe9a848,0xffeba949,0xffebab4d,0xffe9a94b,0xffeaaa49,0xffebab4c,0xffeaa745,0xf7b6843a,0x94000000,0x5d000000,0x3b000000,
+ 0x19000000,0x3e010108,0xcf020513,0xf6624a23,0xf93e2d15,0xfa3c2b12,0xfb3d2c14,0xfb3c2b12,0xfb3c2b13,0xfb3d2b12,0xfb3c2b12,0xfb3c2b13,0xfb3c2b13,0xfb3c2c14,
+ 0xfb3c2c14,0xfb3c2b13,0xfc3d2c15,0xfc3c2b13,0xfd3c2b13,0xfd3c2b13,0xfd3c2b13,0xfd3c2b14,0xfc3c2b14,0xfc3c2c14,0xfc3c2c14,0xfb3c2b13,0xfb3c2c14,0xfa3e2c13,
+ 0xef5f451e,0x83000000,0x51000000,0x33000000,0x14000000,0x27000001,0x53000105,0x70000002,0x84000000,0x93000000,0x9d000000,0xa3000000,0xa3000000,0xa3000000,
+ 0xa3000000,0xa3000000,0xa4000002,0xa6000002,0xa9000003,0xaf000007,0xb801010c,0xc102010e,0xc9020112,0xce020113,0xce020113,0xca010112,0xc201010f,0xb900000c,
+ 0xb0000007,0xa9000004,0xa1000002,0x95000002,0x84000000,0x60000000,0x40000000,0x29000000,0xe000000,0x19000000,0x2a000000,0x3e000000,0x4f000000,0x5c000000,
+ 0x65000000,0x69000000,0x6a000000,0x6a000000,0x6a000000,0x6a000000,0x6b000000,0x6d000002,0x70000004,0x77000007,0x8100000c,0x8d000010,0x96000013,0x9b000014,
+ 0x9b000014,0x97000013,0x8e000011,0x8300000d,0x78000008,0x71000005,0x68000003,0x5e000001,0x50000000,0x40000000,0x2c000000,0x1c000000,0x8000000,0x10000000,
+ 0x1a000000,0x28000000,0x32000000,0x3b000000,0x40000000,0x43000000,0x43000000,0x43000000,0x43000000,0x43000000,0x44000000,0x45000001,0x49000004,0x4e000007,
+ 0x5600000c,0x5f00000f,0x66000011,0x6b000012,0x6b000012,0x67000011,0x6000000f,0x5700000d,0x4f000008,0x49000004,0x43000001,0x3c000000,0x33000000,0x29000000,
+ 0x1c000000,0x12000000
+};
+
+static const QRgb HelpBrowser_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x34000000,0x37000000,0x39040404,0x38050505,0x35050505,0x30050505,0x2a060606,0x22080808,0x1a0a0a0a,0x130d0d0d,0xc151515,0x7242424,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x5d686839,0x938a8a4a,0xbe9a9a50,0xdea5a552,0xf3aaaa52,0xfeabab4f,0xf3a5a545,0xe09a9a3d,0xc58a8a33,0xa0737327,0x724f4f1a,0x410c0c0c,0x350e0e0e,0x280d0d0d,
+ 0x1d121212,0x120e0e0e,0xb171717,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x6f7d7d47,0xba9f9f5a,0xf7aca55c,0xffa69750,0xff9c8744,0xff937a3a,0xff8c6e31,0xff86672b,0xff856729,0xff866b27,0xff887327,0xff8c7d26,
+ 0xf9908928,0xc77d7d20,0x8a575716,0x49111111,0x36131313,0x26141414,0x18151515,0xe121212,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x475c5c36,0xa79b9b5b,0xf8ada35f,0xffa28e4e,0xff977b41,0xff95783c,0xff93783b,0xff917638,0xff8d7333,0xff896e2f,
+ 0xff856a2a,0xff816424,0xff7d5e20,0xff78591b,0xff755617,0xff7e6918,0xfa837a17,0xbe6f6f14,0x6f39390f,0x42131313,0x2d111111,0x1c121212,0xf111111,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x5f777746,0xcba5a15f,0xffa79655,0xff9a7e44,0xff997d44,0xff9a8044,0xff987f43,
+ 0xff988041,0xff947e3c,0xff907a38,0xff8b7433,0xff866e2d,0xff816727,0xff7b6122,0xff765c1e,0xff725619,0xff6f5015,0xff6c4d12,0xff786610,0xdc726e0d,0x8945450f,
+ 0x4a151515,0x31151515,0x1d121212,0xf111111,0x7242424,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x5f777746,0xd8a69f5e,0xffa28c4f,0xff997d44,
+ 0xff9b8347,0xff9e8649,0xff9e894b,0xff9e8948,0xff9a8845,0xff958240,0xff8e7c3a,0xff887533,0xff806c2c,0xff7b6627,0xff755f22,0xff705a1d,0xff6e561a,0xff6b5117,
+ 0xff684c14,0xff654510,0xff6c550f,0xe66d670e,0x8e414110,0x4d171717,0x31151515,0x1d1a1a1a,0xe121212,0x62b2b2b,0x3000000,0xa000000,0x16000000,0x475c5c36,
+ 0xcba5a15f,0xffa28b4f,0xff997d45,0xff9e8549,0xffa18a4c,0xffa18d50,0xffa1914e,0xff9e8f4d,0xff998a48,0xff928341,0xff8f8245,0xffa09669,0xffb4ad8c,0xffb1a888,
+ 0xffaea586,0xff908258,0xff6f5c26,0xff654f17,0xff644c14,0xff634914,0xff5f4313,0xff675011,0xe0686410,0x80323212,0x4a151515,0x2d171717,0x18151515,0xb171717,
+ 0x6000000,0x11000000,0x23000000,0xa79b9b5b,0xffa69454,0xff997b43,0xff9d8248,0xffa18b4d,0xffa28f51,0xffa39553,0xffa29652,0xff9d924d,0xff9a9053,0xffcfcbb2,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f3ef,0xffa69c80,0xff5c4716,0xff5e4718,0xff5e4418,0xff5c3f16,0xff685612,0xcb5c5c12,
+ 0x66171717,0x43171717,0x26141414,0x120e0e0e,0xb000000,0x1b000000,0x6f7d7d47,0xf8aca25e,0xff987941,0xff9a7f44,0xff9e884a,0xffa18e50,0xffa49554,0xffa49955,
+ 0xffa19752,0xff9e9758,0xffe8e7db,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffa19881,0xff584319,
+ 0xff5b441b,0xff5a411a,0xff583d16,0xfb696113,0xa7424214,0x5a171717,0x37171717,0x1d121212,0x12000000,0x26000000,0xba9f9f5a,0xff9f8b4b,0xff967840,0xff9b8146,
+ 0xffa08a4d,0xffa49251,0xffa59a55,0xffa49a54,0xff9d9651,0xffe9e9dc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xfff3f2ef,0xff4f3e19,0xff56431d,0xff59421e,0xff573d1b,0xff5f4d17,0xda5b5b14,0x72191919,0x49151515,0x29131313,0x19000000,0x5d686839,
+ 0xf7aba45b,0xff93743c,0xff95793f,0xff9b8246,0xffa08c4b,0xffa59552,0xffa59a54,0xffa29a53,0xffc8c59f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc4c3b2,
+ 0xff777451,0xff807c5e,0xfff2f1ef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff473a18,0xff52411e,0xff564120,0xff583e1f,0xff553a1b,0xfb655f15,0xa0343415,
+ 0x5b161616,0x36131313,0x21000000,0x938a8a4a,0xffa4944e,0xff907037,0xff957a3d,0xff9b8243,0xffa08c4a,0xffa3934e,0xffa49851,0xff9d9850,0xfff1f1e8,0xffffffff,
+ 0xffffffff,0xffffffff,0xffeae9e2,0xff4e4a15,0xff46420f,0xff40390a,0xffd9d7cf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff433617,0xff503f1f,0xff564223,
+ 0xff574124,0xff523a1f,0xff5e5218,0xc6474716,0x6d171717,0x43131313,0x29000000,0xbe9a9a50,0xff998240,0xff8e6f35,0xff93783c,0xff988141,0xff9d8946,0xff9f9149,
+ 0xffa0954c,0xff9b9449,0xffa7a367,0xffa6a36f,0xffb4b38f,0xffacac88,0xff929066,0xff514d12,0xff49440b,0xff989478,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffafab9f,0xff423618,0xff4e3e20,0xff564425,0xff574226,0xff543c23,0xff59481c,0xe1535317,0x7b191919,0x4e141414,0x2f000000,0xdea5a552,0xff8e7336,0xff8c6b32,
+ 0xff907537,0xff957e3d,0xff9b8642,0xff9c8e45,0xff9d9045,0xff999042,0xff928b3d,0xff858235,0xff79752a,0xff6b6820,0xff5f5b16,0xff5e591c,0xffc3c1ac,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xfff1f1ef,0xff443a20,0xff443619,0xff4f4023,0xff564529,0xff59442b,0xff543d26,0xff523e1f,0xf05a5a17,0x881a1a1a,0x58141414,
+ 0x34000000,0xf3aaaa52,0xff86662c,0xff88692d,0xff8d7133,0xff927a39,0xff96813c,0xff98863e,0xff9a8b3e,0xff968b3b,0xff8f8735,0xff86802c,0xff7a7523,0xff6e6819,
+ 0xff7e793c,0xffe9e8df,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffd7d5cf,0xff4d452a,0xff3c3113,0xff473a1d,0xff524226,0xff59472d,0xff59442d,0xff543e2a,
+ 0xff4d3821,0xfa5f5f18,0x901b1b1b,0x5f181818,0x37000000,0xfeabab4f,0xff805d25,0xff856329,0xff8a6d2f,0xff8d7432,0xff917a35,0xff938037,0xff928234,0xff928532,
+ 0xff8c822c,0xff857b23,0xff79711a,0xff7e772f,0xfff4f4ef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff9f9b8b,0xff3f3517,0xff392e0e,0xff423616,0xff4c3e20,
+ 0xff544429,0xff594830,0xff584630,0xff543f2c,0xff4b3323,0xfe60601a,0x951b1b1b,0x64171717,0x39040404,0xf3a5a545,0xff815e24,0xff815f25,0xff85672a,0xff886e2d,
+ 0xff8c742f,0xff8e792f,0xff8e7d2d,0xff8c7d2a,0xff877a23,0xff7f741b,0xff746a12,0xffd6d3bc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff837d66,0xff312805,
+ 0xff372c0a,0xff3e3211,0xff47391a,0xff504125,0xff57462d,0xff5b4933,0xff584632,0xff523e2d,0xff4b3623,0xfb5a5a1a,0x971b1b1b,0x65171717,0x38050505,0xe09a9a3d,
+ 0xff816224,0xff7d5b21,0xff816225,0xff846929,0xff866d28,0xff877229,0xff887326,0xff867522,0xff81711a,0xff786a13,0xff766a19,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xff908b76,0xff312803,0xff352a07,0xff3b2f0d,0xff423515,0xff4d3d1f,0xff55452b,0xff594a32,0xff5b4935,0xff594735,0xff503d2d,0xff4c3b24,0xf351511a,
+ 0x951a1a1a,0x63151515,0x35050505,0xc58a8a33,0xff846c24,0xff78551c,0xff7c5b20,0xff7e6222,0xff816725,0xff826a24,0xff826c21,0xff7f6b1b,0xff7a6715,0xff72610c,
+ 0xff786a25,0xffa39c77,0xff9b9577,0xff959076,0xff918c76,0xff4c4323,0xff332906,0xff392d0b,0xff403412,0xff493b1c,0xff514226,0xff584830,0xff5c4b36,0xff5c4b39,
+ 0xff574535,0xff4e3b2d,0xff4c3f22,0xe747471a,0x901b1b1b,0x5e161616,0x30050505,0xa0737327,0xff897925,0xff734f17,0xff77561c,0xff7a5c1e,0xff7c6120,0xff7d6420,
+ 0xff7c651d,0xff796318,0xff736011,0xff69570c,0xff7b6e37,0xff7c7349,0xff736b48,0xff6c6447,0xff696148,0xff332907,0xff372c0a,0xff3d3110,0xff453719,0xff4e4023,
+ 0xff56472e,0xff5a4b35,0xff5c4d3a,0xff5a493a,0xff544234,0xff4b372b,0xff4f4620,0xd53b3b1a,0x87191919,0x58141414,0x2a060606,0x724f4f1a,0xf98f8727,0xff714d16,
+ 0xff725018,0xff75561b,0xff765b1c,0xff79601d,0xff78601b,0xff745e17,0xff6d5815,0xff635011,0xffd1cdbe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff352a0c,
+ 0xff3b2f11,0xff433518,0xff4b3d22,0xff53442b,0xff594a34,0xff5c4d3a,0xff5c4d3c,0xff574739,0xff503f32,0xff483528,0xfd4f4c1e,0xbb2c2c1a,0x7b191919,0x4e141414,
+ 0x22080808,0x410c0c0c,0xc77d7d20,0xff7b6317,0xff6d4915,0xff6f4f18,0xff72551b,0xff74591b,0xff745b1c,0xff70591b,0xff695519,0xff604c17,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffc8c5be,0xff372c12,0xff413319,0xff483a21,0xff50422a,0xff574833,0xff5c4d3a,0xff5d4d3d,0xff5a4a3c,0xff544437,0xff4b392e,0xff4a3f24,
+ 0xe943431c,0x9a1a1a1a,0x6c151515,0x420f0f0f,0x1a0a0a0a,0x350e0e0e,0x8a575716,0xfa837717,0xff694612,0xff694814,0xff6d4e17,0xff6f531c,0xff71551f,0xff6d541f,
+ 0xff67521f,0xff706038,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffafaaa1,0xff3c3019,0xff443821,0xff4d3f29,0xff554632,0xff5a4c39,0xff5d4d3d,0xff5c4c3e,
+ 0xff564539,0xff4f3e33,0xff483629,0xfd4c471f,0xc830301b,0x87191919,0x5b141414,0x350e0e0e,0x130d0d0d,0x280d0d0d,0x480e0e0e,0xbe6f6f14,0xff77610f,0xff634011,
+ 0xff674616,0xff694b1c,0xff6c4f20,0xff685022,0xff634e23,0xff92856b,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff958f84,0xff413621,0xff4a3d29,0xff524330,
+ 0xff564937,0xff5b4c3c,0xff5b4b3d,0xff57473b,0xff513f34,0xff48362c,0xff4b4023,0xe23f3f1c,0x9b1c1c1c,0x72161616,0x49111111,0x280d0d0d,0xc151515,0x1d121212,
+ 0x36131313,0x703a3a11,0xdc726d0d,0xff6b520f,0xff603d14,0xff63431a,0xff65481f,0xff644a22,0xff614824,0xff5b4524,0xff524022,0xff493920,0xff433520,0xff413420,
+ 0xff423623,0xff473a28,0xff4f402f,0xff544535,0xff58483a,0xff59493b,0xff554539,0xff514035,0xff4a382e,0xff493b25,0xf146441e,0xb427271c,0x81181818,0x5a141414,
+ 0x350e0e0e,0x1c090909,0x7242424,0x120e0e0e,0x26141414,0x42131313,0x8947470f,0xe66d660d,0xff664d11,0xff5c3a17,0xff5e401c,0xff5f4320,0xff5d4324,0xff594326,
+ 0xff544026,0xff4f3d26,0xff4b3b27,0xff493a28,0xff4a3b2a,0xff4e3e2e,0xff524333,0xff554537,0xff554437,0xff534236,0xff4f3e33,0xff48362c,0xff493b25,0xf446421e,
+ 0xc22e2e1c,0x8c1a1a1a,0x65141414,0x42131313,0x250e0e0e,0x120e0e0e,0x3000000,0xb171717,0x18151515,0x2d111111,0x4a151515,0x8e434310,0xe0686510,0xff685412,
+ 0xff593a17,0xff57391c,0xff583c20,0xff563e24,0xff543d26,0xff523d28,0xff503c29,0xff4d3c2b,0xff4f3d2d,0xff503f30,0xff514032,0xff504032,0xff4f3d31,0xff4b392e,
+ 0xff473629,0xff4b3f23,0xf146441e,0xc22e2e1c,0x8f1b1b1b,0x6b151515,0x4a111111,0x2d111111,0x170b0b0b,0xa000000,0x1000000,0x5000000,0xe121212,0x1c121212,
+ 0x31151515,0x4d171717,0x80333314,0xcb5c5c12,0xfb696013,0xff5f4a17,0xff52361b,0xff51351f,0xff503723,0xff4e3825,0xff4e3827,0xff4e3929,0xff4c392a,0xff4d382b,
+ 0xff4c372c,0xff4a362a,0xff483528,0xff4a3e24,0xfd4c471f,0xe23f3f1c,0xb427271c,0x8c1a1a1a,0x6b151515,0x4c111111,0x30101010,0x1b090909,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xf111111,0x1d121212,0x31151515,0x4a151515,0x66171717,0xa7424214,0xda5b5b14,0xfb655e15,0xff5c4f18,0xff56441c,0xff4f3b1f,
+ 0xff4b3420,0xff483122,0xff483322,0xff4b3823,0xff4b3f22,0xff504621,0xfd4f4c1e,0xe943431c,0xc830301b,0x9b1c1c1c,0x81181818,0x65141414,0x4a111111,0x30101010,
+ 0x1c090909,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0x10202020,0x1d1a1a1a,0x2d171717,0x43171717,0x5a171717,0x72191919,
+ 0xa0343415,0xc6474716,0xe1535317,0xf05a5a17,0xfa5f5f18,0xfe60601a,0xfb5a5a1a,0xf351511a,0xe747471a,0xd53b3b1a,0xbb2c2c1a,0x9a1a1a1a,0x87191919,0x72161616,
+ 0x5a141414,0x42131313,0x2d111111,0x1b090909,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x7242424,0xe121212,
+ 0x18151515,0x26141414,0x37171717,0x49151515,0x5b161616,0x6d171717,0x7b191919,0x881a1a1a,0x901b1b1b,0x951b1b1b,0x971b1b1b,0x951a1a1a,0x901b1b1b,0x87191919,
+ 0x7b191919,0x6c151515,0x5b141414,0x49111111,0x350e0e0e,0x250e0e0e,0x170b0b0b,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x62b2b2b,0xb171717,0x120e0e0e,0x1d121212,0x29131313,0x36131313,0x43131313,0x4e141414,0x58141414,0x5f181818,0x64171717,
+ 0x65171717,0x63151515,0x5e161616,0x58141414,0x4e141414,0x420f0f0f,0x350e0e0e,0x280d0d0d,0x1c090909,0x120e0e0e,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb HelpButton_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x3edcdcdc,0x93dbdbdb,0xd5dedede,0xfadcdcdc,0xd8d1d1d1,0x9ec8c8c8,0x509d9d9d,0xc000000,0x3000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x60dcdcdc,0xdbe3e3e3,0xffe2e2e2,0xffd3d3d3,0xffcecece,0xffcdcdcd,0xffd7d7d7,0xe6c5c5c5,0x838d8d8d,0x18000000,0x4000000,0xffffff,
+ 0xffffff,0x3edddcdc,0xdbdadada,0xffd8d8d8,0xffaaa9a9,0xff434343,0xff424142,0xff686768,0xffc4c4c4,0xffbdbdbd,0xec9e9d9e,0x75595959,0x18000000,0x3000000,
+ 0xffffff,0x94d5d6d5,0xffd1d0d0,0xffbdbdbd,0xff000000,0xff737373,0xffbdbdbd,0xff000000,0xff717171,0xffb6b7b6,0xffabaaaa,0xc8616161,0x3d000000,0xc000000,
+ 0xffffff,0xd5cbcbcb,0xffbbbbbb,0xffadadad,0xff6d6d6d,0xff868686,0xffb5b5b5,0xff000000,0xff6a6a6a,0xffb1b1b1,0xffb1b1b1,0xef616161,0x61000000,0x1a000000,
+ 0xffffff,0xfabfbfbf,0xffababab,0xffa4a4a4,0xffb2b2b2,0xffa6a6a6,0xff545454,0xff2a2a2a,0xff979797,0xffaeaeae,0xffa2a2a2,0xfd5d5d5d,0x7c000000,0x25000000,
+ 0xffffff,0xd9b0b0b0,0xffa0a0a0,0xffa6a6a6,0xff9f9f9f,0xff606060,0xff000000,0xffa0a0a0,0xffa6a6a6,0xffa3a3a3,0xff8c8c8c,0xf2484848,0x85000000,0x2b000000,
+ 0xffffff,0xa0949494,0xff9b9b9a,0xff9a9a9a,0xffa5a5a5,0xff9d9d9d,0xffa1a1a0,0xffa4a4a4,0xff9b9b9b,0xff9a9b9a,0xff6a696a,0xdf363636,0x7c000000,0x25000000,
+ 0xffffff,0x516f6f6f,0xe7818181,0xff8d8d8d,0xff949494,0xff545454,0xff353535,0xff9e9e9e,0xff8f8f8f,0xff737273,0xf5414141,0xbb1a1a1a,0x61000000,0x1a000000,
+ 0xffffff,0xc000000,0x84505050,0xed626262,0xff6f6e6e,0xff656565,0xff353535,0xff767576,0xff636263,0xf5414140,0xcd1f1f1f,0x83000000,0x3d000000,0xc000000,
+ 0xffffff,0x3000000,0x18000000,0x762f2f2f,0xc93b3b3b,0xf0404040,0xfd464646,0xf3393939,0xdf2a2a2a,0xbb161616,0x83000000,0x4b000000,0x18000000,0x3000000,
+ 0xffffff,0xffffff,0x4000000,0x18000000,0x3d000000,0x61000000,0x7c000000,0x85000000,0x7c000000,0x61000000,0x3d000000,0x18000000,0x4000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x3000000,0xc000000,0x1a000000,0x25000000,0x2b000000,0x25000000,0x1a000000,0xc000000,0x3000000,0xffffff,0xffffff
+};
+
+static const QRgb ImageViewer_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0xfff0dc5c,0x18000000,0xf000000,0xc000000,0xfff0dc5c,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,
+ 0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,
+ 0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xff7c4000,0x29000000,0x18000000,0x12000000,0xfff0dc5c,
+ 0xffbc8000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,
+ 0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xff9c6000,0xff7c4000,
+ 0x3d000000,0x25000000,0x17000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,
+ 0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,
+ 0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x4e000000,0x2e000000,0x1b000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xff7c4000,0xff7c4000,
+ 0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,
+ 0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xffbc8000,0xffac7000,
+ 0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,
+ 0xff9c6000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xff020204,0xff060507,0xff1f1e1d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xff030305,0xff020204,0xff030304,0xff020204,0xff020204,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000,
+ 0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xffd6d6d5,0xff030204,
+ 0xff8a8a89,0xff121214,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,
+ 0x66000000,0x3d000000,0x21000000,0x42000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xff020204,0xff795407,0xffd7b00b,0xff4d3c06,0xff1d1d1e,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,
+ 0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x2a000000,0x4f000000,0xffbc8000,0xffac7000,0xff9c6000,0xff7c4000,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xffedb50b,0xfff2d523,0xffb68608,0xff302305,0xff020204,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x40000000,0x6a000000,0xffbc8000,0xffac7000,
+ 0xff645730,0xff524428,0xff7b807b,0xff7c827b,0xff434c42,0xff707570,0xffffffff,0xffffffff,0xffffffff,0xff020204,0xffbdbbba,0xff9c7226,0xffc3c3c2,0xfff4f4f3,
+ 0xff030304,0xff6a696a,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,
+ 0x64000000,0x91000000,0xffbc8000,0xff7c6b42,0xffa1a3a0,0xffd7d8d7,0xfffafafa,0xffd7d8d7,0xff9fa29f,0xff5f655f,0xff808780,0xffffffff,0xff8a8a8b,0xfff9f9f7,
+ 0xfffefefc,0xfffdfdfb,0xfffefefc,0xfffefefc,0xff020204,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,
+ 0xff9c6000,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff7c6f40,0xffc7c9c7,0xffa28c67,0xff825e35,0xffdcdddb,0xffd3d5d3,0xffc6c8c6,0xffc6c7c6,
+ 0xff767a76,0xff3f483e,0xff020204,0xffd5d5d4,0xfffdfdfb,0xfffdfdfb,0xfff9f9f8,0xffcccccc,0xffd2d2d2,0xff151515,0xff020204,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xbd000000,0xf1454545,0xffbdc0bd,0xffa18344,0xff987029,0xff855d2c,
+ 0xffe4e6e4,0xffe2e4e2,0xffdee0de,0xffcdcfcd,0xffc6c7c5,0xff5d615d,0xff596159,0xfffcfcfa,0xfffcfcfa,0xfffcfcfa,0xfffcfcfa,0xfffdfdfb,0xfffcfcfa,0xff1e1e1d,
+ 0xff080709,0xff343436,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xef000000,0xfe979797,
+ 0xffa3905c,0xffa47b29,0xff9f772f,0xff8a6332,0xffe8ebe8,0xffe7eae7,0xffe4e7e4,0xffdedfdd,0xffc5c7c5,0xff9d9f9d,0xff394239,0xfffcfcfa,0xffeaeae9,0xfffdfdfb,
+ 0xfffdfdfb,0xfffcfcfa,0xfffdfdfb,0xff1f1f21,0xff2f2f2f,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,
+ 0x66000000,0x3d000000,0xfd000000,0xffd5d5d5,0xff9f7d2a,0xffa77f2c,0xffa17a32,0xff8b6432,0xffe8ece8,0xffe8ebe8,0xffe6e9e6,0xffe1e3e1,0xff535554,0xffd6d7d6,
+ 0xff303830,0xfffdfdfb,0xffe5e5e5,0xfffcfcfa,0xfffbfbf9,0xfffcfcfb,0xfffcfcfa,0xff454546,0xff070709,0xff020204,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,
+ 0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xfe000000,0xfffafafa,0xffa2791c,0xffa67d2b,0xffa17a32,0xff8b6432,0xffe8ebe8,0xffe7ebe7,
+ 0xffe6e9e6,0xffe1e4e1,0xffb89031,0xfffafafa,0xff2a302a,0xfffdfdfb,0xffe5e5e5,0xfffdfdfb,0xfffcfcfa,0xfffcfcfa,0xfff4e8c8,0xff654f0c,0xff020204,0xff211f19,
+ 0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0xfd000000,0xffd5d5d5,0xff9f7d2b,0xffa07626,
+ 0xff986d29,0xff875f2e,0xffe7ebe7,0xffe7eae6,0xffe5e8e5,0xffd5af32,0xffcba939,0xffd2d3d2,0xff252c25,0xff4d4d4d,0xfffdfdfb,0xfffcfcfb,0xfffdfdfb,0xfffcfcfa,
+ 0xffccb688,0xffc08708,0xff684907,0xffecb50b,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,
+ 0xe4000000,0xfe979797,0xffa3905d,0xffa67b2b,0xffa27733,0xff815629,0xffdfdfdf,0xffe3e5e2,0xffe2e5e2,0xffd4ae2e,0xffbeaa65,0xff919391,0xff20261f,0xff020204,
+ 0xfffdfdfb,0xfffcfcfa,0xfffcfcfb,0xfffdfdfb,0xff604309,0xfff3ba0c,0xfff2b90c,0xfff5bd0c,0xfff4bc0c,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,
+ 0xff9c6000,0x99000000,0x66000000,0x3d000000,0xbd000000,0xe7454545,0xffbdc0be,0xffa38346,0xff9a702b,0xff885d2f,0xffe7e7e7,0xffdbdbdb,0xffa57c29,0xffc2a445,
+ 0xffb6b7b6,0xff585958,0xff1f231e,0xff62561d,0xfff2f2f0,0xfffcfcfa,0xffc0c0be,0xff020204,0xff7d5306,0xfff5bd0c,0xfff5bd0c,0xfff5bc0c,0xffe2a60c,0xffffffff,
+ 0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x92000000,0xb8000000,0xff9c7720,0xffc8c8c8,0xffa38c68,0xff835e36,
+ 0xffdddddd,0xffd4d4d4,0xffc5c5c5,0xffb5b5b5,0xff6b6b6b,0xffe4e4e4,0xffcacbca,0xff1e231e,0xff262c27,0xff2e2e30,0xff2e2e30,0xff2e2e31,0xff754a04,0xffe2a90a,
+ 0xffd29609,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,0x66000000,0x3d000000,0x64000000,0x91000000,
+ 0xffbc8000,0xff956d22,0xffa2a2a2,0xffd8d8d8,0xfffafafa,0xffd5d5d5,0xff979797,0xff4e4e4e,0xffe1e1e1,0xffffffff,0xffffffff,0xffc9c9c9,0xff1a1d19,0xff696d68,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffbc8000,0xffd09c14,0xffac7000,0xff9c6000,0x99000000,
+ 0x66000000,0x3d000000,0x40000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xff815919,0xff926a15,0xff906813,0xff8f6712,0xff8d6510,0xff8a620d,0xff646464,0xfffafafa,
+ 0xffffffff,0xffffffff,0xffc8c8c8,0xff161716,0xff191f19,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,0xffbc8000,
+ 0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x66000000,0x3d000000,0x28000000,0xfff0dc5c,0xffbc8000,0xffac7000,0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14,
+ 0xffd09c14,0xffd09c14,0xff2b2b2b,0xff626262,0xfffafafa,0xffffffff,0xffffffff,0xffc8c8c8,0xff131313,0xff171b17,0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14,
+ 0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14,0xffd09c14,0xffac7000,0xff9c6000,0xff7c4000,0x62000000,0x3b000000,0x1d000000,0xfff0dc5c,0xffbc8000,0xffac7000,
+ 0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xff252525,0xff5e5e5e,0xfffafafa,0xffffffff,0xffffffff,0xffcacaca,0xff161616,
+ 0xff181818,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xffac7000,0xff9c6000,0xff7c4000,0x5a000000,0x36000000,
+ 0x17000000,0xfff0dc5c,0xffbc8000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff010a04,0xff545654,
+ 0xfffafafa,0xffffffff,0xffffffff,0xff676a68,0xff020e06,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,0xff9c6000,
+ 0xff9c6000,0xff7c4000,0x4e000000,0x2e000000,0x12000000,0xfff0dc5c,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0x93000000,0x99000000,0x9b000000,0xa1000000,
+ 0xad000000,0xc0000000,0xd5000000,0xe9000000,0xf8555555,0xfffafafa,0xfa858585,0xe6000000,0xcf000000,0xb7000000,0xa4000000,0x9c000000,0x99000000,0x99000000,
+ 0x99000000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0xff7c4000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x67000000,0x6a000000,0x74000000,0x89000000,0xab000000,0xce000000,0xe8000000,0xf4303030,0xeb000000,0xd3000000,0xaf000000,0x8c000000,
+ 0x75000000,0x6a000000,0x67000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3e000000,0x3f000000,0x44000000,0x4b000000,0x54000000,0x5d000000,0x63000000,
+ 0x65000000,0x60000000,0x57000000,0x4e000000,0x45000000,0x40000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Ipkg_data[] = {
+ 0xffffff,0xffffff,0xffffff,0x1242424,0x1242424,0x2242424,0x3242424,0x4000000,0x7333333,0xf1b1b1b,0x1e1b1b1b,0x30202020,0x44222222,0x51222222,
+ 0x591f1f1f,0x5b222222,0x5a1f1f1f,0x541d1d1d,0x4a202020,0x3e202020,0x2f222222,0x22222222,0x1a1f1f1f,0x12171717,0xb232323,0x82e2e2e,0x4242424,0x3242424,
+ 0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0x1242424,0x2242424,0x3242424,0x5242424,0x7242424,0xb232323,0x101a1a1a,0x1a1f1f1f,0x2f222222,
+ 0x50222222,0x751f1f1f,0x94202020,0xa8202020,0xb21f1f1f,0xb31f1f1f,0xaf1f1f1f,0xaa202020,0x9d202020,0x8a1f1f1f,0x74222222,0x5d222222,0x481d1d1d,0x36242424,
+ 0x271f1f1f,0x1b1e1e1e,0x13282828,0xc242424,0x7242424,0x5242424,0x2242424,0x1242424,0x1242424,0x3242424,0x6242424,0xc242424,0x13242424,0x1b1e1e1e,
+ 0x24202020,0x30202020,0x47222222,0x6d232323,0x9a222222,0xc0202020,0xe45b7076,0xf380a5af,0xfb99cad7,0xfea1ddef,0xf988c4d7,0xf1659cac,0xe6426772,0xd21e1e1e,
+ 0xc4202020,0xaf222222,0x961f1f1f,0x7d222222,0x641f1f1f,0x4e232323,0x39222222,0x28252525,0x1a242424,0x10242424,0x8242424,0x3242424,0x3242424,0x7242424,
+ 0x15242424,0x27242424,0x3c242424,0x4f232323,0x61242424,0x75242424,0x90202020,0xb4202020,0xd9333b3d,0xf47797a1,0xffb0e3f1,0xffb1e4f3,0xffabe3f3,0xffa0dff1,
+ 0xff92daef,0xff7fd4ed,0xff6ecde8,0xff4d8696,0xfc524238,0xf24e3323,0xda2a2522,0xc7222222,0xb1222222,0x9b232323,0x81242424,0x66252525,0x4c242424,0x32242424,
+ 0x18242424,0x9242424,0x6242424,0x14242424,0x33242424,0x5f242424,0x83202020,0x9c252525,0xaf232323,0xc1242424,0xd4232323,0xe72b1f1f,0xf87b929c,0xffade3f3,
+ 0xffafe3f3,0xffade3f3,0xffa7e1f2,0xff9addf0,0xff89d7ee,0xff74d1eb,0xff60cbe8,0xff4ec5e6,0xff5e8b93,0xff583523,0xff2e2520,0xfc503424,0xf25e3925,0xdc453024,
+ 0xc3222222,0xb2242424,0x96242424,0x6d242424,0x3a242424,0x16242424,0xe242424,0x25242424,0x59242424,0x9c282323,0xcb3e1e1e,0xdf501616,0xec621212,0xf66f0a0a,
+ 0xfd7a0505,0xff86575e,0xffa2ddef,0xffa7e1f2,0xffa8e2f3,0xffa7e1f2,0xff9fdef1,0xff92daef,0xff7bd3ec,0xff65cce9,0xff4ec5e6,0xff3dbde0,0xff3bafce,0xff997961,
+ 0xffcc652d,0xffad5a2a,0xff7e4728,0xff452f25,0xfe422f25,0xf6633d29,0xe3603c28,0xa8302925,0x5e242424,0x24242424,0x21242424,0x3d242424,0x77242424,0xc53d1e1e,
+ 0xfd880303,0xff890000,0xff860000,0xff820000,0xff7d0000,0xff88919f,0xff97dcf0,0xff9addf0,0xff9bddf0,0xff9addf0,0xff92daef,0xff81d5ed,0xff6acee9,0xff4fc5e6,
+ 0xff3cbbdd,0xff37accb,0xff34a0bd,0xff6a8080,0xffca642b,0xffd86b2e,0xffe67331,0xfff07834,0xffdc7134,0xffa85b2f,0xff5a3929,0xd2583829,0x71242424,0x2f242424,
+ 0x53242424,0x6c242424,0x99242424,0xcc242424,0xed501717,0xff890000,0xff850000,0xff800000,0xff7a0000,0xff7fb9cd,0xff86d7ee,0xff87d7ee,0xff87d7ee,0xff85d6ee,
+ 0xff7ad3ec,0xff67cde9,0xff4bc4e6,0xff3bb6d7,0xff35a4c3,0xff3097b2,0xff2d8ca5,0xff427e8d,0xffc1612b,0xffd36a2f,0xffe17133,0xffed7837,0xfff57d3b,0xffad5e34,
+ 0xf9633e2b,0xc1242424,0x7b242424,0x3a242424,0x9a242424,0xab242424,0xc3242424,0xdd242424,0xea242424,0xf6660f0f,0xff840000,0xff7f0000,0xff790000,0xff70cce6,
+ 0xff70d0ea,0xff6dcfea,0xff6acee9,0xff63cbe8,0xff56c8e7,0xff3ec1e4,0xff37accb,0xff3199b5,0xff2d8aa4,0xff297e96,0xff25778c,0xff277387,0xff9d5129,0xffcd6931,
+ 0xffdd7237,0xffea7a39,0xffe5793c,0xff473327,0xe7382d27,0xcc242424,0x92242424,0x5e242424,0xd96b4e2d,0xf49a6a33,0xf1825c2f,0xf06b4e2d,0xf14f3e29,0xf5663e28,
+ 0xfd6f190d,0xfe662212,0xff582914,0xff59b3cb,0xff56c8e7,0xff4ec5e6,0xff45c3e5,0xff3dbddf,0xff38b0d0,0xff339ebc,0xff2d8ba4,0xff287a91,0xff236e82,0xff20677a,
+ 0xff1f6173,0xff205968,0xff30231d,0xff31251e,0xff724229,0xffb26034,0xff7d4a2f,0xf6613e2b,0xed242424,0xe1242424,0xbd242424,0x93242424,0xbd242424,0xe5674b2b,
+ 0xffb57a36,0xffb67b36,0xffb67b36,0xffb67b36,0xffb77333,0xff6e481f,0xff583c1a,0xff49909d,0xff3dbde0,0xff3bb5d6,0xff37accb,0xff34a0bd,0xff2e90ab,0xff297e96,
+ 0xff236d81,0xff1e5f70,0xff1b5766,0xff1a5161,0xff1a5160,0xff193f49,0xff1a1a1a,0xff1e1e1d,0xff362822,0xfe703f25,0xffa8672f,0xffcb913e,0xffd7a747,0xfed2a346,
+ 0xeda17e3c,0xbc5d4d2e,0x93242424,0xbc242424,0xe25c452a,0xfeb37a36,0xffb67b36,0xffb67b36,0xffb67b36,0xffba7a36,0xff9e612a,0xff4a645f,0xff37abca,0xff34a2bf,
+ 0xff3096b1,0xff2b89a2,0xff27798e,0xff22687a,0xff1d5868,0xff194b59,0xff164652,0xff16434f,0xff164651,0xff20272b,0xff5f301b,0xffa0622b,0xffcb903d,0xffd7a747,
+ 0xffd7a747,0xffce923e,0xf27e6635,0xd9353027,0xb5242424,0x91242424,0x57242424,0x8a242424,0xbc242424,0xde513f29,0xfdb07835,0xffb67b36,0xffb67b36,0xffb67b36,
+ 0xffb67b36,0xffbb7634,0xff657369,0xff2f92ad,0xff2a859d,0xff25768b,0xff206678,0xff1b5665,0xff174854,0xff143e4a,0xff283640,0xff623f31,0xff9e632e,0xffc8903e,
+ 0xffd7a747,0xffd7a747,0xffd6a446,0xffbc7a34,0xff863819,0xff4d0303,0xc9242424,0xa3242424,0x76242424,0x53242424,0x28242424,0x52242424,0x8c242424,0xbe242424,
+ 0xdf483828,0xffaf7734,0xffb67b36,0xffb67b36,0xffb67b36,0xffb67b36,0xffb97b36,0xffa57345,0xff2b7689,0xff20677a,0xff1f5767,0xff363943,0xff6c3b2b,0xffa4622e,
+ 0xffc9903d,0xffd7a747,0xffd7a747,0xffd7a747,0xffcc9940,0xff9a5e28,0xff501a0c,0xff410000,0xff4a0303,0xff510505,0x9b252525,0x6a242424,0x40242424,0x25242424,
+ 0x10242424,0x29242424,0x56242424,0x93242424,0xc5252525,0xff7d5125,0xff92632b,0xff98672d,0xff9f6c2f,0xffaf7536,0xffc17f3e,0xffbd7c38,0xffbe7936,0xff7b3b28,
+ 0xffaa612b,0xffca903d,0xffd7a747,0xffd7a747,0xffd7a747,0xffd7a747,0xffb18439,0xff6b4620,0xff390806,0xff420000,0xff4e0000,0xff5b0000,0xff630303,0xff670d0d,
+ 0x7b232323,0x4a242424,0x26242424,0x12242424,0x8242424,0x15242424,0x33242424,0x65242424,0x9d242424,0xffd17848,0xffac683b,0xffa6673b,0xff996137,0xff8f5d34,
+ 0xff8d5c33,0xffc47a4e,0xfff88f5c,0xffad602a,0xffd7a747,0xffd7a747,0xffd7a747,0xffcd9d42,0xff91682d,0xff4b2816,0xff311010,0xff3d0c0c,0xff4d0505,0xff5c0000,
+ 0xff6a0000,0xff780303,0xff7b0d0d,0xff7a1919,0x6d232323,0x3f242424,0x1f242424,0xd242424,0x5242424,0xf242424,0x23242424,0x49242424,0x7d242424,0xffdd7e4f,
+ 0xfff28d5b,0xfffd9865,0xffff9d6e,0xfffea173,0xfffda174,0xfffc9f73,0xfff99b6d,0xff580505,0xff8f5f29,0xffb88a3b,0xff774b20,0xff3e0a05,0xff3c0505,0xff400c0c,
+ 0xff421010,0xff510c0c,0xff670505,0xff790000,0xff880303,0xff8f0f0f,0xff8f1a1a,0xff872222,0x6a242424,0x3d242424,0x1e242424,0xd242424,0x4242424,0xd242424,
+ 0x1e242424,0x3f242424,0x6c242424,0xffd87d50,0xfff08d5d,0xfffc9968,0xffffa071,0xffffa478,0xfffea57a,0xfffca479,0xfff99e73,0xff4b0505,0xff470303,0xff460000,
+ 0xff480000,0xff4d0000,0xff530505,0xff560c0c,0xff531010,0xff680c0c,0xff820505,0xff940606,0xff9e1313,0xffa41d1d,0xff9c2424,0xff8d2a2a,0x68242424,0x3c242424,
+ 0x1d242424,0xc242424,0x4242424,0xc242424,0x1d242424,0x3b242424,0x66242424,0xffd37c50,0xffee8d5d,0xfffc9a6b,0xffffa274,0xffffa67a,0xfffda77d,0xfffba57d,
+ 0xfff8a278,0xff590606,0xff5a0303,0xff5e0303,0xff620000,0xff690000,0xff6e0505,0xff6c0c0c,0xff671010,0xff7d0c0c,0xff990c0c,0xffa71616,0xffae1f1f,0xffb02929,
+ 0xffa32f2f,0xff8d2f2f,0x68242424,0x3c242424,0x1d242424,0xc242424,0x4242424,0xb242424,0x1b242424,0x39242424,0x63242424,0xffd07a50,0xffed8d5e,0xfffc9a6b,
+ 0xffffa376,0xffffa77c,0xfffda97f,0xfffba77f,0xfff8a37a,0xff650a0a,0xff6d0505,0xff750303,0xff7c0000,0xff830000,0xff870505,0xff7f0c0c,0xff771212,0xff8c1212,
+ 0xffa61a1a,0xffb52424,0xffba2e2e,0xffb73131,0xffa63535,0xff8a3434,0x67242424,0x3b242424,0x1d242424,0xc242424,0x3242424,0xa242424,0x19242424,0x35242424,
+ 0x5d242424,0xffca794f,0xffe98c5d,0xfffb9a6b,0xfffea275,0xffffa77c,0xfffda980,0xfffaa880,0xfff7a47b,0xff6f0c0c,0xff7c0606,0xff890303,0xff900000,0xff990000,
+ 0xff9a0505,0xff8d1010,0xff801a1a,0xff961e1e,0xffaf2828,0xffbd3131,0xffbf3838,0xffbc3d3d,0xffa53c3c,0xff863636,0x65242424,0x3a242424,0x1c242424,0xc242424,
+ 0x3242424,0x9242424,0x16242424,0x2e242424,0x52242424,0xffc3744d,0xffe2885b,0xfff79768,0xfffda073,0xfffea77b,0xfffda97f,0xfff9a780,0xfff6a47c,0xff730f0f,
+ 0xff860808,0xff980303,0xffa10000,0xffa80000,0xffa60a0a,0xff971b1b,0xff872323,0xff9c2929,0xffb63535,0xffc13e3e,0xffc34343,0xffbc4545,0xffa44040,0xff7f3737,
+ 0x60242424,0x37242424,0x1b242424,0xb242424,0x2242424,0x7242424,0x11242424,0x25242424,0x43242424,0xc6ac6f51,0xffd38058,0xffed9165,0xfff99c70,0xfffda479,
+ 0xfffca67d,0xfff8a67e,0xfff5a37a,0xff731010,0xff8c0808,0xffa10303,0xffad0000,0xffb30808,0xffaf1b1b,0xff9b2828,0xff8a2d2d,0xffa03636,0xffb94141,0xffc24747,
+ 0xffc04b4b,0xffb64949,0xff9a4141,0xff773838,0x57242424,0x31242424,0x18242424,0xa242424,0x1242424,0x5242424,0xc242424,0x1a242424,0x32242424,0x5a474747,
+ 0xc5a97459,0xfedb8860,0xffef976b,0xfffaa074,0xfffca47a,0xfff7a47a,0xfff3a179,0xff721212,0xff900a0a,0xffa90303,0xffb60808,0xffb91a1a,0xffb42b2b,0xff9f3333,
+ 0xff8c3737,0xffa03f3f,0xffb44949,0xffb74e4e,0xffad4c4c,0xff9c4848,0xff823e3e,0xff6a3636,0x48242424,0x29242424,0x13242424,0x8242424,0x1242424,0x3242424,
+ 0x7242424,0x11242424,0x21242424,0x39242424,0x61484848,0xc1aa7a63,0xfddf8d66,0xfff0996e,0xfff89f75,0xfff5a077,0xfff19d75,0xff721313,0xff930a0a,0xffae0808,
+ 0xffb91a1a,0xffbd2b2b,0xffb63838,0xff9e3d3d,0xff873d3d,0xff954343,0xff9f4a4a,0xff984949,0xff884343,0xfb7a3f3f,0xd8753c3c,0x835f3333,0x36242424,0x1e242424,
+ 0xe242424,0x6242424,0xffffff,0x1242424,0x4242424,0xa242424,0x14242424,0x24242424,0x3b242424,0x62484848,0xb9a47b67,0xfedf8d66,0xffee986e,0xfff09a71,
+ 0xffed9970,0xff701313,0xff950d0d,0xffb01a1a,0xffb92b2b,0xffb63838,0xffaa4040,0xff8e4040,0xff743c3c,0xff794040,0xfe7a4040,0xee794141,0xba6b3b3b,0x6a332929,
+ 0x4d242424,0x37242424,0x23242424,0x13242424,0x9242424,0x4242424,0xffffff,0x1242424,0x2242424,0x5242424,0xa242424,0x15242424,0x24242424,0x3a242424,
+ 0x5f434343,0xb3a37a69,0xfcde8d65,0xffe69268,0xffe69268,0xff6d1616,0xff901a1a,0xffa62828,0xffa93636,0xff9f3e3e,0xff8c4040,0xff703c3c,0xfb5f3838,0xd96a3c3c,
+ 0x8d4e3131,0x5e242424,0x4d242424,0x3d242424,0x2d242424,0x1f242424,0x14242424,0xa242424,0x5242424,0x2242424,0xffffff,0xffffff,0x1242424,0x2242424,
+ 0x5242424,0xb242424,0x14242424,0x23242424,0x38242424,0x5a404040,0xa9997766,0xfad78661,0xffdd8a61,0xff631d1d,0xff7c2424,0xff8a2f2f,0xff843636,0xfe773939,
+ 0xe8723b3b,0xb45f3737,0x692a2525,0x55242424,0x46242424,0x38242424,0x2b242424,0x21242424,0x17242424,0xf242424,0x9242424,0x5242424,0x2242424,0x1242424,
+ 0xffffff,0xffffff,0xffffff,0x1242424,0x2242424,0x5242424,0xa242424,0x14242424,0x22242424,0x36242424,0x55393939,0x9a937463,0xf7d28259,0xff562222,
+ 0xff602828,0xf66e2f2f,0xca6d3434,0x7e422b2b,0x5b242424,0x4c242424,0x3d242424,0x31242424,0x26242424,0x1d242424,0x15242424,0xf242424,0xa242424,0x6242424,
+ 0x4242424,0x2242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1242424,0x2242424,0x4242424,0xa242424,0x12242424,0x20242424,
+ 0x31242424,0x48363636,0xa7925b50,0xdb692424,0x975d2929,0x5a242424,0x4f242424,0x42242424,0x35242424,0x2a242424,0x20242424,0x18242424,0x12242424,0xd242424,
+ 0x9242424,0x6242424,0x4242424,0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1242424,
+ 0x2242424,0x4242424,0x9242424,0x10242424,0x1b242424,0x27242424,0x34363636,0x38242424,0x39242424,0x34242424,0x2c242424,0x23242424,0x1b242424,0x14242424,
+ 0xe242424,0xa242424,0x7242424,0x5242424,0x3242424,0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x1242424,0x2242424,0x4242424,0x7242424,0xd242424,0x14242424,0x19242424,0x1d242424,0x1d242424,0x1a242424,
+ 0x15242424,0x10242424,0xc242424,0x8242424,0x5242424,0x4242424,0x2242424,0x1242424,0x1242424,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff
+};
+
+static const QRgb Language_data[] = {
+ 0x1000000,0x4000000,0xb000000,0x17000000,0x27000000,0x39000000,0x49000000,0x58000000,0x805f3131,0x90773939,0x90763434,0x73461b1b,0x50000000,0x3d000000,
+ 0x28000000,0x16000000,0xb000000,0x7000000,0xb000000,0x18000000,0x26000000,0x31000000,0x34000000,0x2e000000,0x21000000,0x13000000,0x8000000,0x2000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x4000000,0xd000000,0x1d000000,0x32000000,0x4b000000,0x8c7b4848,0xc8c17272,0xfffc8b8b,0xfffc7576,0xfffb6666,
+ 0xfffb5e5f,0xfffb5859,0xefe94849,0xa6981a1b,0x4c000000,0x2d000000,0x17000000,0x10000000,0x18000000,0x2b000000,0x82a66d6f,0xdfe98d8f,0xfffb777a,0xc5d83c40,
+ 0x47350506,0x22000000,0x10000000,0x5000000,0x1000000,0xffffff,0xffffff,0xffffff,0x9000000,0x19000000,0x32000000,0x5c2b1a1a,0xcfcf8586,0xfffc8787,
+ 0xfffb5253,0xfff90e0f,0xffe40506,0xfff30607,0xfff70607,0xfff70607,0xfff90a0b,0xfff90e0f,0xc7ac0405,0x49000000,0x29000000,0x1d000000,0x26000000,0x5a5a3738,
+ 0xfffd9fa2,0xfffb5a5e,0xfff9282e,0xfff5161c,0xdea50f13,0x33000000,0x19000000,0x8000000,0x1000000,0xffffff,0xffffff,0xffffff,0xe000000,0x23000000,
+ 0x4f341f1f,0xe2e69596,0xfffb6464,0xffc40506,0xff610203,0xf1430202,0xe3490202,0xf9960404,0xffde0506,0xfff70607,0xfff90607,0xfff70607,0xffc60506,0xa1630303,
+ 0x3b000000,0x2b000000,0x36000000,0xa4b46b6d,0xfffb7579,0xfff9161c,0xfff9161c,0xfff7161c,0xff7a0b0e,0x63360506,0x1f000000,0xa000000,0x1000000,0xffffff,
+ 0xffffff,0xffffff,0x10000000,0x28000000,0xcde46667,0xfffb5253,0xff950404,0xe6320102,0x99150000,0x6a000000,0x6e000000,0x83000000,0xdaa10404,0xfff91011,
+ 0xfff90607,0xfff90607,0xffca0506,0xda570204,0x49000000,0x37000000,0x42000000,0xd6db8183,0xfffb5459,0xfff9161c,0xfff9161c,0xffeb151a,0xff5b080a,0x66240304,
+ 0x20000000,0xb000000,0x1000000,0xffffff,0xffffff,0xffffff,0xe000000,0x23000000,0x62740303,0xde900404,0xe1350102,0x67090000,0x53000000,0x4c000000,
+ 0x7d000000,0xb1000000,0xd9000000,0xfffb4849,0xfff90607,0xfff90607,0xffb90405,0xfe380101,0xfb000000,0xf0000000,0xe0000000,0xfffc8f92,0xfffa3035,0xfff9161c,
+ 0xfff9161c,0xffb31014,0xed360506,0x4c000000,0x29000000,0x12000000,0x6000000,0x3000000,0x1000000,0x1000000,0xa000000,0x18000000,0x29000000,0x442c0101,
+ 0x572b0101,0x4b000000,0x89000000,0xc7000000,0xfd000000,0xff000000,0xff000000,0xfffc7f80,0xfff90607,0xfff90607,0xff820304,0xff1f0101,0xff000000,0xff000000,
+ 0xff432627,0xfffc8083,0xfff9161c,0xfff9161c,0xffeb151a,0xff67090c,0xb41a0203,0x52000000,0x31000000,0x1a000000,0xe000000,0x7000000,0x4000000,0x2000000,
+ 0x5000000,0xe000000,0x18000000,0x21000000,0x67000000,0xbe000000,0xff000000,0xff000000,0xff000000,0xff212121,0xff8d6565,0xfffc7778,0xfff90607,0xffb90405,
+ 0xff410202,0xff8f8787,0xffa8a8a8,0xff909090,0xffa97879,0xfffb6a6e,0xfff9161c,0xfff9161c,0xffb31014,0xff340406,0xd9000000,0x8f000000,0x43000000,0x2b000000,
+ 0x1a000000,0x10000000,0x8000000,0x4000000,0x1000000,0x7000000,0xf000000,0x71000000,0xe0000000,0xff000000,0xfc180f0f,0xff765858,0xff8d6d6d,0xffc38888,
+ 0xfffc8787,0xfffa3536,0xffb50405,0xff4f0202,0xff655656,0xffb4b4b4,0xffc4c4c4,0xffb7b7b7,0xffe09496,0xfffb5459,0xfff9161c,0xfff1151b,0xff6a090c,0xfe160606,
+ 0xff000000,0xec000000,0x9d000000,0x46000000,0x30000000,0x1e000000,0x11000000,0x9000000,0xffffff,0x8000000,0x65000000,0xe8000000,0xff000000,0xf9383838,
+ 0xff8d8484,0xfffc8f8f,0xfffb6a6a,0xfffb5e5f,0xfffa2f30,0xffbc0505,0xff540808,0xff625151,0xffaeaeae,0xffcbcbcb,0xffcdcdcd,0xffb7b7b7,0xfffc8f92,0xfffa3035,
+ 0xfff9161c,0xffbc1115,0xff430e10,0xff7b7b7b,0xfc353535,0xff000000,0xf2000000,0x9d000000,0x4d000000,0x33000000,0x1f000000,0x11000000,0xffffff,0x35000000,
+ 0xcd000000,0xff000000,0xf9505050,0xffc1c1c1,0xffc2c2c2,0xffe06768,0xfff91213,0xfff90607,0xffdc0506,0xff860304,0xff624747,0xffa9a9a9,0xffcccccc,0xffdcdcdc,
+ 0xffd6d6d6,0xffccb0b0,0xfffc8083,0xfff9161c,0xfff1151b,0xff740a0d,0xff6e5b5c,0xffc9c9c9,0xffc5c5c5,0xfd4f4f4f,0xff000000,0xe6000000,0x84000000,0x4d000000,
+ 0x31000000,0x1c000000,0xffffff,0x83000000,0xff000000,0xf9212121,0xffc2c2c2,0xffe6e6e6,0xffc9c9c9,0xffca7373,0xffcc0506,0xff700303,0xff4d0202,0xff4a2223,
+ 0xff846969,0xffc1c1c1,0xffdcdcdc,0xffe5e5e5,0xffdadada,0xffda7e81,0xffe7141a,0xffc81217,0xffb31014,0xff471011,0xffb5b1b1,0xffdadada,0xffefefef,0xffc4c4c4,
+ 0xfd202020,0xff000000,0xc3000000,0x69000000,0x47000000,0x2a000000,0xffffff,0xc3000000,0xff000000,0xff787878,0xfffafafa,0xffededed,0xffd7d7d7,0xffc29697,
+ 0xff954040,0xff705a5a,0xff807a7a,0xff909090,0xffacacac,0xffcacaca,0xffe0e0e0,0xffe3e3e3,0xffd6d6d6,0xffc2c2c2,0xffaa9899,0xff8e5c5e,0xff601d1e,0xff7b6667,
+ 0xffd2d2d2,0xffe8e8e8,0xfff6f6f6,0xfffefefe,0xff787878,0xff000000,0xe8000000,0x84000000,0x5c000000,0x38000000,0xffffff,0xef000000,0xff000000,0xffbbbbbb,
+ 0xfffdfdfd,0xfff6f6f6,0xffe7e7e7,0xffcfcfcf,0xffb2b2b2,0xff979797,0xff908788,0xffaa8585,0xffa79999,0xffbdbdbd,0xffd1d1d1,0xffd5d5d5,0xffc9c9c9,0xffb9b9b9,
+ 0xffadadad,0xffafafaf,0xffbcbcbc,0xffd0d0d0,0xffe4e4e4,0xfff3f3f3,0xfffbfbfb,0xfffefefe,0xffbbbbbb,0xff000000,0xfa000000,0x9a000000,0x6f000000,0x46000000,
+ 0xffffff,0xef000000,0xff000000,0xffececec,0xfffefefe,0xfffbfbfb,0xfff0f0f0,0xffd9d9d9,0xffb9b9b9,0xffb69898,0xfff39393,0xfffb6c6c,0xfff02d2e,0xffaa8485,
+ 0xffb9b9b9,0xffbdbdbd,0xffd9abac,0xfff68c8f,0xffef6d71,0xffc76f71,0xffc2c2c2,0xffdbdbdb,0xffeeeeee,0xfff9f9f9,0xfffefefe,0xffffffff,0xffececec,0xff000000,
+ 0xfb000000,0xaa000000,0x7e000000,0x52000000,0xffffff,0xf0000000,0xff000000,0xffececec,0xffffffff,0xfffefefe,0xfff4f4f4,0xffdddddd,0xffb9b9b9,0xfff49292,
+ 0xfffb4c4d,0xfff90e0f,0xffe20606,0xff7a1d1d,0xffa7a7a7,0xffc9a4a5,0xfffc9093,0xfffa4449,0xfff92127,0xff9d0e12,0xffbdabac,0xffdedede,0xfff2f2f2,0xfffdfdfd,
+ 0xffffffff,0xffffffff,0xffececec,0xff000000,0xfc000000,0xb4000000,0x88000000,0x5a000000,0xffffff,0xf0000000,0xff000000,0xffbbbbbb,0xffffffff,0xffffffff,
+ 0xfff5f5f5,0xffdfdfdf,0xffbbbbbb,0xfffb6c6c,0xfff90e0f,0xfff90607,0xffc10506,0xff490a0a,0xffa2a2a2,0xffd88c8e,0xfffb585c,0xfff9161c,0xfff9161c,0xff700a0d,
+ 0xffa49090,0xffe0e0e0,0xfff4f4f4,0xfffefefe,0xffffffff,0xffffffff,0xffbbbbbb,0xff000000,0xfc000000,0xb9000000,0x8c000000,0x5e000000,0xffffff,0xc9000000,
+ 0xff000000,0xff787878,0xffffffff,0xffffffff,0xfff7f7f7,0xffe3e3e3,0xffc4c4c4,0xffe03d3e,0xffc40506,0xffaf0405,0xff580202,0xff5c4646,0xffacacac,0xffca8183,
+ 0xfffa3137,0xffe9151a,0xffb31014,0xff410607,0xffb7aeae,0xffe3e3e3,0xfff5f5f5,0xfffefefe,0xffffffff,0xffffffff,0xff787878,0xff000000,0xf5000000,0xb9000000,
+ 0x8c000000,0x5e000000,0xffffff,0x92000000,0xff000000,0xfb212121,0xffc7c7c7,0xffffffff,0xfffafafa,0xffececec,0xffd6d6d6,0xffbbaeae,0xff985959,0xff672b2b,
+ 0xff705858,0xffb6b6b6,0xffc4c4c4,0xffc1c1c1,0xffb75b5e,0xff65090b,0xff491b1b,0xff847374,0xffd5d5d5,0xffeaeaea,0xfff8f8f8,0xfffefefe,0xffffffff,0xffc7c7c7,
+ 0xff202020,0xff000000,0xe9000000,0xb4000000,0x88000000,0x5a000000,0xffffff,0x4f000000,0xd9000000,0xff000000,0xfc525252,0xffdadada,0xfffcfcfc,0xfff5f5f5,
+ 0xffe9e9e9,0xffd9d9d9,0xffcbcbcb,0xffc7c7c7,0xffcccccc,0xffd7d7d7,0xffdedede,0xffdcdcdc,0xffd3d3d3,0xffcecece,0xffcfcfcf,0xffd8d8d8,0xffe7e7e7,0xfff4f4f4,
+ 0xfffbfbfb,0xfffefefe,0xffdadada,0xff515151,0xff000000,0xf9000000,0xd5000000,0xaa000000,0x7e000000,0x52000000,0xffffff,0x26000000,0x88000000,0xf0000000,
+ 0xff000000,0xfc3e3e3e,0xffd9d9d9,0xfffbfbfb,0xfff6f6f6,0xffefefef,0xffe9e9e9,0xffe7e7e7,0xffeaeaea,0xffeeeeee,0xfff1f1f1,0xfff0f0f0,0xffebebeb,0xffe8e8e8,
+ 0xffe9e9e9,0xffededed,0xfff5f5f5,0xfffafafa,0xfffefefe,0xffadadad,0xff3e3e3e,0xff000000,0xfd000000,0xe7000000,0xbf000000,0x9a000000,0x6f000000,0x46000000,
+ 0xffffff,0x1e000000,0x39000000,0x9b000000,0xee000000,0xff000000,0xff464646,0xfff7f7f7,0xfffdfdfd,0xfffbfbfb,0xfffafafa,0xfff9f9f9,0xfffafafa,0xfffbfbfb,
+ 0xfffcfcfc,0xfffcfcfc,0xfffafafa,0xfff8f8f8,0xfff8f8f8,0xfffafafa,0xfff9f9f9,0xffb1b1b1,0xff626262,0xff0a0a0a,0xff000000,0xfc000000,0xea000000,0xc8000000,
+ 0xa9000000,0x84000000,0x5c000000,0x38000000,0xffffff,0x16000000,0x2b000000,0x4a000000,0xae000000,0xff000000,0xff2a2a2a,0xffffffff,0xffffffff,0xffffffff,
+ 0xffe0e0e0,0xffa8a8a8,0xffc7c7c7,0xffe5e5e5,0xfff9f9f9,0xfff9f9f9,0xffe5e5e5,0xffc7c7c7,0xff9f9f9f,0xff707070,0xff393939,0xff000000,0xff000000,0xff000000,
+ 0xf7000000,0xe4000000,0xc7000000,0xae000000,0x8d000000,0x69000000,0x47000000,0x2a000000,0xffffff,0xf000000,0x1f000000,0x39000000,0xcd000000,0xff000000,
+ 0xff6f6f6f,0xffffffff,0xffffffff,0xffacacac,0xff080808,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xf7000000,0xe9000000,0xd3000000,0xbf000000,0xa8000000,0x8c000000,0x6d000000,0x4d000000,0x31000000,0x1c000000,0xffffff,0xa000000,
+ 0x16000000,0x30000000,0xf2000000,0xff000000,0xffb0b0b0,0xffffffff,0xff909090,0xff000000,0xff000000,0xfd000000,0xfd000000,0xfe000000,0xfe000000,0xfe000000,
+ 0xfe000000,0xfc000000,0xf8000000,0xf2000000,0xe9000000,0xdc000000,0xca000000,0xbe000000,0xae000000,0x9a000000,0x82000000,0x68000000,0x4d000000,0x33000000,
+ 0x1f000000,0x11000000,0xffffff,0x7000000,0x11000000,0x55000000,0xff000000,0xff050505,0xffececec,0xff6f6f6f,0xff000000,0xff000000,0xf8000000,0xe4000000,
+ 0xd9000000,0xd0000000,0xc9000000,0xc5000000,0xc2000000,0xc0000000,0xbe000000,0xba000000,0xb5000000,0xae000000,0xa3000000,0x95000000,0x85000000,0x71000000,
+ 0x5b000000,0x45000000,0x30000000,0x1e000000,0x11000000,0x9000000,0xffffff,0x6000000,0x10000000,0x8b000000,0xff000000,0xff383838,0xff535353,0xff000000,
+ 0xff000000,0xf0000000,0xd8000000,0xcb000000,0xbb000000,0xac000000,0xa1000000,0x9a000000,0x97000000,0x94000000,0x92000000,0x8e000000,0x88000000,0x80000000,
+ 0x76000000,0x69000000,0x5a000000,0x49000000,0x38000000,0x28000000,0x1a000000,0x10000000,0x8000000,0x4000000,0xffffff,0x6000000,0x10000000,0xb8000000,
+ 0xff000000,0xfe3a3a3a,0xff000000,0xff000000,0xe2000000,0xcc000000,0xbf000000,0xab000000,0x95000000,0x81000000,0x74000000,0x6b000000,0x68000000,0x65000000,
+ 0x63000000,0x5f000000,0x5a000000,0x53000000,0x4a000000,0x40000000,0x35000000,0x29000000,0x1e000000,0x14000000,0xd000000,0x7000000,0x4000000,0x2000000,
+ 0xffffff,0x7000000,0x11000000,0xb8000000,0xfd060606,0xfb020202,0xfb000000,0xca000000,0xba000000,0xb3000000,0x9f000000,0x85000000,0x6c000000,0x57000000,
+ 0x49000000,0x40000000,0x3c000000,0x3a000000,0x38000000,0x36000000,0x32000000,0x2e000000,0x28000000,0x21000000,0x1a000000,0x14000000,0xe000000,0x9000000,
+ 0x5000000,0x3000000,0x1000000,0x1000000,0xffffff,0x7000000,0x11000000,0xb8000000,0xc90c0c0c,0xce000000,0xa5000000,0x9d000000,0x9f000000,0x92000000,
+ 0x7a000000,0x5f000000,0x47000000,0x34000000,0x28000000,0x21000000,0x1e000000,0x1c000000,0x1b000000,0x1a000000,0x18000000,0x15000000,0x12000000,0xf000000,
+ 0xb000000,0x8000000,0x5000000,0x3000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0x6000000,0x10000000,0x3a000000,0x52000000,0x6c000000,
+ 0x74000000,0x80000000,0x7d000000,0x6d000000,0x56000000,0x3e000000,0x2a000000,0x1c000000,0x13000000,0xe000000,0xd000000,0xc000000,0xb000000,0xa000000,
+ 0xa000000,0x8000000,0x7000000,0x6000000,0x4000000,0x3000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x5000000,
+ 0xd000000,0x1b000000,0x30000000,0x46000000,0x57000000,0x5e000000,0x58000000,0x49000000,0x36000000,0x25000000,0x17000000,0xd000000,0x8000000,0x5000000,
+ 0x4000000,0x4000000,0x4000000,0x3000000,0x3000000,0x3000000,0x2000000,0x2000000,0x1000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff
+};
+
+static const QRgb Light_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x34000000,0x37000000,0x39040404,0x38050505,0x35050505,0x30050505,0x2a060606,0x22080808,0x1a0a0a0a,0x130d0d0d,0xc151515,0x7242424,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x5d393939,0x934a4a4a,0xbe505050,0xde525252,0xf3525252,0xfe4f4f4f,0xf3454545,0xe03d3d3d,0xc5333333,0xa0272727,0x721a1a1a,0x410c0c0c,0x350e0e0e,0x280d0d0d,
+ 0x1d121212,0x120e0e0e,0xb171717,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x70474747,0xba595959,0xf7615e5c,0xff59524f,0xff514743,0xff4b3f3a,0xff433631,0xff3e302b,0xff392d29,0xff352b27,0xff312927,0xff2c2826,
+ 0xf92a2828,0xc7202020,0x8a161616,0x49111111,0x36131313,0x26141414,0x18151515,0xe121212,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x48353535,0xa75a5a5a,0xf865605e,0xff5c514d,0xff54443f,0xff4e3f3a,0xff4c3d39,0xff473a36,0xff433631,0xff3e312d,
+ 0xff382d29,0xff322823,0xff2d2420,0xff271f1b,0xff221a17,0xff1e1a18,0xfa1a1817,0xbe141414,0x6f0f0f0f,0x42131313,0x2d111111,0x1c121212,0xf111111,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x60454545,0xcb625f5e,0xff605854,0xff564742,0xff544541,0xff51443f,0xff58483b,
+ 0xff4a3e3b,0xff463a37,0xff463b32,0xff3d3430,0xff372e2b,0xff322b27,0xff2c2623,0xff28201e,0xff221c1a,0xff1b1616,0xff161312,0xff111010,0xdc0f0e0d,0x890f0f0f,
+ 0x4a151515,0x31151515,0x1d121212,0xf111111,0x7242424,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x60454545,0xd864605d,0xff5e524d,0xff574741,
+ 0xff544642,0xff725f3c,0xff705f3f,0xff90793f,0xff9c8541,0xff84703b,0xff6a5934,0xff54472d,0xff3e3429,0xff312a27,0xff2a2523,0xff26211f,0xff221e1c,0xff1c1919,
+ 0xff171515,0xff111111,0xff0f0f0f,0xe6100e0e,0x8e101010,0x4d171717,0x31151515,0x1d1a1a1a,0xe121212,0x62b2b2b,0x3000000,0xa000000,0x16000000,0x48353535,
+ 0xcb625f5e,0xff5d514d,0xff564741,0xff554742,0xff8f773a,0xffb99c45,0xffe8c75a,0xffdbbe62,0xfff8d970,0xfff2d369,0xffd2b554,0xffab903c,0xff7a652a,0xff2a2523,
+ 0xff282321,0xff23201f,0xff201d1b,0xff1c1b1a,0xff181817,0xff161616,0xff141414,0xff111111,0xe0121110,0x80141414,0x4a151515,0x2d171717,0x18151515,0xb171717,
+ 0x6000000,0x11000000,0x23000000,0xa75a5a5a,0xff605652,0xff554540,0xff544641,0xff9f8235,0xffedc647,0xfff4d465,0xfffde080,0xfffee590,0xfffee696,0xfffde490,
+ 0xfffde17f,0xfffeda68,0xffe4bf44,0xff9d8024,0xff372e1b,0xff201c1c,0xff1c1a1a,0xff1a1a1a,0xff1b1b1b,0xff1c1c1c,0xff1a1a1a,0xff171717,0xff121212,0xcb121212,
+ 0x66171717,0x43171717,0x26141414,0x120e0e0e,0xb000000,0x1b000000,0x70474747,0xf8655f5d,0xff55433e,0xff53443e,0xff876e31,0xfffccf38,0xfffbd75e,0xfffde07f,
+ 0xfffde89e,0xfffeeeb6,0xfffef0bf,0xfffeedb6,0xfffee89e,0xfffee17f,0xfffdd85e,0xfffcd039,0xff8a6e17,0xff201c16,0xff191817,0xff191919,0xff1e1e1e,0xff1f1f1f,
+ 0xff1f1f1f,0xff1c1c1c,0xff171717,0xfb131313,0xa7141414,0x5a171717,0x37171717,0x1d121212,0x12000000,0x26000000,0xba595959,0xff594e49,0xff52423c,0xff695534,
+ 0xffe1b523,0xfffcd344,0xfffddb6c,0xfffee590,0xfffeedb6,0xfffff5d6,0xfffff9e5,0xfffff5d6,0xffffeeb6,0xfffee490,0xfffedc6d,0xfffdd344,0xffd2a71b,0xff4d3e0d,
+ 0xff131313,0xff181818,0xff1e1e1e,0xff222222,0xff232323,0xff212121,0xff1c1c1c,0xff171717,0xda141414,0x72191919,0x49151515,0x29131313,0x19000000,0x5d393939,
+ 0xf7605c5a,0xff503f3a,0xff4e3f3a,0xff9a7922,0xfffac821,0xfffdd348,0xfffddd71,0xfffee697,0xfffef0bf,0xfffff9e5,0xffffffff,0xfffff9e5,0xfffef0bf,0xfffde696,
+ 0xfffddd70,0xfffdd449,0xfff9c822,0xff977507,0xff101010,0xff161616,0xff1d1d1d,0xff222222,0xff272727,0xff252525,0xff212121,0xff1b1b1b,0xfb161515,0xa0151515,
+ 0x5b161616,0x36131313,0x21000000,0x934a4a4a,0xff58504d,0xff4a3a34,0xff4e4035,0xffba9115,0xfffcc91f,0xfffdd245,0xfffedb6c,0xfffee590,0xfffeedb6,0xfffef5d7,
+ 0xfffff9e5,0xfffff5d6,0xfffeedb6,0xfffee490,0xfffddb6c,0xfffdd345,0xfffcc91e,0xffc29604,0xff211c0b,0xff131313,0xff1c1c1c,0xff232323,0xff282828,0xff292929,
+ 0xff262626,0xff202020,0xff181818,0xc6161616,0x6d171717,0x43131313,0x29000000,0xbe505050,0xff50443f,0xff473732,0xff56462f,0xffd0a10c,0xfffcc816,0xfffdcf39,
+ 0xfffdd95e,0xfffee180,0xfffde89e,0xfffeedb6,0xfffff0c0,0xfffeeeb6,0xfffde89d,0xfffee07f,0xfffdd95e,0xfffdcf39,0xfffcc816,0xffdeab01,0xff392d08,0xff121212,
+ 0xff1b1b1b,0xff232323,0xff292929,0xff2b2b2b,0xff292929,0xff242424,0xff1c1c1c,0xe1171717,0x7b191919,0x4e141414,0x2f000000,0xde525252,0xff483a35,0xff42342f,
+ 0xff554429,0xffcfa00b,0xfffcc40b,0xfffccb27,0xfffdd349,0xfffedb68,0xfffee080,0xfffee590,0xfffee696,0xfffee590,0xfffde07f,0xfffedb68,0xfffdd349,0xfffccb27,
+ 0xfffcc50c,0xffdfac00,0xff372c06,0xff101010,0xff191919,0xff232323,0xff2b2b2b,0xff2e2e2e,0xff2d2d2d,0xff272727,0xff1f1f1f,0xf0171717,0x881a1a1a,0x58141414,
+ 0x34000000,0xf3525252,0xff41312b,0xff3f302a,0xff483a29,0xffbb910e,0xfffcc200,0xfffcc714,0xfffdcd2e,0xfffcd348,0xfffdd95e,0xfffddb6d,0xfffddd71,0xfffedc6c,
+ 0xfffdd85e,0xfffdd348,0xfffccd2e,0xfffcc713,0xfffcc200,0xffd1a101,0xff1f1906,0xff0f0f0f,0xff191919,0xff242424,0xff2c2c2c,0xff313131,0xff2f2f2f,0xff2a2a2a,
+ 0xff212121,0xfa181818,0x901b1b1b,0x5f181818,0x37000000,0xfe4f4f4f,0xff3b2a24,0xff392b26,0xff372d29,0xff957413,0xfff9c001,0xfffcc302,0xfffcc714,0xfffdcb27,
+ 0xfffcd039,0xfffdd344,0xfffcd348,0xfffdd244,0xfffcd039,0xfffccc27,0xfffcc714,0xfffcc303,0xfffcc200,0xffa57f01,0xff0a0907,0xff0f0f0f,0xff191919,0xff242424,
+ 0xff2e2e2e,0xff333333,0xff313131,0xff2c2c2c,0xff232323,0xfe1a1a1a,0x951b1b1b,0x64171717,0x39040404,0xf3454545,0xff352923,0xff352823,0xff322925,0xff55431c,
+ 0xffd1a206,0xfffcc200,0xfffcc200,0xfffcc40b,0xfffcc716,0xfffdca1e,0xfffcca21,0xfffcc91f,0xfffcc716,0xfffcc50b,0xfffcc200,0xfffcc200,0xfffbc100,0xff9b7801,
+ 0xff080808,0xff101010,0xff1b1b1b,0xff262626,0xff2f2f2f,0xff343434,0xff333333,0xff2d2d2d,0xff232323,0xfb1a1a1a,0x971b1b1b,0x65171717,0x38050505,0xe03d3d3d,
+ 0xff332824,0xff302520,0xff2e2522,0xff2c2422,0xff846710,0xfff9bf00,0xfffcc200,0xfffcc200,0xfffcc200,0xfffcc303,0xfffcc304,0xfffcc302,0xfffcc200,0xfffcc200,
+ 0xfffcc200,0xfffcc200,0xfffcc200,0xfffcc200,0xffb68d03,0xff121212,0xff1c1c1c,0xff282828,0xff313131,0xff353535,0xff353535,0xff2d2d2d,0xff242424,0xf31a1a1a,
+ 0x951a1a1a,0x63151515,0x35050505,0xc5333333,0xff302724,0xff2b1f1b,0xff2a221e,0xff27201d,0xff3a2f1a,0xffad8608,0xfffcc200,0xfffcc200,0xfffcc200,0xfffbc100,
+ 0xfffcc200,0xfffcc200,0xfffcc200,0xfffcc200,0xfffcc200,0xfffcc200,0xfffcc200,0xfffcc200,0xff806406,0xff2d2713,0xff1f1f1f,0xff2a2a2a,0xff333333,0xff373737,
+ 0xff343434,0xff2d2d2d,0xff222222,0xe71a1a1a,0x901b1b1b,0x5e161616,0x30050505,0xa0272727,0xff2c2725,0xff241b17,0xff251e1b,0xff231e1b,0xff201d1b,0xff252017,
+ 0xff745b0b,0xffaf8805,0xfff2ba00,0xfffbc100,0xffecb500,0xffe6b100,0xfffcc200,0xffd5a400,0xffefb800,0xfffcc200,0xfffcc200,0xff816405,0xff1a180f,0xffdeab03,
+ 0xffa9850d,0xff2c2c2c,0xff343434,0xff373737,0xff333333,0xff2b2b2b,0xff202020,0xd51a1a1a,0x87191919,0x58141414,0x2a060606,0x721a1a1a,0xf92a2827,0xff201816,
+ 0xff201917,0xff201b1a,0xff1e1b19,0xff1b1918,0xff161414,0xff31290e,0xff55440a,0xff866805,0xff957404,0xff7c6004,0xff654f04,0xff433405,0xff8a6b03,0xfffcc200,
+ 0xff8d6e05,0xff17150e,0xffdaa903,0xfffcc200,0xffd6a607,0xff2d2d2d,0xff343434,0xff353535,0xff303030,0xff282828,0xfd1f1f1e,0xbb1a1a1a,0x7b191919,0x4e141414,
+ 0x22080808,0x410c0c0c,0xc7202020,0xff1d1917,0xff1b1715,0xff1b1817,0xff1a1919,0xff191918,0xff181818,0xff1a1916,0xff141414,0xff121212,0xff211d0f,0xff28220c,
+ 0xff0d0d0d,0xff0e0e0e,0xff2a230c,0xff8f7007,0xff131313,0xffddab03,0xfffcc200,0xffc69a08,0xff292928,0xff2e2e2e,0xff323232,0xff323232,0xff2c2c2c,0xff232323,
+ 0xe91c1c1c,0x9a1a1a1a,0x6c151515,0x420f0f0f,0x1a0a0a0a,0x350e0e0e,0x8a161616,0xfa191817,0xff161212,0xff171514,0xff171616,0xff1b1b1b,0xff1c1c1c,0xff1c1c1c,
+ 0xff1c1c1c,0xff1a1a1a,0xff181818,0xff171717,0xff171717,0xff171717,0xff181818,0xff1a1a1a,0xff655213,0xfffcc200,0xffca9e08,0xff292826,0xffa88511,0xff615324,
+ 0xff2f2f2f,0xff2e2e2e,0xff272727,0xfd1f1e1e,0xc81b1b1b,0x87191919,0x5b141414,0x350e0e0e,0x130d0d0d,0x280d0d0d,0x480e0e0e,0xbe141414,0xff11100f,0xff111111,
+ 0xff161616,0xff1b1b1b,0xff1f1f1f,0xff212121,0xff222222,0xff222222,0xff222222,0xff212121,0xff222222,0xff222222,0xff232323,0xff252525,0xff52461f,0xffa78410,
+ 0xff2e2d28,0xff826a19,0xfffcc200,0xffa08014,0xff2b2b2b,0xff272727,0xff212121,0xe31c1c1c,0x9b1c1c1c,0x72161616,0x49111111,0x280d0d0d,0xc151515,0x1d121212,
+ 0x36131313,0x70111111,0xdc0f0d0d,0xff0f0f0f,0xff141414,0xff1a1a1a,0xff1f1f1f,0xff222222,0xff252525,0xff262626,0xff282828,0xff292929,0xff2a2a2a,0xff2c2c2c,
+ 0xff2d2d2d,0xff2e2e2e,0xff2f2f2f,0xff34332f,0xff2f2f2f,0xff8b7119,0xffedb703,0xff443d25,0xff272727,0xff212121,0xf21c1c1c,0xb61b1b1b,0x81161616,0x5a141414,
+ 0x350e0e0e,0x1c090909,0x7242424,0x120e0e0e,0x26141414,0x42131313,0x890f0f0f,0xe6100e0d,0xff111111,0xff171717,0xff1c1c1c,0xff212121,0xff252525,0xff292929,
+ 0xff2b2b2b,0xff2d2d2d,0xff303030,0xff323232,0xff333333,0xff343434,0xff353535,0xff343434,0xff313131,0xff2d2d2d,0xff534822,0xff252525,0xff212121,0xf51e1d1c,
+ 0xc51a1a1a,0x8f191919,0x66141414,0x42131313,0x250e0e0e,0x120e0e0e,0x3000000,0xb171717,0x18151515,0x2d111111,0x4a151515,0x8e101010,0xe0121110,0xff121212,
+ 0xff171717,0xff1c1c1c,0xff212121,0xff262626,0xff292929,0xff2d2d2d,0xff2f2f2f,0xff313131,0xff323232,0xff343434,0xff333333,0xff313131,0xff2e2e2e,0xff292929,
+ 0xff242424,0xff1f1f1f,0xf21b1b1a,0xc5191919,0x931a1a1a,0x6d151515,0x4b111111,0x2d111111,0x170b0b0b,0xa000000,0x1000000,0x5000000,0xe121212,0x1c121212,
+ 0x31151515,0x4d171717,0x80141414,0xcb121212,0xfb131313,0xff171717,0xff1b1b1b,0xff202020,0xff242424,0xff272727,0xff2a2a2a,0xff2c2c2c,0xff2d2d2d,0xff2d2d2d,
+ 0xff2c2c2c,0xff2a2a2a,0xff262626,0xff222222,0xfd1e1d1d,0xe41b1b1b,0xb81a1a1a,0x90171717,0x6e131313,0x4e101010,0x31101010,0x1b090909,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xf111111,0x1d121212,0x31151515,0x4a151515,0x66171717,0xa7141414,0xda141414,0xfb161515,0xff181818,0xff1c1c1c,0xff1f1f1f,
+ 0xff212121,0xff232323,0xff232323,0xff242424,0xff222222,0xff212121,0xfd1e1d1d,0xea1c1c1c,0xca1b1b1b,0x9e1a1a1a,0x84151515,0x68141414,0x4c111111,0x31101010,
+ 0x1c090909,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0x10202020,0x1d1a1a1a,0x2d171717,0x43171717,0x5a171717,0x72191919,
+ 0xa0151515,0xc6161616,0xe1171717,0xf0171717,0xfa181818,0xfe1a1a1a,0xfb1a1a1a,0xf31a1a1a,0xe71a1a1a,0xd51a1a1a,0xbb1a1a1a,0x9a1a1a1a,0x88181818,0x74161616,
+ 0x5b141414,0x43131313,0x2e111111,0x1c090909,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x7242424,0xe121212,
+ 0x18151515,0x26141414,0x37171717,0x49151515,0x5b161616,0x6d171717,0x7b191919,0x881a1a1a,0x901b1b1b,0x951b1b1b,0x971b1b1b,0x951a1a1a,0x901b1b1b,0x87191919,
+ 0x7b191919,0x6c151515,0x5b141414,0x49111111,0x350e0e0e,0x250e0e0e,0x170b0b0b,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x62b2b2b,0xb171717,0x120e0e0e,0x1d121212,0x29131313,0x36131313,0x43131313,0x4e141414,0x58141414,0x5f181818,0x64171717,
+ 0x65171717,0x63151515,0x5e161616,0x58141414,0x4e141414,0x420f0f0f,0x350e0e0e,0x280d0d0d,0x1c090909,0x120e0e0e,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb MPEGPlayer_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff1d6366,0xff1d6367,0xff1d6469,0xff1d6469,
+ 0xff1d6469,0xff1d6469,0xff1d6469,0xff000000,0xff1d81e1,0xff1d8afe,0xff1d80df,0xff000000,0xff1d8afe,0xff1d8afe,0xff1d8afe,0xff1d8afe,0xff1d8afe,0xff1d8afe,
+ 0xff1d8afe,0xff1d8afe,0xff1d8afe,0xff1d8afe,0xff000000,0xff1d7bcf,0xff1d8afe,0xff1d7acc,0xff000000,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff1d6266,0xfffab667,0xfffab667,0xfffab668,0xfffab668,0xfffab668,0xfffbb768,0xff000000,0xffbaa673,0xfffdecde,0xffbba46e,0xff000000,0xfffffffe,0xfffffffe,
+ 0xfffffffe,0xfffffffe,0xfffffffe,0xfffffffe,0xfffffffe,0xfffffffe,0xfffffffe,0xfffffffe,0xff000000,0xffb97e1a,0xfffde2cc,0xffaf7516,0xff000000,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff1c6165,0xfff6b264,0xfff6b265,0xfff5b165,0xfff6b265,0xfff6b265,0xfff6b365,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xfffefbf9,0xfffffdfa,0xfffffcfa,0xfffffcfa,0xfffffcfb,0xfffffcfb,0xfffffcfb,0xfffffbf9,0xfffffcf8,0xfffffcf8,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff1b5b5f,0xffeba85f,0xffeaa75e,0xffeaa75e,0xffeaa75e,0xffeba85e,
+ 0xffeca95f,0xff000000,0xffac9968,0xfff5e0cf,0xffb09863,0xff000000,0xfffdf7f3,0xfffef7f4,0xfffef8f4,0xfffff9f5,0xfffff8f4,0xfffff8f4,0xfffff8f3,0xfffff8f3,
+ 0xfffff7f3,0xfffff7f2,0xff000000,0xffaa7210,0xfff6d8c2,0xff9e6a10,0xff000000,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff195254,0xffd79653,
+ 0xffd69552,0xffd69552,0xffd69552,0xffd79652,0xffda9852,0xff000000,0xffe4c9b5,0xffebded6,0xfff0d5c1,0xff000000,0xfff9ddc9,0xfffcf3ec,0xfffef3ed,0xfffef4ed,
+ 0xfffff4ed,0xfffff4ec,0xfffff3eb,0xfffff3eb,0xfffff3ea,0xfffbd7ba,0xff000000,0xfff5d4ba,0xfffbf1ea,0xffefd1ba,0xff000000,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff164543,0xffbb7c41,0xffb97a40,0xffb97a3f,0xffba7a40,0xffbc7c40,0xffbf7f42,0xff000000,0xff89744a,0xffd8b7a0,0xff97814d,0xff000000,
+ 0xffa28647,0xfff7e9df,0xfffbede2,0xfffdeee3,0xfffdeee3,0xfffeeee3,0xfffeeee1,0xfffeede0,0xfffeece0,0xffa16c06,0xff000000,0xff956606,0xffeecbb2,0xff895e06,
+ 0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff123530,0xff9b5e2d,0xff995c2c,0xff985c2c,0xff995c2b,0xff9c5e2d,0xffa0622f,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0f261e,0xff7e421b,0xff7b4019,0xff7b4019,
+ 0xff7b4019,0xff7e421a,0xff82461c,0xff000000,0xff5d4524,0xffa3785c,0xff70582e,0xff000000,0xff866c32,0xffe5cbb6,0xfff0d7c2,0xfff7dcc8,0xfffbe0ca,0xfffde1ca,
+ 0xfffce0c9,0xfffbe0ca,0xfff8dfca,0xff8d6200,0xff000000,0xff835a00,0xffe2bda2,0xff785200,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff1b80e9,0xfffdfcfb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff3efec,0xffc3c3c3,0xffb59b8b,0xff9a775f,0xff9a6b4d,0xff000000,0xffc29473,0xffd6b59e,
+ 0xffe6c6ad,0xfff1d1b8,0xfff8d5bd,0xfffbd7bd,0xfff9d9bd,0xfff7d7c0,0xfff5d7c0,0xffe9bb96,0xff000000,0xffdfb596,0xffead1be,0xffd6b196,0xff000000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff1d88fb,0xffe5e5e5,0xffaaaaaa,0xff888888,0xffa5a5a5,0xffdbdbdb,0xfffafafa,0xfffafafa,0xfff1f1f0,0xffe1d6d0,
+ 0xff816e5a,0xff020202,0xffae8469,0xffc49c80,0xffd9b195,0xffe7c0a3,0xfff2c9ab,0xfff5cdaf,0xfff5d0b1,0xfff1cfb1,0xffefceb4,0xffecccb4,0xff000000,0xff714f00,
+ 0xffd2a98a,0xff664800,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff1978df,0xff7d7d7d,0xff797979,0xff9d9d9d,0xffa7a7a7,0xffadadad,
+ 0xffdedede,0xfff9f9f9,0xfff6f6f6,0xfff5f5f5,0xffe2e2e2,0xff676767,0xff926449,0xffb18264,0xffc89a7a,0xffddae8b,0xffeabb98,0xffedc2a1,0xffecc3a5,0xffebc4a7,
+ 0xffe8c3a8,0xffe4c1a8,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff115195,0xff797979,
+ 0xffb5b5b5,0xffb9b9b9,0xffb9b9b9,0xffb5b5b5,0xffc3c7c3,0xffececea,0xfff3f3f3,0xfff0f1f1,0xfff1f1f1,0xffe5e5e6,0xffad9384,0xff956545,0xffb98561,0xffd09b74,
+ 0xffddab86,0xffe1b592,0xffe3b998,0xffe2ba9b,0xffdeb999,0xffdbb89c,0xff000000,0xff5d4200,0xffbc9476,0xff553c00,0xff000000,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff0c3969,0xffa2a2a2,0xffb5b5b5,0xffb2b2b2,0xffb2b2b2,0xffb2b2b2,0xffb9b9b8,0xffe0e0df,0xffeeeeec,0xffeaeaea,0xffeaeaea,0xffeaeaea,
+ 0xffe2dedc,0xff91705c,0xffa96e4b,0xffbe8963,0xffcf9d75,0xffd7a885,0xffd8ad8c,0xffd8af90,0xffd4ae91,0xffd1ad92,0xff000000,0xffb68c6c,0xffc4a792,0xffab876c,
+ 0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d3f75,0xffa6a7a7,0xffadaaad,0xffaaadad,0xffaaadaa,0xffadadad,0xffb8b8b8,0xffd9d9da,
+ 0xffe4e4e4,0xffe1e3e3,0xffe1e3e1,0xffe3e3e3,0xffe4e4e5,0xffc5bcb7,0xff7c5137,0xffaf7753,0xffc08c66,0xffc99874,0xffcc9f7f,0xffcca281,0xffc8a183,0xff533b00,
+ 0xff000000,0xff4c3700,0xffa57f62,0xff473200,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff1359a4,0xff939593,0xffa5a5a5,0xffa4a4a4,
+ 0xffa4a4a4,0xffa8a8aa,0xffbfbfbd,0xffd5d5d5,0xffdcdcdb,0xffdcdcdc,0xffdcdbdc,0xffdadbdb,0xffd9d9da,0xffe0e0e0,0xff4c4c4c,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff176cc9,0xffaaaaaa,0xffa2a2a2,0xff9f9f9f,0xffa6a6a6,0xffb4b4b4,0xffc7c7c7,0xffd2d2d2,0xffc9c9c9,0xffbcbcbc,0xffb9b9b9,0xffc4c4c7,0xffcfcfcf,0xffd5d5d5,
+ 0xffaba4a0,0xff835a40,0xffa37150,0xffae7f5f,0xffb28669,0xffb3896d,0xffb28a6f,0xff463100,0xff000000,0xff412e00,0xff8c6850,0xff3c2a00,0xff000000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff176cc7,0xffc3c3c3,0xffb8b9b9,0xffb4b2b2,0xffb8b8b9,0xffc0c0c1,0xffc9c9c9,0xffaeaeae,0xff6d6d6d,0xff525252,
+ 0xff595959,0xff7c7c7c,0xffadadad,0xffc7c7c7,0xffb7b7b7,0xff866551,0xff966746,0xffa07454,0xffa37b5e,0xffa67f63,0xffa57e65,0xff8d6346,0xff000000,0xff845e46,
+ 0xff967966,0xff7d5b46,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff1566bd,0xffc0bfbf,0xffc3c3c1,0xffc1c1c1,0xffc0c0bf,0xffc3c3c1,
+ 0xffb2b2b2,0xff5b5a5b,0xff565656,0xff848484,0xff919191,0xff868686,0xff8c8c8c,0xffb1b1b1,0xffb6b8b8,0xff8d7261,0xff8a5c3e,0xff93684b,0xff956d53,0xff977257,
+ 0xff967259,0xff92705a,0xff000000,0xff372600,0xff75513c,0xff332400,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff1461b4,0xffa4a5a5,
+ 0xff969896,0xffa2a4a4,0xffb4b4b4,0xffbcbcbc,0xff8c8c8c,0xff4c4c4a,0xff7e8181,0xff89898a,0xff888688,0xff888888,0xff868688,0xff9b9d9b,0xffb2b2b2,0xff90796b,
+ 0xff805436,0xff865e41,0xff8a6248,0xff8a654c,0xff89654f,0xff87644e,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff135ba8,0xff868686,0xff7c7c7c,0xff848484,0xffa8a8a8,0xffb4b5b5,0xff777977,0xff545454,0xff818281,0xff7e7e7e,0xff7e7e7e,0xff7e7e7e,
+ 0xff818181,0xff929393,0xffadadad,0xff8d776a,0xff774b2e,0xff7d5338,0xff7f573d,0xff805a40,0xff7e5941,0xff7c5942,0xff000000,0xff302200,0xff634128,0xff2d2000,
+ 0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff12589f,0xff818181,0xff757575,0xff818182,0xff9f9f9f,0xffa7a8a7,0xff848684,0xff5f5f5f,
+ 0xff757575,0xff777777,0xff777777,0xff777777,0xff7e7d7e,0xff929292,0xffa2a2a2,0xff7c685c,0xff6d4427,0xff734a2e,0xff744d32,0xff754f35,0xff724e38,0xff724e38,
+ 0xff000000,0xff5e3f1c,0xff6d4b38,0xff5b3d1c,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff115298,0xff8e9191,0xff888988,0xff919191,
+ 0xff989898,0xff9a9a9a,0xff939393,0xff707070,0xff6c6c6c,0xff6f6f6f,0xff707070,0xff757575,0xff818181,0xff939393,0xff929292,0xff6a5545,0xff643d21,0xff684226,
+ 0xff6a4329,0xff6b4529,0xff6a452a,0xff2a1d00,0xff000000,0xff291d00,0xff55390e,0xff281d00,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff104c8c,0xff919191,0xff929292,0xff929292,0xff929291,0xff919191,0xff8e8e8e,0xff888888,0xff797979,0xff717171,0xff717171,0xff7d7c7d,0xff888888,0xff919191,
+ 0xff7e817e,0xff1e1e1e,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0f4784,0xff838384,0xff676867,0xff3e3d3e,0xff2e2e2c,0xff4a4a4a,0xff6f706f,0xff838483,0xff838383,0xff838383,
+ 0xff828283,0xff838383,0xff848383,0xff888988,0xff61605d,0xff382308,0xff55380d,0xff573a0f,0xff57390f,0xff583a10,0xff583b10,0xff241a00,0xff000000,0xff241a00,
+ 0xff4a3400,0xff241a00,0xff000000,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff0e437c,0xff595959,0xff202020,0xff39393a,0xff505050,0xff4d4d4d,
+ 0xff505050,0xff6f6f6f,0xff7a7a7a,0xff7a7a7a,0xff7c7a7a,0xff7a7a7c,0xff7a7a7c,0xff7d7d7d,0xff342b20,0xff402a02,0xff503504,0xff513604,0xff513704,0xff513704,
+ 0xff513704,0xff453000,0xff000000,0xff453100,0xff513704,0xff463200,0xff000000,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff0c3b6d,0xff262626,
+ 0xff353737,0xff545452,0xff515151,0xff515151,0xff505050,0xff5a5a5a,0xff707070,0xff717171,0xff717171,0xff747170,0xff757575,0xff575552,0xff251800,0xff462f00,
+ 0xff4b3300,0xff493200,0xff493200,0xff4a3300,0xff4a3300,0xff4a3300,0xff000000,0xff201700,0xff432f00,0xff211700,0xff000000,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff0b335f,0xff020b14,0xff082748,0xff082748,0xff082748,0xff082748,0xff082648,0xff092c51,0xff0c3968,0xff0c3a6b,0xff0c3a6b,0xff0c3a6c,
+ 0xff0b345e,0xff030900,0xff061500,0xff081a00,0xff081a00,0xff081900,0xff081900,0xff081900,0xff081a00,0xff081a00,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Mindbreaker_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff522300,0xff522300,0xff522300,0xff522300,
+ 0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,
+ 0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff522300,0xff9b4326,0xffa14322,0xffa64422,0xffa04425,0xff944025,0xff974326,0xffa64623,0xffa34623,0xff924226,0xff8a3f25,0xff944628,0xff914227,0xff8f3f26,
+ 0xff883f26,0xff823f25,0xff823f25,0xff843d23,0xff863d25,0xff8b3f26,0xff883b23,0xff8b3a23,0xff8d3d25,0xff883f28,0xff7d3c27,0xff843f28,0xff522300,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff522300,0xff743825,0xff863d25,0xff8d4025,0xff923f22,0xff944222,0xff914022,0xff964022,0xff974223,0xff974223,
+ 0xff8f4225,0xff8f4226,0xff914326,0xff8f4226,0xff8f4026,0xff8f4023,0xff8f4325,0xff8d4225,0xff843d23,0xff7b3b23,0xff7d3d26,0xff7d3823,0xff863c25,0xff743825,
+ 0xff7d3b25,0xff843c23,0xff522300,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff522300,0xff7d3c23,0xff793823,0xff793723,0xff863b23,0xff944225,
+ 0xff8d4225,0xff803c25,0xff883f23,0xff924625,0xff9b4725,0xffa44823,0xffa64a23,0xffae4a22,0xffaf4d22,0xffb24e22,0xffab4a21,0xffa84821,0xffa84721,0xffa04221,
+ 0xffa84721,0xffa84821,0xffa94721,0xffa14422,0xffb14a21,0xffb24a21,0xff522300,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff522300,0xff974726,
+ 0xff9c4725,0xffa04825,0xff9d4420,0xff8b5641,0xff83736d,0xff848484,0xff80706a,0xff764836,0xff70311a,0xff7d3922,0xff894025,0xff8f4227,0xff863f25,0xff843f23,
+ 0xff823f25,0xffae8777,0xffe5dbd6,0xffffffff,0xffe0d4d1,0xff9d7668,0xff6d341f,0xff753b23,0xff834125,0xff864226,0xff522300,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff522300,0xff743a26,0xff793823,0xff7b3822,0xff794f41,0xff777777,0xff4a4a4a,0xff383838,0xff4a4a4a,0xff777777,0xff4d362f,0xff4e2718,
+ 0xff603022,0xff733a25,0xff7d3f27,0xff8d3f21,0xffb68778,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff7e5f55,0xff69311b,0xff833b21,0xff853d24,
+ 0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff974022,0xff8a3f23,0xff883c23,0xff7d716d,0xff4a4a4a,0xff171717,0xff000000,
+ 0xff171717,0xff4a4a4a,0xff6f6460,0xff401d10,0xff692f1c,0xff843c24,0xff883f25,0xff8f3f22,0xffe7dbd7,0xffffffff,0xffbbbaba,0xff8c8989,0xffbbbaba,0xffffffff,
+ 0xffc7bab6,0xff471e0f,0xff7c391c,0xff9d4520,0xff502200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xffaf4621,0xffa44421,0xffa44321,
+ 0xff848484,0xff383838,0xff000000,0xff000000,0xff000000,0xff383838,0xff848484,0xff31140a,0xff612b17,0xff883d22,0xff963e21,0xff973c22,0xffffffff,0xffffffff,
+ 0xff8c8989,0xff8c8989,0xff8c8989,0xffffffff,0xffffffff,0xff271108,0xff5d2812,0xff8b3d1c,0xff4f2100,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff522300,0xffb14621,0xffb74b21,0xffb94b20,0xff81706a,0xff4a4a4a,0xff171717,0xff000000,0xff171717,0xff4a4a4a,0xff685e5b,0xff25110a,0xff4d2516,0xff6c3520,
+ 0xff723a25,0xff723b28,0xffddd4d1,0xffffffff,0xffbbbaba,0xff8c8989,0xffbbbaba,0xffffffff,0xffb3aaa6,0xff170b06,0xff3e1d11,0xff6a311d,0xff4d2100,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff994b27,0xff944827,0xff974426,0xff6f4839,0xff777777,0xff4a4a4a,0xff383838,0xff4a4a4a,0xff777777,
+ 0xff2c1f1b,0xff21120c,0xff3f2017,0xff542d1f,0xff5b3022,0xff563025,0xff826e68,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff3a2b24,0xff1b0c06,
+ 0xff492210,0xff813e1d,0xff4c2000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff803c27,0xff743823,0xff743a26,0xff5a2e1d,0xff4f392f,
+ 0xff6d6461,0xff848484,0xff6b5f5a,0xff39221a,0xff251008,0xff461d0f,0xff6c2e1a,0xff7e3b22,0xff864027,0xff8b3f26,0xff773620,0xff856256,0xffc7bbb6,0xffffffff,
+ 0xffb8aba6,0xff402c23,0xff150903,0xff2d1409,0xff532413,0xff7c341d,0xff4d2100,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xffbb4b20,
+ 0xffc35421,0xffc05020,0xffa7441b,0xff803415,0xff55250f,0xff3c1c0c,0xff2f1409,0xff2e150b,0xff381a10,0xff4b2517,0xff5b301e,0xff5b3022,0xff5c3123,0xff643223,
+ 0xff5e2f20,0xff4a2519,0xff2d1710,0xff170d09,0xff100906,0xff120a06,0xff1b0f09,0xff35180e,0xff4e2919,0xff603221,0xff4f2100,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff522300,0xffa94a22,0xffa84d25,0xffa04625,0xff903f20,0xff79371d,0xff6a2e19,0xff612715,0xff5d2614,0xff5d2919,0xff73311a,0xff8b371c,
+ 0xff963f20,0xff974325,0xff9b4423,0xffa34221,0xffa34220,0xff98431f,0xff77361b,0xff5c2a15,0xff4b2211,0xff4c200f,0xff582410,0xff742f15,0xff953c1b,0xffa2461f,
+ 0xff502200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff863f26,0xff8d3a22,0xff924226,0xff9c4b27,0xff994825,0xff8b4023,0xff7d3b23,
+ 0xff7a3b23,0xff853b1e,0xff843e22,0xff733924,0xff703a27,0xff6b3826,0xff6d3b27,0xff703826,0xff753c27,0xff6f3b26,0xff663624,0xff653521,0xff60331f,0xff61341e,
+ 0xff67351f,0xff77381f,0xff813d22,0xff8a4225,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff7f3d26,0xff864227,0xff8b4627,
+ 0xff924a27,0xff9b4726,0xff974623,0xff813c25,0xff6f3c27,0xff633726,0xff643827,0xff633827,0xff573326,0xff513126,0xff5c3326,0xff643223,0xff683827,0xff6b3a27,
+ 0xff673725,0xff623624,0xff673725,0xff6a3b24,0xff763c25,0xff7b3f28,0xff834129,0xff8d4427,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff522300,0xff8f4627,0xff864225,0xff863f22,0xff8f4025,0xff964225,0xff8f4426,0xff803f27,0xff7b3d27,0xff703b26,0xff663625,0xff663625,0xff643525,0xff5f3325,
+ 0xff613525,0xff643523,0xff693725,0xff6b3825,0xff6e3a25,0xff793b25,0xff844227,0xff8a4427,0xff8b4626,0xff844226,0xff884326,0xff8a4025,0xff522300,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xffa14723,0xff9c4625,0xff994222,0xff924023,0xffbb8c78,0xffe9dcd7,0xffffffff,0xffe0d5d1,0xff9d7669,
+ 0xff793821,0xff844124,0xff8c4226,0xff8b4328,0xff884628,0xff8f4627,0xff8f4627,0xff8f4427,0xff944627,0xff8b4427,0xff8d4227,0xff944426,0xff994626,0xff8f4226,
+ 0xff8f4226,0xff8f4225,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff964a27,0xff8d4627,0xff884627,0xffb18978,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff836255,0xff6f331c,0xff904121,0xff964424,0xff924225,0xff964325,0xff944426,0xff76361e,0xff210f09,0xff000000,
+ 0xff231109,0xff7d3a1f,0xff9b4623,0xff964323,0xff924425,0xff914727,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff964626,
+ 0xff864027,0xff8b4326,0xffe8dbd6,0xffffffff,0xffbbbaba,0xff8c8989,0xffbbbaba,0xffffffff,0xffc8bcb6,0xff4d2110,0xff7c3518,0xff97411f,0xff964424,0xffa04622,
+ 0xffa04a25,0xff241109,0xff000000,0xff000000,0xff000000,0xff281208,0xffae5125,0xffae4d22,0xffab4721,0xffa64a25,0xff522300,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff522300,0xff6d3a27,0xff743d27,0xff8d4027,0xffffffff,0xffffffff,0xff8c8989,0xff8c8989,0xff8c8989,0xffffffff,0xffffffff,0xff271109,
+ 0xff4e2515,0xff723921,0xff7b3d25,0xff7f3f26,0xff844026,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff863f27,0xff864627,0xff864025,0xff7d3f27,
+ 0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xffa34423,0xff9e4625,0xffa84a23,0xffe8d8d0,0xffffffff,0xffbbbaba,0xff8c8989,
+ 0xffbbbaba,0xffffffff,0xffb7aba6,0xff190c06,0xff3e1d11,0xff69321d,0xff833f24,0xff974826,0xff9b4a26,0xff271209,0xff000000,0xff000000,0xff000000,0xff291309,
+ 0xffa14a26,0xffa84823,0xffa84823,0xffa44723,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xffa94a21,0xffa44825,0xffa84a25,
+ 0xffae7e68,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff3f2c23,0xff1e0e06,0xff4c2410,0xff833f1d,0xffa34d23,0xffaf5326,0xffaf5326,0xff91451f,
+ 0xff2a1408,0xff000000,0xff291309,0xff91451f,0xffaf5326,0xffaf5326,0xffac5326,0xffac5326,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff522300,0xffb85121,0xffb85021,0xffb45023,0xff95401e,0xff906654,0xffc8bbb6,0xffffffff,0xffb7aba6,0xff3b2b24,0xff120804,0xff2b1409,0xff592913,0xff88401f,
+ 0xffa74a21,0xffb95021,0xffaf5025,0xffa84d26,0xffa65027,0xffa95327,0xffa04d27,0xffa85127,0xffac5126,0xffa84a23,0xffb25023,0xffa84a25,0xff522300,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xffb85322,0xffb75323,0xffb85725,0xffae5122,0xff89401b,0xff532710,0xff2a140a,0xff210e05,0xff220f05,
+ 0xff301708,0xff4d230e,0xff793717,0xff99451e,0xffa84b23,0xffa64e27,0xff974a27,0xff944728,0xff9c4d27,0xffa34a25,0xffa14825,0xffa64b25,0xffa04625,0xffa14722,
+ 0xff9e4826,0xffa04a26,0xff522300,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff522300,0xffc55721,0xffc85b21,0xffc55721,0xffc15520,0xffb2501d,
+ 0xff944419,0xff713413,0xff5d2a0f,0xff59280e,0xff662e10,0xff7c3716,0xff9a441b,0xffb04e1e,0xffb85221,0xffb55325,0xffaf5026,0xffaf4e27,0xffae5026,0xffa85025,
+ 0xffac5326,0xffaf5326,0xffaf5325,0xffac5326,0xffac5326,0xffac5326,0xff522300,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff522300,0xff9b4826,
+ 0xffaf4a21,0xffb44d22,0xffbc5623,0xffb95421,0xffb54f1e,0xffa6491c,0xff9c4519,0xff964219,0xff9c421a,0xffa1471c,0xffae4d1e,0xffb34c20,0xffac4822,0xff9e4426,
+ 0xff974427,0xff964627,0xff9e4627,0xffa04627,0xff9b4327,0xffa64a26,0xff9e4427,0xffa64b25,0xffaf5125,0xffae5025,0xff522300,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff502200,0xff4f2100,0xff4d2100,0xff4c2000,0xff4d2100,0xff4f2100,
+ 0xff502200,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,
+ 0xff522300,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb MineHunt_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff010114,0xff010009,0xff010008,0xff000008,
+ 0xff050340,0xff05033f,0xff050349,0xff06034f,0xff070465,0xff06045d,0xff050346,0xff03022c,0xff020119,0xff020119,0xff02011e,0xff040237,0xff050346,0xff05033f,
+ 0xff040237,0xff03022a,0xff03022b,0xff030225,0xff02011f,0xff04022b,0xff03021f,0xff07033b,0xff080224,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff01010c,0xff0c0b0c,0xff060606,0xff393939,0xff676b68,0xff808481,0xff848684,0xff8e9392,0xff969997,0xff868b8c,0xff616262,0xff3f3e3e,0xff2f2f2f,0xff2d2d2d,
+ 0xff3a3a3a,0xff6c6968,0xff7f7b7a,0xff72736e,0xff646464,0xff474848,0xff292a2c,0xff1b2121,0xff141313,0xff0c0a09,0xff181413,0xffd35555,0xff030112,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff030223,0xff2e3032,0xff414343,0xffb5b5b5,0xffefefef,0xffd8d7d7,0xffc3c4c3,0xff9a9d9b,0xff848684,0xff757877,
+ 0xff5f6160,0xff4e5150,0xff454747,0xff3f4446,0xff3d3c3e,0xff5f605f,0xff6d6c69,0xff62625f,0xff4e4e4e,0xff2d2d30,0xff1e2022,0xff111111,0xff000000,0xff161617,
+ 0xffbc706e,0xff9e5c5c,0xff020119,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff050344,0xff747677,0xff8c8988,0xfff7f7f8,0xffe4e4e4,0xffd1d0d0,
+ 0xffb4b7b6,0xff8d9190,0xff727374,0xff707370,0xff606262,0xff535453,0xff494c4c,0xff424445,0xff434245,0xff4b4b4b,0xff4d4d4d,0xff404043,0xff29282a,0xff1e1e1e,
+ 0xff0a0a0a,0xff000000,0xff353536,0xffb19696,0xffa78686,0xff966f6e,0xff030121,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff05034a,0xff808484,
+ 0xff8e8e8b,0xff878784,0xffe5e4e5,0xffcccbcb,0xff9da6a6,0xff696f6b,0xff4b4d4d,0xff656967,0xff636563,0xff5b5d60,0xff515356,0xff4c4f51,0xff4a4c4c,0xff444849,
+ 0xff27292c,0xff252427,0xff171e1c,0xff060606,0xff010101,0xff2d2f2d,0xffb0acac,0xffa19696,0xffa38282,0xff966564,0xff020117,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff06034f,0xff909291,0xff72726f,0xff6b6a68,0xff484a46,0xffc4c7c6,0xff6f7270,0xff403f3f,0xff272727,0xff525455,0xff5b5d5d,0xff5d5f60,
+ 0xff575a59,0xff616262,0xff757775,0xff727472,0xff2c2e2e,0xff161a19,0xff111111,0xff020202,0xff1d1c1e,0xff050505,0xff121212,0xff9a7f7f,0xffbd7271,0xff9e4e4e,
+ 0xff01000a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff050349,0xff8f9190,0xff555656,0xff464948,0xff323335,0xff636564,0xff343333,0xff232622,
+ 0xff272626,0xff4c4f51,0xff4e5052,0xff656865,0xff999999,0xffaaaaaa,0xff999e9d,0xff8d8f8d,0xff767878,0xff121111,0xff000000,0xff212727,0xff232324,0xff5f5c5c,
+ 0xffb78e8e,0xffc57474,0xffde6161,0xffa63e3e,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff02011e,0xff7f8282,0xff5c5f5f,0xff39383a,
+ 0xff303334,0xff282928,0xff1f1f1f,0xff212121,0xff393838,0xff444749,0xff45474a,0xffa3a8a7,0xffababab,0xffa2a2a2,0xff939292,0xff818384,0xff747777,0xff535758,
+ 0xff2c2e31,0xff2f2f30,0xff5b5a5a,0xffbe8d8e,0xffcb7271,0xffe15f5f,0xfff25656,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff010110,0xff686a69,0xff727574,0xff4e4f4f,0xff252525,0xff151817,0xff1b1a1a,0xff383838,0xff46484a,0xff424445,0xff545856,0xffa8a7a7,0xff9e9e9e,0xff939896,
+ 0xff8e8a89,0xff787b7c,0xff636464,0xff545756,0xff3a3a3e,0xff29292a,0xff8c7775,0xffd17070,0xffe65e5e,0xfff45555,0xfffa5252,0xffa83737,0xff010003,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff01010c,0xff535758,0xff606363,0xff6a6d6b,0xff626565,0xff565857,0xff4b4e51,0xff454748,0xff454547,0xff434747,
+ 0xff505350,0xff9a9695,0xff8a8886,0xff7d8180,0xff747877,0xff5d6061,0xff454746,0xff3f3e3e,0xff373939,0xff292e30,0xffc57a7a,0xffe6605f,0xfff55555,0xfffa5252,
+ 0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff020119,0xff484a4c,0xff4f5453,0xff5d6263,0xff616361,0xff545758,
+ 0xff4c4d50,0xff494c4e,0xff494d4c,0xff4c4e4e,0xff4b504f,0xff787777,0xff727675,0xff626663,0xff535353,0xff3d3c3c,0xff272a2a,0xff222323,0xff202121,0xff1e211d,
+ 0xffa77878,0xffe46160,0xfff55555,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff020123,0xff3f4445,
+ 0xff494c4e,0xff575a5b,0xff5f6164,0xff686a68,0xff606161,0xff535758,0xff535556,0xff535556,0xff535558,0xff535658,0xff595c59,0xff434548,0xff313533,0xff202121,
+ 0xff1e231e,0xff201f1f,0xff171b19,0xff262727,0xff585758,0xffce6e6e,0xffe85b5b,0xfff75353,0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff020122,0xff434344,0xff45494a,0xff646565,0xff908e8d,0xff8c8b87,0xff7e7d7e,0xff6d6c6c,0xff545958,0xff505454,0xff535556,0xff4f5253,
+ 0xff444949,0xff383737,0xff2c2d2f,0xff2a2d2d,0xff302f32,0xff2b3030,0xff2b2c2f,0xffb4a4a5,0xffa98f8e,0xffbb7676,0xffd96161,0xfff15655,0xfffa5252,0xffa83737,
+ 0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff020123,0xff424244,0xff525151,0xff959595,0xff929190,0xff848481,0xff6e6e6e,0xff5c5e5e,
+ 0xff4f5352,0xff484c4e,0xff4b4e4f,0xff4f5050,0xff46494b,0xff3f4343,0xff37393a,0xff343639,0xff303335,0xff343334,0xff131212,0xff70615e,0xffbc7e7e,0xffc46f6f,
+ 0xffd9605f,0xfff05757,0xfff95253,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff030225,0xff434648,0xff747373,0xff8a8a86,
+ 0xff898985,0xff7d7b79,0xff616464,0xff474b49,0xff363836,0xff38383d,0xff444645,0xff444748,0xff454848,0xff474a4c,0xff3f4345,0xff303033,0xff353839,0xff222223,
+ 0xff000000,0xff000000,0xffcf6161,0xffe65d5c,0xffee5758,0xfff65353,0xfff95252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff020224,0xff464a4a,0xff777676,0xff7a7a7a,0xff777777,0xff696c6c,0xff4e5051,0xff313333,0xff212020,0xff202322,0xff333837,0xff474b4c,0xff989693,0xff9da2a1,
+ 0xff343335,0xff151a1a,0xff3d3c3d,0xffde6a69,0xffcb5b5a,0xff9b4e4e,0xffac4e4c,0xfffa5252,0xfff95252,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040234,0xff424447,0xff525252,0xff696a6a,0xff626364,0xff535654,0xff363939,0xff1a1c1c,0xff191818,0xff28292b,
+ 0xff4a4a49,0xffa4a3a4,0xff989898,0xff949393,0xff8d9191,0xff0b0d0e,0xff5e4c4c,0xffdb6c6c,0xffeb5b5b,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,
+ 0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff030229,0xff444444,0xff3d4243,0xff575957,0xff505151,0xff403f42,
+ 0xff242323,0xff181818,0xff222222,0xff323335,0xff999594,0xff969596,0xff8d908b,0xff878987,0xff808487,0xff5e6262,0xff222122,0xffbd7d7c,0xffd66464,0xfff15656,
+ 0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff020115,0xff2b2e2e,
+ 0xff373939,0xff414647,0xff464848,0xff313332,0xff191919,0xff191919,0xff2a292b,0xff535252,0xff909391,0xff888b89,0xff818383,0xff7f8282,0xff696b6a,0xff484a4a,
+ 0xff3b3e3d,0xffa78585,0xffc46b6b,0xffea5959,0xfff95252,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff010111,0xff353836,0xff29292a,0xff2d3334,0xff383b3d,0xff2a2929,0xff111111,0xff1c1f1f,0xff1b2121,0xff3e4144,0xff717678,0xff7e807f,
+ 0xff747876,0xff666767,0xff4d5050,0xff3a3939,0xff202120,0xff8e807e,0xffb97171,0xffe25a5a,0xfff85353,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,0xffa83737,
+ 0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff060452,0xff74716f,0xff010101,0xff5e4b4b,0xffb67373,0xff1b1a1c,0xff222222,0xffada1a1,
+ 0xffaa9898,0xffbd8282,0xffa05e5d,0xff222426,0xff575858,0xff4a4d4d,0xff3a3c41,0xff2d2c2d,0xff1a1d1d,0xff6a6a6a,0xffad7373,0xffda5e5d,0xfff55353,0xfffa5252,
+ 0xfffa5252,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff060454,0xff716c6c,0xff2b2b2b,0xffdb6d6d,
+ 0xffef5a5a,0xff353535,0xff98706d,0xffa88b8b,0xffaa8383,0xffc96f6f,0xffe55f5f,0xffa15a57,0xff655050,0xff636363,0xff303130,0xff272828,0xff1a1b1b,0xff4c4c4c,
+ 0xffa67676,0xffd06161,0xfff15555,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff070451,0xffbe8989,0xffd76868,0xffea5b5b,0xfff75353,0xffef5757,0xffd26969,0xffb57676,0xffbd7171,0xffdb6161,0xfff25656,0xfff25656,0xffe15f5f,0xffcb6c6c,
+ 0xff947573,0xff414141,0xff1b1a1a,0xff323533,0xff9f7b7b,0xffc46565,0xffeb5757,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080454,0xffe08181,0xffef5857,0xfff85353,0xfffa5252,0xfff75454,0xffe45c5c,0xffd06363,0xffd76161,0xffed5858,
+ 0xfffa5252,0xfffa5252,0xfff55555,0xffe75a5a,0xffd56262,0xffbf6e6e,0xff736a6a,0xff262c2c,0xff9b7979,0xffbb6868,0xffe55959,0xfff85252,0xfffa5252,0xfffa5252,
+ 0xfffa5252,0xffa83737,0xff010003,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff09045b,0xfff68080,0xfffa5252,0xfffa5252,0xfffa5252,0xfffa5252,
+ 0xfff45454,0xffec5857,0xffef5656,0xfff75353,0xfffa5252,0xfffa5252,0xfffa5252,0xfff85353,0xfff15555,0xffe25b5b,0xffcd6464,0xffb56d6d,0xffa8706e,0xffbb6868,
+ 0xffe15a5a,0xfff75353,0xfffa5252,0xfffa5252,0xfffa5252,0xffa83737,0xff010003,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff0a034c,0xffec4d4d,
+ 0xffa83737,0xffa83737,0xffa83737,0xffa83737,0xffa83737,0xffa73838,0xffa83838,0xffa83737,0xffa83737,0xffa83737,0xffa83737,0xffa83737,0xffa83737,0xffa73939,
+ 0xffa43f3f,0xff9d4947,0xff985151,0xff994f4f,0xffa24141,0xffa83938,0xffa83737,0xffa83737,0xffa83737,0xff672222,0xff000000,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff080224,0xff03010d,0xff010003,0xff010003,0xff010003,0xff010003,0xff010003,0xff010003,0xff010003,0xff010003,0xff010003,0xff010003,
+ 0xff010003,0xff010003,0xff010003,0xff010003,0xff010003,0xff010006,0xff01000a,0xff01000b,0xff010006,0xff010003,0xff010003,0xff010003,0xff010003,0xff000000,
+ 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb NetHack_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff521e00,0xff521b00,0xff521800,0xff521800,
+ 0xff541a00,0xff561a00,0xff571c00,0xff581c00,0xff5b1d00,0xff5c1f00,0xff5f2000,0xff602100,0xff632300,0xff662400,0xff682600,0xff6a2700,0xff6c2900,0xff6f2a00,
+ 0xff722d00,0xff752e00,0xff772f00,0xff793100,0xff7c3200,0xff7a3200,0xff6e2f00,0xff5c2200,0xff4d1200,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff521b00,0xfffdadad,0xfffa8585,0xfff67d7d,0xfff47a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,
+ 0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff37a7a,0xfff27a7a,0xffe97778,0xffc76e6f,0xff924848,0xff2b1200,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff511800,0xfffa8584,0xffee4242,0xffdd2e2e,0xffd12828,0xffce2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,
+ 0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffcd2727,0xffce2727,0xffce2727,0xffc92727,
+ 0xffaa2727,0xff5b2424,0xff110900,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff521800,0xfff67d7d,0xffdd2e2e,0xffaf1313,0xff930b0b,0xff8b0a0a,
+ 0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,0xff8a0a0a,
+ 0xff8a0a0a,0xff8a0a0a,0xff8e0a0a,0xff940a0a,0xff8a0a0a,0xff430909,0xff070200,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff531a00,0xfff47a7a,
+ 0xffd12828,0xff930b0b,0xff6a0202,0xff600101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,
+ 0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5e0101,0xff5f0101,0xff640101,0xff730101,0xff780101,0xff3b0101,0xff040000,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff551a00,0xfff37a7a,0xffce2727,0xff8b0a0a,0xff600101,0xffd8bd8c,0xffdfc693,0xffdec591,0xffdcc28b,0xffdbbf86,0xffd9ba7d,0xffd7b775,
+ 0xffd4b36b,0xffd2ae61,0xffcea855,0xffcba146,0xffc79a39,0xffc49328,0xffbf8a17,0xffb98105,0xffb07802,0xff722a00,0xff580000,0xff690000,0xff730000,0xff390000,
+ 0xff030000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff561b00,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffe0c996,0xffe6d09a,0xffe5cd96,
+ 0xffe3cb92,0xffe2c88b,0xffe0c482,0xffddc079,0xffdabb6e,0xffd8b462,0xffd4af54,0xffd1a845,0xffcc9f34,0xffc7961f,0xffc28c0c,0xffb98405,0xffaf7d02,0xff722c00,
+ 0xff560000,0xff680000,0xff720000,0xff390000,0xff030000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff581c00,0xfff37a7a,0xffcd2727,0xff8a0a0a,
+ 0xff5e0101,0xffdbc390,0xffe1cb96,0xffe2ca94,0xffdfc88d,0xffdec486,0xffdcc07d,0xffd9bb73,0xffd6b667,0xffd3b05a,0xffcfa94b,0xffcba13a,0xffc69827,0xffc08e13,
+ 0xffb98509,0xffaf7e05,0xffa37402,0xff6d2900,0xff560000,0xff680000,0xff720000,0xff390000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff5a1d00,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffd6be8c,0xffdcc691,0xffdbc58e,0xffdac288,0xffd8be7f,0xffd7bb77,0xffd4b66c,0xffd0af5e,0xffcda951,
+ 0xffc9a241,0xffc5982e,0xffbe901a,0xffb8860d,0xffae7e09,0xffa47605,0xff9a6c02,0xff6a2700,0xff560000,0xff680000,0xff720000,0xff390000,0xff040000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff5b1e00,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffd1b884,0xffd7c089,0xffd6bf86,0xffd4bb7f,0xffd3b878,
+ 0xffcfb46d,0xffcdad62,0xffc87843,0xffc57138,0xffc29836,0xffbd9022,0xffb88711,0xffad7e0c,0xffa37708,0xff986e05,0xff8f6502,0xff672400,0xff560000,0xff680000,
+ 0xff720000,0xff390000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff5d2000,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffccb17d,
+ 0xffd1ba81,0xffd0b87e,0xffceb576,0xffcbb16e,0xffc9ac64,0xffc57d48,0xffbf2923,0xffbb231e,0xffb96723,0xffb58615,0xffac7f11,0xffa2760c,0xff996e08,0xff8e6605,
+ 0xff865e02,0xff632200,0xff560000,0xff670000,0xff710000,0xff390000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff602100,0xfff37a7a,
+ 0xffcd2727,0xff8a0a0a,0xff5e0101,0xffc5ac76,0xffcab279,0xffc8b072,0xffc7ad6c,0xffc5a863,0xffc17c49,0xffbb2d26,0xffb81f1f,0xffb31c1c,0xffae1e18,0xffa95915,
+ 0xffa17610,0xff976e0c,0xff8e6708,0xff845f04,0xff7c5702,0xff622300,0xff550000,0xff650000,0xff6f0000,0xff390000,0xff040000,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff622200,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffc0a56d,0xffc2ab6f,0xffc1a76a,0xffc0a461,0xffbc7b49,0xffb7312b,0xffb32323,
+ 0xffb01f1f,0xffab1b1b,0xffa51818,0xff9c1b14,0xff954d10,0xff8d670b,0xff846008,0xff7c5904,0xff755302,0xff642e00,0xff540000,0xff630000,0xff6b0000,0xff380000,
+ 0xff030000,0x9a000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff652400,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffb99f65,0xffbca265,0xffbba05e,
+ 0xffb77848,0xffb2322d,0xffaf2626,0xffac2222,0xffa81e1e,0xffa31a1a,0xff9a1717,0xff921313,0xff8a140f,0xff84420b,0xff7b5908,0xff745204,0xff6c4d02,0xff5d2300,
+ 0xff540000,0xff630000,0xff6b0000,0xff380000,0xff030000,0x9a000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff662400,0xfff37a7a,0xffcd2727,0xff8a0a0a,
+ 0xff5e0101,0xffb3985c,0xffb59b5b,0xffb27647,0xffae332e,0xffab2828,0xffa82525,0xffa42121,0xffa01e1e,0xff981a1a,0xff911616,0xff881212,0xff800f0f,0xff780f0b,
+ 0xff723807,0xff6c4d04,0xff664802,0xff591c00,0xff550000,0xff650000,0xff6f0000,0xff390000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff692600,0xfff37a7a,0xffcd2727,0xff8a0a0a,0xff5e0101,0xffad9154,0xffae7447,0xffa93631,0xffa62b2b,0xffa32727,0xffa12424,0xff9c2020,0xff951e1c,0xff8d1a19,
+ 0xff861616,0xff7f1212,0xff780e0e,0xff700a0a,0xff690c07,0xff642f04,0xff5f4302,0xff581b00,0xff560000,0xff670000,0xff720000,0xff390000,0xff040000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff6b2800,0xfff37a7a,0xffce2727,0xff8b0a0a,0xff5f0101,0xffa48446,0xffa43831,0xffa22d2d,0xff9f2a2a,0xff9c2626,
+ 0xff972323,0xff91211f,0xff8c471c,0xff854618,0xff7c1715,0xff761211,0xff6f0e0e,0xff690a0a,0xff620707,0xff5b0904,0xff5a3e02,0xff541200,0xff570000,0xff690000,
+ 0xff730000,0xff3a0000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff6e2a00,0xfff47a7a,0xffd02727,0xff900a0a,0xff620101,0xff8b5929,
+ 0xff9d2e2e,0xff9b2c2c,0xff982929,0xff922525,0xff8d2222,0xff88461e,0xff83651b,0xff7c5e18,0xff753d14,0xff6d1211,0xff670e0e,0xff600a0a,0xff5b0707,0xff560404,
+ 0xff563402,0xff510300,0xff580000,0xff6d0000,0xff770000,0xff3b0000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff712b00,0xfff57b7a,
+ 0xffd82727,0xff9d0a0a,0xff6c0101,0xff621308,0xff8f3526,0xff922b2b,0xff8d2828,0xff882724,0xff844821,0xff80631d,0xff7a5e1a,0xff735817,0xff6d5314,0xff663610,
+ 0xff5f100d,0xff590909,0xff550707,0xff520604,0xff521901,0xff520000,0xff5c0000,0xff760000,0xff800000,0xff3c0000,0xff040000,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff732d00,0xfff87c7c,0xffe22727,0xffb20a0a,0xff7f0101,0xff5f0000,0xff621709,0xff853123,0xff842827,0xff814823,0xff7c6120,0xff775c1c,
+ 0xff715719,0xff6b5216,0xff664d13,0xff604810,0xff5a2e0d,0xff540b09,0xff500806,0xff511202,0xff510000,0xff550000,0xff680000,0xff870000,0xff8c0000,0xff3f0000,
+ 0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff752e00,0xfffa7d7d,0xffed2727,0xffcd0a0a,0xff9d0101,0xff730000,0xff5c0000,0xff5b0d05,
+ 0xff79401b,0xff7b6021,0xff765c1f,0xff70581c,0xff6b5318,0xff664e15,0xff614a13,0xff5b450f,0xff57410c,0xff532909,0xff521303,0xff510000,0xff540000,0xff610000,
+ 0xff7d0000,0xffa00000,0xff980000,0xff400000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff782f00,0xfffc7d7d,0xfff62727,0xffe40a0a,
+ 0xffc10101,0xff960000,0xff720000,0xff5d0000,0xff540000,0xff693110,0xff71521b,0xff6d541b,0xff685018,0xff624c16,0xff5e4812,0xff59430e,0xff583209,0xff541403,
+ 0xff510000,0xff550000,0xff600000,0xff790000,0xffa10000,0xffbd0000,0xffa20000,0xff410000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff7a3100,0xfffb7d7d,0xfff72727,0xfff10a0a,0xffde0101,0xffbe0000,0xff980000,0xff760000,0xff600000,0xff550000,0xff591006,0xff663710,0xff6d5416,0xff664e14,
+ 0xff5d370d,0xff571d06,0xff500000,0xff510000,0xff560000,0xff620000,0xff7a0000,0xffa00000,0xffc60000,0xffd20000,0xffa80000,0xff410000,0xff040000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff783100,0xfff07a7a,0xffe92727,0xffe50a0a,0xffdf0101,0xffd00000,0xffb60000,0xff960000,0xff780000,0xff610000,
+ 0xff540000,0xff4d0000,0xff6c4700,0xff684400,0xff4b0000,0xff4c0000,0xff4e0000,0xff560000,0xff630000,0xff7a0000,0xff990000,0xffbb0000,0xffd20000,0xffd00000,
+ 0xff9f0000,0xff3e0000,0xff040000,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff6d2e00,0xffcb6f71,0xffba2727,0xffb00a0a,0xffac0101,0xffa80000,
+ 0xffa00000,0xff900000,0xff7c0000,0xff650000,0xff520000,0xff460000,0xff3e0000,0xff3c0000,0xff3c0000,0xff410000,0xff480000,0xff550000,0xff670000,0xff7d0000,
+ 0xff920000,0xffa10000,0xffa80000,0xff9f0000,0xff790000,0xff330000,0xff040000,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff5a2100,0xff934848,
+ 0xff5e2424,0xff490909,0xff430101,0xff420000,0xff410000,0xff3f0000,0xff3b0000,0xff340000,0xff2d0000,0xff250000,0xff200000,0xff1d0000,0xff1e0000,0xff220000,
+ 0xff270000,0xff2e0000,0xff350000,0xff3b0000,0xff3f0000,0xff410000,0xff410000,0xff3e0000,0xff320000,0xff190000,0xff000000,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff4c1100,0xff2a1200,0xff110900,0xff070200,0xff040000,0xff030000,0xff030000,0xff040000,0xff040000,0xff030000,0xff030000,0xff030000,
+ 0xff030000,0xff030000,0xff030000,0xff030000,0xff030000,0xff030000,0xff030000,0xff040000,0xff040000,0xff040000,0xff040000,0xff040000,0xff040000,0xff000000,
+ 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x9a000000,0x9b020000,0x9f030200,0xa4050200,0xab090300,0xb00a0400,0xaf0a0400,0xa9080500,0xa2050200,0x9d020000,0x9b020200,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x67020000,0x67000000,0x69020000,0x6c050200,0x6e070200,0x6d050200,0x6b050200,0x68000000,0x67020000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e000000,0x3e000000,
+ 0x3e000000,0x3e000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb OKButton_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x3edcdcdc,0x93dbdbdb,0xd5dfdfdf,0xfededede,0xf8d9d9d9,0xeedcdcdc,0xe1d8d8d8,0xdcdadada,0xe1dadada,0xe6dbdbdb,
+ 0xecdddddd,0xf1dcdcdc,0xf6dcdcdc,0xfbdddddd,0xfedddddd,0xffdedede,0xffdddddd,0xd9d2d2d2,0xa1c8c8c8,0x519e9e9e,0xc000000,0x3000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x5fdcdcdc,0xdbe3e3e3,0xffe2e2e2,0xffd3d3d3,0xffcecece,0xffcccccc,0xffd5d5d5,0xffd0d0d0,0xffcdcdcd,0xffcecece,0xffcecece,
+ 0xffcdcdcd,0xffcccccc,0xffcdcdcd,0xffcecece,0xffd1d1d1,0xffd2d2d2,0xffd3d3d3,0xffd4d4d4,0xffdcdcdc,0xe7c7c7c7,0x848e8e8e,0x18000000,0x4000000,0xffffff,
+ 0xffffff,0xffffff,0x3edddcdc,0xdbdadada,0xffd8d8d8,0xffcac9c9,0xffc6c6c6,0xffc2c1c2,0xffc4c3c4,0xffa6a6a6,0xff414141,0xff424242,0xff676767,0xffc4c4c4,
+ 0xffa4a4a4,0xff424242,0xffa6a5a6,0xffcbcacb,0xff8a898a,0xffb3b2b3,0xffd6d5d6,0xffd6d5d6,0xffd3d3d3,0xffc5c6c5,0xeda2a1a2,0x765a5a5a,0x18000000,0x3000000,
+ 0xffffff,0xffffff,0x93d4d5d4,0xffd1d0d0,0xffbcbcbc,0xffbab9b9,0xffbdbdbd,0xffbcbcbc,0xffbbbaba,0xff000000,0xff6d6e6d,0xffbdbdbd,0xff000000,0xff727272,
+ 0xff929292,0xff000000,0xff979797,0xff7b7b7b,0xff272727,0xffb1b1b1,0xffd1d1d1,0xffd1d1d1,0xffd0d0d0,0xffc7c8c7,0xffb3b2b2,0xc9626262,0x3d000000,0xc000000,
+ 0xffffff,0xffffff,0xd5cbcbcb,0xffb8b8b8,0xffa7a7a7,0xffaeaeae,0xffa9a8a8,0xffb1b1b1,0xffa6a6a6,0xff000000,0xff686868,0xffb6b6b6,0xff000000,0xff686868,
+ 0xff868686,0xff000000,0xff595959,0xff252525,0xff9d9d9d,0xffc4c4c4,0xffc0c0c0,0xffbcbcbc,0xffc6c6c6,0xffc5c5c5,0xffbbbbbb,0xf0666666,0x61000000,0x1a000000,
+ 0xffffff,0xffffff,0xfabebebe,0xffa4a4a4,0xff979797,0xffa8a8a8,0xffa0a0a0,0xff9b9b9b,0xffa1a1a1,0xff000000,0xff636363,0xffa4a4a4,0xff000000,0xff5f5f5f,
+ 0xff7a7a7a,0xff000000,0xff000000,0xff9f9f9f,0xffbbbbbb,0xffadadad,0xffa7a7a7,0xffb2b2b2,0xffbcbcbc,0xffc2c2c2,0xffadadad,0xfd626262,0x7c000000,0x25000000,
+ 0xffffff,0xffffff,0xd8adadad,0xff989898,0xff959595,0xff8b8b8b,0xff939393,0xff9a9a9a,0xff939393,0xff000000,0xff585858,0xff979797,0xff000000,0xff5b5b5b,
+ 0xff757575,0xff000000,0xff2b2b2b,0xff2f2f2f,0xffa9a9a9,0xffb3b3b3,0xffadadad,0xffadadad,0xffb8b8b8,0xffb4b4b4,0xff959595,0xf24a4a4a,0x85000000,0x2b000000,
+ 0xffffff,0xffffff,0x9e919191,0xff949493,0xff868787,0xff8c8c8c,0xff818181,0xff888887,0xff8a8a8a,0xff000000,0xff545654,0xff848384,0xff000000,0xff4f4f4f,
+ 0xff676766,0xff000000,0xff737372,0xff4e4e4d,0xff3c3c3c,0xff9e9e9e,0xffaeaeae,0xffb2b2b2,0xffacacac,0xffa5a6a5,0xff706f70,0xdf373737,0x7c000000,0x25000000,
+ 0xffffff,0xffffff,0x506d6d6d,0xe67b7b7b,0xff7d7d7d,0xff7a7a7a,0xff777878,0xff777777,0xff7d7e7d,0xff484848,0xff161616,0xff292929,0xff1e1f1f,0xff6a6b6b,
+ 0xff5c5c5c,0xff000000,0xff616161,0xff838383,0xff484848,0xff7e7e7e,0xffa5a5a5,0xffa6a7a6,0xff979797,0xff787778,0xf5434343,0xbb1a1a1a,0x61000000,0x1a000000,
+ 0xffffff,0xffffff,0xc000000,0x834d4d4d,0xec595959,0xff5e5d5d,0xff656564,0xff696969,0xff696869,0xff6b6a6b,0xff6a6a69,0xff666665,0xff646463,0xff656564,
+ 0xff666666,0xff686868,0xff6c6c6c,0xff727272,0xff7a7a7a,0xff828282,0xff818181,0xff787778,0xff656465,0xf5424241,0xce222222,0x83000000,0x3d000000,0xc000000,
+ 0xffffff,0xffffff,0x3000000,0x18000000,0x752d2d2d,0xc8353535,0xef363636,0xff3e3e3e,0xfd373737,0xfa353535,0xf5333333,0xf3313131,0xf5353535,0xf7353535,
+ 0xf9373737,0xfa383838,0xfc3c3c3c,0xfe3d3d3d,0xff424242,0xff454545,0xff454545,0xf3383838,0xdf2a2a2a,0xbb161616,0x83000000,0x4b000000,0x18000000,0x3000000,
+ 0xffffff,0xffffff,0xffffff,0x4000000,0x18000000,0x3d000000,0x61000000,0x7c000000,0x8a000000,0x8b000000,0x87000000,0x82000000,0x81000000,0x82000000,
+ 0x84000000,0x87000000,0x89000000,0x8b000000,0x8e000000,0x8e000000,0x8f000000,0x8b000000,0x7c000000,0x61000000,0x3d000000,0x18000000,0x4000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x3000000,0xc000000,0x1a000000,0x26000000,0x2d000000,0x2e000000,0x2b000000,0x29000000,0x28000000,0x29000000,
+ 0x2a000000,0x2b000000,0x2d000000,0x2e000000,0x2e000000,0x2f000000,0x30000000,0x2e000000,0x26000000,0x1a000000,0xc000000,0x3000000,0xffffff,0xffffff
+};
+
+static const QRgb Opera_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3e000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,
+ 0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5223,0xff0d5223,0xff0d5223,0xff0d5223,0xff0d5222,0xff0d5222,0xff0d5223,0xff0d5223,0xff0d5223,0xff0d5323,
+ 0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff0d5323,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfffafafa,0xfff8f8f8,0xfff7f7f7,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,
+ 0xfff6f6f6,0xfff8f8f8,0xfff9f9f9,0xfffbfbfb,0xfffcfcfc,0xfffefefe,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff0d5323,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff0d5323,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffcfcfc,0xfff9f9f9,0xfff6f6f6,0xfff3f3f3,0xffefefef,
+ 0xffededed,0xffececec,0xffebebeb,0xffebebeb,0xffececec,0xffeeeeee,0xfff1f1f1,0xfff4f4f4,0xfff8f8f8,0xfffbfbfb,0xfffdfdfd,0xfffefefe,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xff0d5323,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff0d5323,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffbfbfb,0xfff7f7f7,
+ 0xfff2f2f2,0xffebebeb,0xffe5e5e5,0xffe0e0e0,0xffdddddd,0xffdbdbdb,0xffdbdbdb,0xffdbdbdb,0xffdbdbdb,0xffdedede,0xffe2e2e2,0xffe8e8e8,0xffefefef,0xfff5f5f5,
+ 0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xff0d5323,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff0d5323,0xffffffff,
+ 0xfffdfdfd,0xfffbfbfb,0xfff6f6f6,0xffeeeeee,0xffe4e4e4,0xffdadada,0xffd0d0d0,0xffcbcbcb,0xffc8c8c8,0xffcfb6b6,0xffd6a0a0,0xffd6a0a0,0xffc8c8c8,0xffc8c8c8,
+ 0xffcdcdcd,0xffd4d4d4,0xffdfdfdf,0xffeaeaea,0xfff3f3f3,0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff,0xff0d5323,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff0d5323,0xfffefefe,0xfffcfcfc,0xfff7f7f7,0xffeeeeee,0xffe1e1e1,0xffd1d1d1,0xffc2c2c2,0xffc0acac,0xffdf6f6f,0xfff62323,0xffed0d0d,
+ 0xffdf3434,0xffed2c2c,0xfffa2727,0xffed4a4a,0xffd07a7a,0xffbcbcbc,0xffc9c9c9,0xffdadada,0xffe8e8e8,0xfff3f3f3,0xfffafafa,0xfffdfdfd,0xfffefefe,0xffffffff,
+ 0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffdfdfd,0xfff8f8f8,0xfff0f0f0,0xffe1e1e1,0xffcecece,0xffb9b9b9,0xffc98c8c,
+ 0xfff54b4b,0xfff10000,0xffa64545,0xffb5acac,0xffbdbdbd,0xffbbbbbb,0xffc28383,0xfff42424,0xfffa2121,0xffe23535,0xffb4a5a5,0xffc4c4c4,0xffd8d8d8,0xffe9e9e9,
+ 0xfff5f5f5,0xfffbfbfb,0xfffefefe,0xffffffff,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffbfbfb,0xfff4f4f4,0xffe6e6e6,
+ 0xffd2d2d2,0xffb8b8b8,0xffc38888,0xfffb5151,0xfff70000,0xff8a1e1e,0xffadadad,0xffbebebe,0xffc6c6c6,0xffc3c3c3,0xffb5b5b5,0xffbf7272,0xfffa1e1e,0xfff90c0c,
+ 0xffd71d1d,0xffafa1a1,0xffc6c6c6,0xffdddddd,0xffeeeeee,0xfff8f8f8,0xfffcfcfc,0xfffefefe,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000,
+ 0xff0d5223,0xfff8f8f8,0xffeeeeee,0xffdbdbdb,0xffc0c0c0,0xffb39696,0xfffb5d5d,0xfffa2121,0xff9d0000,0xff866666,0xffb4b4b4,0xffc9c9c9,0xffd4d4d4,0xffd0d0d0,
+ 0xffbfbfbf,0xffa5a5a5,0xffec3131,0xfff91515,0xffe70000,0xffb73131,0xffb1b1b1,0xffcecece,0xffe5e5e5,0xfff4f4f4,0xfffbfbfb,0xfffefefe,0xff0d5323,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3e000000,0xff0d5222,0xfff5f5f5,0xffe7e7e7,0xffcfcfcf,0xffafafaf,0xffdd6d6d,0xfffb4040,0xffe20000,0xff740000,0xff9d9d9d,
+ 0xffbdbdbd,0xffd5d5d5,0xffdfdfdf,0xffdcdcdc,0xffcacaca,0xffacacac,0xffbe6262,0xfffa2222,0xfff50000,0xffc00000,0xffa47474,0xffbfbfbf,0xffdcdcdc,0xffefefef,
+ 0xfff9f9f9,0xfffdfdfd,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000,0xff0d5122,0xfff1f1f1,0xffe0e0e0,0xffc4c4c4,0xffab9696,0xfffb5555,
+ 0xfffa2222,0xffbb0000,0xff712323,0xffa2a2a2,0xffc5c5c5,0xffdedede,0xffe8e8e8,0xffe5e5e5,0xffd3d3d3,0xffb4b4b4,0xffac7878,0xfffa3131,0xfff90c0c,0xffc80000,
+ 0xff983838,0xffb1b1b1,0xffd3d3d3,0xffeaeaea,0xfff6f6f6,0xfffcfcfc,0xff0d5323,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3f000000,0xff0d5122,0xffeeeeee,
+ 0xffd9d9d9,0xffbababa,0xffc37777,0xfffb4646,0xfff90c0c,0xffa90000,0xff773434,0xffa8a8a8,0xffcbcbcb,0xffe3e3e3,0xffededed,0xffeaeaea,0xffd9d9d9,0xffbababa,
+ 0xffa08888,0xfffa3a3a,0xfff91515,0xffd40000,0xff950909,0xffa6a6a6,0xffcbcbcb,0xffe5e5e5,0xfff4f4f4,0xfffbfbfb,0xff0d5223,0x99000000,0x66000000,0x3d000000,
+ 0x20000000,0x3f000000,0xff0d5022,0xffebebeb,0xffd5d5d5,0xffb3b3b3,0xffce6868,0xfffa3939,0xfff70000,0xffa30000,0xff7e4747,0xffacacac,0xffcfcfcf,0xffe7e7e7,
+ 0xfff0f0f0,0xffeeeeee,0xffdedede,0xffbfbfbf,0xff969696,0xfffb4040,0xfffa1919,0xffda0000,0xff950000,0xff9a8888,0xffc4c4c4,0xffe0e0e0,0xfff0f0f0,0xfff6f6f6,
+ 0xff0d5122,0x99000000,0x66000000,0x3d000000,0x20000000,0x3f000000,0xff0d5022,0xffeaeaea,0xffd2d2d2,0xffafafaf,0xffdb5b5b,0xfffa3030,0xfff10000,0xffa30000,
+ 0xff814848,0xffaeaeae,0xffd1d1d1,0xffe8e8e8,0xfff2f2f2,0xffefefef,0xffdfdfdf,0xffc1c1c1,0xff989898,0xfffb4545,0xfffa1b1b,0xffda0000,0xff930000,0xff906d6d,
+ 0xffb9b9b9,0xffd4d4d4,0xffe2e2e2,0xffe5e5e5,0xff0c4b20,0x99000000,0x66000000,0x3d000000,0x20000000,0x3f000000,0xff0d5022,0xffeaeaea,0xffd2d2d2,0xffaeaeae,
+ 0xffdb5555,0xfffa2a2a,0xffef0000,0xffa50000,0xff824949,0xffaeaeae,0xffd2d2d2,0xffe8e8e8,0xfff2f2f2,0xffefefef,0xffe0e0e0,0xffc1c1c1,0xff979797,0xfffb4646,
+ 0xfffa1c1c,0xffd80000,0xff8c0000,0xff856464,0xffa7a7a7,0xffbababa,0xffc6c6c6,0xffcbcbcb,0xff0b431c,0x99000000,0x66000000,0x3d000000,0x20000000,0x3f000000,
+ 0xff0d5022,0xffebebeb,0xffd4d4d4,0xffb2b2b2,0xffd55656,0xfffa2727,0xfff30000,0xffab0000,0xff844848,0xffacacac,0xffd0d0d0,0xffe7e7e7,0xfff1f1f1,0xffeeeeee,
+ 0xffdddddd,0xffbdbdbd,0xff939393,0xfffb4848,0xfffa1b1b,0xffce0000,0xff7e0000,0xff715c5c,0xff878787,0xff9b9b9b,0xffafafaf,0xffc2c2c2,0xff0a421c,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3f000000,0xff0d5122,0xffededed,0xffd8d8d8,0xffb8b8b8,0xffc16767,0xfffa2828,0xfff90303,0xffb90000,0xff863c3c,0xffa9a9a9,
+ 0xffcccccc,0xffe4e4e4,0xffeeeeee,0xffe9e9e9,0xffd6d6d6,0xffb3b3b3,0xff8e8383,0xfffb4949,0xfff91515,0xffbb0000,0xff6e0000,0xff5f5f5f,0xff888888,0xffaeaeae,
+ 0xffc8c8c8,0xffd5d5d5,0xff0b451d,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3f000000,0xff0d5122,0xfff0f0f0,0xffdedede,0xffc1c1c1,0xffaf8888,0xfffa2a2a,
+ 0xfff90c0c,0xffc80000,0xff8c2323,0xffa4a4a4,0xffc7c7c7,0xffdfdfdf,0xffe8e8e8,0xffe1e1e1,0xffc5c5c5,0xff949494,0xff8a5e5e,0xfffb4646,0xfff90707,0xff9b0000,
+ 0xff602020,0xff8a8a8a,0xffb3b3b3,0xffcfcfcf,0xffdbdbdb,0xffd6d6d6,0xff0a3f1a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3e000000,0xff0d5222,0xfff4f4f4,
+ 0xffe5e5e5,0xffcccccc,0xffababab,0xffeb2f2f,0xfff91010,0xffda0000,0xff990808,0xff9e9e9e,0xffbfbfbf,0xffd6d6d6,0xffd9d9d9,0xffc2c2c2,0xff969696,0xff6c6c6c,
+ 0xff9f5454,0xfffa3a3a,0xffde0000,0xff780000,0xff775252,0xffacacac,0xffc7c7c7,0xffd3d3d3,0xffc9c9c9,0xffb3b3b3,0xff072f14,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3e000000,0xff0d5223,0xfff7f7f7,0xffececec,0xffd8d8d8,0xffbcbcbc,0xffbc6f6f,0xfff90c0c,0xffeb0000,0xffb50000,0xff9c7d7d,0xffb5b5b5,0xffc5c5c5,
+ 0xffbababa,0xff9d9d9d,0xff818181,0xff707070,0xffd35a5a,0xfffa1c1c,0xffa10000,0xff611919,0xffa0a0a0,0xffb8b8b8,0xffbfbfbf,0xffb3b3b3,0xff9b9b9b,0xff828282,
+ 0xff062710,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5223,0xfffafafa,0xfff2f2f2,0xffe4e4e4,0xffcecece,0xffb3b3b3,0xffd13e3e,0xffeb0000,
+ 0xffd40000,0xffb33333,0xffaaaaaa,0xffb0b0b0,0xffa4a4a4,0xff969696,0xff8d8d8d,0xff9f8181,0xfffa3a3a,0xffca0000,0xff670909,0xff8d7b7b,0xffa6a6a6,0xffa6a6a6,
+ 0xff959595,0xff868686,0xff808080,0xff898989,0xff083215,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffcfcfc,0xfff7f7f7,0xffeeeeee,
+ 0xffdedede,0xffc9c9c9,0xffb3b3b3,0xffc54141,0xffd20000,0xffce0000,0xffbe6565,0xffa7a7a7,0xffa1a1a1,0xff9e9e9e,0xffa49999,0xffe74b4b,0xffe00000,0xff760a0a,
+ 0xff877676,0xff8c8c8c,0xff818181,0xff7c7c7c,0xff898989,0xffa0a0a0,0xffb4b4b4,0xffc8c8c8,0xff0b461d,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0d5323,0xfffdfdfd,0xfffbfbfb,0xfff5f5f5,0xffebebeb,0xffdddddd,0xffcccccc,0xffbcbcbc,0xffb77777,0xffb31717,0xffbe0000,0xffd62f2f,0xffce6363,0xffd45e5e,
+ 0xfff31a1a,0xffcc0000,0xff873939,0xff837d7d,0xff848484,0xff919191,0xffaaaaaa,0xffc2c2c2,0xffd3d3d3,0xffdddddd,0xffe6e6e6,0xffefefef,0xff0c5022,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0d5323,0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff5f5f5,0xffececec,0xffe0e0e0,0xffd4d4d4,0xffcacaca,0xffc5c5c5,
+ 0xffbd9d9d,0xffb97474,0xffbe6666,0xffbe6464,0xffb18383,0xffafa6a6,0xffb5b5b5,0xffbfbfbf,0xffcbcbcb,0xffd8d8d8,0xffe3e3e3,0xffebebeb,0xfff2f2f2,0xfff7f7f7,
+ 0xfffafafa,0xfffdfdfd,0xff0d5223,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff0d5323,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff6f6f6,
+ 0xffefefef,0xffe8e8e8,0xffe0e0e0,0xffdbdbdb,0xffd8d8d8,0xffd7d7d7,0xffd7d7d7,0xffd6d6d6,0xffd6d6d6,0xffd7d7d7,0xffdbdbdb,0xffe0e0e0,0xffe8e8e8,0xffefefef,
+ 0xfff5f5f5,0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xfffefefe,0xffffffff,0xff0d5323,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff0d5323,0xffffffff,
+ 0xffffffff,0xfffefefe,0xfffdfdfd,0xfffbfbfb,0xfff8f8f8,0xfff4f4f4,0xfff0f0f0,0xffececec,0xffe9e9e9,0xffe8e8e8,0xffe8e8e8,0xffe8e8e8,0xffe9e9e9,0xffebebeb,
+ 0xffeeeeee,0xfff2f2f2,0xfff5f5f5,0xfffafafa,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff0d5323,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5223,0xff0d5222,0xff0d5122,0xff0d5022,0xff0c5022,0xff0c4f21,
+ 0xff0c4f21,0xff0c4f21,0xff0c5022,0xff0d5022,0xff0d5122,0xff0d5122,0xff0d5223,0xff0d5223,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,0xff0d5323,
+ 0xff0d5323,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x9a000000,0x9a000000,0x9b000000,0x9b000000,0x9b000000,0x9b000000,0x9b000000,0x9a000000,0x9a000000,0x9a000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x67000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb PPPConnect_data[] = {
+ 0xffffff,0xffffff,0x1000000,0x4000000,0x7000000,0xc313520,0xd000000,0xd000000,0xb353923,0x5000000,0x2000000,0x2000000,0x3000000,0x5000000,
+ 0x9000000,0xc000000,0xd000000,0xd000000,0xb000000,0x8000000,0x6000000,0x4000000,0x6000000,0xa1b2000,0xd000000,0xd000000,0xb191d00,0x7000000,
+ 0x4000000,0x1000000,0xffffff,0xffffff,0x1000000,0x6000000,0x13000000,0x344a5225,0x7699a553,0x5e747e3e,0x98aab75e,0x8aa3b059,0x6994a14f,0x48828d45,
+ 0x26636b37,0x12000000,0x12000000,0x1a000000,0x23000000,0x2b000000,0x2f000000,0x2e000000,0x29000000,0x21000000,0x1e000000,0x2a39410c,0x3e5e6b08,0x57768610,
+ 0x73849713,0x7f8b9f12,0x5156620c,0x6278890f,0x30373f0a,0x13000000,0x6000000,0x1000000,0x7000000,0x325e6631,0xa9aab760,0xe3c2d078,0xf2cbd881,0xf5ccda84,
+ 0xd8bdcb71,0xd7becc72,0xd1c1cc7e,0xc7bfcb7c,0xa9b7c472,0x5c868f5a,0x3c1b202b,0x623f5868,0x99567c92,0xc4638aa3,0xd8668ea7,0xd3638da6,0xb95b859e,0x874c6f86,
+ 0x6f526940,0x968ca01d,0xab9aae1d,0xb69eb41d,0xc2a2b917,0xc2a2b817,0xedb4cc1b,0xe7afc81b,0xd3a4bb1a,0x938b9d14,0x2c454e0c,0x7000000,0x24515a29,0xb5aebc62,
+ 0xfad1de88,0xffd5e28d,0xd6b8c66c,0x71808c43,0x6f94a052,0x648d9852,0x6d8d9853,0x859fa777,0x93a4aa9e,0xb8a4b4b6,0xe39ab3bf,0xff86acbd,0xff76a6bc,0xff5d9ab6,
+ 0xff4087a9,0xff70a6bf,0xff75a8bd,0xff6c9fb7,0xf95f91ad,0xc9597f8f,0x9261784e,0x755b6b25,0x605d6a13,0x63707e16,0x66616e0f,0xc49bb01a,0xffbdd620,0xf7b6d01f,
+ 0xa08fa417,0x2240480f,0x658b9748,0xefc8d67a,0xffd5e38a,0xe2bcca6e,0x31000000,0x1027291a,0xe000000,0x19000000,0x35191f2b,0x7d355e78,0xe04a869a,0xff8eb5bd,
+ 0xffbcd4d4,0xffafd0d2,0xff9dccd5,0xff7ec4d7,0xff50a7bd,0xff92cedf,0xff92ccda,0xff93c9d6,0xff82b8c9,0xff5a99b0,0xff3b7fa0,0xbc467896,0x60375367,0x2a000000,
+ 0x1c0c0d00,0x34000000,0xd5a1b61e,0xffbdd724,0xe5adc420,0x58707e14,0x95a0ad53,0xf8cedc7d,0xffd3e285,0xb7a4b258,0x18000000,0x6000000,0x14000000,0x32252d33,
+ 0x9448768e,0xf9166c84,0xff418d92,0xffa0cbc7,0xff87b1ab,0xff679385,0xffadcfc9,0xffd8f5f2,0xffd3f6fa,0xffc5eff7,0xffbdecf4,0xffafe4ef,0xffaadeeb,0xff93d0dd,
+ 0xff33859a,0xff00608a,0xe24686ab,0x734d6d82,0x270d1616,0x25000000,0xa78a9b1b,0xffbed728,0xf3b5cc25,0x8586981b,0xa2a2af54,0xfcd0de7d,0xffd2e181,0xafa2af53,
+ 0x1f35391a,0x12000000,0x2f1a2228,0x9d638b9c,0xff237887,0xff036264,0xff3f877c,0xff377b61,0xff226238,0xff61946f,0xffc4eae3,0xffc5ede3,0xffddf7f7,0xffd1f4f8,
+ 0xffbdf0f8,0xffb7edf8,0xffb4ecf8,0xffaee9f7,0xff6ab2c2,0xff277d9a,0xff3c97b8,0xf364a1bb,0x724d6e81,0x381d1f0a,0xa3889a1f,0xffc0d82e,0xfabcd32d,0x938a9b1e,
+ 0x969baa4e,0xfed1e07b,0xfecfde7a,0xc0a9b757,0x25000000,0x25000000,0x856a848f,0xff4e939a,0xff0c6c5c,0xff206c51,0xff0d5b2b,0xff1d6528,0xffa7ceb9,0xffeeffff,
+ 0xffe7ffff,0xffcaf1ee,0xffd7f6f7,0xffdff8f9,0xffd3f5f8,0xffc1f0f8,0xffb7eef9,0xffafeafc,0xff97e0f9,0xff7bcce8,0xff459ebf,0xff348eb6,0xe05b95b1,0x632d3e4a,
+ 0xb990a323,0xfec0d731,0xfec0d833,0x88869820,0x718a9641,0xf4c7d76d,0xffcedd76,0xddb6c45e,0x3d17190f,0x594d5a5f,0xea86a8ad,0xff2e8477,0xff0f6738,0xff136117,
+ 0xff19711d,0xff98cbaa,0xfff2ffff,0xffedfdff,0xffdef8fb,0xffdefafe,0xffd3f8f9,0xffd3f6f9,0xffdaf7f8,0xffd3f4f8,0xffc0eef9,0xffb4ebfa,0xffa6ecfe,0xff7ccfe5,
+ 0xff1e7995,0xff006ba6,0xff207eaf,0xca51798e,0xdaa2b62e,0xffc2d938,0xf1b6cc34,0x69798822,0x364e5424,0xe2b9ca5e,0xffcddd71,0xf4c1d165,0x81666f2f,0xb87d9299,
+ 0xff7ea6a4,0xff10734d,0xff378354,0xff72b592,0xff97d0b2,0xffe4fcf8,0xfff0feff,0xffe4fafb,0xffe0f9fb,0xffdcf8f9,0xffd7f8f9,0xffd1f7f8,0xffd1f4f8,0xffd6f5f8,
+ 0xffd0f2f8,0xffbcedf8,0xffb8f3ff,0xff95d8e1,0xff2e7980,0xff006da5,0xff0072b0,0xff4a807e,0xf6b4ca3b,0xffc4db3f,0xdbacc035,0x34414912,0x1a2b3012,0xb0a1b04b,
+ 0xfecadb69,0xffcbdc6a,0xc592a147,0xf78da2a5,0xff7cac9f,0xff248550,0xffa5d4c1,0xffecfefd,0xffeeffff,0xfff3ffff,0xfff0feff,0xffe8fbfd,0xffe3fafb,0xffdff8fa,
+ 0xffdaf8f9,0xffd4f7f9,0xffcef5f9,0xffcbf2f8,0xffd1f3f8,0xffccf1f8,0xffc0f2fe,0xffabe6ef,0xff3d8380,0xff006d95,0xff0077b1,0xff69965e,0xffc5dc45,0xfec4da43,
+ 0xab94a52f,0x1b282d10,0x9000000,0x5e788331,0xefbccd5a,0xffc8da64,0xf3b2c357,0xff90a190,0xffa4c2b9,0xff7bc49d,0xfff3fdfd,0xfffdffff,0xffdff5f0,0xffc7eee2,
+ 0xffb4e3d5,0xffdcf7f4,0xffe7fbfd,0xffe2f9fa,0xffdff8f9,0xffd6f7f8,0xffd1f5f8,0xffcaf3f8,0xffc3f2f7,0xffcbf1f8,0xffcbf0fa,0xffbdf3fd,0xff549389,0xff00595f,
+ 0xff1f7893,0xffa3be4e,0xffc7dd4a,0xefb6c941,0x63687423,0xb000000,0x2000000,0x1d272a10,0xad98a73f,0xfdc4d75d,0xfec4d65c,0xffa2b268,0xffb2c3bb,0xff6ebb8f,
+ 0xff94d1ad,0xffe1f4ec,0xffeefcf9,0xffd9f7ef,0xffd3f3ee,0xffe4f9f8,0xffe8fbfc,0xffe0f8fc,0xffd6f7f9,0xffd7f7f8,0xffd1f6f8,0xffcbf3f8,0xffc3f1f7,0xffbfeef8,
+ 0xffc9eff8,0xffcbf4fc,0xff9ad2d9,0xff286254,0xff729352,0xffc6db50,0xffc4d850,0xb8899831,0x2b1d1f0c,0x4000000,0xffffff,0x9000000,0x50576023,0xe8b0c24b,
+ 0xffc4d757,0xffb9cc54,0xffb0bd93,0xffafd7c5,0xff9ed7b8,0xffb8e3d1,0xffeffcfb,0xfff8ffff,0xfff3ffff,0xfff5ffff,0xfff8ffff,0xffe3fcfd,0xffcbf5fa,0xffd1f6f8,
+ 0xffd1f6f8,0xffcbf3f8,0xffc4f1f7,0xffbdeef8,0xffbcecf8,0xffc4eef7,0xffbde7ef,0xff8bb28d,0xffbdd257,0xffcbde57,0xfea5be52,0x6f3f4617,0x18000000,0x2000000,
+ 0xffffff,0x3000000,0x20000000,0x9c737f2a,0xfeb7cb4f,0xffc0d453,0xffc3d17b,0xffd6ddce,0xffebf3f3,0xffcdf2e9,0xffa5dcca,0xff578a67,0xff488959,0xff4e9a65,
+ 0xff82bda1,0xffe2fcfb,0xffe7ffff,0xffd8fafc,0xffd1f6f8,0xffccf3f8,0xffc4f1f7,0xffbdeef8,0xffb4eaf7,0xffb4e3ef,0xffb1d2ca,0xffc3d682,0xffcde062,0xffbfd45d,
+ 0xfb567f62,0x47000000,0x12000000,0x2000000,0xffffff,0x2000000,0x14000000,0x5720240c,0xfc9aaf56,0xffc9da6f,0xffd1df8a,0xffc1ce89,0xffc8d4c5,0xfff1f6f6,
+ 0xffd7e8e3,0xff4f895c,0xff237c30,0xff2a802a,0xff1b6c1a,0xff408557,0xff60977f,0xffc9f2f3,0xffe3fffe,0xffcff8fd,0xffc6f2f8,0xffbbedf5,0xffade2ee,0xff9dc9c4,
+ 0xffbacf8c,0xffd7e58c,0xffd2e27a,0xffa1bc6c,0xf92a677a,0x3d000000,0x11000000,0x2000000,0xffffff,0x2000000,0xf000000,0x3c000000,0xf2829c8b,0xffc7d58d,
+ 0xffd0de81,0xffbbcd51,0xffadbf65,0xffccd7c4,0xffd4eae5,0xff61af7f,0xff30933f,0xff378a34,0xff357b30,0xff24681e,0xff0d4508,0xff488165,0xffa3d5d1,0xffa8dcda,
+ 0xffbcedf2,0xffb6e8f1,0xff9fcac3,0xffadc678,0xffcddf70,0xffd7e688,0xffc4d48b,0xff87ad9d,0xf839778b,0x3a000000,0x11000000,0x2000000,0xffffff,0x1000000,
+ 0xf000000,0x40505440,0xdc98aeb9,0xffb6c6aa,0xffc0d06b,0xffb7cc3c,0xffb4c83c,0xffaebe61,0xffb4cdb6,0xff4f9770,0xff288037,0xff368638,0xff2f7530,0xff2b692b,
+ 0xff2f682a,0xff174f14,0xff05410c,0xff0c481b,0xff488177,0xffa3d0ca,0xffb2ca7b,0xffcee06f,0xffd1e370,0xffc7d87c,0xffa6c2a3,0xff8ab2b7,0xf8457e8c,0x3c000000,
+ 0x11000000,0x2000000,0xffffff,0x3000000,0x1a222512,0x7da8b17a,0xc4b3bec4,0xffb3c4c0,0xffa7b975,0xffb0c53d,0xffb4ca36,0xffaec439,0xffaabc69,0xff739c7c,
+ 0xff246f39,0xff368d4e,0xff337b3f,0xff2b642a,0xff2b6128,0xff2d622b,0xff245624,0xff19431a,0xff638b76,0xffafc985,0xffcdde74,0xffd4e477,0xffcadc73,0xffa4c38d,
+ 0xff96c3c7,0xff89b0b0,0xfb5c8b75,0x46121308,0x12000000,0x2000000,0xffffff,0xa000000,0x5f8d994c,0xc9c8d38b,0xabb9bfc0,0xffa7bcbf,0xffa6bab0,0xffa6b974,
+ 0xffadc23b,0xffb0c630,0xffabbf35,0xff9eb053,0xff4a6e43,0xff257740,0xff2f7547,0xff2a652f,0xff295c27,0xff295c29,0xff205220,0xff406133,0xffadc478,0xffcdde79,
+ 0xffd6e57c,0xffc9da77,0xffa4c38d,0xff8fc6cf,0xff8fc4d2,0xff7aa09c,0xfa819d4d,0x7f606b1d,0x17000000,0x2000000,0x3000000,0x26434a1f,0xbab5c268,0xefd2df8a,
+ 0x9fb6b9b1,0xe48ba6af,0xffa6bebf,0xffb3c9c3,0xffa6bb78,0xffa9be35,0xffadc22a,0xffaabe2a,0xff9aae3f,0xff5a7946,0xff2a6b3c,0xff286937,0xff2a6029,0xff2a5927,
+ 0xff4e702f,0xffadc067,0xffd6e581,0xffd7e682,0xffcadb7b,0xffa4c390,0xff94cad5,0xff8fcee7,0xff82bbcf,0xff6a8f83,0xf894a82b,0xc9829320,0x2f343b0c,0x4000000,
+ 0xa000000,0x6e8b9746,0xf1cddc7a,0xefd1dd8e,0xa8b4bb8b,0x8e647c88,0xff95b5b9,0xffb2ccce,0xffb3cec8,0xffa5bb6a,0xffa6bc2e,0xffa8be25,0xffa6bc25,0xff9cb236,
+ 0xff68852f,0xff316227,0xff366129,0xff789143,0xffbdcf73,0xffd8e887,0xffd8e887,0xffcede80,0xffadc88c,0xff94cbd2,0xff8bcfe9,0xff7bc0de,0xff6da7be,0xfa6f8e64,
+ 0xf48c9d22,0xf48ea21b,0x796c7a14,0xa000000,0x16141414,0xb5adbc5f,0xfed8e78a,0xf3d2dd91,0xb0adb96d,0x48252e36,0xc5779bab,0xff9cbdc1,0xffb1d1d4,0xffaccbb8,
+ 0xff9fb867,0xffa2b72e,0xffa4bc22,0xffa2b820,0xff9ab022,0xff889b36,0xff98a759,0xffc7d57f,0xffd8e68c,0xffd9e88c,0xffcbdc82,0xffadc78d,0xff9acac4,0xff92d3e9,
+ 0xff70bdde,0xff66aece,0xff5b96b2,0xd8748c37,0xf686981b,0xfe889b17,0xc17e8f14,0x16050500,0x22353535,0xdcc2d173,0xffdce991,0xfcd8e68d,0xb5afbb6f,0x310a0a0a,
+ 0x583e5863,0xdc79a1af,0xff9cc0c4,0xff9ac7d1,0xff8dc0be,0xff96b470,0xff9db42d,0xffa5ba2a,0xffafc24c,0xffc0cd78,0xffcbd496,0xffcbd695,0xffd0db91,0xffc6d685,
+ 0xffa4c191,0xff95c7c9,0xff96d3e5,0xff8ccce3,0xff71b3d1,0xff619fc0,0xb73e7593,0xc5768617,0xfd889c14,0xff819414,0xe67f9212,0x271a1d0c,0x2d5c5c5c,0xeacbd97f,
+ 0xffdde995,0xffdde995,0xd7becb79,0x4e666e3b,0x2f191a13,0x6c455e6e,0xdf739bac,0xff81acb8,0xff79acb3,0xff8bad9a,0xff9baf6c,0xffb6c46e,0xffcbd68d,0xffd0da9c,
+ 0xffd0d99c,0xffcad494,0xffb7c47a,0xff96ac6c,0xff85ac94,0xff86babd,0xff85bdd1,0xff7bb4c8,0xff669eb9,0xbf457c9c,0x7941522e,0xdf7e9114,0xff819512,0xff7b8e12,
+ 0xf27c8f10,0x37272a0f,0x2f696969,0xe7cad77f,0xffddea99,0xffdeeb9a,0xf8d4e18c,0xb4abb66b,0x75858f47,0x74767f40,0x9b728254,0xe27e987a,0xffa7bb7f,0xffb7c980,
+ 0xffc6d389,0xffd1db9a,0xffcfd89d,0xffd0d99e,0xffc8d28c,0xffb6c469,0xff9fb239,0xff8da425,0xff87a034,0xff819d48,0xff709372,0xff658e7b,0xc658795d,0x94586b1e,
+ 0xc0728210,0xfa819512,0xff7b8d10,0xff77890f,0xf07a8d0d,0x39282d0f,0x24676767,0xd0bfcd75,0xffdfeb9c,0xffe0ec9e,0xffe0ec9e,0xf8d4e28e,0xebcad781,0xe9c9d681,
+ 0xe8c4d17c,0xf6d0dd8b,0xffdde89a,0xffdfeb9e,0xffdeea9e,0xffdbe69c,0xffc8d38f,0xffb7c47c,0xffa7b75b,0xff97ab2d,0xff8fa513,0xff8da313,0xff8ca013,0xff8a9e14,
+ 0xfc869b19,0xf1819616,0xef829610,0xef829510,0xfa809310,0xff7a8d0f,0xff778a0f,0xff74860d,0xdd7a8d0c,0x2c252a0a,0x114d4d4d,0x88a4b05d,0xefd0dd8a,0xffe1eca1,
+ 0xffe1eca1,0xffe1eca1,0xffe0eb9f,0xffe1eca1,0xffe1eca1,0xffe1eca1,0xffe0eca0,0xffe0eb9f,0xfcd6e294,0xf7becd81,0xf49aaf78,0xf77e9976,0xfb6d8c60,0xfc708d3d,
+ 0xfc809922,0xfe8a9f16,0xff8a9e12,0xff879b12,0xff859912,0xff839712,0xff80930f,0xff7e900f,0xff7a8d0f,0xff778a0d,0xff74860d,0xf5798c0d,0x9573840c,0x13171b00,
+ 0x4000000,0x1f464a25,0x8ba2ad5d,0xe2c8d581,0xf9d7e496,0xfedfeaa0,0xffe2eda4,0xfee0eba2,0xfedee99f,0xfbdae599,0xf6d7e394,0xe1c4d07d,0xb5a5b162,0x8885904b,
+ 0x5d4f542b,0x43000000,0x45000000,0x63374008,0x8d5e6b0a,0xba72830c,0xe482950f,0xf8869a10,0xfb839810,0xfe809410,0xfe7d900f,0xff7a8d0f,0xfe798b0f,0xfb798b0d,
+ 0xea7a8d0c,0x9772820c,0x20343b03,0x4000000,0xffffff,0x4000000,0x13000000,0x6c98a456,0xb8b6c36f,0xdac4d17e,0xe2c7d482,0xe6cbd887,0xd1becb78,0xc1b8c571,
+ 0x99a9b664,0x507a8443,0x25414720,0x1d414727,0x12000000,0x11000000,0x12000000,0x14000000,0x20282d03,0x2b2a3103,0x54576408,0x9d76870d,0xc57c8f0d,0xd67d900d,
+ 0xeb7f920d,0xe87d900d,0xe17c8e0d,0xc2798b0a,0x756c7c08,0x13000000,0x4000000,0xffffff,0xffffff,0xffffff,0x3000000,0x12626a3b,0x27636b36,0x558f9a50,
+ 0x6a9aa558,0x6194a053,0x3c727a3f,0x347f8a47,0x1952592d,0x7000000,0x3000000,0x2000000,0x1000000,0x2000000,0x2000000,0x2000000,0x3000000,0x3000000,
+ 0x8000000,0x193c4503,0x365f6d0d,0x3e56620c,0x666a7a08,0x706d7d08,0x5b68770a,0x29495303,0x12434e03,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x3000000,0x6000000,0x8000000,0x93f4229,0x4000000,0x3000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x4000000,0x9242a00,0x8000000,0x6000000,0x3000000,0x1000000,0xffffff,
+ 0xffffff,0xffffff
+};
+
+static const QRgb ParaShoot_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff03035a,0xff03035e,0xff03035f,0xff03035e,
+ 0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,
+ 0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035e,0xff03035b,0xff030354,0xff030249,0xff02023c,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff03035e,0xff688eb6,0xff6187b3,0xff5981af,0xff567fae,0xff567fae,0xff567fae,0xff567fae,0xff567fae,0xff809fc2,0xff95aecc,0xffaabed6,0xffaabed5,0xffa9bed5,
+ 0xff8aa5c5,0xff7f9cbf,0xff567dab,0xff567dab,0xff567dab,0xff567dac,0xff567eac,0xff567ead,0xff567eac,0xff557ba8,0xff537096,0xff4b5b78,0xff020126,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff03035f,0xff6087b3,0xff4971a8,0xff35629f,0xff305e9c,0xff2f5d9c,0xff7090bb,0xffbecce0,0xfffefefe,0xfffefefe,
+ 0xfffdfdfd,0xfffcfcfc,0xfffafafa,0xfff8f8f8,0xfff6f6f6,0xfff2f2f2,0xffefefef,0xffb1bfd0,0xff7690b4,0xff3a6299,0xff2e5a94,0xff2f5b98,0xff2f5c99,0xff2e5993,
+ 0xff2c4d7d,0xff26334b,0xff010111,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff04035f,0xff5b83b1,0xff3966a2,0xff1f5295,0xff5278ae,0xffd3ddea,
+ 0xfffefefe,0xffe7e7e7,0xffdedede,0xffdedede,0xfff4f4f4,0xfff3f3f3,0xffdcdcdc,0xffdadada,0xffbbbbbb,0xffb8b8b8,0xffcacaca,0xffcbcbcb,0xffdadada,0xffcfd2d6,
+ 0xff7990ae,0xff224e89,0xff164788,0xff164686,0xff13376d,0xff0c1a34,0xff000006,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff040361,0xff5c83b2,
+ 0xff3565a2,0xff8da7ca,0xfff6f6f6,0xffaeaeae,0xff868686,0xff8e8e8e,0xff9e9e9e,0xff969696,0xff7f7f7f,0xff7f7f7f,0xff8e8e8e,0xff9d9d9d,0xffacacac,0xffb3b3b3,
+ 0xff999999,0xff8f8f8f,0xff757575,0xff848484,0xffadadad,0xffadb6c1,0xff1c4782,0xff103f7e,0xff0d326a,0xff051430,0xff000003,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff040362,0xff6188b5,0xffb4c5dc,0xffd8d8d8,0xff868686,0xffaeaeae,0xffeeeeee,0xfffefefe,0xfffefefe,0xff979797,0xffa7a7a7,0xffbfbfbf,
+ 0xff7f7f7f,0xffcfcfcf,0xffffffff,0xfffefefe,0xfffdfdfd,0xfffbfbfb,0xffefefef,0xffc2c2c2,0xff7e7e7e,0xff747474,0xff949ba5,0xff123b76,0xff0e3167,0xff05142f,
+ 0xff000002,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040364,0xff9fb6d3,0xffd5d5d5,0xff8b8b8b,0xffd5d5d5,0xfffefefe,0xffffffff,0xffffffff,
+ 0xffb7b7b7,0xff979797,0xffffffff,0xffffffff,0xffe7e7e7,0xff878787,0xffcfcfcf,0xffffffff,0xffffffff,0xfffefefe,0xfffcfcfc,0xfff7f7f7,0xffe9e9e9,0xffa2a2a2,
+ 0xff616161,0xff425772,0xff113264,0xff071530,0xff000002,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff05046b,0xffe5e6e9,0xff989898,0xffdddddd,
+ 0xfffefefe,0xffffffff,0xffffffff,0xffefefef,0xff7f7f7f,0xffefefef,0xffffffff,0xffffffff,0xffffffff,0xffe7e7e7,0xff7f7f7f,0xffe7e7e7,0xffffffff,0xfffefefe,
+ 0xfff8f8f8,0xffededed,0xffdbdbdb,0xffc2c2c2,0xff878787,0xff494c4f,0xff112f59,0xff081630,0xff000002,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff08057c,0xffb4b4b4,0xffc5c5c5,0xfffdfdfd,0xffffffff,0xffffffff,0xffffffff,0xffafafaf,0xffbfbfbf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffbfbfbf,0xff979797,0xfffefefe,0xfff9f9f9,0xffe9e9e9,0xffd3d3d3,0xffbbbbbb,0xffa9a9a9,0xff9a9a9a,0xff88888a,0xff2c456b,0xff0a1732,0xff000003,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080574,0xffadadad,0xfffbfbfb,0xfffefefe,0xffffffff,0xffffffff,0xffefefef,0xff7f7f7f,0xffefefef,0xffffffff,
+ 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xffffffff,0xff8e8e8e,0xffcccccc,0xffececec,0xffd2d2d2,0xffb3b6b9,0xff4f6a8c,0xff47658b,0xff3d4d63,0xff3c4d66,
+ 0xff2b4874,0xff0c1a35,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07045c,0xffdcdcdc,0xfffcfcfc,0xfffefefe,0xffffffff,0xffffffff,
+ 0xffc7c7c7,0xffa7a7a7,0xfffefefe,0xfffdfdfd,0xfffafafa,0xfff9f9f9,0xfff8f8f8,0xfff9f9f9,0xfffbfbfb,0xffcccccc,0xff888888,0xffd9d9d9,0xffbbbbbb,0xff687f9b,
+ 0xff183d71,0xff2c5a96,0xff13273f,0xff234777,0xff23477b,0xff0d1c38,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07045b,0xfff5f5f5,
+ 0xfff9f9f9,0xfffcfcfc,0xfffefefe,0xfffefefe,0xffa6a6a6,0xffcecece,0xfffafafa,0xfff2f2f2,0xffe9e9e9,0xffe2e2e2,0xffe0e0e0,0xffe2e2e2,0xffe8e8e8,0xffeaeaea,
+ 0xff7c7c7c,0xffa3a3a3,0xff9ea3a9,0xff2a5489,0xff204a85,0xff386dad,0xff0e1b2b,0xff3465a3,0xff284e86,0xff101f3a,0xff000003,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff08056b,0xffededed,0xffeeeeee,0xfff1f1f1,0xfff6f6f6,0xfffbfbfb,0xff858585,0xffe8e8e8,0xffebebeb,0xffd9d9d9,0xffc8c8c8,0xffbdbdbd,
+ 0xffbababa,0xffbbbbbb,0xffc0c0c0,0xffc3c3c3,0xff909090,0xff747474,0xff70839b,0xff2d5990,0xff2d5c9b,0xff37659d,0xff172c43,0xff3d70af,0xff2d548b,0xff11203c,
+ 0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080572,0xffdfdfdf,0xffdbdbdb,0xffdadada,0xffe3e3e3,0xffdfdfdf,0xff7f7f7f,0xffe4e4e4,
+ 0xffcfcfcf,0xffbebebe,0xff8695a7,0xff5d7491,0xff6f8199,0xff78889c,0xff9299a2,0xffa4a4a4,0xff929292,0xff818181,0xff466994,0xff2e5b96,0xff3b6eaf,0xff2e537e,
+ 0xff28456a,0xff4275b5,0xff32578f,0xff13223e,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080571,0xffaebccb,0xff889fbc,0xffa0acbd,
+ 0xffcccccc,0xffb9b9b9,0xff858585,0xffc8c8c8,0xffacb0b6,0xff5d7da2,0xff3f6ba1,0xff376399,0xff2f5992,0xff406ea5,0xff3e699e,0xff426998,0xff667f9d,0xff6f747a,
+ 0xff406ca4,0xff2b5796,0xff497fc0,0xff253f5e,0xff395f8f,0xff477aba,0xff355c93,0xff142440,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff040349,0xff8ca9c9,0xff658ebf,0xff4d79af,0xff7590af,0xffadadad,0xff8b8b8b,0xffa2a9b2,0xff325788,0xff4776b0,0xff4d81bd,0xff497bba,0xff3463a2,0xff5084c3,
+ 0xff4e81bf,0xff4c7eba,0xff4979b4,0xff121e2c,0xff4a7dbb,0xff305ea0,0xff5389cc,0xff18283b,0xff4b7eba,0xff4c7fbf,0xff3a6097,0xff162541,0xff000003,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff05034c,0xff6f7e8f,0xff6f9bcf,0xff5b8cc5,0xff4e7eb4,0xff7690b0,0xffa2a8ae,0xff4e76a5,0xff37639e,0xff4778b7,
+ 0xff598fcf,0xff588ecf,0xff3364a5,0xff5a90d2,0xff5990d0,0xff598fd0,0xff5487c3,0xff19293a,0xff4b7ebf,0xff3f72b3,0xff5284c0,0xff1b2c3f,0xff5990d1,0xff5386c5,
+ 0xff3e659b,0xff182743,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07057a,0xff738293,0xff4d617a,0xff6396d3,0xff5d8fcc,0xff5787c1,
+ 0xff304b6b,0xff2a425d,0xff578bca,0xff386aab,0xff5f95d5,0xff6198d8,0xff3a6cae,0xff5d92d4,0xff6197d8,0xff6198d9,0xff5787c1,0xff21344b,0xff477abc,0xff5084c5,
+ 0xff466e9d,0xff314d6e,0xff6096d6,0xff598bca,0xff436a9f,0xff1a2945,0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07057e,0xffa5c3e6,
+ 0xff4f647d,0xff384f6c,0xff659ad8,0xff649ad9,0xff6297d4,0xff293f58,0xff436892,0xff4d80c1,0xff4f83c4,0xff679ede,0xff4679bb,0xff5a8fd0,0xff689ede,0xff679ede,
+ 0xff5987be,0xff2a405a,0xff3f72b3,0xff5f95d6,0xff39577a,0xff476e9a,0xff669ddc,0xff5f92cf,0xff476ea4,0xff1c2a47,0xff000003,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff070580,0xffabcaec,0xff82b0e4,0xff3a526f,0xff334c6a,0xff6ca1df,0xff6ea3e3,0xff6699d4,0xff213245,0xff5885b9,0xff4073b5,0xff689fde,
+ 0xff5388c8,0xff578ccd,0xff6ea5e4,0xff6ea5e4,0xff5581b2,0xff314a67,0xff3e71b3,0xff6ea5e4,0xff273b52,0xff5f8fc6,0xff6da3e2,0xff6598d5,0xff4c73a8,0xff1e2c49,
+ 0xff000003,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080582,0xffb1cef0,0xff89b8ec,0xff78abe7,0xff364f6c,0xff354e6b,0xff72a8e6,0xff74abe9,
+ 0xff5e8bbd,0xff233446,0xff5789c7,0xff5387c9,0xff6096d6,0xff5388c9,0xff74abe9,0xff74abea,0xff547caa,0xff345072,0xff4f83c5,0xff71a6e3,0xff1f2e3f,0xff74abea,
+ 0xff73aae8,0xff6b9eda,0xff5177ad,0xff1f2e4b,0xff000004,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080584,0xffb5d3f4,0xff8ebdf1,0xff7fb4f0,
+ 0xff79aeeb,0xff38516e,0xff38516e,0xff78aeeb,0xff7ab1ef,0xff4f739c,0xff334a64,0xff497dbe,0xff679ddd,0xff4e83c5,0xff7ab1ef,0xff7ab1ef,0xff51759e,0xff345277,
+ 0xff6197d7,0xff618dbe,0xff354c67,0xff7ab1ef,0xff79b0ed,0xff70a3df,0xff557bb0,0xff212f4d,0xff000004,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff080585,0xffbad6f6,0xff93c1f4,0xff83b9f2,0xff7fb6f2,0xff7cb3ee,0xff3b536f,0xff3b536f,0xff7cb3ee,0xff7eb6f2,0xff3b536e,0xff3f6085,0xff5288c7,0xff487dbe,
+ 0xff7fb6f2,0xff7fb6f2,0xff4e7096,0xff33557f,0xff72a9e7,0xff4e7096,0xff4e7096,0xff7eb5f2,0xff7eb4f0,0xff75a7e2,0xff587eb3,0xff22304e,0xff000004,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff080584,0xffb7d1f0,0xff8eb9eb,0xff80b0e9,0xff7bace7,0xff7bade7,0xff78aae4,0xff384f6a,0xff384f6a,0xff79aae4,
+ 0xff74a5dd,0xff293a4d,0xff3b6190,0xff4779b8,0xff74a6e2,0xff7aace8,0xff446082,0xff2f527e,0xff7aace7,0xff354b64,0xff628ab8,0xff7aade8,0xff79ace6,0xff709fd9,
+ 0xff5578ac,0xff212f4d,0xff000004,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff070578,0xffa1b5d2,0xff7898c5,0xff658abd,0xff6085ba,0xff5f85ba,
+ 0xff5f85ba,0xff5e82b7,0xff2c3d55,0xff2c3d55,0xff5e83b7,0xff5373a1,0xff43618a,0xff355b91,0xff5277ad,0xff5f85ba,0xff4c6fa0,0xff3a5e91,0xff5e85ba,0xff5779a9,
+ 0xff5e82b7,0xff5f85ba,0xff5f84b9,0xff577baf,0xff435d8e,0xff1c2844,0xff000004,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff060466,0xff7282a2,
+ 0xff45516a,0xff2d3b58,0xff263553,0xff253452,0xff253452,0xff253452,0xff253350,0xff172033,0xff24324f,0xff253452,0xff253452,0xff162543,0xff1a2845,0xff253452,
+ 0xff1d2c48,0xff1d2b48,0xff253452,0xff253452,0xff253452,0xff253452,0xff253351,0xff23304e,0xff1c2844,0xff0e1425,0xff000000,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff040356,0xff03022e,0xff010112,0xff000008,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,
+ 0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000004,0xff000000,
+ 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Rotation_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x35000000,0x38000000,0x3b040404,0x4d535353,0x5a828282,0x3d3f3f3f,0x2d060606,0x24070707,0x1b090909,0x140d0d0d,0xc151515,0x7242424,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x6e647e80,0xab7da6a7,0xd387b7b9,0xeb8bc0c2,0xf98dc6c8,0xfe8ac8ca,0xf97ec0c2,0xed6fb6b7,0xd8629ea2,0xcc90aeb0,0xa1849698,0x460b0b0b,0x390d0d0d,0x2b0c0c0c,
+ 0x1f101010,0x130d0d0d,0xb171717,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x84759496,0xd091b9bb,0xfaabcecf,0xffa9d0d2,0xffa1ccce,0xff9acacc,0xff90c6c8,0xff89c4c6,0xff7fc1c3,0xff74bfc1,0xff69bcbe,0xff60b9bc,
+ 0xfd88c1c4,0xe78bb4b7,0xa0395f62,0x4f101010,0x3a121212,0x28131313,0x19141414,0xe121212,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x545f7474,0xc08eb5b6,0xfaafcfd1,0xffafcfd0,0xffadcccd,0xffa3c8ca,0xff9ac4c6,0xff93c0c2,0xff8abfbf,0xff80bbbd,
+ 0xff79babc,0xff6fb8bb,0xff65b8ba,0xff5cb6b9,0xff50b2b5,0xff69a2a7,0xfe76b0b5,0xd2377579,0x7f293d3d,0x47121212,0x2f101010,0x1d121212,0xf111111,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x73728f8f,0xda9fc1c3,0xffb6d1d3,0xffb0cdce,0xffaac6c8,0xffa2bfc1,0xff96b8b9,
+ 0xff8db3b5,0xff84adaf,0xff7cabac,0xff76aaac,0xff6fadae,0xff6ab1b3,0xff63b4b5,0xff58b4b6,0xff4eadb3,0xff61a1a6,0xff4f8a8f,0xff5f9ea3,0xe82d777c,0x9d2a4a4c,
+ 0x50131313,0x33141414,0x1e111111,0xf111111,0x7242424,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x736f8f8f,0xe2a1c3c5,0xffb5cfd1,0xffaec9cb,
+ 0xffa2bec0,0xff98b4b5,0xff8ba6a8,0xff7e9a9d,0xff739395,0xff6b8c8e,0xff658c8d,0xff639092,0xff70a1a4,0xff88b3b6,0xff5aadaf,0xff53adb3,0xff4ba9b2,0xff40a0a8,
+ 0xff5c9398,0xff4a8488,0xff418d95,0xef2b7378,0xa2294449,0x53161616,0x33141414,0x1e1a1a1a,0xe121212,0x62b2b2b,0x3000000,0xa000000,0x16000000,0x545c7174,
+ 0xda9abec2,0xffb2cfd2,0xffacc8cb,0xffa2bdc0,0xff91abae,0xff80989b,0xff788e90,0xff9dadae,0xffa9babb,0xffb6c9ca,0xffc0d5d7,0xffb9d2d4,0xffb3cdce,0xff8fb4b7,
+ 0xff52a4a7,0xff4da8b1,0xff45a6ad,0xff3b9da6,0xff6fa2a7,0xff5b9095,0xff498086,0xff297e86,0xec2a676e,0x91243537,0x4e141414,0x2f161616,0x18151515,0xb171717,
+ 0x6000000,0x11000000,0x23000000,0xbf88b0b4,0xffafced2,0xffaac9cd,0xffa2bfc3,0xff92adb0,0xffb0c7c9,0xffc0d5d6,0xffcadcde,0xffd1e1e1,0xffd4e3e4,0xffd2e3e4,
+ 0xffcedfe1,0xffc7dcdd,0xffbfd6d7,0xff4c8b8f,0xff4c9ca2,0xff47a2ab,0xff40a0ab,0xff399aa4,0xff6aa2a9,0xff6b9da1,0xff598c91,0xff427d83,0xff28767e,0xdd2a585d,
+ 0x6c151515,0x45161616,0x27141414,0x120e0e0e,0xb000000,0x1b000000,0x846f8e93,0xfaa3c7cd,0xffa5c9cd,0xff9fc2c6,0xff92b2b6,0xff7f9a9e,0xff667e80,0xffd0dfe0,
+ 0xffd9e6e6,0xffe0eaea,0xffe2eced,0xffe0eced,0xffdbe8e9,0xffd3e3e3,0xffa4bcbe,0xff43868c,0xff44969f,0xff429da8,0xff3a9ea8,0xff3796a1,0xff45949c,0xff77a6a9,
+ 0xff65979b,0xff5c888b,0xff296c73,0xfc276b74,0xbb284146,0x5f151515,0x39161616,0x1d121212,0x12000000,0x26000000,0xd085afb6,0xff9dc7cd,0xff9dc3c9,0xff94b8be,
+ 0xff84a4aa,0xff6d898d,0xff687b7e,0xffd9e6e8,0xffe4eded,0xffecf2f3,0xffeef3f4,0xffebf3f3,0xffe4eef0,0xffdbe8ea,0xff628a8e,0xff3f848c,0xff3c919d,0xff3796a2,
+ 0xff3396a2,0xff36929d,0xff45919a,0xff7eabaf,0xff6e9ea2,0xff5c8e92,0xff2b646c,0xff28676e,0xe9285659,0x79171717,0x4b141414,0x2a121212,0x19000000,0x6e59747b,
+ 0xfa93c0c7,0xff98c2ca,0xff92bbc3,0xff87acb3,0xff73959b,0xff5c767b,0xffd2e2e2,0xffdfeaeb,0xffebf2f3,0xfff4f7f8,0xfff8fafb,0xfff4f8f8,0xffebf2f3,0xffe1ebec,
+ 0xff356f76,0xff37848e,0xff348e99,0xff2c909d,0xff308f9c,0xff328c98,0xff72a3a9,0xff83aeb2,0xff75a4a8,0xff639598,0xff2e5e65,0xff295f66,0xfc266069,0xb0233437,
+ 0x5e161616,0x37131313,0x21000000,0xab6b969e,0xff8ebec7,0xff8bbbc3,0xff84b1ba,0xff779fa7,0xff62858c,0xffaabcbe,0xffd5e4e5,0xffe3eded,0xffedf4f4,0xfff7fafa,
+ 0xffffffff,0xfff8fafa,0xffedf4f4,0xff8fa8ab,0xff30727c,0xff2e808e,0xff288795,0xff278795,0xff2b8795,0xff2f8491,0xff88aeb2,0xff85b0b3,0xff7aa7ab,0xff69999e,
+ 0xff305960,0xff2b5a61,0xff265e66,0xd6264448,0x71171717,0x45121212,0x29000000,0xd370a1ac,0xff83b9c4,0xff80b4be,0xff78a8b2,0xff68939c,0xff54767d,0xffc4d8da,
+ 0xffd3e2e3,0xffe0ecec,0xffebf2f2,0xfff3f8f8,0xfff7fafb,0xfff4f8f8,0xffebf2f3,0xff2b656f,0xff2a7481,0xff257d8e,0xff1f808e,0xff23818e,0xff277e8d,0xff2c7c87,
+ 0xff8fb6ba,0xff86b1b4,0xff7aa8ab,0xff6c9b9f,0xff32545a,0xff2e545b,0xff285961,0xed264d51,0x80181818,0x4f131313,0x2f000000,0xeb70a7b3,0xff79b3bf,0xff75aeb9,
+ 0xff6c9fa9,0xff5b858f,0xff81989c,0xffc1d7d8,0xffd0e1e1,0xffdbe8e9,0xffe5eeef,0xffebf2f3,0xff98a8ab,0xffd7e1e3,0xffe4edee,0xff276c7a,0xff237585,0xff1b7787,
+ 0xff1e7888,0xff1e7585,0xff227382,0xff5c8f98,0xff8db6b8,0xff84b0b3,0xff7aa8ac,0xff6d9da2,0xff345056,0xff2f5056,0xff2a555c,0xf7264f57,0x8d191919,0x5a141414,
+ 0x34000000,0xf96da9b8,0xff6dacba,0xff69a5b3,0xff5f95a1,0xff507b85,0xffa7c1c3,0xffbcd3d6,0xffc9dbdd,0xffd2e3e4,0xffdbe8e9,0xffb3c2c5,0xff28525c,0xff29606c,
+ 0xff64929d,0xff206f7f,0xff187283,0xff1a7183,0xff1a6f81,0xff1a6b7c,0xff1f6978,0xff92b9bb,0xff8ab3b7,0xff82afb2,0xff79a8ab,0xff6e9ea2,0xff364c51,0xff324d53,
+ 0xff2b5157,0xfc265259,0x961a1a1a,0x61181818,0x37000000,0xfe65a7b7,0xff64a6b6,0xff5f9ead,0xff558d9b,0xff47737e,0xffa7c5c7,0xffb4ced0,0xffc0d6d9,0xffc9dbdd,
+ 0xffcfe1e2,0xff26535e,0xff28616e,0xff266a7a,0xff1f6e7f,0xff166e80,0xff166e80,0xff548d9a,0xff186677,0xff196071,0xff87abae,0xff8db6b9,0xff87b2b4,0xff7facb0,
+ 0xff77a6a9,0xff749c9f,0xff36494d,0xff324b50,0xff2c4e56,0xfe25515b,0x9a1a1a1a,0x66171717,0x39040404,0xf9599daf,0xff5a9fb1,0xff5596a8,0xff4c8795,0xff3e6d78,
+ 0xffa0c0c3,0xffabc8ca,0xffb6cfd2,0xffbdd5d7,0xff5c7b82,0xff265d6b,0xff25687a,0xff206d81,0xff176e81,0xff166c7f,0xff166a7d,0xffa9c7c9,0xff9ab9be,0xff769aa1,
+ 0xff8fb7ba,0xff88b3b6,0xff83afb2,0xff7babae,0xff74a5a8,0xff6d7e80,0xff37484c,0xff334a4f,0xff2c4c52,0xfc244a53,0x9c1a1a1a,0x66171717,0x38050505,0xed4d8fa2,
+ 0xff5099ac,0xff4c91a4,0xff448091,0xff396a77,0xff97bbbd,0xffa3c2c5,0xffabc8cb,0xffb1cccf,0xff235362,0xff216172,0xff1e687e,0xff176a80,0xff166a7e,0xff15667b,
+ 0xff156175,0xff9fc1c4,0xff97bcbf,0xff90b8bb,0xff8ab4b7,0xff83afb3,0xff7eacb0,0xff79a9ab,0xff71a3a7,0xff394649,0xff39484c,0xff32494e,0xff2c4c53,0xf924444b,
+ 0x98191919,0x64141414,0x35050505,0xd7447d90,0xff4691a7,0xff428a9f,0xff3d7b8e,0xff336675,0xff8fb4b8,0xff99bec1,0xffa0c1c3,0xff8ca6ab,0xff215667,0xff1c6274,
+ 0xff19667b,0xff19677d,0xff16637b,0xff166074,0xff7097a1,0xff96bbbe,0xff8fb7ba,0xff88b4b7,0xff84b1b3,0xff7eadaf,0xff7aa9ac,0xff75a6a9,0xff7a9799,0xff3b4649,
+ 0xff38474c,0xff32494f,0xff294851,0xf1233d44,0x931a1a1a,0x5f151515,0x30050505,0xb5366775,0xff3d88a2,0xff39829a,0xff36778c,0xff2e6376,0xff85aeb1,0xff8fb7b9,
+ 0xff96bcbe,0xff6a878f,0xff1e5769,0xff1c6073,0xff1b6478,0xff196378,0xff185f74,0xff175a6e,0xff92b9bb,0xff8db6b8,0xff87b3b6,0xff82afb2,0xff7eadb0,0xff7aa9ad,
+ 0xff77a6aa,0xff71a2a6,0xff3c4346,0xff3c4649,0xff37474c,0xff30474e,0xff274650,0xe121353b,0x89181818,0x59141414,0x2a060606,0x81294953,0xfb357e99,0xff337c97,
+ 0xff30738b,0xff2c6377,0xff79a6aa,0xff85afb3,0xff8cb6b8,0xff315966,0xff225869,0xff215e72,0xff206177,0xff1c5f74,0xff1b5c72,0xff467483,0xff89b4b7,0xff85b1b4,
+ 0xff81afb2,0xff7eacaf,0xff7aaaad,0xff76a7a9,0xff73a4a7,0xff545a5b,0xff3e4447,0xff3b464a,0xff36474d,0xff2d464f,0xfd25434c,0xc51f2a2d,0x7d181818,0x4f131313,
+ 0x22080808,0x420c0c0c,0xd92c647a,0xff2d7593,0xff2a6d88,0xff276177,0xff6f9399,0xff78a6aa,0xff82adb2,0xff365b69,0xff265769,0xff265d72,0xff256074,0xff245e73,
+ 0xff225a6f,0xff7e9fa5,0xff82afb2,0xff7fadb0,0xff7cabaf,0xff79a8ac,0xff75a6aa,0xff72a3a7,0xff6ea0a4,0xff3f4446,0xff3e4649,0xff3a474b,0xff33464c,0xff2a444c,
+ 0xf2223940,0x9d1a1a1a,0x6d151515,0x420f0f0f,0x1a0a0a0a,0x350e0e0e,0x9d244b57,0xfb256b88,0xff246985,0xff236078,0xff456d7c,0xff6c9b9f,0xff76a5a8,0xff69858d,
+ 0xff2b5769,0xff2a5d70,0xff295e73,0xff295d72,0xff295a6e,0xff7eacb0,0xff7cabaf,0xff78a9ad,0xff76a6a9,0xff74a5a9,0xff71a2a6,0xff6ca0a4,0xff689b9e,0xff6b9395,
+ 0xff3b4549,0xff36454c,0xff2d434c,0xfd254049,0xd31f2c30,0x89181818,0x5c131313,0x350e0e0e,0x130d0d0d,0x280d0d0d,0x490e0e0e,0xd1215669,0xff1e6581,0xff1e5e7a,
+ 0xff21576d,0xff5c8e93,0xff68999e,0xff74949a,0xff2e5768,0xff2f5c6d,0xff305e72,0xff2f5d71,0xff77959d,0xff76a7ab,0xff75a6a9,0xff73a5a8,0xff7a9fa3,0xff7b969a,
+ 0xff788a8d,0xff4e5558,0xff3f474a,0xff3d474b,0xff36454b,0xff30434b,0xff28404b,0xec20343a,0x9e1b1b1b,0x73161616,0x49111111,0x280d0d0d,0xc151515,0x1d121212,
+ 0x36131313,0x7b193339,0xe71a556a,0xff1c5b77,0xff20576f,0xff486b7a,0xff588a8f,0xff619497,0xff2e5465,0xff30596a,0xff325c6e,0xff335d6f,0xff718d95,0xff516d7b,
+ 0xff375663,0xff39515c,0xff3b4e56,0xff3d4b52,0xff3e4b50,0xff3e4a4e,0xff3b484d,0xff38464e,0xff32434c,0xff29404b,0xf522383f,0xbe1e2528,0x83171717,0x5b141414,
+ 0x350e0e0e,0x1c090909,0x7242424,0x120e0e0e,0x26141414,0x43131313,0x97173a46,0xee1a5167,0xff1c5670,0xff21526a,0xff507981,0xff508389,0xff638089,0xff315567,
+ 0xff335a6b,0xff355b6c,0xff385b6c,0xff395a69,0xff3b5765,0xff3c555f,0xff3d515b,0xff3d4e56,0xff3c4c53,0xff394951,0xff364850,0xff2f434c,0xff29404b,0xf8233841,
+ 0xcc1e282c,0x8e191919,0x66141414,0x42131313,0x250e0e0e,0x120e0e0e,0x3000000,0xb171717,0x18151515,0x2d111111,0x4b141414,0x9e193642,0xea1a4a5f,0xff1c4f6a,
+ 0xff1f4e64,0xff3c6e75,0xff46787e,0xff2d5164,0xff315365,0xff345668,0xff365868,0xff375666,0xff395563,0xff3a5360,0xff3a505d,0xff384d57,0xff354a55,0xff324750,
+ 0xff2d444f,0xff273f4b,0xf521363f,0xcc1e282c,0x921a1a1a,0x6c151515,0x4b111111,0x2d111111,0x170b0b0b,0xa000000,0x1000000,0x5000000,0xe121212,0x1c121212,
+ 0x31151515,0x4e171717,0x8b182c33,0xdb194251,0xfc1c4b64,0xff1f4a62,0xff39666d,0xff386a70,0xff2b4e60,0xff2d4f61,0xff305062,0xff325161,0xff33505e,0xff324d5c,
+ 0xff324b59,0xff2f4855,0xff2c4653,0xff28414e,0xfd243d49,0xeb1f323a,0xbc1e2526,0x8e191919,0x6c151515,0x4d111111,0x30101010,0x1b090909,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xf111111,0x1d121212,0x31151515,0x4b141414,0x68161616,0xb719333e,0xe81c404f,0xfc1c465b,0xff5b7984,0xff50727b,0xff25485c,
+ 0xff27495a,0xff29495a,0xff294658,0xff294757,0xff274252,0xff264251,0xfd223f4c,0xf1213640,0xd11e2b30,0x9d1c1c1c,0x82181818,0x66141414,0x4a111111,0x30101010,
+ 0x1c090909,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0x10202020,0x1d1a1a1a,0x2d171717,0x44171717,0x5c161616,0x75181818,
+ 0xad192b32,0xd41a3841,0xed39555f,0xfa6f858f,0xfd466371,0xfe214253,0xfc20404f,0xf81f3c4a,0xef1f3842,0xde1e3139,0xc31c282e,0x9b1a1a1a,0x87191919,0x73161616,
+ 0x5a141414,0x42131313,0x2d111111,0x1b090909,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x7242424,0xe121212,
+ 0x18151515,0x26141414,0x38171717,0x4a151515,0x5d161616,0x6f171717,0x7e181818,0x8b1a1a1a,0x9c3a3a3a,0xa9575757,0xa74c4c4c,0x9f3a3a3a,0x98353535,0x8a252525,
+ 0x7d181818,0x6c151515,0x5b141414,0x49111111,0x350e0e0e,0x250e0e0e,0x170b0b0b,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x62b2b2b,0xb171717,0x120e0e0e,0x1d121212,0x29131313,0x37131313,0x44131313,0x4f131313,0x59141414,0x60181818,0x65171717,
+ 0x66171717,0x64141414,0x5f151515,0x58141414,0x4e141414,0x420f0f0f,0x350e0e0e,0x280d0d0d,0x1c090909,0x120e0e0e,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb SettingsIcon_data[] = {
+ 0xff889157,0xff899258,0xff899258,0xff889156,0xff879152,0xff86904e,0xff848f48,0xff828d41,0xff7f8d38,0xff7c8b2e,0xff7a8925,0xff79881d,0xff74831b,0x24000000,
+ 0xff899258,0xffd5e57b,0xffd5e57b,0xffd4e478,0xffd1e370,0xffc2d461,0xff6e783c,0xff8d8f8a,0xff939493,0xff575e31,0xff93a816,0xffa7c108,0xff6f7d1b,0x6b000000,
+ 0xff899258,0xffd5e57b,0xffd5e57a,0xffd3e476,0xffd1e36d,0xffc7d95f,0xff7a8440,0xff97989b,0xffe3e3ed,0xffadadb3,0xff3c4124,0xff879a1a,0xff6a781b,0x8f000000,
+ 0xff889156,0xffd4e478,0xffd3e476,0xffd1e370,0xffcfe166,0xffcbdf58,0xffbed247,0xff69742b,0xff8c8d8e,0xffd7d7e2,0xff6d6d73,0xff4d571e,0xff64711b,0x8f000000,
+ 0xff879152,0xffd1e370,0xffd1e36d,0xffa5b458,0xffaebe52,0xffc6dc48,0xffbdd335,0xffa8be23,0xff4c541d,0xffbdbdc5,0xff9f9fa5,0xff2e311e,0xff5f6b1b,0x8f000000,
+ 0xff86904e,0xffcee164,0xffc1d25c,0xff60634e,0xff6a7051,0xffa1b435,0xffb9d123,0xffb3cf03,0xff515d0d,0xffc3c3c8,0xff9c9ca4,0xff1a1d12,0xff59641b,0x8f000000,
+ 0xff848f48,0xffcbdf58,0xff909f42,0xffa5a5a9,0xffc3c3cb,0xff5b613f,0xff8a9e0d,0xff76870c,0xff818473,0xffd9d9e0,0xffb1b1b9,0xff303130,0xff545f1b,0x8f000000,
+ 0xff828d41,0xffc6dc48,0xffa3b63c,0xff72736e,0xffe0e0ea,0xffb8b8c0,0xff676a5c,0xff8c8d84,0xffd5d5db,0xffb6b6bd,0xffacacb4,0xff96969c,0xff515b1b,0x8f000000,
+ 0xff7f8d38,0xffc0d834,0xffbbd329,0xff667320,0xff717175,0xffc3c3cb,0xffd8d8e1,0xffdfdfe8,0xffc0c0ca,0xff9d9da4,0xffc5c5cb,0xffc9c9d2,0xff4e581b,0x8f000000,
+ 0xff7c8b2e,0xffbcd61e,0xffb6d00d,0xffa0b710,0xff525d1a,0xff3b3c36,0xff525256,0xff606065,0xff9e9ea6,0xffbdbdc5,0xffe7e7ec,0xffececf1,0xff4c541b,0x8f000000,
+ 0xff7a8925,0xffb6d203,0xffadc900,0xffa0b806,0xff8c9f13,0xff6a7722,0xff4e5627,0xff2e3317,0xff3f403f,0xffa5a5ad,0xffd5d5dc,0xfff3f3f6,0xff4b531b,0x8f000000,
+ 0xff79881d,0xffaeca00,0xffa5bf00,0xff9ab203,0xff8da206,0xff7d8f0f,0xff707f1a,0xff667222,0xff464e1b,0xff434540,0xffb1b1b9,0xffdadae3,0xff4c541b,0x8f000000,
+ 0xff74831b,0xff6f7d1b,0xff6a781b,0xff64711b,0xff5f6b1b,0xff59641b,0xff545f1b,0xff515b1b,0xff4e581b,0xff4c541b,0xff4b531b,0xff4c541b,0xff4d571b,0x8f000000,
+ 0x24000000,0x6b000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x8f000000,0x6b000000
+};
+
+static const QRgb Shutdown_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x34000000,0x37000000,0x38000000,0x37000000,0x34000000,0x2f000000,0x29000000,0x21000000,0x19000000,0x12000000,0xb000000,0x6000000,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x5d9a5254,0x93c36569,0xbed86d71,0xdee47175,0xf3ec7075,0xfef16f73,0xf3eb6669,0xe0e25d5f,0xc4d04f53,0x9fb44042,0x70832a2e,0x3f000000,0x33000000,0x26000000,
+ 0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x6fb26366,0xbad9787b,0xf5f18388,0xfff38386,0xfff27e82,0xffee797b,0xffed7276,0xffec6d70,0xffec656a,0xffed6065,0xffef5a5e,0xfff05258,
+ 0xf7ec4a4f,0xc6cb393e,0x88942529,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x478a4e4f,0xa7d4787a,0xf5f38a8d,0xfff6898d,0xfff5888c,0xfff28285,0xffed7b7f,0xffe87578,0xffe36d71,0xffe1666a,
+ 0xffe36165,0xffe75b60,0xffeb545a,0xffee4e53,0xfff1484d,0xfff24047,0xf8eb373e,0xbcbc272b,0x6c5f1013,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x5fa96163,0xc6e18183,0xfff78d90,0xfff78c8e,0xfff68b8d,0xfff3868a,0xffee7f82,
+ 0xffe7797b,0xffde7073,0xffd76669,0xffd46063,0xffd75a5d,0xffdd5659,0xffe34f54,0xffeb4a4e,0xffee4248,0xfff03b41,0xfff13338,0xfff02a31,0xd7cb1f25,0x85791216,
+ 0x46000000,0x2e000000,0x1b000000,0xe000000,0x6000000,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x5fa96163,0xd0e58387,0xfff78d91,0xfff68d8f,
+ 0xfff68c8e,0xfff48a8d,0xffef8488,0xffe87c7f,0xffdc7175,0xffd1686b,0xffffffff,0xffffffff,0xffffffff,0xffcf4d51,0xffd9484c,0xffe34248,0xffec3d41,0xffee3539,
+ 0xffef2b33,0xffee242b,0xffe9232a,0xe0c71e24,0x8a701214,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000,0x3000000,0xa000000,0x16000000,0x478a4e4f,
+ 0xc6e18183,0xfff78d91,0xfff68d90,0xfff58d8f,0xfff38a8d,0xfff0878a,0xffe87e82,0xffdd7779,0xffd06a6d,0xffc46063,0xffffffff,0xffffffff,0xffffffff,0xffc24549,
+ 0xffcd4045,0xffda3b41,0xffe3343b,0xffeb2d34,0xffec252b,0xffe8232a,0xffe32329,0xffdf2228,0xdbb61b22,0x7b4c0c0d,0x46000000,0x2a000000,0x16000000,0xa000000,
+ 0x6000000,0x11000000,0x23000000,0xa7d4787a,0xfff78d90,0xfff68d8f,0xfff48d8e,0xfff18b8d,0xffed8588,0xffe78084,0xffdd787b,0xffd16e71,0xffc16164,0xffb5575a,
+ 0xffffffff,0xffffffff,0xffffffff,0xffb33d40,0xffbe373c,0xffcd3337,0xffd92d33,0xffe1252d,0xffe02229,0xffdf2228,0xffdd2228,0xffd92028,0xffd52027,0xc89a171b,
+ 0x60000000,0x3e000000,0x23000000,0x11000000,0xb000000,0x1b000000,0x6fb26366,0xf5f38a8d,0xfff68c8e,0xfff58b8d,0xfff1898c,0xffec8487,0xffe27d81,0xffda777a,
+ 0xffcf6f72,0xffcb7f82,0xffd5a7a8,0xffa74e51,0xffffffff,0xffffffff,0xffffffff,0xffa63437,0xffd39496,0xffc85156,0xffca2429,0xffd22027,0xffd32025,0xffd52027,
+ 0xffd31f25,0xffd22027,0xffcd1f25,0xf9c41d23,0xa2691013,0x55000000,0x33000000,0x1b000000,0x12000000,0x26000000,0xbad9787b,0xfff6898d,0xfff68b8d,0xfff3898c,
+ 0xffed8588,0xffe27d81,0xffd67578,0xffcb6e70,0xffd9a7a8,0xfff0e2e2,0xffffffff,0xff9b4749,0xffffffff,0xffffffff,0xffffffff,0xff9a2e31,0xffffffff,0xfff0d9da,
+ 0xffd68486,0xffbf1d23,0xffc21e24,0xffc81e24,0xffcb1f25,0xffcb1f25,0xffc71e24,0xffc31e23,0xd796161b,0x6c000000,0x45000000,0x26000000,0x19000000,0x5d9a5254,
+ 0xf5f28488,0xfff5888c,0xfff3868a,0xffee8387,0xffe47c80,0xffd87579,0xffc86c6e,0xffddb3b5,0xfffefefe,0xffffffff,0xffffffff,0xff974245,0xffffffff,0xffffffff,
+ 0xffffffff,0xff95282b,0xffffffff,0xffffffff,0xfffefdfd,0xffd69597,0xffb21a20,0xffba1d22,0xffbd1d23,0xffc11d23,0xffbf1e23,0xffbd1d22,0xfab31b20,0x9b4c0c0f,
+ 0x56000000,0x33000000,0x21000000,0x93c4676a,0xfff68487,0xfff58487,0xfff18184,0xffe97d80,0xffdd7679,0xffcc6c6f,0xffd7a5a7,0xfffefefe,0xffffffff,0xffffffff,
+ 0xffefe4e4,0xff963e41,0xffffffff,0xffffffff,0xffffffff,0xff942327,0xffefe0e0,0xffffffff,0xffffffff,0xfffefdfd,0xffc88284,0xffa91a1f,0xffb11b20,0xffb61b22,
+ 0xffb71d20,0xffb51b20,0xffb21b20,0xc2711214,0x67000000,0x3f000000,0x29000000,0xbeda6f73,0xfff68084,0xfff47f83,0xffee7c80,0xffe47679,0xffd56d70,0xffcb7c7e,
+ 0xfff0e1e2,0xffffffff,0xffffffff,0xffd8b9ba,0xffae6b6c,0xff9b3c3e,0xffffffff,0xffffffff,0xffffffff,0xff9a1e23,0xffaa4d50,0xffd4aaac,0xffffffff,0xffffffff,
+ 0xffebd7d8,0xffab4548,0xffa4191e,0xffab1a1f,0xffad1a1f,0xffad1a1f,0xffac1a1f,0xde841419,0x75000000,0x4a000000,0x2f000000,0xdee77376,0xfff57b7e,0xfff27a7c,
+ 0xffeb7779,0xffdd6e72,0xffcb6468,0xffd8a7a8,0xffffffff,0xffffffff,0xfff1e4e5,0xffb56c6e,0xffa43f42,0xffa6393d,0xffffffff,0xffffffff,0xffffffff,0xffa3191e,
+ 0xff9a171b,0xffa64d4f,0xffeedfdf,0xffffffff,0xffffffff,0xffc28a8c,0xff97171b,0xffa0191e,0xffa4191e,0xffa4191e,0xffa4191e,0xef91161a,0x81000000,0x53000000,
+ 0x34000000,0xf3ef7377,0xfff5767a,0xfff27478,0xffe86e72,0xffda666a,0xffc65b5e,0xffe7cccd,0xffffffff,0xffffffff,0xffd7b0b1,0xffac4045,0xffb03d40,0xffb4373b,
+ 0xffffffff,0xffffffff,0xffffffff,0xffa91a1e,0xff9e171d,0xff93161a,0xffcba1a3,0xffffffff,0xffffffff,0xffdabebf,0xff8c1419,0xff95171a,0xff9c171d,0xff9e191d,
+ 0xff9d171d,0xf997161b,0x89000000,0x59000000,0x37000000,0xfef47175,0xfff57175,0xfff06d71,0xffe6686b,0xffd65e62,0xffc25357,0xfff5ebeb,0xffffffff,0xffffffff,
+ 0xffc47f81,0xffb43c3f,0xffbc383c,0xffc13136,0xffffffff,0xffffffff,0xffffffff,0xffae1a20,0xffa2191d,0xff93161b,0xffac696b,0xffffffff,0xffffffff,0xfff0e6e7,
+ 0xff831317,0xff8c1619,0xff93161b,0xff97171d,0xff98171b,0xfe97171b,0x8e000000,0x5e000000,0x38000000,0xf3ee676b,0xfff4696e,0xfff0676b,0xffe56063,0xffd3565b,
+ 0xffc04b4f,0xfffefdfd,0xffffffff,0xffffffff,0xffb65256,0xffb93538,0xffc53135,0xffcd2a30,0xffce1f25,0xffc71e23,0xffbe1d23,0xffb31a20,0xffa3191e,0xff91161a,
+ 0xff91383b,0xffffffff,0xffffffff,0xfffdfdfd,0xff7b1216,0xff851419,0xff8d161a,0xff90161b,0xff92161a,0xfa8c1419,0x90000000,0x5f000000,0x37000000,0xe0e45e61,
+ 0xfff36368,0xffef5e63,0xffe5595c,0xffd54f53,0xffc14348,0xfff5e9ea,0xffffffff,0xffffffff,0xffc57679,0xffb92b30,0xffc7272d,0xffd12027,0xffcd1f25,0xffc61e24,
+ 0xffbd1d22,0xffaf1a20,0xff9d171d,0xff8a1419,0xffa5686a,0xffffffff,0xffffffff,0xffeee6e6,0xff771316,0xff801317,0xff871419,0xff8c161a,0xff8d161a,0xf27b1317,
+ 0x8e000000,0x5e000000,0x34000000,0xc4d15054,0xfff35b60,0xfff0575c,0xffe65054,0xffd7484c,0xffc43e41,0xffe7c5c6,0xffffffff,0xffffffff,0xffd7a6a7,0xffb21f24,
+ 0xffbd1d22,0xffc41d23,0xffc41d24,0xffbd1d22,0xffb21b20,0xffa4191d,0xff90161a,0xff7e1317,0xffc2a0a1,0xffffffff,0xffffffff,0xffd3bebe,0xff741214,0xff7d1317,
+ 0xff831317,0xff871419,0xff881419,0xe56a1013,0x89000000,0x59000000,0x2f000000,0x9fb64045,0xfff35359,0xffef4e53,0xffe8494e,0xffdb4045,0xffc9363c,0xffd79395,
+ 0xffffffff,0xffffffff,0xfff1dfe0,0xffb74e51,0xffad1a1f,0xffb11a1f,0xffb21b20,0xffad1a1f,0xffa2191d,0xff93161a,0xff821417,0xff8f4a4c,0xffe8dedf,0xffffffff,
+ 0xffffffff,0xffb08889,0xff721214,0xff7a1316,0xff7f1317,0xff811417,0xff851419,0xd1510c0f,0x81000000,0x53000000,0x29000000,0x70832a2e,0xf7ed4a4f,0xfff0484d,
+ 0xffeb4147,0xffe0393f,0xffd13036,0xffc84f53,0xffefd9d9,0xffffffff,0xffffffff,0xffd6abac,0xffae4d51,0xff9d171d,0xff9d171d,0xff97171b,0xff8e161a,0xff821317,
+ 0xff904a4d,0xffc4a9a9,0xffffffff,0xffffffff,0xffe3d7d7,0xff844041,0xff731216,0xff791216,0xff7d1317,0xff801317,0xfc7d1216,0xb5300808,0x75000000,0x4a000000,
+ 0x21000000,0x3f000000,0xc6cb393e,0xfff14047,0xffec3940,0xffe43337,0xffd8292f,0xffc82227,0xffd28385,0xfffefdfd,0xffffffff,0xffffffff,0xffeedfdf,0xffcca1a3,
+ 0xffae696b,0xff92383c,0xffa5686a,0xffc2a0a1,0xffe8dedf,0xffffffff,0xffffffff,0xfffefdfd,0xffa87e80,0xff6d1213,0xff741214,0xff7a1216,0xff7b1317,0xff7e1317,
+ 0xe6600f12,0x93000000,0x67000000,0x3f000000,0x19000000,0x33000000,0x88942529,0xf8ea373e,0xffee3137,0xffe82a31,0xffdf2329,0xffce1f25,0xffbc1d22,0xffd39597,
+ 0xfffefdfd,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefdfd,0xffb49193,0xff6b1013,0xff721014,
+ 0xff761216,0xff7a1316,0xff7b1317,0xfc7a1216,0xc33b080a,0x81000000,0x56000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbcbc272b,0xffef2a31,0xffeb242a,
+ 0xffe02229,0xffd12025,0xffc21e24,0xffb21a20,0xffc88284,0xffebd7d8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe3d7d7,
+ 0xffa87e80,0xff6b1013,0xff701014,0xff741216,0xff781216,0xff7a1316,0xff7b1316,0xdf540d10,0x94000000,0x6c000000,0x45000000,0x26000000,0xb000000,0x1b000000,
+ 0x33000000,0x6c5f1013,0xd7ca1f25,0xffe8232a,0xffdf2228,0xffd52027,0xffc71e23,0xffba1d22,0xffaa1a1f,0xffac4548,0xffc38a8c,0xffdabebf,0xfff0e6e7,0xfffdfdfd,
+ 0xffeee6e6,0xffd4bebe,0xffb18889,0xff854041,0xff6f1214,0xff721014,0xff741216,0xff781216,0xff791316,0xff7a1316,0xed620f12,0xae220506,0x7b000000,0x55000000,
+ 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x85791216,0xe0c61e24,0xffdd2228,0xffd51f27,0xffcb1f25,0xffbf1d23,0xffb31b20,0xffa5191e,
+ 0xff9a171d,0xff8f161a,0xff851417,0xff7e1316,0xff7a1317,0xff771216,0xff761216,0xff741216,0xff751214,0xff771216,0xff781216,0xff791316,0xff7a1316,0xf0660f12,
+ 0xbc300608,0x85000000,0x60000000,0x3e000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a701214,0xdbb61b22,0xffd22027,
+ 0xffcb1f25,0xffc21d23,0xffb81d22,0xffad1a1f,0xffa2191e,0xff99171b,0xff90161a,0xff881419,0xff831417,0xff7f1317,0xff7d1316,0xff7b1317,0xff7a1216,0xff7a1316,
+ 0xff7b1317,0xff7a1316,0xed620f12,0xbc300608,0x88000000,0x66000000,0x46000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000,
+ 0x2e000000,0x48000000,0x7b4c0c0d,0xc89a171b,0xf9c31d23,0xffc01e23,0xffba1d20,0xffb01a1f,0xffa7191e,0xff9d171d,0xff97171b,0xff90161b,0xff8b141a,0xff861419,
+ 0xff831317,0xff7f1417,0xff7e1317,0xff7c1317,0xfc7a1216,0xdf540d10,0xae220506,0x85000000,0x66000000,0x48000000,0x2e000000,0x1a000000,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa2691013,0xd795161b,0xfab21b20,0xffb11b20,0xffaa1a1f,0xffa3191e,
+ 0xff9a171d,0xff95171b,0xff8f161a,0xff8c161a,0xff861419,0xff841419,0xfc7d1216,0xe6600f12,0xc33b080a,0x94000000,0x7b000000,0x60000000,0x46000000,0x2e000000,
+ 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000,
+ 0x9b4c0c0f,0xc2711214,0xde841419,0xef91161a,0xf997161b,0xfe97171b,0xfa8c1419,0xf27b1317,0xe56a1013,0xd1510c0f,0xb5300808,0x93000000,0x81000000,0x6c000000,
+ 0x55000000,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000,
+ 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000,
+ 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb Snake_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff522300,0xff522300,0xff522300,0xff522300,
+ 0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,
+ 0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff522300,0xff282d0c,0xff285b16,0xff326f18,0xff42a025,0xff409d25,0xff2f6213,0xff337219,0xff2e6415,0xff3b8a1e,0xff43a325,0xff38861e,0xff367f1d,0xff3f9824,
+ 0xff234b10,0xff2b5b12,0xff326e18,0xff387d1a,0xff2f6615,0xff2b5711,0xff255112,0xff254e0f,0xff326a15,0xff2e5e12,0xff1c3609,0xff0d4b00,0xff522300,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff522300,0xff347117,0xff126d00,0xff0c3d00,0xff072000,0xff093200,0xff126000,0xff157b00,0xff147500,0xff178100,
+ 0xff199d00,0xff126e00,0xff116800,0xff0b4000,0xff093100,0xff115e00,0xff146a00,0xff115b00,0xff0d3b00,0xff105200,0xff0f4b00,0xff146300,0xff1a9400,0xff1da800,
+ 0xff105600,0xff062600,0xff522300,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff522300,0xff1e450e,0xff0e5600,0xff126f00,0xff0e5300,0xff0f5800,
+ 0xff115e00,0xff157f00,0xff126600,0xff0e5900,0xff0d4f00,0xff062400,0xff083300,0xff0a3d00,0xff0a3600,0xff0f5500,0xff0d4a00,0xff0d4400,0xff0c4200,0xff0f4e00,
+ 0xff0e4b00,0xff0f5800,0xff167700,0xff178400,0xff0e5000,0xff051a00,0xff522300,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff522300,0xff122a08,
+ 0xff0c4900,0xff0e5e00,0xff0c5200,0xff0c4d00,0xff0c4e00,0xff0c5300,0xff083800,0xff072e00,0xff062a00,0xff052200,0xff052000,0xff062500,0xff062300,0xff072400,
+ 0xff072700,0xff0d5600,0xff105f00,0xff116400,0xff0b3600,0xff0c4000,0xff147500,0xff1a9600,0xff147400,0xff0d4b00,0xff522300,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff522300,0xff143508,0xff073700,0xff094700,0xff084a00,0xff063600,0xff042100,0xff042600,0xff021300,0xff021400,0xff021200,0xff021900,
+ 0xff021b00,0xff021c00,0xff021b00,0xff020f00,0xff031a00,0xff073400,0xff083a00,0xff0a4500,0xff051b00,0xff041400,0xff0e5900,0xff147800,0xff189600,0xff116600,
+ 0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff0b3206,0xff032c00,0xff032e00,0xff022800,0xff011100,0xff010f00,0xff000b00,
+ 0xff000d00,0xff001600,0xff001400,0xff000e00,0xff000c00,0xff000b00,0xff011400,0xff011600,0xff011a00,0xff022100,0xff032700,0xff042c00,0xff052c00,0xff052600,
+ 0xff093a00,0xff0f6100,0xff127200,0xff093700,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff041c02,0xff011200,0xff001300,
+ 0xff000f00,0xff001000,0xff001900,0xff001800,0xff0a1b07,0xff182f0e,0xff293a1d,0xff384427,0xff435030,0xff3f4b27,0xff35451d,0xff273810,0xff1b320a,0xff061901,
+ 0xff000f00,0xff010f00,0xff021800,0xff021800,0xff042100,0xff052400,0xff062600,0xff083000,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff522300,0xff021000,0xff001600,0xff001b00,0xff001800,0xff001500,0xff061f04,0xff365025,0xff7f9354,0xffaeb874,0xffabac96,0xff9c9c93,0xff7e7e79,0xff4e4e49,
+ 0xff1b1a10,0xff232314,0xff4a4f24,0xff485c15,0xff273d0b,0xff0a1f02,0xff001a00,0xff000f00,0xff010f00,0xff010c00,0xff021300,0xff052500,0xff522300,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff021200,0xff001700,0xff001c00,0xff001c00,0xff0c2209,0xff799359,0xffbbc988,0xffd9da95,0xffcbc891,
+ 0xffa2a19b,0xff919191,0xff696969,0xff212121,0xff000000,0xff111006,0xff726c22,0xffa8b528,0xff97b621,0xff527b09,0xff1f4103,0xff031300,0xff000900,0xff000700,
+ 0xff010e00,0xff031b00,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff031601,0xff001800,0xff001900,0xff001700,0xff89a168,
+ 0xffe1ebb3,0xffebeebb,0xffe9e9a0,0xffc2be99,0xff95948e,0xff818181,0xff4b4b4b,0xff000000,0xff000000,0xff443e14,0xffad9f2d,0xffbdc927,0xffb7d138,0xff8eba01,
+ 0xff7ea32c,0xff2e5305,0xff050f01,0xff000500,0xff000a00,0xff010700,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff051b02,
+ 0xff001000,0xff000e00,0xff374b29,0xffe2eebc,0xffdfe9a5,0xffe1e69a,0xffe5e595,0xffb6af6f,0xff797979,0xff616161,0xff1c1c1c,0xff000000,0xff030201,0xff918743,
+ 0xffc4bc29,0xffc0cb2c,0xff9fb412,0xffb5cd4c,0xff7db20c,0xff5f9816,0xff204204,0xff020600,0xff000a00,0xff010c00,0xff522300,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff522300,0xff081e03,0xff010b00,0xff26371c,0xffadc586,0xffdfecb4,0xffd3e096,0xffd8df80,0xffe6e192,0xffa39951,0xff5e5d59,0xff383837,
+ 0xff000000,0xff000000,0xff2c2605,0xffc0af61,0xffc1bc18,0xffc3d036,0xffb9d23a,0xffbdc969,0xff8cbd2f,0xff6aa71b,0xff4b8318,0xff0f2803,0xff010e00,0xff021200,
+ 0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff091e03,0xff011300,0xff81a261,0xffc2dc94,0xffcee191,0xffc7d27f,0xffdae185,
+ 0xffd5d85a,0xffa39f3d,0xff59563a,0xff181818,0xff000000,0xff000000,0xff564e1a,0xffb8ae06,0xffd4d154,0xffbdce2b,0xff91a301,0xff78a800,0xff639c00,0xff57940f,
+ 0xff60972e,0xff1e4b04,0xff011000,0xff031500,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff154007,0xff042000,0xff96bb69,
+ 0xffbdd88a,0xffb3cf73,0xffd7ddad,0xffced973,0xffbcc729,0xff9c9916,0xff514f25,0xff080807,0xff000000,0xff080700,0xff716b26,0xffc2c627,0xffb2bd01,0xffa5be01,
+ 0xff9ec316,0xff8aba1f,0xff478400,0xff3f7d01,0xff609137,0xff3e6923,0xff032000,0xff052200,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff522300,0xff1e630a,0xff0b4600,0xff8db163,0xffa3c072,0xffa1c35b,0xffb9ce70,0xff9ebc28,0xffc3cf51,0xff9c9c07,0xff595913,0xff030300,0xff000000,0xff131301,
+ 0xff626200,0xffa4af00,0xffa4bb00,0xffb3ce37,0xff9cc623,0xff5f9900,0xff5f9919,0xff2d6a00,0xff052400,0xff072e02,0xff093900,0xff083b00,0xff522300,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff2c8e0e,0xff177a00,0xff5b8c31,0xff749945,0xff78a233,0xff75a220,0xff96b835,0xff819a03,0xff9bb310,
+ 0xff727d20,0xff070800,0xff000000,0xff090900,0xff596300,0xff90a300,0xffbecc52,0xff9cc423,0xff8fbe25,0xff4f8c00,0xff236100,0xff568535,0xff5a7e3e,0xff174902,
+ 0xff106000,0xff106100,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff3aad12,0xff21a700,0xff327810,0xff426e1b,0xff627f37,
+ 0xff6b8d2d,0xff618c08,0xff709710,0xff678900,0xff637e01,0xff30390a,0xff010100,0xff050601,0xff595e2b,0xff7a9d00,0xff85b107,0xff74a601,0xff9ab056,0xff427e02,
+ 0xff748651,0xff6a7a4e,0xff2d5f12,0xff3c5e26,0xff188400,0xff178100,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff42b818,
+ 0xff26ba00,0xff27a203,0xff265a04,0xff1d4900,0xff255100,0xff4f6c27,0xff426a06,0xff476e00,0xff567c0b,0xff415c01,0xff111604,0xff000000,0xff253500,0xff598102,
+ 0xff568800,0xff3a6400,0xff3f7606,0xff184c00,0xff002a00,0xff002100,0xff3e6627,0xff155f03,0xff1c9300,0xff178100,0xff522300,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff522300,0xff44ae19,0xff27b800,0xff25b600,0xff28a002,0xff274f0f,0xff1d4006,0xff153800,0xff2d4f11,0xff1c3700,0xff315408,0xff3d6014,
+ 0xff172c00,0xff020400,0xff0a1200,0xff284a00,0xff1f4500,0xff586f38,0xff335e19,0xff2f591a,0xff093100,0xff012800,0xff265a11,0xff1d8e01,0xff1e9800,0xff157100,
+ 0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff4eb821,0xff26c000,0xff25b500,0xff23a800,0xff229701,0xff164701,0xff1a380c,
+ 0xff153306,0xff203b10,0xff203f0c,0xff1f3f0a,0xff264411,0xff071500,0xff040800,0xff202c14,0xff062400,0xff0c2c00,0xff0e2e00,0xff404931,0xff022100,0xff124203,
+ 0xff1d8202,0xff1c8b00,0xff1a8000,0xff0c4600,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff4fbd26,0xff20b000,0xff1b8300,
+ 0xff1d9100,0xff1f9700,0xff1d8d00,0xff1e6c02,0xff1a4406,0xff15300a,0xff0a2300,0xff051d00,0xff0c2600,0xff233118,0xff071501,0xff020c00,0xff021400,0xff1a3511,
+ 0xff000900,0xff17350a,0xff194b06,0xff176b01,0xff146900,0xff156200,0xff135f00,0xff093300,0xff522300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff522300,0xff3b861a,0xff146c00,0xff198600,0xff1da200,0xff1a8e00,0xff1c9300,0xff20a300,0xff24b900,0xff195f02,0xff0c2f01,0xff0d2704,0xff0f2807,0xff0e2607,
+ 0xff122a0c,0xff071601,0xff10220a,0xff0c2801,0xff0e3303,0xff124703,0xff145d00,0xff146500,0xff0a3a00,0xff0d3d00,0xff135e00,0xff0b3b00,0xff522300,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff522300,0xff2f6c17,0xff198a00,0xff1da400,0xff20c200,0xff1fb900,0xff1a9100,0xff188200,0xff177b00,0xff136500,
+ 0xff198700,0xff1a7f02,0xff196d02,0xff1c8103,0xff1d7506,0xff165a04,0xff124803,0xff0e4401,0xff072d00,0xff072d00,0xff082d00,0xff0f5300,0xff093900,0xff072100,
+ 0xff0a3700,0xff0b3900,0xff522300,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff522300,0xff46ae2a,0xff1ca600,0xff1b9a00,0xff21d100,0xff1fba00,
+ 0xff136200,0xff156f00,0xff146e00,0xff157400,0xff1a9d00,0xff188c00,0xff157400,0xff1b9d00,0xff1eb200,0xff136700,0xff135900,0xff125300,0xff0c4200,0xff041e00,
+ 0xff041b00,0xff105e00,0xff177a00,0xff0b3a00,0xff052100,0xff051a00,0xff522300,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff522300,0xff1db500,
+ 0xff116700,0xff0e4b00,0xff0e5400,0xff0c4200,0xff0e4e00,0xff116700,0xff0d4f00,0xff0c4500,0xff127300,0xff127300,0xff0e5900,0xff0b4200,0xff0c4a00,0xff0b3e00,
+ 0xff106000,0xff0b3700,0xff072700,0xff031300,0xff031000,0xff0b3c00,0xff0f5800,0xff093600,0xff041a00,0xff030e00,0xff522300,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,
+ 0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,0xff522300,
+ 0xff522300,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Solitaire_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff0a4c00,0xff084700,0xff074100,0xff074100,
+ 0xff074000,0xff074000,0xff073f00,0xff073e00,0xff063d00,0xff063c00,0xff063b00,0xff063b00,0xff063c00,0xff063d00,0xff063d00,0xff073e00,0xff073f00,0xff073f00,
+ 0xff074000,0xff074000,0xff074000,0xff074000,0xff074000,0xff073f00,0xff063e00,0xff043500,0xff012100,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff084700,0xff87c28d,0xff53a75c,0xff52a75b,0xff52a55b,0xff50a259,0xff4e9d56,0xff4b9753,0xff48914f,0xff458c4d,0xff44894b,0xff43884b,0xff448a4c,0xff468e4e,
+ 0xff489250,0xff4b9753,0xff4c9a54,0xff4e9e57,0xff4fa058,0xff50a259,0xff51a35a,0xff51a45a,0xff51a35a,0xff50a058,0xff4f9b57,0xff177220,0xff010d00,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff074100,0xff53a75c,0xff158821,0xff158720,0xff148420,0xff14801f,0xff13791d,0xff11701b,0xff106819,0xff0f6117,
+ 0xff0e5d17,0xff0e5d16,0xff0f5f17,0xff0f6318,0xff106819,0xff116d1a,0xff12721c,0xff12771d,0xff137b1d,0xff137e1e,0xff14801f,0xff158221,0xff148120,0xff178021,
+ 0xff177a21,0xff135019,0xff000500,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff074000,0xff52a55b,0xff158620,0xff148420,0xff14801f,0xff13791d,
+ 0xff116f1b,0xff0f6318,0xff0d5715,0xff0c4e13,0xff0b4812,0xff0b4711,0xff0b4a12,0xff0c4f13,0xff0d5414,0xff0e5b16,0xff0f6118,0xff106819,0xff116d1a,0xff12721c,
+ 0xff12771d,0xff147b1f,0xff147c1f,0xff15781f,0xff177421,0xff134c19,0xff010600,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff073e00,0xff4fa158,
+ 0xff14821f,0xff147f1f,0xff137a1d,0xff11701b,0xff106419,0xff185b1e,0xff1c5121,0xff28522b,0xff456445,0xff365838,0xff284e2a,0xff506e4e,0xff426943,0xff306033,
+ 0xff4f7a51,0xff467a49,0xff327137,0xff568b58,0xff49894d,0xff38833e,0xff5a945b,0xff519055,0xff3b7e41,0xff476847,0xff031700,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff063b00,0xff4a9652,0xff137a1d,0xff12761c,0xff11701b,0xff0f6418,0xff3c7540,0xff8a9d84,0xffafb3a6,0xffcfcec3,0xffb7bbad,0xffbbbfb2,
+ 0xffd5d1c7,0xffcac6bc,0xffc0bab2,0xffd2ccc4,0xffcbccc2,0xffbabfb1,0xffcccac0,0xffcfcfc2,0xffb9bfaf,0xffcbcac0,0xffcecfc4,0xffaeb9a8,0xffa8a9a2,0xffa1a29b,
+ 0xff062d00,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff053400,0xff428549,0xff106b1a,0xff106819,0xff0f6117,0xff3e7440,0xffc3c0b0,0xffc8c5b8,
+ 0xffd3d9cd,0xffd1d6c9,0xffcfd2c6,0xffd4d3c9,0xffdad7ce,0xffdbd7cf,0xffdadad1,0xffd0d3c8,0xffd8d9cc,0xffd6d4c6,0xffd7d7cc,0xffd7d6cc,0xffd3d4cb,0xffd6d8cf,
+ 0xffd2d3cb,0xffc3c5bd,0xffb5b7b0,0xffa4a69f,0xff073100,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff042a00,0xff356c3b,0xff0d5715,0xff0d5414,
+ 0xff0f5015,0xff8da286,0xffd4cdbc,0xffdddbc8,0xffcdd5c7,0xffd6dbce,0xffe2e2d7,0xffd9d9ce,0xffd2d0c8,0xffd7d9d0,0xffd5dfd2,0xffd0e5d5,0xffd5e0cf,0xffdad8ce,
+ 0xffd7d8cf,0xffdddfd6,0xffdee0d6,0xffdbddd4,0xffd6d8d0,0xffcacbc3,0xffb5b6af,0xffa2a39c,0xff073200,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff032000,0xff28522d,0xff0a4110,0xff0a400f,0xff0d3d11,0xffaeb5a2,0xffcdcdbe,0xffd9dac8,0xffe0dfd4,0xfff0e9df,0xffdcd6cd,0xffe2e4db,0xffebebe1,0xffdae2d7,
+ 0xffdad6d2,0xffd6e7db,0xffd7dcd2,0xffdadcd4,0xffdbdcd4,0xffdee1d6,0xffdfe1d6,0xffdbddd4,0xffd5d8cf,0xffc9cac2,0xffb5b7b0,0xffa3a49e,0xff073100,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff021600,0xff1c391f,0xff072d0b,0xff072c0b,0xff0f3113,0xffaeb5a5,0xffd4d4c9,0xffd6d8ce,0xffe0e0d7,0xffbdada9,
+ 0xffae8e8d,0xffb1676e,0xffca9b98,0xffe0e3d7,0xffdee4df,0xffd8dbd6,0xffecd5d6,0xffe0e2d8,0xffdddfd6,0xffdde0d6,0xffdfe1d6,0xffddded5,0xffd7dad1,0xffcbcdc4,
+ 0xffb8bab2,0xffa3a59e,0xff073100,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff020f00,0xff142816,0xff052008,0xff051f08,0xff263c28,0xffbfc8bc,
+ 0xffd1d3c7,0xffd9e2da,0xffceb9ae,0xff93454e,0xffbc6d72,0xffbc827c,0xff9d404a,0xffc58b8c,0xffe0e3db,0xffddded9,0xffdde1dd,0xffdce7db,0xffe1e2d8,0xffe0e2d7,
+ 0xffe0e2d7,0xffe0e2d8,0xffdcded4,0xffcfd2c8,0xffbabdb5,0xffa5a7a1,0xff073300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff010c00,0xff0f1f11,
+ 0xff041806,0xff041806,0xff1c2d1d,0xffd0c0ba,0xffdcdbe4,0xffd6fbf9,0xffcc8b88,0xffc1606f,0xffedf6e8,0xffefffe4,0xffb9807a,0xffb15d66,0xffe8e8d9,0xffe2dfd9,
+ 0xffe1dcda,0xffe0e3dd,0xffe2e4d9,0xffe2e4d9,0xffe1e3d8,0xffdfe1d7,0xffdcded4,0xffd0d2c8,0xffbabcb4,0xffa5a6a0,0xff073300,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff010a00,0xff1d281d,0xff536054,0xff797c71,0xff44392c,0xffb0958c,0xffeaf2f0,0xffdbf4f2,0xffcc888a,0xffbe636b,0xffdcfff7,0xffe6ebd8,
+ 0xffd8a19d,0xffa14953,0xffe6f2db,0xffe9eae0,0xffddddd9,0xffe6dfdc,0xffe0e0d7,0xffe2e4d9,0xffe1e3d8,0xffdee0d6,0xffdbddd3,0xffd0d3c9,0xffbbbeb5,0xffa6a8a1,
+ 0xff073400,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff073200,0xffd9cfcc,0xffd9d7d0,0xffc7bfbd,0xff3c2a26,0xff9d9a86,0xffd1d3c7,0xffd9e2da,
+ 0xffceb9ae,0xffb25254,0xffe9eff6,0xffdceae2,0xffd09195,0xffbe5c68,0xffdedecd,0xffe1e0d8,0xffd8e5db,0xffdce9d8,0xffdbebd9,0xffe5e5dc,0xffe8e8dd,0xffe4e7dc,
+ 0xffdcded4,0xffdcd6d1,0xffc7c2ba,0xffa4a7a1,0xff073400,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff094100,0xffd5d4d0,0xffd8dad2,0xffd8e4d9,
+ 0xff292720,0xffb5bca2,0xffdcdbe4,0xffd6fbf9,0xffcc8b88,0xffb86e64,0xffe0e8df,0xffe2ffff,0xffc89796,0xffbb676d,0xffe4ebda,0xffe1eee6,0xffe7f1eb,0xffcfc5bc,
+ 0xffcdd3c0,0xfff0f1e8,0xffc6d2c8,0xffc7c4c3,0xffe5dddb,0xffcdb9bd,0xffa0a79f,0xffa6b2a9,0xff072e00,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0a4200,0xffd2d1cd,0xffced8d2,0xffc4cfc5,0xff3a342e,0xffa7b19c,0xffeaf2f0,0xffdbf4f2,0xffcc888a,0xff892c2e,0xffbd8486,0xffe4e2dd,0xffe3bdb5,0xff983f4b,
+ 0xffe9f0e0,0xffcce0da,0xff696c6b,0xff8c7577,0xffa1958a,0xff707471,0xff788e86,0xff949996,0xff696665,0xff6e6c6a,0xff757d79,0xff5b5656,0xff041d00,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a4400,0xffcecdc9,0xffe8edea,0xffc5c0c0,0xff4a3a35,0xffa9ae9d,0xffe6e2d7,0xffcdf5e3,0xffcc9895,0xff9b2e3a,
+ 0xffb65667,0xffae5e63,0xffce8082,0xffb94756,0xffd6edda,0xffb5b7b4,0xff8a7c7f,0xffaaafa7,0xffb9c5b7,0xffd9d7cf,0xffe1c7c2,0xffc1b0a8,0xffc5d9ce,0xffbeb0ae,
+ 0xff979a98,0xff99a89d,0xff073300,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a4500,0xffd5d4d0,0xffdededb,0xffe0dadb,0xff423131,0xffb5baa6,
+ 0xffd2e5d6,0xffe7fcf2,0xffb47c7a,0xffca6f70,0xffd3c4b8,0xffb47e82,0xffa42132,0xffa05a5b,0xffe1ffe8,0xffb6bfb5,0xff73696b,0xffebfff7,0xffcbb9b6,0xffb34f5c,
+ 0xffb02d3b,0xffbe696b,0xffcf9d9b,0xffd1e5d6,0xffccd6ce,0xffa78d8e,0xff061100,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a4500,0xffd7d7d4,
+ 0xffe5e5e1,0xffd1cbcc,0xff37302f,0xff93a28e,0xffe9faeb,0xffe0f6ec,0xffcd838a,0xffaa4c4c,0xffffffff,0xffd0dad4,0xffa9353e,0xff81282d,0xfff4e4d0,0xffc6ccbe,
+ 0xff76706e,0xfff7d4d0,0xff8f1727,0xff7a020c,0xff76050a,0xff600101,0xff911923,0xffb9a190,0xffc5beac,0xff772531,0xff040500,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff0a4500,0xffd6d6d4,0xffeaebe7,0xffbcbab8,0xff2a2525,0xff998b81,0xfff8f8ea,0xffe8ece0,0xffd2b1a4,0xff9f2e39,0xffbe7077,0xffdca5ad,
+ 0xff9d4b49,0xff9b1826,0xffbb3d52,0xffc1a9a5,0xff869082,0xffb36b67,0xff750004,0xff6c0608,0xff6b090b,0xff70080c,0xff760207,0xff914646,0xffab6c66,0xff550b0e,
+ 0xff040600,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a4500,0xffd5d4d1,0xffdededa,0xffdbdbd8,0xff291f21,0xffb0b3a0,0xffe0e9d6,0xffdde6df,
+ 0xfff4ede7,0xffc9848b,0xffb36973,0xffa23e50,0xffb1726e,0xffe1bcb6,0xffeadcd9,0xffaca8a7,0xff757269,0xffc26365,0xff690102,0xff770910,0xff7f0812,0xff6d080c,
+ 0xff6a090d,0xff80161d,0xff811f25,0xff5e0e14,0xff040700,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a4600,0xffdadcd8,0xffe7d9dd,0xffcfcfd1,
+ 0xff3c2328,0xff949485,0xffe8f5e8,0xffd6e9e9,0xfffbfefe,0xffe8f3e8,0xffe9e2de,0xfff2efe8,0xfff4ecd8,0xfff2dfdb,0xffedf6ed,0xffc5c8c5,0xff71786e,0xffae5058,
+ 0xff720a11,0xff7c060f,0xff6f0813,0xff7e0810,0xff63090e,0xff700911,0xff5c090c,0xff611113,0xff040600,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff0a4a00,0xffe2ede8,0xffe3fcfc,0xffb8adb4,0xff312b26,0xff9a837a,0xfff4faf4,0xffe3e8e9,0xffc27f86,0xffb24351,0xffc29f9d,0xffdecbc2,0xff85202d,0xffa8424c,
+ 0xffd6cbb7,0xffc1bcb0,0xff8d9f92,0xffaf6f72,0xff890c17,0xff720209,0xff6f0a10,0xff730910,0xff6c0a12,0xff6e0a11,0xff650d11,0xff5f1013,0xff040600,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff0a4500,0xffc0c7bd,0xff987d7e,0xff8c555a,0xff15140e,0xff9f9c88,0xffd3e8d7,0xffdababb,0xff85232c,0xff5f0202,
+ 0xff82252a,0xffaa3943,0xff7b030e,0xff750202,0xffc47770,0xffb7c3b0,0xff7c7d7b,0xffd0c4ba,0xff8e1b24,0xff6f0205,0xff780c10,0xff6e0b11,0xff6d0913,0xff680b12,
+ 0xff690d13,0xff611117,0xff040600,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff062400,0xff89635f,0xff771b23,0xff600308,0xff150303,0xff929486,
+ 0xffe6eaea,0xffc69192,0xff7d0a12,0xff5d0507,0xff770f13,0xff740a12,0xff6d090f,0xff70050d,0xffac6765,0xffd0ded0,0xff605f5e,0xffd7e4d8,0xffa35b5f,0xff770d12,
+ 0xff6f070b,0xff680c11,0xff640c11,0xff630d12,0xff591014,0xff531217,0xff040600,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff050f00,0xff4a151a,
+ 0xff39080d,0xff1e0609,0xff17110d,0xff91928c,0xffd6cbd4,0xffbcafa3,0xff811c23,0xff68090e,0xff660c13,0xff670c12,0xff680d11,0xff610b0f,0xffb5928f,0xffa0a9a0,
+ 0xff6e6a64,0xffb9c2ba,0xffbb9e9b,0xff87393c,0xff5c0707,0xff610e12,0xff600e13,0xff610f12,0xff551114,0xff4c1316,0xff040700,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff010300,0xff010200,0xff000300,0xff000400,0xff010800,0xff062c00,0xff083400,0xff083e00,0xff071b00,0xff040700,0xff040500,0xff050600,
+ 0xff040400,0xff050c00,0xff093a00,0xff072e00,0xff041e00,0xff083800,0xff083700,0xff072900,0xff040600,0xff040500,0xff040500,0xff050600,0xff040600,0xff040700,
+ 0xff040700,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Sound_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x34000000,0x37000000,0x38000000,0x37000000,0x34000000,0x2f000000,0x29000000,0x21000000,0x19000000,0x12000000,0xb000000,0x6000000,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x5d5f4144,0x937e5559,0xbe8d5e62,0xde956166,0xf39a6267,0xfe995f65,0xf392565b,0xe0874c52,0xc4773f45,0x9f613136,0x70401e21,0x3f000000,0x33000000,0x26000000,
+ 0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x6f735254,0xba92676a,0xf5a67479,0xffa77378,0xffa57075,0xffa16a6f,0xff9e656a,0xff9a5f65,0xff96585e,0xff925258,0xff8d4a50,0xff884249,
+ 0xf7803a41,0xc6672b30,0x88451a1e,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x47553d3f,0xa78f666a,0xf5a9797d,0xffaa797d,0xffaa787c,0xffa77378,0xffa57075,0xffa16a6f,0xff9e656a,0xff995e63,
+ 0xff95575d,0xff904f55,0xff8b474d,0xff863f46,0xff81383f,0xff7d3139,0xf8752930,0xbc571b20,0x6c24090c,0x3e000000,0x2a000000,0x1a000000,0xe000000,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x5f6d4f52,0xc69b7074,0xffad7d82,0xffac7b80,0xffab7a7f,0xffaa787c,0xffa77378,
+ 0xffa47075,0xffa06a6f,0xff9c6368,0xff985d62,0xff93555a,0xff8d4c53,0xff88444b,0xff833c43,0xff7e343b,0xff792b32,0xff74252b,0xff701e26,0xd759151b,0x852e0a0c,
+ 0x47000000,0x2e000000,0x1b000000,0xe000000,0x6000000,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x5f6d4f52,0xd09f7378,0xffae7e83,0xffad7d82,
+ 0xffac7b80,0xffab7a7f,0xffa9787c,0xffa67378,0xffa26d72,0xff9d666c,0xff9a6066,0xff95595e,0xff905157,0xff8b494f,0xff843f45,0xff7e363d,0xff792e35,0xff72252c,
+ 0xff6e1e25,0xff6a1820,0xff67171f,0xe156141a,0x8b2a090d,0x49000000,0x2e000000,0x1a000000,0xd000000,0x5000000,0x3000000,0xa000000,0x16000000,0x47553d3f,
+ 0xc69b7074,0xffae7e83,0xffae7e83,0xffad7d82,0xffac7b80,0xffab7a7f,0xffa8767b,0xffa37075,0xff764f52,0xff362325,0xff321e20,0xff46292c,0xff8a4c52,0xff854249,
+ 0xff7f3a40,0xff2b1113,0xff000000,0xff000000,0xff000000,0xff150506,0xff60161c,0xff61161d,0xdc4c1116,0x7d1b0608,0x47000000,0x2a000000,0x16000000,0xa000000,
+ 0x6000000,0x11000000,0x23000000,0xa78f666a,0xffad7d82,0xffad7d82,0xffad7d82,0xffad7d82,0xffab7a7f,0xffa9797d,0xffa57378,0xff875b60,0xff0f090a,0xff2c2c2c,
+ 0xff828282,0xff130b0c,0xff7e4448,0xff371b1d,0xff2c1215,0xff17080a,0xff4d5e8b,0xff7996e3,0xff4361ae,0xff000000,0xff24080b,0xff59141b,0xff5a151c,0xc93f0e12,
+ 0x61000000,0x3e000000,0x23000000,0x11000000,0xb000000,0x1b000000,0x6f735254,0xf5a9797d,0xffac7b80,0xffac7b80,0xffac7b80,0xffab7a7f,0xffa9797d,0xffa67479,
+ 0xff885e62,0xff120c0c,0xff000000,0xffffffff,0xfff2f2f2,0xff100909,0xff613135,0xff010000,0xff3c496c,0xff25304b,0xff1e2841,0xff6385df,0xff4a71da,0xff1a284f,
+ 0xff020001,0xff380d10,0xff541319,0xf9521219,0xa327080b,0x56000000,0x33000000,0x1b000000,0x12000000,0x26000000,0xba92676a,0xffaa797d,0xffab7a7f,0xffab7a7f,
+ 0xffab7a7f,0xffa9797d,0xffa67479,0xff865c60,0xff110b0c,0xff000000,0xffe3e3e5,0xfffbfbfd,0xff939396,0xff030101,0xff070304,0xff010000,0xff7b98e4,0xff6284df,
+ 0xff0d1325,0xff212e56,0xff4a71da,0xff3f62bf,0xff04070d,0xff110405,0xff491115,0xff4f1218,0xd83c0e12,0x6d000000,0x45000000,0x26000000,0x19000000,0x5d5f4144,
+ 0xf5a67479,0xffa9787c,0xffa9787c,0xffa8777b,0xffa67479,0xffa37277,0xff835a5e,0xff100a0b,0xff000000,0xffd9dbdd,0xfff5f5fc,0xffe0e2e9,0xff75757a,0xff222324,
+ 0xff708fe1,0xff1f2943,0xff324373,0xff5479dc,0xff4369ce,0xff010000,0xff3f5ba9,0xff446bd1,0xff263b73,0xff010000,0xff350c10,0xff4a1117,0xfa491016,0x9d1a0608,
+ 0x57000000,0x33000000,0x21000000,0x937e5559,0xffa67378,0xffa57277,0xffa47176,0xffa26f74,0xff9e6c71,0xff80575b,0xff0f0b0b,0xff000000,0xffdcdde3,0xffedeffa,
+ 0xffe7ebf9,0xffbdbfcb,0xff616269,0xff424348,0xff6687df,0xff4e75da,0xff010001,0xff405dad,0xff456cd3,0xff273c76,0xff010001,0xff5076db,0xff3a5bb3,0xff020305,
+ 0xff1e0609,0xff451015,0xff471016,0xc32a090c,0x68000000,0x3f000000,0x29000000,0xbe8d5e62,0xffa47075,0xffa26e73,0xff140d0e,0xff120c0d,0xff120c0d,0xff060404,
+ 0xff000000,0xffd0d3dd,0xffe6e9f9,0xffdee3f6,0xffd6dcf3,0xffaeb1c3,0xff5f6169,0xff000000,0xff4a69bb,0xff476fd8,0xff2c4383,0xff010001,0xff5076db,0xff3d5fba,
+ 0xff010001,0xff4662ae,0xff4065c5,0xff121d38,0xff0e0304,0xff400f13,0xff431014,0xdf320a0f,0x76000000,0x4a000000,0x2f000000,0xde956166,0xff9f696e,0xff9b666b,
+ 0xff000000,0xffe2e6f7,0xffbbbfcf,0xffa1a4b2,0xffd6dbec,0xffdde2f6,0xffd3d9f4,0xffcdd6f1,0xffc7cde9,0xffa5abc3,0xff5e616f,0xff010101,0xff070910,0xff557adc,
+ 0xff3d5fba,0xff010000,0xff5377d5,0xff3e60bc,0xff0c1223,0xff222f52,0xff4971d9,0xff223568,0xff070102,0xff3b0d11,0xff3e0e13,0xf0390e11,0x82000000,0x53000000,
+ 0x34000000,0xf39a6267,0xff9c6368,0xff966065,0xff000000,0xffd7ddf5,0xffcfd7f3,0xffcbd3f2,0xffcbd3f2,0xffc7cfef,0xffc4cbef,0xffc2cbee,0xffbbc4e7,0xff9da4c2,
+ 0xff585c6e,0xff060202,0xff020101,0xff5d7bcb,0xff3f62bf,0xff090d18,0xff2a3966,0xff4165c6,0xff162242,0xff0a0e18,0xff567bdc,0xff2c4587,0xff070102,0xff370c10,
+ 0xff3a0d12,0xf93b0d12,0x8b000000,0x59000000,0x37000000,0xfe995f65,0xff975d63,0xff8f585d,0xff000000,0xffcbd2f1,0xffbfc9ed,0xffb8c2ec,0xffb7c2ec,0xffb7c1eb,
+ 0xffb6c0ec,0xffb6c1ec,0xffb0bae4,0xff949dc0,0xff53586d,0xff0a0203,0xff070202,0xff5d77bc,0xff4064c4,0xff1c284d,0xff242f53,0xff446bd0,0xff1d2e59,0xff000000,
+ 0xff5d80dd,0xff2d468a,0xff060102,0xff340c0f,0xff370c11,0xfe3b0d12,0x90000000,0x5e000000,0x38000000,0xf392565b,0xff92565c,0xff8a5156,0xff000000,0xffbbc5ed,
+ 0xffa8b9e8,0xff9ca8d7,0xffa2b0e3,0xffa8b5e5,0xffa9b6e8,0xffaab5e8,0xffa4b0e1,0xff8995bc,0xff4f556b,0xff080202,0xff040101,0xff617bc0,0xff3f63c1,0xff141d38,
+ 0xff253052,0xff456cd3,0xff1c2b54,0xff000000,0xff5b7fdd,0xff2c4586,0xff060101,0xff310b0e,0xff340c10,0xfa350c0f,0x92000000,0x5f000000,0x37000000,0xe0874c52,
+ 0xff8f5056,0xff864a4f,0xff000000,0xff95a5e5,0xff7482b2,0xff6c79a7,0xff8190c5,0xff93a3dd,0xff99a9e6,0xff99a9e5,0xff94a2dd,0xff7b88b8,0xff4b516c,0xff020001,
+ 0xff000000,0xff6e8de1,0xff3d5fba,0xff010000,0xff435a98,0xff4368cc,0xff121d38,0xff171f34,0xff5378db,0xff253a71,0xff050101,0xff2f0a0e,0xff320b0f,0xf32e090d,
+ 0x90000000,0x5e000000,0x34000000,0xc4773f45,0xff8a494e,0xff834348,0xff010101,0xff24293a,0xff12151d,0xff090a0e,0xff272e43,0xff7a8fd1,0xff869ae0,0xff879be2,
+ 0xff8395d7,0xff6c7db4,0xff404a6d,0xff000000,0xff364263,0xff587ddd,0xff3b5db5,0xff010000,0xff5d80dd,0xff3f62bf,0xff06080f,0xff3a4c7b,0xff446bd0,0xff172345,
+ 0xff070102,0xff2d0b0e,0xff300b0f,0xe727090c,0x8b000000,0x59000000,0x2f000000,0x9f613136,0xff864148,0xff813d43,0xff462024,0xff3f1b1e,0xff3a171a,0xff210c0e,
+ 0xff000000,0xff232c47,0xff6e85d6,0xff728cdc,0xff7189d5,0xff6073b3,0xff344066,0xff000000,0xff6587df,0xff4369ce,0xff0e1426,0xff1e2948,0xff4c73da,0xff324d97,
+ 0xff010000,0xff6385df,0xff3a5bb2,0xff070b16,0xff0d0304,0xff2b0a0d,0xff300b0e,0xd31c0607,0x83000000,0x53000000,0x29000000,0x70401e21,0xf77f3940,0xff7d363d,
+ 0xff793138,0xff722b32,0xff68242b,0xff601e23,0xff270a0d,0xff000000,0xff1c2644,0xff5678d3,0xff5e79d2,0xff516ab4,0xff2e3c65,0xff29375b,0xff446bd0,0xff2e488d,
+ 0xff010102,0xff5b7fdd,0xff4267c9,0xff121b35,0xff1b233d,0xff4e75da,0xff2f488e,0xff000000,0xff180508,0xff2c0a0d,0xfc2e0a0d,0xb80f0406,0x76000000,0x4a000000,
+ 0x21000000,0x3f000000,0xc6662a30,0xff7b3038,0xff772b32,0xff72252c,0xff6b1f26,0xff651920,0xff5c151b,0xff25090b,0xff000000,0xff162243,0xff4d6fd0,0xff4161ba,
+ 0xff283763,0xff000000,0xff1b2a52,0xff090f1d,0xff557adc,0xff466ed6,0xff2b4382,0xff010000,0xff5f82de,0xff3a5bb3,0xff0e162a,0xff030101,0xff22070a,0xff2b090d,
+ 0xe821080a,0x96000000,0x68000000,0x3f000000,0x19000000,0x33000000,0x8843181c,0xf8752930,0xff74252b,0xff701f26,0xff6c1921,0xff66171e,0xff60161d,0xff59141a,
+ 0xff24080b,0xff000000,0xff122348,0xff345dbb,0xff1f3d7f,0xff050101,0xff140506,0xff06070f,0xff4166c7,0xff3d5eb9,0xff020305,0xff5879d1,0xff4267c9,0xff263b73,
+ 0xff000000,0xff110405,0xff29090c,0xfc2a090c,0xc6120405,0x83000000,0x57000000,0x33000000,0x12000000,0x26000000,0x45000000,0xbc571b20,0xff711e26,0xff6e1921,
+ 0xff6b1820,0xff67181f,0xff62161d,0xff5c151b,0xff541319,0xff22070a,0xff000000,0xff233a71,0xff243e7f,0xff080102,0xff26090c,0xff030101,0xff010001,0xff010000,
+ 0xff3554a3,0xff4267ca,0xff2e498e,0xff010103,0xff040101,0xff22080a,0xff2a090d,0xe21c0709,0x98000000,0x6e000000,0x45000000,0x26000000,0xb000000,0x1b000000,
+ 0x33000000,0x6c24090c,0xd75a151b,0xff6a1820,0xff68181f,0xff65171e,0xff60161d,0xff5b141b,0xff561419,0xff4e1217,0xff1b0609,0xff060102,0xff0c0c18,0xff0d0304,
+ 0xff350c10,0xff290a0d,0xff25080b,0xff090202,0xff18264b,0xff2e478c,0xff0b1223,0xff010001,0xff1c0608,0xff29090d,0xef21060a,0xb2090001,0x7e000000,0x56000000,
+ 0x33000000,0x1b000000,0x6000000,0x11000000,0x23000000,0x3e000000,0x85300b0e,0xe058141a,0xff65171e,0xff62161d,0xff5e151c,0xff5a151b,0xff561319,0xff4f1218,
+ 0xff471015,0xff3b0d12,0xff350c10,0xff320b0f,0xff380d11,0xff360c10,0xff330b0f,0xff1f0709,0xff100405,0xff0f0405,0xff0f0305,0xff1c0609,0xff29090d,0xf223070b,
+ 0xc00f0104,0x89000000,0x62000000,0x3f000000,0x23000000,0x11000000,0x3000000,0xa000000,0x16000000,0x2a000000,0x46000000,0x8a2c0a0d,0xdb4f1217,0xff5e151c,
+ 0xff5b151b,0xff58141a,0xff541319,0xff4f1217,0xff4a1116,0xff451015,0xff400f14,0xff3d0e13,0xff3a0d12,0xff370c11,0xff350c10,0xff310b0f,0xff2e0b0e,0xff2c0a0d,
+ 0xff2b0a0d,0xff2b0a0d,0xef21070a,0xc00f0104,0x8d000000,0x68000000,0x47000000,0x2a000000,0x16000000,0xa000000,0x1000000,0x5000000,0xd000000,0x1a000000,
+ 0x2e000000,0x48000000,0x7b1b0608,0xc8410f13,0xf956131a,0xff55131a,0xff521319,0xff4e1218,0xff4a1116,0xff451015,0xff410f13,0xff3e0f12,0xff3b0e12,0xff380d11,
+ 0xff360d10,0xff330c0f,0xff310b0f,0xff2f0a0e,0xfc2c090d,0xe11c0608,0xb20a0103,0x89000000,0x68000000,0x49000000,0x2e000000,0x1a000000,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x2e000000,0x46000000,0x60000000,0xa229090c,0xd73f0e13,0xfa4d1117,0xff4c1117,0xff491116,0xff451015,
+ 0xff410f14,0xff3f0e13,0xff3c0e12,0xff3a0d11,0xff360d11,0xff350c10,0xfc320b0f,0xe722080b,0xc5130506,0x97000000,0x7e000000,0x62000000,0x47000000,0x2f000000,
+ 0x1b000000,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0xe000000,0x1a000000,0x2a000000,0x3e000000,0x55000000,0x6c000000,
+ 0x9b1b0608,0xc22c0a0d,0xde350c10,0xef3c0e12,0xf93f0e13,0xfe3f0e13,0xfa390d11,0xf2310b0e,0xe529090c,0xd11f0709,0xb50f0406,0x93000000,0x82000000,0x6d000000,
+ 0x56000000,0x3f000000,0x2b000000,0x1a000000,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x33000000,0x45000000,0x56000000,0x67000000,0x75000000,0x81000000,0x89000000,0x8e000000,0x90000000,0x8e000000,0x89000000,0x81000000,
+ 0x75000000,0x67000000,0x56000000,0x45000000,0x33000000,0x23000000,0x16000000,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,0x33000000,0x3f000000,0x4a000000,0x53000000,0x59000000,0x5e000000,
+ 0x5f000000,0x5e000000,0x59000000,0x53000000,0x4a000000,0x3f000000,0x33000000,0x26000000,0x1b000000,0x11000000,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb SoundPlayer_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3e000000,0x3e000000,0x3f000000,0x3f000000,0x3f000000,0x3f000000,0x3e000000,0x3e000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff070566,0xff08056e,0xff08056d,0xff07056c,
+ 0xff07056c,0xff07056c,0xff07056c,0xff07056c,0xff07056c,0xff07056c,0xff07056c,0xff07056b,0xff07056b,0xff07056b,0xff07056b,0xff07056b,0xff07056b,0xff07056b,
+ 0xff07056c,0xff07056c,0xff07056c,0xff07056c,0xff07056c,0xff07056b,0xff070567,0xff06045d,0xff040346,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff070567,0xffcfd8d5,0xffbfcec8,0xffb0c3bc,0xffabbfb8,0xffaabfb7,0xffaabfb7,0xffaabeb7,0xffaabeb7,0xffaabeb6,0xffaabcb5,0xffa9bcb5,0xffa9bab4,0xffa8bab4,
+ 0xffa8bab3,0xffa8bab3,0xffa9bbb4,0xffa9bcb4,0xffaabdb6,0xffaabeb6,0xffaabeb7,0xffaabeb7,0xffaabeb6,0xffa9bcb6,0xffa5b4af,0xff929e9c,0xff04033d,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff08056d,0xffc2d6cf,0xff8cb8a8,0xff67a28d,0xff5b9b84,0xff5a9983,0xff5a9882,0xff5a9781,0xff5a947f,0xff59927e,
+ 0xff588f7c,0xff588b79,0xff578876,0xff578674,0xff578474,0xff648f7f,0xff578977,0xff588d7a,0xff58917d,0xff5a947f,0xff5a9780,0xff5a9881,0xff5a9881,0xff5a937f,
+ 0xff568174,0xff4c5e5a,0xff02011e,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff070567,0xffafc3bc,0xff649282,0xff316d58,0xff22614b,0xff1f5e49,
+ 0xff1f5b46,0xff1f5743,0xff1d5441,0xff1d4f3d,0xff1d4a3a,0xff1b4436,0xff1a4033,0xff5c766d,0xffb8c3bf,0xfffafbfb,0xff1b4334,0xff1b493a,0xff1c4f3d,0xff1d543f,
+ 0xff1e5641,0xff1e5843,0xff1e5844,0xff1e5541,0xff1b473a,0xff162623,0xff010008,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff07056c,0xffb0cac1,
+ 0xff5b9b84,0xff26795b,0xff156b4c,0xff136446,0xff115c41,0xff0f553c,0xff0e4c36,0xff0d4230,0xff375d4f,0xff90a29b,0xffe9eceb,0xffffffff,0xffffffff,0xffffffff,
+ 0xff093121,0xff0b3b28,0xff0b422c,0xff0d4931,0xff0e4e34,0xff0e5137,0xff0f5339,0xff0f5239,0xff0c4130,0xff061c17,0xff000002,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff070566,0xffaabfb7,0xff578877,0xff205e49,0xff0e4e37,0xff0b4531,0xff0a3d2b,0xff1a4334,0xff6f847c,0xffd2d7d6,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff03180e,0xff031d11,0xff052314,0xff052616,0xff052a18,0xff062c1a,0xff062f1c,0xff062f1e,0xff06271b,0xff02100d,
+ 0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff07056c,0xffafcac1,0xff5a9983,0xff247456,0xff116044,0xff0d533a,0xffb3c5bf,0xfffafbfb,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff021209,0xff03170b,0xff031c0c,0xff092211,0xff0d2816,0xff0f2c18,
+ 0xff153320,0xff0d2c1a,0xff072517,0xff02100c,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff070566,0xffaabfb7,0xff578776,0xff1f5b47,
+ 0xff0d4632,0xff093a29,0xfff6f8f7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe8e9e8,0xffd1d2d2,0xff767977,0xff09100a,0xff202520,
+ 0xff3d423c,0xff4b4d49,0xff5f605e,0xff565755,0xff585a57,0xff464846,0xff282c29,0xff101314,0xff000005,0x9b020202,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff07056c,0xffafcac1,0xff5a9882,0xff247055,0xff115940,0xff0c4732,0xffe6eae9,0xffffffff,0xffffffff,0xffffffff,0xfff6f6f6,0xffa7aaa9,0xff4b4f4c,0xff010702,
+ 0xffa5a6a5,0xff6f706f,0xff343434,0xff5d5959,0xff5e5b5a,0xff716a68,0xff7a6f6a,0xff656060,0xff5b524e,0xff5f595a,0xff2f2f31,0xff1a1a1f,0xff010110,0xb9212117,
+ 0x7d242419,0x3f060604,0x1f000000,0x3d000000,0xff070566,0xffaabfb7,0xff578776,0xff1f5945,0xff0c4230,0xff083425,0xffeef0f0,0xffffffff,0xffc7cbc9,0xff626865,
+ 0xff0f1612,0xff010602,0xff050a06,0xff1a1c1a,0xffb2b1b1,0xff838181,0xff534c4b,0xff635a5a,0xff8c8383,0xff9d908e,0xff827777,0xff736a69,0xff695d57,0xff5a595a,
+ 0xff474a4a,0xff222429,0xff020119,0xcc313122,0xac4f4f37,0x6e57573d,0x1f000000,0x3d000000,0xff07056c,0xffafcac1,0xff5a9882,0xff236e53,0xff0f543c,0xff0b422d,
+ 0xffe9eceb,0xff3c5048,0xff03140b,0xff010e07,0xff010a04,0xff171c17,0xff343434,0xff423f3e,0xffbfbcba,0xff898485,0xff484141,0xff5f5757,0xff847a7a,0xff928380,
+ 0xff776c6c,0xff695e5b,0xff5d5757,0xff515552,0xff3b3f3f,0xff25272c,0xff02011b,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3d000000,0xff070566,0xffaabfb7,
+ 0xff578676,0xff1f5643,0xff0c402c,0xff072f20,0xffe8ebea,0xff192a22,0xff020e06,0xff010b03,0xff1f241f,0xff414040,0xff5a5150,0xff5c5050,0xffbdb9b8,0xff898484,
+ 0xff4b4344,0xff5d5455,0xff877d7d,0xff90837f,0xff756967,0xff645954,0xff595b59,0xff4f5650,0xff3f4343,0xff2a2c33,0xff02011e,0xcc313122,0xb354543b,0x9e777754,
+ 0x1f000000,0x3e000000,0xff07056c,0xffafc9c0,0xff5a9580,0xff22684e,0xff0e4b34,0xff083724,0xffe8ebea,0xff1a2c21,0xff011005,0xff2a2f2a,0xff4b4b48,0xff655c54,
+ 0xff645954,0xff544949,0xffbfbbbb,0xff8f8784,0xff4e4444,0xff5a5151,0xff837879,0xff8c8080,0xff6d6260,0xff5d595a,0xff555c55,0xff535954,0xff4a4d4d,0xff303039,
+ 0xff020122,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3e000000,0xff070566,0xffaabeb6,0xff568172,0xff1d4d3c,0xff0a3323,0xff052215,0xffe8eae9,0xff18241c,
+ 0xff161d16,0xff4a4a49,0xff766856,0xffaba195,0xffdad7d4,0xffd6d3d2,0xffd3d1d1,0xff8f8888,0xff524848,0xff584f4f,0xff7b7171,0xff83736f,0xff675e5b,0xff535853,
+ 0xff555c54,0xff5f6460,0xff56575c,0xff363540,0xff020122,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3e000000,0xff07056b,0xffadc6be,0xff588c7a,0xff1f5642,
+ 0xff0a3624,0xff052314,0xffe8eae9,0xff1d2920,0xff444643,0xff655b4f,0xff877451,0xffdcd8d1,0xffffffff,0xffffffff,0xffefeeee,0xff908988,0xff554948,0xff5f5454,
+ 0xff978d8d,0xffa3948c,0xff8d8e8d,0xff7d857d,0xff797e7a,0xff737375,0xff656064,0xff3d383e,0xff030123,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3f000000,
+ 0xff070565,0xffa8bab4,0xff557a6c,0xff677f76,0xffc1c8c5,0xffc0c5c3,0xfff0f1f0,0xff363a35,0xff474441,0xff7e6743,0xff715c38,0xffdad6ce,0xffffffff,0xffffffff,
+ 0xffd7d5cf,0xff5f5446,0xff70635e,0xff827978,0xff4b4746,0xff383737,0xff363837,0xff6e6f6d,0xffb0adad,0xff9f938c,0xff726764,0xff443e44,0xff030226,0xcc313122,
+ 0xb354543b,0x9e777754,0x1f000000,0x3f000000,0xff07056b,0xffacc3bb,0xff568373,0xffc7d2cd,0xffffffff,0xffffffff,0xffd8dad9,0xff3a3b39,0xff574736,0xff6c4e26,
+ 0xff694c28,0xff978570,0xffd7d1ca,0xffd5d0ca,0xff928572,0xff736340,0xff837968,0xff1c1b19,0xff111810,0xff131e14,0xff131912,0xff111310,0xff3a3837,0xffbeb4ae,
+ 0xff817571,0xff4c454d,0xff03022a,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3f000000,0xff070465,0xffa8b9b2,0xff547569,0xffc6ceca,0xffffffff,0xffffffff,
+ 0xffc6c8c6,0xff383735,0xff664d33,0xff705133,0xff735333,0xff6f4f30,0xff65472d,0xff5f442a,0xff5f442c,0xff856f5d,0xff26211d,0xff080c08,0xff11291b,0xff031b0d,
+ 0xff011406,0xff2f362e,0xff373737,0xffc4bbb5,0xff8b7e7a,0xff4e464e,0xff03022a,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3f000000,0xff07056b,0xffacc2bb,
+ 0xff568371,0xff678378,0xffc1c8c5,0xffc0c5c2,0xff6c706c,0xff463f35,0xff7b5e3b,0xff83643e,0xff896840,0xff886942,0xff836541,0xff7d5f3e,0xff876d51,0xff86796d,
+ 0xff070706,0xff102517,0xff04230f,0xff021c0a,0xff091d0d,0xff575c56,0xff696763,0xffc9beb3,0xff837871,0xff4c454b,0xff030229,0xcc313122,0xb354543b,0x9e777754,
+ 0x1f000000,0x3e000000,0xff070565,0xffa8bab4,0xff54786b,0xff1a3d2f,0xff061e12,0xff06140b,0xff313331,0xff564935,0xff947749,0xff987b4e,0xff9f8154,0xffa3845a,
+ 0xffa08460,0xff9f8765,0xffbcae93,0xff868276,0xff080907,0xff212d22,0xff19261b,0xff1f2a1f,0xff515650,0xff696a69,0xffb2b5b2,0xff9a9a96,0xff706c6a,0xff444147,
+ 0xff030226,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3e000000,0xff07056b,0xffadc5bd,0xff588a78,0xff1d523d,0xff082f1c,0xff102518,0xff474844,0xff766244,
+ 0xffa58a62,0xffa88c68,0xffb39677,0xffbaa182,0xffbcac8e,0xffbdb097,0xffbfb09f,0xffb6a9a3,0xff433f3e,0xff262725,0xff474846,0xff595b58,0xff606060,0xff9c9f9c,
+ 0xffb0b7b0,0xff7b857e,0xff65686c,0xff3b3b47,0xff020126,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3e000000,0xff070566,0xffa9bcb5,0xff567f70,0xff1b4938,
+ 0xff072b1b,0xff12271a,0xff484847,0xff8a745a,0xffbba084,0xffbaa089,0xffc0a793,0xffc7b99f,0xffc7b9a5,0xffc2ad9d,0xffb99f91,0xffd0b9af,0xffd0c0ba,0xff9e9898,
+ 0xff857f7f,0xff888787,0xffd0d1d0,0xffa1a4a1,0xff7f867f,0xff7b847e,0xff5e6564,0xff373a42,0xff020126,0xcc313122,0xb354543b,0x9e777754,0x1f000000,0x3d000000,
+ 0xff07056c,0xffafc8bf,0xff59927d,0xff216149,0xff0c412b,0xff103320,0xff4f524c,0xff897665,0xffc6ae9d,0xffc1ac9c,0xffc4b4a4,0xffc4b4a3,0xffc2ad9c,0xffbfa899,
+ 0xffc0a599,0xffb89a90,0xffae9a8e,0xff9e9191,0xff998f8f,0xffb4b0b0,0xffacb0ac,0xff909390,0xff80847f,0xff797d7a,0xff5a5f5f,0xff33373d,0xff020123,0xcc313122,
+ 0xb354543b,0x9e777754,0x1f000000,0x3d000000,0xff070465,0xffa9bcb5,0xff568172,0xff1d503e,0xff093725,0xff09291b,0xff414641,0xff9a8778,0xffc0b0a4,0xffb7aa9c,
+ 0xffb6a798,0xffb5a092,0xffb49e92,0xffb39d94,0xffac9189,0xffa38d82,0xff8d7c78,0xff736769,0xff786d6f,0xff888385,0xffa1a3a4,0xff9d9f9f,0xff7e7f80,0xff6c6f6f,
+ 0xff54575a,0xff31333b,0xff020120,0xcc313122,0xb354543b,0x9e777754,0x1d000000,0x3b000000,0xff070567,0xffa9bcb7,0xff558173,0xff1e5443,0xff0b3d2c,0xff072f1f,
+ 0xff18241b,0xff4c4746,0xff978b87,0xff8b7e78,0xff877772,0xff877571,0xff877673,0xff85706f,0xff7e6b68,0xff776865,0xff63565a,0xff574e53,0xff5d565c,0xff6b666c,
+ 0xff78777e,0xff797b81,0xff6b6d72,0xff55575c,0xff3f4048,0xff282a34,0xff020120,0xc9343425,0xb157573d,0x9d797955,0x1b000000,0x36000000,0xff060459,0xff929e9c,
+ 0xff4b5855,0xff152623,0xff051512,0xff02100d,0xff040d0a,0xff101013,0xff4f464d,0xff4f464b,0xff4e444b,0xff4e444d,0xff4c4048,0xff483d44,0xff473f44,0xff41383e,
+ 0xff352e38,0xff332f39,0xff34313c,0xff3d3a46,0xff444452,0xff464855,0xff41424f,0xff363743,0xff262733,0xff20212d,0xff020122,0xc33b3b2a,0xad5d5d41,0x9b7e7e59,
+ 0x17000000,0x2e000000,0xff040346,0xff04033e,0xff02011e,0xff010009,0xff000002,0xff000001,0xff000001,0xff000003,0xff010113,0xff03022a,0xff03022b,0xff030226,
+ 0xff030125,0xff030225,0xff030123,0xff02011f,0xff02011e,0xff02011e,0xff020120,0xff020126,0xff03022c,0xff03022e,0xff03022d,0xff020129,0xff020122,0xff020120,
+ 0xff03022a,0xba494933,0xa7676749,0x7e7b7b56,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x9b020202,
+ 0xbc242419,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,0xcc313122,
+ 0xcc313122,0xcc313122,0xc9343425,0xc33b3b2a,0xba494933,0xad5b5b3f,0x7b626245,0x2f29291d,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x7113130d,0x9941412d,0xb354543b,0xb354543b,0xb354543b,0xb354543b,0xb354543b,0xb354543b,0xb354543b,0xb354543b,
+ 0xb354543b,0xb354543b,0xb354543b,0xb354543b,0xb354543b,0xb354543b,0xb157573d,0xad5d5d41,0xa4676748,0x735b5b40,0x3326261b,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x481e1e15,0x735b5b40,0x98747452,0x9e777754,0x9e777754,
+ 0x9e777754,0x9e777754,0x9e777754,0x9e777754,0x9e777754,0x9e777754,0x9e777754,0x9e777754,0x9e777754,0x9e777754,0x9d797955,0x7f70704e,0x5052523a,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Spreadsheet_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e000000,0x3f000000,0x3f000000,0x3f000000,0x3f000000,0x3f000000,0x3f000000,0x3f000000,0x3f000000,
+ 0x3f000000,0x3e000000,0x3c000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff09068a,0xff09068a,0xff09068a,0xff090689,
+ 0xff090689,0xff090689,0xff090689,0xff090689,0xff090689,0xff090689,0xff090689,0xff080688,0xff080688,0xff080688,0xff080687,0xff080687,0xff080686,0xff080686,
+ 0xff080686,0xff080686,0xff080686,0xff080686,0xff080687,0xff080687,0xff080688,0xff070686,0xff070682,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff09068a,0xffddffff,0xffdbfefd,0xffd9fcfa,0xffd2f8f3,0xffcef7ef,0xffcdf6ee,0xffcdf6ee,0xffccf6ee,0xffccf6ee,0xffcbf5ed,0xffc8f4ec,0xffc7f3eb,0xffc5f2ea,
+ 0xffc2f1e9,0xffbff0e8,0xffbceee7,0xffb9ede6,0xffb8ede6,0xffb7ede6,0xffb6ede6,0xffb5eee7,0xffb6f0e8,0xffb4f1e9,0xffb2efe7,0xffade7e0,0xff070575,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff09068a,0xffdcfefe,0xffd9fcfa,0xffc9f3e9,0xffb1e5cf,0xffa3ddbf,0xff9fdbba,0xff9ddab9,0xff9ddab9,0xff9cd9b8,
+ 0xff9bd8b8,0xff99d7b7,0xff97d6b5,0xff95d4b4,0xff92d3b3,0xff90d1b2,0xff8ed1b1,0xff8cd0b0,0xff8bcfb0,0xff89cfb0,0xff88cfb0,0xff87d0b0,0xff87d1b2,0xff85ceaf,
+ 0xff82caab,0xff7fc4a6,0xff050458,0x75000000,0x4f000000,0x2e000000,0x1b000000,0x36000000,0xff09068a,0xffdcfffe,0xffd2f9f3,0xffb2e6cf,0xff7dc897,0xff5bb472,
+ 0xff52af68,0xff51ae67,0xff51ad67,0xff50ad66,0xff4fab65,0xff4dab65,0xff4da964,0xff4ba863,0xff4ba763,0xff49a562,0xff48a461,0xff46a361,0xff45a260,0xff45a260,
+ 0xff44a260,0xff44a260,0xff43a05f,0xff429d5d,0xff40995b,0xff3e9659,0xff02032f,0x88000000,0x5b000000,0x37000000,0x1d000000,0x3b000000,0xff09068a,0xffdbfefd,
+ 0xffcff7f0,0xffa2ddbe,0xff5db573,0xff86c28c,0xff63b06b,0xff63af6b,0xff62af6a,0xff61ad69,0xff61ad69,0xff60ab68,0xff60aa68,0xff5fa967,0xff5ea866,0xff5ea665,
+ 0xff5ca464,0xff5ca363,0xff5ba262,0xff5aa061,0xff5aa061,0xff5aa162,0xff5ba263,0xff5ca464,0xff5ea665,0xff5fa967,0xff040438,0x95000000,0x63000000,0x3c000000,
+ 0x1f000000,0x3d000000,0xff09068a,0xffdbfefd,0xffcdf6ee,0xff9fdbba,0xff52ae68,0xff63b06b,0xff158821,0xff158821,0xff158720,0xff158620,0xff158620,0xff148520,
+ 0xff148420,0xff148320,0xff14821f,0xff14811f,0xff147f1f,0xff137e1e,0xff137d1e,0xff137b1e,0xff137a1d,0xff137a1d,0xff137b1e,0xff137d1e,0xff147f1f,0xff14811f,
+ 0xff010311,0x9b000000,0x68000000,0x3e000000,0x1f000000,0x3d000000,0xff09068a,0xffdbfefd,0xffcdf6ee,0xff9edab9,0xff51ae67,0xff63af6b,0xff158721,0xff158720,
+ 0xff158620,0xff158620,0xff148520,0xff148520,0xff148420,0xff148420,0xff14831f,0xff14811f,0xff14801f,0xff137e1e,0xff137c1e,0xff137a1d,0xff12781d,0xff12781d,
+ 0xff12781d,0xff137a1d,0xff137d1e,0xff147f1f,0xff010311,0x9c000000,0x69000000,0x3f000000,0x1f000000,0x3d000000,0xff09068a,0xffdbfefd,0xffccf6ee,0xff9ddab9,
+ 0xff51ad67,0xff137e1f,0xff0b4411,0xff0b4411,0xff0b4311,0xff0b4311,0xff0b4311,0xff0b4311,0xff0b4310,0xff0b4310,0xff0b4210,0xff0a4210,0xff0a4110,0xff0a4010,
+ 0xff0a3f0f,0xff0a3d0f,0xff0a3c0f,0xff093c0f,0xff093c0f,0xff0a3c0f,0xff0a3d0f,0xff0a3f0f,0xff000209,0x9d000000,0x6a000000,0x3f000000,0x1f000000,0x3d000000,
+ 0xff09068a,0xffdafefd,0xffccf6ee,0xff9cd9b8,0xff50ad66,0xff4a4a4a,0xff616161,0xff6c6c6c,0xff6c6c6c,0xff6c6c6c,0xff6c6c6c,0xff6c6c6c,0xff6c6c6c,0xff6c6c6c,
+ 0xff6c6c6c,0xff6b6b6b,0xff6a6a6a,0xff686868,0xff656565,0xff636363,0xff616161,0xff5f5f5f,0xff5e5e5e,0xff5f5f5f,0xff616161,0xff636363,0xff040237,0x9e000000,
+ 0x6b000000,0x40000000,0x1f000000,0x3d000000,0xff09068a,0xffdafefd,0xffcbf5ed,0xff9cd8b8,0xff4fab65,0xff616161,0xffa6a6a6,0xffc8c8c8,0xffc9c9c9,0xffc9c9c9,
+ 0xffcacaca,0xffcbcbcb,0xffcbcbcb,0xffcbcbcb,0xffcacaca,0xff9a9a9a,0xffc7c7c7,0xffc3c3c3,0xffbfbfbf,0xff8f8f8f,0xffb4b4b4,0xffb0b0b0,0xffadadad,0xff858585,
+ 0xffafafaf,0xffb4b4b4,0xff070465,0xa0000000,0x6c000000,0x41000000,0x1f000000,0x3d000000,0xff09068a,0xffd8fdfc,0xffc9f4ec,0xff9ad7b6,0xff4eab65,0xff6c6c6c,
+ 0xffc8c8c8,0xfff8f8f8,0xfff9f9f9,0xfffafafa,0xfffbfbfb,0xfffcfcfc,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xffc1c1c1,0xfff8f8f8,0xfff4f4f4,0xffeeeeee,0xffb2b2b2,
+ 0xffe0e0e0,0xffd9d9d9,0xffd5d5d5,0xffa3a3a3,0xffd6d6d6,0xffdbdbdb,0xff09057b,0xa1000000,0x6d000000,0x42000000,0x1f000000,0x3d000000,0xff090689,0xffd5fcfb,
+ 0xffc8f3eb,0xff97d6b5,0xff4da964,0xff6c6c6c,0xffc8c8c8,0xfff8f8f8,0xfff9f9f9,0xfffbfbfb,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xfffefefe,0xfffdfdfd,0xffc2c2c2,
+ 0xfffafafa,0xfff7f7f7,0xfff1f1f1,0xffb3b3b3,0xffe1e1e1,0xffd9d9d9,0xffd3d3d3,0xffa1a1a1,0xffd2d2d2,0xffd8d8d8,0xff090579,0xa2000000,0x6e000000,0x42000000,
+ 0x1f000000,0x3d000000,0xff080689,0xffd3fbfa,0xffc4f1e9,0xff96d4b4,0xff4ca863,0xff484848,0xff606060,0xff6c6c6c,0xff6c6c6c,0xff6d6d6d,0xff6e6e6e,0xff6f6f6f,
+ 0xff6f6f6f,0xff6f6f6f,0xff6f6f6f,0xff545454,0xff6d6d6d,0xff6c6c6c,0xff696969,0xff4e4e4e,0xff626262,0xff5e5e5e,0xff5b5b5b,0xff454545,0xff5b5b5b,0xff5d5d5d,
+ 0xff040234,0xa3000000,0x6f000000,0x44000000,0x1f000000,0x3e000000,0xff080689,0xffd2faf9,0xffc2efe7,0xff93d2b2,0xff4ba763,0xff5f5f5f,0xffa3a3a3,0xffc7c7c7,
+ 0xffc9c9c9,0xffcbcbcb,0xffcccccc,0xffcdcdcd,0xffcecece,0xffcecece,0xffcecece,0xff9d9d9d,0xffcbcbcb,0xffc8c8c8,0xffc3c3c3,0xff909090,0xffb5b5b5,0xffaeaeae,
+ 0xffa8a8a8,0xff7e7e7e,0xffa6a6a6,0xffaaaaaa,0xff070460,0xa3000000,0x70000000,0x44000000,0x20000000,0x3f000000,0xff080688,0xffcff9f8,0xffbfeee7,0xff90d1b2,
+ 0xff49a662,0xff696969,0xffc4c4c4,0xfff5f5f5,0xfff8f8f8,0xfffafafa,0xfffcfcfc,0xfffdfdfd,0xfffefefe,0xffffffff,0xfffefefe,0xffc2c2c2,0xfffbfbfb,0xfff7f7f7,
+ 0xfff0f0f0,0xffb2b2b2,0xffdedede,0xffd5d5d5,0xffcecece,0xff9b9b9b,0xffcccccc,0xffd2d2d2,0xff090577,0xa3000000,0x70000000,0x44000000,0x20000000,0x3f000000,
+ 0xff080688,0xffcbf7f6,0xffbbece5,0xff8dcfb0,0xff48a461,0xff686868,0xffc3c3c3,0xfff3f3f3,0xfff6f6f6,0xfff9f9f9,0xfffbfbfb,0xfffdfdfd,0xfffdfdfd,0xfffefefe,
+ 0xfffdfdfd,0xffc2c2c2,0xfff9f9f9,0xfff4f4f4,0xffededed,0xffb0b0b0,0xffdbdbdb,0xffd1d1d1,0xffcbcbcb,0xff9a9a9a,0xffcacaca,0xffd2d2d2,0xff090577,0xa3000000,
+ 0x6f000000,0x43000000,0x20000000,0x3f000000,0xff080687,0xffc9f6f5,0xffb9ebe4,0xff8cceaf,0xff46a260,0xff464646,0xff5c5c5c,0xff686868,0xff6a6a6a,0xff6b6b6b,
+ 0xff6c6c6c,0xff6d6d6d,0xff6d6d6d,0xff6d6d6d,0xff6d6d6d,0xff535353,0xff6b6b6b,0xff686868,0xff656565,0xff4a4a4a,0xff5d5d5d,0xff595959,0xff575757,0xff424242,
+ 0xff585858,0xff5b5b5b,0xff040234,0xa3000000,0x6f000000,0x43000000,0x20000000,0x3f000000,0xff080687,0xffc7f6f5,0xffb6eae3,0xff89ccad,0xff45a15f,0xff5b5b5b,
+ 0xff9c9c9c,0xffbfbfbf,0xffc0c0c0,0xffc3c3c3,0xffc5c5c5,0xffc7c7c7,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xff979797,0xffc2c2c2,0xffbdbdbd,0xffb7b7b7,0xff868686,
+ 0xffa8a8a8,0xffa2a2a2,0xff9f9f9f,0xff7a7a7a,0xffa4a4a4,0xffababab,0xff070461,0xa2000000,0x6e000000,0x42000000,0x20000000,0x3f000000,0xff080687,0xffc4f5f4,
+ 0xffb4e9e2,0xff86cbac,0xff44a05f,0xff656565,0xffbbbbbb,0xffe8e8e8,0xffe9e9e9,0xffececec,0xffeeeeee,0xfff1f1f1,0xfff2f2f2,0xfff2f2f2,0xfff0f0f0,0xffb6b6b6,
+ 0xffe8e8e8,0xffe2e2e2,0xffdadada,0xffa1a1a1,0xffcacaca,0xffc5c5c5,0xffc3c3c3,0xff989898,0xffcdcdcd,0xffd7d7d7,0xff09057a,0xa1000000,0x6d000000,0x42000000,
+ 0x20000000,0x3f000000,0xff080687,0xffc3f5f4,0xffb2e8e1,0xff85cbac,0xff429e5e,0xff646464,0xffb7b7b7,0xffe3e3e3,0xffe4e4e4,0xffe5e5e5,0xffe7e7e7,0xffe9e9e9,
+ 0xffeaeaea,0xffe9e9e9,0xffe8e8e8,0xffafafaf,0xffdfdfdf,0xffd9d9d9,0xffd2d2d2,0xff9c9c9c,0xffc5c5c5,0xffc2c2c2,0xffc3c3c3,0xff9a9a9a,0xffd1d1d1,0xffdbdbdb,
+ 0xff09057c,0x9f000000,0x6b000000,0x40000000,0x20000000,0x3f000000,0xff080687,0xffc2f5f4,0xffb1e9e2,0xff84cbac,0xff429e5e,0xff434343,0xff575757,0xff616161,
+ 0xff616161,0xff616161,0xff626262,0xff626262,0xff626262,0xff626262,0xff616161,0xff494949,0xff5d5d5d,0xff5b5b5b,0xff585858,0xff424242,0xff545454,0xff545454,
+ 0xff565656,0xff444444,0xff5d5d5d,0xff626262,0xff040237,0x9e000000,0x6a000000,0x3f000000,0x20000000,0x3f000000,0xff080688,0xffc1f6f5,0xffb0eae3,0xff84cbad,
+ 0xff419b5c,0xff585858,0xff959595,0xffb2b2b2,0xffb0b0b0,0xffafafaf,0xffafafaf,0xffafafaf,0xffaeaeae,0xffaeaeae,0xffacacac,0xff818181,0xffa6a6a6,0xffa2a2a2,
+ 0xff9f9f9f,0xff787878,0xff9d9d9d,0xff9e9e9e,0xffa4a4a4,0xff838383,0xffb2b2b2,0xffbababa,0xff080568,0x9d000000,0x69000000,0x3f000000,0x20000000,0x3f000000,
+ 0xff080688,0xffc1f7f6,0xffb1ece5,0xff81c8aa,0xff40985a,0xff646464,0xffb5b5b5,0xffdcdcdc,0xffd9d9d9,0xffd7d7d7,0xffd5d5d5,0xffd4d4d4,0xffd2d2d2,0xffd0d0d0,
+ 0xffcecece,0xff9c9c9c,0xffc8c8c8,0xffc5c5c5,0xffc3c3c3,0xff969696,0xffc6c6c6,0xffcacaca,0xffd1d1d1,0xffa8a8a8,0xffe3e3e3,0xffebebeb,0xff0a0684,0x9c000000,
+ 0x68000000,0x3e000000,0x20000000,0x3e000000,0xff080688,0xffc0f9f8,0xffade8e1,0xff7fc5a7,0xff3e9559,0xff656565,0xffb7b7b7,0xffdedede,0xffdadada,0xffd6d6d6,
+ 0xffd3d3d3,0xffd1d1d1,0xffcecece,0xffcccccc,0xffcacaca,0xff9a9a9a,0xffc6c6c6,0xffc5c5c5,0xffc6c6c6,0xff9a9a9a,0xffcccccc,0xffd3d3d3,0xffdadada,0xffaeaeae,
+ 0xffeaeaea,0xfff1f1f1,0xff0a0686,0x9b000000,0x67000000,0x3e000000,0x1d000000,0x3c000000,0xff080689,0xffbef7f6,0xffaae4dd,0xff7cc1a4,0xff3d9157,0xff464646,
+ 0xff5a5a5a,0xff636363,0xff616161,0xff5e5e5e,0xff5d5d5d,0xff5b5b5b,0xff5b5b5b,0xff5a5a5a,0xff595959,0xff434343,0xff585858,0xff585858,0xff595959,0xff464646,
+ 0xff5d5d5d,0xff606060,0xff636363,0xff4e4e4e,0xff686868,0xff6b6b6b,0xff04033b,0x94000000,0x63000000,0x3b000000,0x1b000000,0x36000000,0xff080687,0xffb9efee,
+ 0xffa6ded8,0xff7cbea3,0xff43935d,0xff5e5e5e,0xff9e9e9e,0xffbbbbbb,0xffb8b8b8,0xffb4b4b4,0xffb1b1b1,0xffaeaeae,0xffacacac,0xffaaaaaa,0xffaaaaaa,0xff828282,
+ 0xffaaaaaa,0xffababab,0xffaeaeae,0xff888888,0xffb5b5b5,0xffbababa,0xffbebebe,0xff959595,0xffc7c7c7,0xffcacaca,0xff08056e,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff070684,0xff07057e,0xff060573,0xff05055d,0xff030441,0xff04033a,0xff08056a,0xff090681,0xff09067f,0xff09057d,0xff09057b,0xff090579,
+ 0xff090578,0xff090577,0xff090577,0xff07045b,0xff090578,0xff090578,0xff09057a,0xff07045f,0xff09067f,0xff090681,0xff0a0684,0xff070467,0xff0a0687,0xff0a0688,
+ 0xff0a0689,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x75000000,0x88000000,0x95000000,0x9b000000,0x9c000000,0x9d000000,
+ 0x9e000000,0xa0000000,0xa1000000,0xa2000000,0xa3000000,0xa3000000,0xa3000000,0xa3000000,0xa3000000,0xa2000000,0xa1000000,0x9f000000,0x9e000000,0x9d000000,
+ 0x9c000000,0x9b000000,0x94000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4e000000,0x5b000000,
+ 0x63000000,0x68000000,0x69000000,0x6a000000,0x6b000000,0x6c000000,0x6d000000,0x6e000000,0x6f000000,0x70000000,0x70000000,0x6f000000,0x6f000000,0x6e000000,
+ 0x6d000000,0x6b000000,0x6a000000,0x69000000,0x68000000,0x67000000,0x63000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x37000000,0x3c000000,0x3e000000,0x3f000000,0x3f000000,0x40000000,0x41000000,0x42000000,0x42000000,0x44000000,0x44000000,
+ 0x44000000,0x43000000,0x43000000,0x42000000,0x42000000,0x40000000,0x3f000000,0x3f000000,0x3e000000,0x3e000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb SystemInfo_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x6000000,0xb000000,0x12000000,0x19000000,0x21000000,0x29000000,0x2f000000,
+ 0x34000000,0x37000000,0x39040404,0x38050505,0x35050505,0x30050505,0x2a060606,0x22080808,0x1a0a0a0a,0x130d0d0d,0xc151515,0x7242424,0x3000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,0x11000000,0x1b000000,0x26000000,
+ 0x5d406844,0x93548a59,0xbe5b9b62,0xde5fa566,0xf35fab67,0xfe5eac66,0xf354a55c,0xe04b9b53,0xc5408a48,0xa033743a,0x72224f27,0x410c0c0c,0x350e0e0e,0x280d0d0d,
+ 0x1d121212,0x120e0e0e,0xb171717,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,
+ 0x16000000,0x23000000,0x6f507d54,0xba64a06a,0xf7639d6b,0xff50825a,0xff3f684a,0xff30523c,0xff254131,0xff1e3529,0xff1e3829,0xff23422c,0xff265231,0xff2c6736,
+ 0xf933803d,0xc72f7e36,0x8a205826,0x49111111,0x36131313,0x26141414,0x18151515,0xe121212,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x7000000,0xe000000,0x1a000000,0x473c5c3f,0xa7659b6a,0xf863976b,0xff497354,0xff335240,0xff2e4a3a,0xff2d493a,0xff2b4837,0xff284533,0xff23402f,
+ 0xff203b2b,0xff1b3626,0xff183023,0xff162a1f,0xff15291d,0xff1d4b27,0xfa246e2e,0xbe22702a,0x6f163919,0x42131313,0x2d111111,0x1c121212,0xf111111,0x7000000,
+ 0x2000000,0x1000000,0xffffff,0x2000000,0x6000000,0xe000000,0x1b000000,0x5f4e7752,0xcb679c6f,0xff54805f,0xff395946,0xff375643,0xff375743,0xff365742,
+ 0xff355541,0xff31543d,0xff2e503a,0xff2b4b37,0xff264630,0xff21402c,0xff1d3828,0xff193223,0xff172c1e,0xff14251b,0xff132619,0xff184f21,0xdc1a6b25,0x8917471c,
+ 0x4a151515,0x31151515,0x1d121212,0xf111111,0x7242424,0x2000000,0x1000000,0x5000000,0xd000000,0x1a000000,0x5f4e7752,0xd866986e,0xff4c7457,0xff3a5947,
+ 0xff3d5e49,0xff3e604a,0xff3e634b,0xff3e6249,0xff3b6247,0xff385f44,0xff355b3f,0xff305539,0xff2a4e34,0xff27482f,0xff214029,0xff1d3925,0xff1c3323,0xff182d1f,
+ 0xff16271b,0xff132018,0xff163b1c,0xe6196122,0x8e17441c,0x4d171717,0x31151515,0x1d1a1a1a,0xe121212,0x62b2b2b,0x3000000,0xa000000,0x16000000,0x473c5c3f,
+ 0xcb679d6f,0xff4d7658,0xff3d5e4a,0xff41634d,0xff43684f,0xff476e52,0xff456f51,0xff466f50,0xff436e4e,0xff3f6a4a,0xff396343,0xff325c3c,0xff3a5f43,0xff8a9e8f,
+ 0xff7a8f7f,0xff1f3e26,0xff1d3924,0xff1c3523,0xff1a2e20,0xff19281e,0xff16201a,0xff18381d,0xe01c6225,0x8019331b,0x4a151515,0x2d171717,0x18151515,0xb171717,
+ 0x6000000,0x11000000,0x23000000,0xa7659b6a,0xff568461,0xff3e5e4a,0xff43664f,0xff476d53,0xff4b7456,0xff4d7857,0xff4e7b59,0xff4d7c56,0xff497853,0xff44744e,
+ 0xff3c6b47,0xff35623e,0xffd6dfd8,0xffffffff,0xffffffff,0xff788c7b,0xff1d3c23,0xff1d3a24,0xff1e3524,0xff1f2f23,0xff1c2820,0xff181f1c,0xff1a4621,0xcb1d5d24,
+ 0x66171717,0x43171717,0x26141414,0x120e0e0e,0xb000000,0x1b000000,0x6f507d54,0xf8659a6c,0xff40624b,0xff41664d,0xff476f53,0xff4d7858,0xff527f5c,0xff55855f,
+ 0xff55875f,0xff54875d,0xff4f8459,0xff487e53,0xff3f7349,0xff35663e,0xfff1f4f2,0xffffffff,0xffffffff,0xff778d7b,0xff1d3f23,0xff1f3c24,0xff213b27,0xff223627,
+ 0xff222f26,0xff1e2621,0xff19211c,0xfb1d5a24,0xa71b421f,0x5a171717,0x37171717,0x1d121212,0x12000000,0x26000000,0xba64a06a,0xff4f7d59,0xff40624b,0xff466d51,
+ 0xff4d7858,0xff52815c,0xff588a62,0xff5a8e63,0xff5b9264,0xff599161,0xff538e5d,0xff4a8553,0xff3f7a49,0xff346b3e,0xff709376,0xffc3d0c5,0xff849b88,0xff1a4220,
+ 0xff1b4120,0xff1f3e24,0xff233c28,0xff253a2b,0xff26332a,0xff232c26,0xff1d2120,0xff1c3c22,0xda1f5b26,0x72191919,0x49151515,0x29131313,0x19000000,0x5d406844,
+ 0xf766a16d,0xff3d624a,0xff41674c,0xff497454,0xff4f7e59,0xff578861,0xff5c9164,0xff5f9868,0xff5e9b67,0xff5c9b65,0xff55975f,0xff4b8d54,0xff3e7f47,0xff326e3b,
+ 0xff27602f,0xff1e5226,0xff184820,0xff16421d,0xff1a4121,0xff1e4024,0xff233e28,0xff263b2c,0xff2a382e,0xff27302a,0xff222725,0xff1c231f,0xfb1f5c26,0xa01a341c,
+ 0x5b161616,0x36131313,0x21000000,0x93548a59,0xff568c5f,0xff3a5e46,0xff426a4d,0xff497654,0xff52825c,0xff578e61,0xff5e9767,0xff609f67,0xff60a369,0xff5ca265,
+ 0xff559d5d,0xff499151,0xff3a8044,0xff2d7036,0xff215f2b,0xff185222,0xff14481a,0xff13421a,0xff18401e,0xff1e3f23,0xff243f28,0xff273d2d,0xff2c3b30,0xff2b352e,
+ 0xff272d2a,0xff212323,0xff1f4825,0xc61d4822,0x6d171717,0x43131313,0x29000000,0xbe5b9b62,0xff487752,0xff3a6146,0xff416b4d,0xff497954,0xff50855a,0xff579160,
+ 0xff5c9a64,0xff5ea266,0xff5ea667,0xff5aa762,0xff509e59,0xff418f4b,0xff347d3c,0xff266d30,0xff387040,0xff407046,0xff104616,0xff134018,0xff163f1d,0xff1c3f23,
+ 0xff233e29,0xff293f2f,0xff2d3c31,0xff2d3730,0xff2a302d,0xff242727,0xff203825,0xe1205326,0x7b191919,0x4e141414,0x2f000000,0xde5fa566,0xff3d6747,0xff396043,
+ 0xff406d4a,0xff487951,0xff4f8459,0xff54915d,0xff579860,0xff59a160,0xff58a561,0xff54a85c,0xff469a50,0xff3b8b43,0xff529159,0xffc2d6c5,0xffffffff,0xffffffff,
+ 0xff4e7453,0xff0f3c14,0xff143b19,0xff1a3b20,0xff213c27,0xff293e2e,0xff2e3d33,0xff303933,0xff2e3331,0xff272a2a,0xff212e24,0xf0215a27,0x881a1a1a,0x58141414,
+ 0x34000000,0xf35fab67,0xff335a3e,0xff355f41,0xff3c6a47,0xff44764e,0xff4a8353,0xff4d8c56,0xff50955a,0xff509b59,0xff4d9d56,0xff469c50,0xff3c9044,0xff55985d,
+ 0xffc3d7c5,0xffe1eae2,0xffffffff,0xffffffff,0xff395e3f,0xff0d3614,0xff133617,0xff19381e,0xff213b26,0xff2a3d2f,0xff2f3d33,0xff333b35,0xff303532,0xff2a2d2d,
+ 0xff222624,0xfa235f29,0x901b1b1b,0x5f181818,0x37000000,0xfe5eac66,0xff2d5137,0xff325c3d,0xff3a6843,0xff3f7249,0xff437c4d,0xff478550,0xff478d50,0xff479250,
+ 0xff43944b,0xff398f43,0xff499452,0xffc3d9c6,0xff256b2c,0xffd0ddd2,0xffffffff,0xffdfe5e0,0xff0a3310,0xff0d3112,0xff113216,0xff19351e,0xff223927,0xff2b3c2f,
+ 0xff313d34,0xff353c37,0xff323634,0xff2c2e2e,0xff232426,0xfe25602b,0x951b1b1b,0x64171717,0x39040404,0xf354a55c,0xff2c5336,0xff2e5739,0xff35633d,0xff396c43,
+ 0xff3d7646,0xff3e7e48,0xff3f8448,0xff3b8745,0xff37863f,0xff2d8138,0xff24772c,0xff26712f,0xff2b6933,0xffffffff,0xffffffff,0xff8d9f8f,0xff092d0e,0xff0d2d11,
+ 0xff133017,0xff1a341e,0xff233827,0xff2d3c30,0xff333d36,0xff373d39,0xff343736,0xff2d2f2f,0xff242826,0xfb245a29,0x971b1b1b,0x65171717,0x38050505,0xe04b9b53,
+ 0xff2d5b37,0xff2a5334,0xff2f5d39,0xff34663d,0xff366e3f,0xff377541,0xff367a3e,0xff327b3c,0xff2c7a36,0xff22742d,0xff1a6a22,0xff0f5a18,0xff7c9d80,0xffffffff,
+ 0xffffffff,0xff36533b,0xff0a2a0f,0xff0e2b12,0xff152e18,0xff1c3320,0xff26382a,0xff303d33,0xff363e38,0xff373c39,0xff363837,0xff2d2e2f,0xff263028,0xf3225227,
+ 0x951a1a1a,0x63151515,0x35050505,0xc5408a48,0xff2f6539,0xff254d2f,0xff2a5733,0xff2d5f37,0xff316639,0xff306c3a,0xff2f6f37,0xff297033,0xff246f2d,0xff1b6924,
+ 0xff145d1c,0xff104e18,0xffd0dad2,0xffffffff,0xffdfe4e0,0xff0a270e,0xff0b2710,0xff112a14,0xff192f1c,0xff213525,0xff2b3a2e,0xff343e37,0xff39403b,0xff3a3e3c,
+ 0xff353737,0xff2d2e2f,0xff253828,0xe7214725,0x901b1b1b,0x5e161616,0x30050505,0xa033743a,0xff31743b,0xff1f4629,0xff25502e,0xff285731,0xff2a5f33,0xff2b6333,
+ 0xff296732,0xff25662d,0xff1e6427,0xff185e22,0xff15521d,0xff2f5c34,0xffffffff,0xffffffff,0xff7b8a7d,0xff0d260f,0xff0f2713,0xff152b18,0xff1e3020,0xff27372a,
+ 0xff303c33,0xff38403a,0xff3b413d,0xff3b3e3c,0xff343636,0xff2b2b2d,0xff254129,0xd51f3b22,0x87191919,0x58141414,0x2a060606,0x72224f27,0xf935853f,0xff1d4526,
+ 0xff204929,0xff25502d,0xff26572f,0xff275d2f,0xff265f2d,0xff225e2a,0xff215c29,0xff1c5625,0xff184b1f,0xff7f9783,0xffffffff,0xffffffff,0xff3b503f,0xff3d5040,
+ 0xff637065,0xff1b2f1f,0xff243528,0xff2d3b30,0xff373f39,0xff3c423e,0xff3d413f,0xff3a3c3b,0xff323334,0xff292b2b,0xfd254a29,0xbb1d2c1e,0x7b191919,0x4e141414,
+ 0x22080808,0x410c0c0c,0xc72f7e36,0xff235b2c,0xff1c4124,0xff1f4927,0xff234f2a,0xff24542c,0xff25582c,0xff25592c,0xff24562a,0xff215027,0xff1d4623,0xffd3dad4,
+ 0xffffffff,0xffffffff,0xff707d72,0xffc0c5c1,0xff2a3a2d,0xff233126,0xff2b382f,0xff343e37,0xff3b413c,0xff3e4340,0xff3d403e,0xff373939,0xff2e2e30,0xff27382a,
+ 0xe9224326,0x9a1a1a1a,0x6c151515,0x420f0f0f,0x1a0a0a0a,0x350e0e0e,0x8a205826,0xfa267431,0xff173d20,0xff1b4022,0xff1f4726,0xff234d2a,0xff27522d,0xff28522e,
+ 0xff29522e,0xff254c2b,0xff214426,0xffffffff,0xffffffff,0xfff0f1f0,0xff959d96,0xff2b3a2e,0xff233126,0xff2a372e,0xff333d36,0xff3a413c,0xff3e433f,0xff3f4340,
+ 0xff393b3b,0xff333435,0xff2a2c2c,0xfd254529,0xc81f3120,0x87191919,0x5b141414,0x350e0e0e,0x130d0d0d,0x280d0d0d,0x480e0e0e,0xbe22702a,0xff1b5b24,0xff17361d,
+ 0xff1c3d22,0xff224528,0xff264a2c,0xff2a4c2f,0xff2a4c30,0xff2a4a2f,0xff27442c,0xff4e6250,0xff5e6c60,0xff213224,0xff223125,0xff263429,0xff2b372e,0xff323c35,
+ 0xff39403b,0xff3d433f,0xff3e413f,0xff3c3d3d,0xff343536,0xff2c2c2e,0xff263b2a,0xe2213f24,0x9b1c1c1c,0x72161616,0x49111111,0x280d0d0d,0xc151515,0x1d121212,
+ 0x36131313,0x70173a1b,0xdc1b6d26,0xff18491f,0xff19331e,0xff1f3a25,0xff24402a,0xff28442d,0xff2b4530,0xff2c442f,0xff2b4230,0xff2a3e2d,0xff293a2c,0xff29372c,
+ 0xff2a372d,0xff2e3831,0xff333b35,0xff383e3a,0xff3b413d,0xff3c403e,0xff3a3c3b,0xff353737,0xff2e2e30,0xff28352a,0xf1244328,0xb41e281f,0x81181818,0x5a141414,
+ 0x350e0e0e,0x1c090909,0x7242424,0x120e0e0e,0x26141414,0x42131313,0x8917471c,0xe61a6323,0xff19451f,0xff1b3020,0xff203625,0xff243b2a,0xff293e2e,0xff2b3e30,
+ 0xff2d3f31,0xff2e3d31,0xff2e3c32,0xff2f3b33,0xff313b34,0xff343b35,0xff373d39,0xff383d3a,0xff393d3a,0xff373938,0xff333535,0xff2c2c2e,0xff28352a,0xf4234027,
+ 0xc21f2e20,0x8c1a1a1a,0x65141414,0x42131313,0x250e0e0e,0x120e0e0e,0x3000000,0xb171717,0x18151515,0x2d111111,0x4a151515,0x8e17441c,0xe01d6425,0xff1b4e22,
+ 0xff1b2f1f,0xff1f3023,0xff243428,0xff29372c,0xff2b382e,0xff2d3a31,0xff2f3931,0xff303833,0xff323834,0xff333935,0xff343936,0xff343735,0xff323434,0xff2e2f30,
+ 0xff2a2c2c,0xff263b2a,0xf1244328,0xc21f2e20,0x8f1b1b1b,0x6b151515,0x4a111111,0x2d111111,0x170b0b0b,0xa000000,0x1000000,0x5000000,0xe121212,0x1c121212,
+ 0x31151515,0x4d171717,0x8019331b,0xcb1d5d24,0xfb1e5c26,0xff1d4324,0xff1e2d21,0xff222c25,0xff262f29,0xff28302a,0xff2b322d,0xff2c322e,0xff2d322f,0xff2d302e,
+ 0xff2d2f2e,0xff2b2d2d,0xff292c2b,0xff27382a,0xfd254529,0xe2213f24,0xb41e281f,0x8c1a1a1a,0x6b151515,0x4c111111,0x30101010,0x1b090909,0xd000000,0x5000000,
+ 0xffffff,0x2000000,0x6000000,0xf111111,0x1d121212,0x31151515,0x4a151515,0x66171717,0xa71b421f,0xda1f5b26,0xfb205d27,0xff204c26,0xff213d26,0xff223225,
+ 0xff232b25,0xff242826,0xff252b26,0xff263229,0xff253829,0xff26422a,0xfd254a29,0xe9224326,0xc81f3120,0x9b1c1c1c,0x81181818,0x65141414,0x4a111111,0x30101010,
+ 0x1c090909,0xe000000,0x6000000,0x2000000,0xffffff,0x1000000,0x2000000,0x7000000,0x10202020,0x1d1a1a1a,0x2d171717,0x43171717,0x5a171717,0x72191919,
+ 0xa01a341c,0xc61d4822,0xe1205326,0xf0215a27,0xfa235f29,0xfe25602b,0xfb245a29,0xf3225227,0xe7214725,0xd51f3b22,0xbb1d2c1e,0x9a1a1a1a,0x87191919,0x72161616,
+ 0x5a141414,0x42131313,0x2d111111,0x1b090909,0xe000000,0x7000000,0x2000000,0x1000000,0xffffff,0xffffff,0x1000000,0x2000000,0x7242424,0xe121212,
+ 0x18151515,0x26141414,0x37171717,0x49151515,0x5b161616,0x6d171717,0x7b191919,0x881a1a1a,0x901b1b1b,0x951b1b1b,0x971b1b1b,0x951a1a1a,0x901b1b1b,0x87191919,
+ 0x7b191919,0x6c151515,0x5b141414,0x49111111,0x350e0e0e,0x250e0e0e,0x170b0b0b,0xd000000,0x6000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1000000,0x2000000,0x62b2b2b,0xb171717,0x120e0e0e,0x1d121212,0x29131313,0x36131313,0x43131313,0x4e141414,0x58141414,0x5f181818,0x64171717,
+ 0x65171717,0x63151515,0x5e161616,0x58141414,0x4e141414,0x420f0f0f,0x350e0e0e,0x280d0d0d,0x1c090909,0x120e0e0e,0xa000000,0x5000000,0x2000000,0x1000000,
+ 0xffffff,0xffffff
+};
+
+static const QRgb Terminal_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff050343,0xff050343,0xff050344,0xff050344,
+ 0xff050344,0xff050344,0xff050344,0xff050344,0xff050343,0xff050342,0xff050340,0xff04033e,0xff04033c,0xff040239,0xff040236,0xff040233,0xff03022f,0xff03022b,
+ 0xff030228,0xff030225,0xff030223,0xff020120,0xff02011c,0xff020119,0xff020116,0xff010113,0xff010112,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff050343,0xff7e7e7e,0xff7e7e7e,0xff7f7f7f,0xff7f7f7f,0xff7f7f7f,0xff7e7e7e,0xff7e7e7e,0xff7c7c7c,0xff7a7a7a,0xff767676,0xff717171,0xff6c6c6c,0xff676767,
+ 0xff606060,0xff5a5a5a,0xff525252,0xff4b4b4b,0xff444444,0xff3f3f3f,0xff393939,0xff333333,0xff2e2e2e,0xff272727,0xff232323,0xff222222,0xff010112,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff050344,0xff7e7e7e,0xff7f7f7f,0xff7f7f7f,0xff7e7e7e,0xff7e7e7e,0xff7d7d7d,0xff7b7b7b,0xff7c7c7c,0xff797979,
+ 0xff757575,0xff707070,0xff6a6a6a,0xff636363,0xff5d5d5d,0xff565656,0xff4d4d4d,0xff454545,0xff3f3f3f,0xff393939,0xff333333,0xff2d2d2d,0xff272727,0xff232323,
+ 0xff222222,0xff212121,0xff010111,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff050344,0xff7f7f7f,0xff7e7e7e,0xff7d7d7d,0xff7b7b7b,0xff787878,
+ 0xff787878,0xff777777,0xff797979,0xff787878,0xff747474,0xff6d6d6d,0xff686868,0xff606060,0xff5a5a5a,0xff515151,0xff494949,0xff404040,0xff393939,0xff333333,
+ 0xff2d2d2d,0xff272727,0xff232323,0xff222222,0xff212121,0xff202020,0xff010110,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff050344,0xff7f7f7f,
+ 0xff7c7c7c,0xff787878,0xff727272,0xff6d6d6d,0xff6a6a6a,0xff6e6e6e,0xff717171,0xff737373,0xff707070,0xff6c6c6c,0xff656565,0xff5e5e5e,0xff565656,0xff4d4d4d,
+ 0xff444444,0xff3b3b3b,0xff333333,0xff2d2d2d,0xff272727,0xff232323,0xff222222,0xff212121,0xff202020,0xff1e1e1e,0xff010110,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff050344,0xff7e7e7e,0xff7a7a7a,0xff717171,0xff666666,0xff52864b,0xff4b9b40,0xff5d5d5d,0xff656565,0xff6a6a6a,0xff6c6c6c,0xff696969,
+ 0xff626262,0xff5a5a5a,0xff525252,0xff494949,0xff404040,0xff363636,0xff2d2d2d,0xff272727,0xff232323,0xff222222,0xff212121,0xff202020,0xff1f1f1f,0xff1e1e1e,
+ 0xff01010f,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff050344,0xff7d7d7d,0xff777777,0xff6b6b6b,0xff51844a,0xff37f91c,0xff36ff1a,0xff419236,
+ 0xff545454,0xff5f5f5f,0xff636363,0xff636363,0xff5e5e5e,0xff585858,0xff4e4e4e,0xff454545,0xff3b3b3b,0xff313131,0xff272727,0xff232323,0xff222222,0xff212121,
+ 0xff202020,0xff1f1f1f,0xff1e1e1e,0xff1c1c1c,0xff01010f,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff050344,0xff7c7c7c,0xff747474,0xff686868,
+ 0xff40c82e,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff3d8d31,0xff4e4e4e,0xff565656,0xff5b5b5b,0xff5a5a5a,0xff525252,0xff4b4b4b,0xff404040,0xff363636,0xff2c2c2c,
+ 0xff242424,0xff232323,0xff212121,0xff202020,0xff1f1f1f,0xff1e1e1e,0xff1d1d1d,0xff1b1b1b,0xff01010e,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff050343,0xff7b7b7b,0xff767676,0xff6b6b6b,0xff585c58,0xff3ac926,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff3a8b2f,0xff474747,0xff4e4e4e,0xff505050,0xff4d4d4d,
+ 0xff454545,0xff3c3c3c,0xff313131,0xff252525,0xff232323,0xff212121,0xff202020,0xff1f1f1f,0xff1e1e1e,0xff1d1d1d,0xff1c1c1c,0xff1b1b1b,0xff01010e,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff050342,0xff797979,0xff757575,0xff6e6e6e,0xff5f5f5f,0xff4d504c,0xff38c624,0xff36ff1a,0xff36ff1a,0xff36ff1a,
+ 0xff37872b,0xff3e3e3e,0xff444444,0xff444444,0xff3e3e3e,0xff333333,0xff2a2a2a,0xff232323,0xff212121,0xff202020,0xff1f1f1f,0xff1e1e1e,0xff1d1d1d,0xff1c1c1c,
+ 0xff1b1b1b,0xff191919,0xff01010d,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff050340,0xff767676,0xff737373,0xff6f6f6f,0xff646464,0xff575757,
+ 0xff454944,0xff35c422,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff318125,0xff343434,0xff363636,0xff333333,0xff2b2b2b,0xff232323,0xff212121,0xff202020,0xff1f1f1f,
+ 0xff1e1e1e,0xff1d1d1d,0xff1b1b1b,0xff1a1a1a,0xff191919,0xff181818,0xff01010c,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff04033e,0xff717171,
+ 0xff707070,0xff6b6b6b,0xff666666,0xff5d5d5d,0xff4e4e4e,0xff3c403b,0xff33c11f,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff2d7d22,0xff2b2b2b,0xff292929,0xff232323,
+ 0xff222222,0xff202020,0xff1e1e1e,0xff1d1d1d,0xff1c1c1c,0xff1b1b1b,0xff1a1a1a,0xff191919,0xff181818,0xff171717,0xff01010c,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff04033c,0xff6c6c6c,0xff6a6a6a,0xff686868,0xff636363,0xff5b5b5b,0xff4e4e4e,0xff3e3e3e,0xff2a2e2a,0xff2fc41a,0xff36ff1a,0xff36ff1a,
+ 0xff36ff1a,0xff28751e,0xff1f1f1f,0xff202020,0xff202020,0xff1e1e1e,0xff1d1d1d,0xff1c1c1c,0xff1b1b1b,0xff1a1a1a,0xff191919,0xff181818,0xff171717,0xff161616,
+ 0xff01000b,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040239,0xff676767,0xff636363,0xff606060,0xff5c5c5c,0xff535353,0xff484848,0xff363636,
+ 0xff283e25,0xff32df1a,0xff36ff1a,0xff36ff1a,0xff35f41a,0xff1f401a,0xff1d1d1d,0xff1e1e1e,0xff1e1e1e,0xff1d1d1d,0xff1b1b1b,0xff1a1a1a,0xff191919,0xff181818,
+ 0xff181818,0xff161616,0xff161616,0xff151515,0xff01000b,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff040236,0xff606060,0xff5d5d5d,0xff585858,
+ 0xff515151,0xff464646,0xff393939,0xff2c4229,0xff33de1b,0xff36ff1a,0xff36ff1a,0xff35fa1a,0xff216717,0xff1a1a1a,0xff1c1c1c,0xff1e1e1e,0xff1d1d1d,0xff1b1b1b,
+ 0xff1a1a1a,0xff191919,0xff181818,0xff171717,0xff161616,0xff151515,0xff151515,0xff141414,0xff01000a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff040233,0xff5a5a5a,0xff545454,0xff4c4c4c,0xff424242,0xff373737,0xff2b4128,0xff33de1b,0xff36ff1a,0xff36ff1a,0xff34f21a,0xff1c4816,0xff181818,0xff1b1b1b,
+ 0xff1d1d1d,0xff1c1c1c,0xff1a1a1a,0xff181818,0xff171717,0xff161616,0xff161616,0xff151515,0xff141414,0xff141414,0xff131313,0xff131313,0xff01000a,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff03022f,0xff515151,0xff4b4b4b,0xff414141,0xff343434,0xff2a4026,0xff32de1a,0xff36ff1a,0xff36ff1a,0xff34f21a,
+ 0xff1b4815,0xff181818,0xff1b1b1b,0xff1b1b1b,0xff1b1b1b,0xff191919,0xff161616,0xff151515,0xff131313,0xff121212,0xff121212,0xff121212,0xff121212,0xff121212,
+ 0xff121212,0xff121212,0xff01000a,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff03022b,0xff4a4a4a,0xff404040,0xff363636,0xff2a4027,0xff32de1a,
+ 0xff36ff1a,0xff36ff1a,0xff34f21a,0xff1b4815,0xff181818,0xff1b1b1b,0xff1c1c1c,0xff1b1b1b,0xff191919,0xff151515,0xff131313,0xff101010,0xff0e0e0e,0xff0e0e0e,
+ 0xff0d0d0d,0xff0d0d0d,0xff0f0f0f,0xff0f0f0f,0xff101010,0xff101010,0xff010009,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff030228,0xff434343,
+ 0xff3a3a3a,0xff2e352d,0xff33db1b,0xff36ff1a,0xff36ff1a,0xff34f21a,0xff1b4815,0xff181818,0xff1b1b1b,0xff1c1c1c,0xff1c1c1c,0xff191919,0xff171717,0xff1a4614,
+ 0xff2ecf18,0xff2ece17,0xff2dce17,0xff2dce17,0xff2dce17,0xff2dce17,0xff2dce17,0xff1a5411,0xff101010,0xff101010,0xff010009,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff030225,0xff3e3e3e,0xff353535,0xff2a2a2a,0xff28711e,0xff35fa1a,0xff34f21a,0xff1d4917,0xff181818,0xff1b1b1b,0xff1d1d1d,0xff1c1c1c,
+ 0xff1c1c1c,0xff181818,0xff151515,0xff1b5213,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff1c6512,0xff0e0e0e,0xff101010,
+ 0xff010009,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff030223,0xff383838,0xff303030,0xff282828,0xff1f1f1f,0xff246e1a,0xff1f4c19,0xff1a1a1a,
+ 0xff1b1b1b,0xff1d1d1d,0xff1d1d1d,0xff1c1c1c,0xff1b1b1b,0xff181818,0xff151515,0xff1b5213,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff36ff1a,0xff36ff1a,
+ 0xff36ff1a,0xff1c6512,0xff0e0e0e,0xff101010,0xff010009,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff020120,0xff333333,0xff2c2c2c,0xff252525,
+ 0xff1f1f1f,0xff1d1d1d,0xff1d1d1d,0xff1d1d1d,0xff1d1d1d,0xff1d1d1d,0xff1d1d1d,0xff1b1b1b,0xff1a1a1a,0xff171717,0xff151515,0xff141f12,0xff173f11,0xff143d0f,
+ 0xff143d0f,0xff143c0e,0xff143c0e,0xff143d0f,0xff153d10,0xff11200f,0xff0f0f0f,0xff101010,0xff010009,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff02011c,0xff2e2e2e,0xff272727,0xff222222,0xff212121,0xff1f1f1f,0xff1e1e1e,0xff1e1e1e,0xff1d1d1d,0xff1d1d1d,0xff1b1b1b,0xff1a1a1a,0xff191919,0xff171717,
+ 0xff151515,0xff131313,0xff111111,0xff0f0f0f,0xff0e0e0e,0xff0e0e0e,0xff0e0e0e,0xff0f0f0f,0xff0f0f0f,0xff0f0f0f,0xff101010,0xff111111,0xff010009,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff020119,0xff272727,0xff232323,0xff222222,0xff212121,0xff202020,0xff1f1f1f,0xff1e1e1e,0xff1d1d1d,0xff1c1c1c,
+ 0xff1a1a1a,0xff191919,0xff181818,0xff161616,0xff151515,0xff131313,0xff121212,0xff111111,0xff111111,0xff101010,0xff111111,0xff101010,0xff101010,0xff101010,
+ 0xff111111,0xff111111,0xff010009,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff020116,0xff232323,0xff222222,0xff212121,0xff202020,0xff1f1f1f,
+ 0xff1e1e1e,0xff1d1d1d,0xff1c1c1c,0xff1b1b1b,0xff191919,0xff181818,0xff171717,0xff161616,0xff151515,0xff141414,0xff131313,0xff121212,0xff121212,0xff111111,
+ 0xff111111,0xff111111,0xff111111,0xff111111,0xff111111,0xff121212,0xff01000a,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff010113,0xff222222,
+ 0xff212121,0xff202020,0xff1e1e1e,0xff1e1e1e,0xff1c1c1c,0xff1b1b1b,0xff1b1b1b,0xff191919,0xff181818,0xff171717,0xff161616,0xff151515,0xff141414,0xff131313,
+ 0xff121212,0xff111111,0xff111111,0xff111111,0xff111111,0xff111111,0xff111111,0xff111111,0xff121212,0xff121212,0xff01000a,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff010112,0xff010112,0xff010111,0xff010110,0xff010110,0xff01010f,0xff01010f,0xff01010e,0xff01010e,0xff01010d,0xff01010c,0xff01010c,
+ 0xff01000b,0xff01000b,0xff01000a,0xff01000a,0xff01000a,0xff010009,0xff010009,0xff010009,0xff010009,0xff010009,0xff010009,0xff010009,0xff01000a,0xff01000a,
+ 0xff01000a,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb Tetrix_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x26000000,0x30000000,0x38000000,0x3d000000,0x3f000000,0x3f000000,0x3f000000,
+ 0x3f000000,0x3f000000,0x3e000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x19000000,0xff080573,0xff070562,0xff060551,0xff060550,
+ 0xff060550,0xff05054f,0xff05054f,0xff060550,0xff060550,0xff060551,0xff060551,0xff060551,0xff060551,0xff060552,0xff060552,0xff060552,0xff060552,0xff060552,
+ 0xff060552,0xff060552,0xff060552,0xff060552,0xff060552,0xff060552,0xff060552,0xff04043a,0xff01030f,0x3d000000,0x29000000,0x18000000,0x12000000,0x26000000,
+ 0xff070562,0xff83bd8a,0xff4fa05a,0xff4d9d58,0xff4c9a57,0xff4b9856,0xff4b9856,0xff4c9a57,0xff4d9d58,0xff4fa05a,0xff51a35a,0xff52a65b,0xff53a75c,0xff53a85c,
+ 0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff53a85c,0xff14811f,0xff000105,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x30000000,0xff060550,0xff4e9f59,0xff137c22,0xff127621,0xff117121,0xff116e22,0xff116e22,0xff117121,0xff127621,0xff137c22,
+ 0xff148121,0xff148521,0xff158721,0xff158821,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,
+ 0xff158921,0xff0e5c16,0xff000001,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x3a000004,0xff05044f,0xff4b9856,0xfffdc1a4,0xfffc9f72,0xfffc9f72,0xfffc9f72,
+ 0xfffc9f72,0xffe74c00,0xff106822,0xff127221,0xff137c21,0xff148321,0xff158621,0xff158821,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,
+ 0xff158921,0xff158921,0xff158921,0xff158921,0xff158921,0xff0e5c16,0xff000001,0x87000000,0x5a000000,0x36000000,0x1d000000,0x40000004,0xff05044d,0xff479054,
+ 0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xff0f5a22,0xff106822,0xff127621,0xff147f21,0xff148521,0xff158722,0xff158821,0xff158821,
+ 0xff158821,0xff158821,0xff158821,0xff158821,0xff158821,0xff158821,0xff158821,0xff158821,0xff158821,0xff0e5c16,0xff000001,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x44000008,0xff05044c,0xff448a51,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xff0c4c22,0xff0e5d22,0xff116f22,0xff137b22,
+ 0xff148221,0xff158521,0xff158621,0xff158721,0xff158621,0xff158721,0xff158721,0xff158721,0xff158721,0xff158721,0xff158721,0xff158721,0xff158721,0xff0e5b16,
+ 0xff000001,0x9a000000,0x67000000,0x3d000000,0x1f000000,0x45000007,0xff05044c,0xff428550,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,
+ 0xff0b4022,0xff0d5422,0xff106821,0xff127521,0xff137d21,0xff148021,0xff148221,0xff148221,0xff148221,0xff148222,0xff148222,0xff148321,0xff148321,0xff148321,
+ 0xff148321,0xff148322,0xff148322,0xff0e5916,0xff000002,0x9b000002,0x68000000,0x3e000000,0x1f000000,0x45000007,0xff05044b,0xff40824f,0xfffc9f72,0xfffa5200,
+ 0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xff093723,0xff0b4b23,0xff0e5f22,0xff116c21,0xff127421,0xff127822,0xff137a21,0xff137a21,0xff127a21,0xff137a22,
+ 0xff137a21,0xff137a21,0xff137921,0xff137921,0xff137a21,0xff137a21,0xff137b22,0xff0d5417,0xff000002,0x9e000003,0x6a000002,0x3f000000,0x1f000000,0x46000007,
+ 0xff05044b,0xff40814f,0xffe74c00,0xff7e2900,0xff7e2900,0xff7e2900,0xff7e2900,0xff5d1f00,0xff082d23,0xff0a3f23,0xff0c5121,0xff0e5d22,0xff0f6522,0xff106822,
+ 0xff106a22,0xff106b22,0xff106a22,0xff116a22,0xff106922,0xff106921,0xff106921,0xff106921,0xff106921,0xff106a22,0xff116d22,0xff0b4b19,0xff000004,0xa3000006,
+ 0x6e000005,0x42000004,0x1f000000,0x46000007,0xff05044b,0xff3f804e,0xfffdc1a4,0xfffc9f72,0xfffc9f72,0xfffc9f72,0xfffc9f72,0xffe74c00,0xfffdc1a4,0xfffc9f72,
+ 0xfffc9f72,0xfffc9f72,0xfffc9f72,0xffe74c00,0xffeaffad,0xffdeff7f,0xffdeff7f,0xffdeff7f,0xffdeff7f,0xffb4ec16,0xffeaffad,0xffdeff7f,0xffdeff7f,0xffdeff7f,
+ 0xffdeff7f,0xffb4ec16,0xff000006,0xaa000009,0x74000007,0x46000007,0x1f000000,0x46000007,0xff05044b,0xff3f804e,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,
+ 0xfffa5200,0xff7e2900,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,
+ 0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff000007,0xb100000d,0x7b00000a,0x4a000007,0x1f000000,0x46000007,0xff05044b,0xff40814f,
+ 0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,
+ 0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff000009,0xb800000f,0x8100000c,0x4e00000a,
+ 0x1f000000,0x45000007,0xff05044b,0xff40824f,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,
+ 0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,
+ 0xff00000a,0xbc000012,0x8400000e,0x4f00000a,0x1f000000,0x45000007,0xff05044c,0xff428550,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,
+ 0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xffdeff7f,0xffc3ff18,
+ 0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff00000a,0xbc000012,0x8400000e,0x4f00000a,0x1f000000,0x44000008,0xff05044c,0xff448a51,0xffe74c00,0xff7e2900,
+ 0xff7e2900,0xff7e2900,0xff7e2900,0xff5d1f00,0xffe74c00,0xff7e2900,0xff7e2900,0xff7e2900,0xff7e2900,0xff5d1f00,0xffb4ec16,0xff63810c,0xff63810c,0xff63810c,
+ 0xff63810c,0xff495f09,0xffb4ec16,0xff63810c,0xff63810c,0xff63810c,0xff63810c,0xff495f09,0xff000009,0xb800000f,0x8100000c,0x4e00000a,0x1f000000,0x42000004,
+ 0xff05044d,0xff479054,0xff106822,0xff0f5a21,0xff0c4b23,0xff0b3f23,0xff093623,0xff072d22,0xfffdc1a4,0xfffc9f72,0xfffc9f72,0xfffc9f72,0xfffc9f72,0xffe74c00,
+ 0xffeaffad,0xffdeff7f,0xffdeff7f,0xffdeff7f,0xffdeff7f,0xffb4ec16,0xff041823,0xff062323,0xff082d23,0xff093723,0xff0b4023,0xff08331d,0xff000007,0xb100000d,
+ 0x7b00000a,0x4a000007,0x1f000000,0x41000004,0xff05044f,0xff4b9856,0xff127221,0xff106822,0xff0e5d22,0xff0d5422,0xff0b4b22,0xff0a3f22,0xfffc9f72,0xfffa5200,
+ 0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff062323,0xff073024,0xff0a3f22,0xff0b4b22,
+ 0xff0d5422,0xff093e1b,0xff000006,0xaa000009,0x74000007,0x46000007,0x1f000000,0x3f000000,0xff060550,0xff4e9f59,0xff137c22,0xff127621,0xff116f22,0xff106822,
+ 0xff0e5f22,0xff0c5121,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,
+ 0xff072c24,0xff0a3e23,0xff0c5121,0xff0e5f22,0xff106822,0xff0b4a19,0xff000004,0xa3000006,0x6e000005,0x42000004,0x1f000000,0x3e000000,0xff060551,0xff51a35a,
+ 0xff148321,0xff147f21,0xff137c22,0xff127621,0xff116d21,0xff0e5f22,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,
+ 0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff093323,0xff0b4822,0xff0e5d21,0xff116d21,0xff127621,0xff0d5318,0xff000002,0x9e000003,0x6a000002,0x3f000000,
+ 0x1f000000,0x3e000000,0xff060551,0xff52a65b,0xff158621,0xff148521,0xff148221,0xff137e21,0xff127621,0xff106821,0xfffc9f72,0xfffa5200,0xfffa5200,0xfffa5200,
+ 0xfffa5200,0xff7e2900,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff093723,0xff0c4d23,0xff0f6421,0xff127421,0xff137d21,0xff0d5717,
+ 0xff000002,0x9b000002,0x68000000,0x3e000000,0x1f000000,0x3d000000,0xff060552,0xff53a75c,0xff158821,0xff158721,0xff158621,0xff148221,0xff137b22,0xff116f22,
+ 0xffe74c00,0xff7e2900,0xff7e2900,0xff7e2900,0xff7e2900,0xff5d1f00,0xffb4ec16,0xff63810c,0xff63810c,0xff63810c,0xff63810c,0xff495f09,0xff0a3922,0xff0c5022,
+ 0xff106721,0xff127821,0xff148121,0xff0e5916,0xff000001,0x9a000000,0x67000000,0x3d000000,0x1f000000,0x3d000000,0xff060552,0xff53a85c,0xff158921,0xff158821,
+ 0xff158722,0xff148521,0xff147f21,0xff127621,0xff106822,0xff0f5a22,0xff0d4c22,0xff0b4322,0xff0b3e22,0xff0a3b22,0xffeaffad,0xffdeff7f,0xffdeff7f,0xffdeff7f,
+ 0xffdeff7f,0xffb4ec16,0xff0a3a23,0xff0c5122,0xff106821,0xff137921,0xff148221,0xff0e5a17,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff060552,0xff53a85c,0xff158921,0xff158921,0xff158821,0xff158621,0xff148321,0xff137c21,0xff127221,0xff106722,0xff0f5e22,0xff0d5622,0xff0d5022,0xff0b4922,
+ 0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff0a3a23,0xff0c5123,0xff106921,0xff137921,0xff148321,0xff0e5b17,0xff000001,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff060552,0xff53a85c,0xff158921,0xff158921,0xff158821,0xff158721,0xff148521,0xff148121,0xff137c22,0xff127521,
+ 0xff116f21,0xff106922,0xff0f6122,0xff0d5621,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff0a3b23,0xff0d5223,0xff106921,0xff137921,
+ 0xff148321,0xff0e5b17,0xff000001,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff060552,0xff53a85c,0xff158921,0xff158921,0xff158921,0xff158821,
+ 0xff158721,0xff148521,0xff148321,0xff147f21,0xff137b21,0xff127722,0xff116f21,0xff0f6122,0xffdeff7f,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,
+ 0xff0a3d23,0xff0d5422,0xff106a22,0xff137a21,0xff148322,0xff0e5b17,0xff000001,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff04043a,0xff14811f,
+ 0xff0e5c16,0xff0e5c16,0xff0e5c16,0xff0e5c16,0xff0e5c16,0xff0e5b16,0xff0e5a17,0xff0e5916,0xff0e5817,0xff0c5517,0xff0c5018,0xff0b4618,0xffdeff7f,0xffc3ff18,
+ 0xffc3ff18,0xffc3ff18,0xffc3ff18,0xff63810c,0xff082d1d,0xff093b1b,0xff0b4918,0xff0d5318,0xff0d5817,0xff09370f,0xff000000,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff01030f,0xff000105,0xff000001,0xff000001,0xff000001,0xff000001,0xff000001,0xff000001,0xff000001,0xff000001,0xff000002,0xff000002,
+ 0xff000003,0xff000004,0xff07060c,0xff040306,0xff040306,0xff040306,0xff040306,0xff030205,0xff000009,0xff000006,0xff000004,0xff000003,0xff000002,0xff000001,
+ 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x9a000002,0x9c000002,0xa0000003,0xa7000008,0xb200000d,0xbd010110,0xc6010115,0xcc010116,0xcc010116,0xc6010115,0xbd010110,0xb200000d,
+ 0xa7000008,0xa0000003,0x96000002,0x88000002,0x75000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x67000000,0x69000002,0x6d000005,0x74000007,0x7f00000c,0x8b000011,0x95000013,0x9a000014,
+ 0x9a000014,0x95000013,0x8b000011,0x7f00000c,0x74000007,0x6d000005,0x65000003,0x5b000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e000000,0x3f000000,0x42000004,0x48000007,
+ 0x4f00000d,0x5800000e,0x5f000010,0x63000012,0x63000012,0x5f000010,0x5800000e,0x4f00000d,0x48000007,0x42000004,0x3d000000,0x37000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb TextEditor_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x20080808,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e040404,0x3f080808,0x3f080808,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f0c0c0c,0x3f080808,
+ 0x3f080808,0x3e040404,0x3c040404,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff888800,0xff888800,0xff888800,0xff888800,
+ 0xff888800,0xff888800,0xff888800,0xff888800,0xff888800,0xff888800,0xff888800,0xff888800,0xff888800,0xff888800,0xff878700,0xff868600,0xff848400,0xff808000,
+ 0xff7a7900,0xff736100,0xff835a00,0xff805e00,0xff775b00,0xff7d5900,0xff6f5300,0xff624600,0xff573600,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffefefc,
+ 0xfffdfdf9,0xfff9f9f1,0xfff2f2e4,0xffe9e6cb,0xffe8c697,0xffeeac4f,0xffe89f3a,0xffe89a25,0xffec9025,0xffbe851e,0xffb76f0c,0xff944f02,0xff261b00,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xfffefefe,0xfffefefd,0xfffcfcf9,0xfff9f9f2,0xfff3f3e6,0xffeae9d2,0xffe1cda9,0xffeba958,0xffe8a22c,0xffe39313,0xffe18c13,0xffca790c,0xffa36511,
+ 0xff824e06,0xff4b2f0d,0xff343400,0x75020202,0x4f030303,0x2e000000,0x1b000000,0x36000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffefefd,0xfffcfcf9,0xfffafaf3,0xfff4f4e8,0xffecebd5,0xffe5d6b5,0xffe8aa60,0xfff3a837,0xffe3981f,
+ 0xffec9017,0xffca7a11,0xffae700f,0xff90550c,0xff4d3811,0xff60602c,0xff535300,0x88060606,0x5b030303,0x37050505,0x1d000000,0x3b000000,0xff888800,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffefefd,0xfffdfdfa,0xfffafaf4,0xfff4f4e9,0xffedecd6,0xffdecfa3,
+ 0xffefb067,0xfffaac3f,0xffea9829,0xffe9931d,0xffd38117,0xffb06d1a,0xff905a18,0xff593d14,0xff5d5b2d,0xff999956,0xff565600,0x95070707,0x63050505,0x3c040404,
+ 0x1f000000,0x3d000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffefefd,0xfffdfdfb,0xfff9f9f4,
+ 0xfff5f5eb,0xffeeeedb,0xffdbd3bc,0xffe7b26e,0xffeda240,0xffe9a326,0xffef9523,0xffd8851c,0xffb47a20,0xff97631c,0xff6b491b,0xff605f36,0xff9d9d5a,0xffa4a46f,
+ 0xff5a5a00,0x9b0a0a0a,0x68070707,0x3e040404,0x1f000000,0x3d000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xfffffffe,0xfffdfdfb,0xfffbfbf6,0xfff5f5ec,0xffefefdc,0xffe6dec2,0xffe2ac63,0xfff6a541,0xffe3a024,0xffec981d,0xffd4831b,0xffb97b20,0xff9d6d22,0xff765121,
+ 0xff5f5c37,0xff9d9d5d,0xffa8a872,0xffaaaa85,0xff5c5c00,0x9c0d0d0d,0x690c0c0c,0x3f080808,0x1f000000,0x3d000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0xfffefefc,0xfffbfbf7,0xfff7f7ee,0xfff0f0df,0xffebe6cf,0xffe7b172,0xffeca33f,0xfff89e24,0xffe79712,0xffdd8615,
+ 0xffbb7f1f,0xffa26b26,0xff7c5520,0xff463e32,0xff9d9d5e,0xffabab76,0xffafaf89,0xffb2b298,0xff5e5e00,0x9d121212,0x6a0e0e0e,0x3f0c0c0c,0x1f000000,0x3d000000,
+ 0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfc,0xfffcfcf8,0xfff8f8f0,0xfff1f1e2,0xffe8e6c8,0xffe2be7f,0xffe59d42,
+ 0xffe3a022,0xffeb9114,0xffe38410,0xffc07c11,0xffa46c1c,0xff7d571c,0xff4c402c,0xffa4a45e,0xffadad77,0xffb1b18b,0xffb7b79c,0xffb5b5a6,0xff5f5f00,0x9e151515,
+ 0x6b131313,0x40101010,0x1f000000,0x3d000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xfffefefd,0xfffdfdfa,0xfff9f9f2,0xfff3f3e6,
+ 0xffe8e8cf,0xffdbc8a4,0xffe99c48,0xfff2972b,0xffde990d,0xffe3870a,0xffc77e13,0xffa7690d,0xff895313,0xff4c4223,0xff8c8c51,0xffaaaa72,0xffb2b28a,0xffb7b79d,
+ 0xffb8b8a8,0xffb5b5ab,0xff5d5d00,0xa01b1b1b,0x6c181818,0x41141414,0x1f000000,0x3d000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,
+ 0xfffdfdfb,0xfffafaf5,0xfff5f5ea,0xffebebd6,0xffc1bdb8,0xffab8850,0xfff89f24,0xffe09219,0xffec8d06,0xffc57004,0xff9c6c09,0xff8d530b,0xff533718,0xff6e7240,
+ 0xffa5a56a,0xffaeae84,0xffb4b498,0xffb7b7a6,0xffb7b7ae,0xffb2b2ad,0xff5b5b00,0xa1202020,0x6d1c1c1c,0x42171717,0x1f000000,0x3d000000,0xff888800,0xffffffff,
+ 0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfc,0xfffbfbf7,0xfff6f6ed,0xffefefdd,0xffe0dacc,0xff716a63,0xffac7c4d,0xfffeaa0d,0xffe79602,0xffd0710a,0xffa86c09,
+ 0xff895006,0xff4f360b,0xff5c5b31,0xff9c9c5e,0xffa8a87a,0xffb0b092,0xffb5b5a3,0xffb7b7ad,0xffb5b5b0,0xffaeaeac,0xff595900,0xa2232323,0x6e202020,0x421b1b1b,
+ 0x1f000000,0x3d000000,0xff888800,0xffffffff,0xffffffff,0xffffffff,0xfffefefd,0xfffcfcf9,0xfff9f9f2,0xfff2f2e4,0xffe0deca,0xffa09692,0xff796550,0xff805b56,
+ 0xff9c7040,0xff895538,0xffae640c,0xff8b4b02,0xff543509,0xff4c4a23,0xff959553,0xffa0a070,0xffa9a98a,0xffb0b09d,0xffb5b5aa,0xffb4b4ae,0xffb0b0ad,0xffa9a9a8,
+ 0xff565600,0xa3262626,0x6f222222,0x44222222,0x1f000000,0x3e040404,0xff888800,0xffffffff,0xffffffff,0xfffefefe,0xfffdfdfb,0xfffbfbf6,0xfff5f5eb,0xffebebd6,
+ 0xff999f9e,0xff7e7168,0xff7d604d,0xff7b563c,0xff685c45,0xff59383f,0xff955802,0xff543609,0xff4f4e24,0xff8b8c49,0xff979765,0xffa2a280,0xffaaaa95,0xffb0b0a4,
+ 0xffb2b2ac,0xffb0b0ad,0xffababaa,0xffa5a5a5,0xff535300,0xa3292929,0x70242424,0x44222222,0x20080808,0x3f080808,0xff888800,0xffffffff,0xfffefefe,0xfffefefd,
+ 0xfffdfdf9,0xfff8f8f1,0xfff1f1e1,0xffd5d4be,0xff8a8779,0xff796249,0xff7c6151,0xff8c6452,0xff604933,0xff483d31,0xff423322,0xff3b3f1f,0xff828443,0xff93935d,
+ 0xff9a9a77,0xffa3a38c,0xffaaaa9d,0xffadada6,0xffaeaeab,0xffadadab,0xffa7a7a7,0xff9f9f9f,0xff515100,0xa3292929,0x70242424,0x44222222,0x20080808,0x3f080808,
+ 0xff888800,0xffffffff,0xfffffffe,0xfffdfdfb,0xfffafaf5,0xfff5f5e8,0xffeaead4,0xffbbb2b1,0xff614f47,0xff7e6046,0xff846156,0xff725149,0xff402f23,0xff1d2015,
+ 0xff23262e,0xff6a6e3c,0xff919159,0xff96966f,0xff9c9c83,0xffa2a294,0xffa7a7a1,0xffaaaaa6,0xffa9a9a7,0xffa7a7a7,0xffa2a2a2,0xff9b9b9b,0xff4e4e00,0xa3272727,
+ 0x6f222222,0x431e1e1e,0x20080808,0x3f0c0c0c,0xff888800,0xfffefefe,0xfffdfdfc,0xfffcfcf8,0xfff8f8ef,0xfff0f0de,0xffe5e6d0,0xff796e5d,0xff8b6b5f,0xff76605b,
+ 0xff4e423d,0xff242211,0xff161c21,0xff2e302b,0xff737141,0xff8f8f57,0xff93936b,0xff98987f,0xff9c9c8d,0xffa1a19a,0xffa5a5a2,0xffa6a6a4,0xffa5a5a4,0xffa3a3a3,
+ 0xff9e9e9e,0xff979797,0xff4c4c00,0xa3262626,0x6f222222,0x431e1e1e,0x20080808,0x3f0c0c0c,0xff888800,0xfffefefd,0xfffcfcfa,0xfffafaf4,0xfff3f3e6,0xffe4e3ce,
+ 0xffa2a198,0xff81766a,0xff896c64,0xff4c3f39,0xff122417,0xff181e1a,0xff454534,0xff878847,0xff919159,0xff94946d,0xff97977d,0xff99998a,0xff9b9b92,0xffa0a09b,
+ 0xffa2a2a0,0xffa2a2a1,0xffa2a2a2,0xff9f9f9f,0xff9a9a9a,0xff919191,0xff494900,0xa2232323,0x6e1e1e1e,0x421b1b1b,0x20080808,0x3f0c0c0c,0xff888800,0xfffefefc,
+ 0xfffafaf6,0xfff6f6ec,0xffeeeedb,0xffb3b7b0,0xff706d62,0xff827568,0xff504740,0xff2c2e2a,0xff292e2b,0xff5f5f3e,0xff929252,0xff979762,0xff989873,0xff9b9b81,
+ 0xff9c9c8b,0xff9a9a91,0xff9c9c98,0xff9f9f9d,0xffa1a1a0,0xffa2a2a1,0xffa0a0a0,0xff9b9b9b,0xff969696,0xff8f8f8f,0xff484800,0xa11e1e1e,0x6d1c1c1c,0x42171717,
+ 0x20080808,0x3f0c0c0c,0xff888800,0xfffcfcf9,0xfff8f8f2,0xfff3f3e4,0xffd2d2c1,0xff767a7c,0xff937e75,0xff4e483a,0xff282b22,0xff3e4339,0xff818350,0xff9f9f63,
+ 0xffa1a171,0xffa2a27e,0xffa2a28a,0xffa1a192,0xffa1a198,0xff9f9f9b,0xff9f9f9c,0xffa0a09f,0xffa2a2a1,0xffa1a1a1,0xff9e9e9e,0xff9a9a9a,0xff939393,0xff8d8d8d,
+ 0xff474700,0x9f1a1a1a,0x6b151515,0x40101010,0x20080808,0x3f0c0c0c,0xff888800,0xfffbfbf6,0xfff6f6eb,0xffececd8,0xff898981,0xff514f4d,0xff635446,0xff2e312a,
+ 0xff5a5b45,0xff9e9f67,0xffa9a973,0xffa9a97f,0xffa9a98a,0xffaaaa94,0xffa9a99c,0xffa7a79f,0xffa5a5a0,0xffa2a2a0,0xffa1a1a0,0xffa1a1a1,0xffa0a0a0,0xffa0a0a0,
+ 0xff9b9b9b,0xff979797,0xff909090,0xff8a8a8a,0xff464600,0x9e151515,0x6a111111,0x3f0c0c0c,0x20080808,0x3f080808,0xff888800,0xfff8f8f1,0xfff3f3e3,0xffc5c5b2,
+ 0xff4e4e4e,0xff1c1c1c,0xff282825,0xff78785a,0xffaeae78,0xffb2b282,0xffb2b28c,0xffb2b296,0xffb1b19e,0xffb0b0a4,0xffadada6,0xffaaaaa6,0xffa6a6a3,0xffa2a2a1,
+ 0xffa1a1a1,0xffa0a0a0,0xff9f9f9f,0xff9c9c9c,0xff989898,0xff929292,0xff8c8c8c,0xff878787,0xff454500,0x9d101010,0x690c0c0c,0x3f080808,0x20080808,0x3f080808,
+ 0xff888800,0xfff6f6ed,0xffdedecd,0xff63635e,0xff141414,0xff2b2b26,0xff848462,0xffb5b584,0xffb6b68b,0xffb6b696,0xffb6b69f,0xffb7b7a7,0xffb6b6ab,0xffb2b2ad,
+ 0xffadadab,0xffa9a9a7,0xffa5a5a4,0xffa2a2a2,0xff9f9f9f,0xff9e9e9e,0xff9b9b9b,0xff989898,0xff949494,0xff8e8e8e,0xff898989,0xff848484,0xff444400,0x9c0b0b0b,
+ 0x68070707,0x3e040404,0x20080808,0x3e040404,0xff888800,0xffefefe4,0xff7d7d74,0xff0c0c0c,0xff3c3c33,0xffa2a27d,0xffbaba8e,0xffb8b893,0xffbaba9c,0xffbcbca6,
+ 0xffb9b9ac,0xffb8b8af,0xffb5b5b0,0xffb1b1ad,0xffacacab,0xffa7a7a7,0xffa3a3a3,0xff9f9f9f,0xff9b9b9b,0xff999999,0xff979797,0xff929292,0xff8e8e8e,0xff8a8a8a,
+ 0xff868686,0xff828282,0xff444400,0x9b080808,0x67050505,0x3e040404,0x1d000000,0x3c040404,0xff888800,0xffe3e3d8,0xff111110,0xff67675a,0xffc4c4a2,0xffbebe9a,
+ 0xffbaba99,0xffbabaa0,0xffbcbca9,0xffbbbbaf,0xffb9b9b1,0xffb5b5b2,0xffb1b1af,0xffacacab,0xffa7a7a7,0xffa3a3a3,0xff9e9e9e,0xff9a9a9a,0xff969696,0xff939393,
+ 0xff909090,0xff8c8c8c,0xff898989,0xff868686,0xff838383,0xff828282,0xff444400,0x94050505,0x63030303,0x3b000000,0x1b000000,0x36000000,0xff868600,0xfff2f2f2,
+ 0xffe9e9e9,0xffe2e2e2,0xffdadada,0xffd4d4d4,0xffcdcdcd,0xffc8c8c8,0xffc3c3c3,0xffbdbdbd,0xffb6b6b6,0xffb0b0b0,0xffaaaaaa,0xffa6a6a6,0xffa0a0a0,0xff9b9b9b,
+ 0xff979797,0xff919191,0xff8f8f8f,0xff8d8d8d,0xff8a8a8a,0xff878787,0xff848484,0xff828282,0xff828282,0xff818181,0xff454500,0x87020202,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff828200,0xff7d7d00,0xff787800,0xff747400,0xff6f6f00,0xff6c6c00,0xff686800,0xff656500,0xff636300,0xff5f5f00,0xff5c5c00,0xff595900,
+ 0xff565600,0xff535300,0xff515100,0xff4e4e00,0xff4c4c00,0xff494900,0xff484800,0xff474700,0xff464600,0xff454500,0xff444400,0xff444400,0xff444400,0xff454500,
+ 0xff464600,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x75040404,0x88060606,0x95070707,0x9b0a0a0a,0x9c0d0d0d,0x9d121212,
+ 0x9e151515,0xa01b1b1b,0xa1202020,0xa2232323,0xa3262626,0xa3292929,0xa3292929,0xa3272727,0xa3262626,0xa2232323,0xa11e1e1e,0x9f1a1a1a,0x9e151515,0x9d101010,
+ 0x9c0b0b0b,0x9b080808,0x94050505,0x87020202,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4e030303,0x5b030303,
+ 0x63050505,0x68070707,0x690c0c0c,0x6a0e0e0e,0x6b131313,0x6c181818,0x6d1c1c1c,0x6e202020,0x6f222222,0x70242424,0x70242424,0x6f222222,0x6f222222,0x6e1e1e1e,
+ 0x6d1c1c1c,0x6b151515,0x6a111111,0x690c0c0c,0x68070707,0x67050505,0x63030303,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x37050505,0x3c040404,0x3e040404,0x3f080808,0x3f0c0c0c,0x40101010,0x41141414,0x42171717,0x421b1b1b,0x44222222,0x44222222,
+ 0x44222222,0x431e1e1e,0x431e1e1e,0x421b1b1b,0x42171717,0x40101010,0x3f0c0c0c,0x3f080808,0x3e040404,0x3e040404,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb TodoList_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x4000000,0x5000000,0x7000000,0x7000000,0x6000000,
+ 0x4000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x2000000,0x5000000,0xa000000,
+ 0xd000000,0x11000000,0x12000000,0x10000000,0xc000000,0x8000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,
+ 0x2000000,0x6000000,0xd000000,0x14000000,0x56a17f7f,0xc7a65151,0x30210000,0x20000000,0x19000000,0x11000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x1000000,0x2000000,0x6000000,0xd000000,0x19000000,0x5d977979,0xf8d2a5a5,0xffa64646,0xd4660000,0x461e0000,0x2b000000,0x1d000000,
+ 0x1000000,0x2000000,0x4000000,0x6000000,0x8000000,0x9000000,0xa000000,0xa000000,0xa000000,0xa000000,0xa000000,0xa000000,0xa000000,0xa000000,
+ 0xa000000,0xa000000,0xa000000,0xa000000,0xa000000,0xa000000,0xa000000,0xc000000,0x11000000,0x1b000000,0x60937676,0xf8d2a5a5,0xffb66767,0xff870404,
+ 0xff780000,0xd8550000,0x48140000,0x29000000,0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1e000000,0x1d000000,0x1c000000,0x1e000000,0x24000000,0x658b7070,
+ 0xf8d2a5a5,0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff220000,0xb11b0000,0x33000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,
+ 0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3e000000,0x3d000000,0x3b000000,
+ 0x39000000,0x3a000000,0x6f7e6666,0xf9d2a4a4,0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff210000,0xda1d0000,0x59030000,0x37000000,0xc000000,0x18000000,
+ 0xff474747,0xff474747,0xff474747,0xff474747,0xff474747,0xff464646,0xff464646,0xff464646,0xff454545,0xff454545,0xff444444,0xff444444,0xff434343,0xff424242,
+ 0xff414141,0xff404040,0xff3e3e3e,0xff3c3c3c,0xff363636,0x86695555,0xf9d2a4a4,0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff210000,0xdf1c0000,0x6f030000,
+ 0x4f000000,0x34000000,0x12000000,0x25000000,0xff474747,0xffdadada,0xffdadada,0xffd9d9d9,0xffd8d8d8,0xffd8d8d8,0xffd6d6d6,0xffd5d5d5,0xffd3d3d3,0xffd2d2d2,
+ 0xffd0d0d0,0xffcecece,0xffcccccc,0xffc9c9c9,0xffc5c5c5,0xffc0c0c0,0xffb8b8b8,0xffa7a7a7,0xff5b5050,0xfbd0a3a3,0xffb66767,0xff880606,0xff850000,0xff6f0000,
+ 0xff210000,0xe11c0000,0x7c020000,0x5e000000,0x43000000,0x2b000000,0x17000000,0x2e000000,0xff474747,0xffdadada,0xffd9d9d9,0xffd8d8d8,0xffd8d8d8,0xffd6d6d6,
+ 0xffd4d4d4,0xffd3d3d3,0xffd1d1d1,0xffcfcfcf,0xffcdcdcd,0xffcbcbcb,0xffc9c9c9,0xffc6c6c6,0xffc0c0c0,0xffb8b8b8,0xffa8a8a8,0xffa59a9a,0xffcea2a2,0xffb66767,
+ 0xff880606,0xff850000,0xff6f0000,0xff210000,0xe11c0000,0x80020000,0x64000000,0x4b000000,0x33000000,0x1f000000,0x1b000000,0x36000000,0xff474747,0xffd9d9d9,
+ 0xffd8d8d8,0xffd8d8d8,0xffd6d6d6,0xffd4d4d4,0xffd2d2d2,0xffd0d0d0,0xffcccccc,0xffc8c8c8,0xffc8c8c8,0xffc6c6c6,0xffc4c4c4,0xffc1c1c1,0xffb9b9b9,0xffa9a9a9,
+ 0xffa59b9b,0xffd1a5a5,0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff210000,0xe21c0000,0x81020000,0x65000000,0x4d000000,0x35000000,0x22000000,0x13000000,
+ 0x1d000000,0x3b000000,0xff474747,0xffd8d8d8,0xffd8d8d8,0xffd6d6d6,0xffd4d4d4,0xffd1d1d1,0xffcccccc,0xffc6c6c6,0xffc2c0c0,0xffbfbfbf,0xffbdbdbd,0xffbcbcbc,
+ 0xffbababa,0xffb5b5b5,0xffa9a9a9,0xffa79c9c,0xffd1a5a5,0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff210000,0xe51b0000,0x85020000,0x65000000,0x4d000000,
+ 0x36000000,0x22000000,0x13000000,0xa000000,0x1f000000,0x3d000000,0xff464646,0xffd8d8d8,0xffd6d6d6,0xffd4d4d4,0xffd1d1d1,0xffcbcbcb,0xffc1c1c1,0xffbcb7b7,
+ 0xffb87b7b,0xffa89b9b,0xffadadad,0xffadadad,0xffacacac,0xffa3a3a3,0xffa59b9b,0xffd1a5a5,0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff210000,0xe91b0000,
+ 0x90020000,0x6b000000,0x4d000000,0x36000000,0x22000000,0x13000000,0xa000000,0x4000000,0x1f000000,0x3d000000,0xff464646,0xffd6d6d6,0xffd4d4d4,0xffd2d2d2,
+ 0xffcccccc,0xffc1c1c1,0xffbab5b5,0xffd2acac,0xffb36161,0xff761111,0xff928686,0xff979797,0xff979797,0xff9f9595,0xffd1a5a5,0xffb66767,0xff880606,0xff850000,
+ 0xff6f0000,0xff210000,0xed1a0000,0x9f020000,0x78000000,0x54000000,0x36000000,0x22000000,0x13000000,0xa000000,0x4000000,0x1000000,0x1f000000,0x3d000000,
+ 0xff464646,0xffd5d5d5,0xffd3d3d3,0xffd0d0d0,0xffc6c6c6,0xffbcb7b7,0xffd2acac,0xffc07b7b,0xff8d1010,0xff7b0000,0xff6f0e0e,0xff827777,0xff918585,0xffd1a4a4,
+ 0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff210000,0xf31a0000,0xb3020000,0x8a000000,0x63000000,0x3e000000,0x22000000,0x13000000,0xa000000,0x4000000,
+ 0x1000000,0xffffff,0x1f000000,0x3d000000,0xff454545,0xffd3d3d3,0xffd1d1d1,0xffcccccc,0xffc2c0c0,0xffb87b7b,0xffb36161,0xff8d1010,0xff850000,0xff840000,
+ 0xff7d0000,0xff953030,0xffc68d8d,0xffb66767,0xff880606,0xff850000,0xff6f0000,0xff210000,0xff1d0505,0xcd010000,0xa3000000,0x78000000,0x4e000000,0x2b000000,
+ 0x13000000,0xa000000,0x4000000,0x1000000,0xffffff,0xffffff,0x1f000000,0x3d000000,0xff454545,0xffd2d2d2,0xffcfcfcf,0xffc8c8c8,0xffbfbfbf,0xffa89b9b,
+ 0xff761111,0xff7b0000,0xff840000,0xff850000,0xff840000,0xff880707,0xff8c0f0f,0xff880606,0xff850000,0xff6f0000,0xff210000,0xff270f0f,0xff141313,0xc2000000,
+ 0x94000000,0x66000000,0x3d000000,0x1c000000,0xa000000,0x4000000,0x1000000,0xffffff,0xffffff,0xffffff,0x1f000000,0x3d000000,0xff444444,0xffd0d0d0,
+ 0xffcdcdcd,0xffc8c8c8,0xffbebebe,0xffafafaf,0xff968a8a,0xff6e0e0e,0xff7b0000,0xff840000,0xff850000,0xff850000,0xff850000,0xff850000,0xff720000,0xff220000,
+ 0xff270f0f,0xff3d3c3c,0xff171717,0xb8000000,0x86000000,0x57000000,0x30000000,0x14000000,0x4000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0x1f000000,0x3d000000,0xff444444,0xffcecece,0xffcbcbcb,0xffc7c7c7,0xffbebebe,0xffb1b1b1,0xffa0a0a0,0xff877b7b,0xff6c0c0c,0xff7b0000,0xff840000,0xff850000,
+ 0xff850000,0xff840000,0xff410000,0xff260d0d,0xff3d3c3c,0xff464646,0xff1a1a1a,0xaf000000,0x7a000000,0x4b000000,0x28000000,0xe000000,0x1000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x1f000000,0x3d000000,0xff434343,0xffcccccc,0xffc9c9c9,0xffc6c6c6,0xffbfbfbf,0xffb5b5b5,0xffa6a6a6,0xff909090,
+ 0xff776c6c,0xff6a0b0b,0xff7b0000,0xff840000,0xff830000,0xff490000,0xff210000,0xff352b2b,0xff464646,0xff4d4d4d,0xff1b1b1b,0xa7000000,0x71000000,0x45000000,
+ 0x23000000,0xb000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1f000000,0x3d000000,0xff424242,0xffcacaca,0xffc8c8c8,0xffc5c5c5,
+ 0xffc0c0c0,0xffb5b5b5,0xffa7a7a7,0xff969696,0xff828282,0xff6d6161,0xff690a0a,0xff780000,0xff460000,0xff220202,0xff362c2c,0xff454545,0xff4e4e4e,0xff555555,
+ 0xff1e1e1e,0xa1000000,0x6c000000,0x40000000,0x20000000,0xa000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1f000000,0x3d000000,
+ 0xff414141,0xffc7c7c7,0xffc5c5c5,0xffc2c2c2,0xffbcbcbc,0xffb0b0b0,0xffa6a6a6,0xff999999,0xff898989,0xff767676,0xff665a5a,0xff460909,0xff230303,0xff3d3434,
+ 0xff4a4a4a,0xff4f4f4f,0xff545454,0xff5a5a5a,0xff1f1f1f,0x9d000000,0x68000000,0x3e000000,0x1f000000,0xa000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x1f000000,0x3d000000,0xff414141,0xffc5c5c5,0xffc2c2c2,0xffbbbbbb,0xffb3b3b3,0xffaaaaaa,0xffa1a1a1,0xff969696,0xff8a8a8a,0xff7b7b7b,
+ 0xff6d6d6d,0xff605656,0xff494040,0xff545454,0xff545454,0xff575757,0xff5a5a5a,0xff5d5d5d,0xff1f1f1f,0x9b000000,0x67000000,0x3d000000,0x1f000000,0xa000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1d000000,0x3b000000,0xff404040,0xffc2c2c2,0xffbababa,0xffb1b1b1,0xffaaaaaa,0xffa1a1a1,
+ 0xff9a9a9a,0xff919191,0xff888888,0xff7d7d7d,0xff727272,0xff686868,0xff616161,0xff5d5d5d,0xff5b5b5b,0xff5d5d5d,0xff5f5f5f,0xff5f5f5f,0xff202020,0x94000000,
+ 0x63000000,0x3b000000,0x1d000000,0xa000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1b000000,0x36000000,0xff3f3f3f,0xffb9b9b9,
+ 0xffb0b0b0,0xffa8a8a8,0xffa0a0a0,0xff999999,0xff919191,0xff8a8a8a,0xff838383,0xff7b7b7b,0xff727272,0xff6b6b6b,0xff656565,0xff626262,0xff616161,0xff5f5f5f,
+ 0xff5f5f5f,0xff606060,0xff202020,0x87000000,0x5a000000,0x36000000,0x1b000000,0x9000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0x17000000,0x2e000000,0xff3c3c3c,0xff3a3a3a,0xff373737,0xff343434,0xff313131,0xff2f2f2f,0xff2d2d2d,0xff2b2b2b,0xff292929,0xff262626,0xff252525,0xff242424,
+ 0xff212121,0xff212121,0xff212121,0xff202020,0xff202020,0xff202020,0xff212121,0x74000000,0x4e000000,0x2e000000,0x17000000,0x8000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x9a000000,0x9a000000,0x9b000000,0x9b000000,0x9a000000,0x9a000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,
+ 0x12000000,0x6000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x67000000,0x67000000,0x67000000,0x66000000,0x62000000,0x5a000000,
+ 0x4d000000,0x3d000000,0x29000000,0x18000000,0xc000000,0x4000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0x7000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff
+};
+
+static const QRgb Tux_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xff090684,0xff090682,0xff090680,0xff090680,
+ 0xff090681,0xff090681,0xff090682,0xff090683,0xff060456,0xff060454,0xff060454,0xff060454,0xff060454,0xff060454,0xff060454,0xff060454,0xff060454,0xff060454,
+ 0xff060454,0xff060454,0xff060454,0xff060457,0xff070465,0xff070467,0xff060456,0xff06034d,0xff04033a,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xff090682,0xffe4f8f0,0xffd2f3e7,0xffccf1e2,0xffcdf1e2,0xffd2f3e4,0xffd9f4e7,0xffafafae,0xff9b9b9b,0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,
+ 0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,0xff9c9c9c,0xff9d9d9d,0xffb1b1b1,0xffb4b4b5,0xffa1a1a1,0xff8f8f8f,0xff04033a,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xff08067f,0xffcff2e5,0xff97e3c7,0xff7ddcb8,0xff7fdcb7,0xff8ee0bc,0xffa1e5c3,0xff565656,0xff4f4f4f,0xff4f4f4f,
+ 0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff4f4f4f,0xff505050,0xff595858,0xff525253,
+ 0xff4e4e4e,0xff494949,0xff02011d,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xff08067e,0xffc4efdf,0xff76d9b5,0xff50cfa0,0xff53d09f,0xff69d6a7,
+ 0xff605f5c,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,
+ 0xff161616,0xff161616,0xff161616,0xff161616,0xff151515,0xff131313,0xff010008,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xff08067e,0xffc0eede,
+ 0xff6ad6af,0xff43cc99,0xff46cd98,0xff5fd3a0,0xff3a3937,0xff030303,0xff040404,0xff040404,0xff040404,0xff040404,0xff040404,0xff040404,0xff040404,0xff040404,
+ 0xff040404,0xff040404,0xff040404,0xff040404,0xff040404,0xff040404,0xff030303,0xff040404,0xff030303,0xff030303,0xff000001,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff41cb98,0xff46cc97,0xff61d4a1,0xff2a2928,0xff000000,0xff020202,0xff020202,0xff020202,0xff020202,
+ 0xff010101,0xff000201,0xff020202,0xff020202,0xff020202,0xff020202,0xff020202,0xff020202,0xff010101,0xff050505,0xff0f0e0e,0xff060606,0xff010101,0xff010101,
+ 0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff41cb98,0xff47cc97,0xff63d4a1,0xff242523,0xff000000,
+ 0xff020202,0xff010101,0xff020202,0xff131111,0xff171515,0xff020202,0xff000201,0xff020202,0xff020202,0xff020202,0xff010101,0xff030303,0xff060606,0xff060606,
+ 0xff161615,0xff383535,0xff050505,0xff010101,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,
+ 0xff48cd98,0xff64d5a1,0xff20201f,0xff000000,0xff010101,0xff090909,0xff1b1918,0xff0e0e0d,0xff141414,0xff100f0f,0xff020202,0xff020202,0xff020202,0xff010101,
+ 0xff252220,0xff716d6c,0xff73706f,0xff565352,0xff1b1b1b,0xff090908,0xff0c0c0c,0xff010101,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a2,0xff20201f,0xff000000,0xff090909,0xff7f7c7b,0xff888888,0xff797979,0xff2f2d2b,0xff020202,
+ 0xff020202,0xff020202,0xff010101,0xff181717,0xffb2b2b2,0xffa9a9a9,0xffa4a4a4,0xff9a9a9a,0xff9e9e9e,0xff383534,0xff010101,0xff010101,0xff000001,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a2,0xff252423,0xff000000,0xff2e2c2a,0xffdddddd,
+ 0xffefefef,0xfff3f3f3,0xffe1e1e1,0xff1e1c1b,0xff000101,0xff020202,0xff010101,0xff6f6866,0xfff3f3f3,0xffeaeaea,0xff7d7d7d,0xff8a8a8a,0xffdcdcdc,0xffbcbcbe,
+ 0xff0d0c0c,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a2,
+ 0xff252624,0xff000000,0xff5f5856,0xfff3f3f3,0xff868686,0xff8b8b8b,0xfffefefe,0xff6a6663,0xff010101,0xff010101,0xff030303,0xffb9b3b0,0xffffffff,0xff595959,
+ 0xff000000,0xff050505,0xff949494,0xffebebee,0xff2f2c2d,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,
+ 0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a2,0xff282826,0xff000000,0xff837c78,0xff6d6d6d,0xff050505,0xff202020,0xff868686,0xff908c88,0xff020202,0xff060606,
+ 0xff0b0a09,0xffbfbab8,0xffd4d4d4,0xff070707,0xff030303,0xff282828,0xff3f3f3f,0xffebebee,0xff504c4e,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a2,0xff2b2c2a,0xff000000,0xff837c7a,0xff484848,0xff020202,0xff1b1b1b,
+ 0xff525252,0xff757072,0xff020202,0xff050505,0xff070707,0xff837d7f,0xffc7c7c7,0xff090909,0xff080808,0xff0b0b0b,0xff1c1c1c,0xffeaeaed,0xff575255,0xff000000,
+ 0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a2,0xff31302f,0xff000000,
+ 0xff6d6765,0xff636363,0xff020202,0xff000000,0xff524f47,0xff9f8948,0xff7e6717,0xff8b741b,0xff5f4f20,0xff968343,0xffddd3a1,0xff101010,0xff050505,0xff020202,
+ 0xff383838,0xffebebee,0xff443f42,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,
+ 0xff48cd98,0xff64d5a2,0xff363634,0xff000000,0xff44403e,0xffa1a1a1,0xff020202,0xff39362b,0xffb89421,0xffc7a21f,0xfff2c711,0xfff0c915,0xffd1b333,0xffc2a228,
+ 0xffe8bf12,0xff97833d,0xff353229,0xff0e0e0e,0xffa8a8a8,0xffebebee,0xff1d1b1c,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a2,0xff3a3937,0xff000000,0xff0b0b0b,0xffc6c7cd,0xffa28f5a,0xffd3a200,0xffe4b200,0xffe7bb10,
+ 0xffe9c51f,0xffeac827,0xffedcc2c,0xffefcd2e,0xffedcc2c,0xffe9bf0c,0xffe2b70b,0xffcda833,0xffeccd91,0xff938577,0xff030304,0xff000000,0xff000001,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff48cd98,0xff64d5a1,0xff42413e,0xff000101,0xff000000,0xff564a2d,
+ 0xffd6a200,0xffdca900,0xffe4b600,0xffe6be14,0xffe9c521,0xffedcc2d,0xffeed436,0xfff2d949,0xfff5e164,0xfff3dc51,0xffeecc27,0xffe6b700,0xffd5a200,0xff9d6d05,
+ 0xff241c0f,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff42cb98,0xff47cc98,0xff64d5a1,
+ 0xff474642,0xff000000,0xff14110d,0xffa07300,0xffcd9800,0xffddaa00,0xffe6b300,0xffe7bb10,0xffe9c51f,0xffecca28,0xffedce2e,0xfff4db58,0xfffae97f,0xfff0d547,
+ 0xffeec310,0xffae8a0e,0xff564214,0xffa37605,0xff3c2f11,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,
+ 0xff69d6ae,0xff41cb98,0xff47cc97,0xff62d4a1,0xff4b4a47,0xff000000,0xff3c2e17,0xffbe8600,0xffc79400,0xffd9a700,0xffe3b200,0xffe6b90d,0xffe9c018,0xffe9c51f,
+ 0xffefd135,0xfff5e462,0xfff3d644,0xffeec30c,0xffb08c14,0xff624e17,0xffa2780b,0xffb68400,0xff2e2411,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff41cb98,0xff46cc97,0xff62d4a1,0xff504f4c,0xff010101,0xff2d2414,0xff815c0e,0xffb68700,0xffd5a100,
+ 0xffe2b100,0xffe7b700,0xffe9bc0f,0xffecc214,0xfff8d625,0xfff2cf26,0xffb6941c,0xff6e561b,0xff785d18,0xffd3a100,0xffcb9700,0xffaf7b00,0xff1f1a0e,0xff000000,
+ 0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffbfeedd,0xff69d6ae,0xff41cb98,0xff46cc98,0xff61d4a1,0xff595854,0xff020202,
+ 0xff070706,0xff523f20,0xff755414,0xff7f6213,0xffac8408,0xffbf9500,0xffc09809,0xffba9413,0xff886d1b,0xff5c4b1a,0xff5f4918,0xff9d7610,0xffe2ae00,0xffce9d00,
+ 0xffc6992b,0xffbfa262,0xff242120,0xff000000,0xff000001,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067e,0xffc0eedd,0xff6ad7ae,0xff44cc99,
+ 0xff48cd98,0xff64d5a1,0xff82ddad,0xff030303,0xff020202,0xff96928d,0xffbe9643,0xff926407,0xff795d15,0xff7b6820,0xff7c661f,0xff7e681f,0xff957819,0xffbc920e,
+ 0xffe3af00,0xffe0ac00,0xffcf9d00,0xffd0b262,0xffcecbc3,0xffc3c3c6,0xff716f77,0xff020203,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xff08067e,0xffc0eddd,0xff6cd5af,0xff49cb99,0xff4ecd9a,0xff69d4a3,0xff494845,0xff010101,0xff090908,0xffcbcbce,0xffdad2c5,0xffba8d2a,0xffb77f00,0xffd8a90b,
+ 0xffecc110,0xffeaba00,0xffdcad00,0xffd3a100,0xffcc9800,0xffcb9b15,0xffd4bf87,0xffd2d2d2,0xffd3d3d3,0xffc9c9cc,0xff9696a0,0xff08080a,0xff000000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff08067c,0xffbee8da,0xff6dcdaa,0xff4bc094,0xff53c293,0xff6cc89d,0xff0f0f0f,0xff000000,0xff060606,0xffbab6b8,
+ 0xffd0d0d3,0xffcbc3ba,0xffaf8735,0xffa07100,0xffaa7a00,0xffad7e00,0xffb08000,0xffb88d22,0xffcaaf71,0xffcfc8be,0xffcbcbcd,0xffcdcdcf,0xffdedee1,0xffd8d8de,
+ 0xffa0a0ac,0xff1d1c21,0xff000000,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xff080577,0xffb7d6cd,0xff69af98,0xff45987c,0xff489579,0xff1a1a1b,
+ 0xff000000,0xff010101,0xff080707,0xffa0a0a9,0xffababb5,0xff9e9ea7,0xffa0a0a9,0xff95866e,0xff907b52,0xff927d55,0xff9a8c75,0xff9e9da2,0xff9e9ea7,0xff9e9ea7,
+ 0xffa2a2ac,0xffacacb7,0xffafafba,0xffa3a3b0,0xff7c7c8f,0xff3e3d4f,0xff000002,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xff070568,0xff98b4ae,
+ 0xff59736d,0xff314e48,0xff202025,0xff010101,0xff000000,0xff000000,0xff232227,0xff65657a,0xff65657a,0xff616174,0xff5f5f72,0xff5e5e71,0xff5e5e71,0xff5e5e71,
+ 0xff5e5e71,0xff5f5f72,0xff5f5f72,0xff616174,0xff646478,0xff656579,0xff646479,0xff5e5e74,0xff4d4d65,0xff40405a,0xff01000c,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff050451,0xff050343,0xff030226,0xff020117,0xff000005,0xff000000,0xff000000,0xff000002,0xff030238,0xff040242,0xff040241,0xff040241,
+ 0xff040240,0xff040240,0xff040240,0xff040240,0xff040240,0xff040240,0xff040241,0xff040241,0xff040241,0xff040241,0xff040241,0xff040241,0xff040240,0xff040242,
+ 0xff03022c,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb UtilsIcon_data[] = {
+ 0x0,0x1000000,0x5000000,0x171b2b1d,0x4b416845,0x85487a4f,0xa2457d4d,0x9d397341,0x7b2a5f31,0x4419381d,0x1e111311,0xb131313,0x2040404,0x0,
+ 0x1000000,0x8000000,0x35416346,0xaf53805c,0xf6446c4f,0xff345640,0xff274433,0xff203d2a,0xff1e4028,0xe81f4e27,0x911a5121,0x36142015,0x10101010,0x30e0e0e,
+ 0x5000000,0x35416446,0xce527d5c,0xfe41634d,0xff40644b,0xff3c6348,0xff335a3e,0xff3e5d46,0xff284330,0xff192e1f,0xfa17331c,0xaa194a1f,0x39161c17,0xe181818,
+ 0x171b2b1d,0xaf56845d,0xfe446950,0xff4c7657,0xff51805b,0xff4b7d55,0xff3b6b44,0xffe4eae6,0xff819485,0xff1e3a24,0xff1f2f24,0xf81b3420,0x8c1b3d1e,0x29151515,
+ 0x4b426a46,0xf64b7856,0xff497454,0xff588b61,0xff5d9866,0xff53935c,0xff3a7843,0xff4c7853,0xff244d2b,0xff1f3f25,0xff27392c,0xff222b25,0xd71d4222,0x50161c17,
+ 0x854a7e51,0xff406a4b,0xff4a7a54,0xff589461,0xff5ca464,0xff4d9a55,0xff4a8a52,0xff678f6d,0xff19461e,0xff1d3e23,0xff2a3d2f,0xff2a312d,0xf5213c25,0x7419251a,
+ 0xa2488250,0xff355f40,0xff43774d,0xff4c8d55,0xff4a9953,0xff569e5e,0xff9fbfa2,0xffdee4df,0xff173d1c,0xff1b3820,0xff2d3d31,0xff313633,0xfe253928,0x891c291d,
+ 0x9d3c7843,0xff2d5837,0xff36693f,0xff397a42,0xff307d3a,0xff1e6d27,0xff9ebaa2,0xff95a497,0xff0e2c12,0xff1e3522,0xff323d34,0xff343836,0xfc263a29,0x8b1b261c,
+ 0x7b2c6232,0xff275831,0xff295932,0xff2b6633,0xff21652a,0xff225c29,0xffe0e7e1,0xff4b5f4e,0xff1c311f,0xff29382c,0xff39403b,0xff353736,0xf1253a28,0x7c191f1a,
+ 0x441a391d,0xe8235d2c,0xff1f4827,0xff25552c,0xff25552b,0xff57775c,0xfff7f8f7,0xff6a766c,0xff2b392e,0xff363f38,0xff3c403e,0xff2f3431,0xd2213624,0x5d151615,
+ 0x1e101210,0x911b5422,0xfa194420,0xff224228,0xff2a482f,0xff334b37,0xff415044,0xff2c392f,0xff343c36,0xff3b403d,0xff343636,0xf0263729,0x911b231c,0x37101010,
+ 0xb131313,0x36142015,0xaa194d20,0xf81d4022,0xff243728,0xff2b392e,0xff2e3931,0xff323834,0xff343735,0xff2f3531,0xf0263729,0xa51d291e,0x4f141414,0x170c0c0c,
+ 0x2040404,0x10111111,0x39171c17,0x8c1b3e1f,0xd71e4623,0xf5224026,0xfe253d29,0xfc273b29,0xf1253a28,0xd2213624,0x911b231c,0x4f141414,0x1d0b0b0b,0x6010101,
+ 0x0,0x3101010,0xe181818,0x29151515,0x50161c17,0x7419251a,0x891c291d,0x8b1b261c,0x7c191f1a,0x5d151615,0x37101010,0x170c0c0c,0x6010101,0x1000000
+};
+
+static const QRgb WordGame_data[] = {
+ 0x4000000,0x7000000,0xc000000,0x12000000,0x17000000,0x1b000000,0x1d000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,
+ 0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x1d000000,0x1b000000,
+ 0x17000000,0x12000000,0xc000000,0x7000000,0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,0xc000000,0x18000000,0xffffffdd,0xfff8edc5,0xffe9d9aa,0xffe9d9aa,
+ 0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,
+ 0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffe9d9aa,0xffd2bd87,0xff8d7132,0x3d000000,0x29000000,0x18000000,0x12000000,0x25000000,
+ 0xfff8edc5,0xffe4d2a3,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,
+ 0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffcab37a,0xffa38441,0xff312600,0x5c000000,
+ 0x3d000000,0x25000000,0x17000000,0x2e000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xff755d22,0xff000000,0x74000000,0x4e000000,0x2e000000,0x1b000000,0x36000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x87000000,0x5a000000,0x36000000,0x1d000000,0x3b000000,0xffe7d7a8,0xffc7b079,
+ 0xffa88744,0xffa58543,0xffa08141,0xff997b3d,0xff92763b,0xff8d7139,0xff7d6432,0xff544120,0xff3d2e16,0xff382914,0xff3b2b15,0xff594522,0xff796030,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x93000000,0x62000000,0x3b000000,
+ 0x1f000000,0x3d000000,0xffe5d5a7,0xffc1aa74,0xff9d7f40,0xff96783c,0xff8a6f38,0xff7a6030,0xff6b552a,0xff392b15,0xff0a0502,0xff0b0502,0xff0d0602,0xff0f0703,
+ 0xff110803,0xff120903,0xff120903,0xff2f200f,0xff896a34,0xffa37e3d,0xffa17b3b,0xffa07a3a,0xffa07a3a,0xffa17b3b,0xffa27d3c,0xffa4803e,0xffa78441,0xff735a21,
+ 0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff503d1e,0xff120903,
+ 0xff120903,0xff120903,0xff1c1207,0xff3c2c15,0xff302210,0xff120903,0xff120903,0xff120803,0xff1b1007,0xff886832,0xffa17b3b,0xffa07a3a,0xffa07a3a,0xffa17b3a,
+ 0xffa27d3c,0xffa4803e,0xffa78441,0xff735a21,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xff836834,0xff120903,0xff120903,0xff1c1207,0xff6f582b,0xffac8b46,0xffac8b46,0xffac8b46,0xff997b3e,0xff453419,0xff120903,0xff120903,0xff3c2c15,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xffd4b784,0xffba9a62,0xffa27c3b,0xffa68340,0xffaa8944,0xff453419,0xff120903,0xff120903,0xff836834,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xff3c2c15,0xff120903,0xff120903,0xff8f7339,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffa38b63,0xff967b4e,0xff8f6d34,0xff9f7c3d,0xffaa8944,0xff120903,0xff120903,0xff302210,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff796030,0xff120903,0xff120903,0xff5f4b25,0xff997b3e,0xff91743b,0xff8d7139,0xff8d7139,0xff91743b,
+ 0xff97793d,0xff6c561f,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xff887b5f,0xff84724d,0xff876c36,0xff9d7e40,0xff836834,0xff120903,
+ 0xff120903,0xff594522,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffa28342,0xff120903,0xff120803,0xff332512,0xff7e6432,
+ 0xff6a542a,0xff604b25,0xff604b25,0xff685228,0xff765d2e,0xff5b481b,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,
+ 0xffac8b46,0xffac8b46,0xff836834,0xff120903,0xff120903,0xff644d26,0xffa88542,0xffa78341,0xffa68340,0xffa68240,0xffa68340,0xffa78341,0xffa88542,0xffa98643,
+ 0xff120903,0xff120903,0xff3c2c15,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xff836834,0xff120903,0xff120803,0xff604822,0xff9f7939,0xff9c7536,0xff9b7234,0xff9a7134,
+ 0xff9a7234,0xff9d7536,0xff9f7939,0xffa37e3d,0xff120803,0xff120903,0xff3c2c15,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,
+ 0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xff997b3e,0xff120903,0xff120903,0xff453419,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff836834,0xff120903,0xff120903,0xff503d1e,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffdfd0a3,0xffb19c6a,0xff876c36,0xff7a6030,
+ 0xff6f582c,0xff170f07,0xff0b0502,0xff110a05,0xff685229,0xff796030,0xff886d36,0xff624c26,0xff3a2a14,0xff836834,0xffac8b46,0xff453419,0xff120903,0xff120903,
+ 0xff6f582b,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xffe6d6a7,0xffc1ab74,0xff9f8040,0xff9a7c3f,0xff96783c,0xff574422,0xff0f0703,0xff100703,0xff46351a,0xff9a7c3f,0xffa08140,0xff2d200f,0xff120903,0xff120903,
+ 0xff453419,0xff120903,0xff120903,0xff120903,0xffa28342,0xffac8b46,0xffac8b46,0xffac8b46,0xffa68743,0xffa28342,0xff9c7e3f,0xff634e1c,0xff000000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe8d7a7,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffa28342,0xff1c1207,0xff120903,0xff120903,0xff302210,
+ 0xff6f582b,0xff836834,0xff3c2c15,0xff120903,0xff120803,0xff110803,0xff110703,0xff5a401d,0xff997033,0xff9d7536,0xffa27d3c,0xffa88642,0xffaa8945,0xffa98844,
+ 0xffa68743,0xff6f5820,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe8d8a9,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xff8f7339,0xff1c1207,0xff120903,0xff120903,0xff120903,0xff120903,0xff120903,0xff110803,0xff100703,0xff0d0602,0xff0c0502,0xff443218,0xff6c5227,0xff765a2b,
+ 0xff866833,0xff93763a,0xff9f8040,0xffa58443,0xffa78744,0xff745c22,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffa28342,0xff503d1e,0xff1c1207,0xff120903,0xff120903,0xff120903,0xff110803,0xff2a1d0e,0xff160d05,
+ 0xff0c0602,0xff0c0602,0xff20160a,0xff755c2e,0xff8a6e37,0xff95783c,0xff9f8040,0xffa58443,0xffa78744,0xff745c22,0xff000000,0x99000000,0x66000000,0x3d000000,
+ 0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff8f7339,0xff836834,
+ 0xff836834,0xffa28342,0xffac8b46,0xffa28342,0xff453419,0xff120903,0xff3c2c15,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,
+ 0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffb7a883,0xffa99465,0xff9b7c3f,0xffa58543,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff836834,0xff8f7339,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xff755d22,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffb7a984,0xffa99565,0xff9b7c3f,0xffa58543,
+ 0xffac8b46,0xffaa8944,0xffa5803e,0xff9f7939,0xff9a7133,0xff976e31,0xff986f32,0xff9b7335,0xff9f7939,0xffa47f3e,0xffa78341,0xffa98643,0xffaa8844,0xffab8a45,
+ 0xff7c6233,0xff1b100c,0xffac8b46,0xff7c6233,0xff1b100c,0xff7c6233,0xffac8b46,0xff755d22,0xff000000,0x99000000,0x66000000,0x3d000000,0x1f000000,0x3d000000,
+ 0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffab8a45,0xffa98743,0xffa78441,0xffa5813f,0xffa4803e,0xffa5803e,0xffa68240,0xffa88541,0xffa98743,
+ 0xffaa8944,0xffab8945,0xffab8a45,0xffac8b46,0xffac8b46,0xff1b100c,0xffac8b46,0xff1b100c,0xffac8b46,0xff1b100c,0xffac8b46,0xff755d22,0xff000000,0x99000000,
+ 0x66000000,0x3d000000,0x1f000000,0x3d000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xff7c6233,0xff1b100c,0xff7c6233,0xff7c6233,0xff1b100c,0xff765d30,
+ 0xff9c7e3f,0xff634e1c,0xff000000,0x99000000,0x66000000,0x3d000000,0x1d000000,0x3b000000,0xffe9d9aa,0xffcab37a,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,0xffac8b46,
+ 0xffac8b46,0xffac8b46,0xffaa8945,0xffa98844,0xffa68743,0xff6f5820,0xff000000,0x93000000,0x62000000,0x3b000000,0x1b000000,0x36000000,0xffd2bd87,0xffa38441,
+ 0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,
+ 0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff755d22,0xff483900,0xff000000,0x87000000,0x5a000000,0x36000000,
+ 0x17000000,0x2e000000,0xff8d7132,0xff312600,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0x74000000,0x4e000000,0x2e000000,0x12000000,0x25000000,0x3d000000,0x5c000000,0x74000000,0x87000000,0x93000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,0x99000000,
+ 0x99000000,0x99000000,0x93000000,0x87000000,0x74000000,0x5c000000,0x3d000000,0x25000000,0xc000000,0x18000000,0x29000000,0x3d000000,0x4d000000,0x5a000000,
+ 0x62000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,
+ 0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x66000000,0x62000000,0x5a000000,0x4d000000,0x3d000000,0x29000000,0x18000000,0x7000000,0xf000000,
+ 0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,
+ 0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,
+ 0x18000000,0xf000000
+};
+
+static const QRgb accessories_data[] = {
+ 0x0,0x0,0x0,0x0,0xffffff,0xcc9900,0xcc9900,0xcccc33,0xcc9900,0xcc9900,0xcc9900,0xcccc33,0xcc9900,0xffcc66,
+ 0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x9999ff,
+ 0x0,0x0,0xffcc66,0x0,0xff000000,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xff000000,0xffcc66,
+ 0x0,0xffff99,0x0,0xff000000,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xffffcc99,0xff000000,0xffcc66,0x0,
+ 0xffcc66,0xffcc99,0xffffcc99,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffff99,0xffcc66,
+ 0xffff66,0xffffcc99,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffcc99,0xffffcc99,0xff000000,0xffcc66,
+ 0xffffcc99,0xff000000,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xffffcc99,0xffffcc99,0xffffcc99,0xff000000,
+ 0xff000000,0xffcc99,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xffffcc99,0xff000000,0x0,
+ 0xffff66,0xcccc33,0xff000000,0xffffcc66,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xff000000,0xffff99,0x0,
+ 0x0,0xcc9900,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xff000000,0x6666cc,0x0,
+ 0x0,0xcc9933,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff666633,0xff000000,0x0,0x0,
+ 0x0,0x0,0xff000000,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xffffcc33,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,
+ 0x0,0xcc9900,0x0,0x0,0x0,0xcc9933,0xcc9933,0xcc9933,0xcc9933,0xffcc33,0x0,0x0,0x0,0x0
+};
+
+static const QRgb appearance_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0x0,0x0,
+ 0x0,0x0,0x0,0xc0c0c0,0x0,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,
+ 0xff404000,0xff404000,0xdcdcdc,0x0,0x0,0x0,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,
+ 0xff404000,0xff404000,0xff404000,0xff404000,0xff404000,0x0,0x0,0xff404000,0xff404000,0xff404000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,
+ 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff404000,0xff404000,0xff404000,0x0,0xff404000,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,
+ 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0xff404000,0x0,0xff404000,0xff000000,0xffdcdcdc,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xff404000,0x0,0x0,
+ 0xff000000,0xff000000,0xff000000,0xff585858,0xff585858,0xff000000,0xff000000,0xff000000,0xff585858,0xff585858,0xff000000,0xff000000,0xff000000,0x0,
+ 0x0,0xffffff,0xff000000,0xffdcdcdc,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0xff000000,0xff000000,0xffdcdcdc,
+ 0xff000000,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,
+ 0xffdcdcdc,0xffdcdcdc,0xff000000,0x0,0x0,0xffffff,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff400000,0xffdcdcdc,0xff400000,
+ 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,
+ 0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0x0,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xffdcdcdc,
+ 0xff800000,0xff400000,0xff400000,0xff400000,0xff800000,0xffdcdcdc,0xffdcdcdc,0xff000000,0x585858,0x0,0x0,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xff000000,0xffdcdcdc,0xffdcdcdc,0xff800000,0xff800000,0xff800000,0xffdcdcdc,0xffdcdcdc,0xff000000,0xdcdcdc,0xdcdcdc,0x0,0x0,0xdcdcdc,
+ 0x0,0x0,0xdcdcdc,0xff000000,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xffdcdcdc,0xff000000,0xdcdcdc,0x0,0xdcdcdc,0x0,
+ 0x0,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const QRgb back_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xfffcfcfc,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xfff8f8f8,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,
+ 0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff5f5f5,0xff000000,0x6b000000,0x24000000,0xffffff,
+ 0xffffff,0xe0494e4f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff6f6f6,0xfff6f6f6,0xffeeeeee,0xffd3d3d3,0xff000000,0x8f000000,0x30000000,0xffffff,
+ 0xffffff,0x69666c6d,0xfd202323,0xfffcfcfc,0xfffcfcfc,0xfff4f4f4,0xffdddddd,0xffcccccc,0xffc9c9c9,0xffc9c9c9,0xff000000,0x8f000000,0x30000000,0xffffff,
+ 0xffffff,0xd000000,0x83565b5c,0xfd202223,0xfff4f4f4,0xffededed,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,
+ 0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffe8e8e8,0xffcbcbcb,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000,0xffffff,
+ 0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffd3d3d3,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x45000000,0x7b000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x10000000,0x26000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb back_inactive_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x3d707070,0x7f000000,0x7f000000,0x12000000,0x6000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7f000000,0x35000000,0x12000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7ffcfcfc,0x7f000000,0x47000000,0x18000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7fffffff,0x7ff8f8f8,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x12000000,0x6000000,0xffffff,
+ 0xffffff,0x3d707070,0x7e222222,0x7fffffff,0x7fffffff,0x7fffffff,0x7ffefefe,0x7fffffff,0x7fffffff,0x7ff5f5f5,0x7f000000,0x35000000,0x12000000,0xffffff,
+ 0xffffff,0x704c4c4c,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7ff6f6f6,0x7ff6f6f6,0x7feeeeee,0x7fd3d3d3,0x7f000000,0x47000000,0x18000000,0xffffff,
+ 0xffffff,0x34696969,0x7e222222,0x7ffcfcfc,0x7ffcfcfc,0x7ff4f4f4,0x7fdddddd,0x7fcccccc,0x7fc9c9c9,0x7fc9c9c9,0x7f000000,0x47000000,0x18000000,0xffffff,
+ 0xffffff,0x6000000,0x41595959,0x7e222222,0x7ff4f4f4,0x7fededed,0x7fcccccc,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x47000000,0x18000000,0xffffff,
+ 0xffffff,0x1000000,0xa000000,0x44565656,0x7f222222,0x7fe8e8e8,0x7fcbcbcb,0x7f000000,0x59000000,0x4d000000,0x47000000,0x35000000,0x12000000,0xffffff,
+ 0xffffff,0xffffff,0x1000000,0xa000000,0x44565656,0x7f222222,0x7fd3d3d3,0x7f000000,0x4d000000,0x2a000000,0x18000000,0x12000000,0x6000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x1000000,0xa000000,0x44565656,0x7f000000,0x7f000000,0x47000000,0x18000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0xa000000,0x22000000,0x3d000000,0x35000000,0x12000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x8000000,0x13000000,0x12000000,0x6000000,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb background_data[] = {
+ 0x81a1a1a1,0x81a5a5a5,0x81a9a9a9,0x81acacac,0x81adadad,0x81ababab,0x81a4a4a4,0x819d9d9d,0x81989898,0x81989898,0x819f9f9f,0x81a7a7a7,0x81acacac,0x81adadad,
+ 0x81a9a9a9,0x81a4a4a4,0x819d9d9d,0x81989898,0x81969696,0x81999999,0x81a1a1a1,0x81a9a9a9,0x81aeaeae,0x81aeaeae,0x81a9a9a9,0x81a1a1a1,0x81999999,0x81939393,
+ 0x81909090,0x81939393,0x81989898,0x819d9d9d,0x81a4a4a4,0x81a5a5a5,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81a7a7a7,0x81a0a0a0,0x819b9b9b,0x81959595,0x81989898,
+ 0x819d9d9d,0x81a5a5a5,0x81a9a9a9,0x81a9a9a9,0x81a4a4a4,0x819f9f9f,0x81989898,0x81959595,0x81939393,0x81999999,0x81a1a1a1,0x81a9a9a9,0x81adadad,0x81adadad,
+ 0x81a7a7a7,0x819d9d9d,0x81959595,0x81929292,0x81939393,0x81999999,0x819f9f9f,0x81a3a3a3,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a3a3a3,
+ 0x819d9d9d,0x81999999,0x81959595,0x81989898,0x819d9d9d,0x81a3a3a3,0x81a7a7a7,0x81a4a4a4,0x819f9f9f,0x819b9b9b,0x81959595,0x81939393,0x81969696,0x819c9c9c,
+ 0x81a1a1a1,0x81a8a8a8,0x81ababab,0x81ababab,0x81a5a5a5,0x819c9c9c,0x81959595,0x81959595,0x819b9b9b,0x81a1a1a1,0x81a7a7a7,0x81a8a8a8,0x81ababab,0x81a8a8a8,
+ 0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a1a1a1,0x819d9d9d,0x81999999,0x81969696,0x81999999,0x819f9f9f,0x81a3a3a3,0x81a4a4a4,0x81a1a1a1,0x819f9f9f,0x819b9b9b,
+ 0x81999999,0x81999999,0x819b9b9b,0x819f9f9f,0x81a1a1a1,0x81a7a7a7,0x81a9a9a9,0x81a9a9a9,0x81a4a4a4,0x819f9f9f,0x819b9b9b,0x819c9c9c,0x81a3a3a3,0x81a9a9a9,
+ 0x81adadad,0x81adadad,0x81acacac,0x81a8a8a8,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a1a1a1,0x819f9f9f,0x819b9b9b,0x81999999,0x819c9c9c,0x81a0a0a0,0x81a3a3a3,
+ 0x81a4a4a4,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0,0x81a0a0a0,0x81a1a1a1,0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81a8a8a8,0x81a5a5a5,0x81a1a1a1,
+ 0x81a0a0a0,0x81a3a3a3,0x81a9a9a9,0x81b0b0b0,0x81b1b1b1,0x81b0b0b0,0x81ababab,0x81a7a7a7,0x81a3a3a3,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819f9f9f,
+ 0x819f9f9f,0x81a0a0a0,0x81a3a3a3,0x81a7a7a7,0x81a8a8a8,0x81a9a9a9,0x81a9a9a9,0x81a8a8a8,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a5a5a5,
+ 0x81a5a5a5,0x81a7a7a7,0x81a5a5a5,0x81a4a4a4,0x81a3a3a3,0x81a7a7a7,0x81acacac,0x81b0b0b0,0x81b1b1b1,0x81aeaeae,0x81a5a5a5,0x81a1a1a1,0x819f9f9f,0x819f9f9f,
+ 0x81a0a0a0,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a7a7a7,0x81a9a9a9,0x81adadad,0x81aeaeae,0x81aeaeae,0x81aeaeae,0x81adadad,0x81acacac,
+ 0x81a9a9a9,0x81a9a9a9,0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a9a9a9,0x81acacac,0x81acacac,0x81a8a8a8,
+ 0x819f9f9f,0x819b9b9b,0x81999999,0x819b9b9b,0x819c9c9c,0x81a0a0a0,0x81a1a1a1,0x81a3a3a3,0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81acacac,0x81b0b0b0,0x81b2b2b2,
+ 0x81b1b1b1,0x81b0b0b0,0x81aeaeae,0x81acacac,0x81a9a9a9,0x81a9a9a9,0x81a7a7a7,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a1a1a1,0x81a3a3a3,
+ 0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a0a0a0,0x81989898,0x81969696,0x81959595,0x81969696,0x819b9b9b,0x819f9f9f,0x81a1a1a1,0x81a3a3a3,0x81a4a4a4,0x81a5a5a5,
+ 0x81a9a9a9,0x81adadad,0x81b0b0b0,0x81b0b0b0,0x81b0b0b0,0x81acacac,0x81a9a9a9,0x81a7a7a7,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,
+ 0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819f9f9f,0x819d9d9d,0x819c9c9c,0x819b9b9b,0x81969696,0x81959595,0x81969696,0x81999999,0x819c9c9c,0x81a0a0a0,
+ 0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a9a9a9,0x81acacac,0x81b0b0b0,0x81b0b0b0,0x81acacac,0x81a7a7a7,0x81a1a1a1,0x819d9d9d,0x819c9c9c,0x81a0a0a0,
+ 0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819d9d9d,0x819b9b9b,0x81999999,0x81989898,0x819c9c9c,0x819b9b9b,
+ 0x819c9c9c,0x819d9d9d,0x81a0a0a0,0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81ababab,0x81aeaeae,0x81b0b0b0,0x81adadad,0x81a7a7a7,0x819f9f9f,
+ 0x81989898,0x81959595,0x81969696,0x819c9c9c,0x81a1a1a1,0x81a4a4a4,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0,
+ 0x819d9d9d,0x819c9c9c,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a7a7a7,0x81a9a9a9,0x81ababab,0x81ababab,0x81acacac,0x81aeaeae,0x81b0b0b0,
+ 0x81b0b0b0,0x81acacac,0x81a3a3a3,0x81999999,0x81929292,0x81929292,0x81969696,0x819d9d9d,0x81a4a4a4,0x81a7a7a7,0x81a5a5a5,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,
+ 0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81ababab,0x81a8a8a8,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a8a8a8,0x81acacac,0x81b0b0b0,
+ 0x81b0b0b0,0x81b0b0b0,0x81b0b0b0,0x81b1b1b1,0x81aeaeae,0x81a7a7a7,0x819c9c9c,0x81939393,0x81929292,0x81959595,0x819c9c9c,0x81a4a4a4,0x81ababab,0x81acacac,
+ 0x81a8a8a8,0x81a3a3a3,0x819f9f9f,0x819f9f9f,0x81a1a1a1,0x81a5a5a5,0x81a9a9a9,0x81ababab,0x81acacac,0x81acacac,0x81adadad,0x81a9a9a9,0x81a4a4a4,0x81a3a3a3,
+ 0x81a4a4a4,0x81a9a9a9,0x81aeaeae,0x81b1b1b1,0x81b0b0b0,0x81b0b0b0,0x81aeaeae,0x81adadad,0x81a8a8a8,0x819f9f9f,0x81959595,0x81929292,0x81939393,0x819b9b9b,
+ 0x81a4a4a4,0x81acacac,0x81b1b1b1,0x81b0b0b0,0x81a9a9a9,0x81a3a3a3,0x819d9d9d,0x819d9d9d,0x81a1a1a1,0x81a7a7a7,0x81acacac,0x81b0b0b0,0x81b1b1b1,0x81b0b0b0,
+ 0x81ababab,0x81a5a5a5,0x81a0a0a0,0x81a0a0a0,0x81a3a3a3,0x81a9a9a9,0x81aeaeae,0x81b1b1b1,0x81b0b0b0,0x81acacac,0x81a8a8a8,0x81a3a3a3,0x819c9c9c,0x81959595,
+ 0x81929292,0x81939393,0x819b9b9b,0x81a1a1a1,0x81a9a9a9,0x81b0b0b0,0x81b2b2b2,0x81b1b1b1,0x81a9a9a9,0x81a0a0a0,0x819b9b9b,0x819b9b9b,0x81a1a1a1,0x81a8a8a8,
+ 0x81aeaeae,0x81b2b2b2,0x81b1b1b1,0x81aeaeae,0x81a7a7a7,0x81a0a0a0,0x819c9c9c,0x819c9c9c,0x81a1a1a1,0x81a9a9a9,0x81aeaeae,0x81b1b1b1,0x81acacac,0x81a7a7a7,
+ 0x81a0a0a0,0x819b9b9b,0x81939393,0x81929292,0x81939393,0x81999999,0x81a0a0a0,0x81a5a5a5,0x81ababab,0x81b0b0b0,0x81b0b0b0,0x81adadad,0x81a5a5a5,0x819d9d9d,
+ 0x81999999,0x819b9b9b,0x81a0a0a0,0x81a8a8a8,0x81aeaeae,0x81b2b2b2,0x81b0b0b0,0x81acacac,0x819f9f9f,0x819b9b9b,0x81969696,0x81999999,0x81a0a0a0,0x81a8a8a8,
+ 0x81aeaeae,0x81aeaeae,0x81a9a9a9,0x81a1a1a1,0x81999999,0x81939393,0x81929292,0x81939393,0x819b9b9b,0x81a0a0a0,0x81a3a3a3,0x81a5a5a5,0x81a9a9a9,0x81ababab,
+ 0x81ababab,0x81a8a8a8,0x81a1a1a1,0x819b9b9b,0x81969696,0x81989898,0x819f9f9f,0x81a8a8a8,0x81adadad,0x81aeaeae,0x81ababab,0x81a4a4a4,0x81999999,0x81969696,
+ 0x81959595,0x81999999,0x81a0a0a0,0x81a8a8a8,0x81acacac,0x81adadad,0x81a7a7a7,0x819f9f9f,0x81959595,0x81929292,0x81959595,0x819b9b9b,0x81a1a1a1,0x81a5a5a5,
+ 0x81a7a7a7,0x81a7a7a7,0x81a7a7a7,0x81a7a7a7,0x81a7a7a7,0x81a4a4a4,0x819f9f9f,0x81999999,0x81959595,0x81989898,0x819f9f9f,0x81a7a7a7,0x81ababab,0x81a9a9a9,
+ 0x81a4a4a4,0x819f9f9f,0x81969696,0x81959595,0x81959595,0x819b9b9b,0x81a0a0a0,0x81a5a5a5,0x81ababab,0x81ababab,0x81a5a5a5,0x819d9d9d,0x81989898,0x81989898,
+ 0x819c9c9c,0x81a4a4a4,0x81a9a9a9,0x81ababab,0x81a9a9a9,0x81a7a7a7,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a1a1a1,0x819c9c9c,0x81999999,0x81959595,0x81999999,
+ 0x819f9f9f,0x81a4a4a4,0x81a7a7a7,0x81a4a4a4,0x819f9f9f,0x819b9b9b,0x81989898,0x81989898,0x81999999,0x819c9c9c,0x81a0a0a0,0x81a5a5a5,0x81a9a9a9,0x81a9a9a9,
+ 0x81a5a5a5,0x81a0a0a0,0x819c9c9c,0x819f9f9f,0x81a4a4a4,0x81acacac,0x81b0b0b0,0x81b0b0b0,0x81ababab,0x81a8a8a8,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a1a1a1,
+ 0x819d9d9d,0x81999999,0x81989898,0x819b9b9b,0x81a0a0a0,0x81a4a4a4,0x81a4a4a4,0x81a1a1a1,0x819d9d9d,0x819b9b9b,0x819f9f9f,0x819f9f9f,0x819f9f9f,0x81a0a0a0,
+ 0x81a1a1a1,0x81a4a4a4,0x81a7a7a7,0x81a8a8a8,0x81a5a5a5,0x81a3a3a3,0x81a1a1a1,0x81a4a4a4,0x81a9a9a9,0x81b0b0b0,0x81b2b2b2,0x81b0b0b0,0x81ababab,0x81a7a7a7,
+ 0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x819f9f9f,0x819c9c9c,0x819b9b9b,0x819f9f9f,0x81a1a1a1,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x819f9f9f,
+ 0x81a7a7a7,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a7a7a7,0x81ababab,0x81b0b0b0,
+ 0x81b0b0b0,0x81adadad,0x81a9a9a9,0x81a4a4a4,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0,0x81a1a1a1,0x81a4a4a4,0x81a7a7a7,
+ 0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81adadad,0x81ababab,0x81a9a9a9,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,
+ 0x81a3a3a3,0x81a4a4a4,0x81a7a7a7,0x81a9a9a9,0x81a8a8a8,0x81a5a5a5,0x81a1a1a1,0x819f9f9f,0x819c9c9c,0x819d9d9d,0x819f9f9f,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,
+ 0x81a3a3a3,0x81a5a5a5,0x81a8a8a8,0x81ababab,0x81adadad,0x81aeaeae,0x81aeaeae,0x81aeaeae,0x81b0b0b0,0x81adadad,0x81ababab,0x81a9a9a9,0x81a7a7a7,0x81a5a5a5,
+ 0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x819d9d9d,0x819b9b9b,0x81999999,0x81999999,0x81999999,
+ 0x819c9c9c,0x81a0a0a0,0x81a3a3a3,0x81a4a4a4,0x81a8a8a8,0x81ababab,0x81aeaeae,0x81b1b1b1,0x81b2b2b2,0x81b2b2b2,0x81b1b1b1,0x81b0b0b0,0x81a9a9a9,0x81a8a8a8,
+ 0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a5a5a5,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a0a0a0,0x819d9d9d,0x819c9c9c,0x819b9b9b,0x81999999,
+ 0x81969696,0x81959595,0x81959595,0x81969696,0x819b9b9b,0x81a0a0a0,0x81a3a3a3,0x81a8a8a8,0x81acacac,0x81b0b0b0,0x81b3b3b3,0x81b5b5b5,0x81b3b3b3,0x81b1b1b1,
+ 0x81aeaeae,0x81acacac,0x81a3a3a3,0x81a0a0a0,0x819f9f9f,0x81a0a0a0,0x81a3a3a3,0x81a4a4a4,0x81a4a4a4,0x81a3a3a3,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,
+ 0x819f9f9f,0x819d9d9d,0x819b9b9b,0x81999999,0x81989898,0x81989898,0x81989898,0x819b9b9b,0x819d9d9d,0x81a1a1a1,0x81a7a7a7,0x81ababab,0x81b0b0b0,0x81b5b5b5,
+ 0x81b5b5b5,0x81b2b2b2,0x81aeaeae,0x81acacac,0x81a9a9a9,0x81a7a7a7,0x819b9b9b,0x81969696,0x81969696,0x819c9c9c,0x81a0a0a0,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,
+ 0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a3a3a3,0x81a1a1a1,0x81a1a1a1,0x81a0a0a0,0x81a0a0a0,0x819f9f9f,0x819f9f9f,0x819f9f9f,0x81a0a0a0,0x81a1a1a1,0x81a4a4a4,
+ 0x81a9a9a9,0x81aeaeae,0x81b3b3b3,0x81b5b5b5,0x81b1b1b1,0x81aeaeae,0x81a9a9a9,0x81a7a7a7,0x81a3a3a3,0x819d9d9d,0x81939393,0x81929292,0x81959595,0x819c9c9c,
+ 0x81a3a3a3,0x81a7a7a7,0x81a5a5a5,0x81a1a1a1,0x81a1a1a1,0x81a1a1a1,0x81a3a3a3,0x81a4a4a4,0x81a7a7a7,0x81a8a8a8,0x81a8a8a8,0x81a8a8a8,0x81a7a7a7,0x81a5a5a5,
+ 0x81a4a4a4,0x81a3a3a3,0x81a4a4a4,0x81a7a7a7,0x81acacac,0x81b1b1b1,0x81b5b5b5,0x81b2b2b2,0x81adadad,0x81a8a8a8,0x81a4a4a4,0x81a1a1a1,0x819c9c9c,0x81989898,
+ 0x81909090,0x81939393,0x819b9b9b,0x81a3a3a3,0x81a9a9a9,0x81ababab,0x81a8a8a8,0x81a3a3a3,0x819f9f9f,0x81a0a0a0,0x81a1a1a1,0x81a7a7a7,0x81a9a9a9,0x81adadad,
+ 0x81aeaeae,0x81aeaeae,0x81acacac,0x81a9a9a9,0x81a5a5a5,0x81a3a3a3,0x81a4a4a4,0x81a9a9a9,0x81aeaeae,0x81b3b3b3,0x81b2b2b2,0x81aeaeae,0x81a9a9a9,0x81a4a4a4,
+ 0x81a1a1a1,0x819c9c9c,0x81969696,0x81929292,0x81939393,0x81999999,0x81a1a1a1,0x81a9a9a9,0x81b0b0b0,0x81b0b0b0,0x81ababab,0x81a3a3a3,0x819d9d9d,0x819d9d9d,
+ 0x81a1a1a1,0x81a8a8a8,0x81adadad,0x81b1b1b1,0x81b1b1b1,0x81b1b1b1,0x81adadad,0x81a8a8a8,0x81a3a3a3,0x81a1a1a1,0x81a4a4a4,0x81a9a9a9,0x81b0b0b0,0x81b3b3b3,
+ 0x81b1b1b1,0x81ababab,0x81a5a5a5,0x81a1a1a1,0x819c9c9c,0x81989898,0x81929292,0x81909090,0x81999999,0x81a0a0a0,0x81a8a8a8,0x81aeaeae,0x81b2b2b2,0x81b1b1b1,
+ 0x81ababab,0x81a1a1a1,0x819c9c9c,0x819b9b9b,0x81a0a0a0,0x81a8a8a8,0x81aeaeae,0x81b1b1b1,0x81b1b1b1,0x81aeaeae,0x81a9a9a9,0x81a3a3a3,0x819f9f9f,0x819d9d9d,
+ 0x81a3a3a3,0x81a9a9a9,0x81b0b0b0,0x81b1b1b1,0x81adadad,0x81a8a8a8,0x81a1a1a1,0x819c9c9c,0x81969696,0x81929292,0x81909090,0x81939393,0x819d9d9d,0x81a3a3a3,
+ 0x81a9a9a9,0x81b0b0b0,0x81b1b1b1,0x81aeaeae,0x81a7a7a7,0x819f9f9f,0x81999999,0x81999999,0x819f9f9f,0x81a7a7a7,0x81aeaeae,0x81b1b1b1,0x81aeaeae,0x81ababab,
+ 0x81a3a3a3,0x819d9d9d,0x81999999,0x819c9c9c,0x81a1a1a1,0x81a9a9a9,0x81b0b0b0,0x81b0b0b0,0x81ababab,0x81a4a4a4,0x819c9c9c,0x81989898,0x81929292,0x81909090,
+ 0x81939393,0x81999999
+};
+
+static const QRgb beam_data[] = {
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xdcdcdc,
+ 0xffc3c3c3,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xffc3c3c3,
+ 0xdcdcdc,0xdcdcdc,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xffa0a0a0,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xffa0a0a0,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xff808080,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xff808080,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff808080,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff585858,0xff585858,0xff585858,0xff585858,0xff585858,0xff585858,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff585858,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff585858,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xff303030,0xff303030,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff303030,0xff303030,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc
+};
+
+static const QRgb bell_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x95050505,0x1c000000,0x32000000,0x2d000000,0x10000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x56000000,0xb6959595,0xc58c8c8c,0x62000000,0x14000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xff000000,0x8e000000,0x93000000,0xffe2e2e2,0xe69b9b9b,0x69000000,0x14000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xffffffff,0xff000000,0xc6585858,0xba5c5c5c,0xb7000000,0xffe2e2e2,0xe39c9c9c,0x47000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xffcacaca,0xffffffff,0xffffffff,0xff000000,0xb6000000,0xffe2e2e2,0xc4595959,0xc1000000,0xffe2e2e2,0x71000000,
+ 0xff000000,0xffbababa,0xffbababa,0xffbababa,0xffeaeaea,0xffeaeaea,0xffeaeaea,0xff000000,0x9e000000,0xae000000,0xffe2e2e2,0xc4000000,0xffe2e2e2,0x7d000000,
+ 0xff000000,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xff000000,0x8f000000,0x95000000,0xffe2e2e2,0xd1000000,0xffe2e2e2,0x7d000000,
+ 0xff000000,0xff8d8d8d,0xff8d8d8d,0xff8d8d8d,0xffb4b4b4,0xffb3b3b3,0xffb3b3b3,0xff000000,0x9e000000,0xae000000,0xffe2e2e2,0xc4000000,0xffe2e2e2,0x7d000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff9d9d9d,0xff000000,0xb6000000,0xffe2e2e2,0xc4595959,0xc1000000,0xffe2e2e2,0x71000000,
+ 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff000000,0xc6585858,0xba5c5c5c,0xb7000000,0xffe2e2e2,0xe39c9c9c,0x47000000,
+ 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff7c7c7c,0xff000000,0xa1000000,0x96000000,0xffe2e2e2,0xe69b9b9b,0x69000000,0x14000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xff000000,0xff000000,0x9c000000,0xbd909090,0xc58c8c8c,0x62000000,0x14000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xc8030303,0x82000000,0x51000000,0x2d000000,0x10000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x31000000,0x3f000000,0x19000000,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const unsigned char bg_data[] = {
+ 0x50,0x1a,0x0e,0x03,0x2d,0x2f,0x44,0x29,0x34,0x13,0x52,0x10,0x35,0x2d,
+ 0x05,0x44,0x29,0x13,0x3f,0x01,0x50,0x05,0x22,0x4d,0x38,0x1c,0x0a,0x4f,
+ 0x18,0x15,0x2c,0x07,0x44,0x1a,0x39,0x30,0x30,0x10,0x47,0x32,0x14,0x34,
+ 0x28,0x3b,0x38,0x0e,0x44,0x52,0x13,0x14,0x40,0x0a,0x50,0x0e,0x2e,0x2e,
+ 0x10,0x28,0x14,0x41,0x4f,0x3e,0x1e,0x1b,0x39,0x10,0x1a,0x1a,0x3b,0x1b,
+ 0x28,0x0a,0x14,0x13,0x28,0x1b,0x10,0x44,0x51,0x32,0x14,0x40,0x0c,0x08,
+ 0x50,0x39,0x2f,0x2f,0x3b,0x53,0x14,0x14,0x32,0x50,0x10,0x30,0x2f,0x39,
+ 0x44,0x44,0x44,0x46,0x28,0x0a,0x3f,0x0a,0x52,0x1b,0x44,0x46,0x52,0x2a,
+ 0x0a,0x0a,0x32,0x52,0x46,0x10,0x38,0x0e,0x44,0x52,0x32,0x53,0x25,0x0e,
+ 0x4e,0x0b,0x03,0x39,0x44,0x44,0x44,0x46,0x52,0x2a,0x01,0x53,0x47,0x1b,
+ 0x44,0x1b,0x46,0x50,0x27,0x27,0x47,0x1c,0x1b,0x1a,0x39,0x39,0x1a,0x46,
+ 0x47,0x1b,0x0e,0x2b,0x4b,0x21,0x37,0x10,0x1b,0x1b,0x1b,0x46,0x47,0x52,
+ 0x52,0x1d,0x1b,0x10,0x39,0x0e,0x0e,0x30,0x39,0x10,0x1a,0x1a,0x44,0x1a,
+ 0x1a,0x10,0x1a,0x44,0x1b,0x43,0x35,0x21,0x4b,0x22,0x3b,0x1c,0x51,0x51,
+ 0x47,0x1c,0x46,0x46,0x46,0x1b,0x10,0x05,0x2e,0x4d,0x4d,0x4d,0x4e,0x03,
+ 0x38,0x0e,0x10,0x1a,0x1a,0x1a,0x1a,0x44,0x44,0x1a,0x0e,0x03,0x04,0x30,
+ 0x52,0x2a,0x01,0x32,0x53,0x27,0x46,0x1b,0x1b,0x1a,0x0f,0x03,0x21,0x1f,
+ 0x4b,0x21,0x22,0x03,0x05,0x0e,0x10,0x1a,0x44,0x44,0x44,0x1b,0x46,0x1b,
+ 0x44,0x44,0x1b,0x26,0x13,0x3f,0x14,0x3f,0x32,0x1e,0x46,0x1b,0x44,0x1a,
+ 0x0e,0x2e,0x21,0x21,0x2b,0x03,0x0e,0x10,0x44,0x44,0x1a,0x1a,0x44,0x44,
+ 0x1b,0x1b,0x46,0x47,0x51,0x28,0x08,0x32,0x3f,0x14,0x0c,0x0a,0x53,0x1d,
+ 0x1b,0x44,0x44,0x1a,0x0e,0x03,0x4c,0x2b,0x04,0x10,0x1c,0x28,0x53,0x27,
+ 0x45,0x44,0x44,0x1b,0x1b,0x1b,0x46,0x47,0x28,0x2a,0x33,0x34,0x08,0x2a,
+ 0x08,0x29,0x27,0x1b,0x1a,0x39,0x39,0x39,0x0d,0x02,0x4c,0x2e,0x10,0x51,
+ 0x34,0x36,0x3f,0x31,0x1c,0x44,0x1b,0x46,0x46,0x46,0x46,0x46,0x47,0x27,
+ 0x28,0x53,0x1b,0x1b,0x46,0x46,0x1b,0x10,0x0e,0x2f,0x2f,0x04,0x02,0x21,
+ 0x21,0x35,0x25,0x0a,0x16,0x41,0x3f,0x28,0x44,0x43,0x1a,0x46,0x1c,0x1c,
+ 0x1b,0x44,0x44,0x44,0x44,0x44,0x37,0x0f,0x1a,0x44,0x44,0x39,0x03,0x4c,
+ 0x2b,0x2b,0x21,0x4b,0x02,0x10,0x08,0x40,0x24,0x36,0x31,0x44,0x37,0x35,
+ 0x39,0x1b,0x52,0x1e,0x46,0x1a,0x0e,0x0d,0x04,0x04,0x2d,0x38,0x44,0x1b,
+ 0x44,0x0e,0x22,0x4b,0x21,0x4c,0x22,0x2e,0x19,0x52,0x14,0x41,0x40,0x2a,
+ 0x11,0x04,0x00,0x21,0x05,0x45,0x29,0x28,0x46,0x43,0x04,0x21,0x4b,0x21,
+ 0x2f,0x1a,0x26,0x27,0x1b,0x05,0x4d,0x4b,0x2b,0x03,0x39,0x1b,0x53,0x14,
+ 0x41,0x40,0x32,0x46,0x0e,0x2b,0x1f,0x00,0x0e,0x47,0x09,0x2a,0x50,0x39,
+ 0x02,0x1f,0x4b,0x4d,0x10,0x1d,0x54,0x53,0x46,0x0e,0x4d,0x20,0x03,0x06,
+ 0x27,0x32,0x40,0x41,0x40,0x3d,0x27,0x3b,0x0d,0x2b,0x21,0x23,0x1a,0x28,
+ 0x0a,0x32,0x27,0x39,0x4d,0x1f,0x4c,0x04,0x48,0x32,0x3f,0x01,0x47,0x0f,
+ 0x02,0x22,0x38,0x1c,0x0a,0x15,0x41,0x40,0x32,0x27,0x1b,0x1a,0x0e,0x2f,
+ 0x2f,0x17,0x46,0x2a,0x3f,0x13,0x51,0x39,0x2e,0x22,0x0d,0x44,0x0a,0x3f,
+ 0x14,0x0a,0x27,0x19,0x03,0x2e,0x10,0x52,0x14,0x16,0x14,0x2a,0x46,0x3b,
+ 0x10,0x10,0x10,0x43,0x10,0x44,0x52,0x0a,0x14,0x13,0x51,0x10,0x37,0x05,
+ 0x44,0x52,0x3f,0x14,0x14,0x32,0x27,0x1a,0x37,0x37,0x3b,0x28,0x34,0x34,
+ 0x53,0x11,0x0e,0x0d,0x0e,0x10,0x44,0x44,0x44,0x46,0x53,0x0a,0x14,0x0a,
+ 0x51,0x44,0x43,0x44,0x51,0x32,0x13,0x13,0x0a,0x53,0x1d,0x1a,0x0e,0x0e,
+ 0x1a,0x1d,0x53,0x52,0x44,0x04,0x2b,0x2b,0x2f,0x39,0x44,0x44,0x1b,0x1c,
+ 0x07,0x0a,0x34,0x09,0x27,0x44,0x44,0x1c,0x29,0x32,0x52,0x52,0x1e,0x47,
+ 0x46,0x44,0x10,0x39,0x1a,0x1b,0x46,0x44,0x05,0x21,0x1f,0x21,0x2f,0x10,
+ 0x44,0x1b,0x1b,0x46,0x1e,0x31,0x2a,0x52,0x1c,0x1b,0x1b,0x46,0x50,0x51,
+ 0x10,0x1a,0x3b,0x44,0x44,0x44,0x1a,0x1a,0x1a,0x44,0x44,0x10,0x2f,0x4c,
+ 0x21,0x4e,0x0e,0x44,0x46,0x1c,0x46,0x46,0x50,0x47,0x47,0x46,0x44,0x10,
+ 0x19,0x39,0x39,0x19,0x2e,0x2f,0x38,0x39,0x10,0x1a,0x44,0x44,0x44,0x1b,
+ 0x1b,0x44,0x43,0x0e,0x0f,0x1a,0x46,0x1e,0x53,0x07,0x52,0x1c,0x46,0x1b,
+ 0x1b,0x1a,0x30,0x2f,0x2d,0x02,0x02,0x02,0x4c,0x2e,0x2f,0x0e,0x10,0x1a,
+ 0x44,0x44,0x1b,0x1b,0x46,0x46,0x46,0x46,0x47,0x28,0x2a,0x0a,0x0a,0x0a,
+ 0x31,0x27,0x1b,0x44,0x39,0x2f,0x02,0x4b,0x1f,0x1f,0x4b,0x21,0x05,0x39,
+ 0x1a,0x1a,0x1a,0x1a,0x44,0x44,0x1b,0x1b,0x46,0x47,0x28,0x53,0x32,0x0a,
+ 0x0c,0x14,0x14,0x3f,0x2a,0x27,0x1b,0x39,0x04,0x21,0x12,0x3c,0x12,0x4b,
+ 0x22,0x03,0x1b,0x27,0x52,0x27,0x1b,0x44,0x44,0x1b,0x1b,0x1b,0x46,0x1c,
+ 0x52,0x29,0x09,0x0a,0x13,0x13,0x13,0x09,0x28,0x46,0x10,0x2f,0x21,0x3c,
+ 0x3c,0x1f,0x4d,0x03,0x38,0x10,0x32,0x0c,0x3f,0x08,0x1d,0x1b,0x1b,0x46,
+ 0x46,0x46,0x1b,0x1b,0x46,0x46,0x47,0x27,0x52,0x52,0x52,0x27,0x1c,0x44,
+ 0x0e,0x4d,0x49,0x3c,0x4b,0x02,0x38,0x10,0x45,0x4a,0x15,0x41,0x14,0x53,
+ 0x1b,0x10,0x1a,0x46,0x1c,0x1c,0x1b,0x44,0x10,0x19,0x39,0x39,0x10,0x3b,
+ 0x44,0x1b,0x44,0x43,0x03,0x4b,0x3c,0x1f,0x2e,0x30,0x44,0x50,0x53,0x34,
+ 0x18,0x15,0x32,0x25,0x0e,0x2f,0x39,0x1b,0x1e,0x27,0x46,0x10,0x05,0x2e,
+ 0x02,0x02,0x03,0x0e,0x1a,0x1b,0x44,0x0e,0x4d,0x12,0x1f,0x4d,0x0e,0x44,
+ 0x50,0x53,0x3f,0x41,0x4f,0x0a,0x1c,0x05,0x2b,0x21,0x0d,0x1b,0x28,0x28,
+ 0x46,0x19,0x2e,0x4b,0x4b,0x20,0x2e,0x0f,0x1b,0x46,0x44,0x05,0x21,0x12,
+ 0x00,0x2f,0x3b,0x50,0x53,0x34,0x16,0x18,0x0a,0x27,0x39,0x22,0x1f,0x4b,
+ 0x37,0x46,0x08,0x2a,0x47,0x19,0x02,0x4b,0x4b,0x4d,0x42,0x1b,0x52,0x28,
+ 0x45,0x05,0x21,0x4b,0x2d,0x30,0x46,0x53,0x3f,0x41,0x18,0x40,0x28,0x1b,
+ 0x05,0x2b,0x4b,0x22,0x3a,0x51,0x0a,0x33,0x51,0x10,0x02,0x20,0x02,0x37,
+ 0x1b,0x07,0x33,0x08,0x46,0x05,0x2b,0x21,0x2f,0x44,0x53,0x34,0x16,0x18,
+ 0x40,0x3d
+};
+
+static const QRgb bg_ctable[] = {
+ 0xff618b80,0xff52776e,0xff5f897e,0xff5e877d,0xff5d877c,0xff5c857b,0xff5a8379,0xff557a70,0xff54786f,0xff53786e,0xff52766d,0xff5f887d,0xff50746b,0xff5d867b,
+ 0xff5c847a,0xff5b8479,0xff5a8278,0xff588076,0xff628e83,0xff52756c,0xff50736a,0xff4f7169,0xff4e7168,0xff5c8379,0xff4d6f67,0xff5b8378,0xff5a8177,0xff587f75,
+ 0xff577d74,0xff567d73,0xff557b72,0xff628d82,0xff618b81,0xff608b80,0xff5f897f,0xff5e897e,0xff4e7067,0xff587e74,0xff577c73,0xff567c72,0xff557a71,0xff547a70,
+ 0xff53786f,0xff608a7f,0xff51766d,0xff5f887e,0xff5e887d,0xff5d867c,0xff5b847a,0xff54796f,0xff53776e,0xff52776d,0xff51756c,0xff5e877c,0xff4f736a,0xff5d857b,
+ 0xff5c857a,0xff5b8379,0xff5a8378,0xff598177,0xff638f84,0xff53766d,0xff52766c,0xff51746b,0xff4f7269,0xff4e7068,0xff5c8479,0xff5b8278,0xff598076,0xff587e75,
+ 0xff577e74,0xff567c73,0xff557c72,0xff638e83,0xff547a71,0xff618c81,0xff608a80,0xff5f8a7f,0xff5e887e,0xff4f7168,0xff577d73,0xff567b72,0xff557b71,0xff547970,
+ 0xff53796f
+};
+
+static const QRgb binary_data[] = {
+ 0x7000000,0xe000000,0x23000000,0x42000000,0x55000000,0x5b000000,0x5d000000,0x5a000000,0x49000000,0x34000000,0x24000000,0x1a000000,0x11000000,0xffffff,
+ 0xc000000,0x18000000,0x48000000,0xffffffff,0xfffdfdfd,0xffeaeaea,0xffb0b0b0,0xffffffff,0xf3c8c8c8,0x6b000000,0x44000000,0x2d000000,0x1d000000,0xc000000,
+ 0x11000000,0x24000000,0x62000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff969696,0xffffffff,0xffffffff,0xf7c1c1c1,0x75000000,0x46000000,0x2a000000,0x11000000,
+ 0x16000000,0x2e000000,0x71000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff939393,0xffffffff,0xffffffff,0xffffffff,0xf5c6c6c6,0x65000000,0x36000000,0x16000000,
+ 0x1a000000,0x35000000,0x7b000000,0xffffffff,0xfffdfdfd,0xffe8e8e8,0xffababab,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7c000000,0x3e000000,0x1a000000,
+ 0x1c000000,0x39000000,0x80000000,0xffffffff,0xfffdfdfd,0xfff5f5f5,0xffd7d7d7,0xffababab,0xff939393,0xff969696,0xffb0b0b0,0x85000000,0x43000000,0x1c000000,
+ 0x1d000000,0x3b000000,0x83000000,0xffffffff,0xffffffff,0xfffcfcfc,0xfff5f5f5,0xffe8e8e8,0xffe2e2e2,0xffe2e2e2,0xffeaeaea,0x88000000,0x46000000,0x1d000000,
+ 0x1d000000,0x3c000000,0x84000000,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffcfcfc,0xfffdfdfd,0x88000000,0x47000000,0x1d000000,
+ 0x1d000000,0x3b000000,0x83000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x88000000,0x46000000,0x1d000000,
+ 0x1c000000,0x39000000,0x81000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x85000000,0x44000000,0x1c000000,
+ 0x1a000000,0x36000000,0x7b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x3f000000,0x1a000000,
+ 0x17000000,0x30000000,0x73000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x77000000,0x38000000,0x16000000,
+ 0x14000000,0x28000000,0x5e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x61000000,0x2e000000,0x11000000,
+ 0x10000000,0x20000000,0x3e000000,0x64000000,0x7e000000,0x89000000,0x8f000000,0x8f000000,0x89000000,0x7f000000,0x65000000,0x40000000,0x25000000,0xc000000
+};
+
+static const QRgb bold_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,
+ 0xff000000,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,
+ 0xff000000,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const unsigned char c_src_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x01,0x01,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x0d,0x15,0x0d,
+ 0x15,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0d,0x08,
+ 0x0d,0x0d,0x0d,0x15,0x0d,0x15,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x15,
+ 0x0d,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15,0x01,0x00,0x00,0x00,0x00,
+ 0x01,0x15,0x0d,0x0d,0x0d,0x15,0x0d,0x08,0x08,0x15,0x15,0x01,0x00,0x00,
+ 0x00,0x01,0x15,0x0d,0x08,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x15,0x15,0x01,
+ 0x00,0x00,0x00,0x01,0x0d,0x15,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15,
+ 0x08,0x01,0x00,0x00,0x01,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x08,0x08,
+ 0x15,0x15,0x01,0x00,0x00,0x01,0x15,0x15,0x08,0x15,0x15,0x15,0x0d,0x15,
+ 0x15,0x15,0x15,0x15,0x01,0x00,0x01,0x15,0x15,0x15,0x15,0x08,0x08,0x08,
+ 0x15,0x0d,0x15,0x0d,0x15,0x15,0x01,0x00,0x01,0x08,0x15,0x15,0x15,0x15,
+ 0x15,0x15,0x08,0x08,0x08,0x15,0x15,0x08,0x01,0x00,0x00,0x01,0x01,0x08,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x01,0x01,0x08,0x15,0x15,0x15,0x15,0x15,0x08,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x08,0x15,0x08,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,
+ 0x00,0x00,0x00,0x00
+};
+
+static const QRgb c_src_ctable[] = {
+ 0xc6c6c6,0xff000000,0xffc3c3c3,0xff303030,0xffc0c0ff,0xffff0000,0xff008080,0xff800000,0xffc0c000,0xff0000c0,0xff808080,0xffc0ffc0,0xff00ffff,0xffffffff,
+ 0xffa0a0a0,0xff00ff00,0xffffff00,0xffffc0ff,0xff404000,0xff00c000,0xff000080,0xffffffc0,0xff400000,0xffc05800,0xff800080,0xff008000,0xff00c0c0,0xffdcdcdc,
+ 0xffff8000,0xffffc0c0,0xff585858,0xffc00000,0xffffdca8,0xff808000,0xffffa858,0xff004000,0xffc000c0,0xff0000ff,0xffff00ff,0xffc0ffff,0xff004040
+};
+
+static const QRgb calculator_data[] = {
+ 0x2000000,0xfff9f9f9,0xfff3f3f3,0xffe6e6e6,0xffdbdbdb,0xffe4e4e4,0xffeeeeee,0xffeeeeee,0xffeeeeee,0xffeeeeee,0xffeeeeee,0xffeeeeee,0x13000000,0xe000000,
+ 0x7000000,0xff76aa76,0xff66a166,0xff4d874d,0xffffffff,0xff4d874d,0xff589958,0xff589958,0xff589958,0xff589958,0xff589958,0xff3e8a3e,0xff006a00,0x2b000000,
+ 0xe000000,0xff629a62,0xff3c7c3c,0xff1e5c1e,0xffffffff,0xff1e5c1e,0xff247024,0xff287a28,0xff297f29,0xff297f29,0xff297f29,0xff006d00,0xff005400,0x55000000,
+ 0x13000000,0xff508d50,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff006500,0xff006e00,0xff006e00,0xff006e00,0xff006300,0xff004b00,0x71000000,
+ 0x15000000,0xff549354,0xff247024,0xff004f00,0xffffffff,0xff004a00,0xff005300,0xff005800,0xff005d00,0xff005d00,0xff006100,0xff005f00,0xff004b00,0x7f000000,
+ 0x15000000,0xff589958,0xff297f29,0xff006100,0xffffffff,0xff005800,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff005b00,0xff004b00,0x7f000000,
+ 0x15000000,0xff549354,0xff257625,0xff006500,0xff006500,0xff006100,0xff005800,0xff005800,0xff005800,0xff005300,0xff005d00,0xff005f00,0xff004b00,0x7f000000,
+ 0x15000000,0xff508d50,0xffffffff,0xff8fb28f,0xff006500,0xff8fb28f,0xffffffff,0xff006500,0xff8fb68f,0xffffffff,0xff8fb68f,0xff006300,0xff004b00,0x7f000000,
+ 0x15000000,0xff549354,0xff9ab89a,0xffffffff,0xff8fad8f,0xffffffff,0xff8faf8f,0xff005d00,0xff005800,0xff005300,0xff005800,0xff005800,0xff004800,0x7f000000,
+ 0x15000000,0xff589958,0xff257625,0xff8fad8f,0xffffffff,0xff8fad8f,0xff005d00,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff004600,0x7f000000,
+ 0x15000000,0xff549354,0xff9ab89a,0xffffffff,0xff8fad8f,0xffffffff,0xff8faf8f,0xff005d00,0xff005800,0xff005300,0xff005800,0xff005800,0xff004800,0x7f000000,
+ 0x15000000,0xff397f39,0xffffffff,0xff8fad8f,0xff005b00,0xff8fad8f,0xffffffff,0xff005b00,0xff8fb18f,0xffffffff,0xff8fb18f,0xff005a00,0xff004700,0x7f000000,
+ 0x13000000,0xff006600,0xff004e00,0xff004800,0xff004b00,0xff004800,0xff004600,0xff004800,0xff004800,0xff004600,0xff004800,0xff004700,0xff004000,0x71000000,
+ 0xe000000,0x2b000000,0x55000000,0x71000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x71000000,0x55000000
+};
+
+static const QRgb center_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const unsigned char citytime_icon_data[] = {
+ 0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x06,0x06,0x06,0x06,0x06,0x0c,0x0c,0x0c,
+ 0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x06,0x0d,0x02,0x0d,0x02,0x0d,0x0d,0x06,
+ 0x06,0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x02,0x00,0x02,0x00,0x03,0x00,0x03,
+ 0x00,0x02,0x0d,0x06,0x0c,0x0c,0x0c,0x06,0x0b,0x00,0x09,0x08,0x09,0x00,
+ 0x00,0x08,0x03,0x00,0x03,0x00,0x06,0x0c,0x0c,0x06,0x0b,0x08,0x08,0x08,
+ 0x08,0x08,0x00,0x02,0x00,0x02,0x00,0x03,0x06,0x0c,0x06,0x0b,0x08,0x03,
+ 0x02,0x03,0x08,0x07,0x03,0x00,0x02,0x01,0x02,0x00,0x03,0x06,0x06,0x0b,
+ 0x07,0x0a,0x00,0x0a,0x00,0x02,0x07,0x08,0x00,0x08,0x01,0x02,0x0b,0x06,
+ 0x06,0x0b,0x02,0x00,0x0a,0x00,0x0a,0x00,0x00,0x04,0x08,0x01,0x08,0x01,
+ 0x0b,0x06,0x06,0x0b,0x08,0x02,0x03,0x02,0x07,0x02,0x00,0x07,0x01,0x08,
+ 0x05,0x08,0x0b,0x06,0x06,0x0b,0x08,0x01,0x08,0x03,0x02,0x07,0x02,0x01,
+ 0x08,0x01,0x08,0x05,0x0b,0x06,0x06,0x0b,0x08,0x08,0x01,0x03,0x00,0x02,
+ 0x03,0x08,0x01,0x08,0x01,0x08,0x0b,0x06,0x0c,0x06,0x0b,0x01,0x08,0x01,
+ 0x0a,0x00,0x08,0x01,0x00,0x01,0x08,0x0b,0x06,0x0c,0x0c,0x06,0x0b,0x08,
+ 0x08,0x08,0x07,0x02,0x01,0x08,0x01,0x08,0x0b,0x0b,0x06,0x0c,0x0c,0x0c,
+ 0x06,0x05,0x05,0x08,0x08,0x01,0x08,0x08,0x01,0x0b,0x05,0x06,0x0c,0x0c,
+ 0x0c,0x0c,0x0c,0x06,0x06,0x05,0x08,0x05,0x05,0x08,0x05,0x06,0x06,0x0c,
+ 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x06,0x06,0x06,0x06,0x06,0x06,0x0c,
+ 0x0c,0x0c,0x0c,0x0c
+};
+
+static const QRgb citytime_icon_ctable[] = {
+ 0xffffa858,0xff000080,0xffc0c000,0xff808000,0xffc05800,0xffc0c0ff,0xff000000,0xffff8000,0xff0000c0,0xff800000,0xffffdca8,0xff0000ff,0xc6c6c6,0xffffffff
+};
+
+static const QRgb close_data[] = {
+ 0xffffff,0xffffff,0xffffff,0x66b16d6d,0xba985f5f,0xeb7b4a4a,0xfd693c3c,0xeb7a3e3e,0xba934242,0x66a93f3f,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1bcb7676,0x9db97272,0xfda96a6a,0xffa76565,0xffa75f5f,0xffa65757,0xffa44c4c,0xffa04040,0xfda03535,0x9dad2a2a,0x1bbd1f1f,0xffffff,0xffffff,
+ 0xffffff,0x9db86c6c,0xffb36c6c,0xffc69898,0xffca7373,0xffcf6565,0xffcf5c5c,0xffcb4f4f,0xffc34949,0xffc07474,0xffa61b1b,0x9caa0c0c,0xffffff,0xffffff,
+ 0x66ae5c5c,0xfda65e5e,0xffc59494,0xffe9e9e9,0xffefd7d7,0xffdd5e5e,0xffdb4848,0xffda4b4b,0xffeecdcd,0xffe9e9e9,0xffbd6464,0xfd9a0000,0x60a30000,0xffffff,
+ 0xba944a4a,0xffa45151,0xffc96565,0xffefd5d5,0xfffdfdfd,0xfff6d5d5,0xffdd4242,0xfff6d1d1,0xfffdfdfd,0xffedc7c7,0xffb51313,0xff930000,0xaf910000,0xffffff,
+ 0xeb783434,0xffa34343,0xffca4b4b,0xffdb4c4c,0xfff7d5d5,0xffffffff,0xfffdf4f4,0xffffffff,0xfff5cfcf,0xffc81616,0xffb00000,0xff8e0000,0xe37f0000,0xffffff,
+ 0xfd662323,0xffa13434,0xffc93737,0xffd72d2d,0xffdb3737,0xfffdf4f4,0xffffffff,0xfffdf4f4,0xffd12727,0xffbe0000,0xffa80000,0xff870000,0xfc740000,0xffffff,
+ 0xeb741d1d,0xff9d1f1f,0xffc31e1e,0xffd52525,0xfff6cfcf,0xffffffff,0xfffdf4f4,0xffffffff,0xfff2cece,0xffb71616,0xff9a0000,0xff7b0000,0xe36f0000,0xffffff,
+ 0xba8c1010,0xff990808,0xffba1313,0xffecc7c7,0xfffdfdfd,0xfff2cece,0xffcb2828,0xfff0cece,0xfffdfdfd,0xffe3c7c7,0xff8d1313,0xff6f0000,0xaf700000,0xffffff,
+ 0x669e0000,0xfd930000,0xffb56060,0xffe9e9e9,0xffe8c7c7,0xffb91717,0xffb10000,0xffad1717,0xffe3c7c7,0xffe9e9e9,0xff9a6060,0xfd660000,0x60740000,0xffffff,
+ 0xffffff,0x9d990000,0xff8e0000,0xffad6161,0xff9b1414,0xff9a0000,0xff960000,0xff8c0000,0xff851414,0xff986161,0xff650000,0x9c6b0000,0xffffff,0xffffff,
+ 0xffffff,0x1ba40000,0x9c8d0000,0xfd7c0000,0xff7a0000,0xff760000,0xff730000,0xff6b0000,0xff630000,0xfd5f0000,0x9c680000,0x1b780000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x60850000,0xaf750000,0xe2670000,0xfc5f0000,0xe25e0000,0xaf620000,0x60690000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb copy_data[] = {
+ 0xffffff,0x4200,0x1200,0x800,0x28000000,0xa6000000,0x9b000000,0xa6000000,0xb72b2b2b,0x6666666,0x30303,0x0,0x0,0x0,
+ 0xffffff,0x4200,0x1200,0x800,0x28000000,0xa6474747,0x9bb4b4b4,0xa6929292,0xaebdbdbd,0x7b777777,0xe000000,0x2000000,0x0,0x0,
+ 0xffffff,0x4200,0x1200,0x500,0x26000000,0xa5686768,0x9affffff,0xa6c1c1c1,0xa9eaeaea,0xb3eeeeee,0x8e5c5c5c,0x1c000000,0x2000000,0x0,
+ 0xffffff,0x5004200,0xc2001200,0xe21a1f1a,0xe9191a19,0xf9253525,0xd5a8bba8,0xa0b0afb0,0xa9dcdbdc,0xaaffffff,0xb1f3f3f3,0x91606060,0x1e0a0a0a,0x2000000,
+ 0xffffff,0x5004100,0xd2051905,0xf5eef2ee,0xf9d7ead7,0xffc6e3c6,0xffc8d2c8,0xde4f6a4f,0xb0b6bab6,0xa9edeced,0xaaefefef,0xb3dedede,0x86363636,0x5000000,
+ 0xffffff,0x5004100,0xd0051905,0xf3edf1ed,0xf7c4dec4,0xff9ac29a,0xffffffff,0xffc1cfc1,0xe3496649,0xb27b857b,0xa8adadad,0xafa8a8a8,0x8a000000,0x10000000,
+ 0xffffff,0x5004100,0xd0051905,0xf3ebefeb,0xf7c0dbc0,0xff9abd9a,0xffffffff,0xffffffff,0xffc9d2c9,0xe37a967a,0xafc4ccc4,0xa8c8c8c8,0x89000000,0x15000000,
+ 0xffffff,0x4004200,0xd0051a05,0xf3e7eee7,0xf7cbe3cb,0xfe89b889,0xffabc8ab,0xffabccab,0xffd4edd4,0xff475847,0xbb97a797,0xa0c9c9c9,0x81000000,0x13000000,
+ 0xffffff,0x4004300,0xd0051905,0xf1dde8dd,0xf4ddeedd,0xfeb2d3b2,0xfda0c6a0,0xfda3caa3,0xfdc4e4c4,0xfe292e29,0xc17a8c7a,0x9dc3c3c3,0x7e000000,0x10000000,
+ 0xffffff,0x4004600,0xcf051905,0xefd3e2d3,0xefd9ecd9,0xfcd0e5d0,0xfbd9ebd9,0xfbdbecdb,0xfbedfaed,0xfc393f39,0xc57c8e7c,0xa5c2c2c2,0x80000000,0xc000000,
+ 0xffffff,0x3004800,0xce051a05,0xeecadcca,0xeccae3ca,0xf7bdd9bd,0xf7bfdcbf,0xf7c4dec4,0xf7d4eed4,0xf8303730,0xc2101410,0xa41f1f1f,0x7a000000,0x4000000,
+ 0xffffff,0x3004700,0xce061a06,0xeecbe2cb,0xe9cdebcd,0xefc7e6c7,0xf0c8e6c8,0xf0cce8cc,0xefe3fde3,0xf1343c34,0x74173317,0x27414141,0x1c000000,0x2000000,
+ 0xffffff,0xa004000,0xdb000f00,0xfa8c9a8c,0xf98fa38f,0xff8b9f8b,0xff8c9f8c,0xff90a290,0xffa0afa0,0xff242724,0x51002900,0x1000000,0x2000000,0x0,
+ 0xffffff,0xd003900,0x821e401e,0xaa294729,0xb8173017,0xae132e13,0xab132e13,0xab132e13,0xab142f14,0xa7052205,0x2a003b00,0x0,0x0,0x0
+};
+
+static const QRgb copy_inactive_data[] = {
+ 0xffffff,0x4200,0x1200,0x800,0x14000000,0x53000000,0x4d000000,0x53000000,0x5b2b2b2b,0x3666666,0x30303,0x0,0x0,0x0,
+ 0xffffff,0x4200,0x1200,0x800,0x14000000,0x53474747,0x4db4b4b4,0x53929292,0x57bdbdbd,0x3d777777,0x7000000,0x1000000,0x0,0x0,
+ 0xffffff,0x4200,0x1200,0x500,0x13000000,0x52676767,0x4dffffff,0x53c1c1c1,0x54eaeaea,0x59eeeeee,0x475c5c5c,0xe000000,0x1000000,0x0,
+ 0xffffff,0x2252525,0x610a0a0a,0x711d1d1d,0x74191919,0x7c2d2d2d,0x6ab1b1b1,0x50afafaf,0x54dbdbdb,0x55ffffff,0x58f3f3f3,0x48606060,0xf0a0a0a,0x1000000,
+ 0xffffff,0x2242424,0x690f0f0f,0x7af0f0f0,0x7ce0e0e0,0x7fd4d4d4,0x7fcdcdcd,0x6f5d5d5d,0x58b7b7b7,0x54ececec,0x55efefef,0x59dedede,0x43363636,0x2000000,
+ 0xffffff,0x2242424,0x680f0f0f,0x79eeeeee,0x7bd1d1d1,0x7fadadad,0x7fffffff,0x7fc8c8c8,0x71585858,0x59808080,0x54adadad,0x57a8a8a8,0x45000000,0x8000000,
+ 0xffffff,0x2242424,0x680f0f0f,0x79ededed,0x7bcdcdcd,0x7fababab,0x7fffffff,0x7fffffff,0x7fcdcdcd,0x71888888,0x57c8c8c8,0x54c8c8c8,0x44000000,0xa000000,
+ 0xffffff,0x2252525,0x68101010,0x79eaeaea,0x7bd7d7d7,0x7fa1a1a1,0x7fb9b9b9,0x7fbcbcbc,0x7fe0e0e0,0x7f4f4f4f,0x5d9f9f9f,0x50c9c9c9,0x40000000,0x9000000,
+ 0xffffff,0x2252525,0x680f0f0f,0x78e3e3e3,0x7ae5e5e5,0x7fc3c3c3,0x7eb3b3b3,0x7eb6b6b6,0x7ed4d4d4,0x7f2b2b2b,0x60828282,0x4ec3c3c3,0x3f000000,0x8000000,
+ 0xffffff,0x2272727,0x670f0f0f,0x77dadada,0x77e3e3e3,0x7edadada,0x7de2e2e2,0x7de3e3e3,0x7df3f3f3,0x7e3c3c3c,0x62858585,0x52c2c2c2,0x40000000,0x6000000,
+ 0xffffff,0x1282828,0x67101010,0x77d2d2d2,0x76d7d7d7,0x7bcbcbcb,0x7bcdcdcd,0x7bd1d1d1,0x7be1e1e1,0x7c343434,0x61121212,0x521f1f1f,0x3d000000,0x2000000,
+ 0xffffff,0x1282828,0x67101010,0x77d7d7d7,0x74dcdcdc,0x77d7d7d7,0x78d7d7d7,0x78dadada,0x77f0f0f0,0x78373737,0x3a252525,0x13414141,0xe000000,0x1000000,
+ 0xffffff,0x5242424,0x6d080808,0x7d939393,0x7c999999,0x7f959595,0x7f959595,0x7f999999,0x7fa7a7a7,0x7f252525,0x28171717,0x0,0x1000000,0x0,
+ 0xffffff,0x6202020,0x412f2f2f,0x55383838,0x5c242424,0x57202020,0x55202020,0x55202020,0x55222222,0x53141414,0x15202020,0x0,0x0,0x0
+};
+
+static const QRgb cut_data[] = {
+ 0xc000000,0x9000000,0xa75b5b5b,0xe7545454,0x5d353535,0x4000000,0x12000000,0xb000000,0xb000000,0xd000000,0x3f535353,0x9e787878,0x423f3f3f,0xe000000,
+ 0x7000000,0x821a1a1a,0xe5313131,0xfb232323,0xd0252525,0x881a1a1a,0xd000000,0x14000000,0x16000000,0x53494949,0xbb676767,0xe2393939,0xb3474747,0x382e2e2e,
+ 0x13000000,0xc30a0a0a,0xff1f1f1f,0xcc4a4a4a,0xf95d5d5d,0xff242424,0x911b1b1b,0x1e000000,0x6e4b4b4b,0xe06a6a6a,0xff2e2e2e,0xff282828,0xff373737,0x97272727,
+ 0x11000000,0x9d4c4c4c,0xfd4a4a4a,0xf22b2b2b,0x982d2d2d,0xe56d6d6d,0xfe252525,0xba4c4c4c,0xda4c4c4c,0xfe343434,0x8d141414,0x6b121212,0xc5393939,0xb4191919,
+ 0x12000000,0x27000000,0x9b5f5f5f,0xf84b4b4b,0xf82f2f2f,0xe2434343,0xff404040,0xff2b2b2b,0xff161616,0xe42b2b2b,0xa6232323,0xaf333333,0xfd4f4f4f,0xaa272727,
+ 0xc000000,0x15000000,0x2e000000,0x8f606060,0xd4282828,0xed2f2f2f,0xff484848,0xff6d6d6d,0xff343434,0xff1b1b1b,0xf7686868,0xf5747474,0xea707070,0x7b3e3e3e,
+ 0x7000000,0xd000000,0x1a000000,0x2b000000,0x5c030303,0xda1d1d1d,0xff707070,0xfff7f7f7,0xffa7a7a7,0xff272727,0xa7656565,0x96747474,0x735d5d5d,0x37080808,
+ 0x4000000,0x8000000,0x14000000,0x32000000,0xca1f1f1f,0xff757575,0xff5a5a5a,0xfe919191,0xfef2f2f2,0xffaeaeae,0xc5000000,0x52000000,0x3e000000,0x2a000000,
+ 0x5000000,0xe000000,0x25000000,0xc6202020,0xffa8a8a8,0xfed1d1d1,0xff717171,0xff202020,0xfdafafaf,0xfdf9f9f9,0xffb1b1b1,0xbe0f0f0f,0x3d000000,0x2b000000,
+ 0xe000000,0x1e000000,0xc5202020,0xffa8a8a8,0xfff0f0f0,0xffaeaeae,0xd61b1b1b,0x7d000000,0xdd2b2b2b,0xffb7b7b7,0xfff6f6f6,0xffaeaeae,0xb7101010,0x2d000000,
+ 0x3000000,0xab171717,0xff9a9a9a,0xffe8e8e8,0xffb9b9b9,0xf42b2b2b,0xb3171717,0x43000000,0x4f000000,0xda2d2d2d,0xffbababa,0xfef7f7f7,0xffaaaaaa,0x98050505,
+ 0x6000000,0xb7161616,0xffb6b6b6,0xffbcbcbc,0xd1202020,0x53000000,0x44000000,0x38000000,0x31000000,0x3a000000,0xd72e2e2e,0xffc4c4c4,0xffc1c1c1,0xa7030303,
+ 0x0,0xc01d1d1d,0xff898989,0xcc2d2d2d,0x4a030303,0x3a000000,0x2f000000,0x22000000,0x1c000000,0x1f000000,0x30000000,0xd33b3b3b,0xff8d8d8d,0xae131313,
+ 0x5000000,0x65141414,0x97101010,0x38101010,0x2a000000,0x24000000,0x1a000000,0xf000000,0xb000000,0xe000000,0x13000000,0x2d000000,0x99121212,0x65121212
+};
+
+static const QRgb cut_inactive_data[] = {
+ 0x6000000,0x4000000,0x535b5b5b,0x73545454,0x2e353535,0x2000000,0x9000000,0x5000000,0x5000000,0x6000000,0x1f535353,0x4f787878,0x213f3f3f,0x7000000,
+ 0x3000000,0x411a1a1a,0x72313131,0x7d232323,0x68252525,0x441a1a1a,0x6000000,0xa000000,0xb000000,0x29494949,0x5d676767,0x71393939,0x59474747,0x1c2e2e2e,
+ 0x9000000,0x610a0a0a,0x7f1f1f1f,0x664a4a4a,0x7c5d5d5d,0x7f242424,0x481b1b1b,0xf000000,0x374b4b4b,0x706a6a6a,0x7f2e2e2e,0x7f282828,0x7f373737,0x4b272727,
+ 0x8000000,0x4e4c4c4c,0x7e4a4a4a,0x792b2b2b,0x4c2d2d2d,0x726d6d6d,0x7f252525,0x5d4c4c4c,0x6d4c4c4c,0x7f343434,0x46141414,0x35121212,0x62393939,0x5a191919,
+ 0x9000000,0x13000000,0x4d5f5f5f,0x7c4b4b4b,0x7c2f2f2f,0x71434343,0x7f404040,0x7f2b2b2b,0x7f161616,0x722b2b2b,0x53232323,0x57333333,0x7e4f4f4f,0x55272727,
+ 0x6000000,0xa000000,0x17000000,0x47606060,0x6a282828,0x762f2f2f,0x7f484848,0x7f6d6d6d,0x7f343434,0x7f1b1b1b,0x7b686868,0x7a747474,0x75707070,0x3d3e3e3e,
+ 0x3000000,0x6000000,0xd000000,0x15000000,0x2e030303,0x6d1d1d1d,0x7f707070,0x7ff7f7f7,0x7fa7a7a7,0x7f272727,0x53656565,0x4b747474,0x395d5d5d,0x1b080808,
+ 0x2000000,0x4000000,0xa000000,0x19000000,0x651f1f1f,0x7f757575,0x7f5a5a5a,0x7f919191,0x7ff2f2f2,0x7faeaeae,0x62000000,0x29000000,0x1f000000,0x15000000,
+ 0x2000000,0x7000000,0x12000000,0x63202020,0x7fa8a8a8,0x7fd1d1d1,0x7f717171,0x7f202020,0x7eafafaf,0x7ef9f9f9,0x7fb1b1b1,0x5f0f0f0f,0x1e000000,0x15000000,
+ 0x7000000,0xf000000,0x62202020,0x7fa8a8a8,0x7ff0f0f0,0x7faeaeae,0x6b1b1b1b,0x3e000000,0x6e2b2b2b,0x7fb7b7b7,0x7ff6f6f6,0x7faeaeae,0x5b101010,0x16000000,
+ 0x1000000,0x55171717,0x7f9a9a9a,0x7fe8e8e8,0x7fb9b9b9,0x7a2b2b2b,0x59171717,0x21000000,0x27000000,0x6d2d2d2d,0x7fbababa,0x7ff7f7f7,0x7faaaaaa,0x4c050505,
+ 0x3000000,0x5b161616,0x7fb6b6b6,0x7fbcbcbc,0x68202020,0x29000000,0x22000000,0x1c000000,0x18000000,0x1d000000,0x6b2e2e2e,0x7fc4c4c4,0x7fc1c1c1,0x53030303,
+ 0x0,0x601d1d1d,0x7f898989,0x662d2d2d,0x25030303,0x1d000000,0x17000000,0x11000000,0xe000000,0xf000000,0x18000000,0x693b3b3b,0x7f8d8d8d,0x57131313,
+ 0x2000000,0x32141414,0x4b101010,0x1c101010,0x15000000,0x12000000,0xd000000,0x7000000,0x5000000,0x7000000,0x9000000,0x16000000,0x4c121212,0x32121212
+};
+
+static const QRgb datebook_icon_data[] = {
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,
+ 0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff000000,0xff000000,
+ 0xff000000,0xff0000ff,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff0000ff,0xff00008b,0xff00008b,0xff00008b,0xff000000,0xff000000,
+ 0xff000000,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffc3c3c3,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffc3c3c3,0xffffffff,0xffffffff,0xffa0a0a0,0xff000000,
+ 0x0,0xff000000,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xffa0a0a0,0xff000000,
+ 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000
+};
+
+static const QRgb day_data[] = {
+ 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000,
+ 0x18000000,0xff7a7fbb,0xff6b71b3,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff454ca2,0xff0d1986,0x3d000000,0x2a000000,
+ 0x24000000,0xff6b71b3,0xff4a51a4,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff0d1a8b,0xff0a146c,0x5a000000,0x3e000000,
+ 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x74000000,0x50000000,
+ 0x35000000,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x86000000,0x5c000000,
+ 0x39000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000,
+ 0x3b000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000,
+ 0x3c000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x96000000,0x67000000,
+ 0x3b000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000,
+ 0x39000000,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000,
+ 0x35000000,0xffffffff,0xfffdfdfd,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffd1d1d1,0xffa4a4a4,0x86000000,0x5c000000,
+ 0x2e000000,0xfff5f5f5,0xffc4c4c4,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffa4a4a4,0xff969696,0x74000000,0x50000000,
+ 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000,
+ 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000
+};
+
+static const QRgb done_data[] = {
+ 0xffffff,0xffffff,0xffffff,0x666da16d,0xba5f8a5f,0xeb4a704a,0xfd3c5e3c,0xeb3e6b3e,0xba428042,0x663f903f,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1b76b676,0x9d72a872,0xfd6a9a6a,0xff659765,0xff5f965f,0xff579457,0xff4c8f4c,0xff408a40,0xfd358735,0xa1369236,0x2b7bb87b,0xffffff,0xffffff,
+ 0xffffff,0x9d6ca56c,0xff6ca26c,0xff71ac71,0xff6db36d,0xff65b665,0xff5cb45c,0xff4fad4f,0xff3fa33f,0xff3d993d,0xff98a698,0xd28db18d,0xffffff,0xffffff,
+ 0x665c9a5c,0xfd5e965e,0xff69a969,0xff6cb96c,0xff62be62,0xff53bc53,0xff48b848,0xff3fb53f,0xff48b348,0xffb8c8b8,0xffbababa,0xffa6a8a6,0x9482ae82,0xffffff,
+ 0xba4a824a,0xff518f51,0xff63af63,0xff62bd62,0xff49ba49,0xff35b435,0xff29b129,0xff41b641,0xffcad9ca,0xffdadada,0xffc6c6c6,0xffaaaaaa,0xc7589158,0xffffff,
+ 0xeb346834,0xff438c43,0xff9fc19f,0xffbdd5bd,0xff39b639,0xff1aad1a,0xff37b337,0xffcddccd,0xffe2e2e2,0xffdedede,0xffcecece,0xff639063,0xe3006400,0xffffff,
+ 0xfd275727,0xff7c9a7c,0xffcfcfcf,0xffdfdfdf,0xffbad6ba,0xff45b645,0xffd0ddd0,0xffe2e2e2,0xffe2e2e2,0xffdfdfdf,0xff76ac76,0xff006a00,0xfc005c00,0xffffff,
+ 0xec226222,0xff889b88,0xffcccccc,0xffdedede,0xffe2e2e2,0xffdee1de,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xff7db77d,0xff007a00,0xff006100,0xe3005800,0xffffff,
+ 0xba107010,0xff137a13,0xffa0baa0,0xffdadada,0xffe0e0e0,0xffe1e1e1,0xffe2e2e2,0xffe1e1e1,0xff7eb87e,0xff007f00,0xff006b00,0xff005800,0xaf005800,0xffffff,
+ 0x66007d00,0xfd007400,0xff108310,0xffa7c0a7,0xffdadada,0xffdddddd,0xffdfdfdf,0xff7cb37c,0xff007a00,0xff006c00,0xff005c00,0xfd005000,0x60005b00,0xffffff,
+ 0xffffff,0x9d007900,0xff007000,0xff107810,0xff99b199,0xff98b498,0xff76a476,0xff006f00,0xff006500,0xff005900,0xff005000,0x9c005400,0xffffff,0xffffff,
+ 0xffffff,0x1b008000,0x9c007000,0xfd006200,0xff005f00,0xff005e00,0xff005a00,0xff005400,0xff004e00,0xfd004a00,0x9c005100,0x1b005f00,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x60006900,0xaf005d00,0xe2005100,0xfc004a00,0xe2004a00,0xaf004c00,0x60005300,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb edit_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3000000,0x36000000,0xff000000,0xff000000,0xff000000,0x2c000000,0x18000000,0x8000000,0x1000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x3f000000,0xff000000,0xff882f2f,0xfff24545,0xffff0c0c,0xff000000,0x40000000,0x19000000,0x5000000,
+ 0xffffff,0xffffff,0xffffff,0x1000000,0x5000000,0x8f000000,0xff000000,0xff000000,0xff2d0000,0xff730000,0xff000000,0x68000000,0x2c000000,0xa000000,
+ 0xffffff,0xffffff,0xffffff,0x1000000,0x14000000,0xff000000,0xfff9f9a6,0xffffff93,0xff000000,0xff000000,0xff000000,0x79000000,0x36000000,0xd000000,
+ 0xffffff,0xffffff,0xffffff,0x4000000,0x78000000,0xff000000,0xffffffa4,0xffffff82,0xffd8d866,0xff000000,0xbe000000,0x71000000,0x31000000,0xb000000,
+ 0xffffff,0xffffff,0x1000000,0xd000000,0xff000000,0xffe3e394,0xffffff91,0xffdbdb67,0xff989848,0xff000000,0x92000000,0x58000000,0x21000000,0x7000000,
+ 0xffffff,0xffffff,0x4000000,0x62000000,0xff000000,0xffffff9f,0xffffff78,0xffb4b454,0xff000000,0xc4000000,0x79000000,0x3c000000,0x12000000,0x3000000,
+ 0xffffff,0x1000000,0x7000000,0xff000000,0xffc0c072,0xffffff7f,0xffc4c45c,0xff81813d,0xff000000,0x95000000,0x5b000000,0x24000000,0x8000000,0x1000000,
+ 0xffffff,0x1000000,0x35000000,0xff000000,0xffe7e76d,0xffb6b656,0xff919145,0xff000000,0xc9000000,0x7b000000,0x3d000000,0x13000000,0x4000000,0xffffff,
+ 0xffffff,0x2000000,0x11000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfe000000,0xa0000000,0x5c000000,0x26000000,0xa000000,0x1000000,0xffffff,
+ 0xffffff,0x2000000,0x11000000,0xff000000,0xff000000,0xff000000,0xed000000,0xa6000000,0x73000000,0x3d000000,0x16000000,0x4000000,0x1000000,0xffffff,
+ 0x1000000,0x6000000,0x17000000,0xff000000,0xff000000,0xdc000000,0xa0000000,0x7b000000,0x4d000000,0x25000000,0xf000000,0x7000000,0x6000000,0x3000000,
+ 0x4000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x3d000000,0xff000000,0x19000000,0xff000000,0x14000000,0xb000000,
+ 0x6000000,0x17000000,0x37000000,0x67000000,0x70000000,0x78000000,0x6d000000,0x56000000,0x3d000000,0x2a000000,0x25000000,0x22000000,0x20000000,0x11000000
+};
+
+static const QRgb editdelete_data[] = {
+ 0x0,0x352424,0x9c6a6a,0xdd000000,0x0,0x5000000,0x0,0x0,0x0,0x0,0xde000000,0x784b4b,0x5000000,0x1000000,
+ 0x0,0x352424,0x8e2e1e1e,0xdf875959,0x90000000,0x0,0x4000000,0x0,0x0,0x8b000000,0xdf8a6565,0x93201616,0x4000000,0xa000000,
+ 0x0,0x8f352424,0xff9a7171,0xf7e59393,0xf38e5050,0xa2000000,0x1000000,0x0,0x98000000,0xeca37d7d,0xf6eba4a4,0xff925252,0xaa000000,0x181a0f0f,
+ 0xdc000000,0xdf875a5a,0xf6e59393,0xffda8282,0xf7d77979,0xf8894d4d,0x8b050303,0x8a080606,0xeda37d7d,0xf4eca9a9,0xffd27a7a,0xfaa35c5c,0xfc522f2f,0x88050303,
+ 0x1000000,0x90000000,0xf38f5050,0xf8d77a7a,0xffd57878,0xf6db7d7d,0xf17a4949,0xea8a6969,0xf1eda8a8,0xffd27a7a,0xfb9a5656,0xfb4e2b2b,0xbe000000,0x2e000000,
+ 0x3000000,0x0,0xa2000000,0xf9874c4c,0xf6db7e7e,0xffd57a7a,0xfddd8989,0xfee19393,0xffd07a7a,0xf99e5858,0xfb4c2a2a,0xc5000000,0x48000000,0x22000000,
+ 0x0,0x4000000,0x1000000,0x8a000000,0xf27a4848,0xfcdd8888,0xffd77d7d,0xffd67878,0xfdb76767,0xf6472828,0xb8000000,0x4e000000,0x29000000,0xb000000,
+ 0x0,0x0,0x0,0x88000000,0xea896a6a,0xfce19292,0xffd67979,0xffd17575,0xfdc46e6e,0xf5693c3c,0xb6000000,0x27000000,0x11000000,0x1000000,
+ 0x0,0x0,0x95000000,0xeda17c7c,0xf2eea9a9,0xffd17a7a,0xfeb76666,0xfec46e6e,0xffd17676,0xf8cf7575,0xf5834a4a,0xa8000000,0x2000000,0x4000000,
+ 0x0,0x8e000000,0xeca47d7d,0xf4eca9a9,0xffd27a7a,0xf99e5858,0xf6472828,0xf6693c3c,0xf9d07575,0xffd77a7a,0xf9d27777,0xf6824a4a,0xa2000000,0x2000000,
+ 0xdc000000,0xd7896262,0xf3eba4a4,0xffd27a7a,0xfa9a5656,0xfa4d2b2b,0xb8000000,0xb6050303,0xf6854b4b,0xf9d27777,0xffc77070,0xf8ae6363,0xf6603636,0x81000000,
+ 0x0,0x8d000000,0xff985656,0xfaa45c5c,0xfa4e2d2d,0xc5000000,0x4e000000,0x28000000,0xa8000000,0xf6824949,0xf9af6262,0xff663838,0xbc000000,0x29000000,
+ 0x2000000,0x0,0xa5000000,0xf6522f2f,0xbc000000,0x46000000,0x29000000,0x10000000,0x2000000,0xa3000000,0xf75d3434,0xbc000000,0x4c000000,0x2a000000,
+ 0x1000000,0x7000000,0xb000000,0x84000000,0x28000000,0x21000000,0xb000000,0x0,0x3000000,0x3000000,0x81000000,0x29000000,0x29000000,0x11000000
+};
+
+static const QRgb enter_data[] = {
+ 0xffffff,0xffffff,0xffffff,0x666da16d,0xba5f8a5f,0xeb4a704a,0xfd3c5e3c,0xeb3e6b3e,0xba428042,0x663f903f,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x1b76b676,0x9d72a872,0xfd6a9a6a,0xff659765,0xff5f965f,0xff579457,0xff4c8f4c,0xff408a40,0xfd358735,0xa1369236,0x2b7bb87b,0xffffff,0xffffff,
+ 0xffffff,0x9d6ca56c,0xff6ca26c,0xff71ac71,0xff6db36d,0xff65b665,0xff5cb45c,0xff4fad4f,0xff3fa33f,0xff3d993d,0xff98a698,0xd28db18d,0xffffff,0xffffff,
+ 0x665c9a5c,0xfd5e965e,0xff69a969,0xff6cb96c,0xff62be62,0xff53bc53,0xff48b848,0xff3fb53f,0xff48b348,0xffb8c8b8,0xffbababa,0xffa6a8a6,0x9482ae82,0xffffff,
+ 0xba4a824a,0xff518f51,0xff63af63,0xff62bd62,0xff49ba49,0xff35b435,0xff29b129,0xff41b641,0xffcad9ca,0xffdadada,0xffc6c6c6,0xffaaaaaa,0xc7589158,0xffffff,
+ 0xeb346834,0xff438c43,0xff9fc19f,0xffbdd5bd,0xff39b639,0xff1aad1a,0xff37b337,0xffcddccd,0xffe2e2e2,0xffdedede,0xffcecece,0xff639063,0xe3006400,0xffffff,
+ 0xfd275727,0xff7c9a7c,0xffcfcfcf,0xffdfdfdf,0xffbad6ba,0xff45b645,0xffd0ddd0,0xffe2e2e2,0xffe2e2e2,0xffdfdfdf,0xff76ac76,0xff006a00,0xfc005c00,0xffffff,
+ 0xec226222,0xff889b88,0xffcccccc,0xffdedede,0xffe2e2e2,0xffdee1de,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xff7db77d,0xff007a00,0xff006100,0xe3005800,0xffffff,
+ 0xba107010,0xff137a13,0xffa0baa0,0xffdadada,0xffe0e0e0,0xffe1e1e1,0xffe2e2e2,0xffe1e1e1,0xff7eb87e,0xff007f00,0xff006b00,0xff005800,0xaf005800,0xffffff,
+ 0x66007d00,0xfd007400,0xff108310,0xffa7c0a7,0xffdadada,0xffdddddd,0xffdfdfdf,0xff7cb37c,0xff007a00,0xff006c00,0xff005c00,0xfd005000,0x60005b00,0xffffff,
+ 0xffffff,0x9d007900,0xff007000,0xff107810,0xff99b199,0xff98b498,0xff76a476,0xff006f00,0xff006500,0xff005900,0xff005000,0x9c005400,0xffffff,0xffffff,
+ 0xffffff,0x1b008000,0x9c007000,0xfd006200,0xff005f00,0xff005e00,0xff005a00,0xff005400,0xff004e00,0xfd004a00,0x9c005100,0x1b005f00,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x60006900,0xaf005d00,0xe2005100,0xfc004a00,0xe2004a00,0xaf004c00,0x60005300,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const unsigned char exec_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x02,0x02,0x01,0x00,0x01,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x01,0x03,0x04,0x04,0x03,
+ 0x01,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x05,0x03,0x06,
+ 0x06,0x03,0x05,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x06,
+ 0x06,0x07,0x06,0x07,0x06,0x05,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x02,
+ 0x03,0x06,0x07,0x05,0x05,0x06,0x07,0x03,0x02,0x01,0x01,0x00,0x01,0x02,
+ 0x04,0x03,0x06,0x07,0x06,0x03,0x03,0x07,0x08,0x06,0x03,0x04,0x02,0x01,
+ 0x01,0x05,0x03,0x02,0x05,0x07,0x08,0x07,0x07,0x09,0x08,0x05,0x02,0x03,
+ 0x05,0x01,0x00,0x01,0x0a,0x0a,0x02,0x05,0x07,0x08,0x09,0x07,0x05,0x02,
+ 0x0a,0x0a,0x01,0x00,0x00,0x00,0x01,0x05,0x04,0x02,0x02,0x05,0x05,0x02,
+ 0x02,0x04,0x05,0x01,0x00,0x00,0x00,0x01,0x03,0x09,0x05,0x0a,0x05,0x02,
+ 0x02,0x05,0x0a,0x05,0x09,0x03,0x01,0x00,0x00,0x01,0x02,0x03,0x0a,0x01,
+ 0x01,0x03,0x03,0x01,0x01,0x0a,0x03,0x02,0x01,0x00,0x00,0x00,0x01,0x01,
+ 0x01,0x00,0x01,0x02,0x09,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x0a,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00
+};
+
+static const QRgb exec_ctable[] = {
+ 0xc6c6c6,0xff000000,0xffdcdcdc,0xffa0a0a0,0xffc3c3c3,0xff808080,0xffffa858,0xffffdca8,0xffffffc0,0xffffffff,0xff585858
+};
+
+static const unsigned char faded_bg_data[] = {
+ 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x08,0x0b,0x04,0x05,
+ 0x03,0x07,0x08,0x0a,0x0c,0x0d,0x01,0x03,0x0e,0x0e,0x03,0x01,0x0a,0x0f,
+ 0x10,0x0f,0x09,0x08,0x07,0x02,0x11,0x12,0x12,0x0b,0x13,0x0d,0x14,0x09,
+ 0x08,0x02,0x03,0x03,0x07,0x08,0x0a,0x14,0x15,0x0a,0x01,0x03,0x04,0x04,
+ 0x0b,0x08,0x14,0x0f,0x0f,0x0a,0x16,0x17,0x11,0x0b,0x02,0x02,0x02,0x17,
+ 0x08,0x0a,0x14,0x0a,0x08,0x17,0x0b,0x07,0x18,0x0d,0x14,0x15,0x19,0x1a,
+ 0x01,0x11,0x06,0x06,0x02,0x08,0x14,0x14,0x0d,0x01,0x0b,0x12,0x06,0x11,
+ 0x07,0x07,0x07,0x1b,0x08,0x0a,0x0c,0x0a,0x08,0x17,0x07,0x1b,0x08,0x1a,
+ 0x0a,0x0a,0x0d,0x08,0x1b,0x0b,0x03,0x03,0x07,0x08,0x0d,0x08,0x1b,0x03,
+ 0x05,0x04,0x04,0x11,0x07,0x07,0x07,0x1b,0x08,0x1a,0x0d,0x08,0x13,0x17,
+ 0x07,0x17,0x1b,0x01,0x13,0x13,0x13,0x01,0x17,0x02,0x11,0x11,0x02,0x1b,
+ 0x13,0x17,0x03,0x1c,0x1d,0x1d,0x03,0x0b,0x17,0x17,0x17,0x1b,0x13,0x08,
+ 0x08,0x13,0x17,0x0b,0x11,0x03,0x03,0x12,0x11,0x0b,0x02,0x02,0x07,0x02,
+ 0x02,0x0b,0x02,0x07,0x17,0x0b,0x04,0x1d,0x1d,0x0e,0x02,0x01,0x18,0x18,
+ 0x13,0x01,0x1b,0x1b,0x1b,0x17,0x0b,0x03,0x04,0x0e,0x0e,0x0e,0x05,0x04,
+ 0x03,0x03,0x0b,0x02,0x02,0x02,0x02,0x07,0x07,0x02,0x03,0x04,0x1e,0x12,
+ 0x08,0x1a,0x0d,0x0d,0x08,0x13,0x1b,0x17,0x17,0x02,0x12,0x04,0x1d,0x1f,
+ 0x1d,0x1d,0x0e,0x04,0x03,0x03,0x0b,0x02,0x07,0x07,0x07,0x17,0x1b,0x17,
+ 0x07,0x07,0x17,0x01,0x0a,0x0c,0x14,0x0c,0x0d,0x16,0x1b,0x17,0x07,0x02,
+ 0x03,0x04,0x1d,0x1d,0x1c,0x04,0x03,0x0b,0x07,0x07,0x02,0x02,0x07,0x07,
+ 0x17,0x17,0x1b,0x13,0x18,0x08,0x1a,0x0d,0x0c,0x14,0x19,0x0a,0x08,0x13,
+ 0x17,0x07,0x07,0x02,0x03,0x04,0x1c,0x1c,0x1e,0x0b,0x01,0x08,0x08,0x13,
+ 0x20,0x07,0x07,0x17,0x17,0x17,0x1b,0x13,0x08,0x1a,0x0d,0x09,0x1a,0x1a,
+ 0x1a,0x08,0x13,0x17,0x02,0x11,0x11,0x11,0x03,0x21,0x1c,0x04,0x0b,0x18,
+ 0x09,0x14,0x0c,0x22,0x01,0x07,0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x13,0x13,
+ 0x08,0x08,0x17,0x17,0x1b,0x1b,0x17,0x0b,0x03,0x06,0x06,0x1e,0x21,0x1d,
+ 0x1d,0x04,0x1b,0x0a,0x0f,0x0f,0x0c,0x08,0x07,0x0b,0x02,0x1b,0x01,0x01,
+ 0x17,0x07,0x07,0x07,0x07,0x07,0x03,0x12,0x02,0x07,0x07,0x11,0x04,0x1c,
+ 0x1c,0x1c,0x1d,0x1d,0x21,0x0b,0x1a,0x15,0x0f,0x14,0x22,0x07,0x03,0x04,
+ 0x11,0x17,0x08,0x16,0x1b,0x02,0x03,0x03,0x1e,0x1e,0x05,0x03,0x07,0x17,
+ 0x07,0x03,0x0e,0x1d,0x1d,0x1c,0x0e,0x04,0x0b,0x08,0x14,0x0f,0x15,0x1a,
+ 0x17,0x1e,0x1d,0x1d,0x03,0x20,0x08,0x08,0x1b,0x0b,0x1e,0x1d,0x1d,0x1d,
+ 0x06,0x02,0x01,0x13,0x17,0x03,0x0e,0x1d,0x1c,0x04,0x11,0x17,0x08,0x14,
+ 0x0f,0x15,0x0d,0x1b,0x03,0x1c,0x1f,0x1d,0x03,0x13,0x0d,0x1a,0x01,0x11,
+ 0x21,0x1f,0x1d,0x0e,0x0b,0x13,0x22,0x08,0x1b,0x03,0x0e,0x1d,0x04,0x11,
+ 0x13,0x0d,0x15,0x0f,0x15,0x0a,0x13,0x02,0x03,0x1c,0x1d,0x21,0x02,0x08,
+ 0x0a,0x0d,0x13,0x11,0x0e,0x1f,0x1c,0x1e,0x23,0x0d,0x0c,0x0d,0x13,0x12,
+ 0x21,0x0e,0x03,0x01,0x0a,0x0f,0x0f,0x15,0x0d,0x13,0x17,0x02,0x03,0x06,
+ 0x06,0x24,0x1b,0x1a,0x0c,0x0a,0x18,0x11,0x04,0x0e,0x03,0x07,0x0a,0x0c,
+ 0x14,0x0a,0x13,0x0b,0x04,0x04,0x0b,0x08,0x14,0x0f,0x14,0x1a,0x1b,0x02,
+ 0x0b,0x0b,0x0b,0x0b,0x0b,0x07,0x08,0x0a,0x14,0x0a,0x18,0x0b,0x03,0x03,
+ 0x07,0x08,0x0c,0x14,0x14,0x0d,0x13,0x02,0x03,0x03,0x02,0x08,0x09,0x09,
+ 0x08,0x17,0x03,0x03,0x03,0x0b,0x07,0x07,0x07,0x1b,0x08,0x0a,0x14,0x0a,
+ 0x18,0x07,0x0b,0x07,0x18,0x0d,0x0a,0x0a,0x0a,0x08,0x13,0x02,0x03,0x03,
+ 0x02,0x13,0x08,0x08,0x07,0x1e,0x1c,0x1c,0x06,0x11,0x07,0x07,0x17,0x01,
+ 0x08,0x0a,0x09,0x0d,0x13,0x07,0x07,0x01,0x08,0x0d,0x08,0x08,0x16,0x13,
+ 0x1b,0x07,0x0b,0x11,0x02,0x17,0x1b,0x07,0x03,0x1d,0x1f,0x1d,0x06,0x0b,
+ 0x07,0x17,0x17,0x1b,0x16,0x22,0x1a,0x08,0x01,0x17,0x17,0x1b,0x01,0x18,
+ 0x0b,0x02,0x02,0x07,0x07,0x07,0x02,0x02,0x02,0x07,0x07,0x0b,0x06,0x1c,
+ 0x1d,0x05,0x03,0x07,0x1b,0x01,0x1b,0x1b,0x01,0x13,0x13,0x1b,0x07,0x0b,
+ 0x0b,0x11,0x11,0x0b,0x04,0x06,0x03,0x11,0x0b,0x02,0x07,0x07,0x07,0x17,
+ 0x17,0x07,0x0b,0x03,0x12,0x02,0x1b,0x16,0x08,0x08,0x08,0x01,0x1b,0x17,
+ 0x17,0x02,0x12,0x06,0x05,0x21,0x21,0x21,0x1c,0x04,0x06,0x03,0x0b,0x02,
+ 0x07,0x07,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x13,0x08,0x1a,0x0a,0x0a,0x0a,
+ 0x22,0x13,0x17,0x07,0x11,0x06,0x21,0x1d,0x1f,0x1f,0x1d,0x1d,0x03,0x11,
+ 0x02,0x02,0x02,0x02,0x07,0x07,0x17,0x17,0x1b,0x13,0x08,0x08,0x0d,0x0a,
+ 0x19,0x14,0x14,0x0c,0x1a,0x13,0x17,0x11,0x1e,0x1d,0x25,0x26,0x25,0x1d,
+ 0x0e,0x04,0x17,0x13,0x08,0x13,0x17,0x07,0x07,0x17,0x17,0x17,0x1b,0x01,
+ 0x08,0x08,0x0d,0x0a,0x0a,0x0a,0x0a,0x0d,0x08,0x1b,0x0b,0x06,0x1d,0x26,
+ 0x26,0x1f,0x0e,0x04,0x03,0x0b,0x0d,0x19,0x0c,0x1a,0x13,0x17,0x17,0x1b,
+ 0x1b,0x1b,0x17,0x17,0x1b,0x1b,0x13,0x13,0x08,0x08,0x08,0x13,0x01,0x07,
+ 0x03,0x0e,0x27,0x26,0x1d,0x21,0x03,0x0b,0x20,0x08,0x0f,0x0f,0x14,0x08,
+ 0x17,0x0b,0x02,0x1b,0x01,0x01,0x17,0x07,0x0b,0x0b,0x11,0x11,0x0b,0x02,
+ 0x07,0x17,0x07,0x0b,0x04,0x1d,0x26,0x1f,0x04,0x12,0x07,0x01,0x08,0x09,
+ 0x10,0x0f,0x0d,0x1b,0x03,0x06,0x11,0x17,0x16,0x13,0x1b,0x0b,0x03,0x04,
+ 0x21,0x21,0x04,0x03,0x02,0x17,0x07,0x03,0x0e,0x25,0x1f,0x0e,0x03,0x07,
+ 0x01,0x08,0x0c,0x0f,0x0f,0x0a,0x01,0x03,0x1c,0x1d,0x03,0x17,0x08,0x08,
+ 0x1b,0x0b,0x04,0x1d,0x1d,0x1d,0x04,0x12,0x17,0x1b,0x07,0x03,0x1d,0x25,
+ 0x1d,0x06,0x02,0x01,0x08,0x09,0x0f,0x10,0x0a,0x13,0x11,0x0e,0x1f,0x1d,
+ 0x03,0x1b,0x1a,0x1a,0x13,0x0b,0x21,0x1d,0x1d,0x0e,0x03,0x17,0x08,0x08,
+ 0x20,0x03,0x1d,0x1d,0x05,0x12,0x1b,0x08,0x0c,0x0f,0x10,0x15,0x08,0x17,
+ 0x03,0x1c,0x1d,0x0e,0x0b,0x18,0x0a,0x0d,0x18,0x0b,0x21,0x1d,0x21,0x03,
+ 0x17,0x08,0x0d,0x1a,0x1b,0x03,0x1c,0x1d,0x06,0x07,0x08,0x09,0x0f,0x10,
+ 0x15,0x0a
+};
+
+static const QRgb faded_bg_ctable[] = {
+ 0xc6c6c6,0xffb5c5c1,0xffb6c7c3,0xffb7c9c4,0xffb8cac5,0xffb8cac6,0xffb7c9c5,0xffb6c7c2,0xffb3c4c0,0xffb2c2be,0xffb3c2be,0xffb6c8c3,0xffb2c1be,0xffb3c3be,
+ 0xffb8cbc7,0xffb1c0bc,0xffb1bfbc,0xffb6c8c4,0xffb6c9c4,0xffb4c5c1,0xffb1c1bd,0xffb1c1bc,0xffb3c4c1,0xffb5c7c2,0xffb4c4c1,0xffb1c1be,0xffb3c3bf,0xffb5c6c1,
+ 0xffb9cbc7,0xffb9ccc7,0xffb7cac5,0xffb9ccc8,0xffb5c6c2,0xffb8cbc6,0xffb3c4bf,0xffb3c5c1,0xffb7c8c4,0xffb9cdc8,0xffbacdc9,0xffbacdc8
+};
+
+static const QRgb fastback_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xfffcfcfc,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xfff8f8f8,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000,
+ 0xffffff,0xff000000,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff5f5f5,0xff000000,0x6b000000,0x24000000,
+ 0xffffff,0xff000000,0xe0494e4f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff6f6f6,0xfff6f6f6,0xffeeeeee,0xffd3d3d3,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xff000000,0x69666c6d,0xfd202323,0xfffcfcfc,0xfffcfcfc,0xfff4f4f4,0xffdddddd,0xffcccccc,0xffc9c9c9,0xffc9c9c9,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xff000000,0xd000000,0x83565b5c,0xfd202223,0xfff4f4f4,0xffededed,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xff000000,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffe8e8e8,0xffcbcbcb,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000,
+ 0xffffff,0xff000000,0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffd3d3d3,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x45000000,0x7b000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x10000000,0x26000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb fastforward_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d606667,0x13000000,0x3000000,0xffffff,0xffffff,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd202223,0x9f575d5e,0x18000000,0x3000000,0xffffff,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffededed,0xfe202324,0xa0575c5d,0xff000000,0x3000000,0xffffff,
+ 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeeeeee,0xffd6d6d6,0xffd1d1d1,0xef464a4b,0xff000000,0xe000000,0xffffff,
+ 0xffffff,0xff000000,0xfff5f5f5,0xffe1e1e1,0xffe9e9e9,0xfff9f9f9,0xffefefef,0xffd1d1d1,0xffc9c9c9,0xfe202323,0xc13e4142,0xff000000,0x15000000,0xffffff,
+ 0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff8f8f8,0xffd8d8d8,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x82000000,0xff000000,0xd000000,0xffffff,
+ 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff4f4f4,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0xff000000,0x2000000,0xffffff,
+ 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe9e9e9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce3b3e3f,0x86000000,0x45000000,0x14000000,0x2000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x7b000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x26000000,0x10000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb fileopen_data[] = {
+ 0x5000000,0x8000000,0xb000000,0xd000000,0xd000000,0xb000000,0x8000000,0x5000000,0x2000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xf000000,0x19000000,0x24000000,0x29000000,0x29000000,0x24000000,0x1b000000,0x10000000,0x9000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0x20000000,0x43000000,0x72000000,0x87000000,0x89000000,0x79000000,0x53000000,0x36000000,0x2b000000,0x23000000,0x1b000000,0x17000000,0x11000000,0xa000000,
+ 0x39000000,0x84000000,0xffb6b6b6,0xffb6b6b6,0xffb4b4b4,0xffb0b0b0,0xab000000,0x7b000000,0x67000000,0x5a000000,0x4d000000,0x3e000000,0x2e000000,0x1b000000,
+ 0x5b000000,0xc9464646,0xffb6b6b6,0xffb6b6b6,0xffb0b0b0,0xffa9a9a9,0xfa676767,0xd8000000,0xca000000,0xc1000000,0xad000000,0x89000000,0x5f000000,0x39000000,
+ 0x74000000,0xdc414141,0xffb6b6b6,0xffb3b3b3,0xffababab,0xff9d9d9d,0xff878787,0xff696969,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x56000000,
+ 0x85000000,0xe83e3e3e,0xffb4b4b4,0xffadadad,0xff9e9e9e,0xff888888,0xff656565,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb4000000,0x6e000000,
+ 0x91000000,0xef3b3b3b,0xffadadad,0xffa1a1a1,0xff8c8c8c,0xff6a6a6a,0xff3c3c3c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x77000000,
+ 0x92000000,0xf0393939,0xffa7a7a7,0xff959595,0xff777777,0xff4c4c4c,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0xc0000000,0x77000000,
+ 0x89000000,0xe93d3d3d,0xff9b9b9b,0xff858585,0xff8b8b8b,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf1000000,0xb2000000,0x6b000000,
+ 0x78000000,0xd83c3c3c,0xfeb3b3b3,0xffb6b6b6,0xffbcbcbc,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfd000000,0xdd000000,0x9b000000,0x59000000,
+ 0x5d000000,0x9d000000,0xd7000000,0xf7000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfa000000,0xe4000000,0xaf000000,0x73000000,0x3c000000,
+ 0x3e000000,0x65000000,0x92000000,0xb6000000,0xd0000000,0xe1000000,0xe8000000,0xe7000000,0xdf000000,0xcc000000,0xa9000000,0x7a000000,0x4b000000,0x25000000,
+ 0x26000000,0x41000000,0x5f000000,0x7a000000,0x90000000,0xa2000000,0xaa000000,0xa9000000,0x9e000000,0x8a000000,0x6b000000,0x48000000,0x2a000000,0x14000000
+};
+
+static const QRgb find_data[] = {
+ 0x1ffffff,0x42141414,0x9c131313,0xe1171717,0xe21a1a1a,0xe21a1a1a,0xe1171717,0x9c131313,0x42141414,0x1ffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0x42141414,0xcf1a1a1a,0xff666867,0xffb2b6b4,0xffe3e7e5,0xffe0e6e3,0xffadb4b1,0xff626665,0xd01a1a1a,0x44131313,0x1000000,0x1000000,0xffffff,0xffffff,
+ 0x9c131313,0xff656767,0xf6dfe3e2,0xfff8fcfa,0xfff7fbf9,0xfff3faf8,0xfff1f8f6,0xf6d6dfdb,0xff606362,0xa0131313,0x82e2e2e,0x4000000,0x1000000,0x1000000,
+ 0xe1171717,0xffb0b5b2,0xfff6faf9,0xfff6fbfa,0xfff3faf8,0xfff2f9f7,0xfff0f8f6,0xffe6efec,0xff9ca4a2,0xe4161616,0x11191919,0x9000000,0x4000000,0x1000000,
+ 0xe21a1a1a,0xffdde5e2,0xfff3f9f7,0xfff2f9f7,0xffeef8f3,0xffebf7f3,0xffe7f1ed,0xffdce4e1,0xffbac3bf,0xe61a1a1a,0x1e101010,0x11000000,0x9000000,0x4000000,
+ 0xe31a1a1a,0xffd9e3df,0xffeff8f4,0xffeef8f4,0xffe8f4f0,0xffe4efeb,0xffdde6e3,0xffd0d7d5,0xffaeb6b4,0xe9191919,0x300c0c0c,0x1c000000,0xf000000,0x7000000,
+ 0xe2171717,0xffa6adac,0xffe5eeeb,0xffe4edea,0xffdee7e4,0xffd8e1de,0xffd1d8d7,0xffc5ccca,0xff878d8b,0xec161616,0x41080808,0x28000000,0x16000000,0xa000000,
+ 0xa1131313,0xff5c615f,0xf8c0c8c5,0xffd1dad7,0xffccd4d1,0xffc6cdcb,0xffc5ccca,0xfbabb2af,0xff505351,0xdc0a0a0a,0x76050505,0x33000000,0x1c000000,0xd000000,
+ 0x4c121212,0xd41a1a1a,0xff575a59,0xff8c928f,0xffa9b1ae,0xffa9b1ae,0xff878d8b,0xff505351,0xed312923,0xdb937c6b,0xf3000000,0x64000000,0x20000000,0xe000000,
+ 0xf1b1b1b,0x5a101010,0xb1121212,0xec161616,0xef191919,0xf2191919,0xf4161616,0xe50a0a0a,0xe4634935,0xffc1906b,0xe0c8b2a4,0xf0000000,0x51000000,0xe000000,
+ 0xd000000,0x1c000000,0x340a0a0a,0x50060606,0x6d050505,0x82050505,0x8f050505,0xc0030303,0xec0a0605,0xf257402e,0xffc49471,0xc9c1ad9e,0xee000000,0x42000000,
+ 0xa000000,0x16000000,0x28000000,0x40000000,0x58000000,0x6c000000,0x77000000,0x77000000,0xac000000,0xe3000000,0xe6523d2b,0xffc2916d,0xc1c2a895,0xed000000,
+ 0x7000000,0xf000000,0x1c000000,0x2e000000,0x40000000,0x4f000000,0x58000000,0x58000000,0x4f000000,0x93000000,0xdd000000,0xde614734,0xdcaf805e,0xa0000000,
+ 0x4000000,0x9000000,0x11000000,0x1c000000,0x28000000,0x33000000,0x38000000,0x38000000,0x33000000,0x28000000,0x7f000000,0xd8000000,0xb4000000,0x71000000
+};
+
+static const QRgb finish_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d606667,0x13000000,0x3000000,0xffffff,0xffffff,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd202223,0x9f575d5e,0x18000000,0x3000000,0xffffff,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffededed,0xfe202324,0xa0575c5d,0xff000000,0x3000000,0xffffff,
+ 0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeeeeee,0xffd6d6d6,0xffd1d1d1,0xef464a4b,0xff000000,0xe000000,0xffffff,
+ 0xffffff,0xff000000,0xfff5f5f5,0xffe1e1e1,0xffe9e9e9,0xfff9f9f9,0xffefefef,0xffd1d1d1,0xffc9c9c9,0xfe202323,0xc13e4142,0xff000000,0x15000000,0xffffff,
+ 0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff8f8f8,0xffd8d8d8,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x82000000,0xff000000,0xd000000,0xffffff,
+ 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff4f4f4,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0xff000000,0x2000000,0xffffff,
+ 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe9e9e9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce3b3e3f,0x86000000,0x45000000,0x14000000,0x2000000,0xff000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x7b000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x26000000,0x10000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb folder_data[] = {
+ 0x1000000,0x4000000,0x7000000,0x19000000,0x11000000,0x2c000000,0x19000000,0x19000000,0x16000000,0x13000000,0xe000000,0xa000000,0x7000000,0x4000000,
+ 0x5000000,0xa000000,0x5d2d2d2d,0xca4f4f4f,0xf54e584d,0xfe808c7f,0xb02a312a,0x40000000,0x2c000000,0x26000000,0x1f000000,0x19000000,0x13000000,0xd000000,
+ 0xc000000,0x15000000,0x9c2f2e2e,0xffc3c2c2,0xffa2a3a2,0xff868686,0xff939592,0xfa858f83,0xbb293029,0xc4373e35,0xe22a302a,0x7b000000,0x82000000,0x1a000000,
+ 0xc04e5a4e,0xc64c584b,0xcd1b1a1a,0xff857a7a,0xffb6b3b3,0xffcac9c9,0xffa8a8a8,0xff868786,0xff888f88,0xffb2bcb1,0xffc3c9c2,0xfc919e90,0xc44b5449,0x63000000,
+ 0xff8a9d88,0xffd3ebd1,0xfaa0b69e,0xfa595c54,0xff594c4c,0xff6f6666,0xffb6b3b3,0xffcbcaca,0xffa4a5a4,0xff7b827b,0xff8d9b8c,0xffb6c5b5,0xfe92a791,0x9f1a201a,
+ 0xc31e221e,0xffc2dbc1,0xffd1e9cf,0xffc9e1c7,0xff9fb59e,0xff91978c,0xff5a4d4d,0xff6f6666,0xffb6b3b3,0xffc9c8c8,0xff9ea39e,0xff5d685d,0xff87a385,0xaf1b221b,
+ 0x41000000,0xf4748673,0xffcde6cc,0xffc9e0c7,0xffc4dac2,0xffbad1b8,0xff90a58f,0xff8d9187,0xff5d5251,0xff6f6767,0xffbdbbbb,0xff878d87,0xff5d6f5c,0xb4171d17,
+ 0x25000000,0xae171a16,0xffbcd2bb,0xffc4dcc3,0xffbfd5bd,0xffbad0b8,0xffb5cab3,0xffaabfa9,0xff849682,0xff8a8f85,0xff5e5958,0xff898b89,0xff606c5e,0xba131713,
+ 0x1f000000,0x49000000,0xf46a7a69,0xffbcd2bb,0xffbbd1b9,0xffb6cbb4,0xffb0c5af,0xffacbfaa,0xffa6baa5,0xff9caf9b,0xff50574d,0xff868584,0xff616c60,0xbc101310,
+ 0x17000000,0x29000000,0x64000000,0xdb363f35,0xfd819580,0xffacc0aa,0xffadc1ab,0xffa8bca6,0xffa3b6a1,0xff9cae9a,0xff7e907c,0xff626361,0xff656d65,0xbd0c0f0c,
+ 0xe000000,0x1b000000,0x2c000000,0x41000000,0x83000000,0xdd303830,0xfd758774,0xff9eb19c,0xff9eb09c,0xff99aa97,0xff93a491,0xff505c4f,0xff697168,0xba080a08,
+ 0x7000000,0x10000000,0x1b000000,0x2b000000,0x3b000000,0x4d000000,0x84000000,0xdc252d25,0xfd687766,0xff8fa18d,0xff8e9f8d,0xff758573,0xff414a41,0x99060806,
+ 0x4000000,0x7000000,0xf000000,0x18000000,0x24000000,0x31000000,0x40000000,0x4f000000,0x84000000,0xda232923,0xfc495447,0xff7a8a78,0xfd2a3128,0x88000000,
+ 0x1000000,0x3000000,0x7000000,0xb000000,0x13000000,0x1c000000,0x26000000,0x32000000,0x40000000,0x4c000000,0x6d000000,0xa9050605,0x830f120d,0x42000000
+};
+
+static const unsigned char folder_open_data[] = {
+ 0x0a,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,
+ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x03,0x04,0x00,0x00,0x0a,0x0a,0x0a,
+ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x03,0x07,0x03,0x04,0x00,
+ 0x00,0x00,0x00,0x0a,0x0a,0x0a,0x00,0x00,0x00,0x0a,0x00,0x03,0x07,0x07,
+ 0x07,0x07,0x07,0x07,0x03,0x00,0x0a,0x0a,0x00,0x05,0x05,0x02,0x06,0x03,
+ 0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x00,0x0a,0x00,0x04,0x05,0x05,
+ 0x05,0x04,0x03,0x03,0x03,0x03,0x07,0x07,0x07,0x03,0x04,0x00,0x0a,0x02,
+ 0x05,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x03,0x07,0x03,0x04,0x00,
+ 0x0a,0x00,0x04,0x05,0x05,0x01,0x01,0x05,0x04,0x04,0x03,0x03,0x03,0x03,
+ 0x04,0x00,0x0a,0x0a,0x02,0x05,0x01,0x05,0x01,0x01,0x01,0x01,0x04,0x04,
+ 0x03,0x03,0x04,0x00,0x0a,0x0a,0x00,0x04,0x01,0x01,0x01,0x01,0x08,0x01,
+ 0x08,0x05,0x03,0x03,0x04,0x00,0x0a,0x0a,0x0a,0x02,0x04,0x08,0x01,0x01,
+ 0x01,0x08,0x09,0x07,0x06,0x03,0x04,0x00,0x0a,0x0a,0x0a,0x0a,0x00,0x02,
+ 0x05,0x08,0x08,0x09,0x09,0x09,0x05,0x03,0x04,0x00,0x0a,0x0a,0x0a,0x0a,
+ 0x0a,0x0a,0x00,0x02,0x01,0x09,0x09,0x09,0x07,0x06,0x04,0x00,0x0a,0x0a,
+ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x02,0x01,0x09,0x09,0x04,0x04,0x00,
+ 0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x00,0x02,0x01,0x09,
+ 0x04,0x00,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,
+ 0x00,0x02,0x02,0x00
+};
+
+static const QRgb folder_open_ctable[] = {
+ 0xff000000,0xffc0c0c0,0xff303030,0xffffa858,0xff808080,0xffa0a0a4,0xff585858,0xffffdca8,0xffdcdcdc,0xffffffff,0xc6c6c6
+};
+
+static const QRgb forward_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x8d606667,0x13000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xfd202223,0x9f575d5e,0x18000000,0x3000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff,
+ 0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffededed,0xfe202324,0xa0575c5d,0x18000000,0x3000000,
+ 0x1000000,0xffffff,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeeeeee,0xffd6d6d6,0xffd1d1d1,0xef464a4b,0x41000000,0xe000000,
+ 0x1000000,0xffffff,0xff000000,0xfff5f5f5,0xffe1e1e1,0xffe9e9e9,0xfff9f9f9,0xffefefef,0xffd1d1d1,0xffc9c9c9,0xfe202323,0xc13e4142,0x57000000,0x15000000,
+ 0x1000000,0x1000000,0xff000000,0xff000000,0xff000000,0xff000000,0xfff8f8f8,0xffd8d8d8,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x82000000,0x3d000000,0xd000000,
+ 0x1000000,0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xfff4f4f4,0xffc9c9c9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0x2000000,
+ 0x1000000,0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xffe9e9e9,0xfe202323,0xcd3c3f3f,0x85000000,0x45000000,0x14000000,0x2000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xce3b3e3f,0x86000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x7b000000,0x45000000,0x14000000,0x2000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x26000000,0x10000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb forward_inactive_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7f000000,0x46636363,0x9000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7e222222,0x4f5a5a5a,0xc000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7f222222,0x505a5a5a,0xc000000,0x1000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7fffffff,0x7fffffff,0x7ff4f4f4,0x7f222222,0x505a5a5a,0xc000000,0x1000000,0xffffff,
+ 0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7ff7f7f7,0x7fededed,0x7f222222,0x505a5a5a,0xc000000,0x1000000,
+ 0xffffff,0xffffff,0x7f000000,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7fffffff,0x7feeeeee,0x7fd6d6d6,0x7fd1d1d1,0x77484848,0x20000000,0x7000000,
+ 0xffffff,0xffffff,0x7f000000,0x7ff5f5f5,0x7fe1e1e1,0x7fe9e9e9,0x7ff9f9f9,0x7fefefef,0x7fd1d1d1,0x7fc9c9c9,0x7f222222,0x60404040,0x2b000000,0xa000000,
+ 0xffffff,0xffffff,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7ff8f8f8,0x7fd8d8d8,0x7fc9c9c9,0x7f222222,0x663d3d3d,0x41000000,0x1e000000,0x6000000,
+ 0xffffff,0xffffff,0x12000000,0x35000000,0x47000000,0x7f000000,0x7ff4f4f4,0x7fc9c9c9,0x7f222222,0x663d3d3d,0x42000000,0x22000000,0xa000000,0x1000000,
+ 0xffffff,0xffffff,0x6000000,0x12000000,0x18000000,0x7f000000,0x7fe9e9e9,0x7f222222,0x663d3d3d,0x42000000,0x22000000,0xa000000,0x1000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x7f000000,0x7f000000,0x673d3d3d,0x43000000,0x22000000,0xa000000,0x1000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x12000000,0x35000000,0x3d000000,0x22000000,0xa000000,0x1000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x6000000,0x12000000,0x13000000,0x8000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb fullscreen_data[] = {
+ 0x2e000000,0x5e000000,0x7d000000,0x86000000,0x87000000,0x76000000,0x54000000,0x4b000000,0x68000000,0x7e000000,0x84000000,0x88000000,0x79000000,0x55000000,
+ 0x5f000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x86000000,0x7a000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x93000000,
+ 0x7e000000,0xffffffff,0xffffffff,0xffffffff,0xfeeeeeee,0xd81b1b1b,0xa9000000,0x95000000,0xcc464646,0xfffafafa,0xffffffff,0xffffffff,0xffffffff,0xc1000000,
+ 0x86000000,0xffffffff,0xffffffff,0xffffffff,0xfdb4b4b4,0xe0000000,0xb9000000,0xa0000000,0xbe000000,0xfab8b8b8,0xffffffff,0xffffffff,0xffffffff,0xd3000000,
+ 0x88000000,0xffffffff,0xfffafafa,0xfdb6b6b6,0xfee8e8e8,0xf6aeaeae,0xbf000000,0xa7000000,0xebb5b5b5,0xfde8e8e8,0xfcb5b5b5,0xffededed,0xffffffff,0xd6000000,
+ 0x77000000,0xffffffff,0xe0404040,0xe3000000,0xf6afafaf,0xee989898,0xb9000000,0xa1000000,0xdfa0a0a0,0xefb3b3b3,0xda000000,0xe7191919,0xffffffff,0xc8000000,
+ 0x55000000,0x89000000,0xac000000,0xba000000,0xc0000000,0xb9000000,0x9f000000,0x88000000,0x93000000,0xa9000000,0xb3000000,0xbc000000,0xc0000000,0xa8000000,
+ 0x4b000000,0x79000000,0x95000000,0x9f000000,0xa7000000,0xa1000000,0x88000000,0x74000000,0x81000000,0x94000000,0x9a000000,0xa4000000,0xaa000000,0x93000000,
+ 0x68000000,0xffffffff,0xc01e1e1e,0xbc000000,0xebb5b5b5,0xdfa0a0a0,0x93000000,0x81000000,0xd4a7a7a7,0xe6b8b8b8,0xba000000,0xd3434343,0xffffffff,0xa5000000,
+ 0x7d000000,0xffffffff,0xfeeeeeee,0xf9b6b6b6,0xfde8e8e8,0xefb3b3b3,0xa9000000,0x94000000,0xe7b8b8b8,0xfce9e9e9,0xfab8b8b8,0xfffafafa,0xffffffff,0xbe000000,
+ 0x83000000,0xffffffff,0xffffffff,0xffffffff,0xfcb8b8b8,0xdb000000,0xb4000000,0x99000000,0xb8000000,0xf9b6b6b6,0xffffffff,0xffffffff,0xffffffff,0xcf000000,
+ 0x87000000,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xec3d3d3d,0xbe000000,0xa2000000,0xc81d1d1d,0xfeeeeeee,0xffffffff,0xffffffff,0xffffffff,0xd7000000,
+ 0x79000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc3000000,0xa9000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xd0000000,
+ 0x54000000,0x92000000,0xc1000000,0xd4000000,0xd7000000,0xc9000000,0xaa000000,0x94000000,0xa4000000,0xbd000000,0xcd000000,0xd6000000,0xcf000000,0xae000000
+};
+
+static const QRgb go_data[] = {
+ 0xffd2e7a7,0xffc5e18f,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,0xffb9da77,
+ 0xffb9da77,0xffb9da77,0xffb9da77,0xffa7d156,0xff77a719,0xffc5e18f,0xffb5d86f,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,
+ 0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xffa1ce4a,0xff85ba1c,0xff415b0e,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d,
+ 0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff82b71b,0xff5a7f13,0xff5a7f13,0xff5a7f13,0xff8ac21d,0xff689216,
+ 0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d,0xff84ba1c,0xff567812,0xff2a3b09,0xff0d1203,0xff000000,0xff060901,0xff223007,0xff47640f,0xff3b530c,
+ 0xff0b0f03,0xff3e4a25,0xff0a0e02,0xff82b71b,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff7db01a,0xff364c0b,0xff010100,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff010200,0xff616c4b,0xffe4e8dc,0xff080b02,0xff415c0e,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff87bd1c,
+ 0xff374e0c,0xff000000,0xff000000,0xff131b04,0xff374e0c,0xff4e6e10,0xff415b0e,0xff1d2906,0xff000000,0xff030303,0xffeeefee,0xffffffff,0xff68764d,0xff050701,
+ 0xff5d8214,0xff293909,0xffb9da77,0xffa1ce4a,0xff5e8414,0xff020200,0xff000000,0xff2c3e09,0xff75a519,0xff87be1c,0xff8ac21d,0xff7fb21b,0xff74a419,0xff161f05,
+ 0xff747474,0xffffffff,0xffffffff,0xfff2f4ee,0xff101606,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a,0xff33480b,0xff000000,0xff0c1103,0xff6d9a17,0xff8ac21d,
+ 0xff8ac21d,0xff5f8514,0xff0c1103,0xff49660f,0xff2c3c0d,0xff55584e,0xff4c4c4c,0xff52544d,0xff6a7752,0xff2f3a19,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a,
+ 0xff161e05,0xff000000,0xff283808,0xff84b91c,0xff8ac21d,0xff628a15,0xff0b1002,0xff000000,0xff121a04,0xff39510c,0xff222f07,0xff000000,0xff020300,0xff32470a,
+ 0xff3f580d,0xff4b6a10,0xff293909,0xffb9da77,0xffa1ce4a,0xff080b02,0xff000000,0xff374d0b,0xff8ac21d,0xff5f8514,0xff0a0e02,0xff000000,0xff000000,0xff2f420a,
+ 0xff8ac21d,0xff5d8314,0xff000000,0xff000000,0xff6a9516,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff172105,0xff000000,0xff283808,0xff80b41b,
+ 0xff1c2706,0xff000000,0xff000000,0xff000000,0xff050801,0xff445f0e,0xff46630f,0xff000000,0xff050701,0xff709d18,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,
+ 0xffa1ce4a,0xff354b0b,0xff000000,0xff0c1103,0xff6c9717,0xff719e18,0xff1e2b06,0xff537411,0xff273708,0xff000000,0xff020200,0xff0e1403,0xff000000,0xff1b2506,
+ 0xff7cae1a,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff608714,0xff030401,0xff000000,0xff293909,0xff73a118,0xff83b81c,0xff8ac21d,0xff77a719,
+ 0xff182105,0xff000000,0xff000000,0xff000000,0xff435e0e,0xff8ac21d,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff88bf1d,0xff3b530c,0xff000000,
+ 0xff000000,0xff101703,0xff32460a,0xff47640f,0xff3d560d,0xff182105,0xff000000,0xff000000,0xff000000,0xff3f590d,0xff82b71b,0xff8ac21d,0xff689216,0xff293909,
+ 0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff7fb31b,0xff3c540d,0xff020300,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff080b02,0xff000000,
+ 0xff030401,0xff709d18,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d,0xff85ba1c,0xff587c13,0xff2c3e09,0xff0f1503,0xff000000,
+ 0xff080b02,0xff243308,0xff4d6c10,0xff6a9416,0xff233107,0xff435e0e,0xff84ba1c,0xff8ac21d,0xff689216,0xff293909,0xffb9da77,0xffa1ce4a,0xff8ac21d,0xff8ac21d,
+ 0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff8ac21d,0xff689216,
+ 0xff293909,0xffa7d156,0xff85ba1c,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,0xff689216,
+ 0xff689216,0xff689216,0xff689216,0xff689216,0xff4d6d10,0xff233107,0xff77a719,0xff415b0e,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,
+ 0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff293909,0xff233107,0xff233107
+};
+
+static const unsigned char h_src_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x01,0x01,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x0d,0x15,0x0d,
+ 0x15,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0d,0x08,
+ 0x0d,0x0d,0x0d,0x15,0x0d,0x15,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x15,
+ 0x0d,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15,0x01,0x00,0x00,0x00,0x00,
+ 0x01,0x15,0x0d,0x0d,0x0d,0x15,0x0d,0x08,0x08,0x15,0x15,0x01,0x00,0x00,
+ 0x00,0x01,0x15,0x0d,0x08,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x15,0x15,0x01,
+ 0x00,0x00,0x00,0x01,0x0d,0x15,0x0d,0x08,0x08,0x08,0x0d,0x15,0x0d,0x15,
+ 0x08,0x01,0x00,0x00,0x01,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x08,0x08,
+ 0x15,0x15,0x01,0x00,0x00,0x01,0x15,0x15,0x08,0x15,0x15,0x15,0x0d,0x15,
+ 0x15,0x15,0x15,0x15,0x01,0x00,0x01,0x15,0x15,0x15,0x15,0x08,0x08,0x08,
+ 0x15,0x0d,0x15,0x0d,0x15,0x15,0x01,0x00,0x01,0x08,0x15,0x15,0x15,0x15,
+ 0x15,0x15,0x08,0x08,0x08,0x15,0x15,0x08,0x01,0x00,0x00,0x01,0x01,0x08,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x01,0x01,0x08,0x15,0x15,0x15,0x15,0x15,0x08,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x08,0x15,0x08,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,
+ 0x00,0x00,0x00,0x00
+};
+
+static const QRgb h_src_ctable[] = {
+ 0xc6c6c6,0xff000000,0xffc3c3c3,0xff303030,0xffc0c0ff,0xffff0000,0xff008080,0xff800000,0xffc0c000,0xff0000c0,0xff808080,0xffc0ffc0,0xff00ffff,0xffffffff,
+ 0xffa0a0a0,0xff00ff00,0xffffff00,0xffffc0ff,0xff404000,0xff00c000,0xff000080,0xffffffc0,0xff400000,0xffc05800,0xff800080,0xff008000,0xff00c0c0,0xffdcdcdc,
+ 0xffff8000,0xffffc0c0,0xff585858,0xffc00000,0xffffdca8,0xff808000,0xffffa858,0xff004000,0xffc000c0,0xff0000ff,0xffff00ff,0xffc0ffff,0xff004040
+};
+
+static const QRgb help_icon_data[] = {
+ 0xffffff,0x2000000,0x6000000,0xa000000,0x11000000,0x16000000,0x1a000000,0x1a000000,0x18000000,0x12000000,0xc000000,0x6000000,0x3000000,0x1000000,
+ 0x2000000,0x7000000,0x10000000,0x1b000000,0x2f000000,0x47000000,0x58000000,0x59000000,0x4b000000,0x33000000,0x1e000000,0x12000000,0x9000000,0x3000000,
+ 0x5000000,0xe000000,0x1d000000,0x3b000000,0x72000000,0xbf6d6d6d,0xdf969696,0xe0959595,0xca7c7c7c,0x81000000,0x48000000,0x24000000,0x13000000,0x7000000,
+ 0x7000000,0x16000000,0x30000000,0x71000000,0xeab4b4b4,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf9dadada,0x93292929,0x42000000,0x1e000000,0xb000000,
+ 0xa000000,0x1c000000,0x45000000,0xb6717171,0xffffffff,0xffffffff,0xfdb7b7b7,0xfd9a9a9a,0xffffffff,0xffffffff,0xdf969696,0x63000000,0x2a000000,0x10000000,
+ 0xb000000,0x20000000,0x4c000000,0xb1747474,0xe9909090,0xfbc7c7c7,0xf91a1a1a,0xfe404040,0xffffffff,0xffffffff,0xe2949494,0x6d000000,0x31000000,0x13000000,
+ 0xa000000,0x1e000000,0x40000000,0x72000000,0xad000000,0xe0000000,0xfc787878,0xfff1f1f1,0xffffffff,0xfbc7c7c7,0xb0000000,0x62000000,0x31000000,0x13000000,
+ 0x8000000,0x17000000,0x33000000,0x5d000000,0x99000000,0xe3474747,0xffffffff,0xffffffff,0xfda8a8a8,0xd3000000,0x8e000000,0x53000000,0x2a000000,0xf000000,
+ 0x5000000,0x12000000,0x2c000000,0x55000000,0x92000000,0xe7808080,0xfdc5c5c5,0xfdc5c5c5,0xe0000000,0xaa000000,0x72000000,0x41000000,0x1f000000,0xb000000,
+ 0x3000000,0xc000000,0x23000000,0x48000000,0x83000000,0xd7636363,0xf68a8a8a,0xf48b8b8b,0xbc000000,0x83000000,0x56000000,0x2e000000,0x13000000,0x6000000,
+ 0x1000000,0x7000000,0x1b000000,0x3d000000,0x77000000,0xe2949494,0xffffffff,0xffffffff,0xaa000000,0x66000000,0x3f000000,0x1d000000,0x9000000,0x3000000,
+ 0xffffff,0x5000000,0x18000000,0x37000000,0x6a000000,0xd9999999,0xffffffff,0xffffffff,0x93000000,0x50000000,0x2e000000,0x12000000,0x3000000,0x1000000,
+ 0xffffff,0x5000000,0x14000000,0x2e000000,0x4e000000,0x7b000000,0x9a000000,0x92000000,0x62000000,0x3b000000,0x21000000,0xb000000,0xffffff,0xffffff,
+ 0xffffff,0x3000000,0xe000000,0x1f000000,0x31000000,0x42000000,0x4d000000,0x4a000000,0x38000000,0x27000000,0x15000000,0x7000000,0xffffff,0xffffff
+};
+
+static const QRgb home_data[] = {
+ 0xffffff,0x1000000,0x2000000,0x6000000,0xb000000,0x13000000,0x1c000000,0x21000000,0x21000000,0x20000000,0x1d000000,0x13000000,0xc000000,0x6000000,
+ 0x1000000,0x2000000,0x8000000,0x12000000,0x21000000,0x31000000,0x43000000,0x4e000000,0x51000000,0x4a000000,0x40000000,0x2e000000,0x1f000000,0x11000000,
+ 0x2000000,0x8000000,0x14000000,0x27000000,0x42000000,0x5e000000,0xa37b7b7b,0xaf717171,0x8e131313,0xab6a6a6a,0x93626262,0x57000000,0x3b000000,0x22000000,
+ 0x7000000,0x13000000,0x28000000,0x4c000000,0x71000000,0xb76a6a6a,0xfff3f3f3,0xfff2f2f2,0xdd656565,0xffb1b1b1,0xf9b3b3b3,0x88000000,0x5f000000,0x39000000,
+ 0xf000000,0x23000000,0x47000000,0x75000000,0xbf646464,0xffeeeeee,0xffffffff,0xffffffff,0xffe8e8e8,0xff939393,0xfc8e8e8e,0xb3000000,0x86000000,0x56000000,
+ 0x1a000000,0x38000000,0x66000000,0xbd6f6f6f,0xffeeeeee,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe3e3e3,0xfe858585,0xd0000000,0xa4000000,0x6f000000,
+ 0x21000000,0x4d000000,0xa1646464,0xffebebeb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffcbcbcb,0xe8343434,0xb9000000,0x82000000,
+ 0x2a000000,0x80747474,0xfcd5d5d5,0xfff1f1f1,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffcfcfcf,0xfe9c9c9c,0xd23f3f3f,0x8d000000,
+ 0x2d000000,0x73464646,0xb75c5c5c,0xfddedede,0xffffffff,0xfff8f8f8,0xfff1f1f1,0xfff0f0f0,0xfff8f8f8,0xffffffff,0xffb8b8b8,0xee303030,0xcc242424,0x90000000,
+ 0x2b000000,0x5d000000,0x94000000,0xfadddddd,0xffffffff,0xffb2b2b2,0xff565656,0xff4c4c4c,0xffa4a4a4,0xffffffff,0xfdaeaeae,0xdf000000,0xb9000000,0x83000000,
+ 0x23000000,0x51000000,0x85000000,0xfbe5e5e5,0xffffffff,0xffbebebe,0xff6c6c6c,0xff646464,0xffb4b4b4,0xffffffff,0xfbbcbcbc,0xcd000000,0xa4000000,0x73000000,
+ 0x1d000000,0x40000000,0x6c000000,0xddb6b6b6,0xfcd6d6d6,0xfdb0b0b0,0xfa7c7c7c,0xfb797979,0xfea6a6a6,0xfdcccccc,0xe88b8b8b,0xaf000000,0x87000000,0x5b000000,
+ 0x12000000,0x2c000000,0x4d000000,0x71000000,0x94000000,0xab000000,0xb8000000,0xbf000000,0xbd000000,0xb3000000,0xa2000000,0x85000000,0x61000000,0x3e000000,
+ 0x9000000,0x18000000,0x30000000,0x48000000,0x61000000,0x74000000,0x81000000,0x86000000,0x83000000,0x7b000000,0x6a000000,0x55000000,0x3b000000,0x25000000
+};
+
+static const unsigned char install_data[] = {
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x03,0x04,0x04,0x05,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x00,0x03,0x04,0x05,0x05,0x03,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x06,0x03,0x05,0x05,
+ 0x05,0x03,0x06,0x06,0x07,0x07,0x00,0x00,0x00,0x02,0x02,0x06,0x06,0x06,
+ 0x03,0x03,0x03,0x06,0x06,0x07,0x07,0x07,0x00,0x00,0x00,0x02,0x06,0x06,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x00,0x00,0x00,0x08,0x08,
+ 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x02,0x00,0x00,0x00,
+ 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x02,0x09,0x09,0x00,
+ 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x02,0x02,0x09,
+ 0x02,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x09,0x07,0x07,0x07,0x07,0x07,
+ 0x09,0x09,0x02,0x00,0x00,0x00,0x00,0x09,0x09,0x09,0x09,0x09,0x09,0x09,
+ 0x09,0x09,0x02,0x09,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x09,0x07,
+ 0x07,0x07,0x07,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,
+ 0x09,0x07,0x07,0x07,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+static const QRgb install_ctable[] = {
+ 0x40ffffff,0xffffff00,0xffff0000,0xff0000ff,0xffffffff,0xff00b6ff,0xff000000,0xffff6d00,0xffffb696,0xffb64500
+};
+
+static const QRgb installed_data[] = {
+ 0xff,0xff3300,0xff,0xff3300,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff0000ff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff00b6ff,0xff00b6ff,0xffffffff,0xffffffff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xffff,0xff,0xffff,
+ 0xff,0xffff,0xff0000ff,0xff00b6ff,0xffffffff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff,
+ 0xff,0xff,0xff0000ff,0xff00b6ff,0xffffffff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xffff,
+ 0xff,0xffff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff,
+ 0xff,0xff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xffff,
+ 0xff,0xffff,0xff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff0000ff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff0000ff,0xffff,0xff,0xffff,
+ 0xff,0xffff,0xff,0xffff,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xffff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,
+ 0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xff,0xff,0xff
+};
+
+static const QRgb italic_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,
+ 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const unsigned char konsole_data[] = {
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x01,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x04,0x00,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x03,0x03,0x04,0x00,0x03,
+ 0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x03,0x03,0x04,
+ 0x00,0x03,0x02,0x03,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x03,
+ 0x03,0x04,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,
+ 0x00,0x03,0x03,0x04,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x04,0x00,0x03,0x03,0x04,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x04,0x00,0x03,0x03,0x04,0x00,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x03,0x03,0x04,0x00,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x03,0x03,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x03,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
+ 0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01
+};
+
+static const QRgb konsole_ctable[] = {
+ 0xff808080,0xc6c6c6,0xffc0ffff,0xff000000,0xffffffff
+};
+
+static const QRgb language_data[] = {
+ 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0x404000,0x404000,0x404000,0x404000,0x404000,0x404000,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x404000,0x404000,0x404000,0xff000000,0xff000000,
+ 0x0,0x404000,0xdcdcdc,0x0,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,
+ 0xffffffff,0xff000000,0x0,0x0,0x404000,0x0,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
+ 0xffffffff,0xffffffff,0xffffffff,0xff000000,0x0,0x0,0x404000,0x404000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xff000000,0x0,0x0,0x0,0x404000,0xff000000,0xffffffff,0xffffffff,0xff000000,
+ 0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff000000,0xffffffff,0xff000000,0x0,0xff000000,0xff000000,0x404000,0xff000000,0xffffffff,
+ 0xffffffff,0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff000000,0xff000000,0xff000000,0xff0000ff,0xff000000,0x0,
+ 0xff000000,0xffffffff,0xff000000,0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,
+ 0xff000000,0x0,0xff000000,0xff000000,0x80,0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,
+ 0xff0000ff,0xff0000ff,0xff000000,0x0,0xff000000,0x0,0x0,0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,
+ 0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff000000,0x0,0xff000000,0x0,0x0,0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,
+ 0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff000000,0x0,0xff000000,0x0,0x0,0xff000000,0xff0000ff,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff000000,0x0,0xff000000,0x0,0xdcdcdc,0xff000000,
+ 0xff000000,0xdcdcdc,0xdcdcdc,0x800000,0x800000,0xff000000,0xff0000ff,0xff0000ff,0xff0000ff,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0x0,0xff000000,0xdcdcdc,0x0,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,0xff000000,0xff000000,0x0,0xdcdcdc,0x0,
+ 0x0,0x0,0xdcdcdc,0xff000000,0xdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const QRgb launching_data[] = {
+ 0xb000000,0x2d000000,0x0,0x48000000,0x53000000,0x51000000,0x23000000,0x0,0x0,0x2f3b3700,0x25b3a700,0x6b282500,0x5a0e0d00,0x190a0900,
+ 0xadffee00,0x76ffee00,0x0,0x2d000000,0xb000000,0x0,0x5ffee00,0x8ffee00,0x5ffee00,0x0,0x0,0x0,0x0,0x0,
+ 0xcffee00,0xaffee00,0x0,0x0,0x17000000,0x5c050500,0x71635c00,0x9b887f00,0xbd8f8500,0xb9877e00,0x6a282600,0x57000000,0x2c000000,0x69242200,
+ 0x78413d00,0x83363300,0x8b151300,0x59000000,0x7be8d800,0xe6ffee00,0x0,0x59000000,0x48000000,0x6ffee00,0x14ffee00,0x15ffee00,0x58171500,0x61000000,
+ 0x58000000,0xf000000,0xcffee00,0x3dffee00,0x27ffee00,0x5ffee00,0x0,0x0,0xb000000,0x63010100,0x68060500,0x5f181600,0x51dccd00,0xc7ffee00,
+ 0xf5e6d600,0xaa7f7700,0x5a000000,0x8c131200,0x7a665f00,0x8e665f00,0x7e464100,0x90040400,0x4b000000,0xf4ffee00,0x5cffee00,0x54000000,0x55060500,0x1dffee00,
+ 0x2dffee00,0x42776f00,0x780e0d00,0x71000000,0x4d000000,0x40f7e600,0x94ffee00,0x4bffee00,0x4ffee00,0x0,0x0,0x0,0x53000000,0x5d080700,
+ 0x6f0d0c00,0x990a0900,0x94060600,0x71030200,0xb0efdf00,0xfdffee00,0xa9aca000,0x960a0900,0xa1474200,0x74ffee00,0x7eb8ab00,0x7f262300,0x44000000,0xfbffee00,
+ 0x87fbea00,0x59000000,0x57403c00,0x48ffee00,0x45ffee00,0x73383400,0x92030300,0x53090800,0x98ffee00,0xdcffee00,0x68c4b700,0x52000000,0x100f0e00,0x0,
+ 0x0,0x0,0x4f000000,0x5c080700,0x1f6a6300,0x48514c00,0x90222000,0xa0131200,0x94050500,0xd6a19600,0xeefcec00,0x6f040400,0x9c433e00,0x9affee00,
+ 0xa2ffee00,0x93696200,0x56000000,0xfdffee00,0x88787000,0x69262400,0x72faed37,0x80fff131,0x61e2d300,0x9a121100,0xbf625c00,0xf5fcec00,0xf3ffee00,0x88b2a600,
+ 0x5d080700,0x590e0d00,0x28131100,0x54030200,0x0,0x0,0x2000000,0x57020200,0x5e100f00,0x31a69b00,0x39ffee00,0x58b3a800,0x9c2a2700,0x9b0a0900,
+ 0x63000000,0x36000000,0x613e3a00,0x94f0e00e,0xd2f2e20c,0xb9cec000,0x6b282500,0xaeb2a600,0x61151300,0x7b797100,0x11fffef5,0x2fffcda,0x413c3800,0xac222000,
+ 0xfdd2c400,0xd5ffee00,0x693c3800,0x68222000,0x5e2b2800,0x30454000,0x5f0d0c00,0x4b030300,0x0,0xbffee00,0x54000000,0x4a000000,0x59020200,0x63191800,
+ 0x42bdb000,0x63ffee00,0x3affee00,0x17b0a400,0x61232100,0x5a000000,0x3191700,0x2fefefe,0x4f5f4eb,0x17ffffff,0x887b7300,0x5a000000,0x905f5900,0x0,
+ 0x0,0x0,0x73141300,0x70000000,0xeffee00,0x694b4600,0x834e4900,0x56857c00,0x57494400,0x64191700,0x50060500,0x0,0x14ffee00,0x22ffee00,
+ 0x57000000,0x5a000000,0x5d000000,0x59010100,0x68232001,0x74cdc00b,0x44f8e806,0x0,0x5ffee00,0x52615a00,0x4000000,0x0,0x0,0x0,
+ 0x7ffee09,0x4a09e85,0x1bfb85c,0x0,0x0,0x1736c00,0x71080700,0x35a89d00,0x96706800,0xaa706807,0x79aea206,0x74655e00,0x6d2c2900,0x3d191700,
+ 0x0,0x3cffee00,0x61ffee00,0xeffee00,0x36000000,0x5a000000,0x5a000000,0x5b000000,0x8e000000,0x84474204,0xacc6ba1e,0x20f1ea96,0x0,0x1ffee08,
+ 0xbffee00,0x0,0x0,0x0,0x0,0x1fffefc,0x0,0x0,0x0,0x3f1f0e4,0x54ffee00,0x6df6e610,0x20a49d4d,0xaea59b10,
+ 0x73c9bc00,0x71333000,0x42171500,0x1ffee00,0x6dffee00,0xadffee00,0x1fffee00,0x0,0x0,0x2c000000,0x59000000,0x5a000000,0x5b000000,0x70141200,
+ 0x94615b05,0xeaebe59b,0x1dfefefd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x1fefefe,0x1faf9ef,0x75fbea00,0x733e3900,0x59080800,0x1affee00,0xd5ffee00,0xe4ffee00,0x43ffee00,0x0,0x0,0x0,0x0,
+ 0x0,0x3d000000,0x5a000000,0x5a000000,0x61121100,0xa77e7600,0xdee8e080,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x163e3900,0x5b050500,0xb5e7d700,0xfdffee00,0xefffee00,0x21ffee00,0x0,
+ 0x0,0x0,0x0,0x13ffee00,0x6fffee00,0xc6ffee00,0xe2e9d900,0xe8c9bb00,0x90c1b400,0x67201e00,0xb6a89c00,0x1cf6ef9f,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x12c2900,0x56000000,0x23000000,0xbbccbe00,
+ 0xd2a19600,0x53000000,0x53000000,0x58000000,0x55000000,0x0,0xa1ffee00,0xbcffee00,0xc9ffee00,0xcaffee00,0xe0ffee00,0xe2ffee00,0x7effee00,0x48000000,
+ 0x6b2a2800,0x30ffee00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x56000000,0x60000000,0x5a000000,0x5a000000,0x57000000,0x53000000,0x53000000,0x4e000000,0x20000000,0x0,0x1ffee00,0x0,0x0,0x0,
+ 0x0,0x0,0x2000000,0x50000000,0x5a000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x3ad0d0d0,0x5a000000,0x5a000000,0x59000000,0x51000000,0x28000000,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x2000000,0x46000000,0x59000000,0x5d100f00,0x6cfcb95,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd5ffee00,0xd7f4e400,0xd3aa9f00,0xbd8c8200,0xa4736b00,
+ 0x93645d00,0x6f625c00,0x22ffee00,0x16ffee00,0x0,0x0,0x0,0xb000000,0x58000000,0x60121100,0x32756d00,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe4aca784,
+ 0xf3c5ba39,0xe0e0d21e,0xc5f1e10d,0x96f6e503,0x98867d00,0x8e5d5700,0x47938900,0x1effee00,0x0,0x0,0x18000000,0x58000000,0x66232000,0x6fd5c700,
+ 0x5acdc131,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x5bfffcd7,0xf8ffee00,0xecffee00,0xd6ffee00,0xc2fceb00,0xaebbaf00,0x988c8300,0x92655e00,0x7e4c4700,0x24f0e000,0x16ffee00,0x0,0x11000000,
+ 0x5e0d0c00,0x682e2b00,0x5ff9e800,0xb0e1d31d,0xdbada452,0x56e6e090,0x15fffef0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x5a000000,0x5a000000,0x59000000,0x5a000000,0x59000000,0x5a000000,0x53000000,0x11000000,
+ 0x0,0x0,0x0,0x56111000,0x6e332f00,0x47f7e700,0x7cf7e607,0xa4ded021,0xadf9e805,0x83ffee00,0x4baa9e00,0x10f0e00,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3a69b00,0x67222000,0x59000000,0x3a000000,0x28928800,
+ 0x19ffee00,0x0,0x0,0x0,0x0,0x0,0x7ffee00,0x66282500,0x70464100,0x48ffee00,0x60f9e900,0x887b7300,0x76454000,0x5f0d0c00,
+ 0x5a000000,0x16282500,0x5ebdb00,0x0,0x0,0x0,0x3bffee00,0x14f7f7fb,0x0,0x0,0x1ffee00,0x2ccc68e,0x0,0x26dbce23,
+ 0x7ffdec01,0x6d333000,0x5b050500,0xc0fceb00,0xfcffee00,0xd6ffee00,0x40ffee00,0x0,0x0,0x0,0xcffee00,0x68242200,0x5f484300,0x575a5400,
+ 0x6d2e2b00,0x600f0e00,0x6a262300,0x6a262300,0x410b0a00,0x7ecabc00,0xef2eb8e,0x0,0x0,0x0,0x45030300,0xb3faea12,0x0,0x0,
+ 0x0,0x96ffee00,0x76e7d817,0xd7c9bd35,0xbce0d21e,0x82e3d404,0x7c454100,0x48383400,0xb3ffee00,0xe4ffee00,0xf6ffee00,0xbbffee00,0x69ffee00,0x6ffee00,
+ 0x9ffee00,0x5e1d1b00,0x62141300,0x5d080700,0x5b020200,0x5d080700,0xf9b2a600,0xbafceb00,0x682e2b00,0xcd8b8202,0x16ede8b1,0x11faf7ce,0x4fbea00,0x2b0f0e00,
+ 0x5a000000,0x72ffee00,0x26eae6af,0x0,0x13dad36f,0x6d2e2b00,0x7baa9e00,0xa1ffee00,0xa6f9e805,0x88f4e40a,0x926f6800,0x77464200,0x12ffee00,0x3ffee00,
+ 0x1dffee00,0x70ffee00,0x84ffee00,0x68ffee00,0x3ffee00,0xc3f3b00,0x6b000000,0x90000000,0x57080700,0xebfceb00,0xf7ffee00,0x70565000,0x8d5c5600,0xd28e8505,
+ 0xccf1e20d,0x9cffee00,0x5c343100,0x5a000000,0x5a000000,0x307f7700,0xa7ffee00,0x1bcb672,0x8867f3c,0x70322e00,0x5f0d0c00,0x54615a00,0x53ffee00,0x65fceb02,
+ 0x62c0b300,0x7e484400,0x2cbfb200,0xdffee00,0x3ffee00,0x0,0x0,0xcffee00,0x0,0x4a000000,0x94000000,0x6b020200,0xb9fceb00,0xebffee00,
+ 0x66464100,0x67201e00,0xa4736b00,0xabc5b804,0x97fbeb03,0x39ffee00,0x59000000,0x34000000,0x56000000,0x51000000,0x61ffee00,0x4ce6d718,0x596f6928,0x814d4807,
+ 0x46000000,0x5a000000,0x47030300,0xdffee00,0x1fffee00,0x72373400,0x484d4800,0xfffee00,0x6ffee00,0x2ffee00,0x0,0x0,0x18000000,0x7e000000,
+ 0x7a010100,0x91fbea00,0xbfffee00,0x513e3a00,0x5d080700,0x75413d00,0x99716900,0x77ffee00,0x4bffee00,0x1f393500,0x5a000000,0x99ffee00,0x42000000,0x59000000,
+ 0x36ffee00,0x79ffee00,0xad7a7208,0x86595404,0x47ffee00,0x99a89d00,0x5a000000,0x58000000,0x36040400,0x5c080700,0x3b222000,0x9ffee00,0x4ffee00,0x2ffee00,
+ 0x0,0x0,0x56000000,0x7a040400,0x71807800,0x6bffee00,0x4f1d1b00,0x5b020200,0x4c2a2700,0x9a2d2a00,0x9a433e00,0x3fffee00,0x13ffee00,0x57000000,
+ 0xb2857c00,0xffffee00,0x44000000,0x85000000,0x443c3800,0x4dffee00,0x926e6600,0x835d5700,0x6bffee00,0xffffee00,0xbaefdf00,0x51000000,0x59000000,0x5a000000,
+ 0x25000000,0x0,0x0,0x0,0x0,0x0,0x59000000,0x534c4700,0x29f2e200,0x4e030300,0x5a000000,0x540c0b00,0x94111000,0xa3181600,
+ 0x73373300,0x54242200,0x39040400,0x5a000000,0xf7eddd00,0xc8ffee00,0x90000000,0xaa000000,0x5b020200,0x29958b00,0x79504a00,0x764b4600,0x1dffee00,0x8affee00,
+ 0xf8ffee00,0xd4ffee00,0x17ffee00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5a0e0d00,0x62171500,0x59000000,0x5a000000,
+ 0x23000000,0x600f0e00,0x970d0c00,0x7b151400,0x61121100,0x5d030300,0x5a000000,0x7e6b6400,0xf5ffee00,0x18ffee00,0x90000000,0x7b000000,0x57000000,0x5a050500,
+ 0x63292600,0x69353100,0x18ffee00,0x7ffee00,0x1effee00,0xc1ffee00,0xbfffee00,0x2bffee00,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xf443f00,0x4c000000,0x42000000,0x2000000,0x1ffee00,0x57070700,0x680b0a00,0x19262300,0x46000000,0x59000000,0x55000000,0x94ffee00,0xa2ffee00,0x0,
+ 0x70000000,0x59000000,0xb000000,0x5a000000,0x5d080700,0x541b1900,0xeffee00,0x8ffee00,0x1ffee00,0x0,0x49ffee00,0x77ffee00,0x2bffee00,0x6ffee00,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x29060500,0x5b020200,0x58000000,0x5a000000,0x49000000,
+ 0x8bfb200,0xa0ffee00,0x3bffee00,0x0,0x2000000,0x47000000,0x0,0x40000000,0x58000000,0x47f7700,0x6ffee00,0x4ffee00,0x1ffee00,0x0,
+ 0x0,0x9ffee00,0x22ffee00,0x1cffee00,0x1ffee00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x12000000,
+ 0x59000000,0x53000000,0x12000000,0x0,0x32ffee00,0x51ffee00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x1ffee00,0x1ffee00,0x0,0x0,0x0,0x0,0x0,0x7ffee00,0x5ffee00,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffee00,0x31ffee00,0x11ffee00,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0
+};
+
+static const QRgb left_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const QRgb library_data[] = {
+ 0x6000000,0x10000000,0x26000000,0x3c000000,0x3b000000,0x28000000,0x19000000,0x18000000,0x26000000,0x3a000000,0x3e000000,0x2e000000,0x1b000000,0xf000000,
+ 0xa000000,0x27000000,0xb3c1c1c1,0xffffffff,0xffffffff,0x818d8d8d,0x31000000,0x30000000,0x7f8e8e8e,0xffffffff,0xffffffff,0xb8bdbdbd,0x3a000000,0x1a000000,
+ 0xe000000,0x40000000,0xffffffff,0xffffffff,0xffffffff,0xa2757575,0x55000000,0x55000000,0xa0767676,0xffffffff,0xffffffff,0xffffffff,0x5a000000,0x28000000,
+ 0x13000000,0x4c000000,0xffffffff,0xffffffff,0xffffffff,0xe4c8c8c8,0xae6e6e6e,0xae6e6e6e,0xe4c8c8c8,0xffffffff,0xffffffff,0xffffffff,0x6e000000,0x35000000,
+ 0x17000000,0x50000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7a000000,0x3f000000,
+ 0x19000000,0x54000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x84000000,0x46000000,
+ 0x1a000000,0x55000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x88000000,0x4a000000,
+ 0x19000000,0x54000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x88000000,0x48000000,
+ 0x17000000,0x4b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7e000000,0x42000000,
+ 0x14000000,0x37000000,0xbdb9b9b9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xd1aaaaaa,0x68000000,0x39000000,
+ 0x10000000,0x20000000,0x42000000,0x67000000,0x91000000,0xf0d4d4d4,0xffffffff,0xffffffff,0xf3d1d1d1,0xaf000000,0x90000000,0x71000000,0x4c000000,0x2d000000,
+ 0xb000000,0x12000000,0x20000000,0x35000000,0x62000000,0xe8dadada,0xffffffff,0xffffffff,0xecd7d7d7,0x84000000,0x61000000,0x4b000000,0x34000000,0x1f000000,
+ 0x8000000,0xe000000,0x19000000,0x2b000000,0x4b000000,0xa8919191,0xe9d9d9d9,0xead8d8d8,0xb5898989,0x6b000000,0x4e000000,0x3a000000,0x27000000,0x15000000,
+ 0xe000000,0x19000000,0x2c000000,0x41000000,0x5b000000,0x75000000,0x89000000,0x8e000000,0x83000000,0x70000000,0x58000000,0x41000000,0x28000000,0x16000000
+};
+
+static const unsigned char locked_data[] = {
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x06,0x03,0x03,0x03,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x06,0x07,0x06,0x07,
+ 0x06,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x07,0x07,
+ 0x07,0x07,0x07,0x06,0x07,0x06,0x03,0x03,0x04,0x04,0x04,0x04,0x03,0x06,
+ 0x07,0x07,0x07,0x07,0x06,0x07,0x06,0x07,0x06,0x03,0x04,0x04,0x04,0x04,
+ 0x03,0x05,0x07,0x07,0x00,0x06,0x07,0x06,0x06,0x06,0x06,0x03,0x04,0x04,
+ 0x04,0x03,0x05,0x05,0x05,0x00,0x00,0x00,0x00,0x07,0x06,0x06,0x06,0x03,
+ 0x04,0x04,0x04,0x03,0x01,0x05,0x00,0x00,0x05,0x05,0x05,0x00,0x07,0x06,
+ 0x02,0x03,0x04,0x04,0x03,0x07,0x06,0x00,0x00,0x05,0x05,0x05,0x00,0x00,
+ 0x05,0x06,0x03,0x04,0x04,0x03,0x06,0x06,0x07,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x05,0x05,0x05,0x03,0x04,0x03,0x06,0x06,0x06,0x06,0x07,0x06,0x01,
+ 0x00,0x00,0x01,0x05,0x05,0x05,0x03,0x04,0x03,0x02,0x06,0x06,0x06,0x06,
+ 0x06,0x06,0x07,0x06,0x06,0x06,0x01,0x02,0x03,0x04,0x04,0x03,0x03,0x02,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x04,0x04,0x04,0x04,
+ 0x04,0x03,0x03,0x03,0x02,0x06,0x06,0x06,0x06,0x06,0x02,0x03,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x06,0x02,0x03,0x04,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,
+ 0x04,0x04,0x04,0x04
+};
+
+static const QRgb locked_ctable[] = {
+ 0xffffa858,0xffa0a0a0,0xffc0c000,0xff000000,0xc6c6c6,0xff800000,0xffffffc0,0xffffffff
+};
+
+static const unsigned char lockedfolder_data[] = {
+ 0x06,0x06,0x04,0x07,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,
+ 0x06,0x06,0x06,0x04,0x07,0x01,0x05,0x04,0x04,0x04,0x04,0x06,0x06,0x06,
+ 0x06,0x06,0x06,0x06,0x06,0x04,0x09,0x07,0x07,0x04,0x03,0x03,0x03,0x04,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x04,0x09,0x09,0x02,0x04,0x03,0x04,
+ 0x04,0x01,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x04,0x09,0x02,0x09,0x04,
+ 0x03,0x04,0x01,0x05,0x01,0x04,0x04,0x06,0x06,0x06,0x06,0x04,0x02,0x09,
+ 0x05,0x05,0x05,0x04,0x09,0x07,0x07,0x07,0x01,0x04,0x06,0x06,0x06,0x04,
+ 0x09,0x02,0x01,0x01,0x01,0x05,0x05,0x08,0x02,0x08,0x04,0x01,0x07,0x06,
+ 0x06,0x04,0x02,0x02,0x01,0x04,0x03,0x01,0x01,0x02,0x08,0x08,0x04,0x01,
+ 0x07,0x06,0x06,0x04,0x02,0x02,0x01,0x01,0x03,0x04,0x01,0x08,0x08,0x08,
+ 0x04,0x01,0x07,0x06,0x06,0x04,0x02,0x02,0x02,0x01,0x01,0x03,0x01,0x08,
+ 0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x04,0x04,0x00,0x02,0x04,0x03,0x01,
+ 0x01,0x08,0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x06,0x06,0x04,0x04,0x04,
+ 0x03,0x04,0x08,0x08,0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x06,0x06,0x06,
+ 0x06,0x04,0x03,0x04,0x08,0x08,0x08,0x08,0x04,0x01,0x07,0x06,0x06,0x06,
+ 0x06,0x06,0x06,0x06,0x04,0x04,0x04,0x08,0x08,0x08,0x04,0x01,0x04,0x04,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x04,0x04,0x08,0x04,0x01,
+ 0x04,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x04,
+ 0x04,0x04,0x04,0x06
+};
+
+static const QRgb lockedfolder_ctable[] = {
+ 0xff808080,0xffffa858,0xffc0c0c0,0xffc05800,0xff000000,0xffffdca8,0xc6c6c6,0xff585858,0xffa0a0a4,0xffffffff
+};
+
+static const QRgb mag_data[] = {
+ 0xffdbdbdb,0xff000000,0xff000000,0xff000000,0xff000000,0xffdbdbdb,0xffdadada,0xffd7d7d7,0xdcdcdc,0xdcdcdc,0xff000000,0xff000000,0xff2effff,0xff52ffff,
+ 0xff000000,0xff000000,0xffd9d9d9,0xffd7d7d7,0xdcdcdc,0xdcdcdc,0xff000000,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff000000,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xff000000,0xff00ffff,0xff00ffff,0xff00ffff,0xff00ffff,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,0xff000000,
+ 0xff00ffff,0xff00ffff,0xff000000,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,0xff000000,0xff000000,0xff000000,0xffc0c000,
+ 0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,0xffc0c000,0xffc0c000,0xff000000,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xffd7d7d7,0xffd7d7d7,0xdcdcdc,0xdcdcdc,0xff000000,0xffc0c000,0xffc0c000,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,
+ 0xdcdcdc,0xdcdcdc,0xff000000,0xffc0c000,0xff000000,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xdcdcdc,0xff000000,
+ 0xdcdcdc,0xdcdcdc
+};
+
+static const QRgb month_data[] = {
+ 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000,
+ 0x18000000,0xff7a7fbb,0xff6b71b3,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff454ca2,0xff0d1986,0x3d000000,0x2a000000,
+ 0x24000000,0xff6b71b3,0xff4a51a4,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff0d1a8b,0xff0a146c,0x5a000000,0x3e000000,
+ 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x74000000,0x50000000,
+ 0x35000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x86000000,0x5c000000,
+ 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000,
+ 0x3b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000,
+ 0x3c000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x96000000,0x67000000,
+ 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000,
+ 0x39000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000,
+ 0x35000000,0xffffffff,0xfffdfdfd,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffd1d1d1,0xffa4a4a4,0x86000000,0x5c000000,
+ 0x2e000000,0xfff5f5f5,0xffc4c4c4,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffa4a4a4,0xff969696,0x74000000,0x50000000,
+ 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000,
+ 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000
+};
+
+static const QRgb mute_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x95050505,0xd000000,0x7000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x3f000000,0x19000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xff000000,0x79000000,0x2b000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffcacaca,0xffffffff,0xff030303,0xe3050505,0xcb050505,0x2f050505,0xbf050505,0xbf050505,0xbf050505,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xffcacaca,0xffffffff,0xffffffff,0xff030303,0xffffffff,0xbb696969,0xbf050505,0xab717171,0xffffffff,0xbf050505,
+ 0xff000000,0xffbababa,0xffbababa,0xffbababa,0xffeaeaea,0xffeaeaea,0xffeaeaea,0xff030303,0xda5d5d5d,0xffffffff,0xab717171,0xffffffff,0xab717171,0xbf050505,
+ 0xff000000,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xffcfcfcf,0xff000000,0xe3050505,0xbb696969,0xffffffff,0xab717171,0xbf050505,0x2f050505,
+ 0xff000000,0xff8d8d8d,0xff8d8d8d,0xff8d8d8d,0xffb4b4b4,0xffb3b3b3,0xffb3b3b3,0xff030303,0xda5d5d5d,0xffffffff,0xab717171,0xffffffff,0xab717171,0xbf050505,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff9d9d9d,0xff030303,0xffffffff,0xbb696969,0xbf050505,0xab717171,0xffffffff,0xbf050505,
+ 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff7c7c7c,0xff9d9d9d,0xff030303,0xe3050505,0xcb050505,0x2f050505,0xbf050505,0xbf050505,0xbf050505,
+ 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff7c7c7c,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xc8030303,0x79000000,0x2b000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x31000000,0x3f000000,0x19000000,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb new_data[] = {
+ 0x16000000,0x4f000000,0x9c000000,0xbb000000,0xbe000000,0xbe000000,0xc1000000,0xc4000000,0xbf000000,0xa2000000,0x6d000000,0x3e000000,0x21000000,0x12000000,
+ 0x18000000,0x4b000000,0x86000000,0xffffffff,0xfffdfdfd,0xffeaeaea,0xffb0b0b0,0xffffffff,0xf5c6c6c6,0xae000000,0x99000000,0x6e000000,0x3f000000,0x21000000,
+ 0x19000000,0x4b000000,0x7c000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff969696,0xffffffff,0xffffffff,0xf8c1c1c1,0xb5000000,0x99000000,0x61000000,0x33000000,
+ 0x1a000000,0x4d000000,0x7e000000,0xffffffff,0xfffcfcfc,0xffe2e2e2,0xff939393,0xffffffff,0xffffffff,0xffffffff,0xf8c4c4c4,0xb0000000,0x7b000000,0x43000000,
+ 0x1c000000,0x50000000,0x81000000,0xffffffff,0xfffdfdfd,0xffe8e8e8,0xffababab,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb9000000,0x87000000,0x4c000000,
+ 0x1c000000,0x51000000,0x84000000,0xffffffff,0xfffdfdfd,0xfff5f5f5,0xffd7d7d7,0xffababab,0xff939393,0xff969696,0xffb0b0b0,0xbd000000,0x8d000000,0x50000000,
+ 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xfffcfcfc,0xfff5f5f5,0xffe8e8e8,0xffe2e2e2,0xffe2e2e2,0xffeaeaea,0xbf000000,0x8f000000,0x53000000,
+ 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xfffdfdfd,0xfffcfcfc,0xfffcfcfc,0xfffdfdfd,0xc0000000,0x8f000000,0x54000000,
+ 0x1d000000,0x52000000,0x85000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbf000000,0x8f000000,0x53000000,
+ 0x1d000000,0x51000000,0x84000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbd000000,0x8c000000,0x51000000,
+ 0x1c000000,0x51000000,0x86000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb8000000,0x88000000,0x4d000000,
+ 0x1a000000,0x4e000000,0x87000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb2000000,0x7f000000,0x45000000,
+ 0x16000000,0x41000000,0x79000000,0x92000000,0xa0000000,0xae000000,0xba000000,0xbf000000,0xbf000000,0xbd000000,0xb4000000,0x9e000000,0x6a000000,0x39000000,
+ 0xd000000,0x26000000,0x4b000000,0x64000000,0x76000000,0x85000000,0x90000000,0x95000000,0x95000000,0x91000000,0x86000000,0x6e000000,0x49000000,0x2a000000
+};
+
+static const QRgb newfolder_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xff000000,0xffe9d4b5,0xffffffd4,0xffffffd4,0xffffffd4,0xffffffd4,0xffd4a764,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,0xffffff,0xffffff,
+ 0xff000000,0xffe9d4b5,0xffd4a764,0xffd4a764,0xffd4a764,0xffd4a764,0xffd4a764,0xffd3a664,0xffd3a664,0xffd3a664,0xffd3a664,0xff000000,0xffc49a6f,0xffffff,
+ 0xff000000,0xffe9d4b5,0xffd4a764,0xffd4a764,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xffe9d4b5,0xffd4a764,0xff000000,0xffffffff,0xfffefefe,0xfff7f7f7,0xffdadada,0xffb4b4b4,0xffafafaf,0xffd1d1d1,0xffededed,0xfff7f7f7,0xff000000,
+ 0xff000000,0xffe9d4b5,0xffb06e2f,0xff505042,0xfffdfdd1,0xfff7f7cd,0xffe1e1bb,0xffa1a186,0xff78ff78,0xff78ff78,0xff93937a,0xffccccaa,0xff48483c,0x8782826b,
+ 0xff000000,0xffe9d4b5,0xff000000,0xfffefefe,0xfff8f8ce,0xffdadab6,0xffa1a186,0xff5a5a4b,0xff78ff78,0xff78ff78,0xff4a4a3e,0xff84846e,0xff000000,0x6b000000,
+ 0xff000000,0xffb06e2f,0xff505042,0xfffefed3,0xfff1f1c8,0xffb3b394,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xe4313129,0x67000000,
+ 0xff000000,0xffd4a764,0xffffffff,0xfffefed3,0xffefefc7,0xffaeae91,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xff78ff78,0xc6000000,0x4d000000,
+ 0xff000000,0xffffffff,0xffffffd4,0xfffefed3,0xfff4f4cb,0xffd1d1ad,0xff93937a,0xff4a4a3e,0xff78ff78,0xff78ff78,0xff0f0f0d,0xee20201b,0x99000000,0x37000000,
+ 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff78ff78,0xff78ff78,0xff000000,0xb0000000,0x5f000000,0x28000000,
+ 0xffffff,0x17000000,0x43000000,0x57000000,0x59000000,0x5e000000,0x6c000000,0x8c000000,0xac000000,0xb5000000,0x99000000,0x5f000000,0x34000000,0x19000000
+};
+
+static const QRgb next_data[] = {
+ 0x1000000,0x3000000,0x8000000,0xf000000,0x16000000,0x1b000000,0x1d000000,0x1c000000,0x19000000,0x16000000,0x12000000,0xf000000,0xb000000,0x8000000,
+ 0x3000000,0xa000000,0x15000000,0x30000000,0x5c171717,0x6c141414,0x59000000,0x48000000,0x41000000,0x45000000,0x44000000,0x30000000,0x1b000000,0x12000000,
+ 0x8000000,0x15000000,0x36000000,0x7d121212,0xebc3c3c3,0xffffffff,0xc9595959,0x95000000,0x8d000000,0xb14e4e4e,0xd7b7b7b7,0x68000000,0x34000000,0x22000000,
+ 0xe000000,0x2e000000,0x7c121212,0xefbdbdbd,0xffffffff,0xffffffff,0xffffffff,0xf04d4d4d,0xea3e3e3e,0xffffffff,0xffffffff,0x9f000000,0x55000000,0x37000000,
+ 0x14000000,0x55000000,0xeac1c1c1,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffdfdfd,0xffffffff,0xffffffff,0xffffffff,0xca000000,0x79000000,0x4d000000,
+ 0x19000000,0x65000000,0xffffffff,0xffffffff,0xffefefef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xec000000,0x9a000000,0x5f000000,
+ 0x1b000000,0x55000000,0xc0494949,0xfee8e8e8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb2000000,0x6d000000,
+ 0x1a000000,0x44000000,0x8f000000,0xec3d3d3d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc2000000,0x76000000,
+ 0x17000000,0x3e000000,0x86000000,0xe63f3f3f,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc2000000,0x75000000,
+ 0x14000000,0x41000000,0xab505050,0xfde6e6e6,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb3000000,0x6c000000,
+ 0x11000000,0x3e000000,0xc9a8a8a8,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xed000000,0x9b000000,0x5d000000,
+ 0xe000000,0x2d000000,0x63000000,0x9b000000,0xc6000000,0xea000000,0xff000000,0xff000000,0xff000000,0xff000000,0xed000000,0xbc000000,0x7a000000,0x49000000,
+ 0xa000000,0x1a000000,0x32000000,0x52000000,0x76000000,0x97000000,0xb0000000,0xc1000000,0xc1000000,0xb3000000,0x9b000000,0x7a000000,0x52000000,0x31000000,
+ 0x7000000,0x11000000,0x20000000,0x35000000,0x4b000000,0x5e000000,0x6c000000,0x75000000,0x74000000,0x6c000000,0x5d000000,0x49000000,0x31000000,0x1d000000
+};
+
+static const unsigned char oneoverx_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+static const QRgb oneoverx_ctable[] = {
+ 0xc6c6c6,0xff000000
+};
+
+static const unsigned char pass_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
+ 0x00,0x00,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,
+ 0x01,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x02,0x02,0x01,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,
+ 0x01,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,
+ 0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x01,
+ 0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x02,
+ 0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x01,
+ 0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
+ 0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,
+ 0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00
+};
+
+static const QRgb pass_ctable[] = {
+ 0xc6c6c6,0xff000000,0xffffff00
+};
+
+static const QRgb paste_data[] = {
+ 0xffffff,0x0,0x0,0x0,0x38000000,0xff000000,0xff000000,0xff000000,0x57000000,0x0,0x0,0x0,0x0,0x9d9d9d,
+ 0xffffff,0x0,0x8b000000,0xaa000000,0xc41f1f1f,0xffa5a5a5,0xffb9b9b9,0xffaeaeae,0xcd313131,0xa9000000,0x9e000000,0x0,0x0,0x363738,
+ 0xffffff,0x8e000000,0xe3383838,0xff777777,0xff282828,0xffc5c5c5,0xffc4c4c4,0xffcbcbcb,0xff3b3b3b,0xff606060,0xe22e2e2e,0xb0000000,0x30240f,0x33250d,
+ 0xffffff,0xac000000,0xfc939393,0xfe8f8f8f,0xff656565,0xff686868,0xff5e5e5e,0xff5c5c5c,0xff585959,0xff6f6f6d,0xfb49494a,0xda000000,0x392b12,0x47371d,
+ 0xffffff,0xa7000000,0xff909090,0xff7f7f7f,0xff7b7b7b,0xff51504e,0xff1b1a1a,0xff42413f,0xff332f2a,0xff7c7566,0xff46433d,0xd4000000,0x382a12,0x45361b,
+ 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff42423f,0xff82807c,0xffffffff,0xffd6c8b1,0xfffdfbf6,0xffa19a8e,0xd81b1405,0x36280f,0x46371d,
+ 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff434340,0xff7b7a77,0xfffffff6,0xffb0a38b,0xffece9e4,0xffffffff,0xf0a69f90,0x7137270c,0x33c2e14,
+ 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff454341,0xff7b7a75,0xfffffef3,0xffac9d85,0xfff1eeeb,0xffffffff,0xffffffff,0xfaada79d,0x6a42351d,
+ 0xffffff,0xa7000000,0xff8f8f8f,0xff7f7f7f,0xff7a7a7a,0xff454341,0xff7a7772,0xfffffcf1,0xffc2b59f,0xffb6ab99,0xffbaaf9f,0xffcdc3b1,0xffb5aea3,0xb21e170d,
+ 0xffffff,0xa7000000,0xff8f8f8f,0xff808080,0xff7a7979,0xff41403e,0xff76736d,0xfffdf5ea,0xffe2d8c6,0xffd0c2ab,0xffcdbea8,0xfeddd0b9,0xffa59e93,0xb6000000,
+ 0xffffff,0xa7000000,0xff919191,0xff818182,0xff7b7a7a,0xff454341,0xff746e65,0xfff1e7d6,0xffdfd5c4,0xffe0d5c3,0xffddd2be,0xfceadecc,0xf2b5afa7,0xbf000000,
+ 0xffffff,0xb1000000,0xf97a7a7a,0xfe7a7a7a,0xff747474,0xff41403f,0xff787165,0xfff5e8d2,0xffded2bd,0xffddd0bb,0xffdaceb8,0xfceaddc9,0xf1b8b1a5,0xb3000000,
+ 0xffffff,0x79000000,0xe6161616,0xff353535,0xff303030,0xff0d0f10,0xff4b4740,0xffa89f8f,0xff9a9182,0xff9a9081,0xff9c9384,0xffa89f8f,0xff7b7871,0xb10a0805,
+ 0xffffff,0x0,0x6e000000,0x85000000,0x85000000,0x90241e12,0xa9453e33,0xbd393429,0xb82a251b,0xae2b271b,0xae2d281d,0xac2f291f,0xae272016,0x682e2310
+};
+
+static const QRgb paste_inactive_data[] = {
+ 0xffffff,0x0,0x0,0x0,0x1c000000,0x7f000000,0x7f000000,0x7f000000,0x2b000000,0x0,0x0,0x0,0x0,0x9d9d9d,
+ 0xffffff,0x0,0x45000000,0x55000000,0x621f1f1f,0x7fa5a5a5,0x7fb9b9b9,0x7faeaeae,0x66313131,0x54000000,0x4f000000,0x0,0x0,0x363738,
+ 0xffffff,0x47000000,0x71383838,0x7f777777,0x7f282828,0x7fc5c5c5,0x7fc4c4c4,0x7fcbcbcb,0x7f3b3b3b,0x7f606060,0x712e2e2e,0x58000000,0x30240f,0x33250d,
+ 0xffffff,0x56000000,0x7e939393,0x7f8f8f8f,0x7f656565,0x7f686868,0x7f5e5e5e,0x7f5c5c5c,0x7f585858,0x7f6e6e6e,0x7d494949,0x6d000000,0x392b12,0x47371d,
+ 0xffffff,0x53000000,0x7f909090,0x7f7f7f7f,0x7f7b7b7b,0x7f4f4f4f,0x7f1a1a1a,0x7f404040,0x7f2e2e2e,0x7f717171,0x7f414141,0x6a000000,0x382a12,0x45361b,
+ 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f404040,0x7f7f7f7f,0x7fffffff,0x7fc4c4c4,0x7ff9f9f9,0x7f989898,0x6c101010,0x36280f,0x46371d,
+ 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f414141,0x7f797979,0x7ffafafa,0x7f9d9d9d,0x7fe8e8e8,0x7fffffff,0x789b9b9b,0x38232323,0x1292929,
+ 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f424242,0x7f787878,0x7ff9f9f9,0x7f999999,0x7feeeeee,0x7fffffff,0x7fffffff,0x7da5a5a5,0x35303030,
+ 0xffffff,0x53000000,0x7f8f8f8f,0x7f7f7f7f,0x7f7a7a7a,0x7f424242,0x7f767676,0x7ff8f8f8,0x7fb0b0b0,0x7fa7a7a7,0x7fadadad,0x7fbfbfbf,0x7facacac,0x59161616,
+ 0xffffff,0x53000000,0x7f8f8f8f,0x7f808080,0x7f797979,0x7f3f3f3f,0x7f717171,0x7ff3f3f3,0x7fd4d4d4,0x7fbdbdbd,0x7fbbbbbb,0x7fcbcbcb,0x7f9c9c9c,0x5b000000,
+ 0xffffff,0x53000000,0x7f919191,0x7f818181,0x7f7a7a7a,0x7f424242,0x7f6c6c6c,0x7fe3e3e3,0x7fd1d1d1,0x7fd1d1d1,0x7fcecece,0x7edbdbdb,0x79adadad,0x5f000000,
+ 0xffffff,0x58000000,0x7c7a7a7a,0x7f7a7a7a,0x7f747474,0x7f404040,0x7f6e6e6e,0x7fe3e3e3,0x7fcecece,0x7fcbcbcb,0x7fc9c9c9,0x7ed9d9d9,0x78aeaeae,0x59000000,
+ 0xffffff,0x3c000000,0x73161616,0x7f353535,0x7f303030,0x7f0f0f0f,0x7f464646,0x7f9b9b9b,0x7f8e8e8e,0x7f8d8d8d,0x7f909090,0x7f9b9b9b,0x7f767676,0x58060606,
+ 0xffffff,0x0,0x37000000,0x42000000,0x42000000,0x481b1b1b,0x543c3c3c,0x5e313131,0x5c232323,0x57232323,0x57242424,0x56272727,0x571e1e1e,0x341f1f1f
+};
+
+static const unsigned char pixmap_data[] = {
+ 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x0b,0x0b,
+ 0x0b,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x0b,
+ 0x11,0x0c,0x0c,0x0b,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x0b,0x07,0x0c,0x11,0x0c,0x0b,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x0b,0x07,0x0c,0x00,0x00,0x0b,0x03,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
+ 0x03,0x03,0x0b,0x07,0x0c,0x00,0x00,0x0b,0x03,0x03,0x0b,0x10,0x10,0x12,
+ 0x12,0x0b,0x03,0x03,0x0b,0x11,0x00,0x00,0x0b,0x03,0x03,0x03,0x0b,0x10,
+ 0x10,0x12,0x12,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x03,0x03,0x03,0x03,
+ 0x0b,0x07,0x07,0x00,0x0c,0x00,0x00,0x0b,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x0b,0x0b,0x0b,0x03,0x03,
+ 0x03,0x03,0x03,0x03,0x0b,0x08,0x08,0x0e,0x0d,0x0e,0x0e,0x09,0x09,0x0b,
+ 0x03,0x03,0x03,0x03,0x03,0x03,0x0b,0x0e,0x0e,0x0e,0x0d,0x0e,0x0e,0x09,
+ 0x09,0x0b,0x0b,0x0b,0x03,0x03,0x03,0x03,0x0b,0x04,0x04,0x0a,0x06,0x0a,
+ 0x0a,0x01,0x01,0x01,0x01,0x0b,0x03,0x03,0x03,0x03,0x0b,0x0a,0x0a,0x0a,
+ 0x06,0x0a,0x0a,0x01,0x01,0x01,0x01,0x0b,0x03,0x03,0x03,0x03,0x0b,0x13,
+ 0x13,0x02,0x0f,0x02,0x02,0x05,0x02,0x05,0x05,0x0b,0x03,0x03,0x03,0x03,
+ 0x0b,0x13,0x13,0x02,0x0f,0x02,0x02,0x05,0x02,0x05,0x05,0x0b,0x03,0x03,
+ 0x03,0x03,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,
+ 0x03,0x03,0x03,0x03
+};
+
+static const QRgb pixmap_ctable[] = {
+ 0xffff8000,0xff008000,0xff0000c0,0xc6c6c6,0xffc0ffc0,0xff000080,0xff00ff00,0xffffdca8,0xffffffc0,0xff808000,0xff00c000,0xff000000,0xffffa858,0xffffff00,
+ 0xffc0c000,0xff0000ff,0xffffc0c0,0xffc05800,0xffff0000,0xffc0c0ff
+};
+
+static const QRgb play_data[] = {
+ 0xc6000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xc6000000,
+ 0xff000000,0xffdddddd,0xffe6e6e6,0xffe2e2e2,0xffd7d7d7,0xffd4d4d4,0xffd3d3d3,0xffd3d3d3,0xffcccccc,0xffbababa,0xffa2a2a2,0xff818181,0xff525252,0xff000000,
+ 0xff000000,0xffd1d1d1,0xffdddddd,0xffcacaca,0xffa7a7a7,0xffafafaf,0xffc3c3c3,0xffc8c8c8,0xffbdbdbd,0xffa4a4a4,0xff818181,0xff525252,0xff3c3c3c,0xff000000,
+ 0xff000000,0xffbebebe,0xffcbcbcb,0xffaaaaaa,0xff686868,0xffb8b8b8,0xff979797,0xffaeaeae,0xffa6a6a6,0xff828282,0xff585858,0xff3d3d3d,0xff313131,0xff000000,
+ 0xff000000,0xffa9a9a9,0xffb3b3b3,0xff909090,0xff3f3f3f,0xffffffff,0xffadadad,0xff7b7b7b,0xff7e7e7e,0xff5a5a5a,0xff3e3e3e,0xff343434,0xff292929,0xff000000,
+ 0xff000000,0xff919191,0xff969696,0xff747474,0xff2b2b2b,0xffffffff,0xffffffff,0xffa3a3a3,0xff424242,0xff3c3c3c,0xff343434,0xff2a2a2a,0xff222222,0xff000000,
+ 0xff000000,0xff868686,0xff848484,0xff646464,0xff242424,0xffffffff,0xffffffff,0xffffffff,0xff9e9e9e,0xff343434,0xff2e2e2e,0xff252525,0xff1e1e1e,0xff000000,
+ 0xff000000,0xff868686,0xff848484,0xff646464,0xff242424,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffa2a2a2,0xff2e2e2e,0xff252525,0xff1e1e1e,0xff000000,
+ 0xff000000,0xff7a7a7a,0xff727272,0xff515151,0xff1d1d1d,0xffffffff,0xffffffff,0xffffffff,0xffa3a3a3,0xff313131,0xff292929,0xff222222,0xff1b1b1b,0xff000000,
+ 0xff000000,0xff5b5b5b,0xff474747,0xff343434,0xff1d1d1d,0xffffffff,0xffffffff,0xff9e9e9e,0xff2b2b2b,0xff242424,0xff1f1f1f,0xff1a1a1a,0xff161616,0xff000000,
+ 0xff000000,0xff414141,0xff3b3b3b,0xff2d2d2d,0xff222222,0xffffffff,0xff999999,0xff202020,0xff1e1e1e,0xff191919,0xff161616,0xff161616,0xff161616,0xff000000,
+ 0xff000000,0xff383838,0xff2f2f2f,0xff252525,0xff1d1d1d,0xff969696,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff000000,
+ 0xff000000,0xff2f2f2f,0xff232323,0xff191919,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff161616,0xff000000,
+ 0xc6000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xc6000000
+};
+
+static const QRgb play2_data[] = {
+ 0xffffff,0x3000000,0x8000000,0x11000000,0x1a000000,0x1b000000,0x16000000,0x12000000,0xd000000,0x8000000,0x2000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0x6000000,0xf000000,0x33000000,0x86898989,0x57000000,0x38000000,0x2a000000,0x1f000000,0x14000000,0x8000000,0x2000000,0xffffff,0xffffff,
+ 0xffffff,0x9000000,0x19000000,0x5f000000,0xffffffff,0xdca2a2a2,0x7f000000,0x56000000,0x3e000000,0x2a000000,0x14000000,0x8000000,0x2000000,0xffffff,
+ 0xffffff,0xd000000,0x24000000,0x7a000000,0xffffffff,0xffffffff,0xe99a9a9a,0xa0000000,0x72000000,0x4d000000,0x2b000000,0x14000000,0x8000000,0x2000000,
+ 0xffffff,0x10000000,0x2e000000,0x88000000,0xffffffff,0xffffffff,0xffffffff,0xf2969696,0xb8000000,0x7d000000,0x47000000,0x24000000,0xf000000,0x5000000,
+ 0xffffff,0x12000000,0x35000000,0x94000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf7939393,0xb7000000,0x69000000,0x35000000,0x17000000,0x7000000,
+ 0xffffff,0x14000000,0x3a000000,0x9b000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xec999999,0x84000000,0x43000000,0x1e000000,0xa000000,
+ 0xffffff,0x14000000,0x3c000000,0x9e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff8f8f8f,0xdb000000,0x88000000,0x49000000,0x22000000,0xb000000,
+ 0xffffff,0x14000000,0x3a000000,0x9b000000,0xffffffff,0xffffffff,0xffffffff,0xff8f8f8f,0xfd000000,0xc4000000,0x7a000000,0x43000000,0x1e000000,0xa000000,
+ 0xffffff,0x12000000,0x35000000,0x94000000,0xffffffff,0xffffffff,0xfe909090,0xf9000000,0xd7000000,0xa2000000,0x63000000,0x35000000,0x17000000,0x7000000,
+ 0xffffff,0x10000000,0x2e000000,0x7f000000,0xffffffff,0xf0979797,0xd5000000,0xc2000000,0xa3000000,0x78000000,0x47000000,0x24000000,0xf000000,0x5000000,
+ 0xffffff,0xd000000,0x24000000,0x57000000,0xa8727272,0x9c000000,0x94000000,0x85000000,0x6d000000,0x4d000000,0x2b000000,0x14000000,0x8000000,0x2000000,
+ 0xffffff,0x9000000,0x19000000,0x2f000000,0x48000000,0x5a000000,0x5a000000,0x50000000,0x3e000000,0x2a000000,0x14000000,0x8000000,0x2000000,0xffffff,
+ 0xffffff,0x6000000,0xf000000,0x1a000000,0x25000000,0x31000000,0x31000000,0x2a000000,0x1f000000,0x14000000,0x8000000,0x2000000,0xffffff,0xffffff
+};
+
+static const QRgb programs_data[] = {
+ 0x0,0x0,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x0,0x6000000,0x0,0xb2b2b2,0x0,0xf9e07c,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0xf9e07c,
+ 0x0,0xff000000,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff000000,0x0,0xf9e07c,
+ 0x0,0xff000000,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff0000db,0xff000000,0x0,0x0,
+ 0x1000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xdb,0x0,
+ 0x0,0xff000000,0xffffffff,0xff5743cc,0xffffffff,0xffd1aa10,0xffdd3ee0,0xffffffff,0xff5743cc,0xff49cccc,0xffffffff,0xff000000,0xdb,0x0,
+ 0x0,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffffff,0x0,
+ 0x0,0xff000000,0xffffffff,0xffdd3ee0,0xffffffff,0xff3fdb80,0xff49cccc,0xffffffff,0xff9740d6,0xffdd3ee0,0xffffffff,0xff000000,0xffffff,0x0,
+ 0x1000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffffff,0x0,
+ 0x1b000000,0xff000000,0xffffffff,0xffadcc47,0xffffffff,0xff49cccc,0xff9740d6,0xffffffff,0xffcc4b85,0xffd1aa10,0xffffffff,0xff000000,0xffffff,0x0,
+ 0x0,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xffffff,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,0x0,
+ 0x0,0x7000000,0x2000000,0xd000000,0x15000000,0x15000000,0x15000000,0x13000000,0x17000000,0x17000000,0x17000000,0x17000000,0xffffff,0x0,
+ 0x0,0xa8a8a8,0xb2b2b2,0xb2b2b2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0
+};
+
+static const QRgb quit_icon_data[] = {
+ 0xffffff,0xffffff,0xffffff,0x55e8a5a5,0xa2e79e9e,0xdbe68f8f,0xfbe67d7d,0xdedc5f5f,0xabcd3f3f,0x65b61e1e,0xf000000,0x4000000,0xffffff,0xffffff,
+ 0xffffff,0x18e8acac,0x8febb0b0,0xfcf1b4b4,0xffeeaaaa,0xffea9292,0xffe67979,0xffe05a5a,0xffdd4242,0xfdd61a1a,0xaca40000,0x365b0000,0x9000000,0x1000000,
+ 0xffffff,0x8febb0b0,0xfff1b5b5,0xfff9e2e2,0xfffbeaea,0xffe98f8f,0xffe46f6f,0xffe05959,0xfff7d3d3,0xffecadad,0xffb40000,0xb8810000,0x2a000000,0x9000000,
+ 0x55e8a5a5,0xfcf1b4b4,0xfff9e2e2,0xffffffff,0xffffffff,0xfff9e2e2,0xffe36c6c,0xfff7d7d7,0xffffffff,0xffffffff,0xffddacac,0xfe931313,0x944f0000,0x22000000,
+ 0xa2e79e9e,0xffeeaaaa,0xfffbeaea,0xffffffff,0xffffffff,0xffffffff,0xfffdf6f6,0xffffffff,0xffffffff,0xffffffff,0xffe8cece,0xff801616,0xd5520000,0x48000000,
+ 0xdbe68f8f,0xffea9292,0xffe98f8f,0xfff9e2e2,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffeacece,0xff861616,0xff630000,0xf24a0000,0x69000000,
+ 0xfbe67d7d,0xffe67979,0xffe46f6f,0xffe36c6c,0xfffdf6f6,0xffffffff,0xffffffff,0xffffffff,0xfffcf4f4,0xff9a2525,0xff6a0000,0xff4b0000,0xfe420000,0x7e000000,
+ 0xdedc5f5f,0xffe05a5a,0xffe05959,0xfff7d7d7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe2cece,0xff5a1616,0xff430000,0xf43d0000,0x87000000,
+ 0xabcd3f3f,0xffdb3636,0xfff5cbcb,0xffffffff,0xffffffff,0xffffffff,0xfffcf4f4,0xffffffff,0xffffffff,0xffffffff,0xffd1c5c5,0xff430000,0xe3310000,0x7e000000,
+ 0x65b61e1e,0xfdd40c0c,0xffdf7171,0xffffffff,0xffffffff,0xffeacfcf,0xff9a2828,0xffe3cfcf,0xffffffff,0xffffffff,0xff8f7171,0xfe430000,0xc7200000,0x69000000,
+ 0xf000000,0xaca40000,0xffb40000,0xffc77272,0xffe3c5c5,0xff871717,0xff6a0000,0xff5b1717,0xffd1c5c5,0xff907272,0xff430000,0xdf2e0000,0x93000000,0x48000000,
+ 0x4000000,0x365b0000,0xb8810000,0xfe8d0000,0xff790000,0xff630000,0xff4b0000,0xff430000,0xff430000,0xfe430000,0xdf2e0000,0xa70d0000,0x62000000,0x22000000,
+ 0xffffff,0x9000000,0x2a000000,0x944f0000,0xd5520000,0xf24a0000,0xfe420000,0xf43d0000,0xe3310000,0xc7200000,0x93000000,0x62000000,0x2a000000,0x9000000,
+ 0xffffff,0x1000000,0x9000000,0x22000000,0x48000000,0x69000000,0x7e000000,0x87000000,0x7e000000,0x69000000,0x48000000,0x22000000,0x9000000,0x1000000
+};
+
+static const QRgb repeat_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0xff000000,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0xff000000,0x0,
+ 0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,
+ 0x0,0xff000000,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0
+};
+
+static const unsigned char reset_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x01,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x01,
+ 0x01,0x02,0x02,0x01,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x01,0x00,0x01,
+ 0x01,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,
+ 0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x01,0x01,0x01,
+ 0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
+ 0x00,0x01,0x01,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x02,
+ 0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00
+};
+
+static const QRgb reset_ctable[] = {
+ 0xc6c6c6,0xff000000,0xffff0000
+};
+
+static const QRgb right_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const QRgb rotate_data[] = {
+ 0xb000000,0x16000000,0x26000000,0x3f000000,0x5d000000,0x75000000,0x84000000,0x84000000,0x75000000,0x5d000000,0x3f000000,0x26000000,0x16000000,0xb000000,
+ 0x18000000,0x2e000000,0x55000000,0x98414141,0xd9949494,0xf5c8c8c8,0xfdefefef,0xfdefefef,0xf5c8c8c8,0xda939393,0x99404040,0x56000000,0x2e000000,0x18000000,
+ 0x2d000000,0x5b000000,0xb5626262,0xf4c3c3c3,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf4c3c3c3,0xb6626262,0x5c000000,0x2e000000,
+ 0x4c000000,0xa13e3e3e,0xf5c2c2c2,0xffffffff,0xfee8e8e8,0xf8a2a2a2,0xf25e5e5e,0xf35e5e5e,0xfaa1a1a1,0xffe7e7e7,0xffffffff,0xf6c1c1c1,0xa53d3d3d,0x50000000,
+ 0x70000000,0xe0909090,0xffffffff,0xfee8e8e8,0xf0666666,0xdc000000,0xd9000000,0xde000000,0xeb000000,0xfcb6b6b6,0xffe7e7e7,0xffffffff,0xe38e8e8e,0x77000000,
+ 0x8e000000,0xf7c7c7c7,0xffffffff,0xf8a2a2a2,0xd5000000,0xc1000000,0xb9000000,0xc2000000,0xdc000000,0xf4000000,0xffd0d0d0,0xffffffff,0xf9c5c5c5,0x9e000000,
+ 0xa1000000,0xfeeeeeee,0xffffffff,0xee5f5f5f,0xc1000000,0xa4000000,0x97000000,0xa5000000,0xe69c9c9c,0xfbcbcbcb,0xfff2f2f2,0xffe4e4e4,0xfde6e6e6,0xd7a5a5a5,
+ 0xa8000000,0xfeeeeeee,0xffffffff,0xec606060,0xb5000000,0x8e000000,0x7a000000,0x84000000,0xb1000000,0xf0979797,0xfdcbcbcb,0xfee5e5e5,0xee989898,0x9c000000,
+ 0xa2000000,0xfac5c5c5,0xffffffff,0xf7a3a3a3,0xbd000000,0x8e000000,0x74000000,0x74000000,0x90000000,0xbd000000,0xed999999,0xec999999,0xb2000000,0x76000000,
+ 0x90000000,0xeb8b8b8b,0xffffffff,0xfee8e8e8,0xe8696969,0xb3000000,0x95000000,0x8a000000,0x94000000,0xac000000,0xbe000000,0xb2000000,0x89000000,0x5a000000,
+ 0x77000000,0xc5353535,0xfabfbfbf,0xffffffff,0xfee8e8e8,0xf4a4a4a4,0xdf646464,0xd5686868,0xc2000000,0xe59c9c9c,0xe39e9e9e,0xd3a7a7a7,0x70000000,0x43000000,
+ 0x5c000000,0x94000000,0xd8545454,0xfabfbfbf,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0c5c5c5,0xaf656565,0x5a000000,0x32000000,
+ 0x42000000,0x6b000000,0x9c000000,0xce333333,0xef888888,0xfbc4c4c4,0xfeeeeeee,0xfeeeeeee,0xf8c6c6c6,0xe48d8d8d,0xac3b3b3b,0x6b000000,0x3d000000,0x22000000,
+ 0x2b000000,0x48000000,0x6a000000,0x8e000000,0xac000000,0xbf000000,0xc5000000,0xbf000000,0xac000000,0x90000000,0x6a000000,0x45000000,0x29000000,0x16000000
+};
+
+static const QRgb start_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xff000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xfffcfcfc,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xff000000,0xffffff,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xfff8f8f8,0xff000000,0xff000000,0xff000000,0xff000000,0x24000000,0xc000000,
+ 0xffffff,0xff000000,0x7a6c7375,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xfff5f5f5,0xff000000,0x6b000000,0x24000000,
+ 0xffffff,0xff000000,0xe0494e4f,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff6f6f6,0xfff6f6f6,0xffeeeeee,0xffd3d3d3,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xff000000,0x69666c6d,0xfd202323,0xfffcfcfc,0xfffcfcfc,0xfff4f4f4,0xffdddddd,0xffcccccc,0xffc9c9c9,0xffc9c9c9,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xff000000,0xd000000,0x83565b5c,0xfd202223,0xfff4f4f4,0xffededed,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,
+ 0xffffff,0xff000000,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffe8e8e8,0xffcbcbcb,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000,
+ 0xffffff,0xff000000,0xffffff,0x2000000,0x14000000,0x8852585a,0xfe202324,0xffd3d3d3,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000,
+ 0xffffff,0xff000000,0xffffff,0xffffff,0x2000000,0x14000000,0x8852585a,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x14000000,0x45000000,0x7b000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x10000000,0x26000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb stop_data[] = {
+ 0x7000000,0xf000000,0x18000000,0x25000000,0x2e000000,0x36000000,0x3b000000,0x3d000000,0x3b000000,0x36000000,0x2e000000,0x25000000,0x18000000,0xf000000,
+ 0xf000000,0x2e000000,0x5f000000,0x7f000000,0x8d000000,0x98000000,0x9e000000,0xa2000000,0x9e000000,0x98000000,0x81000000,0x57000000,0x31000000,0x1d000000,
+ 0x18000000,0x5f000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x98000000,0x52000000,0x31000000,
+ 0x25000000,0x7f000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xcd000000,0x7a000000,0x49000000,
+ 0x2e000000,0x8d000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x9b000000,0x5d000000,
+ 0x36000000,0x98000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb4000000,0x6c000000,
+ 0x3b000000,0x9e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc4000000,0x75000000,
+ 0x3d000000,0xa2000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xcc000000,0x7a000000,
+ 0x3b000000,0x9e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xc4000000,0x75000000,
+ 0x36000000,0x98000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xb4000000,0x6c000000,
+ 0x2e000000,0x81000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xee000000,0x9b000000,0x5d000000,
+ 0x25000000,0x57000000,0x98000000,0xcd000000,0xef000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xed000000,0xbd000000,0x7a000000,0x49000000,
+ 0x18000000,0x31000000,0x52000000,0x7a000000,0x9b000000,0xb3000000,0xc4000000,0xcc000000,0xc4000000,0xb3000000,0x9b000000,0x7a000000,0x52000000,0x31000000,
+ 0xf000000,0x1d000000,0x31000000,0x49000000,0x5d000000,0x6c000000,0x75000000,0x7a000000,0x75000000,0x6c000000,0x5d000000,0x49000000,0x31000000,0x1d000000
+};
+
+static const QRgb style_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0xffdcdcdc,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0xff000000,0xff000000,
+ 0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,
+ 0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,
+ 0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffdcdcdc,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const QRgb table_pattern_data[] = {
+ 0xff598076,0xff5c857b,0xff5c857b,0xff567b72,0xff51756c,0xff577e74,0xff5d867c,0xff598076,0xff52766d,0xff51756c,0xff5a8177,0xff5f897e,0xff598076,0xff50736a,
+ 0xff4f7269,0xff557b71,0xff5b847a,0xff5a8177,0xff588076,0xff54786f,0xff51756c,0xff577d73,0xff598076,0xff547970,0xff51746b,0xff53786e,0xff598076,0xff5d857b,
+ 0xff577d74,0xff52766d,0xff587e74,0xff5d867b,0xff5c847a,0xff598076,0xff587f75,0xff557b71,0xff547a71,0xff587f75,0xff5a8278,0xff598177,0xff587f75,0xff587f75,
+ 0xff598076,0xff5b8278,0xff598076,0xff587f75,0xff5f887d,0xff608b80,0xff567c73,0xff547970,0xff567c72,0xff577e74,0xff587f75,0xff5c857a,0xff608b80,0xff608b80,
+ 0xff5e887e,0xff5c857a,0xff5a8278,0xff5a8177,0xff598076,0xff598076,0xff5b8379,0xff5a8278,0xff51746b,0xff51746b,0xff557a71,0xff587f75,0xff5a8177,0xff5d867c,
+ 0xff608b80,0xff5d877c,0xff597f76,0xff577d74,0xff598076,0xff598076,0xff587f75,0xff577d74,0xff557a71,0xff53776e,0xff567c72,0xff567c72,0xff587f75,0xff5c847a,
+ 0xff5c857b,0xff5f897e,0xff5f897e,0xff577c73,0xff4f726a,0xff53776e,0xff598076,0xff587f75,0xff577e74,0xff587f75,0xff587e74,0xff577d73,0xff5d867b,0xff598076,
+ 0xff5a8278,0xff608a7f,0xff608a80,0xff608a7f,0xff5a8278,0xff50736b,0xff50736a,0xff598076,0xff5f897e,0xff5a8178,0xff557b71,0xff598076,0xff5e877c,0xff5f897e,
+ 0xff5a8278,0xff557b71,0xff5a8278,0xff608b80,0xff5e877d,0xff577d74,0xff50746b,0xff50736a,0xff567d73,0xff5e887d,0xff608b80,0xff587f75,0xff53776e,0xff598076,
+ 0xff618b80,0xff5f8a7f,0xff53776e,0xff51756c,0xff598076,0xff5f887e,0xff598076,0xff50736a,0xff50736b,0xff567d73,0xff5a8177,0xff5c847a,0xff5b8379,0xff547a70,
+ 0xff51746b,0xff587f75,0xff5e877d,0xff598076,0xff51746b,0xff52766d,0xff587f75,0xff5d857b,0xff587e75,0xff53786e,0xff598076,0xff5e887d,0xff5c847a,0xff598076,
+ 0xff587f75,0xff53786f,0xff52766c,0xff587e74,0xff598076,0xff547970,0xff587e74,0xff577e75,0xff598076,0xff5a8278,0xff598076,0xff598076,0xff5e887e,0xff608b80,
+ 0xff5b8379,0xff587f75,0xff577e74,0xff567b72,0xff557b72,0xff598076,0xff598177,0xff598076,0xff5e887e,0xff5c857a,0xff5a8278,0xff598076,0xff587f75,0xff587f75,
+ 0xff598177,0xff587f75,0xff547a71,0xff53786f,0xff567b72,0xff587f75,0xff5b8278,0xff5e887d,0xff618b80,0xff608a7f,0xff598177,0xff587e74,0xff598076,0xff598076,
+ 0xff587f75,0xff577d74,0xff557a71,0xff53776e,0xff51746b,0xff52756c,0xff557b72,0xff5b8379,0xff608b80,0xff638e83,0xff608b80,0xff5d867c,0xff50736b,0xff52766d,
+ 0xff587f75,0xff587f75,0xff577e74,0xff587f75,0xff598076,0xff598076,0xff577e74,0xff577e74,0xff598076,0xff5f887e,0xff638e83,0xff5e887e,0xff5a8177,0xff547a71,
+ 0xff4f7269,0xff587e74,0xff5e887d,0xff5a8278,0xff557b72,0xff598076,0xff5e887e,0xff608a80,0xff5d867b,0xff587f75,0xff5b8278,0xff618c81,0xff608a7f,0xff598177,
+ 0xff547970,0xff4f7169,0xff557b71,0xff5e877d,0xff618c81,0xff598076,0xff53776e,0xff587f75,0xff608a80,0xff5f897e,0xff587f75,0xff547970,0xff5a8278,0xff608b80,
+ 0xff5c857b,0xff547970,0xff4f7169,0xff50726a
+};
+
+static const unsigned char tgz_data[] = {
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x04,0x01,0x01,0x01,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x06,0x02,0x01,0x04,0x05,0x04,0x05,
+ 0x04,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x06,0x06,0x02,0x01,0x05,0x05,
+ 0x05,0x05,0x05,0x04,0x05,0x04,0x01,0x01,0x02,0x06,0x06,0x06,0x01,0x04,
+ 0x05,0x05,0x05,0x05,0x04,0x05,0x04,0x05,0x04,0x01,0x03,0x03,0x03,0x03,
+ 0x01,0x04,0x05,0x05,0x05,0x04,0x05,0x04,0x04,0x04,0x04,0x01,0x02,0x02,
+ 0x02,0x01,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x04,0x04,0x01,
+ 0x02,0x02,0x02,0x01,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04,
+ 0x00,0x01,0x02,0x02,0x01,0x05,0x04,0x05,0x04,0x05,0x04,0x05,0x04,0x05,
+ 0x04,0x04,0x01,0x02,0x02,0x01,0x04,0x04,0x05,0x04,0x04,0x04,0x05,0x04,
+ 0x04,0x04,0x04,0x04,0x01,0x02,0x01,0x04,0x04,0x04,0x04,0x05,0x04,0x05,
+ 0x04,0x05,0x04,0x05,0x04,0x04,0x01,0x02,0x01,0x00,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x05,0x04,0x04,0x04,0x04,0x00,0x01,0x02,0x02,0x01,0x01,0x00,
+ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x02,0x02,
+ 0x02,0x01,0x01,0x01,0x00,0x04,0x04,0x04,0x04,0x04,0x06,0x06,0x06,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x04,0x00,0x06,0x06,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,
+ 0x06,0x02,0x02,0x02
+};
+
+static const QRgb tgz_ctable[] = {
+ 0xffc0c000,0xff000000,0xc6c6c6,0xff800000,0xffffffc0,0xffffffff,0xffff0000
+};
+
+static const QRgb toys_data[] = {
+ 0xffffff,0xffffff,0xcccc33,0x0,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x990099,0x663399,0x0,0x0,
+ 0xffffff,0xccff33,0x996666,0x996666,0xff0000,0xffff0000,0xffcc9966,0xff66cccc,0xff6666cc,0xffffff,0xffffff,0xffffff,0x9966cc,0xffffff,
+ 0xcccc33,0x0,0x0,0xffff0000,0xfff4b0b0,0xffffffff,0xff00cc00,0xff00cc00,0xff6666cc,0xff6666cc,0xff6666cc,0xffffff,0xffffff,0x660099,
+ 0xffff33,0x0,0xffff0000,0xfff4b0b0,0xffffffff,0xffffffff,0xffb8efb8,0xff00cc00,0xff66cc99,0xff6666cc,0xff6666cc,0xff6666cc,0xffffff,0x663366,
+ 0x0,0x0,0xffff0000,0xfff4b0b0,0xffffffff,0xffffffff,0xffb8efb8,0xff00cc00,0xff00cc00,0xff6666cc,0xff6666cc,0xff6666cc,0xffffff,0xffffff,
+ 0x0,0xffff0000,0xffff0000,0xffff0000,0xffffffff,0xffb8efb8,0xff00cc00,0xff33cc00,0xff00cc00,0xff66cc99,0xff6666cc,0xff6666cc,0xff3366cc,0xffffff,
+ 0x0,0xff996666,0xffff0000,0xffff0000,0xffcc9966,0xff00cc00,0xff33cc00,0xff00cc00,0xff00cc00,0xff66cccc,0xff6666cc,0xff6666cc,0xff3366cc,0xffffff,
+ 0x0,0xff996666,0xffff0000,0xffff0000,0xffcc9966,0xff33cc00,0xff00cc00,0xff00cc00,0xff00cc00,0xff66cc99,0xff6666cc,0xff6666cc,0xff333366,0x333366,
+ 0x0,0xff996666,0xff996666,0xffff0000,0xffcc9966,0xff00cc00,0xff00cc00,0xff00cc00,0xff00cc00,0xff66cccc,0xff6666cc,0xff6666cc,0xff336666,0x0,
+ 0x0,0xff663333,0xff996666,0xffff0000,0xffff0000,0xff00cc00,0xff33cc00,0xff00cc00,0xff00cc00,0xff6666cc,0xff6666cc,0xff6666cc,0xff000000,0x0,
+ 0xffff33,0x333333,0xff663333,0xff996666,0xffff0000,0xffcc6666,0xff00cc00,0xff00cc00,0xff66cccc,0xff6666cc,0xff6666cc,0xff663366,0x663366,0x660099,
+ 0xcccc33,0x0,0xff000000,0xff663333,0xff996666,0xff996666,0xff497a49,0xff497a49,0xff6666cc,0xff6666cc,0xff663366,0xff000000,0x0,0x663366,
+ 0x0,0xffff33,0x0,0x0,0xff000000,0xff663333,0xff663333,0xff663366,0xff663366,0xff663366,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0x0,0x0,0xcccc33,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000
+};
+
+static const unsigned char trash_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x01,0x04,0x01,0x01,0x01,
+ 0x01,0x00,0x00,0x00,0x00,0x01,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x01,
+ 0x06,0x06,0x03,0x01,0x00,0x00,0x00,0x01,0x02,0x03,0x06,0x05,0x05,0x05,
+ 0x06,0x06,0x04,0x04,0x04,0x01,0x00,0x00,0x00,0x00,0x01,0x07,0x02,0x02,
+ 0x03,0x03,0x03,0x03,0x07,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
+ 0x03,0x03,0x07,0x07,0x04,0x04,0x07,0x08,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09,0x07,0x07,
+ 0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03,0x02,0x09,
+ 0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x03,
+ 0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,
+ 0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x02,0x05,0x03,0x02,0x09,0x07,0x07,0x04,0x08,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x07,0x01,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00
+};
+
+static const QRgb trash_ctable[] = {
+ 0xc6c6c6,0xff000000,0xffdcdcdc,0xffa0a0a4,0xff585858,0xffffffff,0xffc0c0c0,0xff808080,0xff303030,0xffa0a0a0
+};
+
+static const unsigned char txt_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x01,0x01,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x15,0x0d,0x15,0x0d,
+ 0x15,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0d,0x0d,
+ 0x0d,0x0d,0x0d,0x15,0x0d,0x15,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x15,
+ 0x0d,0x0d,0x0d,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x01,0x00,0x00,0x00,0x00,
+ 0x01,0x15,0x0d,0x0d,0x0d,0x15,0x0d,0x15,0x15,0x15,0x15,0x01,0x00,0x00,
+ 0x00,0x01,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x15,0x15,0x01,
+ 0x00,0x00,0x00,0x01,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x15,
+ 0x08,0x01,0x00,0x00,0x01,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,0x15,0x0d,
+ 0x15,0x15,0x01,0x00,0x00,0x01,0x15,0x15,0x0d,0x15,0x15,0x15,0x0d,0x15,
+ 0x15,0x15,0x15,0x15,0x01,0x00,0x01,0x15,0x15,0x15,0x15,0x0d,0x15,0x0d,
+ 0x15,0x0d,0x15,0x0d,0x15,0x15,0x01,0x00,0x01,0x08,0x15,0x15,0x15,0x15,
+ 0x15,0x15,0x0d,0x15,0x15,0x15,0x15,0x08,0x01,0x00,0x00,0x01,0x01,0x08,
+ 0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x01,0x01,0x08,0x15,0x15,0x15,0x15,0x15,0x08,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x08,0x15,0x08,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,
+ 0x00,0x00,0x00,0x00
+};
+
+static const QRgb txt_ctable[] = {
+ 0xc6c6c6,0xff000000,0xffc3c3c3,0xff303030,0xffc0c0ff,0xffff0000,0xff008080,0xff800000,0xffc0c000,0xff0000c0,0xff808080,0xffc0ffc0,0xff00ffff,0xffffffff,
+ 0xffa0a0a0,0xff00ff00,0xffffff00,0xffffc0ff,0xff404000,0xff00c000,0xff000080,0xffffffc0,0xff400000,0xffc05800,0xff800080,0xff008000,0xff00c0c0,0xffdcdcdc,
+ 0xffff8000,0xffffc0c0,0xff585858,0xffc00000,0xffffdca8,0xff808000,0xffffa858,0xff004000,0xffc000c0,0xff0000ff,0xffff00ff,0xffc0ffff,0xff004040
+};
+
+static const QRgb underline_data[] = {
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,
+ 0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,
+ 0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0xff000000,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0xff000000,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,0x0,0x0,
+ 0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,
+ 0xff000000,0x0,0x0,0x0,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0
+};
+
+static const QRgb uninstall_data[] = {
+ 0xff,0xff3300,0xff,0xff3300,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfff80000,0xfff80000,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfff80000,0xfff80000,0xff,
+ 0xff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff,
+ 0xff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff,
+ 0xff,0xff,0xff,0xfff80000,0xfff80000,0xfff80000,0xffffffff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xffff,0xff,0xffff,
+ 0xff,0xffff,0xff0000ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff0000ff,0xff,0xff,
+ 0xff,0xff,0xff0000ff,0xff00b6ff,0xffffffff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xffff,
+ 0xff,0xffff,0xff0000ff,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff0000ff,0xff,0xff,
+ 0xff,0xff,0xff0000ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff0000ff,0xff,0xffff,
+ 0xff,0xffff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff,0xff,
+ 0xff,0xff,0xfff80000,0xfff80000,0xfff80000,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xff00b6ff,0xfff80000,0xfff80000,0xfff80000,0xff,0xffff,
+ 0xff,0xfff80000,0xfff80000,0xfff80000,0xff,0xff0000ff,0xff0000ff,0xff0000ff,0xff0000ff,0xffff,0xfff80000,0xfff80000,0xfff80000,0xff,
+ 0xff,0xfff80000,0xfff80000,0xff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xfff80000,0xfff80000,0xffff,
+ 0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xffff,0xff,0xff,0xff,0xff
+};
+
+static const unsigned char uninstalled_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,
+ 0x02,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x02,0x02,
+ 0x02,0x03,0x02,0x02,0x02,0x02,0x04,0x03,0x04,0x00,0x00,0x00,0x00,0x02,
+ 0x05,0x02,0x03,0x02,0x05,0x02,0x05,0x04,0x04,0x03,0x04,0x00,0x00,0x00,
+ 0x00,0x05,0x05,0x05,0x03,0x05,0x05,0x05,0x05,0x05,0x04,0x03,0x03,0x00,
+ 0x00,0x00,0x00,0x05,0x05,0x05,0x03,0x05,0x05,0x05,0x05,0x04,0x04,0x03,
+ 0x04,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x03,0x05,0x05,0x05,0x05,0x05,
+ 0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,0x03,0x05,
+ 0x05,0x05,0x05,0x05,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,0x05,
+ 0x03,0x05,0x05,0x05,0x05,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+static const QRgb uninstalled_ctable[] = {
+ 0x40ffffff,0xfff8fcf8,0xfff8b490,0xffb04400,0xfff80000,0xfff86c00
+};
+
+static const QRgb up_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x5d707779,0xe0494e4f,0x84666d6e,0xe000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x5d707779,0xfc202323,0xffffffff,0xfd202323,0x9b595f61,0x18000000,0x3000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0x5d707779,0xfc202323,0xffffffff,0xffffffff,0xfffcfcfc,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x5d707779,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xfffcfcfc,0xfff4f4f4,0xfe202324,0xa0575c5d,0x18000000,0x3000000,0xffffff,
+ 0xffffff,0x5d707779,0xfc202323,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4,0xffededed,0xffe8e8e8,0xfe202324,0xa0575c5d,0x18000000,0x3000000,
+ 0xffffff,0xff000000,0xffffffff,0xfffcfcfc,0xfff8f8f8,0xfffefefe,0xfff6f6f6,0xffdddddd,0xffcccccc,0xffcbcbcb,0xffd3d3d3,0xff000000,0x49000000,0x13000000,
+ 0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xfff6f6f6,0xffcccccc,0xff000000,0xff000000,0xff000000,0xff000000,0x7c000000,0x27000000,
+ 0xffffff,0x24000000,0x6b000000,0x8f000000,0xff000000,0xffffffff,0xffeeeeee,0xffc9c9c9,0xff000000,0xb3000000,0x9b000000,0x8f000000,0x6b000000,0x24000000,
+ 0xffffff,0xc000000,0x24000000,0x30000000,0xff000000,0xfff5f5f5,0xffd3d3d3,0xffc9c9c9,0xff000000,0x9b000000,0x54000000,0x30000000,0x24000000,0xc000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x8f000000,0x30000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0x24000000,0x6b000000,0x8f000000,0x8f000000,0x8f000000,0x6b000000,0x24000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x30000000,0x30000000,0x30000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0x1000000,0x1000000,0x2000000,0x2000000,0x3000000,0x1000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb volume_data[] = {
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xff000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xff000000,0x6b000000,0x24000000,0xff000000,0x18000000,0xc000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0x8f000000,0x30000000,0x18000000,0xff000000,0x30000000,0xc000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x8f000000,0xff000000,0x24000000,0x3c000000,0xff000000,0x30000000,
+ 0xff000000,0xffd5eaff,0xffd6eaff,0xffd6eaff,0xffd5e9ff,0xffd6e9ff,0xffd6e9ff,0xff000000,0x8f000000,0x48000000,0xff000000,0x3c000000,0xff000000,0x54000000,
+ 0xff000000,0xff9dceff,0xff9dceff,0xff9dceff,0xff9dceff,0xff9dcdff,0xff9dcdff,0xff000000,0x8f000000,0x3c000000,0xff000000,0x54000000,0xff000000,0x60000000,
+ 0xff000000,0xff60b0ff,0xff60b1ff,0xff60b0ff,0xff61b1ff,0xff60b1ff,0xff60b1ff,0xff000000,0x8f000000,0x30000000,0xff000000,0x60000000,0xff000000,0x60000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff2a9aff,0xff2a9aff,0xff2a9aff,0xff000000,0x8f000000,0xff000000,0x3c000000,0x54000000,0xff000000,0x60000000,
+ 0x24000000,0x6b000000,0x8f000000,0x8f000000,0xff000000,0xff2a9aff,0xff2a9aff,0xff000000,0x8f000000,0x48000000,0x3c000000,0xff000000,0x48000000,0x54000000,
+ 0xc000000,0x24000000,0x30000000,0x30000000,0x48000000,0xff000000,0xff2a9aff,0xff000000,0x8f000000,0x3c000000,0xff000000,0x3c000000,0x48000000,0x30000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0xff000000,0xff000000,0x8f000000,0x30000000,0x18000000,0x3c000000,0x30000000,0xc000000,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x3c000000,0x77000000,0x6b000000,0x24000000,0xc000000,0x18000000,0xc000000,0xffffff,
+ 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xc000000,0x24000000,0x24000000,0xc000000,0xffffff,0xffffff,0xffffff,0xffffff
+};
+
+static const QRgb wait_data[] = {
+ 0x1000000,0x1d000000,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0x28000000,0xb000000,0x5000000,
+ 0x3000000,0x15000000,0x33000000,0xff888888,0xff8e8e8e,0xff949494,0xff9b9b9b,0xffa1a1a1,0xffa6a6a6,0xffababab,0x4b000000,0x29000000,0x12000000,0x9000000,
+ 0x4000000,0xc000000,0x19000000,0xff9a9a9a,0xffa1a1a1,0xffa6a6a6,0xffadadad,0xffb3b3b3,0xffb7b7b7,0xffbbbbbb,0x41000000,0x2b000000,0x19000000,0xc000000,
+ 0x4000000,0xe000000,0x1d000000,0xff888888,0xff8b8b8b,0xff8e8e8e,0xff919191,0xff929292,0xff949494,0xff929292,0x4d000000,0x32000000,0x1d000000,0xe000000,
+ 0x4000000,0xe000000,0x1e000000,0xcc515151,0xff7a7a7a,0xff7b7b7b,0xff7c7c7c,0xff7c7c7c,0xff7b7b7b,0xda4d4d4d,0x51000000,0x34000000,0x1e000000,0xe000000,
+ 0x4000000,0xc000000,0x1b000000,0x31000000,0xd24e4e4e,0xff7a7a7a,0xff7a7a7a,0xff7a7a7a,0xde4b4b4b,0x6a000000,0x4f000000,0x31000000,0x1b000000,0xc000000,
+ 0x2000000,0xa000000,0x17000000,0x2c000000,0x48000000,0xd74f4f4f,0xff838383,0xde4e4e4e,0x78000000,0x63000000,0x48000000,0x2c000000,0x17000000,0xa000000,
+ 0x2000000,0x7000000,0x13000000,0x28000000,0x41000000,0xd5595959,0xffa1a1a1,0xdc5b5b5b,0x70000000,0x5b000000,0x41000000,0x28000000,0x13000000,0x7000000,
+ 0x2000000,0x7000000,0x13000000,0x28000000,0xce636363,0xffadadad,0xffb6b6b6,0xffbdbdbd,0xdb6f6f6f,0x5b000000,0x41000000,0x28000000,0x13000000,0x7000000,
+ 0x2000000,0xa000000,0x17000000,0xca646464,0xffababab,0xffaeaeae,0xffadadad,0xffc2c2c2,0xffc7c7c7,0xd87b7b7b,0x48000000,0x2c000000,0x17000000,0xa000000,
+ 0x4000000,0xc000000,0x1b000000,0xffa3a3a3,0xffababab,0xffa4a4a4,0xff909090,0xffc2c2c2,0xffc8c8c8,0xffcecece,0x4f000000,0x31000000,0x1b000000,0xc000000,
+ 0x4000000,0xe000000,0x1e000000,0xffa0a0a0,0xff999999,0xff848484,0xff7b7b7b,0xff888888,0xff8e8e8e,0xff8d8d8d,0x51000000,0x34000000,0x1e000000,0xe000000,
+ 0x4000000,0x19000000,0x3d000000,0xff707070,0xff696969,0xff656565,0xff656565,0xff656565,0xff656565,0xff656565,0x66000000,0x3c000000,0x1d000000,0xe000000,
+ 0x4000000,0x23000000,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0xffa77843,0x3f000000,0x19000000,0xc000000
+};
+
+static const QRgb week_data[] = {
+ 0xe000000,0x18000000,0x23000000,0x2e000000,0x35000000,0x39000000,0x3b000000,0x3b000000,0x3b000000,0x39000000,0x35000000,0x2e000000,0x23000000,0x18000000,
+ 0x18000000,0xff7a7fbb,0xff6b71b3,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff5d64ad,0xff454ca2,0xff0d1986,0x3d000000,0x2a000000,
+ 0x24000000,0xff6b71b3,0xff4a51a4,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff303999,0xff0d1a8b,0xff0a146c,0x5a000000,0x3e000000,
+ 0x2e000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe5e5e5,0xffaeaeae,0x74000000,0x50000000,
+ 0x35000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffffffff,0xff000000,0xff000000,0xffe5e5e5,0xffaeaeae,0x86000000,0x5c000000,
+ 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000,
+ 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000,
+ 0x3c000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x96000000,0x67000000,
+ 0x3b000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x95000000,0x66000000,
+ 0x39000000,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffffffff,0xff000000,0xffffffff,0xffe5e5e5,0xffaeaeae,0x90000000,0x63000000,
+ 0x35000000,0xffffffff,0xfffdfdfd,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffd1d1d1,0xffa4a4a4,0x86000000,0x5c000000,
+ 0x2e000000,0xfff5f5f5,0xffc4c4c4,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffaeaeae,0xffa4a4a4,0xff969696,0x74000000,0x50000000,
+ 0x24000000,0x3e000000,0x5a000000,0x74000000,0x86000000,0x90000000,0x95000000,0x96000000,0x95000000,0x90000000,0x86000000,0x74000000,0x5a000000,0x3e000000,
+ 0x18000000,0x2a000000,0x3d000000,0x4f000000,0x5c000000,0x63000000,0x66000000,0x67000000,0x66000000,0x63000000,0x5c000000,0x4f000000,0x3d000000,0x2a000000
+};
+
+static const QRgb wordgame_data[] = {
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xffffff,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffaaaaaa,0xff727272,0xffaaaaaa,0xff8e8e8e,0xff555555,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffaaaaaa,0xff555555,0xffffffff,0xffffffff,0xffffffff,0xffaaaaaa,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xff555555,0xffaaaaaa,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xff555555,0xffaaaaaa,0xffffffff,0xffffffff,0xff8e8e8e,0xff555555,0xff8e8e8e,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xff727272,0xff8e8e8e,0xffffffff,0xffffffff,0xffffffff,0xff555555,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffe3e3e3,0xff555555,0xffc7c7c7,0xffffffff,0xffc7c7c7,0xff1d1d1d,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffe3e3e3,0xff727272,0xff8e8e8e,0xff8e8e8e,0xffc7c7c7,0xffffffff,0xff737373,0xffb6b6b6,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff747474,0xff525252,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc7c7c7,0xff909090,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000
+};
+
+static const unsigned char wordgame_shapes_data[] = {
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x06,0x06,0x06,0x06,0x06,0x06,0x06,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,
+ 0x03,0x07,0x07,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x01,0x04,0x04,0x08,0x08,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x01,0x05,0x05,0x07,0x07,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x01,0x06,0x06,0x08,0x08,0x06,0x06,0x06,0x06,0x06,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x07,0x03,
+ 0x03,0x07,0x03,0x03,0x07,0x03,0x03,0x03,0x07,0x03,0x03,0x03,0x01,0x04,
+ 0x08,0x04,0x04,0x08,0x04,0x04,0x08,0x04,0x04,0x04,0x08,0x04,0x04,0x04,
+ 0x01,0x05,0x07,0x05,0x05,0x07,0x05,0x05,0x07,0x05,0x05,0x05,0x07,0x05,
+ 0x05,0x05,0x01,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x06,0x06,
+ 0x08,0x06,0x06,0x06,0x01,0x05,0x05,0x08,0x08,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x08,0x08,0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x03,0x03,0x03,0x07,
+ 0x03,0x03,0x03,0x07,0x03,0x07,0x03,0x03,0x03,0x03,0x01,0x04,0x04,0x04,
+ 0x08,0x04,0x04,0x04,0x04,0x08,0x04,0x08,0x04,0x04,0x04,0x04,0x01,0x05,
+ 0x05,0x05,0x05,0x07,0x05,0x05,0x05,0x07,0x05,0x07,0x05,0x05,0x05,0x05,
+ 0x01,0x06,0x06,0x06,0x08,0x06,0x06,0x06,0x06,0x08,0x06,0x08,0x06,0x06,
+ 0x06,0x06,0x01,0x05,0x05,0x08,0x08,0x08,0x05,0x05,0x05,0x05,0x05,0x08,
+ 0x08,0x08,0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x03,0x03,0x07,0x03,0x03,0x03,
+ 0x03,0x03,0x07,0x03,0x03,0x03,0x03,0x03,0x01,0x04,0x04,0x04,0x04,0x08,
+ 0x04,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x04,0x01,0x05,0x05,0x05,
+ 0x07,0x05,0x05,0x05,0x05,0x05,0x07,0x05,0x05,0x05,0x05,0x05,0x01,0x06,
+ 0x06,0x06,0x06,0x08,0x06,0x06,0x06,0x06,0x08,0x06,0x06,0x06,0x06,0x06,
+ 0x01,0x05,0x05,0x05,0x08,0x08,0x08,0x05,0x05,0x05,0x08,0x08,0x08,0x05,
+ 0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x01,0x03,0x03,0x07,0x03,0x03,0x03,0x03,0x03,0x07,
+ 0x03,0x07,0x03,0x03,0x03,0x03,0x01,0x04,0x08,0x04,0x04,0x08,0x04,0x04,
+ 0x04,0x08,0x04,0x08,0x04,0x04,0x04,0x04,0x01,0x05,0x05,0x07,0x05,0x05,
+ 0x05,0x05,0x05,0x07,0x05,0x07,0x05,0x05,0x05,0x05,0x01,0x06,0x08,0x06,
+ 0x06,0x08,0x06,0x06,0x06,0x08,0x06,0x08,0x06,0x06,0x06,0x06,0x01,0x05,
+ 0x05,0x05,0x05,0x08,0x08,0x08,0x05,0x08,0x08,0x08,0x05,0x05,0x05,0x05,
+ 0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x01,0x03,0x07,0x07,0x07,0x07,0x03,0x03,0x07,0x03,0x03,0x03,
+ 0x07,0x03,0x03,0x03,0x01,0x04,0x04,0x08,0x08,0x04,0x04,0x04,0x08,0x04,
+ 0x04,0x04,0x08,0x04,0x04,0x04,0x01,0x05,0x07,0x07,0x07,0x07,0x05,0x05,
+ 0x07,0x05,0x05,0x05,0x07,0x05,0x05,0x05,0x01,0x06,0x06,0x08,0x08,0x06,
+ 0x06,0x06,0x08,0x06,0x06,0x06,0x08,0x06,0x06,0x06,0x01,0x05,0x05,0x05,
+ 0x05,0x05,0x08,0x08,0x08,0x08,0x08,0x05,0x05,0x05,0x05,0x05,0x01,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x06,0x06,0x06,0x06,0x06,0x06,0x06,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x08,0x08,0x08,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,
+ 0x03,0x07,0x07,0x03,0x03,0x07,0x03,0x03,0x07,0x03,0x07,0x07,0x07,0x03,
+ 0x01,0x04,0x04,0x08,0x08,0x04,0x04,0x08,0x04,0x04,0x08,0x04,0x08,0x08,
+ 0x08,0x04,0x01,0x05,0x05,0x05,0x07,0x07,0x05,0x05,0x07,0x05,0x05,0x05,
+ 0x07,0x05,0x05,0x05,0x01,0x06,0x06,0x06,0x08,0x08,0x06,0x06,0x08,0x06,
+ 0x06,0x06,0x08,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x05,0x08,0x08,
+ 0x08,0x08,0x08,0x05,0x05,0x05,0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x07,0x03,
+ 0x03,0x07,0x03,0x07,0x07,0x03,0x07,0x03,0x07,0x03,0x03,0x03,0x01,0x04,
+ 0x08,0x04,0x04,0x08,0x04,0x08,0x08,0x04,0x08,0x04,0x08,0x04,0x04,0x04,
+ 0x01,0x05,0x05,0x07,0x05,0x05,0x07,0x05,0x07,0x05,0x05,0x05,0x07,0x05,
+ 0x05,0x05,0x01,0x06,0x06,0x08,0x06,0x06,0x08,0x06,0x08,0x06,0x06,0x06,
+ 0x08,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x08,0x08,0x08,0x05,0x08,
+ 0x08,0x08,0x05,0x05,0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x07,0x03,0x03,0x07,
+ 0x03,0x07,0x03,0x07,0x07,0x03,0x07,0x07,0x03,0x03,0x01,0x04,0x08,0x04,
+ 0x04,0x08,0x04,0x08,0x04,0x08,0x08,0x04,0x08,0x08,0x04,0x04,0x01,0x05,
+ 0x05,0x07,0x07,0x07,0x07,0x05,0x07,0x05,0x05,0x05,0x07,0x05,0x05,0x05,
+ 0x01,0x06,0x06,0x08,0x08,0x08,0x08,0x06,0x08,0x06,0x06,0x06,0x08,0x06,
+ 0x06,0x06,0x01,0x05,0x05,0x05,0x08,0x08,0x08,0x05,0x05,0x05,0x08,0x08,
+ 0x08,0x05,0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x07,0x03,0x03,0x07,0x03,0x07,
+ 0x03,0x03,0x07,0x03,0x07,0x03,0x03,0x03,0x01,0x04,0x08,0x04,0x04,0x08,
+ 0x04,0x08,0x04,0x04,0x08,0x04,0x08,0x04,0x04,0x04,0x01,0x05,0x05,0x07,
+ 0x05,0x05,0x07,0x05,0x07,0x05,0x05,0x05,0x07,0x05,0x05,0x05,0x01,0x06,
+ 0x06,0x08,0x06,0x06,0x08,0x06,0x08,0x06,0x06,0x06,0x08,0x06,0x06,0x06,
+ 0x01,0x05,0x05,0x08,0x08,0x08,0x05,0x05,0x05,0x05,0x05,0x08,0x08,0x08,
+ 0x05,0x05,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x02,0x02,0x01,0x03,0x07,0x03,0x03,0x07,0x03,0x07,0x03,0x03,
+ 0x07,0x03,0x07,0x03,0x03,0x03,0x01,0x04,0x08,0x04,0x04,0x08,0x04,0x08,
+ 0x04,0x04,0x08,0x04,0x08,0x04,0x04,0x04,0x01,0x05,0x05,0x07,0x05,0x05,
+ 0x07,0x05,0x07,0x05,0x05,0x05,0x07,0x05,0x05,0x05,0x01,0x06,0x06,0x08,
+ 0x06,0x06,0x08,0x06,0x08,0x06,0x06,0x06,0x08,0x06,0x06,0x06,0x01,0x05,
+ 0x05,0x08,0x08,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x08,0x08,0x05,0x05,
+ 0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x02,0x02,0x01,0x03,0x03,0x07,0x07,0x03,0x03,0x07,0x03,0x03,0x07,0x03,
+ 0x07,0x07,0x07,0x03,0x01,0x04,0x04,0x08,0x08,0x04,0x04,0x08,0x04,0x04,
+ 0x08,0x04,0x08,0x08,0x08,0x04,0x01,0x05,0x05,0x07,0x05,0x05,0x07,0x05,
+ 0x07,0x07,0x07,0x05,0x07,0x07,0x07,0x05,0x01,0x06,0x06,0x08,0x06,0x06,
+ 0x08,0x06,0x08,0x08,0x08,0x06,0x08,0x08,0x08,0x06,0x01,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x02,
+ 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
+ 0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x01,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,
+ 0x04,0x04,0x04,0x04,0x01,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x05,0x05,0x01,0x06,0x06,0x06,0x06,0x06,0x06,0x06,
+ 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x01,0x05,0x05,0x05,0x05,0x05,
+ 0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05
+};
+
+static const QRgb wordgame_shapes_ctable[] = {
+ 0xc6c6c6,0xff005e5e,0xff007f7f,0xff00ffff,0xff0000ff,0xffffa100,0xffff0000,0xff000000,0xffffffff
+};
+
+static const unsigned char xtopowerofy_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x01,0x01,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+static const QRgb xtopowerofy_ctable[] = {
+ 0xc6c6c6,0xff000000
+};
+
+static const unsigned char ythrootofx_data[] = {
+ 0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,
+ 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+static const QRgb ythrootofx_ctable[] = {
+ 0xc6c6c6,0xff000000
+};
+
+static const unsigned char zoom_data[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x04,
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x00,0x00,0x00,0x00,0x03,
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,
+ 0x03,0x03,0x03,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x03,0x04,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x03,
+ 0x03,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x03,0x03,0x03,0x03,0x04,
+ 0x05,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x05,0x05,0x04,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,
+ 0x01,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x01,0x02,0x04,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x05,
+ 0x01,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x05,0x01,0x02,0x04,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,
+ 0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+static const QRgb zoom_ctable[] = {
+ 0xc6c6c6,0xffffa858,0xffc05800,0xff00ffff,0xff000000,0xffffdca8,0xffffffff
+};
+
+static struct EmbedImage {
+ int width, height, depth;
+ const unsigned char *data;
+ int numColors;
+ const QRgb *colorTable;
+ bool alpha;
+ const char *name;
+} embed_image_vec[] = {
+ { 14, 14, 32, (const unsigned char*)_to1_data, 0, 0, TRUE, "1to1" },
+ { 32, 32, 32, (const unsigned char*)AddressBook_data, 0, 0, TRUE, "AddressBook" },
+ { 32, 32, 32, (const unsigned char*)Appearance_data, 0, 0, TRUE, "Appearance" },
+ { 14, 14, 32, (const unsigned char*)AppsIcon_data, 0, 0, TRUE, "AppsIcon" },
+ { 32, 32, 32, (const unsigned char*)Calculator_data, 0, 0, TRUE, "Calculator" },
+ { 32, 32, 32, (const unsigned char*)Calibrate_data, 0, 0, TRUE, "Calibrate" },
+ { 32, 32, 32, (const unsigned char*)CityTime_data, 0, 0, TRUE, "CityTime" },
+ { 32, 32, 32, (const unsigned char*)Clock_data, 0, 0, TRUE, "Clock" },
+ { 14, 14, 32, (const unsigned char*)CloseButton_data, 0, 0, TRUE, "CloseButton" },
+ { 32, 32, 32, (const unsigned char*)DateBook_data, 0, 0, TRUE, "DateBook" },
+ { 32, 32, 32, (const unsigned char*)DateTime_data, 0, 0, TRUE, "DateTime" },
+ { 14, 14, 32, (const unsigned char*)DocsIcon_data, 0, 0, TRUE, "DocsIcon" },
+ { 32, 32, 32, (const unsigned char*)DocumentTypeExcel_data, 0, 0, TRUE, "DocumentTypeExcel" },
+ { 32, 32, 32, (const unsigned char*)DocumentTypeNone_data, 0, 0, TRUE, "DocumentTypeNone" },
+ { 32, 32, 32, (const unsigned char*)DocumentTypePowerPoint_data, 0, 0, TRUE, "DocumentTypePowerPoint" },
+ { 32, 32, 32, (const unsigned char*)DocumentTypeWord_data, 0, 0, TRUE, "DocumentTypeWord" },
+ { 32, 32, 32, (const unsigned char*)FileBrowser_data, 0, 0, TRUE, "FileBrowser" },
+ { 14, 14, 32, (const unsigned char*)Games_data, 0, 0, TRUE, "Games" },
+ { 32, 32, 32, (const unsigned char*)Go_data, 0, 0, TRUE, "Go" },
+ { 12, 12, 32, (const unsigned char*)Go_black_data, 0, 0, TRUE, "Go-black" },
+ { 12, 12, 32, (const unsigned char*)Go_black_highlight_data, 0, 0, TRUE, "Go-black-highlight" },
+ { 12, 12, 32, (const unsigned char*)Go_white_data, 0, 0, TRUE, "Go-white" },
+ { 32, 32, 32, (const unsigned char*)HelpBrowser_data, 0, 0, TRUE, "HelpBrowser" },
+ { 14, 14, 32, (const unsigned char*)HelpButton_data, 0, 0, TRUE, "HelpButton" },
+ { 32, 32, 32, (const unsigned char*)ImageViewer_data, 0, 0, TRUE, "ImageViewer" },
+ { 32, 32, 32, (const unsigned char*)Ipkg_data, 0, 0, TRUE, "Ipkg" },
+ { 32, 32, 32, (const unsigned char*)Language_data, 0, 0, TRUE, "Language" },
+ { 32, 32, 32, (const unsigned char*)Light_data, 0, 0, TRUE, "Light" },
+ { 32, 32, 32, (const unsigned char*)MPEGPlayer_data, 0, 0, TRUE, "MPEGPlayer" },
+ { 32, 32, 32, (const unsigned char*)Mindbreaker_data, 0, 0, TRUE, "Mindbreaker" },
+ { 32, 32, 32, (const unsigned char*)MineHunt_data, 0, 0, TRUE, "MineHunt" },
+ { 32, 32, 32, (const unsigned char*)NetHack_data, 0, 0, TRUE, "NetHack" },
+ { 28, 14, 32, (const unsigned char*)OKButton_data, 0, 0, TRUE, "OKButton" },
+ { 32, 32, 32, (const unsigned char*)Opera_data, 0, 0, TRUE, "Opera" },
+ { 32, 32, 32, (const unsigned char*)PPPConnect_data, 0, 0, TRUE, "PPPConnect" },
+ { 32, 32, 32, (const unsigned char*)ParaShoot_data, 0, 0, TRUE, "ParaShoot" },
+ { 32, 32, 32, (const unsigned char*)Rotation_data, 0, 0, TRUE, "Rotation" },
+ { 14, 14, 32, (const unsigned char*)SettingsIcon_data, 0, 0, TRUE, "SettingsIcon" },
+ { 32, 32, 32, (const unsigned char*)Shutdown_data, 0, 0, TRUE, "Shutdown" },
+ { 32, 32, 32, (const unsigned char*)Snake_data, 0, 0, TRUE, "Snake" },
+ { 32, 32, 32, (const unsigned char*)Solitaire_data, 0, 0, TRUE, "Solitaire" },
+ { 32, 32, 32, (const unsigned char*)Sound_data, 0, 0, TRUE, "Sound" },
+ { 32, 32, 32, (const unsigned char*)SoundPlayer_data, 0, 0, TRUE, "SoundPlayer" },
+ { 32, 32, 32, (const unsigned char*)Spreadsheet_data, 0, 0, TRUE, "Spreadsheet" },
+ { 32, 32, 32, (const unsigned char*)SystemInfo_data, 0, 0, TRUE, "SystemInfo" },
+ { 32, 32, 32, (const unsigned char*)Terminal_data, 0, 0, TRUE, "Terminal" },
+ { 32, 32, 32, (const unsigned char*)Tetrix_data, 0, 0, TRUE, "Tetrix" },
+ { 32, 32, 32, (const unsigned char*)TextEditor_data, 0, 0, TRUE, "TextEditor" },
+ { 32, 32, 32, (const unsigned char*)TodoList_data, 0, 0, TRUE, "TodoList" },
+ { 32, 32, 32, (const unsigned char*)Tux_data, 0, 0, TRUE, "Tux" },
+ { 14, 14, 32, (const unsigned char*)UtilsIcon_data, 0, 0, TRUE, "UtilsIcon" },
+ { 32, 32, 32, (const unsigned char*)WordGame_data, 0, 0, TRUE, "WordGame" },
+ { 14, 14, 32, (const unsigned char*)accessories_data, 0, 0, TRUE, "accessories" },
+ { 16, 16, 32, (const unsigned char*)appearance_data, 0, 0, TRUE, "appearance" },
+ { 14, 14, 32, (const unsigned char*)back_data, 0, 0, TRUE, "back" },
+ { 14, 14, 32, (const unsigned char*)back_inactive_data, 0, 0, TRUE, "back_inactive" },
+ { 32, 32, 32, (const unsigned char*)background_data, 0, 0, TRUE, "background" },
+ { 14, 14, 32, (const unsigned char*)beam_data, 0, 0, TRUE, "beam" },
+ { 14, 14, 32, (const unsigned char*)bell_data, 0, 0, TRUE, "bell" },
+ { 32, 32, 8, (const unsigned char*)bg_data, 85, bg_ctable, FALSE, "bg" },
+ { 14, 14, 32, (const unsigned char*)binary_data, 0, 0, TRUE, "binary" },
+ { 16, 16, 32, (const unsigned char*)bold_data, 0, 0, TRUE, "bold" },
+ { 16, 16, 8, (const unsigned char*)c_src_data, 41, c_src_ctable, TRUE, "c_src" },
+ { 14, 14, 32, (const unsigned char*)calculator_data, 0, 0, TRUE, "calculator" },
+ { 16, 16, 32, (const unsigned char*)center_data, 0, 0, TRUE, "center" },
+ { 16, 16, 8, (const unsigned char*)citytime_icon_data, 14, citytime_icon_ctable, TRUE, "citytime_icon" },
+ { 14, 14, 32, (const unsigned char*)close_data, 0, 0, TRUE, "close" },
+ { 14, 14, 32, (const unsigned char*)copy_data, 0, 0, TRUE, "copy" },
+ { 14, 14, 32, (const unsigned char*)copy_inactive_data, 0, 0, TRUE, "copy_inactive" },
+ { 14, 14, 32, (const unsigned char*)cut_data, 0, 0, TRUE, "cut" },
+ { 14, 14, 32, (const unsigned char*)cut_inactive_data, 0, 0, TRUE, "cut_inactive" },
+ { 14, 14, 32, (const unsigned char*)datebook_icon_data, 0, 0, TRUE, "datebook_icon" },
+ { 14, 14, 32, (const unsigned char*)day_data, 0, 0, TRUE, "day" },
+ { 14, 14, 32, (const unsigned char*)done_data, 0, 0, TRUE, "done" },
+ { 14, 14, 32, (const unsigned char*)edit_data, 0, 0, TRUE, "edit" },
+ { 14, 14, 32, (const unsigned char*)editdelete_data, 0, 0, TRUE, "editdelete" },
+ { 14, 14, 32, (const unsigned char*)enter_data, 0, 0, TRUE, "enter" },
+ { 16, 16, 8, (const unsigned char*)exec_data, 11, exec_ctable, TRUE, "exec" },
+ { 32, 32, 8, (const unsigned char*)faded_bg_data, 40, faded_bg_ctable, TRUE, "faded_bg" },
+ { 14, 14, 32, (const unsigned char*)fastback_data, 0, 0, TRUE, "fastback" },
+ { 14, 14, 32, (const unsigned char*)fastforward_data, 0, 0, TRUE, "fastforward" },
+ { 14, 14, 32, (const unsigned char*)fileopen_data, 0, 0, TRUE, "fileopen" },
+ { 14, 14, 32, (const unsigned char*)find_data, 0, 0, TRUE, "find" },
+ { 14, 14, 32, (const unsigned char*)finish_data, 0, 0, TRUE, "finish" },
+ { 14, 14, 32, (const unsigned char*)folder_data, 0, 0, TRUE, "folder" },
+ { 16, 16, 8, (const unsigned char*)folder_open_data, 11, folder_open_ctable, TRUE, "folder_open" },
+ { 14, 14, 32, (const unsigned char*)forward_data, 0, 0, TRUE, "forward" },
+ { 14, 14, 32, (const unsigned char*)forward_inactive_data, 0, 0, TRUE, "forward_inactive" },
+ { 14, 14, 32, (const unsigned char*)fullscreen_data, 0, 0, TRUE, "fullscreen" },
+ { 19, 19, 32, (const unsigned char*)go_data, 0, 0, FALSE, "go" },
+ { 16, 16, 8, (const unsigned char*)h_src_data, 41, h_src_ctable, TRUE, "h_src" },
+ { 14, 14, 32, (const unsigned char*)help_icon_data, 0, 0, TRUE, "help_icon" },
+ { 14, 14, 32, (const unsigned char*)home_data, 0, 0, TRUE, "home" },
+ { 14, 14, 8, (const unsigned char*)install_data, 10, install_ctable, TRUE, "install" },
+ { 14, 14, 32, (const unsigned char*)installed_data, 0, 0, TRUE, "installed" },
+ { 16, 16, 32, (const unsigned char*)italic_data, 0, 0, TRUE, "italic" },
+ { 16, 16, 8, (const unsigned char*)konsole_data, 5, konsole_ctable, TRUE, "konsole" },
+ { 16, 16, 32, (const unsigned char*)language_data, 0, 0, TRUE, "language" },
+ { 32, 32, 32, (const unsigned char*)launching_data, 0, 0, TRUE, "launching" },
+ { 16, 16, 32, (const unsigned char*)left_data, 0, 0, TRUE, "left" },
+ { 14, 14, 32, (const unsigned char*)library_data, 0, 0, TRUE, "library" },
+ { 16, 16, 8, (const unsigned char*)locked_data, 8, locked_ctable, TRUE, "locked" },
+ { 16, 16, 8, (const unsigned char*)lockedfolder_data, 10, lockedfolder_ctable, TRUE, "lockedfolder" },
+ { 10, 10, 32, (const unsigned char*)mag_data, 0, 0, TRUE, "mag" },
+ { 14, 14, 32, (const unsigned char*)month_data, 0, 0, TRUE, "month" },
+ { 14, 14, 32, (const unsigned char*)mute_data, 0, 0, TRUE, "mute" },
+ { 14, 14, 32, (const unsigned char*)new_data, 0, 0, TRUE, "new" },
+ { 14, 14, 32, (const unsigned char*)newfolder_data, 0, 0, TRUE, "newfolder" },
+ { 14, 14, 32, (const unsigned char*)next_data, 0, 0, TRUE, "next" },
+ { 13, 11, 8, (const unsigned char*)oneoverx_data, 2, oneoverx_ctable, TRUE, "oneoverx" },
+ { 16, 14, 8, (const unsigned char*)pass_data, 3, pass_ctable, TRUE, "pass" },
+ { 14, 14, 32, (const unsigned char*)paste_data, 0, 0, TRUE, "paste" },
+ { 14, 14, 32, (const unsigned char*)paste_inactive_data, 0, 0, TRUE, "paste_inactive" },
+ { 16, 16, 8, (const unsigned char*)pixmap_data, 20, pixmap_ctable, TRUE, "pixmap" },
+ { 14, 14, 32, (const unsigned char*)play_data, 0, 0, TRUE, "play" },
+ { 14, 14, 32, (const unsigned char*)play2_data, 0, 0, TRUE, "play2" },
+ { 14, 14, 32, (const unsigned char*)programs_data, 0, 0, TRUE, "programs" },
+ { 14, 14, 32, (const unsigned char*)quit_icon_data, 0, 0, TRUE, "quit_icon" },
+ { 15, 15, 32, (const unsigned char*)repeat_data, 0, 0, TRUE, "repeat" },
+ { 14, 14, 8, (const unsigned char*)reset_data, 3, reset_ctable, TRUE, "reset" },
+ { 16, 16, 32, (const unsigned char*)right_data, 0, 0, TRUE, "right" },
+ { 14, 14, 32, (const unsigned char*)rotate_data, 0, 0, TRUE, "rotate" },
+ { 14, 14, 32, (const unsigned char*)start_data, 0, 0, TRUE, "start" },
+ { 14, 14, 32, (const unsigned char*)stop_data, 0, 0, TRUE, "stop" },
+ { 16, 16, 32, (const unsigned char*)style_data, 0, 0, TRUE, "style" },
+ { 16, 16, 32, (const unsigned char*)table_pattern_data, 0, 0, TRUE, "table_pattern" },
+ { 16, 16, 8, (const unsigned char*)tgz_data, 7, tgz_ctable, TRUE, "tgz" },
+ { 14, 14, 32, (const unsigned char*)toys_data, 0, 0, TRUE, "toys" },
+ { 16, 16, 8, (const unsigned char*)trash_data, 10, trash_ctable, TRUE, "trash" },
+ { 16, 16, 8, (const unsigned char*)txt_data, 41, txt_ctable, TRUE, "txt" },
+ { 16, 16, 32, (const unsigned char*)underline_data, 0, 0, TRUE, "underline" },
+ { 14, 14, 32, (const unsigned char*)uninstall_data, 0, 0, TRUE, "uninstall" },
+ { 14, 14, 8, (const unsigned char*)uninstalled_data, 6, uninstalled_ctable, TRUE, "uninstalled" },
+ { 14, 14, 32, (const unsigned char*)up_data, 0, 0, TRUE, "up" },
+ { 14, 14, 32, (const unsigned char*)volume_data, 0, 0, TRUE, "volume" },
+ { 14, 14, 32, (const unsigned char*)wait_data, 0, 0, TRUE, "wait" },
+ { 14, 14, 32, (const unsigned char*)week_data, 0, 0, TRUE, "week" },
+ { 14, 14, 32, (const unsigned char*)wordgame_data, 0, 0, TRUE, "wordgame" },
+ { 96, 16, 8, (const unsigned char*)wordgame_shapes_data, 9, wordgame_shapes_ctable, TRUE, "wordgame_shapes" },
+ { 9, 8, 8, (const unsigned char*)xtopowerofy_data, 2, xtopowerofy_ctable, TRUE, "xtopowerofy" },
+ { 13, 11, 8, (const unsigned char*)ythrootofx_data, 2, ythrootofx_ctable, TRUE, "ythrootofx" },
+ { 20, 20, 8, (const unsigned char*)zoom_data, 7, zoom_ctable, TRUE, "zoom" },
+};
+
+static int cmpEmbedImage(const void *a, const void *b)
+{
+ const EmbedImage* ea = (const EmbedImage*)a;
+ const EmbedImage* eb = (const EmbedImage*)b;
+ return strcmp(ea->name,eb->name);
+}
+inline const QImage& qembed_findImage(const char* name)
+{
+ EmbedImage key; key.name = name;
+ EmbedImage* r = (EmbedImage*)bsearch( &key, embed_image_vec,
+ sizeof(embed_image_vec)/sizeof(EmbedImage), sizeof(EmbedImage), cmpEmbedImage );
+ QImage* img;
+ if ( r ) {
+ img = new QImage((uchar*)r->data,
+ r->width,
+ r->height,
+ r->depth,
+#ifdef _WS_QWS_
+ (r->width*r->depth+31)/32*4,
+#endif
+ (QRgb*)r->colorTable,
+ r->numColors,
+ QImage::BigEndian
+ );
+ if ( r->alpha )
+ img->setAlphaBuffer(TRUE);
+ } else {
+ static QImage dummy;
+ img = &dummy;
+ }
+ return *img;
+}
+
+#endif
diff --git a/library/inputmethodinterface.h b/library/inputmethodinterface.h
new file mode 100644
index 0000000..ae14218
--- a/dev/null
+++ b/library/inputmethodinterface.h
@@ -0,0 +1,49 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef INPUTMETHODINTERFACE_H
+#define INPUTMETHODINTERFACE_H
+
+#include <qpe/qcom.h>
+
+#include <qnamespace.h>
+#include <qstring.h>
+
+#ifndef QT_NO_COMPONENT
+// {637A8A14-AF98-41DA-969A-2BD16ECDA8C7}
+# ifndef IID_InputMethod
+# define IID_InputMethod QUuid( 0x637a8a14, 0xaf98, 0x41da, 0x96, 0x9a, 0x2b, 0xd1, 0x6e, 0xcd, 0xa8, 0xc7)
+# endif
+#endif
+
+class QWidget;
+class QPixmap;
+class QObject;
+
+struct InputMethodInterface : public QUnknownInterface
+{
+ virtual QWidget *inputMethod( QWidget *parent, Qt::WFlags f ) = 0;
+ virtual void resetState() = 0;
+ virtual QPixmap *icon() = 0;
+ virtual QString name() = 0;
+ virtual void onKeyPress( QObject *receiver, const char *slot ) = 0;
+};
+
+#endif
diff --git a/library/ir.cpp b/library/ir.cpp
new file mode 100644
index 0000000..68345d1
--- a/dev/null
+++ b/library/ir.cpp
@@ -0,0 +1,79 @@
+#include "ir.h"
+
+#include <qstring.h>
+#include "qcopenvelope_qws.h"
+#include <qcopchannel_qws.h>
+#include "applnk.h"
+
+/*!
+ \class Ir ir.h
+ \brief The Ir class implements basic support for sending objects over an
+ infrared communication link.
+
+ The Ir class is a small helper class to enable sending of objects over an infrared communication link.
+*/
+
+/*!
+ Constructs an Ir object. The \a parent and \a name classes are the
+ standard QObject parameters.
+*/
+Ir::Ir( QObject *parent, const char *name )
+ : QObject( parent, name )
+{
+ ch = new QCopChannel( "QPE/Obex" );
+ connect( ch, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(obexMessage( const QCString &, const QByteArray &)) );
+}
+
+/*!
+ Returns TRUE if the system supports infrared communication.
+*/
+bool Ir::supported()
+{
+ return QCopChannel::isRegistered( "QPE/Obex" );
+}
+
+/*!
+ Send the object in the file \a fn over the infrared link.
+ The \a description will be shown to the user while
+ sending is in progress.
+ The optional \a mimetype parameter specifies the mimetype of the object. If this parameter is not
+ set, it will be determined by the extension of the filename.
+*/
+void Ir::send( const QString &fn, const QString &description, const QString &mimetype)
+{
+ if ( !filename.isEmpty() ) return;
+ filename = fn;
+ QCopEnvelope e("QPE/Obex", "send(QString,QString,QString)");
+ e << description << filename << mimetype;
+}
+
+/*!
+ \overload
+
+ Uses the DocLnk::file() and DocLnk::type() of \a doc.
+*/
+void Ir::send( const DocLnk &doc, const QString &description )
+{
+ send( doc.file(), description, doc.type() );
+}
+
+/*!
+ \fn Ir::done( Ir *ir );
+
+ This signal is emitted by \a ir, when the send comand has been processed.
+*/
+
+/*!\internal
+ */
+void Ir::obexMessage( const QCString &msg, const QByteArray &data)
+{
+ if ( msg == "done(QString)" ) {
+ QString fn;
+ QDataStream stream( data, IO_ReadOnly );
+ stream >> fn;
+ if ( fn == filename )
+ emit done( this );
+ }
+}
+
diff --git a/library/ir.h b/library/ir.h
new file mode 100644
index 0000000..33eedfe
--- a/dev/null
+++ b/library/ir.h
@@ -0,0 +1,31 @@
+#ifndef IR_H
+#define IR_H
+
+#include <qstring.h>
+#include <qobject.h>
+class DocLnk;
+class QCopChannel;
+
+class Ir : public QObject
+{
+ Q_OBJECT
+public:
+ static bool supported();
+
+ Ir( QObject *parent = 0, const char *name = 0);
+
+ void send( const QString &filename, const QString &description, const QString &mimetype = QString::null );
+ void send( const DocLnk &doc, const QString &description );
+
+signals:
+ void done( Ir * );
+
+private slots:
+ void obexMessage( const QCString &msg, const QByteArray &data);
+private:
+ QString filename;
+ QCopChannel *ch;
+};
+
+
+#endif
diff --git a/library/library.pro b/library/library.pro
new file mode 100644
index 0000000..06dfc8f
--- a/dev/null
+++ b/library/library.pro
@@ -0,0 +1,132 @@
+TEMPLATE = lib
+CONFIG += qt warn_on release
+HEADERS = calendar.h \
+ global.h \
+ resource.h \
+ xmlreader.h \
+ mimetype.h \
+ menubutton.h \
+ network.h \
+ networkinterface.h \
+ proxies.h \
+ filemanager.h \
+ fontmanager.h \
+ qdawg.h \
+ datebookmonth.h \
+ fileselector.h \
+ imageedit.h \
+ qcopenvelope_qws.h \
+ qpedecoration_qws.h \
+ qpeapplication.h \
+ qpestyle.h \
+ qpedialog.h \
+ lightstyle.h \
+ config.h \
+ applnk.h \
+ sound.h \
+ tzselect.h \
+ qmath.h \
+ datebookdb.h \
+ alarmserver.h \
+ process.h \
+ password.h \
+ timestring.h \
+ fontfactoryinterface.h \
+ fontdatabase.h \
+ power.h \
+ storage.h \
+ qpemessagebox.h \
+ backend/timeconversion.h \
+ qpedebug.h \
+ qpemenubar.h \
+ qpetoolbar.h \
+ backend/categories.h \
+ backend/stringutil.h \
+ backend/palmtopuid.h \
+ backend/palmtoprecord.h \
+ backend/task.h \
+ backend/event.h \
+ backend/contact.h\
+ categorymenu.h \
+ categoryedit_p.h \
+ categoryselect.h \
+ categorywidget.h \
+ ir.h \
+ backend/vobject_p.h \
+ findwidget_p.h \
+ finddialog.h \
+ lnkproperties.h
+
+SOURCES = calendar.cpp \
+ global.cpp \
+ xmlreader.cpp \
+ mimetype.cpp \
+ menubutton.cpp \
+ network.cpp \
+ networkinterface.cpp \
+ proxies.cpp \
+ filemanager.cpp \
+ fontmanager.cpp \
+ qdawg.cpp \
+ datebookmonth.cpp \
+ fileselector.cpp \
+ imageedit.cpp \
+ resource.cpp \
+ qpedecoration_qws.cpp \
+ qcopenvelope_qws.cpp \
+ qpeapplication.cpp \
+ qpestyle.cpp \
+ qpedialog.cpp \
+ lightstyle.cpp \
+ config.cpp \
+ applnk.cpp \
+ sound.cpp \
+ tzselect.cpp \
+ qmath.c \
+ datebookdb.cpp \
+ alarmserver.cpp \
+ password.cpp \
+ process.cpp \
+ process_unix.cpp \
+ timestring.cpp \
+ fontdatabase.cpp \
+ power.cpp \
+ storage.cpp \
+ qpemessagebox.cpp \
+ backend/timeconversion.cpp \
+ qpedebug.cpp \
+ qpemenubar.cpp \
+ qpetoolbar.cpp \
+ backend/categories.cpp \
+ backend/stringutil.cpp \
+ backend/palmtoprecord.cpp \
+ backend/task.cpp \
+ backend/event.cpp \
+ backend/contact.cpp \
+ categorymenu.cpp \
+ categoryedit_p.cpp \
+ categoryselect.cpp \
+ categorywidget.cpp \
+ ir.cpp \
+ backend/vcc_yacc.cpp \
+ backend/vobject.cpp \
+ findwidget_p.cpp \
+ finddialog.cpp \
+ lnkproperties.cpp
+
+# Qt 3 compatibility
+qt2:HEADERS += quuid.h qcom.h qlibrary.h qlibrary_p.h qprocess.h
+qt2:SOURCES += quuid.cpp qlibrary.cpp qlibrary_unix.cpp qprocess.cpp \
+ qprocess_unix.cpp
+
+INCLUDEPATH += $(QPEDIR)/include backend
+LIBS += -ldl -lcrypt -lm
+
+INTERFACES = passwordbase_p.ui proxiesbase_p.ui categoryeditbase_p.ui findwidgetbase_p.ui lnkpropertiesbase_p.ui
+
+TARGET = qpe
+DESTDIR = $(QTDIR)/lib$(PROJMAK)
+# This is set by configure$(QPEDIR).
+VERSION = 1.5.0
+
+TRANSLATIONS = ../i18n/de/libqpe.ts
diff --git a/library/lightstyle.cpp b/library/lightstyle.cpp
new file mode 100644
index 0000000..f18bdca
--- a/dev/null
+++ b/library/lightstyle.cpp
@@ -0,0 +1,1284 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "lightstyle.h"
+
+#if QT_VERSION < 300
+
+#define INCLUDE_MENUITEM_DEF
+#include "qmenubar.h"
+#include "qapplication.h"
+#include "qpainter.h"
+#include "qpalette.h"
+#include "qframe.h"
+#include "qpushbutton.h"
+#include "qdrawutil.h"
+#include "qscrollbar.h"
+#include "qtabbar.h"
+#include "qguardedptr.h"
+#include "qlayout.h"
+#include "qlineedit.h"
+
+
+class LightStylePrivate
+{
+public:
+ LightStylePrivate()
+ : hoverWidget(0), ref(1), savePalette(0)
+ {
+ }
+
+ QGuardedPtr<QWidget> hoverWidget;
+ QPalette oldPalette, hoverPalette;
+ int ref;
+ QPoint mousePos;
+ QPalette *savePalette;
+};
+
+
+static LightStylePrivate *singleton = 0;
+
+
+LightStyle::LightStyle()
+ : QWindowsStyle()
+{
+ if (! singleton) {
+ singleton = new LightStylePrivate;
+
+ QPalette pal = QApplication::palette();
+ singleton->oldPalette = pal;
+
+ QColor bg = pal.color(QPalette::Active, QColorGroup::Background);
+ QColor prelight;
+
+ if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128)
+ prelight = pal.color(QPalette::Active,
+ QColorGroup::Background).light(110);
+ else
+ prelight = pal.color(QPalette::Active,
+ QColorGroup::Background).light(120);
+
+ QColorGroup active2(pal.color(QPalette::Active,
+ QColorGroup::Foreground), // foreground
+ prelight, // button
+ prelight.light(), // light
+ prelight.dark(), // dark
+ prelight.dark(120), // mid
+ pal.color(QPalette::Active,
+ QColorGroup::Text), // text
+ pal.color(QPalette::Active,
+ QColorGroup::BrightText), // bright text
+ pal.color(QPalette::Active,
+ QColorGroup::Base), // base
+ bg); // background
+ active2.setColor(QColorGroup::Highlight,
+ pal.color(QPalette::Active, QColorGroup::Highlight));
+
+ singleton->hoverPalette = pal;
+ singleton->hoverPalette.setActive(active2);
+ singleton->hoverPalette.setInactive(active2);
+ } else
+ singleton->ref++;
+}
+
+
+LightStyle::~LightStyle()
+{
+ if (singleton && singleton->ref-- <= 0) {
+ delete singleton;
+ singleton = 0;
+ }
+}
+
+
+QSize LightStyle::scrollBarExtent() const
+{
+ return QSize(12 + defaultFrameWidth(), 12 + defaultFrameWidth());
+}
+
+
+int LightStyle::buttonDefaultIndicatorWidth() const
+{
+ return 2;
+}
+
+
+int LightStyle::sliderThickness() const
+{
+ return 16;
+}
+
+int LightStyle::sliderLength() const
+{
+ return 13;
+}
+
+
+int LightStyle::buttonMargin() const
+{
+ return 4;
+}
+
+
+QSize LightStyle::exclusiveIndicatorSize() const
+{
+ return QSize(13, 13);
+}
+
+
+int LightStyle::defaultFrameWidth() const
+{
+ return 2;
+}
+
+
+QSize LightStyle::indicatorSize() const
+{
+ return QSize(13, 13);
+}
+
+
+void LightStyle::polish(QWidget *widget)
+{
+ if (widget->inherits("QPushButton"))
+ widget->installEventFilter(this);
+
+#if QT_VERSION >= 300
+ if (widget->inherits("QLineEdit")) {
+ QLineEdit *lineedit = (QLineEdit *) widget;
+ lineedit->setFrameShape(QFrame::StyledPanel);
+ lineedit->setLineWidth(2);
+ }
+#endif
+
+ QWindowsStyle::polish(widget);
+}
+
+
+void LightStyle::unPolish(QWidget *widget)
+{
+ if (widget->inherits("QPushButton"))
+ widget->removeEventFilter(this);
+
+#if QT_VERSION >= 300
+ if (widget->inherits("QLineEdit")) {
+ QLineEdit *lineedit = (QLineEdit *) widget;
+ lineedit->setLineWidth(1);
+ lineedit->setFrameShape(QFrame::WinPanel);
+ }
+#endif
+
+ QWindowsStyle::unPolish(widget);
+}
+
+
+void LightStyle::polish(QApplication *app)
+{
+ QPalette pal = app->palette();
+
+ QColorGroup active(pal.color(QPalette::Active,
+ QColorGroup::Foreground), // foreground
+ pal.color(QPalette::Active,
+ QColorGroup::Button), // button
+ pal.color(QPalette::Active,
+ QColorGroup::Background).light(), // light
+ pal.color(QPalette::Active,
+ QColorGroup::Background).dark(175), // dark
+ pal.color(QPalette::Active,
+ QColorGroup::Background).dark(110), // mid
+ pal.color(QPalette::Active,
+ QColorGroup::Text), // text
+ pal.color(QPalette::Active,
+ QColorGroup::BrightText), // bright text
+ pal.color(QPalette::Active,
+ QColorGroup::Base), // base
+ pal.color(QPalette::Active,
+ QColorGroup::Background)), // background
+
+
+ disabled(pal.color(QPalette::Disabled,
+ QColorGroup::Foreground), // foreground
+ pal.color(QPalette::Disabled,
+ QColorGroup::Button), // button
+ pal.color(QPalette::Disabled,
+ QColorGroup::Background).light(), // light
+ pal.color(QPalette::Disabled,
+ QColorGroup::Background).dark(), // dark
+ pal.color(QPalette::Disabled,
+ QColorGroup::Background).dark(110), // mid
+ pal.color(QPalette::Disabled,
+ QColorGroup::Text), // text
+ pal.color(QPalette::Disabled,
+ QColorGroup::BrightText), // bright text
+ pal.color(QPalette::Disabled,
+ QColorGroup::Base), // base
+ pal.color(QPalette::Disabled,
+ QColorGroup::Background)); // background
+
+ active.setColor(QColorGroup::Highlight,
+ pal.color(QPalette::Active, QColorGroup::Highlight));
+ disabled.setColor(QColorGroup::Highlight,
+ pal.color(QPalette::Disabled, QColorGroup::Highlight));
+
+ active.setColor(QColorGroup::HighlightedText,
+ pal.color(QPalette::Active, QColorGroup::HighlightedText));
+ disabled.setColor(QColorGroup::HighlightedText,
+ pal.color(QPalette::Disabled, QColorGroup::HighlightedText));
+
+ pal.setActive(active);
+ pal.setInactive(active);
+ pal.setDisabled(disabled);
+
+ singleton->oldPalette = pal;
+
+ QColor bg = pal.color(QPalette::Active, QColorGroup::Background);
+ QColor prelight;
+
+ if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128)
+ prelight = pal.color(QPalette::Active,
+ QColorGroup::Background).light(110);
+ else
+ prelight = pal.color(QPalette::Active,
+ QColorGroup::Background).light(120);
+
+ QColorGroup active2(pal.color(QPalette::Active,
+ QColorGroup::Foreground), // foreground
+ prelight, // button
+ prelight.light(), // light
+ prelight.dark(), // dark
+ prelight.dark(120), // mid
+ pal.color(QPalette::Active,
+ QColorGroup::Text), // text
+ pal.color(QPalette::Active,
+ QColorGroup::BrightText), // bright text
+ pal.color(QPalette::Active,
+ QColorGroup::Base), // base
+ bg); // background
+ active2.setColor(QColorGroup::Highlight,
+ pal.color(QPalette::Active, QColorGroup::Highlight));
+
+ singleton->hoverPalette = pal;
+ singleton->hoverPalette.setActive(active2);
+ singleton->hoverPalette.setInactive(active2);
+
+ app->setPalette(pal);
+}
+
+
+void LightStyle::unPolish(QApplication *app)
+{
+ app->setPalette(singleton->oldPalette);
+}
+
+
+void LightStyle::polishPopupMenu(QPopupMenu *menu)
+{
+ menu->setMouseTracking(TRUE);
+}
+
+
+void LightStyle::drawPushButton(QPushButton *button, QPainter *p)
+{
+ int x1, y1, x2, y2;
+ button->rect().coords(&x1, &y1, &x2, &y2);
+
+ if (button->isDefault()) {
+ p->save();
+ p->setPen(button->palette().active().color(QColorGroup::Highlight));
+ p->setBrush(button->palette().active().brush(QColorGroup::Highlight));
+ p->drawRoundRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1, 15, 15);
+ p->restore();
+ }
+
+ if (button->isDefault() || button->autoDefault()) {
+ x1 += buttonDefaultIndicatorWidth();
+ y1 += buttonDefaultIndicatorWidth();
+ x2 -= buttonDefaultIndicatorWidth();
+ y2 -= buttonDefaultIndicatorWidth();
+
+ if (button->isDefault()) {
+ QPointArray pa(8);
+ pa.setPoint(0, x1 + 2, y1 );
+ pa.setPoint(1, x2 - 1, y1 );
+ pa.setPoint(2, x2 + 1, y1 + 2);
+ pa.setPoint(3, x2 + 1, y2 - 2);
+ pa.setPoint(4, x2 - 2, y2 + 1);
+ pa.setPoint(5, x1 + 2, y2 + 1);
+ pa.setPoint(6, x1, y2 - 1);
+ pa.setPoint(7, x1, y1 + 2);
+ QRegion r(pa);
+ p->setClipRegion(r);
+ }
+ }
+
+ QBrush fill;
+ if (button->isDown() || button->isOn())
+ fill = button->colorGroup().brush(QColorGroup::Mid);
+ else
+ fill = button->colorGroup().brush(QColorGroup::Button);
+
+ if ( !button->isFlat() || button->isOn() || button->isDown() )
+ drawButton(p, x1, y1, x2 - x1 + 1, y2 - y1 + 1,
+ button->colorGroup(), button->isOn() || button->isDown(), &fill);
+}
+
+
+void LightStyle::drawButton(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g,
+ bool sunken, const QBrush *fill)
+{
+ p->save();
+ if ( fill )
+ p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill);
+ else
+ p->fillRect(x + 2, y + 2, w - 4, h - 4,
+ QBrush(sunken ? g.mid() : g.button()));
+
+ // frame
+ p->setPen(g.dark());
+ p->drawLine(x, y + 2, x, y + h - 3); // left
+ p->drawLine(x + 2, y, x + w - 3, y); // top
+ p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right
+ p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom
+ p->drawPoint(x + 1, y + 1);
+ p->drawPoint(x + 1, y + h - 2);
+ p->drawPoint(x + w - 2, y + 1);
+ p->drawPoint(x + w - 2, y + h - 2);
+
+ // bevel
+ if (sunken)
+ p->setPen(g.mid());
+ else
+ p->setPen(g.light());
+
+ p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left
+ p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top
+
+ if (sunken)
+ p->setPen(g.light());
+ else
+ p->setPen(g.mid());
+
+ p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1
+ p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1
+
+ p->restore();
+}
+
+
+void LightStyle::drawBevelButton(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g,
+ bool sunken, const QBrush *fill)
+{
+ drawButton(p, x, y, w, h, g, sunken, fill);
+}
+
+
+void LightStyle::getButtonShift(int &x, int &y) const
+{
+ x = y = 0;
+}
+
+
+void LightStyle::drawComboButton(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool,
+ bool editable, bool,
+ const QBrush *fill)
+{
+ drawButton(p, x, y, w, h, g, FALSE, fill);
+
+ if (editable) {
+ QRect r = comboButtonRect(x, y, w, h);
+ qDrawShadePanel(p, r.x() - 1, r.y() - 1,
+ r.width() + defaultFrameWidth(),
+ r.height() + defaultFrameWidth(),
+ g, TRUE);
+ }
+
+ int indent = ((y + h) / 2) - 3;
+ int xpos = x;
+
+#if QT_VERSION >= 300
+ if( QApplication::reverseLayout() )
+ xpos += indent;
+ else
+#endif
+ xpos += w - indent - 5;
+
+ drawArrow(p, Qt::DownArrow, TRUE, xpos, indent, 5, 5, g, TRUE, fill);
+}
+
+
+QRect LightStyle::comboButtonRect( int x, int y, int w, int h ) const
+{
+ QRect r(x + 3, y + 3, w - 6, h - 6);
+ int indent = ((y + h) / 2) - 3;
+ r.setRight(r.right() - indent - 10);
+
+#if QT_VERSION >= 300
+ if( QApplication::reverseLayout() )
+ r.moveBy( indent + 10, 0 );
+#endif
+
+ return r;
+}
+
+
+QRect LightStyle::comboButtonFocusRect(int x, int y, int w, int h ) const
+{
+ return comboButtonRect(x, y, w, h);
+}
+
+
+void LightStyle::drawPanel(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken,
+ int lw, const QBrush *fill)
+{
+ if (lw >= 2) {
+ if ( fill )
+ p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill);
+
+ QPen oldpen = p->pen();
+
+ // frame
+ p->setPen(g.dark());
+ p->drawLine(x, y + 2, x, y + h - 3); // left
+ p->drawLine(x + 2, y, x + w - 3, y); // top
+ p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right
+ p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom
+ p->drawPoint(x + 1, y + 1);
+ p->drawPoint(x + 1, y + h - 2);
+ p->drawPoint(x + w - 2, y + 1);
+ p->drawPoint(x + w - 2, y + h - 2);
+
+ // bevel
+ if (sunken)
+ p->setPen(g.mid());
+ else
+ p->setPen(g.light());
+
+ p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left
+ p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top
+
+ if (sunken)
+ p->setPen(g.light());
+ else
+ p->setPen(g.mid());
+
+ p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1
+ p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1
+
+ // corners
+ p->setPen(g.background());
+ p->drawLine(x, y, x + 1, y);
+ p->drawLine(x, y + h - 1, x + 1, y + h - 1);
+ p->drawLine(x + w - 2, y, x + w - 1, y);
+ p->drawLine(x + w - 2, y + h - 1, x + w - 1, y + h - 1);
+ p->drawPoint(x, y + 1);
+ p->drawPoint(x, y + h - 2);
+ p->drawPoint(x + w - 1, y + 1);
+ p->drawPoint(x + w - 1, y + h - 2);
+
+ p->setPen(oldpen);
+ } else
+ qDrawShadePanel(p, x, y, w, h, g, sunken, lw, fill);
+}
+
+
+void LightStyle::drawIndicator(QPainter *p, int x, int y ,int w, int h,
+ const QColorGroup &g, int state,
+ bool down, bool)
+{
+ drawButton(p, x, y, w, h, g, TRUE,
+ &g.brush(down ? QColorGroup::Mid : QColorGroup::Base));
+
+ p->save();
+
+ p->setPen(g.foreground());
+ if (state == QButton::NoChange) {
+ p->drawLine(x + 3, y + h / 2, x + w - 4, y + h / 2);
+ p->drawLine(x + 3, y + 1 + h / 2, x + w - 4, y + 1 + h / 2);
+ p->drawLine(x + 3, y - 1 + h / 2, x + w - 4, y - 1 + h / 2);
+ } else if (state == QButton::On) {
+ p->drawLine(x + 4, y + 3, x + w - 4, y + h - 5);
+ p->drawLine(x + 3, y + 3, x + w - 4, y + h - 4);
+ p->drawLine(x + 3, y + 4, x + w - 5, y + h - 4);
+ p->drawLine(x + 3, y + h - 5, x + w - 5, y + 3);
+ p->drawLine(x + 3, y + h - 4, x + w - 4, y + 3);
+ p->drawLine(x + 4, y + h - 4, x + w - 4, y + 4);
+ }
+
+ p->restore();
+}
+
+
+void LightStyle::drawExclusiveIndicator(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool on,
+ bool down, bool)
+{
+ p->save();
+
+ p->fillRect(x, y, w, h, g.brush(QColorGroup::Background));
+
+ p->setPen(g.dark());
+ p->drawArc(x, y, w, h, 0, 16*360);
+ p->setPen(g.mid());
+ p->drawArc(x + 1, y + 1, w - 2, h - 2, 45*16, 180*16);
+ p->setPen(g.light());
+ p->drawArc(x + 1, y + 1, w - 2, h - 2, 235*16, 180*16);
+
+ p->setPen(down ? g.mid() : g.base());
+ p->setBrush(down ? g.mid() : g.base());
+ p->drawEllipse(x + 2, y + 2, w - 4, h - 4);
+
+ if (on) {
+ p->setBrush(g.foreground());
+ p->drawEllipse(x + 3, y + 3, w - x - 6, h - y - 6);
+ }
+
+ p->restore();
+}
+
+
+
+#if 1
+//copied from QPE style
+void LightStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected )
+{
+#if 0
+ //We can't do this, because QTabBar::focusInEvent redraws the
+ // tab label with the default font.
+ QFont f = tb->font();
+ f.setBold( selected );
+ p->setFont( f );
+#endif
+ QRect r( t->rect() );
+ if ( tb->shape() == QTabBar::RoundedAbove ) {
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
+ if ( r.left() == 0 )
+ p->drawPoint( tb->rect().bottomLeft() );
+ else {
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
+ }
+
+ if ( selected ) {
+ p->setPen( tb->colorGroup().background() );
+ p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
+ p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2),
+ tb->colorGroup().brush( QColorGroup::Background ));
+
+ } else {
+ r.setRect( r.left() + 2, r.top() + 2,
+ r.width() - 4, r.height() - 2 );
+ p->setPen( tb->colorGroup().button() );
+ p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
+ p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3),
+ tb->colorGroup().brush( QColorGroup::Button ));
+ //do shading; will not work for pixmap brushes
+ QColor bg = tb->colorGroup().button();
+ // int h,s,v;
+ // bg.hsv( &h, &s, &v );
+ int n = r.height()/2;
+ int dark = 100;
+ for ( int i = 1; i < n; i++ ) {
+ dark = (dark * (100+(i*15)/n) )/100;
+ p->setPen( bg.dark( dark ) );
+ int y = r.bottom()-n+i;
+ int x1 = r.left()+1;
+ int x2 = r.right()-1;
+ p->drawLine( x1, y, x2, y );
+ }
+
+ }
+
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 );
+ p->drawPoint( r.left()+1, r.top() + 1 );
+ p->drawLine( r.left()+2, r.top(),
+ r.right() - 2, r.top() );
+
+ p->setPen( tb->colorGroup().dark() );
+ p->drawPoint( r.right() - 1, r.top() + 1 );
+ p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1);
+ } else if ( tb->shape() == QTabBar::RoundedBelow ) {
+ if ( selected ) {
+ p->setPen( tb->colorGroup().background() );
+ p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
+ p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2),
+ tb->palette().normal().brush( QColorGroup::Background ));
+ } else {
+ p->setPen( tb->colorGroup().dark() );
+ p->drawLine( r.left(), r.top(),
+ r.right(), r.top() );
+ r.setRect( r.left() + 2, r.top(),
+ r.width() - 4, r.height() - 2 );
+ p->setPen( tb->colorGroup().button() );
+ p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
+ p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3),
+ tb->palette().normal().brush( QColorGroup::Button ));
+ }
+
+ p->setPen( tb->colorGroup().dark() );
+ p->drawLine( r.right(), r.top(),
+ r.right(), r.bottom() - 2 );
+ p->drawPoint( r.right() - 1, r.bottom() - 1 );
+ p->drawLine( r.right() - 2, r.bottom(),
+ r.left() + 2, r.bottom() );
+
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.top()+1,
+ r.left(), r.bottom() - 2 );
+ p->drawPoint( r.left() + 1, r.bottom() - 1 );
+ if ( r.left() == 0 )
+ p->drawPoint( tb->rect().topLeft() );
+
+ } else {
+ QCommonStyle::drawTab( p, tb, t, selected );
+ }
+}
+
+#else
+
+void LightStyle::drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab,
+ bool selected)
+{
+ p->save();
+
+ QColorGroup g = tabbar->colorGroup();
+ QRect fr(tab->r);
+ fr.setLeft(fr.left() + 2);
+
+ if (! selected) {
+ if (tabbar->shape() == QTabBar::RoundedAbove ||
+ tabbar->shape() == QTabBar::TriangularAbove) {
+
+ fr.setTop(fr.top() + 2);
+ } else {
+ fr.setBottom(fr.bottom() - 2);
+ }
+ }
+
+ QRegion tabr(tab->r);
+
+ QPointArray cliptri(4);
+ cliptri.setPoint(0, fr.left(), fr.top());
+ cliptri.setPoint(1, fr.left(), fr.top() + 5);
+ cliptri.setPoint(2, fr.left() + 5, fr.top());
+ cliptri.setPoint(3, fr.left(), fr.top());
+ QRegion trir(cliptri);
+ p->setClipRegion(tabr - trir);
+
+ p->setPen( NoPen );
+ p->setBrush(g.brush(selected ? QColorGroup::Background : QColorGroup::Mid));
+
+ fr.setWidth(fr.width() - 1);
+ p->drawRect(fr.left() + 1, fr.top() + 1, fr.width() - 2, fr.height() - 2);
+
+ if (tabbar->shape() == QTabBar::RoundedAbove) {
+ // "rounded" tabs on top
+ fr.setBottom(fr.bottom() - 1);
+
+ p->setPen(g.dark());
+ p->drawLine(fr.left(), fr.top() + 5, fr.left(), fr.bottom() - 1);
+ p->drawLine(fr.left(), fr.top() + 5, fr.left() + 5, fr.top());
+ p->drawLine(fr.left() + 5, fr.top(), fr.right() - 1, fr.top());
+ p->drawLine(fr.right(), fr.top() + 1, fr.right(), fr.bottom() - 1);
+
+ if (selected) {
+ p->drawLine(fr.right(), fr.bottom(), fr.right() + 2, fr.bottom());
+ p->drawPoint(fr.left(), fr.bottom());
+ } else
+ p->drawLine(fr.left(), fr.bottom(), fr.right() + 2, fr.bottom());
+
+ if (fr.left() == 2) {
+ p->drawPoint(fr.left() - 1, fr.bottom() + 1);
+ p->drawPoint(fr.left() - 2, fr.bottom() + 2);
+ }
+
+ if (selected) {
+ p->setPen(g.mid());
+ p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 2);
+ }
+
+ p->setPen(g.light()); p->setPen(red);
+ p->drawLine(fr.left() + 1, fr.top() + 6, fr.left() + 1,
+ fr.bottom() - (selected ? 0 : 1));
+ p->drawLine(fr.left() + 1, fr.top() + 5, fr.left() + 5, fr.top() + 1);
+ p->drawLine(fr.left() + 6, fr.top() + 1, fr.right() - 3, fr.top() + 1);
+ if (selected) {
+ p->drawLine(fr.right() + 1, fr.bottom() + 1,
+ fr.right() + 2, fr.bottom() + 1);
+ p->drawLine(fr.left(), fr.bottom() + 1, fr.left() + 1, fr.bottom() + 1);
+ } else
+ p->drawLine(fr.left(), fr.bottom() + 1,
+ fr.right() + 2, fr.bottom() + 1);
+ } else if (tabbar->shape() == QTabBar::RoundedBelow) {
+ // "rounded" tabs on bottom
+ fr.setTop(fr.top() + 1);
+
+ p->setPen(g.dark());
+ p->drawLine(fr.left(), fr.top(), fr.left(), fr.bottom() - 1);
+ p->drawLine(fr.left() + 1, fr.bottom(), fr.right() - 1, fr.bottom());
+ p->drawLine(fr.right(), fr.top(), fr.right(), fr.bottom() - 1);
+
+ if (! selected)
+ p->drawLine(fr.left(), fr.top(), fr.right() + 3, fr.top());
+ else
+ p->drawLine(fr.right(), fr.top(), fr.right() + 3, fr.top());
+
+ p->setPen(g.mid());
+ if (selected)
+ p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 1);
+ else
+ p->drawLine(fr.left(), fr.top() - 1, fr.right() + 3, fr.top() - 1);
+
+ p->setPen(g.light());
+ p->drawLine(fr.left() + 1, fr.top() + (selected ? -1 : 2),
+ fr.left() + 1, fr.bottom() - 1);
+
+ } else {
+ // triangular drawing code
+ QCommonStyle::drawTab(p, tabbar, tab, selected);
+ }
+
+ p->restore();
+}
+#endif
+
+void LightStyle::drawSlider(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, Qt::Orientation orientation,
+ bool above, bool below)
+{
+ drawButton(p, x, y, w, h, g, FALSE, &g.brush(QColorGroup::Button));
+
+ if (orientation == Horizontal) {
+ if (above && below) {
+ drawArrow(p, Qt::UpArrow, FALSE, x + 1, y + 1, w, h / 2, g, TRUE);
+ drawArrow(p, Qt::DownArrow, FALSE, x + 1, y + (h / 2) - 1,
+ w, h / 2, g, TRUE);
+ } else
+ drawArrow(p, (above) ? Qt::UpArrow : Qt::DownArrow,
+ FALSE, x + 1, y, w, h, g, TRUE);
+ } else {
+ if (above && below) {
+ drawArrow(p, Qt::LeftArrow, FALSE, x + 1, y, w / 2, h, g, TRUE);
+ drawArrow(p, Qt::RightArrow, FALSE, x + (w / 2) - 2, y, w / 2, h, g, TRUE);
+ } else
+ drawArrow(p, (above) ? Qt::LeftArrow : Qt::RightArrow,
+ FALSE, x, y, w, h, g, TRUE);
+ }
+}
+
+
+void LightStyle::drawSliderGroove(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup& g, QCOORD c,
+ Qt::Orientation orientation)
+{
+ if (orientation == Horizontal)
+ drawButton(p, x, y+c - 3, w, 6, g, TRUE, &g.brush(QColorGroup::Mid));
+ else
+ drawButton(p, x+c - 3, y, 6, h, g, TRUE, &g.brush(QColorGroup::Mid));
+}
+
+
+void LightStyle::scrollBarMetrics(const QScrollBar *scrollbar,
+ int &sliderMin, int &sliderMax,
+ int &sliderLength, int &buttonDim) const
+{
+ int maxLength;
+ int length = ((scrollbar->orientation() == Horizontal) ?
+ scrollbar->width() : scrollbar->height());
+ int extent = ((scrollbar->orientation() == Horizontal) ?
+ scrollbar->height() : scrollbar->width());
+ extent--;
+
+ if (length > (extent + defaultFrameWidth() - 1) * 2 + defaultFrameWidth())
+ buttonDim = extent - defaultFrameWidth();
+ else
+ buttonDim = (length - defaultFrameWidth()) / 2 - 1;
+
+ sliderMin = buttonDim;
+ maxLength = length - buttonDim * 3;
+
+ if (scrollbar->maxValue() != scrollbar->minValue()) {
+ uint range = scrollbar->maxValue() - scrollbar->minValue();
+ sliderLength = (scrollbar->pageStep() * maxLength) /
+ (range + scrollbar->pageStep());
+
+ if (sliderLength < buttonDim || range > INT_MAX / 2)
+ sliderLength = buttonDim;
+ if (sliderLength > maxLength)
+ sliderLength = maxLength;
+ } else
+ sliderLength = maxLength;
+
+ sliderMax = sliderMin + maxLength - sliderLength;
+}
+
+
+QStyle::ScrollControl LightStyle::scrollBarPointOver(const QScrollBar *scrollbar,
+ int sliderStart, const QPoint &p)
+{
+ if (! scrollbar->rect().contains(p))
+ return NoScroll;
+
+ int sliderMin, sliderMax, sliderLength, buttonDim, pos;
+ scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim );
+
+ if (scrollbar->orientation() == Horizontal)
+ pos = p.x();
+ else
+ pos = p.y();
+
+ if (pos < buttonDim)
+ return SubLine;
+ if (pos < sliderStart)
+ return SubPage;
+ if (pos < sliderStart + sliderLength)
+ return Slider;
+ if (pos < sliderMax + sliderLength)
+ return AddPage;
+ if (pos < sliderMax + sliderLength + buttonDim)
+ return SubLine;
+ return AddLine;
+}
+
+
+
+void LightStyle::drawScrollBarControls( QPainter* p, const QScrollBar* scrollbar,
+ int sliderStart, uint controls,
+ uint activeControl )
+{
+ QColorGroup g = scrollbar->colorGroup();
+
+ int sliderMin, sliderMax, sliderLength, buttonDim;
+ scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim );
+
+ if (sliderStart > sliderMax) { // sanity check
+ sliderStart = sliderMax;
+ }
+
+ QRect addR, subR, subR2, addPageR, subPageR, sliderR;
+ int length = ((scrollbar->orientation() == Horizontal) ?
+ scrollbar->width() : scrollbar->height());
+ int extent = ((scrollbar->orientation() == Horizontal) ?
+ scrollbar->height() : scrollbar->width());
+
+
+ int fudge = 3; //####disgusting hack
+
+ if (scrollbar->orientation() == Horizontal) {
+ subR.setRect(0, defaultFrameWidth(),
+ buttonDim + fudge, buttonDim);
+ subR2.setRect(length - (buttonDim * 2), defaultFrameWidth() ,
+ buttonDim, buttonDim);
+ addR.setRect(length - buttonDim, defaultFrameWidth(),
+ buttonDim, buttonDim);
+ } else {
+ subR.setRect(defaultFrameWidth() + 1, 0,
+ buttonDim, buttonDim + fudge);
+ subR2.setRect(defaultFrameWidth() + 1, length - (buttonDim * 2),
+ buttonDim, buttonDim);
+ addR.setRect(defaultFrameWidth() + 1, length - buttonDim,
+ buttonDim, buttonDim);
+ }
+
+ int sliderEnd = sliderStart + sliderLength;
+ int sliderW = extent - defaultFrameWidth() - 1;
+ if (scrollbar->orientation() == Horizontal) {
+ subPageR.setRect( subR.right() + 1, defaultFrameWidth(),
+ sliderStart - subR.right() - 1 , sliderW );
+ addPageR.setRect( sliderEnd, defaultFrameWidth(),
+ subR2.left() - sliderEnd, sliderW );
+ sliderR.setRect( sliderStart, defaultFrameWidth(), sliderLength, sliderW );
+ } else {
+ subPageR.setRect( defaultFrameWidth(), subR.bottom() + 1,
+ sliderW, sliderStart - subR.bottom() - 1 );
+ addPageR.setRect( defaultFrameWidth(), sliderEnd,
+ sliderW, subR2.top() - sliderEnd );
+ sliderR .setRect( defaultFrameWidth(), sliderStart,
+ sliderW, sliderLength );
+ }
+
+ if ( controls == ( AddLine | SubLine | AddPage | SubPage |
+ Slider | First | Last ) ) {
+ if (scrollbar->orientation() == Horizontal)
+ qDrawShadePanel(p, 0, 0, length, 2, g, TRUE, 1,
+ &g.brush(QColorGroup::Background));
+ else
+ qDrawShadePanel(p, 0, 0, 2, length, g, TRUE, 1,
+ &g.brush(QColorGroup::Background));
+ }
+
+ if ( controls & AddLine )
+ drawArrow( p, (scrollbar->orientation() == Vertical) ? DownArrow : RightArrow,
+ FALSE, addR.x(), addR.y(),
+ addR.width(), addR.height(),
+ (( activeControl == AddLine ) ?
+ singleton->hoverPalette.active() : g),
+ TRUE, &g.brush(QColorGroup::Background));
+ if ( controls & SubLine ) {
+ drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow,
+ FALSE, subR.x(), subR.y(),
+ subR.width(), subR.height(),
+ (( activeControl == SubLine ) ?
+ singleton->hoverPalette.active() : g),
+ TRUE, &g.brush(QColorGroup::Background));
+ drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow,
+ FALSE, subR2.x(), subR2.y(),
+ subR2.width(), subR2.height(),
+ (( activeControl == SubLine ) ?
+ singleton->hoverPalette.active() : g),
+ TRUE, &g.brush(QColorGroup::Background));
+ }
+
+ if ( controls & SubPage )
+ p->fillRect( subPageR,
+ ((activeControl == SubPage) ?
+ g.brush( QColorGroup::Dark ) :
+ g.brush( QColorGroup::Mid )));
+ if ( controls & AddPage )
+ p->fillRect( addPageR,
+ ((activeControl == AddPage) ?
+ g.brush( QColorGroup::Dark ) :
+ g.brush( QColorGroup::Mid )));
+
+ if ( controls & Slider ) {
+
+ QPoint bo = p->brushOrigin();
+ p->setBrushOrigin(sliderR.topLeft());
+ if ( sliderR.isValid() ) {
+ p->fillRect( sliderR.x(), sliderR.y(), 2, 2,
+ g.brush( QColorGroup::Mid ));
+ p->fillRect( sliderR.x() + sliderR.width() - 2,
+ sliderR.y(), 2, 2,
+ g.brush( QColorGroup::Mid ));
+ p->fillRect( sliderR.x() + sliderR.width() - 2,
+ sliderR.y() + sliderR.height() - 2, 2, 2,
+ g.brush( QColorGroup::Mid ));
+ p->fillRect( sliderR.x(),
+ sliderR.y() + sliderR.height() - 2, 2, 2,
+ g.brush( QColorGroup::Mid ));
+
+ QColorGroup cg( g );
+ cg.setBrush( QColorGroup::Background, g.brush( QColorGroup::Mid ) );
+ drawBevelButton( p, sliderR.x(), sliderR.y(),
+ sliderR.width(), sliderR.height(),
+ cg, FALSE, &g.brush( QColorGroup::Button ) );
+ }
+
+ p->setBrushOrigin(bo);
+ }
+}
+
+
+void LightStyle::drawToolBarHandle(QPainter *p, const QRect &rect,
+ Qt::Orientation orientation,
+ bool, const QColorGroup &g, bool)
+{
+ p->save();
+ p->setPen(g.mid());
+ p->setBrush(g.brush(QColorGroup::Mid));
+
+ if (orientation == Qt::Horizontal) {
+ QRect l, r;
+ l.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 5, rect.height() - 2);
+ r.setRect(l.right() + 1, l.y(), 3, l.height());
+
+ p->drawRect(l);
+ qDrawShadePanel(p, r, g, FALSE);
+ } else {
+ QRect t, b;
+ t.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 2, rect.height() - 5);
+ b.setRect(t.x(), t.bottom() + 1, t.width(), 3);
+
+ p->drawRect(t);
+ qDrawShadePanel(p, b, g, FALSE);
+ }
+
+ p->restore();
+}
+
+
+bool LightStyle::eventFilter(QObject *object, QEvent *event)
+{
+ switch(event->type()) {
+ case QEvent::Enter:
+ {
+ if (! object->isWidgetType() ||
+ ! object->inherits("QPushButton"))
+ break;
+
+ singleton->hoverWidget = (QWidget *) object;
+ if (! singleton->hoverWidget->isEnabled()) {
+ singleton->hoverWidget = 0;
+ break;
+ }
+
+ QPalette pal = singleton->hoverWidget->palette();
+ if (singleton->hoverWidget->ownPalette())
+ singleton->savePalette = new QPalette(pal);
+
+ singleton->hoverWidget->setPalette(singleton->hoverPalette);
+
+ break;
+ }
+
+ case QEvent::Leave:
+ {
+ if (object != singleton->hoverWidget)
+ break;
+
+ if (singleton->savePalette) {
+ singleton->hoverWidget->setPalette(*(singleton->savePalette));
+ delete singleton->savePalette;
+ singleton->savePalette = 0;
+ } else
+ singleton->hoverWidget->unsetPalette();
+
+ singleton->hoverWidget = 0;
+
+ break;
+ }
+
+ default:
+ {
+ ;
+ }
+ }
+
+ return QWindowsStyle::eventFilter(object, event);
+}
+
+
+static const int motifItemFrame = 1; // menu item frame width
+static const int motifSepHeight = 2; // separator item height
+static const int motifItemHMargin = 1; // menu item hor text margin
+static const int motifItemVMargin = 2; // menu item ver text margin
+static const int motifArrowHMargin = 0; // arrow horizontal margin
+static const int motifTabSpacing = 12; // space between text and tab
+static const int motifCheckMarkHMargin = 1; // horiz. margins of check mark
+static const int windowsRightBorder = 8; // right border on windows
+static const int windowsCheckMarkWidth = 2; // checkmarks width on windows
+
+/*! \reimp
+*/
+int LightStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ )
+{
+#ifndef QT_NO_MENUDATA
+ int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm
+
+ if ( mi->isSeparator() )
+ return 10; // arbitrary
+ else if ( mi->pixmap() )
+ w += mi->pixmap()->width(); // pixmap only
+
+ if ( !mi->text().isNull() ) {
+ if ( mi->text().find('\t') >= 0 ) // string contains tab
+ w += motifTabSpacing;
+ }
+
+ if ( maxpmw ) { // we have iconsets
+ w += maxpmw;
+ w += 6; // add a little extra border around the iconset
+ }
+
+ if ( checkable && maxpmw < windowsCheckMarkWidth ) {
+ w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks
+ }
+
+ if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks)
+ w += motifCheckMarkHMargin; // add space to separate the columns
+
+ w += windowsRightBorder; // windows has a strange wide border on the right side
+
+ return w;
+#endif
+}
+
+/*! \reimp
+*/
+int LightStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm )
+{
+#ifndef QT_NO_MENUDATA
+ int h = 0;
+ if ( mi->isSeparator() ) // separator height
+ h = motifSepHeight;
+ else if ( mi->pixmap() ) // pixmap height
+ h = mi->pixmap()->height() + 2*motifItemFrame;
+ else // text height
+ h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame;
+
+ if ( !mi->isSeparator() && mi->iconSet() != 0 ) {
+ h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame );
+ }
+ if ( mi->custom() )
+ h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1;
+ return h;
+#endif
+}
+
+void LightStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
+ const QPalette& pal,
+ bool act, bool enabled, int x, int y, int w, int h)
+{
+#ifndef QT_NO_MENUDATA
+ const QColorGroup & g = pal.active();
+ bool dis = !enabled;
+ QColorGroup itemg = dis ? pal.disabled() : pal.active();
+
+ if ( checkable )
+ maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
+
+ int checkcol = maxpmw;
+
+ if ( mi && mi->isSeparator() ) { // draw separator
+ p->setPen( g.dark() );
+ p->drawLine( x, y, x+w, y );
+ p->setPen( g.light() );
+ p->drawLine( x, y+1, x+w, y+1 );
+ return;
+ }
+
+ QBrush fill = act? g.brush( QColorGroup::Highlight ) :
+ g.brush( QColorGroup::Button );
+ p->fillRect( x, y, w, h, fill);
+
+ if ( !mi )
+ return;
+
+ if ( mi->isChecked() ) {
+ if ( act && !dis ) {
+ qDrawShadePanel( p, x, y, checkcol, h,
+ g, TRUE, 1, &g.brush( QColorGroup::Button ) );
+ } else {
+ qDrawShadePanel( p, x, y, checkcol, h,
+ g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
+ }
+ } else if ( !act ) {
+ p->fillRect(x, y, checkcol , h,
+ g.brush( QColorGroup::Button ));
+ }
+
+ if ( mi->iconSet() ) { // draw iconset
+ QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal;
+ if (act && !dis )
+ mode = QIconSet::Active;
+ QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode );
+ int pixw = pixmap.width();
+ int pixh = pixmap.height();
+ if ( act && !dis ) {
+ if ( !mi->isChecked() )
+ qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) );
+ }
+ QRect cr( x, y, checkcol, h );
+ QRect pmr( 0, 0, pixw, pixh );
+ pmr.moveCenter( cr.center() );
+ p->setPen( itemg.text() );
+ p->drawPixmap( pmr.topLeft(), pixmap );
+
+ QBrush fill = act? g.brush( QColorGroup::Highlight ) :
+ g.brush( QColorGroup::Button );
+ p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
+ } else if ( checkable ) { // just "checking"...
+ int mw = checkcol + motifItemFrame;
+ int mh = h - 2*motifItemFrame;
+ if ( mi->isChecked() ) {
+ drawCheckMark( p, x + motifItemFrame + 2,
+ y+motifItemFrame, mw, mh, itemg, act, dis );
+ }
+ }
+
+ p->setPen( act ? g.highlightedText() : g.buttonText() );
+
+ QColor discol;
+ if ( dis ) {
+ discol = itemg.text();
+ p->setPen( discol );
+ }
+
+ int xm = motifItemFrame + checkcol + motifItemHMargin;
+
+ if ( mi->custom() ) {
+ int m = motifItemVMargin;
+ p->save();
+ if ( dis && !act ) {
+ p->setPen( g.light() );
+ mi->custom()->paint( p, itemg, act, enabled,
+ x+xm+1, y+m+1, w-xm-tab+1, h-2*m );
+ p->setPen( discol );
+ }
+ mi->custom()->paint( p, itemg, act, enabled,
+ x+xm, y+m, w-xm-tab+1, h-2*m );
+ p->restore();
+ }
+ QString s = mi->text();
+ if ( !s.isNull() ) { // draw text
+ int t = s.find( '\t' );
+ int m = motifItemVMargin;
+ const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine;
+ if ( t >= 0 ) { // draw tab text
+ if ( dis && !act ) {
+ p->setPen( g.light() );
+ p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1,
+ y+m+1, tab, h-2*m, text_flags, s.mid( t+1 ));
+ p->setPen( discol );
+ }
+ p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame,
+ y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );
+ }
+ if ( dis && !act ) {
+ p->setPen( g.light() );
+ p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t );
+ p->setPen( discol );
+ }
+ p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t );
+ } else if ( mi->pixmap() ) { // draw pixmap
+ QPixmap *pixmap = mi->pixmap();
+ if ( pixmap->depth() == 1 )
+ p->setBackgroundMode( OpaqueMode );
+ p->drawPixmap( x+xm, y+motifItemFrame, *pixmap );
+ if ( pixmap->depth() == 1 )
+ p->setBackgroundMode( TransparentMode );
+ }
+ if ( mi->popup() ) { // draw sub menu arrow
+ int dim = (h-2*motifItemFrame) / 2;
+ if ( act ) {
+ if ( !dis )
+ discol = white;
+ QColorGroup g2( discol, g.highlight(),
+ white, white,
+ dis ? discol : white,
+ discol, white );
+ drawArrow( p, RightArrow, FALSE,
+ x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
+ dim, dim, g2, TRUE );
+ } else {
+ drawArrow( p, RightArrow,
+ FALSE,
+ x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
+ dim, dim, g, mi->isEnabled() );
+ }
+ }
+#endif
+}
+
+#endif
diff --git a/library/lightstyle.h b/library/lightstyle.h
new file mode 100644
index 0000000..c377cc2
--- a/dev/null
+++ b/library/lightstyle.h
@@ -0,0 +1,120 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LIGHTSTYLE_H
+#define LIGHTSTYLE_H
+
+
+#ifndef QT_H
+#include <qstyle.h>
+#include <qwindowsstyle.h>
+#endif // QT_H
+
+#if QT_VERSION < 300
+
+#ifdef QT_PLUGIN_STYLE_LIGHT
+# define Q_EXPORT_STYLE_LIGHT
+#else
+# define Q_EXPORT_STYLE_LIGHT Q_EXPORT
+#endif // QT_PLUGIN_STYLE_LIGHT
+
+
+class Q_EXPORT_STYLE_LIGHT LightStyle : public QWindowsStyle
+{
+public:
+ LightStyle();
+ virtual ~LightStyle();
+
+ void polish(QWidget *widget);
+ void unPolish(QWidget*widget);
+
+ void polish(QApplication *app);
+ void unPolish(QApplication *app);
+
+ void polishPopupMenu(QPopupMenu *menu);
+
+ void drawPushButton(QPushButton *button, QPainter *p);
+ void drawButton(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken = FALSE,
+ const QBrush *fill = 0);
+ void drawBevelButton(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken = FALSE,
+ const QBrush *fill = 0);
+ void getButtonShift(int &x, int &y) const;
+
+ void drawComboButton(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken = FALSE,
+ bool editable = FALSE, bool = TRUE,
+ const QBrush *fill = 0);
+ QRect comboButtonRect(int x, int y, int w, int h) const;
+ QRect comboButtonFocusRect(int x, int y, int w, int h) const;
+
+ void drawIndicator(QPainter *p, int x, int y ,int w, int h,
+ const QColorGroup &g, int state,
+ bool = FALSE, bool = TRUE);
+ QSize indicatorSize() const;
+
+ void drawExclusiveIndicator(QPainter *p, int x, int y ,int w, int h,
+ const QColorGroup &g, bool on,
+ bool = FALSE, bool = TRUE);
+ QSize exclusiveIndicatorSize() const;
+
+ void drawPanel(QPainter * p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken = FALSE,
+ int = 1, const QBrush * = 0);
+
+ void scrollBarMetrics( const QScrollBar *,
+ int &, int &, int &, int & ) const;
+ void drawScrollBarControls(QPainter* p, const QScrollBar* sb,
+ int sliderStart, uint controls,
+ uint activeControl);
+ QStyle::ScrollControl scrollBarPointOver(const QScrollBar *, int, const QPoint& p);
+
+ void drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab, bool selected);
+
+ void drawSlider(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, Qt::Orientation orientation,
+ bool, bool);
+ void drawSliderGroove(QPainter *p, int x, int y, int w, int h,
+ const QColorGroup& g, QCOORD,
+ Qt::Orientation );
+
+ void drawToolBarHandle(QPainter *, const QRect &, Qt::Orientation,
+ bool, const QColorGroup &, bool = FALSE );
+
+ QSize scrollBarExtent() const;
+ int buttonDefaultIndicatorWidth() const;
+ int buttonMargin() const;
+ int sliderThickness() const;
+ int sliderLength() const;
+ int defaultFrameWidth() const;
+
+ int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& );
+ int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& );
+ void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
+ const QPalette& pal,
+ bool act, bool enabled, int x, int y, int w, int h);
+
+protected:
+ bool eventFilter(QObject *, QEvent *);
+};
+
+#endif
+
+#endif // LIGHTSTYLE_H
diff --git a/library/lnkproperties.cpp b/library/lnkproperties.cpp
new file mode 100644
index 0000000..e278cb2
--- a/dev/null
+++ b/library/lnkproperties.cpp
@@ -0,0 +1,289 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "lnkproperties.h"
+#include "lnkpropertiesbase_p.h"
+#include "ir.h"
+
+#include <qpe/applnk.h>
+#include <qpe/global.h>
+#include <qpe/categorywidget.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/filemanager.h>
+#include <qpe/config.h>
+#include <qpe/storage.h>
+#include <qpe/qpemessagebox.h>
+
+#include <qlineedit.h>
+#include <qtoolbutton.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qmessagebox.h>
+#include <qsize.h>
+#include <qcombobox.h>
+#include <qregexp.h>
+
+#include <stdlib.h>
+
+LnkProperties::LnkProperties( AppLnk* l, QWidget* parent )
+ : QDialog( parent, 0, TRUE ), lnk(l), fileSize( 0 )
+{
+ QVBoxLayout *vbox = new QVBoxLayout( this );
+ d = new LnkPropertiesBase( this );
+ vbox->add( d );
+
+ d->docname->setText(l->name());
+ QString inf;
+ if ( l->type().isEmpty() ) {
+ d->type->hide();
+ d->typeLabel->hide();
+ } else {
+ d->type->setText( l->type() );
+ }
+
+ if ( l->comment().isEmpty() ) {
+ d->comment->hide();
+ d->commentLabel->hide();
+ } else {
+ d->comment->setText( l->comment() );
+ }
+
+ connect(d->beam,SIGNAL(clicked()),this,SLOT(beamLnk()));
+ if ( lnk->type().contains('/') ) { // A document? (#### better predicate needed)
+ connect(d->unlink,SIGNAL(clicked()),this,SLOT(unlinkLnk()));
+ connect(d->duplicate,SIGNAL(clicked()),this,SLOT(duplicateLnk()));
+
+ d->docname->setReadOnly( FALSE );
+ d->preload->hide();
+ d->spacer->hide();
+
+ // ### THIS MUST GO, FIX WIERD BUG in QLAYOUT
+ d->categoryEdit->kludge();
+
+ d->categoryEdit->setCategories( lnk->categories(),
+ "Document View",
+ tr("Document View") );
+ setupLocations();
+ } else {
+ d->unlink->hide();
+ d->duplicate->hide();
+ d->beam->hide();
+ d->hline->hide();
+ d->locationLabel->hide();
+ d->locationCombo->hide();
+
+ // Can't edit categories, since the app .desktop files are global,
+ // possibly read-only.
+ d->categoryEdit->hide();
+
+ d->docname->setReadOnly( TRUE );
+
+ if ( l->property("CanFastload") == "0" )
+ d->preload->hide();
+
+ Config cfg("Launcher");
+ cfg.setGroup("Preload");
+ QStringList apps = cfg.readListEntry("Apps",',');
+ d->preload->setChecked( apps.contains(l->exec()) );
+ if ( Global::isBuiltinCommand(lnk->exec()) )
+ d->preload->hide(); // builtins are always fast
+
+ currentLocation = 0; // apps not movable (yet)
+ }
+}
+
+LnkProperties::~LnkProperties()
+{
+}
+
+void LnkProperties::unlinkLnk()
+{
+ if ( QPEMessageBox::confirmDelete( this, tr("Delete"), lnk->name() ) ) {
+ lnk->removeFiles();
+ if ( QFile::exists(lnk->file()) ) {
+ QMessageBox::warning( this, tr("Delete"), tr("File deletion failed.") );
+ } else {
+ reject();
+ }
+ }
+}
+
+void LnkProperties::setupLocations()
+{
+ QFileInfo fi( lnk->file() );
+ fileSize = fi.size();
+ StorageInfo storage;
+ const QList<FileSystem> &fs = storage.fileSystems();
+ QListIterator<FileSystem> it ( fs );
+ QString s;
+ QString homeDir = getenv("HOME");
+ QString hardDiskHome;
+ QString hardDiskPath;
+ int index = 0;
+ currentLocation = -1;
+ for ( ; it.current(); ++it ) {
+ // we add 10k to the file size so we are sure we can also save the desktop file
+ if ( (*it)->availBlocks() * (*it)->blockSize() > fileSize + 10000 ) {
+ if ( (*it)->isRemovable() ||
+ (*it)->disk() == "/dev/mtdblock1" ||
+ (*it)->disk() == "/dev/mtdblock/1" ) {
+ d->locationCombo->insertItem( (*it)->name(), index );
+ locations.append( ((*it)->isRemovable() ? (*it)->path() : homeDir) );
+ if ( lnk->file().contains( (*it)->path() ) ) {
+ d->locationCombo->setCurrentItem( index );
+ currentLocation = index;
+ }
+ index++;
+ } else if ( (*it)->name().contains( "Hard Disk") &&
+ homeDir.contains( (*it)->path() ) &&
+ (*it)->path().length() > hardDiskHome.length() ) {
+ hardDiskHome = (*it)->name();
+ hardDiskPath = (*it)->path();
+ }
+ }
+ }
+ if ( !hardDiskHome.isEmpty() ) {
+ d->locationCombo->insertItem( hardDiskHome );
+ locations.append( hardDiskPath );
+ if ( currentLocation == -1 ) { // assume it's the hard disk
+ d->locationCombo->setCurrentItem( index );
+ currentLocation = index;
+ }
+ }
+}
+
+void LnkProperties::duplicateLnk()
+{
+ // The duplicate takes the new properties.
+ DocLnk newdoc( *((DocLnk *)lnk) );
+ if ( d->docname->text() == lnk->name() )
+ newdoc.setName(tr("Copy of ")+d->docname->text());
+ else
+ newdoc.setName(d->docname->text());
+
+ if ( !copyFile( newdoc ) ) {
+ QMessageBox::warning( this, tr("Duplicate"), tr("File copy failed.") );
+ return;
+ }
+ reject();
+}
+
+bool LnkProperties::moveLnk()
+{
+ DocLnk newdoc( *((DocLnk *)lnk) );
+ newdoc.setName(d->docname->text());
+
+ if ( !copyFile( newdoc ) ) {
+ QMessageBox::warning( this, tr("Details"), tr("Moving Document failed.") );
+ return FALSE;
+ }
+ // remove old lnk
+ lnk->removeFiles();
+
+ return TRUE;
+}
+
+void LnkProperties::beamLnk()
+{
+ Ir ir;
+ DocLnk doc( *((DocLnk *)lnk) );
+ ir.send( doc, doc.comment() );
+}
+
+bool LnkProperties::copyFile( DocLnk &newdoc )
+{
+ const char *linkExtn = ".desktop";
+ QString fileExtn;
+ int extnPos = lnk->file().findRev( '.' );
+ if ( extnPos > 0 )
+ fileExtn = lnk->file().mid( extnPos );
+
+ QString safename = newdoc.name();
+ safename.replace(QRegExp("/"),"_");
+
+ QString fn = locations[ d->locationCombo->currentItem() ]
+ + "/Documents/" + newdoc.type() + "/" + safename;
+ if ( QFile::exists(fn + fileExtn) || QFile::exists(fn + linkExtn) ) {
+ int n=1;
+ QString nn = fn + "_" + QString::number(n);
+ while ( QFile::exists(nn+fileExtn) || QFile::exists(nn+linkExtn) ) {
+ n++;
+ nn = fn + "_" + QString::number(n);
+ }
+ fn = nn;
+ }
+ newdoc.setFile( fn + fileExtn );
+ newdoc.setLinkFile( fn + linkExtn );
+
+ // Copy file
+ FileManager fm;
+ if ( !fm.copyFile( *lnk, newdoc ) )
+ return FALSE;
+ return TRUE;
+}
+
+void LnkProperties::done(int ok)
+{
+ if ( ok ) {
+ bool changed=FALSE;
+ if ( lnk->name() != d->docname->text() ) {
+ lnk->setName(d->docname->text());
+ changed=TRUE;
+ }
+ if ( d->categoryEdit->isVisible() ) {
+ QArray<int> tmp = d->categoryEdit->newCategories();
+ if ( lnk->categories() != tmp ) {
+ lnk->setCategories( tmp );
+ changed = TRUE;
+ }
+ }
+ if ( d->preload->isHidden() && d->locationCombo->currentItem() != currentLocation ) {
+ moveLnk();
+ } else if ( changed ) {
+ lnk->writeLink();
+ }
+
+ if ( !d->preload->isHidden() ) {
+ Config cfg("Launcher");
+ cfg.setGroup("Preload");
+ QStringList apps = cfg.readListEntry("Apps",',');
+ QString exe = lnk->exec();
+ if ( apps.contains(exe) != d->preload->isChecked() ) {
+ if ( d->preload->isChecked() ) {
+ apps.append(exe);
+ QCopEnvelope e("QPE/Application/"+exe.local8Bit(),
+ "enablePreload()");
+ } else {
+ apps.remove(exe);
+ QCopEnvelope e("QPE/Application/"+exe.local8Bit(),
+ "quitIfInvisible()");
+ }
+ cfg.writeEntry("Apps",apps,',');
+ }
+ }
+ }
+ QDialog::done( ok );
+}
+
diff --git a/library/lnkproperties.h b/library/lnkproperties.h
new file mode 100644
index 0000000..501692e
--- a/dev/null
+++ b/library/lnkproperties.h
@@ -0,0 +1,60 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef LNKPROPERTIES_H
+#define LNKPROPERTIES_H
+#include <qstringlist.h>
+#include <qdialog.h>
+
+class AppLnk;
+class QListViewItem;
+class DocLnk;
+
+class LnkPropertiesBase;
+
+class LnkProperties : public QDialog
+{
+ Q_OBJECT
+
+public:
+ LnkProperties( AppLnk* lnk, QWidget* parent = 0 );
+ ~LnkProperties();
+
+ void done(int);
+private slots:
+ void beamLnk();
+ void unlinkLnk();
+ void duplicateLnk();
+
+signals:
+ void select(const AppLnk *);
+
+private:
+ void setupLocations();
+ bool moveLnk();
+ bool copyFile( DocLnk &newdoc );
+
+ AppLnk* lnk;
+ int fileSize;
+ int currentLocation;
+ QStringList locations;
+ LnkPropertiesBase *d;
+};
+
+#endif // LNKPROPERTIES_H
diff --git a/library/lnkpropertiesbase_p.ui b/library/lnkpropertiesbase_p.ui
new file mode 100644
index 0000000..d99b228
--- a/dev/null
+++ b/library/lnkpropertiesbase_p.ui
@@ -0,0 +1,399 @@
+<!DOCTYPE UI><UI>
+<class>LnkPropertiesBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Form1</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>297</width>
+ <height>449</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Details</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QFrame</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Frame8</cstring>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>NoFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Plain</enum>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>3</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget row="6" column="0" rowspan="1" colspan="2" >
+ <class>CategoryWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>categoryEdit</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget row="5" column="0" rowspan="1" colspan="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>spacer</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>commentLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Comment:</string>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>typeLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>NoFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Type:</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>locationCombo</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>docname</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>MShadow</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>locationLabel</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Location:</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>type</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>comment</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget row="4" column="0" rowspan="1" colspan="2" >
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>preload</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Fast load (consumes memory)</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget>
+ <class>Line</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>hline</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Sunken</enum>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ <widget>
+ <class>QFrame</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Frame9</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Plain</enum>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>3</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>5</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>unlink</cstring>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Delete</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>duplicate</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Copy</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>beam</cstring>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Beam</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<customwidgets>
+ <customwidget>
+ <class>CategoryWidget</class>
+ <header location="global">qpe/categorywidget.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>7</hordata>
+ <verdata>7</verdata>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ </customwidget>
+</customwidgets>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </image>
+</images>
+<tabstops>
+ <tabstop>docname</tabstop>
+ <tabstop>preload</tabstop>
+ <tabstop>locationCombo</tabstop>
+ <tabstop>unlink</tabstop>
+ <tabstop>duplicate</tabstop>
+ <tabstop>beam</tabstop>
+</tabstops>
+</UI>
diff --git a/library/menubutton.cpp b/library/menubutton.cpp
new file mode 100644
index 0000000..c34383a
--- a/dev/null
+++ b/library/menubutton.cpp
@@ -0,0 +1,187 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "menubutton.h"
+#include <qpopupmenu.h>
+
+/*!
+ \class MenuButton menubutton.h
+ \brief The MenuButton class is a pushbutton with a menu.
+
+ Similar in function to a QComboBox.
+*/
+
+/*!
+ \fn void MenuButton::selected(int index)
+
+ This signal is emitted when the item at \a index is selected.
+*/
+
+/*!
+ \fn void MenuButton::selected(const QString& text)
+
+ This signal is emitted when the item with the given \a text is selected.
+*/
+
+
+/*!
+ Constructs a MenuButton with the given \a items added (see insertItems()).
+ The standard \a parent an \a name arguments are passed to the base class.
+*/
+MenuButton::MenuButton( const QStringList& items, QWidget* parent, const char* name) :
+ QPushButton(parent,name)
+{
+ init();
+ insertItems(items);
+}
+
+/*!
+ Constructs an empty MenuButton.
+ The standard \a parent an \a name arguments are passed to the base class.
+
+ \sa insertItems()
+*/
+MenuButton::MenuButton( QWidget* parent, const char* name) :
+ QPushButton(parent,name)
+{
+ init();
+}
+
+void MenuButton::init()
+{
+ setAutoDefault(FALSE);
+ pop = new QPopupMenu(this);
+ nitems=0;
+ connect(pop, SIGNAL(activated(int)), this, SLOT(select(int)));
+ setPopup(pop);
+ //setPopupDelay(0);
+}
+
+/*!
+ Removes all items from the button and menu.
+*/
+void MenuButton::clear()
+{
+ delete pop;
+ init();
+}
+
+/*!
+ Inserts string \a items into the menu. The string "--" represents
+ a separator.
+*/
+void MenuButton::insertItems( const QStringList& items )
+{
+ QStringList::ConstIterator it=items.begin();
+ for (; it!=items.end(); ++it) {
+ if ( (*it) == "--" )
+ insertSeparator();
+ else
+ insertItem(*it);
+ }
+}
+
+/*!
+ Inserts an \a icon and \a text into the menu.
+*/
+void MenuButton::insertItem( const QIconSet& icon, const QString& text=QString::null )
+{
+ pop->insertItem(icon, text, nitems++);
+ if ( nitems==1 ) select(0);
+}
+
+/*!
+ Inserts \a text into the menu.
+*/
+void MenuButton::insertItem( const QString& text )
+{
+ pop->insertItem(text, nitems++);
+ if ( nitems==1 ) select(0);
+}
+
+/*!
+ Inserts a visual separator into the menu.
+*/
+void MenuButton::insertSeparator()
+{
+ pop->insertSeparator();
+}
+
+/*!
+ Selects the items with text \a s.
+*/
+void MenuButton::select(const QString& s)
+{
+ for (int i=0; i<nitems; i++) {
+ if ( pop->text(i) == s ) {
+ select(i);
+ break;
+ }
+ }
+}
+
+/*!
+ Selects the item at index \a s.
+*/
+void MenuButton::select(int s)
+{
+ cur = s;
+ updateLabel();
+ if ( pop->iconSet(cur) )
+ setIconSet(*pop->iconSet(cur));
+ emit selected(cur);
+ emit selected(currentText());
+}
+
+/*!
+ Returns the index of the current item.
+*/
+int MenuButton::currentItem() const
+{
+ return cur;
+}
+
+/*!
+ Returns the text of the current item.
+*/
+QString MenuButton::currentText() const
+{
+ return pop->text(cur);
+}
+
+/*!
+ Sets the label. If \a label is empty, the
+ current item text is displayed, otherwise \a label should contain
+ "%1", which will be replaced by the current item text.
+*/
+void MenuButton::setLabel(const QString& label)
+{
+ lab = label;
+ updateLabel();
+}
+
+void MenuButton::updateLabel()
+{
+ QString t = pop->text(cur);
+ if ( !lab.isEmpty() )
+ t = lab.arg(t);
+ setText(t);
+}
+
diff --git a/library/menubutton.h b/library/menubutton.h
new file mode 100644
index 0000000..e9c91b7
--- a/dev/null
+++ b/library/menubutton.h
@@ -0,0 +1,63 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MENUBUTTON_H
+#define MENUBUTTON_H
+
+#include <qpushbutton.h>
+#include <qstringlist.h>
+
+class MenuButton : public QPushButton {
+ Q_OBJECT
+public:
+ MenuButton( QWidget* parent, const char* name=0);
+ MenuButton( const QStringList& items, QWidget* parent, const char* name=0);
+
+ void clear();
+
+ int currentItem() const;
+ QString currentText() const;
+
+ void insertItems( const QStringList& items );
+ void insertItem( const QIconSet& icon, const QString& text=QString::null );
+ void insertItem( const QString& text );
+ void insertSeparator();
+
+ void setLabel(const QString& label);
+
+signals:
+ void selected(int);
+ void selected(const QString&);
+
+public slots:
+ void select(int);
+ void select(const QString&);
+
+private:
+ void init();
+ QStringList txts;
+ QPopupMenu* pop;
+ int nitems;
+ int cur;
+ QString lab;
+ void updateLabel();
+};
+
+#endif
+
diff --git a/library/mimetype.cpp b/library/mimetype.cpp
new file mode 100644
index 0000000..c6a4453
--- a/dev/null
+++ b/library/mimetype.cpp
@@ -0,0 +1,204 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "mimetype.h"
+#include "applnk.h"
+#include "resource.h"
+#include "qpeapplication.h"
+#include <qfile.h>
+#include <qdict.h>
+#include <qregexp.h>
+#include <qstringlist.h>
+#include <qtextstream.h>
+#include <qmap.h>
+
+class MimeTypeData {
+public:
+ MimeTypeData(const QString& i, const AppLnk& lnk, const QString& icon ) :
+ id(i),
+ desc(lnk.name()+" document"),
+ app(lnk)
+ {
+ if ( icon.isEmpty() ) {
+ regIcon = lnk.pixmap();
+ bigIcon = lnk.bigPixmap();
+ } else {
+ QImage unscaledIcon = Resource::loadImage( icon );
+ regIcon.convertFromImage( unscaledIcon.smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ) );
+ bigIcon.convertFromImage( unscaledIcon.smoothScale( AppLnk::bigIconSize(), AppLnk::bigIconSize() ) );
+ }
+ }
+ QString id;
+ QString desc;
+ QPixmap regIcon;
+ QPixmap bigIcon;
+ AppLnk app;
+};
+
+class MimeType::Dict : public QDict<MimeTypeData> {
+public:
+ Dict() {}
+};
+
+MimeType::Dict* MimeType::d=0;
+static QMap<QString,QString> *typeFor = 0;
+
+MimeType::Dict& MimeType::dict()
+{
+ if ( !d ) {
+ d = new Dict;
+ d->setAutoDelete(TRUE);
+ }
+ return *d;
+}
+
+MimeType::MimeType( const QString& ext_or_id )
+{
+ init(ext_or_id);
+}
+
+MimeType::MimeType( const DocLnk& lnk )
+{
+ init(lnk.type());
+}
+
+QString MimeType::id() const
+{
+ return i;
+}
+
+QString MimeType::description() const
+{
+ MimeTypeData* d = data(i);
+ return d ? d->desc : QString::null;
+}
+
+QPixmap MimeType::pixmap() const
+{
+ MimeTypeData* d = data(i);
+ return d ? d->regIcon : QPixmap();
+}
+
+QPixmap MimeType::bigPixmap() const
+{
+ MimeTypeData* d = data(i);
+ return d ? d->bigIcon : QPixmap();
+}
+
+const AppLnk* MimeType::application() const
+{
+ MimeTypeData* d = data(i);
+ return d ? &d->app : 0;
+}
+
+void MimeType::registerApp( const AppLnk& lnk )
+{
+ QStringList list = lnk.mimeTypes();
+ QStringList icons = lnk.mimeTypeIcons();
+ QStringList::ConstIterator icon = icons.begin();
+ for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it, ++icon) {
+ MimeTypeData *item = new MimeTypeData( *it, lnk, *icon );
+ dict().replace( *it, item );
+ }
+}
+
+void MimeType::clear()
+{
+ delete d;
+ d = 0;
+}
+
+void MimeType::loadExtensions()
+{
+ if ( !typeFor ) {
+ typeFor = new QMap<QString,QString>;
+ loadExtensions("/etc/mime.types");
+ loadExtensions(QPEApplication::qpeDir()+"etc/mime.types");
+ }
+}
+
+void MimeType::loadExtensions(const QString& filename)
+{
+ QFile file(filename);
+ if ( file.open(IO_ReadOnly) ) {
+ QTextStream in(&file);
+ QRegExp space("[ \t]+");
+ while (!in.atEnd()) {
+ QStringList tokens = QStringList::split(space, in.readLine());
+ QStringList::ConstIterator it = tokens.begin();
+ if ( it != tokens.end() ) {
+ QString id = *it; ++it;
+ while (it != tokens.end()) {
+ (*typeFor)[*it] = id;
+ ++it;
+ }
+ }
+ }
+ }
+}
+
+void MimeType::init( const QString& ext_or_id )
+{
+ if ( ext_or_id[0] != '/' && ext_or_id.contains('/') ) {
+ i = ext_or_id.lower();
+ } else {
+ loadExtensions();
+ int dot = ext_or_id.findRev('.');
+ QString ext = dot >= 0 ? ext_or_id.mid(dot+1) : ext_or_id;
+ i = (*typeFor)[ext.lower()];
+ if ( i.isNull() )
+ i = "application/octet-stream";
+ }
+ static bool appsUpdated = FALSE;
+ if ( !appsUpdated ) {
+ appsUpdated = TRUE;
+ updateApplications();
+ }
+}
+
+MimeTypeData* MimeType::data(const QString& id)
+{
+ MimeTypeData* d = dict()[id];
+ if ( !d ) {
+ int s = id.find('/');
+ QString idw = id.left(s)+"/*";
+ d = dict()[idw];
+ }
+ return d;
+}
+
+QString MimeType::appsFolderName()
+{
+ return QPEApplication::qpeDir() + "apps";
+}
+
+void MimeType::updateApplications()
+{
+ clear();
+ AppLnkSet apps( appsFolderName() );
+ updateApplications(&apps);
+}
+
+void MimeType::updateApplications(AppLnkSet* folder)
+{
+ for ( QListIterator<AppLnk> it( folder->children() ); it.current(); ++it ) {
+ registerApp(*it.current());
+ }
+}
diff --git a/library/mimetype.h b/library/mimetype.h
new file mode 100644
index 0000000..58725d7
--- a/dev/null
+++ b/library/mimetype.h
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MIMETYPE_H
+#define MIMETYPE_H
+
+#include <qstring.h>
+#include <qpixmap.h>
+
+class AppLnk;
+class DocLnk;
+class QStringList;
+class MimeTypeData;
+class AppLnkSet;
+
+class MimeType
+{
+public:
+ MimeType( const QString& ext_or_id );
+ MimeType( const DocLnk& );
+
+ QString id() const;
+ QString description() const;
+ QPixmap pixmap() const;
+ QPixmap bigPixmap() const;
+
+ const AppLnk* application() const;
+
+ static QString appsFolderName();
+ static void updateApplications();
+
+ // These shouldn't be needed
+ static void clear();
+ static void registerApp( const AppLnk& );
+
+private:
+ static void updateApplications(AppLnkSet* folder);
+ static void loadExtensions();
+ static void loadExtensions(const QString&);
+ void init( const QString& ext_or_id );
+ class Dict;
+ static Dict* d;
+ static Dict& dict();
+ static MimeTypeData* data(const QString& id);
+ QString i;
+};
+
+#endif
diff --git a/library/mkinlinepics b/library/mkinlinepics
new file mode 100755
index 0000000..6d89a6a
--- a/dev/null
+++ b/library/mkinlinepics
@@ -0,0 +1,3 @@
+# NOTE: Only qembed in Qt > 2.3.1 includes the #ifdef _WS_QWS_, so if you
+# re-run this, be sure to use such a version, or to add it manually.
+qembed --images ../pics/inline/*.* >inlinepics_p.h
diff --git a/library/network.cpp b/library/network.cpp
new file mode 100644
index 0000000..7d51016
--- a/dev/null
+++ b/library/network.cpp
@@ -0,0 +1,436 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qpe/network.h"
+#include "qpe/networkinterface.h"
+#include "qpe/global.h"
+#include "qpe/config.h"
+#include "qpe/resource.h"
+#include "qpe/qpeapplication.h"
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/qlibrary.h>
+
+#include <qlistbox.h>
+#include <qdir.h>
+#include <qlayout.h>
+#include <qdict.h>
+#include <qtranslator.h>
+
+#include <stdlib.h>
+
+class NetworkEmitter : public QCopChannel {
+ Q_OBJECT
+public:
+ NetworkEmitter() : QCopChannel("QPE/Network",qApp)
+ {
+ }
+
+ void receive(const QCString &msg, const QByteArray&)
+ {
+ if ( msg == "choicesChanged()" )
+ emit changed();
+ }
+
+signals:
+ void changed();
+};
+
+/*!
+ \internal
+
+ Requests that the service \a choice be started. The \a password is
+ the password to use if required.
+*/
+void Network::start(const QString& choice, const QString& password)
+{
+ QCopEnvelope e("QPE/Network", "start(QString,QString)");
+ e << choice << password;
+}
+
+/*!
+ \class Network network.h
+ \brief The Network class provides network access functionality.
+*/
+
+// copy the proxy settings of the active config over to the Proxies.conf file
+/*!
+ \internal
+*/
+void Network::writeProxySettings( Config &cfg )
+{
+ Config proxy( Network::settingsDir() + "/Proxies.conf", Config::File );
+ proxy.setGroup("Properties");
+ cfg.setGroup("Proxy");
+ proxy.writeEntry("type", cfg.readEntry("type") );
+ proxy.writeEntry("autoconfig", cfg.readEntry("autoconfig") );
+ proxy.writeEntry("httphost", cfg.readEntry("httphost") );
+ proxy.writeEntry("httpport", cfg.readEntry("httpport") );
+ proxy.writeEntry("ftphost", cfg.readEntry("ftphost") );
+ proxy.writeEntry("ftpport", cfg.readEntry("ftpport") );
+ proxy.writeEntry("noproxies", cfg.readEntry("noproxies") );
+ cfg.setGroup("Properties");
+}
+
+
+
+/*!
+ \internal
+
+ Stops the current network service.
+*/
+void Network::stop()
+{
+ QCopEnvelope e("QPE/Network", "stop()");
+}
+
+static NetworkEmitter *emitter = 0;
+
+/*!
+ \internal
+*/
+void Network::connectChoiceChange(QObject* receiver, const char* slot)
+{
+ if ( !emitter )
+ emitter = new NetworkEmitter;
+ QObject::connect(emitter,SIGNAL(changed()),receiver,slot);
+}
+
+/*!
+ \internal
+*/
+QString Network::settingsDir()
+{
+ return Global::applicationFileName("Network", "modules");
+}
+
+/*!
+ \internal
+*/
+QStringList Network::choices(QListBox* lb, const QString& dir)
+{
+ QStringList list;
+
+ if ( lb )
+ lb->clear();
+
+ QString adir = dir.isEmpty() ? settingsDir() : dir;
+ QDir settingsdir(adir);
+ settingsdir.mkdir(adir);
+
+ QStringList files = settingsdir.entryList("*.conf");
+ for (QStringList::ConstIterator it=files.begin(); it!=files.end(); ++it ) {
+ QString filename = settingsdir.filePath(*it);
+ Config cfg(filename, Config::File);
+ cfg.setGroup("Info");
+ if ( lb )
+ lb->insertItem(Resource::loadPixmap("Network/" + cfg.readEntry("Type")),
+ cfg.readEntry("Name"));
+ list.append(filename);
+ }
+
+ return list;
+}
+
+class NetworkServer : public QCopChannel {
+ Q_OBJECT
+public:
+ NetworkServer(QObject* parent) : QCopChannel("QPE/Network",parent)
+ {
+ up = FALSE;
+ examineNetworks( TRUE );
+ QCopChannel* card = new QCopChannel("QPE/Card",parent);
+ connect(card,SIGNAL(received(const QCString &, const QByteArray&)),
+ this,SLOT(cardMessage(const QCString &, const QByteArray&)));
+ }
+
+ ~NetworkServer()
+ {
+ stop();
+ }
+
+ bool networkOnline() const
+ {
+ return up;
+ }
+
+private:
+ void receive(const QCString &msg, const QByteArray& data)
+ {
+ if ( msg == "start(QString,QString)" ) {
+ QDataStream stream(data,IO_ReadOnly);
+ QString file,password;
+ stream >> file >> password;
+ if ( file.isEmpty() ) {
+ QStringList l = Network::choices();
+ for (QStringList::ConstIterator i=l.begin(); i!=l.end(); ++i) {
+ Config cfg(*i,Config::File);
+ cfg.setGroup("Info");
+ QString type = cfg.readEntry("Type");
+ NetworkInterface* plugin = Network::loadPlugin(type);
+ cfg.setGroup("Properties");
+ if ( plugin && plugin->isAvailable(cfg) ) {
+ file = *i;
+ break;
+ }
+ }
+ if ( file.isEmpty() ) {
+ QCopEnvelope("QPE/Network", "failed()");
+ return;
+ }
+ }
+ start(file,password);
+ } else if ( msg == "stop()" ) {
+ stop();
+ } else if ( msg == "choicesChanged()" ) {
+ examineNetworks();
+ }
+ }
+
+private slots:
+ void cardMessage(const QCString &msg, const QByteArray&)
+ {
+ if ( msg == "stabChanged()" )
+ examineNetworks();
+ }
+
+private:
+ void examineNetworks( bool firstStart = FALSE )
+ {
+ QStringList l = Network::choices();
+ bool wasup = up; up=FALSE;
+ QStringList pavailable = available;
+ available.clear();
+ for (QStringList::ConstIterator it=l.begin(); it!=l.end(); ++it) {
+ Config cfg(*it,Config::File);
+ cfg.setGroup("Info");
+ QString type = cfg.readEntry("Type");
+ NetworkInterface* plugin = Network::loadPlugin(type);
+ cfg.setGroup("Properties");
+ if ( plugin ) {
+ if ( plugin->isActive(cfg) ) {
+ up = TRUE;
+ if ( firstStart )
+ plugin->start( cfg );
+ }
+ if ( plugin->isAvailable(cfg) )
+ available.append(*it);
+ }
+ }
+
+ // Try to work around unreproducible bug whereby
+ // the netmon applet shows wrong state.
+ bool reannounce = wait<0;
+
+ if ( available != pavailable || reannounce ) {
+ QCopEnvelope e("QPE/Network", "available(QStringList)");
+ e << available;
+ }
+ if ( up != wasup || reannounce ) {
+ QCopEnvelope("QPE/Network", up ? "up()" : "down()");
+ }
+ }
+
+ void start( const QString& file, const QString& password )
+ {
+ if ( !current.isEmpty() )
+ stop();
+ current = QString::null;
+ Config cfg(file, Config::File);
+ cfg.setGroup("Info");
+ QString type = cfg.readEntry("Type");
+ NetworkInterface* plugin = Network::loadPlugin(type);
+ bool started = FALSE;
+ if ( plugin ) {
+ cfg.setGroup("Properties");
+ if ( plugin->start(cfg,password) ) {
+ Network::writeProxySettings( cfg );
+ current = file;
+ wait=0;
+ startTimer(400);
+ started = TRUE;
+ }
+ }
+ if ( !started ) {
+ QCopEnvelope("QPE/Network", "failed()");
+ }
+ }
+
+ void stop()
+ {
+ bool stopped = FALSE;
+ if ( !current.isEmpty() ) {
+ Config cfg(current, Config::File);
+ cfg.setGroup("Info");
+ QString type = cfg.readEntry("Type");
+ NetworkInterface* plugin = Network::loadPlugin(type);
+ if ( plugin ) {
+ cfg.setGroup("Properties");
+ if ( plugin->stop(cfg) ) {
+ current = QString::null;
+ wait=0;
+ startTimer(400);
+ stopped = TRUE;
+ }
+ }
+ }
+ if ( !stopped ) {
+ QCopEnvelope("QPE/Network", "failed()");
+ }
+ }
+
+ void timerEvent(QTimerEvent*)
+ {
+ examineNetworks();
+ if ( wait >= 0 ) {
+ if ( up == !current.isNull() ) {
+ // done
+ killTimers();
+ if ( up ) {
+ startTimer(3000); // monitor link
+ wait = -1;
+ }
+ } else {
+ wait++;
+ if ( wait == 600 ) {
+ killTimers(); // forget about it after 240 s
+ QCopEnvelope("QPE/Network", "failed()");
+ up = !current.isNull();
+ }
+ }
+ } else if ( !up ) {
+ killTimers();
+ }
+ }
+
+private:
+ QStringList available;
+ QString current;
+ bool up;
+ int wait;
+};
+
+static NetworkServer* ns=0;
+
+/*!
+ \internal
+*/
+QString Network::serviceName(const QString& service)
+{
+ Config cfg(service, Config::File);
+ cfg.setGroup("Info");
+ return cfg.readEntry("Name");
+}
+
+/*!
+ \internal
+*/
+QString Network::serviceType(const QString& service)
+{
+ Config cfg(service, Config::File);
+ cfg.setGroup("Info");
+ return cfg.readEntry("Type");
+}
+
+/*!
+ \internal
+*/
+bool Network::serviceNeedsPassword(const QString& service)
+{
+ Config cfg(service,Config::File);
+ cfg.setGroup("Info");
+ QString type = cfg.readEntry("Type");
+ NetworkInterface* plugin = Network::loadPlugin(type);
+ cfg.setGroup("Properties");
+ return plugin ? plugin->needPassword(cfg) : FALSE;
+}
+
+/*!
+ \internal
+*/
+bool Network::networkOnline()
+{
+ return ns && ns->networkOnline();
+}
+
+/*!
+ \internal
+*/
+void Network::createServer(QObject* parent)
+{
+ ns = new NetworkServer(parent);
+}
+
+/*!
+ \internal
+*/
+int Network::addStateWidgets(QWidget* parent)
+{
+ int n=0;
+ QStringList l = Network::choices();
+ QVBoxLayout* vb = new QVBoxLayout(parent);
+ for (QStringList::ConstIterator it=l.begin(); it!=l.end(); ++it) {
+ Config cfg(*it,Config::File);
+ cfg.setGroup("Info");
+ QString type = cfg.readEntry("Type");
+ NetworkInterface* plugin = Network::loadPlugin(type);
+ cfg.setGroup("Properties");
+ if ( plugin ) {
+ QWidget* w;
+ if ( (w=plugin->addStateWidget(parent,cfg)) ) {
+ n++;
+ vb->addWidget(w);
+ }
+ }
+ }
+ return n;
+}
+
+static QDict<NetworkInterface> *ifaces;
+
+/*!
+ \internal
+*/
+NetworkInterface* Network::loadPlugin(const QString& type)
+{
+#ifndef QT_NO_COMPONENT
+ if ( !ifaces ) ifaces = new QDict<NetworkInterface>;
+ NetworkInterface *iface = ifaces->find(type);
+ if ( !iface ) {
+ QString libfile = QPEApplication::qpeDir() + "/plugins/network/lib" + type + ".so";
+ QLibrary lib(libfile);
+ if ( !lib.queryInterface( IID_Network, (QUnknownInterface**)&iface ) == QS_OK )
+ return 0;
+ ifaces->insert(type,iface);
+ QString lang = getenv( "LANG" );
+ QTranslator * trans = new QTranslator(qApp);
+ QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/lib"+type+".qm";
+ if ( trans->load( tfn ))
+ qApp->installTranslator( trans );
+ else
+ delete trans;
+
+ }
+ return iface;
+#else
+ return 0;
+#endif
+}
+
+#include "network.moc"
diff --git a/library/network.h b/library/network.h
new file mode 100644
index 0000000..cee67af
--- a/dev/null
+++ b/library/network.h
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef NETWORK_H
+#define NETWORK_H
+
+#include <qstringlist.h>
+class QListBox;
+class QObject;
+class QWidget;
+struct NetworkInterface;
+class Config;
+
+class Network {
+public:
+ static void start(const QString& service=QString::null, const QString& password=QString::null);
+ static void stop();
+
+ static QString settingsDir();
+ static QString serviceName(const QString& service);
+ static QString serviceType(const QString& service);
+ static bool serviceNeedsPassword(const QString& service);
+ static void connectChoiceChange(QObject* receiver, const char* slot);
+ static QStringList choices(QListBox* = 0, const QString& dir=QString::null);
+ static void writeProxySettings( Config &cfg );
+
+ static NetworkInterface* loadPlugin(const QString& type);
+
+ static int addStateWidgets(QWidget* parent);
+
+ // Server only
+ static void createServer(QObject* parent);
+ static bool networkOnline();
+};
+
+#endif
diff --git a/library/networkinterface.cpp b/library/networkinterface.cpp
new file mode 100644
index 0000000..56a0e5b
--- a/dev/null
+++ b/library/networkinterface.cpp
@@ -0,0 +1,104 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "networkinterface.h"
+#include "network.h"
+#include "config.h"
+#include <stdio.h>
+
+QString NetworkInterface::device( Config& cfg ) const
+{
+ return cfg.readEntry("Device");
+}
+
+bool NetworkInterface::isActive( Config& cfg ) const
+{
+ QString dev = device(cfg);
+ if ( dev.isEmpty() )
+ return FALSE;
+ QString dev0 = dev+'0';
+
+ FILE* f;
+ f = fopen("/proc/net/dev", "r");
+ if ( f ) {
+ char line[1024];
+ char devname[80];
+ while ( fgets( line, 1024, f ) ) {
+ if ( sscanf(line," %[^:]:", devname)==1 )
+ {
+ if ( devname == dev || devname == dev0 ) {
+ fclose(f);
+ Network::writeProxySettings( cfg );
+ return TRUE;
+ }
+ }
+ }
+ fclose(f);
+ }
+ return FALSE;
+}
+
+QString NetworkInterface::cardType( Config& cfg ) const
+{
+ return cfg.readEntry("CardType");
+}
+
+bool NetworkInterface::isAvailable( Config& cfg ) const
+{
+ QString ct = cardType(cfg);
+ if ( ct.isEmpty() )
+ return FALSE;
+
+ FILE* f = fopen("/var/run/stab", "r");
+ if (!f) f = fopen("/var/state/pcmcia/stab", "r");
+ if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
+
+ if ( f ) {
+ char line[1024];
+ char devtype[80];
+ while ( fgets( line, 1024, f ) ) {
+ if ( sscanf(line,"%*d %s %*s", devtype )==1 )
+ {
+ if ( ct == devtype ) {
+ fclose(f);
+ return TRUE;
+ }
+ }
+ }
+ fclose(f);
+ }
+
+ return FALSE;
+}
+
+bool NetworkInterface::start( Config& cfg, const QString& /*password*/ )
+{
+ return start(cfg);
+}
+
+bool NetworkInterface::needPassword( Config& ) const
+{
+ return FALSE;
+}
+
+QWidget* NetworkInterface::addStateWidget( QWidget*, Config& ) const
+{
+ return 0;
+}
diff --git a/library/networkinterface.h b/library/networkinterface.h
new file mode 100644
index 0000000..d2ca5ab
--- a/dev/null
+++ b/library/networkinterface.h
@@ -0,0 +1,54 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef NETWORKINTERFACE_H
+#define NETWORKINTERFACE_H
+
+#include <qnamespace.h>
+#include <qstring.h>
+#include <qpe/qcom.h>
+
+#ifndef QT_NO_COMPONENT
+// {09794290-69d5-4c42-8a53-230cf2e53c50}
+# ifndef IID_Network
+# define IID_Network QUuid( 0x09794290, 0x69d5, 0x4c42, 0x8a, 0x53, 0x23, 0x0c, 0xf2, 0xe5, 0x3c, 0x50)
+# endif
+#endif
+
+class QWidget;
+class Config;
+
+struct NetworkInterface : public QUnknownInterface
+{
+ virtual bool doProperties( QWidget *parent, Config& ) = 0;
+ virtual bool create( Config& ) = 0;
+ virtual bool remove( Config& ) = 0;
+ virtual QString device( Config& ) const;
+ virtual QString cardType( Config& ) const;
+ virtual bool isActive( Config& ) const;
+ virtual bool isAvailable( Config& ) const;
+ virtual bool start( Config& ) = 0;
+ virtual bool start( Config&, const QString& password );
+ virtual bool stop( Config& ) = 0;
+ virtual bool needPassword( Config& ) const;
+ virtual QWidget* addStateWidget( QWidget* parent, Config& ) const;
+};
+
+#endif
+
diff --git a/library/password.cpp b/library/password.cpp
new file mode 100644
index 0000000..3be6efe
--- a/dev/null
+++ b/library/password.cpp
@@ -0,0 +1,323 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "password.h"
+#include "config.h"
+#include "global.h"
+#include "backend/contact.h"
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qtextview.h>
+#include <qstring.h>
+#include <qapplication.h>
+#include <qfile.h>
+#include <qwindowsystem_qws.h>
+
+#include <qdialog.h>
+
+#include <unistd.h> //for sleep
+#include "passwordbase_p.h"
+
+class PasswordDialog : public PasswordBase
+{
+ Q_OBJECT
+
+public:
+ PasswordDialog( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~PasswordDialog();
+
+ void clear();
+ void setPrompt( const QString& );
+
+signals:
+ void passwordEntered( const QString& );
+
+protected:
+ bool eventFilter( QObject*, QEvent* );
+ void keyPressEvent( QKeyEvent * );
+
+private:
+ void input( QString );
+ friend class Password;
+ QString text;
+};
+
+
+extern "C" char *crypt(const char *key, const char *salt);
+static QString qcrypt(const QString& k, const char *salt)
+{
+ return QString::fromUtf8(crypt(k.utf8(),salt));
+}
+
+/*
+ * Constructs a PasswordDialog which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ */
+PasswordDialog::PasswordDialog( QWidget* parent, const char* name, WFlags fl )
+ : PasswordBase( parent, name, fl )
+{
+ button_0->installEventFilter( this );
+ button_1->installEventFilter( this );
+ button_2->installEventFilter( this );
+ button_3->installEventFilter( this );
+ button_4->installEventFilter( this );
+ button_5->installEventFilter( this );
+ button_6->installEventFilter( this );
+ button_7->installEventFilter( this );
+ button_8->installEventFilter( this );
+ button_9->installEventFilter( this );
+ button_OK->installEventFilter( this );
+ setFocus();
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+PasswordDialog::~PasswordDialog()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+
+
+/*!
+ \reimp
+*/
+
+bool PasswordDialog::eventFilter( QObject*o, QEvent*e )
+{
+ if ( e->type() == QEvent::MouseButtonRelease ) {
+ if ( o == button_OK ) {
+ emit passwordEntered( text );
+ } else {
+ QLabel *l = (QLabel*)o;
+ input(l->text());
+ }
+ }
+ return FALSE;
+}
+
+
+/*!
+ \reimp
+*/
+
+void PasswordDialog::keyPressEvent( QKeyEvent * )
+{
+#if 0
+ if ( e->key() == Key_Enter || e->key() == Key_Return )
+ emit passwordEntered( text );
+ else
+ input( e->text() );
+#endif
+}
+
+
+/*!
+
+*/
+
+void PasswordDialog::input( QString c )
+{
+ text += c;
+ display->setText( text );
+}
+
+/*!
+
+*/
+
+void PasswordDialog::setPrompt( const QString& s )
+{
+ prompt->setText( s );
+}
+
+void PasswordDialog::clear()
+{
+ text = "";
+ input("");
+}
+
+class PasswdDlg : public QDialog
+{
+public:
+ PasswdDlg( QWidget *parent, const char * name, bool modal, bool fullscreen = FALSE )
+ : QDialog( parent, name, modal, fullscreen ? WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop : 0 ),
+ modl(modal)
+ {
+ passw = new PasswordDialog( this );
+
+ if ( fullscreen ) {
+ QRect desk = qApp->desktop()->geometry();
+ setGeometry( 0, 0, desk.width(), desk.height() );
+ }
+
+ connect( passw, SIGNAL(passwordEntered(const QString&)),
+ this, SLOT(accept()) );
+ }
+
+ void resizeEvent( QResizeEvent * )
+ {
+ passw->resize( size() );
+ }
+
+ void reset()
+ {
+ passw->clear();
+ }
+
+ void execNonModal()
+ {
+ if ( !modl ) {
+ reset();
+ showFullScreen();
+ do {
+ qApp->enter_loop();
+ } while (result()!=1);
+ }
+ }
+
+ void accept()
+ {
+ if ( !modl )
+ qApp->exit_loop();
+ QDialog::accept();
+ }
+
+ PasswordDialog *passw;
+ bool modl;
+};
+
+class OwnerDlg : public QDialog
+{
+public:
+
+ OwnerDlg( QWidget *parent, const char * name, Contact c,
+ bool modal, bool fullscreen = FALSE )
+ : QDialog( parent, name, modal,
+ fullscreen ?
+ WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop : 0 )
+ {
+ if ( fullscreen ) {
+ QRect desk = qApp->desktop()->geometry();
+ setGeometry( 0, 0, desk.width(), desk.height() );
+ }
+
+ // set up contents.
+ QString text = "<H1>" + tr("Owner Information") + "</H1>";
+ text += c.toRichText();
+ tv = new QTextView(this);
+ tv->setText(text);
+
+ tv->viewport()->installEventFilter(this);
+ }
+
+ void resizeEvent( QResizeEvent * )
+ {
+ tv->resize( size() );
+ }
+
+ bool eventFilter(QObject *o, QEvent *e)
+ {
+ if (e->type() == QEvent::KeyPress || e->type() == QEvent::MouseButtonPress ) {
+ accept();
+ return TRUE;
+ }
+ return QWidget::eventFilter(o, e);
+ }
+
+ void mousePressEvent( QMouseEvent * ) { accept(); }
+
+private:
+ QTextView *tv;
+};
+
+/*!
+ Returns a crypted password entered by the user when prompted with \a prompt
+ The returned value is QString::null if the user cancels the operation,
+ or the empty string if the user enters no password (but confirms the
+ dialog).
+*/
+
+QString Password::getPassword( const QString& prompt )
+{
+ PasswdDlg pd(0,0,TRUE);
+ pd.passw->setPrompt( prompt );
+
+ pd.showMaximized();
+ int r = pd.exec();
+
+ if ( r == QDialog::Accepted ) {
+ if (pd.passw->text.isEmpty())
+ return "";
+ else
+ return qcrypt(pd.passw->text,"a0");
+ } else {
+ return QString::null;
+ }
+}
+
+
+/*!
+ Prompt, fullscreen, for the user's passcode until they get it right.
+
+ If \a at_poweron is TRUE, the dialog is only used if the user's
+ preference request it at poweron; either way, the screen is always repainted
+ by this function. (this functionality may move to the caller of this function).
+*/
+
+void Password::authenticate(bool at_poweron)
+{
+ Config cfg("Security");
+ cfg.setGroup("Passcode");
+ QString passcode = cfg.readEntry("passcode");
+ if ( !passcode.isEmpty()
+ && (!at_poweron || cfg.readNumEntry("passcode_poweron",0)) )
+ {
+ // Do it as a fullscreen modal dialog
+ PasswdDlg pd(0,0,TRUE,TRUE);
+
+ // see if there is contact information.
+ OwnerDlg *oi = 0;
+ QString vfilename = Global::applicationFileName("addressbook",
+ "businesscard.vcf");
+ if (QFile::exists(vfilename)) {
+ Contact c;
+ c = Contact::readVCard( vfilename )[0];
+
+ oi = new OwnerDlg(0, 0, c, TRUE, TRUE);
+ }
+
+ pd.reset();
+ pd.exec();
+ while (qcrypt(pd.passw->text, "a0") != passcode) {
+ if (oi)
+ oi->exec();
+ pd.reset();
+ pd.exec();
+ }
+ } else if ( at_poweron ) {
+ // refresh screen #### should probably be in caller
+ // Not needed (we took away the screen blacking)
+ //if ( qwsServer )
+ //qwsServer->refresh();
+ }
+}
+
+#include "password.moc"
diff --git a/library/password.h b/library/password.h
new file mode 100644
index 0000000..30a5377
--- a/dev/null
+++ b/library/password.h
@@ -0,0 +1,32 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PASSWORD_H
+#define PASSWORD_H
+
+#include <qstring.h>
+
+class Password
+{
+public:
+ static void authenticate(bool atpoweron=FALSE);
+ static QString getPassword( const QString& prompt );
+};
+
+#endif // PASSWORD_H
diff --git a/library/passwordbase_p.ui b/library/passwordbase_p.ui
new file mode 100644
index 0000000..e79777b
--- a/dev/null
+++ b/library/passwordbase_p.ui
@@ -0,0 +1,590 @@
+<!DOCTYPE UI><UI>
+<class>PasswordBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PasswordBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>251</width>
+ <height>443</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Form1</string>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_1</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>1</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>2</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="2" column="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_3</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>3</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_4</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>4</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_5</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>5</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="3" column="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_6</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>6</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="4" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_7</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>7</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="4" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_8</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>8</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="4" column="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_9</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>9</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ <widget row="5" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_0</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>0</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ </widget>
+ <widget row="5" column="1" rowspan="1" colspan="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>button_OK</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>Box</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>OK</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <widget row="0" column="0" rowspan="1" colspan="3" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>prompt</cstring>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>18</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Enter passcode</string>
+ </property>
+ </widget>
+ <widget row="1" column="0" rowspan="1" colspan="3" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>display</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>palette</name>
+ <palette>
+ <active>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>78</red>
+ <green>78</green>
+ <blue>78</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>10</red>
+ <green>95</green>
+ <blue>137</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </active>
+ <disabled>
+ <color>
+ <red>128</red>
+ <green>128</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>114</red>
+ <green>114</green>
+ <blue>114</blue>
+ </color>
+ <color>
+ <red>152</red>
+ <green>152</green>
+ <blue>152</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>128</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </disabled>
+ <inactive>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>228</red>
+ <green>228</green>
+ <blue>228</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>242</red>
+ <green>242</green>
+ <blue>242</blue>
+ </color>
+ <color>
+ <red>78</red>
+ <green>78</green>
+ <blue>78</blue>
+ </color>
+ <color>
+ <red>183</red>
+ <green>183</green>
+ <blue>183</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ <color>
+ <red>220</red>
+ <green>220</green>
+ <blue>220</blue>
+ </color>
+ <color>
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ <color>
+ <red>10</red>
+ <green>95</green>
+ <blue>137</blue>
+ </color>
+ <color>
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </inactive>
+ </palette>
+ </property>
+ <property stdset="1">
+ <name>echoMode</name>
+ <enum>Password</enum>
+ </property>
+ </widget>
+ </grid>
+</widget>
+</UI>
diff --git a/library/power.cpp b/library/power.cpp
new file mode 100644
index 0000000..990ff62
--- a/dev/null
+++ b/library/power.cpp
@@ -0,0 +1,226 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "power.h"
+
+#ifdef QT_QWS_CUSTOM
+#include "custom.h"
+#endif
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#ifdef QT_QWS_IPAQ_NO_APM
+#include <linux/h3600_ts.h>
+#endif
+
+PowerStatusManager *PowerStatusManager::powerManager = 0;
+PowerStatus *PowerStatusManager::ps = 0;
+
+static bool haveProcApm = false;
+
+PowerStatusManager::PowerStatusManager()
+{
+ powerManager = this;
+ ps = new PowerStatus;
+ FILE *f = fopen("/proc/apm", "r");
+ if ( f ) {
+ fclose(f);
+ haveProcApm = TRUE;
+ }
+}
+
+const PowerStatus &PowerStatusManager::readStatus()
+{
+ if ( !powerManager )
+ (void)new PowerStatusManager;
+
+ powerManager->getStatus();
+
+ return *ps;
+}
+
+// Standard /proc/apm reader
+bool PowerStatusManager::getProcApmStatus( int &ac, int &bs, int &bf, int &pc, int &sec )
+{
+ bool ok = false;
+
+ ac = 0xff;
+ bs = 0xff;
+ bf = 0xff;
+ pc = -1;
+ sec = -1;
+
+ FILE *f = fopen("/proc/apm", "r");
+ if ( f ) {
+ //I 1.13 1.2 0x02 0x00 0xff 0xff 49% 147 sec
+ char u;
+ fscanf(f, "%*[^ ] %*d.%*d 0x%*x 0x%x 0x%x 0x%x %d%% %i %c",
+ &ac, &bs, &bf, &pc, &sec, &u);
+ fclose(f);
+ switch ( u ) {
+ case 'm': sec *= 60;
+ case 's': break; // ok
+ default: sec = -1; // unknown
+ }
+
+ // extract data
+ switch ( bs ) {
+ case 0x00:
+ ps->bs = PowerStatus::High;
+ break;
+ case 0x01:
+ ps->bs = PowerStatus::Low;
+ break;
+ case 0x7f:
+ ps->bs = PowerStatus::VeryLow;
+ break;
+ case 0x02:
+ ps->bs = PowerStatus::Critical;
+ break;
+ case 0x03:
+ ps->bs = PowerStatus::Charging;
+ break;
+ case 0x04:
+ ps->bs = PowerStatus::NotPresent;
+ break;
+ }
+
+ switch ( ac ) {
+ case 0x00:
+ ps->ac = PowerStatus::Offline;
+ break;
+ case 0x01:
+ ps->ac = PowerStatus::Online;
+ break;
+ case 0x02:
+ ps->ac = PowerStatus::Backup;
+ break;
+ }
+
+ if ( pc > 100 )
+ pc = -1;
+
+ ps->percentRemain = pc;
+ ps->secsRemain = sec;
+
+ ok = true;
+ }
+
+ return ok;
+}
+
+#ifdef QT_QWS_CUSTOM
+
+void PowerStatusManager::getStatus()
+{
+ int ac, bs, bf, pc, sec;
+ ps->percentAccurate = TRUE; // not for long...
+
+ if ( haveProcApm && getProcApmStatus( ac, bs, bf, pc, sec ) ) {
+ // special case
+ if ( bs == 0x7f )
+ ps->bs = PowerStatus::VeryLow;
+ pc = -1; // fake percentage
+ if ( pc < 0 ) {
+ switch ( bs ) {
+ case 0x00: ps->percentRemain = 100; break; // High
+ case 0x01: ps->percentRemain = 30; break; // Low
+ case 0x7f: ps->percentRemain = 10; break; // Very Low
+ case 0x02: ps->percentRemain = 5; break; // Critical
+ case 0x03: ps->percentRemain = -1; break; // Charging
+ }
+ ps->percentAccurate = FALSE;
+ }
+ }
+
+ char *device = "/dev/apm_bios";
+ int fd = ::open (device, O_WRONLY);
+ if ( fd >= 0 ) {
+ int bbat_status = ioctl( fd, APM_IOC_BATTERY_BACK_CHK, 0 );
+ switch ( bbat_status ) {
+ case 0x00:
+ ps->bbs = PowerStatus::High;
+ break;
+ case 0x01:
+ ps->bbs = PowerStatus::Low;
+ break;
+ case 0x7f:
+ ps->bbs = PowerStatus::VeryLow;
+ break;
+ case 0x02:
+ ps->bbs = PowerStatus::Critical;
+ break;
+ case 0x03:
+ ps->bbs = PowerStatus::Charging;
+ break;
+ case 0x04:
+ ps->bbs = PowerStatus::NotPresent;
+ break;
+ }
+ ::close(fd);
+ }
+}
+
+#else
+
+void PowerStatusManager::getStatus()
+{
+ bool usedApm = FALSE;
+
+ ps->percentAccurate = TRUE;
+
+ // Some iPAQ kernel builds don't have APM. If this is not the case we
+ // save ourselves an ioctl by testing if /proc/apm exists in the
+ // constructor and we use /proc/apm instead
+ int ac, bs, bf, pc, sec;
+ if ( haveProcApm )
+ usedApm = getProcApmStatus( ac, bs, bf, pc, sec );
+
+ if ( !usedApm ) {
+#ifdef QT_QWS_IPAQ_NO_APM
+ int fd;
+ int err;
+ struct bat_dev batt_info;
+
+ memset(&batt_info, 0, sizeof(batt_info));
+
+ fd = ::open("/dev/ts",O_RDONLY);
+ if( fd < 0 )
+ return;
+
+ ioctl(fd, GET_BATTERY_STATUS, &batt_info);
+ ac_status = batt_info.ac_status;
+ ps->percentRemain = ( 425 * batt_info.batt1_voltage ) / 1000 - 298; // from h3600_ts.c
+ ps->secsRemain = -1; // seconds is bogus on iPAQ
+ ::close (fd);
+#else
+ ps->percentRemain = 100;
+ ps->secsRemain = -1;
+ ps->percentAccurate = FALSE;
+#endif
+ }
+}
+
+#endif
+
diff --git a/library/power.h b/library/power.h
new file mode 100644
index 0000000..99d3595
--- a/dev/null
+++ b/library/power.h
@@ -0,0 +1,85 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef POWER_H
+#define POWER_H
+
+#include <qobject.h>
+
+class PowerStatus
+{
+public:
+ PowerStatus() {
+ ac = Offline;
+ bs = NotPresent;
+ bbs = NotPresent;
+ percentRemain = -1;
+ secsRemain = -1;
+ }
+
+ enum ACStatus { Offline, Online, Backup };
+ ACStatus acStatus() const { return ac; }
+
+ enum BatteryStatus { High=0x01, Low=0x02, VeryLow=0x04, Critical=0x08,
+ Charging=0x10, NotPresent=0x20 };
+ BatteryStatus batteryStatus() const { return bs; }
+ BatteryStatus backupBatteryStatus() const { return bbs; }
+
+ bool batteryPercentAccurate() const { return percentAccurate; }
+ int batteryPercentRemaining() const { return percentRemain; }
+ int batteryTimeRemaining() const { return secsRemain; }
+
+ bool operator!=( const PowerStatus &ps ) {
+ return (ps.ac != ac) || (ps.bs != bs) || (ps.bbs != bbs) ||
+ (ps.percentRemain != percentRemain) ||
+ (ps.secsRemain != secsRemain );
+ }
+
+private:
+ ACStatus ac;
+ BatteryStatus bs;
+ BatteryStatus bbs;
+ int percentRemain;
+ int secsRemain;
+ bool percentAccurate;
+
+ friend class PowerStatusManager;
+};
+
+
+class PowerStatusManager
+{
+public:
+ PowerStatusManager();
+
+ static const PowerStatus &readStatus();
+
+protected:
+ bool getProcApmStatus( int &ac, int &bs, int &bf, int &pc, int &sec );
+ void getStatus();
+
+private:
+ static PowerStatus *ps;
+ static PowerStatusManager *powerManager;
+};
+
+
+#endif
+
diff --git a/library/process.cpp b/library/process.cpp
new file mode 100644
index 0000000..2e25dd5
--- a/dev/null
+++ b/library/process.cpp
@@ -0,0 +1,79 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "process.h"
+
+#ifndef QT_NO_PROCESS
+
+#include "qapplication.h"
+
+
+Process::Process( QObject *parent, const char *name )
+ : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
+ wroteToStdinConnected( FALSE )
+{
+ init();
+}
+
+Process::Process( const QString& arg0, QObject *parent, const char *name )
+ : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
+ wroteToStdinConnected( FALSE )
+{
+ init();
+ addArgument( arg0 );
+}
+
+Process::Process( const QStringList& args, QObject *parent, const char *name )
+ : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
+ wroteToStdinConnected( FALSE )
+{
+ init();
+ setArguments( args );
+}
+
+
+QStringList Process::arguments() const
+{
+ return _arguments;
+}
+
+void Process::setArguments( const QStringList& args )
+{
+ _arguments = args;
+}
+
+void Process::addArgument( const QString& arg )
+{
+ _arguments.append( arg );
+}
+
+bool Process::exec( const QString& in, QString& out, QStringList *env )
+{
+ QByteArray sout;
+ QByteArray sin = in.local8Bit(); sin.resize(sin.size()-1); // cut nul
+ bool r = exec( sin, sout, env );
+ out = QString::fromLocal8Bit(sout);
+ return r;
+}
+
+#endif
diff --git a/library/process.h b/library/process.h
new file mode 100644
index 0000000..def68d7
--- a/dev/null
+++ b/library/process.h
@@ -0,0 +1,94 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef PROCESS_H
+#define PROCESS_H
+
+//#ifndef QT_H
+#include "qobject.h"
+#include "qstringlist.h"
+#include "qdir.h"
+//#endif // QT_H
+
+//#ifndef QT_NO_PROCESS
+
+class ProcessPrivate;
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+// This is a subset of the Process API found in Qt 3.0
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+class Q_EXPORT Process : public QObject
+{
+ Q_OBJECT
+public:
+ Process( QObject *parent=0, const char *name=0 );
+ Process( const QString& arg0, QObject *parent=0, const char *name=0 );
+ Process( const QStringList& args, QObject *parent=0, const char *name=0 );
+ ~Process();
+
+ // set and get the arguments and working directory
+ QStringList arguments() const;
+ virtual void setArguments( const QStringList& args );
+ virtual void addArgument( const QString& arg );
+ // control the execution
+ virtual bool exec( const QString& in, QString& out, QStringList *env=0 );
+ virtual bool exec( const QByteArray& in, QByteArray& out, QStringList *env=0 );
+
+private:
+ void init();
+
+private:
+ ProcessPrivate *d;
+ QStringList _arguments;
+
+ int exitStat; // exit status
+ bool exitNormal; // normal exit?
+ bool ioRedirection; // automatically set be (dis)connectNotify
+ bool notifyOnExit; // automatically set be (dis)connectNotify
+ bool wroteToStdinConnected; // automatically set be (dis)connectNotify
+
+ friend class ProcessPrivate;
+ friend class ProcessManager;
+ friend class Proc;
+};
+
+//#endif // QT_NO_PROCESS
+
+#endif // QPROCESS_H
diff --git a/library/process_unix.cpp b/library/process_unix.cpp
new file mode 100644
index 0000000..b599edb
--- a/dev/null
+++ b/library/process_unix.cpp
@@ -0,0 +1,502 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QT_H
+# include <qfeatures.h>
+#endif // QT_H
+
+#ifndef QT_NO_PROCESS
+
+//#include "qplatformdefs.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <fcntl.h>
+
+#include "process.h"
+#include "qapplication.h"
+//#include "qptrqueue.h"
+//#include "qptrlist.h"
+#include "qsocketnotifier.h"
+#include "qtimer.h"
+//#include "qcleanuphandler.h"
+#include "qregexp.h"
+
+#include <stdlib.h>
+#include <errno.h>
+
+#define QPtrList QList
+
+//#define QT_QPROCESS_DEBUG
+
+
+class Proc;
+class ProcessManager;
+class ProcessPrivate
+{
+public:
+ ProcessPrivate();
+ ~ProcessPrivate();
+
+ void closeOpenSocketsForChild();
+ void newProc( pid_t pid, Process *process );
+
+ QByteArray bufStdout;
+ QByteArray bufStderr;
+
+ QSocketNotifier *notifierStdin;
+ QSocketNotifier *notifierStdout;
+ QSocketNotifier *notifierStderr;
+
+ ssize_t stdinBufRead;
+ Proc *proc;
+
+ bool exitValuesCalculated;
+ bool socketReadCalled;
+
+ static ProcessManager *procManager;
+};
+
+
+/***********************************************************************
+ *
+ * Proc
+ *
+ **********************************************************************/
+/*
+ The class Process does not necessarily map exactly to the running
+ child processes: if the process is finished, the Process class may still be
+ there; furthermore a user can use Process to start more than one process.
+
+ The helper-class Proc has the semantics that one instance of this class maps
+ directly to a running child process.
+*/
+class Proc
+{
+public:
+ Proc( pid_t p, Process *proc=0 ) : pid(p), process(proc)
+ {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "Proc: Constructor for pid %d and Process %p", pid, process );
+#endif
+ socketStdin = 0;
+ socketStdout = 0;
+ socketStderr = 0;
+ }
+ ~Proc()
+ {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "Proc: Destructor for pid %d and Process %p", pid, process );
+#endif
+ if ( process != 0 ) {
+ if ( process->d->notifierStdin )
+ process->d->notifierStdin->setEnabled( FALSE );
+ if ( process->d->notifierStdout )
+ process->d->notifierStdout->setEnabled( FALSE );
+ if ( process->d->notifierStderr )
+ process->d->notifierStderr->setEnabled( FALSE );
+ process->d->proc = 0;
+ }
+ if( socketStdin != 0 )
+ ::close( socketStdin );
+ // ### close these sockets even on parent exit or is it better only on
+ // sigchld (but what do I have to do with them on exit then)?
+ if( socketStdout != 0 )
+ ::close( socketStdout );
+ if( socketStderr != 0 )
+ ::close( socketStderr );
+ }
+
+ pid_t pid;
+ int socketStdin;
+ int socketStdout;
+ int socketStderr;
+ Process *process;
+};
+
+/***********************************************************************
+ *
+ * ProcessManager
+ *
+ **********************************************************************/
+class ProcessManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ ProcessManager();
+ ~ProcessManager();
+
+ void append( Proc *p );
+ void remove( Proc *p );
+
+public slots:
+ void removeMe();
+
+public:
+ struct sigaction oldactChld;
+ struct sigaction oldactPipe;
+ QPtrList<Proc> *procList;
+ int sigchldFd[2];
+};
+
+
+ProcessManager::ProcessManager()
+{
+ procList = new QPtrList<Proc>;
+ procList->setAutoDelete( TRUE );
+}
+
+ProcessManager::~ProcessManager()
+{
+ delete procList;
+}
+
+void ProcessManager::append( Proc *p )
+{
+ procList->append( p );
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "ProcessManager: append process (procList.count(): %d)", procList->count() );
+#endif
+}
+
+void ProcessManager::remove( Proc *p )
+{
+ procList->remove( p );
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "ProcessManager: remove process (procList.count(): %d)", procList->count() );
+#endif
+ if ( procList->count() == 0 ) {
+ QTimer::singleShot( 0, this, SLOT(removeMe()) );
+ }
+}
+
+void ProcessManager::removeMe()
+{
+ ProcessPrivate::procManager = 0;
+ delete this;
+}
+
+#include "process_unix.moc"
+
+
+/***********************************************************************
+ *
+ * ProcessPrivate
+ *
+ **********************************************************************/
+ProcessManager *ProcessPrivate::procManager = 0;
+
+ProcessPrivate::ProcessPrivate()
+{
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "ProcessPrivate: Constructor" );
+#endif
+ stdinBufRead = 0;
+
+ notifierStdin = 0;
+ notifierStdout = 0;
+ notifierStderr = 0;
+
+ exitValuesCalculated = FALSE;
+ socketReadCalled = FALSE;
+
+ proc = 0;
+}
+
+ProcessPrivate::~ProcessPrivate()
+{
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "ProcessPrivate: Destructor" );
+#endif
+
+ if ( proc != 0 ) {
+ if ( proc->socketStdin != 0 ) {
+ ::close( proc->socketStdin );
+ proc->socketStdin = 0;
+ }
+ proc->process = 0;
+ }
+
+ delete notifierStdin;
+ delete notifierStdout;
+ delete notifierStderr;
+}
+
+/*
+ Closes all open sockets in the child process that are not needed by the child
+ process. Otherwise one child may have an open socket on standard input, etc.
+ of another child.
+*/
+void ProcessPrivate::closeOpenSocketsForChild()
+{
+ if ( procManager != 0 ) {
+ if ( procManager->sigchldFd[0] != 0 )
+ ::close( procManager->sigchldFd[0] );
+ if ( procManager->sigchldFd[1] != 0 )
+ ::close( procManager->sigchldFd[1] );
+
+ // close also the sockets from other Process instances
+ Proc *proc;
+ for ( proc=procManager->procList->first(); proc!=0; proc=procManager->procList->next() ) {
+ ::close( proc->socketStdin );
+ ::close( proc->socketStdout );
+ ::close( proc->socketStderr );
+ }
+ }
+}
+
+void ProcessPrivate::newProc( pid_t pid, Process *process )
+{
+ proc = new Proc( pid, process );
+ if ( procManager == 0 ) {
+ procManager = new ProcessManager;
+ }
+ // the ProcessManager takes care of deleting the Proc instances
+ procManager->append( proc );
+}
+
+
+/***********************************************************************
+ *
+ * Process
+ *
+ **********************************************************************/
+/*!
+ This private class does basic initialization.
+*/
+void Process::init()
+{
+ d = new ProcessPrivate();
+ exitStat = 0;
+ exitNormal = FALSE;
+}
+
+/*!
+ Destroys the class.
+
+ If the process is running, it is NOT terminated! Standard input, standard
+ output and standard error of the process are closed.
+
+ \sa hangUp() kill()
+*/
+Process::~Process()
+{
+ delete d;
+}
+
+bool Process::exec( const QByteArray& in, QByteArray& out, QStringList *env )
+{
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "Process::exec()" );
+#endif
+
+ int sStdin[2];
+ int sStdout[2];
+ int sStderr[2];
+
+ // open sockets for piping
+ if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStdin ) ) {
+ return FALSE;
+ }
+ if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStderr ) ) {
+ return FALSE;
+ }
+ if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStdout ) ) {
+ return FALSE;
+ }
+
+ // the following pipe is only used to determine if the process could be
+ // started
+ int fd[2];
+ if ( pipe( fd ) < 0 ) {
+ // non critical error, go on
+ fd[0] = 0;
+ fd[1] = 0;
+ }
+
+ // construct the arguments for exec
+ QCString *arglistQ = new QCString[ _arguments.count() + 1 ];
+ const char** arglist = new const char*[ _arguments.count() + 1 ];
+ int i = 0;
+ for ( QStringList::Iterator it = _arguments.begin(); it != _arguments.end(); ++it ) {
+ arglistQ[i] = (*it).local8Bit();
+ arglist[i] = arglistQ[i];
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "Process::start(): arg %d = %s", i, arglist[i] );
+#endif
+ i++;
+ }
+ arglist[i] = 0;
+
+ // fork and exec
+ QApplication::flushX();
+ pid_t pid = fork();
+ if ( pid == 0 ) {
+ // child
+ d->closeOpenSocketsForChild();
+ ::close( sStdin[1] );
+ ::close( sStdout[0] );
+ ::close( sStderr[0] );
+ ::dup2( sStdin[0], STDIN_FILENO );
+ ::dup2( sStdout[1], STDOUT_FILENO );
+ ::dup2( sStderr[1], STDERR_FILENO );
+ if ( fd[0] )
+ ::close( fd[0] );
+ if ( fd[1] )
+ ::fcntl( fd[1], F_SETFD, FD_CLOEXEC ); // close on exec shows sucess
+
+ if ( env == 0 ) { // inherit environment and start process
+ ::execvp( arglist[0], (char*const*)arglist ); // ### cast not nice
+ } else { // start process with environment settins as specified in env
+ // construct the environment for exec
+ int numEntries = env->count();
+ bool setLibraryPath =
+ env->grep( QRegExp( "^LD_LIBRARY_PATH=" ) ).isEmpty() &&
+ getenv( "LD_LIBRARY_PATH" ) != 0;
+ if ( setLibraryPath )
+ numEntries++;
+ QCString *envlistQ = new QCString[ numEntries + 1 ];
+ const char** envlist = new const char*[ numEntries + 1 ];
+ int i = 0;
+ if ( setLibraryPath ) {
+ envlistQ[i] = QString( "LD_LIBRARY_PATH=%1" ).arg( getenv( "LD_LIBRARY_PATH" ) ).local8Bit();
+ envlist[i] = envlistQ[i];
+ i++;
+ }
+ for ( QStringList::Iterator it = env->begin(); it != env->end(); ++it ) {
+ envlistQ[i] = (*it).local8Bit();
+ envlist[i] = envlistQ[i];
+ i++;
+ }
+ envlist[i] = 0;
+
+ // look for the executable in the search path
+ if ( _arguments.count()>0 && getenv("PATH")!=0 ) {
+ QString command = _arguments[0];
+ if ( !command.contains( '/' ) ) {
+ QStringList pathList = QStringList::split( ':', getenv( "PATH" ) );
+ for (QStringList::Iterator it = pathList.begin(); it != pathList.end(); ++it ) {
+ QFileInfo fileInfo( *it, command );
+ if ( fileInfo.isExecutable() ) {
+ arglistQ[0] = fileInfo.filePath().local8Bit();
+ arglist[0] = arglistQ[0];
+ break;
+ }
+ }
+ }
+ }
+ ::execve( arglist[0], (char*const*)arglist, (char*const*)envlist ); // ### casts not nice
+ }
+ if ( fd[1] ) {
+ char buf = 0;
+ ::write( fd[1], &buf, 1 );
+ ::close( fd[1] );
+ }
+ ::exit( -1 );
+ } else if ( pid == -1 ) {
+ // error forking
+ goto error;
+ }
+ // test if exec was successful
+ if ( fd[1] )
+ close( fd[1] );
+ if ( fd[0] ) {
+ char buf;
+ for ( ;; ) {
+ int n = ::read( fd[0], &buf, 1 );
+ if ( n==1 ) {
+ // socket was not closed => error
+ goto error;
+ } else if ( n==-1 ) {
+ if ( errno==EAGAIN || errno==EINTR )
+ // try it again
+ continue;
+ }
+ break;
+ }
+ }
+
+
+ ::close( sStdin[0] );
+ ::close( sStdout[1] );
+ ::close( sStderr[1] );
+
+ // DIFFERENT
+
+ {
+ int written=0;
+ int readden=0; // sic.
+ while (1) {
+ const int bufsize=4096;
+ struct timeval *timeout = 0; // #### could have this
+ fd_set r; FD_ZERO(&r);
+ fd_set w; FD_ZERO(&w);
+ FD_SET( sStdout[0], &r );
+ out.resize( readden+bufsize );
+ if ( int(in.size()) > written )
+ FD_SET( sStdin[1], &w );
+ int highest = QMAX(sStdout[0],sStdin[1])+1;
+ select(highest, &r, &w, 0, timeout);
+ if ( FD_ISSET( sStdout[0], &r ) ) {
+ int n = read( sStdout[0], out.data()+readden, bufsize );
+ if ( n > 0 )
+ readden += n;
+ else
+ break;
+ }
+ if ( FD_ISSET( sStdin[1], &w ) ) {
+ int n = write( sStdin[1], in.data()+written, in.size()-written );
+ if ( n > 0 )
+ written += n;
+ }
+ }
+ out.resize(readden);
+ }
+
+ // cleanup and return
+ delete[] arglistQ;
+ delete[] arglist;
+ ::close( sStdin[1] );
+ ::close( sStdout[0] );
+ ::close( sStderr[0] );
+ return TRUE;
+
+error:
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "Process::start(): error starting process" );
+#endif
+ ::close( sStdin[1] );
+ ::close( sStdout[0] );
+ ::close( sStderr[0] );
+ ::close( sStdin[0] );
+ ::close( sStdout[1] );
+ ::close( sStderr[1] );
+ ::close( fd[0] );
+ ::close( fd[1] );
+ delete[] arglistQ;
+ delete[] arglist;
+ return FALSE;
+}
+
+
+#endif // QT_NO_PROCESS
diff --git a/library/proxies.cpp b/library/proxies.cpp
new file mode 100644
index 0000000..eff943e
--- a/dev/null
+++ b/library/proxies.cpp
@@ -0,0 +1,118 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "proxies.h"
+#include "proxiesbase_p.h"
+#include "config.h"
+
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qframe.h>
+#include <qvalidator.h>
+#include <qspinbox.h>
+#include <qradiobutton.h>
+
+Proxies::Proxies( QWidget* parent ) :
+ QVBox(parent)
+{
+ d = new ProxiesBase( this );
+ connect(d->type,SIGNAL(activated(int)),this,SLOT(typeChanged(int)));
+}
+
+void Proxies::typeChanged(int t)
+{
+ switch (t) {
+ case 0: d->autopanel->hide(); d->setpanel->hide(); break;
+ case 1: d->setpanel->hide(); d->autopanel->show(); break;
+ case 2: d->autopanel->hide(); d->setpanel->show(); break;
+ }
+}
+
+class ProxyValidator : public QValidator {
+public:
+ ProxyValidator( QWidget * parent, const char *name = 0 ) :
+ QValidator(parent,name)
+ {
+ }
+
+ State validate( QString &s, int &pos ) const
+ {
+ int i;
+ for (i=0; i<(int)s.length(); i++) {
+ if ( s[i] == ',' || s[i] == ';' || s[i] == '\n' || s[i] == '\r' )
+ s[i] = ' ';
+ }
+ for (i=0; i<(int)s.length()-1; ) {
+ if ( s[i] == ' ' && s[i+1] == ' ' ) {
+ if (pos>i) pos--;
+ s = s.left(i)+s.mid(i+2);
+ } else
+ i++;
+ }
+ return Valid;
+ }
+};
+
+void Proxies::readConfig(Config& cfg)
+{
+ int t = cfg.readNumEntry("type",0);
+ d->type->setCurrentItem(t);
+ typeChanged(t);
+
+ QString s;
+
+ s = cfg.readEntry("autoconfig");
+ if ( !s.isEmpty() )
+ d->autoconfig->insertItem(s);
+
+
+ s = cfg.readEntry("httphost");
+ if ( !s.isEmpty() )
+ d->httphost->setText(s);
+
+ int i;
+ i = cfg.readNumEntry("httpport");
+ if ( i>0 )
+ d->httpport->setValue(i);
+
+ s = cfg.readEntry("ftphost");
+ if ( !s.isEmpty() )
+ d->ftphost->setText(s);
+
+ i = cfg.readNumEntry("ftpport");
+ if ( i>0 )
+ d->ftpport->setValue(i);
+
+ s = cfg.readEntry("noproxies");
+ d->noproxies->setValidator(new ProxyValidator(this));
+ d->noproxies->setText(s);
+}
+
+void Proxies::writeConfig( Config &cfg )
+{
+ cfg.writeEntry("type",d->type->currentItem());
+ cfg.writeEntry("autoconfig", d->autoconfig->currentText());
+ cfg.writeEntry("httphost", d->httphost->text());
+ cfg.writeEntry("httpport", d->httpport->text());
+ cfg.writeEntry("ftphost", d->ftphost->text());
+ cfg.writeEntry("ftpport", d->ftpport->text());
+ cfg.writeEntry("noproxies", d->noproxies->text());
+}
+
diff --git a/library/proxies.h b/library/proxies.h
new file mode 100644
index 0000000..665de89
--- a/dev/null
+++ b/library/proxies.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PROXIESSETTINGS_H
+#define PROXIESSETTINGS_H
+
+#include <qvbox.h>
+#include "config.h"
+
+class ProxiesBase;
+
+class Proxies : public QVBox {
+ Q_OBJECT
+
+public:
+ Proxies( QWidget* parent );
+
+ void readConfig( Config &cfg );
+ void writeConfig( Config &cfg );
+
+private slots:
+ void typeChanged(int);
+
+private:
+ ProxiesBase* d;
+};
+
+#endif
+
diff --git a/library/proxiesbase_p.ui b/library/proxiesbase_p.ui
new file mode 100644
index 0000000..b005a78
--- a/dev/null
+++ b/library/proxiesbase_p.ui
@@ -0,0 +1,360 @@
+<!DOCTYPE UI><UI>
+<class>ProxiesBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ProxiesBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>321</width>
+ <height>366</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Proxy Settings</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>2</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>No proxies</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Auto configure proxies</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Set proxies</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>type</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QFrame</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>autopanel</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>1</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer5</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Fixed</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout6</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel10</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Config:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>autoconfig</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer27</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QFrame</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>setpanel</cstring>
+ </property>
+ <property stdset="1">
+ <name>frameShape</name>
+ <enum>NoFrame</enum>
+ </property>
+ <property stdset="1">
+ <name>frameShadow</name>
+ <enum>Raised</enum>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="2" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel9</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Port:</string>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>HTTP:</string>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>FTP:</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel8</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Host:</string>
+ </property>
+ </widget>
+ <widget row="1" column="2" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>httpport</cstring>
+ </property>
+ <property stdset="1">
+ <name>buttonSymbols</name>
+ <enum>PlusMinus</enum>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>32767</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>8080</number>
+ </property>
+ </widget>
+ <widget row="2" column="2" >
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ftpport</cstring>
+ </property>
+ <property stdset="1">
+ <name>buttonSymbols</name>
+ <enum>PlusMinus</enum>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>32767</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>8080</number>
+ </property>
+ </widget>
+ <widget row="4" column="0" rowspan="1" colspan="3" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>No proxies for:</string>
+ </property>
+ </widget>
+ <widget row="5" column="0" rowspan="1" colspan="3" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>noproxies</cstring>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>httphost</cstring>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ftphost</cstring>
+ </property>
+ </widget>
+ <widget row="3" column="0" rowspan="1" colspan="3" >
+ <class>Line</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Line1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer6</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+</UI>
diff --git a/library/qcleanuphandler_p.h b/library/qcleanuphandler_p.h
new file mode 100644
index 0000000..d8cddac
--- a/dev/null
+++ b/library/qcleanuphandler_p.h
@@ -0,0 +1,51 @@
+#ifndef QCLEANUPHANDLER_H
+#define QCLEANUPHANDLER_H
+
+#ifndef QT_H
+#include <qlist.h>
+#endif // QT_H
+
+template<class Type>
+class Q_EXPORT QCleanupHandler
+{
+public:
+ QCleanupHandler() : cleanupObjects( 0 ) {}
+ ~QCleanupHandler() { clear(); }
+
+ Type* add( Type **object ) {
+ if ( !cleanupObjects )
+ cleanupObjects = new QList<Type*>;
+ cleanupObjects->insert( 0, object );
+ return *object;
+ }
+
+ void remove( Type **object ) {
+ if ( !cleanupObjects )
+ return;
+ if ( cleanupObjects->findRef( object ) >= 0 )
+ (void) cleanupObjects->take();
+ }
+
+ bool isEmpty() const {
+ return cleanupObjects ? cleanupObjects->isEmpty() : TRUE;
+ }
+
+ void clear() {
+ if ( !cleanupObjects )
+ return;
+ QListIterator<Type*> it( *cleanupObjects );
+ Type **object;
+ while ( ( object = it.current() ) ) {
+ delete *object;
+ *object = 0;
+ cleanupObjects->remove( object );
+ }
+ delete cleanupObjects;
+ cleanupObjects = 0;
+ }
+
+private:
+ QList<Type*> *cleanupObjects;
+};
+
+#endif //QCLEANUPHANDLER_H
diff --git a/library/qcom.h b/library/qcom.h
new file mode 100644
index 0000000..229be2b
--- a/dev/null
+++ b/library/qcom.h
@@ -0,0 +1,83 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QCOM_H
+#define QCOM_H
+
+#include <qstringlist.h>
+
+#ifndef QT_NO_COMPONENT
+
+#include <qpe/quuid.h>
+
+#define QRESULT unsigned long
+#define QS_OK (QRESULT)0x00000000
+#define QS_FALSE (QRESULT)0x00000001
+
+#define QE_NOTIMPL (QRESULT)0x80000001
+#define QE_OUTOFMEMORY (QRESULT)0x80000002
+#define QE_INVALIDARG (QRESULT)0x80000003
+#define QE_NOINTERFACE (QRESULT)0x80000004
+#define QE_NOCOMPONENT (QRESULT)0x80000005
+
+// {1D8518CD-E8F5-4366-99E8-879FD7E482DE}
+#ifndef IID_QUnknown
+#define IID_QUnknown QUuid(0x1d8518cd, 0xe8f5, 0x4366, 0x99, 0xe8, 0x87, 0x9f, 0xd7, 0xe4, 0x82, 0xde)
+#endif
+
+struct Q_EXPORT QUnknownInterface
+{
+ virtual QRESULT queryInterface( const QUuid&, QUnknownInterface** ) = 0;
+ virtual ulong addRef() = 0;
+ virtual ulong release() = 0;
+};
+
+// {D16111D4-E1E7-4C47-8599-24483DAE2E07}
+#ifndef IID_QLibrary
+#define IID_QLibrary QUuid( 0xd16111d4, 0xe1e7, 0x4c47, 0x85, 0x99, 0x24, 0x48, 0x3d, 0xae, 0x2e, 0x07)
+#endif
+
+struct Q_EXPORT QLibraryInterface : public QUnknownInterface
+{
+ virtual bool init() = 0;
+ virtual void cleanup() = 0;
+ virtual bool canUnload() const = 0;
+};
+
+#define Q_CREATE_INSTANCE( IMPLEMENTATION ) \
+ IMPLEMENTATION *i = new IMPLEMENTATION; \
+ QUnknownInterface* iface = 0; \
+ i->queryInterface( IID_QUnknown, &iface ); \
+ return iface;
+
+#define Q_EXPORT_INTERFACE() \
+ extern "C" QUnknownInterface* ucm_instantiate()
+
+#define Q_REFCOUNT ulong addRef() {return ref++;}ulong release() {if(!--ref){delete this;return 0;}return ref;}
+
+#else // QT_NO_COMPONENT
+
+struct Q_EXPORT QUnknownInterface
+{
+};
+
+#endif // QT_NO_COMPONENT
+
+#endif // QCOM_H
diff --git a/library/qcopenvelope_qws.cpp b/library/qcopenvelope_qws.cpp
new file mode 100644
index 0000000..10d1567
--- a/dev/null
+++ b/library/qcopenvelope_qws.cpp
@@ -0,0 +1,162 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qcopenvelope_qws.h"
+#include "global.h"
+#include <qbuffer.h>
+#include <qdatastream.h>
+#include <qfile.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/file.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+
+#ifndef QT_NO_COP
+
+/*!
+ \class QCopEnvelope qcopenvelope_qws.h
+ \brief The QCopEnvelope class encapsulates QCop message sending.
+
+ QCop messages allow applications to communicate with each other.
+ These messages are send using QCopEnvelope, and received by connecting
+ to a QCopChannel.
+
+ To send a message, use the following protocol:
+
+ \code
+ QCopEnvelope e(channelname, messagename);
+ e << parameter1 << parameter2 << ...;
+ \endcode
+
+ For messages without parameters, you can simply use:
+
+ \code
+ QCopEnvelope (channelname, messagename);
+ \endcode
+
+ Do not try to simplify further as some compilers may not do
+ as you expect.
+
+ The <tt>channelname</tt> of channels within Qtopia all start with "QPE/".
+ The <tt>messagename</tt> is a function identifier followed by a list of types
+ in parentheses. There are no spaces in the message name.
+
+ To receive a message, you will generally just use your applications
+ predefined QPE/Application/<i>appname</i> channel
+ (see QPEApplication::appMessage()), but you can make another channel
+ and connect it to a slot with:
+
+ \code
+ myChannel = new QCopChannel( "QPE/FooBar", this );
+ connect( myChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(fooBarMessage( const QCString &, const QByteArray &)) );
+ \endcode
+
+ See also, the \link qcop.html list of Qtopia messages\endlink.
+*/
+
+/*!
+ Constructs a QCopEnvelope that will write \a message to \a channel.
+ If \a message has parameters, you must then user operator<<() to
+ write the parameters.
+*/
+QCopEnvelope::QCopEnvelope( const QCString& channel, const QCString& message ) :
+ QDataStream(new QBuffer),
+ ch(channel), msg(message)
+{
+ device()->open(IO_WriteOnly);
+}
+
+/*!
+ Writes the completed message and destroys the QCopEnvelope.
+*/
+QCopEnvelope::~QCopEnvelope()
+{
+ QByteArray data = ((QBuffer*)device())->buffer();
+ const int pref=16;
+ if ( qstrncmp(ch.data(),"QPE/Application/",pref)==0 ) {
+ QString qcopfn("/tmp/qcop-msg-");
+ qcopfn += ch.mid(pref);
+ QFile qcopfile(qcopfn);
+
+ if ( qcopfile.open(IO_WriteOnly | IO_Append) ) {
+ if(flock(qcopfile.handle(), LOCK_EX)) {
+ /* some error occured */
+ qWarning(QString("Failed to obtain file lock on %1 (%2)")
+ .arg(qcopfn).arg( errno ));
+ }
+ /* file locked, but might be stale (e.g. program for whatever
+ reason did not start). I modified more than 1 minute ago,
+ truncate the file */
+ struct stat buf;
+ time_t t;
+ if (!fstat(qcopfile.handle(), &buf) && (time(&t) != (time_t)-1) ) {
+ // success on fstat, lets compare times
+ if (buf.st_mtime + 60 < t) {
+ qWarning("stale file " + qcopfn + " found. Truncating");
+ ftruncate(qcopfile.handle(), 0);
+ qcopfile.reset();
+ }
+ }
+
+ if ( !QCopChannel::isRegistered(ch) ) {
+ int fsize = qcopfile.size();
+ {
+ QDataStream ds(&qcopfile);
+ ds << ch << msg << data;
+ flock(qcopfile.handle(), LOCK_UN);
+ qcopfile.close();
+ }
+
+ if (fsize == 0) {
+ QString cmd = ch.mid(pref);
+ cmd += " -qcop " + qcopfn;
+ Global::invoke(cmd);
+ }
+
+ char c;
+ for (int i=0; (c=msg[i]); i++) {
+ if ( c == ' ' ) {
+ // Return-value required
+ // ###### wait for it
+ break;
+ } else if ( c == '(' ) {
+ // No return value
+ break;
+ }
+ }
+ goto end;
+ } // endif isRegisterd
+ flock(qcopfile.handle(), LOCK_UN);
+ qcopfile.close();
+ qcopfile.remove();
+ } else {
+ qWarning(QString("Failed to obtain file lock on %1")
+ .arg(qcopfn));
+ } // endif open
+ }
+ QCopChannel::send(ch,msg,data);
+end:
+ delete device();
+}
+
+#endif
diff --git a/library/qcopenvelope_qws.h b/library/qcopenvelope_qws.h
new file mode 100644
index 0000000..f2a94d3
--- a/dev/null
+++ b/library/qcopenvelope_qws.h
@@ -0,0 +1,39 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef QCOPENVELOPE_H
+#define QCOPENVELOPE_H
+
+#ifndef QT_H
+#include <qcopchannel_qws.h>
+#include <qdatastream.h>
+#endif // QT_H
+
+#ifndef QT_NO_COP
+
+class QCopEnvelope : public QDataStream {
+ QCString ch, msg;
+public:
+ QCopEnvelope( const QCString& channel, const QCString& message );
+ ~QCopEnvelope();
+};
+
+#endif
+
+#endif
diff --git a/library/qdawg.cpp b/library/qdawg.cpp
new file mode 100644
index 0000000..3615693
--- a/dev/null
+++ b/library/qdawg.cpp
@@ -0,0 +1,510 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "qdawg.h"
+#include <qintdict.h>
+#include <qvaluelist.h>
+#include <qtextstream.h>
+#include <qfile.h>
+#include <qtl.h>
+
+#include <limits.h>
+#include <stdio.h>
+
+// for mmap
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+
+class QDawgPrivate;
+class QTrie;
+
+typedef QValueList<QTrie*> TrieClub;
+typedef QIntDict<TrieClub> TrieClubDirectory;
+
+class TriePtr {
+public:
+ QChar letter;
+ QTrie* p;
+ int operator <(const TriePtr& o) const;
+ int operator >(const TriePtr& o) const;
+ int operator <=(const TriePtr& o) const;
+};
+
+class TrieList : public QValueList<TriePtr> {
+ bool sorted;
+public:
+ TrieList()
+ {
+ sorted=TRUE;
+ }
+
+ QTrie* findAdd(QChar c);
+ bool equal(TrieList& l);
+
+ void sort()
+ {
+ if ( !sorted ) {
+ qHeapSort(*this);
+ sorted = TRUE;
+ }
+ }
+};
+
+// A fast but memory-wasting temporary class. The Dawg is the goal.
+class QTrie {
+public:
+ QTrie();
+ ~QTrie();
+
+ void insertWord(const QString& s, uint index=0);
+ bool equal(QTrie* o);
+ void dump(int indent=0);
+
+private:
+ TrieList children;
+ bool isword;
+
+ friend class QDawgPrivate;
+ int maxdepth;
+ int decendants;
+ int key;
+ void distributeKeys(TrieClubDirectory& directory);
+ QTrie* clubLeader(TrieClubDirectory& directory);
+ int collectKeys();
+ friend class TriePtr;
+ friend class TrieList;
+};
+
+QTrie::QTrie()
+{
+ key = 0;
+ isword = FALSE;
+}
+
+QTrie::~QTrie()
+{
+ // NOTE: we do not delete the children - after conversion to DAWG
+ // it's too difficult. The QTrie's are deleted via the directory.
+}
+
+void QTrie::insertWord(const QString& s, uint index)
+{
+ if ( index == s.length() ) {
+ isword = TRUE;
+ } else {
+ QTrie* t = children.findAdd(s[index]);
+ t->insertWord(s,index+1);
+ }
+}
+
+bool QTrie::equal(QTrie* o)
+{
+ if ( o == this ) return TRUE;
+ if ( isword != o->isword )
+ return FALSE;
+ return children.equal(o->children);
+}
+
+void QTrie::dump(int indent)
+{
+ for (TrieList::Iterator it=children.begin(); it!=children.end(); ++it) {
+ QTrie* s = (*it).p;
+ for (int in=0; in<indent; in++)
+ fputc(' ',stderr);
+ fprintf(stderr," %c %d %s %p\n",(*it).letter.unicode(),
+ s->key,s->isword?"word":"",s);
+ s->dump(indent+2);
+ }
+}
+
+void QTrie::distributeKeys(TrieClubDirectory& directory)
+{
+ maxdepth = INT_MIN;
+ decendants = children.count();
+ key = 0;
+ for (TrieList::Iterator it=children.begin(); it!=children.end(); ++it) {
+ QTrie* s = (*it).p;
+ QChar l = (*it).letter;
+ s->distributeKeys(directory);
+ key = key*64+l.unicode()+s->key*5;
+ decendants += s->decendants;
+ if ( s->maxdepth+1 > maxdepth )
+ maxdepth = s->maxdepth+1;
+ }
+ if ( decendants ) {
+ key += decendants + maxdepth*256 + children.count() * 65536;
+ if ( !key ) key++; // unlikely
+ }
+ TrieClub* c = directory[key];
+ if ( !c ) directory.insert(key, (c = new TrieClub) );
+ c->prepend(this);
+}
+
+QTrie* QTrie::clubLeader(TrieClubDirectory& directory)
+{
+ if ( !key ) return directory[0]->first();
+ for (TrieList::Iterator it=children.begin(); it!=children.end(); ++it) {
+ QTrie* t= (*it).p->clubLeader(directory);
+ (*it).p = t;
+ }
+ TrieClub *club = directory[key];
+ for (TrieClub::Iterator it = club->begin(); it != club->end(); ++it) {
+ QTrie* o = *it;
+ if ( o->equal(this) )
+ return o;
+ }
+ return this;
+}
+
+int QTrie::collectKeys()
+{
+ int n=0;
+ if ( key ) key=0,n+=children.count();
+ for (TrieList::Iterator it=children.begin(); it!=children.end(); ++it)
+ n += (*it).p->collectKeys();
+ return n;
+}
+
+int TriePtr::operator <(const TriePtr& o) const
+ { return letter < o.letter; }
+int TriePtr::operator >(const TriePtr& o) const
+ { return letter > o.letter; }
+int TriePtr::operator <=(const TriePtr& o) const
+ { return letter <= o.letter; }
+
+bool TrieList::equal(TrieList& l)
+{
+ if ( count() != l.count() )
+ return FALSE;
+ sort(); l.sort();
+ ConstIterator it2 = begin();
+ ConstIterator it = l.begin();
+ for( ; it != l.end(); ++it, ++it2 )
+ if ( (*it).letter != (*it2).letter || ! (*it).p->equal((*it2).p) )
+ return FALSE;
+ return TRUE;
+}
+QTrie* TrieList::findAdd(QChar c)
+{
+ for (Iterator it=begin(); it!=end(); ++it) {
+ if ( (*it).letter == c )
+ return (*it).p;
+ }
+ TriePtr p;
+ p.p = new QTrie;
+ p.letter = c;
+ prepend(p);
+ sorted=FALSE;
+ sort();
+ return p.p;
+}
+
+static const char* dawg_sig = "QDAWG100";
+
+class QDawgPrivate {
+public:
+ QDawgPrivate(QIODevice* dev)
+ {
+ QDataStream ds(dev);
+ char sig[8];
+ ds.readRawBytes(sig,8);
+ if ( !strncmp(dawg_sig,sig,8) ) {
+ uint n;
+ char* nn;
+ ds.readBytes(nn,n);
+
+ // #### endianness problem ignored.
+ node = (QDawg::Node*)nn;
+ nodes = n / sizeof(QDawg::Node);
+ } else {
+ node = 0;
+ }
+ }
+
+ bool ok() const { return node; }
+
+ QDawgPrivate(uchar* mem)
+ {
+ if ( !strncmp(dawg_sig,(char*)mem,8) ) {
+ mem += 8;
+
+ int n = ((mem[0]*256+mem[1])*256+mem[2])*256+mem[3];
+ mem += 4;
+
+ // #### endianness problem ignored.
+ node = (QDawg::Node*)((char*)mem);
+ nodes = n / sizeof(QDawg::Node);
+ }
+ }
+
+ QDawgPrivate(QTrie* t) // destroys the QTrie.
+ {
+ TrieClubDirectory directory(9973);
+ t->distributeKeys(directory);
+ QTrie* l = t->clubLeader(directory);
+ ASSERT(l==t);
+ generateArray(t);
+
+ TrieClub *club;
+ for (QIntDictIterator<TrieClub> dit(directory); (club=dit); ++dit)
+ {
+ for (TrieClub::Iterator it = club->begin(); it != club->end(); ++it) {
+ delete *it;
+ }
+ delete club;
+ }
+ }
+
+ bool write(QIODevice* dev)
+ {
+ QDataStream ds(dev);
+ ds.writeRawBytes(dawg_sig,8);
+ // #### endianness problem ignored.
+ ds.writeBytes((char*)node,sizeof(QDawg::Node)*nodes);
+ return dev->state() == IO_Ok;
+ }
+
+ void dumpWords(int nid=0, int index=0)
+ {
+ static char word[256]; // ick latin1
+ int i=0;
+ do {
+ QDawg::Node& n = node[nid+i];
+ word[index] = n.let;
+ if ( n.isword )
+ fprintf(stderr,"%.*s\n",index+1,word);
+ if ( n.offset ) dumpWords(n.offset+nid+i,index+1);
+ } while (!node[nid+i++].islast);
+ }
+
+ void dump(int nid=0, int indent=0)
+ {
+ int i=0;
+ do {
+ QDawg::Node& n = node[nid+i];
+ fprintf(stderr,"%d: ",nid+i);
+ for (int in=0; in<indent; in++)
+ fputc(' ',stderr);
+ fprintf(stderr," %c %d %d %d\n",n.let,
+ n.isword,n.islast,n.offset);
+ if ( n.offset ) dump(n.offset+nid+i,indent+2);
+ } while (!node[nid+i++].islast);
+ }
+
+ int countWords(int nid=0)
+ {
+ int t=0;
+ int i=0;
+ do {
+ QDawg::Node& n = node[nid+i];
+ if ( n.isword )
+ t++;
+ if ( n.offset )
+ t+=countWords(n.offset+nid+i);
+ } while (!node[nid+i++].islast);
+ return t;
+ }
+
+ bool contains(const QString& s, int nid=0, int index=0) const
+ {
+ int i=0;
+ do {
+ QDawg::Node& n = node[nid+i];
+ if ( s[index] == QChar((ushort)n.let) ) {
+ if ( n.isword && index == (int)s.length()-1 )
+ return TRUE;
+ if ( n.offset )
+ return contains(s,n.offset+nid+i,index+1);
+ }
+ } while (!node[nid+i++].islast);
+ return FALSE;
+ }
+
+ void appendAllWords(QStringList& list, int nid=0, QString s="") const
+ {
+ int i=0;
+ int next = s.length();
+ do {
+ QDawg::Node& n = node[nid+i];
+ s[next] = QChar((ushort)n.let);
+ if ( n.isword )
+ list.append(s);
+ if ( n.offset )
+ appendAllWords(list, n.offset+nid+i, s);
+ } while (!node[nid+i++].islast);
+ }
+
+ const QDawg::Node* root() { return node; }
+
+private:
+ void generateArray(QTrie* t)
+ {
+ nodes = 0;
+ int n = t->collectKeys();
+ node = new QDawg::Node[n];
+ appendToArray(t);
+ ASSERT(n == nodes);
+ }
+
+ int appendToArray(QTrie* t)
+ {
+ if ( !t->key ) {
+ if ( !t->children.count() )
+ return 0;
+ t->key = nodes;
+ nodes += t->children.count();
+ QDawg::Node* n = &node[t->key-1];
+ int here = t->key;
+ for (TrieList::Iterator it=t->children.begin(); it!=t->children.end(); ++it) {
+ QTrie* s = (*it).p;
+ ++n;
+ n->let = (*it).letter.unicode();
+ n->isword = s->isword;
+ n->islast = 0;
+ n->offset = appendToArray(s);
+ if ( n->offset ) {
+ int t = n->offset-here;
+ n->offset=t;
+ if ( n->offset != t )
+ qWarning("Overflow: too many words");
+ }
+ here++;
+ }
+ n->islast = 1;
+ }
+ return t->key;
+ }
+
+private:
+ int nodes;
+ QDawg::Node *node;
+};
+
+
+QDawg::QDawg()
+{
+ d = 0;
+}
+
+QDawg::~QDawg()
+{
+ delete d;
+}
+
+bool QDawg::createFromWords(QIODevice* dev)
+{
+ delete d;
+
+ QTextStream i(dev);
+ QTrie* trie = new QTrie;
+ int n=0;
+ while (!i.atEnd()) {
+ trie->insertWord(QString::fromUtf8(i.readLine()));
+ n++;
+ }
+ if ( n )
+ d = new QDawgPrivate(trie);
+ else
+ d = 0;
+ return TRUE;
+}
+
+void QDawg::createFromWords(const QStringList& list)
+{
+ delete d;
+
+ if ( list.count() ) {
+ QTrie* trie = new QTrie;
+ for (QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
+ trie->insertWord(*it);
+ }
+ d = new QDawgPrivate(trie);
+ } else {
+ d = 0;
+ }
+}
+
+QStringList QDawg::allWords() const
+{
+ QStringList result;
+ if ( d ) d->appendAllWords(result);
+ return result;
+}
+
+
+bool QDawg::readFile(const QString& filename)
+{
+ delete d;
+ d = 0;
+ int f = ::open( QFile::encodeName(filename), O_RDONLY );
+ if ( f < 0 )
+ return FALSE;
+ struct stat st;
+ if ( !fstat( f, &st ) ) {
+ char * tmp = (char*)mmap( 0, st.st_size, // any address, whole file
+ PROT_READ, // read-only memory
+ MAP_FILE | MAP_PRIVATE, // swap-backed map from file
+ f, 0 ); // from offset 0 of f
+ if ( tmp && tmp != (char*)MAP_FAILED )
+ d = new QDawgPrivate((uchar*)tmp);
+ }
+ ::close( f );
+ return d;
+}
+
+bool QDawg::read(QIODevice* dev)
+{
+ delete d;
+ d = new QDawgPrivate(dev);
+ if ( d->ok() )
+ return TRUE;
+ delete d;
+ d = 0;
+ return FALSE;
+}
+
+bool QDawg::write(QIODevice* dev) const
+{
+ return d ? d->write(dev) : TRUE;
+}
+
+int QDawg::countWords() const
+{
+ return d ? d->countWords() : 0;
+}
+
+const QDawg::Node* QDawg::root() const
+{
+ return d ? d->root() : 0;
+}
+
+bool QDawg::contains(const QString& s) const
+{
+ return d ? d->contains(s) : FALSE;
+}
+
+void QDawg::dump() const
+{
+ if ( d ) d->dump();
+}
+
diff --git a/library/qdawg.h b/library/qdawg.h
new file mode 100644
index 0000000..ea182f3
--- a/dev/null
+++ b/library/qdawg.h
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef QDAWG_H
+#define QDAWG_H
+
+#include <qstringlist.h>
+
+class QIODevice;
+class QDawgPrivate;
+
+class QDawg {
+public:
+ QDawg();
+ ~QDawg();
+
+ bool readFile(const QString&); // may mmap
+ bool read(QIODevice* dev);
+ bool write(QIODevice* dev) const;
+ bool createFromWords(QIODevice* dev);
+ void createFromWords(const QStringList&);
+ QStringList allWords() const;
+
+ bool contains(const QString&) const;
+ int countWords() const;
+
+ // Unicode 0..3FFF; an offset can be used for other ranges
+ static const int nodebits=18;
+
+ class Node {
+ friend class QDawgPrivate;
+ uint let:(30-nodebits);
+ uint isword:1;
+ uint islast:1;
+ int offset:nodebits;
+ Node() { }
+ public:
+ QChar letter() const { return QChar((ushort)let); }
+ bool isWord() const { return isword; }
+ bool isLast() const { return islast; }
+ const Node* next() const { return islast ? 0 : this+1; }
+ const Node* jump() const { return offset ? this+offset : 0; }
+ };
+
+ const Node* root() const;
+
+ void dump() const; // debug
+
+private:
+ friend class QDawgPrivate;
+ QDawgPrivate* d;
+};
+
+#endif
diff --git a/library/qlibrary.cpp b/library/qlibrary.cpp
new file mode 100644
index 0000000..4aabbc5
--- a/dev/null
+++ b/library/qlibrary.cpp
@@ -0,0 +1,437 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "qlibrary_p.h"
+
+// uncomment this to get error messages
+//#define QT_DEBUG_COMPONENT 1
+// uncomment this to get error and success messages
+//#define QT_DEBUG_COMPONENT 2
+
+#ifndef QT_DEBUG_COMPONENT
+# if defined(QT_DEBUG)
+# define QT_DEBUG_COMPONENT 1
+# endif
+#endif
+
+#ifndef QT_NO_COMPONENT
+
+// KAI C++ has at the moment problems with unloading the Qt plugins. So don't
+// unload them as a workaround for now.
+#if defined(Q_CC_KAI) || defined(Q_OS_MAC)
+#define QT_NO_LIBRARY_UNLOAD
+#endif
+
+#if defined(Q_WS_WIN) && !defined(QT_MAKEDLL)
+#define QT_NO_LIBRARY_UNLOAD
+#endif
+
+/* Platform independent QLibraryPrivate implementations */
+#ifndef QT_LITE_COMPONENT
+
+#include "qtimer.h"
+
+extern Q_EXPORT QApplication *qApp;
+
+QLibraryPrivate::QLibraryPrivate( QLibrary *lib )
+ : QObject( 0, lib->library().latin1() ), pHnd( 0 ), libIface( 0 ), unloadTimer( 0 ), library( lib )
+{
+}
+
+QLibraryPrivate::~QLibraryPrivate()
+{
+ if ( libIface )
+ libIface->release();
+ killTimer();
+}
+
+/*
+ Only components that implement the QLibraryInterface can
+ be unloaded automatically.
+*/
+void QLibraryPrivate::tryUnload()
+{
+ if ( library->policy() == QLibrary::Manual || !pHnd || !libIface )
+ return;
+
+ if ( !libIface->canUnload() )
+ return;
+
+#if defined(QT_DEBUG_COMPONENT) && QT_DEBUG_COMPONENT == 2
+ if ( library->unload() )
+ qDebug( "%s has been automatically unloaded", library->library().latin1() );
+#else
+ library->unload();
+#endif
+}
+
+#else // QT_LITE_COMPOINENT
+
+QLibraryPrivate::QLibraryPrivate( QLibrary *lib )
+ : pHnd( 0 ), libIface( 0 ), library( lib )
+{
+}
+
+#endif // QT_LITE_COMPOINENT
+
+void QLibraryPrivate::startTimer()
+{
+#ifndef QT_LITE_COMPONENT
+ unloadTimer = new QTimer( this );
+ connect( unloadTimer, SIGNAL( timeout() ), this, SLOT( tryUnload() ) );
+ unloadTimer->start( 5000, FALSE );
+#endif
+}
+
+void QLibraryPrivate::killTimer()
+{
+#ifndef QT_LITE_COMPONENT
+ delete unloadTimer;
+ unloadTimer = 0;
+#endif
+}
+
+/*!
+ \class QLibrary qlibrary.h
+
+ \brief The QLibrary class provides a wrapper for handling shared libraries.
+
+ This class is temporarily copied from Qt 3.0.
+*/
+
+/*!
+ \enum QLibrary::Policy
+
+ This enum type defines the various policies a QLibrary can have with respect to
+ loading and unloading the shared library.
+
+ The \e policy can be:
+
+ \value Delayed The library get's loaded as soon as needed and unloaded in the destructor
+ \value Immediately The library is loaded immediately and unloaded in the destructor
+ \value Manual Like delayed, and library has to be unloaded manually
+*/
+
+/*!
+ Creates a QLibrary object for the shared library \a filename.
+ The library get's loaded if \a pol is Immediately.
+
+ Note that \a filename does not need to include the (platform specific)
+ file extension, so calling
+
+ \code
+ QLibrary lib( "mylib" );
+ \endcode
+
+ would be equivalent to
+
+ \code
+ QLibrary lib( "mylib.dll" );
+ \endcode
+
+ on Windows. But \e "mylib.dll" will obviously not work on other platforms.
+
+ \sa setPolicy(), unload()
+*/
+QLibrary::QLibrary( const QString& filename, Policy pol )
+ : libfile( filename ), libPol( pol ), entry( 0 )
+{
+ d = new QLibraryPrivate( this );
+ if ( pol == Immediately )
+ load();
+}
+
+/*!
+ Deletes the QLibrary object.
+ The library will be unloaded if the policy is not Manual.
+
+ \sa unload(), setPolicy()
+*/
+QLibrary::~QLibrary()
+{
+ if ( libPol == Manual || !unload() ) {
+ if ( entry ) {
+ entry->release();
+ entry = 0;
+ }
+ }
+ delete d;
+}
+
+void QLibrary::createInstanceInternal()
+{
+ if ( libfile.isEmpty() )
+ return;
+
+ if ( !d->pHnd ) {
+ ASSERT( entry == 0 );
+ load();
+ }
+
+ if ( d->pHnd && !entry ) {
+#if defined(QT_DEBUG_COMPONENT) && QT_DEBUG_COMPONENT == 2
+ qWarning( "%s has been loaded.", library().latin1() );
+#endif
+ typedef QUnknownInterface* (*UCMInstanceProc)();
+ UCMInstanceProc ucmInstanceProc;
+ ucmInstanceProc = (UCMInstanceProc) resolve( "ucm_instantiate" );
+ entry = ucmInstanceProc ? ucmInstanceProc() : 0;
+ if ( entry ) {
+ entry->queryInterface( IID_QLibrary, (QUnknownInterface**)&d->libIface);
+ if ( d->libIface ) {
+ if ( !d->libIface->init() ) {
+#if defined(QT_DEBUG_COMPONENT)
+ qWarning( "%s: QLibraryInterface::init() failed.", library().latin1() );
+#endif
+ unload();
+ return;
+ }
+
+ d->killTimer();
+ if ( libPol != Manual )
+ d->startTimer();
+ }
+ } else {
+#if defined(QT_DEBUG_COMPONENT)
+ qWarning( "%s: No interface implemented.", library().latin1() );
+#endif
+ unload();
+ }
+ }
+}
+
+/*!
+ Returns the address of the exported symbol \a symb. The library gets
+ loaded if necessary. The function returns NULL if the symbol could
+ not be resolved, or if loading the library failed.
+
+ \code
+ typedef int (*addProc)( int, int );
+
+ addProc add = (addProc) library->resolve( "add" );
+ if ( add )
+ return add( 5, 8 );
+ else
+ return 5 + 8;
+ \endcode
+
+ \sa queryInterface()
+*/
+void *QLibrary::resolve( const char* symb )
+{
+ if ( !d->pHnd )
+ load();
+ if ( !d->pHnd )
+ return 0;
+
+ void *address = d->resolveSymbol( symb );
+ if ( !address ) {
+#if defined(QT_DEBUG_COMPONENT)
+ // resolveSymbol() might give a warning; so let that warning look so fatal
+ qWarning( QString("Trying to resolve symbol \"_%1\" instead").arg( symb ) );
+#endif
+ address = d->resolveSymbol( QString( "_" ) + symb );
+ }
+ return address;
+}
+
+/*!
+ \overload
+
+ Loads the library \a filename and returns the address of the exported symbol \a symb.
+ Note that like for the constructor, \a filename does not need to include the (platform specific)
+ file extension. The library staying loaded until the process exits.
+
+ The function returns a null pointer if the symbol could not be resolved or if loading
+ the library failed.
+*/
+void *QLibrary::resolve( const QString &filename, const char *symb )
+{
+ QLibrary lib( filename, Manual );
+ return lib.resolve( symb );
+}
+
+/*!
+ Returns whether the library is loaded.
+
+ \sa unload()
+*/
+bool QLibrary::isLoaded() const
+{
+ return d->pHnd != 0;
+}
+
+/*!
+ Loads the library.
+*/
+bool QLibrary::load()
+{
+ return d->loadLibrary();
+}
+
+/*!
+ Releases the component and unloads the library when successful.
+ Returns TRUE if the library could be unloaded, otherwise FALSE.
+ If the component implements the QLibraryInterface, the cleanup()
+ function of this interface will be called. The unloading will be
+ cancelled if the subsequent call to canUnload() returns FALSE.
+
+ This function gets called automatically in the destructor if
+ the policy is not Manual.
+
+ \warning
+ If \a force is set to TRUE, the library gets unloaded at any cost,
+ which is in most cases a segmentation fault, so you should know what
+ you're doing!
+
+ \sa queryInterface(), resolve()
+*/
+bool QLibrary::unload( bool force )
+{
+ if ( !d->pHnd )
+ return TRUE;
+
+ if ( entry ) {
+ if ( d->libIface ) {
+ d->libIface->cleanup();
+
+ bool can = d->libIface->canUnload();
+ can = ( d->libIface->release() <= 1 ) && can;
+ // the "entry" member must be the last reference to the component
+ if ( can || force ) {
+ d->libIface = 0;
+ } else {
+#if defined(QT_DEBUG_COMPONENT)
+ qWarning( "%s prevents unloading!", library().latin1() );
+#endif
+ d->libIface->addRef();
+ return FALSE;
+ }
+ }
+
+ if ( entry->release() ) {
+#if defined(QT_DEBUG_COMPONENT)
+ qWarning( "%s is still in use!", library().latin1() );
+#endif
+ if ( force ) {
+ delete entry;
+ } else {
+ entry->addRef();
+ return FALSE;
+ }
+ }
+ d->killTimer();
+
+ entry = 0;
+ }
+
+// ### this is a hack to solve problems with plugin unloading und KAI C++
+// (other compilers may have the same problem)
+#if !defined(QT_NO_LIBRARY_UNLOAD)
+ if ( !d->freeLibrary() ) {
+#if defined(QT_DEBUG_COMPONENT)
+ qWarning( "%s could not be unloaded.", library().latin1() );
+#endif
+ return FALSE;
+#else
+ return TRUE;
+#endif
+#if !defined(QT_NO_LIBRARY_UNLOAD)
+ }
+
+#if defined(QT_DEBUG_COMPONENT) && QT_DEBUG_COMPONENT == 2
+ qWarning( "%s has been unloaded.", library().latin1() );
+#endif
+
+ d->pHnd = 0;
+ return TRUE;
+#endif
+}
+
+/*!
+ Sets the current policy to \a pol.
+ The library is loaded if \a pol is set to Immediately.
+*/
+void QLibrary::setPolicy( Policy pol )
+{
+ libPol = pol;
+
+ if ( libPol == Immediately && !d->pHnd )
+ load();
+}
+
+/*!
+ Returns the current policy.
+
+ \sa setPolicy()
+*/
+QLibrary::Policy QLibrary::policy() const
+{
+ return libPol;
+}
+
+/*!
+ Returns the filename of the shared library this QLibrary object handles,
+ including the platform specific file extension.
+
+ \code
+ QLibrary lib( "mylib" );
+ QString str = lib.library();
+ \endcode
+
+ will set \e str to "mylib.dll" on Windows, and "libmylib.so" on Linux.
+*/
+QString QLibrary::library() const
+{
+ if ( libfile.isEmpty() )
+ return libfile;
+
+ QString filename = libfile;
+#if defined(Q_WS_WIN)
+ if ( filename.find( ".dll" ) == -1 )
+ filename += ".dll";
+#elif defined(Q_OS_MACX)
+ if ( filename.find( ".dylib" ) == -1 )
+ filename += ".dylib";
+#else
+ if ( filename.find( ".so" ) == -1 )
+ filename = QString( "lib%1.so" ).arg( filename );
+#endif
+
+ return filename;
+}
+
+/*!
+ Forwards the query to the component and returns the result. \a request and \a iface
+ are propagated to the component's queryInterface implementation.
+
+ The library gets loaded if necessary.
+*/
+QRESULT QLibrary::queryInterface( const QUuid& request, QUnknownInterface** iface )
+{
+ if ( !entry ) {
+ createInstanceInternal();
+ }
+
+ return entry ? entry->queryInterface( request, iface ) : QE_NOINTERFACE;
+}
+
+#endif // QT_NO_COMPONENT
diff --git a/library/qlibrary.h b/library/qlibrary.h
new file mode 100644
index 0000000..d33173b
--- a/dev/null
+++ b/library/qlibrary.h
@@ -0,0 +1,77 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QLIBRARY_H
+#define QLIBRARY_H
+
+#include <qstring.h>
+
+#ifndef QT_NO_COMPONENT
+
+#include <qpe/qcom.h>
+
+class QLibraryPrivate;
+
+class Q_EXPORT QLibrary
+{
+public:
+ enum Policy
+ {
+ Delayed,
+ Immediately,
+ Manual
+ };
+
+ QLibrary( const QString& filename, Policy = Delayed );
+ ~QLibrary();
+
+ void *resolve( const char* );
+ static void *resolve( const QString &filename, const char * );
+
+ bool unload( bool force = FALSE );
+ bool isLoaded() const;
+
+ void setPolicy( Policy pol );
+ Policy policy() const;
+
+ QString library() const;
+
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+
+private:
+ bool load();
+ void createInstanceInternal();
+
+ QLibraryPrivate *d;
+
+ QString libfile;
+ Policy libPol;
+ QUnknownInterface *entry;
+
+private: // Disabled copy constructor and operator=
+#if defined(Q_DISABLE_COPY)
+ QLibrary( const QLibrary & );
+ QLibrary &operator=( const QLibrary & );
+#endif
+};
+
+#endif // QT_NO_COMPONENT
+
+#endif //QLIBRARY_H
diff --git a/library/qlibrary_p.h b/library/qlibrary_p.h
new file mode 100644
index 0000000..4734228
--- a/dev/null
+++ b/library/qlibrary_p.h
@@ -0,0 +1,113 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QLIBRARY_P_H
+#define QLIBRARY_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the QLibrary class. This header file may change from
+// version to version without notice, or even be removed.
+//
+// We mean it.
+//
+//
+
+#include "qlibrary.h"
+
+//#ifndef QT_NO_COMPONENT
+
+//#ifndef QT_H
+#include "qwindowdefs.h"
+//#ifndef QT_LITE_COMPONENT
+#include "qobject.h"
+//#endif
+//#endif // QT_H
+
+class QTimer;
+class QLibrary;
+class QLibraryInterface;
+
+/*
+ Private helper class that saves the platform dependent handle
+ and does the unload magic using a QTimer.
+*/
+//#ifndef QT_LITE_COMPONENT
+class QLibraryPrivate : public QObject
+{
+ Q_OBJECT
+public:
+ QLibraryPrivate( QLibrary *lib );
+ ~QLibraryPrivate();
+
+ void startTimer();
+ void killTimer();
+
+#ifdef Q_WS_WIN
+ HINSTANCE pHnd;
+#else
+ void *pHnd;
+#endif
+
+ QLibraryInterface *libIface;
+
+ bool loadLibrary();
+ bool freeLibrary();
+ void *resolveSymbol( const char * );
+
+private slots:
+ void tryUnload();
+
+private:
+ QTimer *unloadTimer;
+ QLibrary *library;
+};
+
+#else // QT_LITE_COMPONENT
+class QLibraryPrivate
+{
+public:
+ QLibraryPrivate( QLibrary *lib );
+
+ void startTimer();
+ void killTimer();
+
+#ifdef Q_WS_WIN
+ HINSTANCE pHnd;
+#else
+ void *pHnd;
+#endif
+ QLibraryInterface *libIface;
+
+ bool loadLibrary();
+ bool freeLibrary();
+ void *resolveSymbol( const char * );
+
+private:
+ QLibrary *library;
+};
+//#endif // QT_LITE_COMPONENT
+
+//#endif // QT_NO_COMPONENT
+
+#endif // QLIBRARY_P_H
diff --git a/library/qlibrary_unix.cpp b/library/qlibrary_unix.cpp
new file mode 100644
index 0000000..50a5478
--- a/dev/null
+++ b/library/qlibrary_unix.cpp
@@ -0,0 +1,132 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qlibrary_p.h"
+
+#ifndef QT_NO_COMPONENT
+
+/*
+ The platform dependent implementations of
+ - loadLibrary
+ - freeLibrary
+ - resolveSymbol
+
+ It's not too hard to guess what the functions do.
+*/
+#if defined(Q_OS_HPUX)
+// for HP-UX < 11.x and 32 bit
+#include <dl.h>
+
+bool QLibraryPrivate::loadLibrary()
+{
+ if ( pHnd )
+ return TRUE;
+
+ QString filename = library->library();
+
+ pHnd = (void*)shl_load( filename.latin1(), BIND_DEFERRED | BIND_NONFATAL | DYNAMIC_PATH, 0 );
+#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
+ if ( !pHnd )
+ qDebug( "Failed to load library %s!", filename.latin1() );
+#endif
+ return pHnd != 0;
+}
+
+bool QLibraryPrivate::freeLibrary()
+{
+ if ( !pHnd )
+ return TRUE;
+
+ if ( !shl_unload( (shl_t)pHnd ) ) {
+ pHnd = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void* QLibraryPrivate::resolveSymbol( const char* symbol )
+{
+ if ( !pHnd )
+ return 0;
+
+ void* address = 0;
+ if ( shl_findsym( (shl_t*)&pHnd, symbol, TYPE_UNDEFINED, address ) < 0 ) {
+#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
+ qDebug( "Couldn't resolve symbol \"%s\"", symbol );
+#endif
+ return 0;
+ }
+ return address;
+}
+
+#else // Q_OS_HPUX
+// Something else, assuming POSIX
+#include <dlfcn.h>
+
+bool QLibraryPrivate::loadLibrary()
+{
+ if ( pHnd )
+ return TRUE;
+
+ QString filename = library->library();
+
+ pHnd = dlopen( filename.latin1() , RTLD_LAZY );
+#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
+ if ( !pHnd )
+ qWarning( "%s", dlerror() );
+#endif
+ return pHnd != 0;
+}
+
+bool QLibraryPrivate::freeLibrary()
+{
+ if ( !pHnd )
+ return TRUE;
+
+ int ec = dlclose( pHnd );
+ if ( !ec )
+ pHnd = 0;
+#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
+ else {
+ const char* error = dlerror();
+ if ( error )
+ qWarning( "%s", error );
+ }
+#endif
+ return pHnd == 0;
+}
+
+void* QLibraryPrivate::resolveSymbol( const char* f )
+{
+ if ( !pHnd )
+ return 0;
+
+ void* address = dlsym( pHnd, f );
+#if defined(QT_DEBUG) || defined(QT_DEBUG_COMPONENT)
+ const char* error = dlerror();
+ if ( error )
+ qWarning( "%s", error );
+#endif
+ return address;
+}
+
+#endif // POSIX
+
+#endif // QT_NO_COMPONENT
diff --git a/library/qmath.c b/library/qmath.c
new file mode 100644
index 0000000..7af8706
--- a/dev/null
+++ b/library/qmath.c
@@ -0,0 +1,157 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <math.h>
+#include <float.h>
+#include "qmath.h"
+
+#ifdef QT_QWS_CASSIOPEIA
+
+double qFabs( double a )
+{
+ if ( a < 0.0 )
+ return -a;
+ return a;
+}
+
+double qSqrt( double value )
+{
+ const double tol = 0.000005; // relative error tolerance
+ double old_app, new_app;
+ if (value == 0.0)
+ return 0.0;
+ old_app = value; // take value as first approximation
+ new_app = (old_app + value/old_app)/2;
+ while (qFabs((new_app-old_app)/new_app) > tol)
+ {
+ old_app = new_app;
+ new_app = (old_app + value/old_app)/2;
+ }
+
+ return new_app;
+}
+
+const double Q_PI = 3.14159265358979323846; // pi
+const double Q_2PI = 6.28318530717958647693; // 2*pi
+const double Q_PI2 = 1.57079632679489661923; // pi/2
+
+static double qsincos( double a, int calcCos )
+{
+ int sign;
+ double a2;
+ double a3;
+ double a5;
+ double a7;
+ double a9;
+ double a11;
+
+ if ( calcCos ) // calculate cosine
+ a -= Q_PI2;
+ if ( a >= Q_2PI || a <= -Q_2PI ) { // fix range: -2*pi < a < 2*pi
+ int m = (int)(a/Q_2PI);
+ a -= Q_2PI*m;
+ }
+ if ( a < 0.0 ) // 0 <= a < 2*pi
+ a += Q_2PI;
+ sign = a > Q_PI ? -1 : 1;
+ if ( a >= Q_PI )
+ a = Q_2PI - a;
+ if ( a >= Q_PI2 )
+ a = Q_PI - a;
+ if ( calcCos )
+ sign = -sign;
+ a2 = a*a; // here: 0 <= a < pi/4
+ a3 = a2*a; // make taylor sin sum
+ a5 = a3*a2;
+ a7 = a5*a2;
+ a9 = a7*a2;
+ a11 = a9*a2;
+ return (a-a3/6+a5/120-a7/5040+a9/362880-a11/39916800)*sign;
+}
+
+double qSin( double a ) { return qsincos(a,0); }
+double qCos( double a ) { return qsincos(a,1); }
+
+//atan2 returns values from -PI to PI, so we have to do the same
+double qATan2( double y, double x )
+{
+ double r;
+ if ( x != 0.0 ) {
+ double a = qFabs(y/x);
+ if ( a <= 1 )
+ r = a/(1+ 0.28*a*a);
+ else
+ r = Q_PI2 - a/(a*a + 0.28);
+ } else {
+ r = Q_PI2;
+ }
+
+ if ( y >= 0.0 ) {
+ if ( x >= 0.0 )
+ return r;
+ else
+ return Q_PI - r;
+ } else {
+ if ( x >= 0.0 )
+ return 0.0 - r;
+ else
+ return -Q_PI + r;
+ }
+}
+
+double qATan( double a )
+{
+ return qATan2( a, 1.0 );
+}
+
+double qASin( double a )
+{
+ return qATan2( a, qSqrt(1-a*a) );
+}
+
+double qTan( double a )
+{
+ double ca = qCos(a);
+ if ( ca != 0.0 )
+ return qSin( a ) / ca;
+
+ return MAXDOUBLE;
+}
+
+double qFloor( double a )
+{
+ long i = (long) a;
+ return (double) i;
+}
+
+#else
+
+double qSqrt( double value ) { return sqrt( value ); }
+double qSin( double a ) { return sin(a); }
+double qCos( double a ) { return cos(a); }
+double qATan2( double y, double x ) { return atan2(y,x); }
+double qATan( double a ) { return atan(a); }
+double qASin( double a ) { return asin(a); }
+double qTan( double a ) { return tan(a); }
+double qFloor( double a ) { return floor(a); }
+double qFabs( double a ) { return fabs(a); }
+
+#endif
+
diff --git a/library/qmath.h b/library/qmath.h
new file mode 100644
index 0000000..629fe99
--- a/dev/null
+++ b/library/qmath.h
@@ -0,0 +1,42 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef QMATH_H
+#define QMATH_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+double qSqrt( double value );
+double qSin( double a );
+double qCos( double a );
+double qATan2( double y, double x );
+double qATan( double a );
+double qASin( double a );
+double qTan( double a );
+double qFloor( double a );
+double qFabs( double a );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/library/qpe-base.control b/library/qpe-base.control
new file mode 100644
index 0000000..bd8a0f9
--- a/dev/null
+++ b/library/qpe-base.control
@@ -0,0 +1,10 @@
+Files: etc/qimpen etc/colors etc/init.d/qpe etc/rc2.d/S98qpe bin/qpe-reorgfiles $QTDIR/lib/libqpe.so.$VERSION_MAJ.$VERSION_MIN.$VERSION_PAT $QTDIR/lib/libqpe.so.$VERSION_MAJ.$VERSION_MIN $QTDIR/lib/libqpe.so.$VERSION_MAJ apps/__7separator.desktop apps/__9quit.desktop apps/*/.directory etc/mime.types apps/Settings/quit.desktop pics/UnknownDocument-14.png pics/UnknownDocument.png
+Priority: required
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-4
+Depends: qt-embedded (>=$QTE_VERSION), qpe-qcop, qpe-taskbar, qpe-pics, qpe-sounds, atd, apmd
+Description: Base Qtopia environment
+ A complete GUI environment for handhelds.
+ You will probably want to install one of the qpe-i18n-* packages.
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp
new file mode 100644
index 0000000..f0a68cf
--- a/dev/null
+++ b/library/qpeapplication.cpp
@@ -0,0 +1,1597 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+**********************************************************************/
+#include <stdlib.h>
+#include <unistd.h>
+#include <qfile.h>
+#ifdef Q_WS_QWS
+#ifndef QT_NO_COP
+#if QT_VERSION <= 231
+#define private public
+#define sendLocally processEvent
+#include "qcopenvelope_qws.h"
+#undef private
+#else
+#include "qcopenvelope_qws.h"
+#endif
+#endif
+#include <qwindowsystem_qws.h>
+#endif
+#include <qtextstream.h>
+#include <qpalette.h>
+#include <qbuffer.h>
+#include <qptrdict.h>
+#include <qregexp.h>
+#include <qdir.h>
+#include <qlabel.h>
+#include <qdialog.h>
+#include <qdragobject.h>
+#include <qevent.h>
+#include <qtooltip.h>
+#include <qsignal.h>
+#include "qpeapplication.h"
+#include "qpestyle.h"
+#if QT_VERSION >= 300
+#include <qstylefactory.h>
+#else
+#include <qplatinumstyle.h>
+#include <qwindowsstyle.h>
+#include <qmotifstyle.h>
+#include <qmotifplusstyle.h>
+#include "lightstyle.h"
+#endif
+#include "global.h"
+#include "resource.h"
+#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
+#include "qutfcodec.h"
+#endif
+#include "config.h"
+#include "network.h"
+#include "fontmanager.h"
+#include "power.h"
+#include "alarmserver.h"
+#include "applnk.h"
+#include "qpemenubar.h"
+
+#include <unistd.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/soundcard.h>
+
+// for setBacklight()
+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
+#include <linux/fb.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#endif
+#include <stdlib.h>
+
+
+class QPEApplicationData {
+public:
+ QPEApplicationData() : presstimer(0), presswidget(0), rightpressed(FALSE),
+ kbgrabber(0), kbregrab(FALSE), notbusysent(FALSE), preloaded(FALSE),
+ forceshow(FALSE), nomaximize(FALSE), qpe_main_widget(0),
+ keep_running(TRUE)
+ {
+ qcopq.setAutoDelete(TRUE);
+ }
+
+ int presstimer;
+ QWidget* presswidget;
+ QPoint presspos;
+ bool rightpressed;
+ int kbgrabber;
+ bool kbregrab;
+ bool notbusysent;
+ QString appName;
+ struct QCopRec {
+ QCopRec(const QCString &ch, const QCString &msg,
+ const QByteArray &d) :
+ channel(ch), message(msg), data(d) { }
+
+ QCString channel;
+ QCString message;
+ QByteArray data;
+ };
+ bool preloaded;
+ bool forceshow;
+ bool nomaximize;
+ QWidget* qpe_main_widget;
+ bool keep_running;
+ QList<QCopRec> qcopq;
+
+ void enqueueQCop(const QCString &ch, const QCString &msg,
+ const QByteArray &data)
+ {
+ qcopq.append(new QCopRec(ch,msg,data));
+ }
+ void sendQCopQ()
+ {
+ QCopRec* r;
+ for (QListIterator<QCopRec> it(qcopq); (r=it.current()); ++it)
+ QCopChannel::sendLocally(r->channel,r->message,r->data);
+ qcopq.clear();
+ }
+};
+
+class ResourceMimeFactory : public QMimeSourceFactory {
+public:
+ ResourceMimeFactory()
+ {
+ QStringList path;
+ QString lang = getenv("LANG");
+ if ( !lang.isEmpty() )
+ path += QPEApplication::qpeDir() + "/help/" + lang + "/html";
+ path += QPEApplication::qpeDir() + "/pics";
+ path += QPEApplication::qpeDir() + "/help/en/html";
+ path += QPEApplication::qpeDir() + "/docs";
+ QString dir = QDir::current().canonicalPath();
+ if ( dir == "/" )
+ dir += "/docs";
+ else {
+ path += dir + "/../pics";
+ dir += "/../docs";
+ path += dir;
+ }
+ setFilePath( path );
+ setExtensionType("html","text/html;charset=UTF-8");
+ }
+
+ const QMimeSource* data(const QString& abs_name) const
+ {
+ const QMimeSource* r = QMimeSourceFactory::data(abs_name);
+ if ( !r ) {
+ int sl = abs_name.length();
+ do {
+ sl = abs_name.findRev('/',sl-1);
+ QString name = sl>=0 ? abs_name.mid(sl+1) : abs_name;
+ int dot = name.findRev('.');
+ if ( dot >= 0 )
+ name = name.left(dot);
+ QImage img = Resource::loadImage(name);
+ if ( !img.isNull() )
+ r = new QImageDrag(img);
+ } while (!r && sl>0);
+ }
+ return r;
+ }
+};
+
+static int muted=0;
+
+static void setVolume(int t=0, int percent=-1)
+{
+ switch (t) {
+ case 0: {
+ Config cfg("Sound");
+ cfg.setGroup("System");
+ if ( percent < 0 )
+ percent = cfg.readNumEntry("Volume",50);
+ int fd = 0;
+ if ((fd = open("/dev/mixer", O_RDWR))>=0) {
+ int vol = muted ? 0 : percent;
+ // set both channels to same volume
+ vol |= vol << 8;
+ ioctl(fd, MIXER_WRITE(0), &vol);
+ ::close(fd);
+ }
+ } break;
+ }
+}
+
+int qpe_sysBrightnessSteps()
+{
+#if defined(QT_QWS_IPAQ)
+ return 255;
+#elif defined(QT_QWS_EBX)
+ return 4;
+#else
+ return 255; // ?
+#endif
+}
+
+
+static int& hack(int& i)
+{
+#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
+ // These should be created, but aren't in Qt 2.3.0
+ (void)new QUtf8Codec;
+ (void)new QUtf16Codec;
+#endif
+ return i;
+}
+
+static bool forced_off = FALSE;
+static int curbl=-1;
+
+static int backlight()
+{
+ if ( curbl == -1 ) {
+ // Read from config
+ Config config( "qpe" );
+ config.setGroup( "Screensaver" );
+ curbl = config.readNumEntry("Brightness",255);
+ }
+ return curbl;
+}
+
+static void setBacklight(int bright)
+{
+ if ( bright == -3 ) {
+ // Forced on
+ forced_off = FALSE;
+ bright = -1;
+ }
+ if ( forced_off && bright != -2 )
+ return;
+ if ( bright == -2 ) {
+ // Toggle between off and on
+ bright = curbl ? 0 : -1;
+ forced_off = !bright;
+ }
+ if ( bright == -1 ) {
+ // Read from config
+ Config config( "qpe" );
+ config.setGroup( "Screensaver" );
+ bright = config.readNumEntry("Brightness",255);
+ }
+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
+ if ( QFile::exists("/usr/bin/bl") ) {
+ QString cmd = "/usr/bin/bl 1 ";
+ cmd += bright<=0 ? "0 " : "1 ";
+ cmd += QString::number(bright);
+ system(cmd.latin1());
+#if defined(QT_QWS_EBX)
+ } else if ( QFile::exists("/dev/fl") ) {
+#define FL_IOCTL_STEP_CONTRAST 100
+ int fd = open("/dev/fl", O_WRONLY);
+ if (fd >= 0 ) {
+ int steps = qpe_sysBrightnessSteps();
+ int bl = ( bright * steps + 127 ) / 255;
+ if ( bright && !bl ) bl = 1;
+ bl = ioctl(fd, FL_IOCTL_STEP_CONTRAST, bl);
+ close(fd);
+ }
+ }
+#elif defined(QT_QWS_IPAQ)
+ } else if ( QFile::exists("/dev/ts") || QFile::exists("/dev/h3600_ts") ) {
+ typedef struct {
+ unsigned char mode;
+ unsigned char pwr;
+ unsigned char brightness;
+ } FLITE_IN;
+# ifndef FLITE_ON
+# ifndef _LINUX_IOCTL_H
+# include <linux/ioctl.h>
+# endif
+# define FLITE_ON _IOW('f', 7, FLITE_IN)
+# endif
+ int fd;
+ if ( QFile::exists("/dev/ts") )
+ fd = open("/dev/ts", O_WRONLY);
+ else
+ fd = open("/dev/h3600_ts", O_WRONLY);
+ if (fd >= 0 ) {
+ FLITE_IN bl;
+ bl.mode = 1;
+ bl.pwr = bright ? 1 : 0;
+ bl.brightness = bright;
+ ioctl(fd, FLITE_ON, &bl);
+ close(fd);
+ }
+ }
+#endif
+#endif
+ curbl = bright;
+}
+
+void qpe_setBacklight(int bright) { setBacklight(bright); }
+
+static bool dim_on = FALSE;
+static bool lightoff_on = FALSE;
+static int disable_suspend = 100;
+
+static bool powerOnline()
+{
+ return PowerStatusManager::readStatus().acStatus() == PowerStatus::Online;
+}
+
+static bool networkOnline()
+{
+ return Network::networkOnline();
+}
+
+class QPEScreenSaver : public QWSScreenSaver
+{
+
+public:
+ QPEScreenSaver()
+ {
+ }
+ void restore()
+ {
+ setBacklight(-1);
+ }
+ bool save(int level)
+ {
+ switch ( level ) {
+ case 0:
+ if ( disable_suspend > 0 && dim_on ) {
+ if (backlight() > 1)
+ setBacklight(1); // lowest non-off
+ }
+ return TRUE;
+ break;
+ case 1:
+ if ( disable_suspend > 1 && lightoff_on ) {
+ setBacklight(0); // off
+ }
+ return TRUE;
+ break;
+ case 2:
+ if ( disable_suspend > 2 && !powerOnline() && !networkOnline() ) {
+ QWSServer::sendKeyEvent( 0xffff, Qt::Key_F34, FALSE, TRUE, FALSE );
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+ }
+};
+
+static int ssi(int interval, Config &config, const QString &enable, const QString& value, int def)
+{
+ if ( !enable.isEmpty() && config.readNumEntry(enable,0) == 0 )
+ return 0;
+
+ if ( interval < 0 ) {
+ // Restore screen blanking and power saving state
+ interval = config.readNumEntry( value, def );
+ }
+ return interval;
+}
+
+static void setScreenSaverIntervals(int i1, int i2, int i3)
+{
+ Config config( "qpe" );
+ config.setGroup( "Screensaver" );
+
+ int v[4];
+ i1 = ssi(i1, config, "Dim","Interval_Dim", 30);
+ i2 = ssi(i2, config, "LightOff","Interval_LightOff", 20);
+ i3 = ssi(i3, config, "","Interval", 60);
+
+ //qDebug("screen saver intervals: %d %d %d", i1, i2, i3);
+
+ v[0] = QMAX( 1000*i1, 100);
+ v[1] = QMAX( 1000*i2, 100);
+ v[2] = QMAX( 1000*i3, 100);
+ v[3] = 0;
+ dim_on = ( (i1 != 0) ? config.readNumEntry("Dim",1) : FALSE );
+ lightoff_on = ( (i2 != 0 ) ? config.readNumEntry("LightOff",1) : FALSE );
+ if ( !i1 && !i2 && !i3 )
+ QWSServer::setScreenSaverInterval(0);
+ else
+ QWSServer::setScreenSaverIntervals(v);
+}
+
+static void setScreenSaverInterval(int interval)
+{
+ setScreenSaverIntervals(-1,-1,interval);
+}
+
+
+/*!
+ \class QPEApplication qpeapplication.h
+ \brief The QPEApplication class implements various system services
+ that are available to all Qtopia applications.
+
+ Simply by using QPEApplication instead of QApplication, a plain Qt
+ application becomes a Qtopia application. It automatically follows
+ style changes, quits and raises, and in the
+ case of \link docwidget.html document-oriented\endlink applications,
+ changes the current displayed document in response to the environment.
+*/
+
+/*!
+ \fn void QPEApplication::clientMoused()
+
+ \internal
+*/
+
+/*!
+ \fn void QPEApplication::timeChanged();
+
+ This signal is emitted when the time jumps forward or backwards
+ by more than the normal passage of time.
+*/
+
+/*!
+ \fn void QPEApplication::clockChanged( bool ampm );
+
+ This signal is emitted when the user changes the style
+ of clock. If \a ampm is TRUE, the user wants a 12-hour
+ AM/PM close, otherwise, they want a 24-hour clock.
+*/
+
+/*!
+ \fn void QPEApplication::appMessage( const QCString& msg, const QByteArray& data )
+
+ This signal is emitted when a message is received on the
+ QPE/Application/<i>appname</i> QCop channel for this application.
+
+ The slot to which you connect this signal uses \a msg and \a data
+ in the following way:
+
+\code
+ void MyWidget::receive( const QCString& msg, const QByteArray& data )
+ {
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "someMessage(int,int,int)" ) {
+ int a,b,c;
+ stream >> a >> b >> c;
+ ...
+ } else if ( msg == "otherMessage(QString)" ) {
+ ...
+ }
+ }
+\endcode
+
+ \sa qcop.html
+*/
+
+/*!
+ Constructs a QPEApplication just as you would construct
+ a QApplication, passing \a argc, \a argv, and \a t.
+*/
+QPEApplication::QPEApplication( int& argc, char **argv, Type t )
+ : QApplication( hack(argc), argv, t )
+{
+ int dw = desktop()->width();
+ if ( dw < 200 ) {
+ setFont( QFont( "helvetica", 8 ) );
+ AppLnk::setSmallIconSize(10);
+ AppLnk::setBigIconSize(28);
+ }
+
+ d = new QPEApplicationData;
+ QMimeSourceFactory::setDefaultFactory(new ResourceMimeFactory);
+
+ connect(this, SIGNAL(lastWindowClosed()), this, SLOT(hideOrQuit()));
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+
+ QString qcopfn("/tmp/qcop-msg-");
+ qcopfn += QString(argv[0]); // append command name
+
+ QFile f(qcopfn);
+ if ( f.open(IO_ReadOnly) ) {
+ flock(f.handle(), LOCK_EX);
+ }
+
+ sysChannel = new QCopChannel( "QPE/System", this );
+ connect( sysChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(systemMessage( const QCString &, const QByteArray &)) );
+
+ QCString channel = QCString(argv[0]);
+ channel.replace(QRegExp(".*/"),"");
+ d->appName = channel;
+ channel = "QPE/Application/" + channel;
+ pidChannel = new QCopChannel( channel, this);
+ connect( pidChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(pidMessage(const QCString &, const QByteArray &)));
+
+ if ( f.isOpen() ) {
+ d->keep_running = FALSE;
+ QDataStream ds(&f);
+ QCString channel, message;
+ QByteArray data;
+ while(!ds.atEnd()) {
+ ds >> channel >> message >> data;
+ d->enqueueQCop(channel,message,data);
+ }
+
+ flock(f.handle(), LOCK_UN);
+ f.close();
+ f.remove();
+ }
+
+ for (int a=0; a<argc; a++) {
+ if ( qstrcmp(argv[a],"-preload")==0 ) {
+ argv[a] = argv[a+1];
+ a++;
+ d->preloaded = TRUE;
+ argc-=1;
+ } else if ( qstrcmp(argv[a],"-preload-show")==0 ) {
+ argv[a] = argv[a+1];
+ a++;
+ d->preloaded = TRUE;
+ d->forceshow = TRUE;
+ argc-=1;
+ }
+ }
+
+ /* overide stored arguments */
+ setArgs(argc, argv);
+
+#endif
+
+ qwsSetDecoration( new QPEDecoration() );
+
+#ifndef QT_NO_TRANSLATION
+ char *l = getenv( "LANG" );
+ QString lang;
+ if ( l ) {
+ lang = l;
+
+ /*
+ Config config("qpe");
+ config.setGroup( "Appearance" );
+ lang = config.readEntry( "Language", lang );
+ */
+
+ QTranslator * trans = new QTranslator(this);
+ QString tfn = qpeDir()+"/i18n/"+lang+"/"+d->appName+".qm";
+ if ( trans->load( tfn ))
+ installTranslator( trans );
+ else
+ delete trans;
+
+ trans = new QTranslator(this);
+ tfn = qpeDir()+"/i18n/"+lang+"/libqpe.qm";
+ if ( trans->load( tfn ))
+ installTranslator( trans );
+ else
+ delete trans;
+
+ //###language/font hack; should look it up somewhere
+ if ( lang == "ja" || lang == "zh_CN" || lang == "zh_TW" || lang == "ko" ) {
+ QFont fn = FontManager::unicodeFont( FontManager::Proportional );
+ setFont( fn );
+ }
+ }
+#endif
+
+ applyStyle();
+
+ if ( type() == GuiServer ) {
+ setScreenSaverInterval(-1);
+ setVolume();
+ QWSServer::setScreenSaver(new QPEScreenSaver);
+ }
+
+ installEventFilter( this );
+
+ QPEMenuToolFocusManager::initialize();
+
+#ifdef QT_NO_QWS_CURSOR
+ // if we have no cursor, probably don't want tooltips
+ QToolTip::setEnabled( FALSE );
+#endif
+}
+
+static QPtrDict<void>* inputMethodDict=0;
+static void createInputMethodDict()
+{
+ if ( !inputMethodDict )
+ inputMethodDict = new QPtrDict<void>;
+}
+
+/*!
+ Returns the currently set hint to the system as to whether
+ \a w has any use for text input methods.
+
+ \sa setInputMethodHint()
+*/
+QPEApplication::InputMethodHint QPEApplication::inputMethodHint( QWidget* w )
+{
+ if ( inputMethodDict && w )
+ return (InputMethodHint)(int)inputMethodDict->find(w);
+ return Normal;
+}
+
+/*!
+ \enum QPEApplication::InputMethodHint
+
+ \value Normal the application sometimes needs text input (the default).
+ \value AlwaysOff the application never needs text input.
+ \value AlwaysOn the application always needs text input.
+*/
+
+/*!
+ Hints to the system that \a w has use for text input methods
+ as specified by \a mode.
+
+ \sa inputMethodHint()
+*/
+void QPEApplication::setInputMethodHint( QWidget* w, InputMethodHint mode )
+{
+ createInputMethodDict();
+ if ( mode == Normal ) {
+ inputMethodDict->remove(w);
+ } else {
+ inputMethodDict->insert(w,(void*)mode);
+ }
+}
+
+class HackDialog : public QDialog
+{
+public:
+ void acceptIt() { accept(); }
+ void rejectIt() { reject(); }
+};
+
+
+void QPEApplication::mapToDefaultAction( QWSKeyEvent *ke, int key )
+{
+ // specialised actions for certain widgets. May want to
+ // add more stuff here.
+ if ( activePopupWidget() && activePopupWidget()->inherits( "QListBox" )
+ && activePopupWidget()->parentWidget()
+ && activePopupWidget()->parentWidget()->inherits( "QComboBox" ) )
+ key = Qt::Key_Return;
+
+ if ( activePopupWidget() && activePopupWidget()->inherits( "QPopupMenu" ) )
+ key = Qt::Key_Return;
+
+ ke->simpleData.keycode = key;
+}
+
+class HackWidget : public QWidget
+{
+public:
+ bool needsOk()
+ { return (getWState() & WState_Reserved1 ); }
+};
+
+/*!
+ \internal
+*/
+bool QPEApplication::qwsEventFilter( QWSEvent *e )
+{
+ if ( !d->notbusysent && e->type == QWSEvent::Focus ) {
+ if ( qApp->type() != QApplication::GuiServer ) {
+ QCopEnvelope e("QPE/System", "notBusy(QString)" );
+ e << d->appName;
+ }
+ d->notbusysent=TRUE;
+ }
+ if ( type() == GuiServer ) {
+ switch ( e->type ) {
+ case QWSEvent::Mouse:
+ if ( e->asMouse()->simpleData.state && !QWidget::find(e->window()) )
+ emit clientMoused();
+ }
+ }
+ if ( e->type == QWSEvent::Key ) {
+ if ( d->kbgrabber == 1 )
+ return TRUE;
+ QWSKeyEvent *ke = (QWSKeyEvent *)e;
+ if ( ke->simpleData.keycode == Qt::Key_F33 ) {
+ // Use special "OK" key to press "OK" on top level widgets
+ QWidget *active = activeWindow();
+ QWidget *popup = 0;
+ if ( active && active->isPopup() ) {
+ popup = active;
+ active = active->parentWidget();
+ }
+ if ( active && (int)active->winId() == ke->simpleData.window &&
+ !active->testWFlags( WStyle_Customize|WType_Popup|WType_Desktop )) {
+ if ( ke->simpleData.is_press ) {
+ if ( popup )
+ popup->close();
+ if ( active->inherits( "QDialog" ) ) {
+ HackDialog *d = (HackDialog *)active;
+ d->acceptIt();
+ return TRUE;
+ } else if ( ((HackWidget *)active)->needsOk() ) {
+ QSignal s;
+ s.connect( active, SLOT( accept() ) );
+ s.activate();
+ } else {
+ // do the same as with the select key: Map to the default action of the widget:
+ mapToDefaultAction( ke, Qt::Key_Return );
+ }
+ }
+ }
+ } else if ( ke->simpleData.keycode == Qt::Key_F30 ) {
+ // Use special "select" key to do whatever default action a widget has
+ mapToDefaultAction( ke, Qt::Key_Space );
+ } else if ( ke->simpleData.keycode == Qt::Key_Escape &&
+ ke->simpleData.is_press ) {
+ // Escape key closes app if focus on toplevel
+ QWidget *active = activeWindow();
+ if ( active && active->testWFlags( WType_TopLevel ) &&
+ (int)active->winId() == ke->simpleData.window &&
+ !active->testWFlags( WStyle_Dialog|WStyle_Customize|WType_Popup|WType_Desktop )) {
+ if ( active->inherits( "QDialog" ) ) {
+ HackDialog *d = (HackDialog *)active;
+ d->rejectIt();
+ return TRUE;
+ } else if ( strcmp( argv()[0], "embeddedkonsole") != 0 ) {
+ active->close();
+ }
+ }
+ }
+
+#if QT_VERSION < 231
+ // Filter out the F4/Launcher key from apps
+ // ### The launcher key may not always be F4 on all devices
+ if ( ((QWSKeyEvent *)e)->simpleData.keycode == Qt::Key_F4 )
+ return TRUE;
+#endif
+ }
+ if ( e->type == QWSEvent::Focus ) {
+ QWSFocusEvent *fe = (QWSFocusEvent*)e;
+ QWidget* nfw = QWidget::find(e->window());
+ if ( !fe->simpleData.get_focus ) {
+ QWidget *active = activeWindow();
+ while ( active && active->isPopup() ) {
+ active->close();
+ active = activeWindow();
+ }
+ if ( !nfw && d->kbgrabber == 2 ) {
+ ungrabKeyboard();
+ d->kbregrab = TRUE; // want kb back when we're active
+ }
+ } else {
+ // make sure our modal widget is ALWAYS on top
+ QWidget *topm = activeModalWidget();
+ if ( topm ) {
+ topm->raise();
+ }
+ if ( d->kbregrab ) {
+ grabKeyboard();
+ d->kbregrab = FALSE;
+ }
+ }
+ if ( fe->simpleData.get_focus && inputMethodDict ) {
+ InputMethodHint m = inputMethodHint( QWidget::find(e->window()) );
+ if ( m == AlwaysOff )
+ Global::hideInputMethod();
+ if ( m == AlwaysOn )
+ Global::showInputMethod();
+ }
+ }
+ return QApplication::qwsEventFilter( e );
+}
+
+/*!
+ Destroys the QPEApplication.
+*/
+QPEApplication::~QPEApplication()
+{
+ ungrabKeyboard();
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ // Need to delete QCopChannels early, since the display will
+ // be gone by the time we get to ~QObject().
+ delete sysChannel;
+ delete pidChannel;
+#endif
+ delete d;
+}
+
+/*!
+ Returns <tt>$QPEDIR/</tt>.
+*/
+QString QPEApplication::qpeDir()
+{
+ const char *base = getenv( "QPEDIR" );
+ if ( base )
+ return QString( base ) + "/";
+
+ return QString( "../" );
+}
+
+/*!
+ Returns the user's current Document directory. There is a trailing "/".
+*/
+QString QPEApplication::documentDir()
+{
+ const char *base = getenv( "HOME" );
+ if ( base )
+ return QString( base ) + "/Documents/";
+
+ return QString( "../Documents/" );
+}
+
+static int deforient=-1;
+
+/*!
+ \internal
+*/
+int QPEApplication::defaultRotation()
+{
+ if ( deforient < 0 ) {
+ QString d = getenv("QWS_DISPLAY");
+ if ( d.contains("Rot90") ) {
+ deforient = 90;
+ } else if ( d.contains("Rot180") ) {
+ deforient = 180;
+ } else if ( d.contains("Rot270") ) {
+ deforient = 270;
+ } else {
+ deforient=0;
+ }
+ }
+ return deforient;
+}
+
+/*!
+ \internal
+*/
+void QPEApplication::setDefaultRotation(int r)
+{
+ if ( qApp->type() == GuiServer ) {
+ deforient = r;
+ setenv("QWS_DISPLAY", QString("Transformed:Rot%1:0").arg(r).latin1(), 1);
+ } else {
+ QCopEnvelope("QPE/System", "setDefaultRotation(int)") << r;
+ }
+}
+
+/*!
+ \internal
+*/
+void QPEApplication::applyStyle()
+{
+ Config config( "qpe" );
+
+ config.setGroup( "Appearance" );
+
+ // Widget style
+ QString style = config.readEntry( "Style", "Light" );
+ internalSetStyle( style );
+
+ // Colors
+ QColor bgcolor( config.readEntry( "Background", "#E5E1D5" ) );
+ QColor btncolor( config.readEntry( "Button", "#D6CDBB" ) );
+ QPalette pal( btncolor, bgcolor );
+ QString color = config.readEntry( "Highlight", "#800000" );
+ pal.setColor( QColorGroup::Highlight, QColor(color) );
+ color = config.readEntry( "HighlightedText", "#FFFFFF" );
+ pal.setColor( QColorGroup::HighlightedText, QColor(color) );
+ color = config.readEntry( "Text", "#000000" );
+ pal.setColor( QColorGroup::Text, QColor(color) );
+ color = config.readEntry( "ButtonText", "#000000" );
+ pal.setColor( QPalette::Active, QColorGroup::ButtonText, QColor(color) );
+ color = config.readEntry( "Base", "#FFFFFF" );
+ pal.setColor( QColorGroup::Base, QColor(color) );
+
+ pal.setColor( QPalette::Disabled, QColorGroup::Text,
+ pal.color(QPalette::Active, QColorGroup::Background).dark() );
+
+ setPalette( pal, TRUE );
+}
+
+void QPEApplication::systemMessage( const QCString &msg, const QByteArray &data)
+{
+#ifdef Q_WS_QWS
+ QDataStream stream( data, IO_ReadOnly );
+ if ( msg == "applyStyle()" ) {
+ applyStyle();
+ } else if ( msg == "setScreenSaverInterval(int)" ) {
+ if ( type() == GuiServer ) {
+ int time;
+ stream >> time;
+ setScreenSaverInterval(time);
+ }
+ } else if ( msg == "setScreenSaverIntervals(int,int,int)" ) {
+ if ( type() == GuiServer ) {
+ int t1,t2,t3;
+ stream >> t1 >> t2 >> t3;
+ setScreenSaverIntervals(t1,t2,t3);
+ }
+ } else if ( msg == "setBacklight(int)" ) {
+ if ( type() == GuiServer ) {
+ int bright;
+ stream >> bright;
+ setBacklight(bright);
+ }
+ } else if ( msg == "setDefaultRotation(int)" ) {
+ if ( type() == GuiServer ) {
+ int r;
+ stream >> r;
+ setDefaultRotation(r);
+ }
+ } else if ( msg == "shutdown()" ) {
+ if ( type() == GuiServer )
+ shutdown();
+ } else if ( msg == "quit()" ) {
+ if ( type() != GuiServer )
+ tryQuit();
+ } else if ( msg == "forceQuit()" ) {
+ if ( type() != GuiServer )
+ quit();
+ } else if ( msg == "restart()" ) {
+ if ( type() == GuiServer )
+ restart();
+ } else if ( msg == "grabKeyboard(QString)" ) {
+ QString who;
+ stream >> who;
+ if ( who.isEmpty() )
+ d->kbgrabber = 0;
+ else if ( who != d->appName )
+ d->kbgrabber = 1;
+ else
+ d->kbgrabber = 2;
+ } else if ( msg == "language(QString)" ) {
+ if ( type() == GuiServer ) {
+ QString l;
+ stream >> l;
+ QString cl = getenv("LANG");
+ if ( cl != l ) {
+ if ( l.isNull() )
+ unsetenv( "LANG" );
+ else
+ setenv( "LANG", l.latin1(), 1 );
+ restart();
+ }
+ }
+ } else if ( msg == "timeChange(QString)" ) {
+ QString t;
+ stream >> t;
+ if ( t.isNull() )
+ unsetenv( "TZ" );
+ else
+ setenv( "TZ", t.latin1(), 1 );
+ // emit the signal so everyone else knows...
+ emit timeChanged();
+ } else if ( msg == "execute(QString)" ) {
+ if ( type() == GuiServer ) {
+ QString t;
+ stream >> t;
+ Global::execute( t );
+ }
+ } else if ( msg == "execute(QString,QString)" ) {
+ if ( type() == GuiServer ) {
+ QString t,d;
+ stream >> t >> d;
+ Global::execute( t, d );
+ }
+ } else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) {
+ if ( type() == GuiServer ) {
+ QDateTime when;
+ QCString channel, message;
+ int data;
+ stream >> when >> channel >> message >> data;
+ AlarmServer::addAlarm( when, channel, message, data );
+ }
+ } else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) {
+ if ( type() == GuiServer ) {
+ QDateTime when;
+ QCString channel, message;
+ int data;
+ stream >> when >> channel >> message >> data;
+ AlarmServer::deleteAlarm( when, channel, message, data );
+ }
+ } else if ( msg == "clockChange(bool)" ) {
+ int tmp;
+ stream >> tmp;
+ emit clockChanged( tmp );
+ } else if ( msg == "weekChange(bool)" ) {
+ int tmp;
+ stream >> tmp;
+ emit weekChanged( tmp );
+ } else if ( msg == "setDateFormat(DateFormat)" ) {
+ DateFormat tmp;
+ stream >> tmp;
+ emit dateFormatChanged( tmp );
+ } else if ( msg == "setVolume(int,int)" ) {
+ int t,v;
+ stream >> t >> v;
+ setVolume(t,v);
+ emit volumeChanged( muted );
+ } else if ( msg == "volumeChange(bool)" ) {
+ stream >> muted;
+ setVolume();
+ emit volumeChanged( muted );
+ } else if ( msg == "setScreenSaverMode(int)" ) {
+ if ( type() == GuiServer ) {
+ int old = disable_suspend;
+ stream >> disable_suspend;
+ //qDebug("setScreenSaverMode(%d)", disable_suspend );
+ if ( disable_suspend > old )
+ setScreenSaverInterval( -1 );
+ }
+ }
+#endif
+}
+
+/*!
+ \internal
+*/
+bool QPEApplication::raiseAppropriateWindow()
+{
+ bool r=FALSE;
+ // ########## raise()ing main window should raise and set active
+ // ########## it and then all childen. This belongs in Qt/Embedded
+ QWidget *top = d->qpe_main_widget;
+ if ( !top ) top =mainWidget();
+ if ( top && d->keep_running ) {
+ if ( top->isVisible() )
+ r = TRUE;
+#ifdef Q_WS_QWS
+ if ( !d->nomaximize )
+ top->showMaximized();
+ else
+#endif
+ top->show();
+ top->raise();
+ top->setActiveWindow();
+ }
+ QWidget *topm = activeModalWidget();
+ if ( topm && topm != top ) {
+ topm->show();
+ topm->raise();
+ topm->setActiveWindow();
+ r = FALSE;
+ }
+ return r;
+}
+
+void QPEApplication::pidMessage( const QCString &msg, const QByteArray & data)
+{
+#ifdef Q_WS_QWS
+
+ if ( msg == "quit()" ) {
+ tryQuit();
+ } else if ( msg == "quitIfInvisible()" ) {
+ if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() )
+ quit();
+ } else if ( msg == "close()" ) {
+ hideOrQuit();
+ } else if ( msg == "disablePreload()" ) {
+ d->preloaded = FALSE;
+ d->keep_running = TRUE;
+ /* so that quit will quit */
+ } else if ( msg == "enablePreload()" ) {
+ d->preloaded = TRUE;
+ d->keep_running = TRUE;
+ /* so next quit won't quit */
+ } else if ( msg == "raise()" ) {
+ d->keep_running = TRUE;
+ d->notbusysent = FALSE;
+ raiseAppropriateWindow();
+ } else if ( msg == "flush()" ) {
+ emit flush();
+ // we need to tell the desktop
+ QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" );
+ e << d->appName;
+ } else if ( msg == "reload()" ) {
+ emit reload();
+ } else if ( msg == "setDocument(QString)" ) {
+ d->keep_running = TRUE;
+ QDataStream stream( data, IO_ReadOnly );
+ QString doc;
+ stream >> doc;
+ QWidget *mw = mainWidget();
+ if ( !mw )
+ mw = d->qpe_main_widget;
+ if ( mw )
+ Global::setDocument( mw, doc );
+ } else if ( msg == "nextView()" ) {
+ if ( raiseAppropriateWindow() )
+ emit appMessage( msg, data);
+ } else {
+ emit appMessage( msg, data);
+ }
+#endif
+}
+
+
+static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ )
+{
+/*
+ // This works but disable it for now until it is safe to apply
+ // What is does is scan the .desktop files of all the apps for
+ // the applnk that has the corresponding argv[0] as this program
+ // then it uses the name stored in the .desktop file as the caption
+ // for the main widget. This saves duplicating translations for
+ // the app name in the program and in the .desktop files.
+
+ AppLnkSet apps( appsPath );
+
+ QList<AppLnk> appsList = apps.children();
+ for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) {
+ if ( (*it)->exec() == appName ) {
+ mw->setCaption( (*it)->name() );
+ return TRUE;
+ }
+ }
+*/
+ return FALSE;
+}
+
+
+/*!
+ Sets \a mw as the mainWidget() and shows it. For small windows,
+ consider passing TRUE for \a nomaximize rather than the default FALSE.
+
+ \sa showMainDocumentWidget()
+*/
+void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize )
+{
+ setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" );
+
+ d->nomaximize = nomaximize;
+ d->qpe_main_widget = mw;
+ d->sendQCopQ();
+ if ( d->preloaded ) {
+ if(d->forceshow) {
+#ifdef Q_WS_QWS
+ if ( !nomaximize )
+ mw->showMaximized();
+ else
+#endif
+ mw->show();
+ }
+ } else if ( d->keep_running ) {
+#ifdef Q_WS_QWS
+ if ( !nomaximize )
+ mw->showMaximized();
+ else
+#endif
+ mw->show();
+ }
+}
+
+/*!
+ Sets \a mw as the mainWidget() and shows it. For small windows,
+ consider passing TRUE for \a nomaximize rather than the default FALSE.
+
+ This calls designates the application as
+ a \link docwidget.html document-oriented\endlink application.
+
+ The \a mw widget must have a slot: setDocument(const QString&).
+
+ \sa showMainWidget()
+*/
+void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize )
+{
+ setWidgetCaptionFromAppName( mw, d->appName, qpeDir() + "apps" );
+
+ if ( mw && argc() == 2 )
+ Global::setDocument( mw, QString::fromUtf8(argv()[1]) );
+ d->nomaximize = nomaximize;
+ d->qpe_main_widget = mw;
+ d->sendQCopQ();
+ if ( d->preloaded ) {
+ if(d->forceshow) {
+#ifdef Q_WS_QWS
+ if ( !nomaximize )
+ mw->showMaximized();
+ else
+#endif
+ mw->show();
+ }
+ } else if ( d->keep_running ) {
+#ifdef Q_WS_QWS
+ if ( !nomaximize )
+ mw->showMaximized();
+ else
+#endif
+ mw->show();
+ }
+}
+
+
+/*!
+ Sets that the application should continue running after processing
+ qcop messages. Normally if an application is started via a qcop message,
+ the application will process the qcop message and then quit. If while
+ processing the qcop message it calls this function, then the application
+ will show and start proper once it has finished processing qcop messages.
+
+ \sa keepRunning()
+*/
+void QPEApplication::setKeepRunning()
+{
+ if ( qApp && qApp->inherits( "QPEApplication" ) ) {
+ QPEApplication *qpeApp = (QPEApplication*)qApp;
+ qpeApp->d->keep_running = TRUE;
+ }
+}
+
+/*!
+ Returns whether the application will quit after processing the current
+ list of qcop messages.
+
+ \sa setKeepRunning()
+*/
+bool QPEApplication::keepRunning() const
+{
+ return d->keep_running;
+}
+
+/*!
+ \internal
+*/
+void QPEApplication::internalSetStyle( const QString &style )
+{
+#if QT_VERSION >= 300
+ if ( style == "QPE" ) {
+ setStyle( new QPEStyle );
+ } else {
+ QStyle *s = QStyleFactory::create(style);
+ if ( s ) setStyle(s);
+ }
+#else
+ if ( style == "Windows" ) {
+ setStyle( new QWindowsStyle );
+ } else if ( style == "QPE" ) {
+ setStyle( new QPEStyle );
+ } else if ( style == "Light" ) {
+ setStyle( new LightStyle );
+ }
+#ifndef QT_NO_STYLE_PLATINUM
+ else if ( style == "Platinum" ) {
+ setStyle( new QPlatinumStyle );
+ }
+#endif
+#ifndef QT_NO_STYLE_MOTIF
+ else if ( style == "Motif" ) {
+ setStyle( new QMotifStyle );
+ }
+#endif
+#ifndef QT_NO_STYLE_MOTIFPLUS
+ else if ( style == "MotifPlus" ) {
+ setStyle( new QMotifPlusStyle );
+ }
+#endif
+#endif
+}
+
+/*!
+ \internal
+*/
+void QPEApplication::prepareForTermination(bool willrestart)
+{
+ if ( willrestart ) {
+ // Draw a big wait icon, the image can be altered in later revisions
+// QWidget *d = QApplication::desktop();
+ QImage img = Resource::loadImage( "wait" );
+ QPixmap pix;
+ pix.convertFromImage(img.smoothScale(3*img.width(), 3*img.height()));
+ QLabel *lblWait = new QLabel(0, "wait hack!", QWidget::WStyle_Customize |
+ QWidget::WStyle_NoBorder | QWidget::WStyle_Tool );
+ lblWait->setPixmap( pix );
+ lblWait->setAlignment( QWidget::AlignCenter );
+ lblWait->show();
+ lblWait->showMaximized();
+ }
+#ifndef SINGLE_APP
+ { QCopEnvelope envelope("QPE/System", "forceQuit()"); }
+ processEvents(); // ensure the message goes out.
+ sleep(1); // You have 1 second to comply.
+#endif
+}
+
+/*!
+ \internal
+*/
+void QPEApplication::shutdown()
+{
+ // Implement in server's QPEApplication subclass
+}
+
+/*!
+ \internal
+*/
+void QPEApplication::restart()
+{
+ // Implement in server's QPEApplication subclass
+}
+
+static QPtrDict<void>* stylusDict=0;
+static void createDict()
+{
+ if ( !stylusDict )
+ stylusDict = new QPtrDict<void>;
+}
+
+/*!
+ Returns the current StylusMode for \a w.
+
+ \sa setStylusOperation()
+*/
+QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w )
+{
+ if ( stylusDict )
+ return (StylusMode)(int)stylusDict->find(w);
+ return LeftOnly;
+}
+
+/*!
+ \enum QPEApplication::StylusMode
+
+ \value LeftOnly the stylus only generates LeftButton
+ events (the default).
+ \value RightOnHold the stylus generates RightButton events
+ if the user uses the press-and-hold gesture.
+
+ See setStylusOperation().
+*/
+
+/*!
+ Causes \a w to receive mouse events according to \a mode.
+
+ \sa stylusOperation()
+*/
+void QPEApplication::setStylusOperation( QWidget* w, StylusMode mode )
+{
+ createDict();
+ if ( mode == LeftOnly ) {
+ stylusDict->remove(w);
+ w->removeEventFilter(qApp);
+ } else {
+ stylusDict->insert(w,(void*)mode);
+ connect(w,SIGNAL(destroyed()),qApp,SLOT(removeSenderFromStylusDict()));
+ w->installEventFilter(qApp);
+ }
+}
+
+
+/*!
+ \reimp
+*/
+bool QPEApplication::eventFilter( QObject *o, QEvent *e )
+{
+ if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
+ QMouseEvent* me = (QMouseEvent*)e;
+ if ( me->button() == LeftButton ) {
+ StylusMode mode = (StylusMode)(int)stylusDict->find(o);
+ switch (mode) {
+ case RightOnHold:
+ switch ( me->type() ) {
+ case QEvent::MouseButtonPress:
+ d->presstimer = startTimer(500); // #### pref.
+ d->presswidget = (QWidget*)o;
+ d->presspos = me->pos();
+ d->rightpressed = FALSE;
+ break;
+ case QEvent::MouseButtonRelease:
+ if ( d->presstimer ) {
+ killTimer(d->presstimer);
+ d->presstimer = 0;
+ }
+ if ( d->rightpressed && d->presswidget ) {
+ // Right released
+ postEvent( d->presswidget,
+ new QMouseEvent( QEvent::MouseButtonRelease, me->pos(),
+ RightButton, LeftButton+RightButton ) );
+ // Left released, off-widget
+ postEvent( d->presswidget,
+ new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1),
+ LeftButton, LeftButton ) );
+ postEvent( d->presswidget,
+ new QMouseEvent( QEvent::MouseButtonRelease, QPoint(-1,-1),
+ LeftButton, LeftButton ) );
+ d->rightpressed = FALSE;
+ return TRUE; // don't send the real Left release
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ ;
+ }
+ }
+ } else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
+ QKeyEvent *ke = (QKeyEvent *)e;
+ if ( ke->key() == Key_Enter ) {
+ if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) {
+ postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ',
+ ke->state(), " ", ke->isAutoRepeat(), ke->count() ) );
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+/*!
+ \reimp
+*/
+void QPEApplication::timerEvent( QTimerEvent *e )
+{
+ if ( e->timerId() == d->presstimer && d->presswidget ) {
+ // Right pressed
+ postEvent( d->presswidget,
+ new QMouseEvent( QEvent::MouseButtonPress, d->presspos,
+ RightButton, LeftButton ) );
+ killTimer( d->presstimer );
+ d->presstimer = 0;
+ d->rightpressed = TRUE;
+ }
+}
+
+void QPEApplication::removeSenderFromStylusDict()
+{
+ stylusDict->remove((void*)sender());
+ if ( d->presswidget == sender() )
+ d->presswidget = 0;
+}
+
+/*!
+ \internal
+*/
+bool QPEApplication::keyboardGrabbed() const
+{
+ return d->kbgrabber;
+}
+
+
+/*!
+ Reverses the effect of grabKeyboard(). This is called automatically
+ on program exit.
+*/
+void QPEApplication::ungrabKeyboard()
+{
+ QPEApplicationData* d = ((QPEApplication*)qApp)->d;
+ if ( d->kbgrabber == 2 ) {
+ QCopEnvelope e("QPE/System", "grabKeyboard(QString)" );
+ e << QString::null;
+ d->kbregrab = FALSE;
+ d->kbgrabber = 0;
+ }
+}
+
+/*!
+ Grabs the keyboard such that the system's application launching
+ keys no longer work, and instead they are receivable by this
+ application.
+
+ \sa ungrabKeyboard()
+*/
+void QPEApplication::grabKeyboard()
+{
+ QPEApplicationData* d = ((QPEApplication*)qApp)->d;
+ if ( qApp->type() == QApplication::GuiServer )
+ d->kbgrabber = 0;
+ else {
+ QCopEnvelope e("QPE/System", "grabKeyboard(QString)" );
+ e << d->appName;
+ d->kbgrabber = 2; // me
+ }
+}
+
+/*!
+ \reimp
+*/
+int QPEApplication::exec()
+{
+ d->sendQCopQ();
+ if ( d->keep_running)
+ //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() )
+ return QApplication::exec();
+
+ {
+ QCopEnvelope e("QPE/System", "closing(QString)" );
+ e << d->appName;
+ }
+ processEvents();
+ return 0;
+}
+
+/*!
+ \internal
+ External request for application to quit. Quits if possible without
+ loosing state.
+*/
+void QPEApplication::tryQuit()
+{
+ if ( activeModalWidget() || strcmp( argv()[0], "embeddedkonsole") == 0 )
+ return; // Inside modal loop or konsole. Too hard to save state.
+ {
+ QCopEnvelope e("QPE/System", "closing(QString)" );
+ e << d->appName;
+ }
+ processEvents();
+
+ quit();
+}
+
+/*!
+ \internal
+ User initiated quit. Makes the window 'Go Away'. If preloaded this means
+ hiding the window. If not it means quitting the application.
+ As this is user initiated we don't need to check state.
+*/
+void QPEApplication::hideOrQuit()
+{
+ // notify of our demise :)
+ {
+ QCopEnvelope e("QPE/System", "closing(QString)" );
+ e << d->appName;
+ }
+ processEvents();
+ if ( d->preloaded && d->qpe_main_widget )
+ d->qpe_main_widget->hide();
+ else
+ quit();
+}
+
+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
+
+// The libraries with the skiff package (and possibly others) have
+// completely useless implementations of builtin new and delete that
+// use about 50% of your CPU. Here we revert to the simple libc
+// functions.
+
+void* operator new[](size_t size)
+{
+ return malloc(size);
+}
+
+void* operator new(size_t size)
+{
+ return malloc(size);
+}
+
+void operator delete[](void* p)
+{
+ free(p);
+}
+
+void operator delete[](void* p, size_t /*size*/)
+{
+ free(p);
+}
+
+void operator delete(void* p)
+{
+ free(p);
+}
+
+void operator delete(void* p, size_t /*size*/)
+{
+ free(p);
+}
+
+#endif
+
+#if ( QT_VERSION <= 230 ) && !defined(SINGLE_APP)
+#include <qwidgetlist.h>
+#include <qgfx_qws.h>
+extern QRect qt_maxWindowRect;
+void qt_setMaxWindowRect(const QRect& r)
+{
+ qt_maxWindowRect = qt_screen->mapFromDevice(r,
+ qt_screen->mapToDevice(QSize(qt_screen->width(),qt_screen->height())));
+ // Re-resize any maximized windows
+ QWidgetList* l = QApplication::topLevelWidgets();
+ if ( l ) {
+ QWidget *w = l->first();
+ while ( w ) {
+ if ( w->isVisible() && w->isMaximized() )
+ {
+ w->showMaximized();
+ }
+ w = l->next();
+ }
+ delete l;
+ }
+}
+#endif
diff --git a/library/qpeapplication.h b/library/qpeapplication.h
new file mode 100644
index 0000000..fd5e57d
--- a/dev/null
+++ b/library/qpeapplication.h
@@ -0,0 +1,124 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __QPE_APPLICATION_H__
+#define __QPE_APPLICATION_H__
+
+
+#include <qapplication.h>
+#if defined(_WS_QWS_) && !defined(Q_WS_QWS)
+#define Q_WS_QWS
+#endif
+#include "qpedecoration_qws.h"
+#include "timestring.h"
+
+class QCopChannel;
+class QPEApplicationData;
+class QWSEvent;
+class QWSKeyEvent;
+
+class QPEApplication : public QApplication
+{
+ Q_OBJECT
+public:
+ QPEApplication( int& argc, char **argv, Type=GuiClient );
+ ~QPEApplication();
+
+ static QString qpeDir();
+ static QString documentDir();
+ void applyStyle();
+ static int defaultRotation();
+ static void setDefaultRotation(int r);
+ static void grabKeyboard();
+ static void ungrabKeyboard();
+
+ enum StylusMode {
+ LeftOnly,
+ RightOnHold
+ // RightOnHoldLeftDelayed, etc.
+ };
+ static void setStylusOperation( QWidget*, StylusMode );
+ static StylusMode stylusOperation( QWidget* );
+
+ enum InputMethodHint {
+ Normal,
+ AlwaysOff,
+ AlwaysOn
+ };
+
+ enum screenSaverHint {
+ Disable = 0,
+ DisableLightOff = 1,
+ DisableSuspend = 2,
+ Enable = 100
+ };
+
+ static void setInputMethodHint( QWidget *, InputMethodHint );
+ static InputMethodHint inputMethodHint( QWidget * );
+
+ void showMainWidget( QWidget*, bool nomax=FALSE );
+ void showMainDocumentWidget( QWidget*, bool nomax=FALSE );
+
+ static void setKeepRunning();
+ bool keepRunning() const;
+
+ int exec();
+
+signals:
+ void clientMoused();
+ void timeChanged();
+ void clockChanged( bool pm );
+ void volumeChanged( bool muted );
+ void appMessage( const QCString& msg, const QByteArray& data);
+ void weekChanged( bool startOnMonday );
+ void dateFormatChanged( DateFormat );
+ void flush();
+ void reload();
+
+private slots:
+ void systemMessage( const QCString &msg, const QByteArray &data );
+ void pidMessage( const QCString &msg, const QByteArray &data );
+ void removeSenderFromStylusDict();
+ void hideOrQuit();
+
+protected:
+ bool qwsEventFilter( QWSEvent * );
+ void internalSetStyle( const QString &style );
+ void prepareForTermination(bool willrestart);
+ virtual void restart();
+ virtual void shutdown();
+ bool eventFilter( QObject *, QEvent * );
+ void timerEvent( QTimerEvent * );
+ bool keyboardGrabbed() const;
+ bool raiseAppropriateWindow();
+ virtual void tryQuit();
+
+private:
+ void mapToDefaultAction( QWSKeyEvent *ke, int defKey );
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopChannel *sysChannel;
+ QCopChannel *pidChannel;
+#endif
+ QPEApplicationData *d;
+};
+
+
+#endif
+
diff --git a/library/qpedebug.cpp b/library/qpedebug.cpp
new file mode 100644
index 0000000..29bcbb6
--- a/dev/null
+++ b/library/qpedebug.cpp
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qpedebug.h"
+#include <stdio.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+struct timeval qpe_debuglast;
+
+void qpe_debugTime( const char *file, int line, const char *desc )
+{
+ struct timeval tv;
+ gettimeofday( &tv, 0 );
+
+ int tdiff = tv.tv_usec - qpe_debuglast.tv_usec;
+ tdiff += (tv.tv_sec - qpe_debuglast.tv_sec) * 1000000;
+
+ fprintf( stderr, "%s:%d Time: %ld.%06ld", file, line, tv.tv_sec, tv.tv_usec);
+
+ static int pid = getpid();
+
+ if ( qpe_debuglast.tv_sec )
+ fprintf( stderr, " (pid %d delta %dus)", pid, tdiff );
+
+ if ( desc )
+ fprintf( stderr, " (%s)", desc );
+
+ fprintf( stderr, "\n" );
+
+ qpe_debuglast = tv;
+}
+
+
diff --git a/library/qpedebug.h b/library/qpedebug.h
new file mode 100644
index 0000000..434ddec
--- a/dev/null
+++ b/library/qpedebug.h
@@ -0,0 +1,29 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef QPEDEBUG_H
+#define QPEDEBUG_H
+
+#define QPE_DEBUGTIMEDESC(X) qpe_debugTime( __FILE__, __LINE__, X );
+#define QPE_DEBUGTIME qpe_debugTime( __FILE__, __LINE__ );
+
+void qpe_debugTime( const char *file, int line, const char *desc=0 );
+
+#endif
+
diff --git a/library/qpedecoration_qws.cpp b/library/qpedecoration_qws.cpp
new file mode 100644
index 0000000..b6085ef
--- a/dev/null
+++ b/library/qpedecoration_qws.cpp
@@ -0,0 +1,639 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qapplication.h>
+#include <qstyle.h>
+#include <qwidget.h>
+#include <qpainter.h>
+#include <qtimer.h>
+#include <qwhatsthis.h>
+#include "qcopenvelope_qws.h"
+#include "qpedecoration_qws.h"
+#include <qdialog.h>
+#include <qdrawutil.h>
+#include <qgfx_qws.h>
+#include "qpeapplication.h"
+#include "resource.h"
+#include "global.h"
+#include <qfile.h>
+#include <qsignal.h>
+
+#include <stdlib.h>
+
+extern QRect qt_maxWindowRect;
+
+//#define MINIMIZE_HELP_HACK // use minimize button when not a dialog
+
+//#define WHATSTHIS_MODE
+
+#ifndef QT_NO_QWS_QPE_WM_STYLE
+
+#ifndef QT_NO_IMAGEIO_XPM
+
+/* XPM */
+static const char * const qpe_close_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+" ",
+" ",
+" ..... ",
+" ..+++++.. ",
+" .+++++++++. ",
+" .+..+++..+. ",
+" .++...+...++. ",
+" .+++.....+++. ",
+" .++++...++++. ",
+" .+++.....+++. ",
+" .++...+...++. ",
+" .+..+++..+. ",
+" .+++++++++. ",
+" ..+++++.. ",
+" ..... ",
+" "};
+
+/* XPM */
+static const char * const qpe_accept_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+" ",
+" ",
+" ..... ",
+" ..+++++.. ",
+" .+++++++++. ",
+" .+++++++++. ",
+" .+++++++..++. ",
+" .++.+++...++. ",
+" .+...+...+++. ",
+" .+......++++. ",
+" .++....+++++. ",
+" .++..+++++. ",
+" .+++++++++. ",
+" ..+++++.. ",
+" ..... ",
+" "};
+
+#endif // QT_NO_IMAGEIO_XPM
+
+class TLWidget : public QWidget
+{
+public:
+ QWSManager *manager()
+ {
+ return topData()->qwsManager;
+ }
+
+ QTLWExtra *topExtra()
+ {
+ return topData();
+ }
+};
+
+QPEManager::QPEManager( QPEDecoration *d, QObject *parent )
+ : QObject( parent ), decoration( d ), helpState(0)
+{
+ wtTimer = new QTimer( this );
+ connect( wtTimer, SIGNAL(timeout()), this, SLOT(whatsThisTimeout()) );
+}
+
+
+void QPEManager::updateActive()
+{
+ QWidget *newActive = qApp->activeWindow();
+ if ( (QWidget*)active == newActive )
+ return;
+
+ if ( active ) {
+ ((TLWidget *)(QWidget*)active)->manager()->removeEventFilter( this );
+ }
+
+ if ( newActive && ((TLWidget *)newActive)->manager() ) {
+ active = newActive;
+ ((TLWidget *)(QWidget*)active)->manager()->installEventFilter( this );
+ } else {
+ active = 0;
+ }
+}
+
+int QPEManager::pointInQpeRegion( QWidget *w, const QPoint &p )
+{
+ if ( decoration->region( w, w->geometry(),
+ (QWSDecoration::Region)QPEDecoration::Help ).contains(p) ) {
+ return QPEDecoration::Help;
+ }
+
+ return QWSDecoration::None;
+}
+
+bool QPEManager::eventFilter( QObject *o, QEvent *e )
+{
+ QWSManager *mgr = (QWSManager *)o;
+ QWidget *w = mgr->widget();
+ switch ( e->type() ) {
+ case QEvent::MouseButtonPress:
+ {
+ if ( QWhatsThis::inWhatsThisMode() ) {
+ QWhatsThis::leaveWhatsThisMode();
+ return true;
+ }
+ pressTime = QTime::currentTime();
+ QPoint p = ((QMouseEvent*)e)->globalPos();
+ if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) {
+ helpState = QWSButton::Clicked|QWSButton::MouseOver;
+ drawButton( w, QPEDecoration::Help, helpState );
+ return true;
+ }
+ }
+ break;
+ case QEvent::MouseButtonRelease:
+ if ( helpState & QWSButton::Clicked ) {
+ helpState = 0;
+ drawButton( w, QPEDecoration::Help, helpState );
+ QPoint p = ((QMouseEvent*)e)->globalPos();
+ if ( pointInQpeRegion( w, p ) == QPEDecoration::Help ) {
+#ifdef WHATSTHIS_MODE
+ if ( pressTime.msecsTo( QTime::currentTime() ) > 250 ) {
+ decoration->help( w );
+ } else {
+ QWhatsThis::enterWhatsThisMode();
+ wtTimer->start( 200 );
+ }
+#else
+ decoration->help( w );
+#endif
+ }
+ return true;
+ }
+ break;
+ case QEvent::MouseMove:
+ if ( helpState & QWSButton::Clicked ) {
+ int oldState = helpState;
+ QPoint p = ((QMouseEvent*)e)->globalPos();
+ if ( pointInQpeRegion( w, p ) == QPEDecoration::Help )
+ helpState = QWSButton::Clicked|QWSButton::MouseOver;
+ else
+ helpState = 0;
+ if ( helpState != oldState )
+ drawButton( w, QPEDecoration::Help, helpState );
+ }
+ break;
+ default:
+ break;
+ }
+ return QObject::eventFilter( o, e );
+}
+
+void QPEManager::drawButton( QWidget *w, QPEDecoration::QPERegion r, int state )
+{
+ QPainter painter(w);
+ QRegion rgn = ((TLWidget *)w)->topExtra()->decor_allocated_region;
+ painter.internalGfx()->setWidgetDeviceRegion( rgn );
+ painter.setClipRegion(decoration->region(w, w->rect(),QWSDecoration::All));
+ decoration->paintButton( &painter, w, (QWSDecoration::Region)r, state );
+}
+
+void QPEManager::whatsThisTimeout()
+{
+ if ( !QWhatsThis::inWhatsThisMode() ) {
+ wtTimer->stop();
+ if ( active )
+ drawButton( active, QPEDecoration::Help, 0 );
+ } else if ( active ) {
+ static int state = 0;
+ if ( !state )
+ state = QWSButton::Clicked|QWSButton::MouseOver;
+ else
+ state = 0;
+ drawButton( active, QPEDecoration::Help, state );
+ }
+}
+
+//=========
+
+class HackWidget : public QWidget
+{
+public:
+ bool needsOk() { return (getWState() & WState_Reserved1 ); }
+};
+
+//===========================================================================
+
+QPEDecoration::QPEDecoration()
+ : QWSDefaultDecoration()
+{
+ imageOk = Resource::loadImage( "OKButton" );
+ imageClose = Resource::loadImage( "CloseButton" );
+ imageHelp = Resource::loadImage( "HelpButton" );
+ helpFile = QString(qApp->argv()[0]) + ".html";
+ QString lang = getenv( "LANG" );
+ helpExists = QFile::exists( QPEApplication::qpeDir() + "/help/" + lang + "/html/" + helpFile );
+ if ( !helpExists )
+ helpExists = QFile::exists( QPEApplication::qpeDir() + "/help/en/html/" + helpFile );
+#ifndef MINIMIZE_HELP_HACK
+ qpeManager = new QPEManager( this );
+#else
+ qpeManager = 0;
+#endif
+}
+
+QPEDecoration::~QPEDecoration()
+{
+ delete qpeManager;
+}
+
+const char **QPEDecoration::menuPixmap()
+{
+ return (const char **)0;
+}
+
+const char **QPEDecoration::closePixmap()
+{
+ return (const char **)qpe_close_xpm;
+}
+
+const char **QPEDecoration::minimizePixmap()
+{
+ return (const char **)qpe_accept_xpm;
+}
+
+const char **QPEDecoration::maximizePixmap()
+{
+ return (const char **)0;
+}
+
+const char **QPEDecoration::normalizePixmap()
+{
+ return (const char **)0;
+}
+
+int QPEDecoration::getTitleHeight(const QWidget *)
+{
+ return 15;
+}
+
+/*
+ If rect is empty, no frame is added. (a hack, really)
+*/
+QRegion QPEDecoration::region(const QWidget *widget, const QRect &rect, QWSDecoration::Region type)
+{
+ int titleHeight = getTitleHeight(widget);
+// int titleWidth = getTitleWidth(widget);
+// int bw = rect.isEmpty() ? 0 : BORDER_WIDTH;
+ QRegion region;
+
+#ifndef MINIMIZE_HELP_HACK
+ qpeManager->updateActive();
+#endif
+
+ switch ((int)type) {
+ case Menu:
+ case Maximize:
+ break;
+ case Minimize: {
+ if ( ((HackWidget *)widget)->needsOk() ||
+ (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) ) {
+ QRect r(rect.right() - imageOk.width(),
+ rect.top() - titleHeight - 2,
+ imageOk.width(), titleHeight);
+ if (r.left() > rect.left() + titleHeight)
+ region = r;
+ }
+#ifdef MINIMIZE_HELP_HACK
+ else if ( helpExists ) {
+ QRect r;
+ r = QRect(rect.right() - imageClose.width() - imageHelp.width(),
+ rect.top() - titleHeight - 2,
+ imageHelp.width(), titleHeight);
+ if (r.left() > rect.left() + titleHeight)
+ region = r;
+ }
+#endif
+ }
+ break;
+ case Close: {
+ if ( ((HackWidget *)widget)->needsOk() ||
+ (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) ) {
+ QRect r;
+ r = QRect(rect.right() - imageOk.width() - imageClose.width(),
+ rect.top() - titleHeight - 2,
+ imageClose.width(), titleHeight);
+ if (r.left() > rect.left() + titleHeight)
+ region = r;
+ } else {
+ QRect r(rect.right() - imageClose.width(),
+ rect.top() - titleHeight - 2,
+ imageClose.width(), titleHeight);
+ if (r.left() > rect.left() + titleHeight)
+ region = r;
+ }
+ break;
+ }
+ case Title: {
+ if ( widget->isMaximized() ) {
+ region = QRegion();
+ } else {
+ int btnWidth = imageClose.width();
+ if ( ((HackWidget *)widget)->needsOk() ||
+ (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) )
+ btnWidth += imageOk.width();
+ QRect r(rect.left() + 1, rect.top() - titleHeight,
+ rect.width() - btnWidth - 2, titleHeight);
+ if (r.width() > 0)
+ region = r;
+ }
+ break;
+ }
+ case Help: {
+ if ( helpExists ) {
+ QRect r;
+ int l = rect.right() - imageClose.width() - imageHelp.width();
+ if ( ((HackWidget *)widget)->needsOk() ||
+ (widget->inherits( "QDialog" ) && !widget->inherits( "QMessageBox" ) ) )
+ l -= imageOk.width();
+ r = QRect(l, rect.top() - titleHeight - 2,
+ imageHelp.width(), titleHeight);
+ if (r.left() > rect.left() + titleHeight)
+ region = r;
+ }
+ break;
+ }
+ case Top:
+ case Left:
+ case Right:
+ case Bottom:
+ case TopLeft:
+ case TopRight:
+ case BottomLeft:
+ case BottomRight:
+ if ( widget->isMaximized() ) {
+ region = QRegion();
+ break;
+ }
+ //else fallthrough!!!
+ case All:
+ default:
+ region = QWSDefaultDecoration::region(widget, rect, type);
+ break;
+ }
+
+ return region;
+}
+
+void QPEDecoration::paint(QPainter *painter, const QWidget *widget)
+{
+#ifndef QT_NO_STYLE
+// QStyle &style = QApplication::style();
+#endif
+
+ int titleWidth = getTitleWidth(widget);
+ int titleHeight = getTitleHeight(widget);
+
+ QRect rect(widget->rect());
+
+ // Border rect
+ QRect br( rect.left() - BORDER_WIDTH,
+ rect.top() - BORDER_WIDTH - titleHeight,
+ rect.width() + 2 * BORDER_WIDTH,
+ rect.height() + BORDER_WIDTH + BOTTOM_BORDER_WIDTH + titleHeight );
+
+ // title bar rect
+ QRect tr;
+
+ tr = QRect( rect.left(), rect.top() - titleHeight, rect.width(), titleHeight );
+
+ QRegion oldClip = painter->clipRegion();
+ painter->setClipRegion( oldClip - QRegion( tr ) ); // reduce flicker
+
+#ifndef QT_NO_PALETTE
+ // const QColorGroup &cg = QApplication::palette().active();
+ const QColorGroup &cg = widget->palette().active();
+
+ qDrawWinPanel(painter, br.x(), br.y(), br.width(),
+ br.height() - 4, cg, FALSE,
+ &cg.brush(QColorGroup::Background));
+
+ painter->setClipRegion( oldClip );
+
+ if (titleWidth > 0) {
+ QBrush titleBrush;
+ QPen titlePen;
+ QPen titleLines;
+ int titleLeft = titleHeight + 4;
+
+ if (widget == qApp->activeWindow()) {
+ titleBrush = cg.brush(QColorGroup::Highlight);
+ titlePen = cg.color(QColorGroup::HighlightedText);
+ } else {
+ titleBrush = cg.brush(QColorGroup::Background);
+ titlePen = cg.color(QColorGroup::Text);
+ }
+
+ titleLines = titleBrush.color().dark(150);
+
+#define CLAMP(x, y) ( ((x) > (y)) ? (y) : (x) )
+
+ titleLeft = rect.left() + 5;
+ painter->setPen( cg.midlight() );
+ painter->drawLine( rect.left() - BORDER_WIDTH + 2,
+ rect.bottom() + 1, rect.right() + BORDER_WIDTH - 2,
+ rect.bottom() + 1 );
+
+ fillTitle( painter, widget, rect.left() - 2,
+ rect.top() - titleHeight - 2,
+ rect.width() + 3, titleHeight + 2 );
+/*
+ painter->fillRect(rect.left() - 2,
+ rect.top() - titleHeight - 2,
+ rect.width() + 3, titleHeight + 2,
+ titleBrush);
+
+ painter->setPen( titleLines );
+ for ( int i = rect.top() - titleHeight - 2; i < rect.top(); i += 2 )
+ painter->drawLine( rect.left() - 2, i, rect.left() + rect.width() + 2, i );
+*/
+ painter->setPen(titlePen);
+ QFont f( QApplication::font() );
+ f.setWeight( QFont::Bold );
+ painter->setFont(f);
+ painter->drawText( titleLeft, -titleHeight,
+ rect.width() - titleHeight - 10, titleHeight-1,
+ QPainter::AlignVCenter, widget->caption());
+ }
+
+#endif //QT_NO_PALETTE
+
+#ifndef MINIMIZE_HELP_HACK
+ paintButton( painter, widget, (QWSDecoration::Region)Help, 0 );
+#endif
+}
+
+void QPEDecoration::paintButton(QPainter *painter, const QWidget *w,
+ QWSDecoration::Region type, int state)
+{
+#ifndef QT_NO_PALETTE
+#ifndef QT_NO_STYLE
+// QStyle &style = QApplication::style();
+#endif
+ const QColorGroup &cg = w->palette().active();
+
+ QRect brect(region(w, w->rect(), type).boundingRect());
+
+// int xoff=2;
+// int yoff=2;
+
+// const QPixmap *pm=pixmapFor(w,type,state & QWSButton::On, xoff, yoff);
+
+ const QImage *img = 0;
+
+ switch ((int)type) {
+ case Close:
+ img = &imageClose;
+ break;
+ case Minimize:
+ if ( ((HackWidget *)w)->needsOk() ||
+ (w->inherits( "QDialog" ) && !w->inherits( "QMessageBox" ) ) )
+ img = &imageOk;
+ else if ( helpExists )
+ img = &imageHelp;
+ break;
+ case Help:
+ img = &imageHelp;
+ break;
+ default:
+ return;
+ }
+
+ QBrush titleBrush;
+
+ if (w == qApp->activeWindow()) {
+ titleBrush = cg.brush(QColorGroup::Highlight);
+ } else {
+ titleBrush = cg.brush(QColorGroup::Background);
+ }
+
+ fillTitle( painter, w, brect.x(), brect.y(), brect.width()+1,
+ brect.height()+1 );
+ if ((state & QWSButton::MouseOver) && (state & QWSButton::Clicked)) {
+ if (img) painter->drawImage(brect.x()+1, brect.y()+3, *img);
+ } else {
+ if (img) painter->drawImage(brect.x(), brect.y()+2, *img);
+ }
+
+#endif
+
+}
+
+void QPEDecoration::fillTitle( QPainter *p, const QWidget *widget,
+ int x, int y, int w, int h )
+{
+ QBrush titleBrush;
+ QPen topLine;
+ QPen titleLines;
+
+ const QColorGroup &cg = widget->palette().active();
+
+ if (widget == qApp->activeWindow()) {
+ titleBrush = cg.brush(QColorGroup::Highlight);
+ titleLines = titleBrush.color().dark();
+ topLine = titleBrush.color().light();
+ } else {
+ titleBrush = cg.brush(QColorGroup::Background);
+ titleLines = titleBrush.color();
+ topLine = titleBrush.color();
+ }
+
+ p->fillRect( x, y, w, h, titleBrush);
+
+ p->setPen( topLine );
+ p->drawLine( x, y+1, x+w-1, y+1 );
+ p->setPen( titleLines );
+ for ( int i = y; i < y+h; i += 2 )
+ p->drawLine( x, i, x+w-1, i );
+}
+
+//#define QPE_DONT_SHOW_TITLEBAR
+
+void QPEDecoration::maximize( QWidget *widget )
+{
+#ifdef QPE_DONT_SHOW_TITLEBAR
+ if ( !widget->inherits( "QDialog" ) ) {
+ widget->setGeometry( qt_maxWindowRect );
+ } else
+#endif
+ {
+ QWSDecoration::maximize( widget );
+ }
+}
+
+#ifndef QT_NO_DIALOG
+class HackDialog : public QDialog
+{
+public:
+ void acceptIt() {
+ if ( isA( "QMessageBox" ) )
+ qApp->postEvent( this, new QKeyEvent( QEvent::KeyPress, Key_Enter, '\n', 0, "\n" ) );
+ else
+ accept();
+ }
+};
+#endif
+
+
+void QPEDecoration::minimize( QWidget *widget )
+{
+#ifndef QT_NO_DIALOG
+ // We use the minimize button as an "accept" button.
+ if ( widget->inherits( "QDialog" ) ) {
+ HackDialog *d = (HackDialog *)widget;
+ d->acceptIt();
+ }
+#endif
+ else if ( ((HackWidget *)widget)->needsOk() ) {
+ QSignal s;
+ s.connect( widget, SLOT( accept() ) );
+ s.activate();
+ } else {
+ help( widget );
+ }
+}
+
+void QPEDecoration::help( QWidget * )
+{
+ if ( helpExists ) {
+ Global::execute( "helpbrowser", helpFile );
+ }
+}
+
+
+/*
+#ifndef QT_NO_POPUPMENU
+QPopupMenu *QPEDecoration::menu(QWSManager*, const QWidget*, const QPoint&)
+{
+ return 0;
+}
+#endif
+*/
+
+
+
+
+#endif // QT_NO_QWS_QPE_WM_STYLE
diff --git a/library/qpedecoration_qws.h b/library/qpedecoration_qws.h
new file mode 100644
index 0000000..b8afd05
--- a/dev/null
+++ b/library/qpedecoration_qws.h
@@ -0,0 +1,101 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef QPE_DECORATION_QWS_H__
+#define QPE_DECORATION_QWS_H__
+
+
+#include <qwsdefaultdecoration_qws.h>
+#include <qimage.h>
+#include <qdatetime.h>
+#include <qguardedptr.h>
+
+
+#ifndef QT_NO_QWS_QPE_WM_STYLE
+
+class QPEManager;
+class QTimer;
+
+class QPEDecoration : public QWSDefaultDecoration
+{
+public:
+ QPEDecoration();
+ virtual ~QPEDecoration();
+
+ virtual QRegion region(const QWidget *, const QRect &rect, Region);
+ virtual void paint(QPainter *, const QWidget *);
+ virtual void paintButton(QPainter *, const QWidget *, Region, int state);
+
+ void maximize( QWidget * );
+ void minimize( QWidget * );
+ virtual void help( QWidget * );
+
+ enum QPERegion { Help=LastRegion+1 };
+ void buttonClicked( QPERegion r );
+
+protected:
+ void fillTitle( QPainter *p, const QWidget *w, int x, int y, int w, int h );
+// virtual int getTitleWidth(const QWidget *);
+ virtual int getTitleHeight(const QWidget *);
+ virtual const char **menuPixmap();
+ virtual const char **closePixmap();
+ virtual const char **minimizePixmap();
+ virtual const char **maximizePixmap();
+ virtual const char **normalizePixmap();
+
+protected:
+ QImage imageOk;
+ QImage imageClose;
+ QImage imageHelp;
+ QString helpFile;
+ bool helpExists;
+ QPEManager *qpeManager;
+};
+
+
+class QPEManager : public QObject
+{
+ Q_OBJECT
+ friend class QPEDecoration;
+public:
+ QPEManager( QPEDecoration *d, QObject *parent=0 );
+
+ void updateActive();
+
+protected:
+ int pointInQpeRegion( QWidget *w, const QPoint &p );
+ virtual bool eventFilter( QObject *, QEvent * );
+ void drawButton( QWidget *w, QPEDecoration::QPERegion r, int state );
+
+protected slots:
+ void whatsThisTimeout();
+
+protected:
+ QPEDecoration *decoration;
+ QGuardedPtr<QWidget> active;
+ int helpState;
+ QTime pressTime;
+ QTimer *wtTimer;
+};
+
+
+#endif // QT_NO_QWS_QPE_WM_STYLE
+
+
+#endif // QPE_DECORATION_QWS_H__
diff --git a/library/qpedialog.cpp b/library/qpedialog.cpp
new file mode 100644
index 0000000..06b0c94
--- a/dev/null
+++ b/library/qpedialog.cpp
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qpedialog.h"
+#include "qpeapplication.h"
+
+#define protected public
+#include <qdialog.h>
+
+QPEDialogListener::QPEDialogListener(QDialog *di ) : QObject(di)
+{
+ dialog = di;
+ connect(qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)),
+ this, SLOT(appMessage(const QCString&, const QByteArray&)) );
+}
+
+QPEDialogListener::~QPEDialogListener() {}
+
+void QPEDialogListener::appMessage( const QCString &msg, const QByteArray &data )
+{
+ if (!dialog)
+ return;
+ if (msg == "accept()") {
+ dialog->accept();
+ } else if (msg == "reject()") {
+ dialog->reject();
+ }
+}
diff --git a/library/qpedialog.h b/library/qpedialog.h
new file mode 100644
index 0000000..1fde09a
--- a/dev/null
+++ b/library/qpedialog.h
@@ -0,0 +1,44 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __QPE_DIALOG_H__
+#define __QPE_DIALOG_H__
+
+#include <qobject.h>
+
+class QPEDialogListenerData;
+
+class QPEDialogListener : public QObject
+{
+ Q_OBJECT
+public:
+ QPEDialogListener(QDialog *di);
+ ~QPEDialogListener();
+
+private slots:
+ void appMessage( const QCString &msg, const QByteArray &data );
+
+private:
+
+ QDialog *dialog;
+ QPEDialogListenerData *d;
+};
+
+#endif
+
diff --git a/library/qpemenubar.cpp b/library/qpemenubar.cpp
new file mode 100644
index 0000000..39f8fd6
--- a/dev/null
+++ b/library/qpemenubar.cpp
@@ -0,0 +1,308 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#define INCLUDE_MENUITEM_DEF
+
+#include "qpemenubar.h"
+#include <qapplication.h>
+#include <qguardedptr.h>
+#include <qtimer.h>
+
+
+class QMenuBarHack : public QMenuBar
+{
+public:
+ int activeItem() const { return actItem; }
+
+ void goodbye()
+ {
+ activateItemAt(-1);
+ for ( unsigned int i = 0; i < count(); i++ ) {
+ QMenuItem *mi = findItem( idAt(i) );
+ if ( mi->popup() ) {
+ mi->popup()->hide();
+ }
+ }
+ }
+};
+
+
+QPEMenuToolFocusManager *QPEMenuToolFocusManager::me = 0;
+
+QPEMenuToolFocusManager::QPEMenuToolFocusManager() : QObject()
+{
+ qApp->installEventFilter( this );
+}
+
+void QPEMenuToolFocusManager::addWidget( QWidget *w )
+{
+ list.append( GuardedWidget(w) );
+}
+
+void QPEMenuToolFocusManager::removeWidget( QWidget *w )
+{
+ list.remove( GuardedWidget(w) );
+}
+
+void QPEMenuToolFocusManager::setActive( bool a )
+{
+ if ( a ) {
+ oldFocus = qApp->focusWidget();
+ QValueList<GuardedWidget>::Iterator it;
+ it = list.begin();
+ while ( it != list.end() ) {
+ QWidget *w = (*it);
+ if ( w && w->isEnabled() && w->isVisible() &&
+ w->topLevelWidget() == qApp->activeWindow() ) {
+ setFocus( w );
+ return;
+ }
+ ++it;
+ }
+ } else {
+ if ( inFocus ) {
+ if ( inFocus->inherits( "QMenuBar" ) )
+ ((QMenuBarHack *)(QWidget *)inFocus)->goodbye();
+ if ( inFocus->hasFocus() ) {
+ if ( oldFocus && oldFocus->isVisible() && oldFocus->isEnabled() ) {
+ oldFocus->setFocus();
+ } else {
+ inFocus->clearFocus();
+ }
+ }
+ }
+ inFocus = 0;
+ oldFocus = 0;
+ }
+}
+
+bool QPEMenuToolFocusManager::isActive() const
+{
+ return !inFocus.isNull();
+}
+
+void QPEMenuToolFocusManager::moveFocus( bool next )
+{
+ if ( !isActive() )
+ return;
+
+ int n = list.count();
+ QValueList<GuardedWidget>::Iterator it;
+ it = list.find( inFocus );
+ if ( it == list.end() )
+ it = list.begin();
+ while ( --n ) {
+ if ( next ) {
+ ++it;
+ if ( it == list.end() )
+ it = list.begin();
+ } else {
+ if ( it == list.begin() )
+ it = list.end();
+ --it;
+ }
+ QWidget *w = (*it);
+ if ( w && w->isEnabled() && w->isVisible() &&
+ w->topLevelWidget() == qApp->activeWindow() ) {
+ setFocus( w, next );
+ return;
+ }
+ }
+}
+
+void QPEMenuToolFocusManager::initialize()
+{
+ if ( !me )
+ me = new QPEMenuToolFocusManager;
+}
+
+QPEMenuToolFocusManager *QPEMenuToolFocusManager::manager()
+{
+ if ( !me )
+ me = new QPEMenuToolFocusManager;
+
+ return me;
+}
+
+void QPEMenuToolFocusManager::setFocus( QWidget *w, bool next )
+{
+ inFocus = w;
+// qDebug( "Set focus on %s", w->className() );
+ if ( inFocus->inherits( "QMenuBar" ) ) {
+ QMenuBar *mb = (QMenuBar *)(QWidget *)inFocus;
+ if ( next )
+ mb->activateItemAt( 0 );
+ else
+ mb->activateItemAt( mb->count()-1 );
+ }
+ inFocus->setFocus();
+}
+
+bool QPEMenuToolFocusManager::eventFilter( QObject *object, QEvent *event )
+{
+ if ( event->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent *)event;
+ if ( isActive() ) {
+ if ( object->inherits( "QButton" ) ) {
+ switch ( ke->key() ) {
+ case Key_Left:
+ moveFocus( FALSE );
+ return TRUE;
+
+ case Key_Right:
+ moveFocus( TRUE );
+ return TRUE;
+
+ case Key_Up:
+ case Key_Down:
+ return TRUE;
+ }
+ } else if ( object->inherits( "QPopupMenu" ) ) {
+ // Deactivate when a menu item is selected
+ if ( ke->key() == Key_Enter || ke->key() == Key_Return ||
+ ke->key() == Key_Escape ) {
+ QTimer::singleShot( 0, this, SLOT(deactivate()) );
+ }
+ } else if ( object->inherits( "QMenuBar" ) ) {
+ int dx = 0;
+ switch ( ke->key() ) {
+ case Key_Left:
+ dx = -1;
+ break;
+
+ case Key_Right:
+ dx = 1;
+ break;
+ }
+
+ QMenuBarHack *mb = (QMenuBarHack *)object;
+ if ( dx && mb->activeItem() >= 0 ) {
+ int i = mb->activeItem();
+ int c = mb->count();
+ int n = c;
+ while ( n-- ) {
+ i = i + dx;
+ if ( i == c ) {
+ mb->goodbye();
+ moveFocus( TRUE );
+ return TRUE;
+ } else if ( i < 0 ) {
+ mb->goodbye();
+ moveFocus( FALSE );
+ return TRUE;
+ }
+ QMenuItem *mi = mb->findItem( mb->idAt(i) );
+ if ( mi->isEnabled() && !mi->isSeparator() ) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ if ( ke->key() == Key_F11 ) {
+ setActive( !isActive() );
+ return TRUE;
+ }
+ } else if ( event->type() == QEvent::KeyRelease ) {
+ QKeyEvent *ke = (QKeyEvent *)event;
+ if ( isActive() ) {
+ if ( object->inherits( "QButton" ) ) {
+ // Deactivate when a button is selected
+ if ( ke->key() == Key_Space )
+ QTimer::singleShot( 0, this, SLOT(deactivate()) );
+ }
+ }
+ } else if ( event->type() == QEvent::FocusIn ) {
+ if ( isActive() ) {
+ // A non-menu/tool widget has been selected - we're deactivated
+ QWidget *w = (QWidget *)object;
+ if ( !w->isPopup() && !list.contains( GuardedWidget( w ) ) ) {
+ inFocus = 0;
+ }
+ }
+ } else if ( event->type() == QEvent::Hide ) {
+ if ( isActive() ) {
+ // Deaticvate if a menu/tool has been hidden
+ QWidget *w = (QWidget *)object;
+ if ( !w->isPopup() && !list.contains( GuardedWidget( w ) ) ) {
+ setActive( FALSE );
+ }
+ }
+ } else if ( event->type() == QEvent::ChildInserted ) {
+ QChildEvent *ce = (QChildEvent *)event;
+ if ( ce->child()->inherits( "QMenuBar" ) ) {
+ addWidget( (QWidget *)ce->child() );
+ ce->child()->installEventFilter( this );
+ } else if ( object->inherits( "QToolBar" ) && ce->child()->isWidgetType() ) {
+ addWidget( (QWidget *)ce->child() );
+ }
+ } else if ( event->type() == QEvent::ChildRemoved ) {
+ QChildEvent *ce = (QChildEvent *)event;
+ if ( ce->child()->inherits( "QMenuBar" ) ) {
+ removeWidget( (QWidget *)ce->child() );
+ ce->child()->removeEventFilter( this );
+ } else if ( object->inherits( "QToolBar" ) && ce->child()->isWidgetType() ) {
+ removeWidget( (QWidget *)ce->child() );
+ }
+ }
+
+ return FALSE;
+}
+
+void QPEMenuToolFocusManager::deactivate()
+{
+ setActive( FALSE );
+}
+
+/*!
+ \class QPEMenuBar qpemenubar.h
+ \brief The QPEMenuBar class is obsolete. Use QMenuBar instead.
+
+ \obsolete
+
+ This class is obsolete. Use QMenuBar instead.
+
+ \sa QMenuBar
+*/
+
+/*!
+ Constructs a QPEMenuBar just as you would construct
+ a QMenuBar, passing \a parent and \a name.
+*/
+QPEMenuBar::QPEMenuBar( QWidget *parent, const char *name )
+ : QMenuBar( parent, name )
+{
+}
+
+/*!
+ \reimp
+*/
+QPEMenuBar::~QPEMenuBar()
+{
+}
+
+/*!
+ \internal
+*/
+void QPEMenuBar::keyPressEvent( QKeyEvent *e )
+{
+ QMenuBar::keyPressEvent( e );
+}
+
diff --git a/library/qpemenubar.h b/library/qpemenubar.h
new file mode 100644
index 0000000..736b12b
--- a/dev/null
+++ b/library/qpemenubar.h
@@ -0,0 +1,71 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QPEMENUBAR_H
+#define QPEMENUBAR_H
+
+#include <qmenubar.h>
+#include <qguardedptr.h>
+#include <qvaluelist.h>
+
+class QPEMenuToolFocusManager : public QObject
+{
+ Q_OBJECT
+public:
+ QPEMenuToolFocusManager();
+
+ void addWidget( QWidget *w );
+ void removeWidget( QWidget *w );
+ void setActive( bool a );
+ bool isActive() const;
+ void moveFocus( bool next );
+
+ static QPEMenuToolFocusManager *manager();
+ static void initialize();
+
+protected:
+ void setFocus( QWidget *w, bool next=TRUE );
+ bool eventFilter( QObject *object, QEvent *event );
+
+private slots:
+ void deactivate();
+
+private:
+ typedef QGuardedPtr<QWidget> GuardedWidget;
+ QValueList<GuardedWidget> list;
+ GuardedWidget inFocus;
+ GuardedWidget oldFocus;
+ static QPEMenuToolFocusManager *me;
+};
+
+
+class QPEMenuBar : public QMenuBar
+{
+ Q_OBJECT
+public:
+ QPEMenuBar( QWidget *parent=0, const char* name=0 );
+ ~QPEMenuBar();
+
+protected:
+ virtual void keyPressEvent( QKeyEvent *e );
+};
+
+#endif
+
diff --git a/library/qpemessagebox.cpp b/library/qpemessagebox.cpp
new file mode 100644
index 0000000..02db760
--- a/dev/null
+++ b/library/qpemessagebox.cpp
@@ -0,0 +1,13 @@
+#include "qpemessagebox.h"
+#include <qmessagebox.h>
+
+bool QPEMessageBox::confirmDelete( QWidget *parent, const QString & caption,
+ const QString & object )
+{
+ QString msg = QObject::tr("Are you sure you want to delete\n %1?").arg( object );
+ int r = QMessageBox::warning( parent, caption, msg, QMessageBox::Yes,
+ QMessageBox::No|QMessageBox::Default|
+ QMessageBox::Escape, 0 );
+
+ return r == QMessageBox::Yes;
+}
diff --git a/library/qpemessagebox.h b/library/qpemessagebox.h
new file mode 100644
index 0000000..6f3f00f
--- a/dev/null
+++ b/library/qpemessagebox.h
@@ -0,0 +1,11 @@
+#include <qstring.h>
+
+class QWidget;
+
+class QPEMessageBox
+{
+public:
+ static bool confirmDelete( QWidget *parent, const QString & caption,
+ const QString & object );
+
+};
diff --git a/library/qpestyle.cpp b/library/qpestyle.cpp
new file mode 100644
index 0000000..dfd300f
--- a/dev/null
+++ b/library/qpestyle.cpp
@@ -0,0 +1,1194 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qpestyle.h"
+#include "qpeapplication.h"
+#include <qpushbutton.h>
+
+#include <qpainter.h>
+
+#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2)
+
+#if QT_VERSION >= 300
+
+#include <qdrawutil.h>
+#include <qcombobox.h>
+#include <qtabbar.h>
+
+QPEStyle::QPEStyle()
+{
+}
+
+QPEStyle::~QPEStyle()
+{
+}
+
+void QPEStyle::drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r,
+ const QColorGroup &cg, SFlags flags, const QStyleOption &data) const
+{
+ switch ( pe ) {
+ case PE_ButtonTool:
+ {
+ QColorGroup mycg = cg;
+ if ( flags & Style_On ) {
+ QBrush fill( cg.mid(), Dense4Pattern );
+ mycg.setBrush( QColorGroup::Button, fill );
+ }
+ drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data );
+ break;
+ }
+ case PE_ButtonCommand:
+ case PE_ButtonDefault:
+ case PE_ButtonBevel:
+ case PE_HeaderSection:
+ {
+ QPen oldPen = p->pen();
+ p->fillRect( r.x()+1, r.y()+1, r.width()-2, r.height()-2, cg.brush(QColorGroup::Button) );
+
+ int x2 = r.right();
+ int y2 = r.bottom();
+
+ if ( flags & (Style_Sunken | Style_Down | Style_On) )
+ p->setPen( cg.dark() );
+ else
+ p->setPen( cg.light() );
+ p->drawLine( r.x(), r.y()+1, r.x(), y2-1 );
+ p->drawLine( r.x()+1, r.y(), x2-1, r.y() );
+
+ if ( flags & (Style_Sunken | Style_Down | Style_On) )
+ p->setPen( cg.light() );
+ else
+ p->setPen( cg.dark() );
+ p->drawLine( x2, r.y()+1, x2, y2-1 );
+ p->drawLine( r.x()+1, y2, x2-1, y2 );
+ p->setPen( oldPen );
+ break;
+ }
+ case PE_FocusRect:
+ break;
+ case PE_Indicator:
+ {
+ QColorGroup mycg( cg );
+ QBrush fill;
+ if ( flags & Style_Down )
+ fill = cg.brush( QColorGroup::Button );
+ else
+ fill = cg.brush( (flags&Style_Enabled) ? QColorGroup::Base : QColorGroup::Background );
+ mycg.setBrush( QColorGroup::Button, fill );
+ if ( flags&Style_Enabled )
+ flags |= Style_Sunken;
+ drawPrimitive( PE_ButtonBevel, p, r, mycg, flags );
+ if ( flags & Style_On ) {
+ QPointArray a( 7*2 );
+ int i, xx, yy;
+ xx = r.x()+3;
+ yy = r.y()+5;
+ for ( i=0; i<3; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy++;
+ }
+ yy -= 2;
+ for ( i=3; i<7; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy--;
+ }
+ if ( flags & Style_NoChange ) {
+ p->setPen( mycg.dark() );
+ } else {
+ p->setPen( mycg.text() );
+ }
+ p->drawLineSegments( a );
+ }
+ break;
+ }
+ case PE_ExclusiveIndicator:
+ {
+ static const QCOORD pts1[] = { // dark lines
+ 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 };
+ static const QCOORD pts4[] = { // white lines
+ 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7,
+ 11,4, 10,3, 10,2 };
+ static const QCOORD pts5[] = { // inner fill
+ 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 };
+
+ int x, y, w, h;
+ r.rect( &x, &y, &w, &h );
+ p->eraseRect( x, y, w, h );
+ QPointArray a( QCOORDARRLEN(pts1), pts1 );
+ a.translate( x, y );
+ p->setPen( cg.dark() );
+ p->drawPolyline( a );
+ a.setPoints( QCOORDARRLEN(pts4), pts4 );
+ a.translate( x, y );
+ p->setPen( cg.light() );
+ p->drawPolyline( a );
+ a.setPoints( QCOORDARRLEN(pts5), pts5 );
+ a.translate( x, y );
+ QColor fillColor = ( flags&Style_Down || !(flags&Style_Enabled) ) ? cg.button() : cg.base();
+ p->setPen( fillColor );
+ p->setBrush( fillColor ) ;
+ p->drawPolygon( a );
+ if ( flags&Style_On ) {
+ p->setPen( NoPen );
+ p->setBrush( cg.text() );
+ p->drawRect( x+5, y+4, 2, 4 );
+ p->drawRect( x+4, y+5, 4, 2 );
+ }
+ break;
+ }
+ default:
+ QWindowsStyle::drawPrimitive( pe, p, r, cg, flags, data );
+ break;
+ }
+}
+
+void QPEStyle::drawControl( ControlElement ce, QPainter *p,
+ const QWidget *widget, const QRect &r,
+ const QColorGroup &cg, SFlags how, const QStyleOption &data) const
+{
+ switch ( ce ) {
+ case CE_PushButton:
+ {
+ const QPushButton *btn = (QPushButton*)widget;
+ SFlags flags;
+ flags = Style_Default;
+ if ( btn->isDown() )
+ flags |= Style_Down;
+ if ( btn->isOn() )
+ flags |= Style_On;
+ if ( btn->isEnabled() )
+ flags |= Style_Enabled;
+ if ( btn->isDefault() )
+ flags |= Style_Default;
+ if (! btn->isFlat() && !(flags & Style_Down))
+ flags |= Style_Raised;
+ p->setPen( cg.foreground() );
+ p->setBrush( QBrush(cg.button(), NoBrush) );
+ QColorGroup mycg( cg );
+ if ( flags & Style_On ) {
+ QBrush fill = QBrush( cg.mid(), Dense4Pattern );
+ mycg.setBrush( QColorGroup::Button, fill );
+ }
+ drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data );
+ break;
+ }
+ case CE_TabBarTab:
+ {
+ if ( !widget || !widget->parentWidget() )
+ break;
+
+ const QTabBar *tb = (const QTabBar *) widget;
+ bool selected = how & Style_Selected;
+
+ QRect r2(r);
+ if ( tb->shape() == QTabBar::RoundedAbove ) {
+ p->setPen( cg.light() );
+ p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() );
+ if ( r2.left() == 0 )
+ p->drawPoint( tb->rect().bottomLeft() );
+ else {
+ p->setPen( cg.light() );
+ p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() );
+ }
+
+ if ( selected ) {
+ p->setPen( cg.background() );
+ p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 );
+ p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-2),
+ cg.brush( QColorGroup::Background ));
+ } else {
+ r2.setRect( r2.left() + 2, r2.top() + 2,
+ r2.width() - 4, r2.height() - 2 );
+ p->setPen( cg.button() );
+ p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 );
+ p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-3),
+ cg.brush( QColorGroup::Button ));
+
+ //do shading; will not work for pixmap brushes
+ QColor bg = cg.button();
+ // int h,s,v;
+ // bg.hsv( &h, &s, &v );
+ int n = r2.height()/2;
+ int dark = 100;
+ for ( int i = 1; i < n; i++ ) {
+ dark = (dark * (100+(i*15)/n) )/100;
+ p->setPen( bg.dark( dark ) );
+ int y = r2.bottom()-n+i;
+ int x1 = r2.left()+1;
+ int x2 = r2.right()-1;
+ p->drawLine( x1, y, x2, y );
+ }
+ }
+
+ p->setPen( cg.light() );
+ p->drawLine( r2.left(), r2.bottom()-1, r2.left(), r2.top() + 2 );
+ p->drawPoint( r2.left()+1, r2.top() + 1 );
+ p->drawLine( r2.left()+2, r2.top(),
+ r2.right() - 2, r2.top() );
+
+ p->setPen( cg.dark() );
+ p->drawPoint( r2.right() - 1, r2.top() + 1 );
+ p->drawLine( r2.right(), r2.top() + 2, r2.right(), r2.bottom() - 1);
+ } else if ( tb->shape() == QTabBar::RoundedBelow ) {
+ if ( selected ) {
+ p->setPen( cg.background() );
+ p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 );
+ p->fillRect( QRect( r2.left()+1, r2.top(), r2.width()-2, r2.height()-2),
+ tb->palette().normal().brush( QColorGroup::Background ));
+ } else {
+ p->setPen( cg.dark() );
+ p->drawLine( r2.left(), r2.top(),
+ r2.right(), r2.top() );
+ r2.setRect( r2.left() + 2, r2.top(),
+ r2.width() - 4, r2.height() - 2 );
+ p->setPen( cg.button() );
+ p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 );
+ p->fillRect( QRect( r2.left()+1, r2.top()+1, r2.width()-2, r2.height()-3),
+ tb->palette().normal().brush( QColorGroup::Button ));
+ }
+
+ p->setPen( cg.dark() );
+ p->drawLine( r2.right(), r2.top(),
+ r2.right(), r2.bottom() - 2 );
+ p->drawPoint( r2.right() - 1, r2.bottom() - 1 );
+ p->drawLine( r2.right() - 2, r2.bottom(),
+ r2.left() + 2, r2.bottom() );
+
+ p->setPen( cg.light() );
+ p->drawLine( r2.left(), r2.top()+1,
+ r2.left(), r2.bottom() - 2 );
+ p->drawPoint( r2.left() + 1, r2.bottom() - 1 );
+ if ( r2.left() == 0 )
+ p->drawPoint( tb->rect().topLeft() );
+
+ } else {
+ QCommonStyle::drawControl( ce, p, widget, r, cg, how, data );
+ }
+ break;
+ }
+ default:
+ QWindowsStyle::drawControl( ce, p, widget, r, cg, how, data );
+ break;
+ }
+}
+
+void QPEStyle::drawComplexControl( ComplexControl control, QPainter *p,
+ const QWidget *widget, const QRect &r,
+ const QColorGroup &cg, SFlags how,
+ SCFlags sub, SCFlags subActive, const QStyleOption &data) const
+{
+ switch ( control ) {
+ case CC_ComboBox:
+ if ( sub & SC_ComboBoxArrow ) {
+ SFlags flags = Style_Default;
+
+ drawPrimitive( PE_ButtonBevel, p, r, cg, flags, data );
+
+ QRect ar =
+ QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget,
+ SC_ComboBoxArrow ), widget );
+
+ if ( subActive == SC_ComboBoxArrow ) {
+ p->setPen( cg.dark() );
+ p->setBrush( cg.brush( QColorGroup::Button ) );
+ p->drawRect( ar );
+ }
+
+ ar.addCoords( 2, 2, -2, -2 );
+ if ( widget->isEnabled() )
+ flags |= Style_Enabled;
+
+ if ( subActive & Style_Sunken ) {
+ flags |= Style_Sunken;
+ }
+ drawPrimitive( PE_ArrowDown, p, ar, cg, flags );
+ }
+
+ if ( sub & SC_ComboBoxEditField ) {
+ const QComboBox * cb = (const QComboBox *) widget;
+ QRect re =
+ QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget,
+ SC_ComboBoxEditField ), widget );
+ if ( cb->hasFocus() && !cb->editable() )
+ p->fillRect( re.x(), re.y(), re.width(), re.height(),
+ cg.brush( QColorGroup::Highlight ) );
+
+ if ( cb->hasFocus() ) {
+ p->setPen( cg.highlightedText() );
+ p->setBackgroundColor( cg.highlight() );
+
+ } else {
+ p->setPen( cg.text() );
+ p->setBackgroundColor( cg.background() );
+ }
+
+ if ( cb->hasFocus() && !cb->editable() ) {
+ QRect re =
+ QStyle::visualRect( subRect( SR_ComboBoxFocusRect, cb ), widget );
+ drawPrimitive( PE_FocusRect, p, re, cg, Style_FocusAtBorder, QStyleOption(cg.highlight()));
+ }
+ }
+ break;
+ default:
+ QWindowsStyle::drawComplexControl( control, p, widget, r, cg, how,
+ sub, subActive, data );
+ break;
+ }
+}
+
+int QPEStyle::pixelMetric( PixelMetric metric, const QWidget *widget ) const
+{
+ int ret;
+ switch( metric ) {
+ case PM_ButtonMargin:
+ ret = 2;
+ break;
+ case PM_DefaultFrameWidth:
+ ret = 1;
+ break;
+ case PM_ButtonDefaultIndicator:
+ ret = 2;
+ break;
+ case PM_ButtonShiftHorizontal:
+ case PM_ButtonShiftVertical:
+ ret = -1;
+ break;
+ case PM_IndicatorWidth:
+ ret = 15;
+ break;
+ case PM_IndicatorHeight:
+ ret = 13;
+ break;
+ case PM_ExclusiveIndicatorHeight:
+ case PM_ExclusiveIndicatorWidth:
+ ret = 15;
+ break;
+ case PM_ScrollBarExtent:
+ ret = 13;
+ break;
+ case PM_SliderLength:
+ ret = 12;
+ break;
+ default:
+ ret = QWindowsStyle::pixelMetric( metric, widget );
+ break;
+ }
+ return ret;
+}
+
+QSize QPEStyle::sizeFromContents( ContentsType contents, const QWidget *widget,
+ const QSize &contentsSize, const QStyleOption &data) const
+{
+ QSize sz(contentsSize);
+
+ switch ( contents ) {
+ case CT_PopupMenuItem:
+ {
+ if ( !widget || data.isDefault() )
+ break;
+ sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data );
+ sz = QSize( sz.width(), sz.height()-2 );
+ break;
+ }
+ default:
+ sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data );
+ break;
+ }
+
+ return sz;
+}
+
+#else
+
+#include <qfontmetrics.h>
+#include <qpalette.h>
+#include <qdrawutil.h>
+#include <qscrollbar.h>
+#include <qbutton.h>
+#include <qframe.h>
+#include <qtabbar.h>
+
+#define INCLUDE_MENUITEM_DEF
+#include <qmenudata.h>
+
+QPEStyle::QPEStyle()
+{
+#if QT_VERSION < 300
+ setButtonMargin(buttonMargin());
+ setScrollBarExtent(scrollBarExtent().width(),scrollBarExtent().height());
+#endif
+}
+
+QPEStyle::~QPEStyle()
+{
+}
+
+int QPEStyle::buttonMargin() const
+{
+ return 2;
+}
+
+QSize QPEStyle::scrollBarExtent() const
+{
+ return QSize(13,13);
+}
+
+void QPEStyle::polish ( QPalette & )
+{
+}
+
+void QPEStyle::polish( QWidget *w )
+{
+ if ( w->inherits( "QListBox" ) ||
+ w->inherits( "QListView" ) ||
+ w->inherits( "QPopupMenu" ) ||
+ w->inherits( "QSpinBox" ) ) {
+ QFrame *f = (QFrame *)w;
+ f->setFrameShape( QFrame::StyledPanel );
+ f->setLineWidth( 1 );
+ }
+}
+
+void QPEStyle::unPolish( QWidget *w )
+{
+ if ( w->inherits( "QListBox" ) ||
+ w->inherits( "QListView" ) ||
+ w->inherits( "QPopupMenu" ) ||
+ w->inherits( "QSpinBox" ) ) {
+ QFrame *f = (QFrame *)w;
+ f->setFrameShape( QFrame::StyledPanel );
+ f->setLineWidth( 2 );
+ }
+}
+
+int QPEStyle::defaultFrameWidth() const
+{
+ return 1;
+}
+
+void QPEStyle::drawPanel ( QPainter * p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken, int lineWidth, const QBrush * fill )
+{
+ qDrawShadePanel( p, QRect(x, y, w, h), g, sunken, lineWidth, fill );
+}
+
+void QPEStyle::drawButton( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken, const QBrush* fill )
+{
+ QPen oldPen = p->pen();
+ if ( sunken )
+ p->setPen( g.dark() );
+ else
+ p->setPen( g.light() );
+
+ int x2 = x+w-1;
+ int y2 = y+h-1;
+
+ p->drawLine( x, y, x, y2 );
+ p->drawLine( x, y, x2, y );
+
+ if ( sunken )
+ p->setPen( g.light() );
+ else
+ p->setPen( g.dark() );
+
+ p->drawLine( x2, y, x2, y2 );
+ p->drawLine( x, y2, x2, y2 );
+ p->setPen( oldPen );
+
+ p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):g.brush(QColorGroup::Button) );
+}
+
+void QPEStyle::drawButtonMask ( QPainter * p, int x, int y, int w, int h )
+{
+ p->fillRect( x, y, w, h, color1 );
+}
+
+void QPEStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken, const QBrush* fill )
+{
+ drawButton( p, x, y, w, h, g, sunken, fill );
+}
+
+QRect QPEStyle::comboButtonRect( int x, int y, int w, int h)
+{
+ return QRect(x+1, y+1, w-2-14, h-2);
+}
+
+
+QRect QPEStyle::comboButtonFocusRect( int x, int y, int w, int h)
+{
+ return QRect(x+2, y+2, w-4-14, h-4);
+}
+
+void QPEStyle::drawComboButton( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken,
+ bool /*editable*/,
+ bool enabled,
+ const QBrush *fill )
+{
+ drawBevelButton( p, x, y, w, h, g, FALSE, fill );
+ drawBevelButton( p, x+w-14, y, 14, h, g, sunken, fill );
+ drawArrow( p, QStyle::DownArrow, sunken,
+ x+w-14+ 2, y+ 2, 14- 4, h- 4, g, enabled,
+ &g.brush( QColorGroup::Button ) );
+
+}
+
+
+void QPEStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w,
+ int h, const QColorGroup & g, bool on, bool down, bool enabled )
+{
+ static const QCOORD pts1[] = { // dark lines
+ 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 };
+ static const QCOORD pts4[] = { // white lines
+ 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7,
+ 11,4, 10,3, 10,2 };
+ static const QCOORD pts5[] = { // inner fill
+ 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 };
+
+ p->eraseRect( x, y, w, h );
+ QPointArray a( QCOORDARRLEN(pts1), pts1 );
+ a.translate( x, y );
+ p->setPen( g.dark() );
+ p->drawPolyline( a );
+ a.setPoints( QCOORDARRLEN(pts4), pts4 );
+ a.translate( x, y );
+ p->setPen( g.light() );
+ p->drawPolyline( a );
+ a.setPoints( QCOORDARRLEN(pts5), pts5 );
+ a.translate( x, y );
+ QColor fillColor = ( down || !enabled ) ? g.button() : g.base();
+ p->setPen( fillColor );
+ p->setBrush( fillColor ) ;
+ p->drawPolygon( a );
+ if ( on ) {
+ p->setPen( NoPen );
+ p->setBrush( g.text() );
+ p->drawRect( x+5, y+4, 2, 4 );
+ p->drawRect( x+4, y+5, 4, 2 );
+ }
+}
+
+void QPEStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h,
+ const QColorGroup & g, int state, bool down, bool enabled )
+{
+
+ QBrush fill;
+ if ( state == QButton::NoChange ) {
+ QBrush b = p->brush();
+ QColor c = p->backgroundColor();
+ p->setBackgroundMode( TransparentMode );
+ p->setBackgroundColor( green );
+ fill = QBrush(g.base(), Dense4Pattern);
+ p->setBackgroundColor( c );
+ p->setBrush( b );
+ } else if ( down )
+ fill = g.brush( QColorGroup::Button );
+ else
+ fill = g.brush( enabled ? QColorGroup::Base : QColorGroup::Background );
+ drawPanel( p, x, y, w, h, g, TRUE, 1, &fill );
+ if ( state != QButton::Off ) {
+ QPointArray a( 7*2 );
+ int i, xx, yy;
+ xx = x+3;
+ yy = y+5;
+ for ( i=0; i<3; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy++;
+ }
+ yy -= 2;
+ for ( i=3; i<7; i++ ) {
+ a.setPoint( 2*i, xx, yy );
+ a.setPoint( 2*i+1, xx, yy+2 );
+ xx++; yy--;
+ }
+ if ( state == QButton::NoChange ) {
+ p->setPen( g.dark() );
+ } else {
+ p->setPen( g.text() );
+ }
+ p->drawLineSegments( a );
+ }
+}
+
+#define HORIZONTAL (sb->orientation() == QScrollBar::Horizontal)
+#define VERTICAL !HORIZONTAL
+#define MOTIF_BORDER 2
+#define SLIDER_MIN 9 // ### motif says 6 but that's too small
+
+/*! \reimp */
+
+void QPEStyle::scrollBarMetrics( const QScrollBar* sb, int &sliderMin, int &sliderMax, int &sliderLength, int& buttonDim )
+{
+ int maxLength;
+ int length = HORIZONTAL ? sb->width() : sb->height();
+ int extent = HORIZONTAL ? sb->height() : sb->width();
+
+ if ( length > (extent - 1)*2 )
+ buttonDim = extent;
+ else
+ buttonDim = length/2 - 1;
+
+ sliderMin = 0;
+ maxLength = length - buttonDim*2;
+
+ if ( sb->maxValue() == sb->minValue() ) {
+ sliderLength = maxLength;
+ } else {
+ sliderLength = (sb->pageStep()*maxLength)/
+ (sb->maxValue()-sb->minValue()+sb->pageStep());
+ uint range = sb->maxValue()-sb->minValue();
+ if ( sliderLength < SLIDER_MIN || range > INT_MAX/2 )
+ sliderLength = SLIDER_MIN;
+ if ( sliderLength > maxLength )
+ sliderLength = maxLength;
+ }
+
+ sliderMax = sliderMin + maxLength - sliderLength;
+}
+
+/*!\reimp
+ */
+QStyle::ScrollControl QPEStyle::scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p )
+{
+ if ( !sb->rect().contains( p ) )
+ return NoScroll;
+ int sliderMin, sliderMax, sliderLength, buttonDim, pos;
+ scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim );
+
+ if (sb->orientation() == QScrollBar::Horizontal)
+ pos = p.x();
+ else
+ pos = p.y();
+
+ if (pos < sliderStart)
+ return SubPage;
+ if (pos < sliderStart + sliderLength)
+ return Slider;
+ if (pos < sliderMax + sliderLength)
+ return AddPage;
+ if (pos < sliderMax + sliderLength + buttonDim)
+ return SubLine;
+ return AddLine;
+}
+
+/*! \reimp */
+
+void QPEStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl )
+{
+#define ADD_LINE_ACTIVE ( activeControl == AddLine )
+#define SUB_LINE_ACTIVE ( activeControl == SubLine )
+ QColorGroup g = sb->colorGroup();
+
+ int sliderMin, sliderMax, sliderLength, buttonDim;
+ scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim );
+
+ if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) )
+ p->fillRect( 0, 0, sb->width(), sb->height(), g.brush( QColorGroup::Mid ));
+
+ if (sliderStart > sliderMax) { // sanity check
+ sliderStart = sliderMax;
+ }
+
+ int dimB = buttonDim;
+ QRect addB;
+ QRect subB;
+ QRect addPageR;
+ QRect subPageR;
+ QRect sliderR;
+ int addX, addY, subX, subY;
+ int length = HORIZONTAL ? sb->width() : sb->height();
+ int extent = HORIZONTAL ? sb->height() : sb->width();
+
+ if ( HORIZONTAL ) {
+ subY = addY = ( extent - dimB ) / 2;
+ subX = length - dimB - dimB;
+ addX = length - dimB;
+ } else {
+ subX = addX = ( extent - dimB ) / 2;
+ subY = length - dimB - dimB;
+ addY = length - dimB;
+ }
+
+ int sliderEnd = sliderStart + sliderLength;
+ int sliderW = extent;
+ if ( HORIZONTAL ) {
+ subB.setRect( subX,subY+1,dimB,dimB-1 );
+ addB.setRect( addX,addY+1,dimB,dimB-1 );
+
+ subPageR.setRect( 0, 0,
+ sliderStart+1, sliderW );
+ addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+1, sliderW );
+ sliderR .setRect( sliderStart, 1, sliderLength, sliderW-1 );
+
+ } else {
+ subB.setRect( subX+1,subY,dimB-1,dimB );
+ addB.setRect( addX+1,addY,dimB-1,dimB );
+
+ subPageR.setRect( 0, 0, sliderW,
+ sliderStart+1 );
+ addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+1 );
+ sliderR .setRect( 1, sliderStart, sliderW-1, sliderLength );
+ }
+
+ bool maxedOut = (sb->maxValue() == sb->minValue());
+ if ( controls & AddLine ) {
+ drawBevelButton( p, addB.x(), addB.y(),
+ addB.width(), addB.height(), g,
+ ADD_LINE_ACTIVE);
+ p->setPen(g.shadow());
+ drawArrow( p, VERTICAL ? DownArrow : RightArrow,
+ FALSE, addB.x()+2, addB.y()+2,
+ addB.width()-4, addB.height()-4, g, !maxedOut,
+ &g.brush( QColorGroup::Button ));
+ }
+ if ( controls & SubLine ) {
+ drawBevelButton( p, subB.x(), subB.y(),
+ subB.width(), subB.height(), g,
+ SUB_LINE_ACTIVE );
+ p->setPen(g.shadow());
+ drawArrow( p, VERTICAL ? UpArrow : LeftArrow,
+ FALSE, subB.x()+2, subB.y()+2,
+ subB.width()-4, subB.height()-4, g, !maxedOut,
+ &g.brush( QColorGroup::Button ));
+ }
+
+
+ if ( controls & SubPage )
+ p->fillRect( subPageR.x(), subPageR.y(), subPageR.width(),
+ subPageR.height(), g.brush( QColorGroup::Mid ));
+ if ( controls & AddPage )
+ p->fillRect( addPageR.x(), addPageR.y(), addPageR.width(),
+ addPageR.height(), g.brush( QColorGroup::Mid ));
+ if ( controls & Slider ) {
+ QPoint bo = p->brushOrigin();
+ p->setBrushOrigin(sliderR.topLeft());
+ drawBevelButton( p, sliderR.x(), sliderR.y(),
+ sliderR.width(), sliderR.height(), g,
+ FALSE, &g.brush( QColorGroup::Button ) );
+ p->setBrushOrigin(bo);
+ drawRiffles( p, sliderR.x(), sliderR.y(),
+ sliderR.width(), sliderR.height(), g, HORIZONTAL );
+ }
+
+ // ### perhaps this should not be able to accept focus if maxedOut?
+ if ( sb->hasFocus() && (controls & Slider) )
+ p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2,
+ sliderR.width()-5, sliderR.height()-5,
+ sb->backgroundColor() );
+
+}
+
+void QPEStyle::drawRiffles( QPainter* p, int x, int y, int w, int h,
+ const QColorGroup &g, bool horizontal )
+{
+ if (!horizontal) {
+ if (h > 20) {
+ y += (h-20)/2 ;
+ h = 20;
+ }
+ if (h > 12) {
+ int n = 3;
+ int my = y+h/2-4;
+ int i ;
+ p->setPen(g.light());
+ for (i=0; i<n; i++) {
+ p->drawLine(x+2, my+3*i, x+w-4, my+3*i);
+ }
+ p->setPen(g.dark());
+ my++;
+ for (i=0; i<n; i++) {
+ p->drawLine(x+2, my+3*i, x+w-4, my+3*i);
+ }
+ }
+ }
+ else {
+ if (w > 20) {
+ x += (w-20)/2 ;
+ w = 20;
+ }
+ if (w > 12) {
+ int n = 3;
+ int mx = x+w/2-4;
+ int i ;
+ p->setPen(g.light());
+ for (i=0; i<n; i++) {
+ p->drawLine(mx+3*i, y+2, mx + 3*i, y+h-4);
+ }
+ p->setPen(g.dark());
+ mx++;
+ for (i=0; i<n; i++) {
+ p->drawLine(mx+3*i, y+2, mx + 3*i, y+h-4);
+ }
+ }
+ }
+}
+
+int QPEStyle::sliderLength() const
+{
+ return 12;
+}
+
+void QPEStyle::drawSlider( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, Orientation o, bool tickAbove, bool tickBelow )
+{
+ int a = tickAbove ? 3 : 0;
+ int b = tickBelow ? 3 : 0;
+
+ if ( o == Horizontal ) {
+ drawBevelButton( p, x, y+a, w, h-a-b, g, FALSE, &g.brush( QColorGroup::Button ) );
+ int xp = x + w/2;
+ qDrawShadeLine( p, xp, y+a+2, xp, y+h-b-3, g );
+ } else {
+ drawBevelButton( p, x+a, y, w-a-b, h, g, FALSE, &g.brush( QColorGroup::Button ) );
+ int yp = y + h/2;
+ qDrawShadeLine( p, x+a+2, yp, x+w-b-3, yp, g );
+ }
+}
+
+void QPEStyle::drawSliderMask ( QPainter * p, int x, int y, int w, int h,
+ Orientation o, bool tickAbove, bool tickBelow )
+{
+ int a = tickAbove ? 3 : 0;
+ int b = tickBelow ? 3 : 0;
+ if ( o == Horizontal )
+ p->fillRect( x, y+a, w, h-a-b, color1 );
+ else
+ p->fillRect( x+a, y, w-a-b, h, color1 );
+}
+
+/*!\reimp
+ */
+void QPEStyle::drawSliderGrooveMask( QPainter *p,
+ int x, int y, int w, int h,
+ const QColorGroup& , QCOORD c,
+ Orientation orient )
+{
+ if ( orient == Horizontal )
+ p->fillRect( x, y + c - 2, w, 4, color1 );
+ else
+ p->fillRect( x + c - 2, y, 4, h, color1 );
+}
+
+void QPEStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected )
+{
+ QRect r( t->rect() );
+ if ( tb->shape() == QTabBar::RoundedAbove ) {
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
+ if ( r.left() == 0 )
+ p->drawPoint( tb->rect().bottomLeft() );
+ else {
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() );
+ }
+
+ if ( selected ) {
+ p->setPen( tb->colorGroup().background() );
+ p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
+ p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2),
+ tb->colorGroup().brush( QColorGroup::Background ));
+ } else {
+ r.setRect( r.left() + 2, r.top() + 2,
+ r.width() - 4, r.height() - 2 );
+ p->setPen( tb->colorGroup().button() );
+ p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 );
+ p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3),
+ tb->colorGroup().brush( QColorGroup::Button ));
+
+ //do shading; will not work for pixmap brushes
+ QColor bg = tb->colorGroup().button();
+ // int h,s,v;
+ // bg.hsv( &h, &s, &v );
+ int n = r.height()/2;
+ int dark = 100;
+ for ( int i = 1; i < n; i++ ) {
+ dark = (dark * (100+(i*15)/n) )/100;
+ p->setPen( bg.dark( dark ) );
+ int y = r.bottom()-n+i;
+ int x1 = r.left()+1;
+ int x2 = r.right()-1;
+ p->drawLine( x1, y, x2, y );
+ }
+ }
+
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 );
+ p->drawPoint( r.left()+1, r.top() + 1 );
+ p->drawLine( r.left()+2, r.top(),
+ r.right() - 2, r.top() );
+
+ p->setPen( tb->colorGroup().dark() );
+ p->drawPoint( r.right() - 1, r.top() + 1 );
+ p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1);
+ } else if ( tb->shape() == QTabBar::RoundedBelow ) {
+ if ( selected ) {
+ p->setPen( tb->colorGroup().background() );
+ p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
+ p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2),
+ tb->palette().normal().brush( QColorGroup::Background ));
+ } else {
+ p->setPen( tb->colorGroup().dark() );
+ p->drawLine( r.left(), r.top(),
+ r.right(), r.top() );
+ r.setRect( r.left() + 2, r.top(),
+ r.width() - 4, r.height() - 2 );
+ p->setPen( tb->colorGroup().button() );
+ p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 );
+ p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3),
+ tb->palette().normal().brush( QColorGroup::Button ));
+ }
+
+ p->setPen( tb->colorGroup().dark() );
+ p->drawLine( r.right(), r.top(),
+ r.right(), r.bottom() - 2 );
+ p->drawPoint( r.right() - 1, r.bottom() - 1 );
+ p->drawLine( r.right() - 2, r.bottom(),
+ r.left() + 2, r.bottom() );
+
+ p->setPen( tb->colorGroup().light() );
+ p->drawLine( r.left(), r.top()+1,
+ r.left(), r.bottom() - 2 );
+ p->drawPoint( r.left() + 1, r.bottom() - 1 );
+ if ( r.left() == 0 )
+ p->drawPoint( tb->rect().topLeft() );
+
+ } else {
+ QCommonStyle::drawTab( p, tb, t, selected );
+ }
+}
+
+static const int motifItemFrame = 0; // menu item frame width
+static const int motifSepHeight = 2; // separator item height
+static const int motifItemHMargin = 1; // menu item hor text margin
+static const int motifItemVMargin = 2; // menu item ver text margin
+static const int motifArrowHMargin = 0; // arrow horizontal margin
+static const int motifTabSpacing = 12; // space between text and tab
+static const int motifCheckMarkHMargin = 1; // horiz. margins of check mark
+static const int windowsRightBorder = 8; // right border on windows
+static const int windowsCheckMarkWidth = 2; // checkmarks width on windows
+
+/*! \reimp
+*/
+int QPEStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ )
+{
+#ifndef QT_NO_MENUDATA
+ int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm
+
+ if ( mi->isSeparator() )
+ return 10; // arbitrary
+ else if ( mi->pixmap() )
+ w += mi->pixmap()->width(); // pixmap only
+
+ if ( !mi->text().isNull() ) {
+ if ( mi->text().find('\t') >= 0 ) // string contains tab
+ w += motifTabSpacing;
+ }
+
+ if ( maxpmw ) { // we have iconsets
+ w += maxpmw;
+ w += 6; // add a little extra border around the iconset
+ }
+
+ if ( checkable && maxpmw < windowsCheckMarkWidth ) {
+ w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks
+ }
+
+ if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks)
+ w += motifCheckMarkHMargin; // add space to separate the columns
+
+ w += windowsRightBorder; // windows has a strange wide border on the right side
+
+ return w;
+#endif
+}
+
+/*! \reimp
+*/
+int QPEStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm )
+{
+#ifndef QT_NO_MENUDATA
+ int h = 0;
+ if ( mi->isSeparator() ) // separator height
+ h = motifSepHeight;
+ else if ( mi->pixmap() ) // pixmap height
+ h = mi->pixmap()->height() + 2*motifItemFrame;
+ else // text height
+ h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame - 1;
+
+ if ( !mi->isSeparator() && mi->iconSet() != 0 ) {
+ h = QMAX( h, mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height() + 2*motifItemFrame );
+ }
+ if ( mi->custom() )
+ h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1;
+ return h;
+#endif
+}
+
+void QPEStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
+ const QPalette& pal,
+ bool act, bool enabled, int x, int y, int w, int h)
+{
+#ifndef QT_NO_MENUDATA
+ const QColorGroup & g = pal.active();
+ bool dis = !enabled;
+ QColorGroup itemg = dis ? pal.disabled() : pal.active();
+
+ if ( checkable )
+ maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks
+
+ int checkcol = maxpmw;
+
+ if ( mi && mi->isSeparator() ) { // draw separator
+ p->setPen( g.dark() );
+ p->drawLine( x, y, x+w, y );
+ p->setPen( g.light() );
+ p->drawLine( x, y+1, x+w, y+1 );
+ return;
+ }
+
+ QBrush fill = act? g.brush( QColorGroup::Highlight ) :
+ g.brush( QColorGroup::Button );
+ p->fillRect( x, y, w, h, fill);
+
+ if ( !mi )
+ return;
+
+ if ( mi->isChecked() ) {
+ if ( act && !dis ) {
+ qDrawShadePanel( p, x, y, checkcol, h,
+ g, TRUE, 1, &g.brush( QColorGroup::Button ) );
+ } else {
+ qDrawShadePanel( p, x, y, checkcol, h,
+ g, TRUE, 1, &g.brush( QColorGroup::Midlight ) );
+ }
+ } else if ( !act ) {
+ p->fillRect(x, y, checkcol , h,
+ g.brush( QColorGroup::Button ));
+ }
+
+ if ( mi->iconSet() ) { // draw iconset
+ QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal;
+ if (act && !dis )
+ mode = QIconSet::Active;
+ QPixmap pixmap = mi->iconSet()->pixmap( QIconSet::Small, mode );
+ int pixw = pixmap.width();
+ int pixh = pixmap.height();
+ if ( act && !dis ) {
+ if ( !mi->isChecked() )
+ qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) );
+ }
+ QRect cr( x, y, checkcol, h );
+ QRect pmr( 0, 0, pixw, pixh );
+ pmr.moveCenter( cr.center() );
+ p->setPen( itemg.text() );
+ p->drawPixmap( pmr.topLeft(), pixmap );
+
+ QBrush fill = act? g.brush( QColorGroup::Highlight ) :
+ g.brush( QColorGroup::Button );
+ p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill);
+ } else if ( checkable ) { // just "checking"...
+ int mw = checkcol + motifItemFrame;
+ int mh = h - 2*motifItemFrame;
+ if ( mi->isChecked() ) {
+ drawCheckMark( p, x + motifItemFrame + 2,
+ y+motifItemFrame, mw, mh, itemg, act, dis );
+ }
+ }
+
+ p->setPen( act ? g.highlightedText() : g.buttonText() );
+
+ QColor discol;
+ if ( dis ) {
+ discol = itemg.text();
+ p->setPen( discol );
+ }
+
+ int xm = motifItemFrame + checkcol + motifItemHMargin;
+
+ if ( mi->custom() ) {
+ int m = motifItemVMargin;
+ p->save();
+ if ( dis && !act ) {
+ p->setPen( g.light() );
+ mi->custom()->paint( p, itemg, act, enabled,
+ x+xm+1, y+m+1, w-xm-tab+1, h-2*m );
+ p->setPen( discol );
+ }
+ mi->custom()->paint( p, itemg, act, enabled,
+ x+xm, y+m, w-xm-tab+1, h-2*m );
+ p->restore();
+ }
+ QString s = mi->text();
+ if ( !s.isNull() ) { // draw text
+ int t = s.find( '\t' );
+ int m = motifItemVMargin;
+ const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine;
+ if ( t >= 0 ) { // draw tab text
+ if ( dis && !act ) {
+ p->setPen( g.light() );
+ p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1,
+ y+m+1, tab, h-2*m, text_flags, s.mid( t+1 ));
+ p->setPen( discol );
+ }
+ p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame,
+ y+m, tab, h-2*m, text_flags, s.mid( t+1 ) );
+ }
+ if ( dis && !act ) {
+ p->setPen( g.light() );
+ p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t );
+ p->setPen( discol );
+ }
+ p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t );
+ } else if ( mi->pixmap() ) { // draw pixmap
+ QPixmap *pixmap = mi->pixmap();
+ if ( pixmap->depth() == 1 )
+ p->setBackgroundMode( OpaqueMode );
+ p->drawPixmap( x+xm, y+motifItemFrame, *pixmap );
+ if ( pixmap->depth() == 1 )
+ p->setBackgroundMode( TransparentMode );
+ }
+ if ( mi->popup() ) { // draw sub menu arrow
+ int dim = (h-2*motifItemFrame) / 2;
+ if ( act ) {
+ if ( !dis )
+ discol = white;
+ QColorGroup g2( discol, g.highlight(),
+ white, white,
+ dis ? discol : white,
+ discol, white );
+ drawArrow( p, RightArrow, FALSE,
+ x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
+ dim, dim, g2, TRUE );
+ } else {
+ drawArrow( p, RightArrow,
+ FALSE,
+ x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2,
+ dim, dim, g, mi->isEnabled() );
+ }
+ }
+#endif
+}
+
+#endif
diff --git a/library/qpestyle.h b/library/qpestyle.h
new file mode 100644
index 0000000..19ef346
--- a/dev/null
+++ b/library/qpestyle.h
@@ -0,0 +1,102 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QPESTYLE_H
+#define QPESTYLE_H
+
+#ifndef QT_H
+#include "qwindowsstyle.h"
+#endif // QT_H
+
+#if QT_VERSION >= 300
+
+class Q_EXPORT QPEStyle : public QWindowsStyle
+{
+public:
+ QPEStyle();
+ virtual ~QPEStyle();
+
+ virtual void drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags=Style_Default, const QStyleOption & = QStyleOption::Default) const;
+ virtual void drawControl( ControlElement ce, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags how=Style_Default, const QStyleOption & = QStyleOption::Default) const;
+ virtual void drawComplexControl( ComplexControl control, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags how=Style_Default, SCFlags sub=SC_All, SCFlags subActive=SC_None, const QStyleOption & = QStyleOption::Default) const;
+ virtual int pixelMetric( PixelMetric metric, const QWidget *widget=0 ) const;
+ virtual QSize sizeFromContents( ContentsType contents, const QWidget *widget, const QSize &contentsSize, const QStyleOption & = QStyleOption::Default) const;
+};
+
+#else
+
+class Q_EXPORT QPEStyle : public QWindowsStyle
+{
+public:
+ QPEStyle();
+ virtual ~QPEStyle();
+ virtual void polish( QPalette &p );
+ virtual void polish( QWidget *w );
+ virtual void unPolish( QWidget *w );
+
+ int defaultFrameWidth () const;
+ void drawPanel ( QPainter * p, int x, int y, int w, int h,
+ const QColorGroup &, bool sunken=FALSE, int lineWidth = 1, const QBrush * fill = 0 );
+ void drawButton( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken, const QBrush* fill );
+ void drawButtonMask ( QPainter * p, int x, int y, int w, int h );
+ void drawBevelButton( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken=FALSE, const QBrush* fill=0 );
+ QRect comboButtonRect( int x, int y, int w, int h);
+ QRect comboButtonFocusRect( int x, int y, int w, int h);
+ void drawComboButton( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, bool sunken, bool, bool enabled,
+ const QBrush *fill );
+ void drawExclusiveIndicator ( QPainter * p, int x, int y, int w, int h,
+ const QColorGroup & g, bool on, bool down = FALSE, bool enabled = TRUE );
+ void drawIndicator ( QPainter * p, int x, int y, int w, int h,
+ const QColorGroup & g, int state, bool down = FALSE, bool enabled = TRUE );
+ void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int&);
+ void drawScrollBarControls( QPainter*, const QScrollBar*, int sliderStart, uint controls, uint activeControl );
+ ScrollControl scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p );
+ void drawRiffles( QPainter* p, int x, int y, int w, int h,
+ const QColorGroup &g, bool horizontal );
+ int sliderLength() const;
+ void drawSlider( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup &g, Orientation, bool tickAbove, bool tickBelow );
+ void drawSliderMask( QPainter *p, int x, int y, int w, int h,
+ Orientation, bool tickAbove, bool tickBelow );
+ void drawSliderGrooveMask( QPainter *p, int x, int y, int w, int h,
+ const QColorGroup& , QCOORD c, Orientation orient );
+ void drawTab( QPainter *, const QTabBar *, QTab *, bool selected );
+ int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& );
+ int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& );
+ void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi,
+ const QPalette& pal,
+ bool act, bool enabled, int x, int y, int w, int h);
+
+ int buttonMargin() const;
+ QSize scrollBarExtent() const;
+
+private: // Disabled copy constructor and operator=
+#if defined(Q_DISABLE_COPY)
+ QPEStyle( const QPEStyle & );
+ QPEStyle& operator=( const QPEStyle & );
+#endif
+};
+
+#endif
+
+#endif // QPESTYLE_H
diff --git a/library/qpetoolbar.cpp b/library/qpetoolbar.cpp
new file mode 100644
index 0000000..7f95eda
--- a/dev/null
+++ b/library/qpetoolbar.cpp
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qpetoolbar.h"
+#include "qpemenubar.h"
+#include <qtoolbutton.h>
+
+/*!
+ \class QPEToolBar qpemenubar.h
+ \brief The QPEToolBar class is obsolete. Use QToolBar instead.
+
+ \obsolete
+
+ The QPEToolBar class is obsolete. Use QToolBar instead.
+
+ \sa QToolBar
+ */
+
+/*!
+ Constructs a QPEToolBar just as you would construct
+ a QToolBar, passing \a parent and \a name.
+ */
+QPEToolBar::QPEToolBar( QMainWindow *parent, const char *name )
+ : QToolBar( parent, name )
+{
+}
+
+/*!
+ \internal
+*/
+void QPEToolBar::childEvent( QChildEvent *e )
+{
+ QToolBar::childEvent( e );
+}
+
diff --git a/library/qpetoolbar.h b/library/qpetoolbar.h
new file mode 100644
index 0000000..53d21c0
--- a/dev/null
+++ b/library/qpetoolbar.h
@@ -0,0 +1,39 @@
+/**********************************************************************
+** Copyright (C) 2001 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QPETOOLBAR_H
+#define QPETOOLBAR_H
+
+#include <qtoolbar.h>
+
+class QMainWindow;
+
+class QPEToolBar : public QToolBar
+{
+ Q_OBJECT
+public:
+ QPEToolBar( QMainWindow *parent = 0, const char *name = 0 );
+
+protected:
+ virtual void childEvent( QChildEvent *e );
+};
+
+#endif
+
diff --git a/library/qprocess.cpp b/library/qprocess.cpp
new file mode 100644
index 0000000..618c0e0
--- a/dev/null
+++ b/library/qprocess.cpp
@@ -0,0 +1,654 @@
+/****************************************************************************
+** $Id$
+**
+** Implementation of QProcess class
+**
+** Created : 20000905
+**
+** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+** information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "qprocess.h"
+
+#ifndef QT_NO_PROCESS
+
+#include "qapplication.h"
+
+
+//#define QT_QPROCESS_DEBUG
+
+
+/*!
+ \class QProcess qprocess.h
+
+ \brief The QProcess class is used to start external programs and to
+ communicate with them.
+
+ This is a temporary class. This will be replaced by Qt 3's QProcess class.
+*/
+
+/*!
+ \enum QProcess::Communication
+
+ This enum type defines the communication channels connected to the
+ process.
+
+ \value Stdin Data can be written to the process's standard input.
+
+ \value Stdout Data can be read from the process's standard output.
+
+ \value Stderr Data can be read from the process's standard error.
+
+ \value DupStderr Duplicates standard error to standard output for new
+ processes; i.e. everything that the process writes to standard error, is
+ reported by QProcess on standard output instead. This is especially useful if
+ your application requires that the output on standard output and standard
+ error is read in the same order as the process output it. Please note that
+ this is a binary flag, so if you want to activate this together with standard
+ input, output and error redirection (the default), you have to specify
+ \c{Stdin|Stdout|Stderr|DupStderr} for the setCommunication() call.
+
+ \sa setCommunication() communication()
+*/
+
+/*!
+ Constructs a QProcess object. The \a parent and \a name parameters are passed
+ to the QObject constructor.
+
+ \sa setArguments() addArgument() start()
+*/
+QProcess::QProcess( QObject *parent, const char *name )
+ : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
+ wroteToStdinConnected( FALSE ),
+ readStdoutCalled( FALSE ), readStderrCalled( FALSE ),
+ comms( Stdin|Stdout|Stderr )
+{
+ init();
+}
+
+/*!
+ Constructs a QProcess with \a arg0 as the command to be executed. The
+ \a parent and \a name parameters are passed to the QObject constructor.
+
+ The process is not started. You must call start() or launch()
+ to start the process.
+
+ \sa setArguments() addArgument() start()
+*/
+QProcess::QProcess( const QString& arg0, QObject *parent, const char *name )
+ : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
+ wroteToStdinConnected( FALSE ),
+ readStdoutCalled( FALSE ), readStderrCalled( FALSE ),
+ comms( Stdin|Stdout|Stderr )
+{
+ init();
+ addArgument( arg0 );
+}
+
+/*!
+ Constructs a QProcess with \a args as the arguments of the process. The first
+ element in the list is the command to be executed. The other elements in the
+ list are the arguments to this command. The \a parent and \a name
+ parameters are passed to the QObject constructor.
+
+ The process is not started. You must call start() or launch()
+ to start the process.
+
+ \sa setArguments() addArgument() start()
+*/
+QProcess::QProcess( const QStringList& args, QObject *parent, const char *name )
+ : QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
+ wroteToStdinConnected( FALSE ),
+ readStdoutCalled( FALSE ), readStderrCalled( FALSE ),
+ comms( Stdin|Stdout|Stderr )
+{
+ init();
+ setArguments( args );
+}
+
+
+/*!
+ Returns the list of arguments that are set for the process. Arguments can be
+ specified with the constructor or with the functions setArguments() and
+ addArgument().
+
+ \sa setArguments() addArgument()
+*/
+QStringList QProcess::arguments() const
+{
+ return _arguments;
+}
+
+/*!
+ Clears the list of arguments that are set for the process.
+
+ \sa setArguments() addArgument()
+*/
+void QProcess::clearArguments()
+{
+ _arguments.clear();
+}
+
+/*!
+ Sets \a args as the arguments for the process. The first element in the list
+ is the command to be executed. The other elements in the list are the
+ arguments to the command. Any previous arguments are deleted.
+
+ \sa arguments() addArgument()
+*/
+void QProcess::setArguments( const QStringList& args )
+{
+ _arguments = args;
+}
+
+/*!
+ Adds \a arg to the end of the list of arguments.
+
+ The first element in the list of arguments is the command to be
+ executed; the following elements are the arguments to the command.
+
+ \sa arguments() setArguments()
+*/
+void QProcess::addArgument( const QString& arg )
+{
+ _arguments.append( arg );
+}
+
+#ifndef QT_NO_DIR
+/*!
+ Returns the working directory that was set with
+ setWorkingDirectory(), or the current directory if none has been
+ set.
+
+ \sa setWorkingDirectory() QDir::current()
+*/
+QDir QProcess::workingDirectory() const
+{
+ return workingDir;
+}
+
+/*!
+ Sets \a dir as the working directory for a process. This does not affect
+ running processes; only processes that are started afterwards are affected.
+
+ Setting the working directory is especially useful for processes that try to
+ access files with relative filenames.
+
+ \sa workingDirectory() start()
+*/
+void QProcess::setWorkingDirectory( const QDir& dir )
+{
+ workingDir = dir;
+}
+#endif //QT_NO_DIR
+
+/*!
+ Returns the communication required with the process.
+
+ \sa setCommunication()
+*/
+int QProcess::communication() const
+{
+ return comms;
+}
+
+/*!
+ Sets \a commFlags as the communication required with the process.
+
+ \a commFlags is a bitwise OR between the flags defined in \c Communication.
+
+ The default is \c{Stdin|Stdout|Stderr}.
+
+ \sa communication()
+*/
+void QProcess::setCommunication( int commFlags )
+{
+ comms = commFlags;
+}
+
+/*!
+ Returns TRUE if the process has exited normally; otherwise returns
+ FALSE. This implies that this function returns FALSE if the process
+ is still running.
+
+ \sa isRunning() exitStatus() processExited()
+*/
+bool QProcess::normalExit() const
+{
+ // isRunning() has the side effect that it determines the exit status!
+ if ( isRunning() )
+ return FALSE;
+ else
+ return exitNormal;
+}
+
+/*!
+ Returns the exit status of the process or 0 if the process is still
+ running. This function returns immediately and does not wait until
+ the process is finished.
+
+ If normalExit() is FALSE (e.g. if the program was killed or
+ crashed), this function returns 0, so you should check the return
+ value of normalExit() before relying on this value.
+
+ \sa normalExit() processExited()
+*/
+int QProcess::exitStatus() const
+{
+ // isRunning() has the side effect that it determines the exit status!
+ if ( isRunning() )
+ return 0;
+ else
+ return exitStat;
+}
+
+
+/*!
+ Reads the data that the process has written to standard output. When
+ new data is written to standard output, the class emits the signal
+ readyReadStdout().
+
+ If there is no data to read, this function returns a QByteArray of
+ size 0: it does not wait until there is something to read.
+
+ \sa readyReadStdout() readLineStdout() readStderr() writeToStdin()
+*/
+QByteArray QProcess::readStdout()
+{
+ if ( readStdoutCalled ) {
+ return QByteArray();
+ }
+ readStdoutCalled = TRUE;
+
+ QByteArray buf = bufStdout()->copy();
+ consumeBufStdout( -1 ); // consume everything
+
+ readStdoutCalled = FALSE;
+ return buf;
+}
+
+/*!
+ Reads the data that the process has written to standard error. When
+ new data is written to standard error, the class emits the signal
+ readyReadStderr().
+
+ If there is no data to read, this function returns a QByteArray of
+ size 0: it does not wait until there is something to read.
+
+ \sa readyReadStderr() readLineStderr() readStdout() writeToStdin()
+*/
+QByteArray QProcess::readStderr()
+{
+ if ( readStderrCalled ) {
+ return QByteArray();
+ }
+ readStderrCalled = TRUE;
+
+ QByteArray buf = bufStderr()->copy();
+ consumeBufStderr( -1 ); // consume everything
+
+ readStderrCalled = FALSE;
+ return buf;
+}
+
+/*!
+ Returns TRUE if it's possible to read an entire line of text from
+ standard output at this time; otherwise returns FALSE.
+
+ \sa readLineStdout() canReadLineStderr()
+*/
+bool QProcess::canReadLineStdout() const
+{
+ QProcess *that = (QProcess*)this;
+ return that->scanNewline( TRUE, 0 );
+}
+
+/*!
+ Returns TRUE if it's possible to read an entire line of text from
+ standard error at this time; otherwise returns FALSE.
+
+ \sa readLineStderr() canReadLineStdout()
+*/
+bool QProcess::canReadLineStderr() const
+{
+ QProcess *that = (QProcess*)this;
+ return that->scanNewline( FALSE, 0 );
+}
+
+/*!
+ Reads a line of text from standard output, excluding any trailing newline or
+ carriage return characters, and returns it. Returns QString::null if
+ canReadLineStdout() returns FALSE.
+
+ \sa canReadLineStdout() readyReadStdout() readStdout() readLineStderr()
+*/
+QString QProcess::readLineStdout()
+{
+ QByteArray a;
+ QString s;
+ if ( scanNewline( TRUE, &a ) ) {
+ if ( a.isEmpty() )
+ s = "";
+ else
+ s = QString( a );
+ }
+ return s;
+}
+
+/*!
+ Reads a line of text from standard error, excluding any trailing newline or
+ carriage return characters and returns it. Returns QString::null if
+ canReadLineStderr() returns FALSE.
+
+ \sa canReadLineStderr() readyReadStderr() readStderr() readLineStdout()
+*/
+QString QProcess::readLineStderr()
+{
+ QByteArray a;
+ QString s;
+ if ( scanNewline( FALSE, &a ) ) {
+ if ( a.isEmpty() )
+ s = "";
+ else
+ s = QString( a );
+ }
+ return s;
+}
+
+/*!
+ This private function scans for any occurrence of \n or \r\n in the
+ buffer \e buf. It stores the text in the byte array \a store if it is
+ non-null.
+*/
+bool QProcess::scanNewline( bool stdOut, QByteArray *store )
+{
+ QByteArray *buf;
+ if ( stdOut )
+ buf = bufStdout();
+ else
+ buf = bufStderr();
+ uint n = buf->size();
+ uint i;
+ for ( i=0; i<n; i++ ) {
+ if ( buf->at(i) == '\n' ) {
+ break;
+ }
+ }
+ if ( i >= n )
+ return FALSE;
+
+ if ( store ) {
+ uint lineLength = i;
+ if ( lineLength>0 && buf->at(lineLength-1) == '\r' )
+ lineLength--; // (if there are two \r, let one stay)
+ store->resize( lineLength );
+ memcpy( store->data(), buf->data(), lineLength );
+ if ( stdOut )
+ consumeBufStdout( i+1 );
+ else
+ consumeBufStderr( i+1 );
+ }
+ return TRUE;
+}
+
+/*!
+ \fn void QProcess::launchFinished()
+
+ This signal is emitted when the process was started with launch().
+ If the start was successful, this signal is emitted after all the
+ data has been written to standard input. If the start failed, then
+ this signal is emitted immediately.
+
+ \sa launch() QObject::deleteLater()
+*/
+
+/*!
+ Runs the process and writes the data \a buf to the process's standard input.
+ If all the data is written to standard input, standard input is
+ closed. The command is searched for in the path for executable programs;
+ you can also use an absolute path in the command itself.
+
+ If \a env is null, then the process is started with the same environment as
+ the starting process. If \a env is non-null, then the values in the
+ stringlist are interpreted as environment setttings of the form \c
+ {key=value} and the process is started with these environment settings. For
+ convenience, there is a small exception to this rule under Unix: if \a env
+ does not contain any settings for the environment variable \c
+ LD_LIBRARY_PATH, then this variable is inherited from the starting process.
+
+ Returns TRUE if the process could be started; otherwise returns FALSE.
+
+ Note that you should not use the slots writeToStdin() and closeStdin() on
+ processes started with launch(), since the result is not well-defined. If you
+ need these slots, use start() instead.
+
+ The process may or may not read the \a buf data sent to its standard
+ input.
+
+ You can call this function even when a process that was started with
+ this instance is still running. Be aware that if you do this the
+ standard input of the process that was launched first will be
+ closed, with any pending data being deleted, and the process will be
+ left to run out of your control. Similarly, if the process could not
+ be started the standard input will be closed and the pending data
+ deleted. (On operating systems that have zombie processes, Qt will
+ also wait() on the old process.)
+
+ The object emits the signal launchFinished() when this function
+ call is finished. If the start was successful, this signal is
+ emitted after all the data has been written to standard input. If
+ the start failed, then this signal is emitted immediately.
+
+ \sa start() launchFinished();
+*/
+bool QProcess::launch( const QByteArray& buf, QStringList *env )
+{
+ if ( start( env ) ) {
+ if ( !buf.isEmpty() ) {
+ connect( this, SIGNAL(wroteToStdin()),
+ this, SLOT(closeStdinLaunch()) );
+ writeToStdin( buf );
+ } else {
+ closeStdin();
+ emit launchFinished();
+ }
+ return TRUE;
+ } else {
+ emit launchFinished();
+ return FALSE;
+ }
+}
+
+/*! \overload
+
+ The data \a buf is written to standard input with writeToStdin()
+ using the QString::local8Bit() representation of the strings.
+*/
+bool QProcess::launch( const QString& buf, QStringList *env )
+{
+ if ( start( env ) ) {
+ if ( !buf.isEmpty() ) {
+ connect( this, SIGNAL(wroteToStdin()),
+ this, SLOT(closeStdinLaunch()) );
+ writeToStdin( buf );
+ } else {
+ closeStdin();
+ emit launchFinished();
+ }
+ return TRUE;
+ } else {
+ emit launchFinished();
+ return FALSE;
+ }
+}
+
+/*!
+ This private slot is used by the launch() functions to close standard input.
+*/
+void QProcess::closeStdinLaunch()
+{
+ disconnect( this, SIGNAL(wroteToStdin()),
+ this, SLOT(closeStdinLaunch()) );
+ closeStdin();
+ emit launchFinished();
+}
+
+
+/*!
+ \fn void QProcess::readyReadStdout()
+
+ This signal is emitted when the process has written data to standard output.
+ You can read the data with readStdout().
+
+ Note that this signal is only emitted when there is new data and not
+ when there is old, but unread data. In the slot connected to this signal, you
+ should always read everything that is available at that moment to make sure
+ that you don't lose any data.
+
+ \sa readStdout() readLineStdout() readyReadStderr()
+*/
+/*!
+ \fn void QProcess::readyReadStderr()
+
+ This signal is emitted when the process has written data to standard error.
+ You can read the data with readStderr().
+
+ Note that this signal is only emitted when there is new data and not
+ when there is old, but unread data. In the slot connected to this signal, you
+ should always read everything that is available at that moment to make sure
+ that you don't lose any data.
+
+ \sa readStderr() readLineStderr() readyReadStdout()
+*/
+/*!
+ \fn void QProcess::processExited()
+
+ This signal is emitted when the process has exited.
+
+ \sa isRunning() normalExit() exitStatus() start() launch()
+*/
+/*!
+ \fn void QProcess::wroteToStdin()
+
+ This signal is emitted if the data sent to standard input (via
+ writeToStdin()) was actually written to the process. This does not
+ imply that the process really read the data, since this class only detects
+ when it was able to write the data to the operating system. But it is now
+ safe to close standard input without losing pending data.
+
+ \sa writeToStdin() closeStdin()
+*/
+
+
+/*! \overload
+
+ The string \a buf is handled as text using
+ the QString::local8Bit() representation.
+*/
+void QProcess::writeToStdin( const QString& buf )
+{
+ QByteArray tmp = buf.local8Bit();
+ tmp.resize( buf.length() );
+ writeToStdin( tmp );
+}
+
+
+/*
+ * Under Windows the implementation is not so nice: it is not that easy to
+ * detect when one of the signals should be emitted; therefore there are some
+ * timers that query the information.
+ * To keep it a little efficient, use the timers only when they are needed.
+ * They are needed, if you are interested in the signals. So use
+ * connectNotify() and disconnectNotify() to keep track of your interest.
+ */
+/*! \reimp
+*/
+void QProcess::connectNotify( const char * signal )
+{
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::connectNotify(): signal %s has been connected", signal );
+#endif
+ if ( !ioRedirection )
+ if ( qstrcmp( signal, SIGNAL(readyReadStdout()) )==0 ||
+ qstrcmp( signal, SIGNAL(readyReadStderr()) )==0
+ ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::connectNotify(): set ioRedirection to TRUE" );
+#endif
+ setIoRedirection( TRUE );
+ return;
+ }
+ if ( !notifyOnExit && qstrcmp( signal, SIGNAL(processExited()) )==0 ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::connectNotify(): set notifyOnExit to TRUE" );
+#endif
+ setNotifyOnExit( TRUE );
+ return;
+ }
+ if ( !wroteToStdinConnected && qstrcmp( signal, SIGNAL(wroteToStdin()) )==0 ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::connectNotify(): set wroteToStdinConnected to TRUE" );
+#endif
+ setWroteStdinConnected( TRUE );
+ return;
+ }
+}
+
+/*! \reimp
+*/
+void QProcess::disconnectNotify( const char * )
+{
+ if ( ioRedirection &&
+ receivers( SIGNAL(readyReadStdout()) ) ==0 &&
+ receivers( SIGNAL(readyReadStderr()) ) ==0
+ ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::disconnectNotify(): set ioRedirection to FALSE" );
+#endif
+ setIoRedirection( FALSE );
+ }
+ if ( notifyOnExit && receivers( SIGNAL(processExited()) ) == 0 ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::disconnectNotify(): set notifyOnExit to FALSE" );
+#endif
+ setNotifyOnExit( FALSE );
+ }
+ if ( wroteToStdinConnected && receivers( SIGNAL(wroteToStdin()) ) == 0 ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::disconnectNotify(): set wroteToStdinConnected to FALSE" );
+#endif
+ setWroteStdinConnected( FALSE );
+ }
+}
+
+#endif // QT_NO_PROCESS
diff --git a/library/qprocess.h b/library/qprocess.h
new file mode 100644
index 0000000..306e659
--- a/dev/null
+++ b/library/qprocess.h
@@ -0,0 +1,174 @@
+/****************************************************************************
+** $Id$
+**
+** Implementation of QProcess class
+**
+** Created : 20000905
+**
+** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+** information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QPROCESS_H
+#define QPROCESS_H
+
+#ifndef QT_H
+#include "qobject.h"
+#include "qstringlist.h"
+#include "qdir.h"
+#endif // QT_H
+
+#ifndef QT_NO_PROCESS
+
+class QProcessPrivate;
+
+
+class Q_EXPORT QProcess : public QObject
+{
+ Q_OBJECT
+public:
+ QProcess( QObject *parent=0, const char *name=0 );
+ QProcess( const QString& arg0, QObject *parent=0, const char *name=0 );
+ QProcess( const QStringList& args, QObject *parent=0, const char *name=0 );
+ ~QProcess();
+
+ // set and get the arguments and working directory
+ QStringList arguments() const;
+ void clearArguments();
+ virtual void setArguments( const QStringList& args );
+ virtual void addArgument( const QString& arg );
+#ifndef QT_NO_DIR
+ QDir workingDirectory() const;
+ virtual void setWorkingDirectory( const QDir& dir );
+#endif
+
+ // set and get the comms wanted
+ enum Communication { Stdin=0x01, Stdout=0x02, Stderr=0x04, DupStderr=0x08 };
+ void setCommunication( int c );
+ int communication() const;
+
+ // start the execution
+ virtual bool start( QStringList *env=0 );
+ virtual bool launch( const QString& buf, QStringList *env=0 );
+ virtual bool launch( const QByteArray& buf, QStringList *env=0 );
+
+ // inquire the status
+ bool isRunning() const;
+ bool normalExit() const;
+ int exitStatus() const;
+
+ // reading
+ virtual QByteArray readStdout();
+ virtual QByteArray readStderr();
+ bool canReadLineStdout() const;
+ bool canReadLineStderr() const;
+ virtual QString readLineStdout();
+ virtual QString readLineStderr();
+
+ // get platform dependent process information
+#if defined(Q_OS_WIN32)
+ typedef void* PID;
+#else
+ typedef long Q_LONG;
+ typedef Q_LONG PID;
+#endif
+ PID processIdentifier();
+
+ void flushStdin();
+
+signals:
+ void readyReadStdout();
+ void readyReadStderr();
+ void processExited();
+ void wroteToStdin();
+ void launchFinished();
+
+public slots:
+ // end the execution
+ void tryTerminate() const;
+ void kill() const;
+
+ // input
+ virtual void writeToStdin( const QByteArray& buf );
+ virtual void writeToStdin( const QString& buf );
+ virtual void closeStdin();
+
+protected: // ### or private?
+ void connectNotify( const char * signal );
+ void disconnectNotify( const char * signal );
+private:
+ void setIoRedirection( bool value );
+ void setNotifyOnExit( bool value );
+ void setWroteStdinConnected( bool value );
+
+ void init();
+ void reset();
+#if defined(Q_OS_WIN32)
+ uint readStddev( HANDLE dev, char *buf, uint bytes );
+#endif
+ bool scanNewline( bool stdOut, QByteArray *store );
+
+ QByteArray* bufStdout();
+ QByteArray* bufStderr();
+ void consumeBufStdout( int consume );
+ void consumeBufStderr( int consume );
+
+private slots:
+ void socketRead( int fd );
+ void socketWrite( int fd );
+ void timeout();
+ void closeStdinLaunch();
+
+private:
+ QProcessPrivate *d;
+#ifndef QT_NO_DIR
+ QDir workingDir;
+#endif
+ QStringList _arguments;
+
+ int exitStat; // exit status
+ bool exitNormal; // normal exit?
+ bool ioRedirection; // automatically set be (dis)connectNotify
+ bool notifyOnExit; // automatically set be (dis)connectNotify
+ bool wroteToStdinConnected; // automatically set be (dis)connectNotify
+
+ bool readStdoutCalled;
+ bool readStderrCalled;
+ int comms;
+
+ friend class QProcessPrivate;
+#if defined(Q_OS_UNIX) || defined(_OS_UNIX) || defined(UNIX)
+ friend class QProcessManager;
+ friend class QProc;
+#endif
+};
+
+#endif // QT_NO_PROCESS
+
+#endif // QPROCESS_H
diff --git a/library/qprocess_unix.cpp b/library/qprocess_unix.cpp
new file mode 100644
index 0000000..cb421c2
--- a/dev/null
+++ b/library/qprocess_unix.cpp
@@ -0,0 +1,1157 @@
+/****************************************************************************
+** $Id$
+**
+** Implementation of QProcess class for Unix
+**
+** Created : 20000905
+**
+** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
+**
+** This file is part of the kernel module of the Qt GUI Toolkit.
+**
+** This file may be distributed under the terms of the Q Public License
+** as defined by Trolltech AS of Norway and appearing in the file
+** LICENSE.QPL included in the packaging of this file.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
+** licenses may use this file in accordance with the Qt Commercial License
+** Agreement provided with the Software.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
+** information about Qt Commercial License Agreements.
+** See http://www.trolltech.com/qpl/ for QPL licensing information.
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+//#include "qplatformdefs.h"
+
+// Solaris redefines connect -> __xnet_connect with _XOPEN_SOURCE_EXTENDED.
+#if defined(connect)
+#undef connect
+#endif
+
+#include "qprocess.h"
+
+#ifndef QT_NO_PROCESS
+
+#include "qapplication.h"
+#include "qqueue.h"
+#include "qlist.h"
+#include "qsocketnotifier.h"
+#include "qtimer.h"
+#include "qcleanuphandler_p.h"
+#include "qregexp.h"
+
+#include <stdlib.h>
+
+// ### FOR Qt 2.3 compat
+#include <unistd.h>
+#include <signal.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <sys/wait.h>
+#include <sys/fcntl.h>
+
+#include <errno.h>
+
+#ifdef __MIPSEL__
+# ifndef SOCK_DGRAM
+# define SOCK_DGRAM 1
+# endif
+# ifndef SOCK_STREAM
+# define SOCK_STREAM 2
+# endif
+#endif
+
+//#define QT_QPROCESS_DEBUG
+
+
+#ifdef Q_C_CALLBACKS
+extern "C" {
+#endif // Q_C_CALLBACKS
+
+#define QT_SIGNAL_RETTYPE void
+#define QT_SIGNAL_ARGS int
+#define QT_SIGNAL_IGNORE SIG_IGN
+
+ QT_SIGNAL_RETTYPE qt_C_sigchldHnd(QT_SIGNAL_ARGS);
+
+#ifdef Q_C_CALLBACKS
+}
+#endif // Q_C_CALLBACKS
+
+
+class QProc;
+class QProcessManager;
+class QProcessPrivate
+{
+public:
+ QProcessPrivate();
+ ~QProcessPrivate();
+
+ void closeOpenSocketsForChild();
+ void newProc( pid_t pid, QProcess *process );
+
+ QByteArray bufStdout;
+ QByteArray bufStderr;
+
+ QQueue<QByteArray> stdinBuf;
+
+ QSocketNotifier *notifierStdin;
+ QSocketNotifier *notifierStdout;
+ QSocketNotifier *notifierStderr;
+
+ ssize_t stdinBufRead;
+ QProc *proc;
+
+ bool exitValuesCalculated;
+ bool socketReadCalled;
+
+ static QProcessManager *procManager;
+};
+
+
+/***********************************************************************
+ *
+ * QProc
+ *
+ **********************************************************************/
+/*
+ The class QProcess does not necessarily map exactly to the running
+ child processes: if the process is finished, the QProcess class may still be
+ there; furthermore a user can use QProcess to start more than one process.
+
+ The helper-class QProc has the semantics that one instance of this class maps
+ directly to a running child process.
+*/
+class QProc
+{
+public:
+ QProc( pid_t p, QProcess *proc=0 ) : pid(p), process(proc)
+ {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProc: Constructor for pid %d and QProcess %p", pid, process );
+#endif
+ socketStdin = 0;
+ socketStdout = 0;
+ socketStderr = 0;
+ }
+ ~QProc()
+ {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProc: Destructor for pid %d and QProcess %p", pid, process );
+#endif
+ if ( process != 0 ) {
+ if ( process->d->notifierStdin )
+ process->d->notifierStdin->setEnabled( FALSE );
+ if ( process->d->notifierStdout )
+ process->d->notifierStdout->setEnabled( FALSE );
+ if ( process->d->notifierStderr )
+ process->d->notifierStderr->setEnabled( FALSE );
+ process->d->proc = 0;
+ }
+ if( socketStdin != 0 )
+ ::close( socketStdin );
+ // ### close these sockets even on parent exit or is it better only on
+ // sigchld (but what do I have to do with them on exit then)?
+ if( socketStdout != 0 )
+ ::close( socketStdout );
+ if( socketStderr != 0 )
+ ::close( socketStderr );
+ }
+
+ pid_t pid;
+ int socketStdin;
+ int socketStdout;
+ int socketStderr;
+ QProcess *process;
+};
+
+/***********************************************************************
+ *
+ * QProcessManager
+ *
+ **********************************************************************/
+class QProcessManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ QProcessManager();
+ ~QProcessManager();
+
+ void append( QProc *p );
+ void remove( QProc *p );
+
+ void cleanup();
+
+public slots:
+ void removeMe();
+ void sigchldHnd( int );
+
+public:
+ struct sigaction oldactChld;
+ struct sigaction oldactPipe;
+ QList<QProc> *procList;
+ int sigchldFd[2];
+};
+
+QCleanupHandler<QProcessManager> qprocess_cleanup_procmanager;
+
+QProcessManager::QProcessManager()
+{
+ procList = new QList<QProc>;
+ procList->setAutoDelete( TRUE );
+
+ // The SIGCHLD handler writes to a socket to tell the manager that
+ // something happened. This is done to get the processing in sync with the
+ // event reporting.
+ if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, sigchldFd ) ) {
+ sigchldFd[0] = 0;
+ sigchldFd[1] = 0;
+ } else {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager: install socket notifier (%d)", sigchldFd[1] );
+#endif
+ QSocketNotifier *sn = new QSocketNotifier( sigchldFd[1],
+ QSocketNotifier::Read, this );
+ connect( sn, SIGNAL(activated(int)),
+ this, SLOT(sigchldHnd(int)) );
+ sn->setEnabled( TRUE );
+ }
+
+ // install a SIGCHLD handler and ignore SIGPIPE
+ struct sigaction act;
+
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager: install a SIGCHLD handler" );
+#endif
+ act.sa_handler = qt_C_sigchldHnd;
+ sigemptyset( &(act.sa_mask) );
+ sigaddset( &(act.sa_mask), SIGCHLD );
+ act.sa_flags = SA_NOCLDSTOP;
+#if defined(SA_RESTART)
+ act.sa_flags |= SA_RESTART;
+#endif
+ if ( sigaction( SIGCHLD, &act, &oldactChld ) != 0 )
+ qWarning( "Error installing SIGCHLD handler" );
+
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager: install a SIGPIPE handler (SIG_IGN)" );
+#endif
+ act.sa_handler = QT_SIGNAL_IGNORE;
+ sigemptyset( &(act.sa_mask) );
+ sigaddset( &(act.sa_mask), SIGPIPE );
+ act.sa_flags = 0;
+ if ( sigaction( SIGPIPE, &act, &oldactPipe ) != 0 )
+ qWarning( "Error installing SIGPIPE handler" );
+}
+
+QProcessManager::~QProcessManager()
+{
+ delete procList;
+
+ if ( sigchldFd[0] != 0 )
+ ::close( sigchldFd[0] );
+ if ( sigchldFd[1] != 0 )
+ ::close( sigchldFd[1] );
+
+ // restore SIGCHLD handler
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager: restore old sigchild handler" );
+#endif
+ if ( sigaction( SIGCHLD, &oldactChld, 0 ) != 0 )
+ qWarning( "Error restoring SIGCHLD handler" );
+
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager: restore old sigpipe handler" );
+#endif
+ if ( sigaction( SIGPIPE, &oldactPipe, 0 ) != 0 )
+ qWarning( "Error restoring SIGPIPE handler" );
+}
+
+void QProcessManager::append( QProc *p )
+{
+ procList->append( p );
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager: append process (procList.count(): %d)", procList->count() );
+#endif
+}
+
+void QProcessManager::remove( QProc *p )
+{
+ procList->remove( p );
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager: remove process (procList.count(): %d)", procList->count() );
+#endif
+ cleanup();
+}
+
+void QProcessManager::cleanup()
+{
+ if ( procList->count() == 0 ) {
+ QTimer::singleShot( 0, this, SLOT(removeMe()) );
+ }
+}
+
+void QProcessManager::removeMe()
+{
+ if ( procList->count() == 0 ) {
+ qprocess_cleanup_procmanager.remove( &QProcessPrivate::procManager );
+ QProcessPrivate::procManager = 0;
+ delete this;
+ }
+}
+
+void QProcessManager::sigchldHnd( int fd )
+{
+ char tmp;
+ ::read( fd, &tmp, sizeof(tmp) );
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager::sigchldHnd()" );
+#endif
+ QProc *proc;
+ QProcess *process;
+ bool removeProc;
+ proc = procList->first();
+ while ( proc != 0 ) {
+ removeProc = FALSE;
+ process = proc->process;
+ if ( process != 0 ) {
+ if ( !process->isRunning() ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager::sigchldHnd() (PID: %d): process exited (QProcess available)", proc->pid );
+#endif
+ // read pending data
+ int nbytes = 0;
+ if ( ::ioctl(proc->socketStdout, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager::sigchldHnd() (PID: %d): reading %d bytes of pending data on stdout", proc->pid, nbytes );
+#endif
+ process->socketRead( proc->socketStdout );
+ }
+ nbytes = 0;
+ if ( ::ioctl(proc->socketStderr, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager::sigchldHnd() (PID: %d): reading %d bytes of pending data on stderr", proc->pid, nbytes );
+#endif
+ process->socketRead( proc->socketStderr );
+ }
+
+ if ( process->notifyOnExit )
+ emit process->processExited();
+
+ removeProc = TRUE;
+ }
+ } else {
+ int status;
+ if ( ::waitpid( proc->pid, &status, WNOHANG ) == proc->pid ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessManager::sigchldHnd() (PID: %d): process exited (QProcess not available)", proc->pid );
+#endif
+ removeProc = TRUE;
+ }
+ }
+ if ( removeProc ) {
+ QProc *oldproc = proc;
+ proc = procList->next();
+ remove( oldproc );
+ } else {
+ proc = procList->next();
+ }
+ }
+}
+
+#include "qprocess_unix.moc"
+
+
+/***********************************************************************
+ *
+ * QProcessPrivate
+ *
+ **********************************************************************/
+QProcessManager *QProcessPrivate::procManager = 0;
+
+QProcessPrivate::QProcessPrivate()
+{
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessPrivate: Constructor" );
+#endif
+ stdinBufRead = 0;
+
+ notifierStdin = 0;
+ notifierStdout = 0;
+ notifierStderr = 0;
+
+ exitValuesCalculated = FALSE;
+ socketReadCalled = FALSE;
+
+ proc = 0;
+}
+
+QProcessPrivate::~QProcessPrivate()
+{
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcessPrivate: Destructor" );
+#endif
+
+ if ( proc != 0 ) {
+ if ( proc->socketStdin != 0 ) {
+ ::close( proc->socketStdin );
+ proc->socketStdin = 0;
+ }
+ proc->process = 0;
+ }
+
+ while ( !stdinBuf.isEmpty() ) {
+ delete stdinBuf.dequeue();
+ }
+ delete notifierStdin;
+ delete notifierStdout;
+ delete notifierStderr;
+}
+
+/*
+ Closes all open sockets in the child process that are not needed by the child
+ process. Otherwise one child may have an open socket on standard input, etc.
+ of another child.
+*/
+void QProcessPrivate::closeOpenSocketsForChild()
+{
+ if ( procManager != 0 ) {
+ if ( procManager->sigchldFd[0] != 0 )
+ ::close( procManager->sigchldFd[0] );
+ if ( procManager->sigchldFd[1] != 0 )
+ ::close( procManager->sigchldFd[1] );
+
+ // close also the sockets from other QProcess instances
+ QProc *proc;
+ for ( proc=procManager->procList->first(); proc!=0; proc=procManager->procList->next() ) {
+ ::close( proc->socketStdin );
+ ::close( proc->socketStdout );
+ ::close( proc->socketStderr );
+ }
+ }
+}
+
+void QProcessPrivate::newProc( pid_t pid, QProcess *process )
+{
+ proc = new QProc( pid, process );
+ if ( procManager == 0 ) {
+ procManager = new QProcessManager;
+ qprocess_cleanup_procmanager.add( &procManager );
+ }
+ // the QProcessManager takes care of deleting the QProc instances
+ procManager->append( proc );
+}
+
+/***********************************************************************
+ *
+ * sigchld handler callback
+ *
+ **********************************************************************/
+QT_SIGNAL_RETTYPE qt_C_sigchldHnd( QT_SIGNAL_ARGS )
+{
+ if ( QProcessPrivate::procManager == 0 )
+ return;
+ if ( QProcessPrivate::procManager->sigchldFd[0] == 0 )
+ return;
+
+ char a = 1;
+ ::write( QProcessPrivate::procManager->sigchldFd[0], &a, sizeof(a) );
+}
+
+
+/***********************************************************************
+ *
+ * QProcess
+ *
+ **********************************************************************/
+/*!
+ This private class does basic initialization.
+*/
+void QProcess::init()
+{
+ d = new QProcessPrivate();
+ exitStat = 0;
+ exitNormal = FALSE;
+}
+
+/*!
+ This private class resets the process variables, etc. so that it can be used
+ for another process to start.
+*/
+void QProcess::reset()
+{
+ delete d;
+ d = new QProcessPrivate();
+ exitStat = 0;
+ exitNormal = FALSE;
+ d->bufStdout.resize( 0 );
+ d->bufStderr.resize( 0 );
+}
+
+QByteArray* QProcess::bufStdout()
+{
+ if ( d->proc && d->proc->socketStdout ) {
+ // ### can this cause a blocking behaviour (maybe do a ioctl() to see
+ // if data is available)?
+ socketRead( d->proc->socketStdout );
+ }
+ return &d->bufStdout;
+}
+
+QByteArray* QProcess::bufStderr()
+{
+ if ( d->proc && d->proc->socketStderr ) {
+ // ### can this cause a blocking behaviour (maybe do a ioctl() to see
+ // if data is available)?
+ socketRead( d->proc->socketStderr );
+ }
+ return &d->bufStderr;
+}
+
+void QProcess::consumeBufStdout( int consume )
+{
+ uint n = d->bufStdout.size();
+ if ( consume==-1 || (uint)consume >= n ) {
+ d->bufStdout.resize( 0 );
+ } else {
+ QByteArray tmp( n - consume );
+ memcpy( tmp.data(), d->bufStdout.data()+consume, n-consume );
+ d->bufStdout = tmp;
+ }
+}
+
+void QProcess::consumeBufStderr( int consume )
+{
+ uint n = d->bufStderr.size();
+ if ( consume==-1 || (uint)consume >= n ) {
+ d->bufStderr.resize( 0 );
+ } else {
+ QByteArray tmp( n - consume );
+ memcpy( tmp.data(), d->bufStderr.data()+consume, n-consume );
+ d->bufStderr = tmp;
+ }
+}
+
+/*!
+ Destroys the class.
+
+ If the process is running, it is NOT terminated! Standard input, standard
+ output and standard error of the process are closed.
+
+ You can connect the destroyed() signal to the kill() slot, if you want the
+ process to be terminated automatically when the class is destroyed.
+
+ \sa tryTerminate() kill()
+*/
+QProcess::~QProcess()
+{
+ delete d;
+}
+
+/*!
+ Tries to run a process for the command and arguments that were specified with
+ setArguments(), addArgument() or that were specified in the constructor. The
+ command is searched in the path for executable programs; you can also use an
+ absolute path to the command.
+
+ If \a env is null, then the process is started with the same environment as
+ the starting process. If \a env is non-null, then the values in the
+ stringlist are interpreted as environment setttings of the form \c
+ {key=value} and the process is started in these environment settings. For
+ convenience, there is a small exception to this rule: under Unix, if \a env
+ does not contain any settings for the environment variable \c
+ LD_LIBRARY_PATH, then this variable is inherited from the starting process;
+ under Windows the same applies for the enverionment varialbe \c PATH.
+
+ Returns TRUE if the process could be started, otherwise FALSE.
+
+ You can write data to standard input of the process with
+ writeToStdin(), you can close standard input with closeStdin() and you can
+ terminate the process tryTerminate() resp. kill().
+
+ You can call this function even when there already is a running
+ process in this object. In this case, QProcess closes standard input
+ of the old process and deletes pending data, i.e., you loose all
+ control over that process, but the process is not terminated. This applies
+ also if the process could not be started. (On operating systems that have
+ zombie processes, Qt will also wait() on the old process.)
+
+ \sa launch() closeStdin()
+*/
+bool QProcess::start( QStringList *env )
+{
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::start()" );
+#endif
+ reset();
+
+ int sStdin[2];
+ int sStdout[2];
+ int sStderr[2];
+
+ // open sockets for piping
+ if ( (comms & Stdin) && ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStdin ) == -1 ) {
+ return FALSE;
+ }
+ if ( (comms & Stderr) && ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStderr ) == -1 ) {
+ return FALSE;
+ }
+ if ( (comms & Stdout) && ::socketpair( AF_UNIX, SOCK_STREAM, 0, sStdout ) == -1 ) {
+ return FALSE;
+ }
+
+ // the following pipe is only used to determine if the process could be
+ // started
+ int fd[2];
+ if ( pipe( fd ) < 0 ) {
+ // non critical error, go on
+ fd[0] = 0;
+ fd[1] = 0;
+ }
+
+ // construct the arguments for exec
+ QCString *arglistQ = new QCString[ _arguments.count() + 1 ];
+ const char** arglist = new const char*[ _arguments.count() + 1 ];
+ int i = 0;
+ for ( QStringList::Iterator it = _arguments.begin(); it != _arguments.end(); ++it ) {
+ arglistQ[i] = (*it).local8Bit();
+ arglist[i] = arglistQ[i];
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::start(): arg %d = %s", i, arglist[i] );
+#endif
+ i++;
+ }
+ arglist[i] = 0;
+
+ // Must make sure signal handlers are installed before exec'ing
+ // in case the process exits quickly.
+ if ( d->procManager == 0 ) {
+ d->procManager = new QProcessManager;
+ qprocess_cleanup_procmanager.add( &d->procManager );
+ }
+
+ // fork and exec
+ QApplication::flushX();
+ pid_t pid = fork();
+ if ( pid == 0 ) {
+ // child
+ d->closeOpenSocketsForChild();
+ if ( comms & Stdin ) {
+ ::close( sStdin[1] );
+ ::dup2( sStdin[0], STDIN_FILENO );
+ }
+ if ( comms & Stdout ) {
+ ::close( sStdout[0] );
+ ::dup2( sStdout[1], STDOUT_FILENO );
+ }
+ if ( comms & Stderr ) {
+ ::close( sStderr[0] );
+ ::dup2( sStderr[1], STDERR_FILENO );
+ }
+ if ( comms & DupStderr ) {
+ ::dup2( STDOUT_FILENO, STDERR_FILENO );
+ }
+#ifndef QT_NO_DIR
+ ::chdir( workingDir.absPath().latin1() );
+#endif
+ if ( fd[0] )
+ ::close( fd[0] );
+ if ( fd[1] )
+ ::fcntl( fd[1], F_SETFD, FD_CLOEXEC ); // close on exec shows sucess
+
+ if ( env == 0 ) { // inherit environment and start process
+ ::execvp( arglist[0], (char*const*)arglist ); // ### cast not nice
+ } else { // start process with environment settins as specified in env
+ // construct the environment for exec
+ int numEntries = env->count();
+ bool setLibraryPath =
+ env->grep( QRegExp( "^LD_LIBRARY_PATH=" ) ).isEmpty() &&
+ getenv( "LD_LIBRARY_PATH" ) != 0;
+ if ( setLibraryPath )
+ numEntries++;
+ QCString *envlistQ = new QCString[ numEntries + 1 ];
+ const char** envlist = new const char*[ numEntries + 1 ];
+ int i = 0;
+ if ( setLibraryPath ) {
+ envlistQ[i] = QString( "LD_LIBRARY_PATH=%1" ).arg( getenv( "LD_LIBRARY_PATH" ) ).local8Bit();
+ envlist[i] = envlistQ[i];
+ i++;
+ }
+ for ( QStringList::Iterator it = env->begin(); it != env->end(); ++it ) {
+ envlistQ[i] = (*it).local8Bit();
+ envlist[i] = envlistQ[i];
+ i++;
+ }
+ envlist[i] = 0;
+
+ // look for the executable in the search path
+ if ( _arguments.count()>0 && getenv("PATH")!=0 ) {
+ QString command = _arguments[0];
+ if ( !command.contains( '/' ) ) {
+ QStringList pathList = QStringList::split( ':', getenv( "PATH" ) );
+ for (QStringList::Iterator it = pathList.begin(); it != pathList.end(); ++it ) {
+ QString dir = *it;
+#ifdef Q_OS_MACX
+ if(QFile::exists(dir + "/" + command + ".app")) //look in a bundle
+ dir += "/" + command + ".app/Contents/MacOS";
+#endif
+#ifndef QT_NO_DIR
+ QFileInfo fileInfo( dir, command );
+#else
+ QFileInfo fileInfo( dir + "/" + command );
+#endif
+ if ( fileInfo.isExecutable() ) {
+ arglistQ[0] = fileInfo.filePath().local8Bit();
+ arglist[0] = arglistQ[0];
+ break;
+ }
+ }
+ }
+ }
+ ::execve( arglist[0], (char*const*)arglist, (char*const*)envlist ); // ### casts not nice
+ }
+ if ( fd[1] ) {
+ char buf = 0;
+ ::write( fd[1], &buf, 1 );
+ ::close( fd[1] );
+ }
+ ::exit( -1 );
+ } else if ( pid == -1 ) {
+ // error forking
+ goto error;
+ }
+
+ // test if exec was successful
+ if ( fd[1] )
+ ::close( fd[1] );
+ if ( fd[0] ) {
+ char buf;
+ for ( ;; ) {
+ int n = ::read( fd[0], &buf, 1 );
+ if ( n==1 ) {
+ // socket was not closed => error
+ d->proc = 0;
+ goto error;
+ } else if ( n==-1 ) {
+ if ( errno==EAGAIN || errno==EINTR )
+ // try it again
+ continue;
+ }
+ break;
+ }
+ ::close( fd[0] );
+ }
+
+ d->newProc( pid, this );
+
+ if ( comms & Stdin ) {
+ ::close( sStdin[0] );
+ d->proc->socketStdin = sStdin[1];
+ d->notifierStdin = new QSocketNotifier( sStdin[1], QSocketNotifier::Write );
+ connect( d->notifierStdin, SIGNAL(activated(int)),
+ this, SLOT(socketWrite(int)) );
+ // setup notifiers for the sockets
+ if ( !d->stdinBuf.isEmpty() ) {
+ d->notifierStdin->setEnabled( TRUE );
+ }
+ }
+ if ( comms & Stdout ) {
+ ::close( sStdout[1] );
+ d->proc->socketStdout = sStdout[0];
+ d->notifierStdout = new QSocketNotifier( sStdout[0], QSocketNotifier::Read );
+ connect( d->notifierStdout, SIGNAL(activated(int)),
+ this, SLOT(socketRead(int)) );
+ if ( ioRedirection )
+ d->notifierStdout->setEnabled( TRUE );
+ }
+ if ( comms & Stderr ) {
+ ::close( sStderr[1] );
+ d->proc->socketStderr = sStderr[0];
+ d->notifierStderr = new QSocketNotifier( sStderr[0], QSocketNotifier::Read );
+ connect( d->notifierStderr, SIGNAL(activated(int)),
+ this, SLOT(socketRead(int)) );
+ if ( ioRedirection )
+ d->notifierStderr->setEnabled( TRUE );
+ }
+
+ // cleanup and return
+ delete[] arglistQ;
+ delete[] arglist;
+ return TRUE;
+
+error:
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::start(): error starting process" );
+#endif
+ if ( d->procManager )
+ d->procManager->cleanup();
+ if ( comms & Stdin ) {
+ ::close( sStdin[1] );
+ ::close( sStdin[0] );
+ }
+ if ( comms & Stdout ) {
+ ::close( sStdout[0] );
+ ::close( sStdout[1] );
+ }
+ if ( comms & Stderr ) {
+ ::close( sStderr[0] );
+ ::close( sStderr[1] );
+ }
+ ::close( fd[0] );
+ ::close( fd[1] );
+ delete[] arglistQ;
+ delete[] arglist;
+ return FALSE;
+}
+
+
+/*!
+ Asks the process to terminate. Processes can ignore this wish. If you want to
+ be sure that the process really terminates, you must use kill() instead.
+
+ The slot returns immediately: it does not wait until the process has
+ finished. When the process really exited, the signal processExited() is
+ emitted.
+
+ \sa kill() processExited()
+*/
+void QProcess::tryTerminate() const
+{
+ if ( d->proc != 0 )
+ ::kill( d->proc->pid, SIGTERM );
+}
+
+/*!
+ Terminates the process. This is not a safe way to end a process since the
+ process will not be able to do cleanup. tryTerminate() is a safer way to do
+ it, but processes might ignore a tryTerminate().
+
+ The nice way to end a process and to be sure that it is finished, is doing
+ something like this:
+ \code
+ process->tryTerminate();
+ QTimer::singleShot( 5000, process, SLOT( kill() ) );
+ \endcode
+
+ This tries to terminate the process the nice way. If the process is still
+ running after 5 seconds, it terminates the process the hard way. The timeout
+ should be chosen depending on the time the process needs to do all the
+ cleanup: use a higher value if the process is likely to do heavy computation
+ on cleanup.
+
+ The slot returns immediately: it does not wait until the process has
+ finished. When the process really exited, the signal processExited() is
+ emitted.
+
+ \sa tryTerminate() processExited()
+*/
+void QProcess::kill() const
+{
+ if ( d->proc != 0 )
+ ::kill( d->proc->pid, SIGKILL );
+}
+
+/*!
+ Returns TRUE if the process is running, otherwise FALSE.
+
+ \sa normalExit() exitStatus() processExited()
+*/
+bool QProcess::isRunning() const
+{
+ if ( d->exitValuesCalculated ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::isRunning(): FALSE (already computed)" );
+#endif
+ return FALSE;
+ }
+ if ( d->proc == 0 )
+ return FALSE;
+ int status;
+ if ( ::waitpid( d->proc->pid, &status, WNOHANG ) == d->proc->pid )
+ {
+ // compute the exit values
+ QProcess *that = (QProcess*)this; // mutable
+ that->exitNormal = WIFEXITED( status ) != 0;
+ if ( exitNormal ) {
+ that->exitStat = (char)WEXITSTATUS( status );
+ }
+ d->exitValuesCalculated = TRUE;
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::isRunning() (PID: %d): FALSE", d->proc->pid );
+#endif
+ return FALSE;
+ }
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::isRunning() (PID: %d): TRUE", d->proc->pid );
+#endif
+ return TRUE;
+}
+
+/*!
+ Writes the data \a buf to the standard input of the process. The process may
+ or may not read this data.
+
+ This function returns immediately; the QProcess class might write the data at
+ a later point (you have to enter the event loop for that). When all the data
+ is written to the process, the signal wroteToStdin() is emitted. This does
+ not mean that the process really read the data, since this class only detects
+ when it was able to write the data to the operating system.
+
+ \sa wroteToStdin() closeStdin() readStdout() readStderr()
+*/
+void QProcess::writeToStdin( const QByteArray& buf )
+{
+#if defined(QT_QPROCESS_DEBUG)
+// qDebug( "QProcess::writeToStdin(): write to stdin (%d)", d->socketStdin );
+#endif
+ d->stdinBuf.enqueue( new QByteArray(buf) );
+ if ( d->notifierStdin != 0 )
+ d->notifierStdin->setEnabled( TRUE );
+}
+
+
+/*!
+ Closes standard input of the process.
+
+ This function also deletes pending data that is not written to standard input
+ yet.
+
+ \sa wroteToStdin()
+*/
+void QProcess::closeStdin()
+{
+ if ( d->proc == 0 )
+ return;
+ if ( d->proc->socketStdin !=0 ) {
+ while ( !d->stdinBuf.isEmpty() ) {
+ delete d->stdinBuf.dequeue();
+ }
+ delete d->notifierStdin;
+ d->notifierStdin = 0;
+ if ( ::close( d->proc->socketStdin ) != 0 ) {
+ qWarning( "Could not close stdin of child process" );
+ }
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::closeStdin(): stdin (%d) closed", d->proc->socketStdin );
+#endif
+ d->proc->socketStdin = 0;
+ }
+}
+
+
+/*
+ This private slot is called when the process has outputted data to either
+ standard output or standard error.
+*/
+void QProcess::socketRead( int fd )
+{
+ if ( d->socketReadCalled ) {
+ // the slots that are connected to the readyRead...() signals might
+ // trigger a recursive call of socketRead(). Avoid this since you get a
+ // blocking read otherwise.
+ return;
+ }
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::socketRead(): %d", fd );
+#endif
+ if ( fd == 0 )
+ return;
+ const int bufsize = 4096;
+ QByteArray *buffer = 0;
+ uint oldSize;
+ int n;
+ if ( fd == d->proc->socketStdout ) {
+ buffer = &d->bufStdout;
+ } else if ( fd == d->proc->socketStderr ) {
+ buffer = &d->bufStderr;
+ } else {
+ // this case should never happen, but just to be safe
+ return;
+ }
+
+ // read data
+ oldSize = buffer->size();
+ buffer->resize( oldSize + bufsize );
+ n = ::read( fd, buffer->data()+oldSize, bufsize );
+ if ( n > 0 )
+ buffer->resize( oldSize + n );
+ else
+ buffer->resize( oldSize );
+ // eof or error?
+ if ( n == 0 || n == -1 ) {
+ if ( fd == d->proc->socketStdout ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::socketRead(): stdout (%d) closed", fd );
+#endif
+ d->notifierStdout->setEnabled( FALSE );
+ delete d->notifierStdout;
+ d->notifierStdout = 0;
+ ::close( d->proc->socketStdout );
+ d->proc->socketStdout = 0;
+ return;
+ } else if ( fd == d->proc->socketStderr ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::socketRead(): stderr (%d) closed", fd );
+#endif
+ d->notifierStderr->setEnabled( FALSE );
+ delete d->notifierStderr;
+ d->notifierStderr = 0;
+ ::close( d->proc->socketStderr );
+ d->proc->socketStderr = 0;
+ return;
+ }
+ }
+ // read all data that is available
+ while ( n == bufsize ) {
+ oldSize = buffer->size();
+ buffer->resize( oldSize + bufsize );
+ n = ::read( fd, buffer->data()+oldSize, bufsize );
+ if ( n > 0 )
+ buffer->resize( oldSize + n );
+ else
+ buffer->resize( oldSize );
+ }
+
+ d->socketReadCalled = TRUE;
+ if ( fd == d->proc->socketStdout ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::socketRead(): %d bytes read from stdout (%d)",
+ buffer->size()-oldSize, fd );
+#endif
+ emit readyReadStdout();
+ } else if ( fd == d->proc->socketStderr ) {
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::socketRead(): %d bytes read from stderr (%d)",
+ buffer->size()-oldSize, fd );
+#endif
+ emit readyReadStderr();
+ }
+ d->socketReadCalled = FALSE;
+}
+
+
+/*
+ This private slot is called when the process tries to read data from standard
+ input.
+*/
+void QProcess::socketWrite( int fd )
+{
+ if ( fd != d->proc->socketStdin || d->proc->socketStdin == 0 )
+ return;
+ if ( d->stdinBuf.isEmpty() ) {
+ d->notifierStdin->setEnabled( FALSE );
+ return;
+ }
+#if defined(QT_QPROCESS_DEBUG)
+ qDebug( "QProcess::socketWrite(): write to stdin (%d)", fd );
+#endif
+ ssize_t ret = ::write( fd,
+ d->stdinBuf.head()->data() + d->stdinBufRead,
+ d->stdinBuf.head()->size() - d->stdinBufRead );
+ if ( ret > 0 )
+ d->stdinBufRead += ret;
+ if ( d->stdinBufRead == (ssize_t)d->stdinBuf.head()->size() ) {
+ d->stdinBufRead = 0;
+ delete d->stdinBuf.dequeue();
+ if ( wroteToStdinConnected && d->stdinBuf.isEmpty() )
+ emit wroteToStdin();
+ socketWrite( fd );
+ }
+}
+
+/*!
+ \internal
+ Flushes standard input. This is useful if you want to use QProcess in a
+ synchronous manner.
+
+ This function should probably go into the public API.
+*/
+void QProcess::flushStdin()
+{
+ socketWrite( d->proc->socketStdin );
+}
+
+/*
+ This private slot is only used under Windows (but moc does not know about #if
+ defined()).
+*/
+void QProcess::timeout()
+{
+}
+
+
+/*
+ This private function is used by connectNotify() and disconnectNotify() to
+ change the value of ioRedirection (and related behaviour)
+*/
+void QProcess::setIoRedirection( bool value )
+{
+ ioRedirection = value;
+ if ( ioRedirection ) {
+ if ( d->notifierStdout )
+ d->notifierStdout->setEnabled( TRUE );
+ if ( d->notifierStderr )
+ d->notifierStderr->setEnabled( TRUE );
+ } else {
+ if ( d->notifierStdout )
+ d->notifierStdout->setEnabled( FALSE );
+ if ( d->notifierStderr )
+ d->notifierStderr->setEnabled( FALSE );
+ }
+}
+
+/*
+ This private function is used by connectNotify() and
+ disconnectNotify() to change the value of notifyOnExit (and related
+ behaviour)
+*/
+void QProcess::setNotifyOnExit( bool value )
+{
+ notifyOnExit = value;
+}
+
+/*
+ This private function is used by connectNotify() and disconnectNotify() to
+ change the value of wroteToStdinConnected (and related behaviour)
+*/
+void QProcess::setWroteStdinConnected( bool value )
+{
+ wroteToStdinConnected = value;
+}
+
+/*! \enum QProcess::PID
+ \internal
+*/
+/*!
+ Returns platform dependent information about the process. This can be used
+ together with platform specific system calls.
+
+ Under Unix the return value is the PID of the process, or -1 if no process is
+ belonging to this object.
+
+ Under Windows it is a pointer to the \c PROCESS_INFORMATION struct, or 0 if
+ no process is belonging to this object.
+*/
+QProcess::PID QProcess::processIdentifier()
+{
+ if ( d->proc == 0 )
+ return -1;
+ return d->proc->pid;
+}
+
+#endif // QT_NO_PROCESS
diff --git a/library/quickexec.cpp b/library/quickexec.cpp
new file mode 100644
index 0000000..f3b5089
--- a/dev/null
+++ b/library/quickexec.cpp
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#define QUICKEXEC "/tmp/.quickexec"
+
+int quickexecv( const char *path, const char *argv[] )
+{
+ int fd = open( QUICKEXEC, O_WRONLY );
+ if ( fd == -1 ) {
+ perror( "quickexec pipe" );
+ return -1;
+ }
+ write( fd, path, strlen( path )+1 );
+ const char **s = argv;
+ while( *s ) {
+ write( fd, *s, strlen( *s )+1 );
+ ++s;
+ }
+ close(fd);
+ return 0;
+}
+
+int quickexec( const char *path, const char *, ...)
+{
+ int fd = open( QUICKEXEC, O_WRONLY );
+ if ( fd == -1 ) {
+ perror( "quickexec pipe" );
+ return -1;
+ }
+ const char** s = &path;
+ do {
+ write( fd, *s, strlen( *s )+1 );
+ } while ( *(++s) );
+
+ close( fd );
+
+ return 0;
+}
diff --git a/library/quickexec_p.h b/library/quickexec_p.h
new file mode 100644
index 0000000..79f58af
--- a/dev/null
+++ b/library/quickexec_p.h
@@ -0,0 +1,17 @@
+#ifndef QUICKEXEC_H
+#define QUICKEXEC_H
+
+#define HAVE_QUICKEXEC
+/*
+ A special version of execl that opens a shared library and executes the main() function in
+ the lib. Requires the quickexec daemon to run.
+
+ Note: You do not need to call fork() before calling quickexec, the function actually returns.
+
+ WARNING: path has to be a shared library, otherwise quickexec will hang
+*/
+
+extern int quickexecl( const char *path, const char *, ...);
+extern int quickexecv( const char *path, const char *argv[] );
+
+#endif
diff --git a/library/quuid.cpp b/library/quuid.cpp
new file mode 100644
index 0000000..fb4387c
--- a/dev/null
+++ b/library/quuid.cpp
@@ -0,0 +1,146 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "quuid.h"
+
+/*!
+ \class QUuid quuid.h
+ \brief The QUuid class defines a Universally Unique Identifier (UUID).
+
+ This class is temporarily copied from Qt 3.0.
+*/
+
+/*!
+ \fn QUuid::QUuid()
+
+ Creates the null UUID {00000000-0000-0000-0000-000000000000}.
+*/
+
+/*!
+ \fn QUuid::QUuid( uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8 )
+
+ Creates an UUID with the value specified by the parameters, \a l, \a
+ w1, \a w2, \a b1, \a b2, \a b3, \a b4, \a b5, \a b6, \a b7, \a b8.
+
+ Example:
+ \code
+ // {67C8770B-44F1-410A-AB9A-F9B5446F13EE}
+ QUuid IID_MyInterface( 0x67c8770b, 0x44f1, 0x410a, 0xab, 0x9a, 0xf9, 0xb5, 0x44, 0x6f, 0x13, 0xee )
+ \endcode
+*/
+
+/*!
+ \fn QUuid::QUuid( const QUuid &orig )
+
+ Creates a copy of the QUuid \a orig.
+*/
+#ifndef QT_NO_QUUID_STRING
+/*!
+ Creates a QUuid object from the string \a text. Right now, the function
+ can only convert the format {12345678-1234-1234-1234-123456789ABC} and
+ will create the null UUID when the conversion fails.
+*/
+QUuid::QUuid( const QString &text )
+{
+ bool ok;
+ QString temp = text.upper();
+
+ data1 = temp.mid( 1, 8 ).toULong( &ok, 16 );
+ if ( !ok ) {
+ *this = QUuid();
+ return;
+ }
+
+ data2 = temp.mid( 10, 4 ).toUInt( &ok, 16 );
+ if ( !ok ) {
+ *this = QUuid();
+ return;
+ }
+ data3 = temp.mid( 15, 4 ).toUInt( &ok, 16 );
+ if ( !ok ) {
+ *this = QUuid();
+ return;
+ }
+ data4[0] = temp.mid( 20, 2 ).toUInt( &ok, 16 );
+ if ( !ok ) {
+ *this = QUuid();
+ return;
+ }
+ data4[1] = temp.mid( 22, 2 ).toUInt( &ok, 16 );
+ if ( !ok ) {
+ *this = QUuid();
+ return;
+ }
+ for ( int i = 2; i<8; i++ ) {
+ data4[i] = temp.mid( 25 + (i-2)*2, 2 ).toUShort( &ok, 16 );
+ if ( !ok ) {
+ *this = QUuid();
+ return;
+ }
+ }
+}
+#endif
+/*!
+ \fn QUuid QUuid::operator=(const QUuid &uuid )
+
+ Assigns the value of \a uuid to this QUuid object.
+*/
+
+/*!
+ \fn bool QUuid::operator==(const QUuid &other) const
+
+ Returns TRUE if this QUuid and the \a other QUuid are identical, otherwise returns FALSE.
+*/
+
+/*!
+ \fn bool QUuid::operator!=(const QUuid &other) const
+
+ Returns TRUE if this QUuid and the \a other QUuid are different, otherwise returns FALSE.
+*/
+#ifndef QT_NO_QUUID_STRING
+/*!
+ QString QUuid::toString() const
+
+ Returns a string in {12345678-1234-1234-1234-123456789ABC} format.
+*/
+QString QUuid::toString() const
+{
+ QString result;
+
+ result = "{" + QString::number( data1, 16 ).rightJustify( 8, '0' ) + "-";
+ result += QString::number( (int)data2, 16 ).rightJustify( 4, '0' ) + "-";
+ result += QString::number( (int)data3, 16 ).rightJustify( 4, '0' ) + "-";
+ result += QString::number( (int)data4[0], 16 ).rightJustify( 2, '0' );
+ result += QString::number( (int)data4[1], 16 ).rightJustify( 2, '0' ) + "-";
+ for ( int i = 2; i < 8; i++ )
+ result += QString::number( (int)data4[i], 16 ).rightJustify( 2, '0' );
+
+ return result + "}";
+}
+#endif
+/*!
+ Returns TRUE if this is the null UUID {00000000-0000-0000-0000-000000000000}, otherwise returns FALSE.
+*/
+bool QUuid::isNull() const
+{
+ return data4[0] == 0 && data4[1] == 0 && data4[2] == 0 && data4[3] == 0 &&
+ data4[4] == 0 && data4[5] == 0 && data4[6] == 0 && data4[7] == 0 &&
+ data1 == 0 && data2 == 0 && data3 == 0;
+}
diff --git a/library/quuid.h b/library/quuid.h
new file mode 100644
index 0000000..4f7a720
--- a/dev/null
+++ b/library/quuid.h
@@ -0,0 +1,142 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef QUUID_H
+#define QUUID_H
+
+#ifndef QT_H
+#include <qstring.h>
+#endif // QT_H
+
+#include <memory.h>
+
+#if defined(Q_OS_WIN32)
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+typedef struct _GUID
+{
+ ulong Data1;
+ ushort Data2;
+ ushort Data3;
+ uchar Data4[ 8 ];
+} GUID;
+#endif
+#endif
+
+#if defined( Q_WS_QWS ) && !defined( UUID_H_INCLUDED )
+typedef unsigned char uuid_t[16];
+#endif
+
+struct Q_EXPORT QUuid
+{
+ QUuid()
+ {
+ memset( this, 0, sizeof(QUuid) );
+ }
+ QUuid( uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8 )
+ {
+ data1 = l;
+ data2 = w1;
+ data3 = w2;
+ data4[0] = b1;
+ data4[1] = b2;
+ data4[2] = b3;
+ data4[3] = b4;
+ data4[4] = b5;
+ data4[5] = b6;
+ data4[6] = b7;
+ data4[7] = b8;
+ }
+ QUuid( const QUuid &uuid )
+ {
+ memcpy( this, &uuid, sizeof(QUuid) );
+ }
+#ifndef QT_NO_QUUID_STRING
+ QUuid( const QString & );
+ QString toString() const;
+#endif
+ bool isNull() const;
+
+ QUuid &operator=(const QUuid &orig )
+ {
+ memcpy( this, &orig, sizeof(QUuid) );
+ return *this;
+ }
+
+ bool operator==(const QUuid &orig ) const
+ {
+ return !memcmp( this, &orig, sizeof(QUuid) );
+ }
+
+ bool operator!=(const QUuid &orig ) const
+ {
+ return !( *this == orig );
+ }
+
+#if defined(Q_OS_WIN32)
+ // On Windows we have a type GUID that is used by the platform API, so we
+ // provide convenience operators to cast from and to this type.
+ QUuid( const GUID &guid )
+ {
+ memcpy( this, &guid, sizeof(GUID) );
+ }
+
+ QUuid &operator=(const GUID &orig )
+ {
+ memcpy( this, &orig, sizeof(QUuid) );
+ return *this;
+ }
+
+ operator GUID() const
+ {
+ GUID guid = { data1, data2, data3, { data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7] } };
+ return guid;
+ }
+
+ bool operator==( const GUID &guid ) const
+ {
+ return !memcmp( this, &guid, sizeof(QUuid) );
+ }
+
+ bool operator!=( const GUID &guid ) const
+ {
+ return !( *this == guid );
+ }
+#endif
+#if defined (Q_WS_QWS)
+ QUuid( uuid_t uuid )
+ {
+ memcpy( this, &uuid, sizeof(uuid_t) );
+ }
+
+ QUuid &operator=(const uuid_t &orig )
+ {
+ memcpy( this, &orig, sizeof(uuid_t) );
+ return *this;
+ }
+#endif
+
+ ulong data1;
+ ushort data2;
+ ushort data3;
+ uchar data4[ 8 ];
+};
+
+#endif //QUUID_H
diff --git a/library/resource.cpp b/library/resource.cpp
new file mode 100644
index 0000000..dc19880
--- a/dev/null
+++ b/library/resource.cpp
@@ -0,0 +1,136 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qpeapplication.h"
+#include "resource.h"
+#include <qdir.h>
+#include <qfile.h>
+#include <qregexp.h>
+#include <qpixmapcache.h>
+#include <qpainter.h>
+
+#include "inlinepics_p.h"
+
+/*!
+ \class Resource resource.h
+ \brief The Resource class provides access to named resources.
+
+ The resources may be provided from files or other sources.
+*/
+
+/*!
+ \fn Resource::Resource()
+ \internal
+*/
+
+/*!
+ Returns the QPixmap named \a pix. You should avoid including
+ any filename type extension (eg. .png, .xpm).
+*/
+QPixmap Resource::loadPixmap( const QString &pix )
+{
+ QPixmap pm;
+ QString key="QPE_"+pix;
+ if ( !QPixmapCache::find(key,pm) ) {
+ pm.convertFromImage(loadImage(pix));
+ QPixmapCache::insert(key,pm);
+ }
+ return pm;
+}
+
+/*!
+ Returns the QBitmap named \a pix. You should avoid including
+ any filename type extension (eg. .png, .xpm).
+*/
+QBitmap Resource::loadBitmap( const QString &pix )
+{
+ QBitmap bm;
+ bm = loadPixmap(pix);
+ return bm;
+}
+
+/*!
+ Returns the filename of a pixmap named \a pix. You should avoid including
+ any filename type extension (eg. .png, .xpm).
+
+ Normally you will use loadPixmap() rather than this function.
+*/
+QString Resource::findPixmap( const QString &pix )
+{
+ QString picsPath = QPEApplication::qpeDir() + "pics/";
+
+ if ( QFile( picsPath + pix + ".png").exists() )
+ return picsPath + pix + ".png";
+ else if ( QFile( picsPath + pix + ".xpm").exists() )
+ return picsPath + pix + ".xpm";
+ else if ( QFile( picsPath + pix ).exists() )
+ return picsPath + pix;
+
+ //qDebug("Cannot find pixmap: %s", pix.latin1());
+ return QString();
+}
+
+/*!
+ Returns a sound file for a sound named \a name.
+ You should avoid including any filename type extension (eg. .wav, .au, .mp3).
+*/
+QString Resource::findSound( const QString &name )
+{
+ QString picsPath = QPEApplication::qpeDir() + "sounds/";
+
+ QString result;
+ if ( QFile( (result = picsPath + name + ".wav") ).exists() )
+ return result;
+
+ return QString();
+}
+
+/*!
+ Returns a list of all sound names.
+*/
+QStringList Resource::allSounds()
+{
+ QDir resourcedir( QPEApplication::qpeDir() + "sounds/", "*.wav" );
+ QStringList entries = resourcedir.entryList();
+ QStringList result;
+ for (QStringList::Iterator i=entries.begin(); i != entries.end(); ++i)
+ result.append((*i).replace(QRegExp("\\.wav"),""));
+ return result;
+}
+
+/*!
+ Returns the QImage named \a name. You should avoid including
+ any filename type extension (eg. .png, .xpm).
+*/
+QImage Resource::loadImage( const QString &name)
+{
+ QImage img = qembed_findImage(name.latin1());
+ if ( img.isNull() )
+ return QImage(findPixmap(name));
+ return img;
+}
+
+/*!
+ \fn QIconSet Resource::loadIconSet( const QString &name )
+
+ Returns a QIconSet for the pixmap named \a name. A disabled icon is
+ generated that conforms to the Qtopia look & feel. You should avoid
+ including any filename type extension (eg. .png, .xpm).
+*/
diff --git a/library/resource.h b/library/resource.h
new file mode 100644
index 0000000..982c58a
--- a/dev/null
+++ b/library/resource.h
@@ -0,0 +1,80 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PIXMAPLOADER_H
+#define PIXMAPLOADER_H
+
+#include <qimage.h>
+#include <qbitmap.h>
+#include <qiconset.h>
+#include <qstringlist.h>
+
+class Resource
+{
+public:
+ Resource() {}
+
+ static QImage loadImage( const QString &name);
+
+ static QPixmap loadPixmap( const QString &name );
+ static QBitmap loadBitmap( const QString &name );
+ static QString findPixmap( const QString &name );
+
+ static QIconSet loadIconSet( const QString &name );
+
+ static QString findSound( const QString &name );
+ static QStringList allSounds();
+};
+
+// Inline for compatibility with SHARP ROMs
+inline QIconSet Resource::loadIconSet( const QString &pix )
+{
+ QImage img = loadImage( pix );
+ QPixmap pm;
+ pm.convertFromImage( img );
+ QIconSet is( pm );
+ QIconSet::Size size = pm.width() <= 22 ? QIconSet::Small : QIconSet::Large;
+
+ QPixmap dpm = loadPixmap( pix + "_disabled" );
+
+#ifndef QT_NO_DEPTH_32 // have alpha-blended pixmaps
+ if ( dpm.isNull() ) {
+ QImage dimg( img.width(), img.height(), 32 );
+ for ( int y = 0; y < img.height(); y++ ) {
+ for ( int x = 0; x < img.width(); x++ ) {
+ QRgb p = img.pixel( x, y );
+ uint a = (p & 0xff000000) / 3;
+ p = (p & 0x00ffffff) | (a & 0xff000000);
+ dimg.setPixel( x, y, p );
+ }
+ }
+
+ dimg.setAlphaBuffer( TRUE );
+ dpm.convertFromImage( dimg );
+ }
+#endif
+
+ if ( !dpm.isNull() )
+ is.setPixmap( dpm, size, QIconSet::Disabled );
+
+ return is;
+}
+
+
+#endif
diff --git a/library/sound.cpp b/library/sound.cpp
new file mode 100644
index 0000000..373fd4c
--- a/dev/null
+++ b/library/sound.cpp
@@ -0,0 +1,173 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/resource.h>
+#include <qpe/sound.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qsound.h>
+#include <qfile.h>
+
+#ifndef QT_NO_SOUND
+static int WAVsoundDuration(const QString& filename)
+{
+ // bad solution
+
+ // most of this is copied from qsoundqss.cpp
+
+ QFile input(filename);
+ if ( !input.open(IO_ReadOnly) )
+ return 0;
+
+ struct QRiffChunk {
+ char id[4];
+ Q_UINT32 size;
+ char data[4/*size*/];
+ } chunk;
+
+ struct {
+ Q_INT16 formatTag;
+ Q_INT16 channels;
+ Q_INT32 samplesPerSec;
+ Q_INT32 avgBytesPerSec;
+ Q_INT16 blockAlign;
+ Q_INT16 wBitsPerSample;
+ } chunkdata;
+
+ int total = 0;
+
+ while(1) {
+ // Keep reading chunks...
+ const int n = sizeof(chunk)-sizeof(chunk.data);
+ if ( input.readBlock((char*)&chunk,n) != n )
+ break;
+ if ( qstrncmp(chunk.id,"data",4) == 0 ) {
+ total += chunkdata.avgBytesPerSec ?
+ chunk.size * 1000 / chunkdata.avgBytesPerSec : 0;
+//qDebug("%d bytes of PCM (%dms)", chunk.size,chunkdata.avgBytesPerSec ? chunk.size * 1000 / chunkdata.avgBytesPerSec : 0);
+ input.at(input.at()+chunk.size-4);
+ } else if ( qstrncmp(chunk.id,"RIFF",4) == 0 ) {
+ char d[4];
+ if ( input.readBlock(d,4) != 4 )
+ return 0;
+ if ( qstrncmp(d,"WAVE",4) != 0 ) {
+ // skip
+//qDebug("skip %.4s RIFF chunk",d);
+ if ( chunk.size < 10000000 )
+ (void)input.at(input.at()+chunk.size-4);
+ }
+ } else if ( qstrncmp(chunk.id,"fmt ",4) == 0 ) {
+ if ( input.readBlock((char*)&chunkdata,sizeof(chunkdata)) != sizeof(chunkdata) )
+ return 0;
+#define WAVE_FORMAT_PCM 1
+ if ( chunkdata.formatTag != WAVE_FORMAT_PCM ) {
+ //qDebug("WAV file: UNSUPPORTED FORMAT %d",chunkdata.formatTag);
+ return 0;
+ }
+ } else {
+//qDebug("skip %.4s chunk",chunk.id);
+ // ignored chunk
+ if ( chunk.size < 10000000 )
+ (void)input.at(input.at()+chunk.size);
+ }
+ }
+
+//qDebug("%dms",total);
+ return total;
+}
+
+class SoundData : public QSound {
+public:
+ SoundData(const QString& name) :
+ QSound(Resource::findSound(name)),
+ filename(Resource::findSound(name))
+ {
+ }
+
+ void playLoop()
+ {
+ // needs server support
+
+ int ms = WAVsoundDuration(filename);
+ if ( ms )
+ startTimer(ms > 50 ? ms-50 : 0); // 50 for latency
+ play();
+ }
+
+ void timerEvent(QTimerEvent*)
+ {
+ play();
+ }
+
+private:
+ QString filename;
+};
+#endif
+
+Sound::Sound(const QString& name)
+{
+#ifndef QT_NO_SOUND
+ d = new SoundData(name);
+#endif
+}
+
+Sound::~Sound()
+{
+#ifndef QT_NO_SOUND
+ delete d;
+#endif
+}
+
+void Sound::play()
+{
+#ifndef QT_NO_SOUND
+ d->killTimers();
+ d->play();
+#endif
+}
+
+void Sound::playLoop()
+{
+#ifndef QT_NO_SOUND
+ d->killTimers();
+ d->playLoop();
+#endif
+}
+
+void Sound::stop()
+{
+#ifndef QT_NO_SOUND
+ d->killTimers();
+#endif
+}
+
+
+void Sound::soundAlarm()
+{
+#ifdef QT_QWS_CUSTOM
+# ifndef QT_NO_COP
+ QCopEnvelope( "QPE/TaskBar", "soundAlarm()" );
+# endif
+#else
+# ifndef QT_NO_SOUND
+ QSound::play(Resource::findSound("alarm"));
+# endif
+#endif
+}
diff --git a/library/sound.h b/library/sound.h
new file mode 100644
index 0000000..98fae34
--- a/dev/null
+++ b/library/sound.h
@@ -0,0 +1,43 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef SOUND_H
+#define SOUND_H
+
+class QString;
+class SoundData;
+
+class Sound {
+public:
+ Sound(const QString& name);
+ ~Sound();
+
+ void play();
+ void playLoop();
+ void stop();
+
+ static void soundAlarm();
+ //static void soundClick();
+ //static void soundTap();
+
+private:
+ SoundData* d;
+};
+
+#endif
diff --git a/library/storage.cpp b/library/storage.cpp
new file mode 100644
index 0000000..bd34a5f
--- a/dev/null
+++ b/library/storage.cpp
@@ -0,0 +1,188 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/storage.h>
+#ifdef QT_QWS_CUSTOM
+#include <qpe/custom.h>
+#endif
+
+#include <qtimer.h>
+#include <qcopchannel_qws.h>
+
+#include <stdio.h>
+
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+#include <sys/vfs.h>
+#include <mntent.h>
+#endif
+
+#include <qstringlist.h>
+
+static bool isCF(const QString& m)
+{
+ FILE* f = fopen("/var/run/stab", "r");
+ if (!f) f = fopen("/var/state/pcmcia/stab", "r");
+ if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
+ if ( f ) {
+ char line[1024];
+ char devtype[80];
+ char devname[80];
+ while ( fgets( line, 1024, f ) ) {
+ // 0 ide ide-cs 0 hda 3 0
+ if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )
+ {
+ if ( QString(devtype) == "ide" && m.find(devname)>0 ) {
+ fclose(f);
+ return TRUE;
+ }
+ }
+ }
+ fclose(f);
+ }
+ return FALSE;
+}
+
+StorageInfo::StorageInfo( QObject *parent )
+ : QObject( parent )
+{
+ mFileSystems.setAutoDelete( TRUE );
+ channel = new QCopChannel( "QPE/Card", this );
+ connect( channel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(cardMessage( const QCString &, const QByteArray &)) );
+ update();
+}
+
+const FileSystem *StorageInfo::fileSystemOf( const QString &filename )
+{
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
+ if ( filename.startsWith( (*i)->path() ) )
+ return (*i);
+ }
+ return 0;
+}
+
+
+void StorageInfo::cardMessage( const QCString& msg, const QByteArray& )
+{
+ if ( msg == "mtabChanged()" )
+ update();
+}
+
+void StorageInfo::update()
+{
+ //qDebug("StorageInfo::updating");
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+ struct mntent *me;
+ FILE *mntfp = setmntent( "/etc/mtab", "r" );
+
+ QStringList curdisks;
+ QStringList curopts;
+ QStringList curfs;
+ bool rebuild = FALSE;
+ int n=0;
+ if ( mntfp ) {
+ while ( (me = getmntent( mntfp )) != 0 ) {
+ QString fs = me->mnt_fsname;
+ if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
+ || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" )
+ {
+ n++;
+ curdisks.append(fs);
+ curopts.append( me->mnt_opts );
+ //qDebug("-->fs %s opts %s", fs.latin1(), me->mnt_opts );
+ curfs.append( me->mnt_dir );
+ bool found = FALSE;
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i) {
+ if ( (*i)->disk() == fs ) {
+ found = TRUE;
+ break;
+ }
+ }
+ if ( !found )
+ rebuild = TRUE;
+ }
+ }
+ endmntent( mntfp );
+ }
+ if ( rebuild || n != (int)mFileSystems.count() ) {
+ mFileSystems.clear();
+ QStringList::ConstIterator it=curdisks.begin();
+ QStringList::ConstIterator fsit=curfs.begin();
+ QStringList::ConstIterator optsIt=curopts.begin();
+ for (; it!=curdisks.end(); ++it, ++fsit, ++optsIt) {
+ QString opts = *optsIt;
+
+ QString disk = *it;
+ QString humanname;
+ bool removable = FALSE;
+ if ( isCF(disk) ) {
+ humanname = tr("CF Card");
+ removable = TRUE;
+ } else if ( disk == "/dev/hda1" ) {
+ humanname = tr("Hard Disk");
+ } else if ( disk.left(9) == "/dev/mmcd" ) {
+ humanname = tr("SD Card");
+ removable = TRUE;
+ } else if ( disk.left(7) == "/dev/hd" )
+ humanname = tr("Hard Disk") + " " + humanname.mid(7);
+ else if ( disk.left(7) == "/dev/sd" )
+ humanname = tr("SCSI Hard Disk") + " " + humanname.mid(7);
+ else if ( disk == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
+ humanname = tr("Internal Storage");
+ else if ( disk.left(14) == "/dev/mtdblock/" )
+ humanname = tr("Internal Storage") + " " + humanname.mid(14);
+ else if ( disk.left(13) == "/dev/mtdblock" )
+ humanname = tr("Internal Storage") + " " + humanname.mid(13);
+ FileSystem *fs = new FileSystem( disk, *fsit, humanname, removable, opts );
+ mFileSystems.append( fs );
+ }
+ emit disksChanged();
+ } else {
+ // just update them
+ for (QListIterator<FileSystem> i(mFileSystems); i.current(); ++i)
+ i.current()->update();
+ }
+#endif
+}
+
+//---------------------------------------------------------------------------
+
+FileSystem::FileSystem( const QString &disk, const QString &path, const QString &name, bool rem, const QString &o )
+ : fsdisk( disk ), fspath( path ), humanname( name ), blkSize(512), totalBlks(0), availBlks(0), removable( rem ), opts( o )
+{
+ update();
+}
+
+void FileSystem::update()
+{
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+ struct statfs fs;
+ if ( !statfs( fspath.latin1(), &fs ) ) {
+ blkSize = fs.f_bsize;
+ totalBlks = fs.f_blocks;
+ availBlks = fs.f_bavail;
+ } else {
+ blkSize = 0;
+ totalBlks = 0;
+ availBlks = 0;
+ }
+#endif
+}
+
diff --git a/library/storage.h b/library/storage.h
new file mode 100644
index 0000000..66a9f9d
--- a/dev/null
+++ b/library/storage.h
@@ -0,0 +1,80 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __storage_h__
+#define __storage_h__
+
+#include <qobject.h>
+#include <qlist.h>
+
+class FileSystem;
+class QCopChannel;
+
+class StorageInfo : public QObject
+{
+ Q_OBJECT
+public:
+ StorageInfo( QObject *parent=0 );
+
+ const QList<FileSystem> &fileSystems() const { return mFileSystems; }
+ const FileSystem *fileSystemOf( const QString &filename );
+
+signals:
+ void disksChanged();
+
+public slots:
+ void update();
+
+private slots:
+ void cardMessage( const QCString& msg, const QByteArray& data );
+private:
+ QList<FileSystem> mFileSystems;
+ QCopChannel *channel;
+};
+
+class FileSystem
+{
+public:
+ const QString &disk() const { return fsdisk; }
+ const QString &path() const { return fspath; }
+ const QString &name() const { return humanname; }
+ const QString &options() const { return opts; }
+ long blockSize() const { return blkSize; }
+ long totalBlocks() const { return totalBlks; }
+ long availBlocks() const { return availBlks; }
+ bool isRemovable() const { return removable; }
+ bool isWritable() const { return opts.contains("rw"); }
+
+private:
+ friend class StorageInfo;
+ FileSystem( const QString &disk, const QString &path, const QString &humanname, bool rem, const QString &opts );
+ void update();
+
+ QString fsdisk;
+ QString fspath;
+ QString humanname;
+ long blkSize;
+ long totalBlks;
+ long availBlks;
+ bool removable;
+ QString opts;
+};
+
+
+#endif
diff --git a/library/task-qpe.control b/library/task-qpe.control
new file mode 100644
index 0000000..57092f9
--- a/dev/null
+++ b/library/task-qpe.control
@@ -0,0 +1,10 @@
+Files:
+Priority: required
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-qipkg qpe-base
+Description: Bootstrap Qtopia environment
+ A complete GUI environment for handhelds.
+ You will probably want to install one of the qpe-i18n-* packages.
diff --git a/library/taskbarappletinterface.h b/library/taskbarappletinterface.h
new file mode 100644
index 0000000..7e20329
--- a/dev/null
+++ b/library/taskbarappletinterface.h
@@ -0,0 +1,41 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef TASKBARAPPLETINTERFACE_H
+#define TASKBARAPPLETINTERFACE_H
+
+#include <qpe/qcom.h>
+
+#ifndef QT_NO_COMPONENT
+// {6CA34D0B-C637-4865-A667-7D4CD8A70407}
+# ifndef IID_TaskbarApplet
+# define IID_TaskbarApplet QUuid( 0x6ca34d0b, 0xc637, 0x4865, 0xa6, 0x67, 0x7d, 0x4c, 0xd8, 0xa7, 0x04, 0x07)
+# endif
+#endif
+
+class QWidget;
+
+struct TaskbarAppletInterface : public QUnknownInterface
+{
+ virtual QWidget *applet( QWidget *parent ) = 0;
+ virtual int position() const = 0;
+};
+
+#endif
diff --git a/library/timestring.cpp b/library/timestring.cpp
new file mode 100644
index 0000000..d5d78ae
--- a/dev/null
+++ b/library/timestring.cpp
@@ -0,0 +1,360 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "timestring.h"
+#include <qobject.h>
+#include "qpeapplication.h" //for qApp
+#include "config.h"
+
+
+class TimeStringFormatKeeper : public QObject
+{
+ Q_OBJECT
+public:
+ static DateFormat currentFormat()
+ {
+ if ( !self )
+ self = new TimeStringFormatKeeper;
+ return self->format;
+ }
+private slots:
+ void formatChanged( DateFormat f )
+ {
+ format = f;
+ }
+private:
+ static TimeStringFormatKeeper *self;
+ DateFormat format;
+
+ TimeStringFormatKeeper()
+ : QObject( qApp )
+ {
+ Config config("qpe");
+ config.setGroup( "Date" );
+ format = DateFormat(QChar(config.readEntry("Separator", "/")[0]),
+ (DateFormat::Order)config .readNumEntry("ShortOrder", DateFormat::DayMonthYear),
+ (DateFormat::Order)config.readNumEntry("LongOrder", DateFormat::DayMonthYear));
+
+ connect( qApp, SIGNAL( dateFormatChanged(DateFormat) ),
+ this, SLOT( formatChanged( DateFormat ) ) );
+ }
+};
+
+TimeStringFormatKeeper *TimeStringFormatKeeper::self = 0;
+
+QString DateFormat::toNumberString() const
+{
+ QString buf = "";
+ // for each part of the order
+ for (int i = 0; i < 3; i++) {
+ // switch on the relavent 3 bits.
+ switch((_shortOrder >> (i * 3)) & 0x0007) {
+ case 0x0001:
+ buf += QObject::tr( "D" );
+ break;
+ case 0x0002:
+ buf += QObject::tr( "M" );
+ break;
+ case 0x0004:
+ buf += QObject::tr( "Y" );
+ break;
+ }
+ if (i < 2)
+ buf += _shortSeparator;
+ }
+ return buf;
+}
+
+QString DateFormat::toWordString() const
+{
+ QString buf = "";
+ // for each part of the order
+ for (int i = 0; i < 3; i++) {
+ // switch on the relavent 3 bits.
+ switch((_longOrder >> (i * 3)) & 0x0007) {
+ case 0x0001:
+ buf += QObject::tr( "day" );
+ if (i < 2) {
+ if ((_shortOrder << ((i+1) * 3)) & 0x0007)
+ buf += ", ";
+ else
+ buf += " ";
+ }
+ break;
+ case 0x0002:
+ buf += QObject::tr( "month" );
+ if (i < 2)
+ buf += " ";
+ break;
+ case 0x0004:
+ buf += QObject::tr( "year" );
+ if (i < 2)
+ buf += ", ";
+ break;
+ }
+ }
+ return buf;
+}
+
+QString DateFormat::numberDate(const QDate &d, int v) const
+{
+ QString buf = "";
+
+ int pad = 0;
+ if (v & padNumber)
+ pad = 2;
+
+ // for each part of the order
+ for (int i = 0; i < 3; i++) {
+ // switch on the relavent 3 bits.
+ switch((_shortOrder >> (i * 3)) & 0x0007) {
+ case 0x0001:
+ buf += QString("%1").arg(d.day(), pad);
+ break;
+ case 0x0002:
+ buf += QString("%1").arg(d.month(), pad);
+ break;
+ case 0x0004:
+ {
+ int year = d.year();
+ if (!(v & longNumber))
+ year = year % 100;
+
+ if (year < 10)
+ buf += "0";
+
+ buf += QString::number(year);
+
+ }
+ break;
+ }
+ if (i < 2)
+ buf = _shortSeparator;
+ }
+ return buf;
+}
+
+QString DateFormat::wordDate(const QDate &d, int v) const
+{
+ QString buf = "";
+ // for each part of the order
+ if (v & showWeekDay) {
+ QString weekDay = d.dayName(d.dayOfWeek());
+ if (!(v & longWord)) {
+ weekDay = weekDay.left(3);
+ }
+ buf += weekDay;
+ if (_longOrder & 0x0007 == 0x0002)
+ buf += ' ';
+ else
+ buf += ", ";
+ }
+
+ int pad = 0;
+ if (v & padNumber)
+ pad = 2;
+
+ for (int i = 0; i < 3; i++) {
+ // switch on the relavent 3 bits.
+ switch((_longOrder >> (i * 3)) & 0x0007) {
+ case 0x0001:
+ buf += QString("%1").arg(d.day(), pad);
+ if (i < 2) {
+ if ((_shortOrder << ((i+1) * 3)) & 0x0007)
+ buf += ", ";
+ else
+ buf += " ";
+ }
+ break;
+ case 0x0002:
+ {
+ QString monthName = d.monthName(d.month());
+ if (!(v & longWord)) {
+ monthName = monthName.left(3);
+ }
+ buf += monthName;
+ }
+ if (i < 2)
+ buf += " ";
+ break;
+ case 0x0004:
+ {
+ int year = d.year();
+ if (!(v & longNumber))
+ year = year % 100;
+
+ if (year < 10)
+ buf += "0";
+
+ buf += QString::number(year);
+ }
+ if (i < 2)
+ buf += ", ";
+ break;
+ }
+ }
+ return buf;
+}
+
+#ifndef QT_NO_DATASTREAM
+void DateFormat::save(QDataStream &d) const
+{
+ d << _shortSeparator.unicode();
+ uint v= _shortOrder;
+ d << v;
+ v = _longOrder;
+ d << v;
+}
+
+void DateFormat::load(QDataStream &d)
+{
+ ushort value;
+ d >> value;
+ _shortSeparator = QChar(value);
+ uint v = 0;
+ d >> v;
+ _shortOrder = (Order)v;
+ v = 0;
+ d >> v;
+ _longOrder = (Order)v;
+}
+
+QDataStream &operator<<(QDataStream &s, const DateFormat&df)
+{
+ df.save(s);
+ return s;
+}
+QDataStream &operator>>(QDataStream &s, DateFormat&df)
+{
+ df.load(s);
+ return s;
+}
+#endif
+
+QString TimeString::shortDate( const QDate &d, DateFormat dtf )
+{
+ return dtf.wordDate(d);
+}
+
+QString TimeString::dateString( const QDate &d, DateFormat dtf )
+{
+ return dtf.wordDate(d, DateFormat::longNumber | DateFormat::longWord);
+}
+
+
+QString TimeString::longDateString( const QDate &d, DateFormat dtf )
+{
+ return dtf.wordDate(d, DateFormat::showWeekDay | DateFormat::longNumber
+ | DateFormat::longWord);
+}
+
+DateFormat TimeString::currentDateFormat()
+{
+ return TimeStringFormatKeeper::currentFormat();
+}
+
+
+QString TimeString::dateString( const QDateTime &dt, bool ampm, bool seconds, DateFormat dtf )
+{
+ const QDate& d = dt.date();
+ const QTime& t = dt.time();
+
+ // based on QDateTime::toString()
+ QString buf = timeString(t,ampm,seconds);
+ buf += " ";
+ buf += longDateString( d, dtf );
+
+ return buf;
+}
+
+QString TimeString::timeString( const QTime &t, bool ampm, bool seconds )
+{
+ if ( !ampm ) {
+ if ( seconds )
+ return t.toString();
+ QString r = QString::number(t.hour());
+ if ( t.hour() < 10 ) r.prepend( "0" );
+ r.append( ":" );
+ if ( t.minute() < 10 ) r.append( "0" );
+ r.append(QString::number(t.minute()));
+ return r;
+ }
+ // ### else the hard case that should disappear in Qt 3.0
+ QString argString = seconds ? "%4:%5:%6 %7" : "%4:%5 %7";
+ int hour = t.hour();
+ QString strMin = QString::number( t.minute() );
+ QString strSec = QString::number( t.second() );
+ if ( hour > 12 )
+ argString = argString.arg( hour - 12, 2 );
+ else {
+ if ( hour == 0 )
+ argString = argString.arg( 12 );
+ else
+ argString = argString.arg( hour, 2 );
+ }
+ if ( t.minute() < 10 )
+ strMin.prepend( "0" );
+ if ( t.second() < 10 )
+ strSec.prepend( "0" );
+ argString = argString.arg( strMin );
+ if ( seconds )
+ argString = argString.arg( strSec );
+ if ( hour >= 12 )
+ argString = argString.arg( QObject::tr("PM") );
+ else
+ argString = argString.arg( QObject::tr("AM") );
+ return argString;
+}
+
+QString TimeString::shortTime( bool ampm, bool seconds )
+{
+ static const char* const day[] = {
+ QT_TRANSLATE_NOOP( "QObject", "Mon" ),
+ QT_TRANSLATE_NOOP( "QObject", "Tue" ),
+ QT_TRANSLATE_NOOP( "QObject", "Wed" ),
+ QT_TRANSLATE_NOOP( "QObject", "Thu" ),
+ QT_TRANSLATE_NOOP( "QObject", "Fri" ),
+ QT_TRANSLATE_NOOP( "QObject", "Sat" ),
+ QT_TRANSLATE_NOOP( "QObject", "Sun" )
+ };
+ // just create a shorter time String
+ QDateTime dtTmp = QDateTime::currentDateTime();
+ QString strTime;
+ strTime = QObject::tr( day[dtTmp.date().dayOfWeek()-1] ) + " " +
+ timeString( dtTmp.time(), ampm, seconds );
+ return strTime;
+}
+
+QString TimeString::dateString( const QDateTime &t, bool ampm )
+{
+ return dateString(t,ampm,FALSE);
+}
+
+QString TimeString::timeString( const QTime &t, bool ampm)
+{
+ return timeString(t,ampm,FALSE);
+}
+
+QString TimeString::shortTime( bool ampm )
+{
+ return shortTime(ampm,FALSE);
+}
+
+#include "timestring.moc"
diff --git a/library/timestring.h b/library/timestring.h
new file mode 100644
index 0000000..fd06d5b
--- a/dev/null
+++ b/library/timestring.h
@@ -0,0 +1,131 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef _TIMESTRING_H_
+#define _TIMESTRING_H_
+#include <qdatetime.h>
+#include <qstring.h>
+
+// return a string with the time based on whether or not you want
+// you want it in 12 hour form. if ampm is true, then return
+// it in 12 hour (am/pm) form otherwise return it in 24 hour form
+// in theory Qt 3,0 handles this better (hopefully obsoleteing this)
+class DateFormat
+{
+public:
+ // date format type 001,010,100 = day month year
+ enum Order {
+ DayMonthYear = 0x0111, // 0x001 + 0x010(0x2 << 3) + 0x100(0x4 << 3)
+ MonthDayYear = 0x010A,
+ YearMonthDay = 0x0054
+ };
+
+ DateFormat(QChar s = '/', Order so = MonthDayYear) : _shortOrder(so),
+ _longOrder(so), _shortSeparator(s) { }
+ DateFormat(QChar s, Order so, Order lo) : _shortOrder(so),
+ _longOrder(lo), _shortSeparator(s) { }
+ DateFormat(const DateFormat &o) : _shortOrder(o._shortOrder),
+ _longOrder(o._longOrder), _shortSeparator(o._shortSeparator) { }
+
+ bool operator==(const DateFormat &o)
+ {
+ if (o._shortOrder == _shortOrder && o._longOrder == _longOrder &&
+ o._shortSeparator == _shortSeparator)
+ return TRUE;
+ return FALSE;
+ }
+
+ // verbosity specifiers
+ enum Verbosity {
+ shortNumber = 0x01, // default
+ longNumber = 0x02,
+
+ padNumber = 0x04,
+
+ shortWord = 0x08, // default
+ longWord = 0x10,
+
+ showWeekDay = 0x20
+ };
+
+ QString toNumberString() const; // the M/D/Y string.
+ QString toWordString() const; // the Month day, year string.
+
+ QString numberDate(const QDate &d, int v = 0) const;
+ QString wordDate(const QDate &d, int v = 0) const;
+
+#ifndef QT_NO_DATASTREAM
+ void load(QDataStream&);
+ void save(QDataStream&) const;
+#endif
+
+ QChar separator() const { return _shortSeparator; };
+ Order shortOrder() const { return _shortOrder; };
+ Order longOrder() const { return _longOrder; };
+
+private:
+ Order _shortOrder;
+ Order _longOrder;
+ QChar _shortSeparator;
+};
+
+#ifndef QT_NO_DATASTREAM
+QDataStream &operator<<(QDataStream &s, const DateFormat&df);
+QDataStream &operator>>(QDataStream &s, DateFormat&df);
+#endif
+
+class TimeString
+{
+public:
+
+ //enum DateFormat { MonthDayYear, DayMonthYear, ISO8601,
+ //YearMonthDay = ISO8601 };
+
+
+ static QString shortDate( const QDate &d )
+ { return shortDate( d, currentDateFormat() ); }
+ static QString dateString( const QDate &d )
+ { return dateString( d, currentDateFormat() ); }
+ static QString longDateString( const QDate &d )
+ { return longDateString( d, currentDateFormat() ); }
+ static QString dateString( const QDateTime &dt, bool ampm, bool seconds )
+ { return dateString( dt, ampm, seconds, currentDateFormat() ); }
+
+ static QString dateString( const QDateTime &t, bool ampm = false );
+ static QString timeString( const QTime &t, bool ampm, bool seconds );
+ static QString timeString( const QTime &t, bool ampm = false );
+ static QString shortTime( bool ampm, bool seconds );
+ static QString shortTime( bool ampm = false );
+
+
+
+ static QString shortDate( const QDate &, DateFormat );
+ static QString dateString( const QDate &, DateFormat );
+ static QString longDateString( const QDate &, DateFormat );
+
+ static DateFormat currentDateFormat();
+
+private:
+ static QString dateString( const QDateTime &t, bool ampm, bool seconds, DateFormat );
+
+
+};
+#endif
+
diff --git a/library/tzselect.cpp b/library/tzselect.cpp
new file mode 100644
index 0000000..5f102d5
--- a/dev/null
+++ b/library/tzselect.cpp
@@ -0,0 +1,228 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "tzselect.h"
+#include "resource.h"
+#include "global.h"
+#include "config.h"
+#include <qtoolbutton.h>
+#include <qfile.h>
+#include <stdlib.h>
+
+#ifdef Q_WS_QWS
+#include <qcopchannel_qws.h>
+#endif
+
+TZCombo::TZCombo( QWidget *p, const char* n )
+ : QComboBox( p, n )
+{
+ updateZones();
+ // check to see if TZ is set, if it is set the current item to that
+ QString tz = getenv("TZ");
+ if ( !tz.isNull() ) {
+ int n = 0,
+ index = 0;
+ for ( QStringList::Iterator it=identifiers.begin();
+ it!=identifiers.end(); ++it) {
+ if ( *it == tz )
+ index = n;
+ n++;
+ }
+ setCurrentItem(index);
+ } else {
+ setCurrentItem(0);
+ }
+
+
+
+ // listen on QPE/System
+#if defined(Q_WS_QWS)
+#if !defined(QT_NO_COP)
+ QCopChannel *channel = new QCopChannel( "QPE/System", this );
+ connect( channel, SIGNAL(received(const QCString&, const QByteArray&)),
+ this, SLOT(handleSystemChannel(const QCString&, const QByteArray&)) );
+#endif
+#endif
+
+
+}
+
+TZCombo::~TZCombo()
+{
+}
+
+void TZCombo::updateZones()
+{
+ QString cur = currentText();
+ clear();
+ identifiers.clear();
+ int curix=0;
+ QString tz = getenv("TZ");
+ bool tzFound = FALSE;
+ Config cfg("CityTime");
+ cfg.setGroup("TimeZones");
+ int i=0;
+ for ( ; 1; i++ ) {
+ QString zn = cfg.readEntry("Zone"+QString::number(i), QString::null);
+ if ( zn.isNull() )
+ break;
+ if ( zn == tz )
+ tzFound = TRUE;
+ QString nm = cfg.readEntry("ZoneName"+QString::number(i));
+ identifiers.append(zn);
+ insertItem(nm);
+ if ( nm == cur )
+ curix = i;
+ }
+ if ( !tzFound && !tz.isEmpty()) {
+ int i = tz.find( '/' );
+ QString nm = tz.mid( i+1 );
+ identifiers.append(tz);
+ insertItem(nm);
+ if ( nm == cur )
+ curix = i;
+ ++i;
+ }
+ for (QStringList::Iterator it=extras.begin(); it!=extras.end(); ++it) {
+ insertItem(*it);
+ identifiers.append(*it);
+ if ( *it == cur )
+ curix = i;
+ ++i;
+ }
+ if ( !i ) {
+ QStringList list = timezoneDefaults();
+ for ( QStringList::Iterator it = list.begin(); it!=list.end(); ++it ) {
+ identifiers.append(*it); ++it;
+ insertItem(*it);
+ }
+ }
+ setCurrentItem(curix);
+}
+
+
+void TZCombo::keyPressEvent( QKeyEvent *e )
+{
+ // ### should popup() in Qt 3.0 (it's virtual there)
+// updateZones();
+ QComboBox::keyPressEvent(e);
+}
+
+void TZCombo::mousePressEvent(QMouseEvent*e)
+{
+ // ### should popup() in Qt 3.0 (it's virtual there)
+// updateZones();
+ QComboBox::mousePressEvent(e);
+}
+
+QString TZCombo::currZone() const
+{
+ return identifiers[currentItem()];
+}
+
+void TZCombo::setCurrZone( const QString& id )
+{
+ for (int i=0; i< count(); i++) {
+ if ( identifiers[i] == id ) {
+ setCurrentItem(i);
+ return;
+ }
+ }
+ insertItem(id);
+ setCurrentItem( count() - 1);
+ identifiers.append(id);
+ extras.append(id);
+}
+
+
+
+void TZCombo::handleSystemChannel(const QCString&msg, const QByteArray&)
+{
+ if ( msg == "timeZoneListChange()" ) {
+ updateZones();
+ }
+}
+
+
+TimeZoneSelector::TimeZoneSelector(QWidget* p, const char* n) :
+ QHBox(p,n)
+{
+ // build the combobox before we do any updates...
+ cmbTz = new TZCombo( this, "timezone combo" );
+
+ cmdTz = new QToolButton( this, "timezone button" );
+ QPixmap pixGlobe = Resource::loadPixmap( "citytime_icon" );
+ cmdTz->setPixmap( pixGlobe );
+ cmdTz->setMaximumSize( cmdTz->sizeHint() );
+
+ // set up a connection to catch a newly selected item and throw our
+ // signal
+ QObject::connect( cmbTz, SIGNAL( activated( int ) ),
+ this, SLOT( slotTzActive( int ) ) );
+ QObject::connect( cmdTz, SIGNAL( clicked() ),
+ this, SLOT( slotExecute() ) );
+}
+
+TimeZoneSelector::~TimeZoneSelector()
+{
+}
+
+
+QString TimeZoneSelector::currentZone() const
+{
+ return cmbTz->currZone();
+}
+
+void TimeZoneSelector::setCurrentZone( const QString& id )
+{
+ cmbTz->setCurrZone( id );
+}
+
+void TimeZoneSelector::slotTzActive( int )
+{
+ emit signalNewTz( cmbTz->currZone() );
+}
+
+void TimeZoneSelector::slotExecute( void )
+{
+ // execute the city time application...
+ Global::execute( "citytime" );
+}
+
+QStringList timezoneDefaults( void )
+{
+ QStringList tzs;
+ // load up the list just like the file format (citytime.cpp)
+ tzs.append( "America/New_York" );
+ tzs.append( "New York" );
+ tzs.append( "America/Los_Angeles" );
+ tzs.append( "Los Angeles" );
+ tzs.append( "Australia/Brisbane" );
+ tzs.append( "Brisbane" );
+ tzs.append( "Europe/Oslo" );
+ tzs.append( "Oslo" );
+ tzs.append( "Asia/Tokyo" );
+ tzs.append( "Tokyo" );
+ tzs.append( "Asia/Hong_Kong" );
+ tzs.append( "Hong Kong" );
+ return tzs;
+}
+
+
diff --git a/library/tzselect.h b/library/tzselect.h
new file mode 100644
index 0000000..9898d84
--- a/dev/null
+++ b/library/tzselect.h
@@ -0,0 +1,79 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef TZSELECT_H
+#define TZSELECT_H
+
+#include <qhbox.h>
+#include <qcombobox.h>
+#include <qstringlist.h>
+
+class QToolButton;
+
+// a function to load defaults in case there is no file
+QStringList timezoneDefaults( void );
+
+class TZCombo : public QComboBox
+{
+ Q_OBJECT
+public:
+ TZCombo( QWidget* parent, const char* name = 0 );
+ ~TZCombo();
+
+ QString currZone() const;
+ void setCurrZone( const QString& id );
+
+protected:
+ void keyPressEvent( QKeyEvent *e );
+ void mousePressEvent(QMouseEvent*e);
+ void updateZones();
+
+private slots:
+ void handleSystemChannel(const QCString&, const QByteArray&);
+
+private:
+ QStringList identifiers;
+ QStringList extras;
+};
+
+class TimeZoneSelectorPrivate;
+class TimeZoneSelector : public QHBox
+{
+ Q_OBJECT
+public:
+ TimeZoneSelector( QWidget* parent = 0, const char* name=0 );
+ ~TimeZoneSelector();
+
+ QString currentZone() const;
+ void setCurrentZone( const QString& id );
+
+signals:
+ void signalNewTz( const QString& id );
+
+private slots:
+ void slotTzActive( int index );
+ void slotExecute( void );
+
+private:
+ TZCombo *cmbTz;
+ QToolButton *cmdTz;
+ TimeZoneSelectorPrivate *d;
+};
+
+#endif
diff --git a/library/version.h b/library/version.h
new file mode 100644
index 0000000..992c086
--- a/dev/null
+++ b/library/version.h
@@ -0,0 +1,3 @@
+//#define QPE_VENDOR "Your Name Here"
+#define QPE_VERSION "1.5.0"
+
diff --git a/library/xmlreader.cpp b/library/xmlreader.cpp
new file mode 100644
index 0000000..1ae4485
--- a/dev/null
+++ b/library/xmlreader.cpp
@@ -0,0 +1,137 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "xmlreader.h"
+
+Node::Node()
+ : parent( 0 ), prev( 0 ),
+ next( 0 ), first( 0 ), last( 0 )
+{
+}
+
+
+Node::~Node()
+{
+ Node *n = first, *m;
+
+ while ( n ) {
+ m = n->next;
+ delete n;
+ n = m;
+ }
+}
+
+
+void Node::addChild( Node *child )
+{
+ child->parent = this;
+
+ if ( last )
+ last->next = child;
+ child->prev = last;
+
+ if ( !first )
+ first = child;
+ last = child;
+}
+
+QString Node::attribute( const QString& name )
+{
+ return attributes[name];
+}
+
+void Node::setAttributes( const QXmlAttributes &a )
+{
+ for ( int i = 0; i < a.length(); i++ )
+ attributes[ a.qName( i ) ] = a.value( i );
+}
+
+QMap<QString, QString> Node::attributeMap()
+{
+ return attributes;
+}
+
+QString Node::subData(const QString& tag) const
+{
+ Node* c = firstChild();
+ while ( c ) {
+ if ( c->tagName() == tag )
+ return c->data();
+ c = c->nextNode();
+ }
+ return QString::null;
+}
+
+XmlHandler::XmlHandler()
+ : node( 0 ), tree( 0 )
+{
+}
+
+XmlHandler::~XmlHandler()
+{
+}
+
+
+bool XmlHandler::startDocument()
+{
+ tree = node = new Node;
+ node->setTagName( "DOCUMENT" );
+
+ return TRUE;
+}
+
+
+bool XmlHandler::endDocument()
+{
+ if ( node != tree )
+ return FALSE;
+
+ return TRUE;
+}
+
+bool XmlHandler::startElement( const QString &, const QString &,
+ const QString &qName, const QXmlAttributes &attr )
+{
+ Node *nnode = new Node;
+ nnode->setAttributes( attr );
+ nnode->setTagName( qName );
+
+ node->addChild( nnode );
+ node = nnode;
+
+ return TRUE;
+}
+
+
+bool XmlHandler::endElement( const QString &, const QString &, const QString & )
+{
+ if ( node == tree )
+ return FALSE;
+
+ node = node->parentNode();
+ return TRUE;
+}
+
+
+bool XmlHandler::characters( const QString &ch )
+{
+ node->appendData( ch );
+
+ return TRUE;
+}
diff --git a/library/xmlreader.h b/library/xmlreader.h
new file mode 100644
index 0000000..2a51176
--- a/dev/null
+++ b/library/xmlreader.h
@@ -0,0 +1,83 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef XMLREADER_H
+#define XMLREADER_H
+
+#include <qstring.h>
+#include <qxml.h>
+#include <qmap.h>
+
+class Node
+{
+public:
+ Node();
+ ~Node();
+
+ void addChild( Node *child );
+
+ void setAttributes( const QXmlAttributes &a );
+ QMap<QString, QString> attributeMap();
+ QString attribute( const QString& name );
+
+ Node *nextNode() const { return next; }
+ Node *prevNode() const { return prev; }
+ Node *parentNode() const { return parent; }
+ Node *lastChild() const { return last; }
+ Node *firstChild() const { return first; }
+
+ void setTagName( const QString &s ) { tagN = s; }
+ QString tagName() const { return tagN; }
+ void setData( const QString &s ) { dt = s; }
+ QString data() const { return dt; }
+ QString subData(const QString& tag) const;
+ void appendData( const QString s ) { dt += s; }
+
+
+private:
+ QMap<QString, QString> attributes;
+ QString dt, tagN;
+
+ Node *parent, *prev, *next, *first, *last;
+};
+
+class XmlHandlerPrivate;
+class XmlHandler : public QXmlDefaultHandler
+{
+public:
+ XmlHandler();
+ ~XmlHandler();
+
+ bool startDocument();
+ bool endDocument();
+ bool startElement( const QString &ns, const QString &ln, const QString &qName,
+ const QXmlAttributes &attr );
+ bool endElement( const QString &ns, const QString &ln, const QString &qName );
+ bool characters( const QString &ch );
+
+ Node *firstNode() const { return tree; }
+
+private:
+ Node *node, *tree;
+ XmlHandlerPrivate *d;
+};
+
+
+
+#endif
diff --git a/mkipks b/mkipks
new file mode 100755
index 0000000..947b19e
--- a/dev/null
+++ b/mkipks
@@ -0,0 +1,220 @@
+#!/bin/sh
+
+QTE_VERSION=2.3.2
+DEB_VERSION=2.0
+
+# Have to do this here, since CVS can't store symlinks
+mkdir -p etc/rc2.d
+rm -f etc/rc2.d/S98qpe
+ln -s ../init.d/qpe etc/rc2.d/S98qpe
+
+VERSION_MAJ=$(sed -n -e 's/.*QPE_VERSION "\([0-9]*\)\..*\..*".*/\1/p' <$QPEDIR/include/qpe/version.h)
+VERSION_MIN=$(sed -n -e 's/.*QPE_VERSION ".*\.\([0-9]*\)\..*".*/\1/p' <$QPEDIR/include/qpe/version.h)
+VERSION_PAT=$(sed -n -e 's/.*QPE_VERSION ".*\..*\.\([0-9]*\).*/\1/p' <$QPEDIR/include/qpe/version.h)
+if grep -q 'QPE_VERSION .*snapshot' $QPEDIR/include/qpe/version.h
+then
+ VERSION_CVS="_$(date +%Y%m%d)"
+else
+ VERSION_CVS=""
+fi
+
+QPE_VERSION=$VERSION_MAJ.$VERSION_MIN.$VERSION_PAT
+
+ARCH=arm
+STRIP=arm-linux-strip
+STRIP_FILES="*Advanced RISC Machines ARM*not stripped"
+
+TDIR=/tmp/ipk$$
+DATADIR=$TDIR/data
+CTRLDIR=$TDIR/control
+
+IMAGEDIR=
+VERB=
+LIST=
+RPM=
+
+while [ $# -ne 0 ]
+do
+ case "$1" in
+ -v)
+ VERB=1
+ echo >&2 "Packaging for version $VERSION_MAJ.$VERSION_MIN.$VERSION_PAT$VERSION_CVS"
+ ;; -l)
+ LIST=1
+ ;; -i)
+ shift
+ IMAGEDIR=$1
+ DATADIR=$IMAGEDIR
+ mkdir -p $IMAGEDIR
+ ;; -rpm)
+ if [ "$QPEDIR" != "/opt/Qtopia" ]
+ then
+ echo >&2 '$QPEDIR is not the standard /usr/Qtopia directory.'
+ sleep 1
+ #exit 1
+ fi
+ RPM=1
+ ;; -arch)
+ shift
+ ARCH=$1
+ STRIP=
+ STRIP_FILES=
+ ;; /*)
+ FILES="$FILES $1"
+ ;; *)
+ FILES="$FILES $PWD/$1"
+ esac
+ shift
+done
+
+
+if [ -z "$FILES" ]
+then
+ FILES=`find $QPEDIR -name "*.control" -print`
+fi
+
+RDIR=$PWD
+cd $QPEDIR
+
+for i in $FILES
+do
+ rm -rf $TDIR
+
+ mkdir -p $DATADIR
+ mkdir -p $CTRLDIR
+
+ packagename=${i##*/}; packagename=${packagename%.control}
+ version=$(eval echo '"'$(sed -n -e "s/^Version: *//p" $i)'"')
+ depends=$(eval echo '"'$(sed -n -e "s/^Depends: *//p" $i)'"')
+ files=$(eval echo $(sed -n -e "s/^Files://p" $i))
+ arch=$(eval echo $(sed -n -e "s/^Arch://p" $i))
+ section=$(sed -n -e "s/^Section: *//p" $i)
+ license=$(sed -n -e "s/^License: *//p" $i)
+ summary=$(sed -n -e "s/^Description: *//p" $i)
+ package=${packagename}_${version}_$ARCH
+ ERROR=
+ if [ -z "$files" ]
+ then
+ mkdir -p $DATADIR/usr/share/doc/$packagename
+ else
+ for f in $files
+ do
+ if [ -d $f ]
+ then
+ ffiles=$(find $f -type f -o -type b -o -type c -o -type l)
+ else
+ ffiles=$f
+ fi
+ for ff in $ffiles
+ do
+ case $ff in
+ */CVS/*)
+ continue
+ ;; *~)
+ continue
+ ;; *.control)
+ continue
+ ;; $QTDIR/*)
+ BASE=$(dirname /usr/${ff#$QTDIR/})
+ ;; etc/*.d/*)
+ BASE=$(dirname /$ff)
+ ;; ipaq/*)
+ BASE=$(dirname ${ff#ipaq})
+ ;; *)
+ # For SHARP ROM compatibility. Should change to Qtopia.
+ BASE=/opt/QtPalmtop/$(dirname $ff)
+ esac
+
+ if [ -f $ff -o -b $ff -o -c $ff ]
+ then
+ D=$DATADIR$BASE
+ if [ -x $ff -a -n "$STRIP" ]
+ then
+ case $(file $ff) in
+ $STRIP_FILES)
+ $STRIP $ff
+ ;; *)
+ esac
+ fi
+ if [ -n "$RPM" ]
+ then
+ case "$ff" in
+ /*) RPMFILES="$RPMFILES $ff"
+ ;; *) RPMFILES="$RPMFILES $QPEDIR/$ff"
+ esac
+ else
+ mkdir -p $D
+ if cp -a $ff $D
+ then
+ true
+ else
+ ERROR=1
+ fi
+ fi
+ else
+ echo >&2 "$0: $i: No such file: $ff"
+ ERROR=1
+ fi
+ done
+ done
+ fi
+ if [ -z "$ERROR" ]
+ then
+ if [ -n "$RPM" ]
+ then
+ SPEC=/tmp/mkipks-rpm-$$.spec
+ echo >$SPEC "Summary: $summary"
+ echo >>$SPEC "Name: $packagename"
+ echo >>$SPEC "Group: $section" ##########
+ echo >>$SPEC "License: $license"
+ echo >>$SPEC "Version: ${version%-*}"
+ echo >>$SPEC "Release: ${version#*-}"
+
+ echo >>$SPEC "%description"
+ sed -n -e '/^Description:/,$ p' $i | tail +2 >>$SPEC
+ echo >>$SPEC "%files"
+ echo >>$SPEC "%defattr(-,root,root)"
+ /bin/ls $RPMFILES >>$SPEC
+ rpm -bb $SPEC --target $ARCH-unknown-linux
+ # rm $SPEC
+ elif [ -z "$IMAGEDIR" ]
+ then
+ #size=$(du -h -s $DATADIR | sed -e 's/[ ].*//')
+ size=$(mkfs.jffs2 -r $DATADIR | wc -c)
+ echo "Package: $packagename" >$CTRLDIR/control
+ echo "Installed-Size: $size" >>$CTRLDIR/control
+ echo "Filename: ./$package.ipk" >>$CTRLDIR/control
+ echo "Version: $version" >>$CTRLDIR/control
+ echo "Depends: $depends" >>$CTRLDIR/control
+ egrep -v "^(Files|Version|Depends):" >>$CTRLDIR/control $i
+ echo "$DEB_VERSION" >$TDIR/debian-binary
+ base=${i%.control}
+ scripts="preinst postinst prerm postrm"
+ for pf in $scripts
+ do
+ if [ -x ${base}.$pf ]
+ then
+ cp ${base}.$pf $CTRLDIR/$pf
+ fi
+ done
+ if [ "$UID" = 0 ]
+ then
+ chown -R root.root $TDIR
+ fi
+ ( cd $CTRLDIR; tar cfz ../control.tar.gz ./*; )
+ ( cd $DATADIR; tar cfz ../data.tar.gz ./*; )
+ ( cd $TDIR; rm -rf control data; tar cf - ./debian-binary ./control.tar.gz ./data.tar.gz; ) | gzip >$RDIR/$package.ipk
+ RESULT=$package.ipk
+ if [ -n "$VERB" ]
+ then
+ echo >&2 "Built $RESULT ($size)"
+ fi
+ if [ -n "$LIST" ]
+ then
+ echo $RESULT
+ fi
+ fi
+ else
+ echo >&2 "Not building $package package"
+ fi
+done
diff --git a/noncore/apps/dictionary/dictionary.pro b/noncore/apps/dictionary/dictionary.pro
new file mode 100644
index 0000000..e829e68
--- a/dev/null
+++ b/noncore/apps/dictionary/dictionary.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = ../bin
+
+HEADERS = dicttool.h
+SOURCES = dicttool.cpp main.cpp
+
+INTERFACES = dicttoolbase.ui
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TARGET = dictionary
diff --git a/noncore/apps/dictionary/dicttool.cpp b/noncore/apps/dictionary/dicttool.cpp
new file mode 100644
index 0000000..a0f2f9d
--- a/dev/null
+++ b/noncore/apps/dictionary/dicttool.cpp
@@ -0,0 +1,59 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "dicttool.h"
+#include "global.h"
+#include <qstringlist.h>
+#include <qlineedit.h>
+
+DictTool::DictTool( QWidget* parent, const char* name, bool modal, WFlags fl )
+ : DictToolBase( parent, name, modal, fl )
+{
+}
+
+DictTool::~DictTool()
+{
+}
+
+void DictTool::setDictionary(int d)
+{
+ dict = (DictType)d;
+}
+
+void DictTool::setPattern(const QString& s)
+{
+ qWarning( "DictTool::setPattern(const QString&) not yet implemented!" );
+}
+
+void DictTool::setPickboardSet(const QString& s)
+{
+ QStringList sets = QStringList::split(" ",s);
+ qWarning( "DictTool::setPickboardSet(const QString&) not yet implemented!" );
+}
+
+void DictTool::addWord()
+{
+ Global::addWords(word->text());
+}
+
+void DictTool::removeWord()
+{
+ qWarning( "DictTool::removeWord() not yet implemented!" );
+}
+
diff --git a/noncore/apps/dictionary/dicttool.h b/noncore/apps/dictionary/dicttool.h
new file mode 100644
index 0000000..702b772
--- a/dev/null
+++ b/noncore/apps/dictionary/dicttool.h
@@ -0,0 +1,46 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef DICTTOOL_H
+#define DICTTOOL_H
+#include "dicttoolbase.h"
+
+class DictTool : public DictToolBase
+{
+ Q_OBJECT
+
+public:
+ DictTool( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
+ ~DictTool();
+
+public slots:
+ void setDictionary(int);
+ void setPattern(const QString&);
+ void setPickboardSet(const QString&);
+
+private slots:
+ void addWord();
+ void removeWord();
+
+private:
+ enum DictType { All, Local, System };
+ DictType dict;
+};
+
+#endif // DICTTOOL_H
diff --git a/noncore/apps/dictionary/dicttoolbase.ui b/noncore/apps/dictionary/dicttoolbase.ui
new file mode 100644
index 0000000..25ef00e
--- a/dev/null
+++ b/noncore/apps/dictionary/dicttoolbase.ui
@@ -0,0 +1,412 @@
+<!DOCTYPE UI><UI>
+<class>DictToolBase</class><comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>dicttoolbase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>258</width>
+ <height>375</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>MyDialog1</string>
+ </property>
+ <property stdset="1">
+ <name>sizeGripEnabled</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>2</number>
+ </property>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>All dictionaries</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>Personal dictionary</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>System dictionary (English)</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>dictionary_choice</cstring>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Selects the dictionary to manipulate.</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QTabWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tabWidget</cstring>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Widget4</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Search</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Pattern</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>pattern</cstring>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Enter your search pattern here. You may use &lt;big&gt;&lt;tt&gt;?&lt;/tt&gt;&lt;/big&gt; to represent any one letter, &lt;big&gt;&lt;tt&gt;*&lt;/tt&gt;&lt;/big&gt; to represent zero or more arbitrary letters, or &lt;big&gt;&lt;tt&gt;[&lt;i&gt;abc&lt;/i&gt;]&lt;/tt&gt;&lt;/big&gt; to represent any one of the letters &lt;big&gt;&lt;tt&gt;&lt;i&gt;abc&lt;/i&gt;&lt;/tt&gt;&lt;/big&gt;.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox4</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Matches</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QListBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>output</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Widget5</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Pickboard</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Letter sets</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>sets</cstring>
+ </property>
+ <property>
+ <name>whatsThis</name>
+ <string>Enter sets of letters here, seperated by spaces in the same way as the sets of letters appear at the bottom of the Pickboard. The list below will show the largest sets of words that could be typed ambiguously. This information helps you tune the letter sets for your dictionary.</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Longest ambiguities</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QListBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ambiguities</cstring>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tab</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Edit words</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>word</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>add</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Add</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>remove</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Remove</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>readonly_message</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>This dictionary is read-only.</string>
+ </property>
+ <property stdset="1">
+ <name>alignment</name>
+ <set>AlignCenter</set>
+ </property>
+ <property>
+ <name>hAlign</name>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>pattern</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>dicttoolbase</receiver>
+ <slot>setPattern(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>dictionary_choice</sender>
+ <signal>activated(int)</signal>
+ <receiver>dicttoolbase</receiver>
+ <slot>setDictionary(int)</slot>
+ </connection>
+ <connection>
+ <sender>sets</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>dicttoolbase</receiver>
+ <slot>setPickboardSet(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>add</sender>
+ <signal>clicked()</signal>
+ <receiver>dicttoolbase</receiver>
+ <slot>addWord()</slot>
+ </connection>
+ <connection>
+ <sender>remove</sender>
+ <signal>clicked()</signal>
+ <receiver>dicttoolbase</receiver>
+ <slot>removeWord()</slot>
+ </connection>
+ <slot access="protected">addWord()</slot>
+ <slot access="protected">removeWord()</slot>
+ <slot access="public">setDictionary(int)</slot>
+ <slot access="public">setPattern(const QString&amp;)</slot>
+ <slot access="public">setPickboardSet(const QString&amp;)</slot>
+</connections>
+</UI>
diff --git a/noncore/apps/dictionary/main.cpp b/noncore/apps/dictionary/main.cpp
new file mode 100644
index 0000000..7e9d8c1
--- a/dev/null
+++ b/noncore/apps/dictionary/main.cpp
@@ -0,0 +1,31 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpeapplication.h>
+#include "dicttool.h"
+
+main(int argc, char** argv)
+{
+ QPEApplication a(argc,argv);
+
+ DictTool m;
+ a.showMainWidget(&m);
+
+ return a.exec();
+}
diff --git a/noncore/apps/tableviewer/.cvsignore b/noncore/apps/tableviewer/.cvsignore
new file mode 100644
index 0000000..93eb983
--- a/dev/null
+++ b/noncore/apps/tableviewer/.cvsignore
@@ -0,0 +1,5 @@
+moc_*
+Makefile
+tvbrowseview_gen.h
+tvfilterview_gen.h
+tvkeyedit_gen.h
diff --git a/noncore/apps/tableviewer/Makefile.in b/noncore/apps/tableviewer/Makefile.in
new file mode 100644
index 0000000..8c5dc26
--- a/dev/null
+++ b/noncore/apps/tableviewer/Makefile.in
@@ -0,0 +1,330 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I../library
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = tableviewer
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = tableviewer.h \
+ ui/commonwidgets.h \
+ ui/tvbrowseview.h \
+ ui/tvlistview.h \
+ ui/tvfilterview.h \
+ ui/tveditview.h \
+ ui/browsekeyentry.h \
+ ui/filterkeyentry.h \
+ ui/tvkeyedit.h \
+ db/datacache.h \
+ db/common.h \
+ db/xmlsource.h \
+ db/csvsource.h
+SOURCES = main.cpp \
+ tableviewer.cpp \
+ ui/commonwidgets.cpp \
+ ui/tvbrowseview.cpp \
+ ui/tvfilterview.cpp \
+ ui/browsekeyentry.cpp \
+ ui/filterkeyentry.cpp \
+ ui/tvlistview.cpp \
+ ui/tveditview.cpp \
+ ui/tvkeyedit.cpp \
+ db/datacache.cpp \
+ db/xmlsource.cpp \
+ db/csvsource.cpp \
+ db/common.cpp
+OBJECTS = main.o \
+ tableviewer.o \
+ ui/commonwidgets.o \
+ ui/tvbrowseview.o \
+ ui/tvfilterview.o \
+ ui/browsekeyentry.o \
+ ui/filterkeyentry.o \
+ ui/tvlistview.o \
+ ui/tveditview.o \
+ ui/tvkeyedit.o \
+ db/datacache.o \
+ db/xmlsource.o \
+ db/csvsource.o \
+ db/common.o \
+ ui/tvkeyedit_gen.o
+INTERFACES = ui/tvkeyedit_gen.ui
+UICDECLS = ui/tvkeyedit_gen.h
+UICIMPLS = ui/tvkeyedit_gen.cpp
+SRCMOC = moc_tableviewer.cpp \
+ ui/moc_commonwidgets.cpp \
+ ui/moc_tvbrowseview.cpp \
+ ui/moc_tvlistview.cpp \
+ ui/moc_tvfilterview.cpp \
+ ui/moc_tveditview.cpp \
+ ui/moc_browsekeyentry.cpp \
+ ui/moc_filterkeyentry.cpp \
+ ui/moc_tvkeyedit.cpp \
+ ui/moc_tvkeyedit_gen.cpp
+OBJMOC = moc_tableviewer.o \
+ ui/moc_commonwidgets.o \
+ ui/moc_tvbrowseview.o \
+ ui/moc_tvlistview.o \
+ ui/moc_tvfilterview.o \
+ ui/moc_tveditview.o \
+ ui/moc_browsekeyentry.o \
+ ui/moc_filterkeyentry.o \
+ ui/moc_tvkeyedit.o \
+ ui/moc_tvkeyedit_gen.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake: Makefile.in
+
+Makefile.in: tableviewer.pro
+ tmake tableviewer.pro -o Makefile.in
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ tableviewer.h \
+ db/common.h \
+ ../library/fileselector.h \
+ ../library/filemanager.h \
+ ../library/applnk.h \
+ ../library/qpeapplication.h \
+ ../library/qpedecoration_qws.h
+
+tableviewer.o: tableviewer.cpp \
+ tableviewer.h \
+ db/common.h \
+ ../library/fileselector.h \
+ ../library/filemanager.h \
+ ../library/applnk.h \
+ ui/tvbrowseview.h \
+ ui/tvfilterview.h \
+ ui/tvlistview.h \
+ ui/tveditview.h \
+ ui/tvkeyedit.h \
+ tvkeyedit_gen.h \
+ db/datacache.h \
+ ../library/resource.h
+
+ui/commonwidgets.o: ui/commonwidgets.cpp \
+ ../library/datebookmonth.h \
+ ../library/organizer.h \
+ ../library/xmlreader.h \
+ ../library/calendar.h \
+ ui/commonwidgets.h
+
+ui/tvbrowseview.o: ui/tvbrowseview.cpp \
+ ui/tvbrowseview.h \
+ ui/../db/common.h \
+ ui/browsekeyentry.h
+
+ui/tvfilterview.o: ui/tvfilterview.cpp \
+ ui/tvfilterview.h \
+ ui/filterkeyentry.h \
+ ui/../db/common.h
+
+ui/browsekeyentry.o: ui/browsekeyentry.cpp \
+ ui/browsekeyentry.h \
+ ui/../db/common.h \
+ ui/commonwidgets.h
+
+ui/filterkeyentry.o: ui/filterkeyentry.cpp \
+ ui/filterkeyentry.h \
+ ui/../db/common.h \
+ ui/commonwidgets.h
+
+ui/tvlistview.o: ui/tvlistview.cpp \
+ ui/tvlistview.h \
+ ui/../db/common.h
+
+ui/tveditview.o: ui/tveditview.cpp \
+ ui/tveditview.h \
+ ui/../db/common.h \
+ ui/commonwidgets.h
+
+ui/tvkeyedit.o: ui/tvkeyedit.cpp \
+ ui/tvkeyedit.h \
+ tvkeyedit_gen.h \
+ ui/../db/common.h
+
+db/datacache.o: db/datacache.cpp \
+ db/datacache.h \
+ db/common.h \
+ db/xmlsource.h \
+ db/csvsource.h
+
+db/xmlsource.o: db/xmlsource.cpp \
+ db/xmlsource.h \
+ db/datacache.h \
+ db/common.h
+
+db/csvsource.o: db/csvsource.cpp \
+ db/csvsource.h \
+ db/datacache.h \
+ db/common.h
+
+db/common.o: db/common.cpp \
+ ../library/timestring.h \
+ db/common.h \
+ db/datacache.h
+
+ui/tvkeyedit_gen.h: ui/tvkeyedit_gen.ui
+ $(UIC) ui/tvkeyedit_gen.ui -o $(INTERFACE_DECL_PATH)/ui/tvkeyedit_gen.h
+
+tvkeyedit_gen.h: ui/tvkeyedit_gen.ui
+ $(UIC) ui/tvkeyedit_gen.ui -o tvkeyedit_gen.h
+
+ui/tvkeyedit_gen.cpp: ui/tvkeyedit_gen.ui
+ $(UIC) ui/tvkeyedit_gen.ui -i tvkeyedit_gen.h -o ui/tvkeyedit_gen.cpp
+
+ui/tvkeyedit_gen.o: ui/tvkeyedit_gen.cpp \
+ ui/tvkeyedit_gen.h \
+ ui/tvkeyedit_gen.ui
+
+moc_tableviewer.o: moc_tableviewer.cpp \
+ tableviewer.h \
+ db/common.h \
+ ../library/fileselector.h \
+ ../library/filemanager.h \
+ ../library/applnk.h
+
+ui/moc_commonwidgets.o: ui/moc_commonwidgets.cpp \
+ ui/commonwidgets.h
+
+ui/moc_tvbrowseview.o: ui/moc_tvbrowseview.cpp \
+ ui/tvbrowseview.h \
+ ui/../db/common.h
+
+ui/moc_tvlistview.o: ui/moc_tvlistview.cpp \
+ ui/tvlistview.h \
+ ui/../db/common.h
+
+ui/moc_tvfilterview.o: ui/moc_tvfilterview.cpp \
+ ui/tvfilterview.h \
+ ui/filterkeyentry.h \
+ ui/../db/common.h
+
+ui/moc_tveditview.o: ui/moc_tveditview.cpp \
+ ui/tveditview.h \
+ ui/../db/common.h
+
+ui/moc_browsekeyentry.o: ui/moc_browsekeyentry.cpp \
+ ui/browsekeyentry.h \
+ ui/../db/common.h
+
+ui/moc_filterkeyentry.o: ui/moc_filterkeyentry.cpp \
+ ui/filterkeyentry.h \
+ ui/../db/common.h
+
+ui/moc_tvkeyedit.o: ui/moc_tvkeyedit.cpp \
+ ui/tvkeyedit.h \
+ tvkeyedit_gen.h \
+ ui/../db/common.h
+
+ui/moc_tvkeyedit_gen.o: ui/moc_tvkeyedit_gen.cpp \
+ ui/tvkeyedit_gen.h
+
+moc_tableviewer.cpp: tableviewer.h
+ $(MOC) tableviewer.h -o moc_tableviewer.cpp
+
+ui/moc_commonwidgets.cpp: ui/commonwidgets.h
+ $(MOC) ui/commonwidgets.h -o ui/moc_commonwidgets.cpp
+
+ui/moc_tvbrowseview.cpp: ui/tvbrowseview.h
+ $(MOC) ui/tvbrowseview.h -o ui/moc_tvbrowseview.cpp
+
+ui/moc_tvlistview.cpp: ui/tvlistview.h
+ $(MOC) ui/tvlistview.h -o ui/moc_tvlistview.cpp
+
+ui/moc_tvfilterview.cpp: ui/tvfilterview.h
+ $(MOC) ui/tvfilterview.h -o ui/moc_tvfilterview.cpp
+
+ui/moc_tveditview.cpp: ui/tveditview.h
+ $(MOC) ui/tveditview.h -o ui/moc_tveditview.cpp
+
+ui/moc_browsekeyentry.cpp: ui/browsekeyentry.h
+ $(MOC) ui/browsekeyentry.h -o ui/moc_browsekeyentry.cpp
+
+ui/moc_filterkeyentry.cpp: ui/filterkeyentry.h
+ $(MOC) ui/filterkeyentry.h -o ui/moc_filterkeyentry.cpp
+
+ui/moc_tvkeyedit.cpp: ui/tvkeyedit.h
+ $(MOC) ui/tvkeyedit.h -o ui/moc_tvkeyedit.cpp
+
+ui/moc_tvkeyedit_gen.cpp: ui/tvkeyedit_gen.h
+ $(MOC) ui/tvkeyedit_gen.h -o ui/moc_tvkeyedit_gen.cpp
+
+
diff --git a/noncore/apps/tableviewer/README b/noncore/apps/tableviewer/README
new file mode 100644
index 0000000..cd479e5
--- a/dev/null
+++ b/noncore/apps/tableviewer/README
@@ -0,0 +1,29 @@
+Table Viewer;
+
+This application is still in development, very buggy and leaks memory like
+a sieve. There are still a few major features/design work to be done. Once
+The app has settled (i.e. implementation of initial design completed) the
+focus will switch from features to making the code worthy of Trolltech.
+This means finding all the memory leaks, possibly some restructoring of code
+for future maintainability and ensuring that the code is readable
+(reasonable names for classes and vars.)
+
+For convenience there is a db.xml file included that is generated from the
+CIA World fact book, 11-May-01. The current version of this file should always work with the current version of the tableviewer application
+
+Major design work yet to be completed
+
+* ensure that only reasonable controls are enabled.
+* implement delete item & delete keys
+* loading dialogs
+* filterview -> dialog
+* only do sensible things if no keys set. includes;
+ No list view,
+ No filter view,
+ No edit item.
+* Tool bar in both 'views'
+* only build widgets as needed
+* click on scrollview to change key type, (remove key dialog)
+* fix navigate buttons
+
+This README will also be removed once the major design work is done.
diff --git a/noncore/apps/tableviewer/browsekeyentry.cpp b/noncore/apps/tableviewer/browsekeyentry.cpp
new file mode 100644
index 0000000..04e7902
--- a/dev/null
+++ b/noncore/apps/tableviewer/browsekeyentry.cpp
@@ -0,0 +1,242 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "browsekeyentry.h"
+
+#include <qtoolbutton.h>
+#include <qwidgetstack.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qpopupmenu.h>
+#include <qhbox.h>
+#include <qdatetime.h>
+
+//#include <iostream.h>
+#include <qheader.h>
+// For qWarning(const char *)
+
+/*!
+ \class TVBrowseKeyEntry
+ \brief a Widget used enter keys into the TVBrowseViewWidget
+
+ The TVBrowseKeyEntry Widget provides the facility to enter
+ various key types to be search on in the table. The key can be changed
+ and the entry field will update to the correct sort of widget appropriately
+*/
+
+/*!
+ Constructs the widget
+*/
+TVBrowseKeyEntry::TVBrowseKeyEntry(QWidget *parent, const char *name, WFlags f)
+ : QWidget(parent, name, f)
+{
+ int stack_elem = 0;
+ QHBoxLayout *h_layout = new QHBoxLayout(this);
+
+ textKey = new QLineEdit(this, 0);
+
+ dateKey = new QHBox(this, 0);
+ dayKey = new QLineEdit(dateKey, 0);
+ monthKey = new QLineEdit(dateKey, 0);
+ yearKey = new QLineEdit(dateKey, 0);
+
+ timeKey = new QHBox(this, 0);
+ hourKey = new QLineEdit(timeKey, 0);
+ minuteKey = new QLineEdit(timeKey, 0);
+ secondKey = new QLineEdit(timeKey, 0);
+
+ resetButton = new QPushButton(this, "reset");
+ resetButton->setMinimumSize(QSize(50, 0));
+ resetButton->setText(tr("Reset"));
+
+ changeKeyButton = new QToolButton(this, "changekey");
+ // TODO The icon stuff.
+ changeKeyButton->setText(tr("key"));
+
+ totalKeys = 0;
+ ts = 0;
+ keyMenu = new QPopupMenu(this, "keymenu");
+
+ ws = new QWidgetStack(this, 0);
+ ws->addWidget(textKey, stack_elem++);
+ ws->addWidget(timeKey, stack_elem++);
+ ws->addWidget(dateKey, stack_elem++);
+
+ ws->raiseWidget(0);
+
+ // TODO connect slots and signals....
+ connect(changeKeyButton, SIGNAL(clicked()),
+ this, SLOT(changeKeyMenuSlot()));
+ connect(resetButton, SIGNAL(clicked()),
+ this, SLOT(resetKeySlot()));
+
+ connect(textKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+
+ connect(dayKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+ connect(monthKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+ connect(yearKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+
+ connect(secondKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+ connect(minuteKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+ connect(hourKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+
+ h_layout->addWidget(ws);
+ h_layout->addWidget(resetButton);
+ h_layout->addWidget(changeKeyButton);
+}
+
+/*!
+ Destructs the widget
+*/
+TVBrowseKeyEntry::~TVBrowseKeyEntry()
+{
+}
+
+/*!
+ Changes which key the user intends to search on
+
+ \param id_param the index of the key future searches should be base on
+*/
+void TVBrowseKeyEntry::changeKeySlot(int id_param)
+{
+ emit sortChanged(id_param);
+ switch(ts->kRep->getKeyType(ts->current_column)) {
+ /* work out what to raise */
+ case kt_string:
+ case kt_int:
+ ws->raiseWidget(0);
+ break;
+ case kt_time:
+ ws->raiseWidget(1);
+ break;
+ case kt_date:
+ ws->raiseWidget(2);
+ break;
+ default:
+ return;
+ }
+}
+
+/*!
+ Opens the change key menu
+*/
+void TVBrowseKeyEntry::changeKeyMenuSlot()
+{
+ if(ts)
+ keyMenu->exec(changeKeyButton->mapToGlobal(QPoint(0,0)));
+}
+/*!
+ Blanks the key entry widget
+ \TODO the actual implmentation
+*/
+void TVBrowseKeyEntry::resetKeySlot() {
+ ;
+}
+
+void TVBrowseKeyEntry::setTableState(TableState *t) {
+ int i;
+ ts = t;
+
+ /* clear the old */
+ keyMenu->clear();
+
+ for (i = 0; i < t->kRep->getNumFields(); i++) {
+ keyMenu->insertItem(ts->kRep->getKeyName(i), this,
+ SLOT(changeKeySlot(int)), 0, i);
+ keyMenu->setItemParameter(i, i);
+ }
+}
+
+/*!
+ Searches on the current value of the key entry provided that the
+ current key is of type text WARNING, TODO fix memory leaks
+*/
+void TVBrowseKeyEntry::searchOnText()
+{
+ void *sendkey;
+ int tmp;
+
+ switch(ts->kRep->getKeyType(ts->current_column)) {
+ /* work out what to raise */
+ case kt_string:
+ sendkey = (void *)new QString(textKey->text());
+ break;
+ case kt_int: {
+ bool ok;
+ tmp = textKey->text().toInt(&ok);
+ sendkey = &tmp;
+ if (!ok)
+ return;
+ break;
+ }
+ case kt_time: {
+ bool ok;
+ int s,m,h;
+ s = secondKey->text().toInt(&ok);
+ if (!ok)
+ return;
+ m = minuteKey->text().toInt(&ok);
+ if (!ok)
+ return;
+ h = hourKey->text().toInt(&ok);
+ if (!ok)
+ return;
+ if(!QTime::isValid(h, m, s))
+ return;
+ sendkey = (void *) new QTime(h, m, s);
+ break;
+ }
+ case kt_date: {
+ bool ok;
+ int d,m,y;
+ d = dayKey->text().toInt(&ok);
+ if (!ok)
+ return;
+ m = monthKey->text().toInt(&ok);
+ if (!ok)
+ return;
+ y = yearKey->text().toInt(&ok);
+ if (!ok)
+ return;
+ if(!QDate::isValid(y, m, d))
+ return;
+ sendkey = (void *) new QDate(y, m, d);
+ break;
+ }
+ default:
+ qWarning("TVBrowseKeyEntry::searchOnText() "
+ "cannot work out data type");
+ return;
+ }
+ emit searchOnKey(ts->current_column, sendkey);
+}
+
+/*! \fn void TVBrowseKeyEntry::searchOnKey(int currentKeyId, void *v)
+
+ This signal indicates that a search on key index currentKeyId should be
+ done searching for the value v.
+*/
diff --git a/noncore/apps/tableviewer/db.xmlt b/noncore/apps/tableviewer/db.xmlt
new file mode 100644
index 0000000..d7734f6
--- a/dev/null
+++ b/noncore/apps/tableviewer/db.xmlt
@@ -0,0 +1,6279 @@
+<database name="World fact book">
+<header>
+<key name="Location" type="String">Location</key>
+<key name="Geographiccoordinates" type="String">Geographic coordinates</key>
+<key name="Area" type="Int">Area</key>
+<key name="Climate" type="String">Climate</key>
+<key name="Naturalresources" type="String">Natural resources</key>
+<key name="Population" type="Int">Population</key>
+<key name="Populationgrowthrate" type="String">Population growth rate</key>
+<key name="Sexratio" type="String">Sex ratio</key>
+<key name="Religions" type="String">Religions</key>
+<key name="Countryname" type="String">Country name</key>
+<key name="Capital" type="String">Capital</key>
+<key name="Flagdescription" type="String">Flag description</key>
+<key name="GDP" type="String">GDP</key>
+<key name="Industries" type="String">Industries</key>
+<key name="Exports" type="String">Exports</key>
+<key name="Imports" type="String">Imports</key>
+<key name="Currency" type="String">Currency</key>
+<key name="Airports" type="String">Airports</key>
+<key name="Illicitdrugs" type="String">Illicit drugs</key>
+</header>
+<record>
+<Location>Caribbean, island in the Caribbean Sea, north of Venezuela</Location>
+<Geographiccoordinates>12 30 N, 69 58 W</Geographiccoordinates>
+<Area>193</Area>
+<Climate>tropical marine; little seasonal temperature variation</Climate>
+<Naturalresources>NEGL; white sandy beaches</Naturalresources>
+<Population>69539</Population>
+<Populationgrowthrate>0.7% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.08 male(s)/female
+15-64 years: 0.92 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 82%, Protestant 8%, Hindu, Muslim, Confucian, Jewish</Religions>
+<Countryname>Aruba </Countryname>
+<Capital>Oranjestad</Capital>
+<Flagdescription>blue, with two narrow, horizontal, yellow stripes across the lower portion and a red, four-pointed star outlined in white in the upper hoist-side corner</Flagdescription>
+<GDP>purchasing power parity - $1.6 billion (1998 est.)</GDP>
+<Industries>tourism, transshipment facilities, oil refining</Industries>
+<Exports>$1.17 billion (including oil reexports)(1998)</Exports>
+<Imports>$1.52 billion (1998)</Imports>
+<Currency>1 Aruban florin (Af.) = 100 cents</Currency>
+<Airports>2 (1999 est.)</Airports>
+<Illicitdrugs>drug-money-laundering center and transit point for narcotics bound for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, islands between the Caribbean Sea and the North Atlantic Ocean, east-southeast of Puerto Rico</Location>
+<Geographiccoordinates>17 03 N, 61 48 W</Geographiccoordinates>
+<Area>442</Area>
+<Climate>tropical marine; little seasonal temperature variation</Climate>
+<Naturalresources>NEGL; pleasant climate fosters tourism</Naturalresources>
+<Population>66422</Population>
+<Populationgrowthrate>0.73% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.73 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican (predominant), other Protestant, some Roman Catholic</Religions>
+<Countryname>Antigua and Barbuda </Countryname>
+<Capital>Saint John's</Capital>
+<Flagdescription>red, with an inverted isosceles triangle based on the top edge of the flag; the triangle contains three horizontal bands of black (top), light blue, and white, with a yellow rising sun in the black band</Flagdescription>
+<GDP>purchasing power parity - $524 million (1999 est.)</GDP>
+<Industries>tourism, construction, light manufacturing (clothing, alcohol, household appliances)</Industries>
+<Exports>$38 million (1998)</Exports>
+<Imports>$330 million (1998)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>3 (1999 est.)</Airports>
+<Illicitdrugs>considered a minor transshipment point for narcotics bound for the US and Europe; more significant as a drug-money-laundering center</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Asia, north and west of Pakistan, east of Iran</Location>
+<Geographiccoordinates>33 00 N, 65 00 E</Geographiccoordinates>
+<Area>652000</Area>
+<Climate>arid to semiarid; cold winters and hot summers</Climate>
+<Naturalresources>natural gas, petroleum, coal, copper, chromite, talc, barites, sulfur, lead, zinc, iron ore, salt, precious and semiprecious stones</Naturalresources>
+<Population>25838797</Population>
+<Populationgrowthrate>3.54% (2000 est.)
+note: this rate reflects the continued return of refugees from Iran</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.08 male(s)/female
+65 years and over: 1.12 male(s)/female
+total population: 1.06 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim 84%, Shi'a Muslim 15%, other 1%</Religions>
+<Countryname>Afghanistan </Countryname>
+<Capital>Kabul</Capital>
+<Flagdescription>three equal horizontal bands of green (top), white, and black with a gold emblem centered on the three bands; the emblem features a temple-like structure with Islamic inscriptions above and below, encircled by a wreath on the left and right and by a bolder Islamic inscription above, all of which are encircled by two crossed scimitars
+note: the Taliban uses a plain white flag</Flagdescription>
+<GDP>purchasing power parity - $21 billion (1999 est.)</GDP>
+<Industries>small-scale production of textiles, soap, furniture, shoes, fertilizer, and cement; handwoven carpets; natural gas, oil, coal, copper</Industries>
+<Exports>$80 million (does not include opium) (1996 est.)</Exports>
+<Imports>$150 million (1996 est.)</Imports>
+<Currency>1 afghani (AF) = 100 puls</Currency>
+<Airports>46 (1999 est.)</Airports>
+<Illicitdrugs>world's largest illicit opium producer, surpassing Burma (potential production in 1999 - 1,670 metric tons; cultivation in 1999 - 51,500 hectares, a 23% increase over 1998); a major source of hashish; increasing number of heroin-processing laboratories being set up in the country; major political factions in the country profit from drug trade</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Africa, bordering the Mediterranean Sea, between Morocco and Tunisia</Location>
+<Geographiccoordinates>28 00 N, 3 00 E</Geographiccoordinates>
+<Area>2381740</Area>
+<Climate>arid to semiarid; mild, wet winters with hot, dry summers along coast; drier with cold winters and hot summers on high plateau; sirocco is a hot, dust/sand-laden wind especially common in summer</Climate>
+<Naturalresources>petroleum, natural gas, iron ore, phosphates, uranium, lead, zinc</Naturalresources>
+<Population>31193917</Population>
+<Populationgrowthrate>1.74% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.86 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim (state religion) 99%, Christian and Jewish 1%</Religions>
+<Countryname>Algeria </Countryname>
+<Capital>Algiers</Capital>
+<Flagdescription>two equal vertical bands of green (hoist side) and white with a red, five-pointed star within a red crescent; the crescent, star, and color green are traditional symbols of Islam (the state religion)</Flagdescription>
+<GDP>purchasing power parity - $147.6 billion (1999 est.)</GDP>
+<Industries>petroleum, natural gas, light industries, mining, electrical, petrochemical, food processing</Industries>
+<Exports>$13.7 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$9.3 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Algerian dinar (DA) = 100 centimes</Currency>
+<Airports>137 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southwestern Asia, bordering the Caspian Sea, between Iran and Russia</Location>
+<Geographiccoordinates>40 30 N, 47 30 E</Geographiccoordinates>
+<Area>86600</Area>
+<Climate>dry, semiarid steppe</Climate>
+<Naturalresources>petroleum, natural gas, iron ore, nonferrous metals, alumina</Naturalresources>
+<Population>7748163</Population>
+<Populationgrowthrate>0.27% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.65 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 93.4%, Russian Orthodox 2.5%, Armenian Orthodox 2.3%, other 1.8% (1995 est.)
+note: religious affiliation is still nominal in Azerbaijan; percentages for actual practicing adherents are much lower</Religions>
+<Countryname>Azerbaijan </Countryname>
+<Capital>Baku (Baki)</Capital>
+<Flagdescription>three equal horizontal bands of blue (top), red, and green; a crescent and eight-pointed star in white are centered in red band</Flagdescription>
+<GDP>purchasing power parity - $14 billion (1999 est.)</GDP>
+<Industries>petroleum and natural gas, petroleum products, oilfield equipment; steel, iron ore, cement; chemicals and petrochemicals; textiles</Industries>
+<Exports>$885 million (f.o.b., 1999 est.)</Exports>
+<Imports>$1.62 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 manat = 100 gopiks</Currency>
+<Airports>69 (1996 est.)</Airports>
+<Illicitdrugs>limited illicit cultivation of cannabis and opium poppy, mostly for CIS consumption; limited government eradication program; transshipment point for opiates via Iran, Central Asia, and Russia to Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Europe, bordering the Adriatic Sea and Ionian Sea, between Greece and Serbia and Montenegro</Location>
+<Geographiccoordinates>41 00 N, 20 00 E</Geographiccoordinates>
+<Area>28748</Area>
+<Climate>mild temperate; cool, cloudy, wet winters; hot, clear, dry summers; interior is cooler and wetter</Climate>
+<Naturalresources>petroleum, natural gas, coal, chromium, copper, timber, nickel, hydropower</Naturalresources>
+<Population>3490435</Population>
+<Populationgrowthrate>0.26% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.08 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.77 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 70%, Albanian Orthodox 20%, Roman Catholic 10%
+note: all mosques and churches were closed in 1967 and religious observances prohibited; in November 1990, Albania began allowing private religious practice</Religions>
+<Countryname>Albania </Countryname>
+<Capital>Tirana</Capital>
+<Flagdescription>red with a black two-headed eagle in the center</Flagdescription>
+<GDP>purchasing power parity - $5.6 billion (1999 est.)</GDP>
+<Industries>food processing, textiles and clothing; lumber, oil, cement, chemicals, mining, basic metals, hydropower</Industries>
+<Exports>$242 million (f.o.b., 1999 est.)</Exports>
+<Imports>$925 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 lek (L) = 100 qintars</Currency>
+<Airports>10 (1999 est.)</Airports>
+<Illicitdrugs>increasingly active transshipment point for Southwest Asian opiates, hashish, and cannabis transiting the Balkan route and - to a far lesser extent - cocaine from South America destined for Western Europe; limited opium and cannabis production; ethnic Albanian narcotrafficking organizations active and rapidly expanding in Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Southwestern Asia, east of Turkey</Location>
+<Geographiccoordinates>40 00 N, 45 00 E</Geographiccoordinates>
+<Area>29800</Area>
+<Climate>highland continental, hot summers, cold winters</Climate>
+<Naturalresources>small deposits of gold, copper, molybdenum, zinc, alumina</Naturalresources>
+<Population>3344336</Population>
+<Populationgrowthrate>-0.28% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Armenian Orthodox 94%</Religions>
+<Countryname>Armenia </Countryname>
+<Capital>Yerevan</Capital>
+<Flagdescription>three equal horizontal bands of red (top), blue, and orange</Flagdescription>
+<GDP>purchasing power parity - $9.9 billion (1999 est.)</GDP>
+<Industries>metal-cutting machine tools, forging-pressing machines, electric motors, tires, knitted wear, hosiery, shoes, silk fabric, washing machines, chemicals, trucks, watches, instruments, microelectronics</Industries>
+<Exports>$240 million (1999 est.)</Exports>
+<Imports>$782 million (1999 est.)</Imports>
+<Currency>1 dram = 100 luma</Currency>
+<Airports>11 (1996 est.)</Airports>
+<Illicitdrugs>illicit cultivator of cannabis mostly for domestic consumption; increasingly used as a transshipment point for illicit drugs - mostly opium and hashish - to Western Europe and the US via Iran, Central Asia, and Russia</Illicitdrugs>
+</record>
+<record>
+<Location>Southwestern Europe, between France and Spain</Location>
+<Geographiccoordinates>42 30 N, 1 30 E</Geographiccoordinates>
+<Area>468</Area>
+<Climate>temperate; snowy, cold winters and warm, dry summers</Climate>
+<Naturalresources>hydropower, mineral water, timber, iron ore, lead</Naturalresources>
+<Population>66824</Population>
+<Populationgrowthrate>1.22% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.1 male(s)/female
+15-64 years: 1.11 male(s)/female
+65 years and over: 1.01 male(s)/female
+total population: 1.1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic (predominant)</Religions>
+<Countryname>Andorra </Countryname>
+<Capital>Andorra la Vella</Capital>
+<Flagdescription>three equal vertical bands of blue (hoist side), yellow, and red with the national coat of arms centered in the yellow band; the coat of arms features a quartered shield; similar to the flags of Chad and Romania, which do not have a national coat of arms in the center, and the flag of Moldova, which does bear a national emblem</Flagdescription>
+<GDP>purchasing power parity - $1.2 billion (1996 est.)</GDP>
+<Industries>tourism (particularly skiing), cattle raising, timber, tobacco, banking</Industries>
+<Exports>$58 million (f.o.b., 1998)</Exports>
+<Imports>$1.077 billion (c.i.f., 1998)</Imports>
+<Currency>1 French franc (F) = 100 centimes; 1 peseta (Pta) = 100 centimos; the French and Spanish currencies are used</Currency>
+<Airports>none</Airports>
+</record>
+<record>
+<Location>Southern Africa, bordering the South Atlantic Ocean, between Namibia and Democratic Republic of the Congo</Location>
+<Geographiccoordinates>12 30 S, 18 30 E</Geographiccoordinates>
+<Area>1246700</Area>
+<Climate>semiarid in south and along coast to Luanda; north has cool, dry season (May to October) and hot, rainy season (November to April)</Climate>
+<Naturalresources>petroleum, diamonds, iron ore, phosphates, copper, feldspar, gold, bauxite, uranium</Naturalresources>
+<Population>10145267</Population>
+<Populationgrowthrate>2.15% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 47%, Roman Catholic 38%, Protestant 15% (1998 est.)</Religions>
+<Countryname>Angola </Countryname>
+<Capital>Luanda</Capital>
+<Flagdescription>two equal horizontal bands of red (top) and black with a centered yellow emblem consisting of a five-pointed star within half a cogwheel crossed by a machete (in the style of a hammer and sickle)</Flagdescription>
+<GDP>purchasing power parity - $11.6 billion (1999 est.)</GDP>
+<Industries>petroleum; diamonds, iron ore, phosphates, feldspar, bauxite, uranium, and gold; cement; basic metal products; fish processing; food processing; brewing; tobacco products; sugar; textiles</Industries>
+<Exports>$5 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$3 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 kwanza (NKz) = 100 lwei</Currency>
+<Airports>249 (1999 est.)</Airports>
+<Illicitdrugs>increasingly used as a transshipment point for cocaine and heroin destined for Western Europe and other African states</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, group of islands in the South Pacific Ocean, about one-half of the way from Hawaii to New Zealand</Location>
+<Geographiccoordinates>14 20 S, 170 00 W</Geographiccoordinates>
+<Area>199</Area>
+<Climate>tropical marine, moderated by southeast trade winds; annual rainfall averages about 3 m; rainy season from November to April, dry season from May to October; little seasonal temperature variation</Climate>
+<Naturalresources>pumice, pumicite</Naturalresources>
+<Population>65446</Population>
+<Populationgrowthrate>2.53% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 1.1 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian Congregationalist 50%, Roman Catholic 20%, Protestant and other 30%</Religions>
+<Countryname>American Samoa </Countryname>
+<Capital>Pago Pago</Capital>
+<Flagdescription>blue, with a white triangle edged in red that is based on the outer side and extends to the hoist side; a brown and white American bald eagle flying toward the hoist side is carrying two traditional Samoan symbols of authority, a staff and a war club</Flagdescription>
+<GDP>purchasing power parity - $150 million (1995 est.)</GDP>
+<Industries>tuna canneries (largely dependent on foreign fishing vessels), handicrafts</Industries>
+<Exports>$313 million (1996)</Exports>
+<Imports>$471 million (1996)</Imports>
+<Currency>1 US dollar (US$) = 100 cents</Currency>
+<Airports>4 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern South America, bordering the South Atlantic Ocean, between Chile and Uruguay</Location>
+<Geographiccoordinates>34 00 S, 64 00 W</Geographiccoordinates>
+<Area>2766890</Area>
+<Climate>mostly temperate; arid in southeast; subantarctic in southwest</Climate>
+<Naturalresources>fertile plains of the pampas, lead, zinc, tin, copper, iron ore, manganese, petroleum, uranium</Naturalresources>
+<Population>36955182</Population>
+<Populationgrowthrate>1.16% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>nominally Roman Catholic 92% (less than 20% practicing), Protestant 2%, Jewish 2%, other 4%</Religions>
+<Countryname>Argentina </Countryname>
+<Capital>Buenos Aires</Capital>
+<Flagdescription>three equal horizontal bands of light blue (top), white, and light blue; centered in the white band is a radiant yellow sun with a human face known as the Sun of May</Flagdescription>
+<GDP>purchasing power parity - $367 billion (1999 est.)</GDP>
+<Industries>food processing, motor vehicles, consumer durables, textiles, chemicals and petrochemicals, printing, metallurgy, steel</Industries>
+<Exports>$23 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$25 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 peso = 100 centavos</Currency>
+<Airports>1,359 (1999 est.)</Airports>
+<Illicitdrugs>increasing use as a transshipment country for cocaine headed for Europe and the US; increasing use as a money-laundering center; domestic consumption of drugs has skyrocketed</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, continent between the Indian Ocean and the South Pacific Ocean</Location>
+<Geographiccoordinates>27 00 S, 133 00 E</Geographiccoordinates>
+<Area>7686850</Area>
+<Climate>generally arid to semiarid; temperate in south and east; tropical in north</Climate>
+<Naturalresources>bauxite, coal, iron ore, copper, tin, silver, uranium, nickel, tungsten, mineral sands, lead, zinc, diamonds, natural gas, petroleum</Naturalresources>
+<Population>19169083</Population>
+<Populationgrowthrate>1.02% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.78 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican 26.1%, Roman Catholic 26%, other Christian 24.3%, non-Christian 11%</Religions>
+<Countryname>Australia </Countryname>
+<Capital>Canberra</Capital>
+<Flagdescription>blue with the flag of the UK in the upper hoist-side quadrant and a large seven-pointed star in the lower hoist-side quadrant; the remaining half is a representation of the Southern Cross constellation in white with one small five-pointed star and four, larger, seven-pointed stars</Flagdescription>
+<GDP>purchasing power parity - $416.2 billion (1999 est.)</GDP>
+<Industries>mining, industrial and transportation equipment, food processing, chemicals, steel</Industries>
+<Exports>$58 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$67 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Australian dollar ($A) = 100 cents</Currency>
+<Airports>408 (1999 est.)</Airports>
+<Illicitdrugs>Tasmania is one of the world's major suppliers of licit opiate products; government maintains strict controls over areas of opium poppy cultivation and output of poppy straw concentrate</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, islands in the Indian Ocean, northwest of Australia</Location>
+<Geographiccoordinates>12 14 S, 123 05 E</Geographiccoordinates>
+<Area>5</Area>
+<Climate>tropical</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population></Population>
+<Countryname>Ashmore and Cartier Islands </Countryname>
+<Flagdescription>the flag of Australia is used</Flagdescription>
+</record>
+<record>
+<Location>Central Europe, north of Italy and Slovenia</Location>
+<Geographiccoordinates>47 20 N, 13 20 E</Geographiccoordinates>
+<Area>83858</Area>
+<Climate>temperate; continental, cloudy; cold winters with frequent rain in lowlands and snow in mountains; cool summers with occasional showers</Climate>
+<Naturalresources>iron ore, oil, timber, magnesite, lead, coal, lignite, copper, hydropower</Naturalresources>
+<Population>8131111</Population>
+<Populationgrowthrate>0.25% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.61 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 78%, Protestant 5%, Muslim and other 17%</Religions>
+<Countryname>Austria </Countryname>
+<Capital>Vienna</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and red</Flagdescription>
+<GDP>purchasing power parity - $190.6 billion (1999 est.)</GDP>
+<Industries>construction, machinery, vehicles and parts, food, chemicals, lumber and wood processing, paper and paperboard, communications equipment, tourism (1997)</Industries>
+<Exports>$62.9 billion (1999 est.)</Exports>
+<Imports>$69.9 billion (1999 est.)</Imports>
+<Currency>1 Austrian schilling (AS) = 100 groschen</Currency>
+<Airports>55 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for Southwest Asian heroin and South American cocaine destined for Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, island in the Caribbean Sea, east of Puerto Rico</Location>
+<Geographiccoordinates>18 15 N, 63 10 W</Geographiccoordinates>
+<Area>91</Area>
+<Climate>tropical; moderated by northeast trade winds</Climate>
+<Naturalresources>salt, fish, lobster</Naturalresources>
+<Population>11797</Population>
+<Populationgrowthrate>2.93% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 0.79 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican 40%, Methodist 33%, Seventh-Day Adventist 7%, Baptist 5%, Roman Catholic 3%, other 12%</Religions>
+<Countryname>Anguilla </Countryname>
+<Capital>The Valley</Capital>
+<Flagdescription>blue, with the flag of the UK in the upper hoist-side quadrant and the Anguillan coat of arms centered in the outer half of the flag; the coat of arms depicts three orange dolphins in an interlocking circular design on a white background with blue wavy water below</Flagdescription>
+<GDP>purchasing power parity - $88 million (1998 est.)</GDP>
+<Industries>tourism, boat building, offshore financial services</Industries>
+<Exports>$4.5 million (1998)</Exports>
+<Imports>$57.6 million (1998)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>3 (1999 est.)</Airports>
+</record>
+<record>
+<Location>continent mostly south of the Antarctic Circle</Location>
+<Geographiccoordinates>90 00 S, 0 00 E</Geographiccoordinates>
+<Area>14000000</Area>
+<Climate>severe low temperatures vary with latitude, elevation, and distance from the ocean; East Antarctica is colder than West Antarctica because of its higher elevation; Antarctic Peninsula has the most moderate climate; higher temperatures occur in January along the coast and average slightly below freezing</Climate>
+<Naturalresources>none presently exploited; iron ore, chromium, copper, gold, nickel, platinum and other minerals, and coal and hydrocarbons have been found in small, uncommercial quantities</Naturalresources>
+<Population></Population>
+<Countryname>Antarctica </Countryname>
+<Airports>18
+note: 27 stations, operated by 16 national governments party to the Antarctic Treaty, have landing facilities for either helicopters and/or fixed-wing aircraft; commercial enterprises operate two additional air facilities; helicopter pads are available at 27 stations; runways at 15 locations are gravel, sea-ice, blue-ice, or compacted snow suitable for landing wheeled, fixed-wing aircraft; of these, 1 is greater than 3 km in length, 6 are between 2 km and 3 km in length, 3 are between 1 km and 2 km in length, 3 are less than 1 km in length, and 2 are of unknown length; snow surface skiways, limited to use by ski-equipped, fixed-wing aircraft,are available at another 15 locations; of these, 4 are greater than 3 km in length, 3 are between 2 km and 3 km in length, 2 are between 1 km and 2 km in length, 2 are less than 1 km in length, and 4 are of unknown length; airports generally subject to severe restrictions and limitations resulting from extreme seasonal and geographic conditions; airports do not meet ICAO standards; advance approval from the respective governmental or nongovernmental operating organization required for landing (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle East, archipelago in the Persian Gulf, east of Saudi Arabia</Location>
+<Geographiccoordinates>26 00 N, 50 33 E</Geographiccoordinates>
+<Area>620</Area>
+<Climate>arid; mild, pleasant winters; very hot, humid summers</Climate>
+<Naturalresources>oil, associated and nonassociated natural gas, fish</Naturalresources>
+<Population>634137</Population>
+<Populationgrowthrate>1.78% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.46 male(s)/female
+65 years and over: 1.04 male(s)/female
+total population: 1.3 male(s)/female (2000 est.)</Sexratio>
+<Religions>Shi'a Muslim 75%, Sunni Muslim 25%</Religions>
+<Countryname>Bahrain </Countryname>
+<Capital>Manama</Capital>
+<Flagdescription>red with a white serrated band (eight white points) on the hoist side</Flagdescription>
+<GDP>purchasing power parity - $8.6 billion (1999 est.)</GDP>
+<Industries>petroleum processing and refining, aluminum smelting, offshore banking, ship repairing; tourism</Industries>
+<Exports>$3.3 billion (f.o.b., 1998)</Exports>
+<Imports>$3.5 billion (f.o.b., 1998)</Imports>
+<Currency>1 Bahraini dinar (BD) = 1,000 fils</Currency>
+<Airports>3 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, island between the Caribbean Sea and the North Atlantic Ocean, northeast of Venezuela</Location>
+<Geographiccoordinates>13 10 N, 59 32 W</Geographiccoordinates>
+<Area>430</Area>
+<Climate>tropical; rainy season (June to October)</Climate>
+<Naturalresources>petroleum, fish, natural gas</Naturalresources>
+<Population>274540</Population>
+<Populationgrowthrate>0.55% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.63 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 67% (Anglican 40%, Pentecostal 8%, Methodist 7%, other 12%), Roman Catholic 4%, none 17%, other 12%</Religions>
+<Countryname>Barbados </Countryname>
+<Capital>Bridgetown</Capital>
+<Flagdescription>three equal vertical bands of blue (hoist side), gold, and blue with the head of a black trident centered on the gold band; the trident head represents independence and a break with the past (the colonial coat of arms contained a complete trident)</Flagdescription>
+<GDP>purchasing power parity - $2.9 billion (1998 est.)</GDP>
+<Industries>tourism, sugar, light manufacturing, component assembly for export</Industries>
+<Exports>$211.2 million (1998)</Exports>
+<Imports>$1.01 billion (1998)</Imports>
+<Currency>1 Barbadian dollar (Bds$) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+<Illicitdrugs>one of many Caribbean transshipment points for narcotics bound for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, north of South Africa</Location>
+<Geographiccoordinates>22 00 S, 24 00 E</Geographiccoordinates>
+<Area>600370</Area>
+<Climate>semiarid; warm winters and hot summers</Climate>
+<Naturalresources>diamonds, copper, nickel, salt, soda ash, potash, coal, iron ore, silver</Naturalresources>
+<Population>1576470</Population>
+<Populationgrowthrate>0.76% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.92 male(s)/female
+65 years and over: 0.69 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 50%, Christian 50%</Religions>
+<Countryname>Botswana </Countryname>
+<Capital>Gaborone</Capital>
+<Flagdescription>light blue with a horizontal white-edged black stripe in the center</Flagdescription>
+<GDP>purchasing power parity - $5.7 billion (1999 est.)</GDP>
+<Industries>diamonds, copper, nickel, coal, salt, soda ash, potash; livestock processing</Industries>
+<Exports>$2.36 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$2.05 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 pula (P) = 100 thebe</Currency>
+<Airports>92 (1999 est.)</Airports>
+</record>
+<record>
+<Location>North America, group of islands in the North Atlantic Ocean, east of North Carolina (US)</Location>
+<Geographiccoordinates>32 20 N, 64 45 W</Geographiccoordinates>
+<Area>58</Area>
+<Climate>subtropical; mild, humid; gales, strong winds common in winter</Climate>
+<Naturalresources>limestone, pleasant climate fostering tourism</Naturalresources>
+<Population>62997</Population>
+<Populationgrowthrate>0.75% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 0.98 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>non-Anglican Protestant 39%, Anglican 27%, Roman Catholic 15%, other 19%</Religions>
+<Countryname>Bermuda </Countryname>
+<Capital>Hamilton</Capital>
+<Flagdescription>red, with the flag of the UK in the upper hoist-side quadrant and the Bermudian coat of arms (white and blue shield with a red lion holding a scrolled shield showing the sinking of the ship Sea Venture off Bermuda in 1609) centered on the outer half of the flag</Flagdescription>
+<GDP>purchasing power parity - $2 billion (1999 est.)</GDP>
+<Industries>tourism, finance, insurance, structural concrete products, paints, perfumes, pharmaceuticals, ship repairing</Industries>
+<Exports>$32 million (1998 est.)</Exports>
+<Imports>$624 million (1998 est.)</Imports>
+<Currency>1 Bermudian dollar (Bd$) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Europe, bordering the North Sea, between France and the Netherlands</Location>
+<Geographiccoordinates>50 50 N, 4 00 E</Geographiccoordinates>
+<Area>30510</Area>
+<Climate>temperate; mild winters, cool summers; rainy, humid, cloudy</Climate>
+<Naturalresources>coal, natural gas</Naturalresources>
+<Population>10241506</Population>
+<Populationgrowthrate>0.18% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.69 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 75%, Protestant or other 25%</Religions>
+<Countryname>Belgium </Countryname>
+<Capital>Brussels</Capital>
+<Flagdescription>three equal vertical bands of black (hoist side), yellow, and red; the design was based on the flag of France</Flagdescription>
+<GDP>purchasing power parity - $243.4 billion (1999 est.)</GDP>
+<Industries>engineering and metal products, motor vehicle assembly, processed food and beverages, chemicals, basic metals, textiles, glass, petroleum, coal</Industries>
+<Exports>$187.3 billion (f.o.b., 1999)</Exports>
+<Imports>$172.8 billion (f.o.b., 1999)</Imports>
+<Currency>1 Belgian franc (BF) = 100 centimes</Currency>
+<Airports>42 (1999 est.)</Airports>
+<Illicitdrugs>source of precursor chemicals for South American cocaine processors; transshipment point for cocaine, heroin, hashish, and marijuana entering Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, chain of islands in the North Atlantic Ocean, southeast of Florida</Location>
+<Geographiccoordinates>24 15 N, 76 00 W</Geographiccoordinates>
+<Area>13940</Area>
+<Climate>tropical marine; moderated by warm waters of Gulf Stream</Climate>
+<Naturalresources>salt, aragonite, timber</Naturalresources>
+<Population>294982</Population>
+<Populationgrowthrate>1.01% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.02 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.72 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Baptist 32%, Anglican 20%, Roman Catholic 19%, Methodist 6%, Church of God 6%, other Protestant 12%, none or unknown 3%, other 2%</Religions>
+<Countryname>The Bahamas </Countryname>
+<Capital>Nassau</Capital>
+<Flagdescription>three equal horizontal bands of aquamarine (top), gold, and aquamarine, with a black equilateral triangle based on the hoist side</Flagdescription>
+<GDP>purchasing power parity - $5.58 billion (1998 est.)</GDP>
+<Industries>tourism, banking, cement, oil refining and transshipment, salt, rum, aragonite, pharmaceuticals, spiral-welded steel pipe</Industries>
+<Exports>$362.8 million (1998)</Exports>
+<Imports>$1.74 billion (1998)</Imports>
+<Currency>1 Bahamian dollar (B$) = 100 cents</Currency>
+<Airports>62 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for cocaine and marijuana bound for US and Europe; banking industry vulnerable to money laundering</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Asia, bordering the Bay of Bengal, between Burma and India</Location>
+<Geographiccoordinates>24 00 N, 90 00 E</Geographiccoordinates>
+<Area>144000</Area>
+<Climate>tropical; cool, dry winter (October to March); hot, humid summer (March to June); cool, rainy monsoon (June to October)</Climate>
+<Naturalresources>natural gas, arable land, timber</Naturalresources>
+<Population>129194224</Population>
+<Populationgrowthrate>1.59% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 1.19 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 88.3%, Hindu 10.5%, other 1.2%</Religions>
+<Countryname>Bangladesh </Countryname>
+<Capital>Dhaka</Capital>
+<Flagdescription>green with a large red disk slightly to the hoist side of center; the red sun of freedom represents the blood shed to achieve independence; the green field symbolizes the lush countryside, and secondarily, the traditional color of Islam</Flagdescription>
+<GDP>purchasing power parity - $187 billion (1999 est.)</GDP>
+<Industries>cotton textiles, jute, garments, tea processing, paper newsprint, cement, chemical fertilizer, light engineering, sugar</Industries>
+<Exports>$5.1 billion (1998)</Exports>
+<Imports>$8.01 billion (1998)</Imports>
+<Currency>1 taka (Tk) = 100 poisha</Currency>
+<Airports>16 (1999 est.)</Airports>
+<Illicitdrugs>transit country for illegal drugs produced in neighboring countries</Illicitdrugs>
+</record>
+<record>
+<Location>Middle America, bordering the Caribbean Sea, between Guatemala and Mexico</Location>
+<Geographiccoordinates>17 15 N, 88 45 W</Geographiccoordinates>
+<Area>22960</Area>
+<Climate>tropical; very hot and humid; rainy season (May to February)</Climate>
+<Naturalresources>arable land potential, timber, fish, hydropower</Naturalresources>
+<Population>249183</Population>
+<Populationgrowthrate>2.75% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.95 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 62%, Protestant 30% (Anglican 12%, Methodist 6%, Mennonite 4%, Seventh-Day Adventist 3%, Pentecostal 2%, Jehovah's Witnesses 1%, other 2%), none 2%, other 6% (1980)</Religions>
+<Countryname>Belize </Countryname>
+<Capital>Belmopan</Capital>
+<Flagdescription>blue with a narrow red stripe along the top and the bottom edges; centered is a large white disk bearing the coat of arms; the coat of arms features a shield flanked by two workers in front of a mahogany tree with the related motto SUB UMBRA FLOREO (I Flourish in the Shade) on a scroll at the bottom, all encircled by a green garland</Flagdescription>
+<GDP>purchasing power parity - $740 million (1999 est.)</GDP>
+<Industries>garment production, food processing, tourism, construction</Industries>
+<Exports>$150 million (f.o.b., 1998)</Exports>
+<Imports>$320 million (c.i.f., 1998)</Imports>
+<Currency>1 Belizean dollar (Bz$) = 100 cents</Currency>
+<Airports>44 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for cocaine; small-scale illicit producer of cannabis for the international drug trade; minor money-laundering center</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Europe, bordering the Adriatic Sea and Croatia</Location>
+<Geographiccoordinates>44 00 N, 18 00 E</Geographiccoordinates>
+<Area>51129</Area>
+<Climate>hot summers and cold winters; areas of high elevation have short, cool summers and long, severe winters; mild, rainy winters along coast</Climate>
+<Naturalresources>coal, iron, bauxite, manganese, forests, copper, chromium, lead, zinc, hydropower</Naturalresources>
+<Population>3835777</Population>
+<Populationgrowthrate>3.1% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.07 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.06 male(s)/female
+65 years and over: 0.73 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 40%, Orthodox 31%, Roman Catholic 15%, Protestant 4%, other 10%</Religions>
+<Countryname>Bosnia and Herzegovina </Countryname>
+<Capital>Sarajevo</Capital>
+<Flagdescription>a wide medium blue vertical band on the fly side with a yellow isosceles triangle abutting the band and the top of the flag; the remainder of the flag is medium blue with seven full five-pointed white stars and two half stars top and bottom along the hypotenuse of the triangle</Flagdescription>
+<GDP>purchasing power parity - $6.2 billion (1999 est.)</GDP>
+<Industries>steel, coal, iron ore, lead, zinc, manganese, bauxite, vehicle assembly, textiles, tobacco products, wooden furniture, tank and aircraft assembly, domestic appliances, oil refining (much of capacity damaged or shut down) (1995)</Industries>
+<Exports>$450 million (1997 est.)</Exports>
+<Imports>$2.95 billion (1997 est.)</Imports>
+<Currency>1 convertible marka (KM) = 100 convertible pfenniga</Currency>
+<Airports>27 (1999 est.)</Airports>
+<Illicitdrugs>minor transit point for marijuana and opiate trafficking routes to Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Central South America, southwest of Brazil</Location>
+<Geographiccoordinates>17 00 S, 65 00 W</Geographiccoordinates>
+<Area>1098580</Area>
+<Climate>varies with altitude; humid and tropical to cold and semiarid</Climate>
+<Naturalresources>tin, natural gas, petroleum, zinc, tungsten, antimony, silver, iron, lead, gold, timber, hydropower</Naturalresources>
+<Population>8152620</Population>
+<Populationgrowthrate>1.83% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.82 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 95%, Protestant (Evangelical Methodist)</Religions>
+<Countryname>Bolivia </Countryname>
+<Capital>La Paz (seat of government); Sucre (legal capital and seat of judiciary)</Capital>
+<Flagdescription>three equal horizontal bands of red (top), yellow, and green with the coat of arms centered on the yellow band; similar to the flag of Ghana, which has a large black five-pointed star centered in the yellow band</Flagdescription>
+<GDP>purchasing power parity - $24.2 billion (1999 est.)</GDP>
+<Industries>mining, smelting, petroleum, food and beverages, tobacco, handicrafts, clothing</Industries>
+<Exports>$1.1 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$1.6 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 boliviano ($B) = 100 centavos</Currency>
+<Airports>1,109 (1999 est.)</Airports>
+<Illicitdrugs>world's third-largest cultivator of coca (after Peru and Colombia) with an estimated 21,800 hectares under cultivation in 1999, a 45% decrease in overall cultivation of coca from 1998 levels; intermediate coca products and cocaine exported to or through Colombia, Brazil, Argentina, and Chile to the US and other international drug markets; alternative crop program aims to reduce illicit coca cultivation</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, bordering the Andaman Sea and the Bay of Bengal, between Bangladesh and Thailand</Location>
+<Geographiccoordinates>22 00 N, 98 00 E</Geographiccoordinates>
+<Area>678500</Area>
+<Climate>tropical monsoon; cloudy, rainy, hot, humid summers (southwest monsoon, June to September); less cloudy, scant rainfall, mild temperatures, lower humidity during winter (northeast monsoon, December to April)</Climate>
+<Naturalresources>petroleum, timber, tin, antimony, zinc, copper, tungsten, lead, coal, some marble, limestone, precious stones, natural gas, hydropower</Naturalresources>
+<Population>41734853</Population>
+<Populationgrowthrate>0.64% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Buddhist 89%, Christian 4% (Baptist 3%, Roman Catholic 1%), Muslim 4%, animist 1%, other 2%</Religions>
+<Countryname>Burma </Countryname>
+<Capital>Rangoon (regime refers to the capital as Yangon)</Capital>
+<Flagdescription>red with a blue rectangle in the upper hoist-side corner bearing, all in white, 14 five-pointed stars encircling a cogwheel containing a stalk of rice; the 14 stars represent the 14 administrative divisions</Flagdescription>
+<GDP>purchasing power parity - $59.4 billion (1999 est.)</GDP>
+<Industries>agricultural processing; textiles and footwear; wood and wood products; copper, tin, tungsten, iron; construction materials; pharmaceuticals; fertilizer</Industries>
+<Exports>$1.2 billion (1998)</Exports>
+<Imports>$2.5 billion (1998)</Imports>
+<Currency>1 kyat (K) = 100 pyas</Currency>
+<Airports>80 (1999 est.)</Airports>
+<Illicitdrugs>world's second largest producer of illicit opium, after Afghanistan (potential production in 1999 - 1,090 metric tons, down 38% due to drought; cultivation in 1999 - 89,500 hectares, a 31% decline from 1998); surrender of drug warlord KHUN SA's Mong Tai Army in January 1996 was hailed by Rangoon as a major counternarcotics success, but lack of government will and ability to take on major narcotrafficking groups and lack of serious commitment against money laundering continues to hinder the overall antidrug effort; becoming a major source of methamphetamines for regional consumption</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean, between Nigeria and Togo</Location>
+<Geographiccoordinates>9 30 N, 2 15 E</Geographiccoordinates>
+<Area>112620</Area>
+<Climate>tropical; hot, humid in south; semiarid in north</Climate>
+<Naturalresources>small offshore oil deposits, limestone, marble, timber</Naturalresources>
+<Population>6395919</Population>
+<Populationgrowthrate>3.03% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 70%, Muslim 15%, Christian 15%</Religions>
+<Countryname>Benin </Countryname>
+<Capital>Porto-Novo is the official capital; Cotonou is the seat of government</Capital>
+<Flagdescription>two equal horizontal bands of yellow (top) and red with a vertical green band on the hoist side</Flagdescription>
+<GDP>purchasing power parity - $8.1 billion (1999 est.)</GDP>
+<Industries>textiles, cigarettes; beverages, food; construction materials, petroleum</Industries>
+<Exports>$396 million (f.o.b., 1999)</Exports>
+<Imports>$566 million (f.o.b., 1999)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>5 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for narcotics associated with Nigerian trafficking organizations and most commonly destined for Western Europe and the US</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Europe, east of Poland</Location>
+<Geographiccoordinates>53 00 N, 28 00 E</Geographiccoordinates>
+<Area>207600</Area>
+<Climate>cold winters, cool and moist summers; transitional between continental and maritime</Climate>
+<Naturalresources>forests, peat deposits, small quantities of oil and natural gas</Naturalresources>
+<Population>10366719</Population>
+<Populationgrowthrate>-0.17% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.94 male(s)/female
+65 years and over: 0.49 male(s)/female
+total population: 0.88 male(s)/female (2000 est.)</Sexratio>
+<Religions>Eastern Orthodox 80%, other (including Roman Catholic, Protestant, Jewish, and Muslim) 20% (1997 est.)</Religions>
+<Countryname>Belarus </Countryname>
+<Capital>Minsk</Capital>
+<Flagdescription>red horizontal band (top) and green horizontal band one-half the width of the red band; a white vertical stripe on the hoist side bears the Belarusian national ornament in red</Flagdescription>
+<GDP>purchasing power parity - $55.2 billion (1999 est.)</GDP>
+<Industries>metal-cutting machine tools, tractors, trucks, earth movers, motorcycles, TV sets, chemical fibers, fertilizer, textiles, radios, refrigerators</Industries>
+<Exports>$6 billion (f.o.b., 1999)</Exports>
+<Imports>$6.4 billion (c.i.f., 1999)</Imports>
+<Currency>Belarusian rubel (BR)</Currency>
+<Airports>118 (1996 est.)</Airports>
+<Illicitdrugs>limited cultivation of opium poppy and cannabis, mostly for the domestic market; transshipment point for illicit drugs to and via Russia, and to the Baltics and Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, group of islands in the South Pacific Ocean, east of Papua New Guinea</Location>
+<Geographiccoordinates>8 00 S, 159 00 E</Geographiccoordinates>
+<Area>28450</Area>
+<Climate>tropical monsoon; few extremes of temperature and weather</Climate>
+<Naturalresources>fish, forests, gold, bauxite, phosphates, lead, zinc, nickel</Naturalresources>
+<Population>466194</Population>
+<Populationgrowthrate>3.04% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.97 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican 34%, Roman Catholic 19%, Baptist 17%, United (Methodist/Presbyterian) 11%, Seventh-Day Adventist 10%, other Protestant 5%, indigenous beliefs 4%</Religions>
+<Countryname>Solomon Islands </Countryname>
+<Capital>Honiara</Capital>
+<Flagdescription>divided diagonally by a thin yellow stripe from the lower hoist-side corner; the upper triangle (hoist side) is blue with five white five-pointed stars arranged in an X pattern; the lower triangle is green</Flagdescription>
+<GDP>purchasing power parity - $1.21 billion (1999 est.)</GDP>
+<Industries>fish (tuna), mining, timber</Industries>
+<Exports>$142 million (f.o.b., 1998 est.)</Exports>
+<Imports>$160 million (c.i.f., 1998 est.)</Imports>
+<Currency>1 Solomon Islands dollar (SI$) = 100 cents</Currency>
+<Airports>33 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, island in the Caribbean Sea, about one-fourth of the way from Haiti to Jamaica</Location>
+<Geographiccoordinates>18 25 N, 75 02 W</Geographiccoordinates>
+<Area>5</Area>
+<Climate>marine, tropical</Climate>
+<Naturalresources>guano</Naturalresources>
+<Population></Population>
+<Countryname>Navassa Island </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+</record>
+<record>
+<Location>Eastern South America, bordering the Atlantic Ocean</Location>
+<Geographiccoordinates>10 00 S, 55 00 W</Geographiccoordinates>
+<Area>8511965</Area>
+<Climate>mostly tropical, but temperate in south</Climate>
+<Naturalresources>bauxite, gold, iron ore, manganese, nickel, phosphates, platinum, tin, uranium, petroleum, hydropower, timber</Naturalresources>
+<Population>172860370</Population>
+<Populationgrowthrate>0.94% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.68 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic (nominal) 80%</Religions>
+<Countryname>Brazil </Countryname>
+<Capital>Brasilia</Capital>
+<Flagdescription>green with a large yellow diamond in the center bearing a blue celestial globe with 27 white five-pointed stars (one for each state and the Federal District) arranged in the same pattern as the night sky over Brazil; the globe has a white equatorial band with the motto ORDEM E PROGRESSO (Order and Progress)</Flagdescription>
+<GDP>purchasing power parity - $1.057 trillion (1999 est.)</GDP>
+<Industries>textiles, shoes, chemicals, cement, lumber, iron ore, tin, steel, aircraft, motor vehicles and parts, other machinery and equipment</Industries>
+<Exports>$46.9 billion (f.o.b., 1999)</Exports>
+<Imports>$48.7 billion (f.o.b., 1999)</Imports>
+<Currency>1 real (R$) = 100 centavos</Currency>
+<Airports>3,277 (1999 est.)</Airports>
+<Illicitdrugs>limited illicit producer of cannabis, minor coca cultivation in the Amazon region, mostly used for domestic consumption; government has a large-scale eradication program to control cannabis; important transshipment country for Bolivian, Colombian, and Peruvian cocaine headed for the US and Europe; increasingly used by traffickers as a way station for narcotics air transshipments between Peru and Colombia; upsurge in drug-related violence and weapons smuggling</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, islands in the southern Mozambique Channel, about one-half of the way from Madagascar to Mozambique</Location>
+<Geographiccoordinates>21 30 S, 39 50 E</Geographiccoordinates>
+<Area>0</Area>
+<Climate>tropical</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Bassas da India </Countryname>
+<Flagdescription>the flag of France is used</Flagdescription>
+</record>
+<record>
+<Location>Southern Asia, between China and India</Location>
+<Geographiccoordinates>27 30 N, 90 30 E</Geographiccoordinates>
+<Area>47000</Area>
+<Climate>varies; tropical in southern plains; cool winters and hot summers in central valleys; severe winters and cool summers in Himalayas</Climate>
+<Naturalresources>timber, hydropower, gypsum, calcium carbide</Naturalresources>
+<Population>2005222</Population>
+<Populationgrowthrate>2.19% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.08 male(s)/female
+15-64 years: 1.06 male(s)/female
+65 years and over: 1.03 male(s)/female
+total population: 1.07 male(s)/female (2000 est.)</Sexratio>
+<Religions>Lamaistic Buddhist 75%, Indian- and Nepalese-influenced Hinduism 25%</Religions>
+<Countryname>Bhutan </Countryname>
+<Capital>Thimphu</Capital>
+<Flagdescription>divided diagonally from the lower hoist side corner; the upper triangle is yellow and the lower triangle is orange; centered along the dividing line is a large black and white dragon facing away from the hoist side</Flagdescription>
+<GDP>purchasing power parity - $2.1 billion (1999 est.)</GDP>
+<Industries>cement, wood products, processed fruits, alcoholic beverages, calcium carbide</Industries>
+<Exports>$111 million (f.o.b., 1998)</Exports>
+<Imports>$136 million (c.i.f., 1998)</Imports>
+<Currency>1 ngultrum (Nu) = 100 chetrum; note - Indian currency is also legal tender</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Europe, bordering the Black Sea, between Romania and Turkey</Location>
+<Geographiccoordinates>43 00 N, 25 00 E</Geographiccoordinates>
+<Area>110910</Area>
+<Climate>temperate; cold, damp winters; hot, dry summers</Climate>
+<Naturalresources>bauxite, copper, lead, zinc, coal, timber, arable land</Naturalresources>
+<Population>7796694</Population>
+<Populationgrowthrate>-1.16% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.74 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Bulgarian Orthodox 83.5%, Muslim 13%, Roman Catholic 1.5%, Jewish 0.8%, Uniate Catholic 0.2%, Protestant, Gregorian-Armenian, and other 1% (1998)</Religions>
+<Countryname>Bulgaria </Countryname>
+<Capital>Sofia</Capital>
+<Flagdescription>three equal horizontal bands of white (top), green, and red; the national emblem formerly on the hoist side of the white stripe has been removed - it contained a rampant lion within a wreath of wheat ears below a red five-pointed star and above a ribbon bearing the dates 681 (first Bulgarian state established) and 1944 (liberation from Nazi control)</Flagdescription>
+<GDP>purchasing power parity - $34.9 billion (1999 est.)</GDP>
+<Industries>machine building and metal working, food processing, chemicals, construction materials, ferrous and nonferrous metals, nuclear fuel</Industries>
+<Exports>$3.8 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$5.3 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 lev (Lv) = 100 stotinki</Currency>
+<Airports>216 (1999 est.)</Airports>
+<Illicitdrugs>major European transshipment point for Southwest Asian heroin and, to a lesser degree, South American cocaine for the European market; limited producer of precursor chemicals</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, island in the South Atlantic Ocean, south-southwest of the Cape of Good Hope (South Africa)</Location>
+<Geographiccoordinates>54 26 S, 3 24 E</Geographiccoordinates>
+<Area>58</Area>
+<Climate>antarctic</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Bouvet Island </Countryname>
+<Flagdescription>the flag of Norway is used</Flagdescription>
+</record>
+<record>
+<Location>Southeastern Asia, bordering the South China Sea and Malaysia</Location>
+<Geographiccoordinates>4 30 N, 114 40 E</Geographiccoordinates>
+<Area>5770</Area>
+<Climate>tropical; hot, humid, rainy</Climate>
+<Naturalresources>petroleum, natural gas, timber</Naturalresources>
+<Population>336376</Population>
+<Populationgrowthrate>2.17% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.14 male(s)/female
+65 years and over: 0.94 male(s)/female
+total population: 1.1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim (official) 67%, Buddhist 13%, Christian 10%, indigenous beliefs and other 10%</Religions>
+<Countryname>Brunei </Countryname>
+<Capital>Bandar Seri Begawan</Capital>
+<Flagdescription>yellow with two diagonal bands of white (top, almost double width) and black starting from the upper hoist side; the national emblem in red is superimposed at the center; the emblem includes a swallow-tailed flag on top of a winged column within an upturned crescent above a scroll and flanked by two upraised hands</Flagdescription>
+<GDP>purchasing power parity - $5.6 billion (1999 est.)</GDP>
+<Industries>petroleum, petroleum refining, liquefied natural gas, construction</Industries>
+<Exports>$2.04 billion (f.o.b., 1998 est.)</Exports>
+<Imports>$1.38 billion (c.i.f., 1998 est.)</Imports>
+<Currency>1 Bruneian dollar (B$) = 100 cents</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Central Africa, east of Democratic Republic of the Congo</Location>
+<Geographiccoordinates>3 30 S, 30 00 E</Geographiccoordinates>
+<Area>27830</Area>
+<Climate>equatorial; high plateau with considerable altitude variation (772 m to 2,670 m); average annual temperature varies with altitude from 23 to 17 degrees centigrade but is generally moderate as the average altitude is about 1,700 m; average annual rainfall is about 150 cm; wet seasons from February to May and September to November, and dry seasons from June to August and December to January</Climate>
+<Naturalresources>nickel, uranium, rare earth oxides, peat, cobalt, copper, platinum (not yet exploited), vanadium, arable land, hydropower</Naturalresources>
+<Population>6054714</Population>
+<Populationgrowthrate>3.15% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 67% (Roman Catholic 62%, Protestant 5%), indigenous beliefs 23%, Muslim 10%</Religions>
+<Countryname>Burundi </Countryname>
+<Capital>Bujumbura</Capital>
+<Flagdescription>divided by a white diagonal cross into red panels (top and bottom) and green panels (hoist side and outer side) with a white disk superimposed at the center bearing three red six-pointed stars outlined in green arranged in a triangular design (one star above, two stars below)</Flagdescription>
+<GDP>purchasing power parity - $4.2 billion (1999 est.)</GDP>
+<Industries>light consumer goods such as blankets, shoes, soap; assembly of imported components; public works construction; food processing</Industries>
+<Exports>$56 million (f.o.b., 1999)</Exports>
+<Imports>$108 million (f.o.b., 1999)</Imports>
+<Currency>1 Burundi franc (FBu) = 100 centimes</Currency>
+<Airports>4 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern North America, bordering the North Atlantic Ocean and North Pacific Ocean, north of the conterminous US</Location>
+<Geographiccoordinates>60 00 N, 95 00 W</Geographiccoordinates>
+<Area>9976140</Area>
+<Climate>varies from temperate in south to subarctic and arctic in north</Climate>
+<Naturalresources>iron ore, nickel, zinc, copper, gold, lead, molybdenum, potash, silver, fish, timber, wildlife, coal, petroleum, natural gas, hydropower</Naturalresources>
+<Population>31281092</Population>
+<Populationgrowthrate>1.02% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.74 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 42%, Protestant 40%, other 18%</Religions>
+<Countryname>Canada </Countryname>
+<Capital>Ottawa</Capital>
+<Flagdescription>three vertical bands of red (hoist side), white (double width, square), and red with a red maple leaf centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $722.3 billion (1999 est.)</GDP>
+<Industries>processed and unprocessed minerals, food products, wood and paper products, transportation equipment, chemicals, fish products, petroleum and natural gas</Industries>
+<Exports>$277 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$259.3 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Canadian dollar (Can$) = 100 cents</Currency>
+<Airports>1,411 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis for the domestic drug market; use of hydroponics technology permits growers to plant large quantities of high-quality marijuana indoors; growing role as a transit point for heroin and cocaine entering the US market</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, bordering the Gulf of Thailand, between Thailand, Vietnam, and Laos</Location>
+<Geographiccoordinates>13 00 N, 105 00 E</Geographiccoordinates>
+<Area>181040</Area>
+<Climate>tropical; rainy, monsoon season (May to November); dry season (December to April); little seasonal temperature variation</Climate>
+<Naturalresources>timber, gemstones, some iron ore, manganese, phosphates, hydropower potential</Naturalresources>
+<Population>12212306</Population>
+<Populationgrowthrate>2.27% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.88 male(s)/female
+65 years and over: 0.7 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Theravada Buddhist 95%, other 5%</Religions>
+<Countryname>Cambodia </Countryname>
+<Capital>Phnom Penh</Capital>
+<Flagdescription>three horizontal bands of blue (top), red (double width), and blue with a white three-towered temple representing Angkor Wat outlined in black in the center of the red band</Flagdescription>
+<GDP>purchasing power parity - $8.2 billion (1999 est.)</GDP>
+<Industries>garments, rice milling, fishing, wood and wood products, rubber, cement, gem mining, textiles</Industries>
+<Exports>$821 million (f.o.b., 1999 est.)</Exports>
+<Imports>$1.2 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 new riel (CR) = 100 sen</Currency>
+<Airports>19 (1999 est.)</Airports>
+<Illicitdrugs>transshipment site for Golden Triangle heroin; possible money laundering; narcotics-related corruption reportedly involving some in the government, military, and police; possible small-scale opium, heroin, and amphetamine production; large producer of cannabis for the international market</Illicitdrugs>
+</record>
+<record>
+<Location>Central Africa, south of Libya</Location>
+<Geographiccoordinates>15 00 N, 19 00 E</Geographiccoordinates>
+<Area>1000000</Area>
+<Climate>tropical in south, desert in north</Climate>
+<Naturalresources>petroleum (unexploited but exploration under way), uranium, natron, kaolin, fish (Lake Chad)</Naturalresources>
+<Population>8424504</Population>
+<Populationgrowthrate>3.31% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.89 male(s)/female
+65 years and over: 0.72 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 50%, Christian 25%, indigenous beliefs (mostly animism) 25%</Religions>
+<Countryname>Chad </Countryname>
+<Capital>N'Djamena</Capital>
+<Flagdescription>three equal vertical bands of blue (hoist side), yellow, and red; similar to the flag of Romania; also similar to the flags of Andorra and Moldova, both of which have a national coat of arms centered in the yellow band; design was based on the flag of France</Flagdescription>
+<GDP>purchasing power parity - $7.6 billion (1999 est.)</GDP>
+<Industries>cotton textiles, meat packing, beer brewing, natron (sodium carbonate), soap, cigarettes, construction materials</Industries>
+<Exports>$288 million (f.o.b., 1999 est.)</Exports>
+<Imports>$359 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>49 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Asia, island in the Indian Ocean, south of India</Location>
+<Geographiccoordinates>7 00 N, 81 00 E</Geographiccoordinates>
+<Area>65610</Area>
+<Climate>tropical monsoon; northeast monsoon (December to March); southwest monsoon (June to October)</Climate>
+<Naturalresources>limestone, graphite, mineral sands, gems, phosphates, clay, hydropower</Naturalresources>
+<Population>19238575</Population>
+<Populationgrowthrate>0.89% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.93 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Buddhist 70%, Hindu 15%, Christian 8%, Muslim 7% (1999)</Religions>
+<Countryname>Sri Lanka </Countryname>
+<Capital>Colombo</Capital>
+<Flagdescription>yellow with two panels; the smaller hoist-side panel has two equal vertical bands of green (hoist side) and orange; the other panel is a large dark red rectangle with a yellow lion holding a sword, and there is a yellow bo leaf in each corner; the yellow field appears as a border that goes around the entire flag and extends between the two panels</Flagdescription>
+<GDP>purchasing power parity - $50.5 billion (1999 est.)</GDP>
+<Industries>processing of rubber, tea, coconuts, and other agricultural commodities; clothing, cement, petroleum refining, textiles, tobacco</Industries>
+<Exports>$4.7 billion (f.o.b., 1998)</Exports>
+<Imports>$5.3 billion (f.o.b., 1998)</Imports>
+<Currency>1 Sri Lankan rupee (SLRe) = 100 cents</Currency>
+<Airports>14 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Africa, bordering the South Atlantic Ocean, between Angola and Gabon</Location>
+<Geographiccoordinates>1 00 S, 15 00 E</Geographiccoordinates>
+<Area>342000</Area>
+<Climate>tropical; rainy season (March to June); dry season (June to October); constantly high temperatures and humidity; particularly enervating climate astride the Equator</Climate>
+<Naturalresources>petroleum, timber, potash, lead, zinc, uranium, copper, phosphates, natural gas, hydropower</Naturalresources>
+<Population>2830961</Population>
+<Populationgrowthrate>2.23% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.67 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 50%, animist 48%, Muslim 2%</Religions>
+<Countryname>Republic of the Congo </Countryname>
+<Capital>Brazzaville</Capital>
+<Flagdescription>divided diagonally from the lower hoist side by a yellow band; the upper triangle (hoist side) is green and the lower triangle is red; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $4.15 billion (1999 est.)</GDP>
+<Industries>petroleum extraction, cement kilning, lumbering, brewing, sugar milling, palm oil, soap, cigarette making</Industries>
+<Exports>$1.7 billion (f.o.b., 1999)</Exports>
+<Imports>$770 million (f.o.b., 1999)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>36 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Central Africa, northeast of Angola</Location>
+<Geographiccoordinates>0 00 N, 25 00 E</Geographiccoordinates>
+<Area>2345410</Area>
+<Climate>tropical; hot and humid in equatorial river basin; cooler and drier in southern highlands; cooler and wetter in eastern highlands; north of Equator - wet season April to October, dry season December to February; south of Equator - wet season November to March, dry season April to October</Climate>
+<Naturalresources>cobalt, copper, cadmium, petroleum, industrial and gem diamonds, gold, silver, zinc, manganese, tin, germanium, uranium, radium, bauxite, iron ore, coal, hydropower, timber</Naturalresources>
+<Population>51964999</Population>
+<Populationgrowthrate>3.19% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.74 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 50%, Protestant 20%, Kimbanguist 10%, Muslim 10%, other syncretic sects and indigenous beliefs 10%</Religions>
+<Countryname>Democratic Republic of the Congo </Countryname>
+<Capital>Kinshasa</Capital>
+<Flagdescription>light blue with a large yellow five-pointed star in the center and a columnar arrangement of six small yellow five-pointed stars along the hoist side</Flagdescription>
+<GDP>purchasing power parity - $35.7 billion (1999 est.)</GDP>
+<Industries>mining, mineral processing, consumer products (including textiles, footwear, cigarettes, processed foods and beverages), cement, diamonds</Industries>
+<Exports>$530 million (f.o.b., 1998 est.)</Exports>
+<Imports>$460 million (f.o.b., 1998 est.)</Imports>
+<Currency>Congolese franc (CF)</Currency>
+<Airports>232 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis, mostly for domestic consumption</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Asia, bordering the East China Sea, Korea Bay, Yellow Sea, and South China Sea, between North Korea and Vietnam</Location>
+<Geographiccoordinates>35 00 N, 105 00 E</Geographiccoordinates>
+<Area>9596960</Area>
+<Climate>extremely diverse; tropical in south to subarctic in north</Climate>
+<Naturalresources>coal, iron ore, petroleum, natural gas, mercury, tin, tungsten, antimony, manganese, molybdenum, vanadium, magnetite, aluminum, lead, zinc, uranium, hydropower potential (world's largest)</Naturalresources>
+<Population>1261832482</Population>
+<Populationgrowthrate>0.9% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.15 male(s)/female
+under 15 years: 1.1 male(s)/female
+15-64 years: 1.06 male(s)/female
+65 years and over: 0.88 male(s)/female
+total population: 1.06 male(s)/female (2000 est.)</Sexratio>
+<Religions>Daoist (Taoist), Buddhist, Muslim 2%-3%, Christian 1% (est.)
+note: officially atheist</Religions>
+<Countryname>China </Countryname>
+<Capital>Beijing</Capital>
+<Flagdescription>red with a large yellow five-pointed star and four smaller yellow five-pointed stars (arranged in a vertical arc toward the middle of the flag) in the upper hoist-side corner</Flagdescription>
+<GDP>purchasing power parity - $4.8 trillion (1999 est.)</GDP>
+<Industries>iron and steel, coal, machine building, armaments, textiles and apparel, petroleum, cement, chemical fertilizers, footwear, toys, food processing, automobiles, consumer electronics, telecommunications</Industries>
+<Exports>$194.9 billion (f.o.b., 1999)</Exports>
+<Imports>$165.8 billion (c.i.f., 1999)</Imports>
+<Currency>1 yuan = 10 jiao</Currency>
+<Airports>206 (1996 est.)</Airports>
+<Illicitdrugs>major transshipment point for heroin produced in the Golden Triangle; growing domestic drug abuse problem</Illicitdrugs>
+</record>
+<record>
+<Location>Southern South America, bordering the South Atlantic Ocean and South Pacific Ocean, between Argentina and Peru</Location>
+<Geographiccoordinates>30 00 S, 71 00 W</Geographiccoordinates>
+<Area>756950</Area>
+<Climate>temperate; desert in north; Mediterranean in central region; cool and damp in south</Climate>
+<Naturalresources>copper, timber, iron ore, nitrates, precious metals, molybdenum, hydropower</Naturalresources>
+<Population>15153797</Population>
+<Populationgrowthrate>1.17% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 89%, Protestant 11%, Jewish NEGL</Religions>
+<Countryname>Chile </Countryname>
+<Capital>Santiago</Capital>
+<Flagdescription>two equal horizontal bands of white (top) and red; there is a blue square the same height as the white band at the hoist-side end of the white band; the square bears a white five-pointed star in the center; design was based on the US flag</Flagdescription>
+<GDP>purchasing power parity - $185.1 billion (1999 est.)</GDP>
+<Industries>copper, other minerals, foodstuffs, fish processing, iron and steel, wood and wood products, transport equipment, cement, textiles</Industries>
+<Exports>$15.6 billion (f.o.b., 1999)</Exports>
+<Imports>$13.9 billion (c.i.f., 1999)</Imports>
+<Currency>1 Chilean peso (Ch$) = 100 centavos</Currency>
+<Airports>370 (1999 est.)</Airports>
+<Illicitdrugs>a growing transshipment country for cocaine destined for the US and Europe; economic prosperity has made Chile more attractive to traffickers seeking to launder drug profits; imported precursors passed on to Bolivia; domestic cocaine consumption is rising</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, island group in Caribbean Sea, nearly one-half of the way from Cuba to Honduras</Location>
+<Geographiccoordinates>19 30 N, 80 30 W</Geographiccoordinates>
+<Area>259</Area>
+<Climate>tropical marine; warm, rainy summers (May to October) and cool, relatively dry winters (November to April)</Climate>
+<Naturalresources>fish, climate and beaches that foster tourism</Naturalresources>
+<Population>34763</Population>
+<Populationgrowthrate>2.22% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 0.86 male(s)/female
+under 15 years: 0.94 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.85 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>United Church (Presbyterian and Congregational), Anglican, Baptist, Roman Catholic, Church of God, other Protestant</Religions>
+<Countryname>Cayman Islands </Countryname>
+<Capital>George Town</Capital>
+<Flagdescription>blue, with the flag of the UK in the upper hoist-side quadrant and the Caymanian coat of arms on a white disk centered on the outer half of the flag; the coat of arms includes a pineapple and turtle above a shield with three stars (representing the three islands) and a scroll at the bottom bearing the motto HE HATH FOUNDED IT UPON THE SEAS</Flagdescription>
+<GDP>purchasing power parity - $930 million (1997 est.)</GDP>
+<Industries>tourism, banking, insurance and finance, construction, construction materials, furniture</Industries>
+<Exports>$2.17 million (1997)</Exports>
+<Imports>$432 million (1997)</Imports>
+<Currency>1 Caymanian dollar (CI$) = 100 cents</Currency>
+<Airports>3 (1999 est.)</Airports>
+<Illicitdrugs>vulnerable to drug money laundering and drug transshipment</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, group of islands in the Indian Ocean, south of Indonesia, about one-half of the way from Australia to Sri Lanka</Location>
+<Geographiccoordinates>12 30 S, 96 50 E</Geographiccoordinates>
+<Area>14</Area>
+<Climate>pleasant, modified by the southeast trade winds for about nine months of the year; moderate rainfall</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population>635</Population>
+<Populationgrowthrate>-0.21% (2000 est.)</Populationgrowthrate>
+<Religions>Sunni Muslim 57%, Christian 22%, other 21% (1981 est.)</Religions>
+<Countryname>Cocos (Keeling) Islands </Countryname>
+<Capital>West Island</Capital>
+<Flagdescription>the flag of Australia is used</Flagdescription>
+<GDP>purchasing power parity - $NA</GDP>
+<Industries>copra products and tourism</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 Australian dollar ($A) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Africa, bordering the Bight of Biafra, between Equatorial Guinea and Nigeria</Location>
+<Geographiccoordinates>6 00 N, 12 00 E</Geographiccoordinates>
+<Area>475440</Area>
+<Climate>varies with terrain, from tropical along coast to semiarid and hot in north</Climate>
+<Naturalresources>petroleum, bauxite, iron ore, timber, hydropower</Naturalresources>
+<Population>15421937</Population>
+<Populationgrowthrate>2.47% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.86 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 40%, Christian 40%, Muslim 20%</Religions>
+<Countryname>Cameroon </Countryname>
+<Capital>Yaounde</Capital>
+<Flagdescription>three equal vertical bands of green (hoist side), red, and yellow with a yellow five-pointed star centered in the red band; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $31.5 billion (1999 est.)</GDP>
+<Industries>petroleum production and refining, food processing, light consumer goods, textiles, lumber</Industries>
+<Exports>$2 billion (f.o.b., 1999)</Exports>
+<Imports>$1.5 billion (f.o.b., 1999)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>50 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, group of islands in the Mozambique Channel, about two-thirds of the way between northern Madagascar and northern Mozambique</Location>
+<Geographiccoordinates>12 10 S, 44 15 E</Geographiccoordinates>
+<Area>2170</Area>
+<Climate>tropical marine; rainy season (November to May)</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>578400</Population>
+<Populationgrowthrate>3.05% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.91 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim 98%, Roman Catholic 2%</Religions>
+<Countryname>Comoros </Countryname>
+<Capital>Moroni</Capital>
+<Flagdescription>green with a white crescent in the center of the field, its points facing downward; there are four white five-pointed stars placed in a line between the points of the crescent; the crescent, stars, and color green are traditional symbols of Islam; the four stars represent the four main islands of the archipelago - Mwali, Njazidja, Nzwani, and Mayotte (a territorial collectivity of France, but claimed by Comoros); the design, the most recent of several, is described in the constitution approved by referendum on 7 June 1992</Flagdescription>
+<GDP>purchasing power parity - $410 million (1998 est.)</GDP>
+<Industries>tourism, perfume distillation, textiles, furniture, jewelry, construction materials, soft drinks</Industries>
+<Exports>$9.3 million (f.o.b., 1998 est.)</Exports>
+<Imports>$49.5 million (f.o.b., 1998 est.)</Imports>
+<Currency>1 Comoran franc (CF) = 100 centimes</Currency>
+<Airports>4 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern South America, bordering the Caribbean Sea, between Panama and Venezuela, and bordering the North Pacific Ocean, between Ecuador and Panama</Location>
+<Geographiccoordinates>4 00 N, 72 00 W</Geographiccoordinates>
+<Area>1138910</Area>
+<Climate>tropical along coast and eastern plains; cooler in highlands</Climate>
+<Naturalresources>petroleum, natural gas, coal, iron ore, nickel, gold, copper, emeralds, hydropower</Naturalresources>
+<Population>39685655</Population>
+<Populationgrowthrate>1.68% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.82 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 90%</Religions>
+<Countryname>Colombia </Countryname>
+<Capital>Bogota</Capital>
+<Flagdescription>three horizontal bands of yellow (top, double-width), blue, and red; similar to the flag of Ecuador, which is longer and bears the Ecuadorian coat of arms superimposed in the center</Flagdescription>
+<GDP>purchasing power parity - $245.1 billion (1999 est.)</GDP>
+<Industries>textiles, food processing, oil, clothing and footwear, beverages, chemicals, cement; gold, coal, emeralds</Industries>
+<Exports>$11.5 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$10 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Colombian peso (Col$) = 100 centavos</Currency>
+<Airports>1,101 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of coca, opium poppies, and cannabis; world's leading coca cultivator (cultivation of coca in 1998 - 101,500 hectares, a 28% increase over 1997); cultivation of opium in 1998 remained steady at 6,600 hectares; potential production of opium in 1997 - 66 metric tons, a 5% increase over 1996; the world's largest processor of coca derivatives into cocaine; supplier of cocaine to the US and other international drug markets, and an important supplier of heroin to the US market; active aerial eradication program</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, islands in the North Pacific Ocean, about three-quarters of the way from Hawaii to the Philippines</Location>
+<Geographiccoordinates>15 12 N, 145 45 E</Geographiccoordinates>
+<Area>477</Area>
+<Climate>tropical marine; moderated by northeast trade winds, little seasonal temperature variation; dry season December to June, rainy season July to October</Climate>
+<Naturalresources>arable land, fish</Naturalresources>
+<Population>71912</Population>
+<Populationgrowthrate>3.75% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.9 male(s)/female
+65 years and over: 0.96 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian (Roman Catholic majority, although traditional beliefs and taboos may still be found)</Religions>
+<Countryname>Northern Mariana Islands </Countryname>
+<Capital>Saipan</Capital>
+<Flagdescription>blue, with a white, five-pointed star superimposed on the gray silhouette of a latte stone (a traditional foundation stone used in building) in the center, surrounded by a wreath</Flagdescription>
+<GDP>purchasing power parity - $524 million (1996 est.)
+note: GDP numbers reflect US spending</GDP>
+<Industries>tourism, construction, garments, handicrafts</Industries>
+<Exports>$1 billion (1998)</Exports>
+<Imports>$NA</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>6 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, islands in the Coral Sea, northeast of Australia</Location>
+<Geographiccoordinates>18 00 S, 152 00 E</Geographiccoordinates>
+<Area></Area>
+<Climate>tropical</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population></Population>
+<Countryname>Coral Sea Islands </Countryname>
+<Flagdescription>the flag of Australia is used</Flagdescription>
+</record>
+<record>
+<Location>Middle America, bordering both the Caribbean Sea and the North Pacific Ocean, between Nicaragua and Panama</Location>
+<Geographiccoordinates>10 00 N, 84 00 W</Geographiccoordinates>
+<Area>51100</Area>
+<Climate>tropical and subtropical; dry season (December to April); rainy season (May to November); cooler in highlands</Climate>
+<Naturalresources>hydropower</Naturalresources>
+<Population>3710558</Population>
+<Populationgrowthrate>1.69% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.87 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 85%, Evangelical Protestant, approximately 14%, other less than 1%</Religions>
+<Countryname>Costa Rica </Countryname>
+<Capital>San Jose</Capital>
+<Flagdescription>five horizontal bands of blue (top), white, red (double width), white, and blue, with the coat of arms in a white disk on the hoist side of the red band</Flagdescription>
+<GDP>purchasing power parity - $26 billion (1999 est.)</GDP>
+<Industries>microprocessors, food processing, textiles and clothing, construction materials, fertilizer, plastic products</Industries>
+<Exports>$6.4 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$6.5 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 Costa Rican colon (C) = 100 centimos</Currency>
+<Airports>155 (1999 est.)</Airports>
+<Illicitdrugs>transshipment country for cocaine and heroin from South America; illicit production of cannabis on small, scattered plots; domestic cocaine consumption has risen</Illicitdrugs>
+</record>
+<record>
+<Location>Central Africa, north of Democratic Republic of the Congo</Location>
+<Geographiccoordinates>7 00 N, 21 00 E</Geographiccoordinates>
+<Area>622984</Area>
+<Climate>tropical; hot, dry winters; mild to hot, wet summers</Climate>
+<Naturalresources>diamonds, uranium, timber, gold, oil, hydropower</Naturalresources>
+<Population>3512751</Population>
+<Populationgrowthrate>1.77% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.8 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 24%, Protestant 25%, Roman Catholic 25%, Muslim 15%, other 11%
+note: animistic beliefs and practices strongly influence the Christian majority</Religions>
+<Countryname>Central African Republic </Countryname>
+<Capital>Bangui</Capital>
+<Flagdescription>four equal horizontal bands of blue (top), white, green, and yellow with a vertical red band in center; there is a yellow five-pointed star on the hoist side of the blue band</Flagdescription>
+<GDP>purchasing power parity - $5.8 billion (1999 est.)</GDP>
+<Industries>diamond mining, sawmills, breweries, textiles, footwear, assembly of bicycles and motorcycles</Industries>
+<Exports>$195 million (f.o.b., 1999)</Exports>
+<Imports>$170 million (f.o.b., 1999)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>52 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, island between the Caribbean Sea and the North Atlantic Ocean, south of Florida</Location>
+<Geographiccoordinates>21 30 N, 80 00 W</Geographiccoordinates>
+<Area>110860</Area>
+<Climate>tropical; moderated by trade winds; dry season (November to April); rainy season (May to October)</Climate>
+<Naturalresources>cobalt, nickel, iron ore, copper, manganese, salt, timber, silica, petroleum, arable land</Naturalresources>
+<Population>11141997</Population>
+<Populationgrowthrate>0.39% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.87 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>nominally 85% Roman Catholic prior to CASTRO assuming power; Protestants, Jehovah's Witnesses, Jews, and Santeria are also represented</Religions>
+<Countryname>Cuba </Countryname>
+<Capital>Havana</Capital>
+<Flagdescription>five equal horizontal bands of blue (top and bottom) alternating with white; a red equilateral triangle based on the hoist side bears a white, five-pointed star in the center</Flagdescription>
+<GDP>purchasing power parity - $18.6 billion (1999 est.)</GDP>
+<Industries>sugar, petroleum, food, tobacco, textiles, chemicals, paper and wood products, metals (particularly nickel), cement, fertilizers, consumer goods, agricultural machinery</Industries>
+<Exports>$1.4 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$3.2 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 Cuban peso (Cu$) = 100 centavos</Currency>
+<Airports>170 (1999 est.)</Airports>
+<Illicitdrugs>territorial waters and air space serve as transshipment zone for cocaine bound for the US and Europe; established the death penalty for certain drug-related crimes in 1999</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, group of islands in the North Atlantic Ocean, west of Senegal</Location>
+<Geographiccoordinates>16 00 N, 24 00 W</Geographiccoordinates>
+<Area>4033</Area>
+<Climate>temperate; warm, dry summer; precipitation meager and very erratic</Climate>
+<Naturalresources>salt, basalt rock, pozzuolana (a siliceous volcanic ash used to produce hydraulic cement), limestone, kaolin, fish</Naturalresources>
+<Population>401343</Population>
+<Populationgrowthrate>0.98% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.9 male(s)/female
+65 years and over: 0.65 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic (infused with indigenous beliefs); Protestant (mostly Church of the Nazarene)</Religions>
+<Countryname>Cape Verde </Countryname>
+<Capital>Praia</Capital>
+<Flagdescription>three horizontal bands of light blue (top, double width), white (with a horizontal red stripe in the middle third), and light blue; a circle of 10 yellow five-pointed stars is centered on the hoist end of the red stripe and extends into the upper and lower blue bands</Flagdescription>
+<GDP>purchasing power parity - $618 million (1999 est.)</GDP>
+<Industries>food and beverages, fish processing, shoes and garments, salt mining, ship repair</Industries>
+<Exports>$38 million (f.o.b., 1999 est.)</Exports>
+<Imports>$225 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 Cape Verdean escudo (CVEsc) = 100 centavos</Currency>
+<Airports>6 (1999 est.)</Airports>
+<Illicitdrugs>used as a transshipment point for illicit drugs moving from Latin America and Africa destined for Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, group of islands in the South Pacific Ocean, about one-half of the way from Hawaii to New Zealand</Location>
+<Geographiccoordinates>21 14 S, 159 46 W</Geographiccoordinates>
+<Area>240</Area>
+<Climate>tropical; moderated by trade winds</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>20407</Population>
+<Populationgrowthrate>1.6% (2000 est.)</Populationgrowthrate>
+<Religions>Christian (majority of populace are members of the Cook Islands Christian Church)</Religions>
+<Countryname>Cook Islands </Countryname>
+<Capital>Avarua</Capital>
+<Flagdescription>blue, with the flag of the UK in the upper hoist-side quadrant and a large circle of 15 white five-pointed stars (one for every island) centered in the outer half of the flag</Flagdescription>
+<GDP>purchasing power parity - $112 million (1998 est.)</GDP>
+<Industries>fruit processing, tourism</Industries>
+<Exports>$4.2 million (f.o.b., 1994 est.)</Exports>
+<Imports>$85 million (c.i.f., 1994)</Imports>
+<Currency>1 New Zealand dollar (NZ$) = 100 cents</Currency>
+<Airports>7 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle East, island in the Mediterranean Sea, south of Turkey</Location>
+<Geographiccoordinates>35 00 N, 33 00 E</Geographiccoordinates>
+<Area>9250</Area>
+<Climate>temperate, Mediterranean with hot, dry summers and cool, winters</Climate>
+<Naturalresources>copper, pyrites, asbestos, gypsum, timber, salt, marble, clay earth pigment</Naturalresources>
+<Population>758363</Population>
+<Populationgrowthrate>0.6% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.77 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Greek Orthodox 78%, Muslim 18%, Maronite, Armenian Apostolic, and other 4%</Religions>
+<Countryname>Cyprus </Countryname>
+<Capital>Nicosia
+note: the Turkish Cypriot area's capital is Lefkosa (Nicosia)</Capital>
+<Flagdescription>white with a copper-colored silhouette of the island (the name Cyprus is derived from the Greek word for copper) above two green crossed olive branches in the center of the flag; the branches symbolize the hope for peace and reconciliation between the Greek and Turkish communities
+note: the Turkish Cypriot flag has a horizontal red stripe at the top and bottom between which is a red crescent and red star on a white field</Flagdescription>
+<GDP>Greek Cypriot area: purchasing power parity - $9 billion; Turkish Cypriot area: purchasing power parity - $820 million (1998 est.)</GDP>
+<Industries>food, beverages, textiles, chemicals, metal products, tourism, wood products</Industries>
+<Exports>Greek Cypriot area: $1.1 billion (f.o.b., 1998 est.); Turkish Cypriot area: $63.9 million (f.o.b., 1998)</Exports>
+<Imports>Greek Cypriot area: $3.5 billion (f.o.b., 1998 est.); Turkish Cypriot area: $374 million (f.o.b., 1997)</Imports>
+<Currency>Greek Cypriot area: 1 Cypriot pound = 100 cents; Turkish Cypriot area: 1 Turkish lira (TL) = 100 kurus</Currency>
+<Airports>15 (1999 est.)</Airports>
+<Illicitdrugs>minor transit point for heroin and hashish via air routes and container traffic to Europe, especially from Lebanon and Turkey; some cocaine transits as well</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Europe, bordering the Baltic Sea and the North Sea, on a peninsula north of Germany</Location>
+<Geographiccoordinates>56 00 N, 10 00 E</Geographiccoordinates>
+<Area>43094</Area>
+<Climate>temperate; humid and overcast; mild, windy winters and cool summers</Climate>
+<Naturalresources>petroleum, natural gas, fish, salt, limestone, stone, gravel and sand</Naturalresources>
+<Population>5336394</Population>
+<Populationgrowthrate>0.31% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Evangelical Lutheran 97%, other Protestant and Roman Catholic, other</Religions>
+<Countryname>Denmark </Countryname>
+<Capital>Copenhagen</Capital>
+<Flagdescription>red with a white cross that extends to the edges of the flag; the vertical part of the cross is shifted to the hoist side, and that design element of the Dannebrog (Danish flag) was subsequently adopted by the other Nordic countries of Finland, Iceland, Norway, and Sweden</Flagdescription>
+<GDP>purchasing power parity - $127.7 billion (1999 est.)</GDP>
+<Industries>food processing, machinery and equipment, textiles and clothing, chemical products, electronics, construction, furniture, and other wood products, shipbuilding</Industries>
+<Exports>$49.5 billion (f.o.b., 1999)</Exports>
+<Imports>$43.9 billion (f.o.b., 1999)</Imports>
+<Currency>1 Danish krone (DKr) = 100 oere</Currency>
+<Airports>118 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Eastern Africa, bordering the Gulf of Aden and the Red Sea, between Eritrea and Somalia</Location>
+<Geographiccoordinates>11 30 N, 43 00 E</Geographiccoordinates>
+<Area>22000</Area>
+<Climate>desert; torrid, dry</Climate>
+<Naturalresources>geothermal areas</Naturalresources>
+<Population>451442</Population>
+<Populationgrowthrate>1.45% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 1.12 male(s)/female
+65 years and over: 1.08 male(s)/female
+total population: 1.07 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 94%, Christian 6%</Religions>
+<Countryname>Djibouti </Countryname>
+<Capital>Djibouti</Capital>
+<Flagdescription>two equal horizontal bands of light blue (top) and light green with a white isosceles triangle based on the hoist side bearing a red five-pointed star in the center</Flagdescription>
+<GDP>purchasing power parity - $550 million (1999 est.)</GDP>
+<Industries>limited to a few small-scale enterprises, such as dairy products and mineral-water bottling</Industries>
+<Exports>$260 million (f.o.b., 1999 est.)</Exports>
+<Imports>$440 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 Djiboutian franc (DF) = 100 centimes</Currency>
+<Airports>12 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, island between the Caribbean Sea and the North Atlantic Ocean, about one-half of the way from Puerto Rico to Trinidad and Tobago</Location>
+<Geographiccoordinates>15 25 N, 61 20 W</Geographiccoordinates>
+<Area>754</Area>
+<Climate>tropical; moderated by northeast trade winds; heavy rainfall</Climate>
+<Naturalresources>timber, hydropower, arable land</Naturalresources>
+<Population>71540</Population>
+<Populationgrowthrate>-1.14% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 0.69 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 77%, Protestant 15% (Methodist 5%, Pentecostal 3%, Seventh-Day Adventist 3%, Baptist 2%, other 2%), none 2%, other 6%</Religions>
+<Countryname>Dominica </Countryname>
+<Capital>Roseau</Capital>
+<Flagdescription>green, with a centered cross of three equal bands - the vertical part is yellow (hoist side), black, and white and the horizontal part is yellow (top), black, and white; superimposed in the center of the cross is a red disk bearing a sisserou parrot encircled by 10 green, five-pointed stars edged in yellow; the 10 stars represent the 10 administrative divisions (parishes)</Flagdescription>
+<GDP>purchasing power parity - $225 million (1998 est.)</GDP>
+<Industries>soap, coconut oil, tourism, copra, furniture, cement blocks, shoes</Industries>
+<Exports>$60.8 million (1998)</Exports>
+<Imports>$120.4 million (1998)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>2 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for narcotics bound for the US and Europe; minor cannabis producer; banking industry is vulnerable to money laundering</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, island in the South Pacific Ocean, about one-half of the way from Hawaii to the Cook Islands</Location>
+<Geographiccoordinates>0 22 S, 160 03 W</Geographiccoordinates>
+<Area>4</Area>
+<Climate>tropical; scant rainfall, constant wind, burning sun</Climate>
+<Naturalresources>guano (deposits worked until late 1800s)</Naturalresources>
+<Population></Population>
+<Countryname>Jarvis Island </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+</record>
+<record>
+<Location>Caribbean, eastern two-thirds of the island of Hispaniola, between the Caribbean Sea and the North Atlantic Ocean, east of Haiti</Location>
+<Geographiccoordinates>19 00 N, 70 40 W</Geographiccoordinates>
+<Area>48730</Area>
+<Climate>tropical maritime; little seasonal temperature variation; seasonal variation in rainfall</Climate>
+<Naturalresources>nickel, bauxite, gold, silver</Naturalresources>
+<Population>8442533</Population>
+<Populationgrowthrate>1.64% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 0.91 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 95%</Religions>
+<Countryname>Dominican Republic </Countryname>
+<Capital>Santo Domingo</Capital>
+<Flagdescription>a centered white cross that extends to the edges divides the flag into four rectangles - the top ones are blue (hoist side) and red, and the bottom ones are red (hoist side) and blue; a small coat of arms is at the center of the cross</Flagdescription>
+<GDP>purchasing power parity - $43.7 billion (1999 est.)</GDP>
+<Industries>tourism, sugar processing, ferronickel and gold mining, textiles, cement, tobacco</Industries>
+<Exports>$5.1 billion (f.o.b., 1999)</Exports>
+<Imports>$8.2 billion (f.o.b., 1999)</Imports>
+<Currency>1 Dominican peso (RD$) = 100 centavos</Currency>
+<Airports>28 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for South American drugs destined for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Western South America, bordering the Pacific Ocean at the Equator, between Colombia and Peru</Location>
+<Geographiccoordinates>2 00 S, 77 30 W</Geographiccoordinates>
+<Area>283560</Area>
+<Climate>tropical along coast, becoming cooler inland at higher elevations; tropical in Amazonian jungle lowlands</Climate>
+<Naturalresources>petroleum, fish, timber, hydropower</Naturalresources>
+<Population>12920092</Population>
+<Populationgrowthrate>2.04% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.87 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 95%</Religions>
+<Countryname>Ecuador </Countryname>
+<Capital>Quito</Capital>
+<Flagdescription>three horizontal bands of yellow (top, double width), blue, and red with the coat of arms superimposed at the center of the flag; similar to the flag of Colombia which is shorter and does not bear a coat of arms</Flagdescription>
+<GDP>purchasing power parity - $54.5 billion (1999 est.)</GDP>
+<Industries>petroleum, food processing, textiles, metal work, paper products, wood products, chemicals, plastics, fishing, lumber</Industries>
+<Exports>$4.1 billion (f.o.b., 1999)</Exports>
+<Imports>$2.8 billion (c.i.f., 1999)</Imports>
+<Currency>1 sucre (S/) = 100 centavos</Currency>
+<Airports>182 (1999 est.)</Airports>
+<Illicitdrugs>significant transit country for cocaine and derivatives of coca originating in Colombia and Peru; importer of precursor chemicals used in production of illicit narcotics; important money-laundering hub; increased activity on frontiers by trafficking groups and Colombian insurgents</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Africa, bordering the Mediterranean Sea, between Libya and the Gaza Strip</Location>
+<Geographiccoordinates>27 00 N, 30 00 E</Geographiccoordinates>
+<Area>1001450</Area>
+<Climate>desert; hot, dry summers with moderate winters</Climate>
+<Naturalresources>petroleum, natural gas, iron ore, phosphates, manganese, limestone, gypsum, talc, asbestos, lead, zinc</Naturalresources>
+<Population>68359979</Population>
+<Populationgrowthrate>1.72% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.79 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim (mostly Sunni) 94%, Coptic Christian and other 6%</Religions>
+<Countryname>Egypt </Countryname>
+<Capital>Cairo</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and black with the national emblem (a shield superimposed on a golden eagle facing the hoist side above a scroll bearing the name of the country in Arabic) centered in the white band; similar to the flag of Yemen, which has a plain white band; also similar to the flag of Syria, which has two green stars, and to the flag of Iraq, which has three green stars (plus an Arabic inscription) in a horizontal line centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $200 billion (1999 est.)</GDP>
+<Industries>textiles, food processing, tourism, chemicals, petroleum, construction, cement, metals</Industries>
+<Exports>$4.6 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$15.8 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Egyptian pound = 100 piasters</Currency>
+<Airports>90 (1999 est.)</Airports>
+<Illicitdrugs>a transit point for Southwest Asian and Southeast Asian heroin and opium moving to Europe, Africa, and the US; popular transit stop for Nigerian couriers</Illicitdrugs>
+</record>
+<record>
+<Location>Western Europe, occupying five-sixths of the island of Ireland in the North Atlantic Ocean, west of Great Britain</Location>
+<Geographiccoordinates>53 00 N, 8 00 W</Geographiccoordinates>
+<Area>70280</Area>
+<Climate>temperate maritime; modified by North Atlantic Current; mild winters, cool summers; consistently humid; overcast about half the time</Climate>
+<Naturalresources>zinc, lead, natural gas, barite, copper, gypsum, limestone, dolomite, peat, silver</Naturalresources>
+<Population>3797257</Population>
+<Populationgrowthrate>1.16% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.07 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 91.6%, Church of Ireland 2.5%, other 5.9% (1998)</Religions>
+<Countryname>Ireland </Countryname>
+<Capital>Dublin</Capital>
+<Flagdescription>three equal vertical bands of green (hoist side), white, and orange; similar to the flag of Cote d'Ivoire, which is shorter and has the colors reversed - orange (hoist side), white, and green; also similar to the flag of Italy, which is shorter and has colors of green (hoist side), white, and red</Flagdescription>
+<GDP>purchasing power parity - $73.7 billion (1999 est.)</GDP>
+<Industries>food products, brewing, textiles, clothing; chemicals, pharmaceuticals, machinery, transportation equipment, glass and crystal; software</Industries>
+<Exports>$66 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$44 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 Irish pound = 100 pence</Currency>
+<Airports>44 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for and consumer of hashish from North Africa to the UK and Netherlands and of European-produced synthetic drugs; minor transshipment point for heroin and cocaine destined for Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the Bight of Biafra, between Cameroon and Gabon</Location>
+<Geographiccoordinates>2 00 N, 10 00 E</Geographiccoordinates>
+<Area>28051</Area>
+<Climate>tropical; always hot, humid</Climate>
+<Naturalresources>oil, petroleum, timber, small unexploited deposits of gold, manganese, uranium</Naturalresources>
+<Population>474214</Population>
+<Populationgrowthrate>2.47% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.91 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>nominally Christian and predominantly Roman Catholic, pagan practices</Religions>
+<Countryname>Equatorial Guinea </Countryname>
+<Capital>Malabo</Capital>
+<Flagdescription>three equal horizontal bands of green (top), white, and red with a blue isosceles triangle based on the hoist side and the coat of arms centered in the white band; the coat of arms has six yellow six-pointed stars (representing the mainland and five offshore islands) above a gray shield bearing a silk-cotton tree and below which is a scroll with the motto UNIDAD, PAZ, JUSTICIA (Unity, Peace, Justice)</Flagdescription>
+<GDP>purchasing power parity - $960 million (1999 est.)</GDP>
+<Industries>petroleum, fishing, sawmilling, natural gas</Industries>
+<Exports>$555 million (f.o.b., 1999)</Exports>
+<Imports>$300 million (f.o.b., 1999)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>3 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Eastern Europe, bordering the Baltic Sea and Gulf of Finland, between Latvia and Russia</Location>
+<Geographiccoordinates>59 00 N, 26 00 E</Geographiccoordinates>
+<Area>45226</Area>
+<Climate>maritime, wet, moderate winters, cool summers</Climate>
+<Naturalresources>shale oil (kukersite), peat, phosphorite, amber, cambrian blue clay, limestone, dolomite, arable land</Naturalresources>
+<Population>1431471</Population>
+<Populationgrowthrate>-0.59% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.48 male(s)/female
+total population: 0.87 male(s)/female (2000 est.)</Sexratio>
+<Religions>Evangelical Lutheran, Russian Orthodox, Estonian Orthodox, Baptist, Methodist, Seventh-Day Adventist, Roman Catholic, Pentecostal, Word of Life, Jewish</Religions>
+<Countryname>Estonia </Countryname>
+<Capital>Tallinn</Capital>
+<Flagdescription>pre-1940 flag restored by Supreme Soviet in May 1990 - three equal horizontal bands of blue (top), black, and white</Flagdescription>
+<GDP>purchasing power parity - $7.9 billion (1999 est.)</GDP>
+<Industries>oil shale, shipbuilding, phosphates, electric motors, excavators, cement, furniture, clothing, textiles, paper, shoes, apparel</Industries>
+<Exports>$2.5 billion (f.o.b., 1999)</Exports>
+<Imports>$3.4 billion (f.o.b., 1999)</Imports>
+<Currency>1 Estonian kroon (EEK) = 100 sents</Currency>
+<Airports>5 (1997 est.)</Airports>
+<Illicitdrugs>transshipment point for opiates and cannabis from Southwest Asia and the Caucasus via Russia, cocaine from Latin America to Western Europe and Scandinavia, and synthetic drugs from Western Europe to Scandinavia; possible precursor manufacturing and/or trafficking</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Africa, bordering the Red Sea, between Djibouti and Sudan</Location>
+<Geographiccoordinates>15 00 N, 39 00 E</Geographiccoordinates>
+<Area>121320</Area>
+<Climate>hot, dry desert strip along Red Sea coast; cooler and wetter in the central highlands (up to 61 cm of rainfall annually); semiarid in western hills and lowlands; rainfall heaviest during June-September except in coastal desert</Climate>
+<Naturalresources>gold, potash, zinc, copper, salt, possibly oil and natural gas, fish</Naturalresources>
+<Population>4135933</Population>
+<Populationgrowthrate>3.86% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 1.04 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim, Coptic Christian, Roman Catholic, Protestant</Religions>
+<Countryname>Eritrea </Countryname>
+<Capital>Asmara (formerly Asmera)</Capital>
+<Flagdescription>red isosceles triangle (based on the hoist side) dividing the flag into two right triangles; the upper triangle is green, the lower one is blue; a gold wreath encircling a gold olive branch is centered on the hoist side of the red triangle</Flagdescription>
+<GDP>purchasing power parity - $2.9 billion (1999 est.)</GDP>
+<Industries>food processing, beverages, clothing and textiles</Industries>
+<Exports>$52.9 million (f.o.b., 1997)</Exports>
+<Imports>$489.4 million (c.i.f., 1997)</Imports>
+<Currency>1 nafka = 100 cents</Currency>
+<Airports>21 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle America, bordering the North Pacific Ocean, between Guatemala and Honduras</Location>
+<Geographiccoordinates>13 50 N, 88 55 W</Geographiccoordinates>
+<Area>21040</Area>
+<Climate>tropical; rainy season (May to October); dry season (November to April); tropical on coast; temperate in uplands</Climate>
+<Naturalresources>hydropower, geothermal power, petroleum, arable land</Naturalresources>
+<Population>6122515</Population>
+<Populationgrowthrate>1.87% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.9 male(s)/female
+65 years and over: 0.83 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 86%
+note: there is extensive activity by Protestant groups throughout the country; by the end of 1992, there were an estimated 1 million Protestant evangelicals in El Salvador</Religions>
+<Countryname>El Salvador </Countryname>
+<Capital>San Salvador</Capital>
+<Flagdescription>three equal horizontal bands of blue (top), white, and blue with the national coat of arms centered in the white band; the coat of arms features a round emblem encircled by the words REPUBLICA DE EL SALVADOR EN LA AMERICA CENTRAL; similar to the flag of Nicaragua, which has a different coat of arms centered in the white band - it features a triangle encircled by the words REPUBLICA DE NICARAGUA on top and AMERICA CENTRAL on the bottom; also similar to the flag of Honduras, which has five blue stars arranged in an X pattern centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $18.1 billion (1999 est.)</GDP>
+<Industries>food processing, beverages, petroleum, chemicals, fertilizer, textiles, furniture, light metals</Industries>
+<Exports>$2.5 billion (f.o.b., 1999)</Exports>
+<Imports>$4.15 billion (c.i.f., 1999)</Imports>
+<Currency>1 Salvadoran colon (C) = 100 centavos</Currency>
+<Airports>85 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for cocaine; marijuana produced for local consumption; domestic drug abuse on the rise</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Africa, west of Somalia</Location>
+<Geographiccoordinates>8 00 N, 38 00 E</Geographiccoordinates>
+<Area>1127127</Area>
+<Climate>tropical monsoon with wide topographic-induced variation</Climate>
+<Naturalresources>small reserves of gold, platinum, copper, potash, natural gas, hydropower</Naturalresources>
+<Population>64117452</Population>
+<Populationgrowthrate>2.76% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 45%-50%, Ethiopian Orthodox 35%-40%, animist 12%, other 3%-8%</Religions>
+<Countryname>Ethiopia </Countryname>
+<Capital>Addis Ababa</Capital>
+<Flagdescription>three equal horizontal bands of green (top), yellow, and red with a yellow pentagram and single yellow rays emanating from the angles between the points on a light blue disk centered on the three bands; Ethiopia is the oldest independent country in Africa, and the colors of her flag were so often adopted by other African countries upon independence that they became known as the pan-African colors</Flagdescription>
+<GDP>purchasing power parity - $33.3 billion (1999 est.)</GDP>
+<Industries>food processing, beverages, textiles, chemicals, metals processing, cement</Industries>
+<Exports>$420 million (f.o.b., 1998)</Exports>
+<Imports>$1.25 billion (f.o.b., 1998 est.)</Imports>
+<Currency>1 birr (Br) = 100 cents</Currency>
+<Airports>85 (1999 est.)</Airports>
+<Illicitdrugs>transit hub for heroin originating in Southwest and Southeast Asia and destined for Europe and North America as well as cocaine destined for markets in southern Africa; cultivates qat (chat) for local use and regional export, principally to Djibouti and Somalia</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, island in the Mozambique Channel, about one-half of the way from southern Madagascar to southern Mozambique</Location>
+<Geographiccoordinates>22 20 S, 40 22 E</Geographiccoordinates>
+<Area>28</Area>
+<Climate>tropical</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population></Population>
+<Countryname>Europa Island </Countryname>
+<Flagdescription>the flag of France is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Central Europe, southeast of Germany</Location>
+<Geographiccoordinates>49 45 N, 15 30 E</Geographiccoordinates>
+<Area>78866</Area>
+<Climate>temperate; cool summers; cold, cloudy, humid winters</Climate>
+<Naturalresources>hard coal, soft coal, kaolin, clay, graphite, timber</Naturalresources>
+<Population>10272179</Population>
+<Populationgrowthrate>-0.08% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.62 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>atheist 39.8%, Roman Catholic 39.2%, Protestant 4.6%, Orthodox 3%, other 13.4%</Religions>
+<Countryname>Czech Republic </Countryname>
+<Capital>Prague</Capital>
+<Flagdescription>two equal horizontal bands of white (top) and red with a blue isosceles triangle based on the hoist side (almost identical to the flag of the former Czechoslovakia)</Flagdescription>
+<GDP>purchasing power parity - $120.8 billion (1999 est.)</GDP>
+<Industries>fuels, ferrous metallurgy, machinery and equipment, coal, motor vehicles, glass, armaments</Industries>
+<Exports>$26.9 billion (f.o.b., 1999)</Exports>
+<Imports>$29 billion (f.o.b., 1999)</Imports>
+<Currency>1 koruna (Kc) = 100 haleru</Currency>
+<Airports>114 (1999 est.)</Airports>
+<Illicitdrugs>major transshipment point for Southwest Asian heroin and minor transit point for Latin American cocaine to Western Europe; domestic consumption - especially of locally produced synthetic drugs - on the rise</Illicitdrugs>
+</record>
+<record>
+<Location>Southern South America, islands in the South Atlantic Ocean, east of southern Argentina</Location>
+<Geographiccoordinates>51 45 S, 59 00 W</Geographiccoordinates>
+<Area>12173</Area>
+<Climate>cold marine; strong westerly winds, cloudy, humid; rain occurs on more than half of days in year; occasional snow all year, except in January and February, but does not accumulate</Climate>
+<Naturalresources>fish, wildlife</Naturalresources>
+<Population>2826</Population>
+<Populationgrowthrate>2.44% (2000 est.)</Populationgrowthrate>
+<Religions>primarily Anglican, Roman Catholic, United Free Church, Evangelist Church, Jehovah's Witnesses, Lutheran, Seventh-Day Adventist</Religions>
+<Countryname>Falkland Islands (Islas Malvinas) </Countryname>
+<Capital>Stanley</Capital>
+<Flagdescription>blue with the flag of the UK in the upper hoist-side quadrant and the Falkland Island coat of arms in a white disk centered on the outer half of the flag; the coat of arms contains a white ram (sheep raising is the major economic activity) above the sailing ship Desire (whose crew discovered the islands) with a scroll at the bottom bearing the motto DESIRE THE RIGHT</Flagdescription>
+<GDP>purchasing power parity - $NA</GDP>
+<Industries>wool and fish processing; sale of stamps and coins</Industries>
+<Exports>$7.6 million (1995)</Exports>
+<Imports>$24.7 million (1995)</Imports>
+<Currency>1 Falkland pound = 100 pence</Currency>
+<Airports>5 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern South America, bordering the North Atlantic Ocean, between Brazil and Suriname</Location>
+<Geographiccoordinates>4 00 N, 53 00 W</Geographiccoordinates>
+<Area>91000</Area>
+<Climate>tropical; hot, humid; little seasonal temperature variation</Climate>
+<Naturalresources>bauxite, timber, gold (widely scattered), cinnabar, kaolin, fish</Naturalresources>
+<Population>172605</Population>
+<Populationgrowthrate>2.93% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.18 male(s)/female
+65 years and over: 1.02 male(s)/female
+total population: 1.13 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic</Religions>
+<Countryname>French Guiana </Countryname>
+<Capital>Cayenne</Capital>
+<Flagdescription>the flag of France is used</Flagdescription>
+<GDP>purchasing power parity - $1 billion (1998 est.)</GDP>
+<Industries>construction, shrimp processing, forestry products, rum, gold mining</Industries>
+<Exports>$155 million (f.o.b., 1997)</Exports>
+<Imports>$625 million (c.i.f., 1997)</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>11 (1999 est.)</Airports>
+<Illicitdrugs>small amount of marijuana grown for local consumption; minor transshipment point to Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Europe, bordering the Baltic Sea, Gulf of Bothnia, and Gulf of Finland, between Sweden and Russia</Location>
+<Geographiccoordinates>64 00 N, 26 00 E</Geographiccoordinates>
+<Area>337030</Area>
+<Climate>cold temperate; potentially subarctic, but comparatively mild because of moderating influence of the North Atlantic Current, Baltic Sea, and more than 60,000 lakes</Climate>
+<Naturalresources>timber, copper, zinc, iron ore, silver</Naturalresources>
+<Population>5167486</Population>
+<Populationgrowthrate>0.17% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.62 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Evangelical Lutheran 89%, Greek Orthodox 1%, none 9%, other 1%</Religions>
+<Countryname>Finland </Countryname>
+<Capital>Helsinki</Capital>
+<Flagdescription>white with a blue cross that extends to the edges of the flag; the vertical part of the cross is shifted to the hoist side in the style of the Dannebrog (Danish flag)</Flagdescription>
+<GDP>purchasing power parity - $108.6 billion (1999 est.)</GDP>
+<Industries>metal products, shipbuilding, pulp and paper, copper refining, foodstuffs, chemicals, textiles, clothing</Industries>
+<Exports>$43 billion (f.o.b., 1998)</Exports>
+<Imports>$30.7 billion (f.o.b., 1998)</Imports>
+<Currency>1 markka (FMk) or Finmark = 100 pennia</Currency>
+<Airports>157 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, island group in the South Pacific Ocean, about two-thirds of the way from Hawaii to New Zealand</Location>
+<Geographiccoordinates>18 00 S, 175 00 E</Geographiccoordinates>
+<Area>18270</Area>
+<Climate>tropical marine; only slight seasonal temperature variation</Climate>
+<Naturalresources>timber, fish, gold, copper, offshore oil potential, hydropower</Naturalresources>
+<Population>832494</Population>
+<Populationgrowthrate>1.41% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.88 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 52% (Methodist 37%, Roman Catholic 9%), Hindu 38%, Muslim 8%, other 2%
+note: Fijians are mainly Christian, Indians are Hindu, and there is a Muslim minority (1986)</Religions>
+<Countryname>Fiji </Countryname>
+<Capital>Suva</Capital>
+<Flagdescription>light blue with the flag of the UK in the upper hoist-side quadrant and the Fijian shield centered on the outer half of the flag; the shield depicts a yellow lion above a white field quartered by the cross of Saint George featuring stalks of sugarcane, a palm tree, bananas, and a white dove</Flagdescription>
+<GDP>purchasing power parity - $5.9 billion (1999 est.)</GDP>
+<Industries>tourism, sugar, clothing, copra, gold, silver, lumber, small cottage industries</Industries>
+<Exports>$393 million (f.o.b., 1998)</Exports>
+<Imports>$612 million (f.o.b., 1998)</Imports>
+<Currency>1 Fijian dollar (F$) = 100 cents</Currency>
+<Airports>25 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, island group in the North Pacific Ocean, about three-quarters of the way from Hawaii to Indonesia</Location>
+<Geographiccoordinates>6 55 N, 158 15 E</Geographiccoordinates>
+<Area>702</Area>
+<Climate>tropical; heavy year-round rainfall, especially in the eastern islands; located on southern edge of the typhoon belt with occasionally severe damage</Climate>
+<Naturalresources>forests, marine products, deep-seabed minerals</Naturalresources>
+<Population>133144</Population>
+<Populationgrowthrate>3.28% (2000 est.)</Populationgrowthrate>
+<Religions>Roman Catholic 50%, Protestant 47%, other and none 3%</Religions>
+<Countryname>Federated States of Micronesia </Countryname>
+<Capital>Palikir</Capital>
+<Flagdescription>light blue with four white five-pointed stars centered; the stars are arranged in a diamond pattern</Flagdescription>
+<GDP>purchasing power parity - $240 million (1997 est.)
+note: GDP is supplemented by grant aid, averaging perhaps $100 million annually</GDP>
+<Industries>tourism, construction, fish processing, craft items from shell, wood, and pearls</Industries>
+<Exports>$73 million (f.o.b., 1996 est.)</Exports>
+<Imports>$168 million (c.i.f., 1996 est.)</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>6 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Europe, island group between the Norwegian Sea and the north Atlantic Ocean, about one-half of the way from Iceland to Norway</Location>
+<Geographiccoordinates>62 00 N, 7 00 W</Geographiccoordinates>
+<Area>1399</Area>
+<Climate>mild winters, cool summers; usually overcast; foggy, windy</Climate>
+<Naturalresources>fish, whales, hydropower</Naturalresources>
+<Population>45296</Population>
+<Populationgrowthrate>0.83% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 1.14 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 1.06 male(s)/female (2000 est.)</Sexratio>
+<Religions>Evangelical Lutheran</Religions>
+<Countryname>Faroe Islands </Countryname>
+<Capital>Torshavn</Capital>
+<Flagdescription>white with a red cross outlined in blue that extends to the edges of the flag; the vertical part of the cross is shifted to the hoist side in the style of the Dannebrog (Danish flag)</Flagdescription>
+<GDP>purchasing power parity - $700 million (1996 est.)</GDP>
+<Industries>fishing, shipbuilding, construction, handicrafts</Industries>
+<Exports>$362 million (f.o.b., 1995)</Exports>
+<Imports>$315.6 million (c.i.f., 1995)</Imports>
+<Currency>1 Danish krone (DKr) = 100 oere</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, archipelago in the South Pacific Ocean, about one-half of the way from South America to Australia</Location>
+<Geographiccoordinates>15 00 S, 140 00 W</Geographiccoordinates>
+<Area>4167</Area>
+<Climate>tropical, but moderate</Climate>
+<Naturalresources>timber, fish, cobalt, hydropower</Naturalresources>
+<Population>249110</Population>
+<Populationgrowthrate>1.78% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.09 male(s)/female
+65 years and over: 1.01 male(s)/female
+total population: 1.07 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 54%, Roman Catholic 30%, other 16%</Religions>
+<Countryname>French Polynesia </Countryname>
+<Capital>Papeete</Capital>
+<Flagdescription>two narrow red horizontal bands encase a wide white band; centered on the white band is a disk with blue and white wave pattern on the lower half and gold and white ray pattern on the upper half; a stylized red, blue and white ship rides on the wave pattern; the French flag is used for official occasions</Flagdescription>
+<GDP>purchasing power parity - $2.6 billion (1997 est.)</GDP>
+<Industries>tourism, pearls, agricultural processing, handicrafts</Industries>
+<Exports>$212 million (f.o.b., 1996)</Exports>
+<Imports>$860 million (c.i.f., 1996)</Imports>
+<Currency>1 Comptoirs Francais du Pacifique franc (CFPF) = 100 centimes</Currency>
+<Airports>45 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, atoll in the North Pacific Ocean, about one-half of the way from Hawaii to Australia</Location>
+<Geographiccoordinates>0 13 N, 176 31 W</Geographiccoordinates>
+<Area>1</Area>
+<Climate>equatorial; scant rainfall, constant wind, burning sun</Climate>
+<Naturalresources>guano (deposits worked until 1891)</Naturalresources>
+<Population></Population>
+<Countryname>Baker Island </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+<Airports>1 abandoned World War II runway of 1,665 m, completely covered with vegetation and unusable</Airports>
+</record>
+<record>
+<Location>Western Europe, bordering the Bay of Biscay and English Channel, between Belgium and Spain, southeast of the UK; bordering the Mediterranean Sea, between Italy and Spain</Location>
+<Geographiccoordinates>46 00 N, 2 00 E</Geographiccoordinates>
+<Area>547030</Area>
+<Climate>generally cool winters and mild summers, but mild winters and hot summers along the Mediterranean</Climate>
+<Naturalresources>coal, iron ore, bauxite, fish, timber, zinc, potash</Naturalresources>
+<Population>59329691</Population>
+<Populationgrowthrate>0.38% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.68 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 90%, Protestant 2%, Jewish 1%, Muslim (North African workers) 1%, unaffiliated 6%</Religions>
+<Countryname>France </Countryname>
+<Capital>Paris</Capital>
+<Flagdescription>three equal vertical bands of blue (hoist side), white, and red; known as the French Tricouleur (Tricolor); the design and colors are similar to a number of other flags, including those of Belgium, Chad, Ireland, Cote d'Ivoire, and Luxembourg; the official flag for all French dependent areas</Flagdescription>
+<GDP>purchasing power parity - $1.373 trillion (1999 est.)</GDP>
+<Industries>steel, machinery, chemicals, automobiles, metallurgy, aircraft, electronics, mining; textiles, food processing; tourism</Industries>
+<Exports>$304.7 billion (f.o.b., 1999)</Exports>
+<Imports>$280.8 billion (f.o.b., 1999)</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>474 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for and consumer of South American cocaine and Southwest Asian heroin</Illicitdrugs>
+</record>
+<record>
+<Location>south of Africa, islands in the southern Indian Ocean, about equidistant between Africa, Antarctica, and Australia; note - French Southern and Antarctic Lands includes Ile Amsterdam, Ile Saint-Paul, Iles Crozet, and Iles Kerguelen in the southern Indian Ocean, along with the French-claimed sector of Antarctica, "Adelie Land"; the US does not recognize the French claim to "Adelie Land"</Location>
+<Geographiccoordinates>43 00 S, 67 00 E</Geographiccoordinates>
+<Area>7781</Area>
+<Climate>antarctic</Climate>
+<Naturalresources>fish, crayfish</Naturalresources>
+<Population></Population>
+<Countryname>French Southern and Antarctic Lands </Countryname>
+<Flagdescription>the flag of France is used</Flagdescription>
+<Airports>none</Airports>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean and Senegal</Location>
+<Geographiccoordinates>13 28 N, 16 34 W</Geographiccoordinates>
+<Area>11300</Area>
+<Climate>tropical; hot, rainy season (June to November); cooler, dry season (November to May)</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population>1367124</Population>
+<Populationgrowthrate>3.2% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 1.11 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 90%, Christian 9%, indigenous beliefs 1%</Religions>
+<Countryname>The Gambia </Countryname>
+<Capital>Banjul</Capital>
+<Flagdescription>three equal horizontal bands of red (top), blue with white edges, and green</Flagdescription>
+<GDP>purchasing power parity - $1.4 billion (1999 est.)</GDP>
+<Industries>processing peanuts, fish, and hides; tourism; beverages; agricultural machinery assembly, woodworking, metalworking; clothing</Industries>
+<Exports>$132 million (f.o.b., 1998)</Exports>
+<Imports>$201 million (f.o.b., 1998)</Imports>
+<Currency>1 dalasi (D) = 100 butut</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Africa, bordering the Atlantic Ocean at the Equator, between Republic of the Congo and Equatorial Guinea</Location>
+<Geographiccoordinates>1 00 S, 11 45 E</Geographiccoordinates>
+<Area>267667</Area>
+<Climate>tropical; always hot, humid</Climate>
+<Naturalresources>petroleum, manganese, uranium, gold, timber, iron ore, hydropower</Naturalresources>
+<Population>1208436</Population>
+<Populationgrowthrate>1.08% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.98 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 55%-75%, Muslim less than 1%, animist</Religions>
+<Countryname>Gabon </Countryname>
+<Capital>Libreville</Capital>
+<Flagdescription>three equal horizontal bands of green (top), yellow, and blue</Flagdescription>
+<GDP>purchasing power parity - $7.9 billion (1999 est.)</GDP>
+<Industries>food and beverage; textile; lumbering and plywood; cement; petroleum extraction and refining; manganese, uranium, and gold mining; chemicals; ship repair</Industries>
+<Exports>$2.4 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$1.2 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>61 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southwestern Asia, bordering the Black Sea, between Turkey and Russia</Location>
+<Geographiccoordinates>42 00 N, 43 30 E</Geographiccoordinates>
+<Area>69700</Area>
+<Climate>warm and pleasant; Mediterranean-like on Black Sea coast</Climate>
+<Naturalresources>forests, hydropower, manganese deposits, iron ore, copper, minor coal and oil deposits; coastal climate and soils allow for important tea and citrus growth</Naturalresources>
+<Population>5019538</Population>
+<Populationgrowthrate>-0.62% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.63 male(s)/female
+total population: 0.91 male(s)/female (2000 est.)</Sexratio>
+<Religions>Georgian Orthodox 65%, Muslim 11%, Russian Orthodox 10%, Armenian Apostolic 8%, unknown 6%</Religions>
+<Countryname>Georgia </Countryname>
+<Capital>T'bilisi</Capital>
+<Flagdescription>maroon field with small rectangle in upper hoist side corner; rectangle divided horizontally with black on top, white below</Flagdescription>
+<GDP>purchasing power parity - $11.7 billion (1999 est.)</GDP>
+<Industries>steel, aircraft, machine tools, electric locomotives, trucks, tractors, textiles, shoes, chemicals, wood products, wine</Industries>
+<Exports>$330 million (1999 est.)</Exports>
+<Imports>$840 million (1999 est.)</Imports>
+<Currency>1 lari (GEL) = 100 tetri</Currency>
+<Airports>28 (1994 est.)</Airports>
+<Illicitdrugs>limited cultivation of cannabis and opium poppy, mostly for domestic consumption; used as transshipment point for opiates via Central Asia to Western Europe and Russia</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the Gulf of Guinea, between Cote d'Ivoire and Togo</Location>
+<Geographiccoordinates>8 00 N, 2 00 W</Geographiccoordinates>
+<Area>238540</Area>
+<Climate>tropical; warm and comparatively dry along southeast coast; hot and humid in southwest; hot and dry in north</Climate>
+<Naturalresources>gold, timber, industrial diamonds, bauxite, manganese, fish, rubber, hydropower</Naturalresources>
+<Population>19533560</Population>
+<Populationgrowthrate>1.87% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.91 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 38%, Muslim 30%, Christian 24%, other 8%</Religions>
+<Countryname>Ghana </Countryname>
+<Capital>Accra</Capital>
+<Flagdescription>three equal horizontal bands of red (top), yellow, and green with a large black five-pointed star centered in the yellow band; uses the popular pan-African colors of Ethiopia; similar to the flag of Bolivia, which has a coat of arms centered in the yellow band</Flagdescription>
+<GDP>purchasing power parity - $35.5 billion (1999 est.)</GDP>
+<Industries>mining, lumbering, light manufacturing, aluminum smelting, food processing</Industries>
+<Exports>$1.7 billion (f.o.b., 1999)</Exports>
+<Imports>$2.5 billion (f.o.b., 1999)</Imports>
+<Currency>1 new cedi (C) = 100 pesewas</Currency>
+<Airports>12 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis for the international drug trade; transit hub for Southwest and Southeast Asian heroin and South American cocaine destined for Europe and the US</Illicitdrugs>
+</record>
+<record>
+<Location>Southwestern Europe, bordering the Strait of Gibraltar, which links the Mediterranean Sea and the North Atlantic Ocean, on the southern coast of Spain</Location>
+<Geographiccoordinates>36 11 N, 5 22 W</Geographiccoordinates>
+<Area>6</Area>
+<Climate>Mediterranean with mild winters and warm summers</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>29481</Population>
+<Populationgrowthrate>0.91% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.14 male(s)/female
+65 years and over: 0.72 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 76.9%, Church of England 6.9%, Muslim 6.9%, Jewish 2.3%, none or other 7% (1991)</Religions>
+<Countryname>Gibraltar </Countryname>
+<Capital>Gibraltar</Capital>
+<Flagdescription>two horizontal bands of white (top, double width) and red with a three-towered red castle in the center of the white band; hanging from the castle gate is a gold key centered in the red band</Flagdescription>
+<GDP>purchasing power parity - $500 million (1997 est.)</GDP>
+<Industries>tourism, banking and finance, ship-building and repairing; support to large UK naval and air bases; tobacco, mineral water, beer, canned fish</Industries>
+<Exports>$81.1 million (f.o.b., 1997)</Exports>
+<Imports>$492 million (c.i.f., 1997)</Imports>
+<Currency>1 Gibraltar pound = 100 pence</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, island between the Caribbean Sea and Atlantic Ocean, north of Trinidad and Tobago</Location>
+<Geographiccoordinates>12 07 N, 61 40 W</Geographiccoordinates>
+<Area>340</Area>
+<Climate>tropical; tempered by northeast trade winds</Climate>
+<Naturalresources>timber, tropical fruit, deepwater harbors</Naturalresources>
+<Population>89018</Population>
+<Populationgrowthrate>-0.36% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.02 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.12 male(s)/female
+65 years and over: 0.83 male(s)/female
+total population: 1.07 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 53%, Anglican 13.8%, other Protestant 33.2%</Religions>
+<Countryname>Grenada </Countryname>
+<Capital>Saint George's</Capital>
+<Flagdescription>a rectangle divided diagonally into yellow triangles (top and bottom) and green triangles (hoist side and outer side), with a red border around the flag; there are seven yellow, five-pointed stars with three centered in the top red border, three centered in the bottom red border, and one on a red disk superimposed at the center of the flag; there is also a symbolic nutmeg pod on the hoist-side triangle (Grenada is the world's second-largest producer of nutmeg, after Indonesia); the seven stars represent the seven administrative divisions</Flagdescription>
+<GDP>purchasing power parity - $360 million (1999 est.)</GDP>
+<Industries>food and beverages, textiles, light assembly operations, tourism, construction</Industries>
+<Exports>$26.8 million (1998)</Exports>
+<Imports>$200 million (1998)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>3 (1999 est.)</Airports>
+<Illicitdrugs>small-scale cannabis cultivation; lesser transshipment point for marijuana and cocaine to US</Illicitdrugs>
+</record>
+<record>
+<Location>Western Europe, islands in the English Channel, northwest of France</Location>
+<Geographiccoordinates>49 28 N, 2 35 W</Geographiccoordinates>
+<Area>194</Area>
+<Climate>temperate with mild winters and cool summers; about 50% of days are overcast</Climate>
+<Naturalresources>cropland</Naturalresources>
+<Population>64080</Population>
+<Populationgrowthrate>0.42% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.7 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican, Roman Catholic, Presbyterian, Baptist, Congregational, Methodist</Religions>
+<Countryname>Guernsey </Countryname>
+<Capital>Saint Peter Port</Capital>
+<Flagdescription>white with the red cross of Saint George (patron saint of England) extending to the edges of the flag and a yellow equal-armed cross of William the Conqueror superimposed on the Saint George cross</Flagdescription>
+<GDP>purchasing power parity - $1.15 billion (1997 est.)</GDP>
+<Industries>tourism, banking</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 Guernsey pound = 100 pence</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern North America, island between the Arctic Ocean and the North Atlantic Ocean, northeast of Canada</Location>
+<Geographiccoordinates>72 00 N, 40 00 W</Geographiccoordinates>
+<Area>2175600</Area>
+<Climate>arctic to subarctic; cool summers, cold winters</Climate>
+<Naturalresources>zinc, lead, iron ore, coal, molybdenum, gold, platinum, uranium, fish, seals, whales</Naturalresources>
+<Population>56309</Population>
+<Populationgrowthrate>0.09% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.21 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 1.13 male(s)/female (2000 est.)</Sexratio>
+<Religions>Evangelical Lutheran</Religions>
+<Countryname>Greenland </Countryname>
+<Capital>Nuuk (Godthab)</Capital>
+<Flagdescription>two equal horizontal bands of white (top) and red with a large disk slightly to the hoist side of center - the top half of the disk is red, the bottom half is white</Flagdescription>
+<GDP>purchasing power parity - $945 million (1997 est.)</GDP>
+<Industries>fish processing (mainly shrimp), handicrafts, furs, small shipyards</Industries>
+<Exports>$363.4 million (f.o.b., 1995)</Exports>
+<Imports>$421 million (c.i.f., 1995)</Imports>
+<Currency>1 Danish krone (DKr) = 100 oere</Currency>
+<Airports>14 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Central Europe, bordering the Baltic Sea and the North Sea, between the Netherlands and Poland, south of Denmark</Location>
+<Geographiccoordinates>51 00 N, 9 00 E</Geographiccoordinates>
+<Area>357021</Area>
+<Climate>temperate and marine; cool, cloudy, wet winters and summers; occasional warm foehn wind</Climate>
+<Naturalresources>iron ore, coal, potash, timber, lignite, uranium, copper, natural gas, salt, nickel, arable land</Naturalresources>
+<Population>82797408</Population>
+<Populationgrowthrate>0.29% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.62 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 38%, Roman Catholic 34%, Muslim 1.7%, unaffiliated or other 26.3%</Religions>
+<Countryname>Germany </Countryname>
+<Capital>Berlin</Capital>
+<Flagdescription>three equal horizontal bands of black (top), red, and gold</Flagdescription>
+<GDP>purchasing power parity - $1.864 trillion (1999 est.)</GDP>
+<Industries>among world's largest and technologically advanced producers of iron, steel, coal, cement, chemicals, machinery, vehicles, machine tools, electronics, food and beverages; shipbuilding; textiles</Industries>
+<Exports>$610 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$587 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 deutsche mark (DM) = 100 pfennige</Currency>
+<Airports>615 (1999 est.)</Airports>
+<Illicitdrugs>source of precursor chemicals for South American cocaine processors; transshipment point for and consumer of Southwest Asian heroin, Latin American cocaine, and European-produced synthetic drugs</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, group of islands in the Indian Ocean, northwest of Madagascar</Location>
+<Geographiccoordinates>11 30 S, 47 20 E</Geographiccoordinates>
+<Area>5</Area>
+<Climate>tropical</Climate>
+<Naturalresources>guano, coconuts</Naturalresources>
+<Population></Population>
+<Countryname>Glorioso Islands </Countryname>
+<Flagdescription>the flag of France is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, islands in the eastern Caribbean Sea, southeast of Puerto Rico</Location>
+<Geographiccoordinates>16 15 N, 61 35 W</Geographiccoordinates>
+<Area>1780</Area>
+<Climate>subtropical tempered by trade winds; moderately high humidity</Climate>
+<Naturalresources>cultivable land, beaches and climate that foster tourism</Naturalresources>
+<Population>426493</Population>
+<Populationgrowthrate>1.11% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.73 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 95%, Hindu and pagan African 4%, Protestant 1%</Religions>
+<Countryname>Guadeloupe </Countryname>
+<Capital>Basse-Terre</Capital>
+<Flagdescription>three horizontal bands, a narrow green band (top), a wide red band, and a narrow green band; the green bands are separated from the red band by two narrow white stripes; a gold five-pointed star is centered in the red band toward the hoist side; the flag of France is used for official occasions</Flagdescription>
+<GDP>purchasing power parity - $3.7 billion (1996 est.)</GDP>
+<Industries>construction, cement, rum, sugar, tourism</Industries>
+<Exports>$140 million (f.o.b., 1997)</Exports>
+<Imports>$1.7 billion (c.i.f., 1997)</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>9 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, island in the North Pacific Ocean, about three-quarters of the way from Hawaii to the Philippines</Location>
+<Geographiccoordinates>13 28 N, 144 47 E</Geographiccoordinates>
+<Area>541</Area>
+<Climate>tropical marine; generally warm and humid, moderated by northeast trade winds; dry season from January to June, rainy season from July to December; little seasonal temperature variation</Climate>
+<Naturalresources>fishing (largely undeveloped), tourism (especially from Japan)</Naturalresources>
+<Population>154623</Population>
+<Populationgrowthrate>1.67% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.14 male(s)/female
+under 15 years: 1.1 male(s)/female
+15-64 years: 1.11 male(s)/female
+65 years and over: 1.01 male(s)/female
+total population: 1.1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 85%, other 15% (1999 est.)</Religions>
+<Countryname>Guam </Countryname>
+<Capital>Hagatna (Agana)</Capital>
+<Flagdescription>territorial flag is dark blue with a narrow red border on all four sides; centered is a red-bordered, pointed, vertical ellipse containing a beach scene, outrigger canoe with sail, and a palm tree with the word GUAM superimposed in bold red letters; US flag is the national flag</Flagdescription>
+<GDP>purchasing power parity - $3 billion (1996 est.)</GDP>
+<Industries>US military, tourism, construction, transshipment services, concrete products, printing and publishing, food processing, textiles</Industries>
+<Exports>$86.1 million (f.o.b., 1992)</Exports>
+<Imports>$202.4 million (c.i.f., 1992)</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>5 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Europe, bordering the Aegean Sea, Ionian Sea, and the Mediterranean Sea, between Albania and Turkey</Location>
+<Geographiccoordinates>39 00 N, 22 00 E</Geographiccoordinates>
+<Area>131940</Area>
+<Climate>temperate; mild, wet winters; hot, dry summers</Climate>
+<Naturalresources>bauxite, lignite, magnesite, petroleum, marble, hydropower</Naturalresources>
+<Population>10601527</Population>
+<Populationgrowthrate>0.21% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.07 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.8 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Greek Orthodox 98%, Muslim 1.3%, other 0.7%</Religions>
+<Countryname>Greece </Countryname>
+<Capital>Athens</Capital>
+<Flagdescription>nine equal horizontal stripes of blue alternating with white; there is a blue square in the upper hoist-side corner bearing a white cross; the cross symbolizes Greek Orthodoxy, the established religion of the country</Flagdescription>
+<GDP>purchasing power parity - $149.2 billion (1999 est.)</GDP>
+<Industries>tourism; food and tobacco processing, textiles; chemicals, metal products; mining, petroleum</Industries>
+<Exports>$12.4 billion (f.o.b., 1998)</Exports>
+<Imports>$27.7 billion (c.i.f., 1998)</Imports>
+<Currency>1 drachma (Dr) = 100 lepta</Currency>
+<Airports>80 (1999 est.)</Airports>
+<Illicitdrugs>a gateway to Europe for traffickers smuggling cannabis and heroin from the Middle East and Southwest Asia to the West and precursor chemicals to the East; some South American cocaine transits or is consumed in Greece</Illicitdrugs>
+</record>
+<record>
+<Location>Middle America, bordering the Caribbean Sea, between Honduras and Belize and bordering the North Pacific Ocean, between El Salvador and Mexico</Location>
+<Geographiccoordinates>15 30 N, 90 15 W</Geographiccoordinates>
+<Area>108890</Area>
+<Climate>tropical; hot, humid in lowlands; cooler in highlands</Climate>
+<Naturalresources>petroleum, nickel, rare woods, fish, chicle, hydropower</Naturalresources>
+<Population>12639939</Population>
+<Populationgrowthrate>2.63% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.88 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic, Protestant, indigenous Mayan beliefs</Religions>
+<Countryname>Guatemala </Countryname>
+<Capital>Guatemala</Capital>
+<Flagdescription>three equal vertical bands of light blue (hoist side), white, and light blue with the coat of arms centered in the white band; the coat of arms includes a green and red quetzal (the national bird) and a scroll bearing the inscription LIBERTAD 15 DE SEPTIEMBRE DE 1821 (the original date of independence from Spain) all superimposed on a pair of crossed rifles and a pair of crossed swords and framed by a wreath</Flagdescription>
+<GDP>purchasing power parity - $47.9 billion (1999 est.)</GDP>
+<Industries>sugar, textiles and clothing, furniture, chemicals, petroleum, metals, rubber, tourism</Industries>
+<Exports>$2.4 billion (f.o.b., 1999)</Exports>
+<Imports>$4.5 billion (c.i.f., 1999)</Imports>
+<Currency>1 quetzal (Q) = 100 centavos</Currency>
+<Airports>477 (1999 est.)</Airports>
+<Illicitdrugs>transit country for cocaine shipments; minor producer of illicit opium poppy and cannabis for the international drug trade; active eradication program in 1996 effectively eliminated the cannabis crop; proximity to Mexico makes Guatemala a major staging area for drugs (cocaine shipments)</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean, between Guinea-Bissau and Sierra Leone</Location>
+<Geographiccoordinates>11 00 N, 10 00 W</Geographiccoordinates>
+<Area>245857</Area>
+<Climate>generally hot and humid; monsoonal-type rainy season (June to November) with southwesterly winds; dry season (December to May) with northeasterly harmattan winds</Climate>
+<Naturalresources>bauxite, iron ore, diamonds, gold, uranium, hydropower, fish</Naturalresources>
+<Population>7466200</Population>
+<Populationgrowthrate>1.95% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.7 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 85%, Christian 8%, indigenous beliefs 7%</Religions>
+<Countryname>Guinea </Countryname>
+<Capital>Conakry</Capital>
+<Flagdescription>three equal vertical bands of red (hoist side), yellow, and green; uses the popular pan-African colors of Ethiopia; similar to the flag of Rwanda, which has a large black letter R centered in the yellow band</Flagdescription>
+<GDP>purchasing power parity - $9.2 billion (1999 est.)</GDP>
+<Industries>bauxite, gold, diamonds; alumina refining; light manufacturing and agricultural processing industries</Industries>
+<Exports>$695 million (f.o.b., 1998 est.)</Exports>
+<Imports>$560 million (f.o.b., 1998 est.)</Imports>
+<Currency>1 Guinean franc (FG) = 100 centimes</Currency>
+<Airports>15 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern South America, bordering the North Atlantic Ocean, between Suriname and Venezuela</Location>
+<Geographiccoordinates>5 00 N, 59 00 W</Geographiccoordinates>
+<Area>214970</Area>
+<Climate>tropical; hot, humid, moderated by northeast trade winds; two rainy seasons (May to mid-August, mid-November to mid-January)</Climate>
+<Naturalresources>bauxite, gold, diamonds, hardwood timber, shrimp, fish</Naturalresources>
+<Population>697286</Population>
+<Populationgrowthrate>-0.1% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 50%, Hindu 33%, Muslim 9%, other 8%</Religions>
+<Countryname>Guyana </Countryname>
+<Capital>Georgetown</Capital>
+<Flagdescription>green, with a red isosceles triangle (based on the hoist side) superimposed on a long, yellow arrowhead; there is a narrow, black border between the red and yellow, and a narrow, white border between the yellow and the green</Flagdescription>
+<GDP>purchasing power parity - $1.86 billion (1999 est.)</GDP>
+<Industries>bauxite, sugar, rice milling, timber, fishing (shrimp), textiles, gold mining</Industries>
+<Exports>$574 million (f.o.b., 1999 est.)</Exports>
+<Imports>$620 million (c.i.f., 1999 est.)</Imports>
+<Currency>1 Guyanese dollar (G$) = 100 cents</Currency>
+<Airports>51 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for narcotics from South America - primarily Venezuela - to Europe and the US; producer of cannabis</Illicitdrugs>
+</record>
+<record>
+<Location>Middle East, bordering the Mediterranean Sea, between Egypt and Israel</Location>
+<Geographiccoordinates>31 25 N, 34 20 E</Geographiccoordinates>
+<Area>360</Area>
+<Climate>temperate, mild winters, dry and warm to hot summers</Climate>
+<Naturalresources>arable land</Naturalresources>
+<Population>1132063</Population>
+<Populationgrowthrate>3.97% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim (predominantly Sunni) 98.7%, Christian 0.7%, Jewish 0.6%</Religions>
+<Countryname>Gaza Strip </Countryname>
+<GDP>purchasing power parity - $1.17 billion (1999 est.)</GDP>
+<Industries>generally small family businesses that produce textiles, soap, olive-wood carvings, and mother-of-pearl souvenirs; the Israelis have established some small-scale modern industries in an industrial center</Industries>
+<Exports>$682 million (includes West Bank) (f.o.b., 1998 est.)</Exports>
+<Imports>$2.5 billion (c.i.f., 1998 est.) (includes West Bank)</Imports>
+<Currency>1 new Israeli shekel (NIS) = 100 new agorot</Currency>
+<Airports>2 (1999 est.)
+note: includes Gaza International Airport that opened on 24 November 1998 as part of agreements stipulated in the September 1995 Oslo II Accord and the 23 October 1998 Wye River Memorandum</Airports>
+</record>
+<record>
+<Location>Caribbean, western one-third of the island of Hispaniola, between the Caribbean Sea and the North Atlantic Ocean, west of the Dominican Republic</Location>
+<Geographiccoordinates>19 00 N, 72 25 W</Geographiccoordinates>
+<Area>27750</Area>
+<Climate>tropical; semiarid where mountains in east cut off trade winds</Climate>
+<Naturalresources>bauxite, copper, calcium carbonate, gold, marble, hydropower</Naturalresources>
+<Population>6867995</Population>
+<Populationgrowthrate>1.39% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.95 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 80%, Protestant 16% (Baptist 10%, Pentecostal 4%, Adventist 1%, other 1%), none 1%, other 3% (1982)
+note: roughly one-half of the population also practices Voodoo</Religions>
+<Countryname>Haiti </Countryname>
+<Capital>Port-au-Prince</Capital>
+<Flagdescription>two equal horizontal bands of blue (top) and red with a centered white rectangle bearing the coat of arms, which contains a palm tree flanked by flags and two cannons above a scroll bearing the motto L'UNION FAIT LA FORCE (Union Makes Strength)</Flagdescription>
+<GDP>purchasing power parity - $9.2 billion (1999 est.)</GDP>
+<Industries>sugar refining, flour milling, textiles, cement, tourism, light assembly industries based on imported parts</Industries>
+<Exports>$322 million (f.o.b., 1999)</Exports>
+<Imports>$762 million (c.i.f., 1999)</Imports>
+<Currency>1 gourde (G) = 100 centimes</Currency>
+<Airports>13 (1999 est.)</Airports>
+<Illicitdrugs>major Caribbean transshipment point for cocaine en route to the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Asia, bordering the South China Sea and China</Location>
+<Geographiccoordinates>22 15 N, 114 10 E</Geographiccoordinates>
+<Area>1092</Area>
+<Climate>tropical monsoon; cool and humid in winter, hot and rainy from spring through summer, warm and sunny in fall</Climate>
+<Naturalresources>outstanding deepwater harbor, feldspar</Naturalresources>
+<Population>7116302</Population>
+<Populationgrowthrate>1.35% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.07 male(s)/female
+under 15 years: 1.12 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>eclectic mixture of local religions 90%, Christian 10%</Religions>
+<Countryname>Hong Kong </Countryname>
+<Flagdescription>red with a stylized, white, five-petal bauhinia flower in the center</Flagdescription>
+<GDP>purchasing power parity - $158.2 billion (1999 est.)</GDP>
+<Industries>textiles, clothing, tourism, electronics, plastics, toys, watches, clocks</Industries>
+<Exports>$169.98 billion (including reexports; f.o.b., 1999 est.)</Exports>
+<Imports>$174.4 billion (c.i.f., 1999)</Imports>
+<Currency>1 Hong Kong dollar (HK$) = 100 cents</Currency>
+<Airports>3 (1999 est.)</Airports>
+<Illicitdrugs>a hub for Southeast Asian heroin trade; transshipment and money-laundering center; increasing indigenous amphetamine abuse</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, islands in the Indian Ocean, about two-thirds of the way from Madagascar to Antarctica</Location>
+<Geographiccoordinates>53 06 S, 72 31 E</Geographiccoordinates>
+<Area>412</Area>
+<Climate>antarctic</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Heard Island and McDonald Islands </Countryname>
+<Flagdescription>the flag of Australia is used</Flagdescription>
+</record>
+<record>
+<Location>Middle America, bordering the Caribbean Sea, between Guatemala and Nicaragua and bordering the North Pacific Ocean, between El Salvador and Nicaragua</Location>
+<Geographiccoordinates>15 00 N, 86 30 W</Geographiccoordinates>
+<Area>112090</Area>
+<Climate>subtropical in lowlands, temperate in mountains</Climate>
+<Naturalresources>timber, gold, silver, copper, lead, zinc, iron ore, antimony, coal, fish, hydropower</Naturalresources>
+<Population>6249598</Population>
+<Populationgrowthrate>2.52% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.9 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 97%, Protestant minority</Religions>
+<Countryname>Honduras </Countryname>
+<Capital>Tegucigalpa</Capital>
+<Flagdescription>three equal horizontal bands of blue (top), white, and blue with five blue five-pointed stars arranged in an X pattern centered in the white band; the stars represent the members of the former Federal Republic of Central America - Costa Rica, El Salvador, Guatemala, Honduras, and Nicaragua; similar to the flag of El Salvador, which features a round emblem encircled by the words REPUBLICA DE EL SALVADOR EN LA AMERICA CENTRAL centered in the white band; also similar to the flag of Nicaragua, which features a triangle encircled by the word REPUBLICA DE NICARAGUA on top and AMERICA CENTRAL on the bottom, centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $14.1 billion (1999 est.)</GDP>
+<Industries>sugar, coffee, textiles, clothing, wood products</Industries>
+<Exports>$1.6 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$2.7 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 lempira (L) = 100 centavos</Currency>
+<Airports>119 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for drugs and narcotics; illicit producer of cannabis, cultivated on small plots and used principally for local consumption; corruption is a major problem</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, island in the North Pacific Ocean, about one-half of the way from Hawaii to Australia</Location>
+<Geographiccoordinates>0 48 N, 176 38 W</Geographiccoordinates>
+<Area>1</Area>
+<Climate>equatorial; scant rainfall, constant wind, burning sun</Climate>
+<Naturalresources>guano (deposits worked until late 1800s)</Naturalresources>
+<Population></Population>
+<Countryname>Howland Island </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+<Airports>airstrip constructed in 1937 for scheduled refueling stop on the round-the-world flight of Amelia EARHART and Fred NOONAN - they left Lae, New Guinea, for Howland Island, but were never seen again; the airstrip is no longer serviceable</Airports>
+</record>
+<record>
+<Location>Southeastern Europe, bordering the Adriatic Sea, between Bosnia and Herzegovina and Slovenia</Location>
+<Geographiccoordinates>45 10 N, 15 30 E</Geographiccoordinates>
+<Area>56538</Area>
+<Climate>Mediterranean and continental; continental climate predominant with hot summers and cold winters; mild winters, dry summers along coast</Climate>
+<Naturalresources>oil, some coal, bauxite, low-grade iron ore, calcium, natural asphalt, silica, mica, clays, salt, hydropower</Naturalresources>
+<Population>4282216</Population>
+<Populationgrowthrate>0.93% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.07 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.59 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 76.5%, Orthodox 11.1%, Muslim 1.2%, Protestant 0.4%, others and unknown 10.8% (1991)</Religions>
+<Countryname>Croatia </Countryname>
+<Capital>Zagreb</Capital>
+<Flagdescription>red, white, and blue horizontal bands with Croatian coat of arms (red and white checkered)</Flagdescription>
+<GDP>purchasing power parity - $23.9 billion (1999 est.)</GDP>
+<Industries>chemicals and plastics, machine tools, fabricated metal, electronics, pig iron and rolled steel products, aluminum, paper, wood products, construction materials, textiles, shipbuilding, petroleum and petroleum refining, food and beverages; tourism</Industries>
+<Exports>$4.5 billion (f.o.b., 1998)</Exports>
+<Imports>$8.4 billion (c.i.f., 1998)</Imports>
+<Currency>1 Croatian kuna (HRK) = 100 lipas</Currency>
+<Airports>67 (1999 est.)</Airports>
+<Illicitdrugs>transit point along the Balkan route for Southwest Asian heroin to Western Europe; a minor transit point for maritime shipments of South American cocaine bound for Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Central Europe, northwest of Romania</Location>
+<Geographiccoordinates>47 00 N, 20 00 E</Geographiccoordinates>
+<Area>93030</Area>
+<Climate>temperate; cold, cloudy, humid winters; warm summers</Climate>
+<Naturalresources>bauxite, coal, natural gas, fertile soils, arable land</Naturalresources>
+<Population>10138844</Population>
+<Populationgrowthrate>-0.33% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.59 male(s)/female
+total population: 0.91 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 67.5%, Calvinist 20%, Lutheran 5%, atheist and other 7.5%</Religions>
+<Countryname>Hungary </Countryname>
+<Capital>Budapest</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and green</Flagdescription>
+<GDP>purchasing power parity - $79.4 billion (1999 est.)</GDP>
+<Industries>mining, metallurgy, construction materials, processed foods, textiles, chemicals (especially pharmaceuticals), motor vehicles</Industries>
+<Exports>$22.6 billion (f.o.b., 1999)</Exports>
+<Imports>$25.1 billion (f.o.b., 1999)</Imports>
+<Currency>1 forint (Ft) = 100 filler</Currency>
+<Airports>43 (1999 est.)</Airports>
+<Illicitdrugs>major transshipment point for Southwest Asian heroin and cannabis and transit point for South American cocaine destined for Western Europe; limited producer of precursor chemicals, particularly for amphetamines and methamphetamines</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Europe, island between the Greenland Sea and the North Atlantic Ocean, northwest of the UK</Location>
+<Geographiccoordinates>65 00 N, 18 00 W</Geographiccoordinates>
+<Area>103000</Area>
+<Climate>temperate; moderated by North Atlantic Current; mild, windy winters; damp, cool summers</Climate>
+<Naturalresources>fish, hydropower, geothermal power, diatomite</Naturalresources>
+<Population>276365</Population>
+<Populationgrowthrate>0.57% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Evangelical Lutheran 91%, other Protestant and Roman Catholic, none (1997)</Religions>
+<Countryname>Iceland </Countryname>
+<Capital>Reykjavik</Capital>
+<Flagdescription>blue with a red cross outlined in white that extends to the edges of the flag; the vertical part of the cross is shifted to the hoist side in the style of the Dannebrog (Danish flag)</Flagdescription>
+<GDP>purchasing power parity - $6.42 billion (1999 est.)</GDP>
+<Industries>fish processing; aluminum smelting, ferrosilicon production, geothermal power; tourism</Industries>
+<Exports>$1.9 billion (f.o.b., 1998)</Exports>
+<Imports>$2.4 billion (f.o.b., 1998)</Imports>
+<Currency>1 Icelandic krona (IKr) = 100 aurar</Currency>
+<Airports>86 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Asia, archipelago between the Indian Ocean and the Pacific Ocean</Location>
+<Geographiccoordinates>5 00 S, 120 00 E</Geographiccoordinates>
+<Area>1919440</Area>
+<Climate>tropical; hot, humid; more moderate in highlands</Climate>
+<Naturalresources>petroleum, tin, natural gas, nickel, timber, bauxite, copper, fertile soils, coal, gold, silver</Naturalresources>
+<Population>224784210</Population>
+<Populationgrowthrate>1.63% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.78 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 88%, Protestant 5%, Roman Catholic 3%, Hindu 2%, Buddhist 1%, other 1% (1998)</Religions>
+<Countryname>Indonesia </Countryname>
+<Capital>Jakarta</Capital>
+<Flagdescription>two equal horizontal bands of red (top) and white; similar to the flag of Monaco, which is shorter; also similar to the flag of Poland, which is white (top) and red</Flagdescription>
+<GDP>purchasing power parity - $610 billion (1999 est.)</GDP>
+<Industries>petroleum and natural gas; textiles, apparel, and footwear; mining, cement, chemical fertilizers, plywood; rubber; food; tourism</Industries>
+<Exports>$48 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$24 billion (c.i.f., 1999 est.)</Imports>
+<Currency>Indonesian rupiah (Rp) = 100 sen</Currency>
+<Airports>446 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis largely for domestic use; possible growing role as transshipment point for Golden Triangle heroin</Illicitdrugs>
+</record>
+<record>
+<Location>Western Europe, island in the Irish Sea, between Great Britain and Ireland</Location>
+<Geographiccoordinates>54 15 N, 4 30 W</Geographiccoordinates>
+<Area>572</Area>
+<Climate>cool summers and mild winters; temperate; overcast about one-third of the time</Climate>
+<Naturalresources>none</Naturalresources>
+<Population>73117</Population>
+<Populationgrowthrate>0.52% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.66 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican, Roman Catholic, Methodist, Baptist, Presbyterian, Society of Friends</Religions>
+<Countryname>Isle of Man </Countryname>
+<Capital>Douglas</Capital>
+<Flagdescription>red with the Three Legs of Man emblem (Trinacria), in the center; the three legs are joined at the thigh and bent at the knee; in order to have the toes pointing clockwise on both sides of the flag, a two-sided emblem is used</Flagdescription>
+<GDP>purchasing power parity - $1.2 billion (1998 est.)</GDP>
+<Industries>financial services, light manufacturing, tourism</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 Manx pound = 100 pence</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Asia, bordering the Arabian Sea and the Bay of Bengal, between Burma and Pakistan</Location>
+<Geographiccoordinates>20 00 N, 77 00 E</Geographiccoordinates>
+<Area>3287590</Area>
+<Climate>varies from tropical monsoon in south to temperate in north</Climate>
+<Naturalresources>coal (fourth-largest reserves in the world), iron ore, manganese, mica, bauxite, titanium ore, chromite, natural gas, diamonds, petroleum, limestone, arable land</Naturalresources>
+<Population>1014003817</Population>
+<Populationgrowthrate>1.58% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.08 male(s)/female
+65 years and over: 1.03 male(s)/female
+total population: 1.07 male(s)/female (2000 est.)</Sexratio>
+<Religions>Hindu 80%, Muslim 14%, Christian 2.4%, Sikh 2%, Buddhist 0.7%, Jains 0.5%, other 0.4%</Religions>
+<Countryname>India </Countryname>
+<Capital>New Delhi</Capital>
+<Flagdescription>three equal horizontal bands of orange (top), white, and green with a blue chakra (24-spoked wheel) centered in the white band; similar to the flag of Niger, which has a small orange disk centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $1.805 trillion (1999 est.)</GDP>
+<Industries>textiles, chemicals, food processing, steel, transportation equipment, cement, mining, petroleum, machinery</Industries>
+<Exports>$36.3 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$50.2 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Indian rupee (Re) = 100 paise</Currency>
+<Airports>346 (1999 est.)</Airports>
+<Illicitdrugs>world's largest producer of licit opium for the pharmaceutical trade, but an undetermined quantity of opium is diverted to illicit international drug markets; major transit country for illicit narcotics produced in neighboring countries; illicit producer of hashish and methaqualone</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Asia, archipelago in the Indian Ocean, about one-half the way from Africa to Indonesia</Location>
+<Geographiccoordinates>6 00 S, 71 30 E</Geographiccoordinates>
+<Area>60</Area>
+<Climate>tropical marine; hot, humid, moderated by trade winds</Climate>
+<Naturalresources>coconuts, fish</Naturalresources>
+<Population></Population>
+<Countryname>British Indian Ocean Territory </Countryname>
+<Flagdescription>white with six blue wavy horizontal stripes; the flag of the UK is in the upper hoist-side quadrant; the striped section bears a palm tree and yellow crown centered on the outer half of the flag</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle America, atoll in the North Pacific Ocean, 1,120 km southwest of Mexico</Location>
+<Geographiccoordinates>10 17 N, 109 13 W</Geographiccoordinates>
+<Area>7</Area>
+<Climate>tropical, humid, average temperature 20-32 degrees C, rains May-October</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Clipperton Island </Countryname>
+<Flagdescription>the flag of France is used</Flagdescription>
+</record>
+<record>
+<Location>Middle East, bordering the Gulf of Oman, the Persian Gulf, and the Caspian Sea, between Iraq and Pakistan</Location>
+<Geographiccoordinates>32 00 N, 53 00 E</Geographiccoordinates>
+<Area>1000000</Area>
+<Climate>mostly arid or semiarid, subtropical along Caspian coast</Climate>
+<Naturalresources>petroleum, natural gas, coal, chromium, copper, iron ore, lead, manganese, zinc, sulfur</Naturalresources>
+<Population>65619636</Population>
+<Populationgrowthrate>0.83% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 1.12 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Shi'a Muslim 89%, Sunni Muslim 10%, Zoroastrian, Jewish, Christian, and Baha'i 1%</Religions>
+<Countryname>Iran </Countryname>
+<Capital>Tehran</Capital>
+<Flagdescription>three equal horizontal bands of green (top), white, and red; the national emblem (a stylized representation of the word Allah) in red is centered in the white band; ALLAH AKBAR (God is Great) in white Arabic script is repeated 11 times along the bottom edge of the green band and 11 times along the top edge of the red band</Flagdescription>
+<GDP>purchasing power parity - $347.6 billion (1999 est.)</GDP>
+<Industries>petroleum, petrochemicals, textiles, cement and other construction materials, food processing (particularly sugar refining and vegetable oil production), metal fabricating, armaments</Industries>
+<Exports>$12.2 billion (f.o.b., 1998 est.)</Exports>
+<Imports>$13.8 billion (f.o.b., 1998 est.)</Imports>
+<Currency>10 Iranian rials (IR) = 1 toman; note - domestic figures are generally referred to in terms of the toman</Currency>
+<Airports>288 (1999 est.)</Airports>
+<Illicitdrugs>despite substantial interdiction efforts, Iran remains a key transshipment point for Southwest Asian heroin to Europe; domestic consumption of narcotics remains a persistent problem and Iranian press reports estimate that there are at least 1.2 million drug users in the country</Illicitdrugs>
+</record>
+<record>
+<Location>Middle East, bordering the Mediterranean Sea, between Egypt and Lebanon</Location>
+<Geographiccoordinates>31 30 N, 34 45 E</Geographiccoordinates>
+<Area>20770</Area>
+<Climate>temperate; hot and dry in southern and eastern desert areas</Climate>
+<Naturalresources>copper, phosphates, bromide, potash, clay, sand, sulfur, asphalt, manganese, small amounts of natural gas and crude oil</Naturalresources>
+<Population>5842454</Population>
+<Populationgrowthrate>1.67% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.75 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Jewish 80.1%, Muslim 14.6% (mostly Sunni Muslim), Christian 2.1%, other 3.2% (1996 est.)</Religions>
+<Countryname>Israel </Countryname>
+<Capital>Jerusalem
+note: Israel proclaimed Jerusalem as its capital in 1950, but the US, like nearly all other countries, maintains its Embassy in Tel Aviv</Capital>
+<Flagdescription>white with a blue hexagram (six-pointed linear star) known as the Magen David (Shield of David) centered between two equal horizontal blue bands near the top and bottom edges of the flag</Flagdescription>
+<GDP>purchasing power parity - $105.4 billion (1999 est.)</GDP>
+<Industries>food processing, diamond cutting and polishing, textiles and apparel, chemicals, metal products, military equipment, transport equipment, electrical equipment, potash mining, high-technology electronics, tourism</Industries>
+<Exports>$23.5 billion (f.o.b., 1999)</Exports>
+<Imports>$30.6 billion (f.o.b., 1999)</Imports>
+<Currency>1 new Israeli shekel (NIS) = 100 new agorot</Currency>
+<Airports>58 (1999 est.)</Airports>
+<Illicitdrugs>increasingly concerned about cocaine and heroin abuse; drugs arrive in country from Lebanon and increasingly Jordan</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Europe, a peninsula extending into the central Mediterranean Sea, northeast of Tunisia</Location>
+<Geographiccoordinates>42 50 N, 12 50 E</Geographiccoordinates>
+<Area>301230</Area>
+<Climate>predominantly Mediterranean; Alpine in far north; hot, dry in south</Climate>
+<Naturalresources>mercury, potash, marble, sulfur, dwindling natural gas and crude oil reserves, fish, coal, arable land</Naturalresources>
+<Population>57634327</Population>
+<Populationgrowthrate>0.09% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.7 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>predominately Roman Catholic with mature Protestant and Jewish communities and a growing Muslim immigrant community</Religions>
+<Countryname>Italy </Countryname>
+<Capital>Rome</Capital>
+<Flagdescription>three equal vertical bands of green (hoist side), white, and red; similar to the flag of Ireland, which is longer and is green (hoist side), white, and orange; also similar to the flag of the Cote d'Ivoire, which has the colors reversed - orange (hoist side), white, and green
+note: inspired by the French flag brought to Italy by Napoleon in 1797</Flagdescription>
+<GDP>purchasing power parity - $1.212 trillion (1999 est.)</GDP>
+<Industries>tourism, machinery, iron and steel, chemicals, food processing, textiles, motor vehicles, clothing, footwear, ceramics</Industries>
+<Exports>$242.6 billion (f.o.b., 1998)</Exports>
+<Imports>$206.9 billion (f.o.b., 1998)</Imports>
+<Currency>1 Italian lira (Lit) = 100 centesimi</Currency>
+<Airports>136 (1999 est.)</Airports>
+<Illicitdrugs>important gateway for and consumer of Latin American cocaine and Southwest Asian heroin entering the European market</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean, between Ghana and Liberia</Location>
+<Geographiccoordinates>8 00 N, 5 00 W</Geographiccoordinates>
+<Area>322460</Area>
+<Climate>tropical along coast, semiarid in far north; three seasons - warm and dry (November to March), hot and dry (March to May), hot and wet (June to October)</Climate>
+<Naturalresources>petroleum, diamonds, manganese, iron ore, cobalt, bauxite, copper, hydropower</Naturalresources>
+<Population>15980950</Population>
+<Populationgrowthrate>2.58% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 1.06 male(s)/female
+65 years and over: 1 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 60%, Christian 22%, indigenous 18% (some of these are also numbered among the Christians and Muslims)</Religions>
+<Countryname>Cote d'Ivoire </Countryname>
+<Capital>Yamoussoukro
+note: although Yamoussoukro has been the capital since 1983, Abidjan remains the administrative center; the US, like other countries, maintains its Embassy in Abidjan</Capital>
+<Flagdescription>three equal vertical bands of orange (hoist side), white, and green; similar to the flag of Ireland, which is longer and has the colors reversed - green (hoist side), white, and orange; also similar to the flag of Italy, which is green (hoist side), white, and red; design was based on the flag of France</Flagdescription>
+<GDP>purchasing power parity - $25.7 billion (1999 est.)</GDP>
+<Industries>foodstuffs, beverages; wood products, oil refining, automobile assembly, textiles, fertilizer, construction materials, electricity</Industries>
+<Exports>$3.9 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$2.6 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>36 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis, mostly for local consumption; minor transshipment point for Southwest and Southeast Asian heroin to Europe and occasionally to the US, and for Latin American cocaine destined for Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Middle East, bordering the Persian Gulf, between Iran and Kuwait</Location>
+<Geographiccoordinates>33 00 N, 44 00 E</Geographiccoordinates>
+<Area>437072</Area>
+<Climate>mostly desert; mild to cool winters with dry, hot, cloudless summers; northern mountainous regions along Iranian and Turkish borders experience cold winters with occasionally heavy snows that melt in early spring, sometimes causing extensive flooding in central and southern Iraq</Climate>
+<Naturalresources>petroleum, natural gas, phosphates, sulfur</Naturalresources>
+<Population>22675617</Population>
+<Populationgrowthrate>2.86% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.88 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 97% (Shi'a 60%-65%, Sunni 32%-37%), Christian or other 3%</Religions>
+<Countryname>Iraq </Countryname>
+<Capital>Baghdad</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and black with three green five-pointed stars in a horizontal line centered in the white band; the phrase ALLAHU AKBAR (God is Great) in green Arabic script - Allahu to the right of the middle star and Akbar to the left of the middle star - was added in January 1991 during the Persian Gulf crisis; similar to the flag of Syria which has two stars but no script and the flag of Yemen which has a plain white band; also similar to the flag of Egypt which has a symbolic eagle centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $59.9 billion (1999 est.)</GDP>
+<Industries>petroleum, chemicals, textiles, construction materials, food processing</Industries>
+<Exports>$12.7 billion (1999 est.)</Exports>
+<Imports>$8.9 billion (1999 est.)</Imports>
+<Currency>1 Iraqi dinar (ID) = 1,000 fils</Currency>
+<Airports>113 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Eastern Asia, island chain between the North Pacific Ocean and the Sea of Japan, east of the Korean Peninsula</Location>
+<Geographiccoordinates>36 00 N, 138 00 E</Geographiccoordinates>
+<Area>377835</Area>
+<Climate>varies from tropical in south to cool temperate in north</Climate>
+<Naturalresources>negligible mineral resources, fish</Naturalresources>
+<Population>126549976</Population>
+<Populationgrowthrate>0.18% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.72 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>observe both Shinto and Buddhist 84%, other 16% (including Christian 0.7%)</Religions>
+<Countryname>Japan </Countryname>
+<Capital>Tokyo</Capital>
+<Flagdescription>white with a large red disk (representing the sun without rays) in the center</Flagdescription>
+<GDP>purchasing power parity - $2.95 trillion (1999 est.)</GDP>
+<Industries>among world's largest and technologically advanced producers of motor vehicles, electronic equipment, machine tools, steel and nonferrous metals, ships, chemicals; textiles, processed foods</Industries>
+<Exports>$413 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$306 billion (c.i.f., 1999 est.)</Imports>
+<Currency>yen</Currency>
+<Airports>171 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Europe, island in the English Channel, northwest of France</Location>
+<Geographiccoordinates>49 15 N, 2 10 W</Geographiccoordinates>
+<Area>116</Area>
+<Climate>temperate; mild winters and cool summers</Climate>
+<Naturalresources>arable land</Naturalresources>
+<Population>88915</Population>
+<Populationgrowthrate>0.52% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.11 male(s)/female
+under 15 years: 1.08 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.74 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican, Roman Catholic, Baptist, Congregational New Church, Methodist, Presbyterian</Religions>
+<Countryname>Jersey </Countryname>
+<Capital>Saint Helier</Capital>
+<Flagdescription>white with a diagonal red cross extending to the corners of the flag and in the upper quadrant, surmounted by a yellow crown, a red shield holding the three lions of England in yellow</Flagdescription>
+<GDP>purchasing power parity - $2.2 billion (1999 est.)</GDP>
+<Industries>tourism, banking and finance, dairy</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 Jersey pound = 100 pence</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, island in the Caribbean Sea, south of Cuba</Location>
+<Geographiccoordinates>18 15 N, 77 30 W</Geographiccoordinates>
+<Area>10990</Area>
+<Climate>tropical; hot, humid; temperate interior</Climate>
+<Naturalresources>bauxite, gypsum, limestone</Naturalresources>
+<Population>2652689</Population>
+<Populationgrowthrate>0.46% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 61.3% (Church of God 21.2%, Baptist 8.8%, Anglican 5.5%, Seventh-Day Adventist 9%, Pentecostal 7.6%, Methodist 2.7%, United Church 2.7%, Brethren 1.1%, Jehovah's Witness 1.6%, Moravian 1.1%), Roman Catholic 4%, other, including some spiritual cults 34.7%</Religions>
+<Countryname>Jamaica </Countryname>
+<Capital>Kingston</Capital>
+<Flagdescription>diagonal yellow cross divides the flag into four triangles - green (top and bottom) and black (hoist side and outer side)</Flagdescription>
+<GDP>purchasing power parity - $8.8 billion (1999 est.)</GDP>
+<Industries>tourism, bauxite, textiles, food processing, light manufactures, rum, cement, metal, paper, chemical products</Industries>
+<Exports>$1.4 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$2.7 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Jamaican dollar (J$) = 100 cents</Currency>
+<Airports>36 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for cocaine from Central and South America to North America and Europe; illicit cultivation of cannabis; government has an active manual cannabis eradication program</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Europe, island between the Greenland Sea and the Norwegian Sea, northeast of Iceland</Location>
+<Geographiccoordinates>71 00 N, 8 00 W</Geographiccoordinates>
+<Area>373</Area>
+<Climate>arctic maritime with frequent storms and persistent fog</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Jan Mayen </Countryname>
+<Flagdescription>the flag of Norway is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle East, northwest of Saudi Arabia</Location>
+<Geographiccoordinates>31 00 N, 36 00 E</Geographiccoordinates>
+<Area>89213</Area>
+<Climate>mostly arid desert; rainy season in west (November to April)</Climate>
+<Naturalresources>phosphates, potash, shale oil</Naturalresources>
+<Population>4998564</Population>
+<Populationgrowthrate>3.1% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.14 male(s)/female
+65 years and over: 0.98 male(s)/female
+total population: 1.1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim 96%, Christian 4% (1997 est.)</Religions>
+<Countryname>Jordan </Countryname>
+<Capital>Amman</Capital>
+<Flagdescription>three equal horizontal bands of black (top), white, and green with a red isosceles triangle based on the hoist side bearing a small white seven-pointed star; the seven points on the star represent the seven fundamental laws of the Koran</Flagdescription>
+<GDP>purchasing power parity - $16 billion (1999 est.)</GDP>
+<Industries>phosphate mining, petroleum refining, cement, potash, light manufacturing, tourism</Industries>
+<Exports>$1.8 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$3.3 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 Jordanian dinar (JD) = 1,000 fils</Currency>
+<Airports>20 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, atoll in the North Pacific Ocean, about one-third of the way from Hawaii to the Marshall Islands</Location>
+<Geographiccoordinates>16 45 N, 169 30 W</Geographiccoordinates>
+<Area>2</Area>
+<Climate>tropical, but generally dry; consistent northeast trade winds with little seasonal temperature variation</Climate>
+<Naturalresources>NA; guano deposits worked until depletion about 1890</Naturalresources>
+<Population></Population>
+<Countryname>Johnston Atoll </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, island in the Mozambique Channel, about one-third of the way between Madagascar and Mozambique</Location>
+<Geographiccoordinates>17 03 S, 42 45 E</Geographiccoordinates>
+<Area>4</Area>
+<Climate>tropical</Climate>
+<Naturalresources>guano deposits and other fertilizers</Naturalresources>
+<Population></Population>
+<Countryname>Juan de Nova Island </Countryname>
+<Flagdescription>the flag of France is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Eastern Africa, bordering the Indian Ocean, between Somalia and Tanzania</Location>
+<Geographiccoordinates>1 00 N, 38 00 E</Geographiccoordinates>
+<Area>582650</Area>
+<Climate>varies from tropical along coast to arid in interior</Climate>
+<Naturalresources>gold, limestone, soda ash, salt barites, rubies, fluorspar, garnets, wildlife, hydropower</Naturalresources>
+<Population>30339770</Population>
+<Populationgrowthrate>1.53% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.79 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 38%, Roman Catholic 28%, indigenous beliefs 26%, Muslim 7%, other 1%</Religions>
+<Countryname>Kenya </Countryname>
+<Capital>Nairobi</Capital>
+<Flagdescription>three equal horizontal bands of black (top), red, and green; the red band is edged in white; a large warrior's shield covering crossed spears is superimposed at the center</Flagdescription>
+<GDP>purchasing power parity - $45.1 billion (1999 est.)</GDP>
+<Industries>small-scale consumer goods (plastic, furniture, batteries, textiles, soap, cigarettes, flour), agricultural products processing; oil refining, cement; tourism</Industries>
+<Exports>$2.2 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$3.3 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Kenyan shilling (KSh) = 100 cents</Currency>
+<Airports>230 (1999 est.)</Airports>
+<Illicitdrugs>widespread harvesting of small, wild plots of marijuana and qat (chat); transit country for South Asian heroin destined for Europe and, sometimes, North America; Indian methaqualone also transits on way to South Africa</Illicitdrugs>
+</record>
+<record>
+<Location>Central Asia, west of China</Location>
+<Geographiccoordinates>41 00 N, 75 00 E</Geographiccoordinates>
+<Area>198500</Area>
+<Climate>dry continental to polar in high Tien Shan; subtropical in southwest (Fergana Valley); temperate in northern foothill zone</Climate>
+<Naturalresources>abundant hydropower; significant deposits of gold and rare earth metals; locally exploitable coal, oil, and natural gas; other deposits of nepheline, mercury, bismuth, lead, and zinc</Naturalresources>
+<Population>4685230</Population>
+<Populationgrowthrate>1.43% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.6 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 75%, Russian Orthodox 20%, other 5%</Religions>
+<Countryname>Kyrgyzstan </Countryname>
+<Capital>Bishkek</Capital>
+<Flagdescription>red field with a yellow sun in the center having 40 rays representing the 40 Kirghiz tribes; on the obverse side the rays run counterclockwise, on the reverse, clockwise; in the center of the sun is a red ring crossed by two sets of three lines, a stylized representation of the roof of the traditional Kirghiz yurt</Flagdescription>
+<GDP>purchasing power parity - $10.3 billion (1999 est.)</GDP>
+<Industries>small machinery, textiles, food processing, cement, shoes, sawn logs, refrigerators, furniture, electric motors, gold, rare earth metals</Industries>
+<Exports>$515 million (1999 est.)</Exports>
+<Imports>$590 million (1999 est.)</Imports>
+<Currency>1 Kyrgyzstani som (KGS) = 100 tyiyn</Currency>
+<Airports>54 (1994 est.)</Airports>
+<Illicitdrugs>limited illicit cultivator of cannabis and opium poppy, mostly for CIS consumption; limited government eradication program; increasingly used as transshipment point for illicit drugs to Russia and Western Europe from Southwest Asia</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Asia, northern half of the Korean Peninsula bordering the Korea Bay and the Sea of Japan, between China and South Korea</Location>
+<Geographiccoordinates>40 00 N, 127 00 E</Geographiccoordinates>
+<Area>120540</Area>
+<Climate>temperate with rainfall concentrated in summer</Climate>
+<Naturalresources>coal, lead, tungsten, zinc, graphite, magnesite, iron ore, copper, gold, pyrites, salt, fluorspar, hydropower</Naturalresources>
+<Population>21687550</Population>
+<Populationgrowthrate>1.35% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.46 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>traditionally Buddhist and Confucianist, some Christian and syncretic Chondogyo (Religion of the Heavenly Way)
+note: autonomous religious activities now almost nonexistent; government-sponsored religious groups exist to provide illusion of religious freedom</Religions>
+<Countryname>North Korea </Countryname>
+<Capital>P'yongyang</Capital>
+<Flagdescription>three horizontal bands of blue (top), red (triple width), and blue; the red band is edged in white; on the hoist side of the red band is a white disk with a red five-pointed star</Flagdescription>
+<GDP>purchasing power parity - $22.6 billion (1999 est.)</GDP>
+<Industries>military products; machine building, electric power, chemicals; mining (coal, iron ore, magnesite, graphite, copper, zinc, lead, and precious metals), metallurgy; textiles, food processing; tourism</Industries>
+<Exports>$680 million (f.o.b., 1998 est.)</Exports>
+<Imports>$954 million (c.i.f., 1998 est.)</Imports>
+<Currency>1 North Korean won (Wn) = 100 chon</Currency>
+<Airports>49 (1994 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, reef in the North Pacific Ocean, about one-half of the way from Hawaii to American Samoa</Location>
+<Geographiccoordinates>6 24 N, 162 24 W</Geographiccoordinates>
+<Area>1</Area>
+<Climate>tropical, but moderated by prevailing winds</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Kingman Reef </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+<Airports>lagoon was used as a halfway station between Hawaii and American Samoa by Pan American Airways for flying boats in 1937 and 1938</Airports>
+</record>
+<record>
+<Location>Oceania, group of islands in the Pacific Ocean, straddling the equator, about one-half of the way from Hawaii to Australia; note - on 1 January 1995, Kiribati unilaterally moved the International Date Line from the middle of the country to include its easternmost islands and make it the same day throughout the country</Location>
+<Geographiccoordinates>1 25 N, 173 00 E</Geographiccoordinates>
+<Area>717</Area>
+<Climate>tropical; marine, hot and humid, moderated by trade winds</Climate>
+<Naturalresources>phosphate (production discontinued in 1979)</Naturalresources>
+<Population>91985</Population>
+<Populationgrowthrate>2.34% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.75 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 53%, Protestant (Congregational) 41%, Seventh-Day Adventist, Baha'i, Church of God, Mormon 6% (1985 est.)</Religions>
+<Countryname>Kiribati </Countryname>
+<Capital>Tarawa</Capital>
+<Flagdescription>the upper half is red with a yellow frigate bird flying over a yellow rising sun, and the lower half is blue with three horizontal wavy white stripes to represent the ocean</Flagdescription>
+<GDP>purchasing power parity - $74 million (1999 est.), supplemented by a nearly equal amount from external sources</GDP>
+<Industries>fishing, handicrafts</Industries>
+<Exports>$6 million (f.o.b., 1998)</Exports>
+<Imports>$37 million (c.i.f., 1998)</Imports>
+<Currency>1 Australian dollar ($A) = 100 cents</Currency>
+<Airports>21 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Eastern Asia, southern half of the Korean Peninsula bordering the Sea of Japan and the Yellow Sea</Location>
+<Geographiccoordinates>37 00 N, 127 30 E</Geographiccoordinates>
+<Area>98480</Area>
+<Climate>temperate, with rainfall heavier in summer than winter</Climate>
+<Naturalresources>coal, tungsten, graphite, molybdenum, lead, hydropower potential</Naturalresources>
+<Population>47470969</Population>
+<Populationgrowthrate>0.93% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.13 male(s)/female
+under 15 years: 1.12 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.63 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 49%, Buddhist 47%, Confucianist 3%, Shamanist, Chondogyo (Religion of the Heavenly Way), and other 1%</Religions>
+<Countryname>South Korea </Countryname>
+<Capital>Seoul</Capital>
+<Flagdescription>white with a red (top) and blue yin-yang symbol in the center; there is a different black trigram from the ancient I Ching (Book of Changes) in each corner of the white field</Flagdescription>
+<GDP>purchasing power parity - $625.7 billion (1999 est.)</GDP>
+<Industries>electronics, automobile production, chemicals, shipbuilding, steel, textiles, clothing, footwear, food processing</Industries>
+<Exports>$144 billion (f.o.b., 1999)</Exports>
+<Imports>$116 billion (c.i.f., 1999)</Imports>
+<Currency>1 South Korean won (W) = 100 chun (theoretical)</Currency>
+<Airports>103 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Asia, island in the Indian Ocean, south of Indonesia</Location>
+<Geographiccoordinates>10 30 S, 105 40 E</Geographiccoordinates>
+<Area>135</Area>
+<Climate>tropical; heat and humidity moderated by trade winds</Climate>
+<Naturalresources>phosphate</Naturalresources>
+<Population>2564</Population>
+<Populationgrowthrate>7.77% (2000 est.)</Populationgrowthrate>
+<Religions>Buddhist 55%, Christian 15%, Muslim 10%, other 20% (1991)</Religions>
+<Countryname>Christmas Island </Countryname>
+<Capital>The Settlement</Capital>
+<Flagdescription>the flag of Australia is used</Flagdescription>
+<GDP>purchasing power parity - $NA</GDP>
+<Industries>tourism, phosphate extraction (near depletion)</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 Australian dollar ($A) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle East, bordering the Persian Gulf, between Iraq and Saudi Arabia</Location>
+<Geographiccoordinates>29 30 N, 45 45 E</Geographiccoordinates>
+<Area>17820</Area>
+<Climate>dry desert; intensely hot summers; short, cool winters</Climate>
+<Naturalresources>petroleum, fish, shrimp, natural gas</Naturalresources>
+<Population>1973572</Population>
+<Populationgrowthrate>3.44% (2000 est.)
+note: this rate reflects a return to pre-Gulf crisis immigration of expatriates</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.76 male(s)/female
+65 years and over: 1.82 male(s)/female
+total population: 1.5 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 85% (Sunni 45%, Shi'a 40%), Christian, Hindu, Parsi, and other 15%</Religions>
+<Countryname>Kuwait </Countryname>
+<Capital>Kuwait</Capital>
+<Flagdescription>three equal horizontal bands of green (top), white, and red with a black trapezoid based on the hoist side</Flagdescription>
+<GDP>purchasing power parity - $44.8 billion (1999 est.)</GDP>
+<Industries>petroleum, petrochemicals, desalination, food processing, construction materials, salt, construction</Industries>
+<Exports>$13.5 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$8.1 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Kuwaiti dinar (KD) = 1,000 fils</Currency>
+<Airports>7 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Central Asia, northwest of China</Location>
+<Geographiccoordinates>48 00 N, 68 00 E</Geographiccoordinates>
+<Area>2717300</Area>
+<Climate>continental, cold winters and hot summers, arid and semiarid</Climate>
+<Naturalresources>major deposits of petroleum, natural gas, coal, iron ore, manganese, chrome ore, nickel, cobalt, copper, molybdenum, lead, zinc, bauxite, gold, uranium</Naturalresources>
+<Population>16733227</Population>
+<Populationgrowthrate>-0.05% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.94 male(s)/female
+65 years and over: 0.51 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 47%, Russian Orthodox 44%, Protestant 2%, other 7%</Religions>
+<Countryname>Kazakhstan </Countryname>
+<Capital>Astana
+note: the government moved from Almaty to Astana in December 1998</Capital>
+<Flagdescription>sky blue background representing the endless sky and a gold sun with 32 rays soaring above a golden steppe eagle in the center; on the hoist side is a "national ornamentation" in gold</Flagdescription>
+<GDP>purchasing power parity - $54.5 billion (1999 est.)</GDP>
+<Industries>oil, coal, iron ore, manganese, chromite, lead, zinc, copper, titanium, bauxite, gold, silver, phosphates, sulfur, iron and steel, nonferrous metal, tractors and other agricultural machinery, electric motors, construction materials</Industries>
+<Exports>$5.2 billion (1999 est.)</Exports>
+<Imports>$4.8 billion (1999 est.)</Imports>
+<Currency>1 Kazakhstani tenge = 100 tiyn</Currency>
+<Airports>10 (1997 est.)</Airports>
+<Illicitdrugs>significant illicit cultivation of cannabis and limited cultivation of opium poppy and ephedra (for the drug ephedrone); limited government eradication program; cannabis consumed largely in the CIS; used as transshipment point for illicit drugs to Russia, North America, and Western Europe from Southwest Asia</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, northeast of Thailand, west of Vietnam</Location>
+<Geographiccoordinates>18 00 N, 105 00 E</Geographiccoordinates>
+<Area>236800</Area>
+<Climate>tropical monsoon; rainy season (May to November); dry season (December to April)</Climate>
+<Naturalresources>timber, hydropower, gypsum, tin, gold, gemstones</Naturalresources>
+<Population>5497459</Population>
+<Populationgrowthrate>2.5% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.85 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Buddhist 60% (in October 1999, the regime proposed a constitutional amendment making Buddhism the state religion; the National Assembly is expected to vote on the amendment sometime in 2000), animist and other 40%</Religions>
+<Countryname>Laos </Countryname>
+<Capital>Vientiane</Capital>
+<Flagdescription>three horizontal bands of red (top), blue (double width), and red with a large white disk centered in the blue band</Flagdescription>
+<GDP>purchasing power parity - $7 billion (1999 est.)</GDP>
+<Industries>tin and gypsum mining, timber, electric power, agricultural processing, construction, garments</Industries>
+<Exports>$271 million (f.o.b., 1999 est.)</Exports>
+<Imports>$497 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 new kip (NK) = 100 at</Currency>
+<Airports>52 (1999 est.)</Airports>
+<Illicitdrugs>world's third-largest illicit opium producer (estimated cultivation in 1999 - 21,800 hectares, a 16% decrease over 1998; estimated potential production in 1999 - 140 metric tons, about the same as in 1998); potential heroin producer; transshipment point for heroin and methamphetamines produced in Burma; illicit producer of cannabis</Illicitdrugs>
+</record>
+<record>
+<Location>Middle East, bordering the Mediterranean Sea, between Israel and Syria</Location>
+<Geographiccoordinates>33 50 N, 35 50 E</Geographiccoordinates>
+<Area>10400</Area>
+<Climate>Mediterranean; mild to cool, wet winters with hot, dry summers; Lebanon mountains experience heavy winter snows</Climate>
+<Naturalresources>limestone, iron ore, salt, water-surplus state in a water-deficit region, arable land</Naturalresources>
+<Population>3578036</Population>
+<Populationgrowthrate>1.38% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.91 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 70% (5 legally recognized Islamic groups - Shi'a, Sunni, Druze, Isma'ilite, Alawite or Nusayri), Christian 30% (11 legally recognized Christian groups - 4 Orthodox Christian, 6 Catholic, 1 Protestant), Jewish NEGL%</Religions>
+<Countryname>Lebanon </Countryname>
+<Capital>Beirut</Capital>
+<Flagdescription>three horizontal bands of red (top), white (double width), and red with a green and brown cedar tree centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $16.2 billion (1999 est.)</GDP>
+<Industries>banking; food processing; jewelry; cement; textiles; mineral and chemical products; wood and furniture products; oil refining; metal fabricating</Industries>
+<Exports>$866 million (f.o.b., 1999 est.)</Exports>
+<Imports>$5.7 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Lebanese pound = 100 piasters</Currency>
+<Airports>9 (1999 est.)</Airports>
+<Illicitdrugs>inconsequential producer of hashish; some heroin processing mostly in the Bekaa valley; a Lebanese/Syrian eradication campaign started in the early 1990s has practically eliminated the opium and cannabis crops</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Europe, bordering the Baltic Sea, between Estonia and Lithuania</Location>
+<Geographiccoordinates>57 00 N, 25 00 E</Geographiccoordinates>
+<Area>64589</Area>
+<Climate>maritime; wet, moderate winters</Climate>
+<Naturalresources>minimal; amber, peat, limestone, dolomite, hydropower, arable land</Naturalresources>
+<Population>2404926</Population>
+<Populationgrowthrate>-0.84% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.91 male(s)/female
+65 years and over: 0.48 male(s)/female
+total population: 0.85 male(s)/female (2000 est.)</Sexratio>
+<Religions>Lutheran, Roman Catholic, Russian Orthodox</Religions>
+<Countryname>Latvia </Countryname>
+<Capital>Riga</Capital>
+<Flagdescription>three horizontal bands of maroon (top), white (half-width), and maroon</Flagdescription>
+<GDP>purchasing power parity - $9.8 billion (1999 est.)</GDP>
+<Industries>buses, vans, street and railroad cars, synthetic fibers, agricultural machinery, fertilizers, washing machines, radios, electronics, pharmaceuticals, processed foods, textiles; dependent on imports for energy, raw materials, and intermediate products</Industries>
+<Exports>$1.9 billion (f.o.b., 1999)</Exports>
+<Imports>$2.8 billion (f.o.b., 1998)</Imports>
+<Currency>1 Latvian lat (LVL) = 100 santims</Currency>
+<Airports>50 (1994 est.)</Airports>
+<Illicitdrugs>transshipment point for opiates and cannabis from Central and Southwest Asia to Western Europe and Scandinavia and Latin American cocaine and some synthetics from Western Europe to CIS; limited production of illicit amphetamines, ephedrine, and ecstasy for export</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Europe, bordering the Baltic Sea, between Latvia and Russia</Location>
+<Geographiccoordinates>56 00 N, 24 00 E</Geographiccoordinates>
+<Area>65200</Area>
+<Climate>transitional, between maritime and continental; wet, moderate winters and summers</Climate>
+<Naturalresources>peat, arable land</Naturalresources>
+<Population>3620756</Population>
+<Populationgrowthrate>-0.29% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.51 male(s)/female
+total population: 0.88 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic (primarily), Lutheran, Russian Orthodox, Protestant, evangelical Christian Baptist, Muslim, Jewish</Religions>
+<Countryname>Lithuania </Countryname>
+<Capital>Vilnius</Capital>
+<Flagdescription>three equal horizontal bands of yellow (top), green, and red</Flagdescription>
+<GDP>purchasing power parity - $17.3 billion (1999 est.)</GDP>
+<Industries>metal-cutting machine tools, electric motors, television sets, refrigerators and freezers, petroleum refining, shipbuilding (small ships), furniture making, textiles, food processing, fertilizers, agricultural machinery, optical equipment, electronic components, computers, amber</Industries>
+<Exports>$3.3 billion (f.o.b., 1999)</Exports>
+<Imports>$4.5 billion (f.o.b., 1999)</Imports>
+<Currency>1 Lithuanian litas = 100 centas</Currency>
+<Airports>96 (1994 est.)</Airports>
+<Illicitdrugs>transshipment point for opiates and other illicit drugs from Southwest Asia, Latin America, and Western Europe to Western Europe and Scandinavia</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean, between Cote d'Ivoire and Sierra Leone</Location>
+<Geographiccoordinates>6 30 N, 9 30 W</Geographiccoordinates>
+<Area>111370</Area>
+<Climate>tropical; hot, humid; dry winters with hot days and cool to cold nights; wet, cloudy summers with frequent heavy showers</Climate>
+<Naturalresources>iron ore, timber, diamonds, gold, hydropower</Naturalresources>
+<Population>3164156</Population>
+<Populationgrowthrate>1.94% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 1.01 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 40%, Christian 40%, Muslim 20%</Religions>
+<Countryname>Liberia </Countryname>
+<Capital>Monrovia</Capital>
+<Flagdescription>11 equal horizontal stripes of red (top and bottom) alternating with white; there is a white five-pointed star on a blue square in the upper hoist-side corner; the design was based on the US flag</Flagdescription>
+<GDP>purchasing power parity - $2.85 billion (1999 est.)</GDP>
+<Industries>rubber processing, palm oil processing, diamonds</Industries>
+<Exports>$39 million (f.o.b., 1998 est.)</Exports>
+<Imports>$142 million (f.o.b., 1998 est.)</Imports>
+<Currency>1 Liberian dollar (L$) = 100 cents</Currency>
+<Airports>45 (1999 est.)</Airports>
+<Illicitdrugs>increasingly a transshipment point for Southeast and Southwest Asian heroin and South American cocaine for the European and US markets</Illicitdrugs>
+</record>
+<record>
+<Location>Central Europe, south of Poland</Location>
+<Geographiccoordinates>48 40 N, 19 30 E</Geographiccoordinates>
+<Area>48845</Area>
+<Climate>temperate; cool summers; cold, cloudy, humid winters</Climate>
+<Naturalresources>brown coal and lignite; small amounts of iron ore, copper and manganese ore; salt; arable land</Naturalresources>
+<Population>5407956</Population>
+<Populationgrowthrate>0.12% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.62 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 60.3%, atheist 9.7%, Protestant 8.4%, Orthodox 4.1%, other 17.5%</Religions>
+<Countryname>Slovakia </Countryname>
+<Capital>Bratislava</Capital>
+<Flagdescription>three equal horizontal bands of white (top), blue, and red superimposed with the Slovak cross in a shield centered on the hoist side; the cross is white centered on a background of red and blue</Flagdescription>
+<GDP>purchasing power parity - $45.9 billion (1999 est.)</GDP>
+<Industries>metal and metal products; food and beverages; electricity, gas, coke, oil, nuclear fuel; chemicals and manmade fibers; machinery; paper and printing; earthenware and ceramics; transport vehicles; textiles; electrical and optical apparatus; rubber products</Industries>
+<Exports>$10.1 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$11.2 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 koruna (Sk) = 100 halierov</Currency>
+<Airports>36 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for Southwest Asian heroin bound for Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, atoll in the North Pacific Ocean, about one-half of the way from Hawaii to American Samoa</Location>
+<Geographiccoordinates>5 52 N, 162 06 W</Geographiccoordinates>
+<Area>11</Area>
+<Climate>equatorial, hot, and very rainy</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Palmyra Atoll </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Central Europe, between Austria and Switzerland</Location>
+<Geographiccoordinates>47 10 N, 9 32 E</Geographiccoordinates>
+<Area>160</Area>
+<Climate>continental; cold, cloudy winters with frequent snow or rain; cool to moderately warm, cloudy, humid summers</Climate>
+<Naturalresources>hydroelectric potential, arable land</Naturalresources>
+<Population>32207</Population>
+<Populationgrowthrate>1.02% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 0.99 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.66 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 80%, Protestant 7.4%, unknown 7.7%, other 4.9% (1996)</Religions>
+<Countryname>Liechtenstein </Countryname>
+<Capital>Vaduz</Capital>
+<Flagdescription>two equal horizontal bands of blue (top) and red with a gold crown on the hoist side of the blue band</Flagdescription>
+<GDP>purchasing power parity - $730 million (1998 est.)</GDP>
+<Industries>electronics, metal manufacturing, textiles, ceramics, pharmaceuticals, food products, precision instruments, tourism</Industries>
+<Exports>$2.47 billion (1996)</Exports>
+<Imports>$917.3 million (1996)</Imports>
+<Currency>1 Swiss franc, franken, or franco (SFR) = 100 centimes, rappen, or centesimi</Currency>
+<Airports>none</Airports>
+</record>
+<record>
+<Location>Southern Africa, an enclave of South Africa</Location>
+<Geographiccoordinates>29 30 S, 28 30 E</Geographiccoordinates>
+<Area>30355</Area>
+<Climate>temperate; cool to cold, dry winters; hot, wet summers</Climate>
+<Naturalresources>water, agricultural and grazing land, some diamonds and other minerals</Naturalresources>
+<Population>2143141</Population>
+<Populationgrowthrate>1.65% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.73 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 80%, indigenous beliefs 20%</Religions>
+<Countryname>Lesotho </Countryname>
+<Capital>Maseru</Capital>
+<Flagdescription>divided diagonally from the lower hoist side corner; the upper half is white, bearing the brown silhouette of a large shield with crossed spear and club; the lower half is a diagonal blue band with a green triangle in the corner</Flagdescription>
+<GDP>purchasing power parity - $4.7 billion (1998 est.)</GDP>
+<Industries>food, beverages, textiles, handicrafts; construction; tourism</Industries>
+<Exports>$235 million (f.o.b., 1998 est.)</Exports>
+<Imports>$700 million (f.o.b., 1998 est.)</Imports>
+<Currency>1 loti (L) = 100 lisente; note - maloti (M) is the plural form of loti</Currency>
+<Airports>29 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Europe, between France and Germany</Location>
+<Geographiccoordinates>49 45 N, 6 10 E</Geographiccoordinates>
+<Area>2586</Area>
+<Climate>modified continental with mild winters, cool summers</Climate>
+<Naturalresources>iron ore (no longer exploited), arable land</Naturalresources>
+<Population>437389</Population>
+<Populationgrowthrate>1.27% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.66 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 97%, Protestant and Jewish 3%</Religions>
+<Countryname>Luxembourg </Countryname>
+<Capital>Luxembourg</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and light blue; similar to the flag of the Netherlands, which uses a darker blue and is shorter; design was based on the flag of France</Flagdescription>
+<GDP>purchasing power parity - $14.7 billion (1999 est.)</GDP>
+<Industries>banking, iron and steel, food processing, chemicals, metal products, engineering, tires, glass, aluminum</Industries>
+<Exports>$7.5 billion (f.o.b., 1998)</Exports>
+<Imports>$9.6 billion (c.i.f., 1998)</Imports>
+<Currency>1 Luxembourg franc (LuxF) = 100 centimes; note - centimes no longer in use</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Africa, bordering the Mediterranean Sea, between Egypt and Tunisia</Location>
+<Geographiccoordinates>25 00 N, 17 00 E</Geographiccoordinates>
+<Area>1759540</Area>
+<Climate>Mediterranean along coast; dry, extreme desert interior</Climate>
+<Naturalresources>petroleum, natural gas, gypsum</Naturalresources>
+<Population>5115450</Population>
+<Populationgrowthrate>2.42% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.07 male(s)/female
+65 years and over: 0.98 male(s)/female
+total population: 1.06 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim 97%</Religions>
+<Countryname>Libya </Countryname>
+<Capital>Tripoli</Capital>
+<Flagdescription>plain green; green is the traditional color of Islam (the state religion)</Flagdescription>
+<GDP>purchasing power parity - $39.3 billion (1999 est.)</GDP>
+<Industries>petroleum, food processing, textiles, handicrafts, cement</Industries>
+<Exports>$6.6 billion (f.o.b., 1998 est.)</Exports>
+<Imports>$7 billion (f.o.b., 1998 est.)</Imports>
+<Currency>1 Libyan dinar (LD) = 1,000 dirhams</Currency>
+<Airports>142 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, island in the Indian Ocean, east of Mozambique</Location>
+<Geographiccoordinates>20 00 S, 47 00 E</Geographiccoordinates>
+<Area>587040</Area>
+<Climate>tropical along coast, temperate inland, arid in south</Climate>
+<Naturalresources>graphite, chromite, coal, bauxite, salt, quartz, tar sands, semiprecious stones, mica, fish, hydropower</Naturalresources>
+<Population>15506472</Population>
+<Populationgrowthrate>3.02% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.89 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 52%, Christian 41%, Muslim 7%</Religions>
+<Countryname>Madagascar </Countryname>
+<Capital>Antananarivo</Capital>
+<Flagdescription>two equal horizontal bands of red (top) and green with a vertical white band of the same width on hoist side</Flagdescription>
+<GDP>purchasing power parity - $11.5 billion (1999 est.)</GDP>
+<Industries>meat processing, soap, breweries, tanneries, sugar, textiles, glassware, cement, automobile assembly plant, paper, petroleum, tourism</Industries>
+<Exports>$600 million (f.o.b., 1998 est.)</Exports>
+<Imports>$881 million (c.i.f., 1998 est.)</Imports>
+<Currency>1 Malagasy franc (FMG) = 100 centimes</Currency>
+<Airports>133 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis (cultivated and wild varieties) used mostly for domestic consumption; transshipment point for heroin</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, island in the Caribbean Sea, north of Trinidad and Tobago</Location>
+<Geographiccoordinates>14 40 N, 61 00 W</Geographiccoordinates>
+<Area>1100</Area>
+<Climate>tropical; moderated by trade winds; rainy season (June to October); vulnerable to devastating cyclones (hurricanes) every eight years on average; average temperature 17.3 degrees C; humid</Climate>
+<Naturalresources>coastal scenery and beaches, cultivable land</Naturalresources>
+<Population>414516</Population>
+<Populationgrowthrate>0.96% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.02 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.8 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 95%, Hindu and pagan African 5%</Religions>
+<Countryname>Martinique </Countryname>
+<Capital>Fort-de-France</Capital>
+<Flagdescription>a light blue background is divided into four quadrants by a white cross; in the center of each rectangle is a white snake; the flag of France is used for official occasions</Flagdescription>
+<GDP>purchasing power parity - $4.24 billion (1996 est.)</GDP>
+<Industries>construction, rum, cement, oil refining, sugar, tourism</Industries>
+<Exports>$250 million (f.o.b., 1997)</Exports>
+<Imports>$2 billion (c.i.f., 1997)</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>2 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for cocaine and marijuana bound for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Asia, bordering the South China Sea and China</Location>
+<Geographiccoordinates>22 10 N, 113 33 E</Geographiccoordinates>
+<Area>21</Area>
+<Climate>subtropical; marine with cool winters, warm summers</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>445594</Population>
+<Populationgrowthrate>1.83% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 0.9 male(s)/female
+65 years and over: 0.68 male(s)/female
+total population: 0.92 male(s)/female (2000 est.)</Sexratio>
+<Religions>Buddhist 50%, Roman Catholic 15%, none and other 35% (1997 est.)</Religions>
+<Countryname>Macau </Countryname>
+<Flagdescription>light green with a lotus flower above a stylized bridge and water in white, beneath an arc of five gold, five-pointed stars: one large in center of arc and four smaller</Flagdescription>
+<GDP>purchasing power parity - $7.65 billion (1998 est.)</GDP>
+<Industries>clothing, textiles, toys, electronics, footwear, tourism, gambling</Industries>
+<Exports>$1.7 billion (f.o.b., 1999)</Exports>
+<Imports>$1.5 billion (c.i.f., 1999)</Imports>
+<Currency>1 pataca (P) = 100 avos</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Eastern Europe, northeast of Romania</Location>
+<Geographiccoordinates>47 00 N, 29 00 E</Geographiccoordinates>
+<Area>33843</Area>
+<Climate>moderate winters, warm summers</Climate>
+<Naturalresources>lignite, phosphorites, gypsum, arable land</Naturalresources>
+<Population>4430654</Population>
+<Populationgrowthrate>-0% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.92 male(s)/female
+65 years and over: 0.59 male(s)/female
+total population: 0.91 male(s)/female (2000 est.)</Sexratio>
+<Religions>Eastern Orthodox 98.5%, Jewish 1.5%, Baptist (only about 1,000 members) (1991)</Religions>
+<Countryname>Moldova </Countryname>
+<Capital>Chisinau</Capital>
+<Flagdescription>same color scheme as Romania - three equal vertical bands of blue (hoist side), yellow, and red; emblem in center of flag is of a Roman eagle of gold outlined in black with a red beak and talons carrying a yellow cross in its beak and a green olive branch in its right talons and a yellow scepter in its left talons; on its breast is a shield divided horizontally red over blue with a stylized ox head, star, rose, and crescent all in black-outlined yellow</Flagdescription>
+<GDP>purchasing power parity - $9.7 billion (1999 est.)</GDP>
+<Industries>food processing, agricultural machinery, foundry equipment, refrigerators and freezers, washing machines, hosiery, sugar, vegetable oil, shoes, textiles</Industries>
+<Exports>$470 million (f.o.b., 1999)</Exports>
+<Imports>$560 million (f.o.b., 1999)</Imports>
+<Currency>Moldovan leu (MLD) (plural lei)</Currency>
+<Airports>26 (1994 est.)</Airports>
+<Illicitdrugs>limited cultivation of opium poppy and cannabis, mostly for CIS consumption; transshipment point for illicit drugs from Southwest Asia via Central Asia to Russia, Western Europe and possibly the US</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, island in the Mozambique Channel, about one-half of the way from northern Madagascar to northern Mozambique</Location>
+<Geographiccoordinates>12 50 S, 45 10 E</Geographiccoordinates>
+<Area>374</Area>
+<Climate>tropical; marine; hot, humid, rainy season during northeastern monsoon (November to May); dry season is cooler (May to November)</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>155911</Population>
+<Populationgrowthrate>4.76% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 1.2 male(s)/female
+65 years and over: 0.98 male(s)/female
+total population: 1.1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 97%, Christian (mostly Roman Catholic)</Religions>
+<Countryname>Mayotte </Countryname>
+<Capital>Mamoutzou</Capital>
+<Flagdescription>the flag of France is used</Flagdescription>
+<GDP>purchasing power parity - $85 million (1998 est.)</GDP>
+<Industries>newly created lobster and shrimp industry, construction</Industries>
+<Exports>$3.44 million (f.o.b., 1997)</Exports>
+<Imports>$141.3 million (f.o.b., 1997)</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Asia, between China and Russia</Location>
+<Geographiccoordinates>46 00 N, 105 00 E</Geographiccoordinates>
+<Area>1000000</Area>
+<Climate>desert; continental (large daily and seasonal temperature ranges)</Climate>
+<Naturalresources>oil, coal, copper, molybdenum, tungsten, phosphates, tin, nickel, zinc, wolfram, fluorspar, gold</Naturalresources>
+<Population>2650952</Population>
+<Populationgrowthrate>1.54% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>predominantly Tibetan Buddhist, Muslim 4%
+note: previously limited religious activity because of communist regime</Religions>
+<Countryname>Mongolia </Countryname>
+<Capital>Ulaanbaatar</Capital>
+<Flagdescription>three equal, vertical bands of red (hoist side), blue, and red; centered on the hoist-side red band in yellow is the national emblem ("soyombo" - a columnar arrangement of abstract and geometric representation for fire, sun, moon, earth, water, and the yin-yang symbol)</Flagdescription>
+<GDP>purchasing power parity - $6.1 billion (1999 est.)</GDP>
+<Industries>construction materials, mining (particularly coal and copper); food and beverages, processing of animal products</Industries>
+<Exports>$316.8 million (f.o.b., 1998)</Exports>
+<Imports>$472.4 million (f.o.b., 1998)</Imports>
+<Currency>1 tughrik (Tug) = 100 mongos</Currency>
+<Airports>34 (1994 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, island in the Caribbean Sea, southeast of Puerto Rico</Location>
+<Geographiccoordinates>16 45 N, 62 12 W</Geographiccoordinates>
+<Area>100</Area>
+<Climate>tropical; little daily or seasonal temperature variation</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>6409</Population>
+<Populationgrowthrate>20.53% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 0.92 male(s)/female
+65 years and over: 1.15 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican, Methodist, Roman Catholic, Pentecostal, Seventh-Day Adventist, other Christian denominations</Religions>
+<Countryname>Montserrat </Countryname>
+<Capital>Plymouth (abandoned in 1997 due to volcanic activity; interim government buildings have been built at Brades, in the Carr's Bay/Little Bay vicinity at the northwest end of Montserrat)</Capital>
+<Flagdescription>blue, with the flag of the UK in the upper hoist-side quadrant and the Montserratian coat of arms centered in the outer half of the flag; the coat of arms features a woman standing beside a yellow harp with her arm around a black cross</Flagdescription>
+<GDP>purchasing power parity - $31 million (1998 est.)</GDP>
+<Industries>tourism, rum, textiles, electronic appliances</Industries>
+<Exports>$1.5 million (1998)</Exports>
+<Imports>$26 million (1998)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, east of Zambia</Location>
+<Geographiccoordinates>13 30 S, 34 00 E</Geographiccoordinates>
+<Area>118480</Area>
+<Climate>sub-tropical; rainy season (November to May); dry season (May to November)</Climate>
+<Naturalresources>limestone, arable land, hydropower, unexploited deposits of uranium, coal, and bauxite</Naturalresources>
+<Population>10385849</Population>
+<Populationgrowthrate>1.61% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.69 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 55%, Roman Catholic 20%, Muslim 20%, indigenous beliefs</Religions>
+<Countryname>Malawi </Countryname>
+<Capital>Lilongwe</Capital>
+<Flagdescription>three equal horizontal bands of black (top), red, and green with a radiant, rising, red sun centered in the black band</Flagdescription>
+<GDP>purchasing power parity - $9.4 billion (1999 est.)</GDP>
+<Industries>tobacco, tea, sugar, sawmill products, cement, consumer goods</Industries>
+<Exports>$510 million (f.o.b., 1999)</Exports>
+<Imports>$512 million (f.o.b., 1999)</Imports>
+<Currency>1 Malawian kwacha (MK) = 100 tambala</Currency>
+<Airports>44 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Europe, north of Greece</Location>
+<Geographiccoordinates>41 50 N, 22 00 E</Geographiccoordinates>
+<Area>25333</Area>
+<Climate>warm, dry summers and autumns and relatively cold winters with heavy snowfall</Climate>
+<Naturalresources>chromium, lead, zinc, manganese, tungsten, nickel, low-grade iron ore, asbestos, sulfur, timber, arable land</Naturalresources>
+<Population>2041467</Population>
+<Populationgrowthrate>0.04% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.08 male(s)/female
+under 15 years: 1.08 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.8 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Macedonian Orthodox 67%, Muslim 30%, other 3%</Religions>
+<Countryname>The Former Yugoslav Republic of Macedonia </Countryname>
+<Capital>Skopje</Capital>
+<Flagdescription>a rising yellow sun with eight rays extending to the edges of the red field</Flagdescription>
+<GDP>purchasing power parity - $7.6 billion (1999 est.)</GDP>
+<Industries>coal, metallic chromium, lead, zinc, ferronickel, textiles, wood products, tobacco</Industries>
+<Exports>$1.2 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$1.56 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Macedonian denar (MKD) = 100 deni</Currency>
+<Airports>16 (1999 est.)</Airports>
+<Illicitdrugs>increasing transshipment point for Southwest Asian heroin and hashish; minor transit point for South American cocaine destined for Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, southwest of Algeria</Location>
+<Geographiccoordinates>17 00 N, 4 00 W</Geographiccoordinates>
+<Area>1000000</Area>
+<Climate>subtropical to arid; hot and dry February to June; rainy, humid, and mild June to November; cool and dry November to February</Climate>
+<Naturalresources>gold, phosphates, kaolin, salt, limestone, uranium, hydropower
+note: bauxite, iron ore, manganese, tin, and copper deposits are known but not exploited</Naturalresources>
+<Population>10685948</Population>
+<Populationgrowthrate>2.98% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.91 male(s)/female
+65 years and over: 0.89 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 90%, indigenous beliefs 9%, Christian 1%</Religions>
+<Countryname>Mali </Countryname>
+<Capital>Bamako</Capital>
+<Flagdescription>three equal vertical bands of green (hoist side), yellow, and red; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $8.5 billion (1999 est.)</GDP>
+<Industries>minor local consumer goods production and food processing; construction; phosphate and gold mining</Industries>
+<Exports>$640 million (f.o.b., 1999 est.)</Exports>
+<Imports>$650 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>28 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Europe, bordering the Mediterranean Sea, on the southern coast of France, near the border with Italy</Location>
+<Geographiccoordinates>43 44 N, 7 24 E</Geographiccoordinates>
+<Area>1</Area>
+<Climate>Mediterranean with mild, wet winters and hot, dry summers</Climate>
+<Naturalresources>none</Naturalresources>
+<Population>31693</Population>
+<Populationgrowthrate>0.48% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.69 male(s)/female
+total population: 0.91 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 90%</Religions>
+<Countryname>Monaco </Countryname>
+<Capital>Monaco</Capital>
+<Flagdescription>two equal horizontal bands of red (top) and white; similar to the flag of Indonesia which is longer and the flag of Poland which is white (top) and red</Flagdescription>
+<GDP>purchasing power parity - $870 million (1999 est.)</GDP>
+<Industries>tourism, construction, small-scale industrial and consumer products</Industries>
+<Exports>$NA; full customs integration with France, which collects and rebates Monegasque trade duties; also participates in EU market system through customs union with France</Exports>
+<Imports>$NA; full customs integration with France, which collects and rebates Monegasque trade duties; also participates in EU market system through customs union with France</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>linked to airport in Nice, France, by helicopter service</Airports>
+</record>
+<record>
+<Location>Northern Africa, bordering the North Atlantic Ocean and the Mediterranean Sea, between Algeria and Western Sahara</Location>
+<Geographiccoordinates>32 00 N, 5 00 W</Geographiccoordinates>
+<Area>446550</Area>
+<Climate>Mediterranean, becoming more extreme in the interior</Climate>
+<Naturalresources>phosphates, iron ore, manganese, lead, zinc, fish, salt</Naturalresources>
+<Population>30122350</Population>
+<Populationgrowthrate>1.74% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 98.7%, Christian 1.1%, Jewish 0.2%</Religions>
+<Countryname>Morocco </Countryname>
+<Capital>Rabat</Capital>
+<Flagdescription>red with a green pentacle (five-pointed, linear star) known as Solomon's seal in the center of the flag; green is the traditional color of Islam</Flagdescription>
+<GDP>purchasing power parity - $108 billion (1999 est.)</GDP>
+<Industries>phosphate rock mining and processing, food processing, leather goods, textiles, construction, tourism</Industries>
+<Exports>$7.1 billion (f.o.b., 1998)</Exports>
+<Imports>$9.5 billion (f.o.b., 1998)</Imports>
+<Currency>1 Moroccan dirham (DH) = 100 centimes</Currency>
+<Airports>70 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of hashish; trafficking on the increase for both domestic and international drug markets; shipments of hashish mostly directed to Western Europe; transit point for cocaine from South America destined for Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, island in the Indian Ocean, east of Madagascar</Location>
+<Geographiccoordinates>20 17 S, 57 33 E</Geographiccoordinates>
+<Area>1860</Area>
+<Climate>tropical, modified by southeast trade winds; warm, dry winter (May to November); hot, wet, humid summer (November to May)</Climate>
+<Naturalresources>arable land, fish</Naturalresources>
+<Population>1179368</Population>
+<Populationgrowthrate>0.89% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.67 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Hindu 52%, Christian 28.3% (Roman Catholic 26%, Protestant 2.3%), Muslim 16.6%, other 3.1%</Religions>
+<Countryname>Mauritius </Countryname>
+<Capital>Port Louis</Capital>
+<Flagdescription>four equal horizontal bands of red (top), blue, yellow, and green</Flagdescription>
+<GDP>purchasing power parity - $12.3 billion (1999 est.)</GDP>
+<Industries>food processing (largely sugar milling), textiles, clothing; chemicals, metal products, transport equipment, nonelectrical machinery; tourism</Industries>
+<Exports>$1.7 billion (f.o.b., 1999)</Exports>
+<Imports>$2.1 billion (f.o.b., 1998)</Imports>
+<Currency>1 Mauritian rupee (MauR) = 100 cents</Currency>
+<Airports>5 (1999 est.)</Airports>
+<Illicitdrugs>minor consumer and transshipment point for heroin from South Asia; small amounts of cannabis produced and consumed locally</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, atoll in the North Pacific Ocean, about one-third of the way from Honolulu to Tokyo</Location>
+<Geographiccoordinates>28 13 N, 177 22 W</Geographiccoordinates>
+<Area>6</Area>
+<Climate>subtropical, but moderated by prevailing easterly winds</Climate>
+<Naturalresources>wildlife, terrestrial and aquatic</Naturalresources>
+<Population></Population>
+<Countryname>Midway Islands </Countryname>
+<Capital>none; administered from Washington, DC</Capital>
+<Flagdescription>the flag of the US is used</Flagdescription>
+<Airports>3 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Africa, bordering the North Atlantic Ocean, between Senegal and Western Sahara</Location>
+<Geographiccoordinates>20 00 N, 12 00 W</Geographiccoordinates>
+<Area>1030700</Area>
+<Climate>desert; constantly hot, dry, dusty</Climate>
+<Naturalresources>iron ore, gypsum, fish, copper, phosphate</Naturalresources>
+<Population>2667859</Population>
+<Populationgrowthrate>2.94% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 100%</Religions>
+<Countryname>Mauritania </Countryname>
+<Capital>Nouakchott</Capital>
+<Flagdescription>green with a yellow five-pointed star above a yellow, horizontal crescent; the closed side of the crescent is down; the crescent, star, and color green are traditional symbols of Islam</Flagdescription>
+<GDP>purchasing power parity - $4.9 billion (1999 est.)</GDP>
+<Industries>fish processing, mining of iron ore and gypsum</Industries>
+<Exports>$425 million (f.o.b., 1997)</Exports>
+<Imports>$444 million (f.o.b., 1997)</Imports>
+<Currency>1 ouguiya (UM) = 5 khoums</Currency>
+<Airports>26 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Europe, islands in the Mediterranean Sea, south of Sicily (Italy)</Location>
+<Geographiccoordinates>35 50 N, 14 35 E</Geographiccoordinates>
+<Area>316</Area>
+<Climate>Mediterranean with mild, rainy winters and hot, dry summers</Climate>
+<Naturalresources>limestone, salt, arable land</Naturalresources>
+<Population>391670</Population>
+<Populationgrowthrate>0.74% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.72 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 91%</Religions>
+<Countryname>Malta </Countryname>
+<Capital>Valletta</Capital>
+<Flagdescription>two equal vertical bands of white (hoist side) and red; in the upper hoist-side corner is a representation of the George Cross, edged in red</Flagdescription>
+<GDP>purchasing power parity - $5.3 billion (1999 est.)</GDP>
+<Industries>tourism; electronics, ship building and repair, construction; food and beverages, textiles, footwear, clothing, tobacco</Industries>
+<Exports>$1.8 billion (f.o.b., 1998)</Exports>
+<Imports>$2.7 billion (f.o.b., 1998)</Imports>
+<Currency>1 Maltese lira (LM) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+<Illicitdrugs>minor transshipment point for hashish from North Africa to Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Middle East, bordering the Arabian Sea, Gulf of Oman, and Persian Gulf, between Yemen and UAE</Location>
+<Geographiccoordinates>21 00 N, 57 00 E</Geographiccoordinates>
+<Area>212460</Area>
+<Climate>dry desert; hot, humid along coast; hot, dry interior; strong southwest summer monsoon (May to September) in far south</Climate>
+<Naturalresources>petroleum, copper, asbestos, some marble, limestone, chromium, gypsum, natural gas</Naturalresources>
+<Population>2533389</Population>
+<Populationgrowthrate>3.46% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.58 male(s)/female
+65 years and over: 1.11 male(s)/female
+total population: 1.31 male(s)/female (2000 est.)</Sexratio>
+<Religions>Ibadhi Muslim 75%, Sunni Muslim, Shi'a Muslim, Hindu</Religions>
+<Countryname>Oman </Countryname>
+<Capital>Muscat</Capital>
+<Flagdescription>three horizontal bands of white, red, and green of equal width with a broad, vertical, red band on the hoist side; the national emblem (a khanjar dagger in its sheath superimposed on two crossed swords in scabbards) in white is centered at the top of the vertical band</Flagdescription>
+<GDP>purchasing power parity - $19.6 billion (1999 est.)</GDP>
+<Industries>crude oil production and refining, natural gas production, construction, cement, copper</Industries>
+<Exports>$7.2 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$5.4 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Omani rial (RO) = 1,000 baiza</Currency>
+<Airports>142 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Asia, group of atolls in the Indian Ocean, south-southwest of India</Location>
+<Geographiccoordinates>3 15 N, 73 00 E</Geographiccoordinates>
+<Area>300</Area>
+<Climate>tropical; hot, humid; dry, northeast monsoon (November to March); rainy, southwest monsoon (June to August)</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population>301475</Population>
+<Populationgrowthrate>3.06% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 1.09 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim</Religions>
+<Countryname>Maldives </Countryname>
+<Capital>Male</Capital>
+<Flagdescription>red with a large green rectangle in the center bearing a vertical white crescent; the closed side of the crescent is on the hoist side of the flag</Flagdescription>
+<GDP>purchasing power parity - $540 million (1999 est.)</GDP>
+<Industries>fish processing, tourism, shipping, boat building, coconut processing, garments, woven mats, rope, handicrafts, coral and sand mining</Industries>
+<Exports>$98 million (f.o.b., 1998)</Exports>
+<Imports>$312 million (f.o.b., 1998)</Imports>
+<Currency>1 rufiyaa (Rf) = 100 laari</Currency>
+<Airports>5 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle America, bordering the Caribbean Sea and the Gulf of Mexico, between Belize and the US and bordering the North Pacific Ocean, between Guatemala and the US</Location>
+<Geographiccoordinates>23 00 N, 102 00 W</Geographiccoordinates>
+<Area>1972550</Area>
+<Climate>varies from tropical to desert</Climate>
+<Naturalresources>petroleum, silver, copper, gold, lead, zinc, natural gas, timber</Naturalresources>
+<Population>100349766</Population>
+<Populationgrowthrate>1.53% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>nominally Roman Catholic 89%, Protestant 6%, other 5%</Religions>
+<Countryname>Mexico </Countryname>
+<Capital>Mexico</Capital>
+<Flagdescription>three equal vertical bands of green (hoist side), white, and red; the coat of arms (an eagle perched on a cactus with a snake in its beak) is centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $865.5 billion (1999 est.)</GDP>
+<Industries>food and beverages, tobacco, chemicals, iron and steel, petroleum, mining, textiles, clothing, motor vehicles, consumer durables, tourism</Industries>
+<Exports>$136.8 billion (f.o.b., 1999), includes in-bond industries (assembly plant operations with links to US companies)</Exports>
+<Imports>$142.1 billion (f.o.b., 1999), includes in-bond industries (assembly plant operations with links to US companies)</Imports>
+<Currency>1 New Mexican peso (Mex$) = 100 centavos</Currency>
+<Airports>1,806 (1999 est.)</Airports>
+<Illicitdrugs>illicit cultivation of opium poppy (cultivation in 1998 - 5,500 hectares; potential production - 60 metric tons) and cannabis cultivation in 1998 - 4,600 hectares; government eradication efforts have been key in keeping illicit crop levels low; major supplier of heroin and marijuana to the US market; continues as the primary transshipment country for US-bound cocaine from South America; involved in the production and distribution of methamphetamines; upsurge in drug-related violence and official corruption; major drug syndicates growing more powerful</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, peninsula and northern one-third of the island of Borneo, bordering Indonesia and the South China Sea, south of Vietnam</Location>
+<Geographiccoordinates>2 30 N, 112 30 E</Geographiccoordinates>
+<Area>329750</Area>
+<Climate>tropical; annual southwest (April to October) and northeast (October to February) monsoons</Climate>
+<Naturalresources>tin, petroleum, timber, copper, iron ore, natural gas, bauxite</Naturalresources>
+<Population>21793293</Population>
+<Populationgrowthrate>2.01% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.78 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Islam, Buddhism, Daoism, Hinduism, Christianity, Sikhism; note - in addition, Shamanism is practiced in East Malaysia</Religions>
+<Countryname>Malaysia </Countryname>
+<Capital>Kuala Lumpur</Capital>
+<Flagdescription>14 equal horizontal stripes of red (top) alternating with white (bottom); there is a blue rectangle in the upper hoist-side corner bearing a yellow crescent and a yellow fourteen-pointed star; the crescent and the star are traditional symbols of Islam; the design was based on the flag of the US</Flagdescription>
+<GDP>purchasing power parity - $229.1 billion (1999 est.)</GDP>
+<Industries>Peninsular Malaysia - rubber and oil palm processing and manufacturing, light manufacturing industry, electronics, tin mining and smelting, logging and processing timber; Sabah - logging, petroleum production; Sarawak - agriculture processing, petroleum production and refining, logging</Industries>
+<Exports>$83.5 billion (1999 est.)</Exports>
+<Imports>$61.5 billion (1999 est.)</Imports>
+<Currency>1 ringgit (M$) = 100 sen</Currency>
+<Airports>115 (1999 est.)</Airports>
+<Illicitdrugs>transit point for some illicit drugs going to Western markets; drug trafficking prosecuted vigorously and carries severe penalties</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, bordering the Mozambique Channel, between South Africa and Tanzania</Location>
+<Geographiccoordinates>18 15 S, 35 00 E</Geographiccoordinates>
+<Area>801590</Area>
+<Climate>tropical to subtropical</Climate>
+<Naturalresources>coal, titanium, natural gas, hydropower</Naturalresources>
+<Population>19104696</Population>
+<Populationgrowthrate>1.47% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 0.99 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 50%, Christian 30%, Muslim 20%</Religions>
+<Countryname>Mozambique </Countryname>
+<Capital>Maputo</Capital>
+<Flagdescription>three equal horizontal bands of green (top), black, and yellow with a red isosceles triangle based on the hoist side; the black band is edged in white; centered in the triangle is a yellow five-pointed star bearing a crossed rifle and hoe in black superimposed on an open white book</Flagdescription>
+<GDP>purchasing power parity - $18.7 billion (1999 est.)</GDP>
+<Industries>food, beverages, chemicals (fertilizer, soap, paints), petroleum products, textiles, cement, glass, asbestos, tobacco</Industries>
+<Exports>$300 million (f.o.b., 1999 est.)</Exports>
+<Imports>$1.6 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 metical (Mt) = 100 centavos</Currency>
+<Airports>170 (1999 est.)</Airports>
+<Illicitdrugs>Southern African transit hub for South American cocaine probably destined for the European and US markets; producer of hashish and methaqualone</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, islands in the South Pacific Ocean, east of Australia</Location>
+<Geographiccoordinates>21 30 S, 165 30 E</Geographiccoordinates>
+<Area>19060</Area>
+<Climate>tropical; modified by southeast trade winds; hot, humid</Climate>
+<Naturalresources>nickel, chrome, iron, cobalt, manganese, silver, gold, lead, copper</Naturalresources>
+<Population>201816</Population>
+<Populationgrowthrate>1.52% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.9 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 60%, Protestant 30%, other 10%</Religions>
+<Countryname>New Caledonia </Countryname>
+<Capital>Noumea</Capital>
+<Flagdescription>the flag of France is used</Flagdescription>
+<GDP>purchasing power parity - $3 billion (1998 est.)</GDP>
+<Industries>nickel mining and smelting</Industries>
+<Exports>$381 million (f.o.b., 1998)</Exports>
+<Imports>$922 million (c.i.f., 1998)</Imports>
+<Currency>1 Comptoirs Francais du Pacifique franc (CFPF) = 100 centimes</Currency>
+<Airports>28 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, island in the South Pacific Ocean, east of Tonga</Location>
+<Geographiccoordinates>19 02 S, 169 52 W</Geographiccoordinates>
+<Area>260</Area>
+<Climate>tropical; modified by southeast trade winds</Climate>
+<Naturalresources>fish, arable land</Naturalresources>
+<Population>2113</Population>
+<Populationgrowthrate>0.47% (2000 est.)</Populationgrowthrate>
+<Religions>Ekalesia Niue (Niuean Church - a Protestant church closely related to the London Missionary Society) 75%, Latter-Day Saints 10%, other 15% (mostly Roman Catholic, Jehovah's Witnesses, Seventh-Day Adventist)</Religions>
+<Countryname>Niue </Countryname>
+<Capital>Alofi</Capital>
+<Flagdescription>yellow with the flag of the UK in the upper hoist-side quadrant; the flag of the UK bears five yellow five-pointed stars - a large one on a blue disk in the center and a smaller one on each arm of the bold red cross</Flagdescription>
+<GDP>purchasing power parity - $4.5 million (1994 est.)</GDP>
+<Industries>tourism, handicrafts, food processing</Industries>
+<Exports>$117,500 (f.o.b., 1989)</Exports>
+<Imports>$4.1 million (c.i.f., 1989)</Imports>
+<Currency>1 New Zealand dollar (NZ$) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, island in the South Pacific Ocean, east of Australia</Location>
+<Geographiccoordinates>29 02 S, 167 57 E</Geographiccoordinates>
+<Area>34</Area>
+<Climate>subtropical, mild, little seasonal temperature variation</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population>1892</Population>
+<Populationgrowthrate>-0.68% (2000 est.)</Populationgrowthrate>
+<Religions>Anglican 39%, Roman Catholic 11.7%, Uniting Church in Australia 16.4%, Seventh-Day Adventist 4.4%, none 9.2%, unknown 16.9%, other 2.4% (1986)</Religions>
+<Countryname>Norfolk Island </Countryname>
+<Capital>Kingston</Capital>
+<Flagdescription>three vertical bands of green (hoist side), white, and green with a large green Norfolk Island pine tree centered in the slightly wider white band</Flagdescription>
+<GDP>purchasing power parity - $NA</GDP>
+<Industries>tourism</Industries>
+<Exports>$1.5 million (f.o.b., FY91/92)</Exports>
+<Imports>$17.9 million (c.i.f., FY91/92)</Imports>
+<Currency>1 Australian dollar ($A) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Africa, southeast of Algeria</Location>
+<Geographiccoordinates>16 00 N, 8 00 E</Geographiccoordinates>
+<Area>1000000</Area>
+<Climate>desert; mostly hot, dry, dusty; tropical in extreme south</Climate>
+<Naturalresources>uranium, coal, iron ore, tin, phosphates, gold, petroleum</Naturalresources>
+<Population>10075511</Population>
+<Populationgrowthrate>2.75% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 1.11 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 80%, remainder indigenous beliefs and Christians</Religions>
+<Countryname>Niger </Countryname>
+<Capital>Niamey</Capital>
+<Flagdescription>three equal horizontal bands of orange (top), white, and green with a small orange disk (representing the sun) centered in the white band; similar to the flag of India, which has a blue spoked wheel centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $9.6 billion (1999 est.)</GDP>
+<Industries>uranium mining, cement, brick, textiles, food processing, chemicals, slaughterhouses</Industries>
+<Exports>$269 million (f.o.b., 1997)</Exports>
+<Imports>$295 million (c.i.f., 1997)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>27 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, group of islands in the South Pacific Ocean, about three-quarters of the way from Hawaii to Australia</Location>
+<Geographiccoordinates>16 00 S, 167 00 E</Geographiccoordinates>
+<Area>14760</Area>
+<Climate>tropical; moderated by southeast trade winds</Climate>
+<Naturalresources>manganese, hardwood forests, fish</Naturalresources>
+<Population>189618</Population>
+<Populationgrowthrate>1.74% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 1.18 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Presbyterian 36.7%, Anglican 15%, Roman Catholic 15%, indigenous beliefs 7.6%, Seventh-Day Adventist 6.2%, Church of Christ 3.8%, other 15.7%</Religions>
+<Countryname>Vanuatu </Countryname>
+<Capital>Port-Vila</Capital>
+<Flagdescription>two equal horizontal bands of red (top) and green with a black isosceles triangle (based on the hoist side) all separated by a black-edged yellow stripe in the shape of a horizontal Y (the two points of the Y face the hoist side and enclose the triangle); centered in the triangle is a boar's tusk encircling two crossed namele leaves, all in yellow</Flagdescription>
+<GDP>purchasing power parity - $245 million (1999 est.)</GDP>
+<Industries>food and fish freezing, wood processing, meat canning</Industries>
+<Exports>$33.8 million (f.o.b., 1998)</Exports>
+<Imports>$76.2 million (f.o.b., 1998)</Imports>
+<Currency>1 vatu (VT) = 100 centimes</Currency>
+<Airports>32 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Africa, bordering the Gulf of Guinea, between Benin and Cameroon</Location>
+<Geographiccoordinates>10 00 N, 8 00 E</Geographiccoordinates>
+<Area>923768</Area>
+<Climate>varies; equatorial in south, tropical in center, arid in north</Climate>
+<Naturalresources>petroleum, tin, columbite, iron ore, coal, limestone, lead, zinc, natural gas, hydropower, arable land</Naturalresources>
+<Population>123337822</Population>
+<Populationgrowthrate>2.67% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 1 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 50%, Christian 40%, indigenous beliefs 10%</Religions>
+<Countryname>Nigeria </Countryname>
+<Capital>Abuja
+note: on 12 December 1991 the capital was officially moved from Lagos to Abuja; many government offices remain in Lagos pending completion of facilities in Abuja</Capital>
+<Flagdescription>three equal vertical bands of green (hoist side), white, and green</Flagdescription>
+<GDP>purchasing power parity - $110.5 billion (1999 est.)</GDP>
+<Industries>crude oil, coal, tin, columbite, palm oil, peanuts, cotton, rubber, wood, hides and skins, textiles, cement and other construction materials, food products, footwear, chemicals, fertilizer, printing, ceramics, steel</Industries>
+<Exports>$13.1 billion (f.o.b., 1999)</Exports>
+<Imports>$10 billion (f.o.b., 1999)</Imports>
+<Currency>1 naira (N) = 100 kobo</Currency>
+<Airports>71 (1999 est.)</Airports>
+<Illicitdrugs>facilitates movement of heroin en route from Southeast and Southwest Asia to Western Europe and North America; increasingly a transit route for cocaine from South America intended for European, East Asian, and North American markets</Illicitdrugs>
+</record>
+<record>
+<Location>Western Europe, bordering the North Sea, between Belgium and Germany</Location>
+<Geographiccoordinates>52 30 N, 5 45 E</Geographiccoordinates>
+<Area>41532</Area>
+<Climate>temperate; marine; cool summers and mild winters</Climate>
+<Naturalresources>natural gas, petroleum, arable land</Naturalresources>
+<Population>15892237</Population>
+<Populationgrowthrate>0.57% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.69 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 34%, Protestant 25%, Muslim 3%, other 2%, unaffiliated 36% (1991)</Religions>
+<Countryname>Netherlands </Countryname>
+<Capital>Amsterdam; The Hague is the seat of government</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and blue; similar to the flag of Luxembourg, which uses a lighter blue and is longer</Flagdescription>
+<GDP>purchasing power parity - $365.1 billion (1999 est.)</GDP>
+<Industries>agroindustries, metal and engineering products, electrical machinery and equipment, chemicals, petroleum, construction, microelectronics, fishing</Industries>
+<Exports>$169 billion (f.o.b., 1998)</Exports>
+<Imports>$152 billion (f.o.b., 1998)</Imports>
+<Currency>1 Netherlands guilder, gulden, or florin (f.) = 100 cents; note - to be replaced by the euro on 1 January 2002</Currency>
+<Airports>28 (1999 est.)</Airports>
+<Illicitdrugs>major European producer of illicit amphetamines and other synthetic drugs; important gateway for cocaine, heroin, and hashish entering Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Europe, bordering the North Sea and the North Atlantic Ocean, west of Sweden</Location>
+<Geographiccoordinates>62 00 N, 10 00 E</Geographiccoordinates>
+<Area>324220</Area>
+<Climate>temperate along coast, modified by North Atlantic Current; colder interior; rainy year-round on west coast</Climate>
+<Naturalresources>petroleum, copper, natural gas, pyrites, nickel, iron ore, zinc, lead, fish, timber, hydropower</Naturalresources>
+<Population>4481162</Population>
+<Populationgrowthrate>0.5% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Evangelical Lutheran 86% (state church), other Protestant and Roman Catholic 3%, other 1%, none and unknown 10% (1997)</Religions>
+<Countryname>Norway </Countryname>
+<Capital>Oslo</Capital>
+<Flagdescription>red with a blue cross outlined in white that extends to the edges of the flag; the vertical part of the cross is shifted to the hoist side in the style of the Dannebrog (Danish flag)</Flagdescription>
+<GDP>purchasing power parity - $111.3 billion (1999 est.)</GDP>
+<Industries>petroleum and gas, food processing, shipbuilding, pulp and paper products, metals, chemicals, timber, mining, textiles, fishing</Industries>
+<Exports>$47.3 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$38.6 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Norwegian krone (NKr) = 100 oere</Currency>
+<Airports>103 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Asia, between China and India</Location>
+<Geographiccoordinates>28 00 N, 84 00 E</Geographiccoordinates>
+<Area>140800</Area>
+<Climate>varies from cool summers and severe winters in north to subtropical summers and mild winters in south</Climate>
+<Naturalresources>quartz, water, timber, hydropower, scenic beauty, small deposits of lignite, copper, cobalt, iron ore</Naturalresources>
+<Population>24702119</Population>
+<Populationgrowthrate>2.34% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 0.99 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Hindu 90%, Buddhist 5%, Muslim 3%, other 2% (1981)
+note: only official Hindu state in the world</Religions>
+<Countryname>Nepal </Countryname>
+<Capital>Kathmandu</Capital>
+<Flagdescription>red with a blue border around the unique shape of two overlapping right triangles; the smaller, upper triangle bears a white stylized moon and the larger, lower triangle bears a white 12-pointed sun</Flagdescription>
+<GDP>purchasing power parity - $27.4 billion (1999 est.)</GDP>
+<Industries>tourism, carpet, textile; small rice, jute, sugar, and oilseed mills; cigarette; cement and brick production</Industries>
+<Exports>$485 million (f.o.b., 1998), but does not include unrecorded border trade with India</Exports>
+<Imports>$1.2 billion (f.o.b., 1998)</Imports>
+<Currency>1 Nepalese rupee (NR) = 100 paisa</Currency>
+<Airports>45 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis for the domestic and international drug markets; transit point for opiates from Southeast Asia to the West</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, island in the South Pacific Ocean, south of the Marshall Islands</Location>
+<Geographiccoordinates>0 32 S, 166 55 E</Geographiccoordinates>
+<Area>21</Area>
+<Climate>tropical; monsoonal; rainy season (November to February)</Climate>
+<Naturalresources>phosphates</Naturalresources>
+<Population>11845</Population>
+<Populationgrowthrate>2.05% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 1 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian (two-thirds Protestant, one-third Roman Catholic)</Religions>
+<Countryname>Nauru </Countryname>
+<Capital>no official capital; government offices in Yaren District</Capital>
+<Flagdescription>blue with a narrow, horizontal, yellow stripe across the center and a large white 12-pointed star below the stripe on the hoist side; the star indicates the country's location in relation to the Equator (the yellow stripe) and the 12 points symbolize the 12 original tribes of Nauru</Flagdescription>
+<GDP>purchasing power parity - $100 million (1993 est.)</GDP>
+<Industries>phosphate mining, financial services, coconut products</Industries>
+<Exports>$25.3 million (f.o.b., 1991)</Exports>
+<Imports>$21.1 million (c.i.f., 1991)</Imports>
+<Currency>1 Australian dollar ($A) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern South America, bordering the North Atlantic Ocean, between French Guiana and Guyana</Location>
+<Geographiccoordinates>4 00 N, 56 00 W</Geographiccoordinates>
+<Area>163270</Area>
+<Climate>tropical; moderated by trade winds</Climate>
+<Naturalresources>timber, hydropower, fish, kaolin, shrimp, bauxite, gold, and small amounts of nickel, copper, platinum, iron ore</Naturalresources>
+<Population>431303</Population>
+<Populationgrowthrate>0.65% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Hindu 27.4%, Muslim 19.6%, Roman Catholic 22.8%, Protestant 25.2% (predominantly Moravian), indigenous beliefs 5%</Religions>
+<Countryname>Suriname </Countryname>
+<Capital>Paramaribo</Capital>
+<Flagdescription>five horizontal bands of green (top, double width), white, red (quadruple width), white, and green (double width); there is a large, yellow, five-pointed star centered in the red band</Flagdescription>
+<GDP>purchasing power parity - $1.48 billion (1999 est.)</GDP>
+<Industries>bauxite and gold mining, alumina and aluminum production, lumbering, food processing, fishing</Industries>
+<Exports>$406.1 million (f.o.b., 1998)</Exports>
+<Imports>$461.4 million (f.o.b., 1998)</Imports>
+<Currency>1 Surinamese guilder, gulden, or florin (Sf.) = 100 cents</Currency>
+<Airports>46 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for South American drugs destined mostly for Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, two island groups in the Caribbean Sea - one includes Curacao and Bonaire north of Venezuela and the other is east of the Virgin Islands</Location>
+<Geographiccoordinates>12 15 N, 68 45 W</Geographiccoordinates>
+<Area>960</Area>
+<Climate>tropical; ameliorated by northeast trade winds</Climate>
+<Naturalresources>phosphates (Curacao only), salt (Bonaire only)</Naturalresources>
+<Population>210134</Population>
+<Populationgrowthrate>1.01% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.9 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.92 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic, Protestant, Jewish, Seventh-Day Adventist</Religions>
+<Countryname>Netherlands Antilles </Countryname>
+<Capital>Willemstad</Capital>
+<Flagdescription>white, with a horizontal blue stripe in the center superimposed on a vertical red band, also centered; five white, five-pointed stars are arranged in an oval pattern in the center of the blue band; the five stars represent the five main islands of Bonaire, Curacao, Saba, Sint Eustatius, and Sint Maarten</Flagdescription>
+<GDP>purchasing power parity - $2.4 billion (1998 est.)</GDP>
+<Industries>tourism (Curacao, Sint Maarten, and Bonaire), petroleum refining (Curacao), petroleum transshipment facilities (Curacao and Bonaire), light manufacturing (Curacao)</Industries>
+<Exports>$303 million (f.o.b., 1998)</Exports>
+<Imports>$1.3 billion (c.i.f., 1998)</Imports>
+<Currency>1 Netherlands Antillean guilder, gulden, or florin (NAf.) = 100 cents</Currency>
+<Airports>5 (1999 est.)</Airports>
+<Illicitdrugs>money-laundering center; transshipment point for South American drugs bound for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Middle America, bordering both the Caribbean Sea and the North Pacific Ocean, between Costa Rica and Honduras</Location>
+<Geographiccoordinates>13 00 N, 85 00 W</Geographiccoordinates>
+<Area>129494</Area>
+<Climate>tropical in lowlands, cooler in highlands</Climate>
+<Naturalresources>gold, silver, copper, tungsten, lead, zinc, timber, fish</Naturalresources>
+<Population>4812569</Population>
+<Populationgrowthrate>2.2% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.77 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 85%, Protestant</Religions>
+<Countryname>Nicaragua </Countryname>
+<Capital>Managua</Capital>
+<Flagdescription>three equal horizontal bands of blue (top), white, and blue with the national coat of arms centered in the white band; the coat of arms features a triangle encircled by the words REPUBLICA DE NICARAGUA on the top and AMERICA CENTRAL on the bottom; similar to the flag of El Salvador, which features a round emblem encircled by the words REPUBLICA DE EL SALVADOR EN LA AMERICA CENTRAL centered in the white band; also similar to the flag of Honduras, which has five blue stars arranged in an X pattern centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $12.5 billion (1999 est.)</GDP>
+<Industries>food processing, chemicals, machinery and metal products, textiles, clothing, petroleum refining and distribution, beverages, footwear, wood</Industries>
+<Exports>$573 million (f.o.b., 1998 est.)</Exports>
+<Imports>$1.5 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 gold cordoba (C$) = 100 centavos</Currency>
+<Airports>182 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for cocaine destined for the US and transshipment point for arms-for-drugs dealing</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, islands in the South Pacific Ocean, southeast of Australia</Location>
+<Geographiccoordinates>41 00 S, 174 00 E</Geographiccoordinates>
+<Area>268680</Area>
+<Climate>temperate with sharp regional contrasts</Climate>
+<Naturalresources>natural gas, iron ore, sand, coal, timber, hydropower, gold, limestone</Naturalresources>
+<Population>3819762</Population>
+<Populationgrowthrate>1.17% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.77 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican 24%, Presbyterian 18%, Roman Catholic 15%, Methodist 5%, Baptist 2%, other Protestant 3%, unspecified or none 33% (1986)</Religions>
+<Countryname>New Zealand </Countryname>
+<Capital>Wellington</Capital>
+<Flagdescription>blue with the flag of the UK in the upper hoist-side quadrant with four red five-pointed stars edged in white centered in the outer half of the flag; the stars represent the Southern Cross constellation</Flagdescription>
+<GDP>purchasing power parity - $63.8 billion (1999 est.)</GDP>
+<Industries>food processing, wood and paper products, textiles, machinery, transportation equipment, banking and insurance, tourism, mining</Industries>
+<Exports>$12.2 billion (f.o.b., 1998 est.)</Exports>
+<Imports>$11.2 billion (f.o.b., 1998 est.)</Imports>
+<Currency>1 New Zealand dollar (NZ$) = 100 cents</Currency>
+<Airports>111 (1999 est.)</Airports>
+</record>
+<record>
+<Location>body of water between 60 degrees south latitude and Antarctica</Location>
+<Geographiccoordinates>65 00 S, 0 00 E (nominally), but the Southern Ocean has the unique distinction of being a large circumpolar body of water totally encircling the continent of Antarctica; this ring of water lies between 60 degrees south latitude and the coast of Antarctica, and encompasses 360 degrees of longitude</Geographiccoordinates>
+<Area>20000000</Area>
+<Climate>sea temperatures vary from about 10 degrees Centigrade to -2 degrees Centigrade; cyclonic storms travel eastward around the continent and frequently are intense because of the temperature contrast between ice and open ocean; the ocean area from about latitude 40 south to the Antarctic Circle has the strongest average winds found anywhere on Earth; in winter the ocean freezes outward to 65 degrees south latitude in the Pacific sector and 55 degrees south latitude in the Atlantic sector, lowering surface temperatures well below 0 degrees Centigrade; at some coastal points intense persistent drainage winds from the interior keep the shoreline ice-free throughout the winter</Climate>
+<Naturalresources>probable large and possible giant oil and gas fields on the continental margin, manganese nodules, possible placer deposits, sand and gravel, fresh water as icebergs, squid, whales, and seals - none exploited; krill, fishes</Naturalresources>
+</record>
+<record>
+<Location>Central South America, northeast of Argentina</Location>
+<Geographiccoordinates>23 00 S, 58 00 W</Geographiccoordinates>
+<Area>406750</Area>
+<Climate>subtropical to temperate; substantial rainfall in the eastern portions, becoming semiarid in the far west</Climate>
+<Naturalresources>hydropower, timber, iron ore, manganese, limestone</Naturalresources>
+<Population>5585828</Population>
+<Populationgrowthrate>2.64% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.85 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 90%, Mennonite, and other Protestant</Religions>
+<Countryname>Paraguay </Countryname>
+<Capital>Asuncion</Capital>
+<Flagdescription>three equal, horizontal bands of red (top), white, and blue with an emblem centered in the white band; unusual flag in that the emblem is different on each side; the obverse (hoist side at the left) bears the national coat of arms (a yellow five-pointed star within a green wreath capped by the words REPUBLICA DEL PARAGUAY, all within two circles); the reverse (hoist side at the right) bears the seal of the treasury (a yellow lion below a red Cap of Liberty and the words Paz y Justicia (Peace and Justice) capped by the words REPUBLICA DEL PARAGUAY, all within two circles)</Flagdescription>
+<GDP>purchasing power parity - $19.9 billion (1999 est.)</GDP>
+<Industries>sugar, cement, textiles, beverages, wood products</Industries>
+<Exports>$3.1 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$3.2 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 guarani (G) = 100 centimos</Currency>
+<Airports>937 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of cannabis, most or all of which is consumed in South America; transshipment country for Bolivian cocaine headed for Southern Cone markets and Europe and a limited amount to the US</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, islands in the South Pacific Ocean, about one-half of the way from Peru to New Zealand</Location>
+<Geographiccoordinates>25 04 S, 130 06 W</Geographiccoordinates>
+<Area>47</Area>
+<Climate>tropical, hot, humid; modified by southeast trade winds; rainy season (November to March)</Climate>
+<Naturalresources>miro trees (used for handicrafts), fish
+note: manganese, iron, copper, gold, silver, and zinc have been discovered offshore</Naturalresources>
+<Population>54</Population>
+<Populationgrowthrate>-2.06% (2000 est.)</Populationgrowthrate>
+<Religions>Seventh-Day Adventist 100%</Religions>
+<Countryname>Pitcairn Islands </Countryname>
+<Capital>Adamstown</Capital>
+<Flagdescription>blue with the flag of the UK in the upper hoist-side quadrant and the Pitcairn Islander coat of arms centered on the outer half of the flag; the coat of arms is yellow, green, and light blue with a shield featuring a yellow anchor</Flagdescription>
+<GDP>purchasing power parity - $NA</GDP>
+<Industries>postage stamps, handicrafts</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 New Zealand dollar (NZ$) = 100 cents</Currency>
+<Airports>none</Airports>
+</record>
+<record>
+<Location>Western South America, bordering the South Pacific Ocean, between Chile and Ecuador</Location>
+<Geographiccoordinates>10 00 S, 76 00 W</Geographiccoordinates>
+<Area>1285220</Area>
+<Climate>varies from tropical in east to dry desert in west; temperate to frigid in Andes</Climate>
+<Naturalresources>copper, silver, gold, petroleum, timber, fish, iron ore, coal, phosphate, potash, hydropower</Naturalresources>
+<Population>27012899</Population>
+<Populationgrowthrate>1.75% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.85 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 90%</Religions>
+<Countryname>Peru </Countryname>
+<Capital>Lima</Capital>
+<Flagdescription>three equal, vertical bands of red (hoist side), white, and red with the coat of arms centered in the white band; the coat of arms features a shield bearing a llama, cinchona tree (the source of quinine), and a yellow cornucopia spilling out gold coins, all framed by a green wreath</Flagdescription>
+<GDP>purchasing power parity - $116 billion (1999 est.)</GDP>
+<Industries>mining of metals, petroleum, fishing, textiles, clothing, food processing, cement, auto assembly, steel, shipbuilding, metal fabrication</Industries>
+<Exports>$5.9 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$8.4 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 nuevo sol (S/.) = 100 centimos</Currency>
+<Airports>234 (1999 est.)</Airports>
+<Illicitdrugs>until recently the world's largest coca leaf producer, Peru has reduced the area of coca under cultivation by 24% to 38,700 hectares at the end of 1999; most of cocaine base is shipped to neighboring Colombia, Bolivia, and Brazil for processing into cocaine for the international drug market, but exports of finished cocaine are increasing by maritime conveyance to Mexico, US, and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, group of small islands and reefs in the South China Sea, about one-third of the way from central Vietnam to the northern Philippines</Location>
+<Geographiccoordinates>16 30 N, 112 00 E</Geographiccoordinates>
+<Area></Area>
+<Climate>tropical</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Paracel Islands </Countryname>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Asia, group of reefs and islands in the South China Sea, about two-thirds of the way from southern Vietnam to the southern Philippines</Location>
+<Geographiccoordinates>8 38 N, 111 55 E</Geographiccoordinates>
+<Area></Area>
+<Climate>tropical</Climate>
+<Naturalresources>fish, guano, undetermined oil and natural gas potential</Naturalresources>
+<Population></Population>
+<Countryname>Spratly Islands </Countryname>
+<Airports>4 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Asia, bordering the Arabian Sea, between India on the east and Iran and Afghanistan on the west and China in the north</Location>
+<Geographiccoordinates>30 00 N, 70 00 E</Geographiccoordinates>
+<Area>803940</Area>
+<Climate>mostly hot, dry desert; temperate in northwest; arctic in north</Climate>
+<Naturalresources>land, extensive natural gas reserves, limited petroleum, poor quality coal, iron ore, copper, salt, limestone</Naturalresources>
+<Population>141553775</Population>
+<Populationgrowthrate>2.17% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 0.97 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 97% (Sunni 77%, Shi'a 20%), Christian, Hindu, and other 3%</Religions>
+<Countryname>Pakistan </Countryname>
+<Capital>Islamabad</Capital>
+<Flagdescription>green with a vertical white band (symbolizing the role of religious minorities) on the hoist side; a large white crescent and star are centered in the green field; the crescent, star, and color green are traditional symbols of Islam</Flagdescription>
+<GDP>purchasing power parity - $282 billion (1999 est.)</GDP>
+<Industries>textiles, food processing, beverages, construction materials, clothing, paper products, shrimp</Industries>
+<Exports>$8.4 billion (f.o.b., 1999)</Exports>
+<Imports>$9.8 billion (f.o.b., 1999)</Imports>
+<Currency>1 Pakistani rupee (PRe) = 100 paisa</Currency>
+<Airports>118 (1999 est.)</Airports>
+<Illicitdrugs>producer of illicit opium and hashish for the international drug trade (poppy cultivation in 1999 - 1,570 hectares, a 48% drop from 1998 because of eradication and alternative development); key transit area for Southwest Asian heroin moving to Western markets; narcotics still move from Afghanistan into Balochistan Province</Illicitdrugs>
+</record>
+<record>
+<Location>Central Europe, east of Germany</Location>
+<Geographiccoordinates>52 00 N, 20 00 E</Geographiccoordinates>
+<Area>312685</Area>
+<Climate>temperate with cold, cloudy, moderately severe winters with frequent precipitation; mild summers with frequent showers and thundershowers</Climate>
+<Naturalresources>coal, sulfur, copper, natural gas, silver, lead, salt, arable land</Naturalresources>
+<Population>38646023</Population>
+<Populationgrowthrate>-0.04% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.62 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 95% (about 75% practicing), Eastern Orthodox, Protestant, and other 5%</Religions>
+<Countryname>Poland </Countryname>
+<Capital>Warsaw</Capital>
+<Flagdescription>two equal horizontal bands of white (top) and red; similar to the flags of Indonesia and Monaco which are red (top) and white</Flagdescription>
+<GDP>purchasing power parity - $276.5 billion (1999 est.)</GDP>
+<Industries>machine building, iron and steel, coal mining, chemicals, shipbuilding, food processing, glass, beverages, textiles</Industries>
+<Exports>$27.8 billion (f.o.b., 1999)</Exports>
+<Imports>$40.8 billion (f.o.b., 1999)</Imports>
+<Currency>1 zloty (Zl) = 100 groszy</Currency>
+<Airports>123 (1999 est.)</Airports>
+<Illicitdrugs>major illicit producer of amphetamines for the international market; minor transshipment point for Asian and Latin American illicit drugs to Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Middle America, bordering both the Caribbean Sea and the North Pacific Ocean, between Colombia and Costa Rica</Location>
+<Geographiccoordinates>9 00 N, 80 00 W</Geographiccoordinates>
+<Area>78200</Area>
+<Climate>tropical maritime; hot, humid, cloudy; prolonged rainy season (May to January), short dry season (January to May)</Climate>
+<Naturalresources>copper, mahogany forests, shrimp, hydropower</Naturalresources>
+<Population>2808268</Population>
+<Populationgrowthrate>1.34% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.92 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 85%, Protestant 15%</Religions>
+<Countryname>Panama </Countryname>
+<Capital>Panama</Capital>
+<Flagdescription>divided into four, equal rectangles; the top quadrants are white (hoist side) with a blue five-pointed star in the center and plain red; the bottom quadrants are plain blue (hoist side) and white with a red five-pointed star in the center</Flagdescription>
+<GDP>purchasing power parity - $21 billion (1999 est.)</GDP>
+<Industries>construction, petroleum refining, brewing, cement and other construction materials, sugar milling</Industries>
+<Exports>$4.7 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$6.4 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 balboa (B) = 100 centesimos</Currency>
+<Airports>105 (1999 est.)</Airports>
+<Illicitdrugs>major cocaine transshipment point and major drug-money-laundering center; no recent signs of coca cultivation; monitoring of financial transactions is improving, yet Panama has failed to prosecute anyone for money laundering - official corruption remains a major problem</Illicitdrugs>
+</record>
+<record>
+<Location>Southwestern Europe, bordering the North Atlantic Ocean, west of Spain</Location>
+<Geographiccoordinates>39 30 N, 8 00 W</Geographiccoordinates>
+<Area>92391</Area>
+<Climate>maritime temperate; cool and rainy in north, warmer and drier in south</Climate>
+<Naturalresources>fish, forests (cork), tungsten, iron ore, uranium ore, marble, arable land, hydro power</Naturalresources>
+<Population>10048232</Population>
+<Populationgrowthrate>0.18% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.68 male(s)/female
+total population: 0.92 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 94%, Protestant (1995)</Religions>
+<Countryname>Portugal </Countryname>
+<Capital>Lisbon</Capital>
+<Flagdescription>two vertical bands of green (hoist side, two-fifths) and red (three-fifths) with the Portuguese coat of arms centered on the dividing line</Flagdescription>
+<GDP>purchasing power parity - $151.4 billion (1999 est.)</GDP>
+<Industries>textiles and footwear; wood pulp, paper, and cork; metalworking; oil refining; chemicals; fish canning; wine; tourism</Industries>
+<Exports>$25 billion (f.o.b., 1998)</Exports>
+<Imports>$34.9 billion (f.o.b., 1998)</Imports>
+<Currency>1 Portuguese escudo (Esc) = 100 centavos</Currency>
+<Airports>66 (1999 est.)</Airports>
+<Illicitdrugs>important gateway country for Latin American cocaine entering the European market; transshipment point for hashish from North Africa to Europe; consumer of Southwest Asian heroin</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, group of islands including the eastern half of the island of New Guinea between the Coral Sea and the South Pacific Ocean, east of Indonesia</Location>
+<Geographiccoordinates>6 00 S, 147 00 E</Geographiccoordinates>
+<Area>462840</Area>
+<Climate>tropical; northwest monsoon (December to March), southeast monsoon (May to October); slight seasonal temperature variation</Climate>
+<Naturalresources>gold, copper, silver, natural gas, timber, oil, fisheries</Naturalresources>
+<Population>4926984</Population>
+<Populationgrowthrate>2.47% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.08 male(s)/female
+65 years and over: 0.9 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 22%, Lutheran 16%, Presbyterian/Methodist/London Missionary Society 8%, Anglican 5%, Evangelical Alliance 4%, Seventh-Day Adventist 1%, other Protestant 10%, indigenous beliefs 34%</Religions>
+<Countryname>Papua New Guinea </Countryname>
+<Capital>Port Moresby</Capital>
+<Flagdescription>divided diagonally from upper hoist-side corner; the upper triangle is red with a soaring yellow bird of paradise centered; the lower triangle is black with five white five-pointed stars of the Southern Cross constellation centered</Flagdescription>
+<GDP>purchasing power parity - $11.6 billion (1999 est.)</GDP>
+<Industries>copra crushing, palm oil processing, plywood production, wood chip production; mining of gold, silver, and copper; crude oil production; construction, tourism</Industries>
+<Exports>$1.9 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$1 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 kina (K) = 100 toea</Currency>
+<Airports>492 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, group of islands in the North Pacific Ocean, southeast of the Philippines</Location>
+<Geographiccoordinates>7 30 N, 134 30 E</Geographiccoordinates>
+<Area>458</Area>
+<Climate>wet season May to November; hot and humid</Climate>
+<Naturalresources>forests, minerals (especially gold), marine products, deep-seabed minerals</Naturalresources>
+<Population>18766</Population>
+<Populationgrowthrate>1.75% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.21 male(s)/female
+65 years and over: 0.89 male(s)/female
+total population: 1.15 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian (Catholics, Seventh-Day Adventists, Jehovah's Witnesses, the Assembly of God, the Liebenzell Mission, and Latter-Day Saints), Modekngei religion (one-third of the population observes this religion which is indigenous to Palau)</Religions>
+<Countryname>Palau </Countryname>
+<Capital>Koror
+note: a new capital is being built about 20 km northeast of Koror</Capital>
+<Flagdescription>light blue with a large yellow disk (representing the moon) shifted slightly to the hoist side</Flagdescription>
+<GDP>purchasing power parity - $160 million (1997 est.)
+note: GDP numbers reflect US spending</GDP>
+<Industries>tourism, craft items (from shell, wood, pearls), construction, garment making</Industries>
+<Exports>$14.3 million (f.o.b., 1996)</Exports>
+<Imports>$72.4 million (f.o.b., 1996)</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>3 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean, between Guinea and Senegal</Location>
+<Geographiccoordinates>12 00 N, 15 00 W</Geographiccoordinates>
+<Area>36120</Area>
+<Climate>tropical; generally hot and humid; monsoonal-type rainy season (June to November) with southwesterly winds; dry season (December to May) with northeasterly harmattan winds</Climate>
+<Naturalresources>fish, timber, phosphates, bauxite, unexploited deposits of petroleum</Naturalresources>
+<Population>1285715</Population>
+<Populationgrowthrate>2.4% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 0.9 male(s)/female
+65 years and over: 0.83 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 50%, Muslim 45%, Christian 5%</Religions>
+<Countryname>Guinea-Bissau </Countryname>
+<Capital>Bissau</Capital>
+<Flagdescription>two equal horizontal bands of yellow (top) and green with a vertical red band on the hoist side; there is a black five-pointed star centered in the red band; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $1.1 billion (1999 est.)</GDP>
+<Industries>agricultural products processing, beer, soft drinks</Industries>
+<Exports>$26.8 million (f.o.b., 1998)</Exports>
+<Imports>$22.9 million (f.o.b., 1998)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>30 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle East, peninsula bordering the Persian Gulf and Saudi Arabia</Location>
+<Geographiccoordinates>25 30 N, 51 15 E</Geographiccoordinates>
+<Area>11437</Area>
+<Climate>desert; hot, dry; humid and sultry in summer</Climate>
+<Naturalresources>petroleum, natural gas, fish</Naturalresources>
+<Population>744483</Population>
+<Populationgrowthrate>3.35% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 2.48 male(s)/female
+65 years and over: 2.43 male(s)/female
+total population: 1.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 95%</Religions>
+<Countryname>Qatar </Countryname>
+<Capital>Doha</Capital>
+<Flagdescription>maroon with a broad white serrated band (nine white points) on the hoist side</Flagdescription>
+<GDP>purchasing power parity - $12.3 billion (1999 est.)</GDP>
+<Industries>crude oil production and refining, fertilizers, petrochemicals, steel reinforcing bars, cement</Industries>
+<Exports>$6.7 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$4.2 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Qatari riyal (QR) = 100 dirhams</Currency>
+<Airports>4 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, island in the Indian Ocean, east of Madagascar</Location>
+<Geographiccoordinates>21 06 S, 55 36 E</Geographiccoordinates>
+<Area>2512</Area>
+<Climate>tropical, but temperature moderates with elevation; cool and dry from May to November, hot and rainy from November to April</Climate>
+<Naturalresources>fish, arable land, hydropower</Naturalresources>
+<Population>720934</Population>
+<Populationgrowthrate>1.63% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.68 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 86%, Hindu, Muslim, Buddhist (1995)</Religions>
+<Countryname>Reunion </Countryname>
+<Capital>Saint-Denis</Capital>
+<Flagdescription>the flag of France is used</Flagdescription>
+<GDP>purchasing power parity - $3.4 billion (1998 est.)</GDP>
+<Industries>sugar, rum, cigarettes, handicraft items, flower oil extraction</Industries>
+<Exports>$214.162 million (f.o.b., 1997)</Exports>
+<Imports>$2.5 billion (c.i.f., 1997)</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, group of atolls and reefs in the North Pacific Ocean, about one-half of the way from Hawaii to Papua New Guinea</Location>
+<Geographiccoordinates>9 00 N, 168 00 E</Geographiccoordinates>
+<Area>181</Area>
+<Climate>wet season from May to November; hot and humid; islands border typhoon belt</Climate>
+<Naturalresources>phosphate deposits, marine products, deep seabed minerals</Naturalresources>
+<Population>68126</Population>
+<Populationgrowthrate>3.88% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 0.9 male(s)/female
+total population: 1.04 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian (mostly Protestant)</Religions>
+<Countryname>Marshall Islands </Countryname>
+<Capital>Majuro</Capital>
+<Flagdescription>blue with two stripes radiating from the lower hoist-side corner - orange (top) and white; there is a white star with four large rays and 20 small rays on the hoist side above the two stripes</Flagdescription>
+<GDP>purchasing power parity - $105 million (1998 est.), supplemented by approximately $65 million annual US aid</GDP>
+<Industries>copra, fish, tourism, craft items from shell, wood, and pearls, offshore banking (embryonic)</Industries>
+<Exports>$28 million (f.o.b., 1997 est.)</Exports>
+<Imports>$58 million (f.o.b., 1997 est.)</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>16 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Europe, bordering the Black Sea, between Bulgaria and Ukraine</Location>
+<Geographiccoordinates>46 00 N, 25 00 E</Geographiccoordinates>
+<Area>237500</Area>
+<Climate>temperate; cold, cloudy winters with frequent snow and fog; sunny summers with frequent showers and thunderstorms</Climate>
+<Naturalresources>petroleum (reserves declining), timber, natural gas, coal, iron ore, salt, arable land, hydro power</Naturalresources>
+<Population>22411121</Population>
+<Populationgrowthrate>-0.21% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Romanian Orthodox 70%, Roman Catholic 6% (of which 3% are Uniate), Protestant 6%, unaffiliated 18%</Religions>
+<Countryname>Romania </Countryname>
+<Capital>Bucharest</Capital>
+<Flagdescription>three equal vertical bands of blue (hoist side), yellow, and red; the national coat of arms that used to be centered in the yellow band has been removed; now similar to the flag of Chad, also resembles the flags of Andorra and Moldova</Flagdescription>
+<GDP>purchasing power parity - $87.4 billion (1999 est.)</GDP>
+<Industries>mining, timber, construction materials, metallurgy, chemicals, machine building, food processing, petroleum production and refining</Industries>
+<Exports>$8.4 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$9.6 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 leu (L) = 100 bani</Currency>
+<Airports>62 (1999 est.)</Airports>
+<Illicitdrugs>important transshipment point for Southwest Asian heroin transiting the Balkan route and small amounts of Latin American cocaine bound for Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Asia, archipelago between the Philippine Sea and the South China Sea, east of Vietnam</Location>
+<Geographiccoordinates>13 00 N, 122 00 E</Geographiccoordinates>
+<Area>300000</Area>
+<Climate>tropical marine; northeast monsoon (November to April); southwest monsoon (May to October)</Climate>
+<Naturalresources>timber, petroleum, nickel, cobalt, silver, gold, salt, copper</Naturalresources>
+<Population>81159644</Population>
+<Populationgrowthrate>2.07% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.8 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 83%, Protestant 9%, Muslim 5%, Buddhist and other 3%</Religions>
+<Countryname>Philippines </Countryname>
+<Capital>Manila</Capital>
+<Flagdescription>two equal horizontal bands of blue (top) and red with a white equilateral triangle based on the hoist side; in the center of the triangle is a yellow sun with eight primary rays (each containing three individual rays) and in each corner of the triangle is a small yellow five-pointed star</Flagdescription>
+<GDP>purchasing power parity - $282 billion (1999 est.)</GDP>
+<Industries>textiles, pharmaceuticals, chemicals, wood products, food processing, electronics assembly, petroleum refining, fishing</Industries>
+<Exports>$34.8 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$30.7 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Philippine peso (P) = 100 centavos</Currency>
+<Airports>266 (1999 est.)</Airports>
+<Illicitdrugs>exports locally produced marijuana and hashish to East Asia, the US, and other Western markets; serves as a transit point for heroin and crystal methamphetamine</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, island between the Caribbean Sea and the North Atlantic Ocean, east of the Dominican Republic</Location>
+<Geographiccoordinates>18 15 N, 66 30 W</Geographiccoordinates>
+<Area>9104</Area>
+<Climate>tropical marine, mild; little seasonal temperature variation</Climate>
+<Naturalresources>some copper and nickel; potential for onshore and offshore oil</Naturalresources>
+<Population>3915798</Population>
+<Populationgrowthrate>0.56% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.92 male(s)/female
+65 years and over: 0.75 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 85%, Protestant and other 15%</Religions>
+<Countryname>Puerto Rico </Countryname>
+<Capital>San Juan</Capital>
+<Flagdescription>five equal horizontal bands of red (top and bottom) alternating with white; a blue isosceles triangle based on the hoist side bears a large, white, five-pointed star in the center; design based on the US flag</Flagdescription>
+<GDP>purchasing power parity - $38.1 billion (1999 est.)</GDP>
+<Industries>pharmaceuticals, electronics, apparel, food products; tourism</Industries>
+<Exports>$34.9 billion (f.o.b., 1999)</Exports>
+<Imports>$25.3 billion (c.i.f., 1999)</Imports>
+<Currency>1 US dollar (US$) = 100 cents</Currency>
+<Airports>30 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Asia (that part west of the Urals is sometimes included with Europe), bordering the Arctic Ocean, between Europe and the North Pacific Ocean</Location>
+<Geographiccoordinates>60 00 N, 100 00 E</Geographiccoordinates>
+<Area>17075200</Area>
+<Climate>ranges from steppes in the south through humid continental in much of European Russia; subarctic in Siberia to tundra climate in the polar north; winters vary from cool along Black Sea coast to frigid in Siberia; summers vary from warm in the steppes to cool along Arctic coast</Climate>
+<Naturalresources>wide natural resource base including major deposits of oil, natural gas, coal, and many strategic minerals, timber
+note: formidable obstacles of climate, terrain, and distance hinder exploitation of natural resources</Naturalresources>
+<Population>146001176</Population>
+<Populationgrowthrate>-0.38% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.94 male(s)/female
+65 years and over: 0.46 male(s)/female
+total population: 0.88 male(s)/female (2000 est.)</Sexratio>
+<Religions>Russian Orthodox, Muslim, other</Religions>
+<Countryname>Russia </Countryname>
+<Capital>Moscow</Capital>
+<Flagdescription>three equal horizontal bands of white (top), blue, and red</Flagdescription>
+<GDP>purchasing power parity - $620.3 billion (1999 est.)</GDP>
+<Industries>complete range of mining and extractive industries producing coal, oil, gas, chemicals, and metals; all forms of machine building from rolling mills to high-performance aircraft and space vehicles; shipbuilding; road and rail transportation equipment; communications equipment; agricultural machinery, tractors, and construction equipment; electric power generating and transmitting equipment; medical and scientific instruments; consumer durables, textiles, foodstuffs, handicrafts</Industries>
+<Exports>$75.4 billion (1999 est.)</Exports>
+<Imports>$48.2 billion (1999 est.)</Imports>
+<Currency>1 ruble (R) = 100 kopeks</Currency>
+<Airports>2,517 (1994 est.)</Airports>
+<Illicitdrugs>limited cultivation of illicit cannabis and opium poppy and producer of amphetamines, mostly for domestic consumption; government has active eradication program; increasingly used as transshipment point for Southwest and Southeast Asian opiates and cannabis and Latin American cocaine to Western Europe, possibly to the US, and growing domestic market; major source of heroin precursor chemicals</Illicitdrugs>
+</record>
+<record>
+<Location>Central Africa, east of Democratic Republic of the Congo</Location>
+<Geographiccoordinates>2 00 S, 30 00 E</Geographiccoordinates>
+<Area>26338</Area>
+<Climate>temperate; two rainy seasons (February to April, November to January); mild in mountains with frost and snow possible</Climate>
+<Naturalresources>gold, cassiterite (tin ore), wolframite (tungsten ore), methane, hydropower, arable land</Naturalresources>
+<Population>7229129</Population>
+<Populationgrowthrate>1.14% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.68 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 65%, Protestant 9%, Muslim 1%, indigenous beliefs and other 25%</Religions>
+<Countryname>Rwanda </Countryname>
+<Capital>Kigali</Capital>
+<Flagdescription>three equal vertical bands of red (hoist side), yellow, and green with a large black letter R centered in the yellow band; uses the popular pan-African colors of Ethiopia; similar to the flag of Guinea, which has a plain yellow band</Flagdescription>
+<GDP>purchasing power parity - $5.9 billion (1999 est.)</GDP>
+<Industries>cement, agricultural products, small-scale beverages, soap, furniture, shoes, plastic goods, textiles, cigarettes</Industries>
+<Exports>$70.8 million (f.o.b., 1999 est.)</Exports>
+<Imports>$242 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 Rwandan franc (RF) = 100 centimes</Currency>
+<Airports>8 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle East, bordering the Persian Gulf and the Red Sea, north of Yemen</Location>
+<Geographiccoordinates>25 00 N, 45 00 E</Geographiccoordinates>
+<Area>1960582</Area>
+<Climate>harsh, dry desert with great extremes of temperature</Climate>
+<Naturalresources>petroleum, natural gas, iron ore, gold, copper</Naturalresources>
+<Population>22023506</Population>
+<Populationgrowthrate>3.28% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.43 male(s)/female
+65 years and over: 1.18 male(s)/female
+total population: 1.24 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 100%</Religions>
+<Countryname>Saudi Arabia </Countryname>
+<Capital>Riyadh</Capital>
+<Flagdescription>green with large white Arabic script (that may be translated as There is no God but God; Muhammad is the Messenger of God) above a white horizontal saber (the tip points to the hoist side); green is the traditional color of Islam</Flagdescription>
+<GDP>purchasing power parity - $191 billion (1999 est.)</GDP>
+<Industries>crude oil production, petroleum refining, basic petrochemicals, cement, construction, fertilizer, plastics</Industries>
+<Exports>$48 billion (f.o.b., 1999)</Exports>
+<Imports>$28 billion (f.o.b., 1999)</Imports>
+<Currency>1 Saudi riyal (SR) = 100 halalah</Currency>
+<Airports>205 (1999 est.)</Airports>
+<Illicitdrugs>death penalty for traffickers; increasing consumption of heroin and cocaine</Illicitdrugs>
+</record>
+<record>
+<Location>Northern North America, islands in the North Atlantic Ocean, south of Newfoundland (Canada)</Location>
+<Geographiccoordinates>46 50 N, 56 20 W</Geographiccoordinates>
+<Area>242</Area>
+<Climate>cold and wet, with much mist and fog; spring and autumn are windy</Climate>
+<Naturalresources>fish, deepwater ports</Naturalresources>
+<Population>6896</Population>
+<Populationgrowthrate>0.49% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.04 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 0.73 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 99%</Religions>
+<Countryname>Saint Pierre and Miquelon </Countryname>
+<Capital>Saint-Pierre</Capital>
+<Flagdescription>a yellow sailing ship facing the hoist side rides on a dark blue background with a black wave line under the ship; on the hoist side, a vertical band is divided into three parts: the top part is red with a green diagonal cross extending to the corners overlaid by a white cross dividing the square into four sections; the middle part has a white background with an ermine pattern; the third part has a red background with two stylized yellow lions outlined in black, one on top of the other; the flag of France is used for official occasions</Flagdescription>
+<GDP>purchasing power parity - $74 million (1996 est.); supplemented by annual payments from France of about $65 million</GDP>
+<Industries>fish processing and supply base for fishing fleets; tourism</Industries>
+<Exports>$5 million (f.o.b., 1997)</Exports>
+<Imports>$66 million (c.i.f., 1997 est.)</Imports>
+<Currency>1 French franc (F) = 100 centimes</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Caribbean, islands in the Caribbean Sea, about one-third of the way from Puerto Rico to Trinidad and Tobago</Location>
+<Geographiccoordinates>17 20 N, 62 45 W</Geographiccoordinates>
+<Area>261</Area>
+<Climate>tropical tempered by constant sea breezes; little seasonal temperature variation; rainy season (May to November)</Climate>
+<Naturalresources>arable land</Naturalresources>
+<Population>38819</Population>
+<Populationgrowthrate>-0.22% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.7 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican, other Protestant, Roman Catholic</Religions>
+<Countryname>Saint Kitts and Nevis </Countryname>
+<Capital>Basseterre</Capital>
+<Flagdescription>divided diagonally from the lower hoist side by a broad black band bearing two white, five-pointed stars; the black band is edged in yellow; the upper triangle is green, the lower triangle is red</Flagdescription>
+<GDP>purchasing power parity - $244 million (1998 est.)</GDP>
+<Industries>sugar processing, tourism, cotton, salt, copra, clothing, footwear, beverages</Industries>
+<Exports>$42 million (1998)</Exports>
+<Imports>$160 million (1998)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>2 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for South American drugs destined for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Africa, group of islands in the Indian Ocean, northeast of Madagascar</Location>
+<Geographiccoordinates>4 35 S, 55 40 E</Geographiccoordinates>
+<Area>455</Area>
+<Climate>tropical marine; humid; cooler season during southeast monsoon (late May to September); warmer season during northwest monsoon (March to May)</Climate>
+<Naturalresources>fish, copra, cinnamon trees</Naturalresources>
+<Population>79326</Population>
+<Populationgrowthrate>0.49% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.51 male(s)/female
+total population: 0.93 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 90%, Anglican 8%, other 2%</Religions>
+<Countryname>Seychelles </Countryname>
+<Capital>Victoria</Capital>
+<Flagdescription>five oblique bands of blue (hoist side), yellow, red, white, and green (bottom) radiating from the bottom of the hoist side</Flagdescription>
+<GDP>purchasing power parity - $590 million (1999 est.)</GDP>
+<Industries>fishing; tourism; processing of coconuts and vanilla, coir (coconut fiber) rope, boat building, printing, furniture; beverages</Industries>
+<Exports>$91 million (f.o.b., 1998)</Exports>
+<Imports>$403 million (c.i.f., 1998)</Imports>
+<Currency>1 Seychelles rupee (SRe) = 100 cents</Currency>
+<Airports>14 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, at the southern tip of the continent of Africa</Location>
+<Geographiccoordinates>29 00 S, 24 00 E</Geographiccoordinates>
+<Area>1219912</Area>
+<Climate>mostly semiarid; subtropical along east coast; sunny days, cool nights</Climate>
+<Naturalresources>gold, chromium, antimony, coal, iron ore, manganese, nickel, phosphates, tin, uranium, gem diamonds, platinum, copper, vanadium, salt, natural gas</Naturalresources>
+<Population>43421021</Population>
+<Populationgrowthrate>0.5% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.02 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.61 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 68% (includes most whites and Coloreds, about 60% of blacks and about 40% of Indians), Muslim 2%, Hindu 1.5% (60% of Indians), indigenous beliefs and animist 28.5%</Religions>
+<Countryname>South Africa </Countryname>
+<Capital>Pretoria; note - Cape Town is the legislative center and Bloemfontein the judicial center</Capital>
+<Flagdescription>two equal width horizontal bands of red (top) and blue separated by a central green band which splits into a horizontal Y, the arms of which end at the corners of the hoist side; the Y embraces a black isosceles triangle from which the arms are separated by narrow yellow bands; the red and blue bands are separated from the green band and its arms by narrow white stripes
+note: prior to 26 April 1994, the flag was actually four flags in one - three miniature flags reproduced in the center of the white band of the former flag of the Netherlands, which has three equal horizontal bands of orange (top), white, and blue; the miniature flags are a vertically hanging flag of the old Orange Free State with a horizontal flag of the UK adjoining on the hoist side and a horizontal flag of the old Transvaal Republic adjoining on the other side</Flagdescription>
+<GDP>purchasing power parity - $296.1 billion (1999 est.)</GDP>
+<Industries>mining (world's largest producer of platinum, gold, chromium), automobile assembly, metalworking, machinery, textile, iron and steel, chemicals, fertilizer, foodstuffs</Industries>
+<Exports>$28 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$26 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 rand (R) = 100 cents</Currency>
+<Airports>744 (1999 est.)</Airports>
+<Illicitdrugs>transshipment center for heroin and cocaine; cocaine consumption on the rise; world's largest market for illicit methaqualone, usually imported illegally from India through various east African countries; illicit cultivation of marijuana</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean, between Guinea-Bissau and Mauritania</Location>
+<Geographiccoordinates>14 00 N, 14 00 W</Geographiccoordinates>
+<Area>196190</Area>
+<Climate>tropical; hot, humid; rainy season (May to November) has strong southeast winds; dry season (December to April) dominated by hot, dry, harmattan wind</Climate>
+<Naturalresources>fish, phosphates, iron ore</Naturalresources>
+<Population>9987494</Population>
+<Populationgrowthrate>2.94% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.92 male(s)/female
+65 years and over: 1 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 92%, indigenous beliefs 6%, Christian 2% (mostly Roman Catholic)</Religions>
+<Countryname>Senegal </Countryname>
+<Capital>Dakar</Capital>
+<Flagdescription>three equal vertical bands of green (hoist side), yellow, and red with a small green five-pointed star centered in the yellow band; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $16.6 billion (1999 est.)</GDP>
+<Industries>agricultural and fish processing, phosphate mining, fertilizer production, petroleum refining, construction materials</Industries>
+<Exports>$925 million (f.o.b., 1998)</Exports>
+<Imports>$1.2 billion (f.o.b., 1998)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>20 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for Southwest and Southeast Asian heroin moving to Europe and North America; illicit cultivator of cannabis</Illicitdrugs>
+</record>
+<record>
+<Location>islands in the South Atlantic Ocean, about mid-way between South America and Africa</Location>
+<Geographiccoordinates>15 56 S, 5 42 W</Geographiccoordinates>
+<Area>410</Area>
+<Climate>Saint Helena - tropical; marine; mild, tempered by trade winds; Tristan da Cunha - temperate; marine, mild, tempered by trade winds (tends to be cooler than Saint Helena)</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population>7212</Population>
+<Populationgrowthrate>0.76% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 1.09 male(s)/female
+65 years and over: 0.72 male(s)/female
+total population: 1.04 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican (majority), Baptist, Seventh-Day Adventist, Roman Catholic</Religions>
+<Countryname>Saint Helena </Countryname>
+<Capital>Jamestown</Capital>
+<Flagdescription>blue with the flag of the UK in the upper hoist-side quadrant and the Saint Helenian shield centered on the outer half of the flag; the shield features a rocky coastline and three-masted sailing ship</Flagdescription>
+<GDP>purchasing power parity - $13.9 million (FY94/95 est.)</GDP>
+<Industries>construction, crafts (furniture, lacework, fancy woodwork), fishing</Industries>
+<Exports>$704,000 (f.o.b., 1995)</Exports>
+<Imports>$14.434 million (c.i.f., 1995)</Imports>
+<Currency>1 Saint Helenian pound = 100 pence</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Europe, eastern Alps bordering the Adriatic Sea, between Austria and Croatia</Location>
+<Geographiccoordinates>46 00 N, 15 00 E</Geographiccoordinates>
+<Area>20253</Area>
+<Climate>Mediterranean climate on the coast, continental climate with mild to hot summers and cold winters in the plateaus and valleys to the east</Climate>
+<Naturalresources>lignite coal, lead, zinc, mercury, uranium, silver, hydropower</Naturalresources>
+<Population>1927593</Population>
+<Populationgrowthrate>0.12% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.57 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 70.8% (including Uniate 2%), Lutheran 1%, Muslim 1%, atheist 4.3%, other 22.9%</Religions>
+<Countryname>Slovenia </Countryname>
+<Capital>Ljubljana</Capital>
+<Flagdescription>three equal horizontal bands of white (top), blue, and red, with the Slovenian seal (a shield with the image of Triglav, Slovenia's highest peak, in white against a blue background at the center; beneath it are two wavy blue lines depicting seas and rivers, and above it are three six-pointed stars arranged in an inverted triangle which are taken from the coat of arms of the Counts of Celje, the great Slovene dynastic house of the late 14th and early 15th centuries); the seal is located in the upper hoist side of the flag centered in the white and blue bands</Flagdescription>
+<GDP>purchasing power parity - $21.4 billion (1999 est.)</GDP>
+<Industries>ferrous metallurgy and rolling mill products, aluminum reduction and rolled products, lead and zinc smelting, electronics (including military electronics), trucks, electric power equipment, wood products, textiles, chemicals, machine tools</Industries>
+<Exports>$8.4 billion (f.o.b., 1999)</Exports>
+<Imports>$9.7 billion (f.o.b., 1999)</Imports>
+<Currency>1 tolar (SlT) = 100 stotins</Currency>
+<Airports>14 (1999 est.)</Airports>
+<Illicitdrugs>minor transit point for Southwest Asian heroin bound for Western Europe, and for precursor chemicals</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, bordering the North Atlantic Ocean, between Guinea and Liberia</Location>
+<Geographiccoordinates>8 30 N, 11 30 W</Geographiccoordinates>
+<Area>71740</Area>
+<Climate>tropical; hot, humid; summer rainy season (May to December); winter dry season (December to April)</Climate>
+<Naturalresources>diamonds, titanium ore, bauxite, iron ore, gold, chromite</Naturalresources>
+<Population>5232624</Population>
+<Populationgrowthrate>3.67% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 0.96 male(s)/female
+15-64 years: 0.92 male(s)/female
+65 years and over: 1 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 60%, indigenous beliefs 30%, Christian 10%</Religions>
+<Countryname>Sierra Leone </Countryname>
+<Capital>Freetown</Capital>
+<Flagdescription>three equal horizontal bands of light green (top), white, and light blue</Flagdescription>
+<GDP>purchasing power parity - $2.5 billion (1999 est.)</GDP>
+<Industries>mining (diamonds); small-scale manufacturing (beverages, textiles, cigarettes, footwear); petroleum refining</Industries>
+<Exports>$41 million (f.o.b., 1998)</Exports>
+<Imports>$166 million (f.o.b., 1998)</Imports>
+<Currency>1 leone (Le) = 100 cents</Currency>
+<Airports>10 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Europe, an enclave in central Italy</Location>
+<Geographiccoordinates>43 46 N, 12 25 E</Geographiccoordinates>
+<Area>60</Area>
+<Climate>Mediterranean; mild to cool winters; warm, sunny summers</Climate>
+<Naturalresources>building stone</Naturalresources>
+<Population>26937</Population>
+<Populationgrowthrate>1.49% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.75 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic</Religions>
+<Countryname>San Marino </Countryname>
+<Capital>San Marino</Capital>
+<Flagdescription>two equal horizontal bands of white (top) and light blue with the national coat of arms superimposed in the center; the coat of arms has a shield (featuring three towers on three peaks) flanked by a wreath, below a crown and above a scroll bearing the word LIBERTAS (Liberty)</Flagdescription>
+<GDP>purchasing power parity - $500 million (1997 est.)</GDP>
+<Industries>tourism, banking, textiles, electronics, ceramics, cement, wine</Industries>
+<Exports>trade data are included with the statistics for Italy</Exports>
+<Imports>trade data are included with the statistics for Italy</Imports>
+<Currency>1 Italian lira (Lit) = 100 centesimi; note - also mints its own coins</Currency>
+<Airports>none</Airports>
+</record>
+<record>
+<Location>Southeastern Asia, islands between Malaysia and Indonesia</Location>
+<Geographiccoordinates>1 22 N, 103 48 E</Geographiccoordinates>
+<Area>647</Area>
+<Climate>tropical; hot, humid, rainy; no pronounced rainy or dry seasons; thunderstorms occur on 40% of all days (67% of days in April)</Climate>
+<Naturalresources>fish, deepwater ports</Naturalresources>
+<Population>4151264</Population>
+<Populationgrowthrate>3.54% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.08 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.78 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Buddhist (Chinese), Muslim (Malays), Christian, Hindu, Sikh, Taoist, Confucianist</Religions>
+<Countryname>Singapore </Countryname>
+<Capital>Singapore</Capital>
+<Flagdescription>two equal horizontal bands of red (top) and white; near the hoist side of the red band, there is a vertical, white crescent (closed portion is toward the hoist side) partially enclosing five white five-pointed stars arranged in a circle</Flagdescription>
+<GDP>purchasing power parity - $98 billion (1999 est.)</GDP>
+<Industries>electronics, financial services, oil drilling equipment, petroleum refining, rubber processing and rubber products, processed food and beverages, ship repair, entrepot trade, biotechnology</Industries>
+<Exports>$114 billion (1999)</Exports>
+<Imports>$111 billion (1999)</Imports>
+<Currency>1 Singapore dollar (S$) = 100 cents</Currency>
+<Airports>9 (1999 est.)</Airports>
+<Illicitdrugs>transit point for Golden Triangle heroin going to North America, Western Europe, and the Third World; also a money-laundering center</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Africa, bordering the Gulf of Aden and the Indian Ocean, east of Ethiopia</Location>
+<Geographiccoordinates>10 00 N, 49 00 E</Geographiccoordinates>
+<Area>637657</Area>
+<Climate>principally desert; December to February - northeast monsoon, moderate temperatures in north and very hot in south; May to October - southwest monsoon, torrid in the north and hot in the south, irregular rainfall, hot and humid periods (tangambili) between monsoons</Climate>
+<Naturalresources>uranium and largely unexploited reserves of iron ore, tin, gypsum, bauxite, copper, salt</Naturalresources>
+<Population>7253137</Population>
+<Populationgrowthrate>2.9% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 1.01 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim</Religions>
+<Countryname>Somalia </Countryname>
+<Capital>Mogadishu</Capital>
+<Flagdescription>light blue with a large white five-pointed star in the center; design based on the flag of the UN (Italian Somaliland was a UN trust territory)</Flagdescription>
+<GDP>purchasing power parity - $4.3 billion (1999 est.)</GDP>
+<Industries>a few small industries, including sugar refining, textiles, petroleum refining (mostly shut down)</Industries>
+<Exports>$187 million (f.o.b., 1998 est.)</Exports>
+<Imports>$327 million (f.o.b., 1998 est.)</Imports>
+<Currency>1 Somali shilling (So. Sh.) = 100 cents</Currency>
+<Airports>61 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southwestern Europe, bordering the Bay of Biscay, Mediterranean Sea, North Atlantic Ocean, and Pyrenees Mountains, southwest of France</Location>
+<Geographiccoordinates>40 00 N, 4 00 W</Geographiccoordinates>
+<Area>504782</Area>
+<Climate>temperate; clear, hot summers in interior, more moderate and cloudy along coast; cloudy, cold winters in interior, partly cloudy and cool along coast</Climate>
+<Naturalresources>coal, lignite, iron ore, uranium, mercury, pyrites, fluorspar, gypsum, zinc, lead, tungsten, copper, kaolin, potash, hydropower, arable land</Naturalresources>
+<Population>39996671</Population>
+<Populationgrowthrate>0.11% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.07 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.72 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 99%, other 1%</Religions>
+<Countryname>Spain </Countryname>
+<Capital>Madrid</Capital>
+<Flagdescription>three horizontal bands of red (top), yellow (double width), and red with the national coat of arms on the hoist side of the yellow band; the coat of arms includes the royal seal framed by the Pillars of Hercules, which are the two promontories (Gibraltar and Ceuta) on either side of the eastern end of the Strait of Gibraltar</Flagdescription>
+<GDP>purchasing power parity - $677.5 billion (1999 est.)</GDP>
+<Industries>textiles and apparel (including footwear), food and beverages, metals and metal manufactures, chemicals, shipbuilding, automobiles, machine tools, tourism</Industries>
+<Exports>$112.3 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$137.5 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 peseta (Pta) = 100 centimos</Currency>
+<Airports>105 (1999 est.)</Airports>
+<Illicitdrugs>key European gateway country for Latin American cocaine and North African hashish entering the European market; transshipment point for and consumer of Southwest Asian heroin</Illicitdrugs>
+</record>
+<record>
+<Location>Southeastern Europe, bordering the Adriatic Sea, between Albania and Bosnia and Herzegovina</Location>
+<Geographiccoordinates>44 00 N, 21 00 E</Geographiccoordinates>
+<Area>102350</Area>
+<Climate>in the north, continental climate (cold winters and hot, humid summers with well distributed rainfall); central portion, continental and Mediterranean climate; to the south, Adriatic climate along the coast, hot, dry summers and autumns and relatively cold winters with heavy snowfall inland</Climate>
+<Naturalresources>oil, gas, coal, antimony, copper, lead, zinc, nickel, gold, pyrite, chrome, hydro power</Naturalresources>
+<Population>10662087</Population>
+<Populationgrowthrate>Serbia - 0.739%; Montenegro - -12.22% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: Serbia - 1.08 male(s)/female; Montenegro - 1.09 male(s)/female
+under 15 years: Serbia - 1.07 male(s)/female; Montenegro - 1.07 male(s)/female
+15-64 years: Serbia - 0.96 male(s)/female; Montenegro - 0.97 male(s)/female
+65 years and over: Serbia - 0.76 male(s)/female; Montenegro - 0.68 male(s)/female
+total population: Serbia - 0.95 male(s)/female; Montenegro - 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Orthodox 65%, Muslim 19%, Roman Catholic 4%, Protestant 1%, other 11%</Religions>
+<Countryname>Serbia and Montenegro </Countryname>
+<Capital>Belgrade (Serbia), Podgorica (Montenegro)</Capital>
+<GDP>purchasing power parity - $20.6 billion (1999 est.)</GDP>
+<Industries>machine building (aircraft, trucks, and automobiles; tanks and weapons; electrical equipment; agricultural machinery); metallurgy (steel, aluminum, copper, lead, zinc, chromium, antimony, bismuth, cadmium); mining (coal, bauxite, nonferrous ore, iron ore, limestone); consumer goods (textiles, footwear, foodstuffs, appliances); electronics, petroleum products, chemicals, and pharmaceuticals</Industries>
+<Exports>$1.5 billion (1999)</Exports>
+<Imports>$3.3 billion (1999)</Imports>
+<Currency>1 Yugoslav New Dinar (YD) = 100 paras; Montenegro made the German deutsche mark (1 deutsche mark (DM) = 100 pfennige) legal tender alongside the Yugoslav dinar (1999)</Currency>
+<Airports>48 (Serbia 43, Montenegro 5) (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for Southwest Asian heroin moving to Western Europe on the Balkan route</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, island between the Caribbean Sea and North Atlantic Ocean, north of Trinidad and Tobago</Location>
+<Geographiccoordinates>13 53 N, 60 68 W</Geographiccoordinates>
+<Area>620</Area>
+<Climate>tropical, moderated by northeast trade winds; dry season from January to April, rainy season from May to August</Climate>
+<Naturalresources>forests, sandy beaches, minerals (pumice), mineral springs, geothermal potential</Naturalresources>
+<Population>156260</Population>
+<Populationgrowthrate>1.21% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.07 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.96 male(s)/female
+65 years and over: 0.6 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 90%, Protestant 7%, Anglican 3%</Religions>
+<Countryname>Saint Lucia </Countryname>
+<Capital>Castries</Capital>
+<Flagdescription>blue, with a gold isosceles triangle below a black arrowhead; the upper edges of the arrowhead have a white border</Flagdescription>
+<GDP>purchasing power parity - $656 million (1998 est.)</GDP>
+<Industries>clothing, assembly of electronic components, beverages, corrugated cardboard boxes, tourism, lime processing, coconut processing</Industries>
+<Exports>$75 million (1998)</Exports>
+<Imports>$290 million (1998)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>2 (1999 est.)</Airports>
+<Illicitdrugs>transit point for South American drugs destined for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Northern Africa, bordering the Red Sea, between Egypt and Eritrea</Location>
+<Geographiccoordinates>15 00 N, 30 00 E</Geographiccoordinates>
+<Area>2505810</Area>
+<Climate>tropical in south; arid desert in north; rainy season (April to October)</Climate>
+<Naturalresources>petroleum; small reserves of iron ore, copper, chromium ore, zinc, tungsten, mica, silver, gold, hydropower</Naturalresources>
+<Population>35079814</Population>
+<Populationgrowthrate>2.84% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 1.33 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim 70% (in north), indigenous beliefs 25%, Christian 5% (mostly in south and Khartoum)</Religions>
+<Countryname>Sudan </Countryname>
+<Capital>Khartoum</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and black with a green isosceles triangle based on the hoist side</Flagdescription>
+<GDP>purchasing power parity - $32.6 billion (1999 est.)</GDP>
+<Industries>cotton ginning, textiles, cement, edible oils, sugar, soap distilling, shoes, petroleum refining</Industries>
+<Exports>$580 million (f.o.b., 1999 est.)</Exports>
+<Imports>$1.4 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 Sudanese dinar (SD) = 100 piastres; note - in July 1999 the Sudanese Central Bank made the formal declaration that all dealings with the Sudanese pound should stop</Currency>
+<Airports>61 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Europe, islands between the Arctic Ocean, Barents Sea, Greenland Sea, and Norwegian Sea, north of Norway</Location>
+<Geographiccoordinates>78 00 N, 20 00 E</Geographiccoordinates>
+<Area>62049</Area>
+<Climate>arctic, tempered by warm North Atlantic Current; cool summers, cold winters; North Atlantic Current flows along west and north coasts of Spitsbergen, keeping water open and navigable most of the year</Climate>
+<Naturalresources>coal, copper, iron ore, phosphate, zinc, wildlife, fish</Naturalresources>
+<Population>2416</Population>
+<Populationgrowthrate>-3.55% (2000 est.)</Populationgrowthrate>
+<Countryname>Svalbard (sometimes referred to as Spitzbergen) </Countryname>
+<Capital>Longyearbyen</Capital>
+<Flagdescription>the flag of Norway is used</Flagdescription>
+<GDP>$NA</GDP>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 Norwegian krone (NKr) = 100 oere</Currency>
+<Airports>4 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Europe, bordering the Baltic Sea, Gulf of Bothnia, Kattegat, and Skagerrak, between Finland and Norway</Location>
+<Geographiccoordinates>62 00 N, 15 00 E</Geographiccoordinates>
+<Area>449964</Area>
+<Climate>temperate in south with cold, cloudy winters and cool, partly cloudy summers; subarctic in north</Climate>
+<Naturalresources>zinc, iron ore, lead, copper, silver, timber, uranium, hydropower</Naturalresources>
+<Population>8873052</Population>
+<Populationgrowthrate>0.02% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.73 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Lutheran 87%, Roman Catholic, Orthodox, Baptist, Muslim, Jewish, Buddhist</Religions>
+<Countryname>Sweden </Countryname>
+<Capital>Stockholm</Capital>
+<Flagdescription>blue with a yellow cross that extends to the edges of the flag; the vertical part of the cross is shifted to the hoist side in the style of the Dannebrog (Danish flag)</Flagdescription>
+<GDP>purchasing power parity - $184 billion (1999 est.)</GDP>
+<Industries>iron and steel, precision equipment (bearings, radio and telephone parts, armaments), wood pulp and paper products, processed foods, motor vehicles</Industries>
+<Exports>$85.7 billion (f.o.b., 1999)</Exports>
+<Imports>$67.9 billion (f.o.b., 1999)</Imports>
+<Currency>1 Swedish krona (SKr) = 100 oere</Currency>
+<Airports>256 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern South America, islands in the South Atlantic Ocean, east of the tip of South America</Location>
+<Geographiccoordinates>54 30 S, 37 00 W</Geographiccoordinates>
+<Area>4066</Area>
+<Climate>variable, with mostly westerly winds throughout the year interspersed with periods of calm; nearly all precipitation falls as snow</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population></Population>
+<Countryname>South Georgia and the South Sandwich Islands </Countryname>
+<Capital>none; Grytviken on South Georgia is the garrison town</Capital>
+<Flagdescription>the flag of the UK is used</Flagdescription>
+<Airports>none</Airports>
+</record>
+<record>
+<Location>Middle East, bordering the Mediterranean Sea, between Lebanon and Turkey</Location>
+<Geographiccoordinates>35 00 N, 38 00 E</Geographiccoordinates>
+<Area>185180</Area>
+<Climate>mostly desert; hot, dry, sunny summers (June to August) and mild, rainy winters (December to February) along coast; cold weather with snow or sleet periodically hitting Damascus</Climate>
+<Naturalresources>petroleum, phosphates, chrome and manganese ores, asphalt, iron ore, rock salt, marble, gypsum, hydropower</Naturalresources>
+<Population>16305659</Population>
+<Populationgrowthrate>2.58% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 0.96 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim 74%, Alawite, Druze, and other Muslim sects 16%, Christian (various sects) 10%, Jewish (tiny communities in Damascus, Al Qamishli, and Aleppo)</Religions>
+<Countryname>Syria </Countryname>
+<Capital>Damascus</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and black, with two small green five-pointed stars in a horizontal line centered in the white band; similar to the flag of Yemen, which has a plain white band, and of Iraq, which has three green stars (plus an Arabic inscription) in a horizontal line centered in the white band; also similar to the flag of Egypt, which has a heraldic eagle centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $42.2 billion (1999 est.)</GDP>
+<Industries>petroleum, textiles, food processing, beverages, tobacco, phosphate rock mining</Industries>
+<Exports>$3.3 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$3.2 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Syrian pound = 100 piastres</Currency>
+<Airports>104 (1999 est.)</Airports>
+<Illicitdrugs>a transit point for opiates and hashish bound for regional and Western markets</Illicitdrugs>
+</record>
+<record>
+<Location>Central Europe, east of France, north of Italy</Location>
+<Geographiccoordinates>47 00 N, 8 00 E</Geographiccoordinates>
+<Area>41290</Area>
+<Climate>temperate, but varies with altitude; cold, cloudy, rainy/snowy winters; cool to warm, cloudy, humid summers with occasional showers</Climate>
+<Naturalresources>hydropower potential, timber, salt</Naturalresources>
+<Population>7262372</Population>
+<Populationgrowthrate>0.3% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.68 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 46.1%, Protestant 40%, other 5%, none 8.9% (1990)</Religions>
+<Countryname>Switzerland </Countryname>
+<Capital>Bern</Capital>
+<Flagdescription>red square with a bold, equilateral white cross in the center that does not extend to the edges of the flag</Flagdescription>
+<GDP>purchasing power parity - $197 billion (1999 est.)</GDP>
+<Industries>machinery, chemicals, watches, textiles, precision instruments</Industries>
+<Exports>$98.5 billion (f.o.b., 1999)</Exports>
+<Imports>$99 billion (f.o.b., 1999)</Imports>
+<Currency>1 Swiss franc, franken, or franco (SFR) = 100 centimes, rappen, or centesimi</Currency>
+<Airports>67 (1999 est.)</Airports>
+<Illicitdrugs>because of more stringent government regulations, used significantly less as a money-laundering center; transit country for and consumer of South American cocaine and Southwest Asian heroin</Illicitdrugs>
+</record>
+<record>
+<Location>Middle East, bordering the Gulf of Oman and the Persian Gulf, between Oman and Saudi Arabia</Location>
+<Geographiccoordinates>24 00 N, 54 00 E</Geographiccoordinates>
+<Area>82880</Area>
+<Climate>desert; cooler in eastern mountains</Climate>
+<Naturalresources>petroleum, natural gas</Naturalresources>
+<Population>2369153</Population>
+<Populationgrowthrate>1.61% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.77 male(s)/female
+65 years and over: 2.26 male(s)/female
+total population: 1.51 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 96% (Shi'a 16%), Christian, Hindu, and other 4%</Religions>
+<Countryname>United Arab Emirates </Countryname>
+<Capital>Abu Dhabi</Capital>
+<Flagdescription>three equal horizontal bands of green (top), white, and black with a thicker vertical red band on the hoist side</Flagdescription>
+<GDP>purchasing power parity - $41.5 billion (1999 est.)</GDP>
+<Industries>petroleum, fishing, petrochemicals, construction materials, some boat building, handicrafts, pearling</Industries>
+<Exports>$34 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$27.5 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Emirian dirham (Dh) = 100 fils</Currency>
+<Airports>40 (1999 est.)</Airports>
+<Illicitdrugs>growing role as heroin transshipment and money-laundering center due to its proximity to southwest Asian producing countries and the bustling free trade zone in Dubai</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, islands between the Caribbean Sea and the North Atlantic Ocean, northeast of Venezuela</Location>
+<Geographiccoordinates>11 00 N, 61 00 W</Geographiccoordinates>
+<Area>5128</Area>
+<Climate>tropical; rainy season (June to December)</Climate>
+<Naturalresources>petroleum, natural gas, asphalt</Naturalresources>
+<Population>1175523</Population>
+<Populationgrowthrate>-0.49% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 0.8 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 29.4%, Hindu 23.8%, Anglican 10.9%, Muslim 5.8%, Presbyterian 3.4%, other 26.7%</Religions>
+<Countryname>Trinidad and Tobago </Countryname>
+<Capital>Port-of-Spain</Capital>
+<Flagdescription>red with a white-edged black diagonal band from the upper hoist side</Flagdescription>
+<GDP>purchasing power parity - $9.41 billion (1999 est.)</GDP>
+<Industries>petroleum, chemicals, tourism, food processing, cement, beverage, cotton textiles</Industries>
+<Exports>$2.4 billion (f.o.b., 1998)</Exports>
+<Imports>$3 billion (c.i.f., 1998)</Imports>
+<Currency>1 Trinidad and Tobago dollar (TT$) = 100 cents</Currency>
+<Airports>6 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for South American drugs destined for the US and Europe; producer of cannabis</Illicitdrugs>
+</record>
+<record>
+<Location>Southern Africa, island in the Indian Ocean, east of Madagascar</Location>
+<Geographiccoordinates>15 52 S, 54 25 E</Geographiccoordinates>
+<Area>1</Area>
+<Climate>tropical</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population></Population>
+<Countryname>Tromelin Island </Countryname>
+<Flagdescription>the flag of France is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Asia, bordering the Andaman Sea and the Gulf of Thailand, southeast of Burma</Location>
+<Geographiccoordinates>15 00 N, 100 00 E</Geographiccoordinates>
+<Area>514000</Area>
+<Climate>tropical; rainy, warm, cloudy southwest monsoon (mid-May to September); dry, cool northeast monsoon (November to mid-March); southern isthmus always hot and humid</Climate>
+<Naturalresources>tin, rubber, natural gas, tungsten, tantalum, timber, lead, fish, gypsum, lignite, fluorite, arable land</Naturalresources>
+<Population>61230874</Population>
+<Populationgrowthrate>0.93% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.79 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Buddhism 95%, Muslim 3.8%, Christianity 0.5%, Hinduism 0.1%, other 0.6% (1991)</Religions>
+<Countryname>Thailand </Countryname>
+<Capital>Bangkok</Capital>
+<Flagdescription>five horizontal bands of red (top), white, blue (double width), white, and red</Flagdescription>
+<GDP>purchasing power parity - $388.7 billion (1999 est.)</GDP>
+<Industries>tourism; textiles and garments, agricultural processing, beverages, tobacco, cement, light manufacturing, such as jewelry; electric appliances and components, computers and parts, integrated circuits, furniture, plastics; world's second-largest tungsten producer and third-largest tin producer</Industries>
+<Exports>$58.5 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$45 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 baht (B) = 100 satang</Currency>
+<Airports>106 (1999 est.)</Airports>
+<Illicitdrugs>a minor producer of opium, heroin, and marijuana; major illicit transit point for heroin en route to the international drug market from Burma and Laos; eradication efforts have reduced the area of cannabis cultivation and shifted some production to neighboring countries; opium poppy cultivation has been reduced by eradication efforts; also a drug money-laundering center; minor role in amphetamine production for regional consumption; increasing indigenous abuse of methamphetamines and heroin</Illicitdrugs>
+</record>
+<record>
+<Location>Central Asia, west of China</Location>
+<Geographiccoordinates>39 00 N, 71 00 E</Geographiccoordinates>
+<Area>143100</Area>
+<Climate>midlatitude continental, hot summers, mild winters; semiarid to polar in Pamir Mountains</Climate>
+<Naturalresources>hydropower, some petroleum, uranium, mercury, brown coal, lead, zinc, antimony, tungsten</Naturalresources>
+<Population>6440732</Population>
+<Populationgrowthrate>2.12% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Sunni Muslim 80%, Shi'a Muslim 5%</Religions>
+<Countryname>Tajikistan </Countryname>
+<Capital>Dushanbe</Capital>
+<Flagdescription>three horizontal stripes of red (top), a wider stripe of white, and green; a gold crown surmounted by seven gold, five-pointed stars is located in the center of the white stripe</Flagdescription>
+<GDP>purchasing power parity - $6.2 billion (1999 est.)</GDP>
+<Industries>aluminum, zinc, lead, chemicals and fertilizers, cement, vegetable oil, metal-cutting machine tools, refrigerators and freezers</Industries>
+<Exports>$634 million (1999 est.)</Exports>
+<Imports>$770 million (1999 est.)</Imports>
+<Currency>Tajikistani ruble (TJR) = 100 tanga</Currency>
+<Airports>59 (1994 est.)</Airports>
+<Illicitdrugs>limited illicit cultivation of cannabis, mostly for domestic consumption; opium poppy cultivation negligible in 1998 because of government eradication program; major transshipment point for illicit drugs from Southwest Asia to Russia and Western Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, two island groups in the North Atlantic Ocean, southeast of The Bahamas</Location>
+<Geographiccoordinates>21 45 N, 71 35 W</Geographiccoordinates>
+<Area>430</Area>
+<Climate>tropical; marine; moderated by trade winds; sunny and relatively dry</Climate>
+<Naturalresources>spiny lobster, conch</Naturalresources>
+<Population>17502</Population>
+<Populationgrowthrate>3.55% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.11 male(s)/female
+65 years and over: 0.81 male(s)/female
+total population: 1.07 male(s)/female (2000 est.)</Sexratio>
+<Religions>Baptist 41.2%, Methodist 18.9%, Anglican 18.3%, Seventh-Day Adventist 1.7%, other 19.9% (1980)</Religions>
+<Countryname>Turks and Caicos Islands </Countryname>
+<Capital>Cockburn Town (on Grand Turk)</Capital>
+<Flagdescription>blue, with the flag of the UK in the upper hoist-side quadrant and the colonial shield centered on the outer half of the flag; the shield is yellow and contains a conch shell, lobster, and cactus</Flagdescription>
+<GDP>purchasing power parity - $117 million (1997 est.)</GDP>
+<Industries>tourism, offshore financial services</Industries>
+<Exports>$4.7 million (1993)</Exports>
+<Imports>$46.6 million (1993)</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>7 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for South American narcotics destined for the US</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, group of three islands in the South Pacific Ocean, about one-half of the way from Hawaii to New Zealand</Location>
+<Geographiccoordinates>9 00 S, 172 00 W</Geographiccoordinates>
+<Area>10</Area>
+<Climate>tropical; moderated by trade winds (April to November)</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>1458</Population>
+<Populationgrowthrate>-0.89% (2000 est.)</Populationgrowthrate>
+<Religions>Congregational Christian Church 70%, Roman Catholic 28%, other 2%
+note: on Atafu, all Congregational Christian Church of Samoa; on Nukunonu, all Roman Catholic; on Fakaofo, both denominations, with the Congregational Christian Church predominant</Religions>
+<Countryname>Tokelau </Countryname>
+<Capital>none; each atoll has its own administrative center</Capital>
+<Flagdescription>the flag of New Zealand is used</Flagdescription>
+<GDP>purchasing power parity - $1.5 million (1993 est.)</GDP>
+<Industries>small-scale enterprises for copra production, wood work, plaited craft goods; stamps, coins; fishing</Industries>
+<Exports>$98,000 (f.o.b., 1983)</Exports>
+<Imports>$323,400 (c.i.f., 1983)</Imports>
+<Currency>1 New Zealand dollar (NZ$) = 100 cents</Currency>
+<Airports>none; lagoon landings by amphibious aircraft from Samoa</Airports>
+</record>
+<record>
+<Location>Oceania, archipelago in the South Pacific Ocean, about two-thirds of the way from Hawaii to New Zealand</Location>
+<Geographiccoordinates>20 00 S, 175 00 W</Geographiccoordinates>
+<Area>748</Area>
+<Climate>tropical; modified by trade winds; warm season (December to May), cool season (May to December)</Climate>
+<Naturalresources>fish, fertile soil</Naturalresources>
+<Population>102321</Population>
+<Populationgrowthrate>1.91% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.83 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian (Free Wesleyan Church claims over 30,000 adherents)</Religions>
+<Countryname>Tonga </Countryname>
+<Capital>Nuku'alofa</Capital>
+<Flagdescription>red with a bold red cross on a white rectangle in the upper hoist-side corner</Flagdescription>
+<GDP>purchasing power parity - $238 million (1998 est.)</GDP>
+<Industries>tourism, fishing</Industries>
+<Exports>$8 million (f.o.b., 1998)</Exports>
+<Imports>$69 million (f.o.b., 1998)</Imports>
+<Currency>1 pa'anga (T$) = 100 seniti</Currency>
+<Airports>6 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Africa, bordering the Bight of Benin, between Benin and Ghana</Location>
+<Geographiccoordinates>8 00 N, 1 10 E</Geographiccoordinates>
+<Area>56785</Area>
+<Climate>tropical; hot, humid in south; semiarid in north</Climate>
+<Naturalresources>phosphates, limestone, marble, arable land</Naturalresources>
+<Population>5018502</Population>
+<Populationgrowthrate>2.7% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.78 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 70%, Christian 20%, Muslim 10%</Religions>
+<Countryname>Togo </Countryname>
+<Capital>Lome</Capital>
+<Flagdescription>five equal horizontal bands of green (top and bottom) alternating with yellow; there is a white five-pointed star on a red square in the upper hoist-side corner; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $8.6 billion (1999 est.)</GDP>
+<Industries>phosphate mining, agricultural processing, cement; handicrafts, textiles, beverages</Industries>
+<Exports>$400 million (f.o.b., 1999)</Exports>
+<Imports>$450 million (f.o.b., 1999)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>9 (1999 est.)</Airports>
+<Illicitdrugs>transit hub for Nigerian heroin and cocaine traffickers</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, islands in the Gulf of Guinea, straddling the Equator, west of Gabon</Location>
+<Geographiccoordinates>1 00 N, 7 00 E</Geographiccoordinates>
+<Area>1001</Area>
+<Climate>tropical; hot, humid; one rainy season (October to May)</Climate>
+<Naturalresources>fish, hydropower</Naturalresources>
+<Population>159883</Population>
+<Populationgrowthrate>3.16% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 80% (Roman Catholic, Evangelical Protestant, Seventh-Day Adventist)</Religions>
+<Countryname>Sao Tome and Principe </Countryname>
+<Capital>Sao Tome</Capital>
+<Flagdescription>three horizontal bands of green (top), yellow (double width), and green with two black five-pointed stars placed side by side in the center of the yellow band and a red isosceles triangle based on the hoist side; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $169 million (1999 est.)</GDP>
+<Industries>light construction, textiles, soap, beer; fish processing; timber</Industries>
+<Exports>$4.9 million (f.o.b., 1999 est.)</Exports>
+<Imports>$19.5 million (f.o.b., 1999 est.)</Imports>
+<Currency>1 dobra (Db) = 100 centimos</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Africa, bordering the Mediterranean Sea, between Algeria and Libya</Location>
+<Geographiccoordinates>34 00 N, 9 00 E</Geographiccoordinates>
+<Area>163610</Area>
+<Climate>temperate in north with mild, rainy winters and hot, dry summers; desert in south</Climate>
+<Naturalresources>petroleum, phosphates, iron ore, lead, zinc, salt, arable land</Naturalresources>
+<Population>9593402</Population>
+<Populationgrowthrate>1.17% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.08 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 1.01 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 98%, Christian 1%, Jewish and other 1%</Religions>
+<Countryname>Tunisia </Countryname>
+<Capital>Tunis</Capital>
+<Flagdescription>red with a white disk in the center bearing a red crescent nearly encircling a red five-pointed star; the crescent and star are traditional symbols of Islam</Flagdescription>
+<GDP>purchasing power parity - $52.6 billion (1999 est.)</GDP>
+<Industries>petroleum, mining (particularly phosphate and iron ore), tourism, textiles, footwear, food, beverages</Industries>
+<Exports>$5.8 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$8.3 billion (c.i.f., 1999 est.)</Imports>
+<Currency>1 Tunisian dinar (TD) = 1,000 millimes</Currency>
+<Airports>32 (1999 est.)</Airports>
+</record>
+<record>
+<Geographiccoordinates>39 00 N, 35 00 E</Geographiccoordinates>
+<Area>780580</Area>
+<Climate>temperate; hot, dry summers with mild, wet winters; harsher in interior</Climate>
+<Naturalresources>antimony, coal, chromium, mercury, copper, borate, sulfur, iron ore, arable land, hydropower</Naturalresources>
+<Population>65666677</Population>
+<Populationgrowthrate>1.27% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 0.85 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 99.8% (mostly Sunni), other 0.2% (Christian and Jews)</Religions>
+<Countryname>Turkey </Countryname>
+<Capital>Ankara</Capital>
+<Flagdescription>red with a vertical white crescent (the closed portion is toward the hoist side) and white five-pointed star centered just outside the crescent opening</Flagdescription>
+<GDP>purchasing power parity - $409.4 billion (1999 est.)</GDP>
+<Industries>textiles, food processing, autos, mining (coal, chromite, copper, boron), steel, petroleum, construction, lumber, paper</Industries>
+<Exports>$26 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$40 billion (c.i.f., 1999 est.)</Imports>
+<Currency>Turkish lira (TL) = 100 kurus (theoretical)</Currency>
+<Airports>118 (1999 est.)</Airports>
+<Illicitdrugs>key transit route for Southwest Asian heroin to Western Europe and - to a far lesser extent the US - via air, land, and sea routes; major Turkish, Iranian, and other international trafficking organizations operate out of Istanbul; laboratories to convert imported morphine base into heroin are in remote regions of Turkey as well as near Istanbul; government maintains strict controls over areas of legal opium poppy cultivation and output of poppy straw concentrate</Illicitdrugs>
+</record>
+<record>
+<Location>Oceania, island group consisting of nine coral atolls in the South Pacific Ocean, about one-half of the way from Hawaii to Australia</Location>
+<Geographiccoordinates>8 00 S, 178 00 E</Geographiccoordinates>
+<Area>26</Area>
+<Climate>tropical; moderated by easterly trade winds (March to November); westerly gales and heavy rain (November to March)</Climate>
+<Naturalresources>fish</Naturalresources>
+<Population>10838</Population>
+<Populationgrowthrate>1.41% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.91 male(s)/female
+65 years and over: 0.75 male(s)/female
+total population: 0.94 male(s)/female (2000 est.)</Sexratio>
+<Religions>Church of Tuvalu (Congregationalist) 97%, Seventh-Day Adventist 1.4%, Baha'i 1%, other 0.6%</Religions>
+<Countryname>Tuvalu </Countryname>
+<Capital>Funafuti</Capital>
+<Flagdescription>light blue with the flag of the UK in the upper hoist-side quadrant; the outer half of the flag represents a map of the country with nine yellow five-pointed stars symbolizing the nine islands</Flagdescription>
+<GDP>purchasing power parity - $7.8 million (1995 est.)</GDP>
+<Industries>fishing, tourism, copra</Industries>
+<Exports>$165,000 (f.o.b., 1989)</Exports>
+<Imports>$4.4 million (c.i.f., 1989)</Imports>
+<Currency>1 Tuvaluan dollar ($T) or 1 Australian dollar ($A) = 100 cents</Currency>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Eastern Asia, islands bordering the East China Sea, Philippine Sea, South China Sea, and Taiwan Strait, north of the Philippines, off the southeastern coast of China</Location>
+<Geographiccoordinates>23 30 N, 121 00 E</Geographiccoordinates>
+<Area>35980</Area>
+<Climate>tropical; marine; rainy season during southwest monsoon (June to August); cloudiness is persistent and extensive all year</Climate>
+<Naturalresources>small deposits of coal, natural gas, limestone, marble, and asbestos</Naturalresources>
+<Population>22191087</Population>
+<Populationgrowthrate>0.81% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.08 male(s)/female
+under 15 years: 1.08 male(s)/female
+15-64 years: 1.03 male(s)/female
+65 years and over: 1.12 male(s)/female
+total population: 1.05 male(s)/female (2000 est.)</Sexratio>
+<Religions>mixture of Buddhist, Confucian, and Taoist 93%, Christian 4.5%, other 2.5%</Religions>
+<Countryname>Taiwan </Countryname>
+<Capital>Taipei</Capital>
+<Flagdescription>red with a dark blue rectangle in the upper hoist-side corner bearing a white sun with 12 triangular rays</Flagdescription>
+<GDP>purchasing power parity - $357 billion (1999 est.)</GDP>
+<Industries>electronics, petroleum refining, chemicals, textiles, iron and steel, machinery, cement, food processing</Industries>
+<Exports>$121.6 billion (f.o.b., 1999)</Exports>
+<Imports>$101.7 billion (c.i.f., 1999)</Imports>
+<Currency>1 New Taiwan dollar (NT$) = 100 cents</Currency>
+<Airports>38 (1999 est.)</Airports>
+<Illicitdrugs>considered an important heroin transit point; major problem with domestic consumption of methamphetamines and heroin</Illicitdrugs>
+</record>
+<record>
+<Location>Central Asia, bordering the Caspian Sea, between Iran and Kazakhstan</Location>
+<Geographiccoordinates>40 00 N, 60 00 E</Geographiccoordinates>
+<Area>488100</Area>
+<Climate>subtropical desert</Climate>
+<Naturalresources>petroleum, natural gas, coal, sulfur, salt</Naturalresources>
+<Population>4518268</Population>
+<Populationgrowthrate>1.87% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.62 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 89%, Eastern Orthodox 9%, unknown 2%</Religions>
+<Countryname>Turkmenistan </Countryname>
+<Capital>Ashgabat</Capital>
+<Flagdescription>green field with a vertical red stripe near the hoist side, containing five carpet guls (designs used in producing rugs) stacked above two crossed olive branches similar to the olive branches on the UN flag; a white crescent moon and five white stars appear in the upper corner of the field just to the fly side of the red stripe</Flagdescription>
+<GDP>purchasing power parity - $7.7 billion (1999 est.)</GDP>
+<Industries>natural gas, oil, petroleum products, textiles, food processing</Industries>
+<Exports>$1.1 billion (1999 est.)</Exports>
+<Imports>$1.25 billion (1999 est.)</Imports>
+<Currency>1 Turkmen manat (TMM) = 100 tenesi</Currency>
+<Airports>64 (1994 est.)</Airports>
+<Illicitdrugs>limited illicit cultivator of opium poppy, mostly for domestic consumption; limited government eradication program; increasingly used as transshipment point for illicit drugs from Southwest Asia to Russia and Western Europe; also a transshipment point for acetic anhydride destined for Afghanistan</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Africa, bordering the Indian Ocean, between Kenya and Mozambique</Location>
+<Geographiccoordinates>6 00 S, 35 00 E</Geographiccoordinates>
+<Area>945087</Area>
+<Climate>varies from tropical along coast to temperate in highlands</Climate>
+<Naturalresources>hydropower, tin, phosphates, iron ore, coal, diamonds, gemstones, gold, natural gas, nickel</Naturalresources>
+<Population>35306126</Population>
+<Populationgrowthrate>2.57% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>mainland - Christian 45%, Muslim 35%, indigenous beliefs 20%; Zanzibar - more than 99% Muslim</Religions>
+<Countryname>Tanzania </Countryname>
+<Capital>Dar es Salaam
+note: some government offices have been transferred to Dodoma, which is planned as the new national capital; the National Assembly now meets there on regular basis</Capital>
+<Flagdescription>divided diagonally by a yellow-edged black band from the lower hoist-side corner; the upper triangle (hoist side) is green and the lower triangle is blue</Flagdescription>
+<GDP>purchasing power parity - $23.3 billion (1999 est.)</GDP>
+<Industries>primarily agricultural processing (sugar, beer, cigarettes, sisal twine), diamond and gold mining, oil refining, shoes, cement, textiles, wood products, fertilizer, salt</Industries>
+<Exports>$828 million (f.o.b., 1999 est.)</Exports>
+<Imports>$1.44 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Tanzanian shilling (TSh) = 100 cents</Currency>
+<Airports>129 (1999 est.)</Airports>
+<Illicitdrugs>growing role in transshipment of Southwest and Southeast Asian heroin and South American cocaine destined for European and US markets and of South Asian methaqualone bound for Southern Africa</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Africa, west of Kenya</Location>
+<Geographiccoordinates>1 00 N, 32 00 E</Geographiccoordinates>
+<Area>236040</Area>
+<Climate>tropical; generally rainy with two dry seasons (December to February, June to August); semiarid in northeast</Climate>
+<Naturalresources>copper, cobalt, hydropower, limestone, salt, arable land</Naturalresources>
+<Population>23317560</Population>
+<Populationgrowthrate>2.72% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 1 male(s)/female
+65 years and over: 0.92 male(s)/female
+total population: 1 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 33%, Protestant 33%, Muslim 16%, indigenous beliefs 18%</Religions>
+<Countryname>Uganda </Countryname>
+<Capital>Kampala</Capital>
+<Flagdescription>six equal horizontal bands of black (top), yellow, red, black, yellow, and red; a white disk is superimposed at the center and depicts a red-crested crane (the national symbol) facing the hoist side</Flagdescription>
+<GDP>purchasing power parity - $24.2 billion (1999 est.)</GDP>
+<Industries>sugar, brewing, tobacco, cotton textiles, cement</Industries>
+<Exports>$471 million (f.o.b., 1999)</Exports>
+<Imports>$1.1 billion (f.o.b., 1999)</Imports>
+<Currency>1 Ugandan shilling (USh) = 100 cents</Currency>
+<Airports>26 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Western Europe, islands including the northern one-sixth of the island of Ireland between the North Atlantic Ocean and the North Sea, northwest of France</Location>
+<Geographiccoordinates>54 00 N, 2 00 W</Geographiccoordinates>
+<Area>244820</Area>
+<Climate>temperate; moderated by prevailing southwest winds over the North Atlantic Current; more than one-half of the days are overcast</Climate>
+<Naturalresources>coal, petroleum, natural gas, tin, limestone, iron ore, salt, clay, chalk, gypsum, lead, silica, arable land</Naturalresources>
+<Population>59511464</Population>
+<Populationgrowthrate>0.25% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican 27 million, Roman Catholic 9 million, Muslim 1 million, Presbyterian 800,000, Methodist 760,000, Sikh 400,000, Hindu 350,000, Jewish 300,000 (1991 est.)</Religions>
+<Countryname>United Kingdom </Countryname>
+<Capital>London</Capital>
+<Flagdescription>blue with the red cross of Saint George (patron saint of England) edged in white superimposed on the diagonal red cross of Saint Patrick (patron saint of Ireland) and which is superimposed on the diagonal white cross of Saint Andrew (patron saint of Scotland); known as the Union Flag or Union Jack; the design and colors (especially the Blue Ensign) have been the basis for a number of other flags including other Commonwealth countries and their constituent states or provinces, as well as British overseas territories</Flagdescription>
+<GDP>purchasing power parity - $1.29 trillion (1999 est.)</GDP>
+<Industries>production machinery including machine tools, electric power equipment, automation equipment, railroad equipment, shipbuilding, aircraft, motor vehicles and parts, electronics and communications equipment, metals, chemicals, coal, petroleum, paper and paper products, food processing, textiles, clothing, and other consumer goods</Industries>
+<Exports>$271 billion (f.o.b., 1998)</Exports>
+<Imports>$305.9 billion (f.o.b., 1998)</Imports>
+<Currency>1 British pound = 100 pence</Currency>
+<Airports>498 (1999 est.)</Airports>
+<Illicitdrugs>gateway country for Latin American cocaine entering the European market; producer and major consumer of synthetic drugs, synthetic precursor chemicals; major consumer of Southwest Asian heroin; money-laundering center</Illicitdrugs>
+</record>
+<record>
+<Location>Eastern Europe, bordering the Black Sea, between Poland and Russia</Location>
+<Geographiccoordinates>49 00 N, 32 00 E</Geographiccoordinates>
+<Area>603700</Area>
+<Climate>temperate continental; Mediterranean only on the southern Crimean coast; precipitation disproportionately distributed, highest in west and north, lesser in east and southeast; winters vary from cool along the Black Sea to cold farther inland; summers are warm across the greater part of the country, hot in the south</Climate>
+<Naturalresources>iron ore, coal, manganese, natural gas, oil, salt, sulfur, graphite, titanium, magnesium, kaolin, nickel, mercury, timber, arable land</Naturalresources>
+<Population>49153027</Population>
+<Populationgrowthrate>-0.83% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 0.91 male(s)/female
+65 years and over: 0.49 male(s)/female
+total population: 0.86 male(s)/female (2000 est.)</Sexratio>
+<Religions>Ukrainian Orthodox - Moscow Patriarchate, Ukrainian Orthodox - Kiev Patriarchate, Ukrainian Autocephalous Orthodox, Ukrainian Catholic (Uniate), Protestant, Jewish</Religions>
+<Countryname>Ukraine </Countryname>
+<Capital>Kiev (Kyyiv)</Capital>
+<Flagdescription>two equal horizontal bands of azure (top) and golden yellow represent grainfields under a blue sky</Flagdescription>
+<GDP>purchasing power parity - $109.5 billion (1999 est.)</GDP>
+<Industries>coal, electric power, ferrous and nonferrous metals, machinery and transport equipment, chemicals, food-processing (especially sugar)</Industries>
+<Exports>$11.6 billion (1999 est.)</Exports>
+<Imports>$11.8 billion (1999 est.)</Imports>
+<Currency>1 hryvna = 100 kopiykas</Currency>
+<Airports>706 (1994 est.)</Airports>
+<Illicitdrugs>limited cultivation of cannabis and opium poppy, mostly for CIS consumption; some synthetic drug production for export to West; limited government eradication program; used as transshipment point for opiates and other illicit drugs from Africa, Latin America, and Turkey, and to Europe and Russia; drug-related money laundering a minor, but growing, problem</Illicitdrugs>
+</record>
+<record>
+<Location>North America, bordering both the North Atlantic Ocean and the North Pacific Ocean, between Canada and Mexico</Location>
+<Geographiccoordinates>38 00 N, 97 00 W</Geographiccoordinates>
+<Area>9629091</Area>
+<Climate>mostly temperate, but tropical in Hawaii and Florida, arctic in Alaska, semiarid in the great plains west of the Mississippi River, and arid in the Great Basin of the southwest; low winter temperatures in the northwest are ameliorated occasionally in January and February by warm chinook winds from the eastern slopes of the Rocky Mountains</Climate>
+<Naturalresources>coal, copper, lead, molybdenum, phosphates, uranium, bauxite, gold, iron, mercury, nickel, potash, silver, tungsten, zinc, petroleum, natural gas, timber</Naturalresources>
+<Population>275562673</Population>
+<Populationgrowthrate>0.91% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.71 male(s)/female
+total population: 0.96 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 56%, Roman Catholic 28%, Jewish 2%, other 4%, none 10% (1989)</Religions>
+<Countryname>United States </Countryname>
+<Capital>Washington, DC</Capital>
+<Flagdescription>thirteen equal horizontal stripes of red (top and bottom) alternating with white; there is a blue rectangle in the upper hoist-side corner bearing 50 small, white, five-pointed stars arranged in nine offset horizontal rows of six stars (top and bottom) alternating with rows of five stars; the 50 stars represent the 50 states, the 13 stripes represent the 13 original colonies; known as Old Glory; the design and colors have been the basis for a number of other flags, including Chile, Liberia, Malaysia, and Puerto Rico</Flagdescription>
+<GDP>purchasing power parity - $9.255 trillion (1999 est.)</GDP>
+<Industries>leading industrial power in the world, highly diversified and technologically advanced; petroleum, steel, motor vehicles, aerospace, telecommunications, chemicals, electronics, food processing, consumer goods, lumber, mining</Industries>
+<Exports>$663 billion (f.o.b., 1998 est.)</Exports>
+<Imports>$912 billion (c.i.f., 1998 est.)</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>14,572 (1999 est.)</Airports>
+<Illicitdrugs>consumer of cocaine shipped from Colombia through Mexico and the Caribbean; consumer of heroin, marijuana, and increasingly methamphetamines from Mexico; consumer of high-quality Southeast Asian heroin; illicit producer of cannabis, marijuana, depressants, stimulants, hallucinogens, and methamphetamines; drug-money-laundering center</Illicitdrugs>
+</record>
+<record>
+<Location>Western Africa, north of Ghana</Location>
+<Geographiccoordinates>13 00 N, 2 00 W</Geographiccoordinates>
+<Area>274200</Area>
+<Climate>tropical; warm, dry winters; hot, wet summers</Climate>
+<Naturalresources>manganese, limestone, marble; small deposits of gold, antimony, copper, nickel, bauxite, lead, phosphates, zinc, silver</Naturalresources>
+<Population>11946065</Population>
+<Populationgrowthrate>2.71% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 0.91 male(s)/female
+65 years and over: 0.74 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>indigenous beliefs 40%, Muslim 50%, Christian (mainly Roman Catholic) 10%</Religions>
+<Countryname>Burkina Faso </Countryname>
+<Capital>Ouagadougou</Capital>
+<Flagdescription>two equal horizontal bands of red (top) and green with a yellow five-pointed star in the center; uses the popular pan-African colors of Ethiopia</Flagdescription>
+<GDP>purchasing power parity - $12.4 billion (1999 est.)</GDP>
+<Industries>cotton lint, beverages, agricultural processing, soap, cigarettes, textiles, gold</Industries>
+<Exports>$311 million (f.o.b., 1998 est.)</Exports>
+<Imports>$572 million (f.o.b., 1998 est.)</Imports>
+<Currency>1 Communaute Financiere Africaine franc (CFAF) = 100 centimes</Currency>
+<Airports>33 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern South America, bordering the South Atlantic Ocean, between Argentina and Brazil</Location>
+<Geographiccoordinates>33 00 S, 56 00 W</Geographiccoordinates>
+<Area>176220</Area>
+<Climate>warm temperate; freezing temperatures almost unknown</Climate>
+<Naturalresources>arable land, hydropower, minor minerals, fisheries</Naturalresources>
+<Population>3334074</Population>
+<Populationgrowthrate>0.77% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 0.97 male(s)/female
+65 years and over: 0.7 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Roman Catholic 66% (less than one-half of the adult population attends church regularly), Protestant 2%, Jewish 2%, nonprofessing or other 30%</Religions>
+<Countryname>Uruguay </Countryname>
+<Capital>Montevideo</Capital>
+<Flagdescription>nine equal horizontal stripes of white (top and bottom) alternating with blue; there is a white square in the upper hoist-side corner with a yellow sun bearing a human face known as the Sun of May and 16 rays alternately triangular and wavy</Flagdescription>
+<GDP>purchasing power parity - $28 billion (1999 est.)</GDP>
+<Industries>food processing, electrical machinery, transportation equipment, petroleum products, textiles, chemicals, beverages</Industries>
+<Exports>$2.1 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$3.4 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Uruguayan peso ($Ur) = 100 centesimos</Currency>
+<Airports>65 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Central Asia, north of Afghanistan</Location>
+<Geographiccoordinates>41 00 N, 64 00 E</Geographiccoordinates>
+<Area>447400</Area>
+<Climate>mostly midlatitude desert, long, hot summers, mild winters; semiarid grassland in east</Climate>
+<Naturalresources>natural gas, petroleum, coal, gold, uranium, silver, copper, lead and zinc, tungsten, molybdenum</Naturalresources>
+<Population>24755519</Population>
+<Populationgrowthrate>1.6% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.66 male(s)/female
+total population: 0.98 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 88% (mostly Sunnis), Eastern Orthodox 9%, other 3%</Religions>
+<Countryname>Uzbekistan </Countryname>
+<Capital>Tashkent (Toshkent)</Capital>
+<Flagdescription>three equal horizontal bands of blue (top), white, and green separated by red fimbriations with a white crescent moon and 12 white stars in the upper hoist-side quadrant</Flagdescription>
+<GDP>purchasing power parity - $59.3 billion (1999 est.)</GDP>
+<Industries>textiles, food processing, machine building, metallurgy, natural gas</Industries>
+<Exports>$2.9 billion (1999 est.)</Exports>
+<Imports>$3.1 billion (1999 est.)</Imports>
+<Currency>Uzbekistani som (UKS)</Currency>
+<Airports>3 (1997 est.)</Airports>
+<Illicitdrugs>limited illicit cultivation of cannabis and very small amounts of opium poppy, mostly for domestic consumption, almost entirely eradicated by an effective government eradication program; increasingly used as transshipment point for illicit drugs from Afghanistan to Russia and Western Europe and for acetic anhydride destined for Afghanistan</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, islands in the Caribbean Sea, north of Trinidad and Tobago</Location>
+<Geographiccoordinates>13 15 N, 61 12 W</Geographiccoordinates>
+<Area>389</Area>
+<Climate>tropical; little seasonal temperature variation; rainy season (May to November)</Climate>
+<Naturalresources>hydropower, cropland</Naturalresources>
+<Population>115461</Population>
+<Populationgrowthrate>0.43% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 0.75 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>Anglican 47%, Methodist 28%, Roman Catholic 13%, Seventh-Day Adventist, Hindu, other Protestant</Religions>
+<Countryname>Saint Vincent and the Grenadines </Countryname>
+<Capital>Kingstown</Capital>
+<Flagdescription>three vertical bands of blue (hoist side), gold (double width), and green; the gold band bears three green diamonds arranged in a V pattern</Flagdescription>
+<GDP>purchasing power parity - $309 million (1999 est.)</GDP>
+<Industries>food processing, cement, furniture, clothing, starch</Industries>
+<Exports>$47.8 million (1998 est.)</Exports>
+<Imports>$180 million (1998 est.)</Imports>
+<Currency>1 East Caribbean dollar (EC$) = 100 cents</Currency>
+<Airports>6 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for South American drugs destined for the US and Europe</Illicitdrugs>
+</record>
+<record>
+<Location>Northern South America, bordering the Caribbean Sea and the North Atlantic Ocean, between Colombia and Guyana</Location>
+<Geographiccoordinates>8 00 N, 66 00 W</Geographiccoordinates>
+<Area>912050</Area>
+<Climate>tropical; hot, humid; more moderate in highlands</Climate>
+<Naturalresources>petroleum, natural gas, iron ore, gold, bauxite, other minerals, hydropower, diamonds</Naturalresources>
+<Population>23542649</Population>
+<Populationgrowthrate>1.6% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.08 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 1.01 male(s)/female
+65 years and over: 0.84 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>nominally Roman Catholic 96%, Protestant 2%</Religions>
+<Countryname>Venezuela </Countryname>
+<Capital>Caracas</Capital>
+<Flagdescription>three equal horizontal bands of yellow (top), blue, and red with the coat of arms on the hoist side of the yellow band and an arc of seven white five-pointed stars centered in the blue band</Flagdescription>
+<GDP>purchasing power parity - $182.8 billion (1999 est.)</GDP>
+<Industries>petroleum, iron ore mining, construction materials, food processing, textiles, steel, aluminum, motor vehicle assembly</Industries>
+<Exports>$20.9 billion (f.o.b., 1999)</Exports>
+<Imports>$11.8 billion (f.o.b., 1999)</Imports>
+<Currency>1 bolivar (Bs) = 100 centimos</Currency>
+<Airports>366 (1999 est.)</Airports>
+<Illicitdrugs>illicit producer of opium for the international drug trade on a small scale; however, large quantities of cocaine and heroin transit the country from Colombia bound for US and Europe; important money-laundering hub; active eradication program primarily targeting opium; increasing signs of drug-related activities by Colombian insurgents on border</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, between the Caribbean Sea and the North Atlantic Ocean, east of Puerto Rico</Location>
+<Geographiccoordinates>18 30 N, 64 30 W</Geographiccoordinates>
+<Area>150</Area>
+<Climate>subtropical; humid; temperatures moderated by trade winds</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>19615</Population>
+<Populationgrowthrate>2.34% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 1.06 male(s)/female
+65 years and over: 1.2 male(s)/female
+total population: 1.06 male(s)/female (2000 est.)</Sexratio>
+<Religions>Protestant 86% (Methodist 45%, Anglican 21%, Church of God 7%, Seventh-Day Adventist 5%, Baptist 4%, Jehovah's Witnesses 2%, other 2%), Roman Catholic 6%, none 2%, other 6% (1981)</Religions>
+<Countryname>British Virgin Islands </Countryname>
+<Capital>Road Town</Capital>
+<Flagdescription>blue, with the flag of the UK in the upper hoist-side quadrant and the Virgin Islander coat of arms centered in the outer half of the flag; the coat of arms depicts a woman flanked on either side by a vertical column of six oil lamps above a scroll bearing the Latin word VIGILATE (Be Watchful)</Flagdescription>
+<GDP>purchasing power parity - $287 million (1999 est.)</GDP>
+<Industries>tourism, light industry, construction, rum, concrete block, offshore financial center</Industries>
+<Exports>$6 million (1998)</Exports>
+<Imports>$175 million (1998)</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>3 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southeastern Asia, bordering the Gulf of Thailand, Gulf of Tonkin, and South China Sea, alongside China, Laos, and Cambodia</Location>
+<Geographiccoordinates>16 00 N, 106 00 E</Geographiccoordinates>
+<Area>329560</Area>
+<Climate>tropical in south; monsoonal in north with hot, rainy season (mid-May to mid-September) and warm, dry season (mid-October to mid-March)</Climate>
+<Naturalresources>phosphates, coal, manganese, bauxite, chromate, offshore oil and gas deposits, forests, hydropower</Naturalresources>
+<Population>78773873</Population>
+<Populationgrowthrate>1.49% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.07 male(s)/female
+15-64 years: 0.95 male(s)/female
+65 years and over: 0.66 male(s)/female
+total population: 0.97 male(s)/female (2000 est.)</Sexratio>
+<Religions>Buddhist, Taoist, Roman Catholic, indigenous beliefs, Muslim, Protestant, Cao Dai, Hoa Hao</Religions>
+<Countryname>Vietnam </Countryname>
+<Capital>Hanoi</Capital>
+<Flagdescription>red with a large yellow five-pointed star in the center</Flagdescription>
+<GDP>purchasing power parity - $143.1 billion (1999 est.)</GDP>
+<Industries>food processing, garments, shoes, machine building, mining, cement, chemical fertilizer, glass, tires, oil, coal, steel, paper</Industries>
+<Exports>$11.5 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$11.6 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 new dong (D) = 100 xu</Currency>
+<Airports>48 (1999 est.)</Airports>
+<Illicitdrugs>minor producer of opium poppy with 2,100 hectares cultivated in 1999, capable of producing 11 metric tons of opium; probably minor transit point for Southeast Asian heroin destined for the US and Europe; growing opium/heroin addiction; possible small-scale heroin production</Illicitdrugs>
+</record>
+<record>
+<Location>Caribbean, islands between the Caribbean Sea and the North Atlantic Ocean, east of Puerto Rico</Location>
+<Geographiccoordinates>18 20 N, 64 50 W</Geographiccoordinates>
+<Area>352</Area>
+<Climate>subtropical, tempered by easterly trade winds, relatively low humidity, little seasonal temperature variation; rainy season May to November</Climate>
+<Naturalresources>sun, sand, sea, surf</Naturalresources>
+<Population>120917</Population>
+<Populationgrowthrate>1.07% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.06 male(s)/female
+under 15 years: 1.06 male(s)/female
+15-64 years: 0.83 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 0.88 male(s)/female (2000 est.)</Sexratio>
+<Religions>Baptist 42%, Roman Catholic 34%, Episcopalian 17%, other 7%</Religions>
+<Countryname>Virgin Islands </Countryname>
+<Capital>Charlotte Amalie</Capital>
+<Flagdescription>white, with a modified US coat of arms in the center between the large blue initials V and I; the coat of arms shows a yellow eagle holding an olive branch in one talon and three arrows in the other with a superimposed shield of vertical red and white stripes below a blue panel</Flagdescription>
+<GDP>purchasing power parity - $1.8 billion (1999 est.)</GDP>
+<Industries>tourism, petroleum refining, watch assembly, rum distilling, construction, pharmaceuticals, textiles, electronics</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 United States dollar (US$) = 100 cents</Currency>
+<Airports>2
+note: international airports on Saint Thomas and Saint Croix (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Europe, an enclave of Rome (Italy)</Location>
+<Geographiccoordinates>41 54 N, 12 27 E</Geographiccoordinates>
+<Area>0</Area>
+<Climate>temperate; mild, rainy winters (September to mid-May) with hot, dry summers (May to September)</Climate>
+<Naturalresources>none</Naturalresources>
+<Population>880</Population>
+<Populationgrowthrate>1.15% (2000 est.)</Populationgrowthrate>
+<Religions>Roman Catholic</Religions>
+<Countryname>Holy See (Vatican City) </Countryname>
+<Capital>Vatican City</Capital>
+<Flagdescription>two vertical bands of yellow (hoist side) and white with the crossed keys of Saint Peter and the papal miter centered in the white band</Flagdescription>
+<Industries>printing and production of a small amount of mosaics and staff uniforms; worldwide banking and financial activities</Industries>
+<Currency>1 Vatican lira (VLit) = 100 centesimi</Currency>
+<Airports>none</Airports>
+</record>
+<record>
+<Location>Southern Africa, bordering the South Atlantic Ocean, between Angola and South Africa</Location>
+<Geographiccoordinates>22 00 S, 17 00 E</Geographiccoordinates>
+<Area>825418</Area>
+<Climate>desert; hot, dry; rainfall sparse and erratic</Climate>
+<Naturalresources>diamonds, copper, uranium, gold, lead, tin, lithium, cadmium, zinc, salt, vanadium, natural gas, hydropower, fish
+note: suspected deposits of oil, coal, and iron ore</Naturalresources>
+<Population>1771327</Population>
+<Populationgrowthrate>1.57% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 0.99 male(s)/female
+65 years and over: 0.76 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 80% to 90% (Lutheran 50% at least), indigenous beliefs 10% to 20%</Religions>
+<Countryname>Namibia </Countryname>
+<Capital>Windhoek</Capital>
+<Flagdescription>a large blue triangle with a yellow sunburst fills the upper left section and an equal green triangle (solid) fills the lower right section; the triangles are separated by a red stripe that is contrasted by two narrow white-edge borders</Flagdescription>
+<GDP>purchasing power parity - $7.1 billion (1999 est.)</GDP>
+<Industries>meat packing, fish processing, dairy products; mining (diamond, lead, zinc, tin, silver, tungsten, uranium, copper)</Industries>
+<Exports>$1.4 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$1.5 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Namibian dollar (N$) = 100 cents</Currency>
+<Airports>135 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Middle East, west of Jordan</Location>
+<Geographiccoordinates>32 00 N, 35 15 E</Geographiccoordinates>
+<Area>5860</Area>
+<Climate>temperate, temperature and precipitation vary with altitude, warm to hot summers, cool to mild winters</Climate>
+<Naturalresources>arable land</Naturalresources>
+<Population>2020298</Population>
+<Populationgrowthrate>3.38% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.05 male(s)/female
+15-64 years: 1.04 male(s)/female
+65 years and over: 0.78 male(s)/female
+total population: 1.03 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim 75% (predominantly Sunni), Jewish 17%, Christian and other 8%</Religions>
+<Countryname>West Bank </Countryname>
+<GDP>purchasing power parity - $3.3 billion (1999 est.)</GDP>
+<Industries>generally small family businesses that produce cement, textiles, soap, olive-wood carvings, and mother-of-pearl souvenirs; the Israelis have established some small-scale, modern industries in the settlements and industrial centers</Industries>
+<Exports>$682 million (includes Gaza Strip) (f.o.b., 1998 est.)</Exports>
+<Imports>$2.5 billion (includes Gaza Strip) (c.i.f., 1998 est.)</Imports>
+<Currency>1 new Israeli shekel (NIS) = 100 new agorot; 1 Jordanian dinar (JD) = 1,000 fils</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, islands in the South Pacific Ocean, about two-thirds of the way from Hawaii to New Zealand</Location>
+<Geographiccoordinates>13 18 S, 176 12 W</Geographiccoordinates>
+<Area>274</Area>
+<Climate>tropical; hot, rainy season (November to April); cool, dry season (May to October); rains 2,500-3,000 mm per year (80% humidity); average temperature 26.6 degrees C</Climate>
+<Naturalresources>NEGL</Naturalresources>
+<Population>15283</Population>
+<Populationgrowthrate>NA%</Populationgrowthrate>
+<Religions>Roman Catholic 100%</Religions>
+<Countryname>Wallis and Futuna </Countryname>
+<Capital>Mata-Utu (on Ile Uvea)</Capital>
+<Flagdescription>a large white modified Maltese cross centered on a red background; the flag of France outlined in white on two sides is in the upper hoist quadrant; the flag of France is used for official occasions</Flagdescription>
+<GDP>purchasing power parity - $28.7 million (1995 est.)</GDP>
+<Industries>copra, handicrafts, fishing, lumber</Industries>
+<Exports>$370,000 (f.o.b., 1995 est.)</Exports>
+<Imports>$13.5 million (c.i.f., 1995 est.)</Imports>
+<Currency>1 Comptoirs Francais du Pacifique franc (CFPF) = 100 centimes</Currency>
+<Airports>2 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Northern Africa, bordering the North Atlantic Ocean, between Mauritania and Morocco</Location>
+<Geographiccoordinates>24 30 N, 13 00 W</Geographiccoordinates>
+<Area>266000</Area>
+<Climate>hot, dry desert; rain is rare; cold offshore air currents produce fog and heavy dew</Climate>
+<Naturalresources>phosphates, iron ore</Naturalresources>
+<Population>244943</Population>
+<Populationgrowthrate>2.29% (2000 est.)</Populationgrowthrate>
+<Religions>Muslim</Religions>
+<Countryname>Western Sahara </Countryname>
+<Capital>none</Capital>
+<GDP>purchasing power parity - $NA</GDP>
+<Industries>phosphate mining, handicrafts</Industries>
+<Exports>$NA</Exports>
+<Imports>$NA</Imports>
+<Currency>1 Moroccan dirham (DH) = 100 centimes</Currency>
+<Airports>12 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, atoll in the North Pacific Ocean, about two-thirds of the way from Hawaii to the Northern Mariana Islands</Location>
+<Geographiccoordinates>19 17 N, 166 36 E</Geographiccoordinates>
+<Area>6</Area>
+<Climate>tropical</Climate>
+<Naturalresources>none</Naturalresources>
+<Population></Population>
+<Countryname>Wake Island </Countryname>
+<Flagdescription>the flag of the US is used</Flagdescription>
+<Airports>1 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Oceania, group of islands in the South Pacific Ocean, about one-half of the way from Hawaii to New Zealand</Location>
+<Geographiccoordinates>13 35 S, 172 20 W</Geographiccoordinates>
+<Area>2860</Area>
+<Climate>tropical; rainy season (October to March), dry season (May to October)</Climate>
+<Naturalresources>hardwood forests, fish, hydropower</Naturalresources>
+<Population>179466</Population>
+<Populationgrowthrate>-0.22% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.03 male(s)/female
+15-64 years: 1.72 male(s)/female
+65 years and over: 0.88 male(s)/female
+total population: 1.39 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 99.7% (about one-half of population associated with the London Missionary Society; includes Congregational, Roman Catholic, Methodist, Latter-Day Saints, Seventh-Day Adventist)</Religions>
+<Countryname>Samoa </Countryname>
+<Capital>Apia</Capital>
+<Flagdescription>red with a blue rectangle in the upper hoist-side quadrant bearing five white five-pointed stars representing the Southern Cross constellation</Flagdescription>
+<GDP>purchasing power parity - $485 million (1998 est.)</GDP>
+<Industries>timber, tourism, food processing, fishing</Industries>
+<Exports>$20.3 million (f.o.b., 1998)</Exports>
+<Imports>$96.6 million (f.o.b., 1998)</Imports>
+<Currency>1 tala (WS$) = 100 sene</Currency>
+<Airports>3 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, between Mozambique and South Africa</Location>
+<Geographiccoordinates>26 30 S, 31 30 E</Geographiccoordinates>
+<Area>17363</Area>
+<Climate>varies from tropical to near temperate</Climate>
+<Naturalresources>asbestos, coal, clay, cassiterite, hydropower, forests, small gold and diamond deposits, quarry stone, and talc</Naturalresources>
+<Population>1083289</Population>
+<Populationgrowthrate>2.02% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 0.99 male(s)/female
+15-64 years: 0.93 male(s)/female
+65 years and over: 0.7 male(s)/female
+total population: 0.95 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 60%, indigenous beliefs 40%</Religions>
+<Countryname>Swaziland </Countryname>
+<Capital>Mbabane; note - Lobamba is the royal and legislative capital</Capital>
+<Flagdescription>three horizontal bands of blue (top), red (triple width), and blue; the red band is edged in yellow; centered in the red band is a large black and white shield covering two spears and a staff decorated with feather tassels, all placed horizontally</Flagdescription>
+<GDP>purchasing power parity - $4.2 billion (1999 est.)</GDP>
+<Industries>mining (coal and asbestos), wood pulp, sugar, soft drink concentrates</Industries>
+<Exports>$825 million (f.o.b., 1999)</Exports>
+<Imports>$1.05 billion (f.o.b., 1999)</Imports>
+<Currency>1 lilangeni (E) = 100 cents</Currency>
+<Airports>18 (1999 est.)</Airports>
+</record>
+<record>
+<Location>body of water between Africa, the Southern Ocean, Asia, and Australia</Location>
+<Geographiccoordinates>20 00 S, 80 00 E</Geographiccoordinates>
+<Area>68000000</Area>
+<Climate>northeast monsoon (December to April), southwest monsoon (June to October); tropical cyclones occur during May/June and October/November in the northern Indian Ocean and January/February in the southern Indian Ocean</Climate>
+<Naturalresources>oil and gas fields, fish, shrimp, sand and gravel aggregates, placer deposits, polymetallic nodules</Naturalresources>
+</record>
+<record>
+<Location>body of water mostly north of the Arctic Circle</Location>
+<Geographiccoordinates>90 00 N, 0 00 E</Geographiccoordinates>
+<Area>14000000</Area>
+<Climate>polar climate characterized by persistent cold and relatively narrow annual temperature ranges; winters characterized by continuous darkness, cold and stable weather conditions, and clear skies; summers characterized by continuous daylight, damp and foggy weather, and weak cyclones with rain or snow</Climate>
+<Naturalresources>sand and gravel aggregates, placer deposits, polymetallic nodules, oil and gas fields, fish, marine mammals (seals and whales)</Naturalresources>
+</record>
+<record>
+<Location>Middle East, bordering the Arabian Sea, Gulf of Aden, and Red Sea, between Oman and Saudi Arabia</Location>
+<Geographiccoordinates>15 00 N, 48 00 E</Geographiccoordinates>
+<Area>527970</Area>
+<Climate>mostly desert; hot and humid along west coast; temperate in western mountains affected by seasonal monsoon; extraordinarily hot, dry, harsh desert in east</Climate>
+<Naturalresources>petroleum, fish, rock salt, marble, small deposits of coal, gold, lead, nickel, and copper, fertile soil in west</Naturalresources>
+<Population>17479206</Population>
+<Populationgrowthrate>3.36% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.05 male(s)/female
+under 15 years: 1.04 male(s)/female
+15-64 years: 1.05 male(s)/female
+65 years and over: 1.04 male(s)/female
+total population: 1.04 male(s)/female (2000 est.)</Sexratio>
+<Religions>Muslim including Shaf'i (Sunni) and Zaydi (Shi'a), small numbers of Jewish, Christian, and Hindu</Religions>
+<Countryname>Yemen </Countryname>
+<Capital>Sanaa</Capital>
+<Flagdescription>three equal horizontal bands of red (top), white, and black; similar to the flag of Syria which has two green stars and of Iraq which has three green stars (plus an Arabic inscription) in a horizontal line centered in the white band; also similar to the flag of Egypt which has a heraldic eagle centered in the white band</Flagdescription>
+<GDP>purchasing power parity - $12.7 billion (1999 est.)</GDP>
+<Industries>crude oil production and petroleum refining; small-scale production of cotton textiles and leather goods; food processing; handicrafts; small aluminum products factory; cement</Industries>
+<Exports>$2 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$2.3 billion (f.o.b., 1999 est.)</Imports>
+<Currency>Yemeni rial (YER) = 100 fils</Currency>
+<Airports>50 (1999 est.)</Airports>
+</record>
+<record>
+<Location>Southern Africa, east of Angola</Location>
+<Geographiccoordinates>15 00 S, 30 00 E</Geographiccoordinates>
+<Area>752614</Area>
+<Climate>tropical; modified by altitude; rainy season (October to April)</Climate>
+<Naturalresources>copper, cobalt, zinc, lead, coal, emeralds, gold, silver, uranium, hydropower</Naturalresources>
+<Population>9582418</Population>
+<Populationgrowthrate>1.95% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.01 male(s)/female
+15-64 years: 0.98 male(s)/female
+65 years and over: 0.79 male(s)/female
+total population: 0.99 male(s)/female (2000 est.)</Sexratio>
+<Religions>Christian 50%-75%, Muslim and Hindu 24%-49%, indigenous beliefs 1%</Religions>
+<Countryname>Zambia </Countryname>
+<Capital>Lusaka</Capital>
+<Flagdescription>green with a panel of three vertical bands of red (hoist side), black, and orange below a soaring orange eagle, on the outer edge of the flag</Flagdescription>
+<GDP>purchasing power parity - $8.5 billion (1999 est.)</GDP>
+<Industries>copper mining and processing, construction, foodstuffs, beverages, chemicals, textiles, fertilizer</Industries>
+<Exports>$900 million (f.o.b., 1999 est.)</Exports>
+<Imports>$1.15 billion (f.o.b., 1999 est.)</Imports>
+<Currency>1 Zambian kwacha (ZK) = 100 ngwee</Currency>
+<Airports>112 (1999 est.)</Airports>
+<Illicitdrugs>transshipment point for methaqualone, heroin, and cocaine bound for Southern Africa and Europe; regional money-laundering center</Illicitdrugs>
+</record>
+<record>
+<Location>body of water between Africa, Europe, the Southern Ocean, and the Western Hemisphere</Location>
+<Geographiccoordinates>0 00 N, 25 00 W</Geographiccoordinates>
+<Area>76000000</Area>
+<Climate>tropical cyclones (hurricanes) develop off the coast of Africa near Cape Verde and move westward into the Caribbean Sea; hurricanes can occur from May to December, but are most frequent from August to November</Climate>
+<Naturalresources>oil and gas fields, fish, marine mammals (seals and whales), sand and gravel aggregates, placer deposits, polymetallic nodules, precious stones</Naturalresources>
+</record>
+<record>
+<Location>Southern Africa, between South Africa and Zambia</Location>
+<Geographiccoordinates>20 00 S, 30 00 E</Geographiccoordinates>
+<Area>390580</Area>
+<Climate>tropical; moderated by altitude; rainy season (November to March)</Climate>
+<Naturalresources>coal, chromium ore, asbestos, gold, nickel, copper, iron ore, vanadium, lithium, tin, platinum group metals</Naturalresources>
+<Population>11342521</Population>
+<Populationgrowthrate>0.26% (2000 est.)</Populationgrowthrate>
+<Sexratio>
+at birth: 1.03 male(s)/female
+under 15 years: 1.02 male(s)/female
+15-64 years: 1.02 male(s)/female
+65 years and over: 1.03 male(s)/female
+total population: 1.02 male(s)/female (2000 est.)</Sexratio>
+<Religions>syncretic (part Christian, part indigenous beliefs) 50%, Christian 25%, indigenous beliefs 24%, Muslim and other 1%</Religions>
+<Countryname>Zimbabwe </Countryname>
+<Capital>Harare</Capital>
+<Flagdescription>seven equal horizontal bands of green, yellow, red, black, red, yellow, and green with a white isosceles triangle edged in black with its base on the hoist side; a yellow Zimbabwe bird is superimposed on a red five-pointed star in the center of the triangle</Flagdescription>
+<GDP>purchasing power parity - $26.5 billion (1999 est.)</GDP>
+<Industries>mining (coal, gold, copper, nickel, tin, clay, numerous metallic and nonmetallic ores), steel, wood products, cement, chemicals, fertilizer, clothing and footwear, foodstuffs, beverages</Industries>
+<Exports>$2 billion (f.o.b., 1999 est.)</Exports>
+<Imports>$2 billion (f.o.b., 1998 est.)</Imports>
+<Currency>1 Zimbabwean dollar (Z$) = 100 cents</Currency>
+<Airports>459 (1999 est.)</Airports>
+<Illicitdrugs>significant transit point for African cannabis and South Asian heroin, mandrax, and methamphetamines destined for the South African and European markets</Illicitdrugs>
+</record>
+<record>
+<Location>body of water between the Southern Ocean, Asia, Australia, and the Western Hemisphere</Location>
+<Geographiccoordinates>0 00 N, 160 00 W</Geographiccoordinates>
+<Area>155000000</Area>
+<Climate>planetary air pressure systems and resultant wind patterns exhibit remarkable uniformity in the south and east; trade winds and westerly winds are well-developed patterns, modified by seasonal fluctuations; tropical cyclones (hurricanes) may form south of Mexico from June to October and affect Mexico and Central America; continental influences cause climatic uniformity to be much less pronounced in the eastern and western regions at the same latitude in the North Pacific Ocean; the western Pacific is monsoonal - a rainy season occurs during the summer months, when moisture-laden winds blow from the ocean over the land, and a dry season during the winter months, when dry winds blow from the Asian landmass back to the ocean; tropical cyclones (typhoons) may strike southeast and east Asia from May to December</Climate>
+<Naturalresources>oil and gas fields, polymetallic nodules, sand and gravel aggregates, placer deposits, fish</Naturalresources>
+</record>
+</database>
diff --git a/noncore/apps/tableviewer/db/.cvsignore b/noncore/apps/tableviewer/db/.cvsignore
new file mode 100644
index 0000000..a433295
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+Makefile
+
diff --git a/noncore/apps/tableviewer/db/common.cpp b/noncore/apps/tableviewer/db/common.cpp
new file mode 100644
index 0000000..4c70e54
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/common.cpp
@@ -0,0 +1,1470 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <stdlib.h>
+#include <qstring.h>
+#include <qheader.h>
+#include <qvector.h>
+#include <qdatetime.h>
+#include <timestring.h>
+#include "common.h"
+#include "datacache.h"
+#include <assert.h>
+
+static const int del_flag = 0x1;
+static const int new_flag = 0x2;
+
+/* Helper function */
+
+int parseNextNumber(QString *q) {
+ QChar c;
+ uint i;
+ int result = 0;
+
+ bool found_digits = FALSE;
+ for(i = 0; i < q->length(); i++) {
+ c = q->at(i);
+ if (c.isDigit()) {
+ if (found_digits)
+ result *= 10;
+ found_digits = TRUE;
+ result += c.digitValue();
+ } else {
+ if (found_digits)
+ break;
+ /* just skip this char */
+ }
+ }
+ /* now truncate q */
+ if (found_digits)
+ q->remove(0, i);
+ return result;
+}
+
+/*!
+ \class QStringVector
+ \brief A Vector of QStrings that can be sorted and searched
+
+ Implmented in order to allow reverse lookup on the string name
+
+*/
+
+/*!
+ This function implements the compare function in order to allow the
+ searching and sorting of the QStringVector to occur
+
+ \returns an int which is either
+ <UL>
+ <LI> < 0 if the first string is smaller than the second,</LI>
+ <LI> > 0 if the first string is bigger then the second,</LI>
+ <LI> == 0 if the first string is equal to the second.</LI>
+ </UL>
+*/
+int QStringVector::compareItems(Item a, Item b)
+{
+ QString *qa = (QString *)a;
+ QString *qb = (QString *)b;
+
+ return QString::compare(*qa, *qb);
+}
+
+/*!
+ \class TVVariant
+ A way of abstracting void * and keeping information on
+ the keytypes and behaviours in one place
+*/
+
+TVVariantPrivate::TVVariantPrivate()
+{
+ typ = TVVariant::Invalid;
+}
+
+TVVariantPrivate::TVVariantPrivate( TVVariantPrivate *d)
+{
+ switch(d->typ)
+ {
+ case TVVariant::Invalid:
+ break;
+ case TVVariant::String:
+ value.ptr = new QString(*((QString *)d->value.ptr));
+ break;
+ case TVVariant::Date:
+ value.ptr = new QDate(*((QDate *)d->value.ptr));
+ break;
+ case TVVariant::Time:
+ value.ptr = new QTime(*((QTime *)d->value.ptr));
+ break;
+ case TVVariant::Int:
+ value.i = d->value.i;
+ break;
+ default:
+ ASSERT( 0 );
+ }
+
+ typ = d->typ;
+}
+
+TVVariantPrivate::~TVVariantPrivate()
+{
+ clear();
+}
+
+void TVVariantPrivate::clear()
+{
+ switch( typ )
+ {
+ case TVVariant::String:
+ delete (QString *)value.ptr;
+ break;
+ case TVVariant::Date:
+ delete (QDate *)value.ptr;
+ break;
+ case TVVariant::Time:
+ delete (QTime *)value.ptr;
+ break;
+ case TVVariant::Invalid:
+ case TVVariant::Int:
+ break;
+ }
+
+ typ = TVVariant::Invalid;
+}
+
+/*!
+ \class TVVariant
+ blah
+*/
+
+TVVariant::TVVariant()
+{
+ d = new TVVariantPrivate;
+}
+
+TVVariant::~TVVariant()
+{
+ if (d->deref())
+ delete d;
+}
+
+TVVariant::TVVariant(const TVVariant& p)
+{
+ d = new TVVariantPrivate;
+ *this = p;
+}
+
+TVVariant::TVVariant(QDataStream& s)
+{
+ d = new TVVariantPrivate;
+ s >> *this;
+}
+
+TVVariant::TVVariant(const QString &val)
+{
+ d = new TVVariantPrivate;
+ d->typ = String;
+ d->value.ptr = new QString(val);
+}
+
+TVVariant::TVVariant(const QDate &val)
+{
+ d = new TVVariantPrivate;
+ d->typ = Date;
+ d->value.ptr = new QDate(val);
+}
+
+TVVariant::TVVariant(const QTime &val)
+{
+ d = new TVVariantPrivate;
+ d->typ = Time;
+ d->value.ptr = new QTime(val);
+}
+
+TVVariant::TVVariant( int val )
+{
+ d = new TVVariantPrivate;
+ d->typ = Int;
+ d->value.i = val;
+}
+
+TVVariant& TVVariant::operator=(const TVVariant& variant )
+{
+ TVVariant& other = (TVVariant&) variant;
+
+ other.d->ref();
+ if ( d->deref() )
+ delete d;
+
+ d = other.d;
+
+ return *this;
+}
+
+void TVVariant::detach()
+{
+ if (d->count == 1)
+ return;
+
+ d->deref();
+ d = new TVVariantPrivate(d);
+}
+
+const QString TVVariant::typeName() const
+{
+ return typeToName(d->typ);
+}
+
+void TVVariant::clear()
+{
+ if (d->count > 1)
+ {
+ d->deref();
+ d = new TVVariantPrivate;
+ return;
+ }
+
+ d->clear();
+}
+
+const QString TVVariant::typeToName(KeyType typ)
+{
+ switch(typ) {
+ case String:
+ return QString("String");
+ case Date:
+ return QString("Date");
+ case Time:
+ return QString("Time");
+ case Int:
+ return QString("Int");
+ case Invalid:
+ default:
+ return QString("Invalid");
+ }
+ return QString("Invalid");
+}
+
+TVVariant::KeyType TVVariant::nameToType(const QString &name)
+{
+ if(!qstrcmp("String", name))
+ return String;
+ if(!qstrcmp("Date", name))
+ return Date;
+ if(!qstrcmp("Time", name))
+ return Time;
+ if(!qstrcmp("Int", name))
+ return Int;
+
+ return Invalid;
+}
+
+void TVVariant::load(QDataStream &s )
+{
+ KeyType t;
+ s >> t;
+
+ d->typ = t;
+ switch(t) {
+ case Invalid:
+ d->typ = t;
+ break;
+ case String:
+ {
+ QString *x = new QString;
+ s >> *x;
+ d->value.ptr = x;
+ }
+ break;
+ case Time:
+ {
+ QTime *x = new QTime;
+ s >> *x;
+ d->value.ptr = x;
+ }
+ break;
+ case Date:
+ {
+ QDate *x = new QDate;
+ s >> *x;
+ d->value.ptr = x;
+ }
+ break;
+ case Int:
+ {
+ int x;
+ s >> x;
+ d->value.i = x;
+ }
+ break;
+ default:
+ qFatal("Unrecognized data type");
+ }
+}
+
+void TVVariant::save( QDataStream &s ) const
+{
+ s << type();
+
+ switch( d->typ ) {
+ case String:
+ s << *((QString *)d->value.ptr);
+ break;
+ case Date:
+ s << *((QDate *)d->value.ptr);
+ break;
+ case Time:
+ s << *((QTime *)d->value.ptr);
+ break;
+ case Int:
+ s << d->value.i;
+ break;
+ case Invalid:
+ break;
+ }
+}
+
+QDataStream& operator>>(QDataStream& s, TVVariant& p)
+{
+ p.load( s );
+ return s;
+}
+
+QDataStream& operator<<(QDataStream &s, const TVVariant& p)
+{
+ p.save( s );
+ return s;
+}
+
+QDataStream& operator>> (QDataStream &s, TVVariant::KeyType& p)
+{
+ Q_UINT8 u = 0;
+ s >> u;
+ p = (TVVariant::KeyType) u;
+
+ return s;
+}
+
+QDataStream& operator<< (QDataStream& s, const TVVariant::KeyType& p)
+{
+ s << (Q_UINT8)p;
+ return s;
+}
+
+const QString TVVariant::toString() const
+{
+ switch(d->typ) {
+ case String:
+ return *((QString*)d->value.ptr);
+ case Date:
+ return ((QDate*)d->value.ptr)->toString();
+ case Time:
+ return ((QTime*)d->value.ptr)->toString();
+ case Int:
+ return QString::number(d->value.i);
+ case Invalid:
+ default:
+ return QString::null;
+ }
+ return QString::null;
+}
+
+// TODO DO, this properly, */
+int TVVariant::toInt() const
+{
+ if(d->typ == Int)
+ return d->value.i;
+
+ if(d->typ == String) {
+ QString tmpq(*(QString *)d->value.ptr);
+ return parseNextNumber(&tmpq);
+ }
+
+ return 0;
+}
+
+const QDate TVVariant::toDate() const
+{
+ if(d->typ == Date)
+ return *((QDate *)d->value.ptr);
+
+ if(d->typ == String) {
+ QString q = toString();
+
+ /* date format is day mon d yyyy */
+ /* ignore the first three letters, read the next
+ three for month.. etc */
+
+ int day = parseNextNumber(&q);
+ int month = parseNextNumber(&q);
+ int year = parseNextNumber(&q);
+ if (!QDate::isValid(year, month, day))
+ return QDate();
+ return QDate(year, month, day);
+ }
+
+
+ return QDate();
+}
+
+const QTime TVVariant::toTime() const
+{
+ if(d->typ == Time)
+ return *((QTime *)d->value.ptr);
+
+ if(d->typ == String) {
+ QString q = toString();
+ int hour = parseNextNumber(&q);
+ int minute = parseNextNumber(&q);
+ int second = parseNextNumber(&q);
+ int msecond = parseNextNumber(&q);
+ if (!QTime::isValid(hour, minute, second, msecond))
+ return QTime();
+ return QTime(hour, minute, second, msecond);
+ }
+
+ return QTime();
+}
+
+#define TV_VARIANT_AS( f ) Q##f& TVVariant::as##f() { \
+ if ( d->typ != f ) \
+ *this = TVVariant( to##f() ); \
+ else \
+ detach(); \
+ return *((Q##f*)d->value.ptr); }
+
+TV_VARIANT_AS(String)
+TV_VARIANT_AS(Date)
+TV_VARIANT_AS(Time)
+
+#undef TV_VARIANT_AS
+
+int& TVVariant::asInt()
+{
+ detach();
+ if (d->typ != Int) {
+ d->value.i = toInt();
+ d->typ = Int;
+ }
+ return d->value.i;
+}
+
+/*!
+ valid cast is
+ anything to String
+ same to same
+*/
+bool TVVariant::canCast(KeyType t) const
+{
+ if(d->typ == t)
+ return TRUE;
+
+ if(t == String)
+ return TRUE;
+
+ if(t == Int) {
+ if (d->typ == Date)
+ return TRUE;
+ if (d->typ == Time)
+ return TRUE;
+ if (d->typ == String)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool TVVariant::operator==( const TVVariant &v ) const
+{
+ switch(d->typ) {
+ case String:
+ return v.toString() == toString();
+ case Date:
+ return v.toDate() == toDate();
+ case Time:
+ return v.toTime() == toTime();
+ case Int:
+ return v.toInt() == toInt();
+ case Invalid:
+ break;
+ }
+
+ return FALSE;
+}
+
+bool TVVariant::operator!=( const TVVariant &v ) const
+{
+ return !( v == *this);
+}
+
+bool TVVariant::operator<( const TVVariant &v ) const
+{
+ switch(d->typ) {
+ case String:
+ return toString().lower() < v.toString().lower();
+ case Date:
+ return toDate() < v.toDate();
+ case Time:
+ return toTime() < v.toTime();
+ case Int:
+ return toInt() < v.toInt();
+ case Invalid:
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+bool TVVariant::operator>( const TVVariant &v ) const
+{
+ switch(d->typ) {
+ case String:
+ return toString().lower() > v.toString().lower();
+ case Date:
+ return toDate() > v.toDate();
+ case Time:
+ return toTime() > v.toTime();
+ case Int:
+ return toInt() > v.toInt();
+ case Invalid:
+ default:
+ break;
+ }
+ return FALSE;
+}
+
+/*! True if n is closer to this than o */
+bool TVVariant::closer(TVVariant n, TVVariant o)
+{
+ /* Nothing is close to an invalid, so nothing can be closer */
+ if(d->typ == Invalid)
+ return FALSE;
+
+ /* can't be closer if of different type */
+ if(n.type() != type())
+ return FALSE;
+
+ /* if new shares type, and old doesn't, then new is closer */
+ if(o.type() != type())
+ return TRUE;
+
+ switch(type()){
+ case String: {
+ /* case for strings is close is a substring.. closer is
+ * earlier alphabetically */
+ QString qs1 = n.toString().lower();
+ QString qs2 = o.toString().lower();
+ QString qsv = toString().lower();
+
+ if (!qs1.startsWith(qsv))
+ return FALSE;
+
+ /* contains sub-str, if later than is not closer */
+ if(QString::compare(qs1, qs2) > 0)
+ return FALSE;
+ return TRUE;
+ }
+ case Int: {
+ /* case for int is smallest absolute difference */
+ int i1 = n.toInt();
+ int i2 = o.toInt();
+ int iv = toInt();
+
+ int diff1 = (i1 - iv);
+ if (diff1 < 0)
+ diff1 = -diff1;
+ int diff2 = (i2 - iv);
+ if (diff2 < 0)
+ diff2 = -diff2;
+
+ if (diff1 < diff2)
+ return TRUE;
+ return FALSE;
+ }
+ case Date: {
+ QDate i1 = n.toDate();
+ QDate i2 = o.toDate();
+ QDate iv = toDate();
+
+ /* definition of closer is the least difference in days */
+ int diff1 = i1.daysTo(iv);
+ if (diff1 < 0)
+ diff1 = -diff1;
+ int diff2 = i2.daysTo(iv);
+ if (diff2 < 0)
+ diff2 = -diff2;
+
+ if (diff1 < diff2)
+ return TRUE;
+ return FALSE;
+ }
+ case Time: {
+ QTime i1 = n.toTime();
+ QTime i2 = o.toTime();
+ QTime iv = toTime();
+
+ /* definition of closer is the least difference in days */
+ int diff1 = i1.msecsTo(iv);
+ if (diff1 < 0)
+ diff1 = -diff1;
+ int diff2 = i2.msecsTo(iv);
+ if (diff2 < 0)
+ diff2 = -diff2;
+ if (diff1 < diff2)
+ return TRUE;
+ return FALSE;
+ }
+ default:
+ /* don't know how to do 'closer' on this type, hence never closer
+ * or even close */
+ break;
+ }
+ return FALSE;
+}
+
+/*! True if n is close to this */
+bool TVVariant::close(TVVariant n)
+{
+ /* Nothing is close to an invalid, so nothing can be closer */
+ if(type() == Invalid)
+ return FALSE;
+
+ /* can't be close if of different type */
+ if(n.type() != type())
+ return FALSE;
+
+ switch(type()){
+ case String: {
+ /* case for strings is close is a substring.. closer is
+ * earlier alphabetically */
+ QString qs1 = n.toString().lower();
+ QString qsv = toString().lower();
+
+ if (!qs1.startsWith(qsv))
+ return FALSE;
+ return TRUE;
+ }
+ case Int:
+ case Date:
+ case Time:
+ return TRUE;
+ default:
+ /* don't know how to do 'closer' on this type, hence never closer
+ * or even close */
+ break;
+ }
+ return FALSE;
+}
+
+/*!
+ \class Key
+ \brief document me!
+
+ document me!
+*/
+
+Key::Key() : kname(), kexample(), kflags(0) { }
+
+Key::Key(QString name, TVVariant example, int flags = 0) :
+ kname(name), kexample(example), kflags(flags) { }
+
+Key::Key(const Key &other)
+{
+ kname = other.kname;
+ kexample = other.kexample;
+ kflags = other.kflags;
+}
+
+Key& Key::operator=(const Key& key)
+{
+ kname = key.kname;
+ kexample = key.kexample;
+ kflags = key.kflags;
+ return *this;
+}
+
+QString Key::name() const
+{
+ return QString(kname);
+}
+
+TVVariant Key::example() const
+{
+ return TVVariant(kexample);
+}
+
+TVVariant::KeyType Key::type() const
+{
+ return kexample.type();
+}
+
+void Key::setName(const QString &name)
+{
+ kname = QString(name);
+}
+
+void Key::setExample(const TVVariant &e)
+{
+ kexample = TVVariant(e);
+}
+
+int Key::flags() const
+{
+ return kflags;
+}
+
+void Key::setFlags(int fl)
+{
+ kflags = fl;
+}
+
+bool Key::delFlag() const
+{
+ if(kflags & del_flag)
+ return TRUE;
+ return FALSE;
+}
+
+bool Key::newFlag() const
+{
+ if(kflags & new_flag)
+ return TRUE;
+ return FALSE;
+}
+
+void Key::setDelFlag(bool v)
+{
+ if(delFlag() != v)
+ kflags = kflags ^ del_flag;
+}
+
+void Key::setNewFlag(bool v)
+{
+ if(newFlag() != v)
+ kflags = kflags ^ new_flag;
+}
+
+/*!
+ \class KeyList
+ \brief A represntation of keys used for a table.
+
+ The KeyList class is used to store the representation of keys used in table
+ headings by DBStore. It stores the names and types of the keys
+*/
+
+/*!
+ Constructs a KeyList
+*/
+KeyList::KeyList() : QIntDict<Key>(20)
+{
+ setAutoDelete(TRUE);
+}
+
+/* Should be deep copy, but isn't */
+KeyList::KeyList(const KeyList &k) : QIntDict<Key>(k)
+{
+ KeyListIterator it(k);
+ while(it.current()) {
+ replace(it.currentKey(), new Key(*it.current()));
+ ++it;
+ }
+
+ setAutoDelete(TRUE);
+}
+
+/*!
+ Destroys a KeyList
+*/
+KeyList::~KeyList() {
+}
+
+/* Do a comparision base on Keys */
+bool KeyList::operator!=(const KeyList &other)
+{
+ KeyListIterator it(*this);
+
+ if (other.getNumFields() != getNumFields())
+ return TRUE;
+
+ while(it.current()) {
+ //it.currentKey(), it.current();
+ if (other.getKeyName(it.currentKey()) != getKeyName(it.currentKey()))
+ return TRUE;
+ if (other.getKeyType(it.currentKey()) != getKeyType(it.currentKey()))
+ return TRUE;
+ ++it;
+ }
+ return FALSE;
+}
+
+/*!
+ Returns the number of keys stored in the KeyList
+*/
+int KeyList::getNumFields() const
+{
+ return count();
+}
+
+/*!
+ Adds a new key to the KeyList
+
+ \param name the name of the new key
+ \param type the type of the new key
+*/
+int KeyList::addKey(QString name, TVVariant example)
+{
+ int i = count();
+ while(find(i) && (i > -1))
+ i--;
+ replace(i, new Key(name, example, 0));
+ return i;
+}
+
+int KeyList::addKey(QString name, TVVariant::KeyType type)
+{
+ /* generate a valid type for the example? */
+ TVVariant e = TVVariant("0");
+ switch(type) {
+ case TVVariant::String:
+ return addKey(name, TVVariant("<undefined>").asString());
+ break;
+ case TVVariant::Date:
+ return addKey(name, TVVariant(QDate::currentDate()).asDate());
+ break;
+ case TVVariant::Time:
+ return addKey(name, TVVariant(QTime(0,0,0)).toTime());
+ break;
+ case TVVariant::Int:
+ return addKey(name, TVVariant(0).toInt());
+ break;
+ default:
+ qWarning(QObject::tr("KeyList::addKey() Cannot make default "
+ "value for type %1, Key not added.").arg(type));
+ break;
+ }
+ return -1;
+}
+
+void KeyList::setKeyFlags(int i, int flag)
+{
+ if(find(i))
+ find(i)->setFlags(flag);
+}
+
+int KeyList::getKeyFlags(int i) const
+{
+ if(find(i))
+ return find(i)->flags();
+ return 0;
+}
+
+bool KeyList::checkNewFlag(int i) const
+{
+ if (find(i))
+ return find(i)->newFlag();
+ return false;
+}
+
+void KeyList::setNewFlag(int i, bool f)
+{
+ if(!find(i))
+ return;
+ find(i)->setNewFlag(f);
+}
+
+bool KeyList::checkDeleteFlag(int i) const
+{
+ if (find(i))
+ return find(i)->delFlag();
+ return false;
+}
+
+void KeyList::setDeleteFlag(int i, bool f)
+{
+ if(!find(i))
+ return;
+ find(i)->setDelFlag(f);
+}
+
+/*!
+ Returns the name of the key at index i
+*/
+QString KeyList::getKeyName(int i) const
+{
+ if (find (i))
+ return find(i)->name();
+ return QString();
+}
+
+void KeyList::setKeyName(int i, const QString &n)
+{
+ if(find(i))
+ find(i)->setName(n);
+}
+
+/*!
+ Returns the type of the key at index i
+*/
+TVVariant::KeyType KeyList::getKeyType(int i) const
+{
+ if(find(i))
+ return find(i)->type();
+ return TVVariant::Invalid;
+}
+
+void KeyList::setKeyType(int i, TVVariant::KeyType t)
+{
+ if(!find(i))
+ return;
+ switch(t) {
+ case TVVariant::String:
+ find(i)->setExample(TVVariant(QString("default")));
+ return;
+ case TVVariant::Int:
+ find(i)->setExample(TVVariant(int(0)));
+ return;
+ case TVVariant::Date:
+ find(i)->setExample(TVVariant(QDate::currentDate()));
+ return;
+ case TVVariant::Time:
+ find(i)->setExample(TVVariant(QTime(0,0,0,0)));
+ return;
+ default:
+ break;
+ }
+ return;
+}
+
+TVVariant KeyList::getKeyExample(int i) const
+{
+ if(find(i))
+ return find(i)->example();
+ return TVVariant();
+}
+
+void KeyList::setKeyExample(int i, TVVariant example)
+{
+ if(find(i))
+ find(i)->setExample(example);
+}
+
+/*!
+ Returns the index of the key with name q
+*/
+int KeyList::getKeyIndex(QString q) const
+{
+ KeyListIterator it(*this);
+
+ while(it.current()) {
+ if(it.current()->name() == q)
+ return it.currentKey();
+ ++it;
+ }
+ return -1;
+}
+
+bool KeyList::validIndex(int i) const
+{
+ if(!find(i))
+ return FALSE;
+ if(find(i)->delFlag())
+ return FALSE;
+ return TRUE;
+}
+
+QDataStream &operator<<( QDataStream &s, const KeyList &k)
+{
+ s << k.getNumFields();
+
+ KeyListIterator it(k);
+
+ while(it.current()) {
+ s << (Q_UINT16)it.currentKey();
+ s << it.current()->name();
+ s << it.current()->example();
+ s << (Q_UINT16)it.current()->flags();
+ ++it;
+ }
+ return s;
+}
+
+QDataStream &operator>>( QDataStream &s, KeyList &k)
+{
+ int i;
+ int size;
+ int index = 0;
+ int flags = 0;
+ TVVariant type = TVVariant();
+ QString name;
+
+ s >> size;
+
+ for (i=0; i < size; i++) {
+ s >> (Q_UINT16 &)index;
+ s >> name;
+ s >> type;
+ s >> (Q_UINT16 &)flags;
+ k.replace(index, new Key(name, type, flags));
+ }
+ return s;
+}
+
+/*!
+ \class DataElem
+ \brief A class representing a single row or element of a table in a DBStore
+
+ This class holds the data of a row in a table.
+*/
+
+
+/*!
+ Constructs a DataElem. This function needs a container because the
+ size, types of keys and primary key are all defined by the containing
+ database
+*/
+DataElem::DataElem(DBStore *c) : values(20)
+{
+ int size;
+ contained = c;
+ size = c->getNumFields();
+ values.setAutoDelete(TRUE);
+}
+
+/*!
+ Destroys a DataElem and frees memory used by the DataElem
+*/
+DataElem::~DataElem() {
+}
+
+
+
+QDataStream &operator<<( QDataStream &s, const DataElem &d)
+{
+ int size = d.getNumFields();
+
+ s << size; /* redundent data but makes streaming easier */
+ KeyList k = d.getKeys();
+
+ KeyListIterator it(k);
+
+ while(it.current()) {
+ s << (Q_UINT16)it.currentKey();
+ s << d.getField(it.currentKey());
+ ++it;
+ }
+ return s;
+}
+
+QDataStream &operator>>( QDataStream &s, DataElem &d)
+{
+ int i;
+ int size;
+ TVVariant t;
+ int index = 0;
+
+ s >> size; /* redundent data but makes streaming easier */
+ if (size != d.getNumFields()) {
+ qWarning("DataSize mis-match");
+ return s; /* sanity check failed.. don't load */
+ }
+
+ for(i = 0; i < size; i++) {
+ s >> (Q_UINT16)index;
+ s >> t;
+ d.setField(index, t);
+ }
+ return s;
+}
+
+/*! Returns the number of possible (not valid) fields in the data element */
+int DataElem::getNumFields() const
+{
+ return contained->getNumFields();
+}
+
+KeyList DataElem::getKeys() const
+{
+ return *(contained->getKeys());
+}
+
+/*!
+ This function determines whether field index i of the element has been
+ set yet.
+
+ \return A boolean value that is TRUE if the specfied field of this
+ element has been set and FALSE if the field has not yet been set
+*/
+bool DataElem::hasValidValue(int i) const
+{
+ if(!values.find(i))
+ return FALSE;
+ if(!contained->getKeys()->validIndex(i))
+ return FALSE;
+ return values.find(i)->isValid();
+}
+
+/*!
+ This function determines whether field name qs of the element has been
+ set yet.
+
+ \return A boolean value that is TRUE if the specfied field of this
+ element has been set and FALSE if the field has not yet been set
+*/
+bool DataElem::hasValidValue(QString qs) const
+{
+ int i = contained->getKeyIndex(qs);
+ return hasValidValue(i);
+}
+
+/*! returns the type of the field specified by index i */
+TVVariant::KeyType DataElem::getFieldType(int i) const
+{
+ return contained->getKeyType(i);
+}
+
+/*! returns the type of the field specified by name qs */
+TVVariant::KeyType DataElem::getFieldType(QString qs) const
+{
+ int i = contained->getKeyIndex(qs);
+ return contained->getKeyType(i);
+}
+
+/*!
+ returns a pointer to the data stored in field index i for this
+ data element, (value may not be valid)
+*/
+TVVariant DataElem::getField(int i) const
+{
+ if(hasValidValue(i))
+ return TVVariant(*values.find(i));
+ return TVVariant();
+}
+
+/*!
+ returns a pointer to the data stored in field name qs for this
+ data element, (value may not be valid)
+*/
+TVVariant DataElem::getField(QString qs) const
+{
+ int i = contained->getKeyIndex(qs);
+ return getField(i);
+}
+
+/*!
+ Sets the value of the elements field index i to the value represented in
+ the QString q.
+
+ \param i index of the field to set
+ \param q a string that can be parsed to get the value to be set
+*/
+void DataElem::setField(int i, QString q)
+{
+ /* from the type of the field, parse q and store */
+ TVVariant::KeyType kt = contained->getKeyType(i);
+
+ TVVariant t = TVVariant(q);
+
+ switch(kt) {
+ case TVVariant::Int: {
+ t.asInt();
+ setField(i, t);
+ return;
+ }
+ case TVVariant::String: {
+ t.asString();
+ setField(i, t);
+ return;
+ }
+ case TVVariant::Date: {
+ t.asDate();
+ setField(i, t);
+ return;
+ }
+ case TVVariant::Time: {
+ t.asTime();
+ setField(i, t);
+ return;
+ }
+ default:
+ qWarning(
+ QObject::tr("DataElem::setField(%1, %2) No valid type found").arg(i).arg(q)
+ );
+ }
+}
+
+/*!
+ Sets the value of the elements field index i to the value at the pointer
+ value.
+
+ \param i index of the field to set
+ \param value a pointer to the (already allocated) value to set
+*/
+void DataElem::setField(int i, TVVariant value)
+{
+ if (value.isValid()) {
+ values.remove(i);
+ values.replace(i, new TVVariant(value));
+ }
+}
+
+/*!
+ Sets the value of the elements field name qs to the value represented in
+ the QString q.
+
+ \param qs name of the field to set
+ \param q a string that can be parsed to get the value to be set
+*/
+void DataElem::setField(QString qs, QString q)
+{
+ /* from the type of the field, parse q and store */
+ int i = contained->getKeyIndex(qs);
+ setField(i, qs);
+}
+
+/*!
+ Sets the value of the elements field name qs to the value at the pointer
+ value.
+
+ \param qs name of the field to set
+ \param value a pointer to the (already allocated) value to set
+*/
+void DataElem::setField(QString qs, TVVariant value)
+{
+ int i = contained->getKeyIndex(qs);
+ setField(i, value);
+}
+
+void DataElem::unsetField(int i) {
+ values.remove(i);
+}
+
+void DataElem::unsetField(QString qs)
+{
+ int i = contained->getKeyIndex(qs);
+ unsetField(i);
+}
+
+/*!
+ Converts the data element to a Rich Text QString
+*/
+QString DataElem::toQString() const
+{
+ /* lets make an attempt at this function */
+ int i;
+ QString scratch = "";
+
+ QIntDictIterator<TVVariant> it(values);
+
+ while (it.current()) {
+ i = it.currentKey();
+ if(hasValidValue(i)) {
+ scratch += "<B>" + contained->getKeyName(i) + ":</B> ";
+ scratch += getField(i).toString();
+ scratch += "<br>";
+ }
+ ++it;
+ }
+ return scratch;
+}
+
+/*! formats individual fields to strings so can be displayed */
+QString DataElem::toQString(int i) const
+{
+ if(hasValidValue(i)) {
+ return getField(i).toString();
+ }
+ return "";
+}
+/*! formats individual fields to strings so can be sorted by QListView */
+QString DataElem::toSortableQString(int i) const
+{
+ QString scratch = "";
+ if(hasValidValue(i)) {
+ switch (contained->getKeyType(i)) {
+ case TVVariant::String: {
+ scratch += getField(i).toString();
+ break;
+ }
+ case TVVariant::Int: {
+ scratch.sprintf("%08d", getField(i).toInt());
+ break;
+ }
+ case TVVariant::Date: {
+ static QDate epochD(1800, 1, 1);
+ scratch.sprintf("%08d",
+ epochD.daysTo(getField(i).toDate()));
+ break;
+ }
+ case TVVariant::Time: {
+ static QTime epochT(0, 0, 0);
+ scratch.sprintf("%08d",
+ epochT.msecsTo(getField(i).toTime()));
+ break;
+ }
+ default:
+ scratch += "Unknown type";
+ break;
+ }
+ }
+ return scratch;
+}
+
+/* compare functions */
+
+bool DataElem::lessThan(int i, TVVariant v) const
+{
+ if (!hasValidValue(i)) return FALSE;
+
+ if (getField(i).type() != v.type())
+ return FALSE;
+
+ return (getField(i) < v);
+}
+
+bool DataElem::moreThan(int i, TVVariant v) const
+{
+ if (!hasValidValue(i)) return FALSE;
+
+ if (getField(i).type() != v.type())
+ return FALSE;
+
+ return (getField(i) > v);
+}
+
+bool DataElem::equalTo(int i, TVVariant v) const
+{
+ if (!hasValidValue(i)) return FALSE;
+
+ if (getField(i).type() != v.type())
+ return FALSE;
+
+ return (getField(i) == v);
+}
+
+bool DataElem::contains(int i, TVVariant v) const
+{
+ if (!hasValidValue(i)) return FALSE;
+
+ if (getField(i).type() != v.type())
+ return FALSE;
+
+ switch(getField(i).type()) {
+ case TVVariant::String: {
+ QString qs1 = getField(i).toString().lower();
+ QString qs2 = v.toString().lower();
+ if (qs1.contains(qs2) > 0) return TRUE;
+ break;
+ }
+ /* meaningless for ints */
+ /* meaningless for time */
+ /* meaningless for dates */
+ case TVVariant::Int:
+ case TVVariant::Time:
+ case TVVariant::Date:
+ break;
+ default:
+ qWarning("Tried to compare unknown data type");
+ }
+ return FALSE;
+}
+
+bool DataElem::startsWith(int i, TVVariant v) const
+{
+ if (!hasValidValue(i)) return FALSE;
+
+ if (getField(i).type() != v.type())
+ return FALSE;
+
+ switch(getField(i).type()) {
+ case TVVariant::String: {
+ QString qs1 = getField(i).toString().lower();
+ QString qs2 = v.toString().lower();
+ return qs1.startsWith(qs2);
+ }
+ /* meaningless for ints */
+ /* meaningless for time */
+ /* meaningless for dates */
+ case TVVariant::Int:
+ case TVVariant::Time:
+ case TVVariant::Date:
+ return FALSE;
+ default:
+ qWarning("Tried to compare unknown data type");
+ }
+ return FALSE;
+}
+
+bool DataElem::endsWith(int i, TVVariant v) const
+{
+ if (!hasValidValue(i)) return FALSE;
+
+ if (getField(i).type() != v.type())
+ return FALSE;
+
+ switch(getField(i).type()) {
+ case TVVariant::String: {
+ QString qs1 = getField(i).toString().lower();
+ QString qs2 = v.toString().lower();
+ return qs1.startsWith(qs2);
+ }
+ /* meaningless for ints */
+ /* meaningless for time */
+ /* meaningless for dates */
+ case TVVariant::Int:
+ case TVVariant::Time:
+ case TVVariant::Date:
+ return FALSE;
+ default:
+ qWarning("Tried to compare unknown data type");
+ }
+ return FALSE;
+}
+
+/*!
+ Determins which of the first to parameters are closer to the third, target
+ parameter.
+
+ \return
+ <UL>
+ <LI>TRUE if the first element is a closer match to the target than the
+ second element</LI>
+ <LI>FALSE if the first element is not a closer match to the target than
+ the second element</LI>
+ </UL>
+*/
+bool DataElem::closer(DataElem*d1, DataElem *d2, TVVariant target, int column)
+{
+ int type;
+
+ if(!d1) return FALSE;
+
+ if (!d1->hasValidValue(column)) return FALSE;
+
+ if(!target.isValid()) return FALSE;
+
+ type = d1->getField(column).type();
+
+ if(d2) {
+ if (type != d2->getField(column).type()) {
+ /* can't do compare */
+ qWarning("Tried to compare two incompatable types");
+ return FALSE;
+ }
+ return target.closer(d1->getField(column), d2->getField(column));
+ }
+ return target.close(d1->getField(column));
+}
diff --git a/noncore/apps/tableviewer/db/common.h b/noncore/apps/tableviewer/db/common.h
new file mode 100644
index 0000000..bb0a953
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/common.h
@@ -0,0 +1,285 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+/* This file represents shared data structures that will be passed
+ * around often.
+ */
+#ifndef __SHAREDDATA_H__
+#define __SHAREDDATA_H__
+
+// TODO rename this to a sensable class name
+
+#include <qvector.h>
+#include <qstring.h>
+#include <qdatetime.h>
+#include <qcstring.h>
+#include <qdatastream.h>
+#include <qintdict.h>
+
+class DBStore;
+
+/* helper classes to common classes */
+class QStringVector : public QVector<QString>
+{
+public:
+ int compareItems(Item a, Item b);
+};
+
+/* in QT 2.3, dates and times not supported int QVariant. So.....
+ * for now use my special Variant type which is basically identical
+ * except that does it for my types. TODO replace with QVariant when
+ * qvariant supports all the types we require */
+
+class TVVariantPrivate;
+
+class TVVariant
+{
+public:
+ enum KeyType {
+ Invalid = 0,
+ Int,
+ String,
+ Date,
+ Time,
+ };
+
+ TVVariant();
+ ~TVVariant();
+
+ TVVariant(const TVVariant&);
+ TVVariant(QDataStream&);
+
+ TVVariant(const QString &);
+ TVVariant(const int);
+ TVVariant(const QDate &);
+ TVVariant(const QTime &);
+
+ TVVariant& operator=(const TVVariant& );
+ bool operator==(const TVVariant&) const;
+ bool operator!=(const TVVariant&) const;
+ bool operator<(const TVVariant&) const;
+ bool operator>(const TVVariant&) const;
+
+ bool closer(TVVariant, TVVariant);
+ bool close(TVVariant);
+
+ KeyType type() const;
+ const QString typeName() const;
+ int numTypes() const;
+
+ const QString typeName(KeyType) const;
+ bool canCast(KeyType) const;
+ bool isValid() const;
+ void clear();
+
+ const QString toString() const;
+ const QDate toDate() const;
+ const QTime toTime() const;
+ int toInt() const;
+
+ QString& asString();
+ QDate& asDate();
+ QTime& asTime();
+ int& asInt();
+
+ void load(QDataStream&);
+ void save(QDataStream&) const;
+
+ static const QString typeToName(KeyType typ);
+ static KeyType nameToType(const QString &);
+private:
+ void detach();
+
+ TVVariantPrivate *d;
+};
+
+class TVVariantPrivate : public QShared
+{
+ public:
+ TVVariantPrivate();
+ TVVariantPrivate(TVVariantPrivate *);
+
+ ~TVVariantPrivate();
+
+ void clear();
+
+ TVVariant::KeyType typ;
+
+ union {
+ int i;
+ void *ptr;
+ } value;
+};
+
+inline TVVariant::KeyType TVVariant::type() const
+{
+ return d->typ;
+}
+
+inline bool TVVariant::isValid() const
+{
+ return (d->typ != Invalid);
+}
+
+inline int TVVariant::numTypes() const
+{
+ return 4;
+}
+
+class Key {
+public:
+ Key();
+ Key(QString name, TVVariant example, int flags = 0);
+ Key(const Key &);
+ Key& operator=(const Key& );
+
+ QString name() const;
+ TVVariant example() const;
+ TVVariant::KeyType type() const;
+ int flags() const;
+
+ void setName(const QString &);
+ void setExample(const TVVariant &);
+ void setFlags(int);
+
+ bool delFlag() const;
+ bool newFlag() const;
+
+ void setDelFlag(bool);
+ void setNewFlag(bool);
+
+private:
+ QString kname;
+ TVVariant kexample;
+ int kflags;
+};
+
+class KeyList : public QIntDict<Key> {
+public:
+ KeyList();
+ KeyList(const KeyList&);
+
+ ~KeyList();
+
+ bool operator!=(const KeyList &);
+
+ int getNumFields() const;
+
+ int addKey(QString KeyName, TVVariant example);
+ int addKey(QString KeyName, TVVariant::KeyType type);
+
+ TVVariant getKeyExample(int ) const;
+ void setKeyExample(int, TVVariant e);
+
+ QString getKeyName(int i) const;
+ void setKeyName(int i, const QString &n);
+
+ TVVariant::KeyType getKeyType(int i) const;
+ void setKeyType(int i, TVVariant::KeyType);
+
+ int getKeyIndex(QString q) const;
+
+ int getKeyFlags(int i) const;
+ void setKeyFlags(int i, int flag);
+
+ /* Below should be abstracted a bit more */
+ bool checkNewFlag(int i) const;
+ void setNewFlag(int i, bool f);
+ bool checkDeleteFlag(int i) const;
+ void setDeleteFlag(int i, bool f);
+
+ bool validIndex(int) const;
+};
+
+class KeyListIterator : public QIntDictIterator<Key>
+{
+public:
+ KeyListIterator(const KeyList &k) : QIntDictIterator<Key>(k) {};
+};
+
+/* TODO start using this */
+class DataElem {
+public:
+ DataElem(DBStore *container);
+ ~DataElem();
+
+ int getNumFields() const;
+ KeyList getKeys() const;
+
+ bool hasValidValue(int) const;
+ bool hasValidValue(QString) const;
+ TVVariant::KeyType getFieldType(int) const;
+ TVVariant::KeyType getFieldType(QString) const;
+ TVVariant getField(int) const;
+ TVVariant getField(QString) const;
+
+ void setField(int, QString);
+ void setField(int, TVVariant);
+ void setField(QString, QString);
+ void setField(QString, TVVariant);
+ void unsetField(int);
+ void unsetField(QString);
+
+ QString toQString() const;
+ QString toQString(int i) const;
+ QString toSortableQString(int i) const;
+
+ /* compare functions */
+ bool lessThan(int i, TVVariant) const;
+ bool moreThan(int i, TVVariant) const;
+ bool equalTo(int i, TVVariant) const;
+ bool contains(int i, TVVariant) const;
+ bool startsWith(int i, TVVariant) const;
+ bool endsWith(int i, TVVariant) const;
+
+ /* class functions... Compare is based of the primary key, which
+ is determined by the containing DBStores of each element. */
+ static int compare(const TVVariant, const TVVariant, int i);
+
+ /* False, second element's primary key is closer to target.
+ * True, first element's primary key is a closer match to target */
+ static bool closer(DataElem*, DataElem *, TVVariant, int column);
+private:
+ QIntDict<TVVariant> values;
+ DBStore *contained;
+};
+
+typedef struct _TableState {
+ int current_column;
+ KeyList *kRep;
+ DataElem *current_elem;
+} TableState;
+
+/* Stream functions */
+#ifndef QT_NO_DATASTREAM
+Q_EXPORT QDataStream &operator<<( QDataStream &, const KeyList & );
+Q_EXPORT QDataStream &operator<<( QDataStream &, const DataElem & );
+Q_EXPORT QDataStream &operator>>( QDataStream &, KeyList & );
+Q_EXPORT QDataStream &operator>>( QDataStream &, DataElem & );
+
+
+Q_EXPORT QDataStream &operator>>( QDataStream &, TVVariant & );
+Q_EXPORT QDataStream &operator<<( QDataStream &, const TVVariant & );
+Q_EXPORT QDataStream &operator>>( QDataStream &, TVVariant::KeyType& );
+Q_EXPORT QDataStream &operator<<( QDataStream &, const TVVariant::KeyType& );
+#endif
+
+#endif
diff --git a/noncore/apps/tableviewer/db/csvsource.cpp b/noncore/apps/tableviewer/db/csvsource.cpp
new file mode 100644
index 0000000..2561b4b
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/csvsource.cpp
@@ -0,0 +1,207 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "csvsource.h"
+#include "common.h"
+#include "datacache.h"
+#include <qtextstream.h>
+#include <qstringlist.h>
+#include <qmap.h>
+#include <qregexp.h>
+
+DBCsv::DBCsv(DBStore *d)
+{
+ dstore = d;
+}
+
+DBCsv::~DBCsv()
+{
+}
+
+QString DBCsv::type()
+{
+ return "csv";
+}
+
+QStringList readElem(QString in)
+{
+ QStringList out;
+
+ if (in.isEmpty())
+ return out;
+
+ bool firstChar = TRUE;
+ bool quotedElem = FALSE;
+ uint index = 0;
+ while(index < in.length()) {
+ if(firstChar) {
+ /* skip whitespace */
+ while(index < in.length() && in[index] == ' ')
+ index++;
+ if(in[index] == '"') {
+ quotedElem = TRUE;
+ index++;
+ }
+ }
+ /* real first char */
+ QString elem;
+ if(quotedElem) {
+ while(index < in.length() && in[index] != '"') {
+ /* check for escape character */
+ if (in[index] == '\\') {
+ if (index++ < in.length()) {
+ elem.append(in[index]);
+ index++;
+ }
+ } else {
+ elem.append(in[index]);
+ index++;
+ }
+ }
+ } else {
+ while(index < in.length() && in[index] != ',') {
+ if (in[index] == '\\') {
+ if (index++ < in.length()) {
+ elem.append(in[index]);
+ index++;
+ }
+ } else {
+ elem.append(in[index]);
+ index++;
+ }
+ }
+ }
+ /* we have our current elem */
+ out << elem.stripWhiteSpace();
+ firstChar = TRUE;
+ quotedElem = FALSE;
+ /* skip till a , or end of line */
+ while (index < in.length() && in[index] != ',') index++;
+ if(index == in.length())
+ return out;
+ else
+ index++;
+ }
+}
+
+bool DBCsv::openSource(QIODevice *inDev)
+{
+ QTextStream tsIn(inDev);
+ QString in = tsIn.readLine().stripWhiteSpace();
+ QStringList keys;
+
+ keys = readElem(in);
+
+ QMap<int,int> keyIndexes;
+
+ KeyList *keyR = new KeyList();
+ QStringList::Iterator i = keys.begin();
+
+ uint fileIndex = 0;
+ while(i != keys.end()) {
+ if ((*i).isEmpty())
+ keyIndexes.insert(fileIndex, keyR->addKey("Unamed", TVVariant::String));
+ else
+ keyIndexes.insert(fileIndex, keyR->addKey(*i, TVVariant::String));
+ i++;
+ fileIndex++;
+ }
+ dstore->setKeys(keyR);
+
+ in = tsIn.readLine().stripWhiteSpace();
+ while(!in.isNull()) {
+ QStringList elems = readElem(in);
+
+ i = elems.begin();
+ fileIndex = 0;
+ DataElem *current_data = new DataElem(dstore);
+ while(i != elems.end()) {
+ if(!(*i).isEmpty()) {
+ current_data->setField(keyIndexes[fileIndex], *i);
+ }
+ fileIndex++;
+ i++;
+ }
+ dstore->addItem(current_data);
+ in = tsIn.readLine().stripWhiteSpace();
+ }
+
+ return TRUE;
+}
+
+bool DBCsv::saveSource(QIODevice *outDev)
+{
+ /* try not to use the escape character when possible. */
+ int i;
+ DataElem *elem;
+ KeyList *k;
+ QTextStream outstream(outDev);
+
+ k = dstore->getKeys();
+ KeyListIterator it(*k);
+ while(it.current()) {
+ if(!it.current()->delFlag()) {
+ QString name = it.current()->name();
+
+ name.replace(QRegExp("\\"), "\\\\");
+ name.replace(QRegExp("\""), "\\\"");
+ if(name.find(',') != -1) {
+ name.prepend('\"');
+ name.append('\"');
+ }
+
+ outstream << name;
+ }
+ ++it;
+ if(it.current())
+ outstream << ", ";
+ }
+ outstream << "\n";
+
+ dstore->first();
+
+ do {
+ elem = dstore->getCurrentData();
+ if(!elem)
+ break;
+ it.toFirst();
+ while(it.current()) {
+ i = it.currentKey();
+ if (elem->hasValidValue(i)) {
+ QString name = elem->toQString(i);
+
+ name.replace(QRegExp("\\"), "\\\\");
+ name.replace(QRegExp("\""), "\\\"");
+ if(name.find(',') != -1) {
+ name.prepend('\"');
+ name.append('\"');
+ }
+
+ outstream << name;
+ }
+ ++it;
+ if(it.current())
+ outstream << ", ";
+ }
+ outstream << "\n";
+ } while (dstore->next());
+
+ return TRUE;
+}
+
diff --git a/noncore/apps/tableviewer/db/csvsource.h b/noncore/apps/tableviewer/db/csvsource.h
new file mode 100644
index 0000000..691234c
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/csvsource.h
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/* A Class to parse an comma seperated values docment of the form
+
+"Displayed Name", key2name, key 3 name, key name 4
+value1, , value 3, "value 4"
+value1, , value 3, "value 4"
+
+ * '\' is the escape character. Basically \", \' and \\ escape the ", ' or \
+ * into the actual value of the field.
+ * Before any other character will have the effect of dropping the '\'.
+ *
+ * Currently there is no support for comments. */
+
+#ifndef __CSVSOURCE_H__
+#define __CSVSOURCE_H__
+
+#include <qstring.h>
+#include "datacache.h"
+#include "common.h"
+
+
+class DBCsv : public DBAccess
+{
+public:
+ /* create connection and either open or initialize */
+ DBCsv(DBStore *d);
+ QString type();
+ bool openSource(QIODevice *);
+ bool saveSource(QIODevice *);
+ /* does a db write */
+ ~DBCsv();
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/db/datacache.cpp b/noncore/apps/tableviewer/db/datacache.cpp
new file mode 100644
index 0000000..7c14eef
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/datacache.cpp
@@ -0,0 +1,293 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+/*
+ * This file is used to load the xml files that represent the database.
+ * The main requirment for said file is each data entry must contain a key,
+ * otherwise any other data headings are allowed.
+ */
+
+#include "datacache.h"
+#include "xmlsource.h"
+#include "csvsource.h"
+#include <stdlib.h>
+#include <qheader.h>
+
+#define INIT_TABLE_SIZE 128
+
+/*!
+ \class DBStore datastore.h
+
+ \brief The DBStore class is the class responsible for storing, sorting and
+ searching the data loaded by the application
+
+*/
+
+/*!
+ Constructs a DBStore item
+*/
+DBStore::DBStore()
+{
+ name = "";
+ number_elems = 0;
+ full = false;
+ kRep = new KeyList();
+ master_table.resize(INIT_TABLE_SIZE);
+ table_size = INIT_TABLE_SIZE;
+
+ current_elem = 0;
+ archive = 0;
+}
+
+//TODO
+/*!
+ Reinitializes the table to empty (include a resize of the master table,
+ which should free some memory)
+*/
+void DBStore::freeTable()
+{
+ name = "";
+ if(archive) {
+ delete archive;
+ archive = 0;
+ }
+ kRep->clear(); /* clear the current key list */
+
+ number_elems = 0;
+ table_size = INIT_TABLE_SIZE;
+ master_table.resize(table_size);
+ full = false;
+ current_elem = 0;
+}
+
+/*!
+ Removes all items from the DBStore and destroys the DBStore
+*/
+DBStore::~DBStore()
+{
+ freeTable();
+}
+
+/*!
+ This function opens the given xml file, loads it and sets up the
+ appropriate data structures.
+
+ \param file_name A string representing the name of the file to be opened
+ \return true if successful, false otherwise.
+*/
+bool DBStore::openSource(QIODevice *inDev, const QString &source) {
+
+ /* first check if db is already open, if contains data.. then clear */
+ if(number_elems > 0) {
+ freeTable();
+ }
+
+ if (source == "text/x-xml-tableviewer") {
+ archive = new DBXml(this);
+ } else if (source == "text/csv") {
+ archive = new DBCsv(this);
+ } else
+ return false;
+
+ return (archive->openSource(inDev));
+}
+
+bool DBStore::saveSource(QIODevice *outDev, const QString &source)
+{
+ /* saving a new file */
+ if(!archive) {
+ if (source == "text/x-xml-tableviewer") {
+ archive = new DBXml(this);
+ } else if (source == "text/x-xml-tableviewer") {
+ archive = new DBCsv(this);
+ } else
+ return false;
+ }
+
+ /* changing file type */
+ if(archive->type() != source) {
+ delete archive;
+ if (source == "text/x-xml-tableviewer") {
+ archive = new DBXml(this);
+ } else if (source == "text/x-xml-tableviewer") {
+ archive = new DBCsv(this);
+ } else
+ return false;
+ }
+
+ return (archive->saveSource(outDev));
+}
+
+/*!
+ This function is used to add new elements to the database. If the database
+ has already reached the maximum allowable size this function does not alter
+ the database.
+
+ \param delm An already allocated and initialized data element to be added
+*/
+void DBStore::addItem(DataElem *delem)
+{
+ addItemInternal(delem);
+}
+
+void DBStore::addItemInternal(DataElem *delem)
+{
+ /* if already full, don't over fill, do a qWarning though */
+ if (full) {
+ qWarning("Attempted to add items to already full table");
+ return;
+ }
+
+ master_table.insert(number_elems, delem);
+
+ current_elem = number_elems;
+ number_elems++;
+
+ if(number_elems >= table_size) {
+ /* filled current table, double if we can */
+ table_size = table_size << 1;
+
+ /* check that the new table size is still valid, i.e. that we didn't
+ just shift the 1 bit of the end of the int. */
+ if (!table_size) {
+ full = true;
+ /* no point in doing antying else. */
+ return;
+ }
+ master_table.resize(table_size);
+ }
+}
+
+void DBStore::removeItem(DataElem *r)
+{
+ int position = master_table.findRef(r);
+ if(position != -1) {
+ /* there is at least one item, this is it */
+ /* replace this with the last element, decrease the element count */
+ master_table.insert(position, master_table.at(--number_elems));
+ master_table.remove(number_elems);
+ delete r;
+ }
+}
+
+/*!
+ Sets the name of the database
+
+ \param n A string representing the new name of the database.
+*/
+void DBStore::setName(const QString &n)
+{
+ name = n;
+}
+
+/*!
+ Gets the name of the database
+
+ \return A string representing the name of the database.
+*/
+QString DBStore::getName()
+{
+ return name;
+}
+
+/*!
+ Retrieves a pointer to the key representation of the database for
+ other classes to use as reference.
+
+ \return a pointer to the databases key representaion
+*/
+KeyList *DBStore::getKeys()
+{
+ return kRep;
+}
+
+/*!
+ sets the database's key representation the passed pointer
+ \param a pointer to a key representaton
+*/
+void DBStore::setKeys(KeyList *k)
+{
+ kRep = k;
+}
+
+/*!
+ Sets the current element to the first element of the database
+*/
+void DBStore::first()
+{
+ current_elem = 0;
+}
+
+/*!
+ Sets the current element to the last element of the database
+*/
+void DBStore::last()
+{
+ current_elem = number_elems - 1;
+}
+
+/*!
+ Sets the current element to the next element of the database if
+ there exists an element after the current one.
+*/
+bool DBStore::next()
+{
+ unsigned int new_current_elem = current_elem + 1;
+ if (current_elem < number_elems)
+ /* was valid before inc (it is possible but unlikely that inc current
+ elem will change it from invalid to valid) */
+ if (new_current_elem < number_elems) {
+ /* is valid after inc */
+ current_elem = new_current_elem;
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Sets the current element to the previous element of the database if
+ there exists an element before the current one.
+*/
+bool DBStore::previous()
+{
+ unsigned int new_current_elem = current_elem -1;
+ if (current_elem < number_elems)
+ /* was valid */
+ if (new_current_elem < number_elems) {
+ /* still is (if was 0, then now -1, but as is unsigned will wrap
+ and hence be invalid */
+ current_elem = new_current_elem;
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Returns the current data element in the database. Which element is current
+ is affected by newly added items, findItem, next, previous, first and
+ last functions
+
+ \return a pointer to the current data element
+*/
+DataElem *DBStore::getCurrentData()
+{
+ if (current_elem >= number_elems)
+ return NULL;
+ return master_table[current_elem];
+}
diff --git a/noncore/apps/tableviewer/db/datacache.h b/noncore/apps/tableviewer/db/datacache.h
new file mode 100644
index 0000000..c5dc637
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/datacache.h
@@ -0,0 +1,130 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/*
+ * This file is used to load the xml files that represent the database.
+ * The main requirment for said file is each data entry must contain a key,
+ * otherwise any other data headings are allowed.
+ */
+
+#ifndef __DATACACHE_H__
+#define __DATACACHE_H__
+
+#include <qstring.h>
+#include <qvector.h>
+#include "common.h"
+
+class DBStore;
+
+/*! Abstract class that defines how database stuff can be accessed */
+class DBAccess {
+public:
+
+// DBAccess(DBStore *d) { dstore = d; }
+ virtual ~DBAccess() {}
+
+ virtual QString type() {
+ return QString();
+ }
+
+ virtual bool openSource(QIODevice *) {
+ qWarning("DBAccess::openSource not yet implemented");
+ return false;
+ }
+
+ virtual bool saveSource(QIODevice *) {
+ qWarning("DBAccess::saveSource(QString) not yet implemented");
+ return false;
+ }
+
+protected:
+ DBStore *dstore;
+ QString source_name;
+};
+
+class DBStore {
+public:
+ DBStore();
+ ~DBStore();
+
+ bool openSource(QIODevice *, const QString &source);
+ bool saveSource(QIODevice *, const QString &source);
+
+ // Add an item
+ void addItem(DataElem *);
+ void addItemInternal(DataElem *);
+ void removeItem(DataElem *);
+
+ // Set the name of the database
+ void setName(const QString &name);
+
+ // Get the name of the database
+ QString getName();
+
+ KeyList *getKeys();
+ void setKeys(KeyList *);
+
+ /*! gets the number of fields defined in the database */
+ inline int getNumFields() {
+ return kRep->getNumFields();
+ }
+
+ /*! gets the index of a key given its name */
+ inline int getKeyIndex(QString qs) {
+ return kRep->getKeyIndex(qs);
+ }
+
+ /*! gets the type of a key given its index */
+ inline TVVariant::KeyType getKeyType(int i) {
+ return kRep->getKeyType(i);
+ }
+
+ /*! gets the name of a key given its index */
+ inline QString getKeyName(int i) {
+ return kRep->getKeyName(i);
+ }
+
+// Access functions.. iterator type stuff
+
+ void first();
+ void last();
+
+ bool next();
+ bool previous();
+
+ DataElem* getCurrentData();
+
+private:
+ /* does the work of freeing used memory */
+ void freeTable();
+ QString name;
+
+ QVector<DataElem> master_table;
+ DBAccess *archive;
+
+ KeyList *kRep;
+
+ unsigned int number_elems;
+ unsigned int table_size; /* should always be a power of 2 */
+ bool full; /* since because we are using an int for indexing there is
+ an upper limit on the number of items we can store. */
+ unsigned int current_elem;
+};
+#endif
diff --git a/noncore/apps/tableviewer/db/xmlsource.cpp b/noncore/apps/tableviewer/db/xmlsource.cpp
new file mode 100644
index 0000000..7418a85
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/xmlsource.cpp
@@ -0,0 +1,295 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "xmlsource.h"
+#include <qdict.h>
+#include <stdlib.h>
+#include <qtextstream.h>
+
+
+DBXml::DBXml(DBStore *d)
+{
+ dstore = d;
+}
+
+QString DBXml::type()
+{
+ return "xml";
+}
+
+bool DBXml::openSource(QIODevice *inDev)
+{
+ bool ok;
+
+ DBXmlHandler h(dstore);
+
+ QTextStream tsIn(inDev);
+ QXmlInputSource source(tsIn);
+ QXmlSimpleReader reader;
+ reader.setContentHandler(&h);
+ reader.setErrorHandler(&h);
+ ok = reader.parse(source);
+
+ return ok;
+}
+
+bool DBXml::saveSource(QIODevice *outDev)
+{
+ int i;
+ DataElem *elem;
+ KeyList *k;
+
+ QTextStream outstream(outDev);
+
+ outstream << "<database name=\"" << dstore->getName() << "\">" << endl;
+ outstream << "<header>" << endl;
+
+ k = dstore->getKeys();
+ KeyListIterator it(*k);
+ while(it.current()) {
+ if (!it.current()->delFlag()) {
+ outstream << "<key name=\"KEYID" << it.currentKey() << "\" ";
+ outstream << "type=\""
+ << TVVariant::typeToName(it.current()->type())
+ << "\">";
+ outstream << it.current()->name() << "</key>" << endl;
+ }
+ ++it;
+ }
+
+ outstream << "</header>" << endl;
+
+ dstore->first();
+
+ do {
+ elem = dstore->getCurrentData();
+ if (!elem)
+ break;
+ outstream << "<record>" << endl;
+ it.toFirst();
+ while (it.current()) {
+ i = it.currentKey();
+ if (elem->hasValidValue(i)) {
+ outstream << "<KEYID" << i << ">";
+ if (dstore->getKeyType(i) == TVVariant::Date) {
+ // dates in files are different from displayed dates
+ QDate date = elem->getField(i).toDate();
+ outstream << date.day() << "/"
+ << date.month() << "/"
+ << date.year();
+ } else {
+ outstream << elem->toQString(i);
+ }
+ outstream << "</KEYID" << i << ">" << endl;
+ }
+ ++it;
+ }
+ outstream << "</record>" << endl;
+ } while(dstore->next());
+
+ outstream << "</database>" << endl;
+ return TRUE;
+}
+
+DBXml::~DBXml() {}
+
+/*!
+ \class DBXmlHandler
+ \brief An Xml parser for flat tables.
+
+ An xml parser for parsing the files used by the table viewer application.
+
+ The format of the xml files can be found at the front of the file
+ dataparser.h
+*/
+
+/*!
+ Constructs a new DBXmlHandler, and sets that the table should be
+ constructed in the DBStore pointed to by ds.
+*/
+DBXmlHandler::DBXmlHandler(DBStore *ds)
+{
+ data_store = ds;
+ current_keyrep = 0;
+}
+
+/*!
+ Destroys the DBXmlHandler
+*/
+DBXmlHandler::~DBXmlHandler()
+{
+}
+
+QString DBXmlHandler::errorProtocol()
+{
+ qWarning("Error reading file");
+ return errorProt;
+}
+
+bool DBXmlHandler::startDocument()
+{
+ errorProt = "";
+ state = StateInit;
+ return TRUE;
+}
+
+bool DBXmlHandler::startElement(const QString&, const QString&,
+ const QString& qName, const QXmlAttributes& atts)
+{
+ if (state == StateInit && qName == "database") {
+ // First thing it expects is a <document name="..."> tag
+ state = StateDocument;
+ data_store->setName(atts.value("name"));
+ return TRUE;
+ }
+ if (state == StateDocument && qName == "header") {
+ state = StateHeader;
+ if (current_keyrep) delete current_keyrep;
+ current_keyrep = new KeyList();
+ return TRUE;
+ }
+ if (state == StateHeader && qName == "key") {
+ /* Ok, adding a new key to our KeyList TODO */
+ state = StateKey;
+ last_key_type = TVVariant::String;
+ key = atts.value("name");
+ if (key.isEmpty()) {
+ qWarning("empty key name");
+ return FALSE;
+ }
+ if(!atts.value("type").isEmpty())
+ last_key_type = TVVariant::nameToType(atts.value("type"));
+ return TRUE;
+ }
+ if (state == StateDocument && qName == "record") {
+ state = StateRecord;
+ current_data = new DataElem(data_store);
+ // Now expecting a <record> tag
+ return TRUE;
+ }
+ if (state == StateRecord) {
+ state = StateField;
+ /* the qName is the name of a key */
+ if (!keyIndexList[qName]) {
+ /* invalid key, we failed */
+ qWarning("Invalid key in record");
+ return FALSE;
+ }
+ keyIndex = *keyIndexList[qName];
+ return TRUE;
+ }
+ qWarning("Unable to determine tag type");
+ return FALSE;
+}
+
+bool DBXmlHandler::endElement(const QString&, const QString&,
+ const QString& qName)
+{
+ switch(state) {
+ case StateField:
+ // TODO checks 'could' be done of the popped value
+ state = StateRecord;
+ break;
+ case StateKey:
+ // TODO checks 'could' be done of the popped value
+ state = StateHeader;
+ break;
+ case StateHeader:
+ data_store->setKeys(current_keyrep);
+ state = StateDocument;
+ break;
+ case StateRecord:
+ data_store->addItem(current_data);
+ state = StateDocument;
+ break;
+ case StateDocument:
+ // we are done...
+ break;
+ default:
+ // should only get a 'endElement' from one of the above states.
+ qWarning("Invalid end tag");
+ return FALSE;
+ break;
+ }
+ return TRUE;
+}
+
+bool DBXmlHandler::characters(const QString& ch)
+{
+ // this is where the 'between tag' stuff happens.
+ // e.g. the stuff between tags.
+ QString ch_simplified = ch.simplifyWhiteSpace();
+
+ if (ch_simplified.isEmpty())
+ return TRUE;
+
+ if (state == StateKey) {
+ int *tmp_val = new int;
+ /* We just grabbed the display name of a key */
+ *tmp_val = current_keyrep->addKey(ch_simplified, last_key_type);
+ keyIndexList.insert(key, tmp_val);
+ return TRUE;
+ }
+ if (state == StateField) {
+ /* Ok, need to add data here */
+ current_data->setField(keyIndex, ch_simplified);
+ return TRUE;
+ }
+
+ qWarning("Junk characters found... ignored");
+ return TRUE;
+}
+
+QString DBXmlHandler::errorString()
+{
+ return "the document is not in the expected file format";
+}
+
+bool DBXmlHandler::warning(const QXmlParseException& exception)
+{
+ errorProt += QString("warning parsing error: %1 in line %2, column %3\n" )
+ .arg(exception.message())
+ .arg(exception.lineNumber())
+ .arg(exception.columnNumber());
+
+ qWarning(errorProt);
+ return QXmlDefaultHandler::fatalError(exception);
+}
+
+bool DBXmlHandler::error(const QXmlParseException& exception)
+{
+ errorProt += QString("error parsing error: %1 in line %2, column %3\n" )
+ .arg(exception.message())
+ .arg(exception.lineNumber())
+ .arg(exception.columnNumber());
+
+ qWarning(errorProt);
+ return QXmlDefaultHandler::fatalError(exception);
+}
+
+bool DBXmlHandler::fatalError(const QXmlParseException& exception)
+{
+ errorProt += QString("fatal parsing error: %1 in line %2, column %3\n" )
+ .arg(exception.message())
+ .arg(exception.lineNumber())
+ .arg(exception.columnNumber());
+
+ qWarning(errorProt);
+ return QXmlDefaultHandler::fatalError(exception);
+}
diff --git a/noncore/apps/tableviewer/db/xmlsource.h b/noncore/apps/tableviewer/db/xmlsource.h
new file mode 100644
index 0000000..ec267a6
--- a/dev/null
+++ b/noncore/apps/tableviewer/db/xmlsource.h
@@ -0,0 +1,119 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/* A Class to parse an xml docment of the form
+ * <database name="...">
+ * <header>
+ * <key name=key_name type=String>Displayed Name</key>
+ * <key name=key2name>key2name</key>
+ * <key name=key3name type=Date>Key 3</key>
+ * <key name=key4name type=Int>key 4</key>
+ * </header>
+ * <record>
+ * <key_name>string</key_name>
+ * <key4name>int</key4name>
+ * <key2name>string</key2name>
+ * </record>
+ * <record>
+ * ....
+ * </record>
+ * ....
+ * </database>
+ *
+ * There is some room for improvment mostly around using better checking
+ * and the use of more advanced xml features.
+ */
+
+#ifndef __XMLSOURCE_H__
+#define __XMLSOURCE_H__
+
+#include <qxml.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qstack.h>
+#include <qdict.h>
+#include "datacache.h"
+#include "common.h"
+
+
+class DBXml : public DBAccess
+{
+public:
+ /* create connection and either open or initialize */
+ DBXml(DBStore *d);
+ QString type();
+ bool openSource(QIODevice *);
+ bool saveSource(QIODevice *);
+ /* does a db write */
+ ~DBXml();
+};
+
+
+class DBXmlHandler : public QXmlDefaultHandler
+{
+
+public:
+ DBXmlHandler(DBStore *ds);
+ virtual ~DBXmlHandler();
+
+ // return the error protocol if parsing failed
+ QString errorProtocol();
+
+ // overloaded handler functions
+ bool startDocument();
+ bool startElement(const QString& namespaceURI, const QString& localName,
+ const QString& qName, const QXmlAttributes& atts);
+ bool endElement(const QString& namespaceURI, const QString& localName,
+ const QString& qName);
+ bool characters(const QString& ch);
+
+ QString errorString();
+
+ bool warning(const QXmlParseException& exception);
+ bool error(const QXmlParseException& exception);
+ bool fatalError(const QXmlParseException& exception);
+
+private:
+
+ QStack<QString> stack;
+ KeyList *current_keyrep;
+ DataElem *current_data;
+ TVVariant::KeyType last_key_type;
+
+ QString errorProt;
+ DBStore *data_store;
+
+ enum State {
+ StateInit,
+ StateHeader,
+ StateKey,
+ StateDocument,
+ StateRecord,
+ StateField
+ };
+
+ State state;
+
+ QDict<int> keyIndexList;
+ int keyIndex;
+ QString key;
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/keyentry.cw b/noncore/apps/tableviewer/keyentry.cw
new file mode 100644
index 0000000..e46da90
--- a/dev/null
+++ b/noncore/apps/tableviewer/keyentry.cw
@@ -0,0 +1,55 @@
+<!DOCTYPE CW><CW>
+<customwidgets>
+ <customwidget>
+ <class>TVBrowseKeyEntry</class>
+ <header location="local">browsekeyentry.h</header>
+ <sizehint>
+ <width>6</width>
+ <height>4</height>
+ </sizehint>
+ <container>1</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
+ </pixmap>
+ </customwidget>
+ <customwidget>
+ <class>TVListViewPrivate</class>
+ <header location="local">tvlistview.h</header>
+ <sizehint>
+ <width>10</width>
+ <height>10</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753</data>
+ </pixmap>
+ <signal>sortChanged(int)</signal>
+ <signal>currentChanged(QListViewItem *)</signal>
+ </customwidget>
+ <customwidget>
+ <class>TVFilterKeyEntry</class>
+ <header location="local">filterkeyentry.h</header>
+ <sizehint>
+ <width>10</width>
+ <height>10</height>
+ </sizehint>
+ <container>1</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753</data>
+ </pixmap>
+ <signal>valueChanged()</signal>
+ </customwidget>
+</customwidgets>
+</CW>
diff --git a/noncore/apps/tableviewer/main.cpp b/noncore/apps/tableviewer/main.cpp
new file mode 100644
index 0000000..736e1cf
--- a/dev/null
+++ b/noncore/apps/tableviewer/main.cpp
@@ -0,0 +1,32 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "tableviewer.h"
+#include <qpeapplication.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ TableViewerWindow * mw = new TableViewerWindow;
+ mw->setCaption( TableViewerWindow::tr("Table Viewer") );
+ a.showMainWidget(mw);
+
+ return a.exec();
+}
diff --git a/noncore/apps/tableviewer/qpe-tableviewer.control b/noncore/apps/tableviewer/qpe-tableviewer.control
new file mode 100644
index 0000000..86d0342
--- a/dev/null
+++ b/noncore/apps/tableviewer/qpe-tableviewer.control
@@ -0,0 +1,10 @@
+Files: EXCLUDED bin/tableviewer apps/Applications/tableviewer.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: XML database browsers
+ A table/database viewer for the Qtopia environment.
diff --git a/noncore/apps/tableviewer/tableviewer.cpp b/noncore/apps/tableviewer/tableviewer.cpp
new file mode 100644
index 0000000..0d4a412
--- a/dev/null
+++ b/noncore/apps/tableviewer/tableviewer.cpp
@@ -0,0 +1,455 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+/* local includes */
+#include "tableviewer.h"
+#include "ui/tvbrowseview.h"
+#include "ui/tvfilterview.h"
+#include "ui/tvlistview.h"
+#include "ui/tveditview.h"
+#include "ui/tvkeyedit.h"
+#include "db/datacache.h"
+
+/* QPE includes */
+#include "fileselector.h"
+#include "resource.h"
+
+/* QTE includes */
+#include <qpe/qpemenubar.h>
+#include <qpopupmenu.h>
+#include <qapplication.h>
+#include <qwidgetstack.h>
+#include <qlayout.h>
+#include <qbuffer.h>
+
+/*!
+ \class TableViewerWindow
+ \brief The main window widget of the application
+
+ This is the main widget of the table viewer application.
+ It is the co-ordination point.
+*/
+
+/*!
+ Constructs a new TableViewerWindow
+*/
+TableViewerWindow::TableViewerWindow(QWidget *parent, const char *name, WFlags f)
+ : QMainWindow(parent, name, f)
+{
+ setCaption(tr("Table Viewer"));
+
+/* Build data */
+ ds = new DBStore();
+ doc.setType("text/x-xml-tableviewer");
+ doc.setName("table");
+
+ dirty = FALSE;
+ ts.current_column = 0;
+ ts.kRep = ds->getKeys();
+
+/* build menus */
+ menu = new QPEMenuBar(this, 0);
+
+ QPopupMenu *file_menu = new QPopupMenu;
+ file_menu->insertItem("New", this, SLOT(newDocument()));
+
+ file_menu->insertItem("Open", this, SLOT(selectDocument()));
+ file_menu->insertSeparator();
+ file_menu->insertItem("Properties");
+
+ /* later will want to set this up to clean up first via this, SLOT(quit) */
+ menu->insertItem("Document", file_menu);
+
+ QPopupMenu *edit_menu = new QPopupMenu;
+ edit_menu->insertItem("Edit Item", this, SLOT(editItemSlot()));
+ edit_menu->insertItem("Edit Keys", this, SLOT(editKeysSlot()));
+ edit_menu->insertItem("Edit filters", this, SLOT(filterViewSlot()));
+ menu->insertItem("Edit", edit_menu);
+
+ QPopupMenu *view_menu = new QPopupMenu;
+ view_menu->insertItem("Browse View", this, SLOT(browseViewSlot()));
+ view_menu->insertItem("List View", this, SLOT(listViewSlot()));
+ menu->insertItem("View", view_menu);
+
+ QVBoxLayout *main_layout = new QVBoxLayout;
+
+ /* Build tool bar */
+ navigation = new QPEToolBar(this, "navigation");
+ QToolButton *newItemButton = new QToolButton(
+ QIconSet(Resource::loadImage("new")), "New Item", QString::null,
+ this, SLOT(newItemSlot()), navigation, "New Item");
+ QToolButton *editItemButton = new QToolButton(
+ QIconSet(Resource::loadImage("edit")), "Edit Item", QString::null,
+ this, SLOT(editItemSlot()), navigation, "Edit Item");
+ QToolButton *deleteItemButton = new QToolButton(
+ QIconSet(Resource::loadImage("trash")), "Delete Item",
+ QString::null, this,
+ SLOT(deleteItemSlot()), navigation, "Delete Item");
+
+ navigation->addSeparator();
+
+ QToolButton *firstItemButton = new QToolButton(
+ QIconSet(Resource::loadImage("fastback")), "First Item",
+ QString::null, this,
+ SLOT(firstItem()), navigation, "First Item");
+ QToolButton *previousItemButton = new QToolButton(
+ QIconSet(Resource::loadImage("back")), "Previous Item",
+ QString::null, this,
+ SLOT(previousItem()), navigation, "Previous Item");
+ QToolButton *nextItemButton = new QToolButton(
+ QIconSet(Resource::loadImage("forward")), "Next Item",
+ QString::null, this,
+ SLOT(nextItem()), navigation, "Next Item");
+ QToolButton *lastItemButton = new QToolButton(
+ QIconSet(Resource::loadImage("fastforward")), "Last Item",
+ QString::null, this,
+ SLOT(lastItem()), navigation, "Last Item");
+
+ navigation->addSeparator();
+ QToolButton *browseButton = new QToolButton(
+ QIconSet(Resource::loadImage("day")), "View Single Item",
+ QString::null, this,
+ SLOT(browseViewSlot()), navigation, "View Single Item");
+ QToolButton *listButton = new QToolButton(
+ QIconSet(Resource::loadImage("month")), "View Multiple Items",
+ QString::null, this,
+ SLOT(listViewSlot()), navigation, "View Multiple Items");
+
+ setToolBarsMovable(FALSE);
+ setToolBarsMovable(FALSE);
+ setToolBarsMovable(FALSE);
+
+/* Build widgets */
+ browseView = new TVBrowseView(&ts, this, 0);
+ listView = new TVListView(&ts, this, 0);
+ filterView = new TVFilterView(&ts, this, 0);
+ fileSelector = new FileSelector("text/csv;text/x-xml-tableviewer",
+ this, "fileselector");
+ fileSelector->setNewVisible(FALSE);
+ fileSelector->setCloseVisible(FALSE);
+
+ cw = new QWidgetStack(this, 0);
+ cw->addWidget(listView, ListState);
+ cw->addWidget(browseView, BrowseState);
+ cw->addWidget(filterView, FilterState);
+ cw->addWidget(fileSelector, FileState);
+
+ current_view = FileState;
+ cw->raiseWidget(current_view);
+ fileSelector->reread();
+
+ connect(browseView, SIGNAL(searchOnKey(int, TVVariant)),
+ this, SLOT(searchOnKey(int, TVVariant)));
+ connect(browseView, SIGNAL(sortChanged(int)),
+ this, SLOT(setPrimaryKey(int)));
+
+ connect(fileSelector, SIGNAL(closeMe()), this, SLOT(browseViewSlot()));
+ connect(fileSelector, SIGNAL(fileSelected(const DocLnk &)),
+ this, SLOT(openDocument(const DocLnk &)));
+
+ main_layout->addWidget(menu);
+ main_layout->addWidget(cw);
+
+ setCentralWidget(cw);
+
+}
+
+/*!
+ Destroys the TableViewerWindow
+*/
+TableViewerWindow::~TableViewerWindow()
+{
+ if(dirty)
+ saveDocument();
+}
+
+/*!
+ Opens a file dialog and loads the file specified by the dialog
+*/
+void TableViewerWindow::selectDocument()
+{
+ if(dirty)
+ saveDocument();
+ current_view = FileState;
+ cw->raiseWidget(current_view);
+ fileSelector->reread();
+}
+
+void TableViewerWindow::saveDocument()
+{
+ if(!dirty)
+ return;
+
+ FileManager fm;
+ QIODevice *dev = fm.saveFile(doc);
+
+ if(!ds->saveSource(dev, doc.type())){
+ qWarning("Save unsuccessful");
+ return;
+ }
+ dev->close();
+ dirty = FALSE;
+}
+
+void TableViewerWindow::newDocument()
+{
+ DocLnk nf;
+ nf.setType("text/x-xml-tableviewer");
+ nf.setName("table");
+
+ delete ds;
+ ds = new DBStore();
+
+ ts.current_column = 0;
+ ts.kRep = ds->getKeys();
+ browseView->reset();
+ listView->reset();
+ filterView->reset();
+
+ doc = nf;
+ dirty = FALSE;
+
+ current_view = BrowseState;
+ cw->raiseWidget(current_view);
+
+ /* now set up for editing the keys */
+ ts.kRep->addKey("key", TVVariant::String);
+ editKeysSlot();
+}
+
+void TableViewerWindow::openDocument(const DocLnk &f)
+{
+
+ if (!f.isValid())
+ return;
+
+ FileManager fm;
+ QIODevice *dev = fm.openFile(f);
+ doc = f;
+
+ if(ds->openSource(dev, doc.type())) {
+ DataElem *d;
+
+ browseView->reset();
+ listView->reset();
+ filterView->reset();
+
+ current_view = BrowseState;
+ cw->raiseWidget(current_view);
+
+ /* set up new table state and ensure sub widgets have a reference */
+ ts.current_column = 0;
+ ts.kRep = ds->getKeys();
+ browseView->rebuildKeys();
+ listView->rebuildKeys();
+ filterView->rebuildKeys();
+
+ ds->first();
+ /* set up the list view */
+ listView->clearItems();
+ do {
+ d = ds->getCurrentData();
+ if(d)
+ listView->addItem(d);
+ } while(ds->next());
+
+ /* Set up browse view, Will be based of structure of listView */
+ listView->first();
+ ts.current_elem = listView->getCurrentData();
+ browseView->rebuildData();
+ listView->rebuildData();
+
+ QString scratch = "Table Viewer";/* later take from constant */
+ scratch += " - ";
+ scratch += ds->getName();
+ setCaption(tr(scratch));
+
+ dirty = FALSE;
+ } else {
+ qWarning(tr("could not load Document"));
+ }
+ dev->close();
+}
+
+/*!
+ Moves to the next item of the current table
+*/
+void TableViewerWindow::nextItem()
+{
+ listView->next();
+ ts.current_elem = listView->getCurrentData();
+ browseView->rebuildData();
+}
+
+/*!
+ Moves to the previous item of the current table
+*/
+void TableViewerWindow::previousItem()
+{
+ listView->previous();
+ ts.current_elem = listView->getCurrentData();
+ browseView->rebuildData();
+}
+
+/*!
+ Raises the List View. This is a mode change for the application.
+*/
+void TableViewerWindow::listViewSlot()
+{
+ if(current_view == FilterState)
+ applyFilter();
+ current_view = ListState;
+ cw->raiseWidget(current_view);
+}
+
+void TableViewerWindow::applyFilter()
+{
+ DataElem *d;
+
+ listView->clearItems();
+ ds->first();
+ do {
+ d = ds->getCurrentData();
+ if(d)
+ if(filterView->passesFilter(d))
+ listView->addItem(d);
+ } while(ds->next());
+ listView->first();
+ listView->rebuildData();
+}
+
+/*!
+ Raises the Browse View. This is a mode change for the application.
+*/
+void TableViewerWindow::browseViewSlot()
+{
+ if(current_view == FilterState)
+ applyFilter();
+
+ ts.current_elem = listView->getCurrentData();
+ browseView->rebuildData();
+
+ current_view = BrowseState;
+ cw->raiseWidget(current_view);
+}
+
+/*!
+ Raises the List View. This is a mode change for the application.
+*/
+void TableViewerWindow::filterViewSlot()
+{
+ current_view = FilterState;
+ cw->raiseWidget(current_view);
+}
+
+
+
+
+void TableViewerWindow::editItemSlot()
+{
+ if(TVEditView::openEditItemDialog(&ts, ts.current_elem, this)) {
+ listView->rebuildData();
+ browseView->rebuildData();
+ dirty = TRUE;
+ }
+}
+
+void TableViewerWindow::newItemSlot()
+{
+ DataElem *d = new DataElem(ds);
+ if (TVEditView::openEditItemDialog(&ts, d, this)) {
+
+ ds->addItem(d);
+ ts.current_elem = d;
+ applyFilter();
+ listView->rebuildData();
+ browseView->rebuildData();
+ dirty = TRUE;
+ }
+}
+
+void TableViewerWindow::deleteItemSlot()
+{
+ /* delete the actual item, then do a 'filter' */
+ DataElem *to_remove = ts.current_elem;
+
+ if(!to_remove)
+ return;
+
+ listView->removeItem();
+ ds->removeItem(to_remove);
+
+ applyFilter();
+ listView->rebuildData();
+ browseView->rebuildData();
+ dirty = TRUE;
+}
+
+void TableViewerWindow::editKeysSlot()
+{
+ DataElem *d;
+ KeyList *k = TVKeyEdit::openEditKeysDialog(&ts, this);
+
+ if(k) {
+ /* set as new keys */
+ ds->setKeys(k);
+
+ ts.current_column = 0;
+ ts.kRep = k;
+
+ browseView->reset();
+ listView->reset();
+ filterView->reset();
+
+ browseView->rebuildKeys();
+ listView->rebuildKeys();
+ filterView->rebuildKeys();
+
+ ds->first();
+ /* set up the list view */
+ listView->clearItems();
+ do {
+ d = ds->getCurrentData();
+ if(d)
+ listView->addItem(d);
+ } while(ds->next());
+
+ /* Set up browse view, Will be based of structure of listView */
+ dirty = TRUE;
+ }
+}
+
+/*!
+ A Slot that allows for widgets above to indicate a search should be
+ done on a specified key index for a specified value
+*/
+void TableViewerWindow::searchOnKey(int i, TVVariant v)
+{
+ listView->findItem(i, v);
+ ts.current_elem = listView->getCurrentData();
+ browseView->rebuildData();
+}
+
+void TableViewerWindow::setPrimaryKey(int i)
+{
+ ts.current_column = i;
+ listView->rebuildData();
+ browseView->rebuildData();
+}
diff --git a/noncore/apps/tableviewer/tableviewer.h b/noncore/apps/tableviewer/tableviewer.h
new file mode 100644
index 0000000..2d4686a
--- a/dev/null
+++ b/noncore/apps/tableviewer/tableviewer.h
@@ -0,0 +1,109 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef Tableviewer_H
+#define Tableviewer_H
+
+#include <qmainwindow.h>
+#include "db/common.h"
+#include "fileselector.h"
+
+/* Forward class declarations */
+class QWidgetStack;
+class QDialog;
+class QMenuBar;
+
+class TVListView;
+class TVBrowseView;
+class TVFilterView;
+class TVEditView;
+
+class DBStore;
+
+class TableViewerWindow: public QMainWindow
+{
+ Q_OBJECT
+public:
+ TableViewerWindow( QWidget *parent = 0,
+ const char *name = 0, WFlags f = 0 );
+ ~TableViewerWindow();
+
+public slots:
+ void selectDocument();
+
+ void newDocument();
+ void saveDocument();
+ void openDocument(const DocLnk &);
+
+ void nextItem();
+ void previousItem();
+
+ void listViewSlot();
+ void browseViewSlot();
+ void filterViewSlot();
+
+ void editItemSlot();
+ void newItemSlot();
+ void deleteItemSlot();
+
+ void editKeysSlot();
+
+ /* reveiw the sig. for this function TODO */
+ void searchOnKey(int, TVVariant);
+ void setPrimaryKey(int);
+
+/* TODO add new event */
+protected:
+
+/* TODO add new slots */
+private slots:
+
+/* TODO add other widgets used here */
+private:
+ bool dirty;
+
+ QMenuBar *menu;
+ QToolBar *navigation;
+
+ TVListView *listView;
+ TVBrowseView *browseView;
+ TVFilterView *filterView;
+ TVEditView *editView;
+ FileSelector *fileSelector;
+
+ DocLnk doc;
+
+ QWidgetStack *cw;
+ DBStore *ds;
+ TableState ts; /* not a pointer.. this class keeps the state */
+
+ enum UserState {
+ BrowseState = 0,
+ ListState,
+ FilterState,
+ EditState,
+ FileState,
+ };
+
+ UserState current_view;
+
+ void applyFilter();
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/tableviewer.pro b/noncore/apps/tableviewer/tableviewer.pro
new file mode 100644
index 0000000..edd41c5
--- a/dev/null
+++ b/noncore/apps/tableviewer/tableviewer.pro
@@ -0,0 +1,36 @@
+TEMPLATE = app
+CONFIG = qt warn_on debug
+DESTDIR = ../bin
+SUBDIRS = db ui
+HEADERS = tableviewer.h \
+ ui/commonwidgets.h \
+ ui/tvbrowseview.h \
+ ui/tvlistview.h \
+ ui/tvfilterview.h \
+ ui/tveditview.h \
+ ui/browsekeyentry.h \
+ ui/filterkeyentry.h \
+ ui/tvkeyedit.h \
+ db/datacache.h \
+ db/common.h \
+ db/xmlsource.h \
+ db/csvsource.h
+SOURCES = main.cpp \
+ tableviewer.cpp \
+ ui/commonwidgets.cpp \
+ ui/tvbrowseview.cpp \
+ ui/tvfilterview.cpp \
+ ui/browsekeyentry.cpp \
+ ui/filterkeyentry.cpp \
+ ui/tvlistview.cpp \
+ ui/tveditview.cpp \
+ ui/tvkeyedit.cpp \
+ db/datacache.cpp \
+ db/xmlsource.cpp \
+ db/csvsource.cpp \
+ db/common.cpp
+INTERFACES = ui/tvkeyedit_gen.ui
+TARGET = tableviewer
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
diff --git a/noncore/apps/tableviewer/ui/.cvsignore b/noncore/apps/tableviewer/ui/.cvsignore
new file mode 100644
index 0000000..183c939
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/.cvsignore
@@ -0,0 +1,8 @@
+moc_*
+Makefile
+tvbrowseview_gen.h
+tvfilterview_gen.h
+tvkeyedit_gen.h
+tvbrowseview_gen.cpp
+tvfilterview_gen.cpp
+tvkeyedit_gen.cpp
diff --git a/noncore/apps/tableviewer/ui/browsekeyentry.cpp b/noncore/apps/tableviewer/ui/browsekeyentry.cpp
new file mode 100644
index 0000000..42e24dd
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/browsekeyentry.cpp
@@ -0,0 +1,206 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "browsekeyentry.h"
+#include "commonwidgets.h"
+
+#include <qtoolbutton.h>
+#include <qwidgetstack.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qpopupmenu.h>
+#include <qhbox.h>
+#include <qdatetime.h>
+
+#include <qheader.h>
+// For qWarning(const char *)
+
+/*!
+ \class TVBrowseKeyEntry
+ \brief a Widget used enter keys into the TVBrowseViewWidget
+
+ The TVBrowseKeyEntry Widget provides the facility to enter
+ various key types to be search on in the table. The key can be changed
+ and the entry field will update to the correct sort of widget appropriately
+*/
+
+/*!
+ Constructs the widget
+*/
+TVBrowseKeyEntry::TVBrowseKeyEntry(QWidget *parent, const char *name, WFlags f)
+ : QWidget(parent, name, f)
+{
+ QHBoxLayout *h_layout = new QHBoxLayout(this);
+
+ textKey = new QLineEdit(this, 0);
+ intKey = new IntEdit(this, 0);
+ dateKey = new DateEdit(this, 0);
+ timeKey = new TimeEdit(this, 0);
+
+ resetButton = new QPushButton(this, "reset");
+ resetButton->setMinimumSize(QSize(50, 0));
+ resetButton->setText(tr("Reset"));
+
+ changeKeyButton = new QToolButton(this, "changekey");
+ // TODO The icon stuff.
+ changeKeyButton->setText(tr("key"));
+
+ totalKeys = 0;
+ ts = 0;
+ keyMenu = new QPopupMenu(this, "keymenu");
+
+ ws = new QWidgetStack(this, 0);
+ ws->addWidget(textKey, TVVariant::String);
+ ws->addWidget(intKey, TVVariant::Int);
+ ws->addWidget(timeKey, TVVariant::Time);
+ ws->addWidget(dateKey, TVVariant::Date);
+
+ ws->raiseWidget(TVVariant::String);
+
+ // TODO connect slots and signals....
+ connect(changeKeyButton, SIGNAL(clicked()),
+ this, SLOT(changeKeyMenuSlot()));
+
+ connect(resetButton, SIGNAL(clicked()),
+ textKey, SLOT(clear()));
+ connect(resetButton, SIGNAL(clicked()),
+ intKey, SLOT(clear()));
+ connect(resetButton, SIGNAL(clicked()),
+ dateKey, SLOT(clear()));
+ connect(resetButton, SIGNAL(clicked()),
+ timeKey, SLOT(clear()));
+
+ h_layout->addWidget(ws);
+ h_layout->addWidget(resetButton);
+ h_layout->addWidget(changeKeyButton);
+
+ connect(textKey, SIGNAL(textChanged(const QString&)),
+ this, SLOT(searchOnText()));
+ connect(intKey, SIGNAL(valueChanged(int)),
+ this, SLOT(searchOnText()));
+ connect(dateKey, SIGNAL(valueChanged(const QDate&)),
+ this, SLOT(searchOnText()));
+ connect(timeKey, SIGNAL(valueChanged(const QTime&)),
+ this, SLOT(searchOnText()));
+}
+
+/*!
+ Destructs the widget
+*/
+TVBrowseKeyEntry::~TVBrowseKeyEntry()
+{
+}
+
+/*!
+ Changes which key the user intends to search on
+
+ \param id_param the index of the key future searches should be base on
+*/
+void TVBrowseKeyEntry::changeKeySlot(int id_param)
+{
+ if(ts) {
+ emit sortChanged(id_param);
+ ws->raiseWidget(ts->kRep->getKeyType(ts->current_column));
+ }
+}
+
+/*!
+ Opens the change key menu
+*/
+void TVBrowseKeyEntry::changeKeyMenuSlot()
+{
+ if(ts)
+ keyMenu->exec(changeKeyButton->mapToGlobal(QPoint(0,0)));
+}
+
+
+void TVBrowseKeyEntry::setTableState(TableState *t) {
+ ts = t;
+}
+
+void TVBrowseKeyEntry::rebuildKeys() {
+ int i;
+ if (!ts) return;
+ if (!ts->kRep) return;
+
+ /* clear the old */
+ keyMenu->clear();
+
+ KeyListIterator it(*ts->kRep);
+
+ for (i = 0; i < ts->kRep->getNumFields(); i++) {
+ keyMenu->insertItem(it.current()->name(), this,
+ SLOT(changeKeySlot(int)), 0, i);
+ keyMenu->setItemParameter(i, it.currentKey());
+ ++it;
+ }
+}
+
+void TVBrowseKeyEntry::reset()
+{
+ textKey->clear();
+ intKey->clear();
+ dateKey->clear();
+ timeKey->clear();
+
+ keyMenu->clear();
+}
+/*!
+ Searches on the current value of the key entry provided that the
+ current key is of type text WARNING, TODO fix memory leaks
+*/
+void TVBrowseKeyEntry::searchOnText()
+{
+ TVVariant sendkey;
+
+ if (!ts)
+ return;
+
+ switch(ts->kRep->getKeyType(ts->current_column)) {
+ case TVVariant::String:
+ sendkey = TVVariant(QString(textKey->text()));
+ break;
+ case TVVariant::Int: {
+ sendkey = TVVariant(intKey->value());
+ break;
+ }
+ case TVVariant::Time: {
+ sendkey = TVVariant(QTime(timeKey->time()));
+ break;
+ }
+ case TVVariant::Date: {
+ sendkey = TVVariant(QDate(dateKey->date()));
+ break;
+ }
+ case TVVariant::Invalid:
+ break;
+ default:
+ qWarning("TVBrowseKeyEntry::searchOnText() "
+ "cannot work out data type");
+ return;
+ }
+ emit searchOnKey(ts->current_column, sendkey);
+}
+
+/*! \fn void TVBrowseKeyEntry::searchOnKey(int currentKeyId, TVVariant)
+
+ This signal indicates that a search on key index currentKeyId should be
+ done searching for the value v.
+*/
diff --git a/noncore/apps/tableviewer/ui/browsekeyentry.h b/noncore/apps/tableviewer/ui/browsekeyentry.h
new file mode 100644
index 0000000..220bf6a
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/browsekeyentry.h
@@ -0,0 +1,75 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef BrowseKeyEntry_H
+#define BrowseKeyEntry_H
+
+#include <qwidget.h>
+#include "../db/common.h"
+
+/* Forward class declarations */
+class QWidgetStack;
+class QToolButton;
+class QPushButton;
+class QLineEdit;
+class DateEdit;
+class TimeEdit;
+class IntEdit;
+class QPopupMenu;
+class QHBox;
+
+class TVBrowseKeyEntry: public QWidget
+{
+ Q_OBJECT
+public:
+ TVBrowseKeyEntry( QWidget *parent = 0,
+ const char *name = 0, WFlags f = 0 );
+ ~TVBrowseKeyEntry();
+
+ void setTableState(TableState *t);
+ void rebuildKeys();
+ void reset();
+
+signals:
+ void searchOnKey(int keyIndex, TVVariant keyData);
+ void sortChanged(int i);
+
+private slots:
+ void changeKeySlot(int);
+ void changeKeyMenuSlot();
+ void searchOnText();
+
+private:
+ QPushButton *resetButton;
+ QToolButton *changeKeyButton;
+ QPopupMenu *keyMenu;
+ int totalKeys;
+ TableState *ts;
+
+ /* each type of possible data entry will be put on the stack */
+ QWidgetStack *ws;
+
+ /* include widgets for each type of data entry you need here. */
+ QLineEdit *textKey;
+ IntEdit *intKey;
+ DateEdit *dateKey;
+ TimeEdit *timeKey;
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/ui/commonwidgets.cpp b/noncore/apps/tableviewer/ui/commonwidgets.cpp
new file mode 100644
index 0000000..0b4f3c2
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/commonwidgets.cpp
@@ -0,0 +1,209 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <datebookmonth.h>
+#include <qpopupmenu.h>
+#include <qspinbox.h>
+#include "commonwidgets.h"
+
+DateEdit::DateEdit( QWidget *parent = 0, const char *name = 0, WFlags f = 0 )
+ : QToolButton(parent, name)
+{
+ QPopupMenu *m1 = new QPopupMenu(this);
+ dateSelector = new DateBookMonth(m1, 0, TRUE);
+ m1->insertItem(dateSelector);
+ setPopup(m1);
+ setPopupDelay(0);
+
+ connect(dateSelector, SIGNAL(dateClicked(int, int, int)),
+ this, SLOT(subValueChanged()));
+
+ setText(dateSelector->selectedDate().toString());
+}
+
+
+DateEdit::~DateEdit() {}
+
+QDate DateEdit::date() const
+{
+ return dateSelector->selectedDate();
+}
+
+void DateEdit::setDate(QDate d)
+{
+ dateSelector->setDate(d.year(), d.month(), d.day());
+ setText(d.toString());
+}
+
+QSizePolicy DateEdit::sizePolicy() const
+{
+ QSizePolicy sp;
+ sp.setHorData(QToolButton::sizePolicy().horData());
+ sp.setVerData(QSizePolicy::Fixed);
+
+ return sp;
+}
+
+void DateEdit::clear()
+{
+ QDate today = QDate::currentDate();
+
+ dateSelector->setDate(today.year(), today.month(), today.day());
+ setText(today.toString());
+}
+
+void DateEdit::subValueChanged()
+{
+ QDate current = dateSelector->selectedDate();
+
+ setText(current.toString());
+ emit valueChanged(current);
+}
+
+TimeEdit::TimeEdit( QWidget *parent = 0, const char *name = 0, WFlags f = 0 )
+ : QWidget(parent, name, f)
+{
+ QHBoxLayout *layout = new QHBoxLayout(this, 0);
+
+ layout->addWidget(hourKey = new QSpinBox(1, 12, 1, this));
+ hourKey->setWrapping(true);
+ hourKey->setMinimumWidth(30);
+ hourKey->setMaximumWidth(35);
+
+ layout->addWidget(new QLabel(" : ", this));
+ layout->addWidget(minuteKey = new QSpinBox(0, 59, 1, this));
+ minuteKey->setWrapping(true);
+ minuteKey->setMinimumWidth(30);
+ minuteKey->setMaximumWidth(35);
+
+ layout->addWidget(new QLabel(" : ", this));
+ layout->addWidget(secondKey = new QSpinBox(0, 59, 1, this, 0));
+ secondKey->setWrapping(true);
+ secondKey->setMinimumWidth(30);
+ secondKey->setMaximumWidth(35);
+
+ layout->addWidget(ampm = new QComboBox(this));
+ ampm->insertItem("AM");
+ ampm->insertItem("PM");
+
+ layout->addStretch(-1);
+
+ clear();
+
+ connect(secondKey, SIGNAL(valueChanged(const QString&)),
+ this, SLOT(subValueChanged()));
+ connect(minuteKey, SIGNAL(valueChanged(const QString&)),
+ this, SLOT(subValueChanged()));
+ connect(hourKey, SIGNAL(valueChanged(const QString&)),
+ this, SLOT(subValueChanged()));
+ connect(ampm, SIGNAL(activated(int)),
+ this, SLOT(subValueChanged()));
+}
+
+
+TimeEdit::~TimeEdit() {}
+
+QTime TimeEdit::time() const
+{
+ int s,m,h;
+
+ s = secondKey->text().toInt();
+ m = minuteKey->text().toInt();
+ h = hourKey->text().toInt();
+
+ if(ampm->currentItem() == 1) {
+ /* pm */
+ h = h + 12;
+ }
+ /* hour now ranges 1->24 */
+
+ if (h == 12)
+ h = 0;
+ if (h == 24)
+ h = 12;
+
+ if(QTime::isValid(h, m, s))
+ return QTime(h, m, s);
+ return QTime(0, 0, 0);
+}
+
+void TimeEdit::setTime(QTime t)
+{
+ int h = t.hour();
+ secondKey->setValue(t.second());
+ minuteKey->setValue(t.minute());
+
+ /* h 0..23 */
+ if (h > 11) {
+ h -= 12;
+ ampm->setCurrentItem(1);
+ } else {
+ ampm->setCurrentItem(0);
+ }
+
+ if (h == 0) h = 12;
+ hourKey->setValue(h);
+}
+
+QSizePolicy TimeEdit::sizePolicy() const
+{
+ QSizePolicy sp;
+ sp.setHorData(QSizePolicy::Preferred);
+ sp.setVerData(QSizePolicy::Fixed);
+
+ return sp;
+}
+
+void TimeEdit::clear()
+{
+ secondKey->setValue(0);
+ minuteKey->setValue(0);
+ hourKey->setValue(12);
+
+ ampm->setCurrentItem(0);
+}
+
+void TimeEdit::subValueChanged()
+{
+ emit valueChanged(time());
+}
+
+IntEdit::IntEdit( QWidget *parent = 0, const char *name = 0, WFlags f = 0 )
+ : QSpinBox(INT_MIN, INT_MAX, 1, parent, name)
+{
+ setValue(0);
+}
+
+
+IntEdit::~IntEdit() {}
+
+int IntEdit::value()
+{
+ return cleanText().toInt();
+}
+
+void IntEdit::clear()
+{
+ setValue(0);
+}
diff --git a/noncore/apps/tableviewer/ui/commonwidgets.h b/noncore/apps/tableviewer/ui/commonwidgets.h
new file mode 100644
index 0000000..2a9691f
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/commonwidgets.h
@@ -0,0 +1,98 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef Dateedit_H
+#define Dateedit_H
+
+#include <qwidget.h>
+#include <qdatetime.h>
+
+/* inherited classes */
+#include <qtoolbutton.h>
+#include <qspinbox.h>
+
+class DateBookMonth;
+class QComboBox;
+
+class DateEdit : public QToolButton
+{
+ Q_OBJECT
+
+public:
+ DateEdit( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~DateEdit();
+
+ QDate date() const;
+ void setDate(QDate);
+
+ QSizePolicy sizePolicy() const;
+signals:
+ void valueChanged(const QDate &);
+
+public slots:
+ void clear();
+private slots:
+ void subValueChanged();
+
+private:
+ DateBookMonth *dateSelector;
+};
+
+class TimeEdit : public QWidget
+{
+ Q_OBJECT
+
+public:
+ TimeEdit( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~TimeEdit();
+
+ QTime time() const;
+ void setTime(QTime);
+
+ QSizePolicy sizePolicy() const;
+signals:
+ void valueChanged(const QTime &);
+
+public slots:
+ void clear();
+private slots:
+ void subValueChanged();
+
+private:
+ QSpinBox *secondKey;
+ QSpinBox *minuteKey;
+ QSpinBox *hourKey;
+ QComboBox *ampm;
+};
+
+/* more for consistency than need */
+class IntEdit : public QSpinBox
+{
+ Q_OBJECT
+
+public:
+ IntEdit( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~IntEdit();
+
+ int value();
+
+public slots:
+ void clear();
+};
+#endif
diff --git a/noncore/apps/tableviewer/ui/filterkeyentry.cpp b/noncore/apps/tableviewer/ui/filterkeyentry.cpp
new file mode 100644
index 0000000..d108fbd
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/filterkeyentry.cpp
@@ -0,0 +1,208 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "filterkeyentry.h"
+#include "commonwidgets.h"
+
+#include <qwidgetstack.h>
+#include <qcombobox.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qsizepolicy.h>
+#include <qdatetime.h>
+#include <qhbox.h>
+
+TVFilterKeyEntry::TVFilterKeyEntry(QWidget *parent, const char *name, WFlags f)
+ : QWidget(parent, name, f)
+{
+ int stack_elem = 0;
+
+ layout = new QHBoxLayout(this, 0);
+ layout->setSpacing(0);
+ layout->setMargin(0);
+
+ textEntry = new QHBox(this, 0);
+ textEntry->setSpacing(0);
+ textEntry->setMargin(0);
+
+ intEntry = new QHBox(this, 0);
+ intEntry->setSpacing(0);
+ intEntry->setMargin(0);
+
+ timeEntry = new QHBox(this, 0);
+ timeEntry->setSpacing(0);
+ timeEntry->setMargin(0);
+
+ dateEntry = new QHBox(this, 0);
+ dateEntry->setSpacing(0);
+ dateEntry->setMargin(0);
+
+ textCombo = new QComboBox(textEntry, 0);
+ textKey = new QLineEdit(textEntry, 0);
+
+ /* Build the text combo list */
+ textCombo->insertItem("less than");
+ textCombo->insertItem("more than");
+ textCombo->insertItem("equal to");
+ textCombo->insertItem("containing");
+ textCombo->insertItem("starting with");
+ textCombo->insertItem("ending with");
+
+ intCombo = new QComboBox(intEntry, 0);
+ intKey = new IntEdit(intEntry, 0);
+
+ /* Build the int combo list */
+ intCombo->insertItem("less than");
+ intCombo->insertItem("more than");
+ intCombo->insertItem("equal to");
+
+ timeCombo = new QComboBox(timeEntry, 0);
+ timeKey = new TimeEdit(timeEntry, 0);
+
+ /* Build the time combo list */
+ timeCombo->insertItem("less than");
+ timeCombo->insertItem("more than");
+ timeCombo->insertItem("equal to");
+
+ dateCombo = new QComboBox(dateEntry, 0);
+ dateKey = new DateEdit(dateEntry, 0);
+
+ /* Build the date combo list */
+ dateCombo->insertItem("less than");
+ dateCombo->insertItem("more than");
+ dateCombo->insertItem("equal to");
+
+ ts = 0;
+
+ ws = new QWidgetStack(this, 0);
+ ws->setMargin(0);
+ ws->addWidget(textEntry, TVVariant::String);
+ ws->addWidget(intEntry, TVVariant::Int);
+ ws->addWidget(timeEntry, TVVariant::Time);
+ ws->addWidget(dateEntry, TVVariant::Date);
+
+ /* connect the signals down */
+ connect(textKey, SIGNAL(textChanged(const QString&)),
+ this, SIGNAL(valueChanged()));
+ connect(intKey, SIGNAL(valueChanged(int)),
+ this, SIGNAL(valueChanged()));
+ connect(dateKey, SIGNAL(valueChanged(const QDate&)),
+ this, SIGNAL(valueChanged()));
+ connect(timeKey, SIGNAL(valueChanged(const QTime&)),
+ this, SIGNAL(valueChanged()));
+
+ connect(intCombo, SIGNAL(activated(int)), this, SIGNAL(valueChanged()));
+ connect(textCombo, SIGNAL(activated(int)), this, SIGNAL(valueChanged()));
+ connect(timeCombo, SIGNAL(activated(int)), this, SIGNAL(valueChanged()));
+ connect(dateCombo, SIGNAL(activated(int)), this, SIGNAL(valueChanged()));
+
+ ws->raiseWidget(TVVariant::String);
+ layout->addWidget(ws);
+
+ current_type = TVVariant::String;
+}
+
+/*!
+ Destructs the widget
+*/
+TVFilterKeyEntry::~TVFilterKeyEntry()
+{
+}
+
+void TVFilterKeyEntry::setKey(int i)
+{
+
+ if (!ts) return;
+ if (!ts->kRep) return;
+
+ /* set up to raise appropriate widget set */
+ if (current_type != ts->kRep->getKeyType(i)) {
+ current_type = ts->kRep->getKeyType(i);
+ ws->raiseWidget(current_type);
+ }
+}
+
+void TVFilterKeyEntry::setTableState(TableState *t) {
+ int i;
+ ts = t;
+ if(!t) return;
+ if (!t->kRep)
+ return;
+ if (t->kRep->getNumFields() < 1)
+ return;
+ setKey(0);
+ /* set up the the menu stuff.. */
+}
+
+CmpType TVFilterKeyEntry::getCompareType()
+{
+
+ switch(current_type) {
+ case TVVariant::String: {
+ CmpType k = (CmpType) textCombo->currentItem();
+ return k;
+ }
+ case TVVariant::Int: {
+ CmpType k = (CmpType) intCombo->currentItem();
+ return k;
+ }
+ case TVVariant::Time: {
+ CmpType k = (CmpType) timeCombo->currentItem();
+ return k;
+ }
+ case TVVariant::Date: {
+ CmpType k = (CmpType) dateCombo->currentItem();
+ return k;
+ }
+ default:
+ break;
+ }
+ return ct_equal;
+}
+
+/* MUST return a valid pointer */
+TVVariant TVFilterKeyEntry::getCompareValue()
+{
+ TVVariant sendkey;
+ int tmp;
+
+ switch(current_type) {
+ case TVVariant::String:
+ sendkey = TVVariant(QString(textKey->text()));
+ break;
+ case TVVariant::Int: {
+ sendkey = TVVariant(intKey->value());
+ break;
+ }
+ case TVVariant::Time: {
+ sendkey = TVVariant(QTime(timeKey->time()));
+ break;
+ }
+ case TVVariant::Date: {
+ sendkey = TVVariant(QDate(dateKey->date()));
+ break;
+ }
+ default: {
+ sendkey = TVVariant(0);
+ qWarning("TVFilterKeyEntry::getCompareValue() "
+ "cannot work out data type");
+ }
+ }
+ return sendkey;
+}
diff --git a/noncore/apps/tableviewer/ui/filterkeyentry.h b/noncore/apps/tableviewer/ui/filterkeyentry.h
new file mode 100644
index 0000000..260e250
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/filterkeyentry.h
@@ -0,0 +1,96 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FilterKeyEntry_H
+#define FilterKeyEntry_H
+
+#include <qwidget.h>
+#include <qhbox.h>
+#include <qlayout.h>
+#include "../db/common.h"
+
+/* Forward class declarations */
+class QWidgetStack;
+class QToolButton;
+class QLineEdit;
+class DateEdit;
+class TimeEdit;
+class IntEdit;
+class QPopupMenu;
+class QComboBox;
+
+typedef enum _CmpType {
+ ct_less = 0,
+ ct_more,
+ ct_equal,
+ ct_contains,
+ ct_startswith,
+ ct_endswith
+} CmpType;
+
+
+class TVFilterKeyEntry: public QWidget
+{
+ Q_OBJECT
+public:
+ TVFilterKeyEntry( QWidget *parent = 0,
+ const char *name = 0, WFlags f = 0 );
+ ~TVFilterKeyEntry();
+
+ void setTableState(TableState *t);
+ void setKey(int i);
+
+ CmpType getCompareType();
+ TVVariant getCompareValue();
+
+signals:
+ void valueChanged();
+
+private:
+ /* include widgets for each type of data entry you need here. */
+ QLineEdit *textKey;
+ QComboBox *textCombo;
+ QHBox *textEntry;
+
+ IntEdit *intKey;
+ QComboBox *intCombo;
+ QHBox *intEntry;
+
+ TimeEdit *timeKey;
+ QComboBox *timeCombo;
+ QHBox *timeEntry;
+
+ DateEdit *dateKey;
+ QComboBox *dateCombo;
+ QHBox *dateEntry;
+
+ TableState *ts;
+
+ /* each type of possible data entry will be put on the stack */
+ QWidgetStack *ws;
+
+ /* This allows for the inherited functions dealing with prefered size
+ * etc to simply get the information from the layout.
+ */
+ QHBoxLayout *layout;
+
+ TVVariant::KeyType current_type;
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/ui/tvbrowseview.cpp b/noncore/apps/tableviewer/ui/tvbrowseview.cpp
new file mode 100644
index 0000000..f6da7b1
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvbrowseview.cpp
@@ -0,0 +1,122 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "tvbrowseview.h"
+#include "browsekeyentry.h"
+#include <qtoolbutton.h>
+#include <qtextview.h>
+#include <qtextbrowser.h>
+#include <qlayout.h>
+
+/*!
+ \class TVBrowseView
+ \brief The widget describing how to draw the browse view user interface
+
+ This widget allows for the user to browse through the table, one element
+ at a time, or search on a single key. Its main goal is to show a
+ single element in a readable format and make it easy for the user to
+ rapidly find specific elements in the table.
+*/
+
+/*!
+ Constructs a new TVBrowseView widget
+*/
+TVBrowseView::TVBrowseView(TableState *t, QWidget* parent = 0, const char *name = 0,
+ WFlags fl =0)
+{
+ if (!name)
+ setName("BrowseView");
+
+ setSizePolicy(QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding, 0, 0, sizePolicy().hasHeightForWidth() ) );
+ QVBoxLayout *vlayout = new QVBoxLayout(this);
+ textViewDisplay = new QTextBrowser(this, "textViewDisplay");
+ vlayout->addWidget( textViewDisplay );
+
+ keyEntry = new TVBrowseKeyEntry(this, "keyEntry");
+ vlayout->addWidget( keyEntry );
+
+ /* connect the signals down */
+
+ connect(keyEntry, SIGNAL(searchOnKey(int, TVVariant)),
+ this, SIGNAL(searchOnKey(int, TVVariant)));
+ connect(keyEntry, SIGNAL(sortChanged(int)),
+ this, SIGNAL(sortChanged(int)));
+
+ ts = t;
+ keyEntry->setTableState(t);
+}
+
+/*!
+ Destroys the TVBrowseView widget
+*/
+TVBrowseView::~TVBrowseView()
+{
+}
+
+void TVBrowseView::rebuildData()
+{
+ if(!ts)
+ return;
+ if(!ts->current_elem) {
+ /* also disable buttons */
+ textViewDisplay->setText("");
+ return;
+ }
+
+ setDisplayText(ts->current_elem);
+}
+
+/* Reset to initial state */
+void TVBrowseView::reset()
+{
+ textViewDisplay->setText("");
+ keyEntry->reset();
+}
+
+/*!
+ sets the data element to be displayed to element
+*/
+void TVBrowseView::setDisplayText(const DataElem *element)
+{
+ QString rep = "";
+
+ KeyListIterator it(*ts->kRep);
+
+ while (it.current()) {
+ if (element->hasValidValue(it.currentKey())) {
+ if(it.currentKey() == ts->current_column) {
+ rep += "<A name=\"ckey\"></A><B><FONT COLOR=#FF0000>"
+ + it.current()->name()
+ + ":</FONT></B> ";
+ } else {
+ rep += "<B>" + it.current()->name() + ":</B> ";
+ }
+ rep += element->toQString(it.currentKey()) + "<BR>";
+ }
+ ++it;
+ }
+
+ textViewDisplay->setText(rep);
+ textViewDisplay->scrollToAnchor("ckey");
+}
+
+void TVBrowseView::rebuildKeys()
+{
+ keyEntry->rebuildKeys();
+}
diff --git a/noncore/apps/tableviewer/ui/tvbrowseview.h b/noncore/apps/tableviewer/ui/tvbrowseview.h
new file mode 100644
index 0000000..1daff1c
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvbrowseview.h
@@ -0,0 +1,55 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef Tvbrowseview_H
+#define Tvbrowseview_H
+
+#include "../db/common.h"
+#include <qwidget.h>
+
+class QTextBrowser;
+class TVBrowseKeyEntry;
+
+class TVBrowseView : public QWidget
+{
+ Q_OBJECT
+
+signals:
+ void searchOnKey(int keyIndex, TVVariant keyValue);
+ void sortChanged(int);
+
+public:
+ TVBrowseView(TableState *t, QWidget* parent = 0,
+ const char* name = 0, WFlags fl = 0);
+ ~TVBrowseView();
+
+ /* Access Methods */
+ void setDisplayText(const DataElem *);
+ void rebuildKeys();
+ void rebuildData();
+ void reset();
+
+private:
+ TableState *ts;
+
+ QTextBrowser* textViewDisplay;
+ TVBrowseKeyEntry *keyEntry;
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/ui/tveditview.cpp b/noncore/apps/tableviewer/ui/tveditview.cpp
new file mode 100644
index 0000000..ba2bd06
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tveditview.cpp
@@ -0,0 +1,235 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+/* The edit view widget. For each key in the DB display an
+ * appropriate edit box, and a 'key' button to change that particular
+ * key information (delete or edit).
+ *
+ * Bottem line should be a 'new key' button. Should be able to scroll
+ * in both directions.
+ */
+
+#include "tveditview.h"
+#include "commonwidgets.h"
+
+#include <qlayout.h>
+#include <qgrid.h>
+#include <qvbox.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qlist.h>
+#include <qlabel.h>
+#include <qscrollview.h>
+#include <qsignalmapper.h>
+
+TVEditView::TVEditView(TableState *s, DataElem *d, QWidget* parent = 0,
+ const char *name = 0, WFlags fl =0) : QDialog(parent, name, true, fl)
+{
+ if (!name)
+ setName("TVEditView");
+
+ QVBoxLayout *layout = new QVBoxLayout(this, 0); /* only so that will resize
+ correctly in other
+ widgets */
+
+ toggles = new QSignalMapper(this);
+ QScrollView *sv = new QScrollView(this, 0);
+ sv->setResizePolicy(QScrollView::AutoOneFit);
+
+ layout->addWidget(sv);
+
+ editDisplay = new QGrid(3, sv, 0);
+ editDisplay->setSpacing(3);
+ sv->addChild(editDisplay);
+
+ connect(toggles, SIGNAL(mapped(int)), this, SLOT(toggleEnabled(int)));
+
+ setData(s, d);
+#ifdef Q_WS_QWS
+ showMaximized();
+#endif
+}
+
+TVEditView::~TVEditView()
+{
+}
+
+/*! set up the widgets in the grid, Set up initial values */
+void TVEditView::setData(TableState *t, DataElem *d)
+{
+
+ /* TODO need to somehow clear old children... a delete of each
+ * child? */
+ keyIds.clear();
+
+ KeyListIterator it(*t->kRep);
+
+ int i = 0;
+ while(it.current()) {
+ if (t->kRep->validIndex(it.currentKey())) {
+ new QLabel(it.current()->name(), editDisplay);
+ keyIds.insert(i, it.currentKey());
+ if (d->hasValidValue(it.currentKey())) {
+ switch(it.current()->type()) {
+ case TVVariant::String: {
+ QLineEdit *edit = new QLineEdit(editDisplay, 0);
+ edit->setText(d->getField(it.currentKey()).toString());
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Int: {
+ IntEdit *edit = new IntEdit(editDisplay, 0);
+ edit->setValue(d->getField(it.currentKey()).toInt());
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Time: {
+ TimeEdit *edit = new TimeEdit(editDisplay, 0);
+ edit->setTime(d->getField(it.currentKey()).toTime());
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Date: {
+ DateEdit *edit = new DateEdit(editDisplay, 0);
+ edit->setDate(d->getField(it.currentKey()).toDate());
+ edits.append(edit);
+ break;
+ }
+ default:
+ edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay));
+ }
+ QCheckBox *tb = new QCheckBox(editDisplay);
+ tb->setChecked(TRUE);
+ toggles->setMapping(tb, i);
+ connect(tb, SIGNAL(clicked()), toggles, SLOT(map()));
+ buttons.append(tb);
+ } else {
+ /* No valid value.. set to null */
+ switch(it.current()->type()) {
+ case TVVariant::String: {
+ QLineEdit *edit = new QLineEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Int: {
+ IntEdit *edit = new IntEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Time: {
+ TimeEdit *edit = new TimeEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ case TVVariant::Date: {
+ DateEdit *edit = new DateEdit(editDisplay, 0);
+ edit->setEnabled(false);
+ edits.append(edit);
+ break;
+ }
+ default:
+ edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay));
+ }
+ QCheckBox *tb = new QCheckBox(editDisplay);
+ tb->setChecked(FALSE);
+ toggles->setMapping(tb, i);
+ connect(tb, SIGNAL(clicked()), toggles, SLOT(map()));
+ buttons.append(tb);
+ }
+ i++;
+ }
+ ++it;
+ }
+ num_edits = i;
+}
+
+void TVEditView::toggleEnabled(int i) {
+
+ if(edits.at(i)->isEnabled()) {
+ edits.at(i)->setEnabled(false);
+ buttons.at(i)->setChecked(FALSE);
+ } else {
+ edits.at(i)->setEnabled(true);
+ buttons.at(i)->setChecked(TRUE);
+ }
+}
+
+bool TVEditView::openEditItemDialog(TableState *ts, DataElem *d,
+ QWidget *parent)
+{
+ int i;
+ int keyId;
+
+ if(!ts) return 0;
+ if(!d) return 0;
+ if(!ts->kRep) return 0;
+
+ TVEditView *dlg = new TVEditView(ts, d, parent);
+
+ if (dlg->exec() == QDialog::Accepted ) {
+ /* update the element, basically for each
+ edits, if isEnabled, set Value, else unsetField */
+
+ for(i = 0; i < dlg->num_edits; i++) {
+ keyId = dlg->keyIds[i];
+ if(dlg->edits.at(i)->isEnabled()) {
+ switch(d->getFieldType(keyId)) {
+ case TVVariant::String: {
+ TVVariant value = TVVariant(
+ ((QLineEdit *)dlg->edits.at(i))->text());
+ d->setField(keyId, value);
+ break;
+ }
+ case TVVariant::Int: {
+ TVVariant value = TVVariant(
+ ((IntEdit *)dlg->edits.at(i))->value());
+ d->setField(keyId, value);
+ break;
+ }
+ case TVVariant::Time: {
+ TVVariant value = TVVariant(
+ ((TimeEdit *)dlg->edits.at(i))->time());
+ d->setField(keyId, value);
+ break;
+ }
+ case TVVariant::Date: {
+ TVVariant value = TVVariant(
+ ((DateEdit *)dlg->edits.at(i))->date());
+ d->setField(keyId, value);
+ break;
+ }
+ default:
+ break;
+ }
+ } else {
+ /* unset the field */
+ d->unsetField(keyId);
+ }
+ }
+ delete dlg;
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/noncore/apps/tableviewer/ui/tveditview.h b/noncore/apps/tableviewer/ui/tveditview.h
new file mode 100644
index 0000000..94c51d9
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tveditview.h
@@ -0,0 +1,62 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef Tveditview_H
+#define Tveditview_H
+
+#include <qwidget.h>
+#include <qlist.h>
+#include <qdialog.h>
+#include <qmap.h>
+#include "../db/common.h"
+
+class QGrid;
+class QSignalMapper;
+class QCheckBox;
+
+class TVEditView : public QDialog
+{
+ Q_OBJECT
+
+public:
+ TVEditView(TableState *s, DataElem *d, QWidget* parent = 0,
+ const char* name = 0, WFlags fl = 0);
+ ~TVEditView();
+
+ static bool openEditItemDialog(TableState *s, DataElem *d, QWidget *parent);
+
+protected slots:
+ void toggleEnabled(int);
+
+protected:
+
+ void setData(TableState *s, DataElem *d);
+
+ QGrid *editDisplay;
+ QList<QWidget> edits;
+ QList<QCheckBox> buttons;
+ QSignalMapper *toggles;
+
+ QMap<int,int> keyIds;
+
+ int num_edits;
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/ui/tvfilterview.cpp b/noncore/apps/tableviewer/ui/tvfilterview.cpp
new file mode 100644
index 0000000..72d39d6
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvfilterview.cpp
@@ -0,0 +1,304 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "tvfilterview.h"
+#include <qtoolbutton.h>
+#include <qcombobox.h>
+#include <qlistview.h>
+#include <qlayout.h>
+#include <qheader.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+
+TVFilterView::TVFilterView(TableState *t, QWidget* parent = 0,
+ const char *name = 0, WFlags fl =0) : QDialog(parent, name, TRUE, fl)
+{
+ if ( !name )
+ setName( "Filter View" );
+
+ QVBoxLayout *vlayout = new QVBoxLayout(this);
+
+ display = new QListView(this, "display");
+ display->addColumn("Key");
+ display->addColumn("Constraint");
+ display->addColumn("Value");
+ display->header()->setClickEnabled(FALSE);
+ display->header()->setResizeEnabled(FALSE);
+
+ vlayout->addWidget(display);
+
+ QHBoxLayout *hlayout = new QHBoxLayout;
+ hlayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
+
+ newFilterButton = new QPushButton(this, "new Filter");
+ newFilterButton->setMaximumSize(QSize(50, 32767));
+ newFilterButton->setText("New");
+ hlayout->addWidget(newFilterButton);
+
+ deleteFilterButton = new QPushButton(this, "delete Filter");
+ deleteFilterButton->setMaximumSize(QSize(50, 32767));
+ deleteFilterButton->setText("Delete");
+ hlayout->addWidget(deleteFilterButton);
+
+ clearFilterButton = new QPushButton(this, "delete Filter");
+ clearFilterButton->setMaximumSize(QSize(60, 32767));
+ clearFilterButton->setText("Clear All");
+ hlayout->addWidget(clearFilterButton);
+
+ vlayout->addLayout(hlayout);
+
+ QHBoxLayout *hlayout2 = new QHBoxLayout;
+
+ keyNameCombo = new QComboBox(FALSE, this, "key name");
+ keyNameCombo->setEnabled(FALSE);
+ hlayout2->addWidget(keyNameCombo);
+
+ QLabel *label = new QLabel(this);
+ label->setText("has value");
+ hlayout2->addWidget(label);
+
+ keyEntry = new TVFilterKeyEntry(this, "key entry");
+ keyEntry->setEnabled(FALSE);
+
+ vlayout->addLayout(hlayout2);
+ vlayout->addWidget(keyEntry);
+
+ connect(newFilterButton, SIGNAL( clicked() ), this, SLOT( newTerm() ));
+ connect(deleteFilterButton, SIGNAL( clicked() ), this, SLOT( deleteTerm()));
+ connect(clearFilterButton, SIGNAL( clicked() ), this, SLOT( clearTerms()));
+
+ connect(keyEntry, SIGNAL(valueChanged()), this, SLOT( updateTerm() ));
+ connect(keyNameCombo, SIGNAL(activated(int)), this, SLOT( updateTerm() ));
+
+ connect(display, SIGNAL(selectionChanged(QListViewItem*)), this,
+ SLOT(setTerm(QListViewItem *)));
+
+ ts = t;
+ current = 0;
+ terms.setAutoDelete(true);
+ do_filter = false;
+
+#ifdef Q_WS_QWS
+ showMaximized();
+#endif
+}
+
+/*!
+ Destroys the TVFilterView widget
+*/
+TVFilterView::~TVFilterView()
+{
+}
+
+void TVFilterView::rebuildData()
+{
+}
+
+void TVFilterView::reset()
+{
+ keyNameCombo->clear();
+ keyIds.clear();
+}
+
+void TVFilterView::rebuildKeys()
+{
+ int i;
+
+ if (!ts) return;
+ if(!ts->kRep) return;
+ keyEntry->setTableState(ts);
+
+ /* set up the list of keys that can be compared on */
+ keyNameCombo->clear();
+ KeyListIterator it(*ts->kRep);
+
+ i = 0;
+ while(it.current()) {
+ if(ts->kRep->validIndex(it.currentKey())) {
+ keyNameCombo->insertItem(it.current()->name());
+ keyIds.insert(i, it.currentKey());
+ ++i;
+ }
+ ++it;
+ }
+}
+
+bool TVFilterView::passesFilter(DataElem *d) {
+ if (!filterActive()) return true;
+
+
+ FilterTerm *t;
+
+ for (t = terms.first(); t != 0; t = terms.next() ) {
+ /* check against filter */
+ switch(t->ct) {
+ case ct_less:
+ if (!d->lessThan(t->keyIndex, t->value))
+ return false;
+ break;
+ case ct_more:
+ if (!d->moreThan(t->keyIndex, t->value))
+ return false;
+ break;
+ case ct_equal:
+ if (!d->equalTo(t->keyIndex, t->value))
+ return false;
+ break;
+ case ct_contains:
+ if (!d->contains(t->keyIndex, t->value))
+ return false;
+ break;
+ case ct_startswith:
+ if (!d->startsWith(t->keyIndex, t->value))
+ return false;
+ break;
+ case ct_endswith:
+ if (!d->endsWith(t->keyIndex, t->value))
+ return false;
+ break;
+ default:
+ qWarning("TVFilterView::passesFilter() "
+ "unrecognized filter type");
+ return false;
+ }
+ }
+ return true;
+}
+
+bool TVFilterView::filterActive() const
+{
+ /* when button operated, also check the do_filter value
+ return do_filter;
+ */
+ if (terms.isEmpty())
+ return false;
+ return true;
+}
+
+/* SLOTS */
+void TVFilterView::newTerm()
+{
+ if (!ts) return;
+
+ FilterTerm *term = new FilterTerm;
+ current = term;
+
+ term->view = 0;
+
+ updateTerm();
+
+ display->setSelected(term->view, true);
+ terms.append(term);
+
+ keyEntry->setEnabled(true);
+ keyNameCombo->setEnabled(true);
+}
+
+void TVFilterView::updateTerm()
+{
+ FilterTerm *term;
+ /* Read the widget values (keyname, compare type, value)
+ * and build the lists */
+ if (!ts) return;
+ if (!current) return;
+
+ QString keyString;
+ QString cmpString;
+ QString vString;
+
+ term = current;
+
+ /* create new list item, set initial values, enable widgets */
+ term->keyIndex = keyIds[keyNameCombo->currentItem()];
+ keyEntry->setKey(term->keyIndex); /* so the next two items make sense */
+ term->ct = keyEntry->getCompareType(),
+ term->value = keyEntry->getCompareValue();
+
+ keyString = keyNameCombo->currentText();
+
+ switch(term->ct) {
+ case ct_less:
+ cmpString = " less than ";
+ break;
+ case ct_more:
+ cmpString = " more than ";
+ break;
+ case ct_equal:
+ cmpString = " equal to ";
+ break;
+ case ct_contains:
+ cmpString = " containing ";
+ break;
+ case ct_startswith:
+ cmpString = " starting with ";
+ break;
+ case ct_endswith:
+ cmpString = " ending with ";
+ break;
+ default:
+ cmpString = " ERROR ";
+ }
+
+ vString = term->value.toString();
+
+ /* remove old view */
+ if (term->view)
+ delete(term->view);
+ term->view = new QListViewItem(display, 0, keyString, cmpString, vString);
+ display->setSelected(term->view, true);
+}
+
+/* deletes current term */
+void TVFilterView::deleteTerm()
+{
+ if(!current) return;
+ if (current->view)
+ delete(current->view);
+
+ terms.removeRef(current);
+
+ current = terms.first();
+
+ if(terms.isEmpty()) {
+ keyEntry->setEnabled(false);
+ keyNameCombo->setEnabled(false);
+ }
+}
+
+/* clears all terminations */
+void TVFilterView::clearTerms()
+{
+ while(current)
+ deleteTerm();
+}
+
+void TVFilterView::setTerm(QListViewItem *target)
+{
+ /* Iterate through the list to find item with view=target..
+ * set as current, delete */
+ FilterTerm *term = current;
+
+ for (current = terms.first(); current != 0; current = terms.next() )
+ if (current->view == target)
+ break;
+
+ if (!current) {
+ current = term;
+ }
+}
diff --git a/noncore/apps/tableviewer/ui/tvfilterview.h b/noncore/apps/tableviewer/ui/tvfilterview.h
new file mode 100644
index 0000000..5de87b9
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvfilterview.h
@@ -0,0 +1,88 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef Tvfilterview_H
+#define Tvfilterview_H
+
+#include "filterkeyentry.h"
+#include "../db/common.h"
+#include <qlist.h>
+#include <qmap.h>
+#include <qdialog.h>
+
+class QListViewItem;
+class QPushButton;
+class QListView;
+class TVFilterKeyEntry;
+
+class TVFilterView : public QDialog
+{
+ Q_OBJECT
+
+signals:
+ void editView();
+ void listView();
+ void browseView();
+ void loadFile();
+
+protected slots:
+ void newTerm();
+ void deleteTerm();
+ void clearTerms();
+ void updateTerm();
+ void setTerm(QListViewItem *);
+
+public:
+ TVFilterView(TableState *t, QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
+ ~TVFilterView();
+
+ /* Access Methods */
+ void rebuildKeys();
+ void rebuildData();
+ void reset();
+
+ bool passesFilter(DataElem *d);
+ bool filterActive() const; /* return true if and only if filtering is on */
+
+ QListView* display;
+ QPushButton* newFilterButton;
+ QPushButton* deleteFilterButton;
+ QPushButton* clearFilterButton;
+ QComboBox* keyNameCombo;
+
+ TVFilterKeyEntry* keyEntry;
+private:
+
+ typedef struct _FilterTerm {
+ int keyIndex;
+ CmpType ct;
+ TVVariant value;
+ QListViewItem *view;
+ } FilterTerm;
+
+ QList<FilterTerm> terms;
+ FilterTerm *current;
+ bool do_filter;
+
+ TableState *ts;
+
+ QMap<int, int> keyIds;
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/ui/tvkeyedit.cpp b/noncore/apps/tableviewer/ui/tvkeyedit.cpp
new file mode 100644
index 0000000..fb7b7fe
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvkeyedit.cpp
@@ -0,0 +1,254 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "tvkeyedit.h"
+#include <qtoolbutton.h>
+#include <qlineedit.h>
+#include <qcombobox.h>
+#include <qlistview.h>
+#include <qmessagebox.h>
+#include <stdlib.h>
+#include <qpushbutton.h>
+
+/* QList view item... ?? that can store and update the values that I will
+ * be changing */
+
+class TVKEListViewItem : public QListViewItem
+{
+public:
+ TVKEListViewItem(QString n, TVVariant::KeyType kt, int p, QListView *parent) :
+ QListViewItem(parent)
+ {
+ name = n;
+ keyType = kt;
+ position = p;
+ }
+
+ QString text(int i) const
+ {
+ if(i) {
+ return TVVariant::typeToName(keyType);
+ }
+ return name;
+ }
+
+ /* always sort by key index, ignore i */
+ QString key(int, bool) const
+ {
+ return QString().sprintf("%08d", position);
+ }
+
+ void setText(int i, const QString &)
+ {
+ ;
+ }
+
+ QString getName() const
+ {
+ return name;
+ }
+
+ void setName(QString n)
+ {
+ name = n;
+ repaint();
+ }
+
+ TVVariant::KeyType getKeyType() const
+ {
+ return keyType;
+ }
+
+ void setKeyType(TVVariant::KeyType k)
+ {
+ keyType = k;
+ repaint();
+ }
+
+ inline int getPos() const
+ {
+ return position;
+ }
+
+private:
+ QString name;
+ TVVariant::KeyType keyType;
+ int position;
+};
+
+TVKeyEdit::TVKeyEdit(TableState *t, QWidget* parent = 0, const char *name = 0,
+ WFlags fl = 0) : TVKeyEdit_gen(parent, name, true, fl)
+{
+ int i;
+ ts = t;
+
+ if(!ts) return;
+ if(!ts->kRep) return;
+
+ working_state = *ts->kRep;
+
+ i = 1;
+ keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i));
+ i++;
+ keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i));
+ i++;
+ keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i));
+ i++;
+ keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i));
+
+ KeyListIterator it(*ts->kRep);
+ while(it.current()) {
+ if(t->kRep->validIndex(it.currentKey())) {
+ new TVKEListViewItem(it.current()->name(),
+ it.current()->type(),
+ it.currentKey(),
+ display);
+ }
+ ++it;
+ }
+ num_keys = ts->kRep->getNumFields();
+ if(display->childCount() > 0) {
+ display->setCurrentItem(display->firstChild());
+ setTerm(display->currentItem());
+ } else {
+ deleteKeyButton->setEnabled(FALSE);
+ clearKeysButton->setEnabled(FALSE);
+ keyNameEdit->setEnabled(FALSE);
+ keyTypeEdit->setEnabled(FALSE);
+ }
+
+ display->setSorting(0);
+#ifdef Q_WS_QWS
+ showMaximized();
+#endif
+}
+
+/*!
+ Destroys the TVKeyEdit widget
+*/
+TVKeyEdit::~TVKeyEdit()
+{
+}
+
+/* SLOTS */
+void TVKeyEdit::newTerm()
+{
+ /* new item, make current Item */
+ int i;
+
+ i = working_state.addKey("<New Key>", TVVariant::String);
+ //working_state.setNewFlag(i, TRUE);
+ TVKEListViewItem *nItem = new TVKEListViewItem("<New Key>",
+ TVVariant::String,
+ i,
+ display);
+ display->setCurrentItem(nItem);
+ setTerm(nItem);
+
+ num_keys++;
+ if(display->childCount() == 1) {
+ deleteKeyButton->setEnabled(TRUE);
+ clearKeysButton->setEnabled(TRUE);
+ keyNameEdit->setEnabled(TRUE);
+ keyTypeEdit->setEnabled(TRUE);
+ }
+}
+
+void TVKeyEdit::updateTerm(const QString &newName)
+{
+ /* TODO if name matches a deleted term, prompt for
+ renewing old data instead */
+ TVKEListViewItem *i = (TVKEListViewItem *)display->currentItem();
+ if(i) {
+ i->setName(newName);
+ working_state.setKeyName(i->getPos(), newName);
+ }
+}
+
+void TVKeyEdit::updateTerm(int t)
+{
+ /* t is an index to a combo in a menu, NOT a type */
+ t++; /* menu counts from 0, types count from 1 */
+ TVKEListViewItem *i = (TVKEListViewItem *)display->currentItem();
+ if (i) {
+ i->setKeyType((TVVariant::KeyType)t);
+ working_state.setKeyType(i->getPos(), (TVVariant::KeyType)t);
+ }
+}
+
+/* deletes current term
+ * really just marks key as deleted so is now invalid.
+ * the actual delete will happen when data is 'cleaned'
+ * or when file is saved.
+ */
+
+void TVKeyEdit::deleteTerm()
+{
+ TVKEListViewItem *i = (TVKEListViewItem *)display->currentItem();
+ if (i) {
+ working_state.setDeleteFlag(i->getPos(), TRUE);
+ delete i;
+ }
+ if(!display->childCount()) {
+ /* disable the delete and clear buttons, etc */
+ deleteKeyButton->setEnabled(FALSE);
+ clearKeysButton->setEnabled(FALSE);
+ keyNameEdit->setEnabled(FALSE);
+ keyTypeEdit->setEnabled(FALSE);
+ }
+}
+
+/* clears all terminations */
+void TVKeyEdit::clearTerms()
+{
+ /* should pop up a warning */
+ if (QMessageBox::warning(this, "Delete all keys",
+ "Are you sure you want to\ndelete all the keys?",
+ "Yes", "No") == 0)
+ {
+ while(display->currentItem())
+ deleteTerm();
+ }
+}
+
+void TVKeyEdit::setTerm(QListViewItem *target)
+{
+ /* need to update the widgets to show keys values */
+ keyNameEdit->setText(((TVKEListViewItem *)target)->getName());
+ int t = (int)(((TVKEListViewItem *)target)->getKeyType());
+ t--;
+ keyTypeEdit->setCurrentItem(t);
+}
+
+KeyList* TVKeyEdit::openEditKeysDialog(TableState *t, QWidget *parent = 0)
+{
+ if(!t)
+ return 0;
+ if(!t->kRep)
+ return 0;
+
+ TVKeyEdit *dlg = new TVKeyEdit(t, parent);
+
+ if ((dlg->exec() == QDialog::Accepted) &&
+ (dlg->working_state != *t->kRep))
+ {
+ return (new KeyList(dlg->working_state));
+ }
+ return 0;
+}
diff --git a/noncore/apps/tableviewer/ui/tvkeyedit.h b/noncore/apps/tableviewer/ui/tvkeyedit.h
new file mode 100644
index 0000000..5e80b66
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvkeyedit.h
@@ -0,0 +1,56 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef Tvkeyedit_H
+#define Tvkeyedit_H
+
+#include "tvkeyedit_gen.h"
+#include "../db/common.h"
+
+class TVKeyEdit : public TVKeyEdit_gen
+{
+ Q_OBJECT
+
+signals:
+ void listView();
+ void browseView();
+
+protected slots:
+ void newTerm();
+ void deleteTerm();
+ void clearTerms();
+ void updateTerm(int);
+ void updateTerm(const QString &);
+ void setTerm(QListViewItem *);
+
+public:
+ TVKeyEdit(TableState *ts, QWidget* parent = 0, const char* name = 0, WFlags fl = 0);
+ ~TVKeyEdit();
+
+
+ static KeyList *openEditKeysDialog(TableState *ts, QWidget *parent);
+
+private:
+
+ TableState *ts;
+ int num_keys;
+ KeyList working_state;
+};
+
+#endif
diff --git a/noncore/apps/tableviewer/ui/tvkeyedit_gen.ui b/noncore/apps/tableviewer/ui/tvkeyedit_gen.ui
new file mode 100644
index 0000000..5c19d06
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvkeyedit_gen.ui
@@ -0,0 +1,239 @@
+<!DOCTYPE UI><UI>
+<class>TVKeyEdit_gen</class>
+<comment>Dialog for editing the keys and key types</comment>
+<author>Ian Walters</author>
+<forward>class QListViewItem;</forward>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TVKeyEdit_gen</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>194</width>
+ <height>418</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>TableViewer - Edit Keys</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QListView</class>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Key Name</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>false</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Key Type</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>false</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>false</bool>
+ </property>
+ </column>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>display</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>newKeyButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>New</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>deleteKeyButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>50</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Delete</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>clearKeysButton</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>60</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Clear All</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>keyNameEdit</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>keyTypeEdit</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>newKeyButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TVKeyEdit_gen</receiver>
+ <slot>newTerm()</slot>
+ </connection>
+ <connection>
+ <sender>deleteKeyButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TVKeyEdit_gen</receiver>
+ <slot>deleteTerm()</slot>
+ </connection>
+ <connection>
+ <sender>clearKeysButton</sender>
+ <signal>clicked()</signal>
+ <receiver>TVKeyEdit_gen</receiver>
+ <slot>clearTerms()</slot>
+ </connection>
+ <connection>
+ <sender>display</sender>
+ <signal>selectionChanged(QListViewItem*)</signal>
+ <receiver>TVKeyEdit_gen</receiver>
+ <slot>setTerm(QListViewItem *)</slot>
+ </connection>
+ <connection>
+ <sender>keyNameEdit</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>TVKeyEdit_gen</receiver>
+ <slot>updateTerm(const QString &amp;)</slot>
+ </connection>
+ <connection>
+ <sender>keyTypeEdit</sender>
+ <signal>activated(int)</signal>
+ <receiver>TVKeyEdit_gen</receiver>
+ <slot>updateTerm(int)</slot>
+ </connection>
+ <slot access="protected">clearTerms()</slot>
+ <slot access="protected">deleteTerm()</slot>
+ <slot access="protected">newTerm()</slot>
+ <slot access="public">new_slot()</slot>
+ <slot access="protected">setTerm(QListViewItem *)</slot>
+ <slot access="protected">updateTerm(int)</slot>
+ <slot access="protected">updateTerm(const QString &amp;)</slot>
+</connections>
+</UI>
diff --git a/noncore/apps/tableviewer/ui/tvlistview.cpp b/noncore/apps/tableviewer/ui/tvlistview.cpp
new file mode 100644
index 0000000..82d67c6
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvlistview.cpp
@@ -0,0 +1,315 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "tvlistview.h"
+#include "../db/common.h"
+#include <qtoolbutton.h>
+#include <qlistview.h>
+#include <qlayout.h>
+
+void TVListViewPrivate::setColumnWidth(int column, int width)
+{
+ if(width > 70) width = 70;
+ QListView::setColumnWidth(column, width);
+}
+
+void TVListViewPrivate::setSorting(int column, bool increasing)
+{
+ emit sortChanged(column);
+ QListView::setSorting(column, increasing);
+}
+
+TVListViewPrivate::TVListViewPrivate(QWidget *parent, const char* name,
+ WFlags fl) : QListView(parent, name, fl) {
+ ;
+}
+
+class TVListViewItem : public QListViewItem
+{
+public:
+
+ TVListViewItem(QListView *parent, DataElem *d);
+ ~TVListViewItem();
+
+ QString text(int i) const
+ {
+ return data_reference->toQString(i);
+ }
+
+ /* Do nothing... all data for this item should be generated */
+ void setText(int i, const QString &)
+ {
+ ;
+ }
+ QString key(int i, bool a) const
+ {
+ return data_reference->toSortableQString(i);
+ }
+
+ void setDataElem(DataElem *d)
+ {
+ data_reference = d;
+ }
+
+ DataElem *getDataElem() {
+ return data_reference;
+ }
+private:
+ DataElem *data_reference;
+};
+
+TVListViewItem::TVListViewItem(QListView *parent, DataElem *d)
+ : QListViewItem(parent)
+{
+ data_reference = d;
+}
+
+TVListViewItem::~TVListViewItem()
+{
+ data_reference = 0;
+}
+
+TVListView::TVListView(TableState *t, QWidget* parent = 0,
+ const char *name = 0, WFlags fl =0) : QWidget(parent, name, fl)
+{
+ if (!name)
+ setName("TVListView");
+
+ // the next two lines need to be rationalized.
+ resize(318,457);
+ setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7,
+ (QSizePolicy::SizeType)7, sizePolicy().hasHeightForWidth()));
+ setCaption(tr("List View"));
+
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ layout->setSpacing(0);
+ layout->setMargin(0);
+
+ listViewDisplay = new TVListViewPrivate(this, "listViewDisplay");
+ layout->addWidget(listViewDisplay);
+
+ connect(listViewDisplay, SIGNAL(currentChanged(QListViewItem *)), this,
+ SLOT(setCurrent(QListViewItem *)));
+ connect(listViewDisplay, SIGNAL(sortChanged(int)), this,
+ SLOT(setSorting(int)));
+
+ listViewDisplay->setShowSortIndicator(true);
+
+ it = new QListViewItemIterator(listViewDisplay);
+ ts = t;
+}
+
+TVListView::~TVListView()
+{
+}
+
+void TVListView::addItem(DataElem *d)
+{
+ TVListViewItem *i = new TVListViewItem(listViewDisplay, d);
+
+ delete it;
+ it = new QListViewItemIterator(i);
+}
+
+/* remove current (it) item */
+void TVListView::removeItem()
+{
+ QListViewItemIterator other(*it);
+
+ QListViewItemIterator tmp = *it;
+ (*it)++;
+ if (!it->current()) {
+ *it = tmp;
+ (*it)--;
+ if (!it->current()) {
+ delete it;
+ it = 0;
+ }
+ }
+
+ delete other.current();
+}
+
+void TVListView::clearItems()
+{
+ /* This is ok since the destructor for TVListItem does not know about
+ the data_reference pointer.. and hence will leave it alone */
+ listViewDisplay->clear();
+ delete it;
+ it = new QListViewItemIterator(listViewDisplay);
+}
+
+void TVListView::first()
+{
+ delete it;
+ it = new QListViewItemIterator(listViewDisplay);
+}
+
+void TVListView::last()
+{
+ qWarning("TVListView::last not yet implemented");
+}
+
+void TVListView::next()
+{
+ QListViewItemIterator tmp = *it;
+ (*it)++;
+ if (!it->current()) {
+ *it = tmp;
+ }
+}
+
+void TVListView::previous()
+{
+ QListViewItemIterator tmp = *it;
+ (*it)--;
+ if (!it->current()) {
+ *it = tmp;
+ }
+}
+
+DataElem *TVListView::getCurrentData() {
+ if (it->current()) {
+ return ((TVListViewItem *)it->current())->getDataElem();
+ }
+ return NULL;
+}
+
+/*! Now to implement the closest match function */
+void TVListView::findItem(int keyId, TVVariant value)
+{
+ QListViewItem *i;
+ TVListViewItem *best_so_far = NULL;
+ /* start at the beginning... go through till find the closest elem */
+ i = listViewDisplay->firstChild();
+ while (i) {
+ /* search stuff */
+ if(best_so_far) {
+ if (DataElem::closer(
+ ((TVListViewItem *)i)->getDataElem(),
+ best_so_far->getDataElem(), value, keyId))
+ best_so_far = (TVListViewItem *)i;
+ } else {
+ if (DataElem::closer(
+ ((TVListViewItem *)i)->getDataElem(),
+ NULL, value, keyId))
+ best_so_far = (TVListViewItem *)i;
+ }
+
+ i = i->itemBelow();
+ }
+ if (best_so_far) {
+ /* set best_so_far to current element */
+ delete it;
+ it = new QListViewItemIterator(best_so_far);
+ }
+}
+
+void TVListView::rebuildKeys()
+{
+ int i;
+ if(!ts) return;
+ if(!ts->kRep) return;
+
+ i = listViewDisplay->columns();
+
+ while(i > 0)
+ listViewDisplay->removeColumn(--i);
+
+ KeyListIterator kit(*ts->kRep);
+ i = 0;
+ while(kit.current()) {
+ if(!kit.current()->delFlag()) {
+ listViewDisplay->addColumn(kit.current()->name());
+ keyIds.insert(i, kit.currentKey());
+ ++i;
+ }
+ ++kit;
+ }
+}
+
+
+void TVListView::setSorting(int column)
+{
+ /* Without table state can't do anything */
+ if (ts == 0)
+ return;
+ if (keyIds[column] != ts->current_column) {
+ ts->current_column = keyIds[column];
+ }
+}
+
+void TVListView::rebuildData() {
+ int i;
+ QMap<int, int>::Iterator kit;
+ /* Need to set sort order */
+ if(!ts)
+ return;
+
+ /* revers lookup the column */
+ i = -1;
+ for(kit = keyIds.begin(); kit != keyIds.end(); ++kit) {
+ if (kit.data() == ts->current_column) {
+ i = kit.key();
+ break;
+ }
+ }
+ if (i == -1)
+ return;
+
+ listViewDisplay->setSorting(i);
+ listViewDisplay->sort();
+
+ /* reset current element */
+ listViewDisplay->setCurrentItem(it->current());
+ listViewDisplay->setSelected(it->current(), true);
+ listViewDisplay->ensureItemVisible(it->current());
+}
+
+void TVListView::reset()
+{
+ int i;
+ listViewDisplay->clear();
+
+ i = listViewDisplay->columns();
+ while (i > 0)
+ listViewDisplay->removeColumn(--i);
+
+ keyIds.clear();
+}
+
+void TVListView::setCurrent(QListViewItem *i)
+{
+ /* cast */
+ TVListViewItem *t = (TVListViewItem *)i;
+
+ if(!t) {
+ /* set current to null */
+ ts->current_elem = 0;
+ return;
+ }
+
+ ts->current_elem = t->getDataElem();
+ /* now also set up the iterator */
+
+ delete it;
+ it = new QListViewItemIterator(i);
+
+ //emit browseView();
+}
diff --git a/noncore/apps/tableviewer/ui/tvlistview.h b/noncore/apps/tableviewer/ui/tvlistview.h
new file mode 100644
index 0000000..26bc299
--- a/dev/null
+++ b/noncore/apps/tableviewer/ui/tvlistview.h
@@ -0,0 +1,92 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef Tvlistview_H
+#define Tvlistview_H
+
+#include "../db/common.h"
+#include <qlistview.h>
+#include <qmap.h>
+
+class QListViewItemIterator;
+
+class TVListViewPrivate : public QListView
+{
+ Q_OBJECT
+
+signals:
+ void sortChanged(int i);
+
+public:
+ TVListViewPrivate( QWidget *parent = 0, const char *name = 0, WFlags fl = 0);
+
+ void setColumnWidth(int c, int w);
+ void setSorting(int i, bool increasing=true);
+};
+
+class TVListView : public QWidget
+{
+ Q_OBJECT
+
+signals:
+ void loadFile();
+ void browseView();
+ void filterView();
+ void editView();
+
+protected slots:
+ void setSorting(int);
+ void setCurrent(QListViewItem *);
+
+public:
+ TVListView(TableState *t, QWidget* parent = 0,
+ const char* name = 0, WFlags fl = 0);
+ ~TVListView();
+
+ /* to be used for setting up the list */
+ void addItem(DataElem *);
+ void removeItem(); // remove from list, not from program
+ void clearItems();
+
+ /* DBStore clone functions */
+ void first();
+ void last();
+ void next();
+ void previous();
+
+ void rebuildKeys();
+ void rebuildData();
+ void reset();
+
+ DataElem *getCurrentData();
+
+ void findItem(int i, TVVariant v);
+
+protected:
+ QListViewItemIterator *it;
+ TableState *ts;
+
+ TVListViewPrivate *listViewDisplay;
+
+ QMap<int, int> keyIds;
+
+};
+
+#endif
diff --git a/noncore/comm/keypebble/.cvsignore b/noncore/comm/keypebble/.cvsignore
new file mode 100644
index 0000000..c4782a1
--- a/dev/null
+++ b/noncore/comm/keypebble/.cvsignore
@@ -0,0 +1,5 @@
+moc_*
+*.moc
+Makefile
+vncoptionsbase.cpp
+vncoptionsbase.h
diff --git a/noncore/comm/keypebble/LICENSE.GPL b/noncore/comm/keypebble/LICENSE.GPL
new file mode 100644
index 0000000..ec5dad8
--- a/dev/null
+++ b/noncore/comm/keypebble/LICENSE.GPL
@@ -0,0 +1,286 @@
+NOTE! The GPL below is copyrighted by the Free Software Foundation, but
+the instance of code that it refers to (the kde programs) are copyrighted
+by the authors who actually wrote it.
+
+---------------------------------------------------------------------------
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/noncore/comm/keypebble/Makefile.in b/noncore/comm/keypebble/Makefile.in
new file mode 100644
index 0000000..1dbd5d2
--- a/dev/null
+++ b/noncore/comm/keypebble/Makefile.in
@@ -0,0 +1,286 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = keypebble
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = d3des.h \
+ krfbbuffer.h \
+ krfbcanvas.h \
+ krfbconnection.h \
+ krfbdecoder.h \
+ krfblogin.h \
+ krfboptions.h \
+ krfbserverinfo.h \
+ kvnc.h \
+ kvncconnectdlg.h \
+ kvncoptionsdlg.h \
+ version.h \
+ vncauth.h
+SOURCES = d3des.c \
+ vncauth.c \
+ krfbbuffer.cpp \
+ krfbcanvas.cpp \
+ krfbconnection.cpp \
+ krfbdecoder.cpp \
+ krfblogin.cpp \
+ krfboptions.cpp \
+ kvnc.cpp \
+ kvncconnectdlg.cpp \
+ kvncoptionsdlg.cpp \
+ main.cpp
+OBJECTS = d3des.o \
+ vncauth.o \
+ krfbbuffer.o \
+ krfbcanvas.o \
+ krfbconnection.o \
+ krfbdecoder.o \
+ krfblogin.o \
+ krfboptions.o \
+ kvnc.o \
+ kvncconnectdlg.o \
+ kvncoptionsdlg.o \
+ main.o \
+ vncoptionsbase.o
+INTERFACES = vncoptionsbase.ui
+UICDECLS = vncoptionsbase.h
+UICIMPLS = vncoptionsbase.cpp
+SRCMOC = moc_krfbbuffer.cpp \
+ moc_krfbcanvas.cpp \
+ moc_krfbconnection.cpp \
+ moc_krfbdecoder.cpp \
+ moc_krfblogin.cpp \
+ moc_kvnc.cpp \
+ moc_kvncconnectdlg.cpp \
+ moc_kvncoptionsdlg.cpp \
+ moc_vncoptionsbase.cpp
+OBJMOC = moc_krfbbuffer.o \
+ moc_krfbcanvas.o \
+ moc_krfbconnection.o \
+ moc_krfbdecoder.o \
+ moc_krfblogin.o \
+ moc_kvnc.o \
+ moc_kvncconnectdlg.o \
+ moc_kvncoptionsdlg.o \
+ moc_vncoptionsbase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake keypebble.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+d3des.o: d3des.c \
+ d3des.h
+
+vncauth.o: vncauth.c \
+ vncauth.h \
+ d3des.h
+
+krfbbuffer.o: krfbbuffer.cpp \
+ krfbdecoder.h \
+ krfbbuffer.h \
+ krfbserverinfo.h
+
+krfbcanvas.o: krfbcanvas.cpp \
+ kvncconnectdlg.h \
+ krfbconnection.h \
+ krfbcanvas.h \
+ krfboptions.h \
+ krfbbuffer.h \
+ $(QPEDIR)/include/qpe/config.h
+
+krfbconnection.o: krfbconnection.cpp \
+ krfbconnection.h \
+ krfblogin.h \
+ krfboptions.h \
+ krfbdecoder.h \
+ krfbbuffer.h
+
+krfbdecoder.o: krfbdecoder.cpp \
+ krfbconnection.h \
+ krfboptions.h \
+ krfbserverinfo.h \
+ krfbdecoder.h \
+ krfbbuffer.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+krfblogin.o: krfblogin.cpp \
+ vncauth.h \
+ krfblogin.h \
+ krfbconnection.h
+
+krfboptions.o: krfboptions.cpp \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ krfboptions.h
+
+kvnc.o: kvnc.cpp \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/global.h \
+ kvnc.h \
+ krfbcanvas.h \
+ kvncoptionsdlg.h \
+ vncoptionsbase.h \
+ krfbconnection.h
+
+kvncconnectdlg.o: kvncconnectdlg.cpp \
+ krfbconnection.h \
+ kvncoptionsdlg.h \
+ vncoptionsbase.h \
+ kvncconnectdlg.h
+
+kvncoptionsdlg.o: kvncoptionsdlg.cpp \
+ krfboptions.h \
+ kvncoptionsdlg.h \
+ vncoptionsbase.h
+
+main.o: main.cpp \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ kvnc.h
+
+vncoptionsbase.h: vncoptionsbase.ui
+ $(UIC) vncoptionsbase.ui -o $(INTERFACE_DECL_PATH)/vncoptionsbase.h
+
+vncoptionsbase.cpp: vncoptionsbase.ui
+ $(UIC) vncoptionsbase.ui -i vncoptionsbase.h -o vncoptionsbase.cpp
+
+vncoptionsbase.o: vncoptionsbase.cpp \
+ vncoptionsbase.h \
+ vncoptionsbase.ui
+
+moc_krfbbuffer.o: moc_krfbbuffer.cpp \
+ krfbbuffer.h
+
+moc_krfbcanvas.o: moc_krfbcanvas.cpp \
+ krfbcanvas.h
+
+moc_krfbconnection.o: moc_krfbconnection.cpp \
+ krfbconnection.h
+
+moc_krfbdecoder.o: moc_krfbdecoder.cpp \
+ krfbdecoder.h
+
+moc_krfblogin.o: moc_krfblogin.cpp \
+ krfblogin.h
+
+moc_kvnc.o: moc_kvnc.cpp \
+ kvnc.h
+
+moc_kvncconnectdlg.o: moc_kvncconnectdlg.cpp \
+ kvncconnectdlg.h
+
+moc_kvncoptionsdlg.o: moc_kvncoptionsdlg.cpp \
+ kvncoptionsdlg.h \
+ vncoptionsbase.h
+
+moc_vncoptionsbase.o: moc_vncoptionsbase.cpp \
+ vncoptionsbase.h
+
+moc_krfbbuffer.cpp: krfbbuffer.h
+ $(MOC) krfbbuffer.h -o moc_krfbbuffer.cpp
+
+moc_krfbcanvas.cpp: krfbcanvas.h
+ $(MOC) krfbcanvas.h -o moc_krfbcanvas.cpp
+
+moc_krfbconnection.cpp: krfbconnection.h
+ $(MOC) krfbconnection.h -o moc_krfbconnection.cpp
+
+moc_krfbdecoder.cpp: krfbdecoder.h
+ $(MOC) krfbdecoder.h -o moc_krfbdecoder.cpp
+
+moc_krfblogin.cpp: krfblogin.h
+ $(MOC) krfblogin.h -o moc_krfblogin.cpp
+
+moc_kvnc.cpp: kvnc.h
+ $(MOC) kvnc.h -o moc_kvnc.cpp
+
+moc_kvncconnectdlg.cpp: kvncconnectdlg.h
+ $(MOC) kvncconnectdlg.h -o moc_kvncconnectdlg.cpp
+
+moc_kvncoptionsdlg.cpp: kvncoptionsdlg.h
+ $(MOC) kvncoptionsdlg.h -o moc_kvncoptionsdlg.cpp
+
+moc_vncoptionsbase.cpp: vncoptionsbase.h
+ $(MOC) vncoptionsbase.h -o moc_vncoptionsbase.cpp
+
+
diff --git a/noncore/comm/keypebble/README.html b/noncore/comm/keypebble/README.html
new file mode 100644
index 0000000..def766b
--- a/dev/null
+++ b/noncore/comm/keypebble/README.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+ <head>
+ <title>Keystone README</title>
+ </head>
+
+ <body>
+ <h1>Keystone README</h1>
+ <div align="justify"> <!-- #BeginEditable "Body" -->
+ <h3>Contents</h3>
+ <ul>
+ <li><a href="#whatisvnc">What is Keystone?</a></li>
+ <li><a href="#servers">Servers</a></li>
+ <li><a href="#status">Status</a></li>
+ <li><a href="#bugs">Bugs</a></li>
+ <li><a href="#download">Download</a></li>
+ <li><a href="#faq">FAQs</a></li>
+ <li><a href="#todo">Todo</a></li>
+ <li><a href="#credits">Credits</a></li>
+ <li><a href="#references">References</a></li>
+ </ul>
+ <h3><a name="whatiskvnc">What is Keystone?</a></h3>
+ <p>Keystone is a tool for <a href="http://www.kde.org/">KDE</a> that
+ allows you to remotely access the desktops of machines using the cross-platform
+ VNC system. Keystone can access machines running a variety of operating
+ systems (including most UNIX systems and Windows 95/98/NT/2000) providing
+ they are running a VNC server. Note that Keystone is only a client
+ program, you will need to download a server separately in order to
+ use it.</p>
+ <p>The protocol used by Keystone (called RFB) was developed, and released
+ as GPL by ORL (now the UK branch of AT&amp;T research), they also
+ wrote and maintain GPL servers for several platforms. You can find
+ both information about the protocol and links to servers for a range
+ of platforms on their <a href="http://www.uk.research.att.com/vnc/">website</a>.</p>
+ <p>Keystone started life as a port of Markus Wuebben's kvncviewer program
+ to KDE 2, but in the course porting the code, I have rewritten and
+ redesigned most of the system. The new implementation builds on several
+ new facilities that were not available in KDE 1, such as KPixmapIO
+ and QSocket. There is so little of the original code left that I have
+ decided on a name change, and to put the version number back to 0.1.</p>
+ <p>You can see a few screenshots of <a href="http://www.ipso-facto.demon.co.uk/keystone/screenshots.html">Keystone
+ in action</a> on my screenshots page. The screenshots may or may not
+ reflect the look of the current version as I have some look and feel
+ improvements planned.</p>
+ <h3><a name="servers">Servers</a></h3>
+ <p>Most Linux distributions include the standard Xvnc server (usually
+ run via the <i>vncserver</i> script), you can also download this and
+ servers for other platforms such as MS Windows from the <a href="http://www.uk.research.att.com/vnc/">VNC
+ website</a>. If you have a problem with setting up a server then you
+ should read the <a href="http://www.uk.research.att.com/vnc/faq.html">VNC
+ FAQ</a>, and if that does not help join the VNC mailing list. Do not
+ mail me on this topic - I can't help and won't even reply.</p>
+ <p>I may in future write a server that operates in the same manner as
+ the Win32 server for KDE. The Win32 server differs from the X11 server
+ in that it does not virtualise the entire desktop. This has both advantages
+ and disadvatages, it means that you can make an existing session available
+ over the network, but only allows you to run a single server. I may
+ also put a GUI together that makes it easy to configure the ORL server.</p>
+ <h3><a name="status">Status</a></h3>
+ <p><font color="#000000">The current version is 0.4, and the following
+ are now working:</font></p>
+ <p>
+ <ul>
+ <li><b>0.1</b>
+ <ul>
+ <li>Non-blocking socket handling</li>
+ <li>Authentication and logon</li>
+ <li>KDE 2 user interface</li>
+ <li>Raw and CopyRect encodings</li>
+ <li>Full screen mode</li>
+ <li>Grab keyboard mode</li>
+ <li>Graphics</li>
+ <li>Taking screenshots of the remote desktop</li>
+ <li>Event dispatching</li>
+ <li>Konqueror helper application support (you can run Keystone
+ by entering a vnc: URL anywhere in KDE).</li>
+ <li>Options, login, password and about dialogs</li>
+ </ul>
+ </li>
+ <li><b>0.2</b>
+ <ul>
+ <li>XSHM support using KPixmapIO</li>
+ <li>Now uses KXMLGUI (thanks to Kurt)</li>
+ <li>Tru64 patch from Tom Leitner</li>
+ <li>Status reporting improvements</li>
+ <li>Config handling fixed</li>
+ <li>Recent connections list implemented</li>
+ <li>Update frequency respected</li>
+ </ul>
+ </li>
+ <li><b>0.3 [KDE 2.0]</b>
+ <ul>
+ <li>Portability fixes for FreeBSD (and maybe others)</li>
+ </ul>
+ </li>
+ <li><b>0.4</b>
+ <ul>
+ <li>Icons for the full screen mode now reflect the current state</li>
+ <li>Added a toolbar (optional of course)</li>
+ <li>Added support for the clipboard (you can cut and paste between the
+ local and remote machines)</li>
+ <li>Added some what's this help to the options dialog</li>
+ </ul>
+ </li>
+ </ul>
+ <h3><a name="bugs">Bugs</a></h3>
+ <p>Version 0.4 contains the following known bugs:
+ <ul>
+ <li><b>Custom about dialog is not shown</b><br>
+ I can't see a clean way to fix this without creating a complete custom
+ help menu. For now I've left the standard about dialog in place.
+ </li>
+ <li><b>Crash when you connect to a non-existant server</b><br>
+ I can reproduce this every time, but I can't figure out what's wrong
+ other developers have reported similar problems and they seem to be
+ down to QSocket. The only known fix so far is to use KSocket instead.
+ I'd prefer to fix the problem at the source, but I'm having no luck and
+ I suspect QSocket may also be causing some other weird network issues
+ I've seen, so if I can't track down the bug soon I'll give in and switch
+ to KSocket like everyone else.
+ </li>
+ </ul>
+ </p>
+ <h3><a name="download"></a>Download</h3>
+ <p>Keystone is available in the kdenetwork module of the
+ <a href="http://www.kde.org/anoncvs.html">KDE CVS</a>, and
+ is included in the KDE 2.0 release. The current version is 0.4.
+ Note that Keystone <b>requires KDE 2</b>, you cannot use KDE 1.x.</p>
+ <h3><a name="faq"></a>FAQs</h3>
+ <p>
+ <ul>
+ <li><b>Why don't the shortcut keys work in full screen mode?</b><br>
+ When you're in full screen mode Keystone grabs the keyboard to send
+ every key press to the remote screen. This means that you can send key
+ combinations that are used by Keystone or KDE to the remote screen. If
+ you really hate it, then you can add -nograb to the command line
+ arguments to disable all keyboard grabs. I will add an option to allow
+ this behaviour to be overridden in a future release.
+ </li>
+ <li><b>Why is Keystone so slow?</b><br>
+ Currently only the simplest of the RFB encodings are supported, this
+ means that Keystone is only useful on fairly fast networks. This is
+ a serious bug and is being addressed.
+ </ul>
+ </p>
+ <h3><a name="todo">Todo</a></h3>
+ These are the things I'm hoping to add to future versions of Keystone.
+ They're vaguely sorted in order of importance.
+ <p>
+ <ul>
+ <li>RRE encoding.<br>
+ I've started this, but the implementation has some
+ bugs so it did not make the cut for Keystone 0.3.</li>
+ <li>CoRRE and Hextile encodings</li>
+ <li>Session management</li>
+ <li>Support for Windows Terminal Server.<br>
+ There is now a GPL implementation
+ of the protocol, and the author is happy for me to use the code. If someone
+ can offer me an account to test it on then this is possible.</li>
+ <li>Zoom support.<br>
+ This will be handled using the same protocol extension
+ as is used in the Palm client, this will allow you to make use of
+ server side scaling to reduce the amount of network traffic. You
+ will also be able to do client side zooms, but in this case the
+ full screen needs to transmitted over the network.</li>
+ <li>Macros</li>
+ <li>Monitor mode (thumbnails of several machines)</li>
+ <li>ZLib extension support</li>
+ <li>Bookmarks</li>
+ <li>URL specific settings</li>
+ <li>Possibly a DnD extension using a mechanism based on mulitpart
+ MIME attachments.</li>
+ </ul>
+ <h3>Credits<a name="credits"></a></h3>
+ <p>Keystone owes a lot to Markus Wuebben's kvncviewer which some of
+ the code is derived from. Thanks are also due to Espen Sand the author
+ of khexedit from which I borrowed some code for the about dialog.
+ Alison Burch drew the bridge image used in the background of this
+ page (and in future versions of Keystone too of course). Finally thanks
+ go to ORL for making the RFB protocol and servers GPL.</p>
+ <h3><a name="references">References</a><br>
+ </h3>
+ <p>
+ <ul>
+ <li>The Keystone homepage<br>
+ <a href="http://www.ipso-facto.demon.co.uk/keystone/">http://www.ipso-facto.demon.co.uk/keystone/</a></li>
+ <li>The VNC Homepage<br>
+ <a href="http://www.uk.research.att.com/vnc/">http://www.uk.research.att.com/vnc/</a></li>
+ <li>The VNC FAQ<br>
+ <a href="http://www.uk.research.att.com/vnc/faq.html">http://www.uk.research.att.com/vnc/faq.html</a></li>
+ <li>The KDE Homepage<br>
+ <a href="http://www.kde.org/">http://www.kde.org/</a> </li>
+ </ul>
+ <p></p>
+ <!-- #EndEditable --> </div>
+
+
+
+ <hr>
+ <address><a href="mailto:rich@kde.org">Richard Moore</a></address>
+<!-- Created: Tue Dec 5 01:35:56 GMT 2000 -->
+<!-- hhmts start -->
+Last modified: Tue Dec 5 01:37:17 GMT 2000
+<!-- hhmts end -->
+ </body>
+</html>
diff --git a/noncore/comm/keypebble/d3des.c b/noncore/comm/keypebble/d3des.c
new file mode 100644
index 0000000..b0f065e
--- a/dev/null
+++ b/noncore/comm/keypebble/d3des.c
@@ -0,0 +1,439 @@
+/*
+ * This is D3DES (V5.09) by Richard Outerbridge with the double and
+ * triple-length support removed for use in VNC. Also the bytebit[] array
+ * has been reversed so that the most significant bit in each byte of the
+ * key is ignored, not the least significant.
+ *
+ * These changes are Copyright (C) 1998 Olivetti & Oracle Research Laboratory
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* D3DES (V5.09) -
+ *
+ * A portable, public domain, version of the Data Encryption Standard.
+ *
+ * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
+ * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
+ * code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
+ * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
+ * for humouring me on.
+ *
+ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
+ * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
+ */
+
+#include "d3des.h"
+
+static void scrunch(unsigned char *, unsigned long *);
+static void unscrun(unsigned long *, unsigned char *);
+static void desfunc(unsigned long *, unsigned long *);
+static void cookey(unsigned long *);
+
+static unsigned long KnL[32] = { 0L };
+static unsigned long KnR[32] = { 0L };
+static unsigned long Kn3[32] = { 0L };
+static unsigned char Df_Key[24] = {
+ 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
+ 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
+ 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 };
+
+static unsigned short bytebit[8] = {
+ 01, 02, 04, 010, 020, 040, 0100, 0200 };
+
+static unsigned long bigbyte[24] = {
+ 0x800000L, 0x400000L, 0x200000L, 0x100000L,
+ 0x80000L, 0x40000L, 0x20000L, 0x10000L,
+ 0x8000L, 0x4000L, 0x2000L, 0x1000L,
+ 0x800L, 0x400L, 0x200L, 0x100L,
+ 0x80L, 0x40L, 0x20L, 0x10L,
+ 0x8L, 0x4L, 0x2L, 0x1L };
+
+/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
+
+static unsigned char pc1[56] = {
+ 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17,
+ 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35,
+ 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21,
+ 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 };
+
+static unsigned char totrot[16] = {
+ 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 };
+
+static unsigned char pc2[48] = {
+ 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
+ 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1,
+ 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
+ 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 };
+
+void deskey(key, edf) /* Thanks to James Gillogly & Phil Karn! */
+unsigned char *key;
+short edf;
+{
+ register int i, j, l, m, n;
+ unsigned char pc1m[56], pcr[56];
+ unsigned long kn[32];
+
+ for ( j = 0; j < 56; j++ ) {
+ l = pc1[j];
+ m = l & 07;
+ pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
+ }
+ for( i = 0; i < 16; i++ ) {
+ if( edf == DE1 ) m = (15 - i) << 1;
+ else m = i << 1;
+ n = m + 1;
+ kn[m] = kn[n] = 0L;
+ for( j = 0; j < 28; j++ ) {
+ l = j + totrot[i];
+ if( l < 28 ) pcr[j] = pc1m[l];
+ else pcr[j] = pc1m[l - 28];
+ }
+ for( j = 28; j < 56; j++ ) {
+ l = j + totrot[i];
+ if( l < 56 ) pcr[j] = pc1m[l];
+ else pcr[j] = pc1m[l - 28];
+ }
+ for( j = 0; j < 24; j++ ) {
+ if( pcr[pc2[j]] ) kn[m] |= bigbyte[j];
+ if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j];
+ }
+ }
+ cookey(kn);
+ return;
+ }
+
+static void cookey(raw1)
+register unsigned long *raw1;
+{
+ register unsigned long *cook, *raw0;
+ unsigned long dough[32];
+ register int i;
+
+ cook = dough;
+ for( i = 0; i < 16; i++, raw1++ ) {
+ raw0 = raw1++;
+ *cook = (*raw0 & 0x00fc0000L) << 6;
+ *cook |= (*raw0 & 0x00000fc0L) << 10;
+ *cook |= (*raw1 & 0x00fc0000L) >> 10;
+ *cook++ |= (*raw1 & 0x00000fc0L) >> 6;
+ *cook = (*raw0 & 0x0003f000L) << 12;
+ *cook |= (*raw0 & 0x0000003fL) << 16;
+ *cook |= (*raw1 & 0x0003f000L) >> 4;
+ *cook++ |= (*raw1 & 0x0000003fL);
+ }
+ usekey(dough);
+ return;
+ }
+
+void cpkey(into)
+register unsigned long *into;
+{
+ register unsigned long *from, *endp;
+
+ from = KnL, endp = &KnL[32];
+ while( from < endp ) *into++ = *from++;
+ return;
+ }
+
+void usekey(from)
+register unsigned long *from;
+{
+ register unsigned long *to, *endp;
+
+ to = KnL, endp = &KnL[32];
+ while( to < endp ) *to++ = *from++;
+ return;
+ }
+
+void des(inblock, outblock)
+unsigned char *inblock, *outblock;
+{
+ unsigned long work[2];
+
+ scrunch(inblock, work);
+ desfunc(work, KnL);
+ unscrun(work, outblock);
+ return;
+ }
+
+static void scrunch(outof, into)
+register unsigned char *outof;
+register unsigned long *into;
+{
+ *into = (*outof++ & 0xffL) << 24;
+ *into |= (*outof++ & 0xffL) << 16;
+ *into |= (*outof++ & 0xffL) << 8;
+ *into++ |= (*outof++ & 0xffL);
+ *into = (*outof++ & 0xffL) << 24;
+ *into |= (*outof++ & 0xffL) << 16;
+ *into |= (*outof++ & 0xffL) << 8;
+ *into |= (*outof & 0xffL);
+ return;
+ }
+
+static void unscrun(outof, into)
+register unsigned long *outof;
+register unsigned char *into;
+{
+ *into++ = (*outof >> 24) & 0xffL;
+ *into++ = (*outof >> 16) & 0xffL;
+ *into++ = (*outof >> 8) & 0xffL;
+ *into++ = *outof++ & 0xffL;
+ *into++ = (*outof >> 24) & 0xffL;
+ *into++ = (*outof >> 16) & 0xffL;
+ *into++ = (*outof >> 8) & 0xffL;
+ *into = *outof & 0xffL;
+ return;
+ }
+
+static unsigned long SP1[64] = {
+ 0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
+ 0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
+ 0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
+ 0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
+ 0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
+ 0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
+ 0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
+ 0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
+ 0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
+ 0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
+ 0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
+ 0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
+ 0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
+ 0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
+ 0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
+ 0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L };
+
+static unsigned long SP2[64] = {
+ 0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
+ 0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
+ 0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
+ 0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
+ 0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
+ 0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L,
+ 0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
+ 0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
+ 0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
+ 0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
+ 0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
+ 0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
+ 0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
+ 0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
+ 0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
+ 0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L };
+
+static unsigned long SP3[64] = {
+ 0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
+ 0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
+ 0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
+ 0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
+ 0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
+ 0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
+ 0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
+ 0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
+ 0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
+ 0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
+ 0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
+ 0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
+ 0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
+ 0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
+ 0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
+ 0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L };
+
+static unsigned long SP4[64] = {
+ 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
+ 0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L,
+ 0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L,
+ 0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L,
+ 0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L,
+ 0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L,
+ 0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L,
+ 0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L,
+ 0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L,
+ 0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L,
+ 0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L,
+ 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
+ 0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L,
+ 0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L,
+ 0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L,
+ 0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L };
+
+static unsigned long SP5[64] = {
+ 0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
+ 0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
+ 0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
+ 0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
+ 0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
+ 0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
+ 0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
+ 0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
+ 0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
+ 0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
+ 0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
+ 0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
+ 0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
+ 0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
+ 0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
+ 0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L };
+
+static unsigned long SP6[64] = {
+ 0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
+ 0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
+ 0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
+ 0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
+ 0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
+ 0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
+ 0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
+ 0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
+ 0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
+ 0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
+ 0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
+ 0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
+ 0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
+ 0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
+ 0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
+ 0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L };
+
+static unsigned long SP7[64] = {
+ 0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
+ 0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
+ 0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
+ 0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
+ 0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
+ 0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
+ 0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
+ 0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
+ 0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
+ 0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
+ 0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
+ 0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
+ 0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
+ 0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
+ 0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
+ 0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L };
+
+static unsigned long SP8[64] = {
+ 0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
+ 0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
+ 0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
+ 0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
+ 0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
+ 0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
+ 0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
+ 0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
+ 0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
+ 0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
+ 0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
+ 0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
+ 0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
+ 0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
+ 0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
+ 0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L };
+
+static void desfunc(block, keys)
+register unsigned long *block, *keys;
+{
+ register unsigned long fval, work, right, leftt;
+ register int round;
+
+ leftt = block[0];
+ right = block[1];
+ work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
+ right ^= work;
+ leftt ^= (work << 4);
+ work = ((leftt >> 16) ^ right) & 0x0000ffffL;
+ right ^= work;
+ leftt ^= (work << 16);
+ work = ((right >> 2) ^ leftt) & 0x33333333L;
+ leftt ^= work;
+ right ^= (work << 2);
+ work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
+ leftt ^= work;
+ right ^= (work << 8);
+ right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
+ work = (leftt ^ right) & 0xaaaaaaaaL;
+ leftt ^= work;
+ right ^= work;
+ leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
+
+ for( round = 0; round < 8; round++ ) {
+ work = (right << 28) | (right >> 4);
+ work ^= *keys++;
+ fval = SP7[ work & 0x3fL];
+ fval |= SP5[(work >> 8) & 0x3fL];
+ fval |= SP3[(work >> 16) & 0x3fL];
+ fval |= SP1[(work >> 24) & 0x3fL];
+ work = right ^ *keys++;
+ fval |= SP8[ work & 0x3fL];
+ fval |= SP6[(work >> 8) & 0x3fL];
+ fval |= SP4[(work >> 16) & 0x3fL];
+ fval |= SP2[(work >> 24) & 0x3fL];
+ leftt ^= fval;
+ work = (leftt << 28) | (leftt >> 4);
+ work ^= *keys++;
+ fval = SP7[ work & 0x3fL];
+ fval |= SP5[(work >> 8) & 0x3fL];
+ fval |= SP3[(work >> 16) & 0x3fL];
+ fval |= SP1[(work >> 24) & 0x3fL];
+ work = leftt ^ *keys++;
+ fval |= SP8[ work & 0x3fL];
+ fval |= SP6[(work >> 8) & 0x3fL];
+ fval |= SP4[(work >> 16) & 0x3fL];
+ fval |= SP2[(work >> 24) & 0x3fL];
+ right ^= fval;
+ }
+
+ right = (right << 31) | (right >> 1);
+ work = (leftt ^ right) & 0xaaaaaaaaL;
+ leftt ^= work;
+ right ^= work;
+ leftt = (leftt << 31) | (leftt >> 1);
+ work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
+ right ^= work;
+ leftt ^= (work << 8);
+ work = ((leftt >> 2) ^ right) & 0x33333333L;
+ right ^= work;
+ leftt ^= (work << 2);
+ work = ((right >> 16) ^ leftt) & 0x0000ffffL;
+ leftt ^= work;
+ right ^= (work << 16);
+ work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
+ leftt ^= work;
+ right ^= (work << 4);
+ *block++ = right;
+ *block = leftt;
+ return;
+ }
+
+/* Validation sets:
+ *
+ * Single-length key, single-length plaintext -
+ * Key : 0123 4567 89ab cdef
+ * Plain : 0123 4567 89ab cde7
+ * Cipher : c957 4425 6a5e d31d
+ *
+ * Double-length key, single-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210
+ * Plain : 0123 4567 89ab cde7
+ * Cipher : 7f1d 0a77 826b 8aff
+ *
+ * Double-length key, double-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210
+ * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
+ * Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7
+ *
+ * Triple-length key, single-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
+ * Plain : 0123 4567 89ab cde7
+ * Cipher : de0b 7c06 ae5e 0ed5
+ *
+ * Triple-length key, double-length plaintext -
+ * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
+ * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
+ * Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5
+ *
+ * d3des V5.0a rwo 9208.07 18:44 Graven Imagery
+ **********************************************************************/
diff --git a/noncore/comm/keypebble/d3des.h b/noncore/comm/keypebble/d3des.h
new file mode 100644
index 0000000..5da6013
--- a/dev/null
+++ b/noncore/comm/keypebble/d3des.h
@@ -0,0 +1,50 @@
+/*
+ * This is D3DES (V5.09) by Richard Outerbridge with the double and
+ * triple-length support removed for use in VNC.
+ *
+ * These changes are Copyright (C) 1998 Olivetti & Oracle Research Laboratory
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+/* d3des.h -
+ *
+ * Headers and defines for d3des.c
+ * Graven Imagery, 1992.
+ *
+ * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
+ * (GEnie : OUTER; CIS : [71755,204])
+ */
+
+#define EN0 0 /* MODE == encrypt */
+#define DE1 1 /* MODE == decrypt */
+
+extern void deskey(unsigned char *, short);
+/* hexkey[8] MODE
+ * Sets the internal key register according to the hexadecimal
+ * key contained in the 8 bytes of hexkey, according to the DES,
+ * for encryption or decryption according to MODE.
+ */
+
+extern void usekey(unsigned long *);
+/* cookedkey[32]
+ * Loads the internal key register with the data in cookedkey.
+ */
+
+extern void cpkey(unsigned long *);
+/* cookedkey[32]
+ * Copies the contents of the internal key register into the storage
+ * located at &cookedkey[0].
+ */
+
+extern void des(unsigned char *, unsigned char *);
+/* from[8] to[8]
+ * Encrypts/Decrypts (according to the key currently loaded in the
+ * internal key register) one block of eight bytes at address 'from'
+ * into the block at address 'to'. They can be the same.
+ */
+
+/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery
+ ********************************************************************/
diff --git a/noncore/comm/keypebble/keypebble.pro b/noncore/comm/keypebble/keypebble.pro
new file mode 100644
index 0000000..6b11801
--- a/dev/null
+++ b/noncore/comm/keypebble/keypebble.pro
@@ -0,0 +1,38 @@
+TEMPLATE = app
+
+CONFIG += qt warn_on release
+DESTDIR = ../bin
+
+HEADERS = d3des.h \
+ krfbbuffer.h \
+ krfbcanvas.h \
+ krfbconnection.h \
+ krfbdecoder.h \
+ krfblogin.h \
+ krfboptions.h \
+ krfbserverinfo.h \
+ kvnc.h \
+ kvncconnectdlg.h \
+ kvncoptionsdlg.h \
+ version.h \
+ vncauth.h
+
+SOURCES = d3des.c \
+ vncauth.c \
+ krfbbuffer.cpp \
+ krfbcanvas.cpp \
+ krfbconnection.cpp \
+ krfbdecoder.cpp \
+ krfblogin.cpp \
+ krfboptions.cpp \
+ kvnc.cpp \
+ kvncconnectdlg.cpp \
+ kvncoptionsdlg.cpp \
+ main.cpp
+INTERFACES = vncoptionsbase.ui
+TARGET = keypebble
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
diff --git a/noncore/comm/keypebble/krfbbuffer.cpp b/noncore/comm/keypebble/krfbbuffer.cpp
new file mode 100644
index 0000000..4885261
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbbuffer.cpp
@@ -0,0 +1,163 @@
+#include <assert.h>
+#include <qpixmap.h>
+#include <qbrush.h>
+#include <qimage.h>
+#include <qpainter.h>
+#include <qapplication.h>
+#include "krfbdecoder.h"
+#include "krfbbuffer.h"
+#include "krfbserverinfo.h"
+
+//
+// Endian stuff
+//
+#ifndef KDE_USE_FINAL
+const int endianTest = 1;
+#endif
+
+#define Swap16IfLE(s) \
+ (*(char *)&endianTest ? ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) : (s))
+
+#define Swap32IfLE(l) \
+ (*(char *)&endianTest ? ((((l) & 0xff000000) >> 24) | \
+ (((l) & 0x00ff0000) >> 8) | \
+ (((l) & 0x0000ff00) << 8) | \
+ (((l) & 0x000000ff) << 24)) : (l))
+
+KRFBBuffer::KRFBBuffer( KRFBDecoder *decoder,
+ QObject *parent, const char *name )
+ : QObject( parent, name )
+{
+ assert( decoder );
+ this->decoder = decoder;
+ pix = new QPixmap();
+}
+
+KRFBBuffer::~KRFBBuffer()
+{
+ delete pix;
+}
+
+void KRFBBuffer::resize( int w, int h )
+{
+ qWarning( "Resizing buffer" );
+
+ pix->resize( w, h );
+
+ QPalette pal = qApp->palette();
+ pix->fill( pal.active().base() );
+
+ emit sizeChanged( w, h );
+}
+
+void KRFBBuffer::soundBell()
+{
+ emit bell();
+}
+
+void KRFBBuffer::mouseEvent( QMouseEvent *e )
+{
+ decoder->sendMouseEvent( e );
+}
+
+void KRFBBuffer::keyPressEvent( QKeyEvent *e )
+{
+ qWarning( "Buffer got a key" );
+
+ decoder->sendKeyPressEvent( e );
+}
+
+void KRFBBuffer::keyReleaseEvent( QKeyEvent *e )
+{
+ decoder->sendKeyReleaseEvent( e );
+}
+
+void KRFBBuffer::copyRect( int srcX, int srcY,
+ int destX, int destY, int w, int h )
+{
+// qWarning( "Got copy rect" );
+ bitBlt( pix, destX, destY, pix, srcX, srcY, w, h, CopyROP );
+
+ emit updated( destX, destY, w, h );
+}
+
+void KRFBBuffer::drawRawRectChunk( void *data,
+ int x, int y, int w, int h )
+{
+ QImage img( w, h, 32 );
+
+ int redMax = Swap16IfLE( decoder->format->redMax );
+ int greenMax = Swap16IfLE( decoder->format->greenMax );
+ int blueMax = Swap16IfLE( decoder->format->blueMax );
+
+ QPainter p( pix );
+
+ if ( decoder->format->bpp == 8 ) {
+ uchar *d = (unsigned char *) data;
+
+ uint r,g,b;
+
+ for ( int j = 0; j < h; j++ ) {
+ for ( int i = 0; i < w ; i++ ) {
+ r = d[ j * w + i ];
+ r = r >> decoder->format->redShift;
+ r = r & redMax;
+
+ g = d[ j * w + i ];
+ g = g >> decoder->format->greenShift;
+ g = g & greenMax;
+
+ b = d[ j * w + i ];
+ b = b >> decoder->format->blueShift;
+ b = b & blueMax;
+
+ r = ( r * 255 ) / redMax;
+ g = ( g * 255 ) / greenMax;
+ b = ( b * 255 ) / blueMax;
+
+ uint *p = ( uint * ) img.scanLine( j ) + i;
+ *p = qRgb( r,g,b );
+ }
+ }
+ }
+ else if ( decoder->format->bpp == 32 ) {
+ ulong *d = (ulong *) data;
+
+ ulong r,g,b;
+
+ for ( int j = 0; j < h; j++ ) {
+ for ( int i = 0; i < w ; i++ ) {
+ ulong pixel = d[ j * w + i ];
+ pixel = Swap32IfLE( pixel );
+
+ r = pixel;
+ r = r >> decoder->format->redShift;
+ r = r & redMax;
+
+ g = pixel;
+ g = g >> decoder->format->greenShift;
+ g = g & greenMax;
+
+ b = pixel;
+ b = b >> decoder->format->blueShift;
+ b = b & blueMax;
+
+ r = ( r * 255 ) / redMax;
+ g = ( g * 255 ) / greenMax;
+ b = ( b * 255 ) / blueMax;
+
+ uint *p = ( uint * ) img.scanLine( j ) + i;
+ *p = qRgb( r,g,b );
+ }
+ }
+ }
+ else {
+ p.setBrush( QBrush( Qt::black ) );
+ p.drawRect( x, y, w, h );
+ }
+
+ p.drawImage( x, y, img );
+
+ emit updated( x, y, w, h );
+}
+
diff --git a/noncore/comm/keypebble/krfbbuffer.h b/noncore/comm/keypebble/krfbbuffer.h
new file mode 100644
index 0000000..1116d00
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbbuffer.h
@@ -0,0 +1,62 @@
+// -*- c++ -*-
+
+#ifndef KRFBBUFFER_H
+#define KRFBBUFFER_H
+
+#include <qobject.h>
+
+class QPixmap;
+class KRFBDecoder;
+class QMouseEvent;
+class QKeyEvent;
+
+/**
+ * A wrapper around QPixmap that knows how to implement the RFB
+ * drawing primitives. If possible it makes use of the MIT XSHM
+ * extension to optimise the drawing operations.
+ */
+class KRFBBuffer : public QObject
+{
+ Q_OBJECT
+
+public:
+ KRFBBuffer( KRFBDecoder *decoder, QObject *parent, const char *name=0 );
+ ~KRFBBuffer();
+
+ QPixmap *pixmap() const { return pix; };
+
+ /**
+ * Draw a chunk of a raw encoded rectangle.
+ */
+ void drawRawRectChunk( void *data, int x, int y, int w, int h );
+
+ void copyRect( int srcX, int srcY,
+ int destX, int destY, int w, int h );
+
+ void fillRect( int ,int , int , int , unsigned long ) {};
+
+ void resize( int w, int h );
+
+ void mouseEvent( QMouseEvent *e );
+
+ void keyPressEvent( QKeyEvent *e );
+ void keyReleaseEvent( QKeyEvent *e );
+
+ void soundBell();
+
+signals:
+ /**
+ * Emitted when the size of the buffer changes.
+ */
+ void sizeChanged( int w, int h );
+
+ void updated( int x, int y, int w, int h );
+
+ void bell();
+
+private:
+ KRFBDecoder *decoder;
+ QPixmap *pix;
+};
+
+#endif // KRFBBUFFER_H
diff --git a/noncore/comm/keypebble/krfbcanvas.cpp b/noncore/comm/keypebble/krfbcanvas.cpp
new file mode 100644
index 0000000..f74ab7b
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbcanvas.cpp
@@ -0,0 +1,169 @@
+#include "kvncconnectdlg.h"
+#include "krfbconnection.h"
+#include "krfbcanvas.h"
+#include "krfboptions.h"
+#include "krfbbuffer.h"
+
+#include <qpe/config.h>
+
+#include <qapplication.h>
+#include <qclipboard.h>
+#include <qaction.h>
+#include <qpixmap.h>
+#include <qapplication.h>
+#include <qmainwindow.h>
+#include <qiconset.h>
+
+KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name )
+ : QScrollView( parent, name )
+{
+ connection_ = new KRFBConnection();
+ connect( connection_, SIGNAL( passwordRequired( KRFBConnection * ) ),
+ this, SLOT( passwordRequired( KRFBConnection * ) ) );
+ connect( connection_, SIGNAL( loggedIn() ),
+ this, SLOT( loggedIn() ) );
+
+ loggedIn_ = false;
+
+ viewport()->setFocusPolicy( QWidget::StrongFocus );
+ viewport()->setFocus();
+}
+
+KRFBCanvas::~KRFBCanvas()
+{
+}
+
+void KRFBCanvas::openConnection()
+{
+ KVNCConnectDlg dlg( connection_, this, "connect dialog" );
+ if ( dlg.exec() ) {
+ QCString host = dlg.hostname().latin1();
+ password = dlg.password();
+ connection_->connectTo( host, dlg.display() );
+ }
+}
+
+void KRFBCanvas::openURL( const QUrl &url )
+{
+ if ( loggedIn_ ) {
+ qWarning( "openURL invoked when logged in\n" );
+ return;
+ }
+
+ QCString host = url.host().latin1();
+ int display = url.port();
+ if ( url.hasPassword() )
+ connection_->setPassword( url.password().latin1() );
+
+ connection_->connectTo( host, display );
+}
+
+void KRFBCanvas::closeConnection()
+{
+ loggedIn_ = false;
+ connection_->disconnect();
+
+ viewport()->setMouseTracking( false );
+ viewport()->setBackgroundMode( PaletteDark );
+ setBackgroundMode( PaletteDark );
+ update();
+}
+
+void KRFBCanvas::passwordRequired( KRFBConnection *con )
+{
+ con->setPassword( password.latin1() );
+}
+
+void KRFBCanvas::bell()
+{
+ if ( connection_->options()->deIconify ) {
+ topLevelWidget()->raise();
+ topLevelWidget()->show();
+ }
+}
+
+void KRFBCanvas::loggedIn()
+{
+ qWarning( "Ok, we're logged in" );
+
+ //
+ // Get ready for action
+ //
+ loggedIn_ = true;
+ viewport()->setMouseTracking( true );
+ viewport()->setBackgroundMode( NoBackground );
+ setBackgroundMode( NoBackground );
+
+ // Start using the buffer
+ connect( connection_->buffer(), SIGNAL( sizeChanged( int, int ) ),
+ this, SLOT( resizeContents(int,int) ) );
+ connect( connection_->buffer(), SIGNAL( updated( int, int, int, int ) ),
+ this, SLOT( viewportUpdate(int,int,int,int) ) );
+ connect( connection_->buffer(), SIGNAL( bell() ),
+ this, SLOT( bell() ) );
+ connect( qApp->clipboard(), SIGNAL( dataChanged() ),
+ this, SLOT( clipboardChanged() ) );
+}
+
+void KRFBCanvas::viewportPaintEvent( QPaintEvent *e )
+{
+ QRect r = e->rect();
+
+ if ( loggedIn_ ) {
+ bitBlt( viewport(), r.x(), r.y(),
+ connection_->buffer()->pixmap(),
+ r.x() + contentsX(), r.y() + contentsY(),
+ r.width(), r.height() );
+ }
+ else {
+ QScrollView::viewportPaintEvent( e );
+ }
+}
+
+void KRFBCanvas::viewportUpdate( int x, int y, int w, int h )
+{
+ updateContents( x, y, w, h );
+}
+
+void KRFBCanvas::contentsMousePressEvent( QMouseEvent *e )
+{
+ if ( loggedIn_ )
+ connection_->buffer()->mouseEvent( e );
+}
+
+void KRFBCanvas::contentsMouseReleaseEvent( QMouseEvent *e )
+{
+ if ( loggedIn_ )
+ connection_->buffer()->mouseEvent( e );
+}
+
+void KRFBCanvas::contentsMouseMoveEvent( QMouseEvent *e )
+{
+ if ( loggedIn_ )
+ connection_->buffer()->mouseEvent( e );
+}
+
+void KRFBCanvas::keyPressEvent( QKeyEvent *e )
+{
+ if ( loggedIn_ )
+ connection_->buffer()->keyPressEvent( e );
+}
+
+void KRFBCanvas::keyReleaseEvent( QKeyEvent *e )
+{
+ if ( loggedIn_ )
+ connection_->buffer()->keyReleaseEvent( e );
+}
+
+void KRFBCanvas::refresh()
+{
+ if ( loggedIn_ )
+ connection_->refresh();
+}
+
+void KRFBCanvas::clipboardChanged()
+{
+ if ( loggedIn_ ) {
+ connection_->sendCutText( qApp->clipboard()->text() );
+ }
+}
diff --git a/noncore/comm/keypebble/krfbcanvas.h b/noncore/comm/keypebble/krfbcanvas.h
new file mode 100644
index 0000000..7864f1c
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbcanvas.h
@@ -0,0 +1,54 @@
+// -*- c++ -*-
+
+#ifndef KRFBCANVAS_H
+#define KRFBCANVAS_H
+
+#include <qscrollview.h>
+#include <qurl.h>
+
+class KRFBConnection;
+
+/**
+ * Displays data from an KRFBDecoder, and sends events to the
+ * KRFBConnection.
+ */
+class KRFBCanvas : public QScrollView
+{
+ Q_OBJECT
+public:
+ KRFBCanvas( QWidget *parent, const char *name=0 );
+ ~KRFBCanvas();
+
+ void setConnection( KRFBConnection * );
+ KRFBConnection *connection() { return connection_; };
+
+public slots:
+ void openConnection();
+ void openURL( const QUrl & );
+ void closeConnection();
+ void passwordRequired( KRFBConnection * );
+
+ void refresh();
+ void bell();
+
+protected:
+ virtual void keyPressEvent( QKeyEvent * );
+ virtual void keyReleaseEvent( QKeyEvent * );
+ virtual void contentsMousePressEvent( QMouseEvent * );
+ virtual void contentsMouseReleaseEvent( QMouseEvent * );
+ virtual void contentsMouseMoveEvent( QMouseEvent * );
+
+ virtual void viewportPaintEvent( QPaintEvent *e );
+
+protected slots:
+ void loggedIn();
+ void viewportUpdate( int x, int y, int w, int h );
+ void clipboardChanged();
+
+private:
+ KRFBConnection *connection_;
+ QString password;
+ bool loggedIn_;
+};
+
+#endif // KRFBCANVAS_H
diff --git a/noncore/comm/keypebble/krfbconnection.cpp b/noncore/comm/keypebble/krfbconnection.cpp
new file mode 100644
index 0000000..c413186
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbconnection.cpp
@@ -0,0 +1,242 @@
+#include <assert.h>
+#include <qsocket.h>
+#include <qtimer.h>
+#include <string.h>
+
+#include "krfbconnection.h"
+#include "krfblogin.h"
+#include "krfboptions.h"
+#include "krfbdecoder.h"
+#include "krfbbuffer.h"
+
+KRFBConnection::KRFBConnection( QObject *parent )
+ : QObject( parent, "KRFBConnection" )
+{
+ portBase_ = 5900;
+ currentState_ = Disconnected;
+ sock = 0;
+ minData_ = 0;
+ options_ = new KRFBOptions();
+ updater = 0;
+ decoder_ = 0;
+ buffer_ = 0;
+}
+
+KRFBConnection::~KRFBConnection()
+{
+ if ( ( currentState_ != Disconnected ) && ( currentState_ != Disconnecting ) && sock ) {
+ disconnectDone();
+ }
+ delete options_;
+}
+
+void KRFBConnection::connectTo( const QCString &host, int display )
+{
+ if ( currentState_ != Disconnected );
+ disconnect();
+
+ this->host_= host;
+ this->display_ = display;
+
+ sock = new QSocket( this, "rfbSocket" );
+ CHECK_PTR( sock );
+
+ // Connect to something to notice connection or error
+ connect( sock, SIGNAL( error( int ) ), SLOT( gotSocketError( int ) ) );
+ connect( sock, SIGNAL( connected() ), SLOT( gotSocketConnection() ) );
+
+ qWarning( "Connecting..." );
+
+ currentState_ = Connecting;
+ sock->connectToHost( host_, portBase_ + display_ );
+}
+
+void KRFBConnection::disconnect()
+{
+ qWarning( "Disconnecting from server" );
+
+ if ( ( currentState_ != Disconnected )
+ && ( currentState_ != Disconnecting )
+ && sock ) {
+ currentState_ = Disconnecting;
+
+ connect( sock, SIGNAL( delayedCloseFinished() ), SLOT( disconnectDone() ) );
+ sock->close();
+
+ if ( sock->state() != QSocket::Closing )
+ disconnectDone();
+ }
+}
+
+void KRFBConnection::disconnectDone()
+{
+ qWarning( "KRFBConnection disconnected" );
+ currentState_ = Disconnected;
+ delete sock;
+ sock = 0;
+ minData_ = 0;
+ delete updater;
+ delete decoder_;
+ delete buffer_;
+ emit disconnected();
+}
+
+void KRFBConnection::gotSocketConnection()
+{
+ currentState_ = LoggingIn;
+
+ qWarning( "Connected, logging in..." );
+
+ static QString statusMsg = tr( "Connected" );
+ emit statusChanged( statusMsg );
+
+ // Do some login stuff
+ login = new KRFBLogin( this );
+}
+
+void KRFBConnection::gotRFBConnection()
+{
+ qWarning( "Logged into server" );
+
+ currentState_ = Connected;
+ emit connected();
+
+ // Create the decoder and start doing stuff
+ decoder_ = new KRFBDecoder( this );
+ CHECK_PTR( decoder_ );
+
+ buffer_ = new KRFBBuffer( decoder_, this, "RFB Buffer" );
+ CHECK_PTR( buffer_ );
+ decoder_->setBuffer( buffer_ );
+
+ connect( decoder_, SIGNAL( status( const QString & ) ),
+ this, SIGNAL( statusChanged( const QString & ) ) );
+ emit loggedIn();
+
+ decoder_->start();
+
+ updater = new QTimer;
+ connect( updater, SIGNAL( timeout() ), SLOT( updateTimer() ) );
+ updater->start( options_->updateRate );
+}
+
+void KRFBConnection::gotSocketError( int errno )
+{
+ currentState_ = Error;
+
+ // Do some error handling stuff
+ qWarning( "KRFBConnection: Socket error %d", errno );
+
+ static QString refused = tr( "Connection Refused" );
+ static QString host = tr( "Host not found" );
+ static QString read = tr( "Read Error: QSocket reported an error reading\n"
+ "data, the remote host has probably dropped the\n"
+ "connection." );
+ static QString confused = tr( "QSocket reported an invalid error code" );
+
+ QString msg;
+ switch ( errno ) {
+ case QSocket::ErrConnectionRefused:
+ msg = refused;
+ break;
+ case QSocket::ErrHostNotFound:
+ msg = host;
+ break;
+ case QSocket::ErrSocketRead:
+ msg = read;
+ break;
+ default:
+ msg = confused;
+ };
+
+ QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );
+ delete sock;
+ sock = 0;
+ currentState_ = Disconnected;
+
+ emit error( msg );
+}
+
+void KRFBConnection::gotMoreData()
+{
+ assert( minData_ > 0 );
+
+ if ( sock->size() >= minData_ ) {
+ minData_ = 0;
+ QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) );
+ emit gotEnoughData();
+ }
+}
+
+void KRFBConnection::waitForData( unsigned int sz )
+{
+ assert( minData_ == 0 );
+ assert( sz > 0 );
+ assert( currentState_ != Error );
+
+ if ( sock->size() >= sz ) {
+ // qWarning( "No need to wait for data" );
+ emit gotEnoughData();
+ }
+ else {
+ // qWarning( "Waiting for %u bytes", sz );
+
+ minData_ = sz;
+ connect( sock, SIGNAL( readyRead() ), SLOT( gotMoreData() ) );
+ }
+}
+
+int KRFBConnection::read( void *buf, int sz )
+{
+ return sock->readBlock( (char *) buf, sz );
+}
+
+int KRFBConnection::write( void *buf, int sz )
+{
+ return sock->writeBlock( (const char *) buf, sz );
+}
+
+KRFBConnection::State KRFBConnection::state() const
+{
+ return currentState_;
+}
+
+void KRFBConnection::setPortBase( int base )
+{
+ portBase_ = base;
+}
+
+int KRFBConnection::portBase() const
+{
+ return portBase_;
+}
+
+void KRFBConnection::setPassword( const QCString &pass )
+{
+ this->pass_ = pass;
+}
+
+void KRFBConnection::updateTimer()
+{
+ decoder_->sendUpdateRequest( true );
+}
+
+void KRFBConnection::refresh()
+{
+ decoder_->sendUpdateRequest( false );
+}
+
+void KRFBConnection::sendCutText( const QString &text )
+{
+ decoder_->sendCutEvent( text );
+}
+
+const QUrl &KRFBConnection::url()
+{
+ url_.setProtocol( "vnc" );
+ url_.setPort( display() );
+ url_.setHost( host() );
+ url_.setPath( "/" );
+
+ return url_;
+}
diff --git a/noncore/comm/keypebble/krfbconnection.h b/noncore/comm/keypebble/krfbconnection.h
new file mode 100644
index 0000000..fe477c1
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbconnection.h
@@ -0,0 +1,152 @@
+// -*- c++ -*-
+
+#ifndef KRFBCONNECTION_H
+#define KRFBCONNECTION_H
+
+#include <qobject.h>
+#include <qstring.h>
+#include <qcstring.h>
+#include <qurl.h>
+
+class KRFBLogin;
+class KRBUpdateHandler;
+class KRFBOptions;
+class QSocket;
+class KRFBDecoder;
+class KRFBBuffer;
+class QTimer;
+
+/**
+ * Encapsulates the RFB socket.
+ *
+ */
+class KRFBConnection : public QObject
+{
+ Q_OBJECT
+
+public:
+ friend class KRFBLogin;
+ friend class KRFBDecoder;
+
+ //* The state of the connection.
+ enum State {
+ Connecting,
+ LoggingIn,
+ Connected,
+ Disconnecting,
+ Disconnected,
+ Error
+ };
+
+ KRFBConnection( QObject *parent = 0 );
+ ~KRFBConnection();
+
+ //* Get the state of a connection.
+ State state() const;
+
+ //* Get the options for this connection
+ KRFBOptions *options() const { return options_; };
+
+ KRFBBuffer *buffer() const { return buffer_; };
+
+ KRFBDecoder *decoder() const { return decoder_; };
+
+ //* Set the base from which the port for a given display will be calculated.
+ void setPortBase( int base );
+
+ //* Get the base from which the port for a given display is calculated.
+ int portBase() const;
+
+ //* Set the password which will be used to login
+ void setPassword( const QCString &pass );
+
+ //* Open a connection
+ void connectTo( const QCString &host, int display );
+
+ //* Close the connection
+ void disconnect();
+
+ //* Get the host
+ const QCString host() const { return host_; };
+
+ //* Get the display
+ int display() const { return display_; };
+
+ //* Get the current host/display as a URL
+ const QUrl &url();
+
+ //* Reload the display
+ void refresh();
+
+ //* Send text to the remote clipboard
+ void sendCutText( const QString & );
+
+protected slots:
+ //* When the shit hits the fan
+ void gotSocketError( int );
+
+ //* When we have an open socket
+ void gotSocketConnection();
+
+ //* When we have logged in
+ void gotRFBConnection();
+
+ //* When some more data arrived
+ void gotMoreData();
+
+ void updateTimer();
+
+ void disconnectDone();
+
+signals:
+ //* Emitted when the status of the connection changes.
+ void statusChanged( const QString & );
+
+ /**
+ * Emitted when we *really* need a password. If the password
+ * was specified before you tried to connect then you won't
+ * see this.
+ */
+ void passwordRequired( KRFBConnection * );
+
+ //* When we have a working RFB connection
+ void connected();
+
+ void loggedIn();
+
+ void disconnected();
+
+ //* What happened?
+ void error( const QString &msg );
+
+ //* Emitted in response to a waitForData() call.
+ void gotEnoughData();
+
+private:
+ //
+ // The following are called by our friends.
+ //
+
+ void waitForData( unsigned int );
+
+ int read( void *buf, int sz );
+ int write( void *buf, int sz );
+
+private:
+ QCString host_;
+ int portBase_;
+ int display_;
+ QCString pass_;
+ QSocket *sock;
+ State currentState_;
+ unsigned int minData_;
+ QTimer *updater;
+ KRFBLogin *login;
+ KRFBDecoder *decoder_;
+ KRFBOptions *options_;
+ KRFBBuffer *buffer_;
+ QUrl url_;
+};
+
+#endif // KRFBCONNECTION_H
+
diff --git a/noncore/comm/keypebble/krfbdecoder.cpp b/noncore/comm/keypebble/krfbdecoder.cpp
new file mode 100644
index 0000000..174dd7b
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbdecoder.cpp
@@ -0,0 +1,839 @@
+#include "krfbconnection.h"
+#include "krfboptions.h"
+#include "krfbserverinfo.h"
+#include "krfbdecoder.h"
+#include "krfbbuffer.h"
+
+#include <qpe/qpeapplication.h>
+
+#include <qpixmap.h>
+#include <qsocket.h>
+#include <qevent.h>
+#include <qstring.h>
+#include <qclipboard.h>
+
+#include <assert.h>
+
+//
+// Endian stuff
+//
+#ifndef KDE_USE_FINAL
+const int endianTest = 1;
+#endif
+
+#define Swap16IfLE(s) \
+ (*(char *)&endianTest ? ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) : (s))
+
+#define Swap32IfLE(l) \
+ (*(char *)&endianTest ? ((((l) & 0xff000000) >> 24) | \
+ (((l) & 0x00ff0000) >> 8) | \
+ (((l) & 0x0000ff00) << 8) | \
+ (((l) & 0x000000ff) << 24)) : (l))
+
+//
+// The lengths of the messages we need to wait for
+//
+const int ServerInitLength = 24;
+const int UpdateHeaderLength = 4;
+const int RectHeaderLength = 12;
+const int RectChunkSize = 4;
+const int CopyRectPosLength = 4;
+const int ServerCutLenLength = 7;
+
+//
+// Client -> Server Message Identifiers
+//
+static CARD8 SetPixelFormatId = 0;
+//static CARD8 FixColourMapEntriesId = 1; // Not used
+static CARD8 SetEncodingsId = 2;
+static CARD8 UpdateRequestId = 3;
+static CARD8 KeyEventId = 4;
+static CARD8 PointerEventId = 5;
+static CARD8 ClientCutTextId = 6;
+
+//
+// Server -> Client Message Identifiers
+//
+static CARD8 UpdateId = 0;
+static CARD8 BellId = 2;
+static CARD8 ServerCutId = 3;
+
+//
+// Encoding identifiers
+//
+static CARD32 RawEncoding = Swap32IfLE( 0 );
+static CARD32 CopyRectEncoding = Swap32IfLE(1 );
+static CARD32 RreEncoding = Swap32IfLE( 2 );
+static CARD32 CorreEncoding = Swap32IfLE( 4 );
+static CARD32 HexTileEncoding = Swap32IfLE( 5 );
+
+static struct {
+ int keysym;
+ int keycode;
+} keyMap[] = {
+ { 0xff08, Qt::Key_Backspace },
+ { 0xff09, Qt::Key_Tab },
+ { 0xff0d, Qt::Key_Return },
+ { 0xff1b, Qt::Key_Escape },
+ { 0xff63, Qt::Key_Insert },
+ { 0xffff, Qt::Key_Delete },
+ { 0xff50, Qt::Key_Home },
+ { 0xff57, Qt::Key_End },
+ { 0xff55, Qt::Key_Prior },
+ { 0xff56, Qt::Key_Next },
+ { 0xff51, Qt::Key_Left },
+ { 0xff52, Qt::Key_Up },
+ { 0xff53, Qt::Key_Right },
+ { 0xff54, Qt::Key_Down },
+ { 0xffbe, Qt::Key_F1 },
+ { 0xffbf, Qt::Key_F2 },
+ { 0xffc0, Qt::Key_F3 },
+ { 0xffc1, Qt::Key_F4 },
+ { 0xffc2, Qt::Key_F5 },
+ { 0xffc3, Qt::Key_F6 },
+ { 0xffc4, Qt::Key_F7 },
+ { 0xffc5, Qt::Key_F8 },
+ { 0xffc6, Qt::Key_F9 },
+ { 0xffc7, Qt::Key_F10 },
+ { 0xffc8, Qt::Key_F11 },
+ { 0xffc9, Qt::Key_F12 },
+ { 0xffe1, Qt::Key_Shift },
+ { 0xffe2, Qt::Key_Shift },
+ { 0xffe3, Qt::Key_Control },
+ { 0xffe4, Qt::Key_Control },
+ { 0xffe7, Qt::Key_Meta },
+ { 0xffe8, Qt::Key_Meta },
+ { 0xffe9, Qt::Key_Alt },
+ { 0xffea, Qt::Key_Alt },
+ { 0, 0 }
+};
+
+
+KRFBDecoder::KRFBDecoder( KRFBConnection *con )
+ : QObject( con, "RFB Decoder" )
+{
+ assert( con );
+ assert( con->state() == KRFBConnection::Connected );
+
+ this->con = con;
+ this->buf = 0;
+ this->info = 0;
+ this->format = 0;
+ this->buttonMask = 0;
+ currentState = Idle;
+}
+
+KRFBDecoder::~KRFBDecoder()
+{
+ if ( info )
+ delete info;
+ if ( format )
+ delete format;
+}
+
+void KRFBDecoder::start()
+{
+ sendClientInit();
+}
+
+void KRFBDecoder::sendClientInit()
+{
+ con->write( &( con->options()->shared ), 1 );
+
+ // Wait for server init
+ qWarning( "Waiting for server init" );
+
+ static QString statusMsg = tr( "Waiting for server initialisation..." );
+ emit status( statusMsg );
+
+ currentState = AwaitingServerInit;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotServerInit() ) );
+ con->waitForData( ServerInitLength );
+}
+
+void KRFBDecoder::gotServerInit()
+{
+ qWarning( "Got server init" );
+ disconnect( con, SIGNAL( gotEnoughData() ), this, SLOT( gotServerInit() ) );
+
+ if ( info )
+ delete info;
+ info = new KRFBServerInfo;
+ CHECK_PTR( info );
+
+ con->read( &(info->width), 2 );
+ info->width = Swap16IfLE( info->width );
+ con->read( &info->height, 2 );
+ info->height = Swap16IfLE( info->height );
+
+ con->read( &(info->bpp), 1 );
+ con->read( &(info->depth), 1 );
+ con->read( &(info->bigEndian), 1 );
+ con->read( &(info->trueColor), 1 );
+
+ con->read( &(info->redMax), 2 );
+ info->redMax = Swap16IfLE( info->redMax );
+ con->read( &(info->greenMax), 2 );
+ info->greenMax = Swap16IfLE( info->greenMax );
+ con->read( &(info->blueMax), 2 );
+ info->blueMax = Swap16IfLE( info->blueMax );
+
+ con->read( &(info->redShift), 1 );
+ con->read( &(info->greenShift), 1 );
+ con->read( &(info->blueShift), 1 );
+
+ con->read( info->padding, 3 );
+
+ con->read( &(info->nameLength), 4 );
+ info->nameLength = Swap32IfLE( info->nameLength );
+
+ qWarning( "Width = %d, Height = %d", info->width, info->height );
+ qWarning( "Bpp = %d, Depth = %d, Big = %d, True = %d",
+ info->bpp, info->depth, info->bigEndian, info->trueColor );
+ qWarning( "RedMax = %d, GreenMax = %d, BlueMax = %d",
+ info->redMax, info->greenMax, info->blueMax );
+ qWarning( "RedShift = %d, GreenShift = %d, BlueShift = %d",
+ info->redShift, info->greenShift,info-> blueShift );
+
+ buf->resize( info->width, info->height );
+
+ // Wait for desktop name
+ qWarning( "Waiting for desktop name" );
+
+ static QString statusMsg = tr( "Waiting for desktop name..." );
+ emit status( statusMsg );
+
+ currentState = AwaitingDesktopName;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotDesktopName() ) );
+ con->waitForData( info->nameLength );
+}
+
+void KRFBDecoder::gotDesktopName()
+{
+ assert( info );
+ assert( currentState == AwaitingDesktopName );
+
+ qWarning( "Got desktop name" );
+
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotDesktopName() ) );
+
+ char *buf = new char[ info->nameLength + 1 ];
+ CHECK_PTR( buf );
+
+ con->read( buf, info->nameLength );
+ buf[ info->nameLength ] = '\0';
+ info->name = buf;
+
+ qWarning( "Desktop: %s", info->name.latin1() );
+
+ delete buf;
+
+ // Get the format we'll really use and tell the server
+ decidePixelFormat();
+ sendPixelFormat();
+ sendAllowedEncodings();
+ currentState = Idle;
+
+ QString msg;
+ msg = tr( "Connected to %1" );
+ msg = msg.arg( info->name );
+ emit status( msg );
+
+ sendUpdateRequest( false );
+}
+
+void KRFBDecoder::decidePixelFormat()
+{
+ assert( info );
+
+ if ( format )
+ delete format;
+ format = new KRFBPixelFormat;
+ CHECK_PTR( format );
+
+ // What depth do we want?
+ //
+ // We'll use the minimum of the remote and local depths, UNLESS an
+ // eight bit session has been specifically requested by the user.
+ int screenDepth = QPixmap::defaultDepth();
+ int bestDepth = ( screenDepth > info->depth ) ? info->depth : screenDepth;
+ int chosenDepth;
+
+ if ( con->options()->colors256 )
+ chosenDepth = 8;
+ else
+ chosenDepth = bestDepth;
+
+ qWarning( "Screen depth=%d, server depth=%d, best depth=%d, " \
+ "eight bit %d, chosenDepth=%d",
+ screenDepth,
+ info->depth,
+ bestDepth,
+ con->options()->colors256, chosenDepth );
+
+ format->depth = chosenDepth;
+
+ // If we're using the servers native depth
+ if ( chosenDepth == info->depth ) {
+ // Use the servers native format
+ format->bpp = info->bpp;
+ // format->bigEndian = info->bigEndian;
+ format->bigEndian = true;
+ format->trueColor = info->trueColor;
+ format->redMax = info->redMax;
+ format->greenMax = info->greenMax;
+ format->blueMax = info->blueMax;
+ format->redShift = info->redShift;
+ format->greenShift = info->greenShift;
+ format->blueShift = info->blueShift;
+ }
+ else {
+ if ( chosenDepth == 8 ) {
+ format->bpp = 8;
+ format->bigEndian = true;
+ format->trueColor = true;
+ format->redMax = 7;
+ format->greenMax = 7;
+ format->blueMax = 3;
+ format->redShift = 0;
+ format->greenShift = 3;
+ format->blueShift = 6;
+ }
+ }
+
+ format->redMax = Swap16IfLE( format->redMax );
+ format->greenMax = Swap16IfLE( format->greenMax );
+ format->blueMax = Swap16IfLE( format->blueMax );
+}
+
+void KRFBDecoder::sendPixelFormat()
+{
+ static char padding[3];
+ con->write( &SetPixelFormatId, 1 );
+ con->write( padding, 3 );
+
+ con->write( &(format->bpp), 1 );
+ con->write( &(format->depth), 1 );
+ con->write( &(format->bigEndian), 1 );
+ con->write( &(format->trueColor), 1 );
+
+ con->write( &(format->redMax), 2 );
+ con->write( &(format->greenMax), 2 );
+ con->write( &(format->blueMax), 2 );
+
+ con->write( &(format->redShift), 1 );
+ con->write( &(format->greenShift), 1 );
+ con->write( &(format->blueShift), 1 );
+ con->write( format->padding, 3 ); // Padding
+}
+
+void KRFBDecoder::sendAllowedEncodings()
+{
+ static CARD8 padding[1];
+ con->write( &SetEncodingsId, 1 );
+ con->write( padding, 1 );
+
+ static CARD16 noEncodings = con->options()->encodings();
+ noEncodings = Swap16IfLE( noEncodings );
+ con->write( &noEncodings, 2 );
+
+ if ( con->options()->corre )
+ con->write( &CorreEncoding, 4 );
+ if ( con->options()->hexTile )
+ con->write( &HexTileEncoding, 4 );
+ if ( con->options()->rre )
+ con->write( &RreEncoding, 4 );
+ if ( con->options()->copyrect )
+ con->write( &CopyRectEncoding, 4 );
+ // We always support this
+ con->write( &RawEncoding, 4 );
+}
+
+void KRFBDecoder::sendUpdateRequest( bool incremental )
+{
+ if ( currentState != Idle )
+ return;
+
+ con->write( &UpdateRequestId, 1 );
+ con->write( &incremental, 1 );
+
+ static CARD16 x = 0, y = 0;
+ static CARD16 w = Swap16IfLE( info->width );
+ static CARD16 h = Swap16IfLE( info->height );
+
+ con->write( &x, 2 );
+ con->write( &y, 2 );
+ con->write( &w, 2 );
+ con->write( &h, 2 );
+
+ // Now wait for the update
+ currentState = AwaitingUpdate;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotUpdateHeader() ) );
+ con->waitForData( UpdateHeaderLength );
+}
+
+void KRFBDecoder::gotUpdateHeader()
+{
+ assert( currentState == AwaitingUpdate );
+
+ // qWarning( "Got update header" );
+
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotUpdateHeader() ) );
+
+ CARD8 msgType;
+ con->read( &msgType, 1 );
+
+ if ( msgType != UpdateId ) {
+ // We might have a bell or server cut
+ if ( msgType == ServerCutId ) {
+ oldState = currentState;
+ gotServerCut();
+ }
+ else if ( msgType == BellId ) {
+ oldState = currentState;
+ gotBell();
+ }
+ else {
+ int msg = msgType;
+ QString protocolError = tr( "Protocol Error: Message Id %1 was "
+ "found when expecting an update "
+ "message." ).arg( msg );
+ currentState = Error;
+ emit error( protocolError );
+ }
+ return;
+ }
+
+ CARD8 padding;
+ con->read( &padding, 1 );
+
+ con->read( &noRects, 2 );
+ noRects = Swap16IfLE( noRects );
+
+ // qWarning( "Expecting %d rects", noRects );
+
+ // Now wait for the data
+ currentState = AwaitingRectHeader;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotRectHeader() ) );
+ con->waitForData( RectHeaderLength );
+}
+
+void KRFBDecoder::gotRectHeader()
+{
+ assert( currentState == AwaitingRectHeader );
+
+ // qWarning( "Got rect header" );
+
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotRectHeader() ) );
+
+ con->read( &x, 2 );
+ x = Swap16IfLE( x );
+ con->read( &y, 2 );
+ y = Swap16IfLE( y );
+
+ con->read( &w, 2 );
+ w = Swap16IfLE( w );
+ con->read( &h, 2 );
+ h = Swap16IfLE( h );
+
+ con->read( &encoding, 4 );
+
+ // CARD32 encodingLocal = Swap32IfLE( encoding );
+ // qWarning( "Rect: x=%d, y= %d, w=%d, h=%d, encoding=%ld",
+ // x, y, w, h, encodingLocal );
+
+ //
+ // Each encoding needs to be handled differently. Some require
+ // waiting for more data, but others like a copyrect do not.
+ // Our constants have already been byte swapped, so we use
+ // the remote value as is.
+ //
+ if ( encoding == RawEncoding ) {
+ // qWarning( "Raw encoding" );
+ handleRawRect();
+ }
+ else if ( encoding == CopyRectEncoding ) {
+// qWarning( "CopyRect encoding" );
+ handleCopyRect();
+ }
+ else if ( encoding == RreEncoding ) {
+ qWarning( "RRE encoding" );
+ handleRRERect();
+ }
+ else if ( encoding == CorreEncoding ) {
+ qWarning( "CoRRE encoding" );
+ handleCoRRERect();
+ }
+ else if ( encoding == HexTileEncoding ) {
+ qWarning( "HexTile encoding" );
+ handleHexTileRect();
+ }
+ else {
+ int msg = Swap32IfLE( encoding );
+ QString protocolError = tr( "Protocol Error: An unknown encoding was "
+ "used by the server %1" ).arg( msg );
+ currentState = Error;
+ qWarning( "Unknown encoding, %d", msg );
+ emit error( protocolError );
+ return;
+ }
+}
+
+//
+// Raw Encoding
+//
+
+void KRFBDecoder::handleRawRect()
+{
+ // We need something a bit cleverer here to handle large
+ // rectanges nicely. The chunking should be based on the
+ // overall size (but has to be in complete lines).
+
+ // qWarning( "Handling a raw rect chunk" );
+
+ // CARD32 lineCount = w * format->bpp / 8;
+
+ if ( h > RectChunkSize ) {
+ // if ( con->sock->size() / lineCount ) {
+ // getRawRectChunk( con->sock->size() / lineCount );
+ // }
+ // else {
+ getRawRectChunk( RectChunkSize );
+ // }
+ }
+ else {
+ getRawRectChunk( h );
+ }
+}
+
+void KRFBDecoder::getRawRectChunk( int lines )
+{
+ this->lines = lines;
+ CARD32 count = lines * w * format->bpp / 8;
+
+ // Wait for server init
+ // qWarning( "Waiting for raw rect chunk, %ld", count );
+
+ currentState = AwaitingRawRectChunk;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotRawRectChunk() ) );
+ con->waitForData( count );
+}
+
+void KRFBDecoder::gotRawRectChunk()
+{
+ assert( currentState == AwaitingRawRectChunk );
+
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotRawRectChunk() ) );
+
+ // qWarning( "Got raw rect chunk" );
+
+ //
+ // Read the rect data and copy it to the buffer.
+ //
+
+ // TODO: Replace this!
+ int count = lines * w * format->bpp / 8;
+ char *hack = new char[ count ];
+ con->read( hack, count );
+ buf->drawRawRectChunk( hack, x, y, w, lines );
+ delete hack;
+ // /TODO:
+
+ h = h - lines;
+ y = y + lines;
+
+ if ( h > 0 ) {
+ handleRawRect();
+ }
+ else {
+ noRects--;
+
+ // qWarning( "There are %d rects left", noRects );
+
+ if ( noRects ) {
+ currentState = AwaitingRectHeader;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotRectHeader() ) );
+ con->waitForData( RectHeaderLength );
+ }
+ else
+ currentState = Idle;
+ }
+}
+
+//
+// Copy Rectangle Encoding
+//
+
+void KRFBDecoder::handleCopyRect()
+{
+ currentState = AwaitingCopyRectPos;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotCopyRectPos() ) );
+ con->waitForData( CopyRectPosLength );
+}
+
+void KRFBDecoder::gotCopyRectPos()
+{
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotCopyRectPos() ) );
+
+ CARD16 srcX;
+ CARD16 srcY;
+
+ con->read( &srcX, 2 );
+ con->read( &srcY, 2 );
+
+ srcX = Swap16IfLE( srcX );
+ srcY = Swap16IfLE( srcY );
+
+ buf->copyRect( srcX, srcY, x, y, w, h );
+
+ noRects--;
+
+ // qWarning( "There are %d rects left", noRects );
+
+ if ( noRects ) {
+ currentState = AwaitingRectHeader;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotRectHeader() ) );
+ con->waitForData( RectHeaderLength );
+ }
+ else
+ currentState = Idle;
+}
+
+void KRFBDecoder::handleRRERect()
+{
+ qWarning( "RRE not implemented" );
+}
+
+void KRFBDecoder::handleCoRRERect()
+{
+ qWarning( "CoRRE not implemented" );
+}
+
+void KRFBDecoder::handleHexTileRect()
+{
+ qWarning( "HexTile not implemented" );
+}
+
+void KRFBDecoder::sendMouseEvent( QMouseEvent *e )
+{
+ // Deal with the buttons
+ if ( e->type() != QEvent::MouseMove ) {
+ buttonMask = 0;
+ if ( e->type() == QEvent::MouseButtonPress ) {
+ if ( e->button() & LeftButton )
+ buttonMask |= 0x01;
+ if ( e->button() & MidButton )
+ buttonMask |= 0x04;
+ if ( e->button() & RightButton )
+ buttonMask |= 0x02;
+ }
+ else if ( e->type() == QEvent::MouseButtonRelease ) {
+ if ( e->button() & LeftButton )
+ buttonMask &= 0x06;
+ if ( e->button() & MidButton )
+ buttonMask |= 0x03;
+ if ( e->button() & RightButton )
+ buttonMask |= 0x05;
+ }
+ }
+
+ CARD16 x = Swap16IfLE( e->x() );
+ CARD16 y = Swap16IfLE( e->y() );
+
+ con->write( &PointerEventId, 1 );
+ con->write( &buttonMask, 1 );
+ con->write( &x, 2 );
+ con->write( &y, 2 );
+}
+
+
+void KRFBDecoder::sendCutEvent( const QString &unicode )
+{
+ //
+ // Warning: There is a bug in the RFB protocol because there is no way to find
+ // out the codepage in use on the remote machine. This could be fixed by requiring
+ // the remote server to use utf8 etc. but for now we have to assume they're the
+ // same. I've reported this problem to the ORL guys, but they apparantly have no
+ // immediate plans to fix the issue. :-( (rich)
+ //
+
+ CARD8 padding[3];
+ QCString text = unicode.local8Bit();
+ CARD32 length = text.length();
+ length = Swap32IfLE( length );
+
+ con->write( &ClientCutTextId, 1 );
+ con->write( &padding, 3 );
+ con->write( &length, 4 );
+ con->write( text.data(), length );
+}
+
+void KRFBDecoder::gotServerCut()
+{
+ qWarning( "Got server cut" );
+
+ currentState = AwaitingServerCutLength;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotServerCutLength() ) );
+ con->waitForData( ServerCutLenLength );
+}
+
+void KRFBDecoder::gotServerCutLength()
+{
+ assert( currentState = AwaitingServerCutLength );
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotServerCutLength() ) );
+
+ CARD8 padding[3];
+ con->read( padding, 3 );
+
+ con->read( &serverCutTextLen, 4 );
+ serverCutTextLen = Swap32IfLE( serverCutTextLen );
+
+ currentState = AwaitingServerCutText;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotServerCutText() ) );
+ con->waitForData( serverCutTextLen );
+}
+
+void KRFBDecoder::gotServerCutText()
+{
+ assert( currentState = AwaitingServerCutText );
+
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotServerCutText() ) );
+
+ //
+ // Warning: There is a bug in the RFB protocol because there is no way to find
+ // out the codepage in use on the remote machine. This could be fixed by requiring
+ // the remote server to use utf8 etc. but for now we have to assume they're the
+ // same. I've reported this problem to the ORL guys, but they apparantly have no
+ // immediate plans to fix the issue. :-( (rich)
+ //
+
+ char *cutbuf = new char[ serverCutTextLen + 1 ];
+ CHECK_PTR( cutbuf );
+
+ con->read( cutbuf, serverCutTextLen );
+ cutbuf[ serverCutTextLen ] = '\0';
+
+ qWarning( "Server cut: %s", cutbuf );
+
+ QString cutText( cutbuf ); // DANGER!!
+ qApp->clipboard()->setText( cutText );
+
+ delete cutbuf;
+
+ // Now wait for the update (again)
+ if ( oldState == AwaitingUpdate ) {
+ currentState = AwaitingUpdate;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotUpdateHeader() ) );
+ con->waitForData( UpdateHeaderLength );
+ }
+ else if ( oldState == Idle ) {
+ currentState = Idle;
+ }
+ else {
+ qWarning( "Async handled in weird state" );
+ currentState = oldState;
+ };
+}
+
+void KRFBDecoder::gotBell()
+{
+ qWarning( "Got server bell" );
+ buf->soundBell();
+
+ // Now wait for the update (again)
+ if ( oldState == AwaitingUpdate ) {
+ currentState = AwaitingUpdate;
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotUpdateHeader() ) );
+ con->waitForData( UpdateHeaderLength );
+ }
+ else if ( oldState == Idle ) {
+ currentState = Idle;
+ }
+ else {
+ qWarning( "Async handled in weird state" );
+ currentState = oldState;
+ };
+}
+
+void KRFBDecoder::sendKeyPressEvent( QKeyEvent *event )
+{
+ int key;
+ key = toKeySym( event );
+ if ( key ) {
+ key = Swap32IfLE( key );
+
+ CARD8 mask = true;
+
+ CARD16 padding = 0;
+ con->write( &KeyEventId, 1 );
+ con->write( &mask, 1 );
+ con->write( &padding, 2 );
+ con->write( &key, 4 );
+ }
+}
+
+void KRFBDecoder::sendKeyReleaseEvent( QKeyEvent *event )
+{
+ int key;
+ key = toKeySym( event );
+ if ( key ) {
+ key = Swap32IfLE( key );
+
+ CARD8 mask = false;
+
+ CARD16 padding = 0;
+ con->write( &KeyEventId, 1 );
+ con->write( &mask, 1 );
+ con->write( &padding, 2 );
+ con->write( &key, 4 );
+ }
+}
+
+int KRFBDecoder::toKeySym( QKeyEvent *k )
+{
+ int ke = 0;
+
+ ke = k->ascii();
+ // Markus: Crappy hack. I dont know why lower case letters are
+ // not defined in qkeydefs.h. The key() for e.g. 'l' == 'L'.
+ // This sucks. :-(
+
+ if ( (ke == 'a') || (ke == 'b') || (ke == 'c') || (ke == 'd')
+ || (ke == 'e') || (ke == 'f') || (ke == 'g') || (ke == 'h')
+ || (ke == 'i') || (ke == 'j') || (ke == 'k') || (ke == 'l')
+ || (ke == 'm') || (ke == 'n') || (ke == 'o') || (ke == 'p')
+ || (ke == 'q') || (ke == 'r') || (ke == 's') || (ke == 't')
+ || (ke == 'u') || (ke == 'v') ||( ke == 'w') || (ke == 'x')
+ || (ke == 'y') || (ke == 'z') ) {
+ ke = k->key();
+ ke = ke + 0x20;
+ return ke;
+ }
+
+ // qkeydefs = xkeydefs! :-)
+ if ( ( k->key() >= 0x0a0 ) && k->key() <= 0x0ff )
+ return k->key();
+
+ if ( ( k->key() >= 0x20 ) && ( k->key() <= 0x7e ) )
+ return k->key();
+
+ // qkeydefs != xkeydefs! :-(
+ // This is gonna suck :-(
+
+ int i = 0;
+ while ( keyMap[i].keycode ) {
+ if ( k->key() == keyMap[i].keycode )
+ return keyMap[i].keysym;
+ i++;
+ }
+
+ return 0;
+}
+
diff --git a/noncore/comm/keypebble/krfbdecoder.h b/noncore/comm/keypebble/krfbdecoder.h
new file mode 100644
index 0000000..4ba0185
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbdecoder.h
@@ -0,0 +1,134 @@
+// -*- c++ -*-
+
+#ifndef KRFBDECODER_H
+#define KRFBDECODER_H
+
+#include <qobject.h>
+
+class KRFBConnection;
+class KRFBServerInfo;
+class KRFBPixelFormat;
+class KRFBBuffer;
+
+
+typedef unsigned char CARD8;
+typedef unsigned short CARD16;
+typedef unsigned long CARD32;
+
+/**
+ * Negotiates the pixel format to be used then decodes the resulting
+ * data stream.
+ *
+ * @author Richard Moore, rich@kde.org
+ */
+class KRFBDecoder : public QObject
+{
+ Q_OBJECT
+
+public:
+ friend class KRFBBuffer;
+
+ enum State {
+ AwaitingServerInit,
+ AwaitingDesktopName,
+ AwaitingUpdate,
+ AwaitingRectHeader,
+ AwaitingRawRectChunk,
+ AwaitingCopyRectPos,
+ AwaitingServerCutLength,
+ AwaitingServerCutText,
+ Idle,
+ Error
+ };
+
+ /**
+ * Create a KRFBDecoder that reads data from a logged in KRFBConnection
+ * and sends its output to a KRFBBuffer.
+ */
+ KRFBDecoder( KRFBConnection *con );
+ ~KRFBDecoder();
+
+ void setBuffer( KRFBBuffer *buf ) { this->buf = buf; };
+ void start();
+
+ int toKeySym( QKeyEvent *k );
+
+ //
+ // Client -> Server messages
+ //
+ void sendUpdateRequest( bool incremental );
+ void sendMouseEvent( QMouseEvent *e );
+ void sendKeyPressEvent( QKeyEvent *e );
+ void sendKeyReleaseEvent( QKeyEvent *e );
+ void sendCutEvent( const QString &text );
+
+protected:
+ //
+ // Initial format negotiation
+ //
+ void decidePixelFormat();
+ void sendPixelFormat();
+ void sendClientInit();
+ void sendAllowedEncodings();
+
+ //
+ // Rectange processing
+ //
+ void handleRawRect();
+ void handleCopyRect();
+ void handleRRERect();
+ void handleCoRRERect();
+ void handleHexTileRect();
+
+ void getRawRectChunk( int lines );
+
+protected slots:
+ void gotServerInit();
+ void gotDesktopName();
+ void gotUpdateHeader();
+ void gotRectHeader();
+ void gotRawRectChunk();
+ void gotCopyRectPos();
+ void gotServerCut();
+ void gotServerCutLength();
+ void gotServerCutText();
+ void gotBell();
+
+signals:
+ void error( const QString & );
+ void status( const QString & );
+
+private:
+ State currentState;
+
+ // Used to store the state we were in before a cut or bell msg
+ State oldState;
+
+ // The number of rects we're expecting
+ CARD16 noRects;
+
+ //
+ // Info about the current rect.
+ //
+ CARD16 x, y, w, h;
+ int lines;
+ CARD32 encoding;
+
+ CARD32 serverCutTextLen;
+
+ /** Where we draw the data (and the source of our events). */
+ KRFBBuffer *buf;
+ /** The connection to the server. */
+ KRFBConnection *con;
+
+ /** Info about the RFB server. */
+ KRFBServerInfo *info;
+ /** The pixel format we want. */
+ KRFBPixelFormat *format;
+
+ CARD8 buttonMask;
+};
+
+#endif // KRFBDECODER_H
+
+
diff --git a/noncore/comm/keypebble/krfblogin.cpp b/noncore/comm/keypebble/krfblogin.cpp
new file mode 100644
index 0000000..073ba0e
--- a/dev/null
+++ b/noncore/comm/keypebble/krfblogin.cpp
@@ -0,0 +1,255 @@
+#include <assert.h>
+
+
+extern "C" {
+#include "vncauth.h"
+}
+
+#include "krfblogin.h"
+#include "krfbconnection.h"
+#include <qtimer.h>
+
+// The length of the various messages (used to decide how many bytes to
+// wait for).
+const int ServerVersionLength = 12;
+const int ClientVersionLength = 12;
+const int AuthSchemeLength = 4;
+const int FailureReasonSizeLength = 4;
+const int ChallengeLength = 16;
+const int AuthResultLength = 4;
+
+// Authentication results
+enum AuthResult {
+ AuthOk,
+ AuthFailed,
+ AuthTooMany
+};
+
+typedef unsigned char CARD8;
+typedef unsigned short CARD16;
+typedef unsigned long CARD32;
+
+const int endianTest = 1;
+
+// Endian stuff
+#define Swap16IfLE(s) \
+ (*(char *)&endianTest ? ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) : (s))
+
+#define Swap32IfLE(l) \
+ (*(char *)&endianTest ? ((((l) & 0xff000000) >> 24) | \
+ (((l) & 0x00ff0000) >> 8) | \
+ (((l) & 0x0000ff00) << 8) | \
+ (((l) & 0x000000ff) << 24)) : (l))
+
+KRFBLogin::KRFBLogin( KRFBConnection *con )
+ : QObject( con, "RFB login manager" )
+{
+ assert( con );
+ this->con = con;
+ currentState = AwaitingServerVersion;
+
+ connect( this, SIGNAL( error( const QString & ) ),
+ con, SIGNAL( error( const QString & ) ) );
+
+ connect( this, SIGNAL( passwordRequired( KRFBConnection * ) ),
+ con, SIGNAL( passwordRequired( KRFBConnection * ) ) );
+
+ qWarning( "Waiting for server version..." );
+
+ static QString statusMsg = tr( "Waiting for server version..." );
+ emit status( statusMsg );
+
+ // Kick off the state machine
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotServerVersion() ) );
+ con->waitForData( ServerVersionLength );
+}
+
+KRFBLogin::~KRFBLogin()
+{
+
+}
+
+KRFBLogin::State KRFBLogin::state() const
+{
+ return currentState;
+}
+
+void KRFBLogin::gotServerVersion()
+{
+ qWarning( "Got server version" );
+
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotServerVersion() ) );
+
+ // Read the server's version message
+ char serverVersion[ ServerVersionLength + 1 ];
+ con->read( serverVersion, ServerVersionLength );
+ serverVersion[ ServerVersionLength ] = '\0';
+
+ QCString rfbString( serverVersion, ServerVersionLength + 1 );
+ versionString = rfbString;
+
+ QRegExp regexp( "RFB [0-9][0-9][0-9]\\.[0-9][0-9][0-9]\n" );
+
+ if ( rfbString.find( regexp ) == -1 ) {
+ static QString msg = tr( "Error: Invalid server version, %1" ).arg( rfbString );
+
+ qWarning( msg );
+ emit error( msg );
+ currentState = Error;
+ return;
+ }
+
+ // Calculate the actual version number
+ serverMajor = (serverVersion[4] - '0') * 100
+ + (serverVersion[5] - '0') * 10
+ + (serverVersion[6] - '0');
+ serverMinor = (serverVersion[8] - '0') * 100
+ + (serverVersion[9] - '0') * 10
+ + (serverVersion[10] - '0');
+
+ qWarning("Server Version: %03d.%03d", serverMajor, serverMinor );
+
+ if ( serverMajor != 3 ) {
+ QString msg = tr( "Error: Unsupported server version, %1" )
+ .arg( rfbString );
+
+ qWarning( msg );
+ emit error( msg );
+ currentState = Error;
+ return;
+ }
+
+ if ( serverMinor != 3 ) {
+ qWarning( "Minor version mismatch: %d", serverMinor );
+ }
+
+ // Setup for the next state
+ sendClientVersion();
+
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotAuthScheme() ) );
+ con->waitForData( AuthSchemeLength );
+}
+
+void KRFBLogin::gotAuthScheme()
+{
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotAuthScheme() ) );
+
+ // Got data
+ CARD32 scheme;
+ con->read( &scheme, AuthSchemeLength );
+ scheme = Swap32IfLE( scheme );
+
+ static QString statusMsgOk = tr( "Logged in" );
+
+ switch ( scheme ) {
+ case 0:
+ qWarning( "Failed" );
+ // Handle failure
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotFailureReasonSize() ) );
+ con->waitForData( FailureReasonSizeLength );
+ break;
+ case 1:
+ // Handle no auth
+ emit status( statusMsgOk );
+ con->gotRFBConnection();
+ break;
+ case 2:
+ // Handle VNC auth
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotChallenge() ) );
+ con->waitForData( ChallengeLength );
+ break;
+ default:
+ qWarning( "Unknown authentication scheme, 0x%08lx", scheme );
+ currentState = Error;
+ break;
+ };
+}
+
+void KRFBLogin::gotChallenge()
+{
+ disconnect( con, SIGNAL( gotEnoughData() ),
+ this, SLOT( gotChallenge() ) );
+
+ QTimer::singleShot( 0, this, SLOT(getPassword()) );
+}
+
+void KRFBLogin::getPassword()
+{
+ // Got data
+ CARD8 challenge[ ChallengeLength ];
+ con->read( challenge, ChallengeLength );
+
+ // Last chance to enter a password
+ if ( con->pass_.isNull() ) {
+ qWarning( "krfblogin needs a password" );
+ emit passwordRequired( con );
+ }
+
+ if ( con->pass_.isNull() ) {
+ QString msg = tr( "Error: This server requires a password, but none "
+ "has been specified.\n" );
+
+ emit error( msg );
+ return;
+ }
+
+ vncEncryptBytes( (unsigned char *) challenge, con->pass_.data() );
+ con->write( challenge, ChallengeLength );
+
+ connect( con, SIGNAL( gotEnoughData() ), SLOT( gotAuthResult() ) );
+ con->waitForData( AuthResultLength );
+}
+
+void KRFBLogin::gotFailureReasonSize()
+{
+ disconnect( con, SIGNAL( gotEnoughData() ), this,
+ SLOT( gotFailureReasonSize() ) );
+}
+
+void KRFBLogin::gotAuthResult()
+{
+ // Got data
+ disconnect( con, SIGNAL( gotEnoughData() ), this,
+ SLOT( gotAuthResult() ) );
+
+ long result;
+ con->read( &result, AuthResultLength );
+ result = Swap32IfLE( result );
+
+ qWarning( "Authentication Result is 0x%08lx", result );
+
+ static QString failed = tr( "Error: The password you specified was incorrect." );
+ static QString tooMany = tr( "Error: Too many invalid login attempts have been made\n"
+ "to this account, please try later." );
+
+ static QString statusMsgOk = tr( "Logged in" );
+ static QString statusMsgFailed = tr( "Login Failed" );
+ static QString statusMsgTooMany = tr( "Too many failures" );
+
+ switch( result ) {
+ case AuthOk:
+ emit status( statusMsgOk );
+ con->gotRFBConnection();
+ break;
+ case AuthFailed:
+ qWarning( "Dammit" );
+ emit status( statusMsgFailed );
+ emit error( failed );
+ break;
+ case AuthTooMany:
+ emit status( statusMsgTooMany );
+ emit error( tooMany );
+ break;
+ default:
+ qWarning( "Invalid authentication result, %lx", result );
+ break;
+ }
+}
+
+void KRFBLogin::sendClientVersion()
+{
+ qWarning( "Sending client version" );
+ con->write( (void*)"RFB 003.003\n", ClientVersionLength );
+}
diff --git a/noncore/comm/keypebble/krfblogin.h b/noncore/comm/keypebble/krfblogin.h
new file mode 100644
index 0000000..5208210
--- a/dev/null
+++ b/noncore/comm/keypebble/krfblogin.h
@@ -0,0 +1,62 @@
+// -*- c++ -*-
+
+#ifndef KRFBLOGIN_H
+#define KRFBLOGIN_H
+
+#include <qobject.h>
+
+class KRFBConnection;
+
+/**
+ * Handles logging into the RFB server.
+ *
+ * @version $Id$
+ * @author Richard Moore, rich@kde.org
+ */
+class KRFBLogin : QObject
+{
+ Q_OBJECT
+
+public:
+ enum State {
+ AwaitingServerVersion,
+ AwaitingAuthScheme,
+ AwaitingChallenge,
+ WaitingForResponse,
+ Authenticated,
+ Ready,
+ Failed,
+ Error
+ };
+
+ KRFBLogin( KRFBConnection *con );
+ ~KRFBLogin();
+
+ KRFBLogin::State state() const;
+
+protected:
+ void sendClientVersion();
+
+protected slots:
+ void getPassword();
+ void gotServerVersion();
+ void gotAuthScheme();
+ void gotChallenge();
+ void gotAuthResult();
+ void gotFailureReasonSize();
+
+signals:
+ void passwordRequired( KRFBConnection * );
+ void error( const QString & );
+ void status( const QString & );
+
+private:
+ KRFBConnection *con;
+ State currentState;
+ QCString versionString;
+ int serverMajor;
+ int serverMinor;
+};
+
+#endif // KRFBLOGIN_H
+
diff --git a/noncore/comm/keypebble/krfboptions.cpp b/noncore/comm/keypebble/krfboptions.cpp
new file mode 100644
index 0000000..9daf3f0
--- a/dev/null
+++ b/noncore/comm/keypebble/krfboptions.cpp
@@ -0,0 +1,52 @@
+#include <qpe/config.h>
+#include <qpe/qpeapplication.h>
+#include "krfboptions.h"
+
+KRFBOptions::KRFBOptions()
+{
+ Config config( "keypebble" );
+ readSettings( &config );
+}
+
+KRFBOptions::~KRFBOptions()
+{
+ Config config( "keypebble" );
+ writeSettings( &config );
+}
+
+void KRFBOptions::readSettings( Config *config )
+{
+ hexTile = config->readBoolEntry( "HexTile" );
+ corre = config->readBoolEntry( "CORRE" );
+ rre = config->readBoolEntry( "RRE" );
+ copyrect = config->readBoolEntry( "CopyRect", true );
+ colors256 = config->readBoolEntry( "Colors256" );
+ shared = config->readBoolEntry( "Shared" );
+ readOnly = config->readBoolEntry( "ReadOnly" );
+ updateRate = config->readNumEntry( "UpdateRate", 50 );
+}
+
+void KRFBOptions::writeSettings( Config *config )
+{
+ config->writeEntry( "HexTile", hexTile );
+ config->writeEntry( "CORRE", corre );
+ config->writeEntry( "RRE", rre );
+ config->writeEntry( "CopyRect", copyrect );
+ config->writeEntry( "Colors256", colors256 );
+ config->writeEntry( "Shared", shared );
+ config->writeEntry( "ReadOnly", readOnly );
+ config->writeEntry( "UpdateRate", updateRate );
+}
+
+int KRFBOptions::encodings()
+{
+ // Initially one because we always support raw encoding
+ int count = 1;
+
+ count += hexTile ? 1 : 0;
+ count += corre ? 1 : 0;
+ count += rre ? 1 : 0;
+ count += copyrect ? 1 : 0;
+
+ return count;
+}
diff --git a/noncore/comm/keypebble/krfboptions.h b/noncore/comm/keypebble/krfboptions.h
new file mode 100644
index 0000000..41cea35
--- a/dev/null
+++ b/noncore/comm/keypebble/krfboptions.h
@@ -0,0 +1,31 @@
+// -*- c++ -*-
+
+#ifndef KRFBOPTIONS_H
+#define KRFBOPTIONS_H
+
+class Config;
+
+class KRFBOptions
+{
+public:
+ KRFBOptions();
+ ~KRFBOptions();
+
+ int encodings();
+ void readSettings( Config *config );
+ void writeSettings( Config *config );
+
+ bool hexTile;
+ bool corre;
+ bool rre;
+ bool copyrect;
+
+ bool colors256;
+ bool shared;
+ bool readOnly;
+ bool deIconify;
+
+ int updateRate;
+};
+
+#endif // KRFBOPTIONS_H
diff --git a/noncore/comm/keypebble/krfbserverinfo.h b/noncore/comm/keypebble/krfbserverinfo.h
new file mode 100644
index 0000000..7449da9
--- a/dev/null
+++ b/noncore/comm/keypebble/krfbserverinfo.h
@@ -0,0 +1,42 @@
+// -*- c++ -*-
+
+#ifndef KRFBSERVERINFO_H
+#define KRFBSERVERINFO_H
+
+#include <qstring.h>
+
+typedef unsigned char CARD8;
+typedef unsigned short CARD16;
+typedef unsigned long CARD32;
+
+class KRFBPixelFormat
+{
+public:
+ CARD8 bpp;
+ CARD8 depth;
+ CARD8 bigEndian;
+ CARD8 trueColor;
+ CARD16 redMax;
+ CARD16 greenMax;
+ CARD16 blueMax;
+ CARD8 redShift;
+ CARD8 greenShift;
+ CARD8 blueShift;
+ CARD8 padding[3]; // 3 bytes padding
+};
+
+/**
+ * Information sent by the server in its init message.
+ */
+class KRFBServerInfo : public KRFBPixelFormat
+{
+public:
+ CARD16 width;
+ CARD16 height;
+ CARD32 nameLength;
+ QString name;
+};
+
+#endif // KRFBSERVERINFO_H
+
+
diff --git a/noncore/comm/keypebble/kvnc.cpp b/noncore/comm/keypebble/kvnc.cpp
new file mode 100644
index 0000000..bb18999
--- a/dev/null
+++ b/noncore/comm/keypebble/kvnc.cpp
@@ -0,0 +1,191 @@
+#include <qiconset.h>
+#include <qdialog.h>
+#include <qpixmap.h>
+#include <qdom.h>
+#include <qaction.h>
+#include <qpe/qpemenubar.h>
+#include <qstatusbar.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qpe/qpetoolbar.h>
+#include <qtimer.h>
+#include <qmessagebox.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/global.h>
+#include <assert.h>
+
+#include "kvnc.h"
+#include "krfbcanvas.h"
+#include "kvncoptionsdlg.h"
+#include "krfbconnection.h"
+
+
+/* XPM */
+static char * menu_xpm[] = {
+"12 12 5 1",
+" c None",
+". c #000000",
+"+ c #FFFDAD",
+"@ c #FFFF00",
+"# c #E5E100",
+" ",
+" ",
+" ......... ",
+" .+++++++. ",
+" .+@@@@#. ",
+" .+@@@#. ",
+" .+@@#. ",
+" .+@#. ",
+" .+#. ",
+" .+. ",
+" .. ",
+" "};
+
+const int StatusTextId = 0;
+
+KVNC::KVNC( const char *name ) : QMainWindow( 0, name )
+{
+ setCaption( tr("VNC Viewer") );
+ fullscreen = false;
+
+ canvas = new KRFBCanvas( this, "canvas" );
+ setCentralWidget( canvas );
+
+ connect( canvas->connection(), SIGNAL(statusChanged(const QString &)),
+ this, SLOT(statusMessage(const QString &)) );
+ connect( canvas->connection(), SIGNAL(error(const QString &)),
+ this, SLOT(error(const QString &)) );
+ connect( canvas->connection(), SIGNAL(connected()), this, SLOT(connected()) );
+ connect( canvas->connection(), SIGNAL(loggedIn()), this, SLOT(loggedIn()) );
+ connect( canvas->connection(), SIGNAL(disconnected()), this, SLOT(disconnected()) );
+
+ setupActions();
+
+ cornerButton = new QPushButton( this );
+ cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) );
+ connect( cornerButton, SIGNAL(pressed()), this, SLOT(showMenu()) );
+ canvas->setCornerWidget( cornerButton );
+
+ QTimer::singleShot( 0, canvas, SLOT(openConnection()) );
+}
+
+KVNC::~KVNC()
+{
+
+}
+
+void KVNC::openURL( const QUrl &url )
+{
+ canvas->openURL( url );
+}
+
+void KVNC::setupActions()
+{
+ cornerMenu = new QPopupMenu( this );
+
+ fullScreenAction = new QAction( tr("Full Screen"), QString::null, 0, 0 );
+ connect( fullScreenAction, SIGNAL(activated()),
+ this, SLOT( toggleFullScreen() ) );
+ fullScreenAction->addTo( cornerMenu );
+ fullScreenAction->setEnabled( false );
+
+ optionsAction = new QAction( tr("Settings"), QString::null, 0, 0 );
+ connect( optionsAction, SIGNAL(activated()), this, SLOT( showOptions() ) );
+ optionsAction->addTo( cornerMenu );
+
+ connectAction = new QAction( tr("Connect..."), QString::null, 0, 0 );
+ connect( connectAction, SIGNAL(activated()),
+ canvas, SLOT( openConnection() ) );
+ connectAction->addTo( cornerMenu );
+
+ disconnectAction = new QAction( tr("Disconnect"), QString::null, 0, 0 );
+ connect( disconnectAction, SIGNAL(activated()),
+ this, SLOT( closeConnection() ) );
+ disconnectAction->addTo( cornerMenu );
+ disconnectAction->setEnabled( false );
+}
+
+void KVNC::toggleFullScreen()
+{
+ if ( fullscreen ) {
+ canvas->releaseKeyboard();
+ canvas->reparent( this, 0, QPoint(0,0), false );
+ canvas->setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ setCentralWidget( canvas );
+ canvas->show();
+ fullScreenAction->setText( tr("Full Screen") );
+ } else {
+ canvas->setFrameStyle( QFrame::NoFrame );
+ canvas->reparent( 0,WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop,
+ QPoint(0,0),false);
+ canvas->resize(qApp->desktop()->width(), qApp->desktop()->height());
+ canvas->raise();
+ canvas->setFocus();
+ canvas->grabKeyboard();
+ canvas->show();
+
+ fullScreenAction->setText( tr("Stop Full Screen") );
+ }
+
+ fullscreen = !fullscreen;
+}
+
+void KVNC::closeConnection()
+{
+ if ( fullscreen )
+ toggleFullScreen();
+ canvas->closeConnection();
+}
+
+void KVNC::showMenu()
+{
+ QPoint pt = mapToGlobal(cornerButton->pos());
+ QSize s = cornerMenu->sizeHint();
+ pt.ry() -= s.height();
+ pt.rx() -= s.width();
+ cornerMenu->popup( pt );
+}
+
+void KVNC::connected()
+{
+ static QString msg = tr( "Connected to remote host" );
+ statusMessage( msg );
+ connectAction->setEnabled( false );
+ disconnectAction->setEnabled( true );
+ fullScreenAction->setEnabled( true );
+}
+
+void KVNC::loggedIn()
+{
+ static QString msg = tr( "Logged in to remote host" );
+ statusMessage( msg );
+}
+
+void KVNC::disconnected()
+{
+ static QString msg = tr( "Connection closed" );
+ statusMessage( msg );
+ connectAction->setEnabled( true );
+ disconnectAction->setEnabled( false );
+ fullScreenAction->setEnabled( false );
+}
+
+void KVNC::statusMessage( const QString &m )
+{
+ Global::statusMessage( m );
+}
+
+void KVNC::error( const QString &msg )
+{
+ statusMessage( msg );
+ QMessageBox::warning( this, tr("VNC Viewer"), msg );
+}
+
+void KVNC::showOptions()
+{
+ KVNCOptionsDlg *wdg = new KVNCOptionsDlg( canvas->connection()->options(), this );
+ wdg->showMaximized();
+ wdg->exec();
+ delete wdg;
+}
+
diff --git a/noncore/comm/keypebble/kvnc.h b/noncore/comm/keypebble/kvnc.h
new file mode 100644
index 0000000..92666c5
--- a/dev/null
+++ b/noncore/comm/keypebble/kvnc.h
@@ -0,0 +1,56 @@
+// -*- c++ -*-
+
+#ifndef KVNC_H
+#define KVNC_H
+
+#include <qmainwindow.h>
+#include <qurl.h>
+
+class QAction;
+class KRFBCanvas;
+class QPushButton;
+class QToolBar;
+
+/**
+ * Top level window for Keystone.
+ *
+ * @author Richard Moore, rich@kde.org
+ * @version $Id$
+ */
+class KVNC : public QMainWindow
+{
+ Q_OBJECT
+public:
+ KVNC( const char *name = 0 );
+ ~KVNC();
+
+public slots:
+ void toggleFullScreen();
+ void openURL( const QUrl & );
+ void closeConnection();
+ void showOptions();
+
+protected:
+ void setupActions();
+
+protected slots:
+ void showMenu();
+
+ void connected();
+ void loggedIn();
+ void disconnected();
+ void statusMessage( const QString & );
+ void error( const QString & );
+
+private:
+ bool fullscreen;
+ KRFBCanvas *canvas;
+ QPopupMenu *cornerMenu;
+ QPushButton *cornerButton;
+ QAction *fullScreenAction;
+ QAction *optionsAction;
+ QAction *disconnectAction;
+ QAction *connectAction;
+};
+
+#endif // KVNC_H
diff --git a/noncore/comm/keypebble/kvncconnectdlg.cpp b/noncore/comm/keypebble/kvncconnectdlg.cpp
new file mode 100644
index 0000000..467cebf
--- a/dev/null
+++ b/noncore/comm/keypebble/kvncconnectdlg.cpp
@@ -0,0 +1,79 @@
+#include <qstring.h>
+#include <qlayout.h>
+#include <qframe.h>
+#include <qspinbox.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qfont.h>
+
+#include <assert.h>
+
+#include "krfbconnection.h"
+#include "kvncoptionsdlg.h"
+#include "kvncconnectdlg.h"
+
+
+KVNCConnectDlg::KVNCConnectDlg( KRFBConnection *con,
+ QWidget *parent, const char *name )
+ : QDialog( parent, name, true )
+{
+ setCaption( tr("Connect to VNC server") );
+ assert( con );
+ this->con = con;
+
+ QGridLayout *inner = new QGridLayout( this, 3, 2, 6 );
+
+ QLabel *label = new QLabel( tr("Host Name:"),
+ this , "hostLabel");
+ hostNameCombo = new QComboBox( true, this );
+ hostNameCombo->setInsertionPolicy( QComboBox::AtTop );
+ hostNameCombo->setMaxCount( 10 );
+ hostNameCombo->insertItem( "localhost" );
+ hostNameCombo->setFocus();
+
+ inner->addWidget( label, 0, 0 );
+ inner->addWidget( hostNameCombo, 0, 1 );
+
+ label = new QLabel( tr("Display Number:"), this, "displayNumber" );
+ displayNumberEdit = new QSpinBox( this );
+
+ inner->addWidget( label, 1, 0 );
+ inner->addWidget( displayNumberEdit, 1, 1 );
+
+ // if ( viewer->display() != -1 ) {
+ // displayNumberEdit->setValue( viewer->display() );
+ displayNumberEdit->setValue( 1 );
+ // }
+
+ label = new QLabel( tr("Password:"), this );
+ inner->addWidget( label, 2, 0 );
+
+ passwordEdit = new QLineEdit( this );
+ passwordEdit->setEchoMode( QLineEdit::Password );
+ inner->addWidget( passwordEdit, 2, 1 );
+
+ inner->setColStretch( 0, 0 );
+ inner->setColStretch( 1, 15 );
+}
+
+
+void KVNCConnectDlg::accept()
+{
+ int dis;
+ // viewer->setHost(hostNameCombo->currentText());
+ QString temp = displayNumberEdit->text();
+ if(temp.isEmpty())
+ dis = -1;
+ else
+ dis = temp.toUInt();
+ // viewer->setDisplay(dis);
+ QDialog::accept();
+}
+
+void KVNCConnectDlg::options()
+{
+ KVNCOptionsDlg *wdg = new KVNCOptionsDlg( con->options(), this );
+ wdg->exec();
+ delete wdg;
+}
+
diff --git a/noncore/comm/keypebble/kvncconnectdlg.h b/noncore/comm/keypebble/kvncconnectdlg.h
new file mode 100644
index 0000000..cf34aab
--- a/dev/null
+++ b/noncore/comm/keypebble/kvncconnectdlg.h
@@ -0,0 +1,39 @@
+// -*- c++ -*-
+
+#ifndef KVNCCONNECTDLG_H
+#define KVNCCONNECTDLG_H
+
+#include <qdialog.h>
+#include <qspinbox.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qurl.h>
+
+class KRFBConnection;
+
+class KVNCConnectDlg : public QDialog
+{
+ Q_OBJECT
+
+public:
+ KVNCConnectDlg( KRFBConnection *con,
+ QWidget *parent = 0, const char *name = 0 );
+
+ QString hostname() { return hostNameCombo->currentText(); };
+ int display() { return displayNumberEdit->value(); };
+ QString password() const { return passwordEdit->text(); }
+
+protected:
+ void accept();
+
+protected slots:
+ void options();
+
+private:
+ QComboBox *hostNameCombo;
+ QSpinBox *displayNumberEdit;
+ QLineEdit *passwordEdit;
+ KRFBConnection *con;
+};
+
+#endif // KVNCCONNECTDLG_H
diff --git a/noncore/comm/keypebble/kvncoptionsdlg.cpp b/noncore/comm/keypebble/kvncoptionsdlg.cpp
new file mode 100644
index 0000000..b9f57d1
--- a/dev/null
+++ b/noncore/comm/keypebble/kvncoptionsdlg.cpp
@@ -0,0 +1,53 @@
+#include <qframe.h>
+#include <qvbox.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qwhatsthis.h>
+#include <qapplication.h>
+#include "krfboptions.h"
+
+#include "kvncoptionsdlg.h"
+
+KVNCOptionsDlg::KVNCOptionsDlg( KRFBOptions *options,
+ QWidget *parent, char *name, bool modal )
+ : VncOptionsBase( parent, name, modal )
+{
+ this->options = options;
+
+ hex->setChecked( options->hexTile );
+ corre->setChecked( options->corre );
+ rre->setChecked( options->rre );
+ copyRect->setChecked( options->copyrect );
+
+ // TODO
+ hex->setEnabled( false );
+ corre->setEnabled( false );
+ rre->setEnabled( false );
+ // /TODO
+
+ deIconify->setChecked( options->deIconify );
+ bit->setChecked( options->colors256 );
+ shared->setChecked( options->shared );
+ timeBox->setValue( options->updateRate );
+}
+
+KVNCOptionsDlg::~KVNCOptionsDlg()
+{
+}
+
+void KVNCOptionsDlg::accept()
+{
+ options->hexTile = hex->isChecked();
+ options->corre = corre->isChecked();
+ options->rre = rre->isChecked();
+ options->copyrect = copyRect->isChecked();
+ options->deIconify = deIconify->isChecked();
+ options->colors256 = bit->isChecked();
+ options->shared = shared->isChecked();
+ options->updateRate = timeBox->value();
+
+ QDialog::accept();
+}
+
diff --git a/noncore/comm/keypebble/kvncoptionsdlg.h b/noncore/comm/keypebble/kvncoptionsdlg.h
new file mode 100644
index 0000000..a166490
--- a/dev/null
+++ b/noncore/comm/keypebble/kvncoptionsdlg.h
@@ -0,0 +1,30 @@
+// -*- c++ -*-
+
+#ifndef KVNCOPTIONSDIALOG_H
+#define KVNCOPTIONSDIALOG_H
+
+#include "vncoptionsbase.h"
+
+class KRFBOptions;
+
+class KVNCOptionsDlg : public VncOptionsBase
+{
+Q_OBJECT
+
+public:
+ KVNCOptionsDlg( KRFBOptions *options,
+ QWidget *parent = 0, char *name = 0, bool modal = true );
+ ~KVNCOptionsDlg();
+
+protected:
+ void accept();
+
+private:
+ KRFBOptions *options;
+};
+
+#endif // KVNCOPTIONSDIALOG_H
+
+
+
+
diff --git a/noncore/comm/keypebble/main.cpp b/noncore/comm/keypebble/main.cpp
new file mode 100644
index 0000000..a32a368
--- a/dev/null
+++ b/noncore/comm/keypebble/main.cpp
@@ -0,0 +1,18 @@
+
+
+#include <qurl.h>
+#include <qpe/qpeapplication.h>
+#include "kvnc.h"
+
+int main( int argc, char **argv )
+{
+ QPEApplication app( argc, argv );
+ KVNC *view = new KVNC( "Keypebble" );
+ app.showMainWidget( view );
+
+ if ( argc > 1 )
+ view->openURL( QUrl(argv[1]) );
+
+ return app.exec();
+}
+
diff --git a/noncore/comm/keypebble/qpe-keypebble.control b/noncore/comm/keypebble/qpe-keypebble.control
new file mode 100644
index 0000000..75c1b9f
--- a/dev/null
+++ b/noncore/comm/keypebble/qpe-keypebble.control
@@ -0,0 +1,10 @@
+Files: bin/keypebble apps/Applications/keypebble.desktop pics/vnc.png
+Priority: optional
+Section: qpe/applications
+Maintainer: Martin Jones <mjones@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-2
+Depends: qpe-base ($QPE_VERSION)
+Description: VNC Viewer
+ Virtual Network Computing (VNC) viewer
diff --git a/noncore/comm/keypebble/vncauth.c b/noncore/comm/keypebble/vncauth.c
new file mode 100644
index 0000000..dc276bf
--- a/dev/null
+++ b/noncore/comm/keypebble/vncauth.c
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+/*
+ * vncauth.c - Functions for VNC password management and authentication.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include "vncauth.h"
+#include "d3des.h"
+
+
+/*
+ * We use a fixed key to store passwords, since we assume that our local
+ * file system is secure but nonetheless don't want to store passwords
+ * as plaintext.
+ */
+
+unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7};
+
+
+/*
+ * Encrypt a password and store it in a file. Returns 0 if successful,
+ * 1 if the file could not be written.
+ */
+
+int
+vncEncryptAndStorePasswd(char *passwd, char *fname)
+{
+ FILE *fp;
+ int i;
+ unsigned char encryptedPasswd[8];
+
+ if ((fp = fopen(fname,"w")) == NULL) return 1;
+
+ chmod(fname, S_IRUSR|S_IWUSR);
+
+ /* pad password with nulls */
+
+ for (i = 0; i < 8; i++) {
+ if (i < strlen(passwd)) {
+ encryptedPasswd[i] = passwd[i];
+ } else {
+ encryptedPasswd[i] = 0;
+ }
+ }
+
+ /* Do encryption in-place - this way we overwrite our copy of the plaintext
+ password */
+
+ deskey(fixedkey, EN0);
+ des(encryptedPasswd, encryptedPasswd);
+
+ for (i = 0; i < 8; i++) {
+ putc(encryptedPasswd[i], fp);
+ }
+
+ fclose(fp);
+ return 0;
+}
+
+
+/*
+ * Decrypt a password from a file. Returns a pointer to a newly allocated
+ * string containing the password or a null pointer if the password could
+ * not be retrieved for some reason.
+ */
+
+char *
+vncDecryptPasswdFromFile(char *fname)
+{
+ FILE *fp;
+ int i, ch;
+ unsigned char *passwd = (unsigned char *)malloc(9);
+
+ if ((fp = fopen(fname,"r")) == NULL) return NULL;
+
+ for (i = 0; i < 8; i++) {
+ ch = getc(fp);
+ if (ch == EOF) {
+ fclose(fp);
+ return NULL;
+ }
+ passwd[i] = ch;
+ }
+
+ deskey(fixedkey, DE1);
+ des(passwd, passwd);
+
+ passwd[8] = 0;
+
+ return (char *)passwd;
+}
+
+
+/*
+ * Generate CHALLENGESIZE random bytes for use in challenge-response
+ * authentication.
+ */
+
+void
+vncRandomBytes(unsigned char *bytes)
+{
+ int i;
+ unsigned int seed = (unsigned int) time(0);
+
+ srandom(seed);
+ for (i = 0; i < CHALLENGESIZE; i++) {
+ bytes[i] = (unsigned char)(random() & 255);
+ }
+}
+
+
+/*
+ * Encrypt CHALLENGESIZE bytes in memory using a password.
+ */
+
+void
+vncEncryptBytes(unsigned char *bytes, char *passwd)
+{
+ unsigned char key[8];
+ int i;
+
+ /* key is simply password padded with nulls */
+
+ for (i = 0; i < 8; i++) {
+ if (i < strlen(passwd)) {
+ key[i] = passwd[i];
+ } else {
+ key[i] = 0;
+ }
+ }
+
+ deskey(key, EN0);
+
+ for (i = 0; i < CHALLENGESIZE; i += 8) {
+ des(bytes+i, bytes+i);
+ }
+}
diff --git a/noncore/comm/keypebble/vncauth.h b/noncore/comm/keypebble/vncauth.h
new file mode 100644
index 0000000..38b289e
--- a/dev/null
+++ b/noncore/comm/keypebble/vncauth.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ * USA.
+ */
+
+/*
+ * vncauth.h - describes the functions provided by the vncauth library.
+ */
+
+#define MAXPWLEN 8
+#define CHALLENGESIZE 16
+
+extern int vncEncryptAndStorePasswd(char *passwd, char *fname);
+extern char *vncDecryptPasswdFromFile(char *fname);
+extern void vncRandomBytes(unsigned char *bytes);
+extern void vncEncryptBytes(unsigned char *bytes, char *passwd);
diff --git a/noncore/comm/keypebble/vncoptionsbase.ui b/noncore/comm/keypebble/vncoptionsbase.ui
new file mode 100644
index 0000000..d049a79
--- a/dev/null
+++ b/noncore/comm/keypebble/vncoptionsbase.ui
@@ -0,0 +1,270 @@
+<!DOCTYPE UI><UI>
+<class>VncOptionsBase</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>VncOptionsBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>234</width>
+ <height>221</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>VNC Viewer Options</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QTabWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TabWidget3</cstring>
+ </property>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tab</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Data Encoding</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Check for screen updates every:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>timeBox</cstring>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>500</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>1</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Milliseconds</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>bit</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Request 8-bit session</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>deIconify</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Raise on bell</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>shared</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Request shared session</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tab</cstring>
+ </property>
+ <attribute>
+ <name>title</name>
+ <string>Connection</string>
+ </attribute>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>hex</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Hextile encoding</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>corre</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>CoRRE encoding</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>rre</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>false</bool>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>RRE encoding</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>copyRect</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Copy rectangle encoding</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer3</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/noncore/games/chess/Makefile.in b/noncore/games/chess/Makefile.in
new file mode 100644
index 0000000..7354d76
--- a/dev/null
+++ b/noncore/games/chess/Makefile.in
@@ -0,0 +1,134 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) -DQCONFIG=\"qpe\"
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) -DQCONFIG=\"qpe\"
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = chess
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = chess.h
+SOURCES = chess.cpp \
+ main.cpp
+OBJECTS = chess.o \
+ main.o \
+ mainwindow.o
+INTERFACES = mainwindow.ui
+UICDECLS = mainwindow.h
+UICIMPLS = mainwindow.cpp
+SRCMOC = moc_chess.cpp \
+ moc_mainwindow.cpp
+OBJMOC = moc_chess.o \
+ moc_mainwindow.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake chess.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+chess.o: chess.cpp \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ chess.h
+
+main.o: main.cpp \
+ mainwindow.h
+
+mainwindow.h: mainwindow.ui
+ $(UIC) mainwindow.ui -o $(INTERFACE_DECL_PATH)/mainwindow.h
+
+mainwindow.cpp: mainwindow.ui
+ $(UIC) mainwindow.ui -i mainwindow.h -o mainwindow.cpp
+
+mainwindow.o: mainwindow.cpp \
+ mainwindow.h \
+ mainwindow.ui
+
+moc_chess.o: moc_chess.cpp \
+ chess.h
+
+moc_mainwindow.o: moc_mainwindow.cpp \
+ mainwindow.h
+
+moc_chess.cpp: chess.h
+ $(MOC) chess.h -o moc_chess.cpp
+
+moc_mainwindow.cpp: mainwindow.h
+ $(MOC) mainwindow.h -o moc_mainwindow.cpp
+
+
diff --git a/noncore/games/chess/boardview.cw b/noncore/games/chess/boardview.cw
new file mode 100644
index 0000000..020af96
--- a/dev/null
+++ b/noncore/games/chess/boardview.cw
@@ -0,0 +1,23 @@
+<!DOCTYPE CW><CW>
+<customwidgets>
+ <customwidget>
+ <class>BoardView</class>
+ <header location="global">/home/luke/depot/qpe/chess/chess.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ </sizepolicy>
+ <pixmap>
+ <data format="XPM.GZ" length="4605">789c6dd7d96ee33a1206e0fb7e8aa0ebae31a863c9966d613017d9e3ecce9e0ce6a228c94b6c67f192d83998771f9af517e10493b4daf89a25b258a428f75f7fb61e2ecfb6fefcf56b3697f9b0d82a0632ddfa532e2693d5bffff3afbf7ffd4ed3adf027d94a7fffe3d76ff7b9556c9dbfbe5401ef9bf8d8c464136f9b186ee27513cf9bd8dec47c13d30d74bfb52c3d28cdd322a9058fd6aee7f5a29e047f697bbd96b483573fe2173ffc82fbdbb87fb0762389fdcdd6ee859fe0716ccfd7e6def7fed8c5f1d5c5f77c58c2788959ea70230dfd3982dba9de7f6ff9693b757ee4dbb7f9a3fdf5473d7aea464dfb23fa3e3fdafe319f3d75a3a1edbc0fb7913f9991df8b19f7977081f1ae83c5da89cd8dd0bf34601bffceaced14facfd22c53f36db484f95570a9e3398ed6f1c27ec8c4e239877378d79c85bd4f477089f117d1219ee666c4d7d4cd04fddd98d1de5ebb995abc3ca863fb04467eb26746fc398c7ce5c0aced7c1dade3bfc2983f5766acf7be19f59f466b3d4b752bc1fd9a9f58ffd28311cf6d33f2b9323735ff17752bc17855b4f697c119f2cbcd884fe15cd757d6c711b5ea2dd48766708efd959871ffb319f53c86ad1e67d1fafc89ba9d60bcaf68edffca8ce7ab8033c4b7a2b57e3bc1ae95b7eac1db70091fa9db895a6e61ab472b3af4277730e6cb5d33e69bc3781e6865c6f31ce6d3f6f9b75c881738d3f5e2b119ed27708ef655b4aedf0d6cf5fc50e709f27d84510fb930e3f94a615bdf6bb3f627f7b0cd47f3f5f36d877a5103b67af6cddace23759e20fe00b6e77da016acb77370a6e71df5cc18bf1fadfb610c0bcef304ae6aeab619ef83f57b92f286e5c3cfd1a1de3c803378095bbd9bea98cf305af7430b16d47319adf53f34637daee00af9f7d52ed57c692f5acf7fbdbfc8f3bc113c834be43b35a37d185d84feeed482fd47e77086fdbf0b57d81f75b54b311f8ad6f95e9a319f1adc44fed3689ddf132c589f8e59e385a3b5fdcc8cf1bb30d697a2311eea53a07e1cce7b6948a2f52007676ad956bb14e7e53e6cebb382adff67339eb7a5dac6930f33ce87266cf5388dd6f50ccf83f87a8baed77bb4aed78edaa5c877085738ff3fcdd89f13b58d4f68b7f1e5d48cfd589a118ff10bd49b9ea235fe12aef0fc55669c6fe17c718d42701ececcfafea2118cfb3935e3bcf98cd6f18ecc785fbd99f1beabab4bab77c38cef2b613d5c5908ced357b8c2799aa9637c12ade32dcc787fedc04d7c1fb935e33c7b8cd6f509df578aac10acef02aef0bc76ccbade7caeb6fb656ec6fe1c98f1fc5ec2a82f9f9931bf5ab4e67b0263bf70d80f455956e8efc6acf9d185ba4a51bfb119e779789f97be7f9d1fbda9637b19adf73b33e21fe026ea7162c6f31ad6a7acaad4e9fe1fc1d6be1badf53b36a39e4fb0e5771f1dda257c7fa89a668a76657013b6f509eb5bf99f225bbb3b5fff32b1b0e3c25fffefb3d4288de78a7bdce7010ffdf5cca38dabef7fc73ce1177fcf6b8c77fcc6ef3cf56d6f3ce3392ff8833f79c92bfee26ddef1f1bbbcc785c6f3be8f3be0433ef2b11d3ee6133ee5333ee70bbee42e5ff135dff02ddff13d5388179fc5d4f7f4c08ffcc4354e38e53a3738f39f4d6e719b73ce898958d7a7c74312725450491537a9477d1ad0909e69e4e39b34a609bdf01dbdb2d6abf0fd3ff8e8377aa729cd684e8b704de8833e69e97f57f4e5fbdf8efd3fd30eed724a7bb44f733ff6fa3ae0aebf6be5a30f7d2f473ebe8378f1f1c77442a77416fb3ea70bba0c77f47c465dbaa2eb6ffddfd0adefddfabea37b7aa0477aa21a25beff25a5a17fcbff994a4ea88ebe1b9451d3d734a116b529f7d15df1cbefe71bfbe753ba145af72d224e7ca5f84c4aa9bc7b7edca5f4bfe72f03df3ea485f83b652463bf0a19d765e2df012febfcb9f53d7f79f5f16ff22e5399c95c16f2219f7ec512ffe9eb232bf9fa96ff48b67ddb8eecca9eef719fbb72208772b45ee175fda523c7dff2efcb899cfad57a973339478de672219721ba2b573fea3fe61db9f6792eb9292c37722b77d4926558dbaecfa62ff73eff4eec7fc2d7f2208f612dfde5ef3c44e493cfa523354924953af22fa5e1f7f7adaf9dff4f9d5fcb25aeae7468202d1fdd96dcb123ddcfe179d9f3fbef3a5c95131abbf54fc1fe0deb3771e9a32bd7e35e7cbefc4e757d377043f78c6be4af71f87be25edcab7b73ef6eaaf16eb67e92dddc2ddc87fbf4ff6e9f9ffe73e93f57eecb6dfb081ff7fbbffffcf53f54dd2532</data>
+ </pixmap>
+ <slot access="public">newGame()</slot>
+ <slot access="public">swapSides()</slot>
+ <slot access="public">setTheme(QString)</slot>
+ </customwidget>
+</customwidgets>
+</CW>
diff --git a/noncore/games/chess/chess.cpp b/noncore/games/chess/chess.cpp
new file mode 100644
index 0000000..96a838a
--- a/dev/null
+++ b/noncore/games/chess/chess.cpp
@@ -0,0 +1,358 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+// human is not offered a promotion yet
+
+#include <qcanvas.h>
+#include <qmainwindow.h>
+#include <qlist.h>
+#include <qimage.h>
+#include <qpainter.h>
+#include <qmessagebox.h>
+#include <qregexp.h>
+
+#include <qpe/config.h>
+#include <qpe/resource.h>
+
+#include "chess.h"
+
+#define CHESS_DEBUG
+
+int pieceSize = 40;
+static QVector < QImage > imgList;
+int timeMoves, timeTime;
+
+int BoardView::convertToRank(int r)
+{
+ r = r / pieceSize;
+ if (humanSide == sideWhite)
+ r = 8 - r;
+ else
+ r++;
+ return r;
+}
+
+char BoardView::convertToFile(int f)
+{
+ f = f / pieceSize;
+ if (humanSide == sideWhite)
+ return f + 'a';
+ else
+ return 'h' - f;
+}
+
+int BoardView::convertFromFile(char f)
+{
+ if (humanSide == sideWhite)
+ f = f - 'a';
+ else
+ f = 'h' - f;
+ return f * pieceSize;
+}
+
+int BoardView::convertFromRank(int r)
+{
+ if (humanSide == sideWhite)
+ r = 8 - r;
+ else
+ r--;
+ return r * pieceSize;
+}
+
+// Pieces
+Piece::Piece(QCanvas * canvas, int t):QCanvasRectangle(canvas)
+{
+ type = t;
+ setSize(pieceSize, pieceSize);
+ show();
+}
+
+Piece *BoardView::newPiece(int t, char f, int r)
+{
+ Piece *tmpPiece = new Piece(canvas(), t);
+ tmpPiece->move(convertFromFile(f), convertFromRank(r));
+ list.append(tmpPiece);
+ return tmpPiece;
+}
+
+void BoardView::deletePiece(Piece * p)
+{
+ list.remove(p);
+ canvas()->update();
+}
+
+void Piece::drawShape(QPainter & p)
+{
+ p.drawImage(int (x()), int (y()), *(imgList[type]));
+}
+
+void BoardView::buildImages(QImage theme)
+{
+ imgList.resize(12);
+ int x;
+ int y = 0;
+
+ for (int j = 0; j < 2; j++) {
+ x = 0;
+ for (int i = 0; i < 6; i++) {
+ imgList.insert(i + (j * 6),
+ new QImage(theme.
+ copy(x, y, pieceSize, pieceSize)));
+ x += pieceSize;
+ }
+ y += pieceSize;
+ }
+}
+
+void BoardView::readStdout()
+{
+ QString input( crafty->readStdout() );
+#ifdef CHESS_DEBUG
+ qDebug("received this string from crafty->\n%s\n", input.latin1());
+#endif
+
+ int startPosition = input.find("setboard");
+ if (startPosition != -1)
+ decodePosition(input.remove(0, startPosition + 9));
+
+ if (input.contains("Black mates")) {
+ playingGame = FALSE;
+ emit(showMessage("Black mates"));
+ } else if (input.contains("White mates")) {
+ playingGame = FALSE;
+ emit(showMessage("White mates"));
+ } else if (input.contains(" resigns")) {
+ playingGame = FALSE;
+ emit(showMessage("Computer resigns"));
+ } else if (input.contains("Draw")) {
+ playingGame = FALSE;
+ emit(showMessage("Draw"));
+ }
+}
+
+// this is pretty close to getting done right
+// maybe dont use sprites and just draw a picture
+// there'll be lots of drawing done anyway
+// eg creating pictures for the webpages,
+// and presenting options for promotions
+void BoardView::decodePosition(const QString & t)
+{
+ qDebug("decode copped %s \n", t.latin1());
+
+ int count = 0;
+ int stringPos = 0;
+ for (int file = 0; file < 8; file++) {
+ for (int rank = 0; rank < 8; rank++) {
+ if (count)
+ count--;
+ else {
+ if (t.at(stringPos).isNumber())
+ count = t.at(stringPos).digitValue();
+ else {
+ newPiece(t.at(stringPos).latin1(), 'a' + file,
+ rank + 1);
+ }
+ }
+ }
+ }
+}
+
+void BoardView::undo()
+{
+ crafty->writeToStdin("undo\n");
+ crafty->writeToStdin("savepos\nclock\n");
+}
+
+void BoardView::emitErrorMessage()
+{
+ if (activeSide != humanSide)
+ emit(showMessage("Not your move"));
+ else
+ emit(showMessage("You are not playing a game"));
+}
+
+void BoardView::annotateGame()
+{
+ crafty->
+ writeToStdin
+ ("savegame game.save\nannotateh game.save bw 0 1.0 1\n");
+ emit(showMessage("Annotating game"));
+}
+
+Piece *BoardView::findPiece(char f, int r)
+{
+ QListIterator < Piece > it(list);
+ Piece *tmpPiece;
+ for (; it.current(); ++it) {
+ tmpPiece = it.current();
+ if (convertToRank(tmpPiece->x()) == r
+ && convertToFile(tmpPiece->y()) == f)
+ return tmpPiece;
+ }
+ return 0;
+}
+
+void BoardView::newGame()
+{
+ activeSide = sideWhite;
+ emit(showMessage("New game"));
+ crafty->writeToStdin("new\n");
+ crafty->writeToStdin("savepos\n");
+ crafty->writeToStdin("time " +
+ QString::number(timeMoves) +
+ "/" + QString::number(timeTime) + "\n");
+ activeSide = sideWhite;
+ if (humanSide == sideBlack)
+ crafty->writeToStdin("go\n");
+}
+
+void BoardView::setTheme(QString filename)
+{
+ QImage theme = Resource::loadImage(QString("chess/") + filename);
+ pieceSize = theme.height() / 2;
+ setFrameStyle(QFrame::Plain);
+ setFixedSize(8 * pieceSize, 8 * pieceSize);
+ canvas()->setBackgroundColor(Qt::red);
+ canvas()->resize(8 * pieceSize, 8 * pieceSize);
+ whiteSquare = theme.copy(6 * pieceSize, 0, pieceSize, pieceSize);
+ activeWhiteSquare = theme.copy(7 * pieceSize, 0, pieceSize, pieceSize);
+ blackSquare =
+ theme.copy(6 * pieceSize, pieceSize, pieceSize, pieceSize);
+ activeBlackSquare =
+ theme.copy(7 * pieceSize, pieceSize, pieceSize, pieceSize);
+ buildImages(theme);
+ drawBackgroundImage(QPoint(-1, -1));
+}
+
+
+// sets the bg to the default background image for the current theme
+// also resposible for drawing the "active" marker
+void BoardView::drawBackgroundImage(QPoint activeSquare)
+{
+ bg = QPixmap(8 * pieceSize, 8 * pieceSize);
+ QPainter p(&bg);
+ bool col = FALSE;
+ for (int i = 0; i < 8; i++) {
+ for (int j = 0; j < 8; j++) {
+ QPoint point(i * pieceSize, j * pieceSize);
+ if (col) {
+ if (point.x() == activeSquare.x()
+ && point.y() == activeSquare.y())
+ p.drawImage(point, activeBlackSquare);
+ else
+ p.drawImage(point, blackSquare);
+ col = FALSE;
+ } else {
+ if (point.x() == activeSquare.x()
+ && point.y() == activeSquare.y())
+ p.drawImage(point, activeWhiteSquare);
+ else
+ p.drawImage(point, whiteSquare);
+ col = TRUE;
+ }
+ }
+ col = !col;
+ }
+ canvas()->setBackgroundPixmap(bg);
+ canvas()->update();
+}
+
+
+// Board view widget
+void BoardView::contentsMousePressEvent(QMouseEvent * e)
+{
+ QCanvasItemList cList = canvas()->collisions(e->pos());
+ if (activeSide == humanSide && playingGame) {
+ if (!activePiece) {
+ if (cList.count()) {
+ activePiece = (Piece *) (*(cList.at(0)));
+ drawBackgroundImage(QPoint
+ (activePiece->x(), activePiece->y()));
+ }
+ } else {
+ if (!(activePiece == (Piece *) (*(cList.at(0))))) {
+ char fromFile = convertToFile(activePiece->x());
+ int fromRank = convertToRank(activePiece->y());
+ char toFile = convertToFile(e->pos().x());
+ int toRank = convertToRank(e->pos().y());
+ QString moveS;
+ moveS.append(fromFile);
+ moveS.append(moveS.number(fromRank));
+ moveS.append(toFile);
+ moveS.append(moveS.number(toRank));
+ if ((activePiece->type == wPawn
+ && fromRank == 7 && toRank == 8)
+ || (activePiece->type == bPawn
+ && fromRank == 2 && toRank == 1)) {
+ // offer a promotion
+ emit(showMessage
+ ("you are meant to be offered a promotion here"));
+ char promoteTo = wQueen; // doesnt matter for now
+ moveS.append(promoteTo);
+ moveS.append("\n");
+ crafty->writeToStdin(moveS.latin1());
+ }
+ }
+ activePiece = 0;
+ drawBackgroundImage(QPoint(-1, -1));
+ }
+ }
+
+ else {
+ emitErrorMessage();
+ }
+}
+
+void BoardView::swapSides()
+{
+ if (activeSide == humanSide && playingGame) {
+ humanSide = !humanSide;
+ crafty->writeToStdin("savepos\ngo\n");
+ } else
+ emitErrorMessage();
+}
+
+BoardView::BoardView(QCanvas *c, QWidget *w, const char *name)
+ : QCanvasView(c, w, name) {
+ humanSide = sideWhite;
+ activeSide = sideWhite;
+ playingGame = TRUE;
+ activePiece = 0;
+ list.setAutoDelete(TRUE);
+ setCanvas(new QCanvas());
+ Config c("Chess", Config::User);
+ c.setGroup("Theme");
+ QString theme = c.readEntry("imagefile", "simple-28");
+ setTheme(theme);
+ crafty = new CraftyProcess(this);
+ crafty->addArgument("crafty");
+ if (!crafty->start()) {
+ QMessageBox::critical(0,
+ tr("Could not find crafty chess engine"),
+ tr("Quit"));
+ exit(-1);
+ }
+
+ connect(crafty, SIGNAL(readyReadStdout()), this, SLOT(readStdout()));
+ connect(crafty, SIGNAL(processExited()), this, SLOT(craftyDied()));
+// crafty->writeToStdin("xboard\nics\nkibitz=2\n");
+ newGame();
+}
diff --git a/noncore/games/chess/chess.db b/noncore/games/chess/chess.db
new file mode 100644
index 0000000..b520b30
--- a/dev/null
+++ b/noncore/games/chess/chess.db
@@ -0,0 +1,2 @@
+<!DOCTYPE DB><DB version="1.0">
+</DB>
diff --git a/noncore/games/chess/chess.h b/noncore/games/chess/chess.h
new file mode 100644
index 0000000..067b2f8
--- a/dev/null
+++ b/noncore/games/chess/chess.h
@@ -0,0 +1,128 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+**********************************************************************/
+#ifndef CHESS_H
+#define CHESS_H
+
+#include <qwidget.h>
+#include <qcanvas.h>
+#include <qmainwindow.h>
+#include <qpixmap.h>
+#include <qimage.h>
+#include <qstack.h>
+#include <qvector.h>
+#include <qpe/process.h>
+
+#define wPawn 'P'
+#define wKnight 'N'
+#define wBishop 'B'
+#define wRook 'R'
+#define wQueen 'Q'
+#define wKing 'K'
+#define bPawn 'p'
+#define bKnight 'n'
+#define bBishop 'b'
+#define bRook 'r'
+#define bQueen 'q'
+#define bKing 'k'
+#define NONE N
+
+#define sideWhite 0
+#define sideBlack 1
+
+
+class Piece:public QCanvasRectangle {
+ public:
+ Piece(QCanvas *, int);
+ ~Piece() {
+ };
+
+ char type;
+
+ protected:
+ void drawShape(QPainter &);
+};
+
+
+class CraftyProcess : public Process {
+ public:
+ CraftyProcess(QObject *parent) : Process( parent ) { qDebug("CraftyProcess functions not implemented"); }
+ ~CraftyProcess() { }
+ bool start() { qDebug("CraftyProcess functions not implemented"); return FALSE; }
+ const char *readStdout() { qDebug("CraftyProcess functions not implemented"); return "Blah"; }
+ void writeToStdin(const char *) { qDebug("CraftyProcess functions not implemented"); }
+};
+
+
+class BoardView:public QCanvasView {
+ Q_OBJECT public:
+ BoardView(QCanvas *, QWidget *, const char *);
+ ~BoardView() {
+ };
+
+ protected:
+ void contentsMousePressEvent(QMouseEvent *);
+
+ signals:
+ void showMessage(const QString &);
+
+ public slots:void readStdout();
+ void craftyDied() {
+ qFatal("Crafty died unexpectedly\n");
+ };
+ void newGame();
+ void setTheme(QString);
+ void swapSides();
+ void undo();
+ void annotateGame();
+
+ private:
+ CraftyProcess * crafty;
+ QList < Piece > list;
+ Piece *activePiece;
+
+ void revertLastMove();
+ void emitErrorMessage();
+ void drawBackgroundImage(QPoint activeSquare);
+
+ void buildImages(QImage);
+
+ char convertToFile(int);
+ int convertToRank(int);
+ int convertFromFile(char);
+ int convertFromRank(int);
+
+ void decodePosition(const QString & t);
+
+ Piece *findPiece(char f, int r);
+ Piece *newPiece(int, char, int);
+ void deletePiece(Piece *);
+
+ int pieceSize;
+ QPixmap bg;
+ QImage whiteSquare, blackSquare, activeWhiteSquare, activeBlackSquare;
+
+ bool humanSide;
+ bool activeSide;
+ bool playingGame;
+};
+
+#endif
diff --git a/noncore/games/chess/chess.pro b/noncore/games/chess/chess.pro
new file mode 100644
index 0000000..f6650a0
--- a/dev/null
+++ b/noncore/games/chess/chess.pro
@@ -0,0 +1,14 @@
+SOURCES += chess.cpp main.cpp
+HEADERS += chess.h
+DESTDIR = ../bin
+TARGET = chess
+DEPENDPATH += $(QPEDIR)/include
+INTERFACES = mainwindow.ui
+IMAGES = images/new.png images/repeat.png images/txt.png images/back.png
+TEMPLATE =app
+CONFIG += qt warn_on release
+INCLUDEPATH += $(QPEDIR)/include
+LIBS += -lqpe
+DBFILE = chess.db
+LANGUAGE = C++
+CPP_ALWAYS_CREATE_SOURCE = TRUE
diff --git a/noncore/games/chess/main.cpp b/noncore/games/chess/main.cpp
new file mode 100644
index 0000000..a56913f
--- a/dev/null
+++ b/noncore/games/chess/main.cpp
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+** $Id$
+**
+**********************************************************************/
+#include <qpe/qpeapplication.h>
+#include <qpe/qpetoolbar.h>
+#include <qmainwindow.h>
+#include <qcanvas.h>
+#include "chess.h"
+
+
+class CanvasMainWindow : public QMainWindow {
+public:
+ CanvasMainWindow(QWidget* parent=0, const char* name=0, WFlags f=0)
+ : QMainWindow(parent,name,f), canvas(232, 258) {
+ view = new BoardView(&canvas, this, 0);
+ setToolBarsMovable( FALSE );
+ QPEToolBar* toolbar = new QPEToolBar(this);
+ toolbar->setHorizontalStretchable( TRUE );
+ }
+
+private:
+ QCanvas canvas;
+ BoardView *view;
+};
+
+
+int main( int argc, char **argv ) {
+ QPEApplication a(argc,argv);
+ CanvasMainWindow *mw = new CanvasMainWindow();
+ a.showMainWidget( mw );
+ return a.exec();
+}
+
diff --git a/noncore/games/chess/mainwindow.ui b/noncore/games/chess/mainwindow.ui
new file mode 100644
index 0000000..dc3ae0f
--- a/dev/null
+++ b/noncore/games/chess/mainwindow.ui
@@ -0,0 +1,220 @@
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>MainWindow</class>
+<widget class="QMainWindow">
+ <property name="name">
+ <cstring>MainWindow</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>256</width>
+ <height>338</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Chess</string>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>236</y>
+ <width>221</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>TextLabel1</string>
+ </property>
+ </widget>
+ <widget class="BoardView">
+ <property name="name">
+ <cstring>ChessBoard</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>224</width>
+ <height>224</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>224</width>
+ <height>224</height>
+ </size>
+ </property>
+ </widget>
+</widget>
+<menubar>
+ <property name="name">
+ <cstring>menubar</cstring>
+ </property>
+ <item text="Game" name="PopupMenu_2">
+ <action name="newGame"/>
+ <action name="annotateGame"/>
+ </item>
+ <item text="Position" name="PopupMenu_3">
+ <action name="swapSides"/>
+ <action name="undo"/>
+ </item>
+</menubar>
+<toolbars>
+</toolbars>
+<customwidgets>
+ <customwidget>
+ <class>BoardView</class>
+ <header location="global">/home/luke/depot/qpe/chess/chess.h</header>
+ <sizehint>
+ <width>-1</width>
+ <height>-1</height>
+ </sizehint>
+ <container>0</container>
+ <sizepolicy>
+ <hordata>5</hordata>
+ <verdata>5</verdata>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ <pixmap>image0</pixmap>
+ <signal>showMessage(const QString&amp;)</signal>
+ <slot access="public" specifier="">newGame()</slot>
+ <slot access="public" specifier="">swapSides()</slot>
+ <slot access="public" specifier="">setTheme(QString)</slot>
+ <slot access="public" specifier="">undo()</slot>
+ <slot access="public" specifier="">annotateGame()</slot>
+ </customwidget>
+</customwidgets>
+<actions>
+ <actiongroup>
+ <property name="name">
+ <cstring>gameActions</cstring>
+ </property>
+ <property name="text">
+ <string>ActionGroup</string>
+ </property>
+ <property name="usesDropDown">
+ <bool>false</bool>
+ </property>
+ <action>
+ <property name="name">
+ <cstring>newGame</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>new.png</iconset>
+ </property>
+ <property name="text">
+ <string>New Game</string>
+ </property>
+ <property name="menuText">
+ <string>New Game</string>
+ </property>
+ <property name="toolTip">
+ <string>New Game</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>swapSides</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>repeat.png</iconset>
+ </property>
+ <property name="text">
+ <string>Swap sides</string>
+ </property>
+ <property name="toolTip">
+ <string>Swap sides</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>annotateGame</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>txt.png</iconset>
+ </property>
+ <property name="text">
+ <string>Annotate game</string>
+ </property>
+ <property name="toolTip">
+ <string>Annotate game</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>undo</cstring>
+ </property>
+ <property name="iconSet">
+ <iconset>back.png</iconset>
+ </property>
+ <property name="text">
+ <string>Undo move</string>
+ </property>
+ <property name="toolTip">
+ <string>Undo move</string>
+ </property>
+ </action>
+ <action>
+ <property name="name">
+ <cstring>saveGame</cstring>
+ </property>
+ <property name="text">
+ <string>Action</string>
+ </property>
+ </action>
+ </actiongroup>
+</actions>
+<images>
+ <image name="image0">
+ <data format="XPM.GZ" length="3456">789ce5d35d5313491406e07b7e458abea3b68e99cfccd4d65ee0079ac8a720a2d65ef474cf2424229004152dffbba7cf795941182a59bcd8aa6548524fbafb9d9ed3278fd63a47bb5b9db5472bb3b99d1fbb8e1bd96967cd5f9c9c5cbefffbaf6f2bab49dce1ff5eaf13affeb1b24aa6e33aa62b7f620fa7b01517ec423c850bb571b0c3f8bbe0a8db7591ae1fa9c3257e0aa7b0ac8f0ab6aeefc305bc073b783d38ee462ed6f5953a5ce20d38859f894b7629de820bb519c20ee3af829328764924be50275d7806a76a732c2ed9ba7e08176a33811d2cf548a3c4a59a97a9d3aedad4708af153b1655bf14bb880bfc00e3e0fcee2ac9be9f926629b65998eefc21e3e0acee3cce73affb33acfe037ff58e737629b97f026ece128b897e4be9788bfaa7b119cc319fc445cb12bf1215caa8d813d2cfd59243d5fe8faaeb82ab242d7d770097f803d2ce751a66554a6e28f70a636d24fa5633b191fc325fc1cf6f049b04d6d6435ef139cc16fc5ce5aabf3b7e11ade09ae525b573a7f5f5dc5f00bb1aff2ca8b07b0559b315c63fc20d86555ed32f15ced62f812ce61e95fe7d99a67610b3770ada65eb0e776f1bafe4c5cb36bf16bd8c245709dd7719d8b5371cddfc8b821d8aa290e6e78b4d1f9a5ba89e1c7e2a6b14d13bc37879b2bdf7f91b9fffadf65d8df90519123ffc08c9a1a1ad2a86d3ff767d0318d69421fe8843ed229a72c9d4167742ef79ed28ce69c7471f713b567d027beef675ea733bfd0257da5f5bb52da32e8313de18ca7f48c67add30657f539bde07df597c818d04bdae41a84593557654a5bb44d3bb44b7bbfeea53563c2ab467c1a61569f77123e5fd13e1d704a7533a535e3351dd21b3afa65dfeb9cf09677f86ec19a7679e64cea71f3daa788ebb45846cccf93dcaae1942bbb793be38e339ff2b34f28e5f7ab6f4e29e33a8c68f3f6dd5a320cdf29a7deb58c824aeeb31d434b64f48de1351b5736b6fd17d192e1a9321577d5cfe73e5c32c31ac79db16dfccf3e30f55219533e8b53634c73bd3bcc90e285332cf7f21177f51977d9f046775d2e9e6146fc8bbdabcab816c89872270f1e98e1f909c6b4c5cf7f71f5e2f7637e9fe9e742f5e8d3399feb3e0dcc9877744083f613693d174b23befbcc4ccc84b2f0fa1719d7d37c783d28a3b58affd18cef7faefc007d894af5</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>newGame</sender>
+ <signal>activated()</signal>
+ <receiver>ChessBoard</receiver>
+ <slot>newGame()</slot>
+ </connection>
+ <connection>
+ <sender>swapSides</sender>
+ <signal>activated()</signal>
+ <receiver>ChessBoard</receiver>
+ <slot>swapSides()</slot>
+ </connection>
+ <connection>
+ <sender>annotateGame</sender>
+ <signal>activated()</signal>
+ <receiver>ChessBoard</receiver>
+ <slot>annotateGame()</slot>
+ </connection>
+ <connection>
+ <sender>undo</sender>
+ <signal>activated()</signal>
+ <receiver>ChessBoard</receiver>
+ <slot>undo()</slot>
+ </connection>
+ <connection>
+ <sender>ChessBoard</sender>
+ <signal>showMessage(const QString&amp;)</signal>
+ <receiver>TextLabel1</receiver>
+ <slot>setText(const QString&amp;)</slot>
+ </connection>
+</connections>
+<pixmapinproject/>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/noncore/games/chess/pieces.png b/noncore/games/chess/pieces.png
new file mode 100644
index 0000000..4baeb4a
--- a/dev/null
+++ b/noncore/games/chess/pieces.png
Binary files differ
diff --git a/noncore/games/chess/qpe-chess.control b/noncore/games/chess/qpe-chess.control
new file mode 100644
index 0000000..2a7d2d2
--- a/dev/null
+++ b/noncore/games/chess/qpe-chess.control
@@ -0,0 +1,9 @@
+Files: bin/chess apps/Games/chess.desktop
+Priority: optional
+Section: qpe/games
+Maintainer: Luke Graham <luke@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Crafty GUI
+ A GUI for the crafty chess engine
diff --git a/noncore/games/chess/simple-l.png b/noncore/games/chess/simple-l.png
new file mode 100644
index 0000000..908e2e1
--- a/dev/null
+++ b/noncore/games/chess/simple-l.png
Binary files differ
diff --git a/noncore/games/fifteen/.cvsignore b/noncore/games/fifteen/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/noncore/games/fifteen/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/noncore/games/fifteen/Makefile.in b/noncore/games/fifteen/Makefile.in
new file mode 100644
index 0000000..23c7334
--- a/dev/null
+++ b/noncore/games/fifteen/Makefile.in
@@ -0,0 +1,118 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = fifteen
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = fifteen.h
+SOURCES = fifteen.cpp \
+ main.cpp
+OBJECTS = fifteen.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_fifteen.cpp
+OBJMOC = moc_fifteen.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake fifteen.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+fifteen.o: fifteen.cpp \
+ fifteen.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h
+
+main.o: main.cpp \
+ fifteen.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_fifteen.o: moc_fifteen.cpp \
+ fifteen.h
+
+moc_fifteen.cpp: fifteen.h
+ $(MOC) fifteen.h -o moc_fifteen.cpp
+
+
diff --git a/noncore/games/fifteen/fifteen.cpp b/noncore/games/fifteen/fifteen.cpp
new file mode 100644
index 0000000..293cd65
--- a/dev/null
+++ b/noncore/games/fifteen/fifteen.cpp
@@ -0,0 +1,364 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "fifteen.h"
+
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qvbox.h>
+#include <qaction.h>
+#include <qlayout.h>
+#include <qpainter.h>
+#include <qpopupmenu.h>
+#include <qmessagebox.h>
+#include <qpe/qpetoolbar.h>
+#include <qpe/qpemenubar.h>
+#include <qstringlist.h>
+#include <qapplication.h>
+
+#include <stdlib.h>
+#include <time.h>
+
+FifteenMainWindow::FifteenMainWindow(QWidget *parent, const char* name)
+ : QMainWindow( parent, name )
+{
+ // random seed
+ srand(time(0));
+
+ setToolBarsMovable( FALSE );
+ QVBox *vbox = new QVBox( this );
+ PiecesTable *table = new PiecesTable( vbox );
+ setCentralWidget(vbox);
+
+ QPEToolBar *toolbar = new QPEToolBar(this);
+ toolbar->setHorizontalStretchable( TRUE );
+ addToolBar(toolbar);
+
+ QPEMenuBar *menubar = new QPEMenuBar( toolbar );
+ menubar->setMargin(0);
+
+ QPopupMenu *game = new QPopupMenu( this );
+
+ QWidget *spacer = new QWidget( toolbar );
+ spacer->setBackgroundMode( PaletteButton );
+ toolbar->setStretchableWidget( spacer );
+
+ QAction *a = new QAction( tr( "Randomize" ), Resource::loadPixmap( "new" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), table, SLOT( slotRandomize() ) );
+ a->addTo( game );
+ a->addTo( toolbar );
+
+ a = new QAction( tr( "Solve" ), Resource::loadPixmap( "repeat" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), table, SLOT( slotReset() ) );
+ a->addTo( game );
+ a->addTo( toolbar );
+
+ menubar->insertItem( tr( "Game" ), game );
+}
+
+PiecesTable::PiecesTable(QWidget* parent, const char* name )
+ : QTableView(parent, name), _menu(0), _randomized(false)
+{
+ // setup table view
+ setFrameStyle(StyledPanel | Sunken);
+ setBackgroundMode(NoBackground);
+ setMouseTracking(true);
+
+ setNumRows(4);
+ setNumCols(4);
+
+ // init arrays
+ initMap();
+ readConfig();
+ initColors();
+
+ // set font
+ QFont f = font();
+ f.setPixelSize(18);
+ f.setBold( TRUE );
+ setFont(f);
+}
+
+PiecesTable::~PiecesTable()
+{
+ writeConfig();
+}
+
+void PiecesTable::writeConfig()
+{
+ Config cfg("Fifteen");
+ cfg.setGroup("Game");
+ QStringList map;
+ for (unsigned int i = 0; i < 16; i++)
+ map.append( QString::number( _map[i] ) );
+ cfg.writeEntry("Map", map, '-');
+ cfg.writeEntry("Randomized", _randomized );
+}
+
+void PiecesTable::readConfig()
+{
+ Config cfg("Fifteen");
+ cfg.setGroup("Game");
+ QStringList map = cfg.readListEntry("Map", '-');
+ _randomized = cfg.readBoolEntry( "Randomized", FALSE );
+ unsigned int i = 0;
+ for ( QStringList::Iterator it = map.begin(); it != map.end(); ++it ) {
+ _map[i] = (*it).toInt();
+ i++;
+ if ( i > 15 ) break;
+ }
+}
+
+void PiecesTable::paintCell(QPainter *p, int row, int col)
+{
+ int w = cellWidth();
+ int h = cellHeight();
+ int x2 = w - 1;
+ int y2 = h - 1;
+
+ int number = _map[col + row * numCols()] + 1;
+
+ // draw cell background
+ if(number == 16)
+ p->setBrush(colorGroup().background());
+ else
+ p->setBrush(_colors[number-1]);
+ p->setPen(NoPen);
+ p->drawRect(0, 0, w, h);
+
+ // draw borders
+ if (height() > 40) {
+ p->setPen(colorGroup().text());
+ if(col < numCols()-1)
+ p->drawLine(x2, 0, x2, y2); // right border line
+
+ if(row < numRows()-1)
+ p->drawLine(0, y2, x2, y2); // bottom boder line
+ }
+
+ // draw number
+ if (number == 16) return;
+ p->setPen(black);
+ p->drawText(0, 0, x2, y2, AlignHCenter | AlignVCenter, QString::number(number));
+}
+
+void PiecesTable::resizeEvent(QResizeEvent *e)
+{
+ QTableView::resizeEvent(e);
+
+ setCellWidth(contentsRect().width()/ numRows());
+ setCellHeight(contentsRect().height() / numCols());
+}
+
+void PiecesTable::initColors()
+{
+ _colors.resize(numRows() * numCols());
+ for (int r = 0; r < numRows(); r++)
+ for (int c = 0; c < numCols(); c++)
+ _colors[c + r *numCols()] = QColor(255 - 70 * c,255 - 70 * r, 150);
+}
+
+void PiecesTable::initMap()
+{
+ _map.resize(16);
+ for (unsigned int i = 0; i < 16; i++)
+ _map[i] = i;
+
+ _randomized = false;
+}
+
+void PiecesTable::randomizeMap()
+{
+ initMap();
+ _randomized = true;
+ // find the free position
+ int pos = _map.find(15);
+
+ int move = 0;
+ while ( move < 333 ) {
+
+ int frow = pos / numCols();
+ int fcol = pos - frow * numCols();
+
+ // find click position
+ int row = rand()%4;
+ int col = rand()%4;
+
+ // sanity check
+ if ( row < 0 || row >= numRows() ) continue;
+ if ( col < 0 || col >= numCols() ) continue;
+ if ( row != frow && col != fcol ) continue;
+
+ move++;
+
+ // rows match -> shift pieces
+ if(row == frow) {
+
+ if (col < fcol) {
+ for(int c = fcol; c > col; c--) {
+ _map[c + row * numCols()] = _map[ c-1 + row *numCols()];
+ }
+ }
+ else if (col > fcol) {
+ for(int c = fcol; c < col; c++) {
+ _map[c + row * numCols()] = _map[ c+1 + row *numCols()];
+ }
+ }
+ }
+ // cols match -> shift pieces
+ else if (col == fcol) {
+
+ if (row < frow) {
+ for(int r = frow; r > row; r--) {
+ _map[col + r * numCols()] = _map[ col + (r-1) *numCols()];
+ }
+ }
+ else if (row > frow) {
+ for(int r = frow; r < row; r++) {
+ _map[col + r * numCols()] = _map[ col + (r+1) *numCols()];
+ }
+ }
+ }
+ // move free cell to click position
+ _map[pos=(col + row * numCols())] = 15;
+ repaint();
+ }
+}
+
+void PiecesTable::checkwin()
+{
+ if(!_randomized) return;
+
+ int i;
+ for (i = 0; i < 16; i++)
+ if(i != _map[i])
+ break;
+
+ if (i == 16) {
+ QMessageBox::information(this, tr("Fifteen Pieces"),
+ tr("Congratulations!\nYou win the game!"));
+ _randomized = FALSE;
+ }
+
+}
+
+void PiecesTable::slotRandomize()
+{
+ randomizeMap();
+}
+
+void PiecesTable::slotReset()
+{
+ initMap();
+ repaint();
+}
+
+void PiecesTable::mousePressEvent(QMouseEvent* e)
+{
+ QTableView::mousePressEvent(e);
+
+ if (e->button() == RightButton) {
+
+ // setup RMB pupup menu
+ if(!_menu) {
+ _menu = new QPopupMenu(this);
+ _menu->insertItem(tr("R&andomize Pieces"), mRandomize);
+ _menu->insertItem(tr("&Reset Pieces"), mReset);
+ _menu->adjustSize();
+ }
+
+ // execute RMB popup and check result
+ switch(_menu->exec(mapToGlobal(e->pos()))) {
+ case mRandomize:
+ randomizeMap();
+ break;
+ case mReset:
+ initMap();
+ repaint();
+ break;
+ default:
+ break;
+ }
+ }
+ else {
+ // GAME LOGIC
+
+ // find the free position
+ int pos = _map.find(15);
+ if(pos < 0) return;
+
+ int frow = pos / numCols();
+ int fcol = pos - frow * numCols();
+
+ // find click position
+ int row = findRow(e->y());
+ int col = findCol(e->x());
+
+ // sanity check
+ if (row < 0 || row >= numRows()) return;
+ if (col < 0 || col >= numCols()) return;
+ if ( row != frow && col != fcol ) return;
+
+ // valid move?
+ if(row != frow && col != fcol) return;
+
+ // rows match -> shift pieces
+ if(row == frow) {
+
+ if (col < fcol) {
+ for(int c = fcol; c > col; c--) {
+ _map[c + row * numCols()] = _map[ c-1 + row *numCols()];
+ updateCell(row, c, false);
+ }
+ }
+ else if (col > fcol) {
+ for(int c = fcol; c < col; c++) {
+ _map[c + row * numCols()] = _map[ c+1 + row *numCols()];
+ updateCell(row, c, false);
+ }
+ }
+ }
+ // cols match -> shift pieces
+ else if (col == fcol) {
+
+ if (row < frow) {
+ for(int r = frow; r > row; r--) {
+ _map[col + r * numCols()] = _map[ col + (r-1) *numCols()];
+ updateCell(r, col, false);
+ }
+ }
+ else if (row > frow) {
+ for(int r = frow; r < row; r++) {
+ _map[col + r * numCols()] = _map[ col + (r+1) *numCols()];
+ updateCell(r, col, false);
+ }
+ }
+ }
+ // move free cell to click position
+ _map[col + row * numCols()] = 15;
+ updateCell(row, col, false);
+
+ // check if the player wins with this move
+ checkwin();
+ }
+}
diff --git a/noncore/games/fifteen/fifteen.h b/noncore/games/fifteen/fifteen.h
new file mode 100644
index 0000000..703a8a7
--- a/dev/null
+++ b/noncore/games/fifteen/fifteen.h
@@ -0,0 +1,83 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef __fifteenapplet_h__
+#define __fifteenapplet_h__
+
+#include <qmainwindow.h>
+#include <qtableview.h>
+#include <qarray.h>
+
+class QPopupMenu;
+
+class PiecesTable : public QTableView
+{
+ Q_OBJECT
+
+ public:
+ PiecesTable(QWidget* parent = 0, const char* name = 0);
+ ~PiecesTable();
+
+ protected slots:
+ void slotRandomize();
+ void slotReset();
+
+ protected:
+ void resizeEvent(QResizeEvent*);
+ void mousePressEvent(QMouseEvent*);
+
+ void paintCell(QPainter *, int row, int col);
+
+ void initMap();
+ void initColors();
+ void randomizeMap();
+ void checkwin();
+ void readConfig();
+ void writeConfig();
+
+ private:
+ QArray<int> _map;
+ QArray<QColor> _colors;
+ QPopupMenu *_menu;
+ bool _randomized;
+
+ enum MenuOp { mRandomize = 1, mReset = 2 };
+};
+
+class FifteenWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ FifteenWidget(QWidget *parent = 0, const char *name = 0);
+
+private:
+ PiecesTable *_table;
+};
+
+class FifteenMainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ FifteenMainWindow(QWidget *parent=0, const char* name=0);
+};
+
+#endif
diff --git a/noncore/games/fifteen/fifteen.pro b/noncore/games/fifteen/fifteen.pro
new file mode 100644
index 0000000..167f4f8
--- a/dev/null
+++ b/noncore/games/fifteen/fifteen.pro
@@ -0,0 +1,10 @@
+DESTDIR = ../bin
+TEMPLATE = app
+CONFIG = qt warn_on release
+HEADERS = fifteen.h
+SOURCES = fifteen.cpp \
+ main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+TARGET = fifteen
diff --git a/noncore/games/fifteen/main.cpp b/noncore/games/fifteen/main.cpp
new file mode 100644
index 0000000..4838a36
--- a/dev/null
+++ b/noncore/games/fifteen/main.cpp
@@ -0,0 +1,33 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "fifteen.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char ** argv)
+{
+ QPEApplication app( argc, argv );
+
+ FifteenMainWindow mw;
+ mw.setCaption( FifteenMainWindow::tr("Fifteen Pieces") );
+ app.showMainWidget( &mw );
+ return app.exec();
+}
diff --git a/noncore/games/fifteen/qpe-fifteen.control b/noncore/games/fifteen/qpe-fifteen.control
new file mode 100644
index 0000000..d77eb32
--- a/dev/null
+++ b/noncore/games/fifteen/qpe-fifteen.control
@@ -0,0 +1,11 @@
+Files: bin/fifteen apps/Games/fifteen.desktop pics/Fifteen.png
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-4
+Depends: qpe-base ($QPE_VERSION)
+Description: Fifteen pieces game
+ A game for the Qtopia environment
+.
diff --git a/noncore/games/go/.cvsignore b/noncore/games/go/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/noncore/games/go/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/noncore/games/go/Makefile.in b/noncore/games/go/Makefile.in
new file mode 100644
index 0000000..27304f1
--- a/dev/null
+++ b/noncore/games/go/Makefile.in
@@ -0,0 +1,158 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = go
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = amigo.h \
+ go.h \
+ goplayutils.h \
+ gowidget.h
+SOURCES = amigo.c \
+ goplayer.c \
+ goplayutils.c \
+ killable.c \
+ gowidget.cpp \
+ main.cpp
+OBJECTS = amigo.o \
+ goplayer.o \
+ goplayutils.o \
+ killable.o \
+ gowidget.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_gowidget.cpp
+OBJMOC = moc_gowidget.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake go.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+amigo.o: amigo.c \
+ go.h \
+ goplayutils.h \
+ amigo.h
+
+goplayer.o: goplayer.c \
+ go.h \
+ goplayutils.h \
+ amigo.h
+
+goplayutils.o: goplayutils.c \
+ goplayutils.h \
+ amigo.h \
+ go.h
+
+killable.o: killable.c \
+ go.h \
+ goplayutils.h \
+ amigo.h
+
+gowidget.o: gowidget.cpp \
+ gowidget.h \
+ amigo.h \
+ go.h \
+ goplayutils.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h
+
+main.o: main.cpp \
+ gowidget.h \
+ amigo.h \
+ go.h \
+ goplayutils.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_gowidget.o: moc_gowidget.cpp \
+ gowidget.h \
+ amigo.h \
+ go.h \
+ goplayutils.h
+
+moc_gowidget.cpp: gowidget.h
+ $(MOC) gowidget.h -o moc_gowidget.cpp
+
+
diff --git a/noncore/games/go/README b/noncore/games/go/README
new file mode 100644
index 0000000..c6fa1f5
--- a/dev/null
+++ b/noncore/games/go/README
@@ -0,0 +1,3 @@
+This Go player For Qtopia is based on Xamigo, which in turn was
+based on Amigo. The original README files are included as README.XAMIGO
+and README.AMIGO.
diff --git a/noncore/games/go/README.AMIGO b/noncore/games/go/README.AMIGO
new file mode 100644
index 0000000..03978e7
--- a/dev/null
+++ b/noncore/games/go/README.AMIGO
@@ -0,0 +1,42 @@
+ This is version 1.0 of AmiGo --- a Go board and player for the Amiga.
+The Amiga interface and board manager were written by Todd R. Johnson.
+The player is a C port of a Pascal player written by Stoney Ballard.
+The interface allows you to play human vs. human, human vs. Amiga, or
+Amiga vs. Amiga.
+
+ The board manager and player could both use some work. Currently,
+you cannot save/load games, take back a move, or automatically score a
+game. It is also limited to a 19 by 19 board. I'm releasing AmiGo
+now because 1) I'm in the final phases of my dissertation and probably
+won't have much time to do any further work on AmiGo, and 2) a lot of
+people have been asking for an Amiga Go player. I am also releasing
+all of the source code so that others can add to and modify AmiGo.
+Note that all of my code in this release is public domain, while the
+ported go player retains the original copyright.
+
+ If you distribute AmiGo, I urge you to include the source
+code. If anyone makes changes, I would appreciate a copy. In fact, I
+am willing to act as a clearinghouse for AmiGo changes.
+
+Todd R. Johnson
+tj@cis.ohio-state.edu
+8/8/89
+
+Here is the message attached to the original USENET posting of Stoney
+Ballard's Pascal code. Note that the board manager mentioned here is
+not included in this distribution.
+
+This go board manager and rudimentary go player was written by
+Stoney Ballard at Perq Systems in 1983-1984. It is written in
+Perq Pascal and utilizes some Perq libraries for I/O. The code
+is offered here if someone is interested to convert it to Unix.
+
+The wonderful part about it is that a game is recorded as a tree
+and can be played forward or backward, branching at any point
+where there were alternate moves.
+
+For some time, this program was also used to generate the go
+boards displayed in the American Go Journal. For this it used
+some large font digits which are now lost.
+
+Fred Hansen
diff --git a/noncore/games/go/README.XAMIGO b/noncore/games/go/README.XAMIGO
new file mode 100644
index 0000000..219b25f
--- a/dev/null
+++ b/noncore/games/go/README.XAMIGO
@@ -0,0 +1,26 @@
+
+ Xamigo 1.1
+
+This is an alpha release of xamigo --- a port (read: quick hack) of the
+Amiga Go program AmiGo. I don't have time to get it real nice now,
+but will spend some more time on it when my thesis is out of the way.
+Sadly this is the second time I've said that :-)
+
+The `readme' from the original distribution is included as README.AMIGO
+
+An Imakefile is included, so you should be able to type
+ xmkmf
+ make
+to build xamigo. Let me know if you have problems with the Imakefile,
+preferably with fixes :-)
+
+You *have* to install the app-defaults file (Xamigo.ad) before you use
+xamigo. This should either go in /usr/lib/X11/app-defaults,
+or in your own app-defaults directory, as file Xamigo (ie lose the '.ad')
+If you do the latter, you have to:
+ setenv XAPPLRESDIR <full path of your app-defaults directory>
+
+Feel free to mail me any comments and suggestions for improvements.
+
+Neil
+neilb@scs.leeds.ac.uk
diff --git a/noncore/games/go/amigo.c b/noncore/games/go/amigo.c
new file mode 100644
index 0000000..cd61013
--- a/dev/null
+++ b/noncore/games/go/amigo.c
@@ -0,0 +1,656 @@
+/* Go started 4/17/88 by Todd R. Johnson */
+/* 8/8/89 cleaned up for first release */
+/* Public Domain */
+
+#include "go.h"
+#include "goplayutils.h"
+#include "amigo.h"
+
+
+extern char *playReason;
+extern short playLevel, showTrees;
+
+struct bRec goboard[19][19]; /*-- The main go board --*/
+
+struct Group GroupList[MAXGROUPS]; /*-- The list of Groups --*/
+short DeletedGroups[4]; /*-- Codes of deleted groups --*/
+
+short GroupCount = 0; /*-- The total number of groups --*/
+short DeletedGroupCount; /*-- The total number of groups --*/
+ /*-- deleted on a move --*/
+short ko, koX, koY;
+short blackTerritory,whiteTerritory;
+short blackPrisoners, whitePrisoners;
+short showMoveReason = FALSE,
+ groupInfo = FALSE,
+ whitePassed = FALSE,
+ blackPassed = FALSE;
+
+
+/* Arrays for use when checking around a point */
+short xVec[4] = {0, 1, 0, -1};
+short yVec[4] = {-1, 0, 1, 0};
+
+short
+member(group, grouplist, cnt)
+ short group;
+ short grouplist[4];
+ short cnt;
+{
+ unsigned short i;
+
+
+ for (i = 0; i < cnt; i++)
+ if (grouplist[i] == group)
+ return TRUE;
+ return FALSE;
+}
+
+/* Does a stone at x, y connect to any groups of color? */
+short
+Connect( color, x, y, fGroups, fCnt, eGroups, eCnt)
+ enum bVal color;
+ short x, y;
+ short fGroups[4], eGroups[4];
+ short *fCnt, *eCnt;
+{
+ unsigned short point = 0;
+ short tx, ty, total = 0;
+ enum bVal opcolor = WHITE;
+
+
+ *fCnt = 0;
+ *eCnt = 0;
+ if (color == WHITE)
+ opcolor = BLACK;
+ for (point = 0; point <= 3; point++ )
+ {
+ tx = x + xVec[point];
+ ty = y + yVec[point];
+ if (!LegalPoint(tx,ty))
+ continue;
+ if (goboard[tx][ty].Val == color)
+ {
+ total++;
+ if (!member(goboard[tx][ty].GroupNum, fGroups, *fCnt))
+ fGroups[(*fCnt)++] = goboard[tx][ty].GroupNum;
+ }
+ else if (goboard[tx][ty].Val == opcolor)
+ {
+ total++;
+ if (!member(goboard[tx][ty].GroupNum, eGroups, *eCnt))
+ eGroups[(*eCnt)++] = goboard[tx][ty].GroupNum;
+ }
+ }
+ return total;
+}
+
+/* Returns the maximum number of liberties for a given intersection */
+short
+Maxlibs(x, y)
+ short x, y;
+{
+ short cnt = 4;
+
+
+ if (x == 0 || x == 18)
+ cnt--;
+ if (y == 0 || y == 18)
+ cnt--;
+ return cnt;
+}
+
+DeleteGroupFromStone(x,y)
+ short x,y;
+{
+ if (goboard[x][y].Val != EMPTY)
+ GroupCapture(goboard[x][y].GroupNum);
+}
+
+/* Determine whether x, y is suicide for color */
+short
+Suicide(color, x, y)
+ enum bVal color;
+ short x, y;
+{
+ enum bVal opcolor = BLACK;
+ short friendlycnt, friendlygroups[4],
+ enemycnt, enemygroups[4],
+ total;
+ short maxlibs, i, libcnt = 0;
+
+
+ if (color == BLACK)
+ opcolor = WHITE;
+ maxlibs = Maxlibs( x, y);
+ total = Connect(color, x, y, friendlygroups, &friendlycnt,
+ enemygroups, &enemycnt);
+
+ if (total < maxlibs)
+ return FALSE;
+
+ /* Check for a capture */
+ for (i = 0; i < enemycnt; i++)
+ if (GroupList[enemygroups[i]].liberties == 1)
+ return FALSE;
+ for (i = 0; i < friendlycnt; i++)
+ libcnt += (GroupList[friendlygroups[i]].liberties - 1);
+ if (libcnt != 0)
+ return FALSE;
+ return TRUE;
+}
+
+/* Returns the number of liberties for x, y */
+short
+StoneLibs(x, y)
+ short x, y;
+{
+ short cnt = 0, tx, ty;
+ unsigned short point;
+
+
+ for (point = 0; point <= 3; point++)
+ {
+ tx = x + xVec[point];
+ ty = y + yVec[point];
+ if (LegalPoint(tx,ty) && goboard[tx][ty].Val == EMPTY)
+ cnt++;
+ }
+ return cnt;
+}
+
+void
+EraseMarks()
+{
+ register short i;
+ register struct bRec *gpt = &goboard[0][0];
+
+
+ for (i=0; i<361; gpt++,i++)
+ gpt->marked = FALSE;
+}
+
+/* Place a stone of color at x, y */
+short
+GoPlaceStone(color, x, y)
+ enum bVal color;
+ short x, y;
+{
+ short fgroups[4], egroups[4]; /* group codes surrounding stone */
+ short fcnt, ecnt, i;
+ short lowest = GroupCount + 1;
+
+
+ DeletedGroupCount = 0;
+ if (goboard[x][y].Val != EMPTY || Suicide(color,x,y))
+ return FALSE;
+
+ if (ko && koX == x && koY == y)
+ return FALSE;
+
+ ko = FALSE;
+ placestone(color, x, y);
+ goboard[x][y].Val = color;
+ /* Does the new stone connect to any friendly stone(s)? */
+ Connect(color, x, y, fgroups, &fcnt, egroups, &ecnt);
+ if (fcnt)
+ {
+ /* Find the connecting friendly group with the lowest code */
+ for (i = 0; i < fcnt; i++)
+ if (fgroups[i] <= lowest)
+ lowest = fgroups[i];
+ /*-- Renumber resulting group --*/
+ /*-- Raise the stone count of the lowest by one to account --*/
+ /*-- for new stone --*/
+ goboard[x][y].GroupNum = lowest;
+ GroupList[lowest].count++;
+ for (i = 0; i < fcnt; i++)
+ if (fgroups[i] != lowest)
+ MergeGroups(lowest, fgroups[i]);
+ /* Fix the liberties of the resulting group */
+ CountLiberties(lowest);
+ }
+ else
+ {
+ /* Isolated stone. Create new group. */
+ GroupCount++;
+ lowest = GroupCount;
+ GroupList[lowest].color = color;
+ GroupList[lowest].count = 1;
+ GroupList[lowest].internal = 0;
+ GroupList[lowest].external = StoneLibs( x, y);
+ GroupList[lowest].liberties = GroupList[lowest].external;
+ GroupList[lowest].eyes = 0;
+ GroupList[lowest].alive = 0;
+ GroupList[lowest].territory = 0;
+ goboard[x][y].GroupNum = lowest;
+ }
+ /* Now fix the liberties of enemy groups adjacent to played stone */
+ FixLibs(color, x, y, PLACED); /* Fix the liberties of opcolor */
+ ReEvalGroups(color, x, y, lowest);
+ RelabelGroups();
+ return TRUE;
+}
+
+/* Remove a stone from the board */
+void
+GoRemoveStone(x, y)
+ short x, y;
+{
+ goboard[x][y].Val = EMPTY;
+ goboard[x][y].GroupNum = 0;
+ removestone( x, y);
+}
+
+/* Merges two groups -- Renumbers stones and deletes second group from
+list. Fixes stone count of groups. This does not fix anything else.
+FixLibs must be called to fix liberties, etc. */
+void
+MergeGroups(g1, g2)
+ short g1, g2;
+{
+ short x, y;
+
+
+ ForeachPoint(y,x)
+ if (goboard[x][y].GroupNum == g2)
+ goboard[x][y].GroupNum = g1;
+ GroupList[g1].count += GroupList[g2].count;
+ DeleteGroup( g2 ); /* Removes group from GroupList */
+}
+
+/* Stores a group code to be deleted */
+void
+DeleteGroup(code)
+ short code;
+{
+ DeletedGroups[DeletedGroupCount++] = code;
+}
+
+/* Re-evaluate the groups given the last move. This assumes that the
+last move has been merged into adjoining groups and all liberty counts
+are correct. Handles capture. Checks for Ko. Keeps track of captured
+stones. code is the group number of the stone just played. */
+void
+ReEvalGroups(color, x, y, code)
+ enum bVal color;
+ short x, y, code;
+{
+ short fgroups[4], egroups[4],
+ fcnt, ecnt, i, killcnt = 0, count = 0;
+ enum bVal opcolor = BLACK;
+
+ if (color == BLACK)
+ opcolor = WHITE;
+ /* Check for capture */
+ Connect( color, x, y, fgroups, &fcnt, egroups, &ecnt);
+ if (ecnt)
+ {
+ /* See if any of the groups have no liberties */
+ for (i = 0; i < ecnt; i++)
+ if (GroupList[egroups[i]].liberties == 0)
+ {
+ killcnt++;
+ count = GroupList[egroups[i]].count;
+ GroupCapture( egroups[i]);
+ }
+ }
+ /* Check for ko. koX and koY are set in GroupCapture above. */
+ if (killcnt == 1 && count == 1 && GroupList[ code ].count == 1
+ && GroupList[ code ].liberties == 1)
+ {
+ ko = TRUE;
+ }
+ if (killcnt)
+ intrPrisonerReport( blackPrisoners, whitePrisoners);
+ /* Set eye count for groups */
+ CountEyes();
+}
+
+/* Remove a captured group from the board and fix the liberties of any
+ adjacent groups. Fixes prisoner count. Sets KoX and KoY */
+/*-- update display of captured stones -neilb --*/
+void
+GroupCapture(code)
+ short code;
+{
+ short x, y;
+
+ if (GroupList[code].color == BLACK)
+ blackPrisoners += GroupList[code].count;
+ else
+ whitePrisoners += GroupList[code].count;
+ intrPrisonerReport(blackPrisoners, whitePrisoners);
+ ForeachPoint(y,x)
+ if (goboard[x][y].GroupNum == code)
+ {
+ FixLibs(GroupList[code].color,x,y,REMOVED);
+ GoRemoveStone(x, y);
+ koX = x;
+ koY = y;
+ }
+ DeleteGroup( code);
+}
+
+/* Fix the liberties of groups adjacent to x, y. move indicates
+ whether a stone of color was placed or removed at x, y
+ This does not change liberty counts of friendly groups when a stone
+ is placed. Does not do captures. */
+void
+FixLibs( color, x, y, move)
+ enum bVal color;
+ short x, y, move;
+{
+ short fgroups[4], fcnt, egroups[4], ecnt, i;
+ enum bVal opcolor = BLACK;
+
+ if (color == BLACK)
+ opcolor = WHITE;
+ Connect( color, x, y, fgroups, &fcnt, egroups, &ecnt);
+ if (move == PLACED)
+ for (i = 0; i < ecnt; i++)
+ GroupList[egroups[i]].liberties--;
+ else /* Stone removed so increment opcolor */
+ for (i = 0; i < ecnt; i++)
+ GroupList[egroups[i]].liberties++;
+}
+
+void
+goSetHandicap(handicap)
+ int handicap;
+{
+ if (handicap < 2)
+ return;
+
+ GoPlaceStone(BLACK,3,3);
+ GoPlaceStone(BLACK,15,15);
+
+ if (handicap >= 3)
+ GoPlaceStone(BLACK,15,3);
+ if (handicap >= 4)
+ GoPlaceStone(BLACK,3,15);
+ if (handicap == 5 || handicap == 7 || handicap == 9)
+ GoPlaceStone(BLACK,9,9);
+ if (handicap >= 6)
+ {
+ GoPlaceStone(BLACK,15,9);
+ GoPlaceStone(BLACK,3,9);
+ }
+ if (handicap >= 8)
+ {
+ GoPlaceStone(BLACK,9,15);
+ GoPlaceStone(BLACK,9,3);
+ }
+}
+
+void
+goRestart(handicap)
+ int handicap;
+{
+ register short i;
+ register struct bRec *gpt = &goboard[0][0];
+
+
+ GroupCount = 0;
+ ko = FALSE;
+ blackPrisoners = whitePrisoners = 0;
+ intrPrisonerReport(0, 0);
+ for (i=0; i<361; gpt++,i++)
+ {
+ gpt->Val = EMPTY;
+ gpt->GroupNum = 0;
+ }
+ goSetHandicap(handicap);
+}
+
+
+/* if any groups have been deleted as a result of the last move, this
+ routine will delete the old group numbers from GroupList and
+ reassign group numbers. */
+void
+RelabelGroups()
+{
+ unsigned short i, j, x, y;
+
+ for (i = 0; i < DeletedGroupCount; i++)
+ {
+ /* Relabel all higher groups */
+ ForeachPoint(y,x)
+ if (goboard[x][y].GroupNum > DeletedGroups[i])
+ goboard[x][y].GroupNum--;
+ /* Move the groups down */
+ for (y = DeletedGroups[i]; y < GroupCount; y++)
+ GroupList[y] = GroupList[y+1];
+ /* fix the group numbers stored in the deleted list */
+ for (j = i+1; j < DeletedGroupCount; j++)
+ if (DeletedGroups[j] > DeletedGroups[i])
+ DeletedGroups[j]--;
+ GroupCount--;
+ }
+}
+
+/* Returns liberty count for x, y intersection. Sets marked to true
+ for each liberty */
+short
+CountAndMarkLibs( x, y)
+ short x, y;
+{
+ short tx,ty,i;
+ short cnt = 0;
+
+
+ for (i=0;i<4;i++)
+ {
+ tx = x + xVec[i];
+ ty = y + yVec[i];
+ if (LegalPoint(tx,ty) && goboard[tx][ty].Val == EMPTY
+ && goboard[tx][ty].marked == FALSE)
+ {
+ cnt++;
+ goboard[tx][ty].marked = TRUE;
+ }
+ }
+ return cnt;
+}
+
+/* Determine the number of liberties for a group given the group code
+ num */
+void
+CountLiberties( code)
+ short code;
+{
+ short x, y, libcnt = 0;
+
+ ForeachPoint(y,x)
+ if (goboard[x][y].GroupNum == code)
+ libcnt += CountAndMarkLibs( x, y);
+ EraseMarks();
+ GroupList[code].liberties = libcnt;
+}
+
+void
+CheckForEye( x, y, groups, cnt, recheck)
+ short x, y, groups[4], cnt, *recheck;
+{
+ short i;
+
+ for (i = 0; i < (cnt-1); i++)
+ if (groups[i] != groups[i+1])
+ {
+ /* Mark liberty for false eye check */
+ goboard[x][y].marked = TRUE;
+ (*recheck)++;
+ return;
+ }
+ /* It is an eye */
+ GroupList[groups[i]].eyes += 1;
+}
+
+/* Set the eye count for the groups */
+void CountEyes()
+{
+ short i, x, y,
+ wgroups[4], bgroups[4], wcnt, bcnt, max, cnt, recheck = 0, eye;
+
+ for (i = 1; i <= GroupCount; i++)
+ GroupList[i].eyes = 0;
+
+ ForeachPoint(y,x)
+ {
+ if (goboard[x][y].Val != EMPTY)
+ continue;
+ cnt = Connect(WHITE,x,y,wgroups,&wcnt,bgroups,&bcnt);
+ max = Maxlibs( x, y);
+ if (cnt == max && wcnt == 1 && bcnt == 0)
+ GroupList[wgroups[0]].eyes++;
+ else if (cnt == max && bcnt == 1 && wcnt == 0)
+ GroupList[bgroups[0]].eyes++;
+ else if (cnt == max && ( bcnt == 0 || wcnt == 0 ))
+ {
+ goboard[x][y].marked = TRUE;
+ recheck++;
+ }
+ }
+
+ /*-- Now recheck marked liberties to see if two or more one eye --*/
+ /*-- groups contribute to a false eye */
+ if (recheck == 0)
+ return;
+
+ ForeachPoint(y,x)
+ if (goboard[x][y].marked)
+ {
+ recheck--;
+ goboard[x][y].marked = FALSE;
+ Connect( WHITE, x, y, wgroups, &wcnt, bgroups, &bcnt);
+ /* If all the groups have at least one eye then all the
+ groups are safe from capture because of the common
+ liberty at x, y */
+ eye = TRUE;
+ for (i = 0; i < wcnt; i++)
+ if (GroupList[wgroups[i]].eyes == 0)
+ eye = FALSE;
+ if (eye)
+ for (i = 0; i < wcnt; i++)
+ GroupList[wgroups[i]].eyes++;
+ for (i = 0; i < bcnt; i++)
+ if (GroupList[bgroups[i]].eyes == 0)
+ eye = FALSE;
+ if (eye)
+ for (i = 0; i < bcnt; i++)
+ GroupList[bgroups[i]].eyes++;
+ if (recheck == 0)
+ return;
+ }
+}
+
+
+short foo[19][19];
+
+/*----------------------------------------------------------------
+-- CountUp() --
+-- Count up final scores at the end of the game. --
+----------------------------------------------------------------*/
+CountUp( wtotal, btotal )
+ int *wtotal, *btotal;
+{
+ short x,y;
+ short CountFromPoint();
+ short vv;
+ char buff[512];
+
+
+ blackTerritory = whiteTerritory = 0;
+ ForeachPoint(y,x)
+ {
+ goboard[x][y].marked = FALSE;
+ foo[x][y] = CNT_UNDECIDED;
+ }
+ ForeachPoint(y,x)
+ if (goboard[x][y].Val==EMPTY && foo[x][y]==CNT_UNDECIDED)
+ {
+ FillPoints(x,y,CountFromPoint(x,y));
+ }
+
+ *wtotal = whiteTerritory + blackPrisoners;
+ *btotal = blackTerritory + whitePrisoners;
+ /*
+ sprintf(buff,"White : %3d territory + %3d prisoners = %d\n\
+Black : %3d territory + %3d prisoners = %d\n\n%s.\n",
+ whiteTerritory,blackPrisoners,*wtotal,
+ blackTerritory,whitePrisoners,*btotal,
+ (*btotal>*wtotal?"Black wins":(*wtotal>*btotal?"White wins":
+ "A draw")));
+
+
+
+ XtVaSetValues(message,XtNstring,buff,0);
+ printf( "CountUp() %s", buff );
+ */
+}
+
+FillPoints(x,y,val)
+ short x,y,val;
+{
+ int i;
+ short tx,ty;
+
+
+ if ((foo[x][y] = val) == CNT_BLACK_TERR)
+ blackTerritory++;
+ else if (val == CNT_WHITE_TERR)
+ whiteTerritory++;
+ for (i=0;i<4;i++)
+ {
+ tx = x + xVec[i];
+ ty = y + yVec[i];
+ if (!LegalPoint(tx,ty))
+ continue;
+ if (goboard[tx][ty].Val==EMPTY && foo[tx][ty]==CNT_UNDECIDED)
+ FillPoints(tx,ty,val);
+ }
+}
+
+short
+CountFromPoint(x,y)
+ short x,y;
+{
+ int i;
+ short tx,ty;
+ short blkcnt=0,whtcnt=0;
+ short baz;
+
+
+ goboard[x][y].marked = TRUE;
+ for (i=0;i<4;i++)
+ {
+ tx = x + xVec[i];
+ ty = y + yVec[i];
+ if (!LegalPoint(tx,ty))
+ continue;
+ if (goboard[tx][ty].Val == BLACK)
+ blkcnt++;
+ else if (goboard[tx][ty].Val == WHITE)
+ whtcnt++;
+ else
+ {
+ if (goboard[tx][ty].marked)
+ continue;
+ baz = CountFromPoint(tx,ty);
+ if (baz == CNT_NOONE)
+ return CNT_NOONE;
+ else if (baz == CNT_BLACK_TERR)
+ blkcnt++;
+ else if (baz == CNT_WHITE_TERR)
+ whtcnt++;
+ }
+ if (blkcnt && whtcnt)
+ return CNT_NOONE;
+ }
+ if (blkcnt && !whtcnt)
+ return CNT_BLACK_TERR;
+ else if (whtcnt && !blkcnt)
+ return CNT_WHITE_TERR;
+ else
+ return CNT_UNDECIDED;
+}
diff --git a/noncore/games/go/amigo.h b/noncore/games/go/amigo.h
new file mode 100644
index 0000000..5150ac0
--- a/dev/null
+++ b/noncore/games/go/amigo.h
@@ -0,0 +1,146 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+/*=========================================================================
+=== ===
+=== FILE amigo.h ===
+=== ===
+=== CONTENTS prototypes for the various AmiGo routines. ===
+=== added by neilb ===
+=== ===
+=========================================================================*/
+
+#ifndef __amigo_h
+#define __amigo_h
+
+#include "go.h"
+#include "goplayutils.h"
+
+#ifdef __STDC__
+#define PROTO(fp) fp
+#else
+#define PROTO(fp) ()
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* From goplayer.c */
+
+
+
+/* Procedures from amigo.c */
+
+short Connect PROTO((enum bVal, short, short, short[4], short[4], short *, short * ));
+short Maxlibs PROTO((short, short));
+short Suicide PROTO((enum bVal, short, short));
+short StoneLibs PROTO((short, short));
+void EraseMarks PROTO(());
+short GoPlaceStone PROTO((enum bVal, short, short));
+void GoRemoveStone PROTO((short, short));
+void MergeGroups PROTO((short, short));
+void DeleteGroup PROTO((short));
+void ReEvalGroups PROTO((enum bVal, short, short, short));
+void GroupCapture PROTO((short));
+void FixLibs PROTO((enum bVal, short, short, short));
+int CountUp PROTO((int*, int*));
+/*void main PROTO(());*/
+void goRestart PROTO((int));
+void RelabelGroups PROTO(());
+short CountAndMarkLibs PROTO((short, short));
+void CountLiberties PROTO((short));
+void CheckForEye PROTO((short, short, short[4], short, short *));
+void CountEyes PROTO(());
+void printGroupReport PROTO((short, short));
+
+
+/* killable.c */
+
+int tryPlay PROTO(( short, short, short ));
+int sSpanGroup PROTO(( short, short, sPointList * ));
+int spanGroup PROTO(( short, short, pointList *));
+int pause PROTO(());
+
+int genState PROTO(());
+int initGPUtils PROTO(());
+int genBord PROTO((enum bVal));
+
+short genMove PROTO(( enum bVal, short *, short * ));
+short checkPos PROTO(( short, short, short ));
+short takeCorner PROTO(( short *, short * ));
+short extend PROTO(( short *, short * ));
+short noNbrs PROTO(( short, short ));
+short extend2 PROTO(( short *, short * ));
+short lookForSave PROTO(( short *, short * ));
+short lookForSaveN PROTO(( short *, short * ));
+short lookForKill PROTO(( short *, short * ));
+short doubleAtari PROTO(( short *, short * ));
+short lookForAttack PROTO(( short *, short * ));
+short threaten PROTO(( short *, short * ));
+short connectCut PROTO(( short *, short * ));
+short heCanCut PROTO(( short, short ));
+short safeMove PROTO(( short, short ));
+short extendWall PROTO(( short *, short * ));
+short findAttack2 PROTO(( short *, short * ));
+short blockCut PROTO(( short *, short * ));
+short cutHim PROTO(( short *, short * ));
+short atariAnyway PROTO(( short *, short * ));
+short underCut PROTO(( short *, short * ));
+short dropToEdge PROTO(( short *, short * ));
+short pushWall PROTO(( short *, short * ));
+short reduceHisLiberties PROTO(( short *, short * ));
+short dropToEdge2 PROTO(( short *, short * ));
+
+
+/* goplayutils.c */
+
+short saveable PROTO((short, short, short *, short *));
+short killable PROTO((short, short, short *, short *));
+int initBoolBoard PROTO((boolBoard));
+int intersectPlist PROTO((pointList *, pointList *, pointList *));
+int initArray PROTO((intBoard));
+int initState PROTO(());
+int copyArray PROTO((intBoard, intBoard));
+int stake PROTO(());
+int spread PROTO(());
+int respreicen PROTO(());
+int tryPlay PROTO((short, short, short));
+int saveState PROTO(());
+int restoreState PROTO(());
+short tencen PROTO((short, short));
+int genConnects PROTO(());
+int sortLibs PROTO(());
+
+
+/*-- from xinterface.c --*/
+void removestone PROTO((short, short));
+void placestone PROTO((enum bVal, short, short));
+
+void intrMoveReport PROTO((enum bVal,char *,char *));
+void intrPrisonerReport PROTO(( short, short ));
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/noncore/games/go/go.h b/noncore/games/go/go.h
new file mode 100644
index 0000000..9aa644b
--- a/dev/null
+++ b/noncore/games/go/go.h
@@ -0,0 +1,81 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+/* AmiGo Include */
+/* MSG types for getinput() */
+
+#ifndef __go_h
+#define __go_h
+
+
+#define INTERSECTIONMSG 1 /* User buttoned an intersection */
+#define QUITMSG 2 /* User buttoned QUIT icon */
+#define PLAYMSG 3
+#define RESTARTMSG 4
+#define PASSMSG 5
+
+#define TRUE 1
+#define FALSE 0
+
+#define MAXGROUPS 100
+
+#define PLACED 0
+#define REMOVED 1
+
+#define numPoints 19
+#define maxPoint numPoints - 1
+
+/*-- definitions used when counting up --*/
+
+#define CNT_UNDECIDED 0
+#define CNT_BLACK_TERR 1
+#define CNT_WHITE_TERR 2
+#define CNT_NOONE 3
+
+/*-- macro functions --*/
+
+#define LegalPoint(x,y) (x>=0 && x<=18 && y>=0 && y<=18)
+#define ForeachPoint(a,b) for(a=0;a<19;a++) for (b=0;b<19;b++)
+
+enum bVal {BLACK, WHITE, EMPTY};
+typedef enum bVal sType;
+struct Group
+{
+ enum bVal color; /* The color of the group */
+ short code, /* The code used to mark stones in the group */
+ count, /* The number of stones in the group */
+ internal, /* The number of internal liberties */
+ external, /* The number of external liberties */
+ liberties, /* The total number of liberties */
+ eyes, /* The number of eyes */
+ alive, /* A judgement of how alive this group is */
+ territory; /* The territory this group controls */
+};
+
+struct bRec
+{
+ enum bVal Val; /* What is at this intersection */
+ short xOfs,
+ yOfs;
+ short mNum;
+ short GroupNum; /* What group the stone belongs to */
+ short marked; /* TRUE or FALSE */
+};
+
+#endif
diff --git a/noncore/games/go/go.pro b/noncore/games/go/go.pro
new file mode 100644
index 0000000..deb90c5
--- a/dev/null
+++ b/noncore/games/go/go.pro
@@ -0,0 +1,19 @@
+DESTDIR = ../bin
+TEMPLATE = app
+CONFIG = qt warn_on release
+HEADERS = amigo.h \
+ go.h \
+ goplayutils.h \
+ gowidget.h
+SOURCES = amigo.c \
+ goplayer.c \
+ goplayutils.c \
+ killable.c \
+ gowidget.cpp \
+ main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+TARGET = go
+
+TRANSLATIONS = ../i18n/de/go.ts \ No newline at end of file
diff --git a/noncore/games/go/goplayer.c b/noncore/games/go/goplayer.c
new file mode 100644
index 0000000..88c0f61
--- a/dev/null
+++ b/noncore/games/go/goplayer.c
@@ -0,0 +1,1499 @@
+/* The go player */
+/* Ported from Pascal to C by Todd R. Johnson 4/17/88 */
+/* From the original pascal file:
+Go Move Generator
+Copyright (c) 1983 by Three Rivers Computer Corp.
+
+Written: January 17, 1983 by Stoney Ballard
+Edit History:
+*/
+
+#include "go.h"
+#include "goplayutils.h"
+#include "amigo.h"
+
+#define BIGGEST 32767 /* maximum value for short */
+
+/* From go.c */
+extern struct bRec goboard[19][19];
+extern short ko, koX, koY;
+
+/* From goplayutils.c */
+extern intBoard bord;
+extern intBoard ndbord;
+extern intBoard claim;
+extern intBoard legal;
+extern intBoard connectMap;
+extern intBoard threatBord;
+extern short maxGroupID;
+extern short treeLibLim;
+extern short killFlag;
+extern short depthLimit;
+extern short showTrees;
+extern short utilPlayLevel;
+extern groupRec gList[maxGroup];
+extern short sGlist[maxGroup + 1];
+extern pointList pList;
+extern pointList pList1;
+extern pointList plist2;
+extern pointList plist3;
+extern intBoard groupIDs;
+extern intBoard protPoints;
+extern sType mySType;
+
+
+short saveNLibs;
+pointList dapList1, dapList2, dapList3;
+char *playReason;
+short maxPlayLevel = 7;
+short playLevel = 7;
+
+genBord(color)
+ enum bVal color;
+{
+ short x, y, nomoves = TRUE;
+ char mv[8];
+
+ maxPlayLevel = 7;
+ utilPlayLevel = playLevel;
+ mySType = color;
+ if (playLevel < 2)
+ treeLibLim = 2;
+ else
+ treeLibLim = 3;
+ depthLimit = 100;
+ for (y = 0; y <= 18; y++)
+ for (x = 0; x <= 18; x++)
+ if (goboard[x][y].Val == color)
+ {
+ bord[x][y] = 1;
+ legal[x][y] = FALSE;
+ nomoves = FALSE;
+ }
+ else if (goboard[x][y].Val == EMPTY)
+ {
+ bord[x][y] = 0;
+ legal[x][y] = TRUE;
+ }
+ else
+ {
+ bord[x][y] = -1;
+ legal[x][y] = FALSE;
+ nomoves = FALSE;
+ }
+ if (ko)
+ {
+ legal[koX][koY] = FALSE;
+ }
+
+ if (! nomoves)
+ genState();
+ else
+ initGPUtils();
+}
+
+
+short getMove( x, y )
+short *x, *y;
+{
+ if (takeCorner(x, y)) return TRUE;
+ if (lookForSave(x, y)) return TRUE;
+ if (lookForSaveN(x, y)) return TRUE;
+ if (extend(x, y)) return TRUE;
+ if (lookForKill(x, y)) return TRUE;
+ if (doubleAtari(x, y)) return TRUE;
+ if (lookForAttack(x, y)) return TRUE;
+ if (threaten(x, y)) return TRUE;
+ if (extend2(x, y)) return TRUE;
+ if (connectCut(x, y)) return TRUE;
+ if (blockCut(x, y)) return TRUE;
+ if (cutHim(x, y)) return TRUE;
+ if (extendWall(x, y)) return TRUE;
+ if (findAttack2(x, y)) return TRUE;
+ if (atariAnyway(x, y)) return TRUE;
+ if (underCut(x, y)) return TRUE;
+ if (dropToEdge(x, y)) return TRUE;
+ if (pushWall(x, y)) return TRUE;
+ if (reduceHisLiberties(x, y)) return TRUE;
+ if (dropToEdge2(x, y)) return TRUE;
+ return FALSE;
+}
+
+short genMove( color, x, y )
+enum bVal color;
+short *x, *y;
+{
+ if (playLevel > 2)
+ saveNLibs = TRUE;
+ else
+ saveNLibs = FALSE;
+ genBord(color);
+ if (getMove(x, y))
+ return TRUE;
+ return FALSE;
+}
+
+short checkPos(x, y, field)
+short x, y, field;
+{
+ short ok;
+ ok = (((field == 0) && (claim[x][y] == 0)) ||
+ ((field > 0) &&
+ (claim[x][y] >= 0) && (claim[x][y] <= field)) ||
+ ((field < 0) &&
+ (claim[x][y] <= 0) && (claim[x][y] >= field))) &&
+ (bord[x-1][y] == 0) &&
+ (bord[x+1][y] == 0) &&
+ (bord[x][y-1] == 0) &&
+ (bord[x][y+1] == 0);
+ if (ok) return TRUE; else return FALSE;
+}
+
+short takeCorner( x, y )
+short *x, *y;
+{
+ short field = -1, i;
+ i = 18 - 3;
+ playReason = "takeCorner";
+ while (field != -4)
+ {
+ if (field == -1) field = 0;
+ else if (field == 0) field = 4;
+ else field = -4;
+ if (checkPos(2, 3, field)) { *x = 2; *y = 3; return TRUE; }
+ if (checkPos(3, 2, field)) { *x = 3; *y = 2; return TRUE; }
+ if (checkPos(2, i, field)) { *x = 2; *y = i; return TRUE; }
+ if (checkPos(3, i + 1, field)) { *x = 3; *y = i+1; return TRUE; }
+ if (checkPos(i, i + 1, field)) { *x = i; *y = i+1; return TRUE; }
+ if (checkPos(i + 1, i, field)) { *x = i+1; *y = i; return TRUE; }
+ if (checkPos(i, 2, field)) { *x = i; *y = 2; return TRUE; }
+ if (checkPos(i + 1, 3, field)) { *x = i+1; *y = 3; return TRUE; }
+ if (checkPos(2, 4, field)) { *x = 2; *y = 4; return TRUE; }
+ if (checkPos(4, 2, field)) { *x = 4; *y = 2; return TRUE; }
+ if (checkPos(2, i - 1, field)) { *x = 2; *y = i-1; return TRUE; }
+ if (checkPos(4, i + 1, field)) { *x = 4; *y = i+1; return TRUE; }
+ if (checkPos(i - 1, i + 1, field)) { *x = i-1; *y = i+1; return TRUE; }
+ if (checkPos(i + 1, i - 1, field)) { *x = i+1; *y = i-1; return TRUE; }
+ if (checkPos(i + 1, 4, field)) { *x = i+1; *y = 4; return TRUE; }
+ if (checkPos(i - 1, 2, field)) { *x = i-1; *y = 2; return TRUE; }
+ }
+ return FALSE;
+}
+
+printBoard(brd, name)
+intBoard brd;
+char *name;
+{
+ short x, y;
+ printf( "%s\n", name );
+ for (y = 0; y <= 18; y++)
+ {
+ for (x = 0; x <= 18; x++)
+ printf("%d ", brd[x][y]);
+ printf("\n");
+ }
+}
+
+short noNbrs( x, y )
+short x, y;
+{
+ if (x > 0 && bord[x-1][y] != 0) return FALSE;
+ if (x < 18 && bord[x+1][y] != 0) return FALSE;
+ if (y > 0 && bord[x][y-1] != 0) return FALSE;
+ if (y < 18 && bord[x][y+1] != 0) return FALSE;
+ return TRUE;
+}
+
+short extend(x, y)
+short *x, *y;
+{
+ short i;
+ playReason = "extend";
+ for (i = 2; i <= 18-2; i++)
+ if (claim[2][i] == 0 && noNbrs( 2, i ))
+ {
+ *x = 2;
+ *y = i;
+ return TRUE;
+ }
+ for (i = 2; i <= 18-2; i++)
+ if (claim[i][18-2] == 0 && noNbrs( 2, i ))
+ {
+ *x = i;
+ *y = 18-2;
+ return TRUE;
+ }
+ for (i = 18-2; i >= 2; i--)
+ if (claim[18-2][i] == 0 && noNbrs( 18-2, i ))
+ {
+ *x = 18-2;
+ *y = i;
+ return TRUE;
+ }
+ for (i = 18-2; i >= 2; i--)
+ if (claim[i][2] == 0 && noNbrs( i, 2 ))
+ {
+ *x = i;
+ *y = 2;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+short extend2( x, y )
+short *x, *y;
+{
+ short i, lowest = BIGGEST, value;
+ playReason = "extend2";
+ for (i = 3; i <= 18-3; i++)
+ if (legal[2][i]) /* if there is nobody there */
+ {
+ value = claim[2][i]; /* get influence */
+ if ((value < 7) && /* a reasonable hole in my wall */
+ (value > -5) && /* or a reasonable gap in his */
+ (bord[2][i + 1] == 0) && /* not in contact with any stones */
+ (bord[2][i - 1] == 0))
+ if (value < lowest)
+ {
+ lowest = value; /* lowest gets the smallest value */
+ *x = 2; /* that was seen along all the 3-lines */
+ *y = i; /* x and y save that location */
+ }
+ }
+ for (i = 3; i <= 18-3; i++)
+ if (legal[i][2])
+ {
+ value = claim[i][2];
+ if ((value < 7) &&
+ (value > -5) &&
+ (bord[i + 1][2] == 0) &&
+ (bord[i - 1][2] == 0))
+ if (value < lowest)
+ {
+ lowest = value;
+ *x = i;
+ *y = 2;
+ }
+ }
+ for (i = 18-3; i >= 3; i--)
+ if (legal[18 - 2][i])
+ {
+ value = claim[18 - 2][i];
+ if ((value < 7) &&
+ (value > -5) &&
+ (bord[18 - 2][i + 1] == 0) &&
+ (bord[18 - 2][i - 1] == 0))
+ if (value < lowest)
+ {
+ lowest = value;
+ *x = 18 - 2;
+ *y = i;
+ }
+ }
+ for (i = 3; i <= 18-3; i++)
+ if (legal[i][18 - 2])
+ {
+ value = claim[i][18 - 2];
+ if ((value < 7) &&
+ (value > -5) &&
+ (bord[i + 1][18 - 2] == 0) &&
+ (bord[i - 1][18 - 2] == 0))
+ if (value < lowest)
+ {
+ lowest = value;
+ *x = i;
+ *y = 18 - 2;
+ }
+ }
+ if (lowest == BIGGEST) return FALSE;
+ return TRUE;
+}
+
+ /*
+ check to see if I can save anything in atari
+ */
+short lookForSave(x, y)
+short *x, *y;
+ { /* lookForSave */
+ short i;
+ playReason = "lookForSave";
+ for (i = 1; i <= maxGroupID; i++) /* scan the group list */
+ if ((gList[i].libC == 1) &&
+ (ndbord[gList[i].lx][gList[i].ly] == 1))
+ if (saveable(gList[i].lx, gList[i].ly, x, y)) /* see if I can save it */
+ return TRUE;
+ return FALSE;
+ } /* lookForSave */
+
+ /*
+ check to see if I can save anything with n libs
+ */
+short lookForSaveN(x, y)
+short *x, *y;
+ { /* lookForSaveN */
+ short i;
+ if (saveNLibs)
+ {
+ playReason = "lookForSaveN";
+ for (i = 1; i <= maxGroupID; i++) /* scan the group list */
+ if ((gList[i].libC > 1) &&
+ (gList[i].libC <= treeLibLim) &&
+ (ndbord[gList[i].lx][gList[i].ly] == 1))
+ {
+ if (killable(gList[i].lx, gList[i].ly, x, y))
+ if (saveable(gList[i].lx, gList[i].ly, x, y)) /* see if I can save it */
+ return TRUE;
+ }
+ }
+ return FALSE;
+ } /* lookForSaveN */
+
+
+/*----------------------------------------------------------------
+-- lookForKill() --
+-- check to see if I can kill anything. --
+----------------------------------------------------------------*/
+short
+lookForKill(x, y)
+ short *x, *y;
+{
+ short i;
+ char mv[8];
+
+ playReason = "lookForKill";
+ for (i = 1; i <= maxGroupID; i++) /* scan the group list */
+ if ((gList[i].libC == 1) &&
+ (ndbord[gList[i].lx][gList[i].ly] == -1))
+ { /* we found a live enemy group with one liberty */
+ /* find the liberty */
+ spanGroup(gList[i].lx, gList[i].ly, &pList);
+ *x = pList.p[1].px;
+ *y = pList.p[1].py;
+ if (legal[*x][*y])
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+short doubleAtari(x, y)
+short *x, *y;
+ { /* doubleAtari */
+ short i, j;
+ playReason = "doubleAtari";
+ for (i = 1; i <= maxGroupID - 1; i++)
+ if ((gList[i].libC == 2) &&
+ (ndbord[gList[i].lx][gList[i].ly] == -1)) /* found an atariable group of his */
+ {
+ spanGroup(gList[i].lx, gList[i].ly, &dapList1);
+ for (j = i + 1; j <= maxGroupID; j++)
+ if ((gList[j].libC == 2) &&
+ (ndbord[gList[j].lx][gList[j].ly] == -1))
+ {
+ spanGroup(gList[j].lx, gList[j].ly, &dapList2);
+ intersectPlist(&dapList1, &dapList2, &dapList3);
+ if (dapList3.indx > 0)
+ if (legal[dapList3.p[1].px][dapList3.p[1].py])
+ {
+ tryPlay(dapList3.p[1].px, dapList3.p[1].py, 1);
+ if (gList[groupIDs[dapList3.p[1].px][
+ dapList3.p[1].py]].libC > 1)
+ {
+ *x = dapList3.p[1].px;
+ *y = dapList3.p[1].py;
+ restoreState();
+ return TRUE;
+ }
+ restoreState();
+ }
+ }
+ }
+ return FALSE;
+ } /* doubleAtari */
+
+short lookForAttack(x, y)
+short *x, *y;
+ { /* lookForAttack */
+ short tx, ty, i;
+ playReason = "lookForAttack";
+ for (i = 1; i <= maxGroupID; i++) /* scan the group list */
+ if ((! gList[i].isLive) &&
+ (gList[i].libC > 1) &&
+ (gList[i].libC <= (treeLibLim + 1)) &&
+ (ndbord[gList[i].lx][gList[i].ly] == -1))
+ {
+ if (killable(gList[i].lx, gList[i].ly, &tx, &ty)) /* can we kill it? */
+ {
+ *x = tx; /* yep - do so */
+ *y = ty;
+ return TRUE;
+ }
+ }
+ return FALSE;
+ } /* lookForAttack */
+
+ /*
+ Plays a move that requires a response on the opponent's part
+ */
+short threaten(x, y)
+short *x, *y;
+ { /* threaten */
+ short i, j, gx, gy, tNum;
+ playReason = "threaten";
+ initArray(threatBord);
+ for (i = 1; i <= maxGroupID; i++)
+ if ((! gList[i].isLive) &&
+ (ndbord[gList[i].lx][gList[i].ly] == -1))
+ {
+ spanGroup(gList[i].lx, gList[i].ly, &pList);
+ for (j = 1; j <= pList.indx; j++)
+ if (legal[pList.p[j].px][pList.p[j].py])
+ {
+ tryPlay(pList.p[j].px, pList.p[j].py, 1);
+ if (gList[groupIDs[pList.p[j].px][pList.p[j].py]].libC > 1)
+ if (killable(gList[i].lx, gList[i].ly, &gx, &gy))
+ threatBord[pList.p[j].px][pList.p[j].py] += 1;
+ restoreState();
+ }
+ }
+ tNum = 0;
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if ((threatBord[i][j] > tNum) &&
+ ((threatBord[i][j] > 1) ||
+ (connectMap[i][j] > 0)))
+ {
+ tNum = threatBord[i][j];
+ *x = i;
+ *y = j;
+ }
+ if (tNum > 0) return TRUE;
+ else return FALSE;
+ } /* threaten */
+
+ /*
+ connects against enemy cuts
+ */
+short connectCut(x, y)
+short *x, *y;
+ { /* connectCut */
+ short i, j, nap, gid, infl;
+ playReason = "connectCut";
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if (legal[i][j] &&
+ (protPoints[i][j] == 0)) /* not a protected point */
+ {
+ nap = 0; /* how many of my stones am I adjacent to? */
+ if ((i > 0) && (bord[i - 1][j] == 1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i - 1;
+ pList.p[nap].py = j;
+ }
+ if ((j > 0) && (bord[i][j - 1] == 1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i;
+ pList.p[nap].py = j - 1;
+ }
+ if ((i < maxPoint) && (bord[i + 1][j] == 1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i + 1;
+ pList.p[nap].py = j;
+ }
+ if ((j < maxPoint) && (bord[i][j + 1] == 1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i;
+ pList.p[nap].py = j + 1;
+ }
+ if (nap == 1) /* possible knight's || 2-point extention */
+ {
+ gid = groupIDs[pList.p[1].px][pList.p[1].py];
+ if ((i > 0) && (i < maxPoint) &&
+ (ndbord[i - 1][j] == 1) &&
+ (ndbord[i + 1][j] == 0)) /* contact on left */
+ {
+ if (((j > 0) && (ndbord[i][j - 1] == -1) &&
+ (ndbord[i + 1][j - 1] == 1) &&
+ (gid != groupIDs[i + 1][j - 1])) ||
+ ((j < maxPoint) && (ndbord[i][j + 1] == -1) &&
+ (ndbord[i + 1][j + 1] == 1) &&
+ (gid != groupIDs[i + 1][j + 1])) ||
+ ((((j > 0) && (ndbord[i][j - 1] == -1)) ||
+ ((j < maxPoint) && (ndbord[i][j + 1] == -1))) &&
+ (i < (maxPoint - 1)) &&
+ (ndbord[i + 2][j] == 1) &&
+ (gid != groupIDs[i + 2][j])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else if ((i < maxPoint) && (i > 0) &&
+ (ndbord[i + 1][j] == 1) &&
+ (ndbord[i - 1][j] == 0)) /* r */
+ {
+ if (((j > 0) && (ndbord[i][j - 1] == -1) &&
+ (ndbord[i - 1][j - 1] == 1) &&
+ (gid != groupIDs[i - 1][j - 1])) ||
+ ((j < maxPoint) && (ndbord[i][j + 1] == -1) &&
+ (ndbord[i - 1][j + 1] == 1) &&
+ (gid != groupIDs[i - 1][j + 1])) ||
+ ((((j > 0) && (ndbord[i][j - 1] == -1)) ||
+ ((j < maxPoint) && (ndbord[i][j + 1] == -1))) &&
+ (i > 1) &&
+ (ndbord[i - 2][j] == 1) &&
+ (gid != groupIDs[i - 2][j])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else if ((j > 0) && (j < maxPoint) &&
+ (ndbord[i][j - 1] == 1) &&
+ (ndbord[i][j + 1] == 0)) /* top */
+ {
+ if (((i > 0) && (ndbord[i - 1][j] == -1) &&
+ (ndbord[i - 1][j + 1] == 1) &&
+ (gid != groupIDs[i - 1][j + 1])) ||
+ ((i < maxPoint) && (ndbord[i + 1][j] == -1) &&
+ (ndbord[i + 1][j + 1] == 1) &&
+ (gid != groupIDs[i + 1][j + 1])) ||
+ ((((i > 0) && (ndbord[i - 1][j] == -1)) ||
+ ((i < maxPoint) && (ndbord[i + 1][j] == -1))) &&
+ (j < (maxPoint - 1)) &&
+ (ndbord[i][j + 2] == 1) &&
+ (gid != groupIDs[i][j + 2])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else if ((j > 0) && (j < maxPoint) &&
+ (ndbord[i][j + 1] == 1) &&
+ (ndbord[i][j - 1] == 0)) /* bottom */
+ {
+ if (((i > 0) && (ndbord[i - 1][j] == -1) &&
+ (ndbord[i - 1][j - 1] == 1) &&
+ (gid != groupIDs[i - 1][j - 1])) ||
+ ((i < maxPoint) && (ndbord[i + 1][j] == -1) &&
+ (ndbord[i + 1][j - 1] == 1) &&
+ (gid != groupIDs[i + 1][j - 1])) ||
+ ((((i > 0) && (ndbord[i - 1][j] == -1)) ||
+ ((i < maxPoint) && (ndbord[i + 1][j] == -1))) &&
+ (j > 1) &&
+ (ndbord[i][j - 2] == 1) &&
+ (gid != groupIDs[i][j - 2])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ }
+ else if (nap == 2) /* diagonal or 1-point extention */
+ {
+ if (groupIDs[pList.p[1].px][pList.p[1].py] !=
+ groupIDs[pList.p[2].px][pList.p[2].py])
+ {
+ if ((pList.p[1].px != pList.p[2].px) &&
+ (pList.p[1].py != pList.p[2].py)) /* diag */
+ {
+ spanGroup(pList.p[1].px,
+ pList.p[1].py, &pList1);
+ spanGroup(pList.p[2].px,
+ pList.p[2].py, &plist2);
+ intersectPlist(&pList1, &plist2, &plist3);
+ if (plist3.indx == 1)
+ if ((i > 0) && (ndbord[i - 1][j] == -1) ||
+ (i < maxPoint) && (ndbord[i + 1][j] == -1) ||
+ (j > 0) && (ndbord[i][j - 1] == -1) ||
+ (j < maxPoint) && (ndbord[i][j + 1] == -1))
+ { /* must make direct connection */
+ *x = i;
+ *y = j;
+ if (heCanCut(*x, *y))
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ else if (heCanCut(i, j))
+ { /* protect point if possible */
+ infl = 1000;
+ if ((i > 0) && legal[i - 1][j] &&
+ ((i == 1) || (ndbord[i - 2][j] == 0)) &&
+ ((j == 0) || (ndbord[i - 1][j - 1] == 0)) &&
+ ((j == maxPoint) ||
+ (ndbord[i - 1][j + 1] == 0)))
+ if (safeMove(i - 1, j))
+ if (claim[i - 1][j] < infl)
+ {
+ *x = i - 1;
+ *y = j;
+ infl = claim[i - 1][j];
+ }
+ if ((j > 0) && legal[i][j - 1] &&
+ ((j == 1) || (ndbord[i][j - 2] == 0)) &&
+ ((i == 0) || (ndbord[i - 1][j - 1] == 0)) &&
+ ((i == maxPoint) ||
+ (ndbord[i + 1][j - 1] == 0)))
+ if (safeMove(i, j - 1))
+ if (claim[i][j - 1] < infl)
+ {
+ *x = i;
+ *y = j - 1;
+ infl = claim[i][j - 1];
+ }
+ if ((i < maxPoint) && legal[i + 1][j] &&
+ ((i == (maxPoint - 1)) ||
+ (ndbord[i + 2][j] == 0)) &&
+ ((j == 0) || (ndbord[i + 1][j - 1] == 0)) &&
+ ((j == maxPoint) ||
+ (ndbord[i + 1][j + 1] == 0)))
+ if (safeMove(i + 1, j))
+ if (claim[i + 1][j] < infl)
+ {
+ *x = i + 1;
+ *y = j;
+ infl = claim[i + 1][j];
+ }
+ if ((j < maxPoint) && legal[i][j + 1] &&
+ ((j == (maxPoint - 1)) ||
+ (ndbord[i][j + 2] == 0)) &&
+ ((i == 0) || (ndbord[i - 1][j + 1] == 0)) &&
+ ((i == maxPoint) ||
+ (ndbord[i + 1][j + 1] == 0)))
+ if (safeMove(i, j + 1))
+ if (claim[i][j + 1] < infl)
+ {
+ *x = i;
+ *y = j + 1;
+ infl = claim[i][j + 1];
+ }
+ if (infl < 1000)
+ return TRUE;
+ *x = i; /* direct connection */
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else /* 1-point extension, only protect if threatened */
+ {
+ if ((i > 0) && (ndbord[i - 1][j] == -1) ||
+ (j > 0) && (ndbord[i][j - 1] == -1) ||
+ (i < maxPoint) && (ndbord[i + 1][j] == -1) ||
+ (j < maxPoint) && (ndbord[i][j + 1] == -1))
+ {
+ *x = i;
+ *y = j;
+ if (heCanCut(*x, *y))
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ }
+ }
+ else if (nap == 3) /* unprotected, but me on 3 sides */
+ {
+ if ((groupIDs[pList.p[1].px][pList.p[1].py] !=
+ groupIDs[pList.p[2].px][pList.p[2].py]) ||
+ (groupIDs[pList.p[1].px][pList.p[1].py] !=
+ groupIDs[pList.p[3].px][pList.p[3].py]) ||
+ (groupIDs[pList.p[3].px][pList.p[3].py] !=
+ groupIDs[pList.p[2].px][pList.p[2].py]))
+ {
+ spanGroup(pList.p[1].px, pList.p[1].py, &pList1);
+ spanGroup(pList.p[2].px, pList.p[2].py, &plist2);
+ intersectPlist(&pList1, &plist2, &plist3);
+ spanGroup(pList.p[3].px, pList.p[3].py, &plist2);
+ intersectPlist(&plist2, &plist3, &pList1);
+ if (pList1.indx == 1) /* a common connect point */
+ if (heCanCut(i, j))
+ if (safeMove(i, j))
+ {
+ *x = i;
+ *y = j;
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+ } /* connectCut */
+
+short heCanCut(x, y)
+short x, y;
+ { /* heCanCut */
+ short gx, gy, result;
+ if (playLevel > 3)
+ {
+ tryPlay(x, y, -1); /* try his cut */
+ result = ! killable(x, y, &gx, &gy);
+ restoreState();
+ return result;
+ }
+ else
+ return FALSE;
+ } /* heCanCut */
+
+ /*
+ Checks out a move.
+ If my stone is not killable then true.
+ */
+short safeMove(x, y)
+short x, y;
+ { /* safeMove */
+ short gbx, gby, result;
+ tryPlay(x, y, 1); /* try playing at point */
+ if (killFlag) /* I shouldn't kill if lookForKill didn't */
+ result = FALSE;
+ else if (gList[groupIDs[x][y]].libC < 2)
+ { /* if it is in atari or dead */
+ result = FALSE; /* reject it */
+ }
+ else if (gList[groupIDs[x][y]].libC <= treeLibLim) /* see if killable */
+ if (playLevel > 0)
+ result = ! killable(x, y, &gbx, &gby);
+ else
+ result = TRUE;
+ else
+ result = TRUE;
+ restoreState();
+ return result;
+ } /* safeMove */
+
+ /*
+ Extends walls in a connected fashion.
+ Finds the lowest influence (mine) point that is connected to one
+ of my groups.
+ Only looks in the center of the board.
+ */
+short extendWall(x, y)
+short *x, *y;
+ { /* extendWall */
+ short infl, i, j;
+ playReason = "extendWall";
+ *x = iNil;
+ *y = iNil;
+ infl = 11;
+ for (i = 2; i <= maxPoint - 2; i++)
+ for (j = 2; j <= maxPoint - 2; j++)
+ if (legal[i][j])
+ if (connectMap[i][j] > 0)
+ if ((claim[i][j] < infl) &&
+ (ndbord[i - 1][j] < 1) &&
+ (ndbord[i + 1][j] < 1) &&
+ (ndbord[i][j - 1] < 1) &&
+ (ndbord[i][j + 1] < 1) &&
+ ((claim[i - 1][j] < 0) ||
+ (claim[i + 1][j] < 0) ||
+ (claim[i][j - 1] < 0) ||
+ (claim[i][j + 1] < 0)))
+ if (safeMove(i, j))
+ {
+ infl = claim[i][j];
+ *x = i;
+ *y = j;
+ }
+ if (*x != iNil) return TRUE;
+ return FALSE;
+ } /* extendWall */
+
+
+ /*
+ check to see if I can attack one of his groups
+ uses limited depth search so that it can work on larger lib counts
+ */
+short findAttack2(x, y)
+short *x, *y;
+ { /* findAttack2 */
+ short tx, ty, i, otll;
+ if (playLevel < 7)
+ return FALSE;
+ playReason = "findAttack2";
+ depthLimit = 8;
+ otll = treeLibLim;
+ for (i = 1; i <= maxGroupID; i++) /* scan the group list */
+ if ((! gList[i].isLive) &&
+ (ndbord[gList[i].lx][gList[i].ly] == -1) &&
+ (gList[i].libC > 1))
+ {
+ treeLibLim = 6;
+ if (killable(gList[i].lx, gList[i].ly, &tx, &ty)) /* can we kill it? */
+ {
+ *x = tx; /* yep - do so */
+ *y = ty;
+ return TRUE;
+ }
+ treeLibLim = otll;
+ }
+ depthLimit = 100;
+ return FALSE;
+ } /* findAttack2 */
+
+
+ /*
+ blocks enemy cuts thru 1-point extensions
+ */
+short blockCut(x, y)
+short *x, *y;
+ { /* blockCut */
+ short i, j;
+ playReason = "blockCut";
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if (legal[i][j])
+ {
+ if ((i > 0) && (j > 0) && (j < maxPoint))
+ {
+ if ((ndbord[i - 1][j] == -1) &&
+ (ndbord[i - 1][j - 1] == 1) &&
+ (ndbord[i - 1][j + 1] == 1) &&
+ (groupIDs[i - 1][j - 1] != groupIDs[i - 1][j + 1]))
+ {
+ *x = i;
+ *y = j;
+ if (heCanCut(*x, *y))
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ if ((i < maxPoint) && (j > 0) && (j < maxPoint))
+ {
+ if ((ndbord[i + 1][j] == -1) &&
+ (ndbord[i + 1][j - 1] == 1) &&
+ (ndbord[i + 1][j + 1] == 1) &&
+ (groupIDs[i + 1][j - 1] != groupIDs[i + 1][j + 1]))
+ {
+ *x = i;
+ *y = j;
+ if (heCanCut(*x, *y))
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ if ((j > 0) && (i > 0) && (i < maxPoint))
+ {
+ if ((ndbord[i][j - 1] == -1) &&
+ (ndbord[i - 1][j - 1] == 1) &&
+ (ndbord[i + 1][j - 1] == 1) &&
+ (groupIDs[i - 1][j - 1] != groupIDs[i + 1][j - 1]))
+ {
+ *x = i;
+ *y = j;
+ if (heCanCut(*x, *y))
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ if ((j < maxPoint) && (i > 0) && (i < maxPoint))
+ {
+ if ((ndbord[i][j + 1] == -1) &&
+ (ndbord[i - 1][j + 1] == 1) &&
+ (ndbord[i + 1][j + 1] == 1) &&
+ (groupIDs[i - 1][j + 1] != groupIDs[i + 1][j + 1]))
+ {
+ *x = i;
+ *y = j;
+ if (heCanCut(*x, *y))
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+ } /* blockCut */
+
+
+ /*
+ cuts the enemy
+ */
+short cutHim(x, y)
+short *x, *y;
+ { /* cutHim */
+ short i, j, nap, gid;
+ playReason = "cutHim";
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if (legal[i][j])
+ {
+ nap = 0; /* how many of his stones am I adjacent to? */
+ if ((i > 0) && (ndbord[i - 1][j] == -1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i - 1;
+ pList.p[nap].py = j;
+ }
+ if ((j > 0) && (ndbord[i][j - 1] == -1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i;
+ pList.p[nap].py = j - 1;
+ }
+ if ((i < maxPoint) && (ndbord[i + 1][j] == -1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i + 1;
+ pList.p[nap].py = j;
+ }
+ if ((j < maxPoint) && (ndbord[i][j + 1] == -1))
+ {
+ nap = nap + 1;
+ pList.p[nap].px = i;
+ pList.p[nap].py = j + 1;
+ }
+ if (nap == 1) /* possible knight's or 2-point extention */
+ {
+ gid = groupIDs[pList.p[1].px][pList.p[1].py];
+ if ((i > 0) && (i < maxPoint) &&
+ (ndbord[i - 1][j] == -1) &&
+ (connectMap[i][j] > 0)) /* contact on left */
+ {
+ if (((j > 0) &&
+ (ndbord[i + 1][j - 1] == -1) &&
+ (gid != groupIDs[i + 1][j - 1])) ||
+ ((j < maxPoint) &&
+ (ndbord[i + 1][j + 1] == -1) &&
+ (gid != groupIDs[i + 1][j + 1])) ||
+ ((i < (maxPoint - 1)) &&
+ (ndbord[i + 1][j] == 0) &&
+ (ndbord[i + 2][j] == -1) &&
+ (gid != groupIDs[i + 2][j])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else if ((i < maxPoint) && (i > 0) &&
+ (ndbord[i + 1][j] == -1) &&
+ (connectMap[i][j] > 0)) /* r */
+ {
+ if (((j > 0) &&
+ (ndbord[i - 1][j - 1] == -1) &&
+ (gid != groupIDs[i - 1][j - 1])) ||
+ ((j < maxPoint) &&
+ (ndbord[i - 1][j + 1] == -1) &&
+ (gid != groupIDs[i - 1][j + 1])) ||
+ ((i > 1) &&
+ (ndbord[i - 1][j] == 0) &&
+ (ndbord[i - 2][j] == -1) &&
+ (gid != groupIDs[i - 2][j])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else if ((j > 0) && (j < maxPoint) &&
+ (ndbord[i][j - 1] == -1) &&
+ (connectMap[i][j] > 0)) /* top */
+ {
+ if (((i > 0) &&
+ (ndbord[i - 1][j + 1] == -1) &&
+ (gid != groupIDs[i - 1][j + 1])) ||
+ ((i < maxPoint) &&
+ (ndbord[i + 1][j + 1] == -1) &&
+ (gid != groupIDs[i + 1][j + 1])) ||
+ ((j < (maxPoint - 1)) &&
+ (ndbord[i][j + 1] == 0) &&
+ (ndbord[i][j + 2] == -1) &&
+ (gid != groupIDs[i][j + 2])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else if ((j > 0) && (j < maxPoint) &&
+ (ndbord[i][j + 1] == -1) &&
+ (connectMap[i][j] > 0)) /* bottom */
+ {
+ if (((i > 0) &&
+ (ndbord[i - 1][j - 1] == -1) &&
+ (gid != groupIDs[i - 1][j - 1])) ||
+ ((i < maxPoint) &&
+ (ndbord[i + 1][j - 1] == -1) &&
+ (gid != groupIDs[i + 1][j - 1])) ||
+ ((j > 1) &&
+ (ndbord[i][j - 1] == 0) &&
+ (ndbord[i][j - 2] == -1) &&
+ (gid != groupIDs[i][j - 2])))
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ }
+ else if (nap == 2) /* diagonal or 1-point extention */
+ {
+ if (groupIDs[pList.p[1].px][pList.p[1].py] !=
+ groupIDs[pList.p[2].px][pList.p[2].py])
+ {
+ if ((pList.p[1].px != pList.p[2].px) &&
+ (pList.p[1].py != pList.p[2].py)) /* diag */
+ {
+ spanGroup(pList.p[1].px,
+ pList.p[1].py, &pList1);
+ spanGroup(pList.p[2].px,
+ pList.p[2].py, &plist2);
+ intersectPlist(&pList1, &plist2, &plist3);
+ if (plist3.indx == 1)
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ else /* 1-point extension, only cut if connected */
+ {
+ if (connectMap[i][j] > 0)
+ {
+ *x = i;
+ *y = j;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ }
+ }
+ else if (nap == 3) /* unprotected, but him on 3 sides */
+ {
+ if ((groupIDs[pList.p[1].px][pList.p[1].py] !=
+ groupIDs[pList.p[2].px][pList.p[2].py]) ||
+ (groupIDs[pList.p[1].px][pList.p[1].py] !=
+ groupIDs[pList.p[3].px][pList.p[3].py]) ||
+ (groupIDs[pList.p[3].px][pList.p[3].py] !=
+ groupIDs[pList.p[2].px][pList.p[2].py]))
+ {
+ spanGroup(pList.p[1].px, pList.p[1].py, &pList1);
+ spanGroup(pList.p[2].px, pList.p[2].py, &plist2);
+ intersectPlist(&pList1, &plist2, &plist3);
+ spanGroup(pList.p[3].px, pList.p[3].py, &plist2);
+ intersectPlist(&plist2, &plist3, &pList1);
+ if (pList1.indx == 1) /* a common connect point */
+ if (safeMove(i, j))
+ {
+ *x = i;
+ *y = j;
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+ } /* cutHim */
+
+
+ /*
+ ataris a group just for the hell of it
+ */
+short atariAnyway(x, y)
+short *x, *y;
+ { /* atariAnyway */
+ short i;
+ playReason = "atariAnyway";
+ for (i = 1; i <= maxGroupID; i++) /* scan the group list */
+ if ((gList[i].libC == 2) &&
+ (ndbord[gList[i].lx][gList[i].ly] == -1))
+ {
+ spanGroup(gList[i].lx, gList[i].ly, &pList);
+ if (legal[pList.p[1].px][pList.p[1].py] &&
+ ((connectMap[pList.p[1].px][pList.p[1].py] > 0) ||
+ ((pList.p[1].px > 0) &&
+ (connectMap[pList.p[1].px - 1][pList.p[1].py] > 0)) ||
+ ((pList.p[1].px < maxPoint) &&
+ (connectMap[pList.p[1].px + 1][pList.p[1].py] > 0)) ||
+ ((pList.p[1].py > 0) &&
+ (connectMap[pList.p[1].px][pList.p[1].py - 1] > 0)) ||
+ ((pList.p[1].py < maxPoint) &&
+ (connectMap[pList.p[1].px][pList.p[1].py + 1] > 0))))
+ if (safeMove(pList.p[1].px, pList.p[1].py))
+ {
+ *x = pList.p[1].px;
+ *y = pList.p[1].py;
+ return TRUE;
+ }
+ if (legal[pList.p[2].px][pList.p[2].py] &&
+ ((connectMap[pList.p[2].px][pList.p[2].py] > 0) ||
+ ((pList.p[2].px > 0) &&
+ (connectMap[pList.p[2].px - 1][pList.p[2].py] > 0)) ||
+ ((pList.p[2].px < maxPoint) &&
+ (connectMap[pList.p[2].px + 1][pList.p[2].py] > 0)) ||
+ ((pList.p[2].py > 0) &&
+ (connectMap[pList.p[2].px][pList.p[2].py - 1] > 0)) ||
+ ((pList.p[2].py < maxPoint) &&
+ (connectMap[pList.p[2].px][pList.p[2].py + 1] > 0))))
+ if (safeMove(pList.p[2].px, pList.p[2].py))
+ {
+ *x = pList.p[2].px;
+ *y = pList.p[2].py;
+ return TRUE;
+ }
+ }
+ return FALSE;
+ } /* atariAnyway */
+
+
+ /*
+ undercuts his groups
+ */
+short underCut(x, y)
+short *x, *y;
+ { /* underCut */
+ short i, j;
+ playReason = "underCut";
+ for (i = 1; i <= maxPoint - 1; i++)
+ {
+ if (legal[0][i])
+ {
+ if (ndbord[1][i] == -1)
+ if (safeMove(0, i))
+ {
+ *x = 0;
+ *y = i;
+ return TRUE;
+ }
+ }
+ if (legal[maxPoint][i])
+ {
+ if (ndbord[maxPoint - 1][i] == -1)
+ if (safeMove(maxPoint, i))
+ {
+ *x = maxPoint;
+ *y = i;
+ return TRUE;
+ }
+ }
+ if (legal[i][0])
+ {
+ if (ndbord[i][1] == -1)
+ if (safeMove(i, 0))
+ {
+ *x = i;
+ *y = 0;
+ return TRUE;
+ }
+ }
+ if (legal[i][maxPoint])
+ {
+ if (ndbord[i][maxPoint - 1] == -1)
+ if (safeMove(i, maxPoint))
+ {
+ *x = i;
+ *y = maxPoint;
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+ } /* underCut */
+
+ /*
+ drops to the edge of the board if threatened
+ */
+short dropToEdge(x, y)
+short *x, *y;
+ { /* dropToEdge */
+ short i;
+ playReason = "dropToEdge";
+ for (i = 1; i <= maxPoint - 1; i++)
+ {
+ if (legal[1][i])
+ if ((ndbord[2][i] == 1) &&
+ (ndbord[0][i] == 0) &&
+ (ndbord[1][i - 1] < 1) &&
+ (ndbord[1][i + 1] < 1) &&
+ ((ndbord[2][i - 1] == -1) ||
+ (ndbord[2][i + 1] == -1) ||
+ (ndbord[1][i - 1] == -1) ||
+ (ndbord[1][i + 1] == -1)))
+ {
+ *x = 1;
+ *y = i;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ if (legal[maxPoint - 1][i])
+ if ((ndbord[maxPoint - 2][i] == 1) &&
+ (ndbord[maxPoint][i] == 0) &&
+ (ndbord[maxPoint - 1][i - 1] < 1) &&
+ (ndbord[maxPoint - 1][i + 1] < 1) &&
+ ((ndbord[maxPoint - 2][i - 1] == -1) ||
+ (ndbord[maxPoint - 2][i + 1] == -1) ||
+ (ndbord[maxPoint - 1][i - 1] == -1) ||
+ (ndbord[maxPoint - 1][i + 1] == -1)))
+ {
+ *x = maxPoint - 1;
+ *y = i;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ if (legal[i][1])
+ if ((ndbord[i][2] == 1) &&
+ (ndbord[i][0] == 0) &&
+ (ndbord[i - 1][1] < 1) &&
+ (ndbord[i + 1][1] < 1) &&
+ ((ndbord[i - 1][2] == -1) ||
+ (ndbord[i + 1][2] == -1) ||
+ (ndbord[i - 1][1] == -1) ||
+ (ndbord[i + 1][1] == -1)))
+ {
+ *x = i;
+ *y = 1;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ if (legal[i][maxPoint - 1])
+ if ((ndbord[i][maxPoint - 2] == 1) &&
+ (ndbord[i][maxPoint] == 0) &&
+ (ndbord[i - 1][maxPoint - 1] < 1) &&
+ (ndbord[i + 1][maxPoint - 1] < 1) &&
+ ((ndbord[i - 1][maxPoint - 2] == -1) ||
+ (ndbord[i + 1][maxPoint - 2] == -1) ||
+ (ndbord[i - 1][maxPoint - 1] == -1) ||
+ (ndbord[i + 1][maxPoint - 1] == -1)))
+ {
+ *x = i;
+ *y = maxPoint - 1;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ if (legal[0][i])
+ if ((ndbord[1][i] == 1) &&
+ (ndbord[0][i - 1] < 1) &&
+ (ndbord[0][i + 1] < 1) &&
+ (((ndbord[1][i - 1] == -1) &&
+ (ndbord[1][i + 1] == -1)) ||
+ (ndbord[0][i - 1] == -1) ||
+ (ndbord[0][i + 1] == -1)))
+ {
+ *x = 0;
+ *y = i;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ if (legal[maxPoint][i])
+ if ((ndbord[maxPoint - 1][i] == 1) &&
+ (ndbord[maxPoint][i - 1] < 1) &&
+ (ndbord[maxPoint][i + 1] < 1) &&
+ (((ndbord[maxPoint - 1][i - 1] == -1) &&
+ (ndbord[maxPoint - 1][i + 1] == -1)) ||
+ (ndbord[maxPoint][i - 1] == -1) ||
+ (ndbord[maxPoint][i + 1] == -1)))
+ {
+ *x = maxPoint;
+ *y = i;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ if (legal[i][0])
+ if ((ndbord[i][1] == 1) &&
+ (ndbord[i - 1][0] < 1) &&
+ (ndbord[i + 1][0] < 1) &&
+ (((ndbord[i - 1][1] == -1) &&
+ (ndbord[i + 1][1] == -1)) ||
+ (ndbord[i - 1][0] == -1) ||
+ (ndbord[i + 1][0] == -1)))
+ {
+ *x = i;
+ *y = 0;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ if (legal[i][maxPoint])
+ if ((ndbord[i][maxPoint - 1] == 1) &&
+ (ndbord[i - 1][maxPoint] < 1) &&
+ (ndbord[i + 1][maxPoint] < 1) &&
+ (((ndbord[i - 1][maxPoint - 1] == -1) &&
+ (ndbord[i + 1][maxPoint - 1] == -1)) ||
+ (ndbord[i - 1][maxPoint] == -1) ||
+ (ndbord[i + 1][maxPoint] == -1)))
+ {
+ *x = i;
+ *y = maxPoint;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ return FALSE;
+ } /* dropToEdge */
+
+ /*
+ Pushes walls in a tightly connected fashion.
+ Finds the lowest influence (mine) point that is connected to one
+ of my groups.
+ */
+short pushWall(x, y)
+short *x, *y;
+ { /* pushWall */
+ short infl, i, j, na;
+ playReason = "pushWall";
+ *x = iNil;
+ *y = iNil;
+ infl = 11;
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if (legal[i][j])
+ if (connectMap[i][j] > 0)
+ if ((claim[i][j] < infl) &&
+ (((i > 0) && (ndbord[i - 1][j] == 1)) ||
+ ((i < maxPoint) && (ndbord[i + 1][j] == 1)) ||
+ ((j > 0) && (ndbord[i][j - 1] == 1)) ||
+ ((j < maxPoint) && (ndbord[i][j + 1] == 1)) ||
+ ((i > 0) && (j > 0) && (ndbord[i - 1][j - 1] == 1)) ||
+ ((i < maxPoint) && (j > 0) && (ndbord[i + 1][j - 1] == 1)) ||
+ ((i > 0) && (j < maxPoint) && (ndbord[i - 1][j + 1] == 1)) ||
+ ((i < maxPoint) && (j < maxPoint) &&
+ (ndbord[i + 1][j + 1] == 1))) &&
+ (((i > 0) && (claim[i - 1][j] < 0)) ||
+ ((i < maxPoint) && (claim[i + 1][j] < 0)) ||
+ ((j > 0) && (claim[i][j - 1] < 0)) ||
+ ((j < maxPoint) && (claim[i][j + 1] < 0))))
+ {
+ na = 0;
+ if ((i > 0) && (ndbord[i - 1][j] != 0))
+ na = na + 1;
+ if ((i < maxPoint) && (ndbord[i + 1][j] != 0))
+ na = na + 1;
+ if ((j > 0) && (ndbord[i][j - 1] != 0))
+ na = na + 1;
+ if ((j < maxPoint) && (ndbord[i][j + 1] != 0))
+ na = na + 1;
+ if (na < 3)
+ if (safeMove(i, j))
+ {
+ infl = claim[i][j];
+ *x = i;
+ *y = j;
+ }
+ }
+ if (*x != iNil) return TRUE;
+ return FALSE;
+ } /* pushWall */
+
+
+ /*
+ reduces the liberty count of one of his groups
+ */
+short reduceHisLiberties(x, y)
+short *x, *y;
+ { /* reduceHisLiberties */
+ short i, j;
+ playReason = "reduceHisLiberties";
+ sortLibs();
+ for (i = 1; i <= maxGroupID; i++)
+ if ((! gList[sGlist[i]].isLive) &&
+ (gList[sGlist[i]].libC > 2) &&
+ (ndbord[gList[sGlist[i]].lx][gList[sGlist[i]].ly] == -1))
+ {
+ spanGroup(gList[sGlist[i]].lx, gList[sGlist[i]].ly, &pList);
+ for (j = 1; j <= pList.indx; j++)
+ if (legal[pList.p[j].px][pList.p[j].py] &&
+ (connectMap[pList.p[j].px][pList.p[j].py] > 0))
+ if (safeMove(pList.p[j].px, pList.p[j].py))
+ {
+ *x = pList.p[j].px;
+ *y = pList.p[j].py;
+ return TRUE;
+ }
+ }
+ return FALSE;
+ } /* reduceHisLiberties */
+
+
+ /*
+ connects a group to the edge
+ */
+short dropToEdge2(x, y)
+short *x, *y;
+ { /* dropToEdge2 */
+ short i;
+ playReason = "dropToEdge2";
+ for (i = 1; i <= maxPoint - 1; i++)
+ {
+ if (legal[i][0])
+ {
+ if ((ndbord[i][1] == 1) &&
+ ((ndbord[i - 1][0] < 1) ||
+ (groupIDs[i - 1][0] != groupIDs[i][1])) &&
+ ((ndbord[i + 1][0] < 1) ||
+ (groupIDs[i + 1][0] != groupIDs[i][1])) &&
+ ((ndbord[i - 1][1] == -1) ||
+ (ndbord[i + 1][1] == -1)))
+ {
+ *x = i;
+ *y = 0;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ if (legal[0][i])
+ {
+ if ((ndbord[1][i] == 1) &&
+ ((ndbord[0][i - 1] < 1) ||
+ (groupIDs[0][i - 1] != groupIDs[1][i])) &&
+ ((ndbord[0][i + 1] < 1) ||
+ (groupIDs[0][i + 1] != groupIDs[1][i])) &&
+ ((ndbord[1][i - 1] == -1) ||
+ (ndbord[1][i + 1] == -1)))
+ {
+ *x = 0;
+ *y = i;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ if (legal[i][maxPoint])
+ {
+ if ((ndbord[i][maxPoint - 1] == 1) &&
+ ((ndbord[i - 1][maxPoint] < 1) ||
+ (groupIDs[i - 1][maxPoint] != groupIDs[i][maxPoint - 1])) &&
+ ((ndbord[i + 1][maxPoint] < 1) ||
+ (groupIDs[i + 1][maxPoint] != groupIDs[i][maxPoint - 1])) &&
+ ((ndbord[i - 1][maxPoint - 1] == -1) ||
+ (ndbord[i + 1][maxPoint - 1] == -1)))
+ {
+ *x = i;
+ *y = maxPoint;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ if (legal[maxPoint][i])
+ {
+ if ((ndbord[maxPoint - 1][i] == 1) &&
+ ((ndbord[maxPoint][i - 1] < 1) ||
+ (groupIDs[maxPoint][i - 1] != groupIDs[maxPoint - 1][i])) &&
+ ((ndbord[maxPoint][i + 1] < 1) ||
+ (groupIDs[maxPoint][i + 1] != groupIDs[maxPoint - 1][i])) &&
+ ((ndbord[maxPoint - 1][i - 1] == -1) ||
+ (ndbord[maxPoint - 1][i + 1] == -1)))
+ {
+ *x = maxPoint;
+ *y = i;
+ if (safeMove(*x, *y))
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+ } /* dropToEdge2 */
+
diff --git a/noncore/games/go/goplayutils.c b/noncore/games/go/goplayutils.c
new file mode 100644
index 0000000..9e2ce4c
--- a/dev/null
+++ b/noncore/games/go/goplayutils.c
@@ -0,0 +1,1317 @@
+/* The go player utilities */
+/* Ported from Pascal to C by Todd R. Johnson */
+/* From the original Pascal file:
+Copyright (c) 1983 by Three Rivers Computer Corp.
+
+Written: January 17, 1983 by Stoney Ballard
+*/
+
+#include "goplayutils.h"
+#include "amigo.h"
+#include "go.h"
+
+extern struct bRec goboard[19][19];
+
+intBoard claim, extra, bord, ndbord, sGroups, threatBord,
+ groupIDs, connectMap, protPoints;
+boolBoard groupSeen, legal;
+short maxGroupID;
+pointList pList, pList1, plist2, plist3, pPlist;
+intList nlcGroup, aList;
+sgRec sList[401];
+groupRec gList[maxGroup];
+short killFlag,
+ numCapt,
+ utilPlayLevel,
+ treeLibLim;
+sType mySType;
+short showTrees;
+short sGlist[maxGroup+1];
+short depthLimit;
+intBoard markBoard;
+short marker;
+
+short adjInAtari, adj2Libs,
+ intersectNum, spanNum, libMark;
+playRec playStack[1025];
+short playMark,
+ newGID,
+ tryLevel,
+ grpMark,
+ gMap[maxGroup];
+short dbStop, inGenState;
+
+ pause()
+{ /* pause */
+/* if (dbStop and ! inGenState)
+ {
+ while ! tabswitch do;
+ repeat
+ if (tabYellow)
+ dbStop = false;
+ until ! tabswitch;
+ } */
+} /* pause */
+
+sstone(w, x, y, numb)
+short w, x, y, numb;
+{ /* sstone */
+ if (w == 1)
+ placestone(mySType, x, y);
+ else if (mySType == WHITE)
+ placestone(BLACK, x, y);
+ else
+ placestone(WHITE, x, y);
+} /* sstone */
+
+rstone(x, y)
+short x, y;
+{ /* rstone */
+ removestone(x, y);
+} /* rstone */
+
+initBoolBoard(bb)
+boolBoard bb;
+{ /* initBoolBoard */
+ short i, j;
+#ifdef DEBUG
+ printf( "initBoolBoard\n" );
+#endif
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ bb[i][j] = FALSE;
+} /* initBoolBoard */
+
+sortLibs()
+{ /* sortLibs */
+ short i, j, t;
+#ifdef DEBUG
+ printf( "sortLibs\n" );
+#endif
+ for (i = 1; i <= maxGroupID; i++)
+ sGlist[i] = i;
+ for (i = 1; i < maxGroupID; i++)
+ for (j = i + 1; j <= maxGroupID; j++)
+ if (gList[sGlist[i]].libC > gList[sGlist[j]].libC)
+ {
+ t = sGlist[i];
+ sGlist[i] = sGlist[j];
+ sGlist[j] = t;
+ }
+} /* sortLibs */
+
+spanGroupspan(x, y, libs, lookFor)
+short x, y, lookFor;
+pointList *libs;
+ { /* span */
+ markBoard[x][y] = marker;
+ if (bord[x][y] == 0)
+ {
+ libs->indx = libs->indx + 1;
+ libs->p[libs->indx].px = x;
+ libs->p[libs->indx].py = y;
+ }
+ else if (bord[x][y] == lookFor)
+ {
+ groupSeen[x][y] = TRUE;
+ if ((x > 0) && (markBoard[x - 1][y] != marker))
+ spanGroupspan(x - 1, y, libs, lookFor);
+ if ((y > 0) && (markBoard[x][y - 1] != marker))
+ spanGroupspan(x, y - 1, libs, lookFor);
+ if ((x < maxPoint) && (markBoard[x + 1][y] != marker))
+ spanGroupspan(x + 1, y, libs, lookFor);
+ if ((y < maxPoint) && (markBoard[x][y + 1] != marker))
+ spanGroupspan(x, y + 1, libs, lookFor);
+ }
+ else if (gList[gMap[groupIDs[x][y]]].libC == 1)
+ adjInAtari = TRUE;
+ else if ((gList[gMap[groupIDs[x][y]]].libC == 2) &&
+ (! gList[gMap[groupIDs[x][y]]].isLive))
+ adj2Libs = TRUE;
+ } /* span */
+
+spanGroup(x, y, libs)
+short x, y;
+pointList *libs;
+{ /* spanGroup */
+ short lookFor;
+#ifdef DEBUG
+ printf( "spanGroup\n" );
+#endif
+ marker = marker + 1;
+ if (marker == 0)
+ {
+ initArray(markBoard);
+ marker = 1;
+ }
+ adjInAtari = FALSE;
+ adj2Libs = FALSE;
+ lookFor = bord[x][y];
+ libs->indx = 0;
+ spanGroupspan(x, y, libs, lookFor);
+} /* spanGroup */
+
+sSpanGroupspan(x, y, libs, lookFor)
+short x, y, lookFor;
+sPointList *libs;
+ { /* span */
+ markBoard[x][y] = marker;
+ if (bord[x][y] == 0)
+ {
+ libs->indx += 1;
+ if (libs->indx <= maxSPoint)
+ {
+ libs->p[libs->indx].px = x;
+ libs->p[libs->indx].py = y;
+ }
+ }
+ else if (bord[x][y] == lookFor)
+ {
+ groupSeen[x][y] = TRUE;
+ if ((x > 0) && (markBoard[x - 1][y] != marker))
+ sSpanGroupspan(x - 1, y, libs, lookFor);
+ if ((y > 0) && (markBoard[x][y - 1] != marker))
+ sSpanGroupspan(x, y - 1, libs, lookFor);
+ if ((x < maxPoint) && (markBoard[x + 1][y] != marker))
+ sSpanGroupspan(x + 1, y, libs, lookFor);
+ if ((y < maxPoint) && (markBoard[x][y + 1] != marker))
+ sSpanGroupspan(x, y + 1, libs, lookFor);
+ }
+ else if (gList[gMap[groupIDs[x][y]]].libC == 1)
+ adjInAtari = TRUE;
+ else if ((gList[gMap[groupIDs[x][y]]].libC == 2) &&
+ (! gList[gMap[groupIDs[x][y]]].isLive))
+ adj2Libs = TRUE;
+ } /* span */
+
+sSpanGroup(x, y, libs)
+short x, y;
+sPointList *libs;
+{ /* sSpanGroup */
+ short lookFor;
+#ifdef DEBUG
+ printf( "sSpanGroup\n" );
+#endif
+ marker = marker + 1;
+ if (marker == 0)
+ {
+ initArray(markBoard);
+ marker = 1;
+ }
+ adjInAtari = FALSE;
+ adj2Libs = FALSE;
+ lookFor = bord[x][y];
+ libs->indx = 0;
+ sSpanGroupspan(x, y, libs, lookFor);
+} /* sSpanGroup */
+
+LAspan(x, y, me, him, iL)
+short x, y, me, him;
+intList *iL;
+ { /* span */
+#ifdef DEBUG
+ printf( "LAspan\n" );
+#endif
+ markBoard[x][y] = marker;
+ if (bord[x][y] == me)
+ {
+ if ((x > 0) && (markBoard[x - 1][y] != marker))
+ LAspan(x - 1, y, me, him, iL);
+ if ((x < maxPoint) && (markBoard[x + 1][y] != marker))
+ LAspan(x + 1, y, me, him, iL);
+ if ((y > 0) && (markBoard[x][y - 1] != marker))
+ LAspan(x, y - 1, me, him, iL);
+ if ((y < maxPoint) && (markBoard[x][y + 1] != marker))
+ LAspan(x, y + 1, me, him, iL);
+ }
+ else if (bord[x][y] == him)
+ if (gList[gMap[groupIDs[x][y]]].groupMark != grpMark)
+ {
+ gList[gMap[groupIDs[x][y]]].groupMark = grpMark;
+ iL->indx = iL->indx + 1;
+ iL->v[iL->indx] = gMap[groupIDs[x][y]];
+ }
+ } /* span */
+
+listAdjacents(x, y, iL)
+short x, y;
+intList *iL;
+{ /* listAdjacents */
+ short me, him;
+#ifdef DEBUG
+ printf( "listAdjacents\n" );
+#endif
+ grpMark = grpMark + 1;
+ marker = marker + 1;
+ if (marker == 0)
+ {
+ initArray(markBoard);
+ marker = 1;
+ }
+ iL->indx = 0;
+ me = bord[x][y];
+ him = -me;
+ LAspan(x, y, me , him, iL);
+} /* listAdjacents */
+
+LDspan(x, y, me, diags)
+short x, y, me;
+sPointList *diags;
+ { /* span */
+#ifdef DEBUG
+ printf( "LDspan\n" );
+#endif
+ markBoard[x][y] = marker;
+ if ((x > 0) && (y > 0) &&
+ (bord[x - 1][y - 1] == 0) &&
+ (bord[x][y - 1] != me) &&
+ (bord[x - 1][y] != me) &&
+ (markBoard[x - 1][y - 1] != marker))
+ {
+ markBoard[x - 1][y - 1] = marker;
+ diags->indx = diags->indx + 1;
+ if (diags->indx <= maxSPoint)
+ {
+ diags->p[diags->indx].px = x - 1;
+ diags->p[diags->indx].py = y - 1;
+ }
+ }
+ if ((x < maxPoint) && (y > 0) &&
+ (bord[x + 1][y - 1] == 0) &&
+ (bord[x][y - 1] != me) &&
+ (bord[x + 1][y] != me) &&
+ (markBoard[x + 1][y - 1] != marker))
+ {
+ markBoard[x + 1][y - 1] = marker;
+ diags->indx = diags->indx + 1;
+ if (diags->indx <= maxSPoint)
+ {
+ diags->p[diags->indx].px = x + 1;
+ diags->p[diags->indx].py = y - 1;
+ }
+ }
+ if ((x > 0) && (y < maxPoint) &&
+ (bord[x - 1][y + 1] == 0) &&
+ (bord[x][y + 1] != me) &&
+ (bord[x - 1][y] != me) &&
+ (markBoard[x - 1][y + 1] != marker))
+ {
+ markBoard[x - 1][y + 1] = marker;
+ diags->indx = diags->indx + 1;
+ if (diags->indx <= maxSPoint)
+ {
+ diags->p[diags->indx].px = x - 1;
+ diags->p[diags->indx].py = y + 1;
+ }
+ }
+ if ((x < maxPoint) && (y < maxPoint) &&
+ (bord[x + 1][y + 1] == 0) &&
+ (bord[x][y + 1] != me) &&
+ (bord[x + 1][y] != me) &&
+ (markBoard[x + 1][y + 1] != marker))
+ {
+ markBoard[x + 1][y + 1] = marker;
+ diags->indx = diags->indx + 1;
+ if (diags->indx <= maxSPoint)
+ {
+ diags->p[diags->indx].px = x + 1;
+ diags->p[diags->indx].py = y + 1;
+ }
+ }
+ if ((x > 0) && (bord[x - 1][y] == me) &&
+ (markBoard[x - 1][y] != marker))
+ LDspan(x - 1, y, me, diags);
+ if ((x < maxPoint) && (bord[x + 1][y] == me) &&
+ (markBoard[x + 1][y] != marker))
+ LDspan(x + 1, y, me, diags);
+ if ((y > 0) && (bord[x][y - 1] == me) &&
+ (markBoard[x][y - 1] != marker))
+ LDspan(x, y - 1, me, diags);
+ if ((y < maxPoint) && (bord[x][y + 1] == me) &&
+ (markBoard[x][y + 1] != marker))
+ LDspan(x, y + 1, me , diags);
+} /* span */
+
+listDiags(x, y, diags)
+short x, y;
+sPointList *diags;
+{ /* listDiags */
+ short me;
+#ifdef DEBUG
+ printf( "listDiags\n" );
+#endif
+ me = bord[x][y];
+ diags->indx = 0;
+ marker = marker + 1;
+ if (marker == 0)
+ {
+ initArray(markBoard);
+ marker = 1;
+ }
+ LDspan(x, y, me, diags);
+} /* listDiags */
+
+intersectPlist(p1, p2, pr)
+pointList *p1, *p2, *pr;
+{ /* intersectPlist */
+ short i, j, k;
+#ifdef DEBUG
+ printf( "intersectPlist\n" );
+#endif
+ marker = marker + 1;
+ if (marker == 0)
+ {
+ initArray(markBoard);
+ marker = 1;
+ }
+ pr->indx = 0;
+ for (i = 1; i <= p1->indx; i++)
+ markBoard[p1->p[i].px][p1->p[i].py] = marker;
+ j = 0;
+ for (i = 1; i <= p2->indx; i++)
+ if (markBoard[p2->p[i].px][p2->p[i].py] == marker)
+ {
+ j = j + 1;
+ pr->p[j] = p2->p[i];
+ }
+ pr->indx = j;
+} /* intersectPlist */
+
+initArray(ary)
+intBoard ary;
+{ /* initArray */
+ short i, j;
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ ary[i][j] = 0;
+} /* initArray */
+
+initState()
+{ /* initState */
+ short i, j;
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ {
+ extra[i][j] = 0;
+ claim[i][j] = 0;
+ groupIDs[i][j] = 0;
+ connectMap[i][j] = 0;
+ protPoints[i][j] = 0;
+ }
+} /* initState */
+
+copyArray( dest, src )
+intBoard dest, src;
+{
+ short x, y;
+ for (y = 0; y <= maxPoint; y++)
+ for (x = 0; x <= maxPoint; x++)
+ dest[x][y] = src[x][y];
+}
+
+/*
+ generates a one-point spread in the force field array (claim)
+
+ the spread from a single point after four calls is:
+
+ 1
+ 2 2 2
+ 2 4 6 4 2
+ 2 4 8 10 8 4 2
+ 1 2 6 10 62 10 6 2 1
+ 2 4 8 10 8 4 2
+ 2 4 6 4 2
+ 2 2 2
+ 1
+
+*/
+stake()
+{
+ short x, y;
+ initArray( extra );
+ for (y = 0; y <= maxPoint; y++)
+ for (x = 0; x <= maxPoint; x++)
+ {
+ extra[x][y] = extra[x][y] + claim[x][y];
+ if (claim[x][y] > 0)
+ {
+ if (x > 0) extra[x-1][y] += 1;
+ if (y > 0) extra[x][y-1] += 1;
+ if (x < maxPoint) extra[x+1][y] += 1;
+ if (y < maxPoint) extra[x][y+1] += 1;
+ }
+ else if (claim[x][y] < 0)
+ {
+ if (x > 0) extra[x-1][y] -= 1;
+ if (y > 0) extra[x][y-1] -= 1;
+ if (x < maxPoint) extra[x+1][y] -= 1;
+ if (y < maxPoint) extra[x][y+1] -= 1;
+ }
+ }
+ copyArray( claim, extra );
+} /* stake */
+
+/*
+ sets up claim from the current board position
+*/
+spread()
+{
+ short x, y;
+ for (y = 0; y <= maxPoint; y++)
+ for (x = 0; x <= maxPoint; x++)
+ claim[x][y] = ndbord[x][y] * 50;
+ stake();
+ stake();
+ stake();
+ stake();
+} /* spread */
+
+/*
+ gList is initialized with the size, loc, and libCount of each group
+ groupIDs contains the serial numbers of the groups.
+*/
+Resspan(x, y, gID, gSize, libCount, who)
+short x, y, gID, *gSize, *libCount, who;
+ { /* span */
+ if ((bord[x][y] == 0) &&
+ (markBoard[x][y] != marker)) /* a liberty */
+ {
+ markBoard[x][y] = marker;
+ *libCount = *libCount + 1;
+ }
+ else if ((bord[x][y] == who) &&
+ (groupIDs[x][y] == 0))
+ {
+ groupIDs[x][y] = gID;
+ *gSize = *gSize + 1;
+ if (x > 0)
+ Resspan(x - 1, y, gID, gSize, libCount, who);
+ if (x < maxPoint)
+ Resspan(x + 1, y, gID, gSize, libCount, who);
+ if (y > 0)
+ Resspan(x, y - 1, gID, gSize, libCount, who);
+ if (y < maxPoint)
+ Resspan(x, y + 1, gID, gSize, libCount, who);
+ }
+ } /* span */
+
+respreicen()
+{ /* respreicen */
+ short i, j, gID, libCount, gSize, who;
+ gID = 0;
+#ifdef DEBUG
+ printf( "respreicen\n" );
+#endif
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ groupIDs[i][j] = 0;
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if ((bord[i][j] != 0) && /* a stone there */
+ (groupIDs[i][j] == 0)) /* not seen yet */
+ {
+ marker = marker + 1;
+ if (marker == 0)
+ {
+ initArray(markBoard);
+ marker = 1;
+ }
+ gID = gID + 1;
+ libCount = 0;
+ gSize = 0;
+ who = bord[i][j];
+ Resspan(i, j, gID, &gSize, &libCount, who); /* span the group, collecting info */
+ gList[gID].groupMark = 0;
+ gList[gID].atLevel = 0;
+ gList[gID].isLive = FALSE; /* we don't know yet */
+ gList[gID].isDead = FALSE;
+ gList[gID].numEyes = -1;
+ gList[gID].size = gSize;
+ gList[gID].libC = libCount;
+ gList[gID].lx = i;
+ gList[gID].ly = j;
+ gMap[gID] = gID; /* set up identity map */
+ }
+ maxGroupID = gID;
+ newGID = gID;
+ grpMark = 0;
+} /* respreicen */
+
+/*
+ play z at [x, y].
+ killFlag is set true if anything is killed.
+*/
+killGroup(x, y, me, him)
+short x, y, me, him;
+ { /* killGroup */
+#ifdef DEBUG
+ printf( "killGroup\n" );
+#endif
+ playMark = playMark + 1;
+ /* record this kill */
+ playStack[playMark].kind = rem;
+ playStack[playMark].uval.rem.who = him;
+ playStack[playMark].uval.rem.xl = x;
+ playStack[playMark].uval.rem.yl = y;
+ playStack[playMark].gID = groupIDs[x][y];
+ playStack[playMark].uval.rem.sNumber = goboard[x][y].mNum;
+ if (showTrees)
+ rstone(x, y);
+ numCapt = numCapt + 1;
+ bord[x][y] = 0;
+ groupIDs[x][y] = 0;
+ if (x > 0)
+ {
+ if (bord[x - 1][y] == me)
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x - 1][y]];
+ }
+ else if (bord[x - 1][y] == him)
+ killGroup(x - 1, y, me , him);
+ }
+ if (x < maxPoint)
+ {
+ if (bord[x + 1][y] == me)
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x + 1][y]];
+ }
+ else if (bord[x + 1][y] == him)
+ killGroup(x + 1, y, me, him);
+ }
+ if (y > 0)
+ {
+ if (bord[x][y - 1] == me)
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x][y - 1]];
+ }
+ else if (bord[x][y - 1] == him)
+ killGroup(x, y - 1, me, him);
+ }
+ if (y < maxPoint)
+ {
+ if (bord[x][y + 1] == me)
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x][y + 1]];
+ }
+ else if (bord[x][y + 1] == him)
+ killGroup(x, y + 1, me, him);
+ }
+ } /* killGroup */
+
+mergeGroup(sGID, myGID)
+short sGID, myGID;
+ { /* mergeGroup */
+ short i;
+#ifdef DEBUG
+ printf( "mergeGroup\n" );
+#endif
+ for (i = 1; i <= newGID; i++)
+ if (gMap[i] == sGID)
+ {
+ playMark = playMark + 1;
+ playStack[playMark].kind = reMap;
+ playStack[playMark].gID = i;
+ playStack[playMark].uval.reMap.oldGID = sGID;
+ gMap[i] = myGID;
+ }
+ } /* mergeGroup */
+
+tryPlay(x, y, z)
+short x, y, z;
+{ /* plei */
+ short i, me, him, myGID;
+ short isNew;
+#ifdef DEBUG
+ printf( "tryPlay\n" );
+#endif
+ me = z;
+ him = -me;
+ killFlag = FALSE; /* set true if something is killed */
+ numCapt = 0;
+ tryLevel = tryLevel + 1;
+ isNew = FALSE;
+ bord[x][y] = z; /* play the stone */
+ if ((x > 0) && (bord[x - 1][y] == me)) /* connect to adjacent group */
+ myGID = gMap[groupIDs[x - 1][y]];
+ else if ((x < maxPoint) && (bord[x + 1][y] == me))
+ myGID = gMap[groupIDs[x + 1][y]];
+ else if ((y > 0) && (bord[x][y - 1] == me))
+ myGID = gMap[groupIDs[x][y - 1]];
+ else if ((y < maxPoint) && (bord[x][y + 1] == me))
+ myGID = gMap[groupIDs[x][y + 1]];
+ else /* nobody to connect to */
+ {
+ newGID = newGID + 1;
+ isNew = TRUE;
+ myGID = newGID;
+ gList[myGID].groupMark = 0;
+ gList[myGID].atLevel = tryLevel;
+ gList[myGID].isLive = FALSE;
+ gList[myGID].numEyes = -1;
+ gList[myGID].size = -1;
+ gList[myGID].lx = x;
+ gList[myGID].ly = y;
+ gMap[myGID] = myGID;
+ }
+ groupIDs[x][y] = myGID;
+ playMark = playMark + 1;
+ /* record this move */
+ playStack[playMark].kind = add;
+ playStack[playMark].uval.add.who = me;
+ playStack[playMark].uval.add.xl = x;
+ playStack[playMark].uval.add.yl = y;
+ playStack[playMark].gID = myGID;
+ playStack[playMark].uval.add.sNumber = 0;
+ if (isNew)
+ playStack[playMark].uval.add.nextGID = newGID - 1;
+ else
+ playStack[playMark].uval.add.nextGID = newGID;
+ if (showTrees)
+ sstone(me, x, y, 0);
+ /* merge adjacent groups */
+ if ((x > 0) && (bord[x - 1][y] == me) &&
+ (gMap[groupIDs[x - 1][y]] != myGID))
+ mergeGroup(gMap[groupIDs[x - 1][y]], myGID);
+ if ((x < maxPoint) && (bord[x + 1][y] == me) &&
+ (gMap[groupIDs[x + 1][y]] != myGID))
+ mergeGroup(gMap[groupIDs[x + 1][y]], myGID);
+ if ((y > 0) && (bord[x][y - 1] == me) &&
+ (gMap[groupIDs[x][y - 1]] != myGID))
+ mergeGroup(gMap[groupIDs[x][y - 1]], myGID);
+ if ((y < maxPoint) && (bord[x][y + 1] == me) &&
+ (gMap[groupIDs[x][y + 1]] != myGID))
+ mergeGroup(gMap[groupIDs[x][y + 1]], myGID);
+ /* kill opposing groups, listing affected groups */
+ nlcGroup.indx = 1;
+ nlcGroup.v[1] = myGID; /* init list to include me */
+ if ((x > 0) && (bord[x - 1][y] == him) &&
+ (gList[gMap[groupIDs[x - 1][y]]].libC == 1))
+ {
+ killFlag = TRUE;
+ killGroup(x - 1, y, me, him);
+ }
+ if ((x < maxPoint) && (bord[x + 1][y] == him) &&
+ (gList[gMap[groupIDs[x + 1][y]]].libC == 1))
+ {
+ killFlag = TRUE;
+ killGroup(x + 1, y, me, him);
+ }
+ if ((y > 0) && (bord[x][y - 1] == him) &&
+ (gList[gMap[groupIDs[x][y - 1]]].libC == 1))
+ {
+ killFlag = TRUE;
+ killGroup(x, y - 1, me, him);
+ }
+ if ((y < maxPoint) && (bord[x][y + 1] == him) &&
+ (gList[gMap[groupIDs[x][y + 1]]].libC == 1))
+ {
+ killFlag = TRUE;
+ killGroup(x, y + 1, me, him);
+ }
+ /* list groups adjacent to me */
+ if ((x > 0) && (bord[x - 1][y] == him))
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x - 1][y]];
+ }
+ if ((x < maxPoint) && (bord[x + 1][y] == him))
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x + 1][y]];
+ }
+ if ((y > 0) && (bord[x][y - 1] == him))
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x][y - 1]];
+ }
+ if ((y < maxPoint) && (bord[x][y + 1] == him))
+ {
+ nlcGroup.indx = nlcGroup.indx + 1;
+ nlcGroup.v[nlcGroup.indx] = gMap[groupIDs[x][y + 1]];
+ }
+ /* fix liberty count for affected groups */
+ grpMark = grpMark + 1;
+ for (i = 1; i <= nlcGroup.indx; i++)
+ if (gList[nlcGroup.v[i]].groupMark != grpMark)
+ {
+ if (gList[nlcGroup.v[i]].atLevel != tryLevel)
+ {
+ playMark = playMark + 1;
+ playStack[playMark].kind = chLib;
+ playStack[playMark].gID = nlcGroup.v[i];
+ playStack[playMark].uval.chLib.oldLevel =
+ gList[nlcGroup.v[i]].atLevel;
+ playStack[playMark].uval.chLib.oldLC =
+ gList[nlcGroup.v[i]].libC;
+ }
+ gList[nlcGroup.v[i]].groupMark = grpMark;
+ gList[nlcGroup.v[i]].atLevel = tryLevel;
+ spanGroup(gList[nlcGroup.v[i]].lx, gList[nlcGroup.v[i]].ly, &pPlist);
+ gList[nlcGroup.v[i]].libC = pPlist.indx;
+ }
+} /* plei */
+
+saveState()
+{ /* saveState */
+ playMark = 0;
+ tryLevel = 0;
+ newGID = maxGroupID;
+} /* saveState */
+
+/*
+ undoes a move sequence back to uMark
+*/
+undoTo(uMark)
+short uMark;
+{ /* undoTo */
+ short i, xl, yl;
+#ifdef DEBUG
+ printf( "undoTo\n" );
+#endif
+ for (i = playMark; i >= uMark + 1; i--)
+ if (playStack[i].kind == rem)
+ {
+ xl = playStack[i].uval.rem.xl;
+ yl = playStack[i].uval.rem.yl;
+ bord[xl][yl] = playStack[i].uval.rem.who;
+ groupIDs[xl][yl] = playStack[i].gID;
+ if (showTrees)
+ sstone(playStack[i].uval.rem.who, xl, yl,
+ playStack[i].uval.rem.sNumber);
+ }
+ else if (playStack[i].kind == add)
+ {
+ xl = playStack[i].uval.add.xl;
+ yl = playStack[i].uval.add.yl;
+ bord[xl][yl] = 0;
+ groupIDs[xl][yl] = 0;
+ tryLevel = tryLevel - 1;
+ newGID = playStack[i].uval.add.nextGID;
+ if (showTrees)
+ rstone(xl, yl);
+ }
+ else if (playStack[i].kind == reMap)
+ gMap[playStack[i].gID] = playStack[i].uval.reMap.oldGID;
+ else /* change libs of group - gID is pre-mapped */
+ {
+ gList[playStack[i].gID].libC = playStack[i].uval.chLib.oldLC;
+ gList[playStack[i].gID].atLevel = playStack[i].uval.chLib.oldLevel;
+ }
+ playMark = uMark;
+} /* undoTo */
+
+/*
+ restores the state of the world after trying a move sequence
+*/
+restoreState()
+{ /* restoreState */
+#ifdef DEBUG
+ printf( "restoreState\n" );
+#endif
+ if (playMark > 0)
+ {
+ undoTo(0);
+ playMark = 0;
+ tryLevel = 0;
+ }
+} /* restoreState */
+
+/* exception bpt; */
+
+
+/*
+ returns true if (the group (at gx, gy) is saveable.
+ if so, returns the point to play at in savex, savey
+*/
+short saveable(gx, gy, savex, savey)
+short gx, gy, *savex, *savey;
+{ /* saveable */
+ short me, him, gx1, gx2, i, j, smark, mark2, tl, result;
+ char sChar;
+ sPointList dList;
+ point tp;
+ short libList[maxSPoint+1];
+#ifdef DEBUG
+ printf( "saveable\n" );
+#endif
+ dbStop = TRUE;
+ me = bord[gx][gy];
+ him = -me;
+ if (me == 1)
+ sChar = '|';
+ else
+ sChar = '>';
+/* write(sChar); */
+ spanGroup(gx, gy, &plist3); /* find my liberties */
+ if (adjInAtari) /* one of my options is to kill */
+ {
+ listAdjacents(gx, gy, &aList);
+ for (i = 1; i <= aList.indx; i++)
+ if (gList[aList.v[i]].libC == 1)
+ {
+ spanGroup(gList[aList.v[i]].lx, gList[aList.v[i]].ly,
+ &pList1); /* find it's liberty */
+ plist3.indx = plist3.indx + 1;
+ plist3.p[plist3.indx].px = pList1.p[1].px;
+ plist3.p[plist3.indx].py = pList1.p[1].py;
+ }
+ }
+ for (i = 1; i <= maxSPoint; i++)
+ libList[i] = -1;
+ if ((utilPlayLevel > 4) &&
+ (gList[gMap[groupIDs[gx][gy]]].libC > 1)) /* account for diags */
+ {
+ listDiags(gx, gy, &dList);
+ j = 0;
+ i = plist3.indx;
+ while ((j < dList.indx) &&
+ (i < maxSPoint))
+ {
+ j = j + 1;
+ i = i + 1;
+ libList[i] = 100;
+ plist3.p[i].px = dList.p[j].px;
+ plist3.p[i].py = dList.p[j].py;
+ }
+ plist3.indx = i;
+ }
+ if (plist3.indx > 1) /* sort by decreasing lib count */
+ {
+ for (i = 1; i <= plist3.indx; i++)
+ if (libList[i] != 100)
+ {
+ mark2 = playMark;
+ tryPlay(plist3.p[i].px, plist3.p[i].py, me);
+ libList[i] = gList[gMap[groupIDs[gx][gy]]].libC;
+ if (libList[i] > treeLibLim) /* i'm safe */
+ {
+ *savex = plist3.p[i].px;
+ *savey = plist3.p[i].py;
+ result = TRUE;
+ goto one;
+ }
+ undoTo(mark2);
+ }
+ for (i = 1; i <= plist3.indx - 1; i++)
+ for (j = i + 1; j <= plist3.indx; j++)
+ if (libList[i] < libList[j])
+ {
+ tl = libList[i];
+ libList[i] = libList[j];
+ libList[j] = tl;
+ tp = plist3.p[i];
+ plist3.p[i] = plist3.p[j];
+ plist3.p[j] = tp;
+ }
+ }
+ for (i = 1; i <= plist3.indx; i++)
+ {
+ *savex = plist3.p[i].px;
+ *savey = plist3.p[i].py;
+ if (legal[*savex][*savey])
+ {
+ smark = playMark;
+ tryPlay(*savex, *savey, me);
+ pause();
+ if (gList[gMap[groupIDs[*savex][*savey]]].libC > 1)
+ if (gList[gMap[groupIDs[gx][gy]]].libC > treeLibLim)
+ {
+ restoreState();
+/* sClearChar(sChar, rXor); */
+ return TRUE;
+ }
+ else if (gList[gMap[groupIDs[gx][gy]]].libC > 1)
+ if (! killable(gx, gy, &gx1, &gx2))
+ {
+ restoreState();
+/* sClearChar(sChar, rXor); */
+ return TRUE;
+ }
+ undoTo(smark);
+ }
+ }
+ result = FALSE;
+one:
+ restoreState();
+/* sClearChar(sChar, rXor); */
+ return result;
+} /* saveable */
+
+/*
+ marks unsavable groups as dead
+*/
+markDead()
+{ /* markDead */
+ short i, j, gx, gy, result;
+#ifdef DEBUG
+ printf( "markDead\n" );
+#endif
+ for (i = 1; i <= maxGroupID; i++)
+ if (killable(gList[i].lx, gList[i].ly, &gx, &gy))
+ result = ! saveable(gList[i].lx, gList[i].ly, &gx, &gy);
+ else
+ result = FALSE;
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if (bord[i][j] == 0)
+ ndbord[i][j] = 0;
+ else if (gList[groupIDs[i][j]].isDead)
+ ndbord[i][j] = 0;
+ else
+ ndbord[i][j] = bord[i][j];
+} /* markDead */
+
+/*
+ marks groups with two eyes as live
+*/
+MLspan(x, y, saw1, sawm1, size, sMark)
+short x, y, *saw1, *sawm1, *size, sMark;
+ { /* span */
+ if (ndbord[x][y] == 1)
+ *saw1 = TRUE;
+ else if (ndbord[x][y] == -1)
+ *sawm1 = TRUE;
+ else if (sGroups[x][y] == 0)
+ {
+ sGroups[x][y] = sMark;
+ *size = *size + 1;
+ if (x > 0)
+ MLspan(x - 1, y, saw1, sawm1, size, sMark);
+ if (x < maxPoint)
+ MLspan(x + 1, y, saw1, sawm1, size, sMark);
+ if (y > 0)
+ MLspan(x, y - 1, saw1, sawm1, size, sMark);
+ if (y < maxPoint)
+ MLspan(x, y + 1, saw1, sawm1, size, sMark);
+ }
+ } /* span */
+
+short CLspan(x, y, numEyes, who)
+short x, y, *numEyes, who;
+ { /* span */
+ markBoard[x][y] = marker;
+ if (ndbord[x][y] == 0)
+ {
+ if ((sList[sGroups[x][y]].sm != marker) &&
+ (sList[sGroups[x][y]].w == who))
+ {
+ sList[sGroups[x][y]].sm = marker;
+ if (sList[sGroups[x][y]].s > 6)
+ return TRUE;
+ *numEyes = *numEyes + 1;
+ if (*numEyes > 1)
+ return TRUE;
+ }
+ }
+ else if (bord[x][y] == who)
+ {
+ if ((x > 0) &&
+ (markBoard[x - 1][y] != marker))
+ if (CLspan(x - 1, y, numEyes, who)) return TRUE;
+ if ((x < maxPoint) &&
+ (markBoard[x + 1][y] != marker))
+ if (CLspan(x + 1, y, numEyes, who)) return TRUE;
+ if ((y > 0) &&
+ (markBoard[x][y - 1] != marker))
+ if (CLspan(x, y - 1, numEyes, who)) return TRUE;
+ if ((y < maxPoint) &&
+ (markBoard[x][y + 1] != marker))
+ if (CLspan(x, y + 1, numEyes, who)) return TRUE;
+ }
+ return FALSE;
+ } /* span */
+
+short checkLive(x, y)
+short x, y;
+ { /* checkLive */
+ short numEyes, who;
+#ifdef DEBUG
+ printf( "checkLive\n" );
+#endif
+ numEyes = 0;
+ who = bord[x][y];
+ marker = marker + 1;
+ return CLspan(x, y, &numEyes, who);
+ } /* checkLive */
+
+markLive()
+{ /* markLive */
+ short i, j, size, sMark = 0;
+ short saw1, sawm1;
+#ifdef DEBUG
+ printf( "markLive\n" );
+#endif
+ initArray(sGroups);
+ for (i = 0; i <= maxPoint; i++)
+ for (j = 0; j <= maxPoint; j++)
+ if ((sGroups[i][j] == 0) &&
+ (ndbord[i][j] == 0))
+ {
+ size = 0;
+ sMark = sMark + 1;
+ sawm1 = FALSE;
+ saw1 = FALSE;
+ MLspan(i, j, &saw1, &sawm1, &size, sMark);
+ sList[sMark].s = size;
+ sList[sMark].sm = 0;
+ if (sawm1)
+ if (saw1)
+ sList[sMark].w = 0;
+ else
+ sList[sMark].w = -1;
+ else if (saw1)
+ sList[sMark].w = 1;
+ else
+ sList[sMark].w = 0;
+ }
+ for (i = 1; i <= maxGroupID; i++)
+ if (! gList[i].isDead)
+ gList[i].isLive = checkLive(gList[i].lx, gList[i].ly);
+} /* markLive */
+
+/*
+ generates the connection map and the protected point map.
+*/
+genConnects()
+{ /* genConnects */
+ short x, y, numStones;
+#ifdef DEBUG
+ printf( "genConnects\n" );
+#endif
+ for (x = 0; x <= maxPoint; x++)
+ for (y = 0; y <= maxPoint; y++)
+ {
+ connectMap[x][y] = 0;
+ protPoints[x][y] = 0;
+ }
+ for (x = 0; x <= maxPoint; x++)
+ for (y = 0; y <= maxPoint; y++)
+ if (bord[x][y] == 1) /* map connections to this stone */
+ {
+ if (x > 0) /* direct connection */
+ connectMap[x - 1][y] += 1;
+ if (x < maxPoint)
+ connectMap[x + 1][y] += 1;
+ if (y > 0)
+ connectMap[x][y - 1] += 1;
+ if (y < maxPoint)
+ connectMap[x][y + 1] += 1;
+ if ((x > 0) && (y > 0) && /* diagonal connection */
+ (bord[x - 1][y] == 0) && (bord[x][y - 1] == 0))
+ connectMap[x - 1][y - 1] += 1;
+ if ((x < maxPoint) && (y > 0) &&
+ (bord[x + 1][y] == 0) && (bord[x][y - 1] == 0))
+ connectMap[x + 1][y - 1] += 1;
+ if ((x < maxPoint) && (y < maxPoint) &&
+ (bord[x + 1][y] == 0) && (bord[x][y + 1] == 0))
+ connectMap[x + 1][y + 1] += 1;
+ if ((x > 0) && (y < maxPoint) &&
+ (bord[x - 1][y] == 0) && (bord[x][y + 1] == 0))
+ connectMap[x - 1][y + 1] += 1;
+ if ((x > 1) && (claim[x - 1][y] > 3)) /* one point jump */
+ connectMap[x - 2][y] += 1;
+ if ((x < (maxPoint - 1)) && (claim[x + 1][y] > 3))
+ connectMap[x + 2][y] += 1;
+ if ((y > 1) && (claim[x][y - 1] > 3))
+ connectMap[x][y - 2] += 1;
+ if ((y < (maxPoint - 1)) && (claim[x][y + 1] > 3))
+ connectMap[x][y + 2] += 1;
+ if ((x > 1) && (y > 0) && /* knight's move */
+ (claim[x - 1][y] > 3) && (claim[x - 1][y - 1] > 3))
+ connectMap[x - 2][y - 1] += 1;
+ if ((x > 0) && (y > 1) &&
+ (claim[x][y - 1] > 3) && (claim[x - 1][y - 1] > 3))
+ connectMap[x - 1][y - 2] += 1;
+ if ((x < (maxPoint - 1)) && (y > 0) &&
+ (claim[x + 1][y] > 3) && (claim[x + 1][y - 1] > 3))
+ connectMap[x + 2][y - 1] += 1;
+ if ((x < maxPoint) && (y > 1) &&
+ (claim[x][y - 1] > 3) && (claim[x + 1][y - 1] > 3))
+ connectMap[x + 1][y - 2] += 1;
+ if ((x > 1) && (y < maxPoint) &&
+ (claim[x - 1][y] > 3) && (claim[x - 1][y + 1] > 3))
+ connectMap[x - 2][y + 1] += 1;
+ if ((x > 0) && (y < (maxPoint - 1)) &&
+ (claim[x][y + 1] > 3) && (claim[x - 1][y + 1] > 3))
+ connectMap[x - 1][y + 2] += 1;
+ if ((x < (maxPoint - 1)) && (y < maxPoint) &&
+ (claim[x + 1][y] > 3) && (claim[x + 1][y + 1] > 3))
+ connectMap[x + 2][y + 1] += 1;
+ if ((x < maxPoint) && (y < (maxPoint - 1)) &&
+ (claim[x][y + 1] > 3) && (claim[x + 1][y + 1] > 3))
+ connectMap[x + 1][y + 2] += 1;
+ }
+ else if (bord[x][y] == 0) /* see if protected point */
+ {
+ numStones = 0;
+ if (x == 0)
+ numStones = numStones + 1;
+ if (y == 0)
+ numStones = numStones + 1;
+ if (x == maxPoint)
+ numStones = numStones + 1;
+ if (y == maxPoint)
+ numStones = numStones + 1;
+ if ((x > 0) && (bord[x - 1][y] == 1))
+ numStones = numStones + 1;
+ if ((y > 0) && (bord[x][y - 1] == 1))
+ numStones = numStones + 1;
+ if ((x < maxPoint) && (bord[x + 1][y] == 1))
+ numStones = numStones + 1;
+ if ((y < maxPoint) && (bord[x][y + 1] == 1))
+ numStones = numStones + 1;
+ if (numStones == 4)
+ protPoints[x][y] = 1;
+ else if (numStones == 3)
+ {
+ if ((x > 0) &&
+ ((bord[x - 1][y] == 0) ||
+ ((bord[x - 1][y] == -1) &&
+ (gList[groupIDs[x - 1][y]].libC == 1))))
+ protPoints[x][y] = 1;
+ else if ((x < maxPoint) &&
+ ((bord[x + 1][y] == 0) ||
+ ((bord[x + 1][y] == -1) &&
+ (gList[groupIDs[x + 1][y]].libC == 1))))
+ protPoints[x][y] = 1;
+ else if ((y > 0) &&
+ ((bord[x][y - 1] == 0) ||
+ ((bord[x][y - 1] == -1) &&
+ (gList[groupIDs[x][y - 1]].libC == 1))))
+ protPoints[x][y] = 1;
+ else if ((y < maxPoint) &&
+ ((bord[x][y + 1] == 0) ||
+ ((bord[x][y + 1] == -1) &&
+ (gList[groupIDs[x][y + 1]].libC == 1))))
+ protPoints[x][y] = 1;
+ }
+ }
+ for (x = 0; x <= maxPoint; x++)
+ for (y = 0; y <= maxPoint; y++)
+ if (bord[x][y] != 0)
+ {
+ connectMap[x][y] = 0;
+ protPoints[x][y] = 0;
+ }
+} /* genConnects */
+
+/*
+ generates the whole state of the game.
+*/
+genState()
+{ /* genState */
+#ifdef DEBUG
+ printf( "genState\n" );
+#endif
+ inGenState = TRUE;
+ respreicen();
+ markDead();
+ markLive();
+ spread();
+ genConnects();
+#ifdef DEBUG
+/* printBoard( claim, "claim" ); */
+/* printBoard( bord, "bord" ); */
+/* printBoard( ndbord, "ndbord" );
+ printBoard( sGroups, "sGroups" );
+ printBoard( groupIDs, "groupIDs" );
+ printBoard( connectMap, "connectMap" );
+ printBoard( protPoints, "protPoints" ); */
+#endif
+ inGenState = FALSE;
+} /* genState */
+
+/*
+ generates a value for the [x, y] location that appears to get larger
+ for points that are saddle points in the influence graph (klein)
+*/
+short tencen(x, y)
+short x, y;
+{ /* tencen */
+ short a, b, c, d, w, z;
+#ifdef DEBUG
+ printf( "tencen\n" );
+#endif
+ if (claim[x][y] > -1) /* if (he does not influence this area, return 50 */
+ {
+ return 50;
+ }
+ w = claim[x][y]; /* w <= -1 */
+ a = iNil;
+ if (x > 0)
+ if (claim[x - 1][y] > -1) /* if (neighbor is not influenced by him */
+ a = claim[x - 1][y] - w; /* score is sum of his influence on central */
+ b = iNil; /* point and my influence on this neighbor */
+ if (y > 0)
+ if (claim[x][y - 1] > -1)
+ b = claim[x][y - 1] - w;
+ c = iNil;
+ if (x < maxPoint)
+ if (claim[x + 1][y] > -1)
+ c = claim[x + 1][y] - w;
+ d = iNil;
+ if (y < maxPoint)
+ if (claim[x][y + 1] > -1)
+ d = claim[x][y + 1] - w;
+ z = a; /* z = max(a, b, c, d) */
+ if (z != iNil)
+ {
+ if ((b != iNil) &&
+ (b > z))
+ z = b;
+ }
+ else
+ z = b;
+ if (z != iNil)
+ {
+ if ((c != iNil) &&
+ (c > z))
+ z = c;
+ }
+ else
+ z = c;
+ if (z != iNil)
+ {
+ if ((d != iNil) &&
+ (d > z))
+ z = d;
+ }
+ else
+ z = d;
+ if ((z != iNil) &&
+ ((x == 0) ||
+ (y == 0) ||
+ (x == maxPoint) ||
+ (y == maxPoint)))
+ z = z * 2; /* double z if (on the edge of the board ?? */
+ if (z != iNil)
+ return z;
+ else
+ return 50;
+} /* tencen */
+
+initGPUtils()
+{ /* initGPUtils */
+#ifdef DEBUG
+ printf( "initGPUtils\n" );
+#endif
+ initArray(markBoard);
+ initState();
+ marker = 0;
+ playMark = 0;
+ gList[0].isLive = FALSE;
+ gList[0].isDead = FALSE;
+ gList[0].libC = 0;
+ gList[0].size = 0;
+ gList[0].numEyes = 0;
+ gList[0].lx = -1;
+ gList[0].ly = -1;
+ gMap[0] = 0;
+ dbStop = FALSE;
+ inGenState = FALSE;
+} /* initGPUtils */
+
diff --git a/noncore/games/go/goplayutils.h b/noncore/games/go/goplayutils.h
new file mode 100644
index 0000000..11ab658
--- a/dev/null
+++ b/noncore/games/go/goplayutils.h
@@ -0,0 +1,85 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef __goplayutils_h
+#define __goplayutils_h
+
+#define iNil 32767 /* a distinguished value like nil */
+#define maxGroup 512
+#define maxSPoint 16
+#define tryLimit 300
+
+typedef short intBoard[19][19]; /* these were -2 to maxPoint + 2 */
+
+typedef short boolBoard[19][19];
+
+typedef struct
+{
+ short px, py;
+} point;
+
+typedef struct
+{
+ point p[401];
+ short indx;
+} pointList;
+
+typedef struct
+{
+ point p[maxSPoint+1];
+ short indx;
+} sPointList;
+
+typedef struct
+{
+ short indx,
+ v[401];
+} intList;
+
+typedef struct { short w, s, sm; } sgRec;
+
+typedef struct
+{
+ short groupMark,
+ atLevel,
+ isLive,
+ isDead,
+ libC,
+ numEyes,
+ size,
+ lx, ly;
+} groupRec;
+
+typedef enum {rem, add, chLib, reMap} playType;
+
+typedef struct { short who, xl, yl, nextGID, sNumber; } remAddRec;
+typedef struct { short oldLC, oldLevel; } chLibRec;
+typedef struct { short oldGID; } reMapRec;
+typedef struct
+{
+ short gID;
+ playType kind;
+ union {
+ remAddRec rem, add;
+ chLibRec chLib;
+ reMapRec reMap;
+ } uval;
+} playRec;
+
+#endif
diff --git a/noncore/games/go/gowidget.cpp b/noncore/games/go/gowidget.cpp
new file mode 100644
index 0000000..fca9797
--- a/dev/null
+++ b/noncore/games/go/gowidget.cpp
@@ -0,0 +1,449 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "gowidget.h"
+
+#include <qpe/config.h>
+#include <qpe/resource.h>
+
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qpe/qpetoolbar.h>
+#include <qpe/qpemenubar.h>
+#include <qpopupmenu.h>
+#include <qaction.h>
+#include <qapplication.h> //processEvents()
+#include <qlabel.h>
+
+//#include <stdio.h>
+
+#include "amigo.h"
+#include "goplayutils.h"
+
+static const enum bVal computer_color = BLACK;
+
+static int current_handicap = 1;
+
+static QBrush *goBrush;
+//static QImage *newBlackStone;
+//static QImage *blackStone;
+//static QImage *whiteStone;
+static QPixmap *newBlackStone;
+static QPixmap *blackStone;
+static QPixmap *whiteStone;
+
+GoMainWidget::GoMainWidget( QWidget *parent, const char* name) :
+ QMainWindow( parent, name )
+{
+ setToolBarsMovable( FALSE );
+ GoWidget *go = new GoWidget(this);
+
+ setCentralWidget(go);
+ toolbar = new QPEToolBar(this);
+ toolbar->setHorizontalStretchable( TRUE );
+ addToolBar(toolbar);
+
+ QPEMenuBar *mb = new QPEMenuBar( toolbar );
+ mb->setMargin(0);
+ QPopupMenu *file = new QPopupMenu( this );
+
+ QAction *a = new QAction( tr( "New Game" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), go, SLOT( newGame() ) );
+ a->addTo( file );
+
+ a = new QAction( tr( "Pass" ), Resource::loadPixmap( "pass" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), go, SLOT( pass() ) );
+ a->addTo( file );
+ a->addTo( toolbar );
+
+
+ a = new QAction( tr( "Resign" ), Resource::loadPixmap( "reset" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), go, SLOT( resign() ) );
+ a->addTo( file );
+
+ a = new QAction( tr( "Two player option" ), QString::null, 0, this, 0 );
+ a->setToggleAction( TRUE );
+ connect( a, SIGNAL( toggled(bool) ), go, SLOT( setTwoplayer(bool) ) );
+ a->addTo( file );
+
+ mb->insertItem( tr( "Game" ), file );
+
+ QLabel *turnLabel = new QLabel( toolbar );
+ turnLabel->setBackgroundMode( PaletteButton );
+ connect( go, SIGNAL(showTurn(const QPixmap&)),
+ turnLabel, SLOT(setPixmap(const QPixmap&)) );
+
+
+ QLabel * scoreLabel = new QLabel( toolbar );
+ scoreLabel->setBackgroundMode( PaletteButton );
+ connect( go, SIGNAL(showScore(const QString&)),
+ scoreLabel, SLOT(setText(const QString&)) );
+
+ toolbar->setStretchableWidget( scoreLabel );
+
+ go->readConfig();
+}
+
+void GoMainWidget::resizeEvent( QResizeEvent * )
+{
+ //### this won't work because of the text label...
+ /*
+ if ( width() > height() )
+ moveToolBar( toolbar, Left );
+ else
+ moveToolBar( toolbar, Top );
+ */
+}
+
+GoWidget *GoWidget::self = 0;
+
+GoWidget::GoWidget( QWidget *parent, const char* name) :
+ QWidget( parent, name )
+{
+ if ( self )
+ fatal( "Only one Go widget allowed" );
+ self = this;
+ twoplayer = FALSE;
+
+
+ d = bx = by = 1;
+
+ QPixmap pix = Resource::loadPixmap( "pine" );
+ goBrush = new QBrush( black, pix );
+ /*
+ QString fn = Resource::findPixmap("Go-black");
+ blackStone = new QImage( fn );
+ fn = Resource::findPixmap("Go-black-highlight");
+ newBlackStone = new QImage( fn );
+ fn = Resource::findPixmap("Go-white");
+ whiteStone = new QImage( fn );
+ */
+ blackStone = new QPixmap(Resource::loadPixmap( "Go-black" ));
+ whiteStone = new QPixmap(Resource::loadPixmap( "Go-white" ));
+ newBlackStone = new QPixmap(Resource::loadPixmap( "Go-black-highlight" ));
+
+ init();
+}
+
+GoWidget::~GoWidget()
+{
+ writeConfig();
+}
+
+void GoWidget::writeConfig()
+{
+ Config cfg("Go");
+ cfg.setGroup("Game");
+ cfg.writeEntry("TwoPlayer", twoplayer);
+ cfg.writeEntry("CurrentPlayer", currentPlayer);
+ cfg.writeEntry("NPassed", nPassed);
+ QString b;
+ for (int i=0; i<19; i++)
+ for (int j=0; j<19; j++)
+ b += board[i][j] == BLACK ? 'B' : board[i][j] == WHITE ? 'W' : '.';
+ cfg.writeEntry("Board", b);
+ cfg.writeEntry("LastX", lastX);
+ cfg.writeEntry("LastY", lastY);
+ extern int blackPrisoners, whitePrisoners;
+ cfg.writeEntry("BlackPrisoners", blackPrisoners);
+ cfg.writeEntry("WhitePrisoners", whitePrisoners);
+}
+
+void GoWidget::readConfig()
+{
+ init();
+ Config cfg("Go");
+ cfg.setGroup("Game");
+ twoplayer = cfg.readBoolEntry("TwoPlayer");
+ currentPlayer = (bVal)cfg.readNumEntry("CurrentPlayer",1);
+ nPassed = cfg.readNumEntry("NPassed",0);
+ QString b = cfg.readEntry("Board");
+ if ( b.length() == 19*19 )
+ for (int i=0; i<19; i++)
+ for (int j=0; j<19; j++) {
+ QChar ch = b[j+19*i];
+ if ( ch != '.' )
+ GoPlaceStone( ch == 'B' ? BLACK : WHITE, i, j );
+ }
+ lastX = cfg.readNumEntry("LastX");
+ lastY = cfg.readNumEntry("LastY");
+ extern int blackPrisoners, whitePrisoners;
+ blackPrisoners = cfg.readNumEntry("BlackPrisoners",0);
+ whitePrisoners = cfg.readNumEntry("WhitePrisoners",0);
+ reportPrisoners(blackPrisoners,whitePrisoners);
+ emit showTurn( currentPlayer == WHITE ? *whiteStone : *blackStone );
+}
+
+void GoWidget::resizeEvent( QResizeEvent * )
+{
+ d = QMIN(width(),height())/19;
+ // int r = (d/2-1);
+ bx = (width() - 18*d)/2 ;
+ by = (height() - 18*d)/2 ;
+}
+
+void GoWidget::init()
+{
+ lastX = lastY = newX = newY = -1;
+ nPassed = 0;
+ for ( int i = 0; i < 19; i++ )
+ for ( int j = 0; j < 19; j++ )
+ board[i][j]=-1;
+ gameActive = TRUE;
+ goRestart(current_handicap);
+
+ if ( twoplayer ) {
+ currentPlayer = BLACK;
+ } else {
+ doComputerMove();
+ currentPlayer = WHITE;
+ }
+ emit showTurn( currentPlayer == WHITE ? *whiteStone : *blackStone );
+}
+
+void GoWidget::paintEvent( QPaintEvent *e )
+{
+ int i,j;
+
+ int r = whiteStone->width()/2;
+
+ QPainter p(this);
+ p.fillRect( bx - d/2, by - d/2, 19*d, 19*d, *goBrush );
+
+ int xMin = QMAX( x2board(e->rect().left()), 0 );
+ int xMax = QMIN( x2board(e->rect().right()), 18 );
+ int yMin = QMAX( y2board(e->rect().top()), 0 );
+ int yMax = QMIN( y2board(e->rect().bottom()), 18 );
+
+ QColor pine( 255, 186, 89 );
+ p.setPen( pine.dark() );
+
+ for ( i = xMin; i < xMax+1 ; i ++ ) {
+ p.drawLine( bx+i*d, by, bx+i*d, by+18*d );
+ }
+ for ( j = yMin; j < yMax+1 ; j ++ ) {
+ p.drawLine( bx, by+j*d, bx+18*d, by+j*d);
+ }
+
+ // dots are at (3,3), (3,9), (3,15) and so on
+ p.setBrush( black );
+ for ( i = 3; i < xMax+1; i+=6 )
+ for ( j = 3; j < yMax+1; j+=6 )
+ p.drawEllipse( bx+i*d-2, by+j*d-2, 5, 5 );
+
+
+ for ( i = xMin; i < xMax+1; i++ )
+ for ( j = yMin; j < yMax+1; j++ ) {
+ if ( board[i][j] == WHITE ||
+ currentPlayer==WHITE && newX == i && newY == j )
+ p.drawPixmap( bx+i*d - r, by+j*d - r, *whiteStone );
+ else if ( i == lastX && j == lastY )
+ p.drawPixmap( bx+i*d - r, by+j*d - r, *newBlackStone );
+ else if ( board[i][j] == BLACK ||
+ currentPlayer==BLACK && newX == i && newY == j)
+ p.drawPixmap( bx+i*d - r, by+j*d - r, *blackStone );
+ }
+}
+
+void GoWidget::doMove( int x, int y )
+{
+
+ if ( !GoPlaceStone( currentPlayer, x, y ) ) {
+ //printf( "Illegal move (%d,%d)\n", x, y );
+ return;
+ }
+ //printf( "you do (%d,%d)\n", x, y );
+ nPassed = 0;
+ if ( twoplayer )
+ currentPlayer = (currentPlayer==WHITE) ? BLACK : WHITE;
+ else
+ doComputerMove();
+
+ emit showTurn( currentPlayer == WHITE ? *whiteStone : *blackStone );
+
+}
+
+void GoWidget::pass()
+{
+ if ( !gameActive )
+ return;
+ nPassed++;
+ if ( nPassed >= 2 )
+ endGame();
+ else if ( !twoplayer )
+ doComputerMove();
+}
+
+void GoWidget::resign()
+{
+ if ( gameActive )
+ endGame();
+}
+
+
+void GoWidget::newGame()
+{
+ init();
+ update();
+}
+
+
+void GoWidget::endGame()
+{
+ gameActive = FALSE;
+
+ int w,b;
+ CountUp( &w, &b);
+ QString s = tr("White %1, Black %2. ").arg(w).arg(b);
+ if ( w > b )
+ s += tr("White wins.");
+ else if ( w < b )
+ s += tr("Black wins.");
+ else
+ s += tr("A draw.");
+ emit showScore( s );
+}
+
+void GoWidget::doComputerMove()
+{
+ int ox = lastX;
+ int oy = lastY;
+ lastX = lastY = -1;
+ emit showTurn( *blackStone );
+ refresh( ox, oy);
+ qApp->processEvents();
+ short int x,y;
+ if ( genMove( computer_color, &x, &y ) ) {
+ lastX = x;
+ lastY = y;
+ //printf( "I do (%d,%d)\n", x, y );
+ GoPlaceStone(computer_color,x,y);
+ nPassed = 0;
+ } else {
+ emit showScore( tr("I pass") );
+ nPassed++;
+ if ( nPassed >= 2 )
+ endGame();
+ }
+}
+
+void GoWidget::mousePressEvent( QMouseEvent *me )
+{
+ if ( !gameActive )
+ return;
+ int x = x2board(me->x());
+ int y = y2board(me->y());
+ showStone(x,y,currentPlayer);
+}
+
+void GoWidget::mouseMoveEvent( QMouseEvent *me )
+{
+ if ( !gameActive )
+ return;
+ int x = x2board(me->x());
+ int y = y2board(me->y());
+ if ( x != newX || y != newY )
+ showStone(x,y,currentPlayer);
+}
+
+void GoWidget::showStone( int x, int y, enum bVal c )
+{
+
+ if ( newX > -1 ) {
+ refresh( newX, newY );
+ newY = newX = -1;
+ }
+ if ( x < 0 || x > 18 || y < 0 || y > 18 ) {
+ newX = newY = -1;
+ return;
+ }
+ if ( board[x][y] == -1 && !Suicide( c, x, y ) ) {
+ newX = x;
+ newY = y;
+ refresh(x,y);
+ }
+
+}
+
+void GoWidget::mouseReleaseEvent( QMouseEvent * )
+{
+ if ( gameActive && newX > -1 )
+ doMove( newX, newY );
+ newX = newY = -1;
+}
+
+void GoWidget::refresh( int x, int y )
+{
+ update( bx+d*x-d/2-1, by+d*y-d/2-1, d+2, d+2 );
+}
+
+void GoWidget::removeStone(short x, short y)
+{
+ board[x][y]=-1;
+ refresh( x, y );
+}
+
+void GoWidget::placeStone (enum bVal c, short x, short y )
+{
+ board[x][y]=c;
+ refresh( x, y );
+}
+
+void GoWidget::reportPrisoners( int blackcnt, int whitecnt )
+{
+ QString s = tr( "Prisoners: black %1, white %2" ).arg(blackcnt).arg(whitecnt);
+ emit showScore( s );
+}
+
+void GoWidget::setTwoplayer( bool b )
+{
+ twoplayer = b;
+}
+
+void GoWidget::setHandicap( int h )
+{
+ current_handicap = h;
+}
+
+
+extern "C" {
+
+void removestone(short x, short y)
+{
+ GoWidget::self->removeStone(x,y);
+}
+
+void placestone (enum bVal c, short x, short y )
+{
+ GoWidget::self->placeStone(c,x,y);
+}
+
+void intrMoveReport(enum bVal c ,char *coord ,char *reason )
+{
+ qDebug( "intrMoveReport colour %d, %s %s", c, coord, reason );
+}
+
+void intrPrisonerReport( short blackcnt, short whitecnt )
+{
+ GoWidget::self->reportPrisoners(blackcnt,whitecnt);
+}
+
+}
+
diff --git a/noncore/games/go/gowidget.h b/noncore/games/go/gowidget.h
new file mode 100644
index 0000000..94de2cc
--- a/dev/null
+++ b/noncore/games/go/gowidget.h
@@ -0,0 +1,111 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef GOWIDGET_H
+#define GOWIDGET_H
+
+#include <qmainwindow.h>
+#include "amigo.h"
+
+
+class QToolBar;
+
+class GoMainWidget : public QMainWindow
+{
+ Q_OBJECT
+public:
+ GoMainWidget( QWidget *parent=0, const char* name=0);
+protected:
+ void resizeEvent( QResizeEvent * );
+private:
+ QToolBar *toolbar;
+
+};
+
+
+class QLabel;
+class GoWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ GoWidget( QWidget *parent=0, const char* name=0);
+ ~GoWidget();
+
+ void doMove( int x, int y );
+ void doComputerMove();
+
+ void readConfig();
+ void writeConfig();
+
+public slots:
+ void pass();
+ void resign();
+ void newGame();
+ void setTwoplayer( bool );
+ void setHandicap( int );
+signals:
+ void showScore( const QString& );
+ void showTurn( const QPixmap& );
+
+protected:
+ void paintEvent( QPaintEvent * );
+ void mousePressEvent( QMouseEvent * );
+ void mouseMoveEvent( QMouseEvent * );
+ void mouseReleaseEvent( QMouseEvent * );
+ void resizeEvent( QResizeEvent * );
+private:
+ void init();
+ void removeStone(short x, short y);
+ void placeStone (enum bVal c, short x, short y );
+
+ void refresh( int x, int y );
+ void showStone( int x, int y, enum bVal );
+ void reportPrisoners(int,int);
+
+ inline int x2board( int x ) { return (x-bx+d/2)/d; }
+ inline int y2board( int y ) { return (y-by+d/2)/d; }
+
+ void endGame();
+
+ bool twoplayer;
+ enum bVal currentPlayer;
+ bool gameActive;
+ int nPassed;
+ signed char board[19][19];
+
+ int d; //distance between lines
+ int bx; //vertical baseline
+ int by; //horizontal baseline
+
+ int lastX,lastY;
+ int newX,newY;
+
+ static GoWidget *self;
+
+ friend void removestone(short x, short y);
+ friend void intrPrisonerReport( short, short );
+ friend void placestone(enum bVal c, short x, short y );
+};
+
+
+
+
+
+#endif
diff --git a/noncore/games/go/killable.c b/noncore/games/go/killable.c
new file mode 100644
index 0000000..3ed2d2e
--- a/dev/null
+++ b/noncore/games/go/killable.c
@@ -0,0 +1,373 @@
+/* By Stoney Ballard */
+/* Ported from Pascal to C by Todd R. Johnson */
+
+#include "go.h"
+#include "goplayutils.h"
+#include "amigo.h"
+
+extern intBoard bord, groupIDs;
+extern boolBoard legal;
+extern groupRec gList[maxGroup];
+extern short gMap[maxGroup], adjInAtari, adj2Libs, playMark, treeLibLim,
+ utilPlayLevel, killFlag, depthLimit, dbStop, showTrees;
+extern pointList plist2;
+
+/*
+ returns true if the group (at x, y) is killable.
+ if so, returns the point to play at in killx, killy.
+*/
+
+ short me, him, depth, i, j, tryCount, tl, topMark, tkMark, mark2;
+ char sChar;
+ sPointList lList, dList;
+ point tp;
+ short libList[maxSPoint+1];
+ short esc;
+
+short mtNbrs(x, y)
+short x, y;
+ { /* mtNbrs */
+ short n = 0;
+ if ((x > 0) && (bord[x - 1][y] == 0))
+ n = n + 1;
+ if ((x < maxPoint) && (bord[x + 1][y] == 0))
+ n = n + 1;
+ if ((y > 0) && (bord[x][y - 1] == 0))
+ n = n + 1;
+ if ((y < maxPoint) && (bord[x][y + 1] == 0))
+ n = n + 1;
+ return n;
+ } /* mtNbrs */
+
+short killTree(tx, ty, gx, gy, escape, tkMark)
+short tx, ty, gx, gy, *escape, tkMark;
+ { /* killTree */
+ short curMark, mark2, mark3, i, j, k, tl, dStart, result;
+ sPointList lList1, lList2;
+ short libList[maxSPoint+1];
+ point tp;
+ short esc = FALSE;
+ tryCount = tryCount + 1;
+ if (tryCount > tryLimit)
+ {
+ undoTo(tkMark);
+/* for (i = 1; i <= depth - 1; i++)
+ {
+ sClearChar(sChar, rXor);
+ } */
+ depth = 1;
+ return FALSE;
+ }
+/* write(sChar); */
+ depth = depth + 1;
+ curMark = playMark;
+ tryPlay(tx, ty, me); /* try my move */
+ pause();
+ if (gList[gMap[groupIDs[tx][ty]]].libC == 0) /* I'm dead */
+ {
+ result = FALSE;
+ goto one;
+ }
+ else if (killFlag) /* I killed something of his */
+ {
+ result = TRUE;
+ goto one;
+ }
+ else if (gList[gMap[groupIDs[gx][gy]]].libC > treeLibLim) /* safe */
+ {
+ result = FALSE;
+ goto one;
+ }
+ else
+ {
+ sSpanGroup(gx, gy, &lList1); /* find his liberties */
+ if (gList[gMap[groupIDs[tx][ty]]].libC == 1) /* he can kill me */
+ {
+ if (lList1.indx < maxSPoint) /* add that option to his list */
+ {
+ lList1.indx = lList1.indx + 1;
+ spanGroup(tx, ty, &plist2); /* find my liberty */
+ lList1.p[lList1.indx].px = plist2.p[1].px;
+ lList1.p[lList1.indx].py = plist2.p[1].py;
+ }
+ else
+ {
+ result = FALSE;
+ goto one;
+ }
+ }
+ for (i = 1; i <= maxSPoint; i++) /* init liblist so diags can be marked */
+ libList[i] = -1;
+ if ((utilPlayLevel > 4) &&
+ (lList1.indx > 1) &&
+ (gList[gMap[groupIDs[gx][gy]]].libC > 1)) /* try diags */
+ {
+ listDiags(gx, gy, &dList);
+ j = 0;
+ i = lList1.indx;
+ while ((j < dList.indx) &&
+ (i < maxSPoint))
+ {
+ j = j + 1;
+ i = i + 1;
+ libList[i] = 0; /* mark this as a diag */
+ lList1.p[i].px = dList.p[j].px;
+ lList1.p[i].py = dList.p[j].py;
+ }
+ lList1.indx = i;
+ }
+ if (lList1.indx > 1) /* sort by decreasing lib count */
+ {
+ for (i = 1; i <= lList1.indx; i++)
+ if (libList[i] != 0) /* diags are tried last */
+ {
+ mark2 = playMark;
+ tryPlay(lList1.p[i].px, lList1.p[i].py, him);
+ libList[i] = gList[gMap[groupIDs[gx][gy]]].libC;
+ if ((libList[i] > treeLibLim) ||
+ ((libList[i] > (depthLimit - depth)) &&
+ (libList[i] > 2)))
+ {
+ *escape = TRUE;
+ result = FALSE;
+ goto one;
+ }
+ undoTo(mark2);
+ }
+ for (i = 1; i <= lList1.indx - 1; i++)
+ for (j = i + 1; j <= lList1.indx; j++)
+ if (libList[i] < libList[j])
+ {
+ tl = libList[i];
+ libList[i] = libList[j];
+ libList[j] = tl;
+ tp = lList1.p[i];
+ lList1.p[i] = lList1.p[j];
+ lList1.p[j] = tp;
+ }
+ }
+ for (i = 1; i <= lList1.indx + 1; i++) /* try his responses */
+ {
+ mark2 = playMark;
+ if (i <= lList1.indx) /* try his move */
+ {
+ tryPlay(lList1.p[i].px, lList1.p[i].py, him); /* play his response */
+ pause();
+ if (gList[gMap[groupIDs[lList1.p[i].px]
+ [lList1.p[i].py]]].libC < 2)
+ goto two; /* a bogus move */
+ }
+ else if (gList[gMap[groupIDs[gx][gy]]].libC <= 1)
+ {
+ result = TRUE;
+ goto one;
+ }
+ if (gList[gMap[groupIDs[gx][gy]]].libC > treeLibLim)
+ {
+ *escape = TRUE;
+ result = FALSE;
+ goto one;
+ }
+ if (gList[gMap[groupIDs[gx][gy]]].libC > 1)
+ { /* look at my responses */
+ sSpanGroup(gx, gy, &lList2); /* list his liberties */
+ dStart = lList2.indx + 1;
+ if (adjInAtari) /* he wins */
+ {
+ result = FALSE;
+ goto one;
+ }
+ if ((lList2.indx > 2) && adj2Libs) /* he wins */
+ {
+ result = FALSE;
+ goto one;
+ }
+ for (k = 1; k <= maxSPoint; k++)
+ libList[k] = -1;
+ if (utilPlayLevel > 4) /* account for diagonal moves */
+ {
+ listDiags(gx, gy, &dList);
+ j = 0;
+ k = lList2.indx;
+ while ((j < dList.indx) &&
+ (k < maxSPoint))
+ {
+ j = j + 1;
+ k = k + 1;
+ libList[k] = 100;
+ lList2.p[k].px = dList.p[j].px;
+ lList2.p[k].py = dList.p[j].py;
+ }
+ lList2.indx = k;
+ }
+ if (lList2.indx > 1) /* sort by increasing lib count */
+ {
+ for (k = 1; k <= lList2.indx; k++)
+ if (libList[k] != 100) /* diags go last */
+ {
+ mark3 = playMark;
+ tryPlay(lList2.p[k].px, lList2.p[k].py, me);
+ libList[k] = gList[gMap[groupIDs[gx][gy]]].libC;
+ undoTo(mark3);
+ }
+ for (k = 1; k <= lList2.indx - 1; k++)
+ for (j = k + 1; j <= lList2.indx; j++)
+ if (libList[k] > libList[j])
+ {
+ tl = libList[k];
+ libList[k] = libList[j];
+ libList[j] = tl;
+ tp = lList2.p[k];
+ lList2.p[k] = lList2.p[j];
+ lList2.p[j] = tp;
+ }
+ else if ((libList[k] == libList[j]) &&
+ (libList[k] == 1))
+ if (mtNbrs(lList2.p[k].px, lList2.p[k].py) <
+ mtNbrs(lList2.p[j].px, lList2.p[j].py))
+ {
+ tl = libList[k];
+ libList[k] = libList[j];
+ libList[j] = tl;
+ tp = lList2.p[k];
+ lList2.p[k] = lList2.p[j];
+ lList2.p[j] = tp;
+ }
+ }
+ for (j = 1; j <= lList2.indx; j++)
+ {
+ if (killTree(lList2.p[j].px, lList2.p[j].py, gx,
+ gy, &esc, tkMark))
+ goto two; /* this kills him */
+ if (esc && (j >= dStart))
+ {
+ result = FALSE;
+ goto one; /* don't bother with more diags if escapes */
+ }
+ }
+ result = FALSE; /* none of my responses kills him */
+ goto one;
+ }
+ two:
+ undoTo(mark2);
+ }
+ result = TRUE; /* none of his responses saves him */
+ }
+ one:
+ undoTo(curMark);
+/* sClearChar(sChar, rXor); */
+ depth = depth - 1;
+ return result;
+ } /* killTree */
+
+short tKillTree(tx, ty, gx, gy)
+short tx, ty, gx, gy;
+ { /* tKillTree */
+ short tkMark, escape;
+ tryCount = 0;
+ tkMark = playMark;
+ return killTree(tx, ty, gx, gy, &escape, tkMark);
+ } /* tKillTree */
+
+short killable(gx, gy, killx, killy)
+short gx, gy, *killx, *killy;
+{ /* killable */
+#ifdef DEBUG
+ printf( "killable\n" );
+ showTrees = TRUE;
+#endif
+ dbStop = TRUE;
+ him = bord[gx][gy]; /* find out who I am */
+ me = -him;
+/* if (me == 1)
+ sChar = '>';
+ else
+ sChar = '|'; */
+/* write(sChar); */
+ depth = 1;
+ topMark = playMark;
+ sSpanGroup(gx, gy, &lList); /* find his liberties */
+ if (lList.indx == 1)
+ {
+ *killx = lList.p[1].px;
+ *killy = lList.p[1].py;
+ return TRUE;
+ }
+ else if (lList.indx > treeLibLim)
+ return FALSE;
+ else if (adjInAtari)
+ return FALSE;
+ else if ((lList.indx > 2) && adj2Libs)
+ return FALSE;
+ else
+ {
+ for (i = 1; i <= maxSPoint; i++)
+ libList[i] = -1;
+ if (utilPlayLevel > 4) /* account for diagonal moves */
+ {
+ listDiags(gx, gy, &dList);
+ j = 0;
+ i = lList.indx;
+ while ((j < dList.indx) &&
+ (i < maxSPoint))
+ {
+ j = j + 1;
+ i = i + 1;
+ libList[i] = 100;
+ lList.p[i].px = dList.p[j].px;
+ lList.p[i].py = dList.p[j].py;
+ }
+ lList.indx = i;
+ }
+ if (lList.indx > 1) /* sort by increasing lib count */
+ {
+ for (i = 1; i <= lList.indx; i++)
+ if (libList[i] != 100) /* diags go last */
+ {
+ mark2 = playMark;
+ tryPlay(lList.p[i].px, lList.p[i].py, me);
+ libList[i] = gList[gMap[groupIDs[gx][gy]]].libC;
+ undoTo(mark2);
+ }
+ for (i = 1; i <= lList.indx - 1; i++)
+ for (j = i + 1; j <= lList.indx; j++)
+ if (libList[i] > libList[j])
+ {
+ tl = libList[i];
+ libList[i] = libList[j];
+ libList[j] = tl;
+ tp = lList.p[i];
+ lList.p[i] = lList.p[j];
+ lList.p[j] = tp;
+ }
+ else if ((libList[i] == libList[j]) &&
+ (libList[i] == 1))
+ if (mtNbrs(lList.p[i].px, lList.p[i].py) <
+ mtNbrs(lList.p[j].px, lList.p[j].py))
+ {
+ tl = libList[i];
+ libList[i] = libList[j];
+ libList[j] = tl;
+ tp = lList.p[i];
+ lList.p[i] = lList.p[j];
+ lList.p[j] = tp;
+ }
+ }
+ for (i = 1; i <= lList.indx; i++)
+ {
+ if (legal[lList.p[i].px][lList.p[i].py])
+ {
+ *killx = lList.p[i].px;
+ *killy = lList.p[i].py;
+ if (tKillTree(*killx, *killy, gx, gy))
+ {
+/* sClearChar(sChar, rXor); */
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+ }
+/* sClearChar(sChar, rXor); */
+} /* killable */
+
diff --git a/noncore/games/go/main.cpp b/noncore/games/go/main.cpp
new file mode 100644
index 0000000..c7e2669
--- a/dev/null
+++ b/noncore/games/go/main.cpp
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "gowidget.h"
+
+#include <qpe/qpeapplication.h>
+
+#include <stdio.h>
+
+int main( int argc, char ** argv)
+{
+ QPEApplication app( argc, argv );
+
+ GoMainWidget m;
+ m.setCaption( GoWidget::tr("Go") );
+ app.showMainWidget( &m );
+ return app.exec();
+}
diff --git a/noncore/games/go/qpe-go.control b/noncore/games/go/qpe-go.control
new file mode 100644
index 0000000..edc106b
--- a/dev/null
+++ b/noncore/games/go/qpe-go.control
@@ -0,0 +1,9 @@
+Files: bin/go apps/Games/go.desktop
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: The game of Go
+ A game for the Qtopia environment.
diff --git a/noncore/games/mindbreaker/.cvsignore b/noncore/games/mindbreaker/.cvsignore
new file mode 100644
index 0000000..415ec09
--- a/dev/null
+++ b/noncore/games/mindbreaker/.cvsignore
@@ -0,0 +1,4 @@
+Makefile
+moc_*
+helpdialog.cpp
+helpdialog.h
diff --git a/noncore/games/mindbreaker/Makefile.in b/noncore/games/mindbreaker/Makefile.in
new file mode 100644
index 0000000..88f6fb1
--- a/dev/null
+++ b/noncore/games/mindbreaker/Makefile.in
@@ -0,0 +1,117 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = mindbreaker
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = mindbreaker.h
+SOURCES = main.cpp \
+ mindbreaker.cpp
+OBJECTS = main.o \
+ mindbreaker.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_mindbreaker.cpp
+OBJMOC = moc_mindbreaker.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake mindbreaker.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ mindbreaker.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+mindbreaker.o: mindbreaker.cpp \
+ mindbreaker.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+moc_mindbreaker.o: moc_mindbreaker.cpp \
+ mindbreaker.h
+
+moc_mindbreaker.cpp: mindbreaker.h
+ $(MOC) mindbreaker.h -o moc_mindbreaker.cpp
+
+
diff --git a/noncore/games/mindbreaker/main.cpp b/noncore/games/mindbreaker/main.cpp
new file mode 100644
index 0000000..8ba0fde
--- a/dev/null
+++ b/noncore/games/mindbreaker/main.cpp
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "mindbreaker.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication a( argc, argv );
+
+ MindBreaker w(0, "new window");
+ w.setCaption("Mind Breaker");
+ QPEApplication::setInputMethodHint( &w, QPEApplication::AlwaysOff );
+ a.showMainWidget(&w);
+
+ return a.exec();
+}
diff --git a/noncore/games/mindbreaker/mindbreaker.cpp b/noncore/games/mindbreaker/mindbreaker.cpp
new file mode 100644
index 0000000..b0e4d88
--- a/dev/null
+++ b/noncore/games/mindbreaker/mindbreaker.cpp
@@ -0,0 +1,818 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "mindbreaker.h"
+
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qpe/qpetoolbar.h>
+#include <qtoolbutton.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qlabel.h>
+#include <qstyle.h>
+
+#include <stdlib.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+static int pegRTTI = 3393393;
+
+/* helper class, */
+class Peg : public QCanvasRectangle
+{
+public:
+ Peg(QCanvas *canvas, int type, int go = -1, int pos = -1);
+ int rtti() const {return pegRTTI; }
+ void advance(int phase);
+
+ bool hit( const QPoint &) const;
+
+/* a placed peg is one that has been set down on the board correctly and
+ should not be moved, only copied */
+ bool placed() const;
+ void setPlaced(bool);
+
+ int pegGo() const;
+ int pegPos() const;
+ void setPegPos(int);
+
+ int type() const;
+
+ static void buildImages();
+ static QImage imageForType(int t);
+
+ static int eggLevel;
+
+protected:
+ void drawShape(QPainter &);
+private:
+ static QVector<QImage> normalPegs;
+ static QVector<QImage> specialPegs;
+
+ bool isplaced;
+ int pegtype;
+ int peg_go;
+ int peg_pos;
+
+ int aniStep;
+};
+
+int Peg::eggLevel = 0;
+QVector<QImage> Peg::normalPegs;
+QVector<QImage> Peg::specialPegs;
+
+void Peg::buildImages()
+{
+
+ QImage pegs = Resource::loadImage("mindbreaker/pegs");
+ int x = 0;
+ int y = 0;
+ int i;
+ eggLevel = 0;
+ normalPegs.resize(10);
+ for (i = 0; i < 6; i++) {
+ normalPegs.insert(i, new QImage(pegs.copy(x, y, peg_size, peg_size)));
+ x += peg_size;
+ }
+ specialPegs.resize(5);
+ for (i = 0; i < 5; i++) {
+ specialPegs.insert(i, new QImage(pegs.copy(x,y,peg_size, peg_size)));
+ x += peg_size;
+ }
+
+ QImage image = Resource::loadImage("mindbreaker/mindbreaker");
+ /* copy from master image to functional images */
+ x = 0;
+ y = panel_height;
+ normalPegs.insert(8,
+ new QImage(image.copy(x, y, panel_width, panel_height)));
+ y += panel_height;
+ y += title_height;
+ normalPegs.insert(9,
+ new QImage(image.copy(x, y, title_width, title_height)));
+ y += title_height;
+
+ x = 6 * peg_size;
+ normalPegs.insert(6,
+ new QImage(image.copy(x, y, answerpeg_size, answerpeg_size)));
+ x += answerpeg_size;
+ normalPegs.insert(7,
+ new QImage(image.copy(x, y, answerpeg_size, answerpeg_size)));
+}
+
+QImage Peg::imageForType(int t)
+{
+ if (eggLevel > t ) {
+ if( t < 5) {
+ return *specialPegs[t];
+ } else {
+ return *normalPegs[rand() % 6];
+ }
+ }
+ return *normalPegs[t];
+}
+
+Peg::Peg(QCanvas *canvas , int t, int g = -1, int p = -1)
+ : QCanvasRectangle(canvas)
+{
+ setSize(normalPegs[t]->width(), normalPegs[t]->height() );
+ pegtype = t;
+ isplaced = FALSE;
+ peg_pos = p;
+ peg_go = g;
+ aniStep = rand() % 6;
+ setAnimated(TRUE);
+}
+
+void Peg::advance(int phase) {
+ if (phase == 0)
+ aniStep = (++aniStep) % 6;
+ else {
+ hide();
+ show();
+ }
+}
+
+void Peg::drawShape(QPainter &p )
+{
+ if ((pegtype == 5) && eggLevel > 5) {
+ p.drawImage(x(), y(), *normalPegs[aniStep]);
+ } else
+ p.drawImage(x(), y(), imageForType(pegtype));
+}
+
+bool Peg::hit( const QPoint &p ) const
+{
+ int ix = p.x() - int(x());
+ int iy = p.y() - int(y());
+ if (!normalPegs[pegtype]->valid(ix, iy))
+ return FALSE;
+ QRgb pixel = normalPegs[pegtype]->pixel(ix, iy);
+ return (qAlpha(pixel ) != 0);
+}
+
+inline bool Peg::placed() const
+{
+ return isplaced;
+}
+
+inline int Peg::pegGo() const
+{
+ return peg_go;
+}
+
+inline int Peg::pegPos() const
+{
+ return peg_pos;
+}
+
+inline void Peg::setPegPos(int p)
+{
+ peg_pos = p;
+}
+
+inline void Peg::setPlaced(bool p)
+{
+ isplaced = p;
+}
+
+inline int Peg::type() const
+{
+ return pegtype;
+}
+
+/* Load the main image, copy from it the pegs, the board, and the answer image
+ * and use these to create the tray, answer and board
+ */
+MindBreaker::MindBreaker( QWidget *parent=0, const char *name=0, int wFlags=0 )
+: QMainWindow(parent, name, wFlags),
+ canvas(board_height, board_width)
+{
+ MindBreakerBoard *m = new MindBreakerBoard(canvas, this);
+ setCentralWidget(m);
+
+ setToolBarsMovable( FALSE );
+
+ QPEToolBar *tb = new QPEToolBar(this);
+ tb->setHorizontalStretchable( TRUE );
+
+ QPixmap newicon = Resource::loadPixmap("new");
+ new QToolButton(newicon, tr("New Game"), 0,
+ m, SLOT(clear()), tb, "NewGame");
+
+ score = new QToolButton(tb);
+ score->setText("");
+ score->setMaximumHeight(20);
+ score->setUsesTextLabel(TRUE);
+ tb->setStretchableWidget(score);
+
+ connect(m, SIGNAL(scoreChanged(int, int)), this, SLOT(setScore(int, int)));
+ connect(score, SIGNAL(clicked()), m, SLOT(resetScore()));
+
+ int a, b;
+ m->getScore(&a, &b);
+ setScore(a,b);
+}
+
+void MindBreaker::setScore(int turns, int games)
+{
+ double average;
+ double total_turns = turns;
+ double total_games = games;
+
+ if(total_games > 0)
+ average = total_turns / total_games;
+ else
+ average = 0.0;
+
+ score->setText(tr("win avg: %1 turns (%2 games)").arg(average).arg(games));
+}
+
+
+MindBreakerBoard::MindBreakerBoard( QCanvas &c, QWidget *parent=0,
+ const char *name=0, int wFlags=0 )
+ : QCanvasView(&c, parent, name, wFlags)
+{
+ int i, x, y;
+ struct timeval tv;
+
+ current_go = 0;
+ gettimeofday(&tv, 0);
+
+ srand(tv.tv_usec);
+
+ canvas()->setAdvancePeriod(500);
+
+ QImage image = Resource::loadImage("mindbreaker/mindbreaker");
+
+ /* copy from master image to functional images */
+ x = 0;
+ y = 0;
+ panelImage = image.copy(x,y, panel_width, panel_height);
+ y += panel_height;
+ y += panel_height;
+
+ titleImage = image.copy(x, y, title_width, title_height);
+
+ Peg::buildImages(); // must be done BEFORE any pegs are made
+
+ current_highlight = new Peg(canvas(), 8);
+ current_highlight->setPlaced(TRUE);
+ current_highlight->setX(0);
+ current_highlight->setY(board_height - ((current_go + 1) * panel_height));
+ current_highlight->setZ(0);
+ current_highlight->show();
+
+
+ /* set up the game */
+ Config c("MindBreaker", Config::User);
+ c.setGroup("Board");
+ game_over = FALSE;
+ if (c.readNumEntry("Answer0") < 0) {
+ for (i = 0; i < 4; i++) {
+ answer[i] = rand() % 6;
+ current_guess[i] = 6;
+ }
+ total_turns = 0;
+ total_games = 0;
+ } else {
+ int j;
+ c.setGroup("Score");
+ total_turns = c.readNumEntry("Turns");
+ total_games = c.readNumEntry("Games");
+ if(total_turns < 0)
+ total_turns = 0;
+ if(total_games < 0)
+ total_games = 0;
+
+
+ checkScores();
+ c.setGroup("Board");
+ for(i = 0; i < 4; i++)
+ answer[i] = c.readNumEntry(QString("Answer%1").arg(i));
+ /* read, and parse past guesses */
+ current_go = 0;
+ for(j=0; j < 9; j++) {
+ current_guess[0] = c.readNumEntry(QString("Go%1p0").arg(j));
+ if (current_guess[0] < 0)
+ break;
+ placeGuessPeg(0, current_guess[0]);
+ current_guess[1] = c.readNumEntry(QString("Go%1p1").arg(j));
+ placeGuessPeg(1, current_guess[1]);
+ current_guess[2] = c.readNumEntry(QString("Go%1p2").arg(j));
+ placeGuessPeg(2, current_guess[2]);
+ current_guess[3] = c.readNumEntry(QString("Go%1p3").arg(j));
+ placeGuessPeg(3, current_guess[3]);
+ checkGuess();
+ }
+ for(i = 0; i < 4; i++) {
+ current_guess[i] = c.readNumEntry(QString("CurrentGo%1").arg(i));
+ if (current_guess[i] != 6)
+ placeGuessPeg(i, current_guess[i]);
+ }
+ }
+
+ /* draw initial screen */
+ drawBackground();
+ canvas()->update();
+}
+
+MindBreakerBoard::~MindBreakerBoard()
+{
+ int i, j;
+ if (game_over) {
+ current_go = 0;
+ /* clear the answer, clear the guess */
+ for (i = 0; i < 4; i++) {
+ answer[i] = rand() % 6;
+ current_guess[i] = 6;
+ }
+ }
+
+ Config c("MindBreaker", Config::User);
+ c.setGroup("Board");
+ c.clearGroup();
+ /* write the board */
+ for (i = 0; i < current_go; i++) {
+ for(j = 0; j < 4; j++)
+ c.writeEntry(tr("Go%1p%2").arg(i).arg(j), past_guesses[4*i+j]);
+ }
+ for(j = 0; j < 4; j++)
+ c.writeEntry(tr("CurrentGo%1").arg(j), current_guess[j]);
+ for(j = 0; j < 4; j++)
+ c.writeEntry(tr("Answer%1").arg(j), answer[j]);
+
+ c.setGroup("Score");
+ /* write the score */
+
+ c.writeEntry("Turns", total_turns);
+ c.writeEntry("Games", total_games);
+}
+
+void MindBreakerBoard::getScore(int *a, int *b)
+{
+ *a = total_turns;
+ *b = total_games;
+ return;
+}
+
+void MindBreakerBoard::placeGuessPeg(int pos, int pegId)
+{
+ int x = first_peg_x_diff + (pos * peg_spacing);
+ int y = board_height - ((current_go + 1) * panel_height)
+ + first_peg_y_diff;
+
+ Peg *peg = new Peg(canvas(), pegId, current_go, pos);
+ peg->setPegPos(pos);
+ peg->setPlaced(TRUE);
+ peg->setX(x);
+ peg->setY(y);
+ peg->setZ(2);
+ peg->show();
+}
+
+void MindBreakerBoard::drawBackground()
+{
+ int i, j, x, y, x_gap, y_gap;
+ QPixmap background = QPixmap(canvas()->width(), canvas()->height());
+
+ QPainter painter(&background);
+
+ painter.fillRect(0, 0, canvas()->width(), canvas()->height(), QColor(0,0,0));
+ /* very first thing is to draw the bins, as everything else needs
+ * to be drawn over them */
+
+ QPen pen(QColor(85, 45, 27), 4);
+ painter.setPen(pen);
+ x_gap = canvas()->width() - (panel_width + (2 * bin_margin));
+ //x_gap += peg_size >> 1;
+ if (x_gap < 1)
+ x_gap = 1;
+
+ y_gap = board_height / 6;
+ y_gap -= (2 * bin_margin);
+ //y_gap += peg_size >> 1;
+ if (y_gap < 1)
+ y_gap = 1;
+ x = panel_width + bin_margin - (peg_size >> 1);
+ y = bin_margin - (peg_size >> 1) + 2;
+
+ for (i = 0; i < 6; i++) {
+ for (j = 0; j < 10; j++) {
+ int rx = x + (rand() % x_gap);
+ int ry = y + (rand() % y_gap);
+ painter.drawImage(rx,ry, Peg::imageForType(i));
+ }
+ y += board_height / 6;
+ }
+ /* now draw the surrounding boxes */
+ x_gap = canvas()->width() - panel_width;
+ if (x_gap < 1) x_gap = 1;
+ y_gap = board_height / 6;
+ x = panel_width;
+ y = 1;
+
+ for (i = 0; i < 6; i++) {
+ painter.drawRect(x, y, x_gap, y_gap);
+ y += y_gap;
+ }
+
+ x = 0;
+ y = 0;
+
+ painter.drawImage(x,y, titleImage);
+ y = title_height;
+ /* now nine gues panels */
+ for (i = 0; i < 9; i ++) {
+ painter.drawImage(x, y, panelImage);
+ y += panel_height;
+ }
+
+ painter.flush();
+ canvas()->setBackgroundPixmap(background);
+}
+
+void MindBreakerBoard::checkGuess()
+{
+ int i,j;
+ int num_white = 0;
+ int num_black = 0;
+ int copy_answer[4];
+ int copy_guess[4];
+
+ for(i = 0; i < 4; i++) {
+ copy_answer[i] = answer[i];
+ copy_guess[i] = current_guess[i];
+ if (current_guess[i] == 6)
+ return;
+ if (answer[i] == current_guess[i]) {
+ num_black++;
+ copy_answer[i] = 6;
+ copy_guess[i] = 7;
+ }
+ }
+
+ /* now sure that user has completed a 'guess' */
+ for (i = 0; i < 4; i++) {
+ if (copy_guess[i] == 7)
+ continue; // already marked for a black
+ for (j = 0; j < 4; j++) {
+ if(copy_guess[i] == copy_answer[j]) {
+ copy_answer[j] = 6;
+ num_white++;
+ break;
+ }
+ }
+ }
+
+ int x = answerpegx;
+ int y = (board_height - ((current_go + 1) * panel_height)) + answerpegy;
+
+ if (num_black == 4)
+ game_over = TRUE;
+
+ while(num_black > 0) {
+ Peg *p = new Peg(canvas(), 7);
+ p->setPlaced(TRUE);
+ p->setX(x);
+ p->setY(y);
+ p->setZ(1);
+ p->show();
+ num_black--;
+
+ if (x == answerpegx)
+ x = answerpegx + answerpeg_diff;
+ else {
+ x = answerpegx;
+ y += answerpeg_diff;
+ }
+ }
+ while(num_white > 0){
+ Peg *p = new Peg(canvas(), 6);
+ p->setPlaced(TRUE);
+ p->setX(x);
+ p->setY(y);
+ p->setZ(1);
+ p->show();
+ num_white--;
+
+ if (x == answerpegx)
+ x = answerpegx + answerpeg_diff;
+ else {
+ x = answerpegx;
+ y += answerpeg_diff;
+ }
+ }
+ /* move to next go */
+ for(i = 0; i < 4; i++) {
+ past_guesses[4*current_go+i] = current_guess[i];
+ current_guess[i] = 6;
+ }
+
+ current_go++;
+ if((current_go > 8) || game_over) {
+ total_games++;
+ if(!game_over)
+ total_turns += 10;
+ else
+ total_turns += current_go;
+
+ emit scoreChanged(total_turns, total_games);
+ Peg *p = new Peg(canvas(), 9);
+ game_over = TRUE;
+ p->setPlaced(TRUE);
+ p->setX(0);
+ p->setY(0);
+ p->setZ(0);
+ p->show();
+
+ for (i = 0; i < 4; i++) {
+ p = new Peg(canvas(), answer[i], -1);
+ p->setX(first_peg_x_diff + (i * peg_spacing));
+ p->setY(5);
+ p->setZ(3);
+ p->show();
+ }
+ } else {
+ current_highlight->setY(board_height - ((current_go + 1) * panel_height));
+ }
+ canvas()->update();
+}
+
+void MindBreakerBoard::clear()
+{
+ if(!game_over) {
+ total_games++;
+ total_turns += 10;
+ emit scoreChanged(total_turns, total_games);
+ }
+ int i;
+ /* reset the game board */
+ game_over = FALSE;
+ /* clear the answer, clear the guess */
+ for (i = 0; i < 4; i++) {
+ answer[i] = rand() % 6;
+ current_guess[i] = 6;
+ }
+ current_go = 0;
+
+ QCanvasItemList list = canvas()->allItems();
+ QCanvasItemList::Iterator it = list.begin();
+ for (; it != list.end(); ++it) {
+ if (*it == current_highlight)
+ continue;
+ if (*it)
+ delete *it;
+ }
+
+ current_highlight->setY(board_height - ((current_go + 1) * panel_height));
+ checkScores();
+ drawBackground();
+ canvas()->update();
+}
+
+void MindBreakerBoard::resetScore()
+{
+ /* are u sure */
+
+ if (QMessageBox::information(this, tr( "Reset Statistics" ),
+ tr( "Reset the win ratio?" ),
+ tr( "OK" ), tr( "Cancel" ) ) == 0) {
+ total_turns = 0;
+ total_games = 0;
+ Peg::eggLevel = 0;
+ drawBackground();
+ canvas()->update();
+ emit scoreChanged(total_turns, total_games);
+ }
+}
+
+/* EVENTS */
+
+void MindBreakerBoard::contentsMousePressEvent(QMouseEvent *e)
+{
+ copy_press = FALSE;
+ null_press = FALSE;
+ /* ok, first work out if it is one of the bins that
+ got clicked */
+ if (e->x() > panel_width) {
+ /* its a bin, but which bin */
+ if(e->y() > board_height)
+ return; // missed everything
+ int bin = (e->y() + 2) / (board_height / 6);
+
+ /* make new peg... set it moving */
+ moving_pos = e->pos();
+ moving = new Peg(canvas(), bin, current_go);
+ moving->setX(e->x() - (peg_size >> 1));
+ moving->setY(e->y() - (peg_size >> 1));
+ moving->setZ(5);
+ moving->show();
+ canvas()->update();
+ return;
+ }
+
+ QCanvasItemList l = canvas()->collisions(e->pos());
+ for (QCanvasItemList::Iterator it=l.begin(); it !=l.end(); ++it) {
+ if ( (*it)->rtti() == pegRTTI ) {
+ Peg *item = (Peg *)(*it);
+ if (!item->hit(e->pos()))
+ continue;
+ if (item->type() > 5) {
+ null_press = TRUE;
+ null_point = e->pos();
+ continue; /* not a color peg */
+ }
+ if (item->placed()) {
+ /* copy */
+ if(item->pegGo() == -1)
+ return;
+ if(item->pegGo() == current_go) {
+ copy_press = TRUE;
+ copy_peg = item;
+ }
+ moving = new Peg(canvas(),
+ item->type(), current_go);
+ moving->setX(e->x() - (peg_size >> 1));
+ moving->setY(e->y() - (peg_size >> 1));
+ moving->setZ(5);
+ moving->show();
+ moving_pos = QPoint(e->x(), e->y());
+ canvas()->update();
+ return;
+ }
+ moving = (Peg *)*it;
+ moving_pos = e->pos();
+ canvas()->update();
+ return;
+ }
+ }
+ null_press = TRUE;
+ null_point = e->pos();
+ moving = 0;
+}
+
+void MindBreakerBoard::contentsMouseMoveEvent(QMouseEvent* e)
+{
+ if (moving ) {
+ moving->moveBy(e->pos().x() - moving_pos.x(),
+ e->pos().y() - moving_pos.y());
+ moving_pos = e->pos();
+ canvas()->update();
+ return;
+ }
+}
+
+void MindBreakerBoard::contentsMouseReleaseEvent(QMouseEvent* e)
+{
+ /* time to put down the peg */
+ if(moving) {
+ if(copy_press) {
+ /* check if collided with original. if so, delete both */
+ copy_press = FALSE;
+ QCanvasItemList l = canvas()->collisions(e->pos());
+ for (QCanvasItemList::Iterator it=l.begin(); it !=l.end(); ++it) {
+ if (*it == copy_peg)
+ copy_press = TRUE;
+ }
+ if (copy_press) {
+ current_guess[copy_peg->pegPos()] = 6;
+ delete copy_peg;
+ delete moving;
+ copy_press = FALSE;
+ moving = 0;
+ copy_peg = 0;
+ canvas()->update();
+ return;
+ }
+ }
+
+ /* first work out if in y */
+ if (e->y() > (board_height - (current_go * panel_height))) {
+ delete moving;
+ moving = 0;
+ canvas()->update();
+ return;
+ }
+ if (e->y() < (board_height - ((current_go + 1) * panel_height))) {
+ delete moving;
+ moving = 0;
+ canvas()->update();
+ return;
+ }
+ /* ok, a valid go, but which peg */
+ int x_bar = first_peg_x_diff - (peg_size >> 1);
+ x_bar += peg_spacing;
+ int pos = 0;
+ if (e->x() > x_bar)
+ pos = 1;
+ x_bar += peg_spacing;
+ if (e->x() > x_bar)
+ pos = 2;
+ x_bar += peg_spacing;
+ if (e->x() > x_bar)
+ pos = 3;
+ x_bar += peg_spacing;
+
+ if (e->x() > x_bar) {
+ /* invalid x */
+ delete moving;
+ moving = 0;
+ canvas()->update();
+ return;
+ }
+
+ int x = first_peg_x_diff + (pos * peg_spacing);
+ int y = board_height - ((current_go + 1) * panel_height)
+ + first_peg_y_diff;
+ moving->setPegPos(pos);
+ moving->setX(x);
+ moving->setY(y);
+ moving->setZ(2);
+
+ /* remove all other pegs from this position */
+ QCanvasItemList l = canvas()->collisions(QPoint(x,y));
+ for (QCanvasItemList::Iterator it=l.begin(); it !=l.end(); ++it) {
+ if ( (*it)->rtti() == pegRTTI ) {
+ Peg *item = (Peg *)(*it);
+ if ((item != moving) && (item != current_highlight))
+ delete item;
+ }
+ }
+ current_guess[pos] = ((Peg *)moving)->type();
+
+ ((Peg *)moving)->setPlaced(true);
+ canvas()->update();
+ return;
+ }
+ moving = 0;
+ null_point -= e->pos();
+ if(null_point.manhattanLength() < 6) {
+ if (game_over)
+ clear();
+ else
+ checkGuess();
+ }
+}
+
+void MindBreakerBoard::resizeEvent(QResizeEvent *e)
+{
+ QSize s = e->size();
+ int fw = style().defaultFrameWidth();
+ s.setWidth(s.width() - fw);
+ s.setHeight(s.height() - fw);
+
+ /* min size is 200 x 260 */
+ if (s.width() < board_width)
+ s.setWidth(board_width);
+
+ if (s.height() < board_height)
+ s.setHeight(board_height);
+
+ canvas()->resize(s.width() - fw, s.height() - fw);
+ drawBackground();
+}
+
+
+/* Easter egg function... beat the clock */
+void MindBreakerBoard::checkScores()
+{
+ double games = total_games;
+ double turns = total_turns;
+ double g = games / 10.0;
+ Peg::eggLevel = 0;
+
+ double break_even = 5.0;
+ if (g < 1.0)
+ return;
+ double avg = turns / games;
+ g--;
+ while (break_even >= 0.0) {
+ if (avg >= (break_even + g))
+ return;
+ // score a peg.
+ break_even -= 1.0;
+ Peg::eggLevel = int(5.0 - break_even);
+ }
+}
diff --git a/noncore/games/mindbreaker/mindbreaker.h b/noncore/games/mindbreaker/mindbreaker.h
new file mode 100644
index 0000000..fca649a
--- a/dev/null
+++ b/noncore/games/mindbreaker/mindbreaker.h
@@ -0,0 +1,122 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef MINDBREAKER_H
+#define MINDBREAKER_H
+
+#include <qwidget.h>
+#include <qmainwindow.h>
+#include <qimage.h>
+#include <qvector.h>
+#include <qcanvas.h>
+#include <qlabel.h>
+
+static const int panel_height = 26;
+static const int panel_width = 180;
+
+static const int title_height = 25;
+static const int title_width = 180;
+
+static const int bin_margin = 10;
+static const int peg_size = 20;
+static const int answerpeg_size = 13;
+
+static const int first_peg_x_diff = 21;
+static const int first_peg_y_diff = ((panel_height - peg_size) >> 1);
+static const int peg_spacing = 30;
+
+static const int answerpegx = 152;
+static const int answerpegy = 2;
+static const int answerpeg_diff = 9;
+
+static const int board_height = (title_height + (panel_height * 9));
+static const int board_width = (panel_width + (bin_margin * 2) + peg_size);
+
+class Peg;
+class QToolButton;
+
+class MindBreakerBoard : public QCanvasView // QWidget
+{
+ Q_OBJECT
+public:
+ MindBreakerBoard(QCanvas &c, QWidget *parent=0, const char *name=0, int wFlags=0 );
+ ~MindBreakerBoard();
+
+ void getScore(int *, int *);
+signals:
+ void scoreChanged(int, int);
+
+public slots:
+ void clear();
+ void resetScore();
+
+protected:
+ void contentsMousePressEvent(QMouseEvent *);
+ void contentsMouseMoveEvent(QMouseEvent *);
+ void contentsMouseReleaseEvent(QMouseEvent *);
+ void resizeEvent(QResizeEvent *);
+
+private:
+ void drawBackground();
+ void checkGuess();
+ void checkScores();
+ void placeGuessPeg(int pos, int pegId);
+
+ QImage panelImage;
+ QImage titleImage;
+
+ Peg *moving;
+ Peg *current_highlight;
+ QPoint moving_pos;
+
+ // the game stuff
+ int answer[4];
+ int current_guess[4];
+ int past_guesses[4*9];
+ int current_go;
+
+ int null_press;
+ QPoint null_point;
+ bool copy_press;
+ Peg *copy_peg;
+ bool game_over;
+
+ int total_turns;
+ int total_games;
+};
+
+class MindBreaker : public QMainWindow // QWidget
+{
+ Q_OBJECT
+public:
+ MindBreaker(QWidget *parent=0, const char *name=0, int wFlags=0 );
+
+public slots:
+ void setScore(int, int);
+
+private:
+ QCanvas canvas;
+ MindBreakerBoard *board;
+ QToolButton *score;
+
+};
+
+
+#endif
diff --git a/noncore/games/mindbreaker/mindbreaker.pro b/noncore/games/mindbreaker/mindbreaker.pro
new file mode 100644
index 0000000..12944d1
--- a/dev/null
+++ b/noncore/games/mindbreaker/mindbreaker.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = mindbreaker.h
+SOURCES = main.cpp \
+ mindbreaker.cpp
+TARGET = mindbreaker
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/mindbreaker.ts
diff --git a/noncore/games/mindbreaker/qpe-mindbreaker.control b/noncore/games/mindbreaker/qpe-mindbreaker.control
new file mode 100644
index 0000000..3bad93d
--- a/dev/null
+++ b/noncore/games/mindbreaker/qpe-mindbreaker.control
@@ -0,0 +1,9 @@
+Files: bin/mindbreaker apps/Games/mindbreaker.desktop pics/mindbreaker
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Game: crack the coloured code
+ A game for the Qtopia environment.
diff --git a/noncore/games/minesweep/.cvsignore b/noncore/games/minesweep/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/noncore/games/minesweep/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/noncore/games/minesweep/Makefile.in b/noncore/games/minesweep/Makefile.in
new file mode 100644
index 0000000..9ed6234
--- a/dev/null
+++ b/noncore/games/minesweep/Makefile.in
@@ -0,0 +1,134 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = minesweep
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = minefield.h \
+ minesweep.h
+SOURCES = main.cpp \
+ minefield.cpp \
+ minesweep.cpp
+OBJECTS = main.o \
+ minefield.o \
+ minesweep.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_minefield.cpp \
+ moc_minesweep.cpp
+OBJMOC = moc_minefield.o \
+ moc_minesweep.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake minesweep.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ minesweep.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+minefield.o: minefield.cpp \
+ minefield.h \
+ $(QPEDIR)/include/qpe/config.h
+
+minesweep.o: minesweep.cpp \
+ minesweep.h \
+ minefield.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h
+
+moc_minefield.o: moc_minefield.cpp \
+ minefield.h
+
+moc_minesweep.o: moc_minesweep.cpp \
+ minesweep.h
+
+moc_minefield.cpp: minefield.h
+ $(MOC) minefield.h -o moc_minefield.cpp
+
+moc_minesweep.cpp: minesweep.h
+ $(MOC) minesweep.h -o moc_minesweep.cpp
+
+
diff --git a/noncore/games/minesweep/main.cpp b/noncore/games/minesweep/main.cpp
new file mode 100644
index 0000000..83de9a3
--- a/dev/null
+++ b/noncore/games/minesweep/main.cpp
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "minesweep.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char** argv )
+{
+ QPEApplication a( argc, argv );
+
+ MineSweep ms;
+ QPEApplication::setInputMethodHint( &ms, QPEApplication::AlwaysOff );
+ a.showMainWidget( &ms );
+
+ return a.exec();
+}
diff --git a/noncore/games/minesweep/minefield.cpp b/noncore/games/minesweep/minefield.cpp
new file mode 100644
index 0000000..be2f9a3
--- a/dev/null
+++ b/noncore/games/minesweep/minefield.cpp
@@ -0,0 +1,623 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "minefield.h"
+
+#include <qpe/config.h>
+
+#include <qpainter.h>
+#include <qdrawutil.h>
+#include <qpixmap.h>
+#include <qimage.h>
+#include <qtimer.h>
+
+#include <stdlib.h>
+
+static const char *pix_flag[]={
+"13 13 3 1",
+"# c #000000",
+"x c #ff0000",
+". c None",
+".............",
+".............",
+".....#xxxxxx.",
+".....#xxxxxx.",
+".....#xxxxxx.",
+".....#xxxxxx.",
+".....#.......",
+".....#.......",
+".....#.......",
+".....#.......",
+"...#####.....",
+"..#######....",
+"............."};
+
+static const char *pix_mine[]={
+"13 13 3 1",
+"# c #000000",
+". c None",
+"a c #ffffff",
+"......#......",
+"......#......",
+"..#.#####.#..",
+"...#######...",
+"..##aa#####..",
+"..##aa#####..",
+"#############",
+"..#########..",
+"..#########..",
+"...#######...",
+"..#.#####.#..",
+"......#......",
+"......#......"};
+
+class Mine : public QTableItem
+{
+public:
+ enum MineState {
+ Hidden = 0,
+ Empty,
+ Mined,
+ Flagged,
+#ifdef MARK_UNSURE
+ Unsure,
+#endif
+ Exploded,
+ Wrong
+ };
+
+ Mine( QTable* );
+ void paint( QPainter * p, const QColorGroup & cg, const QRect & cr, bool selected );
+ EditType editType() const { return Never; }
+ QSize sizeHint() const { return QSize( 12, 12 ); }
+
+ void activate( bool sure = TRUE );
+ void setHint( int );
+
+ void setState( MineState );
+ MineState state() const { return st; }
+
+ bool isMined() const { return mined; }
+ void setMined( bool m ) { mined = m; }
+
+ static void paletteChange();
+
+private:
+ bool mined;
+ int hint;
+
+ MineState st;
+
+ static QPixmap* knownField;
+ static QPixmap* unknownField;
+ static QPixmap* flag_pix;
+ static QPixmap* mine_pix;
+};
+
+QPixmap* Mine::knownField = 0;
+QPixmap* Mine::unknownField = 0;
+QPixmap* Mine::flag_pix = 0;
+QPixmap* Mine::mine_pix = 0;
+
+Mine::Mine( QTable *t )
+: QTableItem( t, Never, QString::null )
+{
+ mined = FALSE;
+ st = Hidden;
+ hint = 0;
+}
+
+void Mine::activate( bool sure )
+{
+ if ( !sure ) {
+ switch ( st ) {
+ case Hidden:
+ setState( Flagged );
+ break;
+ case Flagged:
+#ifdef MARK_UNSURE
+ setState( Unsure );
+ break;
+ case Unsure:
+#endif
+ setState( Hidden );
+ default:
+ break;
+ }
+ } else if ( st == Flagged ) {
+ return;
+ } else {
+ if ( mined ) {
+ setState( Exploded );
+ } else {
+ setState( Empty );
+ }
+ }
+}
+
+void Mine::setState( MineState s )
+{
+ st = s;
+}
+
+void Mine::setHint( int h )
+{
+ hint = h;
+}
+
+void Mine::paletteChange()
+{
+ delete knownField;
+ knownField = 0;
+ delete unknownField;
+ unknownField = 0;
+ delete mine_pix;
+ mine_pix = 0;
+ delete flag_pix;
+ flag_pix = 0;
+}
+
+void Mine::paint( QPainter* p, const QColorGroup &cg, const QRect& cr, bool )
+{
+ if ( !knownField ) {
+ knownField = new QPixmap( cr.width(), cr.height() );
+ QPainter pp( knownField );
+ QBrush br( cg.button().dark(115) );
+ qDrawWinButton( &pp, QRect(0,0,cr.width(), cr.height())/*cr*/, cg, TRUE, &br );
+ }
+
+ const int pmmarg=cr.width()/5;
+
+ if ( !unknownField ) {
+ unknownField = new QPixmap( cr.width(), cr.height() );
+ QPainter pp( unknownField );
+ QBrush br( cg.button() );
+ qDrawWinButton( &pp, QRect(0,0,cr.width(), cr.height())/*cr*/, cg, FALSE, &br );
+ }
+
+ if ( !flag_pix ) {
+ flag_pix = new QPixmap( cr.width()-pmmarg*2, cr.height()-pmmarg*2 );
+ flag_pix->convertFromImage( QImage(pix_flag).smoothScale(cr.width()-pmmarg*2, cr.height()-pmmarg*2) );
+ }
+
+ if ( !mine_pix ) {
+ mine_pix = new QPixmap( cr.width()-pmmarg*2, cr.height()-pmmarg*2 );
+ mine_pix->convertFromImage( QImage(pix_mine).smoothScale(cr.width()-pmmarg*2, cr.height()-pmmarg*2) );
+ }
+
+ p->save();
+
+ switch(st) {
+ case Hidden:
+ p->drawPixmap( 0, 0, *unknownField );
+ break;
+ case Empty:
+ p->drawPixmap( 0, 0, *knownField );
+ if ( hint > 0 ) {
+ switch( hint ) {
+ case 1:
+ p->setPen( blue );
+ break;
+ case 2:
+ p->setPen( green );
+ case 3:
+ p->setPen( red );
+ break;
+ default:
+ p->setPen( darkMagenta );
+ break;
+ }
+ p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, QString().setNum( hint ) );
+ }
+ break;
+ case Mined:
+ p->drawPixmap( 0, 0, *knownField );
+ p->drawPixmap( pmmarg, pmmarg, *mine_pix );
+ break;
+ case Exploded:
+ p->drawPixmap( 0, 0, *knownField );
+ p->drawPixmap( pmmarg, pmmarg, *mine_pix );
+ p->setPen( red );
+ p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, "X" );
+ break;
+ case Flagged:
+ p->drawPixmap( 0, 0, *unknownField );
+ p->drawPixmap( pmmarg, pmmarg, *flag_pix );
+ break;
+#ifdef MARK_UNSURE
+ case Unsure:
+ p->drawPixmap( 0, 0, *unknownField );
+ p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, "?" );
+ break;
+#endif
+ case Wrong:
+ p->drawPixmap( 0, 0, *unknownField );
+ p->drawPixmap( pmmarg, pmmarg, *flag_pix );
+ p->setPen( red );
+ p->drawText( QRect( 0, 0, cr.width(), cr.height() ), AlignHCenter | AlignVCenter, "X" );
+ break;
+ }
+
+ p->restore();
+}
+
+/*
+ MineField implementation
+*/
+
+MineField::MineField( QWidget* parent, const char* name )
+: QTable( parent, name )
+{
+ setState( GameOver );
+ setShowGrid( FALSE );
+ horizontalHeader()->hide();
+ verticalHeader()->hide();
+ setTopMargin( 0 );
+ setLeftMargin( 0 );
+
+ setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Maximum ) );
+
+ setSelectionMode( QTable::NoSelection );
+ setFocusPolicy( QWidget::NoFocus );
+
+ setCurrentCell( -1, -1 );
+
+ connect( this, SIGNAL( pressed( int, int, int, const QPoint& ) ), this, SLOT( cellPressed( int, int ) ) );
+ connect( this, SIGNAL( clicked( int, int, int, const QPoint& ) ), this, SLOT( cellClicked( int, int ) ) );
+
+ holdTimer = new QTimer( this );
+ connect( holdTimer, SIGNAL( timeout() ), this, SLOT( held() ) );
+
+ flagAction = NoAction;
+ ignoreClick = FALSE;
+ currRow = currCol = 0;
+ minecount=0;
+ mineguess=0;
+ nonminecount=0;
+}
+
+MineField::~MineField()
+{
+}
+
+void MineField::setState( State st )
+{
+ stat = st;
+}
+
+
+void MineField::setup( int level )
+{
+ lev = level;
+ setState( Waiting );
+ viewport()->setUpdatesEnabled( FALSE );
+
+ int cellsize;
+
+ int x;
+ int y;
+ for ( x = 0; x < numCols(); x++ )
+ for ( y = 0; y < numRows(); y++ )
+ clearCell( y, x );
+
+ switch( lev ) {
+ case 1:
+ setNumRows( 9 );
+ setNumCols( 9 );
+ minecount = 12;
+ cellsize = 21;
+ break;
+ case 2:
+ setNumRows( 16 );
+ setNumCols( 16 );
+ minecount = 45;
+ cellsize = 14;
+ break;
+ case 3:
+ setNumRows( 18 );
+ setNumCols( 18 );
+ minecount = 66 ;
+ cellsize = 12;
+ break;
+ }
+ nonminecount = numRows()*numCols() - minecount;
+ mineguess = minecount;
+ emit mineCount( mineguess );
+ Mine::paletteChange();
+
+ for ( y = 0; y < numRows(); y++ )
+ setRowHeight( y, cellsize );
+ for ( x = 0; x < numCols(); x++ )
+ setColumnWidth( x, cellsize );
+ for ( x = 0; x < numCols(); x++ )
+ for ( y = 0; y < numRows(); y++ )
+ setItem( y, x, new Mine( this ) );
+
+ updateGeometry();
+ viewport()->setUpdatesEnabled( TRUE );
+ viewport()->repaint( TRUE );
+}
+
+
+void MineField::placeMines()
+{
+ int mines = minecount;
+ while ( mines ) {
+ int col = int((double(rand()) / double(RAND_MAX)) * numCols());
+ int row = int((double(rand()) / double(RAND_MAX)) * numRows());
+
+ Mine* mine = (Mine*)item( row, col );
+
+ if ( mine && !mine->isMined() && mine->state() == Mine::Hidden ) {
+ mine->setMined( TRUE );
+ mines--;
+ }
+ }
+}
+
+void MineField::paintFocus( QPainter*, const QRect& )
+{
+}
+
+void MineField::viewportMousePressEvent( QMouseEvent* e )
+{
+ QTable::viewportMousePressEvent( e );
+}
+
+void MineField::viewportMouseReleaseEvent( QMouseEvent* e )
+{
+ QTable::viewportMouseReleaseEvent( e );
+ if ( flagAction == FlagNext ) {
+ flagAction = NoAction;
+ }
+}
+
+void MineField::keyPressEvent( QKeyEvent* e )
+{
+#if defined(Q_WS_QWS) || defined(_WS_QWS_)
+ flagAction = ( e->key() == Key_Up ) ? FlagOn : NoAction;
+#else
+ flagAction = ( ( e->state() & ShiftButton ) == ShiftButton ) ? FlagOn : NoAction;
+#endif
+}
+
+void MineField::keyReleaseEvent( QKeyEvent* )
+{
+ flagAction = NoAction;
+}
+
+int MineField::getHint( int row, int col )
+{
+ int hint = 0;
+ for ( int c = col-1; c <= col+1; c++ )
+ for ( int r = row-1; r <= row+1; r++ ) {
+ Mine* mine = (Mine*)item( r, c );
+ if ( mine && mine->isMined() )
+ hint++;
+ }
+
+ return hint;
+}
+
+void MineField::setHint( Mine* mine )
+{
+ if ( !mine )
+ return;
+
+ int row = mine->row();
+ int col = mine->col();
+ int hint = getHint( row, col );
+
+ if ( !hint ) {
+ for ( int c = col-1; c <= col+1; c++ )
+ for ( int r = row-1; r <= row+1; r++ ) {
+ Mine* mine = (Mine*)item( r, c );
+ if ( mine && mine->state() == Mine::Hidden ) {
+ mine->activate( TRUE );
+ nonminecount--;
+ setHint( mine );
+ updateCell( r, c );
+ }
+ }
+ }
+
+ mine->setHint( hint );
+ updateCell( row, col );
+}
+
+/*
+ state == Waiting means no "hold"
+
+
+*/
+void MineField::cellPressed( int row, int col )
+{
+ if ( state() == GameOver )
+ return;
+ currRow = row;
+ currCol = col;
+ if ( state() == Playing )
+ holdTimer->start( 150, TRUE );
+}
+
+void MineField::held()
+{
+ flagAction = FlagNext;
+ updateMine( currRow, currCol );
+ ignoreClick = TRUE;
+}
+
+/*
+ Only place mines after first click, since it is pointless to
+ kill the player before the game has started.
+*/
+
+void MineField::cellClicked( int row, int col )
+{
+ if ( state() == GameOver )
+ return;
+ if ( state() == Waiting ) {
+ Mine* mine = (Mine*)item( row, col );
+ if ( !mine )
+ return;
+ mine->setState( Mine::Empty );
+ nonminecount--;
+ placeMines();
+ setState( Playing );
+ emit gameStarted();
+ updateMine( row, col );
+ } else { // state() == Playing
+ holdTimer->stop();
+ if ( ignoreClick )
+ ignoreClick = FALSE;
+ else
+ updateMine( row, col );
+ }
+}
+
+void MineField::updateMine( int row, int col )
+{
+ Mine* mine = (Mine*)item( row, col );
+ if ( !mine )
+ return;
+
+ bool wasFlagged = mine->state() == Mine::Flagged;
+ bool wasEmpty = mine->state() == Mine::Empty;
+
+ mine->activate( flagAction == NoAction );
+
+ if ( mine->state() == Mine::Exploded ) {
+ emit gameOver( FALSE );
+ setState( GameOver );
+ return;
+ } else if ( mine->state() == Mine::Empty ) {
+ setHint( mine );
+ if ( !wasEmpty )
+ nonminecount--;
+ }
+
+ if ( flagAction != NoAction ) {
+ if ( mine->state() == Mine::Flagged ) {
+ --mineguess;
+ emit mineCount( mineguess );
+ if ( mine->isMined() )
+ --minecount;
+ } else if ( wasFlagged ) {
+ ++mineguess;
+ emit mineCount( mineguess );
+ if ( mine->isMined() )
+ ++minecount;
+ }
+ }
+
+ updateCell( row, col );
+
+ if ( !minecount && !mineguess || !nonminecount ) {
+ emit gameOver( TRUE );
+ setState( GameOver );
+ }
+}
+
+void MineField::showMines()
+{
+ for ( int c = 0; c < numCols(); c++ )
+ for ( int r = 0; r < numRows(); r++ ) {
+ Mine* mine = (Mine*)item( r, c );
+ if ( !mine )
+ continue;
+ if ( mine->isMined() && mine->state() == Mine::Hidden )
+ mine->setState( Mine::Mined );
+ if ( !mine->isMined() && mine->state() == Mine::Flagged )
+ mine->setState( Mine::Wrong );
+
+ updateCell( r, c );
+ }
+}
+
+void MineField::paletteChange( const QPalette &o )
+{
+ Mine::paletteChange();
+ QTable::paletteChange( o );
+}
+
+void MineField::writeConfig(Config& cfg) const
+{
+ cfg.setGroup("Field");
+ cfg.writeEntry("Level",lev);
+ QString grid="";
+ if ( stat == Playing ) {
+ for ( int x = 0; x < numCols(); x++ )
+ for ( int y = 0; y < numRows(); y++ ) {
+ char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat
+ Mine* mine = (Mine*)item( y, x );
+ int st = (int)mine->state(); if ( mine->isMined() ) st+=5;
+ grid += code + st;
+ }
+ }
+ cfg.writeEntry("Grid",grid);
+}
+
+void MineField::readConfig(Config& cfg)
+{
+ cfg.setGroup("Field");
+ lev = cfg.readNumEntry("Level",1);
+ setup(lev);
+ flagAction = NoAction;
+ ignoreClick = FALSE;
+ currRow = currCol = 0;
+ QString grid = cfg.readEntry("Grid");
+ if ( !grid.isEmpty() ) {
+ int i=0;
+ minecount=0;
+ mineguess=0;
+ for ( int x = 0; x < numCols(); x++ ) {
+ for ( int y = 0; y < numRows(); y++ ) {
+ char code='A'+(x*17+y*101)%21; // Reduce the urge to cheat
+ int st = (char)(QChar)grid[i++]-code;
+ Mine* mine = (Mine*)item( y, x );
+ if ( st >= 5 ) {
+ st-=5;
+ mine->setMined(TRUE);
+ minecount++;
+ mineguess++;
+ }
+ mine->setState((Mine::MineState)st);
+ switch ( mine->state() ) {
+ case Mine::Flagged:
+ if (mine->isMined())
+ minecount--;
+ mineguess--;
+ break;
+ case Mine::Empty:
+ --nonminecount;
+ }
+ }
+ }
+ for ( int x = 0; x < numCols(); x++ ) {
+ for ( int y = 0; y < numRows(); y++ ) {
+ Mine* mine = (Mine*)item( y, x );
+ if ( mine->state() == Mine::Empty )
+ mine->setHint(getHint(y,x));
+ }
+ }
+ }
+ setState( Playing );
+ emit mineCount( mineguess );
+}
+
diff --git a/noncore/games/minesweep/minefield.h b/noncore/games/minesweep/minefield.h
new file mode 100644
index 0000000..4ede435
--- a/dev/null
+++ b/noncore/games/minesweep/minefield.h
@@ -0,0 +1,87 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MINEFIELD_H
+#define MINEFIELD_H
+
+#include <qtable.h>
+
+class Mine;
+class Config;
+
+class MineField : public QTable
+{
+ Q_OBJECT
+public:
+ MineField( QWidget* parent = 0, const char* name = 0 );
+ ~MineField();
+
+ enum State { Waiting, Playing, GameOver };
+
+ State state() const { return stat; }
+
+ void readConfig(Config&);
+ void writeConfig(Config&) const;
+
+ int level() const { return lev; }
+
+public slots:
+ void setup( int level );
+
+ void showMines();
+
+signals:
+ void gameOver( bool won );
+ void gameStarted();
+ void mineCount( int );
+
+protected:
+ void paintFocus( QPainter*, const QRect& );
+ void viewportMousePressEvent( QMouseEvent* );
+ void viewportMouseReleaseEvent( QMouseEvent* );
+ void keyPressEvent( QKeyEvent* );
+ void keyReleaseEvent( QKeyEvent* );
+
+ int getHint( int row, int col );
+ void setHint( Mine* );
+ void updateMine( int row, int col );
+ void paletteChange( const QPalette & );
+
+protected slots:
+ void cellPressed( int row, int col );
+ void cellClicked( int row, int col );
+ void held();
+
+private:
+ State stat;
+ void MineField::setState( State st );
+ void MineField::placeMines();
+ enum FlagAction { NoAction, FlagOn, FlagNext };
+ FlagAction flagAction;
+ bool ignoreClick;
+ int currRow;
+ int currCol;
+ int minecount;
+ int mineguess;
+ int nonminecount;
+ int lev;
+ QTimer *holdTimer;
+};
+
+#endif // MINEFIELD_H
diff --git a/noncore/games/minesweep/minesweep.cpp b/noncore/games/minesweep/minesweep.cpp
new file mode 100644
index 0000000..6492462
--- a/dev/null
+++ b/noncore/games/minesweep/minesweep.cpp
@@ -0,0 +1,390 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "minesweep.h"
+#include "minefield.h"
+
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qpe/qpetoolbar.h>
+#include <qpe/qpemenubar.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qlcdnumber.h>
+#include <qmessagebox.h>
+#include <qtimer.h>
+#include <qpalette.h>
+#include <qapplication.h>
+#include <qlayout.h>
+#include <qlabel.h>
+
+#include <stdlib.h>
+#include <time.h>
+
+
+
+
+static const char *pix_new[]={
+"20 20 3 1",
+" c None",
+"# c #00FF00",
+". c #000000",
+" ",
+" ...... ",
+" ..######.. ",
+" .##########. ",
+" .############. ",
+" .##############. ",
+" .##############. ",
+" .################. ",
+" .################. ",
+" .################. ",
+" .################. ",
+" .################. ",
+" .################. ",
+" .##############. ",
+" .##############. ",
+" .############. ",
+" .##########. ",
+" ..######.. ",
+" ...... ",
+" "};
+
+
+/* XPM */
+static const char * happy_xpm[] = {
+"20 20 3 1",
+" c None",
+". c #ffff3f ",
+"# c #000000",
+" ",
+" ###### ",
+" ##......## ",
+" #..........# ",
+" #............# ",
+" #..............# ",
+" #..............# ",
+" #....##....##....# ",
+" #....##....##....# ",
+" #................# ",
+" #................# ",
+" #................# ",
+" #...#........#...# ",
+" #.##........##.# ",
+" #...########...# ",
+" #...######...# ",
+" #..........# ",
+" ##......## ",
+" ###### ",
+" "};
+
+
+/* XPM */
+static const char * worried_xpm[] = {
+"20 20 3 1",
+" c None",
+". c #ffff3f",
+"# c #000000",
+" ",
+" ###### ",
+" ##......## ",
+" #..........# ",
+" #............# ",
+" #..............# ",
+" #..............# ",
+" #....##....##....# ",
+" #....##....##....# ",
+" #................# ",
+" #................# ",
+" #................# ",
+" #................# ",
+" #....######....# ",
+" #..............# ",
+" #............# ",
+" #..........# ",
+" ##......## ",
+" ###### ",
+" "};
+
+
+/* XPM */
+static const char * dead_xpm[] = {
+"20 20 3 1",
+" c None",
+". c #ffff3f",
+"# c #000000",
+" ",
+" ###### ",
+" ##......## ",
+" #..........# ",
+" #............# ",
+" #..............# ",
+" #..#.#...#.#...# ",
+" #....#.....#.....# ",
+" #...#.#...#.#....# ",
+" #................# ",
+" #................# ",
+" #................# ",
+" #......####......# ",
+" #....# #....# ",
+" #...#......#...# ",
+" #............# ",
+" #..........# ",
+" ##......## ",
+" ###### ",
+" "};
+
+
+class ResultIndicator : private QLabel
+{
+public:
+ static void showResult( QWidget *ref, bool won );
+private:
+ ResultIndicator( QWidget *parent, const char *name, WFlags f)
+ :QLabel( parent, name, f ) {}
+
+ void timerEvent( QTimerEvent *);
+ void center();
+ bool twoStage;
+ int timerId;
+};
+
+void ResultIndicator::showResult( QWidget *ref, bool won )
+{
+ ResultIndicator *r = new ResultIndicator( ref, 0, WStyle_Customize | WStyle_Tool | WType_TopLevel );
+
+ r->setAlignment( AlignCenter );
+ r->setFrameStyle( Sunken|StyledPanel );
+ if ( won ) {
+ r->setText( MineSweep::tr("You won!") );
+ r->center();
+ r->show();
+ r->twoStage = FALSE;
+ r->timerId = r->startTimer(1500);
+ } else {
+ QPalette p( red );
+ r->setPalette( p );
+ r->setText( MineSweep::tr("You exploded!") );
+ r->resize( ref->size() );
+ r->move( ref->mapToGlobal(QPoint(0,0)) );
+ r->show();
+ r->twoStage = TRUE;
+ r->timerId =r->startTimer(200);
+ }
+}
+
+void ResultIndicator::center()
+{
+ QWidget *w = parentWidget();
+
+ QPoint pp = w->mapToGlobal( QPoint(0,0) );
+ QSize s = sizeHint()*3;
+ pp = QPoint( pp.x() + w->width()/2 - s.width()/2,
+ pp.y() + w->height()/ 2 - s.height()/2 );
+
+ setGeometry( QRect(pp, s) );
+
+}
+
+void ResultIndicator::timerEvent( QTimerEvent *te )
+{
+ if ( te->timerId() != timerId )
+ return;
+ killTimer( timerId );
+ if ( twoStage ) {
+ center();
+ twoStage = FALSE;
+ timerId = startTimer( 1000 );
+ } else {
+ delete this;
+ }
+}
+
+
+MineSweep::MineSweep( QWidget* parent, const char* name, WFlags f )
+: QMainWindow( parent, name, f )
+{
+ srand(::time(0));
+ setCaption( tr("Mine Hunt") );
+ setIcon( Resource::loadPixmap( "minesweep_icon" ) );
+
+ QPEToolBar *menuToolBar = new QPEToolBar( this );
+ QPEMenuBar *menuBar = new QPEMenuBar( menuToolBar );
+
+ QPopupMenu *gameMenu = new QPopupMenu( this );
+ gameMenu->insertItem( tr("Beginner"), this, SLOT( beginner() ) );
+ gameMenu->insertItem( tr("Advanced"), this, SLOT( advanced() ) );
+ gameMenu->insertItem( tr("Expert"), this, SLOT( expert() ) );
+
+ menuBar->insertItem( tr("Game"), gameMenu );
+
+ QPEToolBar *toolBar = new QPEToolBar( this );
+ toolBar->setHorizontalStretchable( TRUE );
+
+ guessLCD = new QLCDNumber( toolBar );
+ toolBar->setStretchableWidget( guessLCD );
+
+ QPalette lcdPal( red );
+ lcdPal.setColor( QColorGroup::Background, QApplication::palette().active().background() );
+ lcdPal.setColor( QColorGroup::Button, QApplication::palette().active().button() );
+
+// guessLCD->setPalette( lcdPal );
+ guessLCD->setSegmentStyle( QLCDNumber::Flat );
+ guessLCD->setFrameStyle( QFrame::NoFrame );
+ guessLCD->setNumDigits( 2 );
+ guessLCD->setBackgroundMode( PaletteButton );
+ newGameButton = new QPushButton( toolBar );
+ newGameButton->setPixmap( QPixmap( pix_new ) );
+ newGameButton->setFocusPolicy(QWidget::NoFocus);
+ connect( newGameButton, SIGNAL(clicked()), this, SLOT(newGame()) );
+
+ timeLCD = new QLCDNumber( toolBar );
+// timeLCD->setPalette( lcdPal );
+ timeLCD->setSegmentStyle( QLCDNumber::Flat );
+ timeLCD->setFrameStyle( QFrame::NoFrame );
+ timeLCD->setNumDigits( 5 ); // "mm:ss"
+ timeLCD->setBackgroundMode( PaletteButton );
+
+ setToolBarsMovable ( FALSE );
+
+ addToolBar( menuToolBar );
+ addToolBar( toolBar );
+
+ QFrame *mainframe = new QFrame( this );
+ mainframe->setFrameShape( QFrame::Box );
+ mainframe->setFrameShadow( QFrame::Raised );
+ mainframe->setMargin(5);
+ mainframe->setLineWidth(2);
+ QBoxLayout *box = new QVBoxLayout( mainframe );
+ field = new MineField( mainframe );
+ box->addWidget( field, 0, AlignCenter );
+ QFont fnt = field->font();
+ fnt.setBold( TRUE );
+ field->setFont( QFont( fnt ) );
+ field->setFocus();
+ setCentralWidget( mainframe );
+
+ connect( field, SIGNAL( gameOver( bool ) ), this, SLOT( gameOver( bool ) ) );
+ connect( field, SIGNAL( mineCount( int ) ), this, SLOT( setCounter( int ) ) );
+ connect( field, SIGNAL( gameStarted()), this, SLOT( startPlaying() ) );
+
+ timer = new QTimer( this );
+
+ connect( timer, SIGNAL( timeout() ), this, SLOT( updateTime() ) );
+
+ readConfig();
+}
+
+MineSweep::~MineSweep()
+{
+ writeConfig();
+}
+
+void MineSweep::gameOver( bool won )
+{
+ field->showMines();
+ if ( won ) {
+ newGameButton->setPixmap( QPixmap( happy_xpm ) );
+ } else {
+ newGameButton->setPixmap( QPixmap( dead_xpm ) );
+ }
+ ResultIndicator::showResult( this, won );
+ timer->stop();
+}
+
+void MineSweep::newGame()
+{
+ newGame(field->level());
+}
+
+void MineSweep::newGame(int level)
+{
+ timeLCD->display( "0:00" );
+ field->setup( level );
+ newGameButton->setPixmap( QPixmap( pix_new ) );
+ timer->stop();
+}
+
+void MineSweep::startPlaying()
+{
+ newGameButton->setPixmap( QPixmap( worried_xpm ) );
+ starttime = QDateTime::currentDateTime();
+ timer->start( 1000 );
+}
+
+void MineSweep::beginner()
+{
+ newGame(1);
+}
+
+void MineSweep::advanced()
+{
+ newGame(2);
+}
+
+void MineSweep::expert()
+{
+ newGame(3);
+}
+
+void MineSweep::setCounter( int c )
+{
+ if ( !guessLCD )
+ return;
+
+ guessLCD->display( c );
+}
+
+void MineSweep::updateTime()
+{
+ if ( !timeLCD )
+ return;
+
+ int s = starttime.secsTo(QDateTime::currentDateTime());
+ if ( s/60 > 99 )
+ timeLCD->display( "-----" );
+ else
+ timeLCD->display( QString().sprintf("%2d:%02d",s/60,s%60) );
+}
+
+void MineSweep::writeConfig() const
+{
+ Config cfg("MineSweep");
+ cfg.setGroup("Panel");
+ cfg.writeEntry("Time",
+ timer->isActive() ? starttime.secsTo(QDateTime::currentDateTime()) : -1);
+ field->writeConfig(cfg);
+}
+
+void MineSweep::readConfig()
+{
+ Config cfg("MineSweep");
+ field->readConfig(cfg);
+ cfg.setGroup("Panel");
+ int s = cfg.readNumEntry("Time",-1);
+ if ( s<0 ) {
+ newGame();
+ } else {
+ startPlaying();
+ starttime = QDateTime::currentDateTime().addSecs(-s);
+ updateTime();
+ }
+}
diff --git a/noncore/games/minesweep/minesweep.h b/noncore/games/minesweep/minesweep.h
new file mode 100644
index 0000000..e860573
--- a/dev/null
+++ b/noncore/games/minesweep/minesweep.h
@@ -0,0 +1,67 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef MINESWEEP_H
+#define MINESWEEP_H
+
+#include <qmainwindow.h>
+#include <qdatetime.h>
+
+class MineField;
+class QLCDNumber;
+class QPushButton;
+
+class MineSweep : public QMainWindow
+{
+ Q_OBJECT
+public:
+ MineSweep( QWidget* parent = 0, const char* name = 0, WFlags f = 0 );
+ ~MineSweep();
+
+public slots:
+ void gameOver( bool won );
+ void newGame();
+
+protected slots:
+ void setCounter( int );
+ void updateTime();
+
+ void beginner();
+ void advanced();
+ void expert();
+
+private slots:
+ void startPlaying();
+
+private:
+ void readConfig();
+ void writeConfig() const;
+
+ void newGame(int);
+ MineField* field;
+ QLCDNumber* guessLCD;
+ QLCDNumber* timeLCD;
+ QPushButton* newGameButton;
+
+ QDateTime starttime;
+ QTimer* timer;
+};
+
+#endif // MINESWEEP_H
+
diff --git a/noncore/games/minesweep/minesweep.pro b/noncore/games/minesweep/minesweep.pro
new file mode 100644
index 0000000..87484bc
--- a/dev/null
+++ b/noncore/games/minesweep/minesweep.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = minefield.h \
+ minesweep.h
+SOURCES = main.cpp \
+ minefield.cpp \
+ minesweep.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES =
+
+TRANSLATIONS = ../i18n/de/minesweep.ts
diff --git a/noncore/games/minesweep/qpe-minesweep.control b/noncore/games/minesweep/qpe-minesweep.control
new file mode 100644
index 0000000..36bc221
--- a/dev/null
+++ b/noncore/games/minesweep/qpe-minesweep.control
@@ -0,0 +1,9 @@
+Files: bin/minesweep apps/Games/minesweep.desktop
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Game: find the mines
+ A game for the Qtopia environment.
diff --git a/noncore/games/parashoot/.cvsignore b/noncore/games/parashoot/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/noncore/games/parashoot/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/noncore/games/parashoot/Makefile.in b/noncore/games/parashoot/Makefile.in
new file mode 100644
index 0000000..ff7397e
--- a/dev/null
+++ b/noncore/games/parashoot/Makefile.in
@@ -0,0 +1,203 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = parashoot
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = interface.h \
+ man.h \
+ cannon.h \
+ base.h \
+ bullet.h \
+ helicopter.h
+SOURCES = main.cpp \
+ interface.cpp \
+ man.cpp \
+ cannon.cpp \
+ base.cpp \
+ bullet.cpp \
+ helicopter.cpp
+OBJECTS = main.o \
+ interface.o \
+ man.o \
+ cannon.o \
+ base.o \
+ bullet.o \
+ helicopter.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_interface.cpp \
+ moc_cannon.cpp \
+ moc_bullet.cpp
+OBJMOC = moc_interface.o \
+ moc_cannon.o \
+ moc_bullet.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake parashoot.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ interface.h \
+ cannon.h \
+ bullet.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ base.h \
+ helicopter.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+interface.o: interface.cpp \
+ interface.h \
+ cannon.h \
+ bullet.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ base.h \
+ helicopter.h \
+ man.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+man.o: man.cpp \
+ codes.h \
+ man.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ base.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+cannon.o: cannon.cpp \
+ $(QPEDIR)/include/qpe/resource.h \
+ codes.h \
+ cannon.h \
+ bullet.h \
+ $(QPEDIR)/include/qpe/sound.h
+
+base.o: base.cpp \
+ codes.h \
+ base.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ man.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+bullet.o: bullet.cpp \
+ codes.h \
+ bullet.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ man.h \
+ helicopter.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qmath.h
+
+helicopter.o: helicopter.cpp \
+ helicopter.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ man.h \
+ codes.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+moc_interface.o: moc_interface.cpp \
+ interface.h \
+ cannon.h \
+ bullet.h \
+ $(QPEDIR)/include/qpe/sound.h \
+ base.h \
+ helicopter.h
+
+moc_cannon.o: moc_cannon.cpp \
+ cannon.h \
+ bullet.h \
+ $(QPEDIR)/include/qpe/sound.h
+
+moc_bullet.o: moc_bullet.cpp \
+ bullet.h \
+ $(QPEDIR)/include/qpe/sound.h
+
+moc_interface.cpp: interface.h
+ $(MOC) interface.h -o moc_interface.cpp
+
+moc_cannon.cpp: cannon.h
+ $(MOC) cannon.h -o moc_cannon.cpp
+
+moc_bullet.cpp: bullet.h
+ $(MOC) bullet.h -o moc_bullet.cpp
+
+
diff --git a/noncore/games/parashoot/base.cpp b/noncore/games/parashoot/base.cpp
new file mode 100644
index 0000000..c03802f
--- a/dev/null
+++ b/noncore/games/parashoot/base.cpp
@@ -0,0 +1,71 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "codes.h"
+#include "base.h"
+#include "man.h"
+
+#include <qpe/resource.h>
+
+#include <qregexp.h>
+
+int damage;
+
+Base::Base(QCanvas* canvas) :
+ QCanvasSprite(0, canvas),
+ kaboom("landmine"),
+ ohdear("crmble01")
+{
+ basearray = new QCanvasPixmapArray();
+ QString b0 = Resource::findPixmap("parashoot/b0001");
+ b0.replace(QRegExp("0001"),"%1");
+ basearray->readPixmaps(b0, 4);
+ setSequence(basearray);
+ setFrame(0);
+ move(2, canvas->height()-50);
+ setZ(10);
+ show();
+ damage = 0;
+}
+
+void Base::damageBase()
+{
+ damage++;
+
+ switch(damage) {
+ case 1: setFrame(1); ohdear.play(); break;
+ case 2: setFrame(2); ohdear.play(); break;
+ case 3: setFrame(3); kaboom.play(); break;
+ }
+ show();
+}
+
+bool Base::baseDestroyed()
+{
+ return (damage >= 3);
+}
+
+Base::~Base()
+{
+}
+
+int Base::rtti() const
+{
+ return base_rtti;
+}
diff --git a/noncore/games/parashoot/base.h b/noncore/games/parashoot/base.h
new file mode 100644
index 0000000..ee7f166
--- a/dev/null
+++ b/noncore/games/parashoot/base.h
@@ -0,0 +1,38 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/sound.h>
+
+#include <qcanvas.h>
+
+class Base : public QCanvasSprite
+{
+
+public:
+ Base(QCanvas*);
+ ~Base();
+ void damageBase();
+ int rtti() const;
+ static bool baseDestroyed();
+
+private:
+ QCanvasPixmapArray* basearray;
+ Sound kaboom, ohdear;
+};
diff --git a/noncore/games/parashoot/bullet.cpp b/noncore/games/parashoot/bullet.cpp
new file mode 100644
index 0000000..584f564
--- a/dev/null
+++ b/noncore/games/parashoot/bullet.cpp
@@ -0,0 +1,142 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "codes.h"
+#include "bullet.h"
+#include "man.h"
+#include "helicopter.h"
+
+#include <qpe/resource.h>
+#include <qpe/qmath.h>
+
+
+int limit;
+int shotcount;
+int nobullets;
+
+Bullet::Bullet(QCanvas* canvas, double angle, int cannonx, int cannony) :
+ QCanvasSprite(0, canvas),
+ bang("collide01")
+{
+ QCanvasPixmapArray* bulletarray = new QCanvasPixmapArray(Resource::findPixmap("parashoot/bullet"));
+ setSequence(bulletarray);
+ if (nobullets < limit) {
+ nobullets++;
+ move(cannonx, cannony);
+ dy = 0;
+ dx = 0;
+ show();
+ setXY(angle);
+ setVelocity(-dx, -dy);
+ bang.play();
+ } else
+ return;
+}
+
+void Bullet::setXY(double angle)
+{
+ double ang = angle;
+ if ( (y() < 0) || (x() < 0) || (y() > canvas()->height()) ||
+ (x() > canvas()->width()) )
+ delete this;
+ else {
+ double radians = 0;
+ radians = ang * 3.14159265/180;
+ dx = (qCos(radians)) *7;
+ dy = (qSin(radians)) *7;
+ }
+}
+
+void Bullet::setLimit(int amount)
+{
+ limit = amount;
+}
+
+void Bullet::setNobullets(int amount)
+{
+ nobullets = amount;
+}
+
+void Bullet::checkCollision()
+{
+ QCanvasItem* item;
+ QCanvasItemList l=collisions(FALSE);
+ for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
+ item = *it;
+ if ( (item->rtti()== 1500) && (item->collidesWith(this)) ) {
+ Man* deadman = (Man*)item;
+ if (deadman->frame() != 5) return;
+ deadman->done();
+ emit score(10);
+ setShotCount(shotcount+1);
+ setAnimated(false);
+ nobullets--;
+ delete this;
+ return;
+ }
+ else if ( (item->rtti()==1900) && (item->collidesWith(this)) ) {
+ Helicopter* deadchopper = (Helicopter*) item;
+ deadchopper->done();
+ emit score(50);
+ setAnimated(false);
+ nobullets--;
+ delete this;
+ return;
+ }
+ }
+ //check shot is not out of bounds
+ if ( (y() < 0) || (x() < 0) ||
+ (y() > canvas()->height()) ||
+ ( x() > canvas()->width())) {
+ setAnimated(false);
+ nobullets--;
+ delete this;
+ return;
+ }
+}
+
+void Bullet::advance(int phase)
+{
+ QCanvasSprite::advance(phase);
+
+ if (phase == 0)
+ checkCollision();
+
+}
+
+int Bullet::getShotCount()
+{
+ return shotcount;
+}
+
+void Bullet::setShotCount(int amount)
+{
+ shotcount = amount;
+}
+
+Bullet::~Bullet()
+{
+
+}
+
+int Bullet::rtti() const
+{
+ return bullet_rtti;
+}
diff --git a/noncore/games/parashoot/bullet.h b/noncore/games/parashoot/bullet.h
new file mode 100644
index 0000000..7d15899
--- a/dev/null
+++ b/noncore/games/parashoot/bullet.h
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/sound.h>
+
+#include <qtimer.h>
+#include <qcanvas.h>
+
+#include <math.h>
+
+class Bullet : public QObject, public QCanvasSprite
+{
+ Q_OBJECT
+public:
+ Bullet(QCanvas*, double angle, int cannonx, int cannony);
+ ~Bullet();
+ void setXY(double angle);
+ void checkCollision();
+ void advance(int phase);
+ int rtti() const;
+ static int getShotCount();
+ static void setShotCount(int amount);
+ static void setLimit(int amount);
+ static void setNobullets(int amount);
+
+signals:
+ void score(int);
+
+private:
+ double dx;
+ double dy;
+ int damage;
+ Sound bang;
+};
diff --git a/noncore/games/parashoot/cannon.cpp b/noncore/games/parashoot/cannon.cpp
new file mode 100644
index 0000000..3c0a5fe
--- a/dev/null
+++ b/noncore/games/parashoot/cannon.cpp
@@ -0,0 +1,140 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/resource.h>
+
+#include <qregexp.h>
+
+#include "codes.h"
+#include "cannon.h"
+
+Cannon::Cannon(QCanvas* canvas) :
+ QCanvasSprite(0, canvas)
+{
+shotsfired=0;
+ index = 8;
+ cannonx = 0;
+ cannony = 0;
+ cannonarray = new QCanvasPixmapArray();
+ QString c0 = Resource::findPixmap("parashoot/can0001");
+ c0.replace(QRegExp("0001"),"%1");
+ cannonarray->readPixmaps(c0,17);
+ setSequence(cannonarray);
+ setFrame(index);
+ move(canvas->width()/2-20, canvas->height()-32);
+ // co ords for barrel of cannon when upright
+ barrelypos = canvas->height()-32;
+ barrelxpos = canvas->width()/2;
+ movedir = NoDir;
+ moveDelay = 0;
+ setAnimated(TRUE);
+ show();
+}
+
+void Cannon::advance(int stage)
+{
+ if ( stage == 1 && moveDelay-- == 0 ) {
+ if (movedir == Left) {
+ if (index > 0) {
+ setFrame(index-1);
+ index--;
+ }
+ }
+ if (movedir == Right) {
+ if (index < 16) {
+ setFrame(index+1);
+ index++;
+ }
+ }
+ moveDelay = 0;
+ }
+}
+
+void Cannon::pointCannon(Direction dir)
+{
+ movedir = dir;
+ moveDelay = 0;
+ advance(1);
+ moveDelay = 1;
+}
+
+void Cannon::setCoords()
+{
+ switch(index) {
+ case 0: cannonx = barrelxpos-29; cannony = barrelypos-8; break;
+ case 1: cannonx = barrelxpos-27; cannony = barrelypos-8; break;
+ case 2: cannonx = barrelxpos-25; cannony = barrelypos-6; break;
+ case 3: cannonx = barrelxpos-23; cannony = barrelypos-4; break;
+ case 4: cannonx = barrelxpos-21; cannony = barrelypos-2; break;
+ case 5: cannonx = barrelxpos-19; cannony = barrelypos; break;
+ case 6: cannonx = barrelxpos-15; cannony = barrelypos; break;
+ case 7: cannonx = barrelxpos-10; cannony = barrelypos; break;
+ case 8: cannonx = barrelxpos; cannony = barrelypos; break;
+ case 9: cannonx = barrelxpos+2; cannony = barrelypos; break;
+ case 10: cannonx = barrelxpos+6; cannony = barrelypos; break;
+ case 11: cannonx = barrelxpos+8; cannony = barrelypos; break;
+ case 12: cannonx = barrelxpos+12; cannony = barrelypos-2; break;
+ case 13: cannonx = barrelxpos+18; cannony = barrelypos-4; break;
+ case 14: cannonx = barrelxpos+22; cannony = barrelypos-6; break;
+ case 15: cannonx = barrelxpos+26; cannony = barrelypos-8; break;
+ case 16: cannonx = barrelxpos+28; cannony = barrelypos-8; break;
+ }
+}
+
+double Cannon::shootAngle()
+{
+ switch(index) {
+ case 0: return 30.0;
+ case 1: return 37.5;
+ case 2: return 45.0;
+ case 3: return 52.5;
+ case 4: return 60.0;
+ case 5: return 67.5;
+ case 6: return 75.0;
+ case 7: return 82.5;
+ case 8: return 90.0;
+ case 9: return 97.5;
+ case 10: return 105.0;
+ case 11: return 112.5;
+ case 12: return 120.0;
+ case 13: return 127.5;
+ case 14: return 135.0;
+ case 15: return 142.5;
+ case 16: return 150.0;
+ }
+ return 0;
+}
+
+void Cannon::shoot()
+{
+ setCoords();
+ Bullet* bullet = new Bullet(canvas(), shootAngle(), cannonx, cannony);
+ connect(bullet, SIGNAL(score(int)), this, SIGNAL(score(int)));
+ shotsfired++;
+}
+
+Cannon::~Cannon()
+{
+}
+
+int Cannon::rtti() const
+{
+ return cannon_rtti;
+}
diff --git a/noncore/games/parashoot/cannon.h b/noncore/games/parashoot/cannon.h
new file mode 100644
index 0000000..44d0c65
--- a/dev/null
+++ b/noncore/games/parashoot/cannon.h
@@ -0,0 +1,58 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qcanvas.h>
+
+#include "bullet.h"
+
+class Cannon : public QObject, public QCanvasSprite
+{
+ Q_OBJECT
+
+public:
+ Cannon(QCanvas*); //create cannon
+ ~Cannon(); //destroy cannon
+
+ enum Direction{ Left, Right, NoDir };
+
+ void pointCannon(Direction dir);
+ void setCoords();
+ double shootAngle();
+ void shoot();
+ int rtti() const;
+
+int shotsFired() { return shotsfired; };
+
+protected:
+ void advance(int stage);
+
+signals:
+ void score(int);
+
+private:
+ QCanvasPixmapArray* cannonarray;
+ int index;
+ int cannonx;
+ int cannony;
+ int barrelxpos;
+ int barrelypos;
+ int moveDelay;
+ Direction movedir;
+ int shotsfired;
+};
diff --git a/noncore/games/parashoot/codes.h b/noncore/games/parashoot/codes.h
new file mode 100644
index 0000000..68acb3f
--- a/dev/null
+++ b/noncore/games/parashoot/codes.h
@@ -0,0 +1,25 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+const int man_rtti = 1500;
+const int bullet_rtti = 1600;
+const int cannon_rtti = 1700;
+const int base_rtti = 1800;
+const int helicopter_rtti = 1900;
diff --git a/noncore/games/parashoot/helicopter.cpp b/noncore/games/parashoot/helicopter.cpp
new file mode 100644
index 0000000..0923124
--- a/dev/null
+++ b/noncore/games/parashoot/helicopter.cpp
@@ -0,0 +1,114 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "helicopter.h"
+#include "man.h"
+#include "codes.h"
+
+#include <qpe/resource.h>
+
+#include <qregexp.h>
+
+static QList<Helicopter> all;
+
+Helicopter::Helicopter(QCanvas* canvas) :
+ QCanvasSprite(0, canvas),
+ chikachika("aland01")
+{
+ all.append(this);
+ hits = 0;
+ QCanvasPixmapArray* helicopterarray = new QCanvasPixmapArray();
+ QString h0 = Resource::findPixmap("parashoot/helicopter0001");
+ h0.replace(QRegExp("0001"),"%1");
+ helicopterarray->readPixmaps(h0,3 );
+ setSequence(helicopterarray);
+ setAnimated(true);
+ move(canvas->width(), 5);
+ setVelocity(-2, 0);
+ chikachika.playLoop();
+ show();
+}
+
+Helicopter::~Helicopter()
+{
+ all.remove(this);
+}
+
+int fr = 0;
+
+void Helicopter::advance(int phase)
+{
+ QCanvasSprite::advance(phase);
+ if (phase == 0) {
+ setFrame(fr%3);
+ fr++;
+ checkCollision();
+ }
+}
+
+void Helicopter::checkCollision()
+{
+ if (x() == 6) {
+ setAnimated(false); //setVelocity(0, 0);
+ dropman();
+ }
+ if (x() < 0)
+ done();
+}
+
+void Helicopter::dropman()
+{
+ (void)new Man(canvas(), 15, 25);
+ (void)new Man(canvas(), 35, 25);
+ takeOff();
+}
+
+void Helicopter::done()
+{
+ hits++;
+ if (hits >= 2) {
+ setAnimated(false);
+ delete this;
+ }
+}
+
+void Helicopter::takeOff()
+{
+ setVelocity(-1, 0);
+}
+
+int Helicopter::rtti() const
+{
+ return helicopter_rtti;
+}
+
+void Helicopter::silenceAll()
+{
+ for (Helicopter* h = all.first(); h; h = all.next())
+ h->chikachika.stop();
+}
+
+void Helicopter::deleteAll()
+{
+ Helicopter* h;
+ while ((h = all.first()))
+ delete h;
+}
+
diff --git a/noncore/games/parashoot/helicopter.h b/noncore/games/parashoot/helicopter.h
new file mode 100644
index 0000000..5cb92de
--- a/dev/null
+++ b/noncore/games/parashoot/helicopter.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/sound.h>
+
+#include <qcanvas.h>
+
+class Helicopter : public QCanvasSprite
+{
+
+public:
+ Helicopter(QCanvas*);
+ ~Helicopter();
+ void advance(int phase);
+ void checkCollision();
+ void dropman();
+ void takeOff();
+ void done();
+
+ static void silenceAll();
+ static void deleteAll();
+
+ int rtti() const;
+
+private:
+ int hits;
+ Sound chikachika;
+};
diff --git a/noncore/games/parashoot/interface.cpp b/noncore/games/parashoot/interface.cpp
new file mode 100644
index 0000000..84e5e60
--- a/dev/null
+++ b/noncore/games/parashoot/interface.cpp
@@ -0,0 +1,247 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "interface.h"
+#include "man.h"
+
+#include <qpe/resource.h>
+
+#include <qlabel.h>
+#include <qmessagebox.h>
+#include <qapplication.h>
+#include <qstyle.h>
+#include <qpe/qpetoolbar.h>
+#include <qtoolbutton.h>
+
+ParaShoot::ParaShoot(QWidget* parent, const char* name, WFlags f) :
+ QMainWindow(parent,name,f),
+ canvas(232, 258),
+ fanfare("level_up"),
+ score(0)
+{
+ canvas.setAdvancePeriod(80);
+ QPixmap bg = Resource::loadPixmap("parashoot/sky");
+ canvas.setBackgroundPixmap(bg);
+
+ pb = new QCanvasView(&canvas, this);
+ pb->setFocus();
+
+ setToolBarsMovable( FALSE );
+
+ QPEToolBar* toolbar = new QPEToolBar(this);
+ toolbar->setHorizontalStretchable( TRUE );
+
+ setCaption( tr("ParaShoot") );
+ QPixmap newicon = Resource::loadPixmap("parashoot/manicon");
+ setIcon(newicon);
+ new QToolButton(newicon, tr("New Game"), 0,
+ this, SLOT(newGame()), toolbar, "New Game");
+
+ levelscore = new QLabel(toolbar);
+ levelscore->setBackgroundMode( PaletteButton );
+ levelscore->setAlignment( AlignRight | AlignVCenter | ExpandTabs );
+ toolbar->setStretchableWidget( levelscore );
+ showScore(0,0);
+
+ setCentralWidget(pb);
+
+ autoDropTimer = new QTimer(this);
+ connect (autoDropTimer, SIGNAL(timeout()), this, SLOT(play()) );
+
+ pauseTimer = new QTimer(this);
+ connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) );
+
+ setFocusPolicy(StrongFocus);
+
+ newGame();
+}
+
+
+void ParaShoot::resizeEvent(QResizeEvent *)
+{
+ QSize s = centralWidget()->size();
+ int fw = style().defaultFrameWidth();
+ canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
+}
+
+
+void ParaShoot::showScore( int score, int level )
+{
+ levelscore->setText(tr(" Level: %1 Score: %2 ").arg(score).arg(level) );
+}
+
+
+void ParaShoot::newGame()
+{
+ clear();
+ if (pauseTimer->isActive())
+ pauseTimer->stop();
+ clear();
+ Man::setManCount(0);
+ score = 0;
+ Bullet::setShotCount(0);
+ Bullet::setNobullets(0);
+ nomen = 2;
+ Bullet::setLimit(nomen);
+ level = 0;
+ updatespeed = 80;
+ showScore(0,0);
+ gamestopped = false;
+ Helicopter::deleteAll();
+ waitover = true;
+ base = new Base(&canvas);
+ cannon = new Cannon(&canvas);
+ connect( cannon, SIGNAL(score(int)), this, SLOT(increaseScore(int)));
+ autoDropTimer->start(100);
+}
+
+
+void ParaShoot::clear()
+{
+ autoDropTimer->stop();
+// QCanvasItem* item;
+ QCanvasItemList l = canvas.allItems();
+ for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
+ delete *it;
+ }
+}
+
+void ParaShoot::gameOver()
+{
+ QCanvasItem* item;
+ QCanvasItemList l = canvas.allItems();
+ for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
+ item = *it;
+ if ((item->rtti()==1500) || (item->rtti()==1600) || item->rtti()==1900)
+ item->setAnimated(false);
+ }
+ autoDropTimer->stop();
+ Helicopter::silenceAll();
+
+ int shots = Bullet::getShotCount();
+
+ int shotsFired = cannon->shotsFired();
+ if ( shotsFired == 0 )
+ shotsFired = 1;
+ QCanvasText* gameover = new QCanvasText(
+ tr( " GAME OVER!\n"
+ " Your Score: %1\n"
+ " Parachuters Killed: %2\n"
+ " Accuracy: %3% " ).arg(score).arg(shots).arg(shots * 100 / shotsFired ),
+ &canvas);
+ gameover->setColor(red);
+ gameover->setFont( QFont("times", 18, QFont::Bold) );
+ gameover->move(canvas.width()/2 -110, canvas.height()/2 -50);
+ gameover->setZ(500);
+ gameover->show();
+ gamestopped = true;
+ waitover = false;
+ pauseTimer->start(3000);
+}
+
+void ParaShoot::wait()
+{
+ waitover = true;
+ pauseTimer->stop();
+}
+
+void ParaShoot::play()
+{
+ if (Man::getManCount() < nomen ) {
+ new Man(&canvas);
+ }
+ if (Base::baseDestroyed()) {
+ gameOver();
+ return;
+ }
+}
+
+void ParaShoot::increaseScore(int x)
+{
+ score += x;
+ if ( score / 150 != (score-x) / 150 )
+ levelUp();
+ showScore(level,score);
+}
+
+void ParaShoot::levelUp()
+{
+ level++;
+ int stage = level % 3;
+ switch(stage) {
+ case 0:
+ nomen++;
+ Bullet::setLimit(nomen);
+ fanfare.play();
+ break;
+ case 1:
+ new Helicopter(&canvas);
+ break;
+ case 2:
+ moveFaster();
+ fanfare.play();
+ break;
+ default: return;
+ }
+}
+
+void ParaShoot::moveFaster()
+{
+ if (updatespeed > 50)
+ updatespeed = updatespeed-5;
+ else
+ updatespeed = updatespeed-3;
+ canvas.setAdvancePeriod(updatespeed);
+}
+
+void ParaShoot::keyPressEvent(QKeyEvent* event)
+{
+ if (gamestopped) {
+ if (waitover)
+ newGame();
+ else
+ return;
+ } else {
+ switch(event->key()) {
+ case Key_Up:
+ case Key_F1:
+ case Key_F9:
+ case Key_Space:
+ cannon->shoot();
+ break;
+ case Key_Left:
+ cannon->pointCannon(Cannon::Left);
+ lastcannonkey=Key_Left;
+ break;
+ case Key_Right:
+ cannon->pointCannon(Cannon::Right);
+ lastcannonkey=Key_Right;
+ break;
+ default:
+ return;
+ }
+ }
+}
+
+void ParaShoot::keyReleaseEvent(QKeyEvent* event)
+{
+ if ( lastcannonkey == event->key() )
+ cannon->pointCannon(Cannon::NoDir);
+}
diff --git a/noncore/games/parashoot/interface.h b/noncore/games/parashoot/interface.h
new file mode 100644
index 0000000..3f36d0b
--- a/dev/null
+++ b/noncore/games/parashoot/interface.h
@@ -0,0 +1,79 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "cannon.h"
+#include "base.h"
+#include "helicopter.h"
+
+#include <qpe/sound.h>
+
+#include <qmainwindow.h>
+#include <qtimer.h>
+#include <qlabel.h>
+
+class QCanvas;
+class Helicopter;
+
+//enum Direction{
+// left, right, up, down };
+
+class ParaShoot : public QMainWindow {
+ Q_OBJECT
+
+public:
+ ParaShoot(QWidget* parent=0, const char* name=0, WFlags f=0);
+
+ void clear();
+ void gameOver();
+ int mancount;
+ void levelUp();
+ void moveFaster();
+
+protected:
+ virtual void keyPressEvent(QKeyEvent*);
+ virtual void keyReleaseEvent(QKeyEvent*);
+ virtual void resizeEvent(QResizeEvent *e);
+
+private slots:
+ void increaseScore(int);
+ void newGame();
+ void play();
+ void wait();
+
+private:
+ void showScore( int score, int level );
+ QCanvasView* pb;
+ QCanvas canvas;
+ Cannon* cannon;
+ Base* base;
+ QCanvasText* gameover;
+ QLabel* levelscore;
+ int nomen;
+ int level;
+ int oldscore;
+ int updatespeed;
+ QTimer* autoDropTimer;
+ QTimer* pauseTimer;
+ bool gamestopped;
+ bool waitover;
+ Sound fanfare;
+ int score;
+ int lastcannonkey;
+};
diff --git a/noncore/games/parashoot/main.cpp b/noncore/games/parashoot/main.cpp
new file mode 100644
index 0000000..60eea18
--- a/dev/null
+++ b/noncore/games/parashoot/main.cpp
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "interface.h"
+
+#include <qpe/qpeapplication.h>
+
+int main(int argc, char **argv)
+{
+ QPEApplication app(argc,argv);
+
+ QPEApplication::grabKeyboard();
+
+ ParaShoot m;
+ QPEApplication::setInputMethodHint( &m, QPEApplication::AlwaysOff );
+ app.showMainWidget(&m);
+
+ return app.exec();
+}
diff --git a/noncore/games/parashoot/man.cpp b/noncore/games/parashoot/man.cpp
new file mode 100644
index 0000000..8435572
--- a/dev/null
+++ b/noncore/games/parashoot/man.cpp
@@ -0,0 +1,174 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "codes.h"
+#include "man.h"
+#include "base.h"
+
+#include <qpe/resource.h>
+
+#include <qregexp.h>
+
+int mancount;
+
+Man::Man(QCanvas* canvas) :
+ QCanvasSprite(0, canvas),
+ splat("lose")
+{
+ manarray = new QCanvasPixmapArray();
+ QString m0 = Resource::findPixmap("parashoot/man0001");
+ m0.replace(QRegExp("0001"),"%1");
+ manarray->readPixmaps(m0, 7);
+ setSequence(manarray);
+ setAnimated(true);
+ mancount++;
+ dead = false;
+ start();
+}
+
+Man::Man(QCanvas* canvas, int x, int y) :
+ QCanvasSprite(0, canvas),
+ splat("bang")
+{
+ manarray = new QCanvasPixmapArray();
+ QString m0 = Resource::findPixmap("parashoot/man0001");
+ m0.replace(QString("0001"),"%1");
+ manarray->readPixmaps(m0, 7);
+ setSequence(manarray);
+ move(x, y);
+ setFrame(5);
+ setZ(300);
+ show();
+
+ static bool first_time = TRUE;
+ if (first_time) {
+ first_time = FALSE;
+ QTime midnight(0, 0, 0);
+ srand(midnight.secsTo(QTime::currentTime()) );
+ }
+ int yfallspeed = 0;
+ yfallspeed = (rand() % 3) + 1;
+ setVelocity(0, yfallspeed);
+
+ mancount++;
+ dead = false;
+}
+int f = 0;
+
+void Man::advance(int phase)
+{
+ QCanvasSprite::advance(phase);
+ if (phase == 0) {
+ checkCollision();
+ if (dead) {
+ if (count < 10) {
+ setFrame(6);
+ setVelocity(0,0);
+ count++;
+ } else {
+ delete this;
+ return;
+ }
+ }
+ if (y() > canvas()->height()-43) {
+ setFrame(f%5);
+ f++;
+ move(x(), canvas()->height()-26);
+ setVelocity(-2, 0);
+ }
+ }
+}
+
+void Man::setInitialCoords()
+{
+ static bool first_time = TRUE;
+ if (first_time) {
+ first_time = FALSE;
+ QTime midnight(0, 0, 0);
+ srand(midnight.secsTo(QTime::currentTime()) );
+ }
+ dx = rand() % (canvas()->width()-16);
+ dy = -43; //height of a man off the screen
+}
+
+//check if man has reached the base
+void Man::checkCollision()
+{
+ if ( (x() < 23) && (y() == canvas()->height()-26)) {
+ QCanvasItem* item;
+ QCanvasItemList l=collisions(FALSE);
+ for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
+ item = *it;
+ if ( (item->rtti()== 1800) && (item->collidesWith(this)) ) {
+ Base* base = (Base*) item;
+ base->damageBase();
+ start();
+ }
+ }
+ }
+}
+
+void Man::start()
+{
+ setInitialCoords();
+ move(dx, dy);
+ setFrame(5);
+ setZ(300);
+ show();
+
+ static bool first_time = TRUE;
+ if (first_time) {
+ first_time = FALSE;
+ QTime midnight(0, 0, 0);
+ srand(midnight.secsTo(QTime::currentTime()) );
+ }
+ int yfallspeed = 0;
+ yfallspeed = (rand() % 3) + 1;
+ setVelocity(0, yfallspeed);
+}
+
+void Man::done()
+{
+ splat.play();
+ count = 0;
+ dead = true;
+ setFrame(6);
+}
+
+int Man::getManCount()
+{
+ return mancount;
+}
+
+void Man::setManCount(int count)
+{
+ mancount = count;
+}
+
+
+int Man::rtti() const
+{
+ return man_rtti;
+}
+
+Man::~Man()
+{
+ mancount--;
+}
diff --git a/noncore/games/parashoot/man.h b/noncore/games/parashoot/man.h
new file mode 100644
index 0000000..e48fc20
--- a/dev/null
+++ b/noncore/games/parashoot/man.h
@@ -0,0 +1,52 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/sound.h>
+
+#include <qcanvas.h>
+#include <qdatetime.h>
+
+#include <stdlib.h>
+
+class Man : public QCanvasSprite
+{
+
+public:
+ Man (QCanvas*);
+ Man (QCanvas*, int x, int y);
+ ~Man();
+ void advance(int phase);
+ void setInitialCoords();
+ void checkCollision();
+ void start();
+ void done();
+ static int getManCount();
+ static void setManCount(int count);
+ int rtti() const;
+// int mancount;
+
+private:
+ QCanvasPixmapArray* manarray;
+ int dx;
+ int dy;
+ bool dead;
+ int count;
+ Sound splat;
+};
diff --git a/noncore/games/parashoot/parashoot.pro b/noncore/games/parashoot/parashoot.pro
new file mode 100644
index 0000000..631560b
--- a/dev/null
+++ b/noncore/games/parashoot/parashoot.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = interface.h man.h cannon.h base.h bullet.h helicopter.h
+SOURCES = main.cpp interface.cpp man.cpp cannon.cpp base.cpp bullet.cpp helicopter.cpp
+TARGET = parashoot
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/parashoot.ts
diff --git a/noncore/games/parashoot/qpe-parashoot.control b/noncore/games/parashoot/qpe-parashoot.control
new file mode 100644
index 0000000..82e9421
--- a/dev/null
+++ b/noncore/games/parashoot/qpe-parashoot.control
@@ -0,0 +1,9 @@
+Files: bin/parashoot apps/Games/parashoot.desktop pics/parashoot
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Game: shoot the parachutists
+ A game for the Qtopia environment.
diff --git a/noncore/games/qasteroids/.cvsignore b/noncore/games/qasteroids/.cvsignore
new file mode 100644
index 0000000..c152c55
--- a/dev/null
+++ b/noncore/games/qasteroids/.cvsignore
@@ -0,0 +1,2 @@
+moc_*.cpp
+Makefile
diff --git a/noncore/games/qasteroids/Makefile.in b/noncore/games/qasteroids/Makefile.in
new file mode 100644
index 0000000..7312743
--- a/dev/null
+++ b/noncore/games/qasteroids/Makefile.in
@@ -0,0 +1,155 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qasteroids
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = ledmeter.h \
+ sprites.h \
+ toplevel.h \
+ view.h
+SOURCES = ledmeter.cpp \
+ toplevel.cpp \
+ view.cpp \
+ main.cpp
+OBJECTS = ledmeter.o \
+ toplevel.o \
+ view.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_ledmeter.cpp \
+ moc_toplevel.cpp \
+ moc_view.cpp
+OBJMOC = moc_ledmeter.o \
+ moc_toplevel.o \
+ moc_view.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake qasteroids.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+ledmeter.o: ledmeter.cpp \
+ ledmeter.h
+
+toplevel.o: toplevel.cpp \
+ toplevel.h \
+ view.h \
+ sprites.h \
+ ledmeter.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+view.o: view.cpp \
+ view.h \
+ sprites.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+main.o: main.cpp \
+ toplevel.h \
+ view.h \
+ sprites.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_ledmeter.o: moc_ledmeter.cpp \
+ ledmeter.h
+
+moc_toplevel.o: moc_toplevel.cpp \
+ toplevel.h \
+ view.h \
+ sprites.h
+
+moc_view.o: moc_view.cpp \
+ view.h \
+ sprites.h
+
+moc_ledmeter.cpp: ledmeter.h
+ $(MOC) ledmeter.h -o moc_ledmeter.cpp
+
+moc_toplevel.cpp: toplevel.h
+ $(MOC) toplevel.h -o moc_toplevel.cpp
+
+moc_view.cpp: view.h
+ $(MOC) view.h -o moc_view.cpp
+
+
diff --git a/noncore/games/qasteroids/ledmeter.cpp b/noncore/games/qasteroids/ledmeter.cpp
new file mode 100644
index 0000000..f4d4d1a
--- a/dev/null
+++ b/noncore/games/qasteroids/ledmeter.cpp
@@ -0,0 +1,135 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************//*
+ * KAsteroids - Copyright (c) Martin R. Jones 1997
+ *
+ * Part of the KDE project
+ */
+
+#include <qpainter.h>
+#include "ledmeter.h"
+
+KALedMeter::KALedMeter( QWidget *parent ) : QFrame( parent )
+{
+ mCRanges.setAutoDelete( TRUE );
+ mRange = 100;
+ mCount = 20;
+ mCurrentCount = 0;
+ mValue = 0;
+ setMinimumWidth( mCount * 2 + frameWidth() );
+}
+
+void KALedMeter::setRange( int r )
+{
+ mRange = r;
+ if ( mRange < 1 )
+ mRange = 1;
+ setValue( mValue );
+ update();
+}
+
+void KALedMeter::setCount( int c )
+{
+ mCount = c;
+ if ( mCount < 1 )
+ mCount = 1;
+ setMinimumWidth( mCount * 2 + frameWidth() );
+ calcColorRanges();
+ setValue( mValue );
+ update();
+}
+
+void KALedMeter::setValue( int v )
+{
+ mValue = v;
+ if ( mValue > mRange )
+ mValue = mRange;
+ else if ( mValue < 0 )
+ mValue = 0;
+ int c = ( mValue + mRange / mCount - 1 ) * mCount / mRange;
+ if ( c != mCurrentCount )
+ {
+ mCurrentCount = c;
+ update();
+ }
+}
+
+void KALedMeter::addColorRange( int pc, const QColor &c )
+{
+ ColorRange *cr = new ColorRange;
+ cr->mPc = pc;
+ cr->mColor = c;
+ mCRanges.append( cr );
+ calcColorRanges();
+}
+
+void KALedMeter::resizeEvent( QResizeEvent *e )
+{
+ QFrame::resizeEvent( e );
+ int w = ( width() - frameWidth() - 2 ) / mCount * mCount;
+ w += frameWidth() + 2;
+ setFrameRect( QRect( 0, 0, w, height() ) );
+}
+
+void KALedMeter::drawContents( QPainter *p )
+{
+ QRect b = contentsRect();
+
+ unsigned cidx = 0;
+ int ncol = mCount;
+ QColor col = colorGroup().foreground();
+
+ if ( !mCRanges.isEmpty() )
+ {
+ col = mCRanges.at( cidx )->mColor;
+ ncol = mCRanges.at( cidx )->mValue;
+ }
+ p->setBrush( col );
+ p->setPen( col );
+
+ int lw = b.width() / mCount;
+ int lx = b.left() + 1;
+ for ( int i = 0; i < mCurrentCount; i++, lx += lw )
+ {
+ if ( i > ncol )
+ {
+ if ( ++cidx < mCRanges.count() )
+ {
+ col = mCRanges.at( cidx )->mColor;
+ ncol = mCRanges.at( cidx )->mValue;
+ p->setBrush( col );
+ p->setPen( col );
+ }
+ }
+
+ p->drawRect( lx, b.top() + 1, lw - 1, b.height() - 2 );
+ }
+}
+
+void KALedMeter::calcColorRanges()
+{
+ int prev = 0;
+ ColorRange *cr;
+ for ( cr = mCRanges.first(); cr; cr = mCRanges.next() )
+ {
+ cr->mValue = prev + cr->mPc * mCount / 100;
+ prev = cr->mValue;
+ }
+}
+
diff --git a/noncore/games/qasteroids/ledmeter.h b/noncore/games/qasteroids/ledmeter.h
new file mode 100644
index 0000000..b2f06c1
--- a/dev/null
+++ b/noncore/games/qasteroids/ledmeter.h
@@ -0,0 +1,72 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************//*
+ * KAsteroids - Copyright (c) Martin R. Jones 1997
+ *
+ * Part of the KDE project
+ */
+
+#ifndef __LEDMETER_H__
+#define __LEDMETER_H__
+
+#include <qframe.h>
+#include <qlist.h>
+
+#define QPtrList QList
+
+class KALedMeter : public QFrame
+{
+ Q_OBJECT
+public:
+ KALedMeter( QWidget *parent );
+
+ int range() const { return mRange; }
+ void setRange( int r );
+
+ int count() const { return mCount; }
+ void setCount( int c );
+
+ int value () const { return mValue; }
+
+ void addColorRange( int pc, const QColor &c );
+
+public slots:
+ void setValue( int v );
+
+protected:
+ virtual void resizeEvent( QResizeEvent * );
+ virtual void drawContents( QPainter * );
+ void calcColorRanges();
+
+protected:
+ struct ColorRange
+ {
+ int mPc;
+ int mValue;
+ QColor mColor;
+ };
+
+ int mRange;
+ int mCount;
+ int mCurrentCount;
+ int mValue;
+ QPtrList<ColorRange> mCRanges;
+};
+
+#endif
diff --git a/noncore/games/qasteroids/main.cpp b/noncore/games/qasteroids/main.cpp
new file mode 100644
index 0000000..7d1682c
--- a/dev/null
+++ b/noncore/games/qasteroids/main.cpp
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "toplevel.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char *argv[] )
+{
+ QPEApplication app( argc, argv );
+
+ QPEApplication::grabKeyboard();
+
+ KAstTopLevel *mainWidget = new KAstTopLevel();
+ app.showMainWidget( mainWidget );
+
+ app.exec();
+}
+
diff --git a/noncore/games/qasteroids/qasteroids.pro b/noncore/games/qasteroids/qasteroids.pro
new file mode 100644
index 0000000..14a0901
--- a/dev/null
+++ b/noncore/games/qasteroids/qasteroids.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = ledmeter.h sprites.h toplevel.h view.h
+SOURCES = ledmeter.cpp toplevel.cpp view.cpp main.cpp
+TARGET = qasteroids
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/qasteroids.ts
diff --git a/noncore/games/qasteroids/qpe-qasteroids.control b/noncore/games/qasteroids/qpe-qasteroids.control
new file mode 100644
index 0000000..c1b328e
--- a/dev/null
+++ b/noncore/games/qasteroids/qpe-qasteroids.control
@@ -0,0 +1,9 @@
+Files: bin/qasteroids apps/Games/qasteroids.desktop pics/qasteroids pics/Asteroids.png
+Priority: optional
+Section: qpe/games
+Maintainer: Martin Jones <mjones@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Game: shoot the asteroids
+ A game for the Qtopia environment.
diff --git a/noncore/games/qasteroids/sprites.h b/noncore/games/qasteroids/sprites.h
new file mode 100644
index 0000000..0827821
--- a/dev/null
+++ b/noncore/games/qasteroids/sprites.h
@@ -0,0 +1,147 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************//*
+ * KAsteroids - Copyright (c) Martin R. Jones 1997
+ *
+ * Part of the KDE project
+ */
+
+#ifndef __SPRITES_H__
+#define __SPRITES_H__
+
+#include <qcanvas.h>
+
+#define ID_ROCK_LARGE 1024
+#define ID_ROCK_MEDIUM 1025
+#define ID_ROCK_SMALL 1026
+
+#define ID_MISSILE 1030
+
+#define ID_BIT 1040
+#define ID_EXHAUST 1041
+
+#define ID_ENERGY_POWERUP 1310
+#define ID_TELEPORT_POWERUP 1311
+#define ID_BRAKE_POWERUP 1312
+#define ID_SHIELD_POWERUP 1313
+#define ID_SHOOT_POWERUP 1314
+
+#define ID_SHIP 1350
+#define ID_SHIELD 1351
+
+#define MAX_SHIELD_AGE 350
+#define MAX_POWERUP_AGE 500
+#define MAX_MISSILE_AGE 20
+
+class KMissile : public QCanvasSprite
+{
+public:
+ KMissile( QCanvasPixmapArray *s, QCanvas *c ) : QCanvasSprite( s, c )
+ { myAge = 0; }
+
+ virtual int rtti() const { return ID_MISSILE; }
+
+ void growOlder() { myAge++; }
+ bool expired() { return myAge > MAX_MISSILE_AGE; }
+
+private:
+ int myAge;
+};
+
+class KBit : public QCanvasSprite
+{
+public:
+ KBit( QCanvasPixmapArray *s, QCanvas *c ) : QCanvasSprite( s, c )
+ { death = 7; }
+
+ virtual int rtti() const { return ID_BIT; }
+
+ void setDeath( int d ) { death = d; }
+ void growOlder() { death--; }
+ bool expired() { return death <= 0; }
+
+private:
+ int death;
+};
+
+class KExhaust : public QCanvasSprite
+{
+public:
+ KExhaust( QCanvasPixmapArray *s, QCanvas *c ) : QCanvasSprite( s, c )
+ { death = 1; }
+
+ virtual int rtti() const { return ID_EXHAUST; }
+
+ void setDeath( int d ) { death = d; }
+ void growOlder() { death--; }
+ bool expired() { return death <= 0; }
+
+private:
+ int death;
+};
+
+class KPowerup : public QCanvasSprite
+{
+public:
+ KPowerup( QCanvasPixmapArray *s, QCanvas *c, int t ) : QCanvasSprite( s, c ),
+ myAge( 0 ), type(t) { }
+
+ virtual int rtti() const { return type; }
+
+ void growOlder() { myAge++; }
+ bool expired() const { return myAge > MAX_POWERUP_AGE; }
+
+protected:
+ int myAge;
+ int type;
+};
+
+class KRock : public QCanvasSprite
+{
+public:
+ KRock (QCanvasPixmapArray *s, QCanvas *c, int t, int sk, int st) : QCanvasSprite( s, c )
+ { type = t; skip = cskip = sk; step = st; }
+
+ void nextFrame()
+ {
+ if (cskip-- <= 0) {
+ setFrame( (frame()+step+frameCount())%frameCount() );
+ cskip = QABS(skip);
+ }
+ }
+
+ virtual int rtti() const { return type; }
+
+private:
+ int type;
+ int skip;
+ int cskip;
+ int step;
+};
+
+class KShield : public QCanvasSprite
+{
+public:
+ KShield( QCanvasPixmapArray *s, QCanvas *c )
+ : QCanvasSprite( s, c ) {}
+
+ virtual int rtti() const { return ID_SHIELD; }
+};
+
+#endif
diff --git a/noncore/games/qasteroids/toplevel.cpp b/noncore/games/qasteroids/toplevel.cpp
new file mode 100644
index 0000000..57242a0
--- a/dev/null
+++ b/noncore/games/qasteroids/toplevel.cpp
@@ -0,0 +1,514 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************//*
+ * KAsteroids - Copyright (c) Martin R. Jones 1997
+ *
+ * Part of the KDE project
+ */
+// --- toplevel.cpp ---
+
+#include "toplevel.h"
+#include "ledmeter.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/resource.h>
+
+#include <qaccel.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qlcdnumber.h>
+#include <qpushbutton.h>
+
+
+#define SB_SCORE 1
+#define SB_LEVEL 2
+#define SB_SHIPS 3
+
+struct SLevel
+{
+ int nrocks;
+ double rockSpeed;
+};
+
+#define MAX_LEVELS 16
+
+SLevel levels[MAX_LEVELS] =
+{
+ { 1, 0.4 },
+ { 1, 0.6 },
+ { 2, 0.5 },
+ { 2, 0.7 },
+ { 2, 0.8 },
+ { 3, 0.6 },
+ { 3, 0.7 },
+ { 3, 0.8 },
+ { 4, 0.6 },
+ { 4, 0.7 },
+ { 4, 0.8 },
+ { 5, 0.7 },
+ { 5, 0.8 },
+ { 5, 0.9 },
+ { 5, 1.0 }
+};
+
+const char *soundEvents[] =
+{
+ "ShipDestroyed",
+ "RockDestroyed",
+ 0
+};
+
+const char *soundDefaults[] =
+{
+ "Explosion.wav",
+ "ploop.wav",
+ 0
+};
+
+
+KAstTopLevel::KAstTopLevel( QWidget *parent, const char *name )
+ : QMainWindow( parent, name )
+{
+ setCaption( tr("Asteroids") );
+ QWidget *border = new QWidget( this );
+ border->setBackgroundColor( black );
+ setCentralWidget( border );
+
+ QVBoxLayout *borderLayout = new QVBoxLayout( border );
+
+ QWidget *mainWin = new QWidget( border );
+ borderLayout->addWidget( mainWin, 2, AlignHCenter );
+
+ view = new KAsteroidsView( mainWin );
+ connect( view, SIGNAL( shipKilled() ), SLOT( slotShipKilled() ) );
+ connect( view, SIGNAL( rockHit(int) ), SLOT( slotRockHit(int) ) );
+ connect( view, SIGNAL( rocksRemoved() ), SLOT( slotRocksRemoved() ) );
+ connect( view, SIGNAL( updateVitals() ), SLOT( slotUpdateVitals() ) );
+
+ QVBoxLayout *vb = new QVBoxLayout( mainWin );
+ QHBoxLayout *hb = new QHBoxLayout;
+ QHBoxLayout *hbd = new QHBoxLayout;
+ vb->addLayout( hb );
+
+ QFont labelFont( "helvetica", 12 );
+ QColorGroup grp( darkGreen, black, QColor( 128, 128, 128 ),
+ QColor( 64, 64, 64 ), black, darkGreen, black );
+ QPalette pal( grp, grp, grp );
+
+ mainWin->setPalette( pal );
+
+ QLabel *label;
+ label = new QLabel( tr("Score"), mainWin );
+ label->setFont( labelFont );
+ label->setPalette( pal );
+// label->setFixedWidth( label->sizeHint().width() );
+ hb->addWidget( label );
+
+ scoreLCD = new QLCDNumber( 5, mainWin );
+ scoreLCD->setFrameStyle( QFrame::NoFrame );
+ scoreLCD->setSegmentStyle( QLCDNumber::Flat );
+ scoreLCD->setFixedHeight( 16 );
+ scoreLCD->setPalette( pal );
+ hb->addWidget( scoreLCD );
+ hb->addStretch( 1 );
+
+ label = new QLabel( tr("Level"), mainWin );
+ label->setFont( labelFont );
+ label->setPalette( pal );
+// label->setFixedWidth( label->sizeHint().width() );
+ hb->addWidget( label );
+
+ levelLCD = new QLCDNumber( 2, mainWin );
+ levelLCD->setFrameStyle( QFrame::NoFrame );
+ levelLCD->setSegmentStyle( QLCDNumber::Flat );
+ levelLCD->setFixedHeight( 16 );
+ levelLCD->setPalette( pal );
+ hb->addWidget( levelLCD );
+ hb->addStretch( 1 );
+
+ label = new QLabel( tr("Ships"), mainWin );
+ label->setFont( labelFont );
+// label->setFixedWidth( label->sizeHint().width() );
+ label->setPalette( pal );
+ hb->addWidget( label );
+
+ shipsLCD = new QLCDNumber( 1, mainWin );
+ shipsLCD->setFrameStyle( QFrame::NoFrame );
+ shipsLCD->setSegmentStyle( QLCDNumber::Flat );
+ shipsLCD->setFixedHeight( 16 );
+ shipsLCD->setPalette( pal );
+ hb->addWidget( shipsLCD );
+
+// hb->addStrut( 14 );
+
+ vb->addWidget( view, 10 );
+
+// -- bottom layout:
+ vb->addLayout( hbd );
+
+ QFont smallFont( "helvetica", 12 );
+ hbd->addSpacing( 5 );
+
+/*
+ label = new QLabel( tr( "T" ), mainWin );
+ label->setFont( smallFont );
+ label->setFixedWidth( label->sizeHint().width() );
+ label->setPalette( pal );
+ hbd->addWidget( label );
+
+ teleportsLCD = new QLCDNumber( 1, mainWin );
+ teleportsLCD->setFrameStyle( QFrame::NoFrame );
+ teleportsLCD->setSegmentStyle( QLCDNumber::Flat );
+ teleportsLCD->setPalette( pal );
+ teleportsLCD->setFixedHeight( 18 );
+ hbd->addWidget( teleportsLCD );
+
+ hbd->addSpacing( 10 );
+*/
+ label = new QLabel( mainWin );
+ label->setPixmap( Resource::loadPixmap("qasteroids/powerups/brake.png") );
+ label->setFixedWidth( 16 );
+ label->setPalette( pal );
+ hbd->addWidget( label );
+
+ brakesLCD = new QLCDNumber( 1, mainWin );
+ brakesLCD->setFrameStyle( QFrame::NoFrame );
+ brakesLCD->setSegmentStyle( QLCDNumber::Flat );
+ brakesLCD->setPalette( pal );
+ brakesLCD->setFixedHeight( 16 );
+ hbd->addWidget( brakesLCD );
+
+ hbd->addSpacing( 5 );
+
+ label = new QLabel( mainWin );
+ label->setPixmap( Resource::loadPixmap("qasteroids/powerups/shield.png") );
+ label->setFixedWidth( 16 );
+ label->setPalette( pal );
+ hbd->addWidget( label );
+
+ shieldLCD = new QLCDNumber( 1, mainWin );
+ shieldLCD->setFrameStyle( QFrame::NoFrame );
+ shieldLCD->setSegmentStyle( QLCDNumber::Flat );
+ shieldLCD->setPalette( pal );
+ shieldLCD->setFixedHeight( 16 );
+ hbd->addWidget( shieldLCD );
+
+ hbd->addSpacing( 5 );
+
+ label = new QLabel( mainWin );
+ label->setPixmap( Resource::loadPixmap("qasteroids/powerups/shoot.png") );
+ label->setFixedWidth( 16 );
+ label->setPalette( pal );
+ hbd->addWidget( label );
+
+ shootLCD = new QLCDNumber( 1, mainWin );
+ shootLCD->setFrameStyle( QFrame::NoFrame );
+ shootLCD->setSegmentStyle( QLCDNumber::Flat );
+ shootLCD->setPalette( pal );
+ shootLCD->setFixedHeight( 16 );
+ hbd->addWidget( shootLCD );
+
+ hbd->addStretch( 1 );
+
+ label = new QLabel( tr( "Fuel" ), mainWin );
+ label->setFont( smallFont );
+ label->setFixedWidth( label->sizeHint().width() + 5 );
+ label->setPalette( pal );
+ hbd->addWidget( label );
+
+ powerMeter = new KALedMeter( mainWin );
+ powerMeter->setFrameStyle( QFrame::Box | QFrame::Plain );
+ powerMeter->setRange( MAX_POWER_LEVEL );
+ powerMeter->addColorRange( 10, darkRed );
+ powerMeter->addColorRange( 20, QColor(160, 96, 0) );
+ powerMeter->addColorRange( 70, darkGreen );
+ powerMeter->setCount( 15 );
+ powerMeter->setPalette( pal );
+ powerMeter->setFixedSize( 60, 12 );
+ hbd->addWidget( powerMeter );
+
+ shipsRemain = 3;
+ showHiscores = FALSE;
+
+ actions.insert( Qt::Key_Up, Thrust );
+ actions.insert( Qt::Key_Left, RotateLeft );
+ actions.insert( Qt::Key_Right, RotateRight );
+ actions.insert( Qt::Key_Enter, Shoot );
+ actions.insert( Qt::Key_Z, Teleport );
+ actions.insert( Qt::Key_Down, Brake );
+ actions.insert( Qt::Key_P, Pause );
+ actions.insert( Key_F12, Launch );
+ actions.insert( Key_F11, Shield );
+ actions.insert( Key_F9, NewGame );
+
+// actions.insert( Qt::Key_S, Shield );
+// actions.insert( Qt::Key_X, Brake );
+// actions.insert( Qt::Key_L, Launch );
+ actions.insert( Qt::Key_Space, Shoot );
+
+ view->showText( tr( "Press Calendar to start playing" ), yellow );
+
+ setFocusPolicy( StrongFocus );
+
+ slotNewGame();
+}
+
+KAstTopLevel::~KAstTopLevel()
+{
+}
+
+void KAstTopLevel::playSound( const char * )
+{
+}
+
+void KAstTopLevel::keyPressEvent( QKeyEvent *event )
+{
+ if ( event->isAutoRepeat() || !actions.contains( event->key() ) )
+ {
+ event->ignore();
+ return;
+ }
+
+ Action a = actions[ event->key() ];
+
+ switch ( a )
+ {
+ case RotateLeft:
+ view->rotateLeft( TRUE );
+ break;
+
+ case RotateRight:
+ view->rotateRight( TRUE );
+ break;
+
+ case Thrust:
+ view->thrust( TRUE );
+ break;
+
+ case Shoot:
+ view->shoot( TRUE );
+ break;
+
+ case Shield:
+ view->setShield( TRUE );
+ break;
+
+ case Teleport:
+ view->teleport( TRUE );
+ break;
+
+ case Brake:
+ view->brake( TRUE );
+ break;
+
+ default:
+ event->ignore();
+ return;
+ }
+ event->accept();
+}
+
+void KAstTopLevel::keyReleaseEvent( QKeyEvent *event )
+{
+ if ( event->isAutoRepeat() || !actions.contains( event->key() ) )
+ {
+ event->ignore();
+ return;
+ }
+
+ Action a = actions[ event->key() ];
+
+ switch ( a )
+ {
+ case RotateLeft:
+ view->rotateLeft( FALSE );
+ break;
+
+ case RotateRight:
+ view->rotateRight( FALSE );
+ break;
+
+ case Thrust:
+ view->thrust( FALSE );
+ break;
+
+ case Shoot:
+ view->shoot( FALSE );
+ break;
+
+ case Brake:
+ view->brake( FALSE );
+ break;
+
+ case Shield:
+ view->setShield( FALSE );
+ break;
+
+ case Teleport:
+ view->teleport( FALSE );
+ break;
+
+ case Launch:
+ if ( waitShip )
+ {
+ view->newShip();
+ waitShip = FALSE;
+ view->hideText();
+ }
+ else
+ {
+ event->ignore();
+ return;
+ }
+ break;
+
+ case NewGame:
+ slotNewGame();
+ break;
+/*
+ case Pause:
+ {
+ view->pause( TRUE );
+ QMessageBox::information( this,
+ tr("KAsteroids is paused"),
+ tr("Paused") );
+ view->pause( FALSE );
+ }
+ break;
+*/
+ default:
+ event->ignore();
+ return;
+ }
+
+ event->accept();
+}
+
+void KAstTopLevel::showEvent( QShowEvent *e )
+{
+ QMainWindow::showEvent( e );
+ view->pause( FALSE );
+ setFocus();
+}
+
+void KAstTopLevel::hideEvent( QHideEvent *e )
+{
+ QMainWindow::hideEvent( e );
+ view->pause( TRUE );
+}
+
+void KAstTopLevel::focusInEvent( QFocusEvent * )
+{
+ view->pause( FALSE );
+ setFocus();
+}
+
+void KAstTopLevel::focusOutEvent( QFocusEvent * )
+{
+ view->pause( TRUE );
+}
+
+void KAstTopLevel::slotNewGame()
+{
+ shipsRemain = 3;
+ score = 0;
+ scoreLCD->display( 0 );
+ level = 0;
+ levelLCD->display( level+1 );
+ shipsLCD->display( shipsRemain-1 );
+ view->newGame();
+ view->setRockSpeed( levels[0].rockSpeed );
+ view->addRocks( levels[0].nrocks );
+ view->newShip();
+ waitShip = FALSE;
+ view->hideText();
+ isPaused = FALSE;
+}
+
+void KAstTopLevel::slotShipKilled()
+{
+ shipsRemain--;
+ shipsLCD->display( shipsRemain-1 );
+
+ playSound( "ShipDestroyed" );
+
+ if ( shipsRemain > 0 )
+ {
+ waitShip = TRUE;
+ view->showText( tr( "Ship Destroyed.\nPress Launch/Home key."), yellow );
+ }
+ else
+ {
+ view->endGame();
+ doStats();
+ }
+}
+
+void KAstTopLevel::slotRockHit( int size )
+{
+ switch ( size )
+ {
+ case 0:
+ score += 10;
+ break;
+
+ case 1:
+ score += 20;
+ break;
+
+ default:
+ score += 40;
+ }
+
+ playSound( "RockDestroyed" );
+
+ scoreLCD->display( score );
+}
+
+void KAstTopLevel::slotRocksRemoved()
+{
+ level++;
+
+ if ( level >= MAX_LEVELS )
+ level = MAX_LEVELS - 1;
+
+ view->setRockSpeed( levels[level-1].rockSpeed );
+ view->addRocks( levels[level-1].nrocks );
+
+ levelLCD->display( level+1 );
+}
+
+void KAstTopLevel::doStats()
+{
+ QString r( "0.00" );
+ if ( view->shots() )
+ r = QString::number( (double)view->hits() / view->shots() * 100.0,
+ 'g', 2 );
+
+ view->showText( tr( "Game Over.\nPress Calendar for a new game." ), yellow, FALSE );
+}
+
+void KAstTopLevel::slotUpdateVitals()
+{
+ brakesLCD->display( view->brakeCount() );
+ shieldLCD->display( view->shieldCount() );
+ shootLCD->display( view->shootCount() );
+// teleportsLCD->display( view->teleportCount() );
+ powerMeter->setValue( view->power() );
+}
diff --git a/noncore/games/qasteroids/toplevel.h b/noncore/games/qasteroids/toplevel.h
new file mode 100644
index 0000000..4e1ac9c
--- a/dev/null
+++ b/noncore/games/qasteroids/toplevel.h
@@ -0,0 +1,99 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************//*
+ * KAsteroids - Copyright (c) Martin R. Jones 1997
+ *
+ * Part of the KDE project
+ */
+
+#ifndef __KAST_TOPLEVEL_H__
+#define __KAST_TOPLEVEL_H__
+
+#include <qmainwindow.h>
+#include <qdict.h>
+#include <qmap.h>
+
+#include "view.h"
+
+
+class KALedMeter;
+class QLCDNumber;
+
+class KAstTopLevel : public QMainWindow
+{
+ Q_OBJECT
+public:
+ KAstTopLevel( QWidget *parent=0, const char *name=0 );
+ virtual ~KAstTopLevel();
+
+private:
+ void playSound( const char *snd );
+ void readSoundMapping();
+ void doStats();
+
+protected:
+ virtual void showEvent( QShowEvent * );
+ virtual void hideEvent( QHideEvent * );
+ virtual void keyPressEvent( QKeyEvent *event );
+ virtual void keyReleaseEvent( QKeyEvent *event );
+ virtual void focusInEvent( QFocusEvent *event );
+ virtual void focusOutEvent( QFocusEvent *event );
+
+private slots:
+ void slotNewGame();
+
+ void slotShipKilled();
+ void slotRockHit( int size );
+ void slotRocksRemoved();
+
+ void slotUpdateVitals();
+
+private:
+ KAsteroidsView *view;
+ QLCDNumber *scoreLCD;
+ QLCDNumber *levelLCD;
+ QLCDNumber *shipsLCD;
+
+ QLCDNumber *teleportsLCD;
+// QLCDNumber *bombsLCD;
+ QLCDNumber *brakesLCD;
+ QLCDNumber *shieldLCD;
+ QLCDNumber *shootLCD;
+ KALedMeter *powerMeter;
+
+ bool sound;
+ QDict<QString> soundDict;
+
+ // waiting for user to press Enter to launch a ship
+ bool waitShip;
+ bool isPaused;
+
+ int shipsRemain;
+ int score;
+ int level;
+ bool showHiscores;
+
+ enum Action { Launch, Thrust, RotateLeft, RotateRight, Shoot, Teleport,
+ Brake, Shield, Pause, NewGame };
+
+ QMap<int,Action> actions;
+};
+
+#endif
+
diff --git a/noncore/games/qasteroids/view.cpp b/noncore/games/qasteroids/view.cpp
new file mode 100644
index 0000000..ef08343
--- a/dev/null
+++ b/noncore/games/qasteroids/view.cpp
@@ -0,0 +1,884 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************//*
+ * KAsteroids - Copyright (c) Martin R. Jones 1997
+ *
+ * Part of the KDE project
+ */
+
+#include "view.h"
+
+#include <qpe/resource.h>
+
+#include <qapplication.h>
+#include <qkeycode.h>
+#include <qaccel.h>
+
+#include <stdlib.h>
+#include <math.h>
+
+#define IMG_BACKGROUND "qasteroids/bg.png"
+
+#define REFRESH_DELAY 33
+#define SHIP_SPEED 0.3
+#define MISSILE_SPEED 10.0
+#define SHIP_STEPS 64
+#define ROTATE_RATE 2
+#define SHIELD_ON_COST 1
+#define SHIELD_HIT_COST 30
+#define BRAKE_ON_COST 4
+
+#define MAX_ROCK_SPEED 2.5
+#define MAX_POWERUP_SPEED 1.5
+#define MAX_SHIP_SPEED 8
+#define MAX_BRAKES 5
+#define MAX_SHIELDS 5
+#define MAX_FIREPOWER 5
+
+#define TEXT_SPEED 4
+
+#define PI_X_2 6.283185307
+#ifndef M_PI
+#define M_PI 3.141592654
+#endif
+
+struct
+{
+ int id;
+ const char *path;
+ int frames;
+}
+kas_animations [] =
+{
+// { ID_ROCK_LARGE, "rock1/rock1\%1.png", 32 },
+ { ID_ROCK_MEDIUM, "rock2/rock2\%1.png", 32 },
+ { ID_ROCK_SMALL, "rock3/rock3\%1.png", 32 },
+ { ID_SHIP, "ship/ship\%1.png", 32 },
+ { ID_MISSILE, "missile/missile.png", 1 },
+ { ID_BIT, "bits/bits\%1.png", 16 },
+ { ID_EXHAUST, "exhaust/exhaust.png", 1 },
+ { ID_ENERGY_POWERUP, "powerups/energy.png", 1 },
+// { ID_TELEPORT_POWERUP, "powerups/teleport%1.png", 12 },
+ { ID_BRAKE_POWERUP, "powerups/brake.png", 1 },
+ { ID_SHIELD_POWERUP, "powerups/shield.png", 1 },
+ { ID_SHOOT_POWERUP, "powerups/shoot.png", 1 },
+ { ID_SHIELD, "shield/shield\%1.png", 6 },
+ { 0, 0, 0 }
+};
+
+
+
+KAsteroidsView::KAsteroidsView( QWidget *parent, const char *name )
+ : QWidget( parent, name ),
+ field(200, 200),
+ view(&field,this)
+{
+ view.setVScrollBarMode( QScrollView::AlwaysOff );
+ view.setHScrollBarMode( QScrollView::AlwaysOff );
+ rocks.setAutoDelete( TRUE );
+ missiles.setAutoDelete( TRUE );
+ bits.setAutoDelete( TRUE );
+ powerups.setAutoDelete( TRUE );
+ exhaust.setAutoDelete( TRUE );
+
+ QPixmap pm( Resource::loadPixmap(IMG_BACKGROUND) );
+ field.setBackgroundPixmap( pm );
+
+ textSprite = new QCanvasText( &field );
+ QFont font( "helvetica", 14 );
+ textSprite->setFont( font );
+
+ shield = 0;
+ shieldOn = FALSE;
+ refreshRate = REFRESH_DELAY;
+
+ readSprites();
+
+ shieldTimer = new QTimer( this );
+ connect( shieldTimer, SIGNAL(timeout()), this, SLOT(hideShield()) );
+ mTimerId = -1;
+
+ shipPower = MAX_POWER_LEVEL;
+ vitalsChanged = TRUE;
+ can_destroy_powerups = FALSE;
+
+ mPaused = TRUE;
+}
+
+// - - -
+
+KAsteroidsView::~KAsteroidsView()
+{
+}
+
+// - - -
+
+void KAsteroidsView::reset()
+{
+ rocks.clear();
+ missiles.clear();
+ bits.clear();
+ powerups.clear();
+ exhaust.clear();
+
+ shotsFired = 0;
+ shotsHit = 0;
+
+ rockSpeed = 1.0;
+ powerupSpeed = 1.0;
+ mFrameNum = 0;
+ mPaused = FALSE;
+
+ ship->hide();
+ shield->hide();
+/*
+ if ( mTimerId >= 0 ) {
+ killTimer( mTimerId );
+ mTimerId = -1;
+ }
+*/
+}
+
+// - --
+
+void KAsteroidsView::newGame()
+{
+ if ( shieldOn )
+ {
+ shield->hide();
+ shieldOn = FALSE;
+ }
+ reset();
+ if ( mTimerId < 0 )
+ mTimerId = startTimer( REFRESH_DELAY );
+ emit updateVitals();
+}
+
+// - - -
+
+void KAsteroidsView::endGame()
+{
+}
+
+void KAsteroidsView::pause( bool p )
+{
+ if ( !mPaused && p ) {
+ if ( mTimerId >= 0 ) {
+ killTimer( mTimerId );
+ mTimerId = -1;
+ }
+ } else if ( mPaused && !p )
+ mTimerId = startTimer( REFRESH_DELAY );
+ mPaused = p;
+}
+
+// - - -
+
+void KAsteroidsView::newShip()
+{
+ ship->move( field.width()/2, field.height()/2, 0 );
+ shield->move( field.width()/2, field.height()/2, 0 );
+ ship->setVelocity( 0.0, 0.0 );
+ shipDx = 0;
+ shipDy = 0;
+ shipAngle = 0;
+ rotateL = FALSE;
+ rotateR = FALSE;
+ thrustShip = FALSE;
+ shootShip = FALSE;
+ brakeShip = FALSE;
+ teleportShip = FALSE;
+ shieldOn = TRUE;
+ shootDelay = 0;
+ shipPower = MAX_POWER_LEVEL;
+ rotateRate = ROTATE_RATE;
+ rotateSlow = 0;
+
+ mBrakeCount = 0;
+ mTeleportCount = 0;
+ mShootCount = 0;
+
+ ship->show();
+ shield->show();
+ mShieldCount = 1; // just in case the ship appears on a rock.
+ shieldTimer->start( 1000, TRUE );
+}
+
+void KAsteroidsView::setShield( bool s )
+{
+ if ( shieldTimer->isActive() && !s ) {
+ shieldTimer->stop();
+ hideShield();
+ } else {
+ shieldOn = s && mShieldCount;
+ }
+}
+
+void KAsteroidsView::brake( bool b )
+{
+ if ( mBrakeCount )
+ {
+ if ( brakeShip && !b )
+ {
+ rotateL = FALSE;
+ rotateR = FALSE;
+ thrustShip = FALSE;
+ rotateRate = ROTATE_RATE;
+ }
+
+ brakeShip = b;
+ }
+}
+
+// - - -
+
+void KAsteroidsView::readSprites()
+{
+ QString sprites_prefix = Resource::findPixmap( IMG_BACKGROUND );
+ int sep = sprites_prefix.findRev( "/" );
+
+ sprites_prefix.truncate( sep );
+
+ int i = 0;
+ while ( kas_animations[i].id )
+ {
+ animation.insert( kas_animations[i].id,
+ new QCanvasPixmapArray( sprites_prefix + "/" + kas_animations[i].path,
+ kas_animations[i].frames ) );
+ i++;
+ }
+
+ ship = new QCanvasSprite( animation[ID_SHIP], &field );
+ ship->hide();
+
+ shield = new KShield( animation[ID_SHIELD], &field );
+ shield->hide();
+}
+
+// - - -
+
+void KAsteroidsView::addRocks( int num )
+{
+ for ( int i = 0; i < num; i++ )
+ {
+ KRock *rock = new KRock( animation[ID_ROCK_MEDIUM], &field,
+ ID_ROCK_MEDIUM, randInt(2), randInt(2) ? -1 : 1 );
+ double dx = (2.0 - randDouble()*4.0) * rockSpeed;
+ double dy = (2.0 - randDouble()*4.0) * rockSpeed;
+ rock->setVelocity( dx, dy );
+ rock->setFrame( randInt( rock->frameCount() ) );
+ if ( dx > 0 )
+ {
+ if ( dy > 0 )
+ rock->move( 5, 5, 0 );
+ else
+ rock->move( 5, field.height() - 25, 0 );
+ }
+ else
+ {
+ if ( dy > 0 )
+ rock->move( field.width() - 25, 5, 0 );
+ else
+ rock->move( field.width() - 25, field.height() - 25, 0 );
+ }
+ rock->show( );
+ rocks.append( rock );
+ }
+}
+
+// - - -
+
+void KAsteroidsView::showText( const QString &text, const QColor &color, bool scroll )
+{
+ textSprite->setTextFlags( AlignLeft | AlignVCenter );
+ textSprite->setText( text );
+ textSprite->setColor( color );
+
+ if ( scroll ) {
+ textSprite->move( (field.width()-textSprite->boundingRect().width()) / 2,
+ -textSprite->boundingRect().height() );
+ textDy = TEXT_SPEED;
+ } else {
+ textSprite->move( (field.width()-textSprite->boundingRect().width()) / 2,
+ (field.height()-textSprite->boundingRect().height()) / 2 );
+ textDy = 0;
+ }
+ textSprite->show();
+}
+
+// - - -
+
+void KAsteroidsView::hideText()
+{
+ textDy = -TEXT_SPEED;
+}
+
+// - - -
+
+void KAsteroidsView::resizeEvent(QResizeEvent* event)
+{
+ QWidget::resizeEvent(event);
+ field.resize(width()-4, height()-4);
+ view.resize(width(),height());
+}
+
+// - - -
+
+void KAsteroidsView::timerEvent( QTimerEvent * )
+{
+ field.advance();
+
+ QCanvasSprite *rock;
+
+ // move rocks forward
+ for ( rock = rocks.first(); rock; rock = rocks.next() ) {
+ ((KRock *)rock)->nextFrame();
+ wrapSprite( rock );
+ }
+
+ wrapSprite( ship );
+
+ // check for missile collision with rocks.
+ processMissiles();
+
+ // these are generated when a ship explodes
+ for ( KBit *bit = bits.first(); bit; bit = bits.next() )
+ {
+ if ( bit->expired() )
+ {
+ bits.removeRef( bit );
+ }
+ else
+ {
+ bit->growOlder();
+ bit->setFrame( ( bit->frame()+1 ) % bit->frameCount() );
+ }
+ }
+
+ for ( KExhaust *e = exhaust.first(); e; e = exhaust.next() )
+ exhaust.removeRef( e );
+
+ // move / rotate ship.
+ // check for collision with a rock.
+ processShip();
+
+ // move powerups and check for collision with player and missiles
+ processPowerups();
+
+ if ( textSprite->visible() )
+ {
+ if ( textDy < 0 &&
+ textSprite->boundingRect().y() <= -textSprite->boundingRect().height() ) {
+ textSprite->hide();
+ } else {
+ textSprite->moveBy( 0, textDy );
+ }
+ if ( textSprite->boundingRect().y() > (field.height()-textSprite->boundingRect().height())/2 )
+ textDy = 0;
+ }
+
+ if ( vitalsChanged && !(mFrameNum % 10) ) {
+ emit updateVitals();
+ vitalsChanged = FALSE;
+ }
+
+ mFrameNum++;
+}
+
+void KAsteroidsView::wrapSprite( QCanvasItem *s )
+{
+ int x = int(s->x() + s->boundingRect().width() / 2);
+ int y = int(s->y() + s->boundingRect().height() / 2);
+
+ if ( x > field.width() )
+ s->move( s->x() - field.width(), s->y() );
+ else if ( x < 0 )
+ s->move( field.width() + s->x(), s->y() );
+
+ if ( y > field.height() )
+ s->move( s->x(), s->y() - field.height() );
+ else if ( y < 0 )
+ s->move( s->x(), field.height() + s->y() );
+}
+
+// - - -
+
+void KAsteroidsView::rockHit( QCanvasItem *hit )
+{
+ KPowerup *nPup = 0;
+ int rnd = static_cast<int>(randDouble()*30.0) % 30;
+ switch( rnd )
+ {
+ case 4:
+ case 5:
+ nPup = new KPowerup( animation[ID_ENERGY_POWERUP], &field,
+ ID_ENERGY_POWERUP );
+ break;
+ case 10:
+// nPup = new KPowerup( animation[ID_TELEPORT_POWERUP], &field,
+// ID_TELEPORT_POWERUP );
+ break;
+ case 15:
+ nPup = new KPowerup( animation[ID_BRAKE_POWERUP], &field,
+ ID_BRAKE_POWERUP );
+ break;
+ case 20:
+ nPup = new KPowerup( animation[ID_SHIELD_POWERUP], &field,
+ ID_SHIELD_POWERUP );
+ break;
+ case 24:
+ case 25:
+ nPup = new KPowerup( animation[ID_SHOOT_POWERUP], &field,
+ ID_SHOOT_POWERUP );
+ break;
+ }
+ if ( nPup )
+ {
+ double r = 0.5 - randDouble();
+ nPup->move( hit->x(), hit->y(), 0 );
+ nPup->setVelocity( hit->xVelocity() + r, hit->yVelocity() + r );
+ nPup->show( );
+ powerups.append( nPup );
+ }
+
+ if ( hit->rtti() == ID_ROCK_LARGE || hit->rtti() == ID_ROCK_MEDIUM )
+ {
+ // break into smaller rocks
+ double addx[4] = { 1.0, 1.0, -1.0, -1.0 };
+ double addy[4] = { -1.0, 1.0, -1.0, 1.0 };
+
+ double dx = hit->xVelocity();
+ double dy = hit->yVelocity();
+
+ double maxRockSpeed = MAX_ROCK_SPEED * rockSpeed;
+ if ( dx > maxRockSpeed )
+ dx = maxRockSpeed;
+ else if ( dx < -maxRockSpeed )
+ dx = -maxRockSpeed;
+ if ( dy > maxRockSpeed )
+ dy = maxRockSpeed;
+ else if ( dy < -maxRockSpeed )
+ dy = -maxRockSpeed;
+
+ QCanvasSprite *nrock;
+
+ for ( int i = 0; i < 4; i++ )
+ {
+ double r = rockSpeed/2 - randDouble()*rockSpeed;
+ if ( hit->rtti() == ID_ROCK_LARGE )
+ {
+ nrock = new KRock( animation[ID_ROCK_MEDIUM], &field,
+ ID_ROCK_MEDIUM, randInt(2), randInt(2) ? -1 : 1 );
+ emit rockHit( 0 );
+ }
+ else
+ {
+ nrock = new KRock( animation[ID_ROCK_SMALL], &field,
+ ID_ROCK_SMALL, randInt(2), randInt(2) ? -1 : 1 );
+ emit rockHit( 1 );
+ }
+
+ nrock->move( hit->x(), hit->y(), 0 );
+ nrock->setVelocity( dx+addx[i]*rockSpeed+r, dy+addy[i]*rockSpeed+r );
+ nrock->setFrame( randInt( nrock->frameCount() ) );
+ nrock->show( );
+ rocks.append( nrock );
+ }
+ }
+ else if ( hit->rtti() == ID_ROCK_SMALL )
+ emit rockHit( 2 );
+ rocks.removeRef( (QCanvasSprite *)hit );
+ if ( rocks.count() == 0 )
+ emit rocksRemoved();
+}
+
+void KAsteroidsView::reducePower( int val )
+{
+ shipPower -= val;
+ if ( shipPower <= 0 )
+ {
+ shipPower = 0;
+ thrustShip = FALSE;
+ if ( shieldOn )
+ {
+ shieldOn = FALSE;
+ shield->hide();
+ }
+ }
+ vitalsChanged = TRUE;
+}
+
+void KAsteroidsView::addExhaust( double x, double y, double dx,
+ double dy, int count )
+{
+ for ( int i = 0; i < count; i++ )
+ {
+ KExhaust *e = new KExhaust( animation[ID_EXHAUST], &field );
+ e->move( x + 2 - randDouble()*4, y + 2 - randDouble()*4 );
+ e->setVelocity( dx, dy );
+ e->show( );
+ exhaust.append( e );
+ }
+}
+
+void KAsteroidsView::processMissiles()
+{
+ KMissile *missile;
+
+ // if a missile has hit a rock, remove missile and break rock into smaller
+ // rocks or remove completely.
+ QPtrListIterator<KMissile> it(missiles);
+
+ for ( ; it.current(); ++it )
+ {
+ missile = it.current();
+ missile->growOlder();
+
+ if ( missile->expired() )
+ {
+ missiles.removeRef( missile );
+ continue;
+ }
+
+ wrapSprite( missile );
+
+ QCanvasItemList hits = missile->collisions( TRUE );
+ QCanvasItemList::Iterator hit;
+ for ( hit = hits.begin(); hit != hits.end(); ++hit )
+ {
+ if ( (*hit)->rtti() >= ID_ROCK_LARGE &&
+ (*hit)->rtti() <= ID_ROCK_SMALL )
+ {
+ shotsHit++;
+ rockHit( *hit );
+ missiles.removeRef( missile );
+ break;
+ }
+ }
+ }
+}
+
+// - - -
+
+void KAsteroidsView::processShip()
+{
+ if ( ship->visible() )
+ {
+ if ( shieldOn )
+ {
+ shield->show();
+ reducePower( SHIELD_ON_COST );
+ static int sf = 0;
+ sf++;
+
+ if ( sf % 2 )
+ shield->setFrame( (shield->frame()+1) % shield->frameCount() );
+ shield->move( ship->x() - 5, ship->y() - 5 );
+
+ QCanvasItemList hits = shield->collisions( TRUE );
+ QCanvasItemList::Iterator it;
+ for ( it = hits.begin(); it != hits.end(); ++it )
+ {
+ if ( (*it)->rtti() >= ID_ROCK_LARGE &&
+ (*it)->rtti() <= ID_ROCK_SMALL )
+ {
+ int factor;
+ switch ( (*it)->rtti() )
+ {
+ case ID_ROCK_LARGE:
+ factor = 3;
+ break;
+
+ case ID_ROCK_MEDIUM:
+ factor = 2;
+ break;
+
+ default:
+ factor = 1;
+ }
+
+ if ( factor > mShieldCount )
+ {
+ // shield not strong enough
+ shieldOn = FALSE;
+ break;
+ }
+ rockHit( *it );
+ // the more shields we have the less costly
+ reducePower( factor * (SHIELD_HIT_COST - mShieldCount*2) );
+ }
+ }
+ }
+
+ if ( !shieldOn )
+ {
+ shield->hide();
+ QCanvasItemList hits = ship->collisions( TRUE );
+ QCanvasItemList::Iterator it;
+ for ( it = hits.begin(); it != hits.end(); ++it )
+ {
+ if ( (*it)->rtti() >= ID_ROCK_LARGE &&
+ (*it)->rtti() <= ID_ROCK_SMALL )
+ {
+ KBit *bit;
+ for ( int i = 0; i < 8; i++ )
+ {
+ bit = new KBit( animation[ID_BIT], &field );
+ bit->move( ship->x() + 5 - randDouble() * 10,
+ ship->y() + 5 - randDouble() * 10,
+ randInt(bit->frameCount()) );
+ bit->setVelocity( 1-randDouble()*2,
+ 1-randDouble()*2 );
+ bit->setDeath( 60 + randInt(60) );
+ bit->show( );
+ bits.append( bit );
+ }
+ ship->hide();
+ shield->hide();
+ emit shipKilled();
+ break;
+ }
+ }
+ }
+
+
+ if ( rotateSlow )
+ rotateSlow--;
+
+ if ( rotateL )
+ {
+ shipAngle -= rotateSlow ? 1 : rotateRate;
+ if ( shipAngle < 0 )
+ shipAngle += SHIP_STEPS;
+ }
+
+ if ( rotateR )
+ {
+ shipAngle += rotateSlow ? 1 : rotateRate;
+ if ( shipAngle >= SHIP_STEPS )
+ shipAngle -= SHIP_STEPS;
+ }
+
+ double angle = shipAngle * PI_X_2 / SHIP_STEPS;
+ double cosangle = cos( angle );
+ double sinangle = sin( angle );
+
+ if ( brakeShip )
+ {
+ thrustShip = FALSE;
+ rotateL = FALSE;
+ rotateR = FALSE;
+ rotateRate = ROTATE_RATE;
+ if ( fabs(shipDx) < 2.5 && fabs(shipDy) < 2.5 )
+ {
+ shipDx = 0.0;
+ shipDy = 0.0;
+ ship->setVelocity( shipDx, shipDy );
+ brakeShip = FALSE;
+ }
+ else
+ {
+ double motionAngle = atan2( -shipDy, -shipDx );
+ if ( angle > M_PI )
+ angle -= PI_X_2;
+ double angleDiff = angle - motionAngle;
+ if ( angleDiff > M_PI )
+ angleDiff = PI_X_2 - angleDiff;
+ else if ( angleDiff < -M_PI )
+ angleDiff = PI_X_2 + angleDiff;
+ double fdiff = fabs( angleDiff );
+ if ( fdiff > 0.08 )
+ {
+ if ( angleDiff > 0 )
+ rotateL = TRUE;
+ else if ( angleDiff < 0 )
+ rotateR = TRUE;
+ if ( fdiff > 0.6 )
+ rotateRate = mBrakeCount + 1;
+ else if ( fdiff > 0.4 )
+ rotateRate = 2;
+ else
+ rotateRate = 1;
+
+ if ( rotateRate > 5 )
+ rotateRate = 5;
+ }
+ else if ( fabs(shipDx) > 1 || fabs(shipDy) > 1 )
+ {
+ thrustShip = TRUE;
+ // we'll make braking a bit faster
+ shipDx += cosangle/6 * (mBrakeCount - 1);
+ shipDy += sinangle/6 * (mBrakeCount - 1);
+ reducePower( BRAKE_ON_COST );
+ addExhaust( ship->x() + 10 - cosangle*11,
+ ship->y() + 10 - sinangle*11,
+ shipDx-cosangle, shipDy-sinangle,
+ mBrakeCount+1 );
+ }
+ }
+ }
+
+ if ( thrustShip )
+ {
+ // The ship has a terminal velocity, but trying to go faster
+ // still uses fuel (can go faster diagonally - don't care).
+ double thrustx = cosangle/8;
+ double thrusty = sinangle/8;
+ if ( fabs(shipDx + thrustx) < MAX_SHIP_SPEED )
+ shipDx += thrustx;
+ if ( fabs(shipDy + thrusty) < MAX_SHIP_SPEED )
+ shipDy += thrusty;
+ ship->setVelocity( shipDx, shipDy );
+ reducePower( 1 );
+ addExhaust( ship->x() + 10 - cosangle*10,
+ ship->y() + 10 - sinangle*10,
+ shipDx-cosangle, shipDy-sinangle, 3 );
+ }
+
+ ship->setFrame( shipAngle >> 1 );
+
+ if ( shootShip )
+ {
+ if ( !shootDelay && (int)missiles.count() < mShootCount + 2 )
+ {
+ KMissile *missile = new KMissile( animation[ID_MISSILE], &field );
+ missile->move( 11+ship->x()+cosangle*11,
+ 11+ship->y()+sinangle*11, 0 );
+ missile->setVelocity( shipDx + cosangle*MISSILE_SPEED,
+ shipDy + sinangle*MISSILE_SPEED );
+ missile->show( );
+ missiles.append( missile );
+ shotsFired++;
+ reducePower( 1 );
+
+ shootDelay = 5;
+ }
+
+ if ( shootDelay )
+ shootDelay--;
+ }
+
+ if ( teleportShip )
+ {
+ int ra = rand() % 10;
+ if( ra == 0 )
+ ra += rand() % 20;
+ int xra = ra * 60 + ( (rand() % 20) * (rand() % 20) );
+ int yra = ra * 50 - ( (rand() % 20) * (rand() % 20) );
+ ship->move( xra, yra );
+ }
+
+ vitalsChanged = TRUE;
+ }
+}
+
+// - - -
+
+void KAsteroidsView::processPowerups()
+{
+ if ( !powerups.isEmpty() )
+ {
+ // if player gets the powerup remove it from the screen, if option
+ // "Can destroy powerups" is enabled and a missile hits the powerup
+ // destroy it
+
+ KPowerup *pup;
+ QPtrListIterator<KPowerup> it( powerups );
+
+ for( ; it.current(); ++it )
+ {
+ pup = it.current();
+ pup->growOlder();
+
+ if( pup->expired() )
+ {
+ powerups.removeRef( pup );
+ continue;
+ }
+
+ wrapSprite( pup );
+
+ QCanvasItemList hits = pup->collisions( TRUE );
+ QCanvasItemList::Iterator it;
+ for ( it = hits.begin(); it != hits.end(); ++it )
+ {
+ if ( (*it) == ship )
+ {
+ switch( pup->rtti() )
+ {
+ case ID_ENERGY_POWERUP:
+ shipPower += 150;
+ if ( shipPower > MAX_POWER_LEVEL )
+ shipPower = MAX_POWER_LEVEL;
+ break;
+ case ID_TELEPORT_POWERUP:
+ mTeleportCount++;
+ break;
+ case ID_BRAKE_POWERUP:
+ if ( mBrakeCount < MAX_BRAKES )
+ mBrakeCount++;
+ break;
+ case ID_SHIELD_POWERUP:
+ if ( mShieldCount < MAX_SHIELDS )
+ mShieldCount++;
+ break;
+ case ID_SHOOT_POWERUP:
+ if ( mShootCount < MAX_FIREPOWER )
+ mShootCount++;
+ break;
+ }
+
+ powerups.removeRef( pup );
+ vitalsChanged = TRUE;
+ }
+ else if ( (*it) == shield )
+ {
+ powerups.removeRef( pup );
+ }
+ else if ( (*it)->rtti() == ID_MISSILE )
+ {
+ if ( can_destroy_powerups )
+ {
+ powerups.removeRef( pup );
+ }
+ }
+ }
+ }
+ } // -- if( powerups.isEmpty() )
+}
+
+// - - -
+
+void KAsteroidsView::hideShield()
+{
+ shield->hide();
+ mShieldCount = 0;
+ shieldOn = FALSE;
+}
+
+double KAsteroidsView::randDouble()
+{
+ int v = rand();
+ return (double)v / (double)RAND_MAX;
+}
+
+int KAsteroidsView::randInt( int range )
+{
+ return rand() % range;
+}
diff --git a/noncore/games/qasteroids/view.h b/noncore/games/qasteroids/view.h
new file mode 100644
index 0000000..0a7902b
--- a/dev/null
+++ b/noncore/games/qasteroids/view.h
@@ -0,0 +1,156 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************//*
+ * KAsteroids - Copyright (c) Martin R. Jones 1997
+ *
+ * Part of the KDE project
+ */
+
+#ifndef __AST_VIEW_H__
+#define __AST_VIEW_H__
+
+#include <qwidget.h>
+#include <qlist.h>
+#include <qintdict.h>
+#include <qtimer.h>
+#include <qcanvas.h>
+#include "sprites.h"
+
+#define QPtrList QList
+#define QPtrListIterator QListIterator
+
+#define MAX_POWER_LEVEL 1000
+
+class KAsteroidsView : public QWidget
+{
+ Q_OBJECT
+public:
+ KAsteroidsView( QWidget *parent = 0, const char *name = 0 );
+ virtual ~KAsteroidsView();
+
+ int refreshRate;
+
+ void reset();
+ void setRockSpeed( double rs ) { rockSpeed = rs; }
+ void addRocks( int num );
+ void newGame();
+ void endGame();
+ void newShip();
+
+ void rotateLeft( bool r ) { rotateL = r; rotateSlow = 5; }
+ void rotateRight( bool r ) { rotateR = r; rotateSlow = 5; }
+ void thrust( bool t ) { thrustShip = t && shipPower > 0; }
+ void shoot( bool s ) { shootShip = s; shootDelay = 0; }
+ void setShield( bool s );
+ void teleport( bool te) { teleportShip = te && mTeleportCount; }
+ void brake( bool b );
+ void pause( bool p);
+
+ void showText( const QString &text, const QColor &color, bool scroll=TRUE );
+ void hideText();
+
+ int shots() const { return shotsFired; }
+ int hits() const { return shotsHit; }
+ int power() const { return shipPower; }
+
+ int teleportCount() const { return mTeleportCount; }
+ int brakeCount() const { return mBrakeCount; }
+ int shieldCount() const { return mShieldCount; }
+ int shootCount() const { return mShootCount; }
+
+signals:
+ void shipKilled();
+ void rockHit( int size );
+ void rocksRemoved();
+ void updateVitals();
+
+private slots:
+ void hideShield();
+
+protected:
+ void readSprites();
+ void wrapSprite( QCanvasItem * );
+ void rockHit( QCanvasItem * );
+ void reducePower( int val );
+ void addExhaust( double x, double y, double dx, double dy, int count );
+ void processMissiles();
+ void processShip();
+ void processPowerups();
+ void processShield();
+ double randDouble();
+ int randInt( int range );
+
+ virtual void resizeEvent( QResizeEvent *event );
+ virtual void timerEvent( QTimerEvent * );
+
+private:
+ QCanvas field;
+ QCanvasView view;
+ QIntDict<QCanvasPixmapArray> animation;
+ QPtrList<QCanvasSprite> rocks;
+ QPtrList<KMissile> missiles;
+ QPtrList<KBit> bits;
+ QPtrList<KExhaust> exhaust;
+ QPtrList<KPowerup> powerups;
+ KShield *shield;
+ QCanvasSprite *ship;
+ QCanvasText *textSprite;
+
+ bool rotateL;
+ bool rotateR;
+ bool thrustShip;
+ bool shootShip;
+ bool teleportShip;
+ bool brakeShip;
+ bool pauseShip;
+ bool shieldOn;
+
+ bool vitalsChanged;
+
+ int shipAngle;
+ int rotateSlow;
+ int rotateRate;
+ int shipPower;
+
+ int shotsFired;
+ int shotsHit;
+ int shootDelay;
+
+ int mBrakeCount;
+ int mShieldCount;
+ int mTeleportCount;
+ int mShootCount;
+
+ double shipDx;
+ double shipDy;
+
+ int textDy;
+ int mFrameNum;
+ bool mPaused;
+ int mTimerId;
+
+ double rockSpeed;
+ double powerupSpeed;
+
+ bool can_destroy_powerups;
+
+ QTimer *shieldTimer;
+};
+
+#endif
diff --git a/noncore/games/snake/.cvsignore b/noncore/games/snake/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/noncore/games/snake/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/noncore/games/snake/Makefile.in b/noncore/games/snake/Makefile.in
new file mode 100644
index 0000000..8179b6f
--- a/dev/null
+++ b/noncore/games/snake/Makefile.in
@@ -0,0 +1,159 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = snake
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = snake.h \
+ target.h \
+ obstacle.h \
+ interface.h \
+ codes.h
+SOURCES = snake.cpp \
+ target.cpp \
+ obstacle.cpp \
+ interface.cpp \
+ main.cpp
+OBJECTS = snake.o \
+ target.o \
+ obstacle.o \
+ interface.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_snake.cpp \
+ moc_interface.cpp
+OBJMOC = moc_snake.o \
+ moc_interface.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake snake.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+snake.o: snake.cpp \
+ snake.h \
+ target.h \
+ codes.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+target.o: target.cpp \
+ target.h \
+ codes.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+obstacle.o: obstacle.cpp \
+ obstacle.h \
+ codes.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+interface.o: interface.cpp \
+ interface.h \
+ snake.h \
+ target.h \
+ obstacle.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+main.o: main.cpp \
+ interface.h \
+ snake.h \
+ target.h \
+ obstacle.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_snake.o: moc_snake.cpp \
+ snake.h
+
+moc_interface.o: moc_interface.cpp \
+ interface.h \
+ snake.h \
+ target.h \
+ obstacle.h
+
+moc_snake.cpp: snake.h
+ $(MOC) snake.h -o moc_snake.cpp
+
+moc_interface.cpp: interface.h
+ $(MOC) interface.h -o moc_interface.cpp
+
+
diff --git a/noncore/games/snake/codes.h b/noncore/games/snake/codes.h
new file mode 100644
index 0000000..3b5e4d0
--- a/dev/null
+++ b/noncore/games/snake/codes.h
@@ -0,0 +1,20 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/const int target_rtti = 1500;
+const int obstacle_rtti = 1600;
diff --git a/noncore/games/snake/interface.cpp b/noncore/games/snake/interface.cpp
new file mode 100644
index 0000000..c9b4931
--- a/dev/null
+++ b/noncore/games/snake/interface.cpp
@@ -0,0 +1,224 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "interface.h"
+
+#include <qpe/resource.h>
+
+#include <qpe/qpetoolbar.h>
+#include <qtoolbutton.h>
+#include <qstyle.h>
+#include <qapplication.h>
+#include <qmessagebox.h>
+
+SnakeGame::SnakeGame(QWidget* parent, const char* name, WFlags f) :
+ QMainWindow(parent,name,f),
+ canvas(232, 258)
+{
+ setCaption( tr("Snake") );
+ QPixmap bg = Resource::loadPixmap("grass");
+ canvas.setBackgroundPixmap(bg);
+ canvas.setUpdatePeriod(100);
+ snake = 0;
+
+ cv = new QCanvasView(&canvas, this);
+
+ pauseTimer = new QTimer(this);
+ connect(pauseTimer, SIGNAL(timeout()), this, SLOT(wait()) );
+
+ setToolBarsMovable( FALSE );
+
+ QPEToolBar* toolbar = new QPEToolBar( this);
+ toolbar->setHorizontalStretchable( TRUE );
+
+ QPixmap newicon = Resource::loadPixmap("ksnake");
+ setIcon(newicon);
+ (void)new QToolButton(newicon, tr("New Game"), 0,
+ this, SLOT(newGame()), toolbar, "New Game");
+
+ scorelabel = new QLabel(toolbar);
+ showScore(0);
+ scorelabel->setBackgroundMode( PaletteButton );
+ scorelabel->setAlignment( AlignRight | AlignVCenter | ExpandTabs );
+ toolbar->setStretchableWidget( scorelabel );
+
+ setFocusPolicy(StrongFocus);
+
+ setCentralWidget(cv);
+
+ welcomescreen();
+ gamestopped = true;
+ waitover = true;
+}
+
+SnakeGame::~SnakeGame()
+{
+ delete snake;
+}
+
+void SnakeGame::resizeEvent(QResizeEvent *)
+{
+ QSize s = centralWidget()->size();
+ int fw = style().defaultFrameWidth();
+ canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
+}
+
+void SnakeGame::welcomescreen()
+{
+ QCanvasText* title = new QCanvasText(tr("SNAKE!"), &canvas);
+ title->setColor(yellow);
+ title->setFont( QFont("times", 18, QFont::Bold) );
+ int w = title->boundingRect().width();
+ title->move(canvas.width()/2 -w/2, canvas.height()/2-110);
+ title->show();
+ QCanvasPixmapArray* titlearray = new QCanvasPixmapArray(Resource::findPixmap("title"));
+ QCanvasSprite* titlepic = new QCanvasSprite(titlearray, &canvas);
+ titlepic->move(canvas.width()/2 - 33, canvas.height()/2-85);
+ titlepic->show();
+ QCanvasText* instr = new QCanvasText(tr("Use the arrow keys to guide the\n"
+ "snake to eat the mouse. You must not\n"
+ "crash into the walls, edges or its tail."),
+ &canvas);
+ w = instr->boundingRect().width();
+ instr->move(canvas.width()/2-w/2, canvas.height()/2-20);
+ instr->setColor(white);
+ instr->show();
+ QCanvasText* cont = new QCanvasText(tr("Press Any Key To Start"), &canvas);
+ w = cont->boundingRect().width();
+ cont->move(canvas.width()/2-w/2, canvas.height()/2+80);
+ cont->setColor(yellow);
+ cont->show();
+
+}
+
+void SnakeGame::newGame()
+{
+ clear();
+ snake = new Snake(&canvas);
+ connect(snake, SIGNAL(dead()), this, SLOT(gameOver()) );
+ connect(snake, SIGNAL(targethit()), this, SLOT(levelUp()) );
+ connect(snake, SIGNAL(scorechanged()), this, SLOT(scoreInc()) );
+ connect(this, SIGNAL(moveFaster()), snake, SLOT(increaseSpeed()) );
+ last = 0;
+ targetamount = 1;
+ notargets = 1;
+ level = 1;
+ stage = 1;
+ showScore(0);
+ gamestopped = false;
+ waitover = true;
+ int x = canvas.width()/2 - 70;
+ x = x - x % 16;
+ int y = canvas.height()-50;
+ y = y - y % 16;
+ (void)new Obstacle(&canvas, x, 32);
+ (void)new Obstacle(&canvas, x, y);
+ createTargets();
+}
+
+
+void SnakeGame::showScore(int score)
+{
+ scorelabel->setText(tr(" Score : %1 ").arg(score) );
+}
+
+
+void SnakeGame::scoreInc()
+{
+ showScore( snake->getScore() );
+}
+
+void SnakeGame::levelUp()
+{
+ notargets--;
+ if (notargets == 0) {
+ stage++;
+ if (stage == 3) {
+ level++;
+ emit moveFaster();
+ targetamount++;
+ stage = 0;
+ }
+ createTargets();
+ }
+}
+
+void SnakeGame::createTargets()
+{
+ for (int i = 0; i < targetamount; i++)
+ (void)new Target(&canvas);
+ notargets = targetamount;
+}
+
+void SnakeGame::clear()
+{
+ delete snake;
+ snake = 0;
+ QCanvasItemList l = canvas.allItems();
+ for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
+ delete *it;
+ }
+}
+
+void SnakeGame::gameOver()
+{
+ int score = snake->getScore();
+ QString scoreoutput="";
+ scoreoutput.setNum(score);
+ QCanvasText* gameover = new QCanvasText(tr("GAME OVER!\n Your Score: %1").arg( scoreoutput), &canvas);
+
+ gameover->setZ(100);
+ gameover->setColor(yellow);
+ gameover->setFont( QFont("times", 18, QFont::Bold) );
+ int w = gameover->boundingRect().width();
+ gameover->move(canvas.width()/2 -w/2, canvas.height()/2 -50);
+ gameover->show();
+ gamestopped = true;
+ waitover = false;
+ pauseTimer->start(2500);
+}
+
+void SnakeGame::wait()
+{
+ waitover = true;
+ pauseTimer->stop();
+ QCanvasText* cont = new QCanvasText(tr("Press Any Key to Begin a New Game."),
+ &canvas);
+ cont->setZ(100);
+ cont->setColor(white);
+ int w = cont->boundingRect().width();
+ cont->move(canvas.width()/2 -w/2, canvas.height()/2);
+ cont->show();
+}
+
+void SnakeGame::keyPressEvent(QKeyEvent* event)
+{
+ if (gamestopped) {
+ if (waitover)
+ newGame();
+ else
+ return;
+ }
+ else {
+ int newkey = event->key();
+ snake->go(newkey);
+ }
+}
+
diff --git a/noncore/games/snake/interface.h b/noncore/games/snake/interface.h
new file mode 100644
index 0000000..30c7f84
--- a/dev/null
+++ b/noncore/games/snake/interface.h
@@ -0,0 +1,69 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qmainwindow.h>
+#include <qcanvas.h>
+#include <qlabel.h>
+
+#include "snake.h"
+#include "target.h"
+#include "obstacle.h"
+
+// class QCanvas;
+
+class SnakeGame : public QMainWindow {
+ Q_OBJECT
+
+public:
+ SnakeGame(QWidget* parent=0, const char* name=0, WFlags f=0);
+ ~SnakeGame();
+
+ void clear();
+ void createTargets();
+ void welcomescreen();
+
+protected:
+ virtual void keyPressEvent(QKeyEvent*);
+ virtual void resizeEvent(QResizeEvent *e);
+
+signals:
+ void moveFaster();
+
+private slots:
+ void newGame();
+ void gameOver();
+ void wait();
+ void levelUp();
+ void scoreInc();
+
+private:
+ void showScore(int);
+ QCanvasView* cv;
+ QLabel* scorelabel;
+ QCanvas canvas;
+ QTimer* pauseTimer;
+ Snake* snake;
+ int last;
+ int level;
+ int stage;
+ int targetamount;
+ int notargets;
+ bool waitover;
+ bool gamestopped;
+};
diff --git a/noncore/games/snake/main.cpp b/noncore/games/snake/main.cpp
new file mode 100644
index 0000000..90a93b7
--- a/dev/null
+++ b/noncore/games/snake/main.cpp
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "interface.h"
+
+#include <qpe/qpeapplication.h>
+
+
+int main(int argc, char **argv)
+{
+ QPEApplication app(argc,argv);
+
+ SnakeGame* m = new SnakeGame;
+ QPEApplication::setInputMethodHint( m, QPEApplication::AlwaysOff );
+ app.showMainWidget(m);
+
+ return app.exec();
+}
diff --git a/noncore/games/snake/obstacle.cpp b/noncore/games/snake/obstacle.cpp
new file mode 100644
index 0000000..2d07fe7
--- a/dev/null
+++ b/noncore/games/snake/obstacle.cpp
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "obstacle.h"
+#include "codes.h"
+
+#include <qpe/resource.h>
+
+Obstacle::Obstacle(QCanvas* canvas, int x, int y)
+ : QCanvasSprite(0, canvas)
+{
+ newObstacle(x, y);
+}
+
+void Obstacle::newObstacle(int x, int y)
+{
+ QCanvasPixmapArray* obstaclearray = new QCanvasPixmapArray(Resource::findPixmap("snake/wall.png"));
+
+ setSequence(obstaclearray);
+
+ move(x, y);
+
+ show();
+ canvas()->update();
+}
+
+int Obstacle::rtti() const
+{
+ return obstacle_rtti;
+}
+
+Obstacle::~Obstacle()
+{
+}
diff --git a/noncore/games/snake/obstacle.h b/noncore/games/snake/obstacle.h
new file mode 100644
index 0000000..838917f
--- a/dev/null
+++ b/noncore/games/snake/obstacle.h
@@ -0,0 +1,30 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qcanvas.h>
+
+class Obstacle : public QCanvasSprite
+{
+
+public:
+ Obstacle(QCanvas*, int x, int y);
+ ~Obstacle();
+ void newObstacle(int x, int y);
+ int rtti() const;
+};
diff --git a/noncore/games/snake/qpe-snake.control b/noncore/games/snake/qpe-snake.control
new file mode 100644
index 0000000..489e642
--- a/dev/null
+++ b/noncore/games/snake/qpe-snake.control
@@ -0,0 +1,9 @@
+Files: bin/snake apps/Games/snake.desktop pics/snake
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Game: control the snake
+ A game for the Qtopia environment.
diff --git a/noncore/games/snake/snake.cpp b/noncore/games/snake/snake.cpp
new file mode 100644
index 0000000..9f19841
--- a/dev/null
+++ b/noncore/games/snake/snake.cpp
@@ -0,0 +1,246 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "snake.h"
+#include "target.h"
+#include "codes.h"
+
+#include <qpe/resource.h>
+
+#include <qregexp.h>
+
+static int Piecekey[4][4] = { {6, 0, 4, 3 }, {0, 6, 2, 1 }, { 1, 3, 5, 0 }, {2, 4, 0, 5 } };
+
+Snake::Snake(QCanvas* c)
+{
+ canvas = c;
+ score = 0;
+ snakelist.setAutoDelete(true);
+ autoMoveTimer = new QTimer(this);
+ connect( autoMoveTimer, SIGNAL(timeout()), this, SLOT(moveSnake()) );
+ createSnake();
+}
+
+void Snake::createSnake()
+{
+ snakeparts = new QCanvasPixmapArray();
+ QString s0 = Resource::findPixmap("snake/s0001");
+ s0.replace(QRegExp("0001"),"%1");
+ snakeparts->readPixmaps(s0, 15);
+
+ grow = 0;
+ last = Key_Right;
+
+ QCanvasSprite* head = new QCanvasSprite(snakeparts, canvas );
+ head->setFrame(7);
+ snakelist.insert(0, head);
+ head->show();
+ head->move(34, 16);
+
+ QCanvasSprite* body = new QCanvasSprite(snakeparts, canvas );
+ body->setFrame(6);
+ snakelist.append( body );
+ body->show();
+ body->move(18, 16);
+
+ QCanvasSprite* end = new QCanvasSprite(snakeparts, canvas );
+ end->setFrame(11);
+ snakelist.append( end );
+ end->show();
+ end->move(2, 16);
+
+ currentdir = right;
+ speed = 250;
+ autoMoveTimer->start(speed);
+ moveSnake();
+}
+
+void Snake::increaseSpeed()
+{
+ if (speed > 150)
+ speed = speed - 5;
+ autoMoveTimer->start(speed);
+}
+
+void Snake::go(int newkey)
+{
+ // check key is a direction
+ if (!( (newkey == Key_Up) || (newkey == Key_Left) ||
+ (newkey == Key_Right) || (newkey == Key_Down) ))
+ return;
+ // check move is possible
+ if ( ((currentdir == left) && ((newkey == Key_Right) || (newkey == Key_Left)) ) ||
+ ((currentdir == right) && ((newkey == Key_Left) || (newkey == Key_Right)) ) ||
+ ((currentdir == up) && ((newkey == Key_Down) || (newkey == Key_Up)) ) ||
+ ((currentdir == down) && ((newkey == Key_Up) || (newkey == Key_Down)) ) )
+ return;
+ else {
+ Snake::changeHead(newkey);
+ Snake::moveSnake();
+ }
+}
+
+void Snake::move(Direction dir)
+{
+ autoMoveTimer->start(speed);
+ int x = 0;
+ int y = 0;
+ newdir = dir;
+ switch (dir) {
+ case right: x = 16; break;
+ case left: x = -16; break;
+ case down: y = 16; break;
+ case up: y = -16; break;
+ }
+ int index = lookUpPiece(currentdir, newdir);
+ QCanvasSprite* sprite = new QCanvasSprite(snakeparts, canvas );
+ sprite->setFrame(index);
+ snakelist.insert(1, sprite);
+ sprite->move(snakelist.first()->x(), snakelist.first()->y() );
+
+ snakelist.first()->moveBy(x, y);
+ if (grow <= 0)
+ changeTail();
+ else
+ grow--;
+ sprite->show();
+
+ currentdir = dir;
+}
+
+void Snake::changeTail()
+{
+ snakelist.removeLast();
+
+ double lastx = snakelist.last()->x();
+ double prevx = snakelist.prev()->x();
+ int index = 0;
+
+ if ( prevx == lastx ) { //vertical
+ if ( snakelist.prev()->y() > snakelist.last()->y() )
+ index = 13;
+ else
+ index = 14;
+ } else { //horizontal
+ if (snakelist.prev()->x() > snakelist.last()->x() )
+ index = 11;
+ else
+ index = 12;
+ }
+
+ snakelist.last()->setFrame(index);
+}
+
+void Snake::changeHead(int lastkey)
+{
+ int index = 0;
+ last = lastkey;
+
+ switch (last)
+ {
+ case Key_Up: index = 10; break;
+ case Key_Left: index = 8; break;
+ case Key_Right: index = 7; break;
+ case Key_Down: index = 9; break;
+ }
+
+ if (index) {
+ snakelist.first()->setFrame(index);
+ }
+}
+
+// returns an integer corresponding to a particular type of snake piece
+int Snake::lookUpPiece(Direction currentdir, Direction newdir)
+{
+ return Piecekey[currentdir][newdir];
+}
+
+void Snake::extendSnake()
+{
+ grow++;
+}
+
+void Snake::moveSnake()
+{
+ switch (last)
+ {
+ case Key_Up: move(up); break;
+ case Key_Left: move(left); break;
+ case Key_Right: move(right); break;
+ case Key_Down: move(down); break;
+ }
+ detectCrash();
+}
+
+void Snake::detectCrash()
+{
+ QCanvasSprite* head = snakelist.first();
+ QCanvasItem* item;
+ QCanvasItemList l=head->collisions(FALSE);
+ for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
+ item = *it;
+ // check if snake hit target
+ if ( (item->rtti()== 1500 ) && (item->collidesWith(head)) ) {
+ Target* target = (Target*) item;
+ target->done();
+ emit targethit();
+ extendSnake();
+ setScore(5);
+ return;
+ }
+ // check if snake hit obstacles
+ if ( (item->rtti()==1600) && (item->collidesWith(head)) ) {
+ emit dead();
+ autoMoveTimer->stop();
+ return;
+ }
+ }
+ //check if snake hit itself
+ for (uint i = 3; i < snakelist.count(); i++) {
+ if (head->collidesWith(snakelist.at(i)) ) {
+ emit dead();
+ autoMoveTimer->stop();
+ return;
+ }
+ }
+ //check if snake hit edge
+ if ( (head->x() > canvas->width()-5) || (head->y() > canvas->height()-10)
+ || (head->x() <2) || (head->y() <-5) ) {
+ emit dead();
+ autoMoveTimer->stop();
+ return;
+ }
+}
+
+void Snake::setScore(int amount)
+{
+ score = score + amount;
+ emit scorechanged();
+}
+
+int Snake::getScore()
+{
+ return score;
+}
+
+Snake::~Snake()
+{
+ autoMoveTimer->stop();
+}
diff --git a/noncore/games/snake/snake.h b/noncore/games/snake/snake.h
new file mode 100644
index 0000000..5725343
--- a/dev/null
+++ b/noncore/games/snake/snake.h
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qcanvas.h>
+#include <qtimer.h>
+
+class Snake : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum Direction{ left, right, up, down};
+
+ Snake(QCanvas*);
+ ~Snake();
+ void go(int newkey);
+ void move(Direction dir);
+ void changeHead(int last);
+ void changeTail();
+ void detectCrash();
+ void createSnake();
+ void extendSnake();
+ int lookUpPiece(Direction currentdir, Direction newdir);
+ void setScore(int amount);
+ int getScore();
+
+signals:
+ void dead();
+ void targethit();
+ void scorechanged();
+
+private slots:
+ void moveSnake();
+ void increaseSpeed();
+
+private:
+ QCanvasPixmapArray* snakeparts;
+ QList<QCanvasSprite>snakelist;
+ QTimer* autoMoveTimer;
+ QCanvas* canvas;
+ int grow;
+ int last;
+ int speed;
+ int score;
+ Direction currentdir;
+ Direction newdir;
+};
+
diff --git a/noncore/games/snake/snake.pro b/noncore/games/snake/snake.pro
new file mode 100644
index 0000000..6dacdbd
--- a/dev/null
+++ b/noncore/games/snake/snake.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = snake.h target.h obstacle.h interface.h codes.h
+SOURCES = snake.cpp target.cpp obstacle.cpp interface.cpp main.cpp
+TARGET = snake
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/snake.ts
diff --git a/noncore/games/snake/target.cpp b/noncore/games/snake/target.cpp
new file mode 100644
index 0000000..a09af69
--- a/dev/null
+++ b/noncore/games/snake/target.cpp
@@ -0,0 +1,77 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "target.h"
+#include "codes.h"
+
+#include <qpe/resource.h>
+
+#include <stdlib.h>
+
+Target::Target(QCanvas* canvas)
+ : QCanvasSprite(0, canvas)
+{
+ mouse = new QCanvasPixmapArray(Resource::findPixmap("snake/mouse"));
+ setSequence(mouse);
+ newTarget();
+}
+
+void Target::newTarget()
+{
+ static bool first_time = TRUE;
+ if (first_time) {
+ first_time = FALSE;
+ QTime midnight(0, 0, 0);
+ srand(midnight.secsTo(QTime::currentTime()) );
+ }
+ do {
+ int x = rand() % (canvas()->width()-10);
+ x = x - (x % 16) + 2;
+ int y = rand() % (canvas()->height()-10);
+ y = y - (y % 16) + 2;
+ move(x, y);
+ } while (onTop());
+ show();
+}
+
+bool Target::onTop()
+{
+ QCanvasItem* item;
+ QCanvasItemList l= canvas()->allItems(); //collisions(FALSE);
+ for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {
+ item = *it;
+ if (item != this && item->collidesWith(this)) return true;
+ }
+ return false;
+}
+
+void Target::done()
+{
+ delete this;
+}
+
+int Target::rtti() const
+{
+ return target_rtti;
+}
+
+Target::~Target()
+{
+}
diff --git a/noncore/games/snake/target.h b/noncore/games/snake/target.h
new file mode 100644
index 0000000..a6da37c
--- a/dev/null
+++ b/noncore/games/snake/target.h
@@ -0,0 +1,37 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qcanvas.h>
+#include <qdatetime.h>
+
+class Target : public QCanvasSprite
+{
+
+public:
+ Target(QCanvas*);
+ ~Target();
+ void newTarget();
+ void done();
+ void createMouse();
+ bool onTop();
+ int rtti() const;
+
+private:
+ QCanvasPixmapArray* mouse;
+};
diff --git a/noncore/games/solitaire/.cvsignore b/noncore/games/solitaire/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/noncore/games/solitaire/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/noncore/games/solitaire/Makefile.in b/noncore/games/solitaire/Makefile.in
new file mode 100644
index 0000000..3c50345
--- a/dev/null
+++ b/noncore/games/solitaire/Makefile.in
@@ -0,0 +1,235 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = patience
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = canvascard.h \
+ canvasshapes.h \
+ cardgame.h \
+ cardgamelayout.h \
+ cardpile.h \
+ card.h \
+ carddeck.h \
+ canvascardgame.h \
+ freecellcardgame.h \
+ patiencecardgame.h \
+ canvascardwindow.h
+SOURCES = canvascard.cpp \
+ canvasshapes.cpp \
+ cardgame.cpp \
+ cardgamelayout.cpp \
+ cardpile.cpp \
+ card.cpp \
+ carddeck.cpp \
+ canvascardgame.cpp \
+ freecellcardgame.cpp \
+ patiencecardgame.cpp \
+ canvascardwindow.cpp \
+ main.cpp
+OBJECTS = canvascard.o \
+ canvasshapes.o \
+ cardgame.o \
+ cardgamelayout.o \
+ cardpile.o \
+ card.o \
+ carddeck.o \
+ canvascardgame.o \
+ freecellcardgame.o \
+ patiencecardgame.o \
+ canvascardwindow.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_canvascardwindow.cpp
+OBJMOC = moc_canvascardwindow.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake solitaire.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=patience
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+canvascard.o: canvascard.cpp \
+ cardgame.h \
+ card.h \
+ cardpile.h \
+ carddeck.h \
+ cardgamelayout.h \
+ canvascard.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+canvasshapes.o: canvasshapes.cpp \
+ canvasshapes.h
+
+cardgame.o: cardgame.cpp \
+ cardgame.h \
+ card.h \
+ cardpile.h \
+ carddeck.h \
+ cardgamelayout.h
+
+cardgamelayout.o: cardgamelayout.cpp \
+ cardgamelayout.h \
+ cardpile.h
+
+cardpile.o: cardpile.cpp \
+ cardpile.h \
+ card.h \
+ $(QPEDIR)/include/qpe/config.h
+
+card.o: card.cpp \
+ card.h \
+ $(QPEDIR)/include/qpe/config.h
+
+carddeck.o: carddeck.cpp \
+ card.h \
+ carddeck.h
+
+canvascardgame.o: canvascardgame.cpp \
+ cardgame.h \
+ card.h \
+ cardpile.h \
+ carddeck.h \
+ cardgamelayout.h \
+ canvasshapes.h \
+ canvascard.h \
+ canvascardgame.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h
+
+freecellcardgame.o: freecellcardgame.cpp \
+ freecellcardgame.h \
+ patiencecardgame.h \
+ canvascardgame.h \
+ cardgame.h \
+ card.h \
+ cardpile.h \
+ carddeck.h \
+ cardgamelayout.h \
+ canvasshapes.h \
+ canvascard.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h
+
+patiencecardgame.o: patiencecardgame.cpp \
+ patiencecardgame.h \
+ canvascardgame.h \
+ cardgame.h \
+ card.h \
+ cardpile.h \
+ carddeck.h \
+ cardgamelayout.h \
+ canvasshapes.h \
+ canvascard.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h
+
+canvascardwindow.o: canvascardwindow.cpp \
+ canvascardwindow.h \
+ patiencecardgame.h \
+ canvascardgame.h \
+ cardgame.h \
+ card.h \
+ cardpile.h \
+ carddeck.h \
+ cardgamelayout.h \
+ canvasshapes.h \
+ canvascard.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ freecellcardgame.h
+
+main.o: main.cpp \
+ canvascardwindow.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_canvascardwindow.o: moc_canvascardwindow.cpp \
+ canvascardwindow.h
+
+moc_canvascardwindow.cpp: canvascardwindow.h
+ $(MOC) canvascardwindow.h -o moc_canvascardwindow.cpp
+
+
diff --git a/noncore/games/solitaire/canvascard.cpp b/noncore/games/solitaire/canvascard.cpp
new file mode 100644
index 0000000..ae3c859
--- a/dev/null
+++ b/noncore/games/solitaire/canvascard.cpp
@@ -0,0 +1,282 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "cardgame.h"
+#include "canvascard.h"
+
+#include <qpe/resource.h>
+
+#include <qpainter.h>
+#include <qimage.h>
+#include <qpaintdevice.h>
+#include <qbitmap.h>
+
+#include <math.h>
+
+#if defined( QT_QWS_CASSIOPEIA )
+#define SLOW_HARDWARE
+#endif
+
+// Seems to be fast enough to me even without Transformations in the library
+//#if defined( QT_NO_TRANSFORMATIONS ) && defined( QT_QWS_IPAQ )
+//#define SLOW_HARDWARE
+//#endif
+
+
+QBitmap *Create180RotatedBitmap(QBitmap *srcBitmap)
+{
+#ifdef QT_NO_TRANSFORMATIONS
+ int w = srcBitmap->width();
+ int h = srcBitmap->height();
+ QBitmap *dstBitmap = new QBitmap( w, h );
+ // ### this is very poorly implemented and probably could be much faster
+ for (int i = 0; i < w; i++)
+ for (int j = 0; j < h; j++)
+ bitBlt( dstBitmap, i, j, srcBitmap, w - i - 1, h - j - 1, 1, 1 );
+ return dstBitmap;
+#else
+ QWMatrix m;
+ m.rotate( 180.0 );
+ return new QBitmap( srcBitmap->xForm( m ) );
+#endif
+}
+
+
+QPixmap *CreateScaledPixmap(QPixmap *srcPixmap, double scaleX, double scaleY)
+{
+#ifdef QT_NO_TRANSFORMATIONS
+ int w = srcPixmap->width();
+ int h = srcPixmap->height();
+ int newW = (int)(w * scaleX);
+ int newH = (int)(h * scaleY);
+ QPixmap *dstPixmap = new QPixmap( newW, newH );
+ // ### this is very poorly implemented and probably could be much faster
+ for (int i = 0; i < newW; i++) {
+ int srcX = w * i / newW;
+ if (newH == h) {
+ // Optimise for scaleing in the X-axis only
+ bitBlt( dstPixmap, i, 0, srcPixmap, srcX, 0, 1, h );
+ } else {
+ for (int j = 0; j < newH; j++) {
+ int srcY = h * j / newH;
+ bitBlt( dstPixmap, i, j, srcPixmap, srcX, srcY, 1, 1 );
+ }
+ }
+ }
+ return dstPixmap;
+#else
+ QWMatrix s;
+ s.scale( scaleX, scaleY );
+ return new QPixmap( srcPixmap->xForm( s ) );
+#endif
+}
+
+
+// Initialise static member variables to NULL
+QPixmap *CanvasCard::cardsFaces = NULL;
+QPixmap *CanvasCard::cardsBacks = NULL;
+QBitmap *CanvasCard::cardsChars = NULL;
+QBitmap *CanvasCard::cardsSuits = NULL;
+QBitmap *CanvasCard::cardsCharsUpsideDown = NULL;
+QBitmap *CanvasCard::cardsSuitsUpsideDown = NULL;
+
+
+CanvasCard::CanvasCard( eValue v, eSuit s, bool f, QCanvas *canvas ) :
+ Card(v, s, f), QCanvasRectangle( 0, 0, 1, 1, canvas ), cardBack(1), scaleX(1.0), scaleY(1.0)
+{
+ if ( !cardsFaces ) {
+ cardsFaces = new QPixmap( Resource::loadPixmap( "cards/card_face" ) );
+ cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0001" ) );
+ cardsChars = new QBitmap( Resource::loadBitmap( "cards/card_chars" ) );
+ cardsSuits = new QBitmap( Resource::loadBitmap( "cards/card_suits" ) );
+ cardsCharsUpsideDown = Create180RotatedBitmap( cardsChars );
+ cardsSuitsUpsideDown = Create180RotatedBitmap( cardsSuits );
+ }
+ xOff = cardsFaces->width() / 2;
+ yOff = cardsFaces->height() / 2;
+ setSize( cardsFaces->width(), cardsFaces->height() );
+ setPen( NoPen );
+ flipping = FALSE;
+}
+
+
+void CanvasCard::setCardBack(int b)
+{
+ if ( cardBack != b ) {
+
+ cardBack = b;
+
+ if ( cardsBacks )
+ delete cardsBacks;
+
+ switch (cardBack) {
+ case 0:
+ cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0001" ) ); break;
+ case 1:
+ cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0002" ) ); break;
+ case 2:
+ cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0003" ) ); break;
+ case 3:
+ cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0004" ) ); break;
+ case 4:
+ cardsBacks = new QPixmap( Resource::loadPixmap( "cards/card_back0005" ) ); break;
+ }
+
+ if ( !isFacing() )
+ redraw();
+ }
+}
+
+
+void CanvasCard::draw(QPainter &painter)
+{
+ int ix = (int)x(), iy = (int)y();
+
+ QPainter *p = &painter;
+ QPixmap *unscaledCard = NULL;
+
+ if ((scaleX <= 0.98) || (scaleY <= 0.98))
+ {
+ p = new QPainter();
+ unscaledCard = new QPixmap( cardsFaces->width(), cardsFaces->height() );
+ p->begin(unscaledCard);
+ ix = 0;
+ iy = 0;
+ }
+
+ if ( isFacing() ) {
+
+/*
+ // Now add the joker and card backs to the list of pixmaps
+ QPixmap *CardsBack = new QPixmap( Resource::loadPixmap( "cards/card_joker.png" ) );
+ QPoint *newBackHotspot = new QPoint( 0, 0 );
+ pixmaps->append((const QPixmap *)CardsBack);
+ hotspots->append((const QPoint *)newBackHotspot);
+*/
+
+ int w = cardsFaces->width(), h = cardsFaces->height();
+
+// p->setBrush( NoBrush );
+ p->setBrush( QColor( 0xFF, 0xFF, 0xFF ) );
+
+ if ( isRed() == TRUE )
+ p->setPen( QColor( 0xFF, 0, 0 ) );
+ else
+ p->setPen( QColor( 0, 0, 0 ) );
+
+ p->drawPixmap( ix + 0, iy + 0, *cardsFaces );
+ p->drawPixmap( ix + 4, iy + 4, *cardsChars, 7*(getValue()-1), 0, 7, 7 );
+ p->drawPixmap( ix + 12, iy + 4, *cardsSuits, 7*(getSuit()-1), 0, 7, 8 );
+ p->drawPixmap( ix + w-4-7, iy + h-4-7, *cardsCharsUpsideDown, 7*(12-getValue()+1), 0, 7, 7 );
+ p->drawPixmap( ix + w-12-7, iy + h-5-7, *cardsSuitsUpsideDown, 7*(3-getSuit()+1), 0, 7, 8 );
+
+ } else {
+
+ p->drawPixmap( ix, iy, *cardsBacks );
+
+ }
+
+ if (p != &painter)
+ {
+ p->end();
+ QPixmap *scaledCard = CreateScaledPixmap( unscaledCard, scaleX, scaleY );
+ int xoff = scaledCard->width() / 2;
+ int yoff = scaledCard->height() / 2;
+ painter.drawPixmap( (int)x() + xOff - xoff, (int)y() + yOff - yoff, *scaledCard );
+ delete p;
+ delete unscaledCard;
+ delete scaledCard;
+ }
+}
+
+
+static const double flipLift = 1.5;
+
+
+void CanvasCard::flipTo(int x2, int y2, int steps)
+{
+ flipSteps = steps;
+
+#ifdef SLOW_HARDWARE
+ move(x2,y2);
+ Card::flipTo(x2,y2,steps);
+#else
+ int x1 = (int)x();
+ int y1 = (int)y();
+ double dx = x2 - x1;
+ double dy = y2 - y1;
+
+ flipping = TRUE;
+ destX = x2;
+ destY = y2;
+ animSteps = flipSteps;
+ setVelocity(dx/animSteps, dy/animSteps-flipLift);
+ setAnimated(TRUE);
+#endif
+}
+
+
+void CanvasCard::advance(int stage)
+{
+ if ( stage==1 ) {
+ if ( animSteps-- <= 0 ) {
+ scaleX = 1.0;
+ scaleY = 1.0;
+ flipping = FALSE;
+ setVelocity(0,0);
+ setAnimated(FALSE);
+ move(destX,destY); // exact
+ } else {
+ if ( flipping ) {
+ if ( animSteps > flipSteps / 2 ) {
+ // animSteps = flipSteps .. flipSteps/2 (flip up) -> 1..0
+ scaleX = ((double)animSteps/flipSteps-0.5)*2;
+ } else {
+ // animSteps = flipSteps/2 .. 0 (flip down) -> 0..1
+ scaleX = 1-((double)animSteps/flipSteps)*2;
+ }
+ if ( animSteps == flipSteps / 2-1 ) {
+ setYVelocity(yVelocity()+flipLift*2);
+ setFace( !isFacing() );
+ }
+ }
+ }
+ }
+ QCanvasRectangle::advance(stage);
+}
+
+
+void CanvasCard::animatedMove(int x2, int y2, int steps)
+{
+ destX = x2;
+ destY = y2;
+
+ double x1 = x(), y1 = y(), dx = x2 - x1, dy = y2 - y1;
+
+ // Ensure a good speed
+ while ( fabs(dx/steps)+fabs(dy/steps) < 5.0 && steps > 4 )
+ steps--;
+
+ setAnimated(TRUE);
+ setVelocity(dx/steps, dy/steps);
+
+ animSteps = steps;
+}
+
diff --git a/noncore/games/solitaire/canvascard.h b/noncore/games/solitaire/canvascard.h
new file mode 100644
index 0000000..cd9691f
--- a/dev/null
+++ b/noncore/games/solitaire/canvascard.h
@@ -0,0 +1,82 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CANVAS_CARD_H
+#define CANVAS_CARD_H
+
+
+#include <qpainter.h>
+#include <qbitmap.h>
+#include <qpixmap.h>
+#include <qpoint.h>
+#include <qcanvas.h>
+#include "cardgame.h"
+
+
+// ### Just made the number up, is that what you do???
+static const int canvasCardId = 2434321;
+
+
+class CanvasCard : public Card, public QCanvasRectangle
+{
+public:
+ CanvasCard( eValue v, eSuit s, bool f, QCanvas *canvas );
+ virtual ~CanvasCard() { canvas()->removeItem(this); }
+
+ int rtti () const { return canvasCardId; }
+ void move(QPoint p) { QCanvasItem::move( p.x(), p.y() ); }
+ void move(int x, int y) { QCanvasItem::move( x, y ); }
+ void animatedMove(int x, int y, int steps = 10);
+ void animatedMove() { animatedMove(savedX, savedY); }
+ void savePos(void) { savedX = (int)x(); savedY = (int)y(); }
+ void moveToPile(int p) { Q_UNUSED(p); }
+ void setCardBack(int b);
+
+ /*virtual*/ void flipTo(int x, int y, int steps = 8);
+ /*virtual*/ void setPos( int x, int y, int z ) { setX( x ); setY( y ); setZ( z ); }
+ /*virtual*/ void showCard(void) { show(); }
+ /*virtual*/ void redraw(void) { hide(); show(); }
+ /*virtual*/ void draw(QPainter &p);
+
+ void advance(int stage);
+
+protected:
+ /*virtual*/ void flip(void) { redraw(); }
+
+private:
+ int destX, destY;
+ int animSteps;
+ int flipSteps;
+ bool flipping;
+ int savedX, savedY;
+ int cardBack;
+ int oldCardBack;
+ double scaleX, scaleY;
+ int xOff, yOff;
+ static QPixmap *cardsFaces;
+ static QPixmap *cardsBacks;
+ static QBitmap *cardsChars;
+ static QBitmap *cardsSuits;
+ static QBitmap *cardsCharsUpsideDown;
+ static QBitmap *cardsSuitsUpsideDown;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/canvascardgame.cpp b/noncore/games/solitaire/canvascardgame.cpp
new file mode 100644
index 0000000..32635a0
--- a/dev/null
+++ b/noncore/games/solitaire/canvascardgame.cpp
@@ -0,0 +1,380 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "cardgame.h"
+#include "canvasshapes.h"
+#include "canvascard.h"
+#include "canvascardgame.h"
+
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qmainwindow.h>
+#include <qpe/qpemenubar.h>
+#include <qpainter.h>
+
+#include <stdlib.h>
+#include <limits.h>
+#include <time.h>
+#include <math.h>
+
+
+extern int highestZ;
+
+
+class CanvasCardPile : public QCanvasRectangle
+{
+public:
+ CanvasCardPile( CanvasCardGame *ccg, QCanvas *canvas ) : QCanvasRectangle( canvas ), parent( ccg ) {
+ pile = new QPixmap( 0, 0 );
+ pileHeight = 0;
+ firstCard = NULL;
+ }
+
+ void addCard( CanvasCard *card );
+ void advance(int stage);
+ void animatedMove() { animatedMove(savedX, savedY); }
+ void savePos(void) { savedX = (int)x(); savedY = (int)y(); }
+ void animatedMove(int x2, int y2, int steps = 7 );
+
+protected:
+ virtual void draw( QPainter& p );
+
+private:
+ CanvasCardGame *parent;
+ QPixmap *pile;
+ QImage tempImage32;
+ CanvasCard *firstCard;
+ int pileHeight;
+ int destX, destY;
+ int savedX, savedY;
+ int animSteps;
+};
+
+
+void CanvasCardPile::addCard( CanvasCard *card )
+{
+ if ( !firstCard )
+ firstCard = card;
+
+ int height = 36 + pileHeight * 13;
+ setSize( 23, height );
+ pile->resize( 23, height );
+ QPainter p( pile );
+ p.translate( -card->x(), -card->y() + pileHeight * 13 );
+ card->draw( p );
+ pileHeight++;
+
+ QImage tempImage;
+ tempImage = *pile;
+ tempImage32 = tempImage.convertDepth( 32 );
+ tempImage32.setAlphaBuffer( TRUE );
+ for ( int i = 0; i < tempImage32.width(); i++ )
+ for ( int j = 0; j < tempImage32.height(); j++ ) {
+ QRgb col = tempImage32.pixel( i, j );
+ int a = 255-j*220/tempImage32.height();
+ QRgb alpha = qRgba( qRed( col ), qGreen( col ), qBlue( col ), a );
+ tempImage32.setPixel( i, j, alpha );
+ }
+
+ QRgb alpha = qRgba( 0, 0, 0, 0 );
+ tempImage32.setPixel( 1, 0, alpha );
+ tempImage32.setPixel( 0, 0, alpha );
+ tempImage32.setPixel( 0, 1, alpha );
+
+ tempImage32.setPixel( 21, 0, alpha );
+ tempImage32.setPixel( 22, 0, alpha );
+ tempImage32.setPixel( 22, 1, alpha );
+ height--;
+ tempImage32.setPixel( 1, height, alpha );
+ tempImage32.setPixel( 0, height - 1, alpha );
+ tempImage32.setPixel( 0, height, alpha );
+
+ tempImage32.setPixel( 21, height, alpha );
+ tempImage32.setPixel( 22, height, alpha );
+ tempImage32.setPixel( 22, height - 1, alpha );
+}
+
+
+void CanvasCardPile::advance(int stage)
+{
+ if ( stage==1 ) {
+ if ( animSteps-- <= 0 ) {
+ CanvasCard *item = firstCard;
+ while (item) {
+ item->show();
+ item = (CanvasCard *)item->getCardPile()->cardInfront(item);
+ }
+ setVelocity(0,0);
+ setAnimated(FALSE);
+ parent->cancelMoving();
+ hide();
+ move(destX,destY); // exact
+ }
+ }
+ QCanvasRectangle::advance(stage);
+}
+
+
+void CanvasCardPile::animatedMove(int x2, int y2, int steps = 7 )
+{
+ destX = x2;
+ destY = y2;
+
+ double x1 = x(), y1 = y(), dx = x2 - x1, dy = y2 - y1;
+
+ // Ensure a good speed
+ while ( fabs(dx/steps)+fabs(dy/steps) < 5.0 && steps > 4 )
+ steps--;
+
+ setAnimated(TRUE);
+ setVelocity(dx/steps, dy/steps);
+
+ animSteps = steps;
+}
+
+
+void CanvasCardPile::draw( QPainter& p )
+{
+ int ix = (int)x(), iy = (int)y();
+ p.drawImage( ix, iy, tempImage32 );
+}
+
+
+CanvasCardGame::~CanvasCardGame() {
+ // the deletion stuff should be fixed now and only deletes
+ // items created by this CardGame. I haven't verified there are zero
+ // memory leaks yet
+ if ( alphaCardPile )
+ delete alphaCardPile;
+}
+
+
+void CanvasCardGame::gameWon() {
+
+ srand(time(NULL));
+
+ QCanvasItemList list = canvas()->allItems();
+ QCanvasItemList::Iterator it = list.begin();
+
+ for (; it != list.end(); ++it) {
+ if ( (*it)->rtti() == canvasCardId ) {
+ // disperse the cards everywhere
+ int x = 300 - rand() % 1000;
+ int y = 300 + rand() % 200;
+ ((CanvasCard *)*it)->animatedMove( x, y, 50 );
+ }
+ }
+}
+
+
+void CanvasCardGame::contentsMousePressEvent(QMouseEvent *e) {
+
+ if ( moving )
+ return;
+
+ QCanvasItemList l = canvas()->collisions( e->pos() );
+
+ for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {
+
+ if ( (*it)->rtti() == canvasCardId ) {
+
+ moving = (CanvasCard *)*it;
+
+ if ( moving->animated() )
+ return;
+
+ cardXOff = (int)(e->pos().x() - moving->x());
+ cardYOff = (int)(e->pos().y() - moving->y());
+
+ if ( !mousePressCard( moving, e->pos() ) ) {
+ CanvasCard *card = moving;
+
+ if ( alphaCardPile )
+ delete alphaCardPile;
+
+ alphaCardPile = new CanvasCardPile( this, canvas() );
+ alphaCardPile->move( card->x(), card->y() );
+ alphaCardPile->savePos();
+ alphaCardPile->show();
+
+ while (card) {
+ alphaCardPile->addCard( card );
+ card->hide();
+ card = (CanvasCard *)card->getCardPile()->cardInfront(card);
+ }
+
+ alphaCardPile->setZ( INT_MAX );
+
+ moved = TRUE;
+ } else {
+ if ( alphaCardPile )
+ alphaCardPile->hide();
+ }
+ return;
+ }
+ }
+
+ mousePress( e->pos() );
+}
+
+/*
+//
+// Should have some intelligent way to make double clicking on a
+// card send it to the most appropriate pile
+//
+void CanvasCardGame::contentsMouseDoubleClickEvent(QMouseEvent *e) {
+ QCanvasItemList l = canvas()->collisions( e->pos() );
+ for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {
+ if ( (*it)->rtti() == canvasCardId ) {
+ CanvasCard *card = (CanvasCard *)*it;
+
+ if ( card->animated() )
+ return;
+
+ if ( card->getCardPile()->isAllowedToBeMoved(card) ) {
+ if (card->getCardPile()->cardInfront(card) == NULL) {
+ CardPile *pile = first();
+ if (pile && pile->isAllowedOnTop(card)) {
+ // move card to this pile
+ return;
+ }
+ }
+ }
+ }
+ }
+}
+*/
+
+void CanvasCardGame::contentsMouseMoveEvent(QMouseEvent *e) {
+
+ QPoint p = e->pos();
+
+ if ( moving ) {
+
+ moved = TRUE;
+
+ if (moving->isFacing() != TRUE)
+ return;
+
+ int tx = (int)p.x() - cardXOff;
+ int ty = (int)p.y() - cardYOff;
+
+ if (snapOn == TRUE) {
+ CardPile *pile = closestPile( tx, ty, 50 );
+ if ( pile && pile->isAllowedOnTop( moving ) ) {
+ QPoint p = pile->getHypertheticalNextCardPos();
+ if ( alphaCardPile )
+ alphaCardPile->move( p.x(), p.y() );
+ return;
+ }
+ }
+
+ if ( alphaCardPile )
+ alphaCardPile->move( tx, ty );
+ }
+
+}
+
+
+void CanvasCardGame::contentsMouseReleaseEvent(QMouseEvent *e)
+{
+ QPoint p = e->pos();
+
+ Q_UNUSED(p);
+
+ if ( moving ) {
+
+ CanvasCard *item = moving;
+
+ if ( item->animated() )
+ return;
+
+ if ( alphaCardPile )
+ if ( moved ) {
+
+ CardPile *pile = closestPile((int)alphaCardPile->x(), (int)alphaCardPile->y(), 30);
+
+ if (pile && pile->isAllowedOnTop(item)) {
+ CardPile *oldPile = item->getCardPile();
+ Card *c = NULL;
+ if ( oldPile != pile) {
+ while ( item ) {
+ item->show();
+ if ( oldPile ) {
+ c = oldPile->cardInfront(item);
+ oldPile->removeCard(item);
+ }
+ pile->addCardToTop(item);
+ item->setCardPile(pile);
+ //item->move( pile->getCardPos(item) );
+ QPoint p = pile->getCardPos(item);
+ item->setPos( p.x(), p.y(), highestZ );
+ highestZ++;
+
+ if (item->getValue() == king && haveWeWon()) {
+ alphaCardPile->hide();
+ gameWon();
+ moving = NULL;
+ return;
+ }
+
+ if (oldPile) {
+ item = (CanvasCard *)c;
+ } else {
+ item = NULL;
+ }
+ }
+ alphaCardPile->hide();
+ moving = NULL;
+ return;
+ }
+ }
+
+ alphaCardPile->animatedMove();
+ }
+ }
+
+ moved = FALSE;
+}
+
+
+void CanvasCardGame::readPile( Config& cfg, CardPile *pile, QString name, int& highestZ )
+{
+ cfg.setGroup( name );
+ int numberOfCards = cfg.readNumEntry("NumberOfCards", 0);
+ Card *card = NULL;
+ for ( int i = 0; i < numberOfCards; i++ ) {
+ QString cardStr;
+ cardStr.sprintf( "%i", i );
+ int val = cfg.readNumEntry( "Card" + cardStr );
+ bool facing = cfg.readBoolEntry( "CardFacing" + cardStr );
+ card = cards[ val ];
+ card->setFace(facing);
+ pile->addCardToTop(card);
+ card->setCardPile(pile);
+ QPoint p = pile->getCardPos( card );
+ card->setPos( p.x(), p.y(), highestZ );
+ card->showCard();
+ highestZ++;
+ }
+}
+
+
diff --git a/noncore/games/solitaire/canvascardgame.h b/noncore/games/solitaire/canvascardgame.h
new file mode 100644
index 0000000..4d32014
--- a/dev/null
+++ b/noncore/games/solitaire/canvascardgame.h
@@ -0,0 +1,95 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CANVAS_CARD_GAME_H
+#define CANVAS_CARD_GAME_H
+
+#include "cardgame.h"
+#include "canvasshapes.h"
+#include "canvascard.h"
+
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qmainwindow.h>
+#include <qpe/qpemenubar.h>
+#include <qpainter.h>
+
+#include <stdlib.h>
+#include <time.h>
+
+
+class CanvasCardPile;
+
+
+class CanvasCardGame : public QCanvasView, public CardGame
+{
+public:
+ CanvasCardGame(QCanvas &c, bool snap, QWidget *parent = 0, const char *name = 0, WFlags f = 0) :
+ QCanvasView( &c, parent, name, f ),
+ moved(FALSE),
+ moving(NULL),
+ alphaCardPile( NULL ),
+ cardXOff(0), cardYOff(0),
+ snapOn(snap),
+ numberToDraw(1) { }
+
+ virtual ~CanvasCardGame();
+
+ virtual Card *newCard( eValue v, eSuit s, bool f ) {
+ return new CanvasCard( v, s, f, canvas() );
+ }
+
+ virtual void readConfig( Config& cfg ) { Q_UNUSED( cfg ); }
+ virtual void writeConfig( Config& cfg ) { Q_UNUSED( cfg ); }
+
+ virtual void gameWon();
+ virtual bool haveWeWon() { return FALSE; }
+
+ virtual bool mousePressCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); return FALSE; }
+ virtual void mouseReleaseCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); }
+
+ void cancelMoving() { moving = NULL; }
+ void toggleSnap() { snapOn = (snapOn == TRUE) ? FALSE : TRUE; }
+ void toggleCardsDrawn() { numberToDraw = (numberToDraw == 1) ? 3 : 1; }
+ int cardsDrawn() { return numberToDraw; }
+ void setNumberToDraw(int numToDraw) { this->numberToDraw = numToDraw; }
+
+ void readPile( Config& cfg, CardPile *pile, QString name, int& highestZ );
+
+protected:
+ void contentsMousePressEvent(QMouseEvent *e);
+ void contentsMouseReleaseEvent(QMouseEvent *e);
+ void contentsMouseMoveEvent(QMouseEvent *e);
+
+protected:
+ // Mouse event state variables
+ bool moved;
+ CanvasCard *moving;
+ CanvasCardPile *alphaCardPile;
+ int cardXOff, cardYOff;
+
+private:
+ bool snapOn;
+ int numberToDraw;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/canvascardwindow.cpp b/noncore/games/solitaire/canvascardwindow.cpp
new file mode 100644
index 0000000..4c365a5
--- a/dev/null
+++ b/noncore/games/solitaire/canvascardwindow.cpp
@@ -0,0 +1,227 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "canvascardwindow.h"
+#include "patiencecardgame.h"
+#include "freecellcardgame.h"
+
+#include <qpe/resource.h>
+
+#include <qmainwindow.h>
+#include <qpopupmenu.h>
+#include <qstyle.h>
+
+
+CanvasCardWindow::CanvasCardWindow(QWidget* parent, const char* name, WFlags f) :
+ QMainWindow(parent, name, f), canvas(230, 260), snapOn(TRUE), cardBack(4), gameType(0),
+ cardGame(NULL)
+{
+ setIcon( Resource::loadPixmap( "cards" ) );
+
+ // Create Playing Area for Games
+ if ( QPixmap::defaultDepth() < 12 ) {
+// canvas.setBackgroundColor(QColor(0x51, 0x74, 0x6B));
+// canvas.setBackgroundColor(QColor(0x20, 0xb0, 0x50));
+ canvas.setBackgroundColor(QColor(0x08, 0x98, 0x2D));
+ } else {
+ QPixmap bg;
+ bg.convertFromImage( Resource::loadImage( "table_pattern" ), ThresholdDither );
+ canvas.setBackgroundPixmap(bg);
+ }
+
+#if defined( QT_QWS_CASSIOPEIA )
+ canvas.setAdvancePeriod(70);
+#else
+ canvas.setAdvancePeriod(30);
+#endif
+
+
+#ifdef _PATIENCE_USE_ACCELS_
+ QPEMenuBar* menu = menuBar();
+
+ QPopupMenu* file = new QPopupMenu;
+ file->insertItem(tr("Patience"), this, SLOT(initPatience()), CTRL+Key_F);
+ file->insertItem(tr("Freecell"), this, SLOT(initFreecell()), CTRL+Key_F);
+ menu->insertItem(tr("&Game"), file);
+
+ menu->insertSeparator();
+
+ settings = new QPopupMenu;
+ settings->insertItem(tr("&Change Card Backs"), this, SLOT(changeCardBacks()), Key_F2);
+ snap_id = settings->insertItem(tr("&Snap To Position"), this, SLOT(snapToggle()), Key_F3);
+ settings->setCheckable(TRUE);
+ menu->insertItem(tr("&Settings"),settings);
+
+ menu->insertSeparator();
+
+ QPopupMenu* help = new QPopupMenu;
+ help->insertItem(tr("&About"), this, SLOT(help()), Key_F1);
+ help->setItemChecked(dbf_id, TRUE);
+ menu->insertItem(tr("&Help"),help);
+#else
+ QMenuBar* menu = menuBar();
+
+ QPopupMenu* file = new QPopupMenu;
+ file->insertItem(tr("Patience"), this, SLOT(initPatience()));
+ file->insertItem(tr("Freecell"), this, SLOT(initFreecell()));
+ menu->insertItem(tr("Play"), file);
+
+ menu->insertSeparator();
+
+ settings = new QPopupMenu;
+ settings->setCheckable(TRUE);
+ settings->insertItem(tr("Change Card Backs"), this, SLOT(changeCardBacks()));
+ snap_id = settings->insertItem(tr("Snap To Position"), this, SLOT(snapToggle()));
+ QString m;
+
+ drawId = settings->insertItem(tr("Turn One Card"), this, SLOT(drawnToggle()));
+ menu->insertItem(tr("Settings"),settings);
+
+#endif
+
+ menu->show();
+
+ Config cfg( "Patience" );
+ cfg.setGroup( "GlobalSettings" );
+ snapOn = cfg.readBoolEntry( "SnapOn", TRUE);
+ settings->setItemChecked(snap_id, snapOn);
+ gameType = cfg.readNumEntry( "GameType", -1 );
+ drawThree = cfg.readBoolEntry( "DrawThree", TRUE);
+ if ( gameType == 0 ) {
+ cardGame = new PatienceCardGame( &canvas, snapOn, this );
+ cardGame->setNumberToDraw(drawThree ? 3 : 1);
+ setCaption(tr("Patience"));
+ setCentralWidget(cardGame);
+ cardGame->readConfig( cfg );
+ setCardBacks();
+ } else if ( gameType == 1 ) {
+ cardGame = new FreecellCardGame( &canvas, snapOn, this );
+ setCaption(tr("Freecell"));
+ setCentralWidget(cardGame);
+ //cardGame->newGame(); // Until we know how to handle reading freecell config
+ cardGame->readConfig( cfg );
+ setCardBacks();
+ } else {
+ // Probably there isn't a config file or it is broken
+ // Start a new game
+ initPatience();
+ }
+
+ updateDraw();
+}
+
+
+CanvasCardWindow::~CanvasCardWindow()
+{
+ if (cardGame) {
+ Config cfg("Patience");
+ cfg.setGroup( "GlobalSettings" );
+ cfg.writeEntry( "GameType", gameType );
+ cfg.writeEntry( "SnapOn", snapOn );
+ cfg.writeEntry( "DrawThree", drawThree);
+ cardGame->writeConfig( cfg );
+ delete cardGame;
+ }
+}
+
+
+void CanvasCardWindow::resizeEvent(QResizeEvent *)
+{
+ QSize s = centralWidget()->size();
+ int fw = style().defaultFrameWidth();
+ canvas.resize( s.width() - fw - 2, s.height() - fw - 2);
+}
+
+
+void CanvasCardWindow::initPatience()
+{
+ // Create New Game
+ if ( cardGame )
+ delete cardGame;
+ cardGame = new PatienceCardGame( &canvas, snapOn, this );
+ cardGame->setNumberToDraw(drawThree ? 3 : 1);
+ gameType = 0;
+ setCaption(tr("Patience"));
+ setCentralWidget(cardGame);
+ cardGame->newGame();
+ setCardBacks();
+ updateDraw();
+}
+
+
+void CanvasCardWindow::initFreecell()
+{
+ // Create New Game
+ if ( cardGame ) {
+ delete cardGame;
+ }
+ cardGame = new FreecellCardGame( &canvas, snapOn, this );
+ gameType = 1;
+ setCaption(tr("Freecell"));
+ setCentralWidget(cardGame);
+ cardGame->newGame();
+ setCardBacks();
+}
+
+
+void CanvasCardWindow::snapToggle()
+{
+ snapOn = !snapOn;
+ settings->setItemChecked(snap_id, snapOn);
+ cardGame->toggleSnap();
+}
+
+
+void CanvasCardWindow::drawnToggle()
+{
+ cardGame->toggleCardsDrawn();
+ updateDraw();
+}
+
+void CanvasCardWindow::updateDraw() {
+ if(cardGame->cardsDrawn() == 3)
+ settings->changeItem(drawId, tr("Turn One Card"));
+ else
+ settings->changeItem(drawId, tr("Turn Three Cards"));
+}
+
+
+void CanvasCardWindow::setCardBacks()
+{
+ QCanvasItemList l = canvas.allItems();
+
+ for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) {
+ if ( (*it)->rtti() == canvasCardId )
+ ((CanvasCard *)(*it))->setCardBack( cardBack );
+ }
+}
+
+
+void CanvasCardWindow::changeCardBacks()
+{
+ cardBack++;
+
+ if (cardBack == 5)
+ cardBack = 0;
+
+ setCardBacks();
+}
+
+
diff --git a/noncore/games/solitaire/canvascardwindow.h b/noncore/games/solitaire/canvascardwindow.h
new file mode 100644
index 0000000..b75d40a
--- a/dev/null
+++ b/noncore/games/solitaire/canvascardwindow.h
@@ -0,0 +1,70 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CANVAS_CARD_WINDOW_H
+#define CANVAS_CARD_WINDOW_H
+
+
+#include <qmainwindow.h>
+#include <qcanvas.h>
+
+
+class CanvasCardGame;
+class QPopupMenu;
+
+
+class CanvasCardWindow : public QMainWindow {
+ Q_OBJECT
+
+public:
+ CanvasCardWindow(QWidget* parent=0, const char* name=0, WFlags f=0);
+ virtual ~CanvasCardWindow();
+
+public slots:
+ void setCardBacks();
+ void changeCardBacks();
+ void snapToggle();
+ void drawnToggle();
+
+private slots:
+ void initFreecell();
+ void initPatience();
+
+protected:
+ virtual void resizeEvent(QResizeEvent *e);
+
+ void updateDraw();
+private:
+ QCanvas canvas;
+ bool snapOn;
+ bool drawThree;
+ int drawId;
+ int cardBack;
+ int gameType;
+ CanvasCardGame *cardGame;
+
+ QPopupMenu* options;
+ QPopupMenu* settings;
+ int dbf_id;
+ int snap_id;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/canvasshapes.cpp b/noncore/games/solitaire/canvasshapes.cpp
new file mode 100644
index 0000000..28d0b4e
--- a/dev/null
+++ b/noncore/games/solitaire/canvasshapes.cpp
@@ -0,0 +1,92 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpainter.h>
+#include <qcanvas.h>
+#include "canvasshapes.h"
+
+
+CanvasRoundRect::CanvasRoundRect(int x, int y, QCanvas *canvas) :
+ QCanvasRectangle( x, y, 23, 36, canvas)
+{
+ setZ(0);
+ show();
+}
+
+
+void CanvasRoundRect::redraw()
+{
+ hide();
+ show();
+}
+
+
+void CanvasRoundRect::drawShape(QPainter &p)
+{
+ p.drawRoundRect( (int)x(), (int)y(), 23, 36);
+}
+
+
+CanvasCircleOrCross::CanvasCircleOrCross(int x, int y, QCanvas *canvas) :
+ QCanvasRectangle( x, y, 21, 21, canvas), circleShape(TRUE)
+{
+ show();
+}
+
+
+void CanvasCircleOrCross::redraw()
+{
+ hide();
+ show();
+}
+
+
+void CanvasCircleOrCross::setCircle()
+{
+ circleShape = TRUE;
+ redraw();
+}
+
+
+void CanvasCircleOrCross::setCross()
+{
+ circleShape = FALSE;
+ redraw();
+}
+
+
+void CanvasCircleOrCross::drawShape(QPainter &p)
+{
+ int x1 = (int)x(), y1 = (int)y();
+ // Green circle
+ if (circleShape == TRUE) {
+ p.setPen( QPen( QColor(0x10, 0xE0, 0x10), 1 ) );
+ p.drawEllipse( x1 - 1, y1 - 1, 21, 21);
+ p.drawEllipse( x1 - 1, y1 - 0, 21, 19);
+ p.drawEllipse( x1 + 0, y1 + 0, 19, 19);
+ p.drawEllipse( x1 + 1, y1 + 0, 17, 19);
+ p.drawEllipse( x1 + 1, y1 + 1, 17, 17);
+ // Red cross
+ } else {
+ p.setPen( QPen( QColor(0xE0, 0x10, 0x10), 5 ) );
+ p.drawLine( x1, y1, x1 + 20, y1 + 20);
+ p.drawLine( x1 + 20, y1, x1, y1 + 20);
+ }
+}
+
diff --git a/noncore/games/solitaire/canvasshapes.h b/noncore/games/solitaire/canvasshapes.h
new file mode 100644
index 0000000..72acf6b
--- a/dev/null
+++ b/noncore/games/solitaire/canvasshapes.h
@@ -0,0 +1,55 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CANVAS_SHAPES_H
+#define CANVAS_SHAPES_H
+
+
+#include <qcanvas.h>
+
+
+class QPainter;
+
+
+class CanvasRoundRect : QCanvasRectangle
+{
+public:
+ CanvasRoundRect(int x, int y, QCanvas *canvas);
+ void redraw();
+protected:
+ void drawShape(QPainter &p);
+};
+
+
+class CanvasCircleOrCross : QCanvasRectangle
+{
+public:
+ CanvasCircleOrCross(int x, int y, QCanvas *canvas);
+ void redraw();
+ void setCircle();
+ void setCross();
+protected:
+ void drawShape(QPainter &p);
+private:
+ bool circleShape;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/card.cpp b/noncore/games/solitaire/card.cpp
new file mode 100644
index 0000000..609e280
--- a/dev/null
+++ b/noncore/games/solitaire/card.cpp
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "card.h"
+
+#include <qpe/config.h>
+
+#include <qpoint.h>
+#include <qlist.h>
+
+/*
+Card( eValue v, eSuit s, bool f ) :
+ val(v), suit(s), faceUp(f), showing(FALSE), ix(0), iy(0), iz(0), cardPile(NULL) { }
+virtual ~Card() { }
+eValue getValue() { return val; }
+eSuit getSuit() { return suit; }
+CardPile *getCardPile() { return cardPile; }
+bool isFacing() { return faceUp; }
+bool isShowing() { return showing; }
+bool isRed() { return ((suit == diamonds) || (suit == hearts)); }
+int getX(void) { return ix; }
+int getY(void) { return iy; }
+int getZ(void) { return iz; }
+void setCardPile(CardPile *p) { cardPile = p; }
+void setFace(bool f) { faceUp = f; }
+void flip(void) { flipTo(getX(), getY()); }
+virtual void setPos(int x, int y, int z) { ix = x; iy = y; iz = z; }
+virtual void move(int x, int y) { ix = x; iy = y; }
+virtual void move(QPoint p) { ix = p.x(); iy = p.y(); }
+virtual void flipTo(int x, int y, int steps = 8) { ix = x; iy = y; faceUp = !faceUp; redraw(); Q_UNUSED(steps); }
+virtual void showCard(void) { showing = TRUE; }
+virtual void hideCard(void) { showing = FALSE; }
+virtual void redraw(void) { }
+*/
+
+
diff --git a/noncore/games/solitaire/card.h b/noncore/games/solitaire/card.h
new file mode 100644
index 0000000..eb30d30
--- a/dev/null
+++ b/noncore/games/solitaire/card.h
@@ -0,0 +1,84 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CARD_H
+#define CARD_H
+
+
+#include <qpoint.h>
+
+
+class CardPile;
+
+
+enum eSuit {
+ jokerSuit = 0, clubs, spades, diamonds, hearts
+};
+
+
+enum eValue {
+ jokerVal = 0, ace, two, three, four, five,
+ six, seven, eight, nine, ten, jack, queen, king
+};
+
+
+class Card
+{
+public:
+ Card( eValue v, eSuit s, bool f ) :
+ val(v), suit(s), faceUp(f), showing(FALSE), ix(0), iy(0), iz(0), cardPile(NULL) { }
+ virtual ~Card() { }
+
+ eValue getValue() { return val; }
+ eSuit getSuit() { return suit; }
+
+ void setCardPile(CardPile *p) { cardPile = p; }
+ CardPile *getCardPile() { return cardPile; }
+
+ void setFace(bool f) { faceUp = f; /* flip(); */ }
+ bool isFacing() { return faceUp; }
+
+ bool isShowing() { return showing; }
+ bool isRed() { return ((suit == diamonds) || (suit == hearts)); }
+
+ int getX(void) { return ix; }
+ int getY(void) { return iy; }
+ int getZ(void) { return iz; }
+ void flip(void) { flipTo(getX(), getY()); }
+
+ virtual void setPos(int x, int y, int z) { ix = x; iy = y; iz = z; }
+ virtual void move(int x, int y) { ix = x; iy = y; }
+ virtual void move(QPoint p) { ix = p.x(); iy = p.y(); }
+ virtual void flipTo(int x, int y, int steps = 8) { ix = x; iy = y; faceUp = !faceUp; redraw(); Q_UNUSED(steps); }
+ virtual void showCard(void) { showing = TRUE; }
+ virtual void hideCard(void) { showing = FALSE; }
+protected:
+ virtual void redraw(void) { }
+private:
+ eValue val;
+ eSuit suit;
+ bool faceUp;
+ bool showing;
+ int ix, iy, iz;
+ CardPile *cardPile;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/carddeck.cpp b/noncore/games/solitaire/carddeck.cpp
new file mode 100644
index 0000000..87c043a
--- a/dev/null
+++ b/noncore/games/solitaire/carddeck.cpp
@@ -0,0 +1,81 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <stdlib.h>
+#include <time.h>
+#include "card.h"
+#include "carddeck.h"
+
+
+CardDeck::CardDeck(int jokers) : numberOfJokers(jokers), deckCreated(FALSE)
+{
+ cards = new (Card *)[getNumberOfCards()];
+}
+
+
+CardDeck::~CardDeck()
+{
+ for (int i = 0; i < getNumberOfCards(); i++)
+ delete cards[i];
+ delete cards;
+}
+
+
+void CardDeck::createDeck()
+{
+ if (!deckCreated) {
+ for (int i = 0; i < 52; i++)
+ cards[i] = newCard( (eValue)((i % 13) + 1), (eSuit)((i / 13) + 1), FALSE );
+ for (int i = 0; i < getNumberOfJokers(); i++)
+ cards[52 + i] = newCard( jokerVal, jokerSuit, FALSE );
+ deckCreated = TRUE;
+ }
+}
+
+
+void CardDeck::shuffle()
+{
+ srand(time(NULL));
+ for (int i = 0; i < getNumberOfCards(); i++) {
+ int index = rand() % getNumberOfCards();
+ Card *tmpCard = cards[i];
+ cards[i] = cards[index];
+ cards[index] = tmpCard;
+ }
+}
+
+
+int CardDeck::getNumberOfCards()
+{
+ return 52 + getNumberOfJokers();
+}
+
+
+int CardDeck::getNumberOfJokers()
+{
+ return numberOfJokers;
+}
+
+
+Card *CardDeck::newCard( eValue v, eSuit s, bool f )
+{
+ return new Card(v, s, f);
+}
+
+
diff --git a/noncore/games/solitaire/carddeck.h b/noncore/games/solitaire/carddeck.h
new file mode 100644
index 0000000..9ad35a9
--- a/dev/null
+++ b/noncore/games/solitaire/carddeck.h
@@ -0,0 +1,49 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CARD_DECK_H
+#define CARD_DECK_H
+
+
+class Card;
+
+
+class CardDeck
+{
+public:
+ CardDeck(int jokers = 0);
+ virtual ~CardDeck();
+
+ void createDeck();
+ void shuffle();
+ int getNumberOfCards();
+ int getNumberOfJokers();
+
+ virtual Card *newCard( eValue v, eSuit s, bool f );
+ virtual void deal() { }
+
+ Card **cards;
+private:
+ int numberOfJokers;
+ bool deckCreated;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/cardgame.cpp b/noncore/games/solitaire/cardgame.cpp
new file mode 100644
index 0000000..b19aeef
--- a/dev/null
+++ b/noncore/games/solitaire/cardgame.cpp
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "cardgame.h"
+
+
+void CardGame::newGame()
+{
+ // Create Cards
+ createDeck();
+
+ // Shuffle Cards
+ shuffle();
+
+ // Deal Cards
+ deal();
+}
+
+
diff --git a/noncore/games/solitaire/cardgame.h b/noncore/games/solitaire/cardgame.h
new file mode 100644
index 0000000..dd7efab
--- a/dev/null
+++ b/noncore/games/solitaire/cardgame.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CARD_GAME_H
+#define CARD_GAME_H
+
+
+#include <qpoint.h>
+#include "card.h"
+#include "cardpile.h"
+#include "carddeck.h"
+#include "cardgamelayout.h"
+
+
+class CardGame : public CardGameLayout, public CardDeck
+{
+public:
+ CardGame(int numOfJokers = 0) : CardGameLayout(), CardDeck(numOfJokers) { }
+ virtual ~CardGame() { }
+ virtual void newGame();
+ virtual void mousePress(QPoint p) { Q_UNUSED(p); }
+ virtual void mouseRelease(QPoint p) { Q_UNUSED(p); }
+ virtual void mouseMove(QPoint p) { Q_UNUSED(p); }
+private:
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/cardgamelayout.cpp b/noncore/games/solitaire/cardgamelayout.cpp
new file mode 100644
index 0000000..1ceee8d
--- a/dev/null
+++ b/noncore/games/solitaire/cardgamelayout.cpp
@@ -0,0 +1,61 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "cardgamelayout.h"
+
+
+CardGameLayout::~CardGameLayout()
+{
+ // Should I just do setAutoDelete( TRUE ); ?
+ for (CardPile *p = first(); p != NULL; p = next())
+ delete p;
+}
+
+
+CardPile *CardGameLayout::closestPile(int x, int y, int maxDistance)
+{
+ int closestDistance = maxDistance * maxDistance;
+ CardPile *closestPile = NULL;
+
+ for (CardPile *p = first(); p != NULL; p = next()) {
+ int d = p->distanceFromNextPos(x, y);
+ if (d < closestDistance) {
+ closestDistance = d;
+ closestPile = p;
+ }
+ }
+
+ return closestPile;
+}
+
+
+void CardGameLayout::beginDealing()
+{
+ for (CardPile *p = first(); p != NULL; p = next())
+ p->beginDealing();
+}
+
+
+void CardGameLayout::endDealing()
+{
+ for (CardPile *p = first(); p != NULL; p = next())
+ p->endDealing();
+}
+
+
diff --git a/noncore/games/solitaire/cardgamelayout.h b/noncore/games/solitaire/cardgamelayout.h
new file mode 100644
index 0000000..bb36e6b
--- a/dev/null
+++ b/noncore/games/solitaire/cardgamelayout.h
@@ -0,0 +1,42 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CARD_GAME_LAYOUT_H
+#define CARD_GAME_LAYOUT_H
+
+
+#include <qlist.h>
+#include "cardpile.h"
+
+
+class CardGameLayout : public QList<CardPile>
+{
+public:
+ CardGameLayout() { }
+ virtual ~CardGameLayout();
+
+ void addCardPile(CardPile *pile) { append((const CardPile *)pile); }
+ CardPile *closestPile(int x, int y, int maxDistance);
+ void beginDealing();
+ void endDealing();
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/cardpile.cpp b/noncore/games/solitaire/cardpile.cpp
new file mode 100644
index 0000000..0b738d2
--- a/dev/null
+++ b/noncore/games/solitaire/cardpile.cpp
@@ -0,0 +1,114 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "cardpile.h"
+#include "card.h"
+
+#include <qpe/config.h>
+#include <qpoint.h>
+
+#include <qlist.h>
+
+
+CardPile::CardPile(int x, int y) : pileX(x), pileY(y), dealing(FALSE) {
+ pileWidth = 0;
+ pileHeight = 0;
+ pileNextX = pileX;
+ pileNextY = pileY;
+ pileCenterX = x + pileWidth / 2;
+ pileCenterY = y + pileHeight / 2;
+ pileRadius = (pileWidth > pileHeight) ? pileWidth : pileHeight;
+}
+
+
+int CardPile::distanceFromPile(int x, int y) {
+ return (pileCenterX-x)*(pileCenterX-x)+(pileCenterY-y)*(pileCenterY-y);
+}
+
+
+int CardPile::distanceFromNextPos(int x, int y) {
+ return (pileNextX-x)*(pileNextX-x)+(pileNextY-y)*(pileNextY-y);
+}
+
+
+Card *CardPile::cardInfront(Card *c) {
+ CardPile *p = c->getCardPile();
+ if (p) {
+ p->at(p->find(c));
+ return p->next();
+ } else {
+ return NULL;
+ }
+}
+
+
+bool CardPile::kingOnTop() {
+ Card *top = cardOnTop();
+ return top && top->getValue() == king;
+}
+
+
+bool CardPile::addCardToTop(Card *c) {
+ if (dealing || isAllowedOnTop(c)) {
+ append((const Card *)c);
+ cardAddedToTop(c);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+bool CardPile::addCardToBottom(Card *c) {
+ if (dealing || isAllowedOnBottom(c)) {
+ prepend((const Card *)c);
+ cardAddedToBottom(c);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+bool CardPile::removeCard(Card *c) {
+ if (dealing || isAllowedToBeMoved(c)) {
+ take(find(c));
+ cardRemoved(c);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+
+void CardPile::writeConfig( Config& cfg, QString name ) {
+ int numberOfCards = 0;
+ cfg.setGroup( name );
+ Card *card = cardOnBottom();
+ while ( card ) {
+ QString cardStr;
+ cardStr.sprintf( "%i", numberOfCards );
+ int val = (int)card->getValue() - 1 + ( (int)card->getSuit() - 1 ) * 13;
+ cfg.writeEntry( "Card" + cardStr, val );
+ cfg.writeEntry( "CardFacing" + cardStr, card->isFacing() );
+ card = cardInfront( card );
+ numberOfCards++;
+ }
+ cfg.writeEntry("NumberOfCards", numberOfCards);
+}
+
+
diff --git a/noncore/games/solitaire/cardpile.h b/noncore/games/solitaire/cardpile.h
new file mode 100644
index 0000000..c515bbc
--- a/dev/null
+++ b/noncore/games/solitaire/cardpile.h
@@ -0,0 +1,101 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CARD_PILE_H
+#define CARD_PILE_H
+
+
+#include <qpoint.h>
+#include <qlist.h>
+
+
+enum ePileStackingType {
+ pileCascades = 0, pileStacks, pileCascadesOrStacks
+};
+
+
+enum ePileFaceingType {
+ pileFaceUp = 0, pileFaceDown, pileFaceUpOrDown
+};
+
+
+class Card;
+class Config;
+
+
+class CardPile : public QList<Card>
+{
+public:
+ CardPile(int x, int y);
+ virtual ~CardPile() { }
+
+ int getX() { return pileX; }
+ int getY() { return pileY; }
+ int getNextX() { return pileNextX; }
+ int getNextY() { return pileNextY; }
+ int getWidth() { return pileWidth; }
+ int getHeight() { return pileHeight; }
+
+ void setX(int x) { pileX = x; }
+ void setY(int y) { pileY = y; }
+ void setNextX(int x) { pileNextX = x; }
+ void setNextY(int y) { pileNextY = y; }
+ void setWidth(int width) { pileWidth = width; }
+ void setHeight(int height) { pileHeight = height; }
+
+ void beginDealing() { dealing = TRUE; }
+ void endDealing() { dealing = FALSE; }
+ bool isDealing() { return dealing; }
+
+ int distanceFromPile(int x, int y);
+ int distanceFromNextPos(int x, int y);
+
+ Card *cardOnTop() { return getLast(); }
+ Card *cardOnBottom() { return getFirst(); }
+ Card *cardInfront(Card *c);
+ bool kingOnTop();
+
+ bool addCardToTop(Card *c);
+ bool addCardToBottom(Card *c);
+ bool removeCard(Card *c);
+
+ virtual void cardAddedToTop(Card *) { }
+ virtual void cardAddedToBottom(Card *) { }
+ virtual void cardRemoved(Card *) { }
+ virtual bool isAllowedOnTop(Card *) { return FALSE; }
+ virtual bool isAllowedOnBottom(Card *) { return FALSE; }
+ virtual bool isAllowedToBeMoved(Card *) { return FALSE; }
+ virtual QPoint getCardPos(Card *) { return QPoint(pileX, pileY); }
+ virtual QPoint getHypertheticalNextCardPos() { return QPoint(pileX, pileY); }
+
+ void writeConfig( Config& cfg, QString name );
+
+protected:
+ int pileX, pileY;
+ int pileNextX, pileNextY;
+ int pileWidth, pileHeight;
+ int pileCenterX, pileCenterY;
+ int pileRadius;
+private:
+ bool dealing;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/freecellcardgame.cpp b/noncore/games/solitaire/freecellcardgame.cpp
new file mode 100644
index 0000000..e82afd4
--- a/dev/null
+++ b/noncore/games/solitaire/freecellcardgame.cpp
@@ -0,0 +1,137 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "freecellcardgame.h"
+
+
+extern int highestZ;
+int numberOfFreeCells = 4;
+
+
+FreecellCardGame::FreecellCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent)
+{
+ numberOfFreeCells = 4;
+ highestZ = 0;
+
+ for (int i = 0; i < 4; i++) {
+ freecellPiles[i] = new FreecellFreecellPile( 5 + i * 28, 10, canvas() );
+ addCardPile(freecellPiles[i]);
+ }
+ for (int i = 0; i < 4; i++) {
+ discardPiles[i] = new FreecellDiscardPile( 125 + i * 28, 10, canvas() );
+ addCardPile(discardPiles[i]);
+ }
+ for (int i = 0; i < 8; i++) {
+ workingPiles[i] = new FreecellWorkingPile( 10 + i * 28, 50, canvas() );
+ addCardPile(workingPiles[i]);
+ }
+}
+
+
+void FreecellCardGame::deal(void)
+{
+ highestZ = 1;
+
+ beginDealing();
+
+ for (int i = 0; i < 52; i++) {
+ Card *card = cards[i];
+ card->setFace( TRUE );
+ card->setPos( 0, 0, highestZ );
+ card->setCardPile( workingPiles[i%8] );
+ workingPiles[i%8]->addCardToTop( card );
+ card->move( workingPiles[i%8]->getCardPos( card ) );
+ card->showCard();
+ highestZ++;
+ }
+
+ endDealing();
+}
+
+
+bool FreecellCardGame::mousePressCard( Card *c, QPoint p )
+{
+ Q_UNUSED(p);
+
+ if ( !c->getCardPile()->isAllowedToBeMoved(c) ) {
+ moving = NULL;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+void FreecellCardGame::readConfig( Config& cfg )
+{
+ cfg.setGroup("GameState");
+
+ // Create Cards, but don't shuffle or deal them yet
+ createDeck();
+
+ // Move the cards to their piles (deal them to their previous places)
+ beginDealing();
+
+ highestZ = 1;
+
+ for (int k = 0; k < 4; k++) {
+ QString pile;
+ pile.sprintf( "FreeCellPile%i", k );
+ readPile( cfg, freecellPiles[k], pile, highestZ );
+ }
+
+ for (int k = 0; k < 4; k++) {
+ QString pile;
+ pile.sprintf( "DiscardPile%i", k );
+ readPile( cfg, discardPiles[k], pile, highestZ );
+ }
+
+ for (int k = 0; k < 8; k++) {
+ QString pile;
+ pile.sprintf( "WorkingPile%i", k );
+ readPile( cfg, workingPiles[k], pile, highestZ );
+ }
+
+ highestZ++;
+
+ endDealing();
+}
+
+
+void FreecellCardGame::writeConfig( Config& cfg )
+{
+ cfg.setGroup("GameState");
+ for ( int i = 0; i < 4; i++ ) {
+ QString pile;
+ pile.sprintf( "FreeCellPile%i", i );
+ freecellPiles[i]->writeConfig( cfg, pile );
+ }
+ for ( int i = 0; i < 4; i++ ) {
+ QString pile;
+ pile.sprintf( "DiscardPile%i", i );
+ discardPiles[i]->writeConfig( cfg, pile );
+ }
+ for ( int i = 0; i < 8; i++ ) {
+ QString pile;
+ pile.sprintf( "WorkingPile%i", i );
+ workingPiles[i]->writeConfig( cfg, pile );
+ }
+}
+
+
diff --git a/noncore/games/solitaire/freecellcardgame.h b/noncore/games/solitaire/freecellcardgame.h
new file mode 100644
index 0000000..f1b09ab
--- a/dev/null
+++ b/noncore/games/solitaire/freecellcardgame.h
@@ -0,0 +1,152 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FREECELL_CARD_GAME_H
+#define FREECELL_CARD_GAME_H
+
+
+#include "patiencecardgame.h"
+
+
+extern int numberOfFreeCells;
+
+
+class FreecellDiscardPile : public PatienceDiscardPile
+{
+public:
+ FreecellDiscardPile(int x, int y, QCanvas *canvas) :
+ PatienceDiscardPile(x, y, canvas) { }
+
+};
+
+
+class FreecellWorkingPile : public PatienceWorkingPile
+{
+public:
+ FreecellWorkingPile(int x, int y, QCanvas *canvas) :
+ PatienceWorkingPile(x, y, canvas) { }
+
+ virtual bool isAllowedOnTop(Card *card) {
+ if ( cardOnBottom() == NULL ) {
+ int numberOfCardsBeingMoved = 0;
+ Card *tempCard = card;
+
+ while ((tempCard != NULL)) {
+ numberOfCardsBeingMoved++;
+ tempCard = cardInfront(tempCard);
+ }
+
+ if (numberOfCardsBeingMoved > numberOfFreeCells)
+ return FALSE;
+ }
+
+ if ( card->isFacing() &&
+ cardOnTop() == NULL )
+ return TRUE;
+ return PatienceWorkingPile::isAllowedOnTop( card );
+ }
+
+ virtual bool isAllowedToBeMoved(Card *card) {
+ int nextExpectedValue = (int)card->getValue();
+ bool nextExpectedColor = card->isRed();
+ int numberOfCardsBeingMoved = 0;
+
+ while ((card != NULL)) {
+ numberOfCardsBeingMoved++;
+ if ( (int)card->getValue() != nextExpectedValue )
+ return FALSE;
+ if ( card->isRed() != nextExpectedColor )
+ return FALSE;
+ nextExpectedValue--;;
+ nextExpectedColor = !nextExpectedColor;
+ card = cardInfront(card);
+ }
+
+ if (numberOfCardsBeingMoved <= (numberOfFreeCells + 1))
+ return TRUE;
+
+ return FALSE;
+ }
+ virtual void cardRemoved(Card *card) {
+ if ( !isDealing() && !cardOnTop() )
+ numberOfFreeCells++;
+ PatienceWorkingPile::cardRemoved( card );
+ }
+ virtual void cardAddedToTop(Card *card) {
+ if ( !isDealing() && cardOnBottom() == card )
+ numberOfFreeCells--;
+ PatienceWorkingPile::cardAddedToTop( card );
+ }
+};
+
+
+class FreecellFreecellPile : public CardPile, public CanvasRoundRect
+{
+public:
+ FreecellFreecellPile(int x, int y, QCanvas *canvas)
+ : CardPile(x, y), CanvasRoundRect(x, y, canvas) { }
+ virtual bool isAllowedOnTop(Card *card) {
+ if ( ( cardOnTop() == NULL ) && ( card->getCardPile()->cardInfront(card) == NULL ) )
+ return TRUE;
+ return FALSE;
+ }
+ virtual bool isAllowedToBeMoved(Card *card) {
+ Q_UNUSED(card);
+ return TRUE;
+ }
+ virtual void cardAddedToTop(Card *card) {
+ Q_UNUSED(card);
+ numberOfFreeCells--;
+ }
+ virtual void cardRemoved(Card *card) {
+ Q_UNUSED(card);
+ numberOfFreeCells++;
+ }
+};
+
+
+class FreecellCardGame : public CanvasCardGame
+{
+public:
+ FreecellCardGame(QCanvas *c, bool snap, QWidget *parent = 0);
+ virtual void deal(void);
+ virtual bool haveWeWon() {
+ return ( discardPiles[0]->kingOnTop() &&
+ discardPiles[1]->kingOnTop() &&
+ discardPiles[2]->kingOnTop() &&
+ discardPiles[3]->kingOnTop() );
+ }
+ virtual void mousePress(QPoint p) { Q_UNUSED(p); }
+ virtual void mouseRelease(QPoint p) { Q_UNUSED(p); }
+// virtual void mouseMove(QPoint p);
+ virtual bool mousePressCard(Card *card, QPoint p);
+ virtual void mouseReleaseCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); }
+// virtual void mouseMoveCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); }
+ void readConfig( Config& cfg );
+ void writeConfig( Config& cfg );
+ bool snapOn;
+private:
+ FreecellFreecellPile *freecellPiles[8];
+ FreecellWorkingPile *workingPiles[8];
+ FreecellDiscardPile *discardPiles[4];
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/main.cpp b/noncore/games/solitaire/main.cpp
new file mode 100644
index 0000000..f81aa3c
--- a/dev/null
+++ b/noncore/games/solitaire/main.cpp
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "canvascardwindow.h"
+
+#include <qpe/qpeapplication.h>
+
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ CanvasCardWindow m;
+ m.setCaption( CanvasCardWindow::tr("Patience") );
+ a.showMainWidget( &m );
+
+ return a.exec();
+}
+
diff --git a/noncore/games/solitaire/patiencecardgame.cpp b/noncore/games/solitaire/patiencecardgame.cpp
new file mode 100644
index 0000000..5a9326a
--- a/dev/null
+++ b/noncore/games/solitaire/patiencecardgame.cpp
@@ -0,0 +1,234 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "patiencecardgame.h"
+
+
+int highestZ = 0;
+
+
+PatienceCardGame::PatienceCardGame(QCanvas *c, bool snap, QWidget *parent) : CanvasCardGame(*c, snap, parent)
+{
+ numberOfTimesThroughDeck = 0;
+ highestZ = 0;
+
+ circleCross = new CanvasCircleOrCross( 7, 18, canvas() );
+ rectangle = new CanvasRoundRect( 35, 10, canvas() );
+
+ for (int i = 0; i < 4; i++) {
+ discardPiles[i] = new PatienceDiscardPile( 110 + i * 30, 10, canvas() );
+ addCardPile(discardPiles[i]);
+ }
+ for (int i = 0; i < 7; i++) {
+ workingPiles[i] = new PatienceWorkingPile( 10 + i * 30, 50, canvas() );
+ addCardPile(workingPiles[i]);
+ }
+ faceDownDealingPile = new PatienceFaceDownDeck( 5, 10, canvas() );
+ faceUpDealingPile = new PatienceFaceUpDeck( 35, 10, canvas() );
+}
+
+
+PatienceCardGame::~PatienceCardGame()
+{
+ delete circleCross;
+ delete rectangle;
+ delete faceDownDealingPile;
+ delete faceUpDealingPile;
+}
+
+
+void PatienceCardGame::deal(void)
+{
+ highestZ = 1;
+ int t = 0;
+
+ beginDealing();
+
+ for (int i = 0; i < 7; i++) {
+ cards[t]->setFace(TRUE);
+ for (int k = i; k < 7; k++, t++) {
+ Card *card = cards[t];
+ workingPiles[k]->addCardToTop(card);
+ card->setCardPile( workingPiles[k] );
+ QPoint p = workingPiles[k]->getCardPos( card );
+ card->setPos( p.x(), p.y(), highestZ );
+ card->showCard();
+ highestZ++;
+ }
+ }
+
+ for ( ; t < 52; t++) {
+ Card *card = cards[t];
+ faceDownDealingPile->addCardToTop(card);
+ card->setCardPile( faceDownDealingPile );
+ QPoint p = faceDownDealingPile->getCardPos( card );
+ card->setPos( p.x(), p.y(), highestZ );
+ card->showCard();
+ highestZ++;
+ }
+
+ endDealing();
+}
+
+
+void PatienceCardGame::readConfig( Config& cfg )
+{
+ cfg.setGroup("GameState");
+
+ // Do we have a config file to read in?
+ if ( !cfg.hasKey("numberOfTimesThroughDeck") ) {
+ // if not, create a new game
+ newGame();
+ return;
+ }
+ // We have a config file, lets read it in and use it
+
+ // Create Cards, but don't shuffle or deal them yet
+ createDeck();
+
+ // How many times through the deck have we been
+ numberOfTimesThroughDeck = cfg.readNumEntry("NumberOfTimesThroughDeck");
+
+ // restore state to the circle/cross under the dealing pile
+ if ( canTurnOverDeck() )
+ circleCross->setCircle();
+ else
+ circleCross->setCross();
+
+ // Move the cards to their piles (deal them to their previous places)
+ beginDealing();
+
+ highestZ = 1;
+
+ for (int k = 0; k < 7; k++) {
+ QString pile;
+ pile.sprintf( "WorkingPile%i", k );
+ readPile( cfg, workingPiles[k], pile, highestZ );
+ }
+
+ for (int k = 0; k < 4; k++) {
+ QString pile;
+ pile.sprintf( "DiscardPile%i", k );
+ readPile( cfg, discardPiles[k], pile, highestZ );
+ }
+
+ readPile( cfg, faceDownDealingPile, "FaceDownDealingPile", highestZ );
+ readPile( cfg, faceUpDealingPile, "FaceUpDealingPile", highestZ );
+
+ highestZ++;
+
+ endDealing();
+}
+
+
+void PatienceCardGame::writeConfig( Config& cfg )
+{
+ cfg.setGroup("GameState");
+ cfg.writeEntry("numberOfTimesThroughDeck", numberOfTimesThroughDeck);
+
+ for ( int i = 0; i < 7; i++ ) {
+ QString pile;
+ pile.sprintf( "WorkingPile%i", i );
+ workingPiles[i]->writeConfig( cfg, pile );
+ }
+ for ( int i = 0; i < 4; i++ ) {
+ QString pile;
+ pile.sprintf( "DiscardPile%i", i );
+ discardPiles[i]->writeConfig( cfg, pile );
+ }
+ faceDownDealingPile->writeConfig( cfg, "FaceDownDealingPile" );
+ faceUpDealingPile->writeConfig( cfg, "FaceUpDealingPile" );
+}
+
+
+bool PatienceCardGame::mousePressCard( Card *card, QPoint p )
+{
+ Q_UNUSED(p);
+
+ CanvasCard *item = (CanvasCard *)card;
+ if (item->isFacing() != TRUE) {
+ // From facedown stack
+ if ((item->x() == 5) && ((int)item->y() == 10)) {
+ item->setZ(highestZ);
+ highestZ++;
+
+ // Added Code
+ faceDownDealingPile->removeCard(item);
+ faceUpDealingPile->addCardToTop(item);
+ item->setCardPile( faceUpDealingPile );
+
+ item->flipTo( 35, (int)item->y() );
+ }
+ moving = NULL;
+ moved = FALSE;
+
+ // move two other cards if we flip three at a time
+ int flipped = 1;
+ QCanvasItemList l = canvas()->collisions( p );
+ for (QCanvasItemList::Iterator it = l.begin(); (it != l.end()) && (flipped != cardsDrawn()); ++it) {
+ if ( (*it)->rtti() == canvasCardId ) {
+ CanvasCard *item = (CanvasCard *)*it;
+ if (item->animated())
+ continue;
+ item->setZ(highestZ);
+ highestZ++;
+ flipped++;
+
+ // Added Code
+ faceDownDealingPile->removeCard(item);
+ faceUpDealingPile->addCardToTop(item);
+ item->setCardPile( faceUpDealingPile );
+
+ item->flipTo( 35, (int)item->y(), 8 * flipped );
+ }
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+void PatienceCardGame::mousePress(QPoint p)
+{
+ if ( canTurnOverDeck() &&
+ (p.x() > 5) && (p.x() < 28) &&
+ (p.y() > 10) && (p.y() < 46) ) {
+
+ beginDealing();
+ Card *card = faceUpDealingPile->cardOnTop();
+ while ( card ) {
+ card->setPos( 5, 10, highestZ );
+ card->setFace( FALSE );
+ faceUpDealingPile->removeCard( card );
+ faceDownDealingPile->addCardToTop( card );
+ card->setCardPile( faceDownDealingPile );
+ card = faceUpDealingPile->cardOnTop();
+ highestZ++;
+ }
+ endDealing();
+
+ throughDeck();
+
+ moved = TRUE;
+ }
+}
+
+
diff --git a/noncore/games/solitaire/patiencecardgame.h b/noncore/games/solitaire/patiencecardgame.h
new file mode 100644
index 0000000..c4f6c48
--- a/dev/null
+++ b/noncore/games/solitaire/patiencecardgame.h
@@ -0,0 +1,206 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PATIENCE_CARD_GAME_H
+#define PATIENCE_CARD_GAME_H
+
+
+#include <qpopupmenu.h>
+#include <qmainwindow.h>
+#include <qintdict.h>
+#include <qcanvas.h>
+// #include "canvascardshapes.h"
+// #include "canvascard.h"
+#include "canvascardgame.h"
+
+
+class PatienceFaceDownDeck : public CardPile, public CanvasRoundRect
+{
+public:
+ PatienceFaceDownDeck(int x, int y, QCanvas *canvas)
+ : CardPile(x, y), CanvasRoundRect(x, y, canvas) { }
+ virtual bool isAllowedOnTop(Card *card) {
+ Q_UNUSED(card);
+ // Need to check it is from the faceUpDealingPile
+ return TRUE;
+ }
+ virtual bool isAllowedToBeMoved(Card *card) {
+ Q_UNUSED(card);
+ //if ( ( !card->isFacing() ) && ( card == cardOnTop() ) )
+ if ( card == cardOnTop() )
+ return TRUE;
+ return FALSE;
+ }
+};
+
+
+class PatienceFaceUpDeck : public CardPile, public CanvasRoundRect
+{
+public:
+ PatienceFaceUpDeck(int x, int y, QCanvas *canvas)
+ : CardPile(x, y), CanvasRoundRect(x, y, canvas) { }
+ virtual bool isAllowedOnTop(Card *card) {
+ Q_UNUSED(card);
+ // Need to check it is from the faceDownDealingPile
+ return TRUE;
+ }
+ virtual bool isAllowedToBeMoved(Card *card) {
+ Q_UNUSED(card);
+ //if ( ( card->isFacing() ) && ( card == cardOnTop() ) )
+ if ( card == cardOnTop() )
+ return TRUE;
+ return FALSE;
+ }
+};
+
+
+class PatienceDiscardPile : public CardPile, public CanvasRoundRect
+{
+public:
+ PatienceDiscardPile(int x, int y, QCanvas *canvas)
+ : CardPile(x, y), CanvasRoundRect(x, y, canvas) { }
+ virtual bool isAllowedOnTop(Card *card) {
+ if ( card->isFacing() && ( card->getCardPile()->cardInfront(card) == NULL ) &&
+ ( ( ( cardOnTop() == NULL ) && ( card->getValue() == ace ) ) ||
+ ( ( cardOnTop() != NULL ) &&
+ ( (int)card->getValue() == (int)cardOnTop()->getValue() + 1 ) &&
+ ( card->getSuit() == cardOnTop()->getSuit() ) ) ) )
+ return TRUE;
+ return FALSE;
+ }
+ virtual bool isAllowedToBeMoved(Card *card) {
+ if ( card->isFacing() && ( card == cardOnTop() ) )
+ return TRUE;
+ return FALSE;
+ }
+};
+
+
+class PatienceWorkingPile : public CardPile, public CanvasRoundRect
+{
+public:
+ PatienceWorkingPile(int x, int y, QCanvas *canvas)
+ : CardPile(x, y), CanvasRoundRect(x, y, canvas), top(x, y) { }
+ virtual bool isAllowedOnTop(Card *card) {
+ if ( card->isFacing() &&
+ ( ( ( cardOnTop() == NULL ) && (card->getValue() == king) ) ||
+ ( ( cardOnTop() != NULL ) &&
+ ( (int)card->getValue() + 1 == (int)cardOnTop()->getValue() ) &&
+ ( card->isRed() != cardOnTop()->isRed() ) ) ) )
+ return TRUE;
+ return FALSE;
+ }
+ virtual bool isAllowedToBeMoved(Card *card) {
+ if ( card->isFacing() )
+ return TRUE;
+ return FALSE;
+ }
+ virtual void cardAddedToTop(Card *card) {
+ Q_UNUSED(card);
+ top = getCardPos(NULL);
+ setNextX( top.x() );
+ setNextY( top.y() );
+ }
+ virtual void cardRemoved(Card *card) {
+ Q_UNUSED(card);
+
+ Card *newTopCard = cardOnTop();
+
+ if ( !newTopCard ) {
+ top = QPoint( pileX, pileY );
+ setNextX( pileX );
+ setNextY( pileY );
+ return;
+ } else {
+ top = getCardPos(NULL);
+ if ( newTopCard->isFacing() == FALSE ) {
+ // correct the position taking in to account the card is not
+ // yet flipped, but will become flipped
+ top = QPoint( top.x() - 1, top.y() - 3 );
+ newTopCard->flipTo( top.x(), top.y() );
+ top = QPoint( top.x(), top.y() + 13 );
+ }
+ setNextX( top.x() );
+ setNextY( top.y() );
+ }
+ }
+ virtual QPoint getCardPos(Card *c) {
+ int x = pileX, y = pileY;
+ Card *card = cardOnBottom();
+ while ((card != c) && (card != NULL)) {
+ if (card->isFacing()) {
+ y += 13;
+ } else {
+ x += 1;
+ y += 3;
+ }
+ card = cardInfront(card);
+ }
+ return QPoint( x, y );
+ }
+ virtual QPoint getHypertheticalNextCardPos(void) {
+ return top;
+ // return QPoint( getNextX(), getNextY() );
+ }
+private:
+ QPoint top;
+
+};
+
+
+class PatienceCardGame : public CanvasCardGame
+{
+public:
+ PatienceCardGame(QCanvas *c, bool snap, QWidget *parent = 0);
+ virtual ~PatienceCardGame();
+ virtual void deal(void);
+ virtual bool haveWeWon() {
+ return ( discardPiles[0]->kingOnTop() &&
+ discardPiles[1]->kingOnTop() &&
+ discardPiles[2]->kingOnTop() &&
+ discardPiles[3]->kingOnTop() );;
+ }
+ virtual void mousePress(QPoint p);
+ virtual void mouseRelease(QPoint p) { Q_UNUSED(p); }
+// virtual void mouseMove(QPoint p);
+ virtual bool mousePressCard(Card *card, QPoint p);
+ virtual void mouseReleaseCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); }
+// virtual void mouseMoveCard(Card *card, QPoint p) { Q_UNUSED(card); Q_UNUSED(p); }
+ bool canTurnOverDeck(void) { return (numberOfTimesThroughDeck != 3); }
+ void throughDeck(void) {
+ numberOfTimesThroughDeck++;
+ if (numberOfTimesThroughDeck == 3)
+ circleCross->setCross();
+ }
+ bool snapOn;
+ virtual void writeConfig( Config& cfg );
+ virtual void readConfig( Config& cfg );
+private:
+ CanvasCircleOrCross *circleCross;
+ CanvasRoundRect *rectangle;
+ PatienceWorkingPile *workingPiles[7];
+ PatienceDiscardPile *discardPiles[4];
+ PatienceFaceDownDeck *faceDownDealingPile;
+ PatienceFaceUpDeck *faceUpDealingPile;
+ int numberOfTimesThroughDeck;
+};
+
+
+#endif
+
diff --git a/noncore/games/solitaire/qpe-solitaire.control b/noncore/games/solitaire/qpe-solitaire.control
new file mode 100644
index 0000000..71abb0c
--- a/dev/null
+++ b/noncore/games/solitaire/qpe-solitaire.control
@@ -0,0 +1,9 @@
+Files: bin/patience apps/Games/patience.desktop pics/cards
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Game: solitaire card games
+ A solitaire game for the Qtopia environment.
diff --git a/noncore/games/solitaire/solitaire.pro b/noncore/games/solitaire/solitaire.pro
new file mode 100755
index 0000000..8617cab
--- a/dev/null
+++ b/noncore/games/solitaire/solitaire.pro
@@ -0,0 +1,18 @@
+TEMPLATE = app
+
+CONFIG += qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+
+HEADERS = canvascard.h canvasshapes.h cardgame.h cardgamelayout.h cardpile.h card.h carddeck.h canvascardgame.h freecellcardgame.h patiencecardgame.h canvascardwindow.h
+
+SOURCES = canvascard.cpp canvasshapes.cpp cardgame.cpp cardgamelayout.cpp cardpile.cpp card.cpp carddeck.cpp canvascardgame.cpp freecellcardgame.cpp patiencecardgame.cpp canvascardwindow.cpp main.cpp
+
+TARGET = patience
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+REQUIRES = patience
+
+TRANSLATIONS = ../i18n/de/patience.ts
diff --git a/noncore/games/tetrix/.cvsignore b/noncore/games/tetrix/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/noncore/games/tetrix/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/noncore/games/tetrix/Makefile.in b/noncore/games/tetrix/Makefile.in
new file mode 100644
index 0000000..3a74fdc
--- a/dev/null
+++ b/noncore/games/tetrix/Makefile.in
@@ -0,0 +1,157 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = tetrix
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = minefield.h \
+ gtetrix.h \
+ qtetrix.h \
+ qtetrixb.h \
+ tpiece.h
+SOURCES = main.cpp \
+ gtetrix.cpp \
+ qtetrix.cpp \
+ qtetrixb.cpp \
+ tpiece.cpp
+OBJECTS = main.o \
+ gtetrix.o \
+ qtetrix.o \
+ qtetrixb.o \
+ tpiece.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_qtetrix.cpp \
+ moc_qtetrixb.cpp
+OBJMOC = moc_qtetrix.o \
+ moc_qtetrixb.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake tetrix.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ qtetrix.h \
+ qtetrixb.h \
+ gtetrix.h \
+ tpiece.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+gtetrix.o: gtetrix.cpp \
+ gtetrix.h \
+ tpiece.h
+
+qtetrix.o: qtetrix.cpp \
+ qtetrix.h \
+ qtetrixb.h \
+ gtetrix.h \
+ tpiece.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+qtetrixb.o: qtetrixb.cpp \
+ qtetrixb.h \
+ gtetrix.h \
+ tpiece.h \
+ qtetrix.h
+
+tpiece.o: tpiece.cpp \
+ tpiece.h
+
+moc_qtetrix.o: moc_qtetrix.cpp \
+ qtetrix.h \
+ qtetrixb.h \
+ gtetrix.h \
+ tpiece.h
+
+moc_qtetrixb.o: moc_qtetrixb.cpp \
+ qtetrixb.h \
+ gtetrix.h \
+ tpiece.h
+
+moc_qtetrix.cpp: qtetrix.h
+ $(MOC) qtetrix.h -o moc_qtetrix.cpp
+
+moc_qtetrixb.cpp: qtetrixb.h
+ $(MOC) qtetrixb.h -o moc_qtetrixb.cpp
+
+
diff --git a/noncore/games/tetrix/gtetrix.cpp b/noncore/games/tetrix/gtetrix.cpp
new file mode 100644
index 0000000..d1f38b1
--- a/dev/null
+++ b/noncore/games/tetrix/gtetrix.cpp
@@ -0,0 +1,514 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "gtetrix.h"
+
+#include <string.h>
+
+GenericTetrix::GenericTetrix(int boardWidth,int boardHeight)
+{
+ int i,j;
+
+ width = boardWidth;
+ height = boardHeight;
+ boardPtr = new int[height*width]; // Note the order, this makes it easier
+ // to remove full lines.
+ for(i = 0 ; i < height ; i++)
+ for(j = 0 ; j < width ; j++)
+ board(j,i) = 0;
+ currentLine = -1; // -1 if no falling piece.
+ currentPos = 0;
+ showNext = 0; // FALSE
+ nLinesRemoved = 0;
+ nPiecesDropped = 0;
+ score = 0;
+ level = 1;
+ gameID = 0;
+ nClearLines = height;
+}
+
+GenericTetrix::~GenericTetrix()
+{
+ delete[] boardPtr;
+}
+
+
+void GenericTetrix::clearBoard(int fillRandomLines)
+{
+ int i,j;
+
+ if (fillRandomLines >= height)
+ fillRandomLines = height - 1;
+
+ erasePiece();
+ for(i = height - nClearLines - 1 ; i >= fillRandomLines ; i--)
+ for(j = 0 ; j < width ; j++)
+ if (board(j,i) != 0) {
+ draw(j,i,0);
+ board(j,i) = 0;
+ }
+ if (fillRandomLines != 0)
+ for (i = 0 ; i < fillRandomLines ; i++) {
+ fillRandom(i);
+ }
+ nClearLines = height - fillRandomLines;
+}
+
+void GenericTetrix::showBoard()
+{
+ int i,j;
+
+ showPiece();
+ for(i = height - nClearLines - 1 ; i >= 0 ; i--)
+ for(j = 0 ; j < width ; j++)
+ if (board(j,i) != 0)
+ draw(j,i,board(j,i));
+}
+
+void GenericTetrix::hideBoard()
+{
+ int i,j;
+
+ erasePiece();
+ for(i = height - nClearLines - 1 ; i >= 0 ; i--)
+ for(j = 0 ; j < width ; j++)
+ if (board(j,i) != 0)
+ draw(j,i,0);
+}
+
+void GenericTetrix::startGame(int gameType,int fillRandomLines)
+{
+ gameID = gameType;
+ clearBoard(fillRandomLines);
+ nLinesRemoved = 0;
+ updateRemoved(nLinesRemoved);
+ nClearLines = height;
+ nPiecesDropped = 0;
+ score = 0;
+ updateScore(score);
+ level = 1;
+ updateLevel(level);
+ newPiece();
+}
+
+void GenericTetrix::revealNextPiece(int revealIt)
+{
+ if (showNext == revealIt)
+ return;
+ showNext = revealIt;
+ if (!showNext)
+ eraseNextPiece();
+ else
+ showNextPiece();
+}
+
+void GenericTetrix::updateBoard(int x1,int y1,int x2, int y2,
+ int dontUpdateBlanks)
+{
+ int i,j;
+ int tmp;
+
+ if (x1 > x2) {
+ tmp = x2;
+ x2 = x1;
+ x1 = tmp;
+ }
+ if (y1 > y2) {
+ tmp = y2;
+ y2 = y1;
+ y1 = tmp;
+ }
+ if (x1 < 0)
+ x1 = 0;
+ if (x2 >= width)
+ x2 = width - 1;
+ if (y1 < 0)
+ y1 = 0;
+ if (y2 >= height)
+ y2 = height - 1;
+ for(i = y1 ; i <= y2 ; i++)
+ for(j = x1 ; j <= x2 ; j++)
+ if (!dontUpdateBlanks || board(j,height - i - 1) != 0)
+ draw(j,height - i - 1,board(j,height - i - 1));
+ showPiece(); // Remember to update piece correctly!!!!
+}
+
+
+void GenericTetrix::fillRandom(int line)
+{
+ int i,j;
+ int holes;
+
+ for(i = 0 ; i < width ; i++)
+ board(i,line) = TetrixPiece::randomValue(7);
+ holes = 0;
+ for(i = 0 ; i < width ; i++)
+ if (board(i,line) == 0) // Count holes in the line.
+ holes++;
+ if (holes == 0) // Full line, make a random hole:
+ board(TetrixPiece::randomValue(width),line) = 0;
+ if (holes == width) // Empty line, make a random square:
+ board(TetrixPiece::randomValue(width),line) =
+ TetrixPiece::randomValue(6) + 1;
+ for(j = 0 ; j < width ; j++)
+ draw(j,i,board(j,i));
+}
+
+void GenericTetrix::moveLeft(int steps)
+{
+ while(steps) {
+ if (!canMoveTo(currentPos - 1,currentLine))
+ return;
+ moveTo(currentPos - 1,currentLine);
+ steps--;
+ }
+}
+
+void GenericTetrix::moveRight(int steps)
+{
+ while(steps) {
+ if (!canMoveTo(currentPos + 1,currentLine))
+ return;
+ moveTo(currentPos + 1,currentLine);
+ steps--;
+ }
+}
+
+void GenericTetrix::rotateLeft()
+{
+ TetrixPiece tmp(currentPiece);
+
+ tmp.rotateLeft();
+ if (!canPosition(tmp))
+ return;
+ position(tmp);
+ currentPiece = tmp;
+}
+
+void GenericTetrix::rotateRight()
+{
+ TetrixPiece tmp(currentPiece);
+
+ tmp.rotateRight();
+ if (!canPosition(tmp))
+ return;
+ position(tmp);
+ currentPiece = tmp;
+}
+
+void GenericTetrix::dropDown()
+{
+ if (currentLine == -1)
+ return;
+
+ int dropHeight = 0;
+ int newLine = currentLine;
+ while(newLine) {
+ if (!canMoveTo(currentPos,newLine - 1))
+ break;
+ newLine--;
+ dropHeight++;
+ }
+ if (dropHeight != 0)
+ moveTo(currentPos,newLine);
+ internalPieceDropped(dropHeight);
+}
+
+void GenericTetrix::oneLineDown()
+{
+ if (currentLine == -1)
+ return;
+ if (canMoveTo(currentPos,currentLine - 1)) {
+ moveTo(currentPos,currentLine - 1);
+ } else {
+ internalPieceDropped(0);
+ }
+}
+
+void GenericTetrix::newPiece()
+{
+ currentPiece = nextPiece;
+ if (showNext)
+ eraseNextPiece();
+ nextPiece.setRandomType();
+ if (showNext)
+ showNextPiece();
+ currentLine = height - 1 + currentPiece.getMinY();
+ currentPos = width/2 + 1;
+ if (!canMoveTo(currentPos,currentLine)) {
+ currentLine = -1;
+ gameOver();
+ } else {
+ showPiece();
+ }
+}
+
+void GenericTetrix::removePiece()
+{
+ erasePiece();
+ currentLine = -1;
+}
+
+void GenericTetrix::drawNextSquare(int,int,int)
+{
+
+}
+
+void GenericTetrix::pieceDropped(int)
+{
+ newPiece();
+}
+
+void GenericTetrix::updateRemoved(int)
+{
+}
+
+void GenericTetrix::updateScore(int)
+{
+}
+
+void GenericTetrix::updateLevel(int)
+{
+}
+
+void GenericTetrix::removeFullLines()
+{
+ int i,j,k;
+ int nFullLines;
+
+ for(i = 0 ; i < height - nClearLines ; i++) {
+ for(j = 0 ; j < width ; j++)
+ if (board(j,i) == 0)
+ break;
+ if (j == width) {
+ nFullLines = 1;
+ for(k = i + 1 ; k < height - nClearLines ; k++) {
+ for(j = 0 ; j < width ; j++)
+ if (board(j,k) == 0)
+ break;
+ if (j == width) {
+ nFullLines++;
+ } else {
+ for(j = 0 ; j < width ; j++) {
+ if (board(j,k - nFullLines) != board(j,k)) {
+ board(j,k - nFullLines) = board(j,k);
+ draw( j,k - nFullLines,
+ board(j,k - nFullLines));
+ }
+ }
+ }
+ }
+ nClearLines = nClearLines + nFullLines;
+ nLinesRemoved = nLinesRemoved + nFullLines;
+ updateRemoved(nLinesRemoved);
+ score = score + 10*nFullLines; // updateScore must be
+ // called by caller!
+ for (i = height - nClearLines ;
+ i < height - nClearLines + nFullLines ;
+ i++)
+ for(j = 0 ; j < width ; j++)
+ if (board(j,i) != 0) {
+ draw(j,i,0);
+ board(j,i) = 0;
+ }
+ }
+ }
+}
+
+void GenericTetrix::showPiece()
+{
+ int x,y;
+
+ if (currentLine == -1)
+ return;
+
+ for(int i = 0 ; i < 4 ; i++) {
+ currentPiece.getCoord(i,x,y);
+ draw(currentPos + x,currentLine - y,currentPiece.getType());
+ }
+}
+
+void GenericTetrix::erasePiece()
+{
+ int x,y;
+
+ if (currentLine == -1)
+ return;
+
+ for(int i = 0 ; i < 4 ; i++) {
+ currentPiece.getCoord(i,x,y);
+ draw(currentPos + x,currentLine - y,0);
+ }
+}
+
+void GenericTetrix::internalPieceDropped(int dropHeight)
+{
+ gluePiece();
+ nPiecesDropped++;
+ if (nPiecesDropped % 25 == 0) {
+ level++;
+ updateLevel(level);
+ }
+ score = score + 7 + dropHeight;
+ removeFullLines();
+ updateScore(score);
+ pieceDropped(dropHeight);
+}
+
+void GenericTetrix::gluePiece()
+{
+ int x,y;
+ int min;
+
+ if (currentLine == -1)
+ return;
+
+ for(int i = 0 ; i < 4 ; i++) {
+ currentPiece.getCoord(i,x,y);
+ board(currentPos + x,currentLine - y) = currentPiece.getType();
+ }
+ min = currentPiece.getMinY();
+ if (currentLine - min >= height - nClearLines)
+ nClearLines = height - currentLine + min - 1;
+}
+
+void GenericTetrix::showNextPiece(int erase)
+{
+ int x,y;
+ int minX = nextPiece.getMinX();
+ int minY = nextPiece.getMinY();
+ int maxX = nextPiece.getMaxX();
+ int maxY = nextPiece.getMaxY();
+
+ int xOffset = (3 - (maxX - minX))/2;
+ int yOffset = (3 - (maxY - minY))/2;
+
+ for(int i = 0 ; i < 4 ; i++) {
+ nextPiece.getCoord(i,x,y);
+ if (erase)
+ drawNextSquare(x + xOffset - minX,
+ y + yOffset - minY,0);
+ else
+ drawNextSquare(x + xOffset - minX,
+ y + yOffset - minY,nextPiece.getType());
+ }
+}
+
+int GenericTetrix::canPosition(TetrixPiece &piece)
+{
+ if (currentLine == -1)
+ return 0;
+
+ int x,y;
+
+ for(int i = 0 ; i < 4 ; i++) {
+ piece.getCoord(i,x,y);
+ x = currentPos + x;
+ y = currentLine - y; // Board and pieces have inverted y-coord. systems.
+ if (x < 0 || x >= width || y < 0 || y >= height)
+ return 0; // Outside board, cannot put piece here.
+ if (board(x,y) != 0)
+ return 0; // Over a non-zero square, cannot put piece here.
+ }
+ return 1; // Inside board and no non-zero squares underneath.
+
+}
+
+int GenericTetrix::canMoveTo(int xPosition,int line)
+{
+ if (currentLine == -1)
+ return 0;
+
+ int x,y;
+
+ for(int i = 0 ; i < 4 ; i++) {
+ currentPiece.getCoord(i,x,y);
+ x = xPosition + x;
+ y = line - y; // Board and pieces have inverted y-coord. systems.
+ if (x < 0 || x >= width || y < 0 || y >= height)
+ return 0; // Outside board, cannot put piece here.
+ if (board(x,y) != 0)
+ return 0; // Over a non-zero square, cannot put piece here.
+ }
+ return 1; // Inside board and no non-zero squares underneath.
+}
+
+void GenericTetrix::moveTo(int xPosition,int line)
+{
+ if (currentLine == -1)
+ return;
+ optimizedMove(xPosition,line,currentPiece);
+ currentPos = xPosition;
+ currentLine = line;
+}
+
+void GenericTetrix::position(TetrixPiece &piece)
+{
+ if (currentLine == -1)
+ return;
+
+ optimizedMove(currentPos,currentLine,piece);
+}
+
+void GenericTetrix::optimizedMove(int newPos, int newLine,
+ TetrixPiece &newPiece)
+{
+ int updates [8][3];
+ int nUpdates;
+ int value;
+ int x,y;
+ int i,j;
+
+ for(i = 0 ; i < 4 ; i++) { // Put the erasing coords into updates
+ currentPiece.getCoord(i,x,y);
+ updates[i][0] = currentPos + x;
+ updates[i][1] = currentLine - y;
+ updates[i][2] = 0;
+ }
+ nUpdates = 4;
+ for(i = 0 ; i < 4 ; i++) { // Any drawing coord same as an erasing one?
+ newPiece.getCoord(i,x,y);
+ x = newPos + x;
+ y = newLine - y;
+ for (j = 0 ; j < 4 ; j++)
+ if (updates[j][0] == x && updates[j][1] == y) { // Same coord,
+ // don't have to erase
+ if (currentPiece.getType() == newPiece.getType())
+ updates[j][2] = -1; // Correct on screen, no update!
+ else
+ updates[j][2] = newPiece.getType();
+ break;
+ }
+ if (j == 4) { // This coord does not overlap an erasing one
+ updates[nUpdates][0] = x;
+ updates[nUpdates][1] = y;
+ updates[nUpdates][2] = newPiece.getType();
+ nUpdates++;
+ }
+ }
+ for (i = 0 ; i < nUpdates ; i++) { // Do the updating
+ x = updates[i][0];
+ y = updates[i][1];
+ value = updates[i][2];
+ if (value != -1) // Only update if new value != current
+ draw(x,y,value);
+ }
+}
diff --git a/noncore/games/tetrix/gtetrix.h b/noncore/games/tetrix/gtetrix.h
new file mode 100644
index 0000000..520dd89
--- a/dev/null
+++ b/noncore/games/tetrix/gtetrix.h
@@ -0,0 +1,104 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef GTETRIX_H
+#define GTETRIX_H
+
+#include "tpiece.h"
+
+
+class GenericTetrix
+{
+public:
+ GenericTetrix(int boardWidth = 10,int boardHeight = 22);
+ virtual ~GenericTetrix();
+
+ void clearBoard(int fillRandomLines = 0);
+ void revealNextPiece(int revealIt);
+ void updateBoard(int x1,int y1,int x2,int y2,int dontUpdateBlanks = 0);
+ void updateNext(){if (showNext) showNextPiece();}
+ void hideBoard();
+ void showBoard();
+ void fillRandom(int line);
+
+ void moveLeft(int steps = 1);
+ void moveRight(int steps = 1);
+ void rotateLeft();
+ void rotateRight();
+ void dropDown();
+ void oneLineDown();
+ void newPiece();
+ void removePiece();
+
+ int noOfClearLines() {return nClearLines;}
+ int getLinesRemoved() {return nLinesRemoved;}
+ int getPiecesDropped() {return nPiecesDropped;}
+ int getScore() {return score;}
+ int getLevel() {return level;}
+ int boardHeight() {return height;}
+ int boardWidth() {return width;}
+
+ virtual void drawSquare(int x,int y,int value) = 0;
+ virtual void gameOver() = 0;
+
+ virtual void startGame(int gameType = 0,int fillRandomLines = 0);
+ virtual void drawNextSquare(int x,int y,int value);
+ virtual void pieceDropped(int dropHeight);
+ virtual void updateRemoved(int noOfLines);
+ virtual void updateScore(int newScore);
+ virtual void updateLevel(int newLevel);
+
+private:
+ void draw(int x, int y, int value){drawSquare(x,height - y,value);}
+ void removeFullLines();
+ void removeLine(int line);
+ void showPiece();
+ void erasePiece();
+ void internalPieceDropped(int dropHeight);
+ void gluePiece();
+ void showNextPiece(int erase = 0);
+ void eraseNextPiece(){showNextPiece(1);};
+ int canPosition(TetrixPiece &piece); // Returns a boolean value.
+ int canMoveTo(int xPosition, int line); // Returns a boolean value.
+ void moveTo(int xPosition,int line);
+ void position(TetrixPiece &piece);
+ void optimizedMove(int newPos, int newLine,TetrixPiece &newPiece);
+
+ int &board(int x,int y){return boardPtr[width*y + x];}
+
+ TetrixPiece currentPiece;
+ TetrixPiece nextPiece;
+ int currentLine;
+ int currentPos;
+ int showNext; // Boolean variable.
+ int nLinesRemoved;
+ int nPiecesDropped;
+ int score;
+ int level;
+ int gameID;
+ int nClearLines;
+ int width;
+ int height;
+ int *boardPtr;
+};
+
+
+#endif
diff --git a/noncore/games/tetrix/main.cpp b/noncore/games/tetrix/main.cpp
new file mode 100644
index 0000000..e36d52d
--- a/dev/null
+++ b/noncore/games/tetrix/main.cpp
@@ -0,0 +1,33 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "qtetrix.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication a(argc,argv);
+
+ QTetrix *tetrix = new QTetrix;
+ a.showMainWidget(tetrix);
+
+ return a.exec();
+}
diff --git a/noncore/games/tetrix/qpe-tetrix.control b/noncore/games/tetrix/qpe-tetrix.control
new file mode 100644
index 0000000..46dfdf5
--- a/dev/null
+++ b/noncore/games/tetrix/qpe-tetrix.control
@@ -0,0 +1,10 @@
+Files: bin/tetrix apps/Games/tetrix.desktop
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Game: control falling blocks
+ A game for the Qtopia environment.
diff --git a/noncore/games/tetrix/qtetrix.cpp b/noncore/games/tetrix/qtetrix.cpp
new file mode 100644
index 0000000..f649894
--- a/dev/null
+++ b/noncore/games/tetrix/qtetrix.cpp
@@ -0,0 +1,170 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "qtetrix.h"
+
+#include <qpe/resource.h>
+
+#include <qapplication.h>
+#include <qlabel.h>
+#include <qdatetime.h>
+#include <qlayout.h>
+
+
+
+void drawTetrixButton( QPainter *p, int x, int y, int w, int h,
+ const QColor *color )
+{
+ QColor fc;
+ if ( color ) {
+ QPointArray a;
+ a.setPoints( 3, x,y+h-1, x,y, x+w-1,y );
+ p->setPen( color->light() );
+ p->drawPolyline( a );
+ a.setPoints( 3, x+1,y+h-1, x+w-1,y+h-1, x+w-1,y+1 );
+ p->setPen( color->dark() );
+ p->drawPolyline( a );
+ x++;
+ y++;
+ w -= 2;
+ h -= 2;
+ fc = *color;
+ }
+ else
+ fc = p->backgroundColor();
+ p->fillRect( x, y, w, h, fc );
+}
+
+
+ShowNextPiece::ShowNextPiece( QWidget *parent, const char *name )
+ : QFrame( parent, name )
+{
+ setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ xOffset = -1; // -1 until first resizeEvent.
+}
+
+void ShowNextPiece::resizeEvent( QResizeEvent *e )
+{
+ QSize sz = e->size();
+ blockWidth = (sz.width() - 3)/5;
+ blockHeight = (sz.height() - 3)/6;
+ xOffset = (sz.width() - 3)/5;
+ yOffset = (sz.height() - 3)/6;
+}
+
+
+void ShowNextPiece::paintEvent( QPaintEvent * )
+{
+ QPainter p( this );
+ drawFrame( &p );
+ p.end(); // explicit end() so any slots can paint too
+ emit update();
+}
+
+
+void ShowNextPiece::drawNextSquare(int x, int y,QColor *color)
+{
+ if (xOffset == -1) // Before first resizeEvent?
+ return;
+
+ QPainter paint;
+ paint.begin(this);
+ drawTetrixButton( &paint, xOffset+x*blockWidth, yOffset+y*blockHeight,
+ blockWidth, blockHeight, color );
+ paint.end();
+}
+
+
+QTetrix::QTetrix( QWidget *parent, const char *name, WFlags f )
+ : QMainWindow( parent, name, f )
+{
+ setIcon( Resource::loadPixmap( "tetrix_icon" ) );
+ setCaption( tr("Tetrix" ) );
+
+ QTime t = QTime::currentTime();
+ TetrixPiece::setRandomSeed( (((double)t.hour())+t.minute()+t.second())/
+ (24+60+60) );
+
+ QWidget *gameArea = new QWidget( this );
+ setCentralWidget( gameArea );
+
+ QGridLayout *gl = new QGridLayout( gameArea, 5, 3, 8 );
+
+ QLabel *l;
+ l = new QLabel( tr("Next"), gameArea );
+ gl->addWidget( l, 0, 0 );
+ showNext = new ShowNextPiece(gameArea);
+ showNext->setBackgroundColor(QColor(0,0,0));
+ gl->addWidget( showNext, 0, 1 );
+
+ l = new QLabel( tr("Score"), gameArea );
+ gl->addWidget( l, 1, 0 );
+ showScore = new QLabel(gameArea);
+ gl->addWidget( showScore, 1, 1 );
+ l = new QLabel( tr("Level"), gameArea );
+ gl->addWidget( l, 2, 0 );
+ showLevel = new QLabel(gameArea);
+ gl->addWidget( showLevel, 2, 1 );
+ l = new QLabel( tr("Removed"), gameArea );
+ gl->addWidget( l, 3, 0 );
+ showLines = new QLabel(gameArea);
+ gl->addWidget( showLines, 3, 1 );
+
+ board = new QTetrixBoard(gameArea);
+ board->setBackgroundColor(QColor(0,0,0));
+ board->setFixedWidth( 124 );
+ gl->addMultiCellWidget( board, 0, 4, 2, 2 );
+ gl->addColSpacing( 2, 100 );
+ gl->addColSpacing( 1, 35 );
+ gl->addRowSpacing( 0, 35 );
+
+ QPushButton *pb = new QPushButton( tr("Start"), gameArea );
+ pb->setFocusPolicy( NoFocus );
+ connect( pb, SIGNAL( clicked() ), board, SLOT( start() ) );
+ gl->addMultiCellWidget( pb, 4, 4, 0, 1 );
+
+ connect( board, SIGNAL(gameOverSignal()), SLOT(gameOver()) );
+ connect( board, SIGNAL(drawNextSquareSignal(int,int,QColor*)), showNext,
+ SLOT(drawNextSquare(int,int,QColor*)) );
+ connect( showNext, SIGNAL(update()), board, SLOT(updateNext()) );
+ connect( board, SIGNAL(updateScoreSignal(int)), showScore,
+ SLOT(setNum(int)) );
+ connect( board, SIGNAL(updateLevelSignal(int)), showLevel,
+ SLOT(setNum(int)));
+ connect( board, SIGNAL(updateRemovedSignal(int)), showLines,
+ SLOT(setNum(int)));
+
+ showScore->setNum( 0 );
+ showLevel->setNum( 0 );
+ showLines->setNum( 0 );
+ board->revealNextPiece(TRUE);
+ board->setFocusPolicy( StrongFocus );
+}
+
+void QTetrix::gameOver()
+{
+}
+
+
+void QTetrix::quit()
+{
+ close();
+}
diff --git a/noncore/games/tetrix/qtetrix.h b/noncore/games/tetrix/qtetrix.h
new file mode 100644
index 0000000..b6e058a
--- a/dev/null
+++ b/noncore/games/tetrix/qtetrix.h
@@ -0,0 +1,78 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef QTETRIX_H
+#define QTETRIX_H
+
+#include "qtetrixb.h"
+#include <qframe.h>
+#include <qlcdnumber.h>
+#include <qpushbutton.h>
+#include <qpainter.h>
+#include <qmainwindow.h>
+
+class QLabel;
+
+class ShowNextPiece : public QFrame
+{
+ Q_OBJECT
+ friend class QTetrix;
+public:
+ ShowNextPiece( QWidget *parent=0, const char *name=0 );
+public slots:
+ void drawNextSquare( int x, int y,QColor *color );
+signals:
+ void update();
+private:
+ void paintEvent( QPaintEvent * );
+ void resizeEvent( QResizeEvent * );
+
+ int blockWidth,blockHeight;
+ int xOffset,yOffset;
+};
+
+
+class QTetrix : public QMainWindow
+{
+ Q_OBJECT
+public:
+ QTetrix( QWidget *parent=0, const char *name=0, WFlags f=0 );
+ void startGame() { board->startGame(); }
+
+public slots:
+ void gameOver();
+ void quit();
+private:
+ void keyPressEvent( QKeyEvent *e ) { board->keyPressEvent(e); }
+
+ QTetrixBoard *board;
+ ShowNextPiece *showNext;
+ QLabel *showScore;
+ QLabel *showLevel;
+ QLabel *showLines;
+};
+
+
+void drawTetrixButton( QPainter *, int x, int y, int w, int h,
+ const QColor *color );
+
+
+#endif
diff --git a/noncore/games/tetrix/qtetrixb.cpp b/noncore/games/tetrix/qtetrixb.cpp
new file mode 100644
index 0000000..521f171
--- a/dev/null
+++ b/noncore/games/tetrix/qtetrixb.cpp
@@ -0,0 +1,251 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "qtetrixb.h"
+#include "qtetrix.h"
+#include <qtimer.h>
+#include <qkeycode.h>
+#include <qpainter.h>
+
+const int waitAfterLineTime = 500;
+
+QTetrixBoard::QTetrixBoard( QWidget *p, const char *name )
+ : QFrame( p, name )
+{
+ setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ paint = 0;
+ timer = new QTimer(this);
+ connect( timer, SIGNAL(timeout()), SLOT(timeout()) );
+
+ colors[0].setRgb(200,100,100);
+ colors[1].setRgb(100,200,100);
+ colors[2].setRgb(100,100,200);
+ colors[3].setRgb(200,200,100);
+ colors[4].setRgb(200,100,200);
+ colors[5].setRgb(100,200,200);
+ colors[6].setRgb(218,170, 0);
+
+ xOffset = -1; // -1 until a resizeEvent is received.
+ blockWidth = 20;
+ yOffset = 30;
+ blockHeight = 20;
+ noGame = TRUE;
+ isPaused = FALSE;
+ waitingAfterLine = FALSE;
+ updateTimeoutTime(); // Sets timeoutTime
+}
+
+void QTetrixBoard::startGame(int gameType,int fillRandomLines)
+{
+ if ( isPaused )
+ return; // ignore if game is paused
+ noGame = FALSE;
+ GenericTetrix::startGame( gameType, fillRandomLines );
+ // Note that the timer is started by updateLevel!
+}
+
+
+void QTetrixBoard::pause()
+{
+ if ( noGame ) // game not active
+ return;
+ isPaused = !isPaused;
+ if ( isPaused ) {
+ timer->stop();
+ hideBoard();
+ }
+ else
+ timer->start(timeoutTime);
+ update();
+}
+
+
+void QTetrixBoard::drawSquare(int x,int y,int value)
+{
+ if (xOffset == -1) // Before first resizeEvent?
+ return;
+
+ const int X = xOffset + x*blockWidth;
+ const int Y = yOffset + (y - 1)*blockHeight;
+
+ bool localPainter = paint == 0;
+ QPainter *p;
+ if ( localPainter )
+ p = new QPainter( this );
+ else
+ p = paint;
+ drawTetrixButton( p, X, Y, blockWidth, blockHeight,
+ value == 0 ? 0 : &colors[value-1] );
+ /*
+ if ( value != 0 ) {
+ QColor tc, bc;
+ tc = colors[value-1].light();
+ bc = colors[value-1].dark();
+ p->drawShadePanel( X, Y, blockWidth, blockHeight,
+ tc, bc, 1, colors[value-1], TRUE );
+ }
+ else
+ p->fillRect( X, Y, blockWidth, blockHeight, backgroundColor() );
+ */
+ if ( localPainter )
+ delete p;
+}
+
+void QTetrixBoard::drawNextSquare( int x, int y, int value )
+{
+ if ( value == 0 )
+ emit drawNextSquareSignal (x, y, 0 );
+ else
+ emit drawNextSquareSignal( x, y, &colors[value-1] );
+}
+
+void QTetrixBoard::updateRemoved( int noOfLines )
+{
+ if ( noOfLines > 0 ) {
+ timer->stop();
+ timer->start( waitAfterLineTime );
+ waitingAfterLine = TRUE;
+ }
+ emit updateRemovedSignal( noOfLines );
+}
+
+void QTetrixBoard::updateScore( int newScore )
+{
+ emit updateScoreSignal( newScore );
+}
+
+void QTetrixBoard::updateLevel( int newLevel )
+{
+ timer->stop();
+ updateTimeoutTime();
+ timer->start( timeoutTime );
+ emit updateLevelSignal( newLevel );
+}
+
+void QTetrixBoard::pieceDropped(int)
+{
+ if ( waitingAfterLine ) // give player a break if a line has been removed
+ return;
+ newPiece();
+}
+
+void QTetrixBoard::gameOver()
+{
+ timer->stop();
+ noGame = TRUE;
+ emit gameOverSignal();
+}
+
+void QTetrixBoard::timeout()
+{
+ if ( waitingAfterLine ) {
+ timer->stop();
+ waitingAfterLine = FALSE;
+ newPiece();
+ timer->start( timeoutTime );
+ } else {
+ oneLineDown();
+ }
+}
+
+void QTetrixBoard::drawContents( QPainter *p )
+{
+ const char *text = "Press \"Pause\"";
+ QRect r = contentsRect();
+ paint = p; // set widget painter
+ if ( isPaused ) {
+ p->drawText( r, AlignCenter | AlignVCenter, text );
+ return;
+ }
+ int x1,y1,x2,y2;
+ x1 = (r.left() - xOffset) / blockWidth;
+ if (x1 < 0)
+ x1 = 0;
+ if (x1 >= boardWidth())
+ x1 = boardWidth() - 1;
+
+ x2 = (r.right() - xOffset) / blockWidth;
+ if (x2 < 0)
+ x2 = 0;
+ if (x2 >= boardWidth())
+ x2 = boardWidth() - 1;
+
+ y1 = (r.top() - yOffset) / blockHeight;
+ if (y1 < 0)
+ y1 = 0;
+ if (y1 >= boardHeight())
+ y1 = boardHeight() - 1;
+
+ y2 = (r.bottom() - yOffset) / blockHeight;
+ if (y2 < 0)
+ y2 = 0;
+ if (y2 >= boardHeight())
+ y2 = boardHeight() - 1;
+
+ updateBoard( x1, y1, x2, y2, TRUE );
+ paint = 0; // reset widget painter
+ return;
+}
+
+void QTetrixBoard::resizeEvent(QResizeEvent *e)
+{
+ QSize sz = e->size();
+ blockWidth = (sz.width() - 2)/10;
+ blockHeight = (sz.height() - 2)/22;
+ xOffset = 1;
+ //yOffset = 1;
+ yOffset = (sz.height() - 2) - (blockHeight *22);
+}
+
+void QTetrixBoard::keyPressEvent( QKeyEvent *e )
+{
+ if ( noGame || isPaused || waitingAfterLine )
+ return;
+ switch( e->key() ) {
+ case Key_Left :
+ moveLeft();
+ break;
+ case Key_Right :
+ moveRight();
+ break;
+ case Key_Down :
+// rotateRight();
+ dropDown();
+ break;
+ case Key_Up :
+ rotateLeft();
+ break;
+ case Key_Space :
+ dropDown();
+ break;
+ case Key_D :
+ oneLineDown();
+ break;
+ default:
+ return;
+ }
+ e->accept();
+}
+
+void QTetrixBoard::updateTimeoutTime()
+{
+ timeoutTime = 1000/(1 + getLevel());
+}
diff --git a/noncore/games/tetrix/qtetrixb.h b/noncore/games/tetrix/qtetrixb.h
new file mode 100644
index 0000000..4134a84
--- a/dev/null
+++ b/noncore/games/tetrix/qtetrixb.h
@@ -0,0 +1,80 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef QTETRIXB_H
+#define QTETRIXB_H
+
+#include "gtetrix.h"
+#include <qframe.h>
+
+class QTimer;
+
+class QTetrixBoard : public QFrame, public GenericTetrix
+{
+ Q_OBJECT
+public:
+ QTetrixBoard( QWidget *parent=0, const char *name=0 );
+
+ void gameOver();
+ void startGame(int gameType = 0,int fillRandomLines = 0);
+
+public slots:
+ void timeout();
+ void updateNext() { GenericTetrix::updateNext(); }
+ void key(QKeyEvent *e) { keyPressEvent(e); }
+ void start() { startGame(); }
+ void pause();
+
+signals:
+ void gameOverSignal();
+ void drawNextSquareSignal(int x,int y,QColor *color1);
+ void updateRemovedSignal(int noOfLines);
+ void updateScoreSignal(int score);
+ void updateLevelSignal(int level);
+
+public: // until we have keyboard focus, should be protected
+ void keyPressEvent( QKeyEvent * );
+
+private:
+ void drawContents( QPainter * );
+ void resizeEvent( QResizeEvent * );
+ void drawSquare(int x,int y,int value);
+ void drawNextSquare(int x,int y,int value);
+ void updateRemoved(int noOfLines);
+ void updateScore(int newScore);
+ void updateLevel(int newLlevel);
+ void pieceDropped(int dropHeight);
+ void updateTimeoutTime();
+
+ QTimer *timer;
+
+ int xOffset,yOffset;
+ int blockWidth,blockHeight;
+ int timeoutTime;
+ bool noGame;
+ bool isPaused;
+ bool waitingAfterLine;
+
+ QColor colors[7];
+ QPainter *paint;
+};
+
+#endif
diff --git a/noncore/games/tetrix/tetrix.pro b/noncore/games/tetrix/tetrix.pro
new file mode 100644
index 0000000..1160585
--- a/dev/null
+++ b/noncore/games/tetrix/tetrix.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = ../bin
+HEADERS = minefield.h \
+ gtetrix.h \
+ qtetrix.h \
+ qtetrixb.h \
+ tpiece.h
+SOURCES = main.cpp \
+ gtetrix.cpp \
+ qtetrix.cpp \
+ qtetrixb.cpp \
+ tpiece.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES =
diff --git a/noncore/games/tetrix/tpiece.cpp b/noncore/games/tetrix/tpiece.cpp
new file mode 100644
index 0000000..fe8b766
--- a/dev/null
+++ b/noncore/games/tetrix/tpiece.cpp
@@ -0,0 +1,201 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "tpiece.h"
+#include "qstring.h"
+#include <stdlib.h>
+#include <time.h>
+
+void TetrixPiece::rotateLeft()
+{
+ if ( pieceType == 5 ) // don't rotate square piece type
+ return;
+ int tmp;
+ for (int i = 0 ; i < 4 ; i++) {
+ tmp = getXCoord(i);
+ setXCoord(i,getYCoord(i));
+ setYCoord(i,-tmp);
+ }
+}
+
+void TetrixPiece::rotateRight()
+{
+ if ( pieceType == 5 ) // don't rotate square piece type
+ return;
+ int tmp;
+ for (int i = 0 ; i < 4 ; i++) {
+ tmp = getXCoord(i);
+ setXCoord(i,-getYCoord(i));
+ setYCoord(i,tmp);
+ }
+}
+
+int TetrixPiece::getMinX()
+{
+ int tmp = coordinates[0][0];
+ for(int i = 1 ; i < 4 ; i++)
+ if (tmp > coordinates[i][0])
+ tmp = coordinates[i][0];
+ return tmp;
+}
+
+int TetrixPiece::getMaxX()
+{
+ int tmp = coordinates[0][0];
+ for(int i = 1 ; i < 4 ; i++)
+ if (tmp < coordinates[i][0])
+ tmp = coordinates[i][0];
+ return tmp;
+
+}
+
+int TetrixPiece::getMinY()
+{
+ int tmp = coordinates[0][1];
+ for(int i = 1 ; i < 4 ; i++)
+ if (tmp > coordinates[i][1])
+ tmp = coordinates[i][1];
+ return tmp;
+}
+
+int TetrixPiece::getMaxY()
+{
+ int tmp = coordinates[0][1];
+ for(int i = 1 ; i < 4 ; i++)
+ if (tmp < coordinates[i][1])
+ tmp = coordinates[i][1];
+ return tmp;
+}
+
+void TetrixPiece::initialize(int type)
+{
+ static int pieceTypes[7][4][2] = {{{ 0,-1},
+ { 0, 0},
+ {-1, 0},
+ {-1, 1}},
+
+ {{ 0,-1},
+ { 0, 0},
+ { 1, 0},
+ { 1, 1}},
+
+ {{ 0,-1},
+ { 0, 0},
+ { 0, 1},
+ { 0, 2}},
+
+ {{-1, 0},
+ { 0, 0},
+ { 1, 0},
+ { 0, 1}},
+
+ {{ 0, 0},
+ { 1, 0},
+ { 0, 1},
+ { 1, 1}},
+
+ {{-1,-1},
+ { 0,-1},
+ { 0, 0},
+ { 0, 1}},
+
+ {{ 1,-1},
+ { 0,-1},
+ { 0, 0},
+ { 0, 1}}};
+ if (type < 1 || type > 7)
+ type = 1;
+ pieceType = type;
+ for(int i = 0 ; i < 4 ; i++) {
+ coordinates[i][0] = pieceTypes[type - 1][i][0];
+ coordinates[i][1] = pieceTypes[type - 1][i][1];
+ }
+}
+
+
+/*
+ * Sigh, oh beautiful nostalgia! This random algorithm has
+ * been taken from the book "Adventures with your pocket calculator"
+ * and I used it in my first implemented and machine-
+ * run program of any size to speak of. Imagine how hungry I
+ * was after having programmed BASIC on paper for
+ * half a year?!!?!?!?!?!? The first program I typed in was a
+ * slot machine game and was made in BASIC on a SHARP
+ * PC-1211 with 1,47 KB RAM (one point four seven kilobytes) and
+ * a one-line LCD-display (I think it had 32 characters) in the
+ * year of our lord 1981. The man I had bought the machine from worked
+ * as a COBOL programmer and was amazed and impressed
+ * when I demonstrated the program 2 days after I had
+ * bought the machine, quote: "Gees, I have been looking so long
+ * for a "random" command in that BASIC, what is it called?"
+ * Oh, how I still get a thrill out of the thought of the
+ * explanation I then gave him...
+ */
+
+/*
+ * Sukk, aa vakre nostalgi! Denne random algoritmen er
+ * tatt fra boka "Adventures with your pocket calculator"
+ * og den brukte jeg i mitt foerste implementerte og maskin-
+ * kjoerte program av nevneverdig stoerrelse. Tror du jeg var
+ * noe sulten etter aa ha programmert BASIC paa papir i et
+ * halvt aar?!!?!?!?!?!? Programmet jeg tasta inn foerst var et
+ * "enarmet banditt" spill og ble laget i BASIC paa en SHARP
+ * PC-1211 med 1,47 KB RAM (en komma foertisju kilobyte) og
+ * et en-linjers LCD-display (tror det hadde 32 karakterer) i det
+ * herrens aar 1981. Mannen jeg kjoepte maskinen av jobbet til
+ * daglig med COBOL programmering og var forbloeffet og imponert
+ * da jeg demonstrerte programmet 2 dager etter at jeg hadde
+ * kjoept maskinen, sitat: "Joess, jeg som har leita saa lenge
+ * etter en random kommando i den BASICen, hva var det den
+ * het?" Aa, jeg frydes ennaa ved tanken paa forklaringen jeg
+ * deretter ga ham...
+ */
+
+double TetrixPiece::randomSeed = 0.33333;
+
+void TetrixPiece::setRandomSeed(double seed)
+{
+#ifdef __MIPSEL__
+ srand( clock() );
+#else
+ QCString buffer;
+ if (seed < 0)
+ seed = - seed;
+ if (seed >= 1)
+ seed = seed - (double) ((int) seed);
+ buffer.sprintf("%1.5f",(float) seed);
+ for (int i = 0 ; i < 5 ; i++)
+ if ((buffer[i + 2] - '0') % 2 == 0)
+ buffer[i + 2]++;
+ randomSeed = atof(buffer);
+#endif
+}
+
+int TetrixPiece::randomValue(int maxPlusOne)
+{
+#ifdef __MIPSEL__
+ return rand() % maxPlusOne;
+#else
+ randomSeed = randomSeed*147;
+ randomSeed = randomSeed - (double) ((int) randomSeed);
+ return (int) (randomSeed*maxPlusOne);
+#endif
+}
diff --git a/noncore/games/tetrix/tpiece.h b/noncore/games/tetrix/tpiece.h
new file mode 100644
index 0000000..9c1c629
--- a/dev/null
+++ b/noncore/games/tetrix/tpiece.h
@@ -0,0 +1,62 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#ifndef TPIECE_H
+#define TPIECE_H
+
+class TetrixPiece
+{
+public:
+ TetrixPiece() {setRandomType();}
+ TetrixPiece(int type) {initialize(type % 7 + 1);}
+
+ void setRandomType() {initialize(randomValue(7) + 1);}
+
+ void rotateLeft();
+ void rotateRight();
+
+ int getType() {return pieceType;}
+ int getXCoord(int index) {return coordinates[index][0];}
+ int getYCoord(int index) {return coordinates[index][1];}
+ void getCoord(int index,int &x,int&y){x = coordinates[index][0];
+ y = coordinates[index][1];}
+ int getMinX();
+ int getMaxX();
+ int getMinY();
+ int getMaxY();
+
+ static void setRandomSeed(double seed);
+ static int randomValue(int maxPlusOne);
+
+private:
+ void setXCoord(int index,int value) {coordinates[index][0] = value;}
+ void setYCoord(int index,int value) {coordinates[index][1] = value;}
+ void setCoords(int index,int x,int y){coordinates[index][0] = x;
+ coordinates[index][1] = y;}
+ void initialize(int type);
+
+ int pieceType;
+ int coordinates[4][2];
+
+ static double randomSeed;
+};
+
+#endif
diff --git a/noncore/games/wordgame/.cvsignore b/noncore/games/wordgame/.cvsignore
new file mode 100644
index 0000000..d498858
--- a/dev/null
+++ b/noncore/games/wordgame/.cvsignore
@@ -0,0 +1,6 @@
+moc_*
+Makefile
+newgamebase.h
+rulesbase.h
+newgamebase.cpp
+rulesbase.cpp
diff --git a/noncore/games/wordgame/Makefile.in b/noncore/games/wordgame/Makefile.in
new file mode 100644
index 0000000..5627414
--- a/dev/null
+++ b/noncore/games/wordgame/Makefile.in
@@ -0,0 +1,168 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = wordgame
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = wordgame.h
+SOURCES = main.cpp \
+ wordgame.cpp
+OBJECTS = main.o \
+ wordgame.o \
+ newgamebase.o \
+ rulesbase.o
+INTERFACES = newgamebase.ui \
+ rulesbase.ui
+UICDECLS = newgamebase.h \
+ rulesbase.h
+UICIMPLS = newgamebase.cpp \
+ rulesbase.cpp
+SRCMOC = moc_wordgame.cpp \
+ moc_newgamebase.cpp \
+ moc_rulesbase.cpp
+OBJMOC = moc_wordgame.o \
+ moc_newgamebase.o \
+ moc_rulesbase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake wordgame.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ wordgame.h \
+ newgamebase.h \
+ rulesbase.h \
+ $(QPEDIR)/include/qpe/qdawg.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+wordgame.o: wordgame.cpp \
+ wordgame.h \
+ newgamebase.h \
+ rulesbase.h \
+ $(QPEDIR)/include/qpe/qdawg.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/filemanager.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+newgamebase.h: newgamebase.ui
+ $(UIC) newgamebase.ui -o $(INTERFACE_DECL_PATH)/newgamebase.h
+
+newgamebase.cpp: newgamebase.ui
+ $(UIC) newgamebase.ui -i newgamebase.h -o newgamebase.cpp
+
+rulesbase.h: rulesbase.ui
+ $(UIC) rulesbase.ui -o $(INTERFACE_DECL_PATH)/rulesbase.h
+
+rulesbase.cpp: rulesbase.ui
+ $(UIC) rulesbase.ui -i rulesbase.h -o rulesbase.cpp
+
+newgamebase.o: newgamebase.cpp
+
+rulesbase.o: rulesbase.cpp
+
+moc_wordgame.o: moc_wordgame.cpp \
+ wordgame.h \
+ newgamebase.h \
+ rulesbase.h \
+ $(QPEDIR)/include/qpe/qdawg.h \
+ $(QPEDIR)/include/qpe/applnk.h
+
+moc_newgamebase.o: moc_newgamebase.cpp \
+ newgamebase.h
+
+moc_rulesbase.o: moc_rulesbase.cpp \
+ rulesbase.h
+
+moc_wordgame.cpp: wordgame.h
+ $(MOC) wordgame.h -o moc_wordgame.cpp
+
+moc_newgamebase.cpp: newgamebase.h
+ $(MOC) newgamebase.h -o moc_newgamebase.cpp
+
+moc_rulesbase.cpp: rulesbase.h
+ $(MOC) rulesbase.h -o moc_rulesbase.cpp
+
+
diff --git a/noncore/games/wordgame/calcdist b/noncore/games/wordgame/calcdist
new file mode 100755
index 0000000..faf31f1
--- a/dev/null
+++ b/noncore/games/wordgame/calcdist
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+
+# Usage: cat dictionaries | grep -v '[^a-z]' | calcdist n score
+#
+# Given a lot of words, find an appropriate distribution
+# into n tiles with tile values proportional to the square root
+# of the ratio of score to the tile's frequency.
+
+$n = shift;
+$score = shift;
+
+while (<>) {
+ chomp;
+ for $c ( split "", $_ ) {
+ $freq{$c}++;
+ $t++;
+ }
+}
+
+for $c ( sort { $freq{$a} <=> $freq{$b} } keys %freq ) {
+ #print "$c: $freq{$c}\n";
+ $need = int($freq{$c}*$n/$t+0.5) || 1;
+ $value = int(sqrt($score/($freq{$c}*$n/$t))+0.5) || 1;
+ $t -= $freq{$c};
+ $n -= $need;
+ print "$need $c $value\n";
+}
diff --git a/noncore/games/wordgame/main.cpp b/noncore/games/wordgame/main.cpp
new file mode 100644
index 0000000..cd4600e
--- a/dev/null
+++ b/noncore/games/wordgame/main.cpp
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "wordgame.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ WordGame mw;
+ //QPEApplication::setInputMethodHint( &mw, QPEApplication::AlwaysOff );
+ a.showMainWidget(&mw);
+
+ return a.exec();
+}
diff --git a/noncore/games/wordgame/newgamebase.ui b/noncore/games/wordgame/newgamebase.ui
new file mode 100644
index 0000000..3b6570b
--- a/dev/null
+++ b/noncore/games/wordgame/newgamebase.ui
@@ -0,0 +1,337 @@
+<!DOCTYPE UI><UI>
+<class>NewGameBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Form1</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>290</width>
+ <height>443</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Form1</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>8</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox1</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Players</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>7</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>2</number>
+ </property>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>AI3: Smart AI player</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>player0</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>AI3: Smart AI player</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>player1</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>AI3: Smart AI player</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>player2</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>AI3: Smart AI player</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>player3</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>AI3: Smart AI player</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>player4</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string></string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>AI3: Smart AI player</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>player5</cstring>
+ </property>
+ <property stdset="1">
+ <name>editable</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox2</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Rules</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>7</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>2</number>
+ </property>
+ <widget>
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>rules</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer1</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonOk</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Start</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/noncore/games/wordgame/qpe-wordgame.control b/noncore/games/wordgame/qpe-wordgame.control
new file mode 100644
index 0000000..2293f52
--- a/dev/null
+++ b/noncore/games/wordgame/qpe-wordgame.control
@@ -0,0 +1,10 @@
+Files: bin/wordgame apps/Games/wordgame.desktop
+Priority: optional
+Section: qpe/games
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Crossword game
+ A crossword game for the Qtopia environment.
+ Play against the computer or human opponents.
diff --git a/noncore/games/wordgame/rulesbase.ui b/noncore/games/wordgame/rulesbase.ui
new file mode 100644
index 0000000..31cc402
--- a/dev/null
+++ b/noncore/games/wordgame/rulesbase.ui
@@ -0,0 +1,274 @@
+<!DOCTYPE UI><UI>
+<class>RulesBase</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>RulesBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>283</width>
+ <height>264</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Game Rules</string>
+ </property>
+ <property stdset="1">
+ <name>sizeGripEnabled</name>
+ <bool>false</bool>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>gamename</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QGroupBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>GroupBox3</cstring>
+ </property>
+ <property stdset="1">
+ <name>title</name>
+ <string>Board</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>5</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>4</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Size:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>width</cstring>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>15</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>3</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>15</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QSpinBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>height</cstring>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>15</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>3</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>15</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>editboard</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Edit...</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QTable</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>tiletable</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonDelete</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Delete</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonOk</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;OK</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>default</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&amp;Cancel</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>RulesBase</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>RulesBase</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+</UI>
diff --git a/noncore/games/wordgame/wordgame.cpp b/noncore/games/wordgame/wordgame.cpp
new file mode 100644
index 0000000..ca4352d
--- a/dev/null
+++ b/noncore/games/wordgame/wordgame.cpp
@@ -0,0 +1,1476 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+
+#include "wordgame.h"
+
+#include <qpe/applnk.h>
+#include <qpe/global.h>
+#include <qpe/filemanager.h>
+#include <qpe/resource.h>
+#include <qpe/config.h>
+
+#include <qapplication.h>
+#include <qmessagebox.h>
+#include <qcombobox.h>
+#include <qdatetime.h>
+#include <qfileinfo.h>
+#include <qfile.h>
+#include <qdir.h>
+#include <qiconset.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qtextstream.h>
+#include <qtimer.h>
+#include <qpe/qpetoolbar.h>
+#include <qtoolbutton.h>
+#include <qvbox.h>
+#include <qwidgetstack.h>
+#include <qpainter.h>
+#include <qlayout.h>
+#include <qregexp.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <pwd.h>
+#include <sys/types.h>
+
+enum RuleEffects {
+ Multiplier=15,
+ MultiplyAll=64,
+ Start=128
+};
+
+static const int rack_tiles=7;
+
+const char* sampleWGR=
+ "wordgame_shapes\n"
+ "15 15\n"
+ "400001040100004\n"
+ "030000000000030\n"
+ "002002000200200\n"
+ "000300020003000\n"
+ "000020000020000\n"
+ "102001000100201\n"
+ "000000202000000\n"
+ "400200050002004\n"
+ "000000202000000\n"
+ "102001000100201\n"
+ "000020000020000\n"
+ "000300020003000\n"
+ "002002000200200\n"
+ "030000000000030\n"
+ "400001040100004\n"
+ "1 2 3 66 67 194 100 0\n"
+ "1 j 8\n"
+ "1 q 7\n"
+ "1 x 6\n"
+ "1 z 6\n"
+ "1 w 4\n"
+ "1 k 4\n"
+ "1 v 3\n"
+ "1 f 3\n"
+ "2 y 3\n"
+ "2 h 2\n"
+ "2 b 2\n"
+ "2 m 2\n"
+ "3 p 2\n"
+ "3 g 2\n"
+ "3 u 2\n"
+ "4 d 2\n"
+ "4 c 2\n"
+ "5 l 1\n"
+ "5 o 1\n"
+ "7 t 1\n"
+ "7 n 1\n"
+ "7 a 1\n"
+ "7 r 1\n"
+ "8 s 1\n"
+ "8 i 1\n"
+ "11 e 1\n"
+ "0\n";
+
+WordGame::WordGame( QWidget* parent, const char* name, WFlags fl ) :
+ QMainWindow(parent, name, fl)
+{
+ setIcon( Resource::loadPixmap( "wordgame" ) );
+ setCaption( tr("Word Game") );
+
+ setToolBarsMovable( FALSE );
+ vbox = new QVBox(this);
+
+ setCentralWidget(vbox);
+ toolbar = new QPEToolBar(this);
+ addToolBar(toolbar, Bottom);
+ reset = new QToolButton(Resource::loadPixmap("back"), tr("Back"), "", this, SLOT(resetTurn()), toolbar);
+ done = new QToolButton(Resource::loadPixmap("done"), tr("Done"), "", this, SLOT(endTurn()), toolbar);
+ scoreinfo = new ScoreInfo(toolbar);
+ scoreinfo->setFont(QFont("Helvetica",10));
+ new QToolButton(Resource::loadPixmap("finish"), tr("Close"), "", this, SLOT(endGame()), toolbar);
+ toolbar->setStretchableWidget(scoreinfo);
+
+ cpu = 0;
+ board = 0;
+ bag = 0;
+ racks = 0;
+
+ aiheart = new QTimer(this);
+ connect(aiheart, SIGNAL(timeout()), this, SLOT(think()));
+
+ readConfig();
+}
+
+WordGame::~WordGame()
+{
+ writeConfig();
+}
+
+void WordGame::writeConfig()
+{
+ Config cfg("WordGame");
+ cfg.setGroup("Game");
+ cfg.writeEntry("NameList",namelist,';');
+ cfg.writeEntry("CurrentPlayer",gameover ? 0 : player+1);
+ if ( !gameover ) {
+ cfg.writeEntry("Rules",rules);
+ bag->writeConfig(cfg);
+ board->writeConfig(cfg);
+ scoreinfo->writeConfig(cfg);
+ }
+ for (int p=0; p<nplayers; p++) {
+ cfg.setGroup("Player"+QString::number(p+1));
+ if ( gameover ) cfg.clearGroup(); else rack(p)->writeConfig(cfg);
+ }
+}
+
+void WordGame::readConfig()
+{
+ Config cfg("WordGame");
+ cfg.setGroup("Game");
+ int currentplayer = cfg.readNumEntry("CurrentPlayer",0);
+ QStringList pnames = cfg.readListEntry("NameList",';');
+ if ( currentplayer ) {
+ gameover = FALSE;
+ rules = cfg.readEntry("Rules");
+ if ( rules.find("x-wordgamerules") >= 0 ) {
+ // rules files moved
+ rules = "Sample.rules";
+ }
+ if ( loadRules(rules) ) {
+ startGame(pnames);
+ bag->readConfig(cfg);
+ board->readConfig(cfg);
+ scoreinfo->readConfig(cfg);
+ for (int p=0; p<nplayers; p++) {
+ cfg.setGroup("Player"+QString::number(p+1));
+ rack(p)->readConfig(cfg);
+ }
+ player=currentplayer-1;
+ readyRack(player);
+ return;
+ }
+ }
+ // fall-back
+ openGameSelector(pnames);
+}
+
+void WordGame::openGameSelector(const QStringList& initnames)
+{
+ toolbar->hide();
+ gameover = FALSE;
+
+ delete board;
+ board = 0;
+ delete racks;
+ racks = 0;
+
+ delete cpu;
+ cpu = 0;
+
+ newgame = new NewGame(vbox);
+
+ //Rules rules(this);
+ //connect(game.editrules, SIGNAL(clicked()), &rules, SLOT(editRules()));
+ //connect(&rules, SIGNAL(rulesChanged()), &game, SLOT(updateRuleSets()));
+ struct passwd* n = getpwuid(getuid());
+ QString playername = n ? n->pw_name : "";
+ if ( playername.isEmpty() ) {
+ playername = "Player";
+ }
+ newgame->player0->changeItem(playername,0);
+ newgame->player1->setCurrentItem(1);
+ newgame->updateRuleSets();
+ newgame->show();
+
+ connect(newgame->buttonOk, SIGNAL(clicked()), this, SLOT(startGame()));
+}
+
+void WordGame::startGame()
+{
+ rules = newgame->ruleslist[newgame->rules->currentItem()];
+ if ( loadRules(rules) ) {
+ QStringList names;
+ names.append(newgame->player0->currentText());
+ names.append(newgame->player1->currentText());
+ names.append(newgame->player2->currentText());
+ names.append(newgame->player3->currentText());
+ names.append(newgame->player4->currentText());
+ names.append(newgame->player5->currentText());
+ delete newgame;
+ startGame(names);
+ } else {
+ // error...
+ delete newgame;
+ close();
+ }
+}
+
+void WordGame::startGame(const QStringList& playerlist)
+{
+ toolbar->show();
+ racks = new QWidgetStack(vbox);
+ namelist.clear();
+ nplayers=0;
+ for (QStringList::ConstIterator it=playerlist.begin(); it!=playerlist.end(); ++it)
+ addPlayer(*it);
+ scoreinfo->init(namelist);
+
+ if ( nplayers ) {
+ player=0;
+ readyRack(player);
+ }
+
+ board->show();
+ racks->show();
+}
+
+bool WordGame::loadRules(const QString &name)
+{
+ QString filename = Global::applicationFileName( "wordgame", name );
+ QFile file( filename );
+ if ( !file.open( IO_ReadOnly ) )
+ return FALSE;
+
+ QTextStream ts( &file );
+
+ QString title = name;
+ title.truncate( title.length() - 6 );
+ setCaption( title );
+
+ QString shapepixmap;
+ ts >> shapepixmap;
+ int htiles,vtiles;
+ ts >> htiles >> vtiles;
+
+ if ( htiles < 3 || vtiles < 3 )
+ return FALSE;
+
+ QPixmap bgshapes = Resource::loadPixmap(shapepixmap);
+ QString rule_shapes;
+ for (int i=0; i<vtiles; i++) {
+ QString line;
+ ts >> line;
+ rule_shapes += line;
+ }
+ static int rule_effects[12];
+ int re=0,e;
+ ts >> e;
+ while ( e && re < 10 ) {
+ rule_effects[re] = e;
+ if ( re++ < 10 ) ts >> e;
+ }
+ rule_effects[re++] = 100; // default bonus
+ board = new Board(bgshapes, htiles, vtiles, vbox);
+ board->setRules(rule_shapes, rule_effects);
+ connect(board, SIGNAL(temporaryScore(int)), scoreinfo, SLOT(showTemporaryScore(int)));
+
+ bag = new Bag;
+
+ int count;
+ ts >> count;
+ while ( count ) {
+ QString text;
+ int value;
+ ts >> text >> value;
+ if ( text == "_" )
+ text = "";
+
+ Tile t(text, value);
+ for (int n=count; n--; )
+ bag->add(t);
+
+ ts >> count;
+ }
+
+ return TRUE;
+}
+
+
+NewGame::NewGame(QWidget* parent) :
+ NewGameBase(parent)
+{
+}
+
+void NewGame::updateRuleSets()
+{
+ rules->clear();
+
+ QString rulesDir = Global::applicationFileName( "wordgame", "" );
+ QDir dir( rulesDir, "*.rules" );
+ ruleslist = dir.entryList();
+ if ( ruleslist.isEmpty() ) {
+ // Provide a sample
+ QFile file( rulesDir + "Sample.rules" );
+ if ( file.open( IO_WriteOnly ) ) {
+ file.writeBlock( sampleWGR, strlen(sampleWGR) );
+ file.close();
+ updateRuleSets();
+ }
+ return;
+ }
+ int newest=0;
+ int newest_age=INT_MAX;
+ QDateTime now = QDateTime::currentDateTime();
+ QStringList::Iterator it;
+ for ( it = ruleslist.begin(); it != ruleslist.end(); ++it ) {
+ QFileInfo fi((*it));
+ int age = fi.lastModified().secsTo(now);
+ QString name = *it;
+ name.truncate( name.length()-6 ); // remove extension
+ rules->insertItem( name );
+ if ( age < newest_age ) {
+ newest_age = age;
+ newest = rules->count()-1;
+ }
+ }
+ rules->setCurrentItem(newest);
+}
+
+Rules::Rules(QWidget* parent) :
+ RulesBase(parent,0,TRUE)
+{
+}
+
+void Rules::editRules()
+{
+ if ( exec() ) {
+ // ### create a new set of rules
+ emit rulesChanged();
+ }
+}
+
+void Rules::deleteRuleSet()
+{
+ // ### delete existing rule set
+ emit rulesChanged();
+}
+
+void WordGame::addPlayer(const QString& name)
+{
+ if ( !name.isEmpty() ) {
+ int colon = name.find(':');
+ int cpu = (colon >=0 && name.left(2) == "AI") ? name.mid(2,1).toInt() : 0;
+ addPlayer(name,cpu);
+ }
+}
+
+void WordGame::addPlayer(const QString& name, int cpu)
+{
+ Rack* r = new Rack(rack_tiles,racks);
+ r->setPlayerName(name);
+ r->setComputerization(cpu);
+ racks->addWidget(r, nplayers);
+ refillRack(nplayers);
+ namelist.append(name);
+
+ ++nplayers;
+}
+
+void WordGame::nextPlayer()
+{
+ if ( !refillRack(player) ) {
+ endGame();
+ } else {
+ player = (player+1)%nplayers;
+ scoreinfo->setBoldOne(player);
+ readyRack(player);
+ }
+}
+
+bool WordGame::mayEndGame()
+{
+ int out=-1;
+ int i;
+ for (i=0; i<nplayers; i++)
+ if ( !rack(i)->count() )
+ out = i;
+ if ( out<0 ) {
+ if ( QMessageBox::warning(this,tr("End game"),
+ tr("Do you want to end the game early?"),
+ tr("Yes"), tr("No") )!=0 )
+ {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+void WordGame::endGame()
+{
+ if ( gameover ) {
+ close();
+ return;
+ }
+
+ if ( !mayEndGame() )
+ return;
+ int out=-1;
+ int totalleft=0;
+ int i;
+ for (i=0; i<nplayers; i++) {
+ Rack* r = rack(i);
+ int c = r->count();
+ if ( c ) {
+ int lose=0;
+ for ( int j=0; j<c; j++ )
+ lose += r->tileRef(j)->value();
+ totalleft += lose;
+ scoreinfo->addScore(i,-lose);
+ } else {
+ out = i;
+ }
+ }
+ int highest=0;
+ int winner=0;
+ for (i=0; i<nplayers; i++) {
+ int s = scoreinfo->playerScore(i);
+ if ( s > highest ) {
+ highest = s;
+ winner = i;
+ }
+ }
+ if ( out >= 0 )
+ scoreinfo->addScore(out,totalleft);
+ scoreinfo->setBoldOne(winner);
+ gameover = TRUE;
+ done->setEnabled(TRUE);
+ reset->setEnabled(FALSE);
+}
+
+void WordGame::endTurn()
+{
+ if ( gameover ) {
+ openGameSelector(namelist);
+ } else {
+ if ( board->checkTurn() ) {
+ if ( board->turnScore() >= 0 ) {
+ scoreinfo->addScore(player,board->turnScore());
+ board->finalizeTurn();
+ } else {
+ QApplication::beep();
+ }
+ nextPlayer();
+ }
+ }
+}
+
+void WordGame::resetTurn()
+{
+ board->resetRack();
+}
+
+void WordGame::passTurn()
+{
+ // ######## trade?
+ nextPlayer();
+}
+
+bool WordGame::refillRack(int i)
+{
+ Rack* r = rack(i);
+ while ( !bag->isEmpty() && !r->isFull() ) {
+ r->addTile(bag->takeRandom());
+ }
+ return r->count() != 0;
+}
+
+void WordGame::readyRack(int i)
+{
+ Rack* r = rack(i);
+ racks->raiseWidget(i);
+ board->setCurrentRack(r);
+
+ done->setEnabled( !r->computerized() );
+ reset->setEnabled( !r->computerized() );
+
+ if ( r->computerized() ) {
+ cpu = new ComputerPlayer(board, r);
+ aiheart->start(0);
+ }
+}
+
+Rack* WordGame::rack(int i) const
+{
+ return (Rack*)racks->widget(i);
+}
+
+void WordGame::think()
+{
+ if ( !cpu->step() ) {
+ delete cpu;
+ cpu = 0;
+ aiheart->stop();
+ if ( board->turnScore() < 0 )
+ passTurn();
+ else
+ endTurn();
+ }
+}
+
+ComputerPlayer::ComputerPlayer(Board* b, Rack* r) :
+ board(b), rack(r), best(new const Tile*[rack_tiles]),
+ best_blankvalues(new Tile[rack_tiles])
+{
+ best_score = -1;
+ across=FALSE;
+ dict=0;
+}
+
+ComputerPlayer::~ComputerPlayer()
+{
+ delete [] best;
+ delete [] best_blankvalues;
+}
+
+bool ComputerPlayer::step()
+{
+ const QDawg::Node* root = dict ? Global::dawg("WordGame").root()
+ : Global::fixedDawg().root();
+ QPoint d = across ? QPoint(1,0) : QPoint(0,1);
+ const Tile* tiles[99]; // ### max board size
+ uchar nletter[4095]; // QDawg only handles 0..4095
+ memset(nletter,0,4096);
+ for (int i=0; i<rack->count(); i++) {
+ const Tile* r = rack->tileRef(i);
+ if ( r->isBlank() )
+ nletter[0]++;
+ else
+ nletter[r->text()[0].unicode()]++;
+ }
+ Tile blankvalues[99]; // ### max blanks
+ findBest(current, d, root, 0, nletter, tiles, 0, blankvalues, 0);
+ if ( ++current.rx() == board->xTiles() ) {
+ current.rx() = 0;
+ if ( ++current.ry() == board->yTiles() ) {
+ if ( across ) {
+ if ( dict == 1 ) {
+ if ( best_score >= 0 ) {
+ rack->arrangeTiles(best,best_n);
+ rack->setBlanks(best_blankvalues);
+ board->scoreTurn(best_start, best_n, best_dir);
+ board->showTurn();
+ }
+ return FALSE;
+ }
+ dict++;
+ across = FALSE;
+ current = QPoint(0,0);
+ } else {
+ across = TRUE;
+ current = QPoint(0,0);
+ }
+ }
+ }
+ return TRUE;
+}
+
+void ComputerPlayer::findBest(QPoint at, const QPoint& d, const QDawg::Node* node, ulong used, uchar* nletter, const Tile** tiles, int n, Tile* blankvalues, int blused)
+{
+ if ( !node )
+ return;
+ QChar l = node->letter();
+ const Tile* cur = board->tile(at);
+ if ( cur ) {
+ if ( cur->text()[0] == l ) {
+ bool nextok = board->contains(at+d);
+ if ( node->isWord() && n && (!nextok || !board->tile(at+d)) )
+ noteChoice(tiles,n,d,blankvalues,blused);
+ if ( nextok )
+ findBest(at+d, d, node->jump(), used, nletter, tiles, n, blankvalues, blused);
+ // #### text()[1]...
+ }
+ } else {
+ if ( nletter[l.unicode()] || nletter[0] ) {
+ int rc = rack->count();
+ ulong msk = 1;
+ for ( int x=0; x<rc; x++ ) {
+ if ( !(used&msk) ) {
+ const Tile* t = rack->tileRef(x);
+ if ( t->isBlank() || t->text() == l ) { // #### multi-char value()s
+ bool nextok = board->contains(at+d);
+ tiles[n++] = t;
+ if ( t->isBlank() )
+ blankvalues[blused++] = Tile(l,0);
+ if ( node->isWord() && (!nextok || !board->tile(at+d)) )
+ noteChoice(tiles,n,d,blankvalues,blused);
+ used |= msk; // mark
+ nletter[t->text()[0].unicode()]--;
+ if ( nextok )
+ findBest(at+d, d, node->jump(), used, nletter, tiles, n, blankvalues, blused);
+ n--;
+ nletter[t->text()[0].unicode()]++;
+ if ( t->isBlank() ) {
+ // keep looking
+ blused--;
+ used &= ~msk; // unmark
+ } else {
+ break;
+ }
+ }
+ }
+ msk <<= 1;
+ }
+ }
+ // #### text()[1]...
+ }
+ findBest(at, d, node->next(), used, nletter, tiles, n, blankvalues, blused);
+}
+
+void ComputerPlayer::noteChoice(const Tile** tiles, int n, const QPoint& d, const Tile* blankvalues, int blused)
+{
+ int s = board->score(current, tiles, n, blankvalues, d, TRUE, 0);
+/*
+if (s>0 || current==QPoint(5,1)){
+QString st;
+for ( int i=0; i<n; i++ )
+ st += tiles[i]->text();
+qDebug("%d,%d: %s (%d) for %d",current.x(),current.y(),st.latin1(),n,s);
+}
+*/
+ if ( s > best_score ) {
+ int i;
+ for ( i=0; i<n; i++ )
+ best[i] = tiles[i];
+ for ( i=0; i<blused; i++ )
+ best_blankvalues[i] = blankvalues[i];
+ best_n = n;
+ best_blused = blused;
+ best_score = s;
+ best_dir = d;
+ best_start = current;
+ }
+}
+
+int TileItem::smallWidth()
+{
+ return 16;
+}
+
+int TileItem::smallHeight()
+{
+ return 16;
+}
+
+int TileItem::bigWidth()
+{
+ return 22;
+}
+
+int TileItem::bigHeight()
+{
+ return 22;
+}
+
+void TileItem::setState( State state )
+{
+ hide();
+ s = state;
+ show(); // ### use update() in Qt 3.0
+}
+
+void TileItem::setTile(const Tile& tile)
+{
+ hide();
+ t = tile;
+ show(); // ### use update() in Qt 3.0
+}
+
+void TileItem::setBig(bool b)
+{
+ big = b;
+}
+
+void TileItem::drawShape(QPainter& p)
+{
+ static QFont value_font("heletica",8);
+ static QFont big_font("smoothtimes",17);
+ static QFont small_font("smoothtimes",10);
+
+ QRect area(x(),y(),width(),height());
+ p.setBrush(s == Floating ? yellow/*lightGray*/ : white);
+ p.drawRect(area);
+ if ( big ) {
+ p.setFont(value_font);
+ QString n = QString::number(t.value());
+ int w = p.fontMetrics().width('1');
+ int h = p.fontMetrics().height();
+ w *= n.length();
+ QRect valuearea(x()+width()-w-2,y()+height()-h+1,w,h);
+ p.drawText(valuearea,AlignCenter,n);
+ p.setFont(big_font);
+ area = QRect(x(),y(),width()-2,height()-1);
+ } else {
+ p.setFont(small_font);
+ area = QRect(x(),y()+2,width(),height()-2);
+ }
+ if ( t.value() == 0 )
+ p.setPen(darkGray);
+ p.drawText(area,AlignCenter,t.text().upper());
+}
+
+Board::Board(QPixmap bgshapes, int w, int h, QWidget* parent) :
+ QCanvasView(new QCanvas(bgshapes,w,h, TileItem::smallWidth(), TileItem::smallHeight()),
+ parent)
+{
+ grid = new TileItem*[w*h];
+ memset(grid,0,w*h*sizeof(TileItem*));
+ setFrameStyle(0);
+ setHScrollBarMode(AlwaysOff);
+ setVScrollBarMode(AlwaysOff);
+ current_rack = 0;
+ shown_n = 0;
+}
+
+Board::~Board()
+{
+ delete canvas();
+}
+
+void Board::writeConfig(Config& cfg)
+{
+ QStringList t;
+ int n=canvas()->tilesHorizontally()*canvas()->tilesVertically();
+ for (int i=0; i<n; i++)
+ t.append( grid[i] ? grid[i]->tile().key() : QString(".") );
+ cfg.writeEntry("Board",t,';');
+}
+
+void Board::readConfig(Config& cfg)
+{
+ clear();
+ QStringList t = cfg.readListEntry("Board",';');
+ int i=0;
+ int h=canvas()->tilesHorizontally();
+ for (QStringList::ConstIterator it=t.begin(); it!=t.end(); ++it) {
+ if ( *it != "." ) {
+ QPoint p(i%h,i/h);
+ setTile(p,Tile(*it));
+ }
+ i++;
+ }
+ canvas()->update();
+}
+
+void Board::clear()
+{
+ int n=canvas()->tilesHorizontally()*canvas()->tilesVertically();
+ for (int i=0; i<n; i++) {
+ delete grid[i];
+ grid[i]=0;
+ }
+}
+
+
+void Board::setCurrentRack(Rack* r)
+{
+ turn_score = -1;
+ current_rack = r;
+}
+
+void Board::resetRack()
+{
+ unshowTurn();
+ canvas()->update();
+}
+
+void Board::contentsMousePressEvent(QMouseEvent* e)
+{
+ dragstart = e->pos();
+}
+
+void Board::contentsMouseMoveEvent(QMouseEvent* e)
+{
+ if ( current_rack && !current_rack->computerized() ) {
+ QPoint d = e->pos() - dragstart;
+ if ( d.x() <= 0 && d.y() <= 0 ) {
+ // None
+ resetRack();
+ } else {
+ int n;
+ QPoint start=boardPos(dragstart);
+ QPoint end=boardPos(e->pos());
+ QPoint diff=end-start;
+ QPoint dir;
+ if ( d.x() > d.y() ) {
+ n = diff.x()+1;
+ dir = QPoint(1,0);
+ } else {
+ n = diff.y()+1;
+ dir = QPoint(0,1);
+ }
+
+ unshowTurn();
+
+ // Subtract existing tiles from n
+ QPoint t = start;
+ for ( int i=n; i--; ) {
+ if ( contains(t) && tile(t) )
+ n--;
+ t += dir;
+ }
+
+ // Move start back to real start
+ while (contains(start-dir) && tile(start-dir))
+ start -= dir;
+
+ scoreTurn(start, n, dir);
+ showTurn();
+ }
+ }
+}
+
+void Board::finalizeTurn()
+{
+ int i=0;
+ QPoint at = shown_at;
+ while ( i<shown_n && contains(at) ) {
+ if ( item(at) && item(at)->state() == TileItem::Floating ) {
+ current_rack->remove(item(at)->tile());
+ setTileState(at,TileItem::Firm);
+ i++;
+ }
+ at += shown_step;
+ }
+ canvas()->update();
+}
+
+void Board::unshowTurn()
+{
+ int i=0;
+ QPoint at = shown_at;
+ while ( i<shown_n && i<current_rack->count() && contains(at) ) {
+ if ( item(at) && item(at)->state() == TileItem::Floating ) {
+ unsetTile(at);
+ i++;
+ }
+ at += shown_step;
+ }
+}
+
+void Board::showTurn()
+{
+ unshowTurn();
+ QPoint at = shown_at;
+ int i=0;
+ while ( i<shown_n && i<current_rack->count() && contains(at) ) {
+ if ( !tile(at) ) {
+ Tile t = current_rack->tile(i);
+ setTile(at,t);
+ setTileState(at,TileItem::Floating);
+ i++;
+ }
+ at += shown_step;
+ }
+ canvas()->update();
+}
+
+int Board::bonussedValue(const QPoint& at, int base, int& all_mult) const
+{
+ int rule = rule_shape[idx(at)]-'0';
+ int effect = rule_effect[rule];
+ int mult = effect&Multiplier;
+ if ( effect & MultiplyAll ) {
+ all_mult *= mult;
+ return base;
+ } else {
+ return base * mult;
+ }
+}
+
+bool Board::isStart(const QPoint& at) const
+{
+ int rule = rule_shape[idx(at)]-'0';
+ int effect = rule_effect[rule];
+ return effect&Start;
+}
+
+bool Board::checkTurn()
+{
+ if ( current_rack->computerized() )
+ return TRUE; // computer doesn't cheat, and has already set blanks.
+
+ QPoint at = shown_at;
+ int n = shown_n;
+ QPoint d = shown_step;
+ const Tile* tiles[99];
+ Tile blankvalues[99];
+ if ( n > current_rack->count() )
+ n = current_rack->count();
+
+ QDialog check(this,0,TRUE);
+ (new QVBoxLayout(&check))->setAutoAdd(TRUE);
+
+ QHBox mw(&check);
+ new QLabel(tr("Blanks: "),&mw);
+
+ int bl=0;
+ QLineEdit* le[99];
+ for (int i=0; i<n; i++) {
+ tiles[i] = current_rack->tileRef(i);
+ if ( tiles[i]->isBlank() ) {
+ QLineEdit *l = new QLineEdit(&mw);
+ le[bl++] = l;
+ l->setMaxLength(1);
+ l->setFixedSize(l->minimumSizeHint());
+ }
+ }
+
+ QHBox btns(&check);
+ connect(new QPushButton(tr("OK"),&btns), SIGNAL(clicked()), &check, SLOT(accept()));
+ connect(new QPushButton(tr("Cancel"),&btns), SIGNAL(clicked()), &check, SLOT(reject()));
+
+ if ( bl ) {
+retry:
+ if ( !check.exec() ) {
+ unshowTurn();
+ canvas()->update();
+ return FALSE;
+ }
+
+ for (int b=0; b<bl; b++) {
+ QString v = le[b]->text();
+ blankvalues[b]=Tile(v,0);
+ if ( v.length() != 1 )
+ goto retry;
+ }
+ }
+
+ QStringList words;
+ unshowTurn();
+ turn_score = score(at,tiles,n,blankvalues,d,FALSE,&words);
+ showTurn();
+ QStringList to_add;
+ for (QStringList::Iterator it=words.begin(); it!=words.end(); ++it) {
+ if ( !Global::fixedDawg().contains(*it)
+ && !Global::dawg("WordGame").contains(*it) ) {
+ switch (QMessageBox::warning(this, tr("Unknown word"),
+ tr("<p>The word \"%1\" is not in the dictionary.").arg(*it),
+ tr("Add"), tr("Ignore"), tr("Cancel")))
+ {
+ case 0:
+ // ####### add to wordgame dictionary
+ to_add.append(*it);
+ break;
+ case 1:
+ break;
+ case 2:
+ unshowTurn();
+ canvas()->update();
+ return FALSE;
+ }
+ }
+ }
+ if ( to_add.count() )
+ Global::addWords("WordGame",to_add);
+ return TRUE;
+}
+
+void Board::scoreTurn(const QPoint& at, int n, const QPoint& d)
+{
+ unshowTurn();
+ shown_at = at;
+ shown_n = n;
+ shown_step = d;
+ const Tile* tiles[99];
+ if ( n > current_rack->count() )
+ n = current_rack->count();
+ for (int i=0; i<n; i++)
+ tiles[i] = current_rack->tileRef(i);
+ turn_score = score(at,tiles,n,0,d,FALSE,0);
+ emit temporaryScore(turn_score);
+}
+
+int Board::score(QPoint at, const Tile** tiles, int n, const Tile* blankvalue, const QPoint& d, bool checkdict, QStringList* words) const
+{
+ int total=0;
+ int totalsidetotal=0;
+
+ // words gets filled with words made
+
+ // mainword==0 ->
+ // Checks side words, but not main word
+
+ // -1 means words not in dict, or illegally positioned (eg. not connected)
+
+ // text is assumed to fit on board.
+
+ if ( words ) *words=QStringList();
+
+ QPoint otherd(d.y(), d.x());
+
+ int all_mult = 1;
+ int bl=0;
+
+ bool connected = FALSE;
+
+ QString mainword="";
+
+ if ( contains(at-d) && tile(at-d) ) {
+ return -1; // preceeding tiles
+ }
+
+ const Tile* t;
+ for (int i=0; contains(at) && ((t=tile(at)) || i<n); ) {
+ if ( t ) {
+ if ( checkdict || words ) mainword += t->text();
+ total += t->value();
+ connected = TRUE;
+ } else {
+ QString sideword;
+ QString tt;
+ if ( tiles[i]->isBlank() ) {
+ if ( blankvalue )
+ tt = blankvalue[bl++].text();
+ } else {
+ tt = tiles[i]->text();
+ }
+ sideword=tt;
+ if ( checkdict || words ) mainword += tt;
+ int side_mult = 1;
+ int tilevalue = bonussedValue(at,tiles[i]->value(),side_mult);
+ all_mult *= side_mult;
+ if ( !connected && isStart(at) )
+ connected = TRUE;
+ total += tilevalue;
+ int sidetotal = tilevalue;
+ {
+ QPoint side = at-otherd;
+
+ while ( contains(side) && (t=tile(side)) ) {
+ sidetotal += t->value();
+ sideword.prepend(t->text());
+ side -= otherd;
+ }
+ }
+ {
+ QPoint side = at+otherd;
+ while ( contains(side) && (t=tile(side)) ) {
+ sidetotal += t->value();
+ sideword.append(t->text());
+ side += otherd;
+ }
+ }
+ if ( sideword.length() > 1 ) {
+ if ( words )
+ words->append(sideword);
+ if ( checkdict && !Global::fixedDawg().contains(sideword)
+ && !Global::dawg("WordGame").contains(sideword) )
+ return -1;
+ totalsidetotal += sidetotal * side_mult;
+ connected = TRUE;
+ }
+ i++;
+ }
+ at += d;
+ }
+
+ if ( words )
+ words->append(mainword);
+ if ( checkdict && !Global::fixedDawg().contains(mainword)
+ && !Global::dawg("WordGame").contains(mainword) )
+ return -1;
+
+ if ( n == rack_tiles )
+ totalsidetotal += rack_tiles_bonus;
+
+ return connected ? totalsidetotal + total * all_mult : -1;
+}
+
+QPoint Board::boardPos(const QPoint& p) const
+{
+ return QPoint(p.x()/canvas()->tileWidth(), p.y()/canvas()->tileHeight());
+}
+
+void Board::contentsMouseReleaseEvent(QMouseEvent*)
+{
+ if ( current_rack ) {
+ }
+}
+
+
+void Board::setRules(const QString& shapes, const int* effects)
+{
+ rule_shape=shapes; rule_effect=effects;
+ int i=0;
+ int maxre=0;
+ for (int y=0; y<yTiles(); y++) {
+ for (int x=0; x<xTiles(); x++) {
+ int re = shapes[i++]-'0';
+ if ( re > maxre ) maxre = re;
+ canvas()->setTile(x,y,re);
+ }
+ }
+ rack_tiles_bonus=effects[maxre+1];
+}
+
+void Board::unsetTile(const QPoint& p)
+{
+ delete item(p);
+ grid[idx(p)] = 0;
+}
+
+void Board::setTile(const QPoint& p, const Tile& t)
+{
+ TileItem* it=item(p);
+ if ( !it ) {
+ it = grid[idx(p)] = new TileItem(t,FALSE,canvas());
+ it->move(p.x()*canvas()->tileWidth(), p.y()*canvas()->tileHeight());
+ it->show();
+ } else {
+ it->setTile(t);
+ }
+}
+
+Rack::Rack(int ntiles, QWidget* parent) : QCanvasView(
+ new QCanvas(ntiles*TileItem::bigWidth(),TileItem::bigHeight()),
+ parent),
+ item(ntiles)
+{
+ setLineWidth(1);
+ setFixedHeight(sizeHint().height());
+ n = 0;
+ for (int i=0; i<ntiles; i++)
+ item[i]=0;
+ setHScrollBarMode(AlwaysOff);
+ setVScrollBarMode(AlwaysOff);
+ canvas()->setBackgroundColor(gray);
+ dragging = 0;
+}
+
+Rack::~Rack()
+{
+ clear();
+ delete canvas();
+}
+
+void Rack::clear()
+{
+ for (int i=0; i<n; i++)
+ delete item[i];
+ n=0;
+}
+
+void Rack::writeConfig(Config& cfg)
+{
+ QStringList l;
+ for (int i=0; i<n; i++)
+ l.append(tile(i).key());
+ cfg.writeEntry("Tiles",l,';');
+}
+
+void Rack::readConfig(Config& cfg)
+{
+ clear();
+ int x=0;
+ QStringList l = cfg.readListEntry("Tiles",';');
+ for (QStringList::ConstIterator it=l.begin(); it!=l.end(); ++it) {
+ TileItem *i = new TileItem(Tile(*it),TRUE,canvas());
+ i->move(x++,0);
+ i->show();
+ item[n++] = i;
+ }
+ layoutTiles();
+}
+
+static int cmp_tileitem(const void *a, const void *b)
+{
+ const TileItem* ia = *(TileItem**)a;
+ const TileItem* ib = *(TileItem**)b;
+ return int(ia->x() - ib->x());
+}
+
+void Rack::layoutTiles()
+{
+ int w = TileItem::bigWidth()+2;
+
+ if ( dragging ) dragging->moveBy(dragging_adj,0);
+ qsort(item.data(), n, sizeof(TileItem*), cmp_tileitem);
+ if ( dragging ) dragging->moveBy(-dragging_adj,0);
+
+ for (int i=0; i<n ;i++)
+ if ( item[i] == dragging ) {
+ item[i]->setZ(1);
+ } else {
+ item[i]->move(i*w, 0);
+ item[i]->setZ(0);
+ }
+ canvas()->update();
+}
+
+void Rack::setBlanks(const Tile* bv)
+{
+ for (int j=0; j<n; j++) {
+ Tile tt = item[j]->tile();
+ if ( tt.isBlank() ) {
+ tt.setText(bv->text());
+ item[j]->setTile(tt);
+ bv++;
+ }
+ }
+}
+
+bool Rack::arrangeTiles(const Tile** s, int sn)
+{
+ bool could = TRUE;
+ for (int j=0; j<n; j++) {
+ Tile tt = item[j]->tile();
+ int f=-1;
+ for (int i=0; i<sn && f<0; i++) {
+ if (s[i] && *s[i] == tt ) {
+ s[i]=0;
+ f=i;
+ }
+ }
+ if ( f >= 0 ) {
+ item[j]->move(f-999,0);
+ } else {
+ could = FALSE;
+ }
+ }
+ layoutTiles();
+ return could;
+}
+
+void Rack::addTile(const Tile& t)
+{
+ TileItem *i = new TileItem(t,TRUE,canvas());
+ i->show();
+ item[n++] = i;
+ layoutTiles();
+}
+
+void Rack::remove(Tile t)
+{
+ for (int i=0; i<n ;i++)
+ if ( item[i]->tile() == t ) {
+ remove(i);
+ return;
+ }
+}
+
+void Rack::remove(int i)
+{
+ delete item[i];
+ n--;
+ for (;i<n;i++)
+ item[i]=item[i+1];
+ layoutTiles();
+}
+
+void Rack::resizeEvent(QResizeEvent* e)
+{
+ canvas()->resize(width()-frameWidth()*2,height()-frameWidth()*2);
+ QCanvasView::resizeEvent(e);
+}
+
+void Rack::contentsMousePressEvent(QMouseEvent* e)
+{
+ if ( computerized() )
+ return;
+ QCanvasItemList list = canvas()->collisions(e->pos());
+ if (list.count()) {
+ dragging = list.first();
+ dragstart = e->pos()-QPoint(int(dragging->x()),int(dragging->y()));
+ } else {
+ dragging = 0;
+ }
+}
+
+void Rack::contentsMouseMoveEvent(QMouseEvent* e)
+{
+ if ( computerized() )
+ return;
+ //int w = TileItem::bigWidth()+2;
+ if ( dragging ) {
+ dragging_adj = TileItem::bigWidth()/2;
+ if ( dragging->x() > e->x()-dragstart.x() )
+ dragging_adj = -dragging_adj;
+ dragging->move(e->x()-dragstart.x(),0);
+ layoutTiles();
+ }
+}
+
+void Rack::contentsMouseReleaseEvent(QMouseEvent* e)
+{
+ if ( computerized() )
+ return;
+ if ( dragging ) {
+ dragging=0;
+ layoutTiles();
+ }
+}
+
+Tile::Tile(const QString& key)
+{
+ int a=key.find('@');
+ txt = key.left(a);
+ val = key.mid(a+1).toInt();
+ blank = txt.isEmpty();
+}
+
+QString Tile::key() const
+{
+ return txt+"@"+QString::number(val);
+}
+
+Bag::Bag()
+{
+ tiles.setAutoDelete(TRUE);
+}
+
+void Bag::writeConfig(Config& cfg)
+{
+ QStringList t;
+ for (QListIterator<Tile> it(tiles); it; ++it)
+ t.append((*it)->key());
+ cfg.writeEntry("Tiles",t,';');
+}
+
+void Bag::readConfig(Config& cfg)
+{
+ tiles.clear();
+ QStringList t = cfg.readListEntry("Tiles",';');
+ for (QStringList::ConstIterator it=t.begin(); it!=t.end(); ++it )
+ add(Tile(*it));
+}
+
+void Bag::add(const Tile& t)
+{
+ tiles.append(new Tile(t));
+}
+
+Tile Bag::takeRandom()
+{
+ Tile* rp = tiles.take(random()%tiles.count());
+ Tile r=*rp;
+ return r;
+}
+
+ScoreInfo::ScoreInfo( QWidget* parent, const char* name, WFlags fl ) :
+ QLabel("<P>",parent,name,fl)
+{
+ score=0;
+ msgtimer = new QTimer(this);
+ connect(msgtimer, SIGNAL(timeout()), this, SLOT(showScores()));
+ setBackgroundMode( PaletteButton );
+}
+
+ScoreInfo::~ScoreInfo()
+{
+ if ( score ) delete [] score;
+}
+
+void ScoreInfo::writeConfig(Config& cfg)
+{
+ QStringList l;
+ for (int i=0; i<(int)names.count(); i++)
+ l.append(QString::number(score[i]));
+ cfg.writeEntry("Scores",l,';');
+}
+
+void ScoreInfo::readConfig(Config& cfg)
+{
+ QStringList l = cfg.readListEntry("Scores",';');
+ int i=0;
+ for (QStringList::ConstIterator it=l.begin(); it!=l.end(); ++it )
+ score[i++]=(*it).toInt();
+ showScores();
+}
+
+
+QSize ScoreInfo::sizeHint() const
+{
+ return QSize(QLabel::sizeHint().width(),fontMetrics().height());
+}
+
+void ScoreInfo::init(const QStringList& namelist)
+{
+ names = namelist;
+ if ( score ) delete [] score;
+ score = new int[names.count()];
+ memset(score,0,sizeof(int)*names.count());
+ boldone = -1;
+ showScores();
+}
+
+void ScoreInfo::addScore(int player, int change)
+{
+ score[player] += change;
+ showScores();
+}
+
+void ScoreInfo::setBoldOne(int b)
+{
+ boldone=b;
+ showScores();
+}
+
+void ScoreInfo::showScores()
+{
+ QString r="<p>";
+ int i=0;
+ //int spl=(names.count()+1)/2; // 2 lines
+ for (QStringList::ConstIterator it=names.begin(); it!=names.end(); ) {
+ if ( i==boldone ) r += "<b>";
+ QString n = *it;
+ n.replace(QRegExp(":.*"),"");
+ r += n;
+ r += ":";
+ r += QString::number(score[i]);
+ if ( i==boldone ) r += "</b>";
+
+ ++i;
+ ++it;
+ if ( it != names.end() )
+ r += " ";
+ }
+ setText(r);
+}
+
+void ScoreInfo::showTemporaryScore(int amount)
+{
+ if ( amount < 0 )
+ setText(tr("<P>Invalid move"));
+ else
+ setText(tr("<P>Score: ")+QString::number(amount));
+ msgtimer->start(3000,TRUE);
+}
+
diff --git a/noncore/games/wordgame/wordgame.h b/noncore/games/wordgame/wordgame.h
new file mode 100644
index 0000000..0ffa56a
--- a/dev/null
+++ b/noncore/games/wordgame/wordgame.h
@@ -0,0 +1,376 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef WORDGAME_H
+#define WORDGAME_H
+
+#include "newgamebase.h"
+#include "rulesbase.h"
+
+#include <qpe/qdawg.h>
+#include <qpe/applnk.h>
+
+#include <qmainwindow.h>
+#include <qcanvas.h>
+#include <qlabel.h>
+
+class QVBox;
+class QLabel;
+class QWidgetStack;
+class QToolButton;
+class Config;
+
+class Tile {
+public:
+ Tile() {}
+
+ Tile(const Tile& t)
+ {
+ txt = t.txt;
+ val = t.val;
+ blank = t.blank;
+ }
+
+ Tile(QString text, int value)
+ {
+ txt = text;
+ val = value;
+ blank = txt.isEmpty();
+ }
+
+ Tile(const QString& key);
+
+ int value() const { return val; }
+ bool isBlank() const { return blank; }
+ QString text() const { return txt; }
+ void setText(const QString& t)
+ {
+ txt = t;
+ }
+
+ int operator==(const Tile& o) const
+ { return o.txt == txt && o.val == val && o.blank == blank; }
+ int operator!=(const Tile& o) const
+ { return !operator==(o); }
+ Tile& operator=(const Tile& o)
+ { txt=o.txt; val=o.val; blank=o.blank; return *this; }
+
+ QString key() const;
+
+private:
+ QString txt;
+ int val;
+ bool blank;
+};
+
+class Bag {
+public:
+ Bag();
+
+ void readConfig(Config&);
+ void writeConfig(Config&);
+
+ void add(const Tile&);
+ bool isEmpty() const { return tiles.isEmpty(); }
+ Tile takeRandom();
+private:
+ QList<Tile> tiles;
+};
+
+class TileItem : public QCanvasRectangle {
+public:
+ TileItem(const Tile& tile, bool b, QCanvas* c) :
+ QCanvasRectangle(0,0,
+ b?bigWidth():smallWidth(),
+ b?bigHeight():smallHeight(),c),
+ t(tile), big(b), s(Firm)
+ {
+ }
+
+ static int smallWidth();
+ static int smallHeight();
+ static int bigWidth();
+ static int bigHeight();
+
+ enum State { Firm, Floating };
+ void setState( State state );
+ State state() const { return s; }
+ const Tile& tile() const { return t; }
+ void setTile(const Tile&);
+ void setBig(bool);
+
+protected:
+ void drawShape(QPainter&);
+
+private:
+ Tile t;
+ bool big;
+ State s;
+};
+
+class Rack : public QCanvasView {
+public:
+ Rack(int ntiles, QWidget* parent);
+ ~Rack();
+
+ void readConfig(Config&);
+ void writeConfig(Config&);
+
+ bool isFull() const { return count()==max(); }
+ int max() const { return item.count(); }
+ int count() const { return n; }
+ void addTile(const Tile& t);
+ Tile tile(int i) const { return item[i]->tile(); }
+ const Tile* tileRef(int i) const { return &item[i]->tile(); }
+ void remove(int i);
+ void remove(Tile);
+ bool arrangeTiles(const Tile** s, int sn);
+ void setBlanks(const Tile*);
+
+ void setPlayerName(const QString& name) { nm = name; }
+ QString playerName() const { return nm; }
+ void setComputerization(int level) { cpu=level; }
+ bool computerized() const { return cpu>0; }
+
+protected:
+ void resizeEvent(QResizeEvent*e);
+ void contentsMousePressEvent(QMouseEvent*);
+ void contentsMouseMoveEvent(QMouseEvent*);
+ void contentsMouseReleaseEvent(QMouseEvent*);
+
+private:
+ void clear();
+ void layoutTiles();
+ int n;
+ QArray<TileItem*> item;
+ int dragging_adj;
+ QPoint dragstart;
+ QCanvasItem* dragging;
+ QString nm;
+ int cpu;
+};
+
+class Board : public QCanvasView {
+ Q_OBJECT
+public:
+ Board(QPixmap bgshapes, int w, int h, QWidget* parent);
+ ~Board();
+
+ void readConfig(Config&);
+ void writeConfig(Config&);
+
+ int xTiles() const { return canvas()->tilesHorizontally(); }
+ int yTiles() const { return canvas()->tilesVertically(); }
+
+ bool contains(const QPoint& p) const
+ { return p.x() >= 0 && p.y() >= 0
+ && p.x() < canvas()->tilesHorizontally()
+ && p.y() < canvas()->tilesVertically(); }
+ const Tile* tile(const QPoint& p) const
+ { TileItem* it=item(p); return it ? &it->tile() : 0; }
+
+ void setRules(const QString& shapes, const int* effects);
+
+ void clear();
+ void unsetTile(const QPoint& p);
+ void setTile(const QPoint& p, const Tile& t);
+
+ void setTileState(const QPoint& p, TileItem::State s)
+ {
+ TileItem* it=item(p);
+ if (it) it->setState(s);
+ }
+
+ void setCurrentRack(Rack*);
+ void resetRack();
+ void finalizeTurn();
+ void showTurn();
+ void scoreTurn(const QPoint& at, int n, const QPoint& d);
+ bool checkTurn();
+ int score(QPoint at, const Tile** tiles, int n,
+ const Tile* blankvalue,
+ const QPoint& d, bool ignoredict, QStringList* words) const;
+ int bonussedValue(const QPoint& at, int base, int& all_mult) const;
+ bool isStart(const QPoint& at) const;
+
+ int turnScore() const { return turn_score; }
+
+signals:
+ void temporaryScore(int);
+
+protected:
+ void contentsMousePressEvent(QMouseEvent*);
+ void contentsMouseMoveEvent(QMouseEvent*);
+ void contentsMouseReleaseEvent(QMouseEvent*);
+
+private:
+ int idx(const QPoint& p) const
+ { return p.x()+p.y()*canvas()->tilesHorizontally(); }
+ TileItem*& item(const QPoint& p) const
+ { return grid[idx(p)]; }
+ TileItem **grid;
+ QString rule_shape;
+ const int* rule_effect;
+ int rack_tiles_bonus;
+ Rack* current_rack;
+ QPoint boardPos(const QPoint&) const;
+ QPoint dragstart;
+ QPoint shown_at;
+ int shown_n;
+ QPoint shown_step;
+ void unshowTurn();
+ int turn_score;
+};
+
+class ComputerPlayer
+{
+ Board* board;
+ Rack* rack;
+
+ bool across;
+ int dict;
+ QPoint current;
+
+ const Tile** best;
+ int best_n;
+ Tile* best_blankvalues;
+ int best_blused;
+ int best_score;
+ QPoint best_dir;
+ QPoint best_start;
+
+public:
+ ComputerPlayer(Board* b, Rack* r);
+ ~ComputerPlayer();
+
+ bool step();
+
+private:
+ void findBest(QPoint at, const QPoint& d, const QDawg::Node* node, ulong used, uchar *nletter, const Tile** tiles, int n, Tile* blankvalues, int blused);
+ void noteChoice(const Tile** tiles, int n, const QPoint& d, const Tile* blankvalues, int blused);
+};
+
+class ScoreInfo : public QLabel {
+ Q_OBJECT
+public:
+ ScoreInfo( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~ScoreInfo();
+
+ void init(const QStringList&);
+ void addScore(int player, int change);
+ int playerScore(int player) const { return score[player]; }
+ void setShowWinner(bool);
+ void setBoldOne(int);
+
+ void readConfig(Config&);
+ void writeConfig(Config&);
+
+protected:
+ QSize sizeHint() const;
+
+public slots:
+ void showTemporaryScore(int amount);
+
+private slots:
+ void showScores();
+
+private:
+ QStringList names;
+ int *score;
+ QTimer* msgtimer;
+ bool showwinner;
+ int boldone;
+};
+
+class NewGame;
+
+class WordGame : public QMainWindow {
+ Q_OBJECT
+public:
+ WordGame( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~WordGame();
+
+private slots:
+ void endTurn();
+ void resetTurn();
+ void passTurn();
+ void think();
+ void endGame();
+ void startGame();
+
+private:
+ void writeConfig();
+ void readConfig();
+
+ void startGame(const QStringList& pnames);
+ bool mayEndGame();
+ void openGameSelector(const QStringList& initnames);
+ bool loadRules(const QString& filename);
+ void addPlayer(const QString& name);
+ void addPlayer(const QString& name, int cpu);
+ void nextPlayer();
+ bool refillRack(int i);
+ void readyRack(int i);
+ Rack* rack(int i) const;
+
+ QWidgetStack *racks;
+ QToolBar* toolbar;
+ QVBox *vbox;
+ Board *board;
+ Bag *bag;
+ ScoreInfo *scoreinfo;
+ QToolButton *done;
+ QToolButton *reset;
+ QTimer* aiheart;
+ ComputerPlayer *cpu;
+ int player;
+ int nplayers;
+ QStringList namelist;
+ bool gameover;
+ QString rules;
+ NewGame* newgame;
+};
+
+class NewGame : public NewGameBase {
+ Q_OBJECT
+public:
+ NewGame(QWidget* parent);
+ QStringList ruleslist;
+
+public slots:
+ void updateRuleSets();
+};
+
+class Rules : public RulesBase {
+ Q_OBJECT
+
+public:
+ Rules(QWidget* parent);
+
+signals:
+ void rulesChanged();
+
+public slots:
+ void editRules();
+
+private:
+ void deleteRuleSet();
+};
+
+#endif // WORDGAME_H
diff --git a/noncore/games/wordgame/wordgame.pro b/noncore/games/wordgame/wordgame.pro
new file mode 100644
index 0000000..7feacf9
--- a/dev/null
+++ b/noncore/games/wordgame/wordgame.pro
@@ -0,0 +1,13 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = wordgame.h
+SOURCES = main.cpp \
+ wordgame.cpp
+INTERFACES = newgamebase.ui rulesbase.ui
+TARGET = wordgame
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TRANSLATIONS = ../i18n/de/wordgame.ts
diff --git a/noncore/multimedia/showimg/.cvsignore b/noncore/multimedia/showimg/.cvsignore
new file mode 100644
index 0000000..f0a4beb
--- a/dev/null
+++ b/noncore/multimedia/showimg/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+moc_*
diff --git a/noncore/multimedia/showimg/Makefile.in b/noncore/multimedia/showimg/Makefile.in
new file mode 100644
index 0000000..9255b2d
--- a/dev/null
+++ b/noncore/multimedia/showimg/Makefile.in
@@ -0,0 +1,119 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = showimg
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = showimg.h
+SOURCES = main.cpp \
+ showimg.cpp
+OBJECTS = main.o \
+ showimg.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_showimg.cpp
+OBJMOC = moc_showimg.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake showimg.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=showimg
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ showimg.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+showimg.o: showimg.cpp \
+ showimg.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/fileselector.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h
+
+moc_showimg.o: moc_showimg.cpp \
+ showimg.h
+
+moc_showimg.cpp: showimg.h
+ $(MOC) showimg.h -o moc_showimg.cpp
+
+
diff --git a/noncore/multimedia/showimg/README b/noncore/multimedia/showimg/README
new file mode 100644
index 0000000..a6c9ca9
--- a/dev/null
+++ b/noncore/multimedia/showimg/README
@@ -0,0 +1,14 @@
+This example demonstrates how to read in and display images, and the
+conversion facilities available. The CuteWidget can read a file into
+a pixmap and resizes the displayed pixmap when the widget is resized.
+
+Note that the function CuteWidget::paintEvent uses the drawPixmap function
+of QPainter to display the pixmap, the bitBlt function can also be used to
+display pixmaps.
+
+If you have installed the Qt imageio extension (see extensions/imageio
+in your Qt directory), you can build using that extension.
+
+Some of the conversion options will have no effect, depending on the
+display hardware used. Generally, these are disabled.
+
diff --git a/noncore/multimedia/showimg/main.cpp b/noncore/multimedia/showimg/main.cpp
new file mode 100644
index 0000000..c28cc85
--- a/dev/null
+++ b/noncore/multimedia/showimg/main.cpp
@@ -0,0 +1,33 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "showimg.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication a( argc, argv );
+
+ ImageViewer w(0, "new window", Qt::WResizeNoErase );
+ a.showMainDocumentWidget(&w);
+
+ return a.exec();
+}
diff --git a/noncore/multimedia/showimg/qpe-showimg.control b/noncore/multimedia/showimg/qpe-showimg.control
new file mode 100644
index 0000000..8189048
--- a/dev/null
+++ b/noncore/multimedia/showimg/qpe-showimg.control
@@ -0,0 +1,10 @@
+Files: bin/showimg apps/Applications/showimg.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Image Viewer
+ The image viewer for the Qtopia environment. Supports
+ Whichever formats are compiled into Qt/Embedded (eg. PNG).
diff --git a/noncore/multimedia/showimg/showimg.cpp b/noncore/multimedia/showimg/showimg.cpp
new file mode 100644
index 0000000..c56994d
--- a/dev/null
+++ b/noncore/multimedia/showimg/showimg.cpp
@@ -0,0 +1,557 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+//
+// Full-screen and rotation options contributed by Robert Wittams <robert@wittams.com>
+//
+
+#include "showimg.h"
+
+#include <qpe/resource.h>
+#include <qpe/fileselector.h>
+#include <qpe/applnk.h>
+
+#include <qpe/qpemenubar.h>
+#include <qwidgetstack.h>
+#include <qpe/qpetoolbar.h>
+#include <qaction.h>
+#include <qfiledialog.h>
+#include <qmessagebox.h>
+#include <qpopupmenu.h>
+#include <qlabel.h>
+#include <qpainter.h>
+#include <qkeycode.h>
+#include <qapplication.h>
+#include <qclipboard.h>
+#include <qtimer.h>
+
+
+ImagePane::ImagePane( QWidget *parent=0 ) : QWidget( parent )
+{
+ vb = new QVBoxLayout( this );
+
+ image = new ImageWidget( this );
+ connect(image, SIGNAL( clicked() ), this, SLOT( imageClicked() ));
+
+ vb->addWidget( image );
+
+ status = new QLabel( this );
+ status->setFixedHeight( fontMetrics().height() + 4 );
+ vb->addWidget( status );
+}
+
+void ImagePane::setPixmap( const QPixmap &pm )
+{
+ image->setPixmap( pm );
+ image->repaint( false );
+}
+
+void ImagePane::imageClicked()
+{
+ emit clicked();
+}
+
+void ImagePane::showStatus()
+{
+ delete vb;
+ vb = new QVBoxLayout( this );
+ vb->addWidget( image );
+ status->show();
+ vb->addWidget( status );
+}
+
+
+void ImagePane::hideStatus()
+{
+ delete vb;
+ vb = new QVBoxLayout( this );
+ vb->addWidget( image );
+ status->hide();
+}
+
+//===========================================================================
+/*
+ Draws the portion of the scaled pixmap that needs to be updated
+*/
+
+void ImageWidget::paintEvent( QPaintEvent *e )
+{
+ QPainter painter(this);
+
+ painter.setClipRect(e->rect());
+ painter.setBrush( black );
+ painter.drawRect( 0, 0, width(), height() );
+
+ if ( pixmap.size() != QSize( 0, 0 ) ) { // is an image loaded?
+ painter.drawPixmap((width() - pixmap.width()) / 2, (height() - pixmap.height()) / 2, pixmap);
+ }
+}
+
+void ImageWidget::mouseReleaseEvent(QMouseEvent *)
+{
+ emit clicked();
+}
+
+
+//===========================================================================
+
+ImageViewer::ImageViewer( QWidget *parent, const char *name, int wFlags )
+ : QMainWindow( parent, name, wFlags ), filename( 0 ),
+ pickx( -1 ), picky( -1 ), clickx( -1 ), clicky( -1 ), bFromDocView( FALSE )
+{
+ setCaption( tr("Image Viewer") );
+ setIcon( Resource::loadPixmap( "ImageViewer" ) );
+
+ isFullScreen = FALSE;
+
+ setToolBarsMovable( FALSE );
+
+ toolBar = new QPEToolBar( this );
+ toolBar->setHorizontalStretchable( TRUE );
+
+ menubar = new QPEMenuBar( toolBar );
+
+ QStrList fmt = QImage::outputFormats();
+
+ QPopupMenu *edit = new QPopupMenu( menubar );
+ QPopupMenu *view = new QPopupMenu( menubar );
+
+ menubar->insertItem( "Edit", edit );
+ menubar->insertItem( "View", view );
+
+ edit->insertItem(tr("Horizontal flip"), this, SLOT(hFlip()), 0);
+ edit->insertItem(tr("Vertical flip"), this, SLOT(vFlip()), 0);
+
+ stack = new QWidgetStack( this );
+ stack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
+ setCentralWidget( stack );
+
+ imagePanel = new ImagePane( stack );
+ connect(imagePanel, SIGNAL(clicked()), this, SLOT(normalView()));
+
+ fileSelector = new FileSelector("image/*", stack, "fs");
+ fileSelector->setNewVisible(FALSE);
+ fileSelector->setCloseVisible(FALSE);
+ connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( closeFileSelector() ) );
+ connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( openFile( const DocLnk & ) ) );
+
+ toolBar = new QPEToolBar( this );
+
+ QAction *a;
+
+ a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( open() ) );
+ a->addTo( toolBar );
+
+ a = new QAction( tr( "Rotate 180" ), Resource::loadPixmap( "repeat" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( rot180() ) );
+ a->addTo( toolBar );
+ a->addTo( edit );
+
+ a = new QAction( tr( "Rotate 90"), Resource::loadPixmap( "rotate90" ), QString::null, 0, this, 0);
+ connect( a, SIGNAL( activated() ), this, SLOT( rot90() ) );
+ a->addTo( toolBar );
+ a->addTo( edit );
+
+ a = new QAction( tr( "Fullscreen" ), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), this, SLOT( fullScreen() ) );
+ a->addTo( toolBar );
+ a->addTo( view);
+
+ stack->raiseWidget( fileSelector );
+
+ setMouseTracking( TRUE );
+}
+
+ImageViewer::~ImageViewer()
+{
+ delete imagePanel; // in case it is fullscreen
+}
+
+void ImageViewer::setDocument(const QString& fileref)
+{
+ delayLoad = fileref;
+ stack->raiseWidget(imagePanel);
+ QTimer::singleShot( 0, this, SLOT(doDelayedLoad()) );
+}
+
+void ImageViewer::doDelayedLoad()
+{
+ show(delayLoad);
+}
+
+void ImageViewer::show()
+{
+ normalView();
+ QMainWindow::show();
+}
+
+void ImageViewer::show(const QString& fileref)
+{
+ bFromDocView = TRUE;
+ closeFileSelector();
+ DocLnk link(fileref);
+ if ( link.isValid() ) {
+ openFile(link);
+ } else {
+ filename = fileref;
+ updateCaption( fileref );
+ loadImage( fileref );
+ }
+}
+
+void ImageViewer::openFile( const DocLnk &file )
+{
+ closeFileSelector();
+ DocLnk link(file);
+ updateCaption( link.name() );
+ loadImage( link.file() );
+}
+
+void ImageViewer::open()
+{
+ stack->raiseWidget(fileSelector);
+}
+
+void ImageViewer::closeFileSelector()
+{
+ stack->raiseWidget(imagePanel);
+}
+
+void ImageViewer::updateCaption( QString name )
+{
+ int sep = name.findRev( '/' );
+ if ( sep >= 0 )
+ name = name.mid( sep+1 );
+ setCaption( name + tr(" - Image Viewer") );
+}
+
+/*
+ This function loads an image from a file.
+*/
+
+void ImageViewer::loadImage( const char *fileName )
+{
+ filename = fileName;
+ if ( filename ) {
+ QApplication::setOverrideCursor( waitCursor ); // this might take time
+ imagePanel->statusLabel()->setText( tr("Loading image...") );
+ qApp->processEvents();
+ bool ok = image.load(filename, 0);
+ pickx = -1;
+ clickx = -1;
+ if ( ok )
+ ok = reconvertImage();
+ if ( !ok ) {
+ pm.resize(0,0); // couldn't load image
+ update();
+ }
+ QApplication::restoreOverrideCursor(); // restore original cursor
+ }
+ updateStatus();
+ imagePanel->setPixmap( pmScaled );
+ stack->raiseWidget(imagePanel);
+}
+
+bool ImageViewer::loadSelected()
+{
+ bool ok = false;
+ if ( stack->visibleWidget() == fileSelector ) {
+ const DocLnk *link = fileSelector->selected();
+ if ( link ) {
+ if ( link->file() != filename ) {
+ updateCaption( link->name() );
+ filename = link->file();
+ imagePanel->statusLabel()->setText( tr("Loading image...") );
+ qApp->processEvents();
+ ok = image.load(filename, 0);
+ if ( ok )
+ ok = reconvertImage();
+ if ( !ok )
+ pm.resize(0,0);
+ }
+ }
+ }
+ if ( !image.isNull() ) {
+ ok = true;
+ closeFileSelector();
+ }
+
+ return ok;
+}
+
+bool ImageViewer::reconvertImage()
+{
+ bool success = FALSE;
+
+ if ( image.isNull() ) return FALSE;
+
+ QApplication::setOverrideCursor( waitCursor ); // this might take time
+ if ( pm.convertFromImage(image /*, conversion_flags */ ) )
+ {
+ pmScaled = QPixmap();
+ scale();
+ success = TRUE; // load successful
+ } else {
+ pm.resize(0,0); // couldn't load image
+ }
+ QApplication::restoreOverrideCursor(); // restore original cursor
+
+ return success; // TRUE if loaded OK
+}
+
+
+int ImageViewer::calcHeight()
+{
+ if ( !isFullScreen)
+ return height() - menubar->heightForWidth( width() )
+ - imagePanel->statusLabel()->height();
+ else
+ return qApp->desktop()->height();
+}
+/*
+ This functions scales the pixmap in the member variable "pm" to fit the
+ widget size and puts the resulting pixmap in the member variable "pmScaled".
+*/
+
+void ImageViewer::scale()
+{
+ int h = calcHeight();
+ if ( image.isNull() ) return;
+
+ QApplication::setOverrideCursor( waitCursor ); // this might take time
+ if ( width() == pm.width() && h == pm.height() ) { // no need to scale if widget
+ pmScaled = pm; // size equals pixmap size
+ } else {
+ double hs = (double)h / (double)image.height();
+ double ws = (double)width() / (double)image.width();
+ double scaleFactor = (hs > ws) ? ws : hs;
+ int smoothW = (int)(scaleFactor * image.width());
+ int smoothH = (int)(scaleFactor * image.height());
+
+ pmScaled.convertFromImage( image.smoothScale( smoothW, smoothH ) /*, conversion_flags */ );
+ }
+ QApplication::restoreOverrideCursor(); // restore original cursor
+}
+
+/*
+ The resize event handler, if a valid pixmap was loaded it will call
+ scale() to fit the pixmap to the new widget size.
+*/
+
+void ImageViewer::resizeEvent( QResizeEvent * )
+{
+ imagePanel->statusLabel()->setGeometry(0, height() - imagePanel->statusLabel()->height(),
+ width(), imagePanel->statusLabel()->height());
+
+ if ( pm.size() == QSize( 0, 0 ) ) // we couldn't load the image
+ return;
+
+ int h = calcHeight();
+
+ if ( width() != pmScaled.width() || h != pmScaled.height())
+ { // if new size,
+ scale(); // scale pmScaled to window
+ updateStatus();
+ }
+ if ( image.hasAlphaBuffer() )
+ erase();
+}
+
+void ImageViewer::convertEvent( QMouseEvent* e, int& x, int& y)
+{
+ if ( pm.size() != QSize( 0, 0 ) ) {
+ int h = height() - menubar->heightForWidth( width() ) - imagePanel->statusLabel()->height();
+ int nx = e->x() * image.width() / width();
+ int ny = (e->y()-menubar->heightForWidth( width() )) * image.height() / h;
+ if (nx != x || ny != y ) {
+ x = nx;
+ y = ny;
+ updateStatus();
+ }
+ }
+}
+
+void ImageViewer::mousePressEvent( QMouseEvent *e )
+{
+ convertEvent(e, clickx, clicky);
+}
+
+void ImageViewer::mouseMoveEvent( QMouseEvent *e )
+{
+ convertEvent( e, pickx, picky );
+}
+
+void ImageViewer::hFlip()
+{
+ if ( loadSelected() )
+ setImage(image.mirror(TRUE,FALSE));
+}
+
+void ImageViewer::vFlip()
+{
+ if ( loadSelected() )
+ setImage(image.mirror(FALSE,TRUE));
+}
+
+void ImageViewer::rot180()
+{
+ if ( loadSelected() )
+ setImage(image.mirror(TRUE,TRUE));
+}
+
+void ImageViewer::rot90()
+{
+ if ( loadSelected() ) {
+ QImage oldimage, newimage;
+ uchar *oldbits, *newbits;
+ int i, j, p;
+ int w, h;
+
+ oldimage = image.convertDepth(32);
+ w = oldimage.height();
+ h = oldimage.width();
+ newimage = QImage( w, h, 32);
+
+ oldbits = oldimage.bits();
+ newbits = newimage.bits();
+
+ for (i=0; i < w ; i++)
+ for (j=0; j < h; j++)
+ for (p = 0 ; p < 4 ; p++)
+ newbits[(j * w + i) * 4 + p] = oldbits[ ((i + 1) * h - j ) * 4 + p];
+
+ setImage(newimage);
+ }
+}
+
+
+
+void ImageViewer::normalView()
+{
+ if ( !imagePanel->parentWidget() ) {
+ isFullScreen = FALSE;
+ stack->addWidget( imagePanel, 1 );
+// imagePanel->reparent(stack,0,QPoint(0,0),FALSE);
+// imagePanel->resize(width(), calcHeight());
+ scale();
+ updateStatus();
+ imagePanel->setPixmap( pmScaled );
+ imagePanel->showStatus();
+ // imagePanel->show();
+ stack->raiseWidget( imagePanel );
+ }
+}
+
+void ImageViewer::fullScreen()
+{
+ // Full-screen and rotation options
+ // contributed by Robert Wittams <robert@wittams.com>
+
+ if ( imagePanel->parentWidget() && loadSelected() ) {
+ isFullScreen = TRUE;
+ imagePanel->reparent(0,QPoint(0,0));
+ imagePanel->resize(qApp->desktop()->width(), qApp->desktop()->height());
+
+ scale();
+ updateStatus();
+ imagePanel->hideStatus();
+ imagePanel->setPixmap( pmScaled );
+ imagePanel->showFullScreen();
+ }
+}
+
+void ImageViewer::setImage(const QImage& newimage)
+{
+ image = newimage;
+ pickx = -1;
+ clickx = -1;
+ reconvertImage();
+ imagePanel->setPixmap( pmScaled );
+ updateStatus();
+}
+
+void ImageViewer::updateStatus()
+{
+ if ( pm.size() == QSize( 0, 0 ) ) {
+ if ( filename )
+ imagePanel->statusLabel()->setText( tr("Could not load image") );
+ else
+ imagePanel->statusLabel()->setText( tr("No image - select Open from File menu.") );
+ } else {
+ QString message("%1x%2");
+ message = message.arg(image.width()).arg(image.height());
+ if ( pm.size() != pmScaled.size() )
+ message += QString(" [%1x%2]").arg(pmScaled.width()).arg(pmScaled.height());
+ if (image.valid(pickx,picky)) {
+ QString moremsg;
+ moremsg.sprintf("(%d,%d)=#%0*x ",
+ pickx, picky,
+ image.hasAlphaBuffer() ? 8 : 6,
+ image.pixel(pickx,picky));
+ message += moremsg;
+ }
+ if ( image.numColors() > 0 ) {
+ if (image.valid(pickx,picky)) {
+ message += tr(", %1/%2 colors")
+ .arg(image.pixelIndex(pickx,picky))
+ .arg(image.numColors());
+ } else {
+ message += tr(", %1 colors").arg(image.numColors());
+ }
+ } else if ( image.depth() >= 16 ) {
+ message += tr(" True color");
+ }
+ if ( image.hasAlphaBuffer() ) {
+ if ( image.depth() == 8 ) {
+ int i;
+ bool alpha[256];
+ int nalpha=0;
+
+ for (i=0; i<256; i++)
+ alpha[i] = FALSE;
+
+ for (i=0; i<image.numColors(); i++) {
+ int alevel = image.color(i) >> 24;
+ if (!alpha[alevel]) {
+ alpha[alevel] = TRUE;
+ nalpha++;
+ }
+ }
+ message += tr(", %1 alpha levels").arg(nalpha);
+ } else {
+ // Too many pixels to bother counting.
+ message += tr(", 8-bit alpha channel");
+ }
+ }
+ imagePanel->statusLabel()->setText(message);
+ }
+}
+
+void ImageViewer::closeEvent( QCloseEvent *e )
+{
+ if ( stack->visibleWidget() == imagePanel && !bFromDocView ) {
+ e->ignore();
+ open();
+ } else {
+ bFromDocView = FALSE;
+ e->accept();
+ }
+}
diff --git a/noncore/multimedia/showimg/showimg.h b/noncore/multimedia/showimg/showimg.h
new file mode 100644
index 0000000..71003b1
--- a/dev/null
+++ b/noncore/multimedia/showimg/showimg.h
@@ -0,0 +1,143 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef SHOWIMG_H
+#define SHOWIMG_H
+
+#include <qwidget.h>
+#include <qmainwindow.h>
+#include <qimage.h>
+#include <qlabel.h>
+#include <qlayout.h>
+
+
+class QMenuBar;
+class QPopupMenu;
+class QWidgetStack;
+class FileSelector;
+class DocLnk;
+
+
+class ImageWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ ImageWidget( QWidget *parent=0 ) : QWidget( parent ) { }
+ ~ImageWidget() { }
+
+ void setPixmap( const QPixmap &pm ) { pixmap = pm; }
+
+signals:
+ void clicked();
+
+protected:
+ void paintEvent( QPaintEvent * );
+ void mouseReleaseEvent(QMouseEvent* event);
+
+private:
+ QPixmap pixmap;
+};
+
+
+class ImagePane : public QWidget
+{
+ Q_OBJECT
+public:
+ ImagePane( QWidget *parent=0 );
+ ~ImagePane() { }
+
+ void showStatus();
+ void hideStatus();
+ QLabel *statusLabel() { return status; }
+ void setPixmap( const QPixmap &pm );
+
+signals:
+ void clicked();
+
+private:
+ ImageWidget *image;
+ QLabel *status;
+ QVBoxLayout *vb;
+
+private slots:
+ void imageClicked();
+};
+
+
+class ImageViewer : public QMainWindow
+{
+ Q_OBJECT
+public:
+ ImageViewer( QWidget *parent=0, const char *name=0, int wFlags=0 );
+ ~ImageViewer();
+
+ void loadImage( const char *fileName );
+ void show(const QString& fileref);
+ void show();
+
+protected:
+ void resizeEvent( QResizeEvent * );
+ void mousePressEvent( QMouseEvent * );
+ void mouseMoveEvent( QMouseEvent * );
+ void closeEvent( QCloseEvent * );
+
+private:
+ void updateCaption( QString name );
+ bool loadSelected();
+ void scale();
+ void convertEvent( QMouseEvent* e, int& x, int& y );
+ bool reconvertImage();
+ int calcHeight();
+ void setImage(const QImage& newimage);
+ void updateStatus();
+
+private slots:
+ void setDocument(const QString& fileref);
+ void doDelayedLoad();
+ void openFile( const DocLnk &file );
+ void open();
+ void closeFileSelector();
+ void hFlip();
+ void vFlip();
+ void rot180();
+ void rot90();
+ void normalView();
+ void fullScreen();
+
+private:
+ QString filename;
+ QString delayLoad;
+ QImage image; // the loaded image
+ QPixmap pm; // the converted pixmap
+ QPixmap pmScaled; // the scaled pixmap
+ QMenuBar *menubar;
+ ImagePane *imagePanel;
+ QToolBar *toolBar;
+ QWidgetStack *stack;
+ FileSelector *fileSelector;
+ int pickx, picky;
+ int clickx, clicky;
+ bool isFullScreen;
+ bool bFromDocView; // a flag to indicate whether or not we were
+ // launched from the document view...
+};
+
+
+#endif // SHOWIMG_H
diff --git a/noncore/multimedia/showimg/showimg.pro b/noncore/multimedia/showimg/showimg.pro
new file mode 100644
index 0000000..a372f62
--- a/dev/null
+++ b/noncore/multimedia/showimg/showimg.pro
@@ -0,0 +1,19 @@
+TEMPLATE = app
+
+CONFIG += qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+
+HEADERS = showimg.h
+
+SOURCES = main.cpp \
+ showimg.cpp
+
+TARGET = showimg
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+REQUIRES = showimg
+
+TRANSLATIONS = ../i18n/de/showimg.ts
diff --git a/noncore/settings/.cvsignore b/noncore/settings/.cvsignore
new file mode 100644
index 0000000..e3d8c4b
--- a/dev/null
+++ b/noncore/settings/.cvsignore
@@ -0,0 +1,13 @@
+moc_*
+*.moc
+Makefile
+appearancesettingsbase.h
+soundsettingsbase.h
+lightsettingsbase.h
+languagesettingsbase.cpp
+rotationsettingsbase.cpp
+appearancesettingsbase.cpp
+lightsettingsbase.cpp
+languagesettingsbase.h
+rotationsettingsbase.h
+soundsettingsbase.cpp
diff --git a/noncore/settings/language/.cvsignore b/noncore/settings/language/.cvsignore
new file mode 100644
index 0000000..30ff791
--- a/dev/null
+++ b/noncore/settings/language/.cvsignore
@@ -0,0 +1,4 @@
+moc_*
+Makefile
+languagesettingsbase.h
+languagesettingsbase.cpp
diff --git a/noncore/settings/language/Makefile.in b/noncore/settings/language/Makefile.in
new file mode 100644
index 0000000..2babf6e
--- a/dev/null
+++ b/noncore/settings/language/Makefile.in
@@ -0,0 +1,135 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = language
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = settings.h
+SOURCES = language.cpp \
+ main.cpp
+OBJECTS = language.o \
+ main.o \
+ languagesettingsbase.o
+INTERFACES = languagesettingsbase.ui
+UICDECLS = languagesettingsbase.h
+UICIMPLS = languagesettingsbase.cpp
+SRCMOC = moc_settings.cpp \
+ moc_languagesettingsbase.cpp
+OBJMOC = moc_settings.o \
+ moc_languagesettingsbase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake language.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+language.o: language.cpp \
+ settings.h \
+ languagesettingsbase.h
+
+main.o: main.cpp \
+ settings.h \
+ languagesettingsbase.h
+
+languagesettingsbase.h: languagesettingsbase.ui
+ $(UIC) languagesettingsbase.ui -o $(INTERFACE_DECL_PATH)/languagesettingsbase.h
+
+languagesettingsbase.cpp: languagesettingsbase.ui
+ $(UIC) languagesettingsbase.ui -i languagesettingsbase.h -o languagesettingsbase.cpp
+
+languagesettingsbase.o: languagesettingsbase.cpp \
+ languagesettingsbase.h \
+ languagesettingsbase.ui
+
+moc_settings.o: moc_settings.cpp \
+ settings.h \
+ languagesettingsbase.h
+
+moc_languagesettingsbase.o: moc_languagesettingsbase.cpp \
+ languagesettingsbase.h
+
+moc_settings.cpp: settings.h
+ $(MOC) settings.h -o moc_settings.cpp
+
+moc_languagesettingsbase.cpp: languagesettingsbase.h
+ $(MOC) languagesettingsbase.h -o moc_languagesettingsbase.cpp
+
+
diff --git a/noncore/settings/language/language.cpp b/noncore/settings/language/language.cpp
new file mode 100644
index 0000000..397d372
--- a/dev/null
+++ b/noncore/settings/language/language.cpp
@@ -0,0 +1,150 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "settings.h"
+
+#include <qpe/global.h>
+#include <qpe/fontmanager.h>
+#include <qpe/config.h>
+#include <qpe/applnk.h>
+#include <qpe/qpedialog.h>
+#include <qpe/qpeapplication.h>
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+#include <qpe/qcopenvelope_qws.h>
+#endif
+
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+#include <qslider.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qdatastream.h>
+#include <qmessagebox.h>
+#include <qcombobox.h>
+#include <qspinbox.h>
+#include <qlistbox.h>
+#include <qdir.h>
+#if QT_VERSION >= 300
+#include <qstylefactory.h>
+#endif
+
+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
+#include <unistd.h>
+#include <linux/fb.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#endif
+#include <stdlib.h>
+
+
+LanguageSettings::LanguageSettings( QWidget* parent, const char* name, WFlags fl )
+ : LanguageSettingsBase( parent, name, TRUE, fl )
+{
+ if ( FontManager::hasUnicodeFont() )
+ languages->setFont(FontManager::unicodeFont(FontManager::Proportional));
+
+ QString tfn = QPEApplication::qpeDir()+"/i18n/";
+ QDir langDir = tfn;
+ QStringList list = langDir.entryList("*", QDir::Dirs );
+
+ QStringList::Iterator it;
+
+ for( it = list.begin(); it != list.end(); ++it ) {
+ QString name = (*it);
+ QFileInfo desktopFile( tfn + "/" + name + "/.directory" );
+ if( desktopFile.exists() ) {
+ langAvail.append(name);
+ Config conf( desktopFile.filePath(), Config::File );
+ QString langName = conf.readEntry( "Name" );
+ QString ownName = conf.readEntryDirect( "Name["+name+"]" );
+ if ( ownName.isEmpty() )
+ ownName = conf.readEntryDirect( "Name" );
+ if ( !ownName.isEmpty() && ownName != langName )
+ langName = langName + " [" + ownName + "]";
+ languages->insertItem( langName );
+
+ }
+ }
+
+ dl = new QPEDialogListener(this);
+ reset();
+}
+
+LanguageSettings::~LanguageSettings()
+{
+}
+
+void LanguageSettings::accept()
+{
+ applyLanguage();
+ QDialog::accept();
+}
+
+void LanguageSettings::applyLanguage()
+{
+ QString lang = langAvail.at( languages->currentItem() );
+ setLanguage( lang );
+}
+
+
+void LanguageSettings::reject()
+{
+ reset();
+ QDialog::reject();
+}
+
+void LanguageSettings::reset()
+{
+ QString l = getenv("LANG");
+ Config config("language");
+ l = config.readEntry( "Language", l );
+ if(l.isEmpty()) l = "en";
+ actualLanguage = l;
+
+ int n = langAvail.find( l );
+ languages->setCurrentItem( n );
+}
+
+QString LanguageSettings::actualLanguage;
+
+void LanguageSettings::setLanguage(const QString& lang)
+{
+ if( lang != actualLanguage ) {
+ Config config("locale");
+ config.setGroup( "Language" );
+ config.writeEntry( "Language", lang );
+ config.write();
+
+#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
+ QCopEnvelope e("QPE/System","language(QString)");
+ e << lang;
+#endif
+ }
+}
+
+void LanguageSettings::done(int r)
+{
+ QDialog::done(r);
+ close();
+}
diff --git a/noncore/settings/language/language.pro b/noncore/settings/language/language.pro
new file mode 100644
index 0000000..d1f1bf0
--- a/dev/null
+++ b/noncore/settings/language/language.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = ../../bin
+HEADERS = settings.h
+SOURCES = language.cpp main.cpp
+INTERFACES = languagesettingsbase.ui
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include
+LIBS += -lqpe
+TARGET = language
+
+TRANSLATIONS = ../../i18n/de/language.ts
diff --git a/noncore/settings/language/languagesettingsbase.ui b/noncore/settings/language/languagesettingsbase.ui
new file mode 100644
index 0000000..62bdafa
--- a/dev/null
+++ b/noncore/settings/language/languagesettingsbase.ui
@@ -0,0 +1,51 @@
+<!DOCTYPE UI><UI>
+<class>LanguageSettingsBase</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>LanguageSettingsBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>369</width>
+ <height>492</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Language</string>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Select language</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QListBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>languages</cstring>
+ </property>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/noncore/settings/language/main.cpp b/noncore/settings/language/main.cpp
new file mode 100644
index 0000000..a760ff3
--- a/dev/null
+++ b/noncore/settings/language/main.cpp
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "settings.h"
+
+#include <qpe/qpeapplication.h>
+
+
+int main(int argc, char** argv)
+{
+ QPEApplication a(argc,argv);
+
+ LanguageSettings dlg;
+
+ a.showMainWidget(&dlg);
+
+ return a.exec();
+}
+
diff --git a/noncore/settings/language/qpe-language.control b/noncore/settings/language/qpe-language.control
new file mode 100644
index 0000000..b33c947
--- a/dev/null
+++ b/noncore/settings/language/qpe-language.control
@@ -0,0 +1,9 @@
+Files: bin/language apps/Settings/Language.desktop
+Priority: optional
+Section: qpe/settings
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Language settings dialog
+ For the Qtopia environment.
diff --git a/noncore/settings/language/settings.h b/noncore/settings/language/settings.h
new file mode 100644
index 0000000..22cc987
--- a/dev/null
+++ b/noncore/settings/language/settings.h
@@ -0,0 +1,58 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef SETTINGS_H
+#define SETTINGS_H
+
+
+#include <qstrlist.h>
+#include <qasciidict.h>
+#include "languagesettingsbase.h"
+
+class QPEDialogListener;
+
+class LanguageSettings : public LanguageSettingsBase
+{
+ Q_OBJECT
+
+public:
+ LanguageSettings( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~LanguageSettings();
+
+protected:
+ void accept();
+ void reject();
+ void done(int);
+
+ QStrList langAvail;
+
+private slots:
+ void applyLanguage();
+ void reset();
+
+private:
+ static void setLanguage(const QString&);
+ static QString actualLanguage;
+
+ QPEDialogListener *dl;
+};
+
+
+#endif // SETTINGS_H
+
diff --git a/noncore/settings/sound/.cvsignore b/noncore/settings/sound/.cvsignore
new file mode 100644
index 0000000..ba1f2fe
--- a/dev/null
+++ b/noncore/settings/sound/.cvsignore
@@ -0,0 +1,5 @@
+Makefile
+moc_*
+*.moc
+soundsettingsbase.cpp
+soundsettingsbase.h
diff --git a/noncore/settings/sound/Makefile.in b/noncore/settings/sound/Makefile.in
new file mode 100644
index 0000000..1772e12
--- a/dev/null
+++ b/noncore/settings/sound/Makefile.in
@@ -0,0 +1,135 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = sound
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = soundsettings.h
+SOURCES = soundsettings.cpp \
+ main.cpp
+OBJECTS = soundsettings.o \
+ main.o \
+ soundsettingsbase.o
+INTERFACES = soundsettingsbase.ui
+UICDECLS = soundsettingsbase.h
+UICIMPLS = soundsettingsbase.cpp
+SRCMOC = moc_soundsettings.cpp \
+ moc_soundsettingsbase.cpp
+OBJMOC = moc_soundsettings.o \
+ moc_soundsettingsbase.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake sound.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+soundsettings.o: soundsettings.cpp \
+ soundsettings.h \
+ soundsettingsbase.h
+
+main.o: main.cpp \
+ soundsettings.h \
+ soundsettingsbase.h
+
+soundsettingsbase.h: soundsettingsbase.ui
+ $(UIC) soundsettingsbase.ui -o $(INTERFACE_DECL_PATH)/soundsettingsbase.h
+
+soundsettingsbase.cpp: soundsettingsbase.ui
+ $(UIC) soundsettingsbase.ui -i soundsettingsbase.h -o soundsettingsbase.cpp
+
+soundsettingsbase.o: soundsettingsbase.cpp \
+ soundsettingsbase.h \
+ soundsettingsbase.ui
+
+moc_soundsettings.o: moc_soundsettings.cpp \
+ soundsettings.h \
+ soundsettingsbase.h
+
+moc_soundsettingsbase.o: moc_soundsettingsbase.cpp \
+ soundsettingsbase.h
+
+moc_soundsettings.cpp: soundsettings.h
+ $(MOC) soundsettings.h -o moc_soundsettings.cpp
+
+moc_soundsettingsbase.cpp: soundsettingsbase.h
+ $(MOC) soundsettingsbase.h -o moc_soundsettingsbase.cpp
+
+
diff --git a/noncore/settings/sound/main.cpp b/noncore/settings/sound/main.cpp
new file mode 100644
index 0000000..5d28a8c
--- a/dev/null
+++ b/noncore/settings/sound/main.cpp
@@ -0,0 +1,36 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "soundsettings.h"
+
+#include <qpe/qpeapplication.h>
+
+
+int main(int argc, char** argv)
+{
+ QPEApplication a(argc,argv);
+
+ SoundSettings dlg;
+
+ a.showMainWidget(&dlg);
+
+ return a.exec();
+}
+
diff --git a/noncore/settings/sound/qpe-sound.control b/noncore/settings/sound/qpe-sound.control
new file mode 100644
index 0000000..f7f1c4f
--- a/dev/null
+++ b/noncore/settings/sound/qpe-sound.control
@@ -0,0 +1,10 @@
+Files: bin/sound apps/Settings/Sound.desktop
+Priority: optional
+Section: qpe/settings
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-1
+Depends: qpe-base ($QPE_VERSION)
+Description: Sound settings dialog
+ For the Qtopia environment.
diff --git a/noncore/settings/sound/sound.pro b/noncore/settings/sound/sound.pro
new file mode 100644
index 0000000..9028a44
--- a/dev/null
+++ b/noncore/settings/sound/sound.pro
@@ -0,0 +1,10 @@
+TEMPLATE = app
+CONFIG += qt warn_on release
+DESTDIR = ../../bin
+HEADERS = soundsettings.h
+SOURCES = soundsettings.cpp main.cpp
+INTERFACES = soundsettingsbase.ui
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += ../$(QPEDIR)/include
+LIBS += -lqpe
+TARGET = sound
diff --git a/noncore/settings/sound/soundsettings.cpp b/noncore/settings/sound/soundsettings.cpp
new file mode 100644
index 0000000..92281f8
--- a/dev/null
+++ b/noncore/settings/sound/soundsettings.cpp
@@ -0,0 +1,64 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "soundsettings.h"
+
+#include <qpe/config.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include <qslider.h>
+#include <qcheckbox.h>
+
+SoundSettings::SoundSettings( QWidget* parent, const char* name, WFlags fl )
+ : SoundSettingsBase( parent, name, TRUE, fl )
+{
+ Config config( "Sound" );
+
+ config.setGroup( "System" );
+ volume->setValue(100-config.readNumEntry("Volume"));
+ touchsound->setChecked(config.readBoolEntry("Touch"));
+ keysound->setChecked(config.readBoolEntry("Key"));
+
+ connect(volume, SIGNAL(valueChanged(int)), this, SLOT(setVolume(int)));
+}
+
+void SoundSettings::reject()
+{
+ Config config( "Sound" );
+ config.setGroup( "System" );
+ setVolume(100-config.readNumEntry("Volume"));
+
+ QDialog::reject();
+}
+
+void SoundSettings::accept()
+{
+ Config config( "Sound" );
+ config.setGroup( "System" );
+ config.writeEntry("Volume",100-volume->value());
+ config.writeEntry("Touch",touchsound->isChecked());
+ config.writeEntry("Key",keysound->isChecked());
+ setVolume(volume->value());
+ QDialog::accept();
+}
+
+void SoundSettings::setVolume(int v)
+{
+ QCopEnvelope( "QPE/System", "setVolume(int,int)" ) << 0 << 100-v;
+}
diff --git a/noncore/settings/sound/soundsettings.h b/noncore/settings/sound/soundsettings.h
new file mode 100644
index 0000000..b5c8cee
--- a/dev/null
+++ b/noncore/settings/sound/soundsettings.h
@@ -0,0 +1,44 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef SOUNDSETTINGS_H
+#define SOUNDSETTINGS_H
+
+
+#include "soundsettingsbase.h"
+
+
+class SoundSettings : public SoundSettingsBase
+{
+ Q_OBJECT
+
+public:
+ SoundSettings( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+
+protected:
+ void accept();
+ void reject();
+
+private slots:
+ void setVolume(int);
+};
+
+
+#endif // SOUNDSETTINGS_H
+
diff --git a/noncore/settings/sound/soundsettingsbase.ui b/noncore/settings/sound/soundsettingsbase.ui
new file mode 100644
index 0000000..1aa4545
--- a/dev/null
+++ b/noncore/settings/sound/soundsettingsbase.ui
@@ -0,0 +1,281 @@
+<!DOCTYPE UI><UI>
+<class>SoundSettingsBase</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>SoundSettingsBase</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>246</width>
+ <height>299</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Sound Settings</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>7</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>1</number>
+ </property>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>keysound</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Keyboard sound</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QCheckBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>touchsound</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Screen sound</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout10</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QSlider</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>volume</cstring>
+ </property>
+ <property stdset="1">
+ <name>maxValue</name>
+ <number>100</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>50</number>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>tickmarks</name>
+ <enum>Right</enum>
+ </property>
+ <property stdset="1">
+ <name>tickInterval</name>
+ <number>5</number>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout9</cstring>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout10_2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PixmapLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image0</pixmap>
+ </property>
+ <property stdset="1">
+ <name>scaledContents</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Loud</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer3_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer5_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Vertical</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout9_2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PixmapLabel2_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image1</pixmap>
+ </property>
+ <property stdset="1">
+ <name>scaledContents</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Silent</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54103b11c856360003105719c44d4b8371f590803210638829a38b2983115c2c112a8224969808d60716868a2582c440aa94a1628960a00755a5ac8c2aa64c8118c23c6cf6c2dda787e23eb03f602af1fa17395c6aadb9008c9350cb</data>
+ </image>
+ <image>
+ <name>image1</name>
+ <data format="XPM.GZ" length="409">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523234530022630543251d2e253d856405bffcbc54105b19c856360003103711c44d4b8371f5d000c962ca9862ca9862ca60b1440806bb0a0c80dcc444304616030924a2a983a8d423a80ed93c6cf6e2701f567f100c835a6b2e0025ab4ee4</data>
+ </image>
+</images>
+</UI>
diff --git a/noncore/settings/sysinfo/.cvsignore b/noncore/settings/sysinfo/.cvsignore
new file mode 100644
index 0000000..edfa921
--- a/dev/null
+++ b/noncore/settings/sysinfo/.cvsignore
@@ -0,0 +1,3 @@
+moc_*
+*.moc
+Makefile
diff --git a/noncore/settings/sysinfo/Makefile.in b/noncore/settings/sysinfo/Makefile.in
new file mode 100644
index 0000000..1149304
--- a/dev/null
+++ b/noncore/settings/sysinfo/Makefile.in
@@ -0,0 +1,193 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = sysinfo
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = memory.h \
+ graph.h \
+ load.h \
+ storage.h \
+ versioninfo.h \
+ sysinfo.h
+SOURCES = main.cpp \
+ memory.cpp \
+ graph.cpp \
+ load.cpp \
+ storage.cpp \
+ versioninfo.cpp \
+ sysinfo.cpp
+OBJECTS = main.o \
+ memory.o \
+ graph.o \
+ load.o \
+ storage.o \
+ versioninfo.o \
+ sysinfo.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_memory.cpp \
+ moc_graph.cpp \
+ moc_load.cpp \
+ moc_storage.cpp \
+ moc_versioninfo.cpp \
+ moc_sysinfo.cpp
+OBJMOC = moc_memory.o \
+ moc_graph.o \
+ moc_load.o \
+ moc_storage.o \
+ moc_versioninfo.o \
+ moc_sysinfo.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake sysinfo.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+main.o: main.cpp \
+ sysinfo.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+memory.o: memory.cpp \
+ graph.h \
+ memory.h
+
+graph.o: graph.cpp \
+ graph.h
+
+load.o: load.cpp \
+ load.h
+
+storage.o: storage.cpp \
+ graph.h \
+ storage.h
+
+versioninfo.o: versioninfo.cpp \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/version.h \
+ versioninfo.h
+
+sysinfo.o: sysinfo.cpp \
+ memory.h \
+ load.h \
+ storage.h \
+ versioninfo.h \
+ sysinfo.h \
+ $(QPEDIR)/include/qpe/resource.h
+
+moc_memory.o: moc_memory.cpp \
+ memory.h
+
+moc_graph.o: moc_graph.cpp \
+ graph.h
+
+moc_load.o: moc_load.cpp \
+ load.h
+
+moc_storage.o: moc_storage.cpp \
+ storage.h
+
+moc_versioninfo.o: moc_versioninfo.cpp \
+ versioninfo.h
+
+moc_sysinfo.o: moc_sysinfo.cpp \
+ sysinfo.h
+
+moc_memory.cpp: memory.h
+ $(MOC) memory.h -o moc_memory.cpp
+
+moc_graph.cpp: graph.h
+ $(MOC) graph.h -o moc_graph.cpp
+
+moc_load.cpp: load.h
+ $(MOC) load.h -o moc_load.cpp
+
+moc_storage.cpp: storage.h
+ $(MOC) storage.h -o moc_storage.cpp
+
+moc_versioninfo.cpp: versioninfo.h
+ $(MOC) versioninfo.h -o moc_versioninfo.cpp
+
+moc_sysinfo.cpp: sysinfo.h
+ $(MOC) sysinfo.h -o moc_sysinfo.cpp
+
+
diff --git a/noncore/settings/sysinfo/graph.cpp b/noncore/settings/sysinfo/graph.cpp
new file mode 100644
index 0000000..0b02bf7
--- a/dev/null
+++ b/noncore/settings/sysinfo/graph.cpp
@@ -0,0 +1,183 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpainter.h>
+#include <qpixmap.h>
+#include "graph.h"
+
+void GraphData::clear()
+{
+ names.clear();
+ values.resize(0);
+}
+
+void GraphData::addItem( const QString &name, int value )
+{
+ names.append( name );
+ values.resize( values.size() + 1 );
+ values[values.size()-1] = value;
+}
+
+Graph::Graph(QWidget *parent, const char *name, WFlags f )
+ : QFrame( parent, name, f )
+{
+}
+
+PieGraph::PieGraph(QWidget *parent, const char *name, WFlags f )
+ : Graph( parent, name, f )
+{
+}
+
+void PieGraph::drawContents( QPainter *p )
+{
+ int size = QMIN( contentsRect().width(), contentsRect().height() ) - 1;
+
+ int total = 0;
+ for ( unsigned i = 0; i < data->count(); i++ )
+ total += data->value(i);
+
+ int angle = 0;
+ for ( unsigned i = 0; i < data->count(); i++ ) {
+ int len;
+ if ( i == data->count() - 1 || !total )
+ len = 5760 - angle;
+ else
+ len = data->value(i) * 5760 / total;
+ QColor col;
+ col.setHsv( i * 360 / data->count(), 255, 255 );
+ p->setBrush( col );
+ p->drawPie ( contentsRect().x(), contentsRect().y(),
+ size, size, angle, len+32 );
+ angle += len;
+ }
+}
+
+BarGraph::BarGraph(QWidget *parent, const char *name, WFlags f )
+ : Graph( parent, name, f )
+{
+ setMinimumHeight( 10 );
+ setMaximumHeight( 45 );
+}
+
+void BarGraph::drawContents( QPainter *p )
+{
+ int h = contentsRect().height();
+ int y = contentsRect().top();
+
+ int total = 0;
+ for ( unsigned i = 0; i < data->count(); i++ )
+ total += data->value(i);
+
+ int pos = 0;
+ for ( unsigned i = 0; i < data->count(); i++ ) {
+ int len;
+ if ( i == data->count() - 1 || !total )
+ len = contentsRect().width() - pos;
+ else
+ len = data->value(i) * contentsRect().width() / total;
+ QColor col;
+ col.setHsv( i * 360 / data->count(), 255, 255 );
+ drawSegment( p, QRect(contentsRect().x() + pos, y, len, h), col );
+ pos += len;
+ }
+}
+
+void BarGraph::drawSegment( QPainter *p, const QRect &r, const QColor &c )
+{
+ if ( QPixmap::defaultDepth() > 8 ) {
+ QColor topgrad = c.light(170);
+ QColor botgrad = c.dark();
+
+ int h1, h2, s1, s2, v1, v2;
+ topgrad.hsv( &h1, &s1, &v1 );
+ botgrad.hsv( &h2, &s2, &v2 );
+ int ng = r.height();
+ for ( int j =0; j < ng; j++ ) {
+ p->setPen( QColor( h1 + ((h2-h1)*j)/(ng-1),
+ s1 + ((s2-s1)*j)/(ng-1),
+ v1 + ((v2-v1)*j)/(ng-1), QColor::Hsv ) );
+ p->drawLine( r.x(), r.top()+j, r.x()+r.width(), r.top()+j );
+ }
+ } else {
+ p->fillRect( r.x(), r.top(), r.width(), r.height(), c );
+ }
+}
+
+
+GraphLegend::GraphLegend( QWidget *parent, const char *name, WFlags f )
+ : QFrame( parent, name, f )
+{
+ horz = FALSE;
+}
+
+void GraphLegend::setOrientation(Orientation o)
+{
+ horz = o == Horizontal;
+}
+
+void GraphLegend::drawContents( QPainter *p )
+{
+ int total = 0;
+ for ( unsigned i = 0; i < data->count(); i++ )
+ total += data->value(i);
+
+ int tw = width()/data->count()-1;
+ int th = height()/(horz ? 1 : data->count());
+ if ( th > p->fontMetrics().height() )
+ th = p->fontMetrics().height();
+ int x = 0;
+ int y = 0;
+ for ( unsigned i = 0; i < data->count(); i++ ) {
+ QColor col;
+ col.setHsv( i * 360 / data->count(), 255, 255 );
+ p->setBrush( col );
+ p->drawRect( x+1, y+1, th - 2, th - 2 );
+ p->drawText( x+th + 1, y + p->fontMetrics().ascent()+1, data->name(i) );
+ if ( horz ) {
+ x += tw;
+ } else {
+ y += th;
+ }
+ }
+}
+
+QSize GraphLegend::sizeHint() const
+{
+ int th = fontMetrics().height() + 2;
+ int maxw = 0;
+ for ( unsigned i = 0; i < data->count(); i++ ) {
+ int w = fontMetrics().width( data->name(i) );
+ if ( w > maxw )
+ maxw = w;
+ }
+ if ( 0 && horz ) {
+ return QSize( maxw * data->count(), th );
+ } else {
+ return QSize( maxw, th * data->count() );
+ }
+}
+
+void GraphLegend::setData( const GraphData *p )
+{
+ data = p;
+ int th = fontMetrics().height();
+ setMinimumHeight( th * ( horz ? 1 : data->count() ) );
+ updateGeometry();
+}
diff --git a/noncore/settings/sysinfo/graph.h b/noncore/settings/sysinfo/graph.h
new file mode 100644
index 0000000..5a65e79
--- a/dev/null
+++ b/noncore/settings/sysinfo/graph.h
@@ -0,0 +1,89 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qframe.h>
+#include <qarray.h>
+#include <qstringlist.h>
+
+class GraphData
+{
+public:
+ void clear();
+ void addItem( const QString &name, int value );
+
+ const QString &name( int i ) const { return names[i]; }
+ int value( int i ) const { return values[i]; }
+ unsigned count() const { return values.size(); }
+
+private:
+ QStringList names;
+ QArray<int> values;
+};
+
+class Graph : public QFrame
+{
+ Q_OBJECT
+public:
+ Graph( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+
+ void setData( const GraphData *p ) { data = p; }
+
+protected:
+ const GraphData *data;
+};
+
+class PieGraph : public Graph
+{
+ Q_OBJECT
+public:
+ PieGraph( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+
+protected:
+ virtual void drawContents( QPainter *p );
+};
+
+class BarGraph : public Graph
+{
+ Q_OBJECT
+public:
+ BarGraph( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+
+protected:
+ virtual void drawContents( QPainter *p );
+ void drawSegment( QPainter *p, const QRect &r, const QColor &c );
+};
+
+class GraphLegend : public QFrame
+{
+ Q_OBJECT
+public:
+ GraphLegend( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+
+ void setData( const GraphData *p );
+ virtual QSize sizeHint() const;
+ void setOrientation(Orientation o);
+
+protected:
+ virtual void drawContents( QPainter *p );
+
+private:
+ const GraphData *data;
+ bool horz;
+};
diff --git a/noncore/settings/sysinfo/load.cpp b/noncore/settings/sysinfo/load.cpp
new file mode 100644
index 0000000..0fcfa6b
--- a/dev/null
+++ b/noncore/settings/sysinfo/load.cpp
@@ -0,0 +1,207 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <stdio.h>
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qtimer.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include "load.h"
+
+LoadInfo::LoadInfo( QWidget *parent, const char *name, WFlags f )
+ : QWidget( parent, name, f )
+{
+ QVBoxLayout *vb = new QVBoxLayout( this, 6 );
+
+ QString cpuInfo = getCpuInfo();
+ if ( !cpuInfo.isNull() )
+ vb->addWidget( new QLabel( cpuInfo, this ) );
+ vb->addWidget( new Load( this ), 100 );
+ QLabel *l = new QLabel( this );
+ l->setPixmap( makeLabel( red, tr("Application CPU usage (%)") ) );
+ vb->addWidget( l, 1 );
+ l = new QLabel( this );
+ l->setPixmap( makeLabel( green, tr("System CPU usage (%)") ) );
+ vb->addWidget( l, 1 );
+ vb->addStretch(50);
+}
+
+QPixmap LoadInfo::makeLabel( const QColor &col, const QString &text )
+{
+ int h = fontMetrics().height();
+ QPixmap pm( 20 + fontMetrics().width( text ), h );
+ QPainter p( &pm );
+ p.fillRect( pm.rect(), colorGroup().background() );
+ p.fillRect( 0, h/2-4, 18, h/2+3, black );
+ p.setPen( col );
+ p.drawLine( 2, h/2, 15, h/2 );
+ p.setPen( colorGroup().text() );
+ p.drawText( 20, fontMetrics().ascent(), text );
+
+ return pm;
+}
+
+QString LoadInfo::getCpuInfo()
+{
+ bool haveInfo = FALSE;
+ QString info = tr("Type: ");
+ QFile f( "/proc/cpuinfo" );
+ if ( f.open( IO_ReadOnly ) ) {
+ QTextStream ts( &f );
+
+ while ( !ts.atEnd() ) {
+ QString s = ts.readLine();
+ if ( s.find( "model name" ) == 0 ) {
+ info += s.mid( s.find( ':' ) + 2 );
+ haveInfo = TRUE;
+ } else if ( s.find( "cpu MHz" ) == 0 ) {
+ double mhz = s.mid( s.find( ':' ) + 2 ).toDouble();
+ info += " " + QString::number( mhz, 'f', 0 );
+ info += "MHz";
+ break;
+ } else if ( s.find( "Processor" ) == 0 ) {
+ info += s.mid( s.find( ':' ) + 2 );
+ haveInfo = TRUE;
+ break;
+#ifdef __MIPSEL__
+ } else if ( s.find( "cpu model" ) == 0 ) {
+ info += " " + s.mid( s.find( ':' ) + 2 );
+ break;
+ } else if ( s.find( "cpu" ) == 0 ) {
+ info += s.mid( s.find( ':' ) + 2 );
+ haveInfo = TRUE;
+#endif
+ }
+ }
+ }
+
+ if ( !haveInfo )
+ info = QString();
+
+ return info;
+}
+
+Load::Load( QWidget *parent, const char *name, WFlags f )
+ : QWidget( parent, name, f )
+{
+ setMinimumHeight( 30 );
+ setBackgroundColor( black );
+ points = 100;
+ setMinimumWidth( points );
+ userLoad = new double [points];
+ systemLoad = new double [points];
+ for ( int i = 0; i < points; i++ ) {
+ userLoad[i] = 0.0;
+ systemLoad[i] = 0.0;
+ }
+ maxLoad = 1.3;
+ QTimer *timer = new QTimer( this );
+ connect( timer, SIGNAL(timeout()), SLOT(timeout()) );
+ timer->start( 2000 );
+ gettimeofday( &last, 0 );
+ first = TRUE;
+ timeout();
+}
+
+void Load::paintEvent( QPaintEvent *ev )
+{
+ QPainter p( this );
+
+ int h = height() - 5;
+
+ int mult = (int)(h / maxLoad);
+
+ p.setPen( gray );
+ p.drawLine( 0, h - mult, width(), h - mult );
+ p.drawText( 0, h - mult, "100" );
+ p.drawText( 0, h, "0" );
+
+ p.setPen( green );
+ for ( int i = 1; i < points; i++ ) {
+ int x1 = (i - 1) * width() / points;
+ int x2 = i * width() / points;
+ p.drawLine( x1, h - systemLoad[i-1] * mult,
+ x2, h - systemLoad[i] * mult );
+ }
+
+ p.setPen( red );
+ for ( int i = 1; i < points; i++ ) {
+ int x1 = (i - 1) * width() / points;
+ int x2 = i * width() / points;
+ p.drawLine( x1, h - userLoad[i-1] * mult,
+ x2, h - userLoad[i] * mult );
+ }
+}
+
+void Load::timeout()
+{
+ int user;
+ int usernice;
+ int sys;
+ int idle;
+ FILE *fp;
+ fp = fopen( "/proc/stat", "r" );
+ fscanf( fp, "cpu %d %d %d %d", &user, &usernice, &sys, &idle );
+ fclose( fp );
+ struct timeval now;
+ gettimeofday( &now, 0 );
+ int tdiff = now.tv_usec - last.tv_usec;
+ tdiff += (now.tv_sec - last.tv_sec) * 1000000;
+ tdiff /= 10000;
+
+ int udiff = user - lastUser;
+ int sdiff = sys - lastSys;
+ if ( tdiff > 0 ) {
+ double uload = (double)udiff / (double)tdiff;
+ double sload = (double)sdiff / (double)tdiff;
+ if ( !first ) {
+ for ( int i = 1; i < points; i++ ) {
+ userLoad[i-1] = userLoad[i];
+ systemLoad[i-1] = systemLoad[i];
+ }
+ userLoad[points-1] = uload;
+ systemLoad[points-1] = sload;
+// scroll( -width()/points, 0, QRect( 0, 0, width() - width()/points + 1, height() ) );
+ repaint( TRUE );
+ double ml = 1.3;
+ /*
+ for ( int i = 0; i < points; i++ ) {
+ if ( userLoad[i] > ml )
+ ml = userLoad[i];
+ }
+ */
+ if ( maxLoad != ml ) {
+ maxLoad = ml;
+ update();
+ }
+ }
+
+ last = now;
+ lastUser = user;
+ lastSys = sys;
+ first = FALSE;
+ } else if ( tdiff < 0 ) {
+ last = now;
+ }
+}
+
diff --git a/noncore/settings/sysinfo/load.h b/noncore/settings/sysinfo/load.h
new file mode 100644
index 0000000..e7f5388
--- a/dev/null
+++ b/noncore/settings/sysinfo/load.h
@@ -0,0 +1,60 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <sys/time.h>
+#include <qwidget.h>
+
+/*
+ Little load meter
+*/
+class Load : public QWidget {
+ Q_OBJECT
+public:
+ Load( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+
+protected:
+ void paintEvent( QPaintEvent *ev );
+
+private slots:
+ void timeout();
+
+private:
+ int points;
+ double *userLoad;
+ double *systemLoad;
+ double maxLoad;
+ struct timeval last;
+ int lastUser;
+ int lastUsernice;
+ int lastSys;
+ int lastIdle;
+ bool first;
+};
+
+class LoadInfo : public QWidget
+{
+ Q_OBJECT
+public:
+ LoadInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+
+private:
+ QPixmap makeLabel( const QColor &col, const QString &text );
+ QString getCpuInfo();
+};
diff --git a/noncore/settings/sysinfo/main.cpp b/noncore/settings/sysinfo/main.cpp
new file mode 100644
index 0000000..6e889db
--- a/dev/null
+++ b/noncore/settings/sysinfo/main.cpp
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "sysinfo.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char *argv[] )
+{
+ QPEApplication a( argc, argv );
+
+ SystemInfo *si = new SystemInfo();
+ a.showMainWidget( si );
+
+ return a.exec();
+}
+
diff --git a/noncore/settings/sysinfo/memory.cpp b/noncore/settings/sysinfo/memory.cpp
new file mode 100644
index 0000000..781f0df
--- a/dev/null
+++ b/noncore/settings/sysinfo/memory.cpp
@@ -0,0 +1,94 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qlayout.h>
+#include "graph.h"
+#include "memory.h"
+
+MemoryInfo::MemoryInfo( QWidget *parent, const char *name, WFlags f )
+ : QWidget( parent, name, f )
+{
+ QVBoxLayout *vb = new QVBoxLayout( this, 5 );
+
+ totalMem = new QLabel( this );
+ vb->addWidget( totalMem );
+
+ data = new GraphData();
+// graph = new PieGraph( this );
+ graph = new BarGraph( this );
+ graph->setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ vb->addWidget( graph, 1 );
+ graph->setData( data );
+
+ legend = new GraphLegend( this );
+ vb->addWidget( legend );
+ legend->setData( data );
+
+ vb->addStretch( 1 );
+ updateData();
+
+ QTimer *t = new QTimer( this );
+ connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) );
+ t->start( 5000 );
+}
+
+MemoryInfo::~MemoryInfo()
+{
+ delete data;
+}
+
+void MemoryInfo::updateData()
+{
+ QFile file( "/proc/meminfo" );
+
+ if ( file.open( IO_ReadOnly ) ) {
+ QTextStream t( &file );
+ QString dummy = t.readLine(); // title
+ t >> dummy;
+ int total, used, memfree, shared, buffers, cached;
+ t >> total;
+ total /= 1000;
+ t >> used;
+ used /= 1000;
+ t >> memfree;
+ memfree /= 1000;
+ t >> shared;
+ shared /= 1000;
+ t >> buffers;
+ buffers /= 1000;
+ t >> cached;
+ cached /= 1000;
+ int realUsed = total - ( buffers + cached + memfree );
+ data->clear();
+ data->addItem( tr("Used (%1 kB)").arg(realUsed), realUsed );
+ data->addItem( tr("Buffers (%1 kB)").arg(buffers), buffers );
+ data->addItem( tr("Cached (%1 kB)").arg(cached), cached );
+ data->addItem( tr("Free (%1 kB)").arg(memfree), memfree );
+ totalMem->setText( tr( "Total Memory: %1 kB" ).arg( total ) );
+ graph->repaint( FALSE );
+ legend->update();
+ }
+}
+
+
diff --git a/noncore/settings/sysinfo/memory.h b/noncore/settings/sysinfo/memory.h
new file mode 100644
index 0000000..696f97c
--- a/dev/null
+++ b/noncore/settings/sysinfo/memory.h
@@ -0,0 +1,48 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef MEMORY_H
+#define MEMORY_H
+
+#include <qwidget.h>
+
+class GraphData;
+class Graph;
+class GraphLegend;
+class QLabel;
+
+class MemoryInfo : public QWidget
+{
+ Q_OBJECT
+public:
+ MemoryInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~MemoryInfo();
+
+private slots:
+ void updateData();
+
+private:
+ QLabel *totalMem;
+ GraphData *data;
+ Graph *graph;
+ GraphLegend *legend;
+};
+
+#endif
diff --git a/noncore/settings/sysinfo/qpe-sysinfo.control b/noncore/settings/sysinfo/qpe-sysinfo.control
new file mode 100644
index 0000000..e5ed583
--- a/dev/null
+++ b/noncore/settings/sysinfo/qpe-sysinfo.control
@@ -0,0 +1,9 @@
+Files: bin/sysinfo apps/Applications/sysinfo.desktop pics/qpe-logo.png pics/tux-logo.png
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: System Information dialog
+ For the Qtopia environment.
diff --git a/noncore/settings/sysinfo/storage.cpp b/noncore/settings/sysinfo/storage.cpp
new file mode 100644
index 0000000..4e81170
--- a/dev/null
+++ b/noncore/settings/sysinfo/storage.cpp
@@ -0,0 +1,220 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qtimer.h>
+#include <qlayout.h>
+#include "graph.h"
+#include "storage.h"
+
+#include <stdio.h>
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+#include <sys/vfs.h>
+#include <mntent.h>
+#endif
+
+StorageInfo::StorageInfo( QWidget *parent, const char *name )
+ : QWidget( parent, name )
+{
+ vb = 0;
+ disks.setAutoDelete(TRUE);
+ lines.setAutoDelete(TRUE);
+ updateMounts();
+ startTimer( 5000 );
+}
+
+void StorageInfo::timerEvent(QTimerEvent*)
+{
+ updateMounts();
+}
+
+static bool isCF(const QString& m)
+{
+ FILE* f = fopen("/var/run/stab", "r");
+ if (!f) f = fopen("/var/state/pcmcia/stab", "r");
+ if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
+ if ( f ) {
+ char line[1024];
+ char devtype[80];
+ char devname[80];
+ while ( fgets( line, 1024, f ) ) {
+ // 0 ide ide-cs 0 hda 3 0
+ if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 )
+ {
+ if ( QString(devtype) == "ide" && m.find(devname)>0 ) {
+ fclose(f);
+ return TRUE;
+ }
+ }
+ }
+ fclose(f);
+ }
+ return FALSE;
+}
+
+void StorageInfo::updateMounts()
+{
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+ struct mntent *me;
+ FILE *mntfp = setmntent( "/etc/mtab", "r" );
+ QStringList curdisks;
+ QStringList curfs;
+ bool rebuild = FALSE;
+ int n=0;
+ if ( mntfp ) {
+ while ( (me = getmntent( mntfp )) != 0 ) {
+ QString fs = me->mnt_fsname;
+ if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
+ || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" )
+ {
+ n++;
+ curdisks.append(fs);
+ QString d = me->mnt_dir;
+ curfs.append(d);
+ if ( !disks.find(d) )
+ rebuild = TRUE;
+ }
+ }
+ endmntent( mntfp );
+ }
+ if ( rebuild || n != (int)disks.count() ) {
+ disks.clear();
+ lines.clear();
+ delete vb;
+ vb = new QVBoxLayout( this, n > 3 ? 1 : 5 );
+ bool frst=TRUE;
+ QStringList::ConstIterator it=curdisks.begin();
+ QStringList::ConstIterator fsit=curfs.begin();
+ for (; it!=curdisks.end(); ++it, ++fsit) {
+ if ( !frst ) {
+ QFrame *f = new QFrame( this );
+ vb->addWidget(f);
+ f->setFrameStyle( QFrame::HLine | QFrame::Sunken );
+ lines.append(f);
+ f->show();
+ } frst=FALSE;
+ QString humanname=*it;
+ if ( isCF(humanname) )
+ humanname = tr("CF Card");
+ else if ( humanname == "/dev/hda1" )
+ humanname = tr("Hard Disk");
+ else if ( humanname.left(9) == "/dev/mmcd" )
+ humanname = tr("SD Card");
+ else if ( humanname.left(7) == "/dev/hd" )
+ humanname = tr("Hard Disk") + " " + humanname.mid(7);
+ else if ( humanname.left(7) == "/dev/sd" )
+ humanname = tr("SCSI Hard Disk") + " " + humanname.mid(7);
+ else if ( humanname == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
+ humanname = tr("Internal Storage");
+ else if ( humanname.left(14) == "/dev/mtdblock/" )
+ humanname = tr("Internal Storage") + " " + humanname.mid(14);
+ else if ( humanname.left(13) == "/dev/mtdblock" )
+ humanname = tr("Internal Storage") + " " + humanname.mid(13);
+ // etc.
+ MountInfo* mi = new MountInfo( *fsit, humanname, this );
+ vb->addWidget(mi);
+ disks.insert(*fsit,mi);
+ mi->show();
+ }
+ vb->addStretch();
+ } else {
+ // just update them
+ for (QDictIterator<MountInfo> i(disks); i.current(); ++i)
+ i.current()->updateData();
+ }
+#endif
+}
+
+
+MountInfo::MountInfo( const QString &path, const QString &ttl, QWidget *parent, const char *name )
+ : QWidget( parent, name ), title(ttl)
+{
+ fs = new FileSystem( path );
+ QVBoxLayout *vb = new QVBoxLayout( this, 3 );
+
+ totalSize = new QLabel( this );
+ vb->addWidget( totalSize );
+
+ data = new GraphData();
+ graph = new BarGraph( this );
+ graph->setFrameStyle( QFrame::Panel | QFrame::Sunken );
+ vb->addWidget( graph, 1 );
+ graph->setData( data );
+
+ legend = new GraphLegend( this );
+ legend->setOrientation(Horizontal);
+ vb->addWidget( legend );
+ legend->setData( data );
+
+ updateData();
+}
+
+MountInfo::~MountInfo()
+{
+ delete data;
+ delete fs;
+}
+
+void MountInfo::updateData()
+{
+ fs->update();
+
+ long mult = fs->blockSize() / 1024;
+ long div = 1024 / fs->blockSize();
+ if ( !mult ) mult = 1;
+ if ( !div ) div = 1;
+ long total = fs->totalBlocks() * mult / div;
+ long avail = fs->availBlocks() * mult / div;
+ long used = total - avail;
+ totalSize->setText( title + tr(" total: %1 kB").arg( total ) );
+ data->clear();
+ data->addItem( tr("Used (%1 kB)").arg(used), used );
+ data->addItem( tr("Available (%1 kB)").arg(avail), avail );
+ graph->repaint( FALSE );
+ legend->update();
+ graph->show();
+ legend->show();
+}
+
+//---------------------------------------------------------------------------
+
+FileSystem::FileSystem( const QString &p )
+ : fspath( p ), blkSize(512), totalBlks(0), availBlks(0)
+{
+ update();
+}
+
+void FileSystem::update()
+{
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+ struct statfs fs;
+ if ( !statfs( fspath.latin1(), &fs ) ) {
+ blkSize = fs.f_bsize;
+ totalBlks = fs.f_blocks;
+ availBlks = fs.f_bavail;
+ } else {
+ blkSize = 0;
+ totalBlks = 0;
+ availBlks = 0;
+ }
+#endif
+}
+
diff --git a/noncore/settings/sysinfo/storage.h b/noncore/settings/sysinfo/storage.h
new file mode 100644
index 0000000..3fa5b79
--- a/dev/null
+++ b/noncore/settings/sysinfo/storage.h
@@ -0,0 +1,87 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qwidget.h>
+#include <qframe.h>
+#include <qlist.h>
+#include <qdict.h>
+
+class QLabel;
+class GraphData;
+class Graph;
+class GraphLegend;
+class FileSystem;
+class MountInfo;
+class QVBoxLayout;
+
+
+class StorageInfo : public QWidget
+{
+ Q_OBJECT
+public:
+ StorageInfo( QWidget *parent=0, const char *name=0 );
+
+protected:
+ void timerEvent(QTimerEvent*);
+
+private:
+ void updateMounts();
+ QDict<MountInfo> disks;
+ QList<QFrame> lines;
+ QVBoxLayout *vb;
+};
+
+class MountInfo : public QWidget
+{
+ Q_OBJECT
+public:
+ MountInfo( const QString &path, const QString &ttl, QWidget *parent=0, const char *name=0 );
+ ~MountInfo();
+
+ void updateData();
+
+private:
+ QString title;
+ FileSystem *fs;
+ QLabel *totalSize;
+ GraphData *data;
+ Graph *graph;
+ GraphLegend *legend;
+};
+
+class FileSystem
+{
+public:
+ FileSystem( const QString &p );
+
+ void update();
+
+ const QString &path() const { return fspath; }
+ long blockSize() const { return blkSize; }
+ long totalBlocks() const { return totalBlks; }
+ long availBlocks() const { return availBlks; }
+
+private:
+ QString fspath;
+ long blkSize;
+ long totalBlks;
+ long availBlks;
+};
+
+
diff --git a/noncore/settings/sysinfo/sysinfo.cpp b/noncore/settings/sysinfo/sysinfo.cpp
new file mode 100644
index 0000000..bc483aa
--- a/dev/null
+++ b/noncore/settings/sysinfo/sysinfo.cpp
@@ -0,0 +1,53 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "memory.h"
+#include "load.h"
+#include "storage.h"
+//#include "graphics.h"
+#include "versioninfo.h"
+#include "sysinfo.h"
+
+
+#include <qpe/resource.h>
+
+#include <qtabwidget.h>
+#include <qlayout.h>
+
+SystemInfo::SystemInfo( QWidget *parent, const char *name, WFlags f )
+ : QWidget( parent, name, f )
+{
+ setIcon( Resource::loadPixmap( "system_icon" ) );
+ setCaption( tr("System Info") );
+ QVBoxLayout *lay = new QVBoxLayout( this );
+ QTabWidget *tab = new QTabWidget( this );
+ lay->addWidget( tab );
+ tab->addTab( new MemoryInfo( tab ), tr("Memory") );
+#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
+ tab->addTab( new StorageInfo( tab ), tr("Storage") );
+#endif
+ tab->addTab( new LoadInfo( tab ), tr("CPU") );
+// tab->addTab( new Graphics( tab ), tr("Graphics") );
+ tab->addTab( new VersionInfo( tab ), tr("Version") );
+
+ resize( 220, 180 );
+}
+
+
diff --git a/noncore/settings/sysinfo/sysinfo.h b/noncore/settings/sysinfo/sysinfo.h
new file mode 100644
index 0000000..abbf955
--- a/dev/null
+++ b/noncore/settings/sysinfo/sysinfo.h
@@ -0,0 +1,29 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qwidget.h>
+
+class SystemInfo : public QWidget
+{
+ Q_OBJECT
+public:
+ SystemInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+};
+
diff --git a/noncore/settings/sysinfo/sysinfo.pro b/noncore/settings/sysinfo/sysinfo.pro
new file mode 100644
index 0000000..0c7d907
--- a/dev/null
+++ b/noncore/settings/sysinfo/sysinfo.pro
@@ -0,0 +1,25 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = memory.h \
+ graph.h \
+ load.h \
+ storage.h \
+ versioninfo.h \
+ sysinfo.h
+SOURCES = main.cpp \
+ memory.cpp \
+ graph.cpp \
+ load.cpp \
+ storage.cpp \
+ versioninfo.cpp \
+ sysinfo.cpp
+INTERFACES =
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+
+TARGET = sysinfo
+
+TRANSLATIONS = ../i18n/de/sysinfo.ts
diff --git a/noncore/settings/sysinfo/versioninfo.cpp b/noncore/settings/sysinfo/versioninfo.cpp
new file mode 100644
index 0000000..d60a445
--- a/dev/null
+++ b/noncore/settings/sysinfo/versioninfo.cpp
@@ -0,0 +1,109 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpe/resource.h>
+#include <qpe/version.h>
+
+#include <qlabel.h>
+#include <qpixmap.h>
+#include <qpainter.h>
+#include <qimage.h>
+#include <qtimer.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qlayout.h>
+#include "versioninfo.h"
+
+VersionInfo::VersionInfo( QWidget *parent, const char *name, WFlags f )
+ : QWidget( parent, name, f )
+{
+ setMinimumSize( 200, 150 );
+
+ QVBoxLayout *vb = new QVBoxLayout( this, 4 );
+
+ QString kernelVersionString;
+ QFile file( "/proc/version" );
+ if ( file.open( IO_ReadOnly ) ) {
+ QTextStream t( &file );
+ QString v;
+ t >> v; t >> v; t >> v;
+ v = v.left( 20 );
+ kernelVersionString = tr( "<b>Linux Kernel</b><p>Version: " ) + v + "<p>";
+ t >> v;
+ kernelVersionString += tr( "Compiled by: " ) + v;
+ file.close();
+ }
+
+ QString palmtopVersionString;
+ palmtopVersionString = tr( "<b>Qtopia</b><p>Version: " ) + QPE_VERSION + "<p>";
+#ifdef QPE_VENDOR
+ QString builder = QPE_VENDOR;
+#else
+ QString builder = "Unknown";
+#endif
+ palmtopVersionString += tr( "Compiled by: " ) + builder + "<p>";
+ palmtopVersionString += tr( "Built on: " ) + __DATE__;
+
+
+ QHBoxLayout *hb1 = new QHBoxLayout( vb );
+ hb1->setSpacing( 2 );
+
+ QLabel *palmtopLogo = new QLabel( this );
+ QImage logo1 = Resource::loadImage( "qpe-logo" );
+ logo1 = logo1.smoothScale( 50, 55 );
+ QPixmap logo1Pixmap;
+ logo1Pixmap.convertFromImage( logo1 );
+ palmtopLogo->setPixmap( logo1Pixmap );
+ palmtopLogo->setFixedSize( 60, 60 );
+ hb1->addWidget( palmtopLogo, 0, Qt::AlignTop + Qt::AlignLeft );
+
+ QLabel *palmtopVersion = new QLabel( this );
+ palmtopVersion->setText( palmtopVersionString );
+ hb1->addWidget( palmtopVersion, 1, Qt::AlignTop + Qt::AlignLeft );
+
+
+ QHBoxLayout *hb2 = new QHBoxLayout( vb );
+ hb1->setSpacing( 2 );
+
+ QLabel *linuxLogo = new QLabel( this );
+
+ // Need to do this extra qpainter code with this image becuase for some
+ // reason it doesn't alpha belnd if directly converted to a pixmap
+ QPixmap logo2Pixmap( 60, 60 );
+ QColor bgColor = colorGroup().background();
+ QPainter painter( &logo2Pixmap );
+ painter.fillRect( QRect( 0, 0, 60, 60 ), QBrush( bgColor ) );
+ QImage logo2 = Resource::loadImage( "tux-logo" );
+ logo2 = logo2.smoothScale( 40, 47 );
+ painter.drawImage( 0, 0, logo2 );
+ painter.end();
+ linuxLogo->setPixmap( logo2Pixmap );
+ linuxLogo->setFixedSize( 60, 60 );
+ hb2->addWidget( linuxLogo, 0, Qt::AlignTop + Qt::AlignLeft );
+
+ QLabel *kernelVersion = new QLabel( this );
+ kernelVersion->setText( kernelVersionString );
+ hb2->addWidget( kernelVersion, 1, Qt::AlignTop + Qt::AlignLeft );
+}
+
+VersionInfo::~VersionInfo()
+{
+}
+
diff --git a/noncore/settings/sysinfo/versioninfo.h b/noncore/settings/sysinfo/versioninfo.h
new file mode 100644
index 0000000..1b5c851
--- a/dev/null
+++ b/noncore/settings/sysinfo/versioninfo.h
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef VERSIONINFO_H
+#define VERSIONINFO_H
+
+#include <qwidget.h>
+
+class VersionInfo : public QWidget
+{
+ Q_OBJECT
+public:
+ VersionInfo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
+ ~VersionInfo();
+};
+
+#endif
diff --git a/noncore/tools/calc2/Makefile b/noncore/tools/calc2/Makefile
new file mode 100644
index 0000000..1e31a2f
--- a/dev/null
+++ b/noncore/tools/calc2/Makefile
@@ -0,0 +1,138 @@
+#############################################################################
+# Makefile for building calc
+# Generated by tmake at 12:06, 2001/11/26
+# Project: calc
+# Template: app
+#############################################################################
+
+####### Compiler, tools and options
+
+CC = gcc
+CXX = g++
+CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG
+CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG
+INCPATH = -I$(QPEDIR)/include -I$(QTDIR)/include
+LINK = gcc
+LFLAGS =
+LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lqpe -Wl,-export-dynamic -lqte
+MOC = $(QTDIR)/bin/moc
+UIC = $(QTDIR)/bin/uic
+
+TAR = tar -cf
+GZIP = gzip -9f
+
+####### Files
+
+HEADERS = calc.h \
+ plugininterface.h \
+ instruction.h \
+ engine.h \
+ stdinstructions.h
+SOURCES = calc.cpp \
+ main.cpp \
+ engine.cpp
+OBJECTS = calc.o \
+ main.o \
+ engine.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_calc.cpp \
+ moc_engine.cpp
+OBJMOC = moc_calc.o \
+ moc_engine.o
+DIST =
+TARGET = calc
+INTERFACE_DECL_PATH = .
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(TARGET)
+
+$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
+ $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake calc.pro
+
+dist:
+ $(TAR) calc.tar calc.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
+ $(GZIP) calc.tar
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)
+ -rm -f *~ core
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+####### Compile
+
+calc.o: calc.cpp \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qpeapplication.h \
+ calc.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qlibrary.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qcom.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/quuid.h \
+ engine.h \
+ instruction.h \
+ plugininterface.h
+
+main.o: main.cpp \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qpeapplication.h \
+ calc.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qlibrary.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qcom.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/quuid.h \
+ engine.h \
+ instruction.h \
+ plugininterface.h
+
+engine.o: engine.cpp \
+ engine.h \
+ instruction.h
+
+moc_calc.o: moc_calc.cpp \
+ calc.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qlibrary.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/qcom.h \
+ /home/luke/builds/2.3.2-emb/qpe/include/qpe/quuid.h \
+ engine.h \
+ instruction.h \
+ plugininterface.h
+
+moc_engine.o: moc_engine.cpp \
+ engine.h \
+ instruction.h
+
+moc_calc.cpp: calc.h
+ $(MOC) calc.h -o moc_calc.cpp
+
+moc_engine.cpp: engine.h
+ $(MOC) engine.h -o moc_engine.cpp
+
diff --git a/noncore/tools/calc2/binary/Makefile b/noncore/tools/calc2/binary/Makefile
new file mode 100644
index 0000000..93cc0d5
--- a/dev/null
+++ b/noncore/tools/calc2/binary/Makefile
@@ -0,0 +1,146 @@
+#############################################################################
+# Makefile for building libbinary.so.1.0.0
+# Generated by tmake at 12:03, 2001/11/22
+# Project: binary
+# Template: lib
+#############################################################################
+
+####### Compiler, tools and options
+
+CC = gcc
+CXX = g++
+CFLAGS = -pipe -Wall -W -O2 -fPIC -DNO_DEBUG
+CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fPIC -DNO_DEBUG
+INCPATH = -I$(QPEDIR)/include -I$(QPEDIR)/calc2 -I$(QTDIR)/include
+LINK = gcc
+LFLAGS = -shared -Wl,-soname,libbinary.so.1
+LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lqte
+AR = ar cqs
+RANLIB =
+MOC = $(QTDIR)/bin/moc
+UIC = $(QTDIR)/bin/uic
+
+TAR = tar -cf
+GZIP = gzip -9f
+
+####### Files
+
+HEADERS = binaryimpl.h \
+ binaryfactory.h
+SOURCES = binaryimpl.cpp \
+ binaryfactory.cpp
+OBJECTS = binaryimpl.o \
+ binaryfactory.o \
+ binary.o
+INTERFACES = binary.ui
+UICDECLS = binary.h
+UICIMPLS = binary.cpp
+SRCMOC = moc_binaryimpl.cpp \
+ moc_binary.cpp
+OBJMOC = moc_binaryimpl.o \
+ moc_binary.o
+DIST =
+TARGET = libbinary.so.1.0.0
+TARGETA = $(QPEDIR)/plugins/calculator/libbinary.a
+TARGETD = libbinary.so.1.0.0
+TARGET0 = libbinary.so
+TARGET1 = libbinary.so.1
+TARGET2 = libbinary.so.1.0
+INTERFACE_DECL_PATH = .
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(QPEDIR)/plugins/calculator/libbinary.so.1.0.0
+
+$(QPEDIR)/plugins/calculator/libbinary.so.1.0.0: $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ -rm -f $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)
+ $(LINK) $(LFLAGS) -o $(TARGETD) $(OBJECTS) $(OBJMOC) $(LIBS)
+ -ln -s $(TARGET) $(TARGET0)
+ -ln -s $(TARGET) $(TARGET1)
+ -ln -s $(TARGET) $(TARGET2)
+ -rm -f $(QPEDIR)/plugins/calculator/$(TARGET)
+ -rm -f $(QPEDIR)/plugins/calculator/$(TARGET0)
+ -rm -f $(QPEDIR)/plugins/calculator/$(TARGET1)
+ -rm -f $(QPEDIR)/plugins/calculator/$(TARGET2)
+ -mv $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) $(QPEDIR)/plugins/calculator/
+
+staticlib: $(TARGETA)
+
+$(TARGETA): $(UICDECLS) $(OBJECTS) $(OBJMOC)
+ -rm -f $(TARGETA)
+ $(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake binary.pro
+
+dist:
+ $(TAR) binary.tar binary.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST)
+ $(GZIP) binary.tar
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET)
+ -rm -f $(TARGET0) $(TARGET1) $(TARGET2) $(TARGETA)
+ -rm -f *~ core
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+####### Compile
+
+binaryimpl.o: binaryimpl.cpp \
+ binaryimpl.h \
+ binary.h
+
+binaryfactory.o: binaryfactory.cpp \
+ binaryfactory.h \
+ binaryimpl.h \
+ binary.h
+
+binary.h: binary.ui
+ $(UIC) binary.ui -o $(INTERFACE_DECL_PATH)/binary.h
+
+binary.cpp: binary.ui
+ $(UIC) binary.ui -i binary.h -o binary.cpp
+
+binary.o: binary.cpp \
+ binary.h \
+ binary.ui
+
+moc_binaryimpl.o: moc_binaryimpl.cpp \
+ binaryimpl.h \
+ binary.h
+
+moc_binary.o: moc_binary.cpp \
+ binary.h
+
+moc_binaryimpl.cpp: binaryimpl.h
+ $(MOC) binaryimpl.h -o moc_binaryimpl.cpp
+
+moc_binary.cpp: binary.h
+ $(MOC) binary.h -o moc_binary.cpp
+
diff --git a/noncore/tools/calc2/binary/README b/noncore/tools/calc2/binary/README
new file mode 100644
index 0000000..4937038
--- a/dev/null
+++ b/noncore/tools/calc2/binary/README
@@ -0,0 +1 @@
+A binary interface with bitwise operations
diff --git a/noncore/tools/calc2/binary/binary.pro b/noncore/tools/calc2/binary/binary.pro
new file mode 100644
index 0000000..01ba6a4
--- a/dev/null
+++ b/noncore/tools/calc2/binary/binary.pro
@@ -0,0 +1,16 @@
+TEMPLATE = lib
+CONFIG -= moc
+CONFIG += qt release
+
+# Input
+INTERFACES += binary.ui
+HEADERS = binaryimpl.h \
+ binaryfactory.h
+SOURCES = binaryimpl.cpp \
+ binaryfactory.cpp
+
+INCLUDEPATH += $(QPEDIR)/include \
+ $(QPEDIR)/calc2
+DEPENDPATH += $(QPEDIR)/include
+
+DESTDIR = $(QPEDIR)/plugins/calculator
diff --git a/noncore/tools/calc2/binary/binary.ui b/noncore/tools/calc2/binary/binary.ui
new file mode 100644
index 0000000..26064d1
--- a/dev/null
+++ b/noncore/tools/calc2/binary/binary.ui
@@ -0,0 +1,177 @@
+<!DOCTYPE UI><UI>
+<class>FormBinary</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>FormBinary</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>332</width>
+ <height>114</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Binary</string>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget row="1" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB0</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>0</string>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB1</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>1</string>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBAnd</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>AND</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBOr</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>OR</string>
+ </property>
+ </widget>
+ <widget row="0" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBNot</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>NOT</string>
+ </property>
+ </widget>
+ <widget row="1" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBSHL</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>&lt;-</string>
+ </property>
+ </widget>
+ <widget row="0" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBXor</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>XOR</string>
+ </property>
+ </widget>
+ <widget row="1" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBSHR</cstring>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>-&gt;</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+</UI>
diff --git a/noncore/tools/calc2/binary/binaryfactory.cpp b/noncore/tools/calc2/binary/binaryfactory.cpp
new file mode 100644
index 0000000..110334f
--- a/dev/null
+++ b/noncore/tools/calc2/binary/binaryfactory.cpp
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "binaryfactory.h"
+#include "binaryimpl.h"
+#include <engine.h>
+
+QWidget *BinaryInterface::getPlugin ( Engine *e, QWidget *parent ) {
+ if ( !input )
+ input = new FormBinaryImpl ( e, parent );
+ return input;
+}
+
+#ifndef QT_NO_COMPONENT
+QRESULT BinaryInterface::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_Calc )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( BinaryInterface )
+}
+#endif
diff --git a/noncore/tools/calc2/binary/binaryfactory.h b/noncore/tools/calc2/binary/binaryfactory.h
new file mode 100644
index 0000000..e015384
--- a/dev/null
+++ b/noncore/tools/calc2/binary/binaryfactory.h
@@ -0,0 +1,46 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef BINARYIMPL_H
+#define BINARYIMPL_H
+
+#include "binaryimpl.h"
+#include <plugininterface.h>
+#include <engine.h>
+
+class BinaryInterface : public CalcInterface
+{
+public:
+ BinaryInterface(){input = 0;};
+ virtual ~BinaryInterface(){};
+
+#ifndef QT_NO_COMPONENT
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+#endif
+
+ QWidget *getPlugin( Engine *, QWidget *parent );
+
+private:
+ FormBinaryImpl *input;
+ ulong ref;
+};
+
+#endif
diff --git a/noncore/tools/calc2/binary/binaryimpl.cpp b/noncore/tools/calc2/binary/binaryimpl.cpp
new file mode 100644
index 0000000..ffc56ad
--- a/dev/null
+++ b/noncore/tools/calc2/binary/binaryimpl.cpp
@@ -0,0 +1,110 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "binaryimpl.h"
+#include <instruction.h>
+
+class iXOR : public Instruction {
+public:
+ iXOR():Instruction(){};
+ ~iXOR(){};
+ Data eval(Data num) {
+ Data result;
+ result.i = num.i ^ acc.i;
+ return result;
+ };
+};
+class iAND : public Instruction {
+public:
+ iAND():Instruction(){};
+ ~iAND(){};
+ Data eval(Data num) {
+ Data result;
+ result.i = num.i & acc.i;
+ return result;
+ };
+};
+class iNOT : public Instruction {
+public:
+ iNOT():Instruction(){};
+ ~iNOT(){};
+ Data eval(Data num) {
+ Data result;
+ result.i = ~ num.i;
+ return result;
+ };
+};
+class iOR : public Instruction {
+public:
+ iOR():Instruction(){};
+ ~iOR(){};
+ Data eval(Data num) {
+ Data result;
+ result.i = num.i | acc.i;
+ return result;
+ };
+};
+class iLSH : public Instruction {
+public:
+ iLSH():Instruction(){};
+ ~iLSH(){};
+ Data eval(Data num) {
+ Data result;
+ result.i = num.i << 1;
+ return result;
+ };
+};
+class iRSH : public Instruction {
+public:
+ iRSH():Instruction(){};
+ ~iRSH(){};
+ Data eval(Data num) {
+ Data result;
+ result.i = num.i >> 1;
+ return result;
+ };
+};
+
+void FormBinaryImpl::val0Clicked() {
+ engine->pushValue('0');
+}
+
+void FormBinaryImpl::val1Clicked() {
+ engine->pushValue('1');
+}
+
+void FormBinaryImpl::XORClicked() {
+ engine->pushInstruction(new iXOR());
+}
+void FormBinaryImpl::ANDClicked() {
+ engine->pushInstruction(new iAND());
+}
+void FormBinaryImpl::NOTClicked() {
+ engine->immediateInstruction(new iNOT());
+}
+void FormBinaryImpl::ORClicked() {
+ engine->pushInstruction(new iOR());
+}
+void FormBinaryImpl::LSHClicked() {
+ engine->immediateInstruction(new iLSH());
+}
+void FormBinaryImpl::RSHClicked() {
+ engine->immediateInstruction(new iRSH());
+}
diff --git a/noncore/tools/calc2/binary/binaryimpl.h b/noncore/tools/calc2/binary/binaryimpl.h
new file mode 100644
index 0000000..bf9e3a7
--- a/dev/null
+++ b/noncore/tools/calc2/binary/binaryimpl.h
@@ -0,0 +1,50 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FORMBINARYINPUTIMPL
+#define FORMBINARYINPUTIMPL
+
+#include "binary.h"
+#include <engine.h>
+
+class FormBinaryImpl : public FormBinary {
+Q_OBJECT
+public:
+ FormBinaryImpl(Engine *e,QWidget *p) : FormBinary (p,"Binary") {
+ engine = e;
+ engine->setRepresentation(rBin);
+ };
+ ~FormBinaryImpl(){};
+private:
+ Engine *engine;
+
+private slots:
+ void val0Clicked();
+ void val1Clicked();
+
+ void XORClicked();
+ void ANDClicked();
+ void NOTClicked();
+ void ORClicked();
+
+ void LSHClicked();
+ void RSHClicked();
+};
+
+#endif
diff --git a/noncore/tools/calc2/calc.cpp b/noncore/tools/calc2/calc.cpp
new file mode 100644
index 0000000..883ab33
--- a/dev/null
+++ b/noncore/tools/calc2/calc.cpp
@@ -0,0 +1,104 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qvaluelist.h>
+#include <qpe/qpeapplication.h>
+#include <qdir.h>
+#include <qwidgetstack.h>
+
+#include "calc.h"
+#include "plugininterface.h"
+
+calc::calc (QWidget * p = 0, const char *n = 0):QWidget (p, n)
+{
+ setCaption (tr ("Calculator"));
+
+// widgets
+ LCD = new QLCDNumber (this);
+ LCD->setMaximumSize (QSize (240, 30));
+ LCD->setNumDigits(12);
+LCD->setSegmentStyle(QLCDNumber::Filled);
+ pluginWidgetStack = new QWidgetStack (this);
+
+// layout widgets
+ calculatorLayout = new QVBoxLayout (this);
+ calculatorLayout->addWidget (LCD);
+ calculatorLayout->addWidget (pluginWidgetStack);
+
+// no formatting of display for now
+ connect (&engine, SIGNAL(display (double)), LCD, SLOT(display (double)));
+ connect (&engine, SIGNAL(display (const QString &)), LCD, SLOT(display (const QString &)));
+ connect (&engine, SIGNAL(setBinMode()), LCD, SLOT(setBinMode()));
+ connect (&engine, SIGNAL(setOctMode()), LCD, SLOT(setOctMode()));
+ connect (&engine, SIGNAL(setDecMode()), LCD, SLOT(setDecMode()));
+ connect (&engine, SIGNAL(setHexMode()), LCD, SLOT(setHexMode()));
+
+#ifndef NO_PLUGINS
+// load plugins
+ QValueList < Plugin >::Iterator mit;
+ for (mit = pluginList.begin (); mit != pluginList.end (); ++mit) {
+ (*mit).interface->release ();
+ (*mit).library->unload ();
+ delete (*mit).library;
+ }
+ pluginList.clear ();
+
+ QString path = QPEApplication::qpeDir() + "/plugins/calculator";
+ QDir dir (path, "lib*.so");
+ QStringList list = dir.entryList ();
+
+ QStringList::Iterator it;
+ for (it = list.begin (); it != list.end (); ++it) {
+ CalcInterface *iface = 0;
+ QLibrary *lib = new QLibrary (path + "/" + *it);
+
+ Plugin plugin;
+ plugin.pluginWidget = 0;
+
+ if (lib->queryInterface (IID_Calc, (QUnknownInterface **) & iface) ==
+ QS_OK) {
+ plugin.library = lib;
+ plugin.interface = iface;
+ plugin.pluginWidget = plugin.interface->getPlugin(&engine,pluginWidgetStack);
+ if (plugin.pluginWidget)
+ pluginWidgetStack->addWidget (plugin.pluginWidget, pluginList.count());
+ pluginList.append (plugin);
+ } else {
+ delete lib;
+ }
+ }
+ setMode (1);
+#else
+// load simple interface
+#endif
+}
+
+calc::~calc ()
+{
+#ifndef NO_PLUGINS
+ QValueList < Plugin >::Iterator mit;
+ for (mit = pluginList.begin (); mit != pluginList.end (); ++mit) {
+ (*mit).interface->release ();
+ (*mit).library->unload ();
+ delete (*mit).library;
+ }
+#endif
+}
+
diff --git a/noncore/tools/calc2/calc.h b/noncore/tools/calc2/calc.h
new file mode 100644
index 0000000..b52356d
--- a/dev/null
+++ b/noncore/tools/calc2/calc.h
@@ -0,0 +1,69 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef CALC_H
+#define CALC_H
+
+#ifdef QT_NO_COMPONENT
+#define NO_PLUGINS
+#endif
+
+#include <qlayout.h>
+#include <qwidgetstack.h>
+
+#ifndef NO_PLUGINS
+#include <qvaluelist.h>
+#include <qpe/qlibrary.h>
+#endif
+
+#include "engine.h"
+#include "plugininterface.h"
+
+struct Plugin {
+#ifndef NO_PLUGINS
+ QLibrary *library;
+#endif
+ QWidget *pluginWidget;
+ CalcInterface *interface;
+ QString name;
+};
+
+class calc:public QWidget {
+
+Q_OBJECT
+public:
+ calc (QWidget * p = 0, const char *n = 0);
+ ~calc ();
+
+private:
+#ifndef NO_PLUGINS
+ void loadPlugins ();
+ QValueList < Plugin > pluginList;
+#endif
+ QVBoxLayout *calculatorLayout;
+ QWidgetStack *pluginWidgetStack;
+ QLCDNumber *LCD;
+ Engine engine;
+
+public slots:
+ void setMode(int m){pluginWidgetStack->raiseWidget(m);};
+};
+
+#endif
diff --git a/noncore/tools/calc2/calc.pro b/noncore/tools/calc2/calc.pro
new file mode 100644
index 0000000..c10232a
--- a/dev/null
+++ b/noncore/tools/calc2/calc.pro
@@ -0,0 +1,11 @@
+TEMPLATE = app
+CONFIG += qt release
+
+# Input
+HEADERS += calc.h plugininterface.h instruction.h engine.h stdinstructions.h
+SOURCES += calc.cpp main.cpp engine.cpp
+
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe -Wl,-export-dynamic
+
diff --git a/noncore/tools/calc2/engine.cpp b/noncore/tools/calc2/engine.cpp
new file mode 100644
index 0000000..a9a47c4
--- a/dev/null
+++ b/noncore/tools/calc2/engine.cpp
@@ -0,0 +1,214 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "engine.h"
+#include <qstring.h>
+#include <math.h>
+#include <qlcdnumber.h>
+
+Data Engine::evalStack (Data num, bool inbrace = FALSE)
+{
+ if (state != sError) {
+ Instruction *i;
+
+// Pop the next op from the stack
+ while (!stack.isEmpty () && (braces || !inbrace)) {
+ i = stack.pop ();
+
+// Check this ops prec vs next ops prec
+ if (!stack.isEmpty ())
+ if (i->precedence <= stack.top()->precedence)
+ i->acc = evalStack (i->acc, inbrace);
+
+// Evaluate this instruction
+ num = i->eval (num);
+
+// Error-check ( change this to work for all types )
+ if (isnan (num.dbl) || isinf (num.dbl)) {
+ qDebug ("bad result from operation");
+ state = sError;
+ clearData(&num);
+ return num;
+ }
+ }
+ }
+ return num;
+}
+
+// Plugins call this to request the stack be evaluated
+void Engine::eval ()
+{
+ num = evalStack (num);
+ if (state != sError) {
+ displayData(num);
+ state = sStart;
+ }
+// if the user didnt close all their braces, its no big deal
+ braces = 0;
+}
+
+void Engine::immediateInstruction (Instruction * i)
+{
+ if (state != sError) {
+ i->setRep(currentRep);
+ num = i->eval (num);
+ displayData(num);
+ state = sStart;
+ }
+}
+
+void Engine::pushInstruction (Instruction * i)
+{
+ if (state != sError) {
+ i->setRep(currentRep);
+ i->acc = num;
+ stack.push (i);
+ state = sStart;
+ }
+}
+
+void Engine::pushValue (char v)
+{
+ if (state == sAppend) {
+ bool ok = FALSE;
+ switch (currentRep) {
+ case rDouble:
+ displayString.append(v);
+ num.dbl=displayString.toDouble(&ok);
+ break;
+ case rFraction:
+ break;
+ default:
+ displayString.append(v);
+ num.i=displayString.toInt(&ok, calcBase());
+ };
+ if (!ok) {
+ state = sError;
+ qDebug("pushValue() - num->string conversion");
+ } else {
+ const QString constString = displayString;
+ emit(display(constString));
+ };
+
+ } else if (state == sStart) {
+ softReset();
+ displayString.truncate(0);
+ state = sAppend;
+ pushValue (v);
+ } else if (state == sError) {
+ qDebug ("in error state");
+ return;
+ }
+}
+
+void Engine::del ()
+{
+ bool ok;
+ switch (currentRep) {
+ case rDouble:
+ displayString.truncate(displayString.length());
+ num.dbl=displayString.toDouble(&ok);
+ break;
+ case rFraction:
+ qDebug("not available");
+ break;
+ default:
+ displayString.truncate(displayString.length());
+ num.i = displayString.toInt(&ok, calcBase());
+ };
+
+ if (!ok) {
+ state = sError;
+ qDebug("del() - num->string conversion");
+ } else {
+ const QString constString = displayString;
+ emit(display(constString));
+ };
+}
+
+void Engine::displayData(Data d) {
+ switch (currentRep) {
+ case rDouble:
+ displayString.setNum(d.dbl);
+ break;
+ case rFraction:
+ qDebug("fractional display not yet impl");
+ break;
+ default:
+ displayString.setNum(d.i, calcBase());
+ break;
+ };
+ const QString constString= displayString;
+ emit(display(constString));
+}
+
+// Returns the base when Rep is an integer type
+int Engine::calcBase () {
+ switch (currentRep) {
+ case rBin:
+ return 2;
+ case rOct:
+ return 8;
+ case rDec:
+ return 10;
+ case rHex:
+ return 16;
+ default:
+ state = sError;
+ qDebug("Error - attempt to calc base for non-integer");
+ return 10;
+ };
+}
+
+// Special instruction for internal use only
+class iOpenBrace:public Instruction {
+ public:
+ iOpenBrace (Engine *e):Instruction (100) {engine = e;};
+ ~iOpenBrace () {};
+
+ Data eval (Data num) {
+ engine->decBraces();
+ return num;
+ };
+ private:
+ Engine *engine;
+};
+
+void Engine::openBrace() {
+ pushInstruction(new iOpenBrace(this));
+}
+
+void Engine::closeBrace() {
+ braces++;evalStack(num,TRUE);
+}
+
+// will need to show and hide display widgets
+void Engine::setRepresentation(Representation r) {
+ currentRep = r;
+ clearData(&num);
+ clearData(&mem);
+ state = sStart;
+}
+
+void Engine::clearData(Data *d) {
+ d->i = d->fraction.numerator = d->fraction.denominator = 0;
+ d->dbl = 0;
+}
+
diff --git a/noncore/tools/calc2/engine.h b/noncore/tools/calc2/engine.h
new file mode 100644
index 0000000..15c9aa1
--- a/dev/null
+++ b/noncore/tools/calc2/engine.h
@@ -0,0 +1,111 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef ENGINE_H
+#define ENGINE_H
+
+#include <qwidget.h>
+#include <qstack.h> // Instruction stack
+#include <qstring.h> // Display
+#include "instruction.h"
+
+// Possible states
+enum State {
+ sStart, // start inputting a new number
+ sAppend, // continue inputting a number
+ sError
+};
+
+// State machine
+class Engine:public QWidget {
+
+Q_OBJECT
+public:
+ Engine (QWidget * parent = 0, const char *name = 0):QWidget (parent, name) {
+ hardReset();
+ setRepresentation(rDec);
+ };
+
+ ~Engine () { };
+
+ void immediateInstruction (Instruction *);
+ void pushInstruction (Instruction *);
+ void eval ();
+
+ void pushValue (char);
+ void del ();
+
+ void openBrace ();
+ void closeBrace ();
+
+ void softReset () { // clears the number being inputted
+ decimalPlaces = -1;
+ clearData(&num);
+ displayData(num);
+ state = sStart;
+ };
+ void hardReset () { // a "real" reset of the stack
+ stack.clear ();
+ memClear();
+ braces = 0;
+ softReset ();
+ };
+
+ void memSave () {
+ mem = num;
+ };
+ void memRecall () {
+ num = mem;
+ state = sStart;
+ displayData(num);
+ };
+ void memClear () {
+ clearData(&mem);
+ };
+
+ // rFraction will require a special display enabled here
+ void setRepresentation(Representation);
+
+ // you dont want to call this
+ void decBraces(void){ braces--; };
+
+private:
+ void displayData(Data d);
+ void clearData(Data *d);
+ int calcBase();
+ Data evalStack (Data, bool);
+ Data num,mem;
+ State state;
+ QStack < Instruction > stack;
+ Representation currentRep;
+ int braces, decimalPlaces; // count of finishing 0's in num
+ QString displayString; // saves instatiating it over and over
+
+signals:
+ void display(const QString &);
+ void display(double); // could get rid of this and
+ // use a QLabel instead.
+ void setHexMode();
+ void setBinMode();
+ void setDecMode();
+ void setOctMode();
+};
+
+#endif
diff --git a/noncore/tools/calc2/instruction.h b/noncore/tools/calc2/instruction.h
new file mode 100644
index 0000000..6077bf0
--- a/dev/null
+++ b/noncore/tools/calc2/instruction.h
@@ -0,0 +1,69 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef INSTRUCTION_H
+#define INSTRUCTION_H
+
+/* Internal representation of data
+The first four types indicate an int,
+that is, Data.i, and are incompatible
+with the other two types.
+
+- Plugin is responsible for telling engine
+which Rep to use at any given time
+- Instructions from that plugin only
+have to handle that representation
+- Engine is responsible for error-checking
+according to its current rep and display */
+enum Representation {
+ rBin,
+ rOct,
+ rDec,
+ rHex,
+ rDouble,
+ rFraction
+};
+
+// An atom of data
+union Data {
+ int i;
+ double dbl;
+ struct Fraction {
+ int numerator, denominator;
+ } fraction;
+};
+
+// Instruction base class
+class Instruction {
+public:
+ Instruction (int p = 0) {
+ precedence = p;
+ };
+
+ virtual ~ Instruction () {};
+
+ virtual Data eval(Data) = 0;
+ void setRep(Representation r) { rep = r; };
+
+ Representation rep;
+ Data acc;
+ int precedence;
+};
+
+#endif
diff --git a/noncore/tools/calc2/main.cpp b/noncore/tools/calc2/main.cpp
new file mode 100644
index 0000000..ebfcc28
--- a/dev/null
+++ b/noncore/tools/calc2/main.cpp
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include <qpe/qpeapplication.h>
+#include "calc.h"
+
+int main (int argc, char **argv)
+{
+ QPEApplication a (argc, argv);
+
+ calc mw;
+
+ QPEApplication::setInputMethodHint (&mw, QPEApplication::AlwaysOff);
+ mw.setCaption (calc::tr ("Calculator"));
+ a.showMainWidget (&mw);
+
+ return a.exec ();
+}
diff --git a/noncore/tools/calc2/plugininterface.h b/noncore/tools/calc2/plugininterface.h
new file mode 100644
index 0000000..df6db9d
--- a/dev/null
+++ b/noncore/tools/calc2/plugininterface.h
@@ -0,0 +1,45 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef CALCINTERFACE_H
+#define CALCINTERFACE_H
+
+#include <qnamespace.h>
+#include <qstring.h>
+#include <qlcdnumber.h>
+#include <qpe/qcom.h>
+
+#include "engine.h"
+
+#ifndef QT_NO_COMPONENT
+// {3CE88B66-B3FD-4580-9D04-77338A31A667}
+#ifndef IID_Calc
+#define IID_Calc QUuid( 0x3ce88b66, 0xb3fd, 0x4580, 0x9d, 0x04, 0x77, 0x33, 0x8a, 0x31, 0xa6, 0x67)
+#endif
+#endif
+
+class QWidget;
+class QObject;
+
+struct CalcInterface:public QUnknownInterface {
+ virtual QWidget *getPlugin (Engine *e, QWidget * parent) = 0;
+};
+
+#endif
diff --git a/noncore/tools/calc2/simple/README b/noncore/tools/calc2/simple/README
new file mode 100644
index 0000000..37acb64
--- a/dev/null
+++ b/noncore/tools/calc2/simple/README
@@ -0,0 +1 @@
+A simple interface with no operator precedence.
diff --git a/noncore/tools/calc2/simple/simple.pro b/noncore/tools/calc2/simple/simple.pro
new file mode 100644
index 0000000..92378a6
--- a/dev/null
+++ b/noncore/tools/calc2/simple/simple.pro
@@ -0,0 +1,14 @@
+TEMPLATE = lib
+CONFIG -= moc
+CONFIG += qt release
+
+# Input
+INTERFACES += simple.ui
+HEADERS = simpleimpl.h simplefactory.h stdinstructions.h
+SOURCES = simpleimpl.cpp simplefactory.cpp
+
+INCLUDEPATH += $(QPEDIR)/include \
+ $(QPEDIR)/calc2
+DEPENDPATH += $(QPEDIR)/include
+
+DESTDIR = $(QPEDIR)/plugins/calculator
diff --git a/noncore/tools/calc2/simple/simple.ui b/noncore/tools/calc2/simple/simple.ui
new file mode 100644
index 0000000..af12905
--- a/dev/null
+++ b/noncore/tools/calc2/simple/simple.ui
@@ -0,0 +1,704 @@
+<!DOCTYPE UI><UI>
+<class>FormSimple</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>FormSimple</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>73</x>
+ <y>0</y>
+ <width>240</width>
+ <height>320</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>240</width>
+ <height>320</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>baseSize</name>
+ <size>
+ <width>240</width>
+ <height>240</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Simple</string>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget row="4" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBEval</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>160</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>=</string>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB5</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>5</string>
+ </property>
+ </widget>
+ <widget row="4" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBDecimal</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>.</string>
+ </property>
+ </widget>
+ <widget row="3" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB3</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>3</string>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB2</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>2</string>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB4</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>4</string>
+ </property>
+ </widget>
+ <widget row="2" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB6</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>6</string>
+ </property>
+ </widget>
+ <widget row="3" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBMul</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>*</string>
+ </property>
+ </widget>
+ <widget row="2" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBSub</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>-</string>
+ </property>
+ </widget>
+ <widget row="1" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBAdd</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>+</string>
+ </property>
+ </widget>
+ <widget row="1" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB9</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>9</string>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB7</cstring>
+ </property>
+ <property stdset="1">
+ <name>enabled</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>7</string>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>1</string>
+ </property>
+ </widget>
+ <widget row="4" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB0</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>160</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>0</string>
+ </property>
+ </widget>
+ <widget row="4" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBDiv</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>/</string>
+ </property>
+ <property stdset="1">
+ <name>autoRepeat</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PB8</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>8</string>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBMPlus</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>M+</string>
+ </property>
+ </widget>
+ <widget row="0" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBCE</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>CE</string>
+ </property>
+ </widget>
+ <widget row="0" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBMC</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>MC</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PBMR</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>4</hsizetype>
+ <vsizetype>4</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>80</width>
+ <height>80</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>MR</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>PB0</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val0Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB1</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val1Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB2</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val2Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB3</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val3Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB4</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val4Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB5</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val5Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB6</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val6Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB7</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val7Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB8</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val8Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PB9</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>val9Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBSub</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>subClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBMul</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>mulClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBDiv</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>divClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBDecimal</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>decimalClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBEval</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>evalClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBMC</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>MCClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBMPlus</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>MPlusClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBMR</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>MRClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBAdd</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>addClicked()</slot>
+ </connection>
+ <connection>
+ <sender>PBCE</sender>
+ <signal>clicked()</signal>
+ <receiver>FormSimple</receiver>
+ <slot>CEClicked()</slot>
+ </connection>
+ <slot access="public">CEClicked()</slot>
+ <slot access="public">MCClicked()</slot>
+ <slot access="public">MPlusClicked()</slot>
+ <slot access="public">MRClicked()</slot>
+ <slot access="public">addClicked()</slot>
+ <slot access="public">decimalClicked()</slot>
+ <slot access="public">divClicked()</slot>
+ <slot access="public">evalClicked()</slot>
+ <slot access="public">mulClicked()</slot>
+ <slot access="public">subClicked()</slot>
+ <slot access="public">val0Clicked()</slot>
+ <slot access="public">val1Clicked()</slot>
+ <slot access="public">val2Clicked()</slot>
+ <slot access="public">val3Clicked()</slot>
+ <slot access="public">val4Clicked()</slot>
+ <slot access="public">val5Clicked()</slot>
+ <slot access="public">val6Clicked()</slot>
+ <slot access="public">val7Clicked()</slot>
+ <slot access="public">val8Clicked()</slot>
+ <slot access="public">val9Clicked()</slot>
+</connections>
+</UI>
diff --git a/noncore/tools/calc2/simple/simplefactory.cpp b/noncore/tools/calc2/simple/simplefactory.cpp
new file mode 100644
index 0000000..515418f
--- a/dev/null
+++ b/noncore/tools/calc2/simple/simplefactory.cpp
@@ -0,0 +1,51 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "simplefactory.h"
+#include "simpleimpl.h"
+#include <engine.h>
+
+QWidget *SimpleInterface::getPlugin ( Engine *e, QWidget *parent ) {
+ if ( !input )
+ input = new FormSimpleImpl ( e, parent );
+ return input;
+}
+
+#ifndef QT_NO_COMPONENT
+QRESULT SimpleInterface::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
+{
+ *iface = 0;
+ if ( uuid == IID_QUnknown )
+ *iface = this;
+ else if ( uuid == IID_Calc )
+ *iface = this;
+
+ if ( *iface )
+ (*iface)->addRef();
+ return QS_OK;
+}
+
+Q_EXPORT_INTERFACE()
+{
+ Q_CREATE_INSTANCE( SimpleInterface )
+}
+#endif
diff --git a/noncore/tools/calc2/simple/simplefactory.h b/noncore/tools/calc2/simple/simplefactory.h
new file mode 100644
index 0000000..e1022fd
--- a/dev/null
+++ b/noncore/tools/calc2/simple/simplefactory.h
@@ -0,0 +1,46 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef BINARYIMPL_H
+#define BINARYIMPL_H
+
+#include "simpleimpl.h"
+#include <plugininterface.h>
+#include <engine.h>
+
+class SimpleInterface : public CalcInterface
+{
+public:
+ SimpleInterface(){input = 0;};
+ virtual ~SimpleInterface(){};
+
+#ifndef QT_NO_COMPONENT
+ QRESULT queryInterface( const QUuid&, QUnknownInterface** );
+ Q_REFCOUNT
+#endif
+
+ QWidget *getPlugin( Engine *, QWidget *parent );
+
+private:
+ FormSimpleImpl *input;
+ ulong ref;
+};
+
+#endif
diff --git a/noncore/tools/calc2/simple/simpleimpl.cpp b/noncore/tools/calc2/simple/simpleimpl.cpp
new file mode 100644
index 0000000..f71f000
--- a/dev/null
+++ b/noncore/tools/calc2/simple/simpleimpl.cpp
@@ -0,0 +1,120 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include <qpushbutton.h>
+#include <qlcdnumber.h>
+
+#include "simpleimpl.h"
+#include <stdinstructions.h>
+
+void FormSimpleImpl::CEClicked() {
+ engine->hardReset();
+}
+
+void FormSimpleImpl::MCClicked() {
+ engine->memClear();
+}
+
+void FormSimpleImpl::MRClicked() {
+ engine->memRecall();
+}
+
+void FormSimpleImpl::MPlusClicked() {
+ engine->memSave();
+}
+
+void FormSimpleImpl::evalClicked() {
+ engine->eval();
+}
+
+void FormSimpleImpl::addClicked ()
+{
+ engine->pushInstruction (new iAdd ());
+}
+
+void FormSimpleImpl::subClicked ()
+{
+ engine->pushInstruction (new iSub ());
+}
+
+void FormSimpleImpl::mulClicked ()
+{
+ engine->pushInstruction (new iMul ());
+}
+
+void FormSimpleImpl::divClicked ()
+{
+ engine->pushInstruction (new iDiv ());
+}
+
+void FormSimpleImpl::decimalClicked ()
+{
+ engine->pushValue ('.');
+}
+
+void FormSimpleImpl::val1Clicked ()
+{
+ engine->pushValue ('1');
+}
+
+void FormSimpleImpl::val2Clicked ()
+{
+ engine->pushValue ('2');
+}
+
+void FormSimpleImpl::val3Clicked ()
+{
+ engine->pushValue ('3');
+}
+
+void FormSimpleImpl::val4Clicked ()
+{
+ engine->pushValue ('4');
+}
+
+void FormSimpleImpl::val5Clicked ()
+{
+ engine->pushValue ('5');
+}
+
+void FormSimpleImpl::val6Clicked ()
+{
+ engine->pushValue ('6');
+}
+
+void FormSimpleImpl::val7Clicked ()
+{
+ engine->pushValue ('7');
+}
+
+void FormSimpleImpl::val8Clicked ()
+{
+ engine->pushValue ('8');
+}
+
+void FormSimpleImpl::val9Clicked ()
+{
+ engine->pushValue ('9');
+}
+
+void FormSimpleImpl::val0Clicked ()
+{
+ engine->pushValue ('0');
+}
diff --git a/noncore/tools/calc2/simple/simpleimpl.h b/noncore/tools/calc2/simple/simpleimpl.h
new file mode 100644
index 0000000..a2db154
--- a/dev/null
+++ b/noncore/tools/calc2/simple/simpleimpl.h
@@ -0,0 +1,65 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef STANDARDIMPL_H
+#define STANDARDIMPL_H
+
+#include <qpe/qmath.h>
+#include <qlcdnumber.h>
+
+#include "simple.h"
+#include "engine.h"
+#include "instruction.h"
+
+class FormSimpleImpl:public FormSimple {
+Q_OBJECT
+public:
+ FormSimpleImpl (Engine *e, QWidget * parent = 0, const char *name = 0)
+ :FormSimple (parent, name) {engine = e;engine->setRepresentation(rDouble);};
+
+ ~FormSimpleImpl () { };
+
+private:
+ Engine *engine;
+
+private slots:
+ void MPlusClicked();
+ void MCClicked();
+ void MRClicked();
+ void CEClicked();
+ void evalClicked();
+ void addClicked ();
+ void decimalClicked ();
+ void divClicked ();
+ void mulClicked ();
+ void subClicked ();
+ void val0Clicked ();
+ void val1Clicked ();
+ void val2Clicked ();
+ void val3Clicked ();
+ void val4Clicked ();
+ void val5Clicked ();
+ void val6Clicked ();
+ void val7Clicked ();
+ void val8Clicked ();
+ void val9Clicked ();
+};
+
+#endif
diff --git a/noncore/tools/calc2/stdinstructions.h b/noncore/tools/calc2/stdinstructions.h
new file mode 100644
index 0000000..a575968
--- a/dev/null
+++ b/noncore/tools/calc2/stdinstructions.h
@@ -0,0 +1,125 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#ifndef STDINSTRUCTION_H
+#define STDINSTRUCTION_H
+
+#include <qpe/qmath.h>
+#include "instruction.h"
+
+// Useful instructions for plugin writers
+// If you use them, take note of their precedence
+class iAdd:public Instruction {
+public:
+ iAdd ():Instruction (10) { };
+ ~iAdd () { };
+ Data eval (Data num) {
+ Data result;
+ switch (rep) {
+ case rDouble:
+ result.dbl = acc.dbl + num.dbl;
+ break;
+ default:
+ result.i = acc.i + num.i;
+ };
+ return result;
+ };
+};
+class iSub:public Instruction {
+public:
+ iSub ():Instruction (10) { };
+ ~iSub () { };
+ Data eval (Data num) {
+ Data result;
+ switch (rep) {
+ case rDouble:
+ result.dbl = acc.dbl - num.dbl;
+ break;
+ default:
+ result.i = acc.i - num.i;
+ };
+ return result;
+ };
+};
+class iMul:public Instruction {
+public:
+ iMul ():Instruction (20) { };
+ ~iMul () { };
+ Data eval (Data num) {
+ Data result;
+ switch (rep) {
+ case rDouble:
+ result.dbl = acc.dbl * num.dbl;
+ break;
+ default:
+ result.i = acc.i * num.i;
+ };
+ return result;
+ };
+};
+class iDiv:public Instruction {
+public:
+ iDiv ():Instruction (20) { };
+ ~iDiv () { };
+ Data eval (Data num) {
+ Data result;
+ switch (rep) {
+ case rDouble:
+ result.dbl = acc.dbl / num.dbl;
+ break;
+ default:
+ result.i = acc.i / num.i;
+ };
+ return result;
+ };
+};
+
+// Immediate double instructions only
+class iSin:public Instruction {
+public:
+ iSin ():Instruction () { };
+ ~iSin () { };
+ Data eval (Data num) {
+ Data result;
+ result.dbl = qSin(num.dbl);
+ return result;
+ };
+};
+class iCos:public Instruction {
+public:
+ iCos ():Instruction () { };
+ ~iCos () { };
+ Data eval (Data num) {
+ Data result;
+ result.dbl = qCos(num.dbl);
+ return result;
+ };
+};
+class iTan:public Instruction {
+public:
+ iTan ():Instruction () { };
+ ~iTan () {};
+ Data eval (Data num) {
+ Data result;
+ result.dbl = qTan(num.dbl);
+ return result;
+ };
+};
+#endif
diff --git a/noncore/tools/calculator/.cvsignore b/noncore/tools/calculator/.cvsignore
new file mode 100644
index 0000000..f5bf2df
--- a/dev/null
+++ b/noncore/tools/calculator/.cvsignore
@@ -0,0 +1,4 @@
+moc_*
+Makefile
+calculator.h
+calculator.cpp
diff --git a/noncore/tools/calculator/Makefile.in b/noncore/tools/calculator/Makefile.in
new file mode 100644
index 0000000..d62b046
--- a/dev/null
+++ b/noncore/tools/calculator/Makefile.in
@@ -0,0 +1,139 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = calculator
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = calculatorimpl.h
+SOURCES = calculatorimpl.cpp \
+ main.cpp
+OBJECTS = calculatorimpl.o \
+ main.o \
+ calculator.o
+INTERFACES = calculator.ui
+UICDECLS = calculator.h
+UICIMPLS = calculator.cpp
+SRCMOC = moc_calculatorimpl.cpp \
+ moc_calculator.cpp
+OBJMOC = moc_calculatorimpl.o \
+ moc_calculator.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake calculator.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+calculatorimpl.o: calculatorimpl.cpp \
+ calculatorimpl.h \
+ calculator.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/qmath.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+main.o: main.cpp \
+ calculatorimpl.h \
+ calculator.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+calculator.h: calculator.ui
+ $(UIC) calculator.ui -o calculator.h
+
+calculator.cpp: calculator.ui
+ $(UIC) calculator.ui -i calculator.h -o calculator.cpp
+
+calculator.o: calculator.cpp \
+ calculator.h \
+ calculator.ui
+
+moc_calculatorimpl.o: moc_calculatorimpl.cpp \
+ calculatorimpl.h \
+ calculator.h
+
+moc_calculator.o: moc_calculator.cpp \
+ calculator.h
+
+moc_calculatorimpl.cpp: calculatorimpl.h
+ $(MOC) calculatorimpl.h -o moc_calculatorimpl.cpp
+
+moc_calculator.cpp: calculator.h
+ $(MOC) calculator.h -o moc_calculator.cpp
+
+
diff --git a/noncore/tools/calculator/calculator.pro b/noncore/tools/calculator/calculator.pro
new file mode 100644
index 0000000..1281fd5
--- a/dev/null
+++ b/noncore/tools/calculator/calculator.pro
@@ -0,0 +1,13 @@
+DESTDIR = $(QPEDIR)/bin
+TEMPLATE = app
+CONFIG = qt warn_on release
+HEADERS = calculatorimpl.h
+SOURCES = calculatorimpl.cpp \
+ main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES = calculator.ui
+TARGET = calculator
+
+TRANSLATIONS = ../i18n/de/calculator.ts
diff --git a/noncore/tools/calculator/calculator.ui b/noncore/tools/calculator/calculator.ui
new file mode 100644
index 0000000..e8218ab
--- a/dev/null
+++ b/noncore/tools/calculator/calculator.ui
@@ -0,0 +1,1026 @@
+<!DOCTYPE UI><UI>
+<class>Calculator</class>
+<comment>*********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qt Palmtop Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+*********************************************************************</comment>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Calculator</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>271</width>
+ <height>404</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>maximumSize</name>
+ <size>
+ <width>32767</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>baseSize</name>
+ <size>
+ <width>235</width>
+ <height>100</height>
+ </size>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Experimental Calculator</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QLCDNumber</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>LCD</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <pointsize>7</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>numDigits</name>
+ <number>15</number>
+ </property>
+ <property stdset="1">
+ <name>segmentStyle</name>
+ <enum>Flat</enum>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ComboBoxFunction</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonMPlus</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>M+</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonMR</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>MR</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonMC</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>MC</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonCE</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>CE</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout10</cstring>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF6</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF7</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF8</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>log</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF9</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>ln</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF11</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>(</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF12</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>)</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout11</cstring>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>sin</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF2</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>cos</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF3</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>tan</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF4</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF5</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>%</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonF10</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>+/-</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout5</cstring>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>0</number>
+ </property>
+ <widget row="2" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton3</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>3</string>
+ </property>
+ </widget>
+ <widget row="1" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton6</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>6</string>
+ </property>
+ </widget>
+ <widget row="3" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonEquals</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>=</string>
+ </property>
+ </widget>
+ <widget row="3" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton0</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>0</string>
+ </property>
+ </widget>
+ <widget row="1" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonMinus</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>-</string>
+ </property>
+ </widget>
+ <widget row="2" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonTimes</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>x</string>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton4</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>4</string>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton8</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>8</string>
+ </property>
+ </widget>
+ <widget row="3" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonDivide</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>/</string>
+ </property>
+ </widget>
+ <widget row="0" column="3" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonAdd</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>+</string>
+ </property>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton1</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>1</string>
+ </property>
+ </widget>
+ <widget row="3" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButtonDecimal</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>.</string>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton5</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>5</string>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton7</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>7</string>
+ </property>
+ </widget>
+ <widget row="0" column="2" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton9</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>9</string>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>PushButton2</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>font</name>
+ <font>
+ <family>adobe-helvetica</family>
+ <pointsize>24</pointsize>
+ </font>
+ </property>
+ <property stdset="1">
+ <name>focusPolicy</name>
+ <enum>TabFocus</enum>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>2</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </vbox>
+</widget>
+<tabstops>
+ <tabstop>ComboBoxFunction</tabstop>
+ <tabstop>PushButtonMPlus</tabstop>
+ <tabstop>PushButtonMR</tabstop>
+ <tabstop>PushButtonMC</tabstop>
+ <tabstop>PushButtonCE</tabstop>
+ <tabstop>PushButtonF6</tabstop>
+ <tabstop>PushButtonF7</tabstop>
+ <tabstop>PushButtonF8</tabstop>
+ <tabstop>PushButtonF9</tabstop>
+ <tabstop>PushButtonF11</tabstop>
+ <tabstop>PushButtonF12</tabstop>
+ <tabstop>PushButtonF1</tabstop>
+ <tabstop>PushButtonF2</tabstop>
+ <tabstop>PushButtonF3</tabstop>
+ <tabstop>PushButtonF4</tabstop>
+ <tabstop>PushButtonF5</tabstop>
+ <tabstop>PushButtonF10</tabstop>
+ <tabstop>PushButton7</tabstop>
+ <tabstop>PushButton8</tabstop>
+ <tabstop>PushButton9</tabstop>
+ <tabstop>PushButtonAdd</tabstop>
+ <tabstop>PushButton4</tabstop>
+ <tabstop>PushButton5</tabstop>
+ <tabstop>PushButton6</tabstop>
+ <tabstop>PushButtonMinus</tabstop>
+ <tabstop>PushButton1</tabstop>
+ <tabstop>PushButton2</tabstop>
+ <tabstop>PushButton3</tabstop>
+ <tabstop>PushButtonTimes</tabstop>
+ <tabstop>PushButton0</tabstop>
+ <tabstop>PushButtonDecimal</tabstop>
+ <tabstop>PushButtonEquals</tabstop>
+ <tabstop>PushButtonDivide</tabstop>
+</tabstops>
+</UI>
diff --git a/noncore/tools/calculator/calculatorimpl.cpp b/noncore/tools/calculator/calculatorimpl.cpp
new file mode 100644
index 0000000..2f7d7ce
--- a/dev/null
+++ b/noncore/tools/calculator/calculatorimpl.cpp
@@ -0,0 +1,601 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "calculatorimpl.h"
+
+#include <qpe/resource.h>
+#include <qpe/qmath.h>
+#include <qpe/qpeapplication.h>
+
+#include <qpushbutton.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qfont.h>
+#include <qlayout.h>
+#include <qstringlist.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qmessagebox.h>
+#include <math.h>
+
+CalculatorImpl::CalculatorImpl( QWidget * parent, const char * name,
+ WFlags f )
+ : Calculator( parent, name, f )
+{
+ xtopowerofy = Resource::loadPixmap("xtopowerofy");
+ ythrootofx = Resource::loadPixmap("ythrootofx");
+ oneoverx = Resource::loadPixmap("oneoverx");
+
+ memMark = new QLabel( "m", LCD );
+ memMark->setFont( QFont( "helvetica", 12, QFont::Bold, TRUE ) );
+ memMark->resize( 12, 12 );
+ memMark->move( 4, 2 );
+ memMark->hide();
+ mem = 0;
+
+ PushButtonMR->setEnabled( FALSE );
+
+ current_mode = max_mode = conversion_mode_count = 0;
+ last_conversion = -1;
+
+//bgr_command.insert( PushButtonFunction);
+ bgr_command.insert( PushButtonMPlus);
+ bgr_command.insert( PushButtonMR);
+ bgr_command.insert( PushButtonMC);
+ bgr_command.insert( PushButtonCE);
+ connect( &bgr_command, SIGNAL(clicked(int) ), this, SLOT(command_buttons(int)));
+
+ bgr_digits.insert(PushButton0);
+ bgr_digits.insert(PushButton1);
+ bgr_digits.insert(PushButton2);
+ bgr_digits.insert(PushButton3);
+ bgr_digits.insert(PushButton4);
+ bgr_digits.insert(PushButton5);
+ bgr_digits.insert(PushButton6);
+ bgr_digits.insert(PushButton7);
+ bgr_digits.insert(PushButton8);
+ bgr_digits.insert(PushButton9);
+ connect( &bgr_digits, SIGNAL(clicked(int) ), this, SLOT(enterNumber(int)));
+
+
+ bgr_std.insert(PushButtonEquals);
+ bgr_std.insert(PushButtonDecimal);
+ bgr_std.insert(PushButtonAdd);
+ bgr_std.insert(PushButtonMinus);
+ bgr_std.insert(PushButtonDivide);
+ bgr_std.insert(PushButtonTimes);
+ connect( &bgr_std, SIGNAL(clicked(int) ), this, SLOT(std_buttons(int)));
+
+// change the / to a proper division signal
+ PushButtonDivide->setText(QChar(0xF7));
+
+ func_buttons[0] = PushButtonF1;
+ func_buttons[1] = PushButtonF2;
+ func_buttons[2] = PushButtonF3;
+ func_buttons[3] = PushButtonF4;
+ func_buttons[4] = PushButtonF5;
+ func_buttons[5] = PushButtonF6;
+ func_buttons[6] = PushButtonF7;
+ func_buttons[7] = PushButtonF8;
+ func_buttons[8] = PushButtonF9;
+ func_buttons[9] = PushButtonF10;
+ func_buttons[10] = PushButtonF11;
+ func_buttons[11] = PushButtonF12;
+
+ for ( int x = 0 ; x < func_button_count ; x++ ) {
+ QPushButton* tmpbutton = func_buttons[x];
+ faces << tmpbutton->text();
+ bgr_function.insert(tmpbutton);
+ }
+ connect( &bgr_function, SIGNAL(clicked(int) ) , this, SLOT(do_convert(int) ) );
+ connect( &bgr_function, SIGNAL(clicked(int) ) , this, SLOT(std_funcs (int) ) );
+
+ connect(ComboBoxFunction, SIGNAL(activated(int) ), this, SLOT(function_button(int) ) );
+
+ captions.append("Standard");
+ ComboBoxFunction->insertItem(captions.last());
+
+ // now add in the conversion modes
+ // when the menu gets done, these should be in a submenu
+ QString tmp = QPEApplication::qpeDir();
+ tmp += "/etc/unit_conversion.dat";
+ QFile myfile(tmp);
+ if ( !myfile.open( IO_Translate | IO_ReadOnly ) ) {
+ // QMessageBox::warning(this, "Warning", "Data file\nunit_conversion.dat\nnot found\nNo conversion\nfeatures will\nbe available");
+ // disable the f button if no conv file available
+ ComboBoxFunction->setEnabled(FALSE);
+ }
+ else {
+ QString line, line2;
+ QTextStream ts(&myfile);
+
+ // first pass, see how many conversion types there are in order to allocate for them
+ while ( ! ts.eof() ) {
+ line = ts.readLine();
+ if ( line.contains ("STARTTYPE" ) )
+ conversion_mode_count++;
+ }
+
+ entry_list = new double[conversion_mode_count*func_button_count];
+
+ myfile.close();
+ myfile.open( IO_Translate | IO_ReadOnly );
+ QTextStream ts2(&myfile);
+
+ // second pass, read in values
+ int x = 0;
+ while ( ! ts2.eof() ) {
+ line = ts2.readLine();
+ if ( line.contains("STARTTYPE") ) {
+ captions << line.remove(0,10);
+ ComboBoxFunction->insertItem(captions.last());
+ while ( !line.contains("ENDTYPE") ) {
+ line = ts2.readLine();
+ if ( line.contains("NAME") ) {
+ faces << line.remove(0,5);
+ line2 = ts2.readLine();
+ line2.remove(0,6);
+ entry_list[x] = line2.toDouble();
+ x++;
+ }
+ }
+ }
+ }
+ }
+ myfile.close();
+ clear();
+ max_mode = pre_conv_modes_count + conversion_mode_count + post_conv_modes_count - 1;
+ display_pixmap_faces();
+
+ qApp->installEventFilter( this );
+}
+
+bool CalculatorImpl::eventFilter( QObject *o, QEvent *e )
+{
+ if ( e->type() == QEvent::KeyPress && state != sError ) {
+ QKeyEvent *k = (QKeyEvent*)e;
+ if ( k->key() >= Key_0 && k->key() <= Key_9 ) {
+ enterNumber( k->key() - Key_0 );
+ return true;
+ } else {
+ switch ( k->key() ) {
+ case Key_Equal:
+ std_buttons(0);
+ return true;
+ case Key_Period:
+ std_buttons(1);
+ return true;
+ case Key_Plus:
+ std_buttons(2);
+ return true;
+ case Key_Minus:
+ std_buttons(3);
+ return true;
+ case Key_Slash:
+ std_buttons(4);
+ return true;
+ case Key_Asterisk:
+ std_buttons(5);
+ return true;
+ case Key_Percent:
+ execOp( oPercent );
+ return true;
+ case Key_ParenLeft:
+ if ( current_mode < pre_conv_modes_count )
+ execOp( oOpenBrace );
+ return true;
+ case Key_ParenRight:
+ if ( current_mode < pre_conv_modes_count )
+ execOp( oCloseBrace );
+ return true;
+ default:
+ break;
+ }
+ }
+ }
+ return Calculator::eventFilter( o, e );
+}
+
+void CalculatorImpl::do_convert(int button) {
+ if ( state == sError )
+ return;
+ if ( current_mode >= pre_conv_modes_count && current_mode <= (max_mode - post_conv_modes_count) &&
+ button < changeable_func_button_count ) {
+ if ( last_conversion > -1 ) {
+ if( state == sNewNumber ){
+ acc = num
+ / (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + last_conversion])
+ * (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + button]) ;
+ num = acc;
+ LCD->display( acc );
+ } else {
+ state = sNewNumber;
+ num = num
+ / (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + last_conversion])
+ * (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + button]) ;
+ LCD->display( num );
+ acc = num;
+ }
+ }
+ last_conversion = button;
+ }
+}
+
+
+void CalculatorImpl::function_button(int mode){
+ if ( state == sError )
+ clear();
+ // dont need the next line when using a popup menu
+ current_mode = mode;
+
+ // reset the last conv
+ last_conversion = -1;
+
+ // set the caption
+ this->setCaption( captions[current_mode] );
+
+ reset_conv();
+
+ for ( int x = 0 ; x < changeable_func_button_count ; x++ ) {
+ QPushButton* tmpbutton = func_buttons[x];
+
+ // if its a conversion , make it a toggle button
+ if ( current_mode >= pre_conv_modes_count && current_mode <= (max_mode - post_conv_modes_count) ) {
+ tmpbutton->setToggleButton(TRUE);
+ } else {
+ tmpbutton->setToggleButton(FALSE);
+ }
+ tmpbutton->setText( faces[current_mode * func_button_count + x] );
+ }
+
+ if ( current_mode == 0 ) display_pixmap_faces();
+
+ if ( current_mode >= pre_conv_modes_count && current_mode <= (max_mode - post_conv_modes_count) ) {
+ bgr_function.setExclusive(TRUE);
+ } else {
+ bgr_function.setExclusive(FALSE);
+ }
+}
+
+void CalculatorImpl::display_pixmap_faces() {
+ QPushButton* tmpbutton = func_buttons[5];
+ tmpbutton->setPixmap(xtopowerofy);
+
+ tmpbutton = func_buttons[6];
+ tmpbutton->setPixmap(ythrootofx);
+
+ tmpbutton = func_buttons[3];
+ tmpbutton->setPixmap(oneoverx);
+}
+
+void CalculatorImpl::clear() {
+ acc = num = 0;
+ operationStack.clear();
+ state = sStart;
+ numDecimals = 0;
+ numOpenBraces = 0;
+ flPoint = FALSE;
+ LCD->display( 0 );
+ fake = QString::null;
+
+ reset_conv();
+}
+
+void CalculatorImpl::reset_conv() {
+ for ( int x = 0 ; x < changeable_func_button_count ; x++ ) {
+ QPushButton* tmpbutton = func_buttons[x];
+
+ // dont carry any selections into the next mode
+ if ( tmpbutton->state() == QPushButton::On ) {
+ tmpbutton->toggle();
+ }
+ }
+
+ last_conversion = -1;
+}
+
+void CalculatorImpl::std_buttons(int button)
+{
+ if ( state == sError )
+ return;
+ execOp( (Operation)(button + oSum) );
+}
+
+void CalculatorImpl::std_funcs(int button) {
+ if ( state == sError )
+ return;
+ if ( current_mode < pre_conv_modes_count ||
+ button > changeable_func_button_count-1 ) {
+ Operation op;
+ if ( button < 10 )
+ op = (Operation)(button + oSin);
+ else if ( button == 10 )
+ op = oOpenBrace;
+ else
+ op = oCloseBrace;
+ execOp( op );
+ }
+}
+
+void CalculatorImpl::execOp( Operation i )
+{
+ switch (i) {
+ // these operators only affect the current number.
+ case oDivX:
+ case oLog:
+ case oLn:
+ case oSin:
+ case oCos:
+ case oTan:
+ num = evalExpr(i);
+ break;
+
+ case oAdd:
+ case oSub: {
+ processStack( oAdd );
+ Op op( num, i );
+ operationStack.push( op );
+ break;
+ }
+ case oDiv:
+ case oMult:
+ case oRoot:
+ case oXsquared: {
+ processStack( oDiv );
+ Op op( num, i );
+ operationStack.push( op );
+ break;
+ }
+ case oChSign:
+ num = -num;
+ LCD->display(num);
+ return;
+
+ case oOpenBrace: {
+ Op op( 0, oOpenBrace );
+ operationStack.push( op );
+ numOpenBraces++;
+ state = sNewNumber;
+ return;
+ }
+ case oCloseBrace: {
+ if ( numOpenBraces == 0 )
+ return;
+ processStack( oAdd );
+ if ( operationStack.top().operation != oOpenBrace )
+ qDebug( "Calculator: internal Error" );
+ operationStack.pop();
+ state = sNewNumber;
+ numOpenBraces--;
+ break;
+ }
+
+ case oPoint:
+ flPoint = TRUE;
+ return;
+
+ case oPercent:
+ processStack( oPercent );
+ break;
+
+
+ case oSum:
+ processStack( oSum );
+ break;
+
+ default:
+ return;
+ };
+
+ if ( state == sError ) {
+ LCD->display( "Error" );
+ return;
+ } else {
+ LCD->display(num);
+ }
+ state = sNewNumber;
+ numDecimals = 0;
+ flPoint = FALSE;
+}
+
+
+void CalculatorImpl::processStack( int op )
+{
+ //dubious percent hack, since the changeable operator precedences are
+ //pretty much hardwired to be less than the non-changeable
+ bool percent = FALSE;
+ if ( op == oPercent ) {
+ percent = TRUE;
+ op = oSum;
+ }
+ while( !operationStack.isEmpty() && operationStack.top().operation >= op ) {
+ Op operation = operationStack.pop();
+ acc = operation.number;
+ if ( percent ) {
+ if ( operation.operation == oAdd || operation.operation == oSub )
+ num = acc*num/100;
+ else
+ num = num / 100;
+ }
+ num = evalExpr( operation.operation );
+ percent = FALSE;
+ }
+}
+
+
+double CalculatorImpl::evalExpr( int op ) {
+ double sum = 0;
+
+ switch( op ){
+ case oPercent: sum = num / 100.; break;
+ case oDivX:
+ if (num == 0)
+ state = sError;
+ else
+ sum = 1 / num;
+ break;
+ case oXsquared:
+ sum = pow(acc,num);
+ break;
+ case oChSign: (state == sStart) ? sum = -num : sum = -acc; break;
+ case oSub: sum = acc - num; break;
+ case oMult: sum = acc * num; break;
+ case oAdd: sum = acc + num; break;
+ case oDiv: {
+ if (num == 0) {
+ state = sError;
+ } else {
+ sum = acc / num;
+ }
+ break;
+ }
+ case oRoot:
+ /* the linux library is dumb, and can't to -x to 1/n
+ when n is odd. (even and error of course is acceptable */
+ if((acc < 0) && (int(num) == num) && (int(num) % 2 == 1 )) {
+ sum = pow(-acc, 1 / num);
+ sum = -sum;
+ } else {
+ sum = pow(acc, 1 / num);
+ }
+ break;
+ case oLog:
+ sum = log10(num);
+ break;
+ case oLn:
+ sum = log(num);
+ break;
+ case oTan: sum = qTan(num);break;
+ case oSin: sum = qSin(num);break;
+ case oCos: sum = qCos(num);break;
+ default: sum = num; break;
+ }
+
+ if ( isinf( sum ) || isnan( sum ) )
+ state = sError;
+ return sum;
+}
+
+
+void CalculatorImpl::enterNumber( int n )
+{
+ if ( state == sError )
+ return;
+ if( state == sStart ){
+ if( LCD->value() > 0 ){
+ QString s = QString::number( LCD->value(), 'g', LCD->numDigits());
+ if( s.length() > (uint)(LCD->numDigits() - 2)) return;
+
+ } else if( (int)fake.length() >= LCD->numDigits() || numDecimals >=12 ){
+ return;
+ }
+ }
+
+ if( state == sNewNumber ){
+ state = sStart;
+ acc = 0;
+ if( flPoint ){
+ numDecimals = 1;
+ num = n / pow(10, numDecimals);
+ } else
+ num = n;
+ } else if( flPoint ){
+ numDecimals++;
+ if( num < 0 ){
+ num -= n / pow(10, numDecimals);
+ } else {
+ num += n / pow(10, numDecimals);
+ }
+ } else {
+ num *= 10;
+ if( num < 0 )
+ num -= n;
+ else
+ num += n;
+ }
+
+ // We need feedback in the calc display while entering fl.point zeros.
+ // This is a small hack to display sequences like: 0.000 and 1.100
+ double integer, fraction;
+ fraction = modf( num, &integer );
+ if( flPoint ){
+ QString is, fs, zeros;
+
+ is = QString::number( integer, 'g', 13 );
+ fs = QString::number( fraction, 'g', numDecimals );
+ if( fs.contains('e') ){
+ fs = QString::number( fraction, 'f', LCD->numDigits() );
+ }
+ fs = fs.mid( 2, numDecimals );
+
+ if( (integer == 0) && (fraction == 0) )
+ fake = "0.";
+ else if( (integer != 0) && (fraction == 0) )
+ fake = is + ".";
+ else
+ fake = is + "." + fs;
+
+ zeros.fill( '0', (numDecimals - fs.length()) );
+ fake += zeros;
+ // ### This code sets LCD->value() to zero since it sets a text
+ // ### Avoid getting the current value from LCD->value() for
+ // ### calculations.
+ LCD->display( fake );
+ } else
+ LCD->display( num );
+}
+
+void CalculatorImpl::command_buttons(int i) {
+ if ( state == sError && i != 3 )
+ return;
+ switch (i) {
+ case 0: // M+
+ mem += num;
+ if( mem != 0 ){
+ memMark->show();
+ PushButtonMR->setEnabled( TRUE ); };
+ state = sNewNumber;
+ break;
+ case 1: // MR
+ acc = num = mem;
+ state = sNewNumber;
+ LCD->display( mem );
+ break;
+ case 2: // MC
+ mem = 0;
+ memMark->hide();
+ PushButtonMR->setEnabled( FALSE );
+ break;
+ case 3: // CE
+ if ( state == sStart ) {
+ // clear the entered number on the first press
+ state = sNewNumber;
+ num = acc = 0;
+ flPoint = FALSE;
+ LCD->display( 0 );
+ fake = QString::null;
+ numDecimals = 0;
+ } else {
+ clear();
+ }
+ break;
+ };
+
+}
diff --git a/noncore/tools/calculator/calculatorimpl.h b/noncore/tools/calculator/calculatorimpl.h
new file mode 100644
index 0000000..bfb726f
--- a/dev/null
+++ b/noncore/tools/calculator/calculatorimpl.h
@@ -0,0 +1,135 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CALCULATORIMPL_H
+#define CALCULATORIMPL_H
+
+
+#include <qlcdnumber.h>
+#include "calculator.h"
+#include <qpushbutton.h>
+#include <qbuttongroup.h>
+#include <qvaluestack.h>
+
+// mode x functions
+enum Operation {
+ oNop,
+ oOpenBrace,
+ oCloseBrace,
+ oSum,
+ oPoint,
+ oAdd,
+ oSub,
+ oDiv,
+ oMult,
+
+// mode 0 functions
+ oSin,
+ oCos,
+ oTan,
+ oDivX,
+ oPercent,
+ oXsquared,
+ oRoot,
+ oLog,
+ oLn,
+ oChSign
+};
+
+// states
+#define sStart 0
+#define sNewNumber 1
+#define sError 2
+
+struct Op
+{
+ Op() { number = 0; operation = oNop; }
+ Op( double num, Operation op )
+ { number = num; operation = op; }
+ double number;
+ Operation operation;
+};
+
+class QLabel;
+class CalculatorImpl : public Calculator
+{
+ Q_OBJECT
+
+public:
+ CalculatorImpl( QWidget * parent = 0, const char * name = 0,
+ WFlags f = 0 );
+
+public slots:
+ void command_buttons(int);
+ void enterNumber(int i);
+ void std_buttons(int);
+ void std_funcs(int);
+ void do_convert(int);
+ void function_button(int);
+
+protected:
+ virtual bool eventFilter( QObject *o, QEvent *e );
+
+private:
+ void clear();
+
+ void reset_conv();
+
+ void processStack( int op );
+
+ QValueStack<Op> operationStack;
+ int state;
+
+ double acc, num, mem;
+ int numDecimals;
+ bool flPoint;
+ int numOpenBraces;
+
+ void execOp( Operation i );
+ double evalExpr( int op );
+ QLabel * memMark;
+ QString fake;
+
+ // useful values for conversion stuff
+ int current_mode, max_mode, conversion_mode_count, last_conversion;
+
+ // make adding new modes easier for ourselves
+ static const int pre_conv_modes_count = 1;
+ static const int post_conv_modes_count = 0;
+
+ // an array of pointers to the func buttons
+ static const int func_button_count = 12;
+ // this is an abomination
+ static const int changeable_func_button_count = 10;
+ QPushButton* func_buttons[func_button_count];
+
+ QButtonGroup bgr_function, bgr_digits, bgr_std, bgr_command;
+ QStringList faces, captions;
+
+ // an array of doubles holding the conversion ratios
+ double* entry_list;
+
+ QPixmap xtopowerofy;
+ QPixmap ythrootofx;
+ QPixmap oneoverx;
+
+ void display_pixmap_faces(void);
+};
+
+#endif
diff --git a/noncore/tools/calculator/main.cpp b/noncore/tools/calculator/main.cpp
new file mode 100644
index 0000000..74cd5d3
--- a/dev/null
+++ b/noncore/tools/calculator/main.cpp
@@ -0,0 +1,35 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "calculatorimpl.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ CalculatorImpl mw;
+ QPEApplication::setInputMethodHint( &mw, QPEApplication::AlwaysOff );
+ mw.setCaption( CalculatorImpl::tr("Calculator") );
+ a.showMainWidget( &mw );
+
+ return a.exec();
+}
diff --git a/noncore/tools/calculator/qpe-calculator.control b/noncore/tools/calculator/qpe-calculator.control
new file mode 100644
index 0000000..afef70b
--- a/dev/null
+++ b/noncore/tools/calculator/qpe-calculator.control
@@ -0,0 +1,10 @@
+Files: bin/calculator apps/Applications/calculator.desktop etc/unit_conversion.dat
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Calculator
+ A multi-function calculator for the Qtopia environment.
+ Includes units conversion.
diff --git a/noncore/tools/clock/.cvsignore b/noncore/tools/clock/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/noncore/tools/clock/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/noncore/tools/clock/Makefile.in b/noncore/tools/clock/Makefile.in
new file mode 100644
index 0000000..adda9e6
--- a/dev/null
+++ b/noncore/tools/clock/Makefile.in
@@ -0,0 +1,118 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = clock
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = clock.h
+SOURCES = clock.cpp \
+ main.cpp
+OBJECTS = clock.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_clock.cpp
+OBJMOC = moc_clock.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake clock.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+clock.o: clock.cpp \
+ clock.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/config.h \
+ $(QPEDIR)/include/qpe/timestring.h
+
+main.o: main.cpp \
+ clock.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+moc_clock.o: moc_clock.cpp \
+ clock.h
+
+moc_clock.cpp: clock.h
+ $(MOC) clock.h -o moc_clock.cpp
+
+
diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp
new file mode 100644
index 0000000..ef93e11
--- a/dev/null
+++ b/noncore/tools/clock/clock.cpp
@@ -0,0 +1,319 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "clock.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/config.h>
+#include <qpe/timestring.h>
+
+#include <qlcdnumber.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qtimer.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qbuttongroup.h>
+#include <qpainter.h>
+
+#include <math.h>
+
+const double deg2rad = 0.017453292519943295769; // pi/180
+const int sw_prec = 2;
+
+static void toggleScreenSaver( bool on )
+{
+ QCopEnvelope e("QPE/System", "setScreenSaverMode(int)" );
+ e << (on ? QPEApplication::Enable: QPEApplication::DisableSuspend );
+}
+
+Clock::Clock( QWidget * parent, const char * name, WFlags f )
+ : QVBox( parent, name , f )
+{
+ setSpacing( 4 );
+ setMargin( 1 );
+
+ Config config( "qpe" );
+ config.setGroup("Time");
+ ampm = config.readBoolEntry( "AMPM", TRUE );
+
+ aclock = new AnalogClock( this );
+ aclock->display( QTime::currentTime() );
+ aclock->setLineWidth( 2 );
+
+ QHBox *hb = new QHBox( this );
+ hb->setMargin( 0 );
+ QWidget *space = new QWidget( hb );
+ lcd = new QLCDNumber( hb );
+ lcd->setSegmentStyle( QLCDNumber::Flat );
+ lcd->setFrameStyle( QFrame::NoFrame );
+ lcd->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ) );
+ lcd->setFixedHeight( 23 );
+
+ ampmLabel = new QLabel( "PM", hb );
+ ampmLabel->setFont( QFont( "Helvetica", 14, QFont::Bold ) );
+ ampmLabel->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Preferred ) );
+ ampmLabel->setAlignment( AlignLeft | AlignBottom );
+ space = new QWidget( hb );
+
+ date = new QLabel( this );
+ date->setAlignment( AlignHCenter | AlignVCenter );
+ date->setFont( QFont( "Helvetica", 14, QFont::Bold ) );
+ date->setText( TimeString::longDateString( QDate::currentDate() ) );
+
+ QWidget *controls = new QWidget( this );
+ QGridLayout *gl = new QGridLayout( controls, 2, 2, 6, 4 );
+
+ QButtonGroup *grp = new QButtonGroup( controls );
+ grp->setRadioButtonExclusive( true );
+ grp->hide();
+
+ clockRB = new QRadioButton ( tr( "Clock" ), controls );
+ gl->addWidget( clockRB, 0, 0 );
+ grp->insert( clockRB );
+
+ swatchRB = new QRadioButton ( tr( "Stopwatch" ), controls );
+ gl->addWidget( swatchRB, 1, 0 );
+ grp->insert( swatchRB );
+
+ connect( grp, SIGNAL(clicked(int)), this, SLOT(modeSelect(int)) );
+ grp->setButton( 0 );
+
+ set = new QPushButton ( controls );
+ gl->addWidget( set, 0, 1 );
+ set->setText( tr( "Start" ) );
+ set->setEnabled( FALSE );
+ grp->insert( set );
+
+ reset = new QPushButton ( controls );
+ gl->addWidget( reset, 1, 1 );
+ reset->setText( tr( "Reset" ) );
+ reset->setEnabled( FALSE );
+ grp->insert( reset );
+
+ connect( set, SIGNAL( pressed() ), SLOT( slotSet() ) );
+ connect( reset, SIGNAL( clicked() ), SLOT( slotReset() ) );
+
+ t = new QTimer( this );
+ connect( t, SIGNAL( timeout() ), SLOT( updateClock() ) );
+ t->start( 1000 );
+
+ connect( qApp, SIGNAL( timeChanged() ), SLOT( updateClock() ) );
+
+ swatch_running = FALSE;
+ swatch_totalms = 0;
+
+ connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );
+
+ QTimer::singleShot( 0, this, SLOT(updateClock()) );
+ modeSelect(0);
+}
+
+Clock::~Clock()
+{
+ toggleScreenSaver( true );
+}
+
+void Clock::updateClock()
+{
+ if ( clockRB->isChecked() ) {
+ QTime tm = QDateTime::currentDateTime().time();
+ QString s;
+ if ( ampm ) {
+ int hour = tm.hour();
+ if (hour == 0)
+ hour = 12;
+ if (hour > 12)
+ hour -= 12;
+ s.sprintf( "%2d%c%02d", hour, ':', tm.minute() );
+ ampmLabel->setText( (tm.hour() >= 12) ? "PM" : "AM" );
+ ampmLabel->show();
+ } else {
+ s.sprintf( "%2d%c%02d", tm.hour(), ':', tm.minute() );
+ ampmLabel->hide();
+ }
+ lcd->display( s );
+ lcd->repaint( FALSE );
+ aclock->display( QTime::currentTime() );
+ date->setText( TimeString::longDateString( QDate::currentDate() ) );
+ } else {
+ QTime swatch_time;
+ QString lcdtext;
+ int totalms = swatch_totalms;
+ if ( swatch_running )
+ totalms += swatch_start.elapsed();
+ swatch_time = QTime(0,0,0).addMSecs(totalms);
+ QString d = swatch_running ? QString(" ")
+ : QString::number(totalms%1000+1000);
+ lcdtext = swatch_time.toString() + "." + d.right(3).left(sw_prec);
+ lcd->display( lcdtext );
+ lcd->repaint( FALSE );
+ aclock->display( swatch_time );
+ date->setText( TimeString::longDateString( QDate::currentDate() ) );
+ }
+}
+
+void Clock::changeClock( bool a )
+{
+ ampm = a;
+ updateClock();
+}
+
+void Clock::clearClock( void )
+{
+ lcd->display( QTime( 0,0,0 ).toString() );
+ aclock->display( QTime( 0,0,0 ) );
+}
+
+void Clock::slotSet()
+{
+ if ( t->isActive() ) {
+ swatch_totalms += swatch_start.elapsed();
+ set->setText( tr( "Start" ) );
+ t->stop();
+ swatch_running = FALSE;
+ toggleScreenSaver( TRUE );
+ updateClock();
+ } else {
+ swatch_start.start();
+ set->setText( tr( "Stop" ) );
+ t->start( 1000 );
+ swatch_running = TRUE;
+ // disable screensaver while stop watch is running
+ toggleScreenSaver( FALSE );
+ }
+}
+
+void Clock::slotReset()
+{
+ t->stop();
+ swatch_start.start();
+ swatch_totalms = 0;
+
+ if (swatch_running )
+ t->start(1000);
+
+ updateClock();
+}
+
+void Clock::modeSelect( int m )
+{
+ if ( m ) {
+ lcd->setNumDigits( 8+1+sw_prec );
+ lcd->setMinimumWidth( lcd->sizeHint().width() );
+ set->setEnabled( TRUE );
+ reset->setEnabled( TRUE );
+ ampmLabel->hide();
+
+ if ( !swatch_running )
+ t->stop();
+ } else {
+ lcd->setNumDigits( 5 );
+ lcd->setMinimumWidth( lcd->sizeHint().width() );
+ set->setEnabled( FALSE );
+ reset->setEnabled( FALSE );
+ t->start(1000);
+ }
+ updateClock();
+}
+
+QSizePolicy AnalogClock::sizePolicy() const
+{
+ return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+}
+
+void AnalogClock::drawContents( QPainter *p )
+{
+ QRect r = contentsRect();
+ QPoint center( r.x() + r.width() / 2, r.y() + r.height() / 2 );
+
+ QPoint l1( r.x() + r.width() / 2, r.y() + 2 );
+ QPoint l2( r.x() + r.width() / 2, r.y() + 8 );
+
+ QPoint h1( r.x() + r.width() / 2, r.y() + r.height() / 4 );
+ QPoint h2( r.x() + r.width() / 2, r.y() + r.height() / 2 );
+
+ QPoint m1( r.x() + r.width() / 2, r.y() + r.height() / 8 );
+ QPoint m2( r.x() + r.width() / 2, r.y() + r.height() / 2 );
+
+ QPoint s1( r.x() + r.width() / 2, r.y() + 8 );
+ QPoint s2( r.x() + r.width() / 2, r.y() + r.height() / 2 );
+
+ QColor color( clear ? backgroundColor() : black );
+ QTime time = clear ? prevTime : currTime;
+
+ if ( clear && prevTime.secsTo(currTime) > 1 ) {
+ p->eraseRect( rect() );
+ return;
+ }
+
+ if ( !clear ) {
+ // draw ticks
+ p->setPen( QPen( color, 1 ) );
+ for ( int i = 0; i < 12; i++ )
+ p->drawLine( rotate( center, l1, i * 30 ), rotate( center, l2, i * 30 ) );
+ }
+
+ if ( !clear || prevTime.minute() != currTime.minute() ||
+ prevTime.hour() != currTime.hour() ) {
+ // draw hour pointer
+ h1 = rotate( center, h1, 30 * ( time.hour() % 12 ) + time.minute() / 2 );
+ h2 = rotate( center, h2, 30 * ( time.hour() % 12 ) + time.minute() / 2 );
+ p->setPen( QPen( color, 3 ) );
+ p->drawLine( h1, h2 );
+ }
+
+ if ( !clear || prevTime.minute() != currTime.minute() ) {
+ // draw minute pointer
+ m1 = rotate( center, m1, time.minute() * 6 );
+ m2 = rotate( center, m2, time.minute() * 6 );
+ p->setPen( QPen( color, 2 ) );
+ p->drawLine( m1, m2 );
+ }
+
+ // draw second pointer
+ s1 = rotate( center, s1, time.second() * 6 );
+ s2 = rotate( center, s2, time.second() * 6 );
+ p->setPen( QPen( color, 1 ) );
+ p->drawLine( s1, s2 );
+
+ if ( !clear )
+ prevTime = currTime;
+}
+
+void AnalogClock::display( const QTime& t )
+{
+ currTime = t;
+ clear = true;
+ repaint( false );
+ clear = false;
+ repaint( false );
+}
+
+QPoint AnalogClock::rotate( QPoint c, QPoint p, int a )
+{
+ double angle = deg2rad * ( - a + 180 );
+ double nx = c.x() - ( p.x() - c.x() ) * cos( angle ) -
+ ( p.y() - c.y() ) * sin( angle );
+ double ny = c.y() - ( p.y() - c.y() ) * cos( angle ) +
+ ( p.x() - c.x() ) * sin( angle );
+ return QPoint( nx, ny );
+}
diff --git a/noncore/tools/clock/clock.h b/noncore/tools/clock/clock.h
new file mode 100644
index 0000000..6dbebf7
--- a/dev/null
+++ b/noncore/tools/clock/clock.h
@@ -0,0 +1,87 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef CLOCK_H
+#define CLOCK_H
+
+#include <qdatetime.h>
+#include <qvbox.h>
+
+class QLCDNumber;
+class QLabel;
+class QTimer;
+class QRadioButton;
+class QPushButton;
+
+class AnalogClock : public QFrame
+{
+ Q_OBJECT
+
+public:
+ AnalogClock( QWidget * parent = 0, const char * name = 0 )
+ : QFrame( parent, name ), clear(false) {}
+
+ QSizePolicy sizePolicy() const;
+
+ void display( const QTime& time );
+
+protected:
+ void drawContents( QPainter *p );
+
+private:
+ QPoint rotate( QPoint center, QPoint p, int angle );
+
+ QTime currTime;
+ QTime prevTime;
+ bool clear;
+};
+
+class Clock : public QVBox
+{
+ Q_OBJECT
+
+public:
+ Clock( QWidget * parent = 0, const char * name = 0, WFlags f=0 );
+ ~Clock();
+
+private slots:
+ void slotSet();
+ void slotReset();
+ void modeSelect(int);
+ void updateClock();
+ void changeClock( bool );
+
+private:
+ void clearClock();
+
+ QTimer *t;
+ QLCDNumber *lcd;
+ QLabel *date;
+ QLabel *ampmLabel;
+ QPushButton *set, *reset;
+ QRadioButton *clockRB, *swatchRB;
+ AnalogClock *aclock;
+ QTime swatch_start;
+ int swatch_totalms;
+ bool swatch_running;
+ bool ampm;
+};
+
+#endif
+
diff --git a/noncore/tools/clock/clock.pro b/noncore/tools/clock/clock.pro
new file mode 100644
index 0000000..97f4d2c
--- a/dev/null
+++ b/noncore/tools/clock/clock.pro
@@ -0,0 +1,13 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = clock.h
+SOURCES = clock.cpp \
+ main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES =
+TARGET = clock
+
+TRANSLATIONS = ../i18n/de/clock.ts
diff --git a/noncore/tools/clock/main.cpp b/noncore/tools/clock/main.cpp
new file mode 100644
index 0000000..cbfb73b
--- a/dev/null
+++ b/noncore/tools/clock/main.cpp
@@ -0,0 +1,34 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "clock.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ Clock mw;
+ mw.setCaption( Clock::tr("Clock") );
+ a.showMainWidget( &mw );
+
+ return a.exec();
+}
diff --git a/noncore/tools/clock/qpe-clock.control b/noncore/tools/clock/qpe-clock.control
new file mode 100644
index 0000000..62f377f
--- a/dev/null
+++ b/noncore/tools/clock/qpe-clock.control
@@ -0,0 +1,9 @@
+Files: bin/clock apps/Applications/clock.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Clock and stop-watch
+ A simple clock and stop-watch for the Qtopia environment.
diff --git a/noncore/unsupported/filebrowser/.cvsignore b/noncore/unsupported/filebrowser/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/.cvsignore
@@ -0,0 +1,2 @@
+moc_*
+Makefile
diff --git a/noncore/unsupported/filebrowser/Makefile.in b/noncore/unsupported/filebrowser/Makefile.in
new file mode 100644
index 0000000..c7238ea
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/Makefile.in
@@ -0,0 +1,136 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = filebrowser
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = inlineedit.h \
+ filebrowser.h
+SOURCES = filebrowser.cpp \
+ inlineedit.cpp \
+ main.cpp
+OBJECTS = filebrowser.o \
+ inlineedit.o \
+ main.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC = moc_inlineedit.cpp \
+ moc_filebrowser.cpp
+OBJMOC = moc_inlineedit.o \
+ moc_filebrowser.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake filebrowser.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+filebrowser.o: filebrowser.cpp \
+ inlineedit.h \
+ filebrowser.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/global.h \
+ $(QPEDIR)/include/qpe/mimetype.h \
+ $(QPEDIR)/include/qpe/applnk.h \
+ $(QPEDIR)/include/qpe/qpetoolbar.h \
+ $(QPEDIR)/include/qpe/qpemenubar.h
+
+inlineedit.o: inlineedit.cpp \
+ inlineedit.h
+
+main.o: main.cpp \
+ filebrowser.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/mimetype.h
+
+moc_inlineedit.o: moc_inlineedit.cpp \
+ inlineedit.h
+
+moc_filebrowser.o: moc_filebrowser.cpp \
+ filebrowser.h
+
+moc_inlineedit.cpp: inlineedit.h
+ $(MOC) inlineedit.h -o moc_inlineedit.cpp
+
+moc_filebrowser.cpp: filebrowser.h
+ $(MOC) filebrowser.h -o moc_filebrowser.cpp
+
+
diff --git a/noncore/unsupported/filebrowser/filebrowser.cpp b/noncore/unsupported/filebrowser/filebrowser.cpp
new file mode 100644
index 0000000..9439bb8
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/filebrowser.cpp
@@ -0,0 +1,850 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "inlineedit.h"
+#include "filebrowser.h"
+
+#include <qpe/resource.h>
+#include <qpe/global.h>
+#include <qpe/mimetype.h>
+#include <qpe/applnk.h>
+
+#include <qcopchannel_qws.h>
+#include <qmessagebox.h>
+#include <qdir.h>
+#include <qregexp.h>
+#include <qheader.h>
+#include <qpe/qpetoolbar.h>
+#include <qpopupmenu.h>
+#include <qpe/qpemenubar.h>
+#include <qaction.h>
+#include <qstringlist.h>
+#include <qcursor.h>
+#include <qmultilineedit.h>
+#include <qfont.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+//
+// FileItem
+//
+FileItem::FileItem( QListView * parent, const QFileInfo & fi )
+ : QListViewItem( parent ),
+ fileInfo( fi )
+{
+ QDate d = fi.lastModified().date();
+
+ setText( 0, fi.fileName() );
+ setText( 1, sizeString( fi.size() ) + " " );
+ setText( 2, QString().sprintf("%4d-%02d-%02d",d.year(), d.month(), d.day() ) );
+
+ MimeType mt(fi.filePath());
+
+ if( fi.isDir() )
+ setText( 3, "directory" );
+ else if( isLib() )
+ setText( 3, "library" );
+ else
+ setText( 3, mt.description() );
+
+ QPixmap pm;
+ if( fi.isDir() ){
+ if( !QDir( fi.filePath() ).isReadable() )
+ pm = Resource::loadPixmap( "lockedfolder" );
+ else
+ pm = Resource::loadPixmap( "folder" );
+ }
+ else if( !fi.isReadable() )
+ pm = Resource::loadPixmap( "locked" );
+ else if( isLib() )
+ pm = Resource::loadPixmap( "library" );
+ else
+ pm = mt.pixmap();
+ if ( pm.isNull() )
+ pm = Resource::loadPixmap("UnknownDocument-14");
+ setPixmap(0,pm);
+}
+
+QString FileItem::sizeString( unsigned int s )
+{
+ double size = s;
+
+ if ( size > 1024 * 1024 * 1024 )
+ return QString().sprintf( "%.1f", size / ( 1024 * 1024 * 1024 ) ) + "G";
+ else if ( size > 1024 * 1024 )
+ return QString().sprintf( "%.1f", size / ( 1024 * 1024 ) ) + "M";
+ else if ( size > 1024 )
+ return QString().sprintf( "%.1f", size / ( 1024 ) ) + "K";
+ else
+ return QString::number( size ) + "B";
+}
+
+QString FileItem::key( int column, bool ascending ) const
+{
+ QString tmp;
+
+ ascending = ascending;
+
+ if( (column == 0) && fileInfo.isDir() ){ // Sort by name
+ // We want the directories to appear at the top of the list
+ tmp = (char) 0;
+ return (tmp + text( column ).lower());
+ }
+ else if( column == 2 ) { // Sort by date
+ QDateTime epoch( QDate( 1980, 1, 1 ) );
+ tmp.sprintf( "%08d", epoch.secsTo( fileInfo.lastModified() ) );
+ return tmp;
+ }
+ else if( column == 1 ) { // Sort by size
+ return tmp.sprintf( "%08d", fileInfo.size() );
+ }
+
+ return text( column ).lower();
+}
+
+bool FileItem::isLib()
+{
+ // This is of course not foolproof
+ if( !qstrncmp("lib", fileInfo.baseName(), 3) &&
+ ( fileInfo.extension().contains( "so" ) ||
+ fileInfo.extension().contains( "a" ) ) )
+ return TRUE;
+ else
+ return FALSE;
+}
+
+int FileItem::launch()
+{
+ DocLnk doc( fileInfo.filePath(), FALSE );
+ doc.execute();
+ listView()->clearSelection();
+ return 1;
+}
+
+bool FileItem::rename( const QString & name )
+{
+ QString oldpath, newpath;
+
+ if ( name.isEmpty() )
+ return FALSE;
+
+ if ( name.contains( QRegExp("[/\\$\"\'\\*\\?]") ) )
+ return FALSE;
+
+ oldpath = fileInfo.filePath();
+ newpath = fileInfo.dirPath() + "/" + name;
+
+ if ( ::rename( (const char *) oldpath, (const char *) newpath ) != 0 )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+//
+// FileView
+//
+FileView::FileView( const QString & dir, QWidget * parent,
+ const char * name )
+ : QListView( parent, name ),
+ menuTimer( this ),
+ le( NULL ),
+ itemToRename( NULL )
+{
+ addColumn( "Name" );
+ addColumn( "Date" );
+ addColumn( "Size" );
+ addColumn( "Type" );
+
+ setMultiSelection( TRUE );
+ header()->hide();
+
+ setColumnWidthMode( 0, Manual );
+ setColumnWidthMode( 3, Manual );
+
+ // right align yize column
+ setColumnAlignment( 1, AlignRight );
+
+ generateDir( dir );
+
+ connect( this, SIGNAL( clicked( QListViewItem * )),
+ SLOT( itemClicked( QListViewItem * )) );
+ connect( this, SIGNAL( doubleClicked( QListViewItem * )),
+ SLOT( itemDblClicked( QListViewItem * )) );
+ connect( this, SIGNAL( selectionChanged() ), SLOT( cancelMenuTimer() ) );
+ connect( &menuTimer, SIGNAL( timeout() ), SLOT( showFileMenu() ) );
+}
+
+void FileView::resizeEvent( QResizeEvent *e )
+{
+ setColumnWidth( 0, width() - 2 * lineWidth() - 20 - columnWidth( 1 ) - columnWidth( 2 ) );
+
+ // hide type column, we use it for "sort by type" only
+ setColumnWidth( 3, 0 );
+ QListView::resizeEvent( e );
+}
+
+void FileView::updateDir()
+{
+ generateDir( currentDir );
+}
+
+void FileView::setDir( const QString & dir )
+{
+ if ( dir.startsWith( "/dev" ) ) {
+ QMessageBox::warning( this, tr( "File Manager" ),
+ tr( "Can't show /dev/ directory." ), tr( "&Ok" ) );
+ return;
+ }
+ dirHistory += currentDir;
+ generateDir( dir );
+}
+
+void FileView::generateDir( const QString & dir )
+{
+ QDir d( dir );
+
+ if( d.exists() && !d.isReadable() ) return;
+
+ currentDir = d.canonicalPath();
+
+ d.setFilter( QDir::Dirs | QDir::Files );
+ d.setSorting( QDir::Name | QDir::DirsFirst | QDir::IgnoreCase |
+ QDir::Reversed );
+
+ const QFileInfoList * list = d.entryInfoList();
+ QFileInfoListIterator it( *list );
+ QFileInfo *fi;
+
+ clear();
+ while( (fi = it.current()) ){
+ if( (fi->fileName() == ".") || (fi->fileName() == "..") ){
+ ++it;
+ continue;
+ }
+ (void) new FileItem( (QListView *) this, *fi );
+ ++it;
+ }
+
+ emit dirChanged();
+}
+
+void FileView::rename()
+{
+ itemToRename = (FileItem *) currentItem();
+ const QPixmap * pm;
+ int pmw;
+
+ if( itemToRename == NULL ) return;
+
+ if( ( pm = itemToRename->pixmap( 0 ) ) == NULL )
+ pmw = 0;
+ else
+ pmw = pm->width();
+
+ ensureItemVisible( itemToRename );
+ horizontalScrollBar()->setValue( 0 );
+ horizontalScrollBar()->setEnabled( FALSE );
+ verticalScrollBar()->setEnabled( FALSE );
+
+ selected = isSelected( itemToRename );
+ setSelected( itemToRename, FALSE );
+
+ if( le == NULL ){
+ le = new InlineEdit( this );
+ le->setFrame( FALSE );
+ connect( le, SIGNAL( lostFocus() ), SLOT( endRenaming() ) );
+ }
+
+ QRect r = itemRect( itemToRename );
+ r.setTop( r.top() + frameWidth() + 1 );
+ r.setLeft( r.left() + frameWidth() + pmw );
+ r.setBottom( r.bottom() + frameWidth() );
+ r.setWidth( columnWidth( 0 ) - pmw );
+
+ le->setGeometry( r );
+ le->setText( itemToRename->text( 0 ) );
+ le->selectAll();
+ le->show();
+ le->setFocus();
+}
+
+void FileView::endRenaming()
+{
+ if( le && itemToRename ){
+ le->hide();
+ setSelected( itemToRename, selected );
+
+ if( !itemToRename->rename( le->text() ) ){
+ QMessageBox::warning( this, tr( "Rename file" ),
+ tr( "Rename failed!" ), tr( "&Ok" ) );
+ } else {
+ updateDir();
+ }
+ itemToRename = NULL;
+ horizontalScrollBar()->setEnabled( TRUE );
+ verticalScrollBar()->setEnabled( TRUE );
+ }
+}
+
+void FileView::copy()
+{
+ // dont keep cut files any longer than necessary
+ // ##### a better inmplementation might be to rename the CUT file
+ // ##### to ".QPE-FILEBROWSER-MOVING" rather than copying it.
+ system ( "rm -rf /tmp/qpemoving" );
+
+ FileItem * i;
+
+ if((i = (FileItem *) firstChild()) == 0) return;
+
+ flist.clear();
+ while( i ){
+ if( i->isSelected() /*&& !i->isDir()*/ ){
+ flist += i->getFilePath();
+ }
+ i = (FileItem *) i->nextSibling();
+ }
+}
+
+void FileView::paste()
+{
+ int i, err;
+ QString cmd, dest, basename, cd = currentDir;
+
+ if(cd == "/") cd = "";
+
+ for ( QStringList::Iterator it = flist.begin(); it != flist.end(); ++it ) {
+ basename = (*it).mid((*it).findRev("/") + 1, (*it).length());
+
+ dest = cd + "/" + basename;
+ if( QFile( dest ).exists() ){
+ i = 1;
+ dest = cd + "/Copy of " + basename;
+ while( QFile( dest ).exists() ){
+ dest.sprintf( "%s/Copy (%d) of %s", (const char *) cd, i++,
+ (const char *) basename );
+ }
+ }
+
+ //
+ // Copy a directory recursively using the "cp" command -
+ // may have to be changed
+ //
+ if( QFileInfo( (*it) ).isDir() ){
+ cmd = "/bin/cp -fpR \"" + (*it) +"\" " + "\"" + dest + "\"";
+ err = system( (const char *) cmd );
+ } else if( !copyFile( dest, (*it) ) ){
+ err = -1;
+ } else {
+ err = 0;
+ }
+
+ if ( err != 0 ) {
+ QMessageBox::warning( this, tr("Paste file"), tr("Paste failed!"),
+ tr("Ok") );
+ break;
+ } else {
+ updateDir();
+ QListViewItem * i = firstChild();
+ basename = dest.mid( dest.findRev("/") + 1, dest.length() );
+
+ while( i ){
+ if( i->text(0) == basename ){
+ setCurrentItem( i );
+ ensureItemVisible( i );
+ break;
+ }
+ i = i->nextSibling();
+ }
+ }
+ }
+}
+
+bool FileView::copyFile( const QString & dest, const QString & src )
+{
+ char bf[ 50000 ];
+ int bytesRead;
+ bool success = TRUE;
+ struct stat status;
+
+ QFile s( src );
+ QFile d( dest );
+
+ if( s.open( IO_ReadOnly | IO_Raw ) &&
+ d.open( IO_WriteOnly | IO_Raw ) )
+ {
+ while( (bytesRead = s.readBlock( bf, sizeof( bf ) )) ==
+ sizeof( bf ) )
+ {
+ if( d.writeBlock( bf, sizeof( bf ) ) != sizeof( bf ) ){
+ success = FALSE;
+ break;
+ }
+ }
+ if( success && (bytesRead > 0) ){
+ d.writeBlock( bf, bytesRead );
+ }
+ } else {
+ success = FALSE;
+ }
+
+ // Set file permissions
+ if( stat( (const char *) src, &status ) == 0 ){
+ chmod( (const char *) dest, status.st_mode );
+ }
+
+ return success;
+}
+
+void FileView::cut()
+{
+ int err;
+ // ##### a better inmplementation might be to rename the CUT file
+ // ##### to ".QPE-FILEBROWSER-MOVING" rather than copying it.
+ QString cmd, dest, basename, cd = "/tmp/qpemoving";
+ QStringList newflist;
+ newflist.clear();
+
+ cmd = "rm -rf " + cd;
+ system ( (const char *) cmd );
+ cmd = "mkdir " + cd;
+ system( (const char *) cmd );
+
+// get the names of the files to cut
+ FileItem * item;
+
+ if((item = (FileItem *) firstChild()) == 0) return;
+
+ flist.clear();
+ while( item ){
+ if( item->isSelected() /*&& !item->isDir()*/ ){
+ flist += item->getFilePath();
+ }
+ item = (FileItem *) item->nextSibling();
+ }
+
+// move these files into a tmp dir
+ for ( QStringList::Iterator it = flist.begin(); it != flist.end(); ++it ) {
+ basename = (*it).mid((*it).findRev("/") + 1, (*it).length());
+
+ dest = cd + "/" + basename;
+
+ newflist += dest;
+
+ cmd = "/bin/mv -f \"" + (*it) +"\" " + "\"" + dest + "\"";
+ err = system( (const char *) cmd );
+
+ if ( err != 0 ) {
+ QMessageBox::warning( this, tr("Cut file"), tr("Cut failed!"),
+ tr("Ok") );
+ break;
+ } else {
+ updateDir();
+ QListViewItem * im = firstChild();
+ basename = dest.mid( dest.findRev("/") + 1, dest.length() );
+
+ while( im ){
+ if( im->text(0) == basename ){
+ setCurrentItem( im );
+ ensureItemVisible( im );
+ break;
+ }
+ im = im->nextSibling();
+ }
+ }
+ }
+
+ // update the filelist to point to tmp dir so paste works nicely
+ flist = newflist;
+}
+
+void FileView::del()
+{
+ FileItem * i;
+ QStringList fl;
+ QString cmd;
+ int err;
+
+ if((i = (FileItem *) firstChild()) == 0) return;
+
+ while( i ){
+ if( i->isSelected() ){
+ fl += i->getFilePath();
+ }
+ i = (FileItem *) i->nextSibling();
+ }
+ if( fl.count() < 1 ) return;
+
+ if( QMessageBox::warning( this, tr("Delete"), tr("Are you sure?"),
+ tr("Yes"), tr("No") ) == 0)
+ {
+ //
+ // Dependant upon the "rm" command - will probably have to be replaced
+ //
+ for ( QStringList::Iterator it = fl.begin(); it != fl.end(); ++it ) {
+ cmd = "/bin/rm -rf \"" + (*it) + "\"";
+ err = system( (const char *) cmd );
+ if ( err != 0 ) {
+ QMessageBox::warning( this, tr("Delete"), tr("Delete failed!"),
+ tr("Ok") );
+ break;
+ }
+ }
+ updateDir();
+ }
+}
+
+void FileView::newFolder()
+{
+ int t = 1;
+ FileItem * i;
+ QString nd = currentDir + "/NewFolder";
+
+ while( QFile( nd ).exists() ){
+ nd.sprintf( "%s/NewFolder (%d)", (const char *) currentDir, t++ );
+ }
+
+ if( mkdir( (const char *) nd, 0777 ) != 0){
+ QMessageBox::warning( this, tr( "New folder" ),
+ tr( "Folder creation failed!" ),
+ tr( "Ok" ) );
+ return;
+ }
+ updateDir();
+
+ if((i = (FileItem *) firstChild()) == 0) return;
+
+ while( i ){
+ if( i->isDir() && ( i->getFilePath() == nd ) ){
+ setCurrentItem( i );
+ rename();
+ break;
+ }
+ i = (FileItem *) i->nextSibling();
+ }
+}
+
+void FileView::viewAsText()
+{
+ FileItem * i = (FileItem *) currentItem();
+ Global::execute( "textedit -f ", i->getFilePath() );
+}
+
+void FileView::itemClicked( QListViewItem * i)
+{
+ FileItem * t = (FileItem *) i;
+
+ if( t == NULL ) return;
+ if( t->isDir() ){
+ setDir( t->getFilePath() );
+ }
+}
+
+void FileView::itemDblClicked( QListViewItem * i)
+{
+ FileItem * t = (FileItem *) i;
+
+ if(t == NULL) return;
+ if(t->launch() == -1){
+ QMessageBox::warning( this, tr( "Launch Application" ),
+ tr( "Launch failed!" ), tr( "Ok" ) );
+ }
+}
+
+void FileView::parentDir()
+{
+ setDir( currentDir + "./.." );
+}
+
+void FileView::lastDir()
+{
+ if( dirHistory.count() == 0 ) return;
+
+ QString newDir = dirHistory.last();
+ dirHistory.remove( dirHistory.last() );
+ generateDir( newDir );
+}
+
+void FileView::contentsMousePressEvent( QMouseEvent * e )
+{
+ QListView::contentsMousePressEvent( e );
+ menuTimer.start( 750, TRUE );
+}
+
+void FileView::contentsMouseReleaseEvent( QMouseEvent * e )
+{
+ QListView::contentsMouseReleaseEvent( e );
+ menuTimer.stop();
+}
+
+void FileView::cancelMenuTimer()
+{
+ if( menuTimer.isActive() )
+ menuTimer.stop();
+}
+
+void FileView::addToDocuments()
+{
+ FileItem * i = (FileItem *) currentItem();
+ DocLnk f;
+ QString n = i->text(0);
+ n.replace(QRegExp("\\..*"),"");
+ f.setName( n );
+ f.setFile( i->getFilePath() );
+ f.writeLink();
+}
+
+void FileView::run()
+{
+ FileItem * i = (FileItem *) currentItem();
+ i->launch();
+}
+
+void FileView::showFileMenu()
+{
+ FileItem * i = (FileItem *) currentItem();
+ if ( !i )
+ return;
+
+ QPopupMenu * m = new QPopupMenu( this );
+
+ if ( !i->isDir() ) {
+ m->insertItem( tr( "Add to Documents" ), this, SLOT( addToDocuments() ) );
+ m->insertSeparator();
+ }
+
+ MimeType mt(i->getFilePath());
+ const AppLnk* app = mt.application();
+
+ if ( !i->isDir() ) {
+ if ( app )
+ m->insertItem( app->pixmap(), tr( "Open in " + app->name() ), this, SLOT( run() ) );
+ else if( i->isExecutable() )
+ m->insertItem( Resource::loadPixmap( i->text( 0 ) ), tr( "Run" ), this, SLOT( run() ) );
+
+ m->insertItem( Resource::loadPixmap( "txt" ), tr( "View as text" ),
+ this, SLOT( viewAsText() ) );
+
+ m->insertSeparator();
+ }
+
+ m->insertItem( tr( "Rename" ), this, SLOT( rename() ) );
+ m->insertItem( Resource::loadPixmap("cut"),
+ tr( "Cut" ), this, SLOT( cut() ) );
+ m->insertItem( Resource::loadPixmap("copy"),
+ tr( "Copy" ), this, SLOT( copy() ) );
+ m->insertItem( Resource::loadPixmap("paste"),
+ tr( "Paste" ), this, SLOT( paste() ) );
+ m->insertItem( tr( "Delete" ), this, SLOT( del() ) );
+ m->insertSeparator();
+ m->insertItem( tr( "Select all" ), this, SLOT( selectAll() ) );
+ m->insertItem( tr( "Deselect all" ), this, SLOT( deselectAll() ) );
+ m->popup( QCursor::pos() );
+}
+
+//
+// FileBrowser
+//
+
+FileBrowser::FileBrowser( QWidget * parent,
+ const char * name, WFlags f ) :
+ QMainWindow( parent, name, f )
+{
+ init( QDir::current().canonicalPath() );
+}
+
+FileBrowser::FileBrowser( const QString & dir, QWidget * parent,
+ const char * name, WFlags f ) :
+ QMainWindow( parent, name, f )
+{
+ init( dir );
+}
+
+void FileBrowser::init(const QString & dir)
+{
+ setCaption( tr("File Manager") );
+ setIcon( Resource::loadPixmap( "filebrowser_icon" ) );
+
+ fileView = new FileView( dir, this );
+ fileView->setAllColumnsShowFocus( TRUE );
+
+ setCentralWidget( fileView );
+ setToolBarsMovable( FALSE );
+
+ QPEToolBar* toolBar = new QPEToolBar( this );
+ toolBar->setHorizontalStretchable( TRUE );
+
+ QPEMenuBar* menuBar = new QPEMenuBar( toolBar );
+
+ dirMenu = new QPopupMenu( this );
+ menuBar->insertItem( tr( "Dir" ), dirMenu );
+
+ sortMenu = new QPopupMenu( this );
+ menuBar->insertItem( tr( "Sort" ), sortMenu );
+ sortMenu->insertItem( tr( "by Name "), this, SLOT( sortName() ) );
+ sortMenu->insertItem( tr( "by Size "), this, SLOT( sortSize() ) );
+ sortMenu->insertItem( tr( "by Date "), this, SLOT( sortDate() ) );
+ sortMenu->insertItem( tr( "by Type "), this, SLOT( sortType() ) );
+ sortMenu->insertSeparator();
+ sortMenu->insertItem( tr( "Ascending" ), this, SLOT( updateSorting() ) );
+ sortMenu->setItemChecked( sortMenu->idAt( 5 ), TRUE );
+ sortMenu->setItemChecked( sortMenu->idAt( 0 ), TRUE );
+
+ toolBar = new QPEToolBar( this );
+
+ lastAction = new QAction( tr("Previous dir"), Resource::loadIconSet( "back" ),
+ QString::null, 0, this, 0 );
+ connect( lastAction, SIGNAL( activated() ), fileView, SLOT( lastDir() ) );
+ lastAction->addTo( toolBar );
+ lastAction->setEnabled( FALSE );
+
+ upAction = new QAction( tr("Parent dir"), Resource::loadIconSet( "up" ),
+ QString::null, 0, this, 0 );
+ connect( upAction, SIGNAL( activated() ), fileView, SLOT( parentDir() ) );
+ upAction->addTo( toolBar );
+
+ QAction *a = new QAction( tr("New folder"), Resource::loadPixmap( "newfolder" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), fileView, SLOT( newFolder() ) );
+ a->addTo( toolBar );
+
+ a = new QAction( tr("Cut"), Resource::loadPixmap( "cut" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), fileView, SLOT( cut() ) );
+ a->addTo( toolBar );
+
+ a = new QAction( tr("Copy"), Resource::loadPixmap( "copy" ),
+ QString::null, 0, this, 0 );
+ connect( a, SIGNAL( activated() ), fileView, SLOT( copy() ) );
+ a->addTo( toolBar );
+
+ pasteAction = new QAction( tr("Paste"), Resource::loadPixmap( "paste" ),
+ QString::null, 0, this, 0 );
+ connect( pasteAction, SIGNAL( activated() ), fileView, SLOT( paste() ) );
+ pasteAction->addTo( toolBar );
+
+
+ connect( fileView, SIGNAL( dirChanged() ), SLOT( updateDirMenu() ) );
+ updateDirMenu();
+
+ QCopChannel* pcmciaChannel = new QCopChannel( "QPE/Card", this );
+ connect( pcmciaChannel, SIGNAL(received(const QCString &, const QByteArray &)),
+ this, SLOT(pcmciaMessage( const QCString &, const QByteArray &)) );
+}
+
+void FileBrowser::pcmciaMessage( const QCString &msg, const QByteArray &)
+{
+ if ( msg == "mtabChanged()" ) {
+ // ## Only really needed if current dir is on a card
+ fileView->updateDir();
+ }
+}
+
+void FileBrowser::dirSelected( int id )
+{
+ int i = 0, j;
+ QString dir;
+
+ // Bulid target dir from menu
+ while( (j = dirMenu->idAt( i )) != id ){
+ dir += dirMenu->text( j ).stripWhiteSpace();
+ if( dirMenu->text( j ) != "/" ) dir += "/";
+ i++;
+ }
+ dir += dirMenu->text( dirMenu->idAt( i ) ).stripWhiteSpace();
+
+ fileView->setDir( dir );
+}
+
+void FileBrowser::updateDirMenu()
+{
+ QString spc, cd = fileView->cd();
+ QStringList l = QStringList::split( "/", cd );
+ int i = 0;
+
+ dirMenu->clear();
+ dirMenu->insertItem( tr( "/" ), this, SLOT( dirSelected(int) ) );
+
+ for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) {
+ spc.fill( ' ', i++);
+ dirMenu->insertItem( spc + (*it), this,
+ SLOT( dirSelected(int) ) );
+ }
+ dirMenu->setItemChecked( dirMenu->idAt( l.count() ), TRUE );
+
+ lastAction->setEnabled( fileView->history().count() != 0 );
+ upAction->setEnabled( cd != "/" );
+}
+
+void FileBrowser::sortName()
+{
+ fileView->setSorting( 0, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );
+ fileView->sort();
+ sortMenu->setItemChecked( sortMenu->idAt( 0 ), TRUE );
+ sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE );
+}
+
+void FileBrowser::sortSize()
+{
+ fileView->setSorting( 1, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );
+ fileView->sort();
+ sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 1 ), TRUE );
+ sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE );
+}
+
+void FileBrowser::sortDate()
+{
+ fileView->setSorting( 2, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );
+ fileView->sort();
+ sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 2 ), TRUE );
+ sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE );
+}
+
+void FileBrowser::sortType()
+{
+ fileView->setSorting( 3, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );
+ fileView->sort();
+ sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE );
+ sortMenu->setItemChecked( sortMenu->idAt( 3 ), TRUE );
+}
+
+void FileBrowser::updateSorting()
+{
+ sortMenu->setItemChecked( sortMenu->idAt( 5 ), !sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) );
+
+ if ( sortMenu->isItemChecked( sortMenu->idAt( 0 ) ) )
+ sortName();
+ else if ( sortMenu->isItemChecked( sortMenu->idAt( 1 ) ) )
+ sortSize();
+ else if ( sortMenu->isItemChecked( sortMenu->idAt( 2 ) ) )
+ sortDate();
+ else
+ sortType();
+}
diff --git a/noncore/unsupported/filebrowser/filebrowser.h b/noncore/unsupported/filebrowser/filebrowser.h
new file mode 100644
index 0000000..2e9e444
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/filebrowser.h
@@ -0,0 +1,141 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef FILEBROWSER_H
+#define FILEBROWSER_H
+
+#include <qlistview.h>
+#include <qmainwindow.h>
+#include <qfileinfo.h>
+#include <qaction.h>
+#include <qtimer.h>
+#include <qstringlist.h>
+
+class InlineEdit;
+
+class FileItem : public QListViewItem
+{
+public:
+ FileItem( QListView * parent, const QFileInfo & fi );
+
+ QString key( int column, bool ascending = TRUE ) const;
+ QString getFilePath(){ return fileInfo.filePath(); }
+ QString getFileName(){ return fileInfo.fileName(); }
+ bool isDir(){ return fileInfo.isDir(); }
+ bool isExecutable(){ return fileInfo.isExecutable(); }
+ bool isLib();
+ int launch();
+ bool rename( const QString & name );
+private:
+ QString sizeString( unsigned int size );
+ QFileInfo fileInfo;
+};
+
+
+class FileView : public QListView
+{
+ Q_OBJECT
+
+public:
+ FileView( const QString & dir, QWidget * parent = 0,
+ const char * name = 0 );
+ void setDir( const QString & dir );
+ QString cd(){ return currentDir; }
+ QStringList history() const { return dirHistory; }
+
+public slots:
+ void updateDir();
+ void parentDir();
+ void lastDir();
+
+ void rename();
+ void copy();
+ void paste();
+ void del();
+ void cut();
+ void newFolder();
+ void viewAsText();
+
+protected:
+ void generateDir( const QString & dir );
+ void resizeEvent( QResizeEvent* );
+ void contentsMousePressEvent( QMouseEvent * e );
+ void contentsMouseReleaseEvent( QMouseEvent * e );
+
+protected slots:
+ void itemClicked( QListViewItem * i );
+ void itemDblClicked( QListViewItem * i );
+ void showFileMenu();
+ void cancelMenuTimer();
+ void selectAll(){ QListView::selectAll( TRUE ); }
+ void deselectAll(){ QListView::selectAll( FALSE ); }
+ void addToDocuments();
+ void run();
+ void endRenaming();
+
+private:
+ QString currentDir;
+ QStringList dirHistory, flist;
+ QTimer menuTimer;
+ InlineEdit * le;
+ FileItem * itemToRename;
+ bool selected;
+
+ bool copyFile( const QString & dest, const QString & src );
+
+signals:
+ void dirChanged();
+ void textViewActivated( QWidget * w );
+ void textViewDeactivated();
+};
+
+class FileBrowser : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ FileBrowser( QWidget * parent = 0,
+ const char * name = 0, WFlags f = 0 );
+ FileBrowser( const QString & dir, QWidget * parent = 0,
+ const char * name = 0, WFlags f = 0 );
+private:
+ void init(const QString & dir);
+ QString fileToCopy;
+ QPopupMenu * dirMenu, * sortMenu;
+ FileView * fileView;
+ QAction * pasteAction;
+ QAction *lastAction;
+ QAction *upAction;
+
+ bool copyFile( const QString & dest, const QString & src );
+
+private slots:
+ void pcmciaMessage( const QCString &msg, const QByteArray &);
+
+ void sortName();
+ void sortDate();
+ void sortSize();
+ void sortType();
+ void updateSorting();
+
+ void updateDirMenu();
+ void dirSelected( int id );
+};
+
+#endif
diff --git a/noncore/unsupported/filebrowser/filebrowser.pro b/noncore/unsupported/filebrowser/filebrowser.pro
new file mode 100644
index 0000000..34df79a
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/filebrowser.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = $(QPEDIR)/bin
+HEADERS = inlineedit.h \
+ filebrowser.h
+SOURCES = filebrowser.cpp \
+ inlineedit.cpp \
+ main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES =
diff --git a/noncore/unsupported/filebrowser/inlineedit.cpp b/noncore/unsupported/filebrowser/inlineedit.cpp
new file mode 100644
index 0000000..47c500a
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/inlineedit.cpp
@@ -0,0 +1,30 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "inlineedit.h"
+
+InlineEdit::InlineEdit( QWidget * parent, const char * name )
+ : QLineEdit( parent, name )
+{
+}
+
+void InlineEdit::focusOutEvent( QFocusEvent * )
+{
+ emit lostFocus();
+}
diff --git a/noncore/unsupported/filebrowser/inlineedit.h b/noncore/unsupported/filebrowser/inlineedit.h
new file mode 100644
index 0000000..3fbfdd6
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/inlineedit.h
@@ -0,0 +1,39 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef INLINEEDIT_H
+#define INLINEEDIT_H
+
+#include <qlineedit.h>
+
+class InlineEdit : public QLineEdit
+{
+ Q_OBJECT
+
+public:
+ InlineEdit( QWidget * parent = 0, const char * name = 0 );
+
+signals:
+ void lostFocus();
+
+protected:
+ void focusOutEvent( QFocusEvent * );
+};
+
+#endif
diff --git a/noncore/unsupported/filebrowser/main.cpp b/noncore/unsupported/filebrowser/main.cpp
new file mode 100644
index 0000000..7304786
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/main.cpp
@@ -0,0 +1,41 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "filebrowser.h"
+
+#include <qpe/qpeapplication.h>
+#include <qpe/mimetype.h>
+
+#include <qmainwindow.h>
+#include <qfileinfo.h>
+#include <qdir.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ MimeType::updateApplications();
+ FileBrowser mw( QDir::current().canonicalPath() );
+ mw.resize( 240, 320 );
+ mw.setCaption( FileBrowser::tr("File Manager") );
+ a.showMainWidget( &mw );
+
+ return a.exec();
+}
diff --git a/noncore/unsupported/filebrowser/qpe-filebrowser.control b/noncore/unsupported/filebrowser/qpe-filebrowser.control
new file mode 100644
index 0000000..c55fe6a
--- a/dev/null
+++ b/noncore/unsupported/filebrowser/qpe-filebrowser.control
@@ -0,0 +1,9 @@
+Files: bin/filebrowser apps/Applications/filebrowser.desktop
+Priority: optional
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Browse the file system
+ The filebrowser for the Qtopia environment.
diff --git a/noncore/unsupported/oipkg/.cvsignore b/noncore/unsupported/oipkg/.cvsignore
new file mode 100644
index 0000000..3791def
--- a/dev/null
+++ b/noncore/unsupported/oipkg/.cvsignore
@@ -0,0 +1,10 @@
+Makefile
+moc_*
+pkfind.cpp
+pkfind.h
+pksettings.cpp
+pksettings.h
+pkdesc.cpp
+pkdesc.h
+packagemanagerbase.cpp
+packagemanagerbase.h
diff --git a/noncore/unsupported/oipkg/Makefile.in b/noncore/unsupported/oipkg/Makefile.in
new file mode 100644
index 0000000..8dd7edb
--- a/dev/null
+++ b/noncore/unsupported/oipkg/Makefile.in
@@ -0,0 +1,203 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH = -I$(QPEDIR)/include
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QPEDIR)/bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = qipkg
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = packagemanager.h
+SOURCES = packagemanager.cpp \
+ main.cpp
+OBJECTS = packagemanager.o \
+ main.o \
+ packagemanagerbase.o \
+ pkdesc.o \
+ pkfind.o \
+ pksettings.o
+INTERFACES = packagemanagerbase.ui \
+ pkdesc.ui \
+ pkfind.ui \
+ pksettings.ui
+UICDECLS = packagemanagerbase.h \
+ pkdesc.h \
+ pkfind.h \
+ pksettings.h
+UICIMPLS = packagemanagerbase.cpp \
+ pkdesc.cpp \
+ pkfind.cpp \
+ pksettings.cpp
+SRCMOC = moc_packagemanager.cpp \
+ moc_packagemanagerbase.cpp \
+ moc_pkdesc.cpp \
+ moc_pkfind.cpp \
+ moc_pksettings.cpp
+OBJMOC = moc_packagemanager.o \
+ moc_packagemanagerbase.o \
+ moc_pkdesc.o \
+ moc_pkfind.o \
+ moc_pksettings.o
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake qipkg.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+packagemanager.o: packagemanager.cpp \
+ packagemanager.h \
+ packagemanagerbase.h \
+ pkdesc.h \
+ pkfind.h \
+ pksettings.h \
+ $(QPEDIR)/include/qpe/process.h \
+ $(QPEDIR)/include/qpe/resource.h \
+ $(QPEDIR)/include/qpe/stringutil.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h \
+ $(QPEDIR)/include/qpe/qcopenvelope_qws.h \
+ $(QPEDIR)/include/qpe/applnk.h
+
+main.o: main.cpp \
+ packagemanager.h \
+ packagemanagerbase.h \
+ $(QPEDIR)/include/qpe/qpeapplication.h
+
+packagemanagerbase.h: packagemanagerbase.ui
+ $(UIC) packagemanagerbase.ui -o $(INTERFACE_DECL_PATH)/packagemanagerbase.h
+
+packagemanagerbase.cpp: packagemanagerbase.ui
+ $(UIC) packagemanagerbase.ui -i packagemanagerbase.h -o packagemanagerbase.cpp
+
+pkdesc.h: pkdesc.ui
+ $(UIC) pkdesc.ui -o $(INTERFACE_DECL_PATH)/pkdesc.h
+
+pkdesc.cpp: pkdesc.ui
+ $(UIC) pkdesc.ui -i pkdesc.h -o pkdesc.cpp
+
+pkfind.h: pkfind.ui
+ $(UIC) pkfind.ui -o $(INTERFACE_DECL_PATH)/pkfind.h
+
+pkfind.cpp: pkfind.ui
+ $(UIC) pkfind.ui -i pkfind.h -o pkfind.cpp
+
+pksettings.h: pksettings.ui
+ $(UIC) pksettings.ui -o $(INTERFACE_DECL_PATH)/pksettings.h
+
+pksettings.cpp: pksettings.ui
+ $(UIC) pksettings.ui -i pksettings.h -o pksettings.cpp
+
+packagemanagerbase.o: packagemanagerbase.cpp
+
+pkdesc.o: pkdesc.cpp
+
+pkfind.o: pkfind.cpp
+
+pksettings.o: pksettings.cpp
+
+moc_packagemanager.o: moc_packagemanager.cpp \
+ packagemanager.h \
+ packagemanagerbase.h
+
+moc_packagemanagerbase.o: moc_packagemanagerbase.cpp \
+ packagemanagerbase.h
+
+moc_pkdesc.o: moc_pkdesc.cpp \
+ pkdesc.h
+
+moc_pkfind.o: moc_pkfind.cpp \
+ pkfind.h
+
+moc_pksettings.o: moc_pksettings.cpp \
+ pksettings.h
+
+moc_packagemanager.cpp: packagemanager.h
+ $(MOC) packagemanager.h -o moc_packagemanager.cpp
+
+moc_packagemanagerbase.cpp: packagemanagerbase.h
+ $(MOC) packagemanagerbase.h -o moc_packagemanagerbase.cpp
+
+moc_pkdesc.cpp: pkdesc.h
+ $(MOC) pkdesc.h -o moc_pkdesc.cpp
+
+moc_pkfind.cpp: pkfind.h
+ $(MOC) pkfind.h -o moc_pkfind.cpp
+
+moc_pksettings.cpp: pksettings.h
+ $(MOC) pksettings.h -o moc_pksettings.cpp
+
+
diff --git a/noncore/unsupported/oipkg/ipkg/available b/noncore/unsupported/oipkg/ipkg/available
new file mode 100644
index 0000000..a9a8ddc
--- a/dev/null
+++ b/noncore/unsupported/oipkg/ipkg/available
@@ -0,0 +1,2256 @@
+Package: ae
+Priority: optional
+Section: editors
+Installed-Size: 144
+Debian-Maintainer: Dale Scheetz (Dwarf #1) <dwarf@polaris.net>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 962-30
+Depends: libc6 (>= 2.2.1-2), slang1 (>> 1.3.0-0)
+Filename: ./ae_962-30_arm.ipk
+Size: 15635
+MD5Sum: 96f0a0a9e1c3edede3fbdd605fc4a2bb
+Description: Anthony's Editor -- a tiny full-screen editor
+ ae is a tiny full-screen text editor with both modal (vi-like)
+ and modeless (emacs-like) modes, determined by an ae.rc config file.
+
+Package: apmd
+Priority: extra
+Section: admin
+Installed-Size: 284
+Debian-Maintainer: Avery Pennarun <apenwarr@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 3.0final-1
+Depends: libc6 (>= 2.1.2), xlib6g (>= 3.3-5), xlib6g (>= 3.3.6)
+Filename: ./apmd_3.0final-1_arm.ipk
+Size: 6863
+MD5Sum: 3dcb9b6ae51b923058f0a167c7dcb680
+Description: Utilities for Advanced Power Management (APM) on laptops
+ On laptop computers, the Advanced Power Management (APM) support
+ provides access to battery status information and may help you to
+ conserve battery power, depending on your laptop and the APM
+ implementation. The apmd program also lets you run arbitrary programs
+ when APM events happen (for example, you can eject PCMCIA devices when
+ you suspend, or change hard drive timeouts when you connect the battery).
+ .
+ This package contains apmd(8), a daemon for logging and acting on APM
+ events, apm(1), a client that prints /proc/apm, xapm(1x), an X11 utility
+ that displays a little graph, on_ac_power(1), a program for shell scripts
+ to determine if wall power is connected, and tailf(1) which follows the
+ growth of a log file without writing to disk.
+ .
+ The Debian default kernel does *not* contain APM support, because it causes
+ problems on some computers. So, you need to recompile your kernel
+ and enable APM support during configuration; the corresponding questions
+ are in the 'Character devices' section.
+ .
+
+Package: ash
+Essential: yes
+Priority: required
+Section: shells
+Installed-Size: 152
+Debian-Maintainer: Herbert Xu <herbert@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 0.3.7-16
+Pre-Depends: libc6 (>= 2.2.1-2)
+Filename: ./ash_0.3.7-16_arm.ipk
+Size: 51495
+MD5Sum: 1d1f163c5655cee3c62c053b818aadb2
+Description: NetBSD /bin/sh
+ "ash" is a POSIX compliant shell that is much smaller than "bash".
+ We take advantage of that by making it the shell on the installation
+ root floppy, where space is at a premium.
+ .
+ It can be usefully installed as /bin/sh (because it executes scripts
+ somewhat faster than "bash"), or as the default shell either of root
+ or of a second user with a userid of 0 (because it depends on fewer
+ libraries, and is therefore less likely to be affected by an upgrade
+ problem or a disk failure). It is also useful for checking that a
+ script uses only POSIX syntax.
+ .
+ "bash" is a better shell for most users, since it has some nice
+ features absent from "ash", and is a required part of the system.
+
+Package: bash
+Version: 2.03-6
+Section: base
+Priority: required
+Architecture: arm
+Pre-Depends: libc6 (>= 2.1.2), libncurses5
+Depends: base-files (>= 2.1.12)
+Installed-Size: 748
+Debian-Maintainer: Matthias Klose <doko@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Filename: ./bash_2.03-6_arm.ipk
+Size: 224887
+MD5Sum: 07f98861afc6d22427dd35700b342c68
+Description: The GNU Bourne Again SHell
+ Bash is an sh-compatible command language interpreter that executes
+ commands read from the standard input or from a file. Bash also
+ incorporates useful features from the Korn and C shells (ksh and csh).
+ .
+ Bash is ultimately intended to be a conformant implementation of the
+ IEEE Posix Shell and Tools specification (IEEE Working Group 1003.2).
+
+Package: blackbox
+Priority: optional
+Version: 0.1
+Architecture: arm
+Maintainer: Alexander Guy <a7r@handhelds.org>
+Depends: libc6, xlibs, libfreetype6, libstdc++2.10-glibc2.2, libxft, libxrender
+Filename: ./blackbox_0.1_arm.ipk
+Size: 145909
+MD5Sum: 02648d34fdbe00260fcb692abc9e7705
+Description: blackbox window manager
+
+Package: checkers
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs, libfreetype6, libstdc++2.10-glibc2.2, libfltk1
+Filename: ./checkers_0.0_arm.ipk
+Size: 20117
+MD5Sum: 45d08b5ead7c474711e77efcce6bff12
+Description: Play checkers against the computer
+
+Package: cpu-scale-2.4.3-rmk1-np2
+Priority: standard
+Version: 2.4.3rmk1np2
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: modutils
+Filename: ./cpu-scale-2.4.3-rmk1-np2_2.4.3rmk1np2_arm.ipk
+Size: 4068
+MD5Sum: d1b1f8bcfa511ef0a966b8435a61d69b
+Description: support for scaling the speed of the SA-1110 processor
+ This package contains a kernel module which will allow the speed of
+ the SA-1110 processor to be adjusted via /proc/scale
+
+Package: debianutils
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 172
+Debian-Maintainer: Guy Maor <maor@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.15
+Replaces: miscutils, cron (<=3.0pl1-31), debian-utils, tetex-bin (<< 1.0.6-1.1)
+Pre-Depends: libc6 (>= 2.1.97)
+Conflicts: debian-utils
+Filename: ./debianutils_1.15_arm.ipk
+Size: 9430
+MD5Sum: ce83af3644fd050fcd97988dc7074184
+Description: Miscellaneous utilities specific to Debian.
+ Debianutils includes installkernel mkboot mktemp readlink run-parts savelog
+ sensible-editor sensible-pager tempfile which.
+
+Package: dev-files
+Essential: yes
+Version: 0.4
+Priority: required
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Filename: ./dev-files_0.4_arm.ipk
+Size: 2880
+MD5Sum: d4848a628a22fe664f35da48a56e98f4
+Description: devices files for /dev directory
+ This package contains a collection of devices files for /dev. I'm
+ not sure who came up with the list -- I just grabbed it from
+ familiar v0.4 bleeding. Perhaps we'll want to switch to devfs in
+ the kernel and eliminate this package?
+
+Package: diff
+Priority: optional
+Section: base
+Installed-Size: 276
+Debian-Maintainer: Santiago Vila <sanvila@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.7-24
+Pre-Depends: libc6 (>= 2.2.1-2)
+Filename: ./diff_2.7-24_arm.ipk
+Size: 35043
+MD5Sum: b016146c47582743d57144d13d5cb14c
+Description: File comparison utilities
+ `diff' shows differences between two files, or each corresponding file
+ in two directories.
+ .
+ The set of differences produced by `diff' can be used to distribute
+ updates to text files (such as program source code) to other people.
+ This method is especially useful when the differences are small compared
+ to the complete files. Given `diff' output, the `patch' program can
+ update, or "patch", a copy of the file.
+
+Package: dosfstools
+Priority: optional
+Section: otherosfs
+Installed-Size: 126
+Debian-Maintainer: Roman Hodek <roman@hodek.net>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.8-1
+Replaces: mkdosfs
+Depends: libc6 (>= 2.2.1-2)
+Conflicts: mkdosfs
+Filename: ./dosfstools_2.8-1_arm.ipk
+Size: 14197
+MD5Sum: 8fe452f8337b43071f1fa9558b24ac0b
+Description: Utilities to create and check MS-DOS FAT filesystems
+ Inside of this package there are two utilities to create and to
+ check MS-DOS FAT filesystems on either harddisks or floppies under
+ Linux. This version uses the enhanced boot sector/superblock
+ format of DOS 3.3+ as well as provides a default dummy boot sector
+ code.
+
+Package: e2fsprogs
+Priority: required
+Section: base
+Installed-Size: 584
+Debian-Maintainer: Yann Dirson <dirson@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.19-4
+Replaces: e2fslibsg, ss2g, comerr2g
+Provides: libcomerr2, libss2, libext2fs2, libe2p2, libuuid1, e2fslibsg
+Pre-Depends: libc6 (>= 2.2.1-2)
+Suggests: gpart, parted
+Conflicts: e2fslibsg, dump (<< 0.4b4-4), quota (<< 1.55-8.1)
+Filename: ./e2fsprogs_1.19-4_arm.ipk
+Size: 135371
+MD5Sum: b61f3677ee894669d066d244969da387
+Description: The EXT2 file system utilities and libraries.
+ EXT2 stands for "Extended Filesystem", version 2. It's the main
+ filesystem type used for hard disks on Debian and other Linux systems.
+ .
+ This package contains programs for creating, checking, and maintaining EXT2
+ filesystems, and the generic `fsck' wrapper.
+
+Package: familiar-base
+Essential: yes
+Priority: required
+Version: 0.10
+Architecture: arm
+Maintainer: Alexander Guy <a7r@handhelds.org>
+Depends: sysvinit (>= 2.72)
+Pre-Depends: libc6 (>= 2.1.97)
+Filename: ./familiar-base_0.10_arm.ipk
+Size: 16749
+MD5Sum: f8da9c14594bbf9fd5350b5df072cfbd
+Description: essential files for a familiar installation
+ This package is a bit of a catch-all for files that need to be
+ installed with familiar, (I made this package from everything that
+ was still left over after I split off the rest of the files from
+ familiar v0.4 bleeding into their own packages) . Much of what it is
+ here is simply emty directories that must exist. Also, there are
+ some files here which may be created by scripts in Debian that we
+ are not yet runnging. There are probably several files here that
+ should move to other packages.
+
+Package: familiar-postinst
+Priority: optional
+Version: 0.1
+Architecture: arm
+Maintainer: Alexander Guy <a7r@handhelds.org>
+Depends: wget, ntpdate
+Filename: ./familiar-postinst_0.1_arm.ipk
+Size: 1022
+MD5Sum: f246e2efdcd8c798426e394426e327c1
+Description: A collection of shell scripts to do postinstall polishing.
+ These scripts download some of Microsoft's core True-Type Fonts,
+ as well as sync the handheld's time against a public NTP server.
+
+Package: fileutils
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 1892
+Debian-Maintainer: Michael Stone <mstone@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 4.0.43-1
+Replaces: color-ls, util-linux (<= 2.7.1-1)
+Pre-Depends: libc6 (>= 2.2.1-2)
+Conflicts: color-ls
+Filename: ./fileutils_4.0.43-1_arm.ipk
+Size: 244849
+MD5Sum: 96584322c797c44b0dc2171973b406c3
+Description: GNU file management utilities.
+ The utilities: chgrp chmod chown cp dd df dir dircolors du install ln
+ ls mkdir mkfifo mknod mv rm rmdir shred touch vdir sync.
+
+Package: fscrib
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs, libxaw7
+Filename: ./fscrib_0.0_arm.ipk
+Size: 120261
+MD5Sum: 916dd41f2ed4b0fe3b4ea08d3a80633e
+Description: Full-screen character recognition
+
+Package: fstroke
+Priority: optional
+Version: 0.2-fam1
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs, libxaw7
+Filename: ./fstroke_0.2-fam1_arm.ipk
+Size: 16248
+MD5Sum: f4fba9d28f724936cca622f374ce9347
+Description: Full-screen modeless character recognizer
+
+Package: ftp
+Version: 0.10-3.1
+Section: net
+Priority: standard
+Architecture: arm
+Depends: libc6 (>= 2.1.2), libncurses5, libreadline4 (>= 4.1)
+Replaces: netstd
+Installed-Size: 156
+Debian-Maintainer: Herbert Xu <herbert@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Filename: ./ftp_0.10-3.1_arm.ipk
+Size: 33962
+MD5Sum: d8c10c5d6d03be0b84964c885927e077
+Description: The FTP client.
+ ftp is the user interface to the ARPANET standard File Transfer Protocol.
+ The program allows a user to transfer files to and from a remote network
+ site.
+Source: netkit-ftp
+
+Package: gdk-imlib1
+Priority: optional
+Section: libs
+Installed-Size: 372
+Debian-Maintainer: Ossama Othman <ossama@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: imlib
+Version: 1.9.8.1-2
+Replaces: gdk-imlib-nonfree1, libgdk-imlib-nonfree1, libgdk-imlib1
+Provides: gdk-imlib, libgdk-imlib1
+Depends: imlib-base (>= 1.9.8.1-2), libc6 (>= 2.1.97), libglib1.2 (>= 1.2.0), libjpeg62, libpng2, libtiff3g, libungif3g (>= 3.0-2) | giflib3g (>= 3.0-5.2), zlib1g (>= 1:1.1.3)
+Suggests: imlib-progs, imagemagick, netpbm, libjpeg-progs
+Conflicts: gdk-imlib-nonfree1, libgdk-imlib-nonfree1, libgdk-imlib1
+Filename: ./gdk-imlib1_1.9.8.1-2_arm.ipk
+Size: 62912
+MD5Sum: 38e2feac77d8a95288de100ed3109454
+Description: Gdk-Imlib is an imaging library for use with gtk
+ Gdk-Imlib is a low-level gdk interface for gtk programmers. It allows easier
+ access to many graphics formats and can write to them as well.
+
+Package: grep
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 488
+Debian-Maintainer: Wichert Akkerman <wakkerma@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.4.2-1
+Provides: rgrep
+Pre-Depends: libc6 (>= 2.1.2)
+Conflicts: rgrep
+Filename: ./grep_2.4.2-1_arm.ipk
+Size: 119438
+MD5Sum: 67fa4cb756f951fda7b7a5d4da2ab523
+Description: GNU grep, egrep and fgrep.
+ The GNU family of grep utilities may be the "fastest grep in the west".
+ GNU grep is based on a fast lazy-state deterministic matcher (about
+ twice as fast as stock Unix egrep) hybridized with a Boyer-Moore-Gosper
+ search for a fixed string that eliminates impossible text from being
+ considered by the full regexp matcher without necessarily having to
+ look at every character. The result is typically many times faster
+ than Unix grep or egrep. (Regular expressions containing backreferencing
+ will run more slowly, however.)
+
+Package: gzip
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 130
+Debian-Maintainer: Bdale Garbee <bdale@gag.com>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.2.4-33
+Depends: debianutils (>= 1.6)
+Pre-Depends: libc6 (>= 2.1)
+Filename: ./gzip_1.2.4-33_arm.ipk
+Size: 30103
+MD5Sum: e98844d058d1909781782abea0182887
+Description: The GNU compression utility.
+ This is the standard GNU file compression utility, which is also the default
+ compression tool for Debian. It typically operates on files with names
+ ending in '.gz'.
+ .
+ This package can also decompress '.Z' files created with 'compress'.
+
+Package: h3600-utils
+Priority: standard
+Version: 0.4
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6
+Filename: ./h3600-utils_0.4_arm.ipk
+Size: 2736
+MD5Sum: 5071017b84fb30c7ae33e3da97dfad80
+Description: utilities for controlling hardware on Compaq iPAQ H3600 series computers
+ This package contains programs for controlling the backlight (sic)
+ as well as the leds on the Compaq iPAQ H3600 series of handheld
+ computers.
+
+Package: hostname
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 37
+Debian-Maintainer: Adam Heath <doogie@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.07
+Pre-Depends: libc6 (>= 2.1)
+Filename: ./hostname_2.07_arm.ipk
+Size: 5277
+MD5Sum: 2e3ed84ee965ed6bb7619b443b228d63
+Description: A utility to set/show the host name or domain name
+ The hostname command can be used to either set or display
+ the current host or domain name of the system. This name is
+ used by many of the networking programs to identify the machine.
+ The domain name is also used by NIS/YP.
+
+Package: ifupdown
+Priority: important
+Section: base
+Installed-Size: 168
+Debian-Maintainer: Anthony Towns <ajt@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 0.6.4-3
+Replaces: netbase (<< 4.00)
+Depends: net-tools, libc6 (>= 2.1.2)
+Suggests: iproute
+Filename: ./ifupdown_0.6.4-3_arm.ipk
+Size: 11654
+MD5Sum: 7d60dcafa9a3526aca1fa566024e6e42
+Description: High level tools to configure network interfaces
+ This package provides the tools ifup and ifdown which may be used to
+ configure (or, respectively, deconfigure) network interfaces, based on
+ the file /etc/network/interfaces.
+
+Package: intimateboot
+Priority: optional
+Section: extras
+Installed-Size: 40960
+Debian-Maintainer: Nicols Lichtmaier <nick@debian.org>
+Maintainer: James Conner <jim@secret.org.uk>
+Architecture: arm
+Version: 050301
+Depends: reiserfs-module (= 2.4.1-rmk1-np1 )
+Filename: ./intimateboot_050301_arm.ipk
+Size: 2518
+MD5Sum: 92532bfa8875aae0746d6901192b3cd2
+Description: This package provides the necessary boot scripts to optionally make the intimate distribution boot up. If a valid boot image for intimate is not found, then the system will boot Familiar from flash as normal. The package provides an additional linuxrc script, which may be run as an alternative to the normal one. It also provides devfs support via a small script. Booting via microdrive or NFS is supported, but you must preconfigure NFS paths etc before starting. IMPORTANT : You will need to change the linuxargs in the bootloader after installing this package. This is done by entering... 'set linuxargs "noinited devfs=mount root=/dev/mtdblock3 init=/linuxrc.intimate console=ttySA0"' and 'params save' at the boot> prompt.
+
+
+Package: ion-nasty-hacks
+Priority: optional
+Version: 200102160-fam1
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs
+Filename: ./ion-nasty-hacks_200102160-fam1_arm.ipk
+Size: 58518
+MD5Sum: 79a39fcb686adf83942ad50ad32845f4
+Description: a text-editorish, keyboard/stylus friendly window manager
+
+Package: ipkg
+Essential: yes
+Priority: required
+Version: 0.4-fam1
+Architecture: all
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: shellutils, textutils, sed, grep, gzip, tar, wget
+Filename: ./ipkg_0.4-fam1_all.ipk
+Size: 5306
+MD5Sum: 6502942cc864d29cf005925a168747cd
+Description: Lightweight package management system
+
+Package: irda-common
+Version: 0.9.14-3
+Section: misc
+Priority: optional
+Architecture: arm
+Depends: libc6 (>= 2.2.1-2)
+Conflicts: irda-utils
+Replaces: irda-utils
+Installed-Size: 100
+Debian-Maintainer: NOKUBI Takatsugu <knok@daionet.gr.jp>
+Maintainer: Alexander Guy <a7r@andern.org>
+Source: irda-utils
+Filename: ./irda-common_0.9.14-3_arm.ipk
+Size: 5259
+MD5Sum: d41a70d88dbf47b63bf601cbe176b121
+Description: IrDA management utilities
+ IrDA management utilities for Linux.
+ This package contains irmanager and irattach.
+
+Package: irda-modules-2.4.3-rmk2-np1
+Priority: extra
+Maintainer: Alexander Guy <a7r@andern.org>
+Depends: kernel-modules-2.4.3-rmk2-np1
+Version: fam3
+Architecture: arm
+Filename: ./irda-modules-2.4.3-rmk2-np1_fam3_arm.ipk
+Size: 194859
+MD5Sum: 7af6f1d272eb0cb135162fb9f9bb2c76
+Description: IrDA kernel modules
+ The entire suite of kernel modules required to use both SIR and FIR
+ IrDA. This includes IrCOMM, and IrLAN support.
+
+Package: iv
+Essential: yes
+Priority: required
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Provides: vi
+Depends: libc6
+Filename: ./iv_0.0_arm.ipk
+Size: 8364
+MD5Sum: 9cf155930e6db23ddece8705df27d99d
+Description: Lightweight reimplementation of vi <attribution?>
+
+Package: kernel-modules-2.4.3-rmk2-np1
+Essential: yes
+Priority: required
+Version: fam3
+Architecture: arm
+Maintainer: Alexander Guy <a7r@andern.org>
+Depends: modutils
+Filename: ./kernel-modules-2.4.3-rmk2-np1_fam3_arm.ipk
+Size: 585458
+MD5Sum: 2cd52706ce0157337664414bc6e75943
+Description: kernel modules for kernel 2.4.3-rmk2-np1
+ This package contains almost all of the kernel modules that might be
+ useful within familiar. Eventually I would like to split many of
+ these modules off into their own packages that would have dependency
+ links from the programs that need them. For example, e2fsprogs could
+ depend on e2fs-kernel-modules or something like that. I have already
+ split off cpu-scale and the pcmcia modules into their own packages.
+
+Package: less
+Version: 346-7
+Section: text
+Priority: standard
+Architecture: arm
+Depends: libc6 (>= 2.1.2), libncurses5, debianutils (>= 1.8)
+Installed-Size: 163
+Debian-Maintainer: Thomas Schoepf <schoepf@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Filename: ./less_346-7_arm.ipk
+Size: 41734
+MD5Sum: 617280f25bba9c4b03e631af7cd969b2
+Description: A file pager program, similar to more(1)
+ Less is a program similar to more (1), but which allows backward
+ movement in the file as well as forward movement. Also, less does not
+ have to read the entire input file before starting, so with large input
+ files it starts up faster than text editors like vi (1). Less uses
+ termcap (or terminfo on some systems), so it can run on a variety of
+ terminals. There is even limited support for hardcopy terminals.
+ .
+ Homepage: http://www.flash.net/~marknu/less/
+
+Package: libc6
+Priority: required
+Section: base
+Installed-Size: 13104
+Debian-Maintainer: Ben Collins <bcollins@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: glibc
+Version: 2.2.2-1
+Replaces: ldso (<= 1.9.11-9), timezone, timezones, gconv-modules, libtricks
+Provides: gconv-modules, glibc2.2
+Suggests: locales, glibc-doc
+Conflicts: libdb2 (= 2:2.7.7-2.1), timezone, timezones, gconv-modules, libtricks, libc6-doc
+Filename: ./libc6_2.2.2-1_arm.ipk
+Size: 1100492
+MD5Sum: 4944634b673b732d4a9fc8ec87a1447c
+Description: GNU C Library: Shared libraries and Timezone data
+ Contains the standard libraries that are used by nearly all programs on
+ the system. This package includes shared versions of the standard C library
+ and the standard math library, as well as many others.
+ Timezone data is also included.
+
+Package: libdb2
+Priority: optional
+Section: libs
+Installed-Size: 388
+Debian-Maintainer: Ben Collins <bcollins@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Source: db
+Version: 2:2.7.7-3
+Architecture: arm
+Replaces: libdb2.6, lib-bdb2
+Depends: libc6 (>= 2.2.1-2)
+Conflicts: lib-bdb2
+Filename: ./libdb2_2.7.7-3_arm.ipk
+Size: 138089
+MD5Sum: ed771a8cdf8225b98db3c61b39a05d07
+Description: The Berkeley database routines (run-time files).
+ libdb2 is a library for manipulating database files, developed at
+ Berkeley and extended by Sleepycat Software Inc.
+ This is the stable version, also commercially supported.
+ .
+ It supports three kinds of file formats:
+ * btree. A representation of a sorted, balanced tree structure.
+ * hashed. An extensible, dynamic hashing scheme.
+ * UNIX file oriented. A byte stream file with fixed or variable
+ length records.
+ Other core database services:
+ * page cache management for fast access, clean page allocation.
+ * lock with multiple reader/writer granularity.
+ * nested transaction support with logging and rollback recovery
+ (two phase commit).
+ * Large set of utility, to dump/load/restore data and examine log.
+
+Package: libfltk1
+Priority: optional
+Section: libs
+Installed-Size: 370
+Debian-Maintainer: Fabrizio Polacco <fpolacco@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: fltk
+Version: 1.0.9-1.1
+Depends: libc6 (>= 2.2.1-2), libgl1, libstdc++2.10-glibc2.2, xlibs (>= 4.0.1-11)
+Filename: ./libfltk1_1.0.9-1.1_arm.ipk
+Size: 186802
+MD5Sum: 59c552236fc0e89fd4fb7474d6fbfe0a
+Description: The Fast Light Toolkit, a GUI toolkit inspired by libForms
+ This is a very nice LGPL'd graphic user interface toolkit originally based on
+ libForms. Programs written using libForms will hopefully be ported to libfltk
+ in the future and will need this package to run.
+
+Package: libfreetype6
+Priority: optional
+Section: libs
+Installed-Size: 396
+Debian-Maintainer: Anthony Fok <foka@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: freetype
+Version: 2.0.1.20010317-1
+Replaces: freetype0, freetype1
+Depends: libc6 (>= 2.2.1-2)
+Suggests: libfreetype6-dev
+Conflicts: freetype
+Filename: ./libfreetype6_2.0.1.20010317-1_arm.ipk
+Size: 106977
+MD5Sum: 639030e1e406cc87c44db49a70de9f34
+Description: FreeType 2 font engine, shared library files.
+ The FreeType project is a team of volunteers who develop free,
+ portable and high-quality software solutions for digital typography.
+ They specifically target embedded systems and focus on bringing small,
+ efficient and ubiquitous products.
+ .
+ The FreeType 2 library is their new software font engine. It has been
+ designed to provide the following important features:
+ * A universal and simple API to manage font files
+ * Support for several font formats through loadable modules
+ * High-quality anti-aliasing
+ * High portability & performance
+ .
+ Supported font formats include:
+ * TrueType files (.ttf) and collections (.ttc)
+ * Type 1 font files both in ASCII (.pfa) or binary (.pfb) format
+ * Type 1 Multiple Master fonts. The FreeType 2 API also provides
+ routines to manage design instances easily
+ * Type 1 CID-keyed fonts
+ * OpenType/CFF (.otf) fonts
+ * CFF/Type 2 fonts
+ * Adobe CEF fonts (.cef), used to embed fonts in SVG documents with
+ the Adobe SVG viewer plugin.
+ * Windows FNT/FON bitmap fonts
+ .
+ This package contains the files needed to run programs that use the
+ FreeType 2 library.
+ .
+ Home Page: http://www.freetype.org/
+ Authors: David Turner <david.turner@freetype.org>
+ Robert Wilhelm <robert.wilhelm@freetype.org>
+ Werner Lemberg <werner.lemberg@freetype.org>
+
+Package: libglade0
+Priority: optional
+Section: libs
+Installed-Size: 164
+Debian-Maintainer: Paolo Molaro <lupus@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: libglade
+Version: 0.16-2
+Depends: libc6 (>= 2.2.1-2), libglib1.2 (>= 1.2.0), libgtk1.2 (>= 1.2.8-3), libxml1, xlibs (>= 4.0.1-11), zlib1g (>= 1:1.1.3)
+Filename: ./libglade0_0.16-2_arm.ipk
+Size: 35028
+MD5Sum: 26211c69d51e1f8abd45022eaadb25b1
+Description: Library to load .glade files at runtime.
+ This library allows you to load user interfaces in your program, which are
+ stored externally. This allows alteration of the interface without
+ recompilation of the program.
+ .
+ The interfaces can also be edited with GLADE.
+
+Package: libglib1.2
+Priority: optional
+Section: libs
+Installed-Size: 264
+Debian-Maintainer: Ben Gertzfield <che@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: glib1.2
+Version: 1.2.10-1
+Replaces: libgtk-doc
+Depends: libc6 (>= 2.2.1-2)
+Suggests: libgtk1.2
+Filename: ./libglib1.2_1.2.10-1_arm.ipk
+Size: 68147
+MD5Sum: 1fe1ad635bc78331c9e3ae27406ddc12
+Description: The GLib library of C routines
+ GLib is a library containing many useful C routines for things such
+ as trees, hashes, and lists. GLib was previously distributed with
+ the GTK+ toolkit, but has been split off as of the developers' version
+ 1.1.0.
+ .
+ You do not need to install this package if you have libgtk1 (note 1,
+ not 1.1 or 1.2) installed. libgtk1 included libglib in it. libgtk1.1
+ and libgtk1.2, however, do need libglib1.1 to be installed separately.
+
+Package: libgtk1.2
+Priority: optional
+Section: libs
+Installed-Size: 2184
+Debian-Maintainer: Ben Gertzfield <che@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: gtk+1.2
+Version: 1.2.10-1
+Replaces: libgtk1.1.5, libgtk1.1.6, libgtk1.1.9, libgtk1.1.11, libgtk1.1.12, libgtk1.1.13, libgtk1.1.14, libgtk1.1.15, libgtk1.1.16
+Depends: libc6 (>= 2.2.1-2), libglib1.2 (>= 1.2.0), xlibs (>= 4.0.1-11)
+Pre-Depends: dpkg (>= 1.6.8)
+Conflicts: libgtk-dev (<< 1:1.0.2)
+Filename: ./libgtk1.2_1.2.10-1_arm.ipk
+Size: 602094
+MD5Sum: b0ff676813a80f1017876b125bb9bad0
+Description: The GIMP Toolkit set of widgets for X
+ The GIMP Toolkit is a freely available set of widgets for X.
+ GTK is easy to use, and has been implemented in such projects as
+ The GNU Image Manipulation Program (The GIMP), GNOME, a GNU
+ desktop set of utilities for X, and gzilla, a GNU web-browser.
+
+Package: libjpeg62
+Priority: optional
+Section: libs
+Installed-Size: 204
+Debian-Maintainer: Mark Mickan <mmickan@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: libjpeg6b
+Version: 6b-1.3
+Replaces: libjpeg6b
+Provides: libjpeg6b
+Depends: libc6 (>= 2.2.1-2)
+Conflicts: libjpeg6b
+Filename: ./libjpeg62_6b-1.3_arm.ipk
+Size: 64434
+MD5Sum: 2cabfc091e7755c93a3d78b2dff48f0f
+Description: The Independent JPEG Group's JPEG runtime library [libc6]
+ This package contains the shared library.
+
+Package: libncurses5
+Version: 5.0-6.0potato1
+Section: base
+Priority: required
+Architecture: arm
+Depends: libc6 (>= 2.1.2), ncurses-base
+Installed-Size: 427
+Debian-Maintainer: Joel Klecker <ncurses-maint@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Filename: ./libncurses5_5.0-6.0potato1_arm.ipk
+Size: 101390
+MD5Sum: 6f1a19d05c5f8d312efb33e05318d714
+Description: Shared libraries for terminal handling
+ This package contains the shared libraries necessary to run programs
+ compiled with ncurses.
+Source: ncurses
+
+Package: libpam0g
+Priority: required
+Section: base
+Installed-Size: 152
+Debian-Maintainer: Sam Hartman <hartmans@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: pam
+Version: 0.72-21
+Replaces: libpam0g-util
+Depends: libc6 (>= 2.2.1-2), libpam-runtime
+Suggests: libpam-doc
+Conflicts: libpam0 (<= 0.56-2), libpam
+Filename: ./libpam0g_0.72-21_arm.ipk
+Size: 18191
+MD5Sum: 21196b782a3327aa39382825db2d64f1
+Description: Pluggable Authentication Modules library
+ Contains the C shared library for Linux-PAM, a suite of shared
+ libraries that enable the local system administrator to choose how
+ applications authenticate users. In other words, without rewriting
+ or recompiling a PAM-aware application, it is possible to switch
+ between the authentication mechanism(s) it uses. One may entirely
+ upgrade the local authentication system without touching the
+ applications themselves.
+
+Package: libpam-modules
+Priority: required
+Section: base
+Installed-Size: 472
+Debian-Maintainer: Sam Hartman <hartmans@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: pam
+Version: 0.72-21
+Replaces: libpam0g-util
+Provides: libpam-motd, libpam-mkhomedir
+Depends: libc6 (>= 2.2.1-2), libcap1, libdb3 (>= 3.2.9-1), libpam0g (>= 0.72-1)
+Conflicts: libpam0g-modules (= 0.66-1), libpam-motd, libpam-mkhomedir, suidmanager (<< 0.50)
+Filename: ./libpam-modules_0.72-21_arm.ipk
+Size: 20438
+MD5Sum: 23a98606804b0600dcc81ff26ad5772f
+Description: Pluggable Authentication Modules for PAM
+ This package completes the set of modules for PAM. It includes the
+ the pam_unix_*.so module as well as some specialty modules.
+
+Package: libpam-runtime
+Priority: required
+Section: base
+Installed-Size: 132
+Debian-Maintainer: Sam Hartman <hartmans@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: pam
+Version: 0.72-21
+Replaces: libpam0g-util, libpam0g-dev
+Conflicts: libpam0g-util, libpam0g (<< 0.66-0)
+Filename: ./libpam-runtime_0.72-21_arm.ipk
+Size: 2495
+MD5Sum: 183d85691a48163576f7b62e8cc43184
+Description: Runtime support for the PAM library
+ Contains the base setup for libpam
+
+Package: libpng2
+Priority: standard
+Section: libs
+Installed-Size: 288
+Debian-Maintainer: Philippe Troin <phil@fifi.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: libpng
+Version: 1.0.8-1
+Depends: libc6 (>= 2.1.2), libz1
+Filename: ./libpng2_1.0.8-1_arm.ipk
+Size: 74734
+MD5Sum: ef8044db7824d9e486c6d9fb1c677168
+Description: PNG library - runtime
+ libpng is a library implementing an interface for reading and writing
+ PNG (Portable Network Graphics) format files.
+ .
+ This library is more recent than libpng0g, and you should use it rather
+ than libpng0g (which is for legacy packages).
+
+Package: libpopt0
+Priority: important
+Section: base
+Installed-Size: 92
+Debian-Maintainer: Joseph Carter <knghtbrd@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: popt
+Version: 1.5-0.1
+Replaces: popt
+Depends: libc6 (>= 2.1.2)
+Conflicts: popt, libpopt-dev (<= 1.4-1)
+Filename: ./libpopt0_1.5-0.1_arm.ipk
+Size: 11129
+MD5Sum: 9a43286e1b181448f36a1939d4cea530
+Description: lib for parsing cmdline parameters
+ Popt was heavily influenced by the getopt() and getopt_long() functions,
+ but it allows more powerful argument expansion. It can parse arbitrary
+ argv[] style arrays and automatically set variables based on command
+ line arguments. It also allows command line arguments to be aliased via
+ configuration files and includes utility functions for parsing arbitrary
+ strings into argv[] arrays using shell-like rules.
+ .
+ This package contains the runtime library and locale data.
+
+Package: libreadline4
+Version: 4.1-1
+Section: base
+Priority: required
+Architecture: arm
+Depends: libc6 (>= 2.1.2), libncurses5
+Installed-Size: 260
+Debian-Maintainer: Matthias Klose <doko@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Filename: ./libreadline4_4.1-1_arm.ipk
+Size: 67959
+MD5Sum: bb6ad084c0b2b9b6251f43d5ddd2e28e
+Description: GNU readline and history libraries, run-time libraries.
+ The GNU readline library aids in the consistency of user interface
+ across discrete programs that need to provide a command line
+ interface.
+ .
+ The GNU history library provides a consistent user interface for
+ recalling lines of previously typed input.
+Source: readline4
+
+Package: libssl0.9.6
+Priority: optional
+Section: non-us/main
+Installed-Size: 1062
+Debian-Maintainer: Christoph Martin <christoph.martin@uni-mainz.de>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: openssl
+Version: 0.9.6a-1
+Replaces: libssl, libssl096
+Provides: libssl096
+Depends: libc6 (>= 2.2.1-2), libssl0.9.6
+Conflicts: ssleay (<< 0.9.2b), libssl, openssl (<< 0.9.6-2), libssl096, libssl096-dev (<< 0.9.6-2)
+Filename: ./libssl0.9.6_0.9.6a-1_arm.ipk
+Size: 309622
+MD5Sum: d1d6d8f48a48eb86f22e89f1a7f8dc06
+Description: SSL shared libraries
+ libssl and libcrypto shared libraries needed by programs like
+ apache-ssl, telnet-ssl and openssh.
+ .
+ It is part of the OpenSSL implementation of SSL.
+
+Package: libstdc++2.10-glibc2.2
+Priority: required
+Section: base
+Installed-Size: 328
+Debian-Maintainer: Debian GCC maintainers <gcc@packages.debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: gcc-2.95 (2.95.4.ds1-0.010407)
+Version: 1:2.95.4-0.010407
+Depends: libc6 (>= 2.2.1-2)
+Filename: ./libstdc++2.10-glibc2.2_2.95.4-0.010407_arm.ipk
+Size: 161222
+MD5Sum: 3d5c530f551cb14aaaccfcb2c221741f
+Description: The GNU stdc++ library
+ NOTE: This is not a final release, but taken from the CVS gcc-2_95-branch
+ (dated 20010407).
+ .
+ This package contains an additional runtime library for C++ programs
+ built with the GNU compiler.
+
+Package: libungif3g
+Priority: optional
+Section: graphics
+Installed-Size: 88
+Debian-Maintainer: Adam Heath <doogie@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: libungif
+Version: 3.0-3
+Replaces: giflib3g
+Provides: giflib3g
+Depends: libc6 (>= 2.1.2), xlib6g (>= 3.3.6)
+Conflicts: libgif3g, libgif2, giflib3g
+Filename: ./libungif3g_3.0-3_arm.ipk
+Size: 16148
+MD5Sum: 65985228c87656161d3bdcfb1771185e
+Description: shared library for GIF images (runtime lib)
+ This is a shared library for working with GIF images.
+ .
+ The libungif library is a specially modified version of giflib which
+ is free of the Unisys LZW patent. It can read all GIFs, but only
+ write uncompressed GIFs. If you need to be able to write compressed
+ GIFs, you can install the non-free giflib packages instead (which may
+ not be available on CD).
+
+Package: libwrap0
+Priority: important
+Section: base
+Installed-Size: 136
+Debian-Maintainer: Anthony Towns <ajt@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: tcp-wrappers
+Version: 7.6-7
+Depends: libc6 (>= 2.1.2)
+Recommends: tcpd
+Conflicts: netbase (<< 3.16-1)
+Filename: ./libwrap0_7.6-7_arm.ipk
+Size: 13202
+MD5Sum: 18fd9d5e2f2e30652ee460aa1e97a5b1
+Description: Wietse Venema's TCP wrappers library
+ Wietse Venema's network logger, also known as TCPD or LOG_TCP.
+ .
+ These programs log the client host name of incoming telnet,
+ ftp, rsh, rlogin, finger etc. requests. Security options are:
+ access control per host, domain and/or service; detection of
+ host name spoofing or host address spoofing; booby traps to
+ implement an early-warning system.
+
+Package: libxaw6
+Priority: optional
+Section: libs
+Installed-Size: 372
+Debian-Maintainer: Branden Robinson <branden@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: xfree86
+Version: 4.0.2-13
+Replaces: xlib6g (<< 4.0)
+Depends: libc6 (>= 2.2.1-2), xlibs (>= 4.0.1-11)
+Conflicts: xlib6g (<< 4.0)
+Filename: ./libxaw6_4.0.2-13_arm.ipk
+Size: 125255
+MD5Sum: e5b9dbfc091f69133156ae0c53e80f43
+Description: X Athena widget set library (version 6)
+ Xaw is a widget set based on the the Xt (X Toolkit Intrinsics) library.
+ It provides a set of graphical user-interface elements ("widgets") such as
+ menus, scrollbars, dialog boxes, text-input areas, and so forth. The X
+ clients distributed with the X Window System itself, as well as many
+ others, use the Athena widget set.
+ .
+ The version of the Athena widgets in this package corresponds to the
+ X11R6.4 release of the X Window System. XFree86 has made significant
+ enhancements to the Athena widget set; their version can be found in the
+ libxaw7 package.
+
+Package: libxaw7
+Priority: optional
+Section: libs
+Installed-Size: 484
+Debian-Maintainer: Branden Robinson <branden@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: xfree86
+Version: 4.0.2-13
+Depends: libc6 (>= 2.2.1-2), xlibs (>= 4.0.1-11)
+Filename: ./libxaw7_4.0.2-13_arm.ipk
+Size: 176321
+MD5Sum: 19b82bde7d895cf3227e5e5aa20c4222
+Description: X Athena widget set library
+ Xaw is a widget set based on the the Xt (X Toolkit Intrinsics) library.
+ It provides a set of graphical user-interface elements ("widgets") such as
+ menus, scrollbars, dialog boxes, text-input areas, and so forth. The X
+ clients distributed with the X Window System itself, as well as many
+ others, use the Athena widget set.
+ .
+ XFree86 has made a number of major improvements to the Athena widget set,
+ resulting in version 7 -- this version features widgets customizable in
+ appearance and event handling (a.k.a. "themes"); an extensible image
+ loader (currently supports bitmaps, gradients, and pixmaps); numerous
+ enhancements to the Text widget, text source and text sink objects; and
+ multiple-column support in the SimpleMenu widget.
+ .
+ The older Athena widget library corresponding to version X11R6.4 of the X
+ Window System can be found in the libxaw6 package.
+
+Package: libxft
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6
+Filename: ./libxft_0.0_arm.ipk
+Size: 44433
+MD5Sum: 5c9660cd2b8f1317a6ce677b094708ff
+Description: libxft <needs better description here>
+
+Package: libxml1
+Priority: optional
+Section: libs
+Installed-Size: 480
+Debian-Maintainer: Fredrik Hallenberg <hallon@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: libxml
+Version: 1:1.8.11-1
+Replaces: libxml0
+Provides: libxml0
+Depends: libc6 (>= 2.1.97), zlib1g (>= 1:1.1.3)
+Conflicts: libxml0
+Filename: ./libxml1_1.8.11-1_arm.ipk
+Size: 122515
+MD5Sum: ffc5f30c0e229aec973ba2dedf8bf38a
+Description: GNOME XML library
+ XML is a metalanguage to let you design your own markup language.
+ A regular markup language defines a way to describe information in
+ a certain class of documents (eg HTML). XML lets you define your
+ own customized markup languages for many classes of document. It
+ can do this because it's written in SGML, the international standard
+ metalanguage for markup languages.
+
+Package: libxmltok1
+Priority: optional
+Section: libs
+Installed-Size: 176
+Debian-Maintainer: Ardo van Rangelrooij <ardo@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: libxmltok
+Version: 1.1-5
+Depends: libc6 (>= 2.1.97)
+Filename: ./libxmltok1_1.1-5_arm.ipk
+Size: 36765
+MD5Sum: 2669363932f3538598690504e8bd843b
+Description: XML Parser Toolkit, runtime libraries
+ Libraries for XML parsing in C, which contains the shared libraries,
+ libxmltok and libxmlparser. These libraries are being used, for
+ instance, for XML support to Netscape 5 and the Perl module,
+ XML::Parser.
+ .
+ Author: James Clark <jjc@jclark.com>
+ Homepage: http://www.jclark.com/xml/expat.html
+
+Package: libxrender
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6
+Filename: ./libxrender_0.0_arm.ipk
+Size: 7748
+MD5Sum: ddc4cf38278e868247db1daf82d3390d
+Description: X rendering extension
+
+Package: loadmeter
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs
+Filename: ./loadmeter_0.0_arm.ipk
+Size: 17294
+MD5Sum: 68863f7c94238b4902722e9555a40f52
+Description: graphical CPU load montitoring
+
+Package: login
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 312
+Debian-Maintainer: Ben Collins <bcollins@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: shadow
+Version: 20000902-3.1
+Replaces: shadow-login, shadow-passwd, shellutils (<< 2.0-2)
+Depends: libpam-modules (>= 0.72-5)
+Pre-Depends: libc6 (>= 2.2.1-2), libpam0g (>= 0.72-1)
+Conflicts: shadow-login, pam-apps, secure-su, suidregister (<< 0.50)
+Filename: ./login_20000902-3.1_arm.ipk
+Size: 24402
+MD5Sum: 7817225e43bb8e999f89c58152d23de4
+Description: System login tools
+ These tools are required to be able to login and use your system. The
+ login program invokes you user shell and enables command execution. The
+ newgrp program is used to change your effective group ID (useful for
+ workgroup type situations). The su program allows changing your effective
+ user ID (useful being able to execute commands as another user).
+ .
+ Also supplies a logout daemon that can place limits on when, from where,
+ and for how long certain users can login to the system.
+
+Package: lrzsz
+Essential: yes
+Priority: required
+Section: comm
+Installed-Size: 264
+Debian-Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 0.12.21-4
+Depends: libc6 (>= 2.2.1-2)
+Suggests: minicom
+Filename: ./lrzsz_0.12.21-4_arm.ipk
+Size: 64893
+MD5Sum: 6f1a0ea3c0bc986b96c916192fe318ab
+Description: Tools for zmodem/xmodem/ymodem file transfer
+ Lrzsz is a cosmetically modified zmodem/ymodem/xmodem package built
+ from the public-domain version of Chuck Forsberg's rzsz package.
+ .
+ These programs use error correcting protocols ({z,x,y}modem) to send
+ (sz, sx, sb) and receive (rz, rx, rb) files over a dial-in serial port
+ from a variety of programs running under various operating systems.
+
+Package: madplay
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6
+Filename: ./madplay_0.0_arm.ipk
+Size: 70830
+MD5Sum: 5ff68a920d656af9c8aaefaa1362a0f1
+Description: Fast, high-quality, fixed-point MP3 player
+
+Package: mingle
+Priority: optional
+Version: 0.1
+Architecture: arm
+Maintainer: Gareth J. Greenaway <gareth@wiked.org>
+Depends: python
+Filename: ./mingle_0.1_arm.ipk
+Size: 51136
+MD5Sum: 5954457eb75f93c38f941d283ea05f50
+Description: Mingle contact manager illustrating the use of the Familiar Framework project.
+
+Package: mixer
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs
+Filename: ./mixer_0.0_arm.ipk
+Size: 8729
+MD5Sum: 50d2997c142037603450e53c6af14bf6
+Description: control audio levels graphically
+
+Package: modutils
+Priority: required
+Section: base
+Installed-Size: 564
+Debian-Maintainer: Wichert Akkerman <wakkerma@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.4.2-1
+Replaces: manpages (<=1.15-3)
+Depends: libc6 (>= 2.1.97), sysvinit (>=2.71-2)
+Suggests: ksymoops
+Filename: ./modutils_2.4.2-1_arm.ipk
+Size: 113605
+MD5Sum: 8046533303655791c7c1a16f76224346
+Description: Linux module utilities.
+ These utilities are intended to make a Linux modular kernel
+ manageable for all users, administrators and distribution
+ maintainers.
+Origin: debian
+Bugs: debbugs://bugs.debian.org/
+
+Package: mount
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 228
+Debian-Maintainer: Adrian Bunk <bunk@fs.tum.de>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: util-linux
+Version: 2.11b-2
+Pre-Depends: libc6 (>= 2.2.1-2)
+Filename: ./mount_2.11b-2_arm.ipk
+Size: 41072
+MD5Sum: ddc0df15fb6d3aac711d0a77172df6c2
+Description: Tools for mounting and manipulating filesystems.
+ This package provides the mount(8), umount(8), swapon(8),
+ swapoff(8), and losetup(8) commands.
+
+Package: ncurses-base
+Priority: required
+Section: base
+Installed-Size: 222
+Debian-Maintainer: Daniel Jacobowitz <ncurses-maint@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: all
+Source: ncurses
+Version: 5.2.20010318-1
+Replaces: ncurses-term
+Provides: ncurses-runtime
+Conflicts: ncurses, ncurses-runtime
+Filename: ./ncurses-base_5.2.20010318-1_all.ipk
+Size: 8901
+MD5Sum: 67746347774792cff7d97adf0ff4c272
+Description: Descriptions of common terminal types
+ This package contains what should be a reasonable subset of terminal
+ definitions, including: ansi, dumb, linux, rxvt, screen, sun, vt100,
+ vt102, vt220, vt52, and xterm.
+
+Package: netbase
+Priority: important
+Section: base
+Installed-Size: 110
+Debian-Maintainer: Anthony Towns <ajt@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: all
+Version: 4.05
+Depends: net-tools | iproute, ifupdown, ipchains | ipfwadm | iptables, netkit-inetd, tcpd, netkit-ping | iputils-ping
+Suggests: debconf, ipmasqadm | ipautofw | iptables, portmap, netkit-rpc
+Conflicts: xinetd (<= 2.2.1-8), netstd (<< 3.00), nfs-user-server (<< 2.2beta47-9), nis (<= 3.6-2), rstatd (<= 3.03-3), rwalld (<= 0.16-1), rusersd (<= 0.17-1), ugidd (<< 2.2beta47-9)
+Filename: ./netbase_4.05_all.ipk
+Size: 9502
+MD5Sum: 029f1dffa57f6b23f97b08b5262dfc38
+Description: Basic TCP/IP networking system
+ This package provides the necessary infrastructure for basic TCP/IP based
+ networking.
+
+Package: netcat
+Priority: optional
+Section: net
+Installed-Size: 228
+Debian-Maintainer: Decklin Foster <decklin@red-bean.com>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.10-17
+Depends: libc6 (>= 2.2.1-2)
+Filename: ./netcat_1.10-17_arm.ipk
+Size: 12265
+MD5Sum: 14101b949ee963abb64de99130725c6f
+Description: TCP/IP swiss army knife
+ A simple Unix utility which reads and writes data across network
+ connections using TCP or UDP protocol. It is designed to be a reliable
+ "back-end" tool that can be used directly or easily driven by other
+ programs and scripts. At the same time it is a feature-rich network
+ debugging and exploration tool, since it can create almost any kind of
+ connection you would need and has several interesting built-in
+ capabilities.
+
+Package: netkit-ping
+Priority: important
+Section: net
+Installed-Size: 84
+Debian-Maintainer: Anthony Towns <ajt@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: netkit-base
+Version: 0.10-6.1
+Replaces: netbase (<< 4.00)
+Provides: ping
+Depends: libc6 (>= 2.2.1-2)
+Conflicts: ping
+Filename: ./netkit-ping_0.10-6.1_arm.ipk
+Size: 10418
+MD5Sum: cdf51bd27a0e95867f1ee7ab7c328192
+Description: The ping utility from netkit
+ The ping command sends ICMP ECHO_REQUEST packets to a host in order to
+ test if the host is reachable via the network.
+
+Package: net-tools
+Priority: important
+Section: net
+Installed-Size: 676
+Debian-Maintainer: Bernd Eckenfels <ecki@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.59-1
+Replaces: netbase (<< 4.00)
+Depends: libc6 (>= 2.2.1-2)
+Filename: ./net-tools_1.59-1_arm.ipk
+Size: 100555
+MD5Sum: 5f8cd79e32b953142faed78f46dd5625
+Description: The NET-3 networking toolkit
+ This package includes the important tools for controlling the network
+ subsystem of the Linux kernel. This includes arp, ifconfig, netstat,
+ rarp, nameif and route. Additionally, this package contains utilities
+ relating to particular network hardware types (plipconfig, slattach) and
+ advanced aspects of IP configuration (iptunnel, ipmaddr).
+ .
+ In the upstream package 'hostname' and friends are included. Those are
+ not installed by this package, since there is a special "hostname*.deb".
+
+Package: ntpdate
+Priority: optional
+Section: net
+Installed-Size: 132
+Debian-Maintainer: Bdale Garbee <bdale@gag.com>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: ntp
+Version: 1:4.0.99g-3
+Replaces: ntp (<< 4.0.98a),xntp,xntp3
+Depends: libc6 (>= 2.2.1-2)
+Suggests: ntp
+Conflicts: ntp (<< 4.0.98a),chrony
+Filename: ./ntpdate_4.0.99g-3_arm.ipk
+Size: 22995
+MD5Sum: 628963690db28b96a036356abcee8860
+Description: The ntpdate client for setting system time from NTP servers.
+ The ntpdate client allows a system's clock to be set to match the time
+ obtained by communicating with one or more servers running the NTP protocol.
+ .
+ The use of ntpdate is optional if you're running the ntp package, it can help
+ a system obtain lock if it starts with a time that's pretty close by using
+ ntpdate before starting the daemon.
+ .
+ The ntpdate client by itself is useful for occasionally setting the time on
+ machines that are not on the net full-time, such as laptops.
+
+Package: pcmcia-cs
+Priority: extra
+Version: 0.0-fam3
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6 (>= 2.2.1-2), modutils, psmisc
+Suggests: pcmcia-modules, xlibs (>= 4.0.1-11)
+Filename: ./pcmcia-cs_0.0-fam3_arm.ipk
+Size: 57178
+MD5Sum: 123d19e3199f7598e6517efe6e2a2080
+Description: PCMCIA Card Services for Linux.
+ NOTE: I couldn't find this package in Debian/arm so I just grabbed
+ the control file from my Debian/i386 and combined it with the
+ pcmcia-cs bits from familiar v0.4 bleeding. A better solution would
+ be to rebuild the real .deb from the pcmcia-cs source.
+ .
+ PCMCIA cards are commonly used in laptops to provide expanded
+ capabilities, such as modems, increased memory, etc. Some desktop PCs
+ can accept PCMCIA cards as well, although this is rare.
+ .
+ Card Services for Linux is a complete PCMCIA support package. It
+ includes a set of client drivers for specific cards, and a card
+ manager daemon that can respond to card insertion and removal events,
+ loading and unloading drivers on demand. It supports ``hot swapping''
+ of PCMCIA cards, so cards can be inserted and ejected at any time.
+ .
+ The actual kernel modules required for this package are contained in
+ the pcmcia-modules-<kernel version> package, where <kernel version> is
+ the version of the kernel for which the modules have been compiled.
+
+Package: pcmcia-modules-2.4.3-rmk2-np1
+Priority: extra
+Maintainer: Alexander Guy <a7r@andern.org>
+Depends: kernel-modules-2.4.3-rmk2-np1, pcmcia-cs
+Version: fam3
+Architecture: arm
+Filename: ./pcmcia-modules-2.4.3-rmk2-np1_fam3_arm.ipk
+Size: 111546
+MD5Sum: 95da695ec0792cdb70b86aaf5eb48e7c
+Description: PCMCIA kernel modules
+ The full collection of PCMCIA kernel modules from pcmcia-cs. Install
+ this if you will be plugging any Compact Flash or PCMCIA cards into
+ your computer.
+ .
+ We may want to split these up into many fine-grained packages.
+
+Package: ppp
+Priority: standard
+Section: base
+Installed-Size: 764
+Debian-Maintainer: Michael Beattie <mjb@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.4.0f-1
+Replaces: ppp-pam
+Depends: libc6 (>= 2.1.2), libpam0g, libpam-modules, netbase, sysvinit (>= 2.75-4)
+Suggests: debconf
+Conflicts: ppp-pam
+Filename: ./ppp_2.4.0f-1_arm.ipk
+Size: 96430
+MD5Sum: 2bd0da8e83b6d609a4a5dc498564ce06
+Description: Point-to-Point Protocol (PPP) daemon.
+ The Point-to-Point Protocol (PPP) provides a standard way to transmit
+ datagrams over a serial link, as well as a standard way for the machines
+ at either end of the link (the "peers") to negotiate various optional
+ characteristics of the link. Using PPP, a serial link can be used to
+ transmit Internet Protocol (IP) datagrams, allowing TCP/IP connections
+ between the peers.
+ .
+ This package contains pppd with PAM support built-in, so `ppp-pam'
+ package is obsolete.
+
+Package: procps
+Priority: required
+Section: base
+Installed-Size: 484
+Debian-Maintainer: Craig Small <csmall@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1:2.0.7-4
+Replaces: watch, bsdutils (<< 2.9x-1)
+Provides: watch
+Depends: libc6 (>= 2.2.1-2), libncurses5
+Recommends: psmisc
+Conflicts: watch, libproc-dev (<< 1:1.2.6-2), w-bassman (<< 1.0-3), procps-nonfree, pgrep (<< 3.3-5)
+Filename: ./procps_2.0.7-4_arm.ipk
+Size: 46669
+MD5Sum: 374592eb63c1100ebded8c4129954cc3
+Description: The /proc file system utilities.
+ These are utilities to browse the /proc filesystem, which is not a real file
+ system but a way for the kernel to provide information about the status of
+ entries in its process table. (e.g. running, stopped or "zombie")
+ Both command line and full screen utilities are provided. Ncurses is needed
+ for the full screen utilities.
+
+Package: pump
+Priority: optional
+Section: base
+Installed-Size: 144
+Debian-Maintainer: Steve Dunham <dunham@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 0.8.3-3
+Replaces: pump-udeb
+Depends: libc6 (>= 2.1.97)
+Conflicts: dhcpcd, dhcpcd-sv, pump-udeb
+Filename: ./pump_0.8.3-3_arm.ipk
+Size: 25830
+MD5Sum: 1f0b17323498f46c111531b03df1153d
+Description: Simple DHCP/BOOTP client.
+ This is the DHCP/BOOTP client written by RedHat.
+
+Package: pyditor
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: python
+Filename: ./pyditor_0.0_arm.ipk
+Size: 1444
+MD5Sum: c7209f99c5036c9ece32918905086cc5
+Description: python-based text editor
+
+Package: python
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, libdb2
+Filename: ./python_0.0_arm.ipk
+Size: 834371
+MD5Sum: 30aaff82d29a7ed787f7d288c8743794
+Description: python of course <needs real description>
+
+Package: qiv
+Priority: extra
+Section: graphics
+Installed-Size: 86
+Debian-Maintainer: Mitch Blevins <mblevin@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.6-1
+Depends: gdk-imlib1 (>= 1.9.8.1-2), libc6 (>= 2.1.97), libglib1.2 (>= 1.2.0), libgtk1.2 (>= 1.2.8-3), xlibs (>= 4.0.1-11)
+Filename: ./qiv_1.6-1_arm.ipk
+Size: 15767
+MD5Sum: 877b1dc63c32b1f468a20a7ade4818f5
+Description: a quick image viewer for X
+ Quick Image Viewer (qiv) is a very small and pretty fast GDK/Imlib
+ image viewer. Features include zoom, maxpect, scale down, fullscreen,
+ brightness/contrast/gamma correction, slideshow, flip,
+ horizontal/vertical, rotate left/right, delete (move to .qiv-trash/),
+ jump to image x, jump forward/backward x images, filename filter and
+ you can use qiv to set your X11-Desktop background.
+
+Package: reiserfs-module
+Priority: optional
+Section: kernel
+Installed-Size: 249337
+Debian-Maintainer: Nicols Lichtmaier <nick@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.4.3-rmk2-np1
+Depends: kernel (= 2.4.3-rmk2-np1)
+Filename: ./reiserfs-module_2.4.3-rmk2-np1_arm.ipk
+Size: 106059
+MD5Sum: f1975bedcc503d1ee66a9e627350b813
+Description: Reiserfs is a journaling filesystem. This is the kernel module for it.
+
+Package: rsync
+Priority: optional
+Section: net
+Installed-Size: 280
+Debian-Maintainer: Philip Hands <phil@hands.com>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.4.6-1
+Depends: libc6 (>= 2.1.2)
+Suggests: ssh
+Filename: ./rsync_2.4.6-1_arm.ipk
+Size: 74003
+MD5Sum: ce2d8f8672994f93bb03c38919fdb504
+Description: fast remote file copy program (like rcp)
+ rsync is a program that allows files to be copied to and from remote
+ machines in much the same way as rcp. It has many more options than
+ rcp, and uses the rsync remote-update protocol to greatly speedup
+ file transfers when the destination file already exists.
+ .
+ The rsync remote-update protocol allows rsync to transfer just the
+ differences between two sets of files across the network link.
+
+Package: rxvt
+Priority: optional
+Section: x11
+Installed-Size: 580
+Debian-Maintainer: Brian Mays <brian@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1:2.6.3-8-fam1
+Provides: x-terminal-emulator
+Depends: libc6 (>= 2.1.97), xlibs (>= 4.0.1-11), base-passwd (>= 2.0.3.4)
+Conflicts: suidmanager (<< 0.50)
+Filename: ./rxvt_2.6.3-8-fam1_arm.ipk
+Size: 40759
+MD5Sum: e514f9093a45e8a95db37123a193b974
+Description: VT102 terminal emulator for the X Window System
+ Rxvt is an 8-bit clean, color xterm replacement that uses significantly
+ less memory than a conventional xterm, mostly since it doesn't support
+ toolkit configurability or Tek graphics, but also since features can
+ be removed at compile-time to reflect your needs.
+ .
+ The distribution also includes rclock, the smaller/better xclock
+ replacement with appointment scheduling and xbiff functionality.
+
+Package: rxvt-aa
+Priority: optional
+Section: x11
+Installed-Size: 580
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1:2.6.3-8
+Provides: x-terminal-emulator
+Depends: libc6 (>= 2.1.97), xlibs (>= 4.0.1-11), base-passwd (>= 2.0.3.4), libxft, libxrender
+Conflicts: suidmanager (<< 0.50)
+Filename: ./rxvt-aa_2.6.3-8_arm.ipk
+Size: 42018
+MD5Sum: c042c85c082d043aa5a58d4c62c67b70
+Description: rxvt with support for anti-aliased fonts
+ This package proves an rxvt terminal with support for anti-aliased fonts.
+ .
+ Rxvt is an 8-bit clean, color xterm replacement that uses significantly
+ less memory than a conventional xterm, mostly since it doesn't support
+ toolkit configurability or Tek graphics, but also since features can
+ be removed at compile-time to reflect your needs.
+ .
+ The distribution also includes rclock, the smaller/better xclock
+ replacement with appointment scheduling and xbiff functionality.
+
+Package: screen
+Priority: optional
+Version: 3.9.8
+Architecture: arm
+Maintainer: Brian Kearns <bdkearns@bdkearns.net>
+Depends: ncurses-base, libncurses5, libc6
+Filename: ./screen_3.9.8_arm.ipk
+Size: 134749
+MD5Sum: 80b9bb7de6b30ecdeadc04f0bcda875a
+Description: Console manager
+
+Package: script-test
+Priority: optional
+Version: 0.0
+Architecture: all
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends:
+Filename: ./script-test_0.0_all.ipk
+Size: 820
+MD5Sum: ea6b272ff25bb69482a9907492b316a0
+Description: Empty test for ipkg script support
+
+Package: sed
+Priority: required
+Section: base
+Installed-Size: 180
+Debian-Maintainer: Wichert Akkerman <wakkerma@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 3.02-6
+Pre-Depends: libc6 (>= 2.1.2)
+Filename: ./sed_3.02-6_arm.ipk
+Size: 12338
+MD5Sum: c893daf6fef70813b566db8ed8c06950
+Description: The GNU sed stream editor.
+ sed reads the specified files or the standard input if no
+ files are specified, makes editing changes according to a
+ list of commands, and writes the results to the standard
+ output.
+
+Package: shellutils
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 2152
+Debian-Maintainer: Michael Stone <mstone@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.0.11-5
+Replaces: bsdutils (<= 3.0-2), util-linux (<< 2.9e-0.1)
+Pre-Depends: libc6 (>= 2.2.1-2), login | hurd
+Conflicts: login (<< 19990827-1)
+Filename: ./shellutils_2.0.11-5_arm.ipk
+Size: 123564
+MD5Sum: a9a70a1fd2e2057ed43e5a069d521d0d
+Description: The GNU shell programming utilities.
+ The utilities: basename chroot date dirname echo env expr factor false groups
+ hostid id logname nice nohup pathchk pinky printenv printf pwd seq sleep stty
+ tee test true tty uname users who whoami yes.
+
+Package: slang1
+Priority: optional
+Section: libs
+Installed-Size: 456
+Debian-Maintainer: Jim Mintha <jmintha@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: slang
+Version: 1.4.4-1
+Depends: libc6 (>= 2.2.1-2)
+Filename: ./slang1_1.4.4-1_arm.ipk
+Size: 159766
+MD5Sum: 775f054fdda315ef73afc9399612a7ad
+Description: The S-Lang programming library - runtime version.
+ S-Lang is a C programmer's library that includes routines for the rapid
+ development of sophisticated, user friendly, multi-platform applications.
+ .
+ This package contains only the shared library libslang.so.* and copyright
+ information. It is only necessary for programs that use this library (such
+ as jed and slrn). If you plan on doing development with S-Lang, you will
+ need the companion -dev package as well.
+
+
+Package: ssh
+Priority: optional
+Section: non-US
+Installed-Size: 1020
+Debian-Maintainer: Philip Hands <phil@hands.com>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: openssh
+Version: 1:2.5.2p2-2
+Depends: libc6 (>= 2.2.1-2), libpam0g (>= 0.72-1), libssl0.9.6, libwrap0, zlib1g (>= 1:1.1.3), libpam-modules (>= 0.72-9), libwrap0 (>= 7.6-1.1)
+Suggests: ssh-askpass, debconf, xbase-clients, dpkg (>= 1.8.3.1)
+Conflicts: ssh-nonfree, ssh-socks, ssh2, debconf (<< 0.2.17), debconf-tiny (<< 0.2.17), sftp, rsh-client (<< 0.16.1-1)
+Filename: ./ssh_2.5.2p2-2_arm.ipk
+Size: 210692
+MD5Sum: 1fe9ccb1693d36d4388758f73f041d9b
+Description: Secure rlogin/rsh/rcp replacement (OpenSSH)
+ OpenSSH is derived from OpenBSD's version of ssh, which was in turn
+ derived from ssh code from before the time when ssh's license was
+ changed to be non-free.
+ Ssh (Secure Shell) is a program for logging into a remote machine
+ and for executing commands on a remote machine.
+ It provides secure encrypted communications between two untrusted
+ hosts over an insecure network. X11 connections and arbitrary TCP/IP
+ ports can also be forwarded over the secure channel.
+ It is intended as a replacement for rlogin, rsh and rcp, and can be
+ used to provide rdist, and rsync with a secure communication channel.
+ .
+ --------------------------------------------------------------------
+ .
+ This software may be freely imported into the United States; however,
+ the United States Government may consider re-exporting it a criminal
+ offense. Thus, if you are outside the US, please retrieve this
+ software from outside the US.
+ In some countries, particularly Russia, Iraq, Pakistan, and France, it
+ may be illegal to use any encryption at all without a special permit.
+
+Package: stowaway-h3600
+Priority: optional
+Version: 1.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6
+Filename: ./stowaway-h3600_1.0_arm.ipk
+Size: 15470
+MD5Sum: 67c0f14bf6a5e523ed7a95b6fca02a79
+Description: Support for the iPAQ H3600 series Stowaway keyboard
+
+Package: sysset
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: python
+Filename: ./sysset_0.0_arm.ipk
+Size: 2878
+MD5Sum: 5124d246b5b7da481874f97fb86c859f
+Description: python utility for configuring system settings
+
+Package: sysvinit
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 207
+Debian-Maintainer: Miquel van Smoorenburg <miquels@cistron.nl>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.78-4
+Replaces: last, bsdutils (<=2.0-2)
+Depends: dpkg (>= 1.4.0.21), mount (>= 2.7i-1), util-linux (>= 2.9t-2), e2fsprogs (>= 1.15-1)
+Pre-Depends: libc6 (>= 2.1.2)
+Conflicts: last, file-rc (<= 0.4.2), kbd (<< 0.95-2), mdutils (<< 0.35-9)
+Filename: ./sysvinit_2.78-4_arm.ipk
+Size: 43771
+MD5Sum: ebf719f849e02d9bdfd66f54e129398e
+Description: System-V like init.
+ Init is the first program to run after your system is booted, and
+ continues to run as process number 1 until your system halts. Init's
+ job is to start other programs that are essential to the operation of
+ your system. All processes are descended from init. For more information,
+ see the manual page init(8).
+
+Package: tar
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 1064
+Debian-Maintainer: Bdale Garbee <bdale@gag.com>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.13.19-1
+Pre-Depends: libc6 (>= 2.1.97)
+Suggests: bzip2
+Filename: ./tar_1.13.19-1_arm.ipk
+Size: 67084
+MD5Sum: 4f93d22d8645b86b6fb49c375254045e
+Description: GNU tar
+ Tar is a program for packaging a set of files as a single archive in tar
+ format. The function it performs is conceptually similar to cpio, and to
+ things like pkzip in the DOS world. It is heavily used by the Debian package
+ management system, and is useful for performing system backups and exchanging
+ sets of files with others.
+
+Package: task-bootstrap
+Priority: optional
+Version: 0.6
+Architecture: arm
+Maintainer: Alexander Guy <a7r@handhelds.org>
+Depends: ssh, ppp, pcmcia-modules-2.4.3-rmk2-np1, wireless-tools, pump
+Filename: ./task-bootstrap_0.6_arm.ipk
+Size: 693
+MD5Sum: 1dc75245df83987c0cb26f1953d2e9ec
+Description: Everything you might need to bootstrap a minimal ipkg system.
+
+Package: task-familiar-complete
+Priority: optional
+Version: 0.5
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: apmd, checkers, cpu-scale-2.4.3-rmk2-np1, dosfstools, fscrib, h3600-utils, libglade0, libpopt0, libxaw6, libxml1, libxmltok1, loadmeter, ncurses-base, netcat, ntpdate, pcmcia-modules-2.4.3-rmk2-np1, procps, ppp, pump, pyditor, qiv, rsync, ssh, sysset, xvkbd, task-mp3-player, task-games, task-wireless, task-x
+Filename: ./task-familiar-complete_0.5_arm.ipk
+Size: 808
+MD5Sum: f117049d5863f2e70d9903f9bc83475e
+Description: Task package for a complete familiar system
+
+Package: task-games
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: checkers
+Filename: ./task-games_0.0_arm.ipk
+Size: 994
+MD5Sum: 48f5a22131a2f4aada009620b1242438
+Description: Task package for a complete familiar system
+
+Package: task-mp3-player
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: madplay, mixer
+Filename: ./task-mp3-player_0.0_arm.ipk
+Size: 667
+MD5Sum: aa5f5c85ccb22af9c4f6f677522df9e7
+Description: Task package for a complete familiar system
+
+Package: task-wireless
+Priority: optional
+Version: 0.1
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: wireless-tools, pcmcia-modules-2.4.3-rmk2-np1
+Filename: ./task-wireless_0.1_arm.ipk
+Size: 639
+MD5Sum: 988d6d2960bf165b5ed324dbfb85d674
+Description: Task package for wireless networking
+
+Package: task-x
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: xserver-tiny-h3600, xbase-clients, xfonts-base, xfonts-75dpi, xfonts-ttf, blackbox, rxvt-aa, xcalibrate
+Filename: ./task-x_0.0_arm.ipk
+Size: 739
+MD5Sum: 78d7c74c9fdac90f3b58fba7231a4ff8
+Description: Task package for a basic X system
+
+Package: textutils
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 1550
+Debian-Maintainer: Herbert Xu <herbert@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.0-3
+Replaces: bsdmainutils (<= 4.5.2), ptx
+Provides: ptx
+Pre-Depends: libc6 (>= 2.1.2)
+Conflicts: ptx
+Filename: ./textutils_2.0-3_arm.ipk
+Size: 156555
+MD5Sum: fbdac4eb344aea6287461bc8dc613add
+Description: The GNU text file processing utilities.
+ The utilities: cat cksum comm csplit cut expand fmt fold head join md5sum
+ nl od paste pr ptx sort split sum tac tail tr tsort unexpand uniq wc.
+
+Package: urlget
+Priority: optional
+Version: 0.3
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, netbase
+Filename: ./urlget_0.3_arm.ipk
+Size: 2613
+MD5Sum: 271ae2fbfd1e691d2b19d24ba1c01648
+Description: Tiny package for retrieving files via HTTP
+
+Package: util-linux
+Essential: yes
+Priority: required
+Section: base
+Installed-Size: 840
+Debian-Maintainer: Adrian Bunk <bunk@fs.tum.de>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 2.11b-2-fam2
+Replaces: miscutils, setterm, getty, fdisk
+Pre-Depends: libc6 (>= 2.2.1-2), libncurses5 (>= 5.2.20010310-1)
+Recommends: util-linux-locales
+Suggests: kbd | console-tools
+Conflicts: setterm, getty, fdisk, kbd (<< 1.05-3), console-tools (<< 1:0.2.3-21)
+Filename: ./util-linux_2.11b-2-fam2_arm.ipk
+Size: 9771
+MD5Sum: e1abcd568a156976ac95eff239dbb091
+Description: Miscellaneous system utilities.
+ A mixed bag of system utilities: arch chkdupexe cfdisk cytune dmesg
+ fdisk fsck.minix getty getopt hwclock ipcrm ipcs mcookie mkfs mkfs.minix
+ mkswap more namei pivot_root raw rdev setterm setsid tunelp whereis.
+
+Package: wget
+Priority: optional
+Section: web
+Installed-Size: 1272
+Debian-Maintainer: Nicols Lichtmaier <nick@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 1.6-2
+Depends: libc6 (>= 2.2.1-2), netbase
+Filename: ./wget_1.6-2_arm.ipk
+Size: 62824
+MD5Sum: bbc13feb01f63a86cb6a542bf629cc77
+Description: utility to retrieve files from the WWW via HTTP and FTP
+ Wget [formerly known as Geturl] is a freely available network utility
+ to retrieve files from the World Wide Web using HTTP and FTP, the two
+ most widely used Internet protocols. It works non-interactively, thus
+ enabling work in the background, after having logged off.
+ .
+ The recursive retrieval of HTML pages, as well as FTP sites is
+ supported -- you can use Wget to make mirrors of archives and home
+ pages, or traverse the web like a WWW robot (Wget understands
+ /robots.txt).
+
+Package: wireless-tools
+Priority: optional
+Section: net
+Installed-Size: 120
+Debian-Maintainer: Bjrn Andersson <bjorn@lifix.fi>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Version: 20-1.1
+Depends: libc6 (>= 2.2.1-2)
+Filename: ./wireless-tools_20-1.1_arm.ipk
+Size: 17032
+MD5Sum: 695142d573351ca6e8ddffcfc77fa195
+Description: Tools for manipulating Linux Wireless Extensions
+ This package contains the Wireless tools, used to manipulate
+ the Linux Wireless Extensions. The Wireless Extension is an interface
+ allowing you to set Wireless LAN specific parameters and get the
+ specific stats.
+ .
+ The tools in this package only work with kernel versions 2.2.14
+ and above, and 2.3.24 and above.
+
+Package: xbase-clients
+Priority: optional
+Section: x11
+Installed-Size: 3916
+Debian-Maintainer: Branden Robinson <branden@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: xfree86
+Version: 4.0.2-13
+Replaces: xbase (<< 3.3.2.3a-2), xf86setup (<< 3.3.2.3a-9), xserver-common (<< 4.0), xmodmap, xcontrib, xpm4g-dev, xpm-bin, xsm
+Provides: xmodmap, xcontrib, xpm-bin, xsm
+Depends: debconf (>= 0.3.83), cpp, libc6 (>= 2.2.1-2), libfreetype6, libgl1, libncurses5 (>= 5.2.20010310-1), libxaw7 (>= 4.0.1-1), xlibs (>= 4.0.1-11)
+Conflicts: xbase (<< 3.3.2.3a-2), xserver-common (<< 3.3.2.3a-9), xmodmap, xaw-wrappers (<< 0.90), xfonts-100dpi (<< 3.3.3.1-3), xfonts-75dpi (<< 3.3.3.1-3), xfonts-base (<< 3.3.3.1-3), xfonts-cyrillic (<< 3.3.3.1-3), xfonts-scalable (<< 3.3.3.1-3), xfnt100 (<= 3.3.2.3a-1), xfnt75 (<= 3.3.2.3a-1), xfntbase (<= 3.3.2.3a-1), xfntcyr (<= 3.3.2.3a-1), xfntscl (<= 3.3.2.3a-1), xdm (<< 4.0), xsm, xcontrib, xpm4g-dev, xpm-bin
+Filename: ./xbase-clients_4.0.2-13_arm.ipk
+Size: 205512
+MD5Sum: 60ff8d6dfa873abf4c0d611fff7d268c
+Description: miscellaneous X clients
+ An X client is a program that interfaces with an X server (almost always
+ via the X libraries), and thus with some input and output hardware like a
+ graphics card, monitor, keyboard, and pointing device (such as a mouse).
+ .
+ This package provides a miscellaneous assortment of several dozen X
+ clients that ship with the X Window System, including:
+ - startx and xinit, which initialize X sessions from the command line;
+ - xauth, a tool for controlling access to the X session;
+ - xedit, a text editor;
+ - xbiff, a tool which tells you when you have new email;
+ - xcalc, a scientific calculator desktop accessory;
+ - xclipboard, a tool to manage cut-and-pasted text selections;
+ - xcutsel, which exchanges selection and cut buffer contents;
+ - xconsole, which monitors system console messages;
+ - xditview, a viewer for ditroff output;
+ - xeyes, a demo program in which a pair of eyes track the pointer;
+ - xfd, a tool that displays all the glyphs in a given X font;
+ - xfontsel, a tool for browsing and selecting X fonts;
+ - xhost, a very dangerous program that you should never use;
+ - xkill, a tool for terminating misbehaving X clients;
+ - xload, a monitor for the system load average;
+ - xlogo, a demo program that displays the X logo;
+ - xmag, which magnifies parts of the X screen;
+ - xman, a manual page browser;
+ - xmessage, a tool to display message or dialog boxes;
+ - xrefresh, a tool that forces a redraw of the X screen;
+ - xsetroot, a tool for tailoring the appearance of the root window;
+ - xvidtune, a tool for customizing X server modelines for your monitor;
+ - xwd, a utility for taking window dumps ("screenshots") of the X session;
+ - xwud, a viewer for window dumps created by xwd;
+ - oclock and xclock, graphical clocks;
+ - beforelight, a screen saver;
+ - bitmap, a monochrome bitmap file editor;
+ - bmtoa, a tool that converts a monochrome bitmap to ASCII text;
+ - cxpm and sxpm, tools for checking and viewing X pixmap files;
+ - iceauth, a tool for manipulating ICE protocol authorization records;
+ - xset, a tool for setting miscellaneous X server parameters;
+ - xmodmap, a utility for modifying keymaps and pointer button mappings in X;
+ - xsetmode and xsetpointer, tools for handling X Input devices;
+ - setxkbmap, xkbbell, xkbcomp, xkbevd, xkbprint, xkbvleds, and xkbwatch,
+ tools for managing the X keyboard extension (XKB);
+ - xsm, a session manager for X sessions;
+ - smproxy, a session manager proxy for X clients that do not use the X
+ session manager protocol;
+ - xgamma, a tool for querying and setting a monitor's gamma correction;
+ - appres, editres, listres, viewres, and xrdb, which query and update the
+ X resource database;
+ - Xmark, x11perf, x11perfcomp, and xieperf, tools for benchmarking
+ graphical operations under the X Window System;
+ - fstobdf, which retrieves a font in BDF format from an X font server;
+ - xcmsdb, a device color characteristic utility for the X Color Management
+ System;
+ - xstdcmap, a utility to selectively define standard colormap properties;
+ - xev, an X event displayer;
+ - xfindproxy, a tool to locate X proxy services;
+ - xlsatoms, which lists interned atoms defined on an X server;
+ - xlsclients, which lists client applications running on an X display;
+ - xlsfonts, a server font list displayer;
+ - xprop, a property displayer for X;
+ - xdpyinfo, a display information utility for X;
+ - xwininfo, a window information utility for X;
+ - glxinfo, a GLX extension information utility for X;
+ - xvinfo, an Xv extension information utility for X;
+ - ico, an X graphics demo using an animated polyhedron;
+ - dga, a demo program for the DGA extension; and
+ - xgc, an (unfinished) X graphics demo program.
+
+Package: xcalibrate
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs
+Filename: ./xcalibrate_0.0_arm.ipk
+Size: 6641
+MD5Sum: 1ff1b7f86d9ee3c4f9d261d6c69059be
+Description: calibrate the iPAQ H3600 touch screen for X
+
+Package: xfonts-75dpi
+Priority: optional
+Section: x11
+Installed-Size: 2912
+Debian-Maintainer: Branden Robinson <branden@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: all
+Source: xfree86
+Version: 4.0.2-13
+Replaces: xfnt75
+Provides: xfnt75
+Depends: xutils
+Suggests: xfs | xserver
+Conflicts: xfnt75, xbase-clients (<< 4.0)
+Filename: ./xfonts-75dpi_4.0.2-13_all.ipk
+Size: 173134
+MD5Sum: b99622fecd62b08624fd4c0977b61cfd
+Description: 75 dpi fonts for X
+ xfonts-75dpi provides a set of bitmapped fonts at 75 dots per inch. In most
+ cases it is desirable to have the X font server (xfs) and/or an X server
+ installed to make the fonts available to X clients.
+ .
+ This package and xfonts-100dpi provide the same set of fonts, rendered at
+ different resolutions; only one or the other is necessary, but both may be
+ installed. xfonts-75dpi may be more suitable for small monitors and/or small
+ screen resolutions (under 1024x768).
+ .
+ This package requires the xutils package to prepare the font directories
+ for use by an X server or X font server.
+
+Package: xfonts-base
+Priority: optional
+Section: x11
+Installed-Size: 7724
+Debian-Maintainer: Branden Robinson <branden@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: all
+Source: xfree86
+Version: 4.0.2-13
+Replaces: xfntbase, xfonts-cjk
+Provides: xfntbase, xfonts-cjk
+Depends: xutils
+Suggests: xfs, xserver
+Conflicts: xfntbase, xfonts-cjk, xbase-clients (<< 4.0)
+Filename: ./xfonts-base_4.0.2-13_all.ipk
+Size: 24879
+MD5Sum: 26837af24947d47947962450480e9258
+Description: standard fonts for X
+ xfonts-base provides a standard set of low-resolution bitmapped fonts. In
+ most cases it is desirable to have the X font server (xfs) and/or an X server
+ installed to make the fonts available to X clients.
+ .
+ If you are not using a remote font server, you must install this package if
+ you are installing an X server. It contains fonts without which X servers
+ will not work.
+ .
+ This package also provides a set of files that can be used by the X or
+ fonts server to transcode fonts from one encoding to another (e.g., KOI8-R
+ to ISO-8859-5).
+ .
+ This package requires the xutils package to prepare the font directories
+ for use by an X server or X font server.
+
+Package: xfonts-ttf
+Priority: optional
+Version: 0.0
+Architecture: all
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: xutils
+Filename: ./xfonts-ttf_0.0_all.ipk
+Size: 15567
+MD5Sum: ec6912955eda9edf873f892677fae523
+Description: free TrueType fonts to be used within X
+
+Package: xlibs
+Priority: optional
+Section: libs
+Installed-Size: 4306
+Debian-Maintainer: Branden Robinson <branden@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: xfree86
+Version: 4.0.2-13
+Replaces: xlib, xbase (<< 3.3.2.3a-2), xlib6 (<< 3.3.2.3-2), xbase-clients (<< 4.0), xlib6g (<< 4.0), xlib6g-dev (<< 4.0), xpm4g, fvwm-common, xcontrib
+Provides: libxpm4
+Depends: xfree86-common (>> 4.0), libc6 (>= 2.2.1-2), xlibs (>= 4.0.1-11)
+Conflicts: xlib, xlib6 (<< 3.3.2.3-2), xlib6g (<< 4.0), xlib6g-dev (<< 4.0), xbase-clients (<< 4.0), xpm4g
+Filename: ./xlibs_4.0.2-13_arm.ipk
+Size: 820973
+MD5Sum: ad9b6742385277d8cf63cfcdde41d4dc
+Description: X Window System client libraries
+ NOTE: I really want to break this package up into lots of little
+ packages for familiar, (mainly so we can dump things like Xt if no
+ binaries depend on them). - Carl Worth <cworth@handhelds.org>
+ .
+ The X libraries are an interface between X client programs and the
+ hardware-oriented X servers, and consist of routines to read input from the
+ keyboard and pointer, draw on the screen, etc., in an abstract manner that is
+ independent of the particular characteristics of the hardware. The X
+ libraries, and the programs that use them, communicate with X servers by
+ means of the X protocol.
+ .
+ libX11 (a.k.a. Xlib) provides the low-level functionality, dealing mostly
+ with the wire protocol and in terms of basic operations such as opening and
+ closing the X protocol connection, creating graphics contexts, drawing
+ graphics primitives such as lines, arcs, and glyphs, handling events, and so
+ forth.
+ .
+ libXpm, the X pixmap library, is a set of routines used to store and retrieve
+ X pixmaps (a data structure comprising a rectangular array of pixels) from
+ files; the xpm file format is an extension of the monochrome bitmap file
+ format in the X11 specification. (Traditionally, libXpm was maintained and
+ distributed separately from the X Window System, but XFree86 has absorbed
+ this library).
+ .
+ libXt, the X Toolkit Instrinsics, is an abstract widget library upon which
+ graphical widget libraries (such as Athena and LessTif) may be developed; the
+ Intrinsics provide a number of useful interfaces to X conventions and
+ protocols, in many cases reducing a long series of Xlib calls to just a
+ couple of Xt calls.
+ .
+ libXmu is a set of miscellaneous utility functions useful to client
+ programmers.
+ .
+ The remainder of the libraries in this package implement the client side
+ of various X protocol extensions:
+ - libICE, the Inter-Client Exchange extension;
+ - libPEX5, PEX, a 3D graphics extension now superseded by Mesa/OpenGL;
+ - libSM, the Session Management extension;
+ - libXIE, the X Image Extension;
+ - libXext, a collection of several commonly-used extensions;
+ - libXi, the X Input extension;
+ - libXp, the X Printing extension; and
+ - libXtst, the X Testing extension.
+ .
+ xlibs also contains the XKB keyboard parameter files, locale data, and a set
+ of bitmap and pixmap image files commonly used by X clients.
+
+Package: xserver-tiny-h3600
+Priority: optional
+Version: 0.2
+Architecture: arm
+Maintainer: Alexander Guy <a7r@handhelds.org>
+Depends: libc6, zlib1g, h3600-utils
+Filename: ./xserver-tiny-h3600_0.2_arm.ipk
+Size: 405916
+MD5Sum: dbbc661d81cec5a8ac402ebbfd682c4d
+Description: X server for the iPAQ H3600 display and touchscreen.
+
+Package: xvkbd
+Priority: optional
+Version: 0.0
+Architecture: arm
+Maintainer: Carl Worth <cworth@handhelds.org>
+Depends: libc6, xlibs, libxaw6
+Filename: ./xvkbd_0.0_arm.ipk
+Size: 13591
+MD5Sum: 45cd39eebf02283965268bbba5436528
+Description: On-screen virtual keyboard for X
+
+Package: zlib1g
+Priority: standard
+Section: libs
+Installed-Size: 144
+Debian-Maintainer: Mark Brown <broonie@debian.org>
+Maintainer: Carl Worth <cworth@handhelds.org>
+Architecture: arm
+Source: zlib
+Version: 1:1.1.3-14
+Provides: libz1
+Depends: libc6 (>= 2.2.1-2)
+Conflicts: zlib1 (<= 1:1.0.4-7)
+Filename: ./zlib1g_1.1.3-14_arm.ipk
+Size: 28970
+MD5Sum: c7f98957d73220efb3e39ec75ac09c23
+Description: compression library - runtime
+ zlib is a library implementing the deflate compression method found
+ in gzip and pkzip. This package includes the shared library.
+
diff --git a/noncore/unsupported/oipkg/ipkg/status b/noncore/unsupported/oipkg/ipkg/status
new file mode 100644
index 0000000..ddcd5fa
--- a/dev/null
+++ b/noncore/unsupported/oipkg/ipkg/status
@@ -0,0 +1,418 @@
+Package: ash
+Status: install ok installed
+Essential: yes
+Version: 0.3.7-16
+
+Package: libc6
+Status: install ok installed
+Version: 2.2.2-1
+
+Package: debianutils
+Status: install ok installed
+Essential: yes
+Version: 1.15
+
+Package: dev-files
+Status: install ok installed
+Essential: yes
+Version: 0.4
+
+Package: dpkg
+Status: install ok installed
+Essential: yes
+Version: 1.8.3.1
+
+Package: libncurses5
+Status: install ok installed
+Version: 5.0-6.0potato1
+
+Package: libstdc++2.10-glibc2.2
+Status: install ok installed
+Version: 1:2.95.4-0.010407
+
+Package: e2fsprogs
+Status: install ok installed
+Version: 1.19-4
+
+Package: ncurses-base
+Status: install ok installed
+Conffiles: /etc/terminfo/a/ansi 6b60f35a7fb6122a53b1e74e56cba56e /etc/terminfo/d/dumb ca3b114f0727da81a9b957b553a9915d /etc/terminfo/l/linux 8d94e8037f878a0468b4a29a28e83933 /etc/terminfo/m/mach 215cacd84662e9e93e998833477da362 /etc/terminfo/m/mach-bold 2dfb5dc3b706cd29273ab25f20394ac8 /etc/terminfo/m/mach-color a4b356122e490897b411db4893c8483e /etc/terminfo/p/pcansi 8b97f1ea94e8d2942c8dcd2d943e1322 /etc/terminfo/r/rxvt 5fb0eff2f9d74b42ab9bf6532ae4b54b /etc/terminfo/r/rxvt-m fd21b1fd19f15558368fbfaca40c92ce /etc/terminfo/s/screen e6c11d68d1b4d1d754fd1024d7970251 /etc/terminfo/s/screen-w df1678735733b574d38d6dc08991b372 /etc/terminfo/s/sun c7ab8d7ab013eca15c6eb83a4c80a3d1 /etc/terminfo/v/vt100 ad245bbce8921ee045952390f57fae39 /etc/terminfo/v/vt102 c33de92a31aa93532f323d7b604f2060 /etc/terminfo/v/vt220 fb1504db6c5a5962d65c1e59ec3ee331 /etc/terminfo/v/vt52 2cfdf4dcc4a93c378d9c6bc01cb8f3c3 /etc/terminfo/x/xterm 8b85646c0ec7d05772e8893a0fe6c587 /etc/terminfo/x/xterm-color 582138668da3b0f586aeee0dab85ce64 /etc/terminfo/x/xterm-mono 894041962a58eb2c22ab75a510bfb9c8 /etc/terminfo/x/xterm-r5 edae3c5c9da23b6358a7362492fd17e8 /etc/terminfo/x/xterm-r6 ba7d833b34aa46016660e577c81644b2 /etc/terminfo/x/xterm-vt220 f7ee9373c6df206ee9b5f674a8748272 /etc/terminfo/x/xterm-xfree86 e3e10164f2a536129beeae0b1070513d
+Version: 5.2.20010318-1
+
+Package: fileutils
+Status: install ok installed
+Essential: yes
+Version: 4.0.43-1
+
+Package: grep
+Status: install ok installed
+Essential: yes
+Version: 2.4.2-1
+
+Package: gzip
+Status: install ok installed
+Essential: yes
+Version: 1.2.4-33
+
+Package: hostname
+Status: install ok installed
+Essential: yes
+Version: 2.07
+
+Package: sed
+Status: install ok installed
+Version: 3.02-6
+
+Package: urlget
+Status: install ok installed
+Version: 0.3
+
+Package: netbase
+Status: install ok installed
+Conffiles: /etc/init.d/networking e9ecbce88a3f5a296a216298e282270e /etc/protocols 9b4c76b625771acc5c8df17b3ed780bc /etc/services 1f73acd0620a72c63f34c14dff83774d
+Version: 4.05
+
+Package: ifupdown
+Status: install ok installed
+Version: 0.6.4-3
+
+Package: libpam-modules
+Status: install ok installed
+Version: 0.72-21
+
+Package: libpam0g
+Status: install ok installed
+Version: 0.72-21
+
+Package: net-tools
+Status: install ok installed
+Version: 1.59-1
+
+Package: netkit-ping
+Status: install ok installed
+Version: 0.10-6.1
+
+Package: libpam-runtime
+Status: install ok installed
+Conffiles: /etc/pam.conf c29f5bbea9887ff059b5973185c82212 /etc/pam.d/other 1ec5167fb7299a6b6b55b31c29a8b303
+Version: 0.72-21
+
+Package: modutils
+Status: install ok installed
+Conffiles: /etc/cron.daily/modutils 10fc6b90de70ffa3594d6c47ec9be935 /etc/init.d/modutils 0a8547ed5c4d6d98b729fa5a2603e7f4
+Version: 2.4.2-1
+
+Package: lrzsz
+Status: install ok installed
+Essential: yes
+Version: 0.12.21-4
+
+Package: mount
+Status: install ok installed
+Essential: yes
+Version: 2.11b-2
+
+Package: shellutils
+Status: install ok installed
+Essential: yes
+Version: 2.0.11-5
+
+Package: sysvinit
+Status: install ok installed
+Conffiles: /etc/init.d/bootmisc.sh e9418a2ae63ae39f02b3e4c32290b19d /etc/init.d/checkfs.sh 10e539a025742a6288f60651ae7613a1 /etc/init.d/checkroot.sh b73e84b9518933e9ea1195f9f707d24d /etc/init.d/halt 031ddd15603637361bca220953f21a55 /etc/init.d/hostname.sh cacd9a754d39665499db7f79dac4e212 /etc/init.d/mountall.sh ba7702a69890a12e91e7ea259c71150e /etc/init.d/reboot aff6c76c29e8daa1f7c47479024d51b2 /etc/init.d/rmnologin f84dc015574ab0e48fb0694dc70307b2 /etc/init.d/sendsigs 8c66184b264a2d86c18f34fff627b49f /etc/init.d/single 68031365ba0ce859ec96e5cc812c6d07 /etc/init.d/umountfs 1f2a624a32fee66cc5654261942aa6bb
+Essential: yes
+Version: 2.78-4
+
+Package: tar
+Status: install ok installed
+Essential: yes
+Version: 1.13.19-1
+
+Package: textutils
+Status: install ok installed
+Essential: yes
+Version: 2.0-3
+
+Package: task-bootstrap
+Status: install ok installed
+Version: 0.6
+
+Package: ppp
+Status: install ok installed
+Conffiles: /etc/ppp/options e85cc881e702d2f022e56fa48a877295
+Version: 2.4.0f-1
+
+Package: pump
+Status: install ok installed
+Version: 0.8.3-3
+
+Package: ssh
+Status: install ok installed
+Version: 1:2.5.2p2-2
+
+Package: wireless-tools
+Status: install ok installed
+Version: 20-1.1
+
+Package: libssl0.9.6
+Status: install ok installed
+Version: 0.9.6a-1
+
+Package: libwrap0
+Status: install ok installed
+Version: 7.6-7
+
+Package: zlib1g
+Status: install ok installed
+Version: 1:1.1.3-14
+
+Package: ntpdate
+Status: install ok installed
+Version: 1:4.0.99g-3
+
+Package: wget
+Status: install ok installed
+Version: 1.6-2
+
+Package: task-familiar-complete
+Status: install ok installed
+Version: 0.5
+
+Package: apmd
+Status: install ok installed
+Version: 3.0final-1
+
+Package: checkers
+Status: install ok installed
+Version: 0.0
+
+Package: dosfstools
+Status: install ok installed
+Version: 2.8-1
+
+Package: fscrib
+Status: install ok installed
+Version: 0.0
+
+Package: h3600-utils
+Status: install ok installed
+Version: 0.4
+
+Package: libglade0
+Status: install ok installed
+Version: 0.16-2
+
+Package: libpopt0
+Status: install ok installed
+Version: 1.5-0.1
+
+Package: libxaw6
+Status: install ok installed
+Version: 4.0.2-13
+
+Package: libxml1
+Status: install ok installed
+Version: 1:1.8.11-1
+
+Package: libxmltok1
+Status: install ok installed
+Version: 1.1-5
+
+Package: loadmeter
+Status: install ok installed
+Version: 0.0
+
+Package: netcat
+Status: install ok installed
+Version: 1.10-17
+
+Package: procps
+Status: install ok installed
+Version: 1:2.0.7-4
+
+Package: pyditor
+Status: install ok installed
+Version: 0.0
+
+Package: qiv
+Status: install ok installed
+Version: 1.6-1
+
+Package: rsync
+Status: install ok installed
+Version: 2.4.6-1
+
+Package: sysset
+Status: install ok installed
+Version: 0.0
+
+Package: task-games
+Status: install ok installed
+Version: 0.0
+
+Package: task-mp3-player
+Status: install ok installed
+Version: 0.0
+
+Package: task-wireless
+Status: install ok installed
+Version: 0.1
+
+Package: task-x
+Status: install ok installed
+Version: 0.0
+
+Package: xvkbd
+Status: install ok installed
+Version: 0.0
+
+Package: gdk-imlib1
+Status: install ok installed
+Version: 1.9.8.1-2
+
+Package: libfltk1
+Status: install ok installed
+Version: 1.0.9-1.1
+
+Package: libfreetype6
+Status: install ok installed
+Version: 2.0.1.20010317-1
+
+Package: libglib1.2
+Status: install ok installed
+Version: 1.2.10-1
+
+Package: libgtk1.2
+Status: install ok installed
+Version: 1.2.10-1
+
+Package: libxaw7
+Status: install ok installed
+Version: 4.0.2-13
+
+Package: madplay
+Status: install ok installed
+Version: 0.0
+
+Package: mixer
+Status: install ok installed
+Version: 0.0
+
+Package: python
+Status: install ok installed
+Version: 0.0
+
+Package: rxvt-aa
+Status: install ok installed
+Version: 1:2.6.3-8
+
+Package: xbase-clients
+Status: install ok installed
+Version: 4.0.2-13
+
+Package: xcalibrate
+Status: install ok installed
+Version: 0.0
+
+Package: xfonts-75dpi
+Status: install ok installed
+Version: 4.0.2-13
+
+Package: xfonts-base
+Status: install ok installed
+Version: 4.0.2-13
+
+Package: xfonts-ttf
+Status: install ok installed
+Version: 0.0
+
+Package: xlibs
+Status: install ok installed
+Version: 4.0.2-13
+
+Package: libdb2
+Status: install ok installed
+Version: 2:2.7.7-3
+
+Package: libjpeg62
+Status: install ok installed
+Version: 6b-1.3
+
+Package: libpng2
+Status: install ok installed
+Version: 1.0.8-1
+
+Package: libungif3g
+Status: install ok installed
+Version: 3.0-3
+
+Package: libxft
+Status: install ok installed
+Version: 0.0
+
+Package: libxrender
+Status: install ok installed
+Version: 0.0
+
+Package: stowaway-h3600
+Status: install ok installed
+Version: 1.0
+
+Package: bash
+Status: install ok installed
+Conffiles: /etc/bash.bashrc 21e4f76f5390e221909e0afaaa41d8ab
+Version: 2.03-6
+
+Package: less
+Status: install ok installed
+Version: 346-7
+
+Package: login
+Status: install ok installed
+Conffiles: /etc/login.defs ef80f19ce81f9fab26602d8398c1b46f
+Essential: yes
+Version: 20000902-3.1
+
+Package: familiar-base
+Status: install ok installed
+Essential: yes
+Version: 0.10
+
+Package: kernel-modules-2.4.3-rmk2-np1
+Status: install ok installed
+Essential: yes
+Version: fam3
+
+Package: util-linux
+Status: install ok installed
+Essential: yes
+Version: 2.11b-2-fam2
+
+Package: pcmcia-modules-2.4.3-rmk2-np1
+Status: install ok installed
+Version: fam3
+
+Package: pcmcia-cs
+Status: install ok installed
+Conffiles: /etc/init.d/pcmcia 2aec30c50530a70e9b530bbe83106062 /etc/pcmcia/cis/3CCFEM556.dat 064309527ab5c6f73f17f99f6b07e471 /etc/pcmcia/cis/3CXEM556.dat 51e99ef0d234ea1b455b0555336f7379 /etc/pcmcia/cis/COMpad2.dat 66748ecad364a24ea2150fccb1adbca0 /etc/pcmcia/cis/COMpad4.dat a1b4e46b220b7ecaec0287875f47e549 /etc/pcmcia/cis/DP83903.dat fb612f42364fd06c46aa936386a79abb /etc/pcmcia/cis/E-CARD.dat 3bd542b30f74fb6066b045436e0c70c6 /etc/pcmcia/cis/LA-PCM.dat bee381e5d148bd073184a5cadfb6c314 /etc/pcmcia/cis/MT5634ZLX.dat 15bc79fe185e6cc00c888ab6e54a0640 /etc/pcmcia/cis/NE2K.dat f6092c8b414a94b96e310654cc5cad04 /etc/pcmcia/cis/PCMLM28.dat bc1d913acfd5b8b70a6694bbd48b5795 /etc/pcmcia/cis/PE-200.dat b779b33a4a692557517a3e6edf343fb2 /etc/pcmcia/cis/PE520.dat fb7b7e2d7664771f0c4a1a39cc2efabf /etc/pcmcia/cis/RS-COM-2P.dat c9dd2f55d05d86f88cdf52f3e1363da2 /etc/pcmcia/config.opts 03b1242472171887224f92ca95ecd40d /etc/pcmcia/config 9f747a17417cfecd7d08f5ddab34935d /etc/pcmcia/ftl.opts c6e0cd4d69e56836a6ff071bba8df4c3 /etc/pcmcia/ftl af805fd6a57f77ace864fe24643a39ed /etc/pcmcia/ide.opts 98f615befe89350382037398ef6cd226 /etc/pcmcia/ide fad802a1eb4cc57656a5dcae090edbb1 /etc/pcmcia/memory.opts bd8486017c46fef68ac2ecf597c8e31b /etc/pcmcia/memory a7a7acf0fa3ea00613ed2649e6b59e8b /etc/pcmcia/network.opts a40e80fb3366f61c8839973f5418e35f /etc/pcmcia/network e4b3d221d57efe4a714fdd5eb5c49224 /etc/pcmcia/parport.opts d7a128b7352b136d60935fca3638a4f6 /etc/pcmcia/parport 89041f80c218454b68c1c0581e29b872 /etc/pcmcia/scsi.opts 6c45330bd15b2db612d1d12d5682face /etc/pcmcia/scsi 983fa0c4829c79222e3f01d690c52897 /etc/pcmcia/serial.opts e26bbd1e4e70571277def2bcac82767e /etc/pcmcia/serial f7f7b6b24f55e7317d684d7f36c6e1f5 /etc/pcmcia/wireless.opts 002a763100acd3ddbd0e1c8283418907 /etc/pcmcia/wireless 64e6cbc2d2fda6b191390536ede71b67 /etc/pcmcia/shared 8b9f0c58f3b9daa43572e5087e97032b
+Version: 0.0-fam3
+
+Package: ipkg
+Status: install ok installed
+Conffiles: /etc/ipkg.conf 5f2dff89026c95afe68ca28b5385525b
+Essential: yes
+Version: 0.4-fam1
+
+Package: blackbox
+Status: install ok installed
+Version: 0.1
+
+Package: xserver-tiny-h3600
+Status: install ok installed
+Version: 0.2
+
+Package: iv
+Status: install ok installed
+Essential: yes
+Version: 0.0
+
diff --git a/noncore/unsupported/oipkg/main.cpp b/noncore/unsupported/oipkg/main.cpp
new file mode 100644
index 0000000..96a5e8d
--- a/dev/null
+++ b/noncore/unsupported/oipkg/main.cpp
@@ -0,0 +1,33 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+
+#include "packagemanager.h"
+
+#include <qpe/qpeapplication.h>
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ PackageManager mw;
+ a.showMainDocumentWidget( &mw );
+
+ return a.exec();
+}
diff --git a/noncore/unsupported/oipkg/packagemanager.cpp b/noncore/unsupported/oipkg/packagemanager.cpp
new file mode 100644
index 0000000..f3da15d
--- a/dev/null
+++ b/noncore/unsupported/oipkg/packagemanager.cpp
@@ -0,0 +1,897 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "packagemanager.h"
+#include "pkdesc.h"
+#include "pkfind.h"
+#include "pksettings.h"
+
+#include <qpe/process.h>
+#include <qpe/resource.h>
+#include <qpe/stringutil.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/applnk.h>
+
+#include <qprogressbar.h>
+#include <qcombobox.h>
+#include <qdict.h>
+#include <qfile.h>
+#include <qlineedit.h>
+#include <qpushbutton.h>
+#include <qlistview.h>
+#include <qlistbox.h>
+#include <qmessagebox.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qregexp.h>
+#include <qtextstream.h>
+#include <qtextview.h>
+#include <qtoolbutton.h>
+
+#include <stdlib.h>
+
+static QPixmap *pm_uninstalled=0;
+static QPixmap *pm_installed=0;
+static QPixmap *pm_uninstall=0;
+static QPixmap *pm_install=0;
+
+
+class PackageItem : public QCheckListItem {
+ bool installed;
+public:
+ PackageItem(QListView* lv, const QString& name, const QString& desc, const QString& size, bool inst ) :
+ QCheckListItem(lv,name,CheckBox), installed(inst)
+ {
+ setText(1,desc);
+ setText(2,size);
+ }
+
+ void paintCell( QPainter *p, const QColorGroup & cg,
+ int column, int width, int alignment )
+ {
+ if ( !p )
+ return;
+
+ p->fillRect( 0, 0, width, height(),
+ isSelected()? cg.highlight() : cg.base() );
+
+ if ( column != 0 ) {
+ // The rest is text
+ QListViewItem::paintCell( p, cg, column, width, alignment );
+ return;
+ }
+
+ QListView *lv = listView();
+ if ( !lv )
+ return;
+ int marg = lv->itemMargin();
+ int r = marg;
+
+ QPixmap pm = statePixmap();
+ p->drawPixmap(marg,(height()-pm.height())/2,pm);
+ r += pm.width()+1;
+
+ p->translate( r, 0 );
+ QListViewItem::paintCell( p, cg, column, width - r, alignment );
+ }
+
+ void paintFocus( QPainter *p, const QColorGroup & cg,
+ const QRect & r )
+ {
+ // Skip QCheckListItem
+ // (makes you wonder what we're getting from QCheckListItem)
+ QListViewItem::paintFocus(p,cg,r);
+ }
+
+ QPixmap statePixmap() const
+ {
+ if ( !isOn() ) {
+ if ( !installed )
+ return *pm_uninstalled;
+ else
+ return *pm_installed;
+ } else {
+ if ( !installed )
+ return *pm_install;
+ else
+ return *pm_uninstall;
+ }
+ }
+
+ QString name() const { return text(0); }
+ QString description() const { return text(1); }
+ bool isInstalled() const { return installed; }
+
+ QString key( int column, bool ascending ) const
+ {
+ if ( column == 2 ) {
+ QString t = text(2);
+ double bytes=t.toDouble();
+ if ( t.contains('M') ) bytes*=1024*1024;
+ else if ( t.contains('K') || t.contains('k') ) bytes*=1024;
+ if ( !ascending ) bytes=999999999-bytes;
+ return QString().sprintf("%09d",(int)bytes);
+ } else {
+ return QListViewItem::key(column,ascending);
+ }
+ }
+};
+
+/*
+ * Constructs a PackageManager which is a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'
+ */
+PackageManager::PackageManager( QWidget* parent, const char* name, WFlags fl )
+ : PackageManagerBase( parent, name, fl )
+{
+ settings = new PackageManagerSettings(this,0,TRUE);
+ connect( settings->newserver, SIGNAL(clicked()), this, SLOT(newServer()) );
+ connect( settings->removeserver, SIGNAL(clicked()), this, SLOT(removeServer()) );
+ connect( settings->servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) );
+ connect( doit, SIGNAL(clicked()), this, SLOT(doIt()) );
+ settings->servername->setEnabled(FALSE);
+ settings->serverurl->setEnabled(FALSE);
+ serverurl.setAutoDelete(TRUE);
+
+ if (!pm_uninstalled) {
+ pm_uninstalled = new QPixmap(Resource::loadPixmap("uninstalled"));
+ pm_installed = new QPixmap(Resource::loadPixmap("installed"));
+ pm_install = new QPixmap(Resource::loadPixmap("install"));
+ pm_uninstall = new QPixmap(Resource::loadPixmap("uninstall"));
+ }
+
+ QFontMetrics fm = fontMetrics();
+ int w0 = fm.width(PackageManagerBase::tr("Package"))+30;
+ int w2 = fm.width("00000")+4;
+ list->setColumnWidth(0,w0);
+ list->setColumnWidth(1,228-w2-w0); // ### screen-biased
+ list->setColumnWidth(2,w2);
+ list->setColumnWidthMode(0,QListView::Manual);
+ list->setColumnWidthMode(1,QListView::Manual);
+ list->setColumnWidthMode(2,QListView::Manual);
+ list->setSelectionMode( QListView::Multi );
+ details = 0;
+ ipkg_old = 0;
+ readSettings();
+ updatePackageList();
+ progress->hide();
+}
+
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+PackageManager::~PackageManager()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+void PackageManager::newServer()
+{
+ int i = settings->servers->count();
+ if ( settings->servername->isEnabled() || settings->serverurl->text().isEmpty() ) {
+ serverurl.insert(i,new QString("http://"));
+ settings->servers->insertItem(tr("New"));
+ } else {
+ // allows one-level undo
+ serverurl.insert(i,new QString(settings->serverurl->text()));
+ settings->servers->insertItem(settings->servername->text());
+ }
+ settings->servers->setSelected(i,TRUE);
+ editServer(i);
+}
+
+void PackageManager::editServer(int i)
+{
+ if ( settings->servername->isEnabled() ) {
+ disconnect( settings->servername, SIGNAL(textChanged(const QString&)), this, SLOT(nameChanged(const QString&)) );
+ disconnect( settings->serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(urlChanged(const QString&)) );
+ } else {
+ settings->servername->setEnabled(TRUE);
+ settings->serverurl->setEnabled(TRUE);
+ }
+
+ settings->servername->setText( settings->servers->text(i) );
+ settings->serverurl->setText( *serverurl[i] );
+
+ editedserver = i;
+
+ connect( settings->servername, SIGNAL(textChanged(const QString&)), this, SLOT(nameChanged(const QString&)) );
+ connect( settings->serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(urlChanged(const QString&)) );
+}
+
+void PackageManager::removeServer()
+{
+ disconnect( settings->servername, SIGNAL(textChanged(const QString&)), this, SLOT(nameChanged(const QString&)) );
+ disconnect( settings->serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(urlChanged(const QString&)) );
+ settings->servername->setText(settings->servers->text(editedserver));
+ settings->serverurl->setText(*serverurl[editedserver]);
+ disconnect( settings->servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) );
+ settings->servers->removeItem(editedserver);
+ connect( settings->servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) );
+ settings->servername->setEnabled(FALSE);
+ settings->serverurl->setEnabled(FALSE);
+}
+
+void PackageManager::nameChanged(const QString& t)
+{
+ disconnect( settings->servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) );
+ settings->servers->changeItem( t, editedserver );
+ connect( settings->servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) );
+}
+
+void PackageManager::urlChanged(const QString& t)
+{
+ serverurl.replace(editedserver, new QString(t));
+}
+
+static void selectComboItem(QComboBox *cb, const QString s)
+{
+ for (int i=0; i<cb->count(); i++) {
+ if ( cb->text(i) == s ) {
+ cb->setCurrentItem(i);
+ return;
+ }
+ }
+}
+
+void PackageManager::updatePackageList()
+{
+ disconnect(section,SIGNAL(activated(int)),this,SLOT(updatePackageList()));
+ disconnect(subsection,SIGNAL(activated(int)),this,SLOT(updatePackageList()));
+
+ list->clear();
+ QString cursection = section->currentText();
+ QString cursubsection = subsection->currentText();
+ QString all=tr("All");
+ if ( cursection == all ) cursection=QString::null;
+ if ( cursubsection == all ) cursubsection=QString::null;
+ section->clear();
+ subsection->clear();
+
+ QDict<void> sections;
+ QDict<void> subsections;
+ QDict<void> installed;
+
+ QRegExp separatorRegExp( ":[\t ]+" );
+
+ QString status = ipkgStatusOutput();
+ if ( !status.isEmpty() ) {
+ QStringList lines = QStringList::split('\n',status,TRUE);
+ QString name;
+ QString status;
+ for (QStringList::Iterator it = lines.begin(); it!=lines.end(); ++it) {
+ QString line = *it;
+ if ( line.length()<=1 ) {
+ // EOR
+ if ( !name.isEmpty() ) {
+ if ( status.contains(" installed") )
+ installed.replace(name,(void*)1);
+ name="";
+ }
+ status="";
+ } else if ( line[0] == ' ' || line[0] == '\t' ) {
+ // continuation
+ } else {
+ int sep = line.find(separatorRegExp);
+ if ( sep >= 0 ) {
+ QString tag = line.left(sep);
+ if ( tag == "Package" ) {
+ name = line.mid(sep+2).simplifyWhiteSpace();
+ } else if ( tag == "Status" ) {
+ status = line.mid(sep+1);
+ }
+ }
+ }
+ }
+ }
+
+ QString info = ipkgInfoOutput();
+ if ( !info.isEmpty() ) {
+ QStringList lines = QStringList::split('\n',info,TRUE);
+ QString description_short;
+ QString name;
+ QString size;
+ QString sec;
+ for (QStringList::Iterator it = lines.begin(); it!=lines.end(); ++it) {
+ QString line = *it;
+ if ( line.length()<=1 ) {
+ // EOR
+ if ( !name.isEmpty() ) {
+ int sl = sec.find('/');
+ QString s = sl < 0 ? sec : sec.left(sl);
+ QString ss = sl < 0 ? QString::null : sec.mid(sl+1);
+ sections.replace(s,(void*)1);
+ if ( cursection.isNull()
+ || cursection == s
+ && (cursubsection.isNull() || cursubsection == ss) )
+ {
+ if ( !cursection.isNull() && !ss.isNull() )
+ subsections.replace(ss,(void*)1);
+ description_short[0] = description_short[0].upper();
+ if ( description_short.left(4) == "The " )
+ description_short = description_short.mid(4);
+ if ( description_short.left(2) == "A " )
+ description_short = description_short.mid(2);
+ description_short[0] = description_short[0].upper();
+ new PackageItem(list,name,description_short,size,
+ installed.find(name));
+ }
+ installed.remove( name );
+ }
+ name="";
+ size="";
+ sec="main";
+ } else if ( line[0] == ' ' || line[0] == '\t' ) {
+ // continuation
+ } else {
+ int sep = line.find(separatorRegExp);
+ if ( sep >= 0 ) {
+ QString tag = line.left(sep);
+ if ( tag == "Package" ) {
+ name = line.mid(sep+2).simplifyWhiteSpace();
+ } else if ( tag == "Description" ) {
+ description_short = line.mid(sep+2).simplifyWhiteSpace();
+ } else if ( tag == "Installed-Size" ) {
+ size = line.mid(sep+2).simplifyWhiteSpace();
+ } else if ( tag == "Section" ) {
+ sec = line.mid(sep+2).simplifyWhiteSpace();
+ }
+ }
+ }
+ }
+ if ( installed.count() && cursection.isNull() ) {
+ // we have some packages without description
+ QDictIterator<void> it( installed );
+ for( ; it.current(); ++it )
+ new PackageItem( list, it.currentKey(), "", "?" , TRUE );
+ }
+
+ QStringList s;
+ QDictIterator<void> it( sections );
+ for( ; it.current(); ++it )
+ s.append(it.currentKey());
+ s.sort();
+ section->insertItem(all);
+ section->insertStringList(s);
+ selectComboItem(section,cursection.isNull()?all:cursection);
+ if ( cursection.isNull() ) {
+ subsection->setEnabled(FALSE);
+ } else {
+ subsection->setEnabled(TRUE);
+ QStringList s;
+ QDictIterator<void> it( subsections );
+ for( ; it.current(); ++it )
+ s.append(it.currentKey());
+ s.sort();
+ subsection->insertItem(all);
+ subsection->insertStringList(s);
+ selectComboItem(subsection,cursubsection.isNull()?all:cursubsection);
+ }
+ } else {
+ new QListViewItem(list,"ERROR");
+ }
+
+ connect(section,SIGNAL(activated(int)),SLOT(updatePackageList()));
+ connect(subsection,SIGNAL(activated(int)),this,SLOT(updatePackageList()));
+}
+
+PackageItem* PackageManager::current() const
+{
+ return (PackageItem*)list->currentItem();
+}
+
+/*
+ * public slot
+ */
+void PackageManager::doCurrentDetails(bool multi)
+{
+ PackageItem* pit = current();
+ if ( pit ) {
+ if ( !details ) {
+ details = new PackageDetails;
+ connect( details->install, SIGNAL(clicked()),
+ this, SLOT(installCurrent()));
+ connect( details->remove, SIGNAL(clicked()),
+ this, SLOT(removeCurrent()));
+ details->description->setTextFormat(RichText);
+ }
+ if ( multi ) {
+ disconnect( details->ignore, SIGNAL(clicked()),
+ details, SLOT(close()));
+ connect( details->ignore, SIGNAL(clicked()),
+ this, SLOT(doNextDetails()));
+ } else {
+ disconnect( details->ignore, SIGNAL(clicked()),
+ this, SLOT(doNextDetails()));
+ connect( details->ignore, SIGNAL(clicked()),
+ details, SLOT(close()));
+ }
+ pit->setSelected(FALSE);
+ details->setCaption("Package: " + pit->name());
+ details->description->setText(fullDetails(pit->name()));
+ details->install->setEnabled(!pit->isInstalled());
+ details->remove->setEnabled(pit->isInstalled());
+ details->showMaximized();
+ }
+}
+
+void PackageManager::doDetails()
+{
+ doCurrentDetails(FALSE);
+}
+
+void PackageManager::doNextDetails()
+{
+ QListViewItem* i = list->firstChild();
+ for ( ; i; i = i->nextSibling() ) {
+ if ( i->isSelected() )
+ break;
+ }
+ list->setCurrentItem(i);
+ if ( i ) {
+ doCurrentDetails(TRUE);
+ } else if ( details )
+ details->close();
+}
+
+QString PackageManager::fullDetails(const QString& pk)
+{
+ QString status;
+ Process ipkg_status(QStringList() << "ipkg" << "info" << pk);
+ if ( ipkg_status.exec("",status) ) {
+ QStringList lines = QStringList::split('\n',status,TRUE);
+ QString description;
+ for (QStringList::Iterator it = lines.begin(); it!=lines.end(); ++it) {
+ QString line = *it;
+ if ( line == " ." ) {
+ description.append("<p>");
+ } else if ( line[0] == ' ' || line[0] == '\t' ) {
+ // continuation
+ description.append(" ");
+ description.append(Qtopia::escapeString(line));
+ } else {
+ int sep = line.find(QRegExp(":[\t ]+"));
+ if ( sep >= 0 ) {
+ QString tag = line.left(sep);
+ description.append("<br>");
+ description.append("<b>");
+ description.append(Qtopia::escapeString(tag));
+ description.append(":</b> ");
+ description.append(Qtopia::escapeString(line.mid(sep+2)));
+ } else {
+ description.append(" ");
+ description.append(Qtopia::escapeString(line));
+ }
+ }
+ }
+ return description;
+ }
+
+ return QString::null;
+}
+
+void PackageManager::installCurrent()
+{
+ current()->setOn(TRUE);
+ details->close();
+}
+
+void PackageManager::removeCurrent()
+{
+ current()->setOn(TRUE);
+ details->close();
+}
+
+bool PackageManager::readIpkgConfig(const QString& conffile)
+{
+ QFile conf(conffile);
+ if ( conf.open(IO_ReadOnly) ) {
+ QTextStream s(&conf);
+ settings->servers->clear();
+ serverurl.clear();
+ ipkg_old=0;
+ int currentserver=0;
+ while ( !s.atEnd() ) {
+ QString l = s.readLine();
+ QStringList token = QStringList::split(' ', l);
+ if ( token[0] == "src" || token[0] == "#src" ) {
+ currentserver=settings->servers->count();
+ serverurl.insert(settings->servers->count(),new QString(token[2]));
+ int a = token[0] == "src" ? 1 : 0;
+ int i = settings->servers->count();
+ settings->servers->insertItem(token[1]);
+ settings->servers->setSelected(i,a);
+ } else if ( token[0] == "dest" ) {
+ // needs UI
+ } else if ( token[0] == "option" ) {
+ // ### somehow need to use the settings from netsetup
+// if ( token[1] == "http_proxy" )
+// settings->http->setText(token[2]);
+// else if ( token[1] == "ftp_proxy" )
+// settings->ftp->setText(token[2]);
+// else if ( token[1] == "proxy_username" )
+// settings->username->setText(token[2]);
+// else if ( token[1] == "proxy_password" )
+// settings->password->setText(token[2]);
+ } else {
+ // Old style?
+ int eq = l.find('=');
+ if ( eq >= 0 ) {
+ QString v = l.mid(eq+1).stripWhiteSpace();
+ if ( v[0] == '"' || v[0] == '\'' ) {
+ int cl=v.find(v[0],1);
+ if ( cl >= 0 )
+ v = v.mid(1,cl-1);
+ }
+ if ( l.left(12) == "IPKG_SOURCE=" ) {
+ ipkg_old=1;
+ currentserver=settings->servers->count();
+ serverurl.insert(settings->servers->count(),new QString(v));
+ settings->servers->insertItem(v);
+ } else if ( l.left(13) == "#IPKG_SOURCE=" ) {
+ serverurl.insert(settings->servers->count(),new QString(v));
+ settings->servers->insertItem(v);
+ } else if ( l.left(10) == "IPKG_ROOT=" ) {
+ // ### no UI
+// } else if ( l.left(20) == "IPKG_PROXY_USERNAME=" ) {
+// settings->username->setText(v);
+// } else if ( l.left(20) == "IPKG_PROXY_PASSWORD=" ) {
+// settings->password->setText(v);
+// } else if ( l.left(16) == "IPKG_PROXY_HTTP=" ) {
+// settings->http->setText(v);
+// } else if ( l.left(16) == "IPKG_PROXY_FTP=" ) {
+// settings->ftp->setText(v);
+ }
+ }
+ }
+ }
+ if ( ipkg_old ) {
+ settings->servers->setSelectionMode(QListBox::Single);
+ settings->servers->setSelected(currentserver,TRUE);
+ }
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+/*
+ * public slot
+ */
+void PackageManager::doSettings()
+{
+ settings->showMaximized();
+ if ( settings->exec() ) {
+ writeSettings();
+ startRun();
+ runIpkg("update");
+ endRun();
+ updatePackageList();
+ } else {
+ readSettings();
+ }
+}
+
+void PackageManager::readSettings()
+{
+ // read from config file(s)
+ readIpkgConfig("/etc/ipkg.conf");
+}
+
+void PackageManager::writeSettings()
+{
+ QFile conf("/etc/ipkg.conf");
+ if ( conf.open(IO_WriteOnly) ) {
+ QTextStream s(&conf);
+ s << "# Written by Qtopia Package Manager\n";
+ if ( !ipkg_old ) {
+ for (int i=0; i<(int)settings->servers->count(); i++) {
+ QString url = serverurl[i] ? *serverurl[i] : QString("???");
+ if ( !settings->servers->isSelected(i) )
+ s << "#";
+ s << "src " << settings->servers->text(i) << " " << url << "\n";
+ }
+ s << "dest root /\n"; // ### need UI
+// if ( !settings->username->text().isEmpty() )
+// s << "option proxy_username " << settings->username->text() << "\n";
+// if ( !settings->password->text().isEmpty() )
+// s << "option proxy_password " << settings->password->text() << "\n";
+// if ( !settings->http->text().isEmpty() )
+// s << "option http_proxy " << settings->http->text() << "\n";
+// if ( !settings->ftp->text().isEmpty() )
+// s << "option ftp_proxy " << settings->ftp->text() << "\n";
+ } else {
+ // Old style
+ bool src_selected=FALSE;
+ for (int i=0; i<(int)settings->servers->count(); i++) {
+ if ( settings->servers->isSelected(i) ) {
+ src_selected=TRUE;
+ } else {
+ s << "#";
+ }
+ s << "IPKG_SOURCE=\"" << settings->servers->text(i) << "\"\n";
+ }
+ if ( !src_selected )
+ s << "IPKG_SOURCE=\"" << settings->servers->currentText() << "\"\n";
+ s << "IPKG_ROOT=/\n"
+// << "IPKG_PROXY_USERNAME=\"" << settings->username->text() << "\"\n"
+// << "IPKG_PROXY_PASSWORD=\"" << settings->password->text() << "\"\n"
+// << "IPKG_PROXY_HTTP=\"" << settings->http->text() << "\"\n"
+// << "IPKG_PROXY_FTP=\"" << settings->ftp->text() << "\"\n"
+ ;
+ }
+ conf.close();
+ }
+}
+
+/*
+ * public slot
+ */
+void PackageManager::doFind()
+{
+ Search s(this, 0, TRUE);
+ if ( s.exec() ) {
+ QString p = s.pattern->text();
+ if ( p.isEmpty() ) {
+ list->selectAll(FALSE);
+ } else {
+ selectPackages(findPackages(p));
+ doNextDetails();
+ }
+ }
+}
+
+void PackageManager::selectPackages( const QStringList& l )
+{
+ QDict<void> d;
+ for (QStringList::ConstIterator it = l.begin(); it != l.end(); ++it)
+ d.replace(*it,(void*)1);
+ QListViewItem* i;
+ for ( i = list->firstChild(); i; i = i->nextSibling() ) {
+ PackageItem* pit = (PackageItem*)i;
+ i->setSelected( d[pit->name()] );
+ }
+}
+
+QStringList PackageManager::findPackages( const QRegExp& r )
+{
+ QStringList matches;
+
+ QString info = ipkgInfoOutput();
+ if ( !info.isEmpty() ) {
+ QStringList lines = QStringList::split('\n',info,TRUE);
+ QRegExp re = r;
+ QString description="";
+ QString name;
+ for (QStringList::Iterator it = lines.begin(); it!=lines.end(); ++it) {
+ QString line = *it;
+ if ( line.length()<=1 ) {
+ // EOR
+ if ( re.match(description) >= 0 )
+ matches.append(name);
+ description="";
+ name="";
+ } else if ( line[0] == ' ' || line[0] == '\t' ) {
+ // continuation
+ description.append(" ");
+ description.append(Qtopia::escapeString(line));
+ } else {
+ int sep = line.find(QRegExp(":[\t ]+"));
+ if ( sep >= 0 ) {
+ QString tag = line.left(sep);
+ if ( tag == "Package" )
+ name = line.mid(sep+2).simplifyWhiteSpace();
+ if ( !description.isEmpty() )
+ description.append("<br>");
+ description.append("<b>");
+ description.append(Qtopia::escapeString(tag));
+ description.append(":</b> ");
+ description.append(Qtopia::escapeString(line.mid(sep+2)));
+ }
+ }
+ }
+ }
+
+ return matches;
+}
+
+/*
+ * public slot
+ */
+void PackageManager::doUpgrade()
+{
+ startMultiRun(2);
+ runIpkg("update");
+ runIpkg("upgrade");
+ updatePackageList();
+ endRun();
+}
+
+
+void PackageManager::doIt()
+{
+ bool ok = commitWithIpkg();
+ updatePackageList(); // things may have changed
+ if (!ok) qApp->beep();
+}
+
+bool PackageManager::commitWithIpkg()
+{
+ // A full implementation would do the following, but we'll just do
+ // it simply and non-interactively for now.
+ //
+ // setenv IPKG_CONF_DIR for a null $IPKG_CONF_DIR/ipkg.conf
+ // setenv IPKG_SOURCE, IPKG_ROOT, etc.
+ // run ipkg, processing interactivity as dialogs
+ // - "... (Y/I/N/O/D) [default=N] ?" -> ...
+ // - "[Press ENTER to continue]" (if D chosen above)
+ // - "The following packages are marked `Essential'... Install them now [Y/n] ?"
+ // - "The following packages...ready to be installed:... Install them now [Y/n] ?"
+ // return FALSE cancelled
+
+ QStringList to_remove, to_install;
+
+ for ( QListViewItem* i = list->firstChild(); i; i = i->nextSibling() ) {
+ PackageItem* pit = (PackageItem*)i;
+ if ( pit->isOn() ) {
+ if ( pit->isInstalled() )
+ to_remove.append(pit->name());
+ else
+ to_install.append(pit->name());
+ }
+ }
+
+ bool ok=TRUE;
+
+ int jobs = to_remove.count()+to_install.count();
+ if ( jobs ) {
+ startMultiRun(jobs);
+
+ if ( to_remove.count() ) {
+ for (QStringList::ConstIterator it=to_remove.begin(); it!=to_remove.end(); ++it) {
+ if ( runIpkg("remove " + *it) != 0 ) {
+ ok = FALSE;
+ }
+ }
+ }
+ if ( to_install.count() ) {
+ for (QStringList::ConstIterator it=to_install.begin(); it!=to_install.end(); ++it) {
+ if ( runIpkg("install " + *it) != 0 ) {
+ ok = FALSE;
+ }
+ }
+ }
+
+ // ##### If we looked in the list of files, we could send out accurate
+ // ##### messages. But we don't bother yet, and just do an "all".
+ QCopEnvelope e("QPE/System", "linkChanged(QString)");
+ QString lf = QString::null;
+ e << lf;
+
+#if QT_VERSION > 230 // a bug breaks this otherwise
+ if ( !ok )
+ QMessageBox::warning(this, "Error", "<p><tt>ipkg</tt> says something went wrong. Sorry.");
+#endif
+
+ endRun();
+ }
+
+ return ok;
+}
+
+QString PackageManager::ipkgStatusOutput()
+{
+ if ( cachedIpkgStatusOutput.isEmpty() ) {
+ Process ipkg_status( QStringList() << "ipkg" << "status" );
+ ipkg_status.exec( 0, cachedIpkgStatusOutput );
+ }
+ return QString::fromLocal8Bit( cachedIpkgStatusOutput );
+}
+
+QString PackageManager::ipkgInfoOutput()
+{
+ if ( cachedIpkgInfoOutput.isEmpty() ) {
+ Process ipkg_info( QStringList() << "ipkg" << "info" );
+ ipkg_info.exec( 0, cachedIpkgInfoOutput );
+ }
+ return QString::fromLocal8Bit( cachedIpkgInfoOutput );
+}
+
+void PackageManager::setCachedIpkgOutputDirty()
+{
+ cachedIpkgInfoOutput = cachedIpkgStatusOutput = QString::null;
+}
+
+void PackageManager::startMultiRun(int jobs)
+{
+ startRun();
+ progress->setTotalSteps(jobs);
+ progress->setProgress(0);
+}
+
+void PackageManager::startRun()
+{
+ progress->show();
+ doit->hide();
+}
+
+void PackageManager::endRun()
+{
+ doit->show();
+ progress->hide();
+}
+
+int PackageManager::runIpkg(const QString& args)
+{
+ if ( progress->progress() == -1 )
+ startMultiRun(1);
+ else
+ startRun();
+ QString cmd = "ipkg ";
+ if ( ipkg_old )
+ cmd += "</dev/null ";
+ else
+ cmd += "-force-defaults ";
+ int r = system((cmd+args).latin1());
+ progress->setProgress(progress->progress()+1);
+ setCachedIpkgOutputDirty();
+ endRun();
+ return r;
+}
+
+// simple hack to get support for ipkg mimetype
+void PackageManager::maybeInstall( const QString &ipk )
+{
+ int pos = ipk.findRev( "/" );
+ QString package = ipk.mid( pos + 1 );
+ pos = package.find ( "_" );
+ if ( pos != -1 )
+ package = package.left( pos );
+ switch ( QMessageBox::information( 0, tr( "Install Package" ),
+ tr("Are you sure you want to\ninstall package\n\n%1")
+ .arg(package), QMessageBox::Yes,
+ QMessageBox::No|QMessageBox::Default|QMessageBox::Escape, 0 ) ) {
+ case QMessageBox::Yes: {
+ startRun();
+ runIpkg("install " + ipk );
+ QCopEnvelope e("QPE/System", "linkChanged(QString)");
+ QString lf = QString::null;
+ e << lf;
+ endRun();
+ }
+ break;
+ case QMessageBox::No:
+ default:
+ // do nothing
+ break;
+ }
+}
+
+void PackageManager::setDocument(const QString& fileref)
+{
+ if ( fileref.isNull() )
+ return;
+ DocLnk doc( fileref );
+ if ( doc.file().isEmpty() )
+ return;
+ maybeInstall( doc.file() );
+ updatePackageList();
+}
diff --git a/noncore/unsupported/oipkg/packagemanager.h b/noncore/unsupported/oipkg/packagemanager.h
new file mode 100644
index 0000000..a3f89d0
--- a/dev/null
+++ b/noncore/unsupported/oipkg/packagemanager.h
@@ -0,0 +1,94 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef PACKAGEMANAGER_H
+#define PACKAGEMANAGER_H
+#include "packagemanagerbase.h"
+#include <qintdict.h>
+
+class PackageItem;
+class PackageDetails;
+class PackageManagerSettings;
+
+class PackageManager : public PackageManagerBase
+{
+ Q_OBJECT
+
+public:
+ PackageManager( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~PackageManager();
+
+
+public slots:
+ void doDetails();
+ void doSettings();
+ void doFind();
+ void doUpgrade();
+ void setDocument(const QString& fileref);
+
+protected slots:
+ void doIt();
+
+private slots:
+ void installCurrent();
+ void removeCurrent();
+ void doNextDetails();
+
+ void newServer();
+ void editServer(int);
+ void removeServer();
+ void nameChanged(const QString&);
+ void urlChanged(const QString&);
+ void updatePackageList();
+
+private:
+ void maybeInstall( const QString &ipk );
+ void startRun();
+ void endRun();
+ void startMultiRun(int jobs);
+ int runIpkg(const QString& args);
+ QString fullDetails(const QString& pk);
+
+ bool readIpkgConfig(const QString& conffile);
+
+ void doCurrentDetails(bool);
+ PackageItem* current() const;
+
+ QStringList findPackages( const QRegExp& re );
+ void selectPackages( const QStringList& l );
+
+ bool commitWithIpkg();
+
+ QString ipkgStatusOutput();
+ QString ipkgInfoOutput();
+ void setCachedIpkgOutputDirty();
+
+ PackageManagerSettings* settings;
+ QIntDict<QString> serverurl;
+ int editedserver;
+ int ipkg_old;
+ void writeSettings();
+ void readSettings();
+
+ PackageDetails* details;
+ QCString cachedIpkgStatusOutput;
+ QCString cachedIpkgInfoOutput;
+};
+
+#endif // PACKAGEMANAGER_H
diff --git a/noncore/unsupported/oipkg/packagemanagerbase.ui b/noncore/unsupported/oipkg/packagemanagerbase.ui
new file mode 100644
index 0000000..9d5a178
--- a/dev/null
+++ b/noncore/unsupported/oipkg/packagemanagerbase.ui
@@ -0,0 +1,268 @@
+<!DOCTYPE UI><UI>
+<class>PackageManagerBase</class>
+<widget>
+ <class>QWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Form1</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>257</width>
+ <height>290</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Package Manager</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>3</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Section:</string>
+ </property>
+ </widget>
+ <widget row="2" column="0" rowspan="1" colspan="3" >
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout1</cstring>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>4</number>
+ </property>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>upgrade</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Upgrade all</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>doit</cstring>
+ </property>
+ <property stdset="1">
+ <name>sizePolicy</name>
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ </sizepolicy>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Do it!</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QProgressBar</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>progress</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>settings_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image0</pixmap>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>find_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image1</pixmap>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>info_btn</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string></string>
+ </property>
+ <property stdset="1">
+ <name>pixmap</name>
+ <pixmap>image2</pixmap>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget row="0" column="2" >
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>subsection</cstring>
+ </property>
+ </widget>
+ <widget row="0" column="1" >
+ <class>QComboBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>section</cstring>
+ </property>
+ </widget>
+ <widget row="1" column="0" rowspan="1" colspan="3" >
+ <class>QListView</class>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Package</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Description</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property>
+ <name>text</name>
+ <string>Size</string>
+ </property>
+ <property>
+ <name>clickable</name>
+ <bool>true</bool>
+ </property>
+ <property>
+ <name>resizeable</name>
+ <bool>true</bool>
+ </property>
+ </column>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>list</cstring>
+ </property>
+ <property stdset="1">
+ <name>allColumnsShowFocus</name>
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image>
+ <name>image0</name>
+ <data format="XPM.GZ" length="1897">789c5dd3c972db381006e0bb9f82e5beb9527fb88baca939387b9c7851363b49e50082a4e445966dc98b3c35ef3e602f4c3cd6e9d3df683420f8f94e7472b41fed3cdf5aadddfad4477eee6ea29df676b1d8fcfcf5f73f5bdb491a2559546751bafd6c6b7bba8e7c74b0bcec0660124031ff0d26cfaec2474c6aaf6e4757bcbe1e9cc4630e7162fd66a3a5be50e7ea925d9969aeae34ff31388dd3d081f373752ec66f4bfd2b766da61b732af547ea4aebdfa8bde4b41a9c2559acf907b3aebf505bbf4fec7a7433ba663b7396b0cfd495fa44adfbe3ed68599f9b33f1f7c17932d6bf16e7b1d64fd5364f6b96fde896edf24aeb63b3e6976add9feecdb9e4fd68c7ebbbc1456a392a711117fcd8b05417da9fefaf70a31bb3d66fd4b59ed79bb5ff5cdd6afddde0322d139defc12c392dd585e61bb3e60bb62b751e9c9a0b39dfcc5cca7ed7ea5a723a339762cb6d3e9e679295added70bb3e62bf144e7c737b3e62fcd938c9daaedbe0e464bff477633a9f57c4e5c59bf2f83ab2c58ea0fcd15f7a735bba96a9df7caacf564ae1a36bfa7dad7addc0f3d9a6bcf39ffffb9dc252e67f37d3bef3ab92ff07e4ddb383ddf9eba9379c0efd1173ed5fc585dfa82f7e3dfdfb7c12de7fc5edba22d6bd98fdf6bdbb5e1c2b99e7fdfaeec529defa3ba54bf63779dd379b3c17dd9757dc9fe2aee53cd3f8fe6f5b4cbeec3373dbb53f792233137b27e7fb4ccffdeace7bb1a2db9f5efe53cd3b57d407068e0d1a2432f196698e3146738c70516b8c41257b896df052bac718b3bdce3019b903c62172fe4cde1155ee30ddee21dde630f1ff011fb38d09e8738c2149fc2b77bf88c2ff81ab26f360b8ec31427f88e1f884396842cfd3d2732e428506212b2fd3fd7715aa12610910b49f2e7bae99a1af2d492474cddffd7514f331434a3399d3edd2f6467744e17b4a04b5ad2155d3fd9ef986e688515ade9364c7bf8f43ee92eacbda707dad023ed6efffbd7d67f2c679e40</data>
+ </image>
+ <image>
+ <name>image1</name>
+ <data format="XPM.GZ" length="1182">789c55d34b739b301007f0bb3f05636e9e0e0181304ca78724b6f3b4e3043b76d2e94148c28f183b7ec7e9f4bb97d52ea4151cf4fbaf249619386b58e37ed76a9cd5b63bb19b494b4ec5c66aa87d9e9f7efefaf1bb56f702abb8796c79f56fb5ba6349abb75a6a9827c5dc76cd008e8801726c18c105ec1225f205e8b965b583840b288901d2368c0a9ac58218211551225320733dc9ccde47a01f33c962200372e613ef91dce50cd82772e4aba1085cdfbc7b0fc91517c00130644184d52b64e88566ef3b918766b126c6589d5734d536304a632f0e804fc038682aacee0ca5283a017e0285145a48e0033265a9a9ce88213200a641445dad916535238a54018740c963afe9037da410d89547d4d8c60752869203af89027947d4d29cec1aaa983753e033326578540b592ebe45aa5099a34e40c59550e6abbb216ae4a5a12eab2ba466c88b923a041e892172020420df2a9abd53a2409e1335726ba8339699bd076288dc130572032c6ac4bc62065c1a662517c40ce938b64885908e1926513a9b4c67735125f6fc6db1c897ab775926729d2ff27c53fcd465924e8a607f387e548938eef3c3f6789a7d259fdbf3e9c565ab6d9749e7eafae6b675b7beef564f17bdf6faa1dd7f7c4acac4e988a2c1ee60f89c94493146e3d1cbabeb255f493192840dfde4dfa48806c1ff09644efdcff7da5f08a60ed0</data>
+ </image>
+ <image>
+ <name>image2</name>
+ <data format="XPM.GZ" length="702">789c7dd1c96ac3301006e0bb9f4224b75092d891b550fa082d3d164a0f238d27abb33a1ba5ef5ecfd89098868e7cd0f75b23c97834501fefaf6a304a0e1554f3a8e20cf66a80c7b2bc7e7ebd7c27bd54abfac9ac4a7b4f496fa8a27adbac0b9e633def8fa5986b66ea783067cccc672ef3cc0d53a77aac659f8310b4d3c03c330d98dc08fb2db1e19c692736b513e652186c6e0373d7d2378c4c37b1e864f1b1617d29e145189c77b2f8da121bae985efbd46be6b665de300863cdc88496be61c5840800c282197430417a17420c10907962c63c9a98334b214688f276cac4820773cf244319192609a5e48f74ea9fa40f21e27d52f016d3d92d99132d80086ec97255ae3744dbbb2ec4dd9e4abc4f0e441576926379c2ce5978be5cbbc9704b84dd1bc29f64d8f43cfcae9fe7e417c79f9e92</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>settings_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>Form1</receiver>
+ <slot>doSettings()</slot>
+ </connection>
+ <connection>
+ <sender>find_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>Form1</receiver>
+ <slot>doFind()</slot>
+ </connection>
+ <connection>
+ <sender>info_btn</sender>
+ <signal>clicked()</signal>
+ <receiver>Form1</receiver>
+ <slot>doDetails()</slot>
+ </connection>
+ <connection>
+ <sender>list</sender>
+ <signal>doubleClicked(QListViewItem*)</signal>
+ <receiver>Form1</receiver>
+ <slot>doDetails()</slot>
+ </connection>
+ <connection>
+ <sender>upgrade</sender>
+ <signal>clicked()</signal>
+ <receiver>Form1</receiver>
+ <slot>doUpgrade()</slot>
+ </connection>
+ <slot access="public">doFind()</slot>
+ <slot access="public">doDetails()</slot>
+ <slot access="public">doSettings()</slot>
+ <slot access="public">doUpgrade()</slot>
+</connections>
+</UI>
diff --git a/noncore/unsupported/oipkg/pkdesc.ui b/noncore/unsupported/oipkg/pkdesc.ui
new file mode 100644
index 0000000..494d3d6
--- a/dev/null
+++ b/noncore/unsupported/oipkg/pkdesc.ui
@@ -0,0 +1,96 @@
+<!DOCTYPE UI><UI>
+<class>PackageDetails</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Form7</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>221</width>
+ <height>291</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>(pkgname)</string>
+ </property>
+ <property>
+ <name>layoutMargin</name>
+ </property>
+ <property>
+ <name>layoutSpacing</name>
+ </property>
+ <vbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>6</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>3</number>
+ </property>
+ <widget>
+ <class>QTextView</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>description</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>install</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Install</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>remove</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Remove</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QToolButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>ignore</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Ignore</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+</UI>
diff --git a/noncore/unsupported/oipkg/pkfind.ui b/noncore/unsupported/oipkg/pkfind.ui
new file mode 100644
index 0000000..7a24c00
--- a/dev/null
+++ b/noncore/unsupported/oipkg/pkfind.ui
@@ -0,0 +1,51 @@
+<!DOCTYPE UI><UI>
+<class>Search</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Form5</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>196</width>
+ <height>55</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Search Packages</string>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel4</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Find:</string>
+ </property>
+ </widget>
+ <widget>
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>pattern</cstring>
+ </property>
+ </widget>
+ </hbox>
+</widget>
+</UI>
diff --git a/noncore/unsupported/oipkg/pksettings.ui b/noncore/unsupported/oipkg/pksettings.ui
new file mode 100644
index 0000000..f182752
--- a/dev/null
+++ b/noncore/unsupported/oipkg/pksettings.ui
@@ -0,0 +1,176 @@
+<!DOCTYPE UI><UI>
+<class>PackageManagerSettings</class>
+<widget>
+ <class>QDialog</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Form4</cstring>
+ </property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>549</width>
+ <height>683</height>
+ </rect>
+ </property>
+ <property stdset="1">
+ <name>caption</name>
+ <string>Package Servers</string>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>11</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="3" column="0" rowspan="1" colspan="2" >
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout4</cstring>
+ </property>
+ <grid>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget row="0" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>servername</cstring>
+ </property>
+ </widget>
+ <widget row="0" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel1_3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Name:</string>
+ </property>
+ </widget>
+ <widget row="1" column="1" >
+ <class>QLineEdit</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>serverurl</cstring>
+ </property>
+ </widget>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2_3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>URL:</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget row="2" column="0" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>newserver</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>New</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="2" column="1" >
+ <class>QPushButton</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>removeserver</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Remove</string>
+ </property>
+ <property stdset="1">
+ <name>autoDefault</name>
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget row="1" column="0" rowspan="1" colspan="2" >
+ <class>QListBox</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>servers</cstring>
+ </property>
+ <property stdset="1">
+ <name>selectionMode</name>
+ <enum>Multi</enum>
+ </property>
+ </widget>
+ <widget row="0" column="0" rowspan="1" colspan="2" >
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout2</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Servers</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Servers</string>
+ </property>
+ </widget>
+ <spacer>
+ <property>
+ <name>name</name>
+ <cstring>Spacer2</cstring>
+ </property>
+ <property stdset="1">
+ <name>orientation</name>
+ <enum>Horizontal</enum>
+ </property>
+ <property stdset="1">
+ <name>sizeType</name>
+ <enum>Expanding</enum>
+ </property>
+ <property>
+ <name>sizeHint</name>
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+</UI>
diff --git a/noncore/unsupported/oipkg/qipkg.pro b/noncore/unsupported/oipkg/qipkg.pro
new file mode 100644
index 0000000..90d8703
--- a/dev/null
+++ b/noncore/unsupported/oipkg/qipkg.pro
@@ -0,0 +1,13 @@
+DESTDIR = $(QPEDIR)/bin
+TEMPLATE = app
+CONFIG = qt warn_on release
+HEADERS = packagemanager.h
+SOURCES = packagemanager.cpp \
+ main.cpp
+INCLUDEPATH += $(QPEDIR)/include
+DEPENDPATH += $(QPEDIR)/include
+LIBS += -lqpe
+INTERFACES = packagemanagerbase.ui pkdesc.ui pkfind.ui pksettings.ui
+TARGET = qipkg
+
+TRANSLATIONS = ../i18n/de/qipkg.ts
diff --git a/noncore/unsupported/oipkg/qpe-qipkg.control b/noncore/unsupported/oipkg/qpe-qipkg.control
new file mode 100644
index 0000000..3c3e7c8
--- a/dev/null
+++ b/noncore/unsupported/oipkg/qpe-qipkg.control
@@ -0,0 +1,9 @@
+Files: bin/qipkg apps/Settings/qipkg.desktop
+Priority: optional
+Section: qpe/settings
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Package Manager
+ A GUI front-end to ipkg for the Qtopia environment.
diff --git a/pics/Asteroids.png b/pics/Asteroids.png
new file mode 100644
index 0000000..92365c0
--- a/dev/null
+++ b/pics/Asteroids.png
Binary files differ
diff --git a/pics/Fifteen.png b/pics/Fifteen.png
new file mode 100644
index 0000000..6bc5090
--- a/dev/null
+++ b/pics/Fifteen.png
Binary files differ
diff --git a/pics/LanConnect.png b/pics/LanConnect.png
new file mode 100644
index 0000000..c9d122f
--- a/dev/null
+++ b/pics/LanConnect.png
Binary files differ
diff --git a/pics/Network/dialup.png b/pics/Network/dialup.png
new file mode 100644
index 0000000..7939a34
--- a/dev/null
+++ b/pics/Network/dialup.png
Binary files differ
diff --git a/pics/Network/lan.png b/pics/Network/lan.png
new file mode 100644
index 0000000..ccd297f
--- a/dev/null
+++ b/pics/Network/lan.png
Binary files differ
diff --git a/pics/Network/proxies.png b/pics/Network/proxies.png
new file mode 100644
index 0000000..c248bdc
--- a/dev/null
+++ b/pics/Network/proxies.png
Binary files differ
diff --git a/pics/Security.png b/pics/Security.png
new file mode 100644
index 0000000..54da444
--- a/dev/null
+++ b/pics/Security.png
Binary files differ
diff --git a/pics/SoundPlayer.png b/pics/SoundPlayer.png
new file mode 100644
index 0000000..b6280fd
--- a/dev/null
+++ b/pics/SoundPlayer.png
Binary files differ
diff --git a/pics/UnknownDocument-14.png b/pics/UnknownDocument-14.png
new file mode 100644
index 0000000..8493859
--- a/dev/null
+++ b/pics/UnknownDocument-14.png
Binary files differ
diff --git a/pics/UnknownDocument.png b/pics/UnknownDocument.png
new file mode 100644
index 0000000..f63d0bc
--- a/dev/null
+++ b/pics/UnknownDocument.png
Binary files differ
diff --git a/pics/capslock.xpm b/pics/capslock.xpm
new file mode 100644
index 0000000..61a93ab
--- a/dev/null
+++ b/pics/capslock.xpm
@@ -0,0 +1,10 @@
+/* XPM */
+static char * capslock_xpm[] = {
+"4 4 3 1",
+" c None",
+". c #545454",
+"+ c #000000",
+".++.",
+"+ ",
+"+ ",
+".++."};
diff --git a/pics/cardmon/pcmcia.png b/pics/cardmon/pcmcia.png
new file mode 100644
index 0000000..fb115d2
--- a/dev/null
+++ b/pics/cardmon/pcmcia.png
Binary files differ
diff --git a/pics/cards/card_back.png b/pics/cards/card_back.png
new file mode 100644
index 0000000..c38e845
--- a/dev/null
+++ b/pics/cards/card_back.png
Binary files differ
diff --git a/pics/cards/card_back0001.png b/pics/cards/card_back0001.png
new file mode 100644
index 0000000..d0eeeb5
--- a/dev/null
+++ b/pics/cards/card_back0001.png
Binary files differ
diff --git a/pics/cards/card_back0002.png b/pics/cards/card_back0002.png
new file mode 100644
index 0000000..c66f557
--- a/dev/null
+++ b/pics/cards/card_back0002.png
Binary files differ
diff --git a/pics/cards/card_back0003.png b/pics/cards/card_back0003.png
new file mode 100644
index 0000000..983c73e
--- a/dev/null
+++ b/pics/cards/card_back0003.png
Binary files differ
diff --git a/pics/cards/card_back0004.png b/pics/cards/card_back0004.png
new file mode 100644
index 0000000..3953dd6
--- a/dev/null
+++ b/pics/cards/card_back0004.png
Binary files differ
diff --git a/pics/cards/card_back0005.png b/pics/cards/card_back0005.png
new file mode 100644
index 0000000..6140352
--- a/dev/null
+++ b/pics/cards/card_back0005.png
Binary files differ
diff --git a/pics/cards/card_chars.png b/pics/cards/card_chars.png
new file mode 100644
index 0000000..6e50618
--- a/dev/null
+++ b/pics/cards/card_chars.png
Binary files differ
diff --git a/pics/cards/card_face.png b/pics/cards/card_face.png
new file mode 100644
index 0000000..7acc092
--- a/dev/null
+++ b/pics/cards/card_face.png
Binary files differ
diff --git a/pics/cards/card_suits.png b/pics/cards/card_suits.png
new file mode 100644
index 0000000..a10fdff
--- a/dev/null
+++ b/pics/cards/card_suits.png
Binary files differ
diff --git a/pics/chess.png b/pics/chess.png
new file mode 100644
index 0000000..dd7ce40
--- a/dev/null
+++ b/pics/chess.png
Binary files differ
diff --git a/pics/chess/simple-20.png b/pics/chess/simple-20.png
new file mode 100644
index 0000000..a8987c0
--- a/dev/null
+++ b/pics/chess/simple-20.png
Binary files differ
diff --git a/pics/chess/simple-28.png b/pics/chess/simple-28.png
new file mode 100644
index 0000000..29893db
--- a/dev/null
+++ b/pics/chess/simple-28.png
Binary files differ
diff --git a/pics/chess/simple-30.png b/pics/chess/simple-30.png
new file mode 100644
index 0000000..3dd4053
--- a/dev/null
+++ b/pics/chess/simple-30.png
Binary files differ
diff --git a/pics/chess/simple-40.png b/pics/chess/simple-40.png
new file mode 100644
index 0000000..f4db7f4
--- a/dev/null
+++ b/pics/chess/simple-40.png
Binary files differ
diff --git a/pics/down.png b/pics/down.png
new file mode 100644
index 0000000..ea25191
--- a/dev/null
+++ b/pics/down.png
Binary files differ
diff --git a/pics/grass.png b/pics/grass.png
new file mode 100644
index 0000000..812e356
--- a/dev/null
+++ b/pics/grass.png
Binary files differ
diff --git a/pics/info.png b/pics/info.png
new file mode 100755
index 0000000..1b12a95
--- a/dev/null
+++ b/pics/info.png
Binary files differ
diff --git a/pics/inline/1to1.png b/pics/inline/1to1.png
new file mode 100644
index 0000000..ac26d89
--- a/dev/null
+++ b/pics/inline/1to1.png
Binary files differ
diff --git a/pics/inline/AddressBook.png b/pics/inline/AddressBook.png
new file mode 100644
index 0000000..7649f52
--- a/dev/null
+++ b/pics/inline/AddressBook.png
Binary files differ
diff --git a/pics/inline/Appearance.png b/pics/inline/Appearance.png
new file mode 100644
index 0000000..d849a39
--- a/dev/null
+++ b/pics/inline/Appearance.png
Binary files differ
diff --git a/pics/inline/AppsIcon.png b/pics/inline/AppsIcon.png
new file mode 100644
index 0000000..4221dc0
--- a/dev/null
+++ b/pics/inline/AppsIcon.png
Binary files differ
diff --git a/pics/inline/Calculator.png b/pics/inline/Calculator.png
new file mode 100644
index 0000000..4888487
--- a/dev/null
+++ b/pics/inline/Calculator.png
Binary files differ
diff --git a/pics/inline/Calibrate.png b/pics/inline/Calibrate.png
new file mode 100644
index 0000000..64c0edc
--- a/dev/null
+++ b/pics/inline/Calibrate.png
Binary files differ
diff --git a/pics/inline/CityTime.png b/pics/inline/CityTime.png
new file mode 100644
index 0000000..2865245
--- a/dev/null
+++ b/pics/inline/CityTime.png
Binary files differ
diff --git a/pics/inline/Clock.png b/pics/inline/Clock.png
new file mode 100644
index 0000000..2d32b22
--- a/dev/null
+++ b/pics/inline/Clock.png
Binary files differ
diff --git a/pics/inline/CloseButton.png b/pics/inline/CloseButton.png
new file mode 100644
index 0000000..eea0337
--- a/dev/null
+++ b/pics/inline/CloseButton.png
Binary files differ
diff --git a/pics/inline/DateBook.png b/pics/inline/DateBook.png
new file mode 100644
index 0000000..abe4cfb
--- a/dev/null
+++ b/pics/inline/DateBook.png
Binary files differ
diff --git a/pics/inline/DateTime.png b/pics/inline/DateTime.png
new file mode 100644
index 0000000..b37cfd4
--- a/dev/null
+++ b/pics/inline/DateTime.png
Binary files differ
diff --git a/pics/inline/DocsIcon.png b/pics/inline/DocsIcon.png
new file mode 100644
index 0000000..8e41741
--- a/dev/null
+++ b/pics/inline/DocsIcon.png
Binary files differ
diff --git a/pics/inline/DocumentTypeExcel.png b/pics/inline/DocumentTypeExcel.png
new file mode 100644
index 0000000..7627a44
--- a/dev/null
+++ b/pics/inline/DocumentTypeExcel.png
Binary files differ
diff --git a/pics/inline/DocumentTypeNone.png b/pics/inline/DocumentTypeNone.png
new file mode 100644
index 0000000..b48d59c
--- a/dev/null
+++ b/pics/inline/DocumentTypeNone.png
Binary files differ
diff --git a/pics/inline/DocumentTypePowerPoint.png b/pics/inline/DocumentTypePowerPoint.png
new file mode 100644
index 0000000..87565ec
--- a/dev/null
+++ b/pics/inline/DocumentTypePowerPoint.png
Binary files differ
diff --git a/pics/inline/DocumentTypeWord.png b/pics/inline/DocumentTypeWord.png
new file mode 100644
index 0000000..2a1f01b
--- a/dev/null
+++ b/pics/inline/DocumentTypeWord.png
Binary files differ
diff --git a/pics/inline/FileBrowser.png b/pics/inline/FileBrowser.png
new file mode 100644
index 0000000..17d50c2
--- a/dev/null
+++ b/pics/inline/FileBrowser.png
Binary files differ
diff --git a/pics/inline/Games.png b/pics/inline/Games.png
new file mode 100644
index 0000000..00c7fa1
--- a/dev/null
+++ b/pics/inline/Games.png
Binary files differ
diff --git a/pics/inline/Go-black-highlight.png b/pics/inline/Go-black-highlight.png
new file mode 100644
index 0000000..70070ff
--- a/dev/null
+++ b/pics/inline/Go-black-highlight.png
Binary files differ
diff --git a/pics/inline/Go-black.png b/pics/inline/Go-black.png
new file mode 100644
index 0000000..6831a9d
--- a/dev/null
+++ b/pics/inline/Go-black.png
Binary files differ
diff --git a/pics/inline/Go-white.png b/pics/inline/Go-white.png
new file mode 100644
index 0000000..599c7d3
--- a/dev/null
+++ b/pics/inline/Go-white.png
Binary files differ
diff --git a/pics/inline/Go.png b/pics/inline/Go.png
new file mode 100644
index 0000000..9121494
--- a/dev/null
+++ b/pics/inline/Go.png
Binary files differ
diff --git a/pics/inline/HelpBrowser.png b/pics/inline/HelpBrowser.png
new file mode 100644
index 0000000..988358b
--- a/dev/null
+++ b/pics/inline/HelpBrowser.png
Binary files differ
diff --git a/pics/inline/HelpButton.png b/pics/inline/HelpButton.png
new file mode 100644
index 0000000..e07acbc
--- a/dev/null
+++ b/pics/inline/HelpButton.png
Binary files differ
diff --git a/pics/inline/ImageViewer.png b/pics/inline/ImageViewer.png
new file mode 100644
index 0000000..5220f06
--- a/dev/null
+++ b/pics/inline/ImageViewer.png
Binary files differ
diff --git a/pics/inline/Ipkg.png b/pics/inline/Ipkg.png
new file mode 100644
index 0000000..0534496
--- a/dev/null
+++ b/pics/inline/Ipkg.png
Binary files differ
diff --git a/pics/inline/Language.png b/pics/inline/Language.png
new file mode 100644
index 0000000..bfbea1c
--- a/dev/null
+++ b/pics/inline/Language.png
Binary files differ
diff --git a/pics/inline/Light.png b/pics/inline/Light.png
new file mode 100644
index 0000000..f34109a
--- a/dev/null
+++ b/pics/inline/Light.png
Binary files differ
diff --git a/pics/inline/MPEGPlayer.png b/pics/inline/MPEGPlayer.png
new file mode 100644
index 0000000..fcc73cf
--- a/dev/null
+++ b/pics/inline/MPEGPlayer.png
Binary files differ
diff --git a/pics/inline/Mindbreaker.png b/pics/inline/Mindbreaker.png
new file mode 100644
index 0000000..b8a503f
--- a/dev/null
+++ b/pics/inline/Mindbreaker.png
Binary files differ
diff --git a/pics/inline/MineHunt.png b/pics/inline/MineHunt.png
new file mode 100644
index 0000000..1ac643c
--- a/dev/null
+++ b/pics/inline/MineHunt.png
Binary files differ
diff --git a/pics/inline/NetHack.png b/pics/inline/NetHack.png
new file mode 100644
index 0000000..1a5d9fd
--- a/dev/null
+++ b/pics/inline/NetHack.png
Binary files differ
diff --git a/pics/inline/OKButton.png b/pics/inline/OKButton.png
new file mode 100644
index 0000000..44c6810
--- a/dev/null
+++ b/pics/inline/OKButton.png
Binary files differ
diff --git a/pics/inline/Opera.png b/pics/inline/Opera.png
new file mode 100644
index 0000000..9967c06
--- a/dev/null
+++ b/pics/inline/Opera.png
Binary files differ
diff --git a/pics/inline/PPPConnect.png b/pics/inline/PPPConnect.png
new file mode 100644
index 0000000..9c32440
--- a/dev/null
+++ b/pics/inline/PPPConnect.png
Binary files differ
diff --git a/pics/inline/ParaShoot.png b/pics/inline/ParaShoot.png
new file mode 100644
index 0000000..656c937
--- a/dev/null
+++ b/pics/inline/ParaShoot.png
Binary files differ
diff --git a/pics/inline/README b/pics/inline/README
new file mode 100644
index 0000000..b027025
--- a/dev/null
+++ b/pics/inline/README
@@ -0,0 +1,2 @@
+Images here are converted to "inlinepics.h" and included in the libqpe, so they
+load much faster, and can be shared by multiple applications.
diff --git a/pics/inline/Rotation.png b/pics/inline/Rotation.png
new file mode 100644
index 0000000..d47641f
--- a/dev/null
+++ b/pics/inline/Rotation.png
Binary files differ
diff --git a/pics/inline/SettingsIcon.png b/pics/inline/SettingsIcon.png
new file mode 100644
index 0000000..2cbc1da
--- a/dev/null
+++ b/pics/inline/SettingsIcon.png
Binary files differ
diff --git a/pics/inline/Shutdown.png b/pics/inline/Shutdown.png
new file mode 100644
index 0000000..748544b
--- a/dev/null
+++ b/pics/inline/Shutdown.png
Binary files differ
diff --git a/pics/inline/Snake.png b/pics/inline/Snake.png
new file mode 100644
index 0000000..e7f0799
--- a/dev/null
+++ b/pics/inline/Snake.png
Binary files differ
diff --git a/pics/inline/Solitaire.png b/pics/inline/Solitaire.png
new file mode 100644
index 0000000..d40c048
--- a/dev/null
+++ b/pics/inline/Solitaire.png
Binary files differ
diff --git a/pics/inline/Sound.png b/pics/inline/Sound.png
new file mode 100644
index 0000000..7d21691
--- a/dev/null
+++ b/pics/inline/Sound.png
Binary files differ
diff --git a/pics/inline/SoundPlayer.png b/pics/inline/SoundPlayer.png
new file mode 100644
index 0000000..c61f359
--- a/dev/null
+++ b/pics/inline/SoundPlayer.png
Binary files differ
diff --git a/pics/inline/Spreadsheet.png b/pics/inline/Spreadsheet.png
new file mode 100644
index 0000000..497a397
--- a/dev/null
+++ b/pics/inline/Spreadsheet.png
Binary files differ
diff --git a/pics/inline/SystemInfo.png b/pics/inline/SystemInfo.png
new file mode 100644
index 0000000..6330591
--- a/dev/null
+++ b/pics/inline/SystemInfo.png
Binary files differ
diff --git a/pics/inline/Terminal.png b/pics/inline/Terminal.png
new file mode 100644
index 0000000..a1b8260
--- a/dev/null
+++ b/pics/inline/Terminal.png
Binary files differ
diff --git a/pics/inline/Tetrix.png b/pics/inline/Tetrix.png
new file mode 100644
index 0000000..328d6b8
--- a/dev/null
+++ b/pics/inline/Tetrix.png
Binary files differ
diff --git a/pics/inline/TextEditor.png b/pics/inline/TextEditor.png
new file mode 100644
index 0000000..a321302
--- a/dev/null
+++ b/pics/inline/TextEditor.png
Binary files differ
diff --git a/pics/inline/TodoList.png b/pics/inline/TodoList.png
new file mode 100644
index 0000000..323eea4
--- a/dev/null
+++ b/pics/inline/TodoList.png
Binary files differ
diff --git a/pics/inline/Tux.png b/pics/inline/Tux.png
new file mode 100644
index 0000000..8036cba
--- a/dev/null
+++ b/pics/inline/Tux.png
Binary files differ
diff --git a/pics/inline/UtilsIcon.png b/pics/inline/UtilsIcon.png
new file mode 100644
index 0000000..003cb0f
--- a/dev/null
+++ b/pics/inline/UtilsIcon.png
Binary files differ
diff --git a/pics/inline/WordGame.png b/pics/inline/WordGame.png
new file mode 100644
index 0000000..9280906
--- a/dev/null
+++ b/pics/inline/WordGame.png
Binary files differ
diff --git a/pics/inline/accessories.png b/pics/inline/accessories.png
new file mode 100644
index 0000000..92c8483
--- a/dev/null
+++ b/pics/inline/accessories.png
Binary files differ
diff --git a/pics/inline/appearance.png b/pics/inline/appearance.png
new file mode 100644
index 0000000..9914e50
--- a/dev/null
+++ b/pics/inline/appearance.png
Binary files differ
diff --git a/pics/inline/back.png b/pics/inline/back.png
new file mode 100644
index 0000000..452cdba
--- a/dev/null
+++ b/pics/inline/back.png
Binary files differ
diff --git a/pics/inline/back_inactive.png b/pics/inline/back_inactive.png
new file mode 100644
index 0000000..b622286
--- a/dev/null
+++ b/pics/inline/back_inactive.png
Binary files differ
diff --git a/pics/inline/background.png b/pics/inline/background.png
new file mode 100644
index 0000000..4890b2c
--- a/dev/null
+++ b/pics/inline/background.png
Binary files differ
diff --git a/pics/inline/beam.png b/pics/inline/beam.png
new file mode 100644
index 0000000..f21177c
--- a/dev/null
+++ b/pics/inline/beam.png
Binary files differ
diff --git a/pics/inline/bell.png b/pics/inline/bell.png
new file mode 100644
index 0000000..90debe0
--- a/dev/null
+++ b/pics/inline/bell.png
Binary files differ
diff --git a/pics/inline/bg.xpm b/pics/inline/bg.xpm
new file mode 100644
index 0000000..0bb03a2
--- a/dev/null
+++ b/pics/inline/bg.xpm
@@ -0,0 +1,124 @@
+/* XPM */
+static char *bg_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 85 1",
+/* colors */
+" c #618B80",
+". c #52776E",
+"X c #5F897E",
+"o c #5E877D",
+"O c #5D877C",
+"+ c #5C857B",
+"@ c #5A8379",
+"# c #557A70",
+"$ c #54786F",
+"% c #53786E",
+"& c #52766D",
+"* c #5F887D",
+"= c #50746B",
+"- c #5D867B",
+"; c #5C847A",
+": c #5B8479",
+"> c #5A8278",
+", c #588076",
+"< c #628E83",
+"1 c #52756C",
+"2 c #50736A",
+"3 c #4F7169",
+"4 c #4E7168",
+"5 c #5C8379",
+"6 c #4D6F67",
+"7 c #5B8378",
+"8 c #5A8177",
+"9 c #587F75",
+"0 c #577D74",
+"q c #567D73",
+"w c #557B72",
+"e c #628D82",
+"r c #618B81",
+"t c #608B80",
+"y c #5F897F",
+"u c #5E897E",
+"i c #4E7067",
+"p c #587E74",
+"a c #577C73",
+"s c #567C72",
+"d c #557A71",
+"f c #547A70",
+"g c #53786F",
+"h c #608A7F",
+"j c #51766D",
+"k c #5F887E",
+"l c #5E887D",
+"z c #5D867C",
+"x c #5B847A",
+"c c #54796F",
+"v c #53776E",
+"b c #52776D",
+"n c #51756C",
+"m c #5E877C",
+"M c #4F736A",
+"N c #5D857B",
+"B c #5C857A",
+"V c #5B8379",
+"C c #5A8378",
+"Z c #598177",
+"A c #638F84",
+"S c #53766D",
+"D c #52766C",
+"F c #51746B",
+"G c #4F7269",
+"H c #4E7068",
+"J c #5C8479",
+"K c #5B8278",
+"L c #598076",
+"P c #587E75",
+"I c #577E74",
+"U c #567C73",
+"Y c #557C72",
+"T c #638E83",
+"R c #547A71",
+"E c #618C81",
+"W c #608A80",
+"Q c #5F8A7F",
+"! c #5E887E",
+"~ c #4F7168",
+"^ c #577D73",
+"/ c #567B72",
+"( c #557B71",
+") c #547970",
+"_ c #53796F",
+/* pixels */
+"^8;okzLfn1(>mk+Lf1F.^+yQB0&~63j#",
+"L8Vxx>Uv2ndZB;L(12G&^;ll>d2H~Dw9",
+"V>88Z9d&21d9>L/v2G=$^VzzZ)22v^>x",
+"zVLLLId&F&(9LI(g&&v(I>B;L(v)p;!*",
+"oVLLLI(g.)U9L9I^ssU098VV8IU9;hEt",
+"N>999IU((q9>V;;xV>88L88>8L9KmtEy",
+"Z0//U0III9>+lQQQ!oB;>8888LL8;oOx",
+"(g.v)sI998:oteEtyo+;>8LLL9I9LL9a",
+"1F2FvwI9L8;lttho;>LL88LL99IU/d$v",
+"F2=&)q9LL8;oWhO>0d)sPLL999IUdgbn",
+"$g$fs98VVV-XWl>/nMFc0L9IIIIIUsd)",
+"99II9>;zzOXttmp&4HFdLK8I009LLLLL",
+"N:8LLVoWhhtEX>$GiMcLNmV9(wI8;-OO",
+"kBL9L;yEtWyl7(2HGg,O t+PfdIKOtEt",
+"z8as9+QEhoV9)2HGvI;he ;U%g^VXeEQ",
+">q_)I;Qro@svGHGSsZ-htu8d&vsVQeWO",
+"YvF.U:XyB0&3HGvs98;zz5IgF1/Vly-L",
+"&F2&s7ol>(242gIZ>>>K>L(&21/>N+L(",
+"F22vs8NNZdnn),;-;>LLLI)&2&/LKL/v",
+"11&)q8;;8q)(LOhhzVLL90#&n%sLL0fv",
+"((wUIL>V89IL+tetz>L99Iwcg(099I^/",
+">8ZLLL888LL>zWt!;LI0II^UUIL>7VV7",
+"lzBV>8LLL99LK;:8Iw)#(0I998xzkXXX",
+"Wlz;>8LL99IIIIUdg&&&cs9LVzXEeeEt",
+"+V8888LL99IUd)v&=22Fgs9VOt<A<Eyo",
+"9s(s9LL999I0(f%&111%dI>ztAAeQoB>",
+"v=F$q99III99IIUs(((s0L;QTAEXB>PR",
+"3H2)9>8I009L>7VV>ZL9LKoEAelxL^)n",
+"63vp;zV9wsI>+lXXo;89L;Q<eQ;L^)FH",
+"~&0+ht-9ddI7lEErl:9IL+t< zZ^)n46",
+"&sVyeENI$gU7XEEQJ9(dP+tEkxI)FH6G",
+"d9+hEyC/&b/>XrXN9#b$I+htzL)n46GS"
+};
diff --git a/pics/inline/binary.png b/pics/inline/binary.png
new file mode 100644
index 0000000..dec5e7a
--- a/dev/null
+++ b/pics/inline/binary.png
Binary files differ
diff --git a/pics/inline/bold.png b/pics/inline/bold.png
new file mode 100755
index 0000000..a4ab541
--- a/dev/null
+++ b/pics/inline/bold.png
Binary files differ
diff --git a/pics/inline/c_src.xpm b/pics/inline/c_src.xpm
new file mode 100644
index 0000000..ced5c33
--- a/dev/null
+++ b/pics/inline/c_src.xpm
@@ -0,0 +1,60 @@
+/* XPM */
+static char * mini_source_xpm[] = {
+"16 16 41 1",
+" c None",
+". c #000000",
+"+ c #C3C3C3",
+"@ c #303030",
+"# c #C0C0FF",
+"$ c #FF0000",
+"% c #008080",
+"& c #800000",
+"* c #C0C000",
+"= c #0000C0",
+"- c #808080",
+"; c #C0FFC0",
+"> c #00FFFF",
+", c #FFFFFF",
+"' c #A0A0A0",
+") c #00FF00",
+"! c #FFFF00",
+"~ c #FFC0FF",
+"{ c #404000",
+"] c #00C000",
+"^ c #000080",
+"/ c #FFFFC0",
+"( c #400000",
+"_ c #C05800",
+": c #800080",
+"< c #008000",
+"[ c #00C0C0",
+"} c #DCDCDC",
+"| c #FF8000",
+"1 c #FFC0C0",
+"2 c #585858",
+"3 c #C00000",
+"4 c #FFDCA8",
+"5 c #808000",
+"6 c #FFA858",
+"7 c #004000",
+"8 c #C000C0",
+"9 c #0000FF",
+"0 c #FF00FF",
+"a c #C0FFFF",
+"b c #004040",
+" .. ",
+" ./... ",
+" ./,/,/... ",
+" .,*,,,/,/..",
+" ./,,***,/,/.",
+" ./,,,/,**//.",
+" ./,*,/,/,///.",
+" .,/,***,/,/*.",
+" .,/,/,/,**//. ",
+" .//*///,/////. ",
+".////***/,/,//. ",
+".*//////***//*. ",
+" ..*/////////. ",
+" ...*/////*. ",
+" ...*/*. ",
+" ... "};
diff --git a/pics/inline/calculator.png b/pics/inline/calculator.png
new file mode 100644
index 0000000..b7077f1
--- a/dev/null
+++ b/pics/inline/calculator.png
Binary files differ
diff --git a/pics/inline/center.png b/pics/inline/center.png
new file mode 100755
index 0000000..a10a57f
--- a/dev/null
+++ b/pics/inline/center.png
Binary files differ
diff --git a/pics/inline/citytime_icon.xpm b/pics/inline/citytime_icon.xpm
new file mode 100644
index 0000000..23abbc1
--- a/dev/null
+++ b/pics/inline/citytime_icon.xpm
@@ -0,0 +1,33 @@
+/* XPM */
+static char*mini[]={
+"16 16 14 1",
+"c c #ffa858",
+"i c #000080",
+"b c #c0c000",
+"d c #808000",
+"k c #c05800",
+"l c #c0c0ff",
+"# c #000000",
+"h c #ff8000",
+"g c #0000c0",
+"f c #800000",
+"j c #ffdca8",
+"e c #0000ff",
+". c None",
+"a c #ffffff",
+".....######.....",
+"...##ababaa##...",
+"..#bcbcdcdcba#..",
+".#ecfgfccgdcdc#.",
+".#egggggcbcbcd#.",
+"#egdbdghdcbibcd#",
+"#ehjcjcbhgcgibe#",
+"#ebcjcjcckgigie#",
+"#egbdbhbchiglge#",
+"#egigdbhbigigle#",
+"#eggidcbdgigige#",
+".#eigijcgicige#.",
+".#eggghbigigee#.",
+"..#llggiggiel#..",
+"...##lgllgl##...",
+".....######....."};
diff --git a/pics/inline/close.png b/pics/inline/close.png
new file mode 100644
index 0000000..2967268
--- a/dev/null
+++ b/pics/inline/close.png
Binary files differ
diff --git a/pics/inline/copy.png b/pics/inline/copy.png
new file mode 100644
index 0000000..fcd520b
--- a/dev/null
+++ b/pics/inline/copy.png
Binary files differ
diff --git a/pics/inline/copy_inactive.png b/pics/inline/copy_inactive.png
new file mode 100644
index 0000000..0af9cda
--- a/dev/null
+++ b/pics/inline/copy_inactive.png
Binary files differ
diff --git a/pics/inline/cut.png b/pics/inline/cut.png
new file mode 100644
index 0000000..2f9abf5
--- a/dev/null
+++ b/pics/inline/cut.png
Binary files differ
diff --git a/pics/inline/cut_inactive.png b/pics/inline/cut_inactive.png
new file mode 100644
index 0000000..d5f85c4
--- a/dev/null
+++ b/pics/inline/cut_inactive.png
Binary files differ
diff --git a/pics/inline/datebook_icon.png b/pics/inline/datebook_icon.png
new file mode 100644
index 0000000..1e727bb
--- a/dev/null
+++ b/pics/inline/datebook_icon.png
Binary files differ
diff --git a/pics/inline/day.png b/pics/inline/day.png
new file mode 100644
index 0000000..b668499
--- a/dev/null
+++ b/pics/inline/day.png
Binary files differ
diff --git a/pics/inline/done.png b/pics/inline/done.png
new file mode 100644
index 0000000..1471e6e
--- a/dev/null
+++ b/pics/inline/done.png
Binary files differ
diff --git a/pics/inline/edit.png b/pics/inline/edit.png
new file mode 100644
index 0000000..2621245
--- a/dev/null
+++ b/pics/inline/edit.png
Binary files differ
diff --git a/pics/inline/editdelete.png b/pics/inline/editdelete.png
new file mode 100644
index 0000000..3467324
--- a/dev/null
+++ b/pics/inline/editdelete.png
Binary files differ
diff --git a/pics/inline/enter.png b/pics/inline/enter.png
new file mode 100644
index 0000000..1471e6e
--- a/dev/null
+++ b/pics/inline/enter.png
Binary files differ
diff --git a/pics/inline/exec.xpm b/pics/inline/exec.xpm
new file mode 100644
index 0000000..cff04d5
--- a/dev/null
+++ b/pics/inline/exec.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char * exec_xpm[] = {
+"16 16 11 1",
+" c None",
+". c #000000",
+"+ c #DCDCDC",
+"@ c #A0A0A0",
+"# c #C3C3C3",
+"$ c #808080",
+"% c #FFA858",
+"& c #FFDCA8",
+"* c #FFFFC0",
+"= c #FFFFFF",
+"- c #585858",
+" .. ",
+" .. .++. .. ",
+" .+@.@##@.@+. ",
+" .@+$@%%@$+@. ",
+" .$%%&%&%$. ",
+" ..+@%&$$%&@+.. ",
+".+#@%&%@@&*%@#+.",
+".$@+$&*&&=*$+@$.",
+" .--+$&*=&$+--. ",
+" .$#++$$++#$. ",
+" .@=$-$++$-$=@. ",
+" .+@-..@@..-@+. ",
+" ... .+=. ... ",
+" .-$. ",
+" .. ",
+" "};
diff --git a/pics/inline/faded_bg.xpm b/pics/inline/faded_bg.xpm
new file mode 100644
index 0000000..4fd0832
--- a/dev/null
+++ b/pics/inline/faded_bg.xpm
@@ -0,0 +1,75 @@
+/* XPM */
+static char * faded_bg_xpm[] = {
+"32 32 40 1",
+" c None",
+". c #B5C5C1",
+"+ c #B6C7C3",
+"@ c #B7C9C4",
+"# c #B8CAC5",
+"$ c #B8CAC6",
+"% c #B7C9C5",
+"& c #B6C7C2",
+"* c #B3C4C0",
+"= c #B2C2BE",
+"- c #B3C2BE",
+"; c #B6C8C3",
+"> c #B2C1BE",
+", c #B3C3BE",
+"' c #B8CBC7",
+") c #B1C0BC",
+"! c #B1BFBC",
+"~ c #B6C8C4",
+"{ c #B6C9C4",
+"] c #B4C5C1",
+"^ c #B1C1BD",
+"/ c #B1C1BC",
+"( c #B3C4C1",
+"_ c #B5C7C2",
+": c #B4C4C1",
+"< c #B1C1BE",
+"[ c #B3C3BF",
+"} c #B5C6C1",
+"| c #B9CBC7",
+"1 c #B9CCC7",
+"2 c #B7CAC5",
+"3 c #B9CCC8",
+"4 c #B5C6C2",
+"5 c #B8CBC6",
+"6 c #B3C4BF",
+"7 c #B3C5C1",
+"8 c #B7C8C4",
+"9 c #B9CDC8",
+"0 c #BACDC9",
+"a c #BACDC8",
+".+@#$%&*=-*;#$@&*->,.@''@.-)!)=*",
+"&+~{{;],^=*+@@&*-^/-.@##;*^))-(_",
+"~;+++_*-^-*_;&:,^/<[.~%%+*^^,.;{",
+"%~&&&}*->-*_&}*[--,*};@@&*,*}@$#",
+"#~&&&}*[,*]_&_}.]]]._+~~+}]_@|11",
+"@;___}]**]_;~@@{~;++&++;+&_;#11'",
+"+.::].}}}_;@#'''$#@@;++++&&+@#2{",
+"*[,,*]}__+{#1311'#@@;+&&&_}_&&_.",
+"->^>,(}_&+@#11|#@;&&++&&__}]:*[,",
+">^<-*]_&&+@#||2;.**]4&&___}]*[,=",
+"[[[*]_+~~~@5|#;:=^>6.&_}}}}}]]**",
+"__}}_;@%%2511#}-))>*&;+}.._&&&&&",
+"@{+&&~#|||115;[/)^6&@#~_*(}+@@22",
+"$@&_&@'11|'#;*^)/[_211@4**};2111",
+"%+.]_@'1|#~_*^)/,}@|31@],[.~531'",
+";]6*}@'1#~],/)/-]+@|15+*-,]~'3|2",
+"7,>,]{5'@.-))/,]_+@%%8}[>-:~#'@&",
+"->^-];##;*^)^[}+;;;;;&*-^-:;@@&*",
+">^^,]+@@+*==*_@@@;&&&}*-^-:&;&:,",
+"---*]+@@+]**&2||%~&&_.*-=,]&&.*,",
+"**(]}&;~+_}&@131%;&__}(6[*.__}.:",
+";++&&&+++&&;%|1$@&}.}}.]]}&;;~~;",
+"#%@~;+&&&__&;@{+}(***.}__+{%$555",
+"|#%@;+&&__}}}}]*[---6]_&~%513311",
+"@~++++&&__}]**,-<^^>[]_~219091'#",
+"_]*]_&&___}.**,----,*};%1003'#@;",
+",<>[]__}}}__}}]]***].&@'a015@;4*",
+"))^*_;+}.._&;;~~;+&_&;#103#{&.*=",
+"!),}@%~_(]};@#55#@+_&@'93'@&.*>)",
+")-.@|1@_**};#111#{_}&@191%+.*=)!",
+"-]~'31@}[[];511'@_**4@11${}*>)!/",
+"*_@|1';:-,:;515@_*,[}@|1%&*=)!/-"};
diff --git a/pics/inline/fastback.png b/pics/inline/fastback.png
new file mode 100644
index 0000000..348e913
--- a/dev/null
+++ b/pics/inline/fastback.png
Binary files differ
diff --git a/pics/inline/fastforward.png b/pics/inline/fastforward.png
new file mode 100644
index 0000000..084822c
--- a/dev/null
+++ b/pics/inline/fastforward.png
Binary files differ
diff --git a/pics/inline/fileopen.png b/pics/inline/fileopen.png
new file mode 100644
index 0000000..e35b378
--- a/dev/null
+++ b/pics/inline/fileopen.png
Binary files differ
diff --git a/pics/inline/find.png b/pics/inline/find.png
new file mode 100644
index 0000000..473738f
--- a/dev/null
+++ b/pics/inline/find.png
Binary files differ
diff --git a/pics/inline/finish.png b/pics/inline/finish.png
new file mode 100644
index 0000000..084822c
--- a/dev/null
+++ b/pics/inline/finish.png
Binary files differ
diff --git a/pics/inline/folder.png b/pics/inline/folder.png
new file mode 100644
index 0000000..043ba1e
--- a/dev/null
+++ b/pics/inline/folder.png
Binary files differ
diff --git a/pics/inline/folder_open.xpm b/pics/inline/folder_open.xpm
new file mode 100644
index 0000000..681cdba
--- a/dev/null
+++ b/pics/inline/folder_open.xpm
@@ -0,0 +1,33 @@
+/* XPM */
+/* Drawn by Mark Donohoe for the K Desktop Environment */
+/* See http://www.kde.org */
+static char*folder_open_xpm[]={
+"16 16 11 1",
+"# c #000000",
+"g c #c0c0c0",
+"e c #303030",
+"a c #ffa858",
+"b c #808080",
+"d c #a0a0a4",
+"f c #585858",
+"c c #ffdca8",
+"h c #dcdcdc",
+"i c #ffffff",
+". c None",
+"....###.........",
+"....#ab##.......",
+"....#acab####...",
+"###.#acccccca#..",
+"#ddefaaaccccca#.",
+"#bdddbaaaacccab#",
+".eddddbbaaaacab#",
+".#bddggdbbaaaab#",
+"..edgdggggbbaab#",
+"..#bgggghghdaab#",
+"...ebhggghicfab#",
+"....#edhhiiidab#",
+"......#egiiicfb#",
+"........#egiibb#",
+"..........#egib#",
+"............#ee#"};
+
diff --git a/pics/inline/forward.png b/pics/inline/forward.png
new file mode 100644
index 0000000..d153634
--- a/dev/null
+++ b/pics/inline/forward.png
Binary files differ
diff --git a/pics/inline/forward_inactive.png b/pics/inline/forward_inactive.png
new file mode 100644
index 0000000..5c0e380
--- a/dev/null
+++ b/pics/inline/forward_inactive.png
Binary files differ
diff --git a/pics/inline/fullscreen.png b/pics/inline/fullscreen.png
new file mode 100644
index 0000000..18662bb
--- a/dev/null
+++ b/pics/inline/fullscreen.png
Binary files differ
diff --git a/pics/inline/go.png b/pics/inline/go.png
new file mode 100644
index 0000000..c2c75e3
--- a/dev/null
+++ b/pics/inline/go.png
Binary files differ
diff --git a/pics/inline/h_src.xpm b/pics/inline/h_src.xpm
new file mode 100644
index 0000000..ced5c33
--- a/dev/null
+++ b/pics/inline/h_src.xpm
@@ -0,0 +1,60 @@
+/* XPM */
+static char * mini_source_xpm[] = {
+"16 16 41 1",
+" c None",
+". c #000000",
+"+ c #C3C3C3",
+"@ c #303030",
+"# c #C0C0FF",
+"$ c #FF0000",
+"% c #008080",
+"& c #800000",
+"* c #C0C000",
+"= c #0000C0",
+"- c #808080",
+"; c #C0FFC0",
+"> c #00FFFF",
+", c #FFFFFF",
+"' c #A0A0A0",
+") c #00FF00",
+"! c #FFFF00",
+"~ c #FFC0FF",
+"{ c #404000",
+"] c #00C000",
+"^ c #000080",
+"/ c #FFFFC0",
+"( c #400000",
+"_ c #C05800",
+": c #800080",
+"< c #008000",
+"[ c #00C0C0",
+"} c #DCDCDC",
+"| c #FF8000",
+"1 c #FFC0C0",
+"2 c #585858",
+"3 c #C00000",
+"4 c #FFDCA8",
+"5 c #808000",
+"6 c #FFA858",
+"7 c #004000",
+"8 c #C000C0",
+"9 c #0000FF",
+"0 c #FF00FF",
+"a c #C0FFFF",
+"b c #004040",
+" .. ",
+" ./... ",
+" ./,/,/... ",
+" .,*,,,/,/..",
+" ./,,***,/,/.",
+" ./,,,/,**//.",
+" ./,*,/,/,///.",
+" .,/,***,/,/*.",
+" .,/,/,/,**//. ",
+" .//*///,/////. ",
+".////***/,/,//. ",
+".*//////***//*. ",
+" ..*/////////. ",
+" ...*/////*. ",
+" ...*/*. ",
+" ... "};
diff --git a/pics/inline/help_icon.png b/pics/inline/help_icon.png
new file mode 100644
index 0000000..4397aee
--- a/dev/null
+++ b/pics/inline/help_icon.png
Binary files differ
diff --git a/pics/inline/home.png b/pics/inline/home.png
new file mode 100644
index 0000000..e9ba024
--- a/dev/null
+++ b/pics/inline/home.png
Binary files differ
diff --git a/pics/inline/install.png b/pics/inline/install.png
new file mode 100644
index 0000000..564a4db
--- a/dev/null
+++ b/pics/inline/install.png
Binary files differ
diff --git a/pics/inline/installed.png b/pics/inline/installed.png
new file mode 100644
index 0000000..354bb13
--- a/dev/null
+++ b/pics/inline/installed.png
Binary files differ
diff --git a/pics/inline/italic.png b/pics/inline/italic.png
new file mode 100755
index 0000000..2813724
--- a/dev/null
+++ b/pics/inline/italic.png
Binary files differ
diff --git a/pics/inline/konsole.xpm b/pics/inline/konsole.xpm
new file mode 100644
index 0000000..f1f69af
--- a/dev/null
+++ b/pics/inline/konsole.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+/* Drawn for the K Desktop Environment */
+/* See http://www.kde.org */
+static char*kconsole[]={
+"16 16 5 1",
+"b c #808080",
+". c None",
+"c c #c0ffff",
+"# c #000000",
+"a c #ffffff",
+"................",
+".##############.",
+"#aaaaaaaaaaaaaa#",
+"#abbbbbbbbbbbbb#",
+"#ab##########ab#",
+"#ab#c########ab#",
+"#ab#c#c######ab#",
+"#ab##########ab#",
+"#ab##########ab#",
+"#ab##########ab#",
+"#ab##########ab#",
+"#ab##########ab#",
+"#aaaaaaaaaaaaab#",
+"#bbbbbbbbbbbbbb#",
+".##############.",
+"................"};
diff --git a/pics/inline/language.png b/pics/inline/language.png
new file mode 100644
index 0000000..8a9c959
--- a/dev/null
+++ b/pics/inline/language.png
Binary files differ
diff --git a/pics/inline/launching.png b/pics/inline/launching.png
new file mode 100644
index 0000000..9586008
--- a/dev/null
+++ b/pics/inline/launching.png
Binary files differ
diff --git a/pics/inline/left.png b/pics/inline/left.png
new file mode 100755
index 0000000..3363ad9
--- a/dev/null
+++ b/pics/inline/left.png
Binary files differ
diff --git a/pics/inline/library.png b/pics/inline/library.png
new file mode 100644
index 0000000..32c3b3e
--- a/dev/null
+++ b/pics/inline/library.png
Binary files differ
diff --git a/pics/inline/locked.xpm b/pics/inline/locked.xpm
new file mode 100644
index 0000000..bacf975
--- a/dev/null
+++ b/pics/inline/locked.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char*locked[]={
+"16 16 8 1",
+"d c #ffa858",
+"e c #a0a0a0",
+"f c #c0c000",
+"# c #000000",
+". c None",
+"c c #800000",
+"a c #ffffc0",
+"b c #ffffff",
+"......##........",
+"......#a###.....",
+".....#ababa###..",
+".....#bbbbbaba##",
+"....#abbbbababa#",
+"....#cbbdabaaaa#",
+"...#cccddddbaaa#",
+"...#ecddcccdbaf#",
+"..#baddcccddca#.",
+".#aabedddddccc#.",
+"#aaaabaeddeccc#.",
+"#faaaaaabaaaef#.",
+".##faaaaaaaaa#..",
+"...###faaaaaf#..",
+"......###faf#...",
+".........###...."};
diff --git a/pics/inline/lockedfolder.xpm b/pics/inline/lockedfolder.xpm
new file mode 100644
index 0000000..992c956
--- a/dev/null
+++ b/pics/inline/lockedfolder.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char*folder_locked[]={
+"16 16 10 1",
+"h c #808080",
+"b c #ffa858",
+"f c #c0c0c0",
+"e c #c05800",
+"# c #000000",
+"c c #ffdca8",
+". c None",
+"a c #585858",
+"g c #a0a0a4",
+"d c #ffffff",
+"..#a#...........",
+".#abc####.......",
+".#daa#eee#......",
+".#ddf#e##b#.....",
+".#dfd#e#bcb##...",
+".#fdccc#daaab#..",
+".#dfbbbccgfg#ba.",
+".#ffb#ebbfgg#ba.",
+".#ffbbe#bggg#ba.",
+".#fffbbebggg#ba.",
+".##hf#ebbggg#ba.",
+"...###e#gggg#ba.",
+".....#e#gggg#ba.",
+"......###ggg#b##",
+".........##g#b##",
+"...........####."};
diff --git a/pics/inline/mag.png b/pics/inline/mag.png
new file mode 100644
index 0000000..21beef7
--- a/dev/null
+++ b/pics/inline/mag.png
Binary files differ
diff --git a/pics/inline/month.png b/pics/inline/month.png
new file mode 100644
index 0000000..0a6a949
--- a/dev/null
+++ b/pics/inline/month.png
Binary files differ
diff --git a/pics/inline/mute.png b/pics/inline/mute.png
new file mode 100644
index 0000000..9fe1ea6
--- a/dev/null
+++ b/pics/inline/mute.png
Binary files differ
diff --git a/pics/inline/new.png b/pics/inline/new.png
new file mode 100644
index 0000000..2e512d2
--- a/dev/null
+++ b/pics/inline/new.png
Binary files differ
diff --git a/pics/inline/newfolder.png b/pics/inline/newfolder.png
new file mode 100644
index 0000000..80c0012
--- a/dev/null
+++ b/pics/inline/newfolder.png
Binary files differ
diff --git a/pics/inline/next.png b/pics/inline/next.png
new file mode 100644
index 0000000..da9758e
--- a/dev/null
+++ b/pics/inline/next.png
Binary files differ
diff --git a/pics/inline/oneoverx.xpm b/pics/inline/oneoverx.xpm
new file mode 100644
index 0000000..add27fb
--- a/dev/null
+++ b/pics/inline/oneoverx.xpm
@@ -0,0 +1,20 @@
+/* XPM */
+static char *ythrootofx[] = {
+/* width height num_colors chars_per_pixel */
+" 13 11 2 1",
+/* colors */
+". c None",
+"# c #000000",
+/* pixels */
+"......#......",
+".....##......",
+"......#......"
+".....###.....",
+".............",
+"..#########..",
+".............",
+"....##.##....",
+"......#......",
+"......#......",
+"....##.##....",
+};
diff --git a/pics/inline/pass.xpm b/pics/inline/pass.xpm
new file mode 100644
index 0000000..512c262
--- a/dev/null
+++ b/pics/inline/pass.xpm
@@ -0,0 +1,20 @@
+/* XPM */
+static char * pass_xpm[] = {
+"16 14 3 1",
+" c None",
+". c #000000",
+"+ c #FFFF00",
+" ",
+" ",
+" ..... . ",
+" .+++. .+. ",
+" .+++. .+++. ",
+" .+++. .+++++. ",
+" .+++..+++++++.",
+"...+++....+++...",
+".+++++++..+++. ",
+" .+++++. .+++. ",
+" .+++. .+++. ",
+" .+. .+++. ",
+" . .+++. ",
+" ..... "};
diff --git a/pics/inline/paste.png b/pics/inline/paste.png
new file mode 100644
index 0000000..ab558d1
--- a/dev/null
+++ b/pics/inline/paste.png
Binary files differ
diff --git a/pics/inline/paste_inactive.png b/pics/inline/paste_inactive.png
new file mode 100644
index 0000000..466d3df
--- a/dev/null
+++ b/pics/inline/paste_inactive.png
Binary files differ
diff --git a/pics/inline/pixmap.xpm b/pics/inline/pixmap.xpm
new file mode 100644
index 0000000..6a9e361
--- a/dev/null
+++ b/pics/inline/pixmap.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+/* Drawn for the K Desktop Environment */
+/* See http://www.kde.org */
+static char*kiconedit[]={
+"16 16 20 1",
+"d c #ff8000",
+"n c #008000",
+"p c #0000c0",
+". c None",
+"k c #c0ffc0",
+"r c #000080",
+"m c #00ff00",
+"c c #ffdca8",
+"g c #ffffc0",
+"j c #808000",
+"l c #00c000",
+"# c #000000",
+"b c #ffa858",
+"i c #ffff00",
+"h c #c0c000",
+"q c #0000ff",
+"e c #ffc0c0",
+"a c #c05800",
+"f c #ff0000",
+"o c #c0c0ff",
+"............###.",
+"...........#abb#",
+"..........#cbab#",
+".........#cbdd#.",
+"######..#cbdd#..",
+"#eeff#..#add#...",
+"#eeff#######....",
+"#ccdbdd#........",
+"#dddbdd###......",
+"#gghihhjj#......",
+"#hhhihhjj###....",
+"#kklmllnnnn#....",
+"#lllmllnnnn#....",
+"#oopqpprprr#....",
+"#oopqpprprr#....",
+"############...."};
diff --git a/pics/inline/play.png b/pics/inline/play.png
new file mode 100644
index 0000000..801996e
--- a/dev/null
+++ b/pics/inline/play.png
Binary files differ
diff --git a/pics/inline/play2.png b/pics/inline/play2.png
new file mode 100644
index 0000000..67e0149
--- a/dev/null
+++ b/pics/inline/play2.png
Binary files differ
diff --git a/pics/inline/programs.png b/pics/inline/programs.png
new file mode 100644
index 0000000..6492aa9
--- a/dev/null
+++ b/pics/inline/programs.png
Binary files differ
diff --git a/pics/inline/quit_icon.png b/pics/inline/quit_icon.png
new file mode 100644
index 0000000..7dab95c
--- a/dev/null
+++ b/pics/inline/quit_icon.png
Binary files differ
diff --git a/pics/inline/repeat.png b/pics/inline/repeat.png
new file mode 100644
index 0000000..07c8a8e
--- a/dev/null
+++ b/pics/inline/repeat.png
Binary files differ
diff --git a/pics/inline/reset.xpm b/pics/inline/reset.xpm
new file mode 100644
index 0000000..3835d7d
--- a/dev/null
+++ b/pics/inline/reset.xpm
@@ -0,0 +1,20 @@
+/* XPM */
+static char * reset_xpm[] = {
+"14 14 3 1",
+" c None",
+". c #000000",
+"+ c #FF0000",
+" ",
+" .. ...",
+" .++. ..++.",
+".++++. ..++++.",
+" ..+++.+++++..",
+" .+++++++. ",
+" .+++++. ",
+" .+++++. ",
+" .+++++++. ",
+" .+++++++++. ",
+".++++...++++. ",
+".+++. ..+++. ",
+".+++. .++. ",
+" ... .. "};
diff --git a/pics/inline/right.png b/pics/inline/right.png
new file mode 100755
index 0000000..db6788e
--- a/dev/null
+++ b/pics/inline/right.png
Binary files differ
diff --git a/pics/inline/rotate.png b/pics/inline/rotate.png
new file mode 100644
index 0000000..7714707
--- a/dev/null
+++ b/pics/inline/rotate.png
Binary files differ
diff --git a/pics/inline/start.png b/pics/inline/start.png
new file mode 100644
index 0000000..348e913
--- a/dev/null
+++ b/pics/inline/start.png
Binary files differ
diff --git a/pics/inline/stop.png b/pics/inline/stop.png
new file mode 100644
index 0000000..1d6aff0
--- a/dev/null
+++ b/pics/inline/stop.png
Binary files differ
diff --git a/pics/inline/style.png b/pics/inline/style.png
new file mode 100644
index 0000000..0819b39
--- a/dev/null
+++ b/pics/inline/style.png
Binary files differ
diff --git a/pics/inline/table_pattern.png b/pics/inline/table_pattern.png
new file mode 100644
index 0000000..db57313
--- a/dev/null
+++ b/pics/inline/table_pattern.png
Binary files differ
diff --git a/pics/inline/tgz.xpm b/pics/inline/tgz.xpm
new file mode 100644
index 0000000..889038b
--- a/dev/null
+++ b/pics/inline/tgz.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char*tgz[]={
+"16 16 7 1",
+"e c #c0c000",
+"# c #000000",
+". c None",
+"d c #800000",
+"a c #ffffc0",
+"c c #ffffff",
+"b c #ff0000",
+"......##........",
+"......#a###.....",
+"...b.#acaca###..",
+"..bb.#cccccaca##",
+".bbb#accccacaca#",
+"dddd#acccacaaaa#",
+"...#acacacacaaa#",
+"...#cacacacacae#",
+"..#cacacacacaa#.",
+".#aacaaacaaaaa#.",
+"#aaaacacacacaa#.",
+"#eaaaaaacaaaae#.",
+".##eaaaaaaaadddd",
+"...###eaaaaabbb.",
+"......###eaebb..",
+".........###b..."};
diff --git a/pics/inline/toys.png b/pics/inline/toys.png
new file mode 100644
index 0000000..f893fa3
--- a/dev/null
+++ b/pics/inline/toys.png
Binary files differ
diff --git a/pics/inline/trash.xpm b/pics/inline/trash.xpm
new file mode 100644
index 0000000..5874e1a
--- a/dev/null
+++ b/pics/inline/trash.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static const char * trash_xpm[] = {
+"16 16 10 1",
+" c None",
+". c #000000",
+"+ c #DCDCDC",
+"@ c #A0A0A4",
+"# c #585858",
+"$ c #FFFFFF",
+"% c #C0C0C0",
+"& c #808080",
+"* c #303030",
+"= c #A0A0A0",
+" ..+. ",
+" ...+@.#.... ",
+" .$$$%%%&.%%@. ",
+" .+@%$$$%%###. ",
+" .&++@@@@&&. ",
+" .@@@&&##&*. ",
+" .@$@+=&&#*. ",
+" .@$@+=&&#*. ",
+" .@$@+=&&#*. ",
+" .@$@+=&&#*. ",
+" .@$@+=&&#*. ",
+" .@$@+=&&#*. ",
+" .@$@+=&&#*. ",
+" .+$@+=&&#*. ",
+" ..++@@&.. ",
+" ..... "};
diff --git a/pics/inline/txt.xpm b/pics/inline/txt.xpm
new file mode 100644
index 0000000..44d3b46
--- a/dev/null
+++ b/pics/inline/txt.xpm
@@ -0,0 +1,60 @@
+/* XPM */
+static char * txt_xpm[] = {
+"16 16 41 1",
+" c None",
+". c #000000",
+"+ c #C3C3C3",
+"@ c #303030",
+"# c #C0C0FF",
+"$ c #FF0000",
+"% c #008080",
+"& c #800000",
+"* c #C0C000",
+"= c #0000C0",
+"- c #808080",
+"; c #C0FFC0",
+"> c #00FFFF",
+", c #FFFFFF",
+"' c #A0A0A0",
+") c #00FF00",
+"! c #FFFF00",
+"~ c #FFC0FF",
+"{ c #404000",
+"] c #00C000",
+"^ c #000080",
+"/ c #FFFFC0",
+"( c #400000",
+"_ c #C05800",
+": c #800080",
+"< c #008000",
+"[ c #00C0C0",
+"} c #DCDCDC",
+"| c #FF8000",
+"1 c #FFC0C0",
+"2 c #585858",
+"3 c #C00000",
+"4 c #FFDCA8",
+"5 c #808000",
+"6 c #FFA858",
+"7 c #004000",
+"8 c #C000C0",
+"9 c #0000FF",
+"0 c #FF00FF",
+"a c #C0FFFF",
+"b c #004040",
+" .. ",
+" ./... ",
+" ./,/,/... ",
+" .,,,,,/,/..",
+" ./,,,,/,/,/.",
+" ./,,,/,////.",
+" ./,/,/,/,///.",
+" .,/,/,/,/,/*.",
+" .,/,/,/,/,//. ",
+" .//,///,/////. ",
+".////,/,/,/,//. ",
+".*//////,////*. ",
+" ..*/////////. ",
+" ...*/////*. ",
+" ...*/*. ",
+" ... "};
diff --git a/pics/inline/underline.png b/pics/inline/underline.png
new file mode 100755
index 0000000..ac837aa
--- a/dev/null
+++ b/pics/inline/underline.png
Binary files differ
diff --git a/pics/inline/uninstall.png b/pics/inline/uninstall.png
new file mode 100644
index 0000000..5ad5e07
--- a/dev/null
+++ b/pics/inline/uninstall.png
Binary files differ
diff --git a/pics/inline/uninstalled.png b/pics/inline/uninstalled.png
new file mode 100644
index 0000000..70af2c9
--- a/dev/null
+++ b/pics/inline/uninstalled.png
Binary files differ
diff --git a/pics/inline/up.png b/pics/inline/up.png
new file mode 100644
index 0000000..e2ed96e
--- a/dev/null
+++ b/pics/inline/up.png
Binary files differ
diff --git a/pics/inline/volume.png b/pics/inline/volume.png
new file mode 100644
index 0000000..435a804
--- a/dev/null
+++ b/pics/inline/volume.png
Binary files differ
diff --git a/pics/inline/wait.png b/pics/inline/wait.png
new file mode 100644
index 0000000..258143b
--- a/dev/null
+++ b/pics/inline/wait.png
Binary files differ
diff --git a/pics/inline/week.png b/pics/inline/week.png
new file mode 100644
index 0000000..8c6fdc4
--- a/dev/null
+++ b/pics/inline/week.png
Binary files differ
diff --git a/pics/inline/wordgame.png b/pics/inline/wordgame.png
new file mode 100644
index 0000000..eeded56
--- a/dev/null
+++ b/pics/inline/wordgame.png
Binary files differ
diff --git a/pics/inline/wordgame_shapes.xpm b/pics/inline/wordgame_shapes.xpm
new file mode 100644
index 0000000..cbac8d2
--- a/dev/null
+++ b/pics/inline/wordgame_shapes.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * wordgame_shapes_xpm[] = {
+"96 16 9 1",
+" c None",
+". c #005E5E",
+"+ c #007F7F",
+"@ c #00FFFF",
+"# c #0000FF",
+"$ c #FFA100",
+"% c #FF0000",
+"& c #000000",
+"* c #FFFFFF",
+"................................................................................................",
+".+++++++++++++++.@@@@@@@@@@@@@@@.###############.$$$$$$$$$$$$$$$.%%%%%%%%%%%%%%%.$$$$$$$$$$$$$$$",
+".+++++++++++++++.@@&&@@@@@@@@@@@.##**###########.$$&&$$$$$$$$$$$.%%**%%%%%%%%%%%.$$$$$$$$$$$$$$$",
+".+++++++++++++++.@&@@&@@&@@@&@@@.#*##*##*###*###.$&$$&$$&$$$&$$$.%*%%*%%*%%%*%%%.$$**$$$$$$$**$$",
+".+++++++++++++++.@@@@&@@@&@&@@@@.###*####*#*####.$$$$&$$$&$&$$$$.%%%*%%%%*%*%%%%.$$***$$$$$***$$",
+".+++++++++++++++.@@@&@@@@@&@@@@@.####*####*#####.$$$&$$$$$&$$$$$.%%%%*%%%%*%%%%%.$$$***$$$***$$$",
+".+++++++++++++++.@@&@@@@@&@&@@@@.#*##*###*#*####.$$&$$$$$&$&$$$$.%*%%*%%%*%*%%%%.$$$$***$***$$$$",
+".+++++++++++++++.@&&&&@@&@@@&@@@.##**###*###*###.$&&&&$$&$$$&$$$.%%**%%%*%%%*%%%.$$$$$*****$$$$$",
+".+++++++++++++++.@@@@@@@@@@@@@@@.###############.$$$$$$$$$$$$$$$.%%%%%%%%%%%%%%%.$$$$$$***$$$$$$",
+".+++++++++++++++.@@&&@@&@@&@&&&@.##**##*##*#***#.$$$&&$$&$$$&$$$.%%%**%%*%%%*%%%.$$$$$*****$$$$$",
+".+++++++++++++++.@&@@&@&&@&@&@@@.#*##*#**#*#*###.$$&$$&$&$$$&$$$.%%*%%*%*%%%*%%%.$$$$***$***$$$$",
+".+++++++++++++++.@&@@&@&@&&@&&@@.#*##*#*#**#**##.$$&&&&$&$$$&$$$.%%****%*%%%*%%%.$$$***$$$***$$$",
+".+++++++++++++++.@&@@&@&@@&@&@@@.#*##*#*##*#*###.$$&$$&$&$$$&$$$.%%*%%*%*%%%*%%%.$$***$$$$$***$$",
+".+++++++++++++++.@&@@&@&@@&@&@@@.#*##*#*##*#*###.$$&$$&$&$$$&$$$.%%*%%*%*%%%*%%%.$$**$$$$$$$**$$",
+".+++++++++++++++.@@&&@@&@@&@&&&@.##**##*##*#***#.$$&$$&$&&&$&&&$.%%*%%*%***%***%.$$$$$$$$$$$$$$$",
+".+++++++++++++++.@@@@@@@@@@@@@@@.###############.$$$$$$$$$$$$$$$.%%%%%%%%%%%%%%%.$$$$$$$$$$$$$$$"};
diff --git a/pics/inline/xtopowerofy.xpm b/pics/inline/xtopowerofy.xpm
new file mode 100644
index 0000000..0579539
--- a/dev/null
+++ b/pics/inline/xtopowerofy.xpm
@@ -0,0 +1,17 @@
+/* XPM */
+static char *a[] = {
+/* width height num_colors chars_per_pixel */
+" 9 8 2 1",
+/* colors */
+". c None",
+"# c #000000",
+/* pixels */
+"......#.#",
+"......#.#",
+"......###",
+"#...#...#",
+".#.#..###",
+"..#......",
+".#.#.....",
+"#...#...."
+};
diff --git a/pics/inline/ythrootofx.xpm b/pics/inline/ythrootofx.xpm
new file mode 100644
index 0000000..6b3b831
--- a/dev/null
+++ b/pics/inline/ythrootofx.xpm
@@ -0,0 +1,20 @@
+/* XPM */
+static char *ythrootofx[] = {
+/* width height num_colors chars_per_pixel */
+" 13 11 2 1",
+/* colors */
+". c None",
+"# c #000000",
+/* pixels */
+"#.#..........",
+"#.#..........",
+"###...#######",
+"..#..#.......",
+"###..#.......",
+".....#.#...#.",
+".#..#...#.#..",
+"#.#.#....#...",
+"..#.#...#.#..",
+"...#...#...#.",
+"...#........."
+};
diff --git a/pics/inline/zoom.xpm b/pics/inline/zoom.xpm
new file mode 100644
index 0000000..7ffb1ef
--- a/dev/null
+++ b/pics/inline/zoom.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static const char * zoom_xpm[] = {
+"20 20 7 1",
+" c None",
+". c #FFA858",
+"+ c #C05800",
+"@ c #00FFFF",
+"# c #000000",
+"$ c #FFDCA8",
+"% c #FFFFFF",
+" ",
+" ##### ",
+" #@@@@@# ",
+" #@@ @# ",
+" #@@@@@ @# ",
+" #@@@@@@@ @# ",
+" #@@@@@@@ @# ",
+" #@@@@@@@@@# ",
+" #@@@@@@@@@# ",
+" #@@@@@@@# ",
+" #@@@@@#$## ",
+" ##### #$$# ",
+" #$.+# ",
+" #$.+# ",
+" #$.+# ",
+" #$.+# ",
+" #++# ",
+" ## ",
+" ",
+" "};
diff --git a/pics/konsole/down.png b/pics/konsole/down.png
new file mode 100644
index 0000000..f6364de
--- a/dev/null
+++ b/pics/konsole/down.png
Binary files differ
diff --git a/pics/konsole/enter.png b/pics/konsole/enter.png
new file mode 100644
index 0000000..3b72edb
--- a/dev/null
+++ b/pics/konsole/enter.png
Binary files differ
diff --git a/pics/konsole/space.png b/pics/konsole/space.png
new file mode 100644
index 0000000..1788fec
--- a/dev/null
+++ b/pics/konsole/space.png
Binary files differ
diff --git a/pics/konsole/tab.png b/pics/konsole/tab.png
new file mode 100644
index 0000000..66b2897
--- a/dev/null
+++ b/pics/konsole/tab.png
Binary files differ
diff --git a/pics/konsole/up.png b/pics/konsole/up.png
new file mode 100644
index 0000000..5500cb2
--- a/dev/null
+++ b/pics/konsole/up.png
Binary files differ
diff --git a/pics/mindbreaker/mindbreaker.png b/pics/mindbreaker/mindbreaker.png
new file mode 100644
index 0000000..0ee6c6d
--- a/dev/null
+++ b/pics/mindbreaker/mindbreaker.png
Binary files differ
diff --git a/pics/mindbreaker/pegs.png b/pics/mindbreaker/pegs.png
new file mode 100644
index 0000000..9b19121
--- a/dev/null
+++ b/pics/mindbreaker/pegs.png
Binary files differ
diff --git a/pics/mpegplayer/add.png b/pics/mpegplayer/add.png
new file mode 100644
index 0000000..76277e3
--- a/dev/null
+++ b/pics/mpegplayer/add.png
Binary files differ
diff --git a/pics/mpegplayer/add_to_playlist.png b/pics/mpegplayer/add_to_playlist.png
new file mode 100644
index 0000000..9d763be
--- a/dev/null
+++ b/pics/mpegplayer/add_to_playlist.png
Binary files differ
diff --git a/pics/mpegplayer/animatedButton.png b/pics/mpegplayer/animatedButton.png
new file mode 100644
index 0000000..0b239a3
--- a/dev/null
+++ b/pics/mpegplayer/animatedButton.png
Binary files differ
diff --git a/pics/mpegplayer/background.png b/pics/mpegplayer/background.png
new file mode 100644
index 0000000..9257b38
--- a/dev/null
+++ b/pics/mpegplayer/background.png
Binary files differ
diff --git a/pics/mpegplayer/cut.png b/pics/mpegplayer/cut.png
new file mode 100644
index 0000000..be799e4
--- a/dev/null
+++ b/pics/mpegplayer/cut.png
Binary files differ
diff --git a/pics/mpegplayer/delete.png b/pics/mpegplayer/delete.png
new file mode 100644
index 0000000..fe8974e
--- a/dev/null
+++ b/pics/mpegplayer/delete.png
Binary files differ
diff --git a/pics/mpegplayer/down.png b/pics/mpegplayer/down.png
new file mode 100644
index 0000000..9127f71
--- a/dev/null
+++ b/pics/mpegplayer/down.png
Binary files differ
diff --git a/pics/mpegplayer/loop.png b/pics/mpegplayer/loop.png
new file mode 100644
index 0000000..a948170
--- a/dev/null
+++ b/pics/mpegplayer/loop.png
Binary files differ
diff --git a/pics/mpegplayer/mediaButton0a.png b/pics/mpegplayer/mediaButton0a.png
new file mode 100644
index 0000000..a364d7c
--- a/dev/null
+++ b/pics/mpegplayer/mediaButton0a.png
Binary files differ
diff --git a/pics/mpegplayer/mediaButton0b.png b/pics/mpegplayer/mediaButton0b.png
new file mode 100644
index 0000000..66b26ab
--- a/dev/null
+++ b/pics/mpegplayer/mediaButton0b.png
Binary files differ
diff --git a/pics/mpegplayer/mediaButtonsAll.png b/pics/mpegplayer/mediaButtonsAll.png
new file mode 100644
index 0000000..c5efbe3
--- a/dev/null
+++ b/pics/mpegplayer/mediaButtonsAll.png
Binary files differ
diff --git a/pics/mpegplayer/mediaButtonsBig.png b/pics/mpegplayer/mediaButtonsBig.png
new file mode 100644
index 0000000..2c1b013
--- a/dev/null
+++ b/pics/mpegplayer/mediaButtonsBig.png
Binary files differ
diff --git a/pics/mpegplayer/mediaControls.png b/pics/mpegplayer/mediaControls.png
new file mode 100644
index 0000000..07599d2
--- a/dev/null
+++ b/pics/mpegplayer/mediaControls.png
Binary files differ
diff --git a/pics/mpegplayer/mediaControls0.png b/pics/mpegplayer/mediaControls0.png
new file mode 100644
index 0000000..60c025e
--- a/dev/null
+++ b/pics/mpegplayer/mediaControls0.png
Binary files differ
diff --git a/pics/mpegplayer/metalFinish.png b/pics/mpegplayer/metalFinish.png
new file mode 100644
index 0000000..abc8d66
--- a/dev/null
+++ b/pics/mpegplayer/metalFinish.png
Binary files differ
diff --git a/pics/mpegplayer/musicfile.png b/pics/mpegplayer/musicfile.png
new file mode 100644
index 0000000..fb64fd2
--- a/dev/null
+++ b/pics/mpegplayer/musicfile.png
Binary files differ
diff --git a/pics/mpegplayer/play.png b/pics/mpegplayer/play.png
new file mode 100644
index 0000000..d95a9f0
--- a/dev/null
+++ b/pics/mpegplayer/play.png
Binary files differ
diff --git a/pics/mpegplayer/remove_from_playlist.png b/pics/mpegplayer/remove_from_playlist.png
new file mode 100644
index 0000000..85a5645
--- a/dev/null
+++ b/pics/mpegplayer/remove_from_playlist.png
Binary files differ
diff --git a/pics/mpegplayer/scale.png b/pics/mpegplayer/scale.png
new file mode 100644
index 0000000..abd6484
--- a/dev/null
+++ b/pics/mpegplayer/scale.png
Binary files differ
diff --git a/pics/mpegplayer/shuffle.png b/pics/mpegplayer/shuffle.png
new file mode 100644
index 0000000..c4df29d
--- a/dev/null
+++ b/pics/mpegplayer/shuffle.png
Binary files differ
diff --git a/pics/mpegplayer/up.png b/pics/mpegplayer/up.png
new file mode 100644
index 0000000..86b358c
--- a/dev/null
+++ b/pics/mpegplayer/up.png
Binary files differ
diff --git a/pics/mpegplayer/videofile.png b/pics/mpegplayer/videofile.png
new file mode 100644
index 0000000..1d99347
--- a/dev/null
+++ b/pics/mpegplayer/videofile.png
Binary files differ
diff --git a/pics/netmon/down.xpm b/pics/netmon/down.xpm
new file mode 100644
index 0000000..b385c0b
--- a/dev/null
+++ b/pics/netmon/down.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * down_xpm[] = {
+"14 16 30 1",
+" c None",
+". c #000000",
+"+ c #3FEADF",
+"@ c #37DCBA",
+"# c #0F9900",
+"$ c #27C270",
+"% c #17A625",
+"& c #FFFF00",
+"* c #2AC67C",
+"= c #E6E600",
+"- c #F4F400",
+"; c #33D6A7",
+"> c #CCCC00",
+", c #DDDD00",
+"' c #1FB44A",
+") c #37DDBA",
+"! c #3AE1C6",
+"~ c #2BC882",
+"{ c #FF5A5A",
+"] c #FF0000",
+"^ c #707070",
+"/ c #FF5D5D",
+"( c #FF5151",
+"_ c #AAAAAA",
+": c #999999",
+"< c #5E5E5E",
+"[ c #7E7E7E",
+"} c #B2B2B2",
+"| c #64645E",
+"1 c #BCBCBC",
+" ",
+" .... ",
+" .++++. ",
+" .@#$+%@. ..& ",
+".+*#$+%#+.=-. ",
+".+#%;+%#+&>,&.",
+".+#'+*..+&>...",
+".+)!~.{{...{].",
+"^.++$./]].(]].",
+"_^.+$#.]](]].:",
+" :<.&&..]]].[ ",
+"}:.=>>.(]]]]. ",
+"}<.-,.(]].]]].",
+"}:|.&.]].:.]].",
+" 1:<<<..:.:..1",
+" 1111111 111 "};
diff --git a/pics/netmon/up.xpm b/pics/netmon/up.xpm
new file mode 100644
index 0000000..d9c033d
--- a/dev/null
+++ b/pics/netmon/up.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * up_xpm[] = {
+"14 16 33 1",
+" c None",
+". c #000000",
+"+ c #3FEADF",
+"@ c #37DCBA",
+"# c #0F9900",
+"$ c #27C270",
+"% c #17A625",
+"& c #FFFF00",
+"* c #2AC67C",
+"= c #E6E600",
+"- c #F4F400",
+"; c #33D6A7",
+"> c #CCCC00",
+", c #DDDD00",
+"' c #1FB44A",
+") c #2CCB88",
+"! c #2FCF95",
+"~ c #37DDBA",
+"{ c #3AE1C6",
+"] c #2BC882",
+"^ c #129D0C",
+"/ c #16A41F",
+"( c #F0F000",
+"_ c #F9F900",
+": c #5E5E5E",
+"< c #707070",
+"[ c #878700",
+"} c #999999",
+"| c #AAAAAA",
+"1 c #999900",
+"2 c #BCBCBC",
+"3 c #B2B2B2",
+"4 c #64645E",
+" ",
+" .... ",
+" .++++. ",
+" .@#$+%@. ..& ",
+".+*#$+%#+.=-. ",
+".+#%;+%#+&>,&.",
+".+#'+*)!+&>,&.",
+".+~{]^/++.(_.:",
+"<.++$##+.[&&.}",
+"|<.+$#~.1&&.:}",
+" }:.&&.[&&.:}2",
+"3}.=>>(&&.:}2 ",
+"3:.-,,_&.:}2 ",
+"3}4.&&..:}2 ",
+" 2}:..::}2 ",
+" 2222222 "};
diff --git a/pics/numlock.xpm b/pics/numlock.xpm
new file mode 100644
index 0000000..3597559
--- a/dev/null
+++ b/pics/numlock.xpm
@@ -0,0 +1,10 @@
+/* XPM */
+static char * numlock_xpm[] = {
+"4 4 3 1",
+" c None",
+". c #000000",
+"+ c #545454",
+".+ .",
+"..+.",
+".+..",
+". +."};
diff --git a/pics/parashoot/b0000.png b/pics/parashoot/b0000.png
new file mode 100644
index 0000000..44cc23b
--- a/dev/null
+++ b/pics/parashoot/b0000.png
Binary files differ
diff --git a/pics/parashoot/b0001.png b/pics/parashoot/b0001.png
new file mode 100644
index 0000000..6bb1085
--- a/dev/null
+++ b/pics/parashoot/b0001.png
Binary files differ
diff --git a/pics/parashoot/b0002.png b/pics/parashoot/b0002.png
new file mode 100644
index 0000000..55505e3
--- a/dev/null
+++ b/pics/parashoot/b0002.png
Binary files differ
diff --git a/pics/parashoot/b0003.png b/pics/parashoot/b0003.png
new file mode 100644
index 0000000..9ab21f1
--- a/dev/null
+++ b/pics/parashoot/b0003.png
Binary files differ
diff --git a/pics/parashoot/bullet.xpm b/pics/parashoot/bullet.xpm
new file mode 100644
index 0000000..a9b7d76
--- a/dev/null
+++ b/pics/parashoot/bullet.xpm
@@ -0,0 +1,11 @@
+/* XPM */
+static char * bullet_xpm[] = {
+"6 6 2 1",
+" c None",
+". c #9E799A699E79",
+" .. ",
+" .... ",
+"......",
+"......",
+" .... ",
+" .. "};
diff --git a/pics/parashoot/can0000.xpm b/pics/parashoot/can0000.xpm
new file mode 100644
index 0000000..b94a1a4
--- a/dev/null
+++ b/pics/parashoot/can0000.xpm
@@ -0,0 +1,170 @@
+/* XPM */
+static char * can0000_xpm[] = {
+"40 32 135 2",
+" c None",
+". c #7E996C",
+"+ c #516843",
+"@ c #273022",
+"# c #303C28",
+"$ c #506642",
+"% c #627B52",
+"& c #718A60",
+"* c #303D29",
+"= c #2A3425",
+"- c #576F49",
+"; c #222321",
+"> c #2C3626",
+", c #475B3A",
+"' c #4F6542",
+") c #445638",
+"! c #4D643F",
+"~ c #353833",
+"{ c #252E20",
+"] c #262F21",
+"^ c #526645",
+"/ c #697E59",
+"( c #242C1F",
+"_ c #333E2C",
+": c #3B4831",
+"< c #313A2C",
+"[ c #7A9469",
+"} c #343534",
+"| c #353535",
+"1 c #283022",
+"2 c #293223",
+"3 c #1E1E1D",
+"4 c #2C2C2C",
+"5 c #323232",
+"6 c #363735",
+"7 c #2A2E28",
+"8 c #0C0C0C",
+"9 c #1A1A1A",
+"0 c #252D1F",
+"a c #171D14",
+"b c #0C0D0A",
+"c c #292A29",
+"d c #373A36",
+"e c #40493A",
+"f c #4A5C40",
+"g c #506742",
+"h c #3D4D32",
+"i c #171B14",
+"j c #232322",
+"k c #3A3B3A",
+"l c #090A08",
+"m c #181A17",
+"n c #3C4437",
+"o c #4A5B3F",
+"p c #4D633F",
+"q c #3D4E32",
+"r c #11160E",
+"s c #191919",
+"t c #000000",
+"u c #121212",
+"v c #3E4738",
+"w c #4F6442",
+"x c #4B603E",
+"y c #4C613F",
+"z c #405235",
+"A c #060606",
+"B c #202020",
+"C c #495A40",
+"D c #3B4B30",
+"E c #182015",
+"F c #0A0C08",
+"G c #3C4D31",
+"H c #283422",
+"I c #141514",
+"J c #3F463A",
+"K c #263021",
+"L c #050803",
+"M c #090909",
+"N c #4C5F40",
+"O c #242F1E",
+"P c #020202",
+"Q c #242E1E",
+"R c #4D6340",
+"S c #435637",
+"T c #161914",
+"U c #3E4E33",
+"V c #273021",
+"W c #080808",
+"X c #384132",
+"Y c #3E5034",
+"Z c #0C0F0A",
+"` c #131910",
+" . c #3A4A30",
+".. c #455839",
+"+. c #171817",
+"@. c #2F2F2F",
+"#. c #272F23",
+"$. c #455939",
+"%. c #12200D",
+"&. c #010201",
+"*. c #1A1C19",
+"=. c #46563D",
+"-. c #4C623F",
+";. c #506743",
+">. c #3D4B34",
+",. c #262625",
+"'. c #080B06",
+"). c #040404",
+"!. c #2F352C",
+"~. c #4E6342",
+"{. c #4B5D40",
+"]. c #383A36",
+"^. c #333432",
+"/. c #2B3026",
+"(. c #1F261C",
+"_. c #050703",
+":. c #0E0F0D",
+"<. c #2D3727",
+"[. c #435537",
+"}. c #506542",
+"|. c #4C5F41",
+"1. c #434E3C",
+"2. c #393B37",
+"3. c #353635",
+"4. c #2F322D",
+"5. c #091006",
+"6. c #010100",
+"7. c #040503",
+"8. c #181B17",
+"9. c #373B35",
+"0. c #2A2A29",
+"a. c #313130",
+"b. c #323431",
+"c. c #0B0B0B",
+"d. c #060906",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" + + . . ",
+" @ + + + + . . ",
+" @ # $ + + % & ",
+" @ * = + + - . . ; ",
+" @ > @ , ' . . . ; ; ",
+" @ @ @ ) ) ! . . ~ ; ; ; ; ",
+" { { ] ) ) ^ / ~ ; ; ; ; ; ",
+" ( ( _ ) : < [ ; } | ; ; ; ; ",
+" ~ 1 2 ) 3 4 5 6 7 8 9 ; ; ; ; ",
+" ~ 0 a b c d e f g h i j k ~ ; ",
+" l m n o ' + + p q r s ~ ; ",
+" t u v w + + x y + + z A ~ ; ; ",
+" t B C + + D E F G + + H I J . . . ",
+" + K L M N + + O t P Q R + S T @ @ U . . ",
+" + @ V ; L W X ' + Y Z ` .g + ..+.@.#.@ $.. ",
+" + @ @ ; ; %.&.*.=.+ g R -.;.+ + >.,.; ; @ @ + ",
+" + @ @ @ ; '.A ).!.~.+ + + $ {.e ].^./.; ; @ @ + ",
+" + @ @ @ ; (._.:.<.[.}.|.1.2.3.} 4. @ ; @ + ",
+" + + @ @ @ ; ; ; ; 5.6.7.8.9.9.0.a.b.; ; ; ; @ + + + ",
+" @ @ @ @ ; ; ; L t t t c.d. ; ; ; @ @ @ @ ",
+" "};
diff --git a/pics/parashoot/can0001.xpm b/pics/parashoot/can0001.xpm
new file mode 100644
index 0000000..23b0b9d
--- a/dev/null
+++ b/pics/parashoot/can0001.xpm
@@ -0,0 +1,228 @@
+/* XPM */
+static char * can0001_xpm[] = {
+"40 32 193 2",
+" c None",
+". c #7E996C",
+"+ c #526944",
+"@ c #647C54",
+"# c #3A4A31",
+"$ c #516843",
+"% c #546B46",
+"& c #5C744D",
+"* c #698259",
+"= c #303B28",
+"- c #435537",
+"; c #516743",
+"> c #59714A",
+", c #688157",
+"' c #6F885E",
+") c #323F2A",
+"! c #36442E",
+"~ c #475A3B",
+"{ c #556D47",
+"] c #607951",
+"^ c #718A60",
+"/ c #293223",
+"( c #34412C",
+"_ c #3B4A32",
+": c #4A5E3D",
+"< c #637B54",
+"[ c #799468",
+"} c #283122",
+"| c #34422C",
+"1 c #657D56",
+"2 c #748E63",
+"3 c #7D986B",
+"4 c #222321",
+"5 c #262F21",
+"6 c #36442D",
+"7 c #435437",
+"8 c #4A5F3D",
+"9 c #728C61",
+"0 c #353833",
+"a c #262725",
+"b c #232C1F",
+"c c #252E20",
+"d c #3A4930",
+"e c #415236",
+"f c #4F6343",
+"g c #677C57",
+"h c #3A3F37",
+"i c #272825",
+"j c #232421",
+"k c #242C1F",
+"l c #292F25",
+"m c #313C2A",
+"n c #425336",
+"o c #3B4831",
+"p c #323A2D",
+"q c #6A805C",
+"r c #232422",
+"s c #272826",
+"t c #232522",
+"u c #343731",
+"v c #273022",
+"w c #2A3424",
+"x c #212220",
+"y c #3A3E37",
+"z c #2E2E2E",
+"A c #353634",
+"B c #2C2F2B",
+"C c #1A1A1A",
+"D c #31352E",
+"E c #20281B",
+"F c #141811",
+"G c #131411",
+"H c #2B2C2A",
+"I c #363A35",
+"J c #3E4539",
+"K c #434F3C",
+"L c #3B4933",
+"M c #21281D",
+"N c #1A1C19",
+"O c #0B0D09",
+"P c #0F110E",
+"Q c #22251F",
+"R c #3E4738",
+"S c #48583E",
+"T c #4C5F40",
+"U c #4F6542",
+"V c #4E6440",
+"W c #3D4E32",
+"X c #232A1E",
+"Y c #343533",
+"Z c #090909",
+"` c #232721",
+" . c #44513B",
+".. c #4E6341",
+"+. c #506642",
+"@. c #4D6340",
+"#. c #4F6541",
+"$. c #4C613E",
+"%. c #39492F",
+"&. c #1B2017",
+"*. c #20211F",
+"=. c #343732",
+"-. c #010201",
+";. c #0E0E0E",
+">. c #32392E",
+",. c #4C6041",
+"'. c #495E3C",
+"). c #36452C",
+"!. c #283321",
+"~. c #35442C",
+"{. c #4C623F",
+"]. c #2E3B27",
+"^. c #1A1D19",
+"/. c #2D2F2B",
+"(. c #263021",
+"_. c #080E05",
+":. c #070806",
+"<. c #2C3626",
+"[. c #4F6442",
+"}. c #3C4D31",
+"|. c #181F14",
+"1. c #070906",
+"2. c #1B2216",
+"3. c #415335",
+"4. c #506742",
+"5. c #405235",
+"6. c #272B25",
+"7. c #5F7154",
+"8. c #799368",
+"9. c #273021",
+"0. c #131711",
+"a. c #252A21",
+"b. c #47583C",
+"c. c #506743",
+"d. c #425537",
+"e. c #1A2216",
+"f. c #0A0D09",
+"g. c #212A1C",
+"h. c #415436",
+"i. c #20261C",
+"j. c #273122",
+"k. c #687F58",
+"l. c #192016",
+"m. c #050904",
+"n. c #121411",
+"o. c #3A4633",
+"p. c #3F5134",
+"q. c #35452C",
+"r. c #3F5135",
+"s. c #475B3B",
+"t. c #272E23",
+"u. c #212120",
+"v. c #242622",
+"w. c #252A22",
+"x. c #435438",
+"y. c #70895F",
+"z. c #657D55",
+"A. c #070706",
+"B. c #040504",
+"C. c #272C25",
+"D. c #495B3E",
+"E. c #4F6642",
+"F. c #404D37",
+"G. c #2C2F29",
+"H. c #2E2F2D",
+"I. c #2A2F26",
+"J. c #282D24",
+"K. c #48593D",
+"L. c #323E2C",
+"M. c #182015",
+"N. c #070A05",
+"O. c #0E0F0D",
+"P. c #2E3828",
+"Q. c #445638",
+"R. c #4E6342",
+"S. c #4A5B3F",
+"T. c #44503D",
+"U. c #3D4539",
+"V. c #383A36",
+"W. c #2F322D",
+"X. c #1C1E1A",
+"Y. c #020201",
+"Z. c #090B08",
+"`. c #21271E",
+" + c #3F493A",
+".+ c #373C33",
+"++ c #363734",
+"@+ c #323331",
+"#+ c #030401",
+"$+ c #050605",
+"%+ c #121312",
+"&+ c #282B27",
+"*+ c #1B1C1B",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" + @ . ",
+" # $ % & * ",
+" = - ; > , ' ",
+" ) ! ~ { ] ^ ",
+" / ( _ : < [ ",
+" / } | ~ 1 2 3 4 ",
+" 5 5 6 7 8 9 . 0 a 4 4 4 ",
+" b c d e f g h i j 4 ",
+" k l m n o p q r s t 4 ",
+" u v w e x y z A B C 4 4 4 4 ",
+" D E F G H I J K L M N r s 4 4 ",
+" O P Q R S T U V W X 4 Y 0 4 ",
+" Z ` ...+.U @.#.$.%.&.*.=. 4 ",
+" -.;.>.,.$ '.).!.~.$.{.].^./.4 4 ",
+" $ (._.:.<.[.$ }.|.1.2.3.4.5.M 6.7.8.. ",
+" $ v 9.0.1.a.b.c.d.e.f.g.h.4.'./ i.j._ k.. ",
+" $ v v 4 l.m.n.o...V p.q.r.{.$ s.t.u.v.w.x.y.z. ",
+" $ v v v 4 A.B.C.D.c.4.E.+.[.T F.G.H.I.4 J.K.L.$ ",
+" $ v v v 4 M.N.O.P.Q.#.R.S.T.U.V. W. v 4 v $ ",
+" $ $ v v v 4 4 4 X.Y.Z.`.R +.+++A @+r 4 4 4 v $ $ $ ",
+" v v v v 4 4 x #+$+%+&+*+v. 4 4 4 v v v v ",
+" "};
diff --git a/pics/parashoot/can0002.xpm b/pics/parashoot/can0002.xpm
new file mode 100644
index 0000000..d89b558
--- a/dev/null
+++ b/pics/parashoot/can0002.xpm
@@ -0,0 +1,239 @@
+/* XPM */
+static char * can0002_xpm[] = {
+"40 32 204 2",
+" c None",
+". c #7C976A",
+"+ c #516843",
+"@ c #58704A",
+"# c #7E996C",
+"$ c #34412C",
+"% c #4C613F",
+"& c #506742",
+"* c #546B46",
+"= c #617A52",
+"- c #2B3525",
+"; c #3C4C32",
+"> c #546C46",
+", c #627A52",
+"' c #6C865C",
+") c #2C3826",
+"! c #303D29",
+"~ c #415337",
+"{ c #546B45",
+"] c #5D754E",
+"^ c #6E875D",
+"/ c #283123",
+"( c #2F3A28",
+"_ c #36432D",
+": c #45583A",
+"< c #5E754F",
+"[ c #779166",
+"} c #273122",
+"| c #313D29",
+"1 c #455739",
+"2 c #607751",
+"3 c #728B61",
+"4 c #222321",
+"5 c #262F21",
+"6 c #33402B",
+"7 c #425336",
+"8 c #495E3C",
+"9 c #6F895F",
+"0 c #353833",
+"a c #272826",
+"b c #232B1E",
+"c c #252E20",
+"d c #38462E",
+"e c #405135",
+"f c #4F6242",
+"g c #667B57",
+"h c #3C4138",
+"i c #282926",
+"j c #232422",
+"k c #222322",
+"l c #242C1F",
+"m c #2A3026",
+"n c #313B2A",
+"o c #415236",
+"p c #3B4831",
+"q c #323A2D",
+"r c #667B59",
+"s c #252625",
+"t c #333731",
+"u c #272F21",
+"v c #2B3424",
+"w c #415136",
+"x c #3D4239",
+"y c #2D2E2D",
+"z c #353634",
+"A c #2D302C",
+"B c #1F1F1F",
+"C c #30342D",
+"D c #1F261A",
+"E c #131811",
+"F c #151613",
+"G c #2B2C2B",
+"H c #363A35",
+"I c #3D4438",
+"J c #414C3A",
+"K c #36412F",
+"L c #1C2018",
+"M c #1B1C1A",
+"N c #0B0C09",
+"O c #11120F",
+"P c #242821",
+"Q c #3E4838",
+"R c #47573E",
+"S c #4B5E40",
+"T c #4F6442",
+"U c #4D623F",
+"V c #39482F",
+"W c #1F241B",
+"X c #272726",
+"Y c #383A38",
+"Z c #343732",
+"` c #000000",
+" . c #0B0B0B",
+".. c #272B24",
+"+. c #45533C",
+"@. c #4E6341",
+"#. c #506642",
+"$. c #4F6541",
+"%. c #4E6441",
+"&. c #4A5F3D",
+"*. c #324029",
+"=. c #161A14",
+"-. c #242523",
+";. c #010201",
+">. c #111110",
+",. c #364031",
+"'. c #4D6142",
+"). c #485C3B",
+"!. c #36452D",
+"~. c #2C3925",
+"{. c #3D4E32",
+"]. c #4E6440",
+"^. c #252F1F",
+"/. c #1E1F1D",
+"(. c #2C2E2B",
+"_. c #263021",
+":. c #070C04",
+"<. c #080907",
+"[. c #35412D",
+"}. c #4F6542",
+"|. c #38482E",
+"1. c #161C12",
+"2. c #080A07",
+"3. c #222C1C",
+"4. c #46593A",
+"5. c #394A30",
+"6. c #1C211A",
+"7. c #2C302A",
+"8. c #54634B",
+"9. c #6D835E",
+"0. c #273022",
+"a. c #273021",
+"b. c #11150E",
+"c. c #070806",
+"d. c #2C3227",
+"e. c #4A5D3F",
+"f. c #516743",
+"g. c #3D4F33",
+"h. c #12180F",
+"i. c #0A0C08",
+"j. c #242D1E",
+"k. c #455839",
+"l. c #475B3A",
+"m. c #222A1E",
+"n. c #242B20",
+"o. c #384430",
+"p. c #516445",
+"q. c #748D63",
+"r. c #172014",
+"s. c #030503",
+"t. c #161815",
+"u. c #415039",
+"v. c #4C623F",
+"w. c #37472E",
+"x. c #303E28",
+"y. c #3F5135",
+"z. c #475A3A",
+"A. c #1F231D",
+"B. c #252723",
+"C. c #252922",
+"D. c #2B3326",
+"E. c #576C4A",
+"F. c #799468",
+"G. c #5D764E",
+"H. c #212220",
+"I. c #040404",
+"J. c #30372D",
+"K. c #4E6342",
+"L. c #4F6642",
+"M. c #506743",
+"N. c #3E4C35",
+"O. c #272825",
+"P. c #313230",
+"Q. c #2A2F25",
+"R. c #222421",
+"S. c #323D2C",
+"T. c #627853",
+"U. c #2E3828",
+"V. c #060804",
+"W. c #131612",
+"X. c #485B3B",
+"Y. c #4A5C3F",
+"Z. c #45533D",
+"`. c #3E4539",
+" + c #383A36",
+".+ c #2F322D",
+"++ c #222521",
+"@+ c #20221F",
+"#+ c #030302",
+"$+ c #10130D",
+"%+ c #2A3125",
+"&+ c #414B3A",
+"*+ c #404A3A",
+"=+ c #393F35",
+"-+ c #373835",
+";+ c #343634",
+">+ c #333433",
+",+ c #1F201E",
+"'+ c #030403",
+")+ c #090A09",
+"!+ c #1A1C19",
+"~+ c #2A2C28",
+"{+ c #222221",
+"]+ c #252623",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" + @ # # ",
+" $ % & * = # ",
+" - ; & > , ' ",
+" ) ! ~ { ] ^ ",
+" / ( _ : < [ # ",
+" / } | 1 2 3 . 4 ",
+" 5 5 6 7 8 9 # 0 a 4 4 4 ",
+" b c d e f g h i j k 4 4 ",
+" l m n o p q r j s j 4 ",
+" t u v w 4 x y z A B 4 4 4 4 ",
+" C D E F G H I J K L M 4 4 4 4 ",
+" N O P Q R S T U V W X Y Z 4 ",
+" ` ...+.@.#.$.%.$.&.*.=.-.0 4 ",
+" ;.>.,.'.+ ).!.~.{.].&.^./.(.4 4 ",
+" + _.:.<.[.}.+ |.1.2.3.4.+ 5.6.7.8.9.# ",
+" + 0.a.b.c.d.e.f.g.h.i.j.k.& l.m.n.o.p.q.# ",
+" + 0.0.4 r.s.t.u.#.v.w.x.y.].+ z.A.B.C.D.E.F.G. ",
+" + 0.0.0.H. c.I.J.K.+ L.$.M.}.K.N.O.P.Q.R.S.T.U.+ ",
+" + 0.0.0. 4 1.V.W.[.X.#.K.Y.Z.`. + .+ 0.++ 0.+ ",
+" + + 0.0.0. 4 4 @+t.#+$+%+&+*+=+-+;+>+4 4 4 4 0.+ + + ",
+" 0.0.0.0. 4 4 ,+ '+)+!+~+{+]+ 4 4 4 0.0.0.0. ",
+" "};
diff --git a/pics/parashoot/can0003.xpm b/pics/parashoot/can0003.xpm
new file mode 100644
index 0000000..844f7ee
--- a/dev/null
+++ b/pics/parashoot/can0003.xpm
@@ -0,0 +1,259 @@
+/* XPM */
+static char * can0003_xpm[] = {
+"40 32 224 2",
+" c None",
+". c #7C976A",
+"+ c #59704A",
+"@ c #6D875D",
+"# c #7E996C",
+"$ c #425437",
+"% c #506642",
+"& c #5A724C",
+"* c #688259",
+"= c #718B61",
+"- c #333F2B",
+"; c #3D4E33",
+"> c #4B603E",
+", c #566E48",
+"' c #647D54",
+") c #718B60",
+"! c #303C29",
+"~ c #394930",
+"{ c #45593A",
+"] c #556B46",
+"^ c #617A52",
+"/ c #6B845B",
+"( c #2B3626",
+"_ c #34412C",
+": c #425337",
+"< c #506543",
+"[ c #617952",
+"} c #738D62",
+"| c #2B3525",
+"1 c #2E3A28",
+"2 c #3A4931",
+"3 c #506443",
+"4 c #6A835B",
+"5 c #789267",
+"6 c #273022",
+"7 c #2C3625",
+"8 c #3C4B32",
+"9 c #546946",
+"0 c #688058",
+"a c #789367",
+"b c #222321",
+"c c #262F21",
+"d c #252E20",
+"e c #2E3927",
+"f c #3E4D33",
+"g c #475B3A",
+"h c #678058",
+"i c #292A28",
+"j c #232422",
+"k c #252D20",
+"l c #34402C",
+"m c #3D4D33",
+"n c #4D6040",
+"o c #647955",
+"p c #41473B",
+"q c #2B2C29",
+"r c #242523",
+"s c #222322",
+"t c #2C3228",
+"u c #303929",
+"v c #3F5035",
+"w c #3B4831",
+"x c #333B2E",
+"y c #5D6F52",
+"z c #232522",
+"A c #32362F",
+"B c #262E20",
+"C c #2B3524",
+"D c #3F4E35",
+"E c #252724",
+"F c #42493D",
+"G c #2B2C2B",
+"H c #343533",
+"I c #2E302D",
+"J c #2A2E27",
+"K c #1B2117",
+"L c #131711",
+"M c #191A17",
+"N c #2C2E2C",
+"O c #383C36",
+"P c #3A4036",
+"Q c #3D4537",
+"R c #30382C",
+"S c #1D1F1A",
+"T c #1E1F1D",
+"U c #0E0F0C",
+"V c #171915",
+"W c #2A2F26",
+"X c #3E4938",
+"Y c #45543D",
+"Z c #495A3F",
+"` c #4A5C3E",
+" . c #405035",
+".. c #293223",
+"+. c #1E211C",
+"@. c #252624",
+"#. c #2A2B29",
+"$. c #252824",
+"%. c #050505",
+"&. c #151714",
+"*. c #31382C",
+"=. c #47573D",
+"-. c #4D6241",
+";. c #4F6441",
+">. c #4E6441",
+",. c #3C4C31",
+"'. c #262D20",
+"). c #242623",
+"!. c #323431",
+"~. c #31342F",
+"{. c #070807",
+"]. c #1E221C",
+"^. c #3E4C37",
+"/. c #4E6342",
+"(. c #4E6440",
+"_. c #445738",
+":. c #39492F",
+"<. c #3B4B31",
+"[. c #485C3B",
+"}. c #32402A",
+"|. c #1E231B",
+"1. c #262825",
+"2. c #2E302C",
+"3. c #516843",
+"4. c #1C2518",
+"5. c #080B05",
+"6. c #1C2118",
+"7. c #405036",
+"8. c #2D3A25",
+"9. c #181F14",
+"0. c #1D2518",
+"a. c #38482F",
+"b. c #405335",
+"c. c #262F22",
+"d. c #232622",
+"e. c #2D312B",
+"f. c #2F332B",
+"g. c #1D2618",
+"h. c #0C0F0A",
+"i. c #191C16",
+"j. c #3B4733",
+"k. c #4E6241",
+"l. c #475B3B",
+"m. c #273321",
+"n. c #0E120C",
+"o. c #161C13",
+"p. c #34422B",
+"q. c #485D3C",
+"r. c #2F3B28",
+"s. c #232921",
+"t. c #3B4536",
+"u. c #57674C",
+"v. c #617453",
+"w. c #506145",
+"x. c #1C201A",
+"y. c #0D110C",
+"z. c #0D0F0D",
+"A. c #2E3829",
+"B. c #4A5D3E",
+"C. c #4D6340",
+"D. c #3B4C31",
+"E. c #2A3623",
+"F. c #2F3C27",
+"G. c #415336",
+"H. c #323E2A",
+"I. c #23291F",
+"J. c #414F37",
+"K. c #607652",
+"L. c #667C57",
+"M. c #4A5A3F",
+"N. c #536A45",
+"O. c #1F201E",
+"P. c #080A07",
+"Q. c #050605",
+"R. c #20251E",
+"S. c #44543B",
+"T. c #495D3D",
+"U. c #4D6240",
+"V. c #4F6542",
+"W. c #475A3C",
+"X. c #2E3629",
+"Y. c #232621",
+"Z. c #2C302A",
+"`. c #2D3527",
+" + c #44533B",
+".+ c #6B835C",
+"++ c #586C4C",
+"@+ c #2E3828",
+"#+ c #212320",
+"$+ c #090D07",
+"%+ c #0F120E",
+"&+ c #2D3626",
+"*+ c #445638",
+"=+ c #4F6442",
+"-+ c #4D6141",
+";+ c #4A5C3F",
+">+ c #47553E",
+",+ c #3F4938",
+"'+ c #2F332C",
+")+ c #2E312C",
+"!+ c #303C28",
+"~+ c #4E5E44",
+"{+ c #212220",
+"]+ c #191B18",
+"^+ c #070806",
+"/+ c #0E110C",
+"(+ c #282F23",
+"_+ c #404B38",
+":+ c #44513C",
+"<+ c #404A39",
+"[+ c #3D4438",
+"}+ c #3A3F37",
+"|+ c #373936",
+"1+ c #222421",
+"2+ c #292D26",
+"3+ c #20211F",
+"4+ c #191A18",
+"5+ c #050703",
+"6+ c #0C0D0B",
+"7+ c #1D201B",
+"8+ c #2F342C",
+"9+ c #2F332D",
+"0+ c #2C2E2A",
+"a+ c #262725",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" + @ # ",
+" $ % & * = ",
+" - ; > , ' ) ",
+" ! ~ { ] ^ / ",
+" ( _ : < [ } ",
+" | 1 2 3 4 5 ",
+" 6 7 8 9 0 a b ",
+" c d e f g h . i j b b ",
+" k l m n o p q r s b b ",
+" t u v w x y z r j ",
+" A B C D E F G H I s j b ",
+" J K L M N O P Q R S T b b b b ",
+" U V W X Y Z ` ...+.@.#. b ",
+" $.%.&.*.=.-.;.>.>.> ,.'.).!.~.j b ",
+" {.].^./.(._.:.<.g [.}.|.1.2.b ",
+" 3.4.5.6.7.% g 8.9.0.a.> b.c.d.e.f. ",
+" 3.6 g.h.i.j.k.l.m.n.o.p.> q.r.s.t.u.v.w. ",
+" 3.6 6 x.y.z.A.B.C.D.E.F.G.(.> H.I.A.J.K.L.M.N. ",
+" 3.6 6 6 O.P.Q.R.S.% C.q.T.U.V.W.X.Y.Z.`. +.+++@+3. ",
+" 3.6 6 6 #+ $+%+&+*+(.=+-+;+>+,+'+ )+ !+~+ 6 3. ",
+" 3.3.6 6 6 b {+]+^+/+(+_+:+<+[+}+|+!.j b 1+2+ 6 3.3.3. ",
+" 6 6 6 6 b 3+4+5+6+7+8+9+0+a+9+ b b b 6 6 6 6 ",
+" "};
diff --git a/pics/parashoot/can0004.xpm b/pics/parashoot/can0004.xpm
new file mode 100644
index 0000000..0c8844b
--- a/dev/null
+++ b/pics/parashoot/can0004.xpm
@@ -0,0 +1,265 @@
+/* XPM */
+static char * can0004_xpm[] = {
+"40 32 230 2",
+" c None",
+". c #445638",
+"+ c #556B46",
+"@ c #688158",
+"# c #799467",
+"$ c #3D4D33",
+"% c #4C613F",
+"& c #58704A",
+"* c #688259",
+"= c #718B61",
+"- c #323F2B",
+"; c #3C4D32",
+"> c #4B603E",
+", c #668056",
+"' c #323F2A",
+") c #3B4C32",
+"! c #4A5F3E",
+"~ c #5A714B",
+"{ c #678057",
+"] c #2F3B28",
+"^ c #3B4A31",
+"/ c #4B5E3F",
+"( c #5A714C",
+"_ c #698159",
+": c #2A3424",
+"< c #2E3A28",
+"[ c #394831",
+"} c #4C5F40",
+"| c #627953",
+"1 c #738D62",
+"2 c #283123",
+"3 c #2D3827",
+"4 c #3D4C33",
+"5 c #566B49",
+"6 c #6B845B",
+"7 c #779266",
+"8 c #273022",
+"9 c #313D2A",
+"0 c #455639",
+"a c #5A6F4B",
+"b c #708A60",
+"c c #7B9669",
+"d c #232C1F",
+"e c #293223",
+"f c #38452F",
+"g c #435537",
+"h c #5F7751",
+"i c #799367",
+"j c #222321",
+"k c #262E21",
+"l c #313A2A",
+"m c #3A4831",
+"n c #647955",
+"o c #454C3E",
+"p c #2E302C",
+"q c #262725",
+"r c #232422",
+"s c #2E342A",
+"t c #2F3928",
+"u c #3C4C33",
+"v c #3B4731",
+"w c #3C4536",
+"x c #4A5642",
+"y c #242523",
+"z c #252625",
+"A c #2B3027",
+"B c #242C1F",
+"C c #2E3927",
+"D c #394431",
+"E c #31362E",
+"F c #414A3C",
+"G c #292A28",
+"H c #1B1E18",
+"I c #161A13",
+"J c #171A15",
+"K c #222421",
+"L c #313430",
+"M c #393E36",
+"N c #363A33",
+"O c #353A32",
+"P c #292C28",
+"Q c #0E0F0D",
+"R c #191B16",
+"S c #252A21",
+"T c #353D30",
+"U c #3F4B39",
+"V c #434F3C",
+"W c #43503B",
+"X c #3C4835",
+"Y c #2B3226",
+"Z c #1E211C",
+"` c #20211F",
+" . c #131513",
+".. c #141713",
+"+. c #2D3428",
+"@. c #425039",
+"#. c #4A5D3F",
+"$. c #4C6040",
+"%. c #47593B",
+"&. c #35422C",
+"*. c #23291F",
+"=. c #272826",
+"-. c #070805",
+";. c #1A1E18",
+">. c #3A4733",
+",. c #4E6440",
+"'. c #475B3B",
+"). c #425436",
+"!. c #445739",
+"~. c #495D3C",
+"{. c #415335",
+"]. c #2C3525",
+"^. c #242722",
+"/. c #2D2F2C",
+"(. c #2F312D",
+"_. c #252624",
+":. c #38492E",
+"<. c #0D120B",
+"[. c #1B1F17",
+"}. c #3F4E35",
+"|. c #506642",
+"1. c #485C3A",
+"2. c #324129",
+"3. c #242F1E",
+"4. c #2C3824",
+"5. c #485D3B",
+"6. c #35432C",
+"7. c #20251D",
+"8. c #272A26",
+"9. c #2E312C",
+"0. c #4D633F",
+"a. c #1C2417",
+"b. c #0F130C",
+"c. c #3C4833",
+"d. c #4D6140",
+"e. c #435638",
+"f. c #25311F",
+"g. c #121810",
+"h. c #1C2418",
+"i. c #38482F",
+"j. c #4A5F3D",
+"k. c #3F5134",
+"l. c #252E22",
+"m. c #242723",
+"n. c #2D312B",
+"o. c #2A2D27",
+"p. c #2B2C2A",
+"q. c #272F23",
+"r. c #516843",
+"s. c #252E20",
+"t. c #1D2519",
+"u. c #0E100E",
+"v. c #141813",
+"w. c #34402D",
+"x. c #4B5E3E",
+"y. c #475C3B",
+"z. c #314029",
+"A. c #212A1C",
+"B. c #283321",
+"C. c #3D4E32",
+"D. c #2C3726",
+"E. c #272D25",
+"F. c #3A4235",
+"G. c #495440",
+"H. c #383E32",
+"I. c #292C27",
+"J. c #262F21",
+"K. c #222A1E",
+"L. c #121411",
+"M. c #0F120E",
+"N. c #2C3527",
+"O. c #485B3D",
+"P. c #45593A",
+"Q. c #3D4F33",
+"R. c #405135",
+"S. c #485D3C",
+"T. c #4D623F",
+"U. c #425437",
+"V. c #2D3726",
+"W. c #282F24",
+"X. c #3B4734",
+"Y. c #546449",
+"Z. c #5F7352",
+"`. c #424C3B",
+" + c #282B26",
+".+ c #181A17",
+"++ c #0A0D09",
+"@+ c #1C2118",
+"#+ c #39472F",
+"$+ c #4D6340",
+"%+ c #4B5F3F",
+"&+ c #4A5C3E",
+"*+ c #3B4833",
+"=+ c #2A3126",
+"-+ c #262B22",
+";+ c #333D2C",
+">+ c #46553D",
+",+ c #657B56",
+"'+ c #5A6E4D",
+")+ c #343A30",
+"!+ c #1D1F1C",
+"~+ c #111210",
+"{+ c #0D0F0C",
+"]+ c #20251C",
+"^+ c #3B4633",
+"/+ c #46553C",
+"(+ c #45533C",
+"_+ c #44503C",
+":+ c #404A3A",
+"<+ c #363C31",
+"[+ c #2C2F29",
+"}+ c #242822",
+"|+ c #31392C",
+"1+ c #607652",
+"2+ c #56674A",
+"3+ c #384033",
+"4+ c #1C1D1B",
+"5+ c #141513",
+"6+ c #20241D",
+"7+ c #2F372B",
+"8+ c #32392F",
+"9+ c #393F35",
+"0+ c #393D36",
+"a+ c #323431",
+"b+ c #222522",
+"c+ c #262A23",
+"d+ c #3C4635",
+"e+ c #3B4434",
+"f+ c #2A2D28",
+"g+ c #323430",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + @ # ",
+" $ % & * = ",
+" - ; > & , ",
+" ' ) ! ~ { ",
+" ] ^ / ( _ ",
+" : < [ } | 1 ",
+" 2 3 4 5 6 7 ",
+" 8 9 0 a b c ",
+" d e f g h i j ",
+" k l m / n o p q r j j ",
+" s t u v w x y z r j ",
+" A B C D E F G G y r ",
+" H I J K L M N O P j r j ",
+" Q R S T U V W X Y Z ` j j ",
+" ...+.@.#.$.$.$.%.&.*.K =.q r ",
+" -.;.>.$.,.'.).!.~.{.].^./.(._.j ",
+" :.<.[.}.|.1.2.3.4.{.5.6.7.8.9.y j ",
+" 0.a.b.;.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.8 ",
+" r.s.t.u.v.w.x.y.z.A.B.C.> e.D.E.F.G.H.I.8 8 r. ",
+" r.8 J.K.L.M.N.O.,.P.Q.R.S.T.U.V.W.X.Y.Z.`. +8 8 r. ",
+" r.8 8 8 .+++@+#+j.$+$.%+$.&+*+=+-+;+>+,+'+)+ 8 r. ",
+" r.r.8 8 8 !+~+{+]+^+/+>+(+_+:+<+[+p }+|+1+2+3+ 8 r.r.r. ",
+" 8 8 8 8 4+5+Q 6+7+8+9+0+a+b+ c+d+e+ 8 8 8 8 ",
+" f+g+ "};
diff --git a/pics/parashoot/can0005.xpm b/pics/parashoot/can0005.xpm
new file mode 100644
index 0000000..8e7d00e
--- a/dev/null
+++ b/pics/parashoot/can0005.xpm
@@ -0,0 +1,271 @@
+/* XPM */
+static char * can0005_xpm[] = {
+"40 32 236 2",
+" c None",
+". c #627A53",
+"+ c #728C61",
+"@ c #4A5D3D",
+"# c #59704B",
+"$ c #688259",
+"% c #415236",
+"& c #4D6240",
+"* c #5B734D",
+"= c #678158",
+"- c #36452D",
+"; c #405336",
+"> c #4E6341",
+", c #5C744D",
+"' c #698259",
+") c #35432D",
+"! c #506543",
+"~ c #5E764F",
+"{ c #2D3826",
+"] c #35422C",
+"^ c #425338",
+"/ c #526745",
+"( c #627953",
+"_ c #2C3726",
+": c #34412D",
+"< c #44563A",
+"[ c #5A704D",
+"} c #6D865D",
+"| c #273022",
+"1 c #2B3525",
+"2 c #38462F",
+"3 c #4F6243",
+"4 c #657D56",
+"5 c #738E63",
+"6 c #262F21",
+"7 c #2F3A28",
+"8 c #415136",
+"9 c #556947",
+"0 c #6C865D",
+"a c #799467",
+"b c #283123",
+"c c #36422E",
+"d c #415336",
+"e c #5C744F",
+"f c #789166",
+"g c #272F22",
+"h c #31392A",
+"i c #394630",
+"j c #4A5D3E",
+"k c #647955",
+"l c #474E3F",
+"m c #2F312D",
+"n c #272825",
+"o c #232422",
+"p c #222321",
+"q c #2E3429",
+"r c #2F3928",
+"s c #3B4B32",
+"t c #3B4731",
+"u c #3D4737",
+"v c #46503E",
+"w c #242523",
+"x c #242524",
+"y c #282D24",
+"z c #242C1F",
+"A c #2E3927",
+"B c #384331",
+"C c #343930",
+"D c #3F483B",
+"E c #282927",
+"F c #2C2D2C",
+"G c #272826",
+"H c #181B16",
+"I c #171A14",
+"J c #1A1D18",
+"K c #252724",
+"L c #323631",
+"M c #393E36",
+"N c #343731",
+"O c #323630",
+"P c #282A27",
+"Q c #131512",
+"R c #1F221B",
+"S c #2A3026",
+"T c #374032",
+"U c #3F4B39",
+"V c #424D3B",
+"W c #404B39",
+"X c #374131",
+"Y c #282E25",
+"Z c #20221E",
+"` c #212220",
+" . c #141613",
+".. c #1D221A",
+"+. c #343E2E",
+"@. c #45543B",
+"#. c #4A5E3F",
+"$. c #4B5F40",
+"%. c #4B5E3F",
+"&. c #495B3E",
+"*. c #404F36",
+"=. c #2E3827",
+"-. c #21261F",
+";. c #222421",
+">. c #252624",
+",. c #0F120D",
+"'. c #252D21",
+"). c #415038",
+"!. c #4D6140",
+"~. c #4C613E",
+"{. c #46593A",
+"]. c #445638",
+"^. c #475A3B",
+"/. c #455839",
+"(. c #37452D",
+"_. c #272D23",
+":. c #252824",
+"<. c #2A2C29",
+"[. c #2A3722",
+"}. c #131810",
+"|. c #293123",
+"1. c #46573A",
+"2. c #4D623F",
+"3. c #3F5133",
+"4. c #2E3C26",
+"5. c #2B3723",
+"6. c #37472E",
+"7. c #445738",
+"8. c #3E4F33",
+"9. c #242822",
+"0. c #2B2E2A",
+"a. c #2B2D29",
+"b. c #435737",
+"c. c #161C13",
+"d. c #131711",
+"e. c #282F23",
+"f. c #435339",
+"g. c #485C3C",
+"h. c #35452D",
+"i. c #1D2719",
+"j. c #192015",
+"k. c #2B3724",
+"l. c #415436",
+"m. c #435738",
+"n. c #313D2A",
+"o. c #242922",
+"p. c #282C27",
+"q. c #2B2E29",
+"r. c #262724",
+"s. c #2A2B2A",
+"t. c #262E23",
+"u. c #4F6641",
+"v. c #222A1E",
+"w. c #171D14",
+"x. c #111410",
+"y. c #232B20",
+"z. c #3F4F35",
+"A. c #495D3D",
+"B. c #3C4E32",
+"C. c #283422",
+"D. c #232C1D",
+"E. c #313F29",
+"F. c #435638",
+"G. c #465A3A",
+"H. c #36442E",
+"I. c #272F24",
+"J. c #2D322A",
+"K. c #373D32",
+"L. c #3A4134",
+"M. c #282A25",
+"N. c #516843",
+"O. c #242D20",
+"P. c #1C2218",
+"Q. c #121411",
+"R. c #1E241B",
+"S. c #3B4932",
+"T. c #4B603E",
+"U. c #495D3C",
+"V. c #3F5135",
+"W. c #3B4C31",
+"X. c #495E3C",
+"Y. c #2A3225",
+"Z. c #323A2D",
+"`. c #46523E",
+" + c #4E5C45",
+".+ c #46513C",
+"++ c #2A2D27",
+"@+ c #232421",
+"#+ c #131511",
+"$+ c #151912",
+"%+ c #2C3624",
+"&+ c #435537",
+"*+ c #4C613F",
+"=+ c #4B603F",
+"-+ c #4A5E3E",
+";+ c #333E2C",
+">+ c #293024",
+",+ c #313A2B",
+"'+ c #49583F",
+")+ c #586A4C",
+"!+ c #68805A",
+"~+ c #3C4A34",
+"{+ c #161715",
+"]+ c #10110E",
+"^+ c #191D16",
+"/+ c #313A2A",
+"(+ c #435139",
+"_+ c #46563D",
+":+ c #46553D",
+"<+ c #46543D",
+"[+ c #44503C",
+"}+ c #3C4535",
+"|+ c #30372C",
+"1+ c #2F342C",
+"2+ c #384231",
+"3+ c #506044",
+"4+ c #6F875E",
+"5+ c #404A39",
+"6+ c #292D27",
+"7+ c #171816",
+"8+ c #10110F",
+"9+ c #1C1F19",
+"0+ c #2D3429",
+"a+ c #343B30",
+"b+ c #363D32",
+"c+ c #3B4237",
+"d+ c #3A3F37",
+"e+ c #2C2F2A",
+"f+ c #1B1E1A",
+"g+ c #414E39",
+"h+ c #4C5A42",
+"i+ c #3B4435",
+"j+ c #2B2E28",
+"k+ c #323530",
+"l+ c #343732",
+"m+ c #343532",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + ",
+" @ # $ ",
+" % & * = ",
+" - ; > , ' ",
+" ) % ! ~ ' ",
+" { ] ^ / ( ",
+" _ : < [ } ",
+" | 1 2 3 4 5 ",
+" 6 7 8 9 0 a ",
+" b c d e f ",
+" g h i j k l m n o p p ",
+" q r s t u v w x o p ",
+" y z A B C D E F G o ",
+" H I J K L M N O P o o ",
+" Q R S T U V W X Y Z ` p ",
+" ...+.@.#.$.%.&.*.=.-.;.>.w p ",
+" ,.'.).!.~.{.].^./.(._.:.<.E o ",
+" [.}.|.1.2.3.4.5.6.7.8.1 9.0.a.w ",
+" b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.| ",
+" u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.o | | N. ",
+" N.6 O.P.Q.R.S.T.U.V.W.l.X.^.H.Y.Z.`. +.+++@+| | N. ",
+" N.| | 6 #+$+%+&+*+=+j -+%.^ ;+>+,+'+)+!+~+:. | N. ",
+" N.N.| | | {+]+^+/+(+_+:+<+[+}+|+ 1+2+3+4+5+6+ | N.N.N. ",
+" | | | | 7+8+9+0+a+b+c+d+e+f+ g+h+i+ | | | | ",
+" j+k+l+m+ "};
diff --git a/pics/parashoot/can0006.xpm b/pics/parashoot/can0006.xpm
new file mode 100644
index 0000000..b56cd9e
--- a/dev/null
+++ b/pics/parashoot/can0006.xpm
@@ -0,0 +1,265 @@
+/* XPM */
+static char * can0006_xpm[] = {
+"40 32 230 2",
+" c None",
+". c #556B48",
+"+ c #677F57",
+"@ c #435437",
+"# c #516644",
+"$ c #607852",
+"% c #6D885D",
+"& c #3D4D33",
+"* c #485C3C",
+"= c #576E49",
+"- c #647D55",
+"; c #34432C",
+"> c #3E5034",
+", c #4C6140",
+"' c #5B734D",
+") c #688158",
+"! c #35422D",
+"~ c #425337",
+"{ c #526845",
+"] c #617952",
+"^ c #2E3A27",
+"/ c #38462F",
+"( c #475A3C",
+"_ c #586E4A",
+": c #667E56",
+"< c #2A3525",
+"[ c #303C29",
+"} c #3C4C34",
+"| c #4E6243",
+"1 c #617853",
+"2 c #2A3425",
+"3 c #34412C",
+"4 c #47583C",
+"5 c #5D734F",
+"6 c #6E875E",
+"7 c #273022",
+"8 c #2E3927",
+"9 c #3F4E35",
+"0 c #556A48",
+"a c #69825A",
+"b c #293324",
+"c c #38452F",
+"d c #495B3D",
+"e c #627A54",
+"f c #748E63",
+"g c #323C2B",
+"h c #556C49",
+"i c #738C62",
+"j c #2B3126",
+"k c #30372A",
+"l c #36422E",
+"m c #485A3C",
+"n c #647955",
+"o c #4C5543",
+"p c #343731",
+"q c #222321",
+"r c #2B3028",
+"s c #2E3827",
+"t c #394831",
+"u c #3C4832",
+"v c #3F4939",
+"w c #3C4337",
+"x c #252624",
+"y c #232422",
+"z c #20251D",
+"A c #232B1F",
+"B c #2F3929",
+"C c #374031",
+"D c #394035",
+"E c #3A4136",
+"F c #262725",
+"G c #131511",
+"H c #191B16",
+"I c #1C2019",
+"J c #222520",
+"K c #2C2F2B",
+"L c #363B34",
+"M c #363B33",
+"N c #2E312D",
+"O c #2B2D2A",
+"P c #0C0E0B",
+"Q c #171A15",
+"R c #242920",
+"S c #2D3528",
+"T c #353E30",
+"U c #3B4636",
+"V c #3D4537",
+"W c #373E32",
+"X c #2D322B",
+"Y c #252724",
+"Z c #141612",
+"` c #1F261C",
+" . c #36412F",
+".. c #44543A",
+"+. c #495D3E",
+"@. c #4A5D3F",
+"#. c #495A3E",
+"$. c #46563C",
+"%. c #3E4A35",
+"&. c #2E3729",
+"*. c #232620",
+"=. c #212220",
+"-. c #090E07",
+";. c #10140E",
+">. c #283022",
+",. c #435339",
+"'. c #4D6140",
+"). c #4B603D",
+"!. c #475A3B",
+"~. c #46583A",
+"{. c #435438",
+"]. c #323E2A",
+"^. c #232920",
+"/. c #222421",
+"(. c #242523",
+"_. c #25301E",
+":. c #171C15",
+"<. c #2D3627",
+"[. c #46573A",
+"}. c #4A5E3C",
+"|. c #3C4D31",
+"1. c #303E27",
+"2. c #324029",
+"3. c #445638",
+"4. c #38462E",
+"5. c #272E23",
+"6. c #252824",
+"7. c #292B28",
+"8. c #3C4E32",
+"9. c #151B13",
+"0. c #191E17",
+"a. c #2E3828",
+"b. c #445539",
+"c. c #435638",
+"d. c #2E3D28",
+"e. c #1E2719",
+"f. c #222C1C",
+"g. c #35442C",
+"h. c #425537",
+"i. c #3B4B31",
+"j. c #2A3325",
+"k. c #252923",
+"l. c #292A27",
+"m. c #292928",
+"n. c #262E22",
+"o. c #4E6440",
+"p. c #20271C",
+"q. c #171C14",
+"r. c #191D17",
+"s. c #2E3928",
+"t. c #435538",
+"u. c #445839",
+"v. c #34432B",
+"w. c #252F1F",
+"x. c #273120",
+"y. c #37462E",
+"z. c #3D4E33",
+"A. c #252A24",
+"B. c #292D28",
+"C. c #292B27",
+"D. c #516843",
+"E. c #262F21",
+"F. c #222A1D",
+"G. c #181E15",
+"H. c #171A14",
+"I. c #2A3424",
+"J. c #425336",
+"K. c #4A5E3D",
+"L. c #3A4A30",
+"M. c #39492F",
+"N. c #415436",
+"O. c #465A3A",
+"P. c #3D4E34",
+"Q. c #2E3929",
+"R. c #2A3027",
+"S. c #30352C",
+"T. c #32372E",
+"U. c #30322E",
+"V. c #2B2F26",
+"W. c #242D1F",
+"X. c #20271B",
+"Y. c #38452E",
+"Z. c #485B3C",
+"`. c #4B603F",
+" + c #485B3D",
+".+ c #495D3D",
+"++ c #46593B",
+"@+ c #3A4931",
+"#+ c #2F372A",
+"$+ c #3C4636",
+"%+ c #48533F",
+"&+ c #3C4336",
+"*+ c #151613",
+"=+ c #141713",
+"-+ c #293024",
+";+ c #3E4B35",
+">+ c #46563D",
+",+ c #47563D",
+"'+ c #47573D",
+")+ c #414F38",
+"!+ c #35402E",
+"~+ c #2B3225",
+"{+ c #30382A",
+"]+ c #414E39",
+"^+ c #4F5E45",
+"/+ c #45503D",
+"(+ c #252723",
+"_+ c #151614",
+":+ c #1D201B",
+"<+ c #2C3129",
+"[+ c #353D31",
+"}+ c #394234",
+"|+ c #3B4436",
+"1+ c #3F4739",
+"2+ c #3A4234",
+"3+ c #262B23",
+"4+ c #1A1E18",
+"5+ c #2C3725",
+"6+ c #45543B",
+"7+ c #5E7350",
+"8+ c #536348",
+"9+ c #3A4235",
+"0+ c #272925",
+"a+ c #2D302A",
+"b+ c #343932",
+"c+ c #373B34",
+"d+ c #373B35",
+"e+ c #363933",
+"f+ c #5D724F",
+"g+ c #6E865E",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + ",
+" @ # $ % ",
+" & * = - ",
+" ; > , ' ) ",
+" ! ~ { ] ",
+" ^ / ( _ : ",
+" < [ } | 1 ",
+" 2 3 4 5 6 ",
+" 7 8 9 0 a ",
+" b c d e f ",
+" 7 g & h i ",
+" j k l m n o p q ",
+" r j s t u v w x y q q ",
+" z A B C D E F F y q ",
+" G H I J K L M N O x y ",
+" P Q R S T U v V W X Y y y ",
+" Z ` ...+.@.#.$.%.&.*.=.q ",
+" -.;.>.,.'.).!.~.m {.].^./.(.(. ",
+" _.:.<.[.}.|.1.2.> 3.4.5.6.7.F y ",
+" 8.9.0.a.b.c.d.e.f.g.h.i.j.k.O l.y m.n.7 ",
+" o.p.q.r.s.t.u.v.w.x.y.c.z.<.A.B.C. q q 7 7 D. ",
+" D.E.F.G.H.I.J.K.c.L.M.N.O.P.Q.R.S.T.U.V.q q 7 7 D. ",
+" D.7 E.W. G X.Y.Z.`. +!..+++@+a.#+$+%+&+ 7 q 7 D. ",
+" D.D.7 7 7 *+=+-+;+>+,+'+'+)+!+~+{+]+^+/+ (+q 7 D.D.D. ",
+" 7 7 7 7 _+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+ 7 7 7 7 ",
+" a+b+c+d+e+ f+g+ "};
diff --git a/pics/parashoot/can0007.xpm b/pics/parashoot/can0007.xpm
new file mode 100644
index 0000000..8826baf
--- a/dev/null
+++ b/pics/parashoot/can0007.xpm
@@ -0,0 +1,266 @@
+/* XPM */
+static char * can0007_xpm[] = {
+"40 32 231 2",
+" c None",
+". c #506543",
+"+ c #607751",
+"@ c #3F4F34",
+"# c #4B5F3F",
+"$ c #5A714C",
+"% c #678158",
+"& c #394830",
+"* c #435638",
+"= c #516744",
+"- c #5F7751",
+"; c #6A845A",
+"> c #3A4A31",
+", c #485B3C",
+"' c #576E4A",
+") c #657E55",
+"! c #323F2B",
+"~ c #4F6442",
+"{ c #5F7650",
+"] c #2D3927",
+"^ c #36442E",
+"/ c #45573B",
+"( c #566C49",
+"_ c #657D56",
+": c #303C29",
+"< c #3C4C34",
+"[ c #4E6243",
+"} c #617853",
+"| c #2B3626",
+"1 c #36432E",
+"2 c #495B3E",
+"3 c #5E7450",
+"4 c #6E875E",
+"5 c #283223",
+"6 c #313D2A",
+"7 c #435338",
+"8 c #586D4A",
+"9 c #6A835B",
+"0 c #2E3827",
+"a c #3C4A32",
+"b c #4F6343",
+"c c #667E57",
+"d c #758F64",
+"e c #2D3527",
+"f c #35412E",
+"g c #45573A",
+"h c #5F7651",
+"i c #748D63",
+"j c #2D3328",
+"k c #313A2B",
+"l c #3C4B33",
+"m c #526545",
+"n c #5B6B4E",
+"o c #444B3D",
+"p c #31342E",
+"q c #282E24",
+"r c #2A3225",
+"s c #323E2B",
+"t c #3A4731",
+"u c #3D4835",
+"v c #3E4638",
+"w c #31352E",
+"x c #242623",
+"y c #232422",
+"z c #222321",
+"A c #1D211B",
+"B c #20261D",
+"C c #283124",
+"D c #333B2D",
+"E c #384033",
+"F c #3A4136",
+"G c #30342D",
+"H c #262725",
+"I c #242523",
+"J c #121410",
+"K c #1A1D17",
+"L c #1E221B",
+"M c #232720",
+"N c #2A2D28",
+"O c #323731",
+"P c #363B34",
+"Q c #31352F",
+"R c #2B2D2A",
+"S c #262825",
+"T c #0D0F0B",
+"U c #171B15",
+"V c #252B21",
+"W c #2F3729",
+"X c #354030",
+"Y c #3A4535",
+"Z c #3E4838",
+"` c #3D4637",
+" . c #383F33",
+".. c #30352D",
+"+. c #272A26",
+"@. c #151813",
+"#. c #1E241A",
+"$. c #343F2D",
+"%. c #435239",
+"&. c #485C3D",
+"*. c #4A5D3F",
+"=. c #46563C",
+"-. c #3F4C36",
+";. c #323B2C",
+">. c #262B23",
+",. c #222421",
+"'. c #0A1008",
+"). c #11150F",
+"!. c #262D20",
+"~. c #3F4E35",
+"{. c #4B5E3E",
+"]. c #4A5E3C",
+"^. c #46593A",
+"/. c #46583A",
+"(. c #48593C",
+"_. c #435439",
+":. c #35412D",
+"<. c #262D22",
+"[. c #283321",
+"}. c #181C15",
+"|. c #2B3425",
+"1. c #485C3B",
+"2. c #3C4D31",
+"3. c #303E27",
+"4. c #324029",
+"5. c #3D4F33",
+"6. c #435538",
+"7. c #39472F",
+"8. c #283024",
+"9. c #242823",
+"0. c #272826",
+"a. c #252724",
+"b. c #3F5134",
+"c. c #171C14",
+"d. c #191E17",
+"e. c #2D3727",
+"f. c #303F29",
+"g. c #1F291A",
+"h. c #222C1C",
+"i. c #34432B",
+"j. c #415436",
+"k. c #3B4B31",
+"l. c #2A3325",
+"m. c #252923",
+"n. c #2A2C29",
+"o. c #282926",
+"p. c #292929",
+"q. c #262E22",
+"r. c #262F22",
+"s. c #4F6541",
+"t. c #21291C",
+"u. c #171D15",
+"v. c #181D16",
+"w. c #2D3827",
+"x. c #45593A",
+"y. c #36452D",
+"z. c #263120",
+"A. c #273120",
+"B. c #37462E",
+"C. c #3D4D33",
+"D. c #2C3527",
+"E. c #252A24",
+"F. c #2A2D29",
+"G. c #292B27",
+"H. c #273022",
+"I. c #516843",
+"J. c #262F21",
+"K. c #222B1E",
+"L. c #191F15",
+"M. c #161A14",
+"N. c #283222",
+"O. c #405135",
+"P. c #495D3D",
+"Q. c #394A2F",
+"R. c #415336",
+"S. c #455939",
+"T. c #3C4D33",
+"U. c #2D3828",
+"V. c #292E26",
+"W. c #2D322B",
+"X. c #2E322B",
+"Y. c #2D2F2C",
+"Z. c #292D25",
+"`. c #242C1F",
+" + c #141713",
+".+ c #20261B",
+"++ c #37432D",
+"@+ c #4A5E3F",
+"#+ c #485B3D",
+"$+ c #475A3B",
+"%+ c #485C3C",
+"&+ c #2E3828",
+"*+ c #2F362A",
+"=+ c #384133",
+"-+ c #3F4738",
+";+ c #353A31",
+">+ c #171815",
+",+ c #181B16",
+"'+ c #2A3125",
+")+ c #3C4835",
+"!+ c #44533B",
+"~+ c #46553D",
+"{+ c #47573D",
+"]+ c #404E37",
+"^+ c #2D3427",
+"/+ c #333C2D",
+"(+ c #414D39",
+"_+ c #47533E",
+":+ c #394033",
+"<+ c #191A17",
+"[+ c #20231E",
+"}+ c #2C3129",
+"|+ c #363D31",
+"1+ c #394234",
+"2+ c #3C4436",
+"3+ c #3E4738",
+"4+ c #394233",
+"5+ c #262B22",
+"6+ c #1E231B",
+"7+ c #4B5B40",
+"8+ c #5F7351",
+"9+ c #46523E",
+"0+ c #31372D",
+"a+ c #252723",
+"b+ c #2F332D",
+"c+ c #353A33",
+"d+ c #373B34",
+"e+ c #373C35",
+"f+ c #4E6043",
+"g+ c #627854",
+"h+ c #718960",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + ",
+" @ # $ % ",
+" & * = - ; ",
+" > , ' ) ",
+" ! @ ~ { ",
+" ] ^ / ( _ ",
+" : < [ } ",
+" | 1 2 3 4 ",
+" 5 6 7 8 9 ",
+" 0 a b c d ",
+" e f g h i ",
+" j k l m n o p ",
+" q r s t u v w x y z ",
+" A B C D E F G H I z ",
+" J K L M N O P Q R S y ",
+" T U V W X Y Z ` ...+.I y ",
+" @.#.$.%.&.*.2 =.-.;.>.,.z ",
+" '.).!.~.{.].^./.(._.:.<.,.y I ",
+" [.}.|.7 1.2.3.4.5.6.7.8.9.0.a.y ",
+" b.c.d.e.7 * f.g.h.i.j.k.l.m.n.o.y p.q.r. ",
+" s.t.u.v.w.6.x.y.z.A.B.* C.D.E.F.G.I z z H.H.I. ",
+" I.J.K.L.M.N.O.P.* k.Q.R.S.T.U.V.W.X.Y.Z.z z H.H.I. ",
+" I.H.J.`. +.+++/.@+#+$+%+g & &+*+=+-+;+ H.z H.I. ",
+" I.I.H.H.J. >+,+'+)+!+~+{+=.]+$.^+/+(+_+:+ y z H.I.I.I. ",
+" H.H.H.H. <+[+}+|+1+2+3+4+5+6+! 7+8+9+0+a+ H.H.H.H. ",
+" b+c+d+e+ f+g+h+ "};
diff --git a/pics/parashoot/can0008.xpm b/pics/parashoot/can0008.xpm
new file mode 100644
index 0000000..a3f8607
--- a/dev/null
+++ b/pics/parashoot/can0008.xpm
@@ -0,0 +1,262 @@
+/* XPM */
+static char * can0008_xpm[] = {
+"40 32 227 2",
+" c None",
+". c #526644",
+"+ c #5E7550",
+"@ c #435538",
+"# c #506544",
+"$ c #5E754F",
+"% c #405135",
+"& c #4C6140",
+"* c #5A724C",
+"= c #678058",
+"- c #3B4B32",
+"; c #475A3C",
+"> c #556B48",
+", c #627B54",
+"' c #35432D",
+") c #425337",
+"! c #526745",
+"~ c #617952",
+"{ c #313E2A",
+"] c #3D4D33",
+"^ c #4E6242",
+"/ c #5F7650",
+"( c #2F3B28",
+"_ c #3A4931",
+": c #4A5D3F",
+"< c #5A714D",
+"[ c #2C3827",
+"} c #374530",
+"| c #48593D",
+"1 c #5A6F4D",
+"2 c #688059",
+"3 c #2C3726",
+"4 c #37442F",
+"5 c #5A6F4C",
+"6 c #698159",
+"7 c #2B3525",
+"8 c #36422D",
+"9 c #47573B",
+"0 c #596F4C",
+"a c #69825A",
+"b c #2C3526",
+"c c #35402D",
+"d c #445439",
+"e c #586E4B",
+"f c #6B845B",
+"g c #2D3428",
+"h c #333D2C",
+"i c #415037",
+"j c #576C4A",
+"k c #6A815B",
+"l c #292F25",
+"m c #2E3828",
+"n c #3A4932",
+"o c #526545",
+"p c #5F7252",
+"q c #59684E",
+"r c #1D201A",
+"s c #22271F",
+"t c #293124",
+"u c #333E2C",
+"v c #3C4933",
+"w c #45503C",
+"x c #3E4538",
+"y c #32352E",
+"z c #1B1F19",
+"A c #1E221B",
+"B c #242A20",
+"C c #2D3429",
+"D c #353D30",
+"E c #3A4235",
+"F c #363C32",
+"G c #2D302A",
+"H c #252724",
+"I c #232422",
+"J c #11130E",
+"K c #1B1F17",
+"L c #242B20",
+"M c #293024",
+"N c #2C3327",
+"O c #2E342B",
+"P c #32372F",
+"Q c #363D34",
+"R c #333831",
+"S c #2B2E29",
+"T c #0D120B",
+"U c #171C14",
+"V c #262D20",
+"W c #3B4833",
+"X c #3C4A35",
+"Y c #3C4836",
+"Z c #3C4536",
+"` c #3A4135",
+" . c #343A31",
+".. c #2D302B",
+"+. c #272825",
+"@. c #242523",
+"#. c #272A25",
+"$. c #090C08",
+"%. c #11160F",
+"&. c #1E241A",
+"*. c #313B2A",
+"=. c #405036",
+"-. c #47583B",
+";. c #475A3B",
+">. c #47583C",
+",. c #47573D",
+"'. c #414D38",
+"). c #384132",
+"!. c #2F342B",
+"~. c #272925",
+"{. c #0A0D09",
+"]. c #171B15",
+"^. c #272F22",
+"/. c #3A4831",
+"(. c #455639",
+"_. c #445638",
+":. c #405235",
+"<. c #435437",
+"[. c #44533A",
+"}. c #3B4732",
+"|. c #2D3529",
+"1. c #252823",
+"2. c #4D6340",
+"3. c #1F281B",
+"4. c #0E140B",
+"5. c #191E16",
+"6. c #435638",
+"7. c #38472E",
+"8. c #2E3B26",
+"9. c #324029",
+"0. c #3E4F34",
+"a. c #435438",
+"b. c #2B3426",
+"c. c #242722",
+"d. c #506742",
+"e. c #252E20",
+"f. c #1F271A",
+"g. c #161915",
+"h. c #1D2419",
+"i. c #323F2B",
+"j. c #425437",
+"k. c #313F29",
+"l. c #253120",
+"m. c #283421",
+"n. c #36462D",
+"o. c #39472F",
+"p. c #2B3326",
+"q. c #252923",
+"r. c #252624",
+"s. c #272826",
+"t. c #252A22",
+"u. c #262D22",
+"v. c #516843",
+"w. c #262F21",
+"x. c #1C1D1A",
+"y. c #171915",
+"z. c #1E2419",
+"A. c #34402A",
+"B. c #2D3B26",
+"C. c #2F3C27",
+"D. c #394930",
+"E. c #37442E",
+"F. c #272B25",
+"G. c #272926",
+"H. c #242522",
+"I. c #222321",
+"J. c #262E21",
+"K. c #506642",
+"L. c #273022",
+"M. c #1D1E1C",
+"N. c #181D15",
+"O. c #303A28",
+"P. c #415136",
+"Q. c #46593B",
+"R. c #3C4D32",
+"S. c #425436",
+"T. c #405236",
+"U. c #35412D",
+"V. c #2A3126",
+"W. c #282C26",
+"X. c #2A2C29",
+"Y. c #282A25",
+"Z. c #1E1F1D",
+"`. c #191E15",
+" + c #45553B",
+".+ c #47573C",
+"++ c #45573A",
+"@+ c #45583A",
+"#+ c #445739",
+"$+ c #3D4D34",
+"%+ c #323E2C",
+"&+ c #2B3227",
+"*+ c #2A2F28",
+"=+ c #2C2F2A",
+"-+ c #252B22",
+";+ c #20211F",
+">+ c #1D1F1C",
+",+ c #242821",
+"'+ c #2F362A",
+")+ c #3E4937",
+"!+ c #424F3B",
+"~+ c #44533C",
+"{+ c #44543A",
+"]+ c #38452F",
+"^+ c #303A2A",
+"/+ c #2F372C",
+"(+ c #2D312A",
+"_+ c #1F201E",
+":+ c #222320",
+"<+ c #282D24",
+"[+ c #2D342B",
+"}+ c #343B30",
+"|+ c #3E4839",
+"1+ c #343D2E",
+"2+ c #2D3527",
+"3+ c #353E2F",
+"4+ c #404B38",
+"5+ c #373E32",
+"6+ c #2C3129",
+"7+ c #242623",
+"8+ c #363B33",
+"9+ c #393E36",
+"0+ c #383E34",
+"a+ c #30382A",
+"b+ c #3E4A35",
+"c+ c #4F5F44",
+"d+ c #596A4D",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + ",
+" @ # $ ",
+" % & * = ",
+" - ; > , ",
+" ' ) ! ~ ",
+" { ] ^ / ",
+" ( _ : < ",
+" [ } | 1 2 ",
+" 3 4 | 5 6 ",
+" 7 8 9 0 a ",
+" b c d e f ",
+" g h i j k ",
+" l m n o p q ",
+" r s t u v w x y ",
+" z A B C D E F G H I ",
+" J K L M N O P Q R S H I ",
+" T U V u W X Y Z ` ...+.@. ",
+" #.$.%.&.*.=.-.;.>.,.'.).!.~.@. ",
+" {.].^./.(._.:.<.-.[.}.|.1.I ",
+" 2.3.4.5.m =.6.7.8.9.0.a./.b.c.I I ",
+" d.e.f.g.h.i.j.j.k.l.m.n.% o.p.q.r.s.t.u. ",
+" v.w.e.x.y.z.A.j.@ 7.B.C.D.0.E.p.F.G.H.I.u.J.K. ",
+" v.L.w.e.M. N.O.P.Q.j.R.R.S.T.U.V.W.X.Y.I.I.J.w.v. ",
+" v.L.L.L. Z. `.t W +.+++@+#+$+%+&+*+=+#.-+I. L.v. ",
+" v.v.L.L.L. ;+>+>+,+'+)+!+~+{+=.]+^+'+/+(+ I I. L.v.v.v. ",
+" L.L.L.L. ;+_+:+<+[+}+|+)+1+b.2+3+4+5+6+7+ L.L.L.L. ",
+" 8+9+0+}+C a+b+c+d+ "};
diff --git a/pics/parashoot/can0009.xpm b/pics/parashoot/can0009.xpm
new file mode 100644
index 0000000..c14367d
--- a/dev/null
+++ b/pics/parashoot/can0009.xpm
@@ -0,0 +1,266 @@
+/* XPM */
+static char * can0009_xpm[] = {
+"40 32 231 2",
+" c None",
+". c #607751",
+"+ c #506543",
+"@ c #678158",
+"# c #5A714C",
+"$ c #4B5F3F",
+"% c #3F4F34",
+"& c #6A845A",
+"* c #5F7751",
+"= c #516744",
+"- c #435638",
+"; c #394830",
+"> c #657E55",
+", c #576E4A",
+"' c #485B3C",
+") c #3A4A31",
+"! c #5F7650",
+"~ c #4F6442",
+"{ c #323F2B",
+"] c #657D56",
+"^ c #566C49",
+"/ c #45573B",
+"( c #36442E",
+"_ c #2D3927",
+": c #617853",
+"< c #4E6243",
+"[ c #3C4C34",
+"} c #303C29",
+"| c #6E875E",
+"1 c #5E7450",
+"2 c #495B3E",
+"3 c #36432E",
+"4 c #2B3626",
+"5 c #6A835B",
+"6 c #586D4A",
+"7 c #435338",
+"8 c #313D2A",
+"9 c #283223",
+"0 c #758F64",
+"a c #667E57",
+"b c #4F6343",
+"c c #3C4A32",
+"d c #2E3827",
+"e c #748D63",
+"f c #5F7651",
+"g c #45573A",
+"h c #35412E",
+"i c #2D3527",
+"j c #31342E",
+"k c #444B3D",
+"l c #5B6B4E",
+"m c #526545",
+"n c #3C4B33",
+"o c #313A2B",
+"p c #2D3328",
+"q c #222321",
+"r c #232422",
+"s c #242623",
+"t c #31352E",
+"u c #3E4638",
+"v c #3D4835",
+"w c #3A4731",
+"x c #323E2B",
+"y c #2A3225",
+"z c #282E24",
+"A c #242523",
+"B c #262725",
+"C c #30342D",
+"D c #3A4136",
+"E c #384033",
+"F c #333B2D",
+"G c #283124",
+"H c #20261D",
+"I c #1D211B",
+"J c #262825",
+"K c #2B2D2A",
+"L c #31352F",
+"M c #363B34",
+"N c #323731",
+"O c #2A2D28",
+"P c #232720",
+"Q c #1E221B",
+"R c #1A1D17",
+"S c #121410",
+"T c #272A26",
+"U c #30352D",
+"V c #383F33",
+"W c #3D4637",
+"X c #3E4838",
+"Y c #3A4535",
+"Z c #354030",
+"` c #2F3729",
+" . c #252B21",
+".. c #171B15",
+"+. c #0D0F0B",
+"@. c #222421",
+"#. c #262B23",
+"$. c #323B2C",
+"%. c #3F4C36",
+"&. c #46563C",
+"*. c #4A5D3F",
+"=. c #485C3D",
+"-. c #435239",
+";. c #343F2D",
+">. c #1E241A",
+",. c #151813",
+"'. c #262D22",
+"). c #35412D",
+"!. c #435439",
+"~. c #48593C",
+"{. c #46583A",
+"]. c #46593A",
+"^. c #4A5E3C",
+"/. c #4B5E3E",
+"(. c #3F4E35",
+"_. c #262D20",
+":. c #11150F",
+"<. c #0A1008",
+"[. c #252724",
+"}. c #272826",
+"|. c #242823",
+"1. c #283024",
+"2. c #39472F",
+"3. c #435538",
+"4. c #3D4F33",
+"5. c #324029",
+"6. c #303E27",
+"7. c #3C4D31",
+"8. c #485C3B",
+"9. c #2B3425",
+"0. c #181C15",
+"a. c #283321",
+"b. c #262F22",
+"c. c #262E22",
+"d. c #292929",
+"e. c #282926",
+"f. c #2A2C29",
+"g. c #252923",
+"h. c #2A3325",
+"i. c #3B4B31",
+"j. c #415436",
+"k. c #34432B",
+"l. c #222C1C",
+"m. c #1F291A",
+"n. c #303F29",
+"o. c #2D3727",
+"p. c #191E17",
+"q. c #171C14",
+"r. c #3F5134",
+"s. c #516843",
+"t. c #273022",
+"u. c #292B27",
+"v. c #2A2D29",
+"w. c #252A24",
+"x. c #2C3527",
+"y. c #3D4D33",
+"z. c #37462E",
+"A. c #273120",
+"B. c #263120",
+"C. c #36452D",
+"D. c #45593A",
+"E. c #2D3827",
+"F. c #181D16",
+"G. c #171D15",
+"H. c #21291C",
+"I. c #4F6541",
+"J. c #292D25",
+"K. c #2D2F2C",
+"L. c #2E322B",
+"M. c #2D322B",
+"N. c #292E26",
+"O. c #2D3828",
+"P. c #3C4D33",
+"Q. c #455939",
+"R. c #415336",
+"S. c #394A2F",
+"T. c #495D3D",
+"U. c #405135",
+"V. c #283222",
+"W. c #161A14",
+"X. c #191F15",
+"Y. c #222B1E",
+"Z. c #262F21",
+"`. c #353A31",
+" + c #3F4738",
+".+ c #384133",
+"++ c #2F362A",
+"@+ c #2E3828",
+"#+ c #485C3C",
+"$+ c #475A3B",
+"%+ c #485B3D",
+"&+ c #4A5E3F",
+"*+ c #37432D",
+"=+ c #20261B",
+"-+ c #141713",
+";+ c #242C1F",
+">+ c #394033",
+",+ c #47533E",
+"'+ c #414D39",
+")+ c #333C2D",
+"!+ c #2D3427",
+"~+ c #404E37",
+"{+ c #47573D",
+"]+ c #46553D",
+"^+ c #44533B",
+"/+ c #3C4835",
+"(+ c #2A3125",
+"_+ c #181B16",
+":+ c #171815",
+"<+ c #252723",
+"[+ c #31372D",
+"}+ c #46523E",
+"|+ c #5F7351",
+"1+ c #4B5B40",
+"2+ c #1E231B",
+"3+ c #262B22",
+"4+ c #394233",
+"5+ c #3E4738",
+"6+ c #3C4436",
+"7+ c #394234",
+"8+ c #363D31",
+"9+ c #2C3129",
+"0+ c #20231E",
+"a+ c #191A17",
+"b+ c #718960",
+"c+ c #627854",
+"d+ c #4E6043",
+"e+ c #373C35",
+"f+ c #373B34",
+"g+ c #353A33",
+"h+ c #2F332D",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + ",
+" @ # $ % ",
+" & * = - ; ",
+" > , ' ) ",
+" ! ~ % { ",
+" ] ^ / ( _ ",
+" : < [ } ",
+" | 1 2 3 4 ",
+" 5 6 7 8 9 ",
+" 0 a b c d ",
+" e f g h i ",
+" j k l m n o p ",
+" q r s t u v w x y z ",
+" q A B C D E F G H I ",
+" r J K L M N O P Q R S ",
+" r A T U V W X Y Z ` ...+. ",
+" q @.#.$.%.&.2 *.=.-.;.>.,. ",
+" A r @.'.).!.~.{.].^./.(._.:.<. ",
+" r [.}.|.1.2.3.4.5.6.7.8.7 9.0.a. ",
+" b.c.d.r e.f.g.h.i.j.k.l.m.n.- 7 o.p.q.r. ",
+" s.t.t.q q A u.v.w.x.y.- z.A.B.C.D.3.E.F.G.H.I. ",
+" s.t.t.q q J.K.L.M.N.O.P.Q.R.S.i.- T.U.V.W.X.Y.Z.s. ",
+" s.t. q t. `. +.+++@+; g #+$+%+&+{.*+=+-+ ;+Z.t.s. ",
+" s.s.s.t. q r >+,+'+)+!+;.~+&.{+]+^+/+(+_+:+ Z.t.t.s.s. ",
+" t.t.t.t. <+[+}+|+1+{ 2+3+4+5+6+7+8+9+0+a+ t.t.t.t. ",
+" b+c+d+ e+f+g+h+ "};
diff --git a/pics/parashoot/can0010.xpm b/pics/parashoot/can0010.xpm
new file mode 100644
index 0000000..6a58edf
--- a/dev/null
+++ b/pics/parashoot/can0010.xpm
@@ -0,0 +1,265 @@
+/* XPM */
+static char * can0010_xpm[] = {
+"40 32 230 2",
+" c None",
+". c #677F57",
+"+ c #556B48",
+"@ c #6D885D",
+"# c #607852",
+"$ c #516644",
+"% c #435437",
+"& c #647D55",
+"* c #576E49",
+"= c #485C3C",
+"- c #3D4D33",
+"; c #688158",
+"> c #5B734D",
+", c #4C6140",
+"' c #3E5034",
+") c #34432C",
+"! c #617952",
+"~ c #526845",
+"{ c #425337",
+"] c #35422D",
+"^ c #667E56",
+"/ c #586E4A",
+"( c #475A3C",
+"_ c #38462F",
+": c #2E3A27",
+"< c #617853",
+"[ c #4E6243",
+"} c #3C4C34",
+"| c #303C29",
+"1 c #2A3525",
+"2 c #6E875E",
+"3 c #5D734F",
+"4 c #47583C",
+"5 c #34412C",
+"6 c #2A3425",
+"7 c #69825A",
+"8 c #556A48",
+"9 c #3F4E35",
+"0 c #2E3927",
+"a c #273022",
+"b c #748E63",
+"c c #627A54",
+"d c #495B3D",
+"e c #38452F",
+"f c #293324",
+"g c #738C62",
+"h c #556C49",
+"i c #323C2B",
+"j c #222321",
+"k c #343731",
+"l c #4C5543",
+"m c #647955",
+"n c #485A3C",
+"o c #36422E",
+"p c #30372A",
+"q c #2B3126",
+"r c #232422",
+"s c #252624",
+"t c #3C4337",
+"u c #3F4939",
+"v c #3C4832",
+"w c #394831",
+"x c #2E3827",
+"y c #2B3028",
+"z c #262725",
+"A c #3A4136",
+"B c #394035",
+"C c #374031",
+"D c #2F3929",
+"E c #232B1F",
+"F c #20251D",
+"G c #2B2D2A",
+"H c #2E312D",
+"I c #363B33",
+"J c #363B34",
+"K c #2C2F2B",
+"L c #222520",
+"M c #1C2019",
+"N c #191B16",
+"O c #131511",
+"P c #252724",
+"Q c #2D322B",
+"R c #373E32",
+"S c #3D4537",
+"T c #3B4636",
+"U c #353E30",
+"V c #2D3528",
+"W c #242920",
+"X c #171A15",
+"Y c #0C0E0B",
+"Z c #212220",
+"` c #232620",
+" . c #2E3729",
+".. c #3E4A35",
+"+. c #46563C",
+"@. c #495A3E",
+"#. c #4A5D3F",
+"$. c #495D3E",
+"%. c #44543A",
+"&. c #36412F",
+"*. c #1F261C",
+"=. c #141612",
+"-. c #242523",
+";. c #222421",
+">. c #232920",
+",. c #323E2A",
+"'. c #435438",
+"). c #46583A",
+"!. c #475A3B",
+"~. c #4B603D",
+"{. c #4D6140",
+"]. c #435339",
+"^. c #283022",
+"/. c #10140E",
+"(. c #090E07",
+"_. c #292B28",
+":. c #252824",
+"<. c #272E23",
+"[. c #38462E",
+"}. c #445638",
+"|. c #324029",
+"1. c #303E27",
+"2. c #3C4D31",
+"3. c #4A5E3C",
+"4. c #46573A",
+"5. c #2D3627",
+"6. c #171C15",
+"7. c #25301E",
+"8. c #262E22",
+"9. c #292928",
+"0. c #292A27",
+"a. c #252923",
+"b. c #2A3325",
+"c. c #3B4B31",
+"d. c #425537",
+"e. c #35442C",
+"f. c #222C1C",
+"g. c #1E2719",
+"h. c #2E3D28",
+"i. c #435638",
+"j. c #445539",
+"k. c #2E3828",
+"l. c #191E17",
+"m. c #151B13",
+"n. c #3C4E32",
+"o. c #516843",
+"p. c #292B27",
+"q. c #292D28",
+"r. c #252A24",
+"s. c #3D4E33",
+"t. c #37462E",
+"u. c #273120",
+"v. c #252F1F",
+"w. c #34432B",
+"x. c #445839",
+"y. c #435538",
+"z. c #2E3928",
+"A. c #191D17",
+"B. c #171C14",
+"C. c #20271C",
+"D. c #4E6440",
+"E. c #2B2F26",
+"F. c #30322E",
+"G. c #32372E",
+"H. c #30352C",
+"I. c #2A3027",
+"J. c #2E3929",
+"K. c #3D4E34",
+"L. c #465A3A",
+"M. c #415436",
+"N. c #39492F",
+"O. c #3A4A30",
+"P. c #4A5E3D",
+"Q. c #425336",
+"R. c #2A3424",
+"S. c #171A14",
+"T. c #181E15",
+"U. c #222A1D",
+"V. c #262F21",
+"W. c #3C4336",
+"X. c #48533F",
+"Y. c #3C4636",
+"Z. c #2F372A",
+"`. c #3A4931",
+" + c #46593B",
+".+ c #495D3D",
+"++ c #485B3D",
+"@+ c #4B603F",
+"#+ c #485B3C",
+"$+ c #38452E",
+"%+ c #20271B",
+"&+ c #242D1F",
+"*+ c #252723",
+"=+ c #45503D",
+"-+ c #4F5E45",
+";+ c #414E39",
+">+ c #30382A",
+",+ c #2B3225",
+"'+ c #35402E",
+")+ c #414F38",
+"!+ c #47573D",
+"~+ c #47563D",
+"{+ c #46563D",
+"]+ c #3E4B35",
+"^+ c #293024",
+"/+ c #141713",
+"(+ c #151613",
+"_+ c #272925",
+":+ c #3A4235",
+"<+ c #536348",
+"[+ c #5E7350",
+"}+ c #45543B",
+"|+ c #2C3725",
+"1+ c #1A1E18",
+"2+ c #262B23",
+"3+ c #3A4234",
+"4+ c #3F4739",
+"5+ c #3B4436",
+"6+ c #394234",
+"7+ c #353D31",
+"8+ c #2C3129",
+"9+ c #1D201B",
+"0+ c #151614",
+"a+ c #6E865E",
+"b+ c #5D724F",
+"c+ c #363933",
+"d+ c #373B35",
+"e+ c #373B34",
+"f+ c #343932",
+"g+ c #2D302A",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + ",
+" @ # $ % ",
+" & * = - ",
+" ; > , ' ) ",
+" ! ~ { ] ",
+" ^ / ( _ : ",
+" < [ } | 1 ",
+" 2 3 4 5 6 ",
+" 7 8 9 0 a ",
+" b c d e f ",
+" g h - i a ",
+" j k l m n o p q ",
+" j j r s t u v w x q y ",
+" j r z z A B C D E F ",
+" r s G H I J K L M N O ",
+" r r P Q R S u T U V W X Y ",
+" j Z ` ...+.@.#.$.%.&.*.=. ",
+" -.-.;.>.,.'.n ).!.~.{.].^./.(. ",
+" r z _.:.<.[.}.' |.1.2.3.4.5.6.7. ",
+" a 8.9.r 0.G a.b.c.d.e.f.g.h.i.j.k.l.m.n. ",
+" o.a a j j p.q.r.5.s.i.t.u.v.w.x.y.z.A.B.C.D. ",
+" o.a a j j E.F.G.H.I.J.K.L.M.N.O.i.P.Q.R.S.T.U.V.o. ",
+" o.a j a W.X.Y.Z.k.`. +.+!.++@+#+$+%+O &+V.a o. ",
+" o.o.o.a j *+ =+-+;+>+,+'+)+!+!+~+{+]+^+/+(+ a a a o.o. ",
+" a a a a _+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+ a a a a ",
+" a+b+ c+d+e+f+g+ "};
diff --git a/pics/parashoot/can0011.xpm b/pics/parashoot/can0011.xpm
new file mode 100644
index 0000000..e21d72a
--- a/dev/null
+++ b/pics/parashoot/can0011.xpm
@@ -0,0 +1,271 @@
+/* XPM */
+static char * can0011_xpm[] = {
+"40 32 236 2",
+" c None",
+". c #728C61",
+"+ c #627A53",
+"@ c #688259",
+"# c #59704B",
+"$ c #4A5D3D",
+"% c #678158",
+"& c #5B734D",
+"* c #4D6240",
+"= c #415236",
+"- c #698259",
+"; c #5C744D",
+"> c #4E6341",
+", c #405336",
+"' c #36452D",
+") c #5E764F",
+"! c #506543",
+"~ c #35432D",
+"{ c #627953",
+"] c #526745",
+"^ c #425338",
+"/ c #35422C",
+"( c #2D3826",
+"_ c #6D865D",
+": c #5A704D",
+"< c #44563A",
+"[ c #34412D",
+"} c #2C3726",
+"| c #738E63",
+"1 c #657D56",
+"2 c #4F6243",
+"3 c #38462F",
+"4 c #2B3525",
+"5 c #273022",
+"6 c #799467",
+"7 c #6C865D",
+"8 c #556947",
+"9 c #415136",
+"0 c #2F3A28",
+"a c #262F21",
+"b c #789166",
+"c c #5C744F",
+"d c #415336",
+"e c #36422E",
+"f c #283123",
+"g c #222321",
+"h c #232422",
+"i c #272825",
+"j c #2F312D",
+"k c #474E3F",
+"l c #647955",
+"m c #4A5D3E",
+"n c #394630",
+"o c #31392A",
+"p c #272F22",
+"q c #242524",
+"r c #242523",
+"s c #46503E",
+"t c #3D4737",
+"u c #3B4731",
+"v c #3B4B32",
+"w c #2F3928",
+"x c #2E3429",
+"y c #272826",
+"z c #2C2D2C",
+"A c #282927",
+"B c #3F483B",
+"C c #343930",
+"D c #384331",
+"E c #2E3927",
+"F c #242C1F",
+"G c #282D24",
+"H c #282A27",
+"I c #323630",
+"J c #343731",
+"K c #393E36",
+"L c #323631",
+"M c #252724",
+"N c #1A1D18",
+"O c #171A14",
+"P c #181B16",
+"Q c #212220",
+"R c #20221E",
+"S c #282E25",
+"T c #374131",
+"U c #404B39",
+"V c #424D3B",
+"W c #3F4B39",
+"X c #374032",
+"Y c #2A3026",
+"Z c #1F221B",
+"` c #131512",
+" . c #252624",
+".. c #222421",
+"+. c #21261F",
+"@. c #2E3827",
+"#. c #404F36",
+"$. c #495B3E",
+"%. c #4B5E3F",
+"&. c #4B5F40",
+"*. c #4A5E3F",
+"=. c #45543B",
+"-. c #343E2E",
+";. c #1D221A",
+">. c #141613",
+",. c #2A2C29",
+"'. c #252824",
+"). c #272D23",
+"!. c #37452D",
+"~. c #455839",
+"{. c #475A3B",
+"]. c #445638",
+"^. c #46593A",
+"/. c #4C613E",
+"(. c #4D6140",
+"_. c #415038",
+":. c #252D21",
+"<. c #0F120D",
+"[. c #2B2D29",
+"}. c #2B2E2A",
+"|. c #242822",
+"1. c #3E4F33",
+"2. c #445738",
+"3. c #37472E",
+"4. c #2B3723",
+"5. c #2E3C26",
+"6. c #3F5133",
+"7. c #4D623F",
+"8. c #46573A",
+"9. c #293123",
+"0. c #131810",
+"a. c #2A3722",
+"b. c #262E23",
+"c. c #2A2B2A",
+"d. c #262724",
+"e. c #2B2E29",
+"f. c #282C27",
+"g. c #242922",
+"h. c #313D2A",
+"i. c #435738",
+"j. c #415436",
+"k. c #2B3724",
+"l. c #192015",
+"m. c #1D2719",
+"n. c #35452D",
+"o. c #485C3C",
+"p. c #435339",
+"q. c #282F23",
+"r. c #131711",
+"s. c #161C13",
+"t. c #435737",
+"u. c #516843",
+"v. c #282A25",
+"w. c #3A4134",
+"x. c #373D32",
+"y. c #2D322A",
+"z. c #272F24",
+"A. c #36442E",
+"B. c #465A3A",
+"C. c #435638",
+"D. c #313F29",
+"E. c #232C1D",
+"F. c #283422",
+"G. c #3C4E32",
+"H. c #495D3D",
+"I. c #3F4F35",
+"J. c #232B20",
+"K. c #111410",
+"L. c #171D14",
+"M. c #222A1E",
+"N. c #4F6641",
+"O. c #232421",
+"P. c #2A2D27",
+"Q. c #46513C",
+"R. c #4E5C45",
+"S. c #46523E",
+"T. c #323A2D",
+"U. c #2A3225",
+"V. c #495E3C",
+"W. c #3B4C31",
+"X. c #3F5135",
+"Y. c #495D3C",
+"Z. c #4B603E",
+"`. c #3B4932",
+" + c #1E241B",
+".+ c #121411",
+"++ c #1C2218",
+"@+ c #242D20",
+"#+ c #3C4A34",
+"$+ c #68805A",
+"%+ c #586A4C",
+"&+ c #49583F",
+"*+ c #313A2B",
+"=+ c #293024",
+"-+ c #333E2C",
+";+ c #4A5E3E",
+">+ c #4B603F",
+",+ c #4C613F",
+"'+ c #435537",
+")+ c #2C3624",
+"!+ c #151912",
+"~+ c #131511",
+"{+ c #292D27",
+"]+ c #404A39",
+"^+ c #6F875E",
+"/+ c #506044",
+"(+ c #384231",
+"_+ c #2F342C",
+":+ c #30372C",
+"<+ c #3C4535",
+"[+ c #44503C",
+"}+ c #46543D",
+"|+ c #46553D",
+"1+ c #46563D",
+"2+ c #435139",
+"3+ c #313A2A",
+"4+ c #191D16",
+"5+ c #10110E",
+"6+ c #161715",
+"7+ c #3B4435",
+"8+ c #4C5A42",
+"9+ c #414E39",
+"0+ c #1B1E1A",
+"a+ c #2C2F2A",
+"b+ c #3A3F37",
+"c+ c #3B4237",
+"d+ c #363D32",
+"e+ c #343B30",
+"f+ c #2D3429",
+"g+ c #1C1F19",
+"h+ c #10110F",
+"i+ c #171816",
+"j+ c #343532",
+"k+ c #343732",
+"l+ c #323530",
+"m+ c #2B2E28",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + ",
+" @ # $ ",
+" % & * = ",
+" - ; > , ' ",
+" - ) ! = ~ ",
+" { ] ^ / ( ",
+" _ : < [ } ",
+" | 1 2 3 4 5 ",
+" 6 7 8 9 0 a ",
+" b c d e f ",
+" g g h i j k l m n o p ",
+" g h q r s t u v w x ",
+" h y z A B C D E F G ",
+" h h H I J K L M N O P ",
+" g Q R S T U V W X Y Z ` ",
+" g r ...+.@.#.$.%.&.*.=.-.;.>. ",
+" h A ,.'.).!.~.{.].^./.(._.:.<. ",
+" r [.}.|.4 1.2.3.4.5.6.7.8.9.0.a. ",
+" 5 b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t. ",
+" u.5 5 h v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N. ",
+" u.5 5 O.P.Q.R.S.T.U.A.{.V.j.W.X.Y.Z.`. +.+++@+a u. ",
+" u.5 '.#+$+%+&+*+=+-+^ %.;+m >+,+'+)+!+~+ a 5 5 u. ",
+" u.u.u.5 {+]+^+/+(+_+ :+<+[+}+|+1+2+3+4+5+6+ 5 5 5 u.u. ",
+" 5 5 5 5 7+8+9+ 0+a+b+c+d+e+f+g+h+i+ 5 5 5 5 ",
+" j+k+l+m+ "};
diff --git a/pics/parashoot/can0012.xpm b/pics/parashoot/can0012.xpm
new file mode 100644
index 0000000..4d715a1
--- a/dev/null
+++ b/pics/parashoot/can0012.xpm
@@ -0,0 +1,265 @@
+/* XPM */
+static char * can0012_xpm[] = {
+"40 32 230 2",
+" c None",
+". c #799467",
+"+ c #688158",
+"@ c #556B46",
+"# c #445638",
+"$ c #718B61",
+"% c #688259",
+"& c #58704A",
+"* c #4C613F",
+"= c #3D4D33",
+"- c #668056",
+"; c #4B603E",
+"> c #3C4D32",
+", c #323F2B",
+"' c #678057",
+") c #5A714B",
+"! c #4A5F3E",
+"~ c #3B4C32",
+"{ c #323F2A",
+"] c #698159",
+"^ c #5A714C",
+"/ c #4B5E3F",
+"( c #3B4A31",
+"_ c #2F3B28",
+": c #738D62",
+"< c #627953",
+"[ c #4C5F40",
+"} c #394831",
+"| c #2E3A28",
+"1 c #2A3424",
+"2 c #779266",
+"3 c #6B845B",
+"4 c #566B49",
+"5 c #3D4C33",
+"6 c #2D3827",
+"7 c #283123",
+"8 c #7B9669",
+"9 c #708A60",
+"0 c #5A6F4B",
+"a c #455639",
+"b c #313D2A",
+"c c #273022",
+"d c #222321",
+"e c #799367",
+"f c #5F7751",
+"g c #435537",
+"h c #38452F",
+"i c #293223",
+"j c #232C1F",
+"k c #232422",
+"l c #262725",
+"m c #2E302C",
+"n c #454C3E",
+"o c #647955",
+"p c #3A4831",
+"q c #313A2A",
+"r c #262E21",
+"s c #252625",
+"t c #242523",
+"u c #4A5642",
+"v c #3C4536",
+"w c #3B4731",
+"x c #3C4C33",
+"y c #2F3928",
+"z c #2E342A",
+"A c #292A28",
+"B c #414A3C",
+"C c #31362E",
+"D c #394431",
+"E c #2E3927",
+"F c #242C1F",
+"G c #2B3027",
+"H c #292C28",
+"I c #353A32",
+"J c #363A33",
+"K c #393E36",
+"L c #313430",
+"M c #222421",
+"N c #171A15",
+"O c #161A13",
+"P c #1B1E18",
+"Q c #20211F",
+"R c #1E211C",
+"S c #2B3226",
+"T c #3C4835",
+"U c #43503B",
+"V c #434F3C",
+"W c #3F4B39",
+"X c #353D30",
+"Y c #252A21",
+"Z c #191B16",
+"` c #0E0F0D",
+" . c #272826",
+".. c #23291F",
+"+. c #35422C",
+"@. c #47593B",
+"#. c #4C6040",
+"$. c #4A5D3F",
+"%. c #425039",
+"&. c #2D3428",
+"*. c #141713",
+"=. c #131513",
+"-. c #252624",
+";. c #2F312D",
+">. c #2D2F2C",
+",. c #242722",
+"'. c #2C3525",
+"). c #415335",
+"!. c #495D3C",
+"~. c #445739",
+"{. c #425436",
+"]. c #475B3B",
+"^. c #4E6440",
+"/. c #3A4733",
+"(. c #1A1E18",
+"_. c #070805",
+":. c #2E312C",
+"<. c #272A26",
+"[. c #20251D",
+"}. c #35432C",
+"|. c #485D3B",
+"1. c #2C3824",
+"2. c #242F1E",
+"3. c #324129",
+"4. c #485C3A",
+"5. c #506642",
+"6. c #3F4E35",
+"7. c #1B1F17",
+"8. c #0D120B",
+"9. c #38492E",
+"0. c #272F23",
+"a. c #2B2C2A",
+"b. c #2A2D27",
+"c. c #2D312B",
+"d. c #242723",
+"e. c #252E22",
+"f. c #3F5134",
+"g. c #4A5F3D",
+"h. c #38482F",
+"i. c #1C2418",
+"j. c #121810",
+"k. c #25311F",
+"l. c #435638",
+"m. c #4D6140",
+"n. c #3C4833",
+"o. c #0F130C",
+"p. c #1C2417",
+"q. c #4D633F",
+"r. c #516843",
+"s. c #292C27",
+"t. c #383E32",
+"u. c #495440",
+"v. c #3A4235",
+"w. c #272D25",
+"x. c #2C3726",
+"y. c #3D4E32",
+"z. c #283321",
+"A. c #212A1C",
+"B. c #314029",
+"C. c #475C3B",
+"D. c #4B5E3E",
+"E. c #34402D",
+"F. c #141813",
+"G. c #0E100E",
+"H. c #1D2519",
+"I. c #252E20",
+"J. c #282B26",
+"K. c #424C3B",
+"L. c #5F7352",
+"M. c #546449",
+"N. c #3B4734",
+"O. c #282F24",
+"P. c #2D3726",
+"Q. c #425437",
+"R. c #4D623F",
+"S. c #485D3C",
+"T. c #405135",
+"U. c #3D4F33",
+"V. c #45593A",
+"W. c #485B3D",
+"X. c #2C3527",
+"Y. c #0F120E",
+"Z. c #121411",
+"`. c #222A1E",
+" + c #262F21",
+".+ c #343A30",
+"++ c #5A6E4D",
+"@+ c #657B56",
+"#+ c #46553D",
+"$+ c #333D2C",
+"%+ c #262B22",
+"&+ c #2A3126",
+"*+ c #3B4833",
+"=+ c #4A5C3E",
+"-+ c #4B5F3F",
+";+ c #4D6340",
+">+ c #39472F",
+",+ c #1C2118",
+"'+ c #0A0D09",
+")+ c #181A17",
+"!+ c #384033",
+"~+ c #56674A",
+"{+ c #607652",
+"]+ c #31392C",
+"^+ c #242822",
+"/+ c #2C2F29",
+"(+ c #363C31",
+"_+ c #404A3A",
+":+ c #44503C",
+"<+ c #45533C",
+"[+ c #46553C",
+"}+ c #3B4633",
+"|+ c #20251C",
+"1+ c #0D0F0C",
+"2+ c #111210",
+"3+ c #1D1F1C",
+"4+ c #3B4434",
+"5+ c #3C4635",
+"6+ c #262A23",
+"7+ c #222522",
+"8+ c #323431",
+"9+ c #393D36",
+"0+ c #393F35",
+"a+ c #32392F",
+"b+ c #2F372B",
+"c+ c #20241D",
+"d+ c #141513",
+"e+ c #1C1D1B",
+"f+ c #323430",
+"g+ c #2A2D28",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . + @ # ",
+" $ % & * = ",
+" - & ; > , ",
+" ' ) ! ~ { ",
+" ] ^ / ( _ ",
+" : < [ } | 1 ",
+" 2 3 4 5 6 7 ",
+" 8 9 0 a b c ",
+" d e f g h i j ",
+" d d k l m n o / p q r ",
+" d k s t u v w x y z ",
+" k t A A B C D E F G ",
+" d k d H I J K L M N O P ",
+" d d Q R S T U V W X Y Z ` ",
+" k l .M ..+.@.#.#.#.$.%.&.*.=. ",
+" d -.;.>.,.'.).!.~.{.].^.#./.(._. ",
+" d t :.<.[.}.|.).1.2.3.4.5.6.7.8.9. ",
+" c 0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.(.o.p.q. ",
+" r.c c s.t.u.v.w.x.l.; y.z.A.B.C.D.E.F.G.H.I.r. ",
+" r.c c J.K.L.M.N.O.P.Q.R.S.T.U.V.^.W.X.Y.Z.`. +c r. ",
+" r.c .+++@+#+$+%+&+*+=+#.-+#.;+g.>+,+'+)+ c c c r. ",
+" r.r.r.c !+~+{+]+^+m /+(+_+:+<+#+[+}+|+1+2+3+ c c c r.r. ",
+" c c c c 4+5+6+ 7+8+9+0+a+b+c+` d+e+ c c c c ",
+" f+g+ "};
diff --git a/pics/parashoot/can0013.xpm b/pics/parashoot/can0013.xpm
new file mode 100644
index 0000000..49b8abd
--- a/dev/null
+++ b/pics/parashoot/can0013.xpm
@@ -0,0 +1,259 @@
+/* XPM */
+static char * can0013_xpm[] = {
+"40 32 224 2",
+" c None",
+". c #7C976A",
+"+ c #7E996C",
+"@ c #6D875D",
+"# c #59704A",
+"$ c #718B61",
+"% c #688259",
+"& c #5A724C",
+"* c #506642",
+"= c #425437",
+"- c #718B60",
+"; c #647D54",
+"> c #566E48",
+", c #4B603E",
+"' c #3D4E33",
+") c #333F2B",
+"! c #6B845B",
+"~ c #617A52",
+"{ c #556B46",
+"] c #45593A",
+"^ c #394930",
+"/ c #303C29",
+"( c #738D62",
+"_ c #617952",
+": c #506543",
+"< c #425337",
+"[ c #34412C",
+"} c #2B3626",
+"| c #789267",
+"1 c #6A835B",
+"2 c #506443",
+"3 c #3A4931",
+"4 c #2E3A28",
+"5 c #2B3525",
+"6 c #222321",
+"7 c #789367",
+"8 c #688058",
+"9 c #546946",
+"0 c #3C4B32",
+"a c #2C3625",
+"b c #273022",
+"c c #232422",
+"d c #292A28",
+"e c #678058",
+"f c #475B3A",
+"g c #3E4D33",
+"h c #2E3927",
+"i c #252E20",
+"j c #262F21",
+"k c #222322",
+"l c #242523",
+"m c #2B2C29",
+"n c #41473B",
+"o c #647955",
+"p c #4D6040",
+"q c #3D4D33",
+"r c #34402C",
+"s c #252D20",
+"t c #232522",
+"u c #5D6F52",
+"v c #333B2E",
+"w c #3B4831",
+"x c #3F5035",
+"y c #303929",
+"z c #2C3228",
+"A c #2E302D",
+"B c #343533",
+"C c #2B2C2B",
+"D c #42493D",
+"E c #252724",
+"F c #3F4E35",
+"G c #2B3524",
+"H c #262E20",
+"I c #32362F",
+"J c #1E1F1D",
+"K c #1D1F1A",
+"L c #30382C",
+"M c #3D4537",
+"N c #3A4036",
+"O c #383C36",
+"P c #2C2E2C",
+"Q c #191A17",
+"R c #131711",
+"S c #1B2117",
+"T c #2A2E27",
+"U c #2A2B29",
+"V c #252624",
+"W c #1E211C",
+"X c #293223",
+"Y c #405035",
+"Z c #4A5C3E",
+"` c #495A3F",
+" . c #45543D",
+".. c #3E4938",
+"+. c #2A2F26",
+"@. c #171915",
+"#. c #0E0F0C",
+"$. c #31342F",
+"%. c #323431",
+"&. c #242623",
+"*. c #262D20",
+"=. c #3C4C31",
+"-. c #4E6441",
+";. c #4F6441",
+">. c #4D6241",
+",. c #47573D",
+"'. c #31382C",
+"). c #151714",
+"!. c #050505",
+"~. c #252824",
+"{. c #2E302C",
+"]. c #262825",
+"^. c #1E231B",
+"/. c #32402A",
+"(. c #485C3B",
+"_. c #3B4B31",
+":. c #39492F",
+"<. c #445738",
+"[. c #4E6440",
+"}. c #4E6342",
+"|. c #3E4C37",
+"1. c #1E221C",
+"2. c #070807",
+"3. c #2F332B",
+"4. c #2D312B",
+"5. c #232622",
+"6. c #262F22",
+"7. c #405335",
+"8. c #38482F",
+"9. c #1D2518",
+"0. c #181F14",
+"a. c #2D3A25",
+"b. c #405036",
+"c. c #1C2118",
+"d. c #080B05",
+"e. c #1C2518",
+"f. c #516843",
+"g. c #506145",
+"h. c #617453",
+"i. c #57674C",
+"j. c #3B4536",
+"k. c #232921",
+"l. c #2F3B28",
+"m. c #485D3C",
+"n. c #34422B",
+"o. c #161C13",
+"p. c #0E120C",
+"q. c #273321",
+"r. c #475B3B",
+"s. c #4E6241",
+"t. c #3B4733",
+"u. c #191C16",
+"v. c #0C0F0A",
+"w. c #1D2618",
+"x. c #536A45",
+"y. c #4A5A3F",
+"z. c #667C57",
+"A. c #607652",
+"B. c #414F37",
+"C. c #2E3829",
+"D. c #23291F",
+"E. c #323E2A",
+"F. c #415336",
+"G. c #2F3C27",
+"H. c #2A3623",
+"I. c #3B4C31",
+"J. c #4D6340",
+"K. c #4A5D3E",
+"L. c #0D0F0D",
+"M. c #0D110C",
+"N. c #1C201A",
+"O. c #2E3828",
+"P. c #586C4C",
+"Q. c #6B835C",
+"R. c #44533B",
+"S. c #2D3527",
+"T. c #2C302A",
+"U. c #232621",
+"V. c #2E3629",
+"W. c #475A3C",
+"X. c #4F6542",
+"Y. c #4D6240",
+"Z. c #495D3D",
+"`. c #44543B",
+" + c #20251E",
+".+ c #050605",
+"++ c #080A07",
+"@+ c #1F201E",
+"#+ c #4E5E44",
+"$+ c #303C28",
+"%+ c #2E312C",
+"&+ c #2F332C",
+"*+ c #3F4938",
+"=+ c #47553E",
+"-+ c #4A5C3F",
+";+ c #4D6141",
+">+ c #4F6442",
+",+ c #445638",
+"'+ c #2D3626",
+")+ c #0F120E",
+"!+ c #090D07",
+"~+ c #212320",
+"{+ c #292D26",
+"]+ c #222421",
+"^+ c #373936",
+"/+ c #3A3F37",
+"(+ c #3D4438",
+"_+ c #404A39",
+":+ c #44513C",
+"<+ c #404B38",
+"[+ c #282F23",
+"}+ c #0E110C",
+"|+ c #070806",
+"1+ c #191B18",
+"2+ c #212220",
+"3+ c #2F332D",
+"4+ c #262725",
+"5+ c #2C2E2A",
+"6+ c #2F342C",
+"7+ c #1D201B",
+"8+ c #0C0D0B",
+"9+ c #050703",
+"0+ c #191A18",
+"a+ c #20211F",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" + @ # ",
+" $ % & * = ",
+" - ; > , ' ) ",
+" ! ~ { ] ^ / ",
+" ( _ : < [ } ",
+" | 1 2 3 4 5 ",
+" 6 7 8 9 0 a b ",
+" 6 6 c d . e f g h i j ",
+" 6 6 k l m n o p q r s ",
+" c l t u v w x y z ",
+" 6 c k A B C D E F G H I ",
+" 6 6 6 6 J K L M N O P Q R S T ",
+" 6 U V W X Y Z ` ...+.@.#. ",
+" 6 c $.%.&.*.=., -.-.;.>.,.'.).!.~. ",
+" 6 {.].^./.(.f _.:.<.[.}.|.1.2. ",
+" 3.4.5.6.7., 8.9.0.a.f * b.c.d.e.f. ",
+" g.h.i.j.k.l.m., n.o.p.q.r.s.t.u.v.w.b f. ",
+" x.y.z.A.B.C.D.E., [.F.G.H.I.J.K.C.L.M.N.b b f. ",
+" f.O.P.Q.R.S.T.U.V.W.X.Y.Z.m.J.* `. +.+++@+b b b f. ",
+" f.b #+$+ %+ &+*+=+-+;+>+[.,+'+)+!+ ~+ b b b f. ",
+" f.f.f.b {+]+ 6 c %.^+/+(+_+:+<+[+}+|+1+2+6 b b b f.f. ",
+" b b b b 6 6 6 3+4+5+3+6+7+8+9+0+a+6 b b b b ",
+" "};
diff --git a/pics/parashoot/can0014.xpm b/pics/parashoot/can0014.xpm
new file mode 100644
index 0000000..b82cf84
--- a/dev/null
+++ b/pics/parashoot/can0014.xpm
@@ -0,0 +1,239 @@
+/* XPM */
+static char * can0014_xpm[] = {
+"40 32 204 2",
+" c None",
+". c #7C976A",
+"+ c #7E996C",
+"@ c #58704A",
+"# c #516843",
+"$ c #617A52",
+"% c #546B46",
+"& c #506742",
+"* c #4C613F",
+"= c #34412C",
+"- c #6C865C",
+"; c #627A52",
+"> c #546C46",
+", c #3C4C32",
+"' c #2B3525",
+") c #6E875D",
+"! c #5D754E",
+"~ c #546B45",
+"{ c #415337",
+"] c #303D29",
+"^ c #2C3826",
+"/ c #779166",
+"( c #5E754F",
+"_ c #45583A",
+": c #36432D",
+"< c #2F3A28",
+"[ c #283123",
+"} c #222321",
+"| c #728B61",
+"1 c #607751",
+"2 c #455739",
+"3 c #313D29",
+"4 c #273122",
+"5 c #272826",
+"6 c #353833",
+"7 c #6F895F",
+"8 c #495E3C",
+"9 c #425336",
+"0 c #33402B",
+"a c #262F21",
+"b c #222322",
+"c c #232422",
+"d c #282926",
+"e c #3C4138",
+"f c #667B57",
+"g c #4F6242",
+"h c #405135",
+"i c #38462E",
+"j c #252E20",
+"k c #232B1E",
+"l c #252625",
+"m c #667B59",
+"n c #323A2D",
+"o c #3B4831",
+"p c #415236",
+"q c #313B2A",
+"r c #2A3026",
+"s c #242C1F",
+"t c #1F1F1F",
+"u c #2D302C",
+"v c #353634",
+"w c #2D2E2D",
+"x c #3D4239",
+"y c #415136",
+"z c #2B3424",
+"A c #272F21",
+"B c #333731",
+"C c #1B1C1A",
+"D c #1C2018",
+"E c #36412F",
+"F c #414C3A",
+"G c #3D4438",
+"H c #363A35",
+"I c #2B2C2B",
+"J c #151613",
+"K c #131811",
+"L c #1F261A",
+"M c #30342D",
+"N c #343732",
+"O c #383A38",
+"P c #272726",
+"Q c #1F241B",
+"R c #39482F",
+"S c #4D623F",
+"T c #4F6442",
+"U c #4B5E40",
+"V c #47573E",
+"W c #3E4838",
+"X c #242821",
+"Y c #11120F",
+"Z c #0B0C09",
+"` c #242523",
+" . c #161A14",
+".. c #324029",
+"+. c #4A5F3D",
+"@. c #4F6541",
+"#. c #4E6441",
+"$. c #506642",
+"%. c #4E6341",
+"&. c #45533C",
+"*. c #272B24",
+"=. c #0B0B0B",
+"-. c #000000",
+";. c #2C2E2B",
+">. c #1E1F1D",
+",. c #252F1F",
+"'. c #4E6440",
+"). c #3D4E32",
+"!. c #2C3925",
+"~. c #36452D",
+"{. c #485C3B",
+"]. c #4D6142",
+"^. c #364031",
+"/. c #111110",
+"(. c #010201",
+"_. c #6D835E",
+":. c #54634B",
+"<. c #2C302A",
+"[. c #1C211A",
+"}. c #394A30",
+"|. c #46593A",
+"1. c #222C1C",
+"2. c #080A07",
+"3. c #161C12",
+"4. c #38482E",
+"5. c #4F6542",
+"6. c #35412D",
+"7. c #080907",
+"8. c #070C04",
+"9. c #263021",
+"0. c #748D63",
+"a. c #516445",
+"b. c #384430",
+"c. c #242B20",
+"d. c #222A1E",
+"e. c #475B3A",
+"f. c #455839",
+"g. c #242D1E",
+"h. c #0A0C08",
+"i. c #12180F",
+"j. c #3D4F33",
+"k. c #516743",
+"l. c #4A5D3F",
+"m. c #2C3227",
+"n. c #070806",
+"o. c #11150E",
+"p. c #273021",
+"q. c #273022",
+"r. c #5D764E",
+"s. c #799468",
+"t. c #576C4A",
+"u. c #2B3326",
+"v. c #252922",
+"w. c #252723",
+"x. c #1F231D",
+"y. c #475A3A",
+"z. c #3F5135",
+"A. c #303E28",
+"B. c #37472E",
+"C. c #4C623F",
+"D. c #415039",
+"E. c #161815",
+"F. c #030503",
+"G. c #172014",
+"H. c #2E3828",
+"I. c #627853",
+"J. c #323D2C",
+"K. c #222421",
+"L. c #2A2F25",
+"M. c #313230",
+"N. c #272825",
+"O. c #3E4C35",
+"P. c #4E6342",
+"Q. c #506743",
+"R. c #4F6642",
+"S. c #30372D",
+"T. c #040404",
+"U. c #212220",
+"V. c #222521",
+"W. c #2F322D",
+"X. c #383A36",
+"Y. c #3E4539",
+"Z. c #45533D",
+"`. c #4A5C3F",
+" + c #485B3B",
+".+ c #131612",
+"++ c #060804",
+"@+ c #333433",
+"#+ c #343634",
+"$+ c #373835",
+"%+ c #393F35",
+"&+ c #404A3A",
+"*+ c #414B3A",
+"=+ c #2A3125",
+"-+ c #10130D",
+";+ c #030302",
+">+ c #20221F",
+",+ c #252623",
+"'+ c #222221",
+")+ c #2A2C28",
+"!+ c #1A1C19",
+"~+ c #090A09",
+"{+ c #030403",
+"]+ c #1F201E",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" + + @ # ",
+" + $ % & * = ",
+" - ; > & , ' ",
+" ) ! ~ { ] ^ ",
+" + / ( _ : < [ ",
+" } . | 1 2 3 4 [ ",
+" } } } 5 6 + 7 8 9 0 a a ",
+" } } b c d e f g h i j k ",
+" } c l c m n o p q r s ",
+" } } } } t u v w x } y z A B ",
+" } } } } C D E F G H I J K L M ",
+" } N O P Q R S T U V W X Y Z ",
+" } 6 ` ...+.@.#.@.$.%.&.*.=.-. ",
+" } } ;.>.,.+.'.).!.~.{.# ].^./.(. ",
+" + _.:.<.[.}.# |.1.2.3.4.# 5.6.7.8.9.# ",
+" + 0.a.b.c.d.e.& f.g.h.i.j.k.l.m.n.o.p.q.# ",
+" r.s.t.u.v.w.x.y.# '.z.A.B.C.$.D.E.F.G.} q.q.# ",
+" # H.I.J.K.L.M.N.O.P.5.Q.@.R.# P.S.T.n. U.q.q.q.# ",
+" # q. V.q. W. X.Y.Z.`.P.$. +6..+++3. } q.q.q.# ",
+" # # # q. } } } } @+#+$+%+&+*+=+-+;+E.>+} } q.q.q.# # ",
+" q.q.q.q. } } } ,+'+)+!+~+{+ ]+} } q.q.q.q. ",
+" "};
diff --git a/pics/parashoot/can0015.xpm b/pics/parashoot/can0015.xpm
new file mode 100644
index 0000000..6189574
--- a/dev/null
+++ b/pics/parashoot/can0015.xpm
@@ -0,0 +1,228 @@
+/* XPM */
+static char * can0015_xpm[] = {
+"40 32 193 2",
+" c None",
+". c #7E996C",
+"+ c #647C54",
+"@ c #526944",
+"# c #698259",
+"$ c #5C744D",
+"% c #546B46",
+"& c #516843",
+"* c #3A4A31",
+"= c #6F885E",
+"- c #688157",
+"; c #59714A",
+"> c #516743",
+", c #435537",
+"' c #303B28",
+") c #718A60",
+"! c #607951",
+"~ c #556D47",
+"{ c #475A3B",
+"] c #36442E",
+"^ c #323F2A",
+"/ c #799468",
+"( c #637B54",
+"_ c #4A5E3D",
+": c #3B4A32",
+"< c #34412C",
+"[ c #293223",
+"} c #222321",
+"| c #7D986B",
+"1 c #748E63",
+"2 c #657D56",
+"3 c #34422C",
+"4 c #283122",
+"5 c #262725",
+"6 c #353833",
+"7 c #728C61",
+"8 c #4A5F3D",
+"9 c #435437",
+"0 c #36442D",
+"a c #262F21",
+"b c #232421",
+"c c #272825",
+"d c #3A3F37",
+"e c #677C57",
+"f c #4F6343",
+"g c #415236",
+"h c #3A4930",
+"i c #252E20",
+"j c #232C1F",
+"k c #232522",
+"l c #272826",
+"m c #232422",
+"n c #6A805C",
+"o c #323A2D",
+"p c #3B4831",
+"q c #425336",
+"r c #313C2A",
+"s c #292F25",
+"t c #242C1F",
+"u c #1A1A1A",
+"v c #2C2F2B",
+"w c #353634",
+"x c #2E2E2E",
+"y c #3A3E37",
+"z c #212220",
+"A c #2A3424",
+"B c #273022",
+"C c #343731",
+"D c #1A1C19",
+"E c #21281D",
+"F c #3B4933",
+"G c #434F3C",
+"H c #3E4539",
+"I c #363A35",
+"J c #2B2C2A",
+"K c #131411",
+"L c #141811",
+"M c #20281B",
+"N c #31352E",
+"O c #343533",
+"P c #232A1E",
+"Q c #3D4E32",
+"R c #4E6440",
+"S c #4F6542",
+"T c #4C5F40",
+"U c #48583E",
+"V c #3E4738",
+"W c #22251F",
+"X c #0F110E",
+"Y c #0B0D09",
+"Z c #343732",
+"` c #20211F",
+" . c #1B2017",
+".. c #39492F",
+"+. c #4C613E",
+"@. c #4F6541",
+"#. c #4D6340",
+"$. c #506642",
+"%. c #4E6341",
+"&. c #44513B",
+"*. c #232721",
+"=. c #090909",
+"-. c #2D2F2B",
+";. c #1A1D19",
+">. c #2E3B27",
+",. c #4C623F",
+"'. c #35442C",
+"). c #283321",
+"!. c #36452C",
+"~. c #495E3C",
+"{. c #4C6041",
+"]. c #32392E",
+"^. c #0E0E0E",
+"/. c #010201",
+"(. c #799368",
+"_. c #5F7154",
+":. c #272B25",
+"<. c #405235",
+"[. c #506742",
+"}. c #415335",
+"|. c #1B2216",
+"1. c #070906",
+"2. c #181F14",
+"3. c #3C4D31",
+"4. c #4F6442",
+"5. c #2C3626",
+"6. c #070806",
+"7. c #080E05",
+"8. c #263021",
+"9. c #687F58",
+"0. c #273122",
+"a. c #20261C",
+"b. c #415436",
+"c. c #212A1C",
+"d. c #0A0D09",
+"e. c #1A2216",
+"f. c #425537",
+"g. c #506743",
+"h. c #47583C",
+"i. c #252A21",
+"j. c #131711",
+"k. c #273021",
+"l. c #657D55",
+"m. c #70895F",
+"n. c #435438",
+"o. c #252A22",
+"p. c #242622",
+"q. c #212120",
+"r. c #272E23",
+"s. c #475B3B",
+"t. c #3F5135",
+"u. c #35452C",
+"v. c #3F5134",
+"w. c #3A4633",
+"x. c #121411",
+"y. c #050904",
+"z. c #192016",
+"A. c #323E2C",
+"B. c #48593D",
+"C. c #282D24",
+"D. c #2A2F26",
+"E. c #2E2F2D",
+"F. c #2C2F29",
+"G. c #404D37",
+"H. c #4F6642",
+"I. c #495B3E",
+"J. c #272C25",
+"K. c #040504",
+"L. c #070706",
+"M. c #2F322D",
+"N. c #383A36",
+"O. c #3D4539",
+"P. c #44503D",
+"Q. c #4A5B3F",
+"R. c #4E6342",
+"S. c #445638",
+"T. c #2E3828",
+"U. c #0E0F0D",
+"V. c #070A05",
+"W. c #182015",
+"X. c #323331",
+"Y. c #363734",
+"Z. c #373C33",
+"`. c #3F493A",
+" + c #21271E",
+".+ c #090B08",
+"++ c #020201",
+"@+ c #1C1E1A",
+"#+ c #1B1C1B",
+"$+ c #282B27",
+"%+ c #121312",
+"&+ c #050605",
+"*+ c #030401",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" . + @ ",
+" # $ % & * ",
+" = - ; > , ' ",
+" ) ! ~ { ] ^ ",
+" / ( _ : < [ ",
+" } | 1 2 { 3 4 [ ",
+" } } } 5 6 . 7 8 9 0 a a ",
+" } b c d e f g h i j ",
+" } k l m n o p q r s t ",
+" } } } } u v w x y z g A B C ",
+" } } l m D E F G H I J K L M N ",
+" } 6 O } P Q R S T U V W X Y ",
+" } Z ` ...+.@.#.S $.%.&.*.=. ",
+" } } -.;.>.,.+.'.).!.~.& {.].^./. ",
+" . (._.:.E <.[.}.|.1.2.3.& 4.5.6.7.8.& ",
+" . 9.: 0.a.[ ~.[.b.c.d.e.f.g.h.i.1.j.k.B & ",
+" l.m.n.o.p.q.r.s.& ,.t.u.v.R %.w.x.y.z.} B B & ",
+" & A.B.C.} D.E.F.G.T 4.$.H.[.g.I.J.K.L. } B B B & ",
+" & B } B M. N.O.P.Q.R.@.S.T.U.V.W. } B B B & ",
+" & & & B } } } m X.w Y.Z.`.V +.+++@+} } } B B B & & ",
+" B B B B } } } p.#+$+%+&+*+ z } } B B B B ",
+" "};
diff --git a/pics/parashoot/can0016.xpm b/pics/parashoot/can0016.xpm
new file mode 100644
index 0000000..b4cf7a3
--- a/dev/null
+++ b/pics/parashoot/can0016.xpm
@@ -0,0 +1,170 @@
+/* XPM */
+static char * can0016_xpm[] = {
+"40 32 135 2",
+" c None",
+". c #7E996C",
+"+ c #516843",
+"@ c #273022",
+"# c #718A60",
+"$ c #627B52",
+"% c #506642",
+"& c #303C28",
+"* c #222321",
+"= c #576F49",
+"- c #2A3425",
+"; c #303D29",
+"> c #4F6542",
+", c #475B3A",
+"' c #2C3626",
+") c #353833",
+"! c #4D643F",
+"~ c #445638",
+"{ c #697E59",
+"] c #526645",
+"^ c #262F21",
+"/ c #252E20",
+"( c #353535",
+"_ c #343534",
+": c #7A9469",
+"< c #313A2C",
+"[ c #3B4831",
+"} c #333E2C",
+"| c #242C1F",
+"1 c #1A1A1A",
+"2 c #0C0C0C",
+"3 c #2A2E28",
+"4 c #363735",
+"5 c #323232",
+"6 c #2C2C2C",
+"7 c #1E1E1D",
+"8 c #293223",
+"9 c #283022",
+"0 c #3A3B3A",
+"a c #232322",
+"b c #171B14",
+"c c #3D4D32",
+"d c #506742",
+"e c #4A5C40",
+"f c #40493A",
+"g c #373A36",
+"h c #292A29",
+"i c #0C0D0A",
+"j c #171D14",
+"k c #252D1F",
+"l c #191919",
+"m c #11160E",
+"n c #3D4E32",
+"o c #4D633F",
+"p c #4A5B3F",
+"q c #3C4437",
+"r c #181A17",
+"s c #090A08",
+"t c #060606",
+"u c #405235",
+"v c #4C613F",
+"w c #4B603E",
+"x c #4F6442",
+"y c #3E4738",
+"z c #121212",
+"A c #000000",
+"B c #3F463A",
+"C c #141514",
+"D c #283422",
+"E c #3C4D31",
+"F c #0A0C08",
+"G c #182015",
+"H c #3B4B30",
+"I c #495A40",
+"J c #202020",
+"K c #3E4E33",
+"L c #161914",
+"M c #435637",
+"N c #4D6340",
+"O c #242E1E",
+"P c #020202",
+"Q c #242F1E",
+"R c #4C5F40",
+"S c #090909",
+"T c #050803",
+"U c #263021",
+"V c #455939",
+"W c #272F23",
+"X c #2F2F2F",
+"Y c #171817",
+"Z c #455839",
+"` c #3A4A30",
+" . c #131910",
+".. c #0C0F0A",
+"+. c #3E5034",
+"@. c #384132",
+"#. c #080808",
+"$. c #273021",
+"%. c #262625",
+"&. c #3D4B34",
+"*. c #506743",
+"=. c #4C623F",
+"-. c #46563D",
+";. c #1A1C19",
+">. c #010201",
+",. c #12200D",
+"'. c #2B3026",
+"). c #333432",
+"!. c #383A36",
+"~. c #4B5D40",
+"{. c #4E6342",
+"]. c #2F352C",
+"^. c #040404",
+"/. c #080B06",
+"(. c #2F322D",
+"_. c #353635",
+":. c #393B37",
+"<. c #434E3C",
+"[. c #4C5F41",
+"}. c #506542",
+"|. c #435537",
+"1. c #2D3727",
+"2. c #0E0F0D",
+"3. c #050703",
+"4. c #1F261C",
+"5. c #323431",
+"6. c #313130",
+"7. c #2A2A29",
+"8. c #373B35",
+"9. c #181B17",
+"0. c #040503",
+"a. c #010100",
+"b. c #091006",
+"c. c #060906",
+"d. c #0B0B0B",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" . . + + ",
+" . . + + + + @ ",
+" # $ + + % & @ ",
+" * . . = + + - ; @ ",
+" * * . . . > , @ ' @ ",
+" * * * * ) . . ! ~ ~ @ @ @ ",
+" * * * * * ) { ] ~ ~ ^ / / ",
+" * * * * ( _ * : < [ ~ } | | ",
+" * * * * 1 2 3 4 5 6 7 ~ 8 9 ) ",
+" * ) 0 a b c d e f g h i j k ) ",
+" * ) l m n o + + > p q r s ",
+" * * ) t u + + v w + + x y z A ",
+" . . . B C D + + E F G H + + I J A ",
+" . . K @ @ L M + N O P A Q + + R S T U + ",
+" . V @ W X Y Z + d ` ...+.+ > @.#.T * $.@ + ",
+" + @ @ * * %.&.+ + *.=.N d + -.;.>.,.* * @ @ + ",
+" + @ @ * * '.).!.f ~.% + + + {.].^.t /. * @ @ @ + ",
+" + @ * @ (._ _.:.<.[.}.|.1.2.3.4. * @ @ @ + ",
+" + + + @ * * * * 5.6.7.8.8.9.0.a.b.* * * * @ @ @ + + ",
+" @ @ @ @ * * * c.d.A A A T * * * @ @ @ @ ",
+" "};
diff --git a/pics/parashoot/helicopter.xpm b/pics/parashoot/helicopter.xpm
new file mode 100644
index 0000000..08e4f2c
--- a/dev/null
+++ b/pics/parashoot/helicopter.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char * chopper_xpm[] = {
+"59 21 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" . .. ",
+" ....... ... ...... ....",
+" .............. . ............. .....",
+" ...................... ......",
+" . ...... ",
+" .... ....... ",
+" .............. ....... ",
+" ......................... .......... ",
+" . .. ......................................... ",
+" . .. .... . ........................... ",
+" . .. .... . .......................... ",
+" . .. .... . ......................... ",
+" ... .. .... . ........................ ",
+" ..... .. .... . ................... ",
+"..................................... ",
+" ................ ..... ",
+" ............................ ",
+" .................. ",
+" . .. .. ",
+" ..... .. .. .... ",
+" .................... "};
diff --git a/pics/parashoot/helicopter0000.xpm b/pics/parashoot/helicopter0000.xpm
new file mode 100644
index 0000000..c36a313
--- a/dev/null
+++ b/pics/parashoot/helicopter0000.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char * helicopter0000_xpm[] = {
+"59 21 2 1",
+" c None",
+". c #000000000000",
+" . .. ",
+" ....... ... ...... ....",
+" .............. . ............. .....",
+" ...................... ......",
+" . ...... ",
+" .... ....... ",
+" .............. ....... ",
+" ......................... .......... ",
+" . .. ......................................... ",
+" . .. .... . ........................... ",
+" . .. .... . .......................... ",
+" . .. .... . ......................... ",
+" ... .. .... . ........................ ",
+" ..... .. .... . ................... ",
+"..................................... ",
+" ................ ..... ",
+" ............................ ",
+" .................. ",
+" . .. .. ",
+" ..... .. .. .... ",
+" .................... "};
diff --git a/pics/parashoot/helicopter0001.xpm b/pics/parashoot/helicopter0001.xpm
new file mode 100644
index 0000000..43d53e7
--- a/dev/null
+++ b/pics/parashoot/helicopter0001.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char * helicopter0001_xpm[] = {
+"59 21 2 1",
+" c None",
+". c #000000000000",
+" . .. ",
+" ... ....",
+" .............. . ............. .....",
+" ...................... ......",
+" . ...... ",
+" .... ....... ",
+" .............. ....... ",
+" ......................... .......... ",
+" . .. ......................................... ",
+" . .. .... . ........................... ",
+" . .. .... . .......................... ",
+" . .. .... . ......................... ",
+" ... .. .... . ........................ ",
+" ..... .. .... . ................... ",
+"..................................... ",
+" ................ ..... ",
+" ............................ ",
+" .................. ",
+" . .. .. ",
+" ..... .. .. .... ",
+" .................... "};
diff --git a/pics/parashoot/helicopter0002.xpm b/pics/parashoot/helicopter0002.xpm
new file mode 100644
index 0000000..dab9dcb
--- a/dev/null
+++ b/pics/parashoot/helicopter0002.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char * helicopter0002_xpm[] = {
+"59 21 2 1",
+" c None",
+". c #000000000000",
+" . .. ",
+" ... ....",
+" . .....",
+" ...................... ......",
+" . ...... ",
+" .... ....... ",
+" .............. ....... ",
+" ......................... .......... ",
+" . .. ......................................... ",
+" . .. .... . ........................... ",
+" . .. .... . .......................... ",
+" . .. .... . ......................... ",
+" ... .. .... . ........................ ",
+" ..... .. .... . ................... ",
+"..................................... ",
+" ................ ..... ",
+" ............................ ",
+" .................. ",
+" . .. .. ",
+" ..... .. .. .... ",
+" .................... "};
diff --git a/pics/parashoot/man0000.xpm b/pics/parashoot/man0000.xpm
new file mode 100644
index 0000000..5ba9755
--- a/dev/null
+++ b/pics/parashoot/man0000.xpm
@@ -0,0 +1,46 @@
+/* XPM */
+static char * man0000_xpm[] = {
+"16 26 17 1",
+" c None",
+". c #666146",
+"+ c #C1A947",
+"@ c #54491F",
+"# c #847131",
+"$ c #000000",
+"% c #3B7530",
+"& c #3E7031",
+"* c #487F42",
+"= c #27491F",
+"- c #060705",
+"; c #334C1D",
+"> c #45631E",
+", c #54723C",
+"' c #5FA058",
+") c #565656",
+"! c #0C0C0C",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ... ",
+" ..... ",
+" +++@. ",
+" +++#. ",
+" +## ",
+" $$$ ",
+" %$&**&% ",
+" %%$&*==%% ",
+" %%=$&&$$=%% ",
+" ++= -$$$$$=#+ ",
+" +# ;>,,' #+ ",
+" ;>,;;'' ",
+" ;,' ;>'' ",
+" ;,, ;;)$ ",
+" ;)$ ;))$ ",
+" !)))$ ))$$ ",
+" !!!$$ ))$$ "};
diff --git a/pics/parashoot/man0001.xpm b/pics/parashoot/man0001.xpm
new file mode 100644
index 0000000..ed5b3ef
--- a/dev/null
+++ b/pics/parashoot/man0001.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static char * man0001_xpm[] = {
+"16 26 16 1",
+" c None",
+". c #666146",
+"+ c #C1A947",
+"@ c #54491F",
+"# c #847131",
+"$ c #000000",
+"% c #3E7031",
+"& c #487F42",
+"* c #27491F",
+"= c #3B7530",
+"- c #060705",
+"; c #334C1D",
+"> c #45631E",
+", c #54723C",
+"' c #565656",
+") c #0C0C0C",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ... ",
+" ..... ",
+" +++@. ",
+" +++#. ",
+" +## ",
+" $$$ ",
+" $%&&% ",
+" $%&*= ",
+" $%%*= ",
+" -$$*= ",
+" ;#+== ",
+" ;>#+,, ",
+" ;,,;;,, ",
+" ;,, ;;;$ ",
+" ;'$ $''$ ",
+" )'''$ $$$$ ",
+" )))$$ "};
diff --git a/pics/parashoot/man0002.xpm b/pics/parashoot/man0002.xpm
new file mode 100644
index 0000000..80c4074
--- a/dev/null
+++ b/pics/parashoot/man0002.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static char * man0002_xpm[] = {
+"16 26 13 1",
+" c None",
+". c #666146",
+"+ c #C1A947",
+"@ c #54491F",
+"# c #847131",
+"$ c #000000",
+"% c #3E7031",
+"& c #27491F",
+"* c #3B7530",
+"= c #334C1D",
+"- c #54723C",
+"; c #565656",
+"> c #0C0C0C",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ... ",
+" ..... ",
+" +++@. ",
+" +++#. ",
+" +## ",
+" $$$ ",
+" $%&*$ ",
+" $&**$ ",
+" &&**$$ ",
+" #+***$$$+ ",
+" #+ ===* + ",
+" ===- ",
+" ===- ",
+" =;=-- ",
+" >;;;> ",
+" >;>>>>> ",
+" >>>>> "};
diff --git a/pics/parashoot/man0003.xpm b/pics/parashoot/man0003.xpm
new file mode 100644
index 0000000..fde9346
--- a/dev/null
+++ b/pics/parashoot/man0003.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char * man0003_xpm[] = {
+"16 26 12 1",
+" c None",
+". c #666146",
+"+ c #C1A947",
+"@ c #54491F",
+"# c #847131",
+"$ c #000000",
+"% c #334C1D",
+"& c #386E2D",
+"* c #3B7530",
+"= c #54723C",
+"- c #565656",
+"; c #0C0C0C",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ... ",
+" ..... ",
+" +++@. ",
+" +++#. ",
+" +## ",
+" $$$ ",
+" $%&%$ ",
+" %**%$ ",
+" %%**%%$* ",
+" #+***$$$$#+ ",
+" #+ %===#+ ",
+" %==%= ",
+" %==%= ",
+" %= %== ",
+" ---; %-; ",
+" ;;;; ;--; ",
+" ;;;; "};
diff --git a/pics/parashoot/man0004.xpm b/pics/parashoot/man0004.xpm
new file mode 100644
index 0000000..adfc845
--- a/dev/null
+++ b/pics/parashoot/man0004.xpm
@@ -0,0 +1,41 @@
+/* XPM */
+static char * man0004_xpm[] = {
+"16 26 12 1",
+" c None",
+". c #666146",
+"+ c #C1A947",
+"@ c #54491F",
+"# c #847131",
+"$ c #000000",
+"% c #334C1D",
+"& c #386E2D",
+"* c #3B7530",
+"= c #54723C",
+"- c #565656",
+"; c #0C0C0C",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ... ",
+" ..... ",
+" +++@. ",
+" +++#. ",
+" +## ",
+" $$$ ",
+" $%&%$ ",
+" %**%$ ",
+" %%**%%$* ",
+" #+***$$$$=#+ ",
+" #+ %=== #+ ",
+" %==%= ",
+" %===%== ",
+" %= %== ",
+" ---; %-; ",
+" ;;;; ;--; ",
+" ;;;; "};
diff --git a/pics/parashoot/man0005.xpm b/pics/parashoot/man0005.xpm
new file mode 100644
index 0000000..9e03f76
--- a/dev/null
+++ b/pics/parashoot/man0005.xpm
@@ -0,0 +1,67 @@
+/* XPM */
+static char * man0005_xpm[] = {
+"32 43 21 1",
+" c None",
+". c #FFFFFF",
+"+ c #C4C4C4",
+"@ c #000000",
+"# c #494949",
+"$ c #686868",
+"% c #847131",
+"& c #C1A947",
+"* c #666146",
+"= c #3E7031",
+"- c #54491F",
+"; c #3B7530",
+"> c #27491F",
+", c #060705",
+"' c #487F42",
+") c #334C1D",
+"! c #45631E",
+"~ c #54723C",
+"{ c #5FA058",
+"] c #565656",
+"^ c #0C0C0C",
+" ............. ",
+" ...++.++........ ",
+" ..++...+.....+..... ",
+" ..++....+.....++..... ",
+" ...+.....+......+...... ",
+" ...++.....+......++...... ",
+" ....+......+.......+....... ",
+" .....+......+.......+........ ",
+" ......+......+................ ",
+".......+.......+++++@...+++++..@",
+"....++...++++.++++++@@.+++++++.@",
+"...+++@.+++++@+++++++@++++++++++",
+"..++++@++++++@++++++++@+++++@@++",
+"@+++++##@@@@@#@@@@@#@ #@@@# @@#",
+"##@@@@## # # ## ##",
+"$# # # # # ## ",
+"$ # ## # # # # ",
+" ## # # # ## ## ",
+" ## # ## ## # ## ",
+" # ## # # ## # ",
+" ## # # # # # ",
+" ## ## # # ## ## ",
+" ## # # # # # ",
+" # # ## ## ## # ",
+" ## ## # ## # ## ",
+" # ### # ## ## ",
+" %& #****## %& ",
+" %& ***** %& ",
+" %= *-%-* % ",
+" === &%&%& ;> ",
+" >== %%% ;;> ",
+" >== % ;;> ",
+" >=,='',;> ",
+" >,='',> ",
+" ,==', ",
+" ,@@@@ ",
+" )!~~{ ",
+" )!~)){ ",
+" )~{ )!{ ",
+" )~~ ~{ ",
+" )]@ @] ",
+" ^]]]@ @]]@ ",
+" ^^^@@ @@@@ "};
diff --git a/pics/parashoot/man0006.xpm b/pics/parashoot/man0006.xpm
new file mode 100644
index 0000000..4a91142
--- a/dev/null
+++ b/pics/parashoot/man0006.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char * man0006_xpm[] = {
+"16 48 2 1",
+" c None",
+". c #FFFF00000000",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" . ",
+" . . ",
+" . .. . ",
+" . . ",
+" . .. .. ",
+" ... . . ",
+". . . . ",
+". . . . . ",
+" .. .. ",
+" . .. . . ",
+" . . . ... ",
+" . ..... ",
+" . ....... ",
+".. ......... . ",
+". ......... . ",
+". ............ ",
+". ............ ",
+".. ......... . ",
+" . ....... .. ",
+" . ..... .. . ",
+" . .. . . ",
+" . .. . . ",
+" . ... . ",
+" . . . ",
+" . . . ",
+" . . . . . ",
+" . . . ",
+" . .. . . ",
+" . . ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/pics/parashoot/manicon.xpm b/pics/parashoot/manicon.xpm
new file mode 100644
index 0000000..03abcfd
--- a/dev/null
+++ b/pics/parashoot/manicon.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * manicon_xpm[] = {
+"11 18 2 1",
+" c None",
+". c #000000000000",
+" ..... ",
+" ....... ",
+" ......... ",
+"...........",
+". ... ... .",
+". . . .",
+" . . ",
+" . ... . ",
+" ....... ",
+" ... ",
+" . ",
+" ... ",
+" . . . ",
+" . . . ",
+" . ",
+" . . ",
+" . . ",
+" . . "};
diff --git a/pics/parashoot/sky.png b/pics/parashoot/sky.png
new file mode 100644
index 0000000..cce89ea
--- a/dev/null
+++ b/pics/parashoot/sky.png
Binary files differ
diff --git a/pics/pine.png b/pics/pine.png
new file mode 100644
index 0000000..3b9661c
--- a/dev/null
+++ b/pics/pine.png
Binary files differ
diff --git a/pics/qasteroids/bg.png b/pics/qasteroids/bg.png
new file mode 100644
index 0000000..e4c5adc
--- a/dev/null
+++ b/pics/qasteroids/bg.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0000.png b/pics/qasteroids/bits/bits0000.png
new file mode 100644
index 0000000..04c6482
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0000.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0001.png b/pics/qasteroids/bits/bits0001.png
new file mode 100644
index 0000000..b4aa04f
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0001.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0002.png b/pics/qasteroids/bits/bits0002.png
new file mode 100644
index 0000000..3a654cd
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0002.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0003.png b/pics/qasteroids/bits/bits0003.png
new file mode 100644
index 0000000..483ecb7
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0003.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0004.png b/pics/qasteroids/bits/bits0004.png
new file mode 100644
index 0000000..fc4f681
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0004.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0005.png b/pics/qasteroids/bits/bits0005.png
new file mode 100644
index 0000000..ffbdcf0
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0005.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0006.png b/pics/qasteroids/bits/bits0006.png
new file mode 100644
index 0000000..0c6b075
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0006.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0007.png b/pics/qasteroids/bits/bits0007.png
new file mode 100644
index 0000000..302a953
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0007.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0008.png b/pics/qasteroids/bits/bits0008.png
new file mode 100644
index 0000000..aae1142
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0008.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0009.png b/pics/qasteroids/bits/bits0009.png
new file mode 100644
index 0000000..5aed202
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0009.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0010.png b/pics/qasteroids/bits/bits0010.png
new file mode 100644
index 0000000..1306999
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0010.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0011.png b/pics/qasteroids/bits/bits0011.png
new file mode 100644
index 0000000..742ae1b
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0011.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0012.png b/pics/qasteroids/bits/bits0012.png
new file mode 100644
index 0000000..d10fdba
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0012.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0013.png b/pics/qasteroids/bits/bits0013.png
new file mode 100644
index 0000000..6ee0aaa
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0013.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0014.png b/pics/qasteroids/bits/bits0014.png
new file mode 100644
index 0000000..167ebe4
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0014.png
Binary files differ
diff --git a/pics/qasteroids/bits/bits0015.png b/pics/qasteroids/bits/bits0015.png
new file mode 100644
index 0000000..15a287e
--- a/dev/null
+++ b/pics/qasteroids/bits/bits0015.png
Binary files differ
diff --git a/pics/qasteroids/exhaust/exhaust.png b/pics/qasteroids/exhaust/exhaust.png
new file mode 100644
index 0000000..78f987e
--- a/dev/null
+++ b/pics/qasteroids/exhaust/exhaust.png
Binary files differ
diff --git a/pics/qasteroids/missile/missile.png b/pics/qasteroids/missile/missile.png
new file mode 100644
index 0000000..e78a0ac
--- a/dev/null
+++ b/pics/qasteroids/missile/missile.png
Binary files differ
diff --git a/pics/qasteroids/powerups/brake.png b/pics/qasteroids/powerups/brake.png
new file mode 100644
index 0000000..fe12dfa
--- a/dev/null
+++ b/pics/qasteroids/powerups/brake.png
Binary files differ
diff --git a/pics/qasteroids/powerups/energy.png b/pics/qasteroids/powerups/energy.png
new file mode 100644
index 0000000..f8df39f
--- a/dev/null
+++ b/pics/qasteroids/powerups/energy.png
Binary files differ
diff --git a/pics/qasteroids/powerups/shield.png b/pics/qasteroids/powerups/shield.png
new file mode 100644
index 0000000..f8a6d0c
--- a/dev/null
+++ b/pics/qasteroids/powerups/shield.png
Binary files differ
diff --git a/pics/qasteroids/powerups/shoot.png b/pics/qasteroids/powerups/shoot.png
new file mode 100644
index 0000000..bebdb5e
--- a/dev/null
+++ b/pics/qasteroids/powerups/shoot.png
Binary files differ
diff --git a/pics/qasteroids/powerups/teleport.png b/pics/qasteroids/powerups/teleport.png
new file mode 100644
index 0000000..4ffde86
--- a/dev/null
+++ b/pics/qasteroids/powerups/teleport.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20000.png b/pics/qasteroids/rock2/rock20000.png
new file mode 100644
index 0000000..4c48311
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20000.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20001.png b/pics/qasteroids/rock2/rock20001.png
new file mode 100644
index 0000000..8041395
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20001.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20002.png b/pics/qasteroids/rock2/rock20002.png
new file mode 100644
index 0000000..83b412f
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20002.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20003.png b/pics/qasteroids/rock2/rock20003.png
new file mode 100644
index 0000000..31f41b1
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20003.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20004.png b/pics/qasteroids/rock2/rock20004.png
new file mode 100644
index 0000000..47d359f
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20004.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20005.png b/pics/qasteroids/rock2/rock20005.png
new file mode 100644
index 0000000..565dfe3
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20005.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20006.png b/pics/qasteroids/rock2/rock20006.png
new file mode 100644
index 0000000..ebf10c4
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20006.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20007.png b/pics/qasteroids/rock2/rock20007.png
new file mode 100644
index 0000000..4442578
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20007.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20008.png b/pics/qasteroids/rock2/rock20008.png
new file mode 100644
index 0000000..2601a82
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20008.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20009.png b/pics/qasteroids/rock2/rock20009.png
new file mode 100644
index 0000000..8987fdc
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20009.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20010.png b/pics/qasteroids/rock2/rock20010.png
new file mode 100644
index 0000000..a3d1985
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20010.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20011.png b/pics/qasteroids/rock2/rock20011.png
new file mode 100644
index 0000000..0bea56f
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20011.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20012.png b/pics/qasteroids/rock2/rock20012.png
new file mode 100644
index 0000000..2271259
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20012.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20013.png b/pics/qasteroids/rock2/rock20013.png
new file mode 100644
index 0000000..de91a87
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20013.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20014.png b/pics/qasteroids/rock2/rock20014.png
new file mode 100644
index 0000000..b76af51
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20014.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20015.png b/pics/qasteroids/rock2/rock20015.png
new file mode 100644
index 0000000..01283e6
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20015.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20016.png b/pics/qasteroids/rock2/rock20016.png
new file mode 100644
index 0000000..f220642
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20016.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20017.png b/pics/qasteroids/rock2/rock20017.png
new file mode 100644
index 0000000..cca6ccf
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20017.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20018.png b/pics/qasteroids/rock2/rock20018.png
new file mode 100644
index 0000000..6adac3f
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20018.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20019.png b/pics/qasteroids/rock2/rock20019.png
new file mode 100644
index 0000000..fbb54c9
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20019.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20020.png b/pics/qasteroids/rock2/rock20020.png
new file mode 100644
index 0000000..e8bfd2d
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20020.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20021.png b/pics/qasteroids/rock2/rock20021.png
new file mode 100644
index 0000000..33e313d
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20021.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20022.png b/pics/qasteroids/rock2/rock20022.png
new file mode 100644
index 0000000..cf94837
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20022.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20023.png b/pics/qasteroids/rock2/rock20023.png
new file mode 100644
index 0000000..2ef4c45
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20023.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20024.png b/pics/qasteroids/rock2/rock20024.png
new file mode 100644
index 0000000..1fe628f
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20024.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20025.png b/pics/qasteroids/rock2/rock20025.png
new file mode 100644
index 0000000..3403c2e
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20025.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20026.png b/pics/qasteroids/rock2/rock20026.png
new file mode 100644
index 0000000..b71629b
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20026.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20027.png b/pics/qasteroids/rock2/rock20027.png
new file mode 100644
index 0000000..0b1301a
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20027.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20028.png b/pics/qasteroids/rock2/rock20028.png
new file mode 100644
index 0000000..ff9514d
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20028.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20029.png b/pics/qasteroids/rock2/rock20029.png
new file mode 100644
index 0000000..996efac
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20029.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20030.png b/pics/qasteroids/rock2/rock20030.png
new file mode 100644
index 0000000..db40697
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20030.png
Binary files differ
diff --git a/pics/qasteroids/rock2/rock20031.png b/pics/qasteroids/rock2/rock20031.png
new file mode 100644
index 0000000..9079d19
--- a/dev/null
+++ b/pics/qasteroids/rock2/rock20031.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30000.png b/pics/qasteroids/rock3/rock30000.png
new file mode 100644
index 0000000..e16c5fa
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30000.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30001.png b/pics/qasteroids/rock3/rock30001.png
new file mode 100644
index 0000000..4614826
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30001.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30002.png b/pics/qasteroids/rock3/rock30002.png
new file mode 100644
index 0000000..0417648
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30002.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30003.png b/pics/qasteroids/rock3/rock30003.png
new file mode 100644
index 0000000..a8ef0bf
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30003.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30004.png b/pics/qasteroids/rock3/rock30004.png
new file mode 100644
index 0000000..95c55c7
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30004.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30005.png b/pics/qasteroids/rock3/rock30005.png
new file mode 100644
index 0000000..a061fb7
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30005.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30006.png b/pics/qasteroids/rock3/rock30006.png
new file mode 100644
index 0000000..58b79df
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30006.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30007.png b/pics/qasteroids/rock3/rock30007.png
new file mode 100644
index 0000000..727dd53
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30007.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30008.png b/pics/qasteroids/rock3/rock30008.png
new file mode 100644
index 0000000..fffc144
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30008.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30009.png b/pics/qasteroids/rock3/rock30009.png
new file mode 100644
index 0000000..c8de18b
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30009.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30010.png b/pics/qasteroids/rock3/rock30010.png
new file mode 100644
index 0000000..2308528
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30010.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30011.png b/pics/qasteroids/rock3/rock30011.png
new file mode 100644
index 0000000..c2eda4c
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30011.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30012.png b/pics/qasteroids/rock3/rock30012.png
new file mode 100644
index 0000000..2bf0223
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30012.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30013.png b/pics/qasteroids/rock3/rock30013.png
new file mode 100644
index 0000000..1e12d55
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30013.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30014.png b/pics/qasteroids/rock3/rock30014.png
new file mode 100644
index 0000000..4e2dd19
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30014.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30015.png b/pics/qasteroids/rock3/rock30015.png
new file mode 100644
index 0000000..ea905e2
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30015.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30016.png b/pics/qasteroids/rock3/rock30016.png
new file mode 100644
index 0000000..650b9af
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30016.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30017.png b/pics/qasteroids/rock3/rock30017.png
new file mode 100644
index 0000000..1ef30eb
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30017.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30018.png b/pics/qasteroids/rock3/rock30018.png
new file mode 100644
index 0000000..40bddae
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30018.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30019.png b/pics/qasteroids/rock3/rock30019.png
new file mode 100644
index 0000000..0d2637c
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30019.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30020.png b/pics/qasteroids/rock3/rock30020.png
new file mode 100644
index 0000000..8eebba6
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30020.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30021.png b/pics/qasteroids/rock3/rock30021.png
new file mode 100644
index 0000000..2fa50ef
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30021.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30022.png b/pics/qasteroids/rock3/rock30022.png
new file mode 100644
index 0000000..a1184f7
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30022.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30023.png b/pics/qasteroids/rock3/rock30023.png
new file mode 100644
index 0000000..92d3597
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30023.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30024.png b/pics/qasteroids/rock3/rock30024.png
new file mode 100644
index 0000000..2749bc9
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30024.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30025.png b/pics/qasteroids/rock3/rock30025.png
new file mode 100644
index 0000000..1afa737
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30025.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30026.png b/pics/qasteroids/rock3/rock30026.png
new file mode 100644
index 0000000..e6af352
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30026.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30027.png b/pics/qasteroids/rock3/rock30027.png
new file mode 100644
index 0000000..1ac5276
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30027.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30028.png b/pics/qasteroids/rock3/rock30028.png
new file mode 100644
index 0000000..7395a37
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30028.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30029.png b/pics/qasteroids/rock3/rock30029.png
new file mode 100644
index 0000000..b0b5620
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30029.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30030.png b/pics/qasteroids/rock3/rock30030.png
new file mode 100644
index 0000000..2bddf8e
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30030.png
Binary files differ
diff --git a/pics/qasteroids/rock3/rock30031.png b/pics/qasteroids/rock3/rock30031.png
new file mode 100644
index 0000000..f5cce0f
--- a/dev/null
+++ b/pics/qasteroids/rock3/rock30031.png
Binary files differ
diff --git a/pics/qasteroids/shield/shield0000.png b/pics/qasteroids/shield/shield0000.png
new file mode 100644
index 0000000..01bc859
--- a/dev/null
+++ b/pics/qasteroids/shield/shield0000.png
Binary files differ
diff --git a/pics/qasteroids/shield/shield0001.png b/pics/qasteroids/shield/shield0001.png
new file mode 100644
index 0000000..2b9b076
--- a/dev/null
+++ b/pics/qasteroids/shield/shield0001.png
Binary files differ
diff --git a/pics/qasteroids/shield/shield0002.png b/pics/qasteroids/shield/shield0002.png
new file mode 100644
index 0000000..5544629
--- a/dev/null
+++ b/pics/qasteroids/shield/shield0002.png
Binary files differ
diff --git a/pics/qasteroids/shield/shield0003.png b/pics/qasteroids/shield/shield0003.png
new file mode 100644
index 0000000..2b09644
--- a/dev/null
+++ b/pics/qasteroids/shield/shield0003.png
Binary files differ
diff --git a/pics/qasteroids/shield/shield0004.png b/pics/qasteroids/shield/shield0004.png
new file mode 100644
index 0000000..604b1aa
--- a/dev/null
+++ b/pics/qasteroids/shield/shield0004.png
Binary files differ
diff --git a/pics/qasteroids/shield/shield0005.png b/pics/qasteroids/shield/shield0005.png
new file mode 100644
index 0000000..2e3adff
--- a/dev/null
+++ b/pics/qasteroids/shield/shield0005.png
Binary files differ
diff --git a/pics/qasteroids/shield/shield0006.png b/pics/qasteroids/shield/shield0006.png
new file mode 100644
index 0000000..ce94f58
--- a/dev/null
+++ b/pics/qasteroids/shield/shield0006.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0000.png b/pics/qasteroids/ship/ship0000.png
new file mode 100644
index 0000000..7dbb33c
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0000.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0001.png b/pics/qasteroids/ship/ship0001.png
new file mode 100644
index 0000000..607d419
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0001.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0002.png b/pics/qasteroids/ship/ship0002.png
new file mode 100644
index 0000000..ff32129
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0002.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0003.png b/pics/qasteroids/ship/ship0003.png
new file mode 100644
index 0000000..0820c14
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0003.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0004.png b/pics/qasteroids/ship/ship0004.png
new file mode 100644
index 0000000..09ff466
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0004.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0005.png b/pics/qasteroids/ship/ship0005.png
new file mode 100644
index 0000000..157e58b
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0005.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0006.png b/pics/qasteroids/ship/ship0006.png
new file mode 100644
index 0000000..9b7b4d0
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0006.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0007.png b/pics/qasteroids/ship/ship0007.png
new file mode 100644
index 0000000..c00a3f7
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0007.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0008.png b/pics/qasteroids/ship/ship0008.png
new file mode 100644
index 0000000..fa005c0
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0008.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0009.png b/pics/qasteroids/ship/ship0009.png
new file mode 100644
index 0000000..f03a7fb
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0009.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0010.png b/pics/qasteroids/ship/ship0010.png
new file mode 100644
index 0000000..fe0b352
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0010.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0011.png b/pics/qasteroids/ship/ship0011.png
new file mode 100644
index 0000000..bb064b1
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0011.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0012.png b/pics/qasteroids/ship/ship0012.png
new file mode 100644
index 0000000..7c746c0
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0012.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0013.png b/pics/qasteroids/ship/ship0013.png
new file mode 100644
index 0000000..28d3399
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0013.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0014.png b/pics/qasteroids/ship/ship0014.png
new file mode 100644
index 0000000..27efba4
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0014.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0015.png b/pics/qasteroids/ship/ship0015.png
new file mode 100644
index 0000000..f6c4ebd
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0015.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0016.png b/pics/qasteroids/ship/ship0016.png
new file mode 100644
index 0000000..5d00651
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0016.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0017.png b/pics/qasteroids/ship/ship0017.png
new file mode 100644
index 0000000..c03c25b
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0017.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0018.png b/pics/qasteroids/ship/ship0018.png
new file mode 100644
index 0000000..1e47e6b
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0018.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0019.png b/pics/qasteroids/ship/ship0019.png
new file mode 100644
index 0000000..746d69b
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0019.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0020.png b/pics/qasteroids/ship/ship0020.png
new file mode 100644
index 0000000..65c473a
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0020.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0021.png b/pics/qasteroids/ship/ship0021.png
new file mode 100644
index 0000000..41eee73
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0021.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0022.png b/pics/qasteroids/ship/ship0022.png
new file mode 100644
index 0000000..0074f3a
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0022.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0023.png b/pics/qasteroids/ship/ship0023.png
new file mode 100644
index 0000000..f790523
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0023.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0024.png b/pics/qasteroids/ship/ship0024.png
new file mode 100644
index 0000000..3eb12ce
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0024.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0025.png b/pics/qasteroids/ship/ship0025.png
new file mode 100644
index 0000000..809adac
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0025.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0026.png b/pics/qasteroids/ship/ship0026.png
new file mode 100644
index 0000000..ec43bec
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0026.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0027.png b/pics/qasteroids/ship/ship0027.png
new file mode 100644
index 0000000..2c72b7e
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0027.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0028.png b/pics/qasteroids/ship/ship0028.png
new file mode 100644
index 0000000..1ce40e3
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0028.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0029.png b/pics/qasteroids/ship/ship0029.png
new file mode 100644
index 0000000..04ed198
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0029.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0030.png b/pics/qasteroids/ship/ship0030.png
new file mode 100644
index 0000000..365774e
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0030.png
Binary files differ
diff --git a/pics/qasteroids/ship/ship0031.png b/pics/qasteroids/ship/ship0031.png
new file mode 100644
index 0000000..57b998d
--- a/dev/null
+++ b/pics/qasteroids/ship/ship0031.png
Binary files differ
diff --git a/pics/qpe-logo.png b/pics/qpe-logo.png
new file mode 100644
index 0000000..a76da6a
--- a/dev/null
+++ b/pics/qpe-logo.png
Binary files differ
diff --git a/pics/qpe-pics.control b/pics/qpe-pics.control
new file mode 100644
index 0000000..449ba43
--- a/dev/null
+++ b/pics/qpe-pics.control
@@ -0,0 +1,8 @@
+Files: pics/??*.*
+Priority: required
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Description: Basic icons for Qtopia environment
+ These icons are available to all QPE application.
diff --git a/pics/qtlogo.png b/pics/qtlogo.png
new file mode 100755
index 0000000..72a81ff
--- a/dev/null
+++ b/pics/qtlogo.png
Binary files differ
diff --git a/pics/rotate90.png b/pics/rotate90.png
new file mode 100644
index 0000000..873868c
--- a/dev/null
+++ b/pics/rotate90.png
Binary files differ
diff --git a/pics/sidebar.png b/pics/sidebar.png
new file mode 100644
index 0000000..aea2bd1
--- a/dev/null
+++ b/pics/sidebar.png
Binary files differ
diff --git a/pics/simple_grid_400.png b/pics/simple_grid_400.png
new file mode 100644
index 0000000..5e0e21d
--- a/dev/null
+++ b/pics/simple_grid_400.png
Binary files differ
diff --git a/pics/snake/mouse.xpm b/pics/snake/mouse.xpm
new file mode 100644
index 0000000..36840d3
--- a/dev/null
+++ b/pics/snake/mouse.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+static char * mouse_xpm[] = {
+"16 16 4 1",
+" c None",
+". c #BBBBBBBBBBBB",
+"X c #000000000000",
+"o c #FFFF0000FFFF",
+" .. ",
+" .... ",
+" .X..X. ",
+" oo.X..X.oo ",
+" o........o ",
+" ........ ",
+" ........ ",
+" ........ ",
+" ........ ",
+" ...... ",
+" .... ",
+" . ",
+" . .. ",
+" .. . ",
+" . ",
+" "};
diff --git a/pics/snake/s0000.xpm b/pics/snake/s0000.xpm
new file mode 100644
index 0000000..da7e2f6
--- a/dev/null
+++ b/pics/snake/s0000.xpm
@@ -0,0 +1,20 @@
+/* XPM */
+static char * s0000_xpm[] = {
+"16 16 1 1",
+" c #FFFF00000000",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0001.xpm b/pics/snake/s0001.xpm
new file mode 100644
index 0000000..e33cdfe
--- a/dev/null
+++ b/pics/snake/s0001.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * s5_xpm[] = {
+"16 16 9 1",
+" c None",
+"* c #5E6B3D",
+"& c #6A793C",
+"% c #76873B",
+"$ c #82953A",
+"# c #8EA238",
+"@ c #9AB037",
+"+ c #A6BE36",
+". c #B1CC35",
+" ",
+" ",
+" ",
+" ",
+"... ",
+"++++++ ",
+"@@@@@@#$ ",
+"########$ ",
+"$$$$$$$$$$ ",
+"%%%%$$$%$$ ",
+"&&&%$$%%&%& ",
+"*%*#$%#%&&& ",
+" %#####%&& ",
+" ##+@%$%&* ",
+" @+@#$%&* ",
+" .+@#$%&* "};
diff --git a/pics/snake/s0002.xpm b/pics/snake/s0002.xpm
new file mode 100644
index 0000000..35591ce
--- a/dev/null
+++ b/pics/snake/s0002.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * s6[] = {
+"16 16 9 1",
+" c None",
+"* c #5E6B3D",
+"& c #6A793C",
+"% c #76873B",
+"$ c #82953A",
+"# c #8EA238",
+"@ c #9AB037",
+"+ c #A6BE36",
+". c #B1CC35",
+" .+@#$%&* ",
+" .+@#$%&* ",
+" ..+@#$%&* ",
+" ..+@#$%&* ",
+"....+@#$%&* ",
+"+++++@#$%&* ",
+"@@@@@#$%&* ",
+"######$%&* ",
+"$$$$%%&&* ",
+"%%%%&&** ",
+"&&&*** ",
+"*** ",
+" ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0003.xpm b/pics/snake/s0003.xpm
new file mode 100644
index 0000000..3066e9e
--- a/dev/null
+++ b/pics/snake/s0003.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * s3[] = {
+"16 16 10 1",
+" c None",
+". c #FF7F00",
+"+ c #B1CC35",
+"# c #A6BE36",
+"$ c #9AB037",
+"& c #8EA238",
+"= c #82953A",
+"; c #76873B",
+", c #6A793C",
+") c #5E6B3D",
+" ",
+" ",
+" ",
+" ",
+" +++",
+" +++###",
+" ++##$$$$",
+" +##$$&&&&",
+" +#$&======",
+" +#$&=;;;;;",
+" +#$&=;,,,,,",
+" +#$&=;,))))",
+" +#$&=;,)) ",
+" +#$&=;,)) ",
+" +#$&=;,) ",
+" +#$&=;,) "};
diff --git a/pics/snake/s0004.xpm b/pics/snake/s0004.xpm
new file mode 100644
index 0000000..2d5dcf1
--- a/dev/null
+++ b/pics/snake/s0004.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * s4[] = {
+"16 16 9 1",
+" c None",
+". c #B1B1CCCC3535",
+"X c #A6A6BEBE3636",
+"o c #9A9AB0B03737",
+"O c #8E8EA2A23838",
+"+ c #828295953A3A",
+"@ c #767687873B3B",
+"# c #6A6A79793C3C",
+"$ c #5E5E6B6B3D3D",
+" .XoO+@#$ ",
+" .XoO+@#@ ",
+" .XoOo@#++ ",
+" XXo+++++o ",
+" XXXo+oO+.o.",
+" XoXooOOoXXX",
+" OOoOOOoooo",
+" OOOOOOOOOO",
+" O++++++++",
+" O+@@@@@@",
+" ######",
+" $$$",
+" ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0005.xpm b/pics/snake/s0005.xpm
new file mode 100644
index 0000000..1d3c890
--- a/dev/null
+++ b/pics/snake/s0005.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * s1[] = {
+"16 16 10 1",
+" c None",
+". c #FFFFFF",
+"+ c #B1CC35",
+"@ c #A6BE36",
+"# c #9AB037",
+"$ c #8EA238",
+"% c #82953A",
+"& c #76873B",
+"* c #6A793C",
+"= c #5E6B3D",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= ",
+" +@#$%&*= "};
diff --git a/pics/snake/s0006.xpm b/pics/snake/s0006.xpm
new file mode 100644
index 0000000..f871303
--- a/dev/null
+++ b/pics/snake/s0006.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * s2[] = {
+"16 16 10 1",
+" c None",
+". c #FFFFFF",
+"+ c #B1CC35",
+"@ c #A6BE36",
+"# c #9AB037",
+"$ c #8EA238",
+"% c #82953A",
+"& c #76873B",
+"* c #6A793C",
+"= c #5E6B3D",
+" ",
+" ",
+" ",
+" ",
+"++++++++++++++++",
+"@@@@@@@@@@@@@@@@",
+"################",
+"$$$$$$$$$$$$$$$$",
+"%%%%%%%%%%%%%%%%",
+"&&&&&&&&&&&&&&&&",
+"****************",
+"================",
+" ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0007.xpm b/pics/snake/s0007.xpm
new file mode 100644
index 0000000..f1d0f27
--- a/dev/null
+++ b/pics/snake/s0007.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * h2_xpm[] = {
+"16 16 10 1",
+" c None",
+". c #B1CC35",
+"+ c #A6BE36",
+"@ c #9AB037",
+"# c #8EA238",
+"$ c #000000",
+"% c #82953A",
+"& c #76873B",
+"* c #6A793C",
+"= c #5E6B3D",
+" ",
+" ",
+" ",
+" +++++++ ",
+"...@@@@@@@++ ",
+"++++####$#@@+ ",
+"@@@@#####$##@@ ",
+"############## ",
+"%%%%%%%%%%%%%% ",
+"&&&&%%%%%$%%&& ",
+"****%%%%$%&&* ",
+"===&&&&&&&** ",
+" ******* ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0008.xpm b/pics/snake/s0008.xpm
new file mode 100644
index 0000000..3731316
--- a/dev/null
+++ b/pics/snake/s0008.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * h4_xpm[] = {
+"16 16 10 1",
+" c None",
+"$ c #000000",
+"= c #5E6B3D",
+"* c #6A793C",
+"& c #76873B",
+"% c #82953A",
+"# c #8EA238",
+"@ c #9AB037",
+"+ c #A6BE36",
+". c #B1CC35",
+" ",
+" ",
+" ",
+" +++++++ ",
+" ++@@@@@@@...",
+" +@@#$####++++",
+" @@##$#####@@@@",
+" ##############",
+" %%%%%%%%%%%%%%",
+" &&%%$%%%%%&&&&",
+" *&&%$%%%%****",
+" **&&&&&&&===",
+" ******* ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0009.xpm b/pics/snake/s0009.xpm
new file mode 100644
index 0000000..8bf8222
--- a/dev/null
+++ b/pics/snake/s0009.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * h3_xpm[] = {
+"16 16 10 1",
+" c None",
+"* c #5E6B3D",
+"& c #6A793C",
+"% c #76873B",
+"$ c #82953A",
+"# c #8EA238",
+"@ c #9AB037",
+"+ c #A6BE36",
+". c #B1CC35",
+"= c #000000",
+" .+@#$%&* ",
+" .+@#$%&* ",
+" +.+@#$%&*& ",
+" +@+@#$%&%& ",
+" +@###$$$%& ",
+" +@###$$$%& ",
+" +@###$$$%& ",
+" +@###$$$%& ",
+" +@=##$$=%& ",
+" @#=#$=$% ",
+" +@##$$%& ",
+" +@##$$%& ",
+" +@#$%& ",
+" @#$% ",
+" ",
+" "};
diff --git a/pics/snake/s0010.xpm b/pics/snake/s0010.xpm
new file mode 100644
index 0000000..8b71afa
--- a/dev/null
+++ b/pics/snake/s0010.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * h1_xpm[] = {
+"16 16 10 1",
+" c None",
+"@ c #000000000000",
+". c #9A9AB0B03737",
+"X c #8E8EA2A23838",
+"o c #828295953A3A",
+"O c #767687873B3B",
+"+ c #A6A6BEBE3636",
+"# c #6A6A79793C3C",
+"$ c #B1B1CCCC3535",
+"% c #5E5E6B6B3D3D",
+" ",
+" ",
+" .XoO ",
+" +.XoO# ",
+" +.XXooO# ",
+" +.XXooO# ",
+" .X@Xo@oO ",
+" +.@XXoo@O# ",
+" +.XXXoooO# ",
+" +.XXXoooO# ",
+" +.XXXoooO# ",
+" +.XXXoooO# ",
+" +.+.XoO#O# ",
+" +$+.XoO#%# ",
+" $+.XoO#% ",
+" $+.XoO#% "};
diff --git a/pics/snake/s0011.xpm b/pics/snake/s0011.xpm
new file mode 100644
index 0000000..01dc435
--- a/dev/null
+++ b/pics/snake/s0011.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * t4_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #B1B1CCCC3535",
+"X c #A6A6BEBE3636",
+"o c #9A9AB0B03737",
+"O c #8E8EA2A23838",
+"+ c #828295953A3A",
+"@ c #767687873B3B",
+"# c #6A6A79793C3C",
+"$ c #5E5E6B6B3D3D",
+" ",
+" ",
+" ",
+" ",
+" ......",
+" XXXXXXXXXX",
+" ooooooooooooo",
+" OOOOOOOOOOOOOOO",
+" +++++++++++++++",
+" @@@@@@@@@@@@@",
+" ##########",
+" $$$$$$",
+" ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0012.xpm b/pics/snake/s0012.xpm
new file mode 100644
index 0000000..0c856f6
--- a/dev/null
+++ b/pics/snake/s0012.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * t3_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #B1B1CCCC3535",
+"X c #A6A6BEBE3636",
+"o c #9A9AB0B03737",
+"O c #8E8EA2A23838",
+"+ c #828295953A3A",
+"@ c #767687873B3B",
+"# c #6A6A79793C3C",
+"$ c #5E5E6B6B3D3D",
+" ",
+" ",
+" ",
+" ",
+"...... ",
+"XXXXXXXXXX ",
+"ooooooooooooo ",
+"OOOOOOOOOOOOOOO ",
+"+++++++++++++++ ",
+"@@@@@@@@@@@@@ ",
+"########## ",
+"$$$$$$ ",
+" ",
+" ",
+" ",
+" "};
diff --git a/pics/snake/s0013.xpm b/pics/snake/s0013.xpm
new file mode 100644
index 0000000..982061e
--- a/dev/null
+++ b/pics/snake/s0013.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * t2_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #8E8EA2A23838",
+"X c #828295953A3A",
+"o c #9A9AB0B03737",
+"O c #767687873B3B",
+"+ c #A6A6BEBE3636",
+"@ c #6A6A79793C3C",
+"# c #B1B1CCCC3535",
+"$ c #5E5E6B6B3D3D",
+" ",
+" .X ",
+" .X ",
+" o.XO ",
+" o.XO ",
+" o.XO ",
+" +o.XO@ ",
+" +o.XO@ ",
+" +o.XO@ ",
+" +o.XO@ ",
+" #+o.XO@$ ",
+" #+o.XO@$ ",
+" #+o.XO@$ ",
+" #+o.XO@$ ",
+" #+o.XO@$ ",
+" #+o.XO@$ "};
diff --git a/pics/snake/s0014.xpm b/pics/snake/s0014.xpm
new file mode 100644
index 0000000..6b0d965
--- a/dev/null
+++ b/pics/snake/s0014.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * t1_xpm[] = {
+"16 16 9 1",
+" c None",
+". c #B1B1CCCC3535",
+"X c #A6A6BEBE3636",
+"o c #9A9AB0B03737",
+"O c #8E8EA2A23838",
+"+ c #828295953A3A",
+"@ c #767687873B3B",
+"# c #6A6A79793C3C",
+"$ c #5E5E6B6B3D3D",
+" .XoO+@#$ ",
+" .XoO+@#$ ",
+" .XoO+@#$ ",
+" .XoO+@#$ ",
+" .XoO+@#$ ",
+" .XoO+@#$ ",
+" XoO+@# ",
+" XoO+@# ",
+" XoO+@# ",
+" XoO+@# ",
+" oO+@ ",
+" oO+@ ",
+" oO+@ ",
+" O+ ",
+" O+ ",
+" "};
diff --git a/pics/snake/wall.png b/pics/snake/wall.png
new file mode 100644
index 0000000..d4e2246
--- a/dev/null
+++ b/pics/snake/wall.png
Binary files differ
diff --git a/pics/sound-off.xpm b/pics/sound-off.xpm
new file mode 100644
index 0000000..b886dd5
--- a/dev/null
+++ b/pics/sound-off.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * sound_off_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #000000000000",
+"X c #FFFF00000000",
+" ",
+" ",
+" ",
+" . ",
+" .. ",
+" ... X X ",
+"...... XXX XXX ",
+"...... XXXXX ",
+"...... XXX ",
+"...... XXXXX ",
+"...... XXX XXX ",
+" ... X X ",
+" .. ",
+" . ",
+" ",
+" "};
diff --git a/pics/sound-on.xpm b/pics/sound-on.xpm
new file mode 100644
index 0000000..6e109cf
--- a/dev/null
+++ b/pics/sound-on.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char * sound_on_xpm[] = {
+"16 16 3 1",
+" c None",
+". c #FFFF00000000",
+"X c #000000000000",
+" . ",
+" .. ",
+" . . ",
+" X . . . ",
+" XX .. . . ",
+" XXX . .. . ",
+"XXXXXX . . . ..",
+"XXXXXX . .. . ..",
+"XXXXXX . .. . ..",
+"XXXXXX . .. . ..",
+"XXXXXX . . . ..",
+" XXX . .. . ",
+" XX . . . ",
+" X . .. ",
+" . . ",
+" .. "};
diff --git a/pics/start_button.xpm b/pics/start_button.xpm
new file mode 100644
index 0000000..08fa892
--- a/dev/null
+++ b/pics/start_button.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * start_xpm[] = {
+"50 16 10 1",
+" c None",
+". c #707070",
+"+ c #FFFFFF",
+"@ c #000000",
+"# c #99CC00",
+"$ c #C0C0C0",
+"% c #666600",
+"& c #333300",
+"* c #336600",
+"= c #003300",
+".++++++++++++++++++++++++++++++++++++++++++++++++@",
+"+##############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@",
+"+#####%&&*#####$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@",
+"+###*@@@@@@%###$$$@@@@$$$$@$$$$$$$$$$$$$$$$$$@$$$@",
+"+##*@@%##%@@%##$$@@$$@@$$@@$$$$$$$$$$$$$$$$$@@$$$@",
+"+##@@######@@##$$@@$$$$$@@@@@$$@@@@$$$@@$@@@@@@@$@",
+"+#%@%###&@#%@*#$$@@@$$$$$@@$$$@@$$@@$$@@$@@$@@$$$@",
+"+#&@###&@&##@&#$$$@@@@$$$@@$$$$$$$@@$$@@@$$$@@$$$@",
+"+#&@##&@@&##@&#$$$$$@@@$$@@$$$$@@@@@$$@@$$$$@@$$$@",
+"+#*@%#@&&@&*@%#$$$$$$@@$$@@$$$@@$$@@$$@@$$$$@@$$$@",
+"+##@@####&@@@##$$@@$$@@$$@@$$$@@$$@@$$@@$$$$@@$$$@",
+"+##%@@%##*@@@##$$$@@@@$$$$@@@$$@@@$@@$@@$$$$$@@@$@",
+"+###%@@@@@@=@%#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@",
+"+#####*&&%##%##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@",
+"+##############$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"};
diff --git a/pics/title.png b/pics/title.png
new file mode 100644
index 0000000..d025e53
--- a/dev/null
+++ b/pics/title.png
Binary files differ
diff --git a/pics/tux-logo.png b/pics/tux-logo.png
new file mode 100644
index 0000000..ad7c579
--- a/dev/null
+++ b/pics/tux-logo.png
Binary files differ
diff --git a/pics/tux.png b/pics/tux.png
new file mode 100644
index 0000000..ecaea7a
--- a/dev/null
+++ b/pics/tux.png
Binary files differ
diff --git a/pics/vnc.png b/pics/vnc.png
new file mode 100644
index 0000000..6ed72df
--- a/dev/null
+++ b/pics/vnc.png
Binary files differ
diff --git a/plugins/applets/.cvsignore b/plugins/applets/.cvsignore
new file mode 100644
index 0000000..e751bcd
--- a/dev/null
+++ b/plugins/applets/.cvsignore
@@ -0,0 +1 @@
+lib*.so*
diff --git a/plugins/applets/README b/plugins/applets/README
new file mode 100644
index 0000000..20a34c5
--- a/dev/null
+++ b/plugins/applets/README
@@ -0,0 +1 @@
+Taskbar applets go here
diff --git a/plugins/codecs/.cvsignore b/plugins/codecs/.cvsignore
new file mode 100644
index 0000000..98c6777
--- a/dev/null
+++ b/plugins/codecs/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+lib*
diff --git a/plugins/codecs/README b/plugins/codecs/README
new file mode 100644
index 0000000..851eb2e
--- a/dev/null
+++ b/plugins/codecs/README
@@ -0,0 +1 @@
+Encoder and decoder plugins for the media player go here
diff --git a/plugins/fontfactories/README b/plugins/fontfactories/README
new file mode 100644
index 0000000..4d4733c
--- a/dev/null
+++ b/plugins/fontfactories/README
@@ -0,0 +1 @@
+font factory components go here
diff --git a/plugins/inputmethods/.cvsignore b/plugins/inputmethods/.cvsignore
new file mode 100644
index 0000000..e751bcd
--- a/dev/null
+++ b/plugins/inputmethods/.cvsignore
@@ -0,0 +1 @@
+lib*.so*
diff --git a/plugins/inputmethods/README b/plugins/inputmethods/README
new file mode 100644
index 0000000..9d1dd71
--- a/dev/null
+++ b/plugins/inputmethods/README
@@ -0,0 +1 @@
+Input method components go here
diff --git a/plugins/network/.cvsignore b/plugins/network/.cvsignore
new file mode 100644
index 0000000..98c6777
--- a/dev/null
+++ b/plugins/network/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+lib*
diff --git a/plugins/network/README b/plugins/network/README
new file mode 100644
index 0000000..404278a
--- a/dev/null
+++ b/plugins/network/README
@@ -0,0 +1 @@
+This is where plugins for the networking setup go
diff --git a/qt/control/qpf-cyberbit-120-50-t10.control b/qt/control/qpf-cyberbit-120-50-t10.control
new file mode 100644
index 0000000..8bbc5f7
--- a/dev/null
+++ b/qt/control/qpf-cyberbit-120-50-t10.control
@@ -0,0 +1,9 @@
+Files: $QTDIR/lib/fonts/cyberbit_120_50_t10.qpf
+Priority: required
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: 2.3.0-5
+Description: Unicode font
+ A pre-rendered Unicode font.
diff --git a/qt/qconfig-qpe-single.h b/qt/qconfig-qpe-single.h
new file mode 100644
index 0000000..3b5f692
--- a/dev/null
+++ b/qt/qconfig-qpe-single.h
@@ -0,0 +1,41 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#include "qconfig-qpe.h"
+#define QT_NO_NETWORK
+#define NO_CHECK
+
+//#define QT_DEMO_SINGLE_FLOPPY
+
+
+#ifdef QT_DEMO_SINGLE_FLOPPY
+// VGA16 is all we need
+#define QT_NO_QWS_TRANSFORMED
+#define QT_NO_QWS_MACH64
+#define QT_NO_QWS_VOODOO3
+#define QT_NO_QWS_MATROX
+#define QT_NO_QWS_DEPTH_16
+#define QT_NO_QWS_DEPTH_32
+#define QT_NO_SOUND
+#endif
+
+#ifdef QT_NO_QWS_DEPTH_16
+// Needed for mpegplayer on 16bpp
+#define QT_NO_IMAGE_16_BIT
+#endif
diff --git a/qt/qconfig-qpe.h b/qt/qconfig-qpe.h
new file mode 100644
index 0000000..f02c743
--- a/dev/null
+++ b/qt/qconfig-qpe.h
@@ -0,0 +1,99 @@
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+#ifndef QT_H
+#endif // QT_H
+
+// Empty leaves all features enabled. See doc/html/features.html for choices.
+
+// Note that disabling some features will produce a libqt that is not
+// compatible with other libqt builds. Such modifications are only
+// supported on Qt/Embedded where reducing the library size is important
+// and where the application-suite is often a fixed set.
+
+#ifndef QT_DLL
+#define QT_DLL // Internal
+#endif
+
+#if defined(QT_QWS_IPAQ) || defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_EBX)
+# define QT_NO_QWS_CURSOR
+# define QT_NO_QWS_MOUSE_AUTO
+#endif
+#ifndef QT_NO_CODECS
+#define QT_NO_CODECS
+#endif
+#define QT_NO_UNICODETABLES
+//#define QT_NO_IMAGEIO_BMP
+#define QT_NO_IMAGEIO_PPM
+//#define QT_NO_ASYNC_IO
+//#define QT_NO_ASYNC_IMAGE_IO
+#define QT_NO_FREETYPE
+#define QT_NO_BDF
+//#define QT_NO_FONTDATABASE
+#define QT_NO_DRAGANDDROP
+//#define QT_NO_CLIPBOARD
+#define QT_NO_PROPERTIES
+#define QT_NO_NETWORKPROTOCOL
+
+#define QT_NO_IMAGE_TEXT
+
+//#define QT_NO_TOOLTIP
+#define QT_NO_COLORNAMES
+#define QT_NO_TRANSFORMATIONS
+#define QT_NO_TRANSLATION_BUILDER
+#define QT_NO_COMPLEXTEXT
+#define QT_NO_PRINTER
+#define QT_NO_PICTURE
+//#define QT_NO_ICONVIEW
+#define QT_NO_DIAL
+#define QT_NO_SIZEGRIP
+#define QT_NO_WORKSPACE
+//#define QT_NO_TABLE
+//#define QT_NO_ACTION
+//#define QT_NO_SETTINGS
+#define QT_NO_STYLE_POCKETPC
+#ifndef QT_NO_STYLE_AQUA
+# define QT_NO_STYLE_AQUA
+#endif
+#define QT_NO_STYLE_MOTIF
+#define QT_NO_STYLE_PLATINUM
+#define QT_NO_FILEDIALOG
+#define QT_NO_FONTDIALOG
+#define QT_NO_PRINTDIALOG
+#define QT_NO_COLORDIALOG
+#define QT_NO_INPUTDIALOG
+//#define QT_NO_MESSAGEBOX
+#define QT_NO_PROGRESSDIALOG
+//#define QT_NO_TABDIALOG
+#define QT_NO_WIZARD
+#define QT_NO_EFFECTS
+//#define QT_NO_COMPONENT
+#define QT_NO_DOM
+#define QT_NO_SEMIMODAL
+//#define QT_NO_PROGRESSBAR
+#define QT_NO_SPLITTER
+
+#define QT_NO_QWS_SAVEFONTS
+//#define QT_NO_QWS_PROPERTIES
+
+#define QT_NO_QWS_BEOS_WM_STYLE
+#define QT_NO_QWS_KDE2_WM_STYLE
+#define QT_NO_QWS_KDE_WM_STYLE
+#define QT_NO_QWS_WINDOWS_WM_STYLE
+
diff --git a/qt/qt-embedded-rotation.control b/qt/qt-embedded-rotation.control
new file mode 100644
index 0000000..947e1b1
--- a/dev/null
+++ b/qt/qt-embedded-rotation.control
@@ -0,0 +1,10 @@
+Files: $QTDIR/lib/fonts/helvetica_*_{50,50i,75,75i}.* $QTDIR/lib/fonts/helvetica_*_t*5* $QTDIR/lib/fonts/fixed_*_50.* $QTDIR/lib/fonts/fixed_*_t*5* $QTDIR/lib/fonts/micro_*{50,50_t15,50_t5}.* $QTDIR/lib/fonts/smallsmooth_*{50,50_t15,50_t5}.* $QTDIR/lib/fonts/smoothtimes_{170,100}_{50,50_t15,50_t5}.*
+Priority: optional
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: 2.3.2-3
+Description: Qt/Embedded 0,90,180 rotation fonts
+ The iPAQ's "normal" orientation is 270-degree rotated.
+ These fonts are the fonts for other angles.
diff --git a/qt/qt-embedded.control b/qt/qt-embedded.control
new file mode 100644
index 0000000..1c89dd3
--- a/dev/null
+++ b/qt/qt-embedded.control
@@ -0,0 +1,9 @@
+Files: $QTDIR/lib/libqte.so.$QTE_VERSION $QTDIR/lib/libqte.so.2.3 $QTDIR/lib/libqte.so.2 $QTDIR/lib/fonts/fontdir $QTDIR/lib/fonts/helvetica_*t10* $QTDIR/lib/fonts/fixed_*t10* $QTDIR/lib/fonts/micro_*t10* $QTDIR/lib/fonts/smallsmooth_*t10* $QTDIR/lib/fonts/smoothtimes_{170,100}_50*t10*
+Priority: required
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QTE_VERSION-16
+Description: Qt/Embedded environment
+ A complete windowing system and GUI toolkit for handhelds.
+ See "QPE" for applications.
diff --git a/qt/qte231-for-qpe131.patch.gz b/qt/qte231-for-qpe131.patch.gz
new file mode 100644
index 0000000..52fd5f0
--- a/dev/null
+++ b/qt/qte231-for-qpe131.patch.gz
Binary files differ
diff --git a/qt/qte231-for-qpe140.patch.gz b/qt/qte231-for-qpe140.patch.gz
new file mode 100644
index 0000000..fe73648
--- a/dev/null
+++ b/qt/qte231-for-qpe140.patch.gz
Binary files differ
diff --git a/qt/tmake/propagate.t b/qt/tmake/propagate.t
new file mode 100644
index 0000000..1efadaa
--- a/dev/null
+++ b/qt/tmake/propagate.t
@@ -0,0 +1,368 @@
+#############################################################################
+#!
+#! This is a tmake template for building UNIX libraries.
+#!
+#! Actually, it will be trivial to make app vs. lib a config option.
+#!
+#${
+ Project('CONFIG *= propagate');
+ $project{"TMAKE_CXXFLAGS"} = "";
+ $project{"TMAKE_CFLAGS"} = "";
+ $project{"TMAKE_LFLAGS"} = "";
+ $project{"TMAKE_LIBS"} = "";
+
+ Project('TMAKE_LIBS += $$LIBS'); # Misc. project-specific extras
+
+ if ( !Project("INTERFACE_DECL_PATH") ) {
+ Project('INTERFACE_DECL_PATH = .' );
+ }
+ if ( Config("qgl") ) {
+ #! qgl apps need X11 includes and libraries
+ Project('CONFIG *= x11lib');
+ Project('CONFIG *= x11inc');
+ }
+
+ if ( Config("x11") ) {
+ Project('CONFIG *= x11lib');
+ Project('CONFIG *= x11inc');
+ }
+ if ( Config("opengl") ) {
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS_OPENGL)');
+ Project('TMAKE_LFLAGS *= $(SYSCONF_LFLAGS_OPENGL)');
+ Project('TMAKE_LIBS *= $(SYSCONF_LIBS_OPENGL)');
+ }
+ if ( Config("qt") ) {
+ $moc_aware = 1;
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS_QT)');
+ if ( Project("TARGET") ne "qt"
+ && Project("TARGET") ne "qte" ) {
+ Project('TMAKE_LFLAGS *= $(SYSCONF_LFLAGS_QT)');
+ Project('TMAKE_LFLAGS *= $(SYSCONF_RPATH_QT)');
+ Project('TMAKE_LIBS *= $(SYSCONF_LIBS_QT)');
+ }
+ } elsif ( Config("qtinc") ) {
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS_QT)');
+ }
+ if ( Config("x11inc") ) {
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS_X11)');
+ }
+ if ( Config("x11lib") ) {
+ Project('TMAKE_LFLAGS *= $(SYSCONF_LFLAGS_X11)');
+ Project('TMAKE_LFLAGS *= $(SYSCONF_RPATH_X11)');
+ Project('TMAKE_LIBS *= $(SYSCONF_LIBS_X11)');
+ }
+
+ ##### These may still need replacing
+ if ( !Project("TMAKE_RUN_CC") ) {
+ Project('TMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src');
+ }
+ if ( !Project("TMAKE_RUN_CC_IMP") ) {
+ Project('TMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<');
+ }
+ if ( !Project("TMAKE_RUN_CXX") ) {
+ Project('TMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src');
+ }
+ if ( !Project("TMAKE_RUN_CXX_IMP") ) {
+ Project('TMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<');
+ }
+
+ Project('TMAKE_FILETAGS = HEADERS SOURCES TARGET DESTDIR $$FILETAGS');
+ Project('DESTDIR = ./') unless Project('DESTDIR');
+
+ if ( Config("embedded") && Project("PRECOMPH") ) {
+ Project('SOURCES += allmoc.cpp');
+ $project{'HEADERS_ORIG'} = Project('HEADERS');
+ $project{'HEADERS'} = "";
+ }
+
+ StdInit();
+
+ if ( Config("qt") ) {
+ if ( Project("TARGET") eq "qt"
+ || Project("TARGET") eq "qte" ) {
+ $project{"PNG_OBJECTS"} = &Objects($project{"PNG_SOURCES"});
+ $project{"ZLIB_OBJECTS"} = &Objects($project{"ZLIB_SOURCES"});
+ $project{"FT_OBJECTS"} = &Objects($project{"FT_SOURCES"});
+ }
+ }
+
+ my ($module,$label);
+ for $module ( split / /, $project{"MODULES"} ) {
+ for $label ( "HEADERS", "OBJECTS", "OBJMOC", "SOURCES", "SRCMOC" ) {
+ my $o = "";
+ my $p = $project{$label};
+ while ( $p =~ s/\s*\b($module\/\S*)// ) {
+ $o .= " " if $o;
+ $o .= "$1";
+ }
+ $p =~ s/^ *//;
+ $p =~ s/ *$//;
+ $project{$label} = $p;
+ $project{"${label}_${module}"} = $o;
+ }
+ }
+
+ $project{"DESTDIR"} = FixPath($project{"DESTDIR"});
+ $project{"VERSION"} || ($project{"VERSION"} = "1.0.0");
+ ($project{"VER_MAJ"},
+ $project{"VER_MIN"},
+ $project{"VER_PATCH"}) = $project{"VERSION"} =~ /(\d+)\.(\d+)(?:\.(\d+))?/;
+ $project{"VER_PATCH"} = 0 if !$project{"VER_PATCH"};
+ if ( Config("dll") ) {
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS_SHOBJ)' );
+ Project('TMAKE_CFLAGS *= $(SYSCONF_CFLAGS_SHOBJ)' );
+ Project('TMAKE_LFLAGS *= $(SYSCONF_LFLAGS_SHOBJ)');
+ }
+ if ( Config("yacc") ) {
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS_YACC)' );
+ Project('TMAKE_LIBS *= $(SYSCONF_LIBS_YACC)' );
+ }
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS)' );
+ Project('TMAKE_CFLAGS *= $(SYSCONF_CFLAGS)' );
+ Project('TMAKE_LFLAGS *= $(SYSCONF_LFLAGS)' );
+ if ( Project('TEMPLATE') eq "lib" || Project('TEMPLATE') eq "qt.t" ) {
+ Project('TMAKE_CXXFLAGS *= $(SYSCONF_CXXFLAGS_LIB)' );
+ Project('TMAKE_CFLAGS *= $(SYSCONF_CFLAGS_LIB)' );
+ } else {
+ Project('TMAKE_LIBS *= $(SYSCONF_LIBS)' );
+ }
+#$}
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= #$ Expand("TMAKE_CXXFLAGS"); ExpandGlue("DEFINES","-D"," -D",""); (Project("TARGET") eq "qt" || Project("TARGET") eq "qte") && ($text = $text . ' $(QT_CXXFLAGS_OPT)');
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = #$ Expand("TMAKE_CFLAGS"); ExpandGlue("DEFINES","-D"," -D",""); (Project("TARGET") eq "qt" || Project("TARGET") eq "qte") && ($text = $text . ' $(QT_CFLAGS_OPT)');
+INCPATH = #$ ExpandGlue("INCPATH","-I"," -I","");
+LFLAGS = #$ Expand("TMAKE_LFLAGS"); $text .= ' $(QT_LFLAGS_MT)'
+LIBS = $(SUBLIBS) #${
+ Expand("TMAKE_LIBS");
+ if (Project("TARGET") eq "qt" || Project("TARGET") eq "qte") {
+ $text .= ' $(SYSCONF_LIBS_QTLIB)';
+ } else {
+ $text .= ' $(SYSCONF_LIBS_QTAPP)';
+ }
+#$}
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = #$ Expand("DESTDIR");
+VER_MAJ = #$ Expand("VER_MAJ");
+VER_MIN = #$ Expand("VER_MIN");
+VER_PATCH = #$ Expand("VER_PATCH");
+TARGET = #$ Expand("TARGET"); $text .= '$(QT_THREAD_SUFFIX)' if Project("TARGET") eq "qt" || Project("TARGET") eq "qte";
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = #$ ExpandList("HEADERS");
+SOURCES = #$ ExpandList("SOURCES");
+OBJECTS = #$ ExpandList("OBJECTS"); (Project("TARGET") eq "qt" || Project("TARGET") eq "qte") && ($text = $text . ' $(QT_MODULE_OBJ)');
+INTERFACES = #$ ExpandList("INTERFACES");
+UICDECLS = #$ ExpandList("UICDECLS");
+UICIMPLS = #$ ExpandList("UICIMPLS");
+SRCMOC = #$ ExpandList("SRCMOC");
+OBJMOC = #$ ExpandList("OBJMOC");
+#$ if (Project("TARGET") ne "qt" && Project("TARGET") ne "qte") { DisableOutput(); }
+PNG_OBJECTS = #$ ExpandList("PNG_OBJECTS");
+ZLIB_OBJECTS = #$ ExpandList("ZLIB_OBJECTS");
+FT_OBJECTS = #$ ExpandList("FT_OBJECTS");
+#$ if (Project("TARGET") ne "qt" && Project("TARGET") ne "qte") { EnableOutput(); }
+
+#${
+ my $module;
+ $t = "";
+ for $module ( split / /, $project{"MODULES"} ) {
+ $t .= "\nOBJECTS_$module = ";
+ $text = "";
+ ExpandList("OBJECTS_$module");
+ $t .= $text;
+ if ( Project("OBJMOC_$module") ) {
+ $text = "";
+ ExpandList("OBJMOC_$module");
+ $t .= " \\\n\t\t$text";
+ }
+ }
+ $text = "$t\n";
+#$}
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ #$ Expand("TMAKE_RUN_CXX_IMP");
+
+.cxx.o:
+ #$ Expand("TMAKE_RUN_CXX_IMP");
+
+.cc.o:
+ #$ Expand("TMAKE_RUN_CXX_IMP");
+
+.C.o:
+ #$ Expand("TMAKE_RUN_CXX_IMP");
+
+.c.o:
+ #$ Expand("TMAKE_RUN_CC_IMP");
+
+####### Build rules
+
+#${
+ if ( Project("SUBLIBS") ) {
+ $text = "SUBLIBS=";
+ for $m ( split / /, Project("SUBLIBS") ) {
+ $text .= "tmp/lib$m.a ";
+ }
+ $text .= "\n";
+ }
+#$}
+
+#${
+ if ( Project('TEMPLATE') eq "lib" || Project('TEMPLATE') eq "qt.t" ) {
+ $targ='$(SYSCONF_LINK_TARGET)';
+ } else {
+ if ( Config('dll') ) {
+ if ($is_unix) {
+ $targ = '$(TARGET)' . ".so";
+ } else {
+ $targ = '$(TARGET)' . ".dll";
+ $targ = "np" . $targ if Config('np');
+ }
+ } else {
+ $targ = '$(TARGET)';
+ }
+ }
+ $targ = '$(DESTDIR)'.$targ;
+ $text .= 'all: ';
+ ExpandGlue("ALL_DEPS",""," "," ");
+ $text .= $targ . "\n\n";
+ $text .= $targ . ': $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)';
+ Expand("TARGETDEPS");
+ $text .= "\n\t";
+ if ( Project('TEMPLATE') eq "lib" || Project('TEMPLATE') eq "qt.t" ) {
+ $text .= '$(SYSCONF_LINK_LIB)';
+ } else {
+ $text .= '$(SYSCONF_LINK) $(LFLAGS) ';
+ $text .= '-o '.$targ.' $(OBJECTS) $(OBJMOC) $(LIBS)';
+ }
+#$}
+
+moc: $(SRCMOC)
+
+#$ TmakeSelf();
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ #$ ExpandGlue("TMAKE_CLEAN","-rm -f "," ","");
+ -rm -f *~ core
+ #$ ExpandGlue("CLEAN_FILES","-rm -f "," ","");
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo #$ ExpandList("MODULES_BASE"); ExpandList("MODULES_PRO");
+
+listallmodules:
+ @echo #$ ExpandList("MODULES");
+
+listaddonpromodules:
+ @echo #$ ExpandList("MODULES_PRO");
+
+listaddonentmodules:
+ @echo #$ ExpandList("MODULES_PRO"); ExpandList("MODULES_ENT");
+
+
+REQUIRES=#$ $text .= Project("REQUIRES");
+
+####### Sub-libraries
+
+#${
+ if ( Project("SUBLIBS") ) {
+ for $m ( split / /, Project("SUBLIBS") ) {
+ $text .= "tmp/lib$m.a:\n\t";
+ if ( $m eq "freetype" ) {
+ $text .= '$(MAKE) -C 3rdparty/freetype2 \
+ CONFIG_MK=config$(DASHCROSS).mk OBJ_DIR=../../tmp \
+ ../../tmp/libfreetype.a'."\n";
+ } else {
+ if ( Config('embedded') ) {
+ if ( $m eq "z" ) {
+ $text .= '$(MAKE) -C 3rdparty/zlib -f Makefile$(DASHCROSS); \
+ cp 3rdparty/zlib/libz.a tmp'."\n";
+ }
+ if ( $m eq "png" ) {
+ $text .= '$(MAKE) -C 3rdparty/libpng \
+ -f scripts/makefile.linux$(DASHCROSS); \
+ cp 3rdparty/libpng/libpng.a tmp'."\n";
+ }
+ if ( $m eq "mng" ) {
+ $text .= '$(MAKE) -C 3rdparty/libmng \
+ -f makefiles/makefile.linux$(DASHCROSS); \
+ cp 3rdparty/libmng/libmng.a tmp'."\n";
+ }
+ if ( $m eq "jpeg" ) {
+ $text .= '$(MAKE) -C 3rdparty/jpeglib -f makefile.unix$(DASHCROSS); \
+ cp 3rdparty/jpeglib/libjpeg.a tmp'."\n";
+ }
+ } else {
+ $text .= $project{"MAKELIB$m"}."\n";
+ }
+ }
+
+ }
+ }
+#$}
+
+###### Combined headers
+
+#${
+ if ( Config("embedded") && Project("PRECOMPH") ) {
+ $t = "allmoc.cpp: ".Project("PRECOMPH")." ".$original_HEADERS;
+ ExpandList("HEADERS_ORIG");
+ $t.= $text;
+ $t.= "\n\techo '#include \"".Project("PRECOMPH")."\"' >allmoc.cpp";
+ $t.= "\n\t\$(CXX) -E -DQT_MOC_CPP \$(CXXFLAGS) \$(INCPATH) >allmoc.h allmoc.cpp";
+ $t.= "\n\t\$(MOC) -o allmoc.cpp allmoc.h";
+ $t.= "\n\tperl -pi -e 's{\"allmoc.h\"}{\"".Project("PRECOMPH")."\"}' allmoc.cpp";
+ $t.= "\n\trm allmoc.h";
+ $t.= "\n";
+ $text = $t;
+ }
+#$}
+
+
+####### Compile
+
+#$ BuildObj(Project("OBJECTS"),Project("SOURCES"));
+#$ BuildUicSrc(Project("INTERFACES"));
+#$ BuildObj(Project("UICOBJECTS"),Project("UICIMPLS"));
+#$ BuildMocObj(Project("OBJMOC"),Project("SRCMOC"));
+#$ BuildMocSrc(Project("HEADERS"));
+#$ BuildMocSrc(Project("SOURCES"));
+#$ BuildMocSrc(Project("UICDECLS"));
+#$ if (Project("TARGET") ne "qt" && Project("TARGET") ne "qte") { DisableOutput(); }
+#$ Project("PNG_SOURCES") && BuildObj(Project("PNG_OBJECTS"),Project("PNG_SOURCES"));
+#$ Project("ZLIB_SOURCES") && BuildObj(Project("ZLIB_OBJECTS"),Project("ZLIB_SOURCES"));
+#$ Project("FT_SOURCES") && BuildObj(Project("FT_OBJECTS"),Project("FT_SOURCES"));
+#$ if (Project("TARGET") ne "qt" && Project("TARGET") ne "qte") { EnableOutput(); }
+
+#${
+ my $module;
+ $t = "";
+ for $module ( split / /, $project{"MODULES"} ) {
+ $t .= "\n# Module $module...\n";
+ $text = ""; BuildMocObj(Project("OBJMOC_$module"),Project("SRCMOC_$module"));
+ $t .= $text;
+ $text = ""; BuildMocSrc(Project("HEADERS_$module"));
+ $t .= $text;
+ $text = ""; BuildMocSrc(Project("SOURCES_$module"));
+ $t .= $text;
+ $text = ""; BuildObj(Project("OBJECTS_$module"),Project("SOURCES_$module"));
+ $t .= $text;
+ $text = $t;
+ }
+#$}
diff --git a/quickexec/Makefile.in b/quickexec/Makefile.in
new file mode 100644
index 0000000..514e6cc
--- a/dev/null
+++ b/quickexec/Makefile.in
@@ -0,0 +1,101 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS)
+INCPATH =
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) -ldl -lqpe $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = ../bin/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = quickexec
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS =
+SOURCES = quickexec.cpp
+OBJECTS = quickexec.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(TARGET)
+
+$(DESTDIR)$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK) $(LFLAGS) -o $(DESTDIR)$(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
+
+moc: $(SRCMOC)
+
+tmake:
+ tmake quickexec.pro
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+quickexec.o: quickexec.cpp
+
+
diff --git a/quickexec/johns/README b/quickexec/johns/README
new file mode 100644
index 0000000..1af84dc
--- a/dev/null
+++ b/quickexec/johns/README
@@ -0,0 +1,21 @@
+
+Compile qinit_srv.c to qinit_srv as usual
+Compile your applications at shared libraries instead of as executables:
+ eg: gcc test.c -o test.so -shared
+Make a symbolic link from qinit_srv to the name of the application:
+ eg: ln -s qinit_srv test
+Now make sure 'test' (The symlink) and 'test.so' (the shared library version of the app) are together.
+When you run ./test it will load test.so and run it just like you were running the application for real.
+There will be a qinit_srv process created the first time you run a program this way.
+
+How it works:
+
+qinit_srv checks to see if there is already a server, if not it starts as a server which runs in the background as a deamon.
+If it's a server it loads all the libraries listed in the library.lst file.
+It then waits for signals to be sent to it which tell it to fork itself and load shared libraries and run them.
+If it decides it's not the server, it sends a signal to the server to run the given command.
+The server then executes a shared object file of whatever name the original process is invoked as (argv[0], the symlink trick)
+The other process waits until the forked server finishes and signals the original process that it as finished and to return
+
+
+
diff --git a/quickexec/johns/library.lst b/quickexec/johns/library.lst
new file mode 100644
index 0000000..42f310b
--- a/dev/null
+++ b/quickexec/johns/library.lst
@@ -0,0 +1,2 @@
+libqte.so
+libqpe.so
diff --git a/quickexec/johns/qinit_srv.c b/quickexec/johns/qinit_srv.c
new file mode 100644
index 0000000..03c6cd3
--- a/dev/null
+++ b/quickexec/johns/qinit_srv.c
@@ -0,0 +1,242 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+#include <dlfcn.h>
+
+
+#define PID_FILE "/tmp/qinit1.pid"
+#define CMD_FILE "/tmp/qinit1.cmd"
+#define RET_FILE "/tmp/qinit1.ret"
+
+
+static int librariesFinishedLoading = 0;
+static void **handles = NULL;
+static int handleCount = 0;
+
+
+static void savePid( void );
+static int loadPid( void );
+void saveRetVal( int retVal );
+int loadRetVal( void );
+static void saveCmd( int callingPid, int argc, char *argv[] );
+static int execCmd( void );
+static void loadLibraries( char *listFile );
+static void signalHandler( int signal );
+static void finishedHandler( int signal );
+static void cleanUpHandler( int signal );
+static void cleanUp( void );
+
+
+int main( int argc, char *argv[] ) {
+ FILE *fh;
+
+ // See if there is already a server running
+ if ( ( fh = fopen( PID_FILE, "r" ) ) != NULL ) {
+ // There appears to already be a server running
+ fclose( fh );
+ // Install handler that tells us when the process created by the server has finished
+ signal( SIGUSR2, finishedHandler );
+ // Send our command to the server (saved to a file)
+ saveCmd( getpid(), argc, argv );
+ // Send a signal to the server to run our command
+ kill( loadPid(), SIGUSR1 );
+ // Wait for the process created by the server to terminate
+ for (;;)
+ sleep( 1 ); // Will eventually terminate when the SIGUSER2 signal is sent to us by the server
+ }
+
+ // Send the server to the background
+ daemon( 1, 1 );
+
+ // Save the process number of this process somewhere (in a file)
+ savePid();
+
+ // Wait for signal used to let us know when to fork to run commands
+ signal( SIGUSR1, signalHandler );
+ signal( SIGTERM, cleanUpHandler );
+ signal( SIGINT, cleanUpHandler );
+ signal( SIGABRT, cleanUpHandler );
+ signal( SIGQUIT, cleanUpHandler );
+
+ // Iterate library list file and dynamically load at runtime
+ // the library files from the list
+ if ( argc > 1 )
+ loadLibraries( argv[1] ); // Use a library list file specified from command line
+ else
+ loadLibraries( "library.lst" ); // Use the default library list file
+
+ // Run the given command
+ signalHandler( SIGUSR1 );
+
+ // Keep waiting for signals infinitely that tell us to fork
+ for (;;)
+ wait( NULL ); // Wait for child processes to die or signals to be sent to us
+
+ cleanUp();
+
+ return 0;
+}
+
+
+void cleanUp( void ) {
+ int i;
+
+ // Close the shared libraries we opened
+ for ( i = 0; i < handleCount; i++ )
+ dlclose( handles[ i ] );
+ free( handles );
+
+ // Unlink the PID_FILE file
+ remove( PID_FILE );
+}
+
+
+void savePid( void ) {
+ int pid = getpid();
+ FILE *fh = fopen( PID_FILE, "w");
+ if ( !fh )
+ fputs("error writing pid to file " PID_FILE, stderr), exit(1);
+ fprintf( fh, "%i", pid );
+ fclose( fh );
+}
+
+
+int loadPid( void ) {
+ int pid;
+ FILE *fh = fopen( PID_FILE, "r" );
+ if ( !fh )
+ fputs("error loading pid from file " PID_FILE, stderr), exit(1);
+ fscanf( fh, "%i", &pid );
+ fclose( fh );
+ return pid;
+}
+
+
+void saveRetVal( int retVal ) {
+ FILE *fh = fopen( RET_FILE, "w");
+ if ( !fh )
+ fputs("error writing retVal to file " RET_FILE, stderr), exit(1);
+ fprintf( fh, "%i", retVal );
+ fclose( fh );
+}
+
+
+int loadRetVal( void ) {
+ int retVal;
+ FILE *fh = fopen( RET_FILE, "r" );
+ if ( !fh )
+ fputs("error loading retVal from file " RET_FILE, stderr), exit(1);
+ fscanf( fh, "%i", &retVal );
+ fclose( fh );
+ return retVal;
+}
+
+
+void saveCmd( int callingPid, int argc, char *argv[] ) {
+ int i;
+ FILE *fh = fopen( CMD_FILE, "w" );
+ if ( !fh )
+ fputs("error saving arg list to file " CMD_FILE, stderr), exit(1);
+ fprintf( fh, "%i\n", callingPid );
+ fprintf( fh, "%s.so", argv[0] );
+ for ( i = 0; i < argc; i++ )
+ fprintf( fh, "\n%s", argv[i] );
+ fclose( fh );
+}
+
+
+int execCmd( void ) {
+ int callingPid;
+ char sharedObject[128];
+ int argc;
+ char argv[128][128];
+ int (*childMain)( int argc, char *argv[] );
+ char *error;
+ void *handle;
+ int retVal = 0;
+
+ // Get the name of the file to dlopen and the arguments to pass (from a file)
+ FILE *fh = fopen( CMD_FILE, "r" );
+ fscanf( fh, "%i\n", &callingPid );
+ fgets( sharedObject, 128, fh );
+ sharedObject[strlen( sharedObject ) - 1] = '\0';
+ for ( argc = 0; fgets( argv[argc], 128, fh ); argc++)
+ argv[argc][strlen( argv[argc] ) - 1] = '\0';
+ fclose( fh );
+
+ // Open the shared object of what we want to execute
+ handle = dlopen( sharedObject, RTLD_LAZY );
+ if ( !handle )
+ fputs( dlerror(), stderr ), kill( callingPid, SIGUSR2 ), exit( 1 );
+
+ // Find main symbol and jump to it
+ childMain = dlsym( handle, "main" );
+ if ( ( error = dlerror() ) != NULL )
+ fputs( error, stderr ), kill( callingPid, SIGUSR2 ), exit( 1 );
+ retVal = (*childMain)( argc, (char**)argv );
+
+ // Notify caller that we have finished
+ saveRetVal( retVal );
+ kill( callingPid, SIGUSR2 );
+
+ // When we are done, close the shared object
+ dlclose( handle );
+ return retVal;
+}
+
+
+void finishedHandler( int signal ) {
+ // We have been notified of the completion of the task
+ exit( loadRetVal() );
+}
+
+
+void cleanUpHandler( int signal ) {
+ // Cleanup and exit if we have been told to quit
+ cleanUp();
+ exit(1);
+}
+
+
+void signalHandler( int signal ) {
+ //printf("got a signal of %i\n", signal );
+
+ if ( fork() == 0 ) {
+ // We are the child process
+
+/*
+ while ( librariesFinishedLoading != 1 ) {
+ printf("waiting for libraries to load\n");
+ sleep(1);
+ }
+*/
+ // Close file handles and open others etc
+
+ // Execute the command and return when done
+ exit( execCmd() );
+ }
+
+ // Parent process, just continue
+ sleep( 1 ); // Need to yield to child process
+}
+
+
+void loadLibraries( char *listFile ) {
+ FILE *fh = fopen( listFile, "r" );
+ char line[1024];
+ if ( !fh )
+ fputs("error opening library list file", stderr), exit(1);
+ while ( fgets( line, 1024, fh ) ) {
+ line[strlen( line ) - 1] = '\0';
+ printf("loading library: --%s--\n", line);
+ handleCount++;
+ handles = realloc( handles, handleCount * sizeof( void * ) );
+ handles[ handleCount - 1 ] = dlopen( line, RTLD_NOW );
+ if ( !handles[ handleCount - 1 ] )
+ fputs( dlerror(), stderr ), exit( 1 );
+ }
+ fclose( fh );
+ librariesFinishedLoading = 1;
+}
+
diff --git a/quickexec/johns/so_stub.c b/quickexec/johns/so_stub.c
new file mode 100644
index 0000000..fe71f9c
--- a/dev/null
+++ b/quickexec/johns/so_stub.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+
+
+int main( int argc, char *argv[] ) {
+ char module[1024];
+ int (*loadedMain)( int argc, char *argv[] );
+ char *error;
+ int retVal = 0;
+ void *handle;
+ strcpy( module, argv[0] );
+ strcat( module, ".so" );
+ if ( !(handle = dlopen( module, RTLD_LAZY ) ) )
+ fputs( dlerror(), stderr ), exit( 1 );
+ loadedMain = dlsym( handle, "main" );
+ if ( ( error = dlerror() ) != NULL )
+ fputs( error, stderr ), exit( 1 );
+ retVal = (*loadedMain)( argc, argv );
+ dlclose( handle );
+ return retVal;
+}
+
diff --git a/quickexec/qpe-quickexec.control b/quickexec/qpe-quickexec.control
new file mode 100644
index 0000000..e93b9b0
--- a/dev/null
+++ b/quickexec/qpe-quickexec.control
@@ -0,0 +1,11 @@
+Files: bin/quickexec
+Priority: required
+Section: qpe/applications
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Arch: iPAQ
+Version: $QPE_VERSION-3
+Depends: qpe-base ($QPE_VERSION)
+Description: Calculator
+ A multi-function calculator for the Qtopia environment.
+ Includes units conversion.
diff --git a/quickexec/quickexec.cpp b/quickexec/quickexec.cpp
new file mode 100644
index 0000000..772ab4c
--- a/dev/null
+++ b/quickexec/quickexec.cpp
@@ -0,0 +1,98 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dlfcn.h>
+
+#define QUICKEXEC "/tmp/.quickexec"
+
+#include <signal.h>
+#include <sys/wait.h>
+
+void sigchildhandler(int) {
+ wait(0);
+}
+
+int exec( const char *lib, int argc, char** argv )
+{
+ setpgid(0,0);
+// printf("loadlib %s, argc=%d\n", lib, argc );
+ void *handle = dlopen ( lib, RTLD_LAZY);
+ if (!handle) {
+ fprintf( stderr, "%s\n", dlerror());
+ exit(1);
+ }
+ typedef int (*Mainfunc)(int, char**);
+ Mainfunc mainfunc;
+ mainfunc = (Mainfunc) dlsym(handle, "main");
+ char *error;
+ if ((error = dlerror()) != NULL) {
+ fprintf (stderr, "%s\n", error);
+ exit(1);
+ }
+ (*mainfunc)(argc,argv);
+ return 0;
+}
+
+#define BUFFER_SIZE 1024
+int main( int argc, char** argv )
+{
+ signal( SIGCHLD, sigchildhandler );
+ (void) unlink( QUICKEXEC );
+ if ( mkfifo( QUICKEXEC, S_IFIFO | S_IWUSR | S_IRUSR ) == -1 ) {
+ perror( QUICKEXEC );
+ exit(1);
+ }
+
+ if ( argc > 1 && fork() == 0 )
+ return exec( argv[1], argc-2, argc > 2 ? argv+2 : 0 );
+
+ char buf[BUFFER_SIZE];
+ int p = 0;
+ int r;
+ int fd = open( QUICKEXEC, O_RDONLY );
+ if ( fd == -1 ) {
+ perror( QUICKEXEC );
+ exit(1);
+ }
+ for ( ;; ) {
+ r = read( fd, buf+p, BUFFER_SIZE-p );
+ p += r;
+ if ( r == 0 || p >= BUFFER_SIZE - 1 ) {
+ buf[p] = '\0';
+ close ( fd );
+ if ( fork() == 0 ) {
+ int argc = -1;
+ int i = 0;
+ int k = 0;
+ for ( i = 0; i <= p; i++ )
+ if ( buf[i] == '\0' )
+ argc++;
+ char** argv = new char*[argc];
+ for ( i = 0; i < p; i++ ) {
+ if ( buf[i] == '\0' )
+ argv[k++]=buf+i+1;
+ }
+ return exec( buf, argc, argv );
+ }
+ p = 0;
+ fd = open( QUICKEXEC, O_RDONLY );
+ }
+ }
+ return 0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/quickexec/quickexec.pro b/quickexec/quickexec.pro
new file mode 100644
index 0000000..80fc945
--- a/dev/null
+++ b/quickexec/quickexec.pro
@@ -0,0 +1,6 @@
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = ../bin
+HEADERS =
+SOURCES = quickexec.cpp
+LIBS += -ldl -lqpe
diff --git a/root/HOWTO-NewPPP b/root/HOWTO-NewPPP
new file mode 100644
index 0000000..4de0cc8
--- a/dev/null
+++ b/root/HOWTO-NewPPP
@@ -0,0 +1,149 @@
+Qtopia now supports PPP connections to the handheld from both
+Linux and Windows systems. This means you can use all the usual
+TCP/IP software such as Telnet, SSH, FTP, and HTTP to communicate
+between the desktop and handheld. This facility is used in the
+synchronization framework.
+
+
+Creating a unattended PPP connection.
+
+On trying to create a connection between a Windows 2000 box and the IPaq, it
+was discovered that there was a strange issue with the Direct Connection
+driver. It caused problems on opening up a terminal to do the login.
+Furthermore, scripting appeared to be broken, at least on Service Pack 2.
+So we needed to come up with an alternate way to make a connection, not
+involving a login.
+
+On a direct cable connection, Windows 2000 sends CLIENT over the line,
+expecting something from the server to be sent back before it will start its
+PPP communication. What follows is what are instructions for modifying the
+IPaq to accept Windows 2000 connections, Configuring Windows 2000 to connect
+to the IPaq, and the modifications that need to be done to a Linux machine
+to connect to the IPaq again. I'll finish it off with a few known issues.
+
+Setting up the IPaq (Server).
+
+Setting up the IPaq is fairly painless. Just install the ppp.ipk
+If that is not an option, here are the relevant changes you need to make.
+
+1. First back up these files: /etc/hosts, /etc/ppp/options, and /etc/inittab.
+2. Make you hosts file look like the following. Note that IPaq will be the
+ address of your device and desktop the IP of you machine.
+ #/etc/hosts
+ 127.0.0.1 localhost familiar
+ 192.168.1.101 ipaq
+ 192.168.1.100 desktop
+3. Create a /etc/ppp/scripts directory.
+4. Add the file, winclient.chat, to /etc/ppp/scripts. It will look like:
+ # /etc/ppp/options/winclient.chat
+ TIMEOUT 3600
+ CLIENT CLIENTSERVER\c
+5. Make your /etc/ppp/options file look like this, you may have
+ to replace the connect line with the proper chat location:
+ #/etc/ppp/options
+ connect '/usr/sbin/chat -v -s -f /etc/ppp/scripts/winclient.chat'
+ -detach
+ asyncmap 0
+ crtscts
+ local
+ lock
+ /dev/ttySA0
+ 115200
+ ipaq:desktop
+6. Now you have to edit you /etc/inittab, since this is a fairly large file,
+ I will tell you what to change. At the bottom of the file there is
+ probably a reference to a getty process that runs on the serial port that
+ looks something like this.
+ T0:23:respawn:/sbin/getty -L ttySA0 115200 vt100
+ We want to pppd running on this port too, and we can't have getty running
+ at the same time. So remove the above getty line and add these two lines.
+ T0:45:respawn:/sbin/getty -L ttySA0 115200 vt100
+ pd:23:respawn:/usr/sbin/pppd /dev/ttySA0 -detach
+ What this does is create a pppd process that will listen at run levels 2 and
+ 3. And a getty process at run levels 4 and 5. This is an insurance method.
+ This way you can use the terminal in the Qtopia Environment and change
+ the run level to run a getty on the serial console in case you would need
+ the it.
+7. Okay that's it, either have init re-read the file by running init q or
+ reboot the IPaq, which ever is more convenient.
+
+Setting Up the Windows 2000 (Client)
+
+Setting up the Windows 2000 connection is also fairly painless. Follow the steps
+below, it doesn't hurt to be in the Administrator group. First we need to
+make sure that Windows 2000 knows that you want a serial connection. While the
+New Connection Wizard will normally allow you to pick the correct port,
+sometimes it won't. To avoid problems, we'll install it ourselves.
+
+To install the "serial cradle"
+1. Load up the Control Panel (Select Settings*Control Panel from the Start Menu)
+2. Select Phones and Modems.
+3. Select the Modem Tab and then click the New... Button.
+4. In the Dialog that pops up, check the "Don't Detect I will select from
+ a list" option.
+5. In the standard modem types group, select the Communications Cable Between
+ Two Computers. Then click next.
+6. Select the COM port that your IPaq is connected to, then click Finish.
+
+Now the connection can be made.
+1. Select Start*Settings*Network and Dial-Up Connections
+2. Select "Make New Connection". This fires up the New Connection Wizard.
+3. In the wizard that shows up, select next to get past the introductory screen
+4. Select "Connect Directly to Another Computer", then click "Next".
+5. Select the COM port that your IPaq is connected to, then click "Next".
+6. Enter a meaningful name for your newly created connection and then click
+ "Finish".
+7. You will then be presented with a dialog asking for a user name and password
+ Just click cancel.
+8. Right click on your new connection and select properties.
+9. Click on the "Configure" button in the General tab.
+10. Choose the proper connection speed (in this case 115200)
+11. Uncheck the "Enable Hardware Flow Control" option.
+12. Close the Modem Configuration Dialog by clicking Ok
+13. In the Options Tab, uncheck the "Prompt for Name, Password, certificate,
+ etc." option.
+14. In the Networking Tab, uncheck the "File and Printer Sharing for Microsoft
+ Networks" and "Client for Microsoft Networks" options. In other words, only
+ the "Internet Protocol(TCP/IP)" should be checked.
+15. You are done, click "Ok".
+
+Select your new connection and it a progress dialog should show up, and soon your
+Windows 2000 machine and the IPaq are happily passing PPP frames back and
+fourth.
+
+Setting up a Linux Box (Client)
+
+Since we've changed the way the IPaq deals with connections, we also need to
+change the way a Linux client would connect to the IPaq. Basically, the options
+file needs to be changed. We also need to emulate Windows 2000's need to emit
+CLIENT at the beginning. Here is the chat script for that, which I would
+recommend putting in /etc/ppp/scripts as winserver.chat
+ #/etc/ppp/scripts/winserver.chat
+ TIMEOUT 10
+ '' CLIENT\c
+
+Here is the new peers file for the Linux client.
+ #/etc/ppp/peers/ipaq
+ -detach
+ local
+ nocrtscts
+ lock
+ /dev/modem
+ connect '/usr/bin/chat -f /etc/ppp/scripts/winserver.chat'
+ 115200
+Please note that /dev/modem is a symlink that whatever COM port your IPaq is
+on. Replace it appropriately, or create the symlink yourself. After that, you
+should be able to just type 'pppd call ipaq' and play happily with your IPaq.
+
+Known Issues:
+Here are a few known issues that aren't addressed in this document, several
+are on the shortcomings of the Windows 2000 Connection.
+* If your screen blanks out, pppd suspends itself and the Windows 2000 ppp
+ implementation will die, however when it awakens, pppd on the IPaq will
+ be fine and won't exit, making it impossible to run connect again.
+ The best workaround for this is to disable screen blanking by uncheck-ing
+ the "Blank after some inactivity" option in the Light Settings in Qt
+ Palmtop Settings tab. If this does happen to you, the path to least
+ resistance is to reboot.
+* When the direct cable connection is enabled on Windows 2000, the routing table
+ is changed, effectively making it impossible to use the Internet.
diff --git a/root/README b/root/README
new file mode 100644
index 0000000..03611d6
--- a/dev/null
+++ b/root/README
@@ -0,0 +1,3 @@
+The files here are files needed to build missing packages for the iPAQ Familiar
+distribution. Since CVS cannot store device files, you will need to run "makeptydevs"
+script (as root) if you want to make the ptydevs package.
diff --git a/root/etc/hosts b/root/etc/hosts
new file mode 100644
index 0000000..c489672
--- a/dev/null
+++ b/root/etc/hosts
@@ -0,0 +1,3 @@
+127.0.0.1 localhost familiar
+192.168.1.101 ipaq
+192.168.1.100 desktop
diff --git a/root/etc/inittab b/root/etc/inittab
new file mode 100644
index 0000000..092694b
--- a/dev/null
+++ b/root/etc/inittab
@@ -0,0 +1,34 @@
+# /etc/inittab
+# The default runlevel.
+id:2:initdefault:
+
+# Boot-time system configuration/initialization script.
+# This is run first except when booting in emergency (-b) mode.
+si::sysinit:/etc/init.d/rcS
+
+# What to do in single-user mode.
+~~:S:wait:/sbin/sulogin
+
+# /etc/init.d executes the S and K scripts upon change
+# of runlevel.
+#
+# Runlevel 0 is halt.
+# Runlevel 1 is single-user.
+# Runlevels 2-5 are multi-user.
+# Runlevel 6 is reboot.
+
+l0:0:wait:/etc/init.d/rc 0
+l1:1:wait:/etc/init.d/rc 1
+l2:2:wait:/etc/init.d/rc 2
+l6:6:wait:/etc/init.d/rc 6
+# Normally not reached, but fallthrough in case of emergency.
+z6:6:respawn:/bin/sh
+
+# What to do when the power fails/returns.
+pf::powerwait:/etc/init.d/powerfail start
+pn::powerfailnow:/etc/init.d/powerfail now
+po::powerokwait:/etc/init.d/powerfail stop
+
+T0:45:respawn:/sbin/getty -L ttySA0 115200 vt100
+pd:23:respawn:/usr/sbin/pppd /dev/ttySA0 -detach
+
diff --git a/root/etc/ppp/options b/root/etc/ppp/options
new file mode 100644
index 0000000..3ddcac8
--- a/dev/null
+++ b/root/etc/ppp/options
@@ -0,0 +1,11 @@
+#/etc/ppp/options
+connect '/usr/sbin/chat -f /etc/ppp/scripts/winclient.chat'
+idle 10
+-detach
+asyncmap 0
+crtscts
+local
+lock
+/dev/ttySA0
+115200
+ipaq:desktop
diff --git a/root/etc/ppp/scripts/winclient.chat b/root/etc/ppp/scripts/winclient.chat
new file mode 100644
index 0000000..52d4d9e
--- a/dev/null
+++ b/root/etc/ppp/scripts/winclient.chat
@@ -0,0 +1,3 @@
+# /etc/ppp/options/winclient.chat
+TIMEOUT 3600
+CLIENT CLIENTSERVER\c
diff --git a/root/makeptydevs b/root/makeptydevs
new file mode 100755
index 0000000..723bbc0
--- a/dev/null
+++ b/root/makeptydevs
@@ -0,0 +1,8 @@
+#!/bin/sh
+mkdir dev
+for i in 0 1 2 3 4 5 6 7 8 9
+do
+ mknod dev/ptyp$i c 2 $i
+ mknod dev/ttyp$i c 2 $i
+ chmod a+rw dev/ptyp$i dev/ttyp$i
+done
diff --git a/root/ptydevs.control b/root/ptydevs.control
new file mode 100644
index 0000000..8d9146c
--- a/dev/null
+++ b/root/ptydevs.control
@@ -0,0 +1,9 @@
+Files: ipaq/dev
+Priority: optional
+Section: base
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Version: 1.0.0-5
+Arch: iPAQ
+Description: Pseudotty devices
+ These files are not included in the Familiar libc6 package.
+ This package contains just a few pty/tty pairs.
diff --git a/root/qpe-ppp.control b/root/qpe-ppp.control
new file mode 100644
index 0000000..7910c37
--- a/dev/null
+++ b/root/qpe-ppp.control
@@ -0,0 +1,8 @@
+Files: ipaq/etc
+Priority: optional
+Section: qpe/system
+Maintainer: Trenton Schulz <twschulz@trolltech.com>
+Architecture: arm
+Version: 1.0
+Depends: none
+Description: PPP configuration file needed for Windows 2000 and syncing
diff --git a/root/timezones.control b/root/timezones.control
new file mode 100644
index 0000000..c209d7c
--- a/dev/null
+++ b/root/timezones.control
@@ -0,0 +1,9 @@
+Files: ipaq/usr/share/zoneinfo
+Priority: optional
+Section: base
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Version: 1.0.0-6
+Description: Timezone data
+ These files are not included in the Familiar libc6 package.
+ This package contains just the non-redundant parts, and uses
+ about 180K with jffs2.
diff --git a/root/usr/share/zoneinfo/Africa/Abidjan b/root/usr/share/zoneinfo/Africa/Abidjan
new file mode 100644
index 0000000..c694444
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Abidjan
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Accra b/root/usr/share/zoneinfo/Africa/Accra
new file mode 100644
index 0000000..15da5a1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Accra
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Addis_Ababa b/root/usr/share/zoneinfo/Africa/Addis_Ababa
new file mode 100644
index 0000000..8117b1e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Addis_Ababa
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Algiers b/root/usr/share/zoneinfo/Africa/Algiers
new file mode 100644
index 0000000..8e14a6e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Algiers
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Asmera b/root/usr/share/zoneinfo/Africa/Asmera
new file mode 100644
index 0000000..8117b1e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Asmera
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Bamako b/root/usr/share/zoneinfo/Africa/Bamako
new file mode 100644
index 0000000..7eb10d6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Bamako
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Bangui b/root/usr/share/zoneinfo/Africa/Bangui
new file mode 100644
index 0000000..ba5c1ff
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Bangui
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Banjul b/root/usr/share/zoneinfo/Africa/Banjul
new file mode 100644
index 0000000..2ba53de
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Banjul
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Bissau b/root/usr/share/zoneinfo/Africa/Bissau
new file mode 100644
index 0000000..bb81244
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Bissau
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Blantyre b/root/usr/share/zoneinfo/Africa/Blantyre
new file mode 100644
index 0000000..5cccdd2
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Blantyre
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Brazzaville b/root/usr/share/zoneinfo/Africa/Brazzaville
new file mode 100644
index 0000000..a82f117
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Brazzaville
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Bujumbura b/root/usr/share/zoneinfo/Africa/Bujumbura
new file mode 100644
index 0000000..4637957
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Bujumbura
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Cairo b/root/usr/share/zoneinfo/Africa/Cairo
new file mode 100644
index 0000000..d54e753
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Cairo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Casablanca b/root/usr/share/zoneinfo/Africa/Casablanca
new file mode 100644
index 0000000..1936a52
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Casablanca
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Ceuta b/root/usr/share/zoneinfo/Africa/Ceuta
new file mode 100644
index 0000000..ae84517
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Ceuta
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Conakry b/root/usr/share/zoneinfo/Africa/Conakry
new file mode 100644
index 0000000..719ed6e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Conakry
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Dakar b/root/usr/share/zoneinfo/Africa/Dakar
new file mode 100644
index 0000000..8282e66
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Dakar
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Dar_es_Salaam b/root/usr/share/zoneinfo/Africa/Dar_es_Salaam
new file mode 100644
index 0000000..1127702
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Dar_es_Salaam
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Djibouti b/root/usr/share/zoneinfo/Africa/Djibouti
new file mode 100644
index 0000000..87ac9d4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Djibouti
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Douala b/root/usr/share/zoneinfo/Africa/Douala
new file mode 100644
index 0000000..d4b0cb6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Douala
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/El_Aaiun b/root/usr/share/zoneinfo/Africa/El_Aaiun
new file mode 100644
index 0000000..318818f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/El_Aaiun
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Freetown b/root/usr/share/zoneinfo/Africa/Freetown
new file mode 100644
index 0000000..e5b3c89
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Freetown
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Gaborone b/root/usr/share/zoneinfo/Africa/Gaborone
new file mode 100644
index 0000000..826df17
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Gaborone
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Harare b/root/usr/share/zoneinfo/Africa/Harare
new file mode 100644
index 0000000..85443c7
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Harare
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Johannesburg b/root/usr/share/zoneinfo/Africa/Johannesburg
new file mode 100644
index 0000000..8d25cbf
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Johannesburg
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Kampala b/root/usr/share/zoneinfo/Africa/Kampala
new file mode 100644
index 0000000..adb24f0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Kampala
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Khartoum b/root/usr/share/zoneinfo/Africa/Khartoum
new file mode 100644
index 0000000..8c883f3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Khartoum
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Kigali b/root/usr/share/zoneinfo/Africa/Kigali
new file mode 100644
index 0000000..4ec1985
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Kigali
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Kinshasa b/root/usr/share/zoneinfo/Africa/Kinshasa
new file mode 100644
index 0000000..a3577f2
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Kinshasa
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Lagos b/root/usr/share/zoneinfo/Africa/Lagos
new file mode 100644
index 0000000..e3b09bb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Lagos
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Libreville b/root/usr/share/zoneinfo/Africa/Libreville
new file mode 100644
index 0000000..b6159b9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Libreville
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Lome b/root/usr/share/zoneinfo/Africa/Lome
new file mode 100644
index 0000000..0f283fc
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Lome
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Luanda b/root/usr/share/zoneinfo/Africa/Luanda
new file mode 100644
index 0000000..7eed979
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Luanda
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Lubumbashi b/root/usr/share/zoneinfo/Africa/Lubumbashi
new file mode 100644
index 0000000..4637957
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Lubumbashi
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Lusaka b/root/usr/share/zoneinfo/Africa/Lusaka
new file mode 100644
index 0000000..5dc9c01
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Lusaka
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Malabo b/root/usr/share/zoneinfo/Africa/Malabo
new file mode 100644
index 0000000..41b1b70
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Malabo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Maputo b/root/usr/share/zoneinfo/Africa/Maputo
new file mode 100644
index 0000000..1c05821
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Maputo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Maseru b/root/usr/share/zoneinfo/Africa/Maseru
new file mode 100644
index 0000000..4bf923f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Maseru
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Mbabane b/root/usr/share/zoneinfo/Africa/Mbabane
new file mode 100644
index 0000000..7de863d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Mbabane
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Mogadishu b/root/usr/share/zoneinfo/Africa/Mogadishu
new file mode 100644
index 0000000..5dbb911
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Mogadishu
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Monrovia b/root/usr/share/zoneinfo/Africa/Monrovia
new file mode 100644
index 0000000..bdcecc8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Monrovia
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Nairobi b/root/usr/share/zoneinfo/Africa/Nairobi
new file mode 100644
index 0000000..356fe05
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Nairobi
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Ndjamena b/root/usr/share/zoneinfo/Africa/Ndjamena
new file mode 100644
index 0000000..9b3d609
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Ndjamena
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Niamey b/root/usr/share/zoneinfo/Africa/Niamey
new file mode 100644
index 0000000..7d244f0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Niamey
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Nouakchott b/root/usr/share/zoneinfo/Africa/Nouakchott
new file mode 100644
index 0000000..6ede67a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Nouakchott
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Ouagadougou b/root/usr/share/zoneinfo/Africa/Ouagadougou
new file mode 100644
index 0000000..c3b992b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Ouagadougou
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Porto-Novo b/root/usr/share/zoneinfo/Africa/Porto-Novo
new file mode 100644
index 0000000..52807e6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Porto-Novo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Sao_Tome b/root/usr/share/zoneinfo/Africa/Sao_Tome
new file mode 100644
index 0000000..b16e096
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Sao_Tome
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Timbuktu b/root/usr/share/zoneinfo/Africa/Timbuktu
new file mode 100644
index 0000000..801aef8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Timbuktu
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Tripoli b/root/usr/share/zoneinfo/Africa/Tripoli
new file mode 100644
index 0000000..5ed4348
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Tripoli
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Tunis b/root/usr/share/zoneinfo/Africa/Tunis
new file mode 100644
index 0000000..ad09f4a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Tunis
Binary files differ
diff --git a/root/usr/share/zoneinfo/Africa/Windhoek b/root/usr/share/zoneinfo/Africa/Windhoek
new file mode 100644
index 0000000..279b871
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Africa/Windhoek
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Adak b/root/usr/share/zoneinfo/America/Adak
new file mode 100644
index 0000000..a62ef50
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Adak
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Anchorage b/root/usr/share/zoneinfo/America/Anchorage
new file mode 100644
index 0000000..d680008
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Anchorage
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Anguilla b/root/usr/share/zoneinfo/America/Anguilla
new file mode 100644
index 0000000..dfe150d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Anguilla
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Antigua b/root/usr/share/zoneinfo/America/Antigua
new file mode 100644
index 0000000..c892b75
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Antigua
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Araguaina b/root/usr/share/zoneinfo/America/Araguaina
new file mode 100644
index 0000000..1c4cba0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Araguaina
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Aruba b/root/usr/share/zoneinfo/America/Aruba
new file mode 100644
index 0000000..869557b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Aruba
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Asuncion b/root/usr/share/zoneinfo/America/Asuncion
new file mode 100644
index 0000000..2dfb667
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Asuncion
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Barbados b/root/usr/share/zoneinfo/America/Barbados
new file mode 100644
index 0000000..17a2e74
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Barbados
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Belem b/root/usr/share/zoneinfo/America/Belem
new file mode 100644
index 0000000..0759768
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Belem
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Belize b/root/usr/share/zoneinfo/America/Belize
new file mode 100644
index 0000000..d53fc69
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Belize
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Boa_Vista b/root/usr/share/zoneinfo/America/Boa_Vista
new file mode 100644
index 0000000..d2de98a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Boa_Vista
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Bogota b/root/usr/share/zoneinfo/America/Bogota
new file mode 100644
index 0000000..9a692e2
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Bogota
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Boise b/root/usr/share/zoneinfo/America/Boise
new file mode 100644
index 0000000..8bb78b8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Boise
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Buenos_Aires b/root/usr/share/zoneinfo/America/Buenos_Aires
new file mode 100644
index 0000000..49d001d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Buenos_Aires
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Cambridge_Bay b/root/usr/share/zoneinfo/America/Cambridge_Bay
new file mode 100644
index 0000000..464287e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Cambridge_Bay
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Cancun b/root/usr/share/zoneinfo/America/Cancun
new file mode 100644
index 0000000..a51240f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Cancun
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Caracas b/root/usr/share/zoneinfo/America/Caracas
new file mode 100644
index 0000000..c99e1db
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Caracas
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Catamarca b/root/usr/share/zoneinfo/America/Catamarca
new file mode 100644
index 0000000..e5618fe
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Catamarca
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Cayenne b/root/usr/share/zoneinfo/America/Cayenne
new file mode 100644
index 0000000..9e2658d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Cayenne
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Cayman b/root/usr/share/zoneinfo/America/Cayman
new file mode 100644
index 0000000..52f17c9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Cayman
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Chicago b/root/usr/share/zoneinfo/America/Chicago
new file mode 100644
index 0000000..cca75b7
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Chicago
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Chihuahua b/root/usr/share/zoneinfo/America/Chihuahua
new file mode 100644
index 0000000..43a34cf
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Chihuahua
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Cordoba b/root/usr/share/zoneinfo/America/Cordoba
new file mode 100644
index 0000000..4525957
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Cordoba
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Costa_Rica b/root/usr/share/zoneinfo/America/Costa_Rica
new file mode 100644
index 0000000..7de5777
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Costa_Rica
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Cuiaba b/root/usr/share/zoneinfo/America/Cuiaba
new file mode 100644
index 0000000..753b5e1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Cuiaba
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Curacao b/root/usr/share/zoneinfo/America/Curacao
new file mode 100644
index 0000000..cc01892
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Curacao
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Dawson b/root/usr/share/zoneinfo/America/Dawson
new file mode 100644
index 0000000..0eb4bfb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Dawson
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Dawson_Creek b/root/usr/share/zoneinfo/America/Dawson_Creek
new file mode 100644
index 0000000..4215a8a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Dawson_Creek
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Denver b/root/usr/share/zoneinfo/America/Denver
new file mode 100644
index 0000000..e09473c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Denver
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Detroit b/root/usr/share/zoneinfo/America/Detroit
new file mode 100644
index 0000000..25448d5
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Detroit
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Dominica b/root/usr/share/zoneinfo/America/Dominica
new file mode 100644
index 0000000..f2a191b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Dominica
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Edmonton b/root/usr/share/zoneinfo/America/Edmonton
new file mode 100644
index 0000000..3d1d29b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Edmonton
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/El_Salvador b/root/usr/share/zoneinfo/America/El_Salvador
new file mode 100644
index 0000000..c84e107
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/El_Salvador
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Fortaleza b/root/usr/share/zoneinfo/America/Fortaleza
new file mode 100644
index 0000000..a9d5abd
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Fortaleza
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Glace_Bay b/root/usr/share/zoneinfo/America/Glace_Bay
new file mode 100644
index 0000000..00bc3d8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Glace_Bay
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Godthab b/root/usr/share/zoneinfo/America/Godthab
new file mode 100644
index 0000000..c18b5cd
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Godthab
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Goose_Bay b/root/usr/share/zoneinfo/America/Goose_Bay
new file mode 100644
index 0000000..1bde68e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Goose_Bay
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Grand_Turk b/root/usr/share/zoneinfo/America/Grand_Turk
new file mode 100644
index 0000000..a9c0bee
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Grand_Turk
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Grenada b/root/usr/share/zoneinfo/America/Grenada
new file mode 100644
index 0000000..6fc88ef
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Grenada
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Guadeloupe b/root/usr/share/zoneinfo/America/Guadeloupe
new file mode 100644
index 0000000..4179975
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Guadeloupe
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Guatemala b/root/usr/share/zoneinfo/America/Guatemala
new file mode 100644
index 0000000..deba6d6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Guatemala
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Guayaquil b/root/usr/share/zoneinfo/America/Guayaquil
new file mode 100644
index 0000000..9f8ee66
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Guayaquil
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Guyana b/root/usr/share/zoneinfo/America/Guyana
new file mode 100644
index 0000000..83568eb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Guyana
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Halifax b/root/usr/share/zoneinfo/America/Halifax
new file mode 100644
index 0000000..d2b2dc4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Halifax
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Havana b/root/usr/share/zoneinfo/America/Havana
new file mode 100644
index 0000000..cf1d7fc
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Havana
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Hermosillo b/root/usr/share/zoneinfo/America/Hermosillo
new file mode 100644
index 0000000..127b7a9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Hermosillo
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Indiana/Knox b/root/usr/share/zoneinfo/America/Indiana/Knox
new file mode 100644
index 0000000..f1d2c50
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Indiana/Knox
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Indiana/Marengo b/root/usr/share/zoneinfo/America/Indiana/Marengo
new file mode 100644
index 0000000..e82bde6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Indiana/Marengo
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Indiana/Vevay b/root/usr/share/zoneinfo/America/Indiana/Vevay
new file mode 100644
index 0000000..841e8bb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Indiana/Vevay
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Indianapolis b/root/usr/share/zoneinfo/America/Indianapolis
new file mode 100644
index 0000000..db7060a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Indianapolis
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Inuvik b/root/usr/share/zoneinfo/America/Inuvik
new file mode 100644
index 0000000..a628fa3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Inuvik
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Iqaluit b/root/usr/share/zoneinfo/America/Iqaluit
new file mode 100644
index 0000000..11330f6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Iqaluit
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Jamaica b/root/usr/share/zoneinfo/America/Jamaica
new file mode 100644
index 0000000..143dec5
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Jamaica
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Jujuy b/root/usr/share/zoneinfo/America/Jujuy
new file mode 100644
index 0000000..2f2d68e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Jujuy
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Juneau b/root/usr/share/zoneinfo/America/Juneau
new file mode 100644
index 0000000..b74df93
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Juneau
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/La_Paz b/root/usr/share/zoneinfo/America/La_Paz
new file mode 100644
index 0000000..b4fd346
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/La_Paz
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Lima b/root/usr/share/zoneinfo/America/Lima
new file mode 100644
index 0000000..cc16ba6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Lima
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Los_Angeles b/root/usr/share/zoneinfo/America/Los_Angeles
new file mode 100644
index 0000000..1822430
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Los_Angeles
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Louisville b/root/usr/share/zoneinfo/America/Louisville
new file mode 100644
index 0000000..502bc34
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Louisville
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Maceio b/root/usr/share/zoneinfo/America/Maceio
new file mode 100644
index 0000000..ede69b8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Maceio
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Managua b/root/usr/share/zoneinfo/America/Managua
new file mode 100644
index 0000000..9cc54a7
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Managua
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Manaus b/root/usr/share/zoneinfo/America/Manaus
new file mode 100644
index 0000000..da06e9f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Manaus
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Martinique b/root/usr/share/zoneinfo/America/Martinique
new file mode 100644
index 0000000..abe3d50
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Martinique
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Mazatlan b/root/usr/share/zoneinfo/America/Mazatlan
new file mode 100644
index 0000000..c9763f0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Mazatlan
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Mendoza b/root/usr/share/zoneinfo/America/Mendoza
new file mode 100644
index 0000000..3d15204
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Mendoza
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Menominee b/root/usr/share/zoneinfo/America/Menominee
new file mode 100644
index 0000000..f1376a9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Menominee
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Mexico_City b/root/usr/share/zoneinfo/America/Mexico_City
new file mode 100644
index 0000000..8eca065
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Mexico_City
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Miquelon b/root/usr/share/zoneinfo/America/Miquelon
new file mode 100644
index 0000000..06efe35
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Miquelon
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Montevideo b/root/usr/share/zoneinfo/America/Montevideo
new file mode 100644
index 0000000..5bcfba4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Montevideo
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Montreal b/root/usr/share/zoneinfo/America/Montreal
new file mode 100644
index 0000000..a859393
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Montreal
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Montserrat b/root/usr/share/zoneinfo/America/Montserrat
new file mode 100644
index 0000000..5ad3f89
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Montserrat
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Nassau b/root/usr/share/zoneinfo/America/Nassau
new file mode 100644
index 0000000..2dba918
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Nassau
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/New_York b/root/usr/share/zoneinfo/America/New_York
new file mode 100644
index 0000000..a1b7dc6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/New_York
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Nipigon b/root/usr/share/zoneinfo/America/Nipigon
new file mode 100644
index 0000000..46788bc
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Nipigon
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Nome b/root/usr/share/zoneinfo/America/Nome
new file mode 100644
index 0000000..3311a5e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Nome
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Noronha b/root/usr/share/zoneinfo/America/Noronha
new file mode 100644
index 0000000..f029080
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Noronha
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Panama b/root/usr/share/zoneinfo/America/Panama
new file mode 100644
index 0000000..9fbfccf
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Panama
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Pangnirtung b/root/usr/share/zoneinfo/America/Pangnirtung
new file mode 100644
index 0000000..81f8223
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Pangnirtung
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Paramaribo b/root/usr/share/zoneinfo/America/Paramaribo
new file mode 100644
index 0000000..0e7807c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Paramaribo
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Phoenix b/root/usr/share/zoneinfo/America/Phoenix
new file mode 100644
index 0000000..fb7527c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Phoenix
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Port-au-Prince b/root/usr/share/zoneinfo/America/Port-au-Prince
new file mode 100644
index 0000000..3dc1840
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Port-au-Prince
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Port_of_Spain b/root/usr/share/zoneinfo/America/Port_of_Spain
new file mode 100644
index 0000000..3a8af6f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Port_of_Spain
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Porto_Acre b/root/usr/share/zoneinfo/America/Porto_Acre
new file mode 100644
index 0000000..c338c3f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Porto_Acre
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Porto_Velho b/root/usr/share/zoneinfo/America/Porto_Velho
new file mode 100644
index 0000000..3ba7a30
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Porto_Velho
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Puerto_Rico b/root/usr/share/zoneinfo/America/Puerto_Rico
new file mode 100644
index 0000000..d0804ca
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Puerto_Rico
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Rainy_River b/root/usr/share/zoneinfo/America/Rainy_River
new file mode 100644
index 0000000..990647e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Rainy_River
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Rankin_Inlet b/root/usr/share/zoneinfo/America/Rankin_Inlet
new file mode 100644
index 0000000..24af4fa
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Rankin_Inlet
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Regina b/root/usr/share/zoneinfo/America/Regina
new file mode 100644
index 0000000..41b86b6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Regina
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Rosario b/root/usr/share/zoneinfo/America/Rosario
new file mode 100644
index 0000000..24143be
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Rosario
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Santiago b/root/usr/share/zoneinfo/America/Santiago
new file mode 100644
index 0000000..d554595
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Santiago
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Santo_Domingo b/root/usr/share/zoneinfo/America/Santo_Domingo
new file mode 100644
index 0000000..ae915b4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Santo_Domingo
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Sao_Paulo b/root/usr/share/zoneinfo/America/Sao_Paulo
new file mode 100644
index 0000000..515cc0a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Sao_Paulo
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Scoresbysund b/root/usr/share/zoneinfo/America/Scoresbysund
new file mode 100644
index 0000000..08b1c2e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Scoresbysund
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Shiprock b/root/usr/share/zoneinfo/America/Shiprock
new file mode 100644
index 0000000..e09473c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Shiprock
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/St_Johns b/root/usr/share/zoneinfo/America/St_Johns
new file mode 100644
index 0000000..a1f72ce
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/St_Johns
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/St_Kitts b/root/usr/share/zoneinfo/America/St_Kitts
new file mode 100644
index 0000000..29c8af9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/St_Kitts
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/St_Lucia b/root/usr/share/zoneinfo/America/St_Lucia
new file mode 100644
index 0000000..1d018a1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/St_Lucia
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/St_Thomas b/root/usr/share/zoneinfo/America/St_Thomas
new file mode 100644
index 0000000..3a82748
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/St_Thomas
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/St_Vincent b/root/usr/share/zoneinfo/America/St_Vincent
new file mode 100644
index 0000000..22f9307
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/St_Vincent
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Swift_Current b/root/usr/share/zoneinfo/America/Swift_Current
new file mode 100644
index 0000000..e6697e4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Swift_Current
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Tegucigalpa b/root/usr/share/zoneinfo/America/Tegucigalpa
new file mode 100644
index 0000000..3e6dc8b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Tegucigalpa
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Thule b/root/usr/share/zoneinfo/America/Thule
new file mode 100644
index 0000000..b75d375
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Thule
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Thunder_Bay b/root/usr/share/zoneinfo/America/Thunder_Bay
new file mode 100644
index 0000000..41ce0bb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Thunder_Bay
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Tijuana b/root/usr/share/zoneinfo/America/Tijuana
new file mode 100644
index 0000000..e25717b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Tijuana
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Tortola b/root/usr/share/zoneinfo/America/Tortola
new file mode 100644
index 0000000..a1b5a0c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Tortola
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Vancouver b/root/usr/share/zoneinfo/America/Vancouver
new file mode 100644
index 0000000..7b95f5f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Vancouver
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Whitehorse b/root/usr/share/zoneinfo/America/Whitehorse
new file mode 100644
index 0000000..3cefe05
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Whitehorse
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Winnipeg b/root/usr/share/zoneinfo/America/Winnipeg
new file mode 100644
index 0000000..61966f0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Winnipeg
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Yakutat b/root/usr/share/zoneinfo/America/Yakutat
new file mode 100644
index 0000000..ee9f045
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Yakutat
Binary files differ
diff --git a/root/usr/share/zoneinfo/America/Yellowknife b/root/usr/share/zoneinfo/America/Yellowknife
new file mode 100644
index 0000000..13d0026
--- a/dev/null
+++ b/root/usr/share/zoneinfo/America/Yellowknife
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/Casey b/root/usr/share/zoneinfo/Antarctica/Casey
new file mode 100644
index 0000000..48f2d29
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/Casey
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/Davis b/root/usr/share/zoneinfo/Antarctica/Davis
new file mode 100644
index 0000000..1d3b61e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/Davis
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/DumontDUrville b/root/usr/share/zoneinfo/Antarctica/DumontDUrville
new file mode 100644
index 0000000..5e51fee
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/DumontDUrville
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/Mawson b/root/usr/share/zoneinfo/Antarctica/Mawson
new file mode 100644
index 0000000..4087918
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/Mawson
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/McMurdo b/root/usr/share/zoneinfo/Antarctica/McMurdo
new file mode 100644
index 0000000..f5e3ba0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/McMurdo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/Palmer b/root/usr/share/zoneinfo/Antarctica/Palmer
new file mode 100644
index 0000000..6d23ed1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/Palmer
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/South_Pole b/root/usr/share/zoneinfo/Antarctica/South_Pole
new file mode 100644
index 0000000..f5e3ba0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/South_Pole
Binary files differ
diff --git a/root/usr/share/zoneinfo/Antarctica/Syowa b/root/usr/share/zoneinfo/Antarctica/Syowa
new file mode 100644
index 0000000..dde15a9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Antarctica/Syowa
Binary files differ
diff --git a/root/usr/share/zoneinfo/Arctic/Longyearbyen b/root/usr/share/zoneinfo/Arctic/Longyearbyen
new file mode 100644
index 0000000..571fd61
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Arctic/Longyearbyen
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Aden b/root/usr/share/zoneinfo/Asia/Aden
new file mode 100644
index 0000000..d7c09ca
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Aden
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Almaty b/root/usr/share/zoneinfo/Asia/Almaty
new file mode 100644
index 0000000..da8cda9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Almaty
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Amman b/root/usr/share/zoneinfo/Asia/Amman
new file mode 100644
index 0000000..6207825
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Amman
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Anadyr b/root/usr/share/zoneinfo/Asia/Anadyr
new file mode 100644
index 0000000..6d545e5
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Anadyr
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Aqtau b/root/usr/share/zoneinfo/Asia/Aqtau
new file mode 100644
index 0000000..6ad462e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Aqtau
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Aqtobe b/root/usr/share/zoneinfo/Asia/Aqtobe
new file mode 100644
index 0000000..88b916f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Aqtobe
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Ashkhabad b/root/usr/share/zoneinfo/Asia/Ashkhabad
new file mode 100644
index 0000000..f9167bf
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Ashkhabad
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Baghdad b/root/usr/share/zoneinfo/Asia/Baghdad
new file mode 100644
index 0000000..26c4dbd
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Baghdad
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Bahrain b/root/usr/share/zoneinfo/Asia/Bahrain
new file mode 100644
index 0000000..fc60d4c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Bahrain
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Baku b/root/usr/share/zoneinfo/Asia/Baku
new file mode 100644
index 0000000..5db492a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Baku
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Bangkok b/root/usr/share/zoneinfo/Asia/Bangkok
new file mode 100644
index 0000000..ddcfc07
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Bangkok
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Beirut b/root/usr/share/zoneinfo/Asia/Beirut
new file mode 100644
index 0000000..98736bd
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Beirut
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Bishkek b/root/usr/share/zoneinfo/Asia/Bishkek
new file mode 100644
index 0000000..2eae5c4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Bishkek
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Brunei b/root/usr/share/zoneinfo/Asia/Brunei
new file mode 100644
index 0000000..00d23bb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Brunei
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Calcutta b/root/usr/share/zoneinfo/Asia/Calcutta
new file mode 100644
index 0000000..8774698
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Calcutta
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Chungking b/root/usr/share/zoneinfo/Asia/Chungking
new file mode 100644
index 0000000..a8f1356
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Chungking
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Colombo b/root/usr/share/zoneinfo/Asia/Colombo
new file mode 100644
index 0000000..b8ff7c8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Colombo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Dacca b/root/usr/share/zoneinfo/Asia/Dacca
new file mode 100644
index 0000000..36ac02a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Dacca
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Damascus b/root/usr/share/zoneinfo/Asia/Damascus
new file mode 100644
index 0000000..b397a67
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Damascus
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Dili b/root/usr/share/zoneinfo/Asia/Dili
new file mode 100644
index 0000000..a259b74
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Dili
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Dubai b/root/usr/share/zoneinfo/Asia/Dubai
new file mode 100644
index 0000000..a29dcf6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Dubai
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Dushanbe b/root/usr/share/zoneinfo/Asia/Dushanbe
new file mode 100644
index 0000000..45d0fe0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Dushanbe
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Gaza b/root/usr/share/zoneinfo/Asia/Gaza
new file mode 100644
index 0000000..77945be
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Gaza
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Harbin b/root/usr/share/zoneinfo/Asia/Harbin
new file mode 100644
index 0000000..a3d80fe
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Harbin
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Hong_Kong b/root/usr/share/zoneinfo/Asia/Hong_Kong
new file mode 100644
index 0000000..3757085
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Hong_Kong
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Hovd b/root/usr/share/zoneinfo/Asia/Hovd
new file mode 100644
index 0000000..906bbbf
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Hovd
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Irkutsk b/root/usr/share/zoneinfo/Asia/Irkutsk
new file mode 100644
index 0000000..d4e2b38
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Irkutsk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Jakarta b/root/usr/share/zoneinfo/Asia/Jakarta
new file mode 100644
index 0000000..3754889
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Jakarta
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Jayapura b/root/usr/share/zoneinfo/Asia/Jayapura
new file mode 100644
index 0000000..c617158
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Jayapura
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Jerusalem b/root/usr/share/zoneinfo/Asia/Jerusalem
new file mode 100644
index 0000000..90ad56a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Jerusalem
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Kabul b/root/usr/share/zoneinfo/Asia/Kabul
new file mode 100644
index 0000000..534b64a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Kabul
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Kamchatka b/root/usr/share/zoneinfo/Asia/Kamchatka
new file mode 100644
index 0000000..e8cdb1f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Kamchatka
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Karachi b/root/usr/share/zoneinfo/Asia/Karachi
new file mode 100644
index 0000000..7c94e8c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Karachi
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Kashgar b/root/usr/share/zoneinfo/Asia/Kashgar
new file mode 100644
index 0000000..6055ef8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Kashgar
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Katmandu b/root/usr/share/zoneinfo/Asia/Katmandu
new file mode 100644
index 0000000..b28a5c6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Katmandu
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Krasnoyarsk b/root/usr/share/zoneinfo/Asia/Krasnoyarsk
new file mode 100644
index 0000000..1fe6a63
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Krasnoyarsk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Kuala_Lumpur b/root/usr/share/zoneinfo/Asia/Kuala_Lumpur
new file mode 100644
index 0000000..2b90139
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Kuala_Lumpur
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Kuching b/root/usr/share/zoneinfo/Asia/Kuching
new file mode 100644
index 0000000..2a56cc8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Kuching
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Kuwait b/root/usr/share/zoneinfo/Asia/Kuwait
new file mode 100644
index 0000000..0b67d4f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Kuwait
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Macao b/root/usr/share/zoneinfo/Asia/Macao
new file mode 100644
index 0000000..50ce3ab
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Macao
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Magadan b/root/usr/share/zoneinfo/Asia/Magadan
new file mode 100644
index 0000000..334e3a1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Magadan
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Manila b/root/usr/share/zoneinfo/Asia/Manila
new file mode 100644
index 0000000..7efdaab
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Manila
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Muscat b/root/usr/share/zoneinfo/Asia/Muscat
new file mode 100644
index 0000000..251567c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Muscat
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Nicosia b/root/usr/share/zoneinfo/Asia/Nicosia
new file mode 100644
index 0000000..7461342
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Nicosia
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Novosibirsk b/root/usr/share/zoneinfo/Asia/Novosibirsk
new file mode 100644
index 0000000..082206b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Novosibirsk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Omsk b/root/usr/share/zoneinfo/Asia/Omsk
new file mode 100644
index 0000000..f09d7b5
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Omsk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Phnom_Penh b/root/usr/share/zoneinfo/Asia/Phnom_Penh
new file mode 100644
index 0000000..d9c57d5
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Phnom_Penh
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Pyongyang b/root/usr/share/zoneinfo/Asia/Pyongyang
new file mode 100644
index 0000000..878ec1b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Pyongyang
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Qatar b/root/usr/share/zoneinfo/Asia/Qatar
new file mode 100644
index 0000000..3b8234f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Qatar
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Rangoon b/root/usr/share/zoneinfo/Asia/Rangoon
new file mode 100644
index 0000000..8d65d3b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Rangoon
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Riyadh b/root/usr/share/zoneinfo/Asia/Riyadh
new file mode 100644
index 0000000..3ea3221
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Riyadh
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Saigon b/root/usr/share/zoneinfo/Asia/Saigon
new file mode 100644
index 0000000..8d00243
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Saigon
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Samarkand b/root/usr/share/zoneinfo/Asia/Samarkand
new file mode 100644
index 0000000..540eb15
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Samarkand
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Seoul b/root/usr/share/zoneinfo/Asia/Seoul
new file mode 100644
index 0000000..8ef9c72
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Seoul
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Shanghai b/root/usr/share/zoneinfo/Asia/Shanghai
new file mode 100644
index 0000000..94468b9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Shanghai
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Singapore b/root/usr/share/zoneinfo/Asia/Singapore
new file mode 100644
index 0000000..7280bcb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Singapore
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Taipei b/root/usr/share/zoneinfo/Asia/Taipei
new file mode 100644
index 0000000..cf0afa4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Taipei
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Tashkent b/root/usr/share/zoneinfo/Asia/Tashkent
new file mode 100644
index 0000000..d5a17aa
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Tashkent
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Tbilisi b/root/usr/share/zoneinfo/Asia/Tbilisi
new file mode 100644
index 0000000..4816fe1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Tbilisi
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Tehran b/root/usr/share/zoneinfo/Asia/Tehran
new file mode 100644
index 0000000..0dd6c67
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Tehran
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Thimbu b/root/usr/share/zoneinfo/Asia/Thimbu
new file mode 100644
index 0000000..3717195
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Thimbu
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Tokyo b/root/usr/share/zoneinfo/Asia/Tokyo
new file mode 100644
index 0000000..291449e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Tokyo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Ujung_Pandang b/root/usr/share/zoneinfo/Asia/Ujung_Pandang
new file mode 100644
index 0000000..c422f25
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Ujung_Pandang
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Ulaanbaatar b/root/usr/share/zoneinfo/Asia/Ulaanbaatar
new file mode 100644
index 0000000..a689323
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Ulaanbaatar
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Urumqi b/root/usr/share/zoneinfo/Asia/Urumqi
new file mode 100644
index 0000000..36573e8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Urumqi
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Vientiane b/root/usr/share/zoneinfo/Asia/Vientiane
new file mode 100644
index 0000000..5152416
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Vientiane
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Vladivostok b/root/usr/share/zoneinfo/Asia/Vladivostok
new file mode 100644
index 0000000..d174155
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Vladivostok
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Yakutsk b/root/usr/share/zoneinfo/Asia/Yakutsk
new file mode 100644
index 0000000..d04cb1d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Yakutsk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Yekaterinburg b/root/usr/share/zoneinfo/Asia/Yekaterinburg
new file mode 100644
index 0000000..c80419e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Yekaterinburg
Binary files differ
diff --git a/root/usr/share/zoneinfo/Asia/Yerevan b/root/usr/share/zoneinfo/Asia/Yerevan
new file mode 100644
index 0000000..de0a070
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Asia/Yerevan
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Azores b/root/usr/share/zoneinfo/Atlantic/Azores
new file mode 100644
index 0000000..1e5c6e8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Azores
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Bermuda b/root/usr/share/zoneinfo/Atlantic/Bermuda
new file mode 100644
index 0000000..eedfac0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Bermuda
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Canary b/root/usr/share/zoneinfo/Atlantic/Canary
new file mode 100644
index 0000000..585c718
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Canary
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Cape_Verde b/root/usr/share/zoneinfo/Atlantic/Cape_Verde
new file mode 100644
index 0000000..dd49564
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Cape_Verde
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Faeroe b/root/usr/share/zoneinfo/Atlantic/Faeroe
new file mode 100644
index 0000000..bde380f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Faeroe
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Jan_Mayen b/root/usr/share/zoneinfo/Atlantic/Jan_Mayen
new file mode 100644
index 0000000..4446ec5
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Jan_Mayen
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Madeira b/root/usr/share/zoneinfo/Atlantic/Madeira
new file mode 100644
index 0000000..dbcc99a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Madeira
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Reykjavik b/root/usr/share/zoneinfo/Atlantic/Reykjavik
new file mode 100644
index 0000000..6297249
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Reykjavik
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/South_Georgia b/root/usr/share/zoneinfo/Atlantic/South_Georgia
new file mode 100644
index 0000000..b81ffa3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/South_Georgia
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/St_Helena b/root/usr/share/zoneinfo/Atlantic/St_Helena
new file mode 100644
index 0000000..9ae5d0f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/St_Helena
Binary files differ
diff --git a/root/usr/share/zoneinfo/Atlantic/Stanley b/root/usr/share/zoneinfo/Atlantic/Stanley
new file mode 100644
index 0000000..8ce0213
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Atlantic/Stanley
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Adelaide b/root/usr/share/zoneinfo/Australia/Adelaide
new file mode 100644
index 0000000..0f03d8d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Adelaide
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Brisbane b/root/usr/share/zoneinfo/Australia/Brisbane
new file mode 100644
index 0000000..f8e3a48
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Brisbane
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Broken_Hill b/root/usr/share/zoneinfo/Australia/Broken_Hill
new file mode 100644
index 0000000..4e9b593
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Broken_Hill
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Darwin b/root/usr/share/zoneinfo/Australia/Darwin
new file mode 100644
index 0000000..8167e93
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Darwin
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Hobart b/root/usr/share/zoneinfo/Australia/Hobart
new file mode 100644
index 0000000..e87f09e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Hobart
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Lindeman b/root/usr/share/zoneinfo/Australia/Lindeman
new file mode 100644
index 0000000..5d69eda
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Lindeman
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Lord_Howe b/root/usr/share/zoneinfo/Australia/Lord_Howe
new file mode 100644
index 0000000..8c79823
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Lord_Howe
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Melbourne b/root/usr/share/zoneinfo/Australia/Melbourne
new file mode 100644
index 0000000..9c13f89
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Melbourne
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Perth b/root/usr/share/zoneinfo/Australia/Perth
new file mode 100644
index 0000000..b7aced1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Perth
Binary files differ
diff --git a/root/usr/share/zoneinfo/Australia/Sydney b/root/usr/share/zoneinfo/Australia/Sydney
new file mode 100644
index 0000000..4e98ce4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Australia/Sydney
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Amsterdam b/root/usr/share/zoneinfo/Europe/Amsterdam
new file mode 100644
index 0000000..6fc9aa4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Amsterdam
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Andorra b/root/usr/share/zoneinfo/Europe/Andorra
new file mode 100644
index 0000000..197b9e0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Andorra
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Athens b/root/usr/share/zoneinfo/Europe/Athens
new file mode 100644
index 0000000..9628572
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Athens
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Belfast b/root/usr/share/zoneinfo/Europe/Belfast
new file mode 100644
index 0000000..c005709
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Belfast
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Belgrade b/root/usr/share/zoneinfo/Europe/Belgrade
new file mode 100644
index 0000000..be91596
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Belgrade
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Berlin b/root/usr/share/zoneinfo/Europe/Berlin
new file mode 100644
index 0000000..d2754ba
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Berlin
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Bratislava b/root/usr/share/zoneinfo/Europe/Bratislava
new file mode 100644
index 0000000..f735e2c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Bratislava
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Brussels b/root/usr/share/zoneinfo/Europe/Brussels
new file mode 100644
index 0000000..5ef1ecd
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Brussels
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Bucharest b/root/usr/share/zoneinfo/Europe/Bucharest
new file mode 100644
index 0000000..eccc406
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Bucharest
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Budapest b/root/usr/share/zoneinfo/Europe/Budapest
new file mode 100644
index 0000000..3da3163
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Budapest
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Chisinau b/root/usr/share/zoneinfo/Europe/Chisinau
new file mode 100644
index 0000000..9380d08
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Chisinau
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Copenhagen b/root/usr/share/zoneinfo/Europe/Copenhagen
new file mode 100644
index 0000000..d902dc1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Copenhagen
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Dublin b/root/usr/share/zoneinfo/Europe/Dublin
new file mode 100644
index 0000000..916c082
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Dublin
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Gibraltar b/root/usr/share/zoneinfo/Europe/Gibraltar
new file mode 100644
index 0000000..98f872b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Gibraltar
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Helsinki b/root/usr/share/zoneinfo/Europe/Helsinki
new file mode 100644
index 0000000..1a2e422
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Helsinki
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Istanbul b/root/usr/share/zoneinfo/Europe/Istanbul
new file mode 100644
index 0000000..f7c92f3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Istanbul
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Kaliningrad b/root/usr/share/zoneinfo/Europe/Kaliningrad
new file mode 100644
index 0000000..8684e1c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Kaliningrad
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Kiev b/root/usr/share/zoneinfo/Europe/Kiev
new file mode 100644
index 0000000..5b5974d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Kiev
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Lisbon b/root/usr/share/zoneinfo/Europe/Lisbon
new file mode 100644
index 0000000..d7be36d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Lisbon
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Ljubljana b/root/usr/share/zoneinfo/Europe/Ljubljana
new file mode 100644
index 0000000..be91596
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Ljubljana
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/London b/root/usr/share/zoneinfo/Europe/London
new file mode 100644
index 0000000..9209519
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/London
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Luxembourg b/root/usr/share/zoneinfo/Europe/Luxembourg
new file mode 100644
index 0000000..d4ee145
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Luxembourg
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Madrid b/root/usr/share/zoneinfo/Europe/Madrid
new file mode 100644
index 0000000..95088e3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Madrid
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Malta b/root/usr/share/zoneinfo/Europe/Malta
new file mode 100644
index 0000000..21a8ec8
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Malta
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Minsk b/root/usr/share/zoneinfo/Europe/Minsk
new file mode 100644
index 0000000..71f6325
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Minsk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Monaco b/root/usr/share/zoneinfo/Europe/Monaco
new file mode 100644
index 0000000..841c8a0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Monaco
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Moscow b/root/usr/share/zoneinfo/Europe/Moscow
new file mode 100644
index 0000000..37fec63
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Moscow
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Oslo b/root/usr/share/zoneinfo/Europe/Oslo
new file mode 100644
index 0000000..571fd61
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Oslo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Paris b/root/usr/share/zoneinfo/Europe/Paris
new file mode 100644
index 0000000..f4c5fad
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Paris
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Prague b/root/usr/share/zoneinfo/Europe/Prague
new file mode 100644
index 0000000..f735e2c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Prague
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Riga b/root/usr/share/zoneinfo/Europe/Riga
new file mode 100644
index 0000000..4ce9d29
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Riga
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Rome b/root/usr/share/zoneinfo/Europe/Rome
new file mode 100644
index 0000000..fe55064
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Rome
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Samara b/root/usr/share/zoneinfo/Europe/Samara
new file mode 100644
index 0000000..f93add3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Samara
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/San_Marino b/root/usr/share/zoneinfo/Europe/San_Marino
new file mode 100644
index 0000000..fe55064
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/San_Marino
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Sarajevo b/root/usr/share/zoneinfo/Europe/Sarajevo
new file mode 100644
index 0000000..be91596
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Sarajevo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Simferopol b/root/usr/share/zoneinfo/Europe/Simferopol
new file mode 100644
index 0000000..482e754
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Simferopol
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Skopje b/root/usr/share/zoneinfo/Europe/Skopje
new file mode 100644
index 0000000..be91596
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Skopje
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Sofia b/root/usr/share/zoneinfo/Europe/Sofia
new file mode 100644
index 0000000..369b40f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Sofia
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Stockholm b/root/usr/share/zoneinfo/Europe/Stockholm
new file mode 100644
index 0000000..1d883af
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Stockholm
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Tallinn b/root/usr/share/zoneinfo/Europe/Tallinn
new file mode 100644
index 0000000..3903ba0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Tallinn
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Tirane b/root/usr/share/zoneinfo/Europe/Tirane
new file mode 100644
index 0000000..913ad3f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Tirane
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Tiraspol b/root/usr/share/zoneinfo/Europe/Tiraspol
new file mode 100644
index 0000000..9dfd4b0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Tiraspol
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Uzhgorod b/root/usr/share/zoneinfo/Europe/Uzhgorod
new file mode 100644
index 0000000..c9e4182
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Uzhgorod
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Vaduz b/root/usr/share/zoneinfo/Europe/Vaduz
new file mode 100644
index 0000000..df8ebaf
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Vaduz
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Vatican b/root/usr/share/zoneinfo/Europe/Vatican
new file mode 100644
index 0000000..fe55064
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Vatican
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Vienna b/root/usr/share/zoneinfo/Europe/Vienna
new file mode 100644
index 0000000..eafe7ad
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Vienna
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Vilnius b/root/usr/share/zoneinfo/Europe/Vilnius
new file mode 100644
index 0000000..0fa5377
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Vilnius
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Warsaw b/root/usr/share/zoneinfo/Europe/Warsaw
new file mode 100644
index 0000000..5cfd3a9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Warsaw
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Zagreb b/root/usr/share/zoneinfo/Europe/Zagreb
new file mode 100644
index 0000000..be91596
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Zagreb
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Zaporozhye b/root/usr/share/zoneinfo/Europe/Zaporozhye
new file mode 100644
index 0000000..8dc331b
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Zaporozhye
Binary files differ
diff --git a/root/usr/share/zoneinfo/Europe/Zurich b/root/usr/share/zoneinfo/Europe/Zurich
new file mode 100644
index 0000000..c744d55
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Europe/Zurich
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Antananarivo b/root/usr/share/zoneinfo/Indian/Antananarivo
new file mode 100644
index 0000000..7c5781d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Antananarivo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Chagos b/root/usr/share/zoneinfo/Indian/Chagos
new file mode 100644
index 0000000..9bf2f04
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Chagos
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Christmas b/root/usr/share/zoneinfo/Indian/Christmas
new file mode 100644
index 0000000..74b8527
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Christmas
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Cocos b/root/usr/share/zoneinfo/Indian/Cocos
new file mode 100644
index 0000000..2e9be01
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Cocos
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Comoro b/root/usr/share/zoneinfo/Indian/Comoro
new file mode 100644
index 0000000..d79eaa1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Comoro
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Kerguelen b/root/usr/share/zoneinfo/Indian/Kerguelen
new file mode 100644
index 0000000..ed61e5c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Kerguelen
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Mahe b/root/usr/share/zoneinfo/Indian/Mahe
new file mode 100644
index 0000000..7f3cf3e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Mahe
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Maldives b/root/usr/share/zoneinfo/Indian/Maldives
new file mode 100644
index 0000000..e1114f4
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Maldives
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Mauritius b/root/usr/share/zoneinfo/Indian/Mauritius
new file mode 100644
index 0000000..9311157
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Mauritius
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Mayotte b/root/usr/share/zoneinfo/Indian/Mayotte
new file mode 100644
index 0000000..359baa5
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Mayotte
Binary files differ
diff --git a/root/usr/share/zoneinfo/Indian/Reunion b/root/usr/share/zoneinfo/Indian/Reunion
new file mode 100644
index 0000000..79e3f1a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Indian/Reunion
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Apia b/root/usr/share/zoneinfo/Pacific/Apia
new file mode 100644
index 0000000..9b32df2
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Apia
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Auckland b/root/usr/share/zoneinfo/Pacific/Auckland
new file mode 100644
index 0000000..f79cdbc
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Auckland
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Chatham b/root/usr/share/zoneinfo/Pacific/Chatham
new file mode 100644
index 0000000..416a60e
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Chatham
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Easter b/root/usr/share/zoneinfo/Pacific/Easter
new file mode 100644
index 0000000..8c82c96
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Easter
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Efate b/root/usr/share/zoneinfo/Pacific/Efate
new file mode 100644
index 0000000..7b1acf6
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Efate
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Enderbury b/root/usr/share/zoneinfo/Pacific/Enderbury
new file mode 100644
index 0000000..670411a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Enderbury
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Fakaofo b/root/usr/share/zoneinfo/Pacific/Fakaofo
new file mode 100644
index 0000000..bdf468c
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Fakaofo
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Fiji b/root/usr/share/zoneinfo/Pacific/Fiji
new file mode 100644
index 0000000..eccb174
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Fiji
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Funafuti b/root/usr/share/zoneinfo/Pacific/Funafuti
new file mode 100644
index 0000000..c965033
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Funafuti
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Galapagos b/root/usr/share/zoneinfo/Pacific/Galapagos
new file mode 100644
index 0000000..a9ed4cf
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Galapagos
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Gambier b/root/usr/share/zoneinfo/Pacific/Gambier
new file mode 100644
index 0000000..08aa1c3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Gambier
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Guadalcanal b/root/usr/share/zoneinfo/Pacific/Guadalcanal
new file mode 100644
index 0000000..a349913
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Guadalcanal
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Guam b/root/usr/share/zoneinfo/Pacific/Guam
new file mode 100644
index 0000000..045a177
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Guam
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Honolulu b/root/usr/share/zoneinfo/Pacific/Honolulu
new file mode 100644
index 0000000..94e49eb
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Honolulu
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Johnston b/root/usr/share/zoneinfo/Pacific/Johnston
new file mode 100644
index 0000000..fac9ee3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Johnston
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Kiritimati b/root/usr/share/zoneinfo/Pacific/Kiritimati
new file mode 100644
index 0000000..766b2be
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Kiritimati
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Kosrae b/root/usr/share/zoneinfo/Pacific/Kosrae
new file mode 100644
index 0000000..d140771
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Kosrae
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Kwajalein b/root/usr/share/zoneinfo/Pacific/Kwajalein
new file mode 100644
index 0000000..5d51616
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Kwajalein
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Majuro b/root/usr/share/zoneinfo/Pacific/Majuro
new file mode 100644
index 0000000..fdfc34f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Majuro
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Marquesas b/root/usr/share/zoneinfo/Pacific/Marquesas
new file mode 100644
index 0000000..29ee1ad
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Marquesas
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Midway b/root/usr/share/zoneinfo/Pacific/Midway
new file mode 100644
index 0000000..6ca2c00
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Midway
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Nauru b/root/usr/share/zoneinfo/Pacific/Nauru
new file mode 100644
index 0000000..3c12fb9
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Nauru
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Niue b/root/usr/share/zoneinfo/Pacific/Niue
new file mode 100644
index 0000000..1fce547
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Niue
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Norfolk b/root/usr/share/zoneinfo/Pacific/Norfolk
new file mode 100644
index 0000000..9626cb0
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Norfolk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Noumea b/root/usr/share/zoneinfo/Pacific/Noumea
new file mode 100644
index 0000000..fb0a47a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Noumea
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Pago_Pago b/root/usr/share/zoneinfo/Pacific/Pago_Pago
new file mode 100644
index 0000000..ce14fdc
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Pago_Pago
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Palau b/root/usr/share/zoneinfo/Pacific/Palau
new file mode 100644
index 0000000..b32968d
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Palau
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Pitcairn b/root/usr/share/zoneinfo/Pacific/Pitcairn
new file mode 100644
index 0000000..df467de
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Pitcairn
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Ponape b/root/usr/share/zoneinfo/Pacific/Ponape
new file mode 100644
index 0000000..4b71bf3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Ponape
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Port_Moresby b/root/usr/share/zoneinfo/Pacific/Port_Moresby
new file mode 100644
index 0000000..2d3314a
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Port_Moresby
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Rarotonga b/root/usr/share/zoneinfo/Pacific/Rarotonga
new file mode 100644
index 0000000..6fe3313
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Rarotonga
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Saipan b/root/usr/share/zoneinfo/Pacific/Saipan
new file mode 100644
index 0000000..ce3aa24
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Saipan
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Tahiti b/root/usr/share/zoneinfo/Pacific/Tahiti
new file mode 100644
index 0000000..4410266
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Tahiti
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Tarawa b/root/usr/share/zoneinfo/Pacific/Tarawa
new file mode 100644
index 0000000..6bd78e1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Tarawa
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Tongatapu b/root/usr/share/zoneinfo/Pacific/Tongatapu
new file mode 100644
index 0000000..7f3e1cd
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Tongatapu
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Truk b/root/usr/share/zoneinfo/Pacific/Truk
new file mode 100644
index 0000000..e79c35f
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Truk
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Wake b/root/usr/share/zoneinfo/Pacific/Wake
new file mode 100644
index 0000000..7dcaab1
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Wake
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Wallis b/root/usr/share/zoneinfo/Pacific/Wallis
new file mode 100644
index 0000000..aaac705
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Wallis
Binary files differ
diff --git a/root/usr/share/zoneinfo/Pacific/Yap b/root/usr/share/zoneinfo/Pacific/Yap
new file mode 100644
index 0000000..e24cd27
--- a/dev/null
+++ b/root/usr/share/zoneinfo/Pacific/Yap
Binary files differ
diff --git a/root/usr/share/zoneinfo/iso3166.tab b/root/usr/share/zoneinfo/iso3166.tab
new file mode 100644
index 0000000..0173c40
--- a/dev/null
+++ b/root/usr/share/zoneinfo/iso3166.tab
@@ -0,0 +1,261 @@
+# ISO 3166 2-letter country codes
+#
+# @(#)iso3166.tab 1.7
+#
+# From Paul Eggert <eggert@twinsun.com> (1999-10-13):
+#
+# This file contains a table with the following columns:
+# 1. ISO 3166-1:1999 2-character country code. See:
+# <a href="http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1.html">
+# ISO 3166-1: The Code List
+# </a>.
+# 2. The usual English name for the country,
+# chosen so that alphabetic sorting of subsets produces helpful lists.
+# This is not the same as the English name in the ISO 3166 tables.
+#
+# Columns are separated by a single tab.
+# The table is sorted by country code.
+#
+# Lines beginning with `#' are comments.
+#
+#country-
+#code country name
+AD Andorra
+AE United Arab Emirates
+AF Afghanistan
+AG Antigua & Barbuda
+AI Anguilla
+AL Albania
+AM Armenia
+AN Netherlands Antilles
+AO Angola
+AQ Antarctica
+AR Argentina
+AS Samoa (American)
+AT Austria
+AU Australia
+AW Aruba
+AZ Azerbaijan
+BA Bosnia & Herzegovina
+BB Barbados
+BD Bangladesh
+BE Belgium
+BF Burkina Faso
+BG Bulgaria
+BH Bahrain
+BI Burundi
+BJ Benin
+BM Bermuda
+BN Brunei
+BO Bolivia
+BR Brazil
+BS Bahamas
+BT Bhutan
+BV Bouvet Island
+BW Botswana
+BY Belarus
+BZ Belize
+CA Canada
+CC Cocos (Keeling) Islands
+CD Congo (Dem. Rep.)
+CF Central African Rep.
+CG Congo (Rep.)
+CH Switzerland
+CI Cote d'Ivoire
+CK Cook Islands
+CL Chile
+CM Cameroon
+CN China
+CO Colombia
+CR Costa Rica
+CU Cuba
+CV Cape Verde
+CX Christmas Island
+CY Cyprus
+CZ Czech Republic
+DE Germany
+DJ Djibouti
+DK Denmark
+DM Dominica
+DO Dominican Republic
+DZ Algeria
+EC Ecuador
+EE Estonia
+EG Egypt
+EH Western Sahara
+ER Eritrea
+ES Spain
+ET Ethiopia
+FI Finland
+FJ Fiji
+FK Falkland Islands
+FM Micronesia
+FO Faeroe Islands
+FR France
+GA Gabon
+GB Britain (UK)
+GD Grenada
+GE Georgia
+GF French Guiana
+GH Ghana
+GI Gibraltar
+GL Greenland
+GM Gambia
+GN Guinea
+GP Guadeloupe
+GQ Equatorial Guinea
+GR Greece
+GS South Georgia & the South Sandwich Islands
+GT Guatemala
+GU Guam
+GW Guinea-Bissau
+GY Guyana
+HK Hong Kong
+HM Heard Island & McDonald Islands
+HN Honduras
+HR Croatia
+HT Haiti
+HU Hungary
+ID Indonesia
+IE Ireland
+IL Israel
+IN India
+IO British Indian Ocean Territory
+IQ Iraq
+IR Iran
+IS Iceland
+IT Italy
+JM Jamaica
+JO Jordan
+JP Japan
+KE Kenya
+KG Kirgizstan
+KH Cambodia
+KI Kiribati
+KM Comoros
+KN St Kitts & Nevis
+KP Korea (North)
+KR Korea (South)
+KW Kuwait
+KY Cayman Islands
+KZ Kazakhstan
+LA Laos
+LB Lebanon
+LC St Lucia
+LI Liechtenstein
+LK Sri Lanka
+LR Liberia
+LS Lesotho
+LT Lithuania
+LU Luxembourg
+LV Latvia
+LY Libya
+MA Morocco
+MC Monaco
+MD Moldova
+MG Madagascar
+MH Marshall Islands
+MK Macedonia
+ML Mali
+MM Myanmar (Burma)
+MN Mongolia
+MO Macao
+MP Northern Mariana Islands
+MQ Martinique
+MR Mauritania
+MS Montserrat
+MT Malta
+MU Mauritius
+MV Maldives
+MW Malawi
+MX Mexico
+MY Malaysia
+MZ Mozambique
+NA Namibia
+NC New Caledonia
+NE Niger
+NF Norfolk Island
+NG Nigeria
+NI Nicaragua
+NL Netherlands
+NO Norway
+NP Nepal
+NR Nauru
+NU Niue
+NZ New Zealand
+OM Oman
+PA Panama
+PE Peru
+PF French Polynesia
+PG Papua New Guinea
+PH Philippines
+PK Pakistan
+PL Poland
+PM St Pierre & Miquelon
+PN Pitcairn
+PR Puerto Rico
+PS Palestine
+PT Portugal
+PW Palau
+PY Paraguay
+QA Qatar
+RE Reunion
+RO Romania
+RU Russia
+RW Rwanda
+SA Saudi Arabia
+SB Solomon Islands
+SC Seychelles
+SD Sudan
+SE Sweden
+SG Singapore
+SH St Helena
+SI Slovenia
+SJ Svalbard & Jan Mayen
+SK Slovakia
+SL Sierra Leone
+SM San Marino
+SN Senegal
+SO Somalia
+SR Suriname
+ST Sao Tome & Principe
+SV El Salvador
+SY Syria
+SZ Swaziland
+TC Turks & Caicos Is
+TD Chad
+TF French Southern & Antarctic Lands
+TG Togo
+TH Thailand
+TJ Tajikistan
+TK Tokelau
+TM Turkmenistan
+TN Tunisia
+TO Tonga
+TP East Timor
+TR Turkey
+TT Trinidad & Tobago
+TV Tuvalu
+TW Taiwan
+TZ Tanzania
+UA Ukraine
+UG Uganda
+UM US minor outlying islands
+US United States
+UY Uruguay
+UZ Uzbekistan
+VA Vatican City
+VC St Vincent
+VE Venezuela
+VG Virgin Islands (UK)
+VI Virgin Islands (US)
+VN Vietnam
+VU Vanuatu
+WF Wallis & Futuna
+WS Samoa (Western)
+YE Yemen
+YT Mayotte
+YU Yugoslavia
+ZA South Africa
+ZM Zambia
+ZW Zimbabwe
diff --git a/root/usr/share/zoneinfo/zone.tab b/root/usr/share/zoneinfo/zone.tab
new file mode 100644
index 0000000..b65b6a3
--- a/dev/null
+++ b/root/usr/share/zoneinfo/zone.tab
@@ -0,0 +1,387 @@
+# @(#)zone.tab 1.18
+#
+# TZ zone descriptions
+#
+# From Paul Eggert <eggert@twinsun.com> (1996-08-05):
+#
+# This file contains a table with the following columns:
+# 1. ISO 3166 2-character country code. See the file `iso3166.tab'.
+# 2. Latitude and longitude of the zone's principal location
+# in ISO 6709 sign-degrees-minutes-seconds format,
+# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
+# first latitude (+ is north), then longitude (+ is east).
+# 3. Zone name used in value of TZ environment variable.
+# 4. Comments; present if and only if the country has multiple rows.
+#
+# Columns are separated by a single tab.
+# The table is sorted first by country, then an order within the country that
+# (1) makes some geographical sense, and
+# (2) puts the most populous zones first, where that does not contradict (1).
+#
+# Lines beginning with `#' are comments.
+#
+#country-
+#code coordinates TZ comments
+AD +4230+00131 Europe/Andorra
+AE +2518+05518 Asia/Dubai
+AF +3431+06912 Asia/Kabul
+AG +1703-06148 America/Antigua
+AI +1812-06304 America/Anguilla
+AL +4120+01950 Europe/Tirane
+AM +4011+04430 Asia/Yerevan
+AN +1211-06900 America/Curacao
+AO -0848+01314 Africa/Luanda
+AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island
+AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole
+AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
+AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
+AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
+AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Base, Terre Adelie
+AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
+AR -3436-05827 America/Buenos_Aires E Argentina (BA, DF, SC, TF)
+AR -3257-06040 America/Rosario NE Argentina (SF, ER, CN, MN, CC, FM, LP, CH)
+AR -3124-06411 America/Cordoba W Argentina (CB, SA, TM, LR, SJ, SL, NQ, RN)
+AR -2411-06518 America/Jujuy Jujuy (JY)
+AR -2828-06547 America/Catamarca Catamarca (CT)
+AR -3253-06849 America/Mendoza Mendoza (MZ)
+AS -1416-17042 Pacific/Pago_Pago
+AT +4813+01620 Europe/Vienna
+AU -3133+15905 Australia/Lord_Howe Lord Howe Island
+AU -4253+14719 Australia/Hobart Tasmania
+AU -3749+14458 Australia/Melbourne Victoria
+AU -3352+15113 Australia/Sydney New South Wales - most locations
+AU -3157+14127 Australia/Broken_Hill New South Wales - Broken Hill
+AU -2728+15302 Australia/Brisbane Queensland - most locations
+AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
+AU -3455+13835 Australia/Adelaide South Australia
+AU -1228+13050 Australia/Darwin Northern Territory
+AU -3157+11551 Australia/Perth Western Australia
+AW +1230-06858 America/Aruba
+AZ +4023+04951 Asia/Baku
+BA +4352+01825 Europe/Sarajevo
+BB +1306-05937 America/Barbados
+BD +2343+09025 Asia/Dacca
+BE +5050+00420 Europe/Brussels
+BF +1222-00131 Africa/Ouagadougou
+BG +4241+02319 Europe/Sofia
+BH +2623+05035 Asia/Bahrain
+BI -0323+02922 Africa/Bujumbura
+BJ +0629+00237 Africa/Porto-Novo
+BM +3217-06446 Atlantic/Bermuda
+BN +0456+11455 Asia/Brunei
+BO -1630-06809 America/La_Paz
+BR -0351-03225 America/Noronha Fernando de Noronha
+BR -0127-04829 America/Belem Amapa, E Para
+BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PR, PE)
+BR -0712-04812 America/Araguaina Tocantins
+BR -0940-03543 America/Maceio Alagoas, Sergipe
+BR -2332-04637 America/Sao_Paulo S & SE Brazil (BA, GO, DF, MG, ES, RJ, SP, PR, SC, RS)
+BR -1535-05605 America/Cuiaba Mato Grosso, Mato Grosso do Sul
+BR -0846-06354 America/Porto_Velho W Para, Rondonia
+BR +0249-06040 America/Boa_Vista Roraima
+BR -0308-06001 America/Manaus Amazonas
+BR -0934-06731 America/Porto_Acre Acre
+BS +2505-07721 America/Nassau
+BT +2728+08939 Asia/Thimbu
+BW -2545+02555 Africa/Gaborone
+BY +5354+02734 Europe/Minsk
+BZ +1730-08812 America/Belize
+CA +4734-05243 America/St_Johns Newfoundland Island
+CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), NB, W Labrador, E Quebec & PEI
+CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
+CA +5320-06025 America/Goose_Bay Atlantic Time - E Labrador
+CA +4531-07334 America/Montreal Eastern Time - Ontario & Quebec - most locations
+CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
+CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
+CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
+CA +4843-09429 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
+CA +6608-06544 America/Pangnirtung Central Time - Pangnirtung, Nunavut
+CA +6344-06828 America/Iqaluit Central Time - east Nunavut
+CA +6245-09210 America/Rankin_Inlet Central Time - central Nunavut
+CA +6903-10505 America/Cambridge_Bay Central Time - west Nunavut
+CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
+CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
+CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
+CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
+CA +6825-11330 America/Inuvik Mountain Time - west Northwest Territories
+CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
+CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
+CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
+CA +6404-13925 America/Dawson Pacific Time - north Yukon
+CC -1210+09655 Indian/Cocos
+CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo
+CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo
+CF +0422+01835 Africa/Bangui
+CG -0416+01517 Africa/Brazzaville
+CH +4723+00832 Europe/Zurich
+CI +0519-00402 Africa/Abidjan
+CK -2114-15946 Pacific/Rarotonga
+CL -3327-07040 America/Santiago mainland
+CL -2710-10927 Pacific/Easter Easter Island
+CM +0403+00942 Africa/Douala
+CN +4545+12641 Asia/Harbin north Manchuria
+CN +3114+12128 Asia/Shanghai China coast
+CN +2934+10635 Asia/Chungking China mountains
+CN +4348+08735 Asia/Urumqi Tibet & Xinjiang
+CN +3929+07559 Asia/Kashgar Eastern Turkestan
+CO +0436-07405 America/Bogota
+CR +0956-08405 America/Costa_Rica
+CU +2308-08222 America/Havana
+CV +1455-02331 Atlantic/Cape_Verde
+CX -1025+10543 Indian/Christmas
+CY +3510+03322 Asia/Nicosia
+CZ +5005+01426 Europe/Prague
+DE +5230+01322 Europe/Berlin
+DJ +1136+04309 Africa/Djibouti
+DK +5540+01235 Europe/Copenhagen
+DM +1518-06124 America/Dominica
+DO +1828-06954 America/Santo_Domingo
+DZ +3647+00303 Africa/Algiers
+EC -0210-07950 America/Guayaquil mainland
+EC -0054-08936 Pacific/Galapagos Galapagos Islands
+EE +5925+02445 Europe/Tallinn
+EG +3003+03115 Africa/Cairo
+EH +2709-01312 Africa/El_Aaiun
+ER +1520+03853 Africa/Asmera
+ES +4024-00341 Europe/Madrid mainland
+ES +3553-00519 Africa/Ceuta Ceuta & Melilla
+ES +2806-01524 Atlantic/Canary Canary Islands
+ET +0902+03842 Africa/Addis_Ababa
+FI +6010+02458 Europe/Helsinki
+FJ -1808+17825 Pacific/Fiji
+FK -5142-05751 Atlantic/Stanley
+FM +0931+13808 Pacific/Yap Yap
+FM +0725+15147 Pacific/Truk Truk (Chuuk)
+FM +0658+15813 Pacific/Ponape Ponape (Pohnpei)
+FM +0519+16259 Pacific/Kosrae Kosrae
+FO +6201-00646 Atlantic/Faeroe
+FR +4852+00220 Europe/Paris
+GA +0023+00927 Africa/Libreville
+GB +512830-0001845 Europe/London Great Britain
+GB +5435-00555 Europe/Belfast Northern Ireland
+GD +1203-06145 America/Grenada
+GE +4143+04449 Asia/Tbilisi
+GF +0456-05220 America/Cayenne
+GH +0533-00013 Africa/Accra
+GI +3608-00521 Europe/Gibraltar
+GL +7030-02215 America/Scoresbysund east Greenland
+GL +6411-05144 America/Godthab southwest Greenland
+GL +7634-06847 America/Thule northwest Greenland
+GM +1328-01639 Africa/Banjul
+GN +0931-01343 Africa/Conakry
+GP +1614-06132 America/Guadeloupe
+GQ +0345+00847 Africa/Malabo
+GR +3758+02343 Europe/Athens
+GS -5416-03632 Atlantic/South_Georgia
+GT +1438-09031 America/Guatemala
+GU +1328+14445 Pacific/Guam
+GW +1151-01535 Africa/Bissau
+GY +0648-05810 America/Guyana
+HK +2217+11409 Asia/Hong_Kong
+HN +1406-08713 America/Tegucigalpa
+HR +4548+01558 Europe/Zagreb
+HT +1832-07220 America/Port-au-Prince
+HU +4730+01905 Europe/Budapest
+ID -0610+10648 Asia/Jakarta Java & Sumatra
+ID -0507+11924 Asia/Ujung_Pandang Borneo & Celebes
+ID -0232+14042 Asia/Jayapura Irian Jaya & the Moluccas
+IE +5320-00615 Europe/Dublin
+IL +3146+03514 Asia/Jerusalem
+IN +2232+08822 Asia/Calcutta
+IO -0720+07225 Indian/Chagos
+IQ +3321+04425 Asia/Baghdad
+IR +3540+05126 Asia/Tehran
+IS +6409-02151 Atlantic/Reykjavik
+IT +4154+01229 Europe/Rome
+JM +1800-07648 America/Jamaica
+JO +3157+03556 Asia/Amman
+JP +353916+1394441 Asia/Tokyo
+KE -0117+03649 Africa/Nairobi
+KG +4254+07436 Asia/Bishkek
+KH +1133+10455 Asia/Phnom_Penh
+KI +0125+17300 Pacific/Tarawa Gilbert Islands
+KI -0308-17105 Pacific/Enderbury Phoenix Islands
+KI +0152-15720 Pacific/Kiritimati Line Islands
+KM -1141+04316 Indian/Comoro
+KN +1718-06243 America/St_Kitts
+KP +3901+12545 Asia/Pyongyang
+KR +3733+12658 Asia/Seoul
+KW +2920+04759 Asia/Kuwait
+KY +1918-08123 America/Cayman
+KZ +4315+07657 Asia/Almaty east Kazakhstan
+KZ +5017+05710 Asia/Aqtobe central Kazakhstan
+KZ +4431+05016 Asia/Aqtau west Kazakhstan
+LA +1758+10236 Asia/Vientiane
+LB +3353+03530 Asia/Beirut
+LC +1401-06100 America/St_Lucia
+LI +4709+00931 Europe/Vaduz
+LK +0656+07951 Asia/Colombo
+LR +0618-01047 Africa/Monrovia
+LS -2928+02730 Africa/Maseru
+LT +5441+02519 Europe/Vilnius
+LU +4936+00609 Europe/Luxembourg
+LV +5657+02406 Europe/Riga
+LY +3254+01311 Africa/Tripoli
+MA +3339-00735 Africa/Casablanca
+MC +4342+00723 Europe/Monaco
+MD +4700+02850 Europe/Chisinau most locations
+MD +4651+02938 Europe/Tiraspol Transdniestria
+MG -1855+04731 Indian/Antananarivo
+MH +0709+17112 Pacific/Majuro most locations
+MH +0905+16720 Pacific/Kwajalein Kwajalein
+MK +4159+02126 Europe/Skopje
+ML +1239-00800 Africa/Bamako southwest Mali
+ML +1446-00301 Africa/Timbuktu northeast Mali
+MM +1647+09610 Asia/Rangoon
+MN +4755+10653 Asia/Ulaanbaatar most locations
+MN +4801+09139 Asia/Hovd Bayan-Olgiy, Hovd, Uvs
+MO +2214+11335 Asia/Macao
+MP +1512+14545 Pacific/Saipan
+MQ +1436-06105 America/Martinique
+MR +1806-01557 Africa/Nouakchott
+MS +1644-06213 America/Montserrat
+MT +3554+01431 Europe/Malta
+MU -2010+05730 Indian/Mauritius
+MV +0410+07330 Indian/Maldives
+MW -1547+03500 Africa/Blantyre
+MX +1924-09909 America/Mexico_City Central Time - most locations
+MX +2105-08646 America/Cancun Central Time - Quintana Roo
+MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa
+MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua
+MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
+MX +3232-11701 America/Tijuana Pacific Time
+MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
+MY +0133+11020 Asia/Kuching Sabah & Sarawak
+MZ -2558+03235 Africa/Maputo
+NA -2234+01706 Africa/Windhoek
+NC -2216+16530 Pacific/Noumea
+NE +1331+00207 Africa/Niamey
+NF -2903+16758 Pacific/Norfolk
+NG +0627+00324 Africa/Lagos
+NI +1209-08617 America/Managua
+NL +5222+00454 Europe/Amsterdam
+NO +5955+01045 Europe/Oslo
+NP +2743+08519 Asia/Katmandu
+NR -0031+16655 Pacific/Nauru
+NU -1901+16955 Pacific/Niue
+NZ -3652+17446 Pacific/Auckland most locations
+NZ -4355-17630 Pacific/Chatham Chatham Islands
+OM +2336+05835 Asia/Muscat
+PA +0858-07932 America/Panama
+PE -1203-07703 America/Lima
+PF -1732-14934 Pacific/Tahiti Society Islands
+PF -0900-13930 Pacific/Marquesas Marquesas Islands
+PF -2308-13457 Pacific/Gambier Gambier Islands
+PG -0930+14710 Pacific/Port_Moresby
+PH +1435+12100 Asia/Manila
+PK +2452+06703 Asia/Karachi
+PL +5215+02100 Europe/Warsaw
+PM +4703-05620 America/Miquelon
+PN -2504-13005 Pacific/Pitcairn
+PR +182806-0660622 America/Puerto_Rico
+PS +3130+03428 Asia/Gaza
+PT +3843-00908 Europe/Lisbon mainland
+PT +3238-01654 Atlantic/Madeira Madeira Islands
+PT +3744-02540 Atlantic/Azores Azores
+PW +0720+13429 Pacific/Palau
+PY -2516-05740 America/Asuncion
+QA +2517+05132 Asia/Qatar
+RE -2052+05528 Indian/Reunion
+RO +4426+02606 Europe/Bucharest
+RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
+RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
+RU +5312+05009 Europe/Samara Moscow+01 - Caspian Sea
+RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
+RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
+RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
+RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
+RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
+RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
+RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
+RU +5934+15048 Asia/Magadan Moscow+08 - Magadan & Sakhalin
+RU +5301+15839 Asia/Kamchatka Moscow+09 - Kamchatka
+RU +6445+17729 Asia/Anadyr Moscow+10 - Bering Sea
+RW -0157+03004 Africa/Kigali
+SA +2438+04643 Asia/Riyadh
+SB -0932+16012 Pacific/Guadalcanal
+SC -0440+05528 Indian/Mahe
+SD +1536+03232 Africa/Khartoum
+SE +5920+01803 Europe/Stockholm
+SG +0117+10351 Asia/Singapore
+SH -1555-00542 Atlantic/St_Helena
+SI +4603+01431 Europe/Ljubljana
+SJ +7800+01600 Arctic/Longyearbyen Svalbard
+SJ +7059-00805 Atlantic/Jan_Mayen Jan Mayen
+SK +4809+01707 Europe/Bratislava
+SL +0830-01315 Africa/Freetown
+SM +4355+01228 Europe/San_Marino
+SN +1440-01726 Africa/Dakar
+SO +0204+04522 Africa/Mogadishu
+SR +0550-05510 America/Paramaribo
+ST +0020+00644 Africa/Sao_Tome
+SV +1342-08912 America/El_Salvador
+SY +3330+03618 Asia/Damascus
+SZ -2618+03106 Africa/Mbabane
+TC +2128-07108 America/Grand_Turk
+TD +1207+01503 Africa/Ndjamena
+TF -492110+0701303 Indian/Kerguelen
+TG +0608+00113 Africa/Lome
+TH +1345+10031 Asia/Bangkok
+TJ +3835+06848 Asia/Dushanbe
+TK -0922-17114 Pacific/Fakaofo
+TM +3757+05823 Asia/Ashkhabad
+TN +3648+01011 Africa/Tunis
+TO -2110+17510 Pacific/Tongatapu
+TP -0833+12535 Asia/Dili
+TR +4101+02858 Europe/Istanbul
+TT +1039-06131 America/Port_of_Spain
+TV -0831+17913 Pacific/Funafuti
+TW +2503+12130 Asia/Taipei
+TZ -0648+03917 Africa/Dar_es_Salaam
+UA +5026+03031 Europe/Kiev most locations
+UA +4837+02218 Europe/Uzhgorod Ruthenia
+UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk
+UA +4457+03406 Europe/Simferopol central Crimea
+UG +0019+03225 Africa/Kampala
+UM +1700-16830 Pacific/Johnston Johnston Atoll
+UM +2813-17722 Pacific/Midway Midway Islands
+UM +1917+16637 Pacific/Wake Wake Island
+US +404251-0740023 America/New_York Eastern Time
+US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
+US +381515-0854534 America/Louisville Eastern Time - Louisville, Kentucky
+US +394606-0860929 America/Indianapolis Eastern Standard Time - Indiana - most locations
+US +382232-0862041 America/Indiana/Marengo Eastern Standard Time - Indiana - Crawford County
+US +411745-0863730 America/Indiana/Knox Eastern Standard Time - Indiana - Starke County
+US +384452-0850402 America/Indiana/Vevay Eastern Standard Time - Indiana - Switzerland County
+US +415100-0873900 America/Chicago Central Time
+US +450628-0873651 America/Menominee Central Time - Michigan - Wisconsin border
+US +394421-1045903 America/Denver Mountain Time
+US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
+US +364708-1084111 America/Shiprock Mountain Time - Navajo
+US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona
+US +340308-1181434 America/Los_Angeles Pacific Time
+US +611305-1495401 America/Anchorage Alaska Time
+US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
+US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
+US +643004-1652423 America/Nome Alaska Time - west Alaska
+US +515248-1763929 America/Adak Aleutian Islands
+US +211825-1575130 Pacific/Honolulu Hawaii
+UY -3453-05611 America/Montevideo
+UZ +3940+06648 Asia/Samarkand west Uzbekistan
+UZ +4120+06918 Asia/Tashkent east Uzbekistan
+VA +4154+01227 Europe/Vatican
+VC +1309-06114 America/St_Vincent
+VE +1030-06656 America/Caracas
+VG +1827-06437 America/Tortola
+VI +1821-06456 America/St_Thomas
+VN +1045+10640 Asia/Saigon
+VU -1740+16825 Pacific/Efate
+WF -1318-17610 Pacific/Wallis
+WS -1350-17144 Pacific/Apia
+YE +1245+04512 Asia/Aden
+YT -1247+04514 Indian/Mayotte
+YU +4450+02030 Europe/Belgrade
+ZA -2615+02800 Africa/Johannesburg
+ZM -1525+02817 Africa/Lusaka
+ZW -1750+03103 Africa/Harare
diff --git a/rsync/AUTHORS b/rsync/AUTHORS
new file mode 100644
index 0000000..f11fc44
--- a/dev/null
+++ b/rsync/AUTHORS
@@ -0,0 +1,2 @@
+Martin Pool <mbp@samba.org>
+Andrew Tridgell <tridge@samba.org>
diff --git a/rsync/COPYING b/rsync/COPYING
new file mode 100644
index 0000000..c4792dd
--- a/dev/null
+++ b/rsync/COPYING
@@ -0,0 +1,515 @@
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+^L
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+^L
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+^L
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+^L
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+^L
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+^L
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+^L
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+ <one line to give the library's name and a brief idea of what it
+does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper
+mail.
+
+You should also get your employer (if you work as a programmer) or
+your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James
+Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/rsync/Makefile.in b/rsync/Makefile.in
new file mode 100644
index 0000000..50e7b3d
--- a/dev/null
+++ b/rsync/Makefile.in
@@ -0,0 +1,391 @@
+#############################################################################
+
+####### Compiler, tools and options
+
+CXX = $(SYSCONF_CXX) $(QT_CXX_MT)
+CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB)
+CC = $(SYSCONF_CC) $(QT_C_MT)
+CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB)
+INCPATH = -I.
+LFLAGS = $(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
+LIBS = $(SUBLIBS) $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
+MOC = $(SYSCONF_MOC)
+UIC = $(SYSCONF_UIC)
+
+####### Target
+
+DESTDIR = $(QTDIR)/lib$(PROJMAK)/
+VER_MAJ = 1
+VER_MIN = 0
+VER_PATCH = 0
+TARGET = rsync
+TARGET1 = lib$(TARGET).so.$(VER_MAJ)
+
+####### Files
+
+HEADERS = buf.h \
+ checksum.h \
+ command.h \
+ emit.h \
+ fileutil.h \
+ job.h \
+ netint.h \
+ protocol.h \
+ prototab.h \
+ rsync.h \
+ search.h \
+ stream.h \
+ sumset.h \
+ trace.h \
+ types.h \
+ util.h \
+ whole.h \
+ config.h
+SOURCES = base64.c \
+ buf.c \
+ checksum.c \
+ command.c \
+ delta.c \
+ emit.c \
+ fileutil.c \
+ hex.c \
+ job.c \
+ mdfour.c \
+ mksum.c \
+ msg.c \
+ netint.c \
+ patch.c \
+ prototab.c \
+ readsums.c \
+ scoop.c \
+ search.c \
+ stats.c \
+ stream.c \
+ sumset.c \
+ trace.c \
+ tube.c \
+ util.c \
+ version.c \
+ whole.c
+OBJECTS = base64.o \
+ buf.o \
+ checksum.o \
+ command.o \
+ delta.o \
+ emit.o \
+ fileutil.o \
+ hex.o \
+ job.o \
+ mdfour.o \
+ mksum.o \
+ msg.o \
+ netint.o \
+ patch.o \
+ prototab.o \
+ readsums.o \
+ scoop.o \
+ search.o \
+ stats.o \
+ stream.o \
+ sumset.o \
+ trace.o \
+ tube.o \
+ util.o \
+ version.o \
+ whole.o
+INTERFACES =
+UICDECLS =
+UICIMPLS =
+SRCMOC =
+OBJMOC =
+
+
+####### Implicit rules
+
+.SUFFIXES: .cpp .cxx .cc .C .c
+
+.cpp.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cxx.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.cc.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.C.o:
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+
+.c.o:
+ $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
+
+####### Build rules
+
+
+all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
+
+$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
+ $(SYSCONF_LINK_LIB)
+
+moc: $(SRCMOC)
+
+tmake: Makefile.in
+
+Makefile.in: rsync.pro
+ tmake rsync.pro -o Makefile.in
+
+clean:
+ -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
+ -rm -f *~ core
+ -rm -f allmoc.cpp
+
+####### Extension Modules
+
+listpromodules:
+ @echo
+
+listallmodules:
+ @echo
+
+listaddonpromodules:
+ @echo
+
+listaddonentmodules:
+ @echo
+
+
+REQUIRES=
+
+####### Sub-libraries
+
+
+###### Combined headers
+
+
+
+####### Compile
+
+base64.o: base64.c \
+ config.h \
+ config_linux.h \
+ rsync.h
+
+buf.o: buf.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ trace.h \
+ buf.h \
+ util.h
+
+checksum.o: checksum.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ checksum.h
+
+command.o: command.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ command.h
+
+delta.o: delta.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ emit.h \
+ stream.h \
+ util.h \
+ sumset.h \
+ job.h \
+ trace.h \
+ checksum.h \
+ search.h \
+ types.h
+
+emit.o: emit.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ command.h \
+ protocol.h \
+ trace.h \
+ emit.h \
+ prototab.h \
+ netint.h \
+ sumset.h \
+ job.h
+
+fileutil.o: fileutil.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ fileutil.h \
+ trace.h
+
+hex.o: hex.c \
+ config.h \
+ config_linux.h \
+ rsync.h
+
+job.o: job.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ stream.h \
+ util.h \
+ sumset.h \
+ job.h \
+ trace.h
+
+mdfour.o: mdfour.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ trace.h \
+ types.h
+
+mksum.o: mksum.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ stream.h \
+ util.h \
+ sumset.h \
+ job.h \
+ protocol.h \
+ netint.h \
+ trace.h \
+ checksum.h
+
+msg.o: msg.c \
+ config.h \
+ config_linux.h \
+ rsync.h
+
+netint.o: netint.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ job.h \
+ netint.h \
+ trace.h \
+ stream.h
+
+patch.o: patch.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ util.h \
+ trace.h \
+ protocol.h \
+ netint.h \
+ command.h \
+ sumset.h \
+ prototab.h \
+ stream.h \
+ job.h
+
+prototab.o: prototab.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ protocol.h \
+ command.h \
+ prototab.h
+
+readsums.o: readsums.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ sumset.h \
+ job.h \
+ trace.h \
+ netint.h \
+ protocol.h \
+ util.h \
+ stream.h
+
+scoop.o: scoop.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ job.h \
+ stream.h \
+ trace.h \
+ util.h
+
+search.o: search.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ trace.h \
+ util.h \
+ sumset.h \
+ search.h \
+ checksum.h
+
+stats.o: stats.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ trace.h
+
+stream.o: stream.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ stream.h \
+ util.h \
+ trace.h
+
+sumset.o: sumset.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ sumset.h \
+ util.h \
+ trace.h
+
+trace.o: trace.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ util.h \
+ trace.h
+
+tube.o: tube.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ trace.h \
+ util.h \
+ job.h \
+ stream.h
+
+util.o: util.c \
+ config.h \
+ config_linux.h \
+ util.h \
+ rsync.h \
+ trace.h
+
+version.o: version.c \
+ config.h \
+ config_linux.h \
+ rsync.h
+
+whole.o: whole.c \
+ config.h \
+ config_linux.h \
+ rsync.h \
+ trace.h \
+ fileutil.h \
+ sumset.h \
+ job.h \
+ buf.h \
+ whole.h \
+ util.h
+
+
diff --git a/rsync/README b/rsync/README
new file mode 100644
index 0000000..02df92a
--- a/dev/null
+++ b/rsync/README
@@ -0,0 +1,62 @@
+librsync is the next generation of librsync, and provides flexible
+checksum-based differencing. The main application at the moment in
+rproxy, but the library should eventually be generally useful.
+
+ http://linuxcare.com.au/rproxy/
+
+This library was previously known as libhsync up to version 0.9.0.
+
+To use anonymous CVS, see the file README.CVS in this directory.
+
+>> Requirements
+
+To build librsync:
+
+ * A C compiler and appropriate headers and libraries
+
+ * Make
+
+ * popt -- command line parsing library
+
+ Available from ftp://ftp.redhat.com/pub/redhat/code/popt
+
+ A cut-down version of popt1.5 is included and will be used
+ automatically if there is no popt library on your build host.
+
+>> Note for RedHat 7.0
+
+RedHat 7.0 (Guiness) ships with a buggy version of GCC 2.96 that
+produces many warnings while compiling librsync. These are harmless
+-- the library seems to work anyhow. You can avoid the warnings by
+using the 'kgcc' version of the compiler:
+
+ $ export CC=kgcc
+ $ ./autogen.sh
+ $ make all check
+
+>> Library Versions
+
+librsync uses the GNU libtool library versioning system, so the
+filename does not correspond to the librsync release. To show the
+library release and version, use the librsyncinfo tool.
+
+>> Platforms
+
+librsync/rproxy is known to run on:
+
+GNU Linux Debian 2.2 x86
+
+SUNWspro: (use -v for more warnings)
+
+mips-sgi-irix6.5: works, but you must use GNU Make rather than the
+default SGI Make. I used gcc.
+
+>> API Documentation
+
+librsync contains markup for automatic API documentation generation
+using the Doxygen tool:
+
+ http://www.doxygen.org/
+
+$Id$
+
diff --git a/rsync/THANKS b/rsync/THANKS
new file mode 100644
index 0000000..2e604e7
--- a/dev/null
+++ b/rsync/THANKS
@@ -0,0 +1,21 @@
+ -*- text -*-
+
+Andrew Tridgell and Paulus Mackerras started this whole mess. Luke
+Leighton was a tremendous help in sorting out the combined
+encoding/signature algorithm.
+
+Thanks to Linuxcare, Inc, <http://linuxcare.com/> for their support of
+this project.
+
+Neale Banks <neale@lowendale.com.au>: the first known user outside of
+OzLabs, and helped keep me honest.
+
+Paul `Rusty' Russell <rusty@linuxcare.com>
+Andrew Tridgell <tridge@samba.org>
+Paulus Mackerras <paulus@linuxcare.com>
+Peter Barker <pbarker@samba.org>
+Neale Banks <neale@lowendale.com.au>
+Luke Kenneth Casson Leighton <lkcl@samba.org>
+Tim Potter <tpot@linuxcare.com.au>
+Hugh Blemings <hugh@linuxcare.com.au>
+David Gibson <dgibson@linuxcare.com.au>
diff --git a/rsync/acconfig.h b/rsync/acconfig.h
new file mode 100644
index 0000000..94083c7
--- a/dev/null
+++ b/rsync/acconfig.h
@@ -0,0 +1,55 @@
+/* acconfig.h -- hand-written definitions to eventually go into config.h */
+
+/* Define this to enable trace code */
+#undef DO_RS_TRACE
+
+/* Version of the libtool interface. */
+#define RS_LIBVERSION "unknown"
+
+/* Define this if your sockaddr structure contains sin_len */
+#undef HAVE_SOCK_SIN_LEN
+
+/* Define this if there is a connect(2) call */
+#undef HAVE_CONNECT
+
+/* Define if we have an off64_t largefile type */
+#undef HAVE_OFF64_T
+
+/* Ask for large file support (LFS). Should always be on, even if it
+ * achieves nothing. */
+#undef _LARGEFILE_SOURCE
+#undef _LARGEFILE64_SOURCE
+
+/* How many bits would you like to have in an off_t? */
+#undef _FILE_OFFSET_BITS
+
+/* Define to include GNU C library extensions. */
+#undef _GNU_SOURCE
+
+/* Define to get i18n support */
+#undef ENABLE_NLS
+
+/* Define if you want the suboptimal X/Open catgets implementation */
+#undef HAVE_CATGETS
+
+/* Define if you want the nice new GNU and Uniforum gettext system */
+#undef HAVE_GETTEXT
+
+/* Define if your system has the LC_MESSAGES locale category */
+#undef HAVE_LC_MESSAGES
+
+/* Define if you have stpcpy (copy a string and return a pointer to
+ * the end of the result.) */
+#undef HAVE_STPCPY
+
+/* GNU extension of saving argv[0] to program_invocation_short_name */
+#undef HAVE_PROGRAM_INVOCATION_NAME
+
+/* Canonical GNU hostname */
+#define RS_CANONICAL_HOST "unknown"
+
+/* Define to a replacement type if intmax_t is not a builtin, or in
+ sys/types.h or stdlib.h or stddef.h */
+#undef intmax_t
+
+/* end of acconfig.h */
diff --git a/rsync/base64.c b/rsync/base64.c
new file mode 100644
index 0000000..cbe7a8c
--- a/dev/null
+++ b/rsync/base64.c
@@ -0,0 +1,101 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#include <config_rsync.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+
+/*
+ * Decode a base64 string in-place - simple and slow algorithm
+ *
+ * See RFC1521 for the specification of base64.
+ */
+size_t rs_unbase64(char *s)
+{
+ char const *b64 =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ int bit_offset, byte_offset, idx, i, n;
+ unsigned char *d = (unsigned char *) s;
+ char *p;
+
+ n = i = 0;
+
+ while (*s && (p = strchr(b64, *s))) {
+ idx = (int) (p - b64);
+ byte_offset = (i * 6) / 8;
+ bit_offset = (i * 6) % 8;
+ d[byte_offset] &= ~((1 << (8 - bit_offset)) - 1);
+ if (bit_offset < 3) {
+ d[byte_offset] |= (idx << (2 - bit_offset));
+ n = byte_offset + 1;
+ } else {
+ d[byte_offset] |= (idx >> (bit_offset - 2));
+ d[byte_offset + 1] = 0;
+ d[byte_offset + 1] |= (idx << (8 - (bit_offset - 2))) & 0xFF;
+ n = byte_offset + 2;
+ }
+ s++;
+ i++;
+ }
+
+ return n;
+}
+
+/*
+ * Encode a buffer as base64 - simple and slow algorithm.
+ */
+void
+rs_base64(unsigned char const *buf, int n, char *out)
+{
+ char const *b64 =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ int bytes, i;
+
+ /* work out how many bytes of output there are */
+ bytes = ((n * 8) + 5) / 6;
+
+ for (i = 0; i < bytes; i++) {
+ int byte = (i * 6) / 8;
+ int bit = (i * 6) % 8;
+
+ if (bit < 3) {
+ if (byte >= n)
+ abort();
+ *out = b64[(buf[byte] >> (2 - bit)) & 0x3F];
+ } else {
+ if (byte + 1 == n) {
+ *out = b64[(buf[byte] << (bit - 2)) & 0x3F];
+ } else {
+ *out = b64[(buf[byte] << (bit - 2) |
+ buf[byte + 1] >> (10 - bit)) & 0x3F];
+ }
+ }
+ out++;
+ }
+ *out = 0;
+}
+
diff --git a/rsync/buf.c b/rsync/buf.c
new file mode 100644
index 0000000..2814583
--- a/dev/null
+++ b/rsync/buf.c
@@ -0,0 +1,214 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | Pick a window, Jimmy, you're leaving.
+ | -- Martin Schwenke, regularly
+ */
+
+
+/*
+ * buf.c -- Buffers that map between stdio file streams and librsync
+ * streams. As the stream consumes input and produces output, it is
+ * refilled from appropriate input and output FILEs. A dynamically
+ * allocated buffer of configurable size is used as an intermediary.
+ *
+ * TODO: Perhaps be more efficient by filling the buffer on every call
+ * even if not yet completely empty. Check that it's really our
+ * buffer, and shuffle remaining data down to the front.
+ *
+ * TODO: Perhaps expose a routine for shuffling the buffers.
+ */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include "rsync.h"
+#include "trace.h"
+#include "buf.h"
+#include "util.h"
+
+/**
+ * File IO buffer sizes.
+ */
+int rs_inbuflen = 16000, rs_outbuflen = 16000;
+
+
+struct rs_filebuf {
+ FILE *f;
+ char *buf;
+ size_t buf_len;
+};
+
+
+
+rs_filebuf_t *rs_filebuf_new(FILE *f, size_t buf_len)
+{
+ rs_filebuf_t *pf = rs_alloc_struct(rs_filebuf_t);
+
+ pf->buf = rs_alloc(buf_len, "file buffer");
+ pf->buf_len = buf_len;
+ pf->f = f;
+
+ return pf;
+}
+
+
+void rs_filebuf_free(rs_filebuf_t *fb)
+{
+ if ( fb->buf )
+ free ( fb->buf );
+ rs_bzero(fb, sizeof *fb);
+ free(fb);
+}
+
+
+/*
+ * If the stream has no more data available, read some from F into
+ * BUF, and let the stream use that. On return, SEEN_EOF is true if
+ * the end of file has passed into the stream.
+ */
+rs_result rs_infilebuf_fill(rs_job_t *job, rs_buffers_t *buf,
+ void *opaque)
+{
+ int len;
+ rs_filebuf_t *fb = (rs_filebuf_t *) opaque;
+ FILE *f = fb->f;
+
+ /* This is only allowed if either the buf has no input buffer
+ * yet, or that buffer could possibly be BUF. */
+ if (buf->next_in != NULL) {
+ assert(buf->avail_in <= fb->buf_len);
+ assert(buf->next_in >= fb->buf);
+ assert(buf->next_in <= fb->buf + fb->buf_len);
+ } else {
+ assert(buf->avail_in == 0);
+ }
+
+ if (buf->eof_in || (buf->eof_in = feof(f))) {
+ rs_trace("seen end of file on input");
+ buf->eof_in = 1;
+ return RS_DONE;
+ }
+
+ if (buf->avail_in)
+ /* Still some data remaining. Perhaps we should read
+ anyhow? */
+ return RS_DONE;
+
+ len = fread(fb->buf, 1, fb->buf_len, f);
+ if (len < 0) {
+ if (ferror(f)) {
+ rs_error("error filling buf from file: %s",
+ strerror(errno));
+ return RS_IO_ERROR;
+ } else {
+ rs_error("no error bit, but got %d return when trying to read",
+ len);
+ return RS_IO_ERROR;
+ }
+ }
+ buf->avail_in = len;
+ buf->next_in = fb->buf;
+
+ return RS_DONE;
+}
+
+
+/*
+ * The buf is already using BUF for an output buffer, and probably
+ * contains some buffered output now. Write this out to F, and reset
+ * the buffer cursor.
+ */
+rs_result rs_outfilebuf_drain(rs_job_t *job, rs_buffers_t *buf, void *opaque)
+{
+ int present;
+ rs_filebuf_t *fb = (rs_filebuf_t *) opaque;
+ FILE *f = fb->f;
+
+ /* This is only allowed if either the buf has no output buffer
+ * yet, or that buffer could possibly be BUF. */
+ if (buf->next_out == NULL) {
+ assert(buf->avail_out == 0);
+
+ buf->next_out = fb->buf;
+ buf->avail_out = fb->buf_len;
+
+ return RS_DONE;
+ }
+
+ assert(buf->avail_out <= fb->buf_len);
+ assert(buf->next_out >= fb->buf);
+ assert(buf->next_out <= fb->buf + fb->buf_len);
+
+ present = buf->next_out - fb->buf;
+ if (present > 0) {
+ int result;
+
+ assert(present > 0);
+
+ result = fwrite(fb->buf, 1, present, f);
+ if (present != result) {
+ rs_error("error draining buf to file: %s",
+ strerror(errno));
+ return RS_IO_ERROR;
+ }
+
+ buf->next_out = fb->buf;
+ buf->avail_out = fb->buf_len;
+ }
+
+ return RS_DONE;
+}
+
+
+/**
+ * Default copy implementation that retrieves a part of a stdio file.
+ */
+rs_result rs_file_copy_cb(void *arg, off_t pos, size_t *len, void **buf)
+{
+ int got;
+ FILE *f = (FILE *) arg;
+
+ if (fseek(f, pos, SEEK_SET)) {
+ rs_log(RS_LOG_ERR, "seek failed: %s", strerror(errno));
+ return RS_IO_ERROR;
+ }
+
+ got = fread(*buf, 1, *len, f);
+ if (got == -1) {
+ rs_error(strerror(errno));
+ return RS_IO_ERROR;
+ } else if (got == 0) {
+ rs_error("unexpected eof on fd%d", fileno(f));
+ return RS_INPUT_ENDED;
+ } else {
+ *len = got;
+ return RS_DONE;
+ }
+}
diff --git a/rsync/buf.h b/rsync/buf.h
new file mode 100644
index 0000000..cb8386e
--- a/dev/null
+++ b/rsync/buf.h
@@ -0,0 +1,31 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+typedef struct rs_filebuf rs_filebuf_t;
+
+rs_filebuf_t *rs_filebuf_new(FILE *f, size_t buf_len);
+
+void rs_filebuf_free(rs_filebuf_t *fb);
+
+rs_result rs_infilebuf_fill(rs_job_t *, rs_buffers_t *buf, void *fb);
+
+rs_result rs_outfilebuf_drain(rs_job_t *, rs_buffers_t *, void *fb);
diff --git a/rsync/checksum.c b/rsync/checksum.c
new file mode 100644
index 0000000..eab9e46
--- a/dev/null
+++ b/rsync/checksum.c
@@ -0,0 +1,81 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1996 by Andrew Tridgell
+ * Copyright (C) 1996 by Paul Mackerras
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "checksum.h"
+
+
+/* This can possibly be used to restart the checksum system in the
+ * case where we detected corruption. I'm not sure yet how to make
+ * this useful in librsync. */
+int checksum_seed = 0;
+
+/*
+ * A simple 32 bit checksum that can be updated from either end
+ * (inspired by Mark Adler's Adler-32 checksum)
+ */
+unsigned int rs_calc_weak_sum(void const *p, int len)
+{
+ int i;
+ unsigned s1, s2;
+ unsigned char const *buf = (unsigned char const *) p;
+
+ s1 = s2 = 0;
+ for (i = 0; i < (len - 4); i += 4) {
+ s2 += 4 * (s1 + buf[i]) + 3 * buf[i + 1] +
+ 2 * buf[i + 2] + buf[i + 3] + 10 * RS_CHAR_OFFSET;
+ s1 += (buf[i + 0] + buf[i + 1] + buf[i + 2] + buf[i + 3] +
+ 4 * RS_CHAR_OFFSET);
+ }
+ for (; i < len; i++) {
+ s1 += (buf[i] + RS_CHAR_OFFSET);
+ s2 += s1;
+ }
+ return (s1 & 0xffff) + (s2 << 16);
+}
+
+
+/**
+ * Calculate and store into SUM a strong MD4 checksum of the file
+ * blocks seen so far.
+ *
+ * In plain rsync, the checksum is perturbed by a seed value. This is
+ * used when retrying a failed transmission: we've discovered that the
+ * hashes collided at some point, so we're going to try again with
+ * different hashes to see if we can get it right. (Check tridge's
+ * thesis for details and to see if that's correct.)
+ *
+ * Since we can't retry a web transaction I'm not sure if it's very
+ * useful in rproxy.
+ */
+void rs_calc_strong_sum(void const *buf, size_t len, rs_strong_sum_t *sum)
+{
+ rs_mdfour((unsigned char *) sum, buf, len);
+}
diff --git a/rsync/checksum.h b/rsync/checksum.h
new file mode 100644
index 0000000..b9fe543
--- a/dev/null
+++ b/rsync/checksum.h
@@ -0,0 +1,30 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+rs_weak_sum_t rs_calc_weak_sum(void const *buf1, int len);
+
+void rs_calc_strong_sum(void const *buf, size_t buf_len, rs_strong_sum_t *);
+
+/* We should make this something other than zero to improve the
+ * checksum algorithm: tridge suggests a prime number. */
+#define RS_CHAR_OFFSET 31
+
diff --git a/rsync/command.c b/rsync/command.c
new file mode 100644
index 0000000..9d56733
--- a/dev/null
+++ b/rsync/command.c
@@ -0,0 +1,61 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "command.h"
+
+/* For debugging purposes, here are some human-readable forms. */
+struct rs_op_kind_name const rs_op_kind_names[] = {
+ {"END", RS_KIND_END },
+ {"COPY", RS_KIND_COPY },
+ {"LITERAL", RS_KIND_LITERAL },
+ {"SIGNATURE", RS_KIND_SIGNATURE },
+ {"CHECKSUM", RS_KIND_CHECKSUM },
+ {"INVALID", RS_KIND_INVALID },
+ {NULL, 0 }
+};
+
+
+/*
+ * Return a human-readable name for KIND.
+ */
+char const * rs_op_kind_name(enum rs_op_kind kind)
+{
+ const struct rs_op_kind_name *k;
+
+ for (k = rs_op_kind_names; k->kind; k++) {
+ if (k->kind == kind) {
+ return k->name;
+ }
+ }
+
+ return NULL;
+}
+
+
diff --git a/rsync/command.h b/rsync/command.h
new file mode 100644
index 0000000..43da19d
--- a/dev/null
+++ b/rsync/command.h
@@ -0,0 +1,58 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * command.h -- Types of commands present in the encoding stream.
+ *
+ * The vague idea is that eventually this file will be more abstract
+ * than protocol.h, but it's not clear that will ever be required.
+ */
+
+
+/**
+ * Classes of operation that can be present. Each may have several different
+ * possible representations.
+ */
+enum rs_op_kind {
+ RS_KIND_END = 1000,
+ RS_KIND_LITERAL,
+ RS_KIND_SIGNATURE,
+ RS_KIND_COPY,
+ RS_KIND_CHECKSUM,
+ RS_KIND_RESERVED, /* for future expansion */
+
+ /* This one should never occur in file streams. It's an
+ * internal marker for invalid commands. */
+ RS_KIND_INVALID
+};
+
+
+typedef struct rs_op_kind_name {
+ char const *name;
+ enum rs_op_kind const kind;
+} rs_op_kind_name_t;
+
+char const * rs_op_kind_name(enum rs_op_kind);
+
+
diff --git a/rsync/config_linux.h b/rsync/config_linux.h
new file mode 100644
index 0000000..e5ff3e4
--- a/dev/null
+++ b/rsync/config_linux.h
@@ -0,0 +1,115 @@
+/* config.h. Generated automatically by configure. */
+/* config.h.in. Generated automatically from configure.in by autoheader 2.13. */
+
+/* Define to empty if the keyword does not work. */
+/* #undef const */
+
+/* Define to `long' if <sys/types.h> doesn't define. */
+/* #undef off_t */
+
+/* Define to `unsigned' if <sys/types.h> doesn't define. */
+/* #undef size_t */
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define this if your sockaddr structure contains sin_len */
+/* #undef HAVE_SOCK_SIN_LEN */
+
+/* How many bits would you like to have in an off_t? */
+#define _FILE_OFFSET_BITS 64
+
+/* Define to include GNU C library extensions. */
+#define _GNU_SOURCE 1
+
+/* GNU extension of saving argv[0] to program_invocation_short_name */
+#define HAVE_PROGRAM_INVOCATION_NAME 1
+
+/* Define to a replacement type if intmax_t is not a builtin, or in
+ sys/types.h or stdlib.h or stddef.h */
+/* #undef intmax_t */
+
+/* The number of bytes in a int. */
+#define SIZEOF_INT 4
+
+/* The number of bytes in a long. */
+#define SIZEOF_LONG 4
+
+/* The number of bytes in a off_t. */
+#define SIZEOF_OFF_T 8
+
+/* The number of bytes in a short. */
+#define SIZEOF_SHORT 2
+
+/* The number of bytes in a size_t. */
+#define SIZEOF_SIZE_T 4
+
+/* The number of bytes in a unsigned char. */
+#define SIZEOF_UNSIGNED_CHAR 1
+
+/* The number of bytes in a unsigned int. */
+#define SIZEOF_UNSIGNED_INT 4
+
+/* The number of bytes in a unsigned long. */
+#define SIZEOF_UNSIGNED_LONG 4
+
+/* The number of bytes in a unsigned short. */
+#define SIZEOF_UNSIGNED_SHORT 2
+
+/* Define if you have the mtrace function. */
+#define HAVE_MTRACE 1
+
+/* Define if you have the snprintf function. */
+#define HAVE_SNPRINTF 1
+
+/* Define if you have the strerror function. */
+#define HAVE_STRERROR 1
+
+/* Define if you have the vsnprintf function. */
+#define HAVE_VSNPRINTF 1
+
+/* Define if you have the <alloca.h> header file. */
+#define HAVE_ALLOCA_H 1
+
+/* Define if you have the <bzlib.h> header file. */
+#define HAVE_BZLIB_H 1
+
+/* Define if you have the <config.h> header file. */
+/* #undef HAVE_CONFIG_H */
+
+/* Define if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define if you have the <libintl.h> header file. */
+#define HAVE_LIBINTL_H 1
+
+/* Define if you have the <mcheck.h> header file. */
+#define HAVE_MCHECK_H 1
+
+/* Define if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define if you have the popt library (-lpopt). */
+#define HAVE_LIBPOPT 1
+
+/* Name of package */
+#define PACKAGE "librsync"
+
+/* Version number of package */
+#define VERSION "0.9.5"
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#define _FILE_OFFSET_BITS 64
+
+/* Define to make ftello visible on some hosts (e.g. HP-UX 10.20). */
+/* #undef _LARGEFILE_SOURCE */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Define to make ftello visible on some hosts (e.g. glibc 2.1.3). */
+/* #undef _XOPEN_SOURCE */
+
diff --git a/rsync/config_rsync.h b/rsync/config_rsync.h
new file mode 100644
index 0000000..a646eba
--- a/dev/null
+++ b/rsync/config_rsync.h
@@ -0,0 +1,2 @@
+#include "config_linux.h"
+
diff --git a/rsync/delta.c b/rsync/delta.c
new file mode 100644
index 0000000..323c079
--- a/dev/null
+++ b/rsync/delta.c
@@ -0,0 +1,351 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | Let's climb to the TOP of that
+ | MOUNTAIN and think about STRIP
+ | MINING!!
+ */
+
+
+/*
+ * delta.c -- Generate in streaming mode an rsync delta given a set of
+ * signatures, and a new file.
+ *
+ * The size of blocks for signature generation is determined by the
+ * block size in the incoming signature.
+ *
+ * To calculate a signature, we need to be able to see at least one
+ * block of the new file at a time. Once we have that, we calculate
+ * its weak signature, and see if there is any block in the signature
+ * hash table that has the same weak sum. If there is one, then we
+ * also compute the strong sum of the new block, and cross check that.
+ * If they're the same, then we can assume we have a match.
+ *
+ * The final block of the file has to be handled a little differently,
+ * because it may be a short match. Short blocks in the signature
+ * don't include their length -- we just allow for the final short
+ * block of the file to match any block in the signature, and if they
+ * have the same checksum we assume they must have the same length.
+ * Therefore, when we emit a COPY command, we have to send it with a
+ * length that is the same as the block matched, and not the block
+ * length from the signature.
+ */
+
+/*
+ * Profiling results as of v1.26, 2001-03-18:
+ *
+ * If everything matches, then we spend almost all our time in
+ * rs_mdfour64 and rs_weak_sum, which is unavoidable and therefore a
+ * good profile.
+ *
+ * If nothing matches, it is not so good.
+ */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "emit.h"
+#include "stream.h"
+#include "util.h"
+#include "sumset.h"
+#include "job.h"
+#include "trace.h"
+#include "checksum.h"
+#include "search.h"
+#include "types.h"
+
+
+/**
+ * Turn this on to make all rolling checksums be checked from scratch.
+ */
+int rs_roll_paranoia = 0;
+
+
+static rs_result rs_delta_scan(rs_job_t *, rs_long_t avail_len, void *);
+
+static rs_result rs_delta_s_deferred_copy(rs_job_t *job);
+
+
+
+static rs_result rs_delta_s_end(rs_job_t *job)
+{
+ rs_emit_end_cmd(job);
+ return RS_DONE;
+}
+
+
+/**
+ * \brief Get a block of data if possible, and see if it matches.
+ *
+ * On each call, we try to process all of the input data available on
+ * the scoop and input buffer.
+ */
+static rs_result
+rs_delta_s_scan(rs_job_t *job)
+{
+ size_t this_len, avail_len;
+ int is_ending;
+ void *inptr;
+ rs_result result;
+
+ rs_job_check(job);
+
+ avail_len = rs_scoop_total_avail(job);
+ this_len = job->block_len;
+ is_ending = job->stream->eof_in;
+
+ /* Now, we have avail_len bytes, and we need to scan through them
+ * looking for a match. We'll always end up emitting exactly one
+ * command, either a literal or a copy, and after discovering that
+ * we will skip over the appropriate number of bytes. */
+ if (avail_len == 0) {
+ if (is_ending) {
+ /* no more delta to do */
+ job->statefn = rs_delta_s_end;
+ }
+ return RS_BLOCKED;
+ }
+
+ /* must read at least one block, or give up */
+ if ((avail_len < job->block_len) && !is_ending) {
+ /* we know we won't get it, but we have to try for a whole
+ * block anyhow so that it gets into the scoop. */
+ rs_scoop_input(job, job->block_len);
+ return RS_BLOCKED;
+ }
+
+ result = rs_scoop_readahead(job, avail_len, &inptr);
+ if (result != RS_DONE)
+ return result;
+
+ return rs_delta_scan(job, avail_len, inptr);
+}
+
+
+
+/**
+ * Scan for a matching block in the next \p avail_len bytes of input.
+ *
+ * If nonmatching data is found, then a LITERAL command will be put in
+ * the tube immediately. If matching data is found, then its position
+ * will be saved in the job, and the job state set up to write out a
+ * COPY command after handling the literal.
+ */
+static rs_result
+rs_delta_scan(rs_job_t *job, rs_long_t avail_len, void *p)
+{
+ rs_long_t match_where;
+ int search_pos, end_pos;
+ unsigned char *inptr = (unsigned char *) p;
+ uint32_t s1 = job->weak_sig & 0xFFFF;
+ uint32_t s2 = job->weak_sig >> 16;
+
+ /* So, we have avail_len bytes of data, and we want to look
+ * through it for a match at some point. It's OK if it's not at
+ * the start of the available input data. If we're approaching
+ * the end and can't get a match, then we just block and get more
+ * later. */
+
+ /* FIXME: Perhaps we should be working in signed chars for the
+ * rolling sum? */
+
+ if (job->stream->eof_in)
+ end_pos = avail_len - 1;
+ else
+ end_pos = avail_len - job->block_len;
+
+ for (search_pos = 0; search_pos <= end_pos; search_pos++) {
+ size_t this_len = job->block_len;
+
+ if (search_pos + this_len > avail_len) {
+ this_len = avail_len - search_pos;
+ rs_trace("block reduced to %d", this_len);
+ } else if (job->have_weak_sig) {
+ unsigned char a = inptr[search_pos + this_len - 1];
+ /* roll in the newly added byte, if any */
+ s1 += a + RS_CHAR_OFFSET;
+ s2 += s1;
+
+ job->weak_sig = (s1 & 0xffff) | (s2 << 16);
+ }
+
+ if (!job->have_weak_sig) {
+ rs_trace("calculate weak sum from scratch");
+ job->weak_sig = rs_calc_weak_sum(inptr + search_pos, this_len);
+ s1 = job->weak_sig & 0xFFFF;
+ s2 = job->weak_sig >> 16;
+ job->have_weak_sig = 1;
+ }
+
+ if (rs_roll_paranoia) {
+ rs_weak_sum_t verify = rs_calc_weak_sum(inptr + search_pos, this_len);
+ if (verify != job->weak_sig) {
+ rs_fatal("mismatch between rolled sum %#x and check %#x",
+ job->weak_sig, verify);
+ }
+ }
+
+ if (rs_search_for_block(job->weak_sig, inptr + search_pos, this_len,
+ job->signature, &job->stats, &match_where)) {
+ /* So, we got a match. Cool. However, there may be
+ * leading unmatched data that we need to flush. Thus we
+ * set our statefn to be rs_delta_s_deferred_copy so that
+ * we can write out the command later. */
+
+ rs_trace("matched %.0f bytes at %.0f!",
+ (double) this_len, (double) match_where);
+ job->basis_pos = match_where;
+ job->basis_len = this_len;
+ job->statefn = rs_delta_s_deferred_copy;
+ job->have_weak_sig = 0;
+ break;
+ } else {
+ /* advance by one; roll out the byte we just moved over. */
+ unsigned char a = inptr[search_pos];
+ unsigned char shift = a + RS_CHAR_OFFSET;
+
+ s1 -= shift;
+ s2 -= this_len * shift;
+ job->weak_sig = (s1 & 0xffff) | (s2 << 16);
+ }
+ }
+
+ if (search_pos > 0) {
+ /* We may or may not have found a block, but we know we found
+ * some literal data at the start of the buffer. Therefore,
+ * we have to flush that out before we can continue on and
+ * emit the copy command or keep searching. */
+
+ /* FIXME: At the moment, if you call with very short buffers,
+ * then you will get a series of very short LITERAL commands.
+ * Perhaps this is what you deserve, or perhaps we should try
+ * to get more readahead and avoid that. */
+
+ /* There's some literal data at the start of this window which
+ * we know is not in any block. */
+ rs_trace("got %d bytes of literal data", search_pos);
+ rs_emit_literal_cmd(job, search_pos);
+ rs_tube_copy(job, search_pos);
+ }
+
+ return RS_RUNNING;
+}
+
+
+
+static rs_result rs_delta_s_deferred_copy(rs_job_t *job)
+{
+ if (!job->basis_len) {
+ rs_log(RS_LOG_ERR, "somehow got zero basis_len");
+ return RS_INTERNAL_ERROR;
+ }
+
+ rs_emit_copy_cmd(job, job->basis_pos, job->basis_len);
+ rs_scoop_advance(job, job->basis_len);
+
+ job->statefn = rs_delta_s_scan;
+
+ return RS_RUNNING;
+}
+
+
+/**
+ * \brief State function that does a slack delta containing only
+ * literal data to recreate the input.
+ */
+static rs_result rs_delta_s_slack(rs_job_t *job)
+{
+ rs_buffers_t * const stream = job->stream;
+ size_t avail = stream->avail_in;
+
+ if (avail) {
+ rs_trace("emit slack delta for %.0f available bytes", (double) avail);
+ rs_emit_literal_cmd(job, avail);
+ rs_tube_copy(job, avail);
+ return RS_RUNNING;
+ } else {
+ if (rs_job_input_is_ending(job)) {
+ job->statefn = rs_delta_s_end;
+ return RS_RUNNING;
+ } else {
+ return RS_BLOCKED;
+ }
+ }
+}
+
+
+/**
+ * State function for writing out the header of the encoding job.
+ */
+static rs_result rs_delta_s_header(rs_job_t *job)
+{
+ rs_emit_delta_header(job);
+
+ if (job->block_len) {
+ if (!job->signature) {
+ rs_error("no signature is loaded into the job");
+ return RS_PARAM_ERROR;
+ }
+ job->statefn = rs_delta_s_scan;
+ } else {
+ rs_trace("block length is zero for this delta; "
+ "therefore using slack deltas");
+ job->statefn = rs_delta_s_slack;
+ }
+
+ return RS_RUNNING;
+}
+
+
+/**
+ * Prepare to compute a streaming delta.
+ */
+rs_job_t *rs_delta_begin(rs_signature_t *sig)
+{
+ rs_job_t *job;
+
+ job = rs_job_new("delta", rs_delta_s_header);
+ job->signature = sig;
+
+ if ((job->block_len = sig->block_len) < 0) {
+ rs_log(RS_LOG_ERR, "unreasonable block_len %d in signature",
+ job->block_len);
+ return NULL;
+ }
+
+ job->strong_sum_len = sig->strong_sum_len;
+ if (job->strong_sum_len < 0 || job->strong_sum_len > RS_MD4_LENGTH) {
+ rs_log(RS_LOG_ERR, "unreasonable strong_sum_len %d in signature",
+ job->strong_sum_len);
+ return NULL;
+ }
+
+ return job;
+}
+
+
diff --git a/rsync/emit.c b/rsync/emit.c
new file mode 100644
index 0000000..bdfc6d1
--- a/dev/null
+++ b/rsync/emit.c
@@ -0,0 +1,131 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- dynamic caching and delta update in HTTP
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+ /*
+ * [almost sobbing] They don't sleep
+ * anymore on the beach. They don't
+ * sleep on the beach anymore.
+ */
+
+/*
+ * TODO: Pluggable encoding formats:
+ *
+ * - gdiff-style
+ * - rsync 24
+ * - ed (text)
+ * - Delta HTTP
+ */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "command.h"
+#include "protocol.h"
+#include "trace.h"
+#include "emit.h"
+#include "prototab.h"
+#include "netint.h"
+#include "sumset.h"
+#include "job.h"
+
+
+/*
+ * Write the magic for the start of a delta.
+ */
+void
+rs_emit_delta_header(rs_job_t *job)
+{
+ rs_trace("emit DELTA magic");
+ rs_squirt_n4(job, RS_DELTA_MAGIC);
+}
+
+
+
+/* Write a LITERAL command. */
+void
+rs_emit_literal_cmd(rs_job_t *job, int len)
+{
+ int cmd;
+ int param_len;
+
+ switch (param_len = rs_int_len(len)) {
+ case 1:
+ cmd = RS_OP_LITERAL_N1;
+ break;
+ case 2:
+ cmd = RS_OP_LITERAL_N2;
+ break;
+ case 4:
+ cmd = RS_OP_LITERAL_N4;
+ break;
+ default:
+ rs_fatal("What?");
+ }
+
+ rs_trace("emit LITERAL_N%d(len=%d), cmd_byte=%#x", param_len, len, cmd);
+ rs_squirt_byte(job, cmd);
+ rs_squirt_netint(job, len, param_len);
+
+ job->stats.lit_cmds++;
+ job->stats.lit_bytes += len;
+ job->stats.lit_cmdbytes += 1 + param_len;
+}
+
+
+/** Write a COPY command. */
+void
+rs_emit_copy_cmd(rs_job_t *job, rs_long_t where, rs_long_t len)
+{
+ int cmd;
+ rs_stats_t *stats = &job->stats;
+
+ cmd = RS_OP_COPY_N4_N4;
+
+ rs_trace("emit COPY_N4_N4(where=%.0f, len=%.0f), cmd_byte=%#x",
+ (double) where, (double) len, cmd);
+ rs_squirt_byte(job, cmd);
+ rs_squirt_netint(job, where, 4);
+ rs_squirt_netint(job, len, 4);
+
+ stats->copy_cmds++;
+ stats->copy_bytes += len;
+ stats->copy_cmdbytes += 1 + 4 + 4;
+
+ /* TODO: All the stats */
+}
+
+
+/** Write an END command. */
+void
+rs_emit_end_cmd(rs_job_t *job)
+{
+ int cmd = RS_OP_END;
+
+ rs_trace("emit END, cmd_byte=%#x", cmd);
+ rs_squirt_byte(job, cmd);
+}
diff --git a/rsync/emit.h b/rsync/emit.h
new file mode 100644
index 0000000..96bff89
--- a/dev/null
+++ b/rsync/emit.h
@@ -0,0 +1,32 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- dynamic caching and delta update in HTTP
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * emit.h -- How to emit commands to the client
+ */
+
+
+void rs_emit_delta_header(rs_job_t *);
+void rs_emit_literal_cmd(rs_job_t *, int len);
+void rs_emit_end_cmd(rs_job_t *);
+void rs_emit_copy_cmd(rs_job_t *job, rs_long_t where, rs_long_t len);
diff --git a/rsync/fileutil.c b/rsync/fileutil.c
new file mode 100644
index 0000000..75a6bb4
--- a/dev/null
+++ b/rsync/fileutil.c
@@ -0,0 +1,70 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/file.h>
+#include <string.h>
+#include <errno.h>
+
+#include "rsync.h"
+#include "fileutil.h"
+#include "trace.h"
+
+
+
+/**
+ * \brief Open a file, with special handling for `-' or unspecified
+ * parameters on input and output.
+ *
+ * \param fopen-style mode string.
+ */
+FILE *
+rs_file_open(char const *filename, char const *mode)
+{
+ FILE *f;
+ int is_write;
+
+ is_write = mode[0] == 'w';
+
+ if (!filename || !strcmp("-", filename)) {
+ if (is_write)
+ return stdout;
+ else
+ return stdin;
+ }
+
+ if (!(f = fopen(filename, mode))) {
+ rs_error("Error opening \"%s\" for %s: %s", filename,
+ is_write ? "write" : "read",
+ strerror(errno));
+ exit(RS_IO_ERROR);
+ }
+
+ return f;
+}
diff --git a/rsync/fileutil.h b/rsync/fileutil.h
new file mode 100644
index 0000000..b46f7c1
--- a/dev/null
+++ b/rsync/fileutil.h
@@ -0,0 +1,23 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- *
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+FILE * rs_file_open(char const *filename, char const * mode);
diff --git a/rsync/hex.c b/rsync/hex.c
new file mode 100644
index 0000000..e10b686
--- a/dev/null
+++ b/rsync/hex.c
@@ -0,0 +1,46 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ * rproxy -- dynamic caching and delta update in HTTP
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <sys/types.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+
+
+void
+rs_hexify(char *to_buf, void const *from, int from_len)
+{
+ static const char hex_chars[] = "0123456789abcdef";
+ unsigned char const *from_buf = (unsigned char const *) from;
+
+ while (from_len-- > 0) {
+ *(to_buf++) = hex_chars[((*from_buf) >> 4) & 0xf];
+ *(to_buf++) = hex_chars[(*from_buf) & 0xf];
+ from_buf++;
+ }
+
+ *to_buf = 0;
+}
diff --git a/rsync/job.c b/rsync/job.c
new file mode 100644
index 0000000..680982d
--- a/dev/null
+++ b/rsync/job.c
@@ -0,0 +1,251 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+ /*
+ | The hard, lifeless I covered up the
+ | warm, pulsing It; protecting and
+ | sheltering.
+ */
+
+/*
+ * job.c -- Generic state-machine interface. The point of this is
+ * that we need to be able to suspend and resume processing at any
+ * point at which the buffers may block. We could do that using
+ * setjmp or similar tricks, but this is probably simpler.
+ *
+ * TODO: We have a few functions to do with reading a netint, stashing
+ * it somewhere, then moving into a different state. Is it worth
+ * writing generic functions fo r that, or would it be too confusing?
+ */
+
+
+#include <config_rsync.h>
+
+#include <stdlib.h>
+#include <assert.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "stream.h"
+#include "util.h"
+#include "sumset.h"
+#include "job.h"
+#include "trace.h"
+
+
+static const int rs_job_tag = 20010225;
+
+static rs_result rs_job_work(rs_job_t *job, rs_buffers_t *buffers);
+
+
+rs_job_t * rs_job_new(char const *job_name, rs_result (*statefn)(rs_job_t *))
+{
+ rs_job_t *job;
+
+ job = rs_alloc_struct(rs_job_t);
+
+ job->job_name = job_name;
+ job->dogtag = rs_job_tag;
+ job->statefn = statefn;
+
+ job->stats.op = job_name;
+
+ rs_trace("start %s job", job_name);
+
+ return job;
+}
+
+
+void rs_job_check(rs_job_t *job)
+{
+ assert(job->dogtag == rs_job_tag);
+}
+
+
+rs_result rs_job_free(rs_job_t *job)
+{
+ rs_bzero(job, sizeof *job);
+ free(job);
+
+ return RS_DONE;
+}
+
+
+
+static rs_result rs_job_s_complete(rs_job_t *job)
+{
+ rs_fatal("should not be reached");
+ return RS_INTERNAL_ERROR;
+}
+
+
+static rs_result rs_job_complete(rs_job_t *job, rs_result result)
+{
+ rs_job_check(job);
+
+ job->statefn = rs_job_s_complete;
+ job->final_result = result;
+
+ if (result != RS_DONE) {
+ rs_error("%s job failed: %s", job->job_name, rs_strerror(result));
+ } else {
+ rs_trace("%s job complete", job->job_name);
+ }
+
+ if (result == RS_DONE && !rs_tube_is_idle(job))
+ /* Processing is finished, but there is still some data
+ * waiting to get into the output buffer. */
+ return RS_BLOCKED;
+ else
+ return result;
+}
+
+
+/**
+ * \brief Run a ::rs_job_t state machine until it blocks
+ * (::RS_BLOCKED), returns an error, or completes (::RS_COMPLETE).
+ *
+ * \return The ::rs_result that caused iteration to stop.
+ *
+ * \param ending True if there is no more data after what's in the
+ * input buffer. The final block checksum will run across whatever's
+ * in there, without trying to accumulate anything else.
+ */
+rs_result rs_job_iter(rs_job_t *job, rs_buffers_t *buffers)
+{
+ rs_result result;
+ rs_long_t orig_in, orig_out;
+
+ orig_in = buffers->avail_in;
+ orig_out = buffers->avail_out;
+
+ result = rs_job_work(job, buffers);
+
+ if (result == RS_BLOCKED || result == RS_DONE)
+ if ((orig_in == buffers->avail_in) && (orig_out == buffers->avail_out)
+ && orig_in && orig_out) {
+ rs_log(RS_LOG_ERR, "internal error: job made no progress "
+ "[orig_in=%.0f, orig_out=%.0f, final_in=%.0f, final_out=%.0f]",
+ (double) orig_in, (double) orig_out, (double) buffers->avail_in,
+ (double) buffers->avail_out);
+ return RS_INTERNAL_ERROR;
+ }
+
+ return result;
+}
+
+
+static rs_result
+rs_job_work(rs_job_t *job, rs_buffers_t *buffers)
+{
+ rs_result result;
+
+ rs_job_check(job);
+
+ if (!buffers) {
+ rs_error("NULL buffer passed to rs_job_iter");
+ return RS_PARAM_ERROR;
+ }
+ job->stream = buffers;
+
+ while (1) {
+ result = rs_tube_catchup(job);
+ if (result == RS_BLOCKED)
+ return result;
+ else if (result != RS_DONE)
+ return rs_job_complete(job, result);
+
+ if (job->statefn == rs_job_s_complete) {
+ if (rs_tube_is_idle(job))
+ return RS_DONE;
+ else
+ return RS_BLOCKED;
+ } else {
+ result = job->statefn(job);
+ if (result == RS_RUNNING)
+ continue;
+ else if (result == RS_BLOCKED)
+ return result;
+ else
+ return rs_job_complete(job, result);
+ }
+ }
+
+ /* TODO: Before returning, check that we actually made some
+ * progress. If not, and we're not returning an error, this is a
+ * bug. */
+}
+
+
+/**
+ * Return pointer to statistics accumulated about this job.
+ */
+const rs_stats_t *
+rs_job_statistics(rs_job_t *job)
+{
+ return &job->stats;
+}
+
+
+int
+rs_job_input_is_ending(rs_job_t *job)
+{
+ return job->stream->eof_in;
+}
+
+
+
+/**
+ * Actively process a job, by making callbacks to fill and empty the
+ * buffers until the job is done.
+ */
+rs_result
+rs_job_drive(rs_job_t *job, rs_buffers_t *buf,
+ rs_driven_cb in_cb, void *in_opaque,
+ rs_driven_cb out_cb, void *out_opaque)
+{
+ rs_result result, iores;
+
+ rs_bzero(buf, sizeof *buf);
+
+ do {
+ if (!buf->eof_in && in_cb) {
+ iores = in_cb(job, buf, in_opaque);
+ if (iores != RS_DONE)
+ return iores;
+ }
+
+ result = rs_job_iter(job, buf);
+ if (result != RS_DONE && result != RS_BLOCKED)
+ return result;
+
+ if (out_cb) {
+ iores = (out_cb)(job, buf, out_opaque);
+ if (iores != RS_DONE)
+ return iores;
+ }
+ } while (result != RS_DONE);
+
+ return result;
+}
+
diff --git a/rsync/job.h b/rsync/job.h
new file mode 100644
index 0000000..33c0cd7
--- a/dev/null
+++ b/rsync/job.h
@@ -0,0 +1,99 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+struct rs_job {
+ int dogtag;
+
+ /** Human-readable job operation name. */
+ const char *job_name;
+
+ rs_buffers_t *stream;
+
+ /** Callback for each processing step. */
+ rs_result (*statefn)(rs_job_t *);
+
+ /** Final result of processing job. Used by rs_job_s_failed(). */
+ rs_result final_result;
+
+ /* XXX: These next two are redundant with their equivalents in the
+ * signature field. Perhaps we should get rid of them, but
+ * they're also used in the mksum operation. */
+ int block_len;
+ int strong_sum_len;
+
+ /** Signature that's either being read in, or used for
+ * generating a delta. */
+ rs_signature_t *signature;
+
+ /** Command byte currently being processed, if any. */
+ unsigned char op;
+
+ /** If in the middle of reading a signature (rs_loadsig_s_weak()),
+ * or generating a delta, this contains the weak signature. */
+ rs_weak_sum_t weak_sig;
+
+ /** If generating a delta, this is true if we have a valid weak signature and
+ * can roll it forward. */
+ int have_weak_sig;
+
+ /** Lengths of expected parameters. */
+ rs_long_t param1, param2;
+
+ struct rs_prototab_ent const *cmd;
+ rs_mdfour_t output_md4;
+
+ /** Encoding statistics. */
+ rs_stats_t stats;
+
+ /** Buffer of data left over in the scoop. Allocation is
+ * scoop_buf..scoop_alloc, and scoop_next[0..scoop_avail]
+ * contains valid data. */
+ char *scoop_buf;
+ char *scoop_next;
+ size_t scoop_alloc;
+ size_t scoop_avail;
+
+ /** If USED is >0, then buf contains that much write data to
+ * be sent out. */
+ char write_buf[16];
+ int write_len;
+
+ /** If \p copy_len is >0, then that much data should be copied
+ * through from the input. */
+ rs_long_t copy_len;
+
+ /** Copy from the basis position. */
+ rs_long_t basis_pos, basis_len;
+
+ /** Callback used to copy data from the basis into the output. */
+ rs_copy_cb *copy_cb;
+ void *copy_arg;
+};
+
+
+rs_job_t * rs_job_new(const char *, rs_result (*statefn)(rs_job_t *));
+
+void rs_job_check(rs_job_t *job);
+const rs_stats_t *rs_job_statistics(rs_job_t *);
+
+int rs_job_input_is_ending(rs_job_t *job);
diff --git a/rsync/mdfour.c b/rsync/mdfour.c
new file mode 100644
index 0000000..4c3568d
--- a/dev/null
+++ b/rsync/mdfour.c
@@ -0,0 +1,326 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1997-1999 by Andrew Tridgell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/* MD4 message digest algorithm.
+ *
+ * TODO: Perhaps use the MD4 routine from OpenSSL if it's installed.
+ * It's probably not worth the trouble.
+ *
+ * This was originally written by Andrew Tridgell for use in Samba. */
+
+#include <config_rsync.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "trace.h"
+#include "types.h"
+
+
+static void (*rs_mdfour_block)(rs_mdfour_t *md, void const *p) = NULL;
+
+
+#define F(X,Y,Z) (((X)&(Y)) | ((~(X))&(Z)))
+#define G(X,Y,Z) (((X)&(Y)) | ((X)&(Z)) | ((Y)&(Z)))
+#define H(X,Y,Z) ((X)^(Y)^(Z))
+#define lshift(x,s) (((x)<<(s)) | ((x)>>(32-(s))))
+
+#define ROUND1(a,b,c,d,k,s) a = lshift(a + F(b,c,d) + X[k], s)
+#define ROUND2(a,b,c,d,k,s) a = lshift(a + G(b,c,d) + X[k] + 0x5A827999,s)
+#define ROUND3(a,b,c,d,k,s) a = lshift(a + H(b,c,d) + X[k] + 0x6ED9EBA1,s)
+
+/**
+ * Update an MD4 accumulator from a 64-byte chunk.
+ *
+ * This cannot be used for the last chunk of the file, which must be
+ * padded and contain the file length. rs_mdfour_tail() is used for
+ * that.
+ *
+ * \todo Recode to be fast, and to use system integer types. Perhaps
+ * if we can find an mdfour implementation already on the system
+ * (e.g. in OpenSSL) then we should use it instead of our own?
+ *
+ * \param X A series of integer, read little-endian from the file.
+ */
+static void
+rs_mdfour64(rs_mdfour_t * m, const void *p)
+{
+ uint32_t AA, BB, CC, DD;
+ uint32_t A, B, C, D;
+ const uint32_t *X = (const uint32_t *) p;
+
+ A = m->A;
+ B = m->B;
+ C = m->C;
+ D = m->D;
+ AA = A;
+ BB = B;
+ CC = C;
+ DD = D;
+
+ ROUND1(A, B, C, D, 0, 3);
+ ROUND1(D, A, B, C, 1, 7);
+ ROUND1(C, D, A, B, 2, 11);
+ ROUND1(B, C, D, A, 3, 19);
+ ROUND1(A, B, C, D, 4, 3);
+ ROUND1(D, A, B, C, 5, 7);
+ ROUND1(C, D, A, B, 6, 11);
+ ROUND1(B, C, D, A, 7, 19);
+ ROUND1(A, B, C, D, 8, 3);
+ ROUND1(D, A, B, C, 9, 7);
+ ROUND1(C, D, A, B, 10, 11);
+ ROUND1(B, C, D, A, 11, 19);
+ ROUND1(A, B, C, D, 12, 3);
+ ROUND1(D, A, B, C, 13, 7);
+ ROUND1(C, D, A, B, 14, 11);
+ ROUND1(B, C, D, A, 15, 19);
+
+ ROUND2(A, B, C, D, 0, 3);
+ ROUND2(D, A, B, C, 4, 5);
+ ROUND2(C, D, A, B, 8, 9);
+ ROUND2(B, C, D, A, 12, 13);
+ ROUND2(A, B, C, D, 1, 3);
+ ROUND2(D, A, B, C, 5, 5);
+ ROUND2(C, D, A, B, 9, 9);
+ ROUND2(B, C, D, A, 13, 13);
+ ROUND2(A, B, C, D, 2, 3);
+ ROUND2(D, A, B, C, 6, 5);
+ ROUND2(C, D, A, B, 10, 9);
+ ROUND2(B, C, D, A, 14, 13);
+ ROUND2(A, B, C, D, 3, 3);
+ ROUND2(D, A, B, C, 7, 5);
+ ROUND2(C, D, A, B, 11, 9);
+ ROUND2(B, C, D, A, 15, 13);
+
+ ROUND3(A, B, C, D, 0, 3);
+ ROUND3(D, A, B, C, 8, 9);
+ ROUND3(C, D, A, B, 4, 11);
+ ROUND3(B, C, D, A, 12, 15);
+ ROUND3(A, B, C, D, 2, 3);
+ ROUND3(D, A, B, C, 10, 9);
+ ROUND3(C, D, A, B, 6, 11);
+ ROUND3(B, C, D, A, 14, 15);
+ ROUND3(A, B, C, D, 1, 3);
+ ROUND3(D, A, B, C, 9, 9);
+ ROUND3(C, D, A, B, 5, 11);
+ ROUND3(B, C, D, A, 13, 15);
+ ROUND3(A, B, C, D, 3, 3);
+ ROUND3(D, A, B, C, 11, 9);
+ ROUND3(C, D, A, B, 7, 11);
+ ROUND3(B, C, D, A, 15, 15);
+
+ A += AA;
+ B += BB;
+ C += CC;
+ D += DD;
+
+ m->A = A;
+ m->B = B;
+ m->C = C;
+ m->D = D;
+}
+
+
+/* These next two routines are necessary because MD4 is specified in
+ * terms of little-endian int32s, but we have a byte buffer. On
+ * little-endian platforms, I think we can just use the buffer pointer
+ * directly.
+ *
+ * There are some nice endianness routines in glib, including
+ * assembler variants. If we ever depended on glib, then it could be
+ * good to use them instead. */
+static void
+copy64( /* @out@ */ uint32_t * M, unsigned char const *in)
+{
+ int i;
+
+ for (i = 0; i < 16; i++)
+ M[i] = (in[i * 4 + 3] << 24) | (in[i * 4 + 2] << 16) |
+ (in[i * 4 + 1] << 8) | (in[i * 4 + 0] << 0);
+}
+
+static void
+copy4( /* @out@ */ unsigned char *out, uint32_t const x)
+{
+ out[0] = x & 0xFF;
+ out[1] = (x >> 8) & 0xFF;
+ out[2] = (x >> 16) & 0xFF;
+ out[3] = (x >> 24) & 0xFF;
+}
+
+
+
+/**
+ * Accumulate a block, making appropriate conversions for bigendian
+ * machines.
+ */
+static void
+rs_mdfour_block_slow(rs_mdfour_t *md, void const *p)
+{
+ uint32_t M[16];
+
+ copy64(M, p);
+ rs_mdfour64(md, M);
+}
+
+
+static void
+rs_mdfour_choose_packer(void)
+{
+ static const char foo[] = { 0xde, 0xad, 0xbe, 0xef};
+ const uint32_t *p = (const uint32_t *) foo;
+
+ if (sizeof(uint32_t) != 4)
+ rs_fatal("internal error: uint32_t is not really 32 bits!");
+ if (sizeof(foo) != 4)
+ rs_fatal("internal error: something wierd about char arrays");
+
+ if (*p == 0xdeadbeef) {
+ rs_trace("big-endian machine");
+ rs_mdfour_block = rs_mdfour_block_slow;
+ } else if (*p == 0xefbeadde) {
+ rs_trace("little-endian machine");
+ rs_mdfour_block = rs_mdfour64;
+ } else {
+ rs_fatal("can't determine endianness from %#x", *p);
+ }
+}
+
+
+void
+rs_mdfour_begin(rs_mdfour_t * md)
+{
+ if (!rs_mdfour_block)
+ rs_mdfour_choose_packer();
+
+ memset(md, 0, sizeof(*md));
+ md->A = 0x67452301;
+ md->B = 0xefcdab89;
+ md->C = 0x98badcfe;
+ md->D = 0x10325476;
+ md->totalN = 0;
+}
+
+
+/**
+ * Handle special behaviour for processing the last block of a file
+ * when calculating its MD4 checksum.
+ *
+ * This must be called exactly once per file.
+ */
+static void
+rs_mdfour_tail(rs_mdfour_t * m, unsigned char const *in, int n)
+{
+ unsigned char buf[128];
+ uint32_t b;
+
+ m->totalN += n;
+
+ b = m->totalN * 8;
+
+ memset(buf, 0, 128);
+ if (n)
+ memcpy(buf, in, n);
+ buf[n] = 0x80;
+
+ if (n <= 55) {
+ copy4(buf + 56, b);
+ rs_mdfour_block(m, buf);
+ } else {
+ copy4(buf + 120, b);
+ rs_mdfour_block(m, buf);
+ rs_mdfour_block(m, buf + 64);
+ }
+}
+
+
+/**
+ * Feed some data into the MD4 accumulator.
+ *
+ * \param n Number of bytes fed in.
+ */
+void
+rs_mdfour_update(rs_mdfour_t * md, void const *in_void, size_t n)
+{
+ unsigned char const *in = (unsigned char const *) in_void;
+
+ if (n == 0)
+ return;
+
+ if (md->tail_len) {
+ size_t tail_gap = 64 - md->tail_len;
+
+ /* If there's any leftover data in the tail buffer, then first
+ * we have to make it up to a whole block and process it. */
+ if (tail_gap > n)
+ tail_gap = n;
+ memcpy(&md->tail[md->tail_len], in, tail_gap);
+ md->tail_len += tail_gap;
+ in += tail_gap;
+ n -= tail_gap;
+
+ if (md->tail_len != 64)
+ return;
+
+ rs_mdfour_block(md, md->tail);
+ md->tail_len = 0;
+ md->totalN += 64;
+ }
+
+ while (n >= 64) {
+ rs_mdfour_block(md, in);
+ in += 64;
+ n -= 64;
+ md->totalN += 64;
+ }
+
+ if (n) {
+ memcpy(md->tail, in, n);
+ md->tail_len = n;
+ }
+}
+
+
+void
+rs_mdfour_result(rs_mdfour_t * md, unsigned char *out)
+{
+ rs_mdfour_tail(md, md->tail, md->tail_len);
+
+ copy4(out, md->A);
+ copy4(out + 4, md->B);
+ copy4(out + 8, md->C);
+ copy4(out + 12, md->D);
+}
+
+
+void
+rs_mdfour(unsigned char *out, void const *in, size_t n)
+{
+ rs_mdfour_t md;
+
+ rs_mdfour_begin(&md);
+ rs_mdfour_update(&md, in, n);
+ rs_mdfour_result(&md, out);
+}
diff --git a/rsync/mksum.c b/rsync/mksum.c
new file mode 100644
index 0000000..d55bcfb
--- a/dev/null
+++ b/rsync/mksum.c
@@ -0,0 +1,155 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * mksum.c -- Generate file signatures.
+ *
+ * Generating checksums is pretty easy, since we can always just
+ * process whatever data is available. When a whole block has
+ * arrived, or we've reached the end of the file, we write the
+ * checksum out.
+ */
+
+/* TODO: Perhaps force blocks to be a multiple of 64 bytes, so that we
+ * can be sure checksum generation will be more efficient. I guess it
+ * will be OK at the moment, though, because tails are only used if
+ * necessary. */
+
+#include <config_rsync.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "rsync.h"
+#include "stream.h"
+#include "util.h"
+#include "sumset.h"
+#include "job.h"
+#include "protocol.h"
+#include "netint.h"
+#include "trace.h"
+#include "checksum.h"
+
+
+/* Possible state functions for signature generation. */
+static rs_result rs_sig_s_header(rs_job_t *);
+static rs_result rs_sig_s_generate(rs_job_t *);
+
+
+
+/**
+ * State of trying to send the signature header.
+ */
+static rs_result rs_sig_s_header(rs_job_t *job)
+{
+ rs_squirt_n4(job, RS_SIG_MAGIC);
+ rs_squirt_n4(job, job->block_len);
+ rs_squirt_n4(job, job->strong_sum_len);
+ rs_trace("sent header (magic %#x, block len = %d, strong sum len = %d)",
+ RS_SIG_MAGIC, (int) job->block_len, (int) job->strong_sum_len);
+ job->stats.block_len = job->block_len;
+
+ job->statefn = rs_sig_s_generate;
+ return RS_RUNNING;
+}
+
+
+/**
+ * Generate the checksums for a block and write it out. Called when
+ * we already know we have enough data in memory at \p block.
+ */
+static rs_result
+rs_sig_do_block(rs_job_t *job, const void *block, size_t len)
+{
+ unsigned int weak_sum;
+ rs_strong_sum_t strong_sum;
+
+ weak_sum = rs_calc_weak_sum(block, len);
+
+ rs_calc_strong_sum(block, len, &strong_sum);
+
+ rs_squirt_n4(job, weak_sum);
+ rs_tube_write(job, strong_sum, job->strong_sum_len);
+
+ if (rs_trace_enabled()) {
+ char strong_sum_hex[RS_MD4_LENGTH * 2 + 1];
+ rs_hexify(strong_sum_hex, strong_sum, job->strong_sum_len);
+ rs_trace("sent weak sum 0x%08x and strong sum %s", weak_sum,
+ strong_sum_hex);
+ }
+
+ job->stats.sig_blocks++;
+
+ return RS_RUNNING;
+}
+
+
+/*
+ * State of reading a block and trying to generate its sum.
+ */
+static rs_result
+rs_sig_s_generate(rs_job_t *job)
+{
+ rs_result result;
+ size_t len;
+ void *block;
+
+ /* must get a whole block, otherwise try again */
+ len = job->block_len;
+ result = rs_scoop_read(job, len, &block);
+
+ /* unless we're near eof, in which case we'll accept
+ * whatever's in there */
+ if ((result == RS_BLOCKED && rs_job_input_is_ending(job))) {
+ result = rs_scoop_read_rest(job, &len, &block);
+ } else if (result == RS_INPUT_ENDED) {
+ return RS_DONE;
+ } else if (result != RS_DONE) {
+ rs_trace("generate stopped: %s", rs_strerror(result));
+ return result;
+ }
+
+ rs_trace("got %d byte block", len);
+
+ return rs_sig_do_block(job, block, len);
+}
+
+
+/** \brief Set up a new encoding job.
+ *
+ * \sa rs_sig_file()
+ */
+rs_job_t * rs_sig_begin(size_t new_block_len, size_t strong_sum_len)
+{
+ rs_job_t *job;
+
+ job = rs_job_new("signature", rs_sig_s_header);
+ job->block_len = new_block_len;
+
+ assert(strong_sum_len > 0 && strong_sum_len <= RS_MD4_LENGTH);
+ job->strong_sum_len = strong_sum_len;
+
+ return job;
+}
diff --git a/rsync/msg.c b/rsync/msg.c
new file mode 100644
index 0000000..aad2eb5
--- a/dev/null
+++ b/rsync/msg.c
@@ -0,0 +1,75 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+ /*
+ | Welcome to Arco AM/PM Mini-Market. We
+ | would like to advise our customers
+ | that any individual who offers to
+ | pump gas, wash windows or solicit
+ | products is not employed by or
+ | associated with this facility. We
+ | discourage any contact with these
+ | individuals and ask that you report
+ | any problems to uniformed personal
+ | inside. Thankyou for shopping at
+ | Arco, and have a nice day.
+ */
+
+#include <config_rsync.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+
+
+/** \brief Translate from rs_result to human-readable messages. */
+char const *rs_strerror(rs_result r)
+{
+ switch (r) {
+ case RS_DONE:
+ return "OK";
+ case RS_RUNNING:
+ return "still running";
+ case RS_BAD_MAGIC:
+ return "bad magic number at start of stream";
+ case RS_BLOCKED:
+ return "blocked waiting for input or output buffers";
+ case RS_INPUT_ENDED:
+ return "unexpected end of input";
+ case RS_CORRUPT:
+ return "stream corrupt";
+ case RS_UNIMPLEMENTED:
+ return "unimplemented case";
+ case RS_MEM_ERROR:
+ return "out of memory";
+ case RS_IO_ERROR:
+ return "IO error";
+ case RS_SYNTAX_ERROR:
+ return "bad command line syntax";
+ case RS_INTERNAL_ERROR:
+ return "library internal error";
+ default:
+ return "unexplained problem";
+ }
+}
diff --git a/rsync/netint.c b/rsync/netint.c
new file mode 100644
index 0000000..71e3f9d
--- a/dev/null
+++ b/rsync/netint.c
@@ -0,0 +1,185 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | Ummm, well, OK. The network's the
+ | network, the computer's the
+ | computer. Sorry for the confusion.
+ | -- Sun Microsystems
+ */
+
+/*
+ * Network-byte-order output to the tube.
+ *
+ * All the `suck' routines return a result code. The most common
+ * values are RS_DONE if they have enough data, or RS_BLOCKED if there
+ * is not enough input to proceed.
+ *
+ * All the netint operations are done in a fairly simpleminded way,
+ * since we don't want to rely on stdint types that may not be
+ * available on some platforms.
+ */
+
+/*
+ * TODO: If we don't have <stdint.h> (or perhaps even if we do),
+ * determine endianness and integer size by hand and use that to do
+ * our own conversion routines. We possibly need this anyhow to do
+ * 64-bit integers, since there seems to be no ntohs() analog.
+ */
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "rsync.h"
+
+#include "job.h"
+#include "netint.h"
+#include "trace.h"
+#include "stream.h"
+
+#define RS_MAX_INT_BYTES 8
+
+
+/**
+ * \brief Write a single byte to a stream output.
+ */
+rs_result
+rs_squirt_byte(rs_job_t *job, unsigned char d)
+{
+ rs_tube_write(job, &d, 1);
+ return RS_DONE;
+}
+
+
+/**
+ * \brief Write a variable-length integer to a stream.
+ *
+ * \param job Job of data.
+ *
+ * \param d Datum to write out.
+ *
+ * \param len Length of integer, in bytes.
+ */
+rs_result
+rs_squirt_netint(rs_job_t *job, rs_long_t d, int len)
+{
+ unsigned char buf[RS_MAX_INT_BYTES];
+ int i, j;
+
+ if (len <= 0 || len > RS_MAX_INT_BYTES) {
+ rs_error("Illegal integer length %d", len);
+ return RS_INTERNAL_ERROR;
+ }
+
+ /* Fill the output buffer with a bigendian representation of the
+ * number. */
+ for (i = 0, j = len-1; i < len; i++, j--) {
+ buf[j] = d; /* truncated */
+ d >>= 8;
+ }
+
+ rs_tube_write(job, buf, len);
+
+ return RS_DONE;
+}
+
+
+
+rs_result
+rs_squirt_n4(rs_job_t *job, int val)
+{
+ return rs_squirt_netint(job, val, 4);
+}
+
+
+
+rs_result
+rs_suck_netint(rs_job_t *job, rs_long_t *v, int len)
+{
+ unsigned char *buf;
+ int i;
+ rs_result result;
+
+ if (len <= 0 || len > RS_MAX_INT_BYTES) {
+ rs_error("Illegal integer length %d", len);
+ return RS_INTERNAL_ERROR;
+ }
+
+ if ((result = rs_scoop_read(job, len, (void **) &buf)) != RS_DONE)
+ return result;
+
+ *v = 0;
+
+ for (i = 0; i < len; i++) {
+ *v = *v<<8 | buf[i];
+ }
+
+ return RS_DONE;
+}
+
+
+rs_result
+rs_suck_byte(rs_job_t *job, unsigned char *v)
+{
+ void *inb;
+ rs_result result;
+
+ if ((result = rs_scoop_read(job, 1, &inb)) == RS_DONE)
+ *v = *((unsigned char *) inb);
+
+ return result;
+}
+
+
+rs_result
+rs_suck_n4(rs_job_t *job, int *v)
+{
+ rs_result result;
+ rs_long_t d;
+
+ result = rs_suck_netint(job, &d, 4);
+ *v = d;
+ return result;
+}
+
+
+int rs_int_len(rs_long_t val)
+{
+ if (!(val & ~0xffL))
+ return 1;
+ else if (!(val & ~0xffffL))
+ return 2;
+ else if (!(val & ~0xffffffffL))
+ return 4;
+ else if (!(val & ~0xffffffffffffffffL))
+ return 8;
+ else {
+ rs_fatal("can't encode integer %.0f yet", (double) val);
+ }
+}
+
diff --git a/rsync/netint.h b/rsync/netint.h
new file mode 100644
index 0000000..ee02b94
--- a/dev/null
+++ b/rsync/netint.h
@@ -0,0 +1,32 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+rs_result rs_squirt_byte(rs_job_t *, unsigned char d);
+rs_result rs_squirt_netint(rs_job_t *, rs_long_t d, int len);
+rs_result rs_squirt_n4(rs_job_t *, int val);
+
+rs_result rs_suck_netint(rs_job_t *, rs_long_t *v, int len);
+rs_result rs_suck_byte(rs_job_t *, unsigned char *);
+rs_result rs_suck_n4(rs_job_t *, int *);
+
+int rs_int_len(rs_long_t val);
diff --git a/rsync/patch.c b/rsync/patch.c
new file mode 100644
index 0000000..d2daa85
--- a/dev/null
+++ b/rsync/patch.c
@@ -0,0 +1,317 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+ /*
+ | This is Tranquility Base.
+ */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "util.h"
+#include "trace.h"
+#include "protocol.h"
+#include "netint.h"
+#include "command.h"
+#include "sumset.h"
+#include "prototab.h"
+#include "stream.h"
+#include "job.h"
+
+
+
+static rs_result rs_patch_s_cmdbyte(rs_job_t *);
+static rs_result rs_patch_s_params(rs_job_t *);
+static rs_result rs_patch_s_run(rs_job_t *);
+static rs_result rs_patch_s_literal(rs_job_t *);
+static rs_result rs_patch_s_copy(rs_job_t *);
+static rs_result rs_patch_s_copying(rs_job_t *);
+
+
+/**
+ * State of trying to read the first byte of a command. Once we've
+ * taken that in, we can know how much data to read to get the
+ * arguments.
+ */
+static rs_result rs_patch_s_cmdbyte(rs_job_t *job)
+{
+ rs_result result;
+
+ if ((result = rs_suck_byte(job, &job->op)) != RS_DONE)
+ return result;
+
+ job->cmd = &rs_prototab[job->op];
+
+ rs_trace("got command byte 0x%02x (%s), len_1=%.0f", job->op,
+ rs_op_kind_name(job->cmd->kind),
+ (double) job->cmd->len_1);
+
+ if (job->cmd->len_1)
+ job->statefn = rs_patch_s_params;
+ else {
+ job->param1 = job->cmd->immediate;
+ job->statefn = rs_patch_s_run;
+ }
+
+ return RS_RUNNING;
+}
+
+
+/**
+ * Called after reading a command byte to pull in its parameters and
+ * then setup to execute the command.
+ */
+static rs_result rs_patch_s_params(rs_job_t *job)
+{
+ rs_result result;
+ int len = job->cmd->len_1 + job->cmd->len_2;
+ void *p;
+
+ assert(len);
+
+ result = rs_scoop_readahead(job, len, &p);
+ if (result != RS_DONE)
+ return result;
+
+ /* we now must have LEN bytes buffered */
+ result = rs_suck_netint(job, &job->param1, job->cmd->len_1);
+ /* shouldn't fail, since we already checked */
+ assert(result == RS_DONE);
+
+ if (job->cmd->len_2) {
+ result = rs_suck_netint(job, &job->param2, job->cmd->len_2);
+ assert(result == RS_DONE);
+ }
+
+ job->statefn = rs_patch_s_run;
+
+ return RS_RUNNING;
+}
+
+
+
+/**
+ * Called when we've read in the whole command and we need to execute it.
+ */
+static rs_result rs_patch_s_run(rs_job_t *job)
+{
+ rs_trace("running command 0x%x, kind %d", job->op, job->cmd->kind);
+
+ switch (job->cmd->kind) {
+ case RS_KIND_LITERAL:
+ job->statefn = rs_patch_s_literal;
+ return RS_RUNNING;
+
+ case RS_KIND_END:
+ return RS_DONE;
+ /* so we exit here; trying to continue causes an error */
+
+ case RS_KIND_COPY:
+ job->statefn = rs_patch_s_copy;
+ return RS_RUNNING;
+
+ default:
+ rs_error("bogus command 0x%02x", job->op);
+ return RS_CORRUPT;
+ }
+}
+
+
+/**
+ * Called when trying to copy through literal data.
+ */
+static rs_result rs_patch_s_literal(rs_job_t *job)
+{
+ rs_long_t len = job->param1;
+
+ rs_trace("LITERAL(len=%.0f)", (double) len);
+
+ job->stats.lit_cmds++;
+ job->stats.lit_bytes += len;
+ job->stats.lit_cmdbytes += 1 + job->cmd->len_1;
+
+ rs_tube_copy(job, len);
+
+ job->statefn = rs_patch_s_cmdbyte;
+ return RS_RUNNING;
+}
+
+
+
+static rs_result rs_patch_s_copy(rs_job_t *job)
+{
+ rs_long_t where, len;
+ rs_stats_t *stats;
+
+ where = job->param1;
+ len = job->param2;
+
+ rs_trace("COPY(where=%.0f, len=%.0f)", (double) where, (double) len);
+
+ if (len < 0) {
+ rs_log(RS_LOG_ERR, "invalid length=%.0f on COPY command", (double) len);
+ return RS_CORRUPT;
+ }
+
+ if (where < 0) {
+ rs_log(RS_LOG_ERR, "invalid where=%.0f on COPY command", (double) where);
+ return RS_CORRUPT;
+ }
+
+ job->basis_pos = where;
+ job->basis_len = len;
+
+ stats = &job->stats;
+
+ stats->copy_cmds++;
+ stats->copy_bytes += len;
+ stats->copy_cmdbytes += 1 + job->cmd->len_1 + job->cmd->len_2;
+
+ job->statefn = rs_patch_s_copying;
+ return RS_RUNNING;
+}
+
+
+/**
+ * Called when we're executing a COPY command and waiting for all the
+ * data to be retrieved from the callback.
+ */
+static rs_result rs_patch_s_copying(rs_job_t *job)
+{
+ rs_result result;
+ size_t len;
+ void *buf, *ptr;
+ rs_buffers_t *buffs = job->stream;
+
+ len = job->basis_len;
+
+ /* copy only as much as will fit in the output buffer, so that we
+ * don't have to block or store the input. */
+ if (len > buffs->avail_out)
+ len = buffs->avail_out;
+
+ if (!len)
+ return RS_BLOCKED;
+
+ rs_trace("copy %.0f bytes from basis at offset %.0f",
+ (double) len, (double) job->basis_pos);
+
+ ptr = buf = rs_alloc(len, "basis buffer");
+
+ result = (job->copy_cb)(job->copy_arg, job->basis_pos, &len, &ptr);
+ if (result != RS_DONE)
+ return result;
+ else
+ rs_trace("copy callback returned %s", rs_strerror(result));
+
+ rs_trace("got %.0f bytes back from basis callback", (double) len);
+
+ memcpy(buffs->next_out, ptr, len);
+
+ buffs->next_out += len;
+ buffs->avail_out -= len;
+
+ job->basis_pos += len;
+ job->basis_len -= len;
+
+ free(buf);
+
+ if (!job->basis_len) {
+ /* Done! */
+ job->statefn = rs_patch_s_cmdbyte;
+ }
+
+ return RS_RUNNING;
+}
+
+
+/**
+ * Called while we're trying to read the header of the patch.
+ */
+static rs_result rs_patch_s_header(rs_job_t *job)
+{
+ int v;
+ rs_result result;
+
+
+ if ((result = rs_suck_n4(job, &v)) != RS_DONE)
+ return result;
+
+ if (v != RS_DELTA_MAGIC) {
+ rs_log(RS_LOG_ERR,
+ "got magic number %#x rather than expected value %#x",
+ v, RS_DELTA_MAGIC);
+ return RS_BAD_MAGIC;
+ } else
+ rs_trace("got patch magic %#x", v);
+
+
+ job->statefn = rs_patch_s_cmdbyte;
+
+ return RS_RUNNING;
+}
+
+
+
+/**
+ * \brief Apply a \ref gloss_delta to a \ref gloss_basis to recreate
+ * the new file.
+ *
+ * This gives you back a ::rs_job_t object, which can be cranked by
+ * calling rs_job_iter() and updating the stream pointers. When
+ * finished, call rs_job_finish() to dispose of it.
+ *
+ * \param stream Contains pointers to input and output buffers, to be
+ * adjusted by caller on each iteration.
+ *
+ * \param copy_cb Callback used to retrieve content from the basis
+ * file.
+ *
+ * \param copy_arg Opaque environment pointer passed through to the
+ * callback.
+ *
+ * \todo As output is produced, accumulate the MD4 checksum of the
+ * output. Then if we find a CHECKSUM command we can check it's
+ * contents against the output.
+ *
+ * \todo Implement COPY commands.
+ *
+ * \sa rs_patch_file()
+ */
+rs_job_t *
+rs_patch_begin(rs_copy_cb *copy_cb, void *copy_arg)
+{
+ rs_job_t *job = rs_job_new("patch", rs_patch_s_header);
+
+ job->copy_cb = copy_cb;
+ job->copy_arg = copy_arg;
+
+ rs_mdfour_begin(&job->output_md4);
+
+ return job;
+}
diff --git a/rsync/protocol.h b/rsync/protocol.h
new file mode 100644
index 0000000..bee63f1
--- a/dev/null
+++ b/rsync/protocol.h
@@ -0,0 +1,45 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+
+/*
+ * TODO: Have a way to copy from the old signature into the new
+ * one. This will be useful for the case where the files are in fact
+ * identical, which will be significantly common.
+ */
+
+
+ /*
+ | "The IETF already has more than enough
+ | RFCs that codify the obvious, make
+ | stupidity illegal, support truth,
+ | justice, and the IETF way, and generally
+ | demonstrate the author is a brilliant and
+ | valuable Contributor to The Standards
+ | Process."
+ | -- Vernon Schryver
+ */
+
+
+
+#define RS_DELTA_MAGIC 0x72730236 /* r s \2 6 */
+#define RS_SIG_MAGIC 0x72730136 /* r s \1 6 */
diff --git a/rsync/prototab.c b/rsync/prototab.c
new file mode 100644
index 0000000..bce7d42
--- a/dev/null
+++ b/rsync/prototab.c
@@ -0,0 +1,277 @@
+
+/* AUTOGENERATED BY ./mkprototab.pl, DO NOT EDIT */
+
+#include <config_rsync.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <rsync.h>
+#include <protocol.h>
+#include <command.h>
+#include <prototab.h>
+
+/* This file defines an array mapping command IDs to the operation kind,
+ * implied literal value, and length of the first and second parameters.
+ * The implied value is only used
+ * if the first parameter length is zero. */
+
+const struct rs_prototab_ent rs_prototab[] = {
+ {RS_KIND_END , 0, 0, 0 } /* RS_OP_END = 0 */,
+ {RS_KIND_LITERAL , 1, 0, 0 } /* RS_OP_LITERAL_1 = 0x1 */,
+ {RS_KIND_LITERAL , 2, 0, 0 } /* RS_OP_LITERAL_2 = 0x2 */,
+ {RS_KIND_LITERAL , 3, 0, 0 } /* RS_OP_LITERAL_3 = 0x3 */,
+ {RS_KIND_LITERAL , 4, 0, 0 } /* RS_OP_LITERAL_4 = 0x4 */,
+ {RS_KIND_LITERAL , 5, 0, 0 } /* RS_OP_LITERAL_5 = 0x5 */,
+ {RS_KIND_LITERAL , 6, 0, 0 } /* RS_OP_LITERAL_6 = 0x6 */,
+ {RS_KIND_LITERAL , 7, 0, 0 } /* RS_OP_LITERAL_7 = 0x7 */,
+ {RS_KIND_LITERAL , 8, 0, 0 } /* RS_OP_LITERAL_8 = 0x8 */,
+ {RS_KIND_LITERAL , 9, 0, 0 } /* RS_OP_LITERAL_9 = 0x9 */,
+ {RS_KIND_LITERAL , 10, 0, 0 } /* RS_OP_LITERAL_10 = 0xa */,
+ {RS_KIND_LITERAL , 11, 0, 0 } /* RS_OP_LITERAL_11 = 0xb */,
+ {RS_KIND_LITERAL , 12, 0, 0 } /* RS_OP_LITERAL_12 = 0xc */,
+ {RS_KIND_LITERAL , 13, 0, 0 } /* RS_OP_LITERAL_13 = 0xd */,
+ {RS_KIND_LITERAL , 14, 0, 0 } /* RS_OP_LITERAL_14 = 0xe */,
+ {RS_KIND_LITERAL , 15, 0, 0 } /* RS_OP_LITERAL_15 = 0xf */,
+ {RS_KIND_LITERAL , 16, 0, 0 } /* RS_OP_LITERAL_16 = 0x10 */,
+ {RS_KIND_LITERAL , 17, 0, 0 } /* RS_OP_LITERAL_17 = 0x11 */,
+ {RS_KIND_LITERAL , 18, 0, 0 } /* RS_OP_LITERAL_18 = 0x12 */,
+ {RS_KIND_LITERAL , 19, 0, 0 } /* RS_OP_LITERAL_19 = 0x13 */,
+ {RS_KIND_LITERAL , 20, 0, 0 } /* RS_OP_LITERAL_20 = 0x14 */,
+ {RS_KIND_LITERAL , 21, 0, 0 } /* RS_OP_LITERAL_21 = 0x15 */,
+ {RS_KIND_LITERAL , 22, 0, 0 } /* RS_OP_LITERAL_22 = 0x16 */,
+ {RS_KIND_LITERAL , 23, 0, 0 } /* RS_OP_LITERAL_23 = 0x17 */,
+ {RS_KIND_LITERAL , 24, 0, 0 } /* RS_OP_LITERAL_24 = 0x18 */,
+ {RS_KIND_LITERAL , 25, 0, 0 } /* RS_OP_LITERAL_25 = 0x19 */,
+ {RS_KIND_LITERAL , 26, 0, 0 } /* RS_OP_LITERAL_26 = 0x1a */,
+ {RS_KIND_LITERAL , 27, 0, 0 } /* RS_OP_LITERAL_27 = 0x1b */,
+ {RS_KIND_LITERAL , 28, 0, 0 } /* RS_OP_LITERAL_28 = 0x1c */,
+ {RS_KIND_LITERAL , 29, 0, 0 } /* RS_OP_LITERAL_29 = 0x1d */,
+ {RS_KIND_LITERAL , 30, 0, 0 } /* RS_OP_LITERAL_30 = 0x1e */,
+ {RS_KIND_LITERAL , 31, 0, 0 } /* RS_OP_LITERAL_31 = 0x1f */,
+ {RS_KIND_LITERAL , 32, 0, 0 } /* RS_OP_LITERAL_32 = 0x20 */,
+ {RS_KIND_LITERAL , 33, 0, 0 } /* RS_OP_LITERAL_33 = 0x21 */,
+ {RS_KIND_LITERAL , 34, 0, 0 } /* RS_OP_LITERAL_34 = 0x22 */,
+ {RS_KIND_LITERAL , 35, 0, 0 } /* RS_OP_LITERAL_35 = 0x23 */,
+ {RS_KIND_LITERAL , 36, 0, 0 } /* RS_OP_LITERAL_36 = 0x24 */,
+ {RS_KIND_LITERAL , 37, 0, 0 } /* RS_OP_LITERAL_37 = 0x25 */,
+ {RS_KIND_LITERAL , 38, 0, 0 } /* RS_OP_LITERAL_38 = 0x26 */,
+ {RS_KIND_LITERAL , 39, 0, 0 } /* RS_OP_LITERAL_39 = 0x27 */,
+ {RS_KIND_LITERAL , 40, 0, 0 } /* RS_OP_LITERAL_40 = 0x28 */,
+ {RS_KIND_LITERAL , 41, 0, 0 } /* RS_OP_LITERAL_41 = 0x29 */,
+ {RS_KIND_LITERAL , 42, 0, 0 } /* RS_OP_LITERAL_42 = 0x2a */,
+ {RS_KIND_LITERAL , 43, 0, 0 } /* RS_OP_LITERAL_43 = 0x2b */,
+ {RS_KIND_LITERAL , 44, 0, 0 } /* RS_OP_LITERAL_44 = 0x2c */,
+ {RS_KIND_LITERAL , 45, 0, 0 } /* RS_OP_LITERAL_45 = 0x2d */,
+ {RS_KIND_LITERAL , 46, 0, 0 } /* RS_OP_LITERAL_46 = 0x2e */,
+ {RS_KIND_LITERAL , 47, 0, 0 } /* RS_OP_LITERAL_47 = 0x2f */,
+ {RS_KIND_LITERAL , 48, 0, 0 } /* RS_OP_LITERAL_48 = 0x30 */,
+ {RS_KIND_LITERAL , 49, 0, 0 } /* RS_OP_LITERAL_49 = 0x31 */,
+ {RS_KIND_LITERAL , 50, 0, 0 } /* RS_OP_LITERAL_50 = 0x32 */,
+ {RS_KIND_LITERAL , 51, 0, 0 } /* RS_OP_LITERAL_51 = 0x33 */,
+ {RS_KIND_LITERAL , 52, 0, 0 } /* RS_OP_LITERAL_52 = 0x34 */,
+ {RS_KIND_LITERAL , 53, 0, 0 } /* RS_OP_LITERAL_53 = 0x35 */,
+ {RS_KIND_LITERAL , 54, 0, 0 } /* RS_OP_LITERAL_54 = 0x36 */,
+ {RS_KIND_LITERAL , 55, 0, 0 } /* RS_OP_LITERAL_55 = 0x37 */,
+ {RS_KIND_LITERAL , 56, 0, 0 } /* RS_OP_LITERAL_56 = 0x38 */,
+ {RS_KIND_LITERAL , 57, 0, 0 } /* RS_OP_LITERAL_57 = 0x39 */,
+ {RS_KIND_LITERAL , 58, 0, 0 } /* RS_OP_LITERAL_58 = 0x3a */,
+ {RS_KIND_LITERAL , 59, 0, 0 } /* RS_OP_LITERAL_59 = 0x3b */,
+ {RS_KIND_LITERAL , 60, 0, 0 } /* RS_OP_LITERAL_60 = 0x3c */,
+ {RS_KIND_LITERAL , 61, 0, 0 } /* RS_OP_LITERAL_61 = 0x3d */,
+ {RS_KIND_LITERAL , 62, 0, 0 } /* RS_OP_LITERAL_62 = 0x3e */,
+ {RS_KIND_LITERAL , 63, 0, 0 } /* RS_OP_LITERAL_63 = 0x3f */,
+ {RS_KIND_LITERAL , 64, 0, 0 } /* RS_OP_LITERAL_64 = 0x40 */,
+ {RS_KIND_LITERAL , 0, 1, 0 } /* RS_OP_LITERAL_N1 = 0x41 */,
+ {RS_KIND_LITERAL , 0, 2, 0 } /* RS_OP_LITERAL_N2 = 0x42 */,
+ {RS_KIND_LITERAL , 0, 4, 0 } /* RS_OP_LITERAL_N4 = 0x43 */,
+ {RS_KIND_LITERAL , 0, 8, 0 } /* RS_OP_LITERAL_N8 = 0x44 */,
+ {RS_KIND_COPY , 0, 1, 1 } /* RS_OP_COPY_N1_N1 = 0x45 */,
+ {RS_KIND_COPY , 0, 1, 2 } /* RS_OP_COPY_N1_N2 = 0x46 */,
+ {RS_KIND_COPY , 0, 1, 4 } /* RS_OP_COPY_N1_N4 = 0x47 */,
+ {RS_KIND_COPY , 0, 1, 8 } /* RS_OP_COPY_N1_N8 = 0x48 */,
+ {RS_KIND_COPY , 0, 2, 1 } /* RS_OP_COPY_N2_N1 = 0x49 */,
+ {RS_KIND_COPY , 0, 2, 2 } /* RS_OP_COPY_N2_N2 = 0x4a */,
+ {RS_KIND_COPY , 0, 2, 4 } /* RS_OP_COPY_N2_N4 = 0x4b */,
+ {RS_KIND_COPY , 0, 2, 8 } /* RS_OP_COPY_N2_N8 = 0x4c */,
+ {RS_KIND_COPY , 0, 4, 1 } /* RS_OP_COPY_N4_N1 = 0x4d */,
+ {RS_KIND_COPY , 0, 4, 2 } /* RS_OP_COPY_N4_N2 = 0x4e */,
+ {RS_KIND_COPY , 0, 4, 4 } /* RS_OP_COPY_N4_N4 = 0x4f */,
+ {RS_KIND_COPY , 0, 4, 8 } /* RS_OP_COPY_N4_N8 = 0x50 */,
+ {RS_KIND_COPY , 0, 8, 1 } /* RS_OP_COPY_N8_N1 = 0x51 */,
+ {RS_KIND_COPY , 0, 8, 2 } /* RS_OP_COPY_N8_N2 = 0x52 */,
+ {RS_KIND_COPY , 0, 8, 4 } /* RS_OP_COPY_N8_N4 = 0x53 */,
+ {RS_KIND_COPY , 0, 8, 8 } /* RS_OP_COPY_N8_N8 = 0x54 */,
+ {RS_KIND_RESERVED , 85, 0, 0 } /* RS_OP_RESERVED_85 = 0x55 */,
+ {RS_KIND_RESERVED , 86, 0, 0 } /* RS_OP_RESERVED_86 = 0x56 */,
+ {RS_KIND_RESERVED , 87, 0, 0 } /* RS_OP_RESERVED_87 = 0x57 */,
+ {RS_KIND_RESERVED , 88, 0, 0 } /* RS_OP_RESERVED_88 = 0x58 */,
+ {RS_KIND_RESERVED , 89, 0, 0 } /* RS_OP_RESERVED_89 = 0x59 */,
+ {RS_KIND_RESERVED , 90, 0, 0 } /* RS_OP_RESERVED_90 = 0x5a */,
+ {RS_KIND_RESERVED , 91, 0, 0 } /* RS_OP_RESERVED_91 = 0x5b */,
+ {RS_KIND_RESERVED , 92, 0, 0 } /* RS_OP_RESERVED_92 = 0x5c */,
+ {RS_KIND_RESERVED , 93, 0, 0 } /* RS_OP_RESERVED_93 = 0x5d */,
+ {RS_KIND_RESERVED , 94, 0, 0 } /* RS_OP_RESERVED_94 = 0x5e */,
+ {RS_KIND_RESERVED , 95, 0, 0 } /* RS_OP_RESERVED_95 = 0x5f */,
+ {RS_KIND_RESERVED , 96, 0, 0 } /* RS_OP_RESERVED_96 = 0x60 */,
+ {RS_KIND_RESERVED , 97, 0, 0 } /* RS_OP_RESERVED_97 = 0x61 */,
+ {RS_KIND_RESERVED , 98, 0, 0 } /* RS_OP_RESERVED_98 = 0x62 */,
+ {RS_KIND_RESERVED , 99, 0, 0 } /* RS_OP_RESERVED_99 = 0x63 */,
+ {RS_KIND_RESERVED , 100, 0, 0 } /* RS_OP_RESERVED_100 = 0x64 */,
+ {RS_KIND_RESERVED , 101, 0, 0 } /* RS_OP_RESERVED_101 = 0x65 */,
+ {RS_KIND_RESERVED , 102, 0, 0 } /* RS_OP_RESERVED_102 = 0x66 */,
+ {RS_KIND_RESERVED , 103, 0, 0 } /* RS_OP_RESERVED_103 = 0x67 */,
+ {RS_KIND_RESERVED , 104, 0, 0 } /* RS_OP_RESERVED_104 = 0x68 */,
+ {RS_KIND_RESERVED , 105, 0, 0 } /* RS_OP_RESERVED_105 = 0x69 */,
+ {RS_KIND_RESERVED , 106, 0, 0 } /* RS_OP_RESERVED_106 = 0x6a */,
+ {RS_KIND_RESERVED , 107, 0, 0 } /* RS_OP_RESERVED_107 = 0x6b */,
+ {RS_KIND_RESERVED , 108, 0, 0 } /* RS_OP_RESERVED_108 = 0x6c */,
+ {RS_KIND_RESERVED , 109, 0, 0 } /* RS_OP_RESERVED_109 = 0x6d */,
+ {RS_KIND_RESERVED , 110, 0, 0 } /* RS_OP_RESERVED_110 = 0x6e */,
+ {RS_KIND_RESERVED , 111, 0, 0 } /* RS_OP_RESERVED_111 = 0x6f */,
+ {RS_KIND_RESERVED , 112, 0, 0 } /* RS_OP_RESERVED_112 = 0x70 */,
+ {RS_KIND_RESERVED , 113, 0, 0 } /* RS_OP_RESERVED_113 = 0x71 */,
+ {RS_KIND_RESERVED , 114, 0, 0 } /* RS_OP_RESERVED_114 = 0x72 */,
+ {RS_KIND_RESERVED , 115, 0, 0 } /* RS_OP_RESERVED_115 = 0x73 */,
+ {RS_KIND_RESERVED , 116, 0, 0 } /* RS_OP_RESERVED_116 = 0x74 */,
+ {RS_KIND_RESERVED , 117, 0, 0 } /* RS_OP_RESERVED_117 = 0x75 */,
+ {RS_KIND_RESERVED , 118, 0, 0 } /* RS_OP_RESERVED_118 = 0x76 */,
+ {RS_KIND_RESERVED , 119, 0, 0 } /* RS_OP_RESERVED_119 = 0x77 */,
+ {RS_KIND_RESERVED , 120, 0, 0 } /* RS_OP_RESERVED_120 = 0x78 */,
+ {RS_KIND_RESERVED , 121, 0, 0 } /* RS_OP_RESERVED_121 = 0x79 */,
+ {RS_KIND_RESERVED , 122, 0, 0 } /* RS_OP_RESERVED_122 = 0x7a */,
+ {RS_KIND_RESERVED , 123, 0, 0 } /* RS_OP_RESERVED_123 = 0x7b */,
+ {RS_KIND_RESERVED , 124, 0, 0 } /* RS_OP_RESERVED_124 = 0x7c */,
+ {RS_KIND_RESERVED , 125, 0, 0 } /* RS_OP_RESERVED_125 = 0x7d */,
+ {RS_KIND_RESERVED , 126, 0, 0 } /* RS_OP_RESERVED_126 = 0x7e */,
+ {RS_KIND_RESERVED , 127, 0, 0 } /* RS_OP_RESERVED_127 = 0x7f */,
+ {RS_KIND_RESERVED , 128, 0, 0 } /* RS_OP_RESERVED_128 = 0x80 */,
+ {RS_KIND_RESERVED , 129, 0, 0 } /* RS_OP_RESERVED_129 = 0x81 */,
+ {RS_KIND_RESERVED , 130, 0, 0 } /* RS_OP_RESERVED_130 = 0x82 */,
+ {RS_KIND_RESERVED , 131, 0, 0 } /* RS_OP_RESERVED_131 = 0x83 */,
+ {RS_KIND_RESERVED , 132, 0, 0 } /* RS_OP_RESERVED_132 = 0x84 */,
+ {RS_KIND_RESERVED , 133, 0, 0 } /* RS_OP_RESERVED_133 = 0x85 */,
+ {RS_KIND_RESERVED , 134, 0, 0 } /* RS_OP_RESERVED_134 = 0x86 */,
+ {RS_KIND_RESERVED , 135, 0, 0 } /* RS_OP_RESERVED_135 = 0x87 */,
+ {RS_KIND_RESERVED , 136, 0, 0 } /* RS_OP_RESERVED_136 = 0x88 */,
+ {RS_KIND_RESERVED , 137, 0, 0 } /* RS_OP_RESERVED_137 = 0x89 */,
+ {RS_KIND_RESERVED , 138, 0, 0 } /* RS_OP_RESERVED_138 = 0x8a */,
+ {RS_KIND_RESERVED , 139, 0, 0 } /* RS_OP_RESERVED_139 = 0x8b */,
+ {RS_KIND_RESERVED , 140, 0, 0 } /* RS_OP_RESERVED_140 = 0x8c */,
+ {RS_KIND_RESERVED , 141, 0, 0 } /* RS_OP_RESERVED_141 = 0x8d */,
+ {RS_KIND_RESERVED , 142, 0, 0 } /* RS_OP_RESERVED_142 = 0x8e */,
+ {RS_KIND_RESERVED , 143, 0, 0 } /* RS_OP_RESERVED_143 = 0x8f */,
+ {RS_KIND_RESERVED , 144, 0, 0 } /* RS_OP_RESERVED_144 = 0x90 */,
+ {RS_KIND_RESERVED , 145, 0, 0 } /* RS_OP_RESERVED_145 = 0x91 */,
+ {RS_KIND_RESERVED , 146, 0, 0 } /* RS_OP_RESERVED_146 = 0x92 */,
+ {RS_KIND_RESERVED , 147, 0, 0 } /* RS_OP_RESERVED_147 = 0x93 */,
+ {RS_KIND_RESERVED , 148, 0, 0 } /* RS_OP_RESERVED_148 = 0x94 */,
+ {RS_KIND_RESERVED , 149, 0, 0 } /* RS_OP_RESERVED_149 = 0x95 */,
+ {RS_KIND_RESERVED , 150, 0, 0 } /* RS_OP_RESERVED_150 = 0x96 */,
+ {RS_KIND_RESERVED , 151, 0, 0 } /* RS_OP_RESERVED_151 = 0x97 */,
+ {RS_KIND_RESERVED , 152, 0, 0 } /* RS_OP_RESERVED_152 = 0x98 */,
+ {RS_KIND_RESERVED , 153, 0, 0 } /* RS_OP_RESERVED_153 = 0x99 */,
+ {RS_KIND_RESERVED , 154, 0, 0 } /* RS_OP_RESERVED_154 = 0x9a */,
+ {RS_KIND_RESERVED , 155, 0, 0 } /* RS_OP_RESERVED_155 = 0x9b */,
+ {RS_KIND_RESERVED , 156, 0, 0 } /* RS_OP_RESERVED_156 = 0x9c */,
+ {RS_KIND_RESERVED , 157, 0, 0 } /* RS_OP_RESERVED_157 = 0x9d */,
+ {RS_KIND_RESERVED , 158, 0, 0 } /* RS_OP_RESERVED_158 = 0x9e */,
+ {RS_KIND_RESERVED , 159, 0, 0 } /* RS_OP_RESERVED_159 = 0x9f */,
+ {RS_KIND_RESERVED , 160, 0, 0 } /* RS_OP_RESERVED_160 = 0xa0 */,
+ {RS_KIND_RESERVED , 161, 0, 0 } /* RS_OP_RESERVED_161 = 0xa1 */,
+ {RS_KIND_RESERVED , 162, 0, 0 } /* RS_OP_RESERVED_162 = 0xa2 */,
+ {RS_KIND_RESERVED , 163, 0, 0 } /* RS_OP_RESERVED_163 = 0xa3 */,
+ {RS_KIND_RESERVED , 164, 0, 0 } /* RS_OP_RESERVED_164 = 0xa4 */,
+ {RS_KIND_RESERVED , 165, 0, 0 } /* RS_OP_RESERVED_165 = 0xa5 */,
+ {RS_KIND_RESERVED , 166, 0, 0 } /* RS_OP_RESERVED_166 = 0xa6 */,
+ {RS_KIND_RESERVED , 167, 0, 0 } /* RS_OP_RESERVED_167 = 0xa7 */,
+ {RS_KIND_RESERVED , 168, 0, 0 } /* RS_OP_RESERVED_168 = 0xa8 */,
+ {RS_KIND_RESERVED , 169, 0, 0 } /* RS_OP_RESERVED_169 = 0xa9 */,
+ {RS_KIND_RESERVED , 170, 0, 0 } /* RS_OP_RESERVED_170 = 0xaa */,
+ {RS_KIND_RESERVED , 171, 0, 0 } /* RS_OP_RESERVED_171 = 0xab */,
+ {RS_KIND_RESERVED , 172, 0, 0 } /* RS_OP_RESERVED_172 = 0xac */,
+ {RS_KIND_RESERVED , 173, 0, 0 } /* RS_OP_RESERVED_173 = 0xad */,
+ {RS_KIND_RESERVED , 174, 0, 0 } /* RS_OP_RESERVED_174 = 0xae */,
+ {RS_KIND_RESERVED , 175, 0, 0 } /* RS_OP_RESERVED_175 = 0xaf */,
+ {RS_KIND_RESERVED , 176, 0, 0 } /* RS_OP_RESERVED_176 = 0xb0 */,
+ {RS_KIND_RESERVED , 177, 0, 0 } /* RS_OP_RESERVED_177 = 0xb1 */,
+ {RS_KIND_RESERVED , 178, 0, 0 } /* RS_OP_RESERVED_178 = 0xb2 */,
+ {RS_KIND_RESERVED , 179, 0, 0 } /* RS_OP_RESERVED_179 = 0xb3 */,
+ {RS_KIND_RESERVED , 180, 0, 0 } /* RS_OP_RESERVED_180 = 0xb4 */,
+ {RS_KIND_RESERVED , 181, 0, 0 } /* RS_OP_RESERVED_181 = 0xb5 */,
+ {RS_KIND_RESERVED , 182, 0, 0 } /* RS_OP_RESERVED_182 = 0xb6 */,
+ {RS_KIND_RESERVED , 183, 0, 0 } /* RS_OP_RESERVED_183 = 0xb7 */,
+ {RS_KIND_RESERVED , 184, 0, 0 } /* RS_OP_RESERVED_184 = 0xb8 */,
+ {RS_KIND_RESERVED , 185, 0, 0 } /* RS_OP_RESERVED_185 = 0xb9 */,
+ {RS_KIND_RESERVED , 186, 0, 0 } /* RS_OP_RESERVED_186 = 0xba */,
+ {RS_KIND_RESERVED , 187, 0, 0 } /* RS_OP_RESERVED_187 = 0xbb */,
+ {RS_KIND_RESERVED , 188, 0, 0 } /* RS_OP_RESERVED_188 = 0xbc */,
+ {RS_KIND_RESERVED , 189, 0, 0 } /* RS_OP_RESERVED_189 = 0xbd */,
+ {RS_KIND_RESERVED , 190, 0, 0 } /* RS_OP_RESERVED_190 = 0xbe */,
+ {RS_KIND_RESERVED , 191, 0, 0 } /* RS_OP_RESERVED_191 = 0xbf */,
+ {RS_KIND_RESERVED , 192, 0, 0 } /* RS_OP_RESERVED_192 = 0xc0 */,
+ {RS_KIND_RESERVED , 193, 0, 0 } /* RS_OP_RESERVED_193 = 0xc1 */,
+ {RS_KIND_RESERVED , 194, 0, 0 } /* RS_OP_RESERVED_194 = 0xc2 */,
+ {RS_KIND_RESERVED , 195, 0, 0 } /* RS_OP_RESERVED_195 = 0xc3 */,
+ {RS_KIND_RESERVED , 196, 0, 0 } /* RS_OP_RESERVED_196 = 0xc4 */,
+ {RS_KIND_RESERVED , 197, 0, 0 } /* RS_OP_RESERVED_197 = 0xc5 */,
+ {RS_KIND_RESERVED , 198, 0, 0 } /* RS_OP_RESERVED_198 = 0xc6 */,
+ {RS_KIND_RESERVED , 199, 0, 0 } /* RS_OP_RESERVED_199 = 0xc7 */,
+ {RS_KIND_RESERVED , 200, 0, 0 } /* RS_OP_RESERVED_200 = 0xc8 */,
+ {RS_KIND_RESERVED , 201, 0, 0 } /* RS_OP_RESERVED_201 = 0xc9 */,
+ {RS_KIND_RESERVED , 202, 0, 0 } /* RS_OP_RESERVED_202 = 0xca */,
+ {RS_KIND_RESERVED , 203, 0, 0 } /* RS_OP_RESERVED_203 = 0xcb */,
+ {RS_KIND_RESERVED , 204, 0, 0 } /* RS_OP_RESERVED_204 = 0xcc */,
+ {RS_KIND_RESERVED , 205, 0, 0 } /* RS_OP_RESERVED_205 = 0xcd */,
+ {RS_KIND_RESERVED , 206, 0, 0 } /* RS_OP_RESERVED_206 = 0xce */,
+ {RS_KIND_RESERVED , 207, 0, 0 } /* RS_OP_RESERVED_207 = 0xcf */,
+ {RS_KIND_RESERVED , 208, 0, 0 } /* RS_OP_RESERVED_208 = 0xd0 */,
+ {RS_KIND_RESERVED , 209, 0, 0 } /* RS_OP_RESERVED_209 = 0xd1 */,
+ {RS_KIND_RESERVED , 210, 0, 0 } /* RS_OP_RESERVED_210 = 0xd2 */,
+ {RS_KIND_RESERVED , 211, 0, 0 } /* RS_OP_RESERVED_211 = 0xd3 */,
+ {RS_KIND_RESERVED , 212, 0, 0 } /* RS_OP_RESERVED_212 = 0xd4 */,
+ {RS_KIND_RESERVED , 213, 0, 0 } /* RS_OP_RESERVED_213 = 0xd5 */,
+ {RS_KIND_RESERVED , 214, 0, 0 } /* RS_OP_RESERVED_214 = 0xd6 */,
+ {RS_KIND_RESERVED , 215, 0, 0 } /* RS_OP_RESERVED_215 = 0xd7 */,
+ {RS_KIND_RESERVED , 216, 0, 0 } /* RS_OP_RESERVED_216 = 0xd8 */,
+ {RS_KIND_RESERVED , 217, 0, 0 } /* RS_OP_RESERVED_217 = 0xd9 */,
+ {RS_KIND_RESERVED , 218, 0, 0 } /* RS_OP_RESERVED_218 = 0xda */,
+ {RS_KIND_RESERVED , 219, 0, 0 } /* RS_OP_RESERVED_219 = 0xdb */,
+ {RS_KIND_RESERVED , 220, 0, 0 } /* RS_OP_RESERVED_220 = 0xdc */,
+ {RS_KIND_RESERVED , 221, 0, 0 } /* RS_OP_RESERVED_221 = 0xdd */,
+ {RS_KIND_RESERVED , 222, 0, 0 } /* RS_OP_RESERVED_222 = 0xde */,
+ {RS_KIND_RESERVED , 223, 0, 0 } /* RS_OP_RESERVED_223 = 0xdf */,
+ {RS_KIND_RESERVED , 224, 0, 0 } /* RS_OP_RESERVED_224 = 0xe0 */,
+ {RS_KIND_RESERVED , 225, 0, 0 } /* RS_OP_RESERVED_225 = 0xe1 */,
+ {RS_KIND_RESERVED , 226, 0, 0 } /* RS_OP_RESERVED_226 = 0xe2 */,
+ {RS_KIND_RESERVED , 227, 0, 0 } /* RS_OP_RESERVED_227 = 0xe3 */,
+ {RS_KIND_RESERVED , 228, 0, 0 } /* RS_OP_RESERVED_228 = 0xe4 */,
+ {RS_KIND_RESERVED , 229, 0, 0 } /* RS_OP_RESERVED_229 = 0xe5 */,
+ {RS_KIND_RESERVED , 230, 0, 0 } /* RS_OP_RESERVED_230 = 0xe6 */,
+ {RS_KIND_RESERVED , 231, 0, 0 } /* RS_OP_RESERVED_231 = 0xe7 */,
+ {RS_KIND_RESERVED , 232, 0, 0 } /* RS_OP_RESERVED_232 = 0xe8 */,
+ {RS_KIND_RESERVED , 233, 0, 0 } /* RS_OP_RESERVED_233 = 0xe9 */,
+ {RS_KIND_RESERVED , 234, 0, 0 } /* RS_OP_RESERVED_234 = 0xea */,
+ {RS_KIND_RESERVED , 235, 0, 0 } /* RS_OP_RESERVED_235 = 0xeb */,
+ {RS_KIND_RESERVED , 236, 0, 0 } /* RS_OP_RESERVED_236 = 0xec */,
+ {RS_KIND_RESERVED , 237, 0, 0 } /* RS_OP_RESERVED_237 = 0xed */,
+ {RS_KIND_RESERVED , 238, 0, 0 } /* RS_OP_RESERVED_238 = 0xee */,
+ {RS_KIND_RESERVED , 239, 0, 0 } /* RS_OP_RESERVED_239 = 0xef */,
+ {RS_KIND_RESERVED , 240, 0, 0 } /* RS_OP_RESERVED_240 = 0xf0 */,
+ {RS_KIND_RESERVED , 241, 0, 0 } /* RS_OP_RESERVED_241 = 0xf1 */,
+ {RS_KIND_RESERVED , 242, 0, 0 } /* RS_OP_RESERVED_242 = 0xf2 */,
+ {RS_KIND_RESERVED , 243, 0, 0 } /* RS_OP_RESERVED_243 = 0xf3 */,
+ {RS_KIND_RESERVED , 244, 0, 0 } /* RS_OP_RESERVED_244 = 0xf4 */,
+ {RS_KIND_RESERVED , 245, 0, 0 } /* RS_OP_RESERVED_245 = 0xf5 */,
+ {RS_KIND_RESERVED , 246, 0, 0 } /* RS_OP_RESERVED_246 = 0xf6 */,
+ {RS_KIND_RESERVED , 247, 0, 0 } /* RS_OP_RESERVED_247 = 0xf7 */,
+ {RS_KIND_RESERVED , 248, 0, 0 } /* RS_OP_RESERVED_248 = 0xf8 */,
+ {RS_KIND_RESERVED , 249, 0, 0 } /* RS_OP_RESERVED_249 = 0xf9 */,
+ {RS_KIND_RESERVED , 250, 0, 0 } /* RS_OP_RESERVED_250 = 0xfa */,
+ {RS_KIND_RESERVED , 251, 0, 0 } /* RS_OP_RESERVED_251 = 0xfb */,
+ {RS_KIND_RESERVED , 252, 0, 0 } /* RS_OP_RESERVED_252 = 0xfc */,
+ {RS_KIND_RESERVED , 253, 0, 0 } /* RS_OP_RESERVED_253 = 0xfd */,
+ {RS_KIND_RESERVED , 254, 0, 0 } /* RS_OP_RESERVED_254 = 0xfe */,
+ {RS_KIND_RESERVED , 255, 0, 0 } /* RS_OP_RESERVED_255 = 0xff */
+};
+/* END OF AUTOGENERATED CODE */
diff --git a/rsync/prototab.h b/rsync/prototab.h
new file mode 100644
index 0000000..3a9d771
--- a/dev/null
+++ b/rsync/prototab.h
@@ -0,0 +1,270 @@
+
+/* AUTOGENERATED BY ./mkprototab.pl, DO NOT EDIT */
+
+typedef struct rs_prototab_ent {
+ enum rs_op_kind kind;
+ int immediate;
+ size_t len_1, len_2;
+} rs_prototab_ent_t;
+
+extern const rs_prototab_ent_t rs_prototab[];
+
+enum {
+ RS_OP_END = 0,
+ RS_OP_LITERAL_1 = 0x1,
+ RS_OP_LITERAL_2 = 0x2,
+ RS_OP_LITERAL_3 = 0x3,
+ RS_OP_LITERAL_4 = 0x4,
+ RS_OP_LITERAL_5 = 0x5,
+ RS_OP_LITERAL_6 = 0x6,
+ RS_OP_LITERAL_7 = 0x7,
+ RS_OP_LITERAL_8 = 0x8,
+ RS_OP_LITERAL_9 = 0x9,
+ RS_OP_LITERAL_10 = 0xa,
+ RS_OP_LITERAL_11 = 0xb,
+ RS_OP_LITERAL_12 = 0xc,
+ RS_OP_LITERAL_13 = 0xd,
+ RS_OP_LITERAL_14 = 0xe,
+ RS_OP_LITERAL_15 = 0xf,
+ RS_OP_LITERAL_16 = 0x10,
+ RS_OP_LITERAL_17 = 0x11,
+ RS_OP_LITERAL_18 = 0x12,
+ RS_OP_LITERAL_19 = 0x13,
+ RS_OP_LITERAL_20 = 0x14,
+ RS_OP_LITERAL_21 = 0x15,
+ RS_OP_LITERAL_22 = 0x16,
+ RS_OP_LITERAL_23 = 0x17,
+ RS_OP_LITERAL_24 = 0x18,
+ RS_OP_LITERAL_25 = 0x19,
+ RS_OP_LITERAL_26 = 0x1a,
+ RS_OP_LITERAL_27 = 0x1b,
+ RS_OP_LITERAL_28 = 0x1c,
+ RS_OP_LITERAL_29 = 0x1d,
+ RS_OP_LITERAL_30 = 0x1e,
+ RS_OP_LITERAL_31 = 0x1f,
+ RS_OP_LITERAL_32 = 0x20,
+ RS_OP_LITERAL_33 = 0x21,
+ RS_OP_LITERAL_34 = 0x22,
+ RS_OP_LITERAL_35 = 0x23,
+ RS_OP_LITERAL_36 = 0x24,
+ RS_OP_LITERAL_37 = 0x25,
+ RS_OP_LITERAL_38 = 0x26,
+ RS_OP_LITERAL_39 = 0x27,
+ RS_OP_LITERAL_40 = 0x28,
+ RS_OP_LITERAL_41 = 0x29,
+ RS_OP_LITERAL_42 = 0x2a,
+ RS_OP_LITERAL_43 = 0x2b,
+ RS_OP_LITERAL_44 = 0x2c,
+ RS_OP_LITERAL_45 = 0x2d,
+ RS_OP_LITERAL_46 = 0x2e,
+ RS_OP_LITERAL_47 = 0x2f,
+ RS_OP_LITERAL_48 = 0x30,
+ RS_OP_LITERAL_49 = 0x31,
+ RS_OP_LITERAL_50 = 0x32,
+ RS_OP_LITERAL_51 = 0x33,
+ RS_OP_LITERAL_52 = 0x34,
+ RS_OP_LITERAL_53 = 0x35,
+ RS_OP_LITERAL_54 = 0x36,
+ RS_OP_LITERAL_55 = 0x37,
+ RS_OP_LITERAL_56 = 0x38,
+ RS_OP_LITERAL_57 = 0x39,
+ RS_OP_LITERAL_58 = 0x3a,
+ RS_OP_LITERAL_59 = 0x3b,
+ RS_OP_LITERAL_60 = 0x3c,
+ RS_OP_LITERAL_61 = 0x3d,
+ RS_OP_LITERAL_62 = 0x3e,
+ RS_OP_LITERAL_63 = 0x3f,
+ RS_OP_LITERAL_64 = 0x40,
+ RS_OP_LITERAL_N1 = 0x41,
+ RS_OP_LITERAL_N2 = 0x42,
+ RS_OP_LITERAL_N4 = 0x43,
+ RS_OP_LITERAL_N8 = 0x44,
+ RS_OP_COPY_N1_N1 = 0x45,
+ RS_OP_COPY_N1_N2 = 0x46,
+ RS_OP_COPY_N1_N4 = 0x47,
+ RS_OP_COPY_N1_N8 = 0x48,
+ RS_OP_COPY_N2_N1 = 0x49,
+ RS_OP_COPY_N2_N2 = 0x4a,
+ RS_OP_COPY_N2_N4 = 0x4b,
+ RS_OP_COPY_N2_N8 = 0x4c,
+ RS_OP_COPY_N4_N1 = 0x4d,
+ RS_OP_COPY_N4_N2 = 0x4e,
+ RS_OP_COPY_N4_N4 = 0x4f,
+ RS_OP_COPY_N4_N8 = 0x50,
+ RS_OP_COPY_N8_N1 = 0x51,
+ RS_OP_COPY_N8_N2 = 0x52,
+ RS_OP_COPY_N8_N4 = 0x53,
+ RS_OP_COPY_N8_N8 = 0x54,
+ RS_OP_RESERVED_85 = 0x55,
+ RS_OP_RESERVED_86 = 0x56,
+ RS_OP_RESERVED_87 = 0x57,
+ RS_OP_RESERVED_88 = 0x58,
+ RS_OP_RESERVED_89 = 0x59,
+ RS_OP_RESERVED_90 = 0x5a,
+ RS_OP_RESERVED_91 = 0x5b,
+ RS_OP_RESERVED_92 = 0x5c,
+ RS_OP_RESERVED_93 = 0x5d,
+ RS_OP_RESERVED_94 = 0x5e,
+ RS_OP_RESERVED_95 = 0x5f,
+ RS_OP_RESERVED_96 = 0x60,
+ RS_OP_RESERVED_97 = 0x61,
+ RS_OP_RESERVED_98 = 0x62,
+ RS_OP_RESERVED_99 = 0x63,
+ RS_OP_RESERVED_100 = 0x64,
+ RS_OP_RESERVED_101 = 0x65,
+ RS_OP_RESERVED_102 = 0x66,
+ RS_OP_RESERVED_103 = 0x67,
+ RS_OP_RESERVED_104 = 0x68,
+ RS_OP_RESERVED_105 = 0x69,
+ RS_OP_RESERVED_106 = 0x6a,
+ RS_OP_RESERVED_107 = 0x6b,
+ RS_OP_RESERVED_108 = 0x6c,
+ RS_OP_RESERVED_109 = 0x6d,
+ RS_OP_RESERVED_110 = 0x6e,
+ RS_OP_RESERVED_111 = 0x6f,
+ RS_OP_RESERVED_112 = 0x70,
+ RS_OP_RESERVED_113 = 0x71,
+ RS_OP_RESERVED_114 = 0x72,
+ RS_OP_RESERVED_115 = 0x73,
+ RS_OP_RESERVED_116 = 0x74,
+ RS_OP_RESERVED_117 = 0x75,
+ RS_OP_RESERVED_118 = 0x76,
+ RS_OP_RESERVED_119 = 0x77,
+ RS_OP_RESERVED_120 = 0x78,
+ RS_OP_RESERVED_121 = 0x79,
+ RS_OP_RESERVED_122 = 0x7a,
+ RS_OP_RESERVED_123 = 0x7b,
+ RS_OP_RESERVED_124 = 0x7c,
+ RS_OP_RESERVED_125 = 0x7d,
+ RS_OP_RESERVED_126 = 0x7e,
+ RS_OP_RESERVED_127 = 0x7f,
+ RS_OP_RESERVED_128 = 0x80,
+ RS_OP_RESERVED_129 = 0x81,
+ RS_OP_RESERVED_130 = 0x82,
+ RS_OP_RESERVED_131 = 0x83,
+ RS_OP_RESERVED_132 = 0x84,
+ RS_OP_RESERVED_133 = 0x85,
+ RS_OP_RESERVED_134 = 0x86,
+ RS_OP_RESERVED_135 = 0x87,
+ RS_OP_RESERVED_136 = 0x88,
+ RS_OP_RESERVED_137 = 0x89,
+ RS_OP_RESERVED_138 = 0x8a,
+ RS_OP_RESERVED_139 = 0x8b,
+ RS_OP_RESERVED_140 = 0x8c,
+ RS_OP_RESERVED_141 = 0x8d,
+ RS_OP_RESERVED_142 = 0x8e,
+ RS_OP_RESERVED_143 = 0x8f,
+ RS_OP_RESERVED_144 = 0x90,
+ RS_OP_RESERVED_145 = 0x91,
+ RS_OP_RESERVED_146 = 0x92,
+ RS_OP_RESERVED_147 = 0x93,
+ RS_OP_RESERVED_148 = 0x94,
+ RS_OP_RESERVED_149 = 0x95,
+ RS_OP_RESERVED_150 = 0x96,
+ RS_OP_RESERVED_151 = 0x97,
+ RS_OP_RESERVED_152 = 0x98,
+ RS_OP_RESERVED_153 = 0x99,
+ RS_OP_RESERVED_154 = 0x9a,
+ RS_OP_RESERVED_155 = 0x9b,
+ RS_OP_RESERVED_156 = 0x9c,
+ RS_OP_RESERVED_157 = 0x9d,
+ RS_OP_RESERVED_158 = 0x9e,
+ RS_OP_RESERVED_159 = 0x9f,
+ RS_OP_RESERVED_160 = 0xa0,
+ RS_OP_RESERVED_161 = 0xa1,
+ RS_OP_RESERVED_162 = 0xa2,
+ RS_OP_RESERVED_163 = 0xa3,
+ RS_OP_RESERVED_164 = 0xa4,
+ RS_OP_RESERVED_165 = 0xa5,
+ RS_OP_RESERVED_166 = 0xa6,
+ RS_OP_RESERVED_167 = 0xa7,
+ RS_OP_RESERVED_168 = 0xa8,
+ RS_OP_RESERVED_169 = 0xa9,
+ RS_OP_RESERVED_170 = 0xaa,
+ RS_OP_RESERVED_171 = 0xab,
+ RS_OP_RESERVED_172 = 0xac,
+ RS_OP_RESERVED_173 = 0xad,
+ RS_OP_RESERVED_174 = 0xae,
+ RS_OP_RESERVED_175 = 0xaf,
+ RS_OP_RESERVED_176 = 0xb0,
+ RS_OP_RESERVED_177 = 0xb1,
+ RS_OP_RESERVED_178 = 0xb2,
+ RS_OP_RESERVED_179 = 0xb3,
+ RS_OP_RESERVED_180 = 0xb4,
+ RS_OP_RESERVED_181 = 0xb5,
+ RS_OP_RESERVED_182 = 0xb6,
+ RS_OP_RESERVED_183 = 0xb7,
+ RS_OP_RESERVED_184 = 0xb8,
+ RS_OP_RESERVED_185 = 0xb9,
+ RS_OP_RESERVED_186 = 0xba,
+ RS_OP_RESERVED_187 = 0xbb,
+ RS_OP_RESERVED_188 = 0xbc,
+ RS_OP_RESERVED_189 = 0xbd,
+ RS_OP_RESERVED_190 = 0xbe,
+ RS_OP_RESERVED_191 = 0xbf,
+ RS_OP_RESERVED_192 = 0xc0,
+ RS_OP_RESERVED_193 = 0xc1,
+ RS_OP_RESERVED_194 = 0xc2,
+ RS_OP_RESERVED_195 = 0xc3,
+ RS_OP_RESERVED_196 = 0xc4,
+ RS_OP_RESERVED_197 = 0xc5,
+ RS_OP_RESERVED_198 = 0xc6,
+ RS_OP_RESERVED_199 = 0xc7,
+ RS_OP_RESERVED_200 = 0xc8,
+ RS_OP_RESERVED_201 = 0xc9,
+ RS_OP_RESERVED_202 = 0xca,
+ RS_OP_RESERVED_203 = 0xcb,
+ RS_OP_RESERVED_204 = 0xcc,
+ RS_OP_RESERVED_205 = 0xcd,
+ RS_OP_RESERVED_206 = 0xce,
+ RS_OP_RESERVED_207 = 0xcf,
+ RS_OP_RESERVED_208 = 0xd0,
+ RS_OP_RESERVED_209 = 0xd1,
+ RS_OP_RESERVED_210 = 0xd2,
+ RS_OP_RESERVED_211 = 0xd3,
+ RS_OP_RESERVED_212 = 0xd4,
+ RS_OP_RESERVED_213 = 0xd5,
+ RS_OP_RESERVED_214 = 0xd6,
+ RS_OP_RESERVED_215 = 0xd7,
+ RS_OP_RESERVED_216 = 0xd8,
+ RS_OP_RESERVED_217 = 0xd9,
+ RS_OP_RESERVED_218 = 0xda,
+ RS_OP_RESERVED_219 = 0xdb,
+ RS_OP_RESERVED_220 = 0xdc,
+ RS_OP_RESERVED_221 = 0xdd,
+ RS_OP_RESERVED_222 = 0xde,
+ RS_OP_RESERVED_223 = 0xdf,
+ RS_OP_RESERVED_224 = 0xe0,
+ RS_OP_RESERVED_225 = 0xe1,
+ RS_OP_RESERVED_226 = 0xe2,
+ RS_OP_RESERVED_227 = 0xe3,
+ RS_OP_RESERVED_228 = 0xe4,
+ RS_OP_RESERVED_229 = 0xe5,
+ RS_OP_RESERVED_230 = 0xe6,
+ RS_OP_RESERVED_231 = 0xe7,
+ RS_OP_RESERVED_232 = 0xe8,
+ RS_OP_RESERVED_233 = 0xe9,
+ RS_OP_RESERVED_234 = 0xea,
+ RS_OP_RESERVED_235 = 0xeb,
+ RS_OP_RESERVED_236 = 0xec,
+ RS_OP_RESERVED_237 = 0xed,
+ RS_OP_RESERVED_238 = 0xee,
+ RS_OP_RESERVED_239 = 0xef,
+ RS_OP_RESERVED_240 = 0xf0,
+ RS_OP_RESERVED_241 = 0xf1,
+ RS_OP_RESERVED_242 = 0xf2,
+ RS_OP_RESERVED_243 = 0xf3,
+ RS_OP_RESERVED_244 = 0xf4,
+ RS_OP_RESERVED_245 = 0xf5,
+ RS_OP_RESERVED_246 = 0xf6,
+ RS_OP_RESERVED_247 = 0xf7,
+ RS_OP_RESERVED_248 = 0xf8,
+ RS_OP_RESERVED_249 = 0xf9,
+ RS_OP_RESERVED_250 = 0xfa,
+ RS_OP_RESERVED_251 = 0xfb,
+ RS_OP_RESERVED_252 = 0xfc,
+ RS_OP_RESERVED_253 = 0xfd,
+ RS_OP_RESERVED_254 = 0xfe,
+ RS_OP_RESERVED_255 = 0xff
+};
+/* END OF AUTOGENERATED CODE */
diff --git a/rsync/qrsync.cpp b/rsync/qrsync.cpp
new file mode 100644
index 0000000..fe5f1bc
--- a/dev/null
+++ b/rsync/qrsync.cpp
@@ -0,0 +1,110 @@
+#include "qrsync.h"
+#include <stdio.h>
+extern "C" {
+#include "rsync.h"
+}
+#include <stdlib.h>
+
+#include <qfile.h>
+
+static const char *rdiffNewFile = "/tmp/rdiff/result";
+static size_t block_len = RS_DEFAULT_BLOCK_LEN;
+static size_t strong_len = RS_DEFAULT_STRONG_LEN;
+
+
+void QRsync::generateSignature( QString baseFile, QString sigFile )
+{
+
+ if ( QFile::exists( baseFile ) ) {
+ FILE *basis_file, *sig_file;
+ rs_result result;
+
+ basis_file = fopen( baseFile.latin1(), "rb" );
+ sig_file = fopen( sigFile.latin1(), "wb" );
+
+ result = rs_sig_file(basis_file, sig_file, block_len, strong_len, 0);
+
+ fclose( basis_file );
+ fclose( sig_file );
+ if (result != RS_DONE)
+ printf("error in rdiffGenSig: %d", result );
+ }
+}
+
+
+void QRsync::generateDiff( QString baseFile, QString sigFile, QString deltaFile )
+{
+ if ( QFile::exists( baseFile ) && QFile::exists( sigFile ) ) {
+ FILE *sig_file, *new_file, *delta_file;
+ rs_result result;
+ rs_signature_t *sumset;
+
+ sig_file = fopen(sigFile.latin1(), "rb");
+ new_file = fopen(baseFile.latin1(), "rb");
+ delta_file = fopen(deltaFile.latin1(), "wb");
+
+ result = rs_loadsig_file(sig_file, &sumset, 0);
+ if (result != RS_DONE) {
+ qDebug( "rdiffGenDiff: loading of sig file failed, error=%d", result );
+ } else {
+ result = rs_build_hash_table(sumset);
+ if ( result != RS_DONE) {
+ qDebug( "rdiffGenDiff: building of hash table failed, error=%d", result );
+ } else {
+ result = rs_delta_file(sumset, new_file, delta_file, 0);
+ if ( result != RS_DONE) {
+ qDebug( "rdiffGenDiff: writing of diff file failed, error=%d", result );
+ }
+ }
+ }
+
+ if ( sumset )
+ rs_free_sumset( sumset );
+ fclose( new_file );
+ fclose( delta_file );
+ fclose( sig_file );
+
+ }
+}
+
+void QRsync::applyDiff( QString baseFile, QString deltaFile )
+{
+ if ( QFile::exists( baseFile ) && QFile::exists( deltaFile ) ) {
+ FILE *basis_file, *delta_file, *new_file;
+ rs_result result;
+
+ basis_file = fopen(baseFile.latin1(), "rb");
+ delta_file = fopen(deltaFile.latin1(), "rb");
+#ifdef Q_WS_WIN
+ new_file = fopen( (baseFile + ".new").latin1(), "wb" );
+#else
+ new_file = fopen(rdiffNewFile, "wb");
+#endif
+
+ result = rs_patch_file(basis_file, delta_file, new_file, 0);
+
+ fclose( basis_file );
+ fclose( delta_file );
+ fclose( new_file );
+
+ if (result != RS_DONE) {
+ qDebug( "rdiffApplyDiff failed with result %d", result );
+ return;
+ }
+
+
+#ifdef Q_WS_WIN
+ QDir dir;
+ QFile backup = baseFile + "~";
+ dir.rename( baseFile, backup );
+ dir.rename( (baseFile + ".new"), baseFile );
+ dir.remove( backup );
+#else
+ QString cmd = "mv ";
+ cmd += rdiffNewFile;
+ cmd += " " + baseFile;
+ system( cmd.latin1() );
+#endif
+ }
+
+}
diff --git a/rsync/qrsync.h b/rsync/qrsync.h
new file mode 100644
index 0000000..293c0ff
--- a/dev/null
+++ b/rsync/qrsync.h
@@ -0,0 +1,18 @@
+/*****
+ */
+
+#ifndef QRSYNC_H
+#define QRSYNC_H
+
+#include <qstring.h>
+
+class QRsync
+{
+public:
+ static void generateSignature( QString baseFile, QString sigFile );
+ static void generateDiff( QString baseFile, QString sigFile, QString diffFile );
+ static void applyDiff( QString baseFile, QString diffFile );
+};
+
+
+#endif
diff --git a/rsync/rdiff.c b/rsync/rdiff.c
new file mode 100644
index 0000000..e08095a
--- a/dev/null
+++ b/rsync/rdiff.c
@@ -0,0 +1,358 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | .. after a year and a day, mourning is
+ | dangerous to the survivor and troublesome
+ | to the dead.
+ | -- Harold Bloom
+ */
+
+/*
+ * rdiff.c -- Command-line network-delta tool.
+ *
+ * TODO: Add a -z option to gzip/gunzip patches. This would be
+ * somewhat useful, but more importantly a good test of the streaming
+ * API. Also add -I for bzip2.
+ *
+ * If built with debug support and we have mcheck, then turn it on.
+ * (Optionally?)
+ */
+
+#include <config_rsync.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <popt.h>
+
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+#endif
+
+#ifdef HAVE_BZLIB_H
+#include <bzlib.h>
+#endif
+
+#include "rsync.h"
+#include "fileutil.h"
+#include "util.h"
+#include "trace.h"
+#include "isprefix.h"
+
+
+#define PROGRAM "rdiff"
+
+static size_t block_len = RS_DEFAULT_BLOCK_LEN;
+static size_t strong_len = RS_DEFAULT_STRONG_LEN;
+
+static int show_stats = 0;
+
+static int bzip2_level = 0;
+static int gzip_level = 0;
+
+
+enum {
+ OPT_GZIP = 1069, OPT_BZIP2
+};
+
+extern int rs_roll_paranoia;
+
+const struct poptOption opts[] = {
+ { "verbose", 'v', POPT_ARG_NONE, 0, 'v' },
+ { "version", 'V', POPT_ARG_NONE, 0, 'V' },
+ { "input-size", 'I', POPT_ARG_INT, &rs_inbuflen },
+ { "output-size", 'O', POPT_ARG_INT, &rs_outbuflen },
+ { "help", '?', POPT_ARG_NONE, 0, 'h' },
+ { 0, 'h', POPT_ARG_NONE, 0, 'h' },
+ { "block-size", 'b', POPT_ARG_INT, &block_len },
+ { "sum-size", 'S', POPT_ARG_INT, &strong_len },
+ { "statistics", 's', POPT_ARG_NONE, &show_stats },
+ { "stats", 0, POPT_ARG_NONE, &show_stats },
+ { "gzip", 0, POPT_ARG_NONE, 0, OPT_GZIP },
+ { "bzip2", 0, POPT_ARG_NONE, 0, OPT_BZIP2 },
+ { "paranoia", 0, POPT_ARG_NONE, &rs_roll_paranoia },
+ { 0 }
+};
+
+
+static void rdiff_usage(const char *error)
+{
+ fprintf(stderr, "%s\n"
+ "Try `%s --help' for more information.\n",
+ error, PROGRAM);
+}
+
+
+static void rdiff_no_more_args(poptContext opcon)
+{
+ if (poptGetArg(opcon)) {
+ rdiff_usage("rdiff: too many arguments");
+ exit(RS_SYNTAX_ERROR);
+ }
+}
+
+
+static void bad_option(poptContext opcon, int error)
+{
+ char msgbuf[1000];
+
+ snprintf(msgbuf, sizeof msgbuf-1, "%s: %s: %s",
+ PROGRAM, poptStrerror(error), poptBadOption(opcon, 0));
+ rdiff_usage(msgbuf);
+
+ exit(RS_SYNTAX_ERROR);
+}
+
+
+static void help(void) {
+ printf("Usage: rdiff [OPTIONS] signature [BASIS [SIGNATURE]]\n"
+ " [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]]\n"
+ " [OPTIONS] patch BASIS [DELTA [NEWFILE]]\n"
+ "\n"
+ "Options:\n"
+ " -v, --verbose Trace internal processing\n"
+ " -V, --version Show program version\n"
+ " -?, --help Show this help message\n"
+ " -s, --statistics Show performance statistics\n"
+ "Delta-encoding options:\n"
+ " -b, --block-size=BYTES Signature block size\n"
+ " -S, --sum-size=BYTES Set signature strength\n"
+ " --paranoia Verify all rolling checksums\n"
+ "IO options:\n"
+ " -I, --input-size=BYTES Input buffer size\n"
+ " -O, --output-size=BYTES Output buffer size\n"
+ " -z, --gzip[=LEVEL] gzip-compress deltas\n"
+ " -i, --bzip2[=LEVEL] bzip2-compress deltas\n"
+ );
+}
+
+
+static void rdiff_show_version(void)
+{
+ /*
+ * This little declaration is dedicated to Stephen Kapp and Reaper
+ * Technologies, who by all appearances redistributed a modified but
+ * unacknowledged version of GNU Keyring in violation of the licence
+ * and all laws of politeness and good taste.
+ */
+ char const *bzlib = "", *zlib = "", *trace = "";
+
+#ifdef HAVE_LIBZ
+ zlib = ", gzip";
+#endif
+
+#ifdef HAVE_LIBBZ2
+ bzlib = ", bzip2";
+#endif
+
+#ifndef DO_RS_TRACE
+ trace = ", trace disabled";
+#endif
+
+ printf("rdiff (%s) [%s]\n"
+ "Copyright (C) 1997-2001 by Martin Pool, Andrew Tridgell and others.\n"
+ "http://rproxy.samba.org/\n"
+ "Capabilities: %d bit files%s%s%s\n"
+ "\n"
+ "librsync comes with NO WARRANTY, to the extent permitted by law.\n"
+ "You may redistribute copies of librsync under the terms of the GNU\n"
+ "Lesser General Public License. For more information about these\n"
+ "matters, see the files named COPYING.\n",
+ rs_librsync_version, RS_CANONICAL_HOST,
+ 8 * sizeof(rs_long_t), zlib, bzlib, trace);
+}
+
+
+
+static void rdiff_options(poptContext opcon)
+{
+ int c;
+ char const *a;
+
+ while ((c = poptGetNextOpt(opcon)) != -1) {
+ switch (c) {
+ case 'h':
+ help();
+ exit(RS_DONE);
+ case 'V':
+ rdiff_show_version();
+ exit(RS_DONE);
+ case 'v':
+ if (!rs_supports_trace()) {
+ rs_error("library does not support trace");
+ }
+ rs_trace_set_level(RS_LOG_DEBUG);
+ break;
+
+ case OPT_GZIP:
+ case OPT_BZIP2:
+ if ((a = poptGetOptArg(opcon))) {
+ int l = atoi(a);
+ if (c == OPT_GZIP)
+ gzip_level = l;
+ else
+ bzip2_level = l;
+ } else {
+ if (c == OPT_GZIP)
+ gzip_level = -1; /* library default */
+ else
+ bzip2_level = 9; /* demand the best */
+ }
+ rs_error("sorry, compression is not really implemented yet");
+ exit(RS_UNIMPLEMENTED);
+
+ default:
+ bad_option(opcon, c);
+ }
+ }
+}
+
+
+/**
+ * Generate signature from remaining command line arguments.
+ */
+static rs_result rdiff_sig(poptContext opcon)
+{
+ FILE *basis_file, *sig_file;
+ rs_stats_t stats;
+ rs_result result;
+
+ basis_file = rs_file_open(poptGetArg(opcon), "rb");
+ sig_file = rs_file_open(poptGetArg(opcon), "wb");
+
+ rdiff_no_more_args(opcon);
+
+ result = rs_sig_file(basis_file, sig_file, block_len, strong_len, &stats);
+ if (result != RS_DONE)
+ return result;
+
+ if (show_stats)
+ rs_log_stats(&stats);
+
+ return result;
+}
+
+
+static rs_result rdiff_delta(poptContext opcon)
+{
+ FILE *sig_file, *new_file, *delta_file;
+ char const *sig_name;
+ rs_result result;
+ rs_signature_t *sumset;
+ rs_stats_t stats;
+
+ if (!(sig_name = poptGetArg(opcon))) {
+ rdiff_usage("Usage for delta: "
+ "rdiff [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]]");
+ return RS_SYNTAX_ERROR;
+ }
+
+ sig_file = rs_file_open(sig_name, "rb");
+ new_file = rs_file_open(poptGetArg(opcon), "rb");
+ delta_file = rs_file_open(poptGetArg(opcon), "wb");
+
+ rdiff_no_more_args(opcon);
+
+ result = rs_loadsig_file(sig_file, &sumset, &stats);
+ if (result != RS_DONE)
+ return result;
+
+ if (show_stats)
+ rs_log_stats(&stats);
+
+ if ((result = rs_build_hash_table(sumset)) != RS_DONE)
+ return result;
+
+ result = rs_delta_file(sumset, new_file, delta_file, &stats);
+
+ if (show_stats)
+ rs_log_stats(&stats);
+
+ return result;
+}
+
+
+
+static rs_result rdiff_patch(poptContext opcon)
+{
+ /* patch BASIS [DELTA [NEWFILE]] */
+ FILE *basis_file, *delta_file, *new_file;
+ char const *basis_name;
+ rs_stats_t stats;
+ rs_result result;
+
+ if (!(basis_name = poptGetArg(opcon))) {
+ rdiff_usage("Usage for patch: "
+ "rdiff [OPTIONS] patch BASIS [DELTA [NEW]]");
+ return RS_SYNTAX_ERROR;
+ }
+
+ basis_file = rs_file_open(basis_name, "rb");
+ delta_file = rs_file_open(poptGetArg(opcon), "rb");
+ new_file = rs_file_open(poptGetArg(opcon), "wb");
+
+ rdiff_no_more_args(opcon);
+
+ result = rs_patch_file(basis_file, delta_file, new_file, &stats);
+
+ if (show_stats)
+ rs_log_stats(&stats);
+
+ return result;
+}
+
+
+
+static rs_result rdiff_action(poptContext opcon)
+{
+ const char *action;
+
+ action = poptGetArg(opcon);
+ if (!action)
+ ;
+ else if (isprefix(action, "signature"))
+ return rdiff_sig(opcon);
+ else if (isprefix(action, "delta"))
+ return rdiff_delta(opcon);
+ else if (isprefix(action, "patch"))
+ return rdiff_patch(opcon);
+
+ rdiff_usage("rdiff: You must specify an action: `signature', `delta', or `patch'.");
+ return RS_SYNTAX_ERROR;
+}
+
+
+int main(const int argc, const char *argv[])
+{
+ poptContext opcon;
+ rs_result result;
+
+ opcon = poptGetContext(PROGRAM, argc, argv, opts, 0);
+ rdiff_options(opcon);
+ result = rdiff_action(opcon);
+
+ if (result != RS_DONE)
+ rs_log(RS_LOG_ERR|RS_LOG_NONAME, "%s", rs_strerror(result));
+
+ return result;
+}
diff --git a/rsync/readsums.c b/rsync/readsums.c
new file mode 100644
index 0000000..21b5ecd
--- a/dev/null
+++ b/rsync/readsums.c
@@ -0,0 +1,214 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * readsums.c -- Load signatures from a file into an ::rs_signature_t.
+ */
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "rsync.h"
+#include "sumset.h"
+#include "job.h"
+#include "trace.h"
+#include "netint.h"
+#include "protocol.h"
+#include "util.h"
+#include "stream.h"
+
+
+static rs_result rs_loadsig_s_weak(rs_job_t *job);
+static rs_result rs_loadsig_s_strong(rs_job_t *job);
+
+
+
+/**
+ * Add a just-read-in checksum pair to the signature block.
+ */
+static rs_result rs_loadsig_add_sum(rs_job_t *job, rs_strong_sum_t *strong)
+{
+ size_t new_size;
+ rs_signature_t *sig = job->signature;
+ rs_block_sig_t *asignature;
+
+ sig->count++;
+ new_size = sig->count * sizeof(rs_block_sig_t);
+
+ sig->block_sigs = realloc(sig->block_sigs, new_size);
+
+ if (sig->block_sigs == NULL) {
+ return RS_MEM_ERROR;
+ }
+ asignature = &(sig->block_sigs[sig->count - 1]);
+
+ asignature->weak_sum = job->weak_sig;
+ asignature->i = sig->count;
+
+ memcpy(asignature->strong_sum, strong, sig->strong_sum_len);
+
+ if (rs_trace_enabled()) {
+ char hexbuf[RS_MD4_LENGTH * 2 + 2];
+ rs_hexify(hexbuf, strong, sig->strong_sum_len);
+
+ rs_trace("read in checksum: weak=%#x, strong=%s", asignature->weak_sum,
+ hexbuf);
+ }
+
+ job->stats.sig_blocks++;
+
+ return RS_RUNNING;
+}
+
+
+static rs_result rs_loadsig_s_weak(rs_job_t *job)
+{
+ int l;
+ rs_result result;
+
+ result = rs_suck_n4(job, &l);
+ if (result == RS_DONE)
+ ;
+ else if (result == RS_INPUT_ENDED) /* ending here is OK */
+ return RS_DONE;
+ else
+ return result;
+
+ job->weak_sig = l;
+
+ job->statefn = rs_loadsig_s_strong;
+
+ return RS_RUNNING;
+}
+
+
+
+static rs_result rs_loadsig_s_strong(rs_job_t *job)
+{
+ rs_result result;
+ rs_strong_sum_t *strongsum;
+
+ result = rs_scoop_read(job, job->signature->strong_sum_len,
+ (void **) &strongsum);
+ if (result != RS_DONE) return result;
+
+ job->statefn = rs_loadsig_s_weak;
+
+ return rs_loadsig_add_sum(job, strongsum);
+}
+
+
+
+static rs_result rs_loadsig_s_stronglen(rs_job_t *job)
+{
+ int l;
+ rs_result result;
+
+ if ((result = rs_suck_n4(job, &l)) != RS_DONE)
+ return result;
+ job->strong_sum_len = l;
+
+ if (l < 0 || l > RS_MD4_LENGTH) {
+ rs_error("strong sum length %d is implausible", l);
+ return RS_CORRUPT;
+ }
+
+ job->signature->block_len = job->block_len;
+ job->signature->strong_sum_len = job->strong_sum_len;
+
+ rs_trace("allocated sigset_t (strong_sum_len=%d, block_len=%d)",
+ (int) job->strong_sum_len, (int) job->block_len);
+
+ job->statefn = rs_loadsig_s_weak;
+
+ return RS_RUNNING;
+}
+
+
+static rs_result rs_loadsig_s_blocklen(rs_job_t *job)
+{
+ int l;
+ rs_result result;
+
+ if ((result = rs_suck_n4(job, &l)) != RS_DONE)
+ return result;
+ job->block_len = l;
+
+ if (job->block_len < 1) {
+ rs_error("block length of %d is bogus", (int) job->block_len);
+ return RS_CORRUPT;
+ }
+
+ job->statefn = rs_loadsig_s_stronglen;
+ job->stats.block_len = job->block_len;
+
+ return RS_RUNNING;
+}
+
+
+static rs_result rs_loadsig_s_magic(rs_job_t *job)
+{
+ int l;
+ rs_result result;
+
+ if ((result = rs_suck_n4(job, &l)) != RS_DONE) {
+ return result;
+ } else if (l != RS_SIG_MAGIC) {
+ rs_error("wrong magic number %#10x for signature", l);
+ return RS_BAD_MAGIC;
+ } else {
+ rs_trace("got signature magic %#10x", l);
+ }
+
+ job->statefn = rs_loadsig_s_blocklen;
+
+ return RS_RUNNING;
+}
+
+
+/**
+ * \brief Read a signature from a file into an ::rs_signature_t structure
+ * in memory.
+ *
+ * Once there, it can be used to generate a delta to a newer version of
+ * the file.
+ *
+ * \note After loading the signatures, you must call
+ * rs_build_hash_table() before you can use them.
+ */
+rs_job_t *rs_loadsig_begin(rs_signature_t **signature)
+{
+ rs_job_t *job;
+
+ job = rs_job_new("loadsig", rs_loadsig_s_magic);
+ *signature = job->signature = rs_alloc_struct(rs_signature_t);
+ job->signature->count = 0;
+
+ return job;
+}
+
diff --git a/rsync/rsync.h b/rsync/rsync.h
new file mode 100644
index 0000000..a80a368
--- a/dev/null
+++ b/rsync/rsync.h
@@ -0,0 +1,388 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | You should never wear your best
+ | trousers when you go out to fight for
+ | freedom and liberty.
+ | -- Henrik Ibsen
+ */
+
+
+/** \file rsync.h
+ *
+ * \brief Main public interface to librsync.
+ * \author Martin Pool <mbp@samba.org>
+ * \version librsync-0.9.1
+ *
+ * $Id$
+ *
+ * See \ref intro for an introduction to use of this library.
+ */
+
+#include <sys/types.h>
+
+extern char const rs_librsync_version[];
+extern char const rs_licence_string[];
+
+
+/**
+ * \brief A long integer type that can handle the largest file
+ * offsets.
+ *
+ * Perhaps this might have to be configured to be 'long long', 'long',
+ * or something else depending on the platform.
+ */
+#if SIZEOF_LONG_LONG
+typedef signed long long rs_long_t;
+#else
+typedef long rs_long_t;
+#endif
+
+
+/**
+ * \brief Log severity levels.
+ *
+ * These are the same as syslog, at least in glibc.
+ *
+ * \sa rs_trace_set_level()
+ */
+typedef enum {
+ RS_LOG_EMERG = 0, /**< System is unusable */
+ RS_LOG_ALERT = 1, /**< Action must be taken immediately */
+ RS_LOG_CRIT = 2, /**< Critical conditions */
+ RS_LOG_ERR = 3, /**< Error conditions */
+ RS_LOG_WARNING = 4, /**< Warning conditions */
+ RS_LOG_NOTICE = 5, /**< Normal but significant condition */
+ RS_LOG_INFO = 6, /**< Informational */
+ RS_LOG_DEBUG = 7 /**< Debug-level messages */
+} rs_loglevel;
+
+
+
+/**
+ * \typedef rs_trace_fn_t
+ * \brief Callback to write out log messages.
+ * \param level a syslog level.
+ * \param msg message to be logged.
+ */
+typedef void rs_trace_fn_t(int level, char const *msg);
+
+void rs_trace_set_level(rs_loglevel level);
+
+/** Set trace callback. */
+void rs_trace_to(rs_trace_fn_t *);
+
+/** Default trace callback that writes to stderr. Implements
+ * ::rs_trace_fn_t, and may be passed to rs_trace_to(). */
+void rs_trace_stderr(int level, char const *msg);
+
+/** Check whether the library was compiled with debugging trace
+ * suport. */
+int rs_supports_trace(void);
+
+
+
+/**
+ * Convert FROM_LEN bytes at FROM_BUF into a hex representation in
+ * TO_BUF, which must be twice as long plus one byte for the null
+ * terminator.
+ */
+void rs_hexify(char *to_buf, void const *from_buf, int from_len);
+
+/**
+ * Decode a base64 buffer in place. \return the number of binary
+ * bytes.
+ */
+size_t rs_unbase64(char *s);
+
+
+/**
+ * Encode a buffer as base64.
+ */
+void rs_base64(unsigned char const *buf, int n, char *out);
+
+
+/**
+ * \brief Return codes from nonblocking rsync operations.
+ */
+typedef enum {
+ RS_DONE = 0, /**< Completed successfully. */
+ RS_BLOCKED = 1, /**< Blocked waiting for more data. */
+ RS_RUNNING = 2, /**< Not yet finished or blocked.
+ * This value should never be returned
+ * to the caller. */
+
+ RS_TEST_SKIPPED = 77, /**< Test neither passed or failed. */
+
+ RS_IO_ERROR = 100, /**< Error in file or network IO. */
+ RS_SYNTAX_ERROR = 101, /**< Command line syntax error. */
+ RS_MEM_ERROR = 102, /**< Out of memory. */
+ RS_INPUT_ENDED = 103, /**< End of input file, possibly
+ unexpected. */
+ RS_BAD_MAGIC = 104, /**< Bad magic number at start of
+ stream. Probably not a librsync
+ file, or possibly the wrong kind of
+ file or from an incompatible
+ library version. */
+ RS_UNIMPLEMENTED = 105, /**< Author is lazy. */
+ RS_CORRUPT = 106, /**< Unbelievable value in stream. */
+ RS_INTERNAL_ERROR = 107, /**< Probably a library bug. */
+ RS_PARAM_ERROR = 108 /**< Bad value passed in to library,
+ * probably an application bug. */
+} rs_result;
+
+
+
+/**
+ * Return an English description of a ::rs_result value.
+ */
+char const *rs_strerror(rs_result r);
+
+
+/**
+ * \brief Performance statistics from a librsync encoding or decoding
+ * operation.
+ *
+ * \sa rs_format_stats(), rs_log_stats()
+ */
+typedef struct rs_stats {
+ char const *op; /**< Human-readable name of current
+ * operation. For example, "delta". */
+ int lit_cmds; /**< Number of literal commands. */
+ rs_long_t lit_bytes; /**< Number of literal bytes. */
+ rs_long_t lit_cmdbytes; /**< Number of bytes used in literal
+ * command headers. */
+
+ rs_long_t copy_cmds, copy_bytes, copy_cmdbytes;
+ rs_long_t sig_cmds, sig_bytes;
+ int false_matches;
+
+ rs_long_t sig_blocks; /**< Number of blocks described by the
+ signature. */
+
+ size_t block_len;
+
+ rs_long_t in_bytes; /**< Total bytes read from input. */
+ rs_long_t out_bytes; /**< Total bytes written to output. */
+} rs_stats_t;
+
+
+/** \typedef struct rs_mdfour rs_mdfour_t
+ *
+ * \brief MD4 message-digest accumulator.
+ *
+ * \sa rs_mdfour(), rs_mdfour_begin(), rs_mdfour_update(),
+ * rs_mdfour_result()
+ */
+typedef struct rs_mdfour {
+ int A, B, C, D;
+ int totalN;
+ int tail_len;
+ unsigned char tail[64];
+} rs_mdfour_t;
+
+#define RS_MD4_LENGTH 16
+
+typedef unsigned int rs_weak_sum_t;
+typedef unsigned char rs_strong_sum_t[RS_MD4_LENGTH];
+
+void rs_mdfour(unsigned char *out, void const *in, size_t);
+void rs_mdfour_begin(/* @out@ */ rs_mdfour_t * md);
+void rs_mdfour_update(rs_mdfour_t * md, void const *,
+ size_t n);
+void rs_mdfour_result(rs_mdfour_t * md, unsigned char *out);
+
+char *rs_format_stats(rs_stats_t const *, char *, size_t);
+
+int rs_log_stats(rs_stats_t const *stats);
+
+
+typedef struct rs_signature rs_signature_t;
+
+void rs_free_sumset(rs_signature_t *);
+void rs_sumset_dump(rs_signature_t const *);
+
+
+/**
+ * Stream through which the calling application feeds data to and from the
+ * library.
+ *
+ * On each call to rs_job_iter, the caller can make available
+ *
+ * - avail_in bytes of input data at next_in
+ * - avail_out bytes of output space at next_out
+ * - some of both
+ *
+ * Buffers must be allocated and passed in by the caller. This
+ * routine never allocates, reallocates or frees buffers.
+ *
+ * Pay attention to the meaning of the returned pointer and length
+ * values. They do \b not indicate the location and amount of
+ * returned data. Rather, if \p *out_ptr was originally set to \p
+ * out_buf, then the output data begins at \p out_buf, and has length
+ * \p *out_ptr - \p out_buf.
+ *
+ * Note also that if \p *avail_in is nonzero on return, then not all of
+ * the input data has been consumed. The caller should either provide
+ * more output buffer space and call rs_work() again passing the same
+ * \p next_in and \p avail_in, or put the remaining input data into some
+ * persistent buffer and call rs_work() with it again when there is
+ * more output space.
+ *
+ * \param next_in References a pointer which on entry should point to
+ * the start of the data to be encoded. Updated to point to the byte
+ * after the last one consumed.
+ *
+ * \param avail_in References the length of available input. Updated to
+ * be the number of unused data bytes, which will be zero if all the
+ * input was consumed. May be zero if there is no new input, but the
+ * caller just wants to drain output.
+ *
+ * \param next_out References a pointer which on entry points to the
+ * start of the output buffer. Updated to point to the byte after the
+ * last one filled.
+ *
+ * \param avail_out References the size of available output buffer.
+ * Updated to the size of unused output buffer.
+ *
+ * \return The ::rs_result that caused iteration to stop.
+ *
+ * \sa rs_buffers_t
+ * \sa \ref api_buffers
+ */
+struct rs_buffers_s {
+ char *next_in; /**< Next input byte */
+ size_t avail_in; /**< Number of bytes available at next_in */
+ int eof_in; /**< True if there is no more data
+ * after this. */
+
+ char *next_out; /**< Next output byte should be put there */
+ size_t avail_out; /**< Remaining free space at next_out */
+};
+
+/**
+ * Stream through which the calling application feeds data to and from the
+ * library.
+ *
+ * \sa struct rs_buffers_s
+ * \sa \ref api_buffers
+ */
+typedef struct rs_buffers_s rs_buffers_t;
+
+/** Default length of strong signatures, in bytes. The MD4 checksum
+ * is truncated to this size. */
+#define RS_DEFAULT_STRONG_LEN 8
+
+/** Default block length, if not determined by any other factors. */
+#define RS_DEFAULT_BLOCK_LEN 2048
+
+
+/** \typedef struct rs_job rs_job_t
+ *
+ * \brief Job of work to be done.
+ *
+ * Created by functions such as rs_sig_begin(), and then iterated
+ * over by rs_job_iter(). */
+typedef struct rs_job rs_job_t;
+
+/**
+ * Bitmask values that may be passed to the options parameter of
+ * rs_work().
+ */
+typedef enum rs_work_options {
+ RS_END = 0x01 /**< End of input file; please finish
+ * up. */
+} rs_work_options;
+
+
+rs_result rs_job_iter(rs_job_t *, rs_buffers_t *);
+
+typedef rs_result rs_driven_cb(rs_job_t *job, rs_buffers_t *buf,
+ void *opaque);
+
+rs_result rs_job_drive(rs_job_t *job, rs_buffers_t *buf,
+ rs_driven_cb in_cb, void *in_opaque,
+ rs_driven_cb out_cb, void *out_opaque);
+
+rs_result rs_job_free(rs_job_t *);
+
+int rs_accum_value(rs_job_t *, char *sum, size_t sum_len);
+
+rs_job_t *rs_sig_begin(size_t new_block_len, size_t strong_sum_len);
+
+rs_job_t *rs_delta_begin(rs_signature_t *);
+
+rs_job_t *rs_loadsig_begin(rs_signature_t **);
+
+/**
+ * \brief Callback used to retrieve parts of the basis file.
+ *
+ * \param pos Position where copying should begin.
+ *
+ * \param len On input, the amount of data that should be retrieved.
+ * Updated to show how much is actually available.
+ *
+ * \param buf On input, a buffer of at least \p *len bytes. May be
+ * updated to point to a buffer allocated by the callback if it
+ * prefers.
+ */
+typedef rs_result rs_copy_cb(void *opaque, off_t pos,
+ size_t *len, void **buf);
+
+
+
+rs_job_t *rs_patch_begin(rs_copy_cb *, void *copy_arg);
+
+
+rs_result rs_build_hash_table(rs_signature_t* sums);
+
+
+
+#ifndef RSYNC_NO_STDIO_INTERFACE
+/**
+ * Buffer sizes for file IO.
+ *
+ * You probably only need to change these in testing.
+ */
+extern int rs_inbuflen, rs_outbuflen;
+
+
+/**
+ * Calculate the MD4 sum of a file.
+ *
+ * \param result Binary (not hex) MD4 of the whole contents of the
+ * file.
+ */
+void rs_mdfour_file(FILE *in_file, char *result);
+
+rs_result rs_sig_file(FILE *old_file, FILE *sig_file,
+ size_t block_len, size_t strong_len, rs_stats_t *);
+
+rs_result rs_loadsig_file(FILE *, rs_signature_t **, rs_stats_t *);
+
+rs_result rs_file_copy_cb(void *arg, off_t pos, size_t *len, void **buf);
+
+rs_result rs_delta_file(rs_signature_t *, FILE *new_file, FILE *delta_file, rs_stats_t *);
+
+rs_result rs_patch_file(FILE *basis_file, FILE *delta_file, FILE *new_file, rs_stats_t *);
+#endif
diff --git a/rsync/scoop.c b/rsync/scoop.c
new file mode 100644
index 0000000..9f68a60
--- a/dev/null
+++ b/rsync/scoop.c
@@ -0,0 +1,271 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
+ * scoop.c -- This file deals with readahead from caller-supplied
+ * buffers.
+ *
+ * Many functions require a certain minimum amount of input to do their
+ * processing. For example, to calculate a strong checksum of a block
+ * we need at least a block of input.
+ *
+ * Since we put the buffers completely under the control of the caller,
+ * we can't count on ever getting this much data all in one go. We
+ * can't simply wait, because the caller might have a smaller buffer
+ * than we require and so we'll never get it. For the same reason we
+ * must always accept all the data we're given.
+ *
+ * So, stream input data that's required for readahead is put into a
+ * special buffer, from which the caller can then read. It's
+ * essentially like an internal pipe, which on any given read request
+ * may or may not be able to actually supply the data.
+ *
+ * As a future optimization, we might try to take data directly from the
+ * input buffer if there's already enough there.
+ */
+
+/*
+ * TODO: We probably know a maximum amount of data that can be scooped
+ * up, so we could just avoid dynamic allocation. However that can't
+ * be fixed at compile time, because when generating a delta it needs
+ * to be large enough to hold one full block. Perhaps we can set it
+ * up when the job is allocated? It would be kind of nice to not do
+ * any memory allocation after startup, as bzlib does this.
+ */
+
+
+ /*
+ | To walk on water you've gotta sink
+ | in the ice.
+ | -- Shihad, `The General Electric'.
+ */
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "rsync.h"
+#include "job.h"
+#include "stream.h"
+#include "trace.h"
+#include "util.h"
+
+
+#if 0
+# undef rs_trace
+# define rs_trace(s...)
+#endif
+
+
+/**
+ * Try to accept a from the input buffer to get LEN bytes in the scoop.
+ */
+void rs_scoop_input(rs_job_t *job, size_t len)
+{
+ rs_buffers_t *stream = job->stream;
+ size_t tocopy;
+
+ assert(len > job->scoop_avail);
+
+ if (job->scoop_alloc < len) {
+ /* need to allocate a new buffer, too */
+ char *newbuf;
+ int newsize = 2 * len;
+ newbuf = rs_alloc(newsize, "scoop buffer");
+ if (job->scoop_avail)
+ memcpy(newbuf, job->scoop_next, job->scoop_avail);
+ if (job->scoop_buf)
+ free(job->scoop_buf);
+ job->scoop_buf = job->scoop_next = newbuf;
+ rs_trace("resized scoop buffer to %.0f bytes from %.0f",
+ (double) newsize, (double) job->scoop_alloc);
+ job->scoop_alloc = newsize;
+ } else {
+ /* this buffer size is fine, but move the existing
+ * data down to the front. */
+ memmove(job->scoop_buf, job->scoop_next, job->scoop_avail);
+ job->scoop_next = job->scoop_buf;
+ }
+
+ /* take as much input as is available, to give up to LEN bytes
+ * in the scoop. */
+ tocopy = len - job->scoop_avail;
+ if (tocopy > stream->avail_in)
+ tocopy = stream->avail_in;
+ assert(tocopy + job->scoop_avail <= job->scoop_alloc);
+
+ memcpy(job->scoop_next + job->scoop_avail, stream->next_in, tocopy);
+ rs_trace("accepted %.0f bytes from input to scoop", (double) tocopy);
+ job->scoop_avail += tocopy;
+ stream->next_in += tocopy;
+ stream->avail_in -= tocopy;
+}
+
+
+/**
+ * Advance the input cursor forward \p len bytes. This is used after
+ * doing readahead, when you decide you want to keep it. \p len must
+ * be no more than the amount of available data, so you can't cheat.
+ *
+ * So when creating a delta, we require one block of readahead. But
+ * after examining that block, we might decide to advance over all of
+ * it (if there is a match), or just one byte (if not).
+ */
+void rs_scoop_advance(rs_job_t *job, size_t len)
+{
+ rs_buffers_t *stream = job->stream;
+
+ /* It never makes sense to advance over a mixture of bytes from
+ * the scoop and input, because you couldn't possibly have looked
+ * at them all at the same time. */
+ if (job->scoop_avail) {
+ /* reading from the scoop buffer */
+ rs_trace("advance over %d bytes from scoop", len);
+ assert(len <= job->scoop_avail);
+ job->scoop_avail -= len;
+ job->scoop_next += len;
+ } else {
+ rs_trace("advance over %d bytes from input buffer", len);
+ assert(len <= stream->avail_in);
+ stream->avail_in -= len;
+ stream->next_in += len;
+ }
+}
+
+
+
+/**
+ * \brief Read from scoop without advancing.
+ *
+ * Ask for LEN bytes of input from the stream. If that much data is
+ * available, then return a pointer to it in PTR, advance the stream
+ * input pointer over the data, and return RS_DONE. If there's not
+ * enough data, then accept whatever is there into a buffer, advance
+ * over it, and return RS_BLOCKED.
+ *
+ * The data is not actually removed from the input, so this function
+ * lets you do readahead. If you want to keep any of the data, you
+ * should also call rs_scoop_advance() to skip over it.
+ */
+rs_result rs_scoop_readahead(rs_job_t *job, size_t len, void **ptr)
+{
+ rs_buffers_t *stream = job->stream;
+ rs_job_check(job);
+
+ if (job->scoop_avail >= len) {
+ /* We have enough data queued to satisfy the request,
+ * so go straight from the scoop buffer. */
+ rs_trace("got %.0f bytes direct from scoop", (double) len);
+ *ptr = job->scoop_next;
+ return RS_DONE;
+ } else if (job->scoop_avail) {
+ /* We have some data in the scoop, but not enough to
+ * satisfy the request. */
+ rs_trace("data is present in the scoop and must be used");
+ rs_scoop_input(job, len);
+
+ if (job->scoop_avail < len) {
+ rs_trace("still have only %.0f bytes in scoop",
+ (double) job->scoop_avail);
+ return RS_BLOCKED;
+ } else {
+ rs_trace("scoop now has %.0f bytes, this is enough",
+ (double) job->scoop_avail);
+ *ptr = job->scoop_next;
+ return RS_DONE;
+ }
+ } else if (stream->avail_in >= len) {
+ /* There's enough data in the stream's input */
+ *ptr = stream->next_in;
+ rs_trace("got %.0f bytes from input buffer", (double) len);
+ return RS_DONE;
+ } else if (stream->avail_in > 0) {
+ /* Nothing was queued before, but we don't have enough
+ * data to satisfy the request. So queue what little
+ * we have, and try again next time. */
+ rs_trace("couldn't satisfy request for %.0f, scooping %.0f bytes",
+ (double) len, (double) job->scoop_avail);
+ rs_scoop_input(job, len);
+ return RS_BLOCKED;
+ } else if (stream->eof_in) {
+ /* Nothing is queued before, and nothing is in the input
+ * buffer at the moment. */
+ rs_trace("reached end of input stream");
+ return RS_INPUT_ENDED;
+ } else {
+ /* Nothing queued at the moment. */
+ rs_trace("blocked with no data in scoop or input buffer");
+ return RS_BLOCKED;
+ }
+}
+
+
+
+/**
+ * Read LEN bytes if possible, and remove them from the input scoop.
+ * If there's not enough data yet, return RS_BLOCKED.
+ *
+ * \param ptr will be updated to point to a read-only buffer holding
+ * the data, if enough is available.
+ *
+ * \return RS_DONE if all the data was available, RS_BLOCKED if it's
+ * not there.
+ */
+rs_result rs_scoop_read(rs_job_t *job, size_t len, void **ptr)
+{
+ rs_result result;
+
+ result = rs_scoop_readahead(job, len, ptr);
+ if (result == RS_DONE)
+ rs_scoop_advance(job, len);
+
+ return result;
+}
+
+
+
+/*
+ * Read whatever remains in the input stream, assuming that it runs up
+ * to the end of the file. Set LEN appropriately.
+ */
+rs_result rs_scoop_read_rest(rs_job_t *job, size_t *len, void **ptr)
+{
+ rs_buffers_t *stream = job->stream;
+
+ *len = job->scoop_avail + stream->avail_in;
+
+ return rs_scoop_read(job, *len, ptr);
+}
+
+
+
+/**
+ * Return the total number of bytes available including the scoop and input
+ * buffer.
+ */
+size_t rs_scoop_total_avail(rs_job_t *job)
+{
+ return job->scoop_avail + job->stream->avail_in;
+}
diff --git a/rsync/search.c b/rsync/search.c
new file mode 100644
index 0000000..3e0c5e2
--- a/dev/null
+++ b/rsync/search.c
@@ -0,0 +1,162 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
+ * This file contains code for searching the sumset for matching
+ * values.
+ */
+
+/*
+ * TODO: The common case is that the next block in both streams
+ * match. Can we make that a bit faster at all? We'd need to perhaps
+ * add a link forward between blocks in the sum_struct corresponding
+ * to the order they're found in the input; then before doing a search
+ * we can just check that pointer.
+ */
+
+#include <config_rsync.h>
+
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "trace.h"
+#include "util.h"
+#include "sumset.h"
+#include "search.h"
+#include "checksum.h"
+
+
+#define TABLESIZE (1<<16)
+#define NULL_TAG (-1)
+
+
+#define gettag2(s1,s2) (((s1) + (s2)) & 0xFFFF)
+#define gettag(sum) gettag2((sum)&0xFFFF,(sum)>>16)
+
+
+static int
+rs_compare_targets(rs_target_t const *t1, rs_target_t const *t2)
+{
+ return ((int) t1->t - (int) t2->t);
+}
+
+
+rs_result
+rs_build_hash_table(rs_signature_t * sums)
+{
+ int i;
+
+ sums->tag_table = calloc(TABLESIZE, sizeof sums->tag_table[0]);
+ if (!sums->tag_table)
+ return RS_MEM_ERROR;
+
+ if (sums->count > 0) {
+ sums->targets = calloc(sums->count, sizeof(rs_target_t));
+ if (!sums->targets)
+ return RS_MEM_ERROR;
+
+ for (i = 0; i < sums->count; i++) {
+ sums->targets[i].i = i;
+ sums->targets[i].t = gettag(sums->block_sigs[i].weak_sum);
+ }
+
+ /* FIXME: Perhaps if this operating system has comparison_fn_t
+ * like GNU, then use it in the cast. But really does anyone
+ * care? */
+ qsort(sums->targets, sums->count,
+ sizeof(sums->targets[0]),
+ (int (*)(const void *, const void *)) rs_compare_targets);
+ }
+
+ for (i = 0; i < TABLESIZE; i++)
+ sums->tag_table[i] = NULL_TAG;
+
+ for (i = sums->count - 1; i >= 0; i--) {
+ sums->tag_table[sums->targets[i].t] = i;
+ }
+
+ rs_trace("done");
+ return RS_DONE;
+}
+
+
+
+/*
+ * See if there is a match for the specified block INBUF..BLOCK_LEN in
+ * the checksum set, using precalculated WEAK_SUM.
+ *
+ * If we don't find a match on the weak checksum, then we just give
+ * up. If we do find a weak match, then we proceed to calculate the
+ * strong checksum for the current block, and see if it will match
+ * anything.
+ */
+int
+rs_search_for_block(rs_weak_sum_t weak_sum,
+ char const *inbuf, size_t block_len,
+ rs_signature_t const *sig, rs_stats_t * stats,
+ rs_long_t * match_where)
+{
+ int hash_tag = gettag(weak_sum);
+ int j = sig->tag_table[hash_tag];
+ rs_strong_sum_t strong_sum;
+ int got_strong = 0;
+
+ if (j == NULL_TAG) {
+ return 0;
+ }
+
+ for (; j < sig->count && sig->targets[j].t == hash_tag; j++) {
+ int i = sig->targets[j].i;
+ int token;
+
+ if (weak_sum != sig->block_sigs[i].weak_sum)
+ continue;
+
+ token = sig->block_sigs[i].i;
+
+ rs_trace("found weak match for %08x in token %d", weak_sum, token);
+
+ if (!got_strong) {
+ rs_calc_strong_sum(inbuf, block_len, &strong_sum);
+ got_strong = 1;
+ }
+
+ /* FIXME: Use correct dynamic sum length! */
+ if (memcmp(strong_sum, sig->block_sigs[i].strong_sum,
+ sig->strong_sum_len) == 0) {
+ /* XXX: This is a remnant of rsync: token number 1 is the
+ * block at offset 0. It would be good to clear this
+ * up. */
+ *match_where = (token - 1) * sig->block_len;
+ return 1;
+ } else {
+ rs_trace("this was a false positive, the strong sig doesn't match");
+ stats->false_matches++;
+ }
+ }
+
+ return 0;
+}
diff --git a/rsync/search.h b/rsync/search.h
new file mode 100644
index 0000000..a1d0cd8
--- a/dev/null
+++ b/rsync/search.h
@@ -0,0 +1,29 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+int
+rs_search_for_block(rs_weak_sum_t weak_sum,
+ char const *inbuf, size_t block_len,
+ rs_signature_t const *sums, rs_stats_t * stats,
+ rs_long_t * match_where);
+
diff --git a/rsync/snprintf.c b/rsync/snprintf.c
new file mode 100644
index 0000000..348ef2d
--- a/dev/null
+++ b/rsync/snprintf.c
@@ -0,0 +1,822 @@
+/* $Id$ */
+
+/*
+ * Copyright Patrick Powell 1995
+ * This code is based on code written by Patrick Powell (papowell@astart.com)
+ * It may be used for any purpose as long as this notice remains intact
+ * on all source code distributions
+ */
+
+/**************************************************************
+ * Original:
+ * Patrick Powell Tue Apr 11 09:48:21 PDT 1995
+ * A bombproof version of doprnt (dopr) included.
+ * Sigh. This sort of thing is always nasty do deal with. Note that
+ * the version here does not include floating point...
+ *
+ * snprintf() is used instead of sprintf() as it does limit checks
+ * for string length. This covers a nasty loophole.
+ *
+ * The other functions are there to prevent NULL pointers from
+ * causing nast effects.
+ *
+ * More Recently:
+ * Brandon Long <blong@fiction.net> 9/15/96 for mutt 0.43
+ * This was ugly. It is still ugly. I opted out of floating point
+ * numbers, but the formatter understands just about everything
+ * from the normal C string format, at least as far as I can tell from
+ * the Solaris 2.5 printf(3S) man page.
+ *
+ * Brandon Long <blong@fiction.net> 10/22/97 for mutt 0.87.1
+ * Ok, added some minimal floating point support, which means this
+ * probably requires libm on most operating systems. Don't yet
+ * support the exponent (e,E) and sigfig (g,G). Also, fmtint()
+ * was pretty badly broken, it just wasn't being exercised in ways
+ * which showed it, so that's been fixed. Also, formated the code
+ * to mutt conventions, and removed dead code left over from the
+ * original. Also, there is now a builtin-test, just compile with:
+ * gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm
+ * and run snprintf for results.
+ *
+ * Thomas Roessler <roessler@guug.de> 01/27/98 for mutt 0.89i
+ * The PGP code was using unsigned hexadecimal formats.
+ * Unfortunately, unsigned formats simply didn't work.
+ *
+ * Michael Elkins <me@cs.hmc.edu> 03/05/98 for mutt 0.90.8
+ * The original code assumed that both snprintf() and vsnprintf() were
+ * missing. Some systems only have snprintf() but not vsnprintf(), so
+ * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF.
+ *
+ * Andrew Tridgell <tridge@samba.org> Oct 1998
+ * fixed handling of %.0f
+ * added test for HAVE_LONG_DOUBLE
+ *
+ **************************************************************/
+
+#include <config_rsync.h>
+
+#include <string.h>
+# include <ctype.h>
+#include <sys/types.h>
+
+#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
+
+/* Define this as a fall through, HAVE_STDARG_H is probably already set */
+
+#define HAVE_VARARGS_H
+
+/* varargs declarations: */
+
+#if defined(HAVE_STDARG_H)
+# include <stdarg.h>
+# define HAVE_STDARGS /* let's hope that works everywhere (mj) */
+# define VA_LOCAL_DECL va_list ap
+# define VA_START(f) va_start(ap, f)
+# define VA_SHIFT(v,t) ; /* no-op for ANSI */
+# define VA_END va_end(ap)
+#else
+# if defined(HAVE_VARARGS_H)
+# include <varargs.h>
+# undef HAVE_STDARGS
+# define VA_LOCAL_DECL va_list ap
+# define VA_START(f) va_start(ap) /* f is ignored! */
+# define VA_SHIFT(v,t) v = va_arg(ap,t)
+# define VA_END va_end(ap)
+# else
+/*XX ** NO VARARGS ** XX*/
+# endif
+#endif
+
+#ifdef HAVE_LONG_DOUBLE
+#define LDOUBLE long double
+#else
+#define LDOUBLE double
+#endif
+
+/*int snprintf (char *str, size_t count, const char *fmt, ...);*/
+/*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/
+
+static void dopr (char *buffer, size_t maxlen, const char *format,
+ va_list args);
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
+ char *value, int flags, int min, int max);
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
+ long value, int base, int min, int max, int flags);
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
+ LDOUBLE fvalue, int min, int max, int flags);
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
+
+/*
+ * dopr(): poor man's version of doprintf
+ */
+
+/* format read states */
+#define DP_S_DEFAULT 0
+#define DP_S_FLAGS 1
+#define DP_S_MIN 2
+#define DP_S_DOT 3
+#define DP_S_MAX 4
+#define DP_S_MOD 5
+#define DP_S_CONV 6
+#define DP_S_DONE 7
+
+/* format flags - Bits */
+#define DP_F_MINUS (1 << 0)
+#define DP_F_PLUS (1 << 1)
+#define DP_F_SPACE (1 << 2)
+#define DP_F_NUM (1 << 3)
+#define DP_F_ZERO (1 << 4)
+#define DP_F_UP (1 << 5)
+#define DP_F_UNSIGNED (1 << 6)
+
+/* Conversion Flags */
+#define DP_C_SHORT 1
+#define DP_C_LONG 2
+#define DP_C_LDOUBLE 3
+
+#define char_to_int(p) (p - '0')
+#define MAX(p,q) ((p >= q) ? p : q)
+
+static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
+{
+ char ch;
+ long value;
+ LDOUBLE fvalue;
+ char *strvalue;
+ int min;
+ int max;
+ int state;
+ int flags;
+ int cflags;
+ size_t currlen;
+
+ state = DP_S_DEFAULT;
+ currlen = flags = cflags = min = 0;
+ max = -1;
+ ch = *format++;
+
+ while (state != DP_S_DONE)
+ {
+ if ((ch == '\0') || (currlen >= maxlen))
+ state = DP_S_DONE;
+
+ switch(state)
+ {
+ case DP_S_DEFAULT:
+ if (ch == '%')
+ state = DP_S_FLAGS;
+ else
+ dopr_outch (buffer, &currlen, maxlen, ch);
+ ch = *format++;
+ break;
+ case DP_S_FLAGS:
+ switch (ch)
+ {
+ case '-':
+ flags |= DP_F_MINUS;
+ ch = *format++;
+ break;
+ case '+':
+ flags |= DP_F_PLUS;
+ ch = *format++;
+ break;
+ case ' ':
+ flags |= DP_F_SPACE;
+ ch = *format++;
+ break;
+ case '#':
+ flags |= DP_F_NUM;
+ ch = *format++;
+ break;
+ case '0':
+ flags |= DP_F_ZERO;
+ ch = *format++;
+ break;
+ default:
+ state = DP_S_MIN;
+ break;
+ }
+ break;
+ case DP_S_MIN:
+ if (isdigit((unsigned char)ch))
+ {
+ min = 10*min + char_to_int (ch);
+ ch = *format++;
+ }
+ else if (ch == '*')
+ {
+ min = va_arg (args, int);
+ ch = *format++;
+ state = DP_S_DOT;
+ }
+ else
+ state = DP_S_DOT;
+ break;
+ case DP_S_DOT:
+ if (ch == '.')
+ {
+ state = DP_S_MAX;
+ ch = *format++;
+ }
+ else
+ state = DP_S_MOD;
+ break;
+ case DP_S_MAX:
+ if (isdigit((unsigned char)ch))
+ {
+ if (max < 0)
+ max = 0;
+ max = 10*max + char_to_int (ch);
+ ch = *format++;
+ }
+ else if (ch == '*')
+ {
+ max = va_arg (args, int);
+ ch = *format++;
+ state = DP_S_MOD;
+ }
+ else
+ state = DP_S_MOD;
+ break;
+ case DP_S_MOD:
+ /* Currently, we don't support Long Long, bummer */
+ switch (ch)
+ {
+ case 'h':
+ cflags = DP_C_SHORT;
+ ch = *format++;
+ break;
+ case 'l':
+ cflags = DP_C_LONG;
+ ch = *format++;
+ break;
+ case 'L':
+ cflags = DP_C_LDOUBLE;
+ ch = *format++;
+ break;
+ default:
+ break;
+ }
+ state = DP_S_CONV;
+ break;
+ case DP_S_CONV:
+ switch (ch)
+ {
+ case 'd':
+ case 'i':
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, short int);
+ else if (cflags == DP_C_LONG)
+ value = va_arg (args, long int);
+ else
+ value = va_arg (args, int);
+ fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+ break;
+ case 'o':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = (long)va_arg (args, unsigned long int);
+ else
+ value = (long)va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
+ break;
+ case 'u':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = (long)va_arg (args, unsigned long int);
+ else
+ value = (long)va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+ break;
+ case 'X':
+ flags |= DP_F_UP;
+ case 'x':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = (long)va_arg (args, unsigned long int);
+ else
+ value = (long)va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
+ break;
+ case 'f':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, LDOUBLE);
+ else
+ fvalue = va_arg (args, double);
+ /* um, floating point? */
+ fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
+ break;
+ case 'E':
+ flags |= DP_F_UP;
+ case 'e':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, LDOUBLE);
+ else
+ fvalue = va_arg (args, double);
+ break;
+ case 'G':
+ flags |= DP_F_UP;
+ case 'g':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, LDOUBLE);
+ else
+ fvalue = va_arg (args, double);
+ break;
+ case 'c':
+ dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
+ break;
+ case 's':
+ strvalue = va_arg (args, char *);
+ if (max < 0)
+ max = maxlen; /* ie, no max */
+ fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
+ break;
+ case 'p':
+ strvalue = va_arg (args, void *);
+ fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
+ break;
+ case 'n':
+ if (cflags == DP_C_SHORT)
+ {
+ short int *num;
+ num = va_arg (args, short int *);
+ *num = currlen;
+ }
+ else if (cflags == DP_C_LONG)
+ {
+ long int *num;
+ num = va_arg (args, long int *);
+ *num = (long int)currlen;
+ }
+ else
+ {
+ int *num;
+ num = va_arg (args, int *);
+ *num = currlen;
+ }
+ break;
+ case '%':
+ dopr_outch (buffer, &currlen, maxlen, ch);
+ break;
+ case 'w':
+ /* not supported yet, treat as next char */
+ ch = *format++;
+ break;
+ default:
+ /* Unknown, skip */
+ break;
+ }
+ ch = *format++;
+ state = DP_S_DEFAULT;
+ flags = cflags = min = 0;
+ max = -1;
+ break;
+ case DP_S_DONE:
+ break;
+ default:
+ /* hmm? */
+ break; /* some picky compilers need this */
+ }
+ }
+ if (currlen < maxlen - 1)
+ buffer[currlen] = '\0';
+ else
+ buffer[maxlen - 1] = '\0';
+}
+
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
+ char *value, int flags, int min, int max)
+{
+ int padlen, strln; /* amount to pad */
+ int cnt = 0;
+
+ if (value == 0)
+ {
+ value = "<NULL>";
+ }
+
+ for (strln = 0; value[strln]; ++strln); /* strlen */
+ padlen = min - strln;
+ if (padlen < 0)
+ padlen = 0;
+ if (flags & DP_F_MINUS)
+ padlen = -padlen; /* Left Justify */
+
+ while ((padlen > 0) && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --padlen;
+ ++cnt;
+ }
+ while (*value && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, *value++);
+ ++cnt;
+ }
+ while ((padlen < 0) && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++padlen;
+ ++cnt;
+ }
+}
+
+/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
+
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
+ long value, int base, int min, int max, int flags)
+{
+ int signvalue = 0;
+ unsigned long uvalue;
+ char convert[20];
+ int place = 0;
+ int spadlen = 0; /* amount to space pad */
+ int zpadlen = 0; /* amount to zero pad */
+ int caps = 0;
+
+ if (max < 0)
+ max = 0;
+
+ uvalue = value;
+
+ if(!(flags & DP_F_UNSIGNED))
+ {
+ if( value < 0 ) {
+ signvalue = '-';
+ uvalue = -value;
+ }
+ else
+ if (flags & DP_F_PLUS) /* Do a sign (+/i) */
+ signvalue = '+';
+ else
+ if (flags & DP_F_SPACE)
+ signvalue = ' ';
+ }
+
+ if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+
+ do {
+ convert[place++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")
+ [uvalue % (unsigned)base ];
+ uvalue = (uvalue / (unsigned)base );
+ } while(uvalue && (place < 20));
+ if (place == 20) place--;
+ convert[place] = 0;
+
+ zpadlen = max - place;
+ spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);
+ if (zpadlen < 0) zpadlen = 0;
+ if (spadlen < 0) spadlen = 0;
+ if (flags & DP_F_ZERO)
+ {
+ zpadlen = MAX(zpadlen, spadlen);
+ spadlen = 0;
+ }
+ if (flags & DP_F_MINUS)
+ spadlen = -spadlen; /* Left Justifty */
+
+#ifdef DEBUG_SNPRINTF
+ printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
+ zpadlen, spadlen, min, max, place);
+#endif
+
+ /* Spaces */
+ while (spadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --spadlen;
+ }
+
+ /* Sign */
+ if (signvalue)
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+
+ /* Zeros */
+ if (zpadlen > 0)
+ {
+ while (zpadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --zpadlen;
+ }
+ }
+
+ /* Digits */
+ while (place > 0)
+ dopr_outch (buffer, currlen, maxlen, convert[--place]);
+
+ /* Left Justified spaces */
+ while (spadlen < 0) {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++spadlen;
+ }
+}
+
+static LDOUBLE abs_val (LDOUBLE value)
+{
+ LDOUBLE result = value;
+
+ if (value < 0)
+ result = -value;
+
+ return result;
+}
+
+static LDOUBLE pow10 (int exp)
+{
+ LDOUBLE result = 1;
+
+ while (exp)
+ {
+ result *= 10;
+ exp--;
+ }
+
+ return result;
+}
+
+static long round (LDOUBLE value)
+{
+ long intpart;
+
+ intpart = (long)value;
+ value = value - intpart;
+ if (value >= 0.5)
+ intpart++;
+
+ return intpart;
+}
+
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
+ LDOUBLE fvalue, int min, int max, int flags)
+{
+ int signvalue = 0;
+ LDOUBLE ufvalue;
+ char iconvert[20];
+ char fconvert[20];
+ int iplace = 0;
+ int fplace = 0;
+ int padlen = 0; /* amount to pad */
+ int zpadlen = 0;
+ int caps = 0;
+ long intpart;
+ long fracpart;
+
+ /*
+ * AIX manpage says the default is 0, but Solaris says the default
+ * is 6, and sprintf on AIX defaults to 6
+ */
+ if (max < 0)
+ max = 6;
+
+ ufvalue = abs_val (fvalue);
+
+ if (fvalue < 0)
+ signvalue = '-';
+ else
+ if (flags & DP_F_PLUS) /* Do a sign (+/i) */
+ signvalue = '+';
+ else
+ if (flags & DP_F_SPACE)
+ signvalue = ' ';
+
+#if 0
+ if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+#endif
+
+ intpart = (long)ufvalue;
+
+ /*
+ * Sorry, we only support 9 digits past the decimal because of our
+ * conversion method
+ */
+ if (max > 9)
+ max = 9;
+
+ /* We "cheat" by converting the fractional part to integer by
+ * multiplying by a factor of 10
+ */
+ fracpart = round ((pow10 (max)) * (ufvalue - intpart));
+
+ if (fracpart >= pow10 (max))
+ {
+ intpart++;
+ fracpart -= pow10 (max);
+ }
+
+#ifdef DEBUG_SNPRINTF
+ printf("fmtfp: %g %d.%d min=%d max=%d\n",
+ (double)fvalue, intpart, fracpart, min, max);
+#endif
+
+ /* Convert integer part */
+ do {
+ iconvert[iplace++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10];
+ intpart = (intpart / 10);
+ } while(intpart && (iplace < 20));
+ if (iplace == 20) iplace--;
+ iconvert[iplace] = 0;
+
+ /* Convert fractional part */
+ do {
+ fconvert[fplace++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10];
+ fracpart = (fracpart / 10);
+ } while(fracpart && (fplace < 20));
+ if (fplace == 20) fplace--;
+ fconvert[fplace] = 0;
+
+ /* -1 for decimal point, another -1 if we are printing a sign */
+ padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
+ zpadlen = max - fplace;
+ if (zpadlen < 0)
+ zpadlen = 0;
+ if (padlen < 0)
+ padlen = 0;
+ if (flags & DP_F_MINUS)
+ padlen = -padlen; /* Left Justifty */
+
+ if ((flags & DP_F_ZERO) && (padlen > 0))
+ {
+ if (signvalue)
+ {
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+ --padlen;
+ signvalue = 0;
+ }
+ while (padlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --padlen;
+ }
+ }
+ while (padlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --padlen;
+ }
+ if (signvalue)
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+
+ while (iplace > 0)
+ dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
+
+
+#ifdef DEBUG_SNPRINTF
+ printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
+#endif
+
+ /*
+ * Decimal point. This should probably use locale to find the correct
+ * char to print out.
+ */
+ if (max > 0) {
+ dopr_outch (buffer, currlen, maxlen, '.');
+
+ while (fplace > 0)
+ dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
+ }
+
+ while (zpadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --zpadlen;
+ }
+
+ while (padlen < 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++padlen;
+ }
+}
+
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
+{
+ if (*currlen < maxlen)
+ buffer[(*currlen)++] = c;
+}
+#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
+
+#ifndef HAVE_VSNPRINTF
+ int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
+{
+ str[0] = 0;
+ dopr(str, count, fmt, args);
+ return(strlen(str));
+}
+#endif /* !HAVE_VSNPRINTF */
+
+#ifndef HAVE_SNPRINTF
+/* VARARGS3 */
+#ifdef HAVE_STDARGS
+ int snprintf (char *str,size_t count,const char *fmt,...)
+#else
+ int snprintf (va_alist) va_dcl
+#endif
+{
+#ifndef HAVE_STDARGS
+ char *str;
+ size_t count;
+ char *fmt;
+#endif
+ VA_LOCAL_DECL;
+
+ VA_START (fmt);
+ VA_SHIFT (str, char *);
+ VA_SHIFT (count, size_t );
+ VA_SHIFT (fmt, char *);
+ (void) vsnprintf(str, count, fmt, ap);
+ VA_END;
+ return(strlen(str));
+}
+
+
+#else
+ /* keep compilers happy about empty files */
+ void dummy_snprintf(void) {}
+#endif /* !HAVE_SNPRINTF */
+
+#ifdef TEST_SNPRINTF
+#ifndef LONG_STRING
+#define LONG_STRING 1024
+#endif
+ int main (void)
+{
+ char buf1[LONG_STRING];
+ char buf2[LONG_STRING];
+ char *fp_fmt[] = {
+ "%-1.5f",
+ "%1.5f",
+ "%123.9f",
+ "%10.5f",
+ "% 10.5f",
+ "%+22.9f",
+ "%+4.9f",
+ "%01.3f",
+ "%4f",
+ "%3.1f",
+ "%3.2f",
+ "%.0f",
+ "%.1f",
+ NULL
+ };
+ double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996,
+ 0.9996, 1.996, 4.136, 0};
+ char *int_fmt[] = {
+ "%-1.5d",
+ "%1.5d",
+ "%123.9d",
+ "%5.5d",
+ "%10.5d",
+ "% 10.5d",
+ "%+22.33d",
+ "%01.3d",
+ "%4d",
+ NULL
+ };
+ long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
+ int x, y;
+ int fail = 0;
+ int num = 0;
+
+ printf ("Testing snprintf format codes against system sprintf...\n");
+
+ for (x = 0; fp_fmt[x] != NULL ; x++)
+ for (y = 0; fp_nums[y] != 0 ; y++)
+ {
+ snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]);
+ sprintf (buf2, fp_fmt[x], fp_nums[y]);
+ if (strcmp (buf1, buf2))
+ {
+ printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
+ fp_fmt[x], buf1, buf2);
+ fail++;
+ }
+ num++;
+ }
+
+ for (x = 0; int_fmt[x] != NULL ; x++)
+ for (y = 0; int_nums[y] != 0 ; y++)
+ {
+ snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]);
+ sprintf (buf2, int_fmt[x], int_nums[y]);
+ if (strcmp (buf1, buf2))
+ {
+ printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
+ int_fmt[x], buf1, buf2);
+ fail++;
+ }
+ num++;
+ }
+ printf ("%d tests failed out of %d.\n", fail, num);
+}
+#endif /* SNPRINTF_TEST */
+
diff --git a/rsync/stats.c b/rsync/stats.c
new file mode 100644
index 0000000..5767d52
--- a/dev/null
+++ b/rsync/stats.c
@@ -0,0 +1,114 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/file.h>
+#include <string.h>
+
+#include "rsync.h"
+#include "trace.h"
+
+/*
+ * TODO: Other things to show in statistics:
+ *
+ * Number of input and output bytes.
+ *
+ * Number of times we blocked waiting for input or output.
+ *
+ * Number of blocks.
+ */
+
+int
+rs_log_stats(rs_stats_t const *stats)
+{
+ char buf[1000];
+
+ rs_format_stats(stats, buf, sizeof buf - 1);
+ rs_log(RS_LOG_INFO|RS_LOG_NONAME, "%s", buf);
+ return 0;
+}
+
+
+
+/**
+ * \brief Return a human-readable representation of statistics.
+ *
+ * The string is truncated if it does not fit. 100 characters should
+ * be sufficient space.
+ *
+ * \param stats Statistics from an encoding or decoding operation.
+ *
+ * \param buf Buffer to receive result.
+ * \param size Size of buffer.
+ * \return buf
+ */
+char *
+rs_format_stats(rs_stats_t const * stats,
+ char *buf, size_t size)
+{
+ char const *op = stats->op;
+ int len;
+
+ if (!op)
+ op = "noop";
+
+ len = snprintf(buf, size, "%s statistics: ", op);
+
+ if (stats->lit_cmds) {
+ len += snprintf(buf+len, size-len,
+ "literal[%d cmds, %.0f bytes, %.0f cmdbytes] ",
+ stats->lit_cmds,
+ (double) stats->lit_bytes,
+ (double) stats->lit_cmdbytes);
+ }
+
+ if (stats->sig_cmds) {
+ len += snprintf(buf+len, size-len,
+ "in-place-signature[%.0f cmds, %.0f bytes] ",
+ (double) stats->sig_cmds,
+ (double) stats->sig_bytes);
+ }
+
+ if (stats->copy_cmds || stats->false_matches) {
+ len += snprintf(buf+len, size-len,
+ "copy[%.0f cmds, %.0f bytes, %.0f false, %.0f cmdbytes]",
+ (double) stats->copy_cmds,
+ (double) stats->copy_bytes,
+ (double) stats->false_matches,
+ (double) stats->copy_cmdbytes);
+ }
+
+
+ if (stats->sig_blocks) {
+ len += snprintf(buf+len, size-len,
+ "signature[%.0f blocks, %.0f bytes per block]",
+ (double) stats->sig_blocks,
+ (double) stats->block_len);
+ }
+
+ return buf;
+}
diff --git a/rsync/stream.c b/rsync/stream.c
new file mode 100644
index 0000000..d20d866
--- a/dev/null
+++ b/rsync/stream.c
@@ -0,0 +1,155 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- dynamic caching and delta update in HTTP
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ * Programming languages should be designed not
+ * by piling feature on top of feature, but by
+ * removing the weaknesses and restrictions that
+ * make additional features appear necessary.
+ * -- Revised^5 Report on Scheme
+ */
+
+
+/*
+ * OK, so I'll admit IO here is a little complex. The most important
+ * player here is the stream, which is an object for managing filter
+ * operations. It has both input and output sides, both of which is
+ * just a (pointer,len) pair into a buffer provided by the client.
+ * The code controlling the stream handles however much data it wants,
+ * and the client provides or accepts however much is convenient.
+ *
+ * At the same time as being friendly to the client, we also try to be
+ * very friendly to the internal code. It wants to be able to ask for
+ * arbitrary amounts of input or output and get it without having to
+ * keep track of partial completion. So there are functions which
+ * either complete, or queue whatever was not sent and return
+ * RS_BLOCKED.
+ *
+ * The output buffer is a little more clever than simply a data
+ * buffer. Instead it knows that we can send either literal data, or
+ * data copied through from the input of the stream.
+ *
+ * In buf.c you will find functions that then map buffers onto stdio
+ * files.
+ *
+ * So on return from an encoding function, either the input or the
+ * output or possibly both will have no more bytes available.
+ */
+
+/*
+ * Manage librsync streams of IO. See scoop.c and tube.c for related
+ * code for input and output respectively.
+ *
+ * librsync never does IO or memory allocation, but relies on the
+ * caller. This is very nice for integration, but means that we have
+ * to be fairly flexible as to when we can `read' or `write' stuff
+ * internally.
+ *
+ * librsync basically does two types of IO. It reads network integers
+ * of various lengths which encode command and control information
+ * such as versions and signatures. It also does bulk data transfer.
+ *
+ * IO of network integers is internally buffered, because higher
+ * levels of the code need to see them transmitted atomically: it's no
+ * good to read half of a uint32. So there is a small and fixed
+ * length internal buffer which accumulates these. Unlike previous
+ * versions of the library, we don't require that the caller hold the
+ * start until the whole thing has arrived, which guarantees that we
+ * can always make progress.
+ *
+ * On each call into a stream iterator, it should begin by trying to
+ * flush output. This may well use up all the remaining stream space,
+ * in which case nothing else can be done.
+ */
+
+/* TODO: Return errors rather than aborting if something goes wrong. */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "stream.h"
+#include "util.h"
+#include "trace.h"
+
+static const int RS_STREAM_DOGTAG = 2001125;
+
+
+/**
+ * \brief Copy up to \p max_len bytes from input of \b stream to its output.
+ *
+ * Return the number of bytes actually copied, which may be less than
+ * LEN if there is not enough space in one or the other stream.
+ *
+ * This always does the copy immediately. Most functions should call
+ * rs_tube_copy() to cause the copy to happen gradually as space
+ * becomes available.
+ */
+int rs_buffers_copy(rs_buffers_t *stream, int max_len)
+{
+ int len = max_len;
+
+ assert(len > 0);
+
+ if ((unsigned) len > stream->avail_in) {
+ rs_trace("copy limited to %d available input bytes",
+ stream->avail_in);
+ len = stream->avail_in;
+ }
+
+
+ if ((unsigned) len > stream->avail_out) {
+ rs_trace("copy limited to %d available output bytes",
+ stream->avail_out);
+ len = stream->avail_out;
+ }
+
+ if (!len)
+ return 0;
+/* rs_trace("stream copied chunk of %d bytes", len); */
+
+ memcpy(stream->next_out, stream->next_in, len);
+
+ stream->next_out += len;
+ stream->avail_out -= len;
+
+ stream->next_in += len;
+ stream->avail_in -= len;
+
+ return len;
+}
+
+
+/**
+ * Whenever a stream processing function exits, it should have done so
+ * because it has either consumed all the input or has filled the
+ * output buffer. This function checks that simple postcondition.
+ */
+void rs_buffers_check_exit(rs_buffers_t const *stream)
+{
+ assert(stream->avail_in == 0 || stream->avail_out == 0);
+}
diff --git a/rsync/stream.h b/rsync/stream.h
new file mode 100644
index 0000000..e2d0da8
--- a/dev/null
+++ b/rsync/stream.h
@@ -0,0 +1,46 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /* Two wars in a lifetime bear hard on the little places.
+ * In winter when storms come rushing out of the dark,
+ * And the bay boils like a cauldron of sharks,
+ * The old remember the trenches at Paschendale
+ * And sons who died on the Burma Railway. */
+
+
+int rs_buffers_is_empty(rs_buffers_t *stream);
+int rs_buffers_copy(rs_buffers_t *stream, int len);
+
+int rs_tube_catchup(rs_job_t *);
+void rs_tube_write(rs_job_t *, void const *buf, size_t len);
+void rs_tube_copy(rs_job_t *, int len);
+int rs_tube_is_idle(rs_job_t const *);
+void rs_check_tube(rs_job_t *);
+
+void rs_buffers_check_exit(rs_buffers_t const *);
+
+void rs_scoop_advance(rs_job_t *, size_t len);
+rs_result rs_scoop_readahead(rs_job_t *, size_t len, void **ptr);
+rs_result rs_scoop_read(rs_job_t *, size_t len, void **ptr);
+rs_result rs_scoop_read_rest(rs_job_t *, size_t *len, void **ptr);
+size_t rs_scoop_total_avail(rs_job_t *job);
+void rs_scoop_input(rs_job_t *job, size_t len);
diff --git a/rsync/sumset.c b/rsync/sumset.c
new file mode 100644
index 0000000..c03aeb4
--- a/dev/null
+++ b/rsync/sumset.c
@@ -0,0 +1,83 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "sumset.h"
+#include "util.h"
+#include "trace.h"
+
+
+/**
+ * Deep deallocation of checksums.
+ */
+void
+rs_free_sumset(rs_signature_t * psums)
+{
+ if (psums->block_sigs)
+ free(psums->block_sigs);
+
+ if (psums->tag_table)
+ free(psums->tag_table);
+
+ if (psums->targets)
+ free(psums->targets);
+
+ rs_bzero(psums, sizeof *psums);
+ free(psums);
+}
+
+
+
+/**
+ * Dump signatures to the log.
+ */
+void
+rs_sumset_dump(rs_signature_t const *sums)
+{
+ int i;
+ char strong_hex[RS_MD4_LENGTH * 3];
+
+ rs_log(RS_LOG_INFO,
+ "sumset info: block_len=%d, file length=%lu, "
+ "number of chunks=%d, remainder=%d",
+ sums->block_len,
+ (unsigned long) sums->flength, sums->count,
+ sums->remainder);
+
+ for (i = 0; i < sums->count; i++) {
+ rs_hexify(strong_hex, sums->block_sigs[i].strong_sum,
+ sums->strong_sum_len);
+ rs_log(RS_LOG_INFO,
+ "sum %6d: weak=%08x, strong=%s",
+ i, sums->block_sigs[i].weak_sum, strong_hex);
+ }
+}
+
+
+
diff --git a/rsync/sumset.h b/rsync/sumset.h
new file mode 100644
index 0000000..a501b23
--- a/dev/null
+++ b/rsync/sumset.h
@@ -0,0 +1,67 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * TODO: These structures are not terribly useful. Perhaps we need a
+ * splay tree or something that will let us smoothly grow as data is
+ * read in.
+ */
+
+
+/**
+ * \brief Description of the match described by a signature.
+ */
+typedef struct rs_target {
+ unsigned short t;
+ int i;
+} rs_target_t;
+
+typedef struct rs_block_sig rs_block_sig_t;
+
+/*
+ * This structure describes all the sums generated for an instance of
+ * a file. It incorporates some redundancy to make it easier to
+ * search.
+ */
+struct rs_signature {
+ rs_long_t flength; /* total file length */
+ int count; /* how many chunks */
+ int remainder; /* flength % block_length */
+ int block_len; /* block_length */
+ int strong_sum_len;
+ rs_block_sig_t *block_sigs; /* points to info for each chunk */
+ int *tag_table;
+ rs_target_t *targets;
+};
+
+
+/*
+ * All blocks are the same length in the current algorithm except for
+ * the last block which may be short.
+ */
+struct rs_block_sig {
+ int i; /* index of this chunk */
+ rs_weak_sum_t weak_sum; /* simple checksum */
+ rs_strong_sum_t strong_sum; /* checksum */
+};
diff --git a/rsync/trace.c b/rsync/trace.c
new file mode 100644
index 0000000..b7e2b87
--- a/dev/null
+++ b/rsync/trace.c
@@ -0,0 +1,225 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | Finality is death.
+ | Perfection is finality.
+ | Nothing is perfect.
+ | There are lumps in it.
+ */
+
+
+
+/*
+ * TODO: Have a bit set in the log level that says not to include the
+ * function name.
+ */
+
+#include <config_rsync.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/file.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <stdarg.h>
+
+#include "rsync.h"
+#include "util.h"
+#include "trace.h"
+
+
+rs_trace_fn_t *rs_trace_impl = rs_trace_stderr;
+
+int rs_trace_level = RS_LOG_INFO;
+
+#ifdef HAVE_PROGRAM_INVOCATION_NAME
+# define MY_NAME program_invocation_short_name
+#else
+# define MY_NAME "librsync"
+#endif
+
+static void rs_log_va(int level, char const *fn, char const *fmt, va_list va);
+
+#if SIZEOF_SIZE_T > SIZEOF_LONG
+# warning size_t is larger than a long integer, values in trace messages may be wrong
+#endif
+
+
+/**
+ * Log severity strings, if any. Must match ordering in
+ * ::rs_loglevel.
+ */
+static const char *rs_severities[] = {
+ "EMERGENCY! ", "ALERT! ", "CRITICAL! ", "ERROR: ", "Warning: ",
+ "", "", ""
+};
+
+
+
+/**
+ * \brief Set the destination of trace information.
+ *
+ * The callback scheme allows for use within applications that may
+ * have their own particular ways of reporting errors: log files for a
+ * web server, perhaps, and an error dialog for a browser.
+ *
+ * \todo Do we really need such fine-grained control, or just yes/no
+ * tracing?
+ */
+void
+rs_trace_to(rs_trace_fn_t * new_impl)
+{
+ rs_trace_impl = new_impl;
+}
+
+
+/**
+ * Set the least important message severity that will be output.
+ */
+void
+rs_trace_set_level(rs_loglevel level)
+{
+ rs_trace_level = level;
+}
+
+
+static void
+rs_log_va(int flags, char const *fn, char const *fmt, va_list va)
+{
+ int level = flags & RS_LOG_PRIMASK;
+
+ if (rs_trace_impl && level <= rs_trace_level) {
+ char buf[1000];
+ char full_buf[1000];
+
+ vsnprintf(buf, sizeof buf - 1, fmt, va);
+
+ if (flags & RS_LOG_NONAME) {
+ snprintf(full_buf, sizeof full_buf - 1,
+ "%s: %s%s\n",
+ MY_NAME, rs_severities[level], buf);
+ } else {
+ snprintf(full_buf, sizeof full_buf - 1,
+ "%s: %s(%s) %s\n",
+ MY_NAME, rs_severities[level], fn, buf);
+ }
+
+ rs_trace_impl(level, full_buf);
+ }
+}
+
+
+
+/**
+ * Called by a macro, used on platforms where we can't determine the
+ * calling function name.
+ */
+void
+rs_log0_nofn(int level, char const *fmt, ...)
+{
+ va_list va;
+
+ va_start(va, fmt);
+ rs_log_va(level, PACKAGE, fmt, va);
+ va_end(va);
+}
+
+
+/* Called by a macro that prepends the calling function name,
+ * etc. */
+void
+rs_log0(int level, char const *fn, char const *fmt, ...)
+{
+ va_list va;
+
+ va_start(va, fmt);
+ rs_log_va(level, fn, fmt, va);
+ va_end(va);
+}
+
+
+void
+rs_trace_stderr(int UNUSED(level), char const *msg)
+{
+ /* NOTE NO TRAILING NUL */
+ write(STDERR_FILENO, msg, strlen(msg));
+}
+
+
+/* This is called directly if the machine doesn't allow varargs
+ * macros. */
+void
+rs_fatal0(char const *s, ...)
+{
+ va_list va;
+
+ va_start(va, s);
+ rs_log_va(RS_LOG_CRIT, PACKAGE, s, va);
+ va_end(va);
+}
+
+
+/* This is called directly if the machine doesn't allow varargs
+ * macros. */
+void
+rs_error0(char const *s, ...)
+{
+ va_list va;
+
+ va_start(va, s);
+ rs_log_va(RS_LOG_ERR, PACKAGE, s, va);
+ va_end(va);
+}
+
+
+/* This is called directly if the machine doesn't allow varargs
+ * macros. */
+void
+rs_trace0(char const *s, ...)
+{
+ va_list va;
+
+ va_start(va, s);
+ rs_log_va(RS_LOG_DEBUG, PACKAGE, s, va);
+ va_end(va);
+}
+
+
+/**
+ * Return true if the library contains trace code; otherwise false.
+ * If this returns false, then trying to turn trace on will achieve
+ * nothing.
+ */
+int
+rs_supports_trace(void)
+{
+#ifdef DO_RS_TRACE
+ return 1;
+#else
+ return 0;
+#endif /* !DO_RS_TRACE */
+}
+
+
diff --git a/rsync/trace.h b/rsync/trace.h
new file mode 100644
index 0000000..60a6477
--- a/dev/null
+++ b/rsync/trace.h
@@ -0,0 +1,122 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- generate and apply network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/*
+ * TODO: A function like perror that includes strerror output. Apache
+ * does this by adding flags as well as the severity level which say
+ * whether such information should be included.
+ */
+
+
+/*
+ * trace may be turned off.
+ *
+ * error is always on, but you can return and continue in some way
+ *
+ * fatal terminates the whole process
+ */
+
+void rs_fatal0(char const *s, ...);
+void rs_error0(char const *s, ...);
+void rs_trace0(char const *s, ...);
+
+void rs_log0_nofn(int level, char const *fmt, ...);
+
+#ifdef __GNUC__
+
+void rs_log0(int level, char const *fn, char const *fmt, ...)
+ __attribute__ ((format(printf, 3, 4)));
+
+#ifdef DO_RS_TRACE
+# define rs_trace(fmt, arg...) \
+ do { rs_log0(RS_LOG_DEBUG, __FUNCTION__, fmt , ##arg); \
+ } while (0)
+#else
+# define rs_trace(s, str...)
+#endif /* !DO_RS_TRACE */
+
+/*
+ * TODO: Don't assume this is a gcc thing; rather test in autoconf for
+ * support for __FUNCTION__ and varargs macros. One simple way might
+ * just be to try compiling the definition of one of these functions!
+ *
+ * TODO: Also look for the C9X predefined identifier `_function', or
+ * whatever it's called.
+ */
+
+#define rs_log(l, s, str...) do { \
+ rs_log0((l), __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+
+#define rs_error(s, str...) do { \
+ rs_log0(RS_LOG_ERR, __FUNCTION__, (s) , ##str); \
+ } while (0)
+
+
+#define rs_fatal(s, str...) do { \
+ rs_log0(RS_LOG_CRIT, __FUNCTION__, \
+ (s) , ##str); \
+ abort(); \
+ } while (0)
+
+
+#else /************************* ! __GNUC__ */
+
+# define rs_fatal rs_fatal0
+# define rs_error rs_error0
+# define rs_log rs_log0_nofn
+
+# ifdef DO_RS_TRACE
+# define rs_trace rs_trace0
+# endif /* DO_RS_TRACE */
+#endif /* ! __GNUC__ */
+
+
+void rs_log0(int level, char const *fn, char const *fmt, ...);
+
+
+enum {
+ RS_LOG_PRIMASK = 7, /**< Mask to extract priority
+ part. \internal */
+
+ RS_LOG_NONAME = 8 /**< \b Don't show function name in
+ message. */
+};
+
+
+
+/**
+ * \macro rs_trace_enabled()
+ *
+ * Call this before putting too much effort into generating trace
+ * messages.
+ */
+
+extern int rs_trace_level;
+
+#ifdef DO_RS_TRACE
+# define rs_trace_enabled() ((rs_trace_level & RS_LOG_PRIMASK) >= RS_LOG_DEBUG)
+#else
+# define rs_trace_enabled() 0
+#endif
diff --git a/rsync/tube.c b/rsync/tube.c
new file mode 100644
index 0000000..0b82adc
--- a/dev/null
+++ b/rsync/tube.c
@@ -0,0 +1,264 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- dynamic caching and delta update in HTTP
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | Where a calculator on the ENIAC is
+ | equpped with 18,000 vaccuum tubes and
+ | weighs 30 tons, computers in the
+ | future may have only 1,000 vaccuum
+ | tubes and perhaps weigh 1 1/2
+ | tons.
+ | -- Popular Mechanics, March 1949
+ */
+
+
+/* tube: a somewhat elastic but fairly small buffer for data passing
+ * through a stream.
+ *
+ * In most cases the iter can adjust to send just as much data will
+ * fit. In some cases that would be too complicated, because it has
+ * to transmit an integer or something similar. So in that case we
+ * stick whatever won't fit into a small buffer.
+ *
+ * A tube can contain some literal data to go out (typically command
+ * bytes), and also an instruction to copy data from the stream's
+ * input or from some other location. Both literal data and a copy
+ * command can be queued at the same time, but only in that order and
+ * at most one of each. */
+
+
+/*
+ * TODO: As an optimization, write it directly to the stream if
+ * possible. But for simplicity don't do that yet.
+ *
+ * TODO: I think our current copy code will lock up if the application
+ * only ever calls us with either input or output buffers, and not
+ * both. So I guess in that case we might need to copy into some
+ * temporary buffer space, and then back out again later.
+ */
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "rsync.h"
+#include "trace.h"
+#include "util.h"
+#include "job.h"
+#include "stream.h"
+
+
+static void rs_tube_catchup_write(rs_job_t *job)
+{
+ rs_buffers_t *stream = job->stream;
+ int len, remain;
+
+ len = job->write_len;
+ assert(len > 0);
+
+ assert(len > 0);
+ if ((size_t) len > stream->avail_out)
+ len = stream->avail_out;
+
+ if (!stream->avail_out) {
+ rs_trace("no output space available");
+ return;
+ }
+
+ memcpy(stream->next_out, job->write_buf, len);
+ stream->next_out += len;
+ stream->avail_out -= len;
+
+ remain = job->write_len - len;
+ rs_trace("transmitted %d write bytes from tube, "
+ "%d remain to be sent",
+ len, remain);
+
+ if (remain > 0) {
+ /* Still something left in the tube... */
+ memmove(job->write_buf, job->write_buf + len, remain);
+ } else {
+ assert(remain == 0);
+ }
+
+ job->write_len = remain;
+}
+
+
+/**
+ * Execute a copy command, taking data from the scoop.
+ *
+ * \sa rs_tube_catchup_copy()
+ */
+static void
+rs_tube_copy_from_scoop(rs_job_t *job)
+{
+ size_t this_len;
+ rs_buffers_t *stream = job->stream;
+
+ this_len = job->copy_len;
+ if (this_len > job->scoop_avail) {
+ this_len = job->scoop_avail;
+ }
+ if (this_len > stream->avail_out) {
+ this_len = stream->avail_out;
+ }
+
+ memcpy(stream->next_out, job->scoop_next, this_len);
+
+ stream->next_out += this_len;
+ stream->avail_out -= this_len;
+
+ job->scoop_avail -= this_len;
+ job->scoop_next += this_len;
+
+ job->copy_len -= this_len;
+
+ rs_trace("caught up on %ld copied bytes from scoop, %ld remain there, "
+ "%ld remain to be copied",
+ (long) this_len, (long) job->scoop_avail, (long) job->copy_len);
+}
+
+
+
+/**
+ * Catch up on an outstanding copy command.
+ *
+ * Takes data from the scoop, and the input (in that order), and
+ * writes as much as will fit to the output, up to the limit of the
+ * outstanding copy.
+ */
+static void rs_tube_catchup_copy(rs_job_t *job)
+{
+ rs_buffers_t *stream = job->stream;
+
+ assert(job->write_len == 0);
+ assert(job->copy_len > 0);
+
+ if (job->scoop_avail && job->copy_len) {
+ /* there's still some data in the scoop, so we should use that. */
+ rs_tube_copy_from_scoop(job);
+ }
+
+ if (job->copy_len) {
+ size_t this_copy;
+
+ this_copy = rs_buffers_copy(stream, job->copy_len);
+
+ job->copy_len -= this_copy;
+
+ rs_trace("copied %.0f bytes from input buffer, %.0f remain to be copied",
+ (double) this_copy, (double) job->copy_len);
+ }
+}
+
+
+/*
+ * Put whatever will fit from the tube into the output of the stream.
+ * Return RS_DONE if the tube is now empty and ready to accept another
+ * command, RS_BLOCKED if there is still stuff waiting to go out.
+ */
+int rs_tube_catchup(rs_job_t *job)
+{
+ if (job->write_len)
+ rs_tube_catchup_write(job);
+
+ if (job->write_len) {
+ /* there is still write data queued, so we can't send
+ * anything else. */
+ return RS_BLOCKED;
+ }
+
+ if (job->copy_len)
+ rs_tube_catchup_copy(job);
+
+ if (job->copy_len) {
+ if (job->stream->eof_in && !job->stream->avail_in && !job->scoop_avail) {
+ rs_log(RS_LOG_ERR,
+ "reached end of file while copying literal data through buffers");
+ return RS_INPUT_ENDED;
+ }
+
+ return RS_BLOCKED;
+ }
+
+ return RS_DONE;
+}
+
+
+/* Check whether there is data in the tube waiting to go out. So if true
+ * this basically means that the previous command has finished doing all its
+ * output. */
+int rs_tube_is_idle(rs_job_t const *job)
+{
+ return job->write_len == 0 && job->copy_len == 0;
+}
+
+
+/**
+ * Queue up a request to copy through \p len bytes from the input to
+ * the output of the stream.
+ *
+ * The data is copied from the scoop (if there is anything there) or
+ * from the input, on the next call to rs_tube_write().
+ *
+ * We can only accept this request if there is no copy command already
+ * pending.
+ */
+/* TODO: Try to do the copy immediately, and return a result. Then,
+ * people can try to continue if possible. Is this really required?
+ * Callers can just go out and back in again after flushing the
+ * tube. */
+void rs_tube_copy(rs_job_t *job, int len)
+{
+ assert(job->copy_len == 0);
+
+ job->copy_len = len;
+}
+
+
+
+/*
+ * Push some data into the tube for storage. The tube's never
+ * supposed to get very big, so this will just pop loudly if you do
+ * that.
+ *
+ * We can't accept write data if there's already a copy command in the
+ * tube, because the write data comes out first.
+ */
+void
+rs_tube_write(rs_job_t *job, const void *buf, size_t len)
+{
+ assert(job->copy_len == 0);
+
+ if (len > sizeof(job->write_buf) - job->write_len) {
+ rs_fatal("tube popped when trying to write %ld bytes!",
+ (long) len);
+ }
+
+ memcpy(job->write_buf + job->write_len, buf, len);
+ job->write_len += len;
+}
diff --git a/rsync/types.h b/rsync/types.h
new file mode 100644
index 0000000..47ff97c
--- a/dev/null
+++ b/rsync/types.h
@@ -0,0 +1,36 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+
+#if defined(HAVE_STDINT_H)
+# include <stdint.h>
+#elif SIZEOF_UNSIGNED_INT == 4
+# define uint32_t unsigned int
+#elif SIZEOF_UNSIGNED_LONG == 4
+# define uint32_t unsigned long
+#elif SIZEOF_UNSIGNED_SHORT == 4
+# define uint32_t unsigned short
+#else
+# error "can't find an appropriate 32-bit integer type"
+#endif
+
diff --git a/rsync/util.c b/rsync/util.c
new file mode 100644
index 0000000..f0f3973
--- a/dev/null
+++ b/rsync/util.c
@@ -0,0 +1,70 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+ /*
+ | On heroin, I have all the answers.
+ */
+
+
+#include <config_rsync.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "util.h"
+#include "rsync.h"
+#include "trace.h"
+
+void
+rs_bzero(void *buf, size_t size)
+{
+ memset(buf, 0, size);
+}
+
+
+void *
+rs_alloc_struct0(size_t size, char const *name)
+{
+ void *p;
+
+ if (!(p = malloc(size))) {
+ rs_fatal("couldn't allocate instance of %s", name);
+ }
+ rs_bzero(p, size);
+ return p;
+}
+
+
+
+void *
+rs_alloc(size_t size, char const *name)
+{
+ void *p;
+
+ if (!(p = malloc(size))) {
+ rs_fatal("couldn't allocate instance of %s", name);
+ }
+
+ return p;
+}
diff --git a/rsync/util.h b/rsync/util.h
new file mode 100644
index 0000000..2793256
--- a/dev/null
+++ b/rsync/util.h
@@ -0,0 +1,44 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 1999, 2000, 2001 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1999 by Andrew Tridgell <tridge@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+void * rs_alloc(size_t size, char const *name);
+void *rs_alloc_struct0(size_t size, char const *name);
+
+void rs_bzero(void *buf, size_t size);
+
+
+/*
+ * Allocate and zero-fill an instance of TYPE.
+ */
+#define rs_alloc_struct(type) \
+ ((type *) rs_alloc_struct0(sizeof(type), #type))
+
+
+#ifdef __GNUC__
+# define UNUSED(x) x __attribute__((unused))
+#elif __LCLINT__
+# define UNUSED(x) /*@unused@*/ x
+#else /* !__GNUC__ && !__LCLINT__ */
+# define UNUSED(x) x
+#endif /* !__GNUC__ && !__LCLINT__ */
diff --git a/rsync/version.c b/rsync/version.c
new file mode 100644
index 0000000..a76f826
--- a/dev/null
+++ b/rsync/version.c
@@ -0,0 +1,33 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- dynamic caching and delta update in HTTP
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config_rsync.h>
+
+#include <stdio.h>
+
+#include "rsync.h"
+
+
+/** \brief Library version string. */
+char const rs_librsync_version[] = (PACKAGE " " VERSION);
+
+
diff --git a/rsync/whole.c b/rsync/whole.c
new file mode 100644
index 0000000..153d402
--- a/dev/null
+++ b/rsync/whole.c
@@ -0,0 +1,180 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2000, 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+ /*
+ | Is it possible that software is not
+ | like anything else, that it is meant
+ | to be discarded: that the whole point
+ | is to always see it as a soap bubble?
+ | -- Alan Perlis
+ */
+
+
+
+#include <config_rsync.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <rsync.h>
+
+#include "trace.h"
+#include "fileutil.h"
+#include "sumset.h"
+#include "job.h"
+#include "buf.h"
+#include "whole.h"
+#include "util.h"
+
+/**
+ * Run a job continuously, with input to/from the two specified files.
+ * The job should already be set up, and must be free by the caller
+ * after return.
+ *
+ * Buffers of ::rs_inbuflen and ::rs_outbuflen are allocated for
+ * temporary storage.
+ *
+ * \param in_file Source of input bytes, or NULL if the input buffer
+ * should not be filled.
+ *
+ * \return RS_DONE if the job completed, or otherwise an error result.
+ */
+rs_result
+rs_whole_run(rs_job_t *job, FILE *in_file, FILE *out_file)
+{
+ rs_buffers_t buf;
+ rs_result result;
+ rs_filebuf_t *in_fb = NULL, *out_fb = NULL;
+
+ if (in_file)
+ in_fb = rs_filebuf_new(in_file, rs_inbuflen);
+
+ if (out_file)
+ out_fb = rs_filebuf_new(out_file, rs_outbuflen);
+
+ result = rs_job_drive(job, &buf,
+ in_fb ? rs_infilebuf_fill : NULL, in_fb,
+ out_fb ? rs_outfilebuf_drain : NULL, out_fb);
+
+ if (in_fb)
+ rs_filebuf_free(in_fb);
+
+ if (out_fb)
+ rs_filebuf_free(out_fb);
+
+ return result;
+}
+
+
+
+/**
+ * Generate the signature of a basis file, and write it out to
+ * another.
+ *
+ * \param new_block_len block size for signature generation, in bytes
+ *
+ * \param strong_len truncated length of strong checksums, in bytes
+ *
+ * \sa rs_sig_begin()
+ */
+rs_result
+rs_sig_file(FILE *old_file, FILE *sig_file, size_t new_block_len,
+ size_t strong_len, rs_stats_t *stats)
+{
+ rs_job_t *job;
+ rs_result r;
+
+ job = rs_sig_begin(new_block_len, strong_len);
+ r = rs_whole_run(job, old_file, sig_file);
+ if (stats)
+ memcpy(stats, &job->stats, sizeof *stats);
+ rs_job_free(job);
+
+ return r;
+}
+
+
+/**
+ * Load signatures from a signature file into memory. Return a
+ * pointer to the newly allocated structure in SUMSET.
+ *
+ * \sa rs_readsig_begin()
+ */
+rs_result
+rs_loadsig_file(FILE *sig_file, rs_signature_t **sumset, rs_stats_t *stats)
+{
+ rs_job_t *job;
+ rs_result r;
+
+ job = rs_loadsig_begin(sumset);
+ r = rs_whole_run(job, sig_file, NULL);
+ if (stats)
+ memcpy(stats, &job->stats, sizeof *stats);
+ rs_job_free(job);
+
+ return r;
+}
+
+
+
+rs_result
+rs_delta_file(rs_signature_t *sig, FILE *new_file, FILE *delta_file,
+ rs_stats_t *stats)
+{
+ rs_job_t *job;
+ rs_result r;
+
+ job = rs_delta_begin(sig);
+
+ r = rs_whole_run(job, new_file, delta_file);
+
+ if (stats)
+ memcpy(stats, &job->stats, sizeof *stats);
+
+ rs_job_free(job);
+
+ return r;
+}
+
+
+
+rs_result rs_patch_file(FILE *basis_file, FILE *delta_file, FILE *new_file,
+ rs_stats_t *stats)
+{
+ rs_job_t *job;
+ rs_result r;
+
+ job = rs_patch_begin(rs_file_copy_cb, basis_file);
+
+ r = rs_whole_run(job, delta_file, new_file);
+
+ if (stats)
+ memcpy(stats, &job->stats, sizeof *stats);
+
+ rs_job_free(job);
+
+ return r;
+}
diff --git a/rsync/whole.h b/rsync/whole.h
new file mode 100644
index 0000000..67e54f7
--- a/dev/null
+++ b/rsync/whole.h
@@ -0,0 +1,24 @@
+/*= -*- c-basic-offset: 4; indent-tabs-mode: nil; -*-
+ *
+ * librsync -- the library for network deltas
+ * $Id$
+ *
+ * Copyright (C) 2001 by Martin Pool <mbp@samba.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+rs_result rs_whole_run(rs_job_t *job, FILE *in_file, FILE *out_file);
diff --git a/scripts/README b/scripts/README
new file mode 100644
index 0000000..54295bb
--- a/dev/null
+++ b/scripts/README
@@ -0,0 +1,26 @@
+
+These scripts are for convienence only.
+
+Use them at your own risk.
+
+Especially q_add_variable and q_add_function,
+however when used they should leave behind a backup copy of the
+header file it has tried to modify. Sometimes those two scripts
+find headers that it decides it can't parse and leaves it up to
+the user to edit them manually.
+
+But even still I would highly recommend backing up your files
+or using this in conjuction with some kind of CVS like system.
+
+The script to add a new application is the most useful script
+and creates a very basic QPE app from a template with most of
+the files you need.
+
+Currently these scripts don't integrate with a CVS system and
+add or edit the created/modified files with the repository, you
+have to do that manually, however I have started to make a few
+scripts that are generic repository accessing scripts that
+could be made to work with either p4 or cvs or something else.
+
+John
+
diff --git a/scripts/mkPackages b/scripts/mkPackages
new file mode 100755
index 0000000..5734f1c
--- a/dev/null
+++ b/scripts/mkPackages
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+for i in *.ipk
+do
+ packagename=${i%%_*}
+ #echo >&2 "$packagename..."
+ GOOD=y
+ for other in ${packagename}_*
+ do
+ if [ $i != $other -a $other -nt $i ]
+ then
+ GOOD=
+ break
+ fi
+ done
+ if [ -n "$GOOD" ]
+ then
+ tar xfOz $i ./control.tar.gz | tar xfOz - ./control
+ echo
+ else
+ echo >&2 "Skipped old file: $i ($other is newer)"
+ #mv $i old
+ fi
+done >Packages
diff --git a/scripts/mkconfigs b/scripts/mkconfigs
new file mode 100755
index 0000000..6a2e6a2
--- a/dev/null
+++ b/scripts/mkconfigs
@@ -0,0 +1,9 @@
+#!/usr/bin/perl
+
+system('rm -f configs/linux-*');
+for $p ( split /\s+/, `\$QTDIR/util/scripts/mkconfigs -p qws` ) {
+ system("cp \$QTDIR/$p configs");
+ if ( $ARGV[0] eq '-v' ) {
+ print "$p\n";
+ }
+}
diff --git a/scripts/mkmakefile b/scripts/mkmakefile
new file mode 100755
index 0000000..1d21a2e
--- a/dev/null
+++ b/scripts/mkmakefile
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+if [ $# -lt 1 ]
+then
+ echo "Usage: mkmakefile <dir> ..."
+ exit 1
+fi
+
+while [ $# -gt 0 ]
+do
+ DIR=`echo $1 | sed -e 's/\/$//'`
+ echo "Making $DIR/Makefile.in..."
+ H=`pwd`
+ cd $DIR
+ FILE=`basename $DIR`
+ TMAKEPATH=$QTDIR/tmake:$TMAKEPATH tmake CONFIG+=embedded -t $H/qt/tmake/propagate.t -o Makefile.in $FILE.pro
+ echo "Done."
+ shift
+ cd -
+done
+
+exit 0
+
diff --git a/scripts/pack b/scripts/pack
new file mode 100755
index 0000000..26a530a
--- a/dev/null
+++ b/scripts/pack
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+
+$QTDIR=$ENV{QTDIR};
+$base=`pwd`;
+
+# Directory structure
+system("rm -rf usr-ipaq/lib/qt/*/*");
+system("mkdir -p usr-ipaq/lib/qt/etc/fonts");
+system("mkdir -p usr-ipaq/lib/qt/apps");
+system("mkdir -p usr-ipaq/lib/qt/bin");
+system("mkdir -p usr-ipaq/lib/qt/docs");
+system("mkdir -p usr-ipaq/lib/qt/lib");
+system("mkdir -p usr-ipaq/lib/qt/pics");
+system("mkdir -p usr-ipaq/lib/qt/video");
+
+# The app
+#system("cp single/qpe usr-ipaq/lib/qt/bin/");
+system("cp -r bin usr-ipaq/lib/qt/");
+system("cp -a $QTDIR/lib/libqte.so* usr-ipaq/lib/");
+system("cp -a $QTDIR/lib/libqpe.so* usr-ipaq/lib/");
+
+# Media
+system("cp -r apps usr-ipaq/lib/qt");
+system("cp -a docs usr-ipaq/lib/qt");
+system("cp -r pics usr-ipaq/lib/qt");
+system("cp -r i18n usr-ipaq/lib/qt; rm usr-ipaq/lib/qt/i18n/*/*.po");
+system("cp -r video usr-ipaq/lib/qt");
+system("cp -r sounds usr-ipaq/lib/qt");
+
+# This is for future use when a library will need to be included
+# Library
+# system("cd usr-ipaq/lib/qt/lib ; ".
+# "cp -r $QTDIR/lib/libqte.so.2.2 ./ ; ".
+# "ln -s libqte.so.2.2 libqte.so.2 ; ".
+# "ln -s libqte.so.2.2 libqte.so ; ".
+# "cd -");
+
+# Fonts
+system("cp $QTDIR/etc/fonts/fontdir ".
+ "$QTDIR/etc/fonts/helvetica_* ".
+ "$QTDIR/etc/fonts/fixed_* ".
+ "$QTDIR/etc/fonts/micro_* ".
+ "$QTDIR/etc/fonts/smallsmooth_* ".
+ "$QTDIR/etc/fonts/cyberbit_120_50_t10.qpf ".
+ "$QTDIR/etc/fonts/smoothtimes_{170,100}_50*.qpf ".
+ "usr-ipaq/lib/qt/etc/fonts/");
+system("mkdir -p usr-ipaq/lib/qt/etc/dict/");
+
+# IM files
+system("cp etc/dict/*dawg* usr-ipaq/lib/qt/etc/dict/");
+system("cp -r etc/qimpen usr-ipaq/lib/qt/etc/");
+
+# Themery
+system("cp -r etc/colors usr-ipaq/lib/qt/etc/");
+
+# Clean
+system("find usr-ipaq -name CVS | xargs rm -r");
+system("find usr-ipaq -name '*~' | xargs rm ");
diff --git a/scripts/q_add_application b/scripts/q_add_application
new file mode 100755
index 0000000..f9d259f
--- a/dev/null
+++ b/scripts/q_add_application
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# Script to add a new application to the Qtopia Environment
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+# load the helper functions
+. q_functions
+
+
+if [ $# -lt 2 ]
+then
+echo "Usage: q_add_application NewAppName NewAppsMainClassName [MenuItemName] [Description]"
+print_example_usage
+exit
+fi
+
+
+NEW_APP_NAME=$1
+NEW_CLASS_NAME=$2
+NEW_APP_MENU_NAME=$NEW_CLASS_NAME
+NEW_APP_DESCRIPTION=$NEW_CLASS_NAME
+[ $# -lt 3 ] || NEW_APP_MENU_NAME=$3
+[ $# -lt 4 ] || NEW_APP_DESCRIPTION=$4
+
+
+NEW_APP_FOLDER=$NEW_APP_NAME
+NEW_APP_PRO_FILE="$NEW_APP_NAME".pro
+NEW_APP_DESKTOP_FILE="$NEW_APP_NAME".desktop
+NEW_APP_ICON_FILE="$NEW_APP_NAME"_icon.xpm
+NEW_APP_MAIN_FILE=main.cpp
+NEW_CLASS_HEADER_FILE="$NEW_APP_NAME".h
+NEW_CLASS_SOURCE_FILE="$NEW_APP_NAME".cpp
+NEW_CLASS_HEADER_DEFINE=__`echo $NEW_APP_NAME | tr [a-z] [A-Z]`_H__
+
+
+[ -d $NEW_APP_FOLDER ] || mkdir $NEW_APP_FOLDER
+print_source_file >> $NEW_APP_FOLDER/$NEW_CLASS_SOURCE_FILE
+print_header_file >> $NEW_APP_FOLDER/$NEW_CLASS_HEADER_FILE
+print_main_file >> $NEW_APP_FOLDER/$NEW_APP_MAIN_FILE
+print_pro_file >> $NEW_APP_FOLDER/$NEW_APP_PRO_FILE
+print_desktop_file >> $NEW_APP_FOLDER/$NEW_APP_DESKTOP_FILE
+print_icon_file >> $NEW_APP_FOLDER/$NEW_APP_ICON_FILE
+print_install_file >> $NEW_APP_FOLDER/install
+chmod u+x $NEW_APP_FOLDER/install
+
+
diff --git a/scripts/q_add_class b/scripts/q_add_class
new file mode 100755
index 0000000..6146e1e
--- a/dev/null
+++ b/scripts/q_add_class
@@ -0,0 +1,36 @@
+#!/bin/sh
+#
+# Script to add a new class to an existing application
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+# load the helper functions
+. q_functions
+
+
+if [ $# -lt 2 ]
+then
+echo "Usage: q_add_class ExistingAppName NewClassName"
+print_example_usage
+exit
+fi
+
+
+EXISTING_APP_NAME=$1
+NEW_CLASS_NAME=$2
+
+
+NEW_CLASS_NAME_LOWER=`echo $NEW_CLASS_NAME | tr [A-Z] [a-z]`
+NEW_CLASS_HEADER_FILE="$NEW_CLASS_NAME_LOWER".h
+NEW_CLASS_SOURCE_FILE="$NEW_CLASS_NAME_LOWER".cpp
+NEW_CLASS_HEADER_DEFINE=__`echo $NEW_CLASS_NAME | tr [a-z] [A-Z]`_H__
+EXISTING_PRO_FILE="$EXISTING_APP_NAME".pro
+
+
+print_source_file >> $NEW_CLASS_SOURCE_FILE
+print_header_file >> $NEW_CLASS_HEADER_FILE
+add_class_to_pro_file >> $EXISTING_PRO_FILE
+
+
diff --git a/scripts/q_add_function b/scripts/q_add_function
new file mode 100755
index 0000000..cc14db7
--- a/dev/null
+++ b/scripts/q_add_function
@@ -0,0 +1,88 @@
+#!/bin/sh
+#
+# Script to add a new function to an existing class
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+# load the helper functions
+. q_functions
+
+
+if [ $# -lt 4 ]
+then
+echo "Usage: q_add_function AccessModifier RetType ExistingClassName NewFunctionName ArgList"
+print_example_usage
+exit
+fi
+
+
+ACCESS_MODIFIER=$1
+RET_TYPE=$2
+EXISTING_CLASS_NAME=`echo $3 | cut -d ":" -f 1`
+NEW_FUNCTION_NAME=`echo $3 | cut -d ":" -f 3`
+ARG_LIST=$4
+
+
+EXISTING_CLASS_NAME_LOWER=`echo $EXISTING_CLASS_NAME | tr "[A-Z]" "[a-z]"`
+EXISTING_CLASS_HEADER_FILE="$EXISTING_CLASS_NAME_LOWER".h
+EXISTING_CLASS_SOURCE_FILE="$EXISTING_CLASS_NAME_LOWER".cpp
+ORIGINAL_CLASS_HEADER_FILE="$EXISTING_CLASS_NAME_LOWER".h.orig
+
+
+function print_source_file
+{
+cat << END
+
+
+$RET_TYPE $EXISTING_CLASS_NAME::$NEW_FUNCTION_NAME$ARG_LIST
+{
+}
+END
+}
+
+
+function print_function_definition
+{
+cat << END
+$ACCESS_MODIFIER
+ $RET_TYPE $NEW_FUNCTION_NAME$ARG_LIST;
+END
+}
+
+
+function print_new_header_file
+{
+get_number_of_lines
+get_first_line_of_class_definition
+if [ -z "$LINE" ]
+then
+cat << END
+/*
+ No good, can't find $EXISTING_CLASS_NAME class definition anywhere.
+ You'll have to manually edit the header file to add the
+ following function definition to the $EXISTING_CLASS_NAME class:
+
+END
+print_function_definition
+echo -e "\n*/"
+cat $ORIGINAL_CLASS_HEADER_FILE
+else
+head -n $LINE $ORIGINAL_CLASS_HEADER_FILE
+print_function_definition
+tail -n `expr $LINES - $LINE` $ORIGINAL_CLASS_HEADER_FILE
+fi
+}
+
+
+[ -f $EXISTING_CLASS_HEADER_FILE ] || { echo "file $EXISTING_CLASS_HEADER_FILE not found" ; exit ; }
+
+# Backup file
+mv $EXISTING_CLASS_HEADER_FILE $ORIGINAL_CLASS_HEADER_FILE
+
+
+print_source_file >> $EXISTING_CLASS_SOURCE_FILE
+print_new_header_file >> $EXISTING_CLASS_HEADER_FILE
+
+
diff --git a/scripts/q_add_variable b/scripts/q_add_variable
new file mode 100755
index 0000000..e35b8de
--- a/dev/null
+++ b/scripts/q_add_variable
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# Script to add a new function to an existing class
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+# load the helper functions
+. q_functions
+
+
+if [ $# -lt 3 ]
+then
+echo "Usage: q_add_variable AccessModifier: Type ExistingClassName::NewVariableName"
+print_example_usage
+exit
+fi
+
+
+ACCESS_MODIFIER=$1
+TYPE=$2
+EXISTING_CLASS_NAME=`echo $3 | cut -d ":" -f 1`
+NEW_VARIABLE_NAME=`echo $3 | cut -d ":" -f 3`
+
+
+EXISTING_CLASS_NAME_LOWER=`echo $EXISTING_CLASS_NAME | tr "[A-Z]" "[a-z]"`
+EXISTING_CLASS_HEADER_FILE="$EXISTING_CLASS_NAME_LOWER".h
+ORIGINAL_CLASS_HEADER_FILE="$EXISTING_CLASS_NAME_LOWER".h.orig
+
+
+function print_variable_definition
+{
+cat << END
+$ACCESS_MODIFIER
+ $TYPE $NEW_VARIABLE_NAME;
+END
+}
+
+
+function print_new_header_file
+{
+get_number_of_lines
+get_first_line_of_class_definition
+if [ -z "$LINE" ]
+then
+cat << END
+/*
+ No good, can't find $EXISTING_CLASS_NAME class definition anywhere.
+ You'll have to manually edit the header file to add the
+ following variable definition to the $EXISTING_CLASS_NAME class:
+
+END
+print_variable_definition
+echo -e "\n*/"
+cat $ORIGINAL_CLASS_HEADER_FILE
+else
+head -n $LINE $ORIGINAL_CLASS_HEADER_FILE
+print_variable_definition
+tail -n `expr $LINES - $LINE` $ORIGINAL_CLASS_HEADER_FILE
+fi
+}
+
+
+[ -f $EXISTING_CLASS_HEADER_FILE ] || { echo "file $EXISTING_CLASS_HEADER_FILE not found" ; exit ; }
+# Backup file
+mv $EXISTING_CLASS_HEADER_FILE $ORIGINAL_CLASS_HEADER_FILE
+print_new_header_file >> $EXISTING_CLASS_HEADER_FILE
+
+
diff --git a/scripts/q_cvs_add b/scripts/q_cvs_add
new file mode 100755
index 0000000..693b672
--- a/dev/null
+++ b/scripts/q_cvs_add
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Adds a file to which ever repository is appropriate
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+if [ $P4PORT = "lupinella:866" ]
+then
+ p4 add $@
+else
+ echo Need to put some kind of cvs command here in q_cvs_add !!
+ # cvs add $@
+fi
+
+
diff --git a/scripts/q_cvs_edit b/scripts/q_cvs_edit
new file mode 100755
index 0000000..73a04db
--- a/dev/null
+++ b/scripts/q_cvs_edit
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Adds a file to which ever repository is appropriate
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+if [ $P4PORT = "lupinella:866" ]
+then
+ p4 edit $@
+else
+ echo Need to put some kind of cvs command here in q_cvs_edit !!
+ # cvs edit $@
+fi
+
+
diff --git a/scripts/q_cvs_submit b/scripts/q_cvs_submit
new file mode 100755
index 0000000..6b2b759
--- a/dev/null
+++ b/scripts/q_cvs_submit
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Adds a file to which ever repository is appropriate
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+if [ $P4PORT = "lupinella:866" ]
+then
+ p4 submit $@
+else
+ echo Need to put some kind of cvs command here in q_cvs_submit !!
+ # cvs submit $@
+fi
+
+
diff --git a/scripts/q_functions b/scripts/q_functions
new file mode 100755
index 0000000..cf2c2e1
--- a/dev/null
+++ b/scripts/q_functions
@@ -0,0 +1,232 @@
+#!/bin/sh
+#
+# Common helper functions used by the other scripts
+#
+# Copyright 1999-2000 Trolltech AS. All rights reserved.
+#
+
+
+function print_example_usage
+{
+cat << END
+Example of what you do:
+ ~/qpe$ q_add_application foo Foo MyFooBarApp "A FooBar Application"
+ ~/qpe$ cd foo
+ ~/qpe/foo$ q_add_class foo Bar
+ ~/qpe/foo$ q_add_function public: void Bar::barFoo "( int a, int b )"
+ ~/qpe/foo$ q_add_variable private: int Bar::fooBarInt
+END
+}
+
+
+function print_copyright_header
+{
+cat << END
+/**********************************************************************
+** Copyright (C) 2000 Trolltech AS. All rights reserved.
+**
+** This file is part of Qtopia Environment.
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+** See http://www.trolltech.com/gpl/ for GPL licensing information.
+**
+** Contact info@trolltech.com if any conditions of this licensing are
+** not clear to you.
+**
+**********************************************************************/
+END
+}
+
+
+function print_main_file
+{
+print_copyright_header
+cat << END
+#include <qpeapplication.h>
+#include <qmainwindow.h>
+#include "$NEW_CLASS_HEADER_FILE"
+
+
+int main( int argc, char ** argv )
+{
+ QPEApplication a( argc, argv );
+
+ $NEW_CLASS_NAME *m = new $NEW_CLASS_NAME();
+ a.setMainWidget( m );
+ m->show();
+
+ return a.exec();
+}
+END
+}
+
+
+function print_source_file
+{
+print_copyright_header
+cat << END
+#include <qwidget.h>
+#include <pixmaploader.h>
+#include "$NEW_CLASS_HEADER_FILE"
+
+
+$NEW_CLASS_NAME::$NEW_CLASS_NAME( QWidget *parent=0, const char *name=0, WFlags f = 0) :
+ QWidget( parent, name, f )
+{
+}
+
+
+void $NEW_CLASS_NAME::exampleFunction( )
+{
+}
+END
+}
+
+
+function print_header_file
+{
+print_copyright_header
+cat << END
+#ifndef $NEW_CLASS_HEADER_DEFINE
+#define $NEW_CLASS_HEADER_DEFINE
+
+
+#include <qwidget.h>
+
+
+class $NEW_CLASS_NAME : public QWidget
+{
+Q_OBJECT
+public:
+ $NEW_CLASS_NAME( QWidget *parent=0, const char *name=0, WFlags f = 0);
+protected:
+ void exampleFunction( );
+private:
+ int exampleVariable;
+};
+
+
+#endif // $NEW_CLASS_HEADER_DEFINE
+END
+}
+
+
+function print_pro_file
+{
+cat << END
+TEMPLATE = app
+CONFIG = qt warn_on release
+DESTDIR = ../bin
+HEADERS = $NEW_CLASS_HEADER_FILE
+SOURCES = $NEW_CLASS_SOURCE_FILE $NEW_APP_MAIN_FILE
+INTERFACES =
+INCLUDEPATH += ../library
+DEPENDPATH += ../library
+LIBS += -lqpe
+TARGET = $NEW_APP_NAME
+END
+}
+
+
+function print_install_file
+{
+cat << END
+#!/bin/sh
+if [ a\$QPEDIR = a ]
+then
+echo QPEDIR must be set
+exit
+fi
+[ -f \$QPEDIR/pics/$NEW_APP_ICON_FILE ] || cp $NEW_APP_ICON_FILE \$QPEDIR/pics/
+[ -f \$QPEDIR/apps/$NEW_APP_DESKTOP_FILE ] || cp $NEW_APP_DESKTOP_FILE \$QPEDIR/apps/
+mv \$QPEDIR/Makefile \$QPEDIR/Makefile.orig
+sed "s/APPS=/&$NEW_APP_NAME \\\\\\\\ \\\\
+ /" \$QPEDIR/Makefile.orig >> \$QPEDIR/Makefile
+echo You may wish to move the desktop file in to
+echo an appropriate subdirectory of the menus.
+END
+}
+
+
+function print_desktop_file
+{
+cat << END
+[Desktop Entry]
+Type=Application
+Exec=$NEW_APP_NAME
+Icon=$NEW_APP_ICON_FILE
+Name=$NEW_APP_MENU_NAME
+Comment=$NEW_APP_DESCRIPTION
+END
+}
+
+
+function print_icon_file
+{
+XPM_NAME="$NEW_APP_NAME"_xpm
+cat << END
+/* XPM */
+static char *$XPM_NAME[] = {
+"14 14 3 1",
+" c None",
+". c #000000",
+"a c #FFFFFF",
+" ",
+" aaaaaaaaaaaa ",
+" a..........a ",
+" a..aaaaaa..a ",
+" a.a.aaaa.a.a ",
+" a.aa.aa.aa.a ",
+" a.aaa..aaa.a ",
+" a.aaa..aaa.a ",
+" a.aa.aa.aa.a ",
+" a.a.aaaa.a.a ",
+" a..aaaaaa..a ",
+" a..........a ",
+" aaaaaaaaaaaa ",
+" "};
+END
+}
+
+
+function add_class_to_pro_file
+{
+cat << END
+HEADERS += $NEW_CLASS_HEADER_FILE
+SOURCES += $NEW_CLASS_SOURCE_FILE
+END
+}
+
+
+function get_number_of_lines
+{
+# Get the number of lines in the file
+LINES=`wc -l $ORIGINAL_CLASS_HEADER_FILE | cut -d " " -f 6`
+}
+
+
+function get_first_line_of_class_definition
+{
+# First look for class definition with Q_OBJECT a few lines below
+LINE=`grep -n -A 3 "class $EXISTING_CLASS_NAME " $ORIGINAL_CLASS_HEADER_FILE | grep "Q_OBJECT" | cut -d "-" -f 1`
+if [ -z "$LINE" ]
+then
+# else look for class definition with open brace on same line
+LINE=`grep -n "class $EXISTING_CLASS_NAME.*[{]" $ORIGINAL_CLASS_HEADER_FILE | cut -d ":" -f 1`
+#elif doesn't work here
+fi;if [ -z "$LINE" ]
+then
+# else look for class with open brace a few lines below
+LINE=`grep -n -A 3 "class $EXISTING_CLASS_NAME " $ORIGINAL_CLASS_HEADER_FILE | grep "\-.*[{]" | cut -d "-" -f 1`
+#elif doesn't work here
+fi
+}
+
+
diff --git a/scripts/updateipks b/scripts/updateipks
new file mode 100755
index 0000000..3195f26
--- a/dev/null
+++ b/scripts/updateipks
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+RHOST=qpe.sf.net
+RDIR=/home/groups/q/qp/qpe/htdocs/packages/ipaq/unstable/
+
+NEW=""
+rm -f *.ipk
+ssh $RHOST -C "cd $RDIR; ls *.ipk" >currentipks &
+./mkipks "$@"
+wait # for ssh
+
+for i in *.ipk
+do
+ if grep -q $i currentipks
+ then
+ rm $i
+ else
+ NEW="$NEW $i";
+ fi
+done
+
+if [ -n "$NEW" ]
+then
+ scp $NEW $RHOST:$RDIR
+ rm $NEW
+ ssh $RHOST -C "cd $RDIR; chmod g+w *.ipk; ./mkPackages"
+fi
+
+rm currentipks
diff --git a/sounds/aland01.wav b/sounds/aland01.wav
new file mode 100755
index 0000000..50ecd16
--- a/dev/null
+++ b/sounds/aland01.wav
Binary files differ
diff --git a/sounds/alarm.wav b/sounds/alarm.wav
new file mode 100644
index 0000000..1f5d81d
--- a/dev/null
+++ b/sounds/alarm.wav
Binary files differ
diff --git a/sounds/bang.wav b/sounds/bang.wav
new file mode 100644
index 0000000..7b1a259
--- a/dev/null
+++ b/sounds/bang.wav
Binary files differ
diff --git a/sounds/collide01.wav b/sounds/collide01.wav
new file mode 100644
index 0000000..e416469
--- a/dev/null
+++ b/sounds/collide01.wav
Binary files differ
diff --git a/sounds/crmble01.wav b/sounds/crmble01.wav
new file mode 100755
index 0000000..e67cc28
--- a/dev/null
+++ b/sounds/crmble01.wav
Binary files differ
diff --git a/sounds/doorclos.wav b/sounds/doorclos.wav
new file mode 100644
index 0000000..34514b6
--- a/dev/null
+++ b/sounds/doorclos.wav
Binary files differ
diff --git a/sounds/hit_target01.wav b/sounds/hit_target01.wav
new file mode 100644
index 0000000..8c4b4d2
--- a/dev/null
+++ b/sounds/hit_target01.wav
Binary files differ
diff --git a/sounds/landmine.wav b/sounds/landmine.wav
new file mode 100644
index 0000000..98215ba
--- a/dev/null
+++ b/sounds/landmine.wav
Binary files differ
diff --git a/sounds/level_up.wav b/sounds/level_up.wav
new file mode 100644
index 0000000..4f0d1c2
--- a/dev/null
+++ b/sounds/level_up.wav
Binary files differ
diff --git a/sounds/lose.wav b/sounds/lose.wav
new file mode 100644
index 0000000..9f9c72c
--- a/dev/null
+++ b/sounds/lose.wav
Binary files differ
diff --git a/sounds/ohdear.wav b/sounds/ohdear.wav
new file mode 100644
index 0000000..338ef4b
--- a/dev/null
+++ b/sounds/ohdear.wav
Binary files differ
diff --git a/sounds/qpe-sounds.control b/sounds/qpe-sounds.control
new file mode 100644
index 0000000..14ae8e6
--- a/dev/null
+++ b/sounds/qpe-sounds.control
@@ -0,0 +1,8 @@
+Files: sounds/*.wav
+Priority: required
+Section: qpe/system
+Maintainer: Warwick Allison <warwick@trolltech.com>
+Architecture: arm
+Version: $QPE_VERSION-3
+Description: Basic sounds for Qtopia environment
+ These icons are available to all QPE application.